ai-helper-agent 2.3.1 → 2.4.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.
- package/README.md +13 -3
- package/dist/assets/__vite-browser-external-CM3Eme-n.js +1 -0
- package/dist/assets/agent-store-Ce3f4Ya3.js +1 -0
- package/dist/assets/background.js +104 -80
- package/dist/assets/chat-export-CWSUeOo4.js +37 -0
- package/dist/assets/chunk-CMxvf4Kt.js +1 -0
- package/dist/assets/content.js +159 -156
- package/dist/assets/{dist-BQOFgIxk.js → dist-DhUTa_WT.js} +5 -6
- package/dist/assets/dist-LQPh1k0y.js +24 -0
- package/dist/assets/i18n-ouMgDZ2t.js +49 -0
- package/dist/assets/jszip.min-Bm_16osY.js +2 -0
- package/dist/assets/lib-33nIefF6.js +220 -0
- package/dist/assets/{marked.min.js-08SGy6CO.js → marked.min.js-D2rXgLAQ.js} +7 -8
- package/dist/assets/{marked.min.js-loader-4kRZ9iCP.js → marked.min.js-loader-tKH5SQVQ.js} +1 -1
- package/dist/assets/model-profiles-6dzdrSS4.js +24 -0
- package/dist/assets/network-scope-CNRYXk74.js +1 -0
- package/dist/assets/options-Cp1UMkjK.css +1 -0
- package/dist/assets/options.js +108 -102
- package/dist/assets/{page-snapshot-renderer-CVL6r6Kf.js → page-snapshot-renderer-j72q92KH.js} +2 -3
- package/dist/assets/pdf-DnVqBaAN.js +6 -0
- package/dist/assets/session-store-CmGs_rhh.js +76 -0
- package/dist/assets/side_panel.css +1 -1
- package/dist/assets/side_panel.js +958 -1124
- package/dist/assets/theme-BRAX5X2F.css +1 -0
- package/dist/assets/{modulepreload-polyfill-P2Xu9kJm.js → theme-CLwYsx9o.js} +1 -1
- package/dist/assets/utils-9i9g8vW8.js +112 -0
- package/dist/assets/version-BrT5Y9A7.js +1 -0
- package/dist/assets/xlsx-DGkz7cnk.js +105 -0
- package/dist/manifest.json +2 -5
- package/dist/offscreen/offscreen.js +7 -7
- package/dist/options.html +151 -75
- package/dist/side_panel.html +167 -137
- package/package.json +1 -1
- package/src/config.js +3 -2
- package/src/executor.js +99 -18
- package/src/locales/en.json +16 -2
- package/src/locales/zh.json +16 -2
- package/src/memory/injection.js +12 -2
- package/src/memory/routes.js +6 -0
- package/src/memory/service.js +57 -2
- package/src/rag/manager.js +1 -1
- package/src/rag/url-guard.js +27 -12
- package/src/security.js +433 -31
- package/src/server.js +28 -8
- package/dist/assets/agent-store-DcAs6YyA.js +0 -2
- package/dist/assets/agent-store-DcAs6YyA.js.map +0 -1
- package/dist/assets/background.js.map +0 -1
- package/dist/assets/dist-BQOFgIxk.js.map +0 -1
- package/dist/assets/i18n-C4jSRoCH.js +0 -50
- package/dist/assets/i18n-C4jSRoCH.js.map +0 -1
- package/dist/assets/jszip.min-BXqW2-9v.js +0 -3
- package/dist/assets/jszip.min-BXqW2-9v.js.map +0 -1
- package/dist/assets/lib-Bi7BFuND.js +0 -221
- package/dist/assets/lib-Bi7BFuND.js.map +0 -1
- package/dist/assets/marked.min.js-08SGy6CO.js.map +0 -1
- package/dist/assets/model-profiles-Dl_MsXWa.js +0 -25
- package/dist/assets/model-profiles-Dl_MsXWa.js.map +0 -1
- package/dist/assets/options-8-nu3P5K.css +0 -1
- package/dist/assets/options.js.map +0 -1
- package/dist/assets/page-snapshot-renderer-CVL6r6Kf.js.map +0 -1
- package/dist/assets/pdf-HiJ0icvU.js +0 -7
- package/dist/assets/pdf-HiJ0icvU.js.map +0 -1
- package/dist/assets/rolldown-runtime-C0FnF6B9.js +0 -1
- package/dist/assets/session-store-CzVQCgQ_.js +0 -77
- package/dist/assets/session-store-CzVQCgQ_.js.map +0 -1
- package/dist/assets/side_panel.js.map +0 -1
- package/dist/assets/version-CNG2KGnJ.js +0 -2
- package/dist/assets/version-CNG2KGnJ.js.map +0 -1
- package/dist/assets/xlsx-BHKh7vjA.js +0 -106
- package/dist/assets/xlsx-BHKh7vjA.js.map +0 -1
- package/dist/icons/badges/license-MIT.svg +0 -21
- package/dist/icons/badges/platform.svg +0 -21
- package/dist/icons/badges/prs-welcome.svg +0 -21
- package/dist/icons/badges/version.svg +0 -21
package/dist/options.html
CHANGED
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title data-i18n="settings.docTitle">AI Helper - 配置</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/
|
|
8
|
-
<script type="module" crossorigin src="/assets/
|
|
9
|
-
<script type="module" crossorigin src="/assets/
|
|
7
|
+
<script type="module" crossorigin src="/assets/theme-CLwYsx9o.js"></script>
|
|
8
|
+
<script type="module" crossorigin src="/assets/i18n-ouMgDZ2t.js"></script>
|
|
9
|
+
<script type="module" crossorigin src="/assets/model-profiles-6dzdrSS4.js"></script>
|
|
10
|
+
<script type="module" crossorigin src="/assets/version-BrT5Y9A7.js"></script>
|
|
11
|
+
<script type="module" crossorigin src="/assets/network-scope-CNRYXk74.js"></script>
|
|
10
12
|
<script type="module" crossorigin src="/assets/options.js"></script>
|
|
11
|
-
<
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/assets/options-
|
|
13
|
+
<link rel="stylesheet" crossorigin href="/assets/theme-BRAX5X2F.css">
|
|
14
|
+
<link rel="stylesheet" crossorigin href="/assets/options-Cp1UMkjK.css">
|
|
13
15
|
</head>
|
|
14
16
|
<body>
|
|
15
17
|
<div class="container">
|
|
@@ -39,7 +41,6 @@
|
|
|
39
41
|
<div class="tab-nav">
|
|
40
42
|
<button class="tab-nav-btn active" data-tab="basic" data-i18n="settings.tabBasic">基础</button>
|
|
41
43
|
<button class="tab-nav-btn" data-tab="react" data-i18n="settings.tabReact">推理</button>
|
|
42
|
-
<button class="tab-nav-btn" data-tab="reflection" data-i18n="settings.tabReflection">反思</button>
|
|
43
44
|
<button class="tab-nav-btn" data-tab="toolbar" data-i18n="settings.tabToolbar">划词</button>
|
|
44
45
|
<button class="tab-nav-btn" data-tab="agent" data-i18n="settings.tabAgent">代理</button>
|
|
45
46
|
<button class="tab-nav-btn" data-tab="toolbox" data-i18n="settings.tabToolbox">扩展</button>
|
|
@@ -48,6 +49,25 @@
|
|
|
48
49
|
</div>
|
|
49
50
|
|
|
50
51
|
<div class="tab-panel active" data-tab="basic">
|
|
52
|
+
<div class="form-group" id="appearanceGroup">
|
|
53
|
+
<label data-i18n="settings.appearance">外观</label>
|
|
54
|
+
<div class="theme-segment" id="themeSegment" role="radiogroup">
|
|
55
|
+
<label class="theme-segment-opt">
|
|
56
|
+
<input type="radio" name="themePref" value="system">
|
|
57
|
+
<span data-i18n="settings.themeSystem">跟随系统</span>
|
|
58
|
+
</label>
|
|
59
|
+
<label class="theme-segment-opt">
|
|
60
|
+
<input type="radio" name="themePref" value="light">
|
|
61
|
+
<span data-i18n="settings.themeLight">亮色</span>
|
|
62
|
+
</label>
|
|
63
|
+
<label class="theme-segment-opt">
|
|
64
|
+
<input type="radio" name="themePref" value="dark">
|
|
65
|
+
<span data-i18n="settings.themeDark">暗色</span>
|
|
66
|
+
</label>
|
|
67
|
+
</div>
|
|
68
|
+
<span class="hint" style="display:block;margin-top:6px;" data-i18n="settings.themeHint">主题即时生效并在所有页面同步</span>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
51
71
|
<div class="form-group">
|
|
52
72
|
<label data-i18n="settings.language">界面语言</label>
|
|
53
73
|
<div class="model-selector">
|
|
@@ -97,7 +117,7 @@
|
|
|
97
117
|
</div>
|
|
98
118
|
|
|
99
119
|
<div class="form-group">
|
|
100
|
-
<label>API Key <span class="hint" style="color:
|
|
120
|
+
<label>API Key <span class="hint" style="color: var(--danger-500);" data-i18n="settings.requiredHint">(必填)</span><span class="info-icon" data-i18n-title="settings.apiKeyHint" title="请从您使用的大模型平台获取对应的 API Key,并在此配置中填写。请妥善保管您的 API Key,避免泄露。">ⓘ</span></label>
|
|
101
121
|
<div class="token-input-wrapper">
|
|
102
122
|
<input type="password" id="apiKey" class="token-input" data-i18n-placeholder="settings.apiKeyPlaceholder" placeholder="请输入您的 API Key">
|
|
103
123
|
<button type="button" id="toggleToken" class="toggle-token-btn" data-i18n-title="settings.toggleApiKey" title="显示/隐藏 API Key">
|
|
@@ -129,7 +149,7 @@
|
|
|
129
149
|
<div class="add-model-form" id="addModelForm" style="display:none;">
|
|
130
150
|
<input type="text" id="addModelName" data-i18n-placeholder="settings.modelNameInputPlaceholder" placeholder="模型名称(如 gpt-4o)">
|
|
131
151
|
<input type="number" id="addModelContextWindow" data-i18n-placeholder="settings.contextWindowPlaceholder" placeholder="上下文窗口大小(tokens)" min="0" max="2000000" step="1000">
|
|
132
|
-
<span class="hint-text" style="font-size:11px;color
|
|
152
|
+
<span class="hint-text" style="font-size:11px;color:var(--text-tertiary);margin-top:-4px;" data-i18n="settings.contextWindowHint">128K=128000, 200K=200000, 1M=1000000, 留空则自动推断</span>
|
|
133
153
|
<div class="add-model-form-actions">
|
|
134
154
|
<button type="button" class="btn-primary" id="confirmAddModelBtn" data-i18n="settings.confirmAdd">确认添加</button>
|
|
135
155
|
<button type="button" class="btn-cancel" id="cancelAddModelBtn" data-i18n="common.cancel">取消</button>
|
|
@@ -199,7 +219,7 @@
|
|
|
199
219
|
<div class="add-model-form" id="addImageModelForm" style="display:none;">
|
|
200
220
|
<input type="text" id="addImageModelName" data-i18n-placeholder="settings.modelNameInputPlaceholder" placeholder="模型名称(如 gpt-4o)">
|
|
201
221
|
<input type="number" id="addImageModelContextWindow" data-i18n-placeholder="settings.contextWindowPlaceholder" placeholder="上下文窗口大小(tokens)" min="0" max="2000000" step="1000">
|
|
202
|
-
<span class="hint-text" style="font-size:11px;color
|
|
222
|
+
<span class="hint-text" style="font-size:11px;color:var(--text-tertiary);margin-top:-4px;" data-i18n="settings.contextWindowHint">128K=128000, 200K=200000, 1M=1000000, 留空则自动推断</span>
|
|
203
223
|
<div class="add-model-form-actions">
|
|
204
224
|
<button type="button" class="btn-primary" id="confirmAddImageModelBtn" data-i18n="settings.confirmAdd">确认添加</button>
|
|
205
225
|
<button type="button" class="btn-cancel" id="cancelAddImageModelBtn" data-i18n="common.cancel">取消</button>
|
|
@@ -219,33 +239,33 @@
|
|
|
219
239
|
</button>
|
|
220
240
|
<textarea id="systemPrompt" rows="15" style="padding-right: 40px;"></textarea>
|
|
221
241
|
</div>
|
|
222
|
-
<p style="font-size: 12px; color:
|
|
242
|
+
<p style="font-size: 12px; color: var(--text-tertiary); margin-top: 5px;" data-i18n="settings.systemPromptTip">
|
|
223
243
|
💡 提示:系统提示词用于定义 AI 助手的行为和角色。
|
|
224
244
|
</p>
|
|
225
245
|
</div>
|
|
226
246
|
|
|
227
247
|
<div class="form-group">
|
|
228
|
-
<label data-i18n="settings.completionFeedbackTitle" style="font-weight:600;color
|
|
248
|
+
<label data-i18n="settings.completionFeedbackTitle" style="font-weight:600;color:var(--text-primary);margin-bottom:10px;">完成反馈</label>
|
|
229
249
|
<label class="toggle-label">
|
|
230
250
|
<input type="checkbox" id="completionSoundEnabled">
|
|
231
251
|
<span class="toggle-text" data-i18n="settings.completionSound">播放提示音(成功与失败音效不同)</span>
|
|
232
252
|
</label>
|
|
233
|
-
<span class="hint" style="display:block;margin:4px 0 0 50px;font-size:12px;color
|
|
253
|
+
<span class="hint" style="display:block;margin:4px 0 0 50px;font-size:12px;color:var(--text-secondary);line-height:1.5;" data-i18n="settings.completionSoundHint">成功时“叮-咚”升调,失败时“咚-叮”降调;用户主动取消不播放</span>
|
|
234
254
|
<label class="toggle-label" style="margin-top:10px;">
|
|
235
255
|
<input type="checkbox" id="completionConfettiEnabled">
|
|
236
256
|
<span class="toggle-text" data-i18n="settings.completionConfetti">播放彩带动画</span>
|
|
237
257
|
</label>
|
|
238
|
-
<span class="hint" style="display:block;margin:4px 0 0 50px;font-size:12px;color
|
|
258
|
+
<span class="hint" style="display:block;margin:4px 0 0 50px;font-size:12px;color:var(--text-secondary);line-height:1.5;" data-i18n="settings.completionConfettiHint">仅在回答成功完成时播放;失败和取消不播放</span>
|
|
239
259
|
<label class="toggle-label" style="margin-top:10px;">
|
|
240
260
|
<input type="checkbox" id="completionNotificationEnabled">
|
|
241
261
|
<span class="toggle-text" data-i18n="settings.completionNotification">任务完成或失败时弹出桌面通知</span>
|
|
242
262
|
</label>
|
|
243
|
-
<span class="hint" style="display:block;margin:4px 0 0 50px;font-size:12px;color
|
|
263
|
+
<span class="hint" style="display:block;margin:4px 0 0 50px;font-size:12px;color:var(--text-secondary);line-height:1.5;" data-i18n="settings.completionNotificationHint">仅在看不到侧边栏时弹出;成功自动消失,失败停留至手动关闭;点击通知打开侧边栏</span>
|
|
244
264
|
<label class="toggle-label" style="margin-top:10px;">
|
|
245
265
|
<input type="checkbox" id="scheduledNotificationEnabled">
|
|
246
266
|
<span class="toggle-text" data-i18n="settings.scheduledNotification">定时任务完成或失败时弹出桌面通知</span>
|
|
247
267
|
</label>
|
|
248
|
-
<span class="hint" style="display:block;margin:4px 0 0 50px;font-size:12px;color
|
|
268
|
+
<span class="hint" style="display:block;margin:4px 0 0 50px;font-size:12px;color:var(--text-secondary);line-height:1.5;" data-i18n="settings.scheduledNotificationHint">定时任务在后台执行、无声音等其他提醒渠道,开关开启时总是弹出;默认开启,可手动关闭</span>
|
|
249
269
|
</div>
|
|
250
270
|
|
|
251
271
|
<div class="form-group">
|
|
@@ -253,7 +273,7 @@
|
|
|
253
273
|
<input type="checkbox" id="interactionNotificationEnabled">
|
|
254
274
|
<span class="toggle-text" data-i18n="settings.interactionNotification">AI 需要你确认或澄清时提醒我</span>
|
|
255
275
|
</label>
|
|
256
|
-
<span class="hint" style="display:block;margin:4px 0 0 50px;font-size:12px;color
|
|
276
|
+
<span class="hint" style="display:block;margin:4px 0 0 50px;font-size:12px;color:var(--text-secondary);line-height:1.5;" data-i18n="settings.interactionNotificationHint">推理循环等待你操作时弹桌面提醒;仅在看得到侧边栏时不打扰,点击通知打开侧边栏</span>
|
|
257
277
|
</div>
|
|
258
278
|
|
|
259
279
|
<div class="form-group">
|
|
@@ -265,17 +285,17 @@
|
|
|
265
285
|
</div>
|
|
266
286
|
|
|
267
287
|
<div class="form-group">
|
|
268
|
-
<label data-i18n="settings.sidePanelScopeTitle" style="font-weight:600;color
|
|
288
|
+
<label data-i18n="settings.sidePanelScopeTitle" style="font-weight:600;color:var(--text-primary);margin-bottom:10px;">侧边栏作用域</label>
|
|
269
289
|
<label class="toggle-label" style="cursor:pointer;">
|
|
270
290
|
<input type="radio" name="sidePanelScope" value="global">
|
|
271
291
|
<span class="toggle-text" data-i18n="settings.sidePanelScopeGlobal">全局模式</span>
|
|
272
292
|
</label>
|
|
273
|
-
<span class="hint" style="display:block;margin:4px 0 0 26px;font-size:12px;color
|
|
293
|
+
<span class="hint" style="display:block;margin:4px 0 0 26px;font-size:12px;color:var(--text-secondary);" data-i18n="settings.sidePanelScopeGlobalHint">同一窗口内所有标签页共享同一份侧边栏实例,切换标签页时始终可见</span>
|
|
274
294
|
<label class="toggle-label" style="cursor:pointer;margin-top:10px;">
|
|
275
295
|
<input type="radio" name="sidePanelScope" value="tab-specific">
|
|
276
296
|
<span class="toggle-text" data-i18n="settings.sidePanelScopeTab">标签页绑定模式</span>
|
|
277
297
|
</label>
|
|
278
|
-
<span class="hint" style="display:block;margin:4px 0 0 26px;font-size:12px;color
|
|
298
|
+
<span class="hint" style="display:block;margin:4px 0 0 26px;font-size:12px;color:var(--text-secondary);" data-i18n="settings.sidePanelScopeTabHint">侧边栏仅在打开它的标签页可见,切换到其他标签页时自动隐藏</span>
|
|
279
299
|
</div>
|
|
280
300
|
|
|
281
301
|
<div class="form-group">
|
|
@@ -355,12 +375,110 @@
|
|
|
355
375
|
<span class="toggle-switch"></span>
|
|
356
376
|
<span id="toolConfirmationEnabledLabel" data-i18n="react.enabled">已启用</span>
|
|
357
377
|
</label>
|
|
358
|
-
<div class="info-text" style="font-size: 12px; color:
|
|
378
|
+
<div class="info-text" style="font-size: 12px; color: var(--text-tertiary); margin-top: 4px;">
|
|
359
379
|
<span data-i18n="react.toolConfirmationDesc1">启用后,当模型执行敏感操作(工具调用、命令执行等)时,会弹出确认框等待用户确认。</span><br>
|
|
360
380
|
<span data-i18n="react.toolConfirmationDesc2">关闭后,所有操作将直接放行执行,无需确认。</span>
|
|
361
381
|
</div>
|
|
362
382
|
</div>
|
|
363
383
|
|
|
384
|
+
<div class="react-config-item">
|
|
385
|
+
<label>
|
|
386
|
+
<span data-i18n="react.networkAccess">内网地址访问</span>
|
|
387
|
+
<span class="hint-text" data-i18n="react.networkAccessHint">(控制 fetch_url 等工具能否访问本机与内网地址)</span>
|
|
388
|
+
</label>
|
|
389
|
+
<label class="toggle-label">
|
|
390
|
+
<input type="checkbox" id="networkAccessEnabled">
|
|
391
|
+
<span class="toggle-switch"></span>
|
|
392
|
+
<span id="networkAccessEnabledLabel" data-i18n="react.disabled">已停用</span>
|
|
393
|
+
</label>
|
|
394
|
+
<div class="info-text" style="font-size: 12px; color: var(--text-tertiary); margin-top: 4px;">
|
|
395
|
+
<span data-i18n="react.networkAccessDesc1">默认关闭:工具只能访问公网地址,127.0.0.1、localhost、192.168.x.x 等本机与内网地址会被直接拒绝。</span><br>
|
|
396
|
+
<span data-i18n="react.networkAccessDesc2">开启后仍需在下方的允许列表中逐台添加主机;列表为空时依然拒绝全部内网。关闭开关只是收起该区块,不会清空已录入的列表。</span>
|
|
397
|
+
</div>
|
|
398
|
+
<div class="domain-blocklist-section" id="networkAllowlistWrap" style="display: none;">
|
|
399
|
+
<h3 class="domain-blocklist-title" data-i18n="react.networkAllowlistTitle">内网允许列表</h3>
|
|
400
|
+
<p class="subtitle" style="margin-top: 2px;" data-i18n="react.networkAllowlistDesc">支持主机名、IP 与 *.example.com 子域通配(不填协议与端口);只有列在这里的内网主机才会被放行。</p>
|
|
401
|
+
<div class="domain-add-row">
|
|
402
|
+
<input type="text" id="networkHostAddInput" data-i18n-placeholder="react.networkHostAddPlaceholder" placeholder="例如:127.0.0.1 或 intranet.example.com" class="domain-add-input">
|
|
403
|
+
<button class="btn btn-primary" id="networkHostAddBtn" style="width: auto; flex-shrink: 0;" data-i18n="react.networkHostAdd">添加</button>
|
|
404
|
+
</div>
|
|
405
|
+
<div class="domain-blocklist-list" id="networkAllowlistList"></div>
|
|
406
|
+
</div>
|
|
407
|
+
</div>
|
|
408
|
+
|
|
409
|
+
<div class="react-config-item">
|
|
410
|
+
<label>
|
|
411
|
+
<span data-i18n="react.completionVerification">完成度校验</span>
|
|
412
|
+
<span class="hint-text" data-i18n="react.completionVerificationHint">(子任务结束后依据真实页面与本地 Agent(命令·文件)独立客观取证核验是否真正达标,未达标如实上报)</span>
|
|
413
|
+
</label>
|
|
414
|
+
<label class="toggle-label">
|
|
415
|
+
<input type="checkbox" id="completionVerificationEnabled">
|
|
416
|
+
<span class="toggle-switch"></span>
|
|
417
|
+
<span id="completionVerificationEnabledLabel" data-i18n="react.disabled">已停用</span>
|
|
418
|
+
</label>
|
|
419
|
+
<div class="info-text" style="font-size: 12px; color: #999; margin-top: 4px;">
|
|
420
|
+
<span data-i18n="react.completionVerificationDesc1">启用后,子任务执行完成时会依据其完成标准独立取证核验,未达标的项目会如实标注上报给模型,而不是默认"跑完即成功"。取证不限于网页 DOM,还包括经由本地 Agent 执行的命令(如测试/构建的退出码)与文件检查(存在/内容)。属客观取证(查环境是否真的达成目标),与"AI 自我反思"的主观自评互补、不重复。</span><br>
|
|
421
|
+
<span data-i18n="react.completionVerificationDesc2">关闭后,子任务完成状态与校验前逐字节一致,不追加任何取证与标注。</span>
|
|
422
|
+
</div>
|
|
423
|
+
</div>
|
|
424
|
+
|
|
425
|
+
<div class="react-config-item completion-verification-sub" style="margin-left: 24px; display: none;">
|
|
426
|
+
<label>
|
|
427
|
+
<span data-i18n="react.completionVerificationRerun">完成度自动重跑</span>
|
|
428
|
+
<span class="hint-text" data-i18n="react.completionVerificationRerunHint">(对未达标且确有缺项的子任务自动补跑一轮,受次数与预算上限约束)</span>
|
|
429
|
+
</label>
|
|
430
|
+
<label class="toggle-label">
|
|
431
|
+
<input type="checkbox" id="completionVerificationRerunEnabled">
|
|
432
|
+
<span class="toggle-switch"></span>
|
|
433
|
+
<span id="completionVerificationRerunEnabledLabel" data-i18n="react.disabled">已停用</span>
|
|
434
|
+
</label>
|
|
435
|
+
<div class="info-text" style="font-size: 12px; color: #999; margin-top: 4px;">
|
|
436
|
+
<span data-i18n="react.completionVerificationRerunDesc1">开启后,独立取证发现子任务确有缺项(未达标)时,会把"还缺什么"作为新指令追加给该子任务并再跑一轮,直到达标或触及安全上限(缺项必须逐轮严格减少、次数上限、时间/token 预算、取消或超时即停)。测试/构建类"允许档"命令可被自动执行取证;需确认或被安全策略拒绝的命令绝不强制运行,只判为无法取证。开启此项会执行命令并增加耗时与 token 消耗,默认关闭。</span><br>
|
|
437
|
+
<span data-i18n="react.completionVerificationRerunDesc2">关闭时(默认),行为与"仅标注、不重跑"逐字节一致:未达标只如实上报,绝不自动补跑。</span>
|
|
438
|
+
</div>
|
|
439
|
+
</div>
|
|
440
|
+
|
|
441
|
+
<!-- AI 自我反思(合并进推理配置:总开关 + 二级开关,样式与相邻项对齐) -->
|
|
442
|
+
<div class="react-config-item">
|
|
443
|
+
<label>
|
|
444
|
+
<span data-i18n="reflection.title">AI 自我反思</span>
|
|
445
|
+
<span class="hint-text" data-i18n="reflection.subtitleHint">(控制 AI 对答案质量的自我评估和修订行为——属主观自评,与"完成度校验"的客观取证互补)</span>
|
|
446
|
+
</label>
|
|
447
|
+
<label class="toggle-label">
|
|
448
|
+
<input type="checkbox" id="reflectionEnabled" checked>
|
|
449
|
+
<span class="toggle-switch"></span>
|
|
450
|
+
<span id="reflectionToggleLabel" data-i18n="react.disabled">已停用</span>
|
|
451
|
+
</label>
|
|
452
|
+
<div class="info-text" style="font-size: 12px; color: var(--text-tertiary); margin-top: 4px;">
|
|
453
|
+
<span data-i18n="reflection.desc1">启用后,AI 会在推理循环结束后对结果自我评估,评分低于阈值时自动修订或重新执行。尤其适合无客观判据的开放式任务(问答/写作/分析)——这类任务完成度校验不会介入。</span><br>
|
|
454
|
+
<span data-i18n="reflection.desc2">关闭后收起下方二级开关;启用反思会增加 API 调用次数,建议按需权衡。</span>
|
|
455
|
+
</div>
|
|
456
|
+
</div>
|
|
457
|
+
|
|
458
|
+
<div class="react-config-item reflection-sub" style="margin-left: 24px; display: none;">
|
|
459
|
+
<label>
|
|
460
|
+
<span data-i18n="reflection.postReflection">后置反思</span>
|
|
461
|
+
<span class="hint-text" data-i18n="reflection.postReflectionHint">(完成后评估结果质量)</span>
|
|
462
|
+
</label>
|
|
463
|
+
<label class="toggle-label">
|
|
464
|
+
<input type="checkbox" id="postReflectionEnabled" checked>
|
|
465
|
+
<span class="toggle-switch"></span>
|
|
466
|
+
<span id="postReflectionLabel" data-i18n="react.enabled">已启用</span>
|
|
467
|
+
</label>
|
|
468
|
+
</div>
|
|
469
|
+
|
|
470
|
+
<div class="react-config-item reflection-sub" style="margin-left: 24px; display: none;">
|
|
471
|
+
<label>
|
|
472
|
+
<span data-i18n="reflection.subtaskReflection">子任务反思</span>
|
|
473
|
+
<span class="hint-text" data-i18n="reflection.subtaskReflectionHint">(高级功能,默认关闭)</span>
|
|
474
|
+
</label>
|
|
475
|
+
<label class="toggle-label">
|
|
476
|
+
<input type="checkbox" id="subtaskReflectionEnabled">
|
|
477
|
+
<span class="toggle-switch"></span>
|
|
478
|
+
<span id="subtaskReflectionLabel" data-i18n="react.disabled">已停用</span>
|
|
479
|
+
</label>
|
|
480
|
+
</div>
|
|
481
|
+
|
|
364
482
|
<div class="react-config-item">
|
|
365
483
|
<label>
|
|
366
484
|
<span data-i18n="react.enableExecutionLog">启用执行日志</span>
|
|
@@ -371,7 +489,7 @@
|
|
|
371
489
|
<span class="toggle-switch"></span>
|
|
372
490
|
<span id="enableExecutionLogLabel" data-i18n="react.enabled">已启用</span>
|
|
373
491
|
</label>
|
|
374
|
-
<div class="info-text" style="font-size: 12px; color:
|
|
492
|
+
<div class="info-text" style="font-size: 12px; color: var(--text-tertiary); margin-top: 4px;">
|
|
375
493
|
<span data-i18n="react.enableExecutionLogDesc1">启用后,消息底部会显示"执行日志"按钮,点击可查看 API 调用和工具执行的详细过程。</span><br>
|
|
376
494
|
<span data-i18n="react.enableExecutionLogDesc2">关闭后,消息底部不再显示该按钮。</span>
|
|
377
495
|
</div>
|
|
@@ -387,7 +505,7 @@
|
|
|
387
505
|
<span class="toggle-switch"></span>
|
|
388
506
|
<span id="streamEnabledLabel" data-i18n="react.enabled">已启用</span>
|
|
389
507
|
</label>
|
|
390
|
-
<div class="info-text" style="font-size: 12px; color:
|
|
508
|
+
<div class="info-text" style="font-size: 12px; color: var(--text-tertiary); margin-top: 4px;">
|
|
391
509
|
<span data-i18n="react.streamingDesc1">开启后 AI 回复会实时逐字显示,代理端命令执行时也会实时输出,提供更快的反馈感知。</span><br>
|
|
392
510
|
<span data-i18n="react.streamingDesc2">如果遇到兼容性问题,可关闭此开关回退到一次性输出模式。</span>
|
|
393
511
|
</div>
|
|
@@ -411,8 +529,9 @@
|
|
|
411
529
|
<p>
|
|
412
530
|
<strong data-i18n="react.guideReasoningLoop">推理循环</strong><span data-i18n="react.guideReasoningLoopDesc">是 AI 助手进行多步推理和工具调用的核心机制。</span><br>
|
|
413
531
|
• <strong data-i18n="react.guideLoopCount">循环次数</strong><span data-i18n="react.guideLoopCountDesc">:决定 AI 可以进行多少轮推理-行动循环</span><br>
|
|
414
|
-
• <strong data-i18n="react.guideTimeout">超时设置</strong><span data-i18n="react.guideTimeoutDesc"
|
|
415
|
-
• <strong data-i18n="react.
|
|
532
|
+
• <strong data-i18n="react.guideTimeout">超时设置</strong><span data-i18n="react.guideTimeoutDesc">:API 请求 / 整体循环 / 工具执行三项超时,防止长时间等待或无限循环</span><br>
|
|
533
|
+
• <strong data-i18n="react.guideToolConfirm">敏感操作确认</strong><span data-i18n="react.guideToolConfirmDesc">:模型执行敏感操作前弹窗等待你确认,防止误操作</span><br>
|
|
534
|
+
• <strong data-i18n="react.guideClarifyWait">澄清等待</strong><span data-i18n="react.guideClarifyWaitDesc">:用户澄清时间不计入整体循环超时(自动暂停计时,非配置项)</span><br>
|
|
416
535
|
• <span data-i18n="react.guideTip">建议根据网络状况和任务复杂度调整这些参数</span>
|
|
417
536
|
</p>
|
|
418
537
|
</div>
|
|
@@ -420,49 +539,6 @@
|
|
|
420
539
|
|
|
421
540
|
</div><!-- /tab-react -->
|
|
422
541
|
|
|
423
|
-
<!-- 反思配置区域 -->
|
|
424
|
-
<div class="tab-panel" data-tab="reflection">
|
|
425
|
-
<div class="reflection-config" id="reflectionConfig">
|
|
426
|
-
<div class="reflection-title-row">
|
|
427
|
-
<h2 data-i18n="reflection.title">🎯 AI 自我反思配置</h2>
|
|
428
|
-
<label class="global-toggle">
|
|
429
|
-
<input type="checkbox" id="reflectionEnabled" checked>
|
|
430
|
-
<span class="global-toggle-slider"></span>
|
|
431
|
-
<span class="global-toggle-label" id="reflectionToggleLabel" data-i18n="reflection.enabled">已启用</span>
|
|
432
|
-
</label>
|
|
433
|
-
</div>
|
|
434
|
-
<p class="subtitle" data-i18n="reflection.subtitle">控制 AI 对任务执行结果的自我评估和修订行为</p>
|
|
435
|
-
|
|
436
|
-
<div class="reflection-toggles">
|
|
437
|
-
<div class="reflection-toggle-row" id="postReflectionSection">
|
|
438
|
-
<span class="reflection-row-icon">📝</span>
|
|
439
|
-
<span class="reflection-row-text"><span data-i18n="reflection.postReflection">后置反思</span><span class="reflection-row-hint" data-i18n="reflection.postReflectionHint">(完成后评估结果质量)</span></span>
|
|
440
|
-
<label class="reflection-toggle-switch">
|
|
441
|
-
<input type="checkbox" id="postReflectionEnabled" checked>
|
|
442
|
-
<span class="reflection-toggle-slider"></span>
|
|
443
|
-
</label>
|
|
444
|
-
</div>
|
|
445
|
-
<div class="reflection-toggle-row" id="subtaskReflectionSection">
|
|
446
|
-
<span class="reflection-row-icon">📋</span>
|
|
447
|
-
<span class="reflection-row-text"><span data-i18n="reflection.subtaskReflection">子任务反思</span><span class="reflection-row-hint" data-i18n="reflection.subtaskReflectionHint">(高级功能,默认关闭)</span></span>
|
|
448
|
-
<label class="reflection-toggle-switch">
|
|
449
|
-
<input type="checkbox" id="subtaskReflectionEnabled">
|
|
450
|
-
<span class="reflection-toggle-slider"></span>
|
|
451
|
-
</label>
|
|
452
|
-
</div>
|
|
453
|
-
</div>
|
|
454
|
-
|
|
455
|
-
<div class="info-box" style="margin-top: 15px;">
|
|
456
|
-
<h3 data-i18n="reflection.configGuide">💡 反思配置说明</h3>
|
|
457
|
-
<p>
|
|
458
|
-
<strong data-i18n="reflection.guidePostReflection">后置反思</strong><span data-i18n="reflection.guidePostReflectionDesc">:在推理循环结束后,AI 会对最终结果进行自我评估。如果评分低于阈值,会自动修订或重新执行。</span><br>
|
|
459
|
-
<strong data-i18n="reflection.guideSubtaskReflection">子任务反思</strong><span data-i18n="reflection.guideSubtaskReflectionDesc">:对于复杂任务拆解后的子任务进行单独评估,默认关闭(高级功能)。</span><br>
|
|
460
|
-
<span data-i18n="reflection.guideTip">• 启用反思会增加 API 调用次数,建议根据需求权衡</span>
|
|
461
|
-
</p>
|
|
462
|
-
</div>
|
|
463
|
-
</div>
|
|
464
|
-
</div><!-- /tab-reflection -->
|
|
465
|
-
|
|
466
542
|
<!-- 工具栏配置区域 -->
|
|
467
543
|
<div class="tab-panel" data-tab="toolbar">
|
|
468
544
|
<div class="toolbar-config" id="toolbarConfig">
|
|
@@ -898,12 +974,12 @@
|
|
|
898
974
|
<button class="modal-close-btn" id="exportConfigCloseBtn" data-i18n-title="common.close" title="关闭">✕</button>
|
|
899
975
|
</div>
|
|
900
976
|
<div style="padding: 8px 0;">
|
|
901
|
-
<label style="display: flex; align-items: center; gap: 8px; cursor: pointer; font-weight: 500; color:
|
|
977
|
+
<label style="display: flex; align-items: center; gap: 8px; cursor: pointer; font-weight: 500; color: var(--text-secondary);">
|
|
902
978
|
<input type="checkbox" id="exportIncludeSecrets" style="width: 16px; height: 16px;">
|
|
903
979
|
<span data-i18n="configDialog.includeSecrets">包含 API 密钥</span>
|
|
904
|
-
<span style="font-size: 12px; color:
|
|
980
|
+
<span style="font-size: 12px; color: var(--warning-500); font-weight: normal;" data-i18n="configDialog.secretWarn">⚠ 敏感信息,请确保文件安全</span>
|
|
905
981
|
</label>
|
|
906
|
-
<p style="margin-top: 12px; font-size: 13px; color:
|
|
982
|
+
<p style="margin-top: 12px; font-size: 13px; color: var(--text-tertiary);" data-i18n="configDialog.exportDesc">
|
|
907
983
|
导出文件将包含除 Agent 连接信息外的所有配置,可选择是否包含 API 密钥。
|
|
908
984
|
</p>
|
|
909
985
|
</div>
|
|
@@ -922,12 +998,12 @@
|
|
|
922
998
|
<button class="modal-close-btn" id="importConfigCloseBtn" data-i18n-title="common.close" title="关闭">✕</button>
|
|
923
999
|
</div>
|
|
924
1000
|
<div style="padding: 8px 0;">
|
|
925
|
-
<p id="importSummary" style="font-size: 13px; color:
|
|
926
|
-
<label style="display: flex; align-items: center; gap: 8px; cursor: pointer; font-weight: 500; color:
|
|
1001
|
+
<p id="importSummary" style="font-size: 13px; color: var(--text-tertiary); margin-bottom: 16px;"></p>
|
|
1002
|
+
<label style="display: flex; align-items: center; gap: 8px; cursor: pointer; font-weight: 500; color: var(--text-secondary); margin-bottom: 12px;">
|
|
927
1003
|
<input type="radio" name="importStrategy" id="importStrategyMerge" value="merge" checked style="width: auto;">
|
|
928
1004
|
<span data-i18n="configDialog.mergeImport">合并导入 — 仅覆盖文件中存在的配置项,保留其他</span>
|
|
929
1005
|
</label>
|
|
930
|
-
<label style="display: flex; align-items: center; gap: 8px; cursor: pointer; font-weight: 500; color:
|
|
1006
|
+
<label style="display: flex; align-items: center; gap: 8px; cursor: pointer; font-weight: 500; color: var(--text-secondary);">
|
|
931
1007
|
<input type="radio" name="importStrategy" id="importStrategyReplace" value="replace" style="width: auto;">
|
|
932
1008
|
<span data-i18n="configDialog.replaceImport">完全替换 — 清空当前配置,使用文件中的配置</span>
|
|
933
1009
|
</label>
|
|
@@ -947,8 +1023,8 @@
|
|
|
947
1023
|
<button class="modal-close-btn" id="profileModalCloseBtn" data-i18n-title="common.close" title="关闭">✕</button>
|
|
948
1024
|
</div>
|
|
949
1025
|
<div style="padding: 8px 0;">
|
|
950
|
-
<p id="profileModalMessage" style="display:none; font-size: 13px; color:
|
|
951
|
-
<input type="text" id="profileNameInput" data-i18n-placeholder="settings.profileNamePlaceholder" placeholder="配置名称(如 DeepSeek 官方、我的中转)" style="width: 100%; padding: 10px 12px; border: 1px solid
|
|
1026
|
+
<p id="profileModalMessage" style="display:none; font-size: 13px; color: var(--text-tertiary); margin-bottom: 12px;"></p>
|
|
1027
|
+
<input type="text" id="profileNameInput" data-i18n-placeholder="settings.profileNamePlaceholder" placeholder="配置名称(如 DeepSeek 官方、我的中转)" style="width: 100%; padding: 10px 12px; border: 1px solid var(--border-default); border-radius: 6px; font-size: 14px; box-sizing: border-box;">
|
|
952
1028
|
</div>
|
|
953
1029
|
<div class="modal-actions">
|
|
954
1030
|
<button class="btn btn-secondary" id="profileModalCancelBtn" data-i18n="common.cancel">取消</button>
|