@maudecode/talaria-web 1.14.0 → 1.16.1

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 (348) hide show
  1. package/_release.json +4 -4
  2. package/dist/api/automation-router.d.ts +123 -7
  3. package/dist/api/automation-router.js +5 -0
  4. package/dist/api/automation-router.js.map +1 -1
  5. package/dist/api/chat-router.d.ts +728 -55
  6. package/dist/api/chat-router.js +122 -126
  7. package/dist/api/chat-router.js.map +1 -1
  8. package/dist/api/git-router.js +44 -32
  9. package/dist/api/git-router.js.map +1 -1
  10. package/dist/api/raw-routes.js +5 -58
  11. package/dist/api/raw-routes.js.map +1 -1
  12. package/dist/api/router.d.ts +6 -3
  13. package/dist/api/router.js +10 -8
  14. package/dist/api/router.js.map +1 -1
  15. package/dist/api/sessions-router.d.ts +2583 -297
  16. package/dist/api/sessions-router.js +92 -47
  17. package/dist/api/sessions-router.js.map +1 -1
  18. package/dist/api/settings-router.d.ts +188 -17
  19. package/dist/api/settings-router.js +75 -26
  20. package/dist/api/settings-router.js.map +1 -1
  21. package/dist/api/sse-routes.js +1 -1
  22. package/dist/api/sse-routes.js.map +1 -1
  23. package/dist/api/tools-router.d.ts +13 -1
  24. package/dist/api/tools-router.js +10 -8
  25. package/dist/api/tools-router.js.map +1 -1
  26. package/dist/app.d.ts +3620 -343
  27. package/dist/auth/gate.js +8 -4
  28. package/dist/auth/gate.js.map +1 -1
  29. package/dist/auth/oidc.d.ts +6 -2
  30. package/dist/auth/oidc.js +16 -11
  31. package/dist/auth/oidc.js.map +1 -1
  32. package/dist/auth/store.d.ts +14 -2
  33. package/dist/auth/store.js +26 -1
  34. package/dist/auth/store.js.map +1 -1
  35. package/dist/cli/dotenv.d.ts +1 -1
  36. package/dist/cli/dotenv.js +36 -3
  37. package/dist/cli/dotenv.js.map +1 -1
  38. package/dist/config/agent-config.js +20 -15
  39. package/dist/config/agent-config.js.map +1 -1
  40. package/dist/http/addresses.d.ts +6 -0
  41. package/dist/http/addresses.js +26 -0
  42. package/dist/http/addresses.js.map +1 -1
  43. package/dist/http/context.d.ts +7 -5
  44. package/dist/http/context.js.map +1 -1
  45. package/dist/links.d.ts +26 -0
  46. package/dist/links.js +60 -0
  47. package/dist/links.js.map +1 -0
  48. package/dist/onboarding.d.ts +1 -1
  49. package/dist/onboarding.js +28 -8
  50. package/dist/onboarding.js.map +1 -1
  51. package/dist/profiles/profiles.js +1 -1
  52. package/dist/profiles/profiles.js.map +1 -1
  53. package/dist/providers/catalog.d.ts +85 -1
  54. package/dist/providers/catalog.js +280 -43
  55. package/dist/providers/catalog.js.map +1 -1
  56. package/dist/providers/tables.d.ts +3 -1
  57. package/dist/providers/tables.js +9 -4
  58. package/dist/providers/tables.js.map +1 -1
  59. package/dist/redact.js +493 -13
  60. package/dist/redact.js.map +1 -1
  61. package/dist/runtime.js +104 -42
  62. package/dist/runtime.js.map +1 -1
  63. package/dist/sessions/anchor.d.ts +22 -3
  64. package/dist/sessions/anchor.js +87 -42
  65. package/dist/sessions/anchor.js.map +1 -1
  66. package/dist/sessions/background-tasks.d.ts +140 -0
  67. package/dist/sessions/background-tasks.js +352 -0
  68. package/dist/sessions/background-tasks.js.map +1 -0
  69. package/dist/sessions/background-updates.d.ts +56 -0
  70. package/dist/sessions/background-updates.js +152 -0
  71. package/dist/sessions/background-updates.js.map +1 -0
  72. package/dist/sessions/cli-sessions.d.ts +6 -0
  73. package/dist/sessions/cli-sessions.js +20 -7
  74. package/dist/sessions/cli-sessions.js.map +1 -1
  75. package/dist/sessions/completions.d.ts +17 -1
  76. package/dist/sessions/completions.js +84 -13
  77. package/dist/sessions/completions.js.map +1 -1
  78. package/dist/sessions/compress.d.ts +33 -0
  79. package/dist/sessions/compress.js +66 -0
  80. package/dist/sessions/compress.js.map +1 -0
  81. package/dist/sessions/list.d.ts +22 -4
  82. package/dist/sessions/list.js +113 -33
  83. package/dist/sessions/list.js.map +1 -1
  84. package/dist/sessions/merge.d.ts +81 -7
  85. package/dist/sessions/merge.js +391 -26
  86. package/dist/sessions/merge.js.map +1 -1
  87. package/dist/sessions/pending.d.ts +5 -0
  88. package/dist/sessions/pending.js +30 -10
  89. package/dist/sessions/pending.js.map +1 -1
  90. package/dist/sessions/relay.d.ts +7 -1
  91. package/dist/sessions/relay.js +17 -4
  92. package/dist/sessions/relay.js.map +1 -1
  93. package/dist/sessions/service.d.ts +118 -6
  94. package/dist/sessions/service.js +564 -65
  95. package/dist/sessions/service.js.map +1 -1
  96. package/dist/sessions/session.d.ts +22 -1
  97. package/dist/sessions/session.js +29 -2
  98. package/dist/sessions/session.js.map +1 -1
  99. package/dist/sessions/shares.js +11 -2
  100. package/dist/sessions/shares.js.map +1 -1
  101. package/dist/sessions/source-kind.d.ts +22 -0
  102. package/dist/sessions/source-kind.js +54 -0
  103. package/dist/sessions/source-kind.js.map +1 -0
  104. package/dist/sessions/state-db.d.ts +10 -1
  105. package/dist/sessions/state-db.js +48 -17
  106. package/dist/sessions/state-db.js.map +1 -1
  107. package/dist/sessions/store.d.ts +2 -0
  108. package/dist/sessions/store.js +24 -5
  109. package/dist/sessions/store.js.map +1 -1
  110. package/dist/sessions/streams.d.ts +3 -0
  111. package/dist/sessions/streams.js +0 -5
  112. package/dist/sessions/streams.js.map +1 -1
  113. package/dist/sessions/titles.d.ts +4 -0
  114. package/dist/sessions/titles.js +16 -0
  115. package/dist/sessions/titles.js.map +1 -1
  116. package/dist/sessions/turn-context.d.ts +1 -0
  117. package/dist/sessions/turn-context.js +3 -0
  118. package/dist/sessions/turn-context.js.map +1 -1
  119. package/dist/sessions/turn.d.ts +85 -7
  120. package/dist/sessions/turn.js +518 -170
  121. package/dist/sessions/turn.js.map +1 -1
  122. package/dist/settings.d.ts +2 -0
  123. package/dist/settings.js +13 -0
  124. package/dist/settings.js.map +1 -1
  125. package/dist/sidecar/fake.js +2 -0
  126. package/dist/sidecar/fake.js.map +1 -1
  127. package/dist/tools/commands.d.ts +15 -0
  128. package/dist/tools/commands.js +52 -0
  129. package/dist/tools/commands.js.map +1 -0
  130. package/dist/tools/crons.d.ts +38 -4
  131. package/dist/tools/crons.js +323 -36
  132. package/dist/tools/crons.js.map +1 -1
  133. package/dist/tools/mcp.js +5 -1
  134. package/dist/tools/mcp.js.map +1 -1
  135. package/dist/tools/update-notifications.d.ts +1 -1
  136. package/dist/tools/update-notifications.js +1 -1
  137. package/dist/tools/update-notifications.js.map +1 -1
  138. package/dist/tools/updates.d.ts +8 -3
  139. package/dist/tools/updates.js +133 -34
  140. package/dist/tools/updates.js.map +1 -1
  141. package/dist/workspace/git.d.ts +57 -10
  142. package/dist/workspace/git.js +302 -195
  143. package/dist/workspace/git.js.map +1 -1
  144. package/dist/workspace/media-refs.d.ts +13 -0
  145. package/dist/workspace/media-refs.js +165 -0
  146. package/dist/workspace/media-refs.js.map +1 -0
  147. package/dist/workspace/media.d.ts +19 -0
  148. package/dist/workspace/media.js +61 -2
  149. package/dist/workspace/media.js.map +1 -1
  150. package/dist/workspace/workspaces.d.ts +7 -1
  151. package/dist/workspace/workspaces.js +30 -21
  152. package/dist/workspace/workspaces.js.map +1 -1
  153. package/dist/workspace/worktrees.d.ts +2 -4
  154. package/dist/workspace/worktrees.js +28 -33
  155. package/dist/workspace/worktrees.js.map +1 -1
  156. package/package.json +4 -2
  157. package/sidecar/scripts/replay_sidecar.py +3 -1
  158. package/sidecar/talaria_sidecar/__init__.py +1 -1
  159. package/sidecar/talaria_sidecar/home.py +59 -2
  160. package/sidecar/talaria_sidecar/methods/__init__.py +2 -2
  161. package/sidecar/talaria_sidecar/methods/aux.py +19 -3
  162. package/sidecar/talaria_sidecar/methods/chat.py +360 -27
  163. package/sidecar/talaria_sidecar/methods/commands.py +46 -31
  164. package/sidecar/talaria_sidecar/methods/config.py +14 -10
  165. package/sidecar/talaria_sidecar/methods/cron.py +22 -14
  166. package/sidecar/talaria_sidecar/methods/oauth.py +439 -0
  167. package/sidecar/talaria_sidecar/methods/process.py +318 -0
  168. package/sidecar/talaria_sidecar/methods/profiles.py +5 -4
  169. package/sidecar/talaria_sidecar/methods/providers.py +161 -1
  170. package/sidecar/talaria_sidecar/methods/runtime.py +2 -0
  171. package/sidecar/talaria_sidecar/methods/text.py +1 -20
  172. package/sidecar/talaria_sidecar/methods/usage.py +7 -1
  173. package/static/dist/FILES.txt +124 -119
  174. package/static/dist/assets/AppShell-ef3bhu32.js +1 -0
  175. package/static/dist/assets/Button-nx37f4u1.js +1 -0
  176. package/static/dist/assets/ChatPage-cdcpykcg.js +25 -0
  177. package/static/dist/assets/Dialog-mec42hvb.js +1 -0
  178. package/static/dist/assets/HubRoute-ecb65zpr.js +2 -0
  179. package/static/dist/assets/{Markdown-emii55o0.js → Markdown-jqrx5es0.js} +125 -125
  180. package/static/dist/assets/RightPanel-d1lgvk4s.js +1 -0
  181. package/static/dist/assets/Select-h4ivl9qf.js +1 -0
  182. package/static/dist/assets/SessionListPanel-ewib046b.js +1 -0
  183. package/static/dist/assets/SettingsLayout-lx654cup.js +1 -0
  184. package/static/dist/assets/States-ehsb6lzo.js +1 -0
  185. package/static/dist/assets/Toaster-mch1pa3t.js +1 -0
  186. package/static/dist/assets/_app-m8d961ef.js +1 -0
  187. package/static/dist/assets/_app.ext._extensionId-mp33hbzi.js +1 -0
  188. package/static/dist/assets/_app.index-dk6zp7e0.js +1 -0
  189. package/static/dist/assets/_app.insights-jt2fk4i1.js +1 -0
  190. package/static/dist/assets/_app.kanban-if4pubeu.js +1 -0
  191. package/static/dist/assets/_app.logs-mfaw9m6g.js +1 -0
  192. package/static/dist/assets/_app.memory-h3eaarb6.js +1 -0
  193. package/static/dist/assets/_app.profiles-ienktovs.js +1 -0
  194. package/static/dist/assets/{_app.session._sessionId-m6nx9g8t.js → _app.session._sessionId-hh27wwu2.js} +1 -1
  195. package/static/dist/assets/_app.settings-dpoe0bzf.js +1 -0
  196. package/static/dist/assets/_app.settings._section-l468ynag.js +3 -0
  197. package/static/dist/assets/_app.skills-kcbncc8i.js +1 -0
  198. package/static/dist/assets/_app.tasks-occdrqhw.js +2 -0
  199. package/static/dist/assets/_app.todos-nnke2rcc.js +1 -0
  200. package/static/dist/assets/_app.workspaces-cdlatvwj.js +1 -0
  201. package/static/dist/assets/{abnfDiagram-VCTEODGH-kejgxpil.js → abnfDiagram-VCTEODGH-oity9y4o.js} +1 -1
  202. package/static/dist/assets/architecture-7GRP2DOG-hj11333z.js +1 -0
  203. package/static/dist/assets/architectureDiagram-5GKGNRK7-ceaepnyr.js +36 -0
  204. package/static/dist/assets/back-eu64w89w.js +1 -0
  205. package/static/dist/assets/{blockDiagram-I7D4REHJ-l1466a7j.js → blockDiagram-I7D4REHJ-n79st4pj.js} +1 -1
  206. package/static/dist/assets/{c4Diagram-7LVT6UL2-gg3aq3sr.js → c4Diagram-7LVT6UL2-mi73akzk.js} +1 -1
  207. package/static/dist/assets/cancel-mzvkdjg8.js +1 -0
  208. package/static/dist/assets/channel-mbvmf2vv.js +1 -0
  209. package/static/dist/assets/{chunk-4HAMMTFA-oalgz5l8.js → chunk-4HAMMTFA-laat0g1q.js} +1 -1
  210. package/static/dist/assets/{chunk-75Z2AOVW-babmzhdg.js → chunk-75Z2AOVW-0psy1tr2.js} +1 -1
  211. package/static/dist/assets/{chunk-DU6HZSFF-lagu350c.js → chunk-DU6HZSFF-lw8uox8x.js} +3 -3
  212. package/static/dist/assets/{chunk-F27PBJKO-gjh2tqif.js → chunk-F27PBJKO-erassib3.js} +1 -1
  213. package/static/dist/assets/{chunk-GMAD6QVW-ipdgja5c.js → chunk-GMAD6QVW-fz7rx619.js} +1 -1
  214. package/static/dist/assets/{chunk-GVQU2GXP-j8wkn1at.js → chunk-GVQU2GXP-gdb0epb2.js} +1 -1
  215. package/static/dist/assets/{chunk-IMKFNOWR-k00laqyk.js → chunk-IMKFNOWR-ea8t26qw.js} +1 -1
  216. package/static/dist/assets/{chunk-L3NEJ4N5-fju6xqj4.js → chunk-L3NEJ4N5-mb1gu9kz.js} +1 -1
  217. package/static/dist/assets/{chunk-OSK3NFVY-bi6widqt.js → chunk-OSK3NFVY-eovmccvy.js} +1 -1
  218. package/static/dist/assets/{chunk-P2QGCYS3-czr4tebv.js → chunk-P2QGCYS3-bo55zjo5.js} +1 -1
  219. package/static/dist/assets/{chunk-POPQ4Y6H-ktdhn67w.js → chunk-POPQ4Y6H-ja7ohe4h.js} +1 -1
  220. package/static/dist/assets/{chunk-PWAF6VOD-ii4dsu0d.js → chunk-PWAF6VOD-e30g9nus.js} +1 -1
  221. package/static/dist/assets/{chunk-SHT3W25Y-fpwk3xxp.js → chunk-SHT3W25Y-gbb798f7.js} +3 -3
  222. package/static/dist/assets/{chunk-SVP7TREG-k0jrvhei.js → chunk-SVP7TREG-h2iw8urm.js} +1 -1
  223. package/static/dist/assets/{chunk-TICWLB2K-nkqv9ot0.js → chunk-TICWLB2K-fd2cottz.js} +1 -1
  224. package/static/dist/assets/classDiagram-ZZMXUADV-o8r05k0n.js +1 -0
  225. package/static/dist/assets/classDiagram-v2-VYDZK3BY-o8r05k0n.js +1 -0
  226. package/static/dist/assets/{copied-gpchexqu.js → copied-h65fc3cx.js} +1 -1
  227. package/static/dist/assets/copy-e6977uwq.js +1 -0
  228. package/static/dist/assets/{cynefin-OW5HDTMX-lqxt8rs3.js → cynefin-OW5HDTMX-lbltyl5j.js} +1 -1
  229. package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-j9eqovf5.js → cynefinDiagram-5FMLGOSQ-lxhsqq4a.js} +1 -1
  230. package/static/dist/assets/{dagre-GXQ25YYZ-m9agobjm.js → dagre-GXQ25YYZ-gn4nnaln.js} +4 -4
  231. package/static/dist/assets/{diagram-S7CK7UJ4-itodc50c.js → diagram-S7CK7UJ4-pa3ij6q7.js} +3 -3
  232. package/static/dist/assets/{diagram-UQ7AKVKN-n1h2t4ah.js → diagram-UQ7AKVKN-zbipyz57.js} +1 -1
  233. package/static/dist/assets/{diagram-VSXAHHWV-lvtvm9bj.js → diagram-VSXAHHWV-d1kbpzgf.js} +1 -1
  234. package/static/dist/assets/{diagram-VX7I27RA-cgas58sy.js → diagram-VX7I27RA-i3ty14xl.js} +1 -1
  235. package/static/dist/assets/{diagram-Z3DM3KII-d0aeps1q.js → diagram-Z3DM3KII-m8xefqa7.js} +1 -1
  236. package/static/dist/assets/{ebnfDiagram-PWID7BFC-md345fyq.js → ebnfDiagram-PWID7BFC-nz7wj05l.js} +1 -1
  237. package/static/dist/assets/endpoints-k7yf25m0.js +64 -0
  238. package/static/dist/assets/{erDiagram-RLTQ6QDP-i4rua63b.js → erDiagram-RLTQ6QDP-fa41ib83.js} +1 -1
  239. package/static/dist/assets/eventmodeling-NTZA5JFV-kpbq09bx.js +1 -0
  240. package/static/dist/assets/flowDiagram-HODETNUW-lcz0kx14.js +1 -0
  241. package/static/dist/assets/{ganttDiagram-EL5Y4UJY-geqx7zgl.js → ganttDiagram-EL5Y4UJY-n7zq01qu.js} +1 -1
  242. package/static/dist/assets/{gitGraph-4MIJSDKK-leoq0z8t.js → gitGraph-4MIJSDKK-c89emb07.js} +1 -1
  243. package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-llrlxfha.js → gitGraphDiagram-WWUBYQGX-cz7cgr6w.js} +1 -1
  244. package/static/dist/assets/{highlighted-body-KPVGNVTW-kq2cnw6q.js → highlighted-body-KPVGNVTW-d9bapmni.js} +1 -1
  245. package/static/dist/assets/{index-f9bzglkn.js → index-h00usru2.js} +3 -3
  246. package/static/dist/assets/index-n73ijkv2.css +2 -0
  247. package/static/dist/assets/{info-A6RAGUB7-lkly4xj6.js → info-A6RAGUB7-ndddhhhh.js} +1 -1
  248. package/static/dist/assets/infoDiagram-27XIBGKW-ccxigcpf.js +2 -0
  249. package/static/dist/assets/{ishikawaDiagram-5VMMS53U-hq6jf374.js → ishikawaDiagram-5VMMS53U-le0z9vtc.js} +1 -1
  250. package/static/dist/assets/{journeyDiagram-3NMN7TZE-is03ntb0.js → journeyDiagram-3NMN7TZE-ivsmb26o.js} +1 -1
  251. package/static/dist/assets/{kanban-definition-UXKFOSKX-jmerizqb.js → kanban-definition-UXKFOSKX-h6n2awt0.js} +1 -1
  252. package/static/dist/assets/lazyRouteComponent-m1rtyk4t.js +1 -0
  253. package/static/dist/assets/{line-laaa8h99.js → line-dmzlfe0u.js} +1 -1
  254. package/static/dist/assets/link-budeg5t9.js +1 -0
  255. package/static/dist/assets/login-kjhasvp8.js +1 -0
  256. package/static/dist/assets/mermaid-HWGCJPDP-jb5d211j.js +1 -0
  257. package/static/dist/assets/{mermaid-parser.core-ix4junux.js → mermaid-parser.core-gwyd5bnq.js} +3 -3
  258. package/static/dist/assets/{mindmap-definition-YA3MSWOX-o0e0adl1.js → mindmap-definition-YA3MSWOX-l68gg5h7.js} +1 -1
  259. package/static/dist/assets/onboarding-cdfrk0pj.js +1 -0
  260. package/static/dist/assets/{packet-AYTQ26CC-kl8pwsyg.js → packet-AYTQ26CC-gpv06065.js} +1 -1
  261. package/static/dist/assets/{pegDiagram-XKGWAZYB-bbqn9jo4.js → pegDiagram-XKGWAZYB-e52vs23u.js} +1 -1
  262. package/static/dist/assets/{pie-WAS4IAKB-cpyo8bkr.js → pie-WAS4IAKB-l6m7nz5s.js} +1 -1
  263. package/static/dist/assets/{pieDiagram-E7YTZNPT-pelug34f.js → pieDiagram-E7YTZNPT-b4is36bq.js} +3 -3
  264. package/static/dist/assets/{quadrantDiagram-AXDQQJYC-jds4jmr5.js → quadrantDiagram-AXDQQJYC-m8vt2788.js} +1 -1
  265. package/static/dist/assets/{radar-RG4KPBEZ-e02oxnvd.js → radar-RG4KPBEZ-nxbrhiov.js} +1 -1
  266. package/static/dist/assets/{railroad-74A4TZTK-kz3delwo.js → railroad-74A4TZTK-222mu9hi.js} +1 -1
  267. package/static/dist/assets/railroad-abnf-HS5TGJTU-kdvgl6x8.js +1 -0
  268. package/static/dist/assets/railroad-ebnf-LZEXJU2U-itiqslby.js +1 -0
  269. package/static/dist/assets/railroad-peg-WCYAUIDC-go7kov78.js +1 -0
  270. package/static/dist/assets/{railroadDiagram-O6MQD6OU-jgroj2ew.js → railroadDiagram-O6MQD6OU-o8lldfzv.js} +1 -1
  271. package/static/dist/assets/{refresh-cw-k7yxjdn3.js → refresh-cw-kbcje1uy.js} +1 -1
  272. package/static/dist/assets/{requirementDiagram-BXWQKSXE-m4az5e0j.js → requirementDiagram-BXWQKSXE-ovyq38kv.js} +1 -1
  273. package/static/dist/assets/{sankeyDiagram-P5KCCOFB-vlryqiv3.js → sankeyDiagram-P5KCCOFB-ou7lznor.js} +1 -1
  274. package/static/dist/assets/{saved-brdfjjnw.js → saved-bazmcup9.js} +1 -1
  275. package/static/dist/assets/search-jen74z4u.js +1 -0
  276. package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-fr8hrpql.js → sequenceDiagram-WJ2MYXX4-ovckdzf2.js} +1 -1
  277. package/static/dist/assets/{settings_section_extensions_title-l0zodj0b.js → settings_section_extensions_title-ertwwhlx.js} +1 -1
  278. package/static/dist/assets/share._token-dan9hgvj.js +2 -0
  279. package/static/dist/assets/{sliders-horizontal-gcgscv8r.js → sliders-horizontal-f9cb3lh3.js} +1 -1
  280. package/static/dist/assets/{stateDiagram-D77RDMKH-bg548iyr.js → stateDiagram-D77RDMKH-fcrexkkv.js} +1 -1
  281. package/static/dist/assets/stateDiagram-v2-MP3YSRHH-lcfraua2.js +1 -0
  282. package/static/dist/assets/{swimlanes-42K2YHIH-hk5z3efh.js → swimlanes-42K2YHIH-f7usu8fw.js} +1 -1
  283. package/static/dist/assets/swimlanesDiagram-VR7AAH4N-ogmanni0.js +8 -0
  284. package/static/dist/assets/{timeline-definition-24CTP7MA-olvknr62.js → timeline-definition-24CTP7MA-gp1hvz9f.js} +1 -1
  285. package/static/dist/assets/todoStore-eqtid4r4.js +1 -0
  286. package/static/dist/assets/{treeView-Q6P3EWNA-ovvjsxtf.js → treeView-Q6P3EWNA-gb9gf11u.js} +1 -1
  287. package/static/dist/assets/{treemap-WGGIJYW6-ggkipj59.js → treemap-WGGIJYW6-nuvfnvvi.js} +1 -1
  288. package/static/dist/assets/{untitled-c8ydw0bu.js → untitled-htelhc68.js} +1 -1
  289. package/static/dist/assets/useForm-h2t0u14e.js +1 -0
  290. package/static/dist/assets/useLocale-hcsb84pj.js +1 -0
  291. package/static/dist/assets/useNavigate-nwy70ztj.js +1 -0
  292. package/static/dist/assets/{useParams-katwvzil.js → useParams-dqd64jv7.js} +1 -1
  293. package/static/dist/assets/{useSearch-c70sgau1.js → useSearch-j30pvsy7.js} +1 -1
  294. package/static/dist/assets/{vennDiagram-4TSXK5OY-hzld7zt7.js → vennDiagram-4TSXK5OY-fzchbzaj.js} +1 -1
  295. package/static/dist/assets/{wardley-WFR3VGLG-hxkeoms8.js → wardley-WFR3VGLG-m47mhfbh.js} +1 -1
  296. package/static/dist/assets/{wardleyDiagram-VM6X3IG4-ljh90mb1.js → wardleyDiagram-VM6X3IG4-odg6ct1z.js} +2 -2
  297. package/static/dist/assets/{xychartDiagram-S5SC5T6Z-mnuaes03.js → xychartDiagram-S5SC5T6Z-mrhms5um.js} +1 -1
  298. package/static/dist/index.html +1 -1
  299. package/static/dist/sw.js +1 -1
  300. package/static/dist/assets/AppShell-haqi9qzu.js +0 -1
  301. package/static/dist/assets/ChatPage-hjyu2g64.js +0 -22
  302. package/static/dist/assets/HubRoute-gkd8o1vg.js +0 -2
  303. package/static/dist/assets/RightPanel-o73y98dn.js +0 -1
  304. package/static/dist/assets/Select-jld3yeni.js +0 -1
  305. package/static/dist/assets/SessionListPanel-d3qx4ric.js +0 -1
  306. package/static/dist/assets/SettingsLayout-lnn2wo2s.js +0 -1
  307. package/static/dist/assets/States-e5hv6gdh.js +0 -1
  308. package/static/dist/assets/Toaster-c4jq1i26.js +0 -1
  309. package/static/dist/assets/_app-bnip2pjg.js +0 -1
  310. package/static/dist/assets/_app.ext._extensionId-egptzrfy.js +0 -1
  311. package/static/dist/assets/_app.index-vdz13ul5.js +0 -1
  312. package/static/dist/assets/_app.insights-lgjshsba.js +0 -1
  313. package/static/dist/assets/_app.kanban-c18cjrpz.js +0 -1
  314. package/static/dist/assets/_app.logs-ezhojgeg.js +0 -1
  315. package/static/dist/assets/_app.memory-i00paisv.js +0 -1
  316. package/static/dist/assets/_app.profiles-kd02bwjx.js +0 -1
  317. package/static/dist/assets/_app.settings-giaudkuk.js +0 -1
  318. package/static/dist/assets/_app.settings._section-k4qtlexk.js +0 -1
  319. package/static/dist/assets/_app.skills-bby2uvl8.js +0 -1
  320. package/static/dist/assets/_app.tasks-1kz9bosm.js +0 -2
  321. package/static/dist/assets/_app.todos-izjdbkm2.js +0 -1
  322. package/static/dist/assets/_app.workspaces-lfh2kw7s.js +0 -1
  323. package/static/dist/assets/architecture-7GRP2DOG-b4u9z1w3.js +0 -1
  324. package/static/dist/assets/architectureDiagram-5GKGNRK7-hqnf84fc.js +0 -36
  325. package/static/dist/assets/channel-o77ioktg.js +0 -1
  326. package/static/dist/assets/classDiagram-ZZMXUADV-f5rvod26.js +0 -1
  327. package/static/dist/assets/classDiagram-v2-VYDZK3BY-f5rvod26.js +0 -1
  328. package/static/dist/assets/endpoints-e58saih3.js +0 -9
  329. package/static/dist/assets/eventmodeling-NTZA5JFV-bn3fjsaq.js +0 -1
  330. package/static/dist/assets/flowDiagram-HODETNUW-li70d120.js +0 -1
  331. package/static/dist/assets/index-gkh7kum4.css +0 -2
  332. package/static/dist/assets/infoDiagram-27XIBGKW-oo7kdyte.js +0 -2
  333. package/static/dist/assets/lazyRouteComponent-b1h2ykmb.js +0 -1
  334. package/static/dist/assets/link-d8f0788e.js +0 -1
  335. package/static/dist/assets/login-llkohrcg.js +0 -1
  336. package/static/dist/assets/mermaid-HWGCJPDP-id0ffk2r.js +0 -1
  337. package/static/dist/assets/onboarding-lx0d6b38.js +0 -1
  338. package/static/dist/assets/railroad-abnf-HS5TGJTU-l13ped2z.js +0 -1
  339. package/static/dist/assets/railroad-ebnf-LZEXJU2U-c7rg3g4g.js +0 -1
  340. package/static/dist/assets/railroad-peg-WCYAUIDC-od0b8niq.js +0 -1
  341. package/static/dist/assets/search-gt2ueyvg.js +0 -1
  342. package/static/dist/assets/share._token-oyjv046r.js +0 -2
  343. package/static/dist/assets/stateDiagram-v2-MP3YSRHH-j5v40qih.js +0 -1
  344. package/static/dist/assets/swimlanesDiagram-VR7AAH4N-grzefo9c.js +0 -8
  345. package/static/dist/assets/tabBuild-idliyw9f.js +0 -56
  346. package/static/dist/assets/todoStore-j4c2xq0b.js +0 -1
  347. package/static/dist/assets/useForm-kd759sjk.js +0 -1
  348. package/static/dist/assets/useLocale-hds4xmja.js +0 -1
@@ -54,6 +54,8 @@ export declare const settingsRouter: {
54
54
  tts_voice: import("zod").ZodOptional<import("zod").ZodString>;
55
55
  dictation_append: import("zod").ZodOptional<import("zod").ZodBoolean>;
56
56
  persisted_speech_keys: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
57
+ confirm_external_links: import("zod").ZodOptional<import("zod").ZodBoolean>;
58
+ trusted_link_hosts: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
57
59
  }, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
58
60
  save: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>, import("zod").ZodObject<{
59
61
  bot_name: import("zod").ZodOptional<import("zod").ZodString>;
@@ -103,7 +105,15 @@ export declare const settingsRouter: {
103
105
  tts_voice: import("zod").ZodOptional<import("zod").ZodString>;
104
106
  dictation_append: import("zod").ZodOptional<import("zod").ZodBoolean>;
105
107
  persisted_speech_keys: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
108
+ confirm_external_links: import("zod").ZodOptional<import("zod").ZodBoolean>;
109
+ trusted_link_hosts: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
106
110
  }, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
111
+ linkCheck: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("zod").ZodObject<{
112
+ url: import("zod").ZodString;
113
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
114
+ opens_directly: import("zod").ZodBoolean;
115
+ host: import("zod").ZodNullable<import("zod").ZodString>;
116
+ }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
107
117
  };
108
118
  profiles: {
109
119
  list: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("@orpc/server").Schema<unknown, unknown>, import("zod").ZodObject<{
@@ -194,6 +204,9 @@ export declare const settingsRouter: {
194
204
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
195
205
  active_provider: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
196
206
  default_model: import("zod").ZodOptional<import("zod").ZodString>;
207
+ default_provider_id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
208
+ default_bare_id: import("zod").ZodOptional<import("zod").ZodString>;
209
+ default_option_id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
197
210
  groups: import("zod").ZodArray<import("zod").ZodObject<{
198
211
  provider: import("zod").ZodString;
199
212
  provider_id: import("zod").ZodOptional<import("zod").ZodString>;
@@ -201,12 +214,16 @@ export declare const settingsRouter: {
201
214
  id: import("zod").ZodString;
202
215
  label: import("zod").ZodOptional<import("zod").ZodString>;
203
216
  provider: import("zod").ZodOptional<import("zod").ZodString>;
217
+ provider_id: import("zod").ZodOptional<import("zod").ZodString>;
218
+ bare_id: import("zod").ZodOptional<import("zod").ZodString>;
204
219
  supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
205
220
  }, import("zod/v4/core").$loose>>;
206
221
  extra_models: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
207
222
  id: import("zod").ZodString;
208
223
  label: import("zod").ZodOptional<import("zod").ZodString>;
209
224
  provider: import("zod").ZodOptional<import("zod").ZodString>;
225
+ provider_id: import("zod").ZodOptional<import("zod").ZodString>;
226
+ bare_id: import("zod").ZodOptional<import("zod").ZodString>;
210
227
  supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
211
228
  }, import("zod/v4/core").$loose>>>;
212
229
  }, import("zod/v4/core").$loose>>;
@@ -224,6 +241,9 @@ export declare const settingsRouter: {
224
241
  models: import("zod").ZodObject<{
225
242
  active_provider: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
226
243
  default_model: import("zod").ZodOptional<import("zod").ZodString>;
244
+ default_provider_id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
245
+ default_bare_id: import("zod").ZodOptional<import("zod").ZodString>;
246
+ default_option_id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
227
247
  groups: import("zod").ZodArray<import("zod").ZodObject<{
228
248
  provider: import("zod").ZodString;
229
249
  provider_id: import("zod").ZodOptional<import("zod").ZodString>;
@@ -231,12 +251,16 @@ export declare const settingsRouter: {
231
251
  id: import("zod").ZodString;
232
252
  label: import("zod").ZodOptional<import("zod").ZodString>;
233
253
  provider: import("zod").ZodOptional<import("zod").ZodString>;
254
+ provider_id: import("zod").ZodOptional<import("zod").ZodString>;
255
+ bare_id: import("zod").ZodOptional<import("zod").ZodString>;
234
256
  supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
235
257
  }, import("zod/v4/core").$loose>>;
236
258
  extra_models: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
237
259
  id: import("zod").ZodString;
238
260
  label: import("zod").ZodOptional<import("zod").ZodString>;
239
261
  provider: import("zod").ZodOptional<import("zod").ZodString>;
262
+ provider_id: import("zod").ZodOptional<import("zod").ZodString>;
263
+ bare_id: import("zod").ZodOptional<import("zod").ZodString>;
240
264
  supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
241
265
  }, import("zod/v4/core").$loose>>>;
242
266
  }, import("zod/v4/core").$loose>>;
@@ -245,21 +269,26 @@ export declare const settingsRouter: {
245
269
  }, import("zod/v4/core").$loose>;
246
270
  }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
247
271
  auxiliary: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("@orpc/server").Schema<unknown, unknown>, import("zod").ZodObject<{
248
- main: import("zod").ZodOptional<import("zod").ZodObject<{
272
+ main: import("zod").ZodObject<{
249
273
  model: import("zod").ZodOptional<import("zod").ZodString>;
250
274
  provider: import("zod").ZodOptional<import("zod").ZodString>;
251
275
  base_url: import("zod").ZodOptional<import("zod").ZodString>;
252
276
  api_key_set: import("zod").ZodOptional<import("zod").ZodBoolean>;
253
- }, import("zod/v4/core").$loose>>;
254
- tasks: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
277
+ }, import("zod/v4/core").$loose>;
278
+ tasks: import("zod").ZodArray<import("zod").ZodObject<{
255
279
  task: import("zod").ZodString;
256
- label: import("zod").ZodOptional<import("zod").ZodString>;
257
- description: import("zod").ZodOptional<import("zod").ZodString>;
258
- model: import("zod").ZodOptional<import("zod").ZodString>;
259
- provider: import("zod").ZodOptional<import("zod").ZodString>;
280
+ label: import("zod").ZodString;
281
+ description: import("zod").ZodString;
282
+ provider: import("zod").ZodString;
283
+ model: import("zod").ZodString;
260
284
  base_url: import("zod").ZodOptional<import("zod").ZodString>;
261
285
  api_key_set: import("zod").ZodOptional<import("zod").ZodBoolean>;
262
- }, import("zod/v4/core").$loose>>>;
286
+ is_auto: import("zod").ZodBoolean;
287
+ value_label: import("zod").ZodNullable<import("zod").ZodString>;
288
+ provider_label: import("zod").ZodNullable<import("zod").ZodString>;
289
+ selected_option_id: import("zod").ZodNullable<import("zod").ZodString>;
290
+ in_catalog: import("zod").ZodBoolean;
291
+ }, import("zod/v4/core").$loose>>;
263
292
  }, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
264
293
  set: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("zod").ZodObject<{
265
294
  advanced: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>>;
@@ -274,6 +303,28 @@ export declare const settingsRouter: {
274
303
  ok: import("zod").ZodOptional<import("zod").ZodBoolean>;
275
304
  session: import("zod").ZodOptional<import("zod").ZodUnknown>;
276
305
  error: import("zod").ZodOptional<import("zod").ZodString>;
306
+ auxiliary: import("zod").ZodOptional<import("zod").ZodObject<{
307
+ main: import("zod").ZodObject<{
308
+ model: import("zod").ZodOptional<import("zod").ZodString>;
309
+ provider: import("zod").ZodOptional<import("zod").ZodString>;
310
+ base_url: import("zod").ZodOptional<import("zod").ZodString>;
311
+ api_key_set: import("zod").ZodOptional<import("zod").ZodBoolean>;
312
+ }, import("zod/v4/core").$loose>;
313
+ tasks: import("zod").ZodArray<import("zod").ZodObject<{
314
+ task: import("zod").ZodString;
315
+ label: import("zod").ZodString;
316
+ description: import("zod").ZodString;
317
+ provider: import("zod").ZodString;
318
+ model: import("zod").ZodString;
319
+ base_url: import("zod").ZodOptional<import("zod").ZodString>;
320
+ api_key_set: import("zod").ZodOptional<import("zod").ZodBoolean>;
321
+ is_auto: import("zod").ZodBoolean;
322
+ value_label: import("zod").ZodNullable<import("zod").ZodString>;
323
+ provider_label: import("zod").ZodNullable<import("zod").ZodString>;
324
+ selected_option_id: import("zod").ZodNullable<import("zod").ZodString>;
325
+ in_catalog: import("zod").ZodBoolean;
326
+ }, import("zod/v4/core").$loose>>;
327
+ }, import("zod/v4/core").$loose>>;
277
328
  }, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
278
329
  setDefault: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("zod").ZodObject<{
279
330
  advanced: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>>;
@@ -304,6 +355,8 @@ export declare const settingsRouter: {
304
355
  id: import("zod").ZodString;
305
356
  label: import("zod").ZodOptional<import("zod").ZodString>;
306
357
  provider: import("zod").ZodOptional<import("zod").ZodString>;
358
+ provider_id: import("zod").ZodOptional<import("zod").ZodString>;
359
+ bare_id: import("zod").ZodOptional<import("zod").ZodString>;
307
360
  supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
308
361
  }, import("zod/v4/core").$loose>>>;
309
362
  models_total: import("zod").ZodOptional<import("zod").ZodNumber>;
@@ -331,12 +384,64 @@ export declare const settingsRouter: {
331
384
  quota: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("zod").ZodObject<{
332
385
  provider: import("zod").ZodOptional<import("zod").ZodString>;
333
386
  refresh: import("zod").ZodOptional<import("zod").ZodString>;
334
- }, import("zod/v4/core").$strip>, import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
387
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
388
+ computed_at: import("zod").ZodString;
389
+ ok: import("zod").ZodBoolean;
390
+ provider: import("zod").ZodNullable<import("zod").ZodString>;
391
+ display_name: import("zod").ZodNullable<import("zod").ZodString>;
392
+ supported: import("zod").ZodBoolean;
393
+ status: import("zod").ZodString;
394
+ label: import("zod").ZodOptional<import("zod").ZodString>;
395
+ message: import("zod").ZodString;
396
+ quota: import("zod").ZodUnknown;
397
+ account_limits: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
398
+ available: import("zod").ZodOptional<import("zod").ZodBoolean>;
399
+ stale: import("zod").ZodOptional<import("zod").ZodBoolean>;
400
+ title: import("zod").ZodOptional<import("zod").ZodString>;
401
+ plan: import("zod").ZodOptional<import("zod").ZodUnknown>;
402
+ unavailable_reason: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
403
+ windows: import("zod").ZodArray<import("zod").ZodObject<{
404
+ label: import("zod").ZodString;
405
+ used_percent: import("zod").ZodNullable<import("zod").ZodNumber>;
406
+ remaining_percent: import("zod").ZodNullable<import("zod").ZodNumber>;
407
+ reset_at: import("zod").ZodNullable<import("zod").ZodString>;
408
+ detail: import("zod").ZodNullable<import("zod").ZodString>;
409
+ window_seconds: import("zod").ZodNullable<import("zod").ZodNumber>;
410
+ pace: import("zod").ZodNullable<import("zod").ZodObject<{
411
+ expected_remaining_percent: import("zod").ZodNumber;
412
+ pace_delta_percent: import("zod").ZodNumber;
413
+ burn_rate: import("zod").ZodNumber;
414
+ minutes_to_reset: import("zod").ZodNumber;
415
+ projected_minutes_to_empty: import("zod").ZodNullable<import("zod").ZodNumber>;
416
+ elapsed_minutes: import("zod").ZodNumber;
417
+ valid_until: import("zod").ZodString;
418
+ }, import("zod/v4/core").$loose>>;
419
+ forecast: import("zod").ZodNullable<import("zod").ZodObject<{
420
+ outcome: import("zod").ZodEnum<{
421
+ warning: "warning";
422
+ safe: "safe";
423
+ }>;
424
+ budget_unit: import("zod").ZodEnum<{
425
+ hour: "hour";
426
+ day: "day";
427
+ }>;
428
+ budget_percent: import("zod").ZodNullable<import("zod").ZodNumber>;
429
+ depletion_margin_minutes: import("zod").ZodNullable<import("zod").ZodNumber>;
430
+ }, import("zod/v4/core").$loose>>;
431
+ }, import("zod/v4/core").$loose>>;
432
+ details: import("zod").ZodOptional<import("zod").ZodUnknown>;
433
+ fetched_at: import("zod").ZodNullable<import("zod").ZodString>;
434
+ pace_window_index: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
435
+ session_window_index: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
436
+ weekly_window_index: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
437
+ }, import("zod/v4/core").$loose>>>;
438
+ }, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
335
439
  quotas: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("zod").ZodObject<{
336
440
  source: import("zod").ZodOptional<import("zod").ZodString>;
337
441
  refresh: import("zod").ZodOptional<import("zod").ZodString>;
338
442
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
339
443
  version: import("zod").ZodNumber;
444
+ computed_at: import("zod").ZodString;
340
445
  scope_id: import("zod").ZodString;
341
446
  profile_id: import("zod").ZodString;
342
447
  active_provider: import("zod").ZodNullable<import("zod").ZodString>;
@@ -352,13 +457,44 @@ export declare const settingsRouter: {
352
457
  message: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
353
458
  is_active_provider: import("zod").ZodOptional<import("zod").ZodBoolean>;
354
459
  quota: import("zod").ZodOptional<import("zod").ZodUnknown>;
355
- windows: import("zod").ZodOptional<import("zod").ZodUnknown>;
460
+ windows: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
461
+ label: import("zod").ZodString;
462
+ used_percent: import("zod").ZodNullable<import("zod").ZodNumber>;
463
+ remaining_percent: import("zod").ZodNullable<import("zod").ZodNumber>;
464
+ reset_at: import("zod").ZodNullable<import("zod").ZodString>;
465
+ detail: import("zod").ZodNullable<import("zod").ZodString>;
466
+ window_seconds: import("zod").ZodNullable<import("zod").ZodNumber>;
467
+ pace: import("zod").ZodNullable<import("zod").ZodObject<{
468
+ expected_remaining_percent: import("zod").ZodNumber;
469
+ pace_delta_percent: import("zod").ZodNumber;
470
+ burn_rate: import("zod").ZodNumber;
471
+ minutes_to_reset: import("zod").ZodNumber;
472
+ projected_minutes_to_empty: import("zod").ZodNullable<import("zod").ZodNumber>;
473
+ elapsed_minutes: import("zod").ZodNumber;
474
+ valid_until: import("zod").ZodString;
475
+ }, import("zod/v4/core").$loose>>;
476
+ forecast: import("zod").ZodNullable<import("zod").ZodObject<{
477
+ outcome: import("zod").ZodEnum<{
478
+ warning: "warning";
479
+ safe: "safe";
480
+ }>;
481
+ budget_unit: import("zod").ZodEnum<{
482
+ hour: "hour";
483
+ day: "day";
484
+ }>;
485
+ budget_percent: import("zod").ZodNullable<import("zod").ZodNumber>;
486
+ depletion_margin_minutes: import("zod").ZodNullable<import("zod").ZodNumber>;
487
+ }, import("zod/v4/core").$loose>>;
488
+ }, import("zod/v4/core").$loose>>>;
356
489
  balances: import("zod").ZodOptional<import("zod").ZodUnknown>;
357
490
  plan: import("zod").ZodOptional<import("zod").ZodUnknown>;
358
491
  details: import("zod").ZodOptional<import("zod").ZodUnknown>;
359
492
  unavailable_reason: import("zod").ZodOptional<import("zod").ZodUnknown>;
360
493
  retry_after: import("zod").ZodOptional<import("zod").ZodUnknown>;
361
494
  fetched_at: import("zod").ZodOptional<import("zod").ZodUnknown>;
495
+ pace_window_index: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
496
+ session_window_index: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
497
+ weekly_window_index: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
362
498
  }, import("zod/v4/core").$loose>>;
363
499
  }, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
364
500
  costHistory: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("zod").ZodObject<{
@@ -431,6 +567,10 @@ export declare const settingsRouter: {
431
567
  base_url: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
432
568
  models: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnknown>>;
433
569
  category: import("zod").ZodOptional<import("zod").ZodString>;
570
+ default_model: import("zod").ZodOptional<import("zod").ZodString>;
571
+ oauth_flow: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodLiteral<"device_code">>>;
572
+ oauth_label: import("zod").ZodOptional<import("zod").ZodString>;
573
+ signed_in: import("zod").ZodOptional<import("zod").ZodBoolean>;
434
574
  }, import("zod/v4/core").$loose>>>;
435
575
  categories: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnknown>>;
436
576
  current: import("zod").ZodOptional<import("zod").ZodObject<{
@@ -457,7 +597,7 @@ export declare const settingsRouter: {
457
597
  }, import("zod/v4/core").$loose>>;
458
598
  workspaces: import("zod").ZodOptional<import("zod").ZodObject<{
459
599
  items: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
460
- name: import("zod").ZodOptional<import("zod").ZodString>;
600
+ name: import("zod").ZodString;
461
601
  path: import("zod").ZodString;
462
602
  }, import("zod/v4/core").$loose>>>;
463
603
  last: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
@@ -465,6 +605,9 @@ export declare const settingsRouter: {
465
605
  models: import("zod").ZodOptional<import("zod").ZodObject<{
466
606
  active_provider: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
467
607
  default_model: import("zod").ZodOptional<import("zod").ZodString>;
608
+ default_provider_id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
609
+ default_bare_id: import("zod").ZodOptional<import("zod").ZodString>;
610
+ default_option_id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
468
611
  groups: import("zod").ZodArray<import("zod").ZodObject<{
469
612
  provider: import("zod").ZodString;
470
613
  provider_id: import("zod").ZodOptional<import("zod").ZodString>;
@@ -472,12 +615,16 @@ export declare const settingsRouter: {
472
615
  id: import("zod").ZodString;
473
616
  label: import("zod").ZodOptional<import("zod").ZodString>;
474
617
  provider: import("zod").ZodOptional<import("zod").ZodString>;
618
+ provider_id: import("zod").ZodOptional<import("zod").ZodString>;
619
+ bare_id: import("zod").ZodOptional<import("zod").ZodString>;
475
620
  supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
476
621
  }, import("zod/v4/core").$loose>>;
477
622
  extra_models: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
478
623
  id: import("zod").ZodString;
479
624
  label: import("zod").ZodOptional<import("zod").ZodString>;
480
625
  provider: import("zod").ZodOptional<import("zod").ZodString>;
626
+ provider_id: import("zod").ZodOptional<import("zod").ZodString>;
627
+ bare_id: import("zod").ZodOptional<import("zod").ZodString>;
481
628
  supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
482
629
  }, import("zod/v4/core").$loose>>>;
483
630
  }, import("zod/v4/core").$loose>>;
@@ -509,6 +656,10 @@ export declare const settingsRouter: {
509
656
  base_url: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
510
657
  models: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnknown>>;
511
658
  category: import("zod").ZodOptional<import("zod").ZodString>;
659
+ default_model: import("zod").ZodOptional<import("zod").ZodString>;
660
+ oauth_flow: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodLiteral<"device_code">>>;
661
+ oauth_label: import("zod").ZodOptional<import("zod").ZodString>;
662
+ signed_in: import("zod").ZodOptional<import("zod").ZodBoolean>;
512
663
  }, import("zod/v4/core").$loose>>>;
513
664
  categories: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnknown>>;
514
665
  current: import("zod").ZodOptional<import("zod").ZodObject<{
@@ -535,7 +686,7 @@ export declare const settingsRouter: {
535
686
  }, import("zod/v4/core").$loose>>;
536
687
  workspaces: import("zod").ZodOptional<import("zod").ZodObject<{
537
688
  items: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
538
- name: import("zod").ZodOptional<import("zod").ZodString>;
689
+ name: import("zod").ZodString;
539
690
  path: import("zod").ZodString;
540
691
  }, import("zod/v4/core").$loose>>>;
541
692
  last: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
@@ -543,6 +694,9 @@ export declare const settingsRouter: {
543
694
  models: import("zod").ZodOptional<import("zod").ZodObject<{
544
695
  active_provider: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
545
696
  default_model: import("zod").ZodOptional<import("zod").ZodString>;
697
+ default_provider_id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
698
+ default_bare_id: import("zod").ZodOptional<import("zod").ZodString>;
699
+ default_option_id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
546
700
  groups: import("zod").ZodArray<import("zod").ZodObject<{
547
701
  provider: import("zod").ZodString;
548
702
  provider_id: import("zod").ZodOptional<import("zod").ZodString>;
@@ -550,12 +704,16 @@ export declare const settingsRouter: {
550
704
  id: import("zod").ZodString;
551
705
  label: import("zod").ZodOptional<import("zod").ZodString>;
552
706
  provider: import("zod").ZodOptional<import("zod").ZodString>;
707
+ provider_id: import("zod").ZodOptional<import("zod").ZodString>;
708
+ bare_id: import("zod").ZodOptional<import("zod").ZodString>;
553
709
  supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
554
710
  }, import("zod/v4/core").$loose>>;
555
711
  extra_models: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
556
712
  id: import("zod").ZodString;
557
713
  label: import("zod").ZodOptional<import("zod").ZodString>;
558
714
  provider: import("zod").ZodOptional<import("zod").ZodString>;
715
+ provider_id: import("zod").ZodOptional<import("zod").ZodString>;
716
+ bare_id: import("zod").ZodOptional<import("zod").ZodString>;
559
717
  supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
560
718
  }, import("zod/v4/core").$loose>>>;
561
719
  }, import("zod/v4/core").$loose>>;
@@ -574,25 +732,35 @@ export declare const settingsRouter: {
574
732
  message: import("zod").ZodOptional<import("zod").ZodString>;
575
733
  models: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnknown>>;
576
734
  }, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
577
- oauthStart: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>, import("zod").ZodObject<{
735
+ oauthStart: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("zod").ZodObject<{
736
+ provider: import("zod").ZodOptional<import("zod").ZodString>;
737
+ }, import("zod/v4/core").$loose>, import("zod").ZodObject<{
578
738
  ok: import("zod").ZodOptional<import("zod").ZodBoolean>;
579
739
  status: import("zod").ZodOptional<import("zod").ZodString>;
580
740
  url: import("zod").ZodOptional<import("zod").ZodString>;
581
741
  verification_url: import("zod").ZodOptional<import("zod").ZodString>;
582
742
  user_code: import("zod").ZodOptional<import("zod").ZodString>;
583
743
  message: import("zod").ZodOptional<import("zod").ZodString>;
584
- error: import("zod").ZodOptional<import("zod").ZodString>;
744
+ error: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
585
745
  flow_id: import("zod").ZodOptional<import("zod").ZodString>;
746
+ provider: import("zod").ZodOptional<import("zod").ZodString>;
747
+ expires_in: import("zod").ZodOptional<import("zod").ZodNumber>;
748
+ interval: import("zod").ZodOptional<import("zod").ZodNumber>;
586
749
  }, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
587
- oauthCancel: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>, import("zod").ZodObject<{
750
+ oauthCancel: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("zod").ZodObject<{
751
+ flow_id: import("zod").ZodOptional<import("zod").ZodString>;
752
+ }, import("zod/v4/core").$loose>, import("zod").ZodObject<{
588
753
  ok: import("zod").ZodOptional<import("zod").ZodBoolean>;
589
754
  status: import("zod").ZodOptional<import("zod").ZodString>;
590
755
  url: import("zod").ZodOptional<import("zod").ZodString>;
591
756
  verification_url: import("zod").ZodOptional<import("zod").ZodString>;
592
757
  user_code: import("zod").ZodOptional<import("zod").ZodString>;
593
758
  message: import("zod").ZodOptional<import("zod").ZodString>;
594
- error: import("zod").ZodOptional<import("zod").ZodString>;
759
+ error: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
595
760
  flow_id: import("zod").ZodOptional<import("zod").ZodString>;
761
+ provider: import("zod").ZodOptional<import("zod").ZodString>;
762
+ expires_in: import("zod").ZodOptional<import("zod").ZodNumber>;
763
+ interval: import("zod").ZodOptional<import("zod").ZodNumber>;
596
764
  }, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
597
765
  oauthPoll: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<import("@orpc/server").MergedInitialContext<ApiContext & Record<never, never>, ApiContext & Record<never, never>, ApiContext>, ApiContext & Record<never, never> & Omit<ApiContext & Record<never, never>, "ctx">, import("@orpc/server").MergedCurrentContext<ApiContext, Record<never, never>>>, Omit<ApiContext, never> & Record<never, never>, import("zod").ZodObject<{
598
766
  flow_id: import("zod").ZodOptional<import("zod").ZodString>;
@@ -603,8 +771,11 @@ export declare const settingsRouter: {
603
771
  verification_url: import("zod").ZodOptional<import("zod").ZodString>;
604
772
  user_code: import("zod").ZodOptional<import("zod").ZodString>;
605
773
  message: import("zod").ZodOptional<import("zod").ZodString>;
606
- error: import("zod").ZodOptional<import("zod").ZodString>;
774
+ error: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
607
775
  flow_id: import("zod").ZodOptional<import("zod").ZodString>;
776
+ provider: import("zod").ZodOptional<import("zod").ZodString>;
777
+ expires_in: import("zod").ZodOptional<import("zod").ZodNumber>;
778
+ interval: import("zod").ZodOptional<import("zod").ZodNumber>;
608
779
  }, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
609
780
  };
610
781
  };
@@ -7,18 +7,19 @@ import { HttpError } from './router.js';
7
7
  import { requestSessionIdGuard } from './session-visibility.js';
8
8
  import { activeProfileName, buildProfileCookie, ensureTrustedAuthSession, sessionCanManageServer } from '../auth/gate.js';
9
9
  import { forwardedClientIp, isLoopback, rawPeerIsTrustedProxy } from '../http/origin.js';
10
- import { isNonGlobalAddress } from '../http/addresses.js';
11
- import { isIP } from 'node:net';
10
+ import { isPrivateLan } from '../http/addresses.js';
12
11
  import { HttpFailure } from '../sessions/service.js';
12
+ import { SidecarError } from '../sidecar/client.js';
13
13
  import { SessionNotFound } from '../sessions/store.js';
14
- import { canonicaliseProviderId, ConfigUnavailable, maxTokensStatus, personalityPrompt, personalityRows, reasoningStatus, setAuxiliaryModel, setDefaultModel, setMaxTokens, validReasoningEffort } from '../config/agent-config.js';
14
+ import { auxiliaryModels, canonicaliseProviderId, ConfigUnavailable, maxTokensStatus, personalityPrompt, personalityRows, reasoningStatus, setAuxiliaryModel, setDefaultModel, setMaxTokens, validReasoningEffort } from '../config/agent-config.js';
15
15
  import { ProfileError, validateProfileName } from '../profiles/profiles.js';
16
16
  import { OnboardingError } from '../onboarding.js';
17
17
  import { writeEnvFile } from '../providers/env-file.js';
18
- import { displayName, providerEnvVar } from '../providers/catalog.js';
19
- import { OAUTH_PROVIDERS } from '../providers/tables.js';
20
- import { SETTINGS_SPEECH_KEYS, pyBool } from '../settings.js';
18
+ import { displayName, providerEnvVar, stampAuxiliarySelections } from '../providers/catalog.js';
19
+ import { OAUTH_PROVIDERS, SUPPORTED_PROVIDER_SETUPS } from '../providers/tables.js';
20
+ import { displayBotName, SETTINGS_SPEECH_KEYS, pyBool } from '../settings.js';
21
21
  import { str } from '../util.js';
22
+ import { checkExternalLink, linkPreferences } from '../links.js';
22
23
  const os = implement(settingsContract).$context().use(requestSessionIdGuard);
23
24
  function failure(error) {
24
25
  if (error instanceof HttpError)
@@ -43,14 +44,11 @@ async function run(fn) {
43
44
  }
44
45
  }
45
46
  const home = (ctx) => ctx.deps.profileHome(activeProfileName(ctx));
47
+ /** The active profile's auxiliary slots, stamped against the same catalog `/api/models` answers. */
48
+ const auxiliaryState = async (ctx) => stampAuxiliarySelections(auxiliaryModels(await ctx.deps.agentConfig.read(home(ctx))), await ctx.deps.catalog.models(home(ctx)));
46
49
  const truthy = (v) => ['1', 'true', 'yes', 'on'].includes((v ?? '').trim().toLowerCase());
47
- /** Python `addr.is_loopback or addr.is_private` (`ipaddress` treats every non-global range as private). */
48
- function ipIsLoopbackOrPrivate(addr) {
49
- const ip = addr.trim();
50
- if (!isIP(ip))
51
- return false;
52
- return isLoopback(ip) || isNonGlobalAddress(ip);
53
- }
50
+ /** Python `addr.is_loopback or addr.is_private`: CGNAT/Tailscale `100.64.0.0/10` peers are remote. */
51
+ const ipIsLoopbackOrPrivate = (addr) => isLoopback(addr.trim()) || isPrivateLan(addr);
54
52
  /** Python `_onboarding_request_is_local`: forwarded headers count only behind a trusted proxy with the opt-in. */
55
53
  export function onboardingRequestIsLocal(ctx) {
56
54
  const env = ctx.deps.config.env;
@@ -120,8 +118,11 @@ async function saveSettings(ctx, input) {
120
118
  const body = { ...input };
121
119
  if (['auto_apply_updates', 'update_channel', 'agent_update_channel', 'check_for_updates'].some((key) => key in body) && !(await canManageServer(ctx)))
122
120
  throw new HttpError(403, 'An owner session is required to manage updates');
121
+ // Link safety applies to every user of this server, so only an owner may relax it.
122
+ if (['confirm_external_links', 'trusted_link_hosts'].some((key) => key in body) && !(await canManageServer(ctx)))
123
+ throw new HttpError(403, 'An owner session is required to manage link safety');
123
124
  if ('bot_name' in body)
124
- body.bot_name = str(body.bot_name).trim() || 'Hermes';
125
+ body.bot_name = displayBotName(body.bot_name);
125
126
  const authEnabledBefore = await auth.isAuthEnabled();
126
127
  const passwordAuthBefore = authEnabledBefore && (await auth.getPasswordHash()) !== null;
127
128
  const cookie = ctx.authCookie();
@@ -203,11 +204,37 @@ const effortsResolver = (ctx) => async (model, provider) => {
203
204
  return [];
204
205
  }
205
206
  };
206
- const OAUTH_UNAVAILABLE = 'Browser OAuth onboarding is not available in this release. Run `hermes auth` in a terminal, then reload.';
207
+ const OAUTH_GATE_DENIED = 'Onboarding OAuth is only available from local networks when auth is not enabled. To bypass this on a remote server, set HERMES_WEBUI_ONBOARDING_OPEN=1.';
208
+ /** TAL-398: a device-code sign-in runs in the Agent sidecar, which writes the credential to the profile's own auth store. Callers check the onboarding gate first. */
209
+ async function oauthCall(ctx, method, params) {
210
+ const sidecar = ctx.deps.sidecar();
211
+ if (!sidecar)
212
+ throw new HttpError(503, 'Provider sign-in needs the Agent sidecar, which is not running.', { condition: 'sidecar_unavailable' });
213
+ try {
214
+ return await sidecar.call(method, params);
215
+ }
216
+ catch (error) {
217
+ if (!(error instanceof SidecarError))
218
+ throw error;
219
+ const status = { sidecar_unavailable: 503, oauth_flow_not_found: 404, oauth_unsupported: 409, oauth_superseded: 409, invalid_params: 400 }[error.condition] ?? (error.code === -32602 ? 400 : 502);
220
+ throw new HttpError(status, error.message, { condition: error.condition });
221
+ }
222
+ }
223
+ /** One flow's state as the onboarding view renders it: `ok` is false for every ending without a credential. */
224
+ function oauthView(flow) {
225
+ return { ok: flow.status === 'pending' || flow.status === 'approved', flow_id: flow.flow_id, provider: flow.provider, status: flow.status, error: flow.error };
226
+ }
227
+ function oauthFlowId(raw) {
228
+ const flowId = str(raw).trim();
229
+ if (!flowId)
230
+ throw new HttpError(400, 'flow_id is required');
231
+ return flowId;
232
+ }
207
233
  export const settingsRouter = os.router({
208
234
  settings: {
209
235
  get: os.settings.get.handler(({ context: { ctx } }) => run(() => settingsPayload(ctx))),
210
236
  save: os.settings.save.handler(({ input, context: { ctx } }) => run(() => saveSettings(ctx, input))),
237
+ linkCheck: os.settings.linkCheck.handler(({ input, context: { ctx } }) => checkExternalLink(input.url, linkPreferences(ctx.deps.settings.load()))),
211
238
  },
212
239
  profiles: {
213
240
  list: os.profiles.list.handler(({ context: { ctx } }) => run(async () => ({ profiles: await ctx.deps.profiles.list(activeProfileName(ctx)), active: activeProfileName(ctx), single_profile_mode: ctx.deps.isolatedProfileMode() }))),
@@ -284,17 +311,19 @@ export const settingsRouter = os.router({
284
311
  ctx.deps.agentConfig.invalidate(home(ctx));
285
312
  return { ok: true, provider, models: await ctx.deps.catalog.models(home(ctx)) };
286
313
  })),
287
- auxiliary: os.models.auxiliary.handler(({ context: { ctx } }) => run(async () => {
288
- const { auxiliaryModels } = await import('../config/agent-config.js');
289
- return auxiliaryModels(await ctx.deps.agentConfig.read(home(ctx)));
290
- })),
314
+ auxiliary: os.models.auxiliary.handler(({ context: { ctx } }) => run(() => auxiliaryState(ctx))),
291
315
  set: os.models.set.handler(({ input, context: { ctx } }) => run(async () => {
292
316
  const scope = str(input.scope).trim();
293
317
  const provider = str(input.provider).trim() || 'auto';
294
318
  const model = str(input.model).trim();
295
319
  try {
296
- if (scope === 'auxiliary')
297
- return await setAuxiliaryModel(ctx.deps.agentConfig, home(ctx), str(input.task).trim(), provider, model, input.advanced);
320
+ if (scope === 'auxiliary') {
321
+ const saved = await setAuxiliaryModel(ctx.deps.agentConfig, home(ctx), str(input.task).trim(), provider, model, input.advanced);
322
+ ctx.deps.catalog.invalidate();
323
+ // The write is saved; a catalog failure only drops the refreshed state, and clients then reread it.
324
+ const auxiliary = await auxiliaryState(ctx).catch(() => undefined);
325
+ return { ...saved, ...(auxiliary ? { auxiliary: auxiliary } : {}) };
326
+ }
298
327
  if (scope === 'main')
299
328
  return await setDefaultModel(ctx.deps.agentConfig, home(ctx), model, provider === 'auto' ? null : provider, input.advanced);
300
329
  }
@@ -442,13 +471,33 @@ export const settingsRouter = os.router({
442
471
  throw new HttpError(500, `probe failed: ${str(error.message)}`);
443
472
  }
444
473
  })),
445
- oauthStart: os.onboarding.oauthStart.handler(({ context: { ctx } }) => run(async () => {
474
+ oauthStart: os.onboarding.oauthStart.handler(({ input, context: { ctx } }) => run(async () => {
446
475
  if (!(await onboardingGateAllows(ctx)))
447
- throw new HttpError(403, 'Onboarding OAuth is only available from local networks when auth is not enabled. To bypass this on a remote server, set HERMES_WEBUI_ONBOARDING_OPEN=1.');
448
- throw new HttpError(501, OAUTH_UNAVAILABLE);
476
+ throw new HttpError(403, OAUTH_GATE_DENIED);
477
+ const provider = str(input.provider).trim().toLowerCase();
478
+ if (!provider)
479
+ throw new HttpError(400, 'provider is required');
480
+ if (SUPPORTED_PROVIDER_SETUPS[provider]?.oauth_flow !== 'device_code')
481
+ throw new HttpError(400, `'${displayName(provider)}' does not sign in with a device code here. Run \`hermes auth\` in a terminal for it.`);
482
+ const flow = await oauthCall(ctx, 'oauth.start', { profile_home: home(ctx), provider });
483
+ return { ok: true, flow_id: flow.flow_id, provider: flow.provider, status: flow.status, user_code: flow.user_code, verification_url: flow.verification_url, url: flow.verification_url, expires_in: flow.expires_in, interval: flow.interval };
484
+ })),
485
+ oauthCancel: os.onboarding.oauthCancel.handler(({ input, context: { ctx } }) => run(async () => {
486
+ if (!(await onboardingGateAllows(ctx)))
487
+ throw new HttpError(403, OAUTH_GATE_DENIED);
488
+ const flow = await oauthCall(ctx, 'oauth.cancel', { profile_home: home(ctx), flow_id: oauthFlowId(input.flow_id) });
489
+ // The cancel answer is about the request: a flow that had already ended keeps its own ending.
490
+ return { ...oauthView(flow), ok: flow.status === 'cancelled' };
491
+ })),
492
+ oauthPoll: os.onboarding.oauthPoll.handler(({ input, context: { ctx } }) => run(async () => {
493
+ if (!(await onboardingGateAllows(ctx)))
494
+ throw new HttpError(403, OAUTH_GATE_DENIED);
495
+ const flow = await oauthCall(ctx, 'oauth.poll', { profile_home: home(ctx), flow_id: oauthFlowId(input.flow_id) });
496
+ // A new credential changes which providers and models the catalog lists.
497
+ if (flow.status === 'approved')
498
+ ctx.deps.catalog.invalidate();
499
+ return oauthView(flow);
449
500
  })),
450
- oauthCancel: os.onboarding.oauthCancel.handler(() => run(() => { throw new HttpError(501, OAUTH_UNAVAILABLE); })),
451
- oauthPoll: os.onboarding.oauthPoll.handler(() => run(() => { throw new HttpError(501, OAUTH_UNAVAILABLE); })),
452
501
  },
453
502
  });
454
503
  /** Python `set_provider_key`: `.env` write; `null` removes the key. */