sliccy 6.110.2 → 6.110.3

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 (144) hide show
  1. package/README.md +1 -1
  2. package/dist/node-server/_cloud_core/src/cone-config/index.d.ts.map +1 -1
  3. package/dist/node-server/_cloud_core/src/cone-config/index.js +9 -6
  4. package/dist/node-server/electron-runtime.d.ts +9 -0
  5. package/dist/node-server/electron-runtime.js +3 -3
  6. package/dist/ui/.vite/manifest.json +173 -165
  7. package/dist/ui/assets/{account-store-Bg1KKHOx.js → account-store-8BBweMEe.js} +3 -3
  8. package/dist/ui/assets/{account-store-8sKKUZ8J.js → account-store-DaG5fzPt.js} +1 -1
  9. package/dist/ui/assets/{adobe-0CWIpyju.js → adobe-ShrE3fLm.js} +1 -1
  10. package/dist/ui/assets/{adobe-ChXsF6gw.js → adobe-lW1zO2xc.js} +2 -2
  11. package/dist/ui/assets/{agent-bridge-B43SVYcu.js → agent-bridge-DnjqW2rF.js} +1 -1
  12. package/dist/ui/assets/{agent-panels-9uCI5yeM.js → agent-panels-BUwuB3TG.js} +1 -1
  13. package/dist/ui/assets/{apply-layout-Bz-0rXhV.js → apply-layout-z0iSraqj.js} +1 -1
  14. package/dist/ui/assets/{apps-C16RztyU.js → apps-BJxy_wtK.js} +1 -1
  15. package/dist/ui/assets/{azure-openai-BCKGDF-y.js → azure-openai-BfsbnpvG.js} +1 -1
  16. package/dist/ui/assets/{azure-openai-DoQszniP.js → azure-openai-CtT9zy2b.js} +1 -1
  17. package/dist/ui/assets/{bsh-watchdog--Df_ThJG.js → bsh-watchdog-COvv_9Ni.js} +1 -1
  18. package/dist/ui/assets/{cdp-BzUC7d2h.js → cdp-D8RM1G3G.js} +1 -1
  19. package/dist/ui/assets/{cerebras-kH_bQsg2.js → cerebras-DPUsdgrQ.js} +1 -1
  20. package/dist/ui/assets/{cerebras-CQwhL4Ig.js → cerebras-b6VkvqMq.js} +1 -1
  21. package/dist/ui/assets/{connect-surface-BMrb-EnN.js → connect-surface-RDU90Juf.js} +1 -1
  22. package/dist/ui/assets/{directed-approval-zeD_orXz.js → directed-approval-DONBhcot.js} +1 -1
  23. package/dist/ui/assets/{follower-navigate-watcher-BoAzVfrf.js → follower-navigate-watcher-DKoozuvB.js} +1 -1
  24. package/dist/ui/assets/fs-CsuRlf5M.js +2 -0
  25. package/dist/ui/assets/{fs-DKRiXKHo.js → fs-DJCrdGnR.js} +1 -1
  26. package/dist/ui/assets/github-CAiprKij.js +1 -0
  27. package/dist/ui/assets/github-DWOc5kg-.js +2 -0
  28. package/dist/ui/assets/{github-copilot-DJf8cE1K.js → github-copilot-Bil4uk_l.js} +1 -1
  29. package/dist/ui/assets/{github-copilot-Xp2l1YxD.js → github-copilot-CJL7AnKr.js} +1 -1
  30. package/dist/ui/assets/{github-install-DRa8AaBY.js → github-install-CndOdb4D.js} +1 -1
  31. package/dist/ui/assets/{github-zip-BpPiUirA.js → github-zip-BY8CZlGS.js} +1 -1
  32. package/dist/ui/assets/intercepted-oauth-B0tP4D7f.js +1 -0
  33. package/dist/ui/assets/{js-realm-worker-D6DSLfXh.js → js-realm-worker-DlEUeX9A.js} +4 -4
  34. package/dist/ui/assets/{kernel-worker-DQDT4Cud.js → kernel-worker-bde26G1-.js} +645 -645
  35. package/dist/ui/assets/{lick-urls-51I5JBZv.js → lick-urls-CLl4eksX.js} +1 -1
  36. package/dist/ui/assets/lick-ws-bridge-BD2lQGbd.js +1 -0
  37. package/dist/ui/assets/{lick-ws-bridge-rxCk9AYw.js → lick-ws-bridge-HrxtV3Ht.js} +1 -1
  38. package/dist/ui/assets/{local-llm-OBHKAcNH.js → local-llm-C62wy8Df.js} +2 -2
  39. package/dist/ui/assets/local-llm-CWREzZ3O.js +2 -0
  40. package/dist/ui/assets/main-Cj0dR__R.js +22 -0
  41. package/dist/ui/assets/main-cherry-DR23QV8d.js +1 -0
  42. package/dist/ui/assets/{mount-BrQpW9eO.js → mount-DOTTHKHC.js} +1 -1
  43. package/dist/ui/assets/{mount-Rb9VVKip.js → mount-DPQd6tzy.js} +2 -2
  44. package/dist/ui/assets/{mount-recovery-Cb-AXW35.js → mount-recovery-VYeNQaYC.js} +1 -1
  45. package/dist/ui/assets/navigation-watcher-DLdGNtAZ.js +1 -0
  46. package/dist/ui/assets/new-session-CSBZYMGL.js +2 -0
  47. package/dist/ui/assets/oauth-bootstrap-DexuY7VO.js +2 -0
  48. package/dist/ui/assets/oauth-service-NaEg6KHx.js +1 -0
  49. package/dist/ui/assets/{oauth-service-CUpgufjo.js → oauth-service-TDESX_tk.js} +1 -1
  50. package/dist/ui/assets/{onboarding-orchestrator-Dmh6rOJl.js → onboarding-orchestrator-D0go0maQ.js} +1 -1
  51. package/dist/ui/assets/{openai-codex-DY_L0KSA.js → openai-codex-CHbj2YKL.js} +1 -1
  52. package/dist/ui/assets/{openai-codex-84EHUcAD.js → openai-codex-CO0FHasF.js} +1 -1
  53. package/dist/ui/assets/{openrouter-z7GGvxCM.js → openrouter-581ltIhi.js} +1 -1
  54. package/dist/ui/assets/{openrouter-meLV8ehE.js → openrouter-mBQeNixz.js} +1 -1
  55. package/dist/ui/assets/{openrouter-oauth-DudFNSW4.js → openrouter-oauth-GybmBe0R.js} +1 -1
  56. package/dist/ui/assets/{openrouter-oauth-CblQ27-K.js → openrouter-oauth-TZF0LEyZ.js} +1 -1
  57. package/dist/ui/assets/{panel-rpc-handlers-DmiAyTiy.js → panel-rpc-handlers-CRRp4c_O.js} +2 -2
  58. package/dist/ui/assets/{panelize-shell-65i9Hq7n.js → panelize-shell-Cqfllxbd.js} +1 -1
  59. package/dist/ui/assets/{provider-BE0mTIGf.js → provider-1riqfMR-.js} +1 -1
  60. package/dist/ui/assets/provider-CSdxYAI8.js +2 -0
  61. package/dist/ui/assets/provider-settings-ZgbgciKR.js +1 -0
  62. package/dist/ui/assets/provider-store-access-D_fJtNHf.js +1 -0
  63. package/dist/ui/assets/provider-store-access-YJf60jWB.js +1 -0
  64. package/dist/ui/assets/{providers-BlPz5ou6.js → providers-BZF0GlsK.js} +1 -1
  65. package/dist/ui/assets/providers-DpEbKMV3.js +2 -0
  66. package/dist/ui/assets/{quick-llm-CcFoANd_.js → quick-llm-Bs6a9ohB.js} +1 -1
  67. package/dist/ui/assets/{recovery-screen-44Uu5Cgy.js → recovery-screen-GaJzi_nj.js} +1 -1
  68. package/dist/ui/assets/{redirect-uri-C_VlH29S.js → redirect-uri-LEkhAfJa.js} +1 -1
  69. package/dist/ui/assets/{remote-terminal-view-vsJYhJKi.js → remote-terminal-view-HlQtiCdZ.js} +1 -1
  70. package/dist/ui/assets/{run-BQu73khp.js → run-BBmtyuxB.js} +1 -1
  71. package/dist/ui/assets/{secret-env-Hwyj0iR1.js → secret-env-CvkpMxjz.js} +1 -1
  72. package/dist/ui/assets/secrets-bridge-client-H8-Z1RVR.js +1 -0
  73. package/dist/ui/assets/{setup-feature-flags-remote-ITlSmr_i.js → setup-feature-flags-remote-CAAIusTL.js} +1 -1
  74. package/dist/ui/assets/sidecar-repair-CEmls84u.js +1 -0
  75. package/dist/ui/assets/{skills-B0o8gPTv.js → skills-C1BCxtxJ.js} +2 -2
  76. package/dist/ui/assets/slicc-version-CE2qd08F.js +1 -0
  77. package/dist/ui/assets/state-Cf1Y6pFo.js +42 -0
  78. package/dist/ui/assets/{store-C3RMRz9d.js → store-C5WIQl6U.js} +1 -1
  79. package/dist/ui/assets/{store-CzQ9Fvfr.js → store-DrDjrRj2.js} +1 -1
  80. package/dist/ui/assets/{sudo-CPH7ANoV.js → sudo-CCTcrBIJ.js} +1 -1
  81. package/dist/ui/assets/{sync-dialog-vSEl3KxP.js → sync-dialog-BRwkEszT.js} +1 -1
  82. package/dist/ui/assets/tool-ui-DCY2mIe9.js +1 -0
  83. package/dist/ui/assets/tray-leader-CHHSfFEB.js +1 -0
  84. package/dist/ui/assets/{tray-leave-runtime-3_wlFPFU.js → tray-leave-runtime-OxVT1X8O.js} +1 -1
  85. package/dist/ui/assets/tray-runtime-config-CjsIUSv2.js +1 -0
  86. package/dist/ui/assets/tray-runtime-config-CluPgaPA.js +1 -0
  87. package/dist/ui/assets/{tray-sidecar-BIcoXTJN.js → tray-sidecar-Bnp-I8VZ.js} +1 -1
  88. package/dist/ui/assets/tray-url-config-Cx0gvYq6.js +1 -0
  89. package/dist/ui/assets/{upgrade-detection-TsOPChOa.js → upgrade-detection-B-ic_s-w.js} +1 -1
  90. package/dist/ui/assets/{voice-reply-O_Z2C0eg.js → voice-reply-vHjs6Lwz.js} +1 -1
  91. package/dist/ui/assets/{wc-attach-DM5yRZRS.js → wc-attach-D1Wbe7BQ.js} +2 -2
  92. package/dist/ui/assets/wc-extension-K69BtExa.js +2 -0
  93. package/dist/ui/assets/{wc-float-label-Bmp3gmHN.js → wc-float-label-BLvU2814.js} +1 -1
  94. package/dist/ui/assets/wc-floatbar-online-WxVLXUuL.js +1 -0
  95. package/dist/ui/assets/wc-follower-MBwg6NpZ.js +17 -0
  96. package/dist/ui/assets/{wc-follower-oauth-D15d_vbh.js → wc-follower-oauth-DL2btuX4.js} +1 -1
  97. package/dist/ui/assets/{wc-live-CiwhsK8i.js → wc-live-D9C2qb2I.js} +6 -6
  98. package/dist/ui/assets/wc-nav-CUf1Z_Tr.js +2 -0
  99. package/dist/ui/assets/{wc-onboarding-DUBWYyMl.js → wc-onboarding-BOIXS806.js} +2 -2
  100. package/dist/ui/assets/{wc-permissions-CCJrTH49.js → wc-permissions-BxpV8lGq.js} +2 -2
  101. package/dist/ui/assets/{wc-placeholder-CPMV2eO3.js → wc-placeholder-CUfZIfzI.js} +3 -3
  102. package/dist/ui/assets/{wc-settings-M8e_JWQh.js → wc-settings-DhhxNWv_.js} +3 -3
  103. package/dist/ui/assets/{wc-shell-WlrdsROD.js → wc-shell-BU2i4AQi.js} +3 -3
  104. package/dist/ui/assets/{wc-shortcut-config-BftmZXGf.js → wc-shortcut-config-CtIiNVQ9.js} +1 -1
  105. package/dist/ui/assets/{wc-sprinkles-DhXJLTUO.js → wc-sprinkles-C9wtNI-h.js} +2 -2
  106. package/dist/ui/assets/wc-transcript-export-By3cf4BN.js +2 -0
  107. package/dist/ui/assets/{wc-tray-BdgbNPhM.js → wc-tray-BLqE4RP_.js} +4 -4
  108. package/dist/ui/assets/welcome-detection-e5PqkJPl.js +1 -0
  109. package/dist/ui/assets/{xai-grok-CVEtAfJK.js → xai-grok-B-Ekm4Mp.js} +1 -1
  110. package/dist/ui/assets/{xai-grok-DH1oX2E5.js → xai-grok-CHr7urYe.js} +1 -1
  111. package/dist/ui/index.html +6 -5
  112. package/dist/ui/packages/webapp/index.html +6 -5
  113. package/package.json +5 -4
  114. package/dist/ui/assets/fs-BsqtoiKD.js +0 -2
  115. package/dist/ui/assets/github-DGUqMidV.js +0 -1
  116. package/dist/ui/assets/github-DqsEulTB.js +0 -2
  117. package/dist/ui/assets/intercepted-oauth-BIKnTjZm.js +0 -1
  118. package/dist/ui/assets/lick-ws-bridge-1UPwiSVX.js +0 -1
  119. package/dist/ui/assets/local-llm-Cjzjpqa1.js +0 -2
  120. package/dist/ui/assets/logger-DQgFbfwx.js +0 -1
  121. package/dist/ui/assets/main-BK-7ArIz.js +0 -22
  122. package/dist/ui/assets/main-cherry-C6fqCnLL.js +0 -1
  123. package/dist/ui/assets/navigation-watcher-DrWMx-B4.js +0 -1
  124. package/dist/ui/assets/new-session-CF4YpiQ9.js +0 -2
  125. package/dist/ui/assets/oauth-bootstrap-YFOy1SIX.js +0 -2
  126. package/dist/ui/assets/oauth-service-DJuzPXsg.js +0 -1
  127. package/dist/ui/assets/provider-BLbTGk-_.js +0 -2
  128. package/dist/ui/assets/provider-settings-Dq-yRgMh.js +0 -1
  129. package/dist/ui/assets/provider-store-access-CJdYrcvf.js +0 -1
  130. package/dist/ui/assets/provider-store-access-NHOQWINx.js +0 -1
  131. package/dist/ui/assets/providers-B3OPYf2o.js +0 -2
  132. package/dist/ui/assets/secrets-bridge-client-CHZomqvU.js +0 -1
  133. package/dist/ui/assets/sidecar-repair-Ddcz9Mvv.js +0 -1
  134. package/dist/ui/assets/slicc-version-BrPYMXS9.js +0 -1
  135. package/dist/ui/assets/state-BSTmV4yO.js +0 -42
  136. package/dist/ui/assets/tray-leader-B_FxjW0d.js +0 -1
  137. package/dist/ui/assets/tray-runtime-config-Bpo7AZhY.js +0 -1
  138. package/dist/ui/assets/tray-runtime-config-Dv3NVv5v.js +0 -1
  139. package/dist/ui/assets/wc-extension-Dg5dOqTK.js +0 -2
  140. package/dist/ui/assets/wc-floatbar-online-B8ug4UwE.js +0 -1
  141. package/dist/ui/assets/wc-follower-G03aUmAn.js +0 -17
  142. package/dist/ui/assets/wc-nav-D8Bi3zRA.js +0 -2
  143. package/dist/ui/assets/wc-transcript-export-DjpmBvLP.js +0 -2
  144. package/dist/ui/assets/welcome-detection-0SaDZUV0.js +0 -1
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/readline-BOCWRKSR.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/xterm-B5LH8GIb.css"])))=>i.map(i=>d[i]);
2
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";import"./tool-ui-DfXu6quJ.js";import{t as n}from"./permissions-surface-registry-CilCRwhh.js";import"./picker-approval-D89YhXsA.js";import{a as r}from"./mount-picker-popup-C4q1Q3pK.js";import{r as i,t as a}from"./hid-device-registry-B2R-0rNt.js";import"./browser-DGwroBSO.js";import{a as o,n as s}from"./serial-port-registry-CCqklAEr.js";import"./serial-picker-Cfjtv7AL.js";import"./hid-picker-BcXVbHb2.js";import{i as c,t as l}from"./usb-device-registry-CRsCisej.js";import"./usb-picker-D-B9HZ67.js";import{t as u}from"./terminal-session-client-ADzaWGFd.js";function d(e,t){let n=[],r=new Map,i=new Set;for(let a=0;a<e.length;a++){let o=e[a];o.startsWith(`-`)?t.has(o)?r.set(o,e[++a]??``):i.add(o):n.push(o)}return{positionals:n,flags:r,bools:i}}new TextDecoder(`utf-8`,{fatal:!1}),new TextEncoder;var f=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function p(e){return d(e,f)}function m(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function h(e){let t={};return e.has(`--vid`)&&(t.usbVendorId=m(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=m(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}`${s}${s}`;var g=new Set([`--port`,`--baud`,`--vid`,`--pid`]),_=115200;function v(e){return d(e,g)}`${_}`;var y=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function b(e){return d(e,y)}function x(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function S(e){let t={};return e.has(`--vid`)&&(t.vendorId=x(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=x(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=x(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=x(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}`${a}`;var C=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function w(e){return d(e,C)}function T(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function E(e){let t={};return e.has(`--vid`)&&(t.vendorId=T(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=T(e.get(`--pid`),`pid`)),e.has(`--class`)&&(t.classCode=T(e.get(`--class`),`class`)),e.has(`--subclass`)&&(t.subclassCode=T(e.get(`--subclass`),`subclass`)),e.has(`--protocol`)&&(t.protocolCode=T(e.get(`--protocol`),`protocol`)),e.has(`--serial`)&&(t.serialNumber=e.get(`--serial`)),Object.keys(t).length>0?[t]:[]}`${l}`;var D={background:`#141414`,foreground:`#f2f2f2`,cursor:`#3562ff`,cursorAccent:`#141414`,selectionBackground:`#3562ff40`,selectionForeground:`#ffffff`,black:`#1a1a1a`,red:`#e34850`,green:`#2d9d78`,yellow:`#e68619`,blue:`#3562ff`,magenta:`#a962e8`,cyan:`#2db9be`,white:`#f2f2f2`,brightBlack:`#5a5a5a`,brightRed:`#e34850`,brightGreen:`#2d9d78`,brightYellow:`#e68619`,brightBlue:`#4a75ff`,brightMagenta:`#a962e8`,brightCyan:`#2db9be`,brightWhite:`#ffffff`},O={background:`#f0f0f0`,foreground:`#1a1a1a`,cursor:`#2b54db`,cursorAccent:`#f0f0f0`,selectionBackground:`#2b54db30`,selectionForeground:`#000000`,black:`#1a1a1a`,red:`#d73220`,green:`#268e6c`,yellow:`#d17a00`,blue:`#2b54db`,magenta:`#8839ef`,cyan:`#1a9088`,white:`#e8e8e8`,brightBlack:`#6e6e6e`,brightRed:`#d73220`,brightGreen:`#268e6c`,brightYellow:`#d17a00`,brightBlue:`#1e44c4`,brightMagenta:`#8839ef`,brightCyan:`#1a9088`,brightWhite:`#ffffff`},k=`\x1B[34m/\x1B[0m \x1B[90m$\x1B[0m `,A=class{options;client;terminal=null;fitAddon=null;terminalHost=null;previewHost=null;previewUrls=[];hasPreview=!1;previewStateListener=null;resizeObserver=null;themeObserver=null;readline=null;disposed=!1;abortPromptLoop=null;programmaticResolve=null;isExecuting=!1;suppressOutput=!1;tabBusy=!1;constructor(e){this.options=e;let t=e.sid??`panel-terminal-${Date.now()}`;this.client=new u({client:e.client,sid:t,onEvent:e=>this.handleEvent(e)})}async mount(n){let{Terminal:r}=await t(async()=>{let{Terminal:e}=await import(`./xterm-C3BHN0de.js`);return{Terminal:e}},[]),{FitAddon:i}=await t(async()=>{let{FitAddon:e}=await import(`./addon-fit-DIOBYJe3.js`);return{FitAddon:e}},[]),{Readline:a}=await t(async()=>{let{Readline:t}=await import(`./readline-BOCWRKSR.js`).then(t=>e(t.default,1));return{Readline:t}},__vite__mapDeps([0,1]));await t(()=>Promise.resolve({}),__vite__mapDeps([2]));let o=!document.documentElement.classList.contains(`theme-light`);this.terminal=new r({cursorBlink:!0,fontSize:11,fontFamily:`'Source Code Pro', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace`,theme:o?D:O,convertEol:!0}),this.themeObserver=new MutationObserver(()=>{if(!this.terminal)return;let e=document.documentElement.classList.contains(`theme-light`);this.terminal.options.theme=e?O:D}),this.themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),this.fitAddon=new i,this.terminal.loadAddon(this.fitAddon),n.replaceChildren(),this.terminalHost=document.createElement(`div`),this.terminalHost.className=`terminal-panel__terminal-host`,n.appendChild(this.terminalHost),this.previewHost=document.createElement(`div`),this.previewHost.className=`terminal-panel__preview`,n.appendChild(this.previewHost),this.terminal.open(this.terminalHost),this.fitAddon.fit(),this.resizeObserver=new ResizeObserver(()=>this.refit()),this.resizeObserver.observe(this.terminalHost),this.readline=new a,this.neutralizeReadlineHistoryPersistence(),this.terminal.loadAddon(this.readline),this.readline.setCtrlCHandler(()=>this.signalInterruptDuringExec()),this.setupInput(),this.terminal.writeln(`\x1B[1mslicc\x1B[0m \x1B[90mshell (kernel)\x1B[0m`),this.terminal.writeln(`\x1B[90mType "help" for available commands.\x1B[0m
2
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";import{t as n}from"./permissions-surface-registry-CilCRwhh.js";import"./picker-approval-D89YhXsA.js";import{a as r}from"./mount-picker-popup-C4q1Q3pK.js";import{r as i,t as a}from"./hid-device-registry-B2R-0rNt.js";import"./browser-DGwroBSO.js";import{a as o,n as s}from"./serial-port-registry-CCqklAEr.js";import"./serial-picker-Cfjtv7AL.js";import"./hid-picker-BcXVbHb2.js";import{i as c,t as l}from"./usb-device-registry-CRsCisej.js";import"./usb-picker-D-B9HZ67.js";import{t as u}from"./terminal-session-client-ADzaWGFd.js";function d(e,t){let n=[],r=new Map,i=new Set;for(let a=0;a<e.length;a++){let o=e[a];o.startsWith(`-`)?t.has(o)?r.set(o,e[++a]??``):i.add(o):n.push(o)}return{positionals:n,flags:r,bools:i}}new TextDecoder(`utf-8`,{fatal:!1}),new TextEncoder;var f=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function p(e){return d(e,f)}function m(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function h(e){let t={};return e.has(`--vid`)&&(t.usbVendorId=m(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=m(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}`${s}${s}`;var g=new Set([`--port`,`--baud`,`--vid`,`--pid`]),_=115200;function v(e){return d(e,g)}`${_}`;var y=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function b(e){return d(e,y)}function x(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function S(e){let t={};return e.has(`--vid`)&&(t.vendorId=x(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=x(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=x(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=x(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}`${a}`;var C=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function w(e){return d(e,C)}function T(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function E(e){let t={};return e.has(`--vid`)&&(t.vendorId=T(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=T(e.get(`--pid`),`pid`)),e.has(`--class`)&&(t.classCode=T(e.get(`--class`),`class`)),e.has(`--subclass`)&&(t.subclassCode=T(e.get(`--subclass`),`subclass`)),e.has(`--protocol`)&&(t.protocolCode=T(e.get(`--protocol`),`protocol`)),e.has(`--serial`)&&(t.serialNumber=e.get(`--serial`)),Object.keys(t).length>0?[t]:[]}`${l}`;var D={background:`#141414`,foreground:`#f2f2f2`,cursor:`#3562ff`,cursorAccent:`#141414`,selectionBackground:`#3562ff40`,selectionForeground:`#ffffff`,black:`#1a1a1a`,red:`#e34850`,green:`#2d9d78`,yellow:`#e68619`,blue:`#3562ff`,magenta:`#a962e8`,cyan:`#2db9be`,white:`#f2f2f2`,brightBlack:`#5a5a5a`,brightRed:`#e34850`,brightGreen:`#2d9d78`,brightYellow:`#e68619`,brightBlue:`#4a75ff`,brightMagenta:`#a962e8`,brightCyan:`#2db9be`,brightWhite:`#ffffff`},O={background:`#f0f0f0`,foreground:`#1a1a1a`,cursor:`#2b54db`,cursorAccent:`#f0f0f0`,selectionBackground:`#2b54db30`,selectionForeground:`#000000`,black:`#1a1a1a`,red:`#d73220`,green:`#268e6c`,yellow:`#d17a00`,blue:`#2b54db`,magenta:`#8839ef`,cyan:`#1a9088`,white:`#e8e8e8`,brightBlack:`#6e6e6e`,brightRed:`#d73220`,brightGreen:`#268e6c`,brightYellow:`#d17a00`,brightBlue:`#1e44c4`,brightMagenta:`#8839ef`,brightCyan:`#1a9088`,brightWhite:`#ffffff`},k=`\x1B[34m/\x1B[0m \x1B[90m$\x1B[0m `,A=class{options;client;terminal=null;fitAddon=null;terminalHost=null;previewHost=null;previewUrls=[];hasPreview=!1;previewStateListener=null;resizeObserver=null;themeObserver=null;readline=null;disposed=!1;abortPromptLoop=null;programmaticResolve=null;isExecuting=!1;suppressOutput=!1;tabBusy=!1;constructor(e){this.options=e;let t=e.sid??`panel-terminal-${Date.now()}`;this.client=new u({client:e.client,sid:t,onEvent:e=>this.handleEvent(e)})}async mount(n){let{Terminal:r}=await t(async()=>{let{Terminal:e}=await import(`./xterm-C3BHN0de.js`);return{Terminal:e}},[]),{FitAddon:i}=await t(async()=>{let{FitAddon:e}=await import(`./addon-fit-DIOBYJe3.js`);return{FitAddon:e}},[]),{Readline:a}=await t(async()=>{let{Readline:t}=await import(`./readline-BOCWRKSR.js`).then(t=>e(t.default,1));return{Readline:t}},__vite__mapDeps([0,1]));await t(()=>Promise.resolve({}),__vite__mapDeps([2]));let o=!document.documentElement.classList.contains(`theme-light`);this.terminal=new r({cursorBlink:!0,fontSize:11,fontFamily:`'Source Code Pro', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace`,theme:o?D:O,convertEol:!0}),this.themeObserver=new MutationObserver(()=>{if(!this.terminal)return;let e=document.documentElement.classList.contains(`theme-light`);this.terminal.options.theme=e?O:D}),this.themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),this.fitAddon=new i,this.terminal.loadAddon(this.fitAddon),n.replaceChildren(),this.terminalHost=document.createElement(`div`),this.terminalHost.className=`terminal-panel__terminal-host`,n.appendChild(this.terminalHost),this.previewHost=document.createElement(`div`),this.previewHost.className=`terminal-panel__preview`,n.appendChild(this.previewHost),this.terminal.open(this.terminalHost),this.fitAddon.fit(),this.resizeObserver=new ResizeObserver(()=>this.refit()),this.resizeObserver.observe(this.terminalHost),this.readline=new a,this.neutralizeReadlineHistoryPersistence(),this.terminal.loadAddon(this.readline),this.readline.setCtrlCHandler(()=>this.signalInterruptDuringExec()),this.setupInput(),this.terminal.writeln(`\x1B[1mslicc\x1B[0m \x1B[90mshell (kernel)\x1B[0m`),this.terminal.writeln(`\x1B[90mType "help" for available commands.\x1B[0m
3
3
  `),await this.client.open({cwd:this.options.cwd,env:this.options.env}),this.runPromptLoop()}refit(){this.fitAddon?.fit()}clearTerminal(){this.terminal?.clear()}async executeCommandInTerminal(e){let t=e.trim();if(!t)return{stdout:``,stderr:``,exitCode:0};if(!this.terminal||!this.readline)return this.client.exec(t);if(this.isExecuting||this.programmaticResolve||this.readline.getLine().length>0)return{stdout:``,stderr:`terminal is busy; finish current input first
4
4
  `,exitCode:1};let n=new Promise(e=>{this.programmaticResolve=e});return this.readline.updateLine(t),this.terminal.input(`\r`),n}setPreviewStateListener(e){this.previewStateListener=e,e?.(this.hasPreview)}dispose(){this.disposed=!0,this.abortPromptLoop?.(Error(`terminal disposed`)),this.abortPromptLoop=null,this.clearMediaPreview(),this.themeObserver?.disconnect(),this.themeObserver=null,this.resizeObserver?.disconnect(),this.resizeObserver=null,this.terminal?.dispose(),this.terminal=null,this.readline=null,this.fitAddon=null,this.terminalHost=null,this.previewHost=null,this.client.close(),this.client.dispose()}renderMediaPreview(e){if(!this.previewHost)return;let t=Uint8Array.from(atob(e.data),e=>e.charCodeAt(0)),n=URL.createObjectURL(new Blob([t],{type:e.mediaType}));this.previewUrls.push(n);let r=document.createElement(`div`);r.className=`terminal-panel__preview-item`;let i=document.createElement(`div`);i.className=`terminal-panel__preview-label`;let a=e.path.split(`/`).pop()??e.path;if(i.textContent=`${a} · ${e.mediaType}`,r.appendChild(i),e.mediaType.startsWith(`video/`)){let e=document.createElement(`video`);e.className=`terminal-panel__preview-media`,e.controls=!0,e.autoplay=!0,e.loop=!0,e.muted=!0,e.playsInline=!0,e.src=n,e.addEventListener(`loadedmetadata`,()=>this.refit(),{once:!0}),r.appendChild(e)}else{let e=document.createElement(`img`);e.className=`terminal-panel__preview-media`,e.alt=a,e.src=n,e.addEventListener(`load`,()=>this.refit(),{once:!0}),r.appendChild(e)}this.previewHost.appendChild(r),this.previewHost.classList.add(`terminal-panel__preview--visible`),this.hasPreview=!0,this.previewStateListener?.(!0)}clearMediaPreview(){for(let e of this.previewUrls)URL.revokeObjectURL(e);this.previewUrls=[],this.previewHost&&(this.previewHost.replaceChildren(),this.previewHost.classList.remove(`terminal-panel__preview--visible`)),this.hasPreview=!1,this.previewStateListener?.(!1)}async runPromptLoop(){for(;!this.disposed&&this.readline&&this.terminal;){let e;try{e=await this.readNextLine()}catch{break}finally{this.abortPromptLoop=null}let t=this.programmaticResolve!==null,n=await this.processLine(e,t);this.programmaticResolve&&=(this.programmaticResolve(n),null)}}readNextLine(){let e=this.terminal,t=this.readline;if(!e||!t)return Promise.reject(Error(`terminal not mounted`));let n=new Promise((e,t)=>{this.abortPromptLoop=t}),r=new Promise((n,r)=>{e.write(``,()=>{e.buffer.active.cursorX>0&&e.write(`\x1B[7m%\x1B[0m\r
5
5
  `),t.read(k).then(n,r)})});return Promise.race([r,n])}async processLine(e,t=!1){let n=e.trim();return!n||!t&&await this.tryRunPicker(n)?{stdout:``,stderr:``,exitCode:0}:this.runRemote(n)}async tryRunPicker(e){let t=j(e);if(t)return await this.runRemoteWithLocalPicker(e,t),!0;let n=N(e);if(n)return await this.runRemoteWithUsbPicker(n),!0;let r=P(e);if(r)return await this.runRemoteWithHidPicker(r),!0;let i=I(e);if(i)return await this.runRemoteWithSerialPicker(i),!0;let a=L(e);return a?(await this.runRemoteWithEsptoolPicker(e,a),!0):!1}setupInput(){this.terminal&&(this.terminal.onData(e=>{e===` `&&this.handleTab()}),this.terminal.attachCustomKeyEventHandler(e=>!(e.type===`keydown`&&e.key===`Enter`&&this.tabBusy)))}signalInterruptDuringExec(){this.isExecuting&&(this.terminal?.writeln(`^C`),this.client.signal(`SIGINT`))}neutralizeReadlineHistoryPersistence(){let e=this.readline.history;e&&(e.entries=[],e.cursor=-1,e.saveToLocalStorage=()=>void 0,e.restoreFromLocalStorage=()=>void 0)}reanchorReadline(){if(!this.terminal||!this.readline)return;let e=this.readline.state;e&&(e.getTty().anchorRow=this.terminal.buffer.active.cursorY,e.refresh())}async handleTab(){if(!(!this.terminal||!this.readline)&&!(this.isExecuting||this.tabBusy)){this.tabBusy=!0,this.isExecuting=!0;try{let{currentWord:e,isFirstWord:t,compgenCmd:n}=z(this.readline.getLine());this.suppressOutput=!0;let r=``;try{r=(await this.client.exec(n)).stdout}finally{this.suppressOutput=!1}let i=r.split(`
@@ -1,4 +1,4 @@
1
- import{t as e}from"./base64-DzRgusa4.js";import"./src-CcFD5QfS.js";import{p as t,v as n}from"./state-BSTmV4yO.js";const r=new TextEncoder;function i(e){return typeof e==`object`&&!!e&&`exitCode`in e}async function a(e,t){try{return await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}catch{return{message:`curlwright: cannot read ${t}`,exitCode:26}}}function o(e){let t=new Uint8Array(e.length),n=0;for(let r of e)r!==10&&r!==13&&(t[n++]=r);return t.subarray(0,n)}async function s(e,t){let n=t.indexOf(`=`),o=t.indexOf(`@`),s=o!==-1&&(n===-1||o<n),c=s?o:n,l=c===-1?``:t.slice(0,c),u=c===-1?t:t.slice(c+1),d=u;if(s){let t=await a(e,u);if(i(t))return t;d=new TextDecoder().decode(t)}let f=encodeURIComponent(d);return r.encode(l===``?f:`${l}=${f}`)}async function c(e,t){if(t.kind===`urlencode`)return s(e,t.value);if(t.kind===`raw`||!t.value.startsWith(`@`))return r.encode(t.value);let n=await a(e,t.value.slice(1));return i(n)||t.kind===`binary`?n:o(n)}function l(e){let t=Math.max(0,e.length-1),n=e.reduce((e,t)=>e+t.length,0)+t,r=new Uint8Array(n),i=0;return e.forEach((e,t)=>{t>0&&(r[i++]=38),r.set(e,i),i+=e.length}),r}function u(e){let t=e.split(`;`);return{value:t[0],options:t.slice(1)}}function d(e,t){for(let n of e){let e=n.trim();if(e.startsWith(`${t}=`))return e.slice(t.length+1)}return null}function f(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n===-1?t:t.slice(n+1)}async function p(e,t,n){let r=n.value.indexOf(`=`);if(r===-1)return{message:`curlwright: -F requires name=content (got "${n.value}")`,exitCode:2};let o=n.value.slice(0,r),s=n.value.slice(r+1);if(n.literal||s[0]!==`@`&&s[0]!==`<`)return t.append(o,s),null;let{value:c,options:l}=u(s.slice(1)),p=await a(e,c);if(i(p))return p;if(s[0]===`<`)return t.append(o,new TextDecoder().decode(p)),null;let m=d(l,`type`)??`application/octet-stream`,h=d(l,`filename`)??f(c);return t.append(o,new Blob([p],{type:m}),h),null}async function m(e,t,n){if(t.length>0&&n.length>0)return{message:`curlwright: -F cannot be combined with -d`,exitCode:2};if(n.length>0){let t=new FormData;for(let r of n){let n=await p(e,t,r);if(n)return n}return{bytes:null,form:t,contentType:null,accept:null}}if(t.length===0)return{bytes:null,form:null,contentType:null,accept:null};let r=[];for(let n of t){let t=await c(e,n);if(i(t))return t;r.push(t)}let a=t.some(e=>e.kind===`json`);return{bytes:l(r),form:null,contentType:a?`application/json`:`application/x-www-form-urlencoded`,accept:a?`application/json`:null}}const h=new Set([`request`,`header`,`data`,`data-raw`,`data-binary`,`data-ascii`,`data-urlencode`,`json`,`form`,`form-string`,`output`,`dump-header`,`write-out`,`max-time`,`user`,`referer`,`range`,`url`,`tab`,`frame`]),g=new Set([`silent`,`show-error`,`include`,`head`,`verbose`,`fail`,`location`,`remote-name`,`get`,`no-credentials`,`help`]),_={X:`request`,H:`header`,d:`data`,F:`form`,o:`output`,D:`dump-header`,w:`write-out`,m:`max-time`,u:`user`,e:`referer`,r:`range`},v={s:`silent`,S:`show-error`,i:`include`,I:`head`,v:`verbose`,f:`fail`,L:`location`,O:`remote-name`,G:`get`,h:`help`},y={cert:`client certificates are the browser profile's to present, not the shell's`,"cert-type":`client certificates are the browser profile's to present, not the shell's`,key:`client certificates are the browser profile's to present, not the shell's`,cacert:`the browser decides which roots to trust`,capath:`the browser decides which roots to trust`,insecure:`the browser enforces TLS verification; a page cannot opt out`,proxy:`proxying is configured on the browser, not per request`,"proxy-user":`proxying is configured on the browser, not per request`,interface:`a page cannot choose an outgoing interface`,"unix-socket":`a page cannot dial a unix socket`,resolve:`a page cannot override DNS resolution`,compressed:`always on — the browser negotiates encoding itself`,cookie:"the tab's own cookies are already sent; set one with `playwright-cli cookie-set`","cookie-jar":"cookies live in the browser profile; read them with `playwright-cli cookies`","limit-rate":`a page cannot throttle a fetch`,"continue-at":"a page fetch cannot resume; use `-H 'Range: bytes=N-'`","connect-timeout":"a page fetch cannot time the connect phase alone; use `--max-time`","http1.1":`the browser negotiates the HTTP version`,http2:`the browser negotiates the HTTP version`,http3:`the browser negotiates the HTTP version`,"no-buffer":`responses are read whole, never streamed to stdout`,"trace-ascii":"no wire trace exists; use `playwright-cli network-requests`",trace:"no wire trace exists; use `playwright-cli network-requests`","user-agent":`User-Agent is a forbidden header name for fetch(); the tab sets it`},b={k:`insecure`,x:`proxy`,b:`cookie`,c:`cookie-jar`,E:`cert`,C:`continue-at`,N:`no-buffer`,A:`user-agent`};function x(){return{url:null,requestMethod:null,headers:[],data:[],form:[],get:!1,output:null,remoteName:!1,include:!1,head:!1,dumpHeader:null,writeOut:null,silent:!1,showError:!1,verbose:!1,failOnError:!1,maxTimeSeconds:null,credentials:`include`,tab:null,frame:null,user:null,referer:null,range:null,help:!1}}function S(e,t){return{message:`curlwright: option ${e} is not supported in a page context — ${y[t]}`,exitCode:2}}function C(e){return{message:`curlwright: unknown option ${e}\nRun 'curlwright --help' for the supported flags.`,exitCode:2}}function ee(e){let t=e.indexOf(`:`);if(t===-1)return e.endsWith(`;`)?{name:e.slice(0,-1).trim(),value:``,unset:!1}:{name:e.trim(),value:``,unset:!1};let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();return{name:n,value:r,unset:r===``}}function w(e,t,n,r){switch(t){case`request`:return e.requestMethod=n,null;case`header`:return e.headers.push(ee(n??``)),null;case`data`:case`data-ascii`:return e.data.push({kind:`ascii`,value:n??``}),null;case`data-raw`:return e.data.push({kind:`raw`,value:n??``}),null;case`data-binary`:return e.data.push({kind:`binary`,value:n??``}),null;case`data-urlencode`:return e.data.push({kind:`urlencode`,value:n??``}),null;case`json`:return e.data.push({kind:`json`,value:n??``}),null;case`form`:return e.form.push({value:n??``,literal:!1}),null;case`form-string`:return e.form.push({value:n??``,literal:!0}),null;case`output`:return e.output=n,null;case`dump-header`:return e.dumpHeader=n,null;case`write-out`:return e.writeOut=n,null;case`max-time`:return T(e,n,r);case`user`:return e.user=n,null;case`referer`:return e.referer=n,null;case`range`:return e.range=n,null;case`url`:return e.url=n,null;case`tab`:return e.tab=n,null;case`frame`:return e.frame=n,null;default:return E(e,t,r)}}function T(e,t,n){let r=Number(t);return!Number.isFinite(r)||r<=0?{message:`curlwright: ${n} expects a positive number of seconds`,exitCode:2}:(e.maxTimeSeconds=r,null)}function E(e,t,n){switch(t){case`silent`:return e.silent=!0,null;case`show-error`:return e.showError=!0,null;case`include`:return e.include=!0,null;case`head`:return e.head=!0,null;case`verbose`:return e.verbose=!0,null;case`fail`:return e.failOnError=!0,null;case`location`:return null;case`remote-name`:return e.remoteName=!0,null;case`get`:return e.get=!0,null;case`no-credentials`:return e.credentials=`omit`,null;case`help`:return e.help=!0,null;default:return C(n)}}function te(e,t,n){let r=t[n],i=r.indexOf(`=`),a=(i===-1?r.slice(2):r.slice(2,i)).trim(),o=i===-1?null:r.slice(i+1);if(a in y)return S(`--${a}`,a);if(h.has(a)){let r=o??t[n+1];return r===void 0?{message:`curlwright: option --${a} requires a value`,exitCode:2}:w(e,a,r,`--${a}`)??{next:o===null?n+2:n+1}}return g.has(a)?w(e,a,null,`--${a}`)??{next:n+1}:C(`--${a}`)}function ne(e,t,n){let r=t[n];for(let i=1;i<r.length;i++){let a=r[i];if(a in b)return S(`-${a}`,b[a]);if(a in _){let o=r.slice(i+1),s=o===``?t[n+1]:o;return s===void 0?{message:`curlwright: option -${a} requires a value`,exitCode:2}:w(e,_[a],s,`-${a}`)??{next:o===``?n+2:n+1}}if(!(a in v))return C(`-${a}`);let o=w(e,v[a],null,`-${a}`);if(o)return o}return{next:n+1}}function re(e,t){return e.url!==null&&e.url!==t?{message:`curlwright: only one URL is supported (got "${e.url}" and "${t}")`,exitCode:2}:(e.url=t,null)}function ie(e){let t=x(),n=0,r=!1;for(;n<e.length;){let i=e[n];if(!r&&i===`--`){r=!0,n++;continue}if(!r&&i.startsWith(`--`)){let r=te(t,e,n);if(`message`in r)return r;n=r.next;continue}if(!r&&i.startsWith(`-`)&&i.length>1){let r=ne(t,e,n);if(`message`in r)return r;n=r.next;continue}let a=re(t,i);if(a)return a;n++}return t}function ae(e){return`message`in e}const D={"accept-charset":`the browser sets it`,"accept-encoding":`the browser negotiates encoding`,connection:`the browser owns the connection`,"content-length":`derived from the body`,cookie:"the tab's cookies are sent already; set one with `playwright-cli cookie-set`",cookie2:`the tab's cookies are sent already`,date:`the browser sets it`,dnt:`the browser sets it`,expect:`a page fetch cannot send it`,host:`derived from the URL`,"keep-alive":`the browser owns the connection`,origin:`the tab's own origin is sent automatically`,referer:`use -e/--referer, which sets the fetch referrer`,te:`the browser owns transfer encoding`,trailer:`the browser owns transfer encoding`,"transfer-encoding":`the browser owns transfer encoding`,upgrade:`the browser owns the connection`,via:`the browser sets it`};function oe(e){let t=e.toLowerCase();return t in D?D[t]:t.startsWith(`proxy-`)?`proxying is configured on the browser`:t.startsWith(`sec-`)?`Sec- headers are reserved for the browser`:null}function O(e){for(let t of e){let e=oe(t.name);if(e)return{message:`curlwright: header "${t.name}" cannot be set from a page — ${e}`,exitCode:2}}return null}function k(e,t){let n=t.toLowerCase();return Object.keys(e).some(e=>e.toLowerCase()===n)}function A(e){let t={},n=new Set;for(let r of e.headers)if(r.name!==``){if(r.unset){n.add(r.name.toLowerCase());continue}t[r.name]=r.value}return{headers:t,suppressed:n}}function j(e,t,n){return!k(e,n)&&!t.has(n)}function M(e){return/^[a-zA-Z]+=/.test(e)?e:`bytes=${e}`}function N(e,t,n,r){n.user!==null&&j(e,t,`authorization`)&&(e.Authorization=`Basic ${btoa(n.user)}`),n.range!==null&&j(e,t,`range`)&&(e.Range=M(n.range)),r.contentType&&j(e,t,`content-type`)&&(e[`Content-Type`]=r.contentType),r.accept&&j(e,t,`accept`)&&(e.Accept=r.accept)}function P(e,t){if(t===``)return e;let[n,r]=F(e);return`${n}${n.includes(`?`)?`&`:`?`}${t}${r}`}function F(e){let t=e.indexOf(`#`);return t===-1?[e,``]:[e.slice(0,t),e.slice(t)]}function I(e,t){return e.requestMethod?e.requestMethod:e.head?`HEAD`:t?`POST`:`GET`}function L(e,t,n){let r=e.toUpperCase();return!t||r!==`GET`&&r!==`HEAD`?null:{message:`curlwright: ${n.requestMethod?`-X ${n.requestMethod}`:`-I`} cannot carry a request body — a page fetch rejects a ${r} with one. Drop the data, or use -G to send it as a query string.`,exitCode:2}}function R(e,t){if(e.url===null)return{message:`curlwright: no URL specified`,exitCode:2};let{headers:n,suppressed:r}=A(e),i=e.get&&t.bytes!==null,a=i?{...t,bytes:null,contentType:null}:t;N(n,r,e,a);let o=i?P(e.url,new TextDecoder().decode(t.bytes??new Uint8Array)):e.url,s=a.bytes!==null||a.form!==null,c=I(e,s),l=L(c,s,e);if(l)return l;let u={method:c,headers:n,credentials:e.credentials,responseType:`binary`};return a.form?u.body=a.form:a.bytes&&(u.body=a.bytes),e.referer!==null&&(u.referrer=e.referer),e.maxTimeSeconds!==null&&(u.timeoutMs=e.maxTimeSeconds*1e3),{url:o,method:c,fetchOptions:u,uploadSize:a.bytes?.length??0}}function z(e){let t=e.fetchOptions.headers??{},n=[`> ${e.method} ${e.url}`];for(let[e,r]of Object.entries(t))n.push(`> ${e}: ${r}`);return n.push(`> `),`${n.join(`
1
+ import{t as e}from"./base64-DzRgusa4.js";import"./src-CcFD5QfS.js";import{p as t,v as n}from"./state-Cf1Y6pFo.js";const r=new TextEncoder;function i(e){return typeof e==`object`&&!!e&&`exitCode`in e}async function a(e,t){try{return await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}catch{return{message:`curlwright: cannot read ${t}`,exitCode:26}}}function o(e){let t=new Uint8Array(e.length),n=0;for(let r of e)r!==10&&r!==13&&(t[n++]=r);return t.subarray(0,n)}async function s(e,t){let n=t.indexOf(`=`),o=t.indexOf(`@`),s=o!==-1&&(n===-1||o<n),c=s?o:n,l=c===-1?``:t.slice(0,c),u=c===-1?t:t.slice(c+1),d=u;if(s){let t=await a(e,u);if(i(t))return t;d=new TextDecoder().decode(t)}let f=encodeURIComponent(d);return r.encode(l===``?f:`${l}=${f}`)}async function c(e,t){if(t.kind===`urlencode`)return s(e,t.value);if(t.kind===`raw`||!t.value.startsWith(`@`))return r.encode(t.value);let n=await a(e,t.value.slice(1));return i(n)||t.kind===`binary`?n:o(n)}function l(e){let t=Math.max(0,e.length-1),n=e.reduce((e,t)=>e+t.length,0)+t,r=new Uint8Array(n),i=0;return e.forEach((e,t)=>{t>0&&(r[i++]=38),r.set(e,i),i+=e.length}),r}function u(e){let t=e.split(`;`);return{value:t[0],options:t.slice(1)}}function d(e,t){for(let n of e){let e=n.trim();if(e.startsWith(`${t}=`))return e.slice(t.length+1)}return null}function f(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n===-1?t:t.slice(n+1)}async function p(e,t,n){let r=n.value.indexOf(`=`);if(r===-1)return{message:`curlwright: -F requires name=content (got "${n.value}")`,exitCode:2};let o=n.value.slice(0,r),s=n.value.slice(r+1);if(n.literal||s[0]!==`@`&&s[0]!==`<`)return t.append(o,s),null;let{value:c,options:l}=u(s.slice(1)),p=await a(e,c);if(i(p))return p;if(s[0]===`<`)return t.append(o,new TextDecoder().decode(p)),null;let m=d(l,`type`)??`application/octet-stream`,h=d(l,`filename`)??f(c);return t.append(o,new Blob([p],{type:m}),h),null}async function m(e,t,n){if(t.length>0&&n.length>0)return{message:`curlwright: -F cannot be combined with -d`,exitCode:2};if(n.length>0){let t=new FormData;for(let r of n){let n=await p(e,t,r);if(n)return n}return{bytes:null,form:t,contentType:null,accept:null}}if(t.length===0)return{bytes:null,form:null,contentType:null,accept:null};let r=[];for(let n of t){let t=await c(e,n);if(i(t))return t;r.push(t)}let a=t.some(e=>e.kind===`json`);return{bytes:l(r),form:null,contentType:a?`application/json`:`application/x-www-form-urlencoded`,accept:a?`application/json`:null}}const h=new Set([`request`,`header`,`data`,`data-raw`,`data-binary`,`data-ascii`,`data-urlencode`,`json`,`form`,`form-string`,`output`,`dump-header`,`write-out`,`max-time`,`user`,`referer`,`range`,`url`,`tab`,`frame`]),g=new Set([`silent`,`show-error`,`include`,`head`,`verbose`,`fail`,`location`,`remote-name`,`get`,`no-credentials`,`help`]),_={X:`request`,H:`header`,d:`data`,F:`form`,o:`output`,D:`dump-header`,w:`write-out`,m:`max-time`,u:`user`,e:`referer`,r:`range`},v={s:`silent`,S:`show-error`,i:`include`,I:`head`,v:`verbose`,f:`fail`,L:`location`,O:`remote-name`,G:`get`,h:`help`},y={cert:`client certificates are the browser profile's to present, not the shell's`,"cert-type":`client certificates are the browser profile's to present, not the shell's`,key:`client certificates are the browser profile's to present, not the shell's`,cacert:`the browser decides which roots to trust`,capath:`the browser decides which roots to trust`,insecure:`the browser enforces TLS verification; a page cannot opt out`,proxy:`proxying is configured on the browser, not per request`,"proxy-user":`proxying is configured on the browser, not per request`,interface:`a page cannot choose an outgoing interface`,"unix-socket":`a page cannot dial a unix socket`,resolve:`a page cannot override DNS resolution`,compressed:`always on — the browser negotiates encoding itself`,cookie:"the tab's own cookies are already sent; set one with `playwright-cli cookie-set`","cookie-jar":"cookies live in the browser profile; read them with `playwright-cli cookies`","limit-rate":`a page cannot throttle a fetch`,"continue-at":"a page fetch cannot resume; use `-H 'Range: bytes=N-'`","connect-timeout":"a page fetch cannot time the connect phase alone; use `--max-time`","http1.1":`the browser negotiates the HTTP version`,http2:`the browser negotiates the HTTP version`,http3:`the browser negotiates the HTTP version`,"no-buffer":`responses are read whole, never streamed to stdout`,"trace-ascii":"no wire trace exists; use `playwright-cli network-requests`",trace:"no wire trace exists; use `playwright-cli network-requests`","user-agent":`User-Agent is a forbidden header name for fetch(); the tab sets it`},b={k:`insecure`,x:`proxy`,b:`cookie`,c:`cookie-jar`,E:`cert`,C:`continue-at`,N:`no-buffer`,A:`user-agent`};function x(){return{url:null,requestMethod:null,headers:[],data:[],form:[],get:!1,output:null,remoteName:!1,include:!1,head:!1,dumpHeader:null,writeOut:null,silent:!1,showError:!1,verbose:!1,failOnError:!1,maxTimeSeconds:null,credentials:`include`,tab:null,frame:null,user:null,referer:null,range:null,help:!1}}function S(e,t){return{message:`curlwright: option ${e} is not supported in a page context — ${y[t]}`,exitCode:2}}function C(e){return{message:`curlwright: unknown option ${e}\nRun 'curlwright --help' for the supported flags.`,exitCode:2}}function ee(e){let t=e.indexOf(`:`);if(t===-1)return e.endsWith(`;`)?{name:e.slice(0,-1).trim(),value:``,unset:!1}:{name:e.trim(),value:``,unset:!1};let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();return{name:n,value:r,unset:r===``}}function w(e,t,n,r){switch(t){case`request`:return e.requestMethod=n,null;case`header`:return e.headers.push(ee(n??``)),null;case`data`:case`data-ascii`:return e.data.push({kind:`ascii`,value:n??``}),null;case`data-raw`:return e.data.push({kind:`raw`,value:n??``}),null;case`data-binary`:return e.data.push({kind:`binary`,value:n??``}),null;case`data-urlencode`:return e.data.push({kind:`urlencode`,value:n??``}),null;case`json`:return e.data.push({kind:`json`,value:n??``}),null;case`form`:return e.form.push({value:n??``,literal:!1}),null;case`form-string`:return e.form.push({value:n??``,literal:!0}),null;case`output`:return e.output=n,null;case`dump-header`:return e.dumpHeader=n,null;case`write-out`:return e.writeOut=n,null;case`max-time`:return T(e,n,r);case`user`:return e.user=n,null;case`referer`:return e.referer=n,null;case`range`:return e.range=n,null;case`url`:return e.url=n,null;case`tab`:return e.tab=n,null;case`frame`:return e.frame=n,null;default:return E(e,t,r)}}function T(e,t,n){let r=Number(t);return!Number.isFinite(r)||r<=0?{message:`curlwright: ${n} expects a positive number of seconds`,exitCode:2}:(e.maxTimeSeconds=r,null)}function E(e,t,n){switch(t){case`silent`:return e.silent=!0,null;case`show-error`:return e.showError=!0,null;case`include`:return e.include=!0,null;case`head`:return e.head=!0,null;case`verbose`:return e.verbose=!0,null;case`fail`:return e.failOnError=!0,null;case`location`:return null;case`remote-name`:return e.remoteName=!0,null;case`get`:return e.get=!0,null;case`no-credentials`:return e.credentials=`omit`,null;case`help`:return e.help=!0,null;default:return C(n)}}function te(e,t,n){let r=t[n],i=r.indexOf(`=`),a=(i===-1?r.slice(2):r.slice(2,i)).trim(),o=i===-1?null:r.slice(i+1);if(a in y)return S(`--${a}`,a);if(h.has(a)){let r=o??t[n+1];return r===void 0?{message:`curlwright: option --${a} requires a value`,exitCode:2}:w(e,a,r,`--${a}`)??{next:o===null?n+2:n+1}}return g.has(a)?w(e,a,null,`--${a}`)??{next:n+1}:C(`--${a}`)}function ne(e,t,n){let r=t[n];for(let i=1;i<r.length;i++){let a=r[i];if(a in b)return S(`-${a}`,b[a]);if(a in _){let o=r.slice(i+1),s=o===``?t[n+1]:o;return s===void 0?{message:`curlwright: option -${a} requires a value`,exitCode:2}:w(e,_[a],s,`-${a}`)??{next:o===``?n+2:n+1}}if(!(a in v))return C(`-${a}`);let o=w(e,v[a],null,`-${a}`);if(o)return o}return{next:n+1}}function re(e,t){return e.url!==null&&e.url!==t?{message:`curlwright: only one URL is supported (got "${e.url}" and "${t}")`,exitCode:2}:(e.url=t,null)}function ie(e){let t=x(),n=0,r=!1;for(;n<e.length;){let i=e[n];if(!r&&i===`--`){r=!0,n++;continue}if(!r&&i.startsWith(`--`)){let r=te(t,e,n);if(`message`in r)return r;n=r.next;continue}if(!r&&i.startsWith(`-`)&&i.length>1){let r=ne(t,e,n);if(`message`in r)return r;n=r.next;continue}let a=re(t,i);if(a)return a;n++}return t}function ae(e){return`message`in e}const D={"accept-charset":`the browser sets it`,"accept-encoding":`the browser negotiates encoding`,connection:`the browser owns the connection`,"content-length":`derived from the body`,cookie:"the tab's cookies are sent already; set one with `playwright-cli cookie-set`",cookie2:`the tab's cookies are sent already`,date:`the browser sets it`,dnt:`the browser sets it`,expect:`a page fetch cannot send it`,host:`derived from the URL`,"keep-alive":`the browser owns the connection`,origin:`the tab's own origin is sent automatically`,referer:`use -e/--referer, which sets the fetch referrer`,te:`the browser owns transfer encoding`,trailer:`the browser owns transfer encoding`,"transfer-encoding":`the browser owns transfer encoding`,upgrade:`the browser owns the connection`,via:`the browser sets it`};function oe(e){let t=e.toLowerCase();return t in D?D[t]:t.startsWith(`proxy-`)?`proxying is configured on the browser`:t.startsWith(`sec-`)?`Sec- headers are reserved for the browser`:null}function O(e){for(let t of e){let e=oe(t.name);if(e)return{message:`curlwright: header "${t.name}" cannot be set from a page — ${e}`,exitCode:2}}return null}function k(e,t){let n=t.toLowerCase();return Object.keys(e).some(e=>e.toLowerCase()===n)}function A(e){let t={},n=new Set;for(let r of e.headers)if(r.name!==``){if(r.unset){n.add(r.name.toLowerCase());continue}t[r.name]=r.value}return{headers:t,suppressed:n}}function j(e,t,n){return!k(e,n)&&!t.has(n)}function M(e){return/^[a-zA-Z]+=/.test(e)?e:`bytes=${e}`}function N(e,t,n,r){n.user!==null&&j(e,t,`authorization`)&&(e.Authorization=`Basic ${btoa(n.user)}`),n.range!==null&&j(e,t,`range`)&&(e.Range=M(n.range)),r.contentType&&j(e,t,`content-type`)&&(e[`Content-Type`]=r.contentType),r.accept&&j(e,t,`accept`)&&(e.Accept=r.accept)}function P(e,t){if(t===``)return e;let[n,r]=F(e);return`${n}${n.includes(`?`)?`&`:`?`}${t}${r}`}function F(e){let t=e.indexOf(`#`);return t===-1?[e,``]:[e.slice(0,t),e.slice(t)]}function I(e,t){return e.requestMethod?e.requestMethod:e.head?`HEAD`:t?`POST`:`GET`}function L(e,t,n){let r=e.toUpperCase();return!t||r!==`GET`&&r!==`HEAD`?null:{message:`curlwright: ${n.requestMethod?`-X ${n.requestMethod}`:`-I`} cannot carry a request body — a page fetch rejects a ${r} with one. Drop the data, or use -G to send it as a query string.`,exitCode:2}}function R(e,t){if(e.url===null)return{message:`curlwright: no URL specified`,exitCode:2};let{headers:n,suppressed:r}=A(e),i=e.get&&t.bytes!==null,a=i?{...t,bytes:null,contentType:null}:t;N(n,r,e,a);let o=i?P(e.url,new TextDecoder().decode(t.bytes??new Uint8Array)):e.url,s=a.bytes!==null||a.form!==null,c=I(e,s),l=L(c,s,e);if(l)return l;let u={method:c,headers:n,credentials:e.credentials,responseType:`binary`};return a.form?u.body=a.form:a.bytes&&(u.body=a.bytes),e.referer!==null&&(u.referrer=e.referer),e.maxTimeSeconds!==null&&(u.timeoutMs=e.maxTimeSeconds*1e3),{url:o,method:c,fetchOptions:u,uploadSize:a.bytes?.length??0}}function z(e){let t=e.fetchOptions.headers??{},n=[`> ${e.method} ${e.url}`];for(let[e,r]of Object.entries(t))n.push(`> ${e}: ${r}`);return n.push(`> `),`${n.join(`
2
2
  `)}\n`}function B(e,t){let n=[`< ${e}`];for(let[e,r]of Object.entries(t))n.push(`< ${e}: ${r}`);return n.push(`< `),`${n.join(`
3
3
  `)}\n`}function V(t,n){return typeof t==`string`?n===`base64`?e(t):new TextEncoder().encode(t):new Uint8Array}function H(e,t){return t?`HTTP/1.1 ${e} ${t}`:`HTTP/1.1 ${e}`}function U(e,t,n){let r=[H(e,t)];for(let[e,t]of Object.entries(n))r.push(`${e}: ${t}`);return`${r.join(`\r
4
4
  `)}\r\n\r\n`}function W(e){if(e.includes(0))return!0;try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e),!1}catch{return!0}}function G(e){let t;try{t=new URL(e).pathname}catch{t=e.split(`?`)[0]}return t.replace(/\/+$/,``).split(`/`).pop()||null}function K(e,t,n){return new TextEncoder().encode(U(e,t,n)).length}function q(e){try{return new URL(e).origin}catch{return null}}function J(e){return e.map(e=>` --tab=${e.targetId} ${e.url}`).join(`
@@ -1 +1 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import"./proxied-fetch-CFWkfPNA.js";import{i as t,t as n}from"./api-endpoint-GRCyib6X.js";import{n as r}from"./float-topology-BYb7rxY5.js";import"./secret-topology-BE7Eyd3P.js";import{t as i}from"./secrets-bridge-client-CHZomqvU.js";function a(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}var o=e(`secret-env`);function s(e){let t={},n;for(let r of e)!r?.name||!r?.maskedValue||(r.name===`oauth.github.token`&&(n=r.maskedValue),a(r.name)&&(t[r.name]=r.maskedValue));return n&&(t.GITHUB_TOKEN===void 0&&(t.GITHUB_TOKEN=n),t.GH_TOKEN===void 0&&(t.GH_TOKEN=n)),t}async function c(){let e=r();if(e===`extension-direct`)return new Promise(e=>{chrome.runtime.sendMessage({type:`secrets.list-masked-entries`},t=>{let n=s(t?.entries??[]);Object.keys(n).length>0&&o.info(`Loaded masked secrets into shell env from SW`,{count:Object.keys(n).length}),e(n)})});if(e===`extension-delegate`)try{let e=s((await i(`secrets.list-masked-entries`))?.entries??[]);return Object.keys(e).length>0&&o.info(`Loaded masked secrets into shell env from bridge`,{count:Object.keys(e).length}),e}catch(e){return o.debug(`Bridge list-masked-entries failed`,{error:e instanceof Error?e.message:String(e)}),{}}if(e===`connect`)return{};try{let e=await fetch(t(`/api/secrets/masked`),{headers:n()});if(!e.ok)return o.warn(`Failed to fetch masked secrets`,{status:e.status}),{};let r=await e.json();if(!Array.isArray(r)||r.length===0)return{};let i=s(r);return Object.keys(i).length>0&&o.info(`Loaded masked secrets into shell env`,{count:Object.keys(i).length}),i}catch(e){return o.debug(`Could not fetch masked secrets (server may be unavailable)`,{error:e instanceof Error?e.message:String(e)}),{}}}export{c as fetchSecretEnvVars};
1
+ import{t as e}from"./logger-DDBAeTLF.js";import"./proxied-fetch-CFWkfPNA.js";import{i as t,t as n}from"./api-endpoint-GRCyib6X.js";import{n as r}from"./float-topology-BYb7rxY5.js";import"./secret-topology-BE7Eyd3P.js";import{n as i}from"./secrets-bridge-client-H8-Z1RVR.js";function a(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}var o=e(`secret-env`);function s(e){let t={},n;for(let r of e)!r?.name||!r?.maskedValue||(r.name===`oauth.github.token`&&(n=r.maskedValue),a(r.name)&&(t[r.name]=r.maskedValue));return n&&(t.GITHUB_TOKEN===void 0&&(t.GITHUB_TOKEN=n),t.GH_TOKEN===void 0&&(t.GH_TOKEN=n)),t}async function c(){let e=r();if(e===`extension-direct`)return new Promise(e=>{chrome.runtime.sendMessage({type:`secrets.list-masked-entries`},t=>{let n=s(t?.entries??[]);Object.keys(n).length>0&&o.info(`Loaded masked secrets into shell env from SW`,{count:Object.keys(n).length}),e(n)})});if(e===`extension-delegate`)try{let e=s((await i(`secrets.list-masked-entries`))?.entries??[]);return Object.keys(e).length>0&&o.info(`Loaded masked secrets into shell env from bridge`,{count:Object.keys(e).length}),e}catch(e){return o.debug(`Bridge list-masked-entries failed`,{error:e instanceof Error?e.message:String(e)}),{}}if(e===`connect`)return{};try{let e=await fetch(t(`/api/secrets/masked`),{headers:n()});if(!e.ok)return o.warn(`Failed to fetch masked secrets`,{status:e.status}),{};let r=await e.json();if(!Array.isArray(r)||r.length===0)return{};let i=s(r);return Object.keys(i).length>0&&o.info(`Loaded masked secrets into shell env`,{count:Object.keys(i).length}),i}catch(e){return o.debug(`Could not fetch masked secrets (server may be unavailable)`,{error:e instanceof Error?e.message:String(e)}),{}}}export{c as fetchSecretEnvVars};
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./port-bridge-client-Cti-DmEY.js";var n=t({portName:`secrets.crud`,panelRpcOp:`secrets-bridge`,timeoutMs:1e4,onUnavailable:`resolve-undefined`,makeError:e=>Error(e),logNamespace:`secrets-bridge`,toPortMessage:({type:e,payload:t})=>({type:e,...t}),toPanelRpcPayload:({type:e,payload:t})=>({type:e,payload:t})});function r(e,t){return n({type:e,payload:t})}var i=e({callSecretsBridge:()=>r});export{r as n,i as t};
@@ -1 +1 @@
1
- import{n as e}from"./feature-flags-ByMXaIc4.js";import{h as t,n,t as r}from"./tray-runtime-config-Bpo7AZhY.js";import{l as i,u as a}from"./main-BK-7ArIz.js";var o=3e3;async function s(t,n){let r=i(n.storage);try{let i=new URL(`/api/flags`,`${n.workerBaseUrl.replace(/\/+$/,``)}/`);i.searchParams.set(`float`,t);let s=await c(i.toString(),n.fetchImpl??fetch,n.timeoutMs??o);if(!s)return;a(r,t,s),e(t,s)}catch{}}async function c(e,t,n){let r=new AbortController,i;try{let a=new Promise(e=>{i=setTimeout(()=>{r.abort(),e(null)},n)}),o=t(e,{cache:`no-store`,headers:{Accept:`application/json`},signal:r.signal}).then(async e=>e.ok?l(await e.json()):null).catch(()=>null);return await Promise.race([o,a])}catch{return null}finally{i!==void 0&&clearTimeout(i)}}function l(e){if(!u(e))return null;let t=e.flags;return!u(t)||Object.values(t).some(e=>typeof e!=`string`)?null:t}function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function d(e,t){return s(e,{workerBaseUrl:f(t),storage:t.storage})}function f(e){let i=p(e.storage),a=t(e.envBaseUrl??null);if(i)return i;if(a)return a;if(!e.isDev)try{let t=new URL(e.locationHref);if(t.protocol===`http:`||t.protocol===`https:`)return t.origin}catch{}return e.isDev?n:r}function p(e){try{return t(e?.getItem(`slicc.trayWorkerBaseUrl`)??null)}catch{return null}}export{d as refreshFeatureFlagsForPage};
1
+ import{n as e}from"./feature-flags-ByMXaIc4.js";import{h as t,n,t as r}from"./tray-runtime-config-CluPgaPA.js";import{l as i,u as a}from"./main-Cj0dR__R.js";var o=3e3;async function s(t,n){let r=i(n.storage);try{let i=new URL(`/api/flags`,`${n.workerBaseUrl.replace(/\/+$/,``)}/`);i.searchParams.set(`float`,t);let s=await c(i.toString(),n.fetchImpl??fetch,n.timeoutMs??o);if(!s)return;a(r,t,s),e(t,s)}catch{}}async function c(e,t,n){let r=new AbortController,i;try{let a=new Promise(e=>{i=setTimeout(()=>{r.abort(),e(null)},n)}),o=t(e,{cache:`no-store`,headers:{Accept:`application/json`},signal:r.signal}).then(async e=>e.ok?l(await e.json()):null).catch(()=>null);return await Promise.race([o,a])}catch{return null}finally{i!==void 0&&clearTimeout(i)}}function l(e){if(!u(e))return null;let t=e.flags;return!u(t)||Object.values(t).some(e=>typeof e!=`string`)?null:t}function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function d(e,t){return s(e,{workerBaseUrl:f(t),storage:t.storage})}function f(e){let i=p(e.storage),a=t(e.envBaseUrl??null);if(i)return i;if(a)return a;if(!e.isDev)try{let t=new URL(e.locationHref);if(t.protocol===`http:`||t.protocol===`https:`)return t.origin}catch{}return e.isDev?n:r}function p(e){try{return t(e?.getItem(`slicc.trayWorkerBaseUrl`)??null)}catch{return null}}export{d as refreshFeatureFlagsForPage};
@@ -0,0 +1 @@
1
+ import{a as e,r as t}from"./fs-CsuRlf5M.js";export{t as repairOpfsMetadataSidecar,e as resolveWithSidecarRepair};
@@ -1,5 +1,5 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{n,r}from"./path-utils-DNJG-zQf.js";import{t as i}from"./types-idfTVsM8.js";import"./fs-DKRiXKHo.js";import{d as a,i as o,m as s,n as c}from"./sudoers-KgJRnN4b.js";const l=t(`sudo:timeout`),u={"user-timeout":`no response from the user within 5 minutes. This is a TIMEOUT, not a denial — the user was not there to answer. Do not retry this action; report that the approval request went unanswered and wait for the user before trying again.`,"cone-timeout":`no response from the cone agent within 5 minutes. This is a TIMEOUT, not a denial — no human was ever prompted, the cone simply never resolved the request. Do not retry this action; report that the escalation went unanswered and continue with work that does not need it.`};function d(e){return u[e]}function f(e=`user-timeout`){return{decision:`deny`,reason:e}}function p(e,t){let n=t.decision===`deny`?t.reason:void 0;return n?`${e}: approval request timed out — ${d(n)}`:`${e}: approval denied`}function m(e,t={}){let n=t.timeoutMs??3e5;if(!Number.isFinite(n)||n<=0)return e;let r=t.setTimer??((e,t)=>setTimeout(e,t)),i=t.clearTimer??(e=>clearTimeout(e));return{requestApproval(t,a){return new Promise(o=>{let s=new AbortController,c=()=>s.abort();a?.signal?.addEventListener(`abort`,c,{once:!0});let u=!1,d=e=>{u=!0,a?.signal?.removeEventListener(`abort`,c),o(e)},p=r(()=>{u||(l.warn(`sudo approval timed out — failing closed`,{kind:t.kind,detail:t.detail,timeoutMs:n}),s.abort(),d(f(`user-timeout`)))},n),m=e=>{if(u){l.warn(`sudo decision arrived after timeout — discarded`,{kind:t.kind,detail:t.detail,decision:e.decision});return}i(p),d(e)};e.requestApproval(t,{signal:s.signal}).then(m,e=>{l.warn(`sudo broker threw — denying`,{error:e instanceof Error?e.message:String(e)}),m({decision:`deny`})})})}}}const h=t(`sudo:fs`),g=Symbol.for(`slicc.fs.monkeypatchUnsafe`),_=`${c}/granted`;function v(e){return p(`sudo`,e)}const y=[`readFile`,`readTextFile`,`readDir`,`exists`,`stat`],b=[`writeFile`],x=[`mkdir`,`rm`];async function S(e,t,n,a){let o=s(a);if(!o)return;let l=t(),u={pattern:o,nopasswd:!0,regex:r(o)};(n===`read`?l.read:l.write).push(u);let d=`NOPASSWD ${n===`read`?`Read`:`Write`} ${o}\n`;try{await e.mkdir(c,{recursive:!0});let t=``;try{t=await e.readFile(_,{encoding:`utf-8`})}catch(e){if(!(e instanceof i&&e.code===`ENOENT`))throw e}let n=t.length>0&&!t.endsWith(`
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{n,r}from"./path-utils-DNJG-zQf.js";import{t as i}from"./types-idfTVsM8.js";import"./fs-DJCrdGnR.js";import{d as a,i as o,m as s,n as c}from"./sudoers-KgJRnN4b.js";const l=t(`sudo:timeout`),u={"user-timeout":`no response from the user within 5 minutes. This is a TIMEOUT, not a denial — the user was not there to answer. Do not retry this action; report that the approval request went unanswered and wait for the user before trying again.`,"cone-timeout":`no response from the cone agent within 5 minutes. This is a TIMEOUT, not a denial — no human was ever prompted, the cone simply never resolved the request. Do not retry this action; report that the escalation went unanswered and continue with work that does not need it.`};function d(e){return u[e]}function f(e=`user-timeout`){return{decision:`deny`,reason:e}}function p(e,t){let n=t.decision===`deny`?t.reason:void 0;return n?`${e}: approval request timed out — ${d(n)}`:`${e}: approval denied`}function m(e,t={}){let n=t.timeoutMs??3e5;if(!Number.isFinite(n)||n<=0)return e;let r=t.setTimer??((e,t)=>setTimeout(e,t)),i=t.clearTimer??(e=>clearTimeout(e));return{requestApproval(t,a){return new Promise(o=>{let s=new AbortController,c=()=>s.abort();a?.signal?.addEventListener(`abort`,c,{once:!0});let u=!1,d=e=>{u=!0,a?.signal?.removeEventListener(`abort`,c),o(e)},p=r(()=>{u||(l.warn(`sudo approval timed out — failing closed`,{kind:t.kind,detail:t.detail,timeoutMs:n}),s.abort(),d(f(`user-timeout`)))},n),m=e=>{if(u){l.warn(`sudo decision arrived after timeout — discarded`,{kind:t.kind,detail:t.detail,decision:e.decision});return}i(p),d(e)};e.requestApproval(t,{signal:s.signal}).then(m,e=>{l.warn(`sudo broker threw — denying`,{error:e instanceof Error?e.message:String(e)}),m({decision:`deny`})})})}}}const h=t(`sudo:fs`),g=Symbol.for(`slicc.fs.monkeypatchUnsafe`),_=`${c}/granted`;function v(e){return p(`sudo`,e)}const y=[`readFile`,`readTextFile`,`readDir`,`exists`,`stat`],b=[`writeFile`],x=[`mkdir`,`rm`];async function S(e,t,n,a){let o=s(a);if(!o)return;let l=t(),u={pattern:o,nopasswd:!0,regex:r(o)};(n===`read`?l.read:l.write).push(u);let d=`NOPASSWD ${n===`read`?`Read`:`Write`} ${o}\n`;try{await e.mkdir(c,{recursive:!0});let t=``;try{t=await e.readFile(_,{encoding:`utf-8`})}catch(e){if(!(e instanceof i&&e.code===`ENOENT`))throw e}let n=t.length>0&&!t.endsWith(`
2
2
  `)?`
3
- `:``;await e.writeFile(_,t+n+d)}catch(e){h.warn(`Failed to persist NOPASSWD grant; effective in-session only`,{error:e instanceof Error?e.message:String(e)})}}function C(e,t){let{broker:r,getPolicy:s}=t,c=t.defaultDisposition??`allow`,l=t.onGrant?t.onGrant:(t,n)=>S(e,s,t,n);async function u(e,t,u=!1){let d=n(t),f=a(s(),e,d,{isContentWrite:u});if((e===`write`?o(f,c):f)!==`require-approval`)return;let p=e,m=await r.requestApproval({kind:p,detail:d});if(m.decision===`deny`)throw new i(`EACCES`,v(m),d);m.decision===`always`&&await l(e,m.pattern?.trim()||d)}function d(e){return a(s(),`read`,n(e))!==`require-approval`}let f=t=>typeof e[t]==`function`,p={};for(let t of y)f(t)&&(p[t]=async(n,...r)=>(await u(`read`,n),e[t](n,...r)));for(let t of b)f(t)&&(p[t]=async(n,...r)=>(await u(`write`,n,!0),e[t](n,...r)));for(let t of x)f(t)&&(p[t]=async(n,...r)=>(await u(`write`,n),e[t](n,...r)));return f(`walk`)&&(p.walk=async function*(t,...n){await u(`read`,t),yield*e.walk(t,...n)}),f(`symlink`)&&(p.symlink=async(t,n)=>(await u(`write`,n),e.symlink(t,n))),f(`rename`)&&(p.rename=async(t,n)=>(await u(`read`,t),await u(`write`,t),await u(`write`,n),e.rename(t,n))),f(`copyFile`)&&(p.copyFile=async(t,n)=>(await u(`read`,t),await u(`write`,n),e.copyFile(t,n))),f(`mount`)&&(p.mount=async(t,...n)=>(await u(`write`,t),e.mount(t,...n))),f(`unmount`)&&(p.unmount=async t=>(await u(`write`,t),e.unmount(t))),f(`refreshMount`)&&(p.refreshMount=async(t,...n)=>(await u(`write`,t),e.refreshMount(t,...n))),f(`statSync`)&&(p.statSync=t=>d(t)?e.statSync(t):null),f(`readDirSync`)&&(p.readDirSync=t=>d(t)?e.readDirSync(t):null),new Proxy(e,{get(e,t,n){if(t===g)return!0;if(typeof t==`string`&&t in p)return p[t];let r=Reflect.get(e,t,n);return typeof r==`function`?r.bind(e):r}})}const w=`/workspace/skills`,T=`SKILL.md`,E=t(`skills-discovery`),D=[`native`,`agents`,`claude`,`marketplace`,`plugin`],O=new Map([[`.agents`,`agents`],[`.claude`,`claude`]]),k=new Set([`.git`,`.slicc`,`node_modules`]),A=2e4,j=[`mkdir`,`mount`,`rename`,`rm`,`unmount`,`writeFile`],M=new WeakMap,N=new WeakSet;async function P(e,t=w){let n=await z(e,t),r=await I(e),i=await F(e);return[...D.flatMap(e=>(e===`native`?n:e===`plugin`?i:r.filter(t=>t.source===e)).sort((e,t)=>e.path.localeCompare(t.path)))]}async function F(e){let t;try{let n=await e.readTextFile(`/workspace/.plugins/plugins.json`),r=JSON.parse(n);if(!r||typeof r!=`object`||!r.plugins)return[];t=Object.values(r.plugins).map(e=>e?.root).filter(e=>typeof e==`string`)}catch{return[]}let n=[];for(let r of t){let t=`${r}/skills`,i=await K(e,t);for(let r of i){if(r.type!==`directory`)continue;let i=`${t}/${r.name}`,a=`${i}/${T}`;await G(e,a)&&n.push({source:`plugin`,sourceRoot:t,path:i,skillFilePath:a})}}return n}async function I(e){if(L(e))return(await U(e)).map(e=>({...e}));W(e);let t=e,n=M.get(t);if(n)return n.map(e=>({...e}));let r=await U(e);return M.set(t,r),r.map(e=>({...e}))}function L(e){try{return e[g]===!0}catch{return!1}}function R(e,t){let n=new Map,r=new Map;for(let i of e){let e=t(i);if(!n.has(e)){n.set(e,i);continue}let a=r.get(e)??{name:e,winner:n.get(e),shadowed:[]};a.shadowed.push(i),r.set(e,a)}return{winners:Array.from(n.values()),collisions:Array.from(r.values())}}async function z(e,t){let n=await K(e,t),r=[];for(let i of n){if(i.type!==`directory`)continue;let n=`${t}/${i.name}`,a=`${n}/${T}`;await G(e,a)&&r.push({source:`native`,sourceRoot:t,path:n,skillFilePath:a})}return r}async function B(e,t){let n;try{n=await e.readTextFile(t)}catch{return[]}let r;try{r=JSON.parse(n)}catch{return[]}if(typeof r!=`object`||!r||!Array.isArray(r.plugins))return[];let i=t.replace(/\/[^/]+$/,``).replace(/\/.claude-plugin$/,``),a=[];for(let e of r.plugins){if(typeof e!=`object`||!e)continue;let t=e.source;if(typeof t!=`string`||t.startsWith(`/`)||t.split(`/`).includes(`..`))continue;let n=t.replace(/^\.\//,``).replace(/\/$/,``).replace(/^\.$/,``);a.push(n?`${i}/${n}`:i)}return a}async function V(e,t,n){let r=await B(e,`${t}/marketplace.json`),i=[];for(let t of r){let r=`${t}/skills`,a=await K(e,r);for(let t of a){if(t.type!==`directory`)continue;let a=`${r}/${t.name}`,o=`${a}/${T}`;!await G(e,o)||n.has(a)||(n.add(a),i.push({source:`marketplace`,sourceRoot:r,path:a,skillFilePath:o}))}}return i}async function H(e,t,n,r){let i=`${t}/skills`,a=await K(e,i),o=[];for(let t of a){if(t.type!==`directory`)continue;let a=`${i}/${t.name}`,s=`${a}/${T}`;!await G(e,s)||r.has(a)||(r.add(a),o.push({source:n,sourceRoot:i,path:a,skillFilePath:s}))}return o}async function U(e){let t=[],n=new Set,r=new Set([`/`]),i=[{path:`/`,depth:0}];for(let a=0;a<i.length;a+=1){if(a>=A){E.warn(`skills discovery: directory budget exhausted; walk truncated`,{budget:A});break}let{path:o,depth:s}=i[a],c=await K(e,o);for(let a of c){if(a.type!==`directory`||a.name===`.`||a.name===`..`)continue;let c=o===`/`?`/${a.name}`:`${o}/${a.name}`,l=O.get(a.name);if(l){let r=await H(e,c,l,n);t.push(...r)}if(a.name===`.claude-plugin`){let r=await V(e,c,n);t.push(...r);continue}!k.has(a.name)&&s<24&&!r.has(c)&&(r.add(c),i.push({path:c,depth:s+1}))}}return t}function W(e){if(L(e))return;let t=e;if(N.has(t))return;N.add(t);let n=e;for(let r of j){let i=n[r];if(typeof i!=`function`)continue;let a=i;try{n[r]=async(...n)=>{let r=await a.apply(e,n);return M.delete(t),r}}catch{}}}async function G(e,t){try{return await e.stat(t),!0}catch{return!1}}async function K(e,t){try{return[...await e.readDir(t)].sort((e,t)=>e.name.localeCompare(t.name))}catch{return[]}}async function q(e,t=`/workspace/skills`){let n=await P(e,t),r=[];for(let t of n){let n=t.path.split(`/`).pop()??t.path,i=``;if(t.skillFilePath)try{i=X(await e.readTextFile(t.skillFilePath))??``}catch{}r.push({name:n,source:t.source,sourceRoot:t.sourceRoot,path:t.path,skillFilePath:t.skillFilePath,description:i})}let{winners:i,collisions:a}=R(r,e=>e.name),o=new Map(a.map(e=>[e.winner.path,e.shadowed.map(e=>e.path)]));return i.map(e=>({...e,shadowedPaths:o.get(e.path)}))}async function J(e,t,n=`/workspace/skills`){return(await q(e,n)).find(e=>e.name===t)||null}async function Y(e,t,n=`/workspace/skills`){let r=await J(e,t,n);if(!r?.skillFilePath)return null;try{return await e.readTextFile(r.skillFilePath)}catch{return null}}function X(e){let t=e.replace(/^\uFEFF/,``).replace(/\r\n?/g,`
3
+ `:``;await e.writeFile(_,t+n+d)}catch(e){h.warn(`Failed to persist NOPASSWD grant; effective in-session only`,{error:e instanceof Error?e.message:String(e)})}}function C(e,t){let{broker:r,getPolicy:s}=t,c=t.defaultDisposition??`allow`,l=t.onGrant?t.onGrant:(t,n)=>S(e,s,t,n);async function u(e,t,u=!1){let d=n(t),f=a(s(),e,d,{isContentWrite:u});if((e===`write`?o(f,c):f)!==`require-approval`)return;let p=e,m=await r.requestApproval({kind:p,detail:d});if(m.decision===`deny`)throw new i(`EACCES`,v(m),d);m.decision===`always`&&await l(e,m.pattern?.trim()||d)}function d(e){return a(s(),`read`,n(e))!==`require-approval`}let f=t=>typeof e[t]==`function`,p={};for(let t of y)f(t)&&(p[t]=async(n,...r)=>(await u(`read`,n),e[t](n,...r)));for(let t of b)f(t)&&(p[t]=async(n,...r)=>(await u(`write`,n,!0),e[t](n,...r)));for(let t of x)f(t)&&(p[t]=async(n,...r)=>(await u(`write`,n),e[t](n,...r)));return f(`walk`)&&(p.walk=async function*(t,...n){await u(`read`,t),yield*e.walk(t,...n)}),f(`symlink`)&&(p.symlink=async(t,n)=>(await u(`write`,n),e.symlink(t,n))),f(`rename`)&&(p.rename=async(t,n)=>(await u(`read`,t),await u(`write`,t),await u(`write`,n),e.rename(t,n))),f(`copyFile`)&&(p.copyFile=async(t,n)=>(await u(`read`,t),await u(`write`,n),e.copyFile(t,n))),f(`mount`)&&(p.mount=async(t,...n)=>(await u(`write`,t),e.mount(t,...n))),f(`unmount`)&&(p.unmount=async t=>(await u(`write`,t),e.unmount(t))),f(`refreshMount`)&&(p.refreshMount=async(t,...n)=>(await u(`write`,t),e.refreshMount(t,...n))),f(`statSync`)&&(p.statSync=t=>d(t)?e.statSync(t):null),f(`readDirSync`)&&(p.readDirSync=t=>d(t)?e.readDirSync(t):null),new Proxy(e,{get(e,t,n){if(t===g)return!0;if(typeof t==`string`&&t in p)return p[t];let r=Reflect.get(e,t,n);return typeof r==`function`?r.bind(e):r}})}const w=`/workspace/skills`,T=`SKILL.md`,E=t(`skills-discovery`),D=[`native`,`agents`,`claude`,`marketplace`,`plugin`],O=new Map([[`.agents`,`agents`],[`.claude`,`claude`]]),k=new Set([`.git`,`.slicc`,`node_modules`]),A=2e4,j=[`mkdir`,`mount`,`rename`,`rm`,`unmount`,`writeFile`],M=new WeakMap,N=new WeakSet;async function P(e,t=w){let n=await z(e,t),r=await I(e),i=await F(e);return[...D.flatMap(e=>(e===`native`?n:e===`plugin`?i:r.filter(t=>t.source===e)).sort((e,t)=>e.path.localeCompare(t.path)))]}async function F(e){let t;try{let n=await e.readTextFile(`/workspace/.plugins/plugins.json`),r=JSON.parse(n);if(!r||typeof r!=`object`||!r.plugins)return[];t=Object.values(r.plugins).map(e=>e?.root).filter(e=>typeof e==`string`)}catch{return[]}let n=[];for(let r of t){let t=`${r}/skills`,i=await K(e,t);for(let r of i){if(r.type!==`directory`)continue;let i=`${t}/${r.name}`,a=`${i}/${T}`;await G(e,a)&&n.push({source:`plugin`,sourceRoot:t,path:i,skillFilePath:a})}}return n}async function I(e){if(L(e))return(await U(e)).map(e=>({...e}));W(e);let t=e,n=M.get(t);if(n)return n.map(e=>({...e}));let r=await U(e);return M.set(t,r),r.map(e=>({...e}))}function L(e){try{return e[g]===!0}catch{return!1}}function R(e,t){let n=new Map,r=new Map;for(let i of e){let e=t(i);if(!n.has(e)){n.set(e,i);continue}let a=r.get(e)??{name:e,winner:n.get(e),shadowed:[]};a.shadowed.push(i),r.set(e,a)}return{winners:Array.from(n.values()),collisions:Array.from(r.values())}}async function z(e,t){let n=await K(e,t),r=[];for(let i of n){if(i.type!==`directory`)continue;let n=`${t}/${i.name}`,a=`${n}/${T}`;await G(e,a)&&r.push({source:`native`,sourceRoot:t,path:n,skillFilePath:a})}return r}async function B(e,t){let n;try{n=await e.readTextFile(t)}catch{return[]}let r;try{r=JSON.parse(n)}catch{return[]}if(typeof r!=`object`||!r)return[];let i=r.plugins;if(!Array.isArray(i))return[];let a=t.replace(/\/[^/]+$/,``).replace(/\/.claude-plugin$/,``),o=[];for(let e of i){if(typeof e!=`object`||!e)continue;let t=e.source;if(typeof t!=`string`||t.startsWith(`/`)||t.split(`/`).includes(`..`))continue;let n=t.replace(/^\.\//,``).replace(/\/$/,``).replace(/^\.$/,``);o.push(n?`${a}/${n}`:a)}return o}async function V(e,t,n){let r=await B(e,`${t}/marketplace.json`),i=[];for(let t of r){let r=`${t}/skills`,a=await K(e,r);for(let t of a){if(t.type!==`directory`)continue;let a=`${r}/${t.name}`,o=`${a}/${T}`;!await G(e,o)||n.has(a)||(n.add(a),i.push({source:`marketplace`,sourceRoot:r,path:a,skillFilePath:o}))}}return i}async function H(e,t,n,r){let i=`${t}/skills`,a=await K(e,i),o=[];for(let t of a){if(t.type!==`directory`)continue;let a=`${i}/${t.name}`,s=`${a}/${T}`;!await G(e,s)||r.has(a)||(r.add(a),o.push({source:n,sourceRoot:i,path:a,skillFilePath:s}))}return o}async function U(e){let t=[],n=new Set,r=new Set([`/`]),i=[{path:`/`,depth:0}];for(let a=0;a<i.length;a+=1){if(a>=A){E.warn(`skills discovery: directory budget exhausted; walk truncated`,{budget:A});break}let{path:o,depth:s}=i[a],c=await K(e,o);for(let a of c){if(a.type!==`directory`||a.name===`.`||a.name===`..`)continue;let c=o===`/`?`/${a.name}`:`${o}/${a.name}`,l=O.get(a.name);if(l){let r=await H(e,c,l,n);t.push(...r)}if(a.name===`.claude-plugin`){let r=await V(e,c,n);t.push(...r);continue}!k.has(a.name)&&s<24&&!r.has(c)&&(r.add(c),i.push({path:c,depth:s+1}))}}return t}function W(e){if(L(e))return;let t=e;if(N.has(t))return;N.add(t);let n=e;for(let r of j){let i=n[r];if(typeof i==`function`)try{n[r]=async(...n)=>{let r=await i.apply(e,n);return M.delete(t),r}}catch{}}}async function G(e,t){try{return await e.stat(t),!0}catch{return!1}}async function K(e,t){try{return[...await e.readDir(t)].sort((e,t)=>e.name.localeCompare(t.name))}catch{return[]}}async function q(e,t=`/workspace/skills`){let n=await P(e,t),r=[];for(let t of n){let n=t.path.split(`/`).pop()??t.path,i=``;if(t.skillFilePath)try{i=X(await e.readTextFile(t.skillFilePath))??``}catch{}r.push({name:n,source:t.source,sourceRoot:t.sourceRoot,path:t.path,skillFilePath:t.skillFilePath,description:i})}let{winners:i,collisions:a}=R(r,e=>e.name),o=new Map(a.map(e=>[e.winner.path,e.shadowed.map(e=>e.path)]));return i.map(e=>({...e,shadowedPaths:o.get(e.path)}))}async function J(e,t,n=`/workspace/skills`){return(await q(e,n)).find(e=>e.name===t)||null}async function Y(e,t,n=`/workspace/skills`){let r=await J(e,t,n);if(!r?.skillFilePath)return null;try{return await e.readTextFile(r.skillFilePath)}catch{return null}}function X(e){let t=e.replace(/^\uFEFF/,``).replace(/\r\n?/g,`
4
4
  `).trimStart().match(/^---\s*\n([\s\S]*?)\n---/);if(!t)return null;for(let e of t[1].split(`
5
5
  `)){let t=e.match(/^description:\s*(.*)$/);if(t)return t[1].trim()}return null}var Z=e({MAX_SKILL_ARCHIVE_SIZE_BYTES:()=>MAX_SKILL_ARCHIVE_SIZE_BYTES,SKILLS_DIR:()=>SKILLS_DIR,SKILL_ARCHIVE_EXTENSION:()=>SKILL_ARCHIVE_EXTENSION,SKILL_FILE:()=>T,WORKSPACE_SKILLS_PATH:()=>w,discoverSkills:()=>q,getSkillInfo:()=>J,readSkillInstructions:()=>Y});export{p as a,C as i,q as n,f as o,_ as r,m as s,Z as t};
@@ -0,0 +1 @@
1
+ function e(){return{version:`6.110.3`,releasedAt:`2026-08-29T15:01:51Z`,buildId:`6.110.3-mteie2qz`}}let t=null;function n(e){t=e}function r(){return t}export{e as n,n as r,r as t};
@@ -0,0 +1,42 @@
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{n as t}from"./panel-rpc-BPwAqRch.js";import{t as n}from"./base64-DzRgusa4.js";import"./src-CcFD5QfS.js";import{t as r}from"./types-idfTVsM8.js";import"./fs-DJCrdGnR.js";function i(e){return e==null?[]:Array.isArray(e)?e:[e]}function a(e,t,n,r){var i,a=e[t],o=~r.string.indexOf(t)?n==null||n===!0?``:String(n):typeof n==`boolean`?n:~r.boolean.indexOf(t)?n===`false`?!1:n===`true`||(e._.push((i=+n,i*0==0?i:n)),!!n):(i=+n,i*0==0?i:n);e[t]=a==null?o:Array.isArray(a)?a.concat(o):[a,o]}function o(e,t){e||=[],t||={};var n,r,o,s,c,l={_:[]},u=0,d=0,f=0,p=e.length;let m=t.alias!==void 0,h=t.unknown!==void 0,g=t.default!==void 0;if(t.alias=t.alias||{},t.string=i(t.string),t.boolean=i(t.boolean),m)for(n in t.alias)for(r=t.alias[n]=i(t.alias[n]),u=0;u<r.length;u++)(t.alias[r[u]]=r.concat(n)).splice(u,1);for(u=t.boolean.length;u-->0;)for(r=t.alias[t.boolean[u]]||[],d=r.length;d-->0;)t.boolean.push(r[d]);for(u=t.string.length;u-->0;)for(r=t.alias[t.string[u]]||[],d=r.length;d-->0;)t.string.push(r[d]);if(g){for(n in t.default)if(s=typeof t.default[n],r=t.alias[n]=t.alias[n]||[],t[s]!==void 0)for(t[s].push(n),u=0;u<r.length;u++)t[s].push(r[u])}let _=h?Object.keys(t.alias):[];for(u=0;u<p;u++){if(o=e[u],o===`--`){l._=l._.concat(e.slice(++u));break}for(d=0;d<o.length&&o.charCodeAt(d)===45;d++);if(d===0)l._.push(o);else if(o.substring(d,d+3)===`no-`){if(s=o.substring(d+3),h&&!~_.indexOf(s))return t.unknown(o);l[s]=!1}else{for(f=d+1;f<o.length&&o.charCodeAt(f)!==61;f++);for(s=o.substring(d,f),c=o.substring(++f)||u+1===p||(``+e[u+1]).charCodeAt(0)===45||e[++u],r=d===2?[s]:s,f=0;f<r.length;f++){if(s=r[f],h&&!~_.indexOf(s))return t.unknown(`-`.repeat(d)+s);a(l,s,f+1<r.length||c,t)}}}if(g)for(n in t.default)l[n]===void 0&&(l[n]=t.default[n]);if(m)for(n in l)for(r=t.alias[n]||[];r.length>0;)l[r.shift()]=l[n];return l}function s(e,t){let n=[],r=new Map,i=new Set;for(let a=0;a<e.length;a++){let o=e[a];o.startsWith(`-`)?t.has(o)?r.set(o,e[++a]??``):i.add(o):n.push(o)}return{positionals:n,flags:r,bools:i}}function c(e){let t=new Set(e.string??[]),n=e.alias??{};for(let[e,r]of Object.entries(n)){let n=[e,...Array.isArray(r)?r:[r]];if(n.some(e=>t.has(e)))for(let e of n)t.add(e)}return t}const l=/^(--?)([^=]+)(=.*)?$/;function u(e){let t=new Set(e.string??[]);for(let n of e.boolean??[])t.add(n),t.add(`no-${n}`);for(let[n,r]of Object.entries(e.alias??{})){t.add(n);for(let e of Array.isArray(r)?r:[r])t.add(e)}return t}function d(e,t,n){let r=0;for(;r<e.length;r++){let i=e[r];if(!i.startsWith(`-`)||i===`-`)break;let a=l.exec(i);if(!a||!n.has(a[2]))break;!a[3]&&t.has(a[2])&&r+1<e.length&&r++}return r}function f(e,t){let n=[];for(let r=0;r<e.length;r++){let i=e[r],a=l.exec(i);a&&!a[3]&&t.has(a[2])&&r+1<e.length?(n.push(`${i}=${e[r+1]}`),r++):n.push(i)}return n}function p(e,t={}){let n=e,r=[];if(t[`--`]){let t=e.indexOf(`--`);t!==-1&&(n=e.slice(0,t),r=e.slice(t+1))}let i=c(t),a=n,s=[];if(t.stopEarly){let e=d(n,i,u(t));a=n.slice(0,e),s=n.slice(e)}let{_:l,...p}=o(f(a,i),{string:t.string?[...t.string]:void 0,boolean:t.boolean?[...t.boolean]:void 0,alias:t.alias,default:t.default}),m=t.stopEarly?s:l;return{_:m,positionals:m,flags:p,doubleDashRest:r}}function m(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode(...Array.from(e.subarray(r,r+n)));return btoa(t)}async function h(e){let t=[];for(let[n,r]of e.entries()){if(typeof r==`string`){t.push({name:n,value:r});continue}let e=new Uint8Array(await r.arrayBuffer());t.push({name:n,file:{data:m(e),filename:typeof r.name==`string`?r.name:`blob`,type:r.type||``}})}return{kind:`formdata`,entries:t}}async function g(e,t){let n=()=>Object.keys(t).some(e=>e.toLowerCase()===`content-type`);return typeof e==`string`?{body:e}:e instanceof URLSearchParams?(n()||(t[`Content-Type`]=`application/x-www-form-urlencoded;charset=UTF-8`),{body:e.toString()}):e instanceof Blob?{descriptor:{kind:`blob`,data:m(new Uint8Array(await e.arrayBuffer())),type:e.type||``}}:e instanceof ArrayBuffer?{descriptor:{kind:`bytes`,data:m(new Uint8Array(e))}}:ArrayBuffer.isView(e)?{descriptor:{kind:`bytes`,data:m(new Uint8Array(e.buffer,e.byteOffset,e.byteLength))}}:e instanceof FormData?{descriptor:await h(e)}:(n()||(t[`Content-Type`]=`application/json`),{body:JSON.stringify(e)})}function _(e){return e?`const __b64 = (s) => { const bin = atob(s); const n = bin.length; const u = new Uint8Array(n); for (let i = 0; i < n; i++) u[i] = bin.charCodeAt(i); return u; };const __body = `+JSON.stringify(e)+`;if (__body.kind === 'bytes') { __init.body = __b64(__body.data); }else if (__body.kind === 'blob') { __init.body = new Blob([__b64(__body.data)], { type: __body.type }); }else if (__body.kind === 'formdata') { const __fd = new FormData(); for (const e of __body.entries) { if (e.file) { __fd.append(e.name, new Blob([__b64(e.file.data)], { type: e.file.type }), e.file.filename); } else { __fd.append(e.name, e.value); } } __init.body = __fd; }`:``}function v(e){return`const h = {};r.headers.forEach((v, k) => { h[k] = v; });const ct = r.headers.get('content-type') || '';const __rt = `+JSON.stringify(e??null)+`;const __ctl = ct.toLowerCase();const __binPrefixes = ['image/','audio/','video/','application/octet-stream','application/pdf','application/protobuf','application/x-protobuf','application/wasm','application/zip'];const __isXml = __ctl.indexOf('+xml') !== -1 || __ctl.indexOf('application/xml') === 0 || __ctl.indexOf('text/xml') === 0;const __isBinary = __rt === 'binary' || (__rt !== 'text' && __rt !== 'json' && !__isXml && __binPrefixes.some((p) => __ctl.indexOf(p) === 0));const __meta = { ok: r.ok, status: r.status, statusText: r.statusText, url: r.url, redirected: !!r.redirected, headers: h };if (__isBinary) {const __u = new Uint8Array(await r.arrayBuffer());let __s = ''; const __cs = 0x8000;for (let __i = 0; __i < __u.length; __i += __cs) { __s += String.fromCharCode.apply(null, __u.subarray(__i, __i + __cs)); }return Object.assign(__meta, { body: btoa(__s), bodyEncoding: 'base64' });}const t = await r.text();let b;const __jsonWanted = __rt === 'json' || (__rt !== 'text' && ct.indexOf('application/json') !== -1);if (__jsonWanted) { if (!t) { b = null; } else { try { b = JSON.parse(t); } catch (e) { b = t; } } }else { b = t; }return Object.assign(__meta, { body: b });`}async function y(e,t={}){let n={},r=t.headers??{};for(let[e,t]of Object.entries(r))typeof t==`string`&&(n[e]=t);let i=typeof t.method==`string`?t.method:`GET`,a=t.credentials===`same-origin`||t.credentials===`omit`?t.credentials:`include`,o=t.body,{body:s,descriptor:c}=o==null?{}:await g(o,n),l={method:i,credentials:a,headers:n};s!==void 0&&(l.body=s),t.mode!==void 0&&(l.mode=t.mode),t.cache!==void 0&&(l.cache=t.cache),t.redirect!==void 0&&(l.redirect=t.redirect),t.referrer!==void 0&&(l.referrer=t.referrer),t.referrerPolicy!==void 0&&(l.referrerPolicy=t.referrerPolicy),t.integrity!==void 0&&(l.integrity=t.integrity),t.keepalive!==void 0&&(l.keepalive=t.keepalive);let u=_(c),d=v(t.responseType),f=typeof t.timeoutMs==`number`&&Number.isFinite(t.timeoutMs)&&t.timeoutMs>0?Math.round(t.timeoutMs):0,p=f>0?`__init.signal = AbortSignal.timeout(${f});`:``;return`(async () => {const __init = `+JSON.stringify(l)+`;`+p+u+`const r = await fetch(`+JSON.stringify(e)+`, __init);`+d+`})()`}const b=[`playwright-cli`,`playwright`,`puppeteer`],x=new WeakMap,S=e(`playwright`);function C(e,t){let n=x.get(e);n||(n=new WeakMap,x.set(e,n));let r=n.get(t);return r||(r={snapshots:new Map,appTabId:null,harRecorder:null,sessionDirsCreated:!1,teleportWatchers:new Map,consoleMessages:new Map,consoleCleanup:new Map,networkRequests:new Map,networkRequestIndex:new Map,networkCleanup:new Map,routes:new Map,routeCleanup:new Map,lastMousePosition:new Map},n.set(t,r)),r}function w(e){let t=e.match(/^(f[0-9]+)(e[0-9]+)$/);return t?{framePrefix:t[1],isIframe:!0}:{framePrefix:``,isIframe:!1}}const T=n,E=new Set([`click`,`dblclick`,`fill`,`type`,`press`,`goto`,`navigate`,`select`,`check`,`uncheck`,`drag`,`dialog-accept`,`dialog-dismiss`,`drop`]);function D(e){return e.toISOString().replace(/:/g,`-`)}function O(e){return e instanceof r||typeof e==`object`&&e&&`code`in e?e.code===`EEXIST`:e instanceof Error&&e.message.includes(`EEXIST`)}const k=`function(text) {
2
+ const el = this;
3
+ const tag = el.tagName;
4
+ const proto = tag === 'TEXTAREA' ? window.HTMLTextAreaElement.prototype : window.HTMLInputElement.prototype;
5
+ const nativeSetter = Object.getOwnPropertyDescriptor(proto, 'value')?.set;
6
+ if (nativeSetter) {
7
+ nativeSetter.call(el, text);
8
+ } else {
9
+ el.value = text;
10
+ }
11
+ el.dispatchEvent(new Event('input', { bubbles: true }));
12
+ el.dispatchEvent(new Event('change', { bubbles: true }));
13
+ }`,A=`function() {
14
+ const el = this;
15
+ if (el.isContentEditable) return el.textContent || '';
16
+ return el.value ?? '';
17
+ }`,j=`function() {
18
+ const el = this;
19
+ if (!(el instanceof HTMLElement)) return false;
20
+ el.focus();
21
+ const emitInput = () => el.dispatchEvent(new Event('input', { bubbles: true }));
22
+ if (el.isContentEditable) {
23
+ el.textContent = '';
24
+ const selection = window.getSelection();
25
+ if (selection) {
26
+ const range = document.createRange();
27
+ range.selectNodeContents(el);
28
+ range.collapse(false);
29
+ selection.removeAllRanges();
30
+ selection.addRange(range);
31
+ }
32
+ emitInput();
33
+ return true;
34
+ }
35
+ if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement || 'value' in el) {
36
+ el.value = '';
37
+ emitInput();
38
+ return true;
39
+ }
40
+ return false;
41
+ }`;async function M(e){let t=await e.evaluate(`JSON.stringify({ href: location.href, hostname: location.hostname, pathname: location.pathname })`);return JSON.parse(t)}const N={string:`tab.frame.filename.max-width.runtime.timeout.filter.output.start.return.teleport-start.teleport-return.teleport-runtime.domain.path.expires.method.depth.modifiers.sameSite.data.status.body.content-type.header.style`.split(`.`),boolean:[`boxes`,`clear`,`discover`,`foreground`,`fg`,`full-page`,`fullPage`,`hide`,`httpOnly`,`list`,`off`,`secure`,`static`,`submit`],alias:{foreground:`fg`,"full-page":`fullPage`}};function P(e){let t=p(e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e),N),n={};for(let[e,r]of Object.entries(t.flags)){let t=e===`_noiframes`?`no-iframes`:e;if(r===!0)n[t]=`true`;else if(r===!1)continue;else r!==void 0&&(n[t]=String(r))}return{positional:t.positionals,flags:n}}function F(e){let t=e.tab;return t?{targetId:t}:{error:`Error: --tab <targetId> is required. Run 'playwright-cli tab-list' to get tab IDs.
42
+ `}}async function I(e,t){let n=t.frame;if(!n)return null;let r=(await e.getFrameTree()).find(e=>e.frameId===n);if(r)return r;let i=t.tab??`<targetId>`;throw Error(`Unknown frame ID "${n}" for tab ${i}. Run 'playwright-cli frames --tab=${i}' to list frame IDs.`)}function L(){try{let e=globalThis.localStorage;return e?!!(e.getItem(`slicc.trayWorkerBaseUrl`)||e.getItem(`slicc.trayJoinUrl`)):!1}catch{return!1}}async function R(e){if(typeof e.listAllTargets!=`function`)return e.listPages();let n=await e.listAllTargets(),r=L()?t():null;if(!r)return n;try{let{targets:e}=await r.call(`list-remote-targets`,void 0,{timeoutMs:3e3}),t=new Set(n.map(e=>e.targetId));for(let r of e)t.has(r.targetId)||(t.add(r.targetId),n.push({targetId:r.targetId,title:r.title,url:r.url}))}catch(e){S.debug(`panel-rpc list-remote-targets failed`,{err:String(e)})}return n}async function z(e){try{return await R(e)}catch{return[]}}async function B(e,t,n){if(!(n instanceof Error?n.message:String(n)).includes(`No target with given id found`))return null;for(let n of await z(e))try{if((await e.withTab(n.targetId,async()=>e.getFrameTree())).some(e=>e.frameId===t))return`"${t}" is a frame ID, not a tab target ID. Use --tab=${n.targetId} --frame=${t}; run 'playwright-cli frames --tab=${n.targetId}' to list frame IDs.`}catch{}return null}export{I as _,k as a,s as b,D as c,C as d,O as f,F as g,w as h,N as i,B as l,P as m,j as n,A as o,R as p,b as r,T as s,E as t,M as u,y as v,p as y};
@@ -1 +1 @@
1
- import{t as e}from"./types-idfTVsM8.js";import{t}from"./global-db-DJXlpNui.js";const n=`/workspace/.plugins/plugins.json`;let r=null;async function i(e){if(e)return e;if(r&&r.dbName===`slicc-fs-global`)return r.instance;let{VirtualFS:n}=await import(`./fs-DKRiXKHo.js`).then(e=>e.t),i=await n.create({dbName:t});return r={instance:i,dbName:t},i}function a(){return{version:1,plugins:{}}}function o(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function s(e){if(!o(e))return null;let t=e;return typeof t.root==`string`?t:null}function c(e){if(!o(e))return a();let t=e,n=typeof t.version==`number`?t.version:1,r={};if(o(t.plugins))for(let[e,n]of Object.entries(t.plugins)){let t=s(n);t&&(r[e]=t)}return{version:n,plugins:r}}async function l(t){try{let e=await(await i(t)).readFile(n,{encoding:`utf-8`});try{return c(JSON.parse(e))}catch{return a()}}catch(t){return t instanceof e&&t.code,a()}}async function u(e,t){let r=await i(t);await r.mkdir(`/workspace/.plugins`,{recursive:!0});let a=c({version:e.version||1,plugins:e.plugins??{}});await r.writeFile(n,JSON.stringify(a,null,2))}async function d(e,t){return(await l(t)).plugins[e]??null}async function f(e,t,n){let r=await l(n);r.plugins[e]=t,await u(r,n)}async function p(e,t){let n=await l(t);return e in n.plugins&&(delete n.plugins[e],await u(n,t),!0)}async function m(e){return(await l(e)).plugins}export{p as deleteInstalledPlugin,d as getInstalledPlugin,m as listInstalledPlugins,f as setInstalledPlugin};
1
+ import{t as e}from"./types-idfTVsM8.js";import{t}from"./global-db-DJXlpNui.js";const n=`/workspace/.plugins/plugins.json`;let r=null;async function i(e){if(e)return e;if(r&&r.dbName===`slicc-fs-global`)return r.instance;let{VirtualFS:n}=await import(`./fs-DJCrdGnR.js`).then(e=>e.t),i=await n.create({dbName:t});return r={instance:i,dbName:t},i}function a(){return{version:1,plugins:{}}}function o(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function s(e){if(!o(e))return null;let t=e;return typeof t.root==`string`?t:null}function c(e){if(!o(e))return a();let t=e,n=typeof t.version==`number`?t.version:1,r={};if(o(t.plugins))for(let[e,n]of Object.entries(t.plugins)){let t=s(n);t&&(r[e]=t)}return{version:n,plugins:r}}async function l(t){try{let e=await(await i(t)).readFile(n,{encoding:`utf-8`});try{return c(JSON.parse(e))}catch{return a()}}catch(t){return t instanceof e&&t.code,a()}}async function u(e,t){let r=await i(t);await r.mkdir(`/workspace/.plugins`,{recursive:!0});let a=c({version:e.version||1,plugins:e.plugins??{}});await r.writeFile(n,JSON.stringify(a,null,2))}async function d(e,t){return(await l(t)).plugins[e]??null}async function f(e,t,n){let r=await l(n);r.plugins[e]=t,await u(r,n)}async function p(e,t){let n=await l(t);return e in n.plugins&&(delete n.plugins[e],await u(n,t),!0)}async function m(e){return(await l(e)).plugins}export{p as deleteInstalledPlugin,d as getInstalledPlugin,m as listInstalledPlugins,f as setInstalledPlugin};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{t as n}from"./types-idfTVsM8.js";import{t as r}from"./global-db-DJXlpNui.js";var i=e({MCP_STORE_PATH:()=>o,deleteServer:()=>y,getServer:()=>_,listServers:()=>b,readMcpAuthEntries:()=>S,readMcpAuthEntry:()=>x,readServersFile:()=>h,setServer:()=>v,writeServersFile:()=>g});const a=t(`mcp-store`),o=`/workspace/.mcp/servers.json`;let s=null,c=null;async function l(){return s||=await import(`./fs-DKRiXKHo.js`).then(e=>e.t),s}async function u(e){if(e)return e;if(c&&c.dbName===`slicc-fs-global`)return c.instance;let{VirtualFS:t}=await l(),n=await t.create({dbName:r});return c={instance:n,dbName:r},n}function d(){return{version:1,servers:{}}}function f(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function p(e){if(!f(e))return null;let t={...e};return typeof t.url==`string`?(delete t.sessionId,t):null}function m(e){if(!f(e))return d();let t=e,n=typeof t.version==`number`?t.version:1,r={};if(f(t.servers))for(let[e,n]of Object.entries(t.servers)){let t=p(n);t&&(r[e]=t)}return{version:n,servers:r}}async function h(e){try{let t=await(await u(e)).readFile(o,{encoding:`utf-8`});try{return m(JSON.parse(t))}catch(e){return a.warn(`servers.json is not valid JSON; treating as empty`,{error:e instanceof Error?e.message:String(e)}),d()}}catch(e){return e instanceof n&&e.code===`ENOENT`||a.warn(`Failed to read servers.json`,{error:e instanceof Error?e.message:String(e)}),d()}}async function g(e,t){let n=await u(t);await n.mkdir(`/workspace/.mcp`,{recursive:!0});let r=m({version:e.version||1,servers:e.servers??{}});await n.writeFile(o,JSON.stringify(r,null,2))}async function _(e,t){return(await h(t)).servers[e]??null}async function v(e,t,n){let r=await h(n),i=p({...r.servers[e],...t});if(!i)throw Error(`MCP server entry requires a URL`);return r.servers[e]=i,await g(r,n),i}async function y(e,t){let n=await h(t);return e in n.servers&&(delete n.servers[e],await g(n,t),!0)}async function b(e){return(await h(e)).servers}async function x(e){let t=await _(e);return!t?.url||!t.auth?.clientId?null:{name:e,serverUrl:t.url,auth:t.auth}}async function S(){let e=await b(),t=[];for(let[n,r]of Object.entries(e))!r?.url||!r.auth?.clientId||t.push({name:n,serverUrl:r.url,auth:r.auth});return t}export{x as n,i as r,S as t};
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{t as n}from"./types-idfTVsM8.js";import{t as r}from"./global-db-DJXlpNui.js";var i=e({MCP_STORE_PATH:()=>o,deleteServer:()=>y,getServer:()=>_,listServers:()=>b,readMcpAuthEntries:()=>S,readMcpAuthEntry:()=>x,readServersFile:()=>h,setServer:()=>v,writeServersFile:()=>g});const a=t(`mcp-store`),o=`/workspace/.mcp/servers.json`;let s=null,c=null;async function l(){return s||=await import(`./fs-DJCrdGnR.js`).then(e=>e.t),s}async function u(e){if(e)return e;if(c&&c.dbName===`slicc-fs-global`)return c.instance;let{VirtualFS:t}=await l(),n=await t.create({dbName:r});return c={instance:n,dbName:r},n}function d(){return{version:1,servers:{}}}function f(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function p(e){if(!f(e))return null;let t={...e};return typeof t.url==`string`?(delete t.sessionId,t):null}function m(e){if(!f(e))return d();let t=e,n=typeof t.version==`number`?t.version:1,r={};if(f(t.servers))for(let[e,n]of Object.entries(t.servers)){let t=p(n);t&&(r[e]=t)}return{version:n,servers:r}}async function h(e){try{let t=await(await u(e)).readFile(o,{encoding:`utf-8`});try{return m(JSON.parse(t))}catch(e){return a.warn(`servers.json is not valid JSON; treating as empty`,{error:e instanceof Error?e.message:String(e)}),d()}}catch(e){return e instanceof n&&e.code===`ENOENT`||a.warn(`Failed to read servers.json`,{error:e instanceof Error?e.message:String(e)}),d()}}async function g(e,t){let n=await u(t);await n.mkdir(`/workspace/.mcp`,{recursive:!0});let r=m({version:e.version||1,servers:e.servers??{}});await n.writeFile(o,JSON.stringify(r,null,2))}async function _(e,t){return(await h(t)).servers[e]??null}async function v(e,t,n){let r=await h(n),i=p({...r.servers[e],...t});if(!i)throw Error(`MCP server entry requires a URL`);return r.servers[e]=i,await g(r,n),i}async function y(e,t){let n=await h(t);return e in n.servers&&(delete n.servers[e],await g(n,t),!0)}async function b(e){return(await h(e)).servers}async function x(e){let t=await _(e);return!t?.url||!t.auth?.clientId?null:{name:e,serverUrl:t.url,auth:t.auth}}async function S(){let e=await b(),t=[];for(let[n,r]of Object.entries(e))!r?.url||!r.auth?.clientId||t.push({name:n,serverUrl:r.url,auth:r.auth});return t}export{x as n,i as r,S as t};
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/panel-rpc-B3MSVImO.js","assets/rolldown-runtime-Dd_uD5pT.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import"./proxied-fetch-CFWkfPNA.js";import{n}from"./runtime-env-Dlaokqg1.js";import{i as r,n as i,t as a}from"./api-endpoint-GRCyib6X.js";import"./runtime-env-CgsZ7LTp.js";import{t as o}from"./quick-llm-CcFoANd_.js";import{i as s,t as c}from"./page-approval-service-Cy54wL5s.js";var l=t(`sudo:timeout`);function u(e=`user-timeout`){return{decision:`deny`,reason:e}}function d(e,t={}){let n=t.timeoutMs??3e5;if(!Number.isFinite(n)||n<=0)return e;let r=t.setTimer??((e,t)=>setTimeout(e,t)),i=t.clearTimer??(e=>clearTimeout(e));return{requestApproval(t,a){return new Promise(o=>{let s=new AbortController,c=()=>s.abort();a?.signal?.addEventListener(`abort`,c,{once:!0});let d=!1,f=e=>{d=!0,a?.signal?.removeEventListener(`abort`,c),o(e)},p=r(()=>{d||(l.warn(`sudo approval timed out — failing closed`,{kind:t.kind,detail:t.detail,timeoutMs:n}),s.abort(),f(u(`user-timeout`)))},n),m=e=>{if(d){l.warn(`sudo decision arrived after timeout — discarded`,{kind:t.kind,detail:t.detail,decision:e.decision});return}i(p),f(e)};e.requestApproval(t,{signal:s.signal}).then(m,e=>{l.warn(`sudo broker threw — denying`,{error:e instanceof Error?e.message:String(e)}),m({decision:`deny`})})})}}}var f=t(`sudo-suggest`),p=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
2
+ import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import"./proxied-fetch-CFWkfPNA.js";import{n}from"./runtime-env-Dlaokqg1.js";import{i as r,n as i,t as a}from"./api-endpoint-GRCyib6X.js";import"./runtime-env-CgsZ7LTp.js";import{t as o}from"./quick-llm-Bs6a9ohB.js";import{i as s,t as c}from"./page-approval-service-Cy54wL5s.js";var l=t(`sudo:timeout`);function u(e=`user-timeout`){return{decision:`deny`,reason:e}}function d(e,t={}){let n=t.timeoutMs??3e5;if(!Number.isFinite(n)||n<=0)return e;let r=t.setTimer??((e,t)=>setTimeout(e,t)),i=t.clearTimer??(e=>clearTimeout(e));return{requestApproval(t,a){return new Promise(o=>{let s=new AbortController,c=()=>s.abort();a?.signal?.addEventListener(`abort`,c,{once:!0});let d=!1,f=e=>{d=!0,a?.signal?.removeEventListener(`abort`,c),o(e)},p=r(()=>{d||(l.warn(`sudo approval timed out — failing closed`,{kind:t.kind,detail:t.detail,timeoutMs:n}),s.abort(),f(u(`user-timeout`)))},n),m=e=>{if(d){l.warn(`sudo decision arrived after timeout — discarded`,{kind:t.kind,detail:t.detail,decision:e.decision});return}i(p),f(e)};e.requestApproval(t,{signal:s.signal}).then(m,e=>{l.warn(`sudo broker threw — denying`,{error:e instanceof Error?e.message:String(e)}),m({decision:`deny`})})})}}}var f=t(`sudo-suggest`),p=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
3
3
  `),m=[`You generalize a single filesystem path into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the meaningful directory prefix and replace the volatile`,`leaf (and below) with "**". Examples:`,` /workspace/.git/config -> /workspace/.git/**`,` /shared/secrets/openai.key -> /shared/secrets/**`,` /workspace/src/app/main.ts -> /workspace/src/**`].join(`
4
4
  `);async function h(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim(),r=e.kind===`command`?p:m,i=null;try{i=await o({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){f.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return g(i)||n}function g(e){if(!e)return null;let t=(e.split(`
5
5
  `,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}var _=t(`sudo-ext`);function v(e={}){let t=e.suggest??h;return{async requestApproval(e,n){let r=n?.signal,i;try{i=await t(e,r)}catch{i=e.detail}return r?.aborted?(_.warn(`sudo approval aborted before prompting — denying`,{detail:e.detail}),{decision:`deny`}):y({...e,suggestedPattern:i})}}}function y(e){return new Promise(t=>{let n=globalThis.chrome?.runtime;if(!n||typeof n.sendMessage!=`function`){_.warn(`chrome.runtime.sendMessage unavailable — denying`),t({decision:`deny`});return}let r=r=>{let i=n.lastError;if(i){_.warn(`sudo relay lastError — denying`,{error:i.message}),t({decision:`deny`});return}if(!r||typeof r!=`object`){_.warn(`sudo relay empty response — denying`),t({decision:`deny`});return}let a=r;if(!a.ok||!a.decision){_.warn(`sudo relay error response — denying`,{error:a.error}),t({decision:`deny`});return}t(b(a.decision,e.suggestedPattern??e.detail))};try{n.sendMessage({source:`offscreen`,payload:{type:s,request:e}},r)}catch(e){_.warn(`sudo relay threw — denying`,{error:e instanceof Error?e.message:String(e)}),t({decision:`deny`})}})}function b(e,t){return e.decision===`allow`?{decision:`allow`}:e.decision===`always`?{decision:`always`,pattern:typeof e.pattern==`string`&&e.pattern.trim().length>0?e.pattern.trim():t}:{decision:`deny`}}var x=t(`sudo-http`);function S(e={}){let t=e.fetchImpl??globalThis.fetch.bind(globalThis),n=e.path??`/api/sudo-approve`,i=e.suggest??h;return{async requestApproval(e,o){let s=o?.signal,c;if(e.suggestedPattern)c=e.suggestedPattern;else try{c=await i(e,s)}catch{c=e.detail}if(s?.aborted)return x.warn(`sudo approval aborted before prompting — denying`,{detail:e.detail}),{decision:`deny`};try{let i=await t(r(n),{method:`POST`,headers:a({"Content-Type":`application/json`}),body:JSON.stringify({kind:e.kind,detail:e.detail,suggestedPattern:c,...e.requester?{requester:e.requester}:{}}),signal:s});return i.ok?C(await i.json(),c):(x.warn(`sudo endpoint returned non-OK status — denying`,{status:i.status}),{decision:`deny`})}catch(e){return x.warn(`sudo endpoint request failed — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:`deny`}}}}}function C(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e.decision;if(n===`allow`)return{decision:`allow`};if(n===`always`){let n=e.pattern;return{decision:`always`,pattern:typeof n==`string`&&n.trim().length>0?n.trim():t}}return{decision:`deny`}}var w=t(`sudo-panel-rpc`),T=6e5;function E(t={}){let n=t.suggest??h,r=t.timeoutMs??T,i=t.getClient??(async()=>{let{getPanelRpcClient:t}=await e(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-B3MSVImO.js`).then(e=>e.i);return{getPanelRpcClient:e}},__vite__mapDeps([0,1]));return t()});return{async requestApproval(e,t){let a=t?.signal,o;try{o=await n(e,a)}catch{o=e.detail}let s={...e,suggestedPattern:o},c;try{c=await i()}catch(e){return w.warn(`panel-RPC client lookup threw — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:`deny`}}if(!c)return w.warn(`panel-RPC client unavailable in worker realm — denying`),{decision:`deny`};if(a?.aborted)return w.warn(`sudo approval aborted before prompting — denying`,{detail:e.detail}),{decision:`deny`};try{let{decision:e}=await c.call(`sudo-request`,{request:s},{timeoutMs:r});return D(e,o)}catch(e){return w.warn(`sudo panel-RPC relay failed — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:`deny`}}}}}function D(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e.decision;if(n===`allow`)return{decision:`allow`};if(n===`always`){let n=e.pattern;return{decision:`always`,pattern:typeof n==`string`&&n.trim().length>0?n.trim():t}}return{decision:`deny`}}var O=t(`sudo:tray-first`),k=6e5;function A(t,n={}){let r=n.suggest??h,i=n.timeoutMs??k,a=n.getClient??(async()=>{let{getPanelRpcClient:t}=await e(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-B3MSVImO.js`).then(e=>e.i);return{getPanelRpcClient:e}},__vite__mapDeps([0,1]));return t()});return{async requestApproval(e,n){if(n?.signal?.aborted)return{decision:`deny`};let o=e.suggestedPattern;if(!o)try{o=await r(e,n?.signal)}catch{o=e.detail}let s={...e,suggestedPattern:o},c=null;try{c=await a()}catch(e){O.debug?.(`panel-RPC client lookup threw — using native broker`,{error:e instanceof Error?e.message:String(e)})}if(c)try{let e=await c.call(`sudo-request`,{request:s,mode:`tray-first`},{timeoutMs:i});if(e?.handled!==!1)return j(e?.decision,o)}catch(e){O.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return t.requestApproval(s,n)}}}function j(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;return n.decision===`allow`?{decision:`allow`,...r?{attestation:r}:{}}:n.decision===`always`?{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}}:{decision:`deny`}}var M=t(`sudo`),N=`__slicc_sudo`;function P(){return n()}function F(){return typeof chrome>`u`&&i()!==null}function I(){return d(L())}function L(){return P()?v():F()?E():A(S())}function R(e=I()){let t={requestApproval:t=>e.requestApproval(t)};return globalThis[N]=t,M.info(`sudo broker test hook published on globalThis.__slicc_sudo`),t}export{c as installPanelSudoResponder,R as installSudoTestHook};
@@ -1 +1 @@
1
- import{l as e}from"./src-CAWTvdAa.js";import{C as t,E as n,S as r,T as i,b as a,w as o,x as s}from"./wc-live-CiwhsK8i.js";import{n as c}from"./clipboard-eqmn97SP.js";import{n as l}from"./icons-ZLR7gmJ4.js";function u(e){let t=[{id:`browser`,label:`Browser`},{id:`iphone`,label:`iPhone`},{id:`terminal`,label:`Terminal`}];return e>0&&t.unshift({id:`status`,label:`Status`,badge:e}),t}function d(e){return e>0?`status`:`browser`}function f(e){let t;try{t=new URL(e)}catch{return e}let n=t.pathname.split(`/`),r=n.lastIndexOf(`join`)+1;return r===0||r>=n.length||!n[r]?e:(n[r]=`•`.repeat(8),`${t.origin}${n.join(`/`)}${t.search}${t.hash}`)}function p(e){return`slicc ${e} follow bash -c`}var m=e;function h(e){try{return new URL(e).origin}catch{return m}}function g(e){return`curl -fsSL ${h(e)}/install-cli | sh`}function _(e){return`irm ${h(e)}/install-cli.ps1 | iex`}function v(e){switch(e){case`browser`:return[`Open Sliccy in the other browser, click the avatar, and choose “Connect to another browser”.`,`Paste the join link there.`];case`iphone`:return[`In the Sliccy app, paste the join link into Settings → Join link.`,`Signed in to the same iCloud account? The session is already listed under iCloud Sessions — no link needed.`];case`terminal`:return[`Lend a machine to this session — run these in its terminal:`,`The agent can then run commands on that machine as you.`]}}function y(e){return e===0?`Nothing connected yet.`:`${e} ${e===1?`device is`:`devices are`} connected.`}function b(e){return e===0?`Revoke link? The old link stops working.`:`Revoke link? ${e} connected ${e===1?`device`:`devices`} will be disconnected.`}var x=`font-family: var(--s2-font-mono); font-size: 11px; color: var(--s2-content-default); word-break: break-all; padding: 8px 12px; background: var(--s2-bg-sunken); border-radius: var(--s2-radius-default); border: 1px solid var(--s2-border-subtle);`,S=`font-size: 11px; color: var(--s2-content-secondary);`,C=`font-size: 12px; color: var(--s2-content-default);`,w=`flex: 0 0 auto; width: auto; padding: 8px 14px;`;function T(e,t,n){let r=document.createElement(e);return t&&(r.style.cssText=t),n!=null&&(r.textContent=n),r}function E(e,t,n=`normal`){e.statusEl.textContent=t,e.statusEl.style.color=n===`error`?`var(--slicc-cone)`:`var(--s2-content-secondary)`}async function D(e,t,n){await c(t)?E(e,n):E(e,`Couldn’t copy. Select the text and copy it manually.`,`error`)}async function O(e){let{onReset:t}=e.options,n=e.revokeBtn;if(!(!t||!n)){if(!e.revokeArmed){e.revokeArmed=!0,n.textContent=b(e.followers.length),k(n,!0);return}n.disabled=!0,e.doneBtn.disabled=!0,E(e,`Revoking the join link…`);try{await t(),E(e,`Join link revoked. Enable sharing from the avatar menu to get a new one.`),e.urlRevealed=!1,n.textContent=`Revoked`,e.doneBtn.disabled=!1,L(e)}catch(t){E(e,`Revoke failed: ${t instanceof Error?t.message:String(t)}`,`error`),e.revokeArmed=!1,n.textContent=`Revoke link`,k(n,!1),n.disabled=!1,e.doneBtn.disabled=!1}}}function k(e,t){e.dataset.armed=t?`1`:`0`,e.style.background=t?`var(--s2-negative)`:``,e.style.borderColor=t?`transparent`:``,e.style.color=t?`#fff`:``}function A(e){let t=T(`div`),n=T(`button`,`margin-bottom: 8px;`,`Copy join link`);n.className=`dialog__btn dialog__btn--secondary`,n.dataset.action=`copy-link`,n.addEventListener(`click`,()=>{D(e,e.options.joinUrl,`Join link copied.`)}),t.appendChild(n);let r=T(`div`,`display: flex; align-items: center; gap: 8px;`),i=T(`div`,`${x} flex: 1 1 auto; min-width: 0; color: var(--s2-content-secondary);`);i.dataset.joinUrl=`1`,i.textContent=e.urlRevealed?e.options.joinUrl:f(e.options.joinUrl);let a=T(`button`,`${w}`,e.urlRevealed?`Hide`:`Show`);return a.className=`dialog__btn dialog__btn--secondary`,a.dataset.action=`toggle-url`,a.addEventListener(`click`,()=>{e.urlRevealed=!e.urlRevealed,L(e)}),r.append(i,a),t.appendChild(r),t.appendChild(T(`div`,`${S} margin-top: 8px;`,`Anyone with this link can drive this session.`)),t}function j(e,t){let n=T(`div`,`margin-bottom: 10px;`);n.appendChild(T(`div`,`${S} margin-bottom: 4px;`,t.caption));let r=T(`div`,`${x} margin-bottom: 6px;`,t.command);r.dataset.command=t.action,n.appendChild(r);let i=T(`button`,`margin-bottom: 0;`,t.copyLabel);return i.className=`dialog__btn dialog__btn--secondary`,i.dataset.action=t.action,i.addEventListener(`click`,()=>{D(e,t.copyValue??t.command,t.okMessage)}),n.appendChild(i),n}function M(e,t){let n=T(`div`),{joinUrl:r}=e.options,i=p(r),a=e.urlRevealed?i:p(f(r));n.appendChild(j(e,{caption:`1. Install the slicc CLI (skip if you already have it):`,command:g(r),action:`copy-install`,copyLabel:`Copy install command`,okMessage:`Install command copied.`})),n.appendChild(T(`div`,`${S} margin: -6px 0 12px;`,`Windows: ${_(r)}`)),n.appendChild(j(e,{caption:`2. Connect that machine to this session:`,command:a,copyValue:i,action:`copy-command`,copyLabel:`Copy command`,okMessage:`Command copied.`}));let o=T(`button`,`${w} margin-bottom: 8px;`,e.urlRevealed?`Hide link`:`Show link`);return o.className=`dialog__btn dialog__btn--secondary`,o.dataset.action=`toggle-url`,o.addEventListener(`click`,()=>{e.urlRevealed=!e.urlRevealed,L(e)}),n.appendChild(o),n.appendChild(T(`div`,`${S} margin-bottom: 0;`,`\u26a0 ${t}`)),n}function N(e,t){let n=T(`div`),[r,i]=v(t);return n.appendChild(T(`div`,`${C} line-height: 1.5; margin-bottom: 6px;`,r)),t===`terminal`?(n.appendChild(M(e,i)),n):(n.appendChild(T(`div`,`${S} margin-bottom: 10px;`,i)),n.appendChild(A(e)),n)}function P(e){let a=T(`div`,`display: grid; grid-template-columns: 16px 1fr auto; gap: 8px; align-items: start;`);a.dataset.follower=e.runtimeId;let c=T(`span`,`display: flex; margin-top: 2px; color: var(--s2-content-secondary);`);c.appendChild(l(t(e),{size:14})),a.appendChild(c);let u=T(`div`,`display: flex; flex-direction: column; gap: 2px; min-width: 0;`);u.appendChild(T(`div`,`${C} font-weight: 500;`,n(e)));let d=r(e);d&&u.appendChild(T(`div`,`${S} overflow-wrap: anywhere;`,d));let f=s(e);if(f.length>0){let e=T(`div`,`display: flex; gap: 4px; flex-wrap: wrap; margin-top: 2px;`);for(let t of f)e.appendChild(T(`span`,`padding: 1px 6px; border-radius: 9999px; background: var(--s2-bg-layer-1); border: 1px solid var(--s2-border-subtle); font-size: 10px; font-weight: 600; color: var(--s2-content-secondary);`,t));u.appendChild(e)}a.appendChild(u);let p=i(e),m=p===`active`?`var(--s2-positive)`:p===`warn`?`var(--s2-notice)`:`var(--s2-content-tertiary)`,h=T(`div`,`display: flex; align-items: center; gap: 5px; ${S} white-space: nowrap;`);return h.appendChild(T(`span`,`width: 6px; height: 6px; border-radius: 50%; flex: 0 0 auto; background: ${m};`)),h.appendChild(T(`span`,void 0,o(e))),a.appendChild(h),a}function F(e){let t=T(`div`,`display: flex; flex-direction: column; gap: 10px;`);for(let n of e.followers)t.appendChild(P(n));return e.followers.length===0&&t.appendChild(T(`div`,`font-size: 12px; color: var(--s2-content-secondary);`,`Nothing connected right now.`)),t}function I(e,t,n){let r=t===e.activeTab,i=T(`button`,`flex: 0 0 auto; padding: 4px 10px; border-radius: 9999px; font-size: 12px; cursor: pointer; border: 1px solid ${r?`var(--s2-border-subtle)`:`transparent`}; background: ${r?`var(--s2-bg-layer-1)`:`transparent`}; color: ${r?`var(--s2-content-default)`:`var(--s2-content-secondary)`};`,n);return i.type=`button`,i.setAttribute(`role`,`tab`),i.setAttribute(`aria-selected`,String(r)),i.dataset.tab=t,i.addEventListener(`click`,()=>{e.activeTab=t,L(e)}),i}function L(e){let t=u(e.followers.length);t.some(t=>t.id===e.activeTab)||(e.activeTab=d(0)),e.tabsRow.replaceChildren(...t.map(t=>I(e,t.id,t.badge==null?t.label:`${t.label} · ${t.badge}`))),e.body.replaceChildren(e.activeTab===`status`?F(e):N(e,e.activeTab)),e.summaryEl.textContent=y(e.followers.length),e.revokeBtn&&!e.revokeArmed&&e.revokeBtn.textContent!==`Revoked`&&(e.revokeBtn.textContent=`Revoke link`,k(e.revokeBtn,!1))}function R(e){let t=T(`div`);t.className=`dialog-overlay`,t.dataset.syncDialog=`1`;let n=T(`div`);n.className=`dialog`,n.setAttribute(`role`,`dialog`),n.setAttribute(`aria-modal`,`true`),n.setAttribute(`aria-label`,`Session sharing`),t.appendChild(n);let r=T(`div`,void 0,`Session sharing`);r.className=`dialog__title`;let i=T(`div`,`display: flex; gap: 4px; margin-bottom: 12px; flex-wrap: wrap;`);i.setAttribute(`role`,`tablist`);let a=T(`div`,`margin-bottom: 12px;`);a.setAttribute(`role`,`tabpanel`);let o=T(`div`,`font-size: 12px; margin-bottom: 8px; min-height: 16px;`);o.setAttribute(`role`,`status`),o.setAttribute(`aria-live`,`polite`);let s=T(`div`,`${S} margin-bottom: 8px;`),c=T(`button`,void 0,`Done`);c.className=`dialog__btn`,n.append(r,i,a,o,s,c);let l=e.followers??[];return{options:e,followers:l,activeTab:e.initialTab??d(l.length),urlRevealed:!1,revokeArmed:!1,overlay:t,tabsRow:i,body:a,statusEl:o,summaryEl:s,doneBtn:c,revokeBtn:null}}var z=null;function B(e){z?.(),document.querySelectorAll(`.dialog-overlay[data-sync-dialog]`).forEach(e=>{e.remove()});let t=R(e),n=t.overlay.firstElementChild;if(e.onReset){let e=T(`button`,`margin-top: 8px;`,`Revoke link`);e.className=`dialog__btn dialog__btn--secondary`,e.dataset.action=`revoke`,e.addEventListener(`click`,()=>{O(t)}),n.appendChild(e),t.revokeBtn=e}let r=e=>{t.followers=e.detail?.followers??[],L(t)},i=e=>{e.key===`Escape`&&o()};function o(){window.removeEventListener(a,r),document.removeEventListener(`keydown`,i),t.overlay.remove(),z===o&&(z=null)}t.doneBtn.addEventListener(`click`,()=>o()),t.overlay.addEventListener(`click`,e=>{e.target===t.overlay&&o()}),window.addEventListener(a,r),document.addEventListener(`keydown`,i),z=o,e.copied&&E(t,`Join link copied to clipboard.`),L(t),document.body.appendChild(t.overlay)}export{B as showSyncEnabledDialog};
1
+ import{l as e}from"./src-CAWTvdAa.js";import{C as t,E as n,S as r,T as i,b as a,w as o,x as s}from"./wc-live-D9C2qb2I.js";import{n as c}from"./clipboard-eqmn97SP.js";import{n as l}from"./icons-ZLR7gmJ4.js";function u(e){let t=[{id:`browser`,label:`Browser`},{id:`iphone`,label:`iPhone`},{id:`terminal`,label:`Terminal`}];return e>0&&t.unshift({id:`status`,label:`Status`,badge:e}),t}function d(e){return e>0?`status`:`browser`}function f(e){let t;try{t=new URL(e)}catch{return e}let n=t.pathname.split(`/`),r=n.lastIndexOf(`join`)+1;return r===0||r>=n.length||!n[r]?e:(n[r]=`•`.repeat(8),`${t.origin}${n.join(`/`)}${t.search}${t.hash}`)}function p(e){return`slicc ${e} follow bash -c`}var m=e;function h(e){try{return new URL(e).origin}catch{return m}}function g(e){return`curl -fsSL ${h(e)}/install-cli | sh`}function _(e){return`irm ${h(e)}/install-cli.ps1 | iex`}function v(e){switch(e){case`browser`:return[`Open Sliccy in the other browser, click the avatar, and choose “Connect to another browser”.`,`Paste the join link there.`];case`iphone`:return[`In the Sliccy app, paste the join link into Settings → Join link.`,`Signed in to the same iCloud account? The session is already listed under iCloud Sessions — no link needed.`];case`terminal`:return[`Lend a machine to this session — run these in its terminal:`,`The agent can then run commands on that machine as you.`]}}function y(e){return e===0?`Nothing connected yet.`:`${e} ${e===1?`device is`:`devices are`} connected.`}function b(e){return e===0?`Revoke link? The old link stops working.`:`Revoke link? ${e} connected ${e===1?`device`:`devices`} will be disconnected.`}var x=`font-family: var(--s2-font-mono); font-size: 11px; color: var(--s2-content-default); word-break: break-all; padding: 8px 12px; background: var(--s2-bg-sunken); border-radius: var(--s2-radius-default); border: 1px solid var(--s2-border-subtle);`,S=`font-size: 11px; color: var(--s2-content-secondary);`,C=`font-size: 12px; color: var(--s2-content-default);`,w=`flex: 0 0 auto; width: auto; padding: 8px 14px;`;function T(e,t,n){let r=document.createElement(e);return t&&(r.style.cssText=t),n!=null&&(r.textContent=n),r}function E(e,t,n=`normal`){e.statusEl.textContent=t,e.statusEl.style.color=n===`error`?`var(--slicc-cone)`:`var(--s2-content-secondary)`}async function D(e,t,n){await c(t)?E(e,n):E(e,`Couldn’t copy. Select the text and copy it manually.`,`error`)}async function O(e){let{onReset:t}=e.options,n=e.revokeBtn;if(!(!t||!n)){if(!e.revokeArmed){e.revokeArmed=!0,n.textContent=b(e.followers.length),k(n,!0);return}n.disabled=!0,e.doneBtn.disabled=!0,E(e,`Revoking the join link…`);try{await t(),E(e,`Join link revoked. Enable sharing from the avatar menu to get a new one.`),e.urlRevealed=!1,n.textContent=`Revoked`,e.doneBtn.disabled=!1,L(e)}catch(t){E(e,`Revoke failed: ${t instanceof Error?t.message:String(t)}`,`error`),e.revokeArmed=!1,n.textContent=`Revoke link`,k(n,!1),n.disabled=!1,e.doneBtn.disabled=!1}}}function k(e,t){e.dataset.armed=t?`1`:`0`,e.style.background=t?`var(--s2-negative)`:``,e.style.borderColor=t?`transparent`:``,e.style.color=t?`#fff`:``}function A(e){let t=T(`div`),n=T(`button`,`margin-bottom: 8px;`,`Copy join link`);n.className=`dialog__btn dialog__btn--secondary`,n.dataset.action=`copy-link`,n.addEventListener(`click`,()=>{D(e,e.options.joinUrl,`Join link copied.`)}),t.appendChild(n);let r=T(`div`,`display: flex; align-items: center; gap: 8px;`),i=T(`div`,`${x} flex: 1 1 auto; min-width: 0; color: var(--s2-content-secondary);`);i.dataset.joinUrl=`1`,i.textContent=e.urlRevealed?e.options.joinUrl:f(e.options.joinUrl);let a=T(`button`,`${w}`,e.urlRevealed?`Hide`:`Show`);return a.className=`dialog__btn dialog__btn--secondary`,a.dataset.action=`toggle-url`,a.addEventListener(`click`,()=>{e.urlRevealed=!e.urlRevealed,L(e)}),r.append(i,a),t.appendChild(r),t.appendChild(T(`div`,`${S} margin-top: 8px;`,`Anyone with this link can drive this session.`)),t}function j(e,t){let n=T(`div`,`margin-bottom: 10px;`);n.appendChild(T(`div`,`${S} margin-bottom: 4px;`,t.caption));let r=T(`div`,`${x} margin-bottom: 6px;`,t.command);r.dataset.command=t.action,n.appendChild(r);let i=T(`button`,`margin-bottom: 0;`,t.copyLabel);return i.className=`dialog__btn dialog__btn--secondary`,i.dataset.action=t.action,i.addEventListener(`click`,()=>{D(e,t.copyValue??t.command,t.okMessage)}),n.appendChild(i),n}function M(e,t){let n=T(`div`),{joinUrl:r}=e.options,i=p(r),a=e.urlRevealed?i:p(f(r));n.appendChild(j(e,{caption:`1. Install the slicc CLI (skip if you already have it):`,command:g(r),action:`copy-install`,copyLabel:`Copy install command`,okMessage:`Install command copied.`})),n.appendChild(T(`div`,`${S} margin: -6px 0 12px;`,`Windows: ${_(r)}`)),n.appendChild(j(e,{caption:`2. Connect that machine to this session:`,command:a,copyValue:i,action:`copy-command`,copyLabel:`Copy command`,okMessage:`Command copied.`}));let o=T(`button`,`${w} margin-bottom: 8px;`,e.urlRevealed?`Hide link`:`Show link`);return o.className=`dialog__btn dialog__btn--secondary`,o.dataset.action=`toggle-url`,o.addEventListener(`click`,()=>{e.urlRevealed=!e.urlRevealed,L(e)}),n.appendChild(o),n.appendChild(T(`div`,`${S} margin-bottom: 0;`,`\u26a0 ${t}`)),n}function N(e,t){let n=T(`div`),[r,i]=v(t);return n.appendChild(T(`div`,`${C} line-height: 1.5; margin-bottom: 6px;`,r)),t===`terminal`?(n.appendChild(M(e,i)),n):(n.appendChild(T(`div`,`${S} margin-bottom: 10px;`,i)),n.appendChild(A(e)),n)}function P(e){let a=T(`div`,`display: grid; grid-template-columns: 16px 1fr auto; gap: 8px; align-items: start;`);a.dataset.follower=e.runtimeId;let c=T(`span`,`display: flex; margin-top: 2px; color: var(--s2-content-secondary);`);c.appendChild(l(t(e),{size:14})),a.appendChild(c);let u=T(`div`,`display: flex; flex-direction: column; gap: 2px; min-width: 0;`);u.appendChild(T(`div`,`${C} font-weight: 500;`,n(e)));let d=r(e);d&&u.appendChild(T(`div`,`${S} overflow-wrap: anywhere;`,d));let f=s(e);if(f.length>0){let e=T(`div`,`display: flex; gap: 4px; flex-wrap: wrap; margin-top: 2px;`);for(let t of f)e.appendChild(T(`span`,`padding: 1px 6px; border-radius: 9999px; background: var(--s2-bg-layer-1); border: 1px solid var(--s2-border-subtle); font-size: 10px; font-weight: 600; color: var(--s2-content-secondary);`,t));u.appendChild(e)}a.appendChild(u);let p=i(e),m=p===`active`?`var(--s2-positive)`:p===`warn`?`var(--s2-notice)`:`var(--s2-content-tertiary)`,h=T(`div`,`display: flex; align-items: center; gap: 5px; ${S} white-space: nowrap;`);return h.appendChild(T(`span`,`width: 6px; height: 6px; border-radius: 50%; flex: 0 0 auto; background: ${m};`)),h.appendChild(T(`span`,void 0,o(e))),a.appendChild(h),a}function F(e){let t=T(`div`,`display: flex; flex-direction: column; gap: 10px;`);for(let n of e.followers)t.appendChild(P(n));return e.followers.length===0&&t.appendChild(T(`div`,`font-size: 12px; color: var(--s2-content-secondary);`,`Nothing connected right now.`)),t}function I(e,t,n){let r=t===e.activeTab,i=T(`button`,`flex: 0 0 auto; padding: 4px 10px; border-radius: 9999px; font-size: 12px; cursor: pointer; border: 1px solid ${r?`var(--s2-border-subtle)`:`transparent`}; background: ${r?`var(--s2-bg-layer-1)`:`transparent`}; color: ${r?`var(--s2-content-default)`:`var(--s2-content-secondary)`};`,n);return i.type=`button`,i.setAttribute(`role`,`tab`),i.setAttribute(`aria-selected`,String(r)),i.dataset.tab=t,i.addEventListener(`click`,()=>{e.activeTab=t,L(e)}),i}function L(e){let t=u(e.followers.length);t.some(t=>t.id===e.activeTab)||(e.activeTab=d(0)),e.tabsRow.replaceChildren(...t.map(t=>I(e,t.id,t.badge==null?t.label:`${t.label} · ${t.badge}`))),e.body.replaceChildren(e.activeTab===`status`?F(e):N(e,e.activeTab)),e.summaryEl.textContent=y(e.followers.length),e.revokeBtn&&!e.revokeArmed&&e.revokeBtn.textContent!==`Revoked`&&(e.revokeBtn.textContent=`Revoke link`,k(e.revokeBtn,!1))}function R(e){let t=T(`div`);t.className=`dialog-overlay`,t.dataset.syncDialog=`1`;let n=T(`div`);n.className=`dialog`,n.setAttribute(`role`,`dialog`),n.setAttribute(`aria-modal`,`true`),n.setAttribute(`aria-label`,`Session sharing`),t.appendChild(n);let r=T(`div`,void 0,`Session sharing`);r.className=`dialog__title`;let i=T(`div`,`display: flex; gap: 4px; margin-bottom: 12px; flex-wrap: wrap;`);i.setAttribute(`role`,`tablist`);let a=T(`div`,`margin-bottom: 12px;`);a.setAttribute(`role`,`tabpanel`);let o=T(`div`,`font-size: 12px; margin-bottom: 8px; min-height: 16px;`);o.setAttribute(`role`,`status`),o.setAttribute(`aria-live`,`polite`);let s=T(`div`,`${S} margin-bottom: 8px;`),c=T(`button`,void 0,`Done`);c.className=`dialog__btn`,n.append(r,i,a,o,s,c);let l=e.followers??[];return{options:e,followers:l,activeTab:e.initialTab??d(l.length),urlRevealed:!1,revokeArmed:!1,overlay:t,tabsRow:i,body:a,statusEl:o,summaryEl:s,doneBtn:c,revokeBtn:null}}var z=null;function B(e){z?.(),document.querySelectorAll(`.dialog-overlay[data-sync-dialog]`).forEach(e=>{e.remove()});let t=R(e),n=t.overlay.firstElementChild;if(e.onReset){let e=T(`button`,`margin-top: 8px;`,`Revoke link`);e.className=`dialog__btn dialog__btn--secondary`,e.dataset.action=`revoke`,e.addEventListener(`click`,()=>{O(t)}),n.appendChild(e),t.revokeBtn=e}let r=e=>{t.followers=e.detail?.followers??[],L(t)},i=e=>{e.key===`Escape`&&o()};function o(){window.removeEventListener(a,r),document.removeEventListener(`keydown`,i),t.overlay.remove(),z===o&&(z=null)}t.doneBtn.addEventListener(`click`,()=>o()),t.overlay.addEventListener(`click`,e=>{e.target===t.overlay&&o()}),window.addEventListener(a,r),document.addEventListener(`keydown`,i),z=o,e.copied&&E(t,`Join link copied to clipboard.`),L(t),document.body.appendChild(t.overlay)}export{B as showSyncEnabledDialog};
@@ -0,0 +1 @@
1
+ import"./tool-ui-DfXu6quJ.js";
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-DDBAeTLF.js";import{i as n,r}from"./proxied-fetch-CFWkfPNA.js";import{n as i}from"./runtime-env-Dlaokqg1.js";import{i as a,t as o}from"./api-endpoint-GRCyib6X.js";import"./runtime-env-CgsZ7LTp.js";import{i as s}from"./tray-runtime-config-CluPgaPA.js";var c=e({getAllCronTasks:()=>T,getAllWebhooks:()=>w,getState:()=>S,setState:()=>C}),l=`slicc-groups`,u=3,d={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`},f=null;function p(e){if(!e.objectStoreNames.contains(d.MESSAGES)){let t=e.createObjectStore(d.MESSAGES,{keyPath:`id`});t.createIndex(`chatJid`,`chatJid`),t.createIndex(`timestamp`,`timestamp`),t.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}e.objectStoreNames.contains(d.SESSIONS)||e.createObjectStore(d.SESSIONS,{keyPath:`groupFolder`}),e.objectStoreNames.contains(d.TASKS)||e.createObjectStore(d.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),e.objectStoreNames.contains(d.STATE)||e.createObjectStore(d.STATE,{keyPath:`key`})}function m(e,t){let n=e.isMain??!1;return{jid:e.jid,name:e.name,folder:e.folder,trigger:n?void 0:e.trigger||`@${e.folder}`,requiresTrigger:!n&&(e.requiresTrigger??!0),parentJid:n?null:t??null,assistantLabel:n?`sliccy`:e.config?.assistantName||e.folder,addedAt:e.addedAt,config:e.config?{systemPromptAppend:e.config.systemPromptAppend,timeout:e.config.timeout,assistantName:e.config.assistantName}:void 0}}function h(e,t){if(t.objectStoreNames.contains(`groups`)){let n=e.target.transaction.objectStore(`groups`).getAll();n.onsuccess=()=>{let e=n.result;t.deleteObjectStore(`groups`);let r=t.createObjectStore(d.SCOOPS,{keyPath:`jid`});r.createIndex(`type`,`type`);let i=e.find(e=>e.isMain)?.jid;for(let t of e)r.put(m(t,i))};return}t.objectStoreNames.contains(d.SCOOPS)||t.createObjectStore(d.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}function g(e){e.objectStoreNames.contains(d.WEBHOOKS)||e.createObjectStore(d.WEBHOOKS,{keyPath:`id`}),e.objectStoreNames.contains(d.CRONTASKS)||e.createObjectStore(d.CRONTASKS,{keyPath:`id`})}function _(e){let t=e.target.result,n=e.oldVersion;n<1&&p(t),n<2&&h(e,t),n<3&&g(t)}function v(){if(!f)return null;let e=Object.values(d).every(e=>f.objectStoreNames.contains(e));return f.version===u&&e?f:(f.close(),f=null,null)}function y(e){e.onversionchange=()=>{e.close(),f===e&&(f=null)},e.onclose=()=>{f===e&&(f=null)}}async function b(){return v()||new Promise((e,t)=>{let n=indexedDB.open(l,u);n.onupgradeneeded=_,n.onsuccess=()=>{let t=n.result;y(t),f=t,e(t)},n.onerror=()=>t(n.error)})}async function x(e,t=`readonly`){return(await b()).transaction(e,t).objectStore(e)}async function S(e){let t=await x(d.STATE);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result?.value??null),i.onerror=()=>r(i.error)})}async function C(e,t){let n=await x(d.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}async function w(){try{let e=await x(d.WEBHOOKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}async function T(){try{let e=await x(d.CRONTASKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}var E={state:`inactive`,session:null,error:null};function D(){return{...E,session:E.session?{...E.session}:null}}var O=new Set;function k(e){return O.add(e),()=>{O.delete(e)}}function A(e){if(E={...e,session:e.session?{...e.session}:null},O.size!==0)for(let e of[...O])try{e(D())}catch{}}var j=e({IndexedDbLeaderTraySessionStore:()=>V,LEADER_STATUS_STORAGE_KEY:()=>LEADER_STATUS_STORAGE_KEY,LeaderTrayManager:()=>U,TrayProxyFetchError:()=>G,createTrayFetch:()=>J,getLeaderTrayRuntimeStatus:()=>D,parseLeaderTraySession:()=>H,setLeaderTrayRuntimeStatus:()=>A}),M=t(`tray-leader`),N=`leader-tray-session`,P=3e4,F=1e4,I=1e3,L=3e4,R=2,z=20,B=1e4,V=class{key;constructor(e=N){this.key=e}async load(){return H(await S(this.key))}async save(e){await C(this.key,JSON.stringify(e))}async clear(){await C(this.key,``)}};function H(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t.workerBaseUrl!=`string`||typeof t.trayId!=`string`||typeof t.createdAt!=`string`||typeof t.controllerId!=`string`||typeof t.controllerUrl!=`string`||typeof t.joinUrl!=`string`||typeof t.webhookUrl!=`string`||typeof t.runtime!=`string`?null:{workerBaseUrl:t.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:t.controllerId,controllerUrl:t.controllerUrl,joinUrl:t.joinUrl,webhookUrl:t.webhookUrl,leaderKey:typeof t.leaderKey==`string`?t.leaderKey:void 0,leaderWebSocketUrl:typeof t.leaderWebSocketUrl==`string`?t.leaderWebSocketUrl:null,runtime:t.runtime}}catch{return null}}var U=class{options;store;fetchImpl;webSocketFactory;pingIntervalMs;connectTimeoutMs;reconnectEnabled;reconnectBaseDelayMs;reconnectMaxDelayMs;reconnectBackoffMultiplier;reconnectMaxAttempts;reconnectSleep;socket=null;pingTimer=null;currentSession=null;stopped=!1;reconnecting=!1;reconnectGeneration=0;constructor(e){this.options=e,this.store=e.store??new V,this.fetchImpl=e.fetchImpl??J(),this.webSocketFactory=e.webSocketFactory??(e=>new WebSocket(e)),this.pingIntervalMs=e.pingIntervalMs??P,this.connectTimeoutMs=e.connectTimeoutMs??F;let t=e.reconnect;this.reconnectEnabled=t!==!1;let n=t===!1||!t?{}:t;this.reconnectBaseDelayMs=n.baseDelayMs??I,this.reconnectMaxDelayMs=n.maxDelayMs??L,this.reconnectBackoffMultiplier=n.backoffMultiplier??R,this.reconnectMaxAttempts=n.maxAttempts??z,this.reconnectSleep=n.sleep??(e=>new Promise(t=>setTimeout(t,e)))}async start(){if(this.stopped=!1,this.currentSession&&this.socket)return A({state:`leader`,session:this.currentSession,error:null}),this.currentSession;A({state:`connecting`,session:null,error:null}),this.currentSession=null;try{let e=await this.connectOnce();M.info(`Leader joined tray`,{trayId:e.trayId,controllerId:e.controllerId,runtime:e.runtime});try{this.options.onLeaderReady?.(e)}catch(e){M.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return e}catch(e){throw A({state:`error`,session:this.currentSession,error:e instanceof Error?e.message:String(e)}),e}}stop(){this.stopped=!0,this.reconnecting=!1,this.reconnectGeneration++,this.tearDownSocket(),this.currentSession=null,A({state:`inactive`,session:null,error:null})}tearDownSocket(){this.pingTimer&&=(clearInterval(this.pingTimer),null);let e=this.socket;if(this.socket=null,e)try{e.close()}catch{}}async connectOnce(){let e=await this.store.load(),t=e?.workerBaseUrl===this.options.workerBaseUrl?e:null,n=await this.attachWithRecovery(t);this.currentSession=n;let r=await this.openLeaderSocket(n.leaderWebSocketUrl);return this.socket=r,this.startPingLoop(r),A({state:`leader`,session:n,error:null}),n}async handleUnexpectedDisconnect(e){if(this.stopped)return;if(!this.reconnectEnabled){M.warn(`Leader WebSocket dropped and auto-reconnect is disabled`,{reason:e}),this.tearDownSocket(),this.currentSession=null,A({state:`error`,session:null,error:`Leader WebSocket dropped: ${e}`});return}if(this.reconnecting)return;this.reconnecting=!0;let t=++this.reconnectGeneration;M.warn(`Leader WebSocket dropped — starting reconnect loop`,{reason:e}),this.tearDownSocket();let n=0,r=this.reconnectBaseDelayMs,i=e;for(;!this.stopped&&t===this.reconnectGeneration&&n<this.reconnectMaxAttempts&&(n++,A({state:`reconnecting`,session:this.currentSession,error:null,reconnectAttempts:n}),this.options.onReconnecting?.(n,i),M.info(`Leader reconnect attempt`,{attempt:n,delay:r}),await this.reconnectSleep(r),!(this.stopped||t!==this.reconnectGeneration));){try{let e=await this.connectOnce();if(this.stopped||t!==this.reconnectGeneration){this.tearDownSocket();break}this.reconnecting=!1,M.info(`Leader reconnect successful`,{attempt:n,trayId:e.trayId}),this.options.onReconnected?.(e);try{this.options.onLeaderReady?.(e)}catch(e){M.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return}catch(e){i=e instanceof Error?e.message:String(e),M.warn(`Leader reconnect attempt failed`,{attempt:n,error:i}),this.tearDownSocket()}r=Math.min(r*this.reconnectBackoffMultiplier,this.reconnectMaxDelayMs)}!this.stopped&&t===this.reconnectGeneration&&(this.reconnecting=!1,this.currentSession=null,A({state:`error`,session:null,error:`Leader reconnect failed after ${n} attempts: ${i}`,reconnectAttempts:n}),M.warn(`Leader reconnect gave up`,{attempts:n,lastError:i}),this.options.onReconnectGaveUp?.(i,n))}async clearSession(){await this.store.clear()}sendControlMessage(e){if(!this.socket)throw Error(`Tray leader WebSocket is not connected`);this.socket.send(JSON.stringify(e))}async attachWithRecovery(e){try{return await this.claimLeaderSession(e)}catch(t){if(!e||!K(t))throw t;M.warn(`Stored tray session is stale, creating a fresh tray`,{trayId:e.trayId,error:t instanceof Error?t.message:String(t)}),await this.store.clear();let n=await this.claimLeaderSession(null);return this.notifyTraySuperseded(e,n.joinUrl),n}}async notifyTraySuperseded(e,t){try{let n=new URL(e.controllerUrl).pathname.split(`/`).pop();if(!n)return;let r=s(e.workerBaseUrl,`api/tray/${e.trayId}/supersede`);await this.fetchImpl(r,{method:`POST`,headers:{"content-type":`application/json`,authorization:`Bearer ${n}`},body:JSON.stringify({joinUrl:t}),signal:AbortSignal.timeout(B)})}catch(t){M.warn(`Failed to notify old tray of supersession (best-effort)`,{oldTrayId:e.trayId,error:t instanceof Error?t.message:String(t)})}}async claimLeaderSession(e){let t=e??await this.createTraySession(),n=await this.fetchJson(t.controllerUrl,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:t.controllerId,leaderKey:t.leaderKey,runtime:this.options.runtime})});if(n.role!==`leader`||!n.leaderKey||!n.websocket?.url)throw Error(`Tray attach did not return leader access for controller ${n.controllerId}`);let r={...t,trayId:n.trayId,controllerId:n.controllerId,leaderKey:n.leaderKey,leaderWebSocketUrl:n.websocket.url,runtime:this.options.runtime};return await this.store.save(r),r}async createTraySession(){let e=this.options.kind?JSON.stringify({kind:this.options.kind}):void 0,t=await this.fetchJson(s(this.options.workerBaseUrl,`tray`),{method:`POST`,...e?{headers:{"content-type":`application/json`}}:{},...e?{body:e}:{}});return{workerBaseUrl:this.options.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:crypto.randomUUID(),controllerUrl:t.capabilities.controller.url,joinUrl:t.capabilities.join.url,webhookUrl:t.capabilities.webhook.url,runtime:this.options.runtime}}async openLeaderSocket(e){return await new Promise((t,n)=>{let r=this.webSocketFactory(e),i=!1,a=setTimeout(()=>{o(`Tray leader WebSocket timed out after ${this.connectTimeoutMs}ms waiting for leader.connected`);try{r.close(1e3,`leader.connected timeout`)}catch{}},this.connectTimeoutMs),o=e=>{i||(i=!0,clearTimeout(a),n(Error(e)))};r.addEventListener(`message`,e=>{let n=q(e.data);if(n){if(n.type===`leader.connected`){i||(i=!0,clearTimeout(a),t(r));return}if(n.type===`pong`){M.debug(`Tray leader heartbeat acknowledged`,{trayId:this.currentSession?.trayId});return}this.options.onControlMessage?.(n)}}),r.addEventListener(`close`,()=>o(`Tray leader WebSocket closed before leader.connected`)),r.addEventListener(`error`,()=>o(`Tray leader WebSocket failed before leader.connected`))})}startPingLoop(e){this.pingTimer&&clearInterval(this.pingTimer);let t=t=>{this.stopped||this.socket!==e||this.handleUnexpectedDisconnect(t).catch(e=>{M.warn(`Leader reconnect loop crashed`,{error:e instanceof Error?e.message:String(e)})})},n=()=>{try{e.send(JSON.stringify({type:`ping`}))}catch(e){t(`Leader ping send failed: ${e instanceof Error?e.message:String(e)}`)}};n(),this.pingTimer=setInterval(n,this.pingIntervalMs),e.addEventListener(`close`,()=>t(`Leader WebSocket closed`)),e.addEventListener(`error`,()=>t(`Leader WebSocket errored`))}async fetchJson(e,t){let n=await this.fetchImpl(e,t);if(!n.ok)throw await W.fromResponse(n);return await n.json()}},W=class e extends Error{status;code;constructor(e,t,n){super(n),this.status=e,this.code=t,this.name=`LeaderTrayHttpError`}static async fromResponse(t){try{let n=await t.json();return new e(t.status,n.code??null,n.error??`Tray request failed (${t.status})`)}catch{return new e(t.status,null,`Tray request failed (${t.status})`)}}},G=class extends Error{constructor(e){super(e),this.name=`TrayProxyFetchError`}};function K(e){return e instanceof G?!0:e instanceof W?e.status===403||e.status===404||e.status===410||e.status>=500:!1}function q(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function J(e=fetch){return i()?(t,n)=>e(t,n):async(t,i={})=>{let s=typeof t==`string`?t:t.toString();try{if(new URL(s).origin===window.location.origin)return e(s,{...i,cache:`no-store`})}catch{}let c=new Headers(i.headers);c.set(`X-Target-URL`,s);for(let[e,t]of Object.entries(o()))c.set(e,t);let l=await e(a(`/api/fetch-proxy`),{...i,headers:c,cache:`no-store`});if(r(l))throw new G(await n(l));return l}}export{k as a,A as i,j as n,c as o,D as r,U as t};
@@ -1 +1 @@
1
- import{i as e,r as t}from"./tray-runtime-config-Bpo7AZhY.js";async function n(n,a){let o=a.getLeader()?`leader`:a.getFollower()?`follower`:`inactive`,s=a.getLeader();a.setLeader(null);let c=a.getFollower();a.setFollower(null),a.clearLeaderHooks();let{requestId:l}=n;try{s?.stop()}catch(e){a.log.error(`Leader stop threw during tray-leave — resources may have leaked`,{requestId:l,error:e instanceof Error?e.message:String(e)})}try{c?.stop()}catch(e){a.log.error(`Follower stop threw during tray-leave — resources may have leaked`,{requestId:l,error:e instanceof Error?e.message:String(e)})}if(i(()=>a.storage.removeItem(t),a.log,`join-clear`,l),n.workerBaseUrl===null)return i(()=>a.storage.removeItem(e),a.log,`worker-clear`,l),o===`inactive`?{kind:`noop`}:{kind:`left`,previousMode:o};let u=n.workerBaseUrl,d;try{d=a.startLeader(u)}catch(t){throw a.log.error(`startLeader failed during tray-leave — runtime is now dormant`,{workerBaseUrl:u,requestId:l,error:t instanceof Error?t.message:String(t)}),i(()=>a.storage.removeItem(e),a.log,`worker-clear-on-failure`,l),t}a.setLeader(d),a.wireLeaderHooks(d);try{await d.ready}catch(e){throw r(d,a,e,u,l),e}return a.getLeader()===d?(i(()=>a.storage.setItem(e,u),a.log,`worker-set`,l),{kind:`switched`,previousMode:o,workerBaseUrl:u}):(a.log.error(`Leader superseded during connect — skipping storage write`,{workerBaseUrl:u,requestId:l}),{kind:`switched`,previousMode:o,workerBaseUrl:u})}function r(t,n,r,a,o){let s=n.getLeader()===t;try{t.stop()}catch(e){n.log.error(`Leader stop threw during async-failure rollback — resources may have leaked`,{requestId:o,error:e instanceof Error?e.message:String(e)})}s&&(n.setLeader(null),n.clearLeaderHooks(),i(()=>n.storage.removeItem(e),n.log,`worker-clear-on-async-failure`,o)),n.log.error(`Leader ready failed during tray-leave — runtime is now dormant`,{workerBaseUrl:a,requestId:o,error:r instanceof Error?r.message:String(r)})}function i(e,t,n,r){try{e()}catch(e){t.error(`tray-leave storage write failed`,{kind:n,requestId:r,error:e instanceof Error?e.message:String(e)})}}export{n as performTrayLeave};
1
+ import{f as e,p as t}from"./tray-runtime-config-CluPgaPA.js";async function n(n,a){let o=a.getLeader()?`leader`:a.getFollower()?`follower`:`inactive`,s=a.getLeader();a.setLeader(null);let c=a.getFollower();a.setFollower(null),a.clearLeaderHooks();let{requestId:l}=n;try{s?.stop()}catch(e){a.log.error(`Leader stop threw during tray-leave — resources may have leaked`,{requestId:l,error:e instanceof Error?e.message:String(e)})}try{c?.stop()}catch(e){a.log.error(`Follower stop threw during tray-leave — resources may have leaked`,{requestId:l,error:e instanceof Error?e.message:String(e)})}if(i(()=>a.storage.removeItem(e),a.log,`join-clear`,l),n.workerBaseUrl===null)return i(()=>a.storage.removeItem(t),a.log,`worker-clear`,l),o===`inactive`?{kind:`noop`}:{kind:`left`,previousMode:o};let u=n.workerBaseUrl,d;try{d=a.startLeader(u)}catch(e){throw a.log.error(`startLeader failed during tray-leave — runtime is now dormant`,{workerBaseUrl:u,requestId:l,error:e instanceof Error?e.message:String(e)}),i(()=>a.storage.removeItem(t),a.log,`worker-clear-on-failure`,l),e}a.setLeader(d),a.wireLeaderHooks(d);try{await d.ready}catch(e){throw r(d,a,e,u,l),e}return a.getLeader()===d?(i(()=>a.storage.setItem(t,u),a.log,`worker-set`,l),{kind:`switched`,previousMode:o,workerBaseUrl:u}):(a.log.error(`Leader superseded during connect — skipping storage write`,{workerBaseUrl:u,requestId:l}),{kind:`switched`,previousMode:o,workerBaseUrl:u})}function r(e,n,r,a,o){let s=n.getLeader()===e;try{e.stop()}catch(e){n.log.error(`Leader stop threw during async-failure rollback — resources may have leaked`,{requestId:o,error:e instanceof Error?e.message:String(e)})}s&&(n.setLeader(null),n.clearLeaderHooks(),i(()=>n.storage.removeItem(t),n.log,`worker-clear-on-async-failure`,o)),n.log.error(`Leader ready failed during tray-leave — runtime is now dormant`,{workerBaseUrl:a,requestId:o,error:r instanceof Error?r.message:String(r)})}function i(e,t,n,r){try{e()}catch(e){t.error(`tray-leave storage write failed`,{kind:n,requestId:r,error:e instanceof Error?e.message:String(e)})}}export{n as performTrayLeave};
@@ -0,0 +1 @@
1
+ import{s as e}from"./src-CcFD5QfS.js";import"./proxied-fetch-BduXImRw.js";const t=e;export{t};
@@ -0,0 +1 @@
1
+ import{l as e,u as t}from"./src-CAWTvdAa.js";import"./proxied-fetch-CFWkfPNA.js";import{i as n,t as r}from"./api-endpoint-GRCyib6X.js";import"./messages-BD4p8GuF.js";var i=`tray`,a=`trayWorkerUrl`,o=`lead`;function s(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``,t.pathname!==`/`&&(t.pathname=t.pathname.replace(/\/+$/,``)||`/`);let n=t.toString();return n.endsWith(`/`)?n.slice(0,-1):n}catch{return null}}function c(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.toString(),r=t.pathname.split(`/`).filter(Boolean);if(r.length<2||r.at(-2)!==`join`)return null;let[i,a,...o]=decodeURIComponent(r.at(-1)).split(`.`);if(!i||!a||o.length>0)return null;r.splice(-2,2),t.pathname=r.length>0?`/${r.join(`/`)}`:`/`;let c=s(t.toString());return c?{workerBaseUrl:c,trayId:i,joinUrl:n}:null}catch{return null}}function l(e,t){let n=new URL(e);return n.searchParams.delete(a),n.searchParams.delete(o),n.searchParams.set(i,t),n.toString()}var u=`slicc.trayWorkerBaseUrl`,d=`slicc.trayJoinUrl`;function f(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.pathname.split(`/`).filter(Boolean),r=null;if(n.length>=2&&n.at(-2)===`tray`)r=decodeURIComponent(n.at(-1)),n.splice(-2,2),t.pathname=n.length>0?`/${n.join(`/`)}`:`/`;else if(n.length>=2&&n.at(-2)===`join`)return c(t.toString());let i=s(t.toString());return i?{workerBaseUrl:i,trayId:r,joinUrl:null}:null}catch{return null}}function p(e){let t=f(e);return t?.joinUrl?t:null}var m=e,h=t;function g(e,t){let n=s(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t.replace(/^\/+/,``);return new URL(r,`${n}/`).toString()}function _(e,t){let n=p(t);return n?(e.setItem(d,n.joinUrl),e.setItem(u,n.workerBaseUrl),n):null}function v(e){return!!p(e?.getItem(`slicc.trayJoinUrl`)??null)}function y(e,t){let n=!1;try{let t=new URL(e),r=t.searchParams.get(i);if(r!==null){n=!0;let e=f(r);if(e?.joinUrl)return e.joinUrl}t.searchParams.get(`slicc`)===`leader`&&(n=!0)}catch{}let r=f(e);return r?.joinUrl?r.joinUrl:(r?.trayId&&(n=!0),n?null:p(t?.getItem(`slicc.trayJoinUrl`)??null)?.joinUrl??null)}function b(e){try{let t=new URL(e);t.searchParams.delete(i);let n=t.pathname.split(`/`).filter(Boolean);return n.length>=2&&n.at(-2)===`join`&&(n.splice(-2,2),t.pathname=n.length>0?`/${n.join(`/`)}`:`/`),t.toString()}catch{return e}}function x(e,t){let n=s(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t?.trim();return r?new URL(`tray/${encodeURIComponent(r)}`,`${n}/`).toString():n}function S(e,t,n){return l(e,x(t,n))}async function C(e){let t=E(e.locationHref);if(t)return e.storage&&(t.joinUrl&&e.storage.setItem(d,t.joinUrl),e.storage.setItem(u,t.workerBaseUrl)),t;let n=p(e.storage?.getItem(`slicc.trayJoinUrl`)??null);if(n)return e.storage&&e.storage.setItem(u,n.workerBaseUrl),n;let r=e.runtimeConfigFetcher?await D(e.runtimeConfigFetcher):null;if(r?.joinConfig)return e.storage&&(e.storage.setItem(d,r.joinConfig.joinUrl),e.storage.setItem(u,r.joinConfig.workerBaseUrl)),r.joinConfig;let i=r?.workerBaseUrl??null,a=s(e.storage?.getItem(`slicc.trayWorkerBaseUrl`)??null),o=s(e.envBaseUrl??null),c=s(e.defaultWorkerBaseUrl??null),l=i??a??o??c;return l?(e.storage&&e.storage.setItem(u,l),{workerBaseUrl:l,trayId:null,joinUrl:null}):null}async function w(e){return(await C(e))?.workerBaseUrl??null}async function T(e=fetch){try{let t=await e(n(`/api/runtime-config`),{cache:`no-store`,headers:r()});return t.ok?await t.json():null}catch{return null}}function E(e){try{let t=new URL(e),n=f(t.searchParams.get(i));if(n)return n;let r=f(t.searchParams.get(o));if(r)return r;let l=s(t.searchParams.get(a));return l?{workerBaseUrl:l,trayId:null,joinUrl:null}:c(e)||null}catch{return null}}async function D(e){let t=await e();if(!t)return null;let n=p(t.trayJoinUrl??null);return{workerBaseUrl:s(t.trayWorkerBaseUrl??null),joinConfig:n}}export{T as a,C as c,b as d,d as f,s as h,g as i,w as l,p as m,h as n,v as o,u as p,S as r,y as s,m as t,_ as u};
@@ -1,2 +1,2 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{t}from"./base64-DJRlyqZu.js";import"./src-CAWTvdAa.js";import{f as n,p as r}from"./wc-follower-oauth-D15d_vbh.js";import{n as i}from"./tray-leader-B_FxjW0d.js";var a=e(`tray-sidecar`),o=`slicc-sidecar`,s=4194304,c={exec:!1},l=class{onChunk;stdout=``;stderr=``;truncated=!1;units=0;constructor(e){this.onChunk=e}push(e,t){if(!(this.truncated||t.length===0)){if(this.units+=t.length,this.units>s){this.truncated=!0;return}e===`stdout`?this.stdout+=t:this.stderr+=t,this.onChunk?.({stream:e,text:t})}}result(e,t){return{stdout:this.truncated?`${this.stdout}\n[output truncated at cap]`:this.stdout,stderr:this.stderr,exitCode:e,...t?{error:t}:{},...this.truncated?{truncated:!0}:{}}}},u=class{name;handle=null;channel=null;unsubscribe=null;listeners=new Set;dropListeners=new Set;status=null;attachedAt=Date.now();currentJoinUrl;startPromise=null;constructor(e,t){this.name=e,this.currentJoinUrl=t}statusSink={get:()=>this.status??{state:`inactive`,joinUrl:this.currentJoinUrl,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null},set:e=>{this.status=e}};get info(){let e=this.statusSink.get();return{name:this.name,joinUrl:this.currentJoinUrl,trayId:e.trayId,state:e.state,attachedAt:this.attachedAt,error:e.error}}get connected(){return this.channel!==null&&this.statusSink.get().state===`connected`}get dead(){return this.statusSink.get().state===`error`}async ready(){await(this.startPromise??Promise.resolve())}async start(e){return this.startPromise=new Promise((t,r)=>{let i=!1,a=setTimeout(()=>{i||(i=!0,this.stop(),r(Error(`timed out after ${Math.round(e/1e3)}s connecting to leader`)))},e);this.handle=n({joinUrl:this.currentJoinUrl,runtime:o,statusSink:this.statusSink,onJoinUrlChanged:e=>{this.currentJoinUrl=e}},{onConnected:e=>{this.wire(e.channel),!i&&(i=!0,clearTimeout(a),t())},onReconnecting:()=>{this.notifyDropped(`connection dropped; reconnecting`)},onGaveUp:e=>{this.notifyDropped(`reconnect gave up: ${e}`),!i&&(i=!0,clearTimeout(a),this.stop(),r(Error(e)))}})}),await this.startPromise}wire(e){let t=this.channel!==null;this.unsubscribe?.();let n=new r(e);this.channel=n,this.unsubscribe=n.onMessage(e=>this.dispatch(e)),n.send({type:`hello`,protocolVersion:7,runtime:o,capabilities:c}),a.info(t?`Sidecar reconnected`:`Sidecar attached`,{name:this.name}),t&&this.notifyDropped(`reconnected mid-request; the reply was lost`)}dispatch(e){if(e.type===`ping`){this.channel?.send({type:`pong`});return}if(e.type!==`pong`){if(e.type===`exec.request`){this.channel?.send({type:`exec.response`,requestId:e.requestId,exitCode:127,error:`slicc sidecar is a client-only attachment and does not accept exec`});return}for(let t of[...this.listeners])try{t(e)}catch(e){a.error(`Sidecar listener threw`,{name:this.name,error:e instanceof Error?e.message:String(e)})}}}send(e){return this.channel?.send(e)??!1}onMessage(e){return this.listeners.add(e),()=>this.listeners.delete(e)}onDropped(e){return this.dropListeners.add(e),()=>this.dropListeners.delete(e)}notifyDropped(e){for(let t of[...this.dropListeners])try{t(e)}catch{}}stop(){this.unsubscribe?.(),this.unsubscribe=null,this.channel?.close(),this.channel=null,this.handle?.cancel(),this.handle=null,this.notifyDropped(`detached`),this.listeners.clear(),this.dropListeners.clear()}};function d(e){let t;try{t=new URL(e)}catch{throw Error(`not a URL: ${e}`)}if(t.protocol!==`https:`&&t.protocol!==`http:`)throw Error(`join URL must be http(s): ${e}`);if(!t.pathname.includes(`/join/`))throw Error(`not a tray join URL (expected .../join/<token>): ${e}`);return t}function f(e){let t=i().session?.joinUrl;if(!t)return!1;try{let n=new URL(t);return n.origin===e.origin&&n.pathname===e.pathname}catch{return!1}}function p(e,t,n,r){return new Promise(i=>{let a=!1,o=null,s=null,c=null,l=null,u=null,d=(e,r,d)=>{a||(a=!0,c&&clearTimeout(c),l&&clearTimeout(l),o?.(),s?.(),u&&t.signal?.removeEventListener(`abort`,u),i({result:n.result(r,d),outcome:e}))},f={finish:(e,t)=>d(`complete`,e,t)};if(o=e.onMessage(e=>r(e,f)),s=e.onDropped(e=>d(`dropped`,1,`connection lost: ${e}`)),t.timeoutMs!==void 0){let e=Math.round(t.timeoutMs/1e3);c=setTimeout(()=>d(`abort`,124,`timed out after ${e}s`),t.timeoutMs)}if(t.expireMs!==void 0&&(l=setTimeout(()=>d(`expire`,0),t.expireMs)),t.signal){if(t.signal.aborted){d(`abort`,130,`interrupted`);return}u=()=>d(`abort`,130,`interrupted`),t.signal.addEventListener(`abort`,u,{once:!0})}})}var m=class{attachments=new Map;counter=0;list(){return[...this.attachments.values()].map(e=>e.info)}async attach(e){let t=d(e.joinUrl);if(f(t))throw Error(`refusing to attach to this instance's own tray — that would deadlock the leader thread`);let n=this.findByJoinUrl(t);if(n?.dead)a.info(`Replacing a dead sidecar attachment`,{name:n.name}),this.detach(n.name);else if(n){if(await n.ready(),!n.dead)return n.info;this.detach(n.name)}if(this.attachments.size>=8)throw Error(`too many sidecar attachments (8); detach one first`);let r=e.name??`slicc-${++this.counter}`;if(this.attachments.has(r))throw Error(`attachment '${r}' already exists`);let i=new u(r,t.toString());this.attachments.set(r,i);try{await i.start(e.connectTimeoutMs??3e4)}catch(e){throw this.attachments.delete(r),e}return i.info}detach(e){let t=this.attachments.get(e);return t?(t.stop(),this.attachments.delete(e),!0):!1}detachAll(){for(let e of[...this.attachments.keys()])this.detach(e)}findByJoinUrl(e){let t=`${e.origin}${e.pathname}`;return[...this.attachments.values()].find(e=>{try{let n=new URL(e.info.joinUrl);return`${n.origin}${n.pathname}`===t}catch{return!1}})}require(e){let t=this.attachments.get(e);if(!t)throw Error(`no such attachment: ${e}`);if(!t.connected)throw Error(`attachment '${e}' is not connected`);return t}async prompt(e,t,n={}){let r=this.require(e),i=new l(n.onChunk),a=!1,o=p(r,n,i,(e,t)=>{if(e.type===`agent_event`){let n=e.event;n.type===`content_delta`?i.push(`stdout`,n.text):n.type===`turn_end`?t.finish(0):n.type===`error`&&(i.push(`stderr`,`${n.error}\n`),t.finish(1));return}if(e.type===`status`){e.scoopStatus===`processing`?a=!0:a&&t.finish(0);return}e.type===`error`&&(i.push(`stderr`,`${e.error}\n`),t.finish(1))});if(!r.send({type:`user_message`,text:t,messageId:crypto.randomUUID(),...n.steer?{steer:!0}:{}}))return{stdout:``,stderr:``,exitCode:1,error:`failed to send user_message`};let{result:s,outcome:c}=await o;return c===`abort`&&r.send({type:`abort`}),s}async exec(e,n,r={}){let i=this.require(e),a=crypto.randomUUID(),o=new l(r.onChunk),s=new TextDecoder,c=new TextDecoder,u=p(i,r,o,(e,n)=>{if(e.type===`exec.chunk`&&e.requestId===a){let n;try{n=t(e.data)}catch{return}let r=e.stream===`stdout`?s:c;o.push(e.stream,r.decode(n,{stream:!0}));return}e.type===`exec.response`&&e.requestId===a&&(o.push(`stdout`,s.decode()),o.push(`stderr`,c.decode()),n.finish(e.exitCode,e.error))});if(!i.send({type:`exec.request`,requestId:a,command:n,...r.cwd?{cwd:r.cwd}:{},...r.env?{env:r.env}:{},...r.stdin?{stdin:r.stdin}:{}}))return{stdout:``,stderr:``,exitCode:1,error:`failed to send exec.request`};let{result:d,outcome:f}=await u;return f===`abort`&&i.send({type:`exec.signal`,requestId:a,signal:`SIGINT`}),d}async watch(e,t){let n=this.require(e),r=new l(t.onChunk),i=!1,{result:a}=await p(n,{...t,timeoutMs:void 0,expireMs:t.durationMs},r,(e,n)=>{if(e.type===`user_message_echo`){r.push(`stdout`,`\n> ${e.text}\n`);return}if(e.type===`agent_event`){if(t.scoopJid&&e.scoopJid!==t.scoopJid)return;r.push(`stdout`,h(e.event));return}if(e.type===`status`){if(t.scoopJid&&e.scoopJid!==t.scoopJid)return;e.scoopStatus===`processing`?i=!0:i&&t.untilIdle&&n.finish(0);return}e.type===`error`&&r.push(`stderr`,`${e.error}\n`)});return a}};function h(e){switch(e.type){case`content_delta`:return e.text;case`tool_use_start`:return`\n[tool] ${e.toolName} ${g(e.toolInput)}\n`;case`tool_result`:return`[${e.isError?`tool-error`:`tool-ok`}] ${_(e.result,200)}\n`;case`turn_end`:return`
1
+ import{t as e}from"./logger-DDBAeTLF.js";import{t}from"./base64-DJRlyqZu.js";import"./src-CAWTvdAa.js";import{f as n,p as r}from"./wc-follower-oauth-DL2btuX4.js";import{r as i}from"./tray-leader-CHHSfFEB.js";var a=e(`tray-sidecar`),o=`slicc-sidecar`,s=4194304,c={exec:!1},l=class{onChunk;stdout=``;stderr=``;truncated=!1;units=0;constructor(e){this.onChunk=e}push(e,t){if(!(this.truncated||t.length===0)){if(this.units+=t.length,this.units>s){this.truncated=!0;return}e===`stdout`?this.stdout+=t:this.stderr+=t,this.onChunk?.({stream:e,text:t})}}result(e,t){return{stdout:this.truncated?`${this.stdout}\n[output truncated at cap]`:this.stdout,stderr:this.stderr,exitCode:e,...t?{error:t}:{},...this.truncated?{truncated:!0}:{}}}},u=class{name;handle=null;channel=null;unsubscribe=null;listeners=new Set;dropListeners=new Set;status=null;attachedAt=Date.now();currentJoinUrl;startPromise=null;constructor(e,t){this.name=e,this.currentJoinUrl=t}statusSink={get:()=>this.status??{state:`inactive`,joinUrl:this.currentJoinUrl,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null},set:e=>{this.status=e}};get info(){let e=this.statusSink.get();return{name:this.name,joinUrl:this.currentJoinUrl,trayId:e.trayId,state:e.state,attachedAt:this.attachedAt,error:e.error}}get connected(){return this.channel!==null&&this.statusSink.get().state===`connected`}get dead(){return this.statusSink.get().state===`error`}async ready(){await(this.startPromise??Promise.resolve())}async start(e){return this.startPromise=new Promise((t,r)=>{let i=!1,a=setTimeout(()=>{i||(i=!0,this.stop(),r(Error(`timed out after ${Math.round(e/1e3)}s connecting to leader`)))},e);this.handle=n({joinUrl:this.currentJoinUrl,runtime:o,statusSink:this.statusSink,onJoinUrlChanged:e=>{this.currentJoinUrl=e}},{onConnected:e=>{this.wire(e.channel),!i&&(i=!0,clearTimeout(a),t())},onReconnecting:()=>{this.notifyDropped(`connection dropped; reconnecting`)},onGaveUp:e=>{this.notifyDropped(`reconnect gave up: ${e}`),!i&&(i=!0,clearTimeout(a),this.stop(),r(Error(e)))}})}),await this.startPromise}wire(e){let t=this.channel!==null;this.unsubscribe?.();let n=new r(e);this.channel=n,this.unsubscribe=n.onMessage(e=>this.dispatch(e)),n.send({type:`hello`,protocolVersion:7,runtime:o,capabilities:c}),a.info(t?`Sidecar reconnected`:`Sidecar attached`,{name:this.name}),t&&this.notifyDropped(`reconnected mid-request; the reply was lost`)}dispatch(e){if(e.type===`ping`){this.channel?.send({type:`pong`});return}if(e.type!==`pong`){if(e.type===`exec.request`){this.channel?.send({type:`exec.response`,requestId:e.requestId,exitCode:127,error:`slicc sidecar is a client-only attachment and does not accept exec`});return}for(let t of[...this.listeners])try{t(e)}catch(e){a.error(`Sidecar listener threw`,{name:this.name,error:e instanceof Error?e.message:String(e)})}}}send(e){return this.channel?.send(e)??!1}onMessage(e){return this.listeners.add(e),()=>this.listeners.delete(e)}onDropped(e){return this.dropListeners.add(e),()=>this.dropListeners.delete(e)}notifyDropped(e){for(let t of[...this.dropListeners])try{t(e)}catch{}}stop(){this.unsubscribe?.(),this.unsubscribe=null,this.channel?.close(),this.channel=null,this.handle?.cancel(),this.handle=null,this.notifyDropped(`detached`),this.listeners.clear(),this.dropListeners.clear()}};function d(e){let t;try{t=new URL(e)}catch{throw Error(`not a URL: ${e}`)}if(t.protocol!==`https:`&&t.protocol!==`http:`)throw Error(`join URL must be http(s): ${e}`);if(!t.pathname.includes(`/join/`))throw Error(`not a tray join URL (expected .../join/<token>): ${e}`);return t}function f(e){let t=i().session?.joinUrl;if(!t)return!1;try{let n=new URL(t);return n.origin===e.origin&&n.pathname===e.pathname}catch{return!1}}function p(e,t,n,r){return new Promise(i=>{let a=!1,o=null,s=null,c=null,l=null,u=null,d=(e,r,d)=>{a||(a=!0,c&&clearTimeout(c),l&&clearTimeout(l),o?.(),s?.(),u&&t.signal?.removeEventListener(`abort`,u),i({result:n.result(r,d),outcome:e}))},f={finish:(e,t)=>d(`complete`,e,t)};if(o=e.onMessage(e=>r(e,f)),s=e.onDropped(e=>d(`dropped`,1,`connection lost: ${e}`)),t.timeoutMs!==void 0){let e=Math.round(t.timeoutMs/1e3);c=setTimeout(()=>d(`abort`,124,`timed out after ${e}s`),t.timeoutMs)}if(t.expireMs!==void 0&&(l=setTimeout(()=>d(`expire`,0),t.expireMs)),t.signal){if(t.signal.aborted){d(`abort`,130,`interrupted`);return}u=()=>d(`abort`,130,`interrupted`),t.signal.addEventListener(`abort`,u,{once:!0})}})}var m=class{attachments=new Map;counter=0;list(){return[...this.attachments.values()].map(e=>e.info)}async attach(e){let t=d(e.joinUrl);if(f(t))throw Error(`refusing to attach to this instance's own tray — that would deadlock the leader thread`);let n=this.findByJoinUrl(t);if(n?.dead)a.info(`Replacing a dead sidecar attachment`,{name:n.name}),this.detach(n.name);else if(n){if(await n.ready(),!n.dead)return n.info;this.detach(n.name)}if(this.attachments.size>=8)throw Error(`too many sidecar attachments (8); detach one first`);let r=e.name??`slicc-${++this.counter}`;if(this.attachments.has(r))throw Error(`attachment '${r}' already exists`);let i=new u(r,t.toString());this.attachments.set(r,i);try{await i.start(e.connectTimeoutMs??3e4)}catch(e){throw this.attachments.delete(r),e}return i.info}detach(e){let t=this.attachments.get(e);return t?(t.stop(),this.attachments.delete(e),!0):!1}detachAll(){for(let e of[...this.attachments.keys()])this.detach(e)}findByJoinUrl(e){let t=`${e.origin}${e.pathname}`;return[...this.attachments.values()].find(e=>{try{let n=new URL(e.info.joinUrl);return`${n.origin}${n.pathname}`===t}catch{return!1}})}require(e){let t=this.attachments.get(e);if(!t)throw Error(`no such attachment: ${e}`);if(!t.connected)throw Error(`attachment '${e}' is not connected`);return t}async prompt(e,t,n={}){let r=this.require(e),i=new l(n.onChunk),a=!1,o=p(r,n,i,(e,t)=>{if(e.type===`agent_event`){let n=e.event;n.type===`content_delta`?i.push(`stdout`,n.text):n.type===`turn_end`?t.finish(0):n.type===`error`&&(i.push(`stderr`,`${n.error}\n`),t.finish(1));return}if(e.type===`status`){e.scoopStatus===`processing`?a=!0:a&&t.finish(0);return}e.type===`error`&&(i.push(`stderr`,`${e.error}\n`),t.finish(1))});if(!r.send({type:`user_message`,text:t,messageId:crypto.randomUUID(),...n.steer?{steer:!0}:{}}))return{stdout:``,stderr:``,exitCode:1,error:`failed to send user_message`};let{result:s,outcome:c}=await o;return c===`abort`&&r.send({type:`abort`}),s}async exec(e,n,r={}){let i=this.require(e),a=crypto.randomUUID(),o=new l(r.onChunk),s=new TextDecoder,c=new TextDecoder,u=p(i,r,o,(e,n)=>{if(e.type===`exec.chunk`&&e.requestId===a){let n;try{n=t(e.data)}catch{return}let r=e.stream===`stdout`?s:c;o.push(e.stream,r.decode(n,{stream:!0}));return}e.type===`exec.response`&&e.requestId===a&&(o.push(`stdout`,s.decode()),o.push(`stderr`,c.decode()),n.finish(e.exitCode,e.error))});if(!i.send({type:`exec.request`,requestId:a,command:n,...r.cwd?{cwd:r.cwd}:{},...r.env?{env:r.env}:{},...r.stdin?{stdin:r.stdin}:{}}))return{stdout:``,stderr:``,exitCode:1,error:`failed to send exec.request`};let{result:d,outcome:f}=await u;return f===`abort`&&i.send({type:`exec.signal`,requestId:a,signal:`SIGINT`}),d}async watch(e,t){let n=this.require(e),r=new l(t.onChunk),i=!1,{result:a}=await p(n,{...t,timeoutMs:void 0,expireMs:t.durationMs},r,(e,n)=>{if(e.type===`user_message_echo`){r.push(`stdout`,`\n> ${e.text}\n`);return}if(e.type===`agent_event`){if(t.scoopJid&&e.scoopJid!==t.scoopJid)return;r.push(`stdout`,h(e.event));return}if(e.type===`status`){if(t.scoopJid&&e.scoopJid!==t.scoopJid)return;e.scoopStatus===`processing`?i=!0:i&&t.untilIdle&&n.finish(0);return}e.type===`error`&&r.push(`stderr`,`${e.error}\n`)});return a}};function h(e){switch(e.type){case`content_delta`:return e.text;case`tool_use_start`:return`\n[tool] ${e.toolName} ${g(e.toolInput)}\n`;case`tool_result`:return`[${e.isError?`tool-error`:`tool-ok`}] ${_(e.result,200)}\n`;case`turn_end`:return`
2
2
  `;case`error`:return`[error] ${e.error}\n`;default:return``}}function g(e){if(e==null)return``;try{return _(JSON.stringify(e),120)}catch{return``}}function _(e,t){let n=e.replace(/\s+/g,` `).trim();return n.length<=t?n:`${n.slice(0,t-1)}…`}export{m as SidecarRegistry};
@@ -0,0 +1 @@
1
+ function e(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``,t.pathname!==`/`&&(t.pathname=t.pathname.replace(/\/+$/,``)||`/`);let n=t.toString();return n.endsWith(`/`)?n.slice(0,-1):n}catch{return null}}function t(t){if(!t)return null;try{let n=new URL(t.trim());n.search=``,n.hash=``;let r=n.toString(),i=n.pathname.split(`/`).filter(Boolean);if(i.length<2||i.at(-2)!==`join`)return null;let[a,o,...s]=decodeURIComponent(i.at(-1)).split(`.`);if(!a||!o||s.length>0)return null;i.splice(-2,2),n.pathname=i.length>0?`/${i.join(`/`)}`:`/`;let c=e(n.toString());return c?{workerBaseUrl:c,trayId:a,joinUrl:r}:null}catch{return null}}const n=`slicc.trayWorkerBaseUrl`,r=`slicc.trayJoinUrl`;function i(n){if(!n)return null;try{let r=new URL(n.trim());r.search=``,r.hash=``;let i=r.pathname.split(`/`).filter(Boolean),a=null;if(i.length>=2&&i.at(-2)===`tray`)a=decodeURIComponent(i.at(-1)),i.splice(-2,2),r.pathname=i.length>0?`/${i.join(`/`)}`:`/`;else if(i.length>=2&&i.at(-2)===`join`)return t(r.toString());let o=e(r.toString());return o?{workerBaseUrl:o,trayId:a,joinUrl:null}:null}catch{return null}}function a(e){let t=i(e);return t?.joinUrl?t:null}export{e as i,n,a as r,r as t};
@@ -1 +1 @@
1
- import{D as e,g as t}from"./db-DSIYsBgP.js";import{n}from"./slicc-version-BrPYMXS9.js";const r=`slicc:last-seen-version`;function i(){let{version:e,releasedAt:t}=n();return{version:e,releasedAt:t}}async function a(){let e=await t(r);return e&&e.length>0?e:null}async function o(t){await e(r,t)}async function s(){let e=i(),t=await a();return t===null?(await o(e.version),{bundled:e,lastSeen:null,isUpgrade:!1}):t===e.version?{bundled:e,lastSeen:t,isUpgrade:!1}:{bundled:e,lastSeen:t,isUpgrade:!0}}async function c(e){await o(e)}export{s as detectUpgrade,a as getLastSeenVersion,c as recordVersionSeen};
1
+ import{D as e,g as t}from"./db-DSIYsBgP.js";import{n}from"./slicc-version-CE2qd08F.js";const r=`slicc:last-seen-version`;function i(){let{version:e,releasedAt:t}=n();return{version:e,releasedAt:t}}async function a(){let e=await t(r);return e&&e.length>0?e:null}async function o(t){await e(r,t)}async function s(){let e=i(),t=await a();return t===null?(await o(e.version),{bundled:e,lastSeen:null,isUpgrade:!1}):t===e.version?{bundled:e,lastSeen:t,isUpgrade:!1}:{bundled:e,lastSeen:t,isUpgrade:!0}}async function c(e){await o(e)}export{s as detectUpgrade,a as getLastSeenVersion,c as recordVersionSeen};
@@ -1 +1 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{Y as t,q as n}from"./wc-shell-WlrdsROD.js";import{hasVoiceForLang as r,speak as i,speechTextFromMarkdown as a}from"./speak-DW89OFqf.js";var o=e(`speech:voice-reply`),s=0;function c(){s++}function l(){return s<=0?!1:(s--,!0)}async function u(e,s=i,c=r){let l=n(e);if(l&&!await c(l))return;let u=a(t(e));if(u)try{await s(l?{text:u,lang:l}:{text:u})}catch(e){o.warn(`spoken reply failed`,e)}}export{l as consumeVoiceSubmission,c as markVoiceSubmission,u as speakReplyMarkdown};
1
+ import{t as e}from"./logger-DDBAeTLF.js";import{Y as t,q as n}from"./wc-shell-BU2i4AQi.js";import{hasVoiceForLang as r,speak as i,speechTextFromMarkdown as a}from"./speak-DW89OFqf.js";var o=e(`speech:voice-reply`),s=0;function c(){s++}function l(){return s<=0?!1:(s--,!0)}async function u(e,s=i,c=r){let l=n(e);if(l&&!await c(l))return;let u=a(t(e));if(u)try{await s(l?{text:u,lang:l}:{text:u})}catch(e){o.warn(`spoken reply failed`,e)}}export{l as consumeVoiceSubmission,c as markVoiceSubmission,u as speakReplyMarkdown};
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-shell-WlrdsROD.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/mime-types-k2E6ulyv.js","assets/base64-DJRlyqZu.js","assets/src-CAWTvdAa.js","assets/image-markers-CxJ9ZBgw.js","assets/telemetry-BVzuNdvW.js","assets/runtime-env-Dlaokqg1.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/html-B_Hg2WOy.js","assets/icons-ZLR7gmJ4.js","assets/speech-C5U8h4In.js","assets/soundscape-cues-5_sT5Un6.js","assets/wc-shell-WkeczD9x.css"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-shell-BU2i4AQi.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/mime-types-k2E6ulyv.js","assets/base64-DJRlyqZu.js","assets/src-CAWTvdAa.js","assets/image-markers-CxJ9ZBgw.js","assets/telemetry-BVzuNdvW.js","assets/runtime-env-Dlaokqg1.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/html-B_Hg2WOy.js","assets/icons-ZLR7gmJ4.js","assets/speech-C5U8h4In.js","assets/soundscape-cues-5_sT5Un6.js","assets/wc-shell-WkeczD9x.css"])))=>i.map(i=>d[i]);
2
2
  import{t as e}from"./preload-helper-Czpn1I53.js";import{r as t,t as n}from"./base64-DJRlyqZu.js";import"./src-CAWTvdAa.js";import{t as r}from"./permissions-surface-registry-CilCRwhh.js";var i=8,a=2e3,o=[`/workspace`,`/shared`,`/tmp`],s=8,c=new Set([`node_modules`,`.git`]),l=1e4,u=/\.(png|jpe?g|gif|webp|svg|avif)$/i,d=4194304,f=262144;function p(){return`att-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function m(e){return{png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`,avif:`image/avif`,md:`text/markdown`,json:`application/json`}[e.toLowerCase().split(`.`).pop()??``]??`text/plain`}function h(e,n){let r={id:p(),name:e,size:n.length};if(u.test(e))return n.length>d?{...r,mimeType:m(e),kind:`image`,error:`image too large to inline`}:{...r,mimeType:m(e),kind:`image`,data:t(n)};let i={...r,mimeType:m(e),kind:`file`};return n.length>f?{...i,error:`file too large to inline`}:i}async function g(e){let t=new Uint8Array(await e.arrayBuffer()),n=h(e.name,t);return e.type?{...n,mimeType:e.type}:n}function _(e,t){let n=t.match(/^data:(image\/[^;]+);base64,(.+)$/);return n?{id:p(),name:e,mimeType:n[1],size:Math.floor(n[2].length*3/4),kind:`image`,data:n[2]}:null}var v=`/tmp/upload`,y=1568;async function b(e,t,n){await e.mkdir(v,{recursive:!0}).catch(()=>void 0);let r=`${v}/${Date.now()}-${t.replace(/[^A-Za-z0-9._-]+/g,`_`)}`;return await e.writeFile(r,n),r}async function x(e,t=y){let n=new Image;n.src=e;try{await n.decode()}catch{return e}let r=Math.min(1,t/Math.max(n.naturalWidth,n.naturalHeight,1));if(r>=1)return e;let i=document.createElement(`canvas`);return i.width=Math.round(n.naturalWidth*r),i.height=Math.round(n.naturalHeight*r),i.getContext(`2d`)?.drawImage(n,0,0,i.width,i.height),i.toDataURL(`image/jpeg`,.85)}async function S(e,t,r){let i=_(e,t);if(!i)return null;let a;return r&&i.data&&(a=await b(r,e,n(i.data)).catch(()=>void 0)),{..._(e,await x(t).catch(()=>t))??i,name:e,path:a}}async function C(e,t,n){if(!n)return null;let r=new Uint8Array(await t.arrayBuffer()),i=await b(n,e,r).catch(()=>void 0);return i?{id:p(),name:e,mimeType:t.type||`video/webm`,size:r.length,kind:`file`,path:i}:null}async function w(e){let t=[],n=o.map(e=>({dir:e,depth:0}));for(;n.length>0&&t.length<a;){let{dir:r,depth:i}=n.shift(),o;try{o=await e.readDir(r)}catch{continue}for(let e of o){let o=`${r}/${e.name}`;if(e.type===`directory`)i<s&&!c.has(e.name)&&n.push({dir:o,depth:i+1});else if(t.push(o),t.length>=a)break}}return t}function T(e){let t=null;return async n=>{let r=await e.openReader();(!t||Date.now()-t.at>l)&&(t={at:Date.now(),paths:await w(r)});let a=e=>n===``||e.toLowerCase().includes(n),o=t.paths.filter(e=>a(e)).slice(0,i).map(e=>({id:e,label:e.split(`/`).pop()??e,sub:e.slice(0,e.lastIndexOf(`/`))})),s=[];try{s=(await r.readDir(`/workspace/skills`)).filter(e=>e.type===`directory`&&a(e.name)).slice(0,i).map(e=>({id:e.name,label:e.name}))}catch{}let c=(await e.listConversations().catch(()=>[])).filter(e=>a(e.label)).slice(0,i);return[{kind:`file`,label:`Files`,icon:`file`,entries:o},{kind:`skill`,label:`Skills`,icon:`sparkles`,entries:s},{kind:`conversation`,label:`Conversations`,icon:`message-square`,entries:c}]}}var E=`slicc-wc-attach-style`,D=`
3
3
  .wcatt{display:flex;flex-wrap:wrap;gap:6px;padding:8px 10px 0;font-family:var(--ui);}
4
4
  .wcatt:empty{display:none;}
@@ -10,4 +10,4 @@ import{t as e}from"./preload-helper-Czpn1I53.js";import{r as t,t as n}from"./bas
10
10
  .wcatt__x{appearance:none;background:none;border:none;cursor:pointer;color:var(--txt-3);
11
11
  font:inherit;padding:0;line-height:1;}
12
12
  .wcatt__x:hover{color:var(--ink);}
13
- `,O=class{#e;#t=[];constructor(e){if(!document.getElementById(E)){let e=document.createElement(`style`);e.id=E,e.textContent=D,document.head.appendChild(e)}this.#e=document.createElement(`div`),this.#e.className=`wcatt`,e.prepend(this.#e)}get items(){return this.#t}add(e){this.#t.push(e),this.#n()}take(){let e=this.#t;return this.#t=[],this.#n(),e}#n(){this.#e.replaceChildren(...this.#t.map(e=>this.#r(e)))}#r(t){let n=document.createElement(`span`);if(n.className=`wcatt__chip`,t.kind===`image`&&t.data){let r=document.createElement(`img`);r.className=`wcatt__thumb`,r.src=`data:${t.mimeType};base64,${t.data}`,r.alt=t.name,r.addEventListener(`click`,()=>{e(async()=>{let{SliccImagePreview:e}=await import(`./wc-shell-WlrdsROD.js`).then(e=>e.D);return{SliccImagePreview:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])).then(({SliccImagePreview:e})=>e.show(r.src,r))}),n.append(r)}let r=document.createElement(`span`);r.className=`wcatt__name`,r.textContent=t.name;let i=document.createElement(`button`);return i.type=`button`,i.className=`wcatt__x`,i.setAttribute(`aria-label`,`Remove ${t.name}`),i.textContent=`×`,i.addEventListener(`click`,()=>{this.#t=this.#t.filter(e=>e.id!==t.id),this.#n()}),n.append(r,i),n}};async function k(e){let t=document.createElement(`video`);t.srcObject=e,t.muted=!0;try{await t.play(),await new Promise(e=>requestAnimationFrame(()=>e(null)));let e=document.createElement(`canvas`);return e.width=t.videoWidth,e.height=t.videoHeight,e.width===0||e.height===0?null:(e.getContext(`2d`)?.drawImage(t,0,0),e.toDataURL(`image/png`))}finally{for(let t of e.getTracks())t.stop();t.srcObject=null}}async function A(){let e=r();if(e){let t=await e.request(`screenshare`,{constraints:{video:!0}});if(!t)return null;let n=t.stream;return k(n)}return k(await navigator.mediaDevices.getDisplayMedia({video:!0}))}async function j(e,t){let n=r();if(!n)return null;let i=await n.prompt({kinds:e,description:t,skipIfGranted:!0});for(let e of i.grants)if(e.kind===`camera`||e.kind===`microphone`||e.kind===`screenshare`)for(let t of e.stream.getTracks())t.stop();return i.status===`granted`}var M=`slicc_camera_device`,N=`slicc_microphone_device`,P=[`position:absolute`,`left:50%`,`right:auto`,`transform:translateX(-50%)`,`bottom:56px`,`width:calc(100% - 32px)`,`max-width:680px`,`z-index:3`].join(`;`);async function F(e,t){if(await j([`camera`,`microphone`],`Slicc is requesting access to your camera and microphone to capture a photo or video for this conversation.`)===!1)return null;let n=document.createElement(`slicc-composer-capture`),r=localStorage.getItem(M);r&&n.setAttribute(`preferred-device`,r);let i=localStorage.getItem(N);i&&n.setAttribute(`preferred-audio-device`,i),n.style.cssText=P,n.hidden=!0,n.addEventListener(`slicc-capture-device-change`,e=>{let t=e.detail;if(!t?.deviceId)return;let n=t.kind===`microphone`?N:M;localStorage.setItem(n,t.deviceId)}),e.append(n);try{return await n.open(t)}finally{n.remove()}}async function I(e,t,n){if(!e.dataUrl)return;let r=`photo-${Date.now()}.png`,i=await t.openWriter?.().catch(()=>null)??null,a=await S(r,e.dataUrl,i);a&&n.add(a)}async function L(e,t,n){if(!e.blob)return;let r=/webm/i.test(e.mimeType)?`webm`:`bin`,i=`video-${Date.now()}.${r}`,a=await t.openWriter?.().catch(()=>null)??null,o=await C(i,e.blob,a);o&&n.add(o)}async function R(e,t,n){if(e.mode===`photo`){if(!t.composer){let e=await z();if(!e)return;let r=await S(`photo-${Date.now()}.png`,e,await t.openWriter?.().catch(()=>null)??null);r&&n.add(r);return}let e=await F(t.composer,`photo`);if(!e)return;e.kind===`image`?await I(e,t,n):e.kind===`video`&&await L(e,t,n);return}let r=await A();if(!r)return;let i=await S(`screenshot-${Date.now()}.png`,r,await t.openWriter?.().catch(()=>null)??null);i&&n.add(i)}async function z(){if(await j([`camera`],`Slicc is requesting access to your camera to capture a photo for this conversation.`)===!1)return null;let e=document.createElement(`slicc-camera-dialog`),t=localStorage.getItem(M);t&&e.setAttribute(`preferred-device`,t),e.addEventListener(`slicc-camera-device-change`,e=>{let t=e.detail?.deviceId;t&&localStorage.setItem(M,t)}),document.body.append(e);try{return await e.open()}finally{e.remove()}}async function B(e,t,n){let r=await n.openWriter?.().catch(()=>null)??null,i=r?await b(r,e.name,t).catch(()=>void 0):void 0;return i?{...e,error:void 0,path:i}:e.kind===`image`?e:{...e,error:`could not be saved to the virtual filesystem`}}async function V(e,t,n){let r=e.split(`/`).pop()??e;if(u.test(r)){let i=await(await t()).readFile(e),a=h(r,typeof i==`string`?new TextEncoder().encode(i):i);n.add({...a,error:void 0,path:e});return}let i=0;try{i=(await(await t()).stat(e)).size}catch{}n.add({id:p(),name:r,mimeType:m(r),size:i,kind:`file`,path:e})}function H(e,t){let n=t.value??t.getAttribute(`value`)??``,r=n&&!n.endsWith(` `)?` `:``;t.setAttribute(`value`,`${n}${r}Use the "${e}" skill: `)}function U(e){return e?.name===`NotAllowedError`}async function W(e,t,n){if(e.kind===`upload`&&e.file instanceof File){let r=new Uint8Array(await e.file.arrayBuffer());n.add(await B(await g(e.file),r,t))}else e.kind===`capture`?await R(e,t,n):e.kind===`file`&&typeof e.id==`string`&&t.openReader?await V(e.id,t.openReader,n):e.kind===`skill`&&typeof e.label==`string`?H(e.label,t.inputCard):e.kind===`conversation`&&typeof e.id==`string`&&t.freezer.dispatchEvent(new CustomEvent(`freezer-card-select`,{bubbles:!0,composed:!0,detail:{slug:e.id}}))}function G(e){let{inputCard:t,log:n}=e,r=new O(t),i=t.querySelector(`slicc-add-menu`);return i&&(e.openReader?i.provider=T({openReader:e.openReader,listConversations:e.listConversations??(async()=>[])}):i.results=[],i.setAttribute(`global-drop`,``),e.noCamera&&i.setAttribute(`no-camera`,``)),t.addEventListener(`slicc-add`,t=>{let i=t.detail;i&&W(i,e,r).catch(e=>{U(e)||n.error(`WC add-menu action failed`,e)})}),t.addEventListener(`paste`,t=>{let i=t.clipboardData?.items;if(i)for(let a of Array.from(i)){if(!a.type.startsWith(`image/`))continue;let i=a.getAsFile();if(!i)continue;t.preventDefault();let o=(i.type.split(`/`)[1]||`png`).replace(/[^a-z0-9]/gi,``)||`png`,s=i.name?i:new File([i],`pasted-image.${o}`,{type:i.type});W({kind:`upload`,name:s.name,size:s.size,file:s},e,r).catch(e=>n.error(`Paste image failed`,e))}}),r}export{G as wireWcAttach};
13
+ `,O=class{#e;#t=[];constructor(e){if(!document.getElementById(E)){let e=document.createElement(`style`);e.id=E,e.textContent=D,document.head.appendChild(e)}this.#e=document.createElement(`div`),this.#e.className=`wcatt`,e.prepend(this.#e)}get items(){return this.#t}add(e){this.#t.push(e),this.#n()}take(){let e=this.#t;return this.#t=[],this.#n(),e}#n(){this.#e.replaceChildren(...this.#t.map(e=>this.#r(e)))}#r(t){let n=document.createElement(`span`);if(n.className=`wcatt__chip`,t.kind===`image`&&t.data){let r=document.createElement(`img`);r.className=`wcatt__thumb`,r.src=`data:${t.mimeType};base64,${t.data}`,r.alt=t.name,r.addEventListener(`click`,()=>{e(async()=>{let{SliccImagePreview:e}=await import(`./wc-shell-BU2i4AQi.js`).then(e=>e.D);return{SliccImagePreview:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])).then(({SliccImagePreview:e})=>e.show(r.src,r))}),n.append(r)}let r=document.createElement(`span`);r.className=`wcatt__name`,r.textContent=t.name;let i=document.createElement(`button`);return i.type=`button`,i.className=`wcatt__x`,i.setAttribute(`aria-label`,`Remove ${t.name}`),i.textContent=`×`,i.addEventListener(`click`,()=>{this.#t=this.#t.filter(e=>e.id!==t.id),this.#n()}),n.append(r,i),n}};async function k(e){let t=document.createElement(`video`);t.srcObject=e,t.muted=!0;try{await t.play(),await new Promise(e=>requestAnimationFrame(()=>e(null)));let e=document.createElement(`canvas`);return e.width=t.videoWidth,e.height=t.videoHeight,e.width===0||e.height===0?null:(e.getContext(`2d`)?.drawImage(t,0,0),e.toDataURL(`image/png`))}finally{for(let t of e.getTracks())t.stop();t.srcObject=null}}async function A(){let e=r();if(e){let t=await e.request(`screenshare`,{constraints:{video:!0}});if(!t)return null;let n=t.stream;return k(n)}return k(await navigator.mediaDevices.getDisplayMedia({video:!0}))}async function j(e,t){let n=r();if(!n)return null;let i=await n.prompt({kinds:e,description:t,skipIfGranted:!0});for(let e of i.grants)if(e.kind===`camera`||e.kind===`microphone`||e.kind===`screenshare`)for(let t of e.stream.getTracks())t.stop();return i.status===`granted`}var M=`slicc_camera_device`,N=`slicc_microphone_device`,P=[`position:absolute`,`left:50%`,`right:auto`,`transform:translateX(-50%)`,`bottom:56px`,`width:calc(100% - 32px)`,`max-width:680px`,`z-index:3`].join(`;`);async function F(e,t){if(await j([`camera`,`microphone`],`Slicc is requesting access to your camera and microphone to capture a photo or video for this conversation.`)===!1)return null;let n=document.createElement(`slicc-composer-capture`),r=localStorage.getItem(M);r&&n.setAttribute(`preferred-device`,r);let i=localStorage.getItem(N);i&&n.setAttribute(`preferred-audio-device`,i),n.style.cssText=P,n.hidden=!0,n.addEventListener(`slicc-capture-device-change`,e=>{let t=e.detail;if(!t?.deviceId)return;let n=t.kind===`microphone`?N:M;localStorage.setItem(n,t.deviceId)}),e.append(n);try{return await n.open(t)}finally{n.remove()}}async function I(e,t,n){if(!e.dataUrl)return;let r=`photo-${Date.now()}.png`,i=await t.openWriter?.().catch(()=>null)??null,a=await S(r,e.dataUrl,i);a&&n.add(a)}async function L(e,t,n){if(!e.blob)return;let r=/webm/i.test(e.mimeType)?`webm`:`bin`,i=`video-${Date.now()}.${r}`,a=await t.openWriter?.().catch(()=>null)??null,o=await C(i,e.blob,a);o&&n.add(o)}async function R(e,t,n){if(e.mode===`photo`){if(!t.composer){let e=await z();if(!e)return;let r=await S(`photo-${Date.now()}.png`,e,await t.openWriter?.().catch(()=>null)??null);r&&n.add(r);return}let e=await F(t.composer,`photo`);if(!e)return;e.kind===`image`?await I(e,t,n):e.kind===`video`&&await L(e,t,n);return}let r=await A();if(!r)return;let i=await S(`screenshot-${Date.now()}.png`,r,await t.openWriter?.().catch(()=>null)??null);i&&n.add(i)}async function z(){if(await j([`camera`],`Slicc is requesting access to your camera to capture a photo for this conversation.`)===!1)return null;let e=document.createElement(`slicc-camera-dialog`),t=localStorage.getItem(M);t&&e.setAttribute(`preferred-device`,t),e.addEventListener(`slicc-camera-device-change`,e=>{let t=e.detail?.deviceId;t&&localStorage.setItem(M,t)}),document.body.append(e);try{return await e.open()}finally{e.remove()}}async function B(e,t,n){let r=await n.openWriter?.().catch(()=>null)??null,i=r?await b(r,e.name,t).catch(()=>void 0):void 0;return i?{...e,error:void 0,path:i}:e.kind===`image`?e:{...e,error:`could not be saved to the virtual filesystem`}}async function V(e,t,n){let r=e.split(`/`).pop()??e;if(u.test(r)){let i=await(await t()).readFile(e),a=h(r,typeof i==`string`?new TextEncoder().encode(i):i);n.add({...a,error:void 0,path:e});return}let i=0;try{i=(await(await t()).stat(e)).size}catch{}n.add({id:p(),name:r,mimeType:m(r),size:i,kind:`file`,path:e})}function H(e,t){let n=t.value??t.getAttribute(`value`)??``,r=n&&!n.endsWith(` `)?` `:``;t.setAttribute(`value`,`${n}${r}Use the "${e}" skill: `)}function U(e){return e?.name===`NotAllowedError`}async function W(e,t,n){if(e.kind===`upload`&&e.file instanceof File){let r=new Uint8Array(await e.file.arrayBuffer());n.add(await B(await g(e.file),r,t))}else e.kind===`capture`?await R(e,t,n):e.kind===`file`&&typeof e.id==`string`&&t.openReader?await V(e.id,t.openReader,n):e.kind===`skill`&&typeof e.label==`string`?H(e.label,t.inputCard):e.kind===`conversation`&&typeof e.id==`string`&&t.freezer.dispatchEvent(new CustomEvent(`freezer-card-select`,{bubbles:!0,composed:!0,detail:{slug:e.id}}))}function G(e){let{inputCard:t,log:n}=e,r=new O(t),i=t.querySelector(`slicc-add-menu`);return i&&(e.openReader?i.provider=T({openReader:e.openReader,listConversations:e.listConversations??(async()=>[])}):i.results=[],i.setAttribute(`global-drop`,``),e.noCamera&&i.setAttribute(`no-camera`,``)),t.addEventListener(`slicc-add`,t=>{let i=t.detail;i&&W(i,e,r).catch(e=>{U(e)||n.error(`WC add-menu action failed`,e)})}),t.addEventListener(`paste`,t=>{let i=t.clipboardData?.items;if(i)for(let a of Array.from(i)){if(!a.type.startsWith(`image/`))continue;let i=a.getAsFile();if(!i)continue;t.preventDefault();let o=(i.type.split(`/`)[1]||`png`).replace(/[^a-z0-9]/gi,``)||`png`,s=i.name?i:new File([i],`pasted-image.${o}`,{type:i.type});W({kind:`upload`,name:s.name,size:s.size,file:s},e,r).catch(e=>n.error(`Paste image failed`,e))}}),r}export{G as wireWcAttach};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/main-Cj0dR__R.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/modulepreload-polyfill-P2Xu9kJm.js","assets/account-store-8BBweMEe.js","assets/preload-helper-Czpn1I53.js","assets/claude-model-version-C0HLsjny.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-BxrUfzom.js","assets/libesm-BypnjKEL.js","assets/logger-DDBAeTLF.js","assets/src-CAWTvdAa.js","assets/proxied-fetch-CFWkfPNA.js","assets/base64-DJRlyqZu.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/api-endpoint-GRCyib6X.js","assets/float-topology-BYb7rxY5.js","assets/runtime-env-E-i2SW1s.js","assets/secret-topology-BE7Eyd3P.js","assets/secrets-bridge-client-H8-Z1RVR.js","assets/port-bridge-client-Cti-DmEY.js","assets/image-markers-CxJ9ZBgw.js","assets/tool-ui-DCY2mIe9.js","assets/tool-ui-DfXu6quJ.js","assets/providers-DpEbKMV3.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-CgBMwna8.js","assets/runtime-env-CgsZ7LTp.js","assets/telemetry-BVzuNdvW.js","assets/messages-BD4p8GuF.js","assets/feature-flags-ByMXaIc4.js","assets/tray-runtime-config-CluPgaPA.js","assets/tray-follower-status-BAjnN7Ar.js","assets/clipboard-eqmn97SP.js","assets/tray-join-url-BIvzbiFR.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./preload-helper-Czpn1I53.js";import{n as t,t as n,v as r,y as i}from"./wc-live-D9C2qb2I.js";import{wireWcDetached as a}from"./wc-detached-B3WCbbZT.js";import{floatLabelForKind as o}from"./wc-float-label-BLvU2814.js";import{installFloatbarStatus as s}from"./wc-floatbar-online-WxVLXUuL.js";async function c(c,l,u=!1){let d=`extension`,f=t(c,o(d));s(f.refs.floatbar,{floatKind:d});let p=new i(r(f.wiring));n(f,p,l),a({client:p,isDetachedSelf:u});let{setupSudoExtension:m}=await e(async()=>{let{setupSudoExtension:e}=await import(`./main-Cj0dR__R.js`).then(e=>e.i);return{setupSudoExtension:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]));await m({log:l}),p.requestState(),l.info(`WC extension shell connected to offscreen engine`)}export{c as mountWcUiExtension};
@@ -1 +1 @@
1
- import{O as e}from"./wc-shell-WlrdsROD.js";import"./proxied-fetch-CFWkfPNA.js";import{i as t,t as n}from"./api-endpoint-GRCyib6X.js";var r={"slicc-server":`sliccstart`,"slicc-node-server":`npx`};function i(t){return e(t)}function a(e){switch(e){case`extension`:case`extension-detached`:return`extension`;case`cherry`:return`cherry`;case`hosted-leader`:return`hosted`;case`electron-overlay`:return`electron`;case`follower`:return`standalone`;default:return`standalone`}}async function o(e){let i=e?.fetchFn??fetch,a=e?.timeoutMs??1500;try{let e=new AbortController,o=setTimeout(()=>e.abort(),a),s=await i(t(`/api/status`),{cache:`no-store`,signal:e.signal,headers:n()}).finally(()=>clearTimeout(o));if(!s.ok)return`standalone`;let c=await s.json();return(c.service?r[c.service]:void 0)??`standalone`}catch{return`standalone`}}export{a as floatKindForRuntimeMode,i as floatLabelForKind,o as resolveStandaloneFloatKind};
1
+ import{O as e}from"./wc-shell-BU2i4AQi.js";import"./proxied-fetch-CFWkfPNA.js";import{i as t,t as n}from"./api-endpoint-GRCyib6X.js";var r={"slicc-server":`sliccstart`,"slicc-node-server":`npx`};function i(t){return e(t)}function a(e){switch(e){case`extension`:case`extension-detached`:return`extension`;case`cherry`:return`cherry`;case`hosted-leader`:return`hosted`;case`electron-overlay`:return`electron`;case`follower`:return`standalone`;default:return`standalone`}}async function o(e){let i=e?.fetchFn??fetch,a=e?.timeoutMs??1500;try{let e=new AbortController,o=setTimeout(()=>e.abort(),a),s=await i(t(`/api/status`),{cache:`no-store`,signal:e.signal,headers:n()}).finally(()=>clearTimeout(o));if(!s.ok)return`standalone`;let c=await s.json();return(c.service?r[c.service]:void 0)??`standalone`}catch{return`standalone`}}export{a as floatKindForRuntimeMode,i as floatLabelForKind,o as resolveStandaloneFloatKind};
@@ -0,0 +1 @@
1
+ import{a as e,t}from"./tray-follower-status-BAjnN7Ar.js";import{a as n,r}from"./tray-leader-CHHSfFEB.js";import{floatLabelForKind as i}from"./wc-float-label-BLvU2814.js";function a(a,s){let c=s.label??i(s.floatKind);a.setAttribute(`label`,c),a.setAttribute(`float-kind`,s.floatKind);let l=r(),u=t(),d=()=>{let e=o(l,u);a.setAttribute(`connection`,e.connection),e.trayRole===`none`?a.removeAttribute(`tray-role`):a.setAttribute(`tray-role`,e.trayRole)},f=n(e=>{l=e,d()}),p=e(e=>{u=e,d()});return d(),()=>{f(),p()}}function o(e,t){return e.state===`inactive`?t.state===`inactive`?{connection:`offline`,trayRole:`none`}:{connection:c(t),trayRole:`follower`}:{connection:s(e),trayRole:`leader`}}function s(e){switch(e.state){case`connecting`:return`connecting`;case`leader`:return`live`;case`reconnecting`:return`reconnecting`;case`error`:return`error`;default:return`offline`}}function c(e){if(e.stalled)return`stalled`;switch(e.state){case`connecting`:return`connecting`;case`connected`:return`live`;case`reconnecting`:return`reconnecting`;case`error`:return`error`;default:return`offline`}}export{a as installFloatbarStatus};