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.
- package/es/core/proxy-server.js +3 -0
- package/lib/client.js +85 -94
- package/lib/core/proxy-server.js +3 -0
- package/lib/style.css +1 -1
- package/package.json +4 -4
package/es/core/proxy-server.js
CHANGED
|
@@ -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
|
|
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
|
|
5764
|
-
function
|
|
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 (
|
|
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
|
|
5780
|
-
return e ? !!(
|
|
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
|
|
5784
|
+
return af(n[1]);
|
|
5794
5785
|
const s = t.match(/^\.([a-zA-Z_-][\w-]*)$/);
|
|
5795
|
-
return s ?
|
|
5786
|
+
return s ? cf(s[1]) : !1;
|
|
5796
5787
|
}
|
|
5797
5788
|
]
|
|
5798
5789
|
});
|
|
5799
5790
|
}
|
|
5800
|
-
function
|
|
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
|
|
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
|
|
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
|
|
5828
|
+
function hf(e) {
|
|
5838
5829
|
let t = e;
|
|
5839
5830
|
for (; t; ) {
|
|
5840
|
-
const n =
|
|
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
|
|
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
|
|
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 =
|
|
5878
|
-
const r = t ?
|
|
5879
|
-
return
|
|
5868
|
+
t && !i && (i = hf(t));
|
|
5869
|
+
const r = t ? uf(t) : null;
|
|
5870
|
+
return pf(i, r);
|
|
5880
5871
|
}
|
|
5881
|
-
function
|
|
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 _ =
|
|
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 $ =
|
|
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
|
|
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
|
|
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
|
|
5993
|
+
function _f(e) {
|
|
6003
5994
|
const t = () => {
|
|
6004
|
-
const o =
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
6022
|
+
wf.call(t, n) && Po(e, n, t[n]);
|
|
6032
6023
|
if (ko)
|
|
6033
6024
|
for (var n of ko(t))
|
|
6034
|
-
|
|
6025
|
+
Ef.call(t, n) && Po(e, n, t[n]);
|
|
6035
6026
|
return e;
|
|
6036
|
-
},
|
|
6037
|
-
const hr = /* @__PURE__ */ Ze(
|
|
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 } =
|
|
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
|
-
|
|
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
|
-
})),
|
|
6317
|
+
})), xf = {
|
|
6327
6318
|
key: 0,
|
|
6328
6319
|
class: "opencode-notification",
|
|
6329
6320
|
role: "alert"
|
|
6330
|
-
},
|
|
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
|
-
},
|
|
6324
|
+
}, Df = {
|
|
6334
6325
|
class: "opencode-dialog",
|
|
6335
6326
|
role: "alertdialog",
|
|
6336
6327
|
"aria-modal": "true"
|
|
6337
|
-
},
|
|
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
|
|
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
|
-
|
|
6403
|
+
xf,
|
|
6413
6404
|
we(s.notificationMessage),
|
|
6414
6405
|
1
|
|
6415
6406
|
/* TEXT */
|
|
6416
6407
|
)) : Ke("v-if", !0),
|
|
6417
|
-
y("div",
|
|
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
|
-
|
|
6493
|
+
Of,
|
|
6503
6494
|
we(s.tooltipContent.description),
|
|
6504
6495
|
1
|
|
6505
6496
|
/* TEXT */
|
|
6506
6497
|
),
|
|
6507
6498
|
y(
|
|
6508
6499
|
"div",
|
|
6509
|
-
|
|
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",
|
|
6521
|
-
y("div",
|
|
6522
|
-
y("div",
|
|
6511
|
+
s.dialogVisible ? (W(), z("div", If, [
|
|
6512
|
+
y("div", Df, [
|
|
6513
|
+
y("div", kf, [
|
|
6523
6514
|
y(
|
|
6524
6515
|
"div",
|
|
6525
|
-
|
|
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
|
-
|
|
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 =
|
|
6558
|
-
var
|
|
6559
|
-
function
|
|
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
|
|
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 =
|
|
6575
|
-
|
|
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
|
|
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 =
|
|
6592
|
-
retryDelay: i =
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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",
|
|
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",
|
|
6996
|
+
y("div", Jf, we(e.loadingText), 1)
|
|
7006
6997
|
]));
|
|
7007
6998
|
}
|
|
7008
|
-
}),
|
|
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",
|
|
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",
|
|
7054
|
+
y("div", ed, [
|
|
7064
7055
|
o[5] || (o[5] = y("p", null, "AI 模型返回了意外的响应:", -1)),
|
|
7065
|
-
y("div",
|
|
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",
|
|
7071
|
-
e.errorMessage ? (W(), z("p",
|
|
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",
|
|
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,
|
|
7070
|
+
}, we(e.retrying ? "连接中..." : "重试连接"), 9, rd)
|
|
7080
7071
|
])
|
|
7081
7072
|
]));
|
|
7082
7073
|
}
|
|
7083
|
-
}),
|
|
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
|
-
},
|
|
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
|
-
} =
|
|
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
|
-
} =
|
|
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 =
|
|
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(
|
|
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(
|
|
7229
|
+
Se(Zf, { "loading-text": Ot.value }, null, 8, ["loading-text"])
|
|
7239
7230
|
]),
|
|
7240
7231
|
error: Ne(() => [
|
|
7241
|
-
fe(k) ? (W(), At(
|
|
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(
|
|
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
|
};
|
package/lib/core/proxy-server.js
CHANGED
|
@@ -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.
|
|
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/
|
|
40
|
-
"@vite-plugin-opencode-assistant/
|
|
41
|
-
"@vite-plugin-opencode-assistant/
|
|
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"
|