@lixiangtian/webbridge 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/webbridge.mjs CHANGED
@@ -134,6 +134,73 @@ function cmdRun() {
134
134
  process.exit(res.status ?? 0);
135
135
  }
136
136
 
137
+ // ---- setup:扩展安装引导(拉起浏览器扩展页 + 定位扩展目录 + 图文步骤) ----
138
+
139
+ function cmdSetup() {
140
+ const isMac = process.platform === 'darwin';
141
+ const isWin = process.platform === 'win32';
142
+ const extDir = path.resolve(__dirname, '../extension');
143
+
144
+ if (!fs.existsSync(path.join(extDir, 'manifest.json'))) {
145
+ console.error('✗ 包内未找到扩展文件(extension/),请重新安装本包');
146
+ process.exit(1);
147
+ }
148
+
149
+ console.log(`
150
+ ╔══════════════════════════════════════════════════╗
151
+ ║ 灵犀 · 安装向导 ║
152
+ ╚══════════════════════════════════════════════════╝
153
+
154
+ 即将为你打开:
155
+ ① 浏览器的扩展管理页
156
+ ② 扩展文件所在的文件夹(已选中)
157
+
158
+ 按下面三步完成加载:
159
+
160
+ ┌─────────────────────────────────────────────┐
161
+ │ 1. 在打开的扩展页右上角,打开「开发者模式」 │
162
+ │ 2. 点左上角「加载已解压的扩展程序」 │
163
+ │ 3. 在弹出的文件夹窗口中,选择已选中的文件夹 │
164
+ │ (就是刚才打开的那个,直接点「选择」) │
165
+ └─────────────────────────────────────────────┘
166
+
167
+ 扩展目录:${extDir}
168
+ `);
169
+
170
+ // ① 打开浏览器扩展管理页(chrome 优先,无 chrome 回退默认浏览器)
171
+ const extPage = 'chrome://extensions/';
172
+ if (isMac) {
173
+ // open 能识别 chrome:// 并唤起 Chrome
174
+ spawnSync('open', ['-a', 'Google Chrome', extPage], { stdio: 'ignore' });
175
+ } else if (isWin) {
176
+ // Windows:chrome.exe 直接路径尝试
177
+ const chromeWin = [
178
+ process.env['ProgramFiles'] + '\\Google\\Chrome\\Application\\chrome.exe',
179
+ process.env['ProgramFiles(x86)'] + '\\Google\\Chrome\\Application\\chrome.exe',
180
+ process.env['LocalAppData'] + '\\Google\\Chrome\\Application\\chrome.exe',
181
+ ].find((p) => fs.existsSync(p));
182
+ if (chromeWin) {
183
+ spawnSync('"' + chromeWin + '"', [extPage], { shell: true, stdio: 'ignore' });
184
+ } else {
185
+ spawnSync('start', [extPage], { shell: true, stdio: 'ignore' });
186
+ }
187
+ } else {
188
+ spawnSync('xdg-open', [extPage], { stdio: 'ignore' });
189
+ }
190
+
191
+ // ② 文件管理器定位扩展目录
192
+ if (isMac) {
193
+ spawnSync('open', ['-R', extDir], { stdio: 'ignore' });
194
+ } else if (isWin) {
195
+ spawnSync('explorer', ['/select,', path.join(extDir, 'manifest.json')], { stdio: 'ignore' });
196
+ } else {
197
+ spawnSync('xdg-open', [extDir], { stdio: 'ignore' });
198
+ }
199
+
200
+ console.log('已打开。完成加载后,浏览器工具栏点灵犀图标即可使用。');
201
+ console.log('别忘了先启动 bridge:webbridge start\n');
202
+ }
203
+
137
204
  // ---- 分发 ----
138
205
  const cmd = process.argv[2] ?? 'run';
139
206
  switch (cmd) {
@@ -146,6 +213,9 @@ switch (cmd) {
146
213
  case 'status':
147
214
  void cmdStatus();
148
215
  break;
216
+ case 'setup':
217
+ cmdSetup();
218
+ break;
149
219
  case 'version':
150
220
  case '-v':
151
221
  case '--version':
@@ -161,6 +231,7 @@ switch (cmd) {
161
231
  webbridge start 后台启动(守护)
162
232
  webbridge stop 停止后台进程
163
233
  webbridge status 查看运行状态
234
+ webbridge setup 一键引导:安装浏览器扩展 + 启动检查
164
235
  webbridge version 版本`);
165
236
  break;
166
237
  default:
@@ -0,0 +1 @@
1
+ *,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:SF Mono,ui-monospace,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media (width>=640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (width>=768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (width>=1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (width>=1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (width>=1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.bottom-6{bottom:1.5rem}.left-0{left:0}.right-2{right:.5rem}.right-6{right:1.5rem}.top-0{top:0}.top-12{top:3rem}.top-4{top:1rem}.top-\[-1\.5px\]{top:-1.5px}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.m-4{margin:1rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-2\.5{margin-bottom:.625rem}.mb-3{margin-bottom:.75rem}.mb-3\.5{margin-bottom:.875rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-\[30px\]{margin-left:30px}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-4{margin-top:1rem}.box-border{box-sizing:border-box}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.size-1\.5{width:.375rem;height:.375rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-\[18px\]{width:18px;height:18px}.size-\[5px\]{width:5px;height:5px}.size-\[7px\]{width:7px;height:7px}.h-0\.5{height:.125rem}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-20{max-height:5rem}.max-h-24{max-height:6rem}.max-h-40{max-height:10rem}.max-h-56{max-height:14rem}.max-h-80{max-height:20rem}.max-h-\[7\.25rem\]{max-height:7.25rem}.max-h-\[70vh\]{max-height:70vh}.min-h-0{min-height:0}.min-h-16{min-height:4rem}.min-h-\[2\.25rem\]{min-height:2.25rem}.min-h-\[2\.5rem\]{min-height:2.5rem}.min-h-\[2rem\]{min-height:2rem}.w-32{width:8rem}.w-64{width:16rem}.w-\[calc\(100\%-16px\)\]{width:calc(100% - 16px)}.w-full{width:100%}.min-w-0{min-width:0}.min-w-6{min-width:1.5rem}.max-w-24{max-width:6rem}.max-w-40{max-width:10rem}.max-w-\[560px\]{max-width:560px}.max-w-\[85\%\]{max-width:85%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.rotate-180{--tw-rotate:180deg;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes fade-up{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.animate-fade-up{animation:.25s ease-out fade-up}@keyframes pulse-dot{0%,to{opacity:.3}50%{opacity:1}}.animate-pulse-dot{animation:1.2s ease-in-out infinite pulse-dot}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-none{list-style-type:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-bl-md{border-bottom-left-radius:.375rem}.rounded-br-md{border-bottom-right-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.border-ink-100{--tw-border-opacity:1;border-color:rgb(236 238 242/var(--tw-border-opacity,1))}.border-ink-200{--tw-border-opacity:1;border-color:rgb(213 218 226/var(--tw-border-opacity,1))}.border-ink-200\/70{border-color:#d5dae2b3}.border-ink-300{--tw-border-opacity:1;border-color:rgb(176 185 200/var(--tw-border-opacity,1))}.border-ink-800{--tw-border-opacity:1;border-color:rgb(56 64 80/var(--tw-border-opacity,1))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.border-signal-500{--tw-border-opacity:1;border-color:rgb(61 107 245/var(--tw-border-opacity,1))}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity,1))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-ink-100{--tw-bg-opacity:1;background-color:rgb(236 238 242/var(--tw-bg-opacity,1))}.bg-ink-200{--tw-bg-opacity:1;background-color:rgb(213 218 226/var(--tw-bg-opacity,1))}.bg-ink-300{--tw-bg-opacity:1;background-color:rgb(176 185 200/var(--tw-bg-opacity,1))}.bg-ink-400{--tw-bg-opacity:1;background-color:rgb(133 147 169/var(--tw-bg-opacity,1))}.bg-ink-50\/60{background-color:#f6f7f999}.bg-ink-800{--tw-bg-opacity:1;background-color:rgb(56 64 80/var(--tw-bg-opacity,1))}.bg-ink-950{--tw-bg-opacity:1;background-color:rgb(22 26 35/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-red-500\/10{background-color:#ef44441a}.bg-signal-500{--tw-bg-opacity:1;background-color:rgb(61 107 245/var(--tw-bg-opacity,1))}.bg-signal-500\/10{background-color:#3d6bf51a}.bg-signal-500\/15{background-color:#3d6bf526}.bg-signal-500\/5{background-color:#3d6bf50d}.bg-transparent{background-color:#0000}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/70{background-color:#ffffffb3}.bg-white\/90{background-color:#ffffffe6}.bg-white\/95{background-color:#fffffff2}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-\[17px\]{padding-left:17px;padding-right:17px}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-px{padding-top:1px;padding-bottom:1px}.pb-1\.5{padding-bottom:.375rem}.pb-3\.5{padding-bottom:.875rem}.pb-8{padding-bottom:2rem}.pl-1{padding-left:.25rem}.pl-2{padding-left:.5rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:SF Mono,ui-monospace,Menlo,monospace}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[17px\]{font-size:17px}.text-\[22px\]{font-size:22px}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity,1))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-inherit{color:inherit}.text-ink-100{--tw-text-opacity:1;color:rgb(236 238 242/var(--tw-text-opacity,1))}.text-ink-300{--tw-text-opacity:1;color:rgb(176 185 200/var(--tw-text-opacity,1))}.text-ink-400{--tw-text-opacity:1;color:rgb(133 147 169/var(--tw-text-opacity,1))}.text-ink-500{--tw-text-opacity:1;color:rgb(102 118 143/var(--tw-text-opacity,1))}.text-ink-600{--tw-text-opacity:1;color:rgb(80 94 117/var(--tw-text-opacity,1))}.text-ink-700{--tw-text-opacity:1;color:rgb(65 75 94/var(--tw-text-opacity,1))}.text-ink-800{--tw-text-opacity:1;color:rgb(56 64 80/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-signal-500{--tw-text-opacity:1;color:rgb(61 107 245/var(--tw-text-opacity,1))}.text-signal-600{--tw-text-opacity:1;color:rgb(47 85 217/var(--tw-text-opacity,1))}.text-signal-700{--tw-text-opacity:1;color:rgb(40 70 179/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.outline-none{outline-offset:2px;outline:2px solid #0000}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ring-\[3px\]{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-emerald-500\/20{--tw-ring-color:#10b98133}.ring-signal-500\/30{--tw-ring-color:#3d6bf54d}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\[animation-delay\:0\.2s\]{animation-delay:.2s}.\[animation-delay\:0\.4s\]{animation-delay:.4s}.placeholder\:font-sans::placeholder{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}.placeholder\:text-ink-300::placeholder{--tw-text-opacity:1;color:rgb(176 185 200/var(--tw-text-opacity,1))}.first\:border-t-0:first-child{border-top-width:0}.first\:pt-0:first-child{padding-top:0}.hover\:bg-ink-100:hover{--tw-bg-opacity:1;background-color:rgb(236 238 242/var(--tw-bg-opacity,1))}.hover\:bg-ink-300:hover{--tw-bg-opacity:1;background-color:rgb(176 185 200/var(--tw-bg-opacity,1))}.hover\:bg-ink-50:hover{--tw-bg-opacity:1;background-color:rgb(246 247 249/var(--tw-bg-opacity,1))}.hover\:bg-ink-700:hover{--tw-bg-opacity:1;background-color:rgb(65 75 94/var(--tw-bg-opacity,1))}.hover\:bg-ink-800:hover{--tw-bg-opacity:1;background-color:rgb(56 64 80/var(--tw-bg-opacity,1))}.hover\:bg-ink-800\/60:hover{background-color:#38405099}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.hover\:bg-signal-500\/10:hover{background-color:#3d6bf51a}.hover\:bg-signal-600:hover{--tw-bg-opacity:1;background-color:rgb(47 85 217/var(--tw-bg-opacity,1))}.hover\:text-ink-200:hover{--tw-text-opacity:1;color:rgb(213 218 226/var(--tw-text-opacity,1))}.hover\:text-ink-600:hover{--tw-text-opacity:1;color:rgb(80 94 117/var(--tw-text-opacity,1))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.hover\:text-signal-600:hover{--tw-text-opacity:1;color:rgb(47 85 217/var(--tw-text-opacity,1))}.focus\:border-signal-500:focus{--tw-border-opacity:1;border-color:rgb(61 107 245/var(--tw-border-opacity,1))}.disabled\:cursor-default:disabled{cursor:default}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-45:disabled{opacity:.45}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:opacity-100{opacity:1}@media (prefers-color-scheme:dark){.dark\:border-amber-700{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity,1))}.dark\:border-ink-600{--tw-border-opacity:1;border-color:rgb(80 94 117/var(--tw-border-opacity,1))}.dark\:border-ink-700{--tw-border-opacity:1;border-color:rgb(65 75 94/var(--tw-border-opacity,1))}.dark\:border-ink-800{--tw-border-opacity:1;border-color:rgb(56 64 80/var(--tw-border-opacity,1))}.dark\:bg-amber-950\/40{background-color:#451a0366}.dark\:bg-ink-600{--tw-bg-opacity:1;background-color:rgb(80 94 117/var(--tw-bg-opacity,1))}.dark\:bg-ink-700{--tw-bg-opacity:1;background-color:rgb(65 75 94/var(--tw-bg-opacity,1))}.dark\:bg-ink-800{--tw-bg-opacity:1;background-color:rgb(56 64 80/var(--tw-bg-opacity,1))}.dark\:bg-ink-850{--tw-bg-opacity:1;background-color:rgb(44 49 62/var(--tw-bg-opacity,1))}.dark\:bg-ink-850\/60{background-color:#2c313e99}.dark\:bg-ink-900{--tw-bg-opacity:1;background-color:rgb(35 40 52/var(--tw-bg-opacity,1))}.dark\:bg-ink-900\/60{background-color:#23283499}.dark\:bg-ink-900\/90{background-color:#232834e6}.dark\:bg-ink-900\/95{background-color:#232834f2}.dark\:bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.dark\:bg-signal-500\/10{background-color:#3d6bf51a}.dark\:text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.dark\:text-ink-100{--tw-text-opacity:1;color:rgb(236 238 242/var(--tw-text-opacity,1))}.dark\:text-ink-200{--tw-text-opacity:1;color:rgb(213 218 226/var(--tw-text-opacity,1))}.dark\:text-ink-300{--tw-text-opacity:1;color:rgb(176 185 200/var(--tw-text-opacity,1))}.dark\:text-ink-400{--tw-text-opacity:1;color:rgb(133 147 169/var(--tw-text-opacity,1))}.dark\:text-ink-500{--tw-text-opacity:1;color:rgb(102 118 143/var(--tw-text-opacity,1))}.dark\:text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.dark\:text-signal-500{--tw-text-opacity:1;color:rgb(61 107 245/var(--tw-text-opacity,1))}.dark\:hover\:bg-ink-600:hover{--tw-bg-opacity:1;background-color:rgb(80 94 117/var(--tw-bg-opacity,1))}.dark\:hover\:bg-ink-800:hover{--tw-bg-opacity:1;background-color:rgb(56 64 80/var(--tw-bg-opacity,1))}.dark\:hover\:bg-red-950\/40:hover{background-color:#450a0a66}.dark\:hover\:bg-signal-500\/10:hover{background-color:#3d6bf51a}.dark\:hover\:text-ink-200:hover{--tw-text-opacity:1;color:rgb(213 218 226/var(--tw-text-opacity,1))}}.dashboard[data-v-62fea180]{grid-template-columns:280px 1fr;min-height:100vh;display:grid}.sidebar[data-v-62fea180]{border-right:1px solid #eceef2;padding:16px;overflow-y:auto}h2[data-v-62fea180]{margin-bottom:12px;font-size:16px}h3[data-v-62fea180]{opacity:.6;margin:12px 0 8px;font-size:13px}ul[data-v-62fea180]{list-style:none}.registry li[data-v-62fea180]{cursor:pointer;border-radius:6px;justify-content:space-between;align-items:center;padding:8px;display:flex}.registry li.active[data-v-62fea180]{background:#80808026}.config-area[data-v-62fea180]{padding:32px}.desc[data-v-62fea180]{opacity:.6;margin-bottom:24px}.empty[data-v-62fea180]{opacity:.5;font-size:13px}
@@ -0,0 +1 @@
1
+ .slide-in-enter-active,.slide-in-leave-active{transition:transform .2s ease-out}.slide-in-enter-from,.slide-in-leave-to{transform:translate(100%)}@media (prefers-reduced-motion:reduce){.slide-in-enter-active,.slide-in-leave-active{transition:none}}.md-body{overflow-wrap:break-word;font-size:13px;line-height:1.5}.md-body>:first-child{margin-top:0}.md-body>:last-child{margin-bottom:0}.md-body p{margin:.25em 0}.md-body h1,.md-body h2,.md-body h3,.md-body h4{margin:.6em 0 .3em;font-weight:600;line-height:1.35}.md-body h1{font-size:1.18em}.md-body h2{font-size:1.1em}.md-body h3{font-size:1.04em}.md-body h4{font-size:1em}.md-body ul,.md-body ol{margin:.25em 0;padding-left:1.35em}.md-body ul{list-style:outside}.md-body ol{list-style:decimal}.md-body li{margin:.18em 0}.md-body li>p{margin:.1em 0}.md-body a{color:#3d6bf5;text-underline-offset:2px;text-decoration:underline}.md-body code{background:#66768f24;border-radius:4px;padding:.12em .35em;font-family:SF Mono,ui-monospace,Menlo,monospace;font-size:.88em}.md-body pre{background:#66768f1f;border-radius:8px;margin:.55em 0;padding:.6em .75em;overflow-x:auto}.md-body pre code{background:0 0;padding:0;font-size:.86em;line-height:1.55}.md-body blockquote{opacity:.88;border-left:3px solid #b0b9c8;margin:.35em 0;padding:.1em 0 .1em .8em}.md-body table{border-collapse:collapse;max-width:100%;margin:.35em 0;font-size:.92em;display:block;overflow-x:auto}.md-body th,.md-body td{text-align:left;border:1px solid #d5dae2;padding:.28em .6em}.md-body th{background:#66768f1f}.md-body hr{border:none;border-top:1px solid #d5dae2;margin:.9em 0}.md-body img{border-radius:8px;max-width:100%}@media (prefers-color-scheme:dark){.md-body a{color:#7a97f8}.md-body code{background:#8593a92e}.md-body pre{background:#1418218c}.md-body th,.md-body td{border-color:#384050}.md-body th{background:#8593a924}.md-body hr{border-top-color:#384050}.md-body blockquote{border-left-color:#414b5e}}.article-body{color:#384050;overflow-wrap:break-word;font-size:14px;line-height:1.8}.article-body p{margin:.7em 0}.article-body h1,.article-body h2,.article-body h3,.article-body h4{margin:1.1em 0 .5em;font-weight:600;line-height:1.4}.article-body h2{font-size:1.15em}.article-body h3{font-size:1.05em}.article-body a{color:#3d6bf5;text-underline-offset:2px;text-decoration:underline}.article-body img{border-radius:8px;max-width:100%;height:auto;margin:.8em 0}.article-body ul,.article-body ol{margin:.7em 0;padding-left:1.4em}.article-body ul{list-style:outside}.article-body ol{list-style:decimal}.article-body blockquote{opacity:.85;border-left:3px solid #b0b9c8;margin:.9em 0;padding:.1em 0 .1em .9em}.article-body pre{background:#66768f1f;border-radius:8px;margin:.8em 0;padding:.7em .9em;font-size:.88em;overflow-x:auto}.article-body code{font-family:SF Mono,ui-monospace,Menlo,monospace}.article-body table{border-collapse:collapse;max-width:100%;margin:.9em 0;font-size:.92em;display:block;overflow-x:auto}.article-body th,.article-body td{text-align:left;border:1px solid #d5dae2;padding:.3em .6em}.article-body hr{border:none;border-top:1px solid #d5dae2;margin:1.2em 0}.article-body figcaption{opacity:.6;text-align:center;margin-top:-.4em;font-size:.82em}@media (prefers-color-scheme:dark){.article-body{color:#d5dae2}.article-body a{color:#7a97f8}.article-body th,.article-body td{border-color:#384050}.article-body hr{border-top-color:#384050}.article-body blockquote{border-left-color:#414b5e}}.fade-enter-active,.fade-leave-active{transition:opacity .2s}.fade-enter-from,.fade-leave-to{opacity:0}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::-moz-selection{color:#0000}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}[data-v-4340d69b] .xterm{height:100%}[data-v-4340d69b] .xterm-viewport{border-radius:8px}
@@ -0,0 +1 @@
1
+ *,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:SF Mono,ui-monospace,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media (width>=640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (width>=768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (width>=1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (width>=1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (width>=1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.bottom-6{bottom:1.5rem}.left-0{left:0}.right-2{right:.5rem}.right-6{right:1.5rem}.top-0{top:0}.top-12{top:3rem}.top-4{top:1rem}.top-\[-1\.5px\]{top:-1.5px}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.m-4{margin:1rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-2\.5{margin-bottom:.625rem}.mb-3{margin-bottom:.75rem}.mb-3\.5{margin-bottom:.875rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-\[30px\]{margin-left:30px}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-4{margin-top:1rem}.box-border{box-sizing:border-box}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.size-1\.5{width:.375rem;height:.375rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-\[18px\]{width:18px;height:18px}.size-\[5px\]{width:5px;height:5px}.size-\[7px\]{width:7px;height:7px}.h-0\.5{height:.125rem}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-20{max-height:5rem}.max-h-24{max-height:6rem}.max-h-40{max-height:10rem}.max-h-56{max-height:14rem}.max-h-80{max-height:20rem}.max-h-\[7\.25rem\]{max-height:7.25rem}.max-h-\[70vh\]{max-height:70vh}.min-h-0{min-height:0}.min-h-16{min-height:4rem}.min-h-\[2\.25rem\]{min-height:2.25rem}.min-h-\[2\.5rem\]{min-height:2.5rem}.min-h-\[2rem\]{min-height:2rem}.w-32{width:8rem}.w-64{width:16rem}.w-\[calc\(100\%-16px\)\]{width:calc(100% - 16px)}.w-full{width:100%}.min-w-0{min-width:0}.min-w-6{min-width:1.5rem}.max-w-24{max-width:6rem}.max-w-40{max-width:10rem}.max-w-\[560px\]{max-width:560px}.max-w-\[85\%\]{max-width:85%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.rotate-180{--tw-rotate:180deg;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes fade-up{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.animate-fade-up{animation:.25s ease-out fade-up}@keyframes pulse-dot{0%,to{opacity:.3}50%{opacity:1}}.animate-pulse-dot{animation:1.2s ease-in-out infinite pulse-dot}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-none{list-style-type:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-bl-md{border-bottom-left-radius:.375rem}.rounded-br-md{border-bottom-right-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.border-ink-100{--tw-border-opacity:1;border-color:rgb(236 238 242/var(--tw-border-opacity,1))}.border-ink-200{--tw-border-opacity:1;border-color:rgb(213 218 226/var(--tw-border-opacity,1))}.border-ink-200\/70{border-color:#d5dae2b3}.border-ink-300{--tw-border-opacity:1;border-color:rgb(176 185 200/var(--tw-border-opacity,1))}.border-ink-800{--tw-border-opacity:1;border-color:rgb(56 64 80/var(--tw-border-opacity,1))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.border-signal-500{--tw-border-opacity:1;border-color:rgb(61 107 245/var(--tw-border-opacity,1))}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity,1))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-ink-100{--tw-bg-opacity:1;background-color:rgb(236 238 242/var(--tw-bg-opacity,1))}.bg-ink-200{--tw-bg-opacity:1;background-color:rgb(213 218 226/var(--tw-bg-opacity,1))}.bg-ink-300{--tw-bg-opacity:1;background-color:rgb(176 185 200/var(--tw-bg-opacity,1))}.bg-ink-400{--tw-bg-opacity:1;background-color:rgb(133 147 169/var(--tw-bg-opacity,1))}.bg-ink-50\/60{background-color:#f6f7f999}.bg-ink-800{--tw-bg-opacity:1;background-color:rgb(56 64 80/var(--tw-bg-opacity,1))}.bg-ink-950{--tw-bg-opacity:1;background-color:rgb(22 26 35/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-red-500\/10{background-color:#ef44441a}.bg-signal-500{--tw-bg-opacity:1;background-color:rgb(61 107 245/var(--tw-bg-opacity,1))}.bg-signal-500\/10{background-color:#3d6bf51a}.bg-signal-500\/15{background-color:#3d6bf526}.bg-signal-500\/5{background-color:#3d6bf50d}.bg-transparent{background-color:#0000}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/70{background-color:#ffffffb3}.bg-white\/90{background-color:#ffffffe6}.bg-white\/95{background-color:#fffffff2}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-\[17px\]{padding-left:17px;padding-right:17px}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-px{padding-top:1px;padding-bottom:1px}.pb-1\.5{padding-bottom:.375rem}.pb-3\.5{padding-bottom:.875rem}.pb-8{padding-bottom:2rem}.pl-1{padding-left:.25rem}.pl-2{padding-left:.5rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:SF Mono,ui-monospace,Menlo,monospace}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[17px\]{font-size:17px}.text-\[22px\]{font-size:22px}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity,1))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-inherit{color:inherit}.text-ink-100{--tw-text-opacity:1;color:rgb(236 238 242/var(--tw-text-opacity,1))}.text-ink-300{--tw-text-opacity:1;color:rgb(176 185 200/var(--tw-text-opacity,1))}.text-ink-400{--tw-text-opacity:1;color:rgb(133 147 169/var(--tw-text-opacity,1))}.text-ink-500{--tw-text-opacity:1;color:rgb(102 118 143/var(--tw-text-opacity,1))}.text-ink-600{--tw-text-opacity:1;color:rgb(80 94 117/var(--tw-text-opacity,1))}.text-ink-700{--tw-text-opacity:1;color:rgb(65 75 94/var(--tw-text-opacity,1))}.text-ink-800{--tw-text-opacity:1;color:rgb(56 64 80/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-signal-500{--tw-text-opacity:1;color:rgb(61 107 245/var(--tw-text-opacity,1))}.text-signal-600{--tw-text-opacity:1;color:rgb(47 85 217/var(--tw-text-opacity,1))}.text-signal-700{--tw-text-opacity:1;color:rgb(40 70 179/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.outline-none{outline-offset:2px;outline:2px solid #0000}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ring-\[3px\]{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-emerald-500\/20{--tw-ring-color:#10b98133}.ring-signal-500\/30{--tw-ring-color:#3d6bf54d}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\[animation-delay\:0\.2s\]{animation-delay:.2s}.\[animation-delay\:0\.4s\]{animation-delay:.4s}body{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(56 64 80/var(--tw-text-opacity,1))}@media (prefers-color-scheme:dark){body{--tw-bg-opacity:1;background-color:rgb(35 40 52/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(236 238 242/var(--tw-text-opacity,1))}}.placeholder\:font-sans::placeholder{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}.placeholder\:text-ink-300::placeholder{--tw-text-opacity:1;color:rgb(176 185 200/var(--tw-text-opacity,1))}.first\:border-t-0:first-child{border-top-width:0}.first\:pt-0:first-child{padding-top:0}.hover\:bg-ink-100:hover{--tw-bg-opacity:1;background-color:rgb(236 238 242/var(--tw-bg-opacity,1))}.hover\:bg-ink-300:hover{--tw-bg-opacity:1;background-color:rgb(176 185 200/var(--tw-bg-opacity,1))}.hover\:bg-ink-50:hover{--tw-bg-opacity:1;background-color:rgb(246 247 249/var(--tw-bg-opacity,1))}.hover\:bg-ink-700:hover{--tw-bg-opacity:1;background-color:rgb(65 75 94/var(--tw-bg-opacity,1))}.hover\:bg-ink-800:hover{--tw-bg-opacity:1;background-color:rgb(56 64 80/var(--tw-bg-opacity,1))}.hover\:bg-ink-800\/60:hover{background-color:#38405099}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.hover\:bg-signal-500\/10:hover{background-color:#3d6bf51a}.hover\:bg-signal-600:hover{--tw-bg-opacity:1;background-color:rgb(47 85 217/var(--tw-bg-opacity,1))}.hover\:text-ink-200:hover{--tw-text-opacity:1;color:rgb(213 218 226/var(--tw-text-opacity,1))}.hover\:text-ink-600:hover{--tw-text-opacity:1;color:rgb(80 94 117/var(--tw-text-opacity,1))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.hover\:text-signal-600:hover{--tw-text-opacity:1;color:rgb(47 85 217/var(--tw-text-opacity,1))}.focus\:border-signal-500:focus{--tw-border-opacity:1;border-color:rgb(61 107 245/var(--tw-border-opacity,1))}.disabled\:cursor-default:disabled{cursor:default}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-45:disabled{opacity:.45}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:opacity-100{opacity:1}@media (prefers-color-scheme:dark){.dark\:border-amber-700{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity,1))}.dark\:border-ink-600{--tw-border-opacity:1;border-color:rgb(80 94 117/var(--tw-border-opacity,1))}.dark\:border-ink-700{--tw-border-opacity:1;border-color:rgb(65 75 94/var(--tw-border-opacity,1))}.dark\:border-ink-800{--tw-border-opacity:1;border-color:rgb(56 64 80/var(--tw-border-opacity,1))}.dark\:bg-amber-950\/40{background-color:#451a0366}.dark\:bg-ink-600{--tw-bg-opacity:1;background-color:rgb(80 94 117/var(--tw-bg-opacity,1))}.dark\:bg-ink-700{--tw-bg-opacity:1;background-color:rgb(65 75 94/var(--tw-bg-opacity,1))}.dark\:bg-ink-800{--tw-bg-opacity:1;background-color:rgb(56 64 80/var(--tw-bg-opacity,1))}.dark\:bg-ink-850{--tw-bg-opacity:1;background-color:rgb(44 49 62/var(--tw-bg-opacity,1))}.dark\:bg-ink-850\/60{background-color:#2c313e99}.dark\:bg-ink-900{--tw-bg-opacity:1;background-color:rgb(35 40 52/var(--tw-bg-opacity,1))}.dark\:bg-ink-900\/60{background-color:#23283499}.dark\:bg-ink-900\/90{background-color:#232834e6}.dark\:bg-ink-900\/95{background-color:#232834f2}.dark\:bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.dark\:bg-signal-500\/10{background-color:#3d6bf51a}.dark\:text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.dark\:text-ink-100{--tw-text-opacity:1;color:rgb(236 238 242/var(--tw-text-opacity,1))}.dark\:text-ink-200{--tw-text-opacity:1;color:rgb(213 218 226/var(--tw-text-opacity,1))}.dark\:text-ink-300{--tw-text-opacity:1;color:rgb(176 185 200/var(--tw-text-opacity,1))}.dark\:text-ink-400{--tw-text-opacity:1;color:rgb(133 147 169/var(--tw-text-opacity,1))}.dark\:text-ink-500{--tw-text-opacity:1;color:rgb(102 118 143/var(--tw-text-opacity,1))}.dark\:text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.dark\:text-signal-500{--tw-text-opacity:1;color:rgb(61 107 245/var(--tw-text-opacity,1))}.dark\:hover\:bg-ink-600:hover{--tw-bg-opacity:1;background-color:rgb(80 94 117/var(--tw-bg-opacity,1))}.dark\:hover\:bg-ink-800:hover{--tw-bg-opacity:1;background-color:rgb(56 64 80/var(--tw-bg-opacity,1))}.dark\:hover\:bg-red-950\/40:hover{background-color:#450a0a66}.dark\:hover\:bg-signal-500\/10:hover{background-color:#3d6bf51a}.dark\:hover\:text-ink-200:hover{--tw-text-opacity:1;color:rgb(213 218 226/var(--tw-text-opacity,1))}}.signal-dot[data-v-7e8675eb]{animation:1.4s linear infinite signal-flow-7e8675eb}@keyframes signal-flow-7e8675eb{0%{opacity:0;left:0}15%{opacity:1}85%{opacity:1}to{opacity:0;left:calc(100% - 5px)}}@media (prefers-reduced-motion:reduce){.signal-dot[data-v-7e8675eb]{opacity:0!important;animation:none!important}}
@@ -0,0 +1 @@
1
+ var background=(function(){function defineBackground(e){return e==null||typeof e==`function`?{main:e}:e}var browser$1=globalThis.browser?.runtime?.id?globalThis.browser:globalThis.chrome,browser=browser$1,BRIDGE_URL=`ws://127.0.0.1:8765`,RECONNECT_DELAY_MS=5e3,ws=null,reconnectTimer=null,handlers=new Set;function onBridgeMessage(e){return handlers.add(e),()=>handlers.delete(e)}function isBridgeConnected(){return ws?.readyState===WebSocket.OPEN}function sendToBridge(e){return isBridgeConnected()?(ws.send(JSON.stringify(e)),!0):!1}function connectBridge(){reconnectTimer&&clearTimeout(reconnectTimer);try{ws=new WebSocket(BRIDGE_URL)}catch(e){console.warn(`[bridge] 创建连接失败,稍后重试:`,e),scheduleReconnect();return}ws.onopen=()=>{console.log(`[bridge] 已连接本地 webbridge`)},ws.onmessage=e=>{let t;try{t=JSON.parse(String(e.data))}catch{return}for(let e of handlers)try{e(t)}catch(e){console.error(`[bridge] handler error:`,e)}},ws.onclose=()=>{console.log(`[bridge] 连接断开,准备重连`),scheduleReconnect()},ws.onerror=()=>{}}function scheduleReconnect(){reconnectTimer||=setTimeout(()=>{reconnectTimer=null,connectBridge()},RECONNECT_DELAY_MS)}var attached=new Set,netBuffers=new Map,NET_BUFFER_LIMIT=300;function isNetCaptureActive(e){return netBuffers.has(e)}async function cdpAttach(e){attached.has(e)||(await browser.debugger.attach({tabId:e},`1.3`),attached.add(e))}async function cdpDetach(e){if(attached.has(e)){try{await browser.debugger.detach({tabId:e})}catch{}attached.delete(e),netBuffers.delete(e)}}function cdpSend(e,t,n){return browser.debugger.sendCommand({tabId:e},t,n)}async function networkStart(e){await cdpAttach(e),netBuffers.has(e)||netBuffers.set(e,[]),await cdpSend(e,`Network.enable`)}async function networkStop(e){if(netBuffers.has(e)){netBuffers.delete(e);try{await cdpSend(e,`Network.disable`)}catch{}await cdpDetach(e)}}async function networkList(e,t){if(!netBuffers.has(e))return await networkStart(e),{capture:`started`,note:`抓取刚开始,尚无记录;让页面发生操作(点击/翻页)后再次调用本工具查询`,requests:[]};let n=netBuffers.get(e)??[],i=(t.filter??``).toLowerCase(),a=[...n].reverse().filter(e=>!i||e.url.toLowerCase().includes(i)).slice(0,Math.min(t.limit??30,50)),o=[];for(let e of a){let t={method:e.method,url:e.url.length>160?`${e.url.slice(0,160)}…`:e.url,type:e.resourceType,status:e.status,ts:e.ts};e.failed&&(t.failed=e.failed),o.push({item:t,entry:e})}if(t.withBody){let t=o.filter(({entry:e})=>e.finished&&e.status!=null&&e.status>=200&&e.status<300).slice(0,5);for(let{item:n,entry:i}of t)try{let t=await cdpSend(e,`Network.getResponseBody`,{requestId:i.requestId});t?.body&&!t.base64Encoded&&(n.body=t.body.length>2e3?`${t.body.slice(0,2e3)}…`:t.body)}catch{}}return{capture:`active`,total:n.length,matched:a.length,requests:o.map(({item:e})=>e),hint:`查看完毕记得调用 browser_network_stop 结束抓取(移除调试提示条)`}}function initCdp(){browser.debugger.onEvent.addListener((e,t,n)=>{let i=e?.tabId;if(i==null)return;let a=netBuffers.get(i);a&&handleNetEvent(a,t,n)}),browser.debugger.onDetach.addListener(e=>{let t=e?.tabId;t!=null&&(attached.delete(t),netBuffers.delete(t))})}function handleNetEvent(e,t,n){let i=n??{};switch(t){case`Network.requestWillBeSent`:{let t=i.request;e.push({requestId:String(i.requestId??``),url:t?.url??``,method:t?.method??`GET`,resourceType:String(i.type??``),ts:Date.now()}),e.length>NET_BUFFER_LIMIT&&e.splice(0,e.length-NET_BUFFER_LIMIT);break}case`Network.responseReceived`:{let t=i.response,n=e.find(e=>e.requestId===String(i.requestId??``));n&&(n.status=t?.status,n.mimeType=t?.mimeType);break}case`Network.loadingFinished`:{let t=e.find(e=>e.requestId===String(i.requestId??``));t&&(t.finished=!0);break}case`Network.loadingFailed`:{let t=e.find(e=>e.requestId===String(i.requestId??``));t&&(t.failed=String(i.errorText??`failed`),t.finished=!0);break}}}function handleBrowserOp(e){e?.type===`browser-op`&&executeOp(e.op).then(t=>{sendToBridge({id:e.id,type:`op-result`,ok:!0,data:t})}).catch(t=>{sendToBridge({id:e.id,type:`op-result`,ok:!1,error:t instanceof Error?t.message:String(t)})})}async function executeOp(op){switch(op?.action){case`navigate`:{let e=String(op.params?.url??``);if(!/^https?:\/\//.test(e))throw Error(`invalid url`);let t=await activeTabId();return await browser.tabs.update(t,{url:e}),{navigated:e}}case`read`:{let[e]=await browser.tabs.query({active:!0,currentWindow:!0});return{title:e?.title??``,url:e?.url??``}}case`screenshot`:return{dataUrl:await browser.tabs.captureVisibleTab(void 0,{format:`png`})};case`new-tab`:{let e=await browser.tabs.create({url:String(op.params?.url??`about:blank`),active:op.params?.active!==!1});return{tabId:e.id,url:e.url}}case`close-tab`:{let e=Number(op.params?.tabId);if(!e)throw Error(`缺少 tabId`);return await browser.tabs.remove(e),{closed:e}}case`get-tabs`:return{tabs:(await browser.tabs.query({})).map(e=>({tabId:e.id,title:e.title,url:e.url,active:e.active}))};case`switch-tab`:{let e=Number(op.params?.tabId);if(!e)throw Error(`缺少 tabId`);let t=await browser.tabs.update(e,{active:!0});return t.windowId!=null&&await browser.windows.update(t.windowId,{focused:!0}),{switched:e}}case`read-full`:case`snapshot`:case`click`:case`fill`:case`scroll`:case`extract`:case`get-rect`:return sendDomOp(await activeTabId(),op);case`cdp-click`:{let e=await resolveTabId(op.params?.tabId),t=await sendDomOp(e,{action:`get-rect`,params:{ref:op.params?.ref,selector:op.params?.selector}});await cdpAttach(e);try{let n={x:t.x,y:t.y,button:`left`,clickCount:1};await cdpSend(e,`Input.dispatchMouseEvent`,{...n,type:`mouseMoved`}),await cdpSend(e,`Input.dispatchMouseEvent`,{...n,type:`mousePressed`,buttons:1}),await cdpSend(e,`Input.dispatchMouseEvent`,{...n,type:`mouseReleased`,buttons:1})}finally{isNetCaptureActive(e)||await cdpDetach(e)}return{clicked:t.text??`${t.x},${t.y}`,at:{x:t.x,y:t.y},trusted:!0}}case`network`:return networkList(await resolveTabId(op.params?.tabId),{filter:op.params?.filter?String(op.params.filter):void 0,limit:op.params?.limit==null?void 0:Number(op.params.limit),withBody:op.params?.withBody===!0});case`network-stop`:{let e=await resolveTabId(op.params?.tabId);return await networkStop(e),{stopped:e}}case`eval`:{const tabId=await resolveTabId(op.params?.tabId),code=String(op.params?.code??``);if(!code.trim())throw Error(`缺少 code`);const world=op.params?.world===`ISOLATED`?`ISOLATED`:`MAIN`,[res]=await browser.scripting.executeScript({target:{tabId},world,func:code=>{const jsonify=e=>{try{return JSON.parse(JSON.stringify(e===void 0?null:e))}catch{return{unserializable:String(e)}}};try{const r=eval(code);return r instanceof Promise?r.then(e=>({ok:!0,result:jsonify(e)}),e=>({ok:!1,error:String(e)})):{ok:!0,result:jsonify(r)}}catch(e){return{ok:!1,error:String(e)}}},args:[code]});return res?.result}case`wait-for`:{let e=await resolveTabId(op.params?.tabId),t=op.params?.selector?String(op.params.selector):``,n=op.params?.text?String(op.params.text):``;if(!t&&!n)throw Error(`selector 与 text 至少提供一个`);let i=Math.min(Number(op.params?.timeoutMs??1e4),12e3),a=Date.now();for(;;){try{let[i]=await browser.scripting.executeScript({target:{tabId:e},func:(e,t)=>{if(e){let t=document.querySelector(e);return t?{found:!0,text:(t.textContent??``).trim().slice(0,300)}:{found:!1}}return{found:(document.body?.innerText??``).includes(t)}},args:[t,n]}),o=i?.result??{};if(o.found)return{found:!0,matched:t||n,text:o.text,waitedMs:Date.now()-a}}catch{}if(Date.now()-a>=i)return{found:!1,timeout:!0,waitedMs:Date.now()-a};await sleep(300)}}default:throw Error(`unknown action: ${op?.action}`)}}async function activeTabId(){let[e]=await browser.tabs.query({active:!0,currentWindow:!0});if(e?.id==null)throw Error(`no active tab`);return e.id}async function resolveTabId(e){return e!=null&&Number(e)?Number(e):activeTabId()}var sleep=e=>new Promise(t=>setTimeout(t,e));async function sendDomOp(e,t){try{let n=await browser.tabs.sendMessage(e,{type:`DOM_OP`,op:t});if(n?.ok)return n.data;throw Error(n?.error??`dom op failed`)}catch(n){if(n instanceof Error&&n.message.includes(`Receiving end does not exist`)){await browser.scripting.executeScript({target:{tabId:e},files:[`/content-scripts/content.js`]});let n=await browser.tabs.sendMessage(e,{type:`DOM_OP`,op:t});if(n?.ok)return n.data;throw Error(n?.error??`dom op failed`)}throw n}}var PRESET_ENDPOINTS=[{providerId:`deepseek`,label:`DeepSeek`,baseUrl:`https://api.deepseek.com/v1`},{providerId:`moonshot`,label:`Moonshot (Kimi)`,baseUrl:`https://api.moonshot.cn/v1`},{providerId:`openai`,label:`OpenAI`,baseUrl:`https://api.openai.com/v1`},{providerId:`anthropic`,label:`Anthropic`,baseUrl:`https://api.anthropic.com/v1`},{providerId:`openrouter`,label:`OpenRouter`,baseUrl:`https://openrouter.ai/api/v1`},{providerId:`custom`,label:`自定义(OpenAI 兼容)`,baseUrl:``}];function presetLabel(e){return PRESET_ENDPOINTS.find(t=>t.providerId===e)?.label??e}function toPlain(e){return JSON.parse(JSON.stringify(e))}function featureKey(e,t){return`feature:${e}:${t}`}async function loadFeatureData(e,t){let n=featureKey(e,t);return(await browser.storage.local.get(n))?.[n]??null}async function saveFeatureData(e,t,n){await browser.storage.local.set({[featureKey(e,t)]:toPlain(n)})}var FEATURE_ID=`ai-chat`,PROVIDERS_KEY=`providers`,ACTIVE_KEY=`activeProviderId`,LEGACY_V2_PROVIDERS_KEY=`aiProviders`,LEGACY_V2_ACTIVE_KEY=`activeProviderId`,LEGACY_V1_CONFIG_KEY=`aiConfig`;function isValidProvider(e){let t=e;return t!=null&&typeof t.id==`string`&&typeof t.providerId==`string`&&typeof t.modelId==`string`&&typeof t.apiKey==`string`}async function loadAiProviders(){let e=await loadFeatureData(FEATURE_ID,PROVIDERS_KEY);if(Array.isArray(e))return e.filter(isValidProvider);let t=(await browser.storage.local.get(LEGACY_V2_PROVIDERS_KEY))?.[LEGACY_V2_PROVIDERS_KEY];if(Array.isArray(t)){let e=t.filter(isValidProvider);return await saveAiProviders(e),await browser.storage.local.remove(LEGACY_V2_PROVIDERS_KEY),e}let n=(await browser.storage.local.get(LEGACY_V1_CONFIG_KEY))?.[LEGACY_V1_CONFIG_KEY];if(n!=null&&typeof n.providerId==`string`&&typeof n.modelId==`string`&&typeof n.apiKey==`string`){let e={id:crypto.randomUUID(),label:presetLabel(n.providerId),providerId:n.providerId,modelId:n.modelId,apiKey:n.apiKey,baseUrl:n.baseUrl};return await saveAiProviders([e]),await saveActiveProviderId(e.id),await browser.storage.local.remove(LEGACY_V1_CONFIG_KEY),[e]}return[]}async function saveAiProviders(e){await saveFeatureData(FEATURE_ID,PROVIDERS_KEY,e)}async function loadActiveProviderId(){let e=await loadFeatureData(FEATURE_ID,ACTIVE_KEY);if(typeof e==`string`)return e;let t=(await browser.storage.local.get(LEGACY_V2_ACTIVE_KEY))?.[LEGACY_V2_ACTIVE_KEY];return typeof t==`string`?(await saveActiveProviderId(t),await browser.storage.local.remove(LEGACY_V2_ACTIVE_KEY),t):null}async function saveActiveProviderId(e){await saveFeatureData(FEATURE_ID,ACTIVE_KEY,e)}async function loadActiveProvider(){let e=await loadAiProviders();if(e.length===0)return null;let t=await loadActiveProviderId();return e.find(e=>e.id===t)??e[0]??null}var background_default=defineBackground(()=>{browser.action.onClicked.addListener(e=>{browser.sidePanel.open({tabId:e.id})}),browser.contextMenus.create({id:`send-element-to-chat`,title:`发送该元素到 AI 聊天`,contexts:[`all`]}),browser.contextMenus.onClicked.addListener((t,n)=>{t.menuItemId!==`send-element-to-chat`||!n?.id||e(n.id)});async function e(e){try{let t=await browser.tabs.sendMessage(e,{type:`DOM_OP`,op:{action:`get-context-element`,params:{}}});if(!t?.ok){browser.runtime.sendMessage({_bridgeEvent:{type:`context-element`,error:t?.error??`获取元素失败`}});return}browser.runtime.sendMessage({_bridgeEvent:{type:`context-element`,data:t.data}})}catch(e){browser.runtime.sendMessage({_bridgeEvent:{type:`context-element`,error:e instanceof Error?e.message:String(e)}})}}onBridgeMessage(e=>{(e?.type===`chat-event`||e?.type===`result`||e?.type===`browser-op`||e?.type===`term-data`||e?.type===`term-exit`)&&browser.runtime.sendMessage({_bridgeEvent:e})}),onBridgeMessage(handleBrowserOp),initCdp(),browser.runtime.onMessage.addListener((e,n,i)=>{if(e?._bridgePassthrough)return sendToBridge(e.payload)||i({ok:!1,error:`bridge 未连接`}),!1;if(e?._bridgeStatus)return i({connected:isBridgeConnected()}),!1;if(e?._bridgeTestChat)return t(e._bridgeTestChat===!0?void 0:e._bridgeTestChat).then(i),!0});async function t(e){let t=e??await loadActiveProvider();if(!t?.apiKey)return{ok:!1,error:`尚未保存 AI 配置`};if(!isBridgeConnected())return{ok:!1,error:`bridge 未连接(请先启动 webbridge)`};let n=crypto.randomUUID();return new Promise(e=>{let i=setTimeout(()=>{a(),e({ok:!1,error:`测试超时`})},3e4),a=onBridgeMessage(t=>{t?.id===n&&t.type===`result`&&(clearTimeout(i),a(),t.ok?e({ok:!0,reply:t.data?.reply??``}):e({ok:!1,error:t.error??`调用失败`}))});sendToBridge({id:n,type:`chat`,chat:{config:{providerId:t.providerId,modelId:t.modelId,apiKey:t.apiKey,baseUrl:t.baseUrl},messages:[{role:`user`,content:`回复"连接成功"四个字即可`}]}})})}connectBridge()});function initPlugins(){}var logger={debug:(...e)=>([...e],void 0),log:(...e)=>([...e],void 0),warn:(...e)=>([...e],void 0),error:(...e)=>([...e],void 0)},result;try{result=background_default.main(),result instanceof Promise&&console.warn(`The background's main() function return a promise, but it must be synchronous`)}catch(e){throw logger.error(`The background crashed on startup!`),e}var background_entrypoint_default=result;return background_entrypoint_default})();
@@ -0,0 +1 @@
1
+ import{E as e,O as t,S as n,T as r,_ as i,c as a,d as o,g as s,l as c,n as l,o as u,p as d,t as f,u as p,w as m,x as h,y as g}from"./registry-BEPWwAh_.js";var _={class:`dashboard bg-white text-ink-800 dark:bg-ink-900 dark:text-ink-100`},v={class:`sidebar`},y={class:`registry`},b=[`onClick`],x={class:`config-area`},S={class:`desc`},C={key:1,class:`empty`},w={key:1,class:`empty`};u(l(s({__name:`App`,setup(s){let l=m(null),u=c(()=>f.find(e=>e.id===l.value));return i(()=>{l.value=f[0]?.id??null}),(i,s)=>(g(),d(`div`,_,[p(`aside`,v,[s[1]||=p(`h2`,null,`灵犀 · 设置`,-1),p(`section`,y,[s[0]||=p(`h3`,null,`全部功能`,-1),p(`ul`,null,[(g(!0),d(a,null,h(r(f),n=>(g(),d(`li`,{key:n.id,class:e({active:n.id===l.value}),onClick:e=>l.value=n.id},[p(`span`,null,t(n.icon)+` `+t(n.name),1)],10,b))),128))])])]),p(`main`,x,[u.value?(g(),d(a,{key:0},[p(`h1`,null,t(u.value.icon)+` `+t(u.value.name),1),p(`p`,S,t(u.value.description),1),u.value.configComponent?(g(),o(n(u.value.configComponent),{key:0})):(g(),d(`p`,C,`该功能暂无配置项`))],64)):(g(),d(`p`,w,`请从左侧选择一个功能`))])]))}}),[[`__scopeId`,`data-v-62fea180`]])).mount(`#app`);