dsh-switchman 1.11.4 → 1.11.6
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.de.md +7 -5
- package/README.es.md +7 -5
- package/README.fr.md +7 -5
- package/README.it.md +7 -5
- package/README.ja.md +7 -5
- package/README.ko.md +7 -5
- package/README.md +10 -8
- package/README.pt.md +7 -5
- package/README.ru.md +7 -5
- package/README.zh-TW.md +7 -5
- package/README.zh.md +7 -5
- package/client.js +205 -63
- package/cordis.patch.yml +17 -1
- package/host/config.js +24 -8
- package/host/context-trim/index.js +300 -27
- package/host/context-trim/summarizer.js +46 -35
- package/host/context-trim/surface.js +213 -6
- package/host/context-trim/trigger.js +29 -12
- package/host/context-trim/view.js +17 -2
- package/host/context-watch.js +5 -1
- package/host/ptc-guard.js +6 -0
- package/host/routes.js +13 -14
- package/package.json +1 -1
package/client.js
CHANGED
|
@@ -279,6 +279,8 @@ window.__ModuleLoader__.load({
|
|
|
279
279
|
{ field: 'trimIncrementTokens', min: 1000, def: 25000 },
|
|
280
280
|
{ field: 'trimPressurePercent', min: 5, max: 100, def: 65 },
|
|
281
281
|
{ field: 'trimEmergencyPercent', min: 5, max: 100, def: 95 },
|
|
282
|
+
{ field: 'trimAdvisoryPercent', min: 5, max: 100, def: 65 },
|
|
283
|
+
{ field: 'trimAdvisoryCriticalPercent', min: 5, max: 100, def: 95 },
|
|
282
284
|
{ field: 'trimWindowTokens', min: 0, def: 0 },
|
|
283
285
|
{ field: 'trimProtectedTail', min: 0, max: 100, def: 10 },
|
|
284
286
|
{ field: 'trimMaxFoldsPerHour', min: 1, max: 60, def: 30 },
|
|
@@ -303,6 +305,14 @@ window.__ModuleLoader__.load({
|
|
|
303
305
|
label: 'trimEmergencyLabel',
|
|
304
306
|
help: 'trimEmergencyHelp',
|
|
305
307
|
},
|
|
308
|
+
trimAdvisoryPercent: {
|
|
309
|
+
label: 'trimAdvisoryLabel',
|
|
310
|
+
help: 'trimAdvisoryHelp',
|
|
311
|
+
},
|
|
312
|
+
trimAdvisoryCriticalPercent: {
|
|
313
|
+
label: 'trimAdvisoryCriticalLabel',
|
|
314
|
+
help: 'trimAdvisoryCriticalHelp',
|
|
315
|
+
},
|
|
306
316
|
trimWindowTokens: {
|
|
307
317
|
label: 'trimWindowLabel',
|
|
308
318
|
help: 'trimWindowHelp',
|
|
@@ -350,6 +360,7 @@ window.__ModuleLoader__.load({
|
|
|
350
360
|
'trimMode',
|
|
351
361
|
'trimEnabled',
|
|
352
362
|
'trimLadderEnabled',
|
|
363
|
+
'trimProtectTaskIntent',
|
|
353
364
|
'surfaceFold',
|
|
354
365
|
'trimSideModel',
|
|
355
366
|
'trimFoldFallbackModel',
|
|
@@ -373,14 +384,13 @@ window.__ModuleLoader__.load({
|
|
|
373
384
|
const routeKey = (route) => `${route.provider}\0${route.model}`;
|
|
374
385
|
|
|
375
386
|
/** One well-formed {provider, model[, effort]} route, or null. */
|
|
376
|
-
function sanitizeRoute(route) {
|
|
387
|
+
function sanitizeRoute(route, allowEffort = false) {
|
|
377
388
|
if (route === null || typeof route !== 'object') return null;
|
|
378
389
|
if (typeof route.provider !== 'string' || route.provider === '') return null;
|
|
379
390
|
if (typeof route.model !== 'string' || route.model === '') return null;
|
|
380
|
-
//
|
|
381
|
-
// round-trip so a settings save never strips it (intent routes omit it).
|
|
391
|
+
// Preserve effort only for settings routes that expose a dedicated pin.
|
|
382
392
|
const out = { provider: route.provider, model: route.model };
|
|
383
|
-
if (typeof route.effort === 'string' && route.effort !== '') out.effort = route.effort;
|
|
393
|
+
if (allowEffort && typeof route.effort === 'string' && route.effort !== '') out.effort = route.effort;
|
|
384
394
|
return out;
|
|
385
395
|
}
|
|
386
396
|
|
|
@@ -530,12 +540,13 @@ window.__ModuleLoader__.load({
|
|
|
530
540
|
: 'auto',
|
|
531
541
|
trimEnabled: bool('trimEnabled', true),
|
|
532
542
|
trimLadderEnabled: bool('trimLadderEnabled', true),
|
|
543
|
+
trimProtectTaskIntent: bool('trimProtectTaskIntent', true),
|
|
533
544
|
surfaceFold: bool('surfaceFold', true),
|
|
534
545
|
trimSideModel:
|
|
535
|
-
sanitizeRoute(value?.trimSideModel) ??
|
|
546
|
+
sanitizeRoute(value?.trimSideModel, true) ??
|
|
536
547
|
({ provider: '', model: '' }),
|
|
537
548
|
trimFoldFallbackModel:
|
|
538
|
-
|
|
549
|
+
sanitizeRoute(value?.trimFoldFallbackModel, true) ??
|
|
539
550
|
({ provider: '', model: '' }),
|
|
540
551
|
trimStateDir: string('trimStateDir'),
|
|
541
552
|
...Object.fromEntries(
|
|
@@ -565,7 +576,7 @@ window.__ModuleLoader__.load({
|
|
|
565
576
|
INTENT_NUMBER_FIELDS.map((spec) => [spec.field, number(spec)]),
|
|
566
577
|
),
|
|
567
578
|
intentFallbackRoute:
|
|
568
|
-
sanitizeRoute(value?.intentFallbackRoute) ??
|
|
579
|
+
sanitizeRoute(value?.intentFallbackRoute, true) ??
|
|
569
580
|
({ provider: '', model: '' }),
|
|
570
581
|
};
|
|
571
582
|
}
|
|
@@ -618,9 +629,10 @@ window.__ModuleLoader__.load({
|
|
|
618
629
|
trimMode: values.trimMode,
|
|
619
630
|
trimEnabled: values.trimEnabled,
|
|
620
631
|
trimLadderEnabled: values.trimLadderEnabled,
|
|
632
|
+
trimProtectTaskIntent: values.trimProtectTaskIntent,
|
|
621
633
|
surfaceFold: values.surfaceFold,
|
|
622
|
-
trimSideModel: routeKey(values.trimSideModel)
|
|
623
|
-
trimFoldFallbackModel: routeKey(values.trimFoldFallbackModel)
|
|
634
|
+
trimSideModel: `${routeKey(values.trimSideModel)}\0${values.trimSideModel.effort ?? ''}`,
|
|
635
|
+
trimFoldFallbackModel: `${routeKey(values.trimFoldFallbackModel)}\0${values.trimFoldFallbackModel.effort ?? ''}`,
|
|
624
636
|
trimStateDir: values.trimStateDir,
|
|
625
637
|
...Object.fromEntries(
|
|
626
638
|
TRIM_NUMBER_FIELDS.map(({ field }) => [field, values[field]]),
|
|
@@ -645,7 +657,7 @@ window.__ModuleLoader__.load({
|
|
|
645
657
|
...Object.fromEntries(
|
|
646
658
|
INTENT_NUMBER_FIELDS.map(({ field }) => [field, values[field]]),
|
|
647
659
|
),
|
|
648
|
-
intentFallbackRoute: routeKey(values.intentFallbackRoute)
|
|
660
|
+
intentFallbackRoute: `${routeKey(values.intentFallbackRoute)}\0${values.intentFallbackRoute.effort ?? ''}`,
|
|
649
661
|
});
|
|
650
662
|
}
|
|
651
663
|
|
|
@@ -915,19 +927,21 @@ window.__ModuleLoader__.load({
|
|
|
915
927
|
trimSectionTitle: '上下文裁剪',
|
|
916
928
|
trimModeLabel: '自动裁剪模式',
|
|
917
929
|
trimModeHelp:
|
|
918
|
-
'空闲时何时把历史折叠为摘要:off = 从不折叠,advisory =
|
|
930
|
+
'空闲时何时把历史折叠为摘要:off = 从不折叠,advisory = 模型自主折叠(压力达线时引擎在系统提示注入一次性提醒),auto = 自动折叠。',
|
|
919
931
|
trimEnabledLabel: '启用自动裁剪',
|
|
920
932
|
trimEnabledHelp: '上下文裁剪层的总开关。',
|
|
921
933
|
trimLadderEnabledLabel: '阶梯折叠(T1/T2/T3)',
|
|
922
934
|
trimLadderEnabledHelp: '把累积的 T1 摘要再蒸馏为 T2、T2 再凝聚为 T3,让长会话视图保持平稳。',
|
|
935
|
+
trimProtectTaskIntentLabel: '保护任务意图',
|
|
936
|
+
trimProtectTaskIntentHelp: '第一条 user 消息(任务意图)永不折叠。关闭后它可进入折叠范围。',
|
|
923
937
|
surfaceFoldLabel: '把折叠写入会话表面',
|
|
924
938
|
surfaceFoldHelp: '追加宿主风格的替换事件,让折叠在冻结派发下也能到达线上。建议保持开启。',
|
|
925
939
|
trimSideModelLabel: '摘要模型',
|
|
926
|
-
trimSideModelHelp: '
|
|
940
|
+
trimSideModelHelp: '折叠摘要使用的模型路由;默认「跟随会话模型」。阶梯蒸馏同样使用该路由。未手动指定思考等级时,按模型元数据自动选择最低开启档;只有开/关思考时取关闭。模型不支持思考或元数据不可用时,不发送思考等级并沿用模型默认。',
|
|
927
941
|
trimFollowSession: '跟随会话模型',
|
|
928
|
-
|
|
942
|
+
trimEffortRecommended: '自动(按模型推荐规则)',
|
|
929
943
|
trimFoldFallbackModelLabel: '折叠异常兜底模型',
|
|
930
|
-
trimFoldFallbackModelHelp: '
|
|
944
|
+
trimFoldFallbackModelHelp: '摘要模型调用失败时改用该模型重试;仍失败则压力折叠退回机械折叠。思考等级可单独指定;留空时按该模型的推荐规则自动选择。尽量选择没有冷却、风控或并发限制的模型,避免与主会话共用同一账号。留空 = 无兜底。',
|
|
931
945
|
trimFallbackUnset: '未设置(失败时直接机械折叠)',
|
|
932
946
|
trimStateDirLabel: '账本目录',
|
|
933
947
|
trimStateDirHelp: '留空 = 默认的裁剪状态目录。',
|
|
@@ -951,6 +965,10 @@ window.__ModuleLoader__.load({
|
|
|
951
965
|
trimPressureHelp: '出站视图达到上下文窗口的这一百分比时折叠。',
|
|
952
966
|
trimEmergencyLabel: '紧急阈值(%)',
|
|
953
967
|
trimEmergencyHelp: '达到窗口的这一百分比时立即机械折叠。',
|
|
968
|
+
trimAdvisoryLabel: 'Advisory 提醒线(%)',
|
|
969
|
+
trimAdvisoryHelp: '仅 advisory 模式:压力达到窗口的这一百分比时,提醒模型自行折叠。',
|
|
970
|
+
trimAdvisoryCriticalLabel: 'Advisory 升级线(%)',
|
|
971
|
+
trimAdvisoryCriticalHelp: '仅 advisory 模式:达到这一百分比时,提醒升级为本轮必须折叠的指令。',
|
|
954
972
|
trimModeOff: '关闭',
|
|
955
973
|
trimWindowLabel: '窗口上限(token)',
|
|
956
974
|
trimWindowHelp: '压力与紧急档按 min(模型窗口, 上限) 计算;0 = 跟随强制水位(wmForceTokens)。',
|
|
@@ -1022,7 +1040,7 @@ window.__ModuleLoader__.load({
|
|
|
1022
1040
|
intentHistoryMaxCharsHelp: '对话摘录的总字符上限(200–20000)。',
|
|
1023
1041
|
intentFallbackRouteLabel: '兜底模型',
|
|
1024
1042
|
intentFallbackRouteHelp:
|
|
1025
|
-
'分类失败时依次:上一轮实际路由 → 兜底模型 →
|
|
1043
|
+
'分类失败时依次:上一轮实际路由 → 兜底模型 → 候选第一位;留空用候选第一位。可选固定思考等级;不指定时使用兜底模型默认等级。',
|
|
1026
1044
|
intentRouteUnset: '未设置',
|
|
1027
1045
|
intentEffortFollow: '跟随模型默认',
|
|
1028
1046
|
intentDockAuto: '自动',
|
|
@@ -1184,23 +1202,24 @@ window.__ModuleLoader__.load({
|
|
|
1184
1202
|
trimSectionTitle: 'Context trim',
|
|
1185
1203
|
trimModeLabel: 'Trim mode',
|
|
1186
1204
|
trimModeHelp:
|
|
1187
|
-
'When to fold history into summaries at idle: off = never, advisory = model-
|
|
1205
|
+
'When to fold history into summaries at idle: off = never, advisory = the model folds itself (the engine appends a one-off nudge line at the pressure line), auto = automatic folds.',
|
|
1188
1206
|
trimEnabledLabel: 'Enable auto-trim',
|
|
1189
1207
|
trimEnabledHelp: 'Master switch for the context-trim layer.',
|
|
1190
1208
|
trimLadderEnabledLabel: 'Ladder folding (T1/T2/T3)',
|
|
1191
1209
|
trimLadderEnabledHelp:
|
|
1192
1210
|
'Distill accumulated T1 summaries into T2, and T2 into T3, keeping long sessions flat.',
|
|
1211
|
+
trimProtectTaskIntentLabel: 'Protect task intent',
|
|
1212
|
+
trimProtectTaskIntentHelp: 'When on (default), the first user message (task intent) stays out of the automatic fold range. Turn off to let it fold like any other content.',
|
|
1193
1213
|
surfaceFoldLabel: 'Ship folds to the session surface',
|
|
1194
1214
|
surfaceFoldHelp:
|
|
1195
1215
|
'Append host-style replace events so folds reach the wire even on frozen dispatches. Leave on.',
|
|
1196
1216
|
trimSideModelLabel: 'Summarizer model',
|
|
1197
|
-
trimSideModelHelp:
|
|
1198
|
-
'Route for fold summaries; defaults to following the session model. Also used by ladder distillations.',
|
|
1217
|
+
trimSideModelHelp: 'Route for fold summaries; defaults to following the session model. Also used by ladder distillations. Without a pinned effort, choose the lowest enabled level from model metadata; for a thinking on/off-only model, choose off. If reasoning is unsupported or metadata is unavailable, omit the effort and keep the model default.',
|
|
1199
1218
|
trimFollowSession: 'Follow session model',
|
|
1200
|
-
|
|
1219
|
+
trimEffortRecommended: 'Automatic (model recommendation)',
|
|
1201
1220
|
trimFoldFallbackModelLabel: 'Fold fallback model',
|
|
1202
1221
|
trimFoldFallbackModelHelp:
|
|
1203
|
-
'When the summary route fails, the fold retries on this model before degrading a pressure fold to a mechanical one. Prefer a model with headroom on cooldowns, risk control, and concurrency limits — avoid sharing the pinned account with the main session. Empty = no fallback leg.',
|
|
1222
|
+
'When the summary route fails, the fold retries on this model before degrading a pressure fold to a mechanical one. Its effort can be pinned separately; if unset, the model recommendation is used. Prefer a model with headroom on cooldowns, risk control, and concurrency limits — avoid sharing the pinned account with the main session. Empty = no fallback leg.',
|
|
1204
1223
|
trimFallbackUnset: 'Unset (failed folds go straight to mechanical)',
|
|
1205
1224
|
trimStateDirLabel: 'Ledger directory',
|
|
1206
1225
|
trimStateDirHelp: 'Empty = the default per-host trim state directory.',
|
|
@@ -1229,6 +1248,10 @@ window.__ModuleLoader__.load({
|
|
|
1229
1248
|
trimEmergencyLabel: 'Emergency threshold (%)',
|
|
1230
1249
|
trimEmergencyHelp:
|
|
1231
1250
|
'Immediate mechanical fold at this percent of the window.',
|
|
1251
|
+
trimAdvisoryLabel: 'Advisory nudge line (%)',
|
|
1252
|
+
trimAdvisoryHelp: 'Advisory mode only: the model is nudged to fold itself at this percent of the window.',
|
|
1253
|
+
trimAdvisoryCriticalLabel: 'Advisory critical line (%)',
|
|
1254
|
+
trimAdvisoryCriticalHelp: 'Advisory mode only: at this percent the nudge escalates to a fold-down-this-turn order.',
|
|
1232
1255
|
trimWindowLabel: 'Window cap (tokens)',
|
|
1233
1256
|
trimWindowHelp: 'Pressure and emergency tiers use min(model window, cap); 0 = follow wmForceTokens.',
|
|
1234
1257
|
trimModeOff: 'Off',
|
|
@@ -1305,7 +1328,7 @@ window.__ModuleLoader__.load({
|
|
|
1305
1328
|
'Total character cap of the conversation excerpt (200–20000).',
|
|
1306
1329
|
intentFallbackRouteLabel: 'Fallback model',
|
|
1307
1330
|
intentFallbackRouteHelp:
|
|
1308
|
-
'On classification failure: last routed model → fallback → first candidate; empty = first candidate.',
|
|
1331
|
+
'On classification failure: last routed model → fallback → first candidate; empty = first candidate. Optionally pin a thinking effort; when unset, the fallback model default is used.',
|
|
1309
1332
|
intentRouteUnset: 'Not set',
|
|
1310
1333
|
intentEffortFollow: 'model default',
|
|
1311
1334
|
intentDockAuto: 'Auto',
|
|
@@ -1462,19 +1485,21 @@ window.__ModuleLoader__.load({
|
|
|
1462
1485
|
trimSectionTitle: '上下文裁剪',
|
|
1463
1486
|
trimModeLabel: '自動裁剪模式',
|
|
1464
1487
|
trimModeHelp:
|
|
1465
|
-
'閒置時何時將歷史摺疊為摘要:off = 從不摺疊,advisory =
|
|
1488
|
+
'閒置時何時將歷史摺疊為摘要:off = 從不摺疊,advisory = 模型自主摺疊(達壓力線時引擎於系統提示注入一次性提醒),auto = 自動摺疊。',
|
|
1466
1489
|
trimEnabledLabel: '啟用自動裁剪',
|
|
1467
1490
|
trimEnabledHelp: '上下文裁剪層的總開關。',
|
|
1468
1491
|
trimLadderEnabledLabel: '階梯摺疊(T1/T2/T3)',
|
|
1469
1492
|
trimLadderEnabledHelp: '把累積的 T1 摘要再蒸餾為 T2、T2 再凝聚為 T3,讓長會話檢視保持平穩。',
|
|
1493
|
+
trimProtectTaskIntentLabel: '保護任務意圖',
|
|
1494
|
+
trimProtectTaskIntentHelp: '第一條 user 訊息(任務意圖)永不摺疊。關閉後它可進入摺疊範圍。',
|
|
1470
1495
|
surfaceFoldLabel: '把摺疊寫入會話表面',
|
|
1471
1496
|
surfaceFoldHelp: '追加宿主風格的替換事件,讓摺疊在凍結派發下也能到達線上。建議保持開啟。',
|
|
1472
1497
|
trimSideModelLabel: '摘要模型',
|
|
1473
|
-
trimSideModelHelp: '
|
|
1498
|
+
trimSideModelHelp: '摺疊摘要使用的模型路由;預設「跟隨對話模型」。階梯蒸餾同樣使用該路由。未手動指定思考等級時,依模型中繼資料自動選擇最低啟用等級;模型僅提供思考開/關切換時取關閉。不支援思考或中繼資料不可用時,不傳思考等級並沿用模型預設。',
|
|
1474
1499
|
trimFollowSession: '跟隨對話模型',
|
|
1475
|
-
|
|
1500
|
+
trimEffortRecommended: '自動(依模型推薦規則)',
|
|
1476
1501
|
trimFoldFallbackModelLabel: '摺疊異常備援模型',
|
|
1477
|
-
trimFoldFallbackModelHelp: '
|
|
1502
|
+
trimFoldFallbackModelHelp: '摘要模型呼叫失敗時改用該模型重試;仍失敗則壓力摺疊退回機械摺疊。思考等級可單獨指定;留空時依該模型推薦規則自動選擇。盡量選擇沒有冷卻、風控或並行限制的模型,避免與主對話共用同一帳號。留空 = 無備援。',
|
|
1478
1503
|
trimFallbackUnset: '未設定(失敗時直接機械摺疊)',
|
|
1479
1504
|
trimStateDirLabel: '帳本目錄',
|
|
1480
1505
|
trimStateDirHelp: '留空 = 預設的裁剪狀態目錄。',
|
|
@@ -1498,6 +1523,10 @@ window.__ModuleLoader__.load({
|
|
|
1498
1523
|
trimPressureHelp: '出站檢視達到上下文視窗的這一百分比時摺疊。',
|
|
1499
1524
|
trimEmergencyLabel: '緊急閾值(%)',
|
|
1500
1525
|
trimEmergencyHelp: '達到視窗的這一百分比時立即機械摺疊。',
|
|
1526
|
+
trimAdvisoryLabel: 'Advisory 提醒線(%)',
|
|
1527
|
+
trimAdvisoryHelp: '僅 advisory 模式:壓力達到視窗的這一百分比時,提醒模型自行摺疊。',
|
|
1528
|
+
trimAdvisoryCriticalLabel: 'Advisory 升級線(%)',
|
|
1529
|
+
trimAdvisoryCriticalHelp: '僅 advisory 模式:達到這一百分比時,提醒升級為本輪必須摺疊的指令。',
|
|
1501
1530
|
trimModeOff: '關閉',
|
|
1502
1531
|
trimWindowLabel: '視窗上限(token)',
|
|
1503
1532
|
trimWindowHelp: '壓力與緊急檔按 min(模型視窗, 上限) 計算;0 = 跟隨強制水位(wmForceTokens)。',
|
|
@@ -1566,7 +1595,7 @@ window.__ModuleLoader__.load({
|
|
|
1566
1595
|
intentHistoryMaxCharsHelp: '對話摘錄的總字元上限(200–20000)。',
|
|
1567
1596
|
intentFallbackRouteLabel: '備援模型',
|
|
1568
1597
|
intentFallbackRouteHelp:
|
|
1569
|
-
'分類失敗時依次:上一輪實際路由 → 備援模型 →
|
|
1598
|
+
'分類失敗時依次:上一輪實際路由 → 備援模型 → 候選第一位;留空用候選第一位。可選固定思考等級;未指定時使用備援模型預設等級。',
|
|
1570
1599
|
intentRouteUnset: '未設定',
|
|
1571
1600
|
intentEffortFollow: '跟隨模型預設',
|
|
1572
1601
|
intentDockAuto: '自動',
|
|
@@ -1710,7 +1739,7 @@ window.__ModuleLoader__.load({
|
|
|
1710
1739
|
trimSectionTitle: 'コンテキストトリム',
|
|
1711
1740
|
trimModeLabel: 'トリムモード',
|
|
1712
1741
|
trimModeHelp:
|
|
1713
|
-
'アイドル時に履歴を要約へ折りたたむタイミング:off = 折りたたまない、advisory =
|
|
1742
|
+
'アイドル時に履歴を要約へ折りたたむタイミング:off = 折りたたまない、advisory = モデルが自発的に折りたたむ(圧力しきい値でエンジンがシステムプロンプトに一度だけ注意喚起を追記)、auto = 自動で折りたたむ。',
|
|
1714
1743
|
trimEnabledLabel: '自動トリムを有効化',
|
|
1715
1744
|
trimEnabledHelp: 'コンテキストトリム層のマスタースイッチ。',
|
|
1716
1745
|
trimGrowthLabel: '増加しきい値(token)',
|
|
@@ -1725,6 +1754,10 @@ window.__ModuleLoader__.load({
|
|
|
1725
1754
|
trimEmergencyLabel: '緊急しきい値(%)',
|
|
1726
1755
|
trimEmergencyHelp:
|
|
1727
1756
|
'ウィンドウのこの割合に達したら即座に機械的に折りたたみます。',
|
|
1757
|
+
trimAdvisoryLabel: 'Advisory 提案しきい値(%)',
|
|
1758
|
+
trimAdvisoryHelp: 'advisory モード専用:圧力がウィンドウのこの割合に達すると、モデルに自己折り畳みを促します。',
|
|
1759
|
+
trimAdvisoryCriticalLabel: 'Advisory 深刻しきい値(%)',
|
|
1760
|
+
trimAdvisoryCriticalHelp: 'advisory モード専用:この割合に達すると、提案は「このターンで折り畳む」指示にエスカレートします。',
|
|
1728
1761
|
trimWindowLabel: 'ウィンドウ上限(トークン)',
|
|
1729
1762
|
trimWindowHelp: '圧力・緊急ティアは min(モデルウィンドウ, 上限) で計算。0 = wmForceTokens に追従。',
|
|
1730
1763
|
trimModeOff: 'オフ',
|
|
@@ -1796,10 +1829,16 @@ window.__ModuleLoader__.load({
|
|
|
1796
1829
|
'会話抜粋の合計文字上限(200–20000)。',
|
|
1797
1830
|
intentFallbackRouteLabel: 'フォールバックモデル',
|
|
1798
1831
|
intentFallbackRouteHelp:
|
|
1799
|
-
'分類失敗時:前回ルート → フォールバック →
|
|
1832
|
+
'分類失敗時:前回ルート → フォールバック → 候補の先頭。空欄は候補の先頭。思考レベルを固定できます。未指定ならモデル既定を使用します。',
|
|
1800
1833
|
intentRouteUnset: '未設定',
|
|
1801
1834
|
intentEffortFollow: 'モデルのデフォルト',
|
|
1802
|
-
|
|
1835
|
+
trimEffortRecommended: '自動(モデル推奨)',
|
|
1836
|
+
trimSideModelLabel: '要約モデル',
|
|
1837
|
+
trimSideModelHelp: '要約に使うモデルルート。既定ではセッションモデルに従いますが、その呼び出しの思考レベルは引き継ぎません。段階的蒸留も同じルートを使います。手動指定がなければ、モデル情報から有効な思考レベルの最低段階を選びます。思考のオン/オフだけのモデルは off を選択します。非対応またはモデル情報がない場合はレベルを送らず、モデルの既定値を使います。',
|
|
1838
|
+
trimFollowSession: 'セッションモデルに従う',
|
|
1839
|
+
trimFoldFallbackModelLabel: '折りたたみ時のフォールバックモデル',
|
|
1840
|
+
trimFoldFallbackModelHelp: '要約モデルの呼び出しに失敗した場合、このモデルで再試行します。これも失敗すると、圧力折りたたみは機械的な折りたたみに切り替わります。思考レベルは個別に指定でき、未指定ならこのモデルの推奨設定を使います。冷却・リスク管理・同時実行の制限に余裕のあるモデルを選び、メインセッションと同じアカウントの共有は避けてください。空欄 = フォールバックなし。',
|
|
1841
|
+
trimFallbackUnset: '未設定(失敗時は機械的な折りたたみに直接移行)',
|
|
1803
1842
|
intentDockAuto: '自動',
|
|
1804
1843
|
intentDockUnrouted: '未ルーティング',
|
|
1805
1844
|
intentDockUsing: '使用中',
|
|
@@ -1939,11 +1978,17 @@ window.__ModuleLoader__.load({
|
|
|
1939
1978
|
'서브에이전트 자체 모델 창에 맞춰 3단계 축소: force = min(정적 기준, 창×비율). soft/hard도 같은 비율로 축소. 완화 없이 강화만.',
|
|
1940
1979
|
wmSubagentFollowForce: 'force 단계 따르기(0)',
|
|
1941
1980
|
wmCommands: '명령: /ctx-pause 수위 개입 일시 중지 · /ctx-resume 재개 · /ctx-handover 지금 핸드오버 문서를 작성하고 압축.',
|
|
1942
|
-
|
|
1981
|
+
trimEffortRecommended: '자동 (모델 권장)',
|
|
1982
|
+
trimSideModelLabel: '요약 모델',
|
|
1983
|
+
trimSideModelHelp: '요약에 사용할 모델 경로입니다. 기본값은 세션 모델을 따르지만 해당 호출의 추론 수준은 상속하지 않습니다. 단계별 증류도 같은 경로를 사용합니다. 수동 지정이 없으면 모델 메타데이터에서 활성화된 가장 낮은 추론 단계를 선택합니다. 추론 켜기/끄기만 지원하는 모델은 off를 선택합니다. 추론을 지원하지 않거나 메타데이터가 없으면 수준을 보내지 않고 모델 기본값을 사용합니다.',
|
|
1984
|
+
trimFollowSession: '세션 모델 따르기',
|
|
1985
|
+
trimFoldFallbackModelLabel: '접기 대체 모델',
|
|
1986
|
+
trimFoldFallbackModelHelp: '요약 모델 호출이 실패하면 이 모델로 재시도합니다. 이것도 실패하면 압력 접기는 기계적 접기로 전환됩니다. 추론 수준은 별도로 지정할 수 있으며, 비워 두면 이 모델의 권장 설정을 사용합니다. 쿨다운, 위험 제어, 동시성 제한에 여유가 있는 모델을 선택하고 주 세션과 같은 계정을 공유하지 않는 편이 좋습니다. 비우면 대체 경로가 없습니다.',
|
|
1987
|
+
trimFallbackUnset: '미설정(실패 시 바로 기계적 접기)',
|
|
1943
1988
|
trimSectionTitle: '컨텍스트 트림',
|
|
1944
1989
|
trimModeLabel: '트림 모드',
|
|
1945
1990
|
trimModeHelp:
|
|
1946
|
-
'유휴 시 언제 기록을 요약으로 접을지: off = 접지 않음, advisory =
|
|
1991
|
+
'유휴 시 언제 기록을 요약으로 접을지: off = 접지 않음, advisory = 모델이 스스로 접음(압력 임계값에서 엔진이 시스템 프롬프트에 일회성 알림 추가), auto = 자동 접기.',
|
|
1947
1992
|
trimEnabledLabel: '자동 트림 사용',
|
|
1948
1993
|
trimEnabledHelp: '컨텍스트 트림 계층의 마스터 스위치.',
|
|
1949
1994
|
trimGrowthLabel: '증가 임계값(token)',
|
|
@@ -1957,6 +2002,10 @@ window.__ModuleLoader__.load({
|
|
|
1957
2002
|
trimEmergencyLabel: '긴급 임계값(%)',
|
|
1958
2003
|
trimEmergencyHelp:
|
|
1959
2004
|
'창의 이 백분율에 도달하면 즉시 기계적으로 접습니다.',
|
|
2005
|
+
trimAdvisoryLabel: 'Advisory 알림 임계값(%)',
|
|
2006
|
+
trimAdvisoryHelp: 'advisory 모드 전용: 압력이 창의 이 백분율에 도달하면 모델에 자체 폴드를 권고합니다.',
|
|
2007
|
+
trimAdvisoryCriticalLabel: 'Advisory 치명적 임계값(%)',
|
|
2008
|
+
trimAdvisoryCriticalHelp: 'advisory 모드 전용: 이 백분율에 도달하면 권고가 이번 턴 폴드 명령으로 격상됩니다.',
|
|
1960
2009
|
trimWindowLabel: '윈도우 상한(토큰)',
|
|
1961
2010
|
trimWindowHelp: '압력·긴급 티어는 min(모델 윈도우, 상한)으로 계산. 0 = wmForceTokens를 따름.',
|
|
1962
2011
|
trimModeOff: '끄기',
|
|
@@ -2028,7 +2077,7 @@ window.__ModuleLoader__.load({
|
|
|
2028
2077
|
'대화 발췌의 총 문자 상한(200–20000).',
|
|
2029
2078
|
intentFallbackRouteLabel: '폴백 모델',
|
|
2030
2079
|
intentFallbackRouteHelp:
|
|
2031
|
-
'분류 실패 시: 이전 라우트 → 폴백 → 첫 후보.
|
|
2080
|
+
'분류 실패 시: 이전 라우트 → 폴백 → 첫 후보. 비어 있으면 첫 후보입니다. 추론 수준을 선택적으로 고정할 수 있으며, 지정하지 않으면 폴백 모델 기본값을 따릅니다.',
|
|
2032
2081
|
intentRouteUnset: '미설정',
|
|
2033
2082
|
intentEffortFollow: '모델 기본값',
|
|
2034
2083
|
intentDockAuto: '자동',
|
|
@@ -2170,11 +2219,17 @@ window.__ModuleLoader__.load({
|
|
|
2170
2219
|
'Skaliert die Stufen auf das eigene Modellfenster des Subagenten: force = min(statische Stufe, Fenster × Quote); soft/hard schrumpfen im selben Faktor. Verengt nur, lockert nie.',
|
|
2171
2220
|
wmSubagentFollowForce: 'Der Force-Stufe folgen (0)',
|
|
2172
2221
|
wmCommands: 'Befehle: /ctx-pause pausiert Wasserstand-Aktionen · /ctx-resume setzt sie fort · /ctx-handover schreibt das Übergabedokument jetzt und komprimiert sofort.',
|
|
2173
|
-
|
|
2222
|
+
trimEffortRecommended: 'Automatisch (Modell-Empfehlung)',
|
|
2223
|
+
trimSideModelLabel: 'Zusammenfassungsmodell',
|
|
2224
|
+
trimSideModelHelp: 'Modellroute für Zusammenfassungen. Standardmäßig folgt sie dem Sitzungsmodell, übernimmt aber nicht dessen Denkstufe. Leiter-Destillationen verwenden dieselbe Route. Ohne manuelle Vorgabe wird anhand der Modellmetadaten die niedrigste aktivierte Denkstufe gewählt; bei Modellen mit reinem Ein/Aus-Schalter wird off gewählt. Bei fehlender Unterstützung oder Metadaten wird keine Denkstufe gesendet und der Modellstandard verwendet.',
|
|
2225
|
+
trimFollowSession: 'Sitzungsmodell folgen',
|
|
2226
|
+
trimFoldFallbackModelLabel: 'Fallback-Modell für Faltungen',
|
|
2227
|
+
trimFoldFallbackModelHelp: 'Wenn der Zusammenfassungsaufruf fehlschlägt, wird mit diesem Modell erneut versucht; schlägt auch das fehl, wird ein Druck-Fold mechanisch ausgeführt. Die Denkstufe kann unabhängig festgelegt werden; ohne Angabe greift die Modellempfehlung. Möglichst ein Modell ohne Cooldown-, Risiko- oder Parallelitätsbeschränkungen wählen und nicht dasselbe Konto wie die Hauptsitzung verwenden. Leer = kein Fallback.',
|
|
2228
|
+
trimFallbackUnset: 'Nicht festgelegt (bei Fehler direkt mechanisch falten)',
|
|
2174
2229
|
trimSectionTitle: 'Kontext-Trim',
|
|
2175
2230
|
trimModeLabel: 'Trim-Modus',
|
|
2176
2231
|
trimModeHelp:
|
|
2177
|
-
'Wann der Verlauf im Leerlauf zu Zusammenfassungen gefaltet wird: off = nie, advisory =
|
|
2232
|
+
'Wann der Verlauf im Leerlauf zu Zusammenfassungen gefaltet wird: off = nie, advisory = das Modell faltet selbst (der Motor hängt eine einmalige Erinnerung an den Systemprompt an), auto = automatisches Falten.',
|
|
2178
2233
|
trimEnabledLabel: 'Auto-Trim aktivieren',
|
|
2179
2234
|
trimEnabledHelp: 'Hauptschalter für die Kontext-Trim-Schicht.',
|
|
2180
2235
|
trimGrowthLabel: 'Wachstumsschwelle (Token)',
|
|
@@ -2189,6 +2244,10 @@ window.__ModuleLoader__.load({
|
|
|
2189
2244
|
trimEmergencyLabel: 'Notfallschwelle (%)',
|
|
2190
2245
|
trimEmergencyHelp:
|
|
2191
2246
|
'Sofortiges mechanisches Falten bei diesem Prozentanteil des Fensters.',
|
|
2247
|
+
trimAdvisoryLabel: 'Advisory-Hinweisschwelle (%)',
|
|
2248
|
+
trimAdvisoryHelp: 'Nur im Advisory-Modus: Erreicht der Druck diesen Prozentsatz des Fensters, wird das Modell zum eigenen Falten angehalten.',
|
|
2249
|
+
trimAdvisoryCriticalLabel: 'Advisory-Kritischschwelle (%)',
|
|
2250
|
+
trimAdvisoryCriticalHelp: 'Nur im Advisory-Modus: Ab diesem Prozentsatz wird der Hinweis zu einem Falt-Befehl für diese Runde eskaliert.',
|
|
2192
2251
|
trimWindowLabel: 'Fensterlimit (Token)',
|
|
2193
2252
|
trimWindowHelp: 'Druck- und Notfallstufen rechnen mit min(Modellfenster, Limit); 0 = folgt wmForceTokens.',
|
|
2194
2253
|
trimModeOff: 'Aus',
|
|
@@ -2262,7 +2321,7 @@ window.__ModuleLoader__.load({
|
|
|
2262
2321
|
'Gesamtzeichengrenze des Gesprächsauszugs (200–20000).',
|
|
2263
2322
|
intentFallbackRouteLabel: 'Fallback-Modell',
|
|
2264
2323
|
intentFallbackRouteHelp:
|
|
2265
|
-
'Bei Klassifikationsfehler: zuletzt geroutet → Fallback → erster Kandidat; leer = erster Kandidat.',
|
|
2324
|
+
'Bei Klassifikationsfehler: zuletzt geroutet → Fallback → erster Kandidat; leer = erster Kandidat. Der Thinking-Aufwand kann optional festgelegt werden; andernfalls gilt der Modellstandard des Fallbacks.',
|
|
2266
2325
|
intentRouteUnset: 'Nicht festgelegt',
|
|
2267
2326
|
intentEffortFollow: 'Modellstandard',
|
|
2268
2327
|
intentDockAuto: 'Auto',
|
|
@@ -2404,11 +2463,17 @@ window.__ModuleLoader__.load({
|
|
|
2404
2463
|
'Escala los niveles a la ventana del propio modelo del subagente: force = min(nivel estático, ventana × ratio); soft/hard se reducen por el mismo factor. Solo restringe, nunca amplía.',
|
|
2405
2464
|
wmSubagentFollowForce: 'Seguir el nivel forzado (0)',
|
|
2406
2465
|
wmCommands: 'Comandos: /ctx-pause suspende las acciones del nivel · /ctx-resume las reanuda · /ctx-handover escribe el documento y compacta ahora.',
|
|
2407
|
-
|
|
2466
|
+
trimEffortRecommended: 'Automático (recomendación del modelo)',
|
|
2467
|
+
trimSideModelLabel: 'Modelo de resumen',
|
|
2468
|
+
trimSideModelHelp: 'Ruta del modelo para los resúmenes. De forma predeterminada sigue el modelo de la sesión, pero no hereda su nivel de razonamiento. Las destilaciones por niveles usan la misma ruta. Sin una selección manual, los metadatos del modelo determinan el nivel habilitado más bajo; si solo ofrece activar o desactivar el razonamiento, se elige off. Si no admite razonamiento o faltan metadatos, no se envía ningún nivel y se usa el valor predeterminado del modelo.',
|
|
2469
|
+
trimFollowSession: 'Seguir el modelo de la sesión',
|
|
2470
|
+
trimFoldFallbackModelLabel: 'Modelo de respaldo para el plegado',
|
|
2471
|
+
trimFoldFallbackModelHelp: 'Si falla la llamada al modelo de resumen, se reintenta con este modelo; si también falla, el plegado por presión pasa a ser mecánico. El nivel de razonamiento se puede fijar por separado; si se deja vacío, se aplica la recomendación de este modelo. Elige un modelo con margen en límites de enfriamiento, riesgo y concurrencia, y evita compartir cuenta con la sesión principal. Vacío = sin respaldo.',
|
|
2472
|
+
trimFallbackUnset: 'Sin configurar (si falla, pasar directamente al plegado mecánico)',
|
|
2408
2473
|
trimSectionTitle: 'Recorte de contexto',
|
|
2409
2474
|
trimModeLabel: 'Modo de recorte',
|
|
2410
2475
|
trimModeHelp:
|
|
2411
|
-
'Cuándo plegar el historial en resúmenes en reposo: off = nunca, advisory =
|
|
2476
|
+
'Cuándo plegar el historial en resúmenes en reposo: off = nunca, advisory = el modelo pliega por sí mismo (el motor añade un aviso puntual al system prompt), auto = plegado automático.',
|
|
2412
2477
|
trimEnabledLabel: 'Activar recorte automático',
|
|
2413
2478
|
trimEnabledHelp:
|
|
2414
2479
|
'Interruptor maestro de la capa de recorte de contexto.',
|
|
@@ -2424,6 +2489,10 @@ window.__ModuleLoader__.load({
|
|
|
2424
2489
|
trimEmergencyLabel: 'Umbral de emergencia (%)',
|
|
2425
2490
|
trimEmergencyHelp:
|
|
2426
2491
|
'Plegado mecánico inmediato al alcanzar este porcentaje de la ventana.',
|
|
2492
|
+
trimAdvisoryLabel: 'Línea de aviso advisory (%)',
|
|
2493
|
+
trimAdvisoryHelp: 'Solo en modo advisory: al alcanzar este porcentaje de la ventana se incita al modelo a plegarse por sí mismo.',
|
|
2494
|
+
trimAdvisoryCriticalLabel: 'Línea crítica advisory (%)',
|
|
2495
|
+
trimAdvisoryCriticalHelp: 'Solo en modo advisory: a este porcentaje el aviso escala a una orden de plegado en este turno.',
|
|
2427
2496
|
trimWindowLabel: 'Límite de ventana (tokens)',
|
|
2428
2497
|
trimWindowHelp: 'Los niveles de presión y emergencia usan min(ventana del modelo, límite); 0 = sigue a wmForceTokens.',
|
|
2429
2498
|
trimModeOff: 'Desactivado',
|
|
@@ -2497,7 +2566,7 @@ window.__ModuleLoader__.load({
|
|
|
2497
2566
|
'Límite total de caracteres del extracto de conversación (200–20000).',
|
|
2498
2567
|
intentFallbackRouteLabel: 'Modelo de reserva',
|
|
2499
2568
|
intentFallbackRouteHelp:
|
|
2500
|
-
'Si falla la clasificación: último modelo enrutado → reserva → primer candidato; vacío = primer candidato.',
|
|
2569
|
+
'Si falla la clasificación: último modelo enrutado → reserva → primer candidato; vacío = primer candidato. Puedes fijar opcionalmente el nivel de razonamiento; si no, se usa el valor predeterminado del modelo de reserva.',
|
|
2501
2570
|
intentRouteUnset: 'Sin establecer',
|
|
2502
2571
|
intentEffortFollow: 'predeterminado del modelo',
|
|
2503
2572
|
intentDockAuto: 'Auto',
|
|
@@ -2639,11 +2708,17 @@ window.__ModuleLoader__.load({
|
|
|
2639
2708
|
'Ajuste les paliers à la fenêtre propre du modèle du sous-agent : force = min(palier statique, fenêtre × ratio) ; soft/hard réduits du même facteur. Ne fait que resserrer, jamais relâcher.',
|
|
2640
2709
|
wmSubagentFollowForce: 'Suivre le palier force (0)',
|
|
2641
2710
|
wmCommands: 'Commandes : /ctx-pause suspend les actions de niveau d’eau · /ctx-resume les reprend · /ctx-handover écrit le document et compacte maintenant.',
|
|
2642
|
-
|
|
2711
|
+
trimEffortRecommended: 'Automatique (recommandation du modèle)',
|
|
2712
|
+
trimSideModelLabel: 'Modèle de résumé',
|
|
2713
|
+
trimSideModelHelp: 'Route du modèle pour les résumés. Par défaut, elle suit le modèle de la session sans reprendre son niveau de raisonnement. Les distillations en cascade utilisent la même route. Sans choix manuel, les métadonnées sélectionnent le niveau activé le plus faible ; pour un modèle avec seulement un interrupteur de raisonnement, le niveau choisi est off. Si le raisonnement est indisponible ou que les métadonnées manquent, aucun niveau n’est envoyé et le défaut du modèle s’applique.',
|
|
2714
|
+
trimFollowSession: 'Suivre le modèle de la session',
|
|
2715
|
+
trimFoldFallbackModelLabel: 'Modèle de secours pour le pliage',
|
|
2716
|
+
trimFoldFallbackModelHelp: 'Si l’appel au modèle de résumé échoue, une nouvelle tentative utilise ce modèle ; en cas de nouvel échec, un pliage sous pression devient mécanique. Le niveau de raisonnement se règle séparément ; sans choix, la recommandation de ce modèle s’applique. Choisissez un modèle avec de la marge sur le refroidissement, le contrôle des risques et la concurrence, et évitez le même compte que la session principale. Vide = aucun secours.',
|
|
2717
|
+
trimFallbackUnset: 'Non défini (en cas d’échec, passer directement au pliage mécanique)',
|
|
2643
2718
|
trimSectionTitle: 'Rognage du contexte',
|
|
2644
2719
|
trimModeLabel: 'Mode de rognage',
|
|
2645
2720
|
trimModeHelp:
|
|
2646
|
-
'Quand replier l’historique en résumés au repos : off = jamais, advisory =
|
|
2721
|
+
'Quand replier l’historique en résumés au repos : off = jamais, advisory = le modèle replie lui-même (le moteur ajoute un rappel ponctuel au system prompt), auto = repli automatique.',
|
|
2647
2722
|
trimEnabledLabel: 'Activer le rognage automatique',
|
|
2648
2723
|
trimEnabledHelp:
|
|
2649
2724
|
'Interrupteur principal de la couche de rognage de contexte.',
|
|
@@ -2659,6 +2734,10 @@ window.__ModuleLoader__.load({
|
|
|
2659
2734
|
trimEmergencyLabel: 'Seuil d’urgence (%)',
|
|
2660
2735
|
trimEmergencyHelp:
|
|
2661
2736
|
'Repli mécanique immédiat à ce pourcentage de la fenêtre.',
|
|
2737
|
+
trimAdvisoryLabel: 'Seuil de rappel advisory (%)',
|
|
2738
|
+
trimAdvisoryHelp: 'Mode advisory uniquement : à ce pourcentage de la fenêtre, le modèle est invité à se plier lui-même.',
|
|
2739
|
+
trimAdvisoryCriticalLabel: 'Seuil critique advisory (%)',
|
|
2740
|
+
trimAdvisoryCriticalHelp: 'Mode advisory uniquement : à ce pourcentage, le rappel devient un ordre de pliage pour ce tour.',
|
|
2662
2741
|
trimWindowLabel: 'Plafond de fenêtre (jetons)',
|
|
2663
2742
|
trimWindowHelp: 'Les paliers pression/urgence utilisent min(fenêtre du modèle, plafond) ; 0 = suit wmForceTokens.',
|
|
2664
2743
|
trimModeOff: 'Off',
|
|
@@ -2732,7 +2811,7 @@ window.__ModuleLoader__.load({
|
|
|
2732
2811
|
'Plafond total de caractères de l’extrait de conversation (200–20000).',
|
|
2733
2812
|
intentFallbackRouteLabel: 'Modèle de secours',
|
|
2734
2813
|
intentFallbackRouteHelp:
|
|
2735
|
-
'En cas d’échec : dernier modèle routé → secours → premier candidat ; vide = premier candidat.',
|
|
2814
|
+
'En cas d’échec : dernier modèle routé → secours → premier candidat ; vide = premier candidat. Vous pouvez épingler le niveau de raisonnement ; sinon, le niveau par défaut du modèle de secours est utilisé.',
|
|
2736
2815
|
intentRouteUnset: 'Non défini',
|
|
2737
2816
|
intentEffortFollow: 'par défaut du modèle',
|
|
2738
2817
|
intentDockAuto: 'Auto',
|
|
@@ -2874,11 +2953,17 @@ window.__ModuleLoader__.load({
|
|
|
2874
2953
|
'Ridimensiona i livelli alla finestra del modello del subagente: force = min(livello statico, finestra × rapporto); soft/hard si riducono dello stesso fattore. Solo restrizione, mai allentamento.',
|
|
2875
2954
|
wmSubagentFollowForce: 'Segui la soglia force (0)',
|
|
2876
2955
|
wmCommands: 'Comandi: /ctx-pause sospende le azioni da livello dell’acqua · /ctx-resume le riprende · /ctx-handover scrive il documento e compatta subito.',
|
|
2877
|
-
|
|
2956
|
+
trimEffortRecommended: 'Automatico (consigliato dal modello)',
|
|
2957
|
+
trimSideModelLabel: 'Modello di riepilogo',
|
|
2958
|
+
trimSideModelHelp: 'Percorso del modello per i riepiloghi. Per impostazione predefinita segue il modello della sessione, senza ereditarne il livello di ragionamento. Anche le distillazioni a livelli usano lo stesso percorso. Senza una scelta manuale, i metadati determinano il livello attivo più basso; per i modelli con il solo interruttore on/off si usa off. Se il ragionamento non è supportato o mancano i metadati, non viene inviato alcun livello e si usa il valore predefinito del modello.',
|
|
2959
|
+
trimFollowSession: 'Segui il modello della sessione',
|
|
2960
|
+
trimFoldFallbackModelLabel: 'Modello di riserva per la piegatura',
|
|
2961
|
+
trimFoldFallbackModelHelp: 'Se la chiamata al modello di riepilogo fallisce, si riprova con questo modello; se fallisce anche questo, la piegatura sotto pressione diventa meccanica. Il livello di ragionamento si può impostare separatamente; se vuoto, si usa la raccomandazione del modello. Scegli un modello con margine per cooldown, controllo del rischio e concorrenza, evitando di condividere l’account con la sessione principale. Vuoto = nessun fallback.',
|
|
2962
|
+
trimFallbackUnset: 'Non impostato (in caso di errore, passa direttamente alla piegatura meccanica)',
|
|
2878
2963
|
trimSectionTitle: 'Riduzione del contesto',
|
|
2879
2964
|
trimModeLabel: 'Modalità di riduzione',
|
|
2880
2965
|
trimModeHelp:
|
|
2881
|
-
'Quando comprimere la cronologia in riepiloghi a riposo: off = mai, advisory = solo
|
|
2966
|
+
'Quando comprimere la cronologia in riepiloghi a riposo: off = mai, advisory = il modello comprime da solo (il motore aggiunge un promemoria una tantum al system prompt), auto = riduzione automatica.',
|
|
2882
2967
|
trimEnabledLabel: 'Attiva riduzione automatica',
|
|
2883
2968
|
trimEnabledHelp:
|
|
2884
2969
|
'Interruttore principale del livello di riduzione del contesto.',
|
|
@@ -2894,6 +2979,10 @@ window.__ModuleLoader__.load({
|
|
|
2894
2979
|
trimEmergencyLabel: 'Soglia di emergenza (%)',
|
|
2895
2980
|
trimEmergencyHelp:
|
|
2896
2981
|
'Riduzione meccanica immediata a questa percentuale della finestra.',
|
|
2982
|
+
trimAdvisoryLabel: 'Soglia di avviso advisory (%)',
|
|
2983
|
+
trimAdvisoryHelp: 'Solo in modalità advisory: al raggiungimento di questa percentuale della finestra il modello viene invitato a ripiegare da solo.',
|
|
2984
|
+
trimAdvisoryCriticalLabel: 'Soglia critica advisory (%)',
|
|
2985
|
+
trimAdvisoryCriticalHelp: 'Solo in modalità advisory: a questa percentuale l\'avviso scala a un ordine di ripiegamento in questo turno.',
|
|
2897
2986
|
trimWindowLabel: 'Limite finestra (token)',
|
|
2898
2987
|
trimWindowHelp: 'Le soglie di pressione/emergenza usano min(finestra del modello, limite); 0 = segue wmForceTokens.',
|
|
2899
2988
|
trimModeOff: 'Off',
|
|
@@ -2967,7 +3056,7 @@ window.__ModuleLoader__.load({
|
|
|
2967
3056
|
'Limite totale di caratteri dell’estratto della conversazione (200–20000).',
|
|
2968
3057
|
intentFallbackRouteLabel: 'Modello di riserva',
|
|
2969
3058
|
intentFallbackRouteHelp:
|
|
2970
|
-
'In caso di errore: ultimo modello instradato → riserva → primo candidato; vuoto = primo candidato.',
|
|
3059
|
+
'In caso di errore: ultimo modello instradato → riserva → primo candidato; vuoto = primo candidato. Puoi fissare il livello di ragionamento; se omesso, si usa il valore predefinito del modello di riserva.',
|
|
2971
3060
|
intentRouteUnset: 'Non impostato',
|
|
2972
3061
|
intentEffortFollow: 'predefinito del modello',
|
|
2973
3062
|
intentDockAuto: 'Auto',
|
|
@@ -3109,11 +3198,17 @@ window.__ModuleLoader__.load({
|
|
|
3109
3198
|
'Escala os níveis para a janela do próprio modelo do subagente: force = min(nível estático, janela × razão); soft/hard encolhem pelo mesmo fator. Apenas aperta, nunca afrouxa.',
|
|
3110
3199
|
wmSubagentFollowForce: 'Seguir o limiar force (0)',
|
|
3111
3200
|
wmCommands: 'Comandos: /ctx-pause suspende as ações de nível de água · /ctx-resume as retoma · /ctx-handover escreve o documento e compacta agora.',
|
|
3112
|
-
|
|
3201
|
+
trimEffortRecommended: 'Automático (recomendação do modelo)',
|
|
3202
|
+
trimSideModelLabel: 'Modelo de resumo',
|
|
3203
|
+
trimSideModelHelp: 'Rota do modelo para os resumos. Por padrão, segue o modelo da sessão, mas não herda o nível de raciocínio dessa chamada. As destilações em níveis usam a mesma rota. Sem escolha manual, os metadados selecionam o nível ativo mais baixo; para modelos com apenas a opção de ligar/desligar o raciocínio, usa-se off. Se o raciocínio não for compatível ou faltarem metadados, nenhum nível é enviado e vale o padrão do modelo.',
|
|
3204
|
+
trimFollowSession: 'Seguir o modelo da sessão',
|
|
3205
|
+
trimFoldFallbackModelLabel: 'Modelo de reserva para dobra',
|
|
3206
|
+
trimFoldFallbackModelHelp: 'Se a chamada do modelo de resumo falhar, tenta novamente com este modelo; se também falhar, a dobra por pressão passa a ser mecânica. O nível de raciocínio pode ser definido separadamente; se ficar vazio, usa-se a recomendação deste modelo. Escolha um modelo com margem para cooldown, controle de risco e concorrência, evitando compartilhar a conta com a sessão principal. Vazio = sem fallback.',
|
|
3207
|
+
trimFallbackUnset: 'Não configurado (em caso de falha, usar dobra mecânica diretamente)',
|
|
3113
3208
|
trimSectionTitle: 'Corte de contexto',
|
|
3114
3209
|
trimModeLabel: 'Modo de corte',
|
|
3115
3210
|
trimModeHelp:
|
|
3116
|
-
'Quando dobrar o histórico em resumos na ociosidade: off = nunca, advisory =
|
|
3211
|
+
'Quando dobrar o histórico em resumos na ociosidade: off = nunca, advisory = o modelo dobra por si (o motor acrescenta um aviso pontual ao system prompt), auto = dobra automática.',
|
|
3117
3212
|
trimEnabledLabel: 'Ativar corte automático',
|
|
3118
3213
|
trimEnabledHelp:
|
|
3119
3214
|
'Interruptor principal da camada de corte de contexto.',
|
|
@@ -3129,6 +3224,10 @@ window.__ModuleLoader__.load({
|
|
|
3129
3224
|
trimEmergencyLabel: 'Limiar de emergência (%)',
|
|
3130
3225
|
trimEmergencyHelp:
|
|
3131
3226
|
'Dobra mecânica imediata nessa porcentagem da janela.',
|
|
3227
|
+
trimAdvisoryLabel: 'Limiar de aviso advisory (%)',
|
|
3228
|
+
trimAdvisoryHelp: 'Apenas no modo advisory: ao atingir esta percentagem da janela, o modelo é incentivado a dobrar-se por si.',
|
|
3229
|
+
trimAdvisoryCriticalLabel: 'Limiar crítico advisory (%)',
|
|
3230
|
+
trimAdvisoryCriticalHelp: 'Apenas no modo advisory: nesta percentagem o aviso escala para uma ordem de dobragem neste turno.',
|
|
3132
3231
|
trimWindowLabel: 'Limite de janela (tokens)',
|
|
3133
3232
|
trimWindowHelp: 'Os níveis de pressão e emergência usam min(janela do modelo, limite); 0 = segue wmForceTokens.',
|
|
3134
3233
|
trimModeOff: 'Off',
|
|
@@ -3202,7 +3301,7 @@ window.__ModuleLoader__.load({
|
|
|
3202
3301
|
'Limite total de caracteres do trecho da conversa (200–20000).',
|
|
3203
3302
|
intentFallbackRouteLabel: 'Modelo de reserva',
|
|
3204
3303
|
intentFallbackRouteHelp:
|
|
3205
|
-
'Se a classificação falhar: último modelo roteado → reserva → primeiro candidato; vazio = primeiro candidato.',
|
|
3304
|
+
'Se a classificação falhar: último modelo roteado → reserva → primeiro candidato; vazio = primeiro candidato. É possível fixar o nível de raciocínio; se não definido, usa-se o padrão do modelo de reserva.',
|
|
3206
3305
|
intentRouteUnset: 'Não definido',
|
|
3207
3306
|
intentEffortFollow: 'padrão do modelo',
|
|
3208
3307
|
intentDockAuto: 'Auto',
|
|
@@ -3344,11 +3443,17 @@ window.__ModuleLoader__.load({
|
|
|
3344
3443
|
'Масштабирует уровни под собственное окно модели субагента: force = min(статический уровень, окно × доля); soft/hard сжимаются на тот же коэффициент. Только ужесточает, не смягчает.',
|
|
3345
3444
|
wmSubagentFollowForce: 'Следовать линии force (0)',
|
|
3346
3445
|
wmCommands: 'Команды: /ctx-pause приостанавливает действия по уровню воды · /ctx-resume возобновляет их · /ctx-handover записывает документ передачи и сжимает прямо сейчас.',
|
|
3347
|
-
|
|
3446
|
+
trimEffortRecommended: 'Авто (рекомендация модели)',
|
|
3447
|
+
trimSideModelLabel: 'Модель сводки',
|
|
3448
|
+
trimSideModelHelp: 'Маршрут модели для сводок. По умолчанию следует модели сессии, но не наследует уровень рассуждения этого вызова. Для ступенчатой дистилляции используется тот же маршрут. Без ручного выбора метаданные задают самый низкий включённый уровень; для модели только с переключателем рассуждений выбирается off. Если рассуждения не поддерживаются или метаданных нет, уровень не передаётся и используется значение модели по умолчанию.',
|
|
3449
|
+
trimFollowSession: 'Следовать модели сессии',
|
|
3450
|
+
trimFoldFallbackModelLabel: 'Резервная модель сворачивания',
|
|
3451
|
+
trimFoldFallbackModelHelp: 'Если вызов модели сводки завершается ошибкой, повтор выполняется на этой модели; при повторном сбое сворачивание под давлением становится механическим. Уровень рассуждения задаётся отдельно; если не указан, действует рекомендация этой модели. Выбирайте модель с запасом по охлаждению, контролю рисков и параллельным запросам и не используйте общий аккаунт с главной сессией. Пусто = без резервного маршрута.',
|
|
3452
|
+
trimFallbackUnset: 'Не задано (при сбое сразу перейти к механическому сворачиванию)',
|
|
3348
3453
|
trimSectionTitle: 'Обрезка контекста',
|
|
3349
3454
|
trimModeLabel: 'Режим обрезки',
|
|
3350
3455
|
trimModeHelp:
|
|
3351
|
-
'Когда сворачивать историю в сводки в простое: off = никогда, advisory =
|
|
3456
|
+
'Когда сворачивать историю в сводки в простое: off = никогда, advisory = модель сворачивает сама (движок добавляет разовое напоминание в системный промпт), auto = автоматически.',
|
|
3352
3457
|
trimEnabledLabel: 'Включить автообрезку',
|
|
3353
3458
|
trimEnabledHelp: 'Главный выключатель слоя обрезки контекста.',
|
|
3354
3459
|
trimGrowthLabel: 'Порог роста (токенов)',
|
|
@@ -3363,6 +3468,10 @@ window.__ModuleLoader__.load({
|
|
|
3363
3468
|
trimEmergencyLabel: 'Аварийный порог (%)',
|
|
3364
3469
|
trimEmergencyHelp:
|
|
3365
3470
|
'Немедленное механическое сворачивание при этом проценте окна.',
|
|
3471
|
+
trimAdvisoryLabel: 'Порог advisory-напоминания (%)',
|
|
3472
|
+
trimAdvisoryHelp: 'Только в режиме advisory: при достижении этой доли окна модели предлагается свернуть контекст самостоятельно.',
|
|
3473
|
+
trimAdvisoryCriticalLabel: 'Критический порог advisory (%)',
|
|
3474
|
+
trimAdvisoryCriticalHelp: 'Только в режиме advisory: на этой доле напоминание становится приказом свернуть в текущем ходе.',
|
|
3366
3475
|
trimWindowLabel: 'Лимит окна (токены)',
|
|
3367
3476
|
trimWindowHelp: 'Уровни давления и аварийный считают от min(окно модели, лимит); 0 = следует за wmForceTokens.',
|
|
3368
3477
|
trimModeOff: 'Off',
|
|
@@ -3436,7 +3545,7 @@ window.__ModuleLoader__.load({
|
|
|
3436
3545
|
'Общий лимит символов выборки диалога (200–20000).',
|
|
3437
3546
|
intentFallbackRouteLabel: 'Резервная модель',
|
|
3438
3547
|
intentFallbackRouteHelp:
|
|
3439
|
-
'При сбое классификации: прошлая модель → резерв → первый кандидат; пусто = первый кандидат.',
|
|
3548
|
+
'При сбое классификации: прошлая модель → резерв → первый кандидат; пусто = первый кандидат. Можно задать уровень reasoning; если он не указан, используется значение резервной модели по умолчанию.',
|
|
3440
3549
|
intentRouteUnset: 'Не задано',
|
|
3441
3550
|
intentEffortFollow: 'по умолчанию модели',
|
|
3442
3551
|
intentDockAuto: 'Авто',
|
|
@@ -5429,14 +5538,17 @@ window.__ModuleLoader__.load({
|
|
|
5429
5538
|
trimMode: values.trimMode,
|
|
5430
5539
|
trimEnabled: values.trimEnabled,
|
|
5431
5540
|
trimLadderEnabled: values.trimLadderEnabled,
|
|
5541
|
+
trimProtectTaskIntent: values.trimProtectTaskIntent,
|
|
5432
5542
|
surfaceFold: values.surfaceFold,
|
|
5433
5543
|
trimSideModel: {
|
|
5434
5544
|
provider: values.trimSideModel.provider,
|
|
5435
5545
|
model: values.trimSideModel.model,
|
|
5546
|
+
...(values.trimSideModel.effort ? { effort: values.trimSideModel.effort } : {}),
|
|
5436
5547
|
},
|
|
5437
5548
|
trimFoldFallbackModel: {
|
|
5438
5549
|
provider: values.trimFoldFallbackModel.provider,
|
|
5439
5550
|
model: values.trimFoldFallbackModel.model,
|
|
5551
|
+
...(values.trimFoldFallbackModel.effort ? { effort: values.trimFoldFallbackModel.effort } : {}),
|
|
5440
5552
|
},
|
|
5441
5553
|
trimStateDir: values.trimStateDir,
|
|
5442
5554
|
...Object.fromEntries(
|
|
@@ -5445,9 +5557,9 @@ window.__ModuleLoader__.load({
|
|
|
5445
5557
|
teamsMode: values.teamsMode,
|
|
5446
5558
|
syncWhitelist: values.syncWhitelist,
|
|
5447
5559
|
// Intent recognition (design: intent-routing.md §2): route
|
|
5448
|
-
// objects materialize {provider, model}
|
|
5449
|
-
//
|
|
5450
|
-
//
|
|
5560
|
+
// Route objects materialize {provider, model[, effort]} as configured;
|
|
5561
|
+
// the classifier route remains effort-free. Candidate effort/note are
|
|
5562
|
+
// always sent (blank string = unset; Host coerces per schema).
|
|
5451
5563
|
intentEnabled: values.intentEnabled,
|
|
5452
5564
|
intentClassifierRoute: {
|
|
5453
5565
|
provider: values.intentClassifierRoute.provider,
|
|
@@ -5472,6 +5584,7 @@ window.__ModuleLoader__.load({
|
|
|
5472
5584
|
intentFallbackRoute: {
|
|
5473
5585
|
provider: values.intentFallbackRoute.provider,
|
|
5474
5586
|
model: values.intentFallbackRoute.model,
|
|
5587
|
+
...(values.intentFallbackRoute.effort ? { effort: values.intentFallbackRoute.effort } : {}),
|
|
5475
5588
|
},
|
|
5476
5589
|
};
|
|
5477
5590
|
if (sameValues(current, desired)) {
|
|
@@ -5875,9 +5988,10 @@ window.__ModuleLoader__.load({
|
|
|
5875
5988
|
(meta) => meta.model === route.model,
|
|
5876
5989
|
);
|
|
5877
5990
|
edit(field, {
|
|
5878
|
-
|
|
5879
|
-
|
|
5880
|
-
|
|
5991
|
+
provider: next,
|
|
5992
|
+
model: kept ? route.model : '',
|
|
5993
|
+
effort: '',
|
|
5994
|
+
});
|
|
5881
5995
|
},
|
|
5882
5996
|
),
|
|
5883
5997
|
'aria-label': `${label} · provider`,
|
|
@@ -5891,7 +6005,7 @@ window.__ModuleLoader__.load({
|
|
|
5891
6005
|
`${intentId}-${field}-model`,
|
|
5892
6006
|
route.model,
|
|
5893
6007
|
(next) => {
|
|
5894
|
-
edit(field, { ...route, model: next });
|
|
6008
|
+
edit(field, { ...route, model: next, effort: '' });
|
|
5895
6009
|
},
|
|
5896
6010
|
),
|
|
5897
6011
|
disabled: !editable || route.provider === '',
|
|
@@ -5899,6 +6013,16 @@ window.__ModuleLoader__.load({
|
|
|
5899
6013
|
},
|
|
5900
6014
|
...intentModelOptions(route.provider, route.model),
|
|
5901
6015
|
),
|
|
6016
|
+
field === 'intentFallbackRoute' && route.provider !== '' && route.model !== ''
|
|
6017
|
+
? intentEffortSelect(
|
|
6018
|
+
`${intentId}-${field}-effort`,
|
|
6019
|
+
route,
|
|
6020
|
+
route.effort ?? '',
|
|
6021
|
+
(next) => edit(field, { ...route, effort: next }),
|
|
6022
|
+
`${label} · effort`,
|
|
6023
|
+
t('intentEffortFollow'),
|
|
6024
|
+
)
|
|
6025
|
+
: null,
|
|
5902
6026
|
);
|
|
5903
6027
|
};
|
|
5904
6028
|
/** Trim route rows reuse the intent route picker machinery — the
|
|
@@ -5950,6 +6074,7 @@ window.__ModuleLoader__.load({
|
|
|
5950
6074
|
...route,
|
|
5951
6075
|
provider: next,
|
|
5952
6076
|
model: kept ? route.model : '',
|
|
6077
|
+
effort: '',
|
|
5953
6078
|
});
|
|
5954
6079
|
},
|
|
5955
6080
|
),
|
|
@@ -5963,10 +6088,10 @@ window.__ModuleLoader__.load({
|
|
|
5963
6088
|
: route.model,
|
|
5964
6089
|
(next) => {
|
|
5965
6090
|
if (followMode && next === TRIM_ROUTE_FOLLOW) {
|
|
5966
|
-
edit(field, { ...route, model: '' });
|
|
6091
|
+
edit(field, { ...route, model: '', effort: '' });
|
|
5967
6092
|
return;
|
|
5968
6093
|
}
|
|
5969
|
-
edit(field, { ...route, model: next });
|
|
6094
|
+
edit(field, { ...route, model: next, effort: '' });
|
|
5970
6095
|
},
|
|
5971
6096
|
),
|
|
5972
6097
|
disabled: !editable || route.provider === '',
|
|
@@ -5976,10 +6101,10 @@ window.__ModuleLoader__.load({
|
|
|
5976
6101
|
? intentEffortSelect(
|
|
5977
6102
|
`${trimId}-${field}-effort`,
|
|
5978
6103
|
route,
|
|
5979
|
-
route.effort,
|
|
6104
|
+
route.effort ?? '',
|
|
5980
6105
|
(next) => edit(field, { ...route, effort: next }),
|
|
5981
6106
|
`${label} · effort`,
|
|
5982
|
-
t('
|
|
6107
|
+
t('trimEffortRecommended'),
|
|
5983
6108
|
)
|
|
5984
6109
|
: null,
|
|
5985
6110
|
);
|
|
@@ -5988,8 +6113,8 @@ window.__ModuleLoader__.load({
|
|
|
5988
6113
|
* wire efforts when the catalog reports them, the EFFORTS
|
|
5989
6114
|
* fallback otherwise; '' = adapter default. A stored value
|
|
5990
6115
|
* missing from the list stays selectable. emptyLabel replaces
|
|
5991
|
-
* the '' option label
|
|
5992
|
-
* the model default
|
|
6116
|
+
* the '' option label. Trim rows use their automatic recommendation;
|
|
6117
|
+
* an empty intent-fallback pin follows the model default. */
|
|
5993
6118
|
const intentEffortSelect = (
|
|
5994
6119
|
id,
|
|
5995
6120
|
route,
|
|
@@ -6989,6 +7114,23 @@ window.__ModuleLoader__.load({
|
|
|
6989
7114
|
}),
|
|
6990
7115
|
lines: [],
|
|
6991
7116
|
}),
|
|
7117
|
+
h(SettingsRow, {
|
|
7118
|
+
key: 'trimProtectTaskIntent',
|
|
7119
|
+
id: `${trimId}-intent`,
|
|
7120
|
+
label: t('trimProtectTaskIntentLabel'),
|
|
7121
|
+
help: t('trimProtectTaskIntentHelp'),
|
|
7122
|
+
control: h('input', {
|
|
7123
|
+
type: 'checkbox',
|
|
7124
|
+
id: `${trimId}-intent`,
|
|
7125
|
+
checked: values.trimProtectTaskIntent,
|
|
7126
|
+
onChange: () => {
|
|
7127
|
+
edit('trimProtectTaskIntent', !values.trimProtectTaskIntent);
|
|
7128
|
+
},
|
|
7129
|
+
disabled: !editable,
|
|
7130
|
+
style: STYLE.checkbox,
|
|
7131
|
+
}),
|
|
7132
|
+
lines: [],
|
|
7133
|
+
}),
|
|
6992
7134
|
h(SettingsRow, {
|
|
6993
7135
|
key: 'surfaceFold',
|
|
6994
7136
|
id: `${trimId}-surface`,
|