sliccy 6.258.1 → 6.258.2
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/dist/ui/.vite/manifest.json +180 -180
- package/dist/ui/assets/{account-store-dUOszes2.js → account-store-BGnbKLs5.js} +1 -1
- package/dist/ui/assets/{account-store-D2ZhzT6k.js → account-store-CcZuCy3S.js} +1 -1
- package/dist/ui/assets/{adobe-CWgsY48d.js → adobe-B5vP9OGp.js} +1 -1
- package/dist/ui/assets/{adobe-26My-Q5F.js → adobe-C-ScLUGu.js} +1 -1
- package/dist/ui/assets/{agent-panels-BIl3niob.js → agent-panels-DCTo6Wss.js} +1 -1
- package/dist/ui/assets/{almost-bash-shell-headless-eKjbOy1P.js → almost-bash-shell-headless-CHa5Ul-3.js} +13 -13
- package/dist/ui/assets/{apply-layout-uGW_89wB.js → apply-layout-DTLpbNxu.js} +1 -1
- package/dist/ui/assets/{azure-openai-C08YQcd6.js → azure-openai-BAct6ZA6.js} +1 -1
- package/dist/ui/assets/{azure-openai-03JOHdox.js → azure-openai-BMILhYX9.js} +1 -1
- package/dist/ui/assets/{cdp-CIaoY_-T.js → cdp-BzAZVurf.js} +3 -3
- package/dist/ui/assets/{cerebras-I9XfG9qE.js → cerebras-CNgD7lp_.js} +1 -1
- package/dist/ui/assets/{cerebras-Dyaslk9C.js → cerebras-Dz-h_wl1.js} +1 -1
- package/dist/ui/assets/{composer-speech-D3Q7wRzB.js → composer-speech-OESQv3sI.js} +1 -1
- package/dist/ui/assets/{connect-surface-DGGXkOjg.js → connect-surface-8DlvxEca.js} +1 -1
- package/dist/ui/assets/{directed-approval-DmQxY_To.js → directed-approval-DLMjxdBs.js} +1 -1
- package/dist/ui/assets/{emscripten-vfs-hook-90Gqrsgb.js → emscripten-vfs-hook-C4qGX7bQ.js} +1 -1
- package/dist/ui/assets/{frozen-archive-writer-NpztAvQY.js → frozen-archive-writer-D55Jt3H8.js} +1 -1
- package/dist/ui/assets/{frozen-session-delete-CbC408cI.js → frozen-session-delete-BGggKcjU.js} +1 -1
- package/dist/ui/assets/{frozen-session-identity-Bbl7jYAA.js → frozen-session-identity-BZSTAeu4.js} +1 -1
- package/dist/ui/assets/{gelatiere-unit-CKOAJuCh.js → gelatiere-unit-CUOJrgej.js} +1 -1
- package/dist/ui/assets/{github-DVlGl1gC.js → github-B811MuHC.js} +1 -1
- package/dist/ui/assets/{github-B7Smd-th.js → github-CkJtSiU7.js} +1 -1
- package/dist/ui/assets/{github-copilot-5S8ir1m3.js → github-copilot-HCrqTnGC.js} +1 -1
- package/dist/ui/assets/{github-copilot-CM9DklaN.js → github-copilot-oFv9l7dG.js} +1 -1
- package/dist/ui/assets/{hear-Wv8MqFuG.js → hear-C8k48Jl2.js} +1 -1
- package/dist/ui/assets/{hidden-page-input-vcMEY8NI.js → hidden-page-input-BxTN-_nx.js} +1 -1
- package/dist/ui/assets/{hidden-page-input-IkLF_7ZU.js → hidden-page-input-CIKwo-BX.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-UD39nhWx.js → js-realm-worker-BYcES1dO.js} +2 -2
- package/dist/ui/assets/{jsh-executor-B-PE4CUq.js → jsh-executor-iplislRW.js} +3 -3
- package/dist/ui/assets/{kernel-worker-Bh8mq5dQ.js → kernel-worker-B2Z-nUYg.js} +9 -9
- package/dist/ui/assets/{lick-ws-bridge-DwKxGu83.js → lick-ws-bridge-D0FS6u9I.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-D70rQOdJ.js → lick-ws-bridge-LzLHO4a3.js} +1 -1
- package/dist/ui/assets/{live-session-curation-Ba3KZ74T.js → live-session-curation-Bi9mZH0h.js} +1 -1
- package/dist/ui/assets/{live-session-curation-4U8KqRuP.js → live-session-curation-C6xwCNY7.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-DDTVMYYw.js → live-session-snapshot-Dbnvkv8x.js} +1 -1
- package/dist/ui/assets/{local-llm-BfCeQCdd.js → local-llm-CM0Cay8_.js} +1 -1
- package/dist/ui/assets/{local-llm-tV_8QqUD.js → local-llm-DGZvPJuu.js} +1 -1
- package/dist/ui/assets/{main-Dna00i-n.js → main-CXxw-s8f.js} +3 -3
- package/dist/ui/assets/{main-cherry-F3i8LCUD.js → main-cherry-zhX2VFst.js} +1 -1
- package/dist/ui/assets/{mcp-command-BkdE_xO8.js → mcp-command-DMlFGT3U.js} +10 -10
- package/dist/ui/assets/{memory-curation-seam-CPrBnduz.js → memory-curation-seam-BP-IrsfK.js} +1 -1
- package/dist/ui/assets/{memory-write-execute-qnJKEwCb.js → memory-write-execute-DvUX-zG7.js} +1 -1
- package/dist/ui/assets/{merge-folded-cost-into-frozen-qNb6SKWS.js → merge-folded-cost-into-frozen-Bsq0Ib6e.js} +1 -1
- package/dist/ui/assets/{new-session-Bq06wCYL.js → new-session-BdRMCsns.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-03xoL9D1.js → oauth-bootstrap-CO11SJzF.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-ZqapYjJ4.js → onboarding-orchestrator-2GUITkQb.js} +1 -1
- package/dist/ui/assets/{openai-codex-cWjBOdvZ.js → openai-codex-BUcn4LtY.js} +1 -1
- package/dist/ui/assets/{openai-codex-j6cdsOW6.js → openai-codex-YR4JQ9us.js} +1 -1
- package/dist/ui/assets/{openrouter-DaeVDKQM.js → openrouter-B0gFLpAT.js} +1 -1
- package/dist/ui/assets/{openrouter-free-CjxMMT6E.js → openrouter-free-Cc8rClvB.js} +1 -1
- package/dist/ui/assets/{openrouter-free-E2S3ik1W.js → openrouter-free-DmDUncOh.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-CpiX5giq.js → openrouter-oauth-CoX3NZkY.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-DXpCrgq1.js → openrouter-oauth-Dn1ozKpc.js} +1 -1
- package/dist/ui/assets/{openrouter-Co5cPs8f.js → openrouter-vQ5g0p4t.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-VocjxUzM.js → panel-rpc-handlers-hilOlK5V.js} +2 -2
- package/dist/ui/assets/{panelize-shell-CcJyYyti.js → panelize-shell-fCwzGqHl.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-DzL5Y9Lr.js → pi-edit-execution-C-JEQc-C.js} +1 -1
- package/dist/ui/assets/{provider-DveI2UKB.js → provider-Bc01vHZ3.js} +1 -1
- package/dist/ui/assets/{provider-CSYiX1uH.js → provider-BeWCtDQ3.js} +1 -1
- package/dist/ui/assets/{provider-settings-D1GTGx9D.js → provider-settings-tlJjbAeQ.js} +1 -1
- package/dist/ui/assets/{provider-store-access-BfkRcIL3.js → provider-store-access-3wJOZlG7.js} +1 -1
- package/dist/ui/assets/provider-store-access-CFbI4daT.js +1 -0
- package/dist/ui/assets/{providers-Dn1jvUQo.js → providers-CoJHYmNe.js} +2 -2
- package/dist/ui/assets/{providers-C1s0rNX1.js → providers-eqicsvB_.js} +1 -1
- package/dist/ui/assets/{quick-llm-B24Z_0t0.js → quick-llm-DCAllSWQ.js} +1 -1
- package/dist/ui/assets/{realm-inprocess-BKQjSHYg.js → realm-inprocess-BMUE_Hz8.js} +2 -2
- package/dist/ui/assets/{realm-unhandled-rejections-CHNRwgmK.js → realm-unhandled-rejections-DSDIrg3R.js} +1 -1
- package/dist/ui/assets/{realm-unhandled-rejections-MrwKDgWm.js → realm-unhandled-rejections-WM41Cfg1.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-C-PC19Ea.js → remote-terminal-view-BZVNE8DR.js} +2 -2
- package/dist/ui/assets/{restore-DYffbww6.js → restore-DvM96Ugu.js} +1 -1
- package/dist/ui/assets/{run-B8TlLxCf.js → run-BEXxnwAI.js} +1 -1
- package/dist/ui/assets/{run-CxNqD-uc.js → run-BbvDS1e5.js} +2 -2
- package/dist/ui/assets/{run-CGnGcYWM.js → run-CkQK8Cwr.js} +2 -2
- package/dist/ui/assets/{serve-command-B8D2hyZi.js → serve-command-C3Zt9caR.js} +2 -2
- package/dist/ui/assets/{serve-runtime-CITAfwSf.js → serve-runtime-C_dCDB4D.js} +1 -1
- package/dist/ui/assets/{session-command-memory-B9E-G2JW.js → session-command-memory-CdfHPOdQ.js} +2 -2
- package/dist/ui/assets/{session-jsonl-DT985qCt.js → session-jsonl-b01SiQZt.js} +1 -1
- package/dist/ui/assets/{session-search-index-CbbCCPP0.js → session-search-index-DepHWoDZ.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-DAxhIJE1.js → setup-feature-flags-remote-B9_vJ1H1.js} +1 -1
- package/dist/ui/assets/{setup-model-catalog-DLFj0-uU.js → setup-model-catalog-UPQ6ml4Q.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-BFFeKA_b.js → silent-renew-backoff-BXEMMYRE.js} +1 -1
- package/dist/ui/assets/slicc-version-CiMJbWqF.js +1 -0
- package/dist/ui/assets/{soundscape-F9imCH6i.js → soundscape-DKnzoFxU.js} +1 -1
- package/dist/ui/assets/{speak-Cde7daoP.js → speak-D6vwVL_J.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-BE4INv70.js → sprinkle-manager-CaVy2uo1.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-BHHPI0nm.js → sprinkle-renderer-CITuWHTA.js} +1 -1
- package/dist/ui/assets/{sudo-BIgM8fvU.js → sudo-BDm3xajX.js} +1 -1
- package/dist/ui/assets/{supervisor-BNhYE4U7.js → supervisor-VtWuadhb.js} +1 -1
- package/dist/ui/assets/{sync-dialog-BdgPQ67J.js → sync-dialog-D5Q0cjUF.js} +1 -1
- package/dist/ui/assets/{transformers-env-B_IUlLgN.js → transformers-env-C84-8fvZ.js} +1 -1
- package/dist/ui/assets/{tray-leader-FiaVulXn.js → tray-leader-qu__mEKK.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-Cjj65KW1.js → tray-leave-runtime-LO4iGTOm.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-CHsrTBaC.js → tray-sidecar-CELqvXC4.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-CwN7vZBE.js → upgrade-detection-CnccPiBn.js} +1 -1
- package/dist/ui/assets/{upgrade-to-seven-Dbx7sOwB.js → upgrade-to-seven-D4NzsKJF.js} +1 -1
- package/dist/ui/assets/{voice-reply-CJdjma1O.js → voice-reply-xfIZyhOh.js} +1 -1
- package/dist/ui/assets/{wc-attach-0B0Ux1U0.js → wc-attach-C9Mhe62k.js} +2 -2
- package/dist/ui/assets/{wc-browser-BdzVV2D3.js → wc-browser-CI0bwE3K.js} +1 -1
- package/dist/ui/assets/{wc-computers-lJ9JukEw.js → wc-computers-bYGXyaiq.js} +1 -1
- package/dist/ui/assets/{wc-detached-CxGtASJd.js → wc-detached-B3277WZK.js} +1 -1
- package/dist/ui/assets/{wc-extension-DGqrgtYn.js → wc-extension-CjaGm930.js} +2 -2
- package/dist/ui/assets/{wc-follower-BSxRBMkV.js → wc-follower-hANP0Y9v.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-DS61knqk.js → wc-follower-oauth-OGX9YuNF.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-B_405RUs.js → wc-gelatiere-BsrB8674.js} +1 -1
- package/dist/ui/assets/{wc-live-C_bpkZda.js → wc-live-Rl9zyNOw.js} +5 -5
- package/dist/ui/assets/{wc-nav-C5odUfR9.js → wc-nav-C8FqqkCL.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-Cwlc4E6D.js → wc-onboarding-BAabu9Xs.js} +2 -2
- package/dist/ui/assets/{wc-permissions-D9GQzuNZ.js → wc-permissions-COHuDzpW.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-D6vwO4Ty.js → wc-placeholder-cMjLeeOU.js} +2 -2
- package/dist/ui/assets/{wc-profile-export-CQzOGfwp.js → wc-profile-export-PPqX9elC.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-BaQLLIcX.js → wc-secret-request-DQakJ4iC.js} +1 -1
- package/dist/ui/assets/{wc-settings-ikfko2g_.js → wc-settings-meDi3yxj.js} +3 -3
- package/dist/ui/assets/{wc-shell-BElc8Rz-.js → wc-shell-Cty8D-1f.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-CzvdvUCQ.js → wc-shortcut-config-CdEMzluj.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-B6JVOIlW.js → wc-sprinkles-kL-04xzI.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-DZs7KnzN.js → wc-transcript-export-nBVzrgCd.js} +2 -2
- package/dist/ui/assets/{wc-tray-RcNgGI_g.js → wc-tray-Bb8ILz7k.js} +4 -4
- package/dist/ui/assets/{welcome-detection-DG7h-lE5.js → welcome-detection-DaonMeSW.js} +1 -1
- package/dist/ui/assets/{whisper-session-gDGQdpi6.js → whisper-session-LfAksMkB.js} +2 -2
- package/dist/ui/assets/{xai-grok-CR5yYqkh.js → xai-grok-BXudiU7L.js} +1 -1
- package/dist/ui/assets/{xai-grok-BdTfTYgT.js → xai-grok-CxDGtG_E.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/dist/ui/packages/webapp/upgrade-to-seven.html +1 -1
- package/dist/ui/upgrade-to-seven.html +1 -1
- package/package.json +2 -2
- package/dist/ui/assets/provider-store-access-8FRmMgQy.js +0 -1
- package/dist/ui/assets/slicc-version-Dsikwc4L.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/hidden-page-input-
|
|
2
|
-
import{t as e}from"./logger-dqckiMJt.js";import{t}from"./preload-helper-BLdHbfdN.js";import"./navigation-watcher-CdKbEIM_.js";import"./wc-follower-oauth-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/hidden-page-input-CIKwo-BX.js","assets/logger-dqckiMJt.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./logger-dqckiMJt.js";import{t}from"./preload-helper-BLdHbfdN.js";import"./navigation-watcher-CdKbEIM_.js";import"./wc-follower-oauth-OGX9YuNF.js";import{c as n,o as r,s as i}from"./main-CXxw-s8f.js";import{n as a,t as o}from"./pending-request-table-k-D7ZZsL.js";var s=class extends Error{name=`HiddenPageWheelError`;constructor(){super(`The tab is hidden (or could not be checked) and focus emulation is not available, so Chrome would not answer a wheel event`)}};function c(e,t){return e===`Input.dispatchMouseEvent`?t?.type===`mouseMoved`?`move`:t?.type===`mouseWheel`?`wheel`:null:null}function l(e,t,n,r){return`(() => {
|
|
3
3
|
const dx = ${JSON.stringify(n)}, dy = ${JSON.stringify(r)};
|
|
4
4
|
const canScroll = (el) => {
|
|
5
5
|
const style = getComputedStyle(el);
|
|
@@ -965,4 +965,4 @@ import{t as e}from"./logger-dqckiMJt.js";import{t}from"./preload-helper-BLdHbfdN
|
|
|
965
965
|
this.scrollIntoView({ block: 'center', inline: 'center' });
|
|
966
966
|
const r = this.getBoundingClientRect();
|
|
967
967
|
return { x: r.x, y: r.y, width: r.width, height: r.height };
|
|
968
|
-
}`,returnByValue:!0})).result?.value}async resolveNodeCenter(e){let t=await this.resolveNodeObjectId(e),n=await this.nodeBox(t);if(!n||n.width===0||n.height===0)throw Error(`Element with backend node ${e} has no dimensions`);return{x:n.x+n.width/2,y:n.y+n.height/2}}async boundingBox(e){await this.send(`DOM.enable`);let t=(await this.send(`DOM.getDocument`,{depth:0})).root.nodeId,n;try{n=(await this.send(`DOM.querySelector`,{nodeId:t,selector:e})).nodeId}catch{return null}if(!n)return null;let r=(await this.send(`DOM.getBoxModel`,{nodeId:n})).model;if(!r)return null;let i=r.content;return{x:i[0],y:i[1],width:r.width,height:r.height}}};function I(e,t){if(t.push({frameId:e.frame.id,parentFrameId:e.frame.parentId,url:e.frame.url,name:e.frame.name??``,securityOrigin:e.frame.securityOrigin}),Array.isArray(e.childFrames))for(let n of e.childFrames)I(n,t)}function L(e){let t=e.exceptionDetails;return t?t.exception?.description??t.text:null}function R(e,t){let n=L(e);if(n!==null)throw Error(`${t}: ${n}`);return e.result?.value}function z(e){let t=e instanceof Error?e.message:String(e);return t.includes(`Cannot find context with specified id`)||t.includes(`Execution context was destroyed`)}function B(e){let t={role:O(e.role,`unknown`),name:O(e.name)},n=O(e.value);n!==``&&(t.value=n);let r=O(e.description);return r!==``&&(t.description=r),typeof e.ref==`string`&&/^e[0-9]+$/.test(e.ref)&&(t.ref=e.ref),typeof e.refSeq==`number`&&Number.isSafeInteger(e.refSeq)&&(t.refSeq=e.refSeq),Array.isArray(e.children)&&e.children.length>0&&(t.children=e.children.map(e=>B(e)).filter(e=>e.role!==`unknown`)),t}function V(e){let t=e??{queueDepth:0,tabWaitMs:0,bridgeWaitMs:0,acquisitions:0};return{queueDepth:t.queueDepth,totalWaitMs:t.tabWaitMs+t.bridgeWaitMs,tabWaitMs:t.tabWaitMs,bridgeWaitMs:t.bridgeWaitMs,acquisitions:t.acquisitions}}var H=class{tabLocks=new Map;bridgeLock=Promise.resolve();bridgeHold=null;bridgeWaiters=0;tabLockStats=new Map;getStats(e){if(e!==void 0)return V(this.tabLockStats.get(e));let t={queueDepth:0,tabWaitMs:0,bridgeWaitMs:0,acquisitions:0};for(let e of this.tabLockStats.values())t.queueDepth+=e.queueDepth,t.tabWaitMs+=e.tabWaitMs,t.bridgeWaitMs+=e.bridgeWaitMs,t.acquisitions+=e.acquisitions;return V(t)}countersFor(e){let t=this.tabLockStats.get(e);return t||(t={queueDepth:0,tabWaitMs:0,bridgeWaitMs:0,acquisitions:0},this.tabLockStats.set(e,t)),t}liveOwner(){return this.bridgeHold?.owner}reentrantOwner(e){let t=this.bridgeHold;if(t&&e!==null&&t.targetId===e)return t.owner}async holdTabLock(e,t,n){g(t,`starting a command on tab ${e}`);let r=this.countersFor(e);r.queueDepth+=1;let i;try{i=await this.acquireTabLock(e,r,t)}catch(e){throw--r.queueDepth,e}try{return await n(r)}finally{--r.queueDepth,i()}}async acquireTabLock(e,t,n){let r,i=new Promise(e=>{r=e}),a=this.tabLocks.get(e);this.tabLocks.set(e,i);let o=()=>{this.tabLocks.get(e)===i&&this.tabLocks.delete(e),r()};if(a!=null){let r=Date.now();try{await y(a,n,`queued for the lock on tab ${e}`)}catch(e){throw t.tabWaitMs+=Date.now()-r,a.then(o,o),e}t.tabWaitMs+=Date.now()-r}return o}async acquireBridgeLock(e){if(e?.owner!==void 0&&this.bridgeHold?.owner===e.owner)return()=>void 0;let t,n=new Promise(e=>{t=e}),r=this.bridgeLock,i=this.bridgeHold!==null||this.bridgeWaiters>0;if(this.bridgeLock=n,i){this.bridgeWaiters+=1;let t=Date.now();try{await r}finally{--this.bridgeWaiters}e?.counters&&(e.counters.bridgeWaitMs+=Date.now()-t)}let a={release:t,owner:Symbol(`bridge-hold`),targetId:e?.targetId??null};this.bridgeHold=a;let o=!1;return()=>{o||(o=!0,this.bridgeHold===a&&(this.bridgeHold=null),t())}}async runGlobal(e,t){let n=await this.acquireBridgeLock({owner:this.reentrantOwner(e),targetId:e});try{return await t()}finally{n()}}},U=class{overrides=new Map;get(e){return this.overrides.get(e)}set(e,t){this.overrides.set(e,t)}delete(e){this.overrides.delete(e)}has(e){return this.overrides.has(e)}get size(){return this.overrides.size}},W=e(`browser-api`),G=[`Session with given id not found`,`Target closed`,`No session with given id`,`No tab attached for sessionId`],K=class extends Error{};function q(e){let t=e instanceof Error?e.message:String(e);return G.some(e=>t.includes(e))}var J=class{inner;onApplied;route;onStateChange;constructor(e,t,n){this.inner=e,this.onApplied=t,this.route=n,e.onStateChange&&(this.onStateChange=t=>e.onStateChange(t))}get state(){return this.inner.state}get superseded(){return this.inner.superseded}get isExtensionBridge(){return this.inner.isExtensionBridge}connect(e){return this.inner.connect(e)}disconnect(){this.inner.disconnect()}async send(e,t,n,r){let i=await this.route(this.inner,e,t,n,()=>this.forward(e,t,n,r));return n&&this.onApplied(n),i}forward(e,t,n,r){return r===void 0?this.inner.send(e,t,n):this.inner.send(e,t,n,r)}on(e,t){this.inner.on(e,t)}off(e,t){this.inner.off(e,t)}once(e,t){return this.inner.once(e,t)}},oe=class{client;localClient;sessionId=null;attachedTargetId=null;trayTargetProvider=null;remoteTargetInfo=null;frames=new b;sessions=new ne(32,(e,t)=>{W.debug(`Evicting least-recently-used CDP session`,{targetId:e}),this.detachSession(e,t)});_listenedTransports=new Set;_sessionReplacedSubs=new Map;locks=new H;viewports=new U;hiddenPages=null;hiddenPagesLoad=null;hiddenPagePins=new Map;facadeSessions=new Map;connection=new m;_onSessionChange;handleJavaScriptDialogOpening=e=>{this.dismissJavaScriptDialog(e)};async dismissJavaScriptDialog(e){let t=typeof e.sessionId==`string`?e.sessionId:this.sessionId;if(t)try{await this.transportForSession(t).send(`Page.handleJavaScriptDialog`,{accept:!1},t,5e3),W.warn(`Auto-dismissed unexpected JavaScript dialog`,{sessionId:t,type:e.type,message:e.message,url:e.url})}catch(e){W.warn(`Failed to auto-dismiss JavaScript dialog`,{sessionId:t,error:e instanceof Error?e.message:String(e)})}}handleExecutionContextCreated=e=>{let t=this.eventSessionId(e);if(!t)return;let n=e.context,r=n?.auxData?.frameId;n?.auxData?.isDefault===!0&&r&&typeof n.id==`number`&&this.frames.for(t,`main`).set(r,n.id)};handleExecutionContextDestroyed=e=>{let t=this.eventSessionId(e);if(!t)return;let n=e.executionContextId;if(typeof n!=`number`)return;let r=this.frames.peek(t,`main`);if(r)for(let[e,t]of r)t===n&&r.delete(e)};handleExecutionContextsCleared=e=>{let t=this.eventSessionId(e);t&&this.frames.peek(t,`main`)?.clear()};eventSessionId(e){let t=e.sessionId;return typeof t==`string`?t:this.sessionId}handleDetachedFromTarget=e=>{let t=e.sessionId;if(typeof t!=`string`)return;this.hiddenPages?.forgetSession(t),this.facadeSessions.delete(t);let n=this.sessions.findBySessionId(t);n&&this.forgetSession(n[0],n[1])};handleTargetDestroyed=e=>{let t=e.targetId;if(typeof t!=`string`)return;let n=this.sessions.findByTargetOrLocalId(t)[0];n&&this.forgetSession(n[0],n[1])};constructor(e){this.client=e??new f,this.localClient=this.client,this.addTransportListeners(this.client)}getTransport(){return this.accountedTransportFor(this.client)}getUnderlyingTransport(){return this.client}_accountedTransports=new WeakMap;accountedTransportFor(e){if(e instanceof J)return e;let t=this._accountedTransports.get(e);return t||(t=new J(e,e=>this.noteApplied(e),(e,t,n,r,i)=>this.routeSend(e,t,n,r,i)),this._accountedTransports.set(e,t)),t}noteApplied(e){this.sessions.noteApplied(e)}createHarRecorder(e,t){return new S(t,e)}setSessionChangeCallback(e){this._onSessionChange=e}onSessionReplaced(e,t){let n=this._sessionReplacedSubs.get(e);return n||(n=new Set,this._sessionReplacedSubs.set(e,n)),n.add(t),()=>{let n=this._sessionReplacedSubs.get(e);n&&(n.delete(t),n.size===0&&this._sessionReplacedSubs.delete(e))}}getSessionId(){return this.sessionId}getAttachedTargetId(){return this.attachedTargetId}async withTab(e,t,n){let r=n?.signal;return this.locks.holdTabLock(e,r,async n=>{let i=this.sessions.pin(e);try{return n.acquisitions+=1,await this.runOnTab(e,t,r)}finally{i()}})}async runOnTab(e,t,n){try{return await this.attemptOnTab(e,t,n)}catch(r){if(r instanceof K||!q(r))throw r;return W.warn(`Stale CDP session — re-attaching and retrying once`,{targetId:e,error:r instanceof Error?r.message:String(r)}),this.invalidateSession(e),await this.attemptOnTab(e,t,n)}}async attemptOnTab(e,t,n){let r=await this.attachHandle(e,this.locks.reentrantOwner(e),n);g(n,`about to run a command on tab ${e}`);let i=r.sessionId,a=this.sessions.appliedCount(i);this.hiddenPagePins.set(e,(this.hiddenPagePins.get(e)??0)+1);try{return await t(r)}catch(t){if(!q(t))throw t;let n=this.sessions.appliedCount(i)-a;if(n===0)throw t;this.invalidateSession(e);let r=t instanceof Error?t.message:String(t);throw W.warn(`CDP session reset mid-command — not replaying`,{targetId:e,applied:n,reason:r}),new K(`The CDP session for tab ${e} was reset mid-command, after ${n} command(s) had already been applied, so the outcome is unknown. The tab has been re-armed: check the page state before repeating this command. (underlying error: ${r})`)}finally{await this.unpinHiddenPage(e)}}async unpinHiddenPage(e){let t=(this.hiddenPagePins.get(e)??1)-1;t>0?this.hiddenPagePins.set(e,t):(this.hiddenPagePins.delete(e),await this.hiddenPages?.unpinned(e))}async routeSend(e,t,n,r,i){if(t===`Target.attachToTarget`){let e=await i(),t=e.sessionId,r=n?.targetId;return typeof t==`string`&&typeof r==`string`&&this.facadeSessions.set(t,r),e}if(r===void 0||t!==`Emulation.setFocusEmulationEnabled`&&c(t,n)===null)return i();let a=this.hiddenPages??await this.loadHiddenPages();return a?a.route(e,t,n,r,i):i()}loadHiddenPages(){return this.hiddenPagesLoad??=t(async()=>{let{HiddenPageInput:e}=await import(`./hidden-page-input-IkLF_7ZU.js`);return{HiddenPageInput:e}},__vite__mapDeps([0,1])).then(({HiddenPageInput:e})=>(this.hiddenPages=new e({targetOf:e=>this.sessions.findBySessionId(e)?.[0]??this.facadeSessions.get(e),pinned:e=>this.hiddenPagePins.has(e),isGone:q}),this.hiddenPages),e=>(W.warn(`Hidden-page input gate failed to load; pointer input goes out as is`,{error:e instanceof Error?e.message:String(e)}),this.hiddenPagesLoad=null,null)),this.hiddenPagesLoad}async attachHandle(e,t,n){let r=await this.attachToPageOwned(e,t,n),i=this.sessions.get(e);return new F(this,e,r,this.accountedTransportFor(i?.transport??this.client),n)}handleFor(e,t){return new F(this,e,t.sessionId,this.accountedTransportFor(t.transport))}getTabLockStats(e){return this.locks.getStats(e)}async runGlobal(e,t){return this.locks.runGlobal(e,t)}viewportOverride(e){return this.viewports.get(e)}recordViewportOverride(e,t){this.viewports.set(e,t)}frameContexts(e,t){return this.frames.for(e,t)}dropFrameContexts(e){this.frames.drop(e)}async reapplyViewportOverride(e,t){let n=this.viewports.get(e);if(n)try{await this.handleFor(e,t).applyViewportOverride(n)}catch(t){W.warn(`Failed to re-apply viewport override on re-attach`,{targetId:e,error:t instanceof Error?t.message:String(t)})}}setTrayTargetProvider(e){this.trayTargetProvider=e}async listAllTargets(){let e=await this.listPages();if(!this.trayTargetProvider)return e;let t=!this.remoteTargetInfo,n=new Set(e.map(e=>e.targetId)),r=this.trayTargetProvider.getTargets().filter(e=>!t||!(e.runtimeId===`leader`&&n.has(e.localTargetId))).map(e=>({targetId:e.targetId,title:e.title,url:e.url,kind:e.kind,capabilities:e.capabilities}));return[...e,...r]}async connect(e){await this.connection.connect(this.client,e)}async reconnectIfNeeded(){await this.ensureConnected(),this.client!==this.localClient&&await this.ensureLocalConnected()}primeConnectOptions(e){this.connection.primeConnectOptions(e)}setCdpSupersededHandler(e){this.connection.setSupersededHandler(e)}setCdpBridgeRejectedHandler(e){this.connection.setBridgeRejectedHandler(e)}setCdpConnectFailureClassifier(e){this.connection.setConnectFailureClassifier(e)}async createPage(e){return await this.ensureConnected(),await this.ensureLocalConnected(),(await this.localClient.send(`Target.createTarget`,{url:e??`about:blank`,background:!0})).targetId}async openWindow(e,t={}){await this.ensureConnected(),await this.ensureLocalConnected(),Z(t);let n=t.focus!==!1,r={url:e||`about:blank`,newWindow:!0,background:!n};t.decorated===!1&&(r.decorated=!1);let i=t.state;i&&i!==`normal`?r.windowState=i:(t.width!==void 0&&(r.width=t.width),t.height!==void 0&&(r.height=t.height),t.left!==void 0&&(r.left=t.left),t.top!==void 0&&(r.top=t.top),i&&(r.windowState=i));let a=(await this.localClient.send(`Target.createTarget`,r)).targetId;if(typeof a!=`string`||!a)throw Error(`Target.createTarget did not return a usable targetId`);return a}async getWindowBounds(e){await this.ensureConnected();let t=Q((await(await this.transportForWindowOps(e)).send(`Browser.getWindowForTarget`,{targetId:X(e)})).bounds),n=await this.readDevicePixelRatio(e);return{...t,dpr:n}}async setWindowBounds(e,t){await this.ensureConnected(),Z(t);let n=await this.transportForWindowOps(e),r=X(e),i=await n.send(`Browser.getWindowForTarget`,{targetId:r}),a=i.windowId;if(typeof a!=`number`)throw Error(`Browser.getWindowForTarget did not return a windowId`);let o=Q(i.bounds),s=t.state;(t.left!==void 0||t.top!==void 0||t.width!==void 0||t.height!==void 0)&&o.state!==`normal`&&await n.send(`Browser.setWindowBounds`,{windowId:a,bounds:{windowState:`normal`}});let c={};s&&s!==`normal`?c.windowState=s:(t.left!==void 0&&(c.left=t.left),t.top!==void 0&&(c.top=t.top),t.width!==void 0&&(c.width=t.width),t.height!==void 0&&(c.height=t.height),s&&(c.windowState=s)),await n.send(`Browser.setWindowBounds`,{windowId:a,bounds:c});let l=Q((await n.send(`Browser.getWindowBounds`,{windowId:a})).bounds),u=await this.readDevicePixelRatio(e);return{...l,dpr:u}}async readDevicePixelRatio(e){try{let t=await this.withTab(e,e=>e.evaluate(`window.devicePixelRatio`,{awaitPromise:!1,returnByValue:!0}));return typeof t==`number`&&Number.isFinite(t)&&t>0?t:1}catch{return 1}}async transportForWindowOps(e){if(this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)){let t=e.indexOf(`:`),n=e.substring(0,t),r=e.substring(t+1);return this.trayTargetProvider.createRemoteTransport(n,r)}return await this.ensureLocalConnected(),this.localClient}async createRemotePage(e,t){if(!this.trayTargetProvider?.openRemoteTab)throw Error(`Remote tab opening not available (no tray target provider)`);return this.trayTargetProvider.openRemoteTab(e,t??`about:blank`)}async closePage(e){if(await this.ensureConnected(),this.viewports.delete(e),await this.dropSession(e),this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)){let t=e.indexOf(`:`),n=e.substring(0,t),r=e.substring(t+1);{let e=this.trayTargetProvider.createRemoteTransport(n,r);try{await e.send(`Target.closeTarget`,{targetId:r})}finally{this.trayTargetProvider.removeRemoteTransport&&this.trayTargetProvider.removeRemoteTransport(n,r)}return}}await this.localClient.send(`Target.closeTarget`,{targetId:e})}disconnect(){this.clearSessions(),this.client.disconnect()}async listPages(){return await this.ensureConnected(),await this.ensureLocalConnected(),((await this.localClient.send(`Target.getTargets`)).targetInfos??[]).filter(e=>e.type===`page`).map(e=>({targetId:e.targetId,title:e.title,url:e.url,...e.active?{active:!0}:{}}))}async attachToPage(e){return this.attachToPageOwned(e,this.locks.reentrantOwner(e))}async attachToPageOwned(e,t,n){let r=await this.locks.acquireBridgeLock({owner:t,targetId:e,counters:this.locks.countersFor(e)});try{await this.ensureConnected();let t=this.sessions.get(e);return t?(this.activateSession(e,t),t.sessionId):await(this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)?this.attachRemoteTarget(e,n):this.attachLocalTarget(e,n))}finally{r()}}async selectTab(e){await this.withTab(e,async()=>void 0)}async bringTabToFront(e){await this.withTab(e,e=>e.bringToFront())}async attachRemoteTarget(e,t){let n=e.indexOf(`:`),r=e.substring(0,n),i=e.substring(n+1),a=this.trayTargetProvider?.createRemoteTransport?.(r,i);if(!a)throw Error(`No remote transport for target ${e}`);g(t,`about to attach to tray tab ${e}`);let o={sessionId:(await a.send(`Target.attachToTarget`,{targetId:i,flatten:!0})).sessionId,transport:a,remote:{runtimeId:r,localTargetId:i}};return this.rememberSession(e,o),this.activateSession(e,o),g(t,`about to enable Page on tray tab ${e}`),await a.send(`Page.enable`,{},o.sessionId),g(t,`about to restore the viewport of tray tab ${e}`),await this.reapplyViewportOverride(e,o),this.notifySessionChange(e,o),o.sessionId}async attachLocalTarget(e,t){this.useLocalTransport(),await this.ensureLocalConnected(),g(t,`about to attach to tab ${e}`);let n={sessionId:(await this.localClient.send(`Target.attachToTarget`,{targetId:e,flatten:!0})).sessionId,transport:this.localClient};return this.rememberSession(e,n),this.activateSession(e,n),g(t,`about to enable Page on tab ${e}`),await this.localClient.send(`Page.enable`,{},n.sessionId),g(t,`about to restore the viewport of tab ${e}`),await this.reapplyViewportOverride(e,n),this.notifySessionChange(e,n),n.sessionId}async detach(){let e=this.attachedTargetId;e&&(await this.dropSession(e),this.useLocalTransport())}async wakeCapture(e,t){let n=await this.locks.acquireBridgeLock({owner:this.locks.reentrantOwner(e.targetId),targetId:e.targetId});try{return await this.wakeCaptureLocked(e,t,this.locks.liveOwner())}finally{n()}}async wakeCaptureLocked(e,t,n){let r=e.targetId,i=await this.findFocusedLocalPage(r,n).catch(()=>null),a=await this.attachHandle(r,n);try{return await a.send(`Page.bringToFront`),await a.send(`Page.captureScreenshot`,t)}finally{if(i)try{await(await this.attachHandle(i,n)).send(`Page.bringToFront`),await this.attachToPageOwned(r,n)}catch{}}}async findFocusedLocalPage(e,t){let n=await this.listPages();for(let r of n)if(r.targetId&&r.targetId!==e&&!r.targetId.includes(`:`))try{if(await(await this.attachHandle(r.targetId,t)).evaluate(`document.hasFocus()`)===!0)return r.targetId}catch{}return null}async ensureLocalConnected(){await this.connection.ensureLocalConnected(this.localClient)}async ensureConnected(){await this.connection.ensureConnected({client:this.client,restoreLocalAfterRemoteDrop:()=>{this.remoteTargetInfo&&this.trayTargetProvider?.removeRemoteTransport&&(this.trayTargetProvider.removeRemoteTransport(this.remoteTargetInfo.runtimeId,this.remoteTargetInfo.localTargetId),this.setClient(this.localClient),this.remoteTargetInfo=null)},clearSessionsForTransport:e=>this.clearSessionsForTransport(e),getClient:()=>this.client})}transportForSession(e){return this.sessions.findBySessionId(e)?.[1].transport??this.client}addTransportListeners(e){this._listenedTransports.has(e)||(this._listenedTransports.add(e),e.on(`Page.javascriptDialogOpening`,this.handleJavaScriptDialogOpening),e.on(`Runtime.executionContextCreated`,this.handleExecutionContextCreated),e.on(`Runtime.executionContextDestroyed`,this.handleExecutionContextDestroyed),e.on(`Runtime.executionContextsCleared`,this.handleExecutionContextsCleared),e.on(`Target.detachedFromTarget`,this.handleDetachedFromTarget),e.on(`Target.targetDestroyed`,this.handleTargetDestroyed))}releaseLifecycleTransport(e){e!==this.localClient&&this._listenedTransports.has(e)&&(this.sessions.anyOnTransport(e)||(this._listenedTransports.delete(e),e.off(`Page.javascriptDialogOpening`,this.handleJavaScriptDialogOpening),e.off(`Runtime.executionContextCreated`,this.handleExecutionContextCreated),e.off(`Runtime.executionContextDestroyed`,this.handleExecutionContextDestroyed),e.off(`Runtime.executionContextsCleared`,this.handleExecutionContextsCleared),e.off(`Target.detachedFromTarget`,this.handleDetachedFromTarget),e.off(`Target.targetDestroyed`,this.handleTargetDestroyed)))}setClient(e){this.addTransportListeners(e),this.client=e}useLocalTransport(){let e=this.remoteTargetInfo;this.remoteTargetInfo=null,this.setClient(this.localClient),e&&(this.sessions.anyMatchingRemote(e.runtimeId,e.localTargetId)||this.trayTargetProvider?.removeRemoteTransport?.(e.runtimeId,e.localTargetId))}rememberSession(e,t){this.addTransportListeners(t.transport),this.sessions.remember(e,t)}activateSession(e,t){t.remote?(this.setClient(t.transport),this.remoteTargetInfo={...t.remote}):this.client!==t.transport&&this.useLocalTransport(),this.sessionId=t.sessionId,this.attachedTargetId=e,this.sessions.touch(e,t)}notifySessionChange(e,t){let n=this.accountedTransportFor(t.transport);this._onSessionChange?.(t.sessionId,n,e);let r=this._sessionReplacedSubs.get(e);if(r)for(let i of[...r])try{i(t.sessionId,n,e)}catch(t){W.warn(`session-replaced subscriber threw`,{targetId:e,error:t instanceof Error?t.message:String(t)})}}forgetSession(e,t){this.unregisterSession(e),this.disposeSessionTransport(t)}unregisterSession(e){let t=this.sessions.get(e);t&&this.dropFrameContexts(t.sessionId),this.sessions.delete(e),this.attachedTargetId===e&&(this.sessionId=null,this.attachedTargetId=null)}disposeSessionTransport(e){this.releaseLifecycleTransport(e.transport),e.remote&&(this.sessions.anyMatchingRemote(e.remote.runtimeId,e.remote.localTargetId)||this.trayTargetProvider?.removeRemoteTransport?.(e.remote.runtimeId,e.remote.localTargetId))}async detachSession(e,t){this.unregisterSession(e);try{await t.transport.send(`Target.detachFromTarget`,{sessionId:t.sessionId})}catch{}finally{this.disposeSessionTransport(t)}}async dropSession(e){let t=this.sessions.get(e);t?await this.detachSession(e,t):this.attachedTargetId===e&&(this.sessionId=null,this.attachedTargetId=null)}invalidateSession(e){let t=this.sessions.get(e);t&&this.forgetSession(e,t)}clearSessionsForTransport(e){for(let[t,n]of this.sessions.snapshot())n.transport===e&&this.forgetSession(t,n)}clearSessions(){for(let[e,t]of this.sessions.snapshot())this.forgetSession(e,t);this.sessions.clear(),this.sessionId=null,this.attachedTargetId=null}},Y=new Set([`normal`,`minimized`,`maximized`,`fullscreen`]);function X(e){let t=e.indexOf(`:`);return t>=0?e.substring(t+1):e}function Z(e){let t=e.state;if(t&&t!==`normal`){if(!Y.has(t))throw Error(`window state must be one of ${[...Y].join(`|`)} (got ${JSON.stringify(t)})`);if(e.left!==void 0||e.top!==void 0||e.width!==void 0||e.height!==void 0)throw Error(`window state '${t}' cannot be combined with left/top/width/height (chrome.windows + CDP both reject the mix)`)}}function se(e){return typeof e==`object`&&!!e}function Q(e){let t=se(e)?e:{},n=t.windowState??t.state,r=typeof n==`string`&&Y.has(n)?n:`normal`;return{left:$(t.left,0),top:$(t.top,0),width:$(t.width,0),height:$(t.height,0),state:r}}function $(e,t){return typeof e==`number`&&Number.isFinite(e)?e:t}export{oe as BrowserAPI,c as n,s as t};
|
|
968
|
+
}`,returnByValue:!0})).result?.value}async resolveNodeCenter(e){let t=await this.resolveNodeObjectId(e),n=await this.nodeBox(t);if(!n||n.width===0||n.height===0)throw Error(`Element with backend node ${e} has no dimensions`);return{x:n.x+n.width/2,y:n.y+n.height/2}}async boundingBox(e){await this.send(`DOM.enable`);let t=(await this.send(`DOM.getDocument`,{depth:0})).root.nodeId,n;try{n=(await this.send(`DOM.querySelector`,{nodeId:t,selector:e})).nodeId}catch{return null}if(!n)return null;let r=(await this.send(`DOM.getBoxModel`,{nodeId:n})).model;if(!r)return null;let i=r.content;return{x:i[0],y:i[1],width:r.width,height:r.height}}};function I(e,t){if(t.push({frameId:e.frame.id,parentFrameId:e.frame.parentId,url:e.frame.url,name:e.frame.name??``,securityOrigin:e.frame.securityOrigin}),Array.isArray(e.childFrames))for(let n of e.childFrames)I(n,t)}function L(e){let t=e.exceptionDetails;return t?t.exception?.description??t.text:null}function R(e,t){let n=L(e);if(n!==null)throw Error(`${t}: ${n}`);return e.result?.value}function z(e){let t=e instanceof Error?e.message:String(e);return t.includes(`Cannot find context with specified id`)||t.includes(`Execution context was destroyed`)}function B(e){let t={role:O(e.role,`unknown`),name:O(e.name)},n=O(e.value);n!==``&&(t.value=n);let r=O(e.description);return r!==``&&(t.description=r),typeof e.ref==`string`&&/^e[0-9]+$/.test(e.ref)&&(t.ref=e.ref),typeof e.refSeq==`number`&&Number.isSafeInteger(e.refSeq)&&(t.refSeq=e.refSeq),Array.isArray(e.children)&&e.children.length>0&&(t.children=e.children.map(e=>B(e)).filter(e=>e.role!==`unknown`)),t}function V(e){let t=e??{queueDepth:0,tabWaitMs:0,bridgeWaitMs:0,acquisitions:0};return{queueDepth:t.queueDepth,totalWaitMs:t.tabWaitMs+t.bridgeWaitMs,tabWaitMs:t.tabWaitMs,bridgeWaitMs:t.bridgeWaitMs,acquisitions:t.acquisitions}}var H=class{tabLocks=new Map;bridgeLock=Promise.resolve();bridgeHold=null;bridgeWaiters=0;tabLockStats=new Map;getStats(e){if(e!==void 0)return V(this.tabLockStats.get(e));let t={queueDepth:0,tabWaitMs:0,bridgeWaitMs:0,acquisitions:0};for(let e of this.tabLockStats.values())t.queueDepth+=e.queueDepth,t.tabWaitMs+=e.tabWaitMs,t.bridgeWaitMs+=e.bridgeWaitMs,t.acquisitions+=e.acquisitions;return V(t)}countersFor(e){let t=this.tabLockStats.get(e);return t||(t={queueDepth:0,tabWaitMs:0,bridgeWaitMs:0,acquisitions:0},this.tabLockStats.set(e,t)),t}liveOwner(){return this.bridgeHold?.owner}reentrantOwner(e){let t=this.bridgeHold;if(t&&e!==null&&t.targetId===e)return t.owner}async holdTabLock(e,t,n){g(t,`starting a command on tab ${e}`);let r=this.countersFor(e);r.queueDepth+=1;let i;try{i=await this.acquireTabLock(e,r,t)}catch(e){throw--r.queueDepth,e}try{return await n(r)}finally{--r.queueDepth,i()}}async acquireTabLock(e,t,n){let r,i=new Promise(e=>{r=e}),a=this.tabLocks.get(e);this.tabLocks.set(e,i);let o=()=>{this.tabLocks.get(e)===i&&this.tabLocks.delete(e),r()};if(a!=null){let r=Date.now();try{await y(a,n,`queued for the lock on tab ${e}`)}catch(e){throw t.tabWaitMs+=Date.now()-r,a.then(o,o),e}t.tabWaitMs+=Date.now()-r}return o}async acquireBridgeLock(e){if(e?.owner!==void 0&&this.bridgeHold?.owner===e.owner)return()=>void 0;let t,n=new Promise(e=>{t=e}),r=this.bridgeLock,i=this.bridgeHold!==null||this.bridgeWaiters>0;if(this.bridgeLock=n,i){this.bridgeWaiters+=1;let t=Date.now();try{await r}finally{--this.bridgeWaiters}e?.counters&&(e.counters.bridgeWaitMs+=Date.now()-t)}let a={release:t,owner:Symbol(`bridge-hold`),targetId:e?.targetId??null};this.bridgeHold=a;let o=!1;return()=>{o||(o=!0,this.bridgeHold===a&&(this.bridgeHold=null),t())}}async runGlobal(e,t){let n=await this.acquireBridgeLock({owner:this.reentrantOwner(e),targetId:e});try{return await t()}finally{n()}}},U=class{overrides=new Map;get(e){return this.overrides.get(e)}set(e,t){this.overrides.set(e,t)}delete(e){this.overrides.delete(e)}has(e){return this.overrides.has(e)}get size(){return this.overrides.size}},W=e(`browser-api`),G=[`Session with given id not found`,`Target closed`,`No session with given id`,`No tab attached for sessionId`],K=class extends Error{};function q(e){let t=e instanceof Error?e.message:String(e);return G.some(e=>t.includes(e))}var J=class{inner;onApplied;route;onStateChange;constructor(e,t,n){this.inner=e,this.onApplied=t,this.route=n,e.onStateChange&&(this.onStateChange=t=>e.onStateChange(t))}get state(){return this.inner.state}get superseded(){return this.inner.superseded}get isExtensionBridge(){return this.inner.isExtensionBridge}connect(e){return this.inner.connect(e)}disconnect(){this.inner.disconnect()}async send(e,t,n,r){let i=await this.route(this.inner,e,t,n,()=>this.forward(e,t,n,r));return n&&this.onApplied(n),i}forward(e,t,n,r){return r===void 0?this.inner.send(e,t,n):this.inner.send(e,t,n,r)}on(e,t){this.inner.on(e,t)}off(e,t){this.inner.off(e,t)}once(e,t){return this.inner.once(e,t)}},oe=class{client;localClient;sessionId=null;attachedTargetId=null;trayTargetProvider=null;remoteTargetInfo=null;frames=new b;sessions=new ne(32,(e,t)=>{W.debug(`Evicting least-recently-used CDP session`,{targetId:e}),this.detachSession(e,t)});_listenedTransports=new Set;_sessionReplacedSubs=new Map;locks=new H;viewports=new U;hiddenPages=null;hiddenPagesLoad=null;hiddenPagePins=new Map;facadeSessions=new Map;connection=new m;_onSessionChange;handleJavaScriptDialogOpening=e=>{this.dismissJavaScriptDialog(e)};async dismissJavaScriptDialog(e){let t=typeof e.sessionId==`string`?e.sessionId:this.sessionId;if(t)try{await this.transportForSession(t).send(`Page.handleJavaScriptDialog`,{accept:!1},t,5e3),W.warn(`Auto-dismissed unexpected JavaScript dialog`,{sessionId:t,type:e.type,message:e.message,url:e.url})}catch(e){W.warn(`Failed to auto-dismiss JavaScript dialog`,{sessionId:t,error:e instanceof Error?e.message:String(e)})}}handleExecutionContextCreated=e=>{let t=this.eventSessionId(e);if(!t)return;let n=e.context,r=n?.auxData?.frameId;n?.auxData?.isDefault===!0&&r&&typeof n.id==`number`&&this.frames.for(t,`main`).set(r,n.id)};handleExecutionContextDestroyed=e=>{let t=this.eventSessionId(e);if(!t)return;let n=e.executionContextId;if(typeof n!=`number`)return;let r=this.frames.peek(t,`main`);if(r)for(let[e,t]of r)t===n&&r.delete(e)};handleExecutionContextsCleared=e=>{let t=this.eventSessionId(e);t&&this.frames.peek(t,`main`)?.clear()};eventSessionId(e){let t=e.sessionId;return typeof t==`string`?t:this.sessionId}handleDetachedFromTarget=e=>{let t=e.sessionId;if(typeof t!=`string`)return;this.hiddenPages?.forgetSession(t),this.facadeSessions.delete(t);let n=this.sessions.findBySessionId(t);n&&this.forgetSession(n[0],n[1])};handleTargetDestroyed=e=>{let t=e.targetId;if(typeof t!=`string`)return;let n=this.sessions.findByTargetOrLocalId(t)[0];n&&this.forgetSession(n[0],n[1])};constructor(e){this.client=e??new f,this.localClient=this.client,this.addTransportListeners(this.client)}getTransport(){return this.accountedTransportFor(this.client)}getUnderlyingTransport(){return this.client}_accountedTransports=new WeakMap;accountedTransportFor(e){if(e instanceof J)return e;let t=this._accountedTransports.get(e);return t||(t=new J(e,e=>this.noteApplied(e),(e,t,n,r,i)=>this.routeSend(e,t,n,r,i)),this._accountedTransports.set(e,t)),t}noteApplied(e){this.sessions.noteApplied(e)}createHarRecorder(e,t){return new S(t,e)}setSessionChangeCallback(e){this._onSessionChange=e}onSessionReplaced(e,t){let n=this._sessionReplacedSubs.get(e);return n||(n=new Set,this._sessionReplacedSubs.set(e,n)),n.add(t),()=>{let n=this._sessionReplacedSubs.get(e);n&&(n.delete(t),n.size===0&&this._sessionReplacedSubs.delete(e))}}getSessionId(){return this.sessionId}getAttachedTargetId(){return this.attachedTargetId}async withTab(e,t,n){let r=n?.signal;return this.locks.holdTabLock(e,r,async n=>{let i=this.sessions.pin(e);try{return n.acquisitions+=1,await this.runOnTab(e,t,r)}finally{i()}})}async runOnTab(e,t,n){try{return await this.attemptOnTab(e,t,n)}catch(r){if(r instanceof K||!q(r))throw r;return W.warn(`Stale CDP session — re-attaching and retrying once`,{targetId:e,error:r instanceof Error?r.message:String(r)}),this.invalidateSession(e),await this.attemptOnTab(e,t,n)}}async attemptOnTab(e,t,n){let r=await this.attachHandle(e,this.locks.reentrantOwner(e),n);g(n,`about to run a command on tab ${e}`);let i=r.sessionId,a=this.sessions.appliedCount(i);this.hiddenPagePins.set(e,(this.hiddenPagePins.get(e)??0)+1);try{return await t(r)}catch(t){if(!q(t))throw t;let n=this.sessions.appliedCount(i)-a;if(n===0)throw t;this.invalidateSession(e);let r=t instanceof Error?t.message:String(t);throw W.warn(`CDP session reset mid-command — not replaying`,{targetId:e,applied:n,reason:r}),new K(`The CDP session for tab ${e} was reset mid-command, after ${n} command(s) had already been applied, so the outcome is unknown. The tab has been re-armed: check the page state before repeating this command. (underlying error: ${r})`)}finally{await this.unpinHiddenPage(e)}}async unpinHiddenPage(e){let t=(this.hiddenPagePins.get(e)??1)-1;t>0?this.hiddenPagePins.set(e,t):(this.hiddenPagePins.delete(e),await this.hiddenPages?.unpinned(e))}async routeSend(e,t,n,r,i){if(t===`Target.attachToTarget`){let e=await i(),t=e.sessionId,r=n?.targetId;return typeof t==`string`&&typeof r==`string`&&this.facadeSessions.set(t,r),e}if(r===void 0||t!==`Emulation.setFocusEmulationEnabled`&&c(t,n)===null)return i();let a=this.hiddenPages??await this.loadHiddenPages();return a?a.route(e,t,n,r,i):i()}loadHiddenPages(){return this.hiddenPagesLoad??=t(async()=>{let{HiddenPageInput:e}=await import(`./hidden-page-input-CIKwo-BX.js`);return{HiddenPageInput:e}},__vite__mapDeps([0,1])).then(({HiddenPageInput:e})=>(this.hiddenPages=new e({targetOf:e=>this.sessions.findBySessionId(e)?.[0]??this.facadeSessions.get(e),pinned:e=>this.hiddenPagePins.has(e),isGone:q}),this.hiddenPages),e=>(W.warn(`Hidden-page input gate failed to load; pointer input goes out as is`,{error:e instanceof Error?e.message:String(e)}),this.hiddenPagesLoad=null,null)),this.hiddenPagesLoad}async attachHandle(e,t,n){let r=await this.attachToPageOwned(e,t,n),i=this.sessions.get(e);return new F(this,e,r,this.accountedTransportFor(i?.transport??this.client),n)}handleFor(e,t){return new F(this,e,t.sessionId,this.accountedTransportFor(t.transport))}getTabLockStats(e){return this.locks.getStats(e)}async runGlobal(e,t){return this.locks.runGlobal(e,t)}viewportOverride(e){return this.viewports.get(e)}recordViewportOverride(e,t){this.viewports.set(e,t)}frameContexts(e,t){return this.frames.for(e,t)}dropFrameContexts(e){this.frames.drop(e)}async reapplyViewportOverride(e,t){let n=this.viewports.get(e);if(n)try{await this.handleFor(e,t).applyViewportOverride(n)}catch(t){W.warn(`Failed to re-apply viewport override on re-attach`,{targetId:e,error:t instanceof Error?t.message:String(t)})}}setTrayTargetProvider(e){this.trayTargetProvider=e}async listAllTargets(){let e=await this.listPages();if(!this.trayTargetProvider)return e;let t=!this.remoteTargetInfo,n=new Set(e.map(e=>e.targetId)),r=this.trayTargetProvider.getTargets().filter(e=>!t||!(e.runtimeId===`leader`&&n.has(e.localTargetId))).map(e=>({targetId:e.targetId,title:e.title,url:e.url,kind:e.kind,capabilities:e.capabilities}));return[...e,...r]}async connect(e){await this.connection.connect(this.client,e)}async reconnectIfNeeded(){await this.ensureConnected(),this.client!==this.localClient&&await this.ensureLocalConnected()}primeConnectOptions(e){this.connection.primeConnectOptions(e)}setCdpSupersededHandler(e){this.connection.setSupersededHandler(e)}setCdpBridgeRejectedHandler(e){this.connection.setBridgeRejectedHandler(e)}setCdpConnectFailureClassifier(e){this.connection.setConnectFailureClassifier(e)}async createPage(e){return await this.ensureConnected(),await this.ensureLocalConnected(),(await this.localClient.send(`Target.createTarget`,{url:e??`about:blank`,background:!0})).targetId}async openWindow(e,t={}){await this.ensureConnected(),await this.ensureLocalConnected(),Z(t);let n=t.focus!==!1,r={url:e||`about:blank`,newWindow:!0,background:!n};t.decorated===!1&&(r.decorated=!1);let i=t.state;i&&i!==`normal`?r.windowState=i:(t.width!==void 0&&(r.width=t.width),t.height!==void 0&&(r.height=t.height),t.left!==void 0&&(r.left=t.left),t.top!==void 0&&(r.top=t.top),i&&(r.windowState=i));let a=(await this.localClient.send(`Target.createTarget`,r)).targetId;if(typeof a!=`string`||!a)throw Error(`Target.createTarget did not return a usable targetId`);return a}async getWindowBounds(e){await this.ensureConnected();let t=Q((await(await this.transportForWindowOps(e)).send(`Browser.getWindowForTarget`,{targetId:X(e)})).bounds),n=await this.readDevicePixelRatio(e);return{...t,dpr:n}}async setWindowBounds(e,t){await this.ensureConnected(),Z(t);let n=await this.transportForWindowOps(e),r=X(e),i=await n.send(`Browser.getWindowForTarget`,{targetId:r}),a=i.windowId;if(typeof a!=`number`)throw Error(`Browser.getWindowForTarget did not return a windowId`);let o=Q(i.bounds),s=t.state;(t.left!==void 0||t.top!==void 0||t.width!==void 0||t.height!==void 0)&&o.state!==`normal`&&await n.send(`Browser.setWindowBounds`,{windowId:a,bounds:{windowState:`normal`}});let c={};s&&s!==`normal`?c.windowState=s:(t.left!==void 0&&(c.left=t.left),t.top!==void 0&&(c.top=t.top),t.width!==void 0&&(c.width=t.width),t.height!==void 0&&(c.height=t.height),s&&(c.windowState=s)),await n.send(`Browser.setWindowBounds`,{windowId:a,bounds:c});let l=Q((await n.send(`Browser.getWindowBounds`,{windowId:a})).bounds),u=await this.readDevicePixelRatio(e);return{...l,dpr:u}}async readDevicePixelRatio(e){try{let t=await this.withTab(e,e=>e.evaluate(`window.devicePixelRatio`,{awaitPromise:!1,returnByValue:!0}));return typeof t==`number`&&Number.isFinite(t)&&t>0?t:1}catch{return 1}}async transportForWindowOps(e){if(this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)){let t=e.indexOf(`:`),n=e.substring(0,t),r=e.substring(t+1);return this.trayTargetProvider.createRemoteTransport(n,r)}return await this.ensureLocalConnected(),this.localClient}async createRemotePage(e,t){if(!this.trayTargetProvider?.openRemoteTab)throw Error(`Remote tab opening not available (no tray target provider)`);return this.trayTargetProvider.openRemoteTab(e,t??`about:blank`)}async closePage(e){if(await this.ensureConnected(),this.viewports.delete(e),await this.dropSession(e),this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)){let t=e.indexOf(`:`),n=e.substring(0,t),r=e.substring(t+1);{let e=this.trayTargetProvider.createRemoteTransport(n,r);try{await e.send(`Target.closeTarget`,{targetId:r})}finally{this.trayTargetProvider.removeRemoteTransport&&this.trayTargetProvider.removeRemoteTransport(n,r)}return}}await this.localClient.send(`Target.closeTarget`,{targetId:e})}disconnect(){this.clearSessions(),this.client.disconnect()}async listPages(){return await this.ensureConnected(),await this.ensureLocalConnected(),((await this.localClient.send(`Target.getTargets`)).targetInfos??[]).filter(e=>e.type===`page`).map(e=>({targetId:e.targetId,title:e.title,url:e.url,...e.active?{active:!0}:{}}))}async attachToPage(e){return this.attachToPageOwned(e,this.locks.reentrantOwner(e))}async attachToPageOwned(e,t,n){let r=await this.locks.acquireBridgeLock({owner:t,targetId:e,counters:this.locks.countersFor(e)});try{await this.ensureConnected();let t=this.sessions.get(e);return t?(this.activateSession(e,t),t.sessionId):await(this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)?this.attachRemoteTarget(e,n):this.attachLocalTarget(e,n))}finally{r()}}async selectTab(e){await this.withTab(e,async()=>void 0)}async bringTabToFront(e){await this.withTab(e,e=>e.bringToFront())}async attachRemoteTarget(e,t){let n=e.indexOf(`:`),r=e.substring(0,n),i=e.substring(n+1),a=this.trayTargetProvider?.createRemoteTransport?.(r,i);if(!a)throw Error(`No remote transport for target ${e}`);g(t,`about to attach to tray tab ${e}`);let o={sessionId:(await a.send(`Target.attachToTarget`,{targetId:i,flatten:!0})).sessionId,transport:a,remote:{runtimeId:r,localTargetId:i}};return this.rememberSession(e,o),this.activateSession(e,o),g(t,`about to enable Page on tray tab ${e}`),await a.send(`Page.enable`,{},o.sessionId),g(t,`about to restore the viewport of tray tab ${e}`),await this.reapplyViewportOverride(e,o),this.notifySessionChange(e,o),o.sessionId}async attachLocalTarget(e,t){this.useLocalTransport(),await this.ensureLocalConnected(),g(t,`about to attach to tab ${e}`);let n={sessionId:(await this.localClient.send(`Target.attachToTarget`,{targetId:e,flatten:!0})).sessionId,transport:this.localClient};return this.rememberSession(e,n),this.activateSession(e,n),g(t,`about to enable Page on tab ${e}`),await this.localClient.send(`Page.enable`,{},n.sessionId),g(t,`about to restore the viewport of tab ${e}`),await this.reapplyViewportOverride(e,n),this.notifySessionChange(e,n),n.sessionId}async detach(){let e=this.attachedTargetId;e&&(await this.dropSession(e),this.useLocalTransport())}async wakeCapture(e,t){let n=await this.locks.acquireBridgeLock({owner:this.locks.reentrantOwner(e.targetId),targetId:e.targetId});try{return await this.wakeCaptureLocked(e,t,this.locks.liveOwner())}finally{n()}}async wakeCaptureLocked(e,t,n){let r=e.targetId,i=await this.findFocusedLocalPage(r,n).catch(()=>null),a=await this.attachHandle(r,n);try{return await a.send(`Page.bringToFront`),await a.send(`Page.captureScreenshot`,t)}finally{if(i)try{await(await this.attachHandle(i,n)).send(`Page.bringToFront`),await this.attachToPageOwned(r,n)}catch{}}}async findFocusedLocalPage(e,t){let n=await this.listPages();for(let r of n)if(r.targetId&&r.targetId!==e&&!r.targetId.includes(`:`))try{if(await(await this.attachHandle(r.targetId,t)).evaluate(`document.hasFocus()`)===!0)return r.targetId}catch{}return null}async ensureLocalConnected(){await this.connection.ensureLocalConnected(this.localClient)}async ensureConnected(){await this.connection.ensureConnected({client:this.client,restoreLocalAfterRemoteDrop:()=>{this.remoteTargetInfo&&this.trayTargetProvider?.removeRemoteTransport&&(this.trayTargetProvider.removeRemoteTransport(this.remoteTargetInfo.runtimeId,this.remoteTargetInfo.localTargetId),this.setClient(this.localClient),this.remoteTargetInfo=null)},clearSessionsForTransport:e=>this.clearSessionsForTransport(e),getClient:()=>this.client})}transportForSession(e){return this.sessions.findBySessionId(e)?.[1].transport??this.client}addTransportListeners(e){this._listenedTransports.has(e)||(this._listenedTransports.add(e),e.on(`Page.javascriptDialogOpening`,this.handleJavaScriptDialogOpening),e.on(`Runtime.executionContextCreated`,this.handleExecutionContextCreated),e.on(`Runtime.executionContextDestroyed`,this.handleExecutionContextDestroyed),e.on(`Runtime.executionContextsCleared`,this.handleExecutionContextsCleared),e.on(`Target.detachedFromTarget`,this.handleDetachedFromTarget),e.on(`Target.targetDestroyed`,this.handleTargetDestroyed))}releaseLifecycleTransport(e){e!==this.localClient&&this._listenedTransports.has(e)&&(this.sessions.anyOnTransport(e)||(this._listenedTransports.delete(e),e.off(`Page.javascriptDialogOpening`,this.handleJavaScriptDialogOpening),e.off(`Runtime.executionContextCreated`,this.handleExecutionContextCreated),e.off(`Runtime.executionContextDestroyed`,this.handleExecutionContextDestroyed),e.off(`Runtime.executionContextsCleared`,this.handleExecutionContextsCleared),e.off(`Target.detachedFromTarget`,this.handleDetachedFromTarget),e.off(`Target.targetDestroyed`,this.handleTargetDestroyed)))}setClient(e){this.addTransportListeners(e),this.client=e}useLocalTransport(){let e=this.remoteTargetInfo;this.remoteTargetInfo=null,this.setClient(this.localClient),e&&(this.sessions.anyMatchingRemote(e.runtimeId,e.localTargetId)||this.trayTargetProvider?.removeRemoteTransport?.(e.runtimeId,e.localTargetId))}rememberSession(e,t){this.addTransportListeners(t.transport),this.sessions.remember(e,t)}activateSession(e,t){t.remote?(this.setClient(t.transport),this.remoteTargetInfo={...t.remote}):this.client!==t.transport&&this.useLocalTransport(),this.sessionId=t.sessionId,this.attachedTargetId=e,this.sessions.touch(e,t)}notifySessionChange(e,t){let n=this.accountedTransportFor(t.transport);this._onSessionChange?.(t.sessionId,n,e);let r=this._sessionReplacedSubs.get(e);if(r)for(let i of[...r])try{i(t.sessionId,n,e)}catch(t){W.warn(`session-replaced subscriber threw`,{targetId:e,error:t instanceof Error?t.message:String(t)})}}forgetSession(e,t){this.unregisterSession(e),this.disposeSessionTransport(t)}unregisterSession(e){let t=this.sessions.get(e);t&&this.dropFrameContexts(t.sessionId),this.sessions.delete(e),this.attachedTargetId===e&&(this.sessionId=null,this.attachedTargetId=null)}disposeSessionTransport(e){this.releaseLifecycleTransport(e.transport),e.remote&&(this.sessions.anyMatchingRemote(e.remote.runtimeId,e.remote.localTargetId)||this.trayTargetProvider?.removeRemoteTransport?.(e.remote.runtimeId,e.remote.localTargetId))}async detachSession(e,t){this.unregisterSession(e);try{await t.transport.send(`Target.detachFromTarget`,{sessionId:t.sessionId})}catch{}finally{this.disposeSessionTransport(t)}}async dropSession(e){let t=this.sessions.get(e);t?await this.detachSession(e,t):this.attachedTargetId===e&&(this.sessionId=null,this.attachedTargetId=null)}invalidateSession(e){let t=this.sessions.get(e);t&&this.forgetSession(e,t)}clearSessionsForTransport(e){for(let[t,n]of this.sessions.snapshot())n.transport===e&&this.forgetSession(t,n)}clearSessions(){for(let[e,t]of this.sessions.snapshot())this.forgetSession(e,t);this.sessions.clear(),this.sessionId=null,this.attachedTargetId=null}},Y=new Set([`normal`,`minimized`,`maximized`,`fullscreen`]);function X(e){let t=e.indexOf(`:`);return t>=0?e.substring(t+1):e}function Z(e){let t=e.state;if(t&&t!==`normal`){if(!Y.has(t))throw Error(`window state must be one of ${[...Y].join(`|`)} (got ${JSON.stringify(t)})`);if(e.left!==void 0||e.top!==void 0||e.width!==void 0||e.height!==void 0)throw Error(`window state '${t}' cannot be combined with left/top/width/height (chrome.windows + CDP both reject the mix)`)}}function se(e){return typeof e==`object`&&!!e}function Q(e){let t=se(e)?e:{},n=t.windowState??t.state,r=typeof n==`string`&&Y.has(n)?n:`normal`;return{left:$(t.left,0),top:$(t.top,0),width:$(t.width,0),height:$(t.height,0),state:r}}function $(e,t){return typeof e==`number`&&Number.isFinite(e)?e:t}export{oe as BrowserAPI,c as n,s as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./account-store-
|
|
1
|
+
import{a as e}from"./account-store-CcZuCy3S.js";import{a as t}from"./diagnostics-B-5VkVir.js";import{a as n}from"./compat-DHy2gvsm.js";import{r,s as i}from"./legacy-api-aliases-B0akSlax.js";import{n as a}from"./pi-transcript-context-CqzDeqHB.js";const o=`cerebras`,s=`https://api.cerebras.ai/v1`,c=`openai-completions`,l=`${o}-openai`,u=`slicc-cerebras-models`;let d=[];const f=[{id:`gpt-oss-120b`,name:`GPT OSS 120B`,api:`openai`,reasoning:!0,input:[`text`],context_window:131072,max_tokens:40960},{id:`gemma-4-31b`,name:`Gemma 4 31B`,api:`openai`,reasoning:!1,input:[`text`,`image`],context_window:131072,max_tokens:40960},{id:`zai-glm-4.7`,name:`Z.AI GLM-4.7`,api:`openai`,reasoning:!1,input:[`text`],context_window:131072,max_tokens:40960}];function p(e){try{localStorage.setItem(u,JSON.stringify(e))}catch{}}function m(){try{let e=localStorage.getItem(u);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)&&t.length>0?t:[]}catch{return[]}}function h(e){let t=e.id??``,n=f.find(e=>e.id===t);return{id:t,name:e.name??n?.name??t,api:`openai`,reasoning:e.capabilities?.reasoning??n?.reasoning??!1,input:e.capabilities?.vision?[`text`,`image`]:n?.input??[`text`],context_window:e.limits?.max_context_length??n?.context_window??8192,max_tokens:e.limits?.max_completion_tokens??n?.max_tokens??4096}}async function g(e){let t=await fetch(`${s}/models`,{headers:{Authorization:`Bearer ${e}`}});if(!t.ok)throw Error(`GET /v1/models → ${t.status} ${t.statusText}`);let n=((await t.json()).data??[]).map(h).filter(e=>e.id.length>0);n.length>0&&(d=n,p(n))}function _(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:l,provider:o,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}function v(e){console.error(`[cerebras] Stream error:`,e instanceof Error?e.message:String(e))}const y=(e,n,r={})=>{let i=t();return b(i,e,n,r).catch(v),i};async function b(e,t,n,i){try{let o={...t,baseUrl:s,api:c},l=r(o,a(n),i);for await(let t of l)e.push(t);e.end()}catch(n){v(n),e.push(_(t,n)),e.end()}}const x=(e,n,r)=>{let i=t();return S(i,e,n,r).catch(v),i};async function S(e,t,n,r){try{let o={...t,baseUrl:s,api:c},l=i(o,a(n),r);for await(let t of l)e.push(t);e.end()}catch(n){v(n),e.push(_(t,n)),e.end()}}const C={id:o,name:`Cerebras`,description:`Ultra-fast inference on Cerebras hardware. Get an API key at cloud.cerebras.ai.`,requiresApiKey:!0,requiresBaseUrl:!1,getModelIds:()=>{if(d.length>0)return d;let e=m();return e.length>0?e:f},refreshModels:async t=>{let n=t??e(o)??``;if(n)try{await g(n)}catch(e){console.warn(`[cerebras] Failed to refresh model list:`,e instanceof Error?e.message:String(e))}}};function w(){n({api:l,stream:y,streamSimple:x})}export{C as config,w as register};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,v as t}from"./core-eNeHeyA9.js";import{r as n,s as r}from"./legacy-api-aliases-BiW3Sxkn.js";import{h as i}from"./account-store-
|
|
1
|
+
import{$ as e,v as t}from"./core-eNeHeyA9.js";import{r as n,s as r}from"./legacy-api-aliases-BiW3Sxkn.js";import{h as i}from"./account-store-BGnbKLs5.js";import{n as a}from"./pi-transcript-context-D1WTGdHV.js";var o=`cerebras`,s=`https://api.cerebras.ai/v1`,c=`openai-completions`,l=`${o}-openai`,u=`slicc-cerebras-models`,d=[],f=[{id:`gpt-oss-120b`,name:`GPT OSS 120B`,api:`openai`,reasoning:!0,input:[`text`],context_window:131072,max_tokens:40960},{id:`gemma-4-31b`,name:`Gemma 4 31B`,api:`openai`,reasoning:!1,input:[`text`,`image`],context_window:131072,max_tokens:40960},{id:`zai-glm-4.7`,name:`Z.AI GLM-4.7`,api:`openai`,reasoning:!1,input:[`text`],context_window:131072,max_tokens:40960}];function p(e){try{localStorage.setItem(u,JSON.stringify(e))}catch{}}function m(){try{let e=localStorage.getItem(u);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)&&t.length>0?t:[]}catch{return[]}}function h(e){let t=e.id??``,n=f.find(e=>e.id===t);return{id:t,name:e.name??n?.name??t,api:`openai`,reasoning:e.capabilities?.reasoning??n?.reasoning??!1,input:e.capabilities?.vision?[`text`,`image`]:n?.input??[`text`],context_window:e.limits?.max_context_length??n?.context_window??8192,max_tokens:e.limits?.max_completion_tokens??n?.max_tokens??4096}}async function g(e){let t=await fetch(`${s}/models`,{headers:{Authorization:`Bearer ${e}`}});if(!t.ok)throw Error(`GET /v1/models → ${t.status} ${t.statusText}`);let n=((await t.json()).data??[]).map(h).filter(e=>e.id.length>0);n.length>0&&(d=n,p(n))}function _(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:l,provider:o,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}function v(e){console.error(`[cerebras] Stream error:`,e instanceof Error?e.message:String(e))}var y=(t,n,r={})=>{let i=e();return b(i,t,n,r).catch(v),i};async function b(e,t,r,i){try{let o={...t,baseUrl:s,api:c},l=n(o,a(r),i);for await(let t of l)e.push(t);e.end()}catch(n){v(n),e.push(_(t,n)),e.end()}}var x=(t,n,r)=>{let i=e();return S(i,t,n,r).catch(v),i};async function S(e,t,n,i){try{let o={...t,baseUrl:s,api:c},l=r(o,a(n),i);for await(let t of l)e.push(t);e.end()}catch(n){v(n),e.push(_(t,n)),e.end()}}var C={id:o,name:`Cerebras`,description:`Ultra-fast inference on Cerebras hardware. Get an API key at cloud.cerebras.ai.`,requiresApiKey:!0,requiresBaseUrl:!1,getModelIds:()=>{if(d.length>0)return d;let e=m();return e.length>0?e:f},refreshModels:async e=>{let t=e??i(o)??``;if(t)try{await g(t)}catch(e){console.warn(`[cerebras] Failed to refresh model list:`,e instanceof Error?e.message:String(e))}}};function w(){t({api:l,stream:y,streamSimple:x})}export{C as config,w as register};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-dqckiMJt.js";import{p as t}from"./api-endpoint-C4kPBkpA.js";import{t as n}from"./permissions-surface-registry-CilCRwhh.js";import{tt as r}from"./wc-shell-
|
|
1
|
+
import{t as e}from"./logger-dqckiMJt.js";import{p as t}from"./api-endpoint-C4kPBkpA.js";import{t as n}from"./permissions-surface-registry-CilCRwhh.js";import{tt as r}from"./wc-shell-Cty8D-1f.js";import{t as i}from"./speech-assets-bridge-0pjUp_rk.js";import{o as a}from"./transformers-env-C84-8fvZ.js";import{i as o,t as s}from"./whisper-session-LfAksMkB.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};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{B as e,T as t,d as n,u as r}from"./account-store-
|
|
1
|
+
import{B as e,T as t,d as n,u as r}from"./account-store-BGnbKLs5.js";import{n as i}from"./main-CXxw-s8f.js";var a=`slicc_cloud_model_catalog`,o=`adobe`;function s(e){if(e===o)return!1;let n=t(e);return!(n.hidden||n.onOAuthLoginIntercepted)}function c(){try{let e=n().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(n){for(;n.firstChild;)n.removeChild(n.firstChild);n.className=`connect-surface`;let a=document.createElement(`h1`);a.className=`connect-surface__title`,a.textContent=`Connect providers`,n.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.`,n.appendChild(l);let u=document.createElement(`div`);u.className=`connect-surface__accounts`,n.appendChild(u);function d(){for(;u.firstChild;)u.removeChild(u.firstChild);let n=r().filter(e=>e.providerId!==o);if(n.length===0){let e=document.createElement(`div`);e.className=`connect-surface__empty`,e.textContent=`No providers connected yet.`,u.appendChild(e)}else{let r=document.createElement(`div`);r.className=`connect-surface__accounts-list`;for(let i of n){let n=t(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=n.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 e(i.providerId),c(),d()},a.appendChild(u),r.appendChild(a)}u.appendChild(r)}let a=document.createElement(`button`);a.className=`connect-surface__add-btn`,a.textContent=n.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),n.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;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-Cx6Y120U.js";import{S as t}from"./record-B72TdK9j.js";import{s as n}from"./kernel-worker-
|
|
1
|
+
import{t as e}from"./logger-Cx6Y120U.js";import{S as t}from"./record-B72TdK9j.js";import{s as n}from"./kernel-worker-B2Z-nUYg.js";const r=e(`directed-approval`);function i(e,n){if(e.kind===`user`)return a(`the user tier is not a directed approval`);if(e.kind===`agent`)return a(`agent approvals are not enqueued to a unit`);let r=e.unitJid;if(!n.scoops.has(r))return a(`the requesting unit is not registered`);let i=n.ownerRootOf(r);if(!i)return a(`no owning cone for the requesting unit`);let o=e.kind===`cone`?i:[...n.scoops.values()].find(t=>t.parentJid===i.jid&&(t.name===e.scoopName||t.folder===e.scoopName));return o?t(o).canResolveApprovals?{ok:!0,requesterJid:r,approver:o}:a(`the named approver cannot resolve approvals`):a(`delegated approver not found under this cone`)}function a(e){return r.warn(`Directed approval failing closed`,{reason:e}),{ok:!1,reason:e}}const o={decision:`deny`},s={decision:`deny`,reason:`unavailable`};async function c(e,t){let a=e.approver;if(a?.kind===`agent`){let i=globalThis[n];if(!i)return r.warn(`No agent bridge available for an approver agent — denying`),s;let{approverRunnerFor:c}=await import(`./approver-agent-D6YGYmzv.js`),l=t.getSharedFs(),u=await c({spawn:e=>i.spawn(e),readSharedFile:async e=>{if(!l)return null;try{let t=await l.readFile(e,{encoding:`utf-8`});return typeof t==`string`?t:null}catch{return null}},findUnit:e=>{let n=t.scoops.get(e);return n?{workspace:t.workspaceFor(n),folder:n.folder}:void 0}})({kind:e.kind===`guest-tool`?`guest-tool`:`guest-message`,requester:e.requester??`an unidentified requester`,detail:e.detail},a.unitJid);return r.info(`Approver agent verdict`,{decision:u.decision,reason:u.reason}),u.decision===`allow`?{decision:`allow`}:o}if(a&&a.kind!==`user`){let n=i(a,t);return n.ok?t.enqueue(n.requesterJid,e,{approver:n.approver}):s}return t.approveAsUser(e)}export{c as runDirectedApproval};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./js-realm-worker-
|
|
1
|
+
import{n as e}from"./js-realm-worker-BYcES1dO.js";const t={EACCES:2,EBADF:8,EBUSY:10,EEXIST:20,EINVAL:28,EIO:29,EISDIR:31,ELOOP:32,ENAMETOOLONG:37,ENOENT:44,ENOSPC:51,ENOSYS:52,ENOTDIR:54,ENOTEMPTY:55,EPERM:63,EROFS:69,ETIMEDOUT:73,EXDEV:75},n=4095;function r(e,n){if(n?.errno!==void 0&&n instanceof e.ErrnoError)return n;let r=n?.code,i=typeof r==`string`?t[r]??29:29;return new e.ErrnoError(i)}function i(e){let t=[],n=e;for(;n!==n.mount.root;)t.push(n.name),n=n.parent;let r=e.mount.opts.root.replace(/\/+$/,``);return t.length===0?r||`/`:`${r}/${t.reverse().join(`/`)}`}function a(e){let t=3735928559,n=1103547991;for(let r=0;r<e.length;r++){let i=e.charCodeAt(r);t=Math.imul(t^i,2654435761),n=Math.imul(n^i,1597334677)}return t=Math.imul(t^t>>>16,2246822507)^Math.imul(n^n>>>13,3266489909),n=Math.imul(n^n>>>16,2246822507)^Math.imul(t^t>>>13,3266489909),4294967296*(2097151&n)+(t>>>0)||1}function o(e){let t=e.isSymbolicLink?40960:e.isDirectory?16384:32768,r=e.isDirectory||e.isSymbolicLink?511:438;return t|((e.mode??r)&n||r)}function s(e){if(e!=null)return e instanceof Date?e.getTime():e}function c(e,n){let a=e=>e.mount.opts.bridge;function s(t){try{return t()}catch(t){throw r(e,t)}}function c(e){try{s(e)}catch(e){if(e.errno!==t.ENOSYS)throw e}}function l(e){return{...e?{stat:e}:{},len:0,loaded:!1,dirty:!1,openCount:0}}function u(t,r,i){let a=e.createNode(t,r,o(i),0);return a.node_ops=n.node,a.stream_ops=n.stream,a.live=l(i),a}function d(e){if(e.live.orphan)return{...e.live.stat,size:e.live.len};if(!e.live.stat){let t=s(()=>a(e).lstat(i(e)));e.live.stat=t,e.mode=o(t)}return e.live.stat}function f(e,t){let n=i(e);return n===`/`?`/${t}`:`${n}/${t}`}function p(e){let t=e.live;if(t.loaded)return;let n=s(()=>a(e).readFile(i(e)));t.data=n,t.len=n.length,t.loaded=!0}function m(e,t){let n=e.live,r=n.data??/* @__PURE__ */ new Uint8Array;if(r.length>=t)return r;let i=new Uint8Array(Math.max(t,r.length*2,256));return i.set(r.subarray(0,n.len)),n.data=i,i}function h(e){let t=e.live;if(!t.dirty||!t.data||t.orphan)return;let n=t.data.slice(0,t.len);s(()=>a(e).writeFile(i(e),n)),t.dirty=!1,t.stat=void 0}function g(e,t){let n=e.live;if(n.openCount>0){t>0?p(e):n.loaded=!0;let r=m(e,t);t>n.len&&r.fill(0,n.len,t),n.len=t,n.dirty=!0;return}let r=i(e),o=new Uint8Array(t);if(t>0){let n=s(()=>a(e).readFile(r));o.set(n.subarray(0,Math.min(t,n.length)))}s(()=>a(e).writeFile(r,o)),n.stat=void 0}return{Fs:e,bridgeOf:a,call:s,metadataCall:c,makeNode:u,statOf:d,childPath:f,ensureLoaded:p,ensureCapacity:m,flushNode:h,truncate:g}}function l(e){let{Fs:r,bridgeOf:o,call:c,metadataCall:l,makeNode:u,statOf:d,childPath:f,flushNode:p,truncate:m}=e,{ensureLoaded:h}=e;return{getattr(e){let t=d(e),n=e.live,o=r.isDir(e.mode)?4096:n.loaded?n.len:t.size,s=new Date(t.mtimeMs??0);return{dev:1,ino:t.ino??a(i(e)),mode:e.mode,nlink:1,uid:0,gid:0,rdev:0,size:o,atime:s,mtime:s,ctime:s,blksize:4096,blocks:Math.ceil(o/4096)}},setattr(e,t){if(e.live.orphan){t.mode!==void 0&&t.mode!==null&&(e.mode=e.mode&-4096|t.mode&n),t.size!==void 0&&t.size!==null&&m(e,t.size);return}let a=i(e);if(t.mode!==void 0&&t.mode!==null){let r=t.mode&n;r!==(e.mode&n)&&(l(()=>o(e).chmod(a,r)),e.mode=e.mode&-4096|r)}t.size!==void 0&&t.size!==null&&r.isFile(e.mode)&&m(e,t.size);let c=s(t.mtime)??t.timestamp;if(c!==void 0){let n=s(t.atime)??c;p(e),l(()=>o(e).utimes(a,n,c))}e.live.stat=void 0},lookup(e,t){let n=c(()=>o(e).lstat(f(e,t)));return u(e,t,n)},mknod(e,n,i){let a=f(e,n);if(r.isDir(i)){c(()=>o(e).mkdir(a));let t=i&4077;t!==493&&l(()=>o(e).chmod(a,t))}else if(r.isFile(i))c(()=>o(e).writeFile(a,/* @__PURE__ */ new Uint8Array));else throw new r.ErrnoError(t.EPERM);let s=u(e,n,{isFile:r.isFile(i),isDirectory:r.isDir(i),isSymbolicLink:!1,size:0,mode:i,mtimeMs:Date.now()});return s.live.stat=void 0,s},rename(e,t,n){let a=i(e),s=f(t,n);p(e),c(()=>o(e).rename(a,s));try{let i=r.lookupNode?.(t,n);i&&i!==e&&r.hashRemoveNode?.(i)}catch{}e.name=n,e.live.stat=void 0},unlink(e,t){let n;try{let i=r.lookupNode?.(e,t);i&&i.live?.openCount>0&&r.isFile(i.mode)&&(n=i)}catch{}n&&(d(n),h(n)),c(()=>o(e).unlink(f(e,t))),n&&(n.live.orphan=!0)},rmdir(e,t){c(()=>o(e).rmdir(f(e,t)))},readdir(e){return[`.`,`..`,...c(()=>o(e).readdir(i(e)))]},symlink(e,t,n){let r=f(e,t);return c(()=>o(e).symlink(n,r)),u(e,t,{isFile:!1,isDirectory:!1,isSymbolicLink:!0,size:n.length})},readlink(e){if(!r.isLink(e.mode))throw new r.ErrnoError(t.EINVAL);return c(()=>o(e).readlink(i(e)))}}}function u(e){let{Fs:n,statOf:r,ensureLoaded:i,ensureCapacity:a,flushNode:o}=e;return{open(e){n.isFile(e.node.mode)&&e.node.live.openCount++},dup(e){n.isFile(e.node.mode)&&e.node.live.openCount++},close(e){let t=e.node;if(!n.isFile(t.mode))return;let r=t.live;if(r.openCount=Math.max(0,r.openCount-1),!(r.openCount>0))try{o(t)}finally{r.data=void 0,r.len=0,r.loaded=!1}},read(e,r,a,o,s){let c=e.node;if(n.isDir(c.mode))throw new n.ErrnoError(t.EISDIR);i(c);let l=c.live;if(s>=l.len||o<=0)return 0;let u=Math.min(o,l.len-s);return new Uint8Array(r.buffer,r.byteOffset+a,u).set(l.data.subarray(s,s+u)),u},write(e,r,o,s,c){let l=e.node;if(n.isDir(l.mode))throw new n.ErrnoError(t.EISDIR);if(s<=0)return 0;i(l);let u=l.live,d=c+s,f=a(l,d);return c>u.len&&f.fill(0,u.len,c),f.set(new Uint8Array(r.buffer,r.byteOffset+o,s),c),u.len=Math.max(u.len,d),u.dirty=!0,s},llseek(e,i,a){let o=i;if(a===1)o+=e.position;else if(a===2&&n.isFile(e.node.mode)){let t=e.node.live;o+=t.loaded?t.len:r(e.node).size}if(o<0)throw new n.ErrnoError(t.EINVAL);return o},fsync(e){o(e.node)}}}function d(e){let n=/* @__PURE__ */ new Set,r={},i=c(e,r),a=l(i),o=u(i);return r.node=a,r.stream=o,{mounts:n,node_ops:a,stream_ops:o,mount(r){let a=i.call(()=>r.opts.bridge.stat(r.opts.root));if(!a.isDirectory)throw new e.ErrnoError(t.ENOTDIR);let o=i.makeNode(null,`/`,a);return n.add(r),o}}}function f(e,t){return!!t&&e.mounts.has(t.mount)}function p(e,t){for(let n of e.nameTable??[])for(let a=n;a;a=a.name_next??null)if(f(t,a)&&a.live.dirty&&a.live.data)try{let e=a.live.data.slice(0,a.live.len);a.mount.opts.bridge.writeFile(i(a),e),a.live.dirty=!1}catch(t){throw r(e,t)}}function m(e,t){let n=e.nameTable??[],r=[];for(let e of n)for(let n=e;n;n=n.name_next??null){if(!f(t,n))continue;let e=n.live;e.stat=void 0,e.openCount===0?n!==n.mount.root&&r.push(n):e.loaded&&!e.dirty&&(e.data=void 0,e.len=0,e.loaded=!1)}if(e.hashRemoveNode)for(let t of r)e.hashRemoveNode(t)}function h(e){let t=[...new Set(e.map(e=>e.replace(/\/+$/,``)||`/`))].sort();return t.filter(e=>!t.some(t=>t!==e&&(t===`/`||e.startsWith(`${t}/`))))}function g(e){if(e instanceof Error)return e.message;let t=e?.errno;return typeof t==`number`?`errno ${t}`:String(e)}function _(e,t,n,r){if(typeof e.filesystems!=`object`||!e.filesystems)throw Error(`the module was linked without filesystem support, so the VFS cannot be mounted (link it with -sFORCE_FILESYSTEM=1)`);let i=e.filesystems.SLICC_LIVE_FS??d(e);e.filesystems.SLICC_LIVE_FS=i;let a=[];for(let o of h(n))if(o!==`/`)try{e.mkdirTree(o),e.mount(i,{root:o,bridge:t},o),a.push(o)}catch(e){r(`live VFS mount of ${o} failed: ${g(e)}`)}return{plugin:i,mounted:a}}const v=/* @__PURE__ */ new Set([`dev`,`proc`]),y=[`/usr`,`/bin`],b=[`writeFile`,`mkdir`,`rm`,`rename`,`unlink`,`rmdir`,`symlink`,`chmod`,`utimes`];function x(t,n){let r={...t};for(let i of b){let a=t[i];r[i]=(...r)=>{n.wasUsed()&&e(n,t);try{a.apply(t,r)}finally{n.invalidate()}}}return r}function S(e,t){let n;try{n=e.readdir(`/`)}catch(e){return t(`cannot list the VFS root, nothing mounted: ${String(e)}`),[]}let r=n.filter(e=>e&&!e.includes(`/`)&&!v.has(e)).map(e=>`/${e}`);for(let e of y)r.includes(e)||r.push(e);let i=[];for(let t of r)try{e.stat(t).isDirectory&&i.push(t)}catch{}return i}function C(t,n,r={}){let{bridge:i,syncFs:a,warn:o}=n;a.wasUsed()&&e(a,i);let{plugin:s,mounted:c}=_(t,x(i,a),S(i,o),o);try{t.chdir(r.cwd??n.cwd)}catch(e){o(`cannot chdir to ${r.cwd??n.cwd}: ${String(e)}`)}return{mounted:c,flush:()=>p(t,s),invalidate:()=>m(t,s)}}export{C as mountVfsIntoEmscripten};
|
package/dist/ui/assets/{frozen-archive-writer-NpztAvQY.js → frozen-archive-writer-D55Jt3H8.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-BNaE-Ejt.js";import{t}from"./logger-Cx6Y120U.js";import{t as n}from"./slugify-BYJ6QVAt.js";import{n as r,r as i,t as a}from"./archive-redaction-Bi6veJCs.js";import{c as o,d as s,i as c,n as l,o as u,r as d}from"./frozen-archive-format-DjmxMrNn.js";import{d as f}from"./kernel-worker-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-BNaE-Ejt.js";import{t}from"./logger-Cx6Y120U.js";import{t as n}from"./slugify-BYJ6QVAt.js";import{n as r,r as i,t as a}from"./archive-redaction-Bi6veJCs.js";import{c as o,d as s,i as c,n as l,o as u,r as d}from"./frozen-archive-format-DjmxMrNn.js";import{d as f}from"./kernel-worker-B2Z-nUYg.js";const p=/\uD83C\uDF99\uFE0F?/g,m=/\u25C1[\s\S]*?\u25B7/g;function h(e){return e.replace(m,``).replace(p,``).replace(/[ \t]+$/g,``).trimEnd()}function g(e){let t=``;for(let n of e){let e=n.role===`user`?`User`:`Assistant`,r=n.role===`user`?h(n.content):n.content;if(t+=`## ${e}\n${r}\n\n`,n.attachments?.length&&(t+=`Attachments:\n${n.attachments.map(e=>`- ${f(e)}`).join(`
|
|
2
2
|
`)}\n\n`),n.toolCalls)for(let e of n.toolCalls)t+=`### Tool: ${e.name}\nInput: ${JSON.stringify(e.input,null,2)}\nResult: ${e.result??``}\n\n`}return t}var _=/* @__PURE__ */ e({LIVE_SNAPSHOT_PREFIX:()=>b,SESSIONS_INDEX_LOCK:()=>K,ensureSessionsDir:()=>z,findLiveSnapshotEntry:()=>C,formatArchiveAsMarkdown:()=>F,heuristicTitle:()=>M,isDraftArchiveFilename:()=>x,isProvisionalSessionTitle:()=>A,liveSnapshotFilename:()=>S,readSessionsIndexForWrite:()=>B,readSessionsIndexState:()=>V,rebuildSessionsIndexFromArchives:()=>H,rewriteTranscriptPointers:()=>P,serializeIndexWrite:()=>J,sessionsIndexLockFor:()=>R,sessionsIndexPathFor:()=>L,shortId:()=>w,slugify:()=>T,stripEphemeral:()=>N,upsertSessionsIndexEntry:()=>Z,upsertSessionsIndexEntryUnlocked:()=>X,writeSessionsIndexUnlocked:()=>Y});const v=t(`frozen-archive-writer`),y=`
|
|
3
3
|
-->`,b=`live-`;function x(e){return e.startsWith(`pending-`)||e.startsWith(`live-`)}function S(e){return`${b}${T(e)}-${w()}.md`}function C(e,t){return e.find(e=>e.live===!0&&(e.cone??`cone`)===t)}function w(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}function T(e){return n(e,{maxLen:48,fallback:`session`})}const E=`untitled-session`,D=/* @__PURE__ */ RegExp(`^(?:_Forwarded from .+?\\._\\s*)*(?:\\[@\\S+ (?:completed|idle|sudo-request|FAILED)\\b|\\[scoop_wait\\b|\\[(?:Webhook Event|Sprinkle Event|File Watch Event|Session Reload|Navigate Event|Upgrade Event|Cherry Event|Workflow Event|Background Command|jshd Unit|Cron Event|Scoop Access Request|Preview Event|Preview event|Discovery Event)\\b|Preview tab (?:connected|disconnected) from |<context-summary\\b)`);function O(e){return e.slice(0,480).trim().replace(/\s+/g,` `).slice(0,240)}function k(e){let t=O(e);return t.length>0&&D.test(t)}function A(e){return e===E||k(e)}function j(e){return e.role!==`user`||!e.content?.trim()||e.source===`lick`||e.channel?!1:!k(e.content)}function M(e){let t=e.find(j);if(!t?.content)return E;let n=t.content.trim().replace(/\s+/g,` `);return n.length>60?`${n.slice(0,60)}…`:n||E}function N(e){return e.map(e=>{let t={id:e.id,role:e.role,content:e.content,timestamp:e.timestamp};return e.attachments?.length&&(t.attachments=e.attachments),e.toolCalls?.length&&(t.toolCalls=e.toolCalls.map(e=>({id:e.id,name:e.name,input:e.input,...e.result===void 0?{}:{result:e.result},...e.isError?{isError:e.isError}:{}}))),e.source&&(t.source=e.source),e.channel&&(t.channel=e.channel),e.compaction&&(t.compaction=e.compaction),t})}function P(e,t,n){return!t||t===n?e:e.split(t).join(n)}function F(e){let t=a(),n={...e,title:r(e.title,t),messages:i(e.messages,t)},o=(n.cost?`cost: ${JSON.stringify(n.cost)}\n`:``)+(n.models?`models: ${JSON.stringify(n.models)}\n`:``),s=(n.cone?`cone: ${n.cone}\n`:``)+(n.coneLabel?`coneLabel: ${JSON.stringify(n.coneLabel)}\n`:``)+(n.memorySkipped?`memorySkipped: true
|
|
4
4
|
`:``)+(n.live?`live: true
|
package/dist/ui/assets/{frozen-session-delete-CbC408cI.js → frozen-session-delete-BGggKcjU.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-dqckiMJt.js";import{_ as t,u as n}from"./zip-stream-DH55Q8r9.js";import{l as r,m as i,o as a}from"./frozen-archive-writer-BOZ6Y42r.js";import{a as o,i as s,o as c,s as l,t as u}from"./frozen-session-identity-BazZkTaa.js";import{a as d}from"./session-jsonl-BdEWXZRb.js";import{r as f}from"./snapshot-store-B--ncAUQ.js";import{c as p,o as m,t as h}from"./live-session-curation-
|
|
1
|
+
import{t as e}from"./logger-dqckiMJt.js";import{_ as t,u as n}from"./zip-stream-DH55Q8r9.js";import{l as r,m as i,o as a}from"./frozen-archive-writer-BOZ6Y42r.js";import{a as o,i as s,o as c,s as l,t as u}from"./frozen-session-identity-BazZkTaa.js";import{a as d}from"./session-jsonl-BdEWXZRb.js";import{r as f}from"./snapshot-store-B--ncAUQ.js";import{c as p,o as m,t as h}from"./live-session-curation-Bi9mZH0h.js";var g=`/sessions/.search-index.json`;async function _(e,t={}){try{await e.rm(g)}catch(e){if(t.strict&&e?.code!==`ENOENT`)throw e}}new TextEncoder;var v=e(`frozen-session-delete`),y=`${n}/attachments`,b=/^\d+-\d+\.md$/;function x(e){return e?.code===`ENOENT`}function S(e,t){return`${e}: ${t instanceof Error?t.message:String(t)}`}function C(e){return e.slice(0,-3)}async function w(e,t,n,r=!1){try{await e.rm(t,r?{recursive:!0}:void 0)}catch(e){x(e)||n.push(S(t,e))}}function T(e,t){return e.sessionId?l(t,e):C(e.filename)}async function E(e,t,n){let r;try{r=(await e.readDir(h)).map(e=>e.name)}catch(e){return x(e)||n.push(S(h,e)),[]}let i=`${t}-`;return r.filter(e=>e.startsWith(i)&&b.test(e.slice(i.length))).map(e=>`${h}/${e}`)}async function D(e,t,r){if(!s(t.filename))return[`unsafe archive name: ${String(t.filename)}`];let i=[],a=T(t,[...r,t]),o=a?await E(e,a,i):[];for(let t of o)await w(e,t,i);for(let r of[...o,`${n}/${t.filename}`])await w(e,p(r),i),await w(e,m(r),i,!0);return i}async function O(e,r,i){let a=new Set([`${y}/${C(r.filename)}`]),s=`${n}/${r.filename}`;try{let n=await e.readFile(s,{encoding:`utf-8`}),r=typeof n==`string`?n:new TextDecoder().decode(n),{attachmentsKey:i}=t(r);o(i)&&a.add(`${y}/${i}`)}catch(e){x(e)||i.push(S(s,e))}return[...a]}async function k(e,t,r){if(!s(t.filename))return[`unsafe archive name: ${String(t.filename)}`];let i=[],a=await O(e,t,i),o=l([...r,t],t);if(o)try{await f(e,o)}catch(e){i.push(S(`${n}/data/${o}`,e))}i.push(...await D(e,t,r));for(let t of a)await w(e,t,i,!0);return i.length>0||(await w(e,d(t.filename),i),await w(e,`${n}/${t.filename}`,i)),i}function A(e,t){return r(async()=>{let n=await c(e);if(n===null)return{kind:`unknown`};let r=u(n,t);return r?{kind:`present`,row:r}:{kind:`absent`,entries:n}})}function j(e,t){return r(async()=>{let n=await a(e),r=u(n,t);if(!r)return{status:`not-found`};if(r.live)return{status:`live`};if(!s(r.filename))return{status:`unsafe`};let o=n.filter(e=>e!==r),c=await k(e,r,o);try{await _(e,{strict:!0})}catch(e){c.push(S(`/sessions/.search-index.json`,e))}if(c.length>0)return v.warn(`Frozen session delete incomplete — row kept for a retry`,{filename:r.filename,errors:c}),{status:`failed`,errors:c};await i(e,o),await _(e);try{await e.flush()}catch{}return v.info(`Frozen session deleted`,{filename:r.filename}),{status:`deleted`}})}export{j as deleteFrozenSession,A as findIndexedFrozenRow,D as removeCuratorByproducts};
|
package/dist/ui/assets/{frozen-session-identity-Bbl7jYAA.js → frozen-session-identity-BZSTAeu4.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e,i as t,o as n}from"./frozen-archive-format-DjmxMrNn.js";import{o as r}from"./frozen-archive-writer-
|
|
1
|
+
import{c as e,i as t,o as n}from"./frozen-archive-format-DjmxMrNn.js";import{o as r}from"./frozen-archive-writer-D55Jt3H8.js";const i=/^[A-Za-z0-9._-]+$/;function a(e){return typeof e==`string`&&i.test(e)&&!e.startsWith(`.`)&&!e.includes(`..`)}function o(t){return a(t)&&t.endsWith(`.md`)&&t.length>3&&!e(t)}function s(e){return a(e)}function c(e){return e.startsWith(`session-`)}function l(e,t){let n=t.sessionId;if(s(n)&&!c(n))return e.some(e=>e!==t&&e.sessionId===n)?void 0:n}function u(e,t){let n=e.find(e=>e.filename===t.filename);if(n||!t.sessionId||!r(t.filename))return n;let i=e.filter(e=>e.sessionId===t.sessionId),a=i.length===1?i[0]:void 0;return a&&l(e,a)===t.sessionId?a:void 0}async function d(e){try{let r=await e.readFile(t,{encoding:`utf-8`}),i=JSON.parse(typeof r==`string`?r:new TextDecoder().decode(r));return Array.isArray(i)?n(i):null}catch{return null}}export{u as findFrozenRow,c as isChatKeyId,o as isSafeArchiveFilename,s as isSafeSessionKey,d as readIndexForPresence,l as trustedSessionId};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-Cx6Y120U.js";import{E as t,a as n,s as r}from"./record-B72TdK9j.js";import{a as i,i as a,n as o,r as s,t as c}from"./gelatiere-constants-BYJlhm8R.js";import{o as l}from"./kernel-worker-
|
|
1
|
+
import{t as e}from"./logger-Cx6Y120U.js";import{E as t,a as n,s as r}from"./record-B72TdK9j.js";import{a as i,i as a,n as o,r as s,t as c}from"./gelatiere-constants-BYJlhm8R.js";import{o as l}from"./kernel-worker-B2Z-nUYg.js";import{GELATIERE_BASE_ALLOWED_COMMANDS as u}from"./gelatiere-store-BNiq21qj.js";const d=e(`gelatiere-unit`);var f=class extends Error{holder;constructor(e){super(`folder "${c}" is held by ${e.parentJid===null?`cone`:`scoop`} ${e.jid} — drop it, then run \`gelatiere init\``),this.holder=e,this.name=`GelatiereFolderTakenError`}};function p(e){return e.find(i)}function m(e){return e.listCronTasks().find(e=>e.name===`gelatiere-nightly`&&e.scoop===`gelatiere`)}function h(e){return{folder:e.folder,name:e.name,jid:e.jid}}const g=[`/sessions/`,`/shared/`,`/workspace/`,`/home/`,`/cones/`],_=[`/shared/.gelatiere/`];async function v(e,t,n){if(!n||y(t.config?.allowedCommands??[],n))return`unchanged`;if(e.getScoopTabState(t.jid)?.status===`processing`)return d.info(`gelatiere allow-list edit deferred: the unit is mid-pass`,{jid:t.jid}),`deferred`;let r={...t,config:{...t.config,allowedCommands:[...n]}};try{await e.persistScoop(r)}catch(n){throw await e.persistScoop(t).catch(()=>{}),n}return await e.reinitLiveUnit(r.jid),d.info(`gelatiere allow-list updated from GELATIERE.md`,{jid:r.jid,commands:n.length}),`updated`}function y(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}async function b(e,t){let i=e.getScoops(),a=p(i);if(a){await e.syncGelatiereModel();let n=await v(e,a,t);return{folder:a.folder,jid:a.jid,created:!1,allowList:n}}let o=i.find(e=>e.folder===c);if(o)throw new f(o);let m=n(i),h=m?r(m):void 0,y={...l({parentId:s,name:c,folder:c,notifyOnComplete:!1,config:{systemPromptAppend:"You are the gelatiere: the resident advisor of this SLICC installation, a persistent scoop no cone owns. The user cannot message you directly and you never message them. You act only when a lick arrives — a `[Cron Event: gelatiere-nightly]`, a `[Sprinkle Event: gelatiere]` (a session ended, or someone ran `gelatiere run`), or a direct message asking for a pass. On every such lick: `cat /shared/GELATIERE.md` and follow it exactly. It ends with `gelatiere suggest <file>` and `gelatiere deliver`; those two commands are how your work reaches the cones. Do not install skills, do not edit memory files, do not message cones any other way. Reply in one short line per pass (what you looked at, how many suggestions landed). Your own history is compacted while you idle; keep durable notes in /shared/.gelatiere/notes.md, not in your replies.",visiblePaths:[...g],writablePaths:[..._],allowedCommands:[...t??u]}}),assistantLabel:c,...h?{model:h}:{}};return await e.registerScoop(y),d.info(`gelatiere unit registered`,{jid:y.jid}),{folder:y.folder,jid:y.jid,created:!0}}function x(e,n){return{ensureUnit:t=>b(e,t),unregisterOwned:async()=>{for(let e of n.listCronTasks())e.name===`gelatiere-nightly`&&await n.deleteCronTask(e.id);let t=e.getScoops().filter(e=>e.parentJid===s);for(let n of t)await e.unregisterScoop(n.jid);return t.map(e=>e.jid)},unit:()=>{let t=p(e.getScoops());return t?h(t):void 0},unitAllowedCommands:()=>p(e.getScoops())?.config?.allowedCommands,roots:()=>t(e.getScoops()).map(h),nightly:()=>{let e=m(n);return e?{id:e.id,cron:e.cron}:void 0},ensureNightly:async e=>{let t=m(n);if(t?.cron===e)return{id:t.id,cron:t.cron,created:!1};t&&await n.deleteCronTask(t.id);let r=await n.createCronTask(o,e,c);return{id:r.id,cron:r.cron,created:!0}},dropNightly:async()=>{let e=m(n);return e?n.deleteCronTask(e.id):!1},lick:(e,t)=>{n.emitEvent({type:`sprinkle`,sprinkleName:a,targetScoop:e,timestamp:(/* @__PURE__ */ new Date()).toISOString(),body:t})}}}function S(e,t=globalThis){t.__slicc_gelatiere=e}async function C(e,t,n){try{let r=await e.ensureUnit(n),i=await e.ensureNightly(t);d.info(`gelatiere ready`,{jid:r.jid,created:r.created,allowList:r.allowList,nightly:i.cron,nightlyCreated:i.created})}catch(e){d.warn(`gelatiere boot failed`,{error:e instanceof Error?e.message:String(e)})}}async function w(e){try{await e.dropNightly()&&d.info(`gelatiere nightly removed (memory-v2 is off)`)}catch(e){d.warn(`gelatiere halt failed`,{error:e instanceof Error?e.message:String(e)})}}export{C as bootGelatiere,x as createGelatiereSeam,w as haltGelatiere,S as publishGelatiereSeam};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/fs-BAzxA40E.js","assets/rolldown-runtime-COiEfhsA.js","assets/logger-dqckiMJt.js","assets/preload-helper-BLdHbfdN.js","assets/sha256-DynDhwRL.js","assets/path-utils-DNJG-zQf.js","assets/types-D8gIX-W-.js","assets/bounded-walk-BM2KRYZO.js","assets/virtual-device-paths-D45tpPP6.js","assets/same-file-identity-DuEcSmPX.js","assets/mount-table-store-DC0SsuPp.js","assets/git-config-DiB8_8cU.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./preload-helper-BLdHbfdN.js";import"./proxied-fetch-SAhvzdVS.js";import{K as t,c as n,u as r}from"./account-store-dUOszes2.js";import{a as i}from"./api-endpoint-C4kPBkpA.js";import{C as a,f as o}from"./main-Dna00i-n.js";import{r as s,t as c}from"./silent-renew-backoff-BFFeKA_b.js";import{getOAuthPageOrigin as l,resolveOAuthDelegation as u}from"./oauth-service-OHbiHOsG.js";import{t as d}from"./global-db-CbuLl-zx.js";import{n as f,r as p,t as m}from"./bridge-token-required-DMk2va9k.js";var h={clientId:``,scopes:`repo,read:user,user:email`};function g(){try{let e=localStorage.getItem(a);if(e)return e.replace(/\/$/,``)}catch{}return o}function _(e){return{access_token:e.access_token,token_type:e.token_type,scope:e.scope,refresh_token:e.refresh_token,expires_in:e.expires_in}}async function v(e){let t;try{t=await e.json()}catch{throw Error(`Token exchange failed (HTTP ${e.status}): non-JSON response`)}if(!e.ok&&e.status!==200){let n=t.error_description??t.error??`Token exchange failed (HTTP ${e.status})`;throw Error(n)}if(t.error){let e=t.error_description??t.error;throw Error(e)}return _(t)}async function y(e){let t=`${g()}/oauth/token`;return v(await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e.provider,code:e.code,redirect_uri:e.redirectUri})}))}async function b(e){if(f())throw new m;let t=`${g()}/oauth/token`,n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e.provider,refresh_token:e.refreshToken})});if(n.status===403&&typeof n.clone==`function`){let e=await n.clone().text();if(p(n.status,e))throw new m}return v(n)}async function x(e){let t=`${g()}/oauth/revoke`,n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e.provider,access_token:e.accessToken})});if(!(n.status===204||n.ok)){if(n.status===400)try{if((await n.json()).error===`unsupported`)return}catch{}throw Error(`Token revocation failed (HTTP ${n.status})`)}}var S=Object.assign({"/packages/webapp/providers/github-config.json":h})[`/packages/webapp/providers/github-config.json`]??{clientId:``,scopes:`repo,read:user,user:email`},C=null,w=null;function T(e){let{isExtension:t,isConnectMode:n,workerBaseUrl:r,pageOrigin:i,pageHref:a,bridgeApiBaseUrl:o,extensionId:c,nonce:l}=e;if(t)return{redirectUri:`${r}/auth/callback`,state:{source:`extension`,extensionId:c,path:`/github`,nonce:l}};if(e.delegated)return{redirectUri:`${e.runtimeWorkerBaseUrl??r}/auth/callback`,state:{source:`opener`,path:`/auth/callback`,nonce:l}};if(n){let e=i??``;if(/^https?:\/\/(localhost|127\.0\.0\.1):\d+$/.test(e)){let t=parseInt(new URL(a??e).port||`8790`,10);return{redirectUri:`${r}/auth/callback`,state:{source:`local`,port:t,path:`/auth/callback`,nonce:l}}}return{redirectUri:`${r}/auth/callback`,state:{source:`remote`,origin:e,path:`/auth/callback`,nonce:l}}}if(o&&a&&s(a)){let t=null;try{let e=new URL(o);(e.hostname===`localhost`||e.hostname===`127.0.0.1`)&&(t=parseInt(e.port||`5710`,10))}catch{t=null}if(t!==null&&!Number.isNaN(t))return{redirectUri:`${e.runtimeWorkerBaseUrl??r}/auth/callback`,state:{source:`local`,port:t,path:`/auth/callback`,nonce:l}}}return{redirectUri:`${e.runtimeWorkerBaseUrl??i??``}/auth/callback`,state:{port:parseInt(new URL(a??i??`http://localhost:5710`).port||`5710`,10),path:`/auth/callback`,nonce:l}}}async function E(){if(C)return C;if(D){try{let e=await fetch(`${g()}/api/runtime-config`);if(e.ok){let t=await e.json();if(t.oauth?.github)return C=t.oauth.github,C}}catch{}return S.clientId}try{let e=await fetch(`/api/runtime-config`);if(e.ok){let t=await e.json();if(t.oauth?.github)return C=t.oauth.github,t.trayWorkerBaseUrl&&(w=t.trayWorkerBaseUrl),C;if(t.trayWorkerBaseUrl){w=t.trayWorkerBaseUrl;let e=await fetch(`${t.trayWorkerBaseUrl}/api/runtime-config`);if(e.ok){let t=await e.json();if(t.oauth?.github)return C=t.oauth.github,C}}}}catch{}return S.clientId}var D=typeof globalThis<`u`&&typeof globalThis.chrome?.runtime?.id==`string`;function O(){return r().find(e=>e.providerId===`github`)}function k(e){try{return new URL(e).searchParams.get(`code`)}catch{return null}}async function A(e){try{let t=await fetch(`https://api.github.com/user`,{headers:{Authorization:`Bearer ${e}`,Accept:`application/vnd.github+json`}});if(t.ok){let e=await t.json();return{name:e.name||e.login,avatar:e.avatar_url,login:e.login,id:e.id}}}catch(e){console.warn(`[github] Failed to fetch user profile:`,e instanceof Error?e.message:String(e))}return{}}function j(e,t){return`${e}+${t}@users.noreply.github.com`}async function M(t){try{let{VirtualFS:n}=await e(async()=>{let{VirtualFS:e}=await import(`./fs-BAzxA40E.js`).then(e=>e.t);return{VirtualFS:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]));await(await n.create({dbName:d})).writeFile(`/workspace/.git/github-token`,t),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`github-token-changed`))}catch(e){console.warn(`[github] Failed to write git token:`,e instanceof Error?e.message:String(e))}}async function N(){try{let{VirtualFS:t}=await e(async()=>{let{VirtualFS:e}=await import(`./fs-BAzxA40E.js`).then(e=>e.t);return{VirtualFS:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]));await(await t.create({dbName:d})).rm(`/workspace/.git/github-token`),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`github-token-changed`))}catch{}}async function P(e){let t=await n(`github`);t.maskedValue?await M(t.maskedValue):e?.clearOnFailure&&await N()}async function F(t){if(t.login&&t.id!==void 0)try{let{VirtualFS:n}=await e(async()=>{let{VirtualFS:e}=await import(`./fs-BAzxA40E.js`).then(e=>e.t);return{VirtualFS:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),{readGlobalGitConfigValue:r,writeGlobalGitConfigValue:i}=await e(async()=>{let{readGlobalGitConfigValue:e,writeGlobalGitConfigValue:t}=await import(`./git-config-DiB8_8cU.js`);return{readGlobalGitConfigValue:e,writeGlobalGitConfigValue:t}},__vite__mapDeps([11,6,0,1,2,3,4,5,7,8,9,10])),a=await n.create({dbName:d}),o=t.name||t.login,s=j(t.id,t.login);!await r(a,`user.name`)&&o&&await i(a,`user.name`,o),await r(a,`user.email`)||await i(a,`user.email`,s)}catch(e){console.warn(`[github] Failed to seed git identity:`,e instanceof Error?e.message:String(e))}}var I=c();async function L(){try{let e=O();if(!e?.refreshToken)return null;let n=await b({provider:`github`,refreshToken:e.refreshToken});return await t({providerId:`github`,accessToken:n.access_token,refreshToken:n.refresh_token,tokenExpiresAt:n.expires_in?Date.now()+n.expires_in*1e3:void 0,userName:e.userName,userAvatar:e.userAvatar,scopes:n.scope??e.scopes}),await P({clearOnFailure:!0}),n.access_token}catch(e){return console.warn(`[github] Silent renewal failed:`,e instanceof Error?e.message:String(e)),null}}var R=1e4;async function z(){let e=O()?.accessToken;if(!e)return{status:`unknown`,detail:`no stored token`};try{let t=await fetch(`https://api.github.com/user`,{headers:{Authorization:`Bearer ${e}`,Accept:`application/vnd.github+json`},signal:AbortSignal.timeout(R)});if(t.ok){let e=await t.json().catch(()=>({}));return{status:`accepted`,userName:e.name||e.login}}return B(t)}catch(e){return{status:`unknown`,detail:e instanceof Error?e.message:String(e)}}}function B(e){let t=`HTTP ${e.status}${e.statusText?` ${e.statusText}`:``}`;return e.status===401?{status:`rejected`,detail:t}:e.status===403&&V(e)?{status:`unknown`,detail:`${t} (rate limited)`}:{status:`unknown`,detail:t}}function V(e){return e.headers.get(`x-ratelimit-remaining`)===`0`||e.headers.has(`retry-after`)}async function H(){await P()}async function U(){let e=O();if(!e?.accessToken)throw Error(`Not logged in to GitHub — please log in first`);if((e.tokenExpiresAt??1/0)-Date.now()>6e4)return await H(),e.accessToken;let t=await I.run(()=>L());if(t)return t;let n=O();if((n?.tokenExpiresAt??1/0)-Date.now()>0&&n?.accessToken)return await H(),n.accessToken;throw Error(`GitHub session expired — please log in again`)}var W={id:`github`,name:`GitHub`,description:"Sign in with GitHub for git authentication (push/pull/clone) and the `oauth-token github` shell command. Does not expose LLM models — use the GitHub Copilot provider for those.",requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,oauthTokenDomains:[`github.com`,`*.github.com`,`api.github.com`,`raw.githubusercontent.com`],getModelIds:()=>[],onOAuthLogin:async(e,n,r)=>{let a=await E();if(!a)throw Error(`GitHub OAuth not configured — no client ID available`);let o=r?.scopes??S.scopes,s=D?null:await l(),c=!D&&await u(),d=crypto.randomUUID(),f=D?chrome.runtime.id:``,{redirectUri:p,state:m}=T({isExtension:D,isConnectMode:!!globalThis.__slicc_connect_mode,workerBaseUrl:g(),runtimeWorkerBaseUrl:w,pageOrigin:s?.origin??null,pageHref:s?.href??null,bridgeApiBaseUrl:i(),delegated:c,extensionId:f,nonce:d}),h=btoa(JSON.stringify(m)),_=d,v=new URLSearchParams({client_id:a,scope:o,redirect_uri:p});h&&v.set(`state`,h);let b=await e(`https://github.com/login/oauth/authorize?${v}`);if(!b)return;if(_)try{if(new URL(b).searchParams.get(`nonce`)!==_){console.error(`[github] OAuth nonce mismatch — possible CSRF`);return}}catch(e){console.warn(`[github] Nonce check skipped (URL parse failed):`,e instanceof Error?e.message:String(e))}let x=k(b);if(!x){console.error(`[github] Could not extract authorization code from redirect URL`);return}let C=await y({provider:`github`,code:x,redirectUri:p}),O=await A(C.access_token);await t({providerId:`github`,accessToken:C.access_token,refreshToken:C.refresh_token,tokenExpiresAt:C.expires_in?Date.now()+C.expires_in*1e3:void 0,userName:O.name,userAvatar:O.avatar,scopes:C.scope}),await P({clearOnFailure:!0}),await F(O),n()},onSilentRenew:L,onValidateToken:z,getValidAccessToken:U,onOAuthLogout:async()=>{let e=O();e?.accessToken&&await x({provider:`github`,accessToken:e.accessToken}).catch(e=>console.warn(`[github] Token revocation failed:`,e instanceof Error?e.message:String(e))),await N(),await t({providerId:`github`,accessToken:``})},getOAuthLogoutUrl:e=>`https://github.com/logout`};export{j as buildNoreplyEmail,W as config,k as extractCodeFromUrl,U as getValidAccessToken,T as resolveGithubOAuthRedirect,F as syncGitIdentityFromGitHub};
|
|
2
|
+
import{t as e}from"./preload-helper-BLdHbfdN.js";import"./proxied-fetch-SAhvzdVS.js";import{K as t,c as n,u as r}from"./account-store-BGnbKLs5.js";import{a as i}from"./api-endpoint-C4kPBkpA.js";import{C as a,f as o}from"./main-CXxw-s8f.js";import{r as s,t as c}from"./silent-renew-backoff-BXEMMYRE.js";import{getOAuthPageOrigin as l,resolveOAuthDelegation as u}from"./oauth-service-OHbiHOsG.js";import{t as d}from"./global-db-CbuLl-zx.js";import{n as f,r as p,t as m}from"./bridge-token-required-DMk2va9k.js";var h={clientId:``,scopes:`repo,read:user,user:email`};function g(){try{let e=localStorage.getItem(a);if(e)return e.replace(/\/$/,``)}catch{}return o}function _(e){return{access_token:e.access_token,token_type:e.token_type,scope:e.scope,refresh_token:e.refresh_token,expires_in:e.expires_in}}async function v(e){let t;try{t=await e.json()}catch{throw Error(`Token exchange failed (HTTP ${e.status}): non-JSON response`)}if(!e.ok&&e.status!==200){let n=t.error_description??t.error??`Token exchange failed (HTTP ${e.status})`;throw Error(n)}if(t.error){let e=t.error_description??t.error;throw Error(e)}return _(t)}async function y(e){let t=`${g()}/oauth/token`;return v(await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e.provider,code:e.code,redirect_uri:e.redirectUri})}))}async function b(e){if(f())throw new m;let t=`${g()}/oauth/token`,n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e.provider,refresh_token:e.refreshToken})});if(n.status===403&&typeof n.clone==`function`){let e=await n.clone().text();if(p(n.status,e))throw new m}return v(n)}async function x(e){let t=`${g()}/oauth/revoke`,n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e.provider,access_token:e.accessToken})});if(!(n.status===204||n.ok)){if(n.status===400)try{if((await n.json()).error===`unsupported`)return}catch{}throw Error(`Token revocation failed (HTTP ${n.status})`)}}var S=Object.assign({"/packages/webapp/providers/github-config.json":h})[`/packages/webapp/providers/github-config.json`]??{clientId:``,scopes:`repo,read:user,user:email`},C=null,w=null;function T(e){let{isExtension:t,isConnectMode:n,workerBaseUrl:r,pageOrigin:i,pageHref:a,bridgeApiBaseUrl:o,extensionId:c,nonce:l}=e;if(t)return{redirectUri:`${r}/auth/callback`,state:{source:`extension`,extensionId:c,path:`/github`,nonce:l}};if(e.delegated)return{redirectUri:`${e.runtimeWorkerBaseUrl??r}/auth/callback`,state:{source:`opener`,path:`/auth/callback`,nonce:l}};if(n){let e=i??``;if(/^https?:\/\/(localhost|127\.0\.0\.1):\d+$/.test(e)){let t=parseInt(new URL(a??e).port||`8790`,10);return{redirectUri:`${r}/auth/callback`,state:{source:`local`,port:t,path:`/auth/callback`,nonce:l}}}return{redirectUri:`${r}/auth/callback`,state:{source:`remote`,origin:e,path:`/auth/callback`,nonce:l}}}if(o&&a&&s(a)){let t=null;try{let e=new URL(o);(e.hostname===`localhost`||e.hostname===`127.0.0.1`)&&(t=parseInt(e.port||`5710`,10))}catch{t=null}if(t!==null&&!Number.isNaN(t))return{redirectUri:`${e.runtimeWorkerBaseUrl??r}/auth/callback`,state:{source:`local`,port:t,path:`/auth/callback`,nonce:l}}}return{redirectUri:`${e.runtimeWorkerBaseUrl??i??``}/auth/callback`,state:{port:parseInt(new URL(a??i??`http://localhost:5710`).port||`5710`,10),path:`/auth/callback`,nonce:l}}}async function E(){if(C)return C;if(D){try{let e=await fetch(`${g()}/api/runtime-config`);if(e.ok){let t=await e.json();if(t.oauth?.github)return C=t.oauth.github,C}}catch{}return S.clientId}try{let e=await fetch(`/api/runtime-config`);if(e.ok){let t=await e.json();if(t.oauth?.github)return C=t.oauth.github,t.trayWorkerBaseUrl&&(w=t.trayWorkerBaseUrl),C;if(t.trayWorkerBaseUrl){w=t.trayWorkerBaseUrl;let e=await fetch(`${t.trayWorkerBaseUrl}/api/runtime-config`);if(e.ok){let t=await e.json();if(t.oauth?.github)return C=t.oauth.github,C}}}}catch{}return S.clientId}var D=typeof globalThis<`u`&&typeof globalThis.chrome?.runtime?.id==`string`;function O(){return r().find(e=>e.providerId===`github`)}function k(e){try{return new URL(e).searchParams.get(`code`)}catch{return null}}async function A(e){try{let t=await fetch(`https://api.github.com/user`,{headers:{Authorization:`Bearer ${e}`,Accept:`application/vnd.github+json`}});if(t.ok){let e=await t.json();return{name:e.name||e.login,avatar:e.avatar_url,login:e.login,id:e.id}}}catch(e){console.warn(`[github] Failed to fetch user profile:`,e instanceof Error?e.message:String(e))}return{}}function j(e,t){return`${e}+${t}@users.noreply.github.com`}async function M(t){try{let{VirtualFS:n}=await e(async()=>{let{VirtualFS:e}=await import(`./fs-BAzxA40E.js`).then(e=>e.t);return{VirtualFS:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]));await(await n.create({dbName:d})).writeFile(`/workspace/.git/github-token`,t),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`github-token-changed`))}catch(e){console.warn(`[github] Failed to write git token:`,e instanceof Error?e.message:String(e))}}async function N(){try{let{VirtualFS:t}=await e(async()=>{let{VirtualFS:e}=await import(`./fs-BAzxA40E.js`).then(e=>e.t);return{VirtualFS:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]));await(await t.create({dbName:d})).rm(`/workspace/.git/github-token`),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`github-token-changed`))}catch{}}async function P(e){let t=await n(`github`);t.maskedValue?await M(t.maskedValue):e?.clearOnFailure&&await N()}async function F(t){if(t.login&&t.id!==void 0)try{let{VirtualFS:n}=await e(async()=>{let{VirtualFS:e}=await import(`./fs-BAzxA40E.js`).then(e=>e.t);return{VirtualFS:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),{readGlobalGitConfigValue:r,writeGlobalGitConfigValue:i}=await e(async()=>{let{readGlobalGitConfigValue:e,writeGlobalGitConfigValue:t}=await import(`./git-config-DiB8_8cU.js`);return{readGlobalGitConfigValue:e,writeGlobalGitConfigValue:t}},__vite__mapDeps([11,6,0,1,2,3,4,5,7,8,9,10])),a=await n.create({dbName:d}),o=t.name||t.login,s=j(t.id,t.login);!await r(a,`user.name`)&&o&&await i(a,`user.name`,o),await r(a,`user.email`)||await i(a,`user.email`,s)}catch(e){console.warn(`[github] Failed to seed git identity:`,e instanceof Error?e.message:String(e))}}var I=c();async function L(){try{let e=O();if(!e?.refreshToken)return null;let n=await b({provider:`github`,refreshToken:e.refreshToken});return await t({providerId:`github`,accessToken:n.access_token,refreshToken:n.refresh_token,tokenExpiresAt:n.expires_in?Date.now()+n.expires_in*1e3:void 0,userName:e.userName,userAvatar:e.userAvatar,scopes:n.scope??e.scopes}),await P({clearOnFailure:!0}),n.access_token}catch(e){return console.warn(`[github] Silent renewal failed:`,e instanceof Error?e.message:String(e)),null}}var R=1e4;async function z(){let e=O()?.accessToken;if(!e)return{status:`unknown`,detail:`no stored token`};try{let t=await fetch(`https://api.github.com/user`,{headers:{Authorization:`Bearer ${e}`,Accept:`application/vnd.github+json`},signal:AbortSignal.timeout(R)});if(t.ok){let e=await t.json().catch(()=>({}));return{status:`accepted`,userName:e.name||e.login}}return B(t)}catch(e){return{status:`unknown`,detail:e instanceof Error?e.message:String(e)}}}function B(e){let t=`HTTP ${e.status}${e.statusText?` ${e.statusText}`:``}`;return e.status===401?{status:`rejected`,detail:t}:e.status===403&&V(e)?{status:`unknown`,detail:`${t} (rate limited)`}:{status:`unknown`,detail:t}}function V(e){return e.headers.get(`x-ratelimit-remaining`)===`0`||e.headers.has(`retry-after`)}async function H(){await P()}async function U(){let e=O();if(!e?.accessToken)throw Error(`Not logged in to GitHub — please log in first`);if((e.tokenExpiresAt??1/0)-Date.now()>6e4)return await H(),e.accessToken;let t=await I.run(()=>L());if(t)return t;let n=O();if((n?.tokenExpiresAt??1/0)-Date.now()>0&&n?.accessToken)return await H(),n.accessToken;throw Error(`GitHub session expired — please log in again`)}var W={id:`github`,name:`GitHub`,description:"Sign in with GitHub for git authentication (push/pull/clone) and the `oauth-token github` shell command. Does not expose LLM models — use the GitHub Copilot provider for those.",requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,oauthTokenDomains:[`github.com`,`*.github.com`,`api.github.com`,`raw.githubusercontent.com`],getModelIds:()=>[],onOAuthLogin:async(e,n,r)=>{let a=await E();if(!a)throw Error(`GitHub OAuth not configured — no client ID available`);let o=r?.scopes??S.scopes,s=D?null:await l(),c=!D&&await u(),d=crypto.randomUUID(),f=D?chrome.runtime.id:``,{redirectUri:p,state:m}=T({isExtension:D,isConnectMode:!!globalThis.__slicc_connect_mode,workerBaseUrl:g(),runtimeWorkerBaseUrl:w,pageOrigin:s?.origin??null,pageHref:s?.href??null,bridgeApiBaseUrl:i(),delegated:c,extensionId:f,nonce:d}),h=btoa(JSON.stringify(m)),_=d,v=new URLSearchParams({client_id:a,scope:o,redirect_uri:p});h&&v.set(`state`,h);let b=await e(`https://github.com/login/oauth/authorize?${v}`);if(!b)return;if(_)try{if(new URL(b).searchParams.get(`nonce`)!==_){console.error(`[github] OAuth nonce mismatch — possible CSRF`);return}}catch(e){console.warn(`[github] Nonce check skipped (URL parse failed):`,e instanceof Error?e.message:String(e))}let x=k(b);if(!x){console.error(`[github] Could not extract authorization code from redirect URL`);return}let C=await y({provider:`github`,code:x,redirectUri:p}),O=await A(C.access_token);await t({providerId:`github`,accessToken:C.access_token,refreshToken:C.refresh_token,tokenExpiresAt:C.expires_in?Date.now()+C.expires_in*1e3:void 0,userName:O.name,userAvatar:O.avatar,scopes:C.scope}),await P({clearOnFailure:!0}),await F(O),n()},onSilentRenew:L,onValidateToken:z,getValidAccessToken:U,onOAuthLogout:async()=>{let e=O();e?.accessToken&&await x({provider:`github`,accessToken:e.accessToken}).catch(e=>console.warn(`[github] Token revocation failed:`,e instanceof Error?e.message:String(e))),await N(),await t({providerId:`github`,accessToken:``})},getOAuthLogoutUrl:e=>`https://github.com/logout`};export{j as buildNoreplyEmail,W as config,k as extractCodeFromUrl,U as getValidAccessToken,T as resolveGithubOAuthRedirect,F as syncGitIdentityFromGitHub};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,n as t,r as n}from"./account-store-
|
|
1
|
+
import{_ as e,n as t,r as n}from"./account-store-CcZuCy3S.js";import"./proxied-fetch-CjhwqMwZ.js";import{o as r}from"./api-endpoint-D-Wsnvui.js";import{n as i}from"./tray-storage-keys-DbThbnIh.js";import{t as a}from"./tray-runtime-config-D3lyINo-.js";import{t as o}from"./global-db-BNyF6Scf.js";import{r as s,t as c}from"./silent-renew-backoff-Dmz3DJHb.js";import{getOAuthPageOrigin as l,resolveOAuthDelegation as u}from"./oauth-service-BGe-y713.js";import"./provider-settings-tlJjbAeQ.js";import{n as d,r as f,t as p}from"./bridge-token-required-BYgoMwr7.js";var m={clientId:``,scopes:`repo,read:user,user:email`};function h(){try{let e=localStorage.getItem(i);if(e)return e.replace(/\/$/,``)}catch{}return a}function g(e){return{access_token:e.access_token,token_type:e.token_type,scope:e.scope,refresh_token:e.refresh_token,expires_in:e.expires_in}}async function _(e){let t;try{t=await e.json()}catch{throw Error(`Token exchange failed (HTTP ${e.status}): non-JSON response`)}if(!e.ok&&e.status!==200){let n=t.error_description??t.error??`Token exchange failed (HTTP ${e.status})`;throw Error(n)}if(t.error){let e=t.error_description??t.error;throw Error(e)}return g(t)}async function v(e){let t=`${h()}/oauth/token`;return _(await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e.provider,code:e.code,redirect_uri:e.redirectUri})}))}async function y(e){if(d())throw new p;let t=`${h()}/oauth/token`,n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e.provider,refresh_token:e.refreshToken})});if(n.status===403&&typeof n.clone==`function`){let e=await n.clone().text();if(f(n.status,e))throw new p}return _(n)}async function b(e){let t=`${h()}/oauth/revoke`,n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e.provider,access_token:e.accessToken})});if(!(n.status===204||n.ok)){if(n.status===400)try{if((await n.json()).error===`unsupported`)return}catch{}throw Error(`Token revocation failed (HTTP ${n.status})`)}}const x=(/* @__PURE__ */ Object.assign({"/packages/webapp/providers/github-config.json":m}))[`/packages/webapp/providers/github-config.json`]??{clientId:``,scopes:`repo,read:user,user:email`};let S=null,C=null;function w(e){let{isExtension:t,isConnectMode:n,workerBaseUrl:r,pageOrigin:i,pageHref:a,bridgeApiBaseUrl:o,extensionId:c,nonce:l}=e;if(t)return{redirectUri:`${r}/auth/callback`,state:{source:`extension`,extensionId:c,path:`/github`,nonce:l}};if(e.delegated)return{redirectUri:`${e.runtimeWorkerBaseUrl??r}/auth/callback`,state:{source:`opener`,path:`/auth/callback`,nonce:l}};if(n){let e=i??``;if(/^https?:\/\/(localhost|127\.0\.0\.1):\d+$/.test(e)){let t=parseInt(new URL(a??e).port||`8790`,10);return{redirectUri:`${r}/auth/callback`,state:{source:`local`,port:t,path:`/auth/callback`,nonce:l}}}return{redirectUri:`${r}/auth/callback`,state:{source:`remote`,origin:e,path:`/auth/callback`,nonce:l}}}if(o&&a&&s(a)){let t=null;try{let e=new URL(o);(e.hostname===`localhost`||e.hostname===`127.0.0.1`)&&(t=parseInt(e.port||`5710`,10))}catch{t=null}if(t!==null&&!Number.isNaN(t))return{redirectUri:`${e.runtimeWorkerBaseUrl??r}/auth/callback`,state:{source:`local`,port:t,path:`/auth/callback`,nonce:l}}}return{redirectUri:`${e.runtimeWorkerBaseUrl??i??``}/auth/callback`,state:{port:parseInt(new URL(a??i??`http://localhost:5710`).port||`5710`,10),path:`/auth/callback`,nonce:l}}}async function T(){if(S)return S;if(E){try{let e=await fetch(`${h()}/api/runtime-config`);if(e.ok){let t=await e.json();if(t.oauth?.github)return S=t.oauth.github,S}}catch{}return x.clientId}try{let e=await fetch(`/api/runtime-config`);if(e.ok){let t=await e.json();if(t.oauth?.github)return S=t.oauth.github,t.trayWorkerBaseUrl&&(C=t.trayWorkerBaseUrl),S;if(t.trayWorkerBaseUrl){C=t.trayWorkerBaseUrl;let e=await fetch(`${t.trayWorkerBaseUrl}/api/runtime-config`);if(e.ok){let t=await e.json();if(t.oauth?.github)return S=t.oauth.github,S}}}}catch{}return x.clientId}const E=typeof globalThis<`u`&&typeof globalThis.chrome?.runtime?.id==`string`;function D(){return n().find(e=>e.providerId===`github`)}function O(e){try{return new URL(e).searchParams.get(`code`)}catch{return null}}async function k(e){try{let t=await fetch(`https://api.github.com/user`,{headers:{Authorization:`Bearer ${e}`,Accept:`application/vnd.github+json`}});if(t.ok){let e=await t.json();return{name:e.name||e.login,avatar:e.avatar_url,login:e.login,id:e.id}}}catch(e){console.warn(`[github] Failed to fetch user profile:`,e instanceof Error?e.message:String(e))}return{}}function A(e,t){return`${e}+${t}@users.noreply.github.com`}async function j(e){try{let{VirtualFS:t}=await import(`./fs-T_lAyEsT.js`).then(e=>e.t);await(await t.create({dbName:o})).writeFile(`/workspace/.git/github-token`,e),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`github-token-changed`))}catch(e){console.warn(`[github] Failed to write git token:`,e instanceof Error?e.message:String(e))}}async function M(){try{let{VirtualFS:e}=await import(`./fs-T_lAyEsT.js`).then(e=>e.t);await(await e.create({dbName:o})).rm(`/workspace/.git/github-token`),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`github-token-changed`))}catch{}}async function N(e){let n=await t(`github`);n.maskedValue?await j(n.maskedValue):e?.clearOnFailure&&await M()}async function P(e){if(e.login&&e.id!==void 0)try{let{VirtualFS:t}=await import(`./fs-T_lAyEsT.js`).then(e=>e.t),{readGlobalGitConfigValue:n,writeGlobalGitConfigValue:r}=await import(`./git-config-CZVx93O7.js`).then(e=>e.n),i=await t.create({dbName:o}),a=e.name||e.login,s=A(e.id,e.login);!await n(i,`user.name`)&&a&&await r(i,`user.name`,a),await n(i,`user.email`)||await r(i,`user.email`,s)}catch(e){console.warn(`[github] Failed to seed git identity:`,e instanceof Error?e.message:String(e))}}const F=c();async function I(){try{let t=D();if(!t?.refreshToken)return null;let n=await y({provider:`github`,refreshToken:t.refreshToken});return await e({providerId:`github`,accessToken:n.access_token,refreshToken:n.refresh_token,tokenExpiresAt:n.expires_in?Date.now()+n.expires_in*1e3:void 0,userName:t.userName,userAvatar:t.userAvatar,scopes:n.scope??t.scopes}),await N({clearOnFailure:!0}),n.access_token}catch(e){return console.warn(`[github] Silent renewal failed:`,e instanceof Error?e.message:String(e)),null}}async function L(){let e=D()?.accessToken;if(!e)return{status:`unknown`,detail:`no stored token`};try{let t=await fetch(`https://api.github.com/user`,{headers:{Authorization:`Bearer ${e}`,Accept:`application/vnd.github+json`},signal:AbortSignal.timeout(1e4)});if(t.ok){let e=await t.json().catch(()=>({}));return{status:`accepted`,userName:e.name||e.login}}return R(t)}catch(e){return{status:`unknown`,detail:e instanceof Error?e.message:String(e)}}}function R(e){let t=`HTTP ${e.status}${e.statusText?` ${e.statusText}`:``}`;return e.status===401?{status:`rejected`,detail:t}:e.status===403&&z(e)?{status:`unknown`,detail:`${t} (rate limited)`}:{status:`unknown`,detail:t}}function z(e){return e.headers.get(`x-ratelimit-remaining`)===`0`||e.headers.has(`retry-after`)}async function B(){await N()}async function V(){let e=D();if(!e?.accessToken)throw Error(`Not logged in to GitHub — please log in first`);if((e.tokenExpiresAt??1/0)-Date.now()>6e4)return await B(),e.accessToken;let t=await F.run(()=>I());if(t)return t;let n=D();if((n?.tokenExpiresAt??1/0)-Date.now()>0&&n?.accessToken)return await B(),n.accessToken;throw Error(`GitHub session expired — please log in again`)}const H={id:`github`,name:`GitHub`,description:"Sign in with GitHub for git authentication (push/pull/clone) and the `oauth-token github` shell command. Does not expose LLM models — use the GitHub Copilot provider for those.",requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,oauthTokenDomains:[`github.com`,`*.github.com`,`api.github.com`,`raw.githubusercontent.com`],getModelIds:()=>[],onOAuthLogin:async(t,n,i)=>{let a=await T();if(!a)throw Error(`GitHub OAuth not configured — no client ID available`);let o=i?.scopes??x.scopes,s=E?null:await l(),c=!E&&await u(),d=crypto.randomUUID(),f=E?chrome.runtime.id:``,{redirectUri:p,state:m}=w({isExtension:E,isConnectMode:!!globalThis.__slicc_connect_mode,workerBaseUrl:h(),runtimeWorkerBaseUrl:C,pageOrigin:s?.origin??null,pageHref:s?.href??null,bridgeApiBaseUrl:r(),delegated:c,extensionId:f,nonce:d}),g=btoa(JSON.stringify(m)),_=d,y=new URLSearchParams({client_id:a,scope:o,redirect_uri:p});g&&y.set(`state`,g);let b=await t(`https://github.com/login/oauth/authorize?${y}`);if(!b)return;if(_)try{if(new URL(b).searchParams.get(`nonce`)!==_){console.error(`[github] OAuth nonce mismatch — possible CSRF`);return}}catch(e){console.warn(`[github] Nonce check skipped (URL parse failed):`,e instanceof Error?e.message:String(e))}let S=O(b);if(!S){console.error(`[github] Could not extract authorization code from redirect URL`);return}let D=await v({provider:`github`,code:S,redirectUri:p}),A=await k(D.access_token);await e({providerId:`github`,accessToken:D.access_token,refreshToken:D.refresh_token,tokenExpiresAt:D.expires_in?Date.now()+D.expires_in*1e3:void 0,userName:A.name,userAvatar:A.avatar,scopes:D.scope}),await N({clearOnFailure:!0}),await P(A),n()},onSilentRenew:I,onValidateToken:L,getValidAccessToken:V,onOAuthLogout:async()=>{let t=D();t?.accessToken&&await b({provider:`github`,accessToken:t.accessToken}).catch(e=>console.warn(`[github] Token revocation failed:`,e instanceof Error?e.message:String(e))),await M(),await e({providerId:`github`,accessToken:``})},getOAuthLogoutUrl:e=>`https://github.com/logout`};export{A as buildNoreplyEmail,H as config,O as extractCodeFromUrl,V as getValidAccessToken,w as resolveGithubOAuthRedirect,P as syncGitIdentityFromGitHub};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/clipboard-BcXi_DuW.js","assets/rolldown-runtime-COiEfhsA.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{$ as e,o as t,s as n,v as r}from"./core-eNeHeyA9.js";import{t as i}from"./preload-helper-BLdHbfdN.js";import{a,c as o,i as s,r as c,s as l,t as u}from"./legacy-api-aliases-BiW3Sxkn.js";import{K as d,u as f}from"./account-store-dUOszes2.js";import"./main-Dna00i-n.js";import{t as p}from"./anthropic-proxy-compat-CaymbdBf.js";import{n as m}from"./temperature-support-CQFa5vxR.js";function h(e,t){return{...e,api:`anthropic-messages`,baseUrl:t.baseUrl,headers:t.headers,provider:`github-copilot`,compat:p(e.compat)}}var ee=`https://api.github.com/copilot_internal/user`,g=8e3;function _(e){if(!e||typeof e!=`object`)return null;let t=e.quota_snapshots?.premium_interactions;return!t||t.unlimited||typeof t.percent_remaining!=`number`?null:{percent:Math.max(0,100-t.percent_remaining),status:t.percent_remaining<=0&&t.overage_permitted!==!0?`rate-limited`:`ok`,window:`monthly`,resetsAt:e.quota_reset_date_utc}}async function v(e,t,n={}){let r=typeof AbortController==`function`?new AbortController:null,i=r?setTimeout(()=>r.abort(),n.timeoutMs??g):null;try{let i=await t(ee,{headers:{...n.headers,Authorization:`Bearer ${e}`},...r?{signal:r.signal}:{}});if(i.status===404||i.status===501)return null;if(!i.ok)throw Error(`GitHub Copilot /copilot_internal/user returned ${i.status}`);return _(await i.json())}finally{i&&clearTimeout(i)}}var y=`github-copilot`,b=atob(`SXYxLmI1MDdhMDhjODdlY2ZlOTg=`),x=`https://github.com/login/device/code`,S=`https://github.com/login/oauth/access_token`,C=`https://api.github.com/copilot_internal/v2/token`,w={Accept:`application/json`,"Editor-Version":`vscode/1.107.0`,"Editor-Plugin-Version":`copilot-chat/0.35.0`,"Copilot-Integration-Id":`vscode-chat`},T={Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`},E=`https://github.com/login/device/success*`;function D(){return f().find(e=>e.providerId===y)}async function te(){let e=await fetch(x,{method:`POST`,headers:T,body:new URLSearchParams({client_id:b,scope:`read:user`})});if(!e.ok)throw Error(`GitHub device-code request failed: ${e.status} ${e.statusText} — ${await e.text().catch(()=>``)}`);let t=await e.json();if(typeof t.device_code!=`string`||typeof t.user_code!=`string`||typeof t.verification_uri!=`string`||typeof t.expires_in!=`number`||typeof t.interval!=`number`)throw Error(`GitHub device-code response had an unexpected shape`);return t}async function ne(e,t){let n=Date.now()+e.expires_in*1e3,r=Math.max(1e3,Math.floor(e.interval*1e3)),i=1.2;for(;Date.now()<n;){if(t.aborted)throw Error(`Copilot login cancelled`);await re(Math.ceil(r*i),t);let n=await fetch(S,{method:`POST`,headers:T,body:new URLSearchParams({client_id:b,device_code:e.device_code,grant_type:`urn:ietf:params:oauth:grant-type:device_code`})});if(!n.ok)throw Error(`GitHub token poll failed: ${n.status} ${n.statusText} — ${await n.text().catch(()=>``)}`);let a=await n.json();if(typeof a.access_token==`string`&&a.access_token.length>0)return a.access_token;if(a.error!==`authorization_pending`){if(a.error===`slow_down`)r=typeof a.interval==`number`?a.interval*1e3:r+5e3,i=1.4;else if(a.error){let e=a.error_description?`: ${a.error_description}`:``;throw Error(`Device flow failed (${a.error})${e}`)}}}throw Error(`Copilot device flow timed out (device code expired)`)}function re(e,t){return new Promise((n,r)=>{if(t.aborted){r(Error(`Copilot login cancelled`));return}let i=setTimeout(n,e);t.addEventListener(`abort`,()=>{clearTimeout(i),r(Error(`Copilot login cancelled`))},{once:!0})})}function O(e){let t=e.match(/proxy-ep=([^;]+)/);return t?`https://${t[1].replace(/^proxy\./,`api.`)}`:null}async function k(e){let t=await fetch(C,{headers:{...w,Authorization:`Bearer ${e}`}});if(!t.ok){let e=await t.text().catch(()=>``);throw Error(`Copilot token exchange failed: ${t.status} ${t.statusText} — ${e.slice(0,300)}`)}let n=await t.json();if(typeof n.token!=`string`||typeof n.expires_at!=`number`)throw Error(`Copilot token exchange returned an unexpected payload`);if(n.chat_enabled===!1)throw Error(`GitHub Copilot Chat is disabled for this account (no chat features granted)`);return{copilotToken:n.token,expiresAtMs:n.expires_at*1e3-3e5,apiBaseUrl:O(n.token)??`https://api.individual.githubcopilot.com`,githubAccessToken:e}}var A=`github-copilot.models.v1`;function j(e){let t=e.supported_endpoints??[],n=(e.vendor??``).toLowerCase(),r=e.id;return n===`anthropic`&&t.includes(`/v1/messages`)?`anthropic-messages`:n===`openai`&&(/^gpt-5/i.test(r)||/codex/i.test(r)||/^o\d/i.test(r))?`openai-responses`:`openai-completions`}function M(e){if(!e||typeof e!=`object`)return[];let t=e.data;if(!Array.isArray(t))return[];let n=[];for(let e of t)e.capabilities?.type&&e.capabilities.type!==`chat`||e.model_picker_enabled!==!1&&e.id&&n.push({id:e.id,name:e.name??e.id,vendor:e.vendor??``,api:j(e),contextWindow:e.capabilities?.limits?.max_context_window_tokens??e.capabilities?.limits?.max_prompt_tokens??128e3,maxTokens:e.capabilities?.limits?.max_output_tokens??8192,supportsTools:e.capabilities?.supports?.tool_calls===!0,supportsStreaming:e.capabilities?.supports?.streaming!==!1,supportsVision:e.capabilities?.supports?.vision===!0,supportsReasoning:e.capabilities?.supports?.adaptive_thinking===!0||Array.isArray(e.capabilities?.supports?.reasoning_effort),policyState:e.policy?.state??`enabled`});return n}async function N(e){let t=await fetch(`${e.apiBaseUrl}/models`,{headers:{...w,Authorization:`Bearer ${e.copilotToken}`,Accept:`application/json`}});if(!t.ok)throw Error(`Copilot /models returned ${t.status} ${t.statusText}`);return M(await t.json())}function P(){if(typeof localStorage>`u`)return[];try{let e=localStorage.getItem(A);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function F(e){if(typeof localStorage<`u`)try{localStorage.setItem(A,JSON.stringify(e))}catch{}}function I(e){return P().find(t=>t.id===e)??null}async function L(e){let t;try{t=await N(e)}catch(e){console.warn(`[github-copilot] Catalog refresh failed; keeping previous cache.`,e instanceof Error?e.message:String(e));return}F(t),await Promise.all(t.filter(e=>e.policyState===`disabled`).map(async t=>{let n=`${e.apiBaseUrl}/models/${encodeURIComponent(t.id)}/policy`;try{let r=await fetch(n,{method:`POST`,headers:{...w,"Content-Type":`application/json`,Authorization:`Bearer ${e.copilotToken}`,"openai-intent":`chat-policy`,"x-interaction-type":`chat-policy`},body:JSON.stringify({state:`enabled`})});r.ok?t.policyState=`enabled`:r.status!==404&&r.status!==400&&console.warn(`[github-copilot] enable policy for ${t.id} returned ${r.status} ${r.statusText}`)}catch(e){console.warn(`[github-copilot] enable policy for ${t.id} failed:`,e instanceof Error?e.message:String(e))}})),F(t)}async function R(e,t){await d({providerId:y,accessToken:e.copilotToken,refreshToken:e.githubAccessToken,tokenExpiresAt:e.expiresAtMs,baseUrl:e.apiBaseUrl,userName:t})}async function z(){let e=D();if(!e?.accessToken||!e.refreshToken)throw Error(`Not logged in to GitHub Copilot — click "Login" in the provider settings`);let t=e.tokenExpiresAt??0;if(Date.now()<t-6e4)return e.accessToken;let n=await k(e.refreshToken);return await R(n,e.userName),n.copilotToken}var B=[`mini`,`nano`,`flash`,`haiku`,`lite`,`embedding`];function V(e){let t=[e.id,e.name??``].flatMap(e=>{let t=e.toLowerCase();return[t,t.replace(/[\s_.:]+/g,`-`)]});return!B.some(e=>t.some(t=>t.includes(e)))}function H(){if(!D()?.accessToken)return[];let e=P();if(e.length>0)return e.filter(e=>!e.policyState.startsWith(`unavailable:`)).filter(e=>V(e)).map(e=>({id:e.id,name:e.name,api:e.api===`anthropic-messages`?`anthropic`:`openai`,context_window:e.contextWindow,max_tokens:e.maxTokens,reasoning:e.supportsReasoning,input:e.supportsVision?[`text`,`image`]:[`text`]}));let t;try{t=n(`github-copilot`)}catch{return[]}return t.filter(e=>V({id:e.id,name:e.name})).map(e=>({id:e.id,name:e.name??e.id,api:e.api===`anthropic-messages`?`anthropic`:`openai`,context_window:e.contextWindow,max_tokens:e.maxTokens,reasoning:e.reasoning,input:e.input}))}function U(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:e.api,provider:y,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}var W={"User-Agent":`GitHubCopilotChat/0.35.0`,"Editor-Version":`vscode/1.107.0`,"Editor-Plugin-Version":`copilot-chat/0.35.0`,"Copilot-Integration-Id":`vscode-chat`};function G(e){let n=D(),r=n?.baseUrl??`https://api.individual.githubcopilot.com`,i=I(e);if(i)return{api:i.api,baseUrl:r,headers:{...W}};try{let r=t(`github-copilot`,e);return{api:r.api,baseUrl:n?.baseUrl??r.baseUrl,headers:{...r.headers??{},...W}}}catch{return null}}function K(e,t){let n=P(),r=n.findIndex(t=>t.id===e);r<0||(n[r]={...n[r],policyState:`unavailable:${t}`},F(n))}function q(e,t){return`GitHub Copilot rejected "${e}" with model_not_supported. This usually means the model isn't included in your Copilot plan (Opus and other premium models require Copilot Pro / Pro+ / Business / Enterprise). Try Claude Sonnet 4.6 or another model that appears in the picker after a fresh login. Original error: ${t}`}function J(e){if(!e||typeof e!=`object`)return null;let t=e;if(t.type!==`error`)return null;if(t.error&&typeof t.error==`object`){let e=t.error.errorMessage;if(typeof e==`string`)return e}return typeof t.errorMessage==`string`?t.errorMessage:null}function Y(e,t){return e===`anthropic-messages`?t?a:u:e===`openai-responses`?t?o:s:t?l:c}function ie(e,t,n){let r=J(n);if(r&&/model_not_supported/i.test(r)){K(t.id,`model_not_supported`);let n=q(t.id,r);return console.error(`[github-copilot] Plan-gated model rejection:`,n),e.push(U(t,Error(n))),e.end(),!0}return e.push(n),!1}function ae(e,t,n){let r=n instanceof Error?n.message:String(n),i=n;/model_not_supported/i.test(r)&&(K(t.id,`model_not_supported`),i=Error(q(t.id,r))),console.error(`[github-copilot] Stream error:`,i instanceof Error?i.message:String(i)),e.push(U(t,i)),e.end()}async function oe(e,t,n,r,i){try{let a=await z(),o=G(t.id);if(!o)throw Error(`GitHub Copilot does not recognize "${t.id}" — open the picker (the model list refreshes on login) and pick a current model.`);let s=o.api===`anthropic-messages`?h(t,o):{...t,api:o.api,baseUrl:o.baseUrl,headers:o.headers,provider:`github-copilot`},c=m(t.id,t.name,{...r,apiKey:a}),l=Y(o.api,i)(s,n,c);for await(let n of l)if(ie(e,t,n))return;e.end()}catch(n){ae(e,t,n)}}function X(t){return(n,r,i={})=>{let a=e();return oe(a,n,r,i,t),a}}var Z=X(!1),Q=X(!0),$=({userCode:e,verificationUrl:t})=>typeof document>`u`?(console.info(`[github-copilot] Device verification code: ${e} — open ${t} in a browser to authorize.`),Promise.resolve(`continue`)):new Promise(t=>{let n=document.createElement(`div`);n.setAttribute(`data-slicc-overlay`,`github-copilot-device`),n.style.cssText=`position:fixed;top:24px;right:24px;z-index:2147483647;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:10px;padding:16px 18px;box-shadow:0 8px 32px rgba(0,0,0,0.45);font:13px/1.4 -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;min-width:260px;max-width:340px`;let r=document.createElement(`div`);r.textContent=`GitHub Copilot — verification code`,r.style.cssText=`font-weight:600;margin-bottom:8px;color:#7ee787`;let a=document.createElement(`div`);a.textContent=e,a.style.cssText=`font:600 22px ui-monospace, SFMono-Regular, Menlo, monospace;letter-spacing:2px;background:#161b22;border:1px solid #30363d;border-radius:6px;padding:10px 12px;text-align:center;margin-bottom:10px;user-select:all;cursor:text`;let o=document.createElement(`div`);o.style.cssText=`color:#8b949e;font-size:12px;line-height:1.5`,o.textContent=`Copy the code, then click Continue to open the GitHub authorization page in a new tab.`;let s=document.createElement(`div`);s.style.cssText=`display:flex;gap:8px;margin-top:12px;justify-content:flex-end`;let c=document.createElement(`button`);c.type=`button`,c.textContent=`Cancel`,c.style.cssText=`background:transparent;color:#e6edf3;border:1px solid #30363d;border-radius:6px;padding:6px 12px;font:600 12px inherit;cursor:pointer`;let l=document.createElement(`button`);l.type=`button`,l.textContent=`Copy & Continue`,l.style.cssText=`background:#238636;color:#fff;border:0;border-radius:6px;padding:6px 12px;font:600 12px inherit;cursor:pointer`;let u=()=>{try{n.remove()}catch{}};c.addEventListener(`click`,()=>{u(),t(`cancel`)}),l.addEventListener(`click`,()=>{(async()=>{try{let{copyTextToClipboard:t}=await i(async()=>{let{copyTextToClipboard:e}=await import(`./clipboard-BcXi_DuW.js`).then(e=>e.t);return{copyTextToClipboard:e}},__vite__mapDeps([0,1]));await t(e)}catch{}u(),t(`continue`)})()}),s.appendChild(c),s.appendChild(l),n.appendChild(r),n.appendChild(a),n.appendChild(o),n.appendChild(s),document.body.appendChild(n)});async function se(){let e=D();return e?.refreshToken?v(e.refreshToken,fetch,{headers:w}):null}var ce={id:y,name:`GitHub Copilot`,description:`Use your GitHub Copilot subscription to access Claude, GPT-5, Codex, Gemini, and Grok models. Sign in with the GitHub device-code flow.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:`claude-sonnet-4.6`,oauthTokenDomains:[`*.githubcopilot.com`,`api.individual.githubcopilot.com`,`api.business.githubcopilot.com`,`api.enterprise.githubcopilot.com`],getModelIds:H,getBudgetUsage:se,onOAuthLoginIntercepted:async(e,t,n)=>{let r=await te(),i=new URL(r.verification_uri);if(i.searchParams.set(`user_code`,r.user_code),await(n?.presentDeviceCode??$)({userCode:r.user_code,verificationUrl:i.toString(),expiresInSeconds:r.expires_in})===`cancel`)throw Error(`GitHub Copilot login cancelled`);let a=new AbortController,o=e({authorizeUrl:i.toString(),redirectUriPattern:E,onCapture:`close`,timeoutMs:r.expires_in*1e3}).catch(e=>(console.warn(`[github-copilot] Launcher failed:`,e instanceof Error?e.message:String(e)),null)),s;try{s=await ne(r,a.signal)}catch(e){throw a.abort(),await o,e}await o;let c=await k(s),l;try{let e=await fetch(`https://api.github.com/user`,{headers:{Authorization:`Bearer ${s}`,Accept:`application/json`}});if(e.ok){let t=await e.json();l=t.name||t.login}}catch{}await R(c,l),await L(c),t()},onOAuthLogout:async()=>{await d({providerId:y,accessToken:``})},onSilentRenew:async()=>{let e=D();if(!e?.refreshToken)return null;try{let t=await k(e.refreshToken);return await R(t,e.userName),await L(t),t.copilotToken}catch(e){return console.warn(`[github-copilot] Silent renew failed:`,e instanceof Error?e.message:String(e)),null}}};function le(){r({api:`github-copilot-anthropic`,stream:Z,streamSimple:Q}),r({api:`github-copilot-openai`,stream:Z,streamSimple:Q})}export{ce as config,V as isCopilotConeCompatible,le as register};
|
|
2
|
+
import{$ as e,o as t,s as n,v as r}from"./core-eNeHeyA9.js";import{t as i}from"./preload-helper-BLdHbfdN.js";import{a,c as o,i as s,r as c,s as l,t as u}from"./legacy-api-aliases-BiW3Sxkn.js";import{K as d,u as f}from"./account-store-BGnbKLs5.js";import"./main-CXxw-s8f.js";import{t as p}from"./anthropic-proxy-compat-CaymbdBf.js";import{n as m}from"./temperature-support-CQFa5vxR.js";function h(e,t){return{...e,api:`anthropic-messages`,baseUrl:t.baseUrl,headers:t.headers,provider:`github-copilot`,compat:p(e.compat)}}var ee=`https://api.github.com/copilot_internal/user`,g=8e3;function _(e){if(!e||typeof e!=`object`)return null;let t=e.quota_snapshots?.premium_interactions;return!t||t.unlimited||typeof t.percent_remaining!=`number`?null:{percent:Math.max(0,100-t.percent_remaining),status:t.percent_remaining<=0&&t.overage_permitted!==!0?`rate-limited`:`ok`,window:`monthly`,resetsAt:e.quota_reset_date_utc}}async function v(e,t,n={}){let r=typeof AbortController==`function`?new AbortController:null,i=r?setTimeout(()=>r.abort(),n.timeoutMs??g):null;try{let i=await t(ee,{headers:{...n.headers,Authorization:`Bearer ${e}`},...r?{signal:r.signal}:{}});if(i.status===404||i.status===501)return null;if(!i.ok)throw Error(`GitHub Copilot /copilot_internal/user returned ${i.status}`);return _(await i.json())}finally{i&&clearTimeout(i)}}var y=`github-copilot`,b=atob(`SXYxLmI1MDdhMDhjODdlY2ZlOTg=`),x=`https://github.com/login/device/code`,S=`https://github.com/login/oauth/access_token`,C=`https://api.github.com/copilot_internal/v2/token`,w={Accept:`application/json`,"Editor-Version":`vscode/1.107.0`,"Editor-Plugin-Version":`copilot-chat/0.35.0`,"Copilot-Integration-Id":`vscode-chat`},T={Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`},E=`https://github.com/login/device/success*`;function D(){return f().find(e=>e.providerId===y)}async function te(){let e=await fetch(x,{method:`POST`,headers:T,body:new URLSearchParams({client_id:b,scope:`read:user`})});if(!e.ok)throw Error(`GitHub device-code request failed: ${e.status} ${e.statusText} — ${await e.text().catch(()=>``)}`);let t=await e.json();if(typeof t.device_code!=`string`||typeof t.user_code!=`string`||typeof t.verification_uri!=`string`||typeof t.expires_in!=`number`||typeof t.interval!=`number`)throw Error(`GitHub device-code response had an unexpected shape`);return t}async function ne(e,t){let n=Date.now()+e.expires_in*1e3,r=Math.max(1e3,Math.floor(e.interval*1e3)),i=1.2;for(;Date.now()<n;){if(t.aborted)throw Error(`Copilot login cancelled`);await re(Math.ceil(r*i),t);let n=await fetch(S,{method:`POST`,headers:T,body:new URLSearchParams({client_id:b,device_code:e.device_code,grant_type:`urn:ietf:params:oauth:grant-type:device_code`})});if(!n.ok)throw Error(`GitHub token poll failed: ${n.status} ${n.statusText} — ${await n.text().catch(()=>``)}`);let a=await n.json();if(typeof a.access_token==`string`&&a.access_token.length>0)return a.access_token;if(a.error!==`authorization_pending`){if(a.error===`slow_down`)r=typeof a.interval==`number`?a.interval*1e3:r+5e3,i=1.4;else if(a.error){let e=a.error_description?`: ${a.error_description}`:``;throw Error(`Device flow failed (${a.error})${e}`)}}}throw Error(`Copilot device flow timed out (device code expired)`)}function re(e,t){return new Promise((n,r)=>{if(t.aborted){r(Error(`Copilot login cancelled`));return}let i=setTimeout(n,e);t.addEventListener(`abort`,()=>{clearTimeout(i),r(Error(`Copilot login cancelled`))},{once:!0})})}function O(e){let t=e.match(/proxy-ep=([^;]+)/);return t?`https://${t[1].replace(/^proxy\./,`api.`)}`:null}async function k(e){let t=await fetch(C,{headers:{...w,Authorization:`Bearer ${e}`}});if(!t.ok){let e=await t.text().catch(()=>``);throw Error(`Copilot token exchange failed: ${t.status} ${t.statusText} — ${e.slice(0,300)}`)}let n=await t.json();if(typeof n.token!=`string`||typeof n.expires_at!=`number`)throw Error(`Copilot token exchange returned an unexpected payload`);if(n.chat_enabled===!1)throw Error(`GitHub Copilot Chat is disabled for this account (no chat features granted)`);return{copilotToken:n.token,expiresAtMs:n.expires_at*1e3-3e5,apiBaseUrl:O(n.token)??`https://api.individual.githubcopilot.com`,githubAccessToken:e}}var A=`github-copilot.models.v1`;function j(e){let t=e.supported_endpoints??[],n=(e.vendor??``).toLowerCase(),r=e.id;return n===`anthropic`&&t.includes(`/v1/messages`)?`anthropic-messages`:n===`openai`&&(/^gpt-5/i.test(r)||/codex/i.test(r)||/^o\d/i.test(r))?`openai-responses`:`openai-completions`}function M(e){if(!e||typeof e!=`object`)return[];let t=e.data;if(!Array.isArray(t))return[];let n=[];for(let e of t)e.capabilities?.type&&e.capabilities.type!==`chat`||e.model_picker_enabled!==!1&&e.id&&n.push({id:e.id,name:e.name??e.id,vendor:e.vendor??``,api:j(e),contextWindow:e.capabilities?.limits?.max_context_window_tokens??e.capabilities?.limits?.max_prompt_tokens??128e3,maxTokens:e.capabilities?.limits?.max_output_tokens??8192,supportsTools:e.capabilities?.supports?.tool_calls===!0,supportsStreaming:e.capabilities?.supports?.streaming!==!1,supportsVision:e.capabilities?.supports?.vision===!0,supportsReasoning:e.capabilities?.supports?.adaptive_thinking===!0||Array.isArray(e.capabilities?.supports?.reasoning_effort),policyState:e.policy?.state??`enabled`});return n}async function N(e){let t=await fetch(`${e.apiBaseUrl}/models`,{headers:{...w,Authorization:`Bearer ${e.copilotToken}`,Accept:`application/json`}});if(!t.ok)throw Error(`Copilot /models returned ${t.status} ${t.statusText}`);return M(await t.json())}function P(){if(typeof localStorage>`u`)return[];try{let e=localStorage.getItem(A);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function F(e){if(typeof localStorage<`u`)try{localStorage.setItem(A,JSON.stringify(e))}catch{}}function I(e){return P().find(t=>t.id===e)??null}async function L(e){let t;try{t=await N(e)}catch(e){console.warn(`[github-copilot] Catalog refresh failed; keeping previous cache.`,e instanceof Error?e.message:String(e));return}F(t),await Promise.all(t.filter(e=>e.policyState===`disabled`).map(async t=>{let n=`${e.apiBaseUrl}/models/${encodeURIComponent(t.id)}/policy`;try{let r=await fetch(n,{method:`POST`,headers:{...w,"Content-Type":`application/json`,Authorization:`Bearer ${e.copilotToken}`,"openai-intent":`chat-policy`,"x-interaction-type":`chat-policy`},body:JSON.stringify({state:`enabled`})});r.ok?t.policyState=`enabled`:r.status!==404&&r.status!==400&&console.warn(`[github-copilot] enable policy for ${t.id} returned ${r.status} ${r.statusText}`)}catch(e){console.warn(`[github-copilot] enable policy for ${t.id} failed:`,e instanceof Error?e.message:String(e))}})),F(t)}async function R(e,t){await d({providerId:y,accessToken:e.copilotToken,refreshToken:e.githubAccessToken,tokenExpiresAt:e.expiresAtMs,baseUrl:e.apiBaseUrl,userName:t})}async function z(){let e=D();if(!e?.accessToken||!e.refreshToken)throw Error(`Not logged in to GitHub Copilot — click "Login" in the provider settings`);let t=e.tokenExpiresAt??0;if(Date.now()<t-6e4)return e.accessToken;let n=await k(e.refreshToken);return await R(n,e.userName),n.copilotToken}var B=[`mini`,`nano`,`flash`,`haiku`,`lite`,`embedding`];function V(e){let t=[e.id,e.name??``].flatMap(e=>{let t=e.toLowerCase();return[t,t.replace(/[\s_.:]+/g,`-`)]});return!B.some(e=>t.some(t=>t.includes(e)))}function H(){if(!D()?.accessToken)return[];let e=P();if(e.length>0)return e.filter(e=>!e.policyState.startsWith(`unavailable:`)).filter(e=>V(e)).map(e=>({id:e.id,name:e.name,api:e.api===`anthropic-messages`?`anthropic`:`openai`,context_window:e.contextWindow,max_tokens:e.maxTokens,reasoning:e.supportsReasoning,input:e.supportsVision?[`text`,`image`]:[`text`]}));let t;try{t=n(`github-copilot`)}catch{return[]}return t.filter(e=>V({id:e.id,name:e.name})).map(e=>({id:e.id,name:e.name??e.id,api:e.api===`anthropic-messages`?`anthropic`:`openai`,context_window:e.contextWindow,max_tokens:e.maxTokens,reasoning:e.reasoning,input:e.input}))}function U(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:e.api,provider:y,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}var W={"User-Agent":`GitHubCopilotChat/0.35.0`,"Editor-Version":`vscode/1.107.0`,"Editor-Plugin-Version":`copilot-chat/0.35.0`,"Copilot-Integration-Id":`vscode-chat`};function G(e){let n=D(),r=n?.baseUrl??`https://api.individual.githubcopilot.com`,i=I(e);if(i)return{api:i.api,baseUrl:r,headers:{...W}};try{let r=t(`github-copilot`,e);return{api:r.api,baseUrl:n?.baseUrl??r.baseUrl,headers:{...r.headers??{},...W}}}catch{return null}}function K(e,t){let n=P(),r=n.findIndex(t=>t.id===e);r<0||(n[r]={...n[r],policyState:`unavailable:${t}`},F(n))}function q(e,t){return`GitHub Copilot rejected "${e}" with model_not_supported. This usually means the model isn't included in your Copilot plan (Opus and other premium models require Copilot Pro / Pro+ / Business / Enterprise). Try Claude Sonnet 4.6 or another model that appears in the picker after a fresh login. Original error: ${t}`}function J(e){if(!e||typeof e!=`object`)return null;let t=e;if(t.type!==`error`)return null;if(t.error&&typeof t.error==`object`){let e=t.error.errorMessage;if(typeof e==`string`)return e}return typeof t.errorMessage==`string`?t.errorMessage:null}function Y(e,t){return e===`anthropic-messages`?t?a:u:e===`openai-responses`?t?o:s:t?l:c}function ie(e,t,n){let r=J(n);if(r&&/model_not_supported/i.test(r)){K(t.id,`model_not_supported`);let n=q(t.id,r);return console.error(`[github-copilot] Plan-gated model rejection:`,n),e.push(U(t,Error(n))),e.end(),!0}return e.push(n),!1}function ae(e,t,n){let r=n instanceof Error?n.message:String(n),i=n;/model_not_supported/i.test(r)&&(K(t.id,`model_not_supported`),i=Error(q(t.id,r))),console.error(`[github-copilot] Stream error:`,i instanceof Error?i.message:String(i)),e.push(U(t,i)),e.end()}async function oe(e,t,n,r,i){try{let a=await z(),o=G(t.id);if(!o)throw Error(`GitHub Copilot does not recognize "${t.id}" — open the picker (the model list refreshes on login) and pick a current model.`);let s=o.api===`anthropic-messages`?h(t,o):{...t,api:o.api,baseUrl:o.baseUrl,headers:o.headers,provider:`github-copilot`},c=m(t.id,t.name,{...r,apiKey:a}),l=Y(o.api,i)(s,n,c);for await(let n of l)if(ie(e,t,n))return;e.end()}catch(n){ae(e,t,n)}}function X(t){return(n,r,i={})=>{let a=e();return oe(a,n,r,i,t),a}}var Z=X(!1),Q=X(!0),$=({userCode:e,verificationUrl:t})=>typeof document>`u`?(console.info(`[github-copilot] Device verification code: ${e} — open ${t} in a browser to authorize.`),Promise.resolve(`continue`)):new Promise(t=>{let n=document.createElement(`div`);n.setAttribute(`data-slicc-overlay`,`github-copilot-device`),n.style.cssText=`position:fixed;top:24px;right:24px;z-index:2147483647;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:10px;padding:16px 18px;box-shadow:0 8px 32px rgba(0,0,0,0.45);font:13px/1.4 -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;min-width:260px;max-width:340px`;let r=document.createElement(`div`);r.textContent=`GitHub Copilot — verification code`,r.style.cssText=`font-weight:600;margin-bottom:8px;color:#7ee787`;let a=document.createElement(`div`);a.textContent=e,a.style.cssText=`font:600 22px ui-monospace, SFMono-Regular, Menlo, monospace;letter-spacing:2px;background:#161b22;border:1px solid #30363d;border-radius:6px;padding:10px 12px;text-align:center;margin-bottom:10px;user-select:all;cursor:text`;let o=document.createElement(`div`);o.style.cssText=`color:#8b949e;font-size:12px;line-height:1.5`,o.textContent=`Copy the code, then click Continue to open the GitHub authorization page in a new tab.`;let s=document.createElement(`div`);s.style.cssText=`display:flex;gap:8px;margin-top:12px;justify-content:flex-end`;let c=document.createElement(`button`);c.type=`button`,c.textContent=`Cancel`,c.style.cssText=`background:transparent;color:#e6edf3;border:1px solid #30363d;border-radius:6px;padding:6px 12px;font:600 12px inherit;cursor:pointer`;let l=document.createElement(`button`);l.type=`button`,l.textContent=`Copy & Continue`,l.style.cssText=`background:#238636;color:#fff;border:0;border-radius:6px;padding:6px 12px;font:600 12px inherit;cursor:pointer`;let u=()=>{try{n.remove()}catch{}};c.addEventListener(`click`,()=>{u(),t(`cancel`)}),l.addEventListener(`click`,()=>{(async()=>{try{let{copyTextToClipboard:t}=await i(async()=>{let{copyTextToClipboard:e}=await import(`./clipboard-BcXi_DuW.js`).then(e=>e.t);return{copyTextToClipboard:e}},__vite__mapDeps([0,1]));await t(e)}catch{}u(),t(`continue`)})()}),s.appendChild(c),s.appendChild(l),n.appendChild(r),n.appendChild(a),n.appendChild(o),n.appendChild(s),document.body.appendChild(n)});async function se(){let e=D();return e?.refreshToken?v(e.refreshToken,fetch,{headers:w}):null}var ce={id:y,name:`GitHub Copilot`,description:`Use your GitHub Copilot subscription to access Claude, GPT-5, Codex, Gemini, and Grok models. Sign in with the GitHub device-code flow.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:`claude-sonnet-4.6`,oauthTokenDomains:[`*.githubcopilot.com`,`api.individual.githubcopilot.com`,`api.business.githubcopilot.com`,`api.enterprise.githubcopilot.com`],getModelIds:H,getBudgetUsage:se,onOAuthLoginIntercepted:async(e,t,n)=>{let r=await te(),i=new URL(r.verification_uri);if(i.searchParams.set(`user_code`,r.user_code),await(n?.presentDeviceCode??$)({userCode:r.user_code,verificationUrl:i.toString(),expiresInSeconds:r.expires_in})===`cancel`)throw Error(`GitHub Copilot login cancelled`);let a=new AbortController,o=e({authorizeUrl:i.toString(),redirectUriPattern:E,onCapture:`close`,timeoutMs:r.expires_in*1e3}).catch(e=>(console.warn(`[github-copilot] Launcher failed:`,e instanceof Error?e.message:String(e)),null)),s;try{s=await ne(r,a.signal)}catch(e){throw a.abort(),await o,e}await o;let c=await k(s),l;try{let e=await fetch(`https://api.github.com/user`,{headers:{Authorization:`Bearer ${s}`,Accept:`application/json`}});if(e.ok){let t=await e.json();l=t.name||t.login}}catch{}await R(c,l),await L(c),t()},onOAuthLogout:async()=>{await d({providerId:y,accessToken:``})},onSilentRenew:async()=>{let e=D();if(!e?.refreshToken)return null;try{let t=await k(e.refreshToken);return await R(t,e.userName),await L(t),t.copilotToken}catch(e){return console.warn(`[github-copilot] Silent renew failed:`,e instanceof Error?e.message:String(e)),null}}};function le(){r({api:`github-copilot-anthropic`,stream:Z,streamSimple:Q}),r({api:`github-copilot-openai`,stream:Z,streamSimple:Q})}export{ce as config,V as isCopilotConeCompatible,le as register};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,r as t}from"./account-store-D2ZhzT6k.js";import{a as n}from"./diagnostics-B-5VkVir.js";import{a as r}from"./compat-DHy2gvsm.js";import{a as i,c as a,i as o,r as s,s as c,t as l}from"./legacy-api-aliases-B0akSlax.js";import{a as u,i as d}from"./core-AOkBgfdI.js";import{t as f}from"./anthropic-proxy-compat-CaymbdBf.js";import{n as p}from"./temperature-support-nfl1bDNh.js";import"./provider-settings-D1GTGx9D.js";function m(e,t){return{...e,api:`anthropic-messages`,baseUrl:t.baseUrl,headers:t.headers,provider:`github-copilot`,compat:f(e.compat)}}function h(e){if(!e||typeof e!=`object`)return null;let t=e.quota_snapshots?.premium_interactions;return!t||t.unlimited||typeof t.percent_remaining!=`number`?null:{percent:Math.max(0,100-t.percent_remaining),status:t.percent_remaining<=0&&t.overage_permitted!==!0?`rate-limited`:`ok`,window:`monthly`,resetsAt:e.quota_reset_date_utc}}async function g(e,t,n={}){let r=typeof AbortController==`function`?new AbortController:null,i=r?setTimeout(()=>r.abort(),n.timeoutMs??8e3):null;try{let i=await t(`https://api.github.com/copilot_internal/user`,{headers:{...n.headers,Authorization:`Bearer ${e}`},...r?{signal:r.signal}:{}});if(i.status===404||i.status===501)return null;if(!i.ok)throw Error(`GitHub Copilot /copilot_internal/user returned ${i.status}`);return h(await i.json())}finally{i&&clearTimeout(i)}}const _=`github-copilot`,v=atob(`SXYxLmI1MDdhMDhjODdlY2ZlOTg=`),y={Accept:`application/json`,"Editor-Version":`vscode/1.107.0`,"Editor-Plugin-Version":`copilot-chat/0.35.0`,"Copilot-Integration-Id":`vscode-chat`},b={Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`};function x(){return t().find(e=>e.providerId===_)}async function S(){let e=await fetch(`https://github.com/login/device/code`,{method:`POST`,headers:b,body:new URLSearchParams({client_id:v,scope:`read:user`})});if(!e.ok)throw Error(`GitHub device-code request failed: ${e.status} ${e.statusText} — ${await e.text().catch(()=>``)}`);let t=await e.json();if(typeof t.device_code!=`string`||typeof t.user_code!=`string`||typeof t.verification_uri!=`string`||typeof t.expires_in!=`number`||typeof t.interval!=`number`)throw Error(`GitHub device-code response had an unexpected shape`);return t}async function C(e,t){let n=Date.now()+e.expires_in*1e3,r=Math.max(1e3,Math.floor(e.interval*1e3)),i=1.2;for(;Date.now()<n;){if(t.aborted)throw Error(`Copilot login cancelled`);await w(Math.ceil(r*i),t);let n=await fetch(`https://github.com/login/oauth/access_token`,{method:`POST`,headers:b,body:new URLSearchParams({client_id:v,device_code:e.device_code,grant_type:`urn:ietf:params:oauth:grant-type:device_code`})});if(!n.ok)throw Error(`GitHub token poll failed: ${n.status} ${n.statusText} — ${await n.text().catch(()=>``)}`);let a=await n.json();if(typeof a.access_token==`string`&&a.access_token.length>0)return a.access_token;if(a.error!==`authorization_pending`){if(a.error===`slow_down`)r=typeof a.interval==`number`?a.interval*1e3:r+5e3,i=1.4;else if(a.error){let e=a.error_description?`: ${a.error_description}`:``;throw Error(`Device flow failed (${a.error})${e}`)}}}throw Error(`Copilot device flow timed out (device code expired)`)}function w(e,t){return new Promise((n,r)=>{if(t.aborted){r(/* @__PURE__ */ Error(`Copilot login cancelled`));return}let i=setTimeout(n,e);t.addEventListener(`abort`,()=>{clearTimeout(i),r(/* @__PURE__ */ Error(`Copilot login cancelled`))},{once:!0})})}function T(e){let t=e.match(/proxy-ep=([^;]+)/);return t?`https://${t[1].replace(/^proxy\./,`api.`)}`:null}async function E(e){let t=await fetch(`https://api.github.com/copilot_internal/v2/token`,{headers:{...y,Authorization:`Bearer ${e}`}});if(!t.ok){let e=await t.text().catch(()=>``);throw Error(`Copilot token exchange failed: ${t.status} ${t.statusText} — ${e.slice(0,300)}`)}let n=await t.json();if(typeof n.token!=`string`||typeof n.expires_at!=`number`)throw Error(`Copilot token exchange returned an unexpected payload`);if(n.chat_enabled===!1)throw Error(`GitHub Copilot Chat is disabled for this account (no chat features granted)`);return{copilotToken:n.token,expiresAtMs:n.expires_at*1e3-3e5,apiBaseUrl:T(n.token)??`https://api.individual.githubcopilot.com`,githubAccessToken:e}}const D=`github-copilot.models.v1`;function O(e){let t=e.supported_endpoints??[],n=(e.vendor??``).toLowerCase(),r=e.id;return n===`anthropic`&&t.includes(`/v1/messages`)?`anthropic-messages`:n===`openai`&&(/^gpt-5/i.test(r)||/codex/i.test(r)||/^o\d/i.test(r))?`openai-responses`:`openai-completions`}function k(e){if(!e||typeof e!=`object`)return[];let t=e.data;if(!Array.isArray(t))return[];let n=[];for(let e of t)e.capabilities?.type&&e.capabilities.type!==`chat`||e.model_picker_enabled!==!1&&e.id&&n.push({id:e.id,name:e.name??e.id,vendor:e.vendor??``,api:O(e),contextWindow:e.capabilities?.limits?.max_context_window_tokens??e.capabilities?.limits?.max_prompt_tokens??128e3,maxTokens:e.capabilities?.limits?.max_output_tokens??8192,supportsTools:e.capabilities?.supports?.tool_calls===!0,supportsStreaming:e.capabilities?.supports?.streaming!==!1,supportsVision:e.capabilities?.supports?.vision===!0,supportsReasoning:e.capabilities?.supports?.adaptive_thinking===!0||Array.isArray(e.capabilities?.supports?.reasoning_effort),policyState:e.policy?.state??`enabled`});return n}async function A(e){let t=await fetch(`${e.apiBaseUrl}/models`,{headers:{...y,Authorization:`Bearer ${e.copilotToken}`,Accept:`application/json`}});if(!t.ok)throw Error(`Copilot /models returned ${t.status} ${t.statusText}`);return k(await t.json())}function j(){if(typeof localStorage>`u`)return[];try{let e=localStorage.getItem(D);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function M(e){if(typeof localStorage<`u`)try{localStorage.setItem(D,JSON.stringify(e))}catch{}}function N(e){return j().find(t=>t.id===e)??null}async function P(e){let t;try{t=await A(e)}catch(e){console.warn(`[github-copilot] Catalog refresh failed; keeping previous cache.`,e instanceof Error?e.message:String(e));return}M(t),await Promise.all(t.filter(e=>e.policyState===`disabled`).map(async t=>{let n=`${e.apiBaseUrl}/models/${encodeURIComponent(t.id)}/policy`;try{let r=await fetch(n,{method:`POST`,headers:{...y,"Content-Type":`application/json`,Authorization:`Bearer ${e.copilotToken}`,"openai-intent":`chat-policy`,"x-interaction-type":`chat-policy`},body:JSON.stringify({state:`enabled`})});r.ok?t.policyState=`enabled`:r.status!==404&&r.status!==400&&console.warn(`[github-copilot] enable policy for ${t.id} returned ${r.status} ${r.statusText}`)}catch(e){console.warn(`[github-copilot] enable policy for ${t.id} failed:`,e instanceof Error?e.message:String(e))}})),M(t)}async function F(t,n){await e({providerId:_,accessToken:t.copilotToken,refreshToken:t.githubAccessToken,tokenExpiresAt:t.expiresAtMs,baseUrl:t.apiBaseUrl,userName:n})}async function I(){let e=x();if(!e?.accessToken||!e.refreshToken)throw Error(`Not logged in to GitHub Copilot — click "Login" in the provider settings`);let t=e.tokenExpiresAt??0;if(Date.now()<t-6e4)return e.accessToken;let n=await E(e.refreshToken);return await F(n,e.userName),n.copilotToken}const L=[`mini`,`nano`,`flash`,`haiku`,`lite`,`embedding`];function R(e){let t=[e.id,e.name??``].flatMap(e=>{let t=e.toLowerCase();return[t,t.replace(/[\s_.:]+/g,`-`)]});return!L.some(e=>t.some(t=>t.includes(e)))}function z(){if(!x()?.accessToken)return[];let e=j();if(e.length>0)return e.filter(e=>!e.policyState.startsWith(`unavailable:`)).filter(e=>R(e)).map(e=>({id:e.id,name:e.name,api:e.api===`anthropic-messages`?`anthropic`:`openai`,context_window:e.contextWindow,max_tokens:e.maxTokens,reasoning:e.supportsReasoning,input:e.supportsVision?[`text`,`image`]:[`text`]}));let t;try{t=u(`github-copilot`)}catch{return[]}return t.filter(e=>R({id:e.id,name:e.name})).map(e=>({id:e.id,name:e.name??e.id,api:e.api===`anthropic-messages`?`anthropic`:`openai`,context_window:e.contextWindow,max_tokens:e.maxTokens,reasoning:e.reasoning,input:e.input}))}function B(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:e.api,provider:_,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}const V={"User-Agent":`GitHubCopilotChat/0.35.0`,"Editor-Version":`vscode/1.107.0`,"Editor-Plugin-Version":`copilot-chat/0.35.0`,"Copilot-Integration-Id":`vscode-chat`};function H(e){let t=x(),n=t?.baseUrl??`https://api.individual.githubcopilot.com`,r=N(e);if(r)return{api:r.api,baseUrl:n,headers:{...V}};try{let n=d(`github-copilot`,e);return{api:n.api,baseUrl:t?.baseUrl??n.baseUrl,headers:{...n.headers??{},...V}}}catch{return null}}function U(e,t){let n=j(),r=n.findIndex(t=>t.id===e);r<0||(n[r]={...n[r],policyState:`unavailable:${t}`},M(n))}function W(e,t){return`GitHub Copilot rejected "${e}" with model_not_supported. This usually means the model isn't included in your Copilot plan (Opus and other premium models require Copilot Pro / Pro+ / Business / Enterprise). Try Claude Sonnet 4.6 or another model that appears in the picker after a fresh login. Original error: ${t}`}function G(e){if(!e||typeof e!=`object`)return null;let t=e;if(t.type!==`error`)return null;if(t.error&&typeof t.error==`object`){let e=t.error.errorMessage;if(typeof e==`string`)return e}return typeof t.errorMessage==`string`?t.errorMessage:null}function K(e,t){return e===`anthropic-messages`?t?i:l:e===`openai-responses`?t?a:o:t?c:s}function q(e,t,n){let r=G(n);if(r&&/model_not_supported/i.test(r)){U(t.id,`model_not_supported`);let n=W(t.id,r);return console.error(`[github-copilot] Plan-gated model rejection:`,n),e.push(B(t,Error(n))),e.end(),!0}return e.push(n),!1}function J(e,t,n){let r=n instanceof Error?n.message:String(n),i=n;/model_not_supported/i.test(r)&&(U(t.id,`model_not_supported`),i=Error(W(t.id,r))),console.error(`[github-copilot] Stream error:`,i instanceof Error?i.message:String(i)),e.push(B(t,i)),e.end()}async function Y(e,t,n,r,i){try{let a=await I(),o=H(t.id);if(!o)throw Error(`GitHub Copilot does not recognize "${t.id}" — open the picker (the model list refreshes on login) and pick a current model.`);let s=o.api===`anthropic-messages`?m(t,o):{...t,api:o.api,baseUrl:o.baseUrl,headers:o.headers,provider:`github-copilot`},c=p(t.id,t.name,{...r,apiKey:a}),l=K(o.api,i)(s,n,c);for await(let n of l)if(q(e,t,n))return;e.end()}catch(n){J(e,t,n)}}function X(e){return(t,r,i={})=>{let a=n();return Y(a,t,r,i,e),a}}const Z=X(!1),Q=X(!0),$=({userCode:e,verificationUrl:t})=>typeof document>`u`?(console.info(`[github-copilot] Device verification code: ${e} — open ${t} in a browser to authorize.`),Promise.resolve(`continue`)):new Promise(t=>{let n=document.createElement(`div`);n.setAttribute(`data-slicc-overlay`,`github-copilot-device`),n.style.cssText=`position:fixed;top:24px;right:24px;z-index:2147483647;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:10px;padding:16px 18px;box-shadow:0 8px 32px rgba(0,0,0,0.45);font:13px/1.4 -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;min-width:260px;max-width:340px`;let r=document.createElement(`div`);r.textContent=`GitHub Copilot — verification code`,r.style.cssText=`font-weight:600;margin-bottom:8px;color:#7ee787`;let i=document.createElement(`div`);i.textContent=e,i.style.cssText=`font:600 22px ui-monospace, SFMono-Regular, Menlo, monospace;letter-spacing:2px;background:#161b22;border:1px solid #30363d;border-radius:6px;padding:10px 12px;text-align:center;margin-bottom:10px;user-select:all;cursor:text`;let a=document.createElement(`div`);a.style.cssText=`color:#8b949e;font-size:12px;line-height:1.5`,a.textContent=`Copy the code, then click Continue to open the GitHub authorization page in a new tab.`;let o=document.createElement(`div`);o.style.cssText=`display:flex;gap:8px;margin-top:12px;justify-content:flex-end`;let s=document.createElement(`button`);s.type=`button`,s.textContent=`Cancel`,s.style.cssText=`background:transparent;color:#e6edf3;border:1px solid #30363d;border-radius:6px;padding:6px 12px;font:600 12px inherit;cursor:pointer`;let c=document.createElement(`button`);c.type=`button`,c.textContent=`Copy & Continue`,c.style.cssText=`background:#238636;color:#fff;border:0;border-radius:6px;padding:6px 12px;font:600 12px inherit;cursor:pointer`;let l=()=>{try{n.remove()}catch{}};s.addEventListener(`click`,()=>{l(),t(`cancel`)}),c.addEventListener(`click`,()=>{(async()=>{try{let{copyTextToClipboard:t}=await import(`./provider-settings-D1GTGx9D.js`).then(e=>e.t);await t(e)}catch{}l(),t(`continue`)})()}),o.appendChild(s),o.appendChild(c),n.appendChild(r),n.appendChild(i),n.appendChild(a),n.appendChild(o),document.body.appendChild(n)});async function ee(){let e=x();return e?.refreshToken?g(e.refreshToken,fetch,{headers:y}):null}const te={id:_,name:`GitHub Copilot`,description:`Use your GitHub Copilot subscription to access Claude, GPT-5, Codex, Gemini, and Grok models. Sign in with the GitHub device-code flow.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:`claude-sonnet-4.6`,oauthTokenDomains:[`*.githubcopilot.com`,`api.individual.githubcopilot.com`,`api.business.githubcopilot.com`,`api.enterprise.githubcopilot.com`],getModelIds:z,getBudgetUsage:ee,onOAuthLoginIntercepted:async(e,t,n)=>{let r=await S(),i=new URL(r.verification_uri);if(i.searchParams.set(`user_code`,r.user_code),await(n?.presentDeviceCode??$)({userCode:r.user_code,verificationUrl:i.toString(),expiresInSeconds:r.expires_in})===`cancel`)throw Error(`GitHub Copilot login cancelled`);let a=new AbortController,o=e({authorizeUrl:i.toString(),redirectUriPattern:`https://github.com/login/device/success*`,onCapture:`close`,timeoutMs:r.expires_in*1e3}).catch(e=>(console.warn(`[github-copilot] Launcher failed:`,e instanceof Error?e.message:String(e)),null)),s;try{s=await C(r,a.signal)}catch(e){throw a.abort(),await o,e}await o;let c=await E(s),l;try{let e=await fetch(`https://api.github.com/user`,{headers:{Authorization:`Bearer ${s}`,Accept:`application/json`}});if(e.ok){let t=await e.json();l=t.name||t.login}}catch{}await F(c,l),await P(c),t()},onOAuthLogout:async()=>{await e({providerId:_,accessToken:``})},onSilentRenew:async()=>{let e=x();if(!e?.refreshToken)return null;try{let t=await E(e.refreshToken);return await F(t,e.userName),await P(t),t.copilotToken}catch(e){return console.warn(`[github-copilot] Silent renew failed:`,e instanceof Error?e.message:String(e)),null}}};function ne(){r({api:`github-copilot-anthropic`,stream:Z,streamSimple:Q}),r({api:`github-copilot-openai`,stream:Z,streamSimple:Q})}export{te as config,R as isCopilotConeCompatible,ne as register};
|
|
1
|
+
import{_ as e,r as t}from"./account-store-CcZuCy3S.js";import{a as n}from"./diagnostics-B-5VkVir.js";import{a as r}from"./compat-DHy2gvsm.js";import{a as i,c as a,i as o,r as s,s as c,t as l}from"./legacy-api-aliases-B0akSlax.js";import{a as u,i as d}from"./core-AOkBgfdI.js";import{t as f}from"./anthropic-proxy-compat-CaymbdBf.js";import{n as p}from"./temperature-support-nfl1bDNh.js";import"./provider-settings-tlJjbAeQ.js";function m(e,t){return{...e,api:`anthropic-messages`,baseUrl:t.baseUrl,headers:t.headers,provider:`github-copilot`,compat:f(e.compat)}}function h(e){if(!e||typeof e!=`object`)return null;let t=e.quota_snapshots?.premium_interactions;return!t||t.unlimited||typeof t.percent_remaining!=`number`?null:{percent:Math.max(0,100-t.percent_remaining),status:t.percent_remaining<=0&&t.overage_permitted!==!0?`rate-limited`:`ok`,window:`monthly`,resetsAt:e.quota_reset_date_utc}}async function g(e,t,n={}){let r=typeof AbortController==`function`?new AbortController:null,i=r?setTimeout(()=>r.abort(),n.timeoutMs??8e3):null;try{let i=await t(`https://api.github.com/copilot_internal/user`,{headers:{...n.headers,Authorization:`Bearer ${e}`},...r?{signal:r.signal}:{}});if(i.status===404||i.status===501)return null;if(!i.ok)throw Error(`GitHub Copilot /copilot_internal/user returned ${i.status}`);return h(await i.json())}finally{i&&clearTimeout(i)}}const _=`github-copilot`,v=atob(`SXYxLmI1MDdhMDhjODdlY2ZlOTg=`),y={Accept:`application/json`,"Editor-Version":`vscode/1.107.0`,"Editor-Plugin-Version":`copilot-chat/0.35.0`,"Copilot-Integration-Id":`vscode-chat`},b={Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`};function x(){return t().find(e=>e.providerId===_)}async function S(){let e=await fetch(`https://github.com/login/device/code`,{method:`POST`,headers:b,body:new URLSearchParams({client_id:v,scope:`read:user`})});if(!e.ok)throw Error(`GitHub device-code request failed: ${e.status} ${e.statusText} — ${await e.text().catch(()=>``)}`);let t=await e.json();if(typeof t.device_code!=`string`||typeof t.user_code!=`string`||typeof t.verification_uri!=`string`||typeof t.expires_in!=`number`||typeof t.interval!=`number`)throw Error(`GitHub device-code response had an unexpected shape`);return t}async function C(e,t){let n=Date.now()+e.expires_in*1e3,r=Math.max(1e3,Math.floor(e.interval*1e3)),i=1.2;for(;Date.now()<n;){if(t.aborted)throw Error(`Copilot login cancelled`);await w(Math.ceil(r*i),t);let n=await fetch(`https://github.com/login/oauth/access_token`,{method:`POST`,headers:b,body:new URLSearchParams({client_id:v,device_code:e.device_code,grant_type:`urn:ietf:params:oauth:grant-type:device_code`})});if(!n.ok)throw Error(`GitHub token poll failed: ${n.status} ${n.statusText} — ${await n.text().catch(()=>``)}`);let a=await n.json();if(typeof a.access_token==`string`&&a.access_token.length>0)return a.access_token;if(a.error!==`authorization_pending`){if(a.error===`slow_down`)r=typeof a.interval==`number`?a.interval*1e3:r+5e3,i=1.4;else if(a.error){let e=a.error_description?`: ${a.error_description}`:``;throw Error(`Device flow failed (${a.error})${e}`)}}}throw Error(`Copilot device flow timed out (device code expired)`)}function w(e,t){return new Promise((n,r)=>{if(t.aborted){r(/* @__PURE__ */ Error(`Copilot login cancelled`));return}let i=setTimeout(n,e);t.addEventListener(`abort`,()=>{clearTimeout(i),r(/* @__PURE__ */ Error(`Copilot login cancelled`))},{once:!0})})}function T(e){let t=e.match(/proxy-ep=([^;]+)/);return t?`https://${t[1].replace(/^proxy\./,`api.`)}`:null}async function E(e){let t=await fetch(`https://api.github.com/copilot_internal/v2/token`,{headers:{...y,Authorization:`Bearer ${e}`}});if(!t.ok){let e=await t.text().catch(()=>``);throw Error(`Copilot token exchange failed: ${t.status} ${t.statusText} — ${e.slice(0,300)}`)}let n=await t.json();if(typeof n.token!=`string`||typeof n.expires_at!=`number`)throw Error(`Copilot token exchange returned an unexpected payload`);if(n.chat_enabled===!1)throw Error(`GitHub Copilot Chat is disabled for this account (no chat features granted)`);return{copilotToken:n.token,expiresAtMs:n.expires_at*1e3-3e5,apiBaseUrl:T(n.token)??`https://api.individual.githubcopilot.com`,githubAccessToken:e}}const D=`github-copilot.models.v1`;function O(e){let t=e.supported_endpoints??[],n=(e.vendor??``).toLowerCase(),r=e.id;return n===`anthropic`&&t.includes(`/v1/messages`)?`anthropic-messages`:n===`openai`&&(/^gpt-5/i.test(r)||/codex/i.test(r)||/^o\d/i.test(r))?`openai-responses`:`openai-completions`}function k(e){if(!e||typeof e!=`object`)return[];let t=e.data;if(!Array.isArray(t))return[];let n=[];for(let e of t)e.capabilities?.type&&e.capabilities.type!==`chat`||e.model_picker_enabled!==!1&&e.id&&n.push({id:e.id,name:e.name??e.id,vendor:e.vendor??``,api:O(e),contextWindow:e.capabilities?.limits?.max_context_window_tokens??e.capabilities?.limits?.max_prompt_tokens??128e3,maxTokens:e.capabilities?.limits?.max_output_tokens??8192,supportsTools:e.capabilities?.supports?.tool_calls===!0,supportsStreaming:e.capabilities?.supports?.streaming!==!1,supportsVision:e.capabilities?.supports?.vision===!0,supportsReasoning:e.capabilities?.supports?.adaptive_thinking===!0||Array.isArray(e.capabilities?.supports?.reasoning_effort),policyState:e.policy?.state??`enabled`});return n}async function A(e){let t=await fetch(`${e.apiBaseUrl}/models`,{headers:{...y,Authorization:`Bearer ${e.copilotToken}`,Accept:`application/json`}});if(!t.ok)throw Error(`Copilot /models returned ${t.status} ${t.statusText}`);return k(await t.json())}function j(){if(typeof localStorage>`u`)return[];try{let e=localStorage.getItem(D);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function M(e){if(typeof localStorage<`u`)try{localStorage.setItem(D,JSON.stringify(e))}catch{}}function N(e){return j().find(t=>t.id===e)??null}async function P(e){let t;try{t=await A(e)}catch(e){console.warn(`[github-copilot] Catalog refresh failed; keeping previous cache.`,e instanceof Error?e.message:String(e));return}M(t),await Promise.all(t.filter(e=>e.policyState===`disabled`).map(async t=>{let n=`${e.apiBaseUrl}/models/${encodeURIComponent(t.id)}/policy`;try{let r=await fetch(n,{method:`POST`,headers:{...y,"Content-Type":`application/json`,Authorization:`Bearer ${e.copilotToken}`,"openai-intent":`chat-policy`,"x-interaction-type":`chat-policy`},body:JSON.stringify({state:`enabled`})});r.ok?t.policyState=`enabled`:r.status!==404&&r.status!==400&&console.warn(`[github-copilot] enable policy for ${t.id} returned ${r.status} ${r.statusText}`)}catch(e){console.warn(`[github-copilot] enable policy for ${t.id} failed:`,e instanceof Error?e.message:String(e))}})),M(t)}async function F(t,n){await e({providerId:_,accessToken:t.copilotToken,refreshToken:t.githubAccessToken,tokenExpiresAt:t.expiresAtMs,baseUrl:t.apiBaseUrl,userName:n})}async function I(){let e=x();if(!e?.accessToken||!e.refreshToken)throw Error(`Not logged in to GitHub Copilot — click "Login" in the provider settings`);let t=e.tokenExpiresAt??0;if(Date.now()<t-6e4)return e.accessToken;let n=await E(e.refreshToken);return await F(n,e.userName),n.copilotToken}const L=[`mini`,`nano`,`flash`,`haiku`,`lite`,`embedding`];function R(e){let t=[e.id,e.name??``].flatMap(e=>{let t=e.toLowerCase();return[t,t.replace(/[\s_.:]+/g,`-`)]});return!L.some(e=>t.some(t=>t.includes(e)))}function z(){if(!x()?.accessToken)return[];let e=j();if(e.length>0)return e.filter(e=>!e.policyState.startsWith(`unavailable:`)).filter(e=>R(e)).map(e=>({id:e.id,name:e.name,api:e.api===`anthropic-messages`?`anthropic`:`openai`,context_window:e.contextWindow,max_tokens:e.maxTokens,reasoning:e.supportsReasoning,input:e.supportsVision?[`text`,`image`]:[`text`]}));let t;try{t=u(`github-copilot`)}catch{return[]}return t.filter(e=>R({id:e.id,name:e.name})).map(e=>({id:e.id,name:e.name??e.id,api:e.api===`anthropic-messages`?`anthropic`:`openai`,context_window:e.contextWindow,max_tokens:e.maxTokens,reasoning:e.reasoning,input:e.input}))}function B(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:e.api,provider:_,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}const V={"User-Agent":`GitHubCopilotChat/0.35.0`,"Editor-Version":`vscode/1.107.0`,"Editor-Plugin-Version":`copilot-chat/0.35.0`,"Copilot-Integration-Id":`vscode-chat`};function H(e){let t=x(),n=t?.baseUrl??`https://api.individual.githubcopilot.com`,r=N(e);if(r)return{api:r.api,baseUrl:n,headers:{...V}};try{let n=d(`github-copilot`,e);return{api:n.api,baseUrl:t?.baseUrl??n.baseUrl,headers:{...n.headers??{},...V}}}catch{return null}}function U(e,t){let n=j(),r=n.findIndex(t=>t.id===e);r<0||(n[r]={...n[r],policyState:`unavailable:${t}`},M(n))}function W(e,t){return`GitHub Copilot rejected "${e}" with model_not_supported. This usually means the model isn't included in your Copilot plan (Opus and other premium models require Copilot Pro / Pro+ / Business / Enterprise). Try Claude Sonnet 4.6 or another model that appears in the picker after a fresh login. Original error: ${t}`}function G(e){if(!e||typeof e!=`object`)return null;let t=e;if(t.type!==`error`)return null;if(t.error&&typeof t.error==`object`){let e=t.error.errorMessage;if(typeof e==`string`)return e}return typeof t.errorMessage==`string`?t.errorMessage:null}function K(e,t){return e===`anthropic-messages`?t?i:l:e===`openai-responses`?t?a:o:t?c:s}function q(e,t,n){let r=G(n);if(r&&/model_not_supported/i.test(r)){U(t.id,`model_not_supported`);let n=W(t.id,r);return console.error(`[github-copilot] Plan-gated model rejection:`,n),e.push(B(t,Error(n))),e.end(),!0}return e.push(n),!1}function J(e,t,n){let r=n instanceof Error?n.message:String(n),i=n;/model_not_supported/i.test(r)&&(U(t.id,`model_not_supported`),i=Error(W(t.id,r))),console.error(`[github-copilot] Stream error:`,i instanceof Error?i.message:String(i)),e.push(B(t,i)),e.end()}async function Y(e,t,n,r,i){try{let a=await I(),o=H(t.id);if(!o)throw Error(`GitHub Copilot does not recognize "${t.id}" — open the picker (the model list refreshes on login) and pick a current model.`);let s=o.api===`anthropic-messages`?m(t,o):{...t,api:o.api,baseUrl:o.baseUrl,headers:o.headers,provider:`github-copilot`},c=p(t.id,t.name,{...r,apiKey:a}),l=K(o.api,i)(s,n,c);for await(let n of l)if(q(e,t,n))return;e.end()}catch(n){J(e,t,n)}}function X(e){return(t,r,i={})=>{let a=n();return Y(a,t,r,i,e),a}}const Z=X(!1),Q=X(!0),$=({userCode:e,verificationUrl:t})=>typeof document>`u`?(console.info(`[github-copilot] Device verification code: ${e} — open ${t} in a browser to authorize.`),Promise.resolve(`continue`)):new Promise(t=>{let n=document.createElement(`div`);n.setAttribute(`data-slicc-overlay`,`github-copilot-device`),n.style.cssText=`position:fixed;top:24px;right:24px;z-index:2147483647;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:10px;padding:16px 18px;box-shadow:0 8px 32px rgba(0,0,0,0.45);font:13px/1.4 -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;min-width:260px;max-width:340px`;let r=document.createElement(`div`);r.textContent=`GitHub Copilot — verification code`,r.style.cssText=`font-weight:600;margin-bottom:8px;color:#7ee787`;let i=document.createElement(`div`);i.textContent=e,i.style.cssText=`font:600 22px ui-monospace, SFMono-Regular, Menlo, monospace;letter-spacing:2px;background:#161b22;border:1px solid #30363d;border-radius:6px;padding:10px 12px;text-align:center;margin-bottom:10px;user-select:all;cursor:text`;let a=document.createElement(`div`);a.style.cssText=`color:#8b949e;font-size:12px;line-height:1.5`,a.textContent=`Copy the code, then click Continue to open the GitHub authorization page in a new tab.`;let o=document.createElement(`div`);o.style.cssText=`display:flex;gap:8px;margin-top:12px;justify-content:flex-end`;let s=document.createElement(`button`);s.type=`button`,s.textContent=`Cancel`,s.style.cssText=`background:transparent;color:#e6edf3;border:1px solid #30363d;border-radius:6px;padding:6px 12px;font:600 12px inherit;cursor:pointer`;let c=document.createElement(`button`);c.type=`button`,c.textContent=`Copy & Continue`,c.style.cssText=`background:#238636;color:#fff;border:0;border-radius:6px;padding:6px 12px;font:600 12px inherit;cursor:pointer`;let l=()=>{try{n.remove()}catch{}};s.addEventListener(`click`,()=>{l(),t(`cancel`)}),c.addEventListener(`click`,()=>{(async()=>{try{let{copyTextToClipboard:t}=await import(`./provider-settings-tlJjbAeQ.js`).then(e=>e.t);await t(e)}catch{}l(),t(`continue`)})()}),o.appendChild(s),o.appendChild(c),n.appendChild(r),n.appendChild(i),n.appendChild(a),n.appendChild(o),document.body.appendChild(n)});async function ee(){let e=x();return e?.refreshToken?g(e.refreshToken,fetch,{headers:y}):null}const te={id:_,name:`GitHub Copilot`,description:`Use your GitHub Copilot subscription to access Claude, GPT-5, Codex, Gemini, and Grok models. Sign in with the GitHub device-code flow.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:`claude-sonnet-4.6`,oauthTokenDomains:[`*.githubcopilot.com`,`api.individual.githubcopilot.com`,`api.business.githubcopilot.com`,`api.enterprise.githubcopilot.com`],getModelIds:z,getBudgetUsage:ee,onOAuthLoginIntercepted:async(e,t,n)=>{let r=await S(),i=new URL(r.verification_uri);if(i.searchParams.set(`user_code`,r.user_code),await(n?.presentDeviceCode??$)({userCode:r.user_code,verificationUrl:i.toString(),expiresInSeconds:r.expires_in})===`cancel`)throw Error(`GitHub Copilot login cancelled`);let a=new AbortController,o=e({authorizeUrl:i.toString(),redirectUriPattern:`https://github.com/login/device/success*`,onCapture:`close`,timeoutMs:r.expires_in*1e3}).catch(e=>(console.warn(`[github-copilot] Launcher failed:`,e instanceof Error?e.message:String(e)),null)),s;try{s=await C(r,a.signal)}catch(e){throw a.abort(),await o,e}await o;let c=await E(s),l;try{let e=await fetch(`https://api.github.com/user`,{headers:{Authorization:`Bearer ${s}`,Accept:`application/json`}});if(e.ok){let t=await e.json();l=t.name||t.login}}catch{}await F(c,l),await P(c),t()},onOAuthLogout:async()=>{await e({providerId:_,accessToken:``})},onSilentRenew:async()=>{let e=x();if(!e?.refreshToken)return null;try{let t=await E(e.refreshToken);return await F(t,e.userName),await P(t),t.copilotToken}catch(e){return console.warn(`[github-copilot] Silent renew failed:`,e instanceof Error?e.message:String(e)),null}}};function ne(){r({api:`github-copilot-anthropic`,stream:Z,streamSimple:Q}),r({api:`github-copilot-openai`,stream:Z,streamSimple:Q})}export{te as config,R as isCopilotConeCompatible,ne as register};
|