sliccy 6.87.3 → 6.89.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/node-server/hostfs.d.ts +58 -0
- package/dist/node-server/hostfs.js +257 -0
- package/dist/node-server/index.js +10 -0
- package/dist/node-server/runtime-flags.d.ts +22 -0
- package/dist/node-server/runtime-flags.js +78 -2
- package/dist/ui/.vite/manifest.json +540 -449
- package/dist/ui/assets/CLAUDE-4LHXSyPA.js +1 -0
- package/dist/ui/assets/CLAUDE-Bio4HPGK.js +1 -0
- package/dist/ui/assets/MEMORY-6FXnIBfJ.js +135 -0
- package/dist/ui/assets/SKILL-BKUxKc7f.js +296 -0
- package/dist/ui/assets/SKILL-BKyxMoME.js +1 -0
- package/dist/ui/assets/SKILL-BcELX5TL.js +1 -0
- package/dist/ui/assets/SKILL-Bd5ykLEh.js +1 -0
- package/dist/ui/assets/SKILL-Bt-RhG0L.js +1 -0
- package/dist/ui/assets/SKILL-CED8RXQP.js +69 -0
- package/dist/ui/assets/SKILL-CNdAIhbb.js +1 -0
- package/dist/ui/assets/SKILL-CcMg6eqt.js +1 -0
- package/dist/ui/assets/SKILL-Ch-cOl61.js +1 -0
- package/dist/ui/assets/SKILL-CkfptFag.js +132 -0
- package/dist/ui/assets/SKILL-Ckg2XbSL.js +114 -0
- package/dist/ui/assets/SKILL-D40-t9w0.js +57 -0
- package/dist/ui/assets/SKILL-D4YtbN6n.js +1 -0
- package/dist/ui/assets/SKILL-DFKKFkzD.js +96 -0
- package/dist/ui/assets/SKILL-DJ815vTN.js +62 -0
- package/dist/ui/assets/SKILL-DLXzwsY4.js +1 -0
- package/dist/ui/assets/SKILL-DXIigmDy.js +35 -0
- package/dist/ui/assets/SKILL-DfSluXpV.js +385 -0
- package/dist/ui/assets/SKILL-DhKtVqb-.js +1 -0
- package/dist/ui/assets/SKILL-FnBxPcDX.js +1 -0
- package/dist/ui/assets/SKILL-HEHb9hIB.js +1 -0
- package/dist/ui/assets/SKILL-oOIS8LAm.js +1 -0
- package/dist/ui/assets/{account-store-DysucxMw.js → account-store-Bo-yhxpr.js} +4 -4
- package/dist/ui/assets/{account-store-Cy3TJKnu.js → account-store-CYz2dZdk.js} +2 -2
- package/dist/ui/assets/adobe-BABx4YQD.js +1 -0
- package/dist/ui/assets/adobe-DFu35kBc.js +2 -0
- package/dist/ui/assets/{angular-html-Cm4-xod0.js → angular-html-aPuBvESs.js} +1 -1
- package/dist/ui/assets/{angular-ts-Dopuir71.js → angular-ts-ocjSXnvf.js} +1 -1
- package/dist/ui/assets/anthropic-messages-CpSojOI8.js +39 -0
- package/dist/ui/assets/anthropic-messages-DbPJ2ji9.js +39 -0
- package/dist/ui/assets/api-endpoint-C00IT5T9.js +1 -0
- package/dist/ui/assets/api-endpoint-GRCyib6X.js +1 -0
- package/dist/ui/assets/{apply-layout-TIXzvNTN.js → apply-layout-DtjqLMjP.js} +1 -1
- package/dist/ui/assets/{apps-e--FORGt.js → apps-CvbmIZii.js} +1 -1
- package/dist/ui/assets/{astro-E_b8esPp.js → astro-go1PgQEf.js} +1 -1
- package/dist/ui/assets/auto-mount-table-CdyPAwVL.js +1 -0
- package/dist/ui/assets/{azure-openai-mDyNL8OK.js → azure-openai-C47c28Th.js} +2 -2
- package/dist/ui/assets/{azure-openai-C5josrBb.js → azure-openai-Dn30Odmd.js} +2 -2
- package/dist/ui/assets/azure-openai-responses-BcoOaRCx.js +1 -0
- package/dist/ui/assets/azure-openai-responses-DUMDrZ29.js +1 -0
- package/dist/ui/assets/backend-hostfs-Com-zF5W.js +1 -0
- package/dist/ui/assets/backend-hostfs-bQQx-S0W.js +1 -0
- package/dist/ui/assets/bedrock-camp-BcJEC3Pg.js +1 -0
- package/dist/ui/assets/bedrock-camp-LeceEQbU.js +1 -0
- package/dist/ui/assets/bedrock-camp-compat-CYnC9BQI.js +1 -0
- package/dist/ui/assets/bedrock-camp-compat-CgBMwna8.js +1 -0
- package/dist/ui/assets/{blade-mj2TcBTp.js → blade-DPPr6MF0.js} +1 -1
- package/dist/ui/assets/catppuccin-frappe-C9Q5zVZY.js +1 -0
- package/dist/ui/assets/catppuccin-latte-CtsyrtPq.js +1 -0
- package/dist/ui/assets/catppuccin-macchiato-R8nAf1vR.js +1 -0
- package/dist/ui/assets/catppuccin-mocha-DjuaAJKi.js +1 -0
- package/dist/ui/assets/cerebras-B2bBHcWG.js +1 -0
- package/dist/ui/assets/cerebras-DWI7o4tY.js +1 -0
- package/dist/ui/assets/chime-CPc6qSh5.js +1 -0
- package/dist/ui/assets/claude-model-version-Csn7RPVg.js +1 -0
- package/dist/ui/assets/claude-model-version-DoVrYsKi.js +2 -0
- package/dist/ui/assets/{client-BTUV7dbh.js → client-DVC0x03n.js} +1 -1
- package/dist/ui/assets/{composer-speech-SNeD5SER.js → composer-speech-Cy4g3lh3.js} +1 -1
- package/dist/ui/assets/connect-llm-FevTa-aV.js +561 -0
- package/dist/ui/assets/{connect-surface-DqU2NC2c.js → connect-surface-Dd462OJJ.js} +1 -1
- package/dist/ui/assets/cpp-Ct9pQPqT.js +1 -0
- package/dist/ui/assets/{css-vJJohHMc.js → css-DlBQoFxe.js} +1 -1
- package/dist/ui/assets/db-DSIYsBgP.js +1 -0
- package/dist/ui/assets/db-cKsBsMMN.js +1 -0
- package/dist/ui/assets/discovery-preference-__0HPYJC.js +1 -0
- package/dist/ui/assets/dist-B4LJzMVB.js +1547 -0
- package/dist/ui/assets/{ensure-speech-assets-DvFwJX-M.js → ensure-speech-assets-CKwQ54O1.js} +1 -1
- package/dist/ui/assets/float-topology-DiK91BlA.js +1 -0
- package/dist/ui/assets/{follower-navigate-watcher-CNC7ybEv.js → follower-navigate-watcher-Dz-52eZY.js} +1 -1
- package/dist/ui/assets/fs-BHEdp-e-.js +1 -0
- package/dist/ui/assets/fs-MCOH5KUJ.js +2 -0
- package/dist/ui/assets/github-BbQO4O_c.js +2 -0
- package/dist/ui/assets/github-C-f5ThxJ.js +1 -0
- package/dist/ui/assets/github-copilot-DXrDbEzB.js +1 -0
- package/dist/ui/assets/github-copilot-Du-Z6Dmn.js +2 -0
- package/dist/ui/assets/{github-install-CFJLPySf.js → github-install-DbrQX7SM.js} +1 -1
- package/dist/ui/assets/{github-zip-C7dhlRG8.js → github-zip-BRYnSLKK.js} +1 -1
- package/dist/ui/assets/{go-BJwz_mda.js → go-rLFTqkRN.js} +1 -1
- package/dist/ui/assets/google-generative-ai-Dxo91M3n.js +1 -0
- package/dist/ui/assets/google-generative-ai-Rjh7hNBV.js +1 -0
- package/dist/ui/assets/{google-shared-BMJ_JErv.js → google-shared-CzJgTu-P.js} +3 -3
- package/dist/ui/assets/{google-shared-YqcyR4cm.js → google-shared-DQJPCU3d.js} +3 -3
- package/dist/ui/assets/google-vertex-61Jj0dk6.js +1 -0
- package/dist/ui/assets/google-vertex-DEwkNZJm.js +1 -0
- package/dist/ui/assets/{haml-DboNpPfQ.js → haml-Bqgi1Cau.js} +1 -1
- package/dist/ui/assets/{handlebars-Bv_jLwHk.js → handlebars-JgcNzdBj.js} +1 -1
- package/dist/ui/assets/{hear-D33CHppO.js → hear-BqNAK8-P.js} +1 -1
- package/dist/ui/assets/{horizon-bright-Br1oVSNq.js → horizon-bright-DSNQnXHK.js} +1 -1
- package/dist/ui/assets/host-command-zx0pt9Np.js +1 -0
- package/dist/ui/assets/{html-BLkwJ0Yd.js → html-BsvMqTlf.js} +1 -1
- package/dist/ui/assets/{html-derivative-B3p5VrMH.js → html-derivative-D9FvRNj4.js} +1 -1
- package/dist/ui/assets/icon-example-LUkiEXyS.js +111 -0
- package/dist/ui/assets/{jinja-BeFOxtqS.js → jinja-CixBDh_U.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-BcijiBMH.js → js-realm-worker-BZhHEqbx.js} +1 -1
- package/dist/ui/assets/jsh-runtime-extensions-DpVq60Gw.js +1 -0
- package/dist/ui/assets/julia-B5NbrcUp.js +1 -0
- package/dist/ui/assets/kanagawa-dragon-Bozd7klA.js +1 -0
- package/dist/ui/assets/kanagawa-lotus-BmuOG9ZW.js +1 -0
- package/dist/ui/assets/kanagawa-wave-BML5mF2J.js +1 -0
- package/dist/ui/assets/kernel-worker-CwFqaikq.js +5233 -0
- package/dist/ui/assets/legacy-api-aliases-BnRqMAef.js +1 -0
- package/dist/ui/assets/legacy-api-aliases-oJPAvhVV.js +1 -0
- package/dist/ui/assets/{lick-manager-BJhAu_iX.js → lick-manager-DFmMezV-.js} +1 -1
- package/dist/ui/assets/{lick-urls-AW0BSaf4.js → lick-urls-DcXOqXGm.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-DiPcVRfN.js → lick-ws-bridge-CnkYvHKI.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-CWRES2H2.js → lick-ws-bridge-yklVm5en.js} +1 -1
- package/dist/ui/assets/{local-llm-DVCKFUl_.js → local-llm-D4MgnlBK.js} +1 -1
- package/dist/ui/assets/{local-llm-CQE3URQQ.js → local-llm-HluX94rS.js} +1 -1
- package/dist/ui/assets/{main-DQS8QHXU.js → main-BmpPeikS.js} +3 -3
- package/dist/ui/assets/{marko-C3klgjEa.js → marko-DYWPPmCl.js} +1 -1
- package/dist/ui/assets/mdc-Cno1UUUH.js +1 -0
- package/dist/ui/assets/mistral-conversations-BtaPxrK1.js +4 -0
- package/dist/ui/assets/mistral-conversations-CDLVw-9i.js +4 -0
- package/dist/ui/assets/{transform-messages-DEFauvrq.js → models-4WTk3EBD.js} +1 -1
- package/dist/ui/assets/{transform-messages-N_eMsP2M.js → models-BSkXF4T6.js} +1 -1
- package/dist/ui/assets/monokai-B_bV9PQ9.js +1 -0
- package/dist/ui/assets/mount-B_Yysj_W.js +2 -0
- package/dist/ui/assets/{mount-bridge-client-4blXuJO1.js → mount-bridge-client-DZE6sHdr.js} +1 -1
- package/dist/ui/assets/mount-kkSADJkJ.js +1 -0
- package/dist/ui/assets/mount-recovery-xQgEe0_O.js +2 -0
- package/dist/ui/assets/new-session-CEfChDqS.js +2 -0
- package/dist/ui/assets/oauth-bootstrap-C9bBExq6.js +2 -0
- package/dist/ui/assets/oauth-service-CTntqv0R.js +1 -0
- package/dist/ui/assets/oauth-service-Uk8UIb05.js +1 -0
- package/dist/ui/assets/{onboarding-orchestrator-CaLdds3m.js → onboarding-orchestrator-CnKr0yBW.js} +1 -1
- package/dist/ui/assets/openai-codex-Cs4FnQBb.js +1 -0
- package/dist/ui/assets/openai-codex-QVbVkjdj.js +1 -0
- package/dist/ui/assets/openai-codex-responses-CPOJeFUY.js +7 -0
- package/dist/ui/assets/openai-codex-responses-jQR19NyX.js +7 -0
- package/dist/ui/assets/openai-completions-DGOcowq8.js +5 -0
- package/dist/ui/assets/openai-completions-DGZFJo5D.js +5 -0
- package/dist/ui/assets/openai-responses-CDTdSIhv.js +1 -0
- package/dist/ui/assets/openai-responses-bnETPgx9.js +1 -0
- package/dist/ui/assets/{openai-responses-shared-DxcsuzHF.js → openai-responses-shared-ChgvRZ74.js} +5 -5
- package/dist/ui/assets/{openai-responses-shared-DhnqxYC9.js → openai-responses-shared-DqJbHrek.js} +5 -5
- package/dist/ui/assets/openrouter-CKoiUQKB.js +1 -0
- package/dist/ui/assets/openrouter-D1wpkLTj.js +1 -0
- package/dist/ui/assets/{openrouter-oauth-Dy4Qqt06.js → openrouter-oauth-Df_lWai3.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-DvOb1QMV.js → openrouter-oauth-jvPojBWW.js} +1 -1
- package/dist/ui/assets/{page-approval-service-Bbc3_KdK.js → page-approval-service-BsXoPdFJ.js} +1 -1
- package/dist/ui/assets/panel-rpc-handlers-Dwk2fvsL.js +2 -0
- package/dist/ui/assets/{panelize-shell-BRldzPxv.js → panelize-shell-DG3fFAS4.js} +1 -1
- package/dist/ui/assets/patterns-ChiGbijt.js +171 -0
- package/dist/ui/assets/php-m5Ug_San.js +1 -0
- package/dist/ui/assets/port-bridge-client-BhmNRlRv.js +2 -0
- package/dist/ui/assets/port-bridge-client-Bz2N1tvn.js +1 -0
- package/dist/ui/assets/{provider-D2RXncrR.js → provider-Dq-ruSoi.js} +2 -2
- package/dist/ui/assets/{provider-Bk24TjUg.js → provider-Y9RlYumW.js} +1 -1
- package/dist/ui/assets/{provider-settings-B5B0NtAl.js → provider-settings-CR96H2hU.js} +1 -1
- package/dist/ui/assets/provider-settings-DNJS-V3F.js +2 -0
- package/dist/ui/assets/{provider-store-access-Cl5aZRx7.js → provider-store-access-BIdOJknd.js} +2 -2
- package/dist/ui/assets/provider-store-access-HarlSCPD.js +1 -0
- package/dist/ui/assets/providers-BS5_Cp-0.js +2 -0
- package/dist/ui/assets/providers-DRiRdLO1.js +1 -0
- package/dist/ui/assets/proxied-fetch-BGeNrvQ4.js +2 -0
- package/dist/ui/assets/proxied-fetch-Co-pb0x0.js +1 -0
- package/dist/ui/assets/{pug-BPcX_o8k.js → pug-B4bk2kWf.js} +1 -1
- package/dist/ui/assets/quick-llm-9w6VrHaQ.js +1 -0
- package/dist/ui/assets/r-C5FwQflr.js +1 -0
- package/dist/ui/assets/record-Cy655bTh.js +1 -0
- package/dist/ui/assets/{recovery-screen-MHXsY2RD.js → recovery-screen-ClVBOtr7.js} +1 -1
- package/dist/ui/assets/red-DX1BQOs8.js +1 -0
- package/dist/ui/assets/{redirect-uri-B1SxiY-b.js → redirect-uri-B16gkDfI.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-Dc-DMywu.js → remote-terminal-view-DSUnPeXp.js} +1 -1
- package/dist/ui/assets/rose-pine-aMsaMD1D.js +1 -0
- package/dist/ui/assets/rose-pine-dawn-8PwUyIlP.js +1 -0
- package/dist/ui/assets/rose-pine-moon-DO-qXg-I.js +1 -0
- package/dist/ui/assets/{scss-0nEf0IT-.js → scss-BaZL6t2Y.js} +1 -1
- package/dist/ui/assets/secret-env-CjwX7z7b.js +1 -0
- package/dist/ui/assets/secret-topology-0AWfFTh5.js +1 -0
- package/dist/ui/assets/{secrets-bridge-client-cWDAnFqs.js → secrets-bridge-client-DCQ44RyR.js} +1 -1
- package/dist/ui/assets/{session-freezer-CnFBCb6j.js → session-freezer-BcGQ4XGx.js} +3 -3
- package/dist/ui/assets/{setup-feature-flags-remote-Dlcwmn-_.js → setup-feature-flags-remote-8Rvw554i.js} +1 -1
- package/dist/ui/assets/setup-standalone-prelude-NNpe-m64.js +2 -0
- package/dist/ui/assets/setup-sudo-CbAhwltm.js +2 -0
- package/dist/ui/assets/{skills-C90t15zW.js → skills-CDnSEmr6.js} +1 -1
- package/dist/ui/assets/{slicc-diff-DsGtkf0J.js → slicc-diff-DhGIKKqP.js} +1 -1
- package/dist/ui/assets/slicc-version-2zGA6xjX.js +1 -0
- package/dist/ui/assets/smithy-Dgaz7aur.js +1 -0
- package/dist/ui/assets/solarized-dark-UdsmMDCL.js +1 -0
- package/dist/ui/assets/solarized-light-C1IUL_tW.js +1 -0
- package/dist/ui/assets/{speak-BDT9rGzg.js → speak-BSK3Souh.js} +1 -1
- package/dist/ui/assets/{sql-69VAgb2g.js → sql-DvarVTMJ.js} +1 -1
- package/dist/ui/assets/{src-DsDPrXOS.js → src-DXdqCrdV.js} +2 -2
- package/dist/ui/assets/{store-BmhLnay6.js → store-BKV5dm_L.js} +1 -1
- package/dist/ui/assets/{store-Cvg04_Rz.js → store-Bl3OB-Qs.js} +1 -1
- package/dist/ui/assets/style-guide-Bgzsk7bf.js +821 -0
- package/dist/ui/assets/{sudo-DYhM4jWf.js → sudo-Bnq6X0me.js} +2 -2
- package/dist/ui/assets/{svelte-B4PVQJ-7.js → svelte-D4FIy7cP.js} +1 -1
- package/dist/ui/assets/swift-CyEgAFGc.js +1 -0
- package/dist/ui/assets/temperature-support-B4x2xaWY.js +1 -0
- package/dist/ui/assets/temperature-support-Cpml9LfI.js +1 -0
- package/dist/ui/assets/transform-messages-DZg9zDcV.js +1 -0
- package/dist/ui/assets/transform-messages-XkZ1QnTb.js +1 -0
- package/dist/ui/assets/transformers-env-DPjdc2EQ.js +1 -0
- package/dist/ui/assets/tray-leader-iVJTGwuf.js +1 -0
- package/dist/ui/assets/{tray-leave-runtime-BGfdX5KF.js → tray-leave-runtime-CN7V9V7O.js} +1 -1
- package/dist/ui/assets/{tray-runtime-config-B1LF8Kd4.js → tray-runtime-config-CVoPQrT2.js} +1 -1
- package/dist/ui/assets/tray-runtime-config-D7cmCcHJ.js +1 -0
- package/dist/ui/assets/ts-tags-C4Ifwy6r.js +1 -0
- package/dist/ui/assets/{upgrade-detection-Co2MZvYS.js → upgrade-detection-BC1ILaMz.js} +1 -1
- package/dist/ui/assets/vesper-DdrHHSXu.js +1 -0
- package/dist/ui/assets/{voice-reply-CnP5wEO_.js → voice-reply-BNX-jA0G.js} +1 -1
- package/dist/ui/assets/{vue-Dg0Kv3qp.js → vue-Djeyp8pE.js} +1 -1
- package/dist/ui/assets/{vue-vine-DdvC-EE2.js → vue-vine-By_xyXdL.js} +1 -1
- package/dist/ui/assets/{wc-attach-DsMfUpx8.js → wc-attach-CPoS-Z-g.js} +2 -2
- package/dist/ui/assets/{wc-extension-CL-LAE0W.js → wc-extension-pWBTulcf.js} +2 -2
- package/dist/ui/assets/wc-float-label-D7p-4xyd.js +1 -0
- package/dist/ui/assets/wc-follower-TQacOT97.js +17 -0
- package/dist/ui/assets/wc-live-DlayGhwI.js +8 -0
- package/dist/ui/assets/wc-nav-Co62IQ9D.js +2 -0
- package/dist/ui/assets/wc-onboarding-CqIwr35s.js +2 -0
- package/dist/ui/assets/{wc-permissions-gFKCQht9.js → wc-permissions-Oq3nX_59.js} +2 -2
- package/dist/ui/assets/wc-placeholder-CRVvrH3X.js +4 -0
- package/dist/ui/assets/{wc-scoop-color-CByZNEJo.js → wc-scoop-color-ShF3p7L9.js} +1 -1
- package/dist/ui/assets/wc-settings-Bh5hIzNc.js +51 -0
- package/dist/ui/assets/{wc-shell-DC5bovWA.js → wc-shell-7mtD7TN_.js} +3 -3
- package/dist/ui/assets/wc-sprinkles-wT8iHdRT.js +2 -0
- package/dist/ui/assets/wc-tray-DxDD8gsB.js +2 -0
- package/dist/ui/assets/wc-tray-scoops-B7RY-1VN.js +5 -0
- package/dist/ui/assets/wc-unit-context-C0EqsYUD.js +1 -0
- package/dist/ui/assets/welcome-CyCMJDqG.js +621 -0
- package/dist/ui/assets/{welcome-detection-C2MvJDW4.js → welcome-detection-DjomEbCT.js} +1 -1
- package/dist/ui/assets/whisper-session-DpDs0sDL.js +2 -0
- package/dist/ui/assets/x_search-C-5p00-C.js +131 -0
- package/dist/ui/assets/xai-grok-CcoDiPUW.js +1 -0
- package/dist/ui/assets/xai-grok-DO4be7QU.js +1 -0
- package/dist/ui/index.html +16 -14
- package/dist/ui/packages/webapp/index.html +16 -14
- package/dist/ui/slicc-diff.js +1 -1
- package/package.json +3 -4
- package/dist/ui/assets/adobe-C19oqBaU.js +0 -1
- package/dist/ui/assets/adobe-Dv-gMc09.js +0 -2
- package/dist/ui/assets/anthropic-messages-BX4DpK10.js +0 -39
- package/dist/ui/assets/anthropic-messages-C-orWG7m.js +0 -39
- package/dist/ui/assets/azure-openai-responses-C2LleG-4.js +0 -1
- package/dist/ui/assets/azure-openai-responses-Df9YPxyp.js +0 -1
- package/dist/ui/assets/bedrock-camp-B0KF_4RS.js +0 -1
- package/dist/ui/assets/bedrock-camp-qpZqnqLa.js +0 -2
- package/dist/ui/assets/catppuccin-frappe-3VR1Za6u.js +0 -1
- package/dist/ui/assets/catppuccin-latte-DwIHMF0Q.js +0 -1
- package/dist/ui/assets/catppuccin-macchiato-DYnBP6_5.js +0 -1
- package/dist/ui/assets/catppuccin-mocha-DYhrFGRu.js +0 -1
- package/dist/ui/assets/cerebras-CDHmZz_Y.js +0 -1
- package/dist/ui/assets/cerebras-DPV0CO1I.js +0 -1
- package/dist/ui/assets/cpp-CdhRINFH.js +0 -1
- package/dist/ui/assets/db-DATxPCUz.js +0 -1
- package/dist/ui/assets/db-DIbBClfy.js +0 -1
- package/dist/ui/assets/discovery-preference-fqUhjzeE.js +0 -1
- package/dist/ui/assets/dist-Dwa3Gdd4.js +0 -1547
- package/dist/ui/assets/float-topology-BgioAcOd.js +0 -1
- package/dist/ui/assets/fs-CIIVB1OK.js +0 -2
- package/dist/ui/assets/fs-QyBiZMuq.js +0 -1
- package/dist/ui/assets/github-Ctvr_Nd6.js +0 -1
- package/dist/ui/assets/github-Dq-ryVOk.js +0 -2
- package/dist/ui/assets/github-copilot-DIk_soEH.js +0 -1
- package/dist/ui/assets/github-copilot-Dm5mGSYk.js +0 -2
- package/dist/ui/assets/google-generative-ai-C9uw7Zks.js +0 -1
- package/dist/ui/assets/google-generative-ai-DHBc1oKV.js +0 -1
- package/dist/ui/assets/google-vertex-BaT3InWy.js +0 -1
- package/dist/ui/assets/google-vertex-DX8CfGr6.js +0 -1
- package/dist/ui/assets/host-command-G_JIdBPR.js +0 -1
- package/dist/ui/assets/julia-DibC-h6i.js +0 -1
- package/dist/ui/assets/kanagawa-dragon-CXtmUGW6.js +0 -1
- package/dist/ui/assets/kanagawa-lotus-BN08jTvb.js +0 -1
- package/dist/ui/assets/kanagawa-wave-CTweb8Dz.js +0 -1
- package/dist/ui/assets/kernel-worker-BiaHa-Mz.js +0 -9014
- package/dist/ui/assets/legacy-api-aliases-CsTVszvY.js +0 -1
- package/dist/ui/assets/legacy-api-aliases-nSD9C16V.js +0 -1
- package/dist/ui/assets/mdc-Otire2H_.js +0 -1
- package/dist/ui/assets/mistral-conversations-BXo-tb0V.js +0 -4
- package/dist/ui/assets/mistral-conversations-Ck257tvp.js +0 -4
- package/dist/ui/assets/monokai-CdkpiU2Y.js +0 -1
- package/dist/ui/assets/mount-C20u28qg.js +0 -2
- package/dist/ui/assets/mount-DSlWOyRg.js +0 -1
- package/dist/ui/assets/mount-recovery-Dp2uzDT3.js +0 -2
- package/dist/ui/assets/new-session-BmqHuPnd.js +0 -2
- package/dist/ui/assets/oauth-bootstrap-CF5Iq7xU.js +0 -2
- package/dist/ui/assets/oauth-service-Bbrrl8Mr.js +0 -1
- package/dist/ui/assets/oauth-service-Cy5ngmcU.js +0 -1
- package/dist/ui/assets/openai-codex-C2ilX51B.js +0 -1
- package/dist/ui/assets/openai-codex-bhWf9evO.js +0 -1
- package/dist/ui/assets/openai-codex-responses-BQzefg3i.js +0 -7
- package/dist/ui/assets/openai-codex-responses-JtcU5b3J.js +0 -7
- package/dist/ui/assets/openai-completions-D-HjYi8x.js +0 -5
- package/dist/ui/assets/openai-completions-QMfwfjiE.js +0 -5
- package/dist/ui/assets/openai-responses-BVHnEPuG.js +0 -1
- package/dist/ui/assets/openai-responses-Ca0oWhbv.js +0 -1
- package/dist/ui/assets/openrouter-Bo62to17.js +0 -1
- package/dist/ui/assets/openrouter-C9_8OqEu.js +0 -1
- package/dist/ui/assets/panel-rpc-handlers-Dbhx7m_G.js +0 -2
- package/dist/ui/assets/php-BidqsJNR.js +0 -1
- package/dist/ui/assets/port-bridge-client-BbVs1yhx.js +0 -2
- package/dist/ui/assets/port-bridge-client-DxYLF2-N.js +0 -1
- package/dist/ui/assets/provider-settings-BTpBo_o4.js +0 -2
- package/dist/ui/assets/provider-store-access-CrgSlufJ.js +0 -1
- package/dist/ui/assets/providers-Crdj27DN.js +0 -2
- package/dist/ui/assets/providers-DX7EJ4Fn.js +0 -1
- package/dist/ui/assets/proxied-fetch-B4g-4VbQ.js +0 -2
- package/dist/ui/assets/proxied-fetch-n2pCvcgW.js +0 -1
- package/dist/ui/assets/quick-llm-hL6bZGLe.js +0 -1
- package/dist/ui/assets/r-Dzep-lPg.js +0 -1
- package/dist/ui/assets/record-Z5ZWTUPJ.js +0 -1
- package/dist/ui/assets/red-CJ3rzSJv.js +0 -1
- package/dist/ui/assets/rose-pine-BthvhNj6.js +0 -1
- package/dist/ui/assets/rose-pine-dawn-Dg85fqjY.js +0 -1
- package/dist/ui/assets/rose-pine-moon-hon4tzzS.js +0 -1
- package/dist/ui/assets/secret-env-q4hxkt7Z.js +0 -1
- package/dist/ui/assets/secret-topology-xLmXoozo.js +0 -1
- package/dist/ui/assets/setup-standalone-prelude-Btsjqjoe.js +0 -2
- package/dist/ui/assets/setup-sudo-DrmeHwU_.js +0 -2
- package/dist/ui/assets/slicc-version-tsUsi909.js +0 -1
- package/dist/ui/assets/solarized-dark-DV17i1UV.js +0 -1
- package/dist/ui/assets/solarized-light-DSh2HLQt.js +0 -1
- package/dist/ui/assets/swift-DonLKvLd.js +0 -1
- package/dist/ui/assets/transformers-env-SL0zTs7S.js +0 -1
- package/dist/ui/assets/tray-leader-DcRtwWl-.js +0 -1
- package/dist/ui/assets/tray-runtime-config-CRGwg9SK.js +0 -1
- package/dist/ui/assets/ts-tags-BUIgHz80.js +0 -1
- package/dist/ui/assets/vesper-D5bVUKB1.js +0 -1
- package/dist/ui/assets/wc-float-label-qqb_uM9y.js +0 -1
- package/dist/ui/assets/wc-follower-troAtcMA.js +0 -17
- package/dist/ui/assets/wc-live-D1Mon0cw.js +0 -8
- package/dist/ui/assets/wc-nav-BV6Jm98e.js +0 -2
- package/dist/ui/assets/wc-onboarding-Dg4E9VDR.js +0 -2
- package/dist/ui/assets/wc-placeholder-_6RUOpYH.js +0 -4
- package/dist/ui/assets/wc-settings-Dy5cPd8c.js +0 -51
- package/dist/ui/assets/wc-sprinkles-CDP31nXS.js +0 -2
- package/dist/ui/assets/wc-tray-MFZAPwt4.js +0 -2
- package/dist/ui/assets/wc-tray-scoops-B2RP8cgD.js +0 -5
- package/dist/ui/assets/whisper-session-Cf2gGkoR.js +0 -2
- package/dist/ui/assets/xai-grok-C2GEvF8U.js +0 -1
- package/dist/ui/assets/xai-grok-CoSPbEFx.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";var n=e({DEFAULT_TIMEOUT_MS:()=>i,MCP_SUPPORTED_PROTOCOL_VERSIONS:()=>a,McpAuthRequiredError:()=>c,McpClient:()=>x,McpTimeoutError:()=>u,parseResourceMetadataUrl:()=>f,selectSseResponseFrame:()=>p});const r=t(`mcp-client`),i=6e4,a=[`2026-07-28`,`2025-06-18`],o=a[0],s=a[1];var c=class extends Error{status;resourceMetadataUrl;wwwAuthenticate;constructor(e){super(`MCP server requires authentication (HTTP ${e.status})`),this.name=`McpAuthRequiredError`,this.status=e.status,this.resourceMetadataUrl=e.resourceMetadataUrl,this.wwwAuthenticate=e.wwwAuthenticate}},l=class extends Error{rpcError;constructor(e){super(`MCP RPC error ${e.code}: ${e.message}`),this.name=`McpRpcFailure`,this.rpcError=e}},u=class extends Error{method;timeoutMs;constructor(e){super(`MCP request timed out after ${e.timeoutMs}ms (${e.method})`),this.name=`McpTimeoutError`,this.method=e.method,this.timeoutMs=e.timeoutMs}},d=class extends Error{status;rpcError;constructor(e){super(`MCP HTTP ${e.status} ${e.statusText} for ${e.method}: ${e.snippet||`(empty body)`}`),this.name=`McpHttpError`,this.status=e.status,this.rpcError=e.rpcError}};function f(e){if(!e)return;let t=/resource_metadata="([^"]+)"/i.exec(e);return t?t[1]:/resource_metadata=([^,\s]+)/i.exec(e)?.[1]}function p(e,t){let n=new TextDecoder(`utf-8`).decode(e).replace(/\r\n/g,`
|
|
2
2
|
`).split(/\n\n/);for(let e of n){if(!e.trim())continue;let n=[];for(let t of e.split(`
|
|
3
3
|
`))t.startsWith(`data:`)&&n.push(t.slice(5).trimStart());if(n.length===0)continue;let r=n.join(`
|
|
4
|
-
`),i;try{i=JSON.parse(r)}catch{continue}if(i.id!==void 0&&i.id!==null&&i.id===t)return i}throw Error(`MCP SSE stream ended without a response for request id ${String(t)}`)}function m(e,t){let n=t.toLowerCase();for(let[t,r]of Object.entries(e))if(t.toLowerCase()===n)return r}function h(e){if(e instanceof d||e instanceof l)return e.rpcError}function g(e){return new l(e)}function _(e,t){if(e.jsonrpc!==`2.0`||e.id!==t||Object.hasOwn(e,`result`))return;let n=e.error;return n&&typeof n.code==`number`&&typeof n.message==`string`?n:void 0}function v(e,t){try{return _(JSON.parse(e),t)}catch{return}}function y(e){if(!e.data||typeof e.data!=`object`)return[];let t=e.data.supported;return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}async function b(){let{createProxiedFetch:e}=await import(`./proxied-fetch-
|
|
4
|
+
`),i;try{i=JSON.parse(r)}catch{continue}if(i.id!==void 0&&i.id!==null&&i.id===t)return i}throw Error(`MCP SSE stream ended without a response for request id ${String(t)}`)}function m(e,t){let n=t.toLowerCase();for(let[t,r]of Object.entries(e))if(t.toLowerCase()===n)return r}function h(e){if(e instanceof d||e instanceof l)return e.rpcError}function g(e){return new l(e)}function _(e,t){if(e.jsonrpc!==`2.0`||e.id!==t||Object.hasOwn(e,`result`))return;let n=e.error;return n&&typeof n.code==`number`&&typeof n.message==`string`?n:void 0}function v(e,t){try{return _(JSON.parse(e),t)}catch{return}}function y(e){if(!e.data||typeof e.data!=`object`)return[];let t=e.data.supported;return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}async function b(){let{createProxiedFetch:e}=await import(`./proxied-fetch-Co-pb0x0.js`).then(e=>e.n),t=e();return async(e,n)=>{let r=await t(e,{method:n?.method,headers:n?.headers,body:n?.body});return{status:r.status,statusText:r.statusText,headers:r.headers,body:r.body}}}var x=class{url;staticHeaders;timeoutMs;getAuthHeader;preferredProtocolVersion;clientInfo;fetchImpl;fetchImplLoader=null;sessionId;negotiatedProtocolVersion;nextId=1;constructor(e){this.url=e.url,this.staticHeaders=e.headers??{},this.timeoutMs=e.timeoutMs??6e4,this.getAuthHeader=e.getAuthHeader,this.preferredProtocolVersion=e.protocolVersion??o,this.clientInfo=e.clientInfo??{name:`SLICC`,version:`0.0.0`},this.fetchImpl=e.fetchImpl??null,this.sessionId=e.sessionId}getSessionId(){return this.sessionId}getNegotiatedProtocolVersion(){return this.negotiatedProtocolVersion}async initialize(){if(this.preferredProtocolVersion===s)return this.initializeLegacy();try{return await this.discoverModern(this.preferredProtocolVersion)}catch(e){let t=h(e);if(t?.code===-32022){let e=y(t),n=a.find(t=>t!==s&&e.includes(t));if(!n)throw Error(`MCP server does not support a compatible modern protocol version (supported: ${e.join(`, `)||`none`})`);return this.discoverModern(n)}if(t?.code===-32601&&(e instanceof d&&e.status===400||e instanceof l))return r.debug(`server/discover identified a legacy server; using initialize`,{error:e.message}),this.initializeLegacy();throw e}}async discoverModern(e){let t=await this.request(`server/discover`,{protocolVersion:e}),n=Array.isArray(t?.supportedVersions)?t.supportedVersions.filter(e=>typeof e==`string`):[],r=a.find(e=>e!==s&&n.includes(e));if(!r)throw Error(`MCP server discovery did not advertise a compatible modern protocol version (advertised: ${n.join(`, `)||`none`})`);return this.negotiatedProtocolVersion=r,this.sessionId=void 0,t}async toolsList(){return(await this.request(`tools/list`,{}))?.tools??[]}async toolsCall(e,t){return this.request(`tools/call`,{name:e,arguments:t})}async appsList(){try{return(await this.request(`apps/list`,{}))?.apps??[]}catch(e){if(e instanceof c)throw e;return r.debug(`apps/list not supported by server`,{error:e instanceof Error?e.message:String(e)}),[]}}async request(e,t){let n=this.nextId++,r=await this.resolveFetchImpl(),i={"Content-Type":`application/json`,Accept:`application/json, text/event-stream`,...this.staticHeaders};if(this.negotiatedProtocolVersion===s&&this.sessionId&&e!==`initialize`&&(i[`Mcp-Session-Id`]=this.sessionId),this.getAuthHeader){let e=await this.getAuthHeader();e&&(i.Authorization=e)}let a=JSON.stringify({jsonrpc:`2.0`,id:n,method:e,params:t}),o=new AbortController,l=!1,h,y=new Promise((t,n)=>{h=setTimeout(()=>{l=!0,n(new u({method:e,timeoutMs:this.timeoutMs})),o.abort()},this.timeoutMs)}),b,x=r(this.url,{method:`POST`,headers:i,body:a,signal:o.signal});try{b=await Promise.race([x,y])}catch(t){throw l?(x.catch(()=>void 0),new u({method:e,timeoutMs:this.timeoutMs})):t}finally{h&&clearTimeout(h)}if(b.status===401){let e=m(b.headers,`www-authenticate`);throw new c({status:401,wwwAuthenticate:e,resourceMetadataUrl:f(e)})}if(this.negotiatedProtocolVersion===s){let e=m(b.headers,`mcp-session-id`);e&&(this.sessionId=e)}if(b.status>=400){let t=new TextDecoder(`utf-8`).decode(b.body);throw new d({status:b.status,statusText:b.statusText,method:e,snippet:t.slice(0,512),rpcError:v(t,n)})}let S=(m(b.headers,`content-type`)??``).toLowerCase().includes(`text/event-stream`)?p(b.body,n):JSON.parse(new TextDecoder(`utf-8`).decode(b.body));if(S.error){let e=_(S,n);throw e?g(e):Error(`MCP invalid JSON-RPC error response for request id ${String(n)}`)}return S.result}async resolveFetchImpl(){return this.fetchImpl?this.fetchImpl:(this.fetchImplLoader||=b().then(e=>(this.fetchImpl=e,e)),this.fetchImplLoader)}async initializeLegacy(){return this.negotiatedProtocolVersion=s,this.request(`initialize`,{protocolVersion:s,capabilities:{},clientInfo:this.clientInfo})}};export{n,u as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-DDBAeTLF.js";import{n as t}from"./runtime-env-Dlaokqg1.js";import"./runtime-env-CgsZ7LTp.js";import{t as n}from"./permissions-surface-registry-CilCRwhh.js";import{t as r}from"./speech-C5U8h4In.js";import{t as i}from"./speech-assets-bridge-CFYafE89.js";import{o as a}from"./transformers-env-
|
|
1
|
+
import{t as e}from"./logger-DDBAeTLF.js";import{n as t}from"./runtime-env-Dlaokqg1.js";import"./runtime-env-CgsZ7LTp.js";import{t as n}from"./permissions-surface-registry-CilCRwhh.js";import{t as r}from"./speech-C5U8h4In.js";import{t as i}from"./speech-assets-bridge-CFYafE89.js";import{o as a}from"./transformers-env-DPjdc2EQ.js";import{i as o,t as s}from"./whisper-session-DpDs0sDL.js";var c=e(`speech:composer`),l=5e3,u=(e,t,n)=>new Promise((r,i)=>{let a=setTimeout(()=>i(Error(`${n} timed out after ${t}ms`)),t);e.then(e=>{clearTimeout(a),r(e)},e=>{clearTimeout(a),i(e)})}),d=class{#e;#t;#n;#r;#i;#a=null;#o=!1;#s={engine:`builtin`,state:`idle`};#c=a();#l=new Set;#u=null;constructor(e={}){this.#e=e.builtin??r(),this.#t=e.loadWhisper??o,this.#n=e.startSession??s,this.#r=e.getPermissionSurface??f,this.#i=e.ensureAssets??v}permission(){return this.#e.permission()}async requestPermission(){let e=this.#r();if(e)try{let t=await e.request(`microphone`);return t?(this.#p(t.stream),!0):!1}catch(e){return c.warn(`permission surface microphone request failed`,e),!1}return this.#e.requestPermission()}microphones(){return this.#e.microphones()}status(){return this.#s}onStatus(e){return this.#l.add(e),e(this.#s),()=>this.#l.delete(e)}warmup(){this.#o||(this.#o=!0,this.#c=a(),this.#_({engine:`builtin`,state:`downloading`}),this.#d().then(e=>{this.#a=e,this.#_({engine:`enhanced`,state:`ready`})},e=>{this.#o=!1,this.#_({engine:`builtin`,state:`unavailable`,message:m(e)}),c.warn(`enhanced speech engine unavailable`,e)}))}async#d(){let e=null;try{await this.#i(e=>this.#h(e))}catch(t){e=t,c.warn(`speech asset staging failed; trying already-present assets`,t)}try{return await this.#t(e=>this.#g(e))}catch(t){throw e??t}}async start(e){let t=this.#a;if(t){let n=null;try{return n=await this.#f(e.deviceId),await this.#n(t,{deviceId:e.deviceId,lang:e.lang,onPartial:e.onPartial,onError:e.onError,stream:n??void 0})}catch(e){if(n)for(let e of n.getTracks())e.stop();c.warn(`whisper session failed to start; falling back to builtin`,e)}}return this.#e.start(e)}async#f(e){let t=e&&e!=="default"?e:void 0,n=this.#m();if(n){if(!t&&p(n))return n;for(let e of n.getTracks())e.stop()}let r=this.#r();if(!r)return null;let i={audio:!t||{deviceId:{exact:t}}},a=await u(r.request(`microphone`,{constraints:i}),l,`microphone capture`);if(!a)throw Error(`microphone permission denied`);return a.stream}#p(e){if(this.#u&&this.#u!==e)for(let e of this.#u.getTracks())e.stop();this.#u=e}#m(){let e=this.#u;return this.#u=null,e}get enhancedReady(){return this.#a!==null}#h(e){if(this.#s.state!==`downloading`)return;(e.bytesTotal!=null||e.bytesLoaded!=null)&&this.#c.update(e.asset,e.bytesLoaded??0,e.bytesTotal??0);let t=this.#c.snapshot();t.total<=0||this.#_({engine:`builtin`,state:`downloading`,download:{loaded:t.loaded,total:t.total,etaSeconds:t.etaSeconds}})}#g(e){this.#s.state===`downloading`&&this.#_({engine:`builtin`,state:`downloading`,download:{loaded:e.loaded,total:e.total,etaSeconds:e.etaSeconds}})}#_(e){this.#s=e;for(let t of this.#l)t(e)}};function f(){let e=n();return e?{async request(t,n){let r=await e.request(t,n);return r?.kind===`microphone`?{kind:`microphone`,stream:r.stream}:null}}:null}function p(e){let t=e.getTracks();return t.length>0&&t.some(e=>e.readyState!==`ended`)}function m(e){return`Enhanced speech unavailable: ${e instanceof Error?e.message:String(e)}`}var h=t,g;function _(e){g=e}function v(e){return h()?Promise.resolve():i({instanceId:g,onProgress:e})}var y=null;function b(){return y??=new d,y}export{b as getComposerSpeech,_ as setComposerSpeechInstanceId};
|
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
var e=`<html lang="en">
|
|
2
|
+
<head>
|
|
3
|
+
<title>Connect an LLM</title>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<style>
|
|
6
|
+
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
7
|
+
body {
|
|
8
|
+
font-family: var(--s2-font-family, -apple-system, BlinkMacSystemFont, sans-serif);
|
|
9
|
+
font-size: 13px;
|
|
10
|
+
color: var(--s2-content-default, #e8e8e8);
|
|
11
|
+
background: transparent;
|
|
12
|
+
}
|
|
13
|
+
.step { display: none; animation: fadeUp 0.18s ease both; }
|
|
14
|
+
.step.active { display: block; }
|
|
15
|
+
@keyframes fadeUp {
|
|
16
|
+
from { opacity: 0; transform: translateY(6px); }
|
|
17
|
+
to { opacity: 1; transform: translateY(0); }
|
|
18
|
+
}
|
|
19
|
+
.step-heading {
|
|
20
|
+
font-size: 15px;
|
|
21
|
+
font-weight: 700;
|
|
22
|
+
line-height: 1.3;
|
|
23
|
+
}
|
|
24
|
+
.step-sub {
|
|
25
|
+
font-size: 12px;
|
|
26
|
+
color: var(--s2-content-secondary, #a1a1a1);
|
|
27
|
+
margin-top: 4px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Provider list — responsive grid that adapts to the dip width.
|
|
31
|
+
Each cell is at least ~180px so labels stay readable; the
|
|
32
|
+
browser flows extra columns automatically when there's room. */
|
|
33
|
+
.providers {
|
|
34
|
+
display: grid;
|
|
35
|
+
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
|
|
36
|
+
gap: 6px;
|
|
37
|
+
margin-top: 14px;
|
|
38
|
+
}
|
|
39
|
+
.provider {
|
|
40
|
+
display: flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
justify-content: space-between;
|
|
43
|
+
gap: 8px;
|
|
44
|
+
padding: 8px 12px;
|
|
45
|
+
border-radius: 10px;
|
|
46
|
+
background: var(--s2-bg-elevated, #2c2c2c);
|
|
47
|
+
border: 1px solid var(--s2-border-subtle, #3a3a3a);
|
|
48
|
+
cursor: pointer;
|
|
49
|
+
transition: background 0.12s, border-color 0.12s;
|
|
50
|
+
min-width: 0;
|
|
51
|
+
}
|
|
52
|
+
.provider:hover {
|
|
53
|
+
background: var(--s2-bg-layer-2, #252525);
|
|
54
|
+
border-color: var(--s2-accent, #3562ff);
|
|
55
|
+
}
|
|
56
|
+
.provider > div {
|
|
57
|
+
min-width: 0;
|
|
58
|
+
flex: 1 1 auto;
|
|
59
|
+
}
|
|
60
|
+
.provider__name {
|
|
61
|
+
font-weight: 600;
|
|
62
|
+
font-size: 13px;
|
|
63
|
+
white-space: nowrap;
|
|
64
|
+
overflow: hidden;
|
|
65
|
+
text-overflow: ellipsis;
|
|
66
|
+
}
|
|
67
|
+
.provider__chevron {
|
|
68
|
+
color: var(--s2-content-secondary, #a1a1a1);
|
|
69
|
+
font-size: 14px;
|
|
70
|
+
flex: 0 0 auto;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Credential form */
|
|
74
|
+
.form {
|
|
75
|
+
margin-top: 14px;
|
|
76
|
+
display: flex;
|
|
77
|
+
flex-direction: column;
|
|
78
|
+
gap: 10px;
|
|
79
|
+
}
|
|
80
|
+
.form label {
|
|
81
|
+
display: block;
|
|
82
|
+
font-size: 11px;
|
|
83
|
+
font-weight: 600;
|
|
84
|
+
color: var(--s2-content-secondary, #a1a1a1);
|
|
85
|
+
margin-bottom: 4px;
|
|
86
|
+
text-transform: uppercase;
|
|
87
|
+
letter-spacing: 0.04em;
|
|
88
|
+
}
|
|
89
|
+
.form input[type="text"],
|
|
90
|
+
.form input[type="password"],
|
|
91
|
+
.form select {
|
|
92
|
+
width: 100%;
|
|
93
|
+
height: 32px;
|
|
94
|
+
padding: 0 10px;
|
|
95
|
+
border-radius: 8px;
|
|
96
|
+
border: 1px solid var(--s2-border-default, #4a4a4a);
|
|
97
|
+
background: var(--s2-bg-elevated, #2c2c2c);
|
|
98
|
+
color: var(--s2-content-default, #e8e8e8);
|
|
99
|
+
font-family: inherit;
|
|
100
|
+
font-size: 13px;
|
|
101
|
+
line-height: 1.4;
|
|
102
|
+
outline: none;
|
|
103
|
+
transition: border-color 0.12s, box-shadow 0.12s;
|
|
104
|
+
}
|
|
105
|
+
.form input[type="text"]:focus,
|
|
106
|
+
.form input[type="password"]:focus,
|
|
107
|
+
.form select:focus {
|
|
108
|
+
border-color: var(--s2-accent, #3562ff);
|
|
109
|
+
box-shadow: 0 0 0 1px var(--s2-accent, #3562ff);
|
|
110
|
+
}
|
|
111
|
+
.form input[type="text"]::placeholder,
|
|
112
|
+
.form input[type="password"]::placeholder {
|
|
113
|
+
color: var(--s2-content-tertiary, #717171);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.actions {
|
|
117
|
+
display: flex;
|
|
118
|
+
gap: 8px;
|
|
119
|
+
margin-top: 14px;
|
|
120
|
+
align-items: center;
|
|
121
|
+
}
|
|
122
|
+
.actions .spacer { flex: 1; }
|
|
123
|
+
|
|
124
|
+
.btn {
|
|
125
|
+
display: inline-flex;
|
|
126
|
+
align-items: center;
|
|
127
|
+
gap: 6px;
|
|
128
|
+
height: 32px;
|
|
129
|
+
padding: 0 14px;
|
|
130
|
+
border-radius: 9999px;
|
|
131
|
+
background: transparent;
|
|
132
|
+
border: 1px solid var(--s2-border-default, #4a4a4a);
|
|
133
|
+
color: var(--s2-content-default, #e8e8e8);
|
|
134
|
+
font-family: inherit;
|
|
135
|
+
font-size: 12px;
|
|
136
|
+
font-weight: 600;
|
|
137
|
+
cursor: pointer;
|
|
138
|
+
}
|
|
139
|
+
.btn:hover { background: color-mix(in srgb, var(--s2-content-default) 6%, transparent); }
|
|
140
|
+
.btn:disabled { opacity: 0.5; cursor: default; }
|
|
141
|
+
.btn--primary {
|
|
142
|
+
background: var(--s2-accent, #3562ff);
|
|
143
|
+
border-color: var(--s2-accent, #3562ff);
|
|
144
|
+
color: white;
|
|
145
|
+
}
|
|
146
|
+
.btn--primary:hover { filter: brightness(1.05); }
|
|
147
|
+
|
|
148
|
+
.status {
|
|
149
|
+
margin-top: 10px;
|
|
150
|
+
font-size: 12px;
|
|
151
|
+
min-height: 16px;
|
|
152
|
+
}
|
|
153
|
+
.status.busy { color: var(--s2-content-secondary, #a1a1a1); }
|
|
154
|
+
.status.ok { color: var(--s2-positive, #3aa763); }
|
|
155
|
+
.status.warn { color: var(--s2-notice, #d49d10); }
|
|
156
|
+
.status.error { color: var(--s2-negative, #c83a3a); }
|
|
157
|
+
|
|
158
|
+
.meta {
|
|
159
|
+
font-size: 11px;
|
|
160
|
+
color: var(--s2-content-secondary, #a1a1a1);
|
|
161
|
+
margin-top: 6px;
|
|
162
|
+
}
|
|
163
|
+
.field-help {
|
|
164
|
+
font-size: 11px;
|
|
165
|
+
color: var(--s2-content-secondary, #a1a1a1);
|
|
166
|
+
margin-top: 6px;
|
|
167
|
+
line-height: 1.4;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* Device-code box — matches the settings dialog's inline code
|
|
171
|
+
box so the welcome flow and Add Account flow look identical. */
|
|
172
|
+
.device-code {
|
|
173
|
+
margin-top: 14px;
|
|
174
|
+
padding: 10px 12px;
|
|
175
|
+
border-radius: 8px;
|
|
176
|
+
background: var(--s2-bg-elevated, #161b22);
|
|
177
|
+
border: 1px solid var(--s2-border-default, #30363d);
|
|
178
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
179
|
+
font-weight: 600;
|
|
180
|
+
font-size: 22px;
|
|
181
|
+
letter-spacing: 2px;
|
|
182
|
+
text-align: center;
|
|
183
|
+
color: var(--s2-content-default, #e6edf3);
|
|
184
|
+
user-select: all;
|
|
185
|
+
cursor: text;
|
|
186
|
+
}
|
|
187
|
+
</style>
|
|
188
|
+
</head>
|
|
189
|
+
<body>
|
|
190
|
+
<!-- Step 1: pick provider -->
|
|
191
|
+
<section id="sProvider" class="step active">
|
|
192
|
+
<div class="step-heading">Pick an LLM provider</div>
|
|
193
|
+
<div class="step-sub">All accounts you've configured stay editable later in Settings.</div>
|
|
194
|
+
<div id="providerList" class="providers"></div>
|
|
195
|
+
</section>
|
|
196
|
+
|
|
197
|
+
<!-- Step 2: credentials -->
|
|
198
|
+
<section id="sCreds" class="step">
|
|
199
|
+
<div class="step-heading">
|
|
200
|
+
Connect to <span id="providerName">…</span>
|
|
201
|
+
</div>
|
|
202
|
+
<div class="step-sub" id="providerDesc"></div>
|
|
203
|
+
<div class="form">
|
|
204
|
+
<div id="apiKeyRow">
|
|
205
|
+
<label for="apiKeyIn" id="apiKeyLabel">API Key</label>
|
|
206
|
+
<input id="apiKeyIn" type="password" autocomplete="off" spellcheck="false" placeholder="sk-…" />
|
|
207
|
+
</div>
|
|
208
|
+
<div id="baseUrlRow" hidden>
|
|
209
|
+
<label for="baseUrlIn">Base URL</label>
|
|
210
|
+
<input id="baseUrlIn" type="text" autocomplete="off" spellcheck="false" placeholder="https://…" />
|
|
211
|
+
<div id="baseUrlHelp" class="field-help" hidden></div>
|
|
212
|
+
</div>
|
|
213
|
+
<div id="deploymentRow" hidden>
|
|
214
|
+
<label for="deploymentIn">Deployment</label>
|
|
215
|
+
<input id="deploymentIn" type="text" autocomplete="off" spellcheck="false" placeholder="deployment-name" />
|
|
216
|
+
<div id="deploymentHelp" class="field-help" hidden></div>
|
|
217
|
+
</div>
|
|
218
|
+
<div id="apiVersionRow" hidden>
|
|
219
|
+
<label for="apiVersionIn">API Version</label>
|
|
220
|
+
<input id="apiVersionIn" type="text" autocomplete="off" spellcheck="false" placeholder="api-version" />
|
|
221
|
+
<div id="apiVersionHelp" class="field-help" hidden></div>
|
|
222
|
+
</div>
|
|
223
|
+
</div>
|
|
224
|
+
<div id="status" class="status"></div>
|
|
225
|
+
<div class="actions">
|
|
226
|
+
<button id="backBtn" class="btn" type="button">Back</button>
|
|
227
|
+
<span class="spacer"></span>
|
|
228
|
+
<button id="connectBtn" class="btn btn--primary" type="button">Connect</button>
|
|
229
|
+
</div>
|
|
230
|
+
<div class="meta" id="meta"></div>
|
|
231
|
+
</section>
|
|
232
|
+
|
|
233
|
+
<!-- Step 2.5: device-code prompt (GitHub Copilot, future device flows). -->
|
|
234
|
+
<section id="sDeviceCode" class="step">
|
|
235
|
+
<div class="step-heading" id="deviceCodeHeading">Verification code</div>
|
|
236
|
+
<div class="step-sub" id="deviceCodeSub">
|
|
237
|
+
Copy the code, then click Continue. We'll open the authorization page in a new tab —
|
|
238
|
+
paste the code there if it isn't pre-filled.
|
|
239
|
+
</div>
|
|
240
|
+
<div class="device-code" id="deviceCode">XXXX-XXXX</div>
|
|
241
|
+
<div class="actions">
|
|
242
|
+
<button id="deviceCancelBtn" class="btn" type="button">Cancel</button>
|
|
243
|
+
<span class="spacer"></span>
|
|
244
|
+
<button id="deviceContinueBtn" class="btn btn--primary" type="button">
|
|
245
|
+
Copy & Continue
|
|
246
|
+
</button>
|
|
247
|
+
</div>
|
|
248
|
+
</section>
|
|
249
|
+
|
|
250
|
+
<!-- Step 3: success -->
|
|
251
|
+
<section id="sDone" class="step">
|
|
252
|
+
<div class="step-heading">Connected.</div>
|
|
253
|
+
<div class="step-sub" id="doneSub">Booting your model…</div>
|
|
254
|
+
</section>
|
|
255
|
+
|
|
256
|
+
<script>
|
|
257
|
+
// Provider catalogue is injected by the parent via slicc-message.
|
|
258
|
+
// Until it arrives we render a tiny placeholder. Model selection
|
|
259
|
+
// intentionally lives in the chat header (not the dip), so we
|
|
260
|
+
// ignore the \`models\` map and never surface it here.
|
|
261
|
+
var providers = [];
|
|
262
|
+
var current = { provider: null, providerConfig: null };
|
|
263
|
+
|
|
264
|
+
var providerListEl = document.getElementById('providerList');
|
|
265
|
+
var providerNameEl = document.getElementById('providerName');
|
|
266
|
+
var providerDescEl = document.getElementById('providerDesc');
|
|
267
|
+
var apiKeyRow = document.getElementById('apiKeyRow');
|
|
268
|
+
var apiKeyLabelEl = document.getElementById('apiKeyLabel');
|
|
269
|
+
var apiKeyIn = document.getElementById('apiKeyIn');
|
|
270
|
+
var baseUrlRow = document.getElementById('baseUrlRow');
|
|
271
|
+
var baseUrlIn = document.getElementById('baseUrlIn');
|
|
272
|
+
var baseUrlHelpEl = document.getElementById('baseUrlHelp');
|
|
273
|
+
var deploymentRow = document.getElementById('deploymentRow');
|
|
274
|
+
var deploymentIn = document.getElementById('deploymentIn');
|
|
275
|
+
var deploymentHelpEl = document.getElementById('deploymentHelp');
|
|
276
|
+
var apiVersionRow = document.getElementById('apiVersionRow');
|
|
277
|
+
var apiVersionIn = document.getElementById('apiVersionIn');
|
|
278
|
+
var apiVersionHelpEl = document.getElementById('apiVersionHelp');
|
|
279
|
+
var statusEl = document.getElementById('status');
|
|
280
|
+
var connectBtn = document.getElementById('connectBtn');
|
|
281
|
+
var backBtn = document.getElementById('backBtn');
|
|
282
|
+
var metaEl = document.getElementById('meta');
|
|
283
|
+
|
|
284
|
+
function setHelpText(el, text) {
|
|
285
|
+
if (text) {
|
|
286
|
+
el.textContent = text;
|
|
287
|
+
el.hidden = false;
|
|
288
|
+
} else {
|
|
289
|
+
el.textContent = '';
|
|
290
|
+
el.hidden = true;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
function renderProviders() {
|
|
295
|
+
providerListEl.innerHTML = '';
|
|
296
|
+
if (!providers.length) {
|
|
297
|
+
var empty = document.createElement('div');
|
|
298
|
+
empty.className = 'meta';
|
|
299
|
+
empty.textContent = 'Loading providers…';
|
|
300
|
+
providerListEl.appendChild(empty);
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
providers.forEach(function (p) {
|
|
304
|
+
var row = document.createElement('div');
|
|
305
|
+
row.className = 'provider';
|
|
306
|
+
row.dataset.providerId = p.id;
|
|
307
|
+
var info = document.createElement('div');
|
|
308
|
+
var name = document.createElement('div');
|
|
309
|
+
name.className = 'provider__name';
|
|
310
|
+
name.textContent = p.name;
|
|
311
|
+
info.appendChild(name);
|
|
312
|
+
// Show meaningful descriptions only as a hover tooltip so the
|
|
313
|
+
// grid rows stay a uniform height. Skip auto-generated
|
|
314
|
+
// \`<id> provider\` strings — they repeat the id and add no info.
|
|
315
|
+
var fallbackDesc = (p.id || '') + ' provider';
|
|
316
|
+
if (p.description && p.description !== fallbackDesc) {
|
|
317
|
+
row.title = p.description;
|
|
318
|
+
}
|
|
319
|
+
row.appendChild(info);
|
|
320
|
+
var chev = document.createElement('span');
|
|
321
|
+
chev.className = 'provider__chevron';
|
|
322
|
+
chev.textContent = '›';
|
|
323
|
+
row.appendChild(chev);
|
|
324
|
+
row.onclick = function () { selectProvider(p); };
|
|
325
|
+
providerListEl.appendChild(row);
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
function go(stepId) {
|
|
330
|
+
['sProvider', 'sCreds', 'sDeviceCode', 'sDone'].forEach(function (id) {
|
|
331
|
+
document.getElementById(id).classList.toggle('active', id === stepId);
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// Cache device-code DOM up front so the message handler can flip
|
|
336
|
+
// between steps without re-querying every time.
|
|
337
|
+
var deviceCodeEl = document.getElementById('deviceCode');
|
|
338
|
+
var deviceCancelBtn = document.getElementById('deviceCancelBtn');
|
|
339
|
+
var deviceContinueBtn = document.getElementById('deviceContinueBtn');
|
|
340
|
+
function emitDeviceDecision(decision) {
|
|
341
|
+
// Lock both buttons immediately so we never send two decisions
|
|
342
|
+
// for the same prompt (e.g. double-clicks).
|
|
343
|
+
deviceCancelBtn.disabled = true;
|
|
344
|
+
deviceContinueBtn.disabled = true;
|
|
345
|
+
slicc.lick({
|
|
346
|
+
action: 'device-code-decision',
|
|
347
|
+
data: { decision: decision },
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
deviceCancelBtn.onclick = function () {
|
|
351
|
+
emitDeviceDecision('cancel');
|
|
352
|
+
// Return to the credential step — the host will broadcast a
|
|
353
|
+
// \`slicc-connect-result\` shortly with the cancellation message,
|
|
354
|
+
// which the existing handler renders into the status row.
|
|
355
|
+
go('sCreds');
|
|
356
|
+
};
|
|
357
|
+
deviceContinueBtn.onclick = function () {
|
|
358
|
+
// Best-effort clipboard copy — the host's prompter will retry
|
|
359
|
+
// server-side too, but doing it here lets the user paste even
|
|
360
|
+
// if the host clipboard call gets blocked by the sandbox.
|
|
361
|
+
try {
|
|
362
|
+
var text = deviceCodeEl.textContent || '';
|
|
363
|
+
if (navigator.clipboard && navigator.clipboard.writeText) {
|
|
364
|
+
navigator.clipboard.writeText(text);
|
|
365
|
+
}
|
|
366
|
+
} catch (e) {
|
|
367
|
+
/* ignore — code is still visible on the box */
|
|
368
|
+
}
|
|
369
|
+
emitDeviceDecision('continue');
|
|
370
|
+
statusEl.className = 'status busy';
|
|
371
|
+
statusEl.textContent = 'Waiting for you to authorize in the new tab…';
|
|
372
|
+
go('sCreds');
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
function selectProvider(p) {
|
|
376
|
+
current.provider = p.id;
|
|
377
|
+
current.providerConfig = p;
|
|
378
|
+
providerNameEl.textContent = p.name;
|
|
379
|
+
// Suppress auto-generated \`<id> provider\` descriptions.
|
|
380
|
+
var fallback = (p.id || '') + ' provider';
|
|
381
|
+
providerDescEl.textContent =
|
|
382
|
+
p.description && p.description !== fallback ? p.description : '';
|
|
383
|
+
statusEl.className = 'status';
|
|
384
|
+
statusEl.textContent = '';
|
|
385
|
+
metaEl.textContent = '';
|
|
386
|
+
|
|
387
|
+
// ── API key field ─────────────────────────────────────────
|
|
388
|
+
apiKeyIn.value = '';
|
|
389
|
+
// Mirror the Settings → Add Account dialog's "API Key (ENVVAR):"
|
|
390
|
+
// label so users see which env-var SLICC will read on import.
|
|
391
|
+
apiKeyLabelEl.textContent =
|
|
392
|
+
'API Key' + (p.apiKeyEnvVar ? ' (' + p.apiKeyEnvVar + ')' : '');
|
|
393
|
+
apiKeyIn.placeholder = p.apiKeyPlaceholder || 'sk-…';
|
|
394
|
+
|
|
395
|
+
// ── Base URL field ────────────────────────────────────────
|
|
396
|
+
// \`defaultBaseUrl\` on the catalogue is the provider's
|
|
397
|
+
// \`baseUrlPlaceholder\` — a UI hint like
|
|
398
|
+
// \`https://your-resource.cognitiveservices.azure.com/\` or
|
|
399
|
+
// \`https://your-proxy.example.com\`. It is NOT a real default
|
|
400
|
+
// and must not be sent back as the user's value. Mirror the
|
|
401
|
+
// settings dialog and use it only as the HTML placeholder.
|
|
402
|
+
baseUrlRow.hidden = !p.requiresBaseUrl;
|
|
403
|
+
baseUrlIn.value = '';
|
|
404
|
+
baseUrlIn.placeholder = p.defaultBaseUrl || 'https://…';
|
|
405
|
+
setHelpText(baseUrlHelpEl, p.requiresBaseUrl ? p.baseUrlDescription || '' : '');
|
|
406
|
+
|
|
407
|
+
// ── Deployment field ──────────────────────────────────────
|
|
408
|
+
deploymentRow.hidden = !p.requiresDeployment;
|
|
409
|
+
deploymentIn.value = '';
|
|
410
|
+
deploymentIn.placeholder = p.deploymentPlaceholder || 'deployment-name';
|
|
411
|
+
setHelpText(
|
|
412
|
+
deploymentHelpEl,
|
|
413
|
+
p.requiresDeployment ? p.deploymentDescription || '' : ''
|
|
414
|
+
);
|
|
415
|
+
|
|
416
|
+
// ── API version field ─────────────────────────────────────
|
|
417
|
+
apiVersionRow.hidden = !p.requiresApiVersion;
|
|
418
|
+
apiVersionIn.value = p.apiVersionDefault || '';
|
|
419
|
+
apiVersionIn.placeholder = p.apiVersionDefault || 'api-version';
|
|
420
|
+
setHelpText(
|
|
421
|
+
apiVersionHelpEl,
|
|
422
|
+
p.requiresApiVersion ? p.apiVersionDescription || '' : ''
|
|
423
|
+
);
|
|
424
|
+
|
|
425
|
+
// OAuth providers delegate everything to a popup login flow
|
|
426
|
+
// handled by the host page. The dip just emits an
|
|
427
|
+
// \`oauth-attempt\` and waits for \`slicc-connect-result\`.
|
|
428
|
+
var isOAuth = !!p.isOAuth;
|
|
429
|
+
apiKeyRow.hidden = isOAuth;
|
|
430
|
+
// OAuth + per-provider extras don't combine in the settings
|
|
431
|
+
// dialog either, so hide deployment/api-version on OAuth
|
|
432
|
+
// providers regardless of catalogue flags.
|
|
433
|
+
if (isOAuth) {
|
|
434
|
+
deploymentRow.hidden = true;
|
|
435
|
+
apiVersionRow.hidden = true;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
connectBtn.disabled = false;
|
|
439
|
+
connectBtn.textContent = isOAuth ? 'Login with ' + p.name : 'Connect';
|
|
440
|
+
go('sCreds');
|
|
441
|
+
if (!isOAuth) setTimeout(function () { apiKeyIn.focus(); }, 60);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
backBtn.onclick = function () { go('sProvider'); };
|
|
445
|
+
|
|
446
|
+
connectBtn.onclick = function () {
|
|
447
|
+
var p = current.providerConfig || {};
|
|
448
|
+
if (p.isOAuth) {
|
|
449
|
+
connectBtn.disabled = true;
|
|
450
|
+
connectBtn.textContent = 'Opening login…';
|
|
451
|
+
statusEl.className = 'status busy';
|
|
452
|
+
statusEl.textContent = 'Opening ' + (p.name || current.provider) + ' login window…';
|
|
453
|
+
slicc.lick({
|
|
454
|
+
action: 'oauth-attempt',
|
|
455
|
+
data: {
|
|
456
|
+
provider: current.provider,
|
|
457
|
+
baseUrl: (baseUrlIn.value || '').trim() || null,
|
|
458
|
+
},
|
|
459
|
+
});
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
var key = (apiKeyIn.value || '').trim();
|
|
463
|
+
if (p.requiresApiKey !== false && !key) {
|
|
464
|
+
statusEl.className = 'status error';
|
|
465
|
+
statusEl.textContent = 'Please enter an API key.';
|
|
466
|
+
apiKeyIn.focus();
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
var baseUrlVal = (baseUrlIn.value || '').trim();
|
|
470
|
+
if (p.requiresBaseUrl && !baseUrlVal) {
|
|
471
|
+
statusEl.className = 'status error';
|
|
472
|
+
statusEl.textContent = 'Please enter a base URL.';
|
|
473
|
+
baseUrlIn.focus();
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
var deploymentVal = (deploymentIn.value || '').trim();
|
|
477
|
+
if (p.requiresDeployment && !deploymentVal) {
|
|
478
|
+
statusEl.className = 'status error';
|
|
479
|
+
statusEl.textContent = 'Please enter a deployment name.';
|
|
480
|
+
deploymentIn.focus();
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
var apiVersionVal = (apiVersionIn.value || '').trim();
|
|
484
|
+
connectBtn.disabled = true;
|
|
485
|
+
connectBtn.textContent = 'Validating…';
|
|
486
|
+
statusEl.className = 'status busy';
|
|
487
|
+
statusEl.textContent = 'Talking to ' + (p.name || current.provider) + '…';
|
|
488
|
+
slicc.lick({
|
|
489
|
+
action: 'connect-attempt',
|
|
490
|
+
data: {
|
|
491
|
+
provider: current.provider,
|
|
492
|
+
apiKey: key,
|
|
493
|
+
baseUrl: baseUrlVal || null,
|
|
494
|
+
deployment: deploymentVal || null,
|
|
495
|
+
apiVersion: apiVersionVal || null,
|
|
496
|
+
// Model picking is handled by the chat header dropdown,
|
|
497
|
+
// not by the welcome dip — leave it null so the
|
|
498
|
+
// orchestrator preserves whatever model the user (or
|
|
499
|
+
// provider defaults) has already chosen.
|
|
500
|
+
model: null,
|
|
501
|
+
},
|
|
502
|
+
});
|
|
503
|
+
};
|
|
504
|
+
|
|
505
|
+
function submitOnEnter(e) {
|
|
506
|
+
if (e.key === 'Enter') connectBtn.click();
|
|
507
|
+
}
|
|
508
|
+
apiKeyIn.addEventListener('keydown', submitOnEnter);
|
|
509
|
+
baseUrlIn.addEventListener('keydown', submitOnEnter);
|
|
510
|
+
deploymentIn.addEventListener('keydown', submitOnEnter);
|
|
511
|
+
apiVersionIn.addEventListener('keydown', submitOnEnter);
|
|
512
|
+
|
|
513
|
+
// Listen for parent → dip messages.
|
|
514
|
+
document.addEventListener('slicc-message', function (e) {
|
|
515
|
+
var msg = e.detail || {};
|
|
516
|
+
if (msg.type === 'slicc-providers') {
|
|
517
|
+
providers = (msg.providers || []).slice();
|
|
518
|
+
// The dip used to read \`msg.models\` to populate a per-provider
|
|
519
|
+
// model dropdown; that responsibility now lives in the chat
|
|
520
|
+
// header so we deliberately ignore the models map.
|
|
521
|
+
renderProviders();
|
|
522
|
+
} else if (msg.type === 'slicc-device-code') {
|
|
523
|
+
// Host is asking us to render the device-flow verification
|
|
524
|
+
// code (GitHub Copilot today; future device-flow providers
|
|
525
|
+
// can reuse this same message). Show the code + Cancel /
|
|
526
|
+
// Copy & Continue and wait for the user's pick — the host
|
|
527
|
+
// won't open any auth tab until we emit \`device-code-decision\`.
|
|
528
|
+
deviceCodeEl.textContent = msg.userCode || 'XXXX-XXXX';
|
|
529
|
+
deviceCancelBtn.disabled = false;
|
|
530
|
+
deviceContinueBtn.disabled = false;
|
|
531
|
+
go('sDeviceCode');
|
|
532
|
+
} else if (msg.type === 'slicc-already-connected') {
|
|
533
|
+
// Reload of a chat that already finished onboarding —
|
|
534
|
+
// skip the provider list entirely and show a finished card.
|
|
535
|
+
go('sDone');
|
|
536
|
+
var doneSub = document.getElementById('doneSub');
|
|
537
|
+
if (doneSub) {
|
|
538
|
+
doneSub.textContent = msg.note || 'Already connected.';
|
|
539
|
+
}
|
|
540
|
+
} else if (msg.type === 'slicc-connect-result') {
|
|
541
|
+
if (msg.ok) {
|
|
542
|
+
connectBtn.textContent = 'Connected';
|
|
543
|
+
statusEl.className = 'status ok';
|
|
544
|
+
statusEl.textContent = msg.note || 'Connected.';
|
|
545
|
+
go('sDone');
|
|
546
|
+
} else {
|
|
547
|
+
connectBtn.disabled = false;
|
|
548
|
+
connectBtn.textContent = 'Try again';
|
|
549
|
+
statusEl.className = 'status ' + (msg.kind === 'skipped' ? 'warn' : 'error');
|
|
550
|
+
statusEl.textContent = msg.message || 'Could not save credentials.';
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
});
|
|
554
|
+
|
|
555
|
+
// Tell the parent we're ready so it can flush the provider catalogue.
|
|
556
|
+
slicc.lick({ action: 'connect-ready' });
|
|
557
|
+
renderProviders();
|
|
558
|
+
<\/script>
|
|
559
|
+
</body>
|
|
560
|
+
</html>
|
|
561
|
+
`;export{e as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{C as e,I as t,d as n,f as r}from"./account-store-
|
|
1
|
+
import{C as e,I as t,d as n,f as r}from"./account-store-Bo-yhxpr.js";import{n as i}from"./provider-settings-DNJS-V3F.js";var a=`slicc_cloud_model_catalog`,o=`adobe`;function s(t){if(t===o)return!1;let n=e(t);return!(n.hidden||n.onOAuthLoginIntercepted)}function c(){try{let e=r().map(e=>({providerId:e.providerId,providerName:e.providerName,models:e.models.map(e=>({id:e.id,name:e.name}))}));localStorage.setItem(a,JSON.stringify(e))}catch{}}async function l(r){for(;r.firstChild;)r.removeChild(r.firstChild);r.className=`connect-surface`;let a=document.createElement(`h1`);a.className=`connect-surface__title`,a.textContent=`Connect providers`,r.appendChild(a);let l=document.createElement(`p`);l.className=`connect-surface__desc`,l.textContent=`Log in or add API keys for the providers your cone should use, then click Done to return to the dashboard.`,r.appendChild(l);let u=document.createElement(`div`);u.className=`connect-surface__accounts`,r.appendChild(u);function d(){for(;u.firstChild;)u.removeChild(u.firstChild);let r=n().filter(e=>e.providerId!==o);if(r.length===0){let e=document.createElement(`div`);e.className=`connect-surface__empty`,e.textContent=`No providers connected yet.`,u.appendChild(e)}else{let n=document.createElement(`div`);n.className=`connect-surface__accounts-list`;for(let i of r){let r=e(i.providerId),a=document.createElement(`div`);a.className=`connect-surface__account-row`;let o=document.createElement(`div`);o.className=`connect-surface__account-info`;let s=document.createElement(`div`);s.className=`connect-surface__account-name`,s.textContent=r.name,o.appendChild(s);let l=document.createElement(`div`);l.className=`connect-surface__account-detail`,l.textContent=i.userName?i.userName:i.accessToken?`Logged in`:i.apiKey?`API key set`:`No credentials`,o.appendChild(l),a.appendChild(o);let u=document.createElement(`button`);u.className=`connect-surface__remove-btn`,u.textContent=`Remove`,u.onclick=async()=>{await t(i.providerId),c(),d()},a.appendChild(u),n.appendChild(a)}u.appendChild(n)}let a=document.createElement(`button`);a.className=`connect-surface__add-btn`,a.textContent=r.length===0?`Add provider`:`Manage providers`,a.onclick=async()=>{await i({startInAddAccount:!0,providerFilter:s})&&(c(),d())},u.appendChild(a)}d(),c();let f=document.createElement(`div`);f.className=`connect-surface__footer`;let p=document.createElement(`button`);if(p.className=`connect-surface__done-btn`,p.textContent=`Done — return to dashboard`,p.onclick=()=>{c(),window.close()},f.appendChild(p),r.appendChild(f),!document.getElementById(`connect-surface-style`)){let e=document.createElement(`style`);e.id=`connect-surface-style`,e.textContent=`
|
|
2
2
|
.connect-surface {
|
|
3
3
|
padding: 2rem;
|
|
4
4
|
max-width: 560px;
|