dsh-ptc-plus 0.5.0 → 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.
- package/README.en.md +9 -1
- package/README.md +9 -1
- package/client.cjs +517 -151
- package/docs/adr/0017-track-the-latest-dsh-public-surface.md +2 -2
- package/docs/adr/0023-global-user-bindings.md +1 -1
- package/docs/adr/0038-freeze-session-capability-plans.md +1 -1
- package/docs/adr/0044-coexist-with-the-official-persistent-repl.md +35 -0
- package/docs/adr/README.md +2 -0
- package/docs/capability-planning-components.md +2 -2
- package/docs/client-ui.md +8 -8
- package/docs/client-visual-contract.md +1 -1
- package/docs/installation.md +5 -3
- package/docs/publishing.md +2 -2
- package/docs/runtime-reference.md +6 -1
- package/index.js +27 -4
- package/internal/capability-command-receipt.js +3 -1
- package/internal/capability-environment.js +9 -3
- package/internal/capability-statistics.js +6 -2
- package/internal/config-spec.js +10 -1
- package/internal/edit-transport-owner.js +17 -3
- package/internal/execution-provider-owner.js +25 -0
- package/internal/execution-seam-compat.js +18 -0
- package/internal/official-repl-priority.js +51 -0
- package/internal/runtime-bridge-owner.js +10 -7
- package/internal/sdk-projection.js +2 -2
- package/internal/user-bindings-owner.js +5 -27
- package/package.json +3 -2
- package/src/client-activity.js +3 -2
- package/src/client-capabilities-view.js +315 -101
- package/src/client-copy.js +68 -16
- package/src/client-styles.js +4 -0
- package/src/client-tool-view.js +9 -2
package/src/client-copy.js
CHANGED
|
@@ -67,7 +67,6 @@ const CHROME_COPY = Object.freeze({
|
|
|
67
67
|
'capabilities.inheritedRules': '继承规则',
|
|
68
68
|
'capabilities.inheritedRulesHelp': '设置默认、类别和 MCP 来源的持续规则,更改即保存。规则独立于当前筛选,单项设置按维度覆盖;MCP 来源停用优先。',
|
|
69
69
|
'capabilities.batch.targets': '一次性修改 {count} 项真实能力',
|
|
70
|
-
'capabilities.batch.scope': '目标范围:{scope}',
|
|
71
70
|
'capabilities.batch.excluded': '已排除 {count} 项当前不可用或未确认的条目。',
|
|
72
71
|
'capabilities.batch.targetList': '本次批量目标',
|
|
73
72
|
'capabilities.batch.empty': '当前筛选中没有可批量修改的真实能力。',
|
|
@@ -79,8 +78,14 @@ const CHROME_COPY = Object.freeze({
|
|
|
79
78
|
'capabilities.batch.changedTargets': '{count} 项目标已不在最新完整目录中或可用性未确认;请取消并重新检查目标。',
|
|
80
79
|
'capabilities.batch.failed': '保存未成功,目标和选择已保留,可再次确认重试。',
|
|
81
80
|
'capabilities.batch.confirm': '确认修改 {count} 项',
|
|
82
|
-
'capabilities.batch.search': '搜索“{query}”',
|
|
83
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} 项',
|
|
84
89
|
'capabilities.typesColumn': '类型',
|
|
85
90
|
'capabilities.sourceColumn': '来源',
|
|
86
91
|
'capabilities.enabledColumn': '是否启用',
|
|
@@ -101,7 +106,7 @@ const CHROME_COPY = Object.freeze({
|
|
|
101
106
|
'capabilities.eligibleFamilies': '可用家族数',
|
|
102
107
|
'capabilities.coverageColumn': '覆盖率',
|
|
103
108
|
'capabilities.coverageFor': '{name} 的覆盖率',
|
|
104
|
-
'capabilities.familyHint': '
|
|
109
|
+
'capabilities.familyHint': '会话家族:一个主会话及其子代理合计一次,只有完成结算的家族计入统计。关闭采集仍可查看已有记录。',
|
|
105
110
|
'capabilities.contextNavigation': '上下文功能',
|
|
106
111
|
'capabilities.context.description': '初始提示',
|
|
107
112
|
'capabilities.context.recovery': '提示恢复',
|
|
@@ -149,7 +154,7 @@ const CHROME_COPY = Object.freeze({
|
|
|
149
154
|
'capabilities.observedUsage': "实际使用统计",
|
|
150
155
|
'capabilities.budgetPreview': "当前能力分配预览",
|
|
151
156
|
'capabilities.observationUnavailable': "无法读取能力预览,请重新读取。",
|
|
152
|
-
'capabilities.selectObservation': "选择一个活跃 PTC
|
|
157
|
+
'capabilities.selectObservation': "选择一个活跃 PTC 会话作为观察锚点;统计和预算预览都按它的能力清单展示,统计范围可切换当前工作区或全部工作区。",
|
|
153
158
|
'capabilities.quick.title': '会话能力控制',
|
|
154
159
|
'capabilities.quick.modalTitle': '管理会话能力',
|
|
155
160
|
'capabilities.quick.sessionIdentity': '当前会话:{session}',
|
|
@@ -168,7 +173,7 @@ const CHROME_COPY = Object.freeze({
|
|
|
168
173
|
'capabilities.quick.applySession': '应用到会话',
|
|
169
174
|
'capabilities.quick.applyGlobal': '应用到全局',
|
|
170
175
|
'capabilities.quick.noOverride': '无覆盖',
|
|
171
|
-
'capabilities.quick.inheritSessionOnly': '
|
|
176
|
+
'capabilities.quick.inheritSessionOnly': '撤销临时修改只适用于本会话。请用“应用到会话”提交。',
|
|
172
177
|
'capabilities.quick.discard': '放弃更改',
|
|
173
178
|
'capabilities.quick.applying': '正在应用…',
|
|
174
179
|
'capabilities.quick.applied': '{count} 项会话能力已更新。',
|
|
@@ -184,8 +189,11 @@ const CHROME_COPY = Object.freeze({
|
|
|
184
189
|
'capabilities.quick.pendingServerClose': 'MCP 服务 {server} 有待生效的关闭选择;子项选择仍保留。',
|
|
185
190
|
'capabilities.quick.enabled': '已启用',
|
|
186
191
|
'capabilities.quick.pending': '待生效',
|
|
192
|
+
'capabilities.quick.temporaryState': '{state}(临时)',
|
|
187
193
|
'capabilities.quick.sessionPaused': '本会话的能力与上下文已暂停;清单显示宿主默认,需在设置中重新开启并刷新后才会应用新的更改。',
|
|
188
|
-
'capabilities.quick.sessionManagementOff': '
|
|
194
|
+
'capabilities.quick.sessionManagementOff': '本会话未启用能力管理;能力沿用宿主配置。在设置的“能力与上下文”中开启能力管理并刷新后可修改本会话选择。',
|
|
195
|
+
'capabilities.quick.savedPaused': '能力与上下文已在设置中关闭;重新开启并刷新后可修改本会话选择。',
|
|
196
|
+
'capabilities.quick.savedManagementOff': '能力管理已在设置中关闭;重新开启并刷新后可修改本会话选择。',
|
|
189
197
|
'capabilities.quick.scope': '生效范围',
|
|
190
198
|
'capabilities.quick.session': '仅本会话',
|
|
191
199
|
'capabilities.quick.global': '全局保存并更新本会话',
|
|
@@ -197,12 +205,26 @@ const CHROME_COPY = Object.freeze({
|
|
|
197
205
|
'capabilities.quick.tools': '基础工具',
|
|
198
206
|
'capabilities.quick.mcp': 'MCP 服务与资源',
|
|
199
207
|
'capabilities.quick.mcp_tools': 'MCP Tools',
|
|
200
|
-
'capabilities.quick.
|
|
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': '关闭',
|
|
201
221
|
'capabilities.quick.states': '已保存:{saved} · 临时:{temporary} · 生效:{effective}',
|
|
202
222
|
'capabilities.quick.apply': '提交并生效',
|
|
203
223
|
'capabilities.quick.prefill': '填入命令草稿',
|
|
204
224
|
'capabilities.card.recorded': '会话能力已更新。',
|
|
205
225
|
'capabilities.card.pending': '能力已准备,将在下一次获准的模型步骤生效。',
|
|
226
|
+
'capabilities.card.paused': '能力与上下文已关闭;本会话沿用宿主能力。',
|
|
227
|
+
'capabilities.card.off': '能力管理已关闭;本会话沿用宿主能力。',
|
|
206
228
|
'capabilities.card.saved-only': '全局设置已保存,会话更新失败。{error}',
|
|
207
229
|
'capabilities.card.unavailable': '会话不可用,未应用更改。',
|
|
208
230
|
'capabilities.card.usage': '命令未执行,请检查参数。',
|
|
@@ -218,6 +240,8 @@ const CHROME_COPY = Object.freeze({
|
|
|
218
240
|
'capabilities.receipt.saved-only': '全局选择已保存,但会话 {session} 更新失败;请读取当前方案并重试。{error}',
|
|
219
241
|
'capabilities.receipt.recorded': '会话 {session} 的能力已更新。',
|
|
220
242
|
'capabilities.receipt.pending': '会话 {session} 的能力已准备,将在首次接受的模型步骤生效。',
|
|
243
|
+
'capabilities.receipt.paused': '能力与上下文已关闭;会话 {session} 沿用宿主能力。',
|
|
244
|
+
'capabilities.receipt.off': '能力管理已关闭;会话 {session} 沿用宿主能力。',
|
|
221
245
|
'capabilities.receipt.unavailable': '请选择仍活跃的 PTC 会话。',
|
|
222
246
|
'capabilities.receipt.usage': '使用 /capabilities 查看,或 /capabilities refresh 同步已保存设置。',
|
|
223
247
|
'bindings.toggleEnabled': '已保存“{name}”的启用选择;模型目录在下一次获准步骤更新,程序值尚未证明初始化。',
|
|
@@ -240,6 +264,7 @@ const CHROME_COPY = Object.freeze({
|
|
|
240
264
|
'capabilities.directoryUsage': "导航说明:{bytes} / {budget} UTF-8 bytes",
|
|
241
265
|
'capabilities.statStatus.unavailable': "统计不可用",
|
|
242
266
|
'capabilities.statStatus.no-samples': '暂无样本',
|
|
267
|
+
'capabilities.statStatus.pending-settlement': '已有记录待结算',
|
|
243
268
|
'capabilities.statStatus.incomplete-window': "窗口证据不完整",
|
|
244
269
|
'capabilities.statStatus.capacity-exceeded': "统计容量已超限",
|
|
245
270
|
'capabilities.savedConfigurations': '已保存配置',
|
|
@@ -286,7 +311,7 @@ const CHROME_COPY = Object.freeze({
|
|
|
286
311
|
'capabilities.reason.workspace': '工作区统计',
|
|
287
312
|
'capabilities.reason.global': '全局统计参考',
|
|
288
313
|
'capabilities.host': '沿用 DSH',
|
|
289
|
-
'capabilities.policy.inheritRule': '
|
|
314
|
+
'capabilities.policy.inheritRule': '不单独设置',
|
|
290
315
|
'capabilities.policy.availabilityFilter': '已保存的可用性',
|
|
291
316
|
'capabilities.policy.disclosureFilter': '已保存的说明方式',
|
|
292
317
|
'capabilities.policy.frozenSource': '冻结来源的规则结果',
|
|
@@ -602,6 +627,7 @@ const CHROME_COPY = Object.freeze({
|
|
|
602
627
|
'tool.stopped': '执行已中断',
|
|
603
628
|
'tool.source': '源码',
|
|
604
629
|
'tool.result': '结果',
|
|
630
|
+
'tool.descriptionGenerated': '自动摘要:模型未提供摘要,由插件生成',
|
|
605
631
|
'tool.copy': '复制代码',
|
|
606
632
|
'tool.copied': '已复制',
|
|
607
633
|
'tool.inspect': '检查调用',
|
|
@@ -673,7 +699,6 @@ const CHROME_COPY = Object.freeze({
|
|
|
673
699
|
'capabilities.inheritedRules': 'Inherited rules',
|
|
674
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.',
|
|
675
701
|
'capabilities.batch.targets': 'One-time change to {count} catalog capabilities',
|
|
676
|
-
'capabilities.batch.scope': 'Target scope: {scope}',
|
|
677
702
|
'capabilities.batch.excluded': 'Excluded {count} unavailable or unconfirmed entries.',
|
|
678
703
|
'capabilities.batch.targetList': 'Targets for this batch',
|
|
679
704
|
'capabilities.batch.empty': 'There are no confirmed catalog capabilities in the current filters.',
|
|
@@ -685,8 +710,14 @@ const CHROME_COPY = Object.freeze({
|
|
|
685
710
|
'capabilities.batch.changedTargets': '{count} targets are absent from the latest complete catalog or unconfirmed. Cancel and review the targets again.',
|
|
686
711
|
'capabilities.batch.failed': 'Save was not confirmed. Targets and choices are retained; confirm again to retry.',
|
|
687
712
|
'capabilities.batch.confirm': 'Confirm {count} changes',
|
|
688
|
-
'capabilities.batch.search': 'Search “{query}”',
|
|
689
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',
|
|
690
721
|
'capabilities.typesColumn': 'Type',
|
|
691
722
|
'capabilities.sourceColumn': 'Source',
|
|
692
723
|
'capabilities.enabledColumn': 'Enabled',
|
|
@@ -707,7 +738,7 @@ const CHROME_COPY = Object.freeze({
|
|
|
707
738
|
'capabilities.eligibleFamilies': 'Eligible families',
|
|
708
739
|
'capabilities.coverageColumn': 'Coverage',
|
|
709
740
|
'capabilities.coverageFor': 'Coverage for {name}',
|
|
710
|
-
'capabilities.familyHint': 'A family counts one main session and its subagents together. Existing records remain available when collection is off.',
|
|
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.',
|
|
711
742
|
'capabilities.contextNavigation': 'Context features',
|
|
712
743
|
'capabilities.context.description': 'Initial prompt',
|
|
713
744
|
'capabilities.context.recovery': 'Prompt recovery',
|
|
@@ -755,7 +786,7 @@ const CHROME_COPY = Object.freeze({
|
|
|
755
786
|
'capabilities.observedUsage': "Observed usage",
|
|
756
787
|
'capabilities.budgetPreview': "Current allocation preview",
|
|
757
788
|
'capabilities.observationUnavailable': "Capability preview is unavailable; reload the observation.",
|
|
758
|
-
'capabilities.selectObservation': "Select an active PTC session
|
|
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.",
|
|
759
790
|
'capabilities.quick.title': 'Session capability controls',
|
|
760
791
|
'capabilities.quick.modalTitle': 'Manage session capabilities',
|
|
761
792
|
'capabilities.quick.sessionIdentity': 'Current session: {session}',
|
|
@@ -774,7 +805,7 @@ const CHROME_COPY = Object.freeze({
|
|
|
774
805
|
'capabilities.quick.applySession': 'Apply to session',
|
|
775
806
|
'capabilities.quick.applyGlobal': 'Apply to global',
|
|
776
807
|
'capabilities.quick.noOverride': 'None',
|
|
777
|
-
'capabilities.quick.inheritSessionOnly': 'Clearing a temporary
|
|
808
|
+
'capabilities.quick.inheritSessionOnly': 'Clearing a temporary change applies only to this session. Use Apply to session.',
|
|
778
809
|
'capabilities.quick.discard': 'Discard changes',
|
|
779
810
|
'capabilities.quick.applying': 'Applying…',
|
|
780
811
|
'capabilities.quick.applied': '{count} session capabilities updated.',
|
|
@@ -790,8 +821,11 @@ const CHROME_COPY = Object.freeze({
|
|
|
790
821
|
'capabilities.quick.pendingServerClose': 'MCP server {server} has a close choice awaiting effect; child choices are retained.',
|
|
791
822
|
'capabilities.quick.enabled': 'Enabled',
|
|
792
823
|
'capabilities.quick.pending': 'Pending',
|
|
824
|
+
'capabilities.quick.temporaryState': '{state} (temporary)',
|
|
793
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.',
|
|
794
|
-
'capabilities.quick.sessionManagementOff': 'Capability management is off for this session; capabilities stay with the Host.',
|
|
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.',
|
|
795
829
|
'capabilities.quick.scope': 'Apply to',
|
|
796
830
|
'capabilities.quick.session': 'This session only',
|
|
797
831
|
'capabilities.quick.global': 'Save globally and update this session',
|
|
@@ -803,12 +837,26 @@ const CHROME_COPY = Object.freeze({
|
|
|
803
837
|
'capabilities.quick.tools': 'Ordinary tools',
|
|
804
838
|
'capabilities.quick.mcp': 'MCP servers and resources',
|
|
805
839
|
'capabilities.quick.mcp_tools': 'MCP tools',
|
|
806
|
-
'capabilities.quick.
|
|
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',
|
|
807
853
|
'capabilities.quick.states': 'Saved: {saved} · Temporary: {temporary} · Effective: {effective}',
|
|
808
854
|
'capabilities.quick.apply': 'Submit and apply',
|
|
809
855
|
'capabilities.quick.prefill': 'Fill command draft',
|
|
810
856
|
'capabilities.card.recorded': 'Session capabilities updated.',
|
|
811
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.',
|
|
812
860
|
'capabilities.card.saved-only': 'Global settings saved; session update failed. {error}',
|
|
813
861
|
'capabilities.card.unavailable': 'Session unavailable; changes were not applied.',
|
|
814
862
|
'capabilities.card.usage': 'Command not executed; check its arguments.',
|
|
@@ -824,6 +872,8 @@ const CHROME_COPY = Object.freeze({
|
|
|
824
872
|
'capabilities.receipt.saved-only': 'Global choice saved, but session {session} could not be updated. Inspect its plan and retry. {error}',
|
|
825
873
|
'capabilities.receipt.recorded': 'Capabilities updated for session {session}.',
|
|
826
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.',
|
|
827
877
|
'capabilities.receipt.unavailable': 'Select an active PTC session.',
|
|
828
878
|
'capabilities.receipt.usage': 'Use /capabilities to inspect or /capabilities refresh to apply saved settings.',
|
|
829
879
|
'bindings.toggleEnabled': 'Enabled “{name}” in saved configuration. The model catalog updates at the next accepted step; worker initialization is not yet established.',
|
|
@@ -846,6 +896,7 @@ const CHROME_COPY = Object.freeze({
|
|
|
846
896
|
'capabilities.directoryUsage': "Navigation: {bytes} / {budget} UTF-8 bytes",
|
|
847
897
|
'capabilities.statStatus.unavailable': "Statistics unavailable",
|
|
848
898
|
'capabilities.statStatus.no-samples': 'No samples yet',
|
|
899
|
+
'capabilities.statStatus.pending-settlement': 'Recorded, awaiting settlement',
|
|
849
900
|
'capabilities.statStatus.incomplete-window': "Incomplete window evidence",
|
|
850
901
|
'capabilities.statStatus.capacity-exceeded': "Statistics capacity exceeded",
|
|
851
902
|
'capabilities.savedConfigurations': "Saved configurations",
|
|
@@ -892,7 +943,7 @@ const CHROME_COPY = Object.freeze({
|
|
|
892
943
|
'capabilities.reason.workspace': 'Workspace statistics',
|
|
893
944
|
'capabilities.reason.global': 'Global statistics fallback',
|
|
894
945
|
'capabilities.host': 'Host defaults',
|
|
895
|
-
'capabilities.policy.inheritRule': '
|
|
946
|
+
'capabilities.policy.inheritRule': 'Not set here',
|
|
896
947
|
'capabilities.policy.availabilityFilter': 'Saved availability',
|
|
897
948
|
'capabilities.policy.disclosureFilter': 'Saved disclosure',
|
|
898
949
|
'capabilities.policy.frozenSource': 'Frozen source rule result',
|
|
@@ -1209,6 +1260,7 @@ const CHROME_COPY = Object.freeze({
|
|
|
1209
1260
|
'tool.stopped': 'Stopped',
|
|
1210
1261
|
'tool.source': 'Source',
|
|
1211
1262
|
'tool.result': 'Result',
|
|
1263
|
+
'tool.descriptionGenerated': 'Auto summary: generated because the model provided none',
|
|
1212
1264
|
'tool.inspect': 'Inspect call',
|
|
1213
1265
|
'feature.safeEdit': 'Safe edit execution',
|
|
1214
1266
|
'feature.codeRun': 'Isolated code.run execution',
|
package/src/client-styles.js
CHANGED
|
@@ -207,6 +207,10 @@ const REPL_CONSOLE_CSS = `
|
|
|
207
207
|
@media(max-width:560px){.ptcPlusConsole{padding:14px 12px}.ptcPlusBindingsModal.ptcPlusBindingsModal{width:calc(100vw - 16px);max-height:calc(100dvh - 16px)}.ptcPlusBindingsDialog{padding:16px;max-height:calc(100dvh - 16px)}.ptcPlusObservationFilters>.ptcPlusSelectTrigger{width:105px}.ptcPlusObservationTable th,.ptcPlusObservationTable td{padding:0 6px}.ptcPlusObservationValue{gap:3px}.ptcPlusObservationState{font-size:10px}.ptcPlusEditorHead{align-items:flex-start}.ptcPlusEditorHead>.ptcPlusBindingLifecycle{margin-left:auto}.ptcPlusSourceBody .cm-editor{height:300px}}
|
|
208
208
|
.ptcPlusReplIdentity{grid-column:1}.ptcPlusReplReuse{flex:none;padding:0 5px;border-radius:999px;background:var(--dsw-alias-bg-layer-2,rgba(38,49,72,.06));color:var(--dsw-alias-label-tertiary,#74777d);font:500 10px/15px system-ui,sans-serif;white-space:nowrap}
|
|
209
209
|
.ptcPlusObservationReuseTotal{font-size:13px;color:var(--dsw-alias-label-tertiary)}.ptcPlusObservationReuse{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-variant-numeric:tabular-nums}
|
|
210
|
+
.ptcPlusCapabilityIdentity{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:3px 8px;min-width:0}.ptcPlusCapabilityIdentityText{display:flex;flex-direction:column;gap:3px;min-width:0}.ptcPlusCapabilityPickHead{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:6px}.ptcPlusCapabilityPickHead .ptcPlusCapabilitySort{min-width:0}.ptcPlusPick{appearance:none;position:relative;flex:none;box-sizing:border-box;width:16px;height:16px;margin:0;border:1px solid var(--dsw-alias-border-l4);border-radius:4px;background:var(--dsw-alias-bg-layer-3);cursor:pointer}.ptcPlusPick:checked,.ptcPlusPick:indeterminate{border-color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-brand-primary)}.ptcPlusPick:checked::after{position:absolute;left:4px;top:1px;width:5px;height:9px;border:solid var(--dsw-alias-label-primary-foreground);border-width:0 2px 2px 0;content:'';transform:rotate(45deg)}.ptcPlusPick:indeterminate::after{position:absolute;left:3px;top:6px;width:8px;height:2px;border-radius:1px;background:var(--dsw-alias-label-primary-foreground);content:''}.ptcPlusPick:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4d6bfe);outline-offset:2px}.ptcPlusPick:disabled{cursor:not-allowed;opacity:.4}.ptcPlusCapabilityBatchCount{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 5px;border-radius:999px;background:var(--dsw-alias-state-business-primary,#4d6bfe);color:#fff;font-size:10px;line-height:16px}.ptcPlusCapabilityBlocked{display:flex;gap:8px;align-items:flex-start;margin:10px 24px 0;border:1px solid color-mix(in srgb,var(--dsw-alias-state-warn-primary,#a15c00) 30%,transparent);background:color-mix(in srgb,var(--dsw-alias-state-warn-primary,#a15c00) 8%,var(--dsw-alias-bg-layer-2));color:var(--dsw-alias-label-primary);font-weight:500}.ptcPlusCapabilityBlockedIcon{flex:none;margin-top:2px;color:var(--dsw-alias-state-warn-primary,#a15c00)}.ptcPlusSessionCapabilityDetail .ptcPlusCapabilityImpact{margin:6px 0 14px;font-size:12px;line-height:18px}
|
|
211
|
+
@media(max-width:650px){.ptcPlusCapabilityBlocked{margin-inline:14px}}@media(max-width:650px) and (max-height:480px){.ptcPlusCapabilityBlocked{margin:4px 6px 0;font-size:11px}}
|
|
212
|
+
@media(max-width:650px){.ptcPlusSessionCapabilityFooter button{font-size:11px;line-height:14px}}
|
|
213
|
+
@media(max-width:650px) and (max-height:480px){.ptcPlusSessionCapabilityFooter{grid-template-columns:repeat(4,minmax(0,1fr));gap:3px;padding:3px 6px}.ptcPlusSessionCapabilityFooter [role=status]{line-height:11px}.ptcPlusSessionCapabilityFooter button{font-size:10px;line-height:12px;padding:1px 10px}}
|
|
210
214
|
`
|
|
211
215
|
|
|
212
216
|
/**
|
package/src/client-tool-view.js
CHANGED
|
@@ -33,11 +33,16 @@ export function createPtcToolView(React, deps) {
|
|
|
33
33
|
if (expandable) setOpen(current => !current)
|
|
34
34
|
}
|
|
35
35
|
const summaryText = summary === '' ? null : summary
|
|
36
|
+
// An auto-filled summary stays visually identical but declares its provenance in the DOM
|
|
37
|
+
// and on hover, so readers can tell who wrote it without changing the model-facing result.
|
|
38
|
+
const generatedSummary = view.descriptionGenerated && outputSummary === ''
|
|
36
39
|
const summaryLine = stateText === null && summaryText === null ? null
|
|
37
40
|
: h('div', { className: 'ptcPlusToolSummaryLine', 'data-state': view.state, role: 'status' },
|
|
38
41
|
stateText === null ? null : h('span', { className: 'ptcPlusToolState' }, stateText),
|
|
39
42
|
summaryText === null ? null : h('span', { className: 'ptcPlusToolSep', 'aria-hidden': true }),
|
|
40
|
-
summaryText === null ? null : h('span', { className: 'ptcPlusToolDescription'
|
|
43
|
+
summaryText === null ? null : h('span', { className: 'ptcPlusToolDescription',
|
|
44
|
+
'data-generated': generatedSummary ? 'true' : undefined,
|
|
45
|
+
title: generatedSummary ? t('tool.descriptionGenerated') : undefined }, summaryText))
|
|
41
46
|
const renderBody = (withInspect) => h('div', { className: 'ptcPlusToolBody' },
|
|
42
47
|
view.code === '' ? null : h('div', { className: 'ptcPlusToolSection' },
|
|
43
48
|
h('span', { className: 'ptcPlusToolSectionLabel' }, t('tool.source')),
|
|
@@ -74,7 +79,9 @@ export function createPtcToolView(React, deps) {
|
|
|
74
79
|
t(toolName === 'edit_run_code' ? 'tool.editPreview' : 'tool.preview')),
|
|
75
80
|
h('span', { className: 'ptcPlusToolHoverState' }, t(stateKey))),
|
|
76
81
|
h('div', { className: 'ptcPlusToolHoverContent' },
|
|
77
|
-
view.description === '' ? null : h('div', { className: 'ptcPlusToolHoverDescription'
|
|
82
|
+
view.description === '' ? null : h('div', { className: 'ptcPlusToolHoverDescription',
|
|
83
|
+
'data-generated': view.descriptionGenerated ? 'true' : undefined,
|
|
84
|
+
title: view.descriptionGenerated ? t('tool.descriptionGenerated') : undefined }, view.description),
|
|
78
85
|
view.code === '' ? null : h('div', { className: 'ptcPlusToolHoverSection' },
|
|
79
86
|
h('span', { className: 'ptcPlusToolSectionLabel' }, `${t('tool.source')} · TypeScript`),
|
|
80
87
|
isHostComponent(CodeBlock) ? h(CodeBlock, {
|