sliccy 4.15.0 → 4.15.2

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 (74) hide show
  1. package/dist/ui/assets/{account-store-DsugNw6n.js → account-store-54aTp1X5.js} +2 -2
  2. package/dist/ui/assets/{account-store-DhgAQ90t.js → account-store-H4y3g6Zl.js} +2 -2
  3. package/dist/ui/assets/{adobe-ChhWjU7X.js → adobe-BH1K2_f3.js} +1 -1
  4. package/dist/ui/assets/{adobe-hjx95ZEP.js → adobe-BIjdHlMn.js} +1 -1
  5. package/dist/ui/assets/{agent-message-to-chat-D95UX7Vo.js → agent-message-to-chat-D5FYx8R6.js} +1 -1
  6. package/dist/ui/assets/{apps-a9ozGG3r.js → apps-llqBP9fm.js} +1 -1
  7. package/dist/ui/assets/{azure-openai-CTBG_yfm.js → azure-openai-BofDUo00.js} +1 -1
  8. package/dist/ui/assets/{azure-openai-BXrkRUit.js → azure-openai-CKuf_X7U.js} +1 -1
  9. package/dist/ui/assets/{bsh-watchdog-CAYz_lhA.js → bsh-watchdog-C2Mj0lYX.js} +1 -1
  10. package/dist/ui/assets/{connect-surface-x3tNeGSY.js → connect-surface-C3p5t3bZ.js} +1 -1
  11. package/dist/ui/assets/dip-Cjxc1y9H.js +1 -0
  12. package/dist/ui/assets/{dist-Cc_3-IQF.js → dist-8P1vYtiI.js} +1 -1
  13. package/dist/ui/assets/{dist-BQvE9DMX.js → dist-DeRNUCVS.js} +1 -1
  14. package/dist/ui/assets/{es-BKUfPijl.js → es-bmufFbTZ.js} +1 -1
  15. package/dist/ui/assets/{fs-DMcZJ2uG.js → fs-DIV2O5f0.js} +2 -2
  16. package/dist/ui/assets/{fs-kSYwb8O4.js → fs-Rnl9nPXE.js} +1 -1
  17. package/dist/ui/assets/{github-Dbh7XmJU.js → github-B7yroJzR.js} +2 -2
  18. package/dist/ui/assets/{github-BfjTSvVj.js → github-Cec7szPd.js} +1 -1
  19. package/dist/ui/assets/{github-copilot-BlWsT0Jm.js → github-copilot-BUuFcxiS.js} +1 -1
  20. package/dist/ui/assets/{github-copilot-B-rV0KGR.js → github-copilot-VI7zanJD.js} +1 -1
  21. package/dist/ui/assets/{hear-CtZudGkO.js → hear-B7JxWUTD.js} +1 -1
  22. package/dist/ui/assets/icons-BU6llBsN.js +1 -0
  23. package/dist/ui/assets/{kernel-worker-CA8aRXZf.js → kernel-worker-BB-nUVFS.js} +19 -19
  24. package/dist/ui/assets/{kokoro-engine-CBS8ucob.js → kokoro-engine-C4Pgz11W.js} +1 -1
  25. package/dist/ui/assets/{lick-ws-bridge-M1nW-Tnx.js → lick-ws-bridge-CiOOUXCg.js} +1 -1
  26. package/dist/ui/assets/{local-llm-C0DI6oFP.js → local-llm-D7zhOUjd.js} +1 -1
  27. package/dist/ui/assets/{main-BdTYQoCT.js → main-T5PiQ8ba.js} +3 -3
  28. package/dist/ui/assets/{mount-R-AsUwOW.js → mount-B_uHBciJ.js} +1 -1
  29. package/dist/ui/assets/{mount-msqyVZf_.js → mount-DS0X8mY6.js} +2 -2
  30. package/dist/ui/assets/{new-session-DbgFp3lk.js → new-session-DeQXQEns.js} +2 -2
  31. package/dist/ui/assets/{oauth-bootstrap-C5Gd4vzR.js → oauth-bootstrap-DWzJhIxH.js} +2 -2
  32. package/dist/ui/assets/{openai-codex-CQH8lE-S.js → openai-codex-BW8-2p_8.js} +1 -1
  33. package/dist/ui/assets/{openai-codex-BvxaTTO9.js → openai-codex-c75VQ2F6.js} +1 -1
  34. package/dist/ui/assets/{panel-rpc-handlers-DHgsxot6.js → panel-rpc-handlers-BWjrYs4v.js} +1 -1
  35. package/dist/ui/assets/{provider-BSx2TJ_1.js → provider-BdrEqFjP.js} +1 -1
  36. package/dist/ui/assets/{provider-kNmGkmyJ.js → provider-Csv1p6FA.js} +2 -2
  37. package/dist/ui/assets/provider-store-access-11uldFX5.js +1 -0
  38. package/dist/ui/assets/provider-store-access-CJCDSXq0.js +1 -0
  39. package/dist/ui/assets/{providers-BmziQMDj.js → providers-DBOkYBi9.js} +1 -1
  40. package/dist/ui/assets/quick-llm-BjJNOIAW.js +1 -0
  41. package/dist/ui/assets/session-freezer-ClQ_l6J4.js +1 -0
  42. package/dist/ui/assets/setup-sudo-CGEyCft4.js +1 -0
  43. package/dist/ui/assets/{speak-Bwbu5Mgk.js → speak-CaS4OsZO.js} +1 -1
  44. package/dist/ui/assets/{sprinkle-manager-C1qCfmUw.js → sprinkle-manager-CsXfY4OC.js} +1 -1
  45. package/dist/ui/assets/{store-D1TGbQ72.js → store-Cafd9-oJ.js} +1 -1
  46. package/dist/ui/assets/{sudo-77K2f2hA.js → sudo-QBt5qQlu.js} +1 -1
  47. package/dist/ui/assets/{transformers-env-CbqfCRqP.js → transformers-env-4umHKoPj.js} +1 -1
  48. package/dist/ui/assets/{tray-leave-runtime-DIrJuzuT.js → tray-leave-runtime-B00RkNHc.js} +1 -1
  49. package/dist/ui/assets/{upgrade-detection-DLqN0ia1.js → upgrade-detection-BqV34udI.js} +1 -1
  50. package/dist/ui/assets/{wc-attach-X8ksZCCV.js → wc-attach-CbSEwK2u.js} +2 -2
  51. package/dist/ui/assets/{wc-detached-6UYujPAV.js → wc-detached-B6OurVLW.js} +1 -1
  52. package/dist/ui/assets/wc-extension-BERi3Byj.js +2 -0
  53. package/dist/ui/assets/wc-live-Cy2aAvjD.js +250 -0
  54. package/dist/ui/assets/{wc-nav-Dc7zIaUE.js → wc-nav-OUzyxSqg.js} +2 -2
  55. package/dist/ui/assets/{wc-onboarding-BpPxw2Ds.js → wc-onboarding-Bxwd7QwF.js} +2 -2
  56. package/dist/ui/assets/{wc-placeholder-CfMn5QJY.js → wc-placeholder-UhGWKHwM.js} +2 -2
  57. package/dist/ui/assets/{wc-settings-oFGQW2eo.js → wc-settings-BCwxP53w.js} +2 -2
  58. package/dist/ui/assets/{wc-shell-Ch_N1oW7.js → wc-shell-cQLC7hfN.js} +147 -147
  59. package/dist/ui/assets/{wc-sprinkles-BzLOByhL.js → wc-sprinkles-Bx9wACAI.js} +2 -2
  60. package/dist/ui/assets/{wc-tray-Bdk9KMxZ.js → wc-tray-J_sNM_0j.js} +3 -3
  61. package/dist/ui/assets/{xai-grok-DVQ8LZrG.js → xai-grok-BYGIrI1K.js} +1 -1
  62. package/dist/ui/assets/{xai-grok-Uo72Q85c.js → xai-grok-DzWGGqKi.js} +1 -1
  63. package/dist/ui/index.html +2 -2
  64. package/dist/ui/packages/webapp/index.html +2 -2
  65. package/package.json +3 -3
  66. package/dist/ui/assets/dip-DEzjImaZ.js +0 -1
  67. package/dist/ui/assets/iconsAndAliases-Bzj1tGpU.js +0 -1
  68. package/dist/ui/assets/provider-store-access-C3JwdlvC.js +0 -1
  69. package/dist/ui/assets/provider-store-access-Dd3wF31x.js +0 -1
  70. package/dist/ui/assets/quick-llm-wBjuCuBC.js +0 -1
  71. package/dist/ui/assets/session-freezer-CN184yUG.js +0 -1
  72. package/dist/ui/assets/setup-sudo-CHa8Hlpn.js +0 -1
  73. package/dist/ui/assets/wc-extension-Bk5B5dWC.js +0 -2
  74. package/dist/ui/assets/wc-live-BhetCV9k.js +0 -250
@@ -0,0 +1,250 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/sudo-QBt5qQlu.js","assets/logger-DDBAeTLF.js","assets/quick-llm-BjJNOIAW.js","assets/chunk-aKtaBQYM.js","assets/account-store-H4y3g6Zl.js","assets/preload-helper-zJ_50EbN.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/src-DlEHAkLd.js","assets/panel-rpc-DqT2FG7c.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-YOPqzMmL.js","assets/icons-BU6llBsN.js","assets/main-T5PiQ8ba.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/clipboard-DgFtRQbq.js","assets/llm-session-id-DVmZ9C2t.js","assets/mount-picker-popup-BORxgnGu.js","assets/usb-device-registry-BP58Vi0S.js","assets/serial-port-registry-Bc4wlwED.js","assets/hid-device-registry-D2LsJCRr.js","assets/cdp-Cbi5Katl.js","assets/remote-cdp-transport-Cf0sDZ5N.js","assets/main-cherry-Bap_NTtV.js","assets/new-session-DeQXQEns.js","assets/session-store-D32FcG0Q.js","assets/remote-vfs-client-BwJhhtIV.js","assets/types-idfTVsM8.js","assets/writable-vfs-client-DMYsajEE.js","assets/wc-onboarding-Bxwd7QwF.js","assets/welcome-detection-Cr8mNEkt.js","assets/legacy-styles-4PP74ISo.js","assets/theme-BBwuyzvz.js","assets/voice-reply-BdYE1gSs.js","assets/speak-C8nGyR-z.js","assets/kokoro-engine-B330eLPz.js","assets/transformers-env-6vj5CcH9.js","assets/cdn-url-builder-Cq7LLgru.js","assets/wc-placeholder-UhGWKHwM.js","assets/wc-attach-CbSEwK2u.js","assets/remote-terminal-view-FVcjc7kw.js","assets/browser-ukv9lM61.js","assets/terminal-session-client-C_tYJ1IB.js","assets/picker-approval-tzbkMw-e.js","assets/secret-env-DcfTe28K.js","assets/remote-sprinkle-vfs-e81pZJKo.js","assets/wc-sprinkles-Bx9wACAI.js","assets/wc-tray-J_sNM_0j.js","assets/shared-B7TdM-Ik.js","assets/sprinkle-renderer-GiRRbdBx.js","assets/wc-nav-OUzyxSqg.js","assets/wc-voice-erm0EtRv.js","assets/composer-speech-BuzPv_Yy.js","assets/whisper-session-DwkDWttW.js","assets/speech-GZe1rUoJ.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./dist-BmWy99kl.js";import{t}from"./preload-helper-zJ_50EbN.js";import{i as n,n as r,r as i,t as a}from"./context-compaction-CFWyOzX1.js";import{t as o}from"./logger-DDBAeTLF.js";import{d as s,f as c,m as l,s as u,t as d,v as f}from"./main-T5PiQ8ba.js";import{n as p,r as m}from"./hid-device-registry-D2LsJCRr.js";import{a as h,i as g}from"./serial-port-registry-Bc4wlwED.js";import{C as _,D as ee,E as te,S as ne,_ as re,a as ie,g as ae,h as oe,k as se,l as ce,m as le,n as ue,o as de,s as fe,w as pe,x as me,y as he}from"./usb-operations-CkcrNzZw.js";import{i as ge,r as _e}from"./usb-device-registry-BP58Vi0S.js";import{n as ve,t as ye}from"./proxy-error-9UvXMpzG.js";import{t as be}from"./icons-BU6llBsN.js";import{n as xe}from"./sprinkle-bridge-DrAUCEC_.js";import{i as Se,n as v,t as Ce}from"./theme-BBwuyzvz.js";import{n as we}from"./sprinkle-renderer-GiRRbdBx.js";import{c as Te,d as Ee,i as De,l as y,n as Oe,o as ke,r as Ae,s as je,t as Me}from"./wc-shell-cQLC7hfN.js";async function Ne(e){let{installSudoTestHook:n}=await t(async()=>{let{installSudoTestHook:e}=await import(`./sudo-QBt5qQlu.js`);return{installSudoTestHook:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]));n()}async function Pe(e){let{installPanelSudoResponder:n}=await t(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-QBt5qQlu.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]));n()}var Fe=typeof chrome<`u`&&!!chrome?.runtime?.id;async function b(e,t){if(t?.aborted)throw new DOMException(`aborted`,`AbortError`);let n=await S(e,!0,t);if(t?.aborted)throw new DOMException(`aborted`,`AbortError`);if(n===null)throw Error(`VFS read failed: ${e}`);return typeof n==`string`?n:new TextDecoder().decode(n)}var x=null;function Ie(){if(x)return x;if(typeof BroadcastChannel>`u`)return null;try{x=new BroadcastChannel(`preview-vfs`)}catch{return null}return x}async function S(e,t,n){let r=Ie();if(!r)return null;let i=`dip-${Date.now()}-${Math.random().toString(36).slice(2)}`;return new Promise(a=>{let o=!1,s=()=>{r.removeEventListener(`message`,c),n?.removeEventListener(`abort`,l)},c=e=>{if(!o&&!(e.data?.type!==`preview-vfs-response`||e.data.id!==i)){if(o=!0,s(),e.data.error){a(null);return}a(e.data.content??null)}},l=()=>{o||(o=!0,s(),a(null))};r.addEventListener(`message`,c),n?.addEventListener(`abort`,l),setTimeout(()=>{o||(o=!0,s(),a(null))},5e3),r.postMessage({type:`preview-vfs-read`,id:i,path:e,asText:t})})}var Le=[`/shared/sprinkles/`,`/workspace/skills/sprinkles/`,`/workspace/sprinkles/`],Re=[`/shared/`,`/workspace/skills/sprinkles/`,`/workspace/sprinkles/`];function ze(e){return Le.some(t=>e.startsWith(t))}function Be(e){return typeof e!=`string`||!e.startsWith(`/`)||e.includes(`..`)?!1:Re.some(t=>e.startsWith(t))}var C=new WeakSet,Ve=`,
3
+ exec: Object.assign(function(cmd) {
4
+ return _vfsCall('dip-exec', { cmd: cmd }, function(m) { return m.result; });
5
+ }, { spawn: function(argv) {
6
+ return _vfsCall('dip-jsh', { op: 'spawn', args: [argv] }, function(m) { return m.result; });
7
+ } }),
8
+ agent: function(prompt, opts) {
9
+ return _vfsCall('dip-agent', { prompt: prompt, opts: opts || null },
10
+ function(m) { return m.result; });
11
+ }`,He=`,
12
+ fetch: function(url, init) {
13
+ return _vfsCall('dip-jsh', { op: 'fetch', args: [url, init || null] }, function(m) { return m.result; });
14
+ },
15
+ http: { client: function(cfg) {
16
+ function mk(method) { return function(path, opts) { return _vfsCall('dip-jsh', { op: 'http', args: [cfg, method, path, opts || null] }, function(m) { return m.result; }); }; }
17
+ return { get: mk('get'), post: mk('post'), put: mk('put'), patch: mk('patch'), 'delete': mk('delete') };
18
+ } },
19
+ browser: {
20
+ findTab: function(q) { return _vfsCall('dip-jsh', { op: 'browser', args: ['findTab', q] }, function(m) { return m.result; }); },
21
+ ensureTab: function(url, options) { return _vfsCall('dip-jsh', { op: 'browser', args: ['ensureTab', url, options || {}] }, function(m) { return m.result; }); },
22
+ eval: function(tab, code) { return _vfsCall('dip-jsh', { op: 'browser', args: ['eval', tab, code] }, function(m) { return m.result; }); },
23
+ evalAsync: function(tab, code) { return _vfsCall('dip-jsh', { op: 'browser', args: ['evalAsync', tab, code] }, function(m) { return m.result; }); },
24
+ cookie: function(tab, name) { return _vfsCall('dip-jsh', { op: 'browser', args: ['cookie', tab, name] }, function(m) { return m.result; }); },
25
+ localStorage: function(tab, key) { return _vfsCall('dip-jsh', { op: 'browser', args: ['localStorage', tab, key] }, function(m) { return m.result; }); },
26
+ fetch: function(tab, url, opts) { return _vfsCall('dip-jsh', { op: 'browser', args: ['fetch', tab, url, opts || {}] }, function(m) { return m.result; }); }
27
+ },
28
+ fetchToFile: function(url, path) {
29
+ return _vfsCall('dip-jsh', { op: 'fetchToFile', args: [url, path] }, function(m) { return m.result; });
30
+ }`,Ue=`,
31
+ _device: function(channel, op, args) {
32
+ return _vfsCall('dip-device-op',
33
+ { channel: channel, op: op, args: args || [] },
34
+ function(m) { return m.result; });
35
+ },
36
+ hid: {
37
+ list: function() { return _vfsCall('dip-device-op', { channel: 'hid', op: 'list', args: [] }, function(m) { return m.result; }); },
38
+ request: function(filters) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'request', args: [filters || []] }, function(m) { return m.result; }); },
39
+ open: function(handle) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'open', args: [handle] }, function(m) { return m.result; }).then(function() {}); },
40
+ close: function(handle) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'close', args: [handle] }, function(m) { return m.result; }).then(function() {}); },
41
+ sendReport: function(handle, reportId, data) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'sendReport', args: [handle, reportId, data] }, function(m) { return m.result; }).then(function() {}); },
42
+ on: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners.add(cb); },
43
+ off: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners.delete(cb); }
44
+ },
45
+ serial: {
46
+ list: function() { return _vfsCall('dip-device-op', { channel: 'serial', op: 'list', args: [] }, function(m) { return m.result; }); },
47
+ request: function(filters) { return _vfsCall('dip-device-op', { channel: 'serial', op: 'request', args: [filters || []] }, function(m) { return m.result; }); },
48
+ open: function(handle, options) { return _vfsCall('dip-device-op', { channel: 'serial', op: 'open', args: [handle, options] }, function(m) { return m.result; }).then(function() {}); },
49
+ close: function(handle) { return _vfsCall('dip-device-op', { channel: 'serial', op: 'close', args: [handle] }, function(m) { return m.result; }).then(function() {}); }
50
+ },
51
+ usb: {
52
+ list: function() { return _vfsCall('dip-device-op', { channel: 'usb', op: 'list', args: [] }, function(m) { return m.result; }); },
53
+ request: function(filters) { return _vfsCall('dip-device-op', { channel: 'usb', op: 'request', args: [filters || []] }, function(m) { return m.result; }); },
54
+ open: function(handle) { return _vfsCall('dip-device-op', { channel: 'usb', op: 'open', args: [handle] }, function(m) { return m.result; }).then(function() {}); },
55
+ close: function(handle) { return _vfsCall('dip-device-op', { channel: 'usb', op: 'close', args: [handle] }, function(m) { return m.result; }).then(function() {}); }
56
+ }`;function We(e){return`(function() {
57
+ var _cbId = 0;
58
+ var _callbacks = {};
59
+ var _hidInputReportListeners = new Set();
60
+
61
+ function _vfsCall(type, params, extractResult) {
62
+ return new Promise(function(resolve, reject) {
63
+ var id = ++_cbId;
64
+ _callbacks[id] = function(msg) {
65
+ if (msg.error) reject(new Error(msg.error));
66
+ else resolve(extractResult ? extractResult(msg) : undefined);
67
+ };
68
+ var m = { type: type, id: id };
69
+ if (params) { for (var k in params) m[k] = params[k]; }
70
+ parent.postMessage(m, '*');
71
+ });
72
+ }
73
+
74
+ window.slicc = window.bridge = {
75
+ lick: function(event) {
76
+ var action = typeof event === 'string' ? event : event.action;
77
+ var data = typeof event === 'string' ? undefined : ('data' in event ? event.data : event);
78
+ parent.postMessage({ type: 'dip-lick', action: action, data: data }, '*');
79
+ },
80
+ /* Read-only VFS access. Mirrors the sprinkle bridge so dips can
81
+ check onboarding markers, profiles, etc. without a parent-side
82
+ handshake. */
83
+ readFile: function(path) {
84
+ return _vfsCall('dip-readfile', { path: path }, function(m) { return m.content; });
85
+ },
86
+ exists: function(path) {
87
+ return _vfsCall('dip-exists', { path: path }, function(m) { return m.exists; });
88
+ },
89
+ stat: function(path) {
90
+ return _vfsCall('dip-stat', { path: path }, function(m) { return m.stat; });
91
+ }${e?Ve:``}${e?He:``}${e?Ue:``}
92
+ };
93
+ function reportHeight() {
94
+ parent.postMessage({ type: 'dip-height',
95
+ height: document.documentElement.scrollHeight }, '*');
96
+ }
97
+ window.addEventListener('message', function(e) {
98
+ if (!e.data || typeof e.data.type !== 'string') return;
99
+ if (e.data.type === 'slicc-theme') {
100
+ document.documentElement.classList.toggle('theme-light', !!e.data.isLight);
101
+ return;
102
+ }
103
+ /* Pushed device events (currently 'hid:inputreport'). The host
104
+ attaches the underlying listener on slicc.hid.open(handle) for
105
+ this dip; teardown happens automatically on dispose. */
106
+ if (e.data.type === 'dip-device-event' && e.data.channel === 'hid:inputreport') {
107
+ _hidInputReportListeners.forEach(function(cb) {
108
+ try { cb(e.data.payload); } catch(ex) {}
109
+ });
110
+ return;
111
+ }
112
+ /* VFS callback responses target the originating call by id. */
113
+ if (e.data.id && _callbacks[e.data.id]) {
114
+ var cb = _callbacks[e.data.id];
115
+ delete _callbacks[e.data.id];
116
+ cb(e.data);
117
+ return;
118
+ }
119
+ /* Forward any other slicc-* message to in-page listeners via a
120
+ CustomEvent. Dips can opt in with
121
+ window.addEventListener('slicc-message', (ev) => ev.detail). */
122
+ if (e.data.type.indexOf('slicc-') === 0) {
123
+ try {
124
+ document.dispatchEvent(new CustomEvent('slicc-message', { detail: e.data }));
125
+ } catch (ex) {}
126
+ }
127
+ });
128
+ window.addEventListener('load', function() {
129
+ reportHeight();
130
+ new ResizeObserver(reportHeight).observe(document.body);
131
+ });
132
+ /* Support data-action attributes (Tool UI compat) — auto-lick on click.
133
+ Also intercept <a href> clicks and relay to the parent so links open
134
+ despite the iframe sandbox blocking top-level navigation. */
135
+ document.addEventListener('click', function(e) {
136
+ var el = e.target;
137
+ while (el && el !== document.body) {
138
+ if (el.dataset && el.dataset.action) {
139
+ var actionData = el.dataset.actionData;
140
+ if (actionData) { try { actionData = JSON.parse(actionData); } catch(ex) {} }
141
+ /* Picker hint (e.g. data-picker="directory") needs the parent to
142
+ run File System Access API on the click activation chain.
143
+ Forward as a separate message so the parent can run
144
+ showDirectoryPicker, stash the handle in IDB, then dispatch
145
+ the lick with the IDB key. */
146
+ var picker = el.dataset.picker;
147
+ if (picker) {
148
+ parent.postMessage({
149
+ type: 'dip-picker-action',
150
+ action: el.dataset.action,
151
+ data: actionData || null,
152
+ picker: picker,
153
+ }, '*');
154
+ } else {
155
+ window.slicc.lick({ action: el.dataset.action, data: actionData || null });
156
+ }
157
+ e.preventDefault();
158
+ e.stopPropagation();
159
+ return;
160
+ }
161
+ if (el.tagName === 'A' && el.getAttribute('href')) {
162
+ var href = el.getAttribute('href');
163
+ /* Allow in-iframe anchor navigation (#foo). Skip javascript: for safety. */
164
+ if (href.charAt(0) === '#') return;
165
+ if (/^javascript:/i.test(href)) { e.preventDefault(); return; }
166
+ /* Resolve relative URLs against the iframe's base. */
167
+ var resolved;
168
+ try { resolved = new URL(href, document.baseURI).href; } catch(ex) { resolved = href; }
169
+ parent.postMessage({ type: 'dip-open-link', url: resolved }, '*');
170
+ e.preventDefault();
171
+ e.stopPropagation();
172
+ return;
173
+ }
174
+ el = el.parentElement;
175
+ }
176
+ });
177
+ })();`}var Ge=`html,body{margin:0;padding:0;overflow:hidden;background:transparent;box-sizing:border-box}
178
+ *,*::before,*::after{box-sizing:inherit}
179
+ /* Vertical breathing room around dip content. Horizontal padding is owned
180
+ by the dip's own content (e.g. .sprinkle-action-card__body) so shtml
181
+ widgets that already pad themselves don't end up double-indented. The
182
+ ResizeObserver on document.body reports the post-padding scrollHeight
183
+ correctly, so auto-height continues to work. */
184
+ body{padding:12px 0;font-family:var(--s2-font-family, sans-serif);font-size:13px;color:var(--s2-content-default)}
185
+ .sprinkle-inline{padding:var(--s2-spacing-100) 0}
186
+ .sprinkle-inline .sprinkle-btn{padding:4px 12px;font-size:12px;height:28px;box-shadow:none}
187
+ .sprinkle-inline .sprinkle-btn:not([class*="sprinkle-btn--"]){background:var(--s2-bg-elevated)}
188
+ .sprinkle-inline .sprinkle-card{box-shadow:none;margin:0}
189
+ .sprinkle-inline .sprinkle-action-card{margin:0;width:100%}
190
+ .sprinkle-inline .sprinkle-action-card .sprinkle-table{width:100%}
191
+ .sprinkle-inline .sprinkle-grid{width:100%}
192
+ input[type="range"]{width:100%;height:4px;-webkit-appearance:none;appearance:none;background:var(--s2-gray-300);border-radius:2px;outline:none;cursor:default}
193
+ input[type="range"]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:var(--s2-accent);cursor:default;border:2px solid var(--s2-bg-base)}
194
+ input[type="range"]::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--s2-accent);cursor:default;border:2px solid var(--s2-bg-base)}
195
+ input[type="text"],input[type="number"],textarea{width:100%;padding:7px 12px;font-size:13px;font-family:var(--s2-font-family,sans-serif);color:var(--s2-content-default);background:var(--s2-bg-layer-2);border:1px solid var(--s2-border-subtle,var(--s2-gray-300));border-radius:8px;outline:none;box-sizing:border-box}
196
+ input[type="text"]:focus,input[type="number"]:focus,textarea:focus{border-color:var(--s2-accent);box-shadow:0 0 0 1px var(--s2-accent)}
197
+ input[type="text"]::placeholder,textarea::placeholder{color:var(--s2-content-disabled,var(--s2-gray-400))}
198
+ select{padding:6px 12px;font-size:13px;font-family:var(--s2-font-family,sans-serif);color:var(--s2-content-default);background:var(--s2-bg-layer-2);border:1px solid var(--s2-border-subtle,var(--s2-gray-300));border-radius:8px;outline:none;cursor:default}
199
+ select:focus{border-color:var(--s2-accent);box-shadow:0 0 0 1px var(--s2-accent)}
200
+ button{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:28px;padding:4px 12px;border:1px solid var(--s2-border-default,var(--s2-gray-300));border-radius:9999px;background:transparent;color:var(--s2-content-default);font-size:12px;font-weight:700;font-family:var(--s2-font-family,sans-serif);cursor:default;transition:background 130ms ease}
201
+ button:hover{background:color-mix(in srgb,var(--s2-content-default) 6%,transparent)}
202
+ button:disabled{opacity:0.4;pointer-events:none}
203
+ canvas{display:block;width:100%;border-radius:8px}
204
+ mark{background:color-mix(in srgb,var(--s2-accent) 25%,transparent);color:inherit;border-radius:2px;padding:0 2px}
205
+ .c-purple{background:#3C3489;color:#EEEDFE}.c-teal{background:#085041;color:#E1F5EE}
206
+ .c-coral{background:#712B13;color:#FAECE7}.c-pink{background:#72243E;color:#FBEAF0}
207
+ .c-gray{background:#444441;color:#F1EFE8}.c-blue{background:#0C447C;color:#E6F1FB}
208
+ .c-amber{background:#633806;color:#FAEEDA}.c-red{background:#791F1F;color:#FCEBEB}
209
+ .c-green{background:#27500A;color:#EAF3DE}`,Ke=`(function(){
210
+ window.addEventListener('message', function(e){
211
+ if (!e.data || e.data.type !== 'dip-draft-update') return;
212
+ var content = typeof e.data.content === 'string' ? e.data.content : '';
213
+ document.body.innerHTML = content;
214
+ if (window.lucide && typeof window.lucide.createIcons === 'function') {
215
+ try { window.lucide.createIcons(); } catch(ex){}
216
+ }
217
+ });
218
+ })();`;function qe(e,t,n=!1){let r=we(),i=Ce()?` class="theme-light"`:``,a=t||e.includes(`<slicc-editor`),o=t||e.includes(`<slicc-diff`),s=t?`<script>${Ke}<\/script>`:``;return`<!DOCTYPE html>
219
+ <html${i}><head>
220
+ <meta charset="utf-8">
221
+ <style>${r}</style>
222
+ <style>${Ge}</style>
223
+ <script>${We(n&&!t)}<\/script>
224
+ ${s}
225
+ ${a?`<script src="/slicc-editor.js"><\/script>`:``}
226
+ ${o?`<script src="/slicc-diff.js"><\/script>`:``}
227
+ <script src="/lucide-icons.js"><\/script>
228
+ </head>
229
+ <body class="sprinkle-inline">${e}</body></html>`}var w=new Set;function Je(e){if(typeof e?.type!=`string`||e.type.indexOf(`slicc-`)!==0)throw Error(`broadcastToDips: payload.type must start with 'slicc-'`);for(let t of w)try{t.postMessage(e,`*`)}catch{}}var T;function Ye(e){T=e}function E(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}function Xe(e,t){let n=t?.cwd??`.`,r=t?.allowedCommands??`*`,i=[`agent`];return t?.model&&i.push(`--model`,E(t.model)),t?.thinking&&i.push(`--thinking`,E(t.thinking)),t?.readOnly&&i.push(`--read-only`,E(t.readOnly)),i.push(E(n),E(r),E(e)),i.join(` `)}async function D(e){if(!T)return{stdout:``,stderr:`exec: shell bridge not available
230
+ `,exitCode:127};try{return await T(e)}catch(e){return{stdout:``,stderr:`exec: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function Ze(e,t){let n=await D(Xe(e,t));return{stdout:n.stdout||n.stderr,exitCode:n.exitCode}}async function Qe(e,t){let n=await xe(D,e,t);if(e===`fetch`){let e=n,t=atob(e.bodyBase64),r=new Uint8Array(t.length);for(let e=0;e<t.length;e++)r[e]=t.charCodeAt(e);return{...e,body:new TextDecoder(`utf-8`).decode(r)}}return n}var O=new WeakMap;function $e(e,t){try{e.postMessage({type:`dip-device-event`,channel:`hid:inputreport`,payload:t},`*`)}catch{}}async function et(e,t){let n=O.get(e);if(n||(n=new Map,O.set(e,n)),n.has(t))return;let r=await ne(m(),t,n=>{let r=n.bytes instanceof Uint8Array?n.bytes:new Uint8Array(n.bytes);$e(e,{handle:t,reportId:n.reportId,data:r})});n.set(t,r)}async function tt(e,t){let n=O.get(e);if(!n)return;let r=n.get(t);if(r){n.delete(t);try{await Promise.resolve(r())}catch{}}n.size===0&&O.delete(e)}function nt(e){let t=O.get(e);if(t){for(let e of t.values())try{Promise.resolve(e()).catch(()=>{})}catch{}O.delete(e)}}function rt(e){if(e instanceof Uint8Array)return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e)){let t=e;return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}if(Array.isArray(e))return new Uint8Array(e);throw Error(`expected Uint8Array, ArrayBuffer, or number[]`)}async function it(e,t,n,r){if(t===`hid`){let t=m();switch(n){case`list`:{let e=p();if(!e)throw Error(`WebHID is unavailable in this browser`);return ae(t,e)}case`request`:{let e=p();if(!e)throw Error(`WebHID is unavailable in this browser`);return he(t,e,r[0]??[])}case`info`:return oe(t,r[0]);case`open`:{let n=r[0];return await re(t,n),await et(e,n),{ok:!0}}case`close`:{let n=r[0];return await tt(e,n),await le(t,n),{ok:!0}}case`sendReport`:{let e=r[0],n=r[1],i=rt(r[2]);return await me(t,e,n,i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength)),{ok:!0}}default:throw Error(`hid: unknown op '${n}'`)}}if(t===`serial`){let e=h();switch(n){case`list`:{let t=g();if(!t)throw Error(`Web Serial is unavailable in this browser`);return te(e,t)}case`request`:{let t=g();if(!t)throw Error(`Web Serial is unavailable in this browser`);return se(e,t,r[0]??[])}case`info`:return pe(e,r[0]);case`open`:{let t=r[0];return await ee(e,t,r[1]??{baudRate:9600}),{ok:!0}}case`close`:return await _(e,r[0]),{ok:!0};default:throw Error(`serial: unknown op '${n}'`)}}if(t===`usb`){let e=ge();switch(n){case`list`:{let t=_e();if(!t)throw Error(`WebUSB is unavailable in this browser`);return de(e,t)}case`request`:{let t=_e();if(!t)throw Error(`WebUSB is unavailable in this browser`);return ce(e,t,r[0]??[])}case`info`:return ie(e,r[0]);case`open`:return await fe(e,r[0]),{ok:!0};case`close`:return await ue(e,r[0]),{ok:!0};default:throw Error(`usb: unknown op '${n}'`)}}throw Error(`unknown device channel '${t}'`)}async function at(e,t){if(!e||typeof t.id!=`number`)return!1;let n=n=>{try{e.postMessage({...n,id:t.id},`*`)}catch{}};if(!C.has(e))return n({type:`dip-device-op-response`,error:`device access not allowed for this dip`}),!0;let r=t.channel;if(r!==`hid`&&r!==`serial`&&r!==`usb`)return n({type:`dip-device-op-response`,error:`unknown device channel '${r}'`}),!0;try{n({type:`dip-device-op-response`,result:await it(e,r,typeof t.op==`string`?t.op:``,Array.isArray(t.args)?t.args:[])})}catch(e){n({type:`dip-device-op-response`,error:e instanceof Error?e.message:String(e)})}return!0}async function ot(e,t){if(!e||typeof t.id!=`number`)return!1;let n=n=>{try{e.postMessage({...n,id:t.id},`*`)}catch{}};if(!C.has(e))return n({type:`${t.type}-response`,error:`exec not allowed for this dip`}),!0;if(t.type===`dip-exec`)return n({type:`dip-exec-response`,result:await D(typeof t.cmd==`string`?t.cmd:``)}),!0;if(t.type===`dip-agent`)return n({type:`dip-agent-response`,result:await Ze(typeof t.prompt==`string`?t.prompt:``,t.opts)}),!0;if(t.type===`dip-jsh`){try{n({type:`dip-jsh-response`,result:await Qe(typeof t.op==`string`?t.op:``,Array.isArray(t.args)?t.args:[])})}catch(e){n({type:`dip-jsh-response`,error:e instanceof Error?e.message:String(e)})}return!0}return!1}function k(e,t,n,r=!1){let i=qe(t,!1,r);if(Fe)return gt(e,i,n,r);let a=document.createElement(`iframe`);a.setAttribute(`sandbox`,`allow-scripts allow-same-origin`),a.style.cssText=`width:100%;border:none;overflow:hidden;display:block;`,a.srcdoc=i,e.appendChild(a),a.contentWindow&&(v(a.contentWindow),w.add(a.contentWindow),r&&C.add(a.contentWindow)),a.addEventListener(`load`,()=>{v(a.contentWindow),a.contentWindow&&(w.add(a.contentWindow),r&&C.add(a.contentWindow))},{once:!0});let o=e=>{if(e.source!==a.contentWindow)return;let t=e.data;t?.type&&(t.type===`dip-lick`?n(t.action,t.data):t.type===`dip-height`?a.style.height=t.height+`px`:t.type===`dip-open-link`?ct(t.url):t.type===`dip-picker-action`?dt(t,n):t.type===`dip-readfile`||t.type===`dip-exists`||t.type===`dip-stat`?st(a.contentWindow,t):t.type===`dip-exec`||t.type===`dip-agent`||t.type===`dip-jsh`?ot(a.contentWindow,t):t.type===`dip-device-op`&&at(a.contentWindow,t))};return window.addEventListener(`message`,o),{dispose(){window.removeEventListener(`message`,o),Se(a.contentWindow),a.contentWindow&&(w.delete(a.contentWindow),C.delete(a.contentWindow),nt(a.contentWindow)),a.remove()}}}async function st(e,t){if(!e||typeof t.id!=`number`)return!1;let n=typeof t.path==`string`?t.path:``,r=n=>{try{e.postMessage({...n,id:t.id},`*`)}catch{}};if(!C.has(e))return r({type:`${t.type}-response`,error:`VFS access not allowed for this dip`}),!0;if(!Be(n))return r({type:`${t.type}-response`,error:`VFS path not allowed: ${n}`}),!0;if(t.type===`dip-readfile`){let e=await S(n,!0);return e===null?(r({type:`dip-readfile-response`,error:`Read failed`}),!0):(r({type:`dip-readfile-response`,content:typeof e==`string`?e:new TextDecoder().decode(e)}),!0)}if(t.type===`dip-exists`)return r({type:`dip-exists-response`,exists:await S(n,!0)!==null}),!0;if(t.type===`dip-stat`){let e=await S(n,!1);return e===null?(r({type:`dip-stat-response`,error:`Stat failed`}),!0):(r({type:`dip-stat-response`,stat:{isFile:!0,isDirectory:!1,size:typeof e==`string`?e.length:e.byteLength,mtimeMs:0}}),!0)}return!1}function ct(e){if(!(typeof e!=`string`||!e)&&/^(https?:|mailto:)/i.test(e))try{window.open(e,`_blank`,`noopener,noreferrer`)}catch{}}function lt(e,t){let n=[],r=e.querySelectorAll(`pre > code.language-shtml`);for(let e of r){let r=e.parentElement,i=e.textContent??``,a=document.createElement(`div`);a.className=`msg__dip`,r.replaceWith(a),n.push(k(a,i,t,!1))}let i=e.querySelectorAll(`img[src$=".shtml"]`);for(let e of i){let r=e.getAttribute(`src`);if(!r)continue;let i=document.createElement(`div`);i.className=`msg__dip`,e.alt&&i.setAttribute(`title`,e.alt),e.replaceWith(i);let a=new AbortController,o=null,s=!1;n.push({dispose(){s=!0,a.abort(),o&&=(o.dispose(),null)}});let c=r.startsWith(`/`),l=typeof navigator<`u`&&!!navigator.serviceWorker?.controller,u=c?`/preview${r}`:r,d=async()=>{if(c&&!l)return b(r,a.signal);let e;try{e=await fetch(u,{signal:a.signal})}catch(e){if(e?.name===`AbortError`)throw e;if(c)return b(r,a.signal);throw e}if(e.ok)return e.text();if(c)return b(r,a.signal);throw Error(`HTTP ${e.status}`)},f=c&&ze(r);d().then(e=>{s||!i.isConnected||(o=k(i,e,t,f))}).catch(e=>{s||e?.name===`AbortError`||(i.textContent=`Failed to load dip: ${r}`,i.style.cssText=`padding:8px;font-size:12px;color:var(--s2-negative);font-family:var(--s2-font-mono)`)})}return n}function ut(e){for(let t of e)try{t.dispose()}catch{}e.length=0}async function dt(e,t){let n=e.data??null,r=Array.isArray(n?.filters)?n.filters:[];switch(e.picker){case`directory`:await ft(e.action,t);return;case`usb-device`:await pt(e.action,r,t);return;case`serial-port`:await mt(e.action,r,t);return;case`hid-device`:await ht(e.action,r,t);return;default:t(e.action,e.data);return}}async function ft(e,n){let r=window;if(typeof r.showDirectoryPicker!=`function`){n(e,{error:`File System Access API not available`});return}let i;try{i=await r.showDirectoryPicker({mode:`readwrite`})}catch(t){if(t instanceof Error&&t.name===`AbortError`){n(e,{cancelled:!0});return}n(e,{error:t instanceof Error?t.message:String(t)});return}let a=`pendingMount:dip-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`;try{let{storePendingHandle:e}=await t(async()=>{let{storePendingHandle:e}=await import(`./mount-picker-popup-BORxgnGu.js`).then(e=>e.n);return{storePendingHandle:e}},__vite__mapDeps([21,3,1]));await e(a,i)}catch(t){n(e,{error:`failed to store directory handle: ${t instanceof Error?t.message:String(t)}`});return}n(e,{handleInIdb:!0,idbKey:a,dirName:i.name})}async function pt(e,n,r){let i=globalThis.navigator;if(typeof i?.usb?.requestDevice!=`function`){r(e,{error:`WebUSB is not available`});return}try{let a=await i.usb.requestDevice({filters:n}),{getSharedUsbRegistry:o,deviceToInfo:s}=await t(async()=>{let{getSharedUsbRegistry:e,deviceToInfo:t}=await import(`./usb-device-registry-BP58Vi0S.js`).then(e=>e.a);return{getSharedUsbRegistry:e,deviceToInfo:t}},__vite__mapDeps([22,3])),c=o().register(a);r(e,{granted:!0,handle:c,info:s(c,a)})}catch(t){if(t instanceof Error&&(t.name===`AbortError`||t.name===`NotFoundError`)){r(e,{cancelled:!0});return}r(e,{error:t instanceof Error?t.message:String(t)})}}async function mt(e,n,r){let i=globalThis.navigator;if(typeof i?.serial?.requestPort!=`function`){r(e,{error:`Web Serial is not available`});return}try{let a=await i.serial.requestPort(n.length?{filters:n}:{});if(!a){r(e,{cancelled:!0});return}let o=await t(()=>import(`./serial-port-registry-Bc4wlwED.js`).then(e=>e.o),__vite__mapDeps([23,3])),s=o.getSharedSerialRegistry(),c=s.register(a),l=s.get(c);r(e,{granted:!0,handle:c,info:l?o.deviceToInfo(c,l):{handle:c}})}catch(t){if(t instanceof Error&&(t.name===`AbortError`||t.name===`NotFoundError`)){r(e,{cancelled:!0});return}r(e,{error:t instanceof Error?t.message:String(t)})}}async function ht(e,n,r){let i=globalThis.navigator;if(typeof i?.hid?.requestDevice!=`function`){r(e,{error:`WebHID is not available`});return}try{let a=await i.hid.requestDevice({filters:n}),o=Array.isArray(a)?a:a?[a]:[];if(o.length===0){r(e,{cancelled:!0});return}let{getSharedHidRegistry:s,hidDeviceToInfo:c}=await t(async()=>{let{getSharedHidRegistry:e,hidDeviceToInfo:t}=await import(`./hid-device-registry-D2LsJCRr.js`).then(e=>e.a);return{getSharedHidRegistry:e,hidDeviceToInfo:t}},__vite__mapDeps([24,3])),l=s(),u=o.map(e=>c(l.register(e),e)),d=u[0];r(e,{granted:!0,handle:d.handle,info:d,devices:u})}catch(t){if(t instanceof Error&&(t.name===`AbortError`||t.name===`NotFoundError`)){r(e,{cancelled:!0});return}r(e,{error:t instanceof Error?t.message:String(t)})}}function gt(e,t,n,r=!1){let i=document.createElement(`iframe`);i.src=chrome.runtime.getURL(`sprinkle-sandbox.html`),i.style.cssText=`width:100%;border:none;overflow:hidden;display:block;`,e.appendChild(i);let a=e=>{if(e.source!==i.contentWindow)return;let t=e.data;t?.type&&(t.type===`dip-lick`?n(t.action,t.data):t.type===`dip-height`?i.style.height=t.height+`px`:t.type===`dip-open-link`?ct(t.url):t.type===`dip-readfile`||t.type===`dip-exists`||t.type===`dip-stat`?st(i.contentWindow,t):t.type===`dip-exec`||t.type===`dip-agent`||t.type===`dip-jsh`?ot(i.contentWindow,t):t.type===`dip-device-op`&&at(i.contentWindow,t))};return window.addEventListener(`message`,a),i.addEventListener(`load`,()=>{v(i.contentWindow),i.contentWindow&&(w.add(i.contentWindow),r&&C.add(i.contentWindow)),i.contentWindow?.postMessage({type:`dip-render`,srcdoc:t,isLight:Ce()},`*`)},{once:!0}),{dispose(){window.removeEventListener(`message`,a),Se(i.contentWindow),i.contentWindow&&(w.delete(i.contentWindow),C.delete(i.contentWindow),nt(i.contentWindow)),i.remove()}}}var A=o(`cone-memory-budget`),_t=4e3,vt=2e3,yt=1.25,bt=`/workspace/CLAUDE.md`,xt=`/sessions/index.json`,St=4096,Ct=/^## Auto-extracted/m,wt=`Consolidate the auto-extracted memory bullets below into a single tighter set of durable memories.
231
+
232
+ Rules:
233
+ - Output ONLY a single \`## Auto-extracted (consolidated)\` heading followed by markdown bullets.
234
+ - One fact per bullet. Drop duplicates and superseded facts. Keep the most recent / specific phrasing.
235
+ - Preserve concrete identifiers (file paths, URLs, IDs, names) verbatim.
236
+ - Be terse. Aim well under the original size.
237
+ - Do NOT add preamble, commentary, or any heading other than the single consolidated one.`;function Tt(e){return Math.round(_t+vt*Math.log2((Number.isFinite(e)&&e>=0?e:0)+2))}function Et(e){let t=Ct.exec(e);if(!t)return{header:e,autoExtracted:``};let n=t.index;return{header:e.slice(0,n),autoExtracted:e.slice(n)}}async function Dt(e){try{let t=await e.readFile(xt,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r.length:0}catch{return 0}}async function Ot(t){let{header:n,autoExtracted:r}=Et(t.currentContent);if(!r.trim())return t.currentContent;let i=`You are a memory consolidation assistant. You are given a markdown file's "auto-extracted" section — a list of memory bullets accumulated across sessions of an AI coding assistant. Your job is to rewrite that section as a tighter, deduplicated set of durable memories that fits well within ${t.budget} characters.
238
+
239
+ <auto-extracted>
240
+ ${r}
241
+ </auto-extracted>`,a={role:`user`,content:[{type:`text`,text:wt}],timestamp:Date.now()},o=await e(t.model,{systemPrompt:i,messages:[a]},{apiKey:t.apiKey,maxTokens:St,headers:t.headers,signal:t.signal});if(o.stopReason===`error`)throw Error(`Restructure call failed: ${o.errorMessage||`Unknown error`}`);let s=o.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
242
+ `).trim();if(!s)throw Error(`Restructure call returned empty content`);return`${n}${n.length===0||n.endsWith(`
243
+ `)?``:`
244
+ `}${s}\n`}async function kt(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=``;try{let n=await e.vfs.readFile(bt,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{return{restructured:!1,reason:`missing-file`}}let n=await Dt(e.vfs),r=Tt(n),i=r*yt;if(t.length<=i)return{restructured:!1,reason:`under-threshold`};A.info(`Cone memory over threshold — restructuring`,{size:t.length,budget:r,threshold:i,sessionCount:n});try{let n=await Ot({currentContent:t,budget:r,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(bt,n),A.info(`Cone memory restructured`,{before:t.length,after:n.length}),{restructured:!0}}catch(e){return A.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}function j(e){let t=``;for(let r of e){let e=r.role===`user`?`User`:`Assistant`;if(t+=`## ${e}\n${r.content}\n\n`,r.attachments?.length&&(t+=`Attachments:\n${r.attachments.map(e=>`- ${n(e)}`).join(`
245
+ `)}\n\n`),r.toolCalls)for(let e of r.toolCalls)t+=`### Tool: ${e.name}\nInput: ${JSON.stringify(e.input,null,2)}\nResult: ${e.result??``}\n\n`}return t}var M=o(`session-freezer`),At=4,jt=2048,Mt=40,N=`/sessions`,P=`/sessions/index.json`;async function Nt(e){let t=await Rt(e.sessionStore);if(!t||t.messages.length<At)return M.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=zt(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);await Ft(e,n,i);let a=await It(e,n,i)||Gt(t.messages);return await Lt(e,t,a,r,i?await Pt(e,a):void 0)}async function Pt(e,n){try{return F(await(e.pickIcon??(await t(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-BjJNOIAW.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([2,3,4,5,6,7,8,9,10,1,11,12,13,14,15,16,17,18,19,20]))).pickLucideIcon)({subject:`"${n}" — an archived chat session`})??void 0)}catch(e){M.warn(`Icon pick failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}}function F(e){if(e)return be(e)?e:void 0}async function Ft(e,t,n){if(!n){M.info(`LLM unavailable — skipping memory extraction; freezing anyway`);return}let r=``;try{r=await i({messages:t,instruction:a,model:e.model,apiKey:e.apiKey,maxTokens:jt,headers:e.headers})}catch(e){M.warn(`Memory extraction call failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}if(!r.trim()||r.trim()===`NONE`){M.info(`Memory extraction returned no durable memories`);return}try{await Jt(e.vfs,r.trim(),`new-session`,{model:e.model,apiKey:e.apiKey,headers:e.headers}),M.info(`Memory extracted and appended on new-session`)}catch(e){M.warn(`Memory append failed`,{error:e instanceof Error?e.message:String(e)})}}async function It(e,t,n){if(!n)return``;try{return Wt(await i({messages:t,instruction:r,model:e.model,apiKey:e.apiKey,maxTokens:Mt,headers:e.headers}))}catch(e){return M.warn(`Title generation call failed (using heuristic)`,{error:e instanceof Error?e.message:String(e)}),``}}async function Lt(e,t,n,r,i){let a=new Date().toISOString(),o=r===`quick`?`pending-${qt()}.md`:`${a.replace(/[:.]/g,`-`)}-${Kt(n)}.md`,s={id:t.id,title:n,frozenAt:a,createdAt:t.createdAt,updatedAt:t.updatedAt,messageCount:t.messages.length,messages:t.messages},c=Ut(s),l={filename:o,title:n,frozenAt:a,messageCount:t.messages.length,...i?{icon:i}:{},...r===`quick`?{pendingEnrichment:!0}:{}};try{return await I(e.vfs,N),await e.vfs.writeFile(`${N}/${o}`,c),await Yt(e.vfs,l),await e.vfs.flush(),M.info(`Cone session frozen`,{filename:o,title:n,messageCount:t.messages.length}),{...l,archive:s}}catch(e){return M.warn(`Failed to write frozen session to VFS`,{error:e instanceof Error?e.message:String(e)}),null}}async function Rt(e){try{return await e.load(`session-cone`)}catch(e){return M.warn(`Failed to load session-cone`,{error:e instanceof Error?e.message:String(e)}),null}}function zt(e){return e.map(e=>({role:e.role,content:[{type:`text`,text:e.content}],timestamp:e.timestamp}))}var Bt=`<!-- slicc:session-data
246
+ `,Vt=`
247
+ -->`;function Ht(e){return e.map(e=>{let t={id:e.id,role:e.role,content:e.content,timestamp:e.timestamp};return e.attachments?.length&&(t.attachments=e.attachments),e.toolCalls?.length&&(t.toolCalls=e.toolCalls.map(e=>({id:e.id,name:e.name,input:e.input,...e.result===void 0?{}:{result:e.result},...e.isError?{isError:e.isError}:{}}))),e.source&&(t.source=e.source),e.channel&&(t.channel=e.channel),t})}function Ut(e){let t=`---\nid: ${e.id}\ntitle: ${JSON.stringify(e.title)}\nfrozenAt: ${e.frozenAt}\ncreatedAt: ${e.createdAt}\nupdatedAt: ${e.updatedAt}\nmessageCount: ${e.messageCount}\n---\n\n`,n=`${Bt}${JSON.stringify(Ht(e.messages)).replace(/-->/g,`-- >`)}${Vt}\n\n`,r=`# ${e.title}\n\n`;return t+n+r+j(e.messages)}function Wt(e){let t=e.trim();return t=t.replace(/^["'`]+|["'`]+$/g,``).trim(),t=t.replace(/\s+/g,` `),t.length>80&&(t=t.slice(0,80).trimEnd()),t}function Gt(e){let t=e.find(e=>e.role===`user`);if(!t?.content)return`untitled-session`;let n=t.content.trim().replace(/\s+/g,` `);return n.length>60?`${n.slice(0,60)}…`:n||`untitled-session`}function Kt(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)||`session`}function qt(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}async function I(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function Jt(e,t,n,r){let i=`/workspace/CLAUDE.md`,a=``;try{let t=await e.readFile(i,{encoding:`utf-8`});a=typeof t==`string`?t:new TextDecoder().decode(t)}catch{await I(e,`/workspace`)}let o=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${n})`,s=`${a.length===0||a.endsWith(`
248
+ `)?``:`
249
+ `}\n${o}\n\n${t}\n`;await e.writeFile(i,a+s);try{await kt({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){M.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function Yt(e,t){let n=[];try{let t=await e.readFile(P,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch{}let r=[t,...n.filter(e=>e.filename!==t.filename)];await e.writeFile(P,JSON.stringify(r,null,2))}async function Xt(e){try{let t=await e.readFile(P,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function L(e){return`${N}/${e.filename}`}async function Zt(e,t,n){if(!t.pendingEnrichment)return null;let r=await $t(e,t);if(r===null)return null;let i=en(t,r);if(i===null)return null;let a=await tn(t,i,n);if(a===null)return null;let o=await Qt(n,a.newTitle);return await nn(e,t,a.bullets,n),await rn(e,t,r,a.newTitle,o)}async function Qt(e,t){if(e.pickIcon)try{return await F(await e.pickIcon({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){M.warn(`Enrichment icon pick failed (continuing without icon)`,{error:e instanceof Error?e.message:String(e)});return}}async function $t(e,t){try{let n=await e.readFile(L(t),{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){return e?.code===`ENOENT`?M.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):M.warn(`Failed to read pending archive (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}}function en(e,t){let n;try{n=R(t).messages}catch(t){return M.warn(`Failed to parse pending archive — leaving entry intact`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return n.length===0?(M.info(`Pending archive has no messages — skipping enrichment`,{filename:e.filename}),null):zt(n)}async function tn(e,t,n){let o=``;try{o=await i({messages:t,instruction:a,model:n.model,apiKey:n.apiKey,maxTokens:jt,headers:n.headers})}catch(t){return M.warn(`Enrichment memory call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}let s=``;try{s=Wt(await i({messages:t,instruction:r,model:n.model,apiKey:n.apiKey,maxTokens:Mt,headers:n.headers}))}catch(t){return M.warn(`Enrichment title call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return s?{bullets:o,newTitle:s}:(M.info(`Enrichment title call returned empty — entry stays pending`,{filename:e.filename}),null)}async function nn(e,t,n,r){let i=n.trim();if(!(!i||i===`NONE`))try{await Jt(e,i,`pending-enrichment`,{model:r.model,apiKey:r.apiKey,headers:r.headers})}catch(e){M.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}}async function rn(e,t,n,r,i){let a=L(t),o=an(n,r),s=`${t.frozenAt.replace(/[:.]/g,`-`)}-${Kt(r)}.md`,c=`${N}/${s}`;try{await I(e,N),await e.writeFile(c,o)}catch(e){return M.warn(`Enrichment write failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let l=i??t.icon,u={filename:s,title:r,frozenAt:t.frozenAt,messageCount:t.messageCount,...l?{icon:l}:{}};try{await sn(e,t.filename,u)}catch(e){return M.warn(`Enrichment index update failed (entry may stay pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(c!==a)try{await e.rm(a)}catch(e){M.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:a,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return M.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:s,title:r}),u}function an(e,t){let n=e.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!n)return e;let r=n[1].replace(/^title:\s*.+$/m,`title: ${JSON.stringify(t)}`),i=n[2];return i=i.replace(/^#\s+[^\n]*$/m,`# ${t}`),`---\n${r}\n---\n${i}`}var on=Promise.resolve();async function sn(e,t,n){let r=async()=>{let r=[];try{let t=await e.readFile(P,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(n);Array.isArray(i)&&(r=i)}catch{}let i=r.findIndex(e=>e.filename===t),a;i===-1?a=[n,...r.filter(e=>e.filename!==n.filename)]:(a=r.slice(),a[i]=n,a=a.filter((e,t)=>t===i||e.filename!==n.filename)),await e.writeFile(P,JSON.stringify(a,null,2))},i=on.then(r,r);return on=i.then(()=>void 0,()=>void 0),i}function R(e){let t=e,n=`Untitled`,r=t.match(/^---\n([\s\S]*?)\n---\n+/);if(r){t=t.slice(r[0].length);let e=r[1].match(/^title:\s*(.+?)\s*$/m);if(e){let t=e[1].trim();if(t.startsWith(`"`))try{let e=JSON.parse(t);typeof e==`string`&&(n=e)}catch{n=t.replace(/^"|"$/g,``)}else n=t}}let i=t.match(/<!-- slicc:session-data\n([\s\S]*?)\n-->\n*/);if(i){try{let e=i[1].replace(/-- >/g,`-->`),t=JSON.parse(e);if(Array.isArray(t))return{title:n,messages:t}}catch{}t=t.replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n*/,``)}return t=t.replace(/^#\s+[^\n]*\n+/,``),{title:n,messages:cn(t)}}function cn(e){let t=[],n=/^## (User|Assistant)\s*\n/gm,r=[],i;for(;(i=n.exec(e))!==null;)r.push({role:i[1]===`User`?`user`:`assistant`,start:i.index,bodyStart:i.index+i[0].length});for(let n=0;n<r.length;n++){let i=n+1<r.length?r[n+1].start:e.length,a=e.slice(r[n].bodyStart,i).trim();t.push({id:`frozen-${n}`,role:r[n].role,content:a,timestamp:0})}return t}var ln=`__slicc_binary__`,un=`b64`;function dn(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[ln]===un&&typeof t.data==`string`}function fn(e){let t=32768,n=``;for(let r=0;r<e.byteLength;r+=t){let i=e.subarray(r,Math.min(r+t,e.byteLength));n+=String.fromCharCode.apply(null,i)}return btoa(n)}function pn(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function z(e){if(e instanceof Uint8Array)return{[ln]:un,data:fn(e)};if(Array.isArray(e))return e.map(z);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=z(r);return t}return e}function B(e){if(dn(e))return pn(e.data);if(Array.isArray(e))return e.map(B);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=B(r);return t}return e}var mn=o(`panel-transport`);function hn(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function gn(){return{onMessage:e=>{let t=(t,n,r)=>(hn(t)&&e(B(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=z(e);chrome.runtime.sendMessage({source:`panel`,payload:n}).catch(e=>{mn.error(`failed to send to offscreen`,{error:e instanceof Error?e.message:String(e)})})}}}var _n=`slicc-groups`,vn=3,V={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`},H=null;async function yn(){if(H){let e=Object.values(V).every(e=>H.objectStoreNames.contains(e));if(H.version===vn&&e)return H;H.close(),H=null}return new Promise((e,t)=>{let n=indexedDB.open(_n,vn);n.onupgradeneeded=e=>{let t=e.target.result,n=e.oldVersion;if(n<1){if(!t.objectStoreNames.contains(V.MESSAGES)){let e=t.createObjectStore(V.MESSAGES,{keyPath:`id`});e.createIndex(`chatJid`,`chatJid`),e.createIndex(`timestamp`,`timestamp`),e.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}t.objectStoreNames.contains(V.SESSIONS)||t.createObjectStore(V.SESSIONS,{keyPath:`groupFolder`}),t.objectStoreNames.contains(V.TASKS)||t.createObjectStore(V.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),t.objectStoreNames.contains(V.STATE)||t.createObjectStore(V.STATE,{keyPath:`key`})}if(n<2){let n=e.target.transaction;if(t.objectStoreNames.contains(`groups`)){let e=n.objectStore(`groups`).getAll();e.onsuccess=()=>{let n=e.result;t.deleteObjectStore(`groups`);let r=t.createObjectStore(V.SCOOPS,{keyPath:`jid`});r.createIndex(`type`,`type`);for(let e of n){let t=e.isMain??!1,n={jid:e.jid,name:e.name,folder:e.folder,trigger:t?void 0:e.trigger||`@${e.folder}`,requiresTrigger:!t&&(e.requiresTrigger??!0),isCone:t,type:t?`cone`:`scoop`,assistantLabel:t?`sliccy`:e.config?.assistantName||e.folder,addedAt:e.addedAt,config:e.config?{systemPromptAppend:e.config.systemPromptAppend,timeout:e.config.timeout,assistantName:e.config.assistantName}:void 0};r.put(n)}}}else t.objectStoreNames.contains(V.SCOOPS)||t.createObjectStore(V.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}n<3&&(t.objectStoreNames.contains(V.WEBHOOKS)||t.createObjectStore(V.WEBHOOKS,{keyPath:`id`}),t.objectStoreNames.contains(V.CRONTASKS)||t.createObjectStore(V.CRONTASKS,{keyPath:`id`}))},n.onsuccess=()=>{H=n.result,e(H)},n.onerror=()=>t(n.error)})}async function bn(e,t=`readonly`){return(await yn()).transaction(e,t).objectStore(e)}async function xn(e){let t=await bn(V.STATE);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result?.value??null),i.onerror=()=>r(i.error)})}async function Sn(e,t){let n=await bn(V.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}var U=o(`tray-leader`),Cn=`leader-tray-session`,wn=3e4,Tn=1e4,En=1e3,Dn=3e4,On=2,kn=20,W={state:`inactive`,session:null,error:null};function An(){return{...W,session:W.session?{...W.session}:null}}var G=new Set;function jn(e){return G.add(e),()=>{G.delete(e)}}function K(e){if(W={...e,session:e.session?{...e.session}:null},G.size!==0)for(let e of[...G])try{e(An())}catch{}}var Mn=class{key;constructor(e=Cn){this.key=e}async load(){return Nn(await xn(this.key))}async save(e){await Sn(this.key,JSON.stringify(e))}async clear(){await Sn(this.key,``)}};function Nn(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t.workerBaseUrl!=`string`||typeof t.trayId!=`string`||typeof t.createdAt!=`string`||typeof t.controllerId!=`string`||typeof t.controllerUrl!=`string`||typeof t.joinUrl!=`string`||typeof t.webhookUrl!=`string`||typeof t.runtime!=`string`?null:{workerBaseUrl:t.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:t.controllerId,controllerUrl:t.controllerUrl,joinUrl:t.joinUrl,webhookUrl:t.webhookUrl,leaderKey:typeof t.leaderKey==`string`?t.leaderKey:void 0,leaderWebSocketUrl:typeof t.leaderWebSocketUrl==`string`?t.leaderWebSocketUrl:null,runtime:t.runtime}}catch{return null}}var Pn=class{options;store;fetchImpl;webSocketFactory;pingIntervalMs;connectTimeoutMs;reconnectEnabled;reconnectBaseDelayMs;reconnectMaxDelayMs;reconnectBackoffMultiplier;reconnectMaxAttempts;reconnectSleep;socket=null;pingTimer=null;currentSession=null;stopped=!1;reconnecting=!1;reconnectGeneration=0;constructor(e){this.options=e,this.store=e.store??new Mn,this.fetchImpl=e.fetchImpl??Rn(),this.webSocketFactory=e.webSocketFactory??(e=>new WebSocket(e)),this.pingIntervalMs=e.pingIntervalMs??wn,this.connectTimeoutMs=e.connectTimeoutMs??Tn;let t=e.reconnect;this.reconnectEnabled=t!==!1;let n=t===!1||!t?{}:t;this.reconnectBaseDelayMs=n.baseDelayMs??En,this.reconnectMaxDelayMs=n.maxDelayMs??Dn,this.reconnectBackoffMultiplier=n.backoffMultiplier??On,this.reconnectMaxAttempts=n.maxAttempts??kn,this.reconnectSleep=n.sleep??(e=>new Promise(t=>setTimeout(t,e)))}async start(){if(this.stopped=!1,this.currentSession&&this.socket)return K({state:`leader`,session:this.currentSession,error:null}),this.currentSession;K({state:`connecting`,session:null,error:null}),this.currentSession=null;try{let e=await this.connectOnce();U.info(`Leader joined tray`,{trayId:e.trayId,controllerId:e.controllerId,runtime:e.runtime});try{this.options.onLeaderReady?.(e)}catch(e){U.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return e}catch(e){throw K({state:`error`,session:this.currentSession,error:e instanceof Error?e.message:String(e)}),e}}stop(){this.stopped=!0,this.reconnecting=!1,this.reconnectGeneration++,this.tearDownSocket(),this.currentSession=null,K({state:`inactive`,session:null,error:null})}tearDownSocket(){this.pingTimer&&=(clearInterval(this.pingTimer),null);let e=this.socket;if(this.socket=null,e)try{e.close()}catch{}}async connectOnce(){let e=await this.store.load(),t=e?.workerBaseUrl===this.options.workerBaseUrl?e:null,n=await this.attachWithRecovery(t);this.currentSession=n;let r=await this.openLeaderSocket(n.leaderWebSocketUrl);return this.socket=r,this.startPingLoop(r),K({state:`leader`,session:n,error:null}),n}async handleUnexpectedDisconnect(e){if(this.stopped)return;if(!this.reconnectEnabled){U.warn(`Leader WebSocket dropped and auto-reconnect is disabled`,{reason:e}),this.tearDownSocket(),this.currentSession=null,K({state:`error`,session:null,error:`Leader WebSocket dropped: ${e}`});return}if(this.reconnecting)return;this.reconnecting=!0;let t=++this.reconnectGeneration;U.warn(`Leader WebSocket dropped — starting reconnect loop`,{reason:e}),this.tearDownSocket();let n=0,r=this.reconnectBaseDelayMs,i=e;for(;!this.stopped&&t===this.reconnectGeneration&&n<this.reconnectMaxAttempts&&(n++,K({state:`reconnecting`,session:this.currentSession,error:null,reconnectAttempts:n}),this.options.onReconnecting?.(n,i),U.info(`Leader reconnect attempt`,{attempt:n,delay:r}),await this.reconnectSleep(r),!(this.stopped||t!==this.reconnectGeneration));){try{let e=await this.connectOnce();if(this.stopped||t!==this.reconnectGeneration){this.tearDownSocket();break}this.reconnecting=!1,U.info(`Leader reconnect successful`,{attempt:n,trayId:e.trayId}),this.options.onReconnected?.(e);try{this.options.onLeaderReady?.(e)}catch(e){U.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return}catch(e){i=e instanceof Error?e.message:String(e),U.warn(`Leader reconnect attempt failed`,{attempt:n,error:i}),this.tearDownSocket()}r=Math.min(r*this.reconnectBackoffMultiplier,this.reconnectMaxDelayMs)}!this.stopped&&t===this.reconnectGeneration&&(this.reconnecting=!1,this.currentSession=null,K({state:`error`,session:null,error:`Leader reconnect failed after ${n} attempts: ${i}`,reconnectAttempts:n}),U.warn(`Leader reconnect gave up`,{attempts:n,lastError:i}),this.options.onReconnectGaveUp?.(i,n))}async clearSession(){await this.store.clear()}sendControlMessage(e){if(!this.socket)throw Error(`Tray leader WebSocket is not connected`);this.socket.send(JSON.stringify(e))}async attachWithRecovery(e){try{return await this.claimLeaderSession(e)}catch(t){if(!e||!In(t))throw t;return U.warn(`Stored tray session is stale, creating a fresh tray`,{trayId:e.trayId,error:t instanceof Error?t.message:String(t)}),await this.store.clear(),this.claimLeaderSession(null)}}async claimLeaderSession(e){let t=e??await this.createTraySession(),n=await this.fetchJson(t.controllerUrl,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:t.controllerId,leaderKey:t.leaderKey,runtime:this.options.runtime})});if(n.role!==`leader`||!n.leaderKey||!n.websocket?.url)throw Error(`Tray attach did not return leader access for controller ${n.controllerId}`);let r={...t,trayId:n.trayId,controllerId:n.controllerId,leaderKey:n.leaderKey,leaderWebSocketUrl:n.websocket.url,runtime:this.options.runtime};return await this.store.save(r),r}async createTraySession(){let e=this.options.kind?JSON.stringify({kind:this.options.kind}):void 0,t=await this.fetchJson(s(this.options.workerBaseUrl,`tray`),{method:`POST`,...e?{headers:{"content-type":`application/json`}}:{},...e?{body:e}:{}});return{workerBaseUrl:this.options.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:crypto.randomUUID(),controllerUrl:t.capabilities.controller.url,joinUrl:t.capabilities.join.url,webhookUrl:t.capabilities.webhook.url,runtime:this.options.runtime}}async openLeaderSocket(e){return await new Promise((t,n)=>{let r=this.webSocketFactory(e),i=!1,a=setTimeout(()=>{o(`Tray leader WebSocket timed out after ${this.connectTimeoutMs}ms waiting for leader.connected`);try{r.close(1e3,`leader.connected timeout`)}catch{}},this.connectTimeoutMs),o=e=>{i||(i=!0,clearTimeout(a),n(Error(e)))};r.addEventListener(`message`,e=>{let n=Ln(e.data);if(n){if(n.type===`leader.connected`){i||(i=!0,clearTimeout(a),t(r));return}if(n.type===`pong`){U.debug(`Tray leader heartbeat acknowledged`,{trayId:this.currentSession?.trayId});return}this.options.onControlMessage?.(n)}}),r.addEventListener(`close`,()=>o(`Tray leader WebSocket closed before leader.connected`)),r.addEventListener(`error`,()=>o(`Tray leader WebSocket failed before leader.connected`))})}startPingLoop(e){this.pingTimer&&clearInterval(this.pingTimer);let t=t=>{this.stopped||this.socket!==e||this.handleUnexpectedDisconnect(t).catch(e=>{U.warn(`Leader reconnect loop crashed`,{error:e instanceof Error?e.message:String(e)})})},n=()=>{try{e.send(JSON.stringify({type:`ping`}))}catch(e){t(`Leader ping send failed: ${e instanceof Error?e.message:String(e)}`)}};n(),this.pingTimer=setInterval(n,this.pingIntervalMs),e.addEventListener(`close`,()=>t(`Leader WebSocket closed`)),e.addEventListener(`error`,()=>t(`Leader WebSocket errored`))}async fetchJson(e,t){let n=await this.fetchImpl(e,t);if(!n.ok)throw await Fn.fromResponse(n);return await n.json()}},Fn=class e extends Error{status;code;constructor(e,t,n){super(n),this.status=e,this.code=t,this.name=`LeaderTrayHttpError`}static async fromResponse(t){try{let n=await t.json();return new e(t.status,n.code??null,n.error??`Tray request failed (${t.status})`)}catch{return new e(t.status,null,`Tray request failed (${t.status})`)}}};function In(e){return e instanceof Fn&&[403,404,410].includes(e.status)}function Ln(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function Rn(e=fetch){return typeof chrome<`u`&&chrome?.runtime?.id?(t,n)=>e(t,n):async(t,n={})=>{let r=typeof t==`string`?t:t.toString();try{if(new URL(r).origin===window.location.origin)return e(r,{...n,cache:`no-store`})}catch{}let i=new Headers(n.headers);i.set(`X-Target-URL`,r);let a=await e(`/api/fetch-proxy`,{...n,headers:i,cache:`no-store`});if(ye(a))throw Error(await ve(a));return a}}var q=o(`offscreen-client`),zn=class{eventListeners=new Set;callbacks;scoops=[];scoopStatuses=new Map;currentMessageId=new Map;ready=!1;stateRetryTimer=null;localFs=null;pendingClearAcks=new Map;pendingTranscriptRequests=new Map;pendingStatsRequests=new Map;transport;_selectedScoopJid=null;get selectedScoopJid(){return this._selectedScoopJid}scoopSelectedListeners=new Set;onScoopSelected(e){return this.scoopSelectedListeners.add(e),()=>{this.scoopSelectedListeners.delete(e)}}setSelectedScoopJid(e){if(this._selectedScoopJid!==e&&(this._selectedScoopJid=e,e!==null))for(let t of this.scoopSelectedListeners)try{t(e)}catch(e){q.error(`onScoopSelected handler threw`,{error:e instanceof Error?e.message:String(e)})}}locked=!1;constructor(e,t){this.callbacks=e,this.transport=t??gn(),this.setupMessageListener()}setLocalFS(e){this.localFs=e}getTransport(){return this.transport}createAgentHandle(){return{sendMessage:(e,t,n)=>{if(!this.selectedScoopJid){this.emitToUI({type:`error`,error:`No scoop selected`});return}this.send({type:`user-message`,scoopJid:this.selectedScoopJid,text:e,attachments:n,messageId:t??`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`})},onEvent:e=>(this.eventListeners.add(e),()=>this.eventListeners.delete(e)),stop:()=>{this.selectedScoopJid&&this.send({type:`abort`,scoopJid:this.selectedScoopJid})}}}getScoops(){return this.scoops}getScoop(e){return this.scoops.find(t=>t.jid===e)}isProcessing(e){return this.scoopStatuses.get(e)===`processing`}async registerScoop(e){if(!e.isCone)throw Error(`OffscreenClient.registerScoop is cone-only; use scoop_scoop for non-cone scoops`);this.scoops.find(t=>t.name===e.name)||(this.scoops.push(e),this.scoopStatuses.set(e.jid,`initializing`)),this.send({type:`cone-create`,name:e.name})}async unregisterScoop(e){this.send({type:`scoop-drop`,scoopJid:e}),this.scoops=this.scoops.filter(t=>t.jid!==e),this.scoopStatuses.delete(e)}createScoopTab(e){}async getGlobalMemory(){if(!this.localFs)return``;try{let e=await this.localFs.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});return typeof e==`string`?e:new TextDecoder().decode(e)}catch{return``}}getScoopContext(e){if(this.localFs)return{getFS:()=>this.localFs}}getSharedFS(){return this.localFs}stopScoop(e){this.send({type:`abort`,scoopJid:e})}async clearQueuedMessages(e){}async deleteQueuedMessage(e,t){}updateModel(){this.send({type:`refresh-model`})}setLocked(e){this.locked=e}setScoopThinkingLevel(e,t){this.send({type:`set-thinking-level`,scoopJid:e,level:t})}async clearAllMessages(){let e=`clear-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,t=new Promise(t=>{this.pendingClearAcks.set(e,t)});this.send({type:`clear-chat`,requestId:e}),await Promise.race([t,new Promise(e=>setTimeout(e,5e3))]),this.pendingClearAcks.delete(e)}clearFilesystem(){this.send({type:`clear-filesystem`})}requestScoopMessages(e){this.send({type:`request-scoop-messages`,scoopJid:e})}async getScoopTranscript(e){let t=`tr-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,n=new Promise(e=>{this.pendingTranscriptRequests.set(t,e)});this.send({type:`request-scoop-transcript`,requestId:t,scoopJid:e});let r=await Promise.race([n,new Promise(e=>setTimeout(()=>e(``),5e3))]);return this.pendingTranscriptRequests.delete(t),r}async getSessionStats(){let e=`st-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,t=new Promise(t=>{this.pendingStatsRequests.set(e,t)});this.send({type:`request-session-stats`,requestId:e});let n=await Promise.race([t,new Promise(e=>setTimeout(()=>e(null),5e3))]);return this.pendingStatsRequests.delete(e),n}requestState(){this.send({type:`request-state`});let e=0;this.stateRetryTimer=setInterval(()=>{if(e++,this.ready||e>20){this.stateRetryTimer&&=(clearInterval(this.stateRetryTimer),null);return}q.debug(`Retrying request-state`,{attempt:e}),this.send({type:`request-state`})},500)}isReady(){return this.ready}sprinkleOpHandler=null;forwardLickHandler=null;sendSprinkleLick(e,t,n,r){this.send({type:`sprinkle-lick`,sprinkleName:e,body:t,targetScoop:n,originLabel:r})}sendWebhookEvent(e,t,n){this.send({type:`lick-webhook-event`,webhookId:e,headers:t,body:n})}sendSetFollowerForwarding(e){this.send({type:`set-follower-forwarding`,enabled:e})}sendForwardedLick(e){this.send({type:`inject-forwarded-lick`,event:e})}setForwardLickHandler(e){this.forwardLickHandler=e}sendCherryHostEvent(e,t,n){this.send({type:`lick-cherry-host-event`,cherryRuntimeId:e,name:t,detail:n})}setSprinkleOpHandler(e){this.sprinkleOpHandler=e}sendRaw(e){this.send(e)}setupMessageListener(){this.transport.onMessage(e=>{if(e.source!==`offscreen`)return;let t=e.payload;t?.type===`sprinkle-op`&&this.sprinkleOpHandler?this.sprinkleOpHandler(t):this.handleOffscreenMessage(e.payload)})}handleOffscreenMessage(e){switch(e.type){case`offscreen-ready`:this.ready?(q.warn(`Offscreen restarted — re-requesting state`),this.ready=!1):q.info(`Offscreen engine ready`),this.send({type:`request-state`});break;case`agent-event`:this.handleAgentEvent(e);break;case`scoop-status`:this.handleScoopStatus(e);break;case`compaction-state`:this.callbacks.onCompactionStateChange?.(e.scoopJid,e.state);break;case`clear-chat-ack`:{let t=this.pendingClearAcks.get(e.requestId);t&&(this.pendingClearAcks.delete(e.requestId),t());break}case`scoop-created`:this.handleScoopCreated(e);break;case`scoop-list`:this.handleScoopList(e);break;case`state-snapshot`:this.handleStateSnapshot(e);break;case`error`:this.handleError(e);break;case`incoming-message`:this.handleIncomingMessage(e);break;case`message-updated`:this.handleMessageUpdated(e);break;case`scoop-messages-replaced`:{let t=e;this.resyncStreamPointer(t.scoopJid,t.messages),this.callbacks.onScoopMessagesReplaced?.(t.scoopJid,t.messages);break}case`scoop-transcript`:{let t=e,n=this.pendingTranscriptRequests.get(t.requestId);n&&(this.pendingTranscriptRequests.delete(t.requestId),n(t.transcript));break}case`session-stats`:{let t=e,n=this.pendingStatsRequests.get(t.requestId);n&&(this.pendingStatsRequests.delete(t.requestId),n({totalCost:t.totalCost,fills:t.fills}));break}case`tray-runtime-status`:{let t=e;Bn(t.leader,t.follower);break}case`forward-lick`:this.forwardLickHandler?.(e.event);break;case`terminal-status`:case`terminal-output`:case`terminal-media-preview`:case`terminal-exit`:case`terminal-cleared`:for(let t of this.terminalEventListeners)try{t(e)}catch(e){q.error(`terminal event listener error`,{error:e instanceof Error?e.message:String(e)})}break}}terminalEventListeners=new Set;onTerminalEvent(e){return this.terminalEventListeners.add(e),()=>this.terminalEventListeners.delete(e)}resyncStreamPointer(e,t){let n;for(let e=t.length-1;e>=0;e--){let r=t[e];if(r.role===`assistant`&&r.isStreaming){n=r.id;break}}n===void 0?this.currentMessageId.delete(e):this.currentMessageId.set(e,n)}handleAgentEvent(e){switch(e.eventType){case`text_delta`:case`tool_start`:case`tool_ui`:case`turn_end`:this.callbacks.onScoopActivity?.(e.scoopJid);break}if(e.scoopJid===this.selectedScoopJid)switch(e.eventType){case`text_delta`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${J()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`content_delta`,messageId:t,text:e.text??``});break}case`tool_start`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${J()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`tool_use_start`,messageId:t,toolName:e.toolName??``,toolInput:e.toolInput});break}case`tool_end`:{let t=this.currentMessageId.get(e.scoopJid);t&&this.emitToUI({type:`tool_result`,messageId:t,toolName:e.toolName??``,result:e.toolResult??``,isError:e.isError});break}case`tool_ui`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${J()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`tool_ui`,messageId:t,toolName:e.toolName??``,requestId:e.requestId??``,html:e.html??``});break}case`tool_ui_done`:{let t=this.currentMessageId.get(e.scoopJid);t&&this.emitToUI({type:`tool_ui_done`,messageId:t,requestId:e.requestId??``});break}case`response_done`:{let t=this.currentMessageId.get(e.scoopJid);t&&(this.emitToUI({type:`content_done`,messageId:t}),this.currentMessageId.delete(e.scoopJid));break}case`turn_end`:{let t=this.currentMessageId.get(e.scoopJid)??`done-${e.scoopJid}-${J()}`;this.currentMessageId.delete(e.scoopJid),this.emitToUI({type:`turn_end`,messageId:t});break}}}handleScoopStatus(e){this.scoopStatuses.set(e.scoopJid,e.status),this.callbacks.onStatusChange(e.scoopJid,e.status)}handleScoopCreated(e){let t=this.msgScoopToRegistered(e.scoop);this.scoops=this.scoops.filter(e=>e.name!==t.name||e.jid===t.jid),this.scoops.find(e=>e.jid===t.jid)||this.scoops.push(t),this.scoopStatuses.set(t.jid,e.scoop.status),this.callbacks.onScoopCreated(t)}handleScoopList(e){this.scoops=e.scoops.map(e=>this.msgScoopToRegistered(e));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);this.callbacks.onScoopListUpdate(e.scoops)}handleStateSnapshot(e){q.info(`Received state snapshot`,{scoopCount:e.scoops.length}),this.scoops=e.scoops.map(e=>this.msgScoopToRegistered(e));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);e.trayRuntimeStatus&&Bn(e.trayRuntimeStatus.leader,e.trayRuntimeStatus.follower);let t=!this.ready;t&&(this.ready=!0,this.stateRetryTimer&&=(clearInterval(this.stateRetryTimer),null)),this.callbacks.onScoopListUpdate(e.scoops),t&&this.callbacks.onReady?.()}handleError(e){e.scoopJid===this.selectedScoopJid&&this.emitToUI({type:`error`,error:e.error})}handleIncomingMessage(e){this.callbacks.onIncomingMessage(e.scoopJid,e.message)}handleMessageUpdated(e){this.callbacks.onMessageUpdate?.(e.scoopJid,{messageId:e.messageId,lickId:e.lickId,lickState:e.lickState})}msgScoopToRegistered(e){return{jid:e.jid,name:e.name,folder:e.folder,isCone:e.isCone,type:e.isCone?`cone`:`scoop`,requiresTrigger:!e.isCone,assistantLabel:e.assistantLabel,addedAt:new Date().toISOString(),...e.config?{config:{...e.config}}:{}}}emitToUI(e){for(let t of this.eventListeners)try{t(e)}catch(e){q.error(`Listener error`,{error:e instanceof Error?e.message:String(e)})}}send(e){if(this.locked){this.emitToUI({type:`error`,error:`This window is detached. Close it and use the detached tab.`});return}this.transport.send(e)}};function J(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function Bn(e,t){K({state:e.state,error:e.error,reconnectAttempts:e.reconnectAttempts,session:e.session?{...e.session}:null}),f({state:t.state,joinUrl:t.joinUrl,trayId:t.trayId,error:t.error,lastError:t.lastError,reconnectAttempts:t.reconnectAttempts,attachAttempts:t.attachAttempts,lastAttachCode:t.lastAttachCode,connectingSince:t.connectingSince,lastPingTime:t.lastPingTime})}function Y(e){return!e.includes(`\0`)}function Vn(e){if(typeof window>`u`||window.localStorage===void 0)return()=>void 0;let t=window.localStorage,n=typeof Storage<`u`&&t instanceof Storage,r=n?Storage.prototype.setItem:t.setItem.bind(t),i=n?Storage.prototype.removeItem:t.removeItem.bind(t),a=n?Storage.prototype.clear:t.clear.bind(t);if(n){let n=Storage.prototype;n.setItem=function(n,i){if(r.call(this,n,i),this===t){if(!Y(n)){console.warn(`[page-storage-sync] dropping localStorage write with NUL in key`,n);return}e.send({type:`local-storage-set`,key:n,value:i})}},n.removeItem=function(n){if(i.call(this,n),this===t){if(!Y(n)){console.warn(`[page-storage-sync] dropping localStorage remove with NUL in key`,n);return}e.send({type:`local-storage-remove`,key:n})}},n.clear=function(){a.call(this),this===t&&e.send({type:`local-storage-clear`})}}else{let n=(e,n)=>{Object.defineProperty(t,e,{value:n,writable:!0,configurable:!0,enumerable:!1})};n(`setItem`,(t,n)=>{if(r(t,n),!Y(t)){console.warn(`[page-storage-sync] dropping localStorage write with NUL in key`,t);return}e.send({type:`local-storage-set`,key:t,value:n})}),n(`removeItem`,t=>{if(i(t),!Y(t)){console.warn(`[page-storage-sync] dropping localStorage remove with NUL in key`,t);return}e.send({type:`local-storage-remove`,key:t})}),n(`clear`,()=>{a(),e.send({type:`local-storage-clear`})})}let o=n=>{if(n.storageArea===t){if(n.key===null){e.send({type:`local-storage-clear`});return}if(Y(n.key)){if(n.newValue===null){e.send({type:`local-storage-remove`,key:n.key});return}e.send({type:`local-storage-set`,key:n.key,value:n.newValue})}}};return window.addEventListener(`storage`,o),()=>{if(n)Storage.prototype.setItem=r,Storage.prototype.removeItem=i,Storage.prototype.clear=a;else{let e=(e,n)=>{Object.defineProperty(t,e,{value:n,writable:!0,configurable:!0,enumerable:!1})};e(`setItem`,r),e(`removeItem`,i),e(`clear`,a)}window.removeEventListener(`storage`,o)}}function Hn(e){let t=!1,n=()=>{t||(t=!0,typeof e.start==`function`&&e.start())};return{onMessage:t=>{let r=e=>{t(e.data)};return e.addEventListener(`message`,r),n(),()=>{e.removeEventListener(`message`,r)}},send:(t,n)=>{n&&n.length>0?e.postMessage(t,n):e.postMessage(t)}}}function Un(e){let t=Hn(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`panel`,payload:e},n)}}}function Wn(e,t){let n=Hn(e),r=new Map,i=n.onMessage(async e=>{let i=e;if(i?.type){if(i.type===`cdp-cmd`){let r=e;try{let e=await t.send(r.method,r.params,r.sessionId);n.send({type:`cdp-response`,id:r.id,result:e})}catch(e){n.send({type:`cdp-response`,id:r.id,error:e instanceof Error?e.message:String(e)})}return}if(i.type===`cdp-subscribe`){let i=e;if(r.has(i.event))return;let a=e=>{n.send({type:`cdp-event`,method:i.event,params:e})};r.set(i.event,a),t.on(i.event,a);return}if(i.type===`cdp-unsubscribe`){let n=e,i=r.get(n.event);if(!i)return;r.delete(n.event),t.off(n.event,i);return}}});return()=>{i();for(let[e,n]of r)t.off(e,n);r.clear()}}function Gn(){let e={};if(typeof localStorage>`u`)return e;for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);if(n===null)continue;let r=localStorage.getItem(n);r!==null&&(e[n]=r)}return e}function Kn(e){let{worker:t,realCdpTransport:n,callbacks:r}=e,i=e.readyTimeoutMs??3e4,a=e.localStorageSeed??{},o=new MessageChannel,s=new MessageChannel,c=new zn(r,Un(o.port1)),l=Wn(s.port1,n),u=null,d=new Promise((e,t)=>{let n=null,r=null,a=()=>{n!==null&&(clearTimeout(n),n=null)};u=()=>{r!==null&&(o.port1.removeEventListener(`message`,r),r=null),a()},r=t=>{t.data?.type===`kernel-worker-ready`&&(u?.(),e())},o.port1.addEventListener(`message`,r),a(),n=setTimeout(()=>{u?.(),t(Error(`Kernel worker did not signal ready within ${i}ms`))},i)}),f={type:`kernel-worker-init`,kernelPort:o.port2,cdpPort:s.port2,localStorageSeed:a,instanceId:e.instanceId};t.postMessage(f,[o.port2,s.port2]);let p=!1;return{client:c,ready:d,dispose(){if(!p){p=!0,u?.(),l();try{t.postMessage({type:`kernel-worker-shutdown`})}catch{}t.terminate(),o.port1.close(),s.port1.close()}}}}function qn(e){return Kn({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-BB-nUVFS.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,callbacks:e.callbacks,readyTimeoutMs:e.readyTimeoutMs,localStorageSeed:e.localStorageSeed??Gn(),instanceId:e.instanceId})}function Jn(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}async function Yn(e){let{runtimeMode:n,envBaseUrl:r,window:i,log:a}=e,o=n===`electron-overlay`;a.info(`starting standalone with kernel worker`);let{BrowserAPI:s}=await t(async()=>{let{BrowserAPI:e}=await import(`./cdp-Cbi5Katl.js`);return{BrowserAPI:e}},__vite__mapDeps([25,5,26,1]));await Ne({log:a});let f=await c(),p=d(o?`electron-overlay`:`standalone`,f!==null)?u:null;await l({locationHref:i.location.href,storage:i.localStorage,envBaseUrl:r,defaultWorkerBaseUrl:p,runtimeConfigFetcher:async()=>f});let m,h,g;if(n===`cherry`){let{setupCherryFollower:e}=await t(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-Bap_NTtV.js`);return{setupCherryFollower:e}},__vite__mapDeps([27,25,5,26,1])),n=await e();m=n.browser,h=n.joinUrl,g=n.transport}else{m=new s;try{await m.connect()}catch(e){a.warn(`Initial CDP connect failed; worker-forwarded commands will retry on demand`,e instanceof Error?e.message:String(e))}}let _=m.getTransport();return globalThis.__slicc_browser=m,{browser:m,realCdpTransport:_,cherryJoinUrl:h,cherryTransport:g,instanceId:Jn(),isElectronOverlay:o}}var Xn=`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>`;function Zn(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.role===`assistant`&&!n.isStreaming&&!n.queued)return n.content}for(let t=e.length-1;t>=0;t--)if(e[t].role===`assistant`)return e[t].content;return null}function Qn(e){let t=e.writeText??(e=>navigator.clipboard.writeText(e)),n=document.createElement(`div`);n.className=`wc-copy-row`,n.style.cssText=`display:flex;justify-content:flex-start;margin:-8px 0 14px;`;let r=document.createElement(`slicc-press-button`);r.setAttribute(`tooltip`,`Copy last response · hold to copy chat`),r.setAttribute(`label`,`Copy last response — hold to copy entire chat`),r.setAttribute(`disable-double-click`,``),r.style.cssText=`color:var(--txt-3);cursor:pointer;display:inline-flex;`;let i=document.createRange();r.append(i.createContextualFragment(Xn));let a=()=>{r.style.color=`var(--green)`,setTimeout(()=>{r.style.color=`var(--txt-3)`},1500)};return r.addEventListener(`short-click`,()=>{(async()=>{await t(Zn(e.getMessages())??j([...e.getMessages()])),a()})()}),r.addEventListener(`long-press`,()=>{(async()=>{let n=j([...e.getMessages()]);n&&(await t(n),a())})()}),n.append(r),n}function X(){return`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}var $n=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l=[];#u=new Map;#d=null;#f=null;#p=``;#m=!1;#h=!1;#g=null;constructor(e){this.#e=e.thread,this.#t=e.agent,this.#n=e.onProcessingChange,this.#r=e.onMessageRendered,this.#i=e.onMessageDisposed,this.#a=e.onTurnComplete,this.#o=e.agent.onEvent(e=>this.#y(e)),this.#c=e=>this.#O(e),this.#e.addEventListener(`slicc-error-retry`,this.#c)}dispose(){this.#o(),this.#e.removeEventListener(`slicc-error-retry`,this.#c)}get processing(){return this.#h}getMessages(){return this.#l.map(e=>({...e}))}setAgent(e){this.#o(),this.#t=e,this.#o=e.onEvent(e=>this.#y(e))}setOnLocalUserMessage(e){this.#s=e}addUserMessage(e,t){this.#j({id:X(),role:`user`,content:e,timestamp:Date.now()})}addAssistantMessage(e){this.#j({id:X(),role:`assistant`,content:e,timestamp:Date.now()})}loadMessages(e){for(let e of this.#u.keys())this.#i?.(e);this.#l=ke(e);let t=[...this.#l].reverse().find(e=>e.isStreaming);this.#d=t?.id??null,t&&(this.#f=t.id),this.#p=``,this.#m=!1,this.#u.clear();let n=[],r=``;for(let e of this.#l){let t=new Date(e.timestamp).toDateString();t!==r&&(n.push(je(e.timestamp)),r=t);let i=this.#A(e);this.#u.set(e.id,i),n.push(...i)}let i=this.#e;typeof i.replaceContent==`function`?i.replaceContent(...n):i.replaceChildren(...n);for(let e of this.#l)e.isStreaming||this.#r?.(e,this.#u.get(e.id)??[]);this.#v(),this.#N()}sendUserMessage(e,t){let n=e.trim();if(!n&&!t?.length)return;let r={id:X(),role:`user`,content:n,timestamp:Date.now(),attachments:t?.length?t:void 0,queued:this.#h?!0:void 0};this.#j(r),this.#t.sendMessage(n,r.id,r.attachments);try{this.#s?.(n,r.id,r.attachments)}catch(e){console.error(`onLocalUserMessage hook threw`,e)}}addLickMessage(e,t,n,r,i){let a=this.#l[this.#l.length-1];if(!(i||a?.lickId)&&a&&a.source===`lick`&&a.channel===n){a.lickParts=[...a.lickParts??[a.content],t],a.lickCount=a.lickParts.length,a.content+=`\n\n${t}`,this.#M(a);return}this.#j({id:e,role:`user`,content:t,timestamp:r,source:`lick`,channel:n,lickId:i,lickState:i?`pending`:void 0})}updateLickState(e,t){let n=this.#l.find(t=>t.lickId===e);n&&(n.lickState=t,this.#M(n))}setProcessing(e){this.#h!==e&&(this.#h=e,e&&(this.#f=null),e||this.#v(),this.#n?.(e),e||this.#_())}#_(){let e=this.#f;if(this.#f=null,!this.#a)return;let t=e?this.#k(e):null;this.#a(t?{...t}:null)}#v(){let e=this.#l[this.#l.length-1];if(!(e?.role===`assistant`&&!e.isStreaming)){this.#g?.remove();return}this.#g??=Qn({getMessages:()=>this.getMessages()}),(this.#e.inner??this.#e).append(this.#g)}#y(e){switch(e.type){case`message_start`:this.#b(e.messageId);break;case`content_delta`:this.#x(e.messageId,e.text);break;case`content_done`:this.#C(e.messageId);break;case`tool_use_start`:this.#w(e.messageId,e.toolName,e.toolInput);break;case`tool_result`:this.#T(e.messageId,e.toolName,e.result,e.isError);break;case`turn_end`:this.#E(e.messageId);break;case`error`:this.#D(e.error);break;default:break}}#b(e){this.setProcessing(!0),this.#d=e,this.#f=e,this.#j({id:e,role:`assistant`,content:``,timestamp:Date.now(),isStreaming:!0,toolCalls:[]})}#x(e,t){this.#k(e)&&(this.#p+=t,!this.#m&&(this.#m=!0,requestAnimationFrame(()=>this.#S(e))))}#S(e){if(this.#m=!1,!this.#p)return;let t=this.#k(e);t&&(t.content+=this.#p,this.#p=``,this.#M(t))}#C(e){let t=this.#k(e);t&&(this.#p&&this.#d===e&&(t.content+=this.#p),this.#p=``,this.#m=!1,t.isStreaming=!1,this.#M(t))}#w(e,t,n){let r=this.#k(e);r&&(r.toolCalls=r.toolCalls??[],r.toolCalls.push({id:X(),name:t,input:n}),this.#M(r))}#T(e,t,n,r){let i=this.#k(e),a=[...i?.toolCalls??[]].reverse().find(e=>e.name===t&&e.result===void 0);!i||!a||(a.result=n,a.isError=r,this.#M(i))}#E(e){let t=this.#k(e);t?.isStreaming&&(t.isStreaming=!1,this.#M(t)),this.#d=null,this.setProcessing(!1)}#D(e){this.setProcessing(!1),this.#j({id:X(),role:`assistant`,content:e,timestamp:Date.now(),error:!0})}#O(e){if(this.#h)return;let t=e.detail?.messageId??null,n=this.#l.length;if(t){let e=this.#l.findIndex(e=>e.id===t);e>=0&&(n=e)}let r;for(let e=n-1;e>=0;e--){let t=this.#l[e];if(t.role===`user`&&t.source!==`lick`&&t.source!==`delegation`){r=t;break}}r&&this.#t.sendMessage(r.content,X(),r.attachments)}#k(e){return this.#l.find(t=>t.id===e)}#A(e){try{return Te(e)}catch(t){console.error(`[wc-chat] message render failed — degrading to plain bubble`,t);let n=document.createElement(e.role===`assistant`?`slicc-agent-message`:`slicc-user-message`);return n.setAttribute(`text`,String(e.content??``)),[n]}}#j(e){this.#l.push(e);let t=this.#A(e);this.#u.set(e.id,t),this.#e.append(...t),e.isStreaming||this.#r?.(e,t),e.role===`user`?this.#N():this.#P()}#M(e){this.#i?.(e.id);let t=this.#u.get(e.id)??[],n=this.#A(e),r=t[0]??null,i=r?.parentNode;if(i){for(let e of n)i.insertBefore(e,r);for(let e of t)e.remove()}else this.#e.append(...n);this.#u.set(e.id,n),e.isStreaming||this.#r?.(e,n),this.#P()}#N(){this.#e.scrollTop=this.#e.scrollHeight}#P(){let e=this.#e;typeof e.requestFollow==`function`?e.requestFollow():this.#N()}};function er(e){return`${new Date(e.frozenAt).toLocaleDateString(void 0,{month:`short`,day:`numeric`})} · ${e.messageCount} turns`}function tr(e){let t=document.createElement(`slicc-freezer-card`);return t.setAttribute(`title`,e.title),t.setAttribute(`meta`,er(e)),t.setAttribute(`slug`,e.filename),e.icon&&t.setAttribute(`icon`,e.icon),t}async function nr(e){let t=new Map;for(let n of e.entries){if(n.icon||n.pendingEnrichment)continue;let r=await e.pickIcon(`"${n.title}" — an archived chat session`);r&&t.set(n.filename,r)}if(t.size===0)return;let n=await Z(e.reader);if(n===null||n.length===0)return;let r=n.map(e=>{let n=!e.icon&&t.has(e.filename)?t.get(e.filename):void 0;return n?{...e,icon:n}:e});await e.writer.writeFile(P,JSON.stringify(r,null,2));for(let n of e.freezer.querySelectorAll(`slicc-freezer-card`)){let e=t.get(n.getAttribute(`slug`)??``);e&&!n.hasAttribute(`icon`)&&n.setAttribute(`icon`,e)}}async function Z(e){let t=await rr(e);return t.kind===`ok`?t.entries:t.kind===`missing`?[]:null}async function rr(e){let t;try{let n=await e.readFile(P,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){return e?.code===`ENOENT`?{kind:`missing`}:{kind:`fault`}}try{let e=JSON.parse(t);return Array.isArray(e)?{kind:`ok`,entries:e}:{kind:`corrupt`}}catch{return{kind:`corrupt`}}}async function ir(e){let t;try{t=(await e.readDir(`/sessions`)).filter(e=>e.type===`file`&&e.name.endsWith(`.md`)).map(e=>e.name)}catch{return[]}let n=[];for(let r of t)try{let t=await e.readFile(`/sessions/${r}`,{encoding:`utf-8`}),i=(typeof t==`string`?t:new TextDecoder().decode(t)).slice(0,2e3),a=/^title:\s*"?(.*?)"?\s*$/m.exec(i)?.[1]??r,o=/^frozenAt:\s*"?(.*?)"?\s*$/m.exec(i)?.[1]??new Date(0).toISOString(),s=Number(/^messageCount:\s*(\d+)\s*$/m.exec(i)?.[1]??0);n.push({filename:r,title:a,frozenAt:o,messageCount:s,...r.startsWith(`pending-`)?{pendingEnrichment:!0}:{}})}catch{}return n.sort((e,t)=>t.frozenAt.localeCompare(e.frozenAt)),n}function ar(e,t){for(let t of Array.from(e.querySelectorAll(`slicc-freezer-card`)))t.remove();e.append(...t.map(tr))}async function or(e,t){let n=await e.readFile(L(t),{encoding:`utf-8`}),r=R(typeof n==`string`?n:new TextDecoder().decode(n));return{title:r.title||t.title,messages:r.messages}}var sr=`/workspace/CLAUDE.md`,Q=64;function cr(e){if(e.length<=Q)return{title:e,summary:``};let t=e.lastIndexOf(` `,Q),n=t>Q/2?t:Q;return{title:`${e.slice(0,n)}…`,summary:e.slice(n).trim()}}function lr(e){let t=[],n=null,r=()=>{if(!n)return;let e=n.join(` `).trim();e&&t.push(cr(e)),n=null};for(let t of e.split(`
250
+ `)){let e=/^\s*[-*]\s+(.*)$/.exec(t);e?(r(),n=[e[1]]):n&&t.trim()&&!t.startsWith(`#`)?n.push(t.trim()):(t.startsWith(`#`)||!t.trim())&&r()}return r(),t.length===0&&e.trim()&&t.push(cr(e.trim())),t}async function ur(e){let t=``;try{let n=await e.readFile(sr,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{t=``}return lr(t).map(e=>{let t=document.createElement(`slicc-memrow`);return t.setAttribute(`title`,e.title),e.summary&&t.setAttribute(`summary`,e.summary),t.setAttribute(`tag`,`project`),t})}var dr=[`/workspace`,`/shared`],fr=3,pr=200;async function mr(e,t,n){let r;try{r=await e.readDir(t)}catch{return[]}let i=r.filter(e=>e.type===`directory`).sort((e,t)=>e.name.localeCompare(t.name)),a=r.filter(e=>e.type===`file`).sort((e,t)=>e.name.localeCompare(t.name)),o=[];for(let r of[...i,...a].slice(0,pr)){let i=`${t}/${r.name}`;r.type===`directory`?o.push({kind:`dir`,id:i,label:r.name,children:n<fr?await mr(e,i,n+1):[]}):o.push({kind:`file`,id:i,label:r.name,path:i})}return o}async function hr(e){let t=[];for(let n of dr)t.push({kind:`group`,label:`${n.slice(1)}/`}),t.push(...await mr(e,n,1));return t}function gr(e){let t=!1;return n=>{if(n===`files`){e.openFs().then(async t=>{e.fileTree.items=await hr(t)}).catch(t=>e.log.error(`WC file tree refresh failed`,t));return}if(n===`memory`){e.openFs().then(async t=>{e.memoryHost.replaceChildren(...await ur(t))}).catch(t=>e.log.error(`WC memory refresh failed`,t));return}n===`term`&&!t&&(t=!0,e.mountTerminal(e.termSurface).catch(n=>{t=!1,e.log.error(`WC terminal mount failed`,n)}))}}var _r={off:`off`,low:`low`,medium:`medium`,high:`high`,xhigh:`xhigh`,max:`xhigh`},vr={off:`off`,minimal:`low`,low:`low`,medium:`medium`,high:`high`,xhigh:`xhigh`};function yr(e){return e?_r[e]:void 0}function br(e){return(e&&vr[e])??`off`}function $(e){return e===`error`?`dead`:e===`initializing`?`none`:`open`}function xr(e,t,n){return[...e].sort((e,t)=>Number(t.isCone)-Number(e.isCone)).map(e=>{let r=n?.get(e.jid);return{key:e.jid,type:e.isCone?`cone`:`scoop`,color:y(e),label:e.isCone?`sliccy`:e.name,eyes:$(t?.get(e.jid)),fill:typeof r==`number`?Math.round(r*100):void 0}})}function Sr(e){let t=()=>{let t=e.getClient();t&&(e.refs.switcher.scoops=xr(t.getScoops(),e.statuses,e.fills))},n=()=>(e.refs.thread.getAttribute(`context`)??``).startsWith(`freezer:`),r=()=>{if(e.getSelected()||n())return;let t=e.getClient()?.getScoops()??[],r=e.pendingUrlContext;if(r?.startsWith(`freezer:`))return;if(r?.startsWith(`scoop:`)){let n=r.slice(6),i=t.find(e=>!e.isCone&&e.name===n);if(i){e.pendingUrlContext=null,e.selectScoop(i);return}}let i=t.find(e=>e.isCone);i&&(e.pendingUrlContext=null,e.selectScoop(i))};return{onStatusChange:(n,r)=>{let i=e.statuses.get(n);e.statuses.set(n,r),$(i)!==$(r)&&t(),e.getSelected()?.jid===n&&e.getController()?.setProcessing(r===`processing`)},onScoopCreated:r=>{t(),!e.getSelected()&&!n()&&!e.pendingUrlContext&&e.selectScoop(r)},onScoopListUpdate:()=>{t(),r()},onScoopActivity:t=>{e.refs.switcher.setAttribute(`attention`,t)},onIncomingMessage:(t,n)=>{e.refs.switcher.setAttribute(`attention`,t),e.lastActivity.set(t,String(n.content??``).slice(0,600)),e.getSelected()?.jid===t&&n.channel!==`web`&&Ee(n.channel)&&e.getController()?.addLickMessage(n.id,n.content,n.channel,new Date(n.timestamp).getTime(),n.lickId)},onMessageUpdate:(t,n)=>{e.getSelected()?.jid===t&&n.lickId&&n.lickState&&e.getController()?.updateLickState(n.lickId,n.lickState)},onScoopMessagesReplaced:(t,n)=>{e.getSelected()?.jid===t&&e.getController()?.loadMessages(n)},onReady:()=>{t(),r(),e.notifyReady?.()}}}async function Cr(e,n){e.thread.setAttribute(`context`,n.isCone?`cone`:`scoop:${n.name}`),e.thread.setAttribute(`accent`,y(n)),Oe(e,n.isCone?{kind:`cone`}:{kind:`scoop`,accent:y(n)}),e.switcher.setAttribute(`active`,n.jid),e.composerMeta.setAttribute(`thinking`,br(n.config?.thinkingLevel));try{let{resolveCurrentModel:r,resolveModelById:i}=await t(async()=>{let{resolveCurrentModel:e,resolveModelById:t}=await import(`./main-T5PiQ8ba.js`).then(e=>e.r);return{resolveCurrentModel:e,resolveModelById:t}},__vite__mapDeps([17,3,18,5,4,6,7,8,9,10,1,11,12,13,14,15,19])),a=n.config?.modelId,o=a?i(a):r();e.composerMeta.setAttribute(`model`,o.name??o.id),e.composerMeta.toggleAttribute(`no-thinking`,o.reasoning!==!0)}catch{}}function wr(e){let{refs:n,openVfs:r,client:i,getController:a,getSelected:o,selectScoop:s,clearSelection:c,log:l}=e,u=[],d=0,f=!1,p=()=>{let e=++d;r().then(async({reader:r,writer:i})=>{let a=await Z(r);if(a===null){if((await rr(r)).kind!==`corrupt`||(l.warn(`WC freezer index corrupt — rebuilding from archives`),a=await ir(r),a.length===0))return;await i.writeFile(P,JSON.stringify(a,null,2))}e===d&&(u=a,ar(n.freezer,a),!f&&a.some(e=>!e.icon&&!e.pendingEnrichment)&&(f=!0,t(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-BjJNOIAW.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([2,3,4,5,6,7,8,9,10,1,11,12,13,14,15,16,17,18,19,20])).then(({pickLucideIcon:e})=>nr({reader:r,writer:i,freezer:n.freezer,entries:a,pickIcon:t=>e({subject:t})})).catch(e=>l.warn(`WC freezer icon enrichment failed`,e)).finally(()=>{f=!1})))}).catch(e=>l.error(`WC freezer refresh failed`,e))},m=!1,h=()=>n.freezer.querySelector(`slicc-freezer-new`),g=e=>{m||(m=!0,h()?.setAttribute(`busy`,``),(async()=>{try{if(e!==`erase`){let{writer:n}=await r(),{runNewSessionFreeze:i,runNewSessionFreezeQuick:a}=await t(async()=>{let{runNewSessionFreeze:e,runNewSessionFreezeQuick:t}=await import(`./new-session-DeQXQEns.js`);return{runNewSessionFreeze:e,runNewSessionFreezeQuick:t}},__vite__mapDeps([28,5,4,3,6,7,8,9,10,1,11,12,13,14,15,17,18,19,20,29]));e===`save`?await i({vfs:n,onProgress:e=>{let t=h();t&&(e===null?t.removeAttribute(`progress`):t.setAttribute(`progress`,String(e)))},onBackgroundEnriched:()=>p()}):await a({vfs:n})}await i.clearAllMessages(),a()?.loadMessages([]),p();let n=i.getScoops().find(e=>e.isCone);n&&s(n)}catch(e){l.error(`WC new session failed`,e)}finally{m=!1;let e=h();e?.removeAttribute(`busy`),e?.removeAttribute(`progress`)}})())};for(let e of[`save`,`skip`,`erase`])n.freezer.addEventListener(`new-chat-${e}`,()=>g(e));let _=async e=>{try{let{reader:t}=await r(),i=u.find(t=>t.filename===e);i||=(await Z(t)??[]).find(t=>t.filename===e);let{messages:o}=await or(t,i??{filename:e,title:e,frozenAt:``,messageCount:0});a()?.loadMessages(o),n.thread.setAttribute(`context`,`freezer:${i?.filename??e}`),n.thread.setAttribute(`accent`,Me),Oe(n,{kind:`freezer`}),n.inputCard.setAttribute(`disabled`,``),n.switcher.removeAttribute(`active`),c()}catch(e){if(l.error(`WC thaw failed`,e),!o()){let e=i.getScoops().find(e=>e.isCone);e&&s(e)}}};return n.freezer.addEventListener(`freezer-card-select`,e=>{let t=e.detail?.slug;t&&_(t)}),{refreshFreezer:p,openFrozen:_}}function Tr(e,t){let n=null,r=Ae(e,{messages:[],scoops:[],floatLabel:t,placeholder:`Ask sliccy, or describe a change…`,onSurfaceActivate:e=>n?.(e),urlState:!0}),i=null,a=null,o=null,s=!1,c=new Set,l=e=>{o=e,a&&(a.setSelectedScoopJid(e.jid),r.inputCard.removeAttribute(`disabled`),Cr(r,e),a.requestScoopMessages(e.jid),i?.setProcessing(a.isProcessing(e.jid)),r.switcher.hasAttribute(`attention`)||r.switcher.setAttribute(`attention`,e.jid))};return{refs:r,wiring:{refs:r,statuses:new Map,fills:new Map,lastActivity:new Map,pendingUrlContext:r.thread.urlContext??null,getController:()=>i,getClient:()=>a,getSelected:()=>o,selectScoop:l,notifyReady:()=>{s=!0;for(let e of c)e()}},setClient:e=>{a=e},selectScoop:l,getSelected:()=>o,clearSelection:()=>{o=null},getController:()=>i,setController:e=>{i=e},setActivateSurface:e=>{n=e;let t=r.workbenchBody.getAttribute(`active`);t&&r.shell.hasAttribute(`open`)&&e(t)},onClientReady:e=>{c.add(e),s&&e()}}}function Er(e){let n=null;return()=>(n??=(async()=>{let[{createRemoteVfsClient:n},{createRemoteWritableVfsClient:r}]=await Promise.all([t(()=>import(`./remote-vfs-client-BwJhhtIV.js`),__vite__mapDeps([30,31])),t(()=>import(`./writable-vfs-client-DMYsajEE.js`),__vite__mapDeps([32,31]))]);return{reader:n({transport:e.getTransport()}),writer:r({transport:e.getTransport()})}})(),n)}function Dr(e,n,r,i,a){e.onClientReady(()=>{i.intercept||t(async()=>{let{wireWcOnboarding:e}=await import(`./wc-onboarding-Bxwd7QwF.js`);return{wireWcOnboarding:e}},__vite__mapDeps([33,5,17,3,18,4,6,7,8,9,10,1,11,12,13,14,15,19,34])).then(({wireWcOnboarding:t})=>t({client:n,getController:()=>e.getController(),openVfs:r,log:a})).then(e=>{i.intercept=e.interceptWelcomeLick}).catch(e=>a.error(`WC onboarding wiring failed`,e))})}function Or(e,n,r,i){let a=new Map;t(async()=>{let{loadDipStyles:e}=await import(`./legacy-styles-4PP74ISo.js`);return{loadDipStyles:e}},__vite__mapDeps([35,5])).then(({loadDipStyles:e})=>e()).catch(()=>void 0),t(async()=>{let{watchSprinkleThemeBroadcast:e}=await import(`./theme-BBwuyzvz.js`).then(e=>e.r);return{watchSprinkleThemeBroadcast:e}},__vite__mapDeps([36,3])).then(({watchSprinkleThemeBroadcast:e})=>e()).catch(()=>void 0);let o=n.createAgentHandle();return{controller:new $n({thread:e.thread,agent:o,onTurnComplete:e=>{t(async()=>{let{consumeVoiceSubmission:e,speakReplyMarkdown:t}=await import(`./voice-reply-BdYE1gSs.js`);return{consumeVoiceSubmission:e,speakReplyMarkdown:t}},__vite__mapDeps([37,1,38,39,3,5,40,41])).then(({consumeVoiceSubmission:t,speakReplyMarkdown:n})=>{if(t()&&e?.content)return n(e.content)}).catch(()=>void 0)},onProcessingChange:t=>{e.frame.toggleAttribute(`data-processing`,t),e.inputCard.querySelector(`slicc-send-button`)?.toggleAttribute(`busy`,t),t||r?.()},onMessageDisposed:e=>{let t=a.get(e);t&&(ut(t),a.delete(e))},onMessageRendered:(e,t)=>{let r=t[0];r&&a.set(e.id,lt(r,(e,t)=>{let r={type:`sprinkle`,sprinkleName:`inline`,timestamp:new Date().toISOString(),body:{action:e,data:t}};i?.intercept?.(r)||n.sendSprinkleLick(`inline`,{action:e,data:t})}))}}),agentHandle:o}}function kr(e){let{boot:n,client:r,agentHandle:i,openReader:a,log:o}=e,{refs:s}=n;t(async()=>{let{createPlaceholderRefresher:e}=await import(`./wc-placeholder-UhGWKHwM.js`);return{createPlaceholderRefresher:e}},__vite__mapDeps([42,5])).then(({createPlaceholderRefresher:t})=>{e.setRefreshPlaceholder(t({inputCard:s.inputCard,getMessages:()=>n.getController()?.getMessages()??[],defaultPlaceholder:s.inputCard.getAttribute(`placeholder`)??`Ask sliccy, or describe a change…`}))}),(async()=>{try{let r=n.wiring.pendingUrlContext;if(r!=null&&r!==`cone`)return;let{SessionStore:i}=await t(async()=>{let{SessionStore:e}=await import(`./session-store-D32FcG0Q.js`);return{SessionStore:e}},[]),a=new i;await a.init();let o=await a.load(`session-cone`);o&&o.messages.length>0&&!n.getSelected()&&(n.getController()?.loadMessages(o.messages),e.triggerPlaceholder())}catch(e){o.warn(`WC session hydration failed`,e)}})();let c=null;t(async()=>{let{wireWcAttach:e}=await import(`./wc-attach-CbSEwK2u.js`);return{wireWcAttach:e}},__vite__mapDeps([43,5])).then(({wireWcAttach:n})=>{c=n({inputCard:s.inputCard,freezer:s.freezer,openReader:a,openWriter:e.openWriter,listConversations:async()=>{let{readSessionsIndex:e}=await t(async()=>{let{readSessionsIndex:e}=await import(`./session-freezer-ClQ_l6J4.js`);return{readSessionsIndex:e}},[]);return(await e(await a())).map(e=>({id:e.filename,label:e.title,sub:`${e.messageCount} turns`}))},log:o})}).catch(e=>o.error(`WC add-menu wiring failed`,e)),s.inputCard.addEventListener(`submit`,e=>{let r=De(e);if(!r)return;e.detail?.source===`dictation`&&t(async()=>{let{markVoiceSubmission:e}=await import(`./voice-reply-BdYE1gSs.js`);return{markVoiceSubmission:e}},__vite__mapDeps([37,1,38,39,3,5,40,41])).then(({markVoiceSubmission:e})=>e()).catch(()=>void 0),n.getController()?.sendUserMessage(r,c?.take()),s.inputCard.clear?.();let i=n.getSelected()?.jid;i&&(s.switcher.setAttribute(`attention`,i),n.wiring.lastActivity.set(i,r.slice(0,600)))}),s.inputCard.addEventListener(`stop`,()=>{n.getController()?.processing&&i.stop()}),t(async()=>{let{wireWcHistoryNav:e}=await import(`./wc-history-nav-C5w8ianG.js`);return{wireWcHistoryNav:e}},[]).then(({wireWcHistoryNav:e})=>e({thread:s.thread,inputCard:s.inputCard})).catch(e=>o.error(`WC history nav wiring failed`,e)),s.composerMeta.addEventListener(`thinking-change`,e=>{let t=e.detail?.thinking,i=yr(t),a=n.getSelected();a&&i&&r.setScoopThinkingLevel(a.jid,i)})}function Ar(e,t){let n=()=>{t.getSessionStats?.().then(n=>{if(n){e.refs.floatbar.setAttribute(`spent`,n.totalCost.toFixed(2)),e.fills.clear();for(let t of n.fills)e.fills.set(t.jid,t.fill);e.refs.switcher.scoops=xr(t.getScoops(),e.statuses,e.fills)}})};return setInterval(n,15e3),n}function jr(e,n,r){let i=n.standalone;i&&t(async()=>{let{wireWcBrowser:e}=await import(`./wc-browser-DunWpcR7.js`);return{wireWcBrowser:e}},[]).then(({wireWcBrowser:t})=>t({refs:e.refs,browser:i.browser,log:r})).catch(e=>r.error(`WC browser overlay wiring failed`,e))}function Mr(e,t){let{refs:n}=e;n.switcher.addEventListener(`slicc-scoop-select`,n=>{let r=n.detail?.key,i=t.getScoops().find(e=>e.jid===r);i&&i.jid!==e.getSelected()?.jid&&e.selectScoop(i)}),Pr({switcher:n.switcher,getScoops:()=>t.getScoops(),lastActivity:e.wiring.lastActivity})}function Nr(e){return()=>{e.triggerPlaceholder(),e.refreshStats();let t=e.boot.getSelected()?.jid;if(!t)return;e.boot.refs.switcher.setAttribute(`attention`,t);let n=e.boot.getController()?.getMessages().filter(e=>e.role===`assistant`).at(-1);n&&e.boot.wiring.lastActivity.set(t,String(n.content??``).slice(0,600))}}function Pr(e){let n=new Map,r=new Set;e.switcher.addEventListener(`pointerover`,i=>{let a=i.target?.closest?.(`slicc-pill.scoop`);if(!a||!e.switcher.contains(a))return;let o=a.dataset.k??``,s=e.getScoops().find(e=>e.jid===o);if(!s)return;let c=e.lastActivity.get(o)??``,l=n.get(o);if(l&&l.activity===c){a.title=l.tip;return}a.title||=s.isCone?`sliccy`:s.name,!(!c||r.has(o))&&(r.add(o),(async()=>{try{let r=await(e.labelFn??(await t(async()=>{let{quickLabel:e}=await import(`./quick-llm-BjJNOIAW.js`).then(e=>e.n);return{quickLabel:e}},__vite__mapDeps([2,3,4,5,6,7,8,9,10,1,11,12,13,14,15,16,17,18,19,20]))).quickLabel)({system:`One line for a hover tooltip: at most 14 words, present tense, no quotes, no trailing period.`,prompt:`Summarize what this agent has been doing.\nAgent: ${s.isCone?`sliccy (the main agent)`:s.name}\nMost recent activity:\n${c}`,maxTokens:40});r&&(n.set(o,{activity:c,tip:r}),a.title=r)}finally{r.delete(o)}})())})}function Fr(e,t,n){let r=r=>{if(r.startsWith(`freezer:`)){n(r.slice(8));return}let i=t.getScoops(),a=r.startsWith(`scoop:`)?i.find(e=>!e.isCone&&e.name===r.slice(6)):i.find(e=>e.isCone);a&&a.jid!==e.getSelected()?.jid&&e.selectScoop(a)};e.refs.thread.addEventListener(`slicc-url-context`,e=>{let t=e.detail?.context;t&&r(t)});let i=e.wiring.pendingUrlContext;i?.startsWith(`freezer:`)&&e.onClientReady(()=>{e.wiring.pendingUrlContext===i&&(e.wiring.pendingUrlContext=null,r(i))})}function Ir(e,n,r,i={}){let{refs:a}=e;e.setClient(n);let o=null,s=Ar(e.wiring,n),c=()=>{o?.()},l={intercept:null},{controller:u,agentHandle:d}=Or(a,n,Nr({boot:e,triggerPlaceholder:c,refreshStats:s}),l);e.setController(u),e.onClientReady(s);let f=Er(n),p=async()=>(await f()).reader;Dr(e,n,f,l,r),kr({boot:e,client:n,agentHandle:d,setRefreshPlaceholder:e=>{o=e},triggerPlaceholder:c,openReader:p,openWriter:async()=>(await f()).writer,log:r}),Mr(e,n),jr(e,i,r),e.setActivateSurface(gr({fileTree:a.fileTree,termSurface:a.termSurface,memoryHost:a.memoryHost,openFs:p,mountTerminal:async e=>{let{RemoteTerminalView:r}=await t(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-FVcjc7kw.js`);return{RemoteTerminalView:e}},__vite__mapDeps([44,5,45,3,21,1,24,23,46,22,47,15])),{fetchSecretEnvVars:i}=await t(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-DcfTe28K.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([48,1])),a=await i(),o=new r({client:n,cwd:`/`,env:Object.keys(a).length>0?a:void 0});await o.mount(e),window.addEventListener(`beforeunload`,()=>o.dispose(),{once:!0})},log:r}));let{refreshFreezer:m,openFrozen:h}=wr({refs:a,openVfs:f,client:n,getController:()=>e.getController(),getSelected:()=>e.getSelected(),selectScoop:e.selectScoop,clearSelection:e.clearSelection,log:r});m(),e.onClientReady(m),Fr(e,n,h),f().then(async({reader:e})=>{let{installPreviewVfsResponder:n}=await t(async()=>{let{installPreviewVfsResponder:e}=await import(`./preview-vfs-responder-dyQBWIl5.js`);return{installPreviewVfsResponder:e}},[]);n({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>e,logger:r})}).catch(e=>r.warn(`WC page-VFS support wiring failed`,e)),f().then(async({reader:o,writer:s})=>{let{createRemoteSprinkleVfs:c}=await t(async()=>{let{createRemoteSprinkleVfs:e}=await import(`./remote-sprinkle-vfs-e81pZJKo.js`);return{createRemoteSprinkleVfs:e}},__vite__mapDeps([49,31])),{wireWcSprinkles:l}=await t(async()=>{let{wireWcSprinkles:e}=await import(`./wc-sprinkles-Bx9wACAI.js`);return{wireWcSprinkles:e}},__vite__mapDeps([50,5])),u=await l({refs:a,client:n,fs:c({reader:o,writer:s}),instanceId:i.instanceId,log:r});if(e.onClientReady(()=>void u.resync()),i.standalone&&i.instanceId){let{wireWcTray:o}=await t(async()=>{let{wireWcTray:e}=await import(`./wc-tray-J_sNM_0j.js`);return{wireWcTray:e}},__vite__mapDeps([51,5,4,3,6,7,8,9,10,1,11,12,13,14,15,45,17,18,19,26,52,53,36])),s=u.zone.callbacks();await o({refs:a,client:n,browser:i.standalone.browser,realCdpTransport:i.standalone.realCdpTransport,instanceId:i.instanceId,runtimeMode:i.standalone.runtimeMode,sprinkleManager:u.manager,addSprinkle:(e,t,n)=>s.addSprinkle(e,t,n),removeSprinkle:e=>s.removeSprinkle(e),getController:()=>e.getController(),getSelectedJid:()=>e.getSelected()?.jid??`cone`,agentHandle:d,openFs:p,cherryJoinUrl:i.standalone.cherryJoinUrl,cherryTransport:i.standalone.cherryTransport,baseFloatLabel:i.standalone.baseFloatLabel,window,log:r})}}).catch(e=>r.error(`WC sprinkle/tray wiring failed`,e)),t(async()=>{let{wireWcNav:e}=await import(`./wc-nav-OUzyxSqg.js`);return{wireWcNav:e}},__vite__mapDeps([54,5,17,3,18,4,6,7,8,9,10,1,11,12,13,14,15,19])).then(({wireWcNav:e})=>e({refs:a,client:n,log:r})).catch(e=>r.error(`WC nav wiring failed`,e)),t(async()=>{let{wireWcVoice:e}=await import(`./wc-voice-erm0EtRv.js`);return{wireWcVoice:e}},__vite__mapDeps([55,5])).then(({wireWcVoice:t})=>t({refs:a,send:t=>e.getController()?.sendUserMessage(t),log:r})).catch(e=>r.error(`WC voice wiring failed`,e)),t(async()=>{let{getComposerSpeech:e}=await import(`./composer-speech-BuzPv_Yy.js`);return{getComposerSpeech:e}},__vite__mapDeps([56,1,57,5,40,41,58])).then(({getComposerSpeech:e})=>{let t=a.composer;t.speech=e(),t.setAttribute(`ptt`,``)}).catch(e=>r.error(`WC push-to-talk wiring failed`,e))}async function Lr(e,n,r=`standalone`){let{browser:i,realCdpTransport:a,instanceId:o,cherryJoinUrl:s,cherryTransport:c}=await Yn({runtimeMode:r,envBaseUrl:null,window,log:n}),{resolveStandaloneFloatLabel:l,DEFAULT_STANDALONE_LABEL:u}=await t(async()=>{let{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}=await import(`./wc-float-label-dfUH87GD.js`);return{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}},[]),d=r===`standalone`||r===`electron-overlay`?await l():u,f=Tr(e,d),p=qn({realCdpTransport:a,instanceId:o,callbacks:Sr(f.wiring)});Vn({send:e=>p.client.sendRaw(e)}),Ir(f,p.client,n,{instanceId:o,standalone:{browser:i,realCdpTransport:a,runtimeMode:r,cherryJoinUrl:s,cherryTransport:c,baseFloatLabel:d}});let{setupSudoStandalone:m}=await t(async()=>{let{setupSudoStandalone:e}=await import(`./setup-sudo-CGEyCft4.js`);return{setupSudoStandalone:e}},[]);await m({log:n}),await p.ready,f.wiring.notifyReady?.(),n.info(`WC live shell ready`,{scoops:p.client.getScoops().length})}export{Ne as _,P as a,Ir as attachWcClient,L as c,Sr as createWcLiveCallbacks,Je as d,ut as f,Pe as g,Ye as h,jn as i,R as l,k as m,Lr as mountWcUiLive,Pn as n,Zt as o,lt as p,Tr as prepareWcShell,An as r,Nt as s,zn as t,Xt as u};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/main-BdTYQoCT.js","assets/chunk-aKtaBQYM.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/preload-helper-zJ_50EbN.js","assets/account-store-DhgAQ90t.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/logger-DDBAeTLF.js","assets/src-DlEHAkLd.js","assets/panel-rpc-DqT2FG7c.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-YOPqzMmL.js","assets/clipboard-DgFtRQbq.js","assets/legacy-styles-4PP74ISo.js","assets/sync-dialog-BFKWO6DT.js","assets/wc-settings-oFGQW2eo.js","assets/wc-detached-6UYujPAV.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-zJ_50EbN.js";import{n as t}from"./clipboard-DgFtRQbq.js";import{a as n,g as r,h as i,s as a}from"./main-BdTYQoCT.js";import{r as o}from"./wc-live-BhetCV9k.js";function s(e){let t=e.find(e=>e.userAvatar&&e.userName)??e.find(e=>e.userName);return t?.userName?{name:t.userName,avatarUrl:t.userAvatar,provider:t.providerId}:null}function c(e){return e.flatMap(e=>e.models.map(t=>({name:t.name??t.id,provider:e.providerName,id:`${e.providerId}:${t.id}`})))}async function l(l){let{refs:f,client:p,log:m}=l,{getAllAvailableModels:h,getAccounts:g}=await e(async()=>{let{getAllAvailableModels:e,getAccounts:t}=await import(`./main-BdTYQoCT.js`).then(e=>e.r);return{getAllAvailableModels:e,getAccounts:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])),_=()=>{f.composerMeta.models=c(h())};_(),await u(f,p);let v=typeof chrome<`u`&&!!chrome?.runtime?.id,y=()=>{let e=s(g()),t=f.avatarMenu.querySelector(`slicc-avatar`),n=f.inputCard.querySelector(`slicc-send-button`);e?(t?.removeAttribute(`initials`),t?.setAttribute(`name`,e.name),e.avatarUrl&&(t?.setAttribute(`src`,e.avatarUrl),n?.setAttribute(`src`,e.avatarUrl)),f.avatarMenu.user={name:e.name,provider:e.provider}):(t?.removeAttribute(`name`),t?.removeAttribute(`src`),t?.removeAttribute(`initials`),n?.removeAttribute(`src`),f.avatarMenu.user={name:`SLICC`,provider:v?`extension`:`standalone`})};y();let b=()=>{if(v)return[];let e=n(o(),r()),t=[{kind:`separator`}];return e.kind===`leader-offer`?t.push({id:`tray-enable`,label:e.label,icon:`radio`}):e.kind===`leader-copy`?(t.push({id:`tray-copy`,label:`Copy tray join URL`,icon:`link`}),t.push({id:`tray-stop`,label:`Stop multi-browser sync`,icon:`square`,danger:!0})):e.kind===`leader-pending`?(t.push({kind:`caption`,label:e.caption}),t.push({id:`tray-stop`,label:`Stop multi-browser sync`,icon:`square`,danger:!0})):(t.push({kind:`caption`,label:e.caption}),t.push({id:`tray-stop`,label:`Disconnect from leader`,icon:`unplug`,danger:!0})),t},x=new URLSearchParams(window.location.search).has(`detached`),S=()=>v&&!x?[{id:`popout`,label:`Pop out into a tab`,icon:`external-link`}]:[],C=()=>{f.avatarMenu.items=[{id:`settings`,label:`Account settings…`,icon:`settings`},...S(),...b()]};C(),f.avatarMenu.addEventListener(`slicc-avatar-menu-toggle`,e=>{e.detail?.open&&C()});let w=n=>{if(n===`tray-enable`)return i({locationHref:window.location.href,storage:window.localStorage,envBaseUrl:null,defaultWorkerBaseUrl:a}).then(e=>{if(!e)return m.error(`tray enable: no worker base URL resolvable`);window.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:e}}))}),!0;if(n===`tray-copy`){let n=o().session?.joinUrl;return n&&(t(n).catch(()=>void 0),e(async()=>{let{loadLegacyDialogStyles:e}=await import(`./legacy-styles-4PP74ISo.js`);return{loadLegacyDialogStyles:e}},__vite__mapDeps([17,3])).then(({loadLegacyDialogStyles:e})=>e()).then(async()=>{let{showSyncEnabledDialog:t}=await e(async()=>{let{showSyncEnabledDialog:e}=await import(`./sync-dialog-BFKWO6DT.js`);return{showSyncEnabledDialog:e}},__vite__mapDeps([18,16,1]));t({joinUrl:n,copied:!0})}).catch(e=>m.error(`sync dialog failed`,e))),!0}return n===`tray-stop`?(window.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:null}})),!0):!1},T=()=>{e(async()=>{let{showWcSettings:e}=await import(`./wc-settings-oFGQW2eo.js`);return{showWcSettings:e}},__vite__mapDeps([19,3])).then(({showWcSettings:e})=>e(m)).then(()=>{_(),y(),p.updateModel()}).catch(e=>m.error(`WC settings dialog failed`,e))};f.avatarMenu.addEventListener(`slicc-avatar-action`,t=>{let n=t.detail?.id;if(n&&w(n)){C();return}if(n===`popout`){e(async()=>{let{requestDetachedPopout:e}=await import(`./wc-detached-6UYujPAV.js`);return{requestDetachedPopout:e}},__vite__mapDeps([20,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])).then(({requestDetachedPopout:e})=>e()).catch(e=>m.error(`detached popout request failed`,e));return}n===`settings`&&T()}),f.composerMeta.addEventListener(`add-ai`,T),d({refreshModels:_,applyIdentity:y,client:p})}async function u(t,n){let{resolveModelById:r,resolveCurrentModel:i,setSelectedModelId:a}=await e(async()=>{let{resolveModelById:e,resolveCurrentModel:t,setSelectedModelId:n}=await import(`./main-BdTYQoCT.js`).then(e=>e.r);return{resolveModelById:e,resolveCurrentModel:t,setSelectedModelId:n}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])),o=e=>{let t=e.indexOf(`:`);return t>0?e.slice(t+1):e},s=e=>{try{let n=e?r(o(e)):i();t.composerMeta.toggleAttribute(`no-thinking`,n.reasoning!==!0)}catch{}};s(),t.composerMeta.addEventListener(`model-change`,e=>{let t=e.detail?.id;t&&(a(t),s(t),n.updateModel())})}async function d(t){let{refreshModels:n,applyIdentity:r,client:i}=t,{getAccounts:a,getProviderConfig:o}=await e(async()=>{let{getAccounts:e,getProviderConfig:t}=await import(`./main-BdTYQoCT.js`).then(e=>e.r);return{getAccounts:e,getProviderConfig:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]));window.addEventListener(`slicc:accounts-changed`,()=>{n(),r(),i.updateModel();for(let e of a()){let t=o(e.providerId)?.refreshModels;t&&t().then(()=>{n(),i.updateModel()}).catch(()=>void 0)}})}export{l as wireWcNav};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/main-T5PiQ8ba.js","assets/chunk-aKtaBQYM.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/preload-helper-zJ_50EbN.js","assets/account-store-H4y3g6Zl.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/logger-DDBAeTLF.js","assets/src-DlEHAkLd.js","assets/panel-rpc-DqT2FG7c.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-YOPqzMmL.js","assets/clipboard-DgFtRQbq.js","assets/legacy-styles-4PP74ISo.js","assets/sync-dialog-BFKWO6DT.js","assets/wc-settings-BCwxP53w.js","assets/wc-detached-B6OurVLW.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./preload-helper-zJ_50EbN.js";import{n as t}from"./clipboard-DgFtRQbq.js";import{a as n,g as r,h as i,s as a}from"./main-T5PiQ8ba.js";import{r as o}from"./wc-live-Cy2aAvjD.js";function s(e){let t=e.find(e=>e.userAvatar&&e.userName)??e.find(e=>e.userName);return t?.userName?{name:t.userName,avatarUrl:t.userAvatar,provider:t.providerId}:null}function c(e){return e.flatMap(e=>e.models.map(t=>({name:t.name??t.id,provider:e.providerName,id:`${e.providerId}:${t.id}`})))}async function l(l){let{refs:f,client:p,log:m}=l,{getAllAvailableModels:h,getAccounts:g}=await e(async()=>{let{getAllAvailableModels:e,getAccounts:t}=await import(`./main-T5PiQ8ba.js`).then(e=>e.r);return{getAllAvailableModels:e,getAccounts:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])),_=()=>{f.composerMeta.models=c(h())};_(),await u(f,p);let v=typeof chrome<`u`&&!!chrome?.runtime?.id,y=()=>{let e=s(g()),t=f.avatarMenu.querySelector(`slicc-avatar`),n=f.inputCard.querySelector(`slicc-send-button`);e?(t?.removeAttribute(`initials`),t?.setAttribute(`name`,e.name),e.avatarUrl&&(t?.setAttribute(`src`,e.avatarUrl),n?.setAttribute(`src`,e.avatarUrl)),f.avatarMenu.user={name:e.name,provider:e.provider}):(t?.removeAttribute(`name`),t?.removeAttribute(`src`),t?.removeAttribute(`initials`),n?.removeAttribute(`src`),f.avatarMenu.user={name:`SLICC`,provider:v?`extension`:`standalone`})};y();let b=()=>{if(v)return[];let e=n(o(),r()),t=[{kind:`separator`}];return e.kind===`leader-offer`?t.push({id:`tray-enable`,label:e.label,icon:`radio`}):e.kind===`leader-copy`?(t.push({id:`tray-copy`,label:`Copy tray join URL`,icon:`link`}),t.push({id:`tray-stop`,label:`Stop multi-browser sync`,icon:`square`,danger:!0})):e.kind===`leader-pending`?(t.push({kind:`caption`,label:e.caption}),t.push({id:`tray-stop`,label:`Stop multi-browser sync`,icon:`square`,danger:!0})):(t.push({kind:`caption`,label:e.caption}),t.push({id:`tray-stop`,label:`Disconnect from leader`,icon:`unplug`,danger:!0})),t},x=new URLSearchParams(window.location.search).has(`detached`),S=()=>v&&!x?[{id:`popout`,label:`Pop out into a tab`,icon:`external-link`}]:[],C=()=>{f.avatarMenu.items=[{id:`settings`,label:`Account settings…`,icon:`settings`},...S(),...b()]};C(),f.avatarMenu.addEventListener(`slicc-avatar-menu-toggle`,e=>{e.detail?.open&&C()});let w=n=>{if(n===`tray-enable`)return i({locationHref:window.location.href,storage:window.localStorage,envBaseUrl:null,defaultWorkerBaseUrl:a}).then(e=>{if(!e)return m.error(`tray enable: no worker base URL resolvable`);window.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:e}}))}),!0;if(n===`tray-copy`){let n=o().session?.joinUrl;return n&&(t(n).catch(()=>void 0),e(async()=>{let{loadLegacyDialogStyles:e}=await import(`./legacy-styles-4PP74ISo.js`);return{loadLegacyDialogStyles:e}},__vite__mapDeps([17,3])).then(({loadLegacyDialogStyles:e})=>e()).then(async()=>{let{showSyncEnabledDialog:t}=await e(async()=>{let{showSyncEnabledDialog:e}=await import(`./sync-dialog-BFKWO6DT.js`);return{showSyncEnabledDialog:e}},__vite__mapDeps([18,16,1]));t({joinUrl:n,copied:!0})}).catch(e=>m.error(`sync dialog failed`,e))),!0}return n===`tray-stop`?(window.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:null}})),!0):!1},T=()=>{e(async()=>{let{showWcSettings:e}=await import(`./wc-settings-BCwxP53w.js`);return{showWcSettings:e}},__vite__mapDeps([19,3])).then(({showWcSettings:e})=>e(m)).then(()=>{_(),y(),p.updateModel()}).catch(e=>m.error(`WC settings dialog failed`,e))};f.avatarMenu.addEventListener(`slicc-avatar-action`,t=>{let n=t.detail?.id;if(n&&w(n)){C();return}if(n===`popout`){e(async()=>{let{requestDetachedPopout:e}=await import(`./wc-detached-B6OurVLW.js`);return{requestDetachedPopout:e}},__vite__mapDeps([20,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])).then(({requestDetachedPopout:e})=>e()).catch(e=>m.error(`detached popout request failed`,e));return}n===`settings`&&T()}),f.composerMeta.addEventListener(`add-ai`,T),d({refreshModels:_,applyIdentity:y,client:p})}async function u(t,n){let{resolveModelById:r,resolveCurrentModel:i,setSelectedModelId:a}=await e(async()=>{let{resolveModelById:e,resolveCurrentModel:t,setSelectedModelId:n}=await import(`./main-T5PiQ8ba.js`).then(e=>e.r);return{resolveModelById:e,resolveCurrentModel:t,setSelectedModelId:n}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])),o=e=>{let t=e.indexOf(`:`);return t>0?e.slice(t+1):e},s=e=>{try{let n=e?r(o(e)):i();t.composerMeta.toggleAttribute(`no-thinking`,n.reasoning!==!0)}catch{}};s(),t.composerMeta.addEventListener(`model-change`,e=>{let t=e.detail?.id;t&&(a(t),s(t),n.updateModel())})}async function d(t){let{refreshModels:n,applyIdentity:r,client:i}=t,{getAccounts:a,getProviderConfig:o}=await e(async()=>{let{getAccounts:e,getProviderConfig:t}=await import(`./main-T5PiQ8ba.js`).then(e=>e.r);return{getAccounts:e,getProviderConfig:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]));window.addEventListener(`slicc:accounts-changed`,()=>{n(),r(),i.updateModel();for(let e of a()){let t=o(e.providerId)?.refreshModels;t&&t().then(()=>{n(),i.updateModel()}).catch(()=>void 0)}})}export{l as wireWcNav};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/onboarding-orchestrator-MNoD_6wi.js","assets/logger-DDBAeTLF.js","assets/welcome-detection-Cr8mNEkt.js","assets/chunk-aKtaBQYM.js","assets/oauth-service-CTlktxVj.js","assets/preload-helper-zJ_50EbN.js","assets/panel-rpc-DqT2FG7c.js","assets/main-BdTYQoCT.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/account-store-DhgAQ90t.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/src-DlEHAkLd.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-YOPqzMmL.js","assets/clipboard-DgFtRQbq.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-zJ_50EbN.js";import{p as t}from"./main-BdTYQoCT.js";import{t as n}from"./welcome-detection-Cr8mNEkt.js";import{d as r}from"./wc-live-BhetCV9k.js";function i(e){let{vfs:r,storage:i,firedWelcomeActions:a,persistFiredWelcomeActions:o,getOrchestrator:s,log:c}=e;t(i)||n(r).then(e=>{if(e.isFirstRun){if(a.has(`first-run`)){c.debug(`Suppressing welcome re-fire: first-run already in dedup ledger`);return}a.add(`first-run`),o(a),s().handleFirstRun()}}).catch(e=>c.warn(`Welcome detection failed`,e))}function a(e){for(let t of[`slicc_accounts`,`selected-model`]){let n=localStorage.getItem(t);n!=null&&e.sendRaw({type:`local-storage-set`,key:t,value:n})}}function o(e,t,n,r){let i=n(e).filter(e=>!r(e.id)),a=t.defaultModelId?i.find(e=>e.id===t.defaultModelId):void 0,o=t.defaultModelId?i.find(e=>e.id.toLowerCase().includes(t.defaultModelId.toLowerCase())):void 0,s=a??o??i[0];return s?`${e}:${s.id}`:void 0}function s(e){let t=e.getAvailableProviders().filter(t=>e.providerOffersLlmModels(t)),n=t.map(t=>{let n=e.getProviderConfig(t);return{id:n.id,name:n.name??n.id,description:n.description,requiresApiKey:n.requiresApiKey??!0,requiresBaseUrl:n.requiresBaseUrl??!1,requiresDeployment:!!n.requiresDeployment,requiresApiVersion:!!n.requiresApiVersion,apiKeyPlaceholder:n.apiKeyPlaceholder??void 0,apiKeyEnvVar:n.apiKeyEnvVar??void 0,defaultBaseUrl:n.baseUrlPlaceholder??void 0,baseUrlDescription:n.baseUrlDescription??void 0,deploymentPlaceholder:n.deploymentPlaceholder??void 0,deploymentDescription:n.deploymentDescription??void 0,apiVersionDefault:n.apiVersionDefault??void 0,apiVersionDescription:n.apiVersionDescription??void 0,isOAuth:!!n.isOAuth}}).sort((e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`})),r={};for(let n of t)try{r[n]=e.getProviderModels(n).filter(t=>!e.isModelHiddenFromPicker(t.id)).map(e=>({id:e.id,name:e.name}))}catch{r[n]=[]}return{providers:n,models:r}}async function c(t){let{OnboardingOrchestrator:n}=await e(async()=>{let{OnboardingOrchestrator:e}=await import(`./onboarding-orchestrator-MNoD_6wi.js`);return{OnboardingOrchestrator:e}},__vite__mapDeps([0,1,2,3])),r=null;return{get:()=>r||(r=new n({fs:t.fs,postSystemMessage:t.postSystemMessage,postDipReference:t.postDipReference,getProviderCatalogue:()=>s(t.providers),saveAccount:(e,n,r,i,a)=>t.providers.addAccount(e,n,r,i,a),setSelectedModel:e=>t.providers.setSelectedModelId(e),resolveModelLabel:(e,n)=>{try{return t.providers.getProviderModels(e).find(e=>e.id===n)?.name??null}catch{return null}},broadcastToDip:e=>t.broadcastToDip(e),fireFinalLick:e=>t.onFireFinalLick(e),launchOAuth:async(e,n)=>await l(e,n??null,t)}),r),peek:()=>r,buildCatalogue:()=>s(t.providers)}}async function l(t,n,r){try{let i=r.providers.getProviderConfig(t);if(!i.isOAuth||!i.onOAuthLogin&&!i.onOAuthLoginIntercepted)return{ok:!1,message:`Provider does not support OAuth.`};if(i.requiresBaseUrl&&n&&r.providers.addAccount(t,``,n),i.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:t}=await e(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-CTlktxVj.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([4,5,6,3])),n=await t();if(!n)return{ok:!1,message:`Intercepted OAuth requires the controlled-browser transport — open SLICC in standalone or extension mode.`};await i.onOAuthLoginIntercepted(n,()=>void 0,{presentDeviceCode:r.deviceCode.createSprinkleDeviceCodePrompter({broadcastToDip:e=>r.broadcastToDip(e)})})}else if(i.onOAuthLogin){let{createOAuthLauncher:t}=await e(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-CTlktxVj.js`);return{createOAuthLauncher:e}},__vite__mapDeps([4,5,6,3])),n=t();await i.onOAuthLogin(n,()=>void 0)}return{ok:!0,model:o(t,i,r.providers.getProviderModels,r.providers.isModelHiddenFromPicker)}}catch(e){return{ok:!1,message:e instanceof Error?e.message:`OAuth login failed.`}}}var u=new Set([`first-run`,`onboarding-complete`,`onboarding-complete-with-provider`,`shortcut-migrate`]),d=`slicc:welcome-flow-fired`;function f(){try{let e=typeof localStorage<`u`?localStorage.getItem(d):null;if(!e)return new Set;let t=JSON.parse(e);return new Set(Array.isArray(t)?t.map(String):[])}catch{return new Set}}function p(e){try{if(typeof localStorage>`u`)return;localStorage.setItem(d,JSON.stringify([...e]))}catch{}}function m(e,t,n,r,i){if(u.has(e)&&t.has(e)){i.debug(`Suppressing duplicate welcome lick (${r})`,{action:e});return}u.has(e)&&(t.add(e),p(t)),n()}var h=new Set([`first-run`,`onboarding-complete`,`connect-ready`,`connect-attempt`,`oauth-attempt`,`device-code-decision`,`shortcut-migrate`]);function g(e){let{firedWelcomeActions:t,getAccounts:n,getProviderConfig:r,resolveDeviceCodeDecision:i,getOnboardingOrchestrator:a,applyPendingMount:o,fastForward:s,onShortcutMigrate:c,contextLabel:l,vfs:d,log:f}=e;return e=>{if(e.type!==`sprinkle`)return!1;let m=e.sprinkleName===`welcome`||e.sprinkleName===`inline`?e.body?.action:void 0;if(m&&u.has(m)){if(t.has(m))return f.debug(`Suppressing duplicate welcome lick (${l})`,{action:m}),!0;t.add(m),p(t)}if(!m||!h.has(m))return!1;let g=e.body;return S(m,g,{getAccounts:n,getProviderConfig:r,resolveDeviceCodeDecision:i,getOnboardingOrchestrator:a,applyPendingMount:o,fastForward:s,onShortcutMigrate:c,vfs:d,log:f})}}function _(e,t){let n=e[t];return typeof n==`string`&&n?n:null}function v(e,t){let n=t.getOnboardingOrchestrator(),r=e?.data??{};return r.mountWorkspace&&t.applyPendingMount&&t.applyPendingMount().catch(e=>t.log.warn(`Failed to mount workspace from onboarding`,e)),n.handleOnboardingComplete(r).catch(e=>t.log.warn(`OnboardingOrchestrator failed`,e)),!0}function y(e,t){let n=e?.data;return n&&t.getOnboardingOrchestrator().handleConnectAttempt({provider:String(n.provider??``),apiKey:String(n.apiKey??``),baseUrl:_(n,`baseUrl`),deployment:_(n,`deployment`),apiVersion:_(n,`apiVersion`),model:n.model==null?null:String(n.model)}).catch(e=>t.log.warn(`handleConnectAttempt failed`,e)),!0}function b(e,t){let n=e?.data;return n&&t.getOnboardingOrchestrator().handleOAuthAttempt({provider:String(n.provider??``),baseUrl:_(n,`baseUrl`)}).catch(e=>t.log.warn(`handleOAuthAttempt failed`,e)),!0}var x={"device-code-decision":(e,t)=>{let n=e?.data?.decision;return t.resolveDeviceCodeDecision(n===`cancel`?`cancel`:`continue`),!0},"first-run":(e,t)=>(t.getOnboardingOrchestrator().handleFirstRun(),!0),"onboarding-complete":v,"connect-ready":(e,t)=>C(t),"connect-attempt":y,"oauth-attempt":b,"shortcut-migrate":(e,t)=>(t.onShortcutMigrate(),!0)};function S(e,t,n){return x[e]?.(t,n)??!1}function C(e){let t=e.getAccounts();if(t.length===0)return e.getOnboardingOrchestrator().handleConnectReady(),!0;let n=t[0];return e.fastForward.broadcastAlreadyConnected(n.providerId),w(e.vfs,n.providerId,e.fastForward.fire).catch(t=>e.log.warn(`Failed to fire fast-forward final lick`,t)),!0}async function w(t,n,r){let{hasOnboardingFinalLickInHistory:i}=await e(async()=>{let{hasOnboardingFinalLickInHistory:e}=await import(`./welcome-detection-Cr8mNEkt.js`).then(e=>e.r);return{hasOnboardingFinalLickInHistory:e}},__vite__mapDeps([2,3,1]));if(await i())return;let a=t?await T(t):{},{getSelectedModelId:o,getProviderConfig:s,getProviderModels:c}=await e(async()=>{let{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}=await import(`./main-BdTYQoCT.js`).then(e=>e.r);return{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}},__vite__mapDeps([7,3,8,5,9,10,11,12,13,14,1,15,6,16,17,18,19])),l=(()=>{try{return o()||null}catch{return null}})(),u=(()=>{if(!l)return null;try{return c(n).find(e=>e.id===l)?.name??l}catch{return l}})(),d=null;try{d=s(n).name??null}catch{}r({action:`onboarding-complete-with-provider`,data:{profile:a,provider:n,providerName:d,model:l,modelLabel:u,validation:`preexisting`}})}async function T(e){try{let t=await e.readDir(`/home`),n=null;for(let r of t){if(r.type!==`directory`)continue;let t=`/home/${r.name}/.welcome.json`;try{let r=(await e.stat(t)).mtime??0;if(n&&r<=n.mtime)continue;let i=await e.readFile(t,{encoding:`utf-8`}),a=JSON.parse(typeof i==`string`?i:new TextDecoder().decode(i));a&&typeof a==`object`&&(n={profile:a,mtime:r})}catch{}}return n?.profile??{}}catch{return{}}}function E(e){let{writer:t}=e;return{readFile:t.readFile.bind(t),writeFile:t.writeFile.bind(t),readDir:t.readDir.bind(t),stat:t.stat.bind(t),mkdir:t.mkdir.bind(t),exists:async e=>{try{return await t.stat(e),!0}catch{return!1}}}}async function D(t){let{client:n,getController:o,openVfs:s,log:l}=t,u=await e(()=>import(`./main-BdTYQoCT.js`).then(e=>e.r),__vite__mapDeps([7,3,8,5,9,10,11,12,13,14,1,15,6,16,17,18,19])),{createSprinkleDeviceCodePrompter:d,resolveDeviceCodeDecision:h}=await e(async()=>{let{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}=await import(`./device-code-bridge-CbHxw098.js`);return{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}},[]),_=E(await s()),v=f(),y=e=>{let t=o();t?t.addAssistantMessage(e):l.warn(`WC onboarding: no controller to post welcome line`)},b=await c({fs:_,log:l,providers:u,deviceCode:{createSprinkleDeviceCodePrompter:d},postSystemMessage:y,postDipReference:y,broadcastToDip:e=>r(e),onFireFinalLick:e=>{a(n),m(String(e?.action??``),v,()=>n.sendSprinkleLick(`welcome`,e),`orchestrator-wc`,l)}}),x=g({firedWelcomeActions:v,getAccounts:u.getAccounts,getProviderConfig:u.getProviderConfig,resolveDeviceCodeDecision:h,getOnboardingOrchestrator:()=>b.get(),fastForward:{fire:e=>{m(String(e.action??``),v,()=>n.sendSprinkleLick(`welcome`,e),`fast-forward-wc`,l)},broadcastAlreadyConnected:e=>{let t=(()=>{try{return u.getProviderConfig(e)?.name??null}catch{return null}})();r({type:`slicc-already-connected`,provider:e,note:t?`Already connected to ${t}.`:`Already connected.`})}},onShortcutMigrate:()=>{_.writeFile(`/shared/.welcomed`,`1`).catch(e=>l.warn(`Failed to persist welcome completion marker`,e))},contextLabel:`wc`,vfs:_,log:l});return i({vfs:_,storage:window.localStorage,firedWelcomeActions:v,persistFiredWelcomeActions:p,getOrchestrator:()=>b.get(),log:l}),{interceptWelcomeLick:x}}export{D as wireWcOnboarding};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/onboarding-orchestrator-MNoD_6wi.js","assets/logger-DDBAeTLF.js","assets/welcome-detection-Cr8mNEkt.js","assets/chunk-aKtaBQYM.js","assets/oauth-service-CTlktxVj.js","assets/preload-helper-zJ_50EbN.js","assets/panel-rpc-DqT2FG7c.js","assets/main-T5PiQ8ba.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/account-store-H4y3g6Zl.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/src-DlEHAkLd.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-YOPqzMmL.js","assets/clipboard-DgFtRQbq.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./preload-helper-zJ_50EbN.js";import{p as t}from"./main-T5PiQ8ba.js";import{t as n}from"./welcome-detection-Cr8mNEkt.js";import{d as r}from"./wc-live-Cy2aAvjD.js";function i(e){let{vfs:r,storage:i,firedWelcomeActions:a,persistFiredWelcomeActions:o,getOrchestrator:s,log:c}=e;t(i)||n(r).then(e=>{if(e.isFirstRun){if(a.has(`first-run`)){c.debug(`Suppressing welcome re-fire: first-run already in dedup ledger`);return}a.add(`first-run`),o(a),s().handleFirstRun()}}).catch(e=>c.warn(`Welcome detection failed`,e))}function a(e){for(let t of[`slicc_accounts`,`selected-model`]){let n=localStorage.getItem(t);n!=null&&e.sendRaw({type:`local-storage-set`,key:t,value:n})}}function o(e,t,n,r){let i=n(e).filter(e=>!r(e.id)),a=t.defaultModelId?i.find(e=>e.id===t.defaultModelId):void 0,o=t.defaultModelId?i.find(e=>e.id.toLowerCase().includes(t.defaultModelId.toLowerCase())):void 0,s=a??o??i[0];return s?`${e}:${s.id}`:void 0}function s(e){let t=e.getAvailableProviders().filter(t=>e.providerOffersLlmModels(t)),n=t.map(t=>{let n=e.getProviderConfig(t);return{id:n.id,name:n.name??n.id,description:n.description,requiresApiKey:n.requiresApiKey??!0,requiresBaseUrl:n.requiresBaseUrl??!1,requiresDeployment:!!n.requiresDeployment,requiresApiVersion:!!n.requiresApiVersion,apiKeyPlaceholder:n.apiKeyPlaceholder??void 0,apiKeyEnvVar:n.apiKeyEnvVar??void 0,defaultBaseUrl:n.baseUrlPlaceholder??void 0,baseUrlDescription:n.baseUrlDescription??void 0,deploymentPlaceholder:n.deploymentPlaceholder??void 0,deploymentDescription:n.deploymentDescription??void 0,apiVersionDefault:n.apiVersionDefault??void 0,apiVersionDescription:n.apiVersionDescription??void 0,isOAuth:!!n.isOAuth}}).sort((e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`})),r={};for(let n of t)try{r[n]=e.getProviderModels(n).filter(t=>!e.isModelHiddenFromPicker(t.id)).map(e=>({id:e.id,name:e.name}))}catch{r[n]=[]}return{providers:n,models:r}}async function c(t){let{OnboardingOrchestrator:n}=await e(async()=>{let{OnboardingOrchestrator:e}=await import(`./onboarding-orchestrator-MNoD_6wi.js`);return{OnboardingOrchestrator:e}},__vite__mapDeps([0,1,2,3])),r=null;return{get:()=>r||(r=new n({fs:t.fs,postSystemMessage:t.postSystemMessage,postDipReference:t.postDipReference,getProviderCatalogue:()=>s(t.providers),saveAccount:(e,n,r,i,a)=>t.providers.addAccount(e,n,r,i,a),setSelectedModel:e=>t.providers.setSelectedModelId(e),resolveModelLabel:(e,n)=>{try{return t.providers.getProviderModels(e).find(e=>e.id===n)?.name??null}catch{return null}},broadcastToDip:e=>t.broadcastToDip(e),fireFinalLick:e=>t.onFireFinalLick(e),launchOAuth:async(e,n)=>await l(e,n??null,t)}),r),peek:()=>r,buildCatalogue:()=>s(t.providers)}}async function l(t,n,r){try{let i=r.providers.getProviderConfig(t);if(!i.isOAuth||!i.onOAuthLogin&&!i.onOAuthLoginIntercepted)return{ok:!1,message:`Provider does not support OAuth.`};if(i.requiresBaseUrl&&n&&r.providers.addAccount(t,``,n),i.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:t}=await e(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-CTlktxVj.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([4,5,6,3])),n=await t();if(!n)return{ok:!1,message:`Intercepted OAuth requires the controlled-browser transport — open SLICC in standalone or extension mode.`};await i.onOAuthLoginIntercepted(n,()=>void 0,{presentDeviceCode:r.deviceCode.createSprinkleDeviceCodePrompter({broadcastToDip:e=>r.broadcastToDip(e)})})}else if(i.onOAuthLogin){let{createOAuthLauncher:t}=await e(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-CTlktxVj.js`);return{createOAuthLauncher:e}},__vite__mapDeps([4,5,6,3])),n=t();await i.onOAuthLogin(n,()=>void 0)}return{ok:!0,model:o(t,i,r.providers.getProviderModels,r.providers.isModelHiddenFromPicker)}}catch(e){return{ok:!1,message:e instanceof Error?e.message:`OAuth login failed.`}}}var u=new Set([`first-run`,`onboarding-complete`,`onboarding-complete-with-provider`,`shortcut-migrate`]),d=`slicc:welcome-flow-fired`;function f(){try{let e=typeof localStorage<`u`?localStorage.getItem(d):null;if(!e)return new Set;let t=JSON.parse(e);return new Set(Array.isArray(t)?t.map(String):[])}catch{return new Set}}function p(e){try{if(typeof localStorage>`u`)return;localStorage.setItem(d,JSON.stringify([...e]))}catch{}}function m(e,t,n,r,i){if(u.has(e)&&t.has(e)){i.debug(`Suppressing duplicate welcome lick (${r})`,{action:e});return}u.has(e)&&(t.add(e),p(t)),n()}var h=new Set([`first-run`,`onboarding-complete`,`connect-ready`,`connect-attempt`,`oauth-attempt`,`device-code-decision`,`shortcut-migrate`]);function g(e){let{firedWelcomeActions:t,getAccounts:n,getProviderConfig:r,resolveDeviceCodeDecision:i,getOnboardingOrchestrator:a,applyPendingMount:o,fastForward:s,onShortcutMigrate:c,contextLabel:l,vfs:d,log:f}=e;return e=>{if(e.type!==`sprinkle`)return!1;let m=e.sprinkleName===`welcome`||e.sprinkleName===`inline`?e.body?.action:void 0;if(m&&u.has(m)){if(t.has(m))return f.debug(`Suppressing duplicate welcome lick (${l})`,{action:m}),!0;t.add(m),p(t)}if(!m||!h.has(m))return!1;let g=e.body;return S(m,g,{getAccounts:n,getProviderConfig:r,resolveDeviceCodeDecision:i,getOnboardingOrchestrator:a,applyPendingMount:o,fastForward:s,onShortcutMigrate:c,vfs:d,log:f})}}function _(e,t){let n=e[t];return typeof n==`string`&&n?n:null}function v(e,t){let n=t.getOnboardingOrchestrator(),r=e?.data??{};return r.mountWorkspace&&t.applyPendingMount&&t.applyPendingMount().catch(e=>t.log.warn(`Failed to mount workspace from onboarding`,e)),n.handleOnboardingComplete(r).catch(e=>t.log.warn(`OnboardingOrchestrator failed`,e)),!0}function y(e,t){let n=e?.data;return n&&t.getOnboardingOrchestrator().handleConnectAttempt({provider:String(n.provider??``),apiKey:String(n.apiKey??``),baseUrl:_(n,`baseUrl`),deployment:_(n,`deployment`),apiVersion:_(n,`apiVersion`),model:n.model==null?null:String(n.model)}).catch(e=>t.log.warn(`handleConnectAttempt failed`,e)),!0}function b(e,t){let n=e?.data;return n&&t.getOnboardingOrchestrator().handleOAuthAttempt({provider:String(n.provider??``),baseUrl:_(n,`baseUrl`)}).catch(e=>t.log.warn(`handleOAuthAttempt failed`,e)),!0}var x={"device-code-decision":(e,t)=>{let n=e?.data?.decision;return t.resolveDeviceCodeDecision(n===`cancel`?`cancel`:`continue`),!0},"first-run":(e,t)=>(t.getOnboardingOrchestrator().handleFirstRun(),!0),"onboarding-complete":v,"connect-ready":(e,t)=>C(t),"connect-attempt":y,"oauth-attempt":b,"shortcut-migrate":(e,t)=>(t.onShortcutMigrate(),!0)};function S(e,t,n){return x[e]?.(t,n)??!1}function C(e){let t=e.getAccounts();if(t.length===0)return e.getOnboardingOrchestrator().handleConnectReady(),!0;let n=t[0];return e.fastForward.broadcastAlreadyConnected(n.providerId),w(e.vfs,n.providerId,e.fastForward.fire).catch(t=>e.log.warn(`Failed to fire fast-forward final lick`,t)),!0}async function w(t,n,r){let{hasOnboardingFinalLickInHistory:i}=await e(async()=>{let{hasOnboardingFinalLickInHistory:e}=await import(`./welcome-detection-Cr8mNEkt.js`).then(e=>e.r);return{hasOnboardingFinalLickInHistory:e}},__vite__mapDeps([2,3,1]));if(await i())return;let a=t?await T(t):{},{getSelectedModelId:o,getProviderConfig:s,getProviderModels:c}=await e(async()=>{let{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}=await import(`./main-T5PiQ8ba.js`).then(e=>e.r);return{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}},__vite__mapDeps([7,3,8,5,9,10,11,12,13,14,1,15,6,16,17,18,19])),l=(()=>{try{return o()||null}catch{return null}})(),u=(()=>{if(!l)return null;try{return c(n).find(e=>e.id===l)?.name??l}catch{return l}})(),d=null;try{d=s(n).name??null}catch{}r({action:`onboarding-complete-with-provider`,data:{profile:a,provider:n,providerName:d,model:l,modelLabel:u,validation:`preexisting`}})}async function T(e){try{let t=await e.readDir(`/home`),n=null;for(let r of t){if(r.type!==`directory`)continue;let t=`/home/${r.name}/.welcome.json`;try{let r=(await e.stat(t)).mtime??0;if(n&&r<=n.mtime)continue;let i=await e.readFile(t,{encoding:`utf-8`}),a=JSON.parse(typeof i==`string`?i:new TextDecoder().decode(i));a&&typeof a==`object`&&(n={profile:a,mtime:r})}catch{}}return n?.profile??{}}catch{return{}}}function E(e){let{writer:t}=e;return{readFile:t.readFile.bind(t),writeFile:t.writeFile.bind(t),readDir:t.readDir.bind(t),stat:t.stat.bind(t),mkdir:t.mkdir.bind(t),exists:async e=>{try{return await t.stat(e),!0}catch{return!1}}}}async function D(t){let{client:n,getController:o,openVfs:s,log:l}=t,u=await e(()=>import(`./main-T5PiQ8ba.js`).then(e=>e.r),__vite__mapDeps([7,3,8,5,9,10,11,12,13,14,1,15,6,16,17,18,19])),{createSprinkleDeviceCodePrompter:d,resolveDeviceCodeDecision:h}=await e(async()=>{let{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}=await import(`./device-code-bridge-CbHxw098.js`);return{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}},[]),_=E(await s()),v=f(),y=e=>{let t=o();t?t.addAssistantMessage(e):l.warn(`WC onboarding: no controller to post welcome line`)},b=await c({fs:_,log:l,providers:u,deviceCode:{createSprinkleDeviceCodePrompter:d},postSystemMessage:y,postDipReference:y,broadcastToDip:e=>r(e),onFireFinalLick:e=>{a(n),m(String(e?.action??``),v,()=>n.sendSprinkleLick(`welcome`,e),`orchestrator-wc`,l)}}),x=g({firedWelcomeActions:v,getAccounts:u.getAccounts,getProviderConfig:u.getProviderConfig,resolveDeviceCodeDecision:h,getOnboardingOrchestrator:()=>b.get(),fastForward:{fire:e=>{m(String(e.action??``),v,()=>n.sendSprinkleLick(`welcome`,e),`fast-forward-wc`,l)},broadcastAlreadyConnected:e=>{let t=(()=>{try{return u.getProviderConfig(e)?.name??null}catch{return null}})();r({type:`slicc-already-connected`,provider:e,note:t?`Already connected to ${t}.`:`Already connected.`})}},onShortcutMigrate:()=>{_.writeFile(`/shared/.welcomed`,`1`).catch(e=>l.warn(`Failed to persist welcome completion marker`,e))},contextLabel:`wc`,vfs:_,log:l});return i({vfs:_,storage:window.localStorage,firedWelcomeActions:v,persistFiredWelcomeActions:p,getOrchestrator:()=>b.get(),log:l}),{interceptWelcomeLick:x}}export{D as wireWcOnboarding};
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quick-llm-wBjuCuBC.js","assets/chunk-aKtaBQYM.js","assets/account-store-DhgAQ90t.js","assets/preload-helper-zJ_50EbN.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/logger-DDBAeTLF.js","assets/src-DlEHAkLd.js","assets/panel-rpc-DqT2FG7c.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-YOPqzMmL.js","assets/iconsAndAliases-Bzj1tGpU.js","assets/main-BdTYQoCT.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/clipboard-DgFtRQbq.js","assets/llm-session-id-DVmZ9C2t.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quick-llm-BjJNOIAW.js","assets/chunk-aKtaBQYM.js","assets/account-store-H4y3g6Zl.js","assets/preload-helper-zJ_50EbN.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/logger-DDBAeTLF.js","assets/src-DlEHAkLd.js","assets/panel-rpc-DqT2FG7c.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-YOPqzMmL.js","assets/icons-BU6llBsN.js","assets/main-T5PiQ8ba.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/clipboard-DgFtRQbq.js","assets/llm-session-id-DVmZ9C2t.js"])))=>i.map(i=>d[i]);
2
2
  import{t as e}from"./preload-helper-zJ_50EbN.js";var t=400,n=800,r=`You suggest the user's next prompt in a coding-agent chat. Based on the recent conversation, output ONE concrete follow-up the user might type next. Reply with just the prompt text — no quotes, no preamble, no list. Max 80 characters. If nothing useful comes to mind, reply exactly: What shall we build?`;function i(e,t){return e.length>t?`${e.slice(0,t)}…`:e}function a(e){let r=e.filter(e=>!e.isStreaming&&!e.queued&&e.source!==`lick`),a=[...r].reverse().find(e=>e.role===`assistant`),o=r.filter(e=>e.role===`user`).slice(-3);return!a||o.length===0?null:[...o.map(e=>`[user]: ${i(e.content,t)}`),`[assistant]: ${i(a.content,n)}`].join(`
3
3
 
4
- `)}async function o(t){if(t.currentValue.length>0)return;let n=a(t.messages);if(!n){t.setPlaceholder(t.defaultPlaceholder);return}let i=await(t.quickLabelFn??(await e(async()=>{let{quickLabel:e}=await import(`./quick-llm-wBjuCuBC.js`).then(e=>e.n);return{quickLabel:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]))).quickLabel)({system:r,prompt:`Recent conversation:\n${n}`,maxTokens:40,signal:t.signal});t.signal?.aborted||t.currentValue.length>0||t.setPlaceholder(i&&i.length>0?i:t.defaultPlaceholder)}function s(e,t,n){t===n?(e.removeAttribute(`suggestion`),e.setAttribute(`placeholder`,t)):e.setAttribute(`suggestion`,t)}function c(e){let t=null;return()=>{e.inputCard.hasAttribute(`disabled`)||(t?.abort(),t=new AbortController,o({messages:e.getMessages(),currentValue:e.inputCard.value??``,setPlaceholder:t=>s(e.inputCard,t,e.defaultPlaceholder),defaultPlaceholder:e.defaultPlaceholder,signal:t.signal}).catch(()=>void 0))}}export{c as createPlaceholderRefresher};
4
+ `)}async function o(t){if(t.currentValue.length>0)return;let n=a(t.messages);if(!n){t.setPlaceholder(t.defaultPlaceholder);return}let i=await(t.quickLabelFn??(await e(async()=>{let{quickLabel:e}=await import(`./quick-llm-BjJNOIAW.js`).then(e=>e.n);return{quickLabel:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]))).quickLabel)({system:r,prompt:`Recent conversation:\n${n}`,maxTokens:40,signal:t.signal});t.signal?.aborted||t.currentValue.length>0||t.setPlaceholder(i&&i.length>0?i:t.defaultPlaceholder)}function s(e,t,n){t===n?(e.removeAttribute(`suggestion`),e.setAttribute(`placeholder`,t)):e.setAttribute(`suggestion`,t)}function c(e){let t=null;return()=>{e.inputCard.hasAttribute(`disabled`)||(t?.abort(),t=new AbortController,o({messages:e.getMessages(),currentValue:e.inputCard.value??``,setPlaceholder:t=>s(e.inputCard,t,e.defaultPlaceholder),defaultPlaceholder:e.defaultPlaceholder,signal:t.signal}).catch(()=>void 0))}}export{c as createPlaceholderRefresher};
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/oauth-service-CTlktxVj.js","assets/preload-helper-zJ_50EbN.js","assets/panel-rpc-DqT2FG7c.js","assets/chunk-aKtaBQYM.js","assets/main-BdTYQoCT.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/account-store-DhgAQ90t.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/logger-DDBAeTLF.js","assets/src-DlEHAkLd.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-YOPqzMmL.js","assets/clipboard-DgFtRQbq.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/oauth-service-CTlktxVj.js","assets/preload-helper-zJ_50EbN.js","assets/panel-rpc-DqT2FG7c.js","assets/chunk-aKtaBQYM.js","assets/main-T5PiQ8ba.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/account-store-H4y3g6Zl.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/logger-DDBAeTLF.js","assets/src-DlEHAkLd.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-YOPqzMmL.js","assets/clipboard-DgFtRQbq.js"])))=>i.map(i=>d[i]);
2
2
  import{t as e}from"./preload-helper-zJ_50EbN.js";var t=`slicc-wc-settings-style`,n=`
3
3
  /* Width is owned by the dialog card (via ::part) — a min-width on the body
4
4
  used to overflow the card's content box and clip the row borders. */
@@ -21,4 +21,4 @@ slicc-dialog.wcset-dialog::part(dialog){width:min(520px,92vw);}
21
21
  .wcset__select:focus,.wcset__input:focus{border-color:var(--ctx);}
22
22
  .wcset__status{font-size:11.5px;color:var(--txt-3);min-height:14px;}
23
23
  .wcset__status[data-error]{color:#b91c1c;}
24
- `;function r(e){if(e.getElementById(t))return;let r=e.createElement(`style`);r.id=t,r.textContent=n,e.head.appendChild(r)}function i(e,t){let n=document.createElement(`div`);return n.className=e,t!==void 0&&(n.textContent=t),n}function a(e,t,n){let r=document.createElement(`button`);return r.type=`button`,r.className=e,r.textContent=t,r.addEventListener(`click`,n),r}function o(e){return e?e.length<=8?`••••`:`${e.slice(0,4)}…${e.slice(-4)}`:``}function s(e){let t;return t=e.loggedOut?e.userName?`Logged out — was ${e.userName}`:`Logged out`:e.userName?e.userName:e.accessToken?`Logged in`:o(e.apiKey),e.baseUrl?`${t} • ${e.baseUrl}`:t}async function c(t,n,r){let{ps:i,log:a,setStatus:o,renderList:s}=r,c=i.getProviderConfig(t),l=i.getAccounts().some(e=>e.providerId===t);if(c.requiresBaseUrl){if(!n.trim()&&!i.getBaseUrlForProvider(t)){o(`Base URL is required.`,!0);return}n.trim()&&i.addAccount(t,``,n.trim())}o(`Opening login window…`);let u=()=>{o(``),s()};try{if(c.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:t}=await e(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-CTlktxVj.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([0,1,2,3])),n=await t();if(!n)throw Error(`No controlled-browser CDP transport available — open SLICC in standalone mode or the Chrome extension.`);await c.onOAuthLoginIntercepted(n,u)}else if(c.onOAuthLogin){let{createOAuthLauncher:t}=await e(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-CTlktxVj.js`);return{createOAuthLauncher:e}},__vite__mapDeps([0,1,2,3]));await c.onOAuthLogin(t(),u)}else throw Error(`${c.name} does not support interactive login.`)}catch(e){l||await i.removeAccount(t).catch(()=>void 0),a.error(`WC settings OAuth login failed`,{providerId:t,err:e}),o(`Login failed: ${e instanceof Error?e.message:String(e)}`,!0)}}function l(e,t,n){let{ps:r,log:o,setStatus:l,renderList:u}=n,d=i(`wcset__row`),f=i(`wcset__info`);if(f.append(i(`wcset__name`,t.name),i(`wcset__detail`,s(e))),d.append(f),t.isOAuth){let t=e.loggedOut===!0;d.append(a(`wcset__btn`,t?`Log in`:`Log out`,()=>{t?c(e.providerId,``,n):r.logoutOAuthAccount(e.providerId).then(u).catch(t=>{o.error(`WC settings logout failed`,{providerId:e.providerId,err:t}),l(`Logout failed.`,!0)})}))}return d.append(a(`wcset__btn wcset__btn--danger`,`Remove`,()=>{r.removeAccount(e.providerId).then(u).catch(t=>{o.error(`WC settings remove failed`,{providerId:e.providerId,err:t}),l(`Remove failed.`,!0)})})),d}function u(e){let{ps:t,setStatus:n}=e,r=i(`wcset__add`);r.append(i(`wcset__label`,`Add account`));let o=document.createElement(`select`);o.className=`wcset__select`;let s=document.createElement(`option`);s.value=``,s.textContent=`Choose a provider…`,o.append(s);let l=new Set(t.getAccounts().map(e=>e.providerId)),u=t.getAvailableProviders().filter(e=>!l.has(e)&&t.providerOffersLlmModels(e)).sort((e,n)=>t.getProviderConfig(e).name.localeCompare(t.getProviderConfig(n).name));for(let e of u){let n=document.createElement(`option`);n.value=e,n.textContent=t.getProviderConfig(e).name,o.append(n)}r.append(o);let d=i(`wcset__controls`);return d.style.cssText=`display:flex;flex-direction:column;gap:8px;`,r.append(d),o.addEventListener(`change`,()=>{d.replaceChildren(),n(``);let r=o.value;if(!r)return;let i=t.getProviderConfig(r),s=document.createElement(`input`);if(s.className=`wcset__input`,s.placeholder=`Base URL`,s.value=t.getBaseUrlForProvider(r)??``,i.requiresBaseUrl&&d.append(s),i.isOAuth){d.append(a(`wcset__btn wcset__btn--primary`,`Login with ${i.name}`,()=>{c(r,s.value,e)}));return}let l=document.createElement(`input`);l.className=`wcset__input`,l.type=`password`,l.placeholder=`API key`,l.setAttribute(`data-testid`,`wcset-api-key`),d.append(l),d.append(a(`wcset__btn wcset__btn--primary`,`Save`,()=>{let a=l.value.trim();if(!a){n(`An API key is required.`,!0),l.focus();return}if(i.requiresBaseUrl&&!s.value.trim()){n(`Base URL is required.`,!0),s.focus();return}t.addAccount(r,a,s.value.trim()||void 0),l.value=``,n(`${i.name} connected.`),e.renderList()}))}),r}async function d(t){let n=await e(()=>import(`./main-BdTYQoCT.js`).then(e=>e.r),__vite__mapDeps([4,3,5,1,6,7,8,9,10,11,12,13,2,14,15,16,17]));r(document);let o=JSON.stringify(n.getAccounts());return new Promise(e=>{let r=document.createElement(`slicc-dialog`);r.classList.add(`wcset-dialog`),r.setAttribute(`heading`,`Accounts`);let s=i(`wcset`),c=i(`wcset__list`),d=i(`wcset__status`),f=(e,t=!1)=>{d.textContent=e,d.toggleAttribute(`data-error`,t)},p=o,m=()=>{let e=JSON.stringify(n.getAccounts());e!==p&&(p=e,window.dispatchEvent(new CustomEvent(`slicc:accounts-changed`)))},h={ps:n,log:t,setStatus:f,renderList:()=>{m(),c.replaceChildren();let e=n.getAccounts();if(e.length===0){c.append(i(`wcset__empty`,`No accounts configured.`));return}for(let t of e)c.append(l(t,n.getProviderConfig(t.providerId),h))}};h.renderList(),s.append(c,u(h),d),r.append(s);let g=a(`wcset__btn wcset__btn--primary`,`Done`,()=>{r.hide?.()});g.setAttribute(`slot`,`footer`),r.append(g),r.addEventListener(`slicc-dialog-close`,()=>{r.remove(),e(JSON.stringify(n.getAccounts())!==o)}),document.body.append(r),r.show?.()})}export{d as showWcSettings};
24
+ `;function r(e){if(e.getElementById(t))return;let r=e.createElement(`style`);r.id=t,r.textContent=n,e.head.appendChild(r)}function i(e,t){let n=document.createElement(`div`);return n.className=e,t!==void 0&&(n.textContent=t),n}function a(e,t,n){let r=document.createElement(`button`);return r.type=`button`,r.className=e,r.textContent=t,r.addEventListener(`click`,n),r}function o(e){return e?e.length<=8?`••••`:`${e.slice(0,4)}…${e.slice(-4)}`:``}function s(e){let t;return t=e.loggedOut?e.userName?`Logged out — was ${e.userName}`:`Logged out`:e.userName?e.userName:e.accessToken?`Logged in`:o(e.apiKey),e.baseUrl?`${t} • ${e.baseUrl}`:t}async function c(t,n,r){let{ps:i,log:a,setStatus:o,renderList:s}=r,c=i.getProviderConfig(t),l=i.getAccounts().some(e=>e.providerId===t);if(c.requiresBaseUrl){if(!n.trim()&&!i.getBaseUrlForProvider(t)){o(`Base URL is required.`,!0);return}n.trim()&&i.addAccount(t,``,n.trim())}o(`Opening login window…`);let u=()=>{o(``),s()};try{if(c.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:t}=await e(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-CTlktxVj.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([0,1,2,3])),n=await t();if(!n)throw Error(`No controlled-browser CDP transport available — open SLICC in standalone mode or the Chrome extension.`);await c.onOAuthLoginIntercepted(n,u)}else if(c.onOAuthLogin){let{createOAuthLauncher:t}=await e(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-CTlktxVj.js`);return{createOAuthLauncher:e}},__vite__mapDeps([0,1,2,3]));await c.onOAuthLogin(t(),u)}else throw Error(`${c.name} does not support interactive login.`)}catch(e){l||await i.removeAccount(t).catch(()=>void 0),a.error(`WC settings OAuth login failed`,{providerId:t,err:e}),o(`Login failed: ${e instanceof Error?e.message:String(e)}`,!0)}}function l(e,t,n){let{ps:r,log:o,setStatus:l,renderList:u}=n,d=i(`wcset__row`),f=i(`wcset__info`);if(f.append(i(`wcset__name`,t.name),i(`wcset__detail`,s(e))),d.append(f),t.isOAuth){let t=e.loggedOut===!0;d.append(a(`wcset__btn`,t?`Log in`:`Log out`,()=>{t?c(e.providerId,``,n):r.logoutOAuthAccount(e.providerId).then(u).catch(t=>{o.error(`WC settings logout failed`,{providerId:e.providerId,err:t}),l(`Logout failed.`,!0)})}))}return d.append(a(`wcset__btn wcset__btn--danger`,`Remove`,()=>{r.removeAccount(e.providerId).then(u).catch(t=>{o.error(`WC settings remove failed`,{providerId:e.providerId,err:t}),l(`Remove failed.`,!0)})})),d}function u(e){let{ps:t,setStatus:n}=e,r=i(`wcset__add`);r.append(i(`wcset__label`,`Add account`));let o=document.createElement(`select`);o.className=`wcset__select`;let s=document.createElement(`option`);s.value=``,s.textContent=`Choose a provider…`,o.append(s);let l=new Set(t.getAccounts().map(e=>e.providerId)),u=t.getAvailableProviders().filter(e=>!l.has(e)&&t.providerOffersLlmModels(e)).sort((e,n)=>t.getProviderConfig(e).name.localeCompare(t.getProviderConfig(n).name));for(let e of u){let n=document.createElement(`option`);n.value=e,n.textContent=t.getProviderConfig(e).name,o.append(n)}r.append(o);let d=i(`wcset__controls`);return d.style.cssText=`display:flex;flex-direction:column;gap:8px;`,r.append(d),o.addEventListener(`change`,()=>{d.replaceChildren(),n(``);let r=o.value;if(!r)return;let i=t.getProviderConfig(r),s=document.createElement(`input`);if(s.className=`wcset__input`,s.placeholder=`Base URL`,s.value=t.getBaseUrlForProvider(r)??``,i.requiresBaseUrl&&d.append(s),i.isOAuth){d.append(a(`wcset__btn wcset__btn--primary`,`Login with ${i.name}`,()=>{c(r,s.value,e)}));return}let l=document.createElement(`input`);l.className=`wcset__input`,l.type=`password`,l.placeholder=`API key`,l.setAttribute(`data-testid`,`wcset-api-key`),d.append(l),d.append(a(`wcset__btn wcset__btn--primary`,`Save`,()=>{let a=l.value.trim();if(!a){n(`An API key is required.`,!0),l.focus();return}if(i.requiresBaseUrl&&!s.value.trim()){n(`Base URL is required.`,!0),s.focus();return}t.addAccount(r,a,s.value.trim()||void 0),l.value=``,n(`${i.name} connected.`),e.renderList()}))}),r}async function d(t){let n=await e(()=>import(`./main-T5PiQ8ba.js`).then(e=>e.r),__vite__mapDeps([4,3,5,1,6,7,8,9,10,11,12,13,2,14,15,16,17]));r(document);let o=JSON.stringify(n.getAccounts());return new Promise(e=>{let r=document.createElement(`slicc-dialog`);r.classList.add(`wcset-dialog`),r.setAttribute(`heading`,`Accounts`);let s=i(`wcset`),c=i(`wcset__list`),d=i(`wcset__status`),f=(e,t=!1)=>{d.textContent=e,d.toggleAttribute(`data-error`,t)},p=o,m=()=>{let e=JSON.stringify(n.getAccounts());e!==p&&(p=e,window.dispatchEvent(new CustomEvent(`slicc:accounts-changed`)))},h={ps:n,log:t,setStatus:f,renderList:()=>{m(),c.replaceChildren();let e=n.getAccounts();if(e.length===0){c.append(i(`wcset__empty`,`No accounts configured.`));return}for(let t of e)c.append(l(t,n.getProviderConfig(t.providerId),h))}};h.renderList(),s.append(c,u(h),d),r.append(s);let g=a(`wcset__btn wcset__btn--primary`,`Done`,()=>{r.hide?.()});g.setAttribute(`slot`,`footer`),r.append(g),r.addEventListener(`slicc-dialog-close`,()=>{r.remove(),e(JSON.stringify(n.getAccounts())!==o)}),document.body.append(r),r.show?.()})}export{d as showWcSettings};