vite-plugin-opencode-assistant 1.0.34 → 1.0.36

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.
@@ -127,6 +127,9 @@ function generateBridgeScript(options) {
127
127
  .opencode-prompt-dock-hidden [data-component="session-prompt-dock"]:not(:has([data-kind="permission"])) {
128
128
  display: none !important;
129
129
  }
130
+ button[data-slot="dropdown-menu-trigger"][icon="dot-grid"] {
131
+ display: none !important;
132
+ }
130
133
  \`;
131
134
 
132
135
  function injectMinimizeStyles() {
package/lib/client.js CHANGED
@@ -5743,16 +5743,7 @@ const Qu = [
5743
5743
  ".opencode-select-mode-hint",
5744
5744
  ".floating-bubble"
5745
5745
  ], ef = "data-v-inspector-ignore", tf = "__v_inspector", nf = "data-v-inspector";
5746
- function sf(e, t) {
5747
- let n = 0, s = null;
5748
- return (...o) => {
5749
- const i = performance.now();
5750
- i - n >= t ? (n = i, e(...o)) : s || (s = requestAnimationFrame(() => {
5751
- s = null, n = performance.now(), e(...o);
5752
- }));
5753
- };
5754
- }
5755
- function of(e) {
5746
+ function sf(e) {
5756
5747
  let t = "";
5757
5748
  for (let n = 0; n < e.childNodes.length; n++) {
5758
5749
  const s = e.childNodes[n];
@@ -5760,10 +5751,10 @@ function of(e) {
5760
5751
  }
5761
5752
  return t.trim();
5762
5753
  }
5763
- const rf = /^(?:el-|:r[0-9]+:|radix-|uid-|ts-|uuid-|id-[a-f0-9]{4,}|.*[0-9]{4,}.*|.*-[a-f0-9]{6,}$)/i, lf = /^(?:hover|active|focus|focus-visible|focus-within|disabled|enabled|checked|selected|open|closed|loading|error|success|warning|hidden|visible|show|hide|current|expanded|collapsed|pressed|dragging|droppable|sortable|placeholder|transition|enter|leave|appear|move)$/i, af = /^(?:is-|has-|was-|are-|can-|should-|will-|did-|does-|on-|off-|in-|out-|at-|to-|from-)/i;
5764
- function cf(e) {
5754
+ const of = /^(?:el-|:r[0-9]+:|radix-|uid-|ts-|uuid-|id-[a-f0-9]{4,}|.*[0-9]{4,}.*|.*-[a-f0-9]{6,}$)/i, rf = /^(?:hover|active|focus|focus-visible|focus-within|disabled|enabled|checked|selected|open|closed|loading|error|success|warning|hidden|visible|show|hide|current|expanded|collapsed|pressed|dragging|droppable|sortable|placeholder|transition|enter|leave|appear|move)$/i, lf = /^(?:is-|has-|was-|are-|can-|should-|will-|did-|does-|on-|off-|in-|out-|at-|to-|from-)/i;
5755
+ function af(e) {
5765
5756
  if (!e) return !1;
5766
- if (rf.test(e))
5757
+ if (of.test(e))
5767
5758
  return !0;
5768
5759
  const t = (e.match(/\d/g) || []).length, n = (e.match(/[a-zA-Z]/g) || []).length;
5769
5760
  if (t > n && t >= 3)
@@ -5776,8 +5767,8 @@ function cf(e) {
5776
5767
  }
5777
5768
  return !1;
5778
5769
  }
5779
- function uf(e) {
5780
- return e ? !!(lf.test(e) || af.test(e) || e.includes("-active") || e.includes("-hover") || e.includes("-focus") || /^(?:router-link|nuxt-link)/.test(e)) : !1;
5770
+ function cf(e) {
5771
+ return e ? !!(rf.test(e) || lf.test(e) || e.includes("-active") || e.includes("-hover") || e.includes("-focus") || /^(?:router-link|nuxt-link)/.test(e)) : !1;
5781
5772
  }
5782
5773
  function Mo(e) {
5783
5774
  return fr(e, {
@@ -5790,14 +5781,14 @@ function Mo(e) {
5790
5781
  (t) => {
5791
5782
  const n = t.match(/^#(.+)$/);
5792
5783
  if (n)
5793
- return cf(n[1]);
5784
+ return af(n[1]);
5794
5785
  const s = t.match(/^\.([a-zA-Z_-][\w-]*)$/);
5795
- return s ? uf(s[1]) : !1;
5786
+ return s ? cf(s[1]) : !1;
5796
5787
  }
5797
5788
  ]
5798
5789
  });
5799
5790
  }
5800
- function ff(e) {
5791
+ function uf(e) {
5801
5792
  var t, n, s, o;
5802
5793
  const i = e.__vueParentComponent;
5803
5794
  if (i) {
@@ -5821,23 +5812,23 @@ function ff(e) {
5821
5812
  }
5822
5813
  return null;
5823
5814
  }
5824
- function df(e) {
5815
+ function ff(e) {
5825
5816
  if (e.hasAttribute(ef)) return !0;
5826
5817
  for (const t of Qu)
5827
5818
  if (e.closest(t)) return !0;
5828
5819
  return !1;
5829
5820
  }
5830
- function hf(e) {
5821
+ function df(e) {
5831
5822
  var t, n;
5832
5823
  const s = (n = (t = e.__vnode) == null ? void 0 : t.props) == null ? void 0 : n[tf];
5833
5824
  if (s) return s;
5834
5825
  const o = e.getAttribute(nf);
5835
5826
  return o ?? void 0;
5836
5827
  }
5837
- function pf(e) {
5828
+ function hf(e) {
5838
5829
  let t = e;
5839
5830
  for (; t; ) {
5840
- const n = hf(t);
5831
+ const n = df(t);
5841
5832
  if (n) {
5842
5833
  const s = /(.+):([\d]+):([\d]+)$/, o = n.match(s);
5843
5834
  if (o)
@@ -5851,7 +5842,7 @@ function pf(e) {
5851
5842
  }
5852
5843
  return null;
5853
5844
  }
5854
- function gf(e, t) {
5845
+ function pf(e, t) {
5855
5846
  if (!e?.file && !t?.file)
5856
5847
  return { file: null, line: null, column: null };
5857
5848
  const n = (s) => s.includes("node_modules");
@@ -5860,7 +5851,7 @@ function gf(e, t) {
5860
5851
  function Io(e) {
5861
5852
  if (!e.target || !(e.target instanceof Element)) return null;
5862
5853
  const t = e.target;
5863
- return df(t) ? null : t;
5854
+ return ff(t) ? null : t;
5864
5855
  }
5865
5856
  function Do(e, t) {
5866
5857
  var n, s;
@@ -5874,11 +5865,11 @@ function Do(e, t) {
5874
5865
  column: (s = a.column) != null ? s : null
5875
5866
  });
5876
5867
  }
5877
- t && !i && (i = pf(t));
5878
- const r = t ? ff(t) : null;
5879
- return gf(i, r);
5868
+ t && !i && (i = hf(t));
5869
+ const r = t ? uf(t) : null;
5870
+ return pf(i, r);
5880
5871
  }
5881
- function mf(e) {
5872
+ function gf(e) {
5882
5873
  const t = /* @__PURE__ */ R(!1), n = /* @__PURE__ */ R({
5883
5874
  top: "0px",
5884
5875
  left: "0px",
@@ -5935,7 +5926,7 @@ function mf(e) {
5935
5926
  } else
5936
5927
  t.value = !1, s.value = !1;
5937
5928
  }
5938
- const _ = sf(p, 16);
5929
+ const _ = p;
5939
5930
  function C() {
5940
5931
  const x = window.__VUE_INSPECTOR__;
5941
5932
  if (!x || x.__opencode_hooked) return;
@@ -5945,7 +5936,7 @@ function mf(e) {
5945
5936
  M.preventDefault(), M.stopPropagation();
5946
5937
  const L = Io(M), w = Do(M, L);
5947
5938
  if (L) {
5948
- const $ = of(L), N = Mo(L), F = {
5939
+ const $ = sf(L), N = Mo(L), F = {
5949
5940
  filePath: w.file,
5950
5941
  line: w.line,
5951
5942
  column: w.column,
@@ -5980,7 +5971,7 @@ function mf(e) {
5980
5971
  };
5981
5972
  }
5982
5973
  const dr = "opencode-widget-state";
5983
- function vf() {
5974
+ function mf() {
5984
5975
  if (typeof window > "u") return null;
5985
5976
  try {
5986
5977
  const e = localStorage.getItem(dr);
@@ -5991,7 +5982,7 @@ function vf() {
5991
5982
  }
5992
5983
  return null;
5993
5984
  }
5994
- function _f(e) {
5985
+ function vf(e) {
5995
5986
  if (!(typeof window > "u"))
5996
5987
  try {
5997
5988
  localStorage.setItem(dr, JSON.stringify(e));
@@ -5999,9 +5990,9 @@ function _f(e) {
5999
5990
  console.warn("[OpenCodeWidget] Failed to save state:", t);
6000
5991
  }
6001
5992
  }
6002
- function yf(e) {
5993
+ function _f(e) {
6003
5994
  const t = () => {
6004
- const o = vf();
5995
+ const o = mf();
6005
5996
  return e.onRestore && e.onRestore(o || {}), o;
6006
5997
  }, n = () => ({
6007
5998
  open: e.open.value,
@@ -6011,7 +6002,7 @@ function yf(e) {
6011
6002
  theme: e.theme.value,
6012
6003
  sessionListCollapsed: e.sessionListCollapsed.value
6013
6004
  }), s = () => {
6014
- _f(n());
6005
+ vf(n());
6015
6006
  };
6016
6007
  return Qe(() => {
6017
6008
  t(), ct(
@@ -6026,15 +6017,15 @@ function yf(e) {
6026
6017
  persistState: s
6027
6018
  };
6028
6019
  }
6029
- var bf = Object.defineProperty, Sf = Object.defineProperties, wf = Object.getOwnPropertyDescriptors, ko = Object.getOwnPropertySymbols, Ef = Object.prototype.hasOwnProperty, Tf = Object.prototype.propertyIsEnumerable, Po = (e, t, n) => t in e ? bf(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n, Cf = (e, t) => {
6020
+ var yf = Object.defineProperty, bf = Object.defineProperties, Sf = Object.getOwnPropertyDescriptors, ko = Object.getOwnPropertySymbols, wf = Object.prototype.hasOwnProperty, Ef = Object.prototype.propertyIsEnumerable, Po = (e, t, n) => t in e ? yf(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n, Tf = (e, t) => {
6030
6021
  for (var n in t || (t = {}))
6031
- Ef.call(t, n) && Po(e, n, t[n]);
6022
+ wf.call(t, n) && Po(e, n, t[n]);
6032
6023
  if (ko)
6033
6024
  for (var n of ko(t))
6034
- Tf.call(t, n) && Po(e, n, t[n]);
6025
+ Ef.call(t, n) && Po(e, n, t[n]);
6035
6026
  return e;
6036
- }, xf = (e, t) => Sf(e, wf(t));
6037
- const hr = /* @__PURE__ */ Ze(xf(Cf({}, {
6027
+ }, Cf = (e, t) => bf(e, Sf(t));
6028
+ const hr = /* @__PURE__ */ Ze(Cf(Tf({}, {
6038
6029
  name: "OpencodeWidget"
6039
6030
  }), {
6040
6031
  __name: "index",
@@ -6169,7 +6160,7 @@ const hr = /* @__PURE__ */ Ze(xf(Cf({}, {
6169
6160
  o("clear-selected-nodes"), o("update:selectedElements", []);
6170
6161
  },
6171
6162
  showConfirmDialog: C
6172
- }), { highlightVisible: u, highlightStyle: d, tooltipVisible: m, tooltipStyle: T, tooltipContent: E } = mf({
6163
+ }), { highlightVisible: u, highlightStyle: d, tooltipVisible: m, tooltipStyle: T, tooltipContent: E } = gf({
6173
6164
  selectMode: /* @__PURE__ */ Q(s, "selectMode"),
6174
6165
  onAddSelectedNode: (A) => {
6175
6166
  o("click-selected-node", A);
@@ -6178,7 +6169,7 @@ const hr = /* @__PURE__ */ Ze(xf(Cf({}, {
6178
6169
  o("update:selectMode", !1), o("toggle-select-mode", !1);
6179
6170
  }
6180
6171
  }), S = /* @__PURE__ */ R(void 0);
6181
- yf({
6172
+ _f({
6182
6173
  open: /* @__PURE__ */ Q(s, "open"),
6183
6174
  minimized: $,
6184
6175
  promptDockVisible: N,
@@ -6323,23 +6314,23 @@ const hr = /* @__PURE__ */ Ze(xf(Cf({}, {
6323
6314
  }, handleDragStart: me, handleDragEnd: Ve, Frame: Va, Header: oc, SelectHint: lc, SelectedNodes: gc, SessionList: Ac, Trigger: Bc };
6324
6315
  return Object.defineProperty(Pe, "__isScriptSetup", { enumerable: !1, value: !0 }), Pe;
6325
6316
  }
6326
- })), Af = {
6317
+ })), xf = {
6327
6318
  key: 0,
6328
6319
  class: "opencode-notification",
6329
6320
  role: "alert"
6330
- }, Of = { class: "opencode-chat-content" }, Mf = { class: "opencode-tooltip-tag" }, If = { class: "opencode-tooltip-file" }, Df = {
6321
+ }, Af = { class: "opencode-chat-content" }, Of = { class: "opencode-tooltip-tag" }, Mf = { class: "opencode-tooltip-file" }, If = {
6331
6322
  key: 0,
6332
6323
  class: "opencode-dialog-overlay"
6333
- }, kf = {
6324
+ }, Df = {
6334
6325
  class: "opencode-dialog",
6335
6326
  role: "alertdialog",
6336
6327
  "aria-modal": "true"
6337
- }, Pf = { class: "opencode-dialog-content" }, Nf = { class: "opencode-dialog-message" }, Rf = {
6328
+ }, kf = { class: "opencode-dialog-content" }, Pf = { class: "opencode-dialog-message" }, Nf = {
6338
6329
  key: 0,
6339
6330
  class: "opencode-page-notification",
6340
6331
  role: "alert"
6341
6332
  };
6342
- function Lf(e, t, n, s, o, i) {
6333
+ function Rf(e, t, n, s, o, i) {
6343
6334
  return W(), z(
6344
6335
  "div",
6345
6336
  {
@@ -6409,12 +6400,12 @@ function Lf(e, t, n, s, o, i) {
6409
6400
  ),
6410
6401
  s.notificationVisible && s.notificationMode === "widget" ? (W(), z(
6411
6402
  "div",
6412
- Af,
6403
+ xf,
6413
6404
  we(s.notificationMessage),
6414
6405
  1
6415
6406
  /* TEXT */
6416
6407
  )) : Ke("v-if", !0),
6417
- y("div", Of, [
6408
+ y("div", Af, [
6418
6409
  Se(s.SessionList, null, {
6419
6410
  empty: Ne(() => [
6420
6411
  de(e.$slots, "sessions-empty", {}, () => [
@@ -6499,14 +6490,14 @@ function Lf(e, t, n, s, o, i) {
6499
6490
  [
6500
6491
  y(
6501
6492
  "div",
6502
- Mf,
6493
+ Of,
6503
6494
  we(s.tooltipContent.description),
6504
6495
  1
6505
6496
  /* TEXT */
6506
6497
  ),
6507
6498
  y(
6508
6499
  "div",
6509
- If,
6500
+ Mf,
6510
6501
  we(s.tooltipContent.fileInfo),
6511
6502
  1
6512
6503
  /* TEXT */
@@ -6517,12 +6508,12 @@ function Lf(e, t, n, s, o, i) {
6517
6508
  ), [
6518
6509
  [rs, s.tooltipVisible]
6519
6510
  ]),
6520
- s.dialogVisible ? (W(), z("div", Df, [
6521
- y("div", kf, [
6522
- y("div", Pf, [
6511
+ s.dialogVisible ? (W(), z("div", If, [
6512
+ y("div", Df, [
6513
+ y("div", kf, [
6523
6514
  y(
6524
6515
  "div",
6525
- Nf,
6516
+ Pf,
6526
6517
  we(s.dialogMessage),
6527
6518
  1
6528
6519
  /* TEXT */
@@ -6543,7 +6534,7 @@ function Lf(e, t, n, s, o, i) {
6543
6534
  (W(), At(_i, { to: "body" }, [
6544
6535
  s.notificationVisible && s.notificationMode === "page" ? (W(), z(
6545
6536
  "div",
6546
- Rf,
6537
+ Nf,
6547
6538
  we(s.notificationMessage),
6548
6539
  1
6549
6540
  /* TEXT */
@@ -6554,9 +6545,9 @@ function Lf(e, t, n, s, o, i) {
6554
6545
  /* CLASS */
6555
6546
  );
6556
6547
  }
6557
- hr.render = Lf;
6558
- var Ff = hr, $f = Ff;
6559
- function Bf(e) {
6548
+ hr.render = Rf;
6549
+ var Lf = hr, Ff = Lf;
6550
+ function $f(e) {
6560
6551
  if (!e) return { ctrl: !0, shift: !1, alt: !1, key: "k" };
6561
6552
  const t = e.toLowerCase().split("+"), n = t.pop();
6562
6553
  return {
@@ -6566,13 +6557,13 @@ function Bf(e) {
6566
6557
  key: n || "k"
6567
6558
  };
6568
6559
  }
6569
- function jf(e, t) {
6560
+ function Bf(e, t) {
6570
6561
  const n = t.ctrl ? e.ctrlKey || e.metaKey : !(e.ctrlKey || e.metaKey), s = t.shift ? e.shiftKey : !e.shiftKey, o = t.alt ? e.altKey : !e.altKey, i = e.key.toLowerCase() === t.key.toLowerCase();
6571
6562
  return n && s && o && i;
6572
6563
  }
6573
6564
  function No(e, t) {
6574
- const n = Bf(e), s = (o) => {
6575
- jf(o, n) && t(o);
6565
+ const n = $f(e), s = (o) => {
6566
+ Bf(o, n) && t(o);
6576
6567
  };
6577
6568
  return Qe(() => {
6578
6569
  document.addEventListener("keydown", s);
@@ -6582,14 +6573,14 @@ function No(e, t) {
6582
6573
  hotkeyConfig: n
6583
6574
  };
6584
6575
  }
6585
- const Hf = 10, Vf = 1e3;
6576
+ const jf = 10, Hf = 1e3;
6586
6577
  function pr(e) {
6587
6578
  const {
6588
6579
  endpoint: t,
6589
6580
  autoConnect: n = !0,
6590
6581
  enabled: s,
6591
- maxRetries: o = Hf,
6592
- retryDelay: i = Vf,
6582
+ maxRetries: o = jf,
6583
+ retryDelay: i = Hf,
6593
6584
  onConnected: r,
6594
6585
  onDisconnected: l,
6595
6586
  onError: a,
@@ -6663,7 +6654,7 @@ function pr(e) {
6663
6654
  resetRetryCount: k
6664
6655
  };
6665
6656
  }
6666
- function Wf(e = {}) {
6657
+ function Vf(e = {}) {
6667
6658
  const { onStatusSync: t, onTaskUpdate: n, onClearElements: s, onConnected: o } = e, { status: i, isConnected: r, connect: l, disconnect: a } = pr({
6668
6659
  endpoint: "/__opencode_events__",
6669
6660
  autoConnect: !1,
@@ -6694,7 +6685,7 @@ function Wf(e = {}) {
6694
6685
  disconnect: a
6695
6686
  };
6696
6687
  }
6697
- function Kf(e) {
6688
+ function Wf(e) {
6698
6689
  const { proxyBaseUrl: t, enabled: n, onEvent: s, onConnected: o, onError: i } = e, r = `${t}/global/event`, { status: l, isConnected: a, connect: f, disconnect: c } = pr({
6699
6690
  endpoint: r,
6700
6691
  autoConnect: !1,
@@ -6715,7 +6706,7 @@ function Kf(e) {
6715
6706
  disconnect: c
6716
6707
  };
6717
6708
  }
6718
- function Uf(e) {
6709
+ function Kf(e) {
6719
6710
  const { proxyBaseUrl: t, currentSessionId: n, enabled: s, onConnected: o, onSessionUpdate: i } = e, r = /* @__PURE__ */ R({});
6720
6711
  function l(w) {
6721
6712
  return w?.role === "assistant" && typeof w?.time?.completed != "number";
@@ -6783,7 +6774,7 @@ function Uf(e) {
6783
6774
  }
6784
6775
  }
6785
6776
  }
6786
- const c = Kf({
6777
+ const c = Wf({
6787
6778
  proxyBaseUrl: t,
6788
6779
  enabled: s,
6789
6780
  onEvent: f,
@@ -6833,7 +6824,7 @@ function Uf(e) {
6833
6824
  getSessionsThinking: L
6834
6825
  };
6835
6826
  }
6836
- function qf(e) {
6827
+ function Uf(e) {
6837
6828
  const { showNotification: t } = e, n = /* @__PURE__ */ R([]), s = /* @__PURE__ */ R(void 0), o = /* @__PURE__ */ R(null), i = /* @__PURE__ */ R(!1), r = Y(() => o.value && n.value.find((p) => p.id === o.value)?.url || ""), l = async () => {
6838
6829
  s.value = !0;
6839
6830
  try {
@@ -6895,7 +6886,7 @@ function qf(e) {
6895
6886
  updateSessionInfo: a
6896
6887
  };
6897
6888
  }
6898
- function zf(e, t) {
6889
+ function qf(e, t) {
6899
6890
  const n = /* @__PURE__ */ R(e), s = Y(() => n.value === "auto" ? window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light" : n.value), o = () => {
6900
6891
  t.value?.sendMessageToIframe("OPENCODE_SET_THEME", {
6901
6892
  theme: s.value
@@ -6917,7 +6908,7 @@ function zf(e, t) {
6917
6908
  sendThemeToIframe: o
6918
6909
  };
6919
6910
  }
6920
- function Yf() {
6911
+ function zf() {
6921
6912
  const e = /* @__PURE__ */ R([]);
6922
6913
  try {
6923
6914
  const o = sessionStorage.getItem("__opencode_selected_elements__");
@@ -6943,7 +6934,7 @@ function Yf() {
6943
6934
  }
6944
6935
  };
6945
6936
  }
6946
- function Gf() {
6937
+ function Yf() {
6947
6938
  const e = /* @__PURE__ */ R(""), t = /* @__PURE__ */ R("idle"), n = /* @__PURE__ */ R(!1), s = /* @__PURE__ */ R(void 0), o = /* @__PURE__ */ R(void 0), i = Y(() => e.value && ka[e.value] || "加载中...");
6948
6939
  return {
6949
6940
  currentTask: e,
@@ -6960,7 +6951,7 @@ function Gf() {
6960
6951
  }
6961
6952
  };
6962
6953
  }
6963
- function Xf(e, t) {
6954
+ function Gf(e, t) {
6964
6955
  let n = "", s = "";
6965
6956
  const o = (f = !1) => {
6966
6957
  if (e.value === "idle") return;
@@ -6994,18 +6985,18 @@ function Xf(e, t) {
6994
6985
  updateContext: o
6995
6986
  };
6996
6987
  }
6997
- const Jf = { class: "opencode-custom-loading" }, Zf = { class: "opencode-loading-text" }, Qf = /* @__PURE__ */ Ze({
6988
+ const Xf = { class: "opencode-custom-loading" }, Jf = { class: "opencode-loading-text" }, Zf = /* @__PURE__ */ Ze({
6998
6989
  __name: "LoadingContent",
6999
6990
  props: {
7000
6991
  loadingText: {}
7001
6992
  },
7002
6993
  setup(e) {
7003
- return (t, n) => (W(), z("div", Jf, [
6994
+ return (t, n) => (W(), z("div", Xf, [
7004
6995
  n[0] || (n[0] = y("div", { class: "opencode-loading-spinner" }, null, -1)),
7005
- y("div", Zf, we(e.loadingText), 1)
6996
+ y("div", Jf, we(e.loadingText), 1)
7006
6997
  ]));
7007
6998
  }
7008
- }), ed = { class: "opencode-chrome-warmup-failed" }, td = { class: "opencode-chrome-warmup-failed-text" }, nd = { class: "opencode-chrome-warmup-error-details" }, sd = { class: "opencode-chrome-warmup-failed-text" }, od = { key: 0 }, id = { key: 1 }, rd = { class: "opencode-chrome-warmup-failed-actions" }, ld = ["disabled"], ad = /* @__PURE__ */ Ze({
6999
+ }), Qf = { class: "opencode-chrome-warmup-failed" }, ed = { class: "opencode-chrome-warmup-failed-text" }, td = { class: "opencode-chrome-warmup-error-details" }, nd = { class: "opencode-chrome-warmup-failed-text" }, sd = { key: 0 }, od = { key: 1 }, id = { class: "opencode-chrome-warmup-failed-actions" }, rd = ["disabled"], ld = /* @__PURE__ */ Ze({
7009
7000
  __name: "ChromeWarmupError",
7010
7001
  props: {
7011
7002
  retrying: { type: Boolean },
@@ -7015,7 +7006,7 @@ const Jf = { class: "opencode-custom-loading" }, Zf = { class: "opencode-loading
7015
7006
  emits: ["retry"],
7016
7007
  setup(e, { emit: t }) {
7017
7008
  const n = t;
7018
- return (s, o) => (W(), z("div", ed, [
7009
+ return (s, o) => (W(), z("div", Qf, [
7019
7010
  o[9] || (o[9] = y("div", { class: "opencode-chrome-warmup-failed-icon" }, [
7020
7011
  y("svg", {
7021
7012
  xmlns: "http://www.w3.org/2000/svg",
@@ -7060,32 +7051,32 @@ const Jf = { class: "opencode-custom-loading" }, Zf = { class: "opencode-loading
7060
7051
  ], -1))
7061
7052
  ], 64)) : e.errorType === fe(On).AI_RESPONSE_ERROR ? (W(), z(ce, { key: 2 }, [
7062
7053
  o[7] || (o[7] = y("div", { class: "opencode-chrome-warmup-failed-title" }, "AI 响应错误", -1)),
7063
- y("div", td, [
7054
+ y("div", ed, [
7064
7055
  o[5] || (o[5] = y("p", null, "AI 模型返回了意外的响应:", -1)),
7065
- y("div", nd, we(e.errorMessage || "未知错误"), 1),
7056
+ y("div", td, we(e.errorMessage || "未知错误"), 1),
7066
7057
  o[6] || (o[6] = y("p", { style: { "margin-top": "12px" } }, "请检查 OpenCode AI 模型配置是否正确", -1))
7067
7058
  ])
7068
7059
  ], 64)) : (W(), z(ce, { key: 3 }, [
7069
7060
  o[8] || (o[8] = y("div", { class: "opencode-chrome-warmup-failed-title" }, "Chrome DevTools MCP 连接失败", -1)),
7070
- y("div", sd, [
7071
- e.errorMessage ? (W(), z("p", od, we(e.errorMessage), 1)) : (W(), z("p", id, "连接失败,请重试"))
7061
+ y("div", nd, [
7062
+ e.errorMessage ? (W(), z("p", sd, we(e.errorMessage), 1)) : (W(), z("p", od, "连接失败,请重试"))
7072
7063
  ])
7073
7064
  ], 64)),
7074
- y("div", rd, [
7065
+ y("div", id, [
7075
7066
  y("button", {
7076
7067
  class: "opencode-chrome-warmup-failed-btn primary",
7077
7068
  disabled: e.retrying,
7078
7069
  onClick: o[0] || (o[0] = (i) => n("retry"))
7079
- }, we(e.retrying ? "连接中..." : "重试连接"), 9, ld)
7070
+ }, we(e.retrying ? "连接中..." : "重试连接"), 9, rd)
7080
7071
  ])
7081
7072
  ]));
7082
7073
  }
7083
- }), cd = (e, t) => {
7074
+ }), ad = (e, t) => {
7084
7075
  const n = e.__vccOpts || e;
7085
7076
  for (const [s, o] of t)
7086
7077
  n[s] = o;
7087
7078
  return n;
7088
- }, ud = /* @__PURE__ */ cd(ad, [["__scopeId", "data-v-6b3ae44a"]]), fd = /* @__PURE__ */ Ze({
7079
+ }, cd = /* @__PURE__ */ ad(ld, [["__scopeId", "data-v-6b3ae44a"]]), ud = /* @__PURE__ */ Ze({
7089
7080
  __name: "App",
7090
7081
  props: {
7091
7082
  config: {}
@@ -7107,7 +7098,7 @@ const Jf = { class: "opencode-custom-loading" }, Zf = { class: "opencode-loading
7107
7098
  loadingText: w,
7108
7099
  updateStatusFromTask: $,
7109
7100
  setStarting: N
7110
- } = Gf(), { selectedElements: F, removeElement: V, clearElements: ue } = Yf(), { theme: he, sendThemeToIframe: _e } = zf(_, r), {
7101
+ } = Yf(), { selectedElements: F, removeElement: V, clearElements: ue } = zf(), { theme: he, sendThemeToIframe: _e } = qf(_, r), {
7111
7102
  sessions: Be,
7112
7103
  loadingSessionList: P,
7113
7104
  currentSessionId: G,
@@ -7118,7 +7109,7 @@ const Jf = { class: "opencode-custom-loading" }, Zf = { class: "opencode-loading
7118
7109
  deleteSession: Ue,
7119
7110
  selectSession: Te,
7120
7111
  updateSessionInfo: ye
7121
- } = qf({ showNotification: b }), { updateContext: ae } = Xf(x, F), je = Wf({
7112
+ } = Uf({ showNotification: b }), { updateContext: ae } = Gf(x, F), je = Vf({
7122
7113
  onStatusSync: (g) => {
7123
7114
  g.isStarted !== void 0 && g.isStarted && x.value === "idle" && N(), g.task && $(g.task, g.errorType, g.errorMessage), x.value !== "idle" && Oe();
7124
7115
  },
@@ -7127,7 +7118,7 @@ const Jf = { class: "opencode-custom-loading" }, Zf = { class: "opencode-loading
7127
7118
  },
7128
7119
  onClearElements: () => ue(),
7129
7120
  onConnected: () => ae(!0)
7130
- }), He = Uf({
7121
+ }), He = Kf({
7131
7122
  proxyBaseUrl: C.value,
7132
7123
  currentSessionId: G,
7133
7124
  onConnected: () => {
@@ -7202,7 +7193,7 @@ const Jf = { class: "opencode-custom-loading" }, Zf = { class: "opencode-loading
7202
7193
  }, O = () => {
7203
7194
  U.value = !1;
7204
7195
  };
7205
- return (g, v) => (W(), At(fe($f), {
7196
+ return (g, v) => (W(), At(fe(Ff), {
7206
7197
  ref_key: "widgetRef",
7207
7198
  ref: r,
7208
7199
  theme: fe(he),
@@ -7235,10 +7226,10 @@ const Jf = { class: "opencode-custom-loading" }, Zf = { class: "opencode-loading
7235
7226
  onFrameLoaded: O
7236
7227
  }, {
7237
7228
  loading: Ne(() => [
7238
- Se(Qf, { "loading-text": Ot.value }, null, 8, ["loading-text"])
7229
+ Se(Zf, { "loading-text": Ot.value }, null, 8, ["loading-text"])
7239
7230
  ]),
7240
7231
  error: Ne(() => [
7241
- fe(k) ? (W(), At(ud, {
7232
+ fe(k) ? (W(), At(cd, {
7242
7233
  key: 0,
7243
7234
  retrying: l.value,
7244
7235
  "error-type": fe(M),
@@ -7269,7 +7260,7 @@ if (!window[ds]) {
7269
7260
  window[ds] = !0;
7270
7261
  const e = document.createElement("div");
7271
7262
  document.body.appendChild(e);
7272
- const t = Ma(fd, { config: gr });
7263
+ const t = Ma(ud, { config: gr });
7273
7264
  t.mount(e), window.__OPENCODE_CLEANUP__ = () => {
7274
7265
  t.unmount(), e.remove(), window[ds] = !1;
7275
7266
  };
@@ -153,6 +153,9 @@ function generateBridgeScript(options) {
153
153
  .opencode-prompt-dock-hidden [data-component="session-prompt-dock"]:not(:has([data-kind="permission"])) {
154
154
  display: none !important;
155
155
  }
156
+ button[data-slot="dropdown-menu-trigger"][icon="dot-grid"] {
157
+ display: none !important;
158
+ }
156
159
  \`;
157
160
 
158
161
  function injectMinimizeStyles() {
package/lib/style.css CHANGED
@@ -1 +1 @@
1
- .opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-thinking-gradient-1: #10b981;--oc-thinking-gradient-2: #059669;--oc-thinking-glow: rgba(16, 185, 129, .3);--oc-thinking-glow-strong: rgba(16, 185, 129, .6);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: #3b82f6;--oc-trigger-bg-hover: #2563eb;--oc-trigger-bg-active: #1d4ed8;--oc-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--oc-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--oc-trigger-shadow-active: 0 4px 12px rgba(59, 130, 246, .5);position:fixed;z-index:999999;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-thinking-gradient-1: #34d399;--oc-thinking-gradient-2: #10b981;--oc-thinking-glow: rgba(52, 211, 153, .3);--oc-thinking-glow-strong: rgba(52, 211, 153, .6);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: #60a5fa;--oc-trigger-bg-hover: #3b82f6;--oc-trigger-bg-active: #2563eb;--oc-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--oc-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--oc-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.opencode-chat{position:fixed;bottom:20px;width:700px;height:86vh;max-height:calc(100vh - 40px);background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translate3d(var(---chatAnimationOrigin\.x),var(---chatAnimationOrigin\.y),0) scale(.95);transition:all .3s ease;display:flex;flex-direction:column;z-index:99999}.opencode-chat.open{opacity:1;visibility:visible;transform:translateZ(0) scale(1)}.opencode-chat.no-transition,.opencode-chat.no-transition.open{transition:none!important}.opencode-chat.minimized{width:300px;height:300px}.opencode-chat.minimized .opencode-iframe-container{margin-top:-146px}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-notification{position:absolute;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px #3b82f666,0 0 0 2px #3b82f633;animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.opencode-notification:before{content:"💡";font-size:16px}.opencode-dialog-overlay{position:fixed;inset:0;background:var(--oc-dialog-overlay);display:flex;align-items:center;justify-content:center;z-index:9999999;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.opencode-dialog{background:var(--oc-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--oc-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.opencode-dialog-content{margin-bottom:20px}.opencode-dialog-message{font-size:15px;color:var(--oc-text-primary);line-height:1.5}.opencode-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.opencode-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-dialog-btn.cancel{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-dialog-btn.cancel:hover{background:var(--oc-text-primary);color:var(--oc-bg-main)}.opencode-dialog-btn.confirm{background:var(--oc-danger);color:#fff}.opencode-dialog-btn.confirm:hover{background:var(--oc-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.opencode-page-notification{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px #3b82f666,0 0 0 2px #3b82f633;animation:slideDown .3s ease;z-index:2147483647;display:flex;align-items:center;gap:10px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-page-notification:before{content:"💡";font-size:16px}.opencode-element-highlight{position:fixed;pointer-events:none;z-index:999998;border-radius:4px}#vue-inspector-container{display:none!important}.opencode-element-tooltip{position:fixed;background:var(--oc-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none}.opencode-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.opencode-tooltip-file{font-size:11px;color:var(--oc-text-placeholder);word-break:break-all}.opencode-element-highlight-temp{position:absolute;pointer-events:none;z-index:999998;border-radius:4px;animation:highlight-pulse 2s ease-out forwards}@keyframes highlight-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.02)}to{opacity:0;transform:scale(1)}}@media (max-width:768px){.opencode-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}.opencode-iframe-container{flex:1;position:relative;overflow:hidden;display:flex;flex-direction:column;margin-top:-42px}.opencode-loading-overlay{position:absolute;inset:0;background:var(--oc-overlay-bg);display:none;flex-direction:column;align-items:center;justify-content:center;z-index:10;transition:opacity .3s ease}.opencode-loading-overlay.visible{display:flex}.opencode-loading-spinner{width:40px;height:40px;border:3px solid var(--oc-border-primary);border-top-color:var(--oc-primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.opencode-loading-text{margin-top:12px;font-size:14px;color:var(--oc-text-placeholder)}.opencode-error-overlay{position:absolute;inset:0;z-index:15;margin-top:42px;display:none}.opencode-error-overlay.visible{display:flex}.opencode-empty-state-overlay{position:absolute;inset:0;background:var(--oc-bg-secondary);display:none;flex-direction:column;align-items:center;justify-content:center;z-index:5;transition:opacity .3s ease;margin-top:42px}.opencode-empty-state-overlay.visible{display:flex}.opencode-empty-state-icon{color:var(--oc-text-placeholder);margin-bottom:16px}.opencode-empty-state-text{color:var(--oc-text-primary);font-size:16px;font-weight:500;margin-bottom:24px}.opencode-empty-state-btn{padding:10px 24px;border-radius:8px;border:none;background:var(--oc-primary);color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;box-shadow:var(--oc-shadow-primary)}.opencode-empty-state-btn:hover{background:var(--oc-primary-hover);transform:translateY(-1px);box-shadow:var(--oc-shadow-primary-hover)}.opencode-empty-state-btn:active{transform:translateY(0)}.opencode-iframe{width:100%;height:100%;border:none}.opencode-chat-header{position:relative;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 12px;height:40px;background:var(--oc-bg-secondary);border-bottom:1px solid var(--oc-border-primary);z-index:5}.opencode-chat-header-left{display:flex;align-items:center;gap:4px}.opencode-chat-header-title{font-size:14px;font-weight:600;color:var(--oc-text-primary);position:absolute;left:50%;transform:translate(-50%)}.opencode-chat-header-actions{display:flex;gap:4px}.opencode-header-btn{width:28px;height:28px;border-radius:6px;border:none;background:transparent;color:var(--oc-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.opencode-header-btn:hover{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-header-btn.close:hover{background:var(--oc-danger);color:#fff}.opencode-header-btn.select-btn.active,.opencode-header-btn.session-toggle.active{background:var(--oc-primary);color:#fff}.opencode-select-mode-hint{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:10px;background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border-radius:12px;font-size:14px;font-weight:500;box-shadow:0 6px 20px #ef444480,0 0 0 3px #ef44444d;z-index:9999999;display:none;align-items:center;gap:12px;border:1px solid rgba(255,255,255,.3)}.opencode-select-mode-hint.visible{display:flex;animation:slideDown .3s ease,pulseHint 2s ease-in-out infinite}.opencode-hint-shortcut{padding:4px 10px;background:#ffffff40;border-radius:6px;font-size:13px;font-weight:600;border:1px solid rgba(255,255,255,.4)}@keyframes pulseHint{0%,to{box-shadow:0 6px 20px #ef444480,0 0 0 3px #ef44444d}50%{box-shadow:0 6px 20px #ef444499,0 0 0 6px #ef444466}}.opencode-right-toolbar{width:140px;background:var(--oc-bg-secondary);border-left:1px solid var(--oc-border-primary);display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease;overflow:hidden}.opencode-right-toolbar.collapsed{width:0;overflow:hidden}.opencode-right-toolbar.collapsed .opencode-selected-nodes-header,.opencode-right-toolbar.collapsed .opencode-selected-nodes,.opencode-right-toolbar.collapsed .opencode-clear-all-btn{display:none}.opencode-selected-nodes-header{padding:12px 8px 8px;border-bottom:1px solid var(--oc-border-primary)}.opencode-selected-nodes-title{font-size:14px;font-weight:600;color:var(--oc-text-primary);margin-bottom:4px}.opencode-selected-nodes-desc{font-size:11px;color:var(--oc-text-placeholder);line-height:1.4}.opencode-selected-nodes{flex:1;display:flex;flex-direction:column;padding:8px;gap:6px;overflow-y:auto;overflow-x:hidden}.opencode-selected-nodes:empty:before{content:"暂无选中元素";color:var(--oc-text-placeholder);font-size:12px;text-align:center;padding:20px 10px}.opencode-selected-node{display:flex;align-items:center;gap:8px;padding:8px 10px;background:var(--oc-bg-main);border:1px solid var(--oc-border-primary);border-radius:6px;font-size:12px;transition:all .2s}.opencode-selected-node:hover{border-color:var(--oc-primary);box-shadow:var(--oc-shadow-primary)}.opencode-node-content{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.opencode-node-text{color:var(--oc-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-node-file{color:var(--oc-text-placeholder);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-node-remove{width:18px;height:18px;border-radius:4px;border:none;background:transparent;color:var(--oc-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .2s;flex-shrink:0}.opencode-node-remove:hover{background:var(--oc-danger);color:#fff}.opencode-clear-all-btn{width:calc(100% - 16px);margin:8px;padding:8px 12px;border-radius:6px;border:none;background:var(--oc-danger);color:#fff;font-size:12px;font-weight:500;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:4px;transition:all .2s}.opencode-clear-all-btn:hover{background:var(--oc-danger-hover);transform:scale(1.02)}.opencode-session-list{width:240px;background:var(--oc-bg-secondary);border-right:1px solid var(--oc-border-primary);display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease}.opencode-session-list.collapsed{width:0;overflow:hidden}.opencode-session-list.collapsed .opencode-session-list-header,.opencode-session-list.collapsed .opencode-session-list-content{display:none}.opencode-session-list-header{padding:16px;border-bottom:1px solid var(--oc-border-primary);display:flex;justify-content:space-between;align-items:center;font-weight:600;font-size:14px;color:var(--oc-text-primary)}.opencode-new-session-btn{width:28px;height:28px;border-radius:6px;border:none;background:var(--oc-primary);color:#fff;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.opencode-new-session-btn:hover{background:var(--oc-primary-hover);transform:scale(1.05)}.opencode-session-list-content{flex:1;overflow-y:auto;padding:8px;position:relative}.opencode-session-list-loading-overlay{position:absolute;inset:0;background:var(--oc-overlay-bg);display:flex;align-items:center;justify-content:center;z-index:10;border-radius:8px}.opencode-loading-spinner.small{width:24px;height:24px;border-width:2px}.opencode-session-item{padding:12px;border-radius:8px;cursor:pointer;transition:transform .2s;margin-bottom:4px;color:var(--oc-text-primary)}.opencode-session-item:hover{background:var(--oc-bg-tertiary)}.opencode-session-item.active{background:var(--oc-primary);color:#fff;transition:none}.opencode-session-title{font-size:14px;font-weight:500;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-session-meta{font-size:12px;opacity:.6}.opencode-session-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.opencode-session-delete-btn{width:20px;height:20px;border-radius:4px;border:none;background:transparent;color:var(--oc-text-placeholder);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;opacity:0;flex-shrink:0}.opencode-session-item:hover .opencode-session-delete-btn{opacity:1}.opencode-session-delete-btn:hover{background:var(--oc-danger);color:#fff}.opencode-session-item.active .opencode-session-delete-btn{color:#ffffffb3}.opencode-session-item.active .opencode-session-delete-btn:hover{background:#fff3;color:#fff}.opencode-session-header-skeleton{padding:16px;border-bottom:1px solid var(--oc-border-primary);display:none;justify-content:space-between;align-items:center}.opencode-session-header-skeleton.visible{display:flex}.opencode-skeleton-header-title{height:18px;width:80px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px}.opencode-skeleton-header-btn{width:28px;height:28px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:6px}.opencode-session-skeleton{flex:1;overflow-y:auto;padding:8px;display:none}.opencode-session-skeleton.visible{display:block}.opencode-skeleton-item{padding:12px;border-radius:8px;margin-bottom:4px;background:var(--oc-skeleton-bg)}.opencode-skeleton-title{height:16px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px;margin-bottom:8px;width:70%}.opencode-skeleton-meta{height:12px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px;width:50%}.opencode-session-empty{padding:32px 16px;text-align:center;color:var(--oc-text-placeholder);font-size:13px}.opencode-thinking-loading{display:inline-block;width:12px;height:12px;margin-right:6px;border:2px solid var(--oc-border-secondary);border-top-color:var(--oc-text-secondary);border-radius:50%;animation:thinking-spin .8s linear infinite;vertical-align:middle}.opencode-session-item.active .opencode-thinking-loading{border-color:#ffffff4d;border-top-color:#ffffffe6}@keyframes thinking-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}.opencode-button{width:42px;height:42px;border-radius:50%;background:#fff;border:none;cursor:pointer;box-shadow:0 4px 12px #667eea66;transition:all .3s ease;display:flex;align-items:center;justify-content:center;padding:0;position:relative}.opencode-button svg{transform:rotate(180deg) scale(1.1);transition:transform .3s ease;width:100%;height:100%;display:block}.opencode-button:hover svg{transform:rotate(180deg) scale(1.1)}.opencode-button:hover{transform:scale(1.1);box-shadow:0 6px 16px #667eea80}.opencode-button.thinking{background:linear-gradient(135deg,#667eea,#764ba2);animation:thinking-glow 1.5s ease-in-out infinite,thinking-pulse 1.5s ease-in-out infinite;box-shadow:0 0 20px #667eea99,0 0 40px #764ba266,0 0 60px #667eea33}.opencode-button.thinking svg path{fill:#fff}.opencode-button.thinking:before{content:"";position:absolute;inset:-2px;border-radius:50%;background:linear-gradient(135deg,#8b9cf5,#9d6bc7);z-index:-1}.opencode-button.thinking:after{content:"";position:absolute;inset:-3px;border-radius:50%;background:conic-gradient(from 180deg,transparent,rgba(102,126,234,.3),transparent,rgba(118,75,162,.3),transparent);z-index:-2;animation:thinking-rotate 2s linear infinite reverse;filter:blur(8px)}@keyframes thinking-glow{0%,to{box-shadow:0 0 20px #667eea99,0 0 40px #764ba266,0 0 60px #667eea33}50%{box-shadow:0 0 30px #667eeacc,0 0 60px #764ba299,0 0 90px #667eea4d}}@keyframes thinking-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes thinking-pulse{0%,to{transform:scale(1)}50%{transform:scale(.85)}}.opencode-button.opencode-theme-dark{background:linear-gradient(135deg,#667eea,#764ba2);box-shadow:0 4px 12px #667eea4d}.opencode-button.opencode-theme-dark:before{content:"";position:absolute;inset:-2px;border-radius:50%;background:linear-gradient(135deg,#8b9cf5,#9d6bc7);z-index:-1}.opencode-button.opencode-theme-dark:hover{box-shadow:0 6px 16px #667eea66}.opencode-button.opencode-theme-dark svg path{fill:#fff}.floating-bubble{position:fixed;top:0;left:0;z-index:999999;cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none;touch-action:none;will-change:transform}.floating-bubble:active{cursor:grabbing}body.floating-bubble-dragging *{pointer-events:none!important}body.floating-bubble-dragging .floating-bubble,body.floating-bubble-dragging .floating-bubble *{pointer-events:auto!important}.opencode-chrome-warmup-error-details[data-v-6b3ae44a]{margin-top:8px;padding:12px;background:var(--oc-bg-tertiary);border-radius:6px;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:12px;color:var(--oc-text-secondary);max-height:120px;overflow-y:auto;word-break:break-word}.opencode-custom-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px}.opencode-loading-spinner{width:32px;height:32px;border:3px solid var(--oc-border-primary);border-top-color:var(--oc-primary);border-radius:50%;animation:opencode-spin .8s linear infinite}@keyframes opencode-spin{to{transform:rotate(360deg)}}.opencode-loading-text{margin-top:12px;color:var(--oc-text-secondary);font-size:14px}.opencode-chrome-warmup-failed{position:absolute;inset:0;background:var(--oc-bg-secondary);display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:15}.opencode-chrome-warmup-failed-icon{color:var(--oc-warning, #f59e0b);margin-bottom:16px}.opencode-chrome-warmup-failed-title{color:var(--oc-text-primary);font-size:18px;font-weight:600;margin-bottom:8px}.opencode-chrome-warmup-failed-text{color:var(--oc-text-secondary);font-size:14px;margin-bottom:24px;text-align:left;max-width:400px;line-height:1.6;text-align:center}.opencode-chrome-warmup-failed-text p{margin:0 0 12px;font-weight:500;color:var(--oc-text-primary)}.opencode-chrome-warmup-steps{margin:0;padding-left:20px}.opencode-chrome-warmup-steps li{margin-bottom:8px;color:var(--oc-text-secondary);font-size:13px;line-height:1.5}.opencode-chrome-warmup-steps li:last-child{margin-bottom:0}.opencode-chrome-warmup-code{display:inline-block;background:var(--oc-bg-tertiary);color:var(--oc-primary);padding:2px 6px;border-radius:4px;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:12px;font-weight:500;word-break:break-all;margin:0 2px}.opencode-chrome-warmup-failed-actions{display:flex;gap:12px}.opencode-chrome-warmup-failed-btn{padding:10px 24px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-chrome-warmup-failed-btn.primary{background:var(--oc-primary);color:#fff;box-shadow:var(--oc-shadow-primary)}.opencode-chrome-warmup-failed-btn.primary:hover:not(:disabled){background:var(--oc-primary-hover);transform:translateY(-1px);box-shadow:var(--oc-shadow-primary-hover)}.opencode-chrome-warmup-failed-btn.primary:active:not(:disabled){transform:translateY(0)}.opencode-chrome-warmup-failed-btn.primary:disabled{opacity:.6;cursor:not-allowed}
1
+ .opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-thinking-gradient-1: #10b981;--oc-thinking-gradient-2: #059669;--oc-thinking-glow: rgba(16, 185, 129, .3);--oc-thinking-glow-strong: rgba(16, 185, 129, .6);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: #3b82f6;--oc-trigger-bg-hover: #2563eb;--oc-trigger-bg-active: #1d4ed8;--oc-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--oc-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--oc-trigger-shadow-active: 0 4px 12px rgba(59, 130, 246, .5);position:fixed;z-index:999999;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-thinking-gradient-1: #34d399;--oc-thinking-gradient-2: #10b981;--oc-thinking-glow: rgba(52, 211, 153, .3);--oc-thinking-glow-strong: rgba(52, 211, 153, .6);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: #60a5fa;--oc-trigger-bg-hover: #3b82f6;--oc-trigger-bg-active: #2563eb;--oc-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--oc-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--oc-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.opencode-chat{position:fixed;bottom:20px;width:700px;height:86vh;max-height:calc(100vh - 40px);background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translate3d(var(---chatAnimationOrigin\.x),var(---chatAnimationOrigin\.y),0) scale(.95);transition:all .3s ease;display:flex;flex-direction:column;z-index:99999}.opencode-chat.open{opacity:1;visibility:visible;transform:translateZ(0) scale(1)}.opencode-chat.no-transition,.opencode-chat.no-transition.open{transition:none!important}.opencode-chat.minimized{width:300px;height:300px}.opencode-chat.minimized .opencode-iframe-container{margin-top:-146px}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-notification{position:absolute;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px #3b82f666,0 0 0 2px #3b82f633;animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.opencode-notification:before{content:"💡";font-size:16px}.opencode-dialog-overlay{position:fixed;inset:0;background:var(--oc-dialog-overlay);display:flex;align-items:center;justify-content:center;z-index:9999999;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.opencode-dialog{background:var(--oc-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--oc-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.opencode-dialog-content{margin-bottom:20px}.opencode-dialog-message{font-size:15px;color:var(--oc-text-primary);line-height:1.5}.opencode-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.opencode-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-dialog-btn.cancel{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-dialog-btn.cancel:hover{background:var(--oc-text-primary);color:var(--oc-bg-main)}.opencode-dialog-btn.confirm{background:var(--oc-danger);color:#fff}.opencode-dialog-btn.confirm:hover{background:var(--oc-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.opencode-page-notification{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px #3b82f666,0 0 0 2px #3b82f633;animation:slideDown .3s ease;z-index:2147483647;display:flex;align-items:center;gap:10px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-page-notification:before{content:"💡";font-size:16px}.opencode-element-highlight{position:fixed;pointer-events:none;z-index:999998;border-radius:4px}#vue-inspector-container{display:none!important}.opencode-element-tooltip{position:fixed;background:var(--oc-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none}.opencode-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.opencode-tooltip-file{font-size:11px;color:var(--oc-text-placeholder);word-break:break-all}.opencode-element-highlight-temp{position:absolute;pointer-events:none;z-index:999998;border-radius:4px;animation:highlight-pulse 2s ease-out forwards}@keyframes highlight-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.02)}to{opacity:0;transform:scale(1)}}@media (max-width:768px){.opencode-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}.opencode-iframe-container{flex:1;position:relative;overflow:hidden;display:flex;flex-direction:column;margin-top:-42px}.opencode-loading-overlay{position:absolute;inset:0;background:var(--oc-overlay-bg);display:none;flex-direction:column;align-items:center;justify-content:center;z-index:10;transition:opacity .3s ease}.opencode-loading-overlay.visible{display:flex}.opencode-loading-spinner{width:40px;height:40px;border:3px solid var(--oc-border-primary);border-top-color:var(--oc-primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.opencode-loading-text{margin-top:12px;font-size:14px;color:var(--oc-text-placeholder)}.opencode-error-overlay{position:absolute;inset:0;z-index:15;margin-top:42px;display:none}.opencode-error-overlay.visible{display:flex}.opencode-empty-state-overlay{position:absolute;inset:0;background:var(--oc-bg-secondary);display:none;flex-direction:column;align-items:center;justify-content:center;z-index:5;transition:opacity .3s ease;margin-top:42px}.opencode-empty-state-overlay.visible{display:flex}.opencode-empty-state-icon{color:var(--oc-text-placeholder);margin-bottom:16px}.opencode-empty-state-text{color:var(--oc-text-primary);font-size:16px;font-weight:500;margin-bottom:24px}.opencode-empty-state-btn{padding:10px 24px;border-radius:8px;border:none;background:var(--oc-primary);color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;box-shadow:var(--oc-shadow-primary)}.opencode-empty-state-btn:hover{background:var(--oc-primary-hover);transform:translateY(-1px);box-shadow:var(--oc-shadow-primary-hover)}.opencode-empty-state-btn:active{transform:translateY(0)}.opencode-iframe{width:100%;height:100%;border:none}.opencode-chat-header{position:relative;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 12px;height:40px;background:var(--oc-bg-secondary);border-bottom:1px solid var(--oc-border-primary);z-index:5}.opencode-chat-header-left{display:flex;align-items:center;gap:4px}.opencode-chat-header-title{font-size:14px;font-weight:600;color:var(--oc-text-primary);position:absolute;left:50%;transform:translate(-50%)}.opencode-chat-header-actions{display:flex;gap:4px}.opencode-header-btn{width:28px;height:28px;border-radius:6px;border:none;background:transparent;color:var(--oc-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.opencode-header-btn:hover{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-header-btn.close:hover{background:var(--oc-danger);color:#fff}.opencode-header-btn.select-btn.active,.opencode-header-btn.session-toggle.active{background:var(--oc-primary);color:#fff}.opencode-select-mode-hint{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:10px;background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border-radius:12px;font-size:14px;font-weight:500;box-shadow:0 6px 20px #ef444480,0 0 0 3px #ef44444d;z-index:9999999;display:none;align-items:center;gap:12px;border:1px solid rgba(255,255,255,.3)}.opencode-select-mode-hint.visible{display:flex;animation:slideDown .3s ease,pulseHint 2s ease-in-out infinite}.opencode-hint-shortcut{padding:4px 10px;background:#ffffff40;border-radius:6px;font-size:13px;font-weight:600;border:1px solid rgba(255,255,255,.4)}@keyframes pulseHint{0%,to{box-shadow:0 6px 20px #ef444480,0 0 0 3px #ef44444d}50%{box-shadow:0 6px 20px #ef444499,0 0 0 6px #ef444466}}.opencode-right-toolbar{width:140px;background:var(--oc-bg-secondary);border-left:1px solid var(--oc-border-primary);display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease;overflow:hidden}.opencode-right-toolbar.collapsed{width:0;overflow:hidden}.opencode-right-toolbar.collapsed .opencode-selected-nodes-header,.opencode-right-toolbar.collapsed .opencode-selected-nodes,.opencode-right-toolbar.collapsed .opencode-clear-all-btn{display:none}.opencode-selected-nodes-header{padding:12px 8px 8px;border-bottom:1px solid var(--oc-border-primary)}.opencode-selected-nodes-title{font-size:14px;font-weight:600;color:var(--oc-text-primary);margin-bottom:4px}.opencode-selected-nodes-desc{font-size:11px;color:var(--oc-text-placeholder);line-height:1.4}.opencode-selected-nodes{flex:1;display:flex;flex-direction:column;padding:8px;gap:6px;overflow-y:auto;overflow-x:hidden}.opencode-selected-nodes:empty:before{content:"暂无选中元素";color:var(--oc-text-placeholder);font-size:12px;text-align:center;padding:20px 10px}.opencode-selected-node{display:flex;align-items:center;gap:8px;padding:8px 10px;background:var(--oc-bg-main);border:1px solid var(--oc-border-primary);border-radius:6px;font-size:12px;transition:all .2s}.opencode-selected-node:hover{border-color:var(--oc-primary);box-shadow:var(--oc-shadow-primary)}.opencode-node-content{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.opencode-node-text{color:var(--oc-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-node-file{color:var(--oc-text-placeholder);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-node-remove{width:18px;height:18px;border-radius:4px;border:none;background:transparent;color:var(--oc-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .2s;flex-shrink:0}.opencode-node-remove:hover{background:var(--oc-danger);color:#fff}.opencode-clear-all-btn{width:calc(100% - 16px);margin:8px;padding:8px 12px;border-radius:6px;border:none;background:var(--oc-danger);color:#fff;font-size:12px;font-weight:500;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:4px;transition:all .2s}.opencode-clear-all-btn:hover{background:var(--oc-danger-hover);transform:scale(1.02)}.opencode-session-list{width:240px;background:var(--oc-bg-secondary);border-right:1px solid var(--oc-border-primary);display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease}.opencode-session-list.collapsed{width:0;overflow:hidden}.opencode-session-list.collapsed .opencode-session-list-header,.opencode-session-list.collapsed .opencode-session-list-content{display:none}.opencode-session-list-header{padding:16px;border-bottom:1px solid var(--oc-border-primary);display:flex;justify-content:space-between;align-items:center;font-weight:600;font-size:14px;color:var(--oc-text-primary)}.opencode-new-session-btn{width:28px;height:28px;border-radius:6px;border:none;background:var(--oc-primary);color:#fff;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.opencode-new-session-btn:hover{background:var(--oc-primary-hover);transform:scale(1.05)}.opencode-session-list-content{flex:1;overflow-y:auto;padding:8px;position:relative}.opencode-session-list-loading-overlay{position:absolute;inset:0;background:var(--oc-overlay-bg);display:flex;align-items:center;justify-content:center;z-index:10;border-radius:8px}.opencode-loading-spinner.small{width:24px;height:24px;border-width:2px}.opencode-session-item{padding:12px;border-radius:8px;cursor:pointer;transition:transform .2s;margin-bottom:4px;color:var(--oc-text-primary)}.opencode-session-item:hover{background:var(--oc-bg-tertiary)}.opencode-session-item.active{background:var(--oc-primary);color:#fff;transition:none}.opencode-session-title{font-size:14px;font-weight:500;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-session-meta{font-size:12px;opacity:.6}.opencode-session-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.opencode-session-delete-btn{width:20px;height:20px;border-radius:4px;border:none;background:transparent;color:var(--oc-text-placeholder);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;opacity:0;flex-shrink:0}.opencode-session-item:hover .opencode-session-delete-btn{opacity:1}.opencode-session-delete-btn:hover{background:var(--oc-danger);color:#fff}.opencode-session-item.active .opencode-session-delete-btn{color:#ffffffb3}.opencode-session-item.active .opencode-session-delete-btn:hover{background:#fff3;color:#fff}.opencode-session-header-skeleton{padding:16px;border-bottom:1px solid var(--oc-border-primary);display:none;justify-content:space-between;align-items:center}.opencode-session-header-skeleton.visible{display:flex}.opencode-skeleton-header-title{height:18px;width:80px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px}.opencode-skeleton-header-btn{width:28px;height:28px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:6px}.opencode-session-skeleton{flex:1;overflow-y:auto;padding:8px;display:none}.opencode-session-skeleton.visible{display:block}.opencode-skeleton-item{padding:12px;border-radius:8px;margin-bottom:4px;background:var(--oc-skeleton-bg)}.opencode-skeleton-title{height:16px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px;margin-bottom:8px;width:70%}.opencode-skeleton-meta{height:12px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px;width:50%}.opencode-session-empty{padding:32px 16px;text-align:center;color:var(--oc-text-placeholder);font-size:13px}.opencode-thinking-loading{display:inline-block;width:12px;height:12px;margin-right:6px;border:2px solid var(--oc-border-secondary);border-top-color:var(--oc-text-secondary);border-radius:50%;animation:thinking-spin .8s linear infinite;vertical-align:middle}.opencode-session-item.active .opencode-thinking-loading{border-color:#ffffff4d;border-top-color:#ffffffe6}@keyframes thinking-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}.opencode-button{width:42px;height:42px;border-radius:50%;background:#fff;border:none;cursor:pointer;box-shadow:0 4px 12px #667eea66;transition:all .3s ease;display:flex;align-items:center;justify-content:center;padding:0;position:relative}.opencode-button svg{transform:rotate(180deg) scale(1.1);transition:transform .3s ease;width:100%;height:100%;display:block}.opencode-button:hover svg{transform:rotate(180deg) scale(1.1)}.opencode-button:hover{transform:scale(1.1);box-shadow:0 6px 16px #667eea80}.opencode-button.thinking{background:linear-gradient(135deg,#667eea,#764ba2);animation:thinking-glow 2s ease-in-out infinite,thinking-pulse 2s ease-in-out infinite;box-shadow:0 0 20px #667eea99,0 0 40px #764ba266,0 0 60px #667eea33}.opencode-button.thinking svg path{fill:#fff}.opencode-button.thinking:before{content:"";position:absolute;inset:-2px;border-radius:50%;background:linear-gradient(135deg,#8b9cf5,#9d6bc7);z-index:-1}.opencode-button.thinking:after{content:"";position:absolute;inset:-3px;border-radius:50%;background:conic-gradient(from 180deg,transparent,rgba(102,126,234,.3),transparent,rgba(118,75,162,.3),transparent);z-index:-2;animation:thinking-rotate 2s linear infinite reverse;filter:blur(8px)}@keyframes thinking-glow{0%,to{box-shadow:0 0 20px #667eea99,0 0 40px #764ba266,0 0 60px #667eea33}50%{box-shadow:0 0 30px #667eeacc,0 0 60px #764ba299,0 0 90px #667eea4d}}@keyframes thinking-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes thinking-pulse{0%,to{transform:scale(1)}50%{transform:scale(.92)}}.opencode-button.opencode-theme-dark{background:linear-gradient(135deg,#667eea,#764ba2);box-shadow:0 4px 12px #667eea4d}.opencode-button.opencode-theme-dark:before{content:"";position:absolute;inset:-2px;border-radius:50%;background:linear-gradient(135deg,#8b9cf5,#9d6bc7);z-index:-1}.opencode-button.opencode-theme-dark:hover{box-shadow:0 6px 16px #667eea66}.opencode-button.opencode-theme-dark svg path{fill:#fff}.floating-bubble{position:fixed;top:0;left:0;z-index:999999;cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none;touch-action:none;will-change:transform}.floating-bubble:active{cursor:grabbing}body.floating-bubble-dragging *{pointer-events:none!important}body.floating-bubble-dragging .floating-bubble,body.floating-bubble-dragging .floating-bubble *{pointer-events:auto!important}.opencode-chrome-warmup-error-details[data-v-6b3ae44a]{margin-top:8px;padding:12px;background:var(--oc-bg-tertiary);border-radius:6px;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:12px;color:var(--oc-text-secondary);max-height:120px;overflow-y:auto;word-break:break-word}.opencode-custom-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px}.opencode-loading-spinner{width:32px;height:32px;border:3px solid var(--oc-border-primary);border-top-color:var(--oc-primary);border-radius:50%;animation:opencode-spin .8s linear infinite}@keyframes opencode-spin{to{transform:rotate(360deg)}}.opencode-loading-text{margin-top:12px;color:var(--oc-text-secondary);font-size:14px}.opencode-chrome-warmup-failed{position:absolute;inset:0;background:var(--oc-bg-secondary);display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:15}.opencode-chrome-warmup-failed-icon{color:var(--oc-warning, #f59e0b);margin-bottom:16px}.opencode-chrome-warmup-failed-title{color:var(--oc-text-primary);font-size:18px;font-weight:600;margin-bottom:8px}.opencode-chrome-warmup-failed-text{color:var(--oc-text-secondary);font-size:14px;margin-bottom:24px;text-align:left;max-width:400px;line-height:1.6;text-align:center}.opencode-chrome-warmup-failed-text p{margin:0 0 12px;font-weight:500;color:var(--oc-text-primary)}.opencode-chrome-warmup-steps{margin:0;padding-left:20px}.opencode-chrome-warmup-steps li{margin-bottom:8px;color:var(--oc-text-secondary);font-size:13px;line-height:1.5}.opencode-chrome-warmup-steps li:last-child{margin-bottom:0}.opencode-chrome-warmup-code{display:inline-block;background:var(--oc-bg-tertiary);color:var(--oc-primary);padding:2px 6px;border-radius:4px;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:12px;font-weight:500;word-break:break-all;margin:0 2px}.opencode-chrome-warmup-failed-actions{display:flex;gap:12px}.opencode-chrome-warmup-failed-btn{padding:10px 24px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-chrome-warmup-failed-btn.primary{background:var(--oc-primary);color:#fff;box-shadow:var(--oc-shadow-primary)}.opencode-chrome-warmup-failed-btn.primary:hover:not(:disabled){background:var(--oc-primary-hover);transform:translateY(-1px);box-shadow:var(--oc-shadow-primary-hover)}.opencode-chrome-warmup-failed-btn.primary:active:not(:disabled){transform:translateY(0)}.opencode-chrome-warmup-failed-btn.primary:disabled{opacity:.6;cursor:not-allowed}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-opencode-assistant",
3
- "version": "1.0.34",
3
+ "version": "1.0.36",
4
4
  "description": "Embed OpenCode Web UI in your Vite dev server for real-time code modification and preview",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -36,9 +36,9 @@
36
36
  "license": "MIT",
37
37
  "dependencies": {
38
38
  "unplugin-vue-inspector": "^2.4.0",
39
- "@vite-plugin-opencode-assistant/opencode": "1.0.34",
40
- "@vite-plugin-opencode-assistant/shared": "1.0.34",
41
- "@vite-plugin-opencode-assistant/components": "1.0.34"
39
+ "@vite-plugin-opencode-assistant/components": "1.0.36",
40
+ "@vite-plugin-opencode-assistant/opencode": "1.0.36",
41
+ "@vite-plugin-opencode-assistant/shared": "1.0.36"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "vite": ">=4.0.0"