@agimon-ai/po-web-dashboard 0.0.0-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 (924) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +10 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  4. package/dist/core.cjs +222 -0
  5. package/dist/core.d.mts +21 -0
  6. package/dist/core.mjs +21 -0
  7. package/dist/index.cjs +546 -0
  8. package/dist/index.d.mts +81 -0
  9. package/dist/index.mjs +81 -0
  10. package/dist/testing.cjs +18 -0
  11. package/dist/testing.d.mts +6 -0
  12. package/dist/testing.mjs +6 -0
  13. package/dist/types/auth.cjs +20 -0
  14. package/dist/types/auth.cjs.map +1 -0
  15. package/dist/types/auth.d.mts +160 -0
  16. package/dist/types/auth.d.mts.map +1 -0
  17. package/dist/types/auth.mjs +19 -0
  18. package/dist/types/auth.mjs.map +1 -0
  19. package/dist/types/bridge.d.mts +18 -0
  20. package/dist/types/bridge.d.mts.map +1 -0
  21. package/dist/types/devProxy.cjs +41 -0
  22. package/dist/types/devProxy.cjs.map +1 -0
  23. package/dist/types/devProxy.d.mts +54 -0
  24. package/dist/types/devProxy.d.mts.map +1 -0
  25. package/dist/types/devProxy.mjs +39 -0
  26. package/dist/types/devProxy.mjs.map +1 -0
  27. package/dist/types/hub.cjs +220 -0
  28. package/dist/types/hub.cjs.map +1 -0
  29. package/dist/types/hub.d.mts +447 -0
  30. package/dist/types/hub.d.mts.map +1 -0
  31. package/dist/types/hub.mjs +179 -0
  32. package/dist/types/hub.mjs.map +1 -0
  33. package/dist/types/media.cjs +75 -0
  34. package/dist/types/media.cjs.map +1 -0
  35. package/dist/types/media.d.mts +22 -0
  36. package/dist/types/media.d.mts.map +1 -0
  37. package/dist/types/media.mjs +70 -0
  38. package/dist/types/media.mjs.map +1 -0
  39. package/dist/types/notification.cjs +19 -0
  40. package/dist/types/notification.cjs.map +1 -0
  41. package/dist/types/notification.d.mts +10 -0
  42. package/dist/types/notification.d.mts.map +1 -0
  43. package/dist/types/notification.mjs +19 -0
  44. package/dist/types/notification.mjs.map +1 -0
  45. package/dist/types/remoteAccess.cjs +92 -0
  46. package/dist/types/remoteAccess.cjs.map +1 -0
  47. package/dist/types/remoteAccess.d.mts +214 -0
  48. package/dist/types/remoteAccess.d.mts.map +1 -0
  49. package/dist/types/remoteAccess.mjs +68 -0
  50. package/dist/types/remoteAccess.mjs.map +1 -0
  51. package/dist/types/session.cjs +23 -0
  52. package/dist/types/session.cjs.map +1 -0
  53. package/dist/types/session.d.mts +29 -0
  54. package/dist/types/session.d.mts.map +1 -0
  55. package/dist/types/session.mjs +18 -0
  56. package/dist/types/session.mjs.map +1 -0
  57. package/dist/types/sessionMcp.d.mts +56 -0
  58. package/dist/types/sessionMcp.d.mts.map +1 -0
  59. package/dist/types/settings.cjs +18 -0
  60. package/dist/types/settings.cjs.map +1 -0
  61. package/dist/types/settings.d.mts +126 -0
  62. package/dist/types/settings.d.mts.map +1 -0
  63. package/dist/types/settings.mjs +12 -0
  64. package/dist/types/settings.mjs.map +1 -0
  65. package/dist/types.cjs +101 -0
  66. package/dist/types.d.mts +11 -0
  67. package/dist/types.mjs +9 -0
  68. package/dist/views.cjs +120 -0
  69. package/dist/views.d.mts +56 -0
  70. package/dist/views.mjs +56 -0
  71. package/dist/web/components/MascotMark.cjs +18 -0
  72. package/dist/web/components/MascotMark.cjs.map +1 -0
  73. package/dist/web/components/MascotMark.d.mts +9 -0
  74. package/dist/web/components/MascotMark.d.mts.map +1 -0
  75. package/dist/web/components/MascotMark.mjs +18 -0
  76. package/dist/web/components/MascotMark.mjs.map +1 -0
  77. package/dist/web/components/PluginSurface.cjs +15 -0
  78. package/dist/web/components/PluginSurface.cjs.map +1 -0
  79. package/dist/web/components/PluginSurface.d.mts +13 -0
  80. package/dist/web/components/PluginSurface.d.mts.map +1 -0
  81. package/dist/web/components/PluginSurface.mjs +15 -0
  82. package/dist/web/components/PluginSurface.mjs.map +1 -0
  83. package/dist/web/components/QrCode.cjs +37 -0
  84. package/dist/web/components/QrCode.cjs.map +1 -0
  85. package/dist/web/components/QrCode.d.mts +22 -0
  86. package/dist/web/components/QrCode.d.mts.map +1 -0
  87. package/dist/web/components/QrCode.mjs +37 -0
  88. package/dist/web/components/QrCode.mjs.map +1 -0
  89. package/dist/web/components/Remote.fixture.cjs +73 -0
  90. package/dist/web/components/Remote.fixture.cjs.map +1 -0
  91. package/dist/web/components/Remote.fixture.mjs +72 -0
  92. package/dist/web/components/Remote.fixture.mjs.map +1 -0
  93. package/dist/web/components/SessionMcp.cjs +279 -0
  94. package/dist/web/components/SessionMcp.cjs.map +1 -0
  95. package/dist/web/components/SessionMcp.d.mts +12 -0
  96. package/dist/web/components/SessionMcp.d.mts.map +1 -0
  97. package/dist/web/components/SessionMcp.mjs +278 -0
  98. package/dist/web/components/SessionMcp.mjs.map +1 -0
  99. package/dist/web/components/Story.fixture.cjs +124 -0
  100. package/dist/web/components/Story.fixture.cjs.map +1 -0
  101. package/dist/web/components/Story.fixture.d.mts +19 -0
  102. package/dist/web/components/Story.fixture.d.mts.map +1 -0
  103. package/dist/web/components/Story.fixture.mjs +119 -0
  104. package/dist/web/components/Story.fixture.mjs.map +1 -0
  105. package/dist/web/components/Template.fixture.cjs +67 -0
  106. package/dist/web/components/Template.fixture.cjs.map +1 -0
  107. package/dist/web/components/Template.fixture.d.mts +7 -0
  108. package/dist/web/components/Template.fixture.d.mts.map +1 -0
  109. package/dist/web/components/Template.fixture.mjs +65 -0
  110. package/dist/web/components/Template.fixture.mjs.map +1 -0
  111. package/dist/web/components/ToolRendererBoundary.cjs +23 -0
  112. package/dist/web/components/ToolRendererBoundary.cjs.map +1 -0
  113. package/dist/web/components/ToolRendererBoundary.d.mts +23 -0
  114. package/dist/web/components/ToolRendererBoundary.d.mts.map +1 -0
  115. package/dist/web/components/ToolRendererBoundary.mjs +23 -0
  116. package/dist/web/components/ToolRendererBoundary.mjs.map +1 -0
  117. package/dist/web/features/activity/ActivityDock.cjs +271 -0
  118. package/dist/web/features/activity/ActivityDock.cjs.map +1 -0
  119. package/dist/web/features/activity/ActivityDock.d.mts +22 -0
  120. package/dist/web/features/activity/ActivityDock.d.mts.map +1 -0
  121. package/dist/web/features/activity/ActivityDock.mjs +271 -0
  122. package/dist/web/features/activity/ActivityDock.mjs.map +1 -0
  123. package/dist/web/features/activity/ContextItemDialog.cjs +276 -0
  124. package/dist/web/features/activity/ContextItemDialog.cjs.map +1 -0
  125. package/dist/web/features/activity/ContextItemDialog.d.mts +16 -0
  126. package/dist/web/features/activity/ContextItemDialog.d.mts.map +1 -0
  127. package/dist/web/features/activity/ContextItemDialog.mjs +276 -0
  128. package/dist/web/features/activity/ContextItemDialog.mjs.map +1 -0
  129. package/dist/web/features/activity/ContextPanel.cjs +248 -0
  130. package/dist/web/features/activity/ContextPanel.cjs.map +1 -0
  131. package/dist/web/features/activity/ContextPanel.d.mts +4 -0
  132. package/dist/web/features/activity/ContextPanel.d.mts.map +1 -0
  133. package/dist/web/features/activity/ContextPanel.mjs +248 -0
  134. package/dist/web/features/activity/ContextPanel.mjs.map +1 -0
  135. package/dist/web/features/activity/DockTabs.cjs +47 -0
  136. package/dist/web/features/activity/DockTabs.cjs.map +1 -0
  137. package/dist/web/features/activity/DockTabs.d.mts +9 -0
  138. package/dist/web/features/activity/DockTabs.d.mts.map +1 -0
  139. package/dist/web/features/activity/DockTabs.mjs +47 -0
  140. package/dist/web/features/activity/DockTabs.mjs.map +1 -0
  141. package/dist/web/features/connection/RefusedCard.cjs +76 -0
  142. package/dist/web/features/connection/RefusedCard.cjs.map +1 -0
  143. package/dist/web/features/connection/RefusedCard.d.mts +5 -0
  144. package/dist/web/features/connection/RefusedCard.d.mts.map +1 -0
  145. package/dist/web/features/connection/RefusedCard.mjs +76 -0
  146. package/dist/web/features/connection/RefusedCard.mjs.map +1 -0
  147. package/dist/web/features/dialogs/DialogOverlay.cjs +164 -0
  148. package/dist/web/features/dialogs/DialogOverlay.cjs.map +1 -0
  149. package/dist/web/features/dialogs/DialogOverlay.d.mts +15 -0
  150. package/dist/web/features/dialogs/DialogOverlay.d.mts.map +1 -0
  151. package/dist/web/features/dialogs/DialogOverlay.mjs +164 -0
  152. package/dist/web/features/dialogs/DialogOverlay.mjs.map +1 -0
  153. package/dist/web/features/leader/CommandPalette.cjs +390 -0
  154. package/dist/web/features/leader/CommandPalette.cjs.map +1 -0
  155. package/dist/web/features/leader/CommandPalette.d.mts +14 -0
  156. package/dist/web/features/leader/CommandPalette.d.mts.map +1 -0
  157. package/dist/web/features/leader/CommandPalette.mjs +390 -0
  158. package/dist/web/features/leader/CommandPalette.mjs.map +1 -0
  159. package/dist/web/features/remote/DevProxyTargets.cjs +122 -0
  160. package/dist/web/features/remote/DevProxyTargets.cjs.map +1 -0
  161. package/dist/web/features/remote/DevProxyTargets.d.mts +15 -0
  162. package/dist/web/features/remote/DevProxyTargets.d.mts.map +1 -0
  163. package/dist/web/features/remote/DevProxyTargets.mjs +122 -0
  164. package/dist/web/features/remote/DevProxyTargets.mjs.map +1 -0
  165. package/dist/web/features/remote/HandoverProgress.cjs +28 -0
  166. package/dist/web/features/remote/HandoverProgress.cjs.map +1 -0
  167. package/dist/web/features/remote/HandoverProgress.d.mts +12 -0
  168. package/dist/web/features/remote/HandoverProgress.d.mts.map +1 -0
  169. package/dist/web/features/remote/HandoverProgress.mjs +28 -0
  170. package/dist/web/features/remote/HandoverProgress.mjs.map +1 -0
  171. package/dist/web/features/remote/PairedDeviceList.cjs +37 -0
  172. package/dist/web/features/remote/PairedDeviceList.cjs.map +1 -0
  173. package/dist/web/features/remote/PairedDeviceList.d.mts +5 -0
  174. package/dist/web/features/remote/PairedDeviceList.d.mts.map +1 -0
  175. package/dist/web/features/remote/PairedDeviceList.mjs +37 -0
  176. package/dist/web/features/remote/PairedDeviceList.mjs.map +1 -0
  177. package/dist/web/features/remote/PairingApprovalDialog.cjs +65 -0
  178. package/dist/web/features/remote/PairingApprovalDialog.cjs.map +1 -0
  179. package/dist/web/features/remote/PairingApprovalDialog.d.mts +11 -0
  180. package/dist/web/features/remote/PairingApprovalDialog.d.mts.map +1 -0
  181. package/dist/web/features/remote/PairingApprovalDialog.mjs +65 -0
  182. package/dist/web/features/remote/PairingApprovalDialog.mjs.map +1 -0
  183. package/dist/web/features/remote/RemoteAccessDialog.cjs +83 -0
  184. package/dist/web/features/remote/RemoteAccessDialog.cjs.map +1 -0
  185. package/dist/web/features/remote/RemoteAccessDialog.d.mts +11 -0
  186. package/dist/web/features/remote/RemoteAccessDialog.d.mts.map +1 -0
  187. package/dist/web/features/remote/RemoteAccessDialog.mjs +83 -0
  188. package/dist/web/features/remote/RemoteAccessDialog.mjs.map +1 -0
  189. package/dist/web/features/remote/RemoteAccessOptions.cjs +154 -0
  190. package/dist/web/features/remote/RemoteAccessOptions.cjs.map +1 -0
  191. package/dist/web/features/remote/RemoteAccessOptions.d.mts +11 -0
  192. package/dist/web/features/remote/RemoteAccessOptions.d.mts.map +1 -0
  193. package/dist/web/features/remote/RemoteAccessOptions.mjs +154 -0
  194. package/dist/web/features/remote/RemoteAccessOptions.mjs.map +1 -0
  195. package/dist/web/features/remote/RemoteAccessPairing.cjs +93 -0
  196. package/dist/web/features/remote/RemoteAccessPairing.cjs.map +1 -0
  197. package/dist/web/features/remote/RemoteAccessPairing.d.mts +5 -0
  198. package/dist/web/features/remote/RemoteAccessPairing.d.mts.map +1 -0
  199. package/dist/web/features/remote/RemoteAccessPairing.mjs +93 -0
  200. package/dist/web/features/remote/RemoteAccessPairing.mjs.map +1 -0
  201. package/dist/web/features/remote/SandboxWorkspaces.cjs +87 -0
  202. package/dist/web/features/remote/SandboxWorkspaces.cjs.map +1 -0
  203. package/dist/web/features/remote/SandboxWorkspaces.d.mts +7 -0
  204. package/dist/web/features/remote/SandboxWorkspaces.d.mts.map +1 -0
  205. package/dist/web/features/remote/SandboxWorkspaces.mjs +87 -0
  206. package/dist/web/features/remote/SandboxWorkspaces.mjs.map +1 -0
  207. package/dist/web/features/remote/TrustedDeviceList.cjs +65 -0
  208. package/dist/web/features/remote/TrustedDeviceList.cjs.map +1 -0
  209. package/dist/web/features/remote/TrustedDeviceList.d.mts +13 -0
  210. package/dist/web/features/remote/TrustedDeviceList.d.mts.map +1 -0
  211. package/dist/web/features/remote/TrustedDeviceList.mjs +64 -0
  212. package/dist/web/features/remote/TrustedDeviceList.mjs.map +1 -0
  213. package/dist/web/features/selection/SelectionBar.cjs +401 -0
  214. package/dist/web/features/selection/SelectionBar.cjs.map +1 -0
  215. package/dist/web/features/selection/SelectionBar.d.mts +14 -0
  216. package/dist/web/features/selection/SelectionBar.d.mts.map +1 -0
  217. package/dist/web/features/selection/SelectionBar.mjs +400 -0
  218. package/dist/web/features/selection/SelectionBar.mjs.map +1 -0
  219. package/dist/web/features/session/AgentLockPanel.cjs +31 -0
  220. package/dist/web/features/session/AgentLockPanel.cjs.map +1 -0
  221. package/dist/web/features/session/AgentLockPanel.mjs +31 -0
  222. package/dist/web/features/session/AgentLockPanel.mjs.map +1 -0
  223. package/dist/web/features/session/Composer.cjs +808 -0
  224. package/dist/web/features/session/Composer.cjs.map +1 -0
  225. package/dist/web/features/session/Composer.d.mts +21 -0
  226. package/dist/web/features/session/Composer.d.mts.map +1 -0
  227. package/dist/web/features/session/Composer.mjs +806 -0
  228. package/dist/web/features/session/Composer.mjs.map +1 -0
  229. package/dist/web/features/session/ComposerPrompt.cjs +47 -0
  230. package/dist/web/features/session/ComposerPrompt.cjs.map +1 -0
  231. package/dist/web/features/session/ComposerPrompt.d.mts +16 -0
  232. package/dist/web/features/session/ComposerPrompt.d.mts.map +1 -0
  233. package/dist/web/features/session/ComposerPrompt.mjs +47 -0
  234. package/dist/web/features/session/ComposerPrompt.mjs.map +1 -0
  235. package/dist/web/features/session/DormantPanel.cjs +61 -0
  236. package/dist/web/features/session/DormantPanel.cjs.map +1 -0
  237. package/dist/web/features/session/DormantPanel.d.mts +8 -0
  238. package/dist/web/features/session/DormantPanel.d.mts.map +1 -0
  239. package/dist/web/features/session/DormantPanel.mjs +61 -0
  240. package/dist/web/features/session/DormantPanel.mjs.map +1 -0
  241. package/dist/web/features/session/MentionPreviews.cjs +128 -0
  242. package/dist/web/features/session/MentionPreviews.cjs.map +1 -0
  243. package/dist/web/features/session/MentionPreviews.d.mts +17 -0
  244. package/dist/web/features/session/MentionPreviews.d.mts.map +1 -0
  245. package/dist/web/features/session/MentionPreviews.mjs +127 -0
  246. package/dist/web/features/session/MentionPreviews.mjs.map +1 -0
  247. package/dist/web/features/session/MessageMarkdown.cjs +20 -0
  248. package/dist/web/features/session/MessageMarkdown.cjs.map +1 -0
  249. package/dist/web/features/session/MessageMarkdown.d.mts +19 -0
  250. package/dist/web/features/session/MessageMarkdown.d.mts.map +1 -0
  251. package/dist/web/features/session/MessageMarkdown.mjs +20 -0
  252. package/dist/web/features/session/MessageMarkdown.mjs.map +1 -0
  253. package/dist/web/features/session/QueueSheet.cjs +189 -0
  254. package/dist/web/features/session/QueueSheet.cjs.map +1 -0
  255. package/dist/web/features/session/QueueSheet.d.mts +16 -0
  256. package/dist/web/features/session/QueueSheet.d.mts.map +1 -0
  257. package/dist/web/features/session/QueueSheet.mjs +189 -0
  258. package/dist/web/features/session/QueueSheet.mjs.map +1 -0
  259. package/dist/web/features/session/SessionActivity.cjs +88 -0
  260. package/dist/web/features/session/SessionActivity.cjs.map +1 -0
  261. package/dist/web/features/session/SessionActivity.d.mts +16 -0
  262. package/dist/web/features/session/SessionActivity.d.mts.map +1 -0
  263. package/dist/web/features/session/SessionActivity.mjs +87 -0
  264. package/dist/web/features/session/SessionActivity.mjs.map +1 -0
  265. package/dist/web/features/session/SessionTranscriptView.cjs +34 -0
  266. package/dist/web/features/session/SessionTranscriptView.cjs.map +1 -0
  267. package/dist/web/features/session/SessionTranscriptView.d.mts +16 -0
  268. package/dist/web/features/session/SessionTranscriptView.d.mts.map +1 -0
  269. package/dist/web/features/session/SessionTranscriptView.mjs +34 -0
  270. package/dist/web/features/session/SessionTranscriptView.mjs.map +1 -0
  271. package/dist/web/features/session/ThreadView.cjs +40 -0
  272. package/dist/web/features/session/ThreadView.cjs.map +1 -0
  273. package/dist/web/features/session/ThreadView.d.mts +18 -0
  274. package/dist/web/features/session/ThreadView.d.mts.map +1 -0
  275. package/dist/web/features/session/ThreadView.mjs +40 -0
  276. package/dist/web/features/session/ThreadView.mjs.map +1 -0
  277. package/dist/web/features/session/Timeline.cjs +620 -0
  278. package/dist/web/features/session/Timeline.cjs.map +1 -0
  279. package/dist/web/features/session/Timeline.d.mts +28 -0
  280. package/dist/web/features/session/Timeline.d.mts.map +1 -0
  281. package/dist/web/features/session/Timeline.mjs +619 -0
  282. package/dist/web/features/session/Timeline.mjs.map +1 -0
  283. package/dist/web/features/session/ToolCard.cjs +210 -0
  284. package/dist/web/features/session/ToolCard.cjs.map +1 -0
  285. package/dist/web/features/session/ToolCard.d.mts +16 -0
  286. package/dist/web/features/session/ToolCard.d.mts.map +1 -0
  287. package/dist/web/features/session/ToolCard.mjs +210 -0
  288. package/dist/web/features/session/ToolCard.mjs.map +1 -0
  289. package/dist/web/features/session/session.fixture.cjs +76 -0
  290. package/dist/web/features/session/session.fixture.cjs.map +1 -0
  291. package/dist/web/features/session/session.fixture.d.mts +6 -0
  292. package/dist/web/features/session/session.fixture.d.mts.map +1 -0
  293. package/dist/web/features/session/session.fixture.mjs +74 -0
  294. package/dist/web/features/session/session.fixture.mjs.map +1 -0
  295. package/dist/web/features/sessions/NewSessionDialog.cjs +70 -0
  296. package/dist/web/features/sessions/NewSessionDialog.cjs.map +1 -0
  297. package/dist/web/features/sessions/NewSessionDialog.d.mts +9 -0
  298. package/dist/web/features/sessions/NewSessionDialog.d.mts.map +1 -0
  299. package/dist/web/features/sessions/NewSessionDialog.mjs +70 -0
  300. package/dist/web/features/sessions/NewSessionDialog.mjs.map +1 -0
  301. package/dist/web/features/sessions/ResumeSessionDialog.cjs +131 -0
  302. package/dist/web/features/sessions/ResumeSessionDialog.cjs.map +1 -0
  303. package/dist/web/features/sessions/ResumeSessionDialog.d.mts +14 -0
  304. package/dist/web/features/sessions/ResumeSessionDialog.d.mts.map +1 -0
  305. package/dist/web/features/sessions/ResumeSessionDialog.mjs +131 -0
  306. package/dist/web/features/sessions/ResumeSessionDialog.mjs.map +1 -0
  307. package/dist/web/features/sessions/SessionRailDialogs.cjs +62 -0
  308. package/dist/web/features/sessions/SessionRailDialogs.cjs.map +1 -0
  309. package/dist/web/features/sessions/SessionRailDialogs.d.mts +10 -0
  310. package/dist/web/features/sessions/SessionRailDialogs.d.mts.map +1 -0
  311. package/dist/web/features/sessions/SessionRailDialogs.mjs +62 -0
  312. package/dist/web/features/sessions/SessionRailDialogs.mjs.map +1 -0
  313. package/dist/web/features/sessions/WelcomePanel.cjs +42 -0
  314. package/dist/web/features/sessions/WelcomePanel.cjs.map +1 -0
  315. package/dist/web/features/sessions/WelcomePanel.d.mts +16 -0
  316. package/dist/web/features/sessions/WelcomePanel.d.mts.map +1 -0
  317. package/dist/web/features/sessions/WelcomePanel.mjs +42 -0
  318. package/dist/web/features/sessions/WelcomePanel.mjs.map +1 -0
  319. package/dist/web/features/sessions/useNewSessionActions.cjs +38 -0
  320. package/dist/web/features/sessions/useNewSessionActions.cjs.map +1 -0
  321. package/dist/web/features/sessions/useNewSessionActions.d.mts +12 -0
  322. package/dist/web/features/sessions/useNewSessionActions.d.mts.map +1 -0
  323. package/dist/web/features/sessions/useNewSessionActions.mjs +38 -0
  324. package/dist/web/features/sessions/useNewSessionActions.mjs.map +1 -0
  325. package/dist/web/features/sessions/useSessionRail.cjs +302 -0
  326. package/dist/web/features/sessions/useSessionRail.cjs.map +1 -0
  327. package/dist/web/features/sessions/useSessionRail.d.mts +14 -0
  328. package/dist/web/features/sessions/useSessionRail.d.mts.map +1 -0
  329. package/dist/web/features/sessions/useSessionRail.mjs +302 -0
  330. package/dist/web/features/sessions/useSessionRail.mjs.map +1 -0
  331. package/dist/web/features/settings/AppearanceSettings.cjs +126 -0
  332. package/dist/web/features/settings/AppearanceSettings.cjs.map +1 -0
  333. package/dist/web/features/settings/AppearanceSettings.d.mts +12 -0
  334. package/dist/web/features/settings/AppearanceSettings.d.mts.map +1 -0
  335. package/dist/web/features/settings/AppearanceSettings.mjs +126 -0
  336. package/dist/web/features/settings/AppearanceSettings.mjs.map +1 -0
  337. package/dist/web/features/settings/ContributedSettings.cjs +257 -0
  338. package/dist/web/features/settings/ContributedSettings.cjs.map +1 -0
  339. package/dist/web/features/settings/ContributedSettings.d.mts +14 -0
  340. package/dist/web/features/settings/ContributedSettings.d.mts.map +1 -0
  341. package/dist/web/features/settings/ContributedSettings.mjs +257 -0
  342. package/dist/web/features/settings/ContributedSettings.mjs.map +1 -0
  343. package/dist/web/features/settings/ImageSettings.cjs +146 -0
  344. package/dist/web/features/settings/ImageSettings.cjs.map +1 -0
  345. package/dist/web/features/settings/ImageSettings.d.mts +12 -0
  346. package/dist/web/features/settings/ImageSettings.d.mts.map +1 -0
  347. package/dist/web/features/settings/ImageSettings.mjs +146 -0
  348. package/dist/web/features/settings/ImageSettings.mjs.map +1 -0
  349. package/dist/web/features/settings/LoginFlowDialog.cjs +226 -0
  350. package/dist/web/features/settings/LoginFlowDialog.cjs.map +1 -0
  351. package/dist/web/features/settings/LoginFlowDialog.d.mts +15 -0
  352. package/dist/web/features/settings/LoginFlowDialog.d.mts.map +1 -0
  353. package/dist/web/features/settings/LoginFlowDialog.mjs +225 -0
  354. package/dist/web/features/settings/LoginFlowDialog.mjs.map +1 -0
  355. package/dist/web/features/settings/NotificationSettings.cjs +69 -0
  356. package/dist/web/features/settings/NotificationSettings.cjs.map +1 -0
  357. package/dist/web/features/settings/NotificationSettings.d.mts +5 -0
  358. package/dist/web/features/settings/NotificationSettings.d.mts.map +1 -0
  359. package/dist/web/features/settings/NotificationSettings.mjs +69 -0
  360. package/dist/web/features/settings/NotificationSettings.mjs.map +1 -0
  361. package/dist/web/features/settings/PluginSettings.cjs +106 -0
  362. package/dist/web/features/settings/PluginSettings.cjs.map +1 -0
  363. package/dist/web/features/settings/PluginSettings.d.mts +10 -0
  364. package/dist/web/features/settings/PluginSettings.d.mts.map +1 -0
  365. package/dist/web/features/settings/PluginSettings.mjs +106 -0
  366. package/dist/web/features/settings/PluginSettings.mjs.map +1 -0
  367. package/dist/web/features/settings/ProviderSettings.cjs +323 -0
  368. package/dist/web/features/settings/ProviderSettings.cjs.map +1 -0
  369. package/dist/web/features/settings/ProviderSettings.d.mts +9 -0
  370. package/dist/web/features/settings/ProviderSettings.d.mts.map +1 -0
  371. package/dist/web/features/settings/ProviderSettings.mjs +323 -0
  372. package/dist/web/features/settings/ProviderSettings.mjs.map +1 -0
  373. package/dist/web/features/settings/RemoteControlSettings.cjs +50 -0
  374. package/dist/web/features/settings/RemoteControlSettings.cjs.map +1 -0
  375. package/dist/web/features/settings/RemoteControlSettings.d.mts +5 -0
  376. package/dist/web/features/settings/RemoteControlSettings.d.mts.map +1 -0
  377. package/dist/web/features/settings/RemoteControlSettings.mjs +50 -0
  378. package/dist/web/features/settings/RemoteControlSettings.mjs.map +1 -0
  379. package/dist/web/features/settings/RepositorySettings.cjs +318 -0
  380. package/dist/web/features/settings/RepositorySettings.cjs.map +1 -0
  381. package/dist/web/features/settings/RepositorySettings.d.mts +7 -0
  382. package/dist/web/features/settings/RepositorySettings.d.mts.map +1 -0
  383. package/dist/web/features/settings/RepositorySettings.mjs +318 -0
  384. package/dist/web/features/settings/RepositorySettings.mjs.map +1 -0
  385. package/dist/web/features/settings/RepositoryWorkspace.cjs +160 -0
  386. package/dist/web/features/settings/RepositoryWorkspace.cjs.map +1 -0
  387. package/dist/web/features/settings/RepositoryWorkspace.d.mts +10 -0
  388. package/dist/web/features/settings/RepositoryWorkspace.d.mts.map +1 -0
  389. package/dist/web/features/settings/RepositoryWorkspace.mjs +160 -0
  390. package/dist/web/features/settings/RepositoryWorkspace.mjs.map +1 -0
  391. package/dist/web/features/settings/SessionMcpSettings.cjs +488 -0
  392. package/dist/web/features/settings/SessionMcpSettings.cjs.map +1 -0
  393. package/dist/web/features/settings/SessionMcpSettings.d.mts +5 -0
  394. package/dist/web/features/settings/SessionMcpSettings.d.mts.map +1 -0
  395. package/dist/web/features/settings/SessionMcpSettings.mjs +488 -0
  396. package/dist/web/features/settings/SessionMcpSettings.mjs.map +1 -0
  397. package/dist/web/features/settings/SettingsMenu.cjs +135 -0
  398. package/dist/web/features/settings/SettingsMenu.cjs.map +1 -0
  399. package/dist/web/features/settings/SettingsMenu.d.mts +9 -0
  400. package/dist/web/features/settings/SettingsMenu.d.mts.map +1 -0
  401. package/dist/web/features/settings/SettingsMenu.mjs +135 -0
  402. package/dist/web/features/settings/SettingsMenu.mjs.map +1 -0
  403. package/dist/web/features/settings/SettingsPanelHost.cjs +32 -0
  404. package/dist/web/features/settings/SettingsPanelHost.cjs.map +1 -0
  405. package/dist/web/features/settings/SettingsPanelHost.d.mts +8 -0
  406. package/dist/web/features/settings/SettingsPanelHost.d.mts.map +1 -0
  407. package/dist/web/features/settings/SettingsPanelHost.mjs +32 -0
  408. package/dist/web/features/settings/SettingsPanelHost.mjs.map +1 -0
  409. package/dist/web/features/settings/TemplateSettings.cjs +177 -0
  410. package/dist/web/features/settings/TemplateSettings.cjs.map +1 -0
  411. package/dist/web/features/settings/TemplateSettings.d.mts +8 -0
  412. package/dist/web/features/settings/TemplateSettings.d.mts.map +1 -0
  413. package/dist/web/features/settings/TemplateSettings.mjs +177 -0
  414. package/dist/web/features/settings/TemplateSettings.mjs.map +1 -0
  415. package/dist/web/features/settings/TunnelSettings.cjs +182 -0
  416. package/dist/web/features/settings/TunnelSettings.cjs.map +1 -0
  417. package/dist/web/features/settings/TunnelSettings.d.mts +8 -0
  418. package/dist/web/features/settings/TunnelSettings.d.mts.map +1 -0
  419. package/dist/web/features/settings/TunnelSettings.mjs +182 -0
  420. package/dist/web/features/settings/TunnelSettings.mjs.map +1 -0
  421. package/dist/web/features/settings/settings.fixture.cjs +230 -0
  422. package/dist/web/features/settings/settings.fixture.cjs.map +1 -0
  423. package/dist/web/features/settings/settings.fixture.d.mts +6 -0
  424. package/dist/web/features/settings/settings.fixture.d.mts.map +1 -0
  425. package/dist/web/features/settings/settings.fixture.mjs +223 -0
  426. package/dist/web/features/settings/settings.fixture.mjs.map +1 -0
  427. package/dist/web/features/status/TopBar.cjs +200 -0
  428. package/dist/web/features/status/TopBar.cjs.map +1 -0
  429. package/dist/web/features/status/TopBar.d.mts +11 -0
  430. package/dist/web/features/status/TopBar.d.mts.map +1 -0
  431. package/dist/web/features/status/TopBar.mjs +200 -0
  432. package/dist/web/features/status/TopBar.mjs.map +1 -0
  433. package/dist/web/lib/authApi.cjs +77 -0
  434. package/dist/web/lib/authApi.cjs.map +1 -0
  435. package/dist/web/lib/authApi.d.mts +28 -0
  436. package/dist/web/lib/authApi.d.mts.map +1 -0
  437. package/dist/web/lib/authApi.mjs +72 -0
  438. package/dist/web/lib/authApi.mjs.map +1 -0
  439. package/dist/web/lib/browserNotifications.cjs +37 -0
  440. package/dist/web/lib/browserNotifications.cjs.map +1 -0
  441. package/dist/web/lib/browserNotifications.d.mts +12 -0
  442. package/dist/web/lib/browserNotifications.d.mts.map +1 -0
  443. package/dist/web/lib/browserNotifications.mjs +35 -0
  444. package/dist/web/lib/browserNotifications.mjs.map +1 -0
  445. package/dist/web/lib/browserTelemetry.cjs +158 -0
  446. package/dist/web/lib/browserTelemetry.cjs.map +1 -0
  447. package/dist/web/lib/browserTelemetry.d.mts +28 -0
  448. package/dist/web/lib/browserTelemetry.d.mts.map +1 -0
  449. package/dist/web/lib/browserTelemetry.mjs +154 -0
  450. package/dist/web/lib/browserTelemetry.mjs.map +1 -0
  451. package/dist/web/lib/commands.cjs +176 -0
  452. package/dist/web/lib/commands.cjs.map +1 -0
  453. package/dist/web/lib/commands.d.mts +53 -0
  454. package/dist/web/lib/commands.d.mts.map +1 -0
  455. package/dist/web/lib/commands.mjs +153 -0
  456. package/dist/web/lib/commands.mjs.map +1 -0
  457. package/dist/web/lib/composerSubmissions.cjs +20 -0
  458. package/dist/web/lib/composerSubmissions.cjs.map +1 -0
  459. package/dist/web/lib/composerSubmissions.d.mts +7 -0
  460. package/dist/web/lib/composerSubmissions.d.mts.map +1 -0
  461. package/dist/web/lib/composerSubmissions.mjs +19 -0
  462. package/dist/web/lib/composerSubmissions.mjs.map +1 -0
  463. package/dist/web/lib/composition.cjs +403 -0
  464. package/dist/web/lib/composition.cjs.map +1 -0
  465. package/dist/web/lib/composition.d.mts +137 -0
  466. package/dist/web/lib/composition.d.mts.map +1 -0
  467. package/dist/web/lib/composition.mjs +392 -0
  468. package/dist/web/lib/composition.mjs.map +1 -0
  469. package/dist/web/lib/contextComposition.cjs +132 -0
  470. package/dist/web/lib/contextComposition.cjs.map +1 -0
  471. package/dist/web/lib/contextComposition.d.mts +75 -0
  472. package/dist/web/lib/contextComposition.d.mts.map +1 -0
  473. package/dist/web/lib/contextComposition.mjs +127 -0
  474. package/dist/web/lib/contextComposition.mjs.map +1 -0
  475. package/dist/web/lib/contextDetailApi.cjs +61 -0
  476. package/dist/web/lib/contextDetailApi.cjs.map +1 -0
  477. package/dist/web/lib/contextDetailApi.d.mts +12 -0
  478. package/dist/web/lib/contextDetailApi.d.mts.map +1 -0
  479. package/dist/web/lib/contextDetailApi.mjs +61 -0
  480. package/dist/web/lib/contextDetailApi.mjs.map +1 -0
  481. package/dist/web/lib/dashboardRenderers.cjs +9 -0
  482. package/dist/web/lib/dashboardRenderers.cjs.map +1 -0
  483. package/dist/web/lib/dashboardRenderers.d.mts +12 -0
  484. package/dist/web/lib/dashboardRenderers.d.mts.map +1 -0
  485. package/dist/web/lib/dashboardRenderers.mjs +9 -0
  486. package/dist/web/lib/dashboardRenderers.mjs.map +1 -0
  487. package/dist/web/lib/dashboardRoute.cjs +27 -0
  488. package/dist/web/lib/dashboardRoute.cjs.map +1 -0
  489. package/dist/web/lib/dashboardRoute.d.mts +29 -0
  490. package/dist/web/lib/dashboardRoute.d.mts.map +1 -0
  491. package/dist/web/lib/dashboardRoute.mjs +26 -0
  492. package/dist/web/lib/dashboardRoute.mjs.map +1 -0
  493. package/dist/web/lib/dashboardTranscript.cjs +15 -0
  494. package/dist/web/lib/dashboardTranscript.cjs.map +1 -0
  495. package/dist/web/lib/dashboardTranscript.d.mts +6 -0
  496. package/dist/web/lib/dashboardTranscript.d.mts.map +1 -0
  497. package/dist/web/lib/dashboardTranscript.mjs +14 -0
  498. package/dist/web/lib/dashboardTranscript.mjs.map +1 -0
  499. package/dist/web/lib/devProxyApi.cjs +74 -0
  500. package/dist/web/lib/devProxyApi.cjs.map +1 -0
  501. package/dist/web/lib/devProxyApi.d.mts +21 -0
  502. package/dist/web/lib/devProxyApi.d.mts.map +1 -0
  503. package/dist/web/lib/devProxyApi.mjs +72 -0
  504. package/dist/web/lib/devProxyApi.mjs.map +1 -0
  505. package/dist/web/lib/fileMentions.cjs +30 -0
  506. package/dist/web/lib/fileMentions.cjs.map +1 -0
  507. package/dist/web/lib/fileMentions.d.mts +13 -0
  508. package/dist/web/lib/fileMentions.d.mts.map +1 -0
  509. package/dist/web/lib/fileMentions.mjs +29 -0
  510. package/dist/web/lib/fileMentions.mjs.map +1 -0
  511. package/dist/web/lib/hubApi.cjs +283 -0
  512. package/dist/web/lib/hubApi.cjs.map +1 -0
  513. package/dist/web/lib/hubApi.d.mts +109 -0
  514. package/dist/web/lib/hubApi.d.mts.map +1 -0
  515. package/dist/web/lib/hubApi.mjs +268 -0
  516. package/dist/web/lib/hubApi.mjs.map +1 -0
  517. package/dist/web/lib/leaderTree.cjs +150 -0
  518. package/dist/web/lib/leaderTree.cjs.map +1 -0
  519. package/dist/web/lib/leaderTree.d.mts +41 -0
  520. package/dist/web/lib/leaderTree.d.mts.map +1 -0
  521. package/dist/web/lib/leaderTree.mjs +149 -0
  522. package/dist/web/lib/leaderTree.mjs.map +1 -0
  523. package/dist/web/lib/livePush.cjs +97 -0
  524. package/dist/web/lib/livePush.cjs.map +1 -0
  525. package/dist/web/lib/livePush.d.mts +10 -0
  526. package/dist/web/lib/livePush.d.mts.map +1 -0
  527. package/dist/web/lib/livePush.mjs +94 -0
  528. package/dist/web/lib/livePush.mjs.map +1 -0
  529. package/dist/web/lib/modelContextAdapter.cjs +63 -0
  530. package/dist/web/lib/modelContextAdapter.cjs.map +1 -0
  531. package/dist/web/lib/modelContextAdapter.d.mts +11 -0
  532. package/dist/web/lib/modelContextAdapter.d.mts.map +1 -0
  533. package/dist/web/lib/modelContextAdapter.mjs +62 -0
  534. package/dist/web/lib/modelContextAdapter.mjs.map +1 -0
  535. package/dist/web/lib/piTransport.cjs +103 -0
  536. package/dist/web/lib/piTransport.cjs.map +1 -0
  537. package/dist/web/lib/piTransport.d.mts +8 -0
  538. package/dist/web/lib/piTransport.d.mts.map +1 -0
  539. package/dist/web/lib/piTransport.mjs +102 -0
  540. package/dist/web/lib/piTransport.mjs.map +1 -0
  541. package/dist/web/lib/pluginCompositions.cjs +57 -0
  542. package/dist/web/lib/pluginCompositions.cjs.map +1 -0
  543. package/dist/web/lib/pluginCompositions.d.mts +37 -0
  544. package/dist/web/lib/pluginCompositions.d.mts.map +1 -0
  545. package/dist/web/lib/pluginCompositions.mjs +52 -0
  546. package/dist/web/lib/pluginCompositions.mjs.map +1 -0
  547. package/dist/web/lib/pluginRegistry.cjs +675 -0
  548. package/dist/web/lib/pluginRegistry.cjs.map +1 -0
  549. package/dist/web/lib/pluginRegistry.d.mts +155 -0
  550. package/dist/web/lib/pluginRegistry.d.mts.map +1 -0
  551. package/dist/web/lib/pluginRegistry.mjs +633 -0
  552. package/dist/web/lib/pluginRegistry.mjs.map +1 -0
  553. package/dist/web/lib/pluginScopes.cjs +48 -0
  554. package/dist/web/lib/pluginScopes.cjs.map +1 -0
  555. package/dist/web/lib/pluginScopes.d.mts +8 -0
  556. package/dist/web/lib/pluginScopes.d.mts.map +1 -0
  557. package/dist/web/lib/pluginScopes.mjs +47 -0
  558. package/dist/web/lib/pluginScopes.mjs.map +1 -0
  559. package/dist/web/lib/pluginSlotProps.cjs +83 -0
  560. package/dist/web/lib/pluginSlotProps.cjs.map +1 -0
  561. package/dist/web/lib/pluginSlotProps.d.mts +21 -0
  562. package/dist/web/lib/pluginSlotProps.d.mts.map +1 -0
  563. package/dist/web/lib/pluginSlotProps.mjs +82 -0
  564. package/dist/web/lib/pluginSlotProps.mjs.map +1 -0
  565. package/dist/web/lib/promptFocus.cjs +30 -0
  566. package/dist/web/lib/promptFocus.cjs.map +1 -0
  567. package/dist/web/lib/promptFocus.d.mts +7 -0
  568. package/dist/web/lib/promptFocus.d.mts.map +1 -0
  569. package/dist/web/lib/promptFocus.mjs +29 -0
  570. package/dist/web/lib/promptFocus.mjs.map +1 -0
  571. package/dist/web/lib/protocolHubSocket.cjs +107 -0
  572. package/dist/web/lib/protocolHubSocket.cjs.map +1 -0
  573. package/dist/web/lib/protocolHubSocket.d.mts +18 -0
  574. package/dist/web/lib/protocolHubSocket.d.mts.map +1 -0
  575. package/dist/web/lib/protocolHubSocket.mjs +107 -0
  576. package/dist/web/lib/protocolHubSocket.mjs.map +1 -0
  577. package/dist/web/lib/protocolTimeline.cjs +86 -0
  578. package/dist/web/lib/protocolTimeline.cjs.map +1 -0
  579. package/dist/web/lib/protocolTimeline.d.mts +9 -0
  580. package/dist/web/lib/protocolTimeline.d.mts.map +1 -0
  581. package/dist/web/lib/protocolTimeline.mjs +85 -0
  582. package/dist/web/lib/protocolTimeline.mjs.map +1 -0
  583. package/dist/web/lib/qrMatrix.cjs +37 -0
  584. package/dist/web/lib/qrMatrix.cjs.map +1 -0
  585. package/dist/web/lib/qrMatrix.d.mts +5 -0
  586. package/dist/web/lib/qrMatrix.d.mts.map +1 -0
  587. package/dist/web/lib/qrMatrix.mjs +35 -0
  588. package/dist/web/lib/qrMatrix.mjs.map +1 -0
  589. package/dist/web/lib/remoteApi.cjs +100 -0
  590. package/dist/web/lib/remoteApi.cjs.map +1 -0
  591. package/dist/web/lib/remoteApi.d.mts +45 -0
  592. package/dist/web/lib/remoteApi.d.mts.map +1 -0
  593. package/dist/web/lib/remoteApi.mjs +92 -0
  594. package/dist/web/lib/remoteApi.mjs.map +1 -0
  595. package/dist/web/lib/sealedSession.cjs +81 -0
  596. package/dist/web/lib/sealedSession.cjs.map +1 -0
  597. package/dist/web/lib/sealedSession.d.mts +24 -0
  598. package/dist/web/lib/sealedSession.d.mts.map +1 -0
  599. package/dist/web/lib/sealedSession.mjs +75 -0
  600. package/dist/web/lib/sealedSession.mjs.map +1 -0
  601. package/dist/web/lib/sessionActivityRenderer.cjs +19 -0
  602. package/dist/web/lib/sessionActivityRenderer.cjs.map +1 -0
  603. package/dist/web/lib/sessionActivityRenderer.d.mts +10 -0
  604. package/dist/web/lib/sessionActivityRenderer.d.mts.map +1 -0
  605. package/dist/web/lib/sessionActivityRenderer.mjs +17 -0
  606. package/dist/web/lib/sessionActivityRenderer.mjs.map +1 -0
  607. package/dist/web/lib/sessionAsset.cjs +45 -0
  608. package/dist/web/lib/sessionAsset.cjs.map +1 -0
  609. package/dist/web/lib/sessionAsset.d.mts +17 -0
  610. package/dist/web/lib/sessionAsset.d.mts.map +1 -0
  611. package/dist/web/lib/sessionAsset.mjs +44 -0
  612. package/dist/web/lib/sessionAsset.mjs.map +1 -0
  613. package/dist/web/lib/sessionAvatar.cjs +18 -0
  614. package/dist/web/lib/sessionAvatar.cjs.map +1 -0
  615. package/dist/web/lib/sessionAvatar.d.mts +10 -0
  616. package/dist/web/lib/sessionAvatar.d.mts.map +1 -0
  617. package/dist/web/lib/sessionAvatar.mjs +18 -0
  618. package/dist/web/lib/sessionAvatar.mjs.map +1 -0
  619. package/dist/web/lib/sessionMcpApi.cjs +120 -0
  620. package/dist/web/lib/sessionMcpApi.cjs.map +1 -0
  621. package/dist/web/lib/sessionMcpApi.d.mts +27 -0
  622. package/dist/web/lib/sessionMcpApi.d.mts.map +1 -0
  623. package/dist/web/lib/sessionMcpApi.mjs +114 -0
  624. package/dist/web/lib/sessionMcpApi.mjs.map +1 -0
  625. package/dist/web/lib/sessionMcpPrompt.cjs +24 -0
  626. package/dist/web/lib/sessionMcpPrompt.cjs.map +1 -0
  627. package/dist/web/lib/sessionMcpPrompt.mjs +23 -0
  628. package/dist/web/lib/sessionMcpPrompt.mjs.map +1 -0
  629. package/dist/web/lib/sessionModel.cjs +970 -0
  630. package/dist/web/lib/sessionModel.cjs.map +1 -0
  631. package/dist/web/lib/sessionModel.d.mts +254 -0
  632. package/dist/web/lib/sessionModel.d.mts.map +1 -0
  633. package/dist/web/lib/sessionModel.mjs +958 -0
  634. package/dist/web/lib/sessionModel.mjs.map +1 -0
  635. package/dist/web/lib/sessionProtocolCommands.cjs +196 -0
  636. package/dist/web/lib/sessionProtocolCommands.cjs.map +1 -0
  637. package/dist/web/lib/sessionProtocolCommands.d.mts +15 -0
  638. package/dist/web/lib/sessionProtocolCommands.d.mts.map +1 -0
  639. package/dist/web/lib/sessionProtocolCommands.mjs +193 -0
  640. package/dist/web/lib/sessionProtocolCommands.mjs.map +1 -0
  641. package/dist/web/lib/sessionRailModel.cjs +107 -0
  642. package/dist/web/lib/sessionRailModel.cjs.map +1 -0
  643. package/dist/web/lib/sessionRailModel.d.mts +38 -0
  644. package/dist/web/lib/sessionRailModel.d.mts.map +1 -0
  645. package/dist/web/lib/sessionRailModel.mjs +104 -0
  646. package/dist/web/lib/sessionRailModel.mjs.map +1 -0
  647. package/dist/web/lib/sessionSummary.cjs +58 -0
  648. package/dist/web/lib/sessionSummary.cjs.map +1 -0
  649. package/dist/web/lib/sessionSummary.d.mts +39 -0
  650. package/dist/web/lib/sessionSummary.d.mts.map +1 -0
  651. package/dist/web/lib/sessionSummary.mjs +54 -0
  652. package/dist/web/lib/sessionSummary.mjs.map +1 -0
  653. package/dist/web/lib/sessionTranscriptRenderer.cjs +19 -0
  654. package/dist/web/lib/sessionTranscriptRenderer.cjs.map +1 -0
  655. package/dist/web/lib/sessionTranscriptRenderer.d.mts +11 -0
  656. package/dist/web/lib/sessionTranscriptRenderer.d.mts.map +1 -0
  657. package/dist/web/lib/sessionTranscriptRenderer.mjs +17 -0
  658. package/dist/web/lib/sessionTranscriptRenderer.mjs.map +1 -0
  659. package/dist/web/lib/settingsApi.cjs +237 -0
  660. package/dist/web/lib/settingsApi.cjs.map +1 -0
  661. package/dist/web/lib/settingsApi.d.mts +57 -0
  662. package/dist/web/lib/settingsApi.d.mts.map +1 -0
  663. package/dist/web/lib/settingsApi.mjs +230 -0
  664. package/dist/web/lib/settingsApi.mjs.map +1 -0
  665. package/dist/web/lib/settingsDraft.cjs +48 -0
  666. package/dist/web/lib/settingsDraft.cjs.map +1 -0
  667. package/dist/web/lib/settingsDraft.d.mts +28 -0
  668. package/dist/web/lib/settingsDraft.d.mts.map +1 -0
  669. package/dist/web/lib/settingsDraft.mjs +45 -0
  670. package/dist/web/lib/settingsDraft.mjs.map +1 -0
  671. package/dist/web/lib/settingsSections.cjs +108 -0
  672. package/dist/web/lib/settingsSections.cjs.map +1 -0
  673. package/dist/web/lib/settingsSections.d.mts +36 -0
  674. package/dist/web/lib/settingsSections.d.mts.map +1 -0
  675. package/dist/web/lib/settingsSections.mjs +105 -0
  676. package/dist/web/lib/settingsSections.mjs.map +1 -0
  677. package/dist/web/lib/statusLine.cjs +82 -0
  678. package/dist/web/lib/statusLine.cjs.map +1 -0
  679. package/dist/web/lib/statusLine.d.mts +27 -0
  680. package/dist/web/lib/statusLine.d.mts.map +1 -0
  681. package/dist/web/lib/statusLine.mjs +79 -0
  682. package/dist/web/lib/statusLine.mjs.map +1 -0
  683. package/dist/web/lib/stepUp.cjs +41 -0
  684. package/dist/web/lib/stepUp.cjs.map +1 -0
  685. package/dist/web/lib/stepUp.d.mts +18 -0
  686. package/dist/web/lib/stepUp.d.mts.map +1 -0
  687. package/dist/web/lib/stepUp.mjs +41 -0
  688. package/dist/web/lib/stepUp.mjs.map +1 -0
  689. package/dist/web/lib/templateCatalog.cjs +123 -0
  690. package/dist/web/lib/templateCatalog.cjs.map +1 -0
  691. package/dist/web/lib/templateCatalog.d.mts +38 -0
  692. package/dist/web/lib/templateCatalog.d.mts.map +1 -0
  693. package/dist/web/lib/templateCatalog.mjs +118 -0
  694. package/dist/web/lib/templateCatalog.mjs.map +1 -0
  695. package/dist/web/lib/threadRenderer.cjs +25 -0
  696. package/dist/web/lib/threadRenderer.cjs.map +1 -0
  697. package/dist/web/lib/threadRenderer.d.mts +17 -0
  698. package/dist/web/lib/threadRenderer.d.mts.map +1 -0
  699. package/dist/web/lib/threadRenderer.mjs +23 -0
  700. package/dist/web/lib/threadRenderer.mjs.map +1 -0
  701. package/dist/web/lib/timelineGroups.cjs +83 -0
  702. package/dist/web/lib/timelineGroups.cjs.map +1 -0
  703. package/dist/web/lib/timelineGroups.d.mts +36 -0
  704. package/dist/web/lib/timelineGroups.d.mts.map +1 -0
  705. package/dist/web/lib/timelineGroups.mjs +81 -0
  706. package/dist/web/lib/timelineGroups.mjs.map +1 -0
  707. package/dist/web/lib/toolCompletionTabs.cjs +98 -0
  708. package/dist/web/lib/toolCompletionTabs.cjs.map +1 -0
  709. package/dist/web/lib/toolCompletionTabs.d.mts +14 -0
  710. package/dist/web/lib/toolCompletionTabs.d.mts.map +1 -0
  711. package/dist/web/lib/toolCompletionTabs.mjs +98 -0
  712. package/dist/web/lib/toolCompletionTabs.mjs.map +1 -0
  713. package/dist/web/lib/toolMessageProps.cjs +19 -0
  714. package/dist/web/lib/toolMessageProps.cjs.map +1 -0
  715. package/dist/web/lib/toolMessageProps.d.mts +7 -0
  716. package/dist/web/lib/toolMessageProps.d.mts.map +1 -0
  717. package/dist/web/lib/toolMessageProps.mjs +19 -0
  718. package/dist/web/lib/toolMessageProps.mjs.map +1 -0
  719. package/dist/web/lib/toolPrompt.cjs +44 -0
  720. package/dist/web/lib/toolPrompt.cjs.map +1 -0
  721. package/dist/web/lib/toolPrompt.d.mts +34 -0
  722. package/dist/web/lib/toolPrompt.d.mts.map +1 -0
  723. package/dist/web/lib/toolPrompt.mjs +44 -0
  724. package/dist/web/lib/toolPrompt.mjs.map +1 -0
  725. package/dist/web/lib/transport.cjs +57 -0
  726. package/dist/web/lib/transport.cjs.map +1 -0
  727. package/dist/web/lib/transport.d.mts +40 -0
  728. package/dist/web/lib/transport.d.mts.map +1 -0
  729. package/dist/web/lib/transport.mjs +50 -0
  730. package/dist/web/lib/transport.mjs.map +1 -0
  731. package/dist/web/lib/useSessionMcp.cjs +65 -0
  732. package/dist/web/lib/useSessionMcp.cjs.map +1 -0
  733. package/dist/web/lib/useSessionMcp.d.mts +15 -0
  734. package/dist/web/lib/useSessionMcp.d.mts.map +1 -0
  735. package/dist/web/lib/useSessionMcp.mjs +65 -0
  736. package/dist/web/lib/useSessionMcp.mjs.map +1 -0
  737. package/dist/web/lib/webauthnClient.cjs +110 -0
  738. package/dist/web/lib/webauthnClient.cjs.map +1 -0
  739. package/dist/web/lib/webauthnClient.d.mts +32 -0
  740. package/dist/web/lib/webauthnClient.d.mts.map +1 -0
  741. package/dist/web/lib/webauthnClient.mjs +106 -0
  742. package/dist/web/lib/webauthnClient.mjs.map +1 -0
  743. package/dist/web/lib/webmcpSimulator.cjs +105 -0
  744. package/dist/web/lib/webmcpSimulator.cjs.map +1 -0
  745. package/dist/web/lib/webmcpSimulator.mjs +105 -0
  746. package/dist/web/lib/webmcpSimulator.mjs.map +1 -0
  747. package/dist/web/stores/captureStore.cjs +137 -0
  748. package/dist/web/stores/captureStore.cjs.map +1 -0
  749. package/dist/web/stores/captureStore.d.mts +13 -0
  750. package/dist/web/stores/captureStore.d.mts.map +1 -0
  751. package/dist/web/stores/captureStore.mjs +133 -0
  752. package/dist/web/stores/captureStore.mjs.map +1 -0
  753. package/dist/web/stores/composerStore.cjs +390 -0
  754. package/dist/web/stores/composerStore.cjs.map +1 -0
  755. package/dist/web/stores/composerStore.d.mts +101 -0
  756. package/dist/web/stores/composerStore.d.mts.map +1 -0
  757. package/dist/web/stores/composerStore.mjs +370 -0
  758. package/dist/web/stores/composerStore.mjs.map +1 -0
  759. package/dist/web/stores/composerSubmissionStore.cjs +88 -0
  760. package/dist/web/stores/composerSubmissionStore.cjs.map +1 -0
  761. package/dist/web/stores/composerSubmissionStore.d.mts +11 -0
  762. package/dist/web/stores/composerSubmissionStore.d.mts.map +1 -0
  763. package/dist/web/stores/composerSubmissionStore.mjs +87 -0
  764. package/dist/web/stores/composerSubmissionStore.mjs.map +1 -0
  765. package/dist/web/stores/dashboardStateStore.cjs +35 -0
  766. package/dist/web/stores/dashboardStateStore.cjs.map +1 -0
  767. package/dist/web/stores/dashboardStateStore.d.mts +11 -0
  768. package/dist/web/stores/dashboardStateStore.d.mts.map +1 -0
  769. package/dist/web/stores/dashboardStateStore.mjs +33 -0
  770. package/dist/web/stores/dashboardStateStore.mjs.map +1 -0
  771. package/dist/web/stores/devProxyStore.cjs +76 -0
  772. package/dist/web/stores/devProxyStore.cjs.map +1 -0
  773. package/dist/web/stores/devProxyStore.d.mts +25 -0
  774. package/dist/web/stores/devProxyStore.d.mts.map +1 -0
  775. package/dist/web/stores/devProxyStore.mjs +73 -0
  776. package/dist/web/stores/devProxyStore.mjs.map +1 -0
  777. package/dist/web/stores/dialogDraftStore.cjs +38 -0
  778. package/dist/web/stores/dialogDraftStore.cjs.map +1 -0
  779. package/dist/web/stores/dialogDraftStore.d.mts +13 -0
  780. package/dist/web/stores/dialogDraftStore.d.mts.map +1 -0
  781. package/dist/web/stores/dialogDraftStore.mjs +36 -0
  782. package/dist/web/stores/dialogDraftStore.mjs.map +1 -0
  783. package/dist/web/stores/fileLinkModesStore.cjs +20 -0
  784. package/dist/web/stores/fileLinkModesStore.cjs.map +1 -0
  785. package/dist/web/stores/fileLinkModesStore.d.mts +5 -0
  786. package/dist/web/stores/fileLinkModesStore.d.mts.map +1 -0
  787. package/dist/web/stores/fileLinkModesStore.mjs +20 -0
  788. package/dist/web/stores/fileLinkModesStore.mjs.map +1 -0
  789. package/dist/web/stores/menuStore.cjs +85 -0
  790. package/dist/web/stores/menuStore.cjs.map +1 -0
  791. package/dist/web/stores/menuStore.d.mts +42 -0
  792. package/dist/web/stores/menuStore.d.mts.map +1 -0
  793. package/dist/web/stores/menuStore.mjs +79 -0
  794. package/dist/web/stores/menuStore.mjs.map +1 -0
  795. package/dist/web/stores/newSessionStore.cjs +93 -0
  796. package/dist/web/stores/newSessionStore.cjs.map +1 -0
  797. package/dist/web/stores/newSessionStore.d.mts +30 -0
  798. package/dist/web/stores/newSessionStore.d.mts.map +1 -0
  799. package/dist/web/stores/newSessionStore.mjs +86 -0
  800. package/dist/web/stores/newSessionStore.mjs.map +1 -0
  801. package/dist/web/stores/pagedTranscriptStore.cjs +235 -0
  802. package/dist/web/stores/pagedTranscriptStore.cjs.map +1 -0
  803. package/dist/web/stores/pagedTranscriptStore.d.mts +12 -0
  804. package/dist/web/stores/pagedTranscriptStore.d.mts.map +1 -0
  805. package/dist/web/stores/pagedTranscriptStore.mjs +235 -0
  806. package/dist/web/stores/pagedTranscriptStore.mjs.map +1 -0
  807. package/dist/web/stores/paletteStore.cjs +37 -0
  808. package/dist/web/stores/paletteStore.cjs.map +1 -0
  809. package/dist/web/stores/paletteStore.d.mts +14 -0
  810. package/dist/web/stores/paletteStore.d.mts.map +1 -0
  811. package/dist/web/stores/paletteStore.mjs +34 -0
  812. package/dist/web/stores/paletteStore.mjs.map +1 -0
  813. package/dist/web/stores/railDialogStore.cjs +105 -0
  814. package/dist/web/stores/railDialogStore.cjs.map +1 -0
  815. package/dist/web/stores/railDialogStore.d.mts +32 -0
  816. package/dist/web/stores/railDialogStore.d.mts.map +1 -0
  817. package/dist/web/stores/railDialogStore.mjs +97 -0
  818. package/dist/web/stores/railDialogStore.mjs.map +1 -0
  819. package/dist/web/stores/remoteAccessStore.cjs +216 -0
  820. package/dist/web/stores/remoteAccessStore.cjs.map +1 -0
  821. package/dist/web/stores/remoteAccessStore.d.mts +48 -0
  822. package/dist/web/stores/remoteAccessStore.d.mts.map +1 -0
  823. package/dist/web/stores/remoteAccessStore.mjs +202 -0
  824. package/dist/web/stores/remoteAccessStore.mjs.map +1 -0
  825. package/dist/web/stores/sessionChannelHoldsStore.cjs +43 -0
  826. package/dist/web/stores/sessionChannelHoldsStore.cjs.map +1 -0
  827. package/dist/web/stores/sessionChannelHoldsStore.d.mts +9 -0
  828. package/dist/web/stores/sessionChannelHoldsStore.d.mts.map +1 -0
  829. package/dist/web/stores/sessionChannelHoldsStore.mjs +42 -0
  830. package/dist/web/stores/sessionChannelHoldsStore.mjs.map +1 -0
  831. package/dist/web/stores/sessionStore.cjs +610 -0
  832. package/dist/web/stores/sessionStore.cjs.map +1 -0
  833. package/dist/web/stores/sessionStore.d.mts +116 -0
  834. package/dist/web/stores/sessionStore.d.mts.map +1 -0
  835. package/dist/web/stores/sessionStore.mjs +568 -0
  836. package/dist/web/stores/sessionStore.mjs.map +1 -0
  837. package/dist/web/stores/sessionsStore.cjs +272 -0
  838. package/dist/web/stores/sessionsStore.cjs.map +1 -0
  839. package/dist/web/stores/sessionsStore.d.mts +74 -0
  840. package/dist/web/stores/sessionsStore.d.mts.map +1 -0
  841. package/dist/web/stores/sessionsStore.mjs +257 -0
  842. package/dist/web/stores/sessionsStore.mjs.map +1 -0
  843. package/dist/web/stores/settingsDraftStore.cjs +138 -0
  844. package/dist/web/stores/settingsDraftStore.cjs.map +1 -0
  845. package/dist/web/stores/settingsDraftStore.d.mts +27 -0
  846. package/dist/web/stores/settingsDraftStore.d.mts.map +1 -0
  847. package/dist/web/stores/settingsDraftStore.mjs +132 -0
  848. package/dist/web/stores/settingsDraftStore.mjs.map +1 -0
  849. package/dist/web/stores/templateStore.cjs +136 -0
  850. package/dist/web/stores/templateStore.cjs.map +1 -0
  851. package/dist/web/stores/templateStore.d.mts +20 -0
  852. package/dist/web/stores/templateStore.d.mts.map +1 -0
  853. package/dist/web/stores/templateStore.mjs +131 -0
  854. package/dist/web/stores/templateStore.mjs.map +1 -0
  855. package/dist/web/stores/themeStore.cjs +42 -0
  856. package/dist/web/stores/themeStore.cjs.map +1 -0
  857. package/dist/web/stores/themeStore.d.mts +20 -0
  858. package/dist/web/stores/themeStore.d.mts.map +1 -0
  859. package/dist/web/stores/themeStore.mjs +39 -0
  860. package/dist/web/stores/themeStore.mjs.map +1 -0
  861. package/dist/web/stores/threadStore.cjs +122 -0
  862. package/dist/web/stores/threadStore.cjs.map +1 -0
  863. package/dist/web/stores/threadStore.d.mts +24 -0
  864. package/dist/web/stores/threadStore.d.mts.map +1 -0
  865. package/dist/web/stores/threadStore.mjs +114 -0
  866. package/dist/web/stores/threadStore.mjs.map +1 -0
  867. package/dist/web/stores/toolPromptStore.cjs +15 -0
  868. package/dist/web/stores/toolPromptStore.cjs.map +1 -0
  869. package/dist/web/stores/toolPromptStore.d.mts +23 -0
  870. package/dist/web/stores/toolPromptStore.d.mts.map +1 -0
  871. package/dist/web/stores/toolPromptStore.mjs +14 -0
  872. package/dist/web/stores/toolPromptStore.mjs.map +1 -0
  873. package/dist/web/stores/transientTabsStore.cjs +66 -0
  874. package/dist/web/stores/transientTabsStore.cjs.map +1 -0
  875. package/dist/web/stores/transientTabsStore.d.mts +21 -0
  876. package/dist/web/stores/transientTabsStore.d.mts.map +1 -0
  877. package/dist/web/stores/transientTabsStore.mjs +59 -0
  878. package/dist/web/stores/transientTabsStore.mjs.map +1 -0
  879. package/dist/web/stores/uiStore.cjs +47 -0
  880. package/dist/web/stores/uiStore.cjs.map +1 -0
  881. package/dist/web/stores/uiStore.d.mts +18 -0
  882. package/dist/web/stores/uiStore.d.mts.map +1 -0
  883. package/dist/web/stores/uiStore.mjs +45 -0
  884. package/dist/web/stores/uiStore.mjs.map +1 -0
  885. package/dist/web/stores/useOpenTab.cjs +31 -0
  886. package/dist/web/stores/useOpenTab.cjs.map +1 -0
  887. package/dist/web/stores/useOpenTab.d.mts +9 -0
  888. package/dist/web/stores/useOpenTab.d.mts.map +1 -0
  889. package/dist/web/stores/useOpenTab.mjs +31 -0
  890. package/dist/web/stores/useOpenTab.mjs.map +1 -0
  891. package/dist/web/stores/usePluginSlotProps.cjs +115 -0
  892. package/dist/web/stores/usePluginSlotProps.cjs.map +1 -0
  893. package/dist/web/stores/usePluginSlotProps.d.mts +6 -0
  894. package/dist/web/stores/usePluginSlotProps.d.mts.map +1 -0
  895. package/dist/web/stores/usePluginSlotProps.mjs +115 -0
  896. package/dist/web/stores/usePluginSlotProps.mjs.map +1 -0
  897. package/dist/web/stores/useToolPrompt.cjs +42 -0
  898. package/dist/web/stores/useToolPrompt.cjs.map +1 -0
  899. package/dist/web/stores/useToolPrompt.d.mts +14 -0
  900. package/dist/web/stores/useToolPrompt.d.mts.map +1 -0
  901. package/dist/web/stores/useToolPrompt.mjs +42 -0
  902. package/dist/web/stores/useToolPrompt.mjs.map +1 -0
  903. package/dist/web/stores/useWebPluginRegistry.cjs +11 -0
  904. package/dist/web/stores/useWebPluginRegistry.cjs.map +1 -0
  905. package/dist/web/stores/useWebPluginRegistry.d.mts +5 -0
  906. package/dist/web/stores/useWebPluginRegistry.d.mts.map +1 -0
  907. package/dist/web/stores/useWebPluginRegistry.mjs +11 -0
  908. package/dist/web/stores/useWebPluginRegistry.mjs.map +1 -0
  909. package/dist/web/stores/workspaceAdmissionStore.cjs +67 -0
  910. package/dist/web/stores/workspaceAdmissionStore.cjs.map +1 -0
  911. package/dist/web/stores/workspaceAdmissionStore.d.mts +24 -0
  912. package/dist/web/stores/workspaceAdmissionStore.d.mts.map +1 -0
  913. package/dist/web/stores/workspaceAdmissionStore.mjs +64 -0
  914. package/dist/web/stores/workspaceAdmissionStore.mjs.map +1 -0
  915. package/dist/web/stores/workspacesStore.cjs +83 -0
  916. package/dist/web/stores/workspacesStore.cjs.map +1 -0
  917. package/dist/web/stores/workspacesStore.d.mts +17 -0
  918. package/dist/web/stores/workspacesStore.d.mts.map +1 -0
  919. package/dist/web/stores/workspacesStore.mjs +78 -0
  920. package/dist/web/stores/workspacesStore.mjs.map +1 -0
  921. package/llms.txt +3 -0
  922. package/package.json +107 -0
  923. package/styles/dashboard.css +2 -0
  924. package/styles/preview.css +3 -0
@@ -0,0 +1,237 @@
1
+ const require_sealedSession = require("./sealedSession.cjs");
2
+ const require_stepUp = require("./stepUp.cjs");
3
+ const require_settings = require("../../types/settings.cjs");
4
+ //#region src/web/lib/settingsApi.ts
5
+ /**
6
+ * The page's half of the settings routes. The only place the cockpit talks
7
+ * HTTP for configuration, so if the transport changes, it changes here alone.
8
+ *
9
+ * Writes go through the step-up gate for the same reason a provider credential
10
+ * does: changing a planning model redirects where this machine's model traffic
11
+ * goes, and a remote caller should prove itself first.
12
+ */
13
+ const UNREACHABLE = "The hub is unreachable.";
14
+ const JSON_HEADERS = { "content-type": "application/json" };
15
+ function workspaceRoute(route, workspaceId) {
16
+ return workspaceId === void 0 ? route : route.replace("/api/", `/api/workspaces/${encodeURIComponent(workspaceId)}/`);
17
+ }
18
+ function isRecord(value) {
19
+ return typeof value === "object" && value !== null && !Array.isArray(value);
20
+ }
21
+ function errorOf(body, fallback) {
22
+ return isRecord(body) && typeof body.error === "string" && body.error !== "" ? body.error : fallback;
23
+ }
24
+ async function readBody(response) {
25
+ const text = await response.text();
26
+ if (text === "") return void 0;
27
+ try {
28
+ return JSON.parse(text);
29
+ } catch {
30
+ return;
31
+ }
32
+ }
33
+ async function readSettingsConfig(repoRoot, keys, workspaceId) {
34
+ if (repoRoot !== "" && !workspaceId) return {
35
+ ok: false,
36
+ error: "Choose an admitted workspace."
37
+ };
38
+ const search = new URLSearchParams({ repoRoot });
39
+ for (const key of keys) search.append("key", key);
40
+ let response;
41
+ try {
42
+ response = await require_sealedSession.sealedHttpSession.fetch(`${workspaceRoute(require_settings.SETTINGS_CONFIG_API_ROUTE, workspaceId)}?${search.toString()}`);
43
+ } catch {
44
+ return {
45
+ ok: false,
46
+ error: UNREACHABLE
47
+ };
48
+ }
49
+ const body = await readBody(response);
50
+ if (!response.ok) return {
51
+ ok: false,
52
+ error: errorOf(body, `The hub answered ${String(response.status)}.`)
53
+ };
54
+ if (!isRecord(body)) return {
55
+ ok: false,
56
+ error: "The hub answered with no configuration."
57
+ };
58
+ return {
59
+ ok: true,
60
+ config: body
61
+ };
62
+ }
63
+ async function writeSettingsValue(request, workspaceId) {
64
+ if (request.scope === "repository" && !workspaceId) return {
65
+ ok: false,
66
+ stale: false,
67
+ error: "Choose an admitted workspace."
68
+ };
69
+ let response;
70
+ try {
71
+ response = await require_stepUp.fetchWithStepUp(workspaceRoute(require_settings.SETTINGS_VALUE_API_ROUTE, request.scope === "repository" ? workspaceId : void 0), {
72
+ method: "PUT",
73
+ headers: JSON_HEADERS,
74
+ body: JSON.stringify(request)
75
+ });
76
+ } catch {
77
+ return {
78
+ ok: false,
79
+ stale: false,
80
+ error: UNREACHABLE
81
+ };
82
+ }
83
+ const body = await readBody(response);
84
+ if (response.status === 409) {
85
+ const hash = isRecord(body) && typeof body.hash === "string" ? body.hash : void 0;
86
+ return {
87
+ ok: false,
88
+ stale: true,
89
+ error: errorOf(body, "The config changed since it was read."),
90
+ ...hash === void 0 ? {} : { hash }
91
+ };
92
+ }
93
+ if (!response.ok) return {
94
+ ok: false,
95
+ stale: false,
96
+ error: errorOf(body, `The hub answered ${String(response.status)}.`)
97
+ };
98
+ if (!isRecord(body)) return {
99
+ ok: false,
100
+ stale: false,
101
+ error: "The hub answered with no configuration."
102
+ };
103
+ return {
104
+ ok: true,
105
+ config: body
106
+ };
107
+ }
108
+ /** The repositories the picker offers; an empty list is a machine with no sessions. */
109
+ async function listSettingsRepositories() {
110
+ try {
111
+ const response = await require_sealedSession.sealedHttpSession.fetch(require_settings.SETTINGS_REPOSITORIES_API_ROUTE);
112
+ const body = await readBody(response);
113
+ if (!response.ok || !isRecord(body) || !Array.isArray(body.repositories)) return [];
114
+ return body.repositories;
115
+ } catch {
116
+ return [];
117
+ }
118
+ }
119
+ async function readRepositorySettings(repositoryId) {
120
+ try {
121
+ const response = await require_sealedSession.sealedHttpSession.fetch(workspaceRoute(require_settings.SETTINGS_REPOSITORY_API_ROUTE, repositoryId));
122
+ const body = await readBody(response);
123
+ if (!response.ok) return {
124
+ ok: false,
125
+ error: errorOf(body, `The hub answered ${String(response.status)}.`)
126
+ };
127
+ if (!isRecord(body)) return {
128
+ ok: false,
129
+ error: "The hub answered with no repository settings."
130
+ };
131
+ return {
132
+ ok: true,
133
+ settings: body
134
+ };
135
+ } catch {
136
+ return {
137
+ ok: false,
138
+ error: UNREACHABLE
139
+ };
140
+ }
141
+ }
142
+ async function writeRepositorySelection(request) {
143
+ try {
144
+ const response = await require_stepUp.fetchWithStepUp(workspaceRoute(require_settings.SETTINGS_REPOSITORY_SELECTION_API_ROUTE, request.repositoryId), {
145
+ method: "PUT",
146
+ headers: JSON_HEADERS,
147
+ body: JSON.stringify(request)
148
+ });
149
+ const body = await readBody(response);
150
+ if (!response.ok) return {
151
+ ok: false,
152
+ error: errorOf(body, `The hub answered ${String(response.status)}.`)
153
+ };
154
+ if (!isRecord(body)) return {
155
+ ok: false,
156
+ error: "The hub answered with no repository settings."
157
+ };
158
+ return {
159
+ ok: true,
160
+ settings: body
161
+ };
162
+ } catch {
163
+ return {
164
+ ok: false,
165
+ error: UNREACHABLE
166
+ };
167
+ }
168
+ }
169
+ /**
170
+ * The models a picker offers. An empty list is not an error: a machine with no
171
+ * authenticated provider has none, and those fields fall back to free text.
172
+ */
173
+ async function listSettingsModels() {
174
+ try {
175
+ const response = await require_sealedSession.sealedHttpSession.fetch(require_settings.SETTINGS_MODELS_API_ROUTE);
176
+ const body = await readBody(response);
177
+ if (!response.ok || !isRecord(body) || !Array.isArray(body.models)) return [];
178
+ return body.models;
179
+ } catch {
180
+ return [];
181
+ }
182
+ }
183
+ function imageSettingsOf(response, body) {
184
+ if (!response.ok) return {
185
+ ok: false,
186
+ error: errorOf(body, `The hub answered ${String(response.status)}.`)
187
+ };
188
+ if (!isRecord(body)) return {
189
+ ok: false,
190
+ error: "The hub answered with no image settings."
191
+ };
192
+ return {
193
+ ok: true,
194
+ images: body
195
+ };
196
+ }
197
+ async function readImageSettings() {
198
+ try {
199
+ const response = await require_sealedSession.sealedHttpSession.fetch(require_settings.SETTINGS_IMAGES_API_ROUTE);
200
+ return imageSettingsOf(response, await readBody(response));
201
+ } catch {
202
+ return {
203
+ ok: false,
204
+ error: UNREACHABLE
205
+ };
206
+ }
207
+ }
208
+ /**
209
+ * Writes through the step-up gate, as every other settings write does: this
210
+ * one decides how much of a screenshot a remote caller can push into a model.
211
+ */
212
+ async function writeImageSettings(request) {
213
+ try {
214
+ const response = await require_stepUp.fetchWithStepUp(require_settings.SETTINGS_IMAGES_API_ROUTE, {
215
+ method: "PUT",
216
+ headers: JSON_HEADERS,
217
+ body: JSON.stringify(request)
218
+ });
219
+ return imageSettingsOf(response, await readBody(response));
220
+ } catch {
221
+ return {
222
+ ok: false,
223
+ error: UNREACHABLE
224
+ };
225
+ }
226
+ }
227
+ //#endregion
228
+ exports.listSettingsModels = listSettingsModels;
229
+ exports.listSettingsRepositories = listSettingsRepositories;
230
+ exports.readImageSettings = readImageSettings;
231
+ exports.readRepositorySettings = readRepositorySettings;
232
+ exports.readSettingsConfig = readSettingsConfig;
233
+ exports.writeImageSettings = writeImageSettings;
234
+ exports.writeRepositorySelection = writeRepositorySelection;
235
+ exports.writeSettingsValue = writeSettingsValue;
236
+
237
+ //# sourceMappingURL=settingsApi.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsApi.cjs","names":["sealedHttpSession","SETTINGS_CONFIG_API_ROUTE","fetchWithStepUp","SETTINGS_VALUE_API_ROUTE","SETTINGS_REPOSITORIES_API_ROUTE","SETTINGS_REPOSITORY_API_ROUTE","SETTINGS_REPOSITORY_SELECTION_API_ROUTE","SETTINGS_MODELS_API_ROUTE","SETTINGS_IMAGES_API_ROUTE"],"sources":["../../../src/web/lib/settingsApi.ts"],"sourcesContent":["import {\n SETTINGS_CONFIG_API_ROUTE,\n SETTINGS_IMAGES_API_ROUTE,\n SETTINGS_MODELS_API_ROUTE,\n SETTINGS_REPOSITORIES_API_ROUTE,\n SETTINGS_REPOSITORY_API_ROUTE,\n SETTINGS_REPOSITORY_SELECTION_API_ROUTE,\n SETTINGS_VALUE_API_ROUTE,\n type RepositorySelectionWriteRequest,\n type RepositorySettingsView,\n type SettingsConfigView,\n type SettingsImagesView,\n type SettingsImagesWriteRequest,\n type SettingsModel,\n type SettingsRepository,\n type SettingsWriteRequest,\n type SettingsBatchWriteRequest,\n} from '../../types/settings';\nimport { sealedHttpSession } from './sealedSession';\nimport { fetchWithStepUp } from './stepUp';\n\n/**\n * The page's half of the settings routes. The only place the cockpit talks\n * HTTP for configuration, so if the transport changes, it changes here alone.\n *\n * Writes go through the step-up gate for the same reason a provider credential\n * does: changing a planning model redirects where this machine's model traffic\n * goes, and a remote caller should prove itself first.\n */\n\nconst UNREACHABLE = 'The hub is unreachable.';\nconst JSON_HEADERS = { 'content-type': 'application/json' };\n\nfunction workspaceRoute(route: string, workspaceId: string | undefined): string {\n return workspaceId === undefined\n ? route\n : route.replace('/api/', `/api/workspaces/${encodeURIComponent(workspaceId)}/`);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction errorOf(body: unknown, fallback: string): string {\n return isRecord(body) && typeof body.error === 'string' && body.error !== '' ? body.error : fallback;\n}\n\nasync function readBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (text === '') return undefined;\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return undefined;\n }\n}\n\nexport type ReadConfigResult = { ok: true; config: SettingsConfigView } | { ok: false; error: string };\n\nexport async function readSettingsConfig(\n repoRoot: string,\n keys: readonly string[],\n workspaceId?: string,\n): Promise<ReadConfigResult> {\n if (repoRoot !== '' && !workspaceId) return { ok: false, error: 'Choose an admitted workspace.' };\n const search = new URLSearchParams({ repoRoot });\n for (const key of keys) search.append('key', key);\n let response: Response;\n try {\n response = await sealedHttpSession.fetch(\n `${workspaceRoute(SETTINGS_CONFIG_API_ROUTE, workspaceId)}?${search.toString()}`,\n );\n } catch {\n return { ok: false, error: UNREACHABLE };\n }\n const body = await readBody(response);\n if (!response.ok) return { ok: false, error: errorOf(body, `The hub answered ${String(response.status)}.`) };\n if (!isRecord(body)) return { ok: false, error: 'The hub answered with no configuration.' };\n return { ok: true, config: body as unknown as SettingsConfigView };\n}\n\nexport type WriteConfigResult =\n | { ok: true; config: SettingsConfigView }\n /** The file moved under the page; `hash` is what it holds now. */\n | { ok: false; stale: true; error: string; hash?: string }\n | { ok: false; stale: false; error: string };\n\nexport async function writeSettingsValue(\n request: SettingsWriteRequest | SettingsBatchWriteRequest,\n workspaceId?: string,\n): Promise<WriteConfigResult> {\n if (request.scope === 'repository' && !workspaceId)\n return { ok: false, stale: false, error: 'Choose an admitted workspace.' };\n let response: Response;\n try {\n response = await fetchWithStepUp(\n workspaceRoute(SETTINGS_VALUE_API_ROUTE, request.scope === 'repository' ? workspaceId : undefined),\n {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify(request),\n },\n );\n } catch {\n return { ok: false, stale: false, error: UNREACHABLE };\n }\n const body = await readBody(response);\n if (response.status === 409) {\n const hash = isRecord(body) && typeof body.hash === 'string' ? body.hash : undefined;\n return {\n ok: false,\n stale: true,\n error: errorOf(body, 'The config changed since it was read.'),\n ...(hash === undefined ? {} : { hash }),\n };\n }\n if (!response.ok) {\n return { ok: false, stale: false, error: errorOf(body, `The hub answered ${String(response.status)}.`) };\n }\n if (!isRecord(body)) return { ok: false, stale: false, error: 'The hub answered with no configuration.' };\n return { ok: true, config: body as unknown as SettingsConfigView };\n}\n\n/** The repositories the picker offers; an empty list is a machine with no sessions. */\nexport async function listSettingsRepositories(): Promise<readonly SettingsRepository[]> {\n try {\n const response = await sealedHttpSession.fetch(SETTINGS_REPOSITORIES_API_ROUTE);\n const body = await readBody(response);\n if (!response.ok || !isRecord(body) || !Array.isArray(body.repositories)) return [];\n return body.repositories as SettingsRepository[];\n } catch {\n return [];\n }\n}\n\nexport type ReadRepositorySettingsResult =\n | { ok: true; settings: RepositorySettingsView }\n | { ok: false; error: string };\n\nexport async function readRepositorySettings(repositoryId: string): Promise<ReadRepositorySettingsResult> {\n try {\n const response = await sealedHttpSession.fetch(workspaceRoute(SETTINGS_REPOSITORY_API_ROUTE, repositoryId));\n const body = await readBody(response);\n if (!response.ok) return { ok: false, error: errorOf(body, `The hub answered ${String(response.status)}.`) };\n if (!isRecord(body)) return { ok: false, error: 'The hub answered with no repository settings.' };\n return { ok: true, settings: body as unknown as RepositorySettingsView };\n } catch {\n return { ok: false, error: UNREACHABLE };\n }\n}\n\nexport async function writeRepositorySelection(\n request: RepositorySelectionWriteRequest,\n): Promise<ReadRepositorySettingsResult> {\n try {\n const response = await fetchWithStepUp(\n workspaceRoute(SETTINGS_REPOSITORY_SELECTION_API_ROUTE, request.repositoryId),\n {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify(request),\n },\n );\n const body = await readBody(response);\n if (!response.ok) return { ok: false, error: errorOf(body, `The hub answered ${String(response.status)}.`) };\n if (!isRecord(body)) return { ok: false, error: 'The hub answered with no repository settings.' };\n return { ok: true, settings: body as unknown as RepositorySettingsView };\n } catch {\n return { ok: false, error: UNREACHABLE };\n }\n}\n/**\n * The models a picker offers. An empty list is not an error: a machine with no\n * authenticated provider has none, and those fields fall back to free text.\n */\nexport async function listSettingsModels(): Promise<readonly SettingsModel[]> {\n try {\n const response = await sealedHttpSession.fetch(SETTINGS_MODELS_API_ROUTE);\n const body = await readBody(response);\n if (!response.ok || !isRecord(body) || !Array.isArray(body.models)) return [];\n return body.models as SettingsModel[];\n } catch {\n return [];\n }\n}\n\nexport type ImageSettingsResult = { ok: true; images: SettingsImagesView } | { ok: false; error: string };\n\nfunction imageSettingsOf(response: Response, body: unknown): ImageSettingsResult {\n if (!response.ok) return { ok: false, error: errorOf(body, `The hub answered ${String(response.status)}.`) };\n if (!isRecord(body)) return { ok: false, error: 'The hub answered with no image settings.' };\n return { ok: true, images: body as unknown as SettingsImagesView };\n}\n\nexport async function readImageSettings(): Promise<ImageSettingsResult> {\n try {\n const response = await sealedHttpSession.fetch(SETTINGS_IMAGES_API_ROUTE);\n return imageSettingsOf(response, await readBody(response));\n } catch {\n return { ok: false, error: UNREACHABLE };\n }\n}\n\n/**\n * Writes through the step-up gate, as every other settings write does: this\n * one decides how much of a screenshot a remote caller can push into a model.\n */\nexport async function writeImageSettings(request: SettingsImagesWriteRequest): Promise<ImageSettingsResult> {\n try {\n const response = await fetchWithStepUp(SETTINGS_IMAGES_API_ROUTE, {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify(request),\n });\n return imageSettingsOf(response, await readBody(response));\n } catch {\n return { ok: false, error: UNREACHABLE };\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { RepositorySelectionWriteRequest, RepositorySettingsView, SettingsBatchWriteRequest, SettingsConfigView, SettingsImagesView, SettingsImagesWriteRequest, SettingsModel, SettingsRepository, SettingsWriteRequest } from "../../types/settings.mjs";
2
+ //#region src/web/lib/settingsApi.d.ts
3
+ export type ReadConfigResult = {
4
+ ok: true;
5
+ config: SettingsConfigView;
6
+ } | {
7
+ ok: false;
8
+ error: string;
9
+ };
10
+ export declare function readSettingsConfig(repoRoot: string, keys: readonly string[], workspaceId?: string): Promise<ReadConfigResult>;
11
+ export type WriteConfigResult = {
12
+ ok: true;
13
+ config: SettingsConfigView;
14
+ } |
15
+ /** The file moved under the page; `hash` is what it holds now. */
16
+ {
17
+ ok: false;
18
+ stale: true;
19
+ error: string;
20
+ hash?: string;
21
+ } | {
22
+ ok: false;
23
+ stale: false;
24
+ error: string;
25
+ };
26
+ export declare function writeSettingsValue(request: SettingsWriteRequest | SettingsBatchWriteRequest, workspaceId?: string): Promise<WriteConfigResult>;
27
+ /** The repositories the picker offers; an empty list is a machine with no sessions. */
28
+ export declare function listSettingsRepositories(): Promise<readonly SettingsRepository[]>;
29
+ export type ReadRepositorySettingsResult = {
30
+ ok: true;
31
+ settings: RepositorySettingsView;
32
+ } | {
33
+ ok: false;
34
+ error: string;
35
+ };
36
+ export declare function readRepositorySettings(repositoryId: string): Promise<ReadRepositorySettingsResult>;
37
+ export declare function writeRepositorySelection(request: RepositorySelectionWriteRequest): Promise<ReadRepositorySettingsResult>;
38
+ /**
39
+ * The models a picker offers. An empty list is not an error: a machine with no
40
+ * authenticated provider has none, and those fields fall back to free text.
41
+ */
42
+ export declare function listSettingsModels(): Promise<readonly SettingsModel[]>;
43
+ export type ImageSettingsResult = {
44
+ ok: true;
45
+ images: SettingsImagesView;
46
+ } | {
47
+ ok: false;
48
+ error: string;
49
+ };
50
+ export declare function readImageSettings(): Promise<ImageSettingsResult>;
51
+ /**
52
+ * Writes through the step-up gate, as every other settings write does: this
53
+ * one decides how much of a screenshot a remote caller can push into a model.
54
+ */
55
+ export declare function writeImageSettings(request: SettingsImagesWriteRequest): Promise<ImageSettingsResult>;
56
+ //#endregion
57
+ //# sourceMappingURL=settingsApi.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsApi.d.mts","names":[],"sources":["../../../src/web/lib/settingsApi.ts"],"mappings":";;YAyDY;EAAqB;EAAU,QAAQ;;EAAyB;EAAW;;wBAEjE,mBACpB,kBACA,yBACA,uBACC,QAAQ;YAkBC;EACN;EAAU,QAAQ;;;;EAElB;EAAW;EAAa;EAAe;;EACvC;EAAW;EAAc;;wBAET,mBACpB,SAAS,uBAAuB,2BAChC,uBACC,QAAQ;;wBAkCW,4BAA4B,iBAAiB;YAWvD;EACN;EAAU,UAAU;;EACpB;EAAW;;wBAEK,uBAAuB,uBAAuB,QAAQ;wBAYtD,yBACpB,SAAS,kCACR,QAAQ;;;;;wBAsBW,sBAAsB,iBAAiB;YAWjD;EAAwB;EAAU,QAAQ;;EAAyB;EAAW;;wBAQpE,qBAAqB,QAAQ;;;;;wBAa7B,mBAAmB,SAAS,6BAA6B,QAAQ"}
@@ -0,0 +1,230 @@
1
+ import { sealedHttpSession } from "./sealedSession.mjs";
2
+ import { fetchWithStepUp } from "./stepUp.mjs";
3
+ import { SETTINGS_CONFIG_API_ROUTE, SETTINGS_IMAGES_API_ROUTE, SETTINGS_MODELS_API_ROUTE, SETTINGS_REPOSITORIES_API_ROUTE, SETTINGS_REPOSITORY_API_ROUTE, SETTINGS_REPOSITORY_SELECTION_API_ROUTE, SETTINGS_VALUE_API_ROUTE } from "../../types/settings.mjs";
4
+ //#region src/web/lib/settingsApi.ts
5
+ /**
6
+ * The page's half of the settings routes. The only place the cockpit talks
7
+ * HTTP for configuration, so if the transport changes, it changes here alone.
8
+ *
9
+ * Writes go through the step-up gate for the same reason a provider credential
10
+ * does: changing a planning model redirects where this machine's model traffic
11
+ * goes, and a remote caller should prove itself first.
12
+ */
13
+ const UNREACHABLE = "The hub is unreachable.";
14
+ const JSON_HEADERS = { "content-type": "application/json" };
15
+ function workspaceRoute(route, workspaceId) {
16
+ return workspaceId === void 0 ? route : route.replace("/api/", `/api/workspaces/${encodeURIComponent(workspaceId)}/`);
17
+ }
18
+ function isRecord(value) {
19
+ return typeof value === "object" && value !== null && !Array.isArray(value);
20
+ }
21
+ function errorOf(body, fallback) {
22
+ return isRecord(body) && typeof body.error === "string" && body.error !== "" ? body.error : fallback;
23
+ }
24
+ async function readBody(response) {
25
+ const text = await response.text();
26
+ if (text === "") return void 0;
27
+ try {
28
+ return JSON.parse(text);
29
+ } catch {
30
+ return;
31
+ }
32
+ }
33
+ async function readSettingsConfig(repoRoot, keys, workspaceId) {
34
+ if (repoRoot !== "" && !workspaceId) return {
35
+ ok: false,
36
+ error: "Choose an admitted workspace."
37
+ };
38
+ const search = new URLSearchParams({ repoRoot });
39
+ for (const key of keys) search.append("key", key);
40
+ let response;
41
+ try {
42
+ response = await sealedHttpSession.fetch(`${workspaceRoute(SETTINGS_CONFIG_API_ROUTE, workspaceId)}?${search.toString()}`);
43
+ } catch {
44
+ return {
45
+ ok: false,
46
+ error: UNREACHABLE
47
+ };
48
+ }
49
+ const body = await readBody(response);
50
+ if (!response.ok) return {
51
+ ok: false,
52
+ error: errorOf(body, `The hub answered ${String(response.status)}.`)
53
+ };
54
+ if (!isRecord(body)) return {
55
+ ok: false,
56
+ error: "The hub answered with no configuration."
57
+ };
58
+ return {
59
+ ok: true,
60
+ config: body
61
+ };
62
+ }
63
+ async function writeSettingsValue(request, workspaceId) {
64
+ if (request.scope === "repository" && !workspaceId) return {
65
+ ok: false,
66
+ stale: false,
67
+ error: "Choose an admitted workspace."
68
+ };
69
+ let response;
70
+ try {
71
+ response = await fetchWithStepUp(workspaceRoute(SETTINGS_VALUE_API_ROUTE, request.scope === "repository" ? workspaceId : void 0), {
72
+ method: "PUT",
73
+ headers: JSON_HEADERS,
74
+ body: JSON.stringify(request)
75
+ });
76
+ } catch {
77
+ return {
78
+ ok: false,
79
+ stale: false,
80
+ error: UNREACHABLE
81
+ };
82
+ }
83
+ const body = await readBody(response);
84
+ if (response.status === 409) {
85
+ const hash = isRecord(body) && typeof body.hash === "string" ? body.hash : void 0;
86
+ return {
87
+ ok: false,
88
+ stale: true,
89
+ error: errorOf(body, "The config changed since it was read."),
90
+ ...hash === void 0 ? {} : { hash }
91
+ };
92
+ }
93
+ if (!response.ok) return {
94
+ ok: false,
95
+ stale: false,
96
+ error: errorOf(body, `The hub answered ${String(response.status)}.`)
97
+ };
98
+ if (!isRecord(body)) return {
99
+ ok: false,
100
+ stale: false,
101
+ error: "The hub answered with no configuration."
102
+ };
103
+ return {
104
+ ok: true,
105
+ config: body
106
+ };
107
+ }
108
+ /** The repositories the picker offers; an empty list is a machine with no sessions. */
109
+ async function listSettingsRepositories() {
110
+ try {
111
+ const response = await sealedHttpSession.fetch(SETTINGS_REPOSITORIES_API_ROUTE);
112
+ const body = await readBody(response);
113
+ if (!response.ok || !isRecord(body) || !Array.isArray(body.repositories)) return [];
114
+ return body.repositories;
115
+ } catch {
116
+ return [];
117
+ }
118
+ }
119
+ async function readRepositorySettings(repositoryId) {
120
+ try {
121
+ const response = await sealedHttpSession.fetch(workspaceRoute(SETTINGS_REPOSITORY_API_ROUTE, repositoryId));
122
+ const body = await readBody(response);
123
+ if (!response.ok) return {
124
+ ok: false,
125
+ error: errorOf(body, `The hub answered ${String(response.status)}.`)
126
+ };
127
+ if (!isRecord(body)) return {
128
+ ok: false,
129
+ error: "The hub answered with no repository settings."
130
+ };
131
+ return {
132
+ ok: true,
133
+ settings: body
134
+ };
135
+ } catch {
136
+ return {
137
+ ok: false,
138
+ error: UNREACHABLE
139
+ };
140
+ }
141
+ }
142
+ async function writeRepositorySelection(request) {
143
+ try {
144
+ const response = await fetchWithStepUp(workspaceRoute(SETTINGS_REPOSITORY_SELECTION_API_ROUTE, request.repositoryId), {
145
+ method: "PUT",
146
+ headers: JSON_HEADERS,
147
+ body: JSON.stringify(request)
148
+ });
149
+ const body = await readBody(response);
150
+ if (!response.ok) return {
151
+ ok: false,
152
+ error: errorOf(body, `The hub answered ${String(response.status)}.`)
153
+ };
154
+ if (!isRecord(body)) return {
155
+ ok: false,
156
+ error: "The hub answered with no repository settings."
157
+ };
158
+ return {
159
+ ok: true,
160
+ settings: body
161
+ };
162
+ } catch {
163
+ return {
164
+ ok: false,
165
+ error: UNREACHABLE
166
+ };
167
+ }
168
+ }
169
+ /**
170
+ * The models a picker offers. An empty list is not an error: a machine with no
171
+ * authenticated provider has none, and those fields fall back to free text.
172
+ */
173
+ async function listSettingsModels() {
174
+ try {
175
+ const response = await sealedHttpSession.fetch(SETTINGS_MODELS_API_ROUTE);
176
+ const body = await readBody(response);
177
+ if (!response.ok || !isRecord(body) || !Array.isArray(body.models)) return [];
178
+ return body.models;
179
+ } catch {
180
+ return [];
181
+ }
182
+ }
183
+ function imageSettingsOf(response, body) {
184
+ if (!response.ok) return {
185
+ ok: false,
186
+ error: errorOf(body, `The hub answered ${String(response.status)}.`)
187
+ };
188
+ if (!isRecord(body)) return {
189
+ ok: false,
190
+ error: "The hub answered with no image settings."
191
+ };
192
+ return {
193
+ ok: true,
194
+ images: body
195
+ };
196
+ }
197
+ async function readImageSettings() {
198
+ try {
199
+ const response = await sealedHttpSession.fetch(SETTINGS_IMAGES_API_ROUTE);
200
+ return imageSettingsOf(response, await readBody(response));
201
+ } catch {
202
+ return {
203
+ ok: false,
204
+ error: UNREACHABLE
205
+ };
206
+ }
207
+ }
208
+ /**
209
+ * Writes through the step-up gate, as every other settings write does: this
210
+ * one decides how much of a screenshot a remote caller can push into a model.
211
+ */
212
+ async function writeImageSettings(request) {
213
+ try {
214
+ const response = await fetchWithStepUp(SETTINGS_IMAGES_API_ROUTE, {
215
+ method: "PUT",
216
+ headers: JSON_HEADERS,
217
+ body: JSON.stringify(request)
218
+ });
219
+ return imageSettingsOf(response, await readBody(response));
220
+ } catch {
221
+ return {
222
+ ok: false,
223
+ error: UNREACHABLE
224
+ };
225
+ }
226
+ }
227
+ //#endregion
228
+ export { listSettingsModels, listSettingsRepositories, readImageSettings, readRepositorySettings, readSettingsConfig, writeImageSettings, writeRepositorySelection, writeSettingsValue };
229
+
230
+ //# sourceMappingURL=settingsApi.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsApi.mjs","names":[],"sources":["../../../src/web/lib/settingsApi.ts"],"sourcesContent":["import {\n SETTINGS_CONFIG_API_ROUTE,\n SETTINGS_IMAGES_API_ROUTE,\n SETTINGS_MODELS_API_ROUTE,\n SETTINGS_REPOSITORIES_API_ROUTE,\n SETTINGS_REPOSITORY_API_ROUTE,\n SETTINGS_REPOSITORY_SELECTION_API_ROUTE,\n SETTINGS_VALUE_API_ROUTE,\n type RepositorySelectionWriteRequest,\n type RepositorySettingsView,\n type SettingsConfigView,\n type SettingsImagesView,\n type SettingsImagesWriteRequest,\n type SettingsModel,\n type SettingsRepository,\n type SettingsWriteRequest,\n type SettingsBatchWriteRequest,\n} from '../../types/settings';\nimport { sealedHttpSession } from './sealedSession';\nimport { fetchWithStepUp } from './stepUp';\n\n/**\n * The page's half of the settings routes. The only place the cockpit talks\n * HTTP for configuration, so if the transport changes, it changes here alone.\n *\n * Writes go through the step-up gate for the same reason a provider credential\n * does: changing a planning model redirects where this machine's model traffic\n * goes, and a remote caller should prove itself first.\n */\n\nconst UNREACHABLE = 'The hub is unreachable.';\nconst JSON_HEADERS = { 'content-type': 'application/json' };\n\nfunction workspaceRoute(route: string, workspaceId: string | undefined): string {\n return workspaceId === undefined\n ? route\n : route.replace('/api/', `/api/workspaces/${encodeURIComponent(workspaceId)}/`);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction errorOf(body: unknown, fallback: string): string {\n return isRecord(body) && typeof body.error === 'string' && body.error !== '' ? body.error : fallback;\n}\n\nasync function readBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (text === '') return undefined;\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return undefined;\n }\n}\n\nexport type ReadConfigResult = { ok: true; config: SettingsConfigView } | { ok: false; error: string };\n\nexport async function readSettingsConfig(\n repoRoot: string,\n keys: readonly string[],\n workspaceId?: string,\n): Promise<ReadConfigResult> {\n if (repoRoot !== '' && !workspaceId) return { ok: false, error: 'Choose an admitted workspace.' };\n const search = new URLSearchParams({ repoRoot });\n for (const key of keys) search.append('key', key);\n let response: Response;\n try {\n response = await sealedHttpSession.fetch(\n `${workspaceRoute(SETTINGS_CONFIG_API_ROUTE, workspaceId)}?${search.toString()}`,\n );\n } catch {\n return { ok: false, error: UNREACHABLE };\n }\n const body = await readBody(response);\n if (!response.ok) return { ok: false, error: errorOf(body, `The hub answered ${String(response.status)}.`) };\n if (!isRecord(body)) return { ok: false, error: 'The hub answered with no configuration.' };\n return { ok: true, config: body as unknown as SettingsConfigView };\n}\n\nexport type WriteConfigResult =\n | { ok: true; config: SettingsConfigView }\n /** The file moved under the page; `hash` is what it holds now. */\n | { ok: false; stale: true; error: string; hash?: string }\n | { ok: false; stale: false; error: string };\n\nexport async function writeSettingsValue(\n request: SettingsWriteRequest | SettingsBatchWriteRequest,\n workspaceId?: string,\n): Promise<WriteConfigResult> {\n if (request.scope === 'repository' && !workspaceId)\n return { ok: false, stale: false, error: 'Choose an admitted workspace.' };\n let response: Response;\n try {\n response = await fetchWithStepUp(\n workspaceRoute(SETTINGS_VALUE_API_ROUTE, request.scope === 'repository' ? workspaceId : undefined),\n {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify(request),\n },\n );\n } catch {\n return { ok: false, stale: false, error: UNREACHABLE };\n }\n const body = await readBody(response);\n if (response.status === 409) {\n const hash = isRecord(body) && typeof body.hash === 'string' ? body.hash : undefined;\n return {\n ok: false,\n stale: true,\n error: errorOf(body, 'The config changed since it was read.'),\n ...(hash === undefined ? {} : { hash }),\n };\n }\n if (!response.ok) {\n return { ok: false, stale: false, error: errorOf(body, `The hub answered ${String(response.status)}.`) };\n }\n if (!isRecord(body)) return { ok: false, stale: false, error: 'The hub answered with no configuration.' };\n return { ok: true, config: body as unknown as SettingsConfigView };\n}\n\n/** The repositories the picker offers; an empty list is a machine with no sessions. */\nexport async function listSettingsRepositories(): Promise<readonly SettingsRepository[]> {\n try {\n const response = await sealedHttpSession.fetch(SETTINGS_REPOSITORIES_API_ROUTE);\n const body = await readBody(response);\n if (!response.ok || !isRecord(body) || !Array.isArray(body.repositories)) return [];\n return body.repositories as SettingsRepository[];\n } catch {\n return [];\n }\n}\n\nexport type ReadRepositorySettingsResult =\n | { ok: true; settings: RepositorySettingsView }\n | { ok: false; error: string };\n\nexport async function readRepositorySettings(repositoryId: string): Promise<ReadRepositorySettingsResult> {\n try {\n const response = await sealedHttpSession.fetch(workspaceRoute(SETTINGS_REPOSITORY_API_ROUTE, repositoryId));\n const body = await readBody(response);\n if (!response.ok) return { ok: false, error: errorOf(body, `The hub answered ${String(response.status)}.`) };\n if (!isRecord(body)) return { ok: false, error: 'The hub answered with no repository settings.' };\n return { ok: true, settings: body as unknown as RepositorySettingsView };\n } catch {\n return { ok: false, error: UNREACHABLE };\n }\n}\n\nexport async function writeRepositorySelection(\n request: RepositorySelectionWriteRequest,\n): Promise<ReadRepositorySettingsResult> {\n try {\n const response = await fetchWithStepUp(\n workspaceRoute(SETTINGS_REPOSITORY_SELECTION_API_ROUTE, request.repositoryId),\n {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify(request),\n },\n );\n const body = await readBody(response);\n if (!response.ok) return { ok: false, error: errorOf(body, `The hub answered ${String(response.status)}.`) };\n if (!isRecord(body)) return { ok: false, error: 'The hub answered with no repository settings.' };\n return { ok: true, settings: body as unknown as RepositorySettingsView };\n } catch {\n return { ok: false, error: UNREACHABLE };\n }\n}\n/**\n * The models a picker offers. An empty list is not an error: a machine with no\n * authenticated provider has none, and those fields fall back to free text.\n */\nexport async function listSettingsModels(): Promise<readonly SettingsModel[]> {\n try {\n const response = await sealedHttpSession.fetch(SETTINGS_MODELS_API_ROUTE);\n const body = await readBody(response);\n if (!response.ok || !isRecord(body) || !Array.isArray(body.models)) return [];\n return body.models as SettingsModel[];\n } catch {\n return [];\n }\n}\n\nexport type ImageSettingsResult = { ok: true; images: SettingsImagesView } | { ok: false; error: string };\n\nfunction imageSettingsOf(response: Response, body: unknown): ImageSettingsResult {\n if (!response.ok) return { ok: false, error: errorOf(body, `The hub answered ${String(response.status)}.`) };\n if (!isRecord(body)) return { ok: false, error: 'The hub answered with no image settings.' };\n return { ok: true, images: body as unknown as SettingsImagesView };\n}\n\nexport async function readImageSettings(): Promise<ImageSettingsResult> {\n try {\n const response = await sealedHttpSession.fetch(SETTINGS_IMAGES_API_ROUTE);\n return imageSettingsOf(response, await readBody(response));\n } catch {\n return { ok: false, error: UNREACHABLE };\n }\n}\n\n/**\n * Writes through the step-up gate, as every other settings write does: this\n * one decides how much of a screenshot a remote caller can push into a model.\n */\nexport async function writeImageSettings(request: SettingsImagesWriteRequest): Promise<ImageSettingsResult> {\n try {\n const response = await fetchWithStepUp(SETTINGS_IMAGES_API_ROUTE, {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify(request),\n });\n return imageSettingsOf(response, await readBody(response));\n } catch {\n return { ok: false, error: UNREACHABLE };\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ //#region src/web/lib/settingsDraft.ts
2
+ /**
3
+ * What a settings page does with pending edits, kept out of the component so it
4
+ * can be checked without a browser.
5
+ *
6
+ * The rules that matter are all here: a field is only editable at a scope the
7
+ * key is actually read from, a cleared field removes the key rather than
8
+ * writing an empty value the parser rejects, and numeric drafts retain their
9
+ * type when the page combines these edits into one atomic save.
10
+ */
11
+ const KEY_SEPARATOR = ".";
12
+ function settingsKeyOf(field) {
13
+ return field.keyPath.join(KEY_SEPARATOR);
14
+ }
15
+ /** Why a field cannot be edited at the selected scope, or nothing. */
16
+ function settingsLockedReason(view, scope) {
17
+ if (view === void 0 || view.scope === "both" || view.scope === scope) return void 0;
18
+ return view.scope === "global" ? "global only" : "repository only";
19
+ }
20
+ /**
21
+ * The typed edits a save combines into one request with the file's read hash.
22
+ * Keeping contribution order makes the result predictable for callers.
23
+ */
24
+ function plannedSettingsWrites(input) {
25
+ return input.fields.filter((field) => settingsKeyOf(field) in input.drafts).map((field) => {
26
+ const draft = input.drafts[settingsKeyOf(field)] ?? null;
27
+ const numeric = field.kind === "number" && draft !== null && draft.trim() !== "" ? Number(draft) : void 0;
28
+ return {
29
+ repoRoot: input.repoRoot,
30
+ scope: input.scope,
31
+ keyPath: field.keyPath,
32
+ value: numeric !== void 0 && Number.isFinite(numeric) ? numeric : draft,
33
+ expectedHash: input.startingHash
34
+ };
35
+ });
36
+ }
37
+ /** Whether a save can be attempted at all: something changed, and it can land somewhere. */
38
+ function canSaveSettings(input) {
39
+ if (input.dirty === 0) return false;
40
+ return input.scope === "global" || input.repoRoot !== "";
41
+ }
42
+ //#endregion
43
+ exports.canSaveSettings = canSaveSettings;
44
+ exports.plannedSettingsWrites = plannedSettingsWrites;
45
+ exports.settingsKeyOf = settingsKeyOf;
46
+ exports.settingsLockedReason = settingsLockedReason;
47
+
48
+ //# sourceMappingURL=settingsDraft.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsDraft.cjs","names":[],"sources":["../../../src/web/lib/settingsDraft.ts"],"sourcesContent":["import type { SettingsFieldContribution } from '@agimon-ai/po-core/web';\n\nimport type { SettingsScope, SettingsValueView, SettingsWriteRequest } from '../../types/settings';\n\n/**\n * What a settings page does with pending edits, kept out of the component so it\n * can be checked without a browser.\n *\n * The rules that matter are all here: a field is only editable at a scope the\n * key is actually read from, a cleared field removes the key rather than\n * writing an empty value the parser rejects, and numeric drafts retain their\n * type when the page combines these edits into one atomic save.\n */\n\nconst KEY_SEPARATOR = '.';\n\nexport function settingsKeyOf(field: SettingsFieldContribution): string {\n return field.keyPath.join(KEY_SEPARATOR);\n}\n\n/** Why a field cannot be edited at the selected scope, or nothing. */\nexport function settingsLockedReason(view: SettingsValueView | undefined, scope: SettingsScope): string | undefined {\n if (view === undefined || view.scope === 'both' || view.scope === scope) return undefined;\n return view.scope === 'global' ? 'global only' : 'repository only';\n}\n\nexport interface PlannedWritesInput {\n fields: readonly SettingsFieldContribution[];\n /** Pending edits by dotted key; null clears the key. */\n drafts: Readonly<Record<string, string | null>>;\n scope: SettingsScope;\n repoRoot: string;\n /** The target file's hash when the page last read it. */\n startingHash: string;\n}\n\n/**\n * The typed edits a save combines into one request with the file's read hash.\n * Keeping contribution order makes the result predictable for callers.\n */\nexport function plannedSettingsWrites(input: PlannedWritesInput): SettingsWriteRequest[] {\n return input.fields\n .filter((field) => settingsKeyOf(field) in input.drafts)\n .map((field) => {\n const draft = input.drafts[settingsKeyOf(field)] ?? null;\n const numeric = field.kind === 'number' && draft !== null && draft.trim() !== '' ? Number(draft) : undefined;\n return {\n repoRoot: input.repoRoot,\n scope: input.scope,\n keyPath: field.keyPath,\n value: numeric !== undefined && Number.isFinite(numeric) ? numeric : draft,\n expectedHash: input.startingHash,\n };\n });\n}\n\n/** Whether a save can be attempted at all: something changed, and it can land somewhere. */\nexport function canSaveSettings(input: { dirty: number; scope: SettingsScope; repoRoot: string }): boolean {\n if (input.dirty === 0) return false;\n // A repository write needs a repository; a global one never does.\n return input.scope === 'global' || input.repoRoot !== '';\n}\n"],"mappings":";;;;;;;;;;AAcA,MAAM,gBAAgB;AAEtB,SAAgB,cAAc,OAA0C;CACtE,OAAO,MAAM,QAAQ,KAAK,aAAa;AACzC;;AAGA,SAAgB,qBAAqB,MAAqC,OAA0C;CAClH,IAAI,SAAS,KAAA,KAAa,KAAK,UAAU,UAAU,KAAK,UAAU,OAAO,OAAO,KAAA;CAChF,OAAO,KAAK,UAAU,WAAW,gBAAgB;AACnD;;;;;AAgBA,SAAgB,sBAAsB,OAAmD;CACvF,OAAO,MAAM,OACV,QAAQ,UAAU,cAAc,KAAK,KAAK,MAAM,MAAM,CAAC,CACvD,KAAK,UAAU;EACd,MAAM,QAAQ,MAAM,OAAO,cAAc,KAAK,MAAM;EACpD,MAAM,UAAU,MAAM,SAAS,YAAY,UAAU,QAAQ,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,KAAA;EACnG,OAAO;GACL,UAAU,MAAM;GAChB,OAAO,MAAM;GACb,SAAS,MAAM;GACf,OAAO,YAAY,KAAA,KAAa,OAAO,SAAS,OAAO,IAAI,UAAU;GACrE,cAAc,MAAM;EACtB;CACF,CAAC;AACL;;AAGA,SAAgB,gBAAgB,OAA2E;CACzG,IAAI,MAAM,UAAU,GAAG,OAAO;CAE9B,OAAO,MAAM,UAAU,YAAY,MAAM,aAAa;AACxD"}
@@ -0,0 +1,28 @@
1
+ import { SettingsScope, SettingsValueView, SettingsWriteRequest } from "../../types/settings.mjs";
2
+ import { SettingsFieldContribution } from "@agimon-ai/po-core/web";
3
+ //#region src/web/lib/settingsDraft.d.ts
4
+ export declare function settingsKeyOf(field: SettingsFieldContribution): string;
5
+ /** Why a field cannot be edited at the selected scope, or nothing. */
6
+ export declare function settingsLockedReason(view: SettingsValueView | undefined, scope: SettingsScope): string | undefined;
7
+ export interface PlannedWritesInput {
8
+ fields: readonly SettingsFieldContribution[];
9
+ /** Pending edits by dotted key; null clears the key. */
10
+ drafts: Readonly<Record<string, string | null>>;
11
+ scope: SettingsScope;
12
+ repoRoot: string;
13
+ /** The target file's hash when the page last read it. */
14
+ startingHash: string;
15
+ }
16
+ /**
17
+ * The typed edits a save combines into one request with the file's read hash.
18
+ * Keeping contribution order makes the result predictable for callers.
19
+ */
20
+ export declare function plannedSettingsWrites(input: PlannedWritesInput): SettingsWriteRequest[];
21
+ /** Whether a save can be attempted at all: something changed, and it can land somewhere. */
22
+ export declare function canSaveSettings(input: {
23
+ dirty: number;
24
+ scope: SettingsScope;
25
+ repoRoot: string;
26
+ }): boolean;
27
+ //#endregion
28
+ //# sourceMappingURL=settingsDraft.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsDraft.d.mts","names":[],"sources":["../../../src/web/lib/settingsDraft.ts"],"mappings":";;;wBAgBgB,cAAc,OAAO;;wBAKrB,qBAAqB,MAAM,+BAA+B,OAAO;iBAKhE;EACf,iBAAiB;;EAEjB,QAAQ,SAAS;EACjB,OAAO;EACP;;EAEA;;;;;;wBAOc,sBAAsB,OAAO,qBAAqB;;wBAiBlD,gBAAgB;EAAS;EAAe,OAAO;EAAe"}