sliccy 6.130.1 → 6.131.1

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 (328) hide show
  1. package/README.md +1 -1
  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 +418 -492
  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-XKjChfD5.js → account-store-B2fM_hVm.js} +3 -3
  53. package/dist/ui/assets/account-store-CnTVyV3B.js +1 -0
  54. package/dist/ui/assets/{adobe-DWv_nW7C.js → adobe-Cwc5x2uv.js} +1 -1
  55. package/dist/ui/assets/{adobe-B7sd2ey1.js → adobe-DDIBiAPC.js} +2 -2
  56. package/dist/ui/assets/{agent-bridge-CmEtyUJl.js → agent-bridge-BNzVNteR.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-D-QW1Bgf.js → apply-layout-CaZC02vG.js} +1 -1
  62. package/dist/ui/assets/{apps-Dl5abdz0.js → apps-BKCcSwUS.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-CZHEfw9U.js → azure-openai-BbS3zNfN.js} +1 -1
  65. package/dist/ui/assets/{azure-openai-rq6LQC_C.js → azure-openai-DS9LetAu.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-CjhIAx1j.js → cerebras-Bl6JS-Zz.js} +1 -1
  74. package/dist/ui/assets/{cerebras-UuG-yCJ_.js → cerebras-CXTvGhJy.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-AitKSc2i.js → connect-surface-Cga7yA1x.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-Ca0RuudO.js → directed-approval-D5JxaPCg.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-ClRFZsKp.js → fs-B5l0OgHF.js} +1 -1
  94. package/dist/ui/assets/{fs-0AC_1kYN.js → fs-WglxnM0m.js} +2 -2
  95. package/dist/ui/assets/github-CipnBUW0.js +1 -0
  96. package/dist/ui/assets/{github-copilot-hBCBR7n3.js → github-copilot-ByPeJOvj.js} +1 -1
  97. package/dist/ui/assets/{github-copilot-BlR9rGzE.js → github-copilot-CPGYy73b.js} +1 -1
  98. package/dist/ui/assets/{github-install-c-7WlKF0.js → github-install-B7uGR7D1.js} +1 -1
  99. package/dist/ui/assets/{github-DA1dJZHt.js → github-rNEu9Il2.js} +2 -2
  100. package/dist/ui/assets/{github-zip-BAPGRyWK.js → github-zip-CXwGYOT2.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-LDG2J6R7.js → help-aOXHqJ8Q.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-CLGBN8Zo.js → js-realm-worker-BNIyA4hZ.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-V_qJr_00.js → kernel-worker-_zyksCUm.js} +679 -628
  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-Z6hqEJOJ.js → local-llm-DZNM8DQQ.js} +1 -1
  121. package/dist/ui/assets/{local-llm-Ko45nuy7.js → local-llm-mXBzcfos.js} +1 -1
  122. package/dist/ui/assets/{magick-wasm-BEYfJbAX.js → magick-wasm-C7OGcZrJ.js} +2 -2
  123. package/dist/ui/assets/main-B-nfOo4q.js +22 -0
  124. package/dist/ui/assets/main-cherry-DSNvH0CD.js +1 -0
  125. package/dist/ui/assets/{mount-BrmPOs2_.js → mount-B4KSGLVw.js} +2 -2
  126. package/dist/ui/assets/{mount-O6L8YW8P.js → mount-Ch4xd9rB.js} +3 -3
  127. package/dist/ui/assets/{mount-bridge-client-CUPodVo6.js → mount-bridge-client-BejrWSrL.js} +1 -1
  128. package/dist/ui/assets/{mount-bridge-client-BrMqFu_x.js → mount-bridge-client-DGJyqEPG.js} +1 -1
  129. package/dist/ui/assets/{mount-picker-popup-CVvcLs1V.js → mount-picker-popup--ijSfN8u.js} +1 -1
  130. package/dist/ui/assets/{mount-recovery-lKw_Vyz_.js → mount-recovery-Di7nIeaF.js} +1 -1
  131. package/dist/ui/assets/navigation-watcher-C8xRyQBd.js +1 -0
  132. package/dist/ui/assets/new-session-ClnfXCAZ.js +2 -0
  133. package/dist/ui/assets/oauth-bootstrap-DESksVSP.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-DUyhVHOH.js → openai-codex-ByROFNSi.js} +1 -1
  137. package/dist/ui/assets/{openai-codex-39sNBZa4.js → openai-codex-nfIOpXSu.js} +1 -1
  138. package/dist/ui/assets/{openrouter-Dt0-tju5.js → openrouter-BfHAZQmK.js} +1 -1
  139. package/dist/ui/assets/{openrouter-Dpc-slj8.js → openrouter-CqAv3VZj.js} +1 -1
  140. package/dist/ui/assets/{openrouter-oauth-Bw9klnns.js → openrouter-oauth-BoC1y3uz.js} +1 -1
  141. package/dist/ui/assets/{openrouter-oauth-WcOnlgk3.js → openrouter-oauth-DQITUCdi.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-B6r8KSY4.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-BKNTonMh.js → provider-CuvQQp10.js} +2 -2
  150. package/dist/ui/assets/{provider-Bc9U8jIG.js → provider-NGK7XrJs.js} +1 -1
  151. package/dist/ui/assets/provider-settings-C_7ia6Wg.js +2 -0
  152. package/dist/ui/assets/provider-settings-s-43s4y0.js +1 -0
  153. package/dist/ui/assets/provider-store-access-BLtf32eE.js +1 -0
  154. package/dist/ui/assets/{provider-store-access-CvRhpMjO.js → provider-store-access-CMt1lgF6.js} +2 -2
  155. package/dist/ui/assets/providers-Cc4NoSCd.js +2 -0
  156. package/dist/ui/assets/{providers-Chea6cTR.js → providers-CtPlPUAl.js} +1 -1
  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-Dg39s0LK.js → quick-llm-By0alwjq.js} +1 -1
  162. package/dist/ui/assets/{recovery-screen-B5CPvW63.js → recovery-screen-Cr55gwtB.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-BMFAdS2O.js → run-Bf9B4QDH.js} +3 -3
  171. package/dist/ui/assets/run-Bub_JJ9Q.js +29 -0
  172. package/dist/ui/assets/{run-DZMSwK6o.js → run-CUXVFhoI.js} +1 -1
  173. package/dist/ui/assets/run-mzRo2_pR.js +81 -0
  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-DcYjRdMg.js → session-freezer-FCAjtzB9.js} +3 -3
  180. package/dist/ui/assets/{setup-feature-flags-remote-w6i7-xsn.js → setup-feature-flags-remote-AO0av6y4.js} +1 -1
  181. package/dist/ui/assets/setup-standalone-prelude-C-gDZsJ6.js +2 -0
  182. package/dist/ui/assets/setup-sudo-CyDP6flA.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-DHmzZdlX.js → skills-CoT8PzSA.js} +1 -1
  188. package/dist/ui/assets/slicc-app-url-B9OxaBDe.js +1 -0
  189. package/dist/ui/assets/slicc-version-C11usX8a.js +1 -0
  190. package/dist/ui/assets/{snapshot-CB063Z3h.js → snapshot-C26Hnrzl.js} +1 -1
  191. package/dist/ui/assets/{snapshot-features-CpPq39XU.js → snapshot-features-DMqvwv22.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-DihPwc0x.js +42 -0
  198. package/dist/ui/assets/{store-BiIJ0_As.js → store-BFQaIUNf.js} +1 -1
  199. package/dist/ui/assets/{store-IAZCSKrZ.js → store-jCHEXPsn.js} +1 -1
  200. package/dist/ui/assets/{sudo-llO15-hr.js → sudo-DV79W8d_.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-D4-saTZd.js → upgrade-detection-DS0TnOrq.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-BKv2ap0T.js → wc-extension-NZBjLMIl.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-BdUaqkeK.js +17 -0
  220. package/dist/ui/assets/wc-follower-oauth-B6m2XpVI.js +5 -0
  221. package/dist/ui/assets/wc-live-Doom1Cuk.js +8 -0
  222. package/dist/ui/assets/wc-nav-DX0vhaA2.js +2 -0
  223. package/dist/ui/assets/wc-onboarding-DWR8Cofn.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-EhKkP8p0.js +4 -0
  227. package/dist/ui/assets/wc-settings-D_ym_qw0.js +59 -0
  228. package/dist/ui/assets/wc-shell-p7cHxhJQ.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-Bm5U1hNI.js +2 -0
  232. package/dist/ui/assets/wc-transcript-export-DdEuCfi6.js +2 -0
  233. package/dist/ui/assets/wc-tray-DL-rVcIK.js +5 -0
  234. package/dist/ui/assets/whisper-session-DW7HkDu2.js +2 -0
  235. package/dist/ui/assets/{xai-grok-0dg6iolO.js → xai-grok-DbCJs1Ps.js} +1 -1
  236. package/dist/ui/assets/{xai-grok-pGpFfbjv.js → xai-grok-QZxyqlOs.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-Bt3zihHK.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-Bo32za86.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/lick-manager-DtpJc-rA.js +0 -2
  264. package/dist/ui/assets/lick-urls-f41PW9LN.js +0 -1
  265. package/dist/ui/assets/main-DG-TOKaI.js +0 -22
  266. package/dist/ui/assets/main-cherry-D1l6FfCM.js +0 -1
  267. package/dist/ui/assets/navigation-watcher-C3S1JDXr.js +0 -1
  268. package/dist/ui/assets/new-session-Bl4ZsQ9b.js +0 -2
  269. package/dist/ui/assets/oauth-bootstrap-Ch6w-P0O.js +0 -2
  270. package/dist/ui/assets/oauth-service-CT-Lvflt.js +0 -1
  271. package/dist/ui/assets/oauth-service-nBlvta_T.js +0 -1
  272. package/dist/ui/assets/panel-rpc-handlers-CRIaZYfR.js +0 -2
  273. package/dist/ui/assets/picker-popup-BjCTzsQH.js +0 -1
  274. package/dist/ui/assets/picker-popup-CFr7T4TJ.js +0 -1
  275. package/dist/ui/assets/preview-url-BvtKejEp.js +0 -1
  276. package/dist/ui/assets/provider-settings-9D34aQwf.js +0 -1
  277. package/dist/ui/assets/provider-settings-BdsyHTuR.js +0 -2
  278. package/dist/ui/assets/provider-store-access-Dk0cF7LZ.js +0 -1
  279. package/dist/ui/assets/providers-gHHjy3ja.js +0 -2
  280. package/dist/ui/assets/proxied-fetch-B0SF_J0b.js +0 -1
  281. package/dist/ui/assets/proxied-fetch-CNztWUVW.js +0 -2
  282. package/dist/ui/assets/remote-cdp-transport-BZuQZZe1.js +0 -1
  283. package/dist/ui/assets/request-body-CsruB58l.js +0 -1
  284. package/dist/ui/assets/rest-ops-31ZkM4IG.js +0 -1
  285. package/dist/ui/assets/rest-ops-D6OyHX5S.js +0 -1
  286. package/dist/ui/assets/run-C31PlCiF.js +0 -81
  287. package/dist/ui/assets/runtime-env-BFnohVwN.js +0 -1
  288. package/dist/ui/assets/runtime-env-Dc36nUmg.js +0 -1
  289. package/dist/ui/assets/runtime-env-NCI8LQob.js +0 -1
  290. package/dist/ui/assets/runtime-env-a_l4ilH_.js +0 -1
  291. package/dist/ui/assets/secret-topology-B8MYKYm6.js +0 -1
  292. package/dist/ui/assets/serial-picker-fzg2DxKj.js +0 -1
  293. package/dist/ui/assets/setup-standalone-prelude-DFrkjkWu.js +0 -2
  294. package/dist/ui/assets/setup-sudo-C0g6ApHD.js +0 -2
  295. package/dist/ui/assets/shared-BpOmrBY4.js +0 -1
  296. package/dist/ui/assets/shared-CTdWt5ZU.js +0 -4
  297. package/dist/ui/assets/silent-renew-backoff-B8p8Ja1t.js +0 -1
  298. package/dist/ui/assets/silent-renew-backoff-BjF-rXLR.js +0 -1
  299. package/dist/ui/assets/slicc-app-url-DnN_aesz.js +0 -1
  300. package/dist/ui/assets/slicc-version-CVpFSZ60.js +0 -1
  301. package/dist/ui/assets/src-DXa5EsFV.js +0 -1
  302. package/dist/ui/assets/src-XLzS9HFL.js +0 -1
  303. package/dist/ui/assets/state-Ct1GOwP8.js +0 -42
  304. package/dist/ui/assets/sync-dialog-BZ2j4xTg.js +0 -1
  305. package/dist/ui/assets/tab-teleport-D1Xeuund.js +0 -1
  306. package/dist/ui/assets/transformers-env-DnkszgHP.js +0 -1
  307. package/dist/ui/assets/tray-runtime-config-D9gR_d0I.js +0 -1
  308. package/dist/ui/assets/tray-runtime-config-DCaFjGSS.js +0 -1
  309. package/dist/ui/assets/tray-sidecar-CWqVyj-w.js +0 -2
  310. package/dist/ui/assets/tray-sync-protocol-BNw4_0UD.js +0 -1
  311. package/dist/ui/assets/tray-sync-protocol-BZ5yhJH9.js +0 -1
  312. package/dist/ui/assets/tray-webrtc-De2SkVvZ.js +0 -1
  313. package/dist/ui/assets/usb-picker-B8B4LJT7.js +0 -1
  314. package/dist/ui/assets/wc-browser-AyZY1PPl.js +0 -1
  315. package/dist/ui/assets/wc-follower-DEUkZTu_.js +0 -17
  316. package/dist/ui/assets/wc-follower-oauth-CTgC7D7W.js +0 -5
  317. package/dist/ui/assets/wc-live-DkTXA2Bw.js +0 -8
  318. package/dist/ui/assets/wc-nav-2fZPqw9y.js +0 -2
  319. package/dist/ui/assets/wc-onboarding-C8kBkCKD.js +0 -2
  320. package/dist/ui/assets/wc-permissions-providers-BzoJwkWd.js +0 -2
  321. package/dist/ui/assets/wc-placeholder-CzEI-8XA.js +0 -4
  322. package/dist/ui/assets/wc-settings--cPEMbHv.js +0 -59
  323. package/dist/ui/assets/wc-shell-58xXdR-i.js +0 -122
  324. package/dist/ui/assets/wc-shortcuts-BWBA9QlD.js +0 -11
  325. package/dist/ui/assets/wc-sprinkles-CN5LWTpu.js +0 -2
  326. package/dist/ui/assets/wc-transcript-export-B6x5VMbH.js +0 -2
  327. package/dist/ui/assets/wc-tray-D--vd5uV.js +0 -5
  328. package/dist/ui/assets/whisper-session-i96-W77q.js +0 -2
@@ -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"}
@@ -0,0 +1,133 @@
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 function encodeForbiddenRequestHeaders(headers) {
21
+ if (!headers)
22
+ return {};
23
+ const result = {};
24
+ for (const [key, value] of Object.entries(headers)) {
25
+ const lower = key.toLowerCase();
26
+ if (lower === 'cookie') {
27
+ result['X-Proxy-Cookie'] = value;
28
+ }
29
+ else if (lower === 'origin') {
30
+ result['X-Proxy-Origin'] = value;
31
+ }
32
+ else if (lower === 'referer') {
33
+ result['X-Proxy-Referer'] = value;
34
+ }
35
+ else if (lower.startsWith('proxy-')) {
36
+ result[`X-Proxy-${key}`] = value;
37
+ }
38
+ else {
39
+ result[key] = value;
40
+ }
41
+ }
42
+ return result;
43
+ }
44
+ /**
45
+ * Decode request headers from the X-Proxy-* transport back to their real names.
46
+ * X-Proxy-Cookie → cookie, X-Proxy-Origin → origin, X-Proxy-Referer → referer,
47
+ * X-Proxy-Proxy-* → proxy-*. Inverse of `encodeForbiddenRequestHeaders` —
48
+ * used by the proxy server side (CLI Express handler, extension SW) before
49
+ * calling upstream `fetch()`. Match is case-insensitive on the `X-Proxy-`
50
+ * prefix; the decoded key is always lowercase.
51
+ */
52
+ export function decodeForbiddenRequestHeaders(headers) {
53
+ const result = {};
54
+ for (const [key, value] of Object.entries(headers)) {
55
+ const lower = key.toLowerCase();
56
+ if (lower === 'x-proxy-cookie') {
57
+ result['cookie'] = value;
58
+ }
59
+ else if (lower === 'x-proxy-origin') {
60
+ result['origin'] = value;
61
+ }
62
+ else if (lower === 'x-proxy-referer') {
63
+ result['referer'] = value;
64
+ }
65
+ else if (lower.startsWith('x-proxy-proxy-')) {
66
+ result[lower.replace(/^x-proxy-/, '')] = value;
67
+ }
68
+ else {
69
+ result[key] = value;
70
+ }
71
+ }
72
+ return result;
73
+ }
74
+ /**
75
+ * Decode response headers that the proxy transported under non-forbidden names.
76
+ * X-Proxy-Set-Cookie (JSON array) → set-cookie (JSON array string)
77
+ */
78
+ export function decodeForbiddenResponseHeaders(headers) {
79
+ const result = {};
80
+ for (const [key, value] of Object.entries(headers)) {
81
+ const lower = key.toLowerCase();
82
+ if (lower === 'x-proxy-set-cookie') {
83
+ // Value is a JSON array of Set-Cookie strings from the proxy.
84
+ // Keep as JSON array string since Record<string,string> can only hold one value.
85
+ result['set-cookie'] = value;
86
+ }
87
+ else {
88
+ result[key] = value;
89
+ }
90
+ }
91
+ return result;
92
+ }
93
+ /** Convert Headers or Record<string, string> to a plain Record<string, string>. */
94
+ export function headersToRecord(headers) {
95
+ if (!headers)
96
+ return undefined;
97
+ if (headers instanceof Headers) {
98
+ const rec = {};
99
+ headers.forEach((v, k) => {
100
+ rec[k] = v;
101
+ });
102
+ return rec;
103
+ }
104
+ return headers;
105
+ }
106
+ /**
107
+ * Coerce any `HeadersInit` shape (Headers / record / [k,v][] array) to a
108
+ * plain record so it can ride on `SecureFetchOptions.headers`. Returns
109
+ * `undefined` when no headers are present (or the result would be empty)
110
+ * so callers can omit the field entirely — preserving the "no empty
111
+ * object leak" contract verified by the `asWebFetch` Origin-propagation
112
+ * tests.
113
+ */
114
+ export function normalizeHeadersInit(headers) {
115
+ if (!headers)
116
+ return undefined;
117
+ if (headers instanceof Headers) {
118
+ const rec = {};
119
+ headers.forEach((v, k) => {
120
+ rec[k] = v;
121
+ });
122
+ return Object.keys(rec).length === 0 ? undefined : rec;
123
+ }
124
+ if (Array.isArray(headers)) {
125
+ const rec = {};
126
+ for (const [k, v] of headers)
127
+ rec[k] = v;
128
+ return Object.keys(rec).length === 0 ? undefined : rec;
129
+ }
130
+ const rec = { ...headers };
131
+ return Object.keys(rec).length === 0 ? undefined : rec;
132
+ }
133
+ //# sourceMappingURL=proxy-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-headers.js","sourceRoot":"","sources":["../src/proxy-headers.ts"],"names":[],"mappings":"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"}