chatlab-cli 0.26.3 → 0.27.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +10 -4
  2. package/dist/{chat-command-D37MMEJ7.mjs → chat-command-B7POB3C3.mjs} +6 -5
  3. package/dist/{chat-command-D37MMEJ7.mjs.map → chat-command-B7POB3C3.mjs.map} +1 -1
  4. package/dist/{chunk-K5SGXTVJ.mjs → chunk-3FUF3PEY.mjs} +21 -19
  5. package/dist/{chunk-K5SGXTVJ.mjs.map → chunk-3FUF3PEY.mjs.map} +1 -1
  6. package/dist/{chunk-742TAKEP.mjs → chunk-3JNVGW62.mjs} +2 -2
  7. package/dist/{chunk-VSOWNKPA.mjs → chunk-GFHSSCCR.mjs} +11 -1
  8. package/dist/{chunk-YPTJVTVJ.mjs → chunk-I7BHOZPX.mjs} +13159 -19038
  9. package/dist/chunk-I7BHOZPX.mjs.map +1 -0
  10. package/dist/chunk-N3G43SCQ.mjs +7337 -0
  11. package/dist/chunk-N3G43SCQ.mjs.map +1 -0
  12. package/dist/{chunk-GNGZHBKM.mjs → chunk-RJ4D4QWK.mjs} +42 -7
  13. package/dist/chunk-RJ4D4QWK.mjs.map +1 -0
  14. package/dist/{chunk-VCN64OD6.mjs → chunk-SAE2H2LN.mjs} +7 -5
  15. package/dist/{chunk-VCN64OD6.mjs.map → chunk-SAE2H2LN.mjs.map} +1 -1
  16. package/dist/{chunk-QMXNJRTT.mjs → chunk-SIVERPF5.mjs} +280 -104
  17. package/dist/chunk-SIVERPF5.mjs.map +1 -0
  18. package/dist/{chunk-RMITK4IC.mjs → chunk-WQMKKUSD.mjs} +468 -118
  19. package/dist/chunk-WQMKKUSD.mjs.map +1 -0
  20. package/dist/{chunk-D5MWER7N.mjs → chunk-YUFYTDRH.mjs} +6 -4
  21. package/dist/{chunk-D5MWER7N.mjs.map → chunk-YUFYTDRH.mjs.map} +1 -1
  22. package/dist/cli.mjs +5 -4
  23. package/dist/{http-6F6TYWCI.mjs → http-A54ZBBAY.mjs} +10 -9
  24. package/dist/{import-VYPOMSSA.mjs → import-EA3TB3S2.mjs} +6 -5
  25. package/dist/index.mjs +10 -9
  26. package/dist/{mcp-AR7L5FA3.mjs → mcp-DJDOWHH3.mjs} +11 -9
  27. package/dist/{mcp-AR7L5FA3.mjs.map → mcp-DJDOWHH3.mjs.map} +1 -1
  28. package/dist/onnxruntime_binding-6Q6HXASN.node +0 -0
  29. package/dist/onnxruntime_binding-EKZT2NRK.node +0 -0
  30. package/dist/onnxruntime_binding-P6S7V3CI.node +0 -0
  31. package/dist/onnxruntime_binding-PJNNIIUO.node +0 -0
  32. package/dist/onnxruntime_binding-UN6SPTQK.node +0 -0
  33. package/dist/semantic-index-worker.mjs +34 -0
  34. package/dist/semantic-index-worker.mjs.map +1 -0
  35. package/dist/{service-KZTHBDQ5.mjs → service-KGL3RAIA.mjs} +2 -2
  36. package/dist/{src-6S7JPKHX.mjs → src-EKPMJRG6.mjs} +65 -109
  37. package/dist/{stream-import-KZFC3XT2.mjs → stream-import-FQFNRQ2B.mjs} +5 -4
  38. package/dist/transformers.node-PUMHAODN.mjs +42889 -0
  39. package/dist/transformers.node-PUMHAODN.mjs.map +1 -0
  40. package/dist/{update-checker-3N7HQEP2.mjs → update-checker-LGMTEKMT.mjs} +2 -2
  41. package/dist/worker-runtime-UH2OBO3T.mjs +71 -0
  42. package/dist/worker-runtime-UH2OBO3T.mjs.map +1 -0
  43. package/dist-web/assets/{DebugToolsPanel-DzZmSzIU.css → DebugToolsPanel-DFw6_G5V.css} +1 -1
  44. package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-NL1sTF6i.js +110 -0
  45. package/dist-web/assets/{MessageExportModal-CF6yaor7.js → MessageExportModal-B60rvfCh.js} +1 -1
  46. package/dist-web/assets/{electron-DKVw61Ww.js → electron-BRUg9LnY.js} +1 -1
  47. package/dist-web/assets/{fetch-CUw-PUYP.js → fetch-BIpjJHxj.js} +1 -1
  48. package/dist-web/assets/{fetch-BMdgfBVS.js → fetch-BRsMdFcn.js} +1 -1
  49. package/dist-web/assets/{fetch-CPeSfqsU.js → fetch-C-m3IysH.js} +1 -1
  50. package/dist-web/assets/{fetch-CpYSD089.js → fetch-Cma-mZjd.js} +1 -1
  51. package/dist-web/assets/{fetch-D2jNBqs8.js → fetch-DE8gj5Ke.js} +1 -1
  52. package/dist-web/assets/{fetch-DqEMAea3.js → fetch-DLAp7h55.js} +1 -1
  53. package/dist-web/assets/{fetch-BvVfWR-P.js → fetch-DNSaxRnL.js} +1 -1
  54. package/dist-web/assets/{fetch-BC8jyJ_U.js → fetch-DOEbyLSD.js} +1 -1
  55. package/dist-web/assets/{fetch-BQlEQsqi.js → fetch-DSN-QYZE.js} +1 -1
  56. package/dist-web/assets/{fetch-Bh6HC-IR.js → fetch-woAa3H2L.js} +1 -1
  57. package/dist-web/assets/index-B3mDjury.js +11 -0
  58. package/dist-web/assets/{index-Qh0XLt3R.js → index-B9I-Y3fR.js} +1 -1
  59. package/dist-web/assets/{index-DqybGdJH.css → index-BX3tqfLz.css} +1 -1
  60. package/dist-web/assets/index-GAU7LI1r.js +173 -0
  61. package/dist-web/assets/index-I3SWZjnW.css +1 -0
  62. package/dist-web/assets/index-YmzTgkb2.css +1 -0
  63. package/dist-web/assets/index-iwqJDVMJ.js +2 -0
  64. package/dist-web/assets/index-o6veAyTB.js +64 -0
  65. package/dist-web/assets/{index-BHQnAj6l.js → index-r_zHR2t9.js} +1 -1
  66. package/dist-web/assets/{web-Bx2TiHDk.js → web-C2UtGskd.js} +1 -1
  67. package/dist-web/index.html +2 -2
  68. package/package.json +1 -1
  69. package/dist/chunk-GNGZHBKM.mjs.map +0 -1
  70. package/dist/chunk-QMXNJRTT.mjs.map +0 -1
  71. package/dist/chunk-RMITK4IC.mjs.map +0 -1
  72. package/dist/chunk-YPTJVTVJ.mjs.map +0 -1
  73. package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-BTdqmm0y.js +0 -107
  74. package/dist-web/assets/index-BwzuCu5R.js +0 -2
  75. package/dist-web/assets/index-CG746E15.js +0 -64
  76. package/dist-web/assets/index-CXoQ_U22.js +0 -173
  77. package/dist-web/assets/index-HgIuP1Td.css +0 -1
  78. package/dist-web/assets/index-R82N2_0b.css +0 -1
  79. package/dist-web/assets/index-wPAmuQZY.js +0 -11
  80. /package/dist/{chunk-742TAKEP.mjs.map → chunk-3JNVGW62.mjs.map} +0 -0
  81. /package/dist/{chunk-VSOWNKPA.mjs.map → chunk-GFHSSCCR.mjs.map} +0 -0
  82. /package/dist/{http-6F6TYWCI.mjs.map → http-A54ZBBAY.mjs.map} +0 -0
  83. /package/dist/{import-VYPOMSSA.mjs.map → import-EA3TB3S2.mjs.map} +0 -0
  84. /package/dist/{service-KZTHBDQ5.mjs.map → service-KGL3RAIA.mjs.map} +0 -0
  85. /package/dist/{src-6S7JPKHX.mjs.map → src-EKPMJRG6.mjs.map} +0 -0
  86. /package/dist/{stream-import-KZFC3XT2.mjs.map → stream-import-FQFNRQ2B.mjs.map} +0 -0
  87. /package/dist/{update-checker-3N7HQEP2.mjs.map → update-checker-LGMTEKMT.mjs.map} +0 -0
@@ -8,7 +8,7 @@ import {
8
8
  getVersion
9
9
  } from "./chunk-5ADKYYNA.mjs";
10
10
  import "./chunk-FJ35V3TE.mjs";
11
- import "./chunk-VSOWNKPA.mjs";
11
+ import "./chunk-GFHSSCCR.mjs";
12
12
 
13
13
  // src/update-checker.ts
14
14
  import * as fs from "fs";
@@ -216,4 +216,4 @@ export {
216
216
  performCliSelfUpdate,
217
217
  startPeriodicUpdateCheck
218
218
  };
219
- //# sourceMappingURL=update-checker-3N7HQEP2.mjs.map
219
+ //# sourceMappingURL=update-checker-LGMTEKMT.mjs.map
@@ -0,0 +1,71 @@
1
+ import { createRequire as __createRequire } from 'module';
2
+ import { dirname as __pathDirname } from 'path';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __pathDirname(__filename);
7
+ import {
8
+ DatabaseManager,
9
+ StaticPathProvider,
10
+ createDatabaseManagerAdapter,
11
+ createSemanticIndexService
12
+ } from "./chunk-I7BHOZPX.mjs";
13
+ import "./chunk-GFHSSCCR.mjs";
14
+
15
+ // ../../packages/node-runtime/src/semantic-index/worker-runtime.ts
16
+ var SemanticIndexWorkerRuntime = class {
17
+ service = null;
18
+ options;
19
+ constructor(options) {
20
+ this.options = options;
21
+ }
22
+ async handleRequest(method, args) {
23
+ if (method === "__close") {
24
+ await this.close();
25
+ return null;
26
+ }
27
+ const service = this.ensureService();
28
+ const target = service;
29
+ const fn = target[method];
30
+ if (typeof fn !== "function") throw new Error(`Unsupported semantic index worker method: ${method}`);
31
+ return await fn.apply(service, args);
32
+ }
33
+ async close() {
34
+ const service = this.service;
35
+ this.service = null;
36
+ await service?.close();
37
+ }
38
+ ensureService() {
39
+ if (!this.service) {
40
+ this.service = this.options.serviceFactory();
41
+ void this.service.recover();
42
+ }
43
+ return this.service;
44
+ }
45
+ };
46
+ function createSemanticIndexWorkerRuntime(options) {
47
+ return new SemanticIndexWorkerRuntime(options);
48
+ }
49
+ function createSemanticIndexWorkerServiceFactory(options) {
50
+ return () => {
51
+ const pathProvider = new StaticPathProvider(options.paths);
52
+ const dbManager = new DatabaseManager(pathProvider, {
53
+ nativeBinding: options.nativeBinding,
54
+ runtime: options.runtime
55
+ });
56
+ const sessionAdapter = createDatabaseManagerAdapter(dbManager);
57
+ const loadSqliteVec = options.sqliteVecLoadablePath ? (db) => db.loadExtension(options.sqliteVecLoadablePath) : void 0;
58
+ return createSemanticIndexService({
59
+ pathProvider,
60
+ sessionAdapter,
61
+ nativeBinding: options.nativeBinding,
62
+ loadSqliteVec
63
+ });
64
+ };
65
+ }
66
+ export {
67
+ SemanticIndexWorkerRuntime,
68
+ createSemanticIndexWorkerRuntime,
69
+ createSemanticIndexWorkerServiceFactory
70
+ };
71
+ //# sourceMappingURL=worker-runtime-UH2OBO3T.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../packages/node-runtime/src/semantic-index/worker-runtime.ts"],"sourcesContent":["import type { RuntimeIdentity } from '../data-dir-compat'\nimport { DatabaseManager } from '../database-manager'\nimport { createDatabaseManagerAdapter } from '../services'\nimport { createSemanticIndexService } from './service'\nimport type { LoadSqliteVec } from './store'\nimport { StaticPathProvider, type StaticPathProviderSnapshot } from './static-path-provider'\nimport type { SemanticIndexRuntime } from './runtime'\n\nexport interface SemanticIndexWorkerStartupOptions {\n paths: StaticPathProviderSnapshot\n runtime: RuntimeIdentity\n nativeBinding?: string\n sqliteVecLoadablePath?: string\n}\n\nexport type SemanticIndexWorkerServiceFactory = () => SemanticIndexRuntime\n\nexport interface SemanticIndexWorkerRuntimeOptions {\n serviceFactory: SemanticIndexWorkerServiceFactory\n}\n\nexport class SemanticIndexWorkerRuntime {\n private service: SemanticIndexRuntime | null = null\n private readonly options: SemanticIndexWorkerRuntimeOptions\n\n constructor(options: SemanticIndexWorkerRuntimeOptions) {\n this.options = options\n }\n\n async handleRequest(method: string, args: unknown[]): Promise<unknown> {\n if (method === '__close') {\n await this.close()\n return null\n }\n const service = this.ensureService()\n const target = service as unknown as Record<string, (...args: unknown[]) => unknown>\n const fn = target[method]\n if (typeof fn !== 'function') throw new Error(`Unsupported semantic index worker method: ${method}`)\n return await fn.apply(service, args)\n }\n\n async close(): Promise<void> {\n const service = this.service\n this.service = null\n await service?.close()\n }\n\n private ensureService(): SemanticIndexRuntime {\n if (!this.service) {\n this.service = this.options.serviceFactory()\n void this.service.recover()\n }\n return this.service\n }\n}\n\nexport function createSemanticIndexWorkerRuntime(\n options: SemanticIndexWorkerRuntimeOptions\n): SemanticIndexWorkerRuntime {\n return new SemanticIndexWorkerRuntime(options)\n}\n\nexport function createSemanticIndexWorkerServiceFactory(\n options: SemanticIndexWorkerStartupOptions\n): SemanticIndexWorkerServiceFactory {\n return () => {\n const pathProvider = new StaticPathProvider(options.paths)\n const dbManager = new DatabaseManager(pathProvider, {\n nativeBinding: options.nativeBinding,\n runtime: options.runtime,\n })\n const sessionAdapter = createDatabaseManagerAdapter(dbManager)\n const loadSqliteVec: LoadSqliteVec | undefined = options.sqliteVecLoadablePath\n ? (db) => db.loadExtension(options.sqliteVecLoadablePath!)\n : undefined\n\n return createSemanticIndexService({\n pathProvider,\n sessionAdapter,\n nativeBinding: options.nativeBinding,\n loadSqliteVec,\n })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAqBO,IAAM,6BAAN,MAAiC;AAAA,EAC9B,UAAuC;AAAA,EAC9B;AAAA,EAEjB,YAAY,SAA4C;AACtD,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,cAAc,QAAgB,MAAmC;AACrE,QAAI,WAAW,WAAW;AACxB,YAAM,KAAK,MAAM;AACjB,aAAO;AAAA,IACT;AACA,UAAM,UAAU,KAAK,cAAc;AACnC,UAAM,SAAS;AACf,UAAM,KAAK,OAAO,MAAM;AACxB,QAAI,OAAO,OAAO,WAAY,OAAM,IAAI,MAAM,6CAA6C,MAAM,EAAE;AACnG,WAAO,MAAM,GAAG,MAAM,SAAS,IAAI;AAAA,EACrC;AAAA,EAEA,MAAM,QAAuB;AAC3B,UAAM,UAAU,KAAK;AACrB,SAAK,UAAU;AACf,UAAM,SAAS,MAAM;AAAA,EACvB;AAAA,EAEQ,gBAAsC;AAC5C,QAAI,CAAC,KAAK,SAAS;AACjB,WAAK,UAAU,KAAK,QAAQ,eAAe;AAC3C,WAAK,KAAK,QAAQ,QAAQ;AAAA,IAC5B;AACA,WAAO,KAAK;AAAA,EACd;AACF;AAEO,SAAS,iCACd,SAC4B;AAC5B,SAAO,IAAI,2BAA2B,OAAO;AAC/C;AAEO,SAAS,wCACd,SACmC;AACnC,SAAO,MAAM;AACX,UAAM,eAAe,IAAI,mBAAmB,QAAQ,KAAK;AACzD,UAAM,YAAY,IAAI,gBAAgB,cAAc;AAAA,MAClD,eAAe,QAAQ;AAAA,MACvB,SAAS,QAAQ;AAAA,IACnB,CAAC;AACD,UAAM,iBAAiB,6BAA6B,SAAS;AAC7D,UAAM,gBAA2C,QAAQ,wBACrD,CAAC,OAAO,GAAG,cAAc,QAAQ,qBAAsB,IACvD;AAEJ,WAAO,2BAA2B;AAAA,MAChC;AAAA,MACA;AAAA,MACA,eAAe,QAAQ;AAAA,MACvB;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -1 +1 @@
1
- .writing-vertical[data-v-19a25590]{writing-mode:vertical-rl;text-orientation:mixed}.data-flow-bg[data-v-19a25590]{background:repeating-linear-gradient(0deg,transparent,transparent 20px,currentColor 20px,currentColor 21px);animation:dataFlow-19a25590 20s linear infinite}@keyframes dataFlow-19a25590{0%{transform:translateY(0)}to{transform:translateY(-100px)}}.mention-menu-enter-active[data-v-0262c6da],.mention-menu-leave-active[data-v-0262c6da]{transition:opacity .16s ease,transform .16s ease}.mention-menu-enter-from[data-v-0262c6da],.mention-menu-leave-to[data-v-0262c6da]{transform:translateY(8px);opacity:0}.slash-menu-enter-active[data-v-0853b251],.slash-menu-leave-active[data-v-0853b251]{transition:opacity .16s ease,transform .16s ease}.slash-menu-enter-from[data-v-0853b251],.slash-menu-leave-to[data-v-0853b251]{transform:translateY(8px);opacity:0}.custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar{width:4px}.custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar-track{background:transparent}.custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar-thumb{border-radius:4px;background-color:#9ca3af4d}.dark .custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar-thumb{background-color:#9ca3af26}.slide-fade-enter-active[data-v-9798e70f],.slide-fade-leave-active[data-v-9798e70f]{transition:all .3s ease-out}.slide-fade-enter-from[data-v-9798e70f],.slide-fade-leave-to[data-v-9798e70f]{transform:translate(20px);opacity:0}.slide-up-enter-active[data-v-9798e70f],.slide-up-leave-active[data-v-9798e70f]{transition:all .3s ease-out}.slide-up-enter-from[data-v-9798e70f],.slide-up-leave-to[data-v-9798e70f]{transform:translateY(10px);opacity:0}.fade-up-enter-active[data-v-9798e70f],.fade-up-leave-active[data-v-9798e70f]{transition:opacity .2s ease-out}.fade-up-enter-from[data-v-9798e70f],.fade-up-leave-to[data-v-9798e70f]{opacity:0}.fade-enter-active[data-v-0df46b7b],.fade-leave-active[data-v-0df46b7b]{transition:opacity .15s ease}.fade-enter-from[data-v-0df46b7b],.fade-leave-to[data-v-0df46b7b]{opacity:0}.fade-enter-active[data-v-d712cb76],.fade-leave-active[data-v-d712cb76]{transition:opacity .15s ease}.fade-enter-from[data-v-d712cb76],.fade-leave-to[data-v-d712cb76]{opacity:0}.titlebar-drag-cover[data-v-b3e18446]{position:absolute;left:0;right:0;z-index:30;top:calc(-1 * var(--titlebar-area-height));height:calc(var(--titlebar-area-height) + 1rem);-webkit-app-region:drag}.header-actions[data-v-b3e18446]{-webkit-app-region:drag}.header-actions[data-v-b3e18446] button,.header-actions[data-v-b3e18446] button *,.header-actions[data-v-b3e18446] a,.header-actions[data-v-b3e18446] a *,.header-actions[data-v-b3e18446] [role=button],.header-actions[data-v-b3e18446] [role=button] *{-webkit-app-region:no-drag}
1
+ .writing-vertical[data-v-19a25590]{writing-mode:vertical-rl;text-orientation:mixed}.data-flow-bg[data-v-19a25590]{background:repeating-linear-gradient(0deg,transparent,transparent 20px,currentColor 20px,currentColor 21px);animation:dataFlow-19a25590 20s linear infinite}@keyframes dataFlow-19a25590{0%{transform:translateY(0)}to{transform:translateY(-100px)}}.mention-menu-enter-active[data-v-0262c6da],.mention-menu-leave-active[data-v-0262c6da]{transition:opacity .16s ease,transform .16s ease}.mention-menu-enter-from[data-v-0262c6da],.mention-menu-leave-to[data-v-0262c6da]{transform:translateY(8px);opacity:0}.slash-menu-enter-active[data-v-0853b251],.slash-menu-leave-active[data-v-0853b251]{transition:opacity .16s ease,transform .16s ease}.slash-menu-enter-from[data-v-0853b251],.slash-menu-leave-to[data-v-0853b251]{transform:translateY(8px);opacity:0}.custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar{width:4px}.custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar-track{background:transparent}.custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar-thumb{border-radius:4px;background-color:#9ca3af4d}.dark .custom-scrollbar[data-v-94ffe515]::-webkit-scrollbar-thumb{background-color:#9ca3af26}.slide-fade-enter-active[data-v-9fa5fc54],.slide-fade-leave-active[data-v-9fa5fc54]{transition:all .3s ease-out}.slide-fade-enter-from[data-v-9fa5fc54],.slide-fade-leave-to[data-v-9fa5fc54]{transform:translate(20px);opacity:0}.slide-up-enter-active[data-v-9fa5fc54],.slide-up-leave-active[data-v-9fa5fc54]{transition:all .3s ease-out}.slide-up-enter-from[data-v-9fa5fc54],.slide-up-leave-to[data-v-9fa5fc54]{transform:translateY(10px);opacity:0}.fade-up-enter-active[data-v-9fa5fc54],.fade-up-leave-active[data-v-9fa5fc54]{transition:opacity .2s ease-out}.fade-up-enter-from[data-v-9fa5fc54],.fade-up-leave-to[data-v-9fa5fc54]{opacity:0}.fade-enter-active[data-v-0df46b7b],.fade-leave-active[data-v-0df46b7b]{transition:opacity .15s ease}.fade-enter-from[data-v-0df46b7b],.fade-leave-to[data-v-0df46b7b]{opacity:0}.fade-enter-active[data-v-d712cb76],.fade-leave-active[data-v-d712cb76]{transition:opacity .15s ease}.fade-enter-from[data-v-d712cb76],.fade-leave-to[data-v-d712cb76]{opacity:0}.titlebar-drag-cover[data-v-b3e18446]{position:absolute;left:0;right:0;z-index:30;top:calc(-1 * var(--titlebar-area-height));height:calc(var(--titlebar-area-height) + 1rem);-webkit-app-region:drag}.header-actions[data-v-b3e18446]{-webkit-app-region:drag}.header-actions[data-v-b3e18446] button,.header-actions[data-v-b3e18446] button *,.header-actions[data-v-b3e18446] a,.header-actions[data-v-b3e18446] a *,.header-actions[data-v-b3e18446] [role=button],.header-actions[data-v-b3e18446] [role=button] *{-webkit-app-region:no-drag}