@agimon-ai/doompi-web 0.0.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +196 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  4. package/dist/bin/serve.cjs +3 -0
  5. package/dist/bin/serve.cjs.map +1 -0
  6. package/dist/bin/serve.d.cts +1 -0
  7. package/dist/bin/serve.d.mts +1 -0
  8. package/dist/bin/serve.mjs +3 -0
  9. package/dist/bin/serve.mjs.map +1 -0
  10. package/dist/bundler.cjs +1 -0
  11. package/dist/bundler.d.cts +2 -0
  12. package/dist/bundler.d.mts +2 -0
  13. package/dist/bundler.mjs +1 -0
  14. package/dist/index.cjs +1 -0
  15. package/dist/index.d.cts +7 -0
  16. package/dist/index.d.mts +7 -0
  17. package/dist/index.mjs +1 -0
  18. package/dist/src/adapters/authRoutes.cjs +2 -0
  19. package/dist/src/adapters/authRoutes.cjs.map +1 -0
  20. package/dist/src/adapters/authRoutes.mjs +2 -0
  21. package/dist/src/adapters/authRoutes.mjs.map +1 -0
  22. package/dist/src/adapters/bundledServer.cjs +2 -0
  23. package/dist/src/adapters/bundledServer.cjs.map +1 -0
  24. package/dist/src/adapters/bundledServer.mjs +2 -0
  25. package/dist/src/adapters/bundledServer.mjs.map +1 -0
  26. package/dist/src/adapters/directoryListing.cjs +2 -0
  27. package/dist/src/adapters/directoryListing.cjs.map +1 -0
  28. package/dist/src/adapters/directoryListing.mjs +2 -0
  29. package/dist/src/adapters/directoryListing.mjs.map +1 -0
  30. package/dist/src/adapters/directorySearch.cjs +3 -0
  31. package/dist/src/adapters/directorySearch.cjs.map +1 -0
  32. package/dist/src/adapters/directorySearch.mjs +3 -0
  33. package/dist/src/adapters/directorySearch.mjs.map +1 -0
  34. package/dist/src/adapters/gitStatus.cjs +2 -0
  35. package/dist/src/adapters/gitStatus.cjs.map +1 -0
  36. package/dist/src/adapters/gitStatus.mjs +2 -0
  37. package/dist/src/adapters/gitStatus.mjs.map +1 -0
  38. package/dist/src/adapters/httpServer.cjs +2 -0
  39. package/dist/src/adapters/httpServer.cjs.map +1 -0
  40. package/dist/src/adapters/httpServer.d.cts +14 -0
  41. package/dist/src/adapters/httpServer.d.cts.map +1 -0
  42. package/dist/src/adapters/httpServer.d.mts +14 -0
  43. package/dist/src/adapters/httpServer.d.mts.map +1 -0
  44. package/dist/src/adapters/httpServer.mjs +2 -0
  45. package/dist/src/adapters/httpServer.mjs.map +1 -0
  46. package/dist/src/adapters/hubProbe.cjs +2 -0
  47. package/dist/src/adapters/hubProbe.cjs.map +1 -0
  48. package/dist/src/adapters/hubProbe.mjs +2 -0
  49. package/dist/src/adapters/hubProbe.mjs.map +1 -0
  50. package/dist/src/adapters/packageApiProxy.cjs +2 -0
  51. package/dist/src/adapters/packageApiProxy.cjs.map +1 -0
  52. package/dist/src/adapters/packageApiProxy.mjs +2 -0
  53. package/dist/src/adapters/packageApiProxy.mjs.map +1 -0
  54. package/dist/src/adapters/piHubService.cjs +2 -0
  55. package/dist/src/adapters/piHubService.cjs.map +1 -0
  56. package/dist/src/adapters/piHubService.mjs +2 -0
  57. package/dist/src/adapters/piHubService.mjs.map +1 -0
  58. package/dist/src/adapters/piWebSocketListener.cjs +2 -0
  59. package/dist/src/adapters/piWebSocketListener.cjs.map +1 -0
  60. package/dist/src/adapters/piWebSocketListener.mjs +2 -0
  61. package/dist/src/adapters/piWebSocketListener.mjs.map +1 -0
  62. package/dist/src/adapters/providerAuth.cjs +2 -0
  63. package/dist/src/adapters/providerAuth.cjs.map +1 -0
  64. package/dist/src/adapters/providerAuth.mjs +2 -0
  65. package/dist/src/adapters/providerAuth.mjs.map +1 -0
  66. package/dist/src/adapters/registryWatcher.cjs +2 -0
  67. package/dist/src/adapters/registryWatcher.cjs.map +1 -0
  68. package/dist/src/adapters/registryWatcher.mjs +2 -0
  69. package/dist/src/adapters/registryWatcher.mjs.map +1 -0
  70. package/dist/src/adapters/serverSpawner.cjs +2 -0
  71. package/dist/src/adapters/serverSpawner.cjs.map +1 -0
  72. package/dist/src/adapters/serverSpawner.mjs +2 -0
  73. package/dist/src/adapters/serverSpawner.mjs.map +1 -0
  74. package/dist/src/adapters/sessionFiles.cjs +3 -0
  75. package/dist/src/adapters/sessionFiles.cjs.map +1 -0
  76. package/dist/src/adapters/sessionFiles.mjs +3 -0
  77. package/dist/src/adapters/sessionFiles.mjs.map +1 -0
  78. package/dist/src/adapters/sessionHub.cjs +2 -0
  79. package/dist/src/adapters/sessionHub.cjs.map +1 -0
  80. package/dist/src/adapters/sessionHub.mjs +2 -0
  81. package/dist/src/adapters/sessionHub.mjs.map +1 -0
  82. package/dist/src/adapters/sessionSocketClient.cjs +2 -0
  83. package/dist/src/adapters/sessionSocketClient.cjs.map +1 -0
  84. package/dist/src/adapters/sessionSocketClient.mjs +2 -0
  85. package/dist/src/adapters/sessionSocketClient.mjs.map +1 -0
  86. package/dist/src/adapters/syncGuard.cjs +2 -0
  87. package/dist/src/adapters/syncGuard.cjs.map +1 -0
  88. package/dist/src/adapters/syncGuard.mjs +2 -0
  89. package/dist/src/adapters/syncGuard.mjs.map +1 -0
  90. package/dist/src/adapters/threadJournals.cjs +2 -0
  91. package/dist/src/adapters/threadJournals.cjs.map +1 -0
  92. package/dist/src/adapters/threadJournals.mjs +2 -0
  93. package/dist/src/adapters/threadJournals.mjs.map +1 -0
  94. package/dist/src/adapters/webBundler.cjs +2 -0
  95. package/dist/src/adapters/webBundler.cjs.map +1 -0
  96. package/dist/src/adapters/webBundler.d.cts +28 -0
  97. package/dist/src/adapters/webBundler.d.cts.map +1 -0
  98. package/dist/src/adapters/webBundler.d.mts +28 -0
  99. package/dist/src/adapters/webBundler.d.mts.map +1 -0
  100. package/dist/src/adapters/webBundler.mjs +2 -0
  101. package/dist/src/adapters/webBundler.mjs.map +1 -0
  102. package/dist/src/adapters/webHubPluginLoader.cjs +2 -0
  103. package/dist/src/adapters/webHubPluginLoader.cjs.map +1 -0
  104. package/dist/src/adapters/webHubPluginLoader.mjs +2 -0
  105. package/dist/src/adapters/webHubPluginLoader.mjs.map +1 -0
  106. package/dist/src/adapters/webHubPlugins.generated.cjs +2 -0
  107. package/dist/src/adapters/webHubPlugins.generated.cjs.map +1 -0
  108. package/dist/src/adapters/webHubPlugins.generated.mjs +2 -0
  109. package/dist/src/adapters/webHubPlugins.generated.mjs.map +1 -0
  110. package/dist/src/adapters/webPluginGenerate.cjs +4 -0
  111. package/dist/src/adapters/webPluginGenerate.cjs.map +1 -0
  112. package/dist/src/adapters/webPluginGenerate.mjs +4 -0
  113. package/dist/src/adapters/webPluginGenerate.mjs.map +1 -0
  114. package/dist/src/adapters/webPluginScan.cjs +2 -0
  115. package/dist/src/adapters/webPluginScan.cjs.map +1 -0
  116. package/dist/src/adapters/webPluginScan.mjs +2 -0
  117. package/dist/src/adapters/webPluginScan.mjs.map +1 -0
  118. package/dist/src/adapters/webPluginVite.cjs +2 -0
  119. package/dist/src/adapters/webPluginVite.cjs.map +1 -0
  120. package/dist/src/adapters/webPluginVite.mjs +2 -0
  121. package/dist/src/adapters/webPluginVite.mjs.map +1 -0
  122. package/dist/src/services/directoryMatch.cjs +2 -0
  123. package/dist/src/services/directoryMatch.cjs.map +1 -0
  124. package/dist/src/services/directoryMatch.mjs +2 -0
  125. package/dist/src/services/directoryMatch.mjs.map +1 -0
  126. package/dist/src/services/fileMatch.cjs +2 -0
  127. package/dist/src/services/fileMatch.cjs.map +1 -0
  128. package/dist/src/services/fileMatch.mjs +2 -0
  129. package/dist/src/services/fileMatch.mjs.map +1 -0
  130. package/dist/src/services/fileMedia.cjs +2 -0
  131. package/dist/src/services/fileMedia.cjs.map +1 -0
  132. package/dist/src/services/fileMedia.mjs +2 -0
  133. package/dist/src/services/fileMedia.mjs.map +1 -0
  134. package/dist/src/services/frameRing.cjs +2 -0
  135. package/dist/src/services/frameRing.cjs.map +1 -0
  136. package/dist/src/services/frameRing.mjs +2 -0
  137. package/dist/src/services/frameRing.mjs.map +1 -0
  138. package/dist/src/services/journalTail.cjs +3 -0
  139. package/dist/src/services/journalTail.cjs.map +1 -0
  140. package/dist/src/services/journalTail.mjs +3 -0
  141. package/dist/src/services/journalTail.mjs.map +1 -0
  142. package/dist/src/services/loginFlow.cjs +2 -0
  143. package/dist/src/services/loginFlow.cjs.map +1 -0
  144. package/dist/src/services/loginFlow.mjs +2 -0
  145. package/dist/src/services/loginFlow.mjs.map +1 -0
  146. package/dist/src/services/registryStore.cjs +2 -0
  147. package/dist/src/services/registryStore.cjs.map +1 -0
  148. package/dist/src/services/registryStore.mjs +2 -0
  149. package/dist/src/services/registryStore.mjs.map +1 -0
  150. package/dist/src/services/retryPolicy.cjs +2 -0
  151. package/dist/src/services/retryPolicy.cjs.map +1 -0
  152. package/dist/src/services/retryPolicy.mjs +2 -0
  153. package/dist/src/services/retryPolicy.mjs.map +1 -0
  154. package/dist/src/services/serveOptions.cjs +2 -0
  155. package/dist/src/services/serveOptions.cjs.map +1 -0
  156. package/dist/src/services/serveOptions.d.cts +21 -0
  157. package/dist/src/services/serveOptions.d.cts.map +1 -0
  158. package/dist/src/services/serveOptions.d.mts +21 -0
  159. package/dist/src/services/serveOptions.d.mts.map +1 -0
  160. package/dist/src/services/serveOptions.mjs +2 -0
  161. package/dist/src/services/serveOptions.mjs.map +1 -0
  162. package/dist/src/services/sessionFraming.cjs +4 -0
  163. package/dist/src/services/sessionFraming.cjs.map +1 -0
  164. package/dist/src/services/sessionFraming.mjs +4 -0
  165. package/dist/src/services/sessionFraming.mjs.map +1 -0
  166. package/dist/src/services/sessionPresence.cjs +2 -0
  167. package/dist/src/services/sessionPresence.cjs.map +1 -0
  168. package/dist/src/services/sessionPresence.mjs +2 -0
  169. package/dist/src/services/sessionPresence.mjs.map +1 -0
  170. package/dist/src/services/staticAssets.cjs +2 -0
  171. package/dist/src/services/staticAssets.cjs.map +1 -0
  172. package/dist/src/services/staticAssets.mjs +2 -0
  173. package/dist/src/services/staticAssets.mjs.map +1 -0
  174. package/dist/src/services/webDevRoots.cjs +2 -0
  175. package/dist/src/services/webDevRoots.cjs.map +1 -0
  176. package/dist/src/services/webDevRoots.mjs +2 -0
  177. package/dist/src/services/webDevRoots.mjs.map +1 -0
  178. package/dist/src/services/webPluginManifest.cjs +2 -0
  179. package/dist/src/services/webPluginManifest.cjs.map +1 -0
  180. package/dist/src/services/webPluginManifest.mjs +2 -0
  181. package/dist/src/services/webPluginManifest.mjs.map +1 -0
  182. package/dist/src/types/auth.cjs +2 -0
  183. package/dist/src/types/auth.cjs.map +1 -0
  184. package/dist/src/types/auth.d.cts +94 -0
  185. package/dist/src/types/auth.d.cts.map +1 -0
  186. package/dist/src/types/auth.d.mts +94 -0
  187. package/dist/src/types/auth.d.mts.map +1 -0
  188. package/dist/src/types/auth.mjs +2 -0
  189. package/dist/src/types/auth.mjs.map +1 -0
  190. package/dist/src/types/bridge.d.cts +31 -0
  191. package/dist/src/types/bridge.d.cts.map +1 -0
  192. package/dist/src/types/bridge.d.mts +31 -0
  193. package/dist/src/types/bridge.d.mts.map +1 -0
  194. package/dist/src/types/hub.cjs +2 -0
  195. package/dist/src/types/hub.cjs.map +1 -0
  196. package/dist/src/types/hub.d.cts +58 -0
  197. package/dist/src/types/hub.d.cts.map +1 -0
  198. package/dist/src/types/hub.d.mts +58 -0
  199. package/dist/src/types/hub.d.mts.map +1 -0
  200. package/dist/src/types/hub.mjs +2 -0
  201. package/dist/src/types/hub.mjs.map +1 -0
  202. package/dist/src/types/media.cjs +2 -0
  203. package/dist/src/types/media.cjs.map +1 -0
  204. package/dist/src/types/media.mjs +2 -0
  205. package/dist/src/types/media.mjs.map +1 -0
  206. package/dist/src/types/registry.cjs +1 -0
  207. package/dist/src/types/registry.d.cts +2 -0
  208. package/dist/src/types/registry.d.mts +2 -0
  209. package/dist/src/types/registry.mjs +1 -0
  210. package/dist/src/types/session.cjs +2 -0
  211. package/dist/src/types/session.cjs.map +1 -0
  212. package/dist/src/types/session.d.cts +24 -0
  213. package/dist/src/types/session.d.cts.map +1 -0
  214. package/dist/src/types/session.d.mts +24 -0
  215. package/dist/src/types/session.d.mts.map +1 -0
  216. package/dist/src/types/session.mjs +2 -0
  217. package/dist/src/types/session.mjs.map +1 -0
  218. package/dist/web/apple-touch-icon.png +0 -0
  219. package/dist/web/assets/index-Cg52ngKv.css +2 -0
  220. package/dist/web/assets/index-DQO7NTIP.js +90 -0
  221. package/dist/web/assets/index-DQO7NTIP.js.map +1 -0
  222. package/dist/web/favicon-16.png +0 -0
  223. package/dist/web/favicon-32.png +0 -0
  224. package/dist/web/favicon.ico +0 -0
  225. package/dist/web/favicon.svg +16 -0
  226. package/dist/web/icon-512.png +0 -0
  227. package/dist/web/index.html +17 -0
  228. package/llms.txt +8 -0
  229. package/package.json +106 -0
  230. package/src/adapters/authRoutes.ts +95 -0
  231. package/src/adapters/bundledServer.ts +64 -0
  232. package/src/adapters/directoryListing.ts +127 -0
  233. package/src/adapters/directorySearch.ts +124 -0
  234. package/src/adapters/gitStatus.ts +27 -0
  235. package/src/adapters/httpServer.ts +556 -0
  236. package/src/adapters/hubProbe.ts +27 -0
  237. package/src/adapters/packageApiProxy.ts +60 -0
  238. package/src/adapters/piHubService.ts +129 -0
  239. package/src/adapters/piWebSocketListener.ts +98 -0
  240. package/src/adapters/providerAuth.ts +181 -0
  241. package/src/adapters/registryWatcher.ts +112 -0
  242. package/src/adapters/serverSpawner.ts +181 -0
  243. package/src/adapters/sessionFiles.ts +99 -0
  244. package/src/adapters/sessionHub.ts +567 -0
  245. package/src/adapters/sessionSocketClient.ts +105 -0
  246. package/src/adapters/syncGuard.ts +119 -0
  247. package/src/adapters/threadJournals.ts +184 -0
  248. package/src/adapters/webBundler.ts +83 -0
  249. package/src/adapters/webHubPluginLoader.ts +67 -0
  250. package/src/adapters/webHubPlugins.generated.ts +4 -0
  251. package/src/adapters/webPluginGenerate.ts +172 -0
  252. package/src/adapters/webPluginScan.ts +62 -0
  253. package/src/adapters/webPluginVite.ts +51 -0
  254. package/src/bin/serve.ts +64 -0
  255. package/src/exports/bundler.ts +1 -0
  256. package/src/exports/index.ts +9 -0
  257. package/src/services/directoryMatch.ts +71 -0
  258. package/src/services/fileMatch.ts +37 -0
  259. package/src/services/fileMedia.ts +27 -0
  260. package/src/services/frameRing.ts +33 -0
  261. package/src/services/journalTail.ts +47 -0
  262. package/src/services/loginFlow.ts +144 -0
  263. package/src/services/registryStore.ts +83 -0
  264. package/src/services/retryPolicy.ts +15 -0
  265. package/src/services/serveOptions.ts +63 -0
  266. package/src/services/sessionFraming.ts +32 -0
  267. package/src/services/sessionPresence.ts +131 -0
  268. package/src/services/staticAssets.ts +37 -0
  269. package/src/services/webDevRoots.ts +36 -0
  270. package/src/services/webPluginManifest.ts +149 -0
  271. package/src/types/auth.ts +118 -0
  272. package/src/types/bridge.ts +41 -0
  273. package/src/types/hub.ts +290 -0
  274. package/src/types/media.ts +38 -0
  275. package/src/types/registry.ts +2 -0
  276. package/src/types/session.ts +36 -0
  277. package/src/web/app/Providers.tsx +46 -0
  278. package/src/web/app/protocolRuntime.ts +106 -0
  279. package/src/web/app/sessionRuntime.ts +189 -0
  280. package/src/web/app/webPlugins.generated.ts +4 -0
  281. package/src/web/components/MascotMark.tsx +46 -0
  282. package/src/web/components/PluginSurface.tsx +10 -0
  283. package/src/web/components/ToolRendererBoundary.tsx +32 -0
  284. package/src/web/features/activity/ActivityDock.tsx +125 -0
  285. package/src/web/features/connection/RefusedCard.tsx +63 -0
  286. package/src/web/features/dialogs/DialogOverlay.tsx +176 -0
  287. package/src/web/features/leader/CommandPalette.tsx +386 -0
  288. package/src/web/features/selection/SelectionBar.tsx +529 -0
  289. package/src/web/features/session/Composer.tsx +368 -0
  290. package/src/web/features/session/MentionPreviews.tsx +58 -0
  291. package/src/web/features/session/ThreadView.tsx +35 -0
  292. package/src/web/features/session/Timeline.tsx +382 -0
  293. package/src/web/features/session/ToolCard.tsx +79 -0
  294. package/src/web/features/sessions/NewSessionDialog.tsx +222 -0
  295. package/src/web/features/sessions/SessionRail.tsx +411 -0
  296. package/src/web/features/settings/AppearanceSettings.tsx +88 -0
  297. package/src/web/features/settings/LoginFlowDialog.tsx +221 -0
  298. package/src/web/features/settings/PluginSettings.tsx +92 -0
  299. package/src/web/features/settings/ProviderSettings.tsx +238 -0
  300. package/src/web/features/settings/SettingsMenu.tsx +32 -0
  301. package/src/web/features/status/TopBar.tsx +208 -0
  302. package/src/web/index.html +16 -0
  303. package/src/web/lib/authApi.ts +90 -0
  304. package/src/web/lib/commands.ts +61 -0
  305. package/src/web/lib/composition.ts +225 -0
  306. package/src/web/lib/fileMentions.ts +32 -0
  307. package/src/web/lib/hubApi.ts +86 -0
  308. package/src/web/lib/leaderTree.ts +159 -0
  309. package/src/web/lib/piTransport.ts +61 -0
  310. package/src/web/lib/pluginRegistry.ts +488 -0
  311. package/src/web/lib/pluginSlotProps.ts +50 -0
  312. package/src/web/lib/promptFocus.ts +25 -0
  313. package/src/web/lib/protocolTimeline.ts +73 -0
  314. package/src/web/lib/sessionModel.ts +673 -0
  315. package/src/web/lib/sessionSummary.ts +58 -0
  316. package/src/web/lib/settingsSections.ts +21 -0
  317. package/src/web/lib/statusLine.ts +90 -0
  318. package/src/web/lib/threadRenderer.ts +25 -0
  319. package/src/web/lib/toolMessageProps.ts +21 -0
  320. package/src/web/lib/transport.ts +30 -0
  321. package/src/web/lib/wsClient.ts +73 -0
  322. package/src/web/main.tsx +17 -0
  323. package/src/web/public/apple-touch-icon.png +0 -0
  324. package/src/web/public/favicon-16.png +0 -0
  325. package/src/web/public/favicon-32.png +0 -0
  326. package/src/web/public/favicon.ico +0 -0
  327. package/src/web/public/favicon.svg +16 -0
  328. package/src/web/public/icon-512.png +0 -0
  329. package/src/web/routes/CockpitPage.tsx +98 -0
  330. package/src/web/routes/SettingsPage.tsx +60 -0
  331. package/src/web/routes/routeTree.tsx +49 -0
  332. package/src/web/stores/menuStore.ts +78 -0
  333. package/src/web/stores/paletteStore.ts +25 -0
  334. package/src/web/stores/sessionStore.ts +303 -0
  335. package/src/web/stores/sessionsStore.ts +155 -0
  336. package/src/web/stores/themeStore.ts +52 -0
  337. package/src/web/stores/threadStore.ts +68 -0
  338. package/src/web/stores/transientTabsStore.ts +63 -0
  339. package/src/web/stores/uiStore.ts +28 -0
  340. package/src/web/stores/useOpenTab.ts +19 -0
  341. package/src/web/stores/usePluginSlotProps.ts +22 -0
  342. package/src/web/styles/app.css +15 -0
  343. package/src/web/styles/webPluginSources.generated.css +1 -0
  344. package/src/web/vite-env.d.ts +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub.mjs","names":[],"sources":["../../../src/types/hub.ts"],"sourcesContent":["import type { BridgeState, SessionFrame } from './session.ts';\n\n/**\n * Wire vocabulary between the hub and its pages.\n *\n * One WebSocket carries every session: hub-level frames describe the set of\n * sessions, and session-scoped traffic travels enveloped with the session id.\n * Field naming follows @earendil-works/pi-protocol so a future swap to the\n * upstream session server stays a transport change, not a rename.\n */\nexport const HUB_PROTOCOL_VERSION = 1;\n\n/** Role marker in the health payload; doompi-server probes for it before binding the port. */\nexport const HUB_ROLE = 'hub';\n\n/** REST endpoint for creating sessions; the page posts {cwd, name?} and receives {sessionId}. */\nexport const SESSIONS_API_ROUTE = '/api/sessions';\n\n/**\n * REST endpoint behind the new-session directory picker; the page sends the\n * typed path as ?q= and receives {directories}: the children of the parent\n * directory whose names match the trailing segment as a regular expression.\n */\nexport const DIRECTORIES_API_ROUTE = '/api/directories';\n\n/**\n * Query parameter that routes a package API request to one session's server.\n * Without it the request is answered by a hub-scoped API in this process.\n */\nexport const API_SESSION_QUERY_PARAM = 'session';\n\n/** What the agent is doing right now, derived from its frame stream. */\nexport type SessionPhase = 'idle' | 'turn' | 'compaction' | 'retry';\n\nexport interface SessionGitStatus {\n branch: string;\n /** True when the working tree has uncommitted changes; rendered as a star. */\n dirty: boolean;\n}\n\n/**\n * Everything the rail needs to render one session without subscribing to it.\n */\nexport interface SessionSummary {\n id: string;\n name: string;\n cwd: string;\n /** ISO 8601, from the session's registry record. */\n createdAt: string;\n /** ISO 8601, bumped whenever the session's frame stream moves. */\n updatedAt: string;\n phase: SessionPhase;\n /** ISO 8601 timestamp of the last phase change; drives \"running · 12m\". */\n phaseSince: string;\n /** The hub's own attachment to the session socket. */\n attach: BridgeState;\n /** Human-readable cause, present when attach is refused or closed. */\n attachReason?: string;\n pendingMessageCount: number;\n /** False until the first prompt is forwarded; \"fresh session · nothing sent yet\". */\n everPrompted: boolean;\n /** True while the agent waits on a dialog answer; \"waiting for your input\". */\n awaitingInput: boolean;\n /** ISO 8601 of the last settled run, once one finished. */\n lastSettledAt?: string;\n /** Shown in the refused overlay so the user can find the competing client. */\n socketPath: string;\n /** Where this session serves its package APIs, when it serves any; the hub proxies there. */\n apiSocketPath?: string;\n /** Omitted when the cwd is not a git repository or git is unavailable. */\n git?: SessionGitStatus;\n}\n\n/**\n * Per-plugin session data travels as ChannelFrame: the channel name is the\n * frame type and the payload shape belongs to the plugin. Re-exported so in-package code keeps importing wire shapes\n * from this one root.\n */\nexport type { ChannelFrame } from '@agimon-ai/doompi-web-contracts';\n\nexport const HUB_HELLO_TYPE = 'hub_hello';\nexport const SESSIONS_SNAPSHOT_TYPE = 'sessions_snapshot';\nexport const SESSION_UPSERT_TYPE = 'session_upsert';\nexport const SESSION_REMOVED_TYPE = 'session_removed';\nexport const SESSION_BACKLOG_TYPE = 'session_backlog';\nexport const SESSION_FRAME_TYPE = 'session_frame';\n/** Hub-synthesized close for an answered dialog; Pi itself never announces one. */\nexport const DIALOG_ANSWERED_TYPE = 'extension_ui_answered';\n/**\n * Sync rebuilt the artifacts this page is running against.\n *\n * The plugin bundle the browser loaded is one of them, and a bundle only\n * changes on disk: nothing about the running page notices. The page reloads\n * itself rather than staying on surfaces the repository no longer describes.\n */\nexport const HUB_RESYNCED_TYPE = 'hub_resynced';\n\n/**\n * The custom session entry the DoomPi runtime journals with its minor-mode\n * catalog projection; it arrives inside Pi's entry_appended frames. The shape\n * mirrors MinorModeProjection in doompi-extension-contracts.\n */\nexport const MINOR_MODE_ENTRY_TYPE = 'doom-minor-modes';\n\nexport interface MinorModeActionProjection {\n id: string;\n label: string;\n description: string;\n enabled: boolean;\n disabledReason?: string;\n needsInput: boolean;\n}\n\nexport interface MinorModeRecordProjection {\n id: string;\n label: string;\n description: string;\n order: number;\n activation: 'inactive' | 'activating' | 'active' | 'deactivating';\n condition: string;\n detail?: string;\n actions: MinorModeActionProjection[];\n}\n\nexport interface MinorModeProjection {\n version: 1;\n revision: number;\n modes: MinorModeRecordProjection[];\n}\nexport const SUBSCRIBE_TYPE = 'subscribe';\nexport const UNSUBSCRIBE_TYPE = 'unsubscribe';\nexport const SESSION_COMMAND_TYPE = 'session_command';\n/** A page follows one thread of a session: a journal a plugin's hub source names, such as a subagent run. */\nexport const SUBSCRIBE_THREAD_TYPE = 'subscribe_thread';\nexport const UNSUBSCRIBE_THREAD_TYPE = 'unsubscribe_thread';\nexport const THREAD_BACKLOG_TYPE = 'thread_backlog';\nexport const THREAD_FRAME_TYPE = 'thread_frame';\n\n/** A page asks for the transcript before what it already holds. */\nexport const HISTORY_REQUEST_TYPE = 'history_request';\n/** One older window, oldest first, answering a history_request. */\nexport const HISTORY_PAGE_TYPE = 'history_page';\n\n/**\n * How many journalled messages one page carries. Small enough that prepending\n * a window never blocks the reader's scroll, large enough that a flick through\n * a long transcript does not turn into a hundred round trips.\n */\nexport const HISTORY_PAGE_SIZE = 100;\n\nexport interface HistoryRequestFrame {\n type: typeof HISTORY_REQUEST_TYPE;\n sessionId: string;\n /** Journal id of the oldest entry the page holds; absent asks for the newest window. */\n before?: string;\n limit?: number;\n}\n\nexport interface HistoryPageFrame {\n type: typeof HISTORY_PAGE_TYPE;\n sessionId: string;\n /** Entry frames, oldest first, to prepend above what the page holds. */\n frames: Record<string, unknown>[];\n /** The cursor for the next older window; null when the transcript starts here. */\n cursor: string | null;\n /** Whether anything older than this window exists. */\n hasMore: boolean;\n /** Echoed so a page can drop an answer to a question it has since abandoned. */\n before?: string;\n}\n\n/** First frame on every page socket, before the snapshot. */\nexport interface HubHelloFrame {\n type: typeof HUB_HELLO_TYPE;\n protocol: number;\n /** Frame types of the hub's loaded data channels; lets a panel tell \"plugin server not installed\" from \"no data\". */\n channels: string[];\n}\n\nexport interface SessionsSnapshotFrame {\n type: typeof SESSIONS_SNAPSHOT_TYPE;\n sessions: SessionSummary[];\n}\n\nexport interface SessionUpsertFrame {\n type: typeof SESSION_UPSERT_TYPE;\n session: SessionSummary;\n}\n\nexport interface SessionRemovedFrame {\n type: typeof SESSION_REMOVED_TYPE;\n sessionId: string;\n}\n\n/** Reply to subscribe: recent history from the hub's ring, then live frames follow. */\nexport interface SessionBacklogFrame {\n type: typeof SESSION_BACKLOG_TYPE;\n sessionId: string;\n frames: SessionFrame[];\n /** Frames the bounded ring had to discard before this page subscribed. */\n dropped: number;\n}\n\n/** One live agent frame, addressed to subscribers of its session. */\nexport interface SessionFrameEnvelope {\n type: typeof SESSION_FRAME_TYPE;\n sessionId: string;\n frame: SessionFrame;\n}\n\nexport interface SubscribeFrame {\n type: typeof SUBSCRIBE_TYPE;\n sessionId: string;\n}\n\nexport interface UnsubscribeFrame {\n type: typeof UNSUBSCRIBE_TYPE;\n sessionId: string;\n}\n\n/** One command frame from the page, addressed to a session's agent. */\nexport interface SessionCommandFrame {\n type: typeof SESSION_COMMAND_TYPE;\n sessionId: string;\n frame: SessionFrame;\n}\n\nexport function hubHello(channels: string[]): HubHelloFrame {\n return { type: HUB_HELLO_TYPE, protocol: HUB_PROTOCOL_VERSION, channels };\n}\n\nexport function sessionFrameEnvelope(sessionId: string, frame: SessionFrame): SessionFrameEnvelope {\n return { type: SESSION_FRAME_TYPE, sessionId, frame };\n}\n\nexport function sessionCommand(sessionId: string, frame: SessionFrame): SessionCommandFrame {\n return { type: SESSION_COMMAND_TYPE, sessionId, frame };\n}\n\nexport function subscribeFrame(sessionId: string): SubscribeFrame {\n return { type: SUBSCRIBE_TYPE, sessionId };\n}\n\nexport function unsubscribeFrame(sessionId: string): UnsubscribeFrame {\n return { type: UNSUBSCRIBE_TYPE, sessionId };\n}\n\nexport interface SubscribeThreadFrame {\n type: typeof SUBSCRIBE_THREAD_TYPE;\n sessionId: string;\n threadId: string;\n}\n\nexport interface UnsubscribeThreadFrame {\n type: typeof UNSUBSCRIBE_THREAD_TYPE;\n sessionId: string;\n threadId: string;\n}\n\n/** Reply to subscribe_thread: the journal's newest entries as entry_appended frames, then live ones follow. */\nexport interface ThreadBacklogFrame {\n type: typeof THREAD_BACKLOG_TYPE;\n sessionId: string;\n threadId: string;\n frames: SessionFrame[];\n}\n\n/** One journal entry a followed thread gained, addressed to the pages following it. */\nexport interface ThreadFrameEnvelope {\n type: typeof THREAD_FRAME_TYPE;\n sessionId: string;\n threadId: string;\n frame: SessionFrame;\n}\n\nexport function subscribeThreadFrame(sessionId: string, threadId: string): SubscribeThreadFrame {\n return { type: SUBSCRIBE_THREAD_TYPE, sessionId, threadId };\n}\n\nexport function unsubscribeThreadFrame(sessionId: string, threadId: string): UnsubscribeThreadFrame {\n return { type: UNSUBSCRIBE_THREAD_TYPE, sessionId, threadId };\n}\n\nexport function threadBacklog(sessionId: string, threadId: string, frames: SessionFrame[]): ThreadBacklogFrame {\n return { type: THREAD_BACKLOG_TYPE, sessionId, threadId, frames };\n}\n\nexport function threadFrameEnvelope(sessionId: string, threadId: string, frame: SessionFrame): ThreadFrameEnvelope {\n return { type: THREAD_FRAME_TYPE, sessionId, threadId, frame };\n}\n"],"mappings":"AAUA,MAAa,EAAuB,EAGvB,EAAW,MAGX,EAAqB,gBAOrB,EAAwB,mBAMxB,EAA0B,UAmD1B,EAAiB,YACjB,EAAyB,oBACzB,EAAsB,iBACtB,EAAuB,kBACvB,EAAuB,kBACvB,EAAqB,gBAErB,EAAuB,wBAQvB,EAAoB,eAOpB,EAAwB,mBA2BxB,EAAiB,YACjB,EAAmB,cACnB,EAAuB,kBAEvB,EAAwB,mBACxB,EAA0B,qBAC1B,EAAsB,iBACtB,EAAoB,eAGpB,EAAuB,kBAEvB,EAAoB,eAsFjC,SAAgB,EAAS,EAAmC,CAC1D,MAAO,CAAE,KAAM,EAAgB,SAAA,EAAgC,UAAS,CAC1E,CAEA,SAAgB,EAAqB,EAAmB,EAA2C,CACjG,MAAO,CAAE,KAAM,EAAoB,YAAW,OAAM,CACtD,CAkDA,SAAgB,EAAc,EAAmB,EAAkB,EAA4C,CAC7G,MAAO,CAAE,KAAM,EAAqB,YAAW,WAAU,QAAO,CAClE,CAEA,SAAgB,EAAoB,EAAmB,EAAkB,EAA0C,CACjH,MAAO,CAAE,KAAM,EAAmB,YAAW,WAAU,OAAM,CAC/D"}
@@ -0,0 +1,2 @@
1
+ const e={avif:{kind:`image`,contentType:`image/avif`},bmp:{kind:`image`,contentType:`image/bmp`},gif:{kind:`image`,contentType:`image/gif`},jpeg:{kind:`image`,contentType:`image/jpeg`},jpg:{kind:`image`,contentType:`image/jpeg`},png:{kind:`image`,contentType:`image/png`},svg:{kind:`image`,contentType:`image/svg+xml`},webp:{kind:`image`,contentType:`image/webp`},m4v:{kind:`video`,contentType:`video/mp4`},mov:{kind:`video`,contentType:`video/quicktime`},mp4:{kind:`video`,contentType:`video/mp4`},webm:{kind:`video`,contentType:`video/webm`},pdf:{kind:`pdf`,contentType:`application/pdf`}};exports.MAX_SESSION_FILE_BYTES=26214400,exports.MEDIA_TYPES=e,exports.SESSION_FILE_ROUTE=`/api/sessions/:sessionId/file`;
2
+ //# sourceMappingURL=media.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.cjs","names":[],"sources":["../../../src/types/media.ts"],"sourcesContent":["/**\n * How the cockpit previews a file a message mentions: the hub serves it from\n * the session's working directory and the timeline picks the element by\n * kind. Anything not listed here is offered as a plain file link.\n */\nexport type MediaKind = 'image' | 'video' | 'pdf';\n\nexport interface MediaType {\n kind: MediaKind;\n contentType: string;\n}\n\n/** Keyed by lower-case extension without the dot. */\nexport const MEDIA_TYPES: Readonly<Record<string, MediaType>> = {\n avif: { kind: 'image', contentType: 'image/avif' },\n bmp: { kind: 'image', contentType: 'image/bmp' },\n gif: { kind: 'image', contentType: 'image/gif' },\n jpeg: { kind: 'image', contentType: 'image/jpeg' },\n jpg: { kind: 'image', contentType: 'image/jpeg' },\n png: { kind: 'image', contentType: 'image/png' },\n svg: { kind: 'image', contentType: 'image/svg+xml' },\n webp: { kind: 'image', contentType: 'image/webp' },\n m4v: { kind: 'video', contentType: 'video/mp4' },\n mov: { kind: 'video', contentType: 'video/quicktime' },\n mp4: { kind: 'video', contentType: 'video/mp4' },\n webm: { kind: 'video', contentType: 'video/webm' },\n pdf: { kind: 'pdf', contentType: 'application/pdf' },\n};\n\n/** The hub refuses to serve a mentioned file past this size. */\nexport const MAX_SESSION_FILE_BYTES = 25 * 1024 * 1024;\n\n/** The route the timeline fetches a mentioned file from; path is the cwd-relative file. */\nexport const SESSION_FILE_ROUTE = '/api/sessions/:sessionId/file';\n\nexport function sessionFileUrl(sessionId: string, relativePath: string): string {\n return `/api/sessions/${encodeURIComponent(sessionId)}/file?path=${encodeURIComponent(relativePath)}`;\n}\n"],"mappings":"AAaA,MAAa,EAAmD,CAC9D,KAAM,CAAE,KAAM,QAAS,YAAa,YAAa,EACjD,IAAK,CAAE,KAAM,QAAS,YAAa,WAAY,EAC/C,IAAK,CAAE,KAAM,QAAS,YAAa,WAAY,EAC/C,KAAM,CAAE,KAAM,QAAS,YAAa,YAAa,EACjD,IAAK,CAAE,KAAM,QAAS,YAAa,YAAa,EAChD,IAAK,CAAE,KAAM,QAAS,YAAa,WAAY,EAC/C,IAAK,CAAE,KAAM,QAAS,YAAa,eAAgB,EACnD,KAAM,CAAE,KAAM,QAAS,YAAa,YAAa,EACjD,IAAK,CAAE,KAAM,QAAS,YAAa,WAAY,EAC/C,IAAK,CAAE,KAAM,QAAS,YAAa,iBAAkB,EACrD,IAAK,CAAE,KAAM,QAAS,YAAa,WAAY,EAC/C,KAAM,CAAE,KAAM,QAAS,YAAa,YAAa,EACjD,IAAK,CAAE,KAAM,MAAO,YAAa,iBAAkB,CACrD"}
@@ -0,0 +1,2 @@
1
+ const e={avif:{kind:`image`,contentType:`image/avif`},bmp:{kind:`image`,contentType:`image/bmp`},gif:{kind:`image`,contentType:`image/gif`},jpeg:{kind:`image`,contentType:`image/jpeg`},jpg:{kind:`image`,contentType:`image/jpeg`},png:{kind:`image`,contentType:`image/png`},svg:{kind:`image`,contentType:`image/svg+xml`},webp:{kind:`image`,contentType:`image/webp`},m4v:{kind:`video`,contentType:`video/mp4`},mov:{kind:`video`,contentType:`video/quicktime`},mp4:{kind:`video`,contentType:`video/mp4`},webm:{kind:`video`,contentType:`video/webm`},pdf:{kind:`pdf`,contentType:`application/pdf`}},t=26214400,n=`/api/sessions/:sessionId/file`;export{t as MAX_SESSION_FILE_BYTES,e as MEDIA_TYPES,n as SESSION_FILE_ROUTE};
2
+ //# sourceMappingURL=media.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.mjs","names":[],"sources":["../../../src/types/media.ts"],"sourcesContent":["/**\n * How the cockpit previews a file a message mentions: the hub serves it from\n * the session's working directory and the timeline picks the element by\n * kind. Anything not listed here is offered as a plain file link.\n */\nexport type MediaKind = 'image' | 'video' | 'pdf';\n\nexport interface MediaType {\n kind: MediaKind;\n contentType: string;\n}\n\n/** Keyed by lower-case extension without the dot. */\nexport const MEDIA_TYPES: Readonly<Record<string, MediaType>> = {\n avif: { kind: 'image', contentType: 'image/avif' },\n bmp: { kind: 'image', contentType: 'image/bmp' },\n gif: { kind: 'image', contentType: 'image/gif' },\n jpeg: { kind: 'image', contentType: 'image/jpeg' },\n jpg: { kind: 'image', contentType: 'image/jpeg' },\n png: { kind: 'image', contentType: 'image/png' },\n svg: { kind: 'image', contentType: 'image/svg+xml' },\n webp: { kind: 'image', contentType: 'image/webp' },\n m4v: { kind: 'video', contentType: 'video/mp4' },\n mov: { kind: 'video', contentType: 'video/quicktime' },\n mp4: { kind: 'video', contentType: 'video/mp4' },\n webm: { kind: 'video', contentType: 'video/webm' },\n pdf: { kind: 'pdf', contentType: 'application/pdf' },\n};\n\n/** The hub refuses to serve a mentioned file past this size. */\nexport const MAX_SESSION_FILE_BYTES = 25 * 1024 * 1024;\n\n/** The route the timeline fetches a mentioned file from; path is the cwd-relative file. */\nexport const SESSION_FILE_ROUTE = '/api/sessions/:sessionId/file';\n\nexport function sessionFileUrl(sessionId: string, relativePath: string): string {\n return `/api/sessions/${encodeURIComponent(sessionId)}/file?path=${encodeURIComponent(relativePath)}`;\n}\n"],"mappings":"AAaA,MAAa,EAAmD,CAC9D,KAAM,CAAE,KAAM,QAAS,YAAa,YAAa,EACjD,IAAK,CAAE,KAAM,QAAS,YAAa,WAAY,EAC/C,IAAK,CAAE,KAAM,QAAS,YAAa,WAAY,EAC/C,KAAM,CAAE,KAAM,QAAS,YAAa,YAAa,EACjD,IAAK,CAAE,KAAM,QAAS,YAAa,YAAa,EAChD,IAAK,CAAE,KAAM,QAAS,YAAa,WAAY,EAC/C,IAAK,CAAE,KAAM,QAAS,YAAa,eAAgB,EACnD,KAAM,CAAE,KAAM,QAAS,YAAa,YAAa,EACjD,IAAK,CAAE,KAAM,QAAS,YAAa,WAAY,EAC/C,IAAK,CAAE,KAAM,QAAS,YAAa,iBAAkB,EACrD,IAAK,CAAE,KAAM,QAAS,YAAa,WAAY,EAC/C,KAAM,CAAE,KAAM,QAAS,YAAa,YAAa,EACjD,IAAK,CAAE,KAAM,MAAO,YAAa,iBAAkB,CACrD,EAGa,EAAyB,SAGzB,EAAqB"}
@@ -0,0 +1 @@
1
+ require("@agimon-ai/doompi-server");
@@ -0,0 +1,2 @@
1
+ import { SESSION_RECORD_VERSION, SessionRecord } from "@agimon-ai/doompi-server";
2
+ export { SESSION_RECORD_VERSION, type SessionRecord };
@@ -0,0 +1,2 @@
1
+ import { SESSION_RECORD_VERSION, SessionRecord } from "@agimon-ai/doompi-server";
2
+ export { SESSION_RECORD_VERSION, type SessionRecord };
@@ -0,0 +1 @@
1
+ import{SESSION_RECORD_VERSION as e}from"@agimon-ai/doompi-server";export{e as SESSION_RECORD_VERSION};
@@ -0,0 +1,2 @@
1
+ const e=`bridge_status`;function t(t,n={}){return{type:e,state:t,...n}}exports.ATTACHED_TYPE=`attached`,exports.ATTACH_ERROR_TYPE=`attach_error`,exports.ATTACH_TYPE=`attach`,exports.BRIDGE_STATUS_TYPE=e,exports.bridgeStatus=t;
2
+ //# sourceMappingURL=session.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.cjs","names":[],"sources":["../../../src/types/session.ts"],"sourcesContent":["/** One newline-delimited JSON frame, kept opaque so Pi can evolve its protocol. */\nexport type SessionFrame = Record<string, unknown>;\n\n/** Handshake vocabulary published by @agimon-ai/doompi-server. */\nexport const ATTACH_TYPE = 'attach';\nexport const ATTACHED_TYPE = 'attached';\nexport const ATTACH_ERROR_TYPE = 'attach_error';\nexport const REPLAY_TYPE = 'replay';\n\n/**\n * What the browser is told about the socket behind it.\n *\n * The token never reaches the browser, so the page cannot infer attachment from\n * the handshake itself; the bridge reports it instead.\n */\nexport type BridgeState = 'connecting' | 'attached' | 'refused' | 'detached' | 'closed';\n\nexport const BRIDGE_STATUS_TYPE = 'bridge_status';\n\nexport interface BridgeStatusFrame {\n type: typeof BRIDGE_STATUS_TYPE;\n state: BridgeState;\n /** Human-readable cause, present when the state is refused or closed. */\n reason?: string;\n /** Frames the session buffered while nothing was attached. */\n replayed?: number;\n /** Frames the bounded backlog had to discard. */\n dropped?: number;\n}\n\nexport function bridgeStatus(\n state: BridgeState,\n extra: Omit<BridgeStatusFrame, 'type' | 'state'> = {},\n): BridgeStatusFrame {\n return { type: BRIDGE_STATUS_TYPE, state, ...extra };\n}\n"],"mappings":"AAIA,MAaa,EAAqB,gBAalC,SAAgB,EACd,EACA,EAAmD,CAAC,EACjC,CACnB,MAAO,CAAE,KAAM,EAAoB,QAAO,GAAG,CAAM,CACrD"}
@@ -0,0 +1,24 @@
1
+ //#region src/types/session.d.ts
2
+ /** One newline-delimited JSON frame, kept opaque so Pi can evolve its protocol. */
3
+ type SessionFrame = Record<string, unknown>;
4
+ /**
5
+ * What the browser is told about the socket behind it.
6
+ *
7
+ * The token never reaches the browser, so the page cannot infer attachment from
8
+ * the handshake itself; the bridge reports it instead.
9
+ */
10
+ type BridgeState = 'connecting' | 'attached' | 'refused' | 'detached' | 'closed';
11
+ declare const BRIDGE_STATUS_TYPE = "bridge_status";
12
+ interface BridgeStatusFrame {
13
+ type: typeof BRIDGE_STATUS_TYPE;
14
+ state: BridgeState;
15
+ /** Human-readable cause, present when the state is refused or closed. */
16
+ reason?: string;
17
+ /** Frames the session buffered while nothing was attached. */
18
+ replayed?: number;
19
+ /** Frames the bounded backlog had to discard. */
20
+ dropped?: number;
21
+ }
22
+ //#endregion
23
+ export { BRIDGE_STATUS_TYPE, BridgeState, BridgeStatusFrame, SessionFrame };
24
+ //# sourceMappingURL=session.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.cts","names":[],"sources":["../../../src/types/session.ts"],"mappings":";;KACY,eAAe;;;;;;;KAcf;cAEC;UAEI;EACf,aAAa;EACb,OAAO;;EAEP;;EAEA;;EAEA"}
@@ -0,0 +1,24 @@
1
+ //#region src/types/session.d.ts
2
+ /** One newline-delimited JSON frame, kept opaque so Pi can evolve its protocol. */
3
+ type SessionFrame = Record<string, unknown>;
4
+ /**
5
+ * What the browser is told about the socket behind it.
6
+ *
7
+ * The token never reaches the browser, so the page cannot infer attachment from
8
+ * the handshake itself; the bridge reports it instead.
9
+ */
10
+ type BridgeState = 'connecting' | 'attached' | 'refused' | 'detached' | 'closed';
11
+ declare const BRIDGE_STATUS_TYPE = "bridge_status";
12
+ interface BridgeStatusFrame {
13
+ type: typeof BRIDGE_STATUS_TYPE;
14
+ state: BridgeState;
15
+ /** Human-readable cause, present when the state is refused or closed. */
16
+ reason?: string;
17
+ /** Frames the session buffered while nothing was attached. */
18
+ replayed?: number;
19
+ /** Frames the bounded backlog had to discard. */
20
+ dropped?: number;
21
+ }
22
+ //#endregion
23
+ export { BRIDGE_STATUS_TYPE, BridgeState, BridgeStatusFrame, SessionFrame };
24
+ //# sourceMappingURL=session.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.mts","names":[],"sources":["../../../src/types/session.ts"],"mappings":";;KACY,eAAe;;;;;;;KAcf;cAEC;UAEI;EACf,aAAa;EACb,OAAO;;EAEP;;EAEA;;EAEA"}
@@ -0,0 +1,2 @@
1
+ const e=`attach`,t=`attached`,n=`attach_error`,r=`bridge_status`;function i(e,t={}){return{type:r,state:e,...t}}export{t as ATTACHED_TYPE,n as ATTACH_ERROR_TYPE,e as ATTACH_TYPE,r as BRIDGE_STATUS_TYPE,i as bridgeStatus};
2
+ //# sourceMappingURL=session.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.mjs","names":[],"sources":["../../../src/types/session.ts"],"sourcesContent":["/** One newline-delimited JSON frame, kept opaque so Pi can evolve its protocol. */\nexport type SessionFrame = Record<string, unknown>;\n\n/** Handshake vocabulary published by @agimon-ai/doompi-server. */\nexport const ATTACH_TYPE = 'attach';\nexport const ATTACHED_TYPE = 'attached';\nexport const ATTACH_ERROR_TYPE = 'attach_error';\nexport const REPLAY_TYPE = 'replay';\n\n/**\n * What the browser is told about the socket behind it.\n *\n * The token never reaches the browser, so the page cannot infer attachment from\n * the handshake itself; the bridge reports it instead.\n */\nexport type BridgeState = 'connecting' | 'attached' | 'refused' | 'detached' | 'closed';\n\nexport const BRIDGE_STATUS_TYPE = 'bridge_status';\n\nexport interface BridgeStatusFrame {\n type: typeof BRIDGE_STATUS_TYPE;\n state: BridgeState;\n /** Human-readable cause, present when the state is refused or closed. */\n reason?: string;\n /** Frames the session buffered while nothing was attached. */\n replayed?: number;\n /** Frames the bounded backlog had to discard. */\n dropped?: number;\n}\n\nexport function bridgeStatus(\n state: BridgeState,\n extra: Omit<BridgeStatusFrame, 'type' | 'state'> = {},\n): BridgeStatusFrame {\n return { type: BRIDGE_STATUS_TYPE, state, ...extra };\n}\n"],"mappings":"AAIA,MAAa,EAAc,SACd,EAAgB,WAChB,EAAoB,eAWpB,EAAqB,gBAalC,SAAgB,EACd,EACA,EAAmD,CAAC,EACjC,CACnB,MAAO,CAAE,KAAM,EAAoB,QAAO,GAAG,CAAM,CACrD"}
Binary file
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--spacing:.25rem;--font-weight-normal:400;--font-weight-bold:700;--tracking-wide:.025em;--tracking-widest:.1em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--doom-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html,body{height:100%}body{background-color:var(--doom-bg);color:var(--doom-text);font-family:var(--doom-font-mono);-webkit-font-smoothing:antialiased;margin:0;font-size:13px}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--doom-border);border-radius:5px}::selection{background:var(--doom-blue)}@supports (color:color-mix(in lab, red, red)){::selection{background:color-mix(in srgb, var(--doom-blue) 35%, transparent)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-\[12vh\]{top:12vh}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.my-1{margin-block:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-\[3px\]{margin-top:3px}.mr-1{margin-right:var(--spacing)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1{height:var(--spacing)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-12{height:calc(var(--spacing) * 12)}.h-\[5px\]{height:5px}.h-\[7px\]{height:7px}.h-\[10px\]{height:10px}.h-\[13px\]{height:13px}.h-\[15px\]{height:15px}.h-\[17px\]{height:17px}.h-\[18px\]{height:18px}.h-\[21px\]{height:21px}.h-\[34px\]{height:34px}.h-\[42px\]{height:42px}.h-\[74px\]{height:74px}.h-\[480px\]{height:480px}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-28{max-height:calc(var(--spacing) * 28)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-\[70vh\]{max-height:70vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[260px\]{max-height:260px}.max-h-\[320px\]{max-height:320px}.max-h-\[360px\]{max-height:360px}.max-h-\[480px\]{max-height:480px}.min-h-0{min-height:0}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-\[20px\]{min-height:20px}.min-h-\[30px\]{min-height:30px}.min-h-\[34px\]{min-height:34px}.min-h-\[42px\]{min-height:42px}.min-h-\[260px\]{min-height:260px}.w-1{width:var(--spacing)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-2\/3{width:66.6667%}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-3\/4{width:75%}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-11{width:calc(var(--spacing) * 11)}.w-20{width:calc(var(--spacing) * 20)}.w-44{width:calc(var(--spacing) * 44)}.w-\[10px\]{width:10px}.w-\[13px\]{width:13px}.w-\[15px\]{width:15px}.w-\[17px\]{width:17px}.w-\[18px\]{width:18px}.w-\[34\%\]{width:34%}.w-\[220px\]{width:220px}.w-\[280px\]{width:280px}.w-\[300px\]{width:300px}.w-\[360px\]{width:360px}.w-\[400px\]{width:400px}.w-\[420px\]{width:420px}.w-\[430px\]{width:430px}.w-\[440px\]{width:440px}.w-\[480px\]{width:480px}.w-\[520px\]{width:520px}.w-\[620px\]{width:620px}.w-\[720px\]{width:720px}.w-full{width:100%}.w-px{width:1px}.max-w-\[85vw\]{max-width:85vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[160px\]{max-width:160px}.max-w-\[640px\]{max-width:640px}.max-w-\[780px\]{max-width:780px}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-\[15px\]{min-width:15px}.min-w-\[120px\]{min-width:120px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-0{--tw-translate-y:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-0\.5{--tw-translate-y:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-doom-blink{animation:1s steps(2,start) infinite doom-blink}.animate-doom-rise{animation:.16s cubic-bezier(.16,1,.3,1) doom-rise}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.\[scrollbar-width\:none\]{scrollbar-width:none}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0{gap:0}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-\[3px\]{gap:3px}.gap-\[7px\]{gap:7px}.gap-\[9px\]{gap:9px}.gap-\[18px\]{gap:18px}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[3px\]{border-radius:3px}.rounded-\[5px\]{border-radius:5px}.rounded-\[10px\]{border-radius:10px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-doom-blue\/40{border-color:var(--doom-blue)}@supports (color:color-mix(in lab, red, red)){.border-doom-blue\/40{border-color:color-mix(in oklab, var(--doom-blue) 40%, transparent)}}.border-doom-blue\/60{border-color:var(--doom-blue)}@supports (color:color-mix(in lab, red, red)){.border-doom-blue\/60{border-color:color-mix(in oklab, var(--doom-blue) 60%, transparent)}}.border-doom-border{border-color:var(--doom-border)}.border-doom-border-soft{border-color:var(--doom-border-soft)}.border-doom-cyan\/40{border-color:var(--doom-cyan)}@supports (color:color-mix(in lab, red, red)){.border-doom-cyan\/40{border-color:color-mix(in oklab, var(--doom-cyan) 40%, transparent)}}.border-doom-edge-blue{border-color:var(--doom-edge-blue)}.border-doom-edge-green{border-color:var(--doom-edge-green)}.border-doom-edge-magenta{border-color:var(--doom-edge-magenta)}.border-doom-edge-red{border-color:var(--doom-edge-red)}.border-doom-edge-violet{border-color:var(--doom-edge-violet)}.border-doom-edge-yellow{border-color:var(--doom-edge-yellow)}.border-doom-green\/40{border-color:var(--doom-green)}@supports (color:color-mix(in lab, red, red)){.border-doom-green\/40{border-color:color-mix(in oklab, var(--doom-green) 40%, transparent)}}.border-doom-magenta\/40{border-color:var(--doom-magenta)}@supports (color:color-mix(in lab, red, red)){.border-doom-magenta\/40{border-color:color-mix(in oklab, var(--doom-magenta) 40%, transparent)}}.border-doom-orange\/40{border-color:var(--doom-orange)}@supports (color:color-mix(in lab, red, red)){.border-doom-orange\/40{border-color:color-mix(in oklab, var(--doom-orange) 40%, transparent)}}.border-doom-red\/40{border-color:var(--doom-red)}@supports (color:color-mix(in lab, red, red)){.border-doom-red\/40{border-color:color-mix(in oklab, var(--doom-red) 40%, transparent)}}.border-doom-red\/50{border-color:var(--doom-red)}@supports (color:color-mix(in lab, red, red)){.border-doom-red\/50{border-color:color-mix(in oklab, var(--doom-red) 50%, transparent)}}.border-doom-teal\/40{border-color:var(--doom-teal)}@supports (color:color-mix(in lab, red, red)){.border-doom-teal\/40{border-color:color-mix(in oklab, var(--doom-teal) 40%, transparent)}}.border-doom-violet\/40{border-color:var(--doom-violet)}@supports (color:color-mix(in lab, red, red)){.border-doom-violet\/40{border-color:color-mix(in oklab, var(--doom-violet) 40%, transparent)}}.border-doom-yellow\/40{border-color:var(--doom-yellow)}@supports (color:color-mix(in lab, red, red)){.border-doom-yellow\/40{border-color:color-mix(in oklab, var(--doom-yellow) 40%, transparent)}}.border-transparent{border-color:#0000}.bg-doom-blue{background-color:var(--doom-blue)}.bg-doom-border{background-color:var(--doom-border)}.bg-doom-border-soft{background-color:var(--doom-border-soft)}.bg-doom-cyan{background-color:var(--doom-cyan)}.bg-doom-deep,.bg-doom-deep\/70{background-color:var(--doom-deep)}@supports (color:color-mix(in lab, red, red)){.bg-doom-deep\/70{background-color:color-mix(in oklab, var(--doom-deep) 70%, transparent)}}.bg-doom-faint,.bg-doom-faint\/40{background-color:var(--doom-faint)}@supports (color:color-mix(in lab, red, red)){.bg-doom-faint\/40{background-color:color-mix(in oklab, var(--doom-faint) 40%, transparent)}}.bg-doom-green{background-color:var(--doom-green)}.bg-doom-magenta,.bg-doom-magenta\/10{background-color:var(--doom-magenta)}@supports (color:color-mix(in lab, red, red)){.bg-doom-magenta\/10{background-color:color-mix(in oklab, var(--doom-magenta) 10%, transparent)}}.bg-doom-magenta\/25{background-color:var(--doom-magenta)}@supports (color:color-mix(in lab, red, red)){.bg-doom-magenta\/25{background-color:color-mix(in oklab, var(--doom-magenta) 25%, transparent)}}.bg-doom-on-selected\/20{background-color:var(--doom-on-selected)}@supports (color:color-mix(in lab, red, red)){.bg-doom-on-selected\/20{background-color:color-mix(in oklab, var(--doom-on-selected) 20%, transparent)}}.bg-doom-orange{background-color:var(--doom-orange)}.bg-doom-panel{background-color:var(--doom-panel)}.bg-doom-rail{background-color:var(--doom-rail)}.bg-doom-red,.bg-doom-red\/10{background-color:var(--doom-red)}@supports (color:color-mix(in lab, red, red)){.bg-doom-red\/10{background-color:color-mix(in oklab, var(--doom-red) 10%, transparent)}}.bg-doom-selected{background-color:var(--doom-selected)}.bg-doom-teal{background-color:var(--doom-teal)}.bg-doom-tint-blue{background-color:var(--doom-tint-blue)}.bg-doom-tint-green{background-color:var(--doom-tint-green)}.bg-doom-tint-magenta{background-color:var(--doom-tint-magenta)}.bg-doom-tint-red,.bg-doom-tint-red\/40{background-color:var(--doom-tint-red)}@supports (color:color-mix(in lab, red, red)){.bg-doom-tint-red\/40{background-color:color-mix(in oklab, var(--doom-tint-red) 40%, transparent)}}.bg-doom-tint-yellow{background-color:var(--doom-tint-yellow)}.bg-doom-violet{background-color:var(--doom-violet)}.bg-doom-yellow,.bg-doom-yellow\/25{background-color:var(--doom-yellow)}@supports (color:color-mix(in lab, red, red)){.bg-doom-yellow\/25{background-color:color-mix(in oklab, var(--doom-yellow) 25%, transparent)}}.bg-transparent{background-color:#0000}.fill-current{fill:currentColor}.fill-doom-deep{fill:var(--doom-deep)}.fill-doom-magenta{fill:var(--doom-magenta)}.fill-doom-yellow{fill:var(--doom-yellow)}.object-cover{object-fit:cover}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-px{padding:1px}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-\[7px\]{padding-inline:7px}.px-\[11px\]{padding-inline:11px}.px-\[26px\]{padding-inline:26px}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-\[3px\]{padding-block:3px}.py-\[7px\]{padding-block:7px}.py-\[22px\]{padding-block:22px}.py-px{padding-block:1px}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-3\.5{padding-top:calc(var(--spacing) * 3.5)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-2\.5{padding-bottom:calc(var(--spacing) * 2.5)}.pb-3\.5{padding-bottom:calc(var(--spacing) * 3.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-7{padding-left:calc(var(--spacing) * 7)}.pl-10{padding-left:calc(var(--spacing) * 10)}.pl-14{padding-left:calc(var(--spacing) * 14)}.pl-\[58px\]{padding-left:58px}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--doom-font-mono)}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-doom-blue{color:var(--doom-blue)}.text-doom-cyan{color:var(--doom-cyan)}.text-doom-dim{color:var(--doom-dim)}.text-doom-faint,.text-doom-faint\/60{color:var(--doom-faint)}@supports (color:color-mix(in lab, red, red)){.text-doom-faint\/60{color:color-mix(in oklab, var(--doom-faint) 60%, transparent)}}.text-doom-faint\/70{color:var(--doom-faint)}@supports (color:color-mix(in lab, red, red)){.text-doom-faint\/70{color:color-mix(in oklab, var(--doom-faint) 70%, transparent)}}.text-doom-green{color:var(--doom-green)}.text-doom-hi{color:var(--doom-hi)}.text-doom-magenta{color:var(--doom-magenta)}.text-doom-on-selected,.text-doom-on-selected\/70{color:var(--doom-on-selected)}@supports (color:color-mix(in lab, red, red)){.text-doom-on-selected\/70{color:color-mix(in oklab, var(--doom-on-selected) 70%, transparent)}}.text-doom-on-selected\/80{color:var(--doom-on-selected)}@supports (color:color-mix(in lab, red, red)){.text-doom-on-selected\/80{color:color-mix(in oklab, var(--doom-on-selected) 80%, transparent)}}.text-doom-on-selected\/85{color:var(--doom-on-selected)}@supports (color:color-mix(in lab, red, red)){.text-doom-on-selected\/85{color:color-mix(in oklab, var(--doom-on-selected) 85%, transparent)}}.text-doom-orange{color:var(--doom-orange)}.text-doom-rail{color:var(--doom-rail)}.text-doom-red,.text-doom-red\/70{color:var(--doom-red)}@supports (color:color-mix(in lab, red, red)){.text-doom-red\/70{color:color-mix(in oklab, var(--doom-red) 70%, transparent)}}.text-doom-teal{color:var(--doom-teal)}.text-doom-text{color:var(--doom-text)}.text-doom-violet,.text-doom-violet\/80{color:var(--doom-violet)}@supports (color:color-mix(in lab, red, red)){.text-doom-violet\/80{color:color-mix(in oklab, var(--doom-violet) 80%, transparent)}}.text-doom-yellow{color:var(--doom-yellow)}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-doom-blue\/40{-webkit-text-decoration-color:var(--doom-blue);-webkit-text-decoration-color:var(--doom-blue);-webkit-text-decoration-color:var(--doom-blue);text-decoration-color:var(--doom-blue)}@supports (color:color-mix(in lab, red, red)){.decoration-doom-blue\/40{-webkit-text-decoration-color:color-mix(in oklab, var(--doom-blue) 40%, transparent);-webkit-text-decoration-color:color-mix(in oklab, var(--doom-blue) 40%, transparent);-webkit-text-decoration-color:color-mix(in oklab, var(--doom-blue) 40%, transparent);text-decoration-color:color-mix(in oklab, var(--doom-blue) 40%, transparent)}}.decoration-doom-blue\/50{-webkit-text-decoration-color:var(--doom-blue);-webkit-text-decoration-color:var(--doom-blue);-webkit-text-decoration-color:var(--doom-blue);text-decoration-color:var(--doom-blue)}@supports (color:color-mix(in lab, red, red)){.decoration-doom-blue\/50{-webkit-text-decoration-color:color-mix(in oklab, var(--doom-blue) 50%, transparent);-webkit-text-decoration-color:color-mix(in oklab, var(--doom-blue) 50%, transparent);-webkit-text-decoration-color:color-mix(in oklab, var(--doom-blue) 50%, transparent);text-decoration-color:color-mix(in oklab, var(--doom-blue) 50%, transparent)}}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-\[color\,background-color\,border-color\,filter\]{transition-property:color,background-color,border-color,filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[contain-intrinsic-size\:auto_64px\]{contain-intrinsic-size:auto 64px}.\[content-visibility\:auto\]{content-visibility:auto}.group-focus-within\:opacity-0:is(:where(.group):focus-within *){opacity:0}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.group-hover\:opacity-0:is(:where(.group):hover *){opacity:0}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-doom-faint::placeholder{color:var(--doom-faint)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.focus-within\:border-doom-blue\/60:focus-within{border-color:var(--doom-blue)}@supports (color:color-mix(in lab, red, red)){.focus-within\:border-doom-blue\/60:focus-within{border-color:color-mix(in oklab, var(--doom-blue) 60%, transparent)}}@media (hover:hover){.hover\:border-doom-blue\/30:hover{border-color:var(--doom-blue)}@supports (color:color-mix(in lab, red, red)){.hover\:border-doom-blue\/30:hover{border-color:color-mix(in oklab, var(--doom-blue) 30%, transparent)}}.hover\:border-doom-blue\/50:hover{border-color:var(--doom-blue)}@supports (color:color-mix(in lab, red, red)){.hover\:border-doom-blue\/50:hover{border-color:color-mix(in oklab, var(--doom-blue) 50%, transparent)}}.hover\:border-doom-red\/50:hover{border-color:var(--doom-red)}@supports (color:color-mix(in lab, red, red)){.hover\:border-doom-red\/50:hover{border-color:color-mix(in oklab, var(--doom-red) 50%, transparent)}}.hover\:bg-doom-deep:hover{background-color:var(--doom-deep)}.hover\:bg-doom-magenta\/10:hover{background-color:var(--doom-magenta)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-doom-magenta\/10:hover{background-color:color-mix(in oklab, var(--doom-magenta) 10%, transparent)}}.hover\:bg-doom-on-selected\/20:hover{background-color:var(--doom-on-selected)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-doom-on-selected\/20:hover{background-color:color-mix(in oklab, var(--doom-on-selected) 20%, transparent)}}.hover\:bg-doom-panel:hover{background-color:var(--doom-panel)}.hover\:bg-doom-rail:hover{background-color:var(--doom-rail)}.hover\:bg-doom-selected:hover{background-color:var(--doom-selected)}.hover\:bg-doom-tint-magenta:hover{background-color:var(--doom-tint-magenta)}.hover\:bg-doom-yellow\/25:hover{background-color:var(--doom-yellow)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-doom-yellow\/25:hover{background-color:color-mix(in oklab, var(--doom-yellow) 25%, transparent)}}.hover\:text-doom-blue:hover{color:var(--doom-blue)}.hover\:text-doom-hi:hover{color:var(--doom-hi)}.hover\:text-doom-magenta:hover{color:var(--doom-magenta)}.hover\:text-doom-on-selected:hover{color:var(--doom-on-selected)}.hover\:text-doom-red:hover{color:var(--doom-red)}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-doom-blue:hover{-webkit-text-decoration-color:var(--doom-blue);-webkit-text-decoration-color:var(--doom-blue);-webkit-text-decoration-color:var(--doom-blue);text-decoration-color:var(--doom-blue)}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.hover\:brightness-125:hover{--tw-brightness:brightness(125%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:border-doom-blue\/60:focus{border-color:var(--doom-blue)}@supports (color:color-mix(in lab, red, red)){.focus\:border-doom-blue\/60:focus{border-color:color-mix(in oklab, var(--doom-blue) 60%, transparent)}}.focus-visible\:border-doom-blue\/50:focus-visible{border-color:var(--doom-blue)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:border-doom-blue\/50:focus-visible{border-color:color-mix(in oklab, var(--doom-blue) 50%, transparent)}}.focus-visible\:bg-doom-deep:focus-visible{background-color:var(--doom-deep)}.focus-visible\:text-doom-blue:focus-visible{color:var(--doom-blue)}.focus-visible\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-doom-blue\/50:focus-visible{--tw-ring-color:var(--doom-blue)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-doom-blue\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--doom-blue) 50%, transparent)}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\+\:disabled\]\:opacity-50:has(+:disabled){opacity:.5}.aria-invalid\:border-doom-edge-red[aria-invalid=true]{border-color:var(--doom-edge-red)}.aria-invalid\:text-doom-red[aria-invalid=true]{color:var(--doom-red)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-40[data-disabled]{opacity:.4}.data-\[highlighted\]\:bg-doom-deep[data-highlighted]{background-color:var(--doom-deep)}.data-\[placeholder\]\:text-doom-faint[data-placeholder]{color:var(--doom-faint)}.data-\[state\=active\]\:bg-doom-tint-blue[data-state=active]{background-color:var(--doom-tint-blue)}.data-\[state\=active\]\:font-bold[data-state=active]{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.data-\[state\=active\]\:text-doom-blue[data-state=active]{color:var(--doom-blue)}.data-\[state\=checked\]\:translate-x-3[data-state=checked]{--tw-translate-x:calc(var(--spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:border-doom-blue[data-state=checked]{border-color:var(--doom-blue)}.data-\[state\=checked\]\:bg-doom-blue[data-state=checked]{background-color:var(--doom-blue)}.data-\[state\=checked\]\:bg-doom-tint-blue[data-state=checked]{background-color:var(--doom-tint-blue)}.data-\[state\=delayed-open\]\:animate-doom-fade[data-state=delayed-open]{animation:.14s ease-out doom-fade}.data-\[state\=indeterminate\]\:border-doom-blue[data-state=indeterminate]{border-color:var(--doom-blue)}.data-\[state\=open\]\:animate-doom-fade[data-state=open]{animation:.14s ease-out doom-fade}.data-\[state\=open\]\:animate-doom-pop[data-state=open]{animation:.16s cubic-bezier(.16,1,.3,1) doom-pop}.data-\[state\=open\]\:animate-doom-rise[data-state=open]{animation:.16s cubic-bezier(.16,1,.3,1) doom-rise}.data-\[state\=open\]\:bg-doom-deep[data-state=open]{background-color:var(--doom-deep)}.data-\[state\=open\]\:bg-doom-on-selected\/20[data-state=open]{background-color:var(--doom-on-selected)}@supports (color:color-mix(in lab, red, red)){.data-\[state\=open\]\:bg-doom-on-selected\/20[data-state=open]{background-color:color-mix(in oklab, var(--doom-on-selected) 20%, transparent)}}.data-\[state\=open\]\:text-doom-hi[data-state=open]{color:var(--doom-hi)}.data-\[state\=open\]\:text-doom-on-selected[data-state=open]{color:var(--doom-on-selected)}.\[\&_p\]\:whitespace-pre-wrap p{white-space:pre-wrap}.\[\&_strong\]\:text-doom-violet strong{color:var(--doom-violet)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}pre .\[pre_\&\]\:bg-transparent{background-color:#0000}pre .\[pre_\&\]\:p-0{padding:0}pre .\[pre_\&\]\:text-doom-hi{color:var(--doom-hi)}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--doom-bg:#282c34;--doom-rail:#21242b;--doom-panel:#23272e;--doom-deep:#1c1f24;--doom-border:#3f444a;--doom-border-soft:#2a2e35;--doom-hi:#dfdfdf;--doom-text:#bbc2cf;--doom-dim:#9ca0a4;--doom-faint:#5b6268;--doom-blue:#51afef;--doom-green:#98be65;--doom-yellow:#ecbe7b;--doom-red:#ff6c6b;--doom-magenta:#c678dd;--doom-violet:#a9a1e1;--doom-cyan:#46d9ff;--doom-orange:#da8548;--doom-teal:#4db5bd;--doom-selected:#2257a0;--doom-tint-blue:#21313f;--doom-tint-green:#262e1e;--doom-tint-yellow:#312a1c;--doom-tint-red:#332428;--doom-tint-magenta:#2e2136;--doom-tint-violet:#2d253f;--doom-tint-cyan:var(--doom-cyan)}@supports (color:color-mix(in lab, red, red)){:root{--doom-tint-cyan:color-mix(in srgb, var(--doom-cyan) 16%, var(--doom-panel))}}:root{--doom-tint-orange:var(--doom-orange)}@supports (color:color-mix(in lab, red, red)){:root{--doom-tint-orange:color-mix(in srgb, var(--doom-orange) 16%, var(--doom-panel))}}:root{--doom-tint-teal:var(--doom-teal)}@supports (color:color-mix(in lab, red, red)){:root{--doom-tint-teal:color-mix(in srgb, var(--doom-teal) 16%, var(--doom-panel))}}:root{--doom-edge-blue:#2f4a68;--doom-edge-green:#35452e;--doom-edge-yellow:#574427;--doom-edge-red:#6b3a3a;--doom-edge-magenta:#4a3358;--doom-edge-violet:#3b3558;--doom-edge-cyan:var(--doom-cyan)}@supports (color:color-mix(in lab, red, red)){:root{--doom-edge-cyan:color-mix(in srgb, var(--doom-cyan) 40%, var(--doom-border))}}:root{--doom-edge-orange:var(--doom-orange)}@supports (color:color-mix(in lab, red, red)){:root{--doom-edge-orange:color-mix(in srgb, var(--doom-orange) 40%, var(--doom-border))}}:root{--doom-edge-teal:var(--doom-teal)}@supports (color:color-mix(in lab, red, red)){:root{--doom-edge-teal:color-mix(in srgb, var(--doom-teal) 40%, var(--doom-border))}}:root{--doom-on-selected:var(--doom-selected)}@supports (color:color-mix(in lab, red, red)){:root{--doom-on-selected:color-mix(in srgb, var(--doom-selected) 12%, white)}}:root{--doom-font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace}#root{height:100%}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes doom-fade{0%{opacity:0}to{opacity:1}}@keyframes doom-pop{0%{opacity:0;transform:translateY(4px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes doom-rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes doom-blink{50%{opacity:0}}