zcode-pro 1.4.1 → 1.5.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/README.en.md +7 -6
- package/README.md +10 -9
- package/dist/inject.js +330 -53
- package/package.json +1 -1
- package/src/host/helper.mjs +3 -1
- package/src/inject/core.js +50 -38
- package/src/inject/features/composer-provider.js +112 -0
- package/src/inject/features/settings-dialog.js +36 -14
- package/src/inject/features/table-copy.js +148 -0
- package/src/inject/index.js +4 -0
- package/src/inject/ui.js +12 -1
package/dist/inject.js
CHANGED
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
agentsSave: "\u4FDD\u5B58",
|
|
115
115
|
agentsSaved: "\u5168\u5C40\u63D0\u793A\u8BCD\u5DF2\u4FDD\u5B58",
|
|
116
116
|
agentsLoadFailed: "\u8BFB\u53D6\u5168\u5C40\u63D0\u793A\u8BCD\u5931\u8D25",
|
|
117
|
-
proxyDesc: "\u4E3A ZCode Pro \u672C\u5730\u52A9\u624B\u53D1\u8D77\u7684\u7F51\u7EDC\u8BBF\u95EE\u8BBE\u7F6E HTTP \u4EE3\u7406\uFF1A\u63D2\u4EF6\u5E02\u573A\u7684\u66F4\u65B0\u4E0E\u5B89\u88C5\u3001\u63D2\u4EF6\u4F9D\u8D56\u8F6F\u4EF6\u7684\u5B89\u88C5\u4E0E\u5347\u7EA7\u3001WebDAV \u540C\u6B65\u90FD\u53EF\u8D70\u8BE5\u4EE3\u7406\uFF0C\u7528\u4E0B\u65B9\u5F00\u5173\u9009\u62E9\u751F\u6548\u8303\u56F4\u3002\u4E0D\u5F71\u54CD ZCode \u5E94\u7528\u672C\u8EAB\u4E0E\u6A21\u578B\u8BF7\u6C42\
|
|
117
|
+
proxyDesc: "\u4E3A ZCode Pro \u672C\u5730\u52A9\u624B\u53D1\u8D77\u7684\u7F51\u7EDC\u8BBF\u95EE\u8BBE\u7F6E HTTP \u4EE3\u7406\uFF1A\u63D2\u4EF6\u5E02\u573A\u7684\u66F4\u65B0\u4E0E\u5B89\u88C5\u3001\u63D2\u4EF6\u4F9D\u8D56\u8F6F\u4EF6\u7684\u5B89\u88C5\u4E0E\u5347\u7EA7\u3001WebDAV \u540C\u6B65\u90FD\u53EF\u8D70\u8BE5\u4EE3\u7406\uFF0C\u7528\u4E0B\u65B9\u5F00\u5173\u9009\u62E9\u751F\u6548\u8303\u56F4\u3002\u4E0D\u5F71\u54CD ZCode \u5E94\u7528\u672C\u8EAB\u4E0E\u6A21\u578B\u8BF7\u6C42\u3002",
|
|
118
118
|
proxyPlaceholder: "http://127.0.0.1:7890",
|
|
119
119
|
proxySave: "\u4FDD\u5B58",
|
|
120
120
|
proxySaved: "\u4EE3\u7406\u8BBE\u7F6E\u5DF2\u4FDD\u5B58",
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
proxyScopeDeps: "\u63D2\u4EF6\u4F9D\u8D56\u8F6F\u4EF6",
|
|
129
129
|
proxyScopeDepsDesc: "headroom \u4E0E rtk \u7684\u5B89\u88C5\u3001\u68C0\u67E5\u66F4\u65B0\u4E0E\u5347\u7EA7\uFF08pip \u4E0E GitHub \u4E0B\u8F7D\uFF09\u8D70\u4EE3\u7406\u3002",
|
|
130
130
|
proxyScopeSync: "\u540C\u6B65",
|
|
131
|
-
proxyScopeSyncDesc: "WebDAV \u4E0A\u4F20\u4E0E\u4E0B\u8F7D\u8D70\u4EE3\u7406\u3002
|
|
131
|
+
proxyScopeSyncDesc: "WebDAV \u4E0A\u4F20\u4E0E\u4E0B\u8F7D\u8D70\u4EE3\u7406\u3002",
|
|
132
132
|
tabSync: "\u540C\u6B65",
|
|
133
133
|
tabDebug: "\u8C03\u8BD5",
|
|
134
134
|
testNoSessionHint: "\u9009\u62E9\u201C\u8DDF\u968F\u5F53\u524D\u4F1A\u8BDD[\u5F53\u524D\u6A21\u578B]\u201D\u65F6\uFF0C\u9009\u62E9\u4E0A\u6B21\u4F1A\u8BDD\u4E2D\u4F7F\u7528\u7684\u4F9B\u5E94\u5546[\u6A21\u578B]",
|
|
@@ -215,13 +215,13 @@
|
|
|
215
215
|
defaultValue: "\u9ED8\u8BA4",
|
|
216
216
|
resetDefault: "\u6062\u590D\u9ED8\u8BA4",
|
|
217
217
|
featureProjectMenu: "\u9879\u76EE\u83DC\u5355\u589E\u5F3A",
|
|
218
|
-
featureProjectMenuDesc: "\u9879\u76EE\
|
|
218
|
+
featureProjectMenuDesc: "\u9879\u76EE\u66F4\u591A\u83DC\u5355\uFF1A\u6253\u5F00\u6587\u4EF6\u5939\u4E0E\u590D\u5236\u8DEF\u5F84\uFF08\u522B\u540D\u4E0E\u5207\u6362\u6587\u4EF6\u5939\u5DF2\u505C\u7528\uFF09\u3002",
|
|
219
219
|
featureTaskOrder: "\u4FA7\u8FB9\u680F\u4F1A\u8BDD\u62D6\u52A8\u6392\u5E8F",
|
|
220
|
-
featureTaskOrderDesc: "\
|
|
220
|
+
featureTaskOrderDesc: "\u62D6\u52A8\u8C03\u6574\u7F6E\u9876\u3001\u9879\u76EE\u4E0E\u5206\u7EC4\u4E2D\u7684\u4F1A\u8BDD\u987A\u5E8F\uFF0C\u91CD\u542F\u540E\u4E0D\u53D8\u3002",
|
|
221
221
|
featureSessionSwitch: "\u4F1A\u8BDD\u5FEB\u6377\u5207\u6362",
|
|
222
|
-
featureSessionSwitchDesc: "{last} \
|
|
222
|
+
featureSessionSwitchDesc: "{last} \u6765\u56DE\u4E0A\u6B21\u4F1A\u8BDD\uFF1Balt+\u65B9\u5411\u952E/\u5FEB\u6377\u952E\u9009\u6700\u8FD1\u4F1A\u8BDD\uFF1B\u952E\u4F4D\u53EF\u6539",
|
|
223
223
|
featureTitleLock: "\u91CD\u547D\u540D\u4F1A\u8BDD\u540D\u9501\u5B9A",
|
|
224
|
-
featureTitleLockDesc: "\u624B\u52A8\u91CD\u547D\u540D\u8FC7\u7684\u4F1A\u8BDD\u4E0D\
|
|
224
|
+
featureTitleLockDesc: "\u624B\u52A8\u91CD\u547D\u540D\u8FC7\u7684\u4F1A\u8BDD\u4E0D\u88AB\u81EA\u52A8\u6807\u9898\u8986\u76D6\uFF0C\u4FA7\u680F\u59CB\u7EC8\u663E\u793A\u91CD\u547D\u540D\u540E\u7684\u540D\u5B57\u3002",
|
|
225
225
|
tabTitleGen: "\u4EFB\u52A1\u540D\u63D0\u793A\u8BCD",
|
|
226
226
|
titleGenShortDesc: "\u65B0\u4F1A\u8BDD\u5F00\u59CB\u4F5C\u7B54\u65F6\uFF0C\u6309\u6240\u9009\u4F9B\u5E94\u5546\u4E0E\u63D0\u793A\u8BCD\u751F\u6210\u4EFB\u52A1\u540D\u5E76\u6309\u624B\u52A8\u91CD\u547D\u540D\u4FDD\u5B58\uFF0C\u5B98\u65B9\u81EA\u52A8\u6807\u9898\u4E0D\u518D\u8986\u76D6\u3002",
|
|
227
227
|
titleGenEnabled: "\u542F\u7528",
|
|
@@ -247,7 +247,7 @@
|
|
|
247
247
|
titleGenTestOk: "\u751F\u6210\u7ED3\u679C\uFF1A",
|
|
248
248
|
titleGenTestFailed: "\u751F\u6210\u5931\u8D25",
|
|
249
249
|
featureWsRunning: "\u6298\u53E0\u65F6\u4EFB\u52A1\u8FD0\u884C\u4E2D\u63D0\u793A",
|
|
250
|
-
featureWsRunningDesc: "\u6709\u4F1A\u8BDD\
|
|
250
|
+
featureWsRunningDesc: "\u6709\u4F1A\u8BDD\u8FD0\u884C\u65F6\uFF0C\u6298\u53E0\u7684\u9879\u76EE\u4E0E\u4EFB\u52A1\u5206\u533A\u5934\u663E\u793A\u52A0\u8F7D\u56FE\u6807\uFF0C\u5168\u90E8\u7ED3\u675F\u6D88\u5931\u3002",
|
|
251
251
|
tabPerformance: "\u6027\u80FD",
|
|
252
252
|
perfDesc: "ZCode \u4E3A\u6BCF\u4E2A\u6253\u5F00\u8FC7\u7684\u9879\u76EE\u5E38\u9A7B\u4E00\u4E2A\u4F1A\u8BDD\u8FDB\u7A0B\uFF0C\u5E94\u7528\u81EA\u8EAB\u4E0D\u4F1A\u56DE\u6536\uFF0C\u9879\u76EE\u591A\u4E86\u5185\u5B58\u5360\u7528\u5C31\u9AD8\u3002\u5F00\u542F\u540E\uFF0C\u957F\u65F6\u95F4\u672A\u4F7F\u7528\u4E14\u6CA1\u6709\u4EFB\u52A1\u5728\u8DD1\u7684\u9879\u76EE\u4F1A\u88AB\u81EA\u52A8\u91CA\u653E\uFF1A\u4F1A\u8BDD\u8BB0\u5F55\u4E0D\u53D7\u5F71\u54CD\uFF0C\u518D\u6B21\u6253\u5F00\u65F6\u81EA\u52A8\u6062\u590D\uFF0C\u4EC5\u9996\u6B21\u56DE\u590D\u6709\u51E0\u79D2\u7B49\u5F85\u3002\u6B63\u5728\u4F7F\u7528\u7684\u9879\u76EE\u3001\u8FD0\u884C\u4E2D\u7684\u4F1A\u8BDD\u4E0E\u540E\u53F0\u547D\u4EE4\u3001\u5B9A\u65F6\u4EFB\u52A1\u90FD\u4E0D\u4F1A\u88AB\u56DE\u6536\u3002\u540E\u53F0\u547D\u4EE4\u68C0\u6D4B\u4F9D\u8D56\u7CFB\u7EDF\u8FDB\u7A0B\u4FE1\u606F\uFF08Linux / macOS / Windows \u5404\u8D70\u7CFB\u7EDF\u81EA\u5E26\u5DE5\u5177\uFF09\uFF0C\u68C0\u6D4B\u4E0D\u53EF\u7528\u65F6\u529F\u80FD\u81EA\u52A8\u505C\u7528\u3002",
|
|
253
253
|
featureIdleReclaim: "\u7A7A\u95F2\u9879\u76EE\u5185\u5B58\u56DE\u6536",
|
|
@@ -257,17 +257,17 @@
|
|
|
257
257
|
idleReclaimStartupHint: "\u5E94\u7528\u542F\u52A8\u4F1A\u4E3A\u6BCF\u4E2A\u6062\u590D\u7684\u9879\u76EE\u9884\u70ED\u8FDB\u7A0B\uFF0C\u5230\u70B9\u628A\u672A\u4F7F\u7528\u7684\u9879\u76EE\u4E00\u6B21\u6536\u6389\uFF1B0 = \u542F\u52A8\u540E\u7ACB\u5373\u56DE\u6536\uFF0C\u8BE5\u6B21\u4E0D\u53D7\u4E0A\u4E00\u9879\u7A7A\u95F2\u65F6\u957F\u9650\u5236",
|
|
258
258
|
idleReclaimUnit: "\u5206\u949F",
|
|
259
259
|
featureToolbarIcons: "\u4FA7\u680F\u83DC\u5355\u5E76\u5165\u9876\u680F",
|
|
260
|
-
featureToolbarIconsDesc: "\
|
|
260
|
+
featureToolbarIconsDesc: "\u65B0\u5EFA\u4EFB\u52A1/\u641C\u7D22/\u81EA\u52A8\u5316/\u63D2\u4EF6\u5E02\u573A\u6536\u6210\u9876\u680F\u56FE\u6807\u6309\u94AE\u3002",
|
|
261
261
|
tbNewTask: "\u65B0\u5EFA\u4EFB\u52A1",
|
|
262
262
|
tbSearch: "\u641C\u7D22",
|
|
263
263
|
tbAutomations: "\u81EA\u52A8\u5316",
|
|
264
264
|
tbPluginStore: "\u63D2\u4EF6\u5E02\u573A",
|
|
265
265
|
featurePinnedCollapse: "\u5DF2\u7F6E\u9876\u5206\u533A\u53EF\u6298\u53E0",
|
|
266
|
-
featurePinnedCollapseDesc: "\u4FA7\u8FB9\u680F\
|
|
266
|
+
featurePinnedCollapseDesc: "\u4FA7\u8FB9\u680F\u5DF2\u7F6E\u9876\u6807\u9898\u53EF\u70B9\u51FB\u6298\u53E0/\u5C55\u5F00\u5176\u4EFB\u52A1\u5217\u8868\u3002",
|
|
267
267
|
featureSandboxReclaim: "\u63D2\u4EF6\u754C\u9762\u6C99\u7BB1\u56DE\u6536",
|
|
268
|
-
featureSandboxReclaimDesc: "\
|
|
268
|
+
featureSandboxReclaimDesc: "\u6C99\u7BB1\u6EE1 64 \u4E2A\u65F6\u81EA\u52A8\u91CA\u653E\u6700\u65E9\u7684\uFF0C\u65B0\u5361\u7247\u4E0D\u518D\u6253\u4E0D\u5F00\uFF1B\u65E7\u5361\u91CD\u65B0\u6253\u5F00\u6240\u5728\u4F1A\u8BDD\u5373\u53EF\u6062\u590D\u3002",
|
|
269
269
|
featurePluginCardRetry: "\u63D2\u4EF6\u5361\u7247\u81EA\u52A8\u91CD\u8BD5",
|
|
270
|
-
featurePluginCardRetryDesc: "\u56E0\u540D\u989D\u4E0A\u9650\u52A0\u8F7D\u5931\u8D25\u7684\u63D2\u4EF6\u5361\u7247\u81EA\u52A8\u70B9\u51FB\
|
|
270
|
+
featurePluginCardRetryDesc: "\u56E0\u540D\u989D\u4E0A\u9650\u52A0\u8F7D\u5931\u8D25\u7684\u63D2\u4EF6\u5361\u7247\u81EA\u52A8\u70B9\u51FB\u91CD\u65B0\u52A0\u8F7D\uFF0C\u540D\u989D\u7A7A\u51FA\u540E\u81EA\u52A8\u6062\u590D\u3002",
|
|
271
271
|
visionCardUi: "\u601D\u8003\u8FC7\u7A0B\u663E\u793A\u8BC6\u56FE\u5361\u7247",
|
|
272
272
|
pinnedToggleAria: "\u6298\u53E0/\u5C55\u5F00\u5DF2\u7F6E\u9876",
|
|
273
273
|
sidebarProjectSpacingName: "\u9879\u76EE\u95F4\u8DDD",
|
|
@@ -290,7 +290,7 @@
|
|
|
290
290
|
switcherAttentionHint: "\u8FD0\u884C\u4E2D / \u8FD0\u884C\u5B8C\u672A\u67E5\u770B\u7684\u4EFB\u52A1 \xB7 {prev} / {next} \u6216 \u2191 / \u2193 \u9009\u62E9\uFF0CEnter \u6216\u677E\u5F00 alt \u5207\u6362",
|
|
291
291
|
switcherAttentionEmpty: "\u6682\u65E0\u8FD0\u884C\u4E2D\u6216\u672A\u67E5\u770B\u7684\u4EFB\u52A1",
|
|
292
292
|
featureNewtabPanels: "\u65B0\u6807\u7B7E\u9875\u63D2\u4EF6\u9762\u677F\u5165\u53E3",
|
|
293
|
-
featureNewtabPanelsDesc: "\
|
|
293
|
+
featureNewtabPanelsDesc: "\u65B0\u6807\u7B7E\u9875\u52A0\u5165\u7B2C\u4E09\u65B9\u63D2\u4EF6\uFF08headroom\u3001rtk \u7B49\uFF09\u7684\u9762\u677F\u5361\u7247\uFF0C\u70B9\u51FB\u5728\u4FA7\u8FB9\u9762\u677F\u6253\u5F00\u3002",
|
|
294
294
|
ntpDescSuffix: "\u63D2\u4EF6\u9762\u677F",
|
|
295
295
|
ntpNeedSession: "\u5148\u6253\u5F00\u4E00\u4E2A\u4EFB\u52A1\u4F1A\u8BDD\uFF0C\u518D\u4ECE\u65B0\u6807\u7B7E\u9875\u6253\u5F00\u63D2\u4EF6\u9762\u677F",
|
|
296
296
|
featureStatusBarDesc: "\u63D0\u95EE\u8F93\u5165\u6846\u53F3\u4E0B\u89D2\u548C\u6BCF\u8F6E\u56DE\u7B54\u6700\u540E\u663E\u793A\u7EDF\u8BA1\u9879\u3002",
|
|
@@ -348,6 +348,8 @@
|
|
|
348
348
|
themeBgPanel: "\u9762\u677F\u4E0D\u900F\u660E\u5EA6",
|
|
349
349
|
themeBgPanelHint: "\u4FA7\u680F\u3001\u9762\u677F\u4E0E\u6807\u7B7E\u680F\u7684\u4E0D\u900F\u660E\u7A0B\u5EA6\u3002\u8D8A\u4F4E\uFF0C\u900F\u51FA\u7684\u56FE\u7247\u8D8A\u591A\u3002",
|
|
350
350
|
themeBgDeletedActive: "\u5F53\u524D\u80CC\u666F\u5DF2\u5220\u9664\uFF0C\u5DF2\u81EA\u52A8\u505C\u7528\u80CC\u666F",
|
|
351
|
+
tableCopyBtn: "\u590D\u5236\u8868\u683C",
|
|
352
|
+
tableCopied: "\u8868\u683C\u5DF2\u590D\u5236",
|
|
351
353
|
sbItemCtx: "\u4E0A\u4E0B\u6587\u5360\u7528",
|
|
352
354
|
sbItemQuestions: "\u63D0\u95EE\u6B21\u6570",
|
|
353
355
|
sbMaster: "\u542F\u7528\u7EDF\u8BA1",
|
|
@@ -400,7 +402,11 @@
|
|
|
400
402
|
featureFileActions: "\u6587\u4EF6\u83DC\u5355\u589E\u5F3A",
|
|
401
403
|
featureFileActionsDesc: "\u5728\u4F1A\u8BDD\u4E2D\u6587\u4EF6\u94FE\u63A5\u7684\u53F3\u952E\u83DC\u5355\u91CC\u65B0\u589E\u201C\u9ED8\u8BA4\u5E94\u7528\u6253\u5F00\u201D\u4E0E\u201C\u6253\u5F00\u6240\u5728\u76EE\u5F55\u201D\u3002",
|
|
402
404
|
featureImageCopy: "\u56FE\u7247\u53F3\u952E\u590D\u5236",
|
|
405
|
+
featureTableCopy: "\u590D\u5236\u8868\u683C",
|
|
406
|
+
featureComposerProvider: "\u6A21\u578B\u540D\u663E\u793A\u4F9B\u5E94\u5546",
|
|
403
407
|
featureImageCopyDesc: "\u53F3\u952E\u4F1A\u8BDD\u4E2D\u7684\u56FE\u7247\u6216\u70B9\u51FB\u653E\u5927\u7684\u9884\u89C8\u56FE\uFF0C\u53EF\u5C06\u56FE\u7247\u590D\u5236\u5230\u526A\u8D34\u677F\u3002",
|
|
408
|
+
featureTableCopyDesc: "\u8868\u683C\u5DE5\u5177\u6761\u65B0\u589E\u590D\u5236\u8868\u683C\uFF0C\u7C98\u8D34\u8FDB Excel / \u5BCC\u6587\u672C\u7F16\u8F91\u5668\u5373\u4E3A\u5E72\u51C0\u8868\u683C\u3002",
|
|
409
|
+
featureComposerProviderDesc: "\u6A21\u578B\u540D\u524D\u663E\u793A\u4F9B\u5E94\u5546\u540D\uFF08\u5982 BigModel-Max1 / glm-5.3\uFF09\uFF0C\u533A\u5206\u540C\u540D\u6A21\u578B\u3002",
|
|
404
410
|
imageCopy: "\u590D\u5236\u56FE\u7247",
|
|
405
411
|
imageCopied: "\u56FE\u7247\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F",
|
|
406
412
|
imageCopyFailed: "\u590D\u5236\u56FE\u7247\u5931\u8D25",
|
|
@@ -423,7 +429,7 @@
|
|
|
423
429
|
pluginsUpdatesAvailable: "zcode-plugins \u6709 {n} \u4E2A\u63D2\u4EF6\u53EF\u66F4\u65B0\uFF08ZCode Pro \u8BBE\u7F6E \u2192 \u529F\u80FD\uFF09",
|
|
424
430
|
pluginsAutoUpdated: "zcode-plugins \u63D2\u4EF6\u5DF2\u66F4\u65B0",
|
|
425
431
|
tabVision: "Vision",
|
|
426
|
-
visionDesc: "\u4E3B\u6A21\u578B\u4E0D\u652F\u6301\u56FE\u7247\u8F93\u5165\u65F6\uFF08\u5982 glm-5.3\uFF09\uFF0C\u81EA\u52A8\u628A\u6D88\u606F\u91CC\u7684\u56FE\u7247\u4EA4\u7ED9\u4E0B\u9762\u7684\u89C6\u89C9\u6A21\u578B\u8BC6\u522B\uFF0C\u628A\u63CF\u8FF0\u5E26\u7ED9\u4E3B\u6A21\u578B\uFF08zcode-vision \u63D2\u4EF6\uFF1B/vision-* \u547D\u4EE4\u7F16\u8F91\u540C\u4E00\u914D\u7F6E\uFF09\u3002
|
|
432
|
+
visionDesc: "\u4E3B\u6A21\u578B\u4E0D\u652F\u6301\u56FE\u7247\u8F93\u5165\u65F6\uFF08\u5982 glm-5.3\uFF09\uFF0C\u81EA\u52A8\u628A\u6D88\u606F\u91CC\u7684\u56FE\u7247\u4EA4\u7ED9\u4E0B\u9762\u7684\u89C6\u89C9\u6A21\u578B\u8BC6\u522B\uFF0C\u628A\u63CF\u8FF0\u5E26\u7ED9\u4E3B\u6A21\u578B\uFF08zcode-vision \u63D2\u4EF6\uFF1B/vision-* \u547D\u4EE4\u7F16\u8F91\u540C\u4E00\u914D\u7F6E\uFF09\u3002",
|
|
427
433
|
visionEnabled: "\u542F\u7528",
|
|
428
434
|
visionForceIntercept: "\u4E3B\u6A21\u578B\u80FD\u770B\u56FE\u4E5F\u62E6\u622A",
|
|
429
435
|
visionMode: "\u94FE\u6A21\u5F0F",
|
|
@@ -454,14 +460,14 @@
|
|
|
454
460
|
visionCompressKBHint: "\u8D85\u8FC7\u8BE5\u5927\u5C0F\u7684\u56FE\u5148\u538B\u7F29\u518D\u8BC6\u522B\uFF08\u6700\u957F\u8FB9 2000\u3001JPEG\uFF09\uFF1B0 = \u4E0D\u538B\u7F29",
|
|
455
461
|
visionLoadFailed: "\u8BFB\u53D6\u89C6\u89C9\u4EE3\u7406\u914D\u7F6E\u5931\u8D25",
|
|
456
462
|
tabRtk: "rtk",
|
|
457
|
-
rtkDesc: "rtk \u63D2\u4EF6\uFF1A\u628A\u5E38\u89C1\u5F00\u53D1\u547D\u4EE4\u7684\u8F93\u51FA\u538B\u7F29 60-90% \u518D\u8FDB\u5165\u4E0A\u4E0B\u6587\uFF08/rtk-* \u547D\u4EE4\u7F16\u8F91\u540C\u4E00\u914D\u7F6E\uFF09\u3002
|
|
463
|
+
rtkDesc: "rtk \u63D2\u4EF6\uFF1A\u628A\u5E38\u89C1\u5F00\u53D1\u547D\u4EE4\u7684\u8F93\u51FA\u538B\u7F29 60-90% \u518D\u8FDB\u5165\u4E0A\u4E0B\u6587\uFF08/rtk-* \u547D\u4EE4\u7F16\u8F91\u540C\u4E00\u914D\u7F6E\uFF09\u3002",
|
|
458
464
|
rtkEnabled: "\u542F\u7528",
|
|
459
465
|
rtkNotInstalled: "\u672A\u5B89\u88C5 rtk \u672C\u4F53\uFF1B\u5B89\u88C5\u540E\u4EE5\u4E0B\u8BBE\u7F6E\u751F\u6548\uFF08\u4F1A\u8BDD\u91CC\u6267\u884C /rtk-setup \u4E5F\u53EF\u4EE5\uFF09",
|
|
460
466
|
rtkInstallBin: "\u5B89\u88C5 rtk \u672C\u4F53",
|
|
461
467
|
rtkBinInstalled: "rtk \u672C\u4F53\u5DF2\u5B89\u88C5\uFF1BPATH \u9700\u6CE8\u9500\u91CD\u767B\u540E\u5BF9\u4F1A\u8BDD\u751F\u6548\uFF0C\u63D2\u4EF6\u94A9\u5B50\u5373\u65F6\u751F\u6548",
|
|
462
468
|
rtkWhitelistTitle: "\u767D\u540D\u5355\uFF08\u4E0D\u538B\u7F29\u76F4\u63A5\u653E\u884C\uFF09",
|
|
463
469
|
rtkBuiltinLabel: "\u5185\u7F6E\u653E\u884C\uFF08\u53EA\u8BFB\uFF0C\u968F\u63D2\u4EF6\u66F4\u65B0\uFF09\uFF1A",
|
|
464
|
-
rtkWhitelistDesc: "\u6BCF\u6761 name\uFF08\u5982 docker\uFF09\u6216 git:name\uFF08\u5982 git:clone\uFF09\
|
|
470
|
+
rtkWhitelistDesc: "\u6BCF\u6761 name\uFF08\u5982 docker\uFF09\u6216 git:name\uFF08\u5982 git:clone\uFF09\uFF0C\u52A0\u5165\u540E\u4E0D\u518D\u538B\u7F29\uFF1B\u5185\u7F6E\u7684 git add/commit/push\u3001mkdir/cp \u7B49\u4E0D\u53EF\u79FB\u9664\u3002",
|
|
465
471
|
rtkWhitelistPlaceholder: "name \u6216 git:name\uFF0C\u56DE\u8F66\u6DFB\u52A0",
|
|
466
472
|
rtkWhitelistAdd: "\u6DFB\u52A0",
|
|
467
473
|
rtkWhitelistClear: "\u6E05\u7A7A",
|
|
@@ -469,18 +475,18 @@
|
|
|
469
475
|
rtkWhitelistInvalid: "\u6761\u76EE\u683C\u5F0F\u5E94\u4E3A name \u6216 git:name",
|
|
470
476
|
rtkLoadFailed: "\u8BFB\u53D6 rtk \u914D\u7F6E\u5931\u8D25",
|
|
471
477
|
tabHeadroom: "Headroom",
|
|
472
|
-
headroomDesc: "Headroom \u63D2\u4EF6\uFF1A\u672C\u5730\u538B\u7F29\u4EE3\u7406\u9A7B\u7559 127.0.0.1\uFF08\u9ED8\u8BA4 8787 \u7AEF\u53E3\uFF09\uFF0C\u538B\u7F29\u53D1\u5F80\u6A21\u578B\u7684\u4E0A\u4E0B\u6587\u4EE5\u7701 token\uFF08/hr-* \u547D\u4EE4\u7F16\u8F91\u540C\u4E00\u914D\u7F6E\uFF09\u3002\
|
|
478
|
+
headroomDesc: "Headroom \u63D2\u4EF6\uFF1A\u672C\u5730\u538B\u7F29\u4EE3\u7406\u9A7B\u7559 127.0.0.1\uFF08\u9ED8\u8BA4 8787 \u7AEF\u53E3\uFF09\uFF0C\u538B\u7F29\u53D1\u5F80\u6A21\u578B\u7684\u4E0A\u4E0B\u6587\u4EE5\u7701 token\uFF08/hr-* \u547D\u4EE4\u7F16\u8F91\u540C\u4E00\u914D\u7F6E\uFF09\u3002\u5207\u6362\u8BBE\u5907\u4F1A\u91CD\u542F\u4EE3\u7406\uFF0C\u6B63\u5728\u5904\u7406\u7684\u8BF7\u6C42\u53EF\u80FD\u4E2D\u65AD\u4E00\u6B21\u3002",
|
|
473
479
|
headroomBinMissing: "\u672A\u627E\u5230 headroom \u7A0B\u5E8F\uFF0C\u4EE3\u7406\u65E0\u6CD5\u542F\u52A8\uFF1B\u5B89\u88C5 headroom \u540E\u4EE5\u4E0B\u8BBE\u7F6E\u81EA\u52A8\u751F\u6548",
|
|
474
480
|
hrInstallBin: "\u5B89\u88C5 headroom \u672C\u4F53",
|
|
475
481
|
hrBinInstalled: "headroom \u672C\u4F53\u5DF2\u5B89\u88C5\uFF1B\u91CD\u65B0\u6253\u5F00\u4F1A\u8BDD\u540E\u4EE3\u7406\u53EF\u7528\uFF08SessionStart \u94A9\u5B50\u81EA\u52A8\u62C9\u8D77\uFF09",
|
|
476
482
|
headroomInstallTitle: "\u672A\u5B89\u88C5 headroom \u63D2\u4EF6",
|
|
477
|
-
headroomInstallDesc: "\u4ECE zcode-plugins \u5E02\u573A\u5B89\u88C5\u540E\u5373\u53EF\u5728\u6B64\u7BA1\u7406\u538B\u7F29\u4EE3\u7406\uFF1B\
|
|
483
|
+
headroomInstallDesc: "\u4ECE zcode-plugins \u5E02\u573A\u5B89\u88C5\u540E\u5373\u53EF\u5728\u6B64\u7BA1\u7406\u538B\u7F29\u4EE3\u7406\uFF1B\u91CD\u542F\u4F1A\u8BDD\u540E\u751F\u6548\u3002",
|
|
478
484
|
headroomInstall: "\u5B89\u88C5",
|
|
479
485
|
headroomInstalling: "\u5B89\u88C5\u4E2D\u2026",
|
|
480
486
|
headroomInstalled: "\u5DF2\u5B89\u88C5 headroom \u63D2\u4EF6",
|
|
481
487
|
headroomInstallRetry: "\u5B89\u88C5\u672A\u751F\u6548\uFF0C\u8BF7\u91CD\u8BD5\u6216\u624B\u52A8\u5728\u63D2\u4EF6\u5E02\u573A\u5B89\u88C5",
|
|
482
488
|
pluginInstallCardTitle: "\u672A\u5B89\u88C5 {name} \u63D2\u4EF6",
|
|
483
|
-
pluginInstallCardDesc: "\u4ECE zcode-plugins \u5E02\u573A\u5B89\u88C5\u540E\u5373\u53EF\u5728\u6B64\u7BA1\u7406\uFF1B\
|
|
489
|
+
pluginInstallCardDesc: "\u4ECE zcode-plugins \u5E02\u573A\u5B89\u88C5\u540E\u5373\u53EF\u5728\u6B64\u7BA1\u7406\uFF1B\u91CD\u542F\u4F1A\u8BDD\u540E\u751F\u6548\u3002",
|
|
484
490
|
pluginInstallDone: "\u5DF2\u5B89\u88C5 {name} \u63D2\u4EF6",
|
|
485
491
|
pluginEnable: "\u542F\u7528",
|
|
486
492
|
hrStarting: "\u6B63\u5728\u542F\u52A8\u538B\u7F29\u4EE3\u7406\u2026",
|
|
@@ -523,7 +529,7 @@
|
|
|
523
529
|
headroomBackendAuto: "\u81EA\u52A8 \xB7 \u663E\u5361\u4F18\u5148",
|
|
524
530
|
headroomBackendCpu: "\u7701\u7535 \xB7 CPU \u4F18\u5148",
|
|
525
531
|
headroomBackendNative: "\uFF08\u539F\u751F\u503C\uFF09",
|
|
526
|
-
headroomBackendDesc: "\u81EA\u52A8\uFF1Aheadroom \u9009\u6700\u5FEB\u8BBE\u5907\uFF08CUDA/MPS \u663E\u5361\u4F18\u5148\uFF09\uFF1BCPU\uFF1A\u5F3A\u5236 CPU \u538B\u7F29\uFF0C\u7701\u7535\u4E14\u4E0D\u5360\u663E\u5B58\u3002\u4E5F\u652F\u6301 headroom \u539F\u751F\u503C\uFF08onnx\u3001pytorch_mps \u7B49\uFF09\u3002
|
|
532
|
+
headroomBackendDesc: "\u81EA\u52A8\uFF1Aheadroom \u9009\u6700\u5FEB\u8BBE\u5907\uFF08CUDA/MPS \u663E\u5361\u4F18\u5148\uFF09\uFF1BCPU\uFF1A\u5F3A\u5236 CPU \u538B\u7F29\uFF0C\u7701\u7535\u4E14\u4E0D\u5360\u663E\u5B58\u3002\u4E5F\u652F\u6301 headroom \u539F\u751F\u503C\uFF08onnx\u3001pytorch_mps \u7B49\uFF09\u3002",
|
|
527
533
|
headroomPower: "\u7701\u7535\u81EA\u52A8\u5207\u6362",
|
|
528
534
|
headroomPowerOff: "\u5173\u95ED",
|
|
529
535
|
headroomPowerOffDesc: "\u4E0D\u81EA\u52A8\u5207\u6362\uFF0C\u59CB\u7EC8\u6309\u201C\u538B\u7F29\u8BBE\u5907\u201D\u8FD0\u884C\u3002",
|
|
@@ -533,7 +539,7 @@
|
|
|
533
539
|
headroomPowerSaverDesc: "\u4EC5\u7CFB\u7EDF\u8FDB\u5165\u7701\u7535\u6A21\u5F0F \u2192 CPU \u538B\u7F29\uFF0C\u9000\u51FA\u5207\u56DE\u3002",
|
|
534
540
|
hrCpuPinnedHint: "\u538B\u7F29\u8BBE\u5907\u5DF2\u56FA\u5B9A\u4E3A CPU\uFF0C\u7701\u7535\u81EA\u52A8\u5207\u6362\u4E0D\u4F1A\u518D\u6539\u53D8\u5B83\u3002",
|
|
535
541
|
headroomInterval: "\u76D1\u89C6\u95F4\u9694",
|
|
536
|
-
headroomIntervalDesc: "\u7701\u7535\u76D1\u89C6\u5668\u8F6E\u8BE2\u7535\u6E90\u72B6\u6001\u7684\u95F4\u9694\uFF0810\u20133600 \u79D2\uFF0C\u9ED8\u8BA4 60\uFF09\uFF1B\u4FDD\u5B58\u540E\u4ECE\u4E0B\u4E00\u8F6E\u5DE1\u68C0\u8D77\u751F\u6548\
|
|
542
|
+
headroomIntervalDesc: "\u7701\u7535\u76D1\u89C6\u5668\u8F6E\u8BE2\u7535\u6E90\u72B6\u6001\u7684\u95F4\u9694\uFF0810\u20133600 \u79D2\uFF0C\u9ED8\u8BA4 60\uFF09\uFF1B\u4FDD\u5B58\u540E\u4ECE\u4E0B\u4E00\u8F6E\u5DE1\u68C0\u8D77\u751F\u6548\u3002",
|
|
537
543
|
headroomSecUnit: "\u79D2",
|
|
538
544
|
upgradeCheck: "\u68C0\u67E5\u66F4\u65B0",
|
|
539
545
|
upgradeChecking: "\u68C0\u67E5\u4E2D\u2026",
|
|
@@ -620,7 +626,7 @@
|
|
|
620
626
|
agentsSave: "Save",
|
|
621
627
|
agentsSaved: "Global prompt saved.",
|
|
622
628
|
agentsLoadFailed: "Failed to load the global prompt",
|
|
623
|
-
proxyDesc: "Set an HTTP proxy for network access made by the local helper: plugin marketplace updates and installs, plugin dependency installs and upgrades, and WebDAV sync can all use it \u2014 pick the scopes with the toggles below. Does not affect the ZCode app itself or model requests.
|
|
629
|
+
proxyDesc: "Set an HTTP proxy for network access made by the local helper: plugin marketplace updates and installs, plugin dependency installs and upgrades, and WebDAV sync can all use it \u2014 pick the scopes with the toggles below. Does not affect the ZCode app itself or model requests.",
|
|
624
630
|
proxyPlaceholder: "http://127.0.0.1:7890",
|
|
625
631
|
proxySave: "Save",
|
|
626
632
|
proxySaved: "Proxy settings saved.",
|
|
@@ -634,7 +640,7 @@
|
|
|
634
640
|
proxyScopeDeps: "Plugin dependencies",
|
|
635
641
|
proxyScopeDepsDesc: "headroom and rtk installs, update checks and upgrades (pip and GitHub downloads) go through the proxy.",
|
|
636
642
|
proxyScopeSync: "Sync",
|
|
637
|
-
proxyScopeSyncDesc: "WebDAV upload and download go through the proxy.
|
|
643
|
+
proxyScopeSyncDesc: "WebDAV upload and download go through the proxy.",
|
|
638
644
|
tabSync: "Sync",
|
|
639
645
|
tabDebug: "Debug",
|
|
640
646
|
testNoSessionHint: "With \u201Cfollow current session [current model]\u201D selected, the provider [model] of the last session is used.",
|
|
@@ -721,13 +727,13 @@
|
|
|
721
727
|
defaultValue: "default",
|
|
722
728
|
resetDefault: "Reset to default",
|
|
723
729
|
featureProjectMenu: "Project menu actions",
|
|
724
|
-
featureProjectMenuDesc:
|
|
730
|
+
featureProjectMenuDesc: "Open folder and copy path in the project More menu (alias and folder switch retired).",
|
|
725
731
|
featureTaskOrder: "Sidebar session drag ordering",
|
|
726
|
-
featureTaskOrderDesc: "
|
|
732
|
+
featureTaskOrderDesc: "Drag to reorder sessions in Pinned, Projects and Groups; survives restarts.",
|
|
727
733
|
featureSessionSwitch: "Session quick switch",
|
|
728
|
-
featureSessionSwitchDesc: "{last} toggles
|
|
734
|
+
featureSessionSwitchDesc: "{last} toggles to the last session; alt + arrows pick recent sessions; keys remappable",
|
|
729
735
|
featureTitleLock: "Keep renamed session titles",
|
|
730
|
-
featureTitleLockDesc: "Sessions you renamed keep their custom title
|
|
736
|
+
featureTitleLockDesc: "Sessions you renamed keep their custom title in the sidebar.",
|
|
731
737
|
tabTitleGen: "Task name prompt",
|
|
732
738
|
titleGenShortDesc: "When a new session starts answering, generates the task name with the chosen provider and prompt and saves it as a manual rename the built-in title never overrides.",
|
|
733
739
|
titleGenEnabled: "Enable",
|
|
@@ -753,7 +759,7 @@
|
|
|
753
759
|
titleGenTestOk: "Result: ",
|
|
754
760
|
titleGenTestFailed: "Generation failed",
|
|
755
761
|
featureWsRunning: "Running indicator when collapsed",
|
|
756
|
-
featureWsRunningDesc: "
|
|
762
|
+
featureWsRunningDesc: "Collapsed project and task headers show a loader while sessions run.",
|
|
757
763
|
tabPerformance: "Performance",
|
|
758
764
|
perfDesc: "ZCode keeps a session process resident for every project you have opened and never reclaims it, so memory grows with projects. When enabled, projects unused for a while with nothing running release their memory automatically: sessions are untouched and reload when reopened, with a few seconds wait on the first reply. The project in use, running sessions, background commands and scheduled tasks are never reclaimed. Background-command detection reads system process info via built-in tools (Linux / macOS / Windows); when unavailable, the feature disables itself.",
|
|
759
765
|
featureIdleReclaim: "Idle project memory reclaim",
|
|
@@ -763,15 +769,15 @@
|
|
|
763
769
|
idleReclaimStartupHint: "Startup pre-spawns a process per restored project; this pass collects the unused ones once. 0 = reclaim right after startup, ignoring the idle minutes above",
|
|
764
770
|
idleReclaimUnit: "min",
|
|
765
771
|
featureToolbarIcons: "Sidebar menu in the top bar",
|
|
766
|
-
featureToolbarIconsDesc: "
|
|
772
|
+
featureToolbarIconsDesc: "New task / search / automations / plugin store become top-bar icon buttons.",
|
|
767
773
|
tbNewTask: "New task",
|
|
768
774
|
tbSearch: "Search",
|
|
769
775
|
tbAutomations: "Automations",
|
|
770
776
|
tbPluginStore: "Plugin store",
|
|
771
777
|
featurePinnedCollapse: "Collapsible Pinned section",
|
|
772
|
-
featurePinnedCollapseDesc:
|
|
778
|
+
featurePinnedCollapseDesc: "The Pinned header collapses/expands its task list.",
|
|
773
779
|
featureSandboxReclaim: "Plugin card sandbox reclaim",
|
|
774
|
-
featureSandboxReclaimDesc: "
|
|
780
|
+
featureSandboxReclaimDesc: "Reclaims the oldest sandboxes at the 64 cap so new cards keep opening; released cards come back when their session is reopened.",
|
|
775
781
|
featurePluginCardRetry: "Plugin card auto-retry",
|
|
776
782
|
featurePluginCardRetryDesc: 'Auto-clicks "Reload" on cards that failed the slot cap; they recover as soon as a slot frees up.',
|
|
777
783
|
visionCardUi: "Vision cards",
|
|
@@ -796,7 +802,7 @@
|
|
|
796
802
|
switcherAttentionHint: "Running / finished but unseen tasks \xB7 {prev} / {next} or \u2191 / \u2193 to choose, Enter or release alt to switch",
|
|
797
803
|
switcherAttentionEmpty: "No running or unseen tasks",
|
|
798
804
|
featureNewtabPanels: "Plugin panels on the new tab page",
|
|
799
|
-
featureNewtabPanelsDesc:
|
|
805
|
+
featureNewtabPanelsDesc: "Adds third-party plugin panels (headroom, rtk, ...) to the new tab page; click to open in the side pane.",
|
|
800
806
|
ntpDescSuffix: "plugin panel",
|
|
801
807
|
ntpNeedSession: "Open a task session first, then open plugin panels from the new tab page",
|
|
802
808
|
featureStatusBarDesc: "Shows statistics at the bottom-right of the input box and at the end of each answer.",
|
|
@@ -854,6 +860,8 @@
|
|
|
854
860
|
themeBgPanel: "Panel opacity",
|
|
855
861
|
themeBgPanelHint: "Opacity of sidebar, panels and tab bar. Lower reveals more of the image.",
|
|
856
862
|
themeBgDeletedActive: "Active background was deleted; background disabled",
|
|
863
|
+
tableCopyBtn: "Copy table",
|
|
864
|
+
tableCopied: "Table copied",
|
|
857
865
|
sbItemCtx: "Context usage",
|
|
858
866
|
sbItemQuestions: "Questions asked",
|
|
859
867
|
sbMaster: "Enable statistics",
|
|
@@ -906,7 +914,11 @@
|
|
|
906
914
|
featureFileActions: "File menu actions",
|
|
907
915
|
featureFileActionsDesc: 'Adds "Open with default app" and "Reveal in file manager" to the right-click menu of file links in chat.',
|
|
908
916
|
featureImageCopy: "Image right-click copy",
|
|
917
|
+
featureTableCopy: "Copy table",
|
|
918
|
+
featureComposerProvider: "Provider in model name",
|
|
909
919
|
featureImageCopyDesc: "Right-click an image in chat or the enlarged preview to copy it to the clipboard.",
|
|
920
|
+
featureTableCopyDesc: "Copy-table button on the table toolbar; pastes into Excel / editors as a clean table.",
|
|
921
|
+
featureComposerProviderDesc: "Shows the provider before the model name (e.g. BigModel-Max1 / glm-5.3).",
|
|
910
922
|
imageCopy: "Copy image",
|
|
911
923
|
imageCopied: "Image copied to the clipboard.",
|
|
912
924
|
imageCopyFailed: "Failed to copy the image.",
|
|
@@ -929,7 +941,7 @@
|
|
|
929
941
|
pluginsUpdatesAvailable: "{n} zcode-plugins update(s) available (ZCode Pro settings \u2192 Features)",
|
|
930
942
|
pluginsAutoUpdated: "zcode-plugins updated",
|
|
931
943
|
tabVision: "Vision",
|
|
932
|
-
visionDesc: "When the main model cannot see images (e.g. glm-5.3), images in messages are recognized by the vision models below and passed to the main model as text (zcode-vision plugin; /vision-* commands edit the same file).
|
|
944
|
+
visionDesc: "When the main model cannot see images (e.g. glm-5.3), images in messages are recognized by the vision models below and passed to the main model as text (zcode-vision plugin; /vision-* commands edit the same file).",
|
|
933
945
|
visionEnabled: "Enable",
|
|
934
946
|
visionForceIntercept: "Intercept even if the main model sees images",
|
|
935
947
|
visionMode: "Chain mode",
|
|
@@ -960,14 +972,14 @@
|
|
|
960
972
|
visionCompressKBHint: "Images above this size are compressed first (max edge 2000, JPEG); 0 = never",
|
|
961
973
|
visionLoadFailed: "Failed to load the vision config",
|
|
962
974
|
tabRtk: "rtk",
|
|
963
|
-
rtkDesc: "rtk plugin: compresses common dev command output by 60-90% before it reaches the context (/rtk-* commands edit the same files).
|
|
975
|
+
rtkDesc: "rtk plugin: compresses common dev command output by 60-90% before it reaches the context (/rtk-* commands edit the same files).",
|
|
964
976
|
rtkEnabled: "Enable",
|
|
965
977
|
rtkNotInstalled: "rtk is not installed. The settings below take effect after installation (/rtk-setup in a session).",
|
|
966
978
|
rtkInstallBin: "Install rtk binary",
|
|
967
979
|
rtkBinInstalled: "rtk installed; PATH takes effect for sessions after signing out and back in \u2014 the plugin hook works immediately",
|
|
968
980
|
rtkWhitelistTitle: "Whitelist (pass through without compression)",
|
|
969
981
|
rtkBuiltinLabel: "Built-in exemptions (read-only, follow plugin updates):",
|
|
970
|
-
rtkWhitelistDesc: "Each entry is name (e.g. docker) or git:name (e.g. git:clone)
|
|
982
|
+
rtkWhitelistDesc: "Each entry is name (e.g. docker) or git:name (e.g. git:clone); added commands skip compression. Built-ins (git add/commit/push, mkdir/cp, \u2026) cannot be removed.",
|
|
971
983
|
rtkWhitelistPlaceholder: "name or git:name, press Enter to add",
|
|
972
984
|
rtkWhitelistAdd: "Add",
|
|
973
985
|
rtkWhitelistClear: "Clear",
|
|
@@ -975,18 +987,18 @@
|
|
|
975
987
|
rtkWhitelistInvalid: "Entry must be name or git:name",
|
|
976
988
|
rtkLoadFailed: "Failed to load the rtk config",
|
|
977
989
|
tabHeadroom: "Headroom",
|
|
978
|
-
headroomDesc: "Headroom plugin: a local compression proxy on 127.0.0.1 (port 8787 by default) that compresses context sent to the model to save tokens (/hr-* commands edit the same file).
|
|
990
|
+
headroomDesc: "Headroom plugin: a local compression proxy on 127.0.0.1 (port 8787 by default) that compresses context sent to the model to save tokens (/hr-* commands edit the same file). Switching the device restarts the proxy, so requests in progress may be interrupted once.",
|
|
979
991
|
headroomBinMissing: "The headroom program was not found, so the proxy cannot start. The settings below take effect once it is installed.",
|
|
980
992
|
hrInstallBin: "Install headroom binary",
|
|
981
993
|
hrBinInstalled: "headroom installed; reopen a session and the hook will start the proxy automatically",
|
|
982
994
|
headroomInstallTitle: "headroom plugin not installed",
|
|
983
|
-
headroomInstallDesc: "Install it from the zcode-plugins marketplace to manage the compression proxy here;
|
|
995
|
+
headroomInstallDesc: "Install it from the zcode-plugins marketplace to manage the compression proxy here; takes effect after a session restart.",
|
|
984
996
|
headroomInstall: "Install",
|
|
985
997
|
headroomInstalling: "Installing\u2026",
|
|
986
998
|
headroomInstalled: "headroom plugin installed",
|
|
987
999
|
headroomInstallRetry: "Installation did not take effect; retry or install it from the marketplace manually",
|
|
988
1000
|
pluginInstallCardTitle: "{name} plugin not installed",
|
|
989
|
-
pluginInstallCardDesc: "Install it from the zcode-plugins marketplace to manage it here;
|
|
1001
|
+
pluginInstallCardDesc: "Install it from the zcode-plugins marketplace to manage it here; takes effect after a session restart.",
|
|
990
1002
|
pluginInstallDone: "{name} plugin installed",
|
|
991
1003
|
pluginEnable: "Enable",
|
|
992
1004
|
hrStarting: "Starting compression proxy\u2026",
|
|
@@ -1039,7 +1051,7 @@
|
|
|
1039
1051
|
headroomPowerSaverDesc: "Only the system power-saver mode \u2192 CPU; back when it exits.",
|
|
1040
1052
|
hrCpuPinnedHint: "The compression device is pinned to CPU, so power-save switching no longer changes anything.",
|
|
1041
1053
|
headroomInterval: "Watch interval",
|
|
1042
|
-
headroomIntervalDesc: "Seconds between power checks (10\u20133600, default 60); applies from the next round
|
|
1054
|
+
headroomIntervalDesc: "Seconds between power checks (10\u20133600, default 60); applies from the next round.",
|
|
1043
1055
|
headroomSecUnit: "s",
|
|
1044
1056
|
upgradeCheck: "Check update",
|
|
1045
1057
|
upgradeChecking: "Checking\u2026",
|
|
@@ -1619,7 +1631,7 @@
|
|
|
1619
1631
|
"div",
|
|
1620
1632
|
{ class: "min-w-0 flex-1" },
|
|
1621
1633
|
h("div", { class: "text-ui-sm font-medium text-foreground" }, name),
|
|
1622
|
-
h("div", { class: "mt-0.5 text-ui-xs/relaxed text-foreground-subtle", "data-zcodepro-row-desc": "" }, desc ?? "")
|
|
1634
|
+
h("div", { class: "mt-0.5 text-ui-xs/relaxed text-foreground-subtle zcodepro-row-desc", "data-zcodepro-row-desc": "", title: desc ?? "" }, desc ?? "")
|
|
1623
1635
|
),
|
|
1624
1636
|
...extraEl ? [extraEl] : [],
|
|
1625
1637
|
h("button", {
|
|
@@ -1661,6 +1673,14 @@
|
|
|
1661
1673
|
/* \u6EDA\u5230\u5E95\u4E0D\u518D\u628A\u6EDA\u52A8\u4F20\u7ED9\u5F39\u7A97\u540E\u9762\u7684\u9875\u9762 */
|
|
1662
1674
|
overscroll-behavior: contain;
|
|
1663
1675
|
}
|
|
1676
|
+
/* \u53CC\u5217\u7F51\u683C\uFF08\u529F\u80FD\u9875\uFF09\u91CC\u7684\u884C\u63CF\u8FF0\u6700\u591A\u4E24\u884C\u7701\u7565\uFF1A\u957F\u63CF\u8FF0\u6491\u51FA\u7684\u53C2\u5DEE\u884C\u9AD8\u662F
|
|
1677
|
+
\u7F51\u683C\u89C2\u611F\u5DEE\u7684\u6839\u6E90\uFF1B\u5355\u5217\u573A\u666F\uFF08\u5176\u4ED6\u9762\u677F\uFF09\u4E0D\u53D7\u5F71\u54CD */
|
|
1678
|
+
.grid.grid-cols-2 > div > div > .zcodepro-row-desc {
|
|
1679
|
+
display: -webkit-box;
|
|
1680
|
+
-webkit-line-clamp: 2;
|
|
1681
|
+
-webkit-box-orient: vertical;
|
|
1682
|
+
overflow: hidden;
|
|
1683
|
+
}
|
|
1664
1684
|
/* \u5F00\u5173\uFF08\u8BBE\u7F6E\u5F39\u7A97\uFF09\uFF1A\u51E0\u4F55\u56FA\u5B9A\u5199\u5165\uFF0C\u989C\u8272\u968F\u4E3B\u9898\u53D8\u91CF */
|
|
1665
1685
|
[data-zcodepro-switch] {
|
|
1666
1686
|
position: relative;
|
|
@@ -1957,6 +1977,9 @@
|
|
|
1957
1977
|
height: 12px;
|
|
1958
1978
|
flex-shrink: 0;
|
|
1959
1979
|
opacity: 0.6;
|
|
1980
|
+
/* 11px \u5B57\u4F53\u7684\u89C6\u89C9\u4E2D\u5FC3\uFF08x-height \u4E2D\u70B9\uFF09\u9AD8\u4E8E\u884C\u76D2\u51E0\u4F55\u4E2D\u5FC3\u7EA6 1px\uFF08\u4E0B\u4F38\u90E8
|
|
1981
|
+
\u9884\u7559\uFF09\uFF0C\u51E0\u4F55\u5C45\u4E2D\u7684\u56FE\u6807\u770B\u8D77\u6765\u504F\u4E0B\u2014\u2014\u6574\u4F53\u4E0A\u79FB 1px \u5BF9\u9F50\u89C6\u89C9\u4E2D\u5FC3 */
|
|
1982
|
+
transform: translateY(-1px);
|
|
1960
1983
|
}
|
|
1961
1984
|
.zcodepro-statusbar b { font-weight: 600; color: var(--color-foreground-subtle, #666); }
|
|
1962
1985
|
.zcodepro-statusbar i {
|
|
@@ -3124,10 +3147,10 @@
|
|
|
3124
3147
|
function startImageMenu() {
|
|
3125
3148
|
if (typeof window === "undefined") return;
|
|
3126
3149
|
if (typeof navigator.clipboard?.write !== "function" || typeof window.ClipboardItem === "undefined") return;
|
|
3127
|
-
let
|
|
3150
|
+
let enabled11 = true;
|
|
3128
3151
|
const refresh = () => {
|
|
3129
3152
|
void getConfig().then((c) => {
|
|
3130
|
-
|
|
3153
|
+
enabled11 = !(c.features && c.features.imageCopy === false);
|
|
3131
3154
|
});
|
|
3132
3155
|
};
|
|
3133
3156
|
refresh();
|
|
@@ -3136,7 +3159,7 @@
|
|
|
3136
3159
|
const img = copyTargetOf(e.target, e.clientX, e.clientY);
|
|
3137
3160
|
if (!img) return;
|
|
3138
3161
|
e.preventDefault();
|
|
3139
|
-
if (
|
|
3162
|
+
if (enabled11) showMenu(e.clientX, e.clientY, img);
|
|
3140
3163
|
refresh();
|
|
3141
3164
|
}, true);
|
|
3142
3165
|
}
|
|
@@ -4651,8 +4674,12 @@
|
|
|
4651
4674
|
h("span", { class: "inline-block size-2 rounded-full bg-emerald-500" }),
|
|
4652
4675
|
h("span", { class: "text-foreground-subtle/70" }, `${health.version} \xB7 ${HELPER_URL}`)
|
|
4653
4676
|
);
|
|
4654
|
-
const rows = h("div", { class: "
|
|
4677
|
+
const rows = h("div", { class: "grid grid-cols-2 gap-x-0 gap-y-1 rounded-xl border border-border p-2 divide-x divide-border" });
|
|
4655
4678
|
const pluginsStatusLine = h("span", { class: "max-w-40 truncate text-ui-xs/relaxed text-foreground-subtle" }, "\u2026");
|
|
4679
|
+
const setPluginsStatus = (text) => {
|
|
4680
|
+
setPluginsStatus(text);
|
|
4681
|
+
pluginsStatusLine.setAttribute("title", text);
|
|
4682
|
+
};
|
|
4656
4683
|
const pluginsBtn = btnSmall(L.pluginsCheckNow, () => {
|
|
4657
4684
|
void runPluginsUpdate();
|
|
4658
4685
|
});
|
|
@@ -4661,23 +4688,23 @@
|
|
|
4661
4688
|
if (pluginsUpdating) return;
|
|
4662
4689
|
pluginsUpdating = true;
|
|
4663
4690
|
pluginsBtn.disabled = true;
|
|
4664
|
-
|
|
4691
|
+
setPluginsStatus(L.pluginsUpdating);
|
|
4665
4692
|
const res = await rpc("/plugins/update", { method: "POST", body: {} });
|
|
4666
4693
|
pluginsUpdating = false;
|
|
4667
4694
|
pluginsBtn.disabled = false;
|
|
4668
4695
|
if (!res.ok) {
|
|
4669
|
-
|
|
4696
|
+
setPluginsStatus("");
|
|
4670
4697
|
showToast(L.pluginsUpdateFailed + ": " + errText(res), "error");
|
|
4671
4698
|
return;
|
|
4672
4699
|
}
|
|
4673
|
-
|
|
4700
|
+
setPluginsStatus(res.updated > 0 ? L.pluginsUpdatedDone.replaceAll("{n}", String(res.updated)) : L.pluginsUpToDate);
|
|
4674
4701
|
showToast(pluginsStatusLine.textContent, "success");
|
|
4675
4702
|
};
|
|
4676
4703
|
void (async () => {
|
|
4677
4704
|
const cfg = await getConfig(true).catch(() => null);
|
|
4678
4705
|
const res = await rpc("/plugins/status");
|
|
4679
4706
|
if (!res.ok) {
|
|
4680
|
-
|
|
4707
|
+
setPluginsStatus("");
|
|
4681
4708
|
return;
|
|
4682
4709
|
}
|
|
4683
4710
|
const n = (res.updates || []).length;
|
|
@@ -4685,7 +4712,7 @@
|
|
|
4685
4712
|
void runPluginsUpdate();
|
|
4686
4713
|
return;
|
|
4687
4714
|
}
|
|
4688
|
-
|
|
4715
|
+
setPluginsStatus(n > 0 ? L.pluginsUpdatesFound.replaceAll("{n}", String(n)) : L.pluginsUpToDate);
|
|
4689
4716
|
})();
|
|
4690
4717
|
const HK_ACTIONS = [
|
|
4691
4718
|
["switchLast", "hkAltZ"],
|
|
@@ -4753,6 +4780,16 @@
|
|
|
4753
4780
|
if (await setFeature("imageCopy", next)) f.imageCopy = next;
|
|
4754
4781
|
refreshRows();
|
|
4755
4782
|
}),
|
|
4783
|
+
settingRow(L.featureTableCopy, L.featureTableCopyDesc, f.tableCopy !== false, async () => {
|
|
4784
|
+
const next = !(f.tableCopy !== false);
|
|
4785
|
+
if (await setFeature("tableCopy", next)) f.tableCopy = next;
|
|
4786
|
+
refreshRows();
|
|
4787
|
+
}),
|
|
4788
|
+
settingRow(L.featureComposerProvider, L.featureComposerProviderDesc, f.composerProvider !== false, async () => {
|
|
4789
|
+
const next = !(f.composerProvider !== false);
|
|
4790
|
+
if (await setFeature("composerProvider", next)) f.composerProvider = next;
|
|
4791
|
+
refreshRows();
|
|
4792
|
+
}),
|
|
4756
4793
|
settingRow(L.featureSandboxReclaim, L.featureSandboxReclaimDesc, f.sandboxReclaim !== false, async () => {
|
|
4757
4794
|
const next = !(f.sandboxReclaim !== false);
|
|
4758
4795
|
if (await setFeature("sandboxReclaim", next)) f.sandboxReclaim = next;
|
|
@@ -4791,12 +4828,14 @@
|
|
|
4791
4828
|
if (nameEl) {
|
|
4792
4829
|
nameEl.replaceChildren(
|
|
4793
4830
|
document.createTextNode(L.featureAutoUpdatePlugins + " "),
|
|
4794
|
-
repoLink
|
|
4795
|
-
document.createTextNode(" \u63D2\u4EF6")
|
|
4831
|
+
repoLink
|
|
4796
4832
|
);
|
|
4797
4833
|
}
|
|
4798
4834
|
const descEl = row.querySelector("[data-zcodepro-row-desc]");
|
|
4799
|
-
if (descEl)
|
|
4835
|
+
if (descEl) {
|
|
4836
|
+
descEl.replaceChildren(pluginsStatusLine);
|
|
4837
|
+
descEl.setAttribute("title", descEl.textContent.trim());
|
|
4838
|
+
}
|
|
4800
4839
|
return row;
|
|
4801
4840
|
})()
|
|
4802
4841
|
);
|
|
@@ -4989,10 +5028,10 @@
|
|
|
4989
5028
|
const panes = { features: paneFeatures, shortcuts: paneShortcuts, styles: paneStyles, perf: panePerf, agents: paneAgents, proxy: paneProxy, sync: paneSync, vision: paneVision, headroom: paneHeadroom, rtk: paneRtk, debug: paneDebug };
|
|
4990
5029
|
const tabDefs = [
|
|
4991
5030
|
["features", L.tabFeatures],
|
|
4992
|
-
["shortcuts", L.tabShortcuts],
|
|
4993
|
-
["agents", L.tabBehavior],
|
|
4994
5031
|
["styles", L.tabStyles],
|
|
5032
|
+
["agents", L.tabBehavior],
|
|
4995
5033
|
["perf", L.tabPerformance],
|
|
5034
|
+
["shortcuts", L.tabShortcuts],
|
|
4996
5035
|
["proxy", L.tabProxy],
|
|
4997
5036
|
["sync", L.tabSync],
|
|
4998
5037
|
["vision", L.tabVision],
|
|
@@ -10578,6 +10617,236 @@
|
|
|
10578
10617
|
});
|
|
10579
10618
|
}
|
|
10580
10619
|
|
|
10620
|
+
// src/inject/features/table-copy.js
|
|
10621
|
+
var installed5 = false;
|
|
10622
|
+
var enabled9 = true;
|
|
10623
|
+
function cleanTable(table) {
|
|
10624
|
+
const clone = table.cloneNode(false);
|
|
10625
|
+
const walk = (src, dst) => {
|
|
10626
|
+
for (const node of src.childNodes) {
|
|
10627
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
10628
|
+
if (node.textContent.trim()) dst.append(document.createTextNode(node.textContent));
|
|
10629
|
+
continue;
|
|
10630
|
+
}
|
|
10631
|
+
if (node.nodeType !== Node.ELEMENT_NODE) continue;
|
|
10632
|
+
const tag = node.tagName;
|
|
10633
|
+
const el = document.createElement(tag.toLowerCase());
|
|
10634
|
+
if (tag === "TD" || tag === "TH") {
|
|
10635
|
+
for (const a of ["colspan", "rowspan"]) {
|
|
10636
|
+
const v = node.getAttribute(a);
|
|
10637
|
+
if (v && v !== "1") el.setAttribute(a, v);
|
|
10638
|
+
}
|
|
10639
|
+
}
|
|
10640
|
+
dst.append(el);
|
|
10641
|
+
walk(node, el);
|
|
10642
|
+
}
|
|
10643
|
+
};
|
|
10644
|
+
walk(table, clone);
|
|
10645
|
+
return clone;
|
|
10646
|
+
}
|
|
10647
|
+
function tableToTsv(table) {
|
|
10648
|
+
const rows = [];
|
|
10649
|
+
for (const tr of table.rows) {
|
|
10650
|
+
const cells = [];
|
|
10651
|
+
for (const cell of tr.cells) {
|
|
10652
|
+
cells.push((cell.textContent || "").replace(/[\t\r\n]+/g, " ").trim());
|
|
10653
|
+
}
|
|
10654
|
+
rows.push(cells.join(" "));
|
|
10655
|
+
}
|
|
10656
|
+
return rows.join("\n");
|
|
10657
|
+
}
|
|
10658
|
+
async function copyTable(table) {
|
|
10659
|
+
const L = t();
|
|
10660
|
+
const clean = cleanTable(table);
|
|
10661
|
+
const html = '<meta charset="utf-8"><table>' + clean.innerHTML + "</table>";
|
|
10662
|
+
const tsv = tableToTsv(table);
|
|
10663
|
+
try {
|
|
10664
|
+
if (typeof ClipboardItem !== "undefined" && navigator.clipboard && navigator.clipboard.write) {
|
|
10665
|
+
await navigator.clipboard.write([
|
|
10666
|
+
new ClipboardItem({
|
|
10667
|
+
"text/html": new Blob([html], { type: "text/html" }),
|
|
10668
|
+
"text/plain": new Blob([tsv], { type: "text/plain" })
|
|
10669
|
+
})
|
|
10670
|
+
]);
|
|
10671
|
+
showToast(L.tableCopied, "success");
|
|
10672
|
+
return;
|
|
10673
|
+
}
|
|
10674
|
+
} catch {
|
|
10675
|
+
}
|
|
10676
|
+
try {
|
|
10677
|
+
const holder = document.createElement("div");
|
|
10678
|
+
holder.contentEditable = "true";
|
|
10679
|
+
holder.style.cssText = "position:fixed;left:-9999px;top:0;";
|
|
10680
|
+
holder.append(clean);
|
|
10681
|
+
document.body.append(holder);
|
|
10682
|
+
const range = document.createRange();
|
|
10683
|
+
range.selectNodeContents(holder);
|
|
10684
|
+
const sel = window.getSelection();
|
|
10685
|
+
sel.removeAllRanges();
|
|
10686
|
+
sel.addRange(range);
|
|
10687
|
+
const ok = document.execCommand("copy");
|
|
10688
|
+
sel.removeAllRanges();
|
|
10689
|
+
holder.remove();
|
|
10690
|
+
if (ok) {
|
|
10691
|
+
showToast(L.tableCopied, "success");
|
|
10692
|
+
return;
|
|
10693
|
+
}
|
|
10694
|
+
} catch {
|
|
10695
|
+
}
|
|
10696
|
+
showToast(L.failed, "error");
|
|
10697
|
+
}
|
|
10698
|
+
function makeButton(onClick) {
|
|
10699
|
+
const L = t();
|
|
10700
|
+
const btn = document.createElement("button");
|
|
10701
|
+
btn.type = "button";
|
|
10702
|
+
btn.setAttribute("aria-label", L.tableCopyBtn);
|
|
10703
|
+
btn.title = L.tableCopyBtn;
|
|
10704
|
+
btn.className = "group/button inline-flex items-center justify-center border border-transparent bg-clip-padding whitespace-nowrap transition-colors outline-none select-none text-foreground hover:bg-hover hover:text-foreground size-7 rounded-lg [&_svg:not([class*='size-'])]:size-4 shrink-0";
|
|
10705
|
+
btn.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-table size-3.5" aria-hidden="true"><path d="M12 3v18"></path><path d="M3 9h18"></path><path d="M3 15h18"></path><path d="M5 21h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2"></path></svg>';
|
|
10706
|
+
btn.addEventListener("click", (e) => {
|
|
10707
|
+
e.stopPropagation();
|
|
10708
|
+
onClick();
|
|
10709
|
+
});
|
|
10710
|
+
return btn;
|
|
10711
|
+
}
|
|
10712
|
+
function startTableCopy() {
|
|
10713
|
+
if (installed5 || typeof document === "undefined") return;
|
|
10714
|
+
installed5 = true;
|
|
10715
|
+
ensureStyle();
|
|
10716
|
+
const tableOf = (bar) => {
|
|
10717
|
+
let scope = bar.parentElement;
|
|
10718
|
+
for (let i = 0; i < 3 && scope; i++) {
|
|
10719
|
+
const table = scope.querySelector("table");
|
|
10720
|
+
if (table) return table;
|
|
10721
|
+
scope = scope.parentElement;
|
|
10722
|
+
}
|
|
10723
|
+
return null;
|
|
10724
|
+
};
|
|
10725
|
+
const enhance = (bar) => {
|
|
10726
|
+
if (bar.dataset.zcodeproTableCopy) return;
|
|
10727
|
+
bar.dataset.zcodeproTableCopy = "1";
|
|
10728
|
+
const table = tableOf(bar);
|
|
10729
|
+
if (!table) return;
|
|
10730
|
+
bar.append(makeButton(() => {
|
|
10731
|
+
void copyTable(table);
|
|
10732
|
+
}));
|
|
10733
|
+
};
|
|
10734
|
+
const scan5 = () => {
|
|
10735
|
+
for (const bar of document.querySelectorAll("[data-markdown-table-toolbar]")) enhance(bar);
|
|
10736
|
+
};
|
|
10737
|
+
scan5();
|
|
10738
|
+
void getConfig().then((cfg) => {
|
|
10739
|
+
enabled9 = cfg.features ? cfg.features.tableCopy !== false : true;
|
|
10740
|
+
}).catch(() => {
|
|
10741
|
+
});
|
|
10742
|
+
window.addEventListener("zcodepro:config-changed", () => {
|
|
10743
|
+
void getConfig(true).then((cfg) => {
|
|
10744
|
+
enabled9 = cfg.features ? cfg.features.tableCopy !== false : true;
|
|
10745
|
+
}).catch(() => {
|
|
10746
|
+
});
|
|
10747
|
+
});
|
|
10748
|
+
const observer2 = new MutationObserver(() => {
|
|
10749
|
+
if (enabled9) scan5();
|
|
10750
|
+
});
|
|
10751
|
+
observer2.observe(document.body, { childList: true, subtree: true });
|
|
10752
|
+
}
|
|
10753
|
+
|
|
10754
|
+
// src/inject/features/composer-provider.js
|
|
10755
|
+
var installed6 = false;
|
|
10756
|
+
var enabled10 = true;
|
|
10757
|
+
function labelToDisplay(label) {
|
|
10758
|
+
const i = label.indexOf("/");
|
|
10759
|
+
if (i <= 0) return null;
|
|
10760
|
+
const provider = label.slice(0, i).trim();
|
|
10761
|
+
const rest = label.slice(i + 1);
|
|
10762
|
+
const model = rest.trim().split(/\s+/)[0];
|
|
10763
|
+
if (!provider || !model) return null;
|
|
10764
|
+
return `${provider} / ${model}`;
|
|
10765
|
+
}
|
|
10766
|
+
function apply3() {
|
|
10767
|
+
if (!enabled10) {
|
|
10768
|
+
for (const btn of document.querySelectorAll('[data-testid="chat-model-select-trigger"]')) {
|
|
10769
|
+
if (!btn.dataset.zcodeproProviderShown) continue;
|
|
10770
|
+
const label = btn.getAttribute("aria-label") || "";
|
|
10771
|
+
const i = label.indexOf("/");
|
|
10772
|
+
if (i <= 0) continue;
|
|
10773
|
+
const model = label.slice(i + 1).trim().split(/\s+/)[0];
|
|
10774
|
+
if (!model) continue;
|
|
10775
|
+
for (const sp of btn.querySelectorAll("span[title]")) sp.setAttribute("title", model);
|
|
10776
|
+
for (const el of btn.querySelectorAll("span[title] span:not([title])")) {
|
|
10777
|
+
if (!el.querySelector("span") && el.textContent.includes("/")) el.textContent = model;
|
|
10778
|
+
}
|
|
10779
|
+
delete btn.dataset.zcodeproProviderShown;
|
|
10780
|
+
}
|
|
10781
|
+
return;
|
|
10782
|
+
}
|
|
10783
|
+
for (const btn of document.querySelectorAll('[data-testid="chat-model-select-trigger"]')) {
|
|
10784
|
+
const label = btn.getAttribute("aria-label") || "";
|
|
10785
|
+
const display = labelToDisplay(label);
|
|
10786
|
+
if (!display) continue;
|
|
10787
|
+
const titleSpans = [...btn.querySelectorAll("span[title]")];
|
|
10788
|
+
if (!titleSpans.length) continue;
|
|
10789
|
+
const innermost = titleSpans.filter((sp) => !sp.querySelector("span[title]"));
|
|
10790
|
+
if (!innermost.length) continue;
|
|
10791
|
+
const holders = [];
|
|
10792
|
+
for (const sp of innermost) {
|
|
10793
|
+
sp.querySelectorAll("span:not([title])").forEach((el) => {
|
|
10794
|
+
if (!el.querySelector("span") && el.textContent.trim() && !el.textContent.includes("/")) holders.push(el);
|
|
10795
|
+
});
|
|
10796
|
+
}
|
|
10797
|
+
if (!holders.length) continue;
|
|
10798
|
+
for (const sp of titleSpans) {
|
|
10799
|
+
if (sp.getAttribute("title") !== display) sp.setAttribute("title", display);
|
|
10800
|
+
}
|
|
10801
|
+
for (const el of holders) el.textContent = display;
|
|
10802
|
+
btn.dataset.zcodeproProviderShown = "1";
|
|
10803
|
+
}
|
|
10804
|
+
}
|
|
10805
|
+
function startComposerProvider() {
|
|
10806
|
+
if (installed6 || typeof document === "undefined") return;
|
|
10807
|
+
installed6 = true;
|
|
10808
|
+
const COMPOSER_SEL = '[data-composer-layout], [data-composer-leading-content], [data-testid="chat-model-select-trigger"]';
|
|
10809
|
+
const relevant2 = (muts) => {
|
|
10810
|
+
for (const m of muts) {
|
|
10811
|
+
if (m.type === "childList") {
|
|
10812
|
+
for (const n of [...m.addedNodes, ...m.removedNodes]) {
|
|
10813
|
+
if (n instanceof Element && (n.matches?.(COMPOSER_SEL) || n.querySelector?.(COMPOSER_SEL))) return true;
|
|
10814
|
+
}
|
|
10815
|
+
} else if (m.type === "characterData") {
|
|
10816
|
+
let el = m.target.parentElement;
|
|
10817
|
+
while (el && el !== document.body) {
|
|
10818
|
+
if (el.matches?.("[data-composer-layout], [data-composer-leading-actions], [data-composer-leading-content]")) return true;
|
|
10819
|
+
el = el.parentElement;
|
|
10820
|
+
}
|
|
10821
|
+
}
|
|
10822
|
+
}
|
|
10823
|
+
return false;
|
|
10824
|
+
};
|
|
10825
|
+
const schedule = () => {
|
|
10826
|
+
clearTimeout(schedule.t);
|
|
10827
|
+
schedule.t = setTimeout(apply3, 120);
|
|
10828
|
+
};
|
|
10829
|
+
void getConfig().then((cfg) => {
|
|
10830
|
+
enabled10 = cfg.features ? cfg.features.composerProvider !== false : true;
|
|
10831
|
+
}).catch(() => {
|
|
10832
|
+
});
|
|
10833
|
+
window.addEventListener("zcodepro:config-changed", () => {
|
|
10834
|
+
void getConfig(true).then((cfg) => {
|
|
10835
|
+
const next = cfg.features ? cfg.features.composerProvider !== false : true;
|
|
10836
|
+
if (next !== enabled10) {
|
|
10837
|
+
enabled10 = next;
|
|
10838
|
+
apply3();
|
|
10839
|
+
}
|
|
10840
|
+
}).catch(() => {
|
|
10841
|
+
});
|
|
10842
|
+
});
|
|
10843
|
+
const observer2 = new MutationObserver((muts) => {
|
|
10844
|
+
if (enabled10 && relevant2(muts)) schedule();
|
|
10845
|
+
});
|
|
10846
|
+
observer2.observe(document.body, { childList: true, subtree: true, characterData: true });
|
|
10847
|
+
apply3();
|
|
10848
|
+
}
|
|
10849
|
+
|
|
10581
10850
|
// src/inject/features/plugin-updates.js
|
|
10582
10851
|
var NOTIFIED_KEY = "zcodepro-plugin-updates-notified";
|
|
10583
10852
|
async function startPluginUpdateCheck() {
|
|
@@ -10709,6 +10978,14 @@
|
|
|
10709
10978
|
startTheme();
|
|
10710
10979
|
} catch {
|
|
10711
10980
|
}
|
|
10981
|
+
try {
|
|
10982
|
+
startTableCopy();
|
|
10983
|
+
} catch {
|
|
10984
|
+
}
|
|
10985
|
+
try {
|
|
10986
|
+
startComposerProvider();
|
|
10987
|
+
} catch {
|
|
10988
|
+
}
|
|
10712
10989
|
try {
|
|
10713
10990
|
startSettingsEntry();
|
|
10714
10991
|
} catch {
|