sliccy 6.130.0 → 6.131.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 (329) hide show
  1. package/README.md +2 -2
  2. package/dist/node-server/_shared/agent-wire-types.d.ts +54 -0
  3. package/dist/node-server/_shared/agent-wire-types.d.ts.map +1 -1
  4. package/dist/node-server/_shared/cdp-target-info.d.ts +19 -0
  5. package/dist/node-server/_shared/cdp-target-info.d.ts.map +1 -0
  6. package/dist/node-server/_shared/cdp-target-info.js +9 -0
  7. package/dist/node-server/_shared/cdp-target-info.js.map +1 -0
  8. package/dist/node-server/_shared/discovery-link.d.ts +76 -0
  9. package/dist/node-server/_shared/discovery-link.d.ts.map +1 -0
  10. package/dist/node-server/_shared/discovery-link.js +76 -0
  11. package/dist/node-server/_shared/discovery-link.js.map +1 -0
  12. package/dist/node-server/_shared/extension-bridge-protocol.d.ts +165 -0
  13. package/dist/node-server/_shared/extension-bridge-protocol.d.ts.map +1 -0
  14. package/dist/node-server/_shared/extension-bridge-protocol.js +65 -0
  15. package/dist/node-server/_shared/extension-bridge-protocol.js.map +1 -0
  16. package/dist/node-server/_shared/handoff-link.d.ts +90 -0
  17. package/dist/node-server/_shared/handoff-link.d.ts.map +1 -0
  18. package/dist/node-server/_shared/handoff-link.js +192 -0
  19. package/dist/node-server/_shared/handoff-link.js.map +1 -0
  20. package/dist/node-server/_shared/iframe-repaint.d.ts +51 -0
  21. package/dist/node-server/_shared/iframe-repaint.d.ts.map +1 -0
  22. package/dist/node-server/_shared/iframe-repaint.js +118 -0
  23. package/dist/node-server/_shared/iframe-repaint.js.map +1 -0
  24. package/dist/node-server/_shared/index.d.ts +9 -0
  25. package/dist/node-server/_shared/index.d.ts.map +1 -1
  26. package/dist/node-server/_shared/index.js +9 -0
  27. package/dist/node-server/_shared/index.js.map +1 -1
  28. package/dist/node-server/_shared/leader-ext-id.d.ts +16 -0
  29. package/dist/node-server/_shared/leader-ext-id.d.ts.map +1 -0
  30. package/dist/node-server/_shared/leader-ext-id.js +16 -0
  31. package/dist/node-server/_shared/leader-ext-id.js.map +1 -0
  32. package/dist/node-server/_shared/link-header.d.ts +98 -0
  33. package/dist/node-server/_shared/link-header.d.ts.map +1 -0
  34. package/dist/node-server/_shared/link-header.js +441 -0
  35. package/dist/node-server/_shared/link-header.js.map +1 -0
  36. package/dist/node-server/_shared/proxy-headers.d.ts +46 -0
  37. package/dist/node-server/_shared/proxy-headers.d.ts.map +1 -0
  38. package/dist/node-server/_shared/proxy-headers.js +133 -0
  39. package/dist/node-server/_shared/proxy-headers.js.map +1 -0
  40. package/dist/node-server/_shared/well-known-probe.d.ts +63 -0
  41. package/dist/node-server/_shared/well-known-probe.d.ts.map +1 -0
  42. package/dist/node-server/_shared/well-known-probe.js +104 -0
  43. package/dist/node-server/_shared/well-known-probe.js.map +1 -0
  44. package/dist/node-server/electron-controller.d.ts +51 -0
  45. package/dist/node-server/electron-controller.js +88 -5
  46. package/dist/ui/.vite/manifest.json +414 -488
  47. package/dist/ui/assets/CLAUDE-CWMPcWVI.js +34 -0
  48. package/dist/ui/assets/{CLAUDE-BG8Wfdn_.js → CLAUDE-DM1onrcU.js} +1 -1
  49. package/dist/ui/assets/SKILL--AFE5RE3.js +1 -0
  50. package/dist/ui/assets/{SKILL-DT72j81i.js → SKILL-cpVS35My.js} +1 -1
  51. package/dist/ui/assets/__vite-browser-external-B6A3FtA_.js +1 -0
  52. package/dist/ui/assets/{account-store-EaBcIxhN.js → account-store-DsMvFZgS.js} +3 -3
  53. package/dist/ui/assets/account-store-naVgJKHe.js +1 -0
  54. package/dist/ui/assets/{adobe-B0U_BLCy.js → adobe-BhZB46bT.js} +1 -1
  55. package/dist/ui/assets/{adobe-DSoEAq_f.js → adobe-sRIQnDEl.js} +2 -2
  56. package/dist/ui/assets/{agent-bridge-sbs3wiia.js → agent-bridge-DVqU5-sn.js} +1 -1
  57. package/dist/ui/assets/{agent-message-to-chat-Cnv4uh07.js → agent-message-to-chat-Df4an5Ei.js} +1 -1
  58. package/dist/ui/assets/{agent-message-to-chat-DW2ZZk9R.js → agent-message-to-chat-xGeYopQz.js} +1 -1
  59. package/dist/ui/assets/api-endpoint-DGxXvrur.js +1 -0
  60. package/dist/ui/assets/api-endpoint-Lx_FU5cP.js +1 -0
  61. package/dist/ui/assets/{apply-layout-DvwSioYn.js → apply-layout-dNkV0TEv.js} +1 -1
  62. package/dist/ui/assets/{apps-DFIoDcds.js → apps-tzFQ7_KO.js} +1 -1
  63. package/dist/ui/assets/{auto-mount-table-CEBCZFRF.js → auto-mount-table-0jMTi9rV.js} +1 -1
  64. package/dist/ui/assets/{azure-openai-C_J_i_Uv.js → azure-openai-B9ZeZZ0T.js} +1 -1
  65. package/dist/ui/assets/{azure-openai-DUJebq5R.js → azure-openai-DsmgiFlX.js} +1 -1
  66. package/dist/ui/assets/{backend-hostfs-t651gkrP.js → backend-hostfs-BH8uwRZG.js} +1 -1
  67. package/dist/ui/assets/{backend-hostfs-BQYf7TAS.js → backend-hostfs-BxfjZHzO.js} +1 -1
  68. package/dist/ui/assets/bridge-protocol-06nbmp2X.js +1 -0
  69. package/dist/ui/assets/bridge-protocol-DdqxTTSu.js +1 -0
  70. package/dist/ui/assets/{bsh-watchdog-D97yX3sQ.js → bsh-watchdog-CxyhQHy5.js} +1 -1
  71. package/dist/ui/assets/{capability-Btlr4Wc-.js → capability-Bxl0SE1s.js} +2 -2
  72. package/dist/ui/assets/{cdp-DHIp_AO9.js → cdp-CmXwwigc.js} +1 -1
  73. package/dist/ui/assets/{cerebras-4vCJGBUt.js → cerebras-CsdnfQnc.js} +1 -1
  74. package/dist/ui/assets/{cerebras-CBjabVSb.js → cerebras-Mux-1Uqj.js} +1 -1
  75. package/dist/ui/assets/{client-CjV_9a9h.js → client-C6Cmi9c4.js} +1 -1
  76. package/dist/ui/assets/composer-speech-CElQJ4q_.js +1 -0
  77. package/dist/ui/assets/{connect-surface-DrBGja7c.js → connect-surface-DgrjdeR5.js} +1 -1
  78. package/dist/ui/assets/{context-compaction-huebTevb.js → context-compaction-DRymamfD.js} +3 -3
  79. package/dist/ui/assets/{core-CdPvxBo3.js → core-B8y1Kyh_.js} +2 -2
  80. package/dist/ui/assets/{derive-C_gfjwp6.js → derive-TWFNEJkb.js} +1 -1
  81. package/dist/ui/assets/dip-1TiuHkUR.js +233 -0
  82. package/dist/ui/assets/{directed-approval-cJrhWrrr.js → directed-approval-BDO2wdC5.js} +1 -1
  83. package/dist/ui/assets/{discovery-preference-DFkmIHQo.js → discovery-preference-B9KlkVuR.js} +1 -1
  84. package/dist/ui/assets/ensure-speech-assets-DasC7jBA.js +1 -0
  85. package/dist/ui/assets/{esbuild-wasm-CSKOA492.js → esbuild-wasm-Ew76Vf_V.js} +2 -2
  86. package/dist/ui/assets/export-provider-CqI0pk50.js +1 -0
  87. package/dist/ui/assets/export-spool-CuNzzI8a.js +1 -0
  88. package/dist/ui/assets/{extension-bridge-transport-D3PItLFo.js → extension-bridge-transport-DfRNjx8c.js} +1 -1
  89. package/dist/ui/assets/extension-media-capture-2FcAdcuB.js +1 -0
  90. package/dist/ui/assets/extension-ops-owOXVncP.js +1 -0
  91. package/dist/ui/assets/float-topology-hfgMx1Yq.js +1 -0
  92. package/dist/ui/assets/{follower-navigate-watcher-B9ZostUJ.js → follower-navigate-watcher-JQ0b_cW8.js} +1 -1
  93. package/dist/ui/assets/{fs-C9SJY4sJ.js → fs-CBaQR8Xc.js} +2 -2
  94. package/dist/ui/assets/{fs-n6R6QZv0.js → fs-CDaCMxrL.js} +1 -1
  95. package/dist/ui/assets/github-B7uOq9Q1.js +1 -0
  96. package/dist/ui/assets/{github-copilot-COZvaCzG.js → github-copilot-BeWJoZwD.js} +1 -1
  97. package/dist/ui/assets/{github-copilot-Cai-dPyZ.js → github-copilot-DwKSI23j.js} +1 -1
  98. package/dist/ui/assets/{github-install-DfhMDFC9.js → github-install-DE7dF6r8.js} +1 -1
  99. package/dist/ui/assets/{github-D-fdkiMQ.js → github-qhOhjD2Q.js} +2 -2
  100. package/dist/ui/assets/{github-zip-ZEV5pLGZ.js → github-zip-CuwUOO-U.js} +1 -1
  101. package/dist/ui/assets/{guest-tool-gate-CG9Yw8Kq.js → guest-tool-gate-BxRAm4CU.js} +1 -1
  102. package/dist/ui/assets/{hear-D7MO-jTh.js → hear-CNQSuR1y.js} +1 -1
  103. package/dist/ui/assets/{help-CQHZfeL3.js → help-D66VHlYj.js} +8 -4
  104. package/dist/ui/assets/hid-picker-sFJ8vzUj.js +1 -0
  105. package/dist/ui/assets/host-command-29ain4NA.js +1 -0
  106. package/dist/ui/assets/idle-compaction-B9i1duyd.js +1 -0
  107. package/dist/ui/assets/idle-compaction-settings-1yyApSsQ.js +1 -0
  108. package/dist/ui/assets/image-markers-BFDmhPy4.js +1 -0
  109. package/dist/ui/assets/image-markers-DuyWsic3.js +1 -0
  110. package/dist/ui/assets/{installer-7BWtTgd6.js → installer-C6TqZaGO.js} +3 -3
  111. package/dist/ui/assets/{js-realm-worker-CXI-Ngjy.js → js-realm-worker-Bsb6rmK5.js} +4 -4
  112. package/dist/ui/assets/{jsh-runtime-extensions-Bf9eAUzp.js → jsh-runtime-extensions-Dkujbplu.js} +1 -1
  113. package/dist/ui/assets/kernel-worker-CkZd8Enf.js +4991 -0
  114. package/dist/ui/assets/lick-manager-ULemXDKa.js +2 -0
  115. package/dist/ui/assets/lick-urls-BX4Jyu_T.js +1 -0
  116. package/dist/ui/assets/{lick-ws-bridge-Jk_oJNDM.js → lick-ws-bridge-Bo5sH7lf.js} +1 -1
  117. package/dist/ui/assets/{lick-ws-bridge-ct0HLNad.js → lick-ws-bridge-RFOSPq0w.js} +1 -1
  118. package/dist/ui/assets/{live-session-snapshot-DnNBHXrk.js → live-session-snapshot-BTnyrQCU.js} +1 -1
  119. package/dist/ui/assets/{loader-B90Xxi7L.js → loader-Dw-TPPKt.js} +1 -1
  120. package/dist/ui/assets/{local-llm-Dm5mp8ES.js → local-llm-B-qS5oNT.js} +1 -1
  121. package/dist/ui/assets/{local-llm-CXD-Qof4.js → local-llm-COCS88AU.js} +1 -1
  122. package/dist/ui/assets/{magick-wasm-BEYfJbAX.js → magick-wasm-C7OGcZrJ.js} +2 -2
  123. package/dist/ui/assets/main-CAXbdHY8.js +22 -0
  124. package/dist/ui/assets/main-cherry-DSNvH0CD.js +1 -0
  125. package/dist/ui/assets/{mount-DD8rKTRS.js → mount-BbUBqN71.js} +2 -2
  126. package/dist/ui/assets/{mount-bridge-client-CUPodVo6.js → mount-bridge-client-BejrWSrL.js} +1 -1
  127. package/dist/ui/assets/{mount-bridge-client-BrMqFu_x.js → mount-bridge-client-DGJyqEPG.js} +1 -1
  128. package/dist/ui/assets/{mount-picker-popup-CVvcLs1V.js → mount-picker-popup--ijSfN8u.js} +1 -1
  129. package/dist/ui/assets/{mount-recovery-D6g3iniZ.js → mount-recovery-OxgGejDC.js} +1 -1
  130. package/dist/ui/assets/{mount-C1nMn8bL.js → mount-ysOnJBjr.js} +3 -3
  131. package/dist/ui/assets/navigation-watcher-C8xRyQBd.js +1 -0
  132. package/dist/ui/assets/new-session-JIL4tJ1I.js +2 -0
  133. package/dist/ui/assets/oauth-bootstrap-DP5y5Dy8.js +2 -0
  134. package/dist/ui/assets/oauth-service-Bconf2Pz.js +1 -0
  135. package/dist/ui/assets/oauth-service-t2taQm3p.js +1 -0
  136. package/dist/ui/assets/{openai-codex-BveJezys.js → openai-codex-BZDYkVh6.js} +1 -1
  137. package/dist/ui/assets/{openai-codex-WPOtL2Mf.js → openai-codex-DlFMWNVB.js} +1 -1
  138. package/dist/ui/assets/{openrouter-98Q9mrw8.js → openrouter-BrS9XpJS.js} +1 -1
  139. package/dist/ui/assets/{openrouter-6nEYTdxI.js → openrouter-Dn_iX45f.js} +1 -1
  140. package/dist/ui/assets/{openrouter-oauth-C7w8rKLa.js → openrouter-oauth-CioQlp0x.js} +1 -1
  141. package/dist/ui/assets/{openrouter-oauth-BCNSNHpM.js → openrouter-oauth-D9gZVt7e.js} +1 -1
  142. package/dist/ui/assets/{page-approval-service-DnWfuBVQ.js → page-approval-service-IZdlRu-_.js} +1 -1
  143. package/dist/ui/assets/panel-rpc-handlers-DUN0E_f8.js +2 -0
  144. package/dist/ui/assets/{panelize-shell-C7Ptpa69.js → panelize-shell-KNX1XTnq.js} +1 -1
  145. package/dist/ui/assets/picker-popup-sQtXmfAo.js +1 -0
  146. package/dist/ui/assets/{port-bridge-client-wFmUGeZa.js → port-bridge-client-C1tBBqwu.js} +1 -1
  147. package/dist/ui/assets/{port-bridge-client-BTnhFM03.js → port-bridge-client-CN1cFP4D.js} +1 -1
  148. package/dist/ui/assets/preview-url-r19H6zH1.js +1 -0
  149. package/dist/ui/assets/{provider-1nSAXh4b.js → provider-BfGyOQHs.js} +2 -2
  150. package/dist/ui/assets/{provider-RrpO6cEr.js → provider-DnIZJQjl.js} +1 -1
  151. package/dist/ui/assets/provider-settings-C6uIHjd4.js +1 -0
  152. package/dist/ui/assets/provider-settings-DrWv51sQ.js +2 -0
  153. package/dist/ui/assets/{provider-store-access-kKnmyJjr.js → provider-store-access-BqErJhmB.js} +2 -2
  154. package/dist/ui/assets/provider-store-access-BuQzycZu.js +1 -0
  155. package/dist/ui/assets/{providers-CvD7PECK.js → providers-CF2FF0H2.js} +1 -1
  156. package/dist/ui/assets/providers-CqZKx9qW.js +2 -0
  157. package/dist/ui/assets/proxied-fetch-CiijUcSt.js +2 -0
  158. package/dist/ui/assets/proxied-fetch-DUC7X0GS.js +1 -0
  159. package/dist/ui/assets/{py-realm-worker-DGFMfg27.js → py-realm-worker-BYQkpReo.js} +2 -2
  160. package/dist/ui/assets/{pyodide-BDRAQKP6.js → pyodide-BwD0AtZB.js} +2 -2
  161. package/dist/ui/assets/{quick-llm-I3oLGgvo.js → quick-llm-B9NubAhJ.js} +1 -1
  162. package/dist/ui/assets/{recovery-screen-CBwlz3Qo.js → recovery-screen-cHPORxsj.js} +1 -1
  163. package/dist/ui/assets/{redirect-uri-DZXyVwvI.js → redirect-uri-BKkf61lT.js} +1 -1
  164. package/dist/ui/assets/{remote-terminal-view-Db-9V2n9.js → remote-terminal-view-BHs39pzZ.js} +1 -1
  165. package/dist/ui/assets/request-body-DWn6QJ_H.js +1 -0
  166. package/dist/ui/assets/rest-ops-CLpS_ilI.js +1 -0
  167. package/dist/ui/assets/rest-ops-D2ig8qfG.js +1 -0
  168. package/dist/ui/assets/{run-BBAgk3Ml.js → run-03JeZZol.js} +1 -1
  169. package/dist/ui/assets/{run-COi81T_1.js → run-B5YOTTPD.js} +1 -1
  170. package/dist/ui/assets/run-BOu4zIOZ.js +29 -0
  171. package/dist/ui/assets/{run-DZMSwK6o.js → run-CUXVFhoI.js} +1 -1
  172. package/dist/ui/assets/run-D5Va_gO8.js +81 -0
  173. package/dist/ui/assets/{run-DCeEfqcT.js → run-DZh-18uA.js} +3 -3
  174. package/dist/ui/assets/{secret-env-Cp2Eduxg.js → secret-env-CtpVPUh5.js} +1 -1
  175. package/dist/ui/assets/secret-topology-Yt0aO4Gz.js +1 -0
  176. package/dist/ui/assets/{secrets-bridge-client-CHMeCH4_.js → secrets-bridge-client-BVl0YuB2.js} +1 -1
  177. package/dist/ui/assets/{secrets-bridge-client-CNOtgwnq.js → secrets-bridge-client-C3MaYf_O.js} +1 -1
  178. package/dist/ui/assets/serial-picker-BQF_Eitc.js +1 -0
  179. package/dist/ui/assets/{session-freezer-DVh0_BPO.js → session-freezer-Bltt6zUt.js} +3 -3
  180. package/dist/ui/assets/{setup-feature-flags-remote-DBcwYFl-.js → setup-feature-flags-remote-BkP-HRZt.js} +1 -1
  181. package/dist/ui/assets/setup-standalone-prelude-C2tPUGcI.js +2 -0
  182. package/dist/ui/assets/setup-sudo-BSw__xoN.js +2 -0
  183. package/dist/ui/assets/shared-Djytys1b.js +1 -0
  184. package/dist/ui/assets/shared-Dq_aaG_m.js +4 -0
  185. package/dist/ui/assets/silent-renew-backoff-DIMz5UqB.js +1 -0
  186. package/dist/ui/assets/silent-renew-backoff-SSzHR-oP.js +1 -0
  187. package/dist/ui/assets/{skills-BEEjU5I5.js → skills-wzno5Tj5.js} +1 -1
  188. package/dist/ui/assets/slicc-app-url-B9OxaBDe.js +1 -0
  189. package/dist/ui/assets/slicc-version-HwuyIZfW.js +1 -0
  190. package/dist/ui/assets/{snapshot-CPjJBR4Z.js → snapshot-Bi6QabWh.js} +1 -1
  191. package/dist/ui/assets/{snapshot-features-BZbgnon7.js → snapshot-features-BEPdcWF6.js} +3 -3
  192. package/dist/ui/assets/{speak-Dx2FEQBZ.js → speak-BxNdNjKi.js} +1 -1
  193. package/dist/ui/assets/{sprinkle-bridge-BVfyHi8X.js → sprinkle-bridge-BNzhEsPj.js} +1 -1
  194. package/dist/ui/assets/{sprinkle-manager-Dxc8U2h1.js → sprinkle-manager-CflRWcbq.js} +1 -1
  195. package/dist/ui/assets/{sprinkle-renderer-1C1DNVyK.js → sprinkle-renderer-BnSqYzuY.js} +1 -1
  196. package/dist/ui/assets/{src-kInvzkEg.js → src-Bex_z_yH.js} +583 -148
  197. package/dist/ui/assets/state-DIwkpIaB.js +42 -0
  198. package/dist/ui/assets/{store-BHLq6CyB.js → store-CFx1fIZL.js} +1 -1
  199. package/dist/ui/assets/{store-Dd0aJqlJ.js → store-i7XHN1Er.js} +1 -1
  200. package/dist/ui/assets/{sudo-DBeYNsAF.js → sudo-r7OrTMGT.js} +1 -1
  201. package/dist/ui/assets/sync-dialog-D7Wg49Up.js +1 -0
  202. package/dist/ui/assets/tab-teleport-PAaKnGkm.js +1 -0
  203. package/dist/ui/assets/transcript-export-DP-r8eDz.js +1 -0
  204. package/dist/ui/assets/transformers-env-BmBEKck6.js +1 -0
  205. package/dist/ui/assets/{tray-leader-DTpZEm3l.js → tray-leader-DabyaEs-.js} +1 -1
  206. package/dist/ui/assets/{tray-leave-runtime-BrGJs1g5.js → tray-leave-runtime-VfTj-MHR.js} +1 -1
  207. package/dist/ui/assets/tray-runtime-config-BQL-GPqt.js +1 -0
  208. package/dist/ui/assets/tray-runtime-config-C3Ti4Pik.js +1 -0
  209. package/dist/ui/assets/tray-sidecar-Zx9F34-1.js +2 -0
  210. package/dist/ui/assets/tray-sync-protocol-jKTx-dCF.js +1 -0
  211. package/dist/ui/assets/tray-webrtc-uW6sTyIA.js +1 -0
  212. package/dist/ui/assets/{upgrade-detection-BwiYpjuO.js → upgrade-detection-Cz0eOMYf.js} +1 -1
  213. package/dist/ui/assets/usb-picker-Cbm0jfjl.js +1 -0
  214. package/dist/ui/assets/{voice-reply-BGR2cNZ_.js → voice-reply-B43Nr1Xr.js} +1 -1
  215. package/dist/ui/assets/{wc-attach-BLZapYO1.js → wc-attach-BbT2famN.js} +3 -3
  216. package/dist/ui/assets/wc-browser-Ctsf5Y23.js +1 -0
  217. package/dist/ui/assets/{wc-extension-B_OX4AT5.js → wc-extension-CJ6cvLnw.js} +2 -2
  218. package/dist/ui/assets/{wc-float-label-Ck2cAgp3.js → wc-float-label-CnFnKVLC.js} +1 -1
  219. package/dist/ui/assets/wc-follower-CkrdiOKN.js +17 -0
  220. package/dist/ui/assets/wc-follower-oauth-B6m2XpVI.js +5 -0
  221. package/dist/ui/assets/wc-live-CxoqWHpR.js +8 -0
  222. package/dist/ui/assets/wc-nav-Bnd_bEYw.js +2 -0
  223. package/dist/ui/assets/wc-onboarding-FeHr2fj5.js +2 -0
  224. package/dist/ui/assets/{wc-permissions-iZXqGvtf.js → wc-permissions-CppSymRx.js} +3 -3
  225. package/dist/ui/assets/wc-permissions-providers-BjqCnuQT.js +2 -0
  226. package/dist/ui/assets/wc-placeholder-C79lmtig.js +4 -0
  227. package/dist/ui/assets/wc-settings-DdAeaZhQ.js +59 -0
  228. package/dist/ui/assets/wc-shell-BP3biEU1.js +125 -0
  229. package/dist/ui/assets/{wc-shortcut-config--IseG9bJ.js → wc-shortcut-config-CjOJXjsp.js} +2 -2
  230. package/dist/ui/assets/wc-shortcuts-BDQiHczD.js +41 -0
  231. package/dist/ui/assets/wc-sprinkles-ChlcnDD2.js +2 -0
  232. package/dist/ui/assets/wc-transcript-export-DdEuCfi6.js +2 -0
  233. package/dist/ui/assets/wc-tray-BfoqEbBg.js +5 -0
  234. package/dist/ui/assets/whisper-session-DW7HkDu2.js +2 -0
  235. package/dist/ui/assets/{xai-grok-OLNPEXTT.js → xai-grok-3L0LL1R8.js} +1 -1
  236. package/dist/ui/assets/{xai-grok-C-iHnNxi.js → xai-grok-CKevFY8L.js} +1 -1
  237. package/dist/ui/index.html +15 -17
  238. package/dist/ui/llm-proxy-sw.js +1 -1
  239. package/dist/ui/packages/webapp/index.html +15 -17
  240. package/package.json +5 -4
  241. package/dist/ui/assets/CLAUDE-DhkULx_E.js +0 -1
  242. package/dist/ui/assets/SKILL-DJAvKejL.js +0 -1
  243. package/dist/ui/assets/__vite-browser-external-B19j3y2v.js +0 -1
  244. package/dist/ui/assets/account-store-CCqSr710.js +0 -1
  245. package/dist/ui/assets/api-endpoint-BB41u1PK.js +0 -1
  246. package/dist/ui/assets/api-endpoint-DRYP1Kfj.js +0 -1
  247. package/dist/ui/assets/composer-speech-C8OcijP-.js +0 -1
  248. package/dist/ui/assets/dip-Co-Ga2Ny.js +0 -233
  249. package/dist/ui/assets/ensure-speech-assets-Csum3_gw.js +0 -1
  250. package/dist/ui/assets/export-provider-BunpOA08.js +0 -1
  251. package/dist/ui/assets/export-spool-Bvpvkbul.js +0 -1
  252. package/dist/ui/assets/extension-media-capture-DiCJSgES.js +0 -1
  253. package/dist/ui/assets/extension-ops-CsNT8YjX.js +0 -1
  254. package/dist/ui/assets/float-topology-ey0oewfq.js +0 -1
  255. package/dist/ui/assets/github-BXAKydA_.js +0 -1
  256. package/dist/ui/assets/handoff-link-CGs8AaQW.js +0 -1
  257. package/dist/ui/assets/hid-picker-C4WMZ0dN.js +0 -1
  258. package/dist/ui/assets/host-command-PnmJLRej.js +0 -1
  259. package/dist/ui/assets/idle-compaction-CACtwRU_.js +0 -1
  260. package/dist/ui/assets/idle-compaction-settings-wK6JTbJh.js +0 -1
  261. package/dist/ui/assets/image-markers-DXh8szCT.js +0 -1
  262. package/dist/ui/assets/image-markers-Gur55AOh.js +0 -1
  263. package/dist/ui/assets/kernel-worker-Da1sBAJS.js +0 -4940
  264. package/dist/ui/assets/lick-manager-DtpJc-rA.js +0 -2
  265. package/dist/ui/assets/lick-urls-f41PW9LN.js +0 -1
  266. package/dist/ui/assets/main-BwL0siqZ.js +0 -22
  267. package/dist/ui/assets/main-cherry-D1l6FfCM.js +0 -1
  268. package/dist/ui/assets/navigation-watcher-C3S1JDXr.js +0 -1
  269. package/dist/ui/assets/new-session-DyvxhZfj.js +0 -2
  270. package/dist/ui/assets/oauth-bootstrap-KB9SK_o_.js +0 -2
  271. package/dist/ui/assets/oauth-service-CT-Lvflt.js +0 -1
  272. package/dist/ui/assets/oauth-service-nBlvta_T.js +0 -1
  273. package/dist/ui/assets/panel-rpc-handlers-BPA7Umeo.js +0 -2
  274. package/dist/ui/assets/picker-popup-BjCTzsQH.js +0 -1
  275. package/dist/ui/assets/picker-popup-CFr7T4TJ.js +0 -1
  276. package/dist/ui/assets/preview-url-BvtKejEp.js +0 -1
  277. package/dist/ui/assets/provider-settings-CHQp2onM.js +0 -1
  278. package/dist/ui/assets/provider-settings-Dp2FBrlU.js +0 -2
  279. package/dist/ui/assets/provider-store-access-8IJH8x4u.js +0 -1
  280. package/dist/ui/assets/providers-DuO7vxZy.js +0 -2
  281. package/dist/ui/assets/proxied-fetch-B0SF_J0b.js +0 -1
  282. package/dist/ui/assets/proxied-fetch-CNztWUVW.js +0 -2
  283. package/dist/ui/assets/remote-cdp-transport-BZuQZZe1.js +0 -1
  284. package/dist/ui/assets/request-body-CsruB58l.js +0 -1
  285. package/dist/ui/assets/rest-ops-31ZkM4IG.js +0 -1
  286. package/dist/ui/assets/rest-ops-D6OyHX5S.js +0 -1
  287. package/dist/ui/assets/run-b1PI_1dP.js +0 -81
  288. package/dist/ui/assets/runtime-env-BFnohVwN.js +0 -1
  289. package/dist/ui/assets/runtime-env-Dc36nUmg.js +0 -1
  290. package/dist/ui/assets/runtime-env-NCI8LQob.js +0 -1
  291. package/dist/ui/assets/runtime-env-a_l4ilH_.js +0 -1
  292. package/dist/ui/assets/secret-topology-B8MYKYm6.js +0 -1
  293. package/dist/ui/assets/serial-picker-fzg2DxKj.js +0 -1
  294. package/dist/ui/assets/setup-standalone-prelude-C2jWAIl4.js +0 -2
  295. package/dist/ui/assets/setup-sudo-BK3Rz-OI.js +0 -2
  296. package/dist/ui/assets/shared-BpOmrBY4.js +0 -1
  297. package/dist/ui/assets/shared-CTdWt5ZU.js +0 -4
  298. package/dist/ui/assets/silent-renew-backoff-B8p8Ja1t.js +0 -1
  299. package/dist/ui/assets/silent-renew-backoff-BjF-rXLR.js +0 -1
  300. package/dist/ui/assets/slicc-app-url-DnN_aesz.js +0 -1
  301. package/dist/ui/assets/slicc-version-CUqwa07v.js +0 -1
  302. package/dist/ui/assets/src-DXa5EsFV.js +0 -1
  303. package/dist/ui/assets/src-XLzS9HFL.js +0 -1
  304. package/dist/ui/assets/state-C7WiY9TK.js +0 -42
  305. package/dist/ui/assets/sync-dialog-BZ2j4xTg.js +0 -1
  306. package/dist/ui/assets/tab-teleport-D1Xeuund.js +0 -1
  307. package/dist/ui/assets/transformers-env-DnkszgHP.js +0 -1
  308. package/dist/ui/assets/tray-runtime-config-D9gR_d0I.js +0 -1
  309. package/dist/ui/assets/tray-runtime-config-DCaFjGSS.js +0 -1
  310. package/dist/ui/assets/tray-sidecar-CWqVyj-w.js +0 -2
  311. package/dist/ui/assets/tray-sync-protocol-BNw4_0UD.js +0 -1
  312. package/dist/ui/assets/tray-sync-protocol-BZ5yhJH9.js +0 -1
  313. package/dist/ui/assets/tray-webrtc-De2SkVvZ.js +0 -1
  314. package/dist/ui/assets/usb-picker-B8B4LJT7.js +0 -1
  315. package/dist/ui/assets/wc-browser-AyZY1PPl.js +0 -1
  316. package/dist/ui/assets/wc-follower-CYLEd4rs.js +0 -17
  317. package/dist/ui/assets/wc-follower-oauth-CTgC7D7W.js +0 -5
  318. package/dist/ui/assets/wc-live-s5MA_zAo.js +0 -8
  319. package/dist/ui/assets/wc-nav-DHUiLdz3.js +0 -2
  320. package/dist/ui/assets/wc-onboarding-CX3HBRTZ.js +0 -2
  321. package/dist/ui/assets/wc-permissions-providers-BzoJwkWd.js +0 -2
  322. package/dist/ui/assets/wc-placeholder-BPLzZhYP.js +0 -4
  323. package/dist/ui/assets/wc-settings-tszLzSGm.js +0 -59
  324. package/dist/ui/assets/wc-shell-BBDMmI8N.js +0 -122
  325. package/dist/ui/assets/wc-shortcuts-BWBA9QlD.js +0 -11
  326. package/dist/ui/assets/wc-sprinkles-Cx9Zvx6r.js +0 -2
  327. package/dist/ui/assets/wc-transcript-export-B6x5VMbH.js +0 -2
  328. package/dist/ui/assets/wc-tray-DEV2i60z.js +0 -5
  329. package/dist/ui/assets/whisper-session-i96-W77q.js +0 -2
@@ -0,0 +1,98 @@
1
+ /**
2
+ * RFC 8288 Web Linking — `Link` header parser and builder.
3
+ *
4
+ * Pure module, no I/O. Used by:
5
+ * - the CDP navigation watcher (CLI/Electron) to extract handoff/upskill links
6
+ * from main-frame document responses
7
+ * - the chrome.webRequest observer (extension) to do the same
8
+ * - the playwright-cli / curl wrappers for generic discovery
9
+ *
10
+ * The parser handles:
11
+ * - comma-separated link-values, with commas inside quoted-strings preserved
12
+ * - multiple `Link:` header instances merged per RFC 7230
13
+ * - `param=token`, `param="quoted"` (with backslash escapes), and
14
+ * `param*=ext-value` forms (RFC 8187, UTF-8 charset only)
15
+ * - the "rel" parameter as a space-separated list of relation types
16
+ * - anchor and target URI resolution against an optional base URL
17
+ *
18
+ * The builder produces a single header value from a list of links and is the
19
+ * inverse of the parser for the subset of inputs SLICC produces (no exotic
20
+ * parameter names, RFC 8187 used only when a value contains non-ASCII).
21
+ */
22
+ export interface ParsedLink {
23
+ /** Resolved absolute URL of the link target (or the raw URI-reference if no base). */
24
+ href: string;
25
+ /** Relation type tokens parsed from the `rel` parameter. */
26
+ rel: string[];
27
+ /** Resolved absolute URL of the context (`anchor` parameter), if present. */
28
+ anchor?: string;
29
+ /** Media type of the target representation, if declared. */
30
+ type?: string;
31
+ /** Title of the target, RFC 8187-decoded if it was provided as `title*`. */
32
+ title?: string;
33
+ /** Language of the target, if declared. */
34
+ hreflang?: string;
35
+ /** All parameters seen on this link-value, lowercased keys. RFC 8187 ext-values are decoded. */
36
+ params: Record<string, string>;
37
+ }
38
+ export interface LinkInput {
39
+ /** Target URI-reference. Will be wrapped in `<>`. */
40
+ href: string;
41
+ /** One or more relation types. URI rels are quoted as a single token-list value. */
42
+ rel: string[] | string;
43
+ type?: string;
44
+ title?: string;
45
+ hreflang?: string;
46
+ anchor?: string;
47
+ /** Additional parameters; values are quoted if they contain non-token chars. */
48
+ params?: Record<string, string>;
49
+ /** Force `param*=UTF-8''…` encoding for the named parameters (e.g. `['title']`). */
50
+ extEncode?: string[];
51
+ }
52
+ export declare function parseLinkHeader(input: string | string[] | null | undefined, baseUrl?: string): ParsedLink[];
53
+ /**
54
+ * Decode an RFC 8187 ext-value: `charset "'" [language] "'" value-chars`.
55
+ * Only UTF-8 is required by the RFC; other charsets return null (caller
56
+ * keeps the regular parameter, if any).
57
+ */
58
+ export declare function decodeExtValue(value: string): string | null;
59
+ /**
60
+ * Format a single link as one RFC 8288 link-value. Caller joins multiple
61
+ * link-values with ", " (ASCII comma + SP) to form a complete header.
62
+ *
63
+ * Parameter values containing non-token characters are quoted. For
64
+ * non-Latin1 values (or values listed in `extEncode`), an RFC 8187
65
+ * `param*=UTF-8''…` form is emitted instead. CR/LF in parameter values
66
+ * is always percent-encoded so a malicious instruction can never break
67
+ * out of the header.
68
+ */
69
+ export declare function formatLink(link: LinkInput): string;
70
+ export declare function formatLinkHeader(links: LinkInput[]): string;
71
+ /**
72
+ * CDP `Network.Response.headers` bag. Values are strings at runtime (same-name
73
+ * headers joined with `\n`); non-string values are ignored when read.
74
+ */
75
+ export interface CdpNetworkResponseHeaders {
76
+ readonly [headerName: string]: unknown;
77
+ }
78
+ /**
79
+ * Pull every `Link` header value out of a CDP `Network.Response.headers` bag.
80
+ * CDP joins same-name headers with `\n`; we preserve that for the parser to
81
+ * split.
82
+ */
83
+ export declare function getLinkHeaderValuesFromCdp(headers: CdpNetworkResponseHeaders | undefined): string[];
84
+ /**
85
+ * Pull every `Link` header value out of a chrome.webRequest responseHeaders
86
+ * array.
87
+ */
88
+ export declare function getLinkHeaderValuesFromWebRequest(headers: Array<{
89
+ name: string;
90
+ value?: string;
91
+ }> | undefined): string[];
92
+ /**
93
+ * Pull every `Link` header value out of a Fetch API `Headers` object. Headers
94
+ * collapses same-name values to a comma-joined string per the spec; the
95
+ * parser handles that natively.
96
+ */
97
+ export declare function getLinkHeaderValuesFromHeaders(headers: Headers | undefined): string[];
98
+ //# sourceMappingURL=link-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-header.d.ts","sourceRoot":"","sources":["../src/link-header.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,UAAU;IACzB,sFAAsF;IACtF,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gGAAgG;IAChG,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAqFD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,EAC3C,OAAO,CAAC,EAAE,MAAM,GACf,UAAU,EAAE,CA6Bd;AAwHD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY3D;AAID;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CA+BlD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAE3D;AA4FD;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,yBAAyB,GAAG,SAAS,GAC7C,MAAM,EAAE,CAQV;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,GAC3D,MAAM,EAAE,CAQV;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,EAAE,CAIrF"}
@@ -0,0 +1,441 @@
1
+ /**
2
+ * RFC 8288 Web Linking — `Link` header parser and builder.
3
+ *
4
+ * Pure module, no I/O. Used by:
5
+ * - the CDP navigation watcher (CLI/Electron) to extract handoff/upskill links
6
+ * from main-frame document responses
7
+ * - the chrome.webRequest observer (extension) to do the same
8
+ * - the playwright-cli / curl wrappers for generic discovery
9
+ *
10
+ * The parser handles:
11
+ * - comma-separated link-values, with commas inside quoted-strings preserved
12
+ * - multiple `Link:` header instances merged per RFC 7230
13
+ * - `param=token`, `param="quoted"` (with backslash escapes), and
14
+ * `param*=ext-value` forms (RFC 8187, UTF-8 charset only)
15
+ * - the "rel" parameter as a space-separated list of relation types
16
+ * - anchor and target URI resolution against an optional base URL
17
+ *
18
+ * The builder produces a single header value from a list of links and is the
19
+ * inverse of the parser for the subset of inputs SLICC produces (no exotic
20
+ * parameter names, RFC 8187 used only when a value contains non-ASCII).
21
+ */
22
+ /* ───────────────────────────── parser ───────────────────────────── */
23
+ function normalizeLinkHeaderInput(input) {
24
+ if (input == null)
25
+ return null;
26
+ // CDP joins multi-value headers with `\n`; treat it the same as separate
27
+ // header instances. Normalize for both shapes — array elements may also
28
+ // contain `\n`-joined values when callers preserve CDP's raw bag verbatim.
29
+ if (Array.isArray(input)) {
30
+ const headerString = input.join(', ').replace(/\n/g, ', ');
31
+ return headerString.length === 0 ? null : headerString;
32
+ }
33
+ if (typeof input === 'string') {
34
+ const headerString = input.replace(/\n/g, ', ');
35
+ return headerString.length === 0 ? null : headerString;
36
+ }
37
+ return null;
38
+ }
39
+ function readUnquotedParamValue(headerString, i) {
40
+ const len = headerString.length;
41
+ const start = i;
42
+ while (i < len &&
43
+ headerString[i] !== ';' &&
44
+ headerString[i] !== ',' &&
45
+ !isOWSChar(headerString[i]))
46
+ i++;
47
+ return { value: headerString.slice(start, i), end: i };
48
+ }
49
+ function readParamValue(headerString, i) {
50
+ const len = headerString.length;
51
+ i = skipOWS(headerString, i);
52
+ if (i >= len || headerString[i] !== '=')
53
+ return { value: '', end: i };
54
+ i++;
55
+ i = skipOWS(headerString, i);
56
+ if (i < len && headerString[i] === '"')
57
+ return readQuotedString(headerString, i);
58
+ return readUnquotedParamValue(headerString, i);
59
+ }
60
+ function readParamName(headerString, i) {
61
+ const len = headerString.length;
62
+ const nameStart = i;
63
+ while (i < len && isTokenChar(headerString.charCodeAt(i)))
64
+ i++;
65
+ /* c8 ignore next 2 -- unreachable: `*` (0x2a) is itself a tchar (see
66
+ isTokenChar's `case 0x2a`), so the while loop above already consumes a
67
+ trailing `*` before this check can run. */
68
+ if (i < len && headerString[i] === '*')
69
+ i++;
70
+ if (nameStart === i)
71
+ return null;
72
+ return { name: headerString.slice(nameStart, i).toLowerCase(), end: i };
73
+ }
74
+ function parseLinkParameters(headerString, startIndex) {
75
+ const rawParams = [];
76
+ const len = headerString.length;
77
+ let i = startIndex;
78
+ while (i < len) {
79
+ i = skipOWS(headerString, i);
80
+ if (i >= len)
81
+ break;
82
+ if (headerString[i] === ',')
83
+ return { params: rawParams, endIndex: i + 1 };
84
+ if (headerString[i] !== ';') {
85
+ return { params: rawParams, endIndex: skipToNextValue(headerString, i) };
86
+ }
87
+ i++;
88
+ i = skipOWS(headerString, i);
89
+ const parsedName = readParamName(headerString, i);
90
+ if (!parsedName) {
91
+ return { params: rawParams, endIndex: skipToNextValue(headerString, i) };
92
+ }
93
+ const { value, end } = readParamValue(headerString, parsedName.end);
94
+ rawParams.push([parsedName.name, value]);
95
+ i = end;
96
+ }
97
+ return { params: rawParams, endIndex: i };
98
+ }
99
+ export function parseLinkHeader(input, baseUrl) {
100
+ const headerString = normalizeLinkHeaderInput(input);
101
+ if (headerString == null)
102
+ return [];
103
+ const out = [];
104
+ const len = headerString.length;
105
+ let i = 0;
106
+ while (i < len) {
107
+ i = skipOWS(headerString, i);
108
+ if (i >= len)
109
+ break;
110
+ if (headerString[i] !== '<') {
111
+ i = skipToNextValue(headerString, i);
112
+ continue;
113
+ }
114
+ const uriEnd = headerString.indexOf('>', i + 1);
115
+ if (uriEnd === -1)
116
+ break;
117
+ const rawUri = headerString.slice(i + 1, uriEnd);
118
+ const { params: rawParams, endIndex } = parseLinkParameters(headerString, uriEnd + 1);
119
+ i = endIndex;
120
+ const link = buildLink(rawUri, rawParams, baseUrl);
121
+ if (link)
122
+ out.push(link);
123
+ }
124
+ return out;
125
+ }
126
+ function skipOWS(s, i) {
127
+ while (i < s.length && (s[i] === ' ' || s[i] === '\t'))
128
+ i++;
129
+ return i;
130
+ }
131
+ function isOWSChar(c) {
132
+ return c === ' ' || c === '\t';
133
+ }
134
+ function skipToNextValue(s, i) {
135
+ let inQuote = false;
136
+ while (i < s.length) {
137
+ const c = s[i];
138
+ if (inQuote) {
139
+ if (c === '\\' && i + 1 < s.length) {
140
+ i += 2;
141
+ continue;
142
+ }
143
+ if (c === '"')
144
+ inQuote = false;
145
+ }
146
+ else {
147
+ if (c === '"')
148
+ inQuote = true;
149
+ else if (c === ',')
150
+ return i + 1;
151
+ }
152
+ i++;
153
+ }
154
+ return i;
155
+ }
156
+ function readQuotedString(s, i) {
157
+ // s[i] === '"'
158
+ i++;
159
+ let result = '';
160
+ while (i < s.length) {
161
+ const c = s[i];
162
+ if (c === '\\') {
163
+ i++;
164
+ if (i < s.length) {
165
+ result += s[i];
166
+ i++;
167
+ }
168
+ }
169
+ else if (c === '"') {
170
+ return { value: result, end: i + 1 };
171
+ }
172
+ else {
173
+ result += c;
174
+ i++;
175
+ }
176
+ }
177
+ return { value: result, end: i };
178
+ }
179
+ function isTokenChar(code) {
180
+ // RFC 7230 tchar
181
+ if (code >= 0x30 && code <= 0x39)
182
+ return true; // 0-9
183
+ if (code >= 0x41 && code <= 0x5a)
184
+ return true; // A-Z
185
+ if (code >= 0x61 && code <= 0x7a)
186
+ return true; // a-z
187
+ switch (code) {
188
+ case 0x21: // !
189
+ case 0x23: // #
190
+ case 0x24: // $
191
+ case 0x25: // %
192
+ case 0x26: // &
193
+ case 0x27: // '
194
+ case 0x2a: // *
195
+ case 0x2b: // +
196
+ case 0x2d: // -
197
+ case 0x2e: // .
198
+ case 0x5e: // ^
199
+ case 0x5f: // _
200
+ case 0x60: // `
201
+ case 0x7c: // |
202
+ case 0x7e: // ~
203
+ return true;
204
+ }
205
+ return false;
206
+ }
207
+ function buildLink(rawUri, rawParams, baseUrl) {
208
+ const params = {};
209
+ const extOverrides = {};
210
+ for (const [name, value] of rawParams) {
211
+ if (name.endsWith('*')) {
212
+ const decoded = decodeExtValue(value);
213
+ if (decoded != null)
214
+ extOverrides[name.slice(0, -1)] = decoded;
215
+ continue;
216
+ }
217
+ // RFC 8288: rel MUST NOT appear more than once; ignore later occurrences.
218
+ if (name === 'rel' && 'rel' in params)
219
+ continue;
220
+ params[name] = value;
221
+ }
222
+ // RFC 8187 §4.3: ext value takes precedence over the regular value.
223
+ for (const [name, value] of Object.entries(extOverrides)) {
224
+ params[name] = value;
225
+ }
226
+ const href = resolveURI(rawUri, baseUrl);
227
+ const anchor = params.anchor != null ? resolveURI(params.anchor, baseUrl) : undefined;
228
+ const relRaw = params.rel ?? '';
229
+ const rel = relRaw.split(/[ \t]+/).filter((s) => s.length > 0);
230
+ const link = { href, rel, params };
231
+ if (anchor != null)
232
+ link.anchor = anchor;
233
+ if (params.type != null)
234
+ link.type = params.type;
235
+ if (params.title != null)
236
+ link.title = params.title;
237
+ if (params.hreflang != null)
238
+ link.hreflang = params.hreflang;
239
+ return link;
240
+ }
241
+ function resolveURI(ref, baseUrl) {
242
+ if (!baseUrl)
243
+ return ref;
244
+ try {
245
+ return new URL(ref, baseUrl).toString();
246
+ }
247
+ catch {
248
+ return ref;
249
+ }
250
+ }
251
+ /**
252
+ * Decode an RFC 8187 ext-value: `charset "'" [language] "'" value-chars`.
253
+ * Only UTF-8 is required by the RFC; other charsets return null (caller
254
+ * keeps the regular parameter, if any).
255
+ */
256
+ export function decodeExtValue(value) {
257
+ const firstQuote = value.indexOf("'");
258
+ if (firstQuote === -1)
259
+ return null;
260
+ const secondQuote = value.indexOf("'", firstQuote + 1);
261
+ if (secondQuote === -1)
262
+ return null;
263
+ const charset = value.slice(0, firstQuote).toLowerCase();
264
+ if (charset !== 'utf-8')
265
+ return null;
266
+ try {
267
+ return decodeURIComponent(value.slice(secondQuote + 1));
268
+ }
269
+ catch {
270
+ return null;
271
+ }
272
+ }
273
+ /* ───────────────────────────── builder ───────────────────────────── */
274
+ /**
275
+ * Format a single link as one RFC 8288 link-value. Caller joins multiple
276
+ * link-values with ", " (ASCII comma + SP) to form a complete header.
277
+ *
278
+ * Parameter values containing non-token characters are quoted. For
279
+ * non-Latin1 values (or values listed in `extEncode`), an RFC 8187
280
+ * `param*=UTF-8''…` form is emitted instead. CR/LF in parameter values
281
+ * is always percent-encoded so a malicious instruction can never break
282
+ * out of the header.
283
+ */
284
+ export function formatLink(link) {
285
+ const rels = Array.isArray(link.rel) ? link.rel : [link.rel];
286
+ const relValue = rels.join(' ');
287
+ const ext = new Set(link.extEncode ?? []);
288
+ const parts = [`<${link.href}>`];
289
+ // rel goes first by convention (improves human readability).
290
+ parts.push(`rel=${formatParamValue(relValue)}`);
291
+ appendParam(parts, 'type', link.type, ext.has('type'));
292
+ appendParam(parts, 'title', link.title, ext.has('title'));
293
+ appendParam(parts, 'hreflang', link.hreflang, ext.has('hreflang'));
294
+ appendParam(parts, 'anchor', link.anchor, ext.has('anchor'));
295
+ if (link.params) {
296
+ for (const [name, value] of Object.entries(link.params)) {
297
+ if (name === 'rel' ||
298
+ name === 'type' ||
299
+ name === 'title' ||
300
+ name === 'hreflang' ||
301
+ name === 'anchor')
302
+ continue;
303
+ appendParam(parts, name, value, ext.has(name));
304
+ }
305
+ }
306
+ return parts.join('; ');
307
+ }
308
+ export function formatLinkHeader(links) {
309
+ return links.map(formatLink).join(', ');
310
+ }
311
+ function appendParam(parts, name, value, forceExt) {
312
+ if (value == null)
313
+ return;
314
+ const useExt = forceExt || needsExtEncoding(value);
315
+ if (useExt) {
316
+ // RFC 8187: percent-encode non-attr-chars; UTF-8 charset only.
317
+ parts.push(`${name}*=UTF-8''${encodeRFC8187(value)}`);
318
+ }
319
+ else {
320
+ parts.push(`${name}=${formatParamValue(value)}`);
321
+ }
322
+ }
323
+ function needsExtEncoding(value) {
324
+ for (let i = 0; i < value.length; i++) {
325
+ const code = value.charCodeAt(i);
326
+ // Non-Latin1, control chars, or CR/LF — must use RFC 8187.
327
+ if (code > 0xff || code < 0x20 || code === 0x7f)
328
+ return true;
329
+ }
330
+ return false;
331
+ }
332
+ function formatParamValue(value) {
333
+ // Token (no quoting) if every char is a tchar, else quoted-string.
334
+ let needsQuote = value.length === 0;
335
+ if (!needsQuote) {
336
+ for (let i = 0; i < value.length; i++) {
337
+ if (!isTokenChar(value.charCodeAt(i))) {
338
+ needsQuote = true;
339
+ break;
340
+ }
341
+ }
342
+ }
343
+ if (!needsQuote)
344
+ return value;
345
+ // Escape backslash, double-quote; encode CR/LF defensively even though
346
+ // they are technically allowed inside quoted-string when surrounded by
347
+ // OWS — many HTTP intermediaries reject them.
348
+ let out = '"';
349
+ for (let i = 0; i < value.length; i++) {
350
+ const c = value[i];
351
+ const code = value.charCodeAt(i);
352
+ if (c === '\\' || c === '"') {
353
+ out += '\\' + c;
354
+ }
355
+ else if (code === 0x0d) {
356
+ out += '%0D';
357
+ }
358
+ else if (code === 0x0a) {
359
+ out += '%0A';
360
+ }
361
+ else {
362
+ out += c;
363
+ }
364
+ }
365
+ out += '"';
366
+ return out;
367
+ }
368
+ function encodeRFC8187(value) {
369
+ // attr-char per RFC 8187: ALPHA / DIGIT / "!" "#" "$" "&" "+" "-" "." "^" "_" "`" "|" "~"
370
+ const bytes = new TextEncoder().encode(value);
371
+ let out = '';
372
+ for (const byte of bytes) {
373
+ if ((byte >= 0x30 && byte <= 0x39) || // 0-9
374
+ (byte >= 0x41 && byte <= 0x5a) || // A-Z
375
+ (byte >= 0x61 && byte <= 0x7a) || // a-z
376
+ byte === 0x21 || // !
377
+ byte === 0x23 || // #
378
+ byte === 0x24 || // $
379
+ byte === 0x26 || // &
380
+ byte === 0x2b || // +
381
+ byte === 0x2d || // -
382
+ byte === 0x2e || // .
383
+ byte === 0x5e || // ^
384
+ byte === 0x5f || // _
385
+ byte === 0x60 || // `
386
+ byte === 0x7c || // |
387
+ byte === 0x7e // ~
388
+ ) {
389
+ out += String.fromCharCode(byte);
390
+ }
391
+ else {
392
+ out += '%' + byte.toString(16).toUpperCase().padStart(2, '0');
393
+ }
394
+ }
395
+ return out;
396
+ }
397
+ /**
398
+ * Pull every `Link` header value out of a CDP `Network.Response.headers` bag.
399
+ * CDP joins same-name headers with `\n`; we preserve that for the parser to
400
+ * split.
401
+ */
402
+ export function getLinkHeaderValuesFromCdp(headers) {
403
+ if (!headers)
404
+ return [];
405
+ const out = [];
406
+ for (const [name, value] of Object.entries(headers)) {
407
+ if (name.toLowerCase() !== 'link')
408
+ continue;
409
+ if (typeof value === 'string' && value.length > 0)
410
+ out.push(value);
411
+ }
412
+ return out;
413
+ }
414
+ /**
415
+ * Pull every `Link` header value out of a chrome.webRequest responseHeaders
416
+ * array.
417
+ */
418
+ export function getLinkHeaderValuesFromWebRequest(headers) {
419
+ if (!headers)
420
+ return [];
421
+ const out = [];
422
+ for (const h of headers) {
423
+ if (h.name.toLowerCase() !== 'link')
424
+ continue;
425
+ if (typeof h.value === 'string' && h.value.length > 0)
426
+ out.push(h.value);
427
+ }
428
+ return out;
429
+ }
430
+ /**
431
+ * Pull every `Link` header value out of a Fetch API `Headers` object. Headers
432
+ * collapses same-name values to a comma-joined string per the spec; the
433
+ * parser handles that natively.
434
+ */
435
+ export function getLinkHeaderValuesFromHeaders(headers) {
436
+ if (!headers)
437
+ return [];
438
+ const v = headers.get('link');
439
+ return v ? [v] : [];
440
+ }
441
+ //# sourceMappingURL=link-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-header.js","sourceRoot":"","sources":["../src/link-header.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * proxy-headers — pure helpers for the `/api/fetch-proxy` forbidden-header
3
+ * transport.
4
+ *
5
+ * The browser silently strips a small set of "forbidden" request headers
6
+ * (Cookie, Origin, Referer, Proxy-*) when calling `fetch()` from page code.
7
+ * The proxy server restores them by reading `X-Proxy-*` headers we send in
8
+ * their place. Likewise, `Set-Cookie` is stripped from response headers,
9
+ * so the proxy bundles all `Set-Cookie` values into a JSON-encoded
10
+ * `X-Proxy-Set-Cookie` header that the browser can read.
11
+ *
12
+ * Extracted from `proxied-fetch.ts` so the LLM-proxy service worker can
13
+ * reuse them — the SW build is a standalone IIFE bundle and can't import
14
+ * the shell-side `proxied-fetch` module which pulls in a much larger graph.
15
+ */
16
+ /**
17
+ * Encode request headers that browsers silently strip (forbidden headers).
18
+ * Cookie → X-Proxy-Cookie, Origin → X-Proxy-Origin, Referer → X-Proxy-Referer, Proxy-* → X-Proxy-Proxy-*
19
+ */
20
+ export declare function encodeForbiddenRequestHeaders(headers: Record<string, string> | undefined): Record<string, string>;
21
+ /**
22
+ * Decode request headers from the X-Proxy-* transport back to their real names.
23
+ * X-Proxy-Cookie → cookie, X-Proxy-Origin → origin, X-Proxy-Referer → referer,
24
+ * X-Proxy-Proxy-* → proxy-*. Inverse of `encodeForbiddenRequestHeaders` —
25
+ * used by the proxy server side (CLI Express handler, extension SW) before
26
+ * calling upstream `fetch()`. Match is case-insensitive on the `X-Proxy-`
27
+ * prefix; the decoded key is always lowercase.
28
+ */
29
+ export declare function decodeForbiddenRequestHeaders(headers: Record<string, string>): Record<string, string>;
30
+ /**
31
+ * Decode response headers that the proxy transported under non-forbidden names.
32
+ * X-Proxy-Set-Cookie (JSON array) → set-cookie (JSON array string)
33
+ */
34
+ export declare function decodeForbiddenResponseHeaders(headers: Record<string, string>): Record<string, string>;
35
+ /** Convert Headers or Record<string, string> to a plain Record<string, string>. */
36
+ export declare function headersToRecord(headers: Record<string, string> | Headers | undefined): Record<string, string> | undefined;
37
+ /**
38
+ * Coerce any `HeadersInit` shape (Headers / record / [k,v][] array) to a
39
+ * plain record so it can ride on `SecureFetchOptions.headers`. Returns
40
+ * `undefined` when no headers are present (or the result would be empty)
41
+ * so callers can omit the field entirely — preserving the "no empty
42
+ * object leak" contract verified by the `asWebFetch` Origin-propagation
43
+ * tests.
44
+ */
45
+ export declare function normalizeHeadersInit(headers: Headers | Record<string, string> | Array<[string, string]> | undefined): Record<string, string> | undefined;
46
+ //# sourceMappingURL=proxy-headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-headers.d.ts","sourceRoot":"","sources":["../src/proxy-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxB;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBxB;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAaxB;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,GAAG,SAAS,GACpD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAUpC;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,GAC9E,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAgBpC"}