@anweat/dsh-browser 0.2.0 → 0.2.2

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 (178) hide show
  1. package/README.md +274 -70
  2. package/assets/skills/dsh-browser/SKILL.md +13 -11
  3. package/assets/skills/dsh-browser/references/develop.md +8 -0
  4. package/assets/skills/dsh-browser/references/files.md +36 -0
  5. package/assets/skills/dsh-browser/references/observe.md +2 -2
  6. package/assets/skills/dsh-browser/references/policy.md +32 -0
  7. package/cordis.patch.yml +10 -3
  8. package/lib/actions/automation.js +1 -1
  9. package/lib/actions/automation.js.map +1 -1
  10. package/lib/actions/errors.js +7 -2
  11. package/lib/actions/errors.js.map +1 -1
  12. package/lib/actions/index-view.d.ts +4 -1
  13. package/lib/actions/index-view.js +16 -3
  14. package/lib/actions/index-view.js.map +1 -1
  15. package/lib/actions/inspect.js +15 -0
  16. package/lib/actions/inspect.js.map +1 -1
  17. package/lib/actions/observe.js +1 -1
  18. package/lib/actions/observe.js.map +1 -1
  19. package/lib/actions/opencli.d.ts +1 -1
  20. package/lib/actions/opencli.js +4 -4
  21. package/lib/actions/opencli.js.map +1 -1
  22. package/lib/actions/policy.d.ts +15 -0
  23. package/lib/actions/policy.js +131 -0
  24. package/lib/actions/policy.js.map +1 -0
  25. package/lib/actions/registry.d.ts +8 -0
  26. package/lib/actions/registry.js +16 -5
  27. package/lib/actions/registry.js.map +1 -1
  28. package/lib/actions/run.js +3 -3
  29. package/lib/actions/run.js.map +1 -1
  30. package/lib/actions/runtime.js +2 -2
  31. package/lib/actions/runtime.js.map +1 -1
  32. package/lib/actions/surface.d.ts +7 -0
  33. package/lib/actions/surface.js +11 -1
  34. package/lib/actions/surface.js.map +1 -1
  35. package/lib/actions/target.js +35 -3
  36. package/lib/actions/target.js.map +1 -1
  37. package/lib/actions/types.d.ts +1 -1
  38. package/lib/actions/types.js.map +1 -1
  39. package/lib/approval-policy.d.ts +20 -1
  40. package/lib/approval-policy.js +58 -1
  41. package/lib/approval-policy.js.map +1 -1
  42. package/lib/auth-profiles.d.ts +4 -1
  43. package/lib/auth-profiles.js +3 -0
  44. package/lib/auth-profiles.js.map +1 -1
  45. package/lib/automation-assets-rpc.js +26 -0
  46. package/lib/automation-assets-rpc.js.map +1 -1
  47. package/lib/browser-service.d.ts +165 -4
  48. package/lib/browser-service.js +505 -55
  49. package/lib/browser-service.js.map +1 -1
  50. package/lib/client/SettingsCard.d.ts +10 -8
  51. package/lib/client/SettingsCard.js +12 -137
  52. package/lib/client/SettingsCard.js.map +1 -1
  53. package/lib/client/auth-profiles-form.d.ts +23 -0
  54. package/lib/client/auth-profiles-form.js +64 -0
  55. package/lib/client/auth-profiles-form.js.map +1 -0
  56. package/lib/client/card-frame.d.ts +22 -0
  57. package/lib/client/card-frame.js +61 -0
  58. package/lib/client/card-frame.js.map +1 -0
  59. package/lib/client/field-rows.d.ts +59 -0
  60. package/lib/client/field-rows.js +63 -0
  61. package/lib/client/field-rows.js.map +1 -0
  62. package/lib/client/field-rules.d.ts +17 -0
  63. package/lib/client/field-rules.js +68 -0
  64. package/lib/client/field-rules.js.map +1 -0
  65. package/lib/client/form.d.ts +108 -7
  66. package/lib/client/form.js +255 -11
  67. package/lib/client/form.js.map +1 -1
  68. package/lib/client/group-access.d.ts +14 -0
  69. package/lib/client/group-access.js +97 -0
  70. package/lib/client/group-access.js.map +1 -0
  71. package/lib/client/group-advanced.d.ts +11 -0
  72. package/lib/client/group-advanced.js +32 -0
  73. package/lib/client/group-advanced.js.map +1 -0
  74. package/lib/client/group-assets.d.ts +13 -0
  75. package/lib/client/group-assets.js +50 -0
  76. package/lib/client/group-assets.js.map +1 -0
  77. package/lib/client/group-browser.d.ts +9 -0
  78. package/lib/client/group-browser.js +27 -0
  79. package/lib/client/group-browser.js.map +1 -0
  80. package/lib/client/group-common.d.ts +10 -0
  81. package/lib/client/group-common.js +21 -0
  82. package/lib/client/group-common.js.map +1 -0
  83. package/lib/client/group-context.d.ts +20 -0
  84. package/lib/client/group-context.js +76 -0
  85. package/lib/client/group-context.js.map +1 -0
  86. package/lib/client/group-downloads.d.ts +10 -0
  87. package/lib/client/group-downloads.js +33 -0
  88. package/lib/client/group-downloads.js.map +1 -0
  89. package/lib/client/group-limits.d.ts +9 -0
  90. package/lib/client/group-limits.js +57 -0
  91. package/lib/client/group-limits.js.map +1 -0
  92. package/lib/client/group-prompts.d.ts +13 -0
  93. package/lib/client/group-prompts.js +136 -0
  94. package/lib/client/group-prompts.js.map +1 -0
  95. package/lib/client/index.d.ts +21 -1
  96. package/lib/client/index.js +10 -4
  97. package/lib/client/index.js.map +1 -1
  98. package/lib/client/locales-policy.d.ts +83 -0
  99. package/lib/client/locales-policy.js +46 -0
  100. package/lib/client/locales-policy.js.map +1 -0
  101. package/lib/client/locales-prompts.d.ts +57 -0
  102. package/lib/client/locales-prompts.js +41 -0
  103. package/lib/client/locales-prompts.js.map +1 -0
  104. package/lib/client/locales-ui.d.ts +223 -0
  105. package/lib/client/locales-ui.js +157 -0
  106. package/lib/client/locales-ui.js.map +1 -0
  107. package/lib/client/locales.d.ts +359 -67
  108. package/lib/client/locales.js +68 -22
  109. package/lib/client/locales.js.map +1 -1
  110. package/lib/client/policy-fields.d.ts +31 -0
  111. package/lib/client/policy-fields.js +66 -0
  112. package/lib/client/policy-fields.js.map +1 -0
  113. package/lib/client/policy-status-client.d.ts +91 -0
  114. package/lib/client/policy-status-client.js +64 -0
  115. package/lib/client/policy-status-client.js.map +1 -0
  116. package/lib/client/prompts-form.d.ts +33 -0
  117. package/lib/client/prompts-form.js +87 -0
  118. package/lib/client/prompts-form.js.map +1 -1
  119. package/lib/client/prompts-status-client.d.ts +21 -1
  120. package/lib/client/prompts-status-client.js +36 -4
  121. package/lib/client/prompts-status-client.js.map +1 -1
  122. package/lib/client/properties-form.d.ts +90 -0
  123. package/lib/client/properties-form.js +187 -0
  124. package/lib/client/properties-form.js.map +1 -0
  125. package/lib/client/property-docs.d.ts +18 -0
  126. package/lib/client/property-docs.js +78 -0
  127. package/lib/client/property-docs.js.map +1 -0
  128. package/lib/client/size-units.d.ts +12 -0
  129. package/lib/client/size-units.js +29 -0
  130. package/lib/client/size-units.js.map +1 -0
  131. package/lib/client/styles.d.ts +47 -31
  132. package/lib/client/styles.js +59 -20
  133. package/lib/client/styles.js.map +1 -1
  134. package/lib/client/ui-kit.d.ts +173 -0
  135. package/lib/client/ui-kit.js +112 -0
  136. package/lib/client/ui-kit.js.map +1 -0
  137. package/lib/client.js +5291 -834
  138. package/lib/client.js.map +1 -1
  139. package/lib/config-rules.d.ts +40 -0
  140. package/lib/config-rules.js +103 -0
  141. package/lib/config-rules.js.map +1 -0
  142. package/lib/config.d.ts +64 -2
  143. package/lib/config.js +106 -0
  144. package/lib/config.js.map +1 -1
  145. package/lib/context-options.d.ts +85 -0
  146. package/lib/context-options.js +206 -0
  147. package/lib/context-options.js.map +1 -0
  148. package/lib/deps.d.ts +42 -5
  149. package/lib/deps.js +219 -9
  150. package/lib/deps.js.map +1 -1
  151. package/lib/downloads.d.ts +79 -0
  152. package/lib/downloads.js +189 -0
  153. package/lib/downloads.js.map +1 -0
  154. package/lib/index.d.ts +3 -2
  155. package/lib/index.js +11 -5
  156. package/lib/index.js.map +1 -1
  157. package/lib/policy-keys.d.ts +39 -0
  158. package/lib/policy-keys.js +21 -0
  159. package/lib/policy-keys.js.map +1 -1
  160. package/lib/policy-overlay.d.ts +189 -0
  161. package/lib/policy-overlay.js +649 -0
  162. package/lib/policy-overlay.js.map +1 -0
  163. package/lib/prompts-yaml.d.ts +11 -0
  164. package/lib/prompts-yaml.js +121 -0
  165. package/lib/prompts-yaml.js.map +1 -0
  166. package/lib/prompts.d.ts +2 -0
  167. package/lib/prompts.js +7 -3
  168. package/lib/prompts.js.map +1 -1
  169. package/lib/system-browser.d.ts +61 -0
  170. package/lib/system-browser.js +109 -0
  171. package/lib/system-browser.js.map +1 -0
  172. package/lib/tools.js +9 -1
  173. package/lib/tools.js.map +1 -1
  174. package/lib/usage-policy.d.ts +3 -1
  175. package/lib/usage-policy.js +2 -0
  176. package/lib/usage-policy.js.map +1 -1
  177. package/package.json +42 -38
  178. package/scripts/dump-prompts.mjs +12 -2
@@ -1,9 +1,9 @@
1
- export const zh = {
1
+ const zhBase = {
2
2
  title: '浏览器自动化', description: '运行时、工具自由度、OpenCLI 与防止过度调用的缓冲策略。',
3
3
  expand: '展开设置', collapse: '收起设置', unsaved: '未保存', readOnly: '当前配置只读。',
4
- freedom: '自动化自由度', freedomHint: '无审批模式只跳过人工确认,不会绕过调用缓冲和参数校验。',
4
+ freedomHint: '无审批模式只跳过人工确认,不会绕过调用缓冲和参数校验。',
5
5
  runtime: '浏览器运行时', runtimeHint: '默认 Playwright;遇到兼容性检测时可显式切换 Patchright。',
6
- usage: '使用策略缓冲', usageHint: '限制并发、短时突发、爬取预算,并对 429/503 等响应退避。',
6
+ usageHint: '限制并发、短时突发、爬取预算,并对 429/503 等响应退避。',
7
7
  advanced: '登录态与高级设置', advancedHint: '状态文件不要提交到仓库;AuthProfile 必须配置 allowedDomains。',
8
8
  enabled: '启用浏览器服务', enabledHint: '关闭后浏览器服务不可用。',
9
9
  automationMode: '自动化模式', automationModeHint: 'read-only / standard / autonomous / unrestricted。',
@@ -19,10 +19,10 @@ export const zh = {
19
19
  usagePolicy: '调用缓冲 JSON', usagePolicyHint: '并发、短时突发、爬取预算与退避;只写要改的键。',
20
20
  policyKeys: '可用键名:',
21
21
  automationAssets: '自动化资产策略 JSON', automationAssetsHint: '候选阈值、持久化模式、激活模式、数量与上下文预算、激活所需的输入组数;只写要改的键。',
22
- assetLibrary: '可复用自动化资产(实验性)', assetLibraryHint: '实验功能:候选先提示是否总结;草稿真实回放后再手动激活。源码仅在点选编辑时读取。',
22
+ assetLibraryHint: '实验功能:候选先提示是否总结;草稿真实回放后再手动激活。源码仅在点选编辑时读取。',
23
23
  assetLoading: '正在读取本地自动化资产…', assetFailed: '自动化资产读取失败。', assetSuggestions: '建议总结', assetRuns: '次成功', assetSessions: '个会话', assetDismiss: '暂不总结', assetSummarize: '总结为草稿',
24
24
  assetScripts: '脚本与 recipe', assetScriptsHint: '模型只能检索已激活资产的有界摘要。', assetNewRecipe: '新建 recipe', assetNewScript: '新建油猴脚本', assetRefresh: '刷新', assetEmpty: '还没有资产。',
25
- assetEditor: '资产编辑器(JSON)', assetEditorHint: '选择资产或新建草稿。', assetInvalid: 'JSON、测试 URL 或输入无效。', assetSourceBoundary: '不要保存 cookie、token、密码、完整页面内容或聊天记录。', assetValidate: '静态校验', assetTest: '真实回放', assetTestUrl: '测试 URL(必须命中允许域名)', assetTestInputs: '测试输入 JSON(一个对象,或 2–5 个对象组成的数组,每组在全新上下文中回放)', assetActivate: '激活', assetArchive: '归档', assetSaveDraft: '保存草稿',
25
+ assetEditor: '资产编辑器(JSON)', assetEditorHint: '选择资产或新建草稿。', assetSourceBoundary: '不要保存 cookie、token、密码、完整页面内容或聊天记录。', assetValidate: '静态校验', assetTest: '真实回放', assetTestUrl: '测试 URL(必须命中允许域名)', assetTestInputs: '测试输入 JSON(一个对象,或 2–5 个对象组成的数组,每组在全新上下文中回放)', assetActivate: '激活', assetArchive: '归档', assetSaveDraft: '保存草稿',
26
26
  assetSaveAndTest: '保存并测试', assetUnsaved: '有未保存的修改:测试与激活不会使用它们,直到保存。', assetLeaveTitle: '有未保存的修改,离开会丢失它们。', assetLeaveConfirm: '放弃修改并继续', assetLeaveKeep: '继续编辑',
27
27
  assetNoticeJson: 'JSON 无效,请求未发出:', assetNoticeBackend: '后端错误:', assetNoticeValidation: '回放已执行,但业务断言未通过:', assetNoticeRefused: '已拦截:',
28
28
  assetRevision: '版本', assetHash: '内容哈希', assetLastTest: '最近测试', assetNoTest: '当前版本尚未通过测试,不能激活。', assetStaleTest: '最近一次测试针对旧版本', assetPassed: '通过', assetNotPassed: '未通过',
@@ -40,11 +40,9 @@ export const zh = {
40
40
  promptsSkillDescription: 'skill 描述', promptsSkillDescriptionHint: '替换技能列表里的描述。上限 1000 字符。',
41
41
  promptsSkillBodyFile: 'skill 正文文件', promptsSkillBodyFileHint: '用该 Markdown 文件(绝对路径,≤ 20000 字符)替换 SKILL.md 正文;文件缺失或不可读时回退到内置正文。',
42
42
  promptsSkillAppend: 'skill 正文追加', promptsSkillAppendHint: '追加到 skill 正文末尾。上限 4000 字符。',
43
- promptsExtras: '分组 / 动作 / 错误提示覆盖 JSON', promptsExtrasHint: '{"groups":{"act":{"summary":"…"}},"actions":{"act.click":{"summary":"…","notes":"…"}},"errorHints":{"DEADLINE":"…"}}。动作名可含子动作(automation.develop.save)和详情页(observe.read.controls)。',
44
- promptsDefaults: '默认文本(只读)', promptsExport: '导出默认文本', promptsCopy: '复制', promptsHideDefaults: '收起', promptsDefaultsHint: '一份 JSON,结构与上面的覆盖项完全一致。复制后删掉保持默认的部分,改写其余部分,再放进配置;原样放回不会改变任何输出。', promptsDefaultsFailed: '暂时读不到默认文本,请稍后再试。',
45
- promptsExtrasReset: '恢复默认', promptsReset: '恢复默认', promptsExtrasInvalid: 'JSON 无效,或键名、类型、长度超出限制。', promptsTooLong: '超出长度上限。',
46
- promptsStatus: '当前生效情况', promptsL0: 'L0 常驻工具估算', promptsTokens: 'tokens', promptsBudget: '预算', promptsOverrides: '项覆盖生效', promptsNoOverrides: '没有覆盖,全部使用内置默认值。',
47
- promptsDiagnostics: '诊断', promptsNoDiagnostics: '无诊断。', promptsStatusUnavailable: '暂时读不到插件状态,请稍后刷新。', promptsRefresh: '刷新', promptsLoading: '读取中…', promptsLargest: '最大的目录层',
43
+ promptsDefaults: '默认文本(只读)', promptsDefaultsHint: '一份 JSON,结构与上面的覆盖项完全一致。复制后删掉保持默认的部分,改写其余部分,再放进配置;原样放回不会改变任何输出。',
44
+ promptsTooLong: '超出长度上限。',
45
+ promptsRefresh: '刷新', promptsLoading: '读取中…',
48
46
  autoInstall: '缺失时自动安装 Chromium', autoInstallHint: '可能触发较大下载,日常建议关闭并显式执行 runtime.install 动作。',
49
47
  storageStatePath: '全局 storageState 路径', storageStatePathHint: '旧版兼容入口;新配置优先使用限域 AuthProfile。',
50
48
  authProfiles: 'AuthProfiles JSON', authProfilesHint: '命名登录态、allowedDomains 与 persistState。',
@@ -52,19 +50,41 @@ export const zh = {
52
50
  rulePacks: 'RulePacks JSON', rulePacksHint: '域名匹配、哈希固定 init script 和有界步骤。',
53
51
  executablePath: '浏览器可执行文件', executablePathHint: '少数自定义部署才需要覆盖。',
54
52
  snapshotDir: '快照目录', snapshotDirHint: '留空使用 DSH_HOME 下的默认目录。',
53
+ context: '浏览器上下文', contextHint: '每个 session 的浏览器上下文创建时的窗口、语言与出口设置;保存后需重启 profile。target.open 也可按次覆盖(代理与 UA 需审批)。',
54
+ viewportMode: '视口模式', viewportModeHint: 'window(默认,浏览器自带大小)、720p(1280×720)、1080p(1920×1080)或 custom。',
55
+ viewportWidth: '自定义视口宽度', viewportWidthHint: '仅 viewportMode=custom 时生效,200–7680 像素。',
56
+ viewportHeight: '自定义视口高度', viewportHeightHint: '仅 viewportMode=custom 时生效,200–4320 像素。',
57
+ userAgent: 'User-Agent', userAgentHint: '留空使用浏览器自带;会改变站点看到的浏览器指纹。',
58
+ locale: '语言区域', localeHint: 'BCP 47,例如 en-US、zh-CN;留空使用浏览器自带。',
59
+ timezoneId: '时区', timezoneIdHint: 'IANA 时区,例如 Asia/Shanghai;留空使用本机时区。',
60
+ proxyServer: '代理服务器', proxyServerHint: '例如 http://127.0.0.1:7890 或 socks5://127.0.0.1:1080。不支持账号密码,不要把凭据写进这里;留空即直连。',
61
+ proxyBypass: '代理绕过列表', proxyBypassHint: '逗号分隔的主机,例如 example.com,.internal.test;需要先配置代理服务器。',
62
+ downloadDir: '下载目录', downloadDirHint: '必须是绝对路径;留空使用 DSH_HOME/data/browser/downloads。文件只会写入该目录,重名自动加 -1、-2 后缀,不覆盖。',
63
+ downloadMaxBytes: '单个下载上限(字节)', downloadMaxBytesHint: '留空为 104857600(100 MiB);超出会中止并删除半成品。',
64
+ allowPrivateHosts: '允许内网域名', allowPrivateHostsHint: '开启后,agent 经策略动作可把 localhost、.local/.internal 域名和回环/内网 IPv4 写进 allowedDomains。默认关闭;云元数据与链路本地地址始终拒绝。',
65
+ policyOverlay: '策略覆盖层', policyOverlayHint: 'agent 可经 runtime.* 动作修改的“限制类”设置(authProfile 的域名/新建/删除、usagePolicy 限流项)叠加在上面的基线配置之上,覆盖层优先。收紧不询问;放宽按自动化模式处理,unrestricted 下 agent 可自行放宽,请定期查看这里的审计。',
66
+ policyRevision: '版本', policyActive: '覆盖层生效中', policyInactive: '没有覆盖,全部取自基线配置',
67
+ policyProfiles: '登录态 AuthProfile(生效值)', policyNoProfiles: '没有 AuthProfile。',
68
+ policyOriginBaseline: '基线', policyOriginChanged: '来自覆盖层', policyOriginCreated: '覆盖层新建', policyBaselineWas: '基线为',
69
+ policyAudit: '最近变更审计', policyNoAudit: '还没有变更。', policyTightened: '收紧', policyLoosened: '放宽', policyUnchanged: '无变化',
70
+ policyUnavailable: '暂时读不到覆盖层状态,请稍后刷新。',
71
+ policyUnrestrictedNote: '覆盖文件是插件管理的文件,不要手工编辑:被改动或无法解析时会被整体忽略(回退到基线)并在 runtime.status 的 runtimeWarnings 里提示。',
72
+ propertiesHint: '运行时、窗口、语言、代理、目录与限额等“默认值”都在这里:每个新 context 从这些参数起步;agent 每次操作时复制它们,只改任务需要改的部分。',
73
+ propertiesEditor: '默认参数(每行 key = value)',
74
+ propertiesFormat: '格式:每行 `key = value`,值取第一个 = 之后的内容(可用一对双引号包裹);# 开头为注释,注释行显示当前生效的值。去掉某行或把它注释掉即恢复默认;数组写成一行 JSON,例如 args = ["--disable-gpu"]。没有行内注释。',
55
75
  verbose: '详细日志', verboseHint: '输出启动和诊断信息。',
56
76
  reset: '恢复部署值', overridden: '已覆盖', invalidNumber: '请填写数字,留空表示使用默认值。', unavailable: '该插件当前未加载,暂时无法配置。',
57
77
  invalid: '值无效,请检查格式或范围。', invalidJson: 'JSON 或数值范围无效。',
58
78
  restart: '保存后完整重启 profile,运行时和工具目录才会重新注册。',
59
- saved: '配置已同步。', pending: '有待保存的修改。', invalidSave: '存在无效字段。', saveFailed: '保存失败,草稿已保留。', saving: '保存中…',
79
+ saved: '配置已同步。', pending: '有待保存的修改。', saveFailed: '保存失败,草稿已保留。', saving: '保存中…',
60
80
  save: '保存', discard: '放弃修改',
61
81
  };
62
- export const en = {
82
+ const enBase = {
63
83
  title: 'Browser automation', description: 'Runtime, tool freedom, OpenCLI, and overuse buffering policy.',
64
84
  expand: 'Expand settings', collapse: 'Collapse settings', unsaved: 'Unsaved', readOnly: 'Configuration is read-only.',
65
- freedom: 'Automation freedom', freedomHint: 'No-approval skips human confirmation only; buffering and validation remain active.',
85
+ freedomHint: 'No-approval skips human confirmation only; buffering and validation remain active.',
66
86
  runtime: 'Browser runtime', runtimeHint: 'Playwright by default; explicitly select Patchright for compatibility-sensitive sites.',
67
- usage: 'Usage buffer', usageHint: 'Bounds concurrency, bursts and crawl budgets, with backoff for 429/503 responses.',
87
+ usageHint: 'Bounds concurrency, bursts and crawl budgets, with backoff for 429/503 responses.',
68
88
  advanced: 'Auth and advanced settings', advancedHint: 'Never commit state files; AuthProfiles must declare allowedDomains.',
69
89
  enabled: 'Enable browser service', enabledHint: 'Disabling makes the browser service unavailable.',
70
90
  automationMode: 'Automation mode', automationModeHint: 'read-only / standard / autonomous / unrestricted.',
@@ -80,10 +100,10 @@ export const en = {
80
100
  usagePolicy: 'Usage buffer JSON', usagePolicyHint: 'Concurrency, bursts, crawl budgets and backoff; write only the keys you change.',
81
101
  policyKeys: 'Keys:',
82
102
  automationAssets: 'Automation asset policy JSON', automationAssetsHint: 'Candidate thresholds, persistence, activation, counts and context budgets, input sets needed to activate; write only the keys you change.',
83
- assetLibrary: 'Reusable automation assets (Experimental)', assetLibraryHint: 'Experimental: candidates ask before summarization; drafts require runtime replay before manual activation. Source loads only when selected.',
103
+ assetLibraryHint: 'Experimental: candidates ask before summarization; drafts require runtime replay before manual activation. Source loads only when selected.',
84
104
  assetLoading: 'Loading local automation assets…', assetFailed: 'Failed to load automation assets.', assetSuggestions: 'Summarization suggestions', assetRuns: 'successful runs', assetSessions: 'sessions', assetDismiss: 'Not now', assetSummarize: 'Summarize to draft',
85
105
  assetScripts: 'Scripts and recipes', assetScriptsHint: 'The model can retrieve only bounded summaries of active assets.', assetNewRecipe: 'New recipe', assetNewScript: 'New userscript', assetRefresh: 'Refresh', assetEmpty: 'No assets yet.',
86
- assetEditor: 'Asset editor (JSON)', assetEditorHint: 'Select an asset or create a draft.', assetInvalid: 'Invalid JSON, test URL, or inputs.', assetSourceBoundary: 'Do not store cookies, tokens, passwords, full page content, or conversation transcripts.', assetValidate: 'Static validate', assetTest: 'Runtime replay', assetTestUrl: 'Test URL (must match an allowed domain)', assetTestInputs: 'Test inputs JSON (one object, or an array of 2–5 objects, each replayed in a fresh context)', assetActivate: 'Activate', assetArchive: 'Archive', assetSaveDraft: 'Save draft',
106
+ assetEditor: 'Asset editor (JSON)', assetEditorHint: 'Select an asset or create a draft.', assetSourceBoundary: 'Do not store cookies, tokens, passwords, full page content, or conversation transcripts.', assetValidate: 'Static validate', assetTest: 'Runtime replay', assetTestUrl: 'Test URL (must match an allowed domain)', assetTestInputs: 'Test inputs JSON (one object, or an array of 2–5 objects, each replayed in a fresh context)', assetActivate: 'Activate', assetArchive: 'Archive', assetSaveDraft: 'Save draft',
87
107
  assetSaveAndTest: 'Save and test', assetUnsaved: 'Unsaved edits: testing and activation do not use them until they are saved.', assetLeaveTitle: 'You have unsaved edits; leaving discards them.', assetLeaveConfirm: 'Discard edits and continue', assetLeaveKeep: 'Keep editing',
88
108
  assetNoticeJson: 'Invalid JSON, nothing was sent: ', assetNoticeBackend: 'Backend error: ', assetNoticeValidation: 'The replay ran, but the business check did not hold: ', assetNoticeRefused: 'Blocked: ',
89
109
  assetRevision: 'Revision', assetHash: 'Content hash', assetLastTest: 'Latest test', assetNoTest: 'This revision has no passed test, so it cannot be activated.', assetStaleTest: 'The latest test was of an older revision', assetPassed: 'passed', assetNotPassed: 'not passed',
@@ -101,11 +121,9 @@ export const en = {
101
121
  promptsSkillDescription: 'Skill description', promptsSkillDescriptionHint: 'Replaces the description in the skill list. At most 1000 characters.',
102
122
  promptsSkillBodyFile: 'Skill body file', promptsSkillBodyFileHint: 'A Markdown file (absolute path, at most 20000 characters) that replaces the SKILL.md body; a missing or unreadable file falls back to the packaged body.',
103
123
  promptsSkillAppend: 'Skill body addition', promptsSkillAppendHint: 'Appended to the end of the skill body. At most 4000 characters.',
104
- promptsExtras: 'Group / action / error hint overrides (JSON)', promptsExtrasHint: '{"groups":{"act":{"summary":"…"}},"actions":{"act.click":{"summary":"…","notes":"…"}},"errorHints":{"DEADLINE":"…"}}. Action keys may name a sub-action (automation.develop.save) or a detail page (observe.read.controls).',
105
- promptsDefaults: 'Default text (read-only)', promptsExport: 'Export default text', promptsCopy: 'Copy', promptsHideDefaults: 'Hide', promptsDefaultsHint: 'One JSON in the exact structure of the overrides above. Copy it, delete what stays default, reword the rest, and put it in the configuration; pasted back unchanged it changes no output.', promptsDefaultsFailed: 'The default text is not available right now; try again in a moment.',
106
- promptsExtrasReset: 'Restore defaults', promptsReset: 'Restore default', promptsExtrasInvalid: 'Invalid JSON, or a key, type or length outside the limits.', promptsTooLong: 'Over the length limit.',
107
- promptsStatus: 'Currently in effect', promptsL0: 'Always-on L0 tools (estimate)', promptsTokens: 'tokens', promptsBudget: 'budget', promptsOverrides: 'overrides in effect', promptsNoOverrides: 'No overrides: everything uses the built-in defaults.',
108
- promptsDiagnostics: 'Diagnostics', promptsNoDiagnostics: 'No diagnostics.', promptsStatusUnavailable: 'The plugin status is not available right now; refresh in a moment.', promptsRefresh: 'Refresh', promptsLoading: 'Loading…', promptsLargest: 'Largest catalog layer',
124
+ promptsDefaults: 'Default text (read-only)', promptsDefaultsHint: 'One JSON in the exact structure of the overrides above. Copy it, delete what stays default, reword the rest, and put it in the configuration; pasted back unchanged it changes no output.',
125
+ promptsTooLong: 'Over the length limit.',
126
+ promptsRefresh: 'Refresh', promptsLoading: 'Loading…',
109
127
  autoInstall: 'Auto-install Chromium when missing', autoInstallHint: 'May download a large binary; running the runtime.install action explicitly is safer for daily use.',
110
128
  storageStatePath: 'Global storageState path', storageStatePathHint: 'Legacy fallback; prefer domain-scoped AuthProfiles.',
111
129
  authProfiles: 'AuthProfiles JSON', authProfilesHint: 'Named states with allowedDomains and persistState.',
@@ -113,11 +131,39 @@ export const en = {
113
131
  rulePacks: 'RulePacks JSON', rulePacksHint: 'Domain match, hash-pinned init scripts, and bounded steps.',
114
132
  executablePath: 'Browser executable', executablePathHint: 'Override only for custom deployments.',
115
133
  snapshotDir: 'Snapshot directory', snapshotDirHint: 'Leave empty for the DSH_HOME default.',
134
+ context: 'Browser context', contextHint: 'Window, language and egress settings each session\'s context is created with; restart the profile after saving. target.open can override them per call (proxy and user agent ask for approval).',
135
+ viewportMode: 'Viewport mode', viewportModeHint: 'window (default, the browser\'s own size), 720p (1280x720), 1080p (1920x1080) or custom.',
136
+ viewportWidth: 'Custom viewport width', viewportWidthHint: 'Used only with viewportMode=custom, 200-7680 pixels.',
137
+ viewportHeight: 'Custom viewport height', viewportHeightHint: 'Used only with viewportMode=custom, 200-4320 pixels.',
138
+ userAgent: 'User agent', userAgentHint: 'Leave empty for the browser\'s own; changes the browser fingerprint sites see.',
139
+ locale: 'Locale', localeHint: 'BCP 47, for example en-US or zh-CN; leave empty for the browser\'s own.',
140
+ timezoneId: 'Time zone', timezoneIdHint: 'IANA time zone such as Asia/Shanghai; leave empty for this machine\'s.',
141
+ proxyServer: 'Proxy server', proxyServerHint: 'For example http://127.0.0.1:7890 or socks5://127.0.0.1:1080. Accounts and passwords are not supported, so keep credentials out of it; empty means direct.',
142
+ proxyBypass: 'Proxy bypass list', proxyBypassHint: 'Comma-separated hosts such as example.com,.internal.test; needs a proxy server.',
143
+ downloadDir: 'Download directory', downloadDirHint: 'An absolute path; empty uses DSH_HOME/data/browser/downloads. Files are written only there, a taken name gets -1, -2 and nothing is overwritten.',
144
+ downloadMaxBytes: 'Largest download (bytes)', downloadMaxBytesHint: 'Empty means 104857600 (100 MiB); a bigger download is aborted and its partial file removed.',
145
+ allowPrivateHosts: 'Allow private hosts', allowPrivateHostsHint: 'When on, an agent policy change may name localhost, .local/.internal names and loopback or private-network IPv4 addresses in allowedDomains. Off by default; cloud metadata and link-local addresses are always refused.',
146
+ policyOverlay: 'Policy overlay', policyOverlayHint: 'Restriction settings an agent may change through the runtime.* actions (auth-profile domains, creating or removing profiles, usagePolicy limits) are layered over the baseline configuration above; the overlay wins. Tightening is not asked about; loosening follows the automation mode, and under unrestricted an agent may loosen on its own, so review the audit here.',
147
+ policyRevision: 'Revision', policyActive: 'overlay active', policyInactive: 'no overlay: everything comes from the baseline configuration',
148
+ policyProfiles: 'Auth profiles (effective)', policyNoProfiles: 'No auth profiles.',
149
+ policyOriginBaseline: 'baseline', policyOriginChanged: 'from overlay', policyOriginCreated: 'created by overlay', policyBaselineWas: 'baseline was',
150
+ policyAudit: 'Recent change audit', policyNoAudit: 'No changes yet.', policyTightened: 'tightened', policyLoosened: 'loosened', policyUnchanged: 'no change',
151
+ policyUnavailable: 'The overlay status is not available right now; refresh in a moment.',
152
+ policyUnrestrictedNote: 'The overlay file is managed by the plugin; do not edit it by hand. A file that was changed or cannot be parsed is ignored as a whole (the baseline applies) and reported in runtime.status runtimeWarnings.',
153
+ propertiesHint: 'Runtime, window, language, proxy, directories and limits are defaults, and they live here: every new context starts from these parameters, and an agent copies them for a task and changes only what the task needs.',
154
+ propertiesEditor: 'Default parameters (one key = value per line)',
155
+ propertiesFormat: 'Format: one `key = value` per line; the value is everything after the first = (one pair of double quotes may wrap it). A line starting with # is a comment and shows the value in force. Delete or comment a line to go back to the default. Arrays are one JSON line, for example args = ["--disable-gpu"]. There are no inline comments.',
116
156
  verbose: 'Verbose logs', verboseHint: 'Emit startup and diagnostic details.',
117
157
  reset: 'Restore deployed', overridden: 'Overridden', invalidNumber: 'Enter a number, or leave blank to use the default.', unavailable: 'This plugin is not loaded, so it cannot be configured right now.',
118
158
  invalid: 'Invalid value. Check format and bounds.', invalidJson: 'Invalid JSON or numeric bounds.',
119
159
  restart: 'Fully restart the profile after saving so runtime and tool catalogs are re-registered.',
120
- saved: 'Configuration is synchronized.', pending: 'Changes are ready to save.', invalidSave: 'Some fields are invalid.', saveFailed: 'Save failed; the draft was retained.', saving: 'Saving…',
160
+ saved: 'Configuration is synchronized.', pending: 'Changes are ready to save.', saveFailed: 'Save failed; the draft was retained.', saving: 'Saving…',
121
161
  save: 'Save', discard: 'Discard',
122
162
  };
163
+ import { zhUi, enUi } from "./locales-ui.js";
164
+ import { zhPolicy, enPolicy } from "./locales-policy.js";
165
+ import { zhPrompts, enPrompts } from "./locales-prompts.js";
166
+ /** The card's dictionary: the base entries, with the settings redesign's entries laid over them (a key present in both takes the redesign's text). */
167
+ export const zh = { ...zhBase, ...zhUi, ...zhPolicy, ...zhPrompts };
168
+ export const en = { ...enBase, ...enUi, ...enPolicy, ...enPrompts };
123
169
  //# sourceMappingURL=locales.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locales.js","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locales.js","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The keys of the two policy objects as controls: which kind each is, its unit, its range and its default, and how a
3
+ * typed text becomes a value. Pure, and built on `../policy-keys.ts` (the one place the ranges and defaults live).
4
+ * @module dsh-browser/client/policy-fields
5
+ */
6
+ export type PolicyFieldName = 'usagePolicy' | 'automationAssets';
7
+ export type PolicyKind = 'int' | 'float' | 'bool' | 'enum' | 'text';
8
+ export interface PolicyKeySpec {
9
+ key: string;
10
+ kind: PolicyKind;
11
+ unit?: 'ms' | 'days' | 'tokens' | 'count' | 'ratio';
12
+ /** The sub-heading it is listed under (`automationAssets` only). */
13
+ section?: 'candidates' | 'library' | 'activation';
14
+ options?: readonly string[];
15
+ }
16
+ export declare const POLICY_SPECS: Record<PolicyFieldName, readonly PolicyKeySpec[]>;
17
+ /** The default of a key; undefined when it has none (the assets directory). */
18
+ export declare function defaultOf(field: PolicyFieldName, key: string): unknown;
19
+ /** The inclusive range of a numeric key. */
20
+ export declare function boundsOf(field: PolicyFieldName, key: string): readonly [number, number] | undefined;
21
+ /** A value as the text a control shows. */
22
+ export declare function valueText(value: unknown): string;
23
+ export type ParsedPolicyValue = {
24
+ ok: true;
25
+ value: string | number | boolean | undefined;
26
+ } | {
27
+ ok: false;
28
+ problem: 'invalidNumber' | 'invalidChoice' | 'invalidRange';
29
+ };
30
+ /** What a typed text means for one key; an empty text means "the default" (no value). */
31
+ export declare function parsePolicyText(field: PolicyFieldName, spec: PolicyKeySpec, text: string): ParsedPolicyValue;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * The keys of the two policy objects as controls: which kind each is, its unit, its range and its default, and how a
3
+ * typed text becomes a value. Pure, and built on `../policy-keys.ts` (the one place the ranges and defaults live).
4
+ * @module dsh-browser/client/policy-fields
5
+ */
6
+ import { ASSET_POLICY_BOUNDS, ASSET_POLICY_DEFAULTS, ASSET_POLICY_ENUMS, USAGE_POLICY_BOUNDS, USAGE_POLICY_DEFAULTS, } from "../policy-keys.js";
7
+ const usage = (key, unit) => ({ key, kind: 'int', unit });
8
+ export const POLICY_SPECS = {
9
+ usagePolicy: [
10
+ usage('minDelayMs', 'ms'), usage('maxConcurrency', 'count'), usage('burst', 'count'), usage('maxPagesPerRun', 'count'),
11
+ usage('maxDepth', 'count'), usage('retryLimit', 'count'), usage('backoffBaseMs', 'ms'), usage('cooldownMs', 'ms'),
12
+ ],
13
+ automationAssets: [
14
+ { key: 'persistenceMode', kind: 'enum', options: ASSET_POLICY_ENUMS.persistenceMode, section: 'candidates' },
15
+ { key: 'minSuccessfulRuns', kind: 'int', unit: 'count', section: 'candidates' },
16
+ { key: 'minDistinctSessions', kind: 'int', unit: 'count', section: 'candidates' },
17
+ { key: 'successWindowDays', kind: 'int', unit: 'days', section: 'candidates' },
18
+ { key: 'minSuccessRate', kind: 'float', unit: 'ratio', section: 'candidates' },
19
+ { key: 'maxCandidates', kind: 'int', unit: 'count', section: 'candidates' },
20
+ { key: 'candidateTtlDays', kind: 'int', unit: 'days', section: 'candidates' },
21
+ { key: 'maxSuggestionsPerDay', kind: 'int', unit: 'count', section: 'candidates' },
22
+ { key: 'enabled', kind: 'bool', section: 'library' },
23
+ { key: 'directory', kind: 'text', section: 'library' },
24
+ { key: 'maxDrafts', kind: 'int', unit: 'count', section: 'library' },
25
+ { key: 'maxActiveAssets', kind: 'int', unit: 'count', section: 'library' },
26
+ { key: 'retrievalTopK', kind: 'int', unit: 'count', section: 'library' },
27
+ { key: 'catalogTokenBudget', kind: 'int', unit: 'tokens', section: 'library' },
28
+ { key: 'activationMode', kind: 'enum', options: ASSET_POLICY_ENUMS.activationMode, section: 'activation' },
29
+ { key: 'modelDevelopmentEnabled', kind: 'bool', section: 'activation' },
30
+ { key: 'maxModelDraftWritesPerSession', kind: 'int', unit: 'count', section: 'activation' },
31
+ { key: 'maxTestCredentials', kind: 'int', unit: 'count', section: 'activation' },
32
+ { key: 'minInputSetsForActivation', kind: 'int', unit: 'count', section: 'activation' },
33
+ ],
34
+ };
35
+ /** The default of a key; undefined when it has none (the assets directory). */
36
+ export function defaultOf(field, key) {
37
+ return (field === 'usagePolicy' ? USAGE_POLICY_DEFAULTS : ASSET_POLICY_DEFAULTS)[key];
38
+ }
39
+ /** The inclusive range of a numeric key. */
40
+ export function boundsOf(field, key) {
41
+ return field === 'usagePolicy' ? USAGE_POLICY_BOUNDS[key] : ASSET_POLICY_BOUNDS[key];
42
+ }
43
+ /** A value as the text a control shows. */
44
+ export function valueText(value) {
45
+ return value === undefined || value === null ? '' : String(value);
46
+ }
47
+ /** What a typed text means for one key; an empty text means "the default" (no value). */
48
+ export function parsePolicyText(field, spec, text) {
49
+ const trimmed = text.trim();
50
+ if (trimmed === '')
51
+ return { ok: true, value: undefined };
52
+ switch (spec.kind) {
53
+ case 'bool': return trimmed === 'true' || trimmed === 'false' ? { ok: true, value: trimmed === 'true' } : { ok: false, problem: 'invalidChoice' };
54
+ case 'enum': return spec.options?.includes(trimmed) ? { ok: true, value: trimmed } : { ok: false, problem: 'invalidChoice' };
55
+ case 'text': return { ok: true, value: trimmed };
56
+ case 'int':
57
+ case 'float': {
58
+ const value = Number(trimmed);
59
+ if (!Number.isFinite(value) || (spec.kind === 'int' && !Number.isInteger(value)))
60
+ return { ok: false, problem: 'invalidNumber' };
61
+ const range = boundsOf(field, spec.key);
62
+ return !range || (value >= range[0] && value <= range[1]) ? { ok: true, value } : { ok: false, problem: 'invalidRange' };
63
+ }
64
+ }
65
+ }
66
+ //# sourceMappingURL=policy-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-fields.js","sourceRoot":"","sources":["../../src/client/policy-fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import type { SnapshotStore } from '@deepseek-ai/dsh-client-store';
2
+ import type { ClientConnectionRpc } from '@deepseek-ai/dsh-client-connection/client';
3
+ /** The policy overlay as the plugin reports it (`inspect.policy` shape, see BrowserService.policyReport). */
4
+ export interface PolicyReportView {
5
+ revision: number;
6
+ updatedAt?: string;
7
+ overlayActive: boolean;
8
+ warning?: string;
9
+ allowPrivateHosts: boolean;
10
+ authDir: string;
11
+ /** Problems the running plugin found in its configuration (values that were dropped and why). */
12
+ configWarnings?: string[];
13
+ authProfiles: {
14
+ id: string;
15
+ origin: 'baseline' | 'overlay-changed' | 'overlay-created';
16
+ allowedDomains: string[];
17
+ persistState: boolean;
18
+ storageStatePath?: string;
19
+ overriddenFields?: string[];
20
+ }[];
21
+ removedByOverlay: string[];
22
+ usagePolicy: Record<string, {
23
+ value: number;
24
+ baseline: number;
25
+ overridden: boolean;
26
+ }>;
27
+ audit: {
28
+ revision: number;
29
+ at: string;
30
+ source: 'agent' | 'panel';
31
+ session?: string;
32
+ action: string;
33
+ reason: string;
34
+ direction: 'tighten' | 'loosen' | 'none';
35
+ changes: string[];
36
+ }[];
37
+ }
38
+ /** What `runtime` reports: which browser would launch, and whether the optional OpenCLI is installed. */
39
+ export interface RuntimeView {
40
+ browser: {
41
+ ready: boolean;
42
+ source: 'custom-executable' | 'channel' | 'playwright-chromium' | 'system-browser' | 'none';
43
+ path?: string;
44
+ note?: string;
45
+ installAdvice?: string;
46
+ };
47
+ systemBrowsers: {
48
+ channel: string;
49
+ name: string;
50
+ path: string;
51
+ }[];
52
+ chromiumInstalled: boolean;
53
+ opencli: {
54
+ enabled: boolean;
55
+ installed: boolean;
56
+ source?: string;
57
+ hint?: string;
58
+ };
59
+ }
60
+ /** Only a reply of the right shape is used: an older plugin, or a bridge that answers `{}` to every endpoint, must not break the card. */
61
+ export declare function isRuntimeView(value: unknown): value is RuntimeView;
62
+ export interface PolicyStatusState {
63
+ loading: boolean;
64
+ failed: boolean;
65
+ busy?: boolean;
66
+ /** Why the last clear was refused. */
67
+ error?: string;
68
+ report?: PolicyReportView;
69
+ /** Absent until the first read, and when the plugin is too old to answer (the card then shows nothing about it). */
70
+ runtime?: RuntimeView;
71
+ }
72
+ /** Reads the policy overlay for the "policy overlay" section and clears it back to the baseline. */
73
+ export declare class PolicyStatusController {
74
+ private readonly rpc;
75
+ private readonly store;
76
+ private disposed;
77
+ constructor(rpc: ClientConnectionRpc);
78
+ inject(): {
79
+ hooks: {
80
+ policyStatus: SnapshotStore<PolicyStatusState>;
81
+ };
82
+ refreshPolicyStatus: () => void;
83
+ clearPolicyOverlay: (scope?: "all" | "usagePolicy" | "authProfile", id?: string) => Promise<void>;
84
+ };
85
+ snapshot(): PolicyStatusState;
86
+ dispose(): void;
87
+ refresh(): Promise<void>;
88
+ private refreshRuntime;
89
+ clear(scope: 'all' | 'usagePolicy' | 'authProfile', id?: string): Promise<void>;
90
+ private publish;
91
+ }
@@ -0,0 +1,64 @@
1
+ import { localStore } from "./automation-assets-client.js";
2
+ /** Only a reply of the right shape is used: an older plugin, or a bridge that answers `{}` to every endpoint, must not break the card. */
3
+ export function isRuntimeView(value) {
4
+ const view = value;
5
+ return typeof view === 'object' && view !== null && typeof view.browser?.ready === 'boolean' && typeof view.opencli?.installed === 'boolean';
6
+ }
7
+ const CHANNEL = '/dsh-browser-assets';
8
+ /** Reads the policy overlay for the "policy overlay" section and clears it back to the baseline. */
9
+ export class PolicyStatusController {
10
+ rpc;
11
+ store = localStore({ loading: true, failed: false });
12
+ disposed = false;
13
+ constructor(rpc) {
14
+ this.rpc = rpc;
15
+ void this.refresh();
16
+ }
17
+ inject() {
18
+ return {
19
+ hooks: { policyStatus: this.store },
20
+ refreshPolicyStatus: () => { void this.refresh(); },
21
+ clearPolicyOverlay: (scope = 'all', id) => this.clear(scope, id),
22
+ };
23
+ }
24
+ snapshot() { return this.store.getSnapshot(); }
25
+ dispose() { this.disposed = true; }
26
+ async refresh() {
27
+ this.publish({ ...this.store.getSnapshot(), loading: true });
28
+ try {
29
+ const result = await this.rpc.call(CHANNEL, 'policy', {});
30
+ if (!result.ok)
31
+ throw new Error(result.error.message);
32
+ this.publish({ ...this.store.getSnapshot(), loading: false, failed: false, report: result.value });
33
+ // The runtime notices come second and never hold the policy report back: a plugin build without the endpoint just has none.
34
+ void this.refreshRuntime();
35
+ }
36
+ catch {
37
+ this.publish({ ...this.store.getSnapshot(), loading: false, failed: true });
38
+ }
39
+ }
40
+ async refreshRuntime() {
41
+ try {
42
+ const result = await this.rpc.call(CHANNEL, 'runtime', {});
43
+ if (result.ok && isRuntimeView(result.value))
44
+ this.publish({ ...this.store.getSnapshot(), runtime: result.value });
45
+ }
46
+ catch { /* optional */ }
47
+ }
48
+ async clear(scope, id) {
49
+ this.publish({ ...this.store.getSnapshot(), busy: true, error: undefined });
50
+ try {
51
+ const result = await this.rpc.call(CHANNEL, 'policyReset', { scope, ...id ? { id } : {}, expectedRevision: this.store.getSnapshot().report?.revision });
52
+ if (!result.ok)
53
+ throw new Error(result.error.message);
54
+ this.publish({ ...this.store.getSnapshot(), busy: false });
55
+ }
56
+ catch (error) {
57
+ this.publish({ ...this.store.getSnapshot(), busy: false, error: String(error instanceof Error ? error.message : error) });
58
+ }
59
+ await this.refresh();
60
+ }
61
+ publish(state) { if (!this.disposed)
62
+ this.store.set(state); }
63
+ }
64
+ //# sourceMappingURL=policy-status-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-status-client.js","sourceRoot":"","sources":["../../src/client/policy-status-client.ts"],"names":[],"mappings":"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"}
@@ -45,6 +45,39 @@ export declare const PROMPT_TEXT_FIELDS: readonly [{
45
45
  readonly multiline: true;
46
46
  }];
47
47
  export type PromptTextFieldId = typeof PROMPT_TEXT_FIELDS[number]['id'];
48
+ /** The plugin's own text for the card's prompt controls, taken from the default export (`promptsDumpText`). */
49
+ export interface PromptDefaults {
50
+ /** Default text by control; a control with no default text (a body file, an appended text) is absent. */
51
+ texts: Partial<Record<PromptTextFieldId, string>>;
52
+ /** The default groups, actions and errorHints, the shape the JSON box takes. */
53
+ extras: Json;
54
+ }
55
+ /** Read the default export's JSON into {@link PromptDefaults}; undefined when it is not the expected shape. */
56
+ export declare function defaultsFromJson(json: string): PromptDefaults | undefined;
57
+ /**
58
+ * `extras` without the entries that equal the plugin's default: copying the whole default into the box and changing
59
+ * one line must save one override, not freeze every other text at today's wording.
60
+ */
61
+ export declare function pruneDefaultExtras(extras: Json, defaults: Json): Json;
62
+ /** The three lists of per-entry overrides, and what one entry holds. */
63
+ export type PromptExtraKind = typeof PROMPT_EXTRA_KEYS[number];
64
+ export type PromptExtraValue = {
65
+ summary?: string;
66
+ notes?: string;
67
+ } | string;
68
+ /** One overridden entry of the lists, as the card lists it. */
69
+ export interface PromptExtraEntry {
70
+ kind: PromptExtraKind;
71
+ key: string;
72
+ summary?: string;
73
+ notes?: string;
74
+ /** An error hint's text. */
75
+ text?: string;
76
+ }
77
+ /** The overridden entries of a `prompts` draft, in the order groups, actions, errorHints. */
78
+ export declare function extraEntries(draft: Json): PromptExtraEntry[];
79
+ /** `draft` with one entry set (or removed when `value` is undefined or empty); parents left empty go with it. */
80
+ export declare function withExtraEntry(draft: Json, kind: PromptExtraKind, key: string, value: PromptExtraValue | undefined): Json;
48
81
  /** The members the JSON box edits; the other controls own the rest. */
49
82
  export declare const PROMPT_EXTRA_KEYS: readonly ["groups", "actions", "errorHints"];
50
83
  export declare function getAt(root: Json, path: readonly string[]): unknown;