dsh-ptc-plus 0.4.10 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.en.md +65 -127
  2. package/README.md +65 -127
  3. package/assets/dsh-ptc-plus-banner-en.webp +0 -0
  4. package/assets/dsh-ptc-plus-banner-zh.webp +0 -0
  5. package/assets/ptc-plus-repl-workspace-en.png +0 -0
  6. package/assets/ptc-plus-repl-workspace-zh.png +0 -0
  7. package/assets/ptc-plus-settings-en.png +0 -0
  8. package/assets/ptc-plus-settings-zh.png +0 -0
  9. package/client.cjs +42702 -0
  10. package/cordis.patch.yml +1 -0
  11. package/docs/README.md +6 -2
  12. package/docs/adr/0005-temporary-rejected-cell-edit-transport.md +31 -198
  13. package/docs/adr/0008-define-agent-operating-contract.md +5 -1
  14. package/docs/adr/0009-bound-expensive-acceptance-default.md +2 -2
  15. package/docs/adr/0016-archive-resolved-review-findings.md +1 -1
  16. package/docs/adr/0017-track-the-latest-dsh-public-surface.md +4 -4
  17. package/docs/adr/0019-plugin-settings-and-kill-switch.md +1 -1
  18. package/docs/adr/0020-optional-cordis-tools-in-ptc-mode.md +1 -1
  19. package/docs/adr/0022-stage-npm-releases-with-oidc.md +4 -2
  20. package/docs/adr/0023-global-user-bindings.md +2 -0
  21. package/docs/adr/0026-persist-the-delivery-verdict-against-the-verified-candidate.md +2 -0
  22. package/docs/adr/0028-attach-to-the-host-ptc-execution-seam.md +25 -23
  23. package/docs/adr/0031-close-semantic-obligations-by-owner.md +1 -1
  24. package/docs/adr/0034-keep-program-values-separate-from-output-projections.md +29 -0
  25. package/docs/adr/0035-run-coverage-only-before-a-new-release.md +27 -0
  26. package/docs/adr/0036-separate-focused-development-from-delivery-verification.md +29 -0
  27. package/docs/adr/0037-keep-tool-hover-previews-passive.md +52 -0
  28. package/docs/adr/0038-freeze-session-capability-plans.md +71 -0
  29. package/docs/adr/0039-verify-documentation-without-runtime-suites.md +29 -0
  30. package/docs/adr/0040-separate-capability-configurations-from-session-observations.md +39 -0
  31. package/docs/adr/0041-record-cell-execution-directories.md +65 -0
  32. package/docs/adr/0042-persist-provider-availability-and-handback.md +41 -0
  33. package/docs/adr/0043-compose-capability-and-context-policies.md +37 -0
  34. package/docs/adr/0044-coexist-with-the-official-persistent-repl.md +35 -0
  35. package/docs/adr/README.md +8 -0
  36. package/docs/architecture.md +23 -25
  37. package/docs/capability-planning-components.md +93 -0
  38. package/docs/capability-projection.md +7 -0
  39. package/docs/client-ui.md +70 -23
  40. package/docs/client-visual-contract.md +26 -9
  41. package/docs/context-management.md +22 -0
  42. package/docs/context-optimization-plan.md +353 -0
  43. package/docs/context-public-interface-coverage.md +25 -0
  44. package/docs/durability-design.md +20 -15
  45. package/docs/evaluation.md +41 -6
  46. package/docs/evaluations/command-goat-deepseek-v4.1-flash-20261006.md +126 -0
  47. package/docs/evaluations/command-goat-deepseek-v4.1-flash.md +281 -0
  48. package/docs/installation.md +33 -10
  49. package/docs/program-data-plane.md +5 -3
  50. package/docs/publishing.md +7 -7
  51. package/docs/release-coverage.md +73 -0
  52. package/docs/release-notes.md +1 -1
  53. package/docs/review-procedure.md +56 -0
  54. package/docs/runtime-reference.md +53 -16
  55. package/docs/semantic-validation.md +14 -2
  56. package/docs/stateful-binding-updates-proposal.md +2 -2
  57. package/docs/user-bindings.md +1 -1
  58. package/docs/value-wire.md +11 -1
  59. package/docs/verification-optimization-work.md +26 -15
  60. package/docs/verification.md +30 -88
  61. package/index.js +146 -20
  62. package/internal/binding-toggle-receipt.js +24 -0
  63. package/internal/capability-command-receipt.js +31 -0
  64. package/internal/capability-environment.js +1253 -0
  65. package/internal/capability-plan.js +285 -0
  66. package/internal/capability-policy.js +96 -0
  67. package/internal/capability-statistics-store.js +180 -0
  68. package/internal/capability-statistics.js +214 -0
  69. package/internal/config-spec.js +89 -10
  70. package/internal/direct-surface-owner.js +27 -29
  71. package/internal/dynamic-environment-runtime.js +9 -9
  72. package/internal/edit-transport-owner.js +195 -140
  73. package/internal/execution-provider-owner.js +40 -12
  74. package/internal/execution-seam-compat.js +26 -8
  75. package/internal/kernel-worker.js +104 -32
  76. package/internal/native-root-dynamic.js +12 -13
  77. package/internal/official-repl-priority.js +51 -0
  78. package/internal/program-bindings.js +190 -0
  79. package/internal/recovery-tips.js +3 -2
  80. package/internal/rejected-cell-editor.js +8 -8
  81. package/internal/repl-observation-interest.js +11 -3
  82. package/internal/rpc-contract.js +1 -0
  83. package/internal/runtime-bridge-owner.js +275 -34
  84. package/internal/runtime-config.js +58 -0
  85. package/internal/runtime-contexts.js +74 -5
  86. package/internal/runtime-intrinsics.js +1 -0
  87. package/internal/runtime-messages.js +41 -0
  88. package/internal/sdk-projection.js +10 -82
  89. package/internal/session-cell-executor.js +42 -19
  90. package/internal/session-events.js +34 -0
  91. package/internal/session-journal-recovery.js +234 -11
  92. package/internal/session-journal-schema.js +6 -3
  93. package/internal/session-journal.js +31 -2
  94. package/internal/session-log-view.js +1 -1
  95. package/internal/session-runtime.js +119 -15
  96. package/internal/settings-compat.js +12 -5
  97. package/internal/stateful-module-compiler.js +3 -2
  98. package/internal/stateful-module-runtime.js +7 -3
  99. package/internal/stateful-root-runtime.js +9 -4
  100. package/internal/user-binding-authoring.js +2 -7
  101. package/internal/user-bindings-owner.js +19 -2
  102. package/internal/validated-parse-repair.js +1 -1
  103. package/internal/value-wire.js +68 -21
  104. package/internal/worker-cwd-virtualization.js +20 -18
  105. package/internal/worker-realm-surfaces.js +3 -3
  106. package/package.json +49 -30
  107. package/src/client-activity.js +3 -2
  108. package/src/client-authoring-view.js +67 -30
  109. package/src/client-binding-review.js +2 -1
  110. package/src/client-binding-toggle.js +18 -0
  111. package/src/client-capabilities-view.js +1555 -0
  112. package/src/client-capability-sort.js +29 -0
  113. package/src/client-copy.js +923 -8
  114. package/src/client-feature-gates.js +3 -0
  115. package/src/client-indicator-view.js +4 -6
  116. package/src/client-primitives.js +33 -2
  117. package/src/client-repl-view.js +20 -13
  118. package/src/client-settings-view.js +411 -41
  119. package/src/client-styles.js +112 -15
  120. package/src/client-tool-hover.js +185 -0
  121. package/src/client-tool-view.js +45 -9
  122. package/src/client-transport.js +44 -9
  123. package/src/client-workbench.js +6 -7
  124. package/src/client.js +76 -22
  125. package/client.js +0 -32479
@@ -1,4 +1,4 @@
1
- import { CONFIG_FIELDS, CONFIG_GROUPS } from '../internal/config-spec.js'
1
+ import { CONFIG_FIELDS, CONFIG_GROUPS, CONFIG_MODULES } from '../internal/config-spec.js'
2
2
 
3
3
  /** Locale namespace owning every settings-card string (field copy plus chrome). */
4
4
  const LOCALE_NS = 'settings.ptcPlus'
@@ -6,6 +6,454 @@ const LOCALE_NS = 'settings.ptcPlus'
6
6
  /** Card chrome copy; field labels and hints ride the shared config spec. */
7
7
  const CHROME_COPY = Object.freeze({
8
8
  zh: Object.freeze({
9
+ "capabilities.combination.saved": "新会话设置",
10
+ "capabilities.combination.rules": "能力配置",
11
+ "capabilities.combination.description": "初始提示",
12
+ "capabilities.combination.statistics": "使用统计",
13
+ "capabilities.combination.recovery": "提示恢复",
14
+ "capabilities.combination.preview": "输出节选",
15
+ "capabilities.combination.state.selected": "已选用",
16
+ "capabilities.combination.state.unselected": "未选用",
17
+ "capabilities.combination.state.paused": "已暂停",
18
+ "capabilities.combination.state.host": "沿用 DSH",
19
+ "capabilities.combination.state.unknown": "未确认",
20
+ "capabilities.combination.separator": "、",
21
+ "capabilities.combination.selectedEffect": "新会话将使用:{features}。其余沿用 DSH。",
22
+ "capabilities.combination.rulesOnly": "仅应用能力配置及初始提示;不采集使用情况,不恢复说明,不限制结果与日志。",
23
+ "capabilities.combination.hostEffect": "这组功能均沿用 DSH。",
24
+ "capabilities.combination.pausedEffect": "整组已暂停,重新开启恢复这些选择。",
25
+ "capabilities.combination.unknownSettings": "尚未读到已保存设置。",
26
+ "capabilities.combination.observed": "会话方案对照",
27
+ "capabilities.combination.chooseTarget": "选择会话后查看已记录方案。保存设置不会自动改变已有会话。",
28
+ "capabilities.combination.target": "对照会话:{session}",
29
+ "capabilities.combination.lastRead": "上次读取",
30
+ "capabilities.combination.publication.accepted": "方案通知已记录",
31
+ "capabilities.combination.publication.pending": "方案通知待接受",
32
+ "capabilities.combination.publication.not-required": "此方案无需额外通知",
33
+ "capabilities.combination.publication.unknown": "通知状态未确认",
34
+ "capabilities.combination.historical": "历史方案未记录总开关,按原代际展示。",
35
+ "capabilities.combination.stale": "仅保留上次观察;与已保存设置的差异尚未确认。",
36
+ "capabilities.combination.readFailed": "读取失败:{error}。可重新读取。",
37
+ "capabilities.combination.differenceUnknown": "尚未确认与已保存设置是否一致。",
38
+ "capabilities.combination.different": "与已保存设置不同;此会话仍保留原方案。",
39
+ "capabilities.combination.same": "冻结来源与已保存设置一致;临时覆盖另行保留。",
40
+ "capabilities.combination.overrides": "有本会话临时覆盖,实际规则见逐项方案。",
41
+ "capabilities.combination.inspectPlan": "查看逐项方案",
42
+ "capabilities.combination.noPlan": "尚未观察到此会话的冻结方案,不能根据保存设置推断。",
43
+ "capabilities.effect.paused": "设置已保留,整组暂停期间不应用。",
44
+ "capabilities.effect.rulesOff": "能力配置沿用 DSH;采集、恢复和预览可单独选用。",
45
+ "capabilities.effect.sourceClosed": "来源关闭优先于单项开启,单项偏好仍保留。",
46
+ "capabilities.effect.closed": "能力已选停用,说明偏好仍保留。",
47
+ "capabilities.effect.disclosure.host": "沿用 DSH 的说明;分配依据仅保存备用。",
48
+ "capabilities.effect.disclosure.full": "完整提供说明,预算不会截断或降级它。",
49
+ "capabilities.effect.disclosure.on-demand": "仍可发现和使用,需要时读取完整说明;不会关闭能力。",
50
+ "capabilities.effect.disclosure.adaptive": "仅对可用能力按所选依据分配说明,不自动关闭能力。",
51
+ "capabilities.effect.allocationActive": "仅用于最终选择“按依据分配”的可用能力。",
52
+ "capabilities.effect.allocationRetained": "当前没有“按依据分配”选择,这些依据已保留备用。",
53
+ "capabilities.effect.historicalStatistics": "停止采集后仍可使用有效历史统计;没有有效样本不等于零使用。",
54
+ "capabilities.effect.conditions": "了解适用条件",
55
+ "capabilities.effect.allocationLimits": "单项最终说明选择决定是否分配。来源关闭优先;显式完整说明不会因预算被截断或降级。",
56
+ "capabilities.effect.recoveryOn": "选用压缩后的提示恢复;能力启停与说明分配保持不变。",
57
+ "capabilities.effect.recoveryOff": "不补回近期 API 说明;必要的环境通知仍由原流程提供。",
58
+ "capabilities.effect.previewOn": "仅限制模型上下文的展示,完整值和执行状态不变。",
59
+ "capabilities.effect.previewOff": "结果与日志沿用 DSH 的展示。",
60
+ "capabilities.effect.collectionOn": "记录实际使用情况;不会自动选择统计分配。",
61
+ "capabilities.effect.collectionOff": "停止采集新记录,历史统计仍保留并可选作分配依据。",
62
+ "capabilities.effect.statisticsIndependent": "采集与分配独立;是否使用统计在“提示设置 → 初始提示”中选择。",
63
+ 'capabilities.sourceRules': '来源规则',
64
+ 'capabilities.filterAction': '筛选',
65
+ 'capabilities.batchSettings': '批量设置',
66
+ 'capabilities.batch.cancel': '取消',
67
+ 'capabilities.inheritedRules': '继承规则',
68
+ 'capabilities.inheritedRulesHelp': '设置默认、类别和 MCP 来源的持续规则,更改即保存。规则独立于当前筛选,单项设置按维度覆盖;MCP 来源停用优先。',
69
+ 'capabilities.batch.targets': '一次性修改 {count} 项真实能力',
70
+ 'capabilities.batch.excluded': '已排除 {count} 项当前不可用或未确认的条目。',
71
+ 'capabilities.batch.targetList': '本次批量目标',
72
+ 'capabilities.batch.empty': '当前筛选中没有可批量修改的真实能力。',
73
+ 'capabilities.batch.availability': '批量设置是否启用',
74
+ 'capabilities.batch.disclosure': '批量设置上下文',
75
+ 'capabilities.batch.keep': '不更改',
76
+ 'capabilities.batch.effect': '确认后一次保存这些单项设置,未修改的维度保持不变;新会话采用,已有会话需明确刷新。',
77
+ 'capabilities.batch.sourceClosure': 'MCP 来源已停用时,单项启用不会重新开启来源。',
78
+ 'capabilities.batch.changedTargets': '{count} 项目标已不在最新完整目录中或可用性未确认;请取消并重新检查目标。',
79
+ 'capabilities.batch.failed': '保存未成功,目标和选择已保留,可再次确认重试。',
80
+ 'capabilities.batch.confirm': '确认修改 {count} 项',
81
+ 'capabilities.batch.all': '当前完整能力目录',
82
+ 'capabilities.batch.selected': '已选择 {count} 项能力',
83
+ 'capabilities.batch.stage': '暂存修改({count} 项)',
84
+ 'capabilities.batch.sessionStage': '确认后写入待应用更改;由底部按钮决定应用到会话或保存为全局默认。',
85
+ 'capabilities.batch.sessionInherit': '不改动(清除本会话修改)',
86
+ 'capabilities.selectForBatch': '选择 {name}',
87
+ 'capabilities.selectAllVisible': '选择当前筛选结果',
88
+ 'capabilities.selectionCount': '已选 {count} 项',
89
+ 'capabilities.typesColumn': '类型',
90
+ 'capabilities.sourceColumn': '来源',
91
+ 'capabilities.enabledColumn': '是否启用',
92
+ 'capabilities.contextColumn': '上下文',
93
+ 'capabilities.rowState.unknown': '未确认',
94
+ 'capabilities.rowState.unavailable': '当前不可用',
95
+ 'capabilities.rowState.source-closed': '来源已停用',
96
+ 'capabilities.rowState.unapplied': '未应用',
97
+ 'capabilities.rowState.enabled': '已启用',
98
+ 'capabilities.rowState.closed': '已停用',
99
+ 'capabilities.editContextFor': '编辑上下文设置:{name}',
100
+ 'capabilities.closeDetails': '收起详情',
101
+ 'capabilities.contextHelp': '启停和上下文分别保存;更改说明不会改变能力是否可用。',
102
+ 'capabilities.coverageScope': '统计范围',
103
+ 'capabilities.scope.workspace': '当前工作区',
104
+ 'capabilities.scope.global': '所有工作区',
105
+ 'capabilities.usedFamilies': '使用家族数',
106
+ 'capabilities.eligibleFamilies': '可用家族数',
107
+ 'capabilities.coverageColumn': '覆盖率',
108
+ 'capabilities.coverageFor': '{name} 的覆盖率',
109
+ 'capabilities.familyHint': '会话家族:一个主会话及其子代理合计一次,只有完成结算的家族计入统计。关闭采集仍可查看已有记录。',
110
+ 'capabilities.contextNavigation': '上下文功能',
111
+ 'capabilities.context.description': '初始提示',
112
+ 'capabilities.context.recovery': '提示恢复',
113
+ 'capabilities.context.preview': '输出节选',
114
+ 'capabilities.context.custom': '自定义',
115
+ 'capabilities.context.summary.description': '默认:{disclosure}',
116
+ 'capabilities.context.summary.recovery': '恢复额度:{bytes} UTF-8 bytes',
117
+ 'capabilities.context.summary.preview': '输出额度:约 {tokens} token',
118
+ 'capabilities.context.summary.noCriteria': '未选分配依据',
119
+ 'capabilities.paused': '已暂停',
120
+ 'capabilities.groupPaused': '已关闭,设置已保留',
121
+ 'capabilities.allocationTitle': '分配依据',
122
+ 'capabilities.allocation.baseline': '常用集',
123
+ 'capabilities.allocation.statistics': '使用统计',
124
+ 'capabilities.allocation.budget': '预算约束',
125
+ 'capabilities.allocationHint': '仅影响“按依据分配”,不改变显式选择的“完整提供”。',
126
+ 'capabilities.quotaSettings': '额度设置',
127
+ 'capabilities.descriptionInactive': '需开启“能力配置”才能应用说明设置。',
128
+ 'capabilities.recoveryHelp': '对话压缩后,恢复近期已用、仍有效的 API 说明。不恢复 Skill 正文,也不更改会话能力方案。',
129
+ 'capabilities.recoveryEnabled': '提示恢复',
130
+ 'capabilities.previewHelp': '限制模型上下文中结果与日志的长度,省略内容仍可读取;完整结果和执行状态不变。',
131
+ 'capabilities.previewEnabled': '输出节选',
132
+ 'capabilities.estimatedTokens': '约 {count} token',
133
+ 'capabilities.descriptionDependency': '初始提示采用能力配置中的说明规则;常用集在能力配置中编辑。提示恢复、输出节选和使用统计可独立选用。',
134
+ 'capabilities.descriptionHelp': '设置新会话的初始能力提示:完整说明、按需目录或按依据分配;单项设置优先。',
135
+ 'capabilities.defaultDisclosure': '默认提供方式',
136
+ 'capabilities.savedForNew': '已保存 · 新会话采用',
137
+ 'capabilities.title.manual': '能力配置',
138
+ 'capabilities.title.budgets': '提示设置',
139
+ 'capabilities.title.statistics': '使用统计',
140
+ 'capabilities.title.plans': '配置方案',
141
+ 'capabilities.existingSessions': '对照已有会话',
142
+ 'capabilities.managementHelp': '开启后使用下方设置,控制能力启用及提供给模型的说明;关闭则沿用 DSH。',
143
+ 'capabilities.noConfigurations': '暂无已保存配置',
144
+ 'capabilities.libraryMore': '配置库更多操作',
145
+ 'capabilities.profileMore': '此配置更多操作',
146
+ 'capabilities.profileDetails': '规则与额度',
147
+ 'capabilities.confirmSave': '保存',
148
+ 'capabilities.confirmRename': '确认重命名',
149
+ 'capabilities.sameNameHint': '使用已有名称会替换同名配置。',
150
+ 'capabilities.savedRules': '单独设置的规则',
151
+ 'capabilities.ruleCount': '{count} 项',
152
+ 'capabilities.statisticsSettings': '统计设置',
153
+ 'capabilities.configurationUnavailable': "配置当前不可写,未保存更改。",
154
+ 'capabilities.observedUsage': "实际使用统计",
155
+ 'capabilities.budgetPreview': "当前能力分配预览",
156
+ 'capabilities.observationUnavailable': "无法读取能力预览,请重新读取。",
157
+ 'capabilities.selectObservation': "选择一个活跃 PTC 会话作为观察锚点;统计和预算预览都按它的能力清单展示,统计范围可切换当前工作区或全部工作区。",
158
+ 'capabilities.quick.title': '会话能力控制',
159
+ 'capabilities.quick.modalTitle': '管理会话能力',
160
+ 'capabilities.quick.sessionIdentity': '当前会话:{session}',
161
+ 'capabilities.quick.state': '当前状态',
162
+ 'capabilities.quick.allStates': '全部状态',
163
+ 'capabilities.quick.changed': '待应用的更改',
164
+ 'capabilities.quick.effective': '当前生效',
165
+ 'capabilities.quick.temporary': '临时覆盖',
166
+ 'capabilities.quick.globalSaved': '全局设置',
167
+ 'capabilities.quick.sessionSource': '会话继承',
168
+ 'capabilities.quick.unknown': '未确认',
169
+ 'capabilities.quick.choice': '选择策略',
170
+ 'capabilities.quick.members': '能力清单',
171
+ 'capabilities.quick.catalogError': '能力清单读取失败:{error}',
172
+ 'capabilities.quick.changes': '{count} 项待应用',
173
+ 'capabilities.quick.applySession': '应用到会话',
174
+ 'capabilities.quick.applyGlobal': '应用到全局',
175
+ 'capabilities.quick.noOverride': '无覆盖',
176
+ 'capabilities.quick.inheritSessionOnly': '撤销临时修改只适用于本会话。请用“应用到会话”提交。',
177
+ 'capabilities.quick.discard': '放弃更改',
178
+ 'capabilities.quick.applying': '正在应用…',
179
+ 'capabilities.quick.applied': '{count} 项会话能力已更新。',
180
+ 'capabilities.quick.pendingApplied': '{count} 项已提交;部分将在首次接受的模型步骤生效。',
181
+ 'capabilities.quick.partial': '已更新 {count} 项;剩余未应用。{error}',
182
+ 'capabilities.quick.savedOnly': '已更新 {count} 项;全局选择已保存,但本会话更新失败。请重试。{error}',
183
+ 'capabilities.quick.confirmationUnavailable': '无法确认当前目录,请重新读取后重试。',
184
+ 'capabilities.quick.unknownReceipt': '无法确认命令结果,请读取当前状态后重试。',
185
+ 'capabilities.quick.otherScopeChanges': '另一范围待应用:{count}',
186
+ 'capabilities.quick.serverTools': '关联能力',
187
+ 'capabilities.quick.backToList': '返回能力清单',
188
+ 'capabilities.quick.disabledByServer': 'MCP 服务 {server} 已关闭;子项选择仍保留。',
189
+ 'capabilities.quick.pendingServerClose': 'MCP 服务 {server} 有待生效的关闭选择;子项选择仍保留。',
190
+ 'capabilities.quick.enabled': '已启用',
191
+ 'capabilities.quick.pending': '待生效',
192
+ 'capabilities.quick.temporaryState': '{state}(临时)',
193
+ 'capabilities.quick.sessionPaused': '本会话的能力与上下文已暂停;清单显示宿主默认,需在设置中重新开启并刷新后才会应用新的更改。',
194
+ 'capabilities.quick.sessionManagementOff': '本会话未启用能力管理;能力沿用宿主配置。在设置的“能力与上下文”中开启能力管理并刷新后可修改本会话选择。',
195
+ 'capabilities.quick.savedPaused': '能力与上下文已在设置中关闭;重新开启并刷新后可修改本会话选择。',
196
+ 'capabilities.quick.savedManagementOff': '能力管理已在设置中关闭;重新开启并刷新后可修改本会话选择。',
197
+ 'capabilities.quick.scope': '生效范围',
198
+ 'capabilities.quick.session': '仅本会话',
199
+ 'capabilities.quick.global': '全局保存并更新本会话',
200
+ 'capabilities.quick.sessionHint': '临时覆盖仅属于此会话;普通刷新保留这些选择。',
201
+ 'capabilities.quick.globalHint': '保存为新会话的默认选择,并立即更新本会话;其他已有会话保持原方案。',
202
+ 'capabilities.quick.kind': '能力类别',
203
+ 'capabilities.quick.all': '全部能力',
204
+ 'capabilities.quick.skills': 'Skills',
205
+ 'capabilities.quick.tools': '基础工具',
206
+ 'capabilities.quick.mcp': 'MCP 服务与资源',
207
+ 'capabilities.quick.mcp_tools': 'MCP Tools',
208
+ 'capabilities.quick.noChange': '不改动(当前:{state})',
209
+ 'capabilities.quick.undoTemp': '撤销本会话修改(恢复为:{state})',
210
+ 'capabilities.quick.keepUnchanged': '不改动',
211
+ 'capabilities.quick.undoChange': '撤销本会话修改',
212
+ 'capabilities.quick.upperRule': '由上一级规则决定',
213
+ 'capabilities.quick.impact': '本会话生效:{state} · 来源:{source}',
214
+ 'capabilities.quick.impactPending': '本会话生效:{state} · 来源:{source} · 待应用',
215
+ 'capabilities.quick.impactUpper': '本会话生效:按上一级规则决定',
216
+ 'capabilities.quick.impactUpperPending': '本会话生效:按上一级规则决定 · 待应用',
217
+ 'capabilities.quick.originPlan': '会话方案',
218
+ 'capabilities.quick.originSession': '本会话临时修改',
219
+ 'capabilities.action.enable': '启用',
220
+ 'capabilities.action.close': '关闭',
221
+ 'capabilities.quick.states': '已保存:{saved} · 临时:{temporary} · 生效:{effective}',
222
+ 'capabilities.quick.apply': '提交并生效',
223
+ 'capabilities.quick.prefill': '填入命令草稿',
224
+ 'capabilities.card.recorded': '会话能力已更新。',
225
+ 'capabilities.card.pending': '能力已准备,将在下一次获准的模型步骤生效。',
226
+ 'capabilities.card.paused': '能力与上下文已关闭;本会话沿用宿主能力。',
227
+ 'capabilities.card.off': '能力管理已关闭;本会话沿用宿主能力。',
228
+ 'capabilities.card.saved-only': '全局设置已保存,会话更新失败。{error}',
229
+ 'capabilities.card.unavailable': '会话不可用,未应用更改。',
230
+ 'capabilities.card.usage': '命令未执行,请检查参数。',
231
+ 'capabilities.card.catalogCount': '{count} 项能力',
232
+ 'capabilities.card.details': '会话能力详情',
233
+ 'capabilities.card.browse': '查看能力列表',
234
+ 'capabilities.card.source': '查看原始结果',
235
+ 'capabilities.card.running': '执行中',
236
+ 'capabilities.card.completed': '已完成',
237
+ 'capabilities.card.failed': '失败',
238
+ 'capabilities.receipt.title': '会话能力',
239
+ 'capabilities.commandFailed': '能力命令失败。',
240
+ 'capabilities.receipt.saved-only': '全局选择已保存,但会话 {session} 更新失败;请读取当前方案并重试。{error}',
241
+ 'capabilities.receipt.recorded': '会话 {session} 的能力已更新。',
242
+ 'capabilities.receipt.pending': '会话 {session} 的能力已准备,将在首次接受的模型步骤生效。',
243
+ 'capabilities.receipt.paused': '能力与上下文已关闭;会话 {session} 沿用宿主能力。',
244
+ 'capabilities.receipt.off': '能力管理已关闭;会话 {session} 沿用宿主能力。',
245
+ 'capabilities.receipt.unavailable': '请选择仍活跃的 PTC 会话。',
246
+ 'capabilities.receipt.usage': '使用 /capabilities 查看,或 /capabilities refresh 同步已保存设置。',
247
+ 'bindings.toggleEnabled': '已保存“{name}”的启用选择;模型目录在下一次获准步骤更新,程序值尚未证明初始化。',
248
+ 'bindings.toggleDisabled': '已保存“{name}”的停用选择;模型目录在下一次获准步骤撤销,不撤销已经发生的效果。',
249
+ 'capabilities.observationGroup': '只读会话观察',
250
+ 'capabilities.observationSession': '观察会话',
251
+ 'capabilities.observationOnly': '仅查看当前目录的统计和预算,不修改会话方案。',
252
+ 'capabilities.renameTo': '新配置名称',
253
+ 'capabilities.copyName': '复制后的配置名称',
254
+ 'capabilities.transferConfigurations': '导入与导出',
255
+ 'capabilities.importHint': '导入只加入配置库;选择并切换后才应用。已有会话需明确刷新。',
256
+ 'capabilities.coldStartHint': '完整披露:首轮提供完整契约。按需披露:能力仍可用,模型可通过 capabilities.search 取得目录描述;Skills 按声明资格加载正文。关闭:当前会话不提供该能力。没有合格统计时,常用基线和手动选择仍有效;其他已启用能力按需发现。检索和预算预览不计入使用。',
257
+ 'capabilities.reloadObservation': "重新读取统计与预览",
258
+ 'capabilities.observationScope': "工作区:{workspace} · 观察会话:{session}",
259
+ 'capabilities.usageEvidenceHint': "使用数 / 实际可用会话家族数。重复调用不重复计数;工作区优先,全局只作冷启动参考。关闭统计不会删除已有记录。",
260
+ 'capabilities.previewHint': "按当前配置、此会话的可用能力和真实统计重新计算。预览不会改变已有会话;总量包含共享依赖和标题,单项大小仅计接口正文。恢复和输出节选预算在实际压缩或返回结果时使用,不预估未来内容。",
261
+ 'capabilities.workspaceCoverage': "工作区 使用 / 样本",
262
+ 'capabilities.globalCoverage': "全局 使用 / 样本",
263
+ 'capabilities.contractSize': "接口正文大小",
264
+ 'capabilities.directoryUsage': "导航说明:{bytes} / {budget} UTF-8 bytes",
265
+ 'capabilities.statStatus.unavailable': "统计不可用",
266
+ 'capabilities.statStatus.no-samples': '暂无样本',
267
+ 'capabilities.statStatus.pending-settlement': '已有记录待结算',
268
+ 'capabilities.statStatus.incomplete-window': "窗口证据不完整",
269
+ 'capabilities.statStatus.capacity-exceeded': "统计容量已超限",
270
+ 'capabilities.savedConfigurations': '已保存配置',
271
+ 'capabilities.configurationsHint': "保存与应用用于新会话;已有会话需明确刷新。导入仅加入配置库。",
272
+ 'capabilities.configurationName': "配置名称",
273
+ 'capabilities.dialogDone': '完成',
274
+ 'capabilities.closeDialog': '关闭',
275
+ 'capabilities.libraryActions': '配置库操作',
276
+ 'capabilities.profileActions': '此配置操作',
277
+ 'capabilities.saveConfiguration': '保存当前设置',
278
+ 'capabilities.chooseConfiguration': "选择已保存配置",
279
+ 'capabilities.applyConfiguration': '应用到保存设置',
280
+ 'capabilities.renameConfiguration': "重命名",
281
+ 'capabilities.deleteConfiguration': "删除配置",
282
+ 'capabilities.exportConfiguration': "导出所选配置",
283
+ 'capabilities.exportConfigurations': "导出全部配置",
284
+ 'capabilities.importConfigurations': '导入',
285
+ 'capabilities.configurationSaved': "配置操作已完成;已有会话保持原方案。",
286
+ 'capabilities.configurationTooLarge': "导入文件超过 2 MB。",
287
+ 'capabilities.configurationMatches': "当前设置与此配置一致。",
288
+ 'capabilities.configurationDifferent': "当前设置与此配置不同。",
289
+ 'capabilities.copyFromSession': "从会话复制配置",
290
+ 'capabilities.copySessionHint': "读取会话开始或最近刷新时冻结的设置并命名保存;不复制使用统计、变量、消息或执行状态。",
291
+ 'capabilities.saveSessionConfiguration': "保存该会话的配置",
292
+ 'capabilities.frozenHint': "以下是该会话正在生效的冻结结果,不是可切换的命名配置。",
293
+
294
+ 'capabilities.reason.manual-override': '手动选择',
295
+ 'capabilities.serverHint': 'MCP 可按整台 server 关闭,也可单独配置其工具;关闭 server 会覆盖子项,重新开启后保留子项设置。',
296
+ 'capabilities.serverToggle': '启用 MCP server {name}',
297
+ 'capabilities.serverOff': '已关闭',
298
+ 'capabilities.serverOn': '已启用',
299
+ 'capabilities.serverDisabledHint': '此 MCP server 已保存为关闭。其工具和资源将随新会话或主动刷新一起关闭;子项设置保留。',
300
+ 'capabilities.reason.mcp-server-disabled': 'MCP server 已关闭',
301
+ 'capabilities.reason.baseline-not-selected': '未加入常用基线',
302
+ 'capabilities.reason.baseline': '常用基线',
303
+ 'capabilities.reason.coverage-below-threshold': '使用覆盖率低于阈值',
304
+ 'capabilities.reason.statistical-coverage': '使用覆盖率达到阈值',
305
+ 'capabilities.reason.contract-budget': '完整说明预算不足',
306
+ 'capabilities.reason.management-disabled': '沿用宿主能力配置',
307
+ 'capabilities.reason.statistics-disabled': '使用统计已关闭',
308
+ 'capabilities.reason.statistics-settings-invalid': '统计设置无效',
309
+ 'capabilities.reason.statistics-data-invalid': '统计数据不可用',
310
+ 'capabilities.reason.statistics-unavailable': '统计样本不足或不可用',
311
+ 'capabilities.reason.workspace': '工作区统计',
312
+ 'capabilities.reason.global': '全局统计参考',
313
+ 'capabilities.host': '沿用 DSH',
314
+ 'capabilities.policy.inheritRule': '不单独设置',
315
+ 'capabilities.policy.availabilityFilter': '已保存的可用性',
316
+ 'capabilities.policy.disclosureFilter': '已保存的说明方式',
317
+ 'capabilities.policy.frozenSource': '冻结来源的规则结果',
318
+ 'capabilities.policy.effectiveDimensions': '已生效的维度与来源',
319
+ 'capabilities.sort.availabilityRule': '可用性规则',
320
+ 'capabilities.sort.disclosureRule': '说明规则',
321
+ "capabilities.adaptive": "按依据分配",
322
+ "capabilities.policy.rules": "可用性与说明规则",
323
+ "capabilities.policy.precedence": "默认 → 类别 → MCP 来源 → 单项,分别决定启停和说明;MCP 来源停用优先,保留子项偏好。",
324
+ "capabilities.policy.default": "默认规则",
325
+ "capabilities.policy.categories": "类别规则",
326
+ "capabilities.policy.availability": "可用性",
327
+ "capabilities.policy.disclosure": "说明方式",
328
+ "capabilities.policy.availabilityFor": "{name} 的可用性",
329
+ "capabilities.policy.allocate.baseline": "使用常用集分配说明",
330
+ "capabilities.policy.allocate.statistics": "使用统计分配说明",
331
+ "capabilities.policy.allocate.budget": "用预算约束按依据分配的说明",
332
+ "capabilities.policy.adaptiveHint": "仅「按依据分配」使用上述依据。采集统计独立设置;完整说明不会被预算降级,停用不会丢失说明偏好。",
333
+ "capabilities.policy.resolved": "规则结果:{availability} · {disclosure}({source})",
334
+ "capabilities.policy.category.tool": "Tools",
335
+ "capabilities.policy.category.skill": "Skills",
336
+ "capabilities.policy.category.resource": "MCP 资源与模板",
337
+ 'capabilities.policy.category.resource-template': 'MCP 资源模板',
338
+ 'capabilities.policy.category.task': '任务能力',
339
+ "capabilities.reason.host-disclosure": "沿用宿主说明",
340
+ "capabilities.reason.availability-rule": "可用性规则",
341
+ "capabilities.reason.disclosure-rule": "说明规则",
342
+ 'capabilities.previousSource': '先前来源(当前未列出)',
343
+ 'capabilities.management': '能力配置',
344
+ 'capabilities.foundation': '基础执行环境',
345
+ 'capabilities.foundationHint': '不受能力管理控制',
346
+ 'capabilities.types': '能力类型',
347
+ 'capabilities.type.all': '全部',
348
+ 'capabilities.type.tool': 'Tools',
349
+ 'capabilities.type.skill': 'Skills',
350
+ 'capabilities.type.resource': 'MCP',
351
+ 'capabilities.type.server': 'MCP 来源',
352
+ 'capabilities.type.other': '其它 / 待确认',
353
+ 'capabilities.sort': '排序',
354
+ 'capabilities.sort.name': '名称',
355
+ 'capabilities.sort.id': '精确 ID',
356
+ 'capabilities.sort.strategy': '手动策略',
357
+ 'capabilities.sort.common': '常用优先',
358
+ 'capabilities.sortCycle': '依次按升序、降序排列,再恢复默认顺序',
359
+ 'capabilities.ascending': '升序排列',
360
+ 'capabilities.descending': '降序排列',
361
+ 'capabilities.filters': '筛选({count})',
362
+ 'capabilities.sourceFilter': '能力来源',
363
+ 'capabilities.strategyFilter': '手动策略',
364
+ 'capabilities.allSources': '全部来源',
365
+ 'capabilities.allStrategies': '全部策略',
366
+ 'capabilities.onlyCommon': '仅常用',
367
+ 'capabilities.availabilityFilter': '可用状态',
368
+ 'capabilities.availability.all': '全部状态',
369
+ 'capabilities.availability.available': '当前可用',
370
+ 'capabilities.availability.unavailable': '当前不可用',
371
+ 'capabilities.availability.unknown': '尚未确认',
372
+ 'capabilities.clear': '清除筛选',
373
+ 'capabilities.results': '显示 {count} / {total} 项',
374
+ 'capabilities.reloadCatalog': '重新读取清单',
375
+ 'capabilities.group.tool': '基础工具 · DSH 工具表面',
376
+ 'capabilities.group.mcp-tool': '扩展工具 · MCP',
377
+ 'capabilities.group.skill': 'Skills · 指令技能',
378
+ 'capabilities.group.resource': 'MCP 资源与模板',
379
+ 'capabilities.group.other': '其它能力 / 类型待确认',
380
+ 'capabilities.group.unavailable': '当前不可用 · 保留配置',
381
+ 'capabilities.source.host': 'DSH 工具',
382
+ 'capabilities.source.mcp': 'MCP',
383
+ 'capabilities.source.unknown': '来源未确认',
384
+ 'capabilities.source.project-dsh': '项目技能(.dsh)',
385
+ 'capabilities.source.project-agents': '项目技能(.agents)',
386
+ 'capabilities.source.user-dsh': '用户技能(.dsh)',
387
+ 'capabilities.source.user-agents': '用户技能(.agents)',
388
+ 'capabilities.source.runtime': '运行时技能',
389
+ 'capabilities.source.bundled': '内置技能',
390
+ 'capabilities.source.custom': '自定义技能',
391
+ 'capabilities.source.other-skill': '其它技能来源',
392
+ 'capabilities.commonBaseline': '常用基线',
393
+ 'capabilities.details': '能力详情',
394
+ 'capabilities.inBaseline': '已加入',
395
+ 'capabilities.notInBaseline': '未加入',
396
+ 'capabilities.savedStrategy': '已保存策略',
397
+ 'capabilities.restoreAutomatic': '恢复自动',
398
+ 'capabilities.closedBaseline': '关闭选择优先;保留的常用基线暂不参与分配。',
399
+ 'capabilities.skillDisclosure': 'Skill 的完整说明仅提供目录描述,正文在实际使用时加载。',
400
+ 'capabilities.invocation.both': '模型可以加载正文,用户也可以通过 /{name} 调用。',
401
+ 'capabilities.invocation.model': '仅允许模型加载正文;此 Skill 不提供用户斜杠调用。',
402
+ 'capabilities.invocation.user': '仅允许用户通过 /{name} 调用;模型不能使用 tools.skill 加载它。',
403
+ 'capabilities.invocation.varies': '此 Skill 的调用资格随会话而异;请在目标会话中确认模型加载和用户斜杠调用是否可用。',
404
+ 'capabilities.catalogDescription': '能力说明',
405
+ 'capabilities.removeSaved': '移除已保存配置',
406
+ 'capabilities.currentSession': '所选会话方案',
407
+ 'capabilities.sessionSelector': '查看会话',
408
+ 'capabilities.notInSession': '该会话方案未包含此能力',
409
+ 'capabilities.baselineHint': '统计不可用时,常用基线优先提供完整说明;单项手动选择始终优先。',
410
+ 'capabilities.managementOff': '能力管理已关闭;手动配置可继续整理,已有会话可主动刷新以同步关闭配置。',
411
+ 'capabilities.applyGroup': '应用会话能力设置',
412
+ 'settings.toolsMenu': 'PTC Plus 工具',
413
+ 'capabilities.targetSession': '观察或刷新目标会话',
414
+ 'capabilities.chooseSession': '选择目标会话',
415
+ 'capabilities.applySession': '刷新会话能力',
416
+ 'capabilities.refreshing': '正在刷新…',
417
+ 'capabilities.cancelRefresh': '取消刷新',
418
+ 'capabilities.refreshCancelled': '已取消等待;请重新读取方案确认实际状态。',
419
+ 'capabilities.refreshFailed': '刷新失败:{error}',
420
+ 'capabilities.refreshUnavailable': '当前会话的刷新命令不可用。',
421
+ 'capabilities.refreshAcknowledged': 'DSH 已确认刷新操作。',
422
+ 'capabilities.settingsTabs': '能力设置页签',
423
+ 'capabilities.tab.manual': '能力配置',
424
+ 'capabilities.tab.statistics': '使用统计',
425
+ 'capabilities.tab.budgets': '提示设置',
426
+ 'capabilities.tab.plans': '配置方案',
427
+ 'capabilities.savedStatisticsInvalid': '已保存的统计设置不可用。下方显示建议值;修改后保存,手动能力选择仍有效。',
428
+ 'capabilities.catalogUnavailable': '能力清单读取失败:{error}。已保存的选择仍可编辑。',
429
+ 'capabilities.search': '搜索能力(名称、ID 或来源)',
430
+ 'capabilities.catalogEmpty': '尚无可用能力清单。打开一个 PTC 会话后重新读取。',
431
+ 'capabilities.noMatches': '没有匹配的能力',
432
+ 'capabilities.notAvailable': '当前清单未列出,保留已保存选择',
433
+ 'capabilities.common': '常用',
434
+ 'capabilities.baselineFor': '设为常用:{name}',
435
+ 'capabilities.disclosureFor': '披露方式:{name}',
436
+ 'capabilities.automatic': '跟随自动',
437
+ 'capabilities.full': '完整提供',
438
+ 'capabilities.on-demand': '按需提供',
439
+ 'capabilities.closed': '关闭能力',
440
+ 'capabilities.statisticsEnabled': '使用统计',
441
+ 'capabilities.windowSize': '样本窗口(会话家族)',
442
+ 'capabilities.minimumSamples': '最低样本数',
443
+ 'capabilities.fullThreshold': '完整披露阈值(%)',
444
+ 'capabilities.invalidStatistics': '窗口与最低样本数必须为正整数,最低样本数不能超过窗口;阈值须为 0–100%。',
445
+ 'capabilities.sessions': '当前会话能力方案',
446
+ 'capabilities.reload': '重新读取方案',
447
+ 'capabilities.refreshHint': '能力设置供新会话使用;已有会话执行 /capabilities refresh 后同步。',
448
+ 'capabilities.unavailable': '方案读取失败:{error}',
449
+ 'capabilities.empty': '尚无已准备的会话方案',
450
+ 'capabilities.pending': '保存配置待刷新',
451
+ 'capabilities.current': '使用已冻结方案',
452
+ 'capabilities.budget': '完整说明 {bytes} 字节,显式超额 {overage} 字节',
453
+ 'capabilities.member': '能力',
454
+ 'capabilities.selection': '披露',
455
+ 'capabilities.reason': '选择与统计依据',
456
+ 'capabilities.coverage': '使用家族 / 可用家族',
9
457
  'console.session': '会话绑定',
10
458
  'console.global': '全局绑定',
11
459
  'console.definition': '定义',
@@ -26,11 +474,15 @@ const CHROME_COPY = Object.freeze({
26
474
  'settings.menuEntry': 'PTC Plus 设置',
27
475
  'settings.dialogTitle': 'PTC Plus 设置',
28
476
  'settings.close': '关闭 PTC Plus 设置',
477
+ 'settings.navigation': '设置分区',
478
+ 'settings.navigationTitle': 'PTC Plus',
479
+ 'settings.navigationHint': '连续计算、全局绑定与会话体验。',
480
+ 'settings.experimental': '实验性',
29
481
  'settings.pathSettings': '设置 → 插件配置 → PTC Plus',
30
482
  'settings.pathPlugins': '侧栏 Plugins → dsh-ptc-plus → 行 ptc-plus → Configure',
31
483
  'bindings.entry': '条目配置',
32
484
  'bindings.close': '关闭全局绑定工作台',
33
- 'card.description': 'PTC 模式的会话级 TypeScript REPL。',
485
+ 'card.description': 'PTC 模式的会话级 TypeScript REPL',
34
486
  'status.enabled': '已启用',
35
487
  'status.disabled': '已停用',
36
488
  'action.expand': '展开 PTC Plus 设置',
@@ -41,9 +493,9 @@ const CHROME_COPY = Object.freeze({
41
493
  'bindingPolicy.protected': '启用名称保护',
42
494
  'bindingPolicy.migrationDescription': '当前按下方旧版开关执行。选择统一策略后停用旧版开关,并对后续代码生效。',
43
495
  'state.unavailable': '当前 DSH 实例未提供设置服务',
44
- 'footer.live': '设置会在修改后立即生效',
496
+ 'footer.live': '设置已保存;能力方案由新会话或主动刷新采用',
45
497
  'footer.readOnly': '当前设置为只读',
46
- 'status.applied': '设置已立即生效',
498
+ 'status.applied': '设置已保存',
47
499
  'status.conflict': '设置未生效,请检查设置冲突',
48
500
  'status.failed': '设置失败:{error}',
49
501
  'bindings.title': '全局用户绑定',
@@ -105,7 +557,6 @@ const CHROME_COPY = Object.freeze({
105
557
  'bindings.open': '全局绑定',
106
558
  'bindings.openHint': 'PTC Plus · 全局绑定与设置',
107
559
  'bindings.draftHint': 'PTC Plus 插件 · 绑定草稿待处理,点击查看',
108
- 'bindings.quickHeading': '全局用户绑定 · 对所有会话生效',
109
560
  'bindings.quickEnabled': '已启用({count})',
110
561
  'bindings.quickDisabled': '停用({count})',
111
562
  'bindings.quickNoEnabled': '暂无启用绑定',
@@ -166,12 +617,17 @@ const CHROME_COPY = Object.freeze({
166
617
  'memory.globalUnavailable': '无法读取全局默认绑定',
167
618
  'tool.code': '执行',
168
619
  'tool.codeEdit': '修正执行',
620
+ 'tool.preview': '执行预览',
621
+ 'tool.editPreview': '修正执行预览',
622
+ 'tool.previewHint': '点击执行行查看完整内容',
623
+ 'tool.previewBounded': '部分内容',
169
624
  'tool.running': '正在运行',
170
625
  'tool.completed': '执行完成',
171
626
  'tool.failed': '执行失败',
172
627
  'tool.stopped': '执行已中断',
173
628
  'tool.source': '源码',
174
629
  'tool.result': '结果',
630
+ 'tool.descriptionGenerated': '自动摘要:模型未提供摘要,由插件生成',
175
631
  'tool.copy': '复制代码',
176
632
  'tool.copied': '已复制',
177
633
  'tool.inspect': '检查调用',
@@ -182,6 +638,454 @@ const CHROME_COPY = Object.freeze({
182
638
  'feature.stateDeleted': '删除 REPL 状态',
183
639
  }),
184
640
  en: Object.freeze({
641
+ "capabilities.combination.saved": "New session settings",
642
+ "capabilities.combination.rules": "Capability configuration",
643
+ "capabilities.combination.description": "Initial prompt",
644
+ "capabilities.combination.statistics": "Usage statistics",
645
+ "capabilities.combination.recovery": "Prompt recovery",
646
+ "capabilities.combination.preview": "Output excerpts",
647
+ "capabilities.combination.state.selected": "Selected",
648
+ "capabilities.combination.state.unselected": "Not selected",
649
+ "capabilities.combination.state.paused": "Paused",
650
+ "capabilities.combination.state.host": "Use DSH",
651
+ "capabilities.combination.state.unknown": "Unknown",
652
+ "capabilities.combination.separator": ", ",
653
+ "capabilities.combination.selectedEffect": "New sessions will use: {features}. Other behavior stays with DSH.",
654
+ "capabilities.combination.rulesOnly": "Only capability configuration and initial prompts are selected; no usage collection, description recovery or result/log limits.",
655
+ "capabilities.combination.hostEffect": "All behavior in this group stays with DSH.",
656
+ "capabilities.combination.pausedEffect": "This group is paused. Turning it on restores these choices.",
657
+ "capabilities.combination.unknownSettings": "Saved settings have not been read.",
658
+ "capabilities.combination.observed": "Session plan comparison",
659
+ "capabilities.combination.chooseTarget": "Select a session to inspect its recorded plan. Saving does not change existing sessions.",
660
+ "capabilities.combination.target": "Compared session: {session}",
661
+ "capabilities.combination.lastRead": "Last observation",
662
+ "capabilities.combination.publication.accepted": "Plan notification recorded",
663
+ "capabilities.combination.publication.pending": "Plan notification awaiting acceptance",
664
+ "capabilities.combination.publication.not-required": "No extra notification required for this plan",
665
+ "capabilities.combination.publication.unknown": "Notification status unknown",
666
+ "capabilities.combination.historical": "This historical plan has no group choice; its original generation applies.",
667
+ "capabilities.combination.stale": "Only the last observation is retained; differences from saved settings are unconfirmed.",
668
+ "capabilities.combination.readFailed": "Read failed: {error}. Read again to confirm.",
669
+ "capabilities.combination.differenceUnknown": "Whether this matches saved settings is unknown.",
670
+ "capabilities.combination.different": "Different from saved settings; this session retains its earlier plan.",
671
+ "capabilities.combination.same": "The frozen source matches saved settings; temporary overrides are retained separately.",
672
+ "capabilities.combination.overrides": "This session has temporary overrides. Inspect the member plan for its rules.",
673
+ "capabilities.combination.inspectPlan": "Inspect the member plan",
674
+ "capabilities.combination.noPlan": "No frozen plan has been observed for this session. Saved settings cannot establish it.",
675
+ "capabilities.effect.paused": "Settings are retained and do not apply while the group is paused.",
676
+ "capabilities.effect.rulesOff": "Capability configuration stays with DSH. Collection, recovery and previews remain independent choices.",
677
+ "capabilities.effect.sourceClosed": "A source closure overrides member enablement and retains member preferences.",
678
+ "capabilities.effect.closed": "This capability is selected for closure; its disclosure preference is retained.",
679
+ "capabilities.effect.disclosure.host": "Use DSH descriptions; allocation criteria are retained for later use.",
680
+ "capabilities.effect.disclosure.full": "Provide complete descriptions; a budget cannot truncate or downgrade them.",
681
+ "capabilities.effect.disclosure.on-demand": "Still discoverable and usable; read complete descriptions when needed. This does not close capabilities.",
682
+ "capabilities.effect.disclosure.adaptive": "Allocate descriptions for available capabilities using selected criteria; never automatically close them.",
683
+ "capabilities.effect.allocationActive": "Used only for available capabilities whose final disclosure choice is adaptive.",
684
+ "capabilities.effect.allocationRetained": "No adaptive disclosure is selected; these criteria are retained for later use.",
685
+ "capabilities.effect.historicalStatistics": "Valid historical statistics remain usable after collection stops. Missing valid samples do not mean zero usage.",
686
+ "capabilities.effect.conditions": "When these settings apply",
687
+ "capabilities.effect.allocationLimits": "The final member disclosure choice determines allocation. Source closure wins; explicit full contracts cannot be truncated or downgraded by a budget.",
688
+ "capabilities.effect.recoveryOn": "Select description recovery after compaction; availability and disclosure allocation are unchanged.",
689
+ "capabilities.effect.recoveryOff": "Do not restore recent API descriptions; required environment notices still follow their existing path.",
690
+ "capabilities.effect.previewOn": "Limit presentation in model context only; complete values and execution outcomes are unchanged.",
691
+ "capabilities.effect.previewOff": "DSH owns result and log presentation.",
692
+ "capabilities.effect.collectionOn": "Record actual usage; this does not select statistics-based allocation.",
693
+ "capabilities.effect.collectionOff": "Stop collecting new records; retained statistics remain available as allocation evidence.",
694
+ "capabilities.effect.statisticsIndependent": "Collection and allocation are independent. Select statistics use under Prompt settings → Initial prompt.",
695
+ 'capabilities.sourceRules': 'Source rules',
696
+ 'capabilities.filterAction': 'Filter',
697
+ 'capabilities.batchSettings': 'Batch settings',
698
+ 'capabilities.batch.cancel': 'Cancel',
699
+ 'capabilities.inheritedRules': 'Inherited rules',
700
+ 'capabilities.inheritedRulesHelp': 'Set persistent defaults, category and MCP source rules. Changes save immediately and are independent of current filters. Item preferences override each dimension; MCP source closure takes precedence.',
701
+ 'capabilities.batch.targets': 'One-time change to {count} catalog capabilities',
702
+ 'capabilities.batch.excluded': 'Excluded {count} unavailable or unconfirmed entries.',
703
+ 'capabilities.batch.targetList': 'Targets for this batch',
704
+ 'capabilities.batch.empty': 'There are no confirmed catalog capabilities in the current filters.',
705
+ 'capabilities.batch.availability': 'Batch availability',
706
+ 'capabilities.batch.disclosure': 'Batch disclosure',
707
+ 'capabilities.batch.keep': 'Keep unchanged',
708
+ 'capabilities.batch.effect': 'Confirm saves these item preferences once, preserving unchanged dimensions. New sessions use them; existing sessions require explicit refresh.',
709
+ 'capabilities.batch.sourceClosure': 'Enabling an item does not reopen a disabled MCP source.',
710
+ 'capabilities.batch.changedTargets': '{count} targets are absent from the latest complete catalog or unconfirmed. Cancel and review the targets again.',
711
+ 'capabilities.batch.failed': 'Save was not confirmed. Targets and choices are retained; confirm again to retry.',
712
+ 'capabilities.batch.confirm': 'Confirm {count} changes',
713
+ 'capabilities.batch.all': 'Current complete capability catalog',
714
+ 'capabilities.batch.selected': 'Selected {count} capabilities',
715
+ 'capabilities.batch.stage': 'Stage changes ({count})',
716
+ 'capabilities.batch.sessionStage': 'Confirm stages these changes; the footer decides whether they apply to this session or become global defaults.',
717
+ 'capabilities.batch.sessionInherit': 'No change (clears this session’s change)',
718
+ 'capabilities.selectForBatch': 'Select {name}',
719
+ 'capabilities.selectAllVisible': 'Select all visible results',
720
+ 'capabilities.selectionCount': '{count} selected',
721
+ 'capabilities.typesColumn': 'Type',
722
+ 'capabilities.sourceColumn': 'Source',
723
+ 'capabilities.enabledColumn': 'Enabled',
724
+ 'capabilities.contextColumn': 'Context',
725
+ 'capabilities.rowState.unknown': 'Unconfirmed',
726
+ 'capabilities.rowState.unavailable': 'Unavailable',
727
+ 'capabilities.rowState.source-closed': 'Source disabled',
728
+ 'capabilities.rowState.unapplied': 'Not applied',
729
+ 'capabilities.rowState.enabled': 'Enabled',
730
+ 'capabilities.rowState.closed': 'Disabled',
731
+ 'capabilities.editContextFor': 'Edit context settings: {name}',
732
+ 'capabilities.closeDetails': 'Close details',
733
+ 'capabilities.contextHelp': 'Availability and context are saved separately. Changing disclosure does not enable or disable a capability.',
734
+ 'capabilities.coverageScope': 'Statistics scope',
735
+ 'capabilities.scope.workspace': 'Current workspace',
736
+ 'capabilities.scope.global': 'All workspaces',
737
+ 'capabilities.usedFamilies': 'Used families',
738
+ 'capabilities.eligibleFamilies': 'Eligible families',
739
+ 'capabilities.coverageColumn': 'Coverage',
740
+ 'capabilities.coverageFor': 'Coverage for {name}',
741
+ 'capabilities.familyHint': 'A family counts one main session and its subagents together; only settled families count toward statistics. Existing records remain available when collection is off.',
742
+ 'capabilities.contextNavigation': 'Context features',
743
+ 'capabilities.context.description': 'Initial prompt',
744
+ 'capabilities.context.recovery': 'Prompt recovery',
745
+ 'capabilities.context.preview': 'Output excerpts',
746
+ 'capabilities.context.custom': 'Custom',
747
+ 'capabilities.context.summary.description': 'Default: {disclosure}',
748
+ 'capabilities.context.summary.recovery': 'Recovery limit: {bytes} UTF-8 bytes',
749
+ 'capabilities.context.summary.preview': 'Output limit: about {tokens} tokens',
750
+ 'capabilities.context.summary.noCriteria': 'No allocation criteria selected',
751
+ 'capabilities.paused': 'Paused',
752
+ 'capabilities.groupPaused': 'Off · settings retained',
753
+ 'capabilities.allocationTitle': 'Allocation criteria',
754
+ 'capabilities.allocation.baseline': 'Common set',
755
+ 'capabilities.allocation.statistics': 'Usage statistics',
756
+ 'capabilities.allocation.budget': 'Budget limit',
757
+ 'capabilities.allocationHint': 'Only affects adaptive disclosure. Explicit full disclosure stays complete.',
758
+ 'capabilities.quotaSettings': 'Limits',
759
+ 'capabilities.descriptionInactive': 'Enable Capability configuration to apply disclosure settings.',
760
+ 'capabilities.recoveryHelp': 'After compaction, restore recently used API descriptions that are still valid. Skill bodies and the session capability plan are unaffected.',
761
+ 'capabilities.recoveryEnabled': 'Prompt recovery',
762
+ 'capabilities.previewHelp': 'Limit result and log length in model context. Omitted content remains readable; complete results and execution status are preserved.',
763
+ 'capabilities.previewEnabled': 'Output excerpts',
764
+ 'capabilities.estimatedTokens': '{count} estimated tokens',
765
+ 'capabilities.descriptionDependency': 'Initial prompts use the description rules in Capability configuration, where the common set is edited. Prompt recovery, output excerpts and usage statistics are independent choices.',
766
+ 'capabilities.descriptionHelp': 'Choose first-turn capability prompts for new sessions: full descriptions, an on-demand directory, or allocation from evidence. Individual settings take precedence.',
767
+ 'capabilities.defaultDisclosure': 'Default disclosure',
768
+ 'capabilities.savedForNew': 'Saved · used by new sessions',
769
+ 'capabilities.title.manual': 'Capability configuration',
770
+ 'capabilities.title.budgets': 'Prompt settings',
771
+ 'capabilities.title.statistics': 'Usage statistics',
772
+ 'capabilities.title.plans': 'Configurations',
773
+ 'capabilities.existingSessions': 'Compare an existing session',
774
+ 'capabilities.managementHelp': 'Enable to use the settings below for availability and model descriptions. When off, DSH settings apply.',
775
+ 'capabilities.noConfigurations': 'No saved configurations',
776
+ 'capabilities.libraryMore': 'More library actions',
777
+ 'capabilities.profileMore': 'More configuration actions',
778
+ 'capabilities.profileDetails': 'Rules and limits',
779
+ 'capabilities.confirmSave': 'Save',
780
+ 'capabilities.confirmRename': 'Confirm rename',
781
+ 'capabilities.sameNameHint': 'An existing name replaces that configuration.',
782
+ 'capabilities.savedRules': 'Custom rules',
783
+ 'capabilities.ruleCount': '{count} rules',
784
+ 'capabilities.statisticsSettings': 'Statistics settings',
785
+ 'capabilities.configurationUnavailable': "Configuration is not writable; changes were not saved.",
786
+ 'capabilities.observedUsage': "Observed usage",
787
+ 'capabilities.budgetPreview': "Current allocation preview",
788
+ 'capabilities.observationUnavailable': "Capability preview is unavailable; reload the observation.",
789
+ 'capabilities.selectObservation': "Select an active PTC session as the observation anchor; statistics and budget preview follow its capability inventory, and the scope switches between its workspace and all workspaces.",
790
+ 'capabilities.quick.title': 'Session capability controls',
791
+ 'capabilities.quick.modalTitle': 'Manage session capabilities',
792
+ 'capabilities.quick.sessionIdentity': 'Current session: {session}',
793
+ 'capabilities.quick.state': 'Current state',
794
+ 'capabilities.quick.allStates': 'All states',
795
+ 'capabilities.quick.changed': 'Pending changes',
796
+ 'capabilities.quick.effective': 'Effective now',
797
+ 'capabilities.quick.temporary': 'Temporary override',
798
+ 'capabilities.quick.globalSaved': 'Global settings',
799
+ 'capabilities.quick.sessionSource': 'Session inheritance',
800
+ 'capabilities.quick.unknown': 'Unknown',
801
+ 'capabilities.quick.choice': 'Selection strategy',
802
+ 'capabilities.quick.members': 'Capabilities',
803
+ 'capabilities.quick.catalogError': 'Could not read capabilities: {error}',
804
+ 'capabilities.quick.changes': '{count} pending changes',
805
+ 'capabilities.quick.applySession': 'Apply to session',
806
+ 'capabilities.quick.applyGlobal': 'Apply to global',
807
+ 'capabilities.quick.noOverride': 'None',
808
+ 'capabilities.quick.inheritSessionOnly': 'Clearing a temporary change applies only to this session. Use Apply to session.',
809
+ 'capabilities.quick.discard': 'Discard changes',
810
+ 'capabilities.quick.applying': 'Applying…',
811
+ 'capabilities.quick.applied': '{count} session capabilities updated.',
812
+ 'capabilities.quick.pendingApplied': '{count} submitted; some take effect at the first accepted model step.',
813
+ 'capabilities.quick.partial': '{count} updated; remaining changes were not applied. {error}',
814
+ 'capabilities.quick.savedOnly': '{count} updated; the global choice was saved, but this session was not updated. Retry this choice. {error}',
815
+ 'capabilities.quick.confirmationUnavailable': 'Could not confirm the current catalog. Reload it and retry.',
816
+ 'capabilities.quick.unknownReceipt': 'Could not confirm the command outcome. Inspect the current state before retrying.',
817
+ 'capabilities.quick.otherScopeChanges': 'Pending in other scope: {count}',
818
+ 'capabilities.quick.serverTools': 'Related capabilities',
819
+ 'capabilities.quick.backToList': 'Back to capabilities',
820
+ 'capabilities.quick.disabledByServer': 'MCP server {server} is closed; child choices are retained.',
821
+ 'capabilities.quick.pendingServerClose': 'MCP server {server} has a close choice awaiting effect; child choices are retained.',
822
+ 'capabilities.quick.enabled': 'Enabled',
823
+ 'capabilities.quick.pending': 'Pending',
824
+ 'capabilities.quick.temporaryState': '{state} (temporary)',
825
+ 'capabilities.quick.sessionPaused': 'Capabilities and context are paused for this session; the list shows Host defaults. Re-enable them in settings and refresh before changes can apply.',
826
+ 'capabilities.quick.sessionManagementOff': 'Capability management is off for this session; capabilities stay with the Host. Enable it under Capabilities & Context in settings and refresh before changing this session\'s choices.',
827
+ 'capabilities.quick.savedPaused': 'Capabilities and context are off in settings; re-enable them and refresh before changing this session\'s choices.',
828
+ 'capabilities.quick.savedManagementOff': 'Capability management is off in settings; re-enable it and refresh before changing this session\'s choices.',
829
+ 'capabilities.quick.scope': 'Apply to',
830
+ 'capabilities.quick.session': 'This session only',
831
+ 'capabilities.quick.global': 'Save globally and update this session',
832
+ 'capabilities.quick.sessionHint': 'Temporary choices belong to this session; ordinary refresh preserves them.',
833
+ 'capabilities.quick.globalHint': 'Save defaults for new sessions and update this one immediately. Other existing sessions retain their plans.',
834
+ 'capabilities.quick.kind': 'Capability category',
835
+ 'capabilities.quick.all': 'All capabilities',
836
+ 'capabilities.quick.skills': 'Skills',
837
+ 'capabilities.quick.tools': 'Ordinary tools',
838
+ 'capabilities.quick.mcp': 'MCP servers and resources',
839
+ 'capabilities.quick.mcp_tools': 'MCP tools',
840
+ 'capabilities.quick.noChange': 'No change (currently: {state})',
841
+ 'capabilities.quick.undoTemp': 'Undo this session’s change (restores {state})',
842
+ 'capabilities.quick.keepUnchanged': 'No change',
843
+ 'capabilities.quick.undoChange': 'Undo this session’s change',
844
+ 'capabilities.quick.upperRule': 'Let the level above decide',
845
+ 'capabilities.quick.impact': 'Effective in this session: {state} · From: {source}',
846
+ 'capabilities.quick.impactPending': 'Effective in this session: {state} · From: {source} · Pending apply',
847
+ 'capabilities.quick.impactUpper': 'Effective in this session: decided by the level above',
848
+ 'capabilities.quick.impactUpperPending': 'Effective in this session: decided by the level above · Pending apply',
849
+ 'capabilities.quick.originPlan': 'the session plan',
850
+ 'capabilities.quick.originSession': 'this session’s change',
851
+ 'capabilities.action.enable': 'Enable',
852
+ 'capabilities.action.close': 'Close',
853
+ 'capabilities.quick.states': 'Saved: {saved} · Temporary: {temporary} · Effective: {effective}',
854
+ 'capabilities.quick.apply': 'Submit and apply',
855
+ 'capabilities.quick.prefill': 'Fill command draft',
856
+ 'capabilities.card.recorded': 'Session capabilities updated.',
857
+ 'capabilities.card.pending': 'Capabilities prepared; they take effect at the next accepted model step.',
858
+ 'capabilities.card.paused': 'Capabilities and context are off; this session stays with the Host capabilities.',
859
+ 'capabilities.card.off': 'Capability management is off; this session stays with the Host capabilities.',
860
+ 'capabilities.card.saved-only': 'Global settings saved; session update failed. {error}',
861
+ 'capabilities.card.unavailable': 'Session unavailable; changes were not applied.',
862
+ 'capabilities.card.usage': 'Command not executed; check its arguments.',
863
+ 'capabilities.card.catalogCount': '{count} capabilities',
864
+ 'capabilities.card.details': 'Session capability details',
865
+ 'capabilities.card.browse': 'Browse capabilities',
866
+ 'capabilities.card.source': 'View original result',
867
+ 'capabilities.card.running': 'Running',
868
+ 'capabilities.card.completed': 'Completed',
869
+ 'capabilities.card.failed': 'Failed',
870
+ 'capabilities.receipt.title': 'Session capabilities',
871
+ 'capabilities.commandFailed': 'Capability command failed.',
872
+ 'capabilities.receipt.saved-only': 'Global choice saved, but session {session} could not be updated. Inspect its plan and retry. {error}',
873
+ 'capabilities.receipt.recorded': 'Capabilities updated for session {session}.',
874
+ 'capabilities.receipt.pending': 'Capabilities prepared for session {session}; they take effect at its first accepted model step.',
875
+ 'capabilities.receipt.paused': 'Capabilities and context are off; session {session} stays with the Host capabilities.',
876
+ 'capabilities.receipt.off': 'Capability management is off; session {session} stays with the Host capabilities.',
877
+ 'capabilities.receipt.unavailable': 'Select an active PTC session.',
878
+ 'capabilities.receipt.usage': 'Use /capabilities to inspect or /capabilities refresh to apply saved settings.',
879
+ 'bindings.toggleEnabled': 'Enabled “{name}” in saved configuration. The model catalog updates at the next accepted step; worker initialization is not yet established.',
880
+ 'bindings.toggleDisabled': 'Disabled “{name}” in saved configuration. The model catalog withdraws it at the next accepted step; earlier effects are unchanged.',
881
+ 'capabilities.observationGroup': 'Read-only session observation',
882
+ 'capabilities.observationSession': 'Observation session',
883
+ 'capabilities.observationOnly': 'Inspect current-directory statistics and allocation without changing the session plan.',
884
+ 'capabilities.renameTo': 'New configuration name',
885
+ 'capabilities.copyName': 'Copied configuration name',
886
+ 'capabilities.transferConfigurations': 'Import and export',
887
+ 'capabilities.importHint': 'Import adds to the library only. Select and switch to apply; existing sessions require explicit refresh.',
888
+ 'capabilities.coldStartHint': 'Full disclosure supplies complete contracts in the first request. On-demand capabilities remain available through capabilities.search; Skills load their bodies according to declared invocation eligibility. Closed capabilities are not supplied. Without qualified statistics, the common baseline and manual choices still apply; other enabled capabilities remain discoverable on demand. Search and allocation previews do not count as use.',
889
+ 'capabilities.reloadObservation': "Reload statistics and preview",
890
+ 'capabilities.observationScope': "Workspace: {workspace} · Observed session: {session}",
891
+ 'capabilities.usageEvidenceHint': "Uses / eligible session families. Repeated calls count once; workspace evidence takes priority and global evidence supplies cold-start fallback. Disabling collection does not erase existing records.",
892
+ 'capabilities.previewHint': "Recomputed from current settings, this session’s available capabilities and real statistics. Preview does not change existing sessions. Totals include shared dependencies and headings; per-item sizes measure contract bodies only. Recovery and result budgets apply when content exists; future content is not predicted.",
893
+ 'capabilities.workspaceCoverage': "Workspace uses / samples",
894
+ 'capabilities.globalCoverage': "Global uses / samples",
895
+ 'capabilities.contractSize': "Contract body size",
896
+ 'capabilities.directoryUsage': "Navigation: {bytes} / {budget} UTF-8 bytes",
897
+ 'capabilities.statStatus.unavailable': "Statistics unavailable",
898
+ 'capabilities.statStatus.no-samples': 'No samples yet',
899
+ 'capabilities.statStatus.pending-settlement': 'Recorded, awaiting settlement',
900
+ 'capabilities.statStatus.incomplete-window': "Incomplete window evidence",
901
+ 'capabilities.statStatus.capacity-exceeded': "Statistics capacity exceeded",
902
+ 'capabilities.savedConfigurations': "Saved configurations",
903
+ 'capabilities.configurationsHint': "Saved settings apply to new sessions; existing sessions require explicit refresh. Import only adds to the library.",
904
+ 'capabilities.configurationName': "Configuration name",
905
+ 'capabilities.dialogDone': "Done",
906
+ 'capabilities.closeDialog': "Close",
907
+ 'capabilities.libraryActions': "Library actions",
908
+ 'capabilities.profileActions': "Configuration actions",
909
+ 'capabilities.saveConfiguration': "Save current settings",
910
+ 'capabilities.chooseConfiguration': "Choose a saved configuration",
911
+ 'capabilities.applyConfiguration': "Apply to saved settings",
912
+ 'capabilities.renameConfiguration': "Rename",
913
+ 'capabilities.deleteConfiguration': "Delete configuration",
914
+ 'capabilities.exportConfiguration': "Export selected configuration",
915
+ 'capabilities.exportConfigurations': "Export all configurations",
916
+ 'capabilities.importConfigurations': "Import",
917
+ 'capabilities.configurationSaved': "Configuration operation completed; existing session plans remain unchanged.",
918
+ 'capabilities.configurationTooLarge': "Import file exceeds 2 MB.",
919
+ 'capabilities.configurationMatches': "Current settings match this configuration.",
920
+ 'capabilities.configurationDifferent': "Current settings differ from this configuration.",
921
+ 'capabilities.copyFromSession': "Copy configuration from a session",
922
+ 'capabilities.copySessionHint': "Name and save the settings frozen when the session started or was last refreshed. Usage observations, bindings, messages and execution state are not copied.",
923
+ 'capabilities.saveSessionConfiguration': "Save this session’s configuration",
924
+ 'capabilities.frozenHint': "These are the session’s effective frozen results, separate from named configurations.",
925
+
926
+ 'capabilities.reason.manual-override': 'Manual selection',
927
+ 'capabilities.serverHint': 'Disable an entire MCP server or configure its individual tools. Server closure takes precedence; tool preferences are retained when re-enabled.',
928
+ 'capabilities.serverToggle': 'Enable MCP server {name}',
929
+ 'capabilities.serverOff': 'Disabled',
930
+ 'capabilities.serverOn': 'Enabled',
931
+ 'capabilities.serverDisabledHint': 'This server is saved as disabled. Its tools and resources close in new or explicitly refreshed sessions; child preferences are retained.',
932
+ 'capabilities.reason.mcp-server-disabled': 'MCP server disabled',
933
+ 'capabilities.reason.baseline-not-selected': 'Not in common baseline',
934
+ 'capabilities.reason.baseline': 'Common baseline',
935
+ 'capabilities.reason.coverage-below-threshold': 'Usage coverage below threshold',
936
+ 'capabilities.reason.statistical-coverage': 'Usage coverage meets threshold',
937
+ 'capabilities.reason.contract-budget': 'Full contract budget exhausted',
938
+ 'capabilities.reason.management-disabled': 'Host capability defaults',
939
+ 'capabilities.reason.statistics-disabled': 'Usage statistics disabled',
940
+ 'capabilities.reason.statistics-settings-invalid': 'Invalid statistics settings',
941
+ 'capabilities.reason.statistics-data-invalid': 'Statistics data unavailable',
942
+ 'capabilities.reason.statistics-unavailable': 'Insufficient or unavailable statistics',
943
+ 'capabilities.reason.workspace': 'Workspace statistics',
944
+ 'capabilities.reason.global': 'Global statistics fallback',
945
+ 'capabilities.host': 'Host defaults',
946
+ 'capabilities.policy.inheritRule': 'Not set here',
947
+ 'capabilities.policy.availabilityFilter': 'Saved availability',
948
+ 'capabilities.policy.disclosureFilter': 'Saved disclosure',
949
+ 'capabilities.policy.frozenSource': 'Frozen source rule result',
950
+ 'capabilities.policy.effectiveDimensions': 'Effective dimensions and sources',
951
+ 'capabilities.sort.availabilityRule': 'Availability rule',
952
+ 'capabilities.sort.disclosureRule': 'Disclosure rule',
953
+ "capabilities.adaptive": "Allocate from evidence",
954
+ "capabilities.policy.rules": "Availability and disclosure rules",
955
+ "capabilities.policy.precedence": "Default → category → MCP source → item, independently for each dimension. MCP source closure wins and preserves child preferences.",
956
+ "capabilities.policy.default": "Default rule",
957
+ "capabilities.policy.categories": "Category rules",
958
+ "capabilities.policy.availability": "Availability",
959
+ "capabilities.policy.disclosure": "Disclosure",
960
+ "capabilities.policy.availabilityFor": "Availability for {name}",
961
+ "capabilities.policy.allocate.baseline": "Allocate descriptions from the common set",
962
+ "capabilities.policy.allocate.statistics": "Allocate descriptions from usage evidence",
963
+ "capabilities.policy.allocate.budget": "Bound evidence-based allocation by the contract budget",
964
+ "capabilities.policy.adaptiveHint": "Only evidence-based choices consume these inputs. Collection is separate; budgets never demote full contracts, and closing preserves disclosure preferences.",
965
+ "capabilities.policy.resolved": "Rule result: {availability} · {disclosure} ({source})",
966
+ "capabilities.policy.category.tool": "Tools",
967
+ "capabilities.policy.category.skill": "Skills",
968
+ "capabilities.policy.category.resource": "MCP resources and templates",
969
+ 'capabilities.policy.category.resource-template': 'MCP resource templates',
970
+ 'capabilities.policy.category.task': 'Task capabilities',
971
+ "capabilities.reason.host-disclosure": "Host disclosure",
972
+ "capabilities.reason.availability-rule": "Availability rule",
973
+ "capabilities.reason.disclosure-rule": "Disclosure rule",
974
+ 'capabilities.previousSource': 'Previous source (not currently listed)',
975
+ 'capabilities.management': 'Capability configuration',
976
+ 'capabilities.foundation': 'Core execution environment',
977
+ 'capabilities.foundationHint': 'Outside capability management',
978
+ 'capabilities.types': 'Capability types',
979
+ 'capabilities.type.all': 'All',
980
+ 'capabilities.type.tool': 'Tools',
981
+ 'capabilities.type.skill': 'Skills',
982
+ 'capabilities.type.resource': 'MCP',
983
+ 'capabilities.type.server': 'MCP source',
984
+ 'capabilities.type.other': 'Other / Unconfirmed',
985
+ 'capabilities.sort': 'Sort by',
986
+ 'capabilities.sort.name': 'Name',
987
+ 'capabilities.sort.id': 'Exact ID',
988
+ 'capabilities.sort.strategy': 'Manual strategy',
989
+ 'capabilities.sort.common': 'Common first',
990
+ 'capabilities.sortCycle': 'Sort ascending, descending, then restore the default order',
991
+ 'capabilities.ascending': 'Sort ascending',
992
+ 'capabilities.descending': 'Sort descending',
993
+ 'capabilities.filters': 'Filters ({count})',
994
+ 'capabilities.sourceFilter': 'Capability source',
995
+ 'capabilities.strategyFilter': 'Manual strategy',
996
+ 'capabilities.allSources': 'All sources',
997
+ 'capabilities.allStrategies': 'All strategies',
998
+ 'capabilities.onlyCommon': 'Common only',
999
+ 'capabilities.availabilityFilter': 'Availability',
1000
+ 'capabilities.availability.all': 'All states',
1001
+ 'capabilities.availability.available': 'Currently available',
1002
+ 'capabilities.availability.unavailable': 'Currently unavailable',
1003
+ 'capabilities.availability.unknown': 'Unconfirmed',
1004
+ 'capabilities.clear': 'Clear filters',
1005
+ 'capabilities.results': 'Showing {count} / {total}',
1006
+ 'capabilities.reloadCatalog': 'Reload catalog',
1007
+ 'capabilities.group.tool': 'Base tools · DSH tool surface',
1008
+ 'capabilities.group.mcp-tool': 'Extension tools · MCP',
1009
+ 'capabilities.group.skill': 'Skills · Instructions',
1010
+ 'capabilities.group.resource': 'MCP resources and templates',
1011
+ 'capabilities.group.other': 'Other capabilities / Unconfirmed type',
1012
+ 'capabilities.group.unavailable': 'Currently unavailable · Saved preferences',
1013
+ 'capabilities.source.host': 'DSH tools',
1014
+ 'capabilities.source.mcp': 'MCP',
1015
+ 'capabilities.source.unknown': 'Unconfirmed source',
1016
+ 'capabilities.source.project-dsh': 'Project skill (.dsh)',
1017
+ 'capabilities.source.project-agents': 'Project skill (.agents)',
1018
+ 'capabilities.source.user-dsh': 'User skill (.dsh)',
1019
+ 'capabilities.source.user-agents': 'User skill (.agents)',
1020
+ 'capabilities.source.runtime': 'Runtime skill',
1021
+ 'capabilities.source.bundled': 'Bundled skill',
1022
+ 'capabilities.source.custom': 'Custom skill',
1023
+ 'capabilities.source.other-skill': 'Other skill source',
1024
+ 'capabilities.commonBaseline': 'Common baseline',
1025
+ 'capabilities.details': 'Capability details',
1026
+ 'capabilities.inBaseline': 'Included',
1027
+ 'capabilities.notInBaseline': 'Not included',
1028
+ 'capabilities.savedStrategy': 'Saved strategy',
1029
+ 'capabilities.restoreAutomatic': 'Restore automatic',
1030
+ 'capabilities.closedBaseline': 'Closed selection takes priority; the retained common preference does not participate.',
1031
+ 'capabilities.skillDisclosure': 'Full Skill disclosure supplies its catalog description; the body loads only when used.',
1032
+ 'capabilities.invocation.both': 'The model can load the body; users can also invoke /{name}.',
1033
+ 'capabilities.invocation.model': 'Only the model can load the body; this Skill has no user slash invocation.',
1034
+ 'capabilities.invocation.user': 'Only users can invoke /{name}; the model cannot load it with tools.skill.',
1035
+ 'capabilities.invocation.varies': 'Invocation eligibility varies by session. Check model loading and user slash invocation in the target session.',
1036
+ 'capabilities.catalogDescription': 'Capability description',
1037
+ 'capabilities.removeSaved': 'Remove saved preferences',
1038
+ 'capabilities.currentSession': 'Selected session plan',
1039
+ 'capabilities.sessionSelector': 'Inspect session',
1040
+ 'capabilities.notInSession': 'Not included in this session plan',
1041
+ 'capabilities.baselineHint': 'When statistics are unavailable, common preferences favor full disclosure; explicit manual selections always take priority.',
1042
+ 'capabilities.managementOff': 'Capability management is off. Manual preferences remain editable; refresh existing sessions to apply the disabled configuration.',
1043
+ 'capabilities.applyGroup': 'Apply session capability settings',
1044
+ 'settings.toolsMenu': 'PTC Plus tools',
1045
+ 'capabilities.targetSession': 'Refresh target session',
1046
+ 'capabilities.chooseSession': 'Choose a target session',
1047
+ 'capabilities.applySession': 'Refresh session capabilities',
1048
+ 'capabilities.refreshing': 'Refreshing…',
1049
+ 'capabilities.cancelRefresh': 'Cancel refresh',
1050
+ 'capabilities.refreshCancelled': 'Stopped waiting; reload the plan to confirm its actual state.',
1051
+ 'capabilities.refreshFailed': 'Refresh failed: {error}',
1052
+ 'capabilities.refreshUnavailable': 'The refresh command is unavailable in this session.',
1053
+ 'capabilities.refreshAcknowledged': 'DSH acknowledged the refresh operation.',
1054
+ 'capabilities.settingsTabs': 'Capability settings tabs',
1055
+ 'capabilities.tab.manual': 'Capability configuration',
1056
+ 'capabilities.tab.statistics': 'Usage statistics',
1057
+ 'capabilities.tab.budgets': 'Prompt settings',
1058
+ 'capabilities.tab.plans': 'Configurations',
1059
+ 'capabilities.savedStatisticsInvalid': 'Saved statistics are unusable. Suggested values are shown; edit to save them. Manual capability choices remain effective.',
1060
+ 'capabilities.catalogUnavailable': 'Capability catalog unavailable: {error}. Saved choices remain editable.',
1061
+ 'capabilities.search': 'Search name, purpose or source',
1062
+ 'capabilities.catalogEmpty': 'No capability catalog is available yet. Open a PTC session, then reload.',
1063
+ 'capabilities.noMatches': 'No matching capabilities',
1064
+ 'capabilities.notAvailable': 'Not in the current catalog; saved selection retained',
1065
+ 'capabilities.common': 'Common',
1066
+ 'capabilities.baselineFor': 'Include {name} in common baseline',
1067
+ 'capabilities.disclosureFor': 'Disclosure for {name}',
1068
+ 'capabilities.automatic': 'Follow automatic',
1069
+ 'capabilities.full': 'Full contract',
1070
+ 'capabilities.on-demand': 'On demand',
1071
+ 'capabilities.closed': 'Closed',
1072
+ 'capabilities.statisticsEnabled': 'Usage statistics',
1073
+ 'capabilities.windowSize': 'Sample window (session families)',
1074
+ 'capabilities.minimumSamples': 'Minimum samples',
1075
+ 'capabilities.fullThreshold': 'Full disclosure threshold (%)',
1076
+ 'capabilities.invalidStatistics': 'Window and minimum samples must be positive integers, minimum cannot exceed window, and threshold must be between 0 and 100%.',
1077
+ 'capabilities.sessions': 'Session capability plans',
1078
+ 'capabilities.reload': 'Reload plans',
1079
+ 'capabilities.refreshHint': 'Capability settings apply to new sessions; run /capabilities refresh to update an existing session.',
1080
+ 'capabilities.unavailable': 'Cannot read plans: {error}',
1081
+ 'capabilities.empty': 'No prepared session plans',
1082
+ 'capabilities.pending': 'Saved settings await refresh',
1083
+ 'capabilities.current': 'Using frozen plan',
1084
+ 'capabilities.budget': 'Full contracts: {bytes} bytes; explicit overage: {overage} bytes',
1085
+ 'capabilities.member': 'Capability',
1086
+ 'capabilities.selection': 'Disclosure',
1087
+ 'capabilities.reason': 'Selection and statistical basis',
1088
+ 'capabilities.coverage': 'Used families / available families',
185
1089
  'console.session': 'Session bindings',
186
1090
  'console.global': 'Global bindings',
187
1091
  'console.definition': 'Definition',
@@ -202,6 +1106,10 @@ const CHROME_COPY = Object.freeze({
202
1106
  'settings.menuEntry': 'PTC Plus settings',
203
1107
  'settings.dialogTitle': 'PTC Plus settings',
204
1108
  'settings.close': 'Close PTC Plus settings',
1109
+ 'settings.navigation': 'Settings sections',
1110
+ 'settings.navigationTitle': 'PTC Plus',
1111
+ 'settings.navigationHint': 'Continuous computation, global bindings, and your session experience.',
1112
+ 'settings.experimental': 'Experimental',
205
1113
  'settings.pathSettings': 'Settings → Plugin configuration → PTC Plus',
206
1114
  'settings.pathPlugins': 'Side bar Plugins → dsh-ptc-plus → row ptc-plus → Configure',
207
1115
  'bindings.entry': 'Entry configuration',
@@ -217,9 +1125,9 @@ const CHROME_COPY = Object.freeze({
217
1125
  'bindingPolicy.protected': 'Protect names',
218
1126
  'bindingPolicy.migrationDescription': 'The legacy switches below currently apply. Choosing a unified policy replaces those switches for subsequent code.',
219
1127
  'state.unavailable': 'This DSH instance does not provide a settings service',
220
- 'footer.live': 'Changes take effect immediately.',
1128
+ 'footer.live': 'Settings are saved; capability plans adopt changes in new sessions or after an explicit refresh.',
221
1129
  'footer.readOnly': 'These settings are read-only.',
222
- 'status.applied': 'Setting applied immediately.',
1130
+ 'status.applied': 'Setting saved.',
223
1131
  'status.conflict': 'The setting did not take effect; check for conflicting settings.',
224
1132
  'status.failed': 'Could not save: {error}',
225
1133
  'bindings.title': 'Global User Bindings',
@@ -281,7 +1189,6 @@ const CHROME_COPY = Object.freeze({
281
1189
  'bindings.open': 'Global bindings',
282
1190
  'bindings.openHint': 'PTC Plus · Global bindings and settings',
283
1191
  'bindings.draftHint': 'PTC Plus plugin · Binding draft pending; click to review',
284
- 'bindings.quickHeading': 'Global bindings · Applies to all sessions',
285
1192
  'bindings.quickEnabled': 'Enabled ({count})',
286
1193
  'bindings.quickDisabled': 'Disabled ({count})',
287
1194
  'bindings.quickNoEnabled': 'No enabled bindings',
@@ -343,12 +1250,17 @@ const CHROME_COPY = Object.freeze({
343
1250
  'memory.globalUnavailable': 'Global default bindings are unavailable',
344
1251
  'tool.code': 'Code',
345
1252
  'tool.codeEdit': 'Code edit',
1253
+ 'tool.preview': 'Code preview',
1254
+ 'tool.editPreview': 'Code edit preview',
1255
+ 'tool.previewHint': 'Click the row to view in full',
1256
+ 'tool.previewBounded': 'Excerpt',
346
1257
  'tool.running': 'Running',
347
1258
  'tool.completed': 'Completed',
348
1259
  'tool.failed': 'Failed',
349
1260
  'tool.stopped': 'Stopped',
350
1261
  'tool.source': 'Source',
351
1262
  'tool.result': 'Result',
1263
+ 'tool.descriptionGenerated': 'Auto summary: generated because the model provided none',
352
1264
  'tool.inspect': 'Inspect call',
353
1265
  'feature.safeEdit': 'Safe edit execution',
354
1266
  'feature.codeRun': 'Isolated code.run execution',
@@ -375,6 +1287,9 @@ const SETTINGS_COPY = Object.freeze(Object.fromEntries(
375
1287
  ...Object.assign({}, ...CONFIG_GROUPS.map(group => ({
376
1288
  [`group.${group.key}`]: locale === 'en' ? group.labelEn : group.label,
377
1289
  }))),
1290
+ ...Object.assign({}, ...CONFIG_MODULES.map(module => ({
1291
+ [`module.${module.key}`]: locale === 'en' ? module.labelEn : module.label,
1292
+ }))),
378
1293
  ...Object.assign({}, ...CONFIG_FIELDS.map(field => fieldCopy(field, locale))),
379
1294
  })]),
380
1295
  ))