@maudecode/talaria-web 1.15.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.
- package/_release.json +4 -4
- package/dist/api/automation-router.d.ts +21 -7
- package/dist/api/automation-router.js +3 -0
- package/dist/api/automation-router.js.map +1 -1
- package/dist/api/chat-router.d.ts +142 -6
- package/dist/api/chat-router.js +11 -5
- package/dist/api/chat-router.js.map +1 -1
- package/dist/api/git-router.js +44 -32
- package/dist/api/git-router.js.map +1 -1
- package/dist/api/raw-routes.js +5 -58
- package/dist/api/raw-routes.js.map +1 -1
- package/dist/api/router.d.ts +4 -2
- package/dist/api/router.js +8 -8
- package/dist/api/router.js.map +1 -1
- package/dist/api/sessions-router.d.ts +714 -42
- package/dist/api/sessions-router.js +57 -23
- package/dist/api/sessions-router.js.map +1 -1
- package/dist/api/settings-router.d.ts +153 -9
- package/dist/api/settings-router.js +61 -16
- package/dist/api/settings-router.js.map +1 -1
- package/dist/api/sse-routes.js +1 -1
- package/dist/api/sse-routes.js.map +1 -1
- package/dist/api/tools-router.d.ts +13 -1
- package/dist/api/tools-router.js +10 -8
- package/dist/api/tools-router.js.map +1 -1
- package/dist/app.d.ts +1047 -67
- package/dist/auth/gate.js +8 -4
- package/dist/auth/gate.js.map +1 -1
- package/dist/auth/oidc.d.ts +6 -2
- package/dist/auth/oidc.js +16 -11
- package/dist/auth/oidc.js.map +1 -1
- package/dist/auth/store.d.ts +14 -2
- package/dist/auth/store.js +26 -1
- package/dist/auth/store.js.map +1 -1
- package/dist/cli/dotenv.d.ts +1 -1
- package/dist/cli/dotenv.js +36 -3
- package/dist/cli/dotenv.js.map +1 -1
- package/dist/http/addresses.d.ts +6 -0
- package/dist/http/addresses.js +26 -0
- package/dist/http/addresses.js.map +1 -1
- package/dist/http/context.d.ts +3 -3
- package/dist/links.d.ts +26 -0
- package/dist/links.js +60 -0
- package/dist/links.js.map +1 -0
- package/dist/onboarding.js +26 -7
- package/dist/onboarding.js.map +1 -1
- package/dist/profiles/profiles.js +1 -1
- package/dist/profiles/profiles.js.map +1 -1
- package/dist/providers/catalog.d.ts +74 -1
- package/dist/providers/catalog.js +248 -42
- package/dist/providers/catalog.js.map +1 -1
- package/dist/providers/tables.d.ts +3 -1
- package/dist/providers/tables.js +9 -4
- package/dist/providers/tables.js.map +1 -1
- package/dist/redact.js +493 -13
- package/dist/redact.js.map +1 -1
- package/dist/runtime.js +52 -28
- package/dist/runtime.js.map +1 -1
- package/dist/sessions/anchor.d.ts +22 -3
- package/dist/sessions/anchor.js +87 -42
- package/dist/sessions/anchor.js.map +1 -1
- package/dist/sessions/background-tasks.d.ts +4 -1
- package/dist/sessions/background-tasks.js +7 -4
- package/dist/sessions/background-tasks.js.map +1 -1
- package/dist/sessions/completions.js +1 -1
- package/dist/sessions/completions.js.map +1 -1
- package/dist/sessions/list.d.ts +8 -4
- package/dist/sessions/list.js +24 -17
- package/dist/sessions/list.js.map +1 -1
- package/dist/sessions/merge.d.ts +70 -7
- package/dist/sessions/merge.js +331 -23
- package/dist/sessions/merge.js.map +1 -1
- package/dist/sessions/pending.d.ts +5 -0
- package/dist/sessions/pending.js +30 -10
- package/dist/sessions/pending.js.map +1 -1
- package/dist/sessions/service.d.ts +57 -3
- package/dist/sessions/service.js +327 -56
- package/dist/sessions/service.js.map +1 -1
- package/dist/sessions/session.d.ts +6 -1
- package/dist/sessions/session.js +6 -0
- package/dist/sessions/session.js.map +1 -1
- package/dist/sessions/shares.js +11 -2
- package/dist/sessions/shares.js.map +1 -1
- package/dist/sessions/store.js +1 -1
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/turn.d.ts +19 -1
- package/dist/sessions/turn.js +218 -113
- package/dist/sessions/turn.js.map +1 -1
- package/dist/settings.js +9 -0
- package/dist/settings.js.map +1 -1
- package/dist/sidecar/fake.js +2 -0
- package/dist/sidecar/fake.js.map +1 -1
- package/dist/tools/commands.d.ts +15 -0
- package/dist/tools/commands.js +52 -0
- package/dist/tools/commands.js.map +1 -0
- package/dist/tools/crons.d.ts +4 -1
- package/dist/tools/crons.js +58 -11
- package/dist/tools/crons.js.map +1 -1
- package/dist/tools/mcp.js +5 -1
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/update-notifications.d.ts +1 -1
- package/dist/tools/update-notifications.js +1 -1
- package/dist/tools/update-notifications.js.map +1 -1
- package/dist/tools/updates.d.ts +8 -3
- package/dist/tools/updates.js +133 -34
- package/dist/tools/updates.js.map +1 -1
- package/dist/workspace/git.d.ts +57 -10
- package/dist/workspace/git.js +302 -195
- package/dist/workspace/git.js.map +1 -1
- package/dist/workspace/media-refs.d.ts +13 -0
- package/dist/workspace/media-refs.js +165 -0
- package/dist/workspace/media-refs.js.map +1 -0
- package/dist/workspace/media.d.ts +19 -0
- package/dist/workspace/media.js +61 -2
- package/dist/workspace/media.js.map +1 -1
- package/dist/workspace/workspaces.d.ts +7 -1
- package/dist/workspace/workspaces.js +30 -21
- package/dist/workspace/workspaces.js.map +1 -1
- package/dist/workspace/worktrees.d.ts +2 -4
- package/dist/workspace/worktrees.js +28 -33
- package/dist/workspace/worktrees.js.map +1 -1
- package/package.json +4 -2
- package/sidecar/scripts/replay_sidecar.py +3 -1
- package/sidecar/talaria_sidecar/__init__.py +1 -1
- package/sidecar/talaria_sidecar/home.py +59 -2
- package/sidecar/talaria_sidecar/methods/__init__.py +2 -2
- package/sidecar/talaria_sidecar/methods/aux.py +19 -3
- package/sidecar/talaria_sidecar/methods/chat.py +129 -23
- package/sidecar/talaria_sidecar/methods/commands.py +46 -31
- package/sidecar/talaria_sidecar/methods/config.py +14 -10
- package/sidecar/talaria_sidecar/methods/oauth.py +439 -0
- package/sidecar/talaria_sidecar/methods/profiles.py +5 -4
- package/sidecar/talaria_sidecar/methods/providers.py +161 -1
- package/sidecar/talaria_sidecar/methods/runtime.py +2 -0
- package/sidecar/talaria_sidecar/methods/text.py +1 -20
- package/sidecar/talaria_sidecar/methods/usage.py +7 -1
- package/static/dist/FILES.txt +124 -120
- package/static/dist/assets/AppShell-ef3bhu32.js +1 -0
- package/static/dist/assets/Button-nx37f4u1.js +1 -0
- package/static/dist/assets/ChatPage-cdcpykcg.js +25 -0
- package/static/dist/assets/Dialog-mec42hvb.js +1 -0
- package/static/dist/assets/HubRoute-ecb65zpr.js +2 -0
- package/static/dist/assets/{Markdown-dy8t4dy7.js → Markdown-jqrx5es0.js} +125 -125
- package/static/dist/assets/RightPanel-d1lgvk4s.js +1 -0
- package/static/dist/assets/Select-h4ivl9qf.js +1 -0
- package/static/dist/assets/SessionListPanel-ewib046b.js +1 -0
- package/static/dist/assets/SettingsLayout-lx654cup.js +1 -0
- package/static/dist/assets/States-ehsb6lzo.js +1 -0
- package/static/dist/assets/Toaster-mch1pa3t.js +1 -0
- package/static/dist/assets/_app-m8d961ef.js +1 -0
- package/static/dist/assets/_app.ext._extensionId-mp33hbzi.js +1 -0
- package/static/dist/assets/_app.index-dk6zp7e0.js +1 -0
- package/static/dist/assets/_app.insights-jt2fk4i1.js +1 -0
- package/static/dist/assets/_app.kanban-if4pubeu.js +1 -0
- package/static/dist/assets/_app.logs-mfaw9m6g.js +1 -0
- package/static/dist/assets/_app.memory-h3eaarb6.js +1 -0
- package/static/dist/assets/_app.profiles-ienktovs.js +1 -0
- package/static/dist/assets/{_app.session._sessionId-gyoh5ylx.js → _app.session._sessionId-hh27wwu2.js} +1 -1
- package/static/dist/assets/_app.settings-dpoe0bzf.js +1 -0
- package/static/dist/assets/_app.settings._section-l468ynag.js +3 -0
- package/static/dist/assets/_app.skills-kcbncc8i.js +1 -0
- package/static/dist/assets/_app.tasks-occdrqhw.js +2 -0
- package/static/dist/assets/_app.todos-nnke2rcc.js +1 -0
- package/static/dist/assets/_app.workspaces-cdlatvwj.js +1 -0
- package/static/dist/assets/{abnfDiagram-VCTEODGH-cjqletra.js → abnfDiagram-VCTEODGH-oity9y4o.js} +1 -1
- package/static/dist/assets/architecture-7GRP2DOG-hj11333z.js +1 -0
- package/static/dist/assets/architectureDiagram-5GKGNRK7-ceaepnyr.js +36 -0
- package/static/dist/assets/{back-e4m6nsnm.js → back-eu64w89w.js} +1 -1
- package/static/dist/assets/{blockDiagram-I7D4REHJ-b195z021.js → blockDiagram-I7D4REHJ-n79st4pj.js} +1 -1
- package/static/dist/assets/{c4Diagram-7LVT6UL2-olu212k1.js → c4Diagram-7LVT6UL2-mi73akzk.js} +1 -1
- package/static/dist/assets/cancel-mzvkdjg8.js +1 -0
- package/static/dist/assets/channel-mbvmf2vv.js +1 -0
- package/static/dist/assets/{chunk-4HAMMTFA-b8o1nufs.js → chunk-4HAMMTFA-laat0g1q.js} +1 -1
- package/static/dist/assets/{chunk-75Z2AOVW-l1seddto.js → chunk-75Z2AOVW-0psy1tr2.js} +1 -1
- package/static/dist/assets/{chunk-DU6HZSFF-lo5zg15v.js → chunk-DU6HZSFF-lw8uox8x.js} +3 -3
- package/static/dist/assets/{chunk-F27PBJKO-dsdzrp16.js → chunk-F27PBJKO-erassib3.js} +1 -1
- package/static/dist/assets/{chunk-GMAD6QVW-f3fxqq8b.js → chunk-GMAD6QVW-fz7rx619.js} +1 -1
- package/static/dist/assets/{chunk-GVQU2GXP-h8egxtf6.js → chunk-GVQU2GXP-gdb0epb2.js} +1 -1
- package/static/dist/assets/{chunk-IMKFNOWR-iolwd8s0.js → chunk-IMKFNOWR-ea8t26qw.js} +1 -1
- package/static/dist/assets/{chunk-L3NEJ4N5-b88bbtwi.js → chunk-L3NEJ4N5-mb1gu9kz.js} +1 -1
- package/static/dist/assets/{chunk-OSK3NFVY-e3e7nr6s.js → chunk-OSK3NFVY-eovmccvy.js} +1 -1
- package/static/dist/assets/{chunk-P2QGCYS3-mdc46rt1.js → chunk-P2QGCYS3-bo55zjo5.js} +1 -1
- package/static/dist/assets/{chunk-POPQ4Y6H-kqlllrrm.js → chunk-POPQ4Y6H-ja7ohe4h.js} +1 -1
- package/static/dist/assets/{chunk-PWAF6VOD-he585k2x.js → chunk-PWAF6VOD-e30g9nus.js} +1 -1
- package/static/dist/assets/{chunk-SHT3W25Y-gh94y9a4.js → chunk-SHT3W25Y-gbb798f7.js} +3 -3
- package/static/dist/assets/{chunk-SVP7TREG-euxp9y7e.js → chunk-SVP7TREG-h2iw8urm.js} +1 -1
- package/static/dist/assets/{chunk-TICWLB2K-c8cxes1q.js → chunk-TICWLB2K-fd2cottz.js} +1 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-o8r05k0n.js +1 -0
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-o8r05k0n.js +1 -0
- package/static/dist/assets/{copied-kq0u3ht7.js → copied-h65fc3cx.js} +1 -1
- package/static/dist/assets/copy-e6977uwq.js +1 -0
- package/static/dist/assets/{cynefin-OW5HDTMX-lxd44ux4.js → cynefin-OW5HDTMX-lbltyl5j.js} +1 -1
- package/static/dist/assets/{cynefinDiagram-5FMLGOSQ-njpiwat8.js → cynefinDiagram-5FMLGOSQ-lxhsqq4a.js} +1 -1
- package/static/dist/assets/{dagre-GXQ25YYZ-nvgy6yju.js → dagre-GXQ25YYZ-gn4nnaln.js} +4 -4
- package/static/dist/assets/{diagram-S7CK7UJ4-g98nyv72.js → diagram-S7CK7UJ4-pa3ij6q7.js} +3 -3
- package/static/dist/assets/{diagram-UQ7AKVKN-ovgm6lvv.js → diagram-UQ7AKVKN-zbipyz57.js} +1 -1
- package/static/dist/assets/{diagram-VSXAHHWV-pb2bn2e4.js → diagram-VSXAHHWV-d1kbpzgf.js} +1 -1
- package/static/dist/assets/{diagram-VX7I27RA-6j4mvfqo.js → diagram-VX7I27RA-i3ty14xl.js} +1 -1
- package/static/dist/assets/{diagram-Z3DM3KII-dqmb982r.js → diagram-Z3DM3KII-m8xefqa7.js} +1 -1
- package/static/dist/assets/{ebnfDiagram-PWID7BFC-ozbpzb6d.js → ebnfDiagram-PWID7BFC-nz7wj05l.js} +1 -1
- package/static/dist/assets/endpoints-k7yf25m0.js +64 -0
- package/static/dist/assets/{erDiagram-RLTQ6QDP-hl7m8vua.js → erDiagram-RLTQ6QDP-fa41ib83.js} +1 -1
- package/static/dist/assets/eventmodeling-NTZA5JFV-kpbq09bx.js +1 -0
- package/static/dist/assets/flowDiagram-HODETNUW-lcz0kx14.js +1 -0
- package/static/dist/assets/{ganttDiagram-EL5Y4UJY-ompixqmh.js → ganttDiagram-EL5Y4UJY-n7zq01qu.js} +1 -1
- package/static/dist/assets/{gitGraph-4MIJSDKK-b6vxwp9q.js → gitGraph-4MIJSDKK-c89emb07.js} +1 -1
- package/static/dist/assets/{gitGraphDiagram-WWUBYQGX-k98f57on.js → gitGraphDiagram-WWUBYQGX-cz7cgr6w.js} +1 -1
- package/static/dist/assets/{highlighted-body-KPVGNVTW-cd3ff6ge.js → highlighted-body-KPVGNVTW-d9bapmni.js} +1 -1
- package/static/dist/assets/{index-nqed3oum.js → index-h00usru2.js} +3 -3
- package/static/dist/assets/index-n73ijkv2.css +2 -0
- package/static/dist/assets/{info-A6RAGUB7-hjcwjami.js → info-A6RAGUB7-ndddhhhh.js} +1 -1
- package/static/dist/assets/infoDiagram-27XIBGKW-ccxigcpf.js +2 -0
- package/static/dist/assets/{ishikawaDiagram-5VMMS53U-bxak4mwu.js → ishikawaDiagram-5VMMS53U-le0z9vtc.js} +1 -1
- package/static/dist/assets/{journeyDiagram-3NMN7TZE-khmihclr.js → journeyDiagram-3NMN7TZE-ivsmb26o.js} +1 -1
- package/static/dist/assets/{kanban-definition-UXKFOSKX-h1r32wdx.js → kanban-definition-UXKFOSKX-h6n2awt0.js} +1 -1
- package/static/dist/assets/lazyRouteComponent-m1rtyk4t.js +1 -0
- package/static/dist/assets/{line-friyjof3.js → line-dmzlfe0u.js} +1 -1
- package/static/dist/assets/link-budeg5t9.js +1 -0
- package/static/dist/assets/login-kjhasvp8.js +1 -0
- package/static/dist/assets/mermaid-HWGCJPDP-jb5d211j.js +1 -0
- package/static/dist/assets/{mermaid-parser.core-f1gvpwrt.js → mermaid-parser.core-gwyd5bnq.js} +3 -3
- package/static/dist/assets/{mindmap-definition-YA3MSWOX-mt2oxwue.js → mindmap-definition-YA3MSWOX-l68gg5h7.js} +1 -1
- package/static/dist/assets/onboarding-cdfrk0pj.js +1 -0
- package/static/dist/assets/{packet-AYTQ26CC-jik4ixlf.js → packet-AYTQ26CC-gpv06065.js} +1 -1
- package/static/dist/assets/{pegDiagram-XKGWAZYB-erxlv6cc.js → pegDiagram-XKGWAZYB-e52vs23u.js} +1 -1
- package/static/dist/assets/{pie-WAS4IAKB-mnkoldfl.js → pie-WAS4IAKB-l6m7nz5s.js} +1 -1
- package/static/dist/assets/{pieDiagram-E7YTZNPT-i7lwrada.js → pieDiagram-E7YTZNPT-b4is36bq.js} +3 -3
- package/static/dist/assets/{quadrantDiagram-AXDQQJYC-fr8ejdoy.js → quadrantDiagram-AXDQQJYC-m8vt2788.js} +1 -1
- package/static/dist/assets/{radar-RG4KPBEZ-otarjte2.js → radar-RG4KPBEZ-nxbrhiov.js} +1 -1
- package/static/dist/assets/{railroad-74A4TZTK-lw362oto.js → railroad-74A4TZTK-222mu9hi.js} +1 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-kdvgl6x8.js +1 -0
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-itiqslby.js +1 -0
- package/static/dist/assets/railroad-peg-WCYAUIDC-go7kov78.js +1 -0
- package/static/dist/assets/{railroadDiagram-O6MQD6OU-esyn75pw.js → railroadDiagram-O6MQD6OU-o8lldfzv.js} +1 -1
- package/static/dist/assets/{refresh-cw-k66keho6.js → refresh-cw-kbcje1uy.js} +1 -1
- package/static/dist/assets/{requirementDiagram-BXWQKSXE-cyhi5u29.js → requirementDiagram-BXWQKSXE-ovyq38kv.js} +1 -1
- package/static/dist/assets/{sankeyDiagram-P5KCCOFB-jljpbo0h.js → sankeyDiagram-P5KCCOFB-ou7lznor.js} +1 -1
- package/static/dist/assets/{saved-do49si3v.js → saved-bazmcup9.js} +1 -1
- package/static/dist/assets/search-jen74z4u.js +1 -0
- package/static/dist/assets/{sequenceDiagram-WJ2MYXX4-fz0dhlu7.js → sequenceDiagram-WJ2MYXX4-ovckdzf2.js} +1 -1
- package/static/dist/assets/{settings_section_extensions_title-b7lojn0o.js → settings_section_extensions_title-ertwwhlx.js} +1 -1
- package/static/dist/assets/share._token-dan9hgvj.js +2 -0
- package/static/dist/assets/{sliders-horizontal-c4wya4dy.js → sliders-horizontal-f9cb3lh3.js} +1 -1
- package/static/dist/assets/{stateDiagram-D77RDMKH-kdnithdx.js → stateDiagram-D77RDMKH-fcrexkkv.js} +1 -1
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-lcfraua2.js +1 -0
- package/static/dist/assets/{swimlanes-42K2YHIH-esd6gmz3.js → swimlanes-42K2YHIH-f7usu8fw.js} +1 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-ogmanni0.js +8 -0
- package/static/dist/assets/{timeline-definition-24CTP7MA-g0qygccv.js → timeline-definition-24CTP7MA-gp1hvz9f.js} +1 -1
- package/static/dist/assets/todoStore-eqtid4r4.js +1 -0
- package/static/dist/assets/{treeView-Q6P3EWNA-ndchzkuu.js → treeView-Q6P3EWNA-gb9gf11u.js} +1 -1
- package/static/dist/assets/{treemap-WGGIJYW6-hwjxj0zz.js → treemap-WGGIJYW6-nuvfnvvi.js} +1 -1
- package/static/dist/assets/{untitled-mbr6tuhu.js → untitled-htelhc68.js} +1 -1
- package/static/dist/assets/useForm-h2t0u14e.js +1 -0
- package/static/dist/assets/useLocale-hcsb84pj.js +1 -0
- package/static/dist/assets/useNavigate-nwy70ztj.js +1 -0
- package/static/dist/assets/{useParams-lo9u33d1.js → useParams-dqd64jv7.js} +1 -1
- package/static/dist/assets/{useSearch-lq1mr090.js → useSearch-j30pvsy7.js} +1 -1
- package/static/dist/assets/{vennDiagram-4TSXK5OY-gubovd1r.js → vennDiagram-4TSXK5OY-fzchbzaj.js} +1 -1
- package/static/dist/assets/{wardley-WFR3VGLG-ir3om65j.js → wardley-WFR3VGLG-m47mhfbh.js} +1 -1
- package/static/dist/assets/{wardleyDiagram-VM6X3IG4-ce0or1ie.js → wardleyDiagram-VM6X3IG4-odg6ct1z.js} +2 -2
- package/static/dist/assets/{xychartDiagram-S5SC5T6Z-dexylcjg.js → xychartDiagram-S5SC5T6Z-mrhms5um.js} +1 -1
- package/static/dist/index.html +1 -1
- package/static/dist/sw.js +1 -1
- package/static/dist/assets/AppShell-orat1s43.js +0 -1
- package/static/dist/assets/ChatPage-ojhka3hy.js +0 -22
- package/static/dist/assets/HubRoute-gxgw1t33.js +0 -2
- package/static/dist/assets/RightPanel-c66ani1s.js +0 -1
- package/static/dist/assets/Select-fswf66up.js +0 -1
- package/static/dist/assets/SessionListPanel-goh5mtt8.js +0 -1
- package/static/dist/assets/SettingsLayout-n5d4wq4m.js +0 -1
- package/static/dist/assets/States-kxyu50at.js +0 -1
- package/static/dist/assets/Toaster-6zmbcqgg.js +0 -1
- package/static/dist/assets/_app-fowyruiu.js +0 -1
- package/static/dist/assets/_app.ext._extensionId-nvjyrwhy.js +0 -1
- package/static/dist/assets/_app.index-c9zv4y7w.js +0 -1
- package/static/dist/assets/_app.insights-jf12nofo.js +0 -1
- package/static/dist/assets/_app.kanban-lri5a4yu.js +0 -1
- package/static/dist/assets/_app.logs-md1p0zqo.js +0 -1
- package/static/dist/assets/_app.memory-bzvf2e28.js +0 -1
- package/static/dist/assets/_app.profiles-jpg7zmbn.js +0 -1
- package/static/dist/assets/_app.settings-mpuwlx4j.js +0 -1
- package/static/dist/assets/_app.settings._section-knz8rwoj.js +0 -1
- package/static/dist/assets/_app.skills-fwu1dkir.js +0 -1
- package/static/dist/assets/_app.tasks-h9gphtl3.js +0 -2
- package/static/dist/assets/_app.todos-hd1dnvrh.js +0 -1
- package/static/dist/assets/_app.workspaces-l8toyn5f.js +0 -1
- package/static/dist/assets/architecture-7GRP2DOG-cavnusaw.js +0 -1
- package/static/dist/assets/architectureDiagram-5GKGNRK7-k5a7v36n.js +0 -36
- package/static/dist/assets/channel-gozy3dp3.js +0 -1
- package/static/dist/assets/classDiagram-ZZMXUADV-n0vs2f2q.js +0 -1
- package/static/dist/assets/classDiagram-v2-VYDZK3BY-n0vs2f2q.js +0 -1
- package/static/dist/assets/endpoints-k8agnro8.js +0 -9
- package/static/dist/assets/eventmodeling-NTZA5JFV-j1y2ekec.js +0 -1
- package/static/dist/assets/flowDiagram-HODETNUW-g2cvcbm5.js +0 -1
- package/static/dist/assets/index-nfy0ezs6.css +0 -2
- package/static/dist/assets/infoDiagram-27XIBGKW-fm06rj36.js +0 -2
- package/static/dist/assets/lazyRouteComponent-b2eg0fws.js +0 -1
- package/static/dist/assets/link-m90ahx3n.js +0 -1
- package/static/dist/assets/login-bw7m2fzo.js +0 -1
- package/static/dist/assets/mermaid-HWGCJPDP-njwcl62n.js +0 -1
- package/static/dist/assets/onboarding-ret37j1e.js +0 -1
- package/static/dist/assets/railroad-abnf-HS5TGJTU-m741owar.js +0 -1
- package/static/dist/assets/railroad-ebnf-LZEXJU2U-noa4fbia.js +0 -1
- package/static/dist/assets/railroad-peg-WCYAUIDC-o4bpw4nb.js +0 -1
- package/static/dist/assets/search-j5ki6a9o.js +0 -1
- package/static/dist/assets/share._token-kg8w647b.js +0 -2
- package/static/dist/assets/stateDiagram-v2-MP3YSRHH-k2wg2645.js +0 -1
- package/static/dist/assets/swimlanesDiagram-VR7AAH4N-n5kvjtgr.js +0 -8
- package/static/dist/assets/tabBuild-bjmyvmn5.js +0 -56
- package/static/dist/assets/todoStore-kjk5l0sy.js +0 -1
- package/static/dist/assets/useForm-ocxu460f.js +0 -1
- package/static/dist/assets/useLocale-fzy5jhg6.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>>;
|
|
@@ -331,6 +355,8 @@ export declare const settingsRouter: {
|
|
|
331
355
|
id: import("zod").ZodString;
|
|
332
356
|
label: import("zod").ZodOptional<import("zod").ZodString>;
|
|
333
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>;
|
|
334
360
|
supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
335
361
|
}, import("zod/v4/core").$loose>>>;
|
|
336
362
|
models_total: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
@@ -358,12 +384,64 @@ export declare const settingsRouter: {
|
|
|
358
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<{
|
|
359
385
|
provider: import("zod").ZodOptional<import("zod").ZodString>;
|
|
360
386
|
refresh: import("zod").ZodOptional<import("zod").ZodString>;
|
|
361
|
-
}, import("zod/v4/core").$strip>, import("zod").
|
|
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>>;
|
|
362
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<{
|
|
363
440
|
source: import("zod").ZodOptional<import("zod").ZodString>;
|
|
364
441
|
refresh: import("zod").ZodOptional<import("zod").ZodString>;
|
|
365
442
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
366
443
|
version: import("zod").ZodNumber;
|
|
444
|
+
computed_at: import("zod").ZodString;
|
|
367
445
|
scope_id: import("zod").ZodString;
|
|
368
446
|
profile_id: import("zod").ZodString;
|
|
369
447
|
active_provider: import("zod").ZodNullable<import("zod").ZodString>;
|
|
@@ -379,13 +457,44 @@ export declare const settingsRouter: {
|
|
|
379
457
|
message: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
|
|
380
458
|
is_active_provider: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
381
459
|
quota: import("zod").ZodOptional<import("zod").ZodUnknown>;
|
|
382
|
-
windows: import("zod").ZodOptional<import("zod").
|
|
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>>>;
|
|
383
489
|
balances: import("zod").ZodOptional<import("zod").ZodUnknown>;
|
|
384
490
|
plan: import("zod").ZodOptional<import("zod").ZodUnknown>;
|
|
385
491
|
details: import("zod").ZodOptional<import("zod").ZodUnknown>;
|
|
386
492
|
unavailable_reason: import("zod").ZodOptional<import("zod").ZodUnknown>;
|
|
387
493
|
retry_after: import("zod").ZodOptional<import("zod").ZodUnknown>;
|
|
388
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>>;
|
|
389
498
|
}, import("zod/v4/core").$loose>>;
|
|
390
499
|
}, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
|
|
391
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<{
|
|
@@ -458,6 +567,10 @@ export declare const settingsRouter: {
|
|
|
458
567
|
base_url: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
|
|
459
568
|
models: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnknown>>;
|
|
460
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>;
|
|
461
574
|
}, import("zod/v4/core").$loose>>>;
|
|
462
575
|
categories: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnknown>>;
|
|
463
576
|
current: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
@@ -484,7 +597,7 @@ export declare const settingsRouter: {
|
|
|
484
597
|
}, import("zod/v4/core").$loose>>;
|
|
485
598
|
workspaces: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
486
599
|
items: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
487
|
-
name: import("zod").
|
|
600
|
+
name: import("zod").ZodString;
|
|
488
601
|
path: import("zod").ZodString;
|
|
489
602
|
}, import("zod/v4/core").$loose>>>;
|
|
490
603
|
last: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
|
|
@@ -492,6 +605,9 @@ export declare const settingsRouter: {
|
|
|
492
605
|
models: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
493
606
|
active_provider: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
|
|
494
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>>;
|
|
495
611
|
groups: import("zod").ZodArray<import("zod").ZodObject<{
|
|
496
612
|
provider: import("zod").ZodString;
|
|
497
613
|
provider_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -499,12 +615,16 @@ export declare const settingsRouter: {
|
|
|
499
615
|
id: import("zod").ZodString;
|
|
500
616
|
label: import("zod").ZodOptional<import("zod").ZodString>;
|
|
501
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>;
|
|
502
620
|
supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
503
621
|
}, import("zod/v4/core").$loose>>;
|
|
504
622
|
extra_models: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
505
623
|
id: import("zod").ZodString;
|
|
506
624
|
label: import("zod").ZodOptional<import("zod").ZodString>;
|
|
507
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>;
|
|
508
628
|
supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
509
629
|
}, import("zod/v4/core").$loose>>>;
|
|
510
630
|
}, import("zod/v4/core").$loose>>;
|
|
@@ -536,6 +656,10 @@ export declare const settingsRouter: {
|
|
|
536
656
|
base_url: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
|
|
537
657
|
models: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnknown>>;
|
|
538
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>;
|
|
539
663
|
}, import("zod/v4/core").$loose>>>;
|
|
540
664
|
categories: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnknown>>;
|
|
541
665
|
current: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
@@ -562,7 +686,7 @@ export declare const settingsRouter: {
|
|
|
562
686
|
}, import("zod/v4/core").$loose>>;
|
|
563
687
|
workspaces: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
564
688
|
items: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
565
|
-
name: import("zod").
|
|
689
|
+
name: import("zod").ZodString;
|
|
566
690
|
path: import("zod").ZodString;
|
|
567
691
|
}, import("zod/v4/core").$loose>>>;
|
|
568
692
|
last: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
|
|
@@ -570,6 +694,9 @@ export declare const settingsRouter: {
|
|
|
570
694
|
models: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
571
695
|
active_provider: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
|
|
572
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>>;
|
|
573
700
|
groups: import("zod").ZodArray<import("zod").ZodObject<{
|
|
574
701
|
provider: import("zod").ZodString;
|
|
575
702
|
provider_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -577,12 +704,16 @@ export declare const settingsRouter: {
|
|
|
577
704
|
id: import("zod").ZodString;
|
|
578
705
|
label: import("zod").ZodOptional<import("zod").ZodString>;
|
|
579
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>;
|
|
580
709
|
supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
581
710
|
}, import("zod/v4/core").$loose>>;
|
|
582
711
|
extra_models: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
583
712
|
id: import("zod").ZodString;
|
|
584
713
|
label: import("zod").ZodOptional<import("zod").ZodString>;
|
|
585
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>;
|
|
586
717
|
supports_fast_tier: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
587
718
|
}, import("zod/v4/core").$loose>>>;
|
|
588
719
|
}, import("zod/v4/core").$loose>>;
|
|
@@ -601,25 +732,35 @@ export declare const settingsRouter: {
|
|
|
601
732
|
message: import("zod").ZodOptional<import("zod").ZodString>;
|
|
602
733
|
models: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnknown>>;
|
|
603
734
|
}, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
|
|
604
|
-
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").
|
|
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<{
|
|
605
738
|
ok: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
606
739
|
status: import("zod").ZodOptional<import("zod").ZodString>;
|
|
607
740
|
url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
608
741
|
verification_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
609
742
|
user_code: import("zod").ZodOptional<import("zod").ZodString>;
|
|
610
743
|
message: import("zod").ZodOptional<import("zod").ZodString>;
|
|
611
|
-
error: import("zod").ZodOptional<import("zod").ZodString
|
|
744
|
+
error: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
|
|
612
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>;
|
|
613
749
|
}, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
|
|
614
|
-
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").
|
|
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<{
|
|
615
753
|
ok: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
616
754
|
status: import("zod").ZodOptional<import("zod").ZodString>;
|
|
617
755
|
url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
618
756
|
verification_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
619
757
|
user_code: import("zod").ZodOptional<import("zod").ZodString>;
|
|
620
758
|
message: import("zod").ZodOptional<import("zod").ZodString>;
|
|
621
|
-
error: import("zod").ZodOptional<import("zod").ZodString
|
|
759
|
+
error: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
|
|
622
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>;
|
|
623
764
|
}, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
|
|
624
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<{
|
|
625
766
|
flow_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -630,8 +771,11 @@ export declare const settingsRouter: {
|
|
|
630
771
|
verification_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
631
772
|
user_code: import("zod").ZodOptional<import("zod").ZodString>;
|
|
632
773
|
message: import("zod").ZodOptional<import("zod").ZodString>;
|
|
633
|
-
error: import("zod").ZodOptional<import("zod").ZodString
|
|
774
|
+
error: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
|
|
634
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>;
|
|
635
779
|
}, import("zod/v4/core").$loose>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
|
|
636
780
|
};
|
|
637
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 {
|
|
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
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
18
|
import { displayName, providerEnvVar, stampAuxiliarySelections } from '../providers/catalog.js';
|
|
19
|
-
import { OAUTH_PROVIDERS } from '../providers/tables.js';
|
|
19
|
+
import { OAUTH_PROVIDERS, SUPPORTED_PROVIDER_SETUPS } from '../providers/tables.js';
|
|
20
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)
|
|
@@ -46,13 +47,8 @@ const home = (ctx) => ctx.deps.profileHome(activeProfileName(ctx));
|
|
|
46
47
|
/** The active profile's auxiliary slots, stamped against the same catalog `/api/models` answers. */
|
|
47
48
|
const auxiliaryState = async (ctx) => stampAuxiliarySelections(auxiliaryModels(await ctx.deps.agentConfig.read(home(ctx))), await ctx.deps.catalog.models(home(ctx)));
|
|
48
49
|
const truthy = (v) => ['1', 'true', 'yes', 'on'].includes((v ?? '').trim().toLowerCase());
|
|
49
|
-
/** Python `addr.is_loopback or addr.is_private
|
|
50
|
-
|
|
51
|
-
const ip = addr.trim();
|
|
52
|
-
if (!isIP(ip))
|
|
53
|
-
return false;
|
|
54
|
-
return isLoopback(ip) || isNonGlobalAddress(ip);
|
|
55
|
-
}
|
|
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);
|
|
56
52
|
/** Python `_onboarding_request_is_local`: forwarded headers count only behind a trusted proxy with the opt-in. */
|
|
57
53
|
export function onboardingRequestIsLocal(ctx) {
|
|
58
54
|
const env = ctx.deps.config.env;
|
|
@@ -122,6 +118,9 @@ async function saveSettings(ctx, input) {
|
|
|
122
118
|
const body = { ...input };
|
|
123
119
|
if (['auto_apply_updates', 'update_channel', 'agent_update_channel', 'check_for_updates'].some((key) => key in body) && !(await canManageServer(ctx)))
|
|
124
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');
|
|
125
124
|
if ('bot_name' in body)
|
|
126
125
|
body.bot_name = displayBotName(body.bot_name);
|
|
127
126
|
const authEnabledBefore = await auth.isAuthEnabled();
|
|
@@ -205,11 +204,37 @@ const effortsResolver = (ctx) => async (model, provider) => {
|
|
|
205
204
|
return [];
|
|
206
205
|
}
|
|
207
206
|
};
|
|
208
|
-
const
|
|
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
|
+
}
|
|
209
233
|
export const settingsRouter = os.router({
|
|
210
234
|
settings: {
|
|
211
235
|
get: os.settings.get.handler(({ context: { ctx } }) => run(() => settingsPayload(ctx))),
|
|
212
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()))),
|
|
213
238
|
},
|
|
214
239
|
profiles: {
|
|
215
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() }))),
|
|
@@ -446,13 +471,33 @@ export const settingsRouter = os.router({
|
|
|
446
471
|
throw new HttpError(500, `probe failed: ${str(error.message)}`);
|
|
447
472
|
}
|
|
448
473
|
})),
|
|
449
|
-
oauthStart: os.onboarding.oauthStart.handler(({ context: { ctx } }) => run(async () => {
|
|
474
|
+
oauthStart: os.onboarding.oauthStart.handler(({ input, context: { ctx } }) => run(async () => {
|
|
475
|
+
if (!(await onboardingGateAllows(ctx)))
|
|
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 () => {
|
|
450
493
|
if (!(await onboardingGateAllows(ctx)))
|
|
451
|
-
throw new HttpError(403,
|
|
452
|
-
|
|
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);
|
|
453
500
|
})),
|
|
454
|
-
oauthCancel: os.onboarding.oauthCancel.handler(() => run(() => { throw new HttpError(501, OAUTH_UNAVAILABLE); })),
|
|
455
|
-
oauthPoll: os.onboarding.oauthPoll.handler(() => run(() => { throw new HttpError(501, OAUTH_UNAVAILABLE); })),
|
|
456
501
|
},
|
|
457
502
|
});
|
|
458
503
|
/** Python `set_provider_key`: `.env` write; `null` removes the key. */
|