sliccy 6.248.12 → 6.248.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/ui/.vite/manifest.json +200 -200
  2. package/dist/ui/assets/{account-store-D0e9GeOG.js → account-store-AloIt5Ss.js} +1 -1
  3. package/dist/ui/assets/{account-store-BP0-Mqyf.js → account-store-D4Humqb-.js} +1 -1
  4. package/dist/ui/assets/{adobe-D0KRBXPj.js → adobe-COzZgYMJ.js} +1 -1
  5. package/dist/ui/assets/{adobe-BMlejZ76.js → adobe-DzPNN5WH.js} +1 -1
  6. package/dist/ui/assets/{agent-panels-DDsYvxLe.js → agent-panels-C7WGWk6D.js} +1 -1
  7. package/dist/ui/assets/{almost-bash-shell-headless-EFGubLAy.js → almost-bash-shell-headless--HYnQClo.js} +12 -12
  8. package/dist/ui/assets/{apply-layout-CRSKm6Ba.js → apply-layout-C4DLtjYf.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-Bhhihk9l.js → azure-openai-DCtV7Fk7.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-6xgVEKV3.js → azure-openai-qBC0T6wP.js} +1 -1
  11. package/dist/ui/assets/{cdp-CGkHzMd4.js → cdp-CCSeAKYa.js} +1 -1
  12. package/dist/ui/assets/{cerebras-Czq-tnWY.js → cerebras-BlBAjiPm.js} +1 -1
  13. package/dist/ui/assets/{cerebras-DtBI_gM6.js → cerebras-D05pSaD3.js} +1 -1
  14. package/dist/ui/assets/{composer-speech-DuwfvFb-.js → composer-speech-ZEQzpxXl.js} +1 -1
  15. package/dist/ui/assets/{connect-surface-_2qtZZak.js → connect-surface-DVe7YnEx.js} +1 -1
  16. package/dist/ui/assets/{directed-approval-Cu86OGA8.js → directed-approval-DpSG1Fn9.js} +1 -1
  17. package/dist/ui/assets/{emscripten-vfs-hook-EtC57PJB.js → emscripten-vfs-hook-rbqoLuA5.js} +1 -1
  18. package/dist/ui/assets/{frozen-archive-writer-BBomoaln.js → frozen-archive-writer-ClcpBoUl.js} +1 -1
  19. package/dist/ui/assets/{frozen-archive-writer-BCkRktFY.js → frozen-archive-writer-D6ckorva.js} +1 -1
  20. package/dist/ui/assets/{frozen-session-delete-DuPE85FS.js → frozen-session-delete-_74oIhfQ.js} +1 -1
  21. package/dist/ui/assets/{frozen-session-identity-CbFcW0gt.js → frozen-session-identity-DRez4L_k.js} +1 -1
  22. package/dist/ui/assets/{frozen-session-identity-hf2cKRyg.js → frozen-session-identity-DW7M6tap.js} +1 -1
  23. package/dist/ui/assets/{gelatiere-unit-LEGH6U9y.js → gelatiere-unit-DY9kFx7W.js} +1 -1
  24. package/dist/ui/assets/{github-DdY_7Nut.js → github-BAVQKGLM.js} +1 -1
  25. package/dist/ui/assets/{github-copilot-BSyPXNk7.js → github-copilot-B2ui266i.js} +1 -1
  26. package/dist/ui/assets/{github-copilot-DzlBKVNv.js → github-copilot-NuiVJlRe.js} +1 -1
  27. package/dist/ui/assets/{github-BtIOov6m.js → github-seYRLByd.js} +1 -1
  28. package/dist/ui/assets/{hear-waeOEiF9.js → hear-LEawuxbU.js} +1 -1
  29. package/dist/ui/assets/{js-realm-worker-gCWtclsC.js → js-realm-worker-BQ2E7b6Z.js} +2 -2
  30. package/dist/ui/assets/{jsh-executor-dZ0E8OWq.js → jsh-executor-BA7Owezg.js} +3 -3
  31. package/dist/ui/assets/{kernel-worker-D698PKFz.js → kernel-worker-Bl7wfxQy.js} +8 -8
  32. package/dist/ui/assets/{lick-ws-bridge-DElVrfug.js → lick-ws-bridge-BEHNQbo5.js} +1 -1
  33. package/dist/ui/assets/{lick-ws-bridge-uXWDwK6c.js → lick-ws-bridge-BIajXq6B.js} +1 -1
  34. package/dist/ui/assets/{live-session-curation-DU31GiT4.js → live-session-curation-BJVU7yfS.js} +1 -1
  35. package/dist/ui/assets/{live-session-curation-O66ZEy4b.js → live-session-curation-C8cnTFuk.js} +1 -1
  36. package/dist/ui/assets/{live-session-snapshot-CnzVaiNh.js → live-session-snapshot-DB7ATVqO.js} +1 -1
  37. package/dist/ui/assets/{local-llm-jA4Uiim7.js → local-llm-B72jeBdJ.js} +1 -1
  38. package/dist/ui/assets/{local-llm-jVTpMC6G.js → local-llm-Dxm6T0ph.js} +1 -1
  39. package/dist/ui/assets/{main-cherry-BnNhWj0g.js → main-cherry-Cndxk3tr.js} +1 -1
  40. package/dist/ui/assets/{main-Cv-je9Rc.js → main-pG2z7nDr.js} +3 -3
  41. package/dist/ui/assets/{mcp-command-L7PjP1mU.js → mcp-command-R_syvmA2.js} +10 -10
  42. package/dist/ui/assets/{memory-curation-seam-DJumMsqR.js → memory-curation-seam-xAt4_ZGt.js} +1 -1
  43. package/dist/ui/assets/{memory-health-CQ-a47lj.js → memory-health-N-Qft3RQ.js} +1 -1
  44. package/dist/ui/assets/{memory-write-execute-_6492M1n.js → memory-write-execute-CcPwzxh2.js} +1 -1
  45. package/dist/ui/assets/{merge-folded-cost-into-frozen-C_7ZRri4.js → merge-folded-cost-into-frozen-D5QzQftk.js} +1 -1
  46. package/dist/ui/assets/{new-session-CbcR9xaj.js → new-session-CzmqZfEw.js} +2 -2
  47. package/dist/ui/assets/{oauth-bootstrap-CSuhhsId.js → oauth-bootstrap-BgBpgpMH.js} +2 -2
  48. package/dist/ui/assets/{onboarding-orchestrator-CfIlPa5s.js → onboarding-orchestrator-B0EOdDeN.js} +1 -1
  49. package/dist/ui/assets/{openai-codex-G2p2EV_-.js → openai-codex-BuzdyFkb.js} +1 -1
  50. package/dist/ui/assets/{openai-codex-DHrvA_gh.js → openai-codex-CBBCnX5G.js} +1 -1
  51. package/dist/ui/assets/{openrouter-yRyVYBsj.js → openrouter-CajNnUyi.js} +1 -1
  52. package/dist/ui/assets/{openrouter-free-Dyn8oC5q.js → openrouter-free-CoKNk8Q9.js} +1 -1
  53. package/dist/ui/assets/{openrouter-free-CVp7yz7p.js → openrouter-free-DvQSB466.js} +1 -1
  54. package/dist/ui/assets/{openrouter-oauth-FvnbQ-_a.js → openrouter-oauth-Cwnv6aaR.js} +1 -1
  55. package/dist/ui/assets/{openrouter-oauth-CoTDuH1p.js → openrouter-oauth-Dm2bFG2r.js} +1 -1
  56. package/dist/ui/assets/{openrouter-GYjqrrbU.js → openrouter-yrPyWZSZ.js} +1 -1
  57. package/dist/ui/assets/{panel-rpc-handlers-Bj7Ewkuc.js → panel-rpc-handlers-0Asc887-.js} +2 -2
  58. package/dist/ui/assets/{panelize-shell-BTtSLMeI.js → panelize-shell-CYWV616_.js} +1 -1
  59. package/dist/ui/assets/{pi-edit-execution-BXKymnwc.js → pi-edit-execution-DUHiH3Ek.js} +1 -1
  60. package/dist/ui/assets/{provider-pESeRrgl.js → provider-DQEpec-V.js} +1 -1
  61. package/dist/ui/assets/{provider-Beo3KnMC.js → provider-gVV-Tw2o.js} +1 -1
  62. package/dist/ui/assets/{provider-settings-D4dahP2q.js → provider-settings-HdIWRUQi.js} +1 -1
  63. package/dist/ui/assets/provider-store-access-BG9uc1UB.js +1 -0
  64. package/dist/ui/assets/provider-store-access-CkviLtwb.js +1 -0
  65. package/dist/ui/assets/{providers-DfuNj1kC.js → providers-BPtyhTCJ.js} +2 -2
  66. package/dist/ui/assets/{providers-BGZJlF11.js → providers-BqUoo02I.js} +1 -1
  67. package/dist/ui/assets/{quick-llm-efZ786_L.js → quick-llm-DKIeT-Bm.js} +1 -1
  68. package/dist/ui/assets/{realm-inprocess-Cl0vw0Bl.js → realm-inprocess-I1Oa37_B.js} +2 -2
  69. package/dist/ui/assets/{realm-unhandled-rejections-CEsfeJY7.js → realm-unhandled-rejections-5totJ0nZ.js} +1 -1
  70. package/dist/ui/assets/{realm-unhandled-rejections-DR09BQoo.js → realm-unhandled-rejections-Vf408gQs.js} +1 -1
  71. package/dist/ui/assets/{recovery-screen-DBBPBqDy.js → recovery-screen-d6N9mctq.js} +1 -1
  72. package/dist/ui/assets/{remote-terminal-view-DxBlyTFr.js → remote-terminal-view-B8EZ4je-.js} +2 -2
  73. package/dist/ui/assets/{restore-DEp3FGCS.js → restore-YHJZnRoZ.js} +1 -1
  74. package/dist/ui/assets/{run-BYAUzJ7h.js → run-Ds5q8C_n.js} +2 -2
  75. package/dist/ui/assets/{run-HHTi0ySM.js → run-QN9mmLnD.js} +1 -1
  76. package/dist/ui/assets/{run-83BfsEf_.js → run-jEnj-WXZ.js} +2 -2
  77. package/dist/ui/assets/{run-BLaT47am.js → run-qBD2W0pE.js} +1 -1
  78. package/dist/ui/assets/{serve-command-DmAl0Ofo.js → serve-command-ClUJJ3EB.js} +2 -2
  79. package/dist/ui/assets/{serve-runtime-DbVW48FC.js → serve-runtime-WdVepvEi.js} +1 -1
  80. package/dist/ui/assets/{session-command-memory-Dg6TUtA8.js → session-command-memory-CQnSNVmV.js} +2 -2
  81. package/dist/ui/assets/{session-jsonl-gGqdYluO.js → session-jsonl-BGHEGuWx.js} +1 -1
  82. package/dist/ui/assets/{session-jsonl-BLS0Lhly.js → session-jsonl-BjBaj5ud.js} +1 -1
  83. package/dist/ui/assets/{session-search-index-DSkUnGiE.js → session-search-index-DFWu63Zi.js} +1 -1
  84. package/dist/ui/assets/{setup-feature-flags-remote-DNStuYG4.js → setup-feature-flags-remote-CUbaBhWB.js} +1 -1
  85. package/dist/ui/assets/{setup-model-catalog-BbgUD19y.js → setup-model-catalog-CykSe_Dx.js} +1 -1
  86. package/dist/ui/assets/{silent-renew-backoff-BgxLAhiO.js → silent-renew-backoff-BMr_pGCU.js} +1 -1
  87. package/dist/ui/assets/slicc-version-D_fWoQ7a.js +1 -0
  88. package/dist/ui/assets/{soundscape-DlSE4wJ0.js → soundscape-Blo80kkF.js} +1 -1
  89. package/dist/ui/assets/{speak-aa5haM5d.js → speak-DYYfW_FH.js} +1 -1
  90. package/dist/ui/assets/{sprinkle-manager-Ljoyy6IX.js → sprinkle-manager-6IcFnb1j.js} +1 -1
  91. package/dist/ui/assets/{sprinkle-renderer-DzHCoSrV.js → sprinkle-renderer-BnGOcTUx.js} +1 -1
  92. package/dist/ui/assets/{sudo-ByfhezCP.js → sudo-cs2WnTRn.js} +1 -1
  93. package/dist/ui/assets/{supervisor-IIeyJvg5.js → supervisor-BULFrqrk.js} +1 -1
  94. package/dist/ui/assets/{sync-dialog-ClAMRf3Q.js → sync-dialog-MmcHaZwh.js} +1 -1
  95. package/dist/ui/assets/{transformers-env-DkZ_rlLG.js → transformers-env-Fm5j4giD.js} +1 -1
  96. package/dist/ui/assets/{tray-leader-BZHr3elV.js → tray-leader-CFIVvD5G.js} +1 -1
  97. package/dist/ui/assets/{tray-leave-runtime-3Iuks3yT.js → tray-leave-runtime-BSxSDTw5.js} +1 -1
  98. package/dist/ui/assets/{tray-sidecar-DyKogz7R.js → tray-sidecar-DQqVkAjk.js} +1 -1
  99. package/dist/ui/assets/{upgrade-detection-CxYbJzam.js → upgrade-detection-MAFg6kZz.js} +1 -1
  100. package/dist/ui/assets/{voice-reply-D5fh6cLr.js → voice-reply-Bum2oQcA.js} +1 -1
  101. package/dist/ui/assets/{wc-attach-BQ6Nf-M2.js → wc-attach-BJHnH6pd.js} +2 -2
  102. package/dist/ui/assets/{wc-browser-BXPUeqQ9.js → wc-browser-sNhsHdWm.js} +1 -1
  103. package/dist/ui/assets/{wc-computers-DfOF1PAO.js → wc-computers-CWg9NiMK.js} +1 -1
  104. package/dist/ui/assets/{wc-detached-CoA3z0b3.js → wc-detached-DZvftcPT.js} +1 -1
  105. package/dist/ui/assets/{wc-extension-CSckjicd.js → wc-extension-BaYtWo4q.js} +2 -2
  106. package/dist/ui/assets/{wc-follower-K44SsGuB.js → wc-follower-C3skKl26.js} +3 -3
  107. package/dist/ui/assets/{wc-follower-oauth-k4Kafofp.js → wc-follower-oauth-iJKLKYov.js} +1 -1
  108. package/dist/ui/assets/{wc-gelatiere-zH35fvBZ.js → wc-gelatiere-DaysrnKa.js} +1 -1
  109. package/dist/ui/assets/{wc-live-CCIu6y-_.js → wc-live-DEo-6NQK.js} +5 -5
  110. package/dist/ui/assets/{wc-nav-Cd4q6eRA.js → wc-nav-DqmL5N5I.js} +2 -2
  111. package/dist/ui/assets/{wc-onboarding-DsqCrKs_.js → wc-onboarding-Dg7G2Ykz.js} +2 -2
  112. package/dist/ui/assets/{wc-permissions-CdIjrgeO.js → wc-permissions-wBb5q-ot.js} +2 -2
  113. package/dist/ui/assets/{wc-placeholder-pxBtM346.js → wc-placeholder-Dcqr3sQ2.js} +3 -3
  114. package/dist/ui/assets/{wc-secret-request-BtXzm9Qq.js → wc-secret-request-DLngmY78.js} +1 -1
  115. package/dist/ui/assets/{wc-settings-S6NOXksl.js → wc-settings-DhxNLvFd.js} +3 -3
  116. package/dist/ui/assets/{wc-shell-D4V2456X.js → wc-shell-RF_bfAGN.js} +3 -3
  117. package/dist/ui/assets/{wc-shortcut-config-BGYlRFkN.js → wc-shortcut-config-Cr8zuZad.js} +1 -1
  118. package/dist/ui/assets/{wc-sprinkles-DMkA08sJ.js → wc-sprinkles-DyMWm1jp.js} +2 -2
  119. package/dist/ui/assets/{wc-transcript-export-BOD_uIrO.js → wc-transcript-export-DVyU4B6b.js} +2 -2
  120. package/dist/ui/assets/{wc-tray-C493vCfc.js → wc-tray-BjkHiwAE.js} +4 -4
  121. package/dist/ui/assets/welcome-detection-ZKXELBPe.js +1 -0
  122. package/dist/ui/assets/{whisper-session-DEyrzem0.js → whisper-session-nBcuStI7.js} +2 -2
  123. package/dist/ui/assets/{xai-grok-CCzGQE3l.js → xai-grok-B-1EsChx.js} +1 -1
  124. package/dist/ui/assets/{xai-grok-lKV4uY4R.js → xai-grok-B0VdJo2K.js} +1 -1
  125. package/dist/ui/index.html +3 -3
  126. package/dist/ui/packages/webapp/index.html +3 -3
  127. package/package.json +1 -1
  128. package/dist/ui/assets/provider-store-access-CBkIcehf.js +0 -1
  129. package/dist/ui/assets/provider-store-access-V0dKAQSY.js +0 -1
  130. package/dist/ui/assets/slicc-version-BErSvAx-.js +0 -1
  131. package/dist/ui/assets/welcome-detection-DUx6dD5_.js +0 -1
@@ -1,4 +1,4 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import"./navigation-watcher-C24VRot4.js";import"./wc-follower-oauth-k4Kafofp.js";import{d as t,l as n,u as r}from"./main-Cv-je9Rc.js";import{n as i,t as a}from"./pending-request-table-k-D7ZZsL.js";var o=e(`cdp`);function s(e){return e===4001?`CDP connection superseded by another SLICC tab/window on this instance`:e===4002?`CDP connection reset by proxy (upstream Chrome connection was re-established)`:`CDP connection closed`}var c=class{ws=null;nextId=1;_superseded=!1;pending=new a;listeners=new Map;_state=`disconnected`;stateListeners=new Set;lastNotifiedState=`disconnected`;lastNotifiedReason;get state(){return this._state}onStateChange(e){return this.stateListeners.add(e),()=>{this.stateListeners.delete(e)}}get superseded(){return this._superseded}async connect(e){if(this._state!==`disconnected`)throw Error(`Cannot connect: state is ${this._state}`);if(!e?.url)throw Error(`CDPClient.connect() requires a WebSocket URL`);let{url:t,timeout:n=5e3,protocols:r}=e;return this._state=`connecting`,new Promise((e,i)=>{let a=setTimeout(()=>{this.cleanup(),i(Error(`CDP connection timed out after ${n}ms`))},n);try{this.ws=r===void 0?new WebSocket(t):new WebSocket(t,r)}catch(e){clearTimeout(a),this._state=`disconnected`,i(e);return}this.ws.onopen=()=>{clearTimeout(a),this._state=`connected`,this._superseded=!1,o.info(`Connected`,{url:t}),this.notifyState(`connected`),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(o.error(`Connection failed`,{url:t}),this.cleanup(),i(Error(`CDP WebSocket connection failed`)))},this.ws.onmessage=e=>{this.handleMessage(e.data)},this.ws.onclose=e=>{this.handleClose(e?.code)}})}disconnect(){this.ws&&(this.ws.onclose=null,this.ws.close()),this._superseded=!1,this.cleanup(),o.info(`Disconnected`)}async send(e,t,n,r=3e4){if(this._state!==`connected`||!this.ws)throw Error(`CDP client is not connected`);let i=this.nextId++,a={id:i,method:e};t&&(a.params=t),n&&(a.sessionId=n),o.debug(`Send`,{method:e,id:i,sessionId:n});let s=this.pending.issue(i,r,`CDP command timed out after ${r}ms: ${e}`);return this.ws.send(JSON.stringify(a)),s}on(e,t){let n=this.listeners.get(e);n||(n=new Set,this.listeners.set(e,n)),n.add(t)}off(e,t){let n=this.listeners.get(e);n&&(n.delete(t),n.size===0&&this.listeners.delete(e))}once(e,t=3e4){return i(t=>(this.on(e,t),()=>this.off(e,t)),t,`Timed out waiting for event: ${e}`)}handleMessage(e){let t;try{t=JSON.parse(e)}catch{return}if(`id`in t&&typeof t.id==`number`){let e=t;o.debug(`Response`,{id:e.id,hasError:!!e.error}),e.error?(o.error(`Command error`,{id:e.id,code:e.error.code,message:e.error.message}),this.pending.reject(e.id,Error(`CDP error: ${e.error.message} (${e.error.code})`))):this.pending.resolve(e.id,e.result??{});return}if(`method`in t){let e=t;o.debug(`Event`,{method:e.method,sessionId:e.sessionId});let n=this.listeners.get(e.method);if(n){let t=e.sessionId?{...e.params,sessionId:e.sessionId}:e.params??{};for(let e of n)try{e(t)}catch{}}}}handleClose(e){e===4001?(this._superseded=!0,o.warn(`CDP slot superseded by another SLICC tab/window on this instance`,{code:e})):e===4002?o.warn(`CDP proxy reset its upstream Chrome connection — sessions dropped`,{code:e,pendingCommands:this.pending.size}):o.error(`Connection closed unexpectedly`,{pendingCommands:this.pending.size}),this.cleanup(s(e))}cleanup(e=`CDP client disconnected`){this.ws=null,this._state=`disconnected`,this.pending.rejectAll(e),this.notifyState(`disconnected`,e)}notifyState(e,t){if(e!==this.lastNotifiedState||t!==this.lastNotifiedReason){this.lastNotifiedState=e,this.lastNotifiedReason=t;for(let n of this.stateListeners)try{n(e,t)}catch{}}}},l=`ws://localhost:5710/cdp`;function u(e=typeof window<`u`?window.location:null){return e?.host?`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}/cdp`:l}var d=class{lastConnectOptions=null;supersededHandler=null;supersededNotified=!1;reconnectAttempt=0;reconnectNotBefore=0;bridgeRejection=null;bridgeRejectedHandler=null;bridgeRejectedNotified=!1;classifyConnectFailure=async()=>`transient`;primeConnectOptions(e){this.lastConnectOptions=e?{...e}:{}}setSupersededHandler(e){this.supersededHandler=e}setBridgeRejectedHandler(e){this.bridgeRejectedHandler=e}setConnectFailureClassifier(e){this.classifyConnectFailure=e}async connect(e,t){if(this.bridgeRejection)throw this.notifyBridgeRejected(),new n(this.bridgeRejection);this.lastConnectOptions=t?{...t}:{};try{await e.connect({url:t?.url??u(),timeout:t?.timeout,...t?.protocols===void 0?{}:{protocols:t.protocols}})}catch(e){throw await this.noteReconnectFailure(t),this.bridgeRejection?new n(this.bridgeRejection):e}this.noteReconnectSuccess()}async ensureLocalConnected(e){if(e.superseded===!0){this.notifySuperseded();return}if(e.state===`disconnected`){this.throwIfReconnectPaused();let t=this.lastConnectOptions;try{await e.connect({url:t?.url??u(),...t?.timeout===void 0?{}:{timeout:t.timeout},...t?.protocols===void 0?{}:{protocols:t.protocols}})}catch(e){throw await this.noteReconnectFailure(t??void 0),this.bridgeRejection?new n(this.bridgeRejection):e}this.noteReconnectSuccess()}}async ensureConnected(e){if(e.client.superseded===!0){this.notifySuperseded();return}if(e.client.state===`disconnected`){this.throwIfReconnectPaused();let t=e.client;e.restoreLocalAfterRemoteDrop(),e.clearSessionsForTransport(t),e.getClient().state===`disconnected`&&await this.connect(e.getClient(),this.lastConnectOptions??void 0)}}throwIfReconnectPaused(){if(this.bridgeRejection)throw this.notifyBridgeRejected(),new n(this.bridgeRejection);if(Date.now()<this.reconnectNotBefore)throw new r}noteReconnectSuccess(){this.reconnectAttempt=0,this.reconnectNotBefore=0,this.supersededNotified=!1}async noteReconnectFailure(e){if(await this.classifyConnectFailure({url:e?.url??``,...e?.protocols===void 0?{}:{protocols:e.protocols}})===`terminal`){this.bridgeRejection=new n().message,this.notifyBridgeRejected();return}let r=t(this.reconnectAttempt);this.reconnectAttempt+=1,this.reconnectNotBefore=Date.now()+r}notifyBridgeRejected(){if(!this.bridgeRejectedNotified){this.bridgeRejectedNotified=!0;try{this.bridgeRejectedHandler?.()}catch{}}}notifySuperseded(){if(!this.supersededNotified){this.supersededNotified=!0;try{this.supersededHandler?.()}catch{}}}},f=class extends Error{step;name=`CommandAbortedError`;constructor(e){super(`Browser command aborted while ${e}. A CDP round trip already in flight cannot be cancelled, so it may still have been applied to the page; nothing after it was started.`),this.step=e}};function p(e,t){if(e?.aborted)throw new f(t)}function m(e,t){return e?{signal:e,error:()=>new f(t)}:void 0}function h(e,t,n){return new Promise((r,i)=>{if(t?.aborted){i(new f(n));return}let a=()=>{clearTimeout(o),i(new f(n))},o=setTimeout(()=>{t?.removeEventListener(`abort`,a),r()},e);t?.addEventListener(`abort`,a,{once:!0})})}function ee(e,t,n){return t?t.aborted?Promise.reject(new f(n)):new Promise((r,i)=>{let a=()=>i(new f(n));t.addEventListener(`abort`,a,{once:!0}),e.then(()=>{t.removeEventListener(`abort`,a),r()},e=>{t.removeEventListener(`abort`,a),i(e instanceof Error?e:Error(String(e)))})}):e}var g=class{contexts=new Map;for(e,t){let n=`${t}:${e}`,r=this.contexts.get(n);return r||(r=new Map,this.contexts.set(n,r)),r}peek(e,t){return this.contexts.get(`${t}:${e}`)}drop(e){this.contexts.delete(`main:${e}`),this.contexts.delete(`isolated:${e}`)}get size(){return this.contexts.size}},_=e(`har-recorder`),v=class{recordings=new Map;client;fs;eventCleanup=new Map;constructor(e,t){this.client=e,this.fs=t}async startRecording(e,t,n,r){let i=`rec-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;p(r,`about to enable Network on tab ${e}`),await this.client.send(`Network.enable`,{},t),p(r,`about to enable Page on tab ${e}`),await this.client.send(`Page.enable`,{},t),p(r,`about to read the URL of tab ${e}`);let a=(await this.client.send(`Runtime.evaluate`,{expression:`location.href`,returnByValue:!0},t)).result?.value??`about:blank`,o={id:i,targetId:e,sessionId:t,filterCode:n,pendingRequests:new Map,entries:[],startTime:Date.now(),currentUrl:a,snapshotCount:0};return this.recordings.set(i,o),this.setupEventListeners(o),await this.ensureDir(`/recordings/${i}`),_.debug(`Started recording`,{recordingId:i,targetId:e,currentUrl:a}),i}setupEventListeners(e){let{sessionId:t,id:n}=e,r=n=>{let r=n;r.sessionId===t&&this.handleRequestWillBeSent(e,r)},i=n=>{let r=n;r.sessionId===t&&this.handleResponseReceived(e,r)},a=r=>{let i=r;i.sessionId===t&&this.handleLoadingFinished(e,i).catch(e=>{_.error(`Failed to process loadingFinished event`,{recordingId:n,requestId:i.requestId,error:e instanceof Error?e.message:String(e)})})},o=n=>{let r=n;r.sessionId===t&&this.handleLoadingFailed(e,r)},s=r=>{let i=r;if(i.sessionId!==t)return;let a=i.frame;if(!a?.parentId&&a?.url){let t=[...e.entries],r=e.currentUrl;e.currentUrl=a.url,e.entries=[],e.pendingRequests.clear(),this.saveSnapshotWithEntries(e,`navigation`,t,r).catch(e=>{_.error(`Failed to save navigation snapshot`,{recordingId:n,error:e instanceof Error?e.message:String(e)})})}};this.client.on(`Network.requestWillBeSent`,r),this.client.on(`Network.responseReceived`,i),this.client.on(`Network.loadingFinished`,a),this.client.on(`Network.loadingFailed`,o),this.client.on(`Page.frameNavigated`,s),this.eventCleanup.set(n,()=>{this.client.off(`Network.requestWillBeSent`,r),this.client.off(`Network.responseReceived`,i),this.client.off(`Network.loadingFinished`,a),this.client.off(`Network.loadingFailed`,o),this.client.off(`Page.frameNavigated`,s)})}handleRequestWillBeSent(e,t){let{requestId:n,request:r,timestamp:i}=t;n&&r&&i!=null&&e.pendingRequests.set(n,{requestId:n,startTime:i*1e3,request:{method:r.method,url:r.url,headers:r.headers,postData:r.postData}})}handleResponseReceived(e,t){let{requestId:n,response:r}=t;if(!n||!r)return;let i=e.pendingRequests.get(n);i&&(i.response={status:r.status,statusText:r.statusText,headers:r.headers,mimeType:r.mimeType},i.timing=r.timing)}async handleLoadingFinished(e,t){let{requestId:n,timestamp:r}=t;if(!n||r==null)return;let i=e.pendingRequests.get(n);if(!i)return;i.endTime=r*1e3;try{let t=await this.client.send(`Network.getResponseBody`,{requestId:n},e.sessionId);i.responseBody=t.body,i.responseBodyBase64=t.base64Encoded===!0}catch{}let a=this.buildHarEntry(i);a&&e.entries.push(a),e.pendingRequests.delete(n)}handleLoadingFailed(e,t){let{requestId:n}=t;n&&e.pendingRequests.delete(n)}buildHarEntry(e){if(!e.response)return null;let{request:t,response:n,timing:r,startTime:i,endTime:a,responseBody:o,responseBodyBase64:s}=e,c=a?a-i:0,l=[];try{let e=new URL(t.url);l=Array.from(e.searchParams.entries()).map(([e,t])=>({name:e,value:t}))}catch{}let u=r?(()=>{let e=(e,t)=>{if(e==null||t==null||e<0||t<0)return-1;let n=t-e;return n>=0?n:-1},t=r.dnsStart>=0?r.dnsStart:r.connectStart>=0?r.connectStart:0;return{blocked:t>0?t:-1,dns:e(r.dnsStart,r.dnsEnd),connect:e(r.connectStart,r.connectEnd),ssl:e(r.sslStart,r.sslEnd),send:e(r.sendStart,r.sendEnd),wait:e(r.sendEnd,r.receiveHeadersStart),receive:e(r.receiveHeadersStart,r.receiveHeadersEnd)}})():{blocked:-1,dns:-1,connect:-1,ssl:-1,send:0,wait:c,receive:0},d={size:o?.length??0,mimeType:n.mimeType??`application/octet-stream`};o&&(d.text=o,s&&(d.encoding=`base64`));let f;return t.postData&&(f={mimeType:t.headers[`content-type`]??t.headers[`Content-Type`]??`text/plain`,text:t.postData}),{startedDateTime:new Date(i).toISOString(),time:c,request:{method:t.method,url:t.url,httpVersion:`HTTP/1.1`,cookies:[],headers:Object.entries(t.headers).map(([e,t])=>({name:e,value:t})),queryString:l,postData:f,headersSize:-1,bodySize:t.postData?.length??0},response:{status:n.status,statusText:n.statusText,httpVersion:`HTTP/1.1`,cookies:[],headers:Object.entries(n.headers).map(([e,t])=>({name:e,value:t})),content:d,redirectURL:n.headers.location??n.headers.Location??``,headersSize:-1,bodySize:d.size},cache:{},timings:u}}async saveSnapshot(e,t){return this.saveSnapshotWithEntries(e,t,e.entries,e.currentUrl)}async applyFilter(e,t){return y(e,t)}async saveSnapshotWithEntries(e,t,n,r){if(n.length===0)return _.debug(`No entries to save`,{recordingId:e.id,trigger:t}),null;let i=e.filterCode?await this.applyFilter(n,e.filterCode):n;if(i.length===0)return _.debug(`All entries filtered out`,{recordingId:e.id,trigger:t}),null;e.snapshotCount++;let a=new Date().toISOString().replace(/[:.]/g,`-`),o=this.urlToSlug(r),s=`${e.snapshotCount.toString().padStart(3,`0`)}-${a}-${t}-${o}.har`,c=`/recordings/${e.id}/${s}`,l={log:{version:`1.2`,creator:{name:`SLICC HAR Recorder`,version:`1.0.0`},entries:i}};return await this.fs.writeFile(c,JSON.stringify(l,null,2)),_.debug(`Saved HAR snapshot`,{recordingId:e.id,path:c,entryCount:i.length}),c}urlToSlug(e){try{let t=new URL(e);return`${t.hostname}${t.pathname}`.replace(/[^a-zA-Z0-9]/g,`-`).replace(/-+/g,`-`).replace(/^-|-$/g,``).slice(0,50)||`page`}catch{return`page`}}async stopRecording(e){let t=this.recordings.get(e);if(!t)throw Error(`Recording not found: ${e}`);await this.saveSnapshot(t,`close`);let n=this.eventCleanup.get(e);n&&(n(),this.eventCleanup.delete(e));try{await this.client.send(`Network.disable`,{},t.sessionId)}catch{}this.recordings.delete(e);let r=`/recordings/${e}`;return _.debug(`Stopped recording`,{recordingId:e,snapshotCount:t.snapshotCount}),r}getRecording(e){return this.recordings.get(e)}getRecordingByTarget(e){for(let[t,n]of this.recordings)if(n.targetId===e)return t}async ensureDir(e){await this.fs.mkdir(e,{recursive:!0})}};function y(e,t){try{let n=Function(`entry`,`return (${t})(entry);`),r=[];for(let t of e)try{let e=n(t);if(e===!1)continue;typeof e==`object`&&e?r.push(e):r.push(t)}catch(e){_.error(`Filter function error on entry, keeping it`,{error:e instanceof Error?e.message:String(e)}),r.push(t)}return r}catch(t){return _.error(`Failed to compile filter, returning unfiltered`,{error:t instanceof Error?t.message:String(t)}),e}}var b=class{maxSessions;onEvict;sessions=new Map;pinnedTargets=new Map;appliedSends=new Map;constructor(e=32,t){this.maxSessions=e,this.onEvict=t}get size(){return this.sessions.size}get(e){return this.sessions.get(e)}has(e){return this.sessions.has(e)}values(){return this.sessions.values()}entries(){return this.sessions.entries()}snapshot(){return[...this.sessions]}remember(e,t){this.pruneAppliedSends(),this.sessions.set(e,t),this.enforceCap(e)}touch(e,t){this.sessions.delete(e),this.sessions.set(e,t)}take(e){let t=this.sessions.get(e);return t&&this.sessions.delete(e),t}delete(e){this.sessions.delete(e)}clear(){this.sessions.clear()}pin(e){this.pinnedTargets.set(e,(this.pinnedTargets.get(e)??0)+1);let t=!1;return()=>{if(t)return;t=!0;let n=(this.pinnedTargets.get(e)??1)-1;n>0?this.pinnedTargets.set(e,n):this.pinnedTargets.delete(e),this.enforceCap()}}isPinned(e){return this.pinnedTargets.has(e)}enforceCap(e){for(;this.sessions.size>this.maxSessions;){let t;for(let n of this.sessions.keys())if(!(n===e||this.pinnedTargets.has(n))){t=n;break}if(t===void 0)return;let n=this.sessions.get(t);this.sessions.delete(t),n&&this.onEvict?.(t,n)}}noteApplied(e){this.appliedSends.set(e,(this.appliedSends.get(e)??0)+1)}appliedCount(e){return this.appliedSends.get(e)??0}pruneAppliedSends(){if(this.appliedSends.size<=this.maxSessions*4)return;let e=new Set([...this.sessions.values()].map(e=>e.sessionId));for(let t of[...this.appliedSends.keys()])e.has(t)||this.appliedSends.delete(t)}findBySessionId(e){for(let[t,n]of this.sessions)if(n.sessionId===e)return[t,n]}findByTargetOrLocalId(e){let t=[];for(let[n,r]of this.sessions)(n===e||r.remote?.localTargetId===e)&&t.push([n,r]);return t}anyOnTransport(e){for(let t of this.sessions.values())if(t.transport===e)return!0;return!1}anyMatchingRemote(e,t){for(let n of this.sessions.values())if(n.remote?.runtimeId===e&&n.remote.localTargetId===t)return!0;return!1}},x=`slicc.ariaRefs`,S=[`textbox`,`button`,`link`,`checkbox`,`radio`,`iframe`];function C(e=0){return`(${w})(${Number.isSafeInteger(e)&&e>0?e:0})`}function te(e){return`(function(ref) {
1
+ import{t as e}from"./logger-DDBAeTLF.js";import"./navigation-watcher-C24VRot4.js";import"./wc-follower-oauth-iJKLKYov.js";import{d as t,l as n,u as r}from"./main-pG2z7nDr.js";import{n as i,t as a}from"./pending-request-table-k-D7ZZsL.js";var o=e(`cdp`);function s(e){return e===4001?`CDP connection superseded by another SLICC tab/window on this instance`:e===4002?`CDP connection reset by proxy (upstream Chrome connection was re-established)`:`CDP connection closed`}var c=class{ws=null;nextId=1;_superseded=!1;pending=new a;listeners=new Map;_state=`disconnected`;stateListeners=new Set;lastNotifiedState=`disconnected`;lastNotifiedReason;get state(){return this._state}onStateChange(e){return this.stateListeners.add(e),()=>{this.stateListeners.delete(e)}}get superseded(){return this._superseded}async connect(e){if(this._state!==`disconnected`)throw Error(`Cannot connect: state is ${this._state}`);if(!e?.url)throw Error(`CDPClient.connect() requires a WebSocket URL`);let{url:t,timeout:n=5e3,protocols:r}=e;return this._state=`connecting`,new Promise((e,i)=>{let a=setTimeout(()=>{this.cleanup(),i(Error(`CDP connection timed out after ${n}ms`))},n);try{this.ws=r===void 0?new WebSocket(t):new WebSocket(t,r)}catch(e){clearTimeout(a),this._state=`disconnected`,i(e);return}this.ws.onopen=()=>{clearTimeout(a),this._state=`connected`,this._superseded=!1,o.info(`Connected`,{url:t}),this.notifyState(`connected`),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(o.error(`Connection failed`,{url:t}),this.cleanup(),i(Error(`CDP WebSocket connection failed`)))},this.ws.onmessage=e=>{this.handleMessage(e.data)},this.ws.onclose=e=>{this.handleClose(e?.code)}})}disconnect(){this.ws&&(this.ws.onclose=null,this.ws.close()),this._superseded=!1,this.cleanup(),o.info(`Disconnected`)}async send(e,t,n,r=3e4){if(this._state!==`connected`||!this.ws)throw Error(`CDP client is not connected`);let i=this.nextId++,a={id:i,method:e};t&&(a.params=t),n&&(a.sessionId=n),o.debug(`Send`,{method:e,id:i,sessionId:n});let s=this.pending.issue(i,r,`CDP command timed out after ${r}ms: ${e}`);return this.ws.send(JSON.stringify(a)),s}on(e,t){let n=this.listeners.get(e);n||(n=new Set,this.listeners.set(e,n)),n.add(t)}off(e,t){let n=this.listeners.get(e);n&&(n.delete(t),n.size===0&&this.listeners.delete(e))}once(e,t=3e4){return i(t=>(this.on(e,t),()=>this.off(e,t)),t,`Timed out waiting for event: ${e}`)}handleMessage(e){let t;try{t=JSON.parse(e)}catch{return}if(`id`in t&&typeof t.id==`number`){let e=t;o.debug(`Response`,{id:e.id,hasError:!!e.error}),e.error?(o.error(`Command error`,{id:e.id,code:e.error.code,message:e.error.message}),this.pending.reject(e.id,Error(`CDP error: ${e.error.message} (${e.error.code})`))):this.pending.resolve(e.id,e.result??{});return}if(`method`in t){let e=t;o.debug(`Event`,{method:e.method,sessionId:e.sessionId});let n=this.listeners.get(e.method);if(n){let t=e.sessionId?{...e.params,sessionId:e.sessionId}:e.params??{};for(let e of n)try{e(t)}catch{}}}}handleClose(e){e===4001?(this._superseded=!0,o.warn(`CDP slot superseded by another SLICC tab/window on this instance`,{code:e})):e===4002?o.warn(`CDP proxy reset its upstream Chrome connection — sessions dropped`,{code:e,pendingCommands:this.pending.size}):o.error(`Connection closed unexpectedly`,{pendingCommands:this.pending.size}),this.cleanup(s(e))}cleanup(e=`CDP client disconnected`){this.ws=null,this._state=`disconnected`,this.pending.rejectAll(e),this.notifyState(`disconnected`,e)}notifyState(e,t){if(e!==this.lastNotifiedState||t!==this.lastNotifiedReason){this.lastNotifiedState=e,this.lastNotifiedReason=t;for(let n of this.stateListeners)try{n(e,t)}catch{}}}},l=`ws://localhost:5710/cdp`;function u(e=typeof window<`u`?window.location:null){return e?.host?`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}/cdp`:l}var d=class{lastConnectOptions=null;supersededHandler=null;supersededNotified=!1;reconnectAttempt=0;reconnectNotBefore=0;bridgeRejection=null;bridgeRejectedHandler=null;bridgeRejectedNotified=!1;classifyConnectFailure=async()=>`transient`;primeConnectOptions(e){this.lastConnectOptions=e?{...e}:{}}setSupersededHandler(e){this.supersededHandler=e}setBridgeRejectedHandler(e){this.bridgeRejectedHandler=e}setConnectFailureClassifier(e){this.classifyConnectFailure=e}async connect(e,t){if(this.bridgeRejection)throw this.notifyBridgeRejected(),new n(this.bridgeRejection);this.lastConnectOptions=t?{...t}:{};try{await e.connect({url:t?.url??u(),timeout:t?.timeout,...t?.protocols===void 0?{}:{protocols:t.protocols}})}catch(e){throw await this.noteReconnectFailure(t),this.bridgeRejection?new n(this.bridgeRejection):e}this.noteReconnectSuccess()}async ensureLocalConnected(e){if(e.superseded===!0){this.notifySuperseded();return}if(e.state===`disconnected`){this.throwIfReconnectPaused();let t=this.lastConnectOptions;try{await e.connect({url:t?.url??u(),...t?.timeout===void 0?{}:{timeout:t.timeout},...t?.protocols===void 0?{}:{protocols:t.protocols}})}catch(e){throw await this.noteReconnectFailure(t??void 0),this.bridgeRejection?new n(this.bridgeRejection):e}this.noteReconnectSuccess()}}async ensureConnected(e){if(e.client.superseded===!0){this.notifySuperseded();return}if(e.client.state===`disconnected`){this.throwIfReconnectPaused();let t=e.client;e.restoreLocalAfterRemoteDrop(),e.clearSessionsForTransport(t),e.getClient().state===`disconnected`&&await this.connect(e.getClient(),this.lastConnectOptions??void 0)}}throwIfReconnectPaused(){if(this.bridgeRejection)throw this.notifyBridgeRejected(),new n(this.bridgeRejection);if(Date.now()<this.reconnectNotBefore)throw new r}noteReconnectSuccess(){this.reconnectAttempt=0,this.reconnectNotBefore=0,this.supersededNotified=!1}async noteReconnectFailure(e){if(await this.classifyConnectFailure({url:e?.url??``,...e?.protocols===void 0?{}:{protocols:e.protocols}})===`terminal`){this.bridgeRejection=new n().message,this.notifyBridgeRejected();return}let r=t(this.reconnectAttempt);this.reconnectAttempt+=1,this.reconnectNotBefore=Date.now()+r}notifyBridgeRejected(){if(!this.bridgeRejectedNotified){this.bridgeRejectedNotified=!0;try{this.bridgeRejectedHandler?.()}catch{}}}notifySuperseded(){if(!this.supersededNotified){this.supersededNotified=!0;try{this.supersededHandler?.()}catch{}}}},f=class extends Error{step;name=`CommandAbortedError`;constructor(e){super(`Browser command aborted while ${e}. A CDP round trip already in flight cannot be cancelled, so it may still have been applied to the page; nothing after it was started.`),this.step=e}};function p(e,t){if(e?.aborted)throw new f(t)}function m(e,t){return e?{signal:e,error:()=>new f(t)}:void 0}function h(e,t,n){return new Promise((r,i)=>{if(t?.aborted){i(new f(n));return}let a=()=>{clearTimeout(o),i(new f(n))},o=setTimeout(()=>{t?.removeEventListener(`abort`,a),r()},e);t?.addEventListener(`abort`,a,{once:!0})})}function ee(e,t,n){return t?t.aborted?Promise.reject(new f(n)):new Promise((r,i)=>{let a=()=>i(new f(n));t.addEventListener(`abort`,a,{once:!0}),e.then(()=>{t.removeEventListener(`abort`,a),r()},e=>{t.removeEventListener(`abort`,a),i(e instanceof Error?e:Error(String(e)))})}):e}var g=class{contexts=new Map;for(e,t){let n=`${t}:${e}`,r=this.contexts.get(n);return r||(r=new Map,this.contexts.set(n,r)),r}peek(e,t){return this.contexts.get(`${t}:${e}`)}drop(e){this.contexts.delete(`main:${e}`),this.contexts.delete(`isolated:${e}`)}get size(){return this.contexts.size}},_=e(`har-recorder`),v=class{recordings=new Map;client;fs;eventCleanup=new Map;constructor(e,t){this.client=e,this.fs=t}async startRecording(e,t,n,r){let i=`rec-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;p(r,`about to enable Network on tab ${e}`),await this.client.send(`Network.enable`,{},t),p(r,`about to enable Page on tab ${e}`),await this.client.send(`Page.enable`,{},t),p(r,`about to read the URL of tab ${e}`);let a=(await this.client.send(`Runtime.evaluate`,{expression:`location.href`,returnByValue:!0},t)).result?.value??`about:blank`,o={id:i,targetId:e,sessionId:t,filterCode:n,pendingRequests:new Map,entries:[],startTime:Date.now(),currentUrl:a,snapshotCount:0};return this.recordings.set(i,o),this.setupEventListeners(o),await this.ensureDir(`/recordings/${i}`),_.debug(`Started recording`,{recordingId:i,targetId:e,currentUrl:a}),i}setupEventListeners(e){let{sessionId:t,id:n}=e,r=n=>{let r=n;r.sessionId===t&&this.handleRequestWillBeSent(e,r)},i=n=>{let r=n;r.sessionId===t&&this.handleResponseReceived(e,r)},a=r=>{let i=r;i.sessionId===t&&this.handleLoadingFinished(e,i).catch(e=>{_.error(`Failed to process loadingFinished event`,{recordingId:n,requestId:i.requestId,error:e instanceof Error?e.message:String(e)})})},o=n=>{let r=n;r.sessionId===t&&this.handleLoadingFailed(e,r)},s=r=>{let i=r;if(i.sessionId!==t)return;let a=i.frame;if(!a?.parentId&&a?.url){let t=[...e.entries],r=e.currentUrl;e.currentUrl=a.url,e.entries=[],e.pendingRequests.clear(),this.saveSnapshotWithEntries(e,`navigation`,t,r).catch(e=>{_.error(`Failed to save navigation snapshot`,{recordingId:n,error:e instanceof Error?e.message:String(e)})})}};this.client.on(`Network.requestWillBeSent`,r),this.client.on(`Network.responseReceived`,i),this.client.on(`Network.loadingFinished`,a),this.client.on(`Network.loadingFailed`,o),this.client.on(`Page.frameNavigated`,s),this.eventCleanup.set(n,()=>{this.client.off(`Network.requestWillBeSent`,r),this.client.off(`Network.responseReceived`,i),this.client.off(`Network.loadingFinished`,a),this.client.off(`Network.loadingFailed`,o),this.client.off(`Page.frameNavigated`,s)})}handleRequestWillBeSent(e,t){let{requestId:n,request:r,timestamp:i}=t;n&&r&&i!=null&&e.pendingRequests.set(n,{requestId:n,startTime:i*1e3,request:{method:r.method,url:r.url,headers:r.headers,postData:r.postData}})}handleResponseReceived(e,t){let{requestId:n,response:r}=t;if(!n||!r)return;let i=e.pendingRequests.get(n);i&&(i.response={status:r.status,statusText:r.statusText,headers:r.headers,mimeType:r.mimeType},i.timing=r.timing)}async handleLoadingFinished(e,t){let{requestId:n,timestamp:r}=t;if(!n||r==null)return;let i=e.pendingRequests.get(n);if(!i)return;i.endTime=r*1e3;try{let t=await this.client.send(`Network.getResponseBody`,{requestId:n},e.sessionId);i.responseBody=t.body,i.responseBodyBase64=t.base64Encoded===!0}catch{}let a=this.buildHarEntry(i);a&&e.entries.push(a),e.pendingRequests.delete(n)}handleLoadingFailed(e,t){let{requestId:n}=t;n&&e.pendingRequests.delete(n)}buildHarEntry(e){if(!e.response)return null;let{request:t,response:n,timing:r,startTime:i,endTime:a,responseBody:o,responseBodyBase64:s}=e,c=a?a-i:0,l=[];try{let e=new URL(t.url);l=Array.from(e.searchParams.entries()).map(([e,t])=>({name:e,value:t}))}catch{}let u=r?(()=>{let e=(e,t)=>{if(e==null||t==null||e<0||t<0)return-1;let n=t-e;return n>=0?n:-1},t=r.dnsStart>=0?r.dnsStart:r.connectStart>=0?r.connectStart:0;return{blocked:t>0?t:-1,dns:e(r.dnsStart,r.dnsEnd),connect:e(r.connectStart,r.connectEnd),ssl:e(r.sslStart,r.sslEnd),send:e(r.sendStart,r.sendEnd),wait:e(r.sendEnd,r.receiveHeadersStart),receive:e(r.receiveHeadersStart,r.receiveHeadersEnd)}})():{blocked:-1,dns:-1,connect:-1,ssl:-1,send:0,wait:c,receive:0},d={size:o?.length??0,mimeType:n.mimeType??`application/octet-stream`};o&&(d.text=o,s&&(d.encoding=`base64`));let f;return t.postData&&(f={mimeType:t.headers[`content-type`]??t.headers[`Content-Type`]??`text/plain`,text:t.postData}),{startedDateTime:new Date(i).toISOString(),time:c,request:{method:t.method,url:t.url,httpVersion:`HTTP/1.1`,cookies:[],headers:Object.entries(t.headers).map(([e,t])=>({name:e,value:t})),queryString:l,postData:f,headersSize:-1,bodySize:t.postData?.length??0},response:{status:n.status,statusText:n.statusText,httpVersion:`HTTP/1.1`,cookies:[],headers:Object.entries(n.headers).map(([e,t])=>({name:e,value:t})),content:d,redirectURL:n.headers.location??n.headers.Location??``,headersSize:-1,bodySize:d.size},cache:{},timings:u}}async saveSnapshot(e,t){return this.saveSnapshotWithEntries(e,t,e.entries,e.currentUrl)}async applyFilter(e,t){return y(e,t)}async saveSnapshotWithEntries(e,t,n,r){if(n.length===0)return _.debug(`No entries to save`,{recordingId:e.id,trigger:t}),null;let i=e.filterCode?await this.applyFilter(n,e.filterCode):n;if(i.length===0)return _.debug(`All entries filtered out`,{recordingId:e.id,trigger:t}),null;e.snapshotCount++;let a=new Date().toISOString().replace(/[:.]/g,`-`),o=this.urlToSlug(r),s=`${e.snapshotCount.toString().padStart(3,`0`)}-${a}-${t}-${o}.har`,c=`/recordings/${e.id}/${s}`,l={log:{version:`1.2`,creator:{name:`SLICC HAR Recorder`,version:`1.0.0`},entries:i}};return await this.fs.writeFile(c,JSON.stringify(l,null,2)),_.debug(`Saved HAR snapshot`,{recordingId:e.id,path:c,entryCount:i.length}),c}urlToSlug(e){try{let t=new URL(e);return`${t.hostname}${t.pathname}`.replace(/[^a-zA-Z0-9]/g,`-`).replace(/-+/g,`-`).replace(/^-|-$/g,``).slice(0,50)||`page`}catch{return`page`}}async stopRecording(e){let t=this.recordings.get(e);if(!t)throw Error(`Recording not found: ${e}`);await this.saveSnapshot(t,`close`);let n=this.eventCleanup.get(e);n&&(n(),this.eventCleanup.delete(e));try{await this.client.send(`Network.disable`,{},t.sessionId)}catch{}this.recordings.delete(e);let r=`/recordings/${e}`;return _.debug(`Stopped recording`,{recordingId:e,snapshotCount:t.snapshotCount}),r}getRecording(e){return this.recordings.get(e)}getRecordingByTarget(e){for(let[t,n]of this.recordings)if(n.targetId===e)return t}async ensureDir(e){await this.fs.mkdir(e,{recursive:!0})}};function y(e,t){try{let n=Function(`entry`,`return (${t})(entry);`),r=[];for(let t of e)try{let e=n(t);if(e===!1)continue;typeof e==`object`&&e?r.push(e):r.push(t)}catch(e){_.error(`Filter function error on entry, keeping it`,{error:e instanceof Error?e.message:String(e)}),r.push(t)}return r}catch(t){return _.error(`Failed to compile filter, returning unfiltered`,{error:t instanceof Error?t.message:String(t)}),e}}var b=class{maxSessions;onEvict;sessions=new Map;pinnedTargets=new Map;appliedSends=new Map;constructor(e=32,t){this.maxSessions=e,this.onEvict=t}get size(){return this.sessions.size}get(e){return this.sessions.get(e)}has(e){return this.sessions.has(e)}values(){return this.sessions.values()}entries(){return this.sessions.entries()}snapshot(){return[...this.sessions]}remember(e,t){this.pruneAppliedSends(),this.sessions.set(e,t),this.enforceCap(e)}touch(e,t){this.sessions.delete(e),this.sessions.set(e,t)}take(e){let t=this.sessions.get(e);return t&&this.sessions.delete(e),t}delete(e){this.sessions.delete(e)}clear(){this.sessions.clear()}pin(e){this.pinnedTargets.set(e,(this.pinnedTargets.get(e)??0)+1);let t=!1;return()=>{if(t)return;t=!0;let n=(this.pinnedTargets.get(e)??1)-1;n>0?this.pinnedTargets.set(e,n):this.pinnedTargets.delete(e),this.enforceCap()}}isPinned(e){return this.pinnedTargets.has(e)}enforceCap(e){for(;this.sessions.size>this.maxSessions;){let t;for(let n of this.sessions.keys())if(!(n===e||this.pinnedTargets.has(n))){t=n;break}if(t===void 0)return;let n=this.sessions.get(t);this.sessions.delete(t),n&&this.onEvict?.(t,n)}}noteApplied(e){this.appliedSends.set(e,(this.appliedSends.get(e)??0)+1)}appliedCount(e){return this.appliedSends.get(e)??0}pruneAppliedSends(){if(this.appliedSends.size<=this.maxSessions*4)return;let e=new Set([...this.sessions.values()].map(e=>e.sessionId));for(let t of[...this.appliedSends.keys()])e.has(t)||this.appliedSends.delete(t)}findBySessionId(e){for(let[t,n]of this.sessions)if(n.sessionId===e)return[t,n]}findByTargetOrLocalId(e){let t=[];for(let[n,r]of this.sessions)(n===e||r.remote?.localTargetId===e)&&t.push([n,r]);return t}anyOnTransport(e){for(let t of this.sessions.values())if(t.transport===e)return!0;return!1}anyMatchingRemote(e,t){for(let n of this.sessions.values())if(n.remote?.runtimeId===e&&n.remote.localTargetId===t)return!0;return!1}},x=`slicc.ariaRefs`,S=[`textbox`,`button`,`link`,`checkbox`,`radio`,`iframe`];function C(e=0){return`(${w})(${Number.isSafeInteger(e)&&e>0?e:0})`}function te(e){return`(function(ref) {
2
2
  var store = window[Symbol.for(${JSON.stringify(x)})];
3
3
  var held = store && store.byRef.get(ref);
4
4
  var el = held && (typeof held.deref === 'function' ? held.deref() : held);
@@ -1 +1 @@
1
- import{a as e}from"./diagnostics-B-5VkVir.js";import{a as t}from"./compat-d34y6SaJ.js";import{r as n,s as r}from"./legacy-api-aliases-DZ7QKXPR.js";import{h as i}from"./account-store-BP0-Mqyf.js";import{n as a}from"./pi-transcript-context-M0uAa_Rs.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
+ import{a as e}from"./diagnostics-B-5VkVir.js";import{a as t}from"./compat-d34y6SaJ.js";import{r as n,s as r}from"./legacy-api-aliases-DZ7QKXPR.js";import{h as i}from"./account-store-D4Humqb-.js";import{n as a}from"./pi-transcript-context-M0uAa_Rs.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{a as e}from"./account-store-D0e9GeOG.js";import{a as t}from"./diagnostics-B-5VkVir.js";import{a as n}from"./compat-CuWVDYYO.js";import{r,s as i}from"./legacy-api-aliases-DcPvcesD.js";import{n as a}from"./pi-transcript-context-C6LXdArv.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
+ import{a as e}from"./account-store-AloIt5Ss.js";import{a as t}from"./diagnostics-B-5VkVir.js";import{a as n}from"./compat-CuWVDYYO.js";import{r,s as i}from"./legacy-api-aliases-DcPvcesD.js";import{n as a}from"./pi-transcript-context-C6LXdArv.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{t as e}from"./logger-DDBAeTLF.js";import{st as t}from"./wc-shell-D4V2456X.js";import{n}from"./runtime-env-Dlaokqg1.js";import{t as r}from"./permissions-surface-registry-CilCRwhh.js";import{t as i}from"./speech-assets-bridge-DtbOauCq.js";import{o as a}from"./transformers-env-DkZ_rlLG.js";import{i as o,t as s}from"./whisper-session-DEyrzem0.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??t(),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=r();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=n,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
+ import{t as e}from"./logger-DDBAeTLF.js";import{st as t}from"./wc-shell-RF_bfAGN.js";import{n}from"./runtime-env-Dlaokqg1.js";import{t as r}from"./permissions-surface-registry-CilCRwhh.js";import{t as i}from"./speech-assets-bridge-DtbOauCq.js";import{o as a}from"./transformers-env-Fm5j4giD.js";import{i as o,t as s}from"./whisper-session-nBcuStI7.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??t(),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=r();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=n,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-BP0-Mqyf.js";import{a as i}from"./main-Cv-je9Rc.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=`
1
+ import{B as e,T as t,d as n,u as r}from"./account-store-D4Humqb-.js";import{a as i}from"./main-pG2z7nDr.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-DTUQtot0.js";import{d as n}from"./kernel-worker-D698PKFz.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-Dd-dJT-g.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
+ import{t as e}from"./logger-Cx6Y120U.js";import{S as t}from"./record-DTUQtot0.js";import{d as n}from"./kernel-worker-Bl7wfxQy.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-Dd-dJT-g.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-gCWtclsC.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};
1
+ import{n as e}from"./js-realm-worker-BQ2E7b6Z.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};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DBVvNlSN.js";import{t}from"./slugify-BYJ6QVAt.js";import{n,r,t as i}from"./archive-redaction-Bi6veJCs.js";import{t as a}from"./types-D8gIX-W-.js";import{a as o,h as s,i as c}from"./kernel-worker-D698PKFz.js";const l=/\uD83C\uDF99\uFE0F?/g,u=/\u25C1[\s\S]*?\u25B7/g;function d(e){return e.replace(u,``).replace(l,``).replace(/[ \t]+$/g,``).trimEnd()}function f(e){let t=``;for(let n of e){let e=n.role===`user`?`User`:`Assistant`,r=n.role===`user`?d(n.content):n.content;if(t+=`## ${e}\n${r}\n\n`,n.attachments?.length&&(t+=`Attachments:\n${n.attachments.map(e=>`- ${s(e)}`).join(`
1
+ import{n as e}from"./rolldown-runtime-DBVvNlSN.js";import{t}from"./slugify-BYJ6QVAt.js";import{n,r,t as i}from"./archive-redaction-Bi6veJCs.js";import{t as a}from"./types-D8gIX-W-.js";import{a as o,h as s,i as c}from"./kernel-worker-Bl7wfxQy.js";const l=/\uD83C\uDF99\uFE0F?/g,u=/\u25C1[\s\S]*?\u25B7/g;function d(e){return e.replace(u,``).replace(l,``).replace(/[ \t]+$/g,``).trimEnd()}function f(e){let t=``;for(let n of e){let e=n.role===`user`?`User`:`Assistant`,r=n.role===`user`?d(n.content):n.content;if(t+=`## ${e}\n${r}\n\n`,n.attachments?.length&&(t+=`Attachments:\n${n.attachments.map(e=>`- ${s(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 p=/* @__PURE__ */ e({LIVE_SNAPSHOT_PREFIX:()=>m,SESSIONS_INDEX_LOCK:()=>P,ensureSessionsDir:()=>M,findLiveSnapshotEntry:()=>_,formatArchiveAsMarkdown:()=>k,heuristicTitle:()=>E,isDraftArchiveFilename:()=>h,isProvisionalSessionTitle:()=>w,liveSnapshotFilename:()=>g,readSessionsIndexForWrite:()=>N,rewriteTranscriptPointers:()=>O,serializeIndexWrite:()=>I,sessionsIndexLockFor:()=>j,sessionsIndexPathFor:()=>A,shortId:()=>v,slugify:()=>y,stripEphemeral:()=>D,upsertSessionsIndexEntry:()=>z,upsertSessionsIndexEntryUnlocked:()=>R,writeSessionsIndexUnlocked:()=>L});const m=`live-`;function h(e){return e.startsWith(`pending-`)||e.startsWith(`live-`)}function g(e){return`${m}${y(e)}-${v()}.md`}function _(e,t){return e.find(e=>e.live===!0&&(e.cone??`cone`)===t)}function v(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}function y(e){return t(e,{maxLen:48,fallback:`session`})}const b=`untitled-session`,x=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`].join(`|`)})\\b|Preview tab (?:connected|disconnected) from |<context-summary\\b)`);function S(e){return e.slice(0,480).trim().replace(/\s+/g,` `).slice(0,240)}function C(e){let t=S(e);return t.length>0&&x.test(t)}function w(e){return e===b||C(e)}function T(e){return e.role!==`user`||!e.content?.trim()||e.source===`lick`||e.channel?!1:!C(e.content)}function E(e){let t=e.find(T);if(!t?.content)return b;let n=t.content.trim().replace(/\s+/g,` `);return n.length>60?`${n.slice(0,60)}…`:n||b}function D(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 O(e,t,n){return!t||t===n?e:e.split(t).join(n)}function k(e){let t=i(),a={...e,title:n(e.title,t),messages:r(e.messages,t)},o=(a.cost?`cost: ${JSON.stringify(a.cost)}\n`:``)+(a.models?`models: ${JSON.stringify(a.models)}\n`:``),s=(a.cone?`cone: ${a.cone}\n`:``)+(a.coneLabel?`coneLabel: ${JSON.stringify(a.coneLabel)}\n`:``)+(a.memorySkipped?`memorySkipped: true
3
3
  `:``)+(a.live?`live: true
4
4
  `:``)+(a.live&&a.liveThrough?`liveThrough: ${a.liveThrough}\n`:``)+(a.live&&a.compactions?`compactions: ${a.compactions}\n`:``)+(a.curatedThrough?`curatedThrough: ${a.curatedThrough}\n`:``),c=`---\nid: ${a.id}\n`+(a.sessionId?`sessionId: ${a.sessionId}\n`:``)+(a.attachmentsKey?`attachmentsKey: ${a.attachmentsKey}\n`:``)+`title: ${JSON.stringify(a.title)}\nfrozenAt: ${a.frozenAt}\ncreatedAt: ${a.createdAt}\nupdatedAt: ${a.updatedAt}\nmessageCount: ${a.messageCount}\n`+o+s+`---
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{Dt as t,at as n}from"./wc-shell-D4V2456X.js";import{t as r}from"./slugify-BYJ6QVAt.js";import{t as i}from"./types-D8gIX-W-.js";var a=[{category:`jwt`,source:String.raw`ey[A-Za-z0-9_-]{4,}\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+`,flags:`g`},{category:`private-key`,source:`-----BEGIN [A-Z ]* PRIVATE KEY-----`+String.raw`[\s\S]*?`+`-----END [A-Z ]* PRIVATE KEY-----`,flags:`g`},{category:`bearer-token`,source:`Bearer [A-Za-z0-9._~+/=!-]+`,flags:`gi`},{category:`api-key`,source:`(?:sk-(?:live|test|prod|proj)-[A-Za-z0-9]{8,}|sk-ant-[A-Za-z0-9-]{8,}|xoxb-[A-Za-z0-9-]{10,}|xoxp-[A-Za-z0-9-]{10,}|AKIA[A-Z0-9]{16}|ghp_[A-Za-z0-9]{36}|hf_[A-Za-z0-9]{34})`,flags:`g`},{category:`password`,source:String.raw`\b(?:password|passwd|token|secret|api_key)\s*[=:]\s*\S+`,flags:`gi`}],o=`⟦REDACTED:[^⟧]*⟧`;function s(e,t){return e.start<t.end&&t.start<e.end}function c(e){let t=[];for(let n of e.matchAll(new RegExp(o,`g`))){let e=n.index;e!==void 0&&t.push({start:e,end:e+n[0].length})}return t}function l(e,t,n=1,r){let i=c(e),o=[],l=n,u=r?.categories?a.filter(e=>r.categories?.includes(e.category)):a;for(let{category:n,source:r,flags:a}of u)for(let c of e.matchAll(new RegExp(r,a))){let e=c.index;if(e===void 0)continue;let r={start:e,end:e+c[0].length};i.some(e=>s(e,r))||o.some(e=>s(e,r))||o.push({...r,id:`${t}${l++}`,category:n})}o.sort((e,t)=>e.start-t.start);let d=``,f=0;for(let{start:t,end:n,id:r,category:i}of o)d+=e.slice(f,t),d+=`⟦REDACTED:${i}:${r}⟧`,f=n;return d+=e.slice(f),{text:d,matches:o.map(({id:e,category:t})=>({id:e,category:t})),nextId:l}}var u=[`jwt`,`private-key`,`bearer-token`,`api-key`],d=`ar`;function f(){return{nextId:1}}function p(e,t){let{text:n,nextId:r}=l(e,d,t.nextId,{categories:u});return t.nextId=r,n}function m(e,t){if(typeof e==`string`)return p(e,t);if(Array.isArray(e)){let n=!1,r=[];for(let i of e){let e=m(i,t);e!==i&&(n=!0),r.push(e)}return n?r:e}if(typeof e==`object`&&e){let n=!1,r={};for(let[i,a]of Object.entries(e)){let e=m(a,t);e!==a&&(n=!0),r[i]=e}return n?r:e}return e}function h(e,t=f()){return m(e,t)}function g(e){let r=``;for(let i of e){let e=i.role===`user`?`User`:`Assistant`,a=i.role===`user`?n(i.content):i.content;if(r+=`## ${e}\n${a}\n\n`,i.attachments?.length&&(r+=`Attachments:\n${i.attachments.map(e=>`- ${t(e)}`).join(`
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{Dt as t,at as n}from"./wc-shell-RF_bfAGN.js";import{t as r}from"./slugify-BYJ6QVAt.js";import{t as i}from"./types-D8gIX-W-.js";var a=[{category:`jwt`,source:String.raw`ey[A-Za-z0-9_-]{4,}\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+`,flags:`g`},{category:`private-key`,source:`-----BEGIN [A-Z ]* PRIVATE KEY-----`+String.raw`[\s\S]*?`+`-----END [A-Z ]* PRIVATE KEY-----`,flags:`g`},{category:`bearer-token`,source:`Bearer [A-Za-z0-9._~+/=!-]+`,flags:`gi`},{category:`api-key`,source:`(?:sk-(?:live|test|prod|proj)-[A-Za-z0-9]{8,}|sk-ant-[A-Za-z0-9-]{8,}|xoxb-[A-Za-z0-9-]{10,}|xoxp-[A-Za-z0-9-]{10,}|AKIA[A-Z0-9]{16}|ghp_[A-Za-z0-9]{36}|hf_[A-Za-z0-9]{34})`,flags:`g`},{category:`password`,source:String.raw`\b(?:password|passwd|token|secret|api_key)\s*[=:]\s*\S+`,flags:`gi`}],o=`⟦REDACTED:[^⟧]*⟧`;function s(e,t){return e.start<t.end&&t.start<e.end}function c(e){let t=[];for(let n of e.matchAll(new RegExp(o,`g`))){let e=n.index;e!==void 0&&t.push({start:e,end:e+n[0].length})}return t}function l(e,t,n=1,r){let i=c(e),o=[],l=n,u=r?.categories?a.filter(e=>r.categories?.includes(e.category)):a;for(let{category:n,source:r,flags:a}of u)for(let c of e.matchAll(new RegExp(r,a))){let e=c.index;if(e===void 0)continue;let r={start:e,end:e+c[0].length};i.some(e=>s(e,r))||o.some(e=>s(e,r))||o.push({...r,id:`${t}${l++}`,category:n})}o.sort((e,t)=>e.start-t.start);let d=``,f=0;for(let{start:t,end:n,id:r,category:i}of o)d+=e.slice(f,t),d+=`⟦REDACTED:${i}:${r}⟧`,f=n;return d+=e.slice(f),{text:d,matches:o.map(({id:e,category:t})=>({id:e,category:t})),nextId:l}}var u=[`jwt`,`private-key`,`bearer-token`,`api-key`],d=`ar`;function f(){return{nextId:1}}function p(e,t){let{text:n,nextId:r}=l(e,d,t.nextId,{categories:u});return t.nextId=r,n}function m(e,t){if(typeof e==`string`)return p(e,t);if(Array.isArray(e)){let n=!1,r=[];for(let i of e){let e=m(i,t);e!==i&&(n=!0),r.push(e)}return n?r:e}if(typeof e==`object`&&e){let n=!1,r={};for(let[i,a]of Object.entries(e)){let e=m(a,t);e!==a&&(n=!0),r[i]=e}return n?r:e}return e}function h(e,t=f()){return m(e,t)}function g(e){let r=``;for(let i of e){let e=i.role===`user`?`User`:`Assistant`,a=i.role===`user`?n(i.content):i.content;if(r+=`## ${e}\n${a}\n\n`,i.attachments?.length&&(r+=`Attachments:\n${i.attachments.map(e=>`- ${t(e)}`).join(`
2
2
  `)}\n\n`),i.toolCalls)for(let e of i.toolCalls)r+=`### Tool: ${e.name}\nInput: ${JSON.stringify(e.input,null,2)}\nResult: ${e.result??``}\n\n`}return r}var _=`/sessions`,v=`/sessions/index.json`;async function y(e){try{let t=await e.readFile(v,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function b(e){return`${_}/${e.filename}`}function x(e){let t=e,n=`Untitled`,r={},i=t.match(/^---\n([\s\S]*?)\n---\n+/);if(i){t=t.slice(i[0].length),Object.assign(r,S(i[1]));let e=i[1].match(/^title:\s*(.+?)\s*$/m);e&&(n=C(e[1]))}let a=t.match(/<!-- slicc:session-data\n([\s\S]*?)\n-->\n*/);if(a){try{let e=a[1].replace(/-- >/g,`-->`),t=JSON.parse(e);if(Array.isArray(t))return{title:n,messages:t,...r}}catch{}t=t.replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n*/,``)}return r.sidecar?{title:n,messages:[],...r}:(t=t.replace(/^#\s+[^\n]*\n+/,``),{title:n,messages:T(t),...r})}function S(e){let t={},n=w(e,`cost`),r=w(e,`models`);n&&(t.cost=n),r&&(t.models=r);let i=e.match(/^cone:\s*(.+?)\s*$/m)?.[1];i&&(t.cone=i);let a=e.match(/^coneLabel:\s*(.+?)\s*$/m)?.[1];a&&(t.coneLabel=C(a)),/^memorySkipped:\s*true\s*$/m.test(e)&&(t.memorySkipped=!0),/^live:\s*true\s*$/m.test(e)&&(t.live=!0);let o=Number(e.match(/^liveThrough:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(o)&&o>0&&(t.liveThrough=o);let s=Number(e.match(/^compactions:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(s)&&s>0&&(t.compactions=s);let c=Number(e.match(/^curatedThrough:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(c)&&c>0&&(t.curatedThrough=c);let l=e.match(/^id:\s*(\S+)\s*$/m)?.[1];l&&(t.id=l);let u=e.match(/^sessionId:\s*(\S+)\s*$/m)?.[1];u&&(t.sessionId=u);let d=e.match(/^attachmentsKey:\s*(\S+)\s*$/m)?.[1];d&&(t.attachmentsKey=d);let f=e.match(/^sidecar:\s*(\S+)\s*$/m)?.[1];return f&&(t.sidecar=f),t}function C(e){let t=e.trim();if(!t.startsWith(`"`))return t;try{let e=JSON.parse(t);if(typeof e==`string`)return e}catch{}return t.replace(/^"|"$/g,``)}function w(e,t){let n=RegExp(`^${t}:\\s*(.+?)\\s*$`,`m`).exec(e)?.[1];if(n)try{return JSON.parse(n)}catch{return}}function T(e){let t=[],n=/^## (User|Assistant)\s*\n/gm,r=[],i;for(;(i=n.exec(e))!==null;)r.push({role:i[1]===`User`?`user`:`assistant`,start:i.index,bodyStart:i.index+i[0].length});for(let n=0;n<r.length;n++){let i=n+1<r.length?r[n+1].start:e.length,a=e.slice(r[n].bodyStart,i).trim();t.push({id:`frozen-${n}`,role:r[n].role,content:a,timestamp:0})}return t}var ee=e({LIVE_SNAPSHOT_PREFIX:()=>O,SESSIONS_INDEX_LOCK:()=>J,ensureSessionsDir:()=>K,findLiveSnapshotEntry:()=>j,formatArchiveAsMarkdown:()=>U,heuristicTitle:()=>B,isDraftArchiveFilename:()=>k,isProvisionalSessionTitle:()=>R,liveSnapshotFilename:()=>A,readSessionsIndexForWrite:()=>q,rewriteTranscriptPointers:()=>H,serializeIndexWrite:()=>X,sessionsIndexLockFor:()=>G,sessionsIndexPathFor:()=>W,shortId:()=>M,slugify:()=>N,stripEphemeral:()=>V,upsertSessionsIndexEntry:()=>$,upsertSessionsIndexEntryUnlocked:()=>Q,writeSessionsIndexUnlocked:()=>Z}),E=`<!-- slicc:session-data
3
3
  `,D=`
4
4
  -->`,O=`live-`;function k(e){return e.startsWith(`pending-`)||e.startsWith(`live-`)}function A(e){return`${O}${N(e)}-${M()}.md`}function j(e,t){return e.find(e=>e.live===!0&&(e.cone??`cone`)===t)}function M(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}function N(e){return r(e,{maxLen:48,fallback:`session`})}var P=`untitled-session`,F=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`].join(`|`)})\\b|Preview tab (?:connected|disconnected) from |<context-summary\\b)`);function I(e){return e.slice(0,480).trim().replace(/\s+/g,` `).slice(0,240)}function L(e){let t=I(e);return t.length>0&&F.test(t)}function R(e){return e===P||L(e)}function z(e){return e.role!==`user`||!e.content?.trim()||e.source===`lick`||e.channel?!1:!L(e.content)}function B(e){let t=e.find(z);if(!t?.content)return P;let n=t.content.trim().replace(/\s+/g,` `);return n.length>60?`${n.slice(0,60)}…`:n||P}function V(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 H(e,t,n){return!t||t===n?e:e.split(t).join(n)}function U(e){let t=f(),n={...e,title:p(e.title,t),messages:h(e.messages,t)},r=(n.cost?`cost: ${JSON.stringify(n.cost)}\n`:``)+(n.models?`models: ${JSON.stringify(n.models)}\n`:``),i=(n.cone?`cone: ${n.cone}\n`:``)+(n.coneLabel?`coneLabel: ${JSON.stringify(n.coneLabel)}\n`:``)+(n.memorySkipped?`memorySkipped: true
@@ -1 +1 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{_ as t,c as n,m as r,o as i,p as a}from"./frozen-archive-writer-BCkRktFY.js";import{B as o}from"./wc-live-CCIu6y-_.js";import{a as s,i as c,o as l,s as u,t as d}from"./frozen-session-identity-hf2cKRyg.js";import{a as f}from"./session-jsonl-BLS0Lhly.js";import{c as p,o as m,t as h}from"./live-session-curation-O66ZEy4b.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=`${r}/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?u(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,n){if(!c(t.filename))return[`unsafe archive name: ${String(t.filename)}`];let i=[],a=T(t,[...n,t]),o=a?await E(e,a,i):[];for(let t of o)await w(e,t,i);for(let n of[...o,`${r}/${t.filename}`])await w(e,p(n),i),await w(e,m(n),i,!0);return i}async function O(e,n,i){let a=new Set([`${y}/${C(n.filename)}`]),o=`${r}/${n.filename}`;try{let n=await e.readFile(o,{encoding:`utf-8`}),r=typeof n==`string`?n:new TextDecoder().decode(n),{attachmentsKey:i}=t(r);s(i)&&a.add(`${y}/${i}`)}catch(e){x(e)||i.push(S(o,e))}return[...a]}async function k(e,t,n){if(!c(t.filename))return[`unsafe archive name: ${String(t.filename)}`];let i=[],a=await O(e,t,i),s=u([...n,t],t);if(s)try{await o(e,s)}catch(e){i.push(S(`${r}/data/${s}`,e))}i.push(...await D(e,t,n));for(let t of a)await w(e,t,i,!0);return i.length>0?i:(await w(e,f(t.filename),i),await w(e,`${r}/${t.filename}`,i),i)}function A(e,t){return n(async()=>{let n=await l(e);if(n===null)return{kind:`unknown`};let r=d(n,t);return r?{kind:`present`,row:r}:{kind:`absent`,entries:n}})}function j(e,t){return n(async()=>{let n=await i(e),r=d(n,t);if(!r)return{status:`not-found`};if(r.live)return{status:`live`};if(!c(r.filename))return{status:`unsafe`};let o=n.filter(e=>e!==r),s=await k(e,r,o);try{await _(e,{strict:!0})}catch(e){s.push(S(`/sessions/.search-index.json`,e))}if(s.length>0)return v.warn(`Frozen session delete incomplete — row kept for a retry`,{filename:r.filename,errors:s}),{status:`failed`,errors:s};await a(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};
1
+ import{t as e}from"./logger-DDBAeTLF.js";import{_ as t,c as n,m as r,o as i,p as a}from"./frozen-archive-writer-D6ckorva.js";import{B as o}from"./wc-live-DEo-6NQK.js";import{a as s,i as c,o as l,s as u,t as d}from"./frozen-session-identity-DW7M6tap.js";import{a as f}from"./session-jsonl-BjBaj5ud.js";import{c as p,o as m,t as h}from"./live-session-curation-C8cnTFuk.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=`${r}/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?u(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,n){if(!c(t.filename))return[`unsafe archive name: ${String(t.filename)}`];let i=[],a=T(t,[...n,t]),o=a?await E(e,a,i):[];for(let t of o)await w(e,t,i);for(let n of[...o,`${r}/${t.filename}`])await w(e,p(n),i),await w(e,m(n),i,!0);return i}async function O(e,n,i){let a=new Set([`${y}/${C(n.filename)}`]),o=`${r}/${n.filename}`;try{let n=await e.readFile(o,{encoding:`utf-8`}),r=typeof n==`string`?n:new TextDecoder().decode(n),{attachmentsKey:i}=t(r);s(i)&&a.add(`${y}/${i}`)}catch(e){x(e)||i.push(S(o,e))}return[...a]}async function k(e,t,n){if(!c(t.filename))return[`unsafe archive name: ${String(t.filename)}`];let i=[],a=await O(e,t,i),s=u([...n,t],t);if(s)try{await o(e,s)}catch(e){i.push(S(`${r}/data/${s}`,e))}i.push(...await D(e,t,n));for(let t of a)await w(e,t,i,!0);return i.length>0?i:(await w(e,f(t.filename),i),await w(e,`${r}/${t.filename}`,i),i)}function A(e,t){return n(async()=>{let n=await l(e);if(n===null)return{kind:`unknown`};let r=d(n,t);return r?{kind:`present`,row:r}:{kind:`absent`,entries:n}})}function j(e,t){return n(async()=>{let n=await i(e),r=d(n,t);if(!r)return{status:`not-found`};if(r.live)return{status:`live`};if(!c(r.filename))return{status:`unsafe`};let o=n.filter(e=>e!==r),s=await k(e,r,o);try{await _(e,{strict:!0})}catch(e){s.push(S(`/sessions/.search-index.json`,e))}if(s.length>0)return v.warn(`Frozen session delete incomplete — row kept for a retry`,{filename:r.filename,errors:s}),{status:`failed`,errors:s};await a(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};
@@ -1 +1 @@
1
- import{a as e}from"./kernel-worker-D698PKFz.js";import{o as t}from"./frozen-archive-writer-BBomoaln.js";const n=/^[A-Za-z0-9._-]+$/;function r(e){return typeof e==`string`&&n.test(e)&&!e.startsWith(`.`)&&!e.includes(`..`)}function i(e){return r(e)&&e.endsWith(`.md`)&&e.length>3}function a(e){return r(e)}function o(e){return e.startsWith(`session-`)}function s(e,t){let n=t.sessionId;if(a(n)&&!o(n))return e.some(e=>e!==t&&e.sessionId===n)?void 0:n}function c(e,n){let r=e.find(e=>e.filename===n.filename);if(r||!n.sessionId||!t(n.filename))return r;let i=e.filter(e=>e.sessionId===n.sessionId),a=i.length===1?i[0]:void 0;return a&&s(e,a)===n.sessionId?a:void 0}async function l(t){try{let n=await t.readFile(e,{encoding:`utf-8`}),r=JSON.parse(typeof n==`string`?n:new TextDecoder().decode(n));return Array.isArray(r)?r:null}catch{return null}}export{c as findFrozenRow,o as isChatKeyId,i as isSafeArchiveFilename,a as isSafeSessionKey,l as readIndexForPresence,s as trustedSessionId};
1
+ import{a as e}from"./kernel-worker-Bl7wfxQy.js";import{o as t}from"./frozen-archive-writer-ClcpBoUl.js";const n=/^[A-Za-z0-9._-]+$/;function r(e){return typeof e==`string`&&n.test(e)&&!e.startsWith(`.`)&&!e.includes(`..`)}function i(e){return r(e)&&e.endsWith(`.md`)&&e.length>3}function a(e){return r(e)}function o(e){return e.startsWith(`session-`)}function s(e,t){let n=t.sessionId;if(a(n)&&!o(n))return e.some(e=>e!==t&&e.sessionId===n)?void 0:n}function c(e,n){let r=e.find(e=>e.filename===n.filename);if(r||!n.sessionId||!t(n.filename))return r;let i=e.filter(e=>e.sessionId===n.sessionId),a=i.length===1?i[0]:void 0;return a&&s(e,a)===n.sessionId?a:void 0}async function l(t){try{let n=await t.readFile(e,{encoding:`utf-8`}),r=JSON.parse(typeof n==`string`?n:new TextDecoder().decode(n));return Array.isArray(r)?r:null}catch{return null}}export{c as findFrozenRow,o as isChatKeyId,i as isSafeArchiveFilename,a as isSafeSessionKey,l as readIndexForPresence,s as trustedSessionId};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{a as t,h as n}from"./frozen-archive-writer-BCkRktFY.js";var r=e({findFrozenRow:()=>u,isChatKeyId:()=>c,isSafeArchiveFilename:()=>o,isSafeSessionKey:()=>s,readIndexForPresence:()=>d,trustedSessionId:()=>l}),i=/^[A-Za-z0-9._-]+$/;function a(e){return typeof e==`string`&&i.test(e)&&!e.startsWith(`.`)&&!e.includes(`..`)}function o(e){return a(e)&&e.endsWith(`.md`)&&e.length>3}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,n){let r=e.find(e=>e.filename===n.filename);if(r||!n.sessionId||!t(n.filename))return r;let i=e.filter(e=>e.sessionId===n.sessionId),a=i.length===1?i[0]:void 0;return a&&l(e,a)===n.sessionId?a:void 0}async function d(e){try{let t=await e.readFile(n,{encoding:`utf-8`}),r=JSON.parse(typeof t==`string`?t:new TextDecoder().decode(t));return Array.isArray(r)?r:null}catch{return null}}export{s as a,o as i,r as n,d as o,c as r,l as s,u as t};
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{a as t,h as n}from"./frozen-archive-writer-D6ckorva.js";var r=e({findFrozenRow:()=>u,isChatKeyId:()=>c,isSafeArchiveFilename:()=>o,isSafeSessionKey:()=>s,readIndexForPresence:()=>d,trustedSessionId:()=>l}),i=/^[A-Za-z0-9._-]+$/;function a(e){return typeof e==`string`&&i.test(e)&&!e.startsWith(`.`)&&!e.includes(`..`)}function o(e){return a(e)&&e.endsWith(`.md`)&&e.length>3}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,n){let r=e.find(e=>e.filename===n.filename);if(r||!n.sessionId||!t(n.filename))return r;let i=e.filter(e=>e.sessionId===n.sessionId),a=i.length===1?i[0]:void 0;return a&&l(e,a)===n.sessionId?a:void 0}async function d(e){try{let t=await e.readFile(n,{encoding:`utf-8`}),r=JSON.parse(typeof t==`string`?t:new TextDecoder().decode(t));return Array.isArray(r)?r:null}catch{return null}}export{s as a,o as i,r as n,d as o,c as r,l as s,u as t};
@@ -1 +1 @@
1
- import{t as e}from"./logger-Cx6Y120U.js";import{E as t,a as n,s as r}from"./record-DTUQtot0.js";import{a as i,i as a,n as o,r as s,t as c}from"./gelatiere-constants-BYJlhm8R.js";import{u as l}from"./kernel-worker-D698PKFz.js";import{GELATIERE_BASE_ALLOWED_COMMANDS as u}from"./gelatiere-store-GVNdni5w.js";const d=e(`gelatiere-unit`),f=[`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.`].join(` `);var p=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 m(e){return e.find(i)}function h(e){return e.listCronTasks().find(e=>e.name===`gelatiere-nightly`&&e.scoop===`gelatiere`)}function g(e){return{folder:e.folder,name:e.name,jid:e.jid}}const _=[`/sessions/`,`/shared/`,`/workspace/`,`/home/`,`/cones/`],v=[`/shared/.gelatiere/`];async function y(e,t,n){if(!n||b(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 b(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}async function x(e,t){let i=e.getScoops(),a=m(i);if(a){await e.syncGelatiereModel();let n=await y(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 p(o);let h=n(i),g=h?r(h):void 0,b={...l({parentId:s,name:c,folder:c,notifyOnComplete:!1,config:{systemPromptAppend:f,visiblePaths:[..._],writablePaths:[...v],allowedCommands:[...t??u]}}),assistantLabel:c,...g?{model:g}:{}};return await e.registerScoop(b),d.info(`gelatiere unit registered`,{jid:b.jid}),{folder:b.folder,jid:b.jid,created:!0}}function S(e,n){return{ensureUnit:t=>x(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=m(e.getScoops());return t?g(t):void 0},unitAllowedCommands:()=>m(e.getScoops())?.config?.allowedCommands,roots:()=>t(e.getScoops()).map(g),nightly:()=>{let e=h(n);return e?{id:e.id,cron:e.cron}:void 0},ensureNightly:async e=>{let t=h(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=h(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 C(e,t=globalThis){t.__slicc_gelatiere=e}async function w(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 T(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{w as bootGelatiere,S as createGelatiereSeam,T as haltGelatiere,C as publishGelatiereSeam};
1
+ import{t as e}from"./logger-Cx6Y120U.js";import{E as t,a as n,s as r}from"./record-DTUQtot0.js";import{a as i,i as a,n as o,r as s,t as c}from"./gelatiere-constants-BYJlhm8R.js";import{u as l}from"./kernel-worker-Bl7wfxQy.js";import{GELATIERE_BASE_ALLOWED_COMMANDS as u}from"./gelatiere-store-GVNdni5w.js";const d=e(`gelatiere-unit`),f=[`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.`].join(` `);var p=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 m(e){return e.find(i)}function h(e){return e.listCronTasks().find(e=>e.name===`gelatiere-nightly`&&e.scoop===`gelatiere`)}function g(e){return{folder:e.folder,name:e.name,jid:e.jid}}const _=[`/sessions/`,`/shared/`,`/workspace/`,`/home/`,`/cones/`],v=[`/shared/.gelatiere/`];async function y(e,t,n){if(!n||b(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 b(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}async function x(e,t){let i=e.getScoops(),a=m(i);if(a){await e.syncGelatiereModel();let n=await y(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 p(o);let h=n(i),g=h?r(h):void 0,b={...l({parentId:s,name:c,folder:c,notifyOnComplete:!1,config:{systemPromptAppend:f,visiblePaths:[..._],writablePaths:[...v],allowedCommands:[...t??u]}}),assistantLabel:c,...g?{model:g}:{}};return await e.registerScoop(b),d.info(`gelatiere unit registered`,{jid:b.jid}),{folder:b.folder,jid:b.jid,created:!0}}function S(e,n){return{ensureUnit:t=>x(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=m(e.getScoops());return t?g(t):void 0},unitAllowedCommands:()=>m(e.getScoops())?.config?.allowedCommands,roots:()=>t(e.getScoops()).map(g),nightly:()=>{let e=h(n);return e?{id:e.id,cron:e.cron}:void 0},ensureNightly:async e=>{let t=h(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=h(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 C(e,t=globalThis){t.__slicc_gelatiere=e}async function w(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 T(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{w as bootGelatiere,S as createGelatiereSeam,T as haltGelatiere,C as publishGelatiereSeam};
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/fs-CQpIxK2e.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-DjzSQ1t3.js","assets/logger-DDBAeTLF.js","assets/same-file-identity-OexpsaSD.js","assets/types-D8gIX-W-.js","assets/path-utils-DNJG-zQf.js","assets/bounded-walk-BjxKWNqp.js","assets/virtual-device-paths-D45tpPP6.js","assets/mount-table-store-dY2IfQ5S.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-DjzSQ1t3.js";import{K as t,c as n,u as r}from"./account-store-BP0-Mqyf.js";import"./proxied-fetch-Co-YYDT9.js";import{a as i}from"./api-endpoint-DuEQRZ4g.js";import{D as a,g as o}from"./main-Cv-je9Rc.js";import{r as s,t as c}from"./silent-renew-backoff-BgxLAhiO.js";import{getOAuthPageOrigin as l,resolveOAuthDelegation as u}from"./oauth-service-C9_em2OO.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-CQpIxK2e.js`).then(e=>e.t);return{VirtualFS:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]));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-CQpIxK2e.js`).then(e=>e.t);return{VirtualFS:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]));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`);if(t.maskedValue){await M(t.maskedValue);return}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-CQpIxK2e.js`).then(e=>e.t);return{VirtualFS:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),{readGlobalGitConfigValue:r,writeGlobalGitConfigValue:i}=await e(async()=>{let{readGlobalGitConfigValue:e,writeGlobalGitConfigValue:t}=await import(`./git-config-D2u6LGfT.js`);return{readGlobalGitConfigValue:e,writeGlobalGitConfigValue:t}},[]),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-DjzSQ1t3.js";import{K as t,c as n,u as r}from"./account-store-D4Humqb-.js";import"./proxied-fetch-Co-YYDT9.js";import{a as i}from"./api-endpoint-DuEQRZ4g.js";import{D as a,g as o}from"./main-pG2z7nDr.js";import{r as s,t as c}from"./silent-renew-backoff-BMr_pGCU.js";import{getOAuthPageOrigin as l,resolveOAuthDelegation as u}from"./oauth-service-C9_em2OO.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-CQpIxK2e.js`).then(e=>e.t);return{VirtualFS:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]));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-CQpIxK2e.js`).then(e=>e.t);return{VirtualFS:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]));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`);if(t.maskedValue){await M(t.maskedValue);return}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-CQpIxK2e.js`).then(e=>e.t);return{VirtualFS:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),{readGlobalGitConfigValue:r,writeGlobalGitConfigValue:i}=await e(async()=>{let{readGlobalGitConfigValue:e,writeGlobalGitConfigValue:t}=await import(`./git-config-D2u6LGfT.js`);return{readGlobalGitConfigValue:e,writeGlobalGitConfigValue:t}},[]),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,r as t}from"./account-store-D0e9GeOG.js";import{a as n}from"./diagnostics-B-5VkVir.js";import{a as r}from"./compat-CuWVDYYO.js";import{a as i,c as a,i as o,r as s,s as c,t as l}from"./legacy-api-aliases-DcPvcesD.js";import{a as u,i as d}from"./core-qVdZuDN0.js";import{t as f}from"./anthropic-proxy-compat-CaymbdBf.js";import"./provider-settings-D4dahP2q.js";function p(e,t){return{...e,api:`anthropic-messages`,baseUrl:t.baseUrl,headers:t.headers,provider:`github-copilot`,compat:f(e.compat)}}function m(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 h(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 m(await i.json())}finally{i&&clearTimeout(i)}}const g=`github-copilot`,_=atob(`SXYxLmI1MDdhMDhjODdlY2ZlOTg=`),v={Accept:`application/json`,"Editor-Version":`vscode/1.107.0`,"Editor-Plugin-Version":`copilot-chat/0.35.0`,"Copilot-Integration-Id":`vscode-chat`},y={Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`};function b(){return t().find(e=>e.providerId===g)}async function x(){let e=await fetch(`https://github.com/login/device/code`,{method:`POST`,headers:y,body:new URLSearchParams({client_id:_,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 S(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 C(Math.ceil(r*i),t);let n=await fetch(`https://github.com/login/oauth/access_token`,{method:`POST`,headers:y,body:new URLSearchParams({client_id:_,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;continue}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 C(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 w(e){let t=e.match(/proxy-ep=([^;]+)/);return t?`https://${t[1].replace(/^proxy\./,`api.`)}`:null}async function T(e){let t=await fetch(`https://api.github.com/copilot_internal/v2/token`,{headers:{...v,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:w(n.token)??`https://api.individual.githubcopilot.com`,githubAccessToken:e}}const E=`github-copilot.models.v1`;function D(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 O(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:D(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 k(e){let t=await fetch(`${e.apiBaseUrl}/models`,{headers:{...v,Authorization:`Bearer ${e.copilotToken}`,Accept:`application/json`}});if(!t.ok)throw Error(`Copilot /models returned ${t.status} ${t.statusText}`);return O(await t.json())}function A(){if(typeof localStorage>`u`)return[];try{let e=localStorage.getItem(E);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function j(e){if(typeof localStorage<`u`)try{localStorage.setItem(E,JSON.stringify(e))}catch{}}function M(e){return A().find(t=>t.id===e)??null}async function N(e){let t;try{t=await k(e)}catch(e){console.warn(`[github-copilot] Catalog refresh failed; keeping previous cache.`,e instanceof Error?e.message:String(e));return}j(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:{...v,"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))}})),j(t)}async function P(t,n){await e({providerId:g,accessToken:t.copilotToken,refreshToken:t.githubAccessToken,tokenExpiresAt:t.expiresAtMs,baseUrl:t.apiBaseUrl,userName:n})}async function F(){let e=b();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 T(e.refreshToken);return await P(n,e.userName),n.copilotToken}const I=[`mini`,`nano`,`flash`,`haiku`,`lite`,`embedding`];function L(e){let t=[e.id,e.name??``].flatMap(e=>{let t=e.toLowerCase();return[t,t.replace(/[\s_.:]+/g,`-`)]});return!I.some(e=>t.some(t=>t.includes(e)))}function R(){if(!b()?.accessToken)return[];let e=A();if(e.length>0)return e.filter(e=>!e.policyState.startsWith(`unavailable:`)).filter(e=>L(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=>L({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 z(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:e.api,provider:g,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 B={"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 V(e){let t=b(),n=t?.baseUrl??`https://api.individual.githubcopilot.com`,r=M(e);if(r)return{api:r.api,baseUrl:n,headers:{...B}};try{let n=d(`github-copilot`,e);return{api:n.api,baseUrl:t?.baseUrl??n.baseUrl,headers:{...n.headers??{},...B}}}catch{return null}}function H(e,t){let n=A(),r=n.findIndex(t=>t.id===e);r<0||(n[r]={...n[r],policyState:`unavailable:${t}`},j(n))}function U(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 W(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 G(e,t){return e===`anthropic-messages`?t?i:l:e===`openai-responses`?t?a:o:t?c:s}function K(e,t,n){let r=W(n);if(r&&/model_not_supported/i.test(r)){H(t.id,`model_not_supported`);let n=U(t.id,r);return console.error(`[github-copilot] Plan-gated model rejection:`,n),e.push(z(t,Error(n))),e.end(),!0}return e.push(n),!1}function q(e,t,n){let r=n instanceof Error?n.message:String(n),i=n;/model_not_supported/i.test(r)&&(H(t.id,`model_not_supported`),i=Error(U(t.id,r))),console.error(`[github-copilot] Stream error:`,i instanceof Error?i.message:String(i)),e.push(z(t,i)),e.end()}async function J(e,t,n,r,i){try{let a=await F(),o=V(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`?p(t,o):{...t,api:o.api,baseUrl:o.baseUrl,headers:o.headers,provider:`github-copilot`},c={...r,apiKey:a},l=G(o.api,i)(s,n,c);for await(let n of l)if(K(e,t,n))return;e.end()}catch(n){q(e,t,n)}}function Y(e){return(t,r,i={})=>{let a=n();return J(a,t,r,i,e),a}}const X=Y(!1),Z=Y(!0),Q=({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`].join(`;`);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`].join(`;`);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`].join(`;`);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`].join(`;`);let l=()=>{try{n.remove()}catch{}};s.addEventListener(`click`,()=>{l(),t(`cancel`)}),c.addEventListener(`click`,()=>{(async()=>{try{let{copyTextToClipboard:t}=await import(`./provider-settings-D4dahP2q.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 $(){let e=b();return e?.refreshToken?h(e.refreshToken,fetch,{headers:v}):null}const ee={id:g,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:R,getBudgetUsage:$,onOAuthLoginIntercepted:async(e,t,n)=>{let r=await x(),i=new URL(r.verification_uri);if(i.searchParams.set(`user_code`,r.user_code),await(n?.presentDeviceCode??Q)({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 S(r,a.signal)}catch(e){throw a.abort(),await o,e}await o;let c=await T(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 P(c,l),await N(c),t()},onOAuthLogout:async()=>{await e({providerId:g,accessToken:``})},onSilentRenew:async()=>{let e=b();if(!e?.refreshToken)return null;try{let t=await T(e.refreshToken);return await P(t,e.userName),await N(t),t.copilotToken}catch(e){return console.warn(`[github-copilot] Silent renew failed:`,e instanceof Error?e.message:String(e)),null}}};function te(){r({api:`github-copilot-anthropic`,stream:X,streamSimple:Z}),r({api:`github-copilot-openai`,stream:X,streamSimple:Z})}export{ee as config,L as isCopilotConeCompatible,te as register};
1
+ import{_ as e,r as t}from"./account-store-AloIt5Ss.js";import{a as n}from"./diagnostics-B-5VkVir.js";import{a as r}from"./compat-CuWVDYYO.js";import{a as i,c as a,i as o,r as s,s as c,t as l}from"./legacy-api-aliases-DcPvcesD.js";import{a as u,i as d}from"./core-qVdZuDN0.js";import{t as f}from"./anthropic-proxy-compat-CaymbdBf.js";import"./provider-settings-HdIWRUQi.js";function p(e,t){return{...e,api:`anthropic-messages`,baseUrl:t.baseUrl,headers:t.headers,provider:`github-copilot`,compat:f(e.compat)}}function m(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 h(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 m(await i.json())}finally{i&&clearTimeout(i)}}const g=`github-copilot`,_=atob(`SXYxLmI1MDdhMDhjODdlY2ZlOTg=`),v={Accept:`application/json`,"Editor-Version":`vscode/1.107.0`,"Editor-Plugin-Version":`copilot-chat/0.35.0`,"Copilot-Integration-Id":`vscode-chat`},y={Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`};function b(){return t().find(e=>e.providerId===g)}async function x(){let e=await fetch(`https://github.com/login/device/code`,{method:`POST`,headers:y,body:new URLSearchParams({client_id:_,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 S(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 C(Math.ceil(r*i),t);let n=await fetch(`https://github.com/login/oauth/access_token`,{method:`POST`,headers:y,body:new URLSearchParams({client_id:_,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;continue}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 C(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 w(e){let t=e.match(/proxy-ep=([^;]+)/);return t?`https://${t[1].replace(/^proxy\./,`api.`)}`:null}async function T(e){let t=await fetch(`https://api.github.com/copilot_internal/v2/token`,{headers:{...v,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:w(n.token)??`https://api.individual.githubcopilot.com`,githubAccessToken:e}}const E=`github-copilot.models.v1`;function D(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 O(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:D(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 k(e){let t=await fetch(`${e.apiBaseUrl}/models`,{headers:{...v,Authorization:`Bearer ${e.copilotToken}`,Accept:`application/json`}});if(!t.ok)throw Error(`Copilot /models returned ${t.status} ${t.statusText}`);return O(await t.json())}function A(){if(typeof localStorage>`u`)return[];try{let e=localStorage.getItem(E);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function j(e){if(typeof localStorage<`u`)try{localStorage.setItem(E,JSON.stringify(e))}catch{}}function M(e){return A().find(t=>t.id===e)??null}async function N(e){let t;try{t=await k(e)}catch(e){console.warn(`[github-copilot] Catalog refresh failed; keeping previous cache.`,e instanceof Error?e.message:String(e));return}j(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:{...v,"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))}})),j(t)}async function P(t,n){await e({providerId:g,accessToken:t.copilotToken,refreshToken:t.githubAccessToken,tokenExpiresAt:t.expiresAtMs,baseUrl:t.apiBaseUrl,userName:n})}async function F(){let e=b();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 T(e.refreshToken);return await P(n,e.userName),n.copilotToken}const I=[`mini`,`nano`,`flash`,`haiku`,`lite`,`embedding`];function L(e){let t=[e.id,e.name??``].flatMap(e=>{let t=e.toLowerCase();return[t,t.replace(/[\s_.:]+/g,`-`)]});return!I.some(e=>t.some(t=>t.includes(e)))}function R(){if(!b()?.accessToken)return[];let e=A();if(e.length>0)return e.filter(e=>!e.policyState.startsWith(`unavailable:`)).filter(e=>L(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=>L({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 z(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:e.api,provider:g,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 B={"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 V(e){let t=b(),n=t?.baseUrl??`https://api.individual.githubcopilot.com`,r=M(e);if(r)return{api:r.api,baseUrl:n,headers:{...B}};try{let n=d(`github-copilot`,e);return{api:n.api,baseUrl:t?.baseUrl??n.baseUrl,headers:{...n.headers??{},...B}}}catch{return null}}function H(e,t){let n=A(),r=n.findIndex(t=>t.id===e);r<0||(n[r]={...n[r],policyState:`unavailable:${t}`},j(n))}function U(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 W(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 G(e,t){return e===`anthropic-messages`?t?i:l:e===`openai-responses`?t?a:o:t?c:s}function K(e,t,n){let r=W(n);if(r&&/model_not_supported/i.test(r)){H(t.id,`model_not_supported`);let n=U(t.id,r);return console.error(`[github-copilot] Plan-gated model rejection:`,n),e.push(z(t,Error(n))),e.end(),!0}return e.push(n),!1}function q(e,t,n){let r=n instanceof Error?n.message:String(n),i=n;/model_not_supported/i.test(r)&&(H(t.id,`model_not_supported`),i=Error(U(t.id,r))),console.error(`[github-copilot] Stream error:`,i instanceof Error?i.message:String(i)),e.push(z(t,i)),e.end()}async function J(e,t,n,r,i){try{let a=await F(),o=V(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`?p(t,o):{...t,api:o.api,baseUrl:o.baseUrl,headers:o.headers,provider:`github-copilot`},c={...r,apiKey:a},l=G(o.api,i)(s,n,c);for await(let n of l)if(K(e,t,n))return;e.end()}catch(n){q(e,t,n)}}function Y(e){return(t,r,i={})=>{let a=n();return J(a,t,r,i,e),a}}const X=Y(!1),Z=Y(!0),Q=({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`].join(`;`);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`].join(`;`);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`].join(`;`);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`].join(`;`);let l=()=>{try{n.remove()}catch{}};s.addEventListener(`click`,()=>{l(),t(`cancel`)}),c.addEventListener(`click`,()=>{(async()=>{try{let{copyTextToClipboard:t}=await import(`./provider-settings-HdIWRUQi.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 $(){let e=b();return e?.refreshToken?h(e.refreshToken,fetch,{headers:v}):null}const ee={id:g,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:R,getBudgetUsage:$,onOAuthLoginIntercepted:async(e,t,n)=>{let r=await x(),i=new URL(r.verification_uri);if(i.searchParams.set(`user_code`,r.user_code),await(n?.presentDeviceCode??Q)({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 S(r,a.signal)}catch(e){throw a.abort(),await o,e}await o;let c=await T(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 P(c,l),await N(c),t()},onOAuthLogout:async()=>{await e({providerId:g,accessToken:``})},onSilentRenew:async()=>{let e=b();if(!e?.refreshToken)return null;try{let t=await T(e.refreshToken);return await P(t,e.userName),await N(t),t.copilotToken}catch(e){return console.warn(`[github-copilot] Silent renew failed:`,e instanceof Error?e.message:String(e)),null}}};function te(){r({api:`github-copilot-anthropic`,stream:X,streamSimple:Z}),r({api:`github-copilot-openai`,stream:X,streamSimple:Z})}export{ee as config,L as isCopilotConeCompatible,te as register};
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/clipboard-eqmn97SP.js","assets/rolldown-runtime-Dd_uD5pT.js"])))=>i.map(i=>d[i]);
2
- import{a as e}from"./diagnostics-B-5VkVir.js";import{t}from"./preload-helper-DjzSQ1t3.js";import{a as n}from"./compat-d34y6SaJ.js";import{a as r,c as i,i as a,r as o,s,t as c}from"./legacy-api-aliases-DZ7QKXPR.js";import{a as l,i as u}from"./core-DfJhnyZb.js";import{K as d,u as f}from"./account-store-BP0-Mqyf.js";import"./main-Cv-je9Rc.js";import{t as p}from"./anthropic-proxy-compat-CaymbdBf.js";function m(e,t){return{...e,api:`anthropic-messages`,baseUrl:t.baseUrl,headers:t.headers,provider:`github-copilot`,compat:p(e.compat)}}var h=`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(h,{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 O(){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 ee(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 te(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;continue}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 te(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 ne(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:ne(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=l(`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 t=D(),n=t?.baseUrl??`https://api.individual.githubcopilot.com`,r=I(e);if(r)return{api:r.api,baseUrl:n,headers:{...W}};try{let n=u(`github-copilot`,e);return{api:n.api,baseUrl:t?.baseUrl??n.baseUrl,headers:{...n.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?r:c:e===`openai-responses`?t?i:a:t?s:o}function X(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 re(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 ie(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`?m(t,o):{...t,api:o.api,baseUrl:o.baseUrl,headers:o.headers,provider:`github-copilot`},c={...r,apiKey:a},l=Y(o.api,i)(s,n,c);for await(let n of l)if(X(e,t,n))return;e.end()}catch(n){re(e,t,n)}}function Z(t){return(n,r,i={})=>{let a=e();return ie(a,n,r,i,t),a}}var Q=Z(!1),$=Z(!0),ae=({userCode:e,verificationUrl:n})=>typeof document>`u`?(console.info(`[github-copilot] Device verification code: ${e} — open ${n} in a browser to authorize.`),Promise.resolve(`continue`)):new Promise(n=>{let r=document.createElement(`div`);r.setAttribute(`data-slicc-overlay`,`github-copilot-device`),r.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`].join(`;`);let i=document.createElement(`div`);i.textContent=`GitHub Copilot — verification code`,i.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`].join(`;`);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`].join(`;`);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`].join(`;`);let u=()=>{try{r.remove()}catch{}};c.addEventListener(`click`,()=>{u(),n(`cancel`)}),l.addEventListener(`click`,()=>{(async()=>{try{let{copyTextToClipboard:n}=await t(async()=>{let{copyTextToClipboard:e}=await import(`./clipboard-eqmn97SP.js`).then(e=>e.t);return{copyTextToClipboard:e}},__vite__mapDeps([0,1]));await n(e)}catch{}u(),n(`continue`)})()}),s.appendChild(c),s.appendChild(l),r.appendChild(i),r.appendChild(a),r.appendChild(o),r.appendChild(s),document.body.appendChild(r)});async function oe(){let e=D();return e?.refreshToken?v(e.refreshToken,fetch,{headers:w}):null}var se={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:oe,onOAuthLoginIntercepted:async(e,t,n)=>{let r=await O(),i=new URL(r.verification_uri);if(i.searchParams.set(`user_code`,r.user_code),await(n?.presentDeviceCode??ae)({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 ee(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 ce(){n({api:`github-copilot-anthropic`,stream:Q,streamSimple:$}),n({api:`github-copilot-openai`,stream:Q,streamSimple:$})}export{se as config,V as isCopilotConeCompatible,ce as register};
2
+ import{a as e}from"./diagnostics-B-5VkVir.js";import{t}from"./preload-helper-DjzSQ1t3.js";import{a as n}from"./compat-d34y6SaJ.js";import{a as r,c as i,i as a,r as o,s,t as c}from"./legacy-api-aliases-DZ7QKXPR.js";import{a as l,i as u}from"./core-DfJhnyZb.js";import{K as d,u as f}from"./account-store-D4Humqb-.js";import"./main-pG2z7nDr.js";import{t as p}from"./anthropic-proxy-compat-CaymbdBf.js";function m(e,t){return{...e,api:`anthropic-messages`,baseUrl:t.baseUrl,headers:t.headers,provider:`github-copilot`,compat:p(e.compat)}}var h=`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(h,{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 O(){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 ee(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 te(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;continue}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 te(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 ne(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:ne(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=l(`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 t=D(),n=t?.baseUrl??`https://api.individual.githubcopilot.com`,r=I(e);if(r)return{api:r.api,baseUrl:n,headers:{...W}};try{let n=u(`github-copilot`,e);return{api:n.api,baseUrl:t?.baseUrl??n.baseUrl,headers:{...n.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?r:c:e===`openai-responses`?t?i:a:t?s:o}function X(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 re(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 ie(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`?m(t,o):{...t,api:o.api,baseUrl:o.baseUrl,headers:o.headers,provider:`github-copilot`},c={...r,apiKey:a},l=Y(o.api,i)(s,n,c);for await(let n of l)if(X(e,t,n))return;e.end()}catch(n){re(e,t,n)}}function Z(t){return(n,r,i={})=>{let a=e();return ie(a,n,r,i,t),a}}var Q=Z(!1),$=Z(!0),ae=({userCode:e,verificationUrl:n})=>typeof document>`u`?(console.info(`[github-copilot] Device verification code: ${e} — open ${n} in a browser to authorize.`),Promise.resolve(`continue`)):new Promise(n=>{let r=document.createElement(`div`);r.setAttribute(`data-slicc-overlay`,`github-copilot-device`),r.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`].join(`;`);let i=document.createElement(`div`);i.textContent=`GitHub Copilot — verification code`,i.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`].join(`;`);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`].join(`;`);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`].join(`;`);let u=()=>{try{r.remove()}catch{}};c.addEventListener(`click`,()=>{u(),n(`cancel`)}),l.addEventListener(`click`,()=>{(async()=>{try{let{copyTextToClipboard:n}=await t(async()=>{let{copyTextToClipboard:e}=await import(`./clipboard-eqmn97SP.js`).then(e=>e.t);return{copyTextToClipboard:e}},__vite__mapDeps([0,1]));await n(e)}catch{}u(),n(`continue`)})()}),s.appendChild(c),s.appendChild(l),r.appendChild(i),r.appendChild(a),r.appendChild(o),r.appendChild(s),document.body.appendChild(r)});async function oe(){let e=D();return e?.refreshToken?v(e.refreshToken,fetch,{headers:w}):null}var se={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:oe,onOAuthLoginIntercepted:async(e,t,n)=>{let r=await O(),i=new URL(r.verification_uri);if(i.searchParams.set(`user_code`,r.user_code),await(n?.presentDeviceCode??ae)({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 ee(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 ce(){n({api:`github-copilot-anthropic`,stream:Q,streamSimple:$}),n({api:`github-copilot-openai`,stream:Q,streamSimple:$})}export{se as config,V as isCopilotConeCompatible,ce as register};
@@ -1 +1 @@
1
- import{_ as e,n as t,r as n}from"./account-store-D0e9GeOG.js";import"./proxied-fetch-1DfC_94U.js";import{o as r}from"./api-endpoint-D8lUKmPu.js";import{n as i}from"./tray-storage-keys-DbThbnIh.js";import{t as a}from"./tray-runtime-config-BvQtvIxB.js";import{t as o}from"./global-db-Bfy_NRtT.js";import{r as s,t as c}from"./silent-renew-backoff-Dmz3DJHb.js";import{getOAuthPageOrigin as l,resolveOAuthDelegation as u}from"./oauth-service-a7hhn6wa.js";import"./provider-settings-D4dahP2q.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-TeRSVyvv.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-TeRSVyvv.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`);if(n.maskedValue){await j(n.maskedValue);return}e?.clearOnFailure&&await M()}async function P(e){if(e.login&&e.id!==void 0)try{let{VirtualFS:t}=await import(`./fs-TeRSVyvv.js`).then(e=>e.t),{readGlobalGitConfigValue:n,writeGlobalGitConfigValue:r}=await import(`./git-config-DzvRg91c.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
+ import{_ as e,n as t,r as n}from"./account-store-AloIt5Ss.js";import"./proxied-fetch-1DfC_94U.js";import{o as r}from"./api-endpoint-D8lUKmPu.js";import{n as i}from"./tray-storage-keys-DbThbnIh.js";import{t as a}from"./tray-runtime-config-BvQtvIxB.js";import{t as o}from"./global-db-Bfy_NRtT.js";import{r as s,t as c}from"./silent-renew-backoff-Dmz3DJHb.js";import{getOAuthPageOrigin as l,resolveOAuthDelegation as u}from"./oauth-service-a7hhn6wa.js";import"./provider-settings-HdIWRUQi.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-TeRSVyvv.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-TeRSVyvv.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`);if(n.maskedValue){await j(n.maskedValue);return}e?.clearOnFailure&&await M()}async function P(e){if(e.login&&e.id!==void 0)try{let{VirtualFS:t}=await import(`./fs-TeRSVyvv.js`).then(e=>e.t),{readGlobalGitConfigValue:n,writeGlobalGitConfigValue:r}=await import(`./git-config-DzvRg91c.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};