@anweat/dsh-browser 0.1.15 → 0.2.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +272 -75
- package/assets/skills/dsh-browser/SKILL.md +120 -0
- package/assets/skills/dsh-browser/references/develop.md +48 -0
- package/assets/skills/dsh-browser/references/observe.md +91 -0
- package/assets/skills/dsh-browser/references/opencli.md +25 -0
- package/assets/skills/dsh-browser/references/recipes.md +149 -0
- package/assets/skills/dsh-browser/references/userscripts.md +44 -0
- package/cordis.patch.yml +4 -0
- package/lib/actions/act.d.ts +3 -0
- package/lib/actions/act.js +147 -0
- package/lib/actions/act.js.map +1 -0
- package/lib/actions/automation.d.ts +3 -0
- package/lib/actions/automation.js +356 -0
- package/lib/actions/automation.js.map +1 -0
- package/lib/actions/crawl.d.ts +3 -0
- package/lib/actions/crawl.js +28 -0
- package/lib/actions/crawl.js.map +1 -0
- package/lib/actions/errors.d.ts +53 -0
- package/lib/actions/errors.js +178 -0
- package/lib/actions/errors.js.map +1 -0
- package/lib/actions/index-view.d.ts +42 -0
- package/lib/actions/index-view.js +268 -0
- package/lib/actions/index-view.js.map +1 -0
- package/lib/actions/inspect.d.ts +3 -0
- package/lib/actions/inspect.js +35 -0
- package/lib/actions/inspect.js.map +1 -0
- package/lib/actions/observe.d.ts +3 -0
- package/lib/actions/observe.js +121 -0
- package/lib/actions/observe.js.map +1 -0
- package/lib/actions/opencli.d.ts +3 -0
- package/lib/actions/opencli.js +51 -0
- package/lib/actions/opencli.js.map +1 -0
- package/lib/actions/registry.d.ts +35 -0
- package/lib/actions/registry.js +89 -0
- package/lib/actions/registry.js.map +1 -0
- package/lib/actions/run.d.ts +34 -0
- package/lib/actions/run.js +226 -0
- package/lib/actions/run.js.map +1 -0
- package/lib/actions/runtime.d.ts +3 -0
- package/lib/actions/runtime.js +33 -0
- package/lib/actions/runtime.js.map +1 -0
- package/lib/actions/schema.d.ts +31 -0
- package/lib/actions/schema.js +309 -0
- package/lib/actions/schema.js.map +1 -0
- package/lib/actions/script.d.ts +3 -0
- package/lib/actions/script.js +97 -0
- package/lib/actions/script.js.map +1 -0
- package/lib/actions/shared.d.ts +31 -0
- package/lib/actions/shared.js +45 -0
- package/lib/actions/shared.js.map +1 -0
- package/lib/actions/surface.d.ts +22 -0
- package/lib/actions/surface.js +18 -0
- package/lib/actions/surface.js.map +1 -0
- package/lib/actions/target.d.ts +3 -0
- package/lib/actions/target.js +66 -0
- package/lib/actions/target.js.map +1 -0
- package/lib/actions/types.d.ts +181 -0
- package/lib/actions/types.js +48 -0
- package/lib/actions/types.js.map +1 -0
- package/lib/activation-rules.d.ts +29 -0
- package/lib/activation-rules.js +33 -0
- package/lib/activation-rules.js.map +1 -0
- package/lib/approval-policy.d.ts +40 -2
- package/lib/approval-policy.js +184 -97
- package/lib/approval-policy.js.map +1 -1
- package/lib/automation-assets-rpc.d.ts +8 -2
- package/lib/automation-assets-rpc.js +67 -6
- package/lib/automation-assets-rpc.js.map +1 -1
- package/lib/automation-assets.d.ts +152 -4
- package/lib/automation-assets.js +255 -15
- package/lib/automation-assets.js.map +1 -1
- package/lib/automation-convert.d.ts +23 -0
- package/lib/automation-convert.js +110 -0
- package/lib/automation-convert.js.map +1 -0
- package/lib/automation-development.d.ts +26 -0
- package/lib/automation-development.js +47 -0
- package/lib/automation-development.js.map +1 -1
- package/lib/automation-execution.d.ts +57 -1
- package/lib/automation-execution.js +167 -11
- package/lib/automation-execution.js.map +1 -1
- package/lib/automation-journal.d.ts +92 -0
- package/lib/automation-journal.js +449 -0
- package/lib/automation-journal.js.map +1 -0
- package/lib/automation-v2.d.ts +138 -0
- package/lib/automation-v2.js +631 -0
- package/lib/automation-v2.js.map +1 -0
- package/lib/automation.d.ts +82 -5
- package/lib/automation.js +239 -82
- package/lib/automation.js.map +1 -1
- package/lib/browser-service.d.ts +304 -32
- package/lib/browser-service.js +631 -182
- package/lib/browser-service.js.map +1 -1
- package/lib/client/SettingsCard.js +95 -57
- package/lib/client/SettingsCard.js.map +1 -1
- package/lib/client/asset-editor.d.ts +55 -0
- package/lib/client/asset-editor.js +101 -0
- package/lib/client/asset-editor.js.map +1 -0
- package/lib/client/automation-assets-client.d.ts +99 -2
- package/lib/client/automation-assets-client.js +243 -10
- package/lib/client/automation-assets-client.js.map +1 -1
- package/lib/client/form.d.ts +48 -4
- package/lib/client/form.js +142 -29
- package/lib/client/form.js.map +1 -1
- package/lib/client/index.d.ts +25 -2
- package/lib/client/index.js +5 -1
- package/lib/client/index.js.map +1 -1
- package/lib/client/locales.d.ts +85 -6
- package/lib/client/locales.js +64 -12
- package/lib/client/locales.js.map +1 -1
- package/lib/client/prompts-form.d.ts +67 -0
- package/lib/client/prompts-form.js +140 -0
- package/lib/client/prompts-form.js.map +1 -0
- package/lib/client/prompts-status-client.d.ts +34 -0
- package/lib/client/prompts-status-client.js +53 -0
- package/lib/client/prompts-status-client.js.map +1 -0
- package/lib/client.js +1914 -329
- package/lib/client.js.map +1 -1
- package/lib/config.d.ts +50 -1
- package/lib/config.js +31 -1
- package/lib/config.js.map +1 -1
- package/lib/dialogs.d.ts +37 -0
- package/lib/dialogs.js +73 -0
- package/lib/dialogs.js.map +1 -0
- package/lib/freedom.d.ts +23 -7
- package/lib/freedom.js +48 -59
- package/lib/freedom.js.map +1 -1
- package/lib/index.d.ts +4 -4
- package/lib/index.js +36 -10
- package/lib/index.js.map +1 -1
- package/lib/journal.d.ts +109 -0
- package/lib/journal.js +238 -0
- package/lib/journal.js.map +1 -0
- package/lib/locator.d.ts +82 -0
- package/lib/locator.js +190 -0
- package/lib/locator.js.map +1 -0
- package/lib/observe-script.d.ts +27 -0
- package/lib/observe-script.js +565 -0
- package/lib/observe-script.js.map +1 -0
- package/lib/observe.d.ts +179 -0
- package/lib/observe.js +368 -0
- package/lib/observe.js.map +1 -0
- package/lib/policy-keys.d.ts +30 -0
- package/lib/policy-keys.js +34 -0
- package/lib/policy-keys.js.map +1 -0
- package/lib/prompt-limits.d.ts +30 -0
- package/lib/prompt-limits.js +31 -0
- package/lib/prompt-limits.js.map +1 -0
- package/lib/prompts.d.ts +131 -0
- package/lib/prompts.js +295 -0
- package/lib/prompts.js.map +1 -0
- package/lib/skill.d.ts +100 -0
- package/lib/skill.js +181 -0
- package/lib/skill.js.map +1 -0
- package/lib/tool-defs.d.ts +72 -0
- package/lib/tool-defs.js +67 -0
- package/lib/tool-defs.js.map +1 -0
- package/lib/tools.d.ts +19 -4
- package/lib/tools.js +124 -922
- package/lib/tools.js.map +1 -1
- package/package.json +35 -30
- package/scripts/dump-prompts.mjs +29 -0
- package/scripts/measure-tool-surface.mjs +190 -0
package/lib/client/locales.js
CHANGED
|
@@ -7,22 +7,48 @@ export const zh = {
|
|
|
7
7
|
advanced: '登录态与高级设置', advancedHint: '状态文件不要提交到仓库;AuthProfile 必须配置 allowedDomains。',
|
|
8
8
|
enabled: '启用浏览器服务', enabledHint: '关闭后浏览器服务不可用。',
|
|
9
9
|
automationMode: '自动化模式', automationModeHint: 'read-only / standard / autonomous / unrestricted。',
|
|
10
|
+
toolSurface: '工具面形态', toolSurfaceHint: 'indexed(默认)只常驻 browser_index / browser_call 两个工具;flat 为每个动作注册独立工具,常驻上下文明显更大。保存后需重启 profile。',
|
|
10
11
|
browserRuntime: '运行时提供器', browserRuntimeHint: 'Patchright 仅支持 Chromium。',
|
|
11
12
|
channel: '浏览器通道', channelHint: 'chromium、chrome 或 msedge。Patchright 推荐 chrome。',
|
|
12
13
|
cdpPort: 'CDP 调试端口', cdpPortHint: '可选的本机远程调试端口(1–65535);留空即关闭。',
|
|
13
|
-
|
|
14
|
+
maxSessions: '浏览器会话上限', maxSessionsHint: '同时持有页面的 session 数(1–64,默认 8);超出时关闭最久未使用的。所有 session 共用一个浏览器进程。',
|
|
15
|
+
args: 'Chromium 启动参数 JSON', argsHint: '可选的字符串数组,例如 ["--disable-gpu"];仅添加你信任并理解其影响的参数。',
|
|
16
|
+
configFileOnly: '结构较复杂,这里不提供表单:请在 profile 配置文件中本插件的配置段里编辑。',
|
|
14
17
|
headless: '无头模式', headlessHint: 'Patchright 兼容性最佳配置通常是关闭无头模式。',
|
|
15
18
|
opencliEnabled: '启用 OpenCLI', opencliEnabledHint: '站点 adapter 和 Chrome Browser Bridge 总开关。',
|
|
16
|
-
usagePolicy: '调用缓冲 JSON', usagePolicyHint: '
|
|
17
|
-
|
|
19
|
+
usagePolicy: '调用缓冲 JSON', usagePolicyHint: '并发、短时突发、爬取预算与退避;只写要改的键。',
|
|
20
|
+
policyKeys: '可用键名:',
|
|
21
|
+
automationAssets: '自动化资产策略 JSON', automationAssetsHint: '候选阈值、持久化模式、激活模式、数量与上下文预算、激活所需的输入组数;只写要改的键。',
|
|
18
22
|
assetLibrary: '可复用自动化资产(实验性)', assetLibraryHint: '实验功能:候选先提示是否总结;草稿真实回放后再手动激活。源码仅在点选编辑时读取。',
|
|
19
23
|
assetLoading: '正在读取本地自动化资产…', assetFailed: '自动化资产读取失败。', assetSuggestions: '建议总结', assetRuns: '次成功', assetSessions: '个会话', assetDismiss: '暂不总结', assetSummarize: '总结为草稿',
|
|
20
24
|
assetScripts: '脚本与 recipe', assetScriptsHint: '模型只能检索已激活资产的有界摘要。', assetNewRecipe: '新建 recipe', assetNewScript: '新建油猴脚本', assetRefresh: '刷新', assetEmpty: '还没有资产。',
|
|
21
|
-
assetEditor: '资产编辑器(JSON)', assetEditorHint: '选择资产或新建草稿。', assetInvalid: 'JSON、测试 URL 或输入无效。', assetSourceBoundary: '不要保存 cookie、token、密码、完整页面内容或聊天记录。', assetValidate: '静态校验', assetTest: '真实回放', assetTestUrl: '测试 URL(必须命中允许域名)', assetTestInputs: '测试输入 JSON', assetActivate: '激活', assetArchive: '归档', assetSaveDraft: '保存草稿',
|
|
22
|
-
|
|
25
|
+
assetEditor: '资产编辑器(JSON)', assetEditorHint: '选择资产或新建草稿。', assetInvalid: 'JSON、测试 URL 或输入无效。', assetSourceBoundary: '不要保存 cookie、token、密码、完整页面内容或聊天记录。', assetValidate: '静态校验', assetTest: '真实回放', assetTestUrl: '测试 URL(必须命中允许域名)', assetTestInputs: '测试输入 JSON(一个对象,或 2–5 个对象组成的数组,每组在全新上下文中回放)', assetActivate: '激活', assetArchive: '归档', assetSaveDraft: '保存草稿',
|
|
26
|
+
assetSaveAndTest: '保存并测试', assetUnsaved: '有未保存的修改:测试与激活不会使用它们,直到保存。', assetLeaveTitle: '有未保存的修改,离开会丢失它们。', assetLeaveConfirm: '放弃修改并继续', assetLeaveKeep: '继续编辑',
|
|
27
|
+
assetNoticeJson: 'JSON 无效,请求未发出:', assetNoticeBackend: '后端错误:', assetNoticeValidation: '回放已执行,但业务断言未通过:', assetNoticeRefused: '已拦截:',
|
|
28
|
+
assetRevision: '版本', assetHash: '内容哈希', assetLastTest: '最近测试', assetNoTest: '当前版本尚未通过测试,不能激活。', assetStaleTest: '最近一次测试针对旧版本', assetPassed: '通过', assetNotPassed: '未通过',
|
|
29
|
+
assetFork: '创建修复草稿', assetDerivedFrom: '派生自', assetInputsDigest: '输入摘要', assetActivateNeedsSave: '有未保存的修改:先「保存并测试」。', assetEditorDirtyBadge: '未保存',
|
|
30
|
+
assetConvert: '转换为 v2', assetConverted: '已由「{name}」转换为新的 v2 草稿,原资产未改动。', assetPending: '{n} 个步骤仍取第一个匹配(pendingDisambiguation):先让定位唯一再测试。',
|
|
31
|
+
assetInputSets: '最近一次测试的输入组', assetInputSet: '第', assetInputSetUnit: '组', assetSetsRan: '已运行', assetSuspect: 'PARAMETERIZATION_SUSPECT:第 {pairs} 组输入不同,输出却完全相同,输入可能没有真正影响结果;测试仍算通过,请检查占位符是否传到了页面。',
|
|
32
|
+
assetNeedsInputSets: '该资产声明了输入:激活要求当前版本的通过测试至少覆盖 {required} 组不同输入(当前 {covered} 组)。在“测试输入 JSON”里填 {required} 到 5 个对象的数组,再测试。',
|
|
33
|
+
prompts: '提示文本', promptsHint: '覆盖模型看到的提示和建议文本;留空即使用内置默认值;“导出默认文本”可看到全部默认值。',
|
|
34
|
+
promptsRestart: '两个工具的描述在注册时固定,保存后需重启 profile 才生效;其余文本在下一次调用时即生效。',
|
|
35
|
+
promptsIndexDescription: 'browser_index 工具描述', promptsIndexDescriptionHint: '常驻上下文,越短越好。上限 1500 字符;需重启生效。',
|
|
36
|
+
promptsCallDescription: 'browser_call 工具描述', promptsCallDescriptionHint: '合规声明会自动追加在末尾,无法删除。上限 1500 字符;需重启生效。',
|
|
37
|
+
promptsRootGuide: '精简指南(无 skill 时)', promptsRootGuideHint: '无 skill 时替换 browser_index 根目录里的精简指南。上限 1500 字符。',
|
|
38
|
+
promptsRootNote: '根目录附言', promptsRootNoteHint: '追加在 browser_index 根目录末尾,有 skill 时也显示;写部署方自己的建议。上限 800 字符。',
|
|
39
|
+
promptsSkillEnabled: '注册 dsh-browser skill', promptsSkillEnabledHint: '关闭后不注册 skill,根目录改用精简指南。',
|
|
40
|
+
promptsSkillDescription: 'skill 描述', promptsSkillDescriptionHint: '替换技能列表里的描述。上限 1000 字符。',
|
|
41
|
+
promptsSkillBodyFile: 'skill 正文文件', promptsSkillBodyFileHint: '用该 Markdown 文件(绝对路径,≤ 20000 字符)替换 SKILL.md 正文;文件缺失或不可读时回退到内置正文。',
|
|
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: '最大的目录层',
|
|
48
|
+
autoInstall: '缺失时自动安装 Chromium', autoInstallHint: '可能触发较大下载,日常建议关闭并显式执行 runtime.install 动作。',
|
|
23
49
|
storageStatePath: '全局 storageState 路径', storageStatePathHint: '旧版兼容入口;新配置优先使用限域 AuthProfile。',
|
|
24
50
|
authProfiles: 'AuthProfiles JSON', authProfilesHint: '命名登录态、allowedDomains 与 persistState。',
|
|
25
|
-
defaultAuthProfile: '默认 AuthProfile', defaultAuthProfileHint: '未显式选择登录态时使用;
|
|
51
|
+
defaultAuthProfile: '默认 AuthProfile', defaultAuthProfileHint: '未显式选择登录态时使用;crawl.crawl 始终匿名。',
|
|
26
52
|
rulePacks: 'RulePacks JSON', rulePacksHint: '域名匹配、哈希固定 init script 和有界步骤。',
|
|
27
53
|
executablePath: '浏览器可执行文件', executablePathHint: '少数自定义部署才需要覆盖。',
|
|
28
54
|
snapshotDir: '快照目录', snapshotDirHint: '留空使用 DSH_HOME 下的默认目录。',
|
|
@@ -42,22 +68,48 @@ export const en = {
|
|
|
42
68
|
advanced: 'Auth and advanced settings', advancedHint: 'Never commit state files; AuthProfiles must declare allowedDomains.',
|
|
43
69
|
enabled: 'Enable browser service', enabledHint: 'Disabling makes the browser service unavailable.',
|
|
44
70
|
automationMode: 'Automation mode', automationModeHint: 'read-only / standard / autonomous / unrestricted.',
|
|
71
|
+
toolSurface: 'Tool surface', toolSurfaceHint: 'indexed (default) keeps only browser_index / browser_call in context; flat registers one tool per action, which costs far more context. Restart the profile after saving.',
|
|
45
72
|
browserRuntime: 'Runtime provider', browserRuntimeHint: 'Patchright is Chromium-only.',
|
|
46
73
|
channel: 'Browser channel', channelHint: 'chromium, chrome, or msedge. Patchright recommends chrome.',
|
|
47
74
|
cdpPort: 'CDP debugging port', cdpPortHint: 'Optional local remote-debugging port (1–65535); leave empty to disable.',
|
|
48
|
-
|
|
75
|
+
maxSessions: 'Browser session limit', maxSessionsHint: 'Sessions that may hold a page at once (1–64, default 8); past it the least recently used one is closed. One browser process serves them all.',
|
|
76
|
+
args: 'Chromium launch arguments JSON', argsHint: 'Optional array of strings, for example ["--disable-gpu"]; add only arguments whose effects you understand and trust.',
|
|
77
|
+
configFileOnly: 'Nested structure, so there is no form here: edit it in the plugin\'s section of the profile config file.',
|
|
49
78
|
headless: 'Headless mode', headlessHint: 'Patchright compatibility is usually strongest in headed mode.',
|
|
50
79
|
opencliEnabled: 'Enable OpenCLI', opencliEnabledHint: 'Master switch for site adapters and the Chrome Browser Bridge.',
|
|
51
|
-
usagePolicy: 'Usage buffer JSON', usagePolicyHint: '
|
|
52
|
-
|
|
80
|
+
usagePolicy: 'Usage buffer JSON', usagePolicyHint: 'Concurrency, bursts, crawl budgets and backoff; write only the keys you change.',
|
|
81
|
+
policyKeys: 'Keys:',
|
|
82
|
+
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.',
|
|
53
83
|
assetLibrary: 'Reusable automation assets (Experimental)', assetLibraryHint: 'Experimental: candidates ask before summarization; drafts require runtime replay before manual activation. Source loads only when selected.',
|
|
54
84
|
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',
|
|
55
85
|
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.',
|
|
56
|
-
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', assetActivate: 'Activate', assetArchive: 'Archive', assetSaveDraft: 'Save draft',
|
|
57
|
-
|
|
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',
|
|
87
|
+
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
|
+
assetNoticeJson: 'Invalid JSON, nothing was sent: ', assetNoticeBackend: 'Backend error: ', assetNoticeValidation: 'The replay ran, but the business check did not hold: ', assetNoticeRefused: 'Blocked: ',
|
|
89
|
+
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',
|
|
90
|
+
assetFork: 'Create repair draft', assetDerivedFrom: 'Derived from', assetInputsDigest: 'inputs digest', assetActivateNeedsSave: 'Unsaved edits: use "Save and test" first.', assetEditorDirtyBadge: 'unsaved',
|
|
91
|
+
assetConvert: 'Convert to v2', assetConverted: 'Converted "{name}" into a new v2 draft; the original is untouched.', assetPending: '{n} step(s) still take the first match (pendingDisambiguation): make their locators unique before testing.',
|
|
92
|
+
assetInputSets: 'Input sets of the latest test', assetInputSet: 'Set', assetInputSetUnit: '', assetSetsRan: 'ran', assetSuspect: 'PARAMETERIZATION_SUSPECT: sets {pairs} had different inputs but identical outputs, so the input may not drive the result. The test still passed; check that the placeholder reaches the page.',
|
|
93
|
+
assetNeedsInputSets: 'This asset declares inputs: activation needs a passing test of this revision that covered at least {required} different input sets (it covered {covered}). Put an array of {required} to 5 objects in the test inputs, then test.',
|
|
94
|
+
prompts: 'Prompt text', promptsHint: 'Override the guidance and advice text the model reads; leave a field empty for the built-in default. "Export default text" shows every default.',
|
|
95
|
+
promptsRestart: 'The two tool descriptions are fixed at registration, so they apply after the profile restarts; everything else applies on the next call.',
|
|
96
|
+
promptsIndexDescription: 'browser_index tool description', promptsIndexDescriptionHint: 'Always in context, so keep it short. At most 1500 characters; needs a restart.',
|
|
97
|
+
promptsCallDescription: 'browser_call tool description', promptsCallDescriptionHint: 'The compliance notice is always appended and cannot be removed. At most 1500 characters; needs a restart.',
|
|
98
|
+
promptsRootGuide: 'Compact guide (no skill)', promptsRootGuideHint: 'Replaces the compact guide at the browser_index root when no skill is available. At most 1500 characters.',
|
|
99
|
+
promptsRootNote: 'Root note', promptsRootNoteHint: 'Appended to the end of the browser_index root, also when the skill is available: your own advice. At most 800 characters.',
|
|
100
|
+
promptsSkillEnabled: 'Register the dsh-browser skill', promptsSkillEnabledHint: 'Off: the skill is not registered and the root shows the compact guide instead.',
|
|
101
|
+
promptsSkillDescription: 'Skill description', promptsSkillDescriptionHint: 'Replaces the description in the skill list. At most 1000 characters.',
|
|
102
|
+
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
|
+
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 (the plugin restarts after a save; 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 (the plugin restarts after a save; refresh in a moment).', promptsRefresh: 'Refresh', promptsLoading: 'Loading…', promptsLargest: 'Largest catalog layer',
|
|
109
|
+
autoInstall: 'Auto-install Chromium when missing', autoInstallHint: 'May download a large binary; running the runtime.install action explicitly is safer for daily use.',
|
|
58
110
|
storageStatePath: 'Global storageState path', storageStatePathHint: 'Legacy fallback; prefer domain-scoped AuthProfiles.',
|
|
59
111
|
authProfiles: 'AuthProfiles JSON', authProfilesHint: 'Named states with allowedDomains and persistState.',
|
|
60
|
-
defaultAuthProfile: 'Default AuthProfile', defaultAuthProfileHint: 'Used when no profile is selected;
|
|
112
|
+
defaultAuthProfile: 'Default AuthProfile', defaultAuthProfileHint: 'Used when no profile is selected; crawl.crawl is always anonymous.',
|
|
61
113
|
rulePacks: 'RulePacks JSON', rulePacksHint: 'Domain match, hash-pinned init scripts, and bounded steps.',
|
|
62
114
|
executablePath: 'Browser executable', executablePathHint: 'Override only for custom deployments.',
|
|
63
115
|
snapshotDir: 'Snapshot directory', snapshotDirHint: 'Leave empty for the DSH_HOME default.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.js","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC;IAC/D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS;IACrE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B;IAC7D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC;IACzE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,kCAAkC;IAC9D,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,8CAA8C;IAClF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc;IAC/C,cAAc,EAAE,OAAO,EAAE,kBAAkB,EAAE,mDAAmD;IAChG,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,0BAA0B;IACxE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,gDAAgD;IAC/E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,6BAA6B;IAC/D,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"locales.js","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for the "prompt text" section of the settings card.
|
|
3
|
+
*
|
|
4
|
+
* The whole `prompts` configuration is one staged JSON field (the host writes top-level fields); the card's separate
|
|
5
|
+
* controls (tool descriptions, root guide and note, the skill) and the JSON box for groups, actions and error hints
|
|
6
|
+
* are two views of that one draft. Nothing here touches the host or the DOM.
|
|
7
|
+
* @module dsh-browser/client/prompts-form
|
|
8
|
+
*/
|
|
9
|
+
type Json = Record<string, unknown>;
|
|
10
|
+
/** The single-line and multi-line text controls of the section, by id, with the path each edits and its length cap. */
|
|
11
|
+
export declare const PROMPT_TEXT_FIELDS: readonly [{
|
|
12
|
+
readonly id: "indexDescription";
|
|
13
|
+
readonly path: readonly ["tools", "browser_index", "description"];
|
|
14
|
+
readonly limit: 1500;
|
|
15
|
+
readonly multiline: true;
|
|
16
|
+
}, {
|
|
17
|
+
readonly id: "callDescription";
|
|
18
|
+
readonly path: readonly ["tools", "browser_call", "description"];
|
|
19
|
+
readonly limit: 1500;
|
|
20
|
+
readonly multiline: true;
|
|
21
|
+
}, {
|
|
22
|
+
readonly id: "rootGuide";
|
|
23
|
+
readonly path: readonly ["rootGuide"];
|
|
24
|
+
readonly limit: 1500;
|
|
25
|
+
readonly multiline: true;
|
|
26
|
+
}, {
|
|
27
|
+
readonly id: "rootNote";
|
|
28
|
+
readonly path: readonly ["rootNote"];
|
|
29
|
+
readonly limit: 800;
|
|
30
|
+
readonly multiline: true;
|
|
31
|
+
}, {
|
|
32
|
+
readonly id: "skillDescription";
|
|
33
|
+
readonly path: readonly ["skill", "description"];
|
|
34
|
+
readonly limit: 1000;
|
|
35
|
+
readonly multiline: false;
|
|
36
|
+
}, {
|
|
37
|
+
readonly id: "skillBodyFile";
|
|
38
|
+
readonly path: readonly ["skill", "bodyFile"];
|
|
39
|
+
readonly limit: 1024;
|
|
40
|
+
readonly multiline: false;
|
|
41
|
+
}, {
|
|
42
|
+
readonly id: "skillAppend";
|
|
43
|
+
readonly path: readonly ["skill", "append"];
|
|
44
|
+
readonly limit: 4000;
|
|
45
|
+
readonly multiline: true;
|
|
46
|
+
}];
|
|
47
|
+
export type PromptTextFieldId = typeof PROMPT_TEXT_FIELDS[number]['id'];
|
|
48
|
+
/** The members the JSON box edits; the other controls own the rest. */
|
|
49
|
+
export declare const PROMPT_EXTRA_KEYS: readonly ["groups", "actions", "errorHints"];
|
|
50
|
+
export declare function getAt(root: Json, path: readonly string[]): unknown;
|
|
51
|
+
/** A copy of `root` with `path` set to `value`; an empty or absent value removes it, and parents left empty go with it. */
|
|
52
|
+
export declare function setAt(root: Json, path: readonly string[], value: unknown): Json;
|
|
53
|
+
/** The groups/actions/errorHints box: groups and actions are objects of `{summary, notes}`, errorHints a code-to-text map. */
|
|
54
|
+
export declare function validExtras(value: Json): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Whether a whole `prompts` value is acceptable to save: known top-level keys, strings within their caps, a boolean
|
|
57
|
+
* `skill.enabled`. Group names, action names and error codes are the plugin's to judge (it reports unknown ones as
|
|
58
|
+
* diagnostics), so they are not checked here.
|
|
59
|
+
*/
|
|
60
|
+
export declare function validPrompts(value: Json): boolean;
|
|
61
|
+
/** The JSON box's content for a `prompts` value: its groups, actions and errorHints, or empty when it has none. */
|
|
62
|
+
export declare function extrasText(value: Json): string;
|
|
63
|
+
/** A copy of a `prompts` value with groups, actions and errorHints replaced by `extras` (absent members removed). */
|
|
64
|
+
export declare function withExtras(value: Json, extras: Json): Json;
|
|
65
|
+
/** Drop empty containers and the `skill.enabled=true` default, so equal settings compare equal whatever defaults the host filled in. */
|
|
66
|
+
export declare function canonicalPrompts(value: Json): Json;
|
|
67
|
+
export {};
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for the "prompt text" section of the settings card.
|
|
3
|
+
*
|
|
4
|
+
* The whole `prompts` configuration is one staged JSON field (the host writes top-level fields); the card's separate
|
|
5
|
+
* controls (tool descriptions, root guide and note, the skill) and the JSON box for groups, actions and error hints
|
|
6
|
+
* are two views of that one draft. Nothing here touches the host or the DOM.
|
|
7
|
+
* @module dsh-browser/client/prompts-form
|
|
8
|
+
*/
|
|
9
|
+
import { PROMPT_LIMITS } from "../prompt-limits.js";
|
|
10
|
+
/** The single-line and multi-line text controls of the section, by id, with the path each edits and its length cap. */
|
|
11
|
+
export const PROMPT_TEXT_FIELDS = [
|
|
12
|
+
{ id: 'indexDescription', path: ['tools', 'browser_index', 'description'], limit: PROMPT_LIMITS.description, multiline: true },
|
|
13
|
+
{ id: 'callDescription', path: ['tools', 'browser_call', 'description'], limit: PROMPT_LIMITS.description, multiline: true },
|
|
14
|
+
{ id: 'rootGuide', path: ['rootGuide'], limit: PROMPT_LIMITS.rootGuide, multiline: true },
|
|
15
|
+
{ id: 'rootNote', path: ['rootNote'], limit: PROMPT_LIMITS.rootNote, multiline: true },
|
|
16
|
+
{ id: 'skillDescription', path: ['skill', 'description'], limit: PROMPT_LIMITS.skillDescription, multiline: false },
|
|
17
|
+
{ id: 'skillBodyFile', path: ['skill', 'bodyFile'], limit: 1024, multiline: false },
|
|
18
|
+
{ id: 'skillAppend', path: ['skill', 'append'], limit: PROMPT_LIMITS.skillAppend, multiline: true },
|
|
19
|
+
];
|
|
20
|
+
/** The members the JSON box edits; the other controls own the rest. */
|
|
21
|
+
export const PROMPT_EXTRA_KEYS = ['groups', 'actions', 'errorHints'];
|
|
22
|
+
const isRecord = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
23
|
+
export function getAt(root, path) {
|
|
24
|
+
let node = root;
|
|
25
|
+
for (const key of path) {
|
|
26
|
+
if (!isRecord(node))
|
|
27
|
+
return undefined;
|
|
28
|
+
node = node[key];
|
|
29
|
+
}
|
|
30
|
+
return node;
|
|
31
|
+
}
|
|
32
|
+
/** A copy of `root` with `path` set to `value`; an empty or absent value removes it, and parents left empty go with it. */
|
|
33
|
+
export function setAt(root, path, value) {
|
|
34
|
+
const copy = structuredClone(root);
|
|
35
|
+
const trail = [copy];
|
|
36
|
+
let node = copy;
|
|
37
|
+
for (const key of path.slice(0, -1)) {
|
|
38
|
+
const next = node[key];
|
|
39
|
+
node = isRecord(next) ? next : (node[key] = {});
|
|
40
|
+
trail.push(node);
|
|
41
|
+
}
|
|
42
|
+
const last = path[path.length - 1];
|
|
43
|
+
if (value === undefined || value === '')
|
|
44
|
+
delete node[last];
|
|
45
|
+
else
|
|
46
|
+
node[last] = value;
|
|
47
|
+
for (let depth = path.length - 1; depth > 0; depth--) {
|
|
48
|
+
const parent = trail[depth - 1];
|
|
49
|
+
if (Object.keys(trail[depth]).length === 0)
|
|
50
|
+
delete parent[path[depth - 1]];
|
|
51
|
+
}
|
|
52
|
+
return copy;
|
|
53
|
+
}
|
|
54
|
+
const stringMap = (value, limit, inner) => isRecord(value) && Object.values(value).every(entry => {
|
|
55
|
+
if (inner)
|
|
56
|
+
return isRecord(entry) && Object.entries(entry).every(([key, text]) => inner.includes(key) && typeof text === 'string' && text.length <= limit);
|
|
57
|
+
return typeof entry === 'string' && entry.length <= limit;
|
|
58
|
+
});
|
|
59
|
+
/** The groups/actions/errorHints box: groups and actions are objects of `{summary, notes}`, errorHints a code-to-text map. */
|
|
60
|
+
export function validExtras(value) {
|
|
61
|
+
if (Object.keys(value).some(key => !PROMPT_EXTRA_KEYS.includes(key)))
|
|
62
|
+
return false;
|
|
63
|
+
const { groups, actions, errorHints } = value;
|
|
64
|
+
if (groups !== undefined && !stringMap(groups, PROMPT_LIMITS.summary, ['summary']))
|
|
65
|
+
return false;
|
|
66
|
+
if (actions !== undefined && !(isRecord(actions) && Object.values(actions).every(entry => isRecord(entry)
|
|
67
|
+
&& Object.entries(entry).every(([key, text]) => (key === 'summary' || key === 'notes') && typeof text === 'string' && text.length <= (key === 'summary' ? PROMPT_LIMITS.summary : PROMPT_LIMITS.topicText)))))
|
|
68
|
+
return false;
|
|
69
|
+
if (errorHints !== undefined && !stringMap(errorHints, PROMPT_LIMITS.errorHint))
|
|
70
|
+
return false;
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Whether a whole `prompts` value is acceptable to save: known top-level keys, strings within their caps, a boolean
|
|
75
|
+
* `skill.enabled`. Group names, action names and error codes are the plugin's to judge (it reports unknown ones as
|
|
76
|
+
* diagnostics), so they are not checked here.
|
|
77
|
+
*/
|
|
78
|
+
export function validPrompts(value) {
|
|
79
|
+
const known = ['tools', 'rootGuide', 'rootNote', 'groups', 'actions', 'errorHints', 'skill'];
|
|
80
|
+
if (Object.keys(value).some(key => !known.includes(key)))
|
|
81
|
+
return false;
|
|
82
|
+
for (const field of PROMPT_TEXT_FIELDS) {
|
|
83
|
+
const entry = getAt(value, field.path);
|
|
84
|
+
if (entry !== undefined && (typeof entry !== 'string' || entry.length > field.limit))
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
const tools = value.tools;
|
|
88
|
+
if (tools !== undefined && !(isRecord(tools) && Object.keys(tools).every(key => key === 'browser_index' || key === 'browser_call')))
|
|
89
|
+
return false;
|
|
90
|
+
const skill = value.skill;
|
|
91
|
+
if (skill !== undefined) {
|
|
92
|
+
if (!isRecord(skill) || Object.keys(skill).some(key => !['enabled', 'description', 'bodyFile', 'append'].includes(key)))
|
|
93
|
+
return false;
|
|
94
|
+
if (skill.enabled !== undefined && typeof skill.enabled !== 'boolean')
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
return validExtras(Object.fromEntries(PROMPT_EXTRA_KEYS.filter(key => value[key] !== undefined).map(key => [key, value[key]])));
|
|
98
|
+
}
|
|
99
|
+
/** The JSON box's content for a `prompts` value: its groups, actions and errorHints, or empty when it has none. */
|
|
100
|
+
export function extrasText(value) {
|
|
101
|
+
value = canonicalPrompts(value);
|
|
102
|
+
const extras = Object.fromEntries(PROMPT_EXTRA_KEYS.filter(key => value[key] !== undefined).map(key => [key, value[key]]));
|
|
103
|
+
return Object.keys(extras).length ? JSON.stringify(extras, null, 2) : '';
|
|
104
|
+
}
|
|
105
|
+
/** A copy of a `prompts` value with groups, actions and errorHints replaced by `extras` (absent members removed). */
|
|
106
|
+
export function withExtras(value, extras) {
|
|
107
|
+
const copy = Object.fromEntries(Object.entries(value).filter(([key]) => !PROMPT_EXTRA_KEYS.includes(key)));
|
|
108
|
+
for (const key of PROMPT_EXTRA_KEYS)
|
|
109
|
+
if (extras[key] !== undefined && isRecord(extras[key]) && Object.keys(extras[key]).length)
|
|
110
|
+
copy[key] = extras[key];
|
|
111
|
+
return copy;
|
|
112
|
+
}
|
|
113
|
+
/** Drop empty containers and the `skill.enabled=true` default, so equal settings compare equal whatever defaults the host filled in. */
|
|
114
|
+
export function canonicalPrompts(value) {
|
|
115
|
+
const clean = (node) => {
|
|
116
|
+
if (!isRecord(node))
|
|
117
|
+
return node;
|
|
118
|
+
const out = {};
|
|
119
|
+
for (const [key, entry] of Object.entries(node)) {
|
|
120
|
+
const next = clean(entry);
|
|
121
|
+
if (isRecord(next) && Object.keys(next).length === 0)
|
|
122
|
+
continue;
|
|
123
|
+
if (next === undefined || next === '')
|
|
124
|
+
continue;
|
|
125
|
+
out[key] = next;
|
|
126
|
+
}
|
|
127
|
+
return out;
|
|
128
|
+
};
|
|
129
|
+
const out = clean(value);
|
|
130
|
+
const skill = out.skill;
|
|
131
|
+
if (isRecord(skill) && skill.enabled === true) {
|
|
132
|
+
const { enabled: _enabled, ...rest } = skill;
|
|
133
|
+
if (Object.keys(rest).length)
|
|
134
|
+
out.skill = rest;
|
|
135
|
+
else
|
|
136
|
+
delete out.skill;
|
|
137
|
+
}
|
|
138
|
+
return out;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=prompts-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts-form.js","sourceRoot":"","sources":["../../src/client/prompts-form.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { SnapshotStore } from '@deepseek-ai/dsh-client-store';
|
|
2
|
+
import type { ClientConnectionRpc } from '@deepseek-ai/dsh-client-connection/client';
|
|
3
|
+
import type { PromptsStatus } from '../prompts.ts';
|
|
4
|
+
export interface PromptsStatusState {
|
|
5
|
+
loading: boolean;
|
|
6
|
+
failed: boolean;
|
|
7
|
+
/** What the running plugin reports: the overrides in force, the diagnostics, and the L0 estimate. */
|
|
8
|
+
status?: PromptsStatus;
|
|
9
|
+
/** The JSON of every default prompt text, once "Export default text" has loaded it (the same text `prompts:dump` prints). */
|
|
10
|
+
defaults?: string;
|
|
11
|
+
/** Set when loading the defaults failed. */
|
|
12
|
+
defaultsFailed?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/** Reads the plugin's own account of its prompt overrides, for the "prompt text" section. */
|
|
15
|
+
export declare class PromptsStatusController {
|
|
16
|
+
private readonly rpc;
|
|
17
|
+
private readonly store;
|
|
18
|
+
private disposed;
|
|
19
|
+
constructor(rpc: ClientConnectionRpc);
|
|
20
|
+
inject(): {
|
|
21
|
+
hooks: {
|
|
22
|
+
promptsStatus: SnapshotStore<PromptsStatusState>;
|
|
23
|
+
};
|
|
24
|
+
refreshPromptsStatus: () => void;
|
|
25
|
+
exportPromptDefaults: () => Promise<void>;
|
|
26
|
+
hidePromptDefaults: () => void;
|
|
27
|
+
};
|
|
28
|
+
snapshot(): PromptsStatusState;
|
|
29
|
+
dispose(): void;
|
|
30
|
+
/** Load the default prompt texts as JSON, for the read-only box under the section. */
|
|
31
|
+
exportDefaults(): Promise<void>;
|
|
32
|
+
refresh(): Promise<void>;
|
|
33
|
+
private publish;
|
|
34
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { localStore } from "./automation-assets-client.js";
|
|
2
|
+
/** Same private channel as the automation assets (see automation-assets-rpc.ts). */
|
|
3
|
+
const CHANNEL = '/dsh-browser-assets';
|
|
4
|
+
/** Reads the plugin's own account of its prompt overrides, for the "prompt text" section. */
|
|
5
|
+
export class PromptsStatusController {
|
|
6
|
+
rpc;
|
|
7
|
+
store = localStore({ loading: true, failed: false });
|
|
8
|
+
disposed = false;
|
|
9
|
+
constructor(rpc) {
|
|
10
|
+
this.rpc = rpc;
|
|
11
|
+
void this.refresh();
|
|
12
|
+
}
|
|
13
|
+
inject() {
|
|
14
|
+
return {
|
|
15
|
+
hooks: { promptsStatus: this.store },
|
|
16
|
+
refreshPromptsStatus: () => { void this.refresh(); },
|
|
17
|
+
exportPromptDefaults: () => this.exportDefaults(),
|
|
18
|
+
hidePromptDefaults: () => { const { defaults: _defaults, defaultsFailed: _failed, ...rest } = this.store.getSnapshot(); this.publish(rest); },
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
snapshot() { return this.store.getSnapshot(); }
|
|
22
|
+
dispose() { this.disposed = true; }
|
|
23
|
+
/** Load the default prompt texts as JSON, for the read-only box under the section. */
|
|
24
|
+
async exportDefaults() {
|
|
25
|
+
try {
|
|
26
|
+
const result = await this.rpc.call(CHANNEL, 'promptsDefaults', {});
|
|
27
|
+
if (!result.ok)
|
|
28
|
+
throw new Error(result.error.message);
|
|
29
|
+
const { defaultsFailed: _failed, ...rest } = this.store.getSnapshot();
|
|
30
|
+
this.publish({ ...rest, defaults: result.value.json });
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
this.publish({ ...this.store.getSnapshot(), defaultsFailed: true });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async refresh() {
|
|
37
|
+
const current = this.store.getSnapshot();
|
|
38
|
+
this.publish({ ...current, loading: true });
|
|
39
|
+
try {
|
|
40
|
+
const result = await this.rpc.call(CHANNEL, 'prompts', {});
|
|
41
|
+
if (!result.ok)
|
|
42
|
+
throw new Error(result.error.message);
|
|
43
|
+
this.publish({ ...this.store.getSnapshot(), loading: false, failed: false, status: result.value });
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// The plugin restarts when a setting is saved; the next refresh finds it again.
|
|
47
|
+
this.publish({ ...this.store.getSnapshot(), loading: false, failed: true });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
publish(state) { if (!this.disposed)
|
|
51
|
+
this.store.set(state); }
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=prompts-status-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts-status-client.js","sourceRoot":"","sources":["../../src/client/prompts-status-client.ts"],"names":[],"mappings":"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"}
|