sliccy 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +512 -0
  3. package/dist/cli/chrome-launch.d.ts +47 -0
  4. package/dist/cli/chrome-launch.js +324 -0
  5. package/dist/cli/cli-log-dedup.d.ts +19 -0
  6. package/dist/cli/cli-log-dedup.js +62 -0
  7. package/dist/cli/electron-controller.d.ts +38 -0
  8. package/dist/cli/electron-controller.js +287 -0
  9. package/dist/cli/electron-main.d.ts +1 -0
  10. package/dist/cli/electron-main.js +183 -0
  11. package/dist/cli/electron-runtime.d.ts +58 -0
  12. package/dist/cli/electron-runtime.js +133 -0
  13. package/dist/cli/file-logger.d.ts +38 -0
  14. package/dist/cli/file-logger.js +207 -0
  15. package/dist/cli/index.d.ts +2 -0
  16. package/dist/cli/index.js +1023 -0
  17. package/dist/cli/launch-url.d.ts +9 -0
  18. package/dist/cli/launch-url.js +34 -0
  19. package/dist/cli/qa-setup.d.ts +1 -0
  20. package/dist/cli/qa-setup.js +36 -0
  21. package/dist/cli/release-package.d.ts +17 -0
  22. package/dist/cli/release-package.js +232 -0
  23. package/dist/cli/runtime-flags.d.ts +21 -0
  24. package/dist/cli/runtime-flags.js +154 -0
  25. package/dist/cli/sync-release-version.d.ts +2 -0
  26. package/dist/cli/sync-release-version.js +34 -0
  27. package/dist/tray-url-shared.d.ts +11 -0
  28. package/dist/tray-url-shared.js +56 -0
  29. package/dist/ui/assets/___vite-browser-external_commonjs-proxy-7ULRRj69.js +1 -0
  30. package/dist/ui/assets/__vite-browser-external-D7Ct-6yo.js +1 -0
  31. package/dist/ui/assets/addon-fit-DOCEibfw.js +12 -0
  32. package/dist/ui/assets/bsh-watchdog-D19WB0U1.js +2 -0
  33. package/dist/ui/assets/index-BVQAdk-Y.js +8 -0
  34. package/dist/ui/assets/index-BjJrFm2K.js +43 -0
  35. package/dist/ui/assets/index-C1dglHrI.js +3 -0
  36. package/dist/ui/assets/index-D3Enm5ux.js +13091 -0
  37. package/dist/ui/assets/index-D7hjyFh1.js +2 -0
  38. package/dist/ui/assets/index-D8uSC2sl.js +45 -0
  39. package/dist/ui/assets/index-DEglHp2j.js +1 -0
  40. package/dist/ui/assets/index-DvjzakYY.js +14406 -0
  41. package/dist/ui/assets/index-deZeJCgO.js +1 -0
  42. package/dist/ui/assets/index-mz3VYh0I.js +131 -0
  43. package/dist/ui/assets/index-r2m8Dpaz.js +54 -0
  44. package/dist/ui/assets/index-ygVJ3eFG.js +11 -0
  45. package/dist/ui/assets/lick-manager-proxy-G3WuipZ-.js +1 -0
  46. package/dist/ui/assets/magic-string.es-BPLJknd7.js +10 -0
  47. package/dist/ui/assets/oauth-service-DIahkF-o.js +1 -0
  48. package/dist/ui/assets/offscreen-client-ByVIJGHW.js +1 -0
  49. package/dist/ui/assets/pdfjs-uyZuKmOq.js +59 -0
  50. package/dist/ui/assets/pyodide-D73G_Ygx.mjs +4 -0
  51. package/dist/ui/assets/sql-wasm-BggYNCID.js +2 -0
  52. package/dist/ui/assets/stream-lEC9OYG2.js +1 -0
  53. package/dist/ui/assets/xterm-Bb8UKAlD.js +27 -0
  54. package/dist/ui/assets/xterm-DOrYoP_4.css +32 -0
  55. package/dist/ui/electron-overlay-entry.js +360 -0
  56. package/dist/ui/favicon.png +0 -0
  57. package/dist/ui/fonts/AdobeClean-Bold.otf +0 -0
  58. package/dist/ui/fonts/AdobeClean-ExtraBold.otf +0 -0
  59. package/dist/ui/fonts/AdobeClean-Medium.otf +0 -0
  60. package/dist/ui/fonts/AdobeClean-Regular.otf +0 -0
  61. package/dist/ui/index.html +1981 -0
  62. package/dist/ui/preview-sw.js +4 -0
  63. package/package.json +81 -0
@@ -0,0 +1 @@
1
+ import{c as f,B as C}from"./index-DvjzakYY.js";import{C as P,H as v,R as H}from"./index-DvjzakYY.js";const u="[slicc-tab-group]";let g=null;async function p(o){try{if(g!==null)try{await chrome.tabs.group({tabIds:o,groupId:g});return}catch(e){console.info(u,"Tab group removed by user, recreating",{tabId:o,previousGroupId:g,error:e instanceof Error?e.message:String(e)}),g=null}g=await chrome.tabs.group({tabIds:o}),await chrome.tabGroups.update(g,{title:"slicc",color:"pink",collapsed:!1})}catch(e){console.warn(u,"Tab grouping failed (best-effort, continuing without group)",{tabId:o,error:e instanceof Error?e.message:String(e)})}}const h=f("cdp:debugger");class y{_state="disconnected";listeners=new Map;sessionToTab=new Map;attachedTabs=new Set;onEventHandler=(e,s,t)=>{if(!this.attachedTabs.has(e.tabId))return;let n;for(const[a,i]of this.sessionToTab)if(i===e.tabId){n=a;break}h.debug("Event",{tabId:e.tabId,method:s,sessionId:n});const r=this.listeners.get(s);if(r){const a=n?{...t,sessionId:n}:t??{};for(const i of r)try{i(a)}catch(d){h.error("CDP event listener error",{method:s,error:d instanceof Error?d.message:String(d)})}}};onDetachHandler=(e,s)=>{h.warn("Debugger detached",{tabId:e.tabId,reason:s}),this.attachedTabs.delete(e.tabId);for(const[t,n]of this.sessionToTab)n===e.tabId&&this.sessionToTab.delete(t);this.attachedTabs.size===0&&(this._state="disconnected")};get state(){return this._state}async connect(e){if(this._state!=="disconnected")throw new Error(`Cannot connect: state is ${this._state}`);chrome.debugger.onEvent.addListener(this.onEventHandler),chrome.debugger.onDetach.addListener(this.onDetachHandler),this._state="connected",h.info("DebuggerClient connected (extension mode)")}disconnect(){for(const e of this.attachedTabs)chrome.debugger.detach({tabId:e}).catch(s=>{h.debug("Detach during disconnect",{tabId:e,error:s instanceof Error?s.message:String(s)})});chrome.debugger.onEvent.removeListener(this.onEventHandler),chrome.debugger.onDetach.removeListener(this.onDetachHandler),this.attachedTabs.clear(),this.sessionToTab.clear(),this._state="disconnected",h.info("DebuggerClient disconnected")}async send(e,s,t,n){if(this._state!=="connected")throw new Error("DebuggerClient is not connected");switch(e){case"Target.getTargets":return this.handleGetTargets();case"Target.attachToTarget":return this.handleAttachToTarget(s);case"Target.detachFromTarget":return this.handleDetachFromTarget(s);case"Target.createTarget":return this.handleCreateTarget(s);case"Target.closeTarget":return this.handleCloseTarget(s);default:return this.sendCdpCommand(e,s,t)}}on(e,s){let t=this.listeners.get(e);t||(t=new Set,this.listeners.set(e,t)),t.add(s)}off(e,s){const t=this.listeners.get(e);t&&(t.delete(s),t.size===0&&this.listeners.delete(e))}once(e,s=3e4){return new Promise((t,n)=>{const r=setTimeout(()=>{this.off(e,a),n(new Error(`Timed out waiting for event: ${e}`))},s),a=i=>{clearTimeout(r),this.off(e,a),t(i)};this.on(e,a)})}async handleGetTargets(){const[e,s]=await Promise.all([chrome.tabs.query({}),chrome.tabs.query({active:!0,currentWindow:!0})]),t=new Set(s.map(r=>r.id));return{targetInfos:e.map(r=>({targetId:String(r.id),type:"page",title:r.title??"",url:r.url??"",attached:this.attachedTabs.has(r.id),active:t.has(r.id)}))}}async handleAttachToTarget(e){const s=e.targetId,t=parseInt(s,10);if(!Number.isFinite(t)||t<=0)throw new Error(`Invalid targetId: ${s}`);this.attachedTabs.has(t)||(await chrome.debugger.attach({tabId:t},"1.3"),this.attachedTabs.add(t));const n=s;return this.sessionToTab.set(n,t),{sessionId:n}}async handleDetachFromTarget(e){const s=e.sessionId,t=this.sessionToTab.get(s);return t!==void 0&&(this.sessionToTab.delete(s),[...this.sessionToTab.values()].includes(t)||(this.attachedTabs.delete(t),await chrome.debugger.detach({tabId:t}).catch(r=>{h.debug("Detach failed (tab may be closed)",{tabId:t,error:r instanceof Error?r.message:String(r)})}))),{}}async handleCreateTarget(e){const s=e.url??"about:blank",t=await chrome.tabs.create({url:s,active:!1});return await p(t.id),{targetId:String(t.id)}}async handleCloseTarget(e){const s=e.targetId,t=parseInt(s,10);if(!Number.isFinite(t)||t<=0)throw new Error(`Invalid targetId: ${s}`);for(const[n,r]of this.sessionToTab)r===t&&this.sessionToTab.delete(n);return this.attachedTabs.has(t)&&(this.attachedTabs.delete(t),await chrome.debugger.detach({tabId:t}).catch(n=>{h.debug("Detach before close failed",{tabId:t,error:n instanceof Error?n.message:String(n)})})),await chrome.tabs.remove(t),{success:!0}}async sendCdpCommand(e,s,t){const n=t?this.sessionToTab.get(t):void 0;if(n===void 0)throw new Error(`No tab attached for sessionId: ${t??"(none)"}. Attach to a target first.`);return h.debug("Send",{method:e,tabId:n,sessionId:t}),await chrome.debugger.sendCommand({tabId:n},e,s)??{}}}class I{_state="disconnected";nextCommandId=1;listeners=new Map;pendingCommands=new Map;messageHandler=null;get state(){return this._state}async connect(e){if(this._state!=="disconnected")throw new Error(`Cannot connect: state is ${this._state}`);this.messageHandler=s=>{if(!T(s))return;const t=s;if(t.source!=="service-worker")return;const n=t.payload;n.type==="cdp-response"?this.handleCdpResponse(n):n.type==="cdp-event"&&this.handleCdpEvent(n)},chrome.runtime.onMessage.addListener(this.messageHandler),this._state="connected"}disconnect(){this.messageHandler&&(chrome.runtime.onMessage.removeListener(this.messageHandler),this.messageHandler=null);for(const[,e]of this.pendingCommands)clearTimeout(e.timer),e.reject(new Error("CDP proxy disconnected"));this.pendingCommands.clear(),this.listeners.clear(),this._state="disconnected"}async send(e,s,t,n=3e4){if(this._state!=="connected")throw new Error("OffscreenCdpProxy is not connected");const r=this.nextCommandId++,a={type:"cdp-command",id:r,method:e,params:s,sessionId:t};return new Promise((i,d)=>{let c=!1;const m=setTimeout(()=>{c||(c=!0,this.pendingCommands.delete(r),d(new Error(`CDP command timed out after ${n}ms: ${e}`)))},n);this.pendingCommands.set(r,{resolve:i,reject:d,timer:m}),chrome.runtime.sendMessage({source:"offscreen",payload:a}).catch(l=>{c||(c=!0,this.pendingCommands.delete(r),clearTimeout(m),d(new Error(`Failed to send CDP command: ${l instanceof Error?l.message:String(l)}`)))})})}on(e,s){let t=this.listeners.get(e);t||(t=new Set,this.listeners.set(e,t)),t.add(s)}off(e,s){const t=this.listeners.get(e);t&&(t.delete(s),t.size===0&&this.listeners.delete(e))}once(e,s=3e4){return new Promise((t,n)=>{const r=setTimeout(()=>{this.off(e,a),n(new Error(`Timed out waiting for event: ${e}`))},s),a=i=>{clearTimeout(r),this.off(e,a),t(i)};this.on(e,a)})}handleCdpResponse(e){const s=this.pendingCommands.get(e.id);s&&(this.pendingCommands.delete(e.id),clearTimeout(s.timer),e.error?s.reject(new Error(e.error)):s.resolve(e.result??{}))}handleCdpEvent(e){const s=this.listeners.get(e.method);if(s)for(const t of s)try{t(e.params??{})}catch{}}}function T(o){return typeof o=="object"&&o!==null&&"source"in o&&"payload"in o}class E{_state="disconnected";nextCommandId=1;listeners=new Map;pendingCommands=new Map;messageHandler=null;get state(){return this._state}async connect(e){if(this._state!=="disconnected")throw new Error(`Cannot connect: state is ${this._state}`);this.messageHandler=s=>{try{if(!b(s))return;const t=s;t.source==="offscreen"&&t.payload.type==="panel-cdp-response"&&this.handleCdpResponse(t.payload),t.source==="service-worker"&&t.payload.type==="cdp-event"&&this.handleCdpEvent(t.payload)}catch(t){console.error("[panel-cdp-proxy] Error in message handler:",t)}},chrome.runtime.onMessage.addListener(this.messageHandler),this._state="connected"}disconnect(){this.messageHandler&&(chrome.runtime.onMessage.removeListener(this.messageHandler),this.messageHandler=null);for(const[,e]of this.pendingCommands)clearTimeout(e.timer),e.reject(new Error("Panel CDP proxy disconnected"));this.pendingCommands.clear(),this.listeners.clear(),this._state="disconnected"}async send(e,s,t,n=3e4){if(this._state!=="connected")throw new Error("PanelCdpProxy is not connected");const r=this.nextCommandId++,a={type:"panel-cdp-command",id:r,method:e,params:s,sessionId:t};return new Promise((i,d)=>{let c=!1;const m=setTimeout(()=>{c||(c=!0,this.pendingCommands.delete(r),d(new Error(`CDP command timed out after ${n}ms: ${e}`)))},n);this.pendingCommands.set(r,{resolve:i,reject:d,timer:m}),chrome.runtime.sendMessage({source:"panel",payload:a}).catch(l=>{c||(c=!0,this.pendingCommands.delete(r),clearTimeout(m),d(new Error(`Failed to send CDP command: ${l instanceof Error?l.message:String(l)}`)))})})}on(e,s){let t=this.listeners.get(e);t||(t=new Set,this.listeners.set(e,t)),t.add(s)}off(e,s){const t=this.listeners.get(e);t&&(t.delete(s),t.size===0&&this.listeners.delete(e))}once(e,s=3e4){return new Promise((t,n)=>{const r=setTimeout(()=>{this.off(e,a),n(new Error(`Timed out waiting for event: ${e}`))},s),a=i=>{clearTimeout(r),this.off(e,a),t(i)};this.on(e,a)})}handleCdpResponse(e){const s=this.pendingCommands.get(e.id);if(!s){console.warn(`[panel-cdp-proxy] Ignoring CDP response with unknown id ${e.id}`);return}this.pendingCommands.delete(e.id),clearTimeout(s.timer),e.error?s.reject(new Error(e.error)):s.resolve(e.result??{})}handleCdpEvent(e){const s=this.listeners.get(e.method);if(s)for(const t of s)try{t(e.params??{})}catch(n){console.error(`[panel-cdp-proxy] Listener error for event "${e.method}":`,n)}}}function b(o){return typeof o=="object"&&o!==null&&"source"in o&&"payload"in o}export{C as BrowserAPI,P as CDPClient,y as DebuggerClient,v as HarRecorder,I as OffscreenCdpProxy,E as PanelCdpProxy,H as RemoteCDPTransport};