@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
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * "Downloads": where files land and how large one may be. The size is stored in bytes; the control shows the largest
4
+ * unit that divides it exactly, so 104857600 reads as "100 MiB".
5
+ * @module dsh-browser/client/group-downloads
6
+ */
7
+ import { useState } from 'react';
8
+ import { controlId, fill, rowLabels, TextRow, useField, useOverriddenCount } from "./field-rows.js";
9
+ import { Badge, Group, Row, Select, TextInput } from "./ui-kit.js";
10
+ import { SIZE_UNITS, bytesToUnitText, unitFor, unitTextToBytes } from "./size-units.js";
11
+ export const DOWNLOAD_FIELDS = ['downloadDir', 'downloadMaxBytes'];
12
+ function MaxBytesRow({ card }) {
13
+ const { t } = card;
14
+ const field = useField(card, 'downloadMaxBytes');
15
+ const bytes = field.state.text.trim() === '' ? undefined : Number(field.state.text);
16
+ const [unit, setUnit] = useState();
17
+ // Until the person picks a unit, show the one that fits the stored value; typing never changes it under their hands.
18
+ const shown = unit ?? unitFor(bytes);
19
+ const [draft, setDraft] = useState();
20
+ /** What a typed text stages: its bytes, or the text itself when it is not a positive number (the field is then invalid and the save refused). */
21
+ const stagedFor = (nextText, nextUnit) => { const result = unitTextToBytes(nextText, nextUnit); return result === undefined ? nextText : String(result); };
22
+ // The typed text is shown while it is what is staged; a discard or a reset elsewhere brings the stored value back.
23
+ const text = draft !== undefined && stagedFor(draft, shown) === field.state.text ? draft : bytes !== undefined && Number.isFinite(bytes) ? bytesToUnitText(bytes, shown) : '';
24
+ const id = controlId('downloadMaxBytes');
25
+ const apply = (nextText, nextUnit) => field.edit(stagedFor(nextText, nextUnit));
26
+ return _jsx(Row, { field: "downloadMaxBytes", id: id, label: t('downloadMaxBytes'), hint: t('downloadMaxBytesHint'), help: t('downloadMaxBytesHelp'), overridden: field.state.overridden, invalid: field.state.invalid, problem: t('invalid'), disabled: field.disabled, labels: rowLabels(t), onReset: () => { setDraft(undefined); setUnit(undefined); field.reset(); }, children: _jsxs("span", { className: "dsb-unit-input", children: [_jsx(TextInput, { id: id, value: text, numeric: true, placeholder: "100", muted: !field.state.overridden, invalid: field.state.invalid, disabled: field.disabled, onChange: value => { setUnit(shown); setDraft(value); apply(value, shown); } }), _jsx(Select, { ariaLabel: t('downloadMaxBytes'), value: shown, disabled: field.disabled, options: SIZE_UNITS.map(([name]) => ({ value: name, label: name })), onChange: value => { const next = value; setUnit(next); setDraft(text); apply(text, next); } })] }) });
27
+ }
28
+ export function DownloadsGroup({ card }) {
29
+ const { t } = card;
30
+ const count = useOverriddenCount(card, DOWNLOAD_FIELDS);
31
+ return _jsxs(Group, { id: "downloads", title: t('groupDownloads'), summary: t('groupDownloadsSub'), badges: count ? _jsx(Badge, { tone: "info", children: fill(t('overriddenCount'), { n: count }) }) : null, children: [_jsx(TextRow, { card: card, name: "downloadDir", placeholder: "$DSH_HOME/data/browser/downloads", code: true }), _jsx(MaxBytesRow, { card: card })] });
32
+ }
33
+ //# sourceMappingURL=group-downloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-downloads.js","sourceRoot":"","sources":["../../src/client/group-downloads.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * "Usage limits": the call buffer as grouped number inputs with their unit, range and default, and the asset policy
3
+ * in a fold. Each key edits the same staged JSON object the raw box (folded away under "Advanced: raw JSON") shows.
4
+ * @module dsh-browser/client/group-limits
5
+ */
6
+ import { type Card } from './field-rows.tsx';
7
+ export declare function LimitsGroup({ card }: {
8
+ card: Card;
9
+ }): import("react").JSX.Element;
@@ -0,0 +1,57 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * "Usage limits": the call buffer as grouped number inputs with their unit, range and default, and the asset policy
4
+ * in a fold. Each key edits the same staged JSON object the raw box (folded away under "Advanced: raw JSON") shows.
5
+ * @module dsh-browser/client/group-limits
6
+ */
7
+ import { SettingsValueField } from '@deepseek-ai/dsh-client-ui-primitives';
8
+ import { ASSET_POLICY_KEYS, USAGE_POLICY_KEYS } from "../policy-keys.js";
9
+ import { fill, rowLabels, stateOf } from "./field-rows.js";
10
+ import { boundsOf, defaultOf, POLICY_SPECS, valueText } from "./policy-fields.js";
11
+ import { styles as css } from "./styles.js";
12
+ import { Badge, Fold, Group, Help, Row, Select, TextInput, Toggle, UnitInput } from "./ui-kit.js";
13
+ const UNIT_KEYS = { ms: 'limitsUnitMs', days: 'limitsUnitDays', tokens: 'limitsUnitTokens', count: 'limitsUnitCount', ratio: 'limitsUnitRatio' };
14
+ const SECTION_KEYS = { candidates: 'limitsSectionCandidates', library: 'limitsSectionLibrary', activation: 'limitsSectionActivation' };
15
+ const RAW_KEY_LISTS = { usagePolicy: USAGE_POLICY_KEYS, automationAssets: ASSET_POLICY_KEYS };
16
+ function PolicyKeyRow({ card, field, spec }) {
17
+ const { t } = card;
18
+ const state = card.useBrowserSettings(snapshot => snapshot.policies[field][spec.key]);
19
+ const disabled = card.useBrowserSettings(snapshot => !snapshot.writable);
20
+ const overlay = card.usePolicyStatus(snapshot => field === 'usagePolicy' ? snapshot.report?.usagePolicy[spec.key] : undefined);
21
+ const id = `plugin-config-dsh-browser-${field}-${spec.key}`;
22
+ const edit = (text) => card.editPolicyKey(field, spec.key, text);
23
+ const range = boundsOf(field, spec.key);
24
+ const fallback = defaultOf(field, spec.key);
25
+ const unit = spec.unit ? t(UNIT_KEYS[spec.unit]) : '';
26
+ const meta = [range ? fill(t('limitsRange'), { min: range[0], max: range[1] }) : '', fallback !== undefined ? fill(t('limitsDefault'), { value: valueText(fallback) }) : '',
27
+ overlay?.overridden ? fill(t('limitsOverlayNote'), { value: overlay.value, baseline: overlay.baseline }) : ''].filter(Boolean).join(' · ');
28
+ const common = { disabled, muted: !state.overridden, invalid: !!state.problem };
29
+ let control;
30
+ switch (spec.kind) {
31
+ case 'bool':
32
+ control = _jsx(Toggle, { label: t(`pk_${spec.key}`), checked: state.text === 'true', disabled: disabled, onChange: next => edit(String(next)) });
33
+ break;
34
+ case 'enum':
35
+ control = _jsx(Select, { id: id, value: state.text, options: (spec.options ?? []).map(value => ({ value, label: value })), ...common, onChange: edit });
36
+ break;
37
+ case 'text':
38
+ control = _jsx(TextInput, { id: id, value: state.text, placeholder: "$DSH_HOME/data/browser/automations", code: true, ...common, onChange: edit });
39
+ break;
40
+ default: control = _jsx(UnitInput, { id: id, value: state.text, unit: unit, ...common, onChange: edit });
41
+ }
42
+ return _jsx(Row, { policyKey: `${field}.${spec.key}`, id: spec.kind === 'bool' ? undefined : id, label: t(`pk_${spec.key}`), hint: t(`pk_${spec.key}Hint`), meta: meta, overridden: state.overridden, invalid: !!state.problem, problem: state.problem ? t(state.problem) : undefined, disabled: disabled, labels: rowLabels(t), onReset: () => edit(''), inline: spec.kind === 'bool', children: control });
43
+ }
44
+ /** The raw JSON of one policy object, the same data as its rows. */
45
+ function RawBox({ card, field, label }) {
46
+ const { t } = card;
47
+ const state = card.useBrowserSettings(snapshot => stateOf(snapshot, field));
48
+ const disabled = card.useBrowserSettings(snapshot => !snapshot.writable);
49
+ return _jsx(SettingsValueField, { id: `plugin-config-dsh-browser-${field}-json`, label: t(label), hint: `${t('limitsRawHint')} ${t('policyKeys')} ${RAW_KEY_LISTS[field].join(', ')}`, overriddenLabel: t('overridden'), resetLabel: t('reset'), invalidLabel: t('invalidJson'), numeric: false, disabled: disabled, ...state, onEdit: text => card.edit(field, text), onReset: () => card.resetField(field) });
50
+ }
51
+ export function LimitsGroup({ card }) {
52
+ const { t } = card;
53
+ const count = card.useBrowserSettings(snapshot => (Object.values(snapshot.policies.usagePolicy).filter(entry => entry.overridden).length + Object.values(snapshot.policies.automationAssets).filter(entry => entry.overridden).length));
54
+ const sections = ['candidates', 'library', 'activation'];
55
+ return _jsxs(Group, { id: "limits", title: t('groupLimits'), summary: t('groupLimitsSub'), badges: count ? _jsx(Badge, { tone: "info", children: fill(t('overriddenCount'), { n: count }) }) : null, children: [_jsxs("div", { "data-dsb-field": "usagePolicy", children: [_jsxs("div", { className: css.subHead, children: [_jsx("span", { children: t('limitsUsageTitle') }), " ", _jsx(Help, { label: t('helpLabel'), text: t('usagePolicyHelp') })] }), _jsx("p", { className: css.rowHint, children: t('limitsUsageSub') }), POLICY_SPECS.usagePolicy.map(spec => _jsx(PolicyKeyRow, { card: card, field: "usagePolicy", spec: spec }, spec.key))] }), _jsx(Fold, { id: "limits-assets", title: t('limitsAssetsFold'), hint: t('limitsAssetsFoldHint'), children: _jsxs("div", { "data-dsb-field": "automationAssets", children: [_jsx("p", { className: css.rowHint, children: t('automationAssetsHelp') }), sections.map(section => _jsxs("div", { children: [_jsx("div", { className: css.subHead, children: t(SECTION_KEYS[section]) }), POLICY_SPECS.automationAssets.filter(spec => spec.section === section).map(spec => _jsx(PolicyKeyRow, { card: card, field: "automationAssets", spec: spec }, spec.key))] }, section))] }) }), _jsxs(Fold, { id: "limits-raw", title: t('limitsRawFold'), children: [_jsx(RawBox, { card: card, field: "usagePolicy", label: "limitsRawUsage" }), _jsx(RawBox, { card: card, field: "automationAssets", label: "limitsRawAssets" })] }), _jsx("p", { className: css.notice, role: "note", children: t('restart') })] });
56
+ }
57
+ //# sourceMappingURL=group-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-limits.js","sourceRoot":"","sources":["../../src/client/group-limits.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * "Prompts": the text the model reads, as a list. A row per text (name, default or overridden, length) and an Edit
3
+ * dialog that puts the default text beside your override; the per-entry overrides (groups, actions, error hints) are a
4
+ * list of only the entries you changed, with their own dialog. The budget summary stays on top and the default text can be
5
+ * exported, as commented YAML or plain JSON.
6
+ *
7
+ * Every edit stages into the one `prompts` draft the page's Save writes (see form.ts); a dialog's own Save only stages.
8
+ * @module dsh-browser/client/group-prompts
9
+ */
10
+ import { type Card } from './field-rows.tsx';
11
+ export declare function PromptsGroup({ card }: {
12
+ card: Card;
13
+ }): import("react").JSX.Element;
@@ -0,0 +1,136 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * "Prompts": the text the model reads, as a list. A row per text (name, default or overridden, length) and an Edit
4
+ * dialog that puts the default text beside your override; the per-entry overrides (groups, actions, error hints) are a
5
+ * list of only the entries you changed, with their own dialog. The budget summary stays on top and the default text can be
6
+ * exported, as commented YAML or plain JSON.
7
+ *
8
+ * Every edit stages into the one `prompts` draft the page's Save writes (see form.ts); a dialog's own Save only stages.
9
+ * @module dsh-browser/client/group-prompts
10
+ */
11
+ import { useEffect, useState } from 'react';
12
+ import { SegmentedControl } from '@deepseek-ai/dsh-client-ui-primitives';
13
+ import { PROMPT_LIMITS } from "../prompt-limits.js";
14
+ import { fill, rowLabels } from "./field-rows.js";
15
+ import { PROMPT_EXTRA_KEYS, PROMPT_TEXT_FIELDS } from "./prompts-form.js";
16
+ import { styles as css } from "./styles.js";
17
+ import { Badge, Btn, Dialog, Fold, Group, Item, Row, Select, SubHead, TextInput, Toggle } from "./ui-kit.js";
18
+ /** Label and hint keys of each text, by id. */
19
+ const TEXT_LABELS = {
20
+ indexDescription: { label: 'promptsIndexDescription', hint: 'promptsIndexDescriptionHint' },
21
+ callDescription: { label: 'promptsCallDescription', hint: 'promptsCallDescriptionHint' },
22
+ rootGuide: { label: 'promptsRootGuide', hint: 'promptsRootGuideHint' },
23
+ rootNote: { label: 'promptsRootNote', hint: 'promptsRootNoteHint' },
24
+ skillDescription: { label: 'promptsSkillDescription', hint: 'promptsSkillDescriptionHint' },
25
+ skillBodyFile: { label: 'promptsSkillBodyFile', hint: 'promptsSkillBodyFileHint' },
26
+ skillAppend: { label: 'promptsSkillAppend', hint: 'promptsSkillAppendHint' },
27
+ };
28
+ const KIND_LABELS = { groups: 'promptKindGroups', actions: 'promptKindActions', errorHints: 'promptKindErrorHints' };
29
+ function usePrompts(card) {
30
+ const state = card.useBrowserSettings(snapshot => snapshot.prompts);
31
+ const disabled = card.useBrowserSettings(snapshot => !snapshot.writable);
32
+ const status = card.usePromptsStatus(snapshot => snapshot);
33
+ return { state, disabled, status, defaults: status.defaultTexts };
34
+ }
35
+ /** The budget line and the diagnostics, from what the running plugin reports. */
36
+ function StatusLine({ card }) {
37
+ const { t } = card;
38
+ const { status, state } = usePrompts(card);
39
+ const { refreshPromptsStatus } = card;
40
+ const saving = card.useBrowserSettings(snapshot => snapshot.saving);
41
+ // Refresh when the group renders and after each save settles: that is when what is in effect can have changed.
42
+ useRefreshAfterSave(saving, refreshPromptsStatus);
43
+ const report = status.status;
44
+ const count = report?.overrides.length ?? 0;
45
+ return _jsxs("div", { className: css.item, role: "status", "data-dsh-browser-prompts-status": true, children: [_jsxs("div", { className: css.itemMain, children: [_jsx("div", { className: css.itemTitle, "data-dsh-browser-prompts-budget": true, children: report ? fill(t('promptsStatusLine'), { l0: report.budget.l0Tokens, l0Budget: report.budget.l0Budget, layer: report.budget.largestLayer.name, tokens: report.budget.largestLayer.tokens, layerBudget: report.budget.layerBudget })
46
+ : status.failed ? t('promptsStatusUnavailable2') : t('promptsLoading') }), _jsxs("div", { className: css.itemMeta, children: [report ? (count ? fill(t('promptsStatusOverrides'), { n: count }) : t('promptsStatusNone')) : '', state.invalid ? ` · ${t('invalid')}` : ''] }), report?.diagnostics.length ? _jsx(Fold, { id: "prompts-diagnostics", title: fill(t('promptsStatusDiagnostics'), { n: report.diagnostics.length }), hint: t('promptsDiagnosticsFold'), children: _jsx("ul", { "data-dsh-browser-prompts-diagnostics": true, children: report.diagnostics.map((entry, index) => _jsx("li", { children: entry.message }, index)) }) }) : null] }), _jsx("div", { className: css.itemActions, children: _jsx("button", { type: "button", className: css.link, onClick: refreshPromptsStatus, children: t('promptsRefresh') }) })] });
47
+ }
48
+ function useRefreshAfterSave(saving, refresh) {
49
+ useEffect(() => { if (!saving)
50
+ refresh(); }, [saving, refresh]);
51
+ }
52
+ /** One text: the default beside your override. Save only stages. */
53
+ function TextDialog({ card, id, onClose }) {
54
+ const { t } = card;
55
+ const { state, disabled, defaults } = usePrompts(card);
56
+ const spec = PROMPT_TEXT_FIELDS.find(entry => entry.id === id);
57
+ const labels = TEXT_LABELS[id];
58
+ const base = defaults?.texts[id];
59
+ const hasDefault = id !== 'skillBodyFile' && id !== 'skillAppend';
60
+ const [draft, setDraft] = useState(state.texts[id].text);
61
+ const tooLong = draft.length > spec.limit;
62
+ const same = base !== undefined && draft === base;
63
+ const inputId = `plugin-config-dsh-browser-prompts-${id}`;
64
+ return _jsx(Dialog, { open: true, wide: true, title: fill(t('promptEditTitle'), { name: t(labels.label) }), closeLabel: t('close'), description: t(labels.hint), onClose: onClose, footer: _jsxs(_Fragment, { children: [hasDefault && base !== undefined ? _jsx(Btn, { disabled: disabled || draft === base, onClick: () => setDraft(base), data: "prompt-start", children: t('promptStart') }) : null, _jsx(Btn, { disabled: disabled || draft === '', onClick: () => setDraft(''), data: "prompt-restore", children: t('promptRestore') }), _jsx(Btn, { onClick: onClose, data: "prompt-cancel", children: t('cancel') }), _jsx(Btn, { primary: true, disabled: disabled || tooLong, onClick: () => { card.editPromptText(id, draft); onClose(); }, data: "prompt-save", children: t('promptSave') })] }), children: _jsxs("div", { className: css.compare, children: [_jsxs("div", { className: css.compareCol, children: [_jsx("strong", { children: t('promptDefaultCol') }), _jsx("pre", { className: css.preview, "data-dsb-prompt-default": true, children: hasDefault ? base ?? t('promptDefaultMissing') : t('promptNoDefault') })] }), _jsxs("div", { className: css.compareCol, children: [_jsx("label", { htmlFor: inputId, children: t('promptMineCol') }), spec.multiline
65
+ ? _jsx("textarea", { id: inputId, className: `${css.input} ${css.textarea} ${css.code} ${tooLong ? css.invalidInput : ''}`, rows: 12, spellCheck: false, value: draft, disabled: disabled, placeholder: t('promptEmptyIsDefault'), "aria-invalid": tooLong || undefined, onChange: event => setDraft(event.currentTarget.value) })
66
+ : _jsx(TextInput, { id: inputId, value: draft, code: true, disabled: disabled, invalid: tooLong, placeholder: t('promptEmptyIsDefault'), onChange: setDraft }), _jsxs("p", { className: tooLong ? `${css.rowHint} dsb-bad` : css.rowHint, role: tooLong ? 'alert' : undefined, children: [tooLong ? t('promptsTooLong') : same ? t('promptSameAsDefault') : '', " (", draft.length, "/", spec.limit, ")"] })] })] }) });
67
+ }
68
+ /** The seven texts as a list. */
69
+ function TextList({ card }) {
70
+ const { t } = card;
71
+ const { state, disabled } = usePrompts(card);
72
+ const [editing, setEditing] = useState();
73
+ return _jsxs(_Fragment, { children: [_jsx(SubHead, { children: t('promptsListTitle') }), _jsx("p", { className: css.rowHint, children: t('promptsListHint') }), _jsx("div", { className: css.list, "data-dsb-prompt-list": true, children: PROMPT_TEXT_FIELDS.map(spec => {
74
+ const entry = state.texts[spec.id];
75
+ const overridden = entry.text !== '' && !entry.sameAsDefault;
76
+ return _jsx(Item, { data: spec.id, title: t(TEXT_LABELS[spec.id].label), badges: _jsxs(_Fragment, { children: [_jsx(Badge, { tone: overridden ? 'info' : 'outline', children: overridden ? t('promptStateOverridden') : t('promptStateDefault') }), entry.text !== '' ? _jsx(Badge, { tone: entry.invalid ? 'danger' : 'neutral', children: fill(t('promptChars'), { n: entry.text.length }) }) : null] }), meta: t(TEXT_LABELS[spec.id].hint), actions: _jsxs(_Fragment, { children: [entry.text !== '' ? _jsx("button", { type: "button", className: css.link, disabled: disabled, onClick: () => card.editPromptText(spec.id, ''), children: t('promptRestore') }) : null, _jsx(Btn, { disabled: disabled, onClick: () => setEditing(spec.id), data: "prompt-edit", children: t('edit') })] }) }, spec.id);
77
+ }) }), editing ? _jsx(TextDialog, { card: card, id: editing, onClose: () => setEditing(undefined) }, editing) : null] });
78
+ }
79
+ /** One entry of the groups / actions / errorHints lists. */
80
+ function EntryDialog({ card, entry, onClose }) {
81
+ const { t } = card;
82
+ const { disabled, defaults } = usePrompts(card);
83
+ const [kind, setKind] = useState(entry?.kind ?? 'actions');
84
+ const [key, setKey] = useState(entry?.key ?? '');
85
+ const [summary, setSummary] = useState(entry?.summary ?? '');
86
+ const [notes, setNotes] = useState(entry?.notes ?? '');
87
+ const [text, setText] = useState(entry?.text ?? '');
88
+ const known = defaults?.extras[kind];
89
+ const base = known?.[key];
90
+ const baseSummary = typeof base === 'object' && base !== null ? base.summary : undefined;
91
+ const baseNotes = typeof base === 'object' && base !== null ? base.notes : undefined;
92
+ const baseText = typeof base === 'string' ? base : undefined;
93
+ const keyProblem = key !== '' && !/^[A-Za-z0-9_.-]+$/.test(key);
94
+ const unknown = key !== '' && !keyProblem && defaults !== undefined && !(key in (known ?? {}));
95
+ const caps = { summary: PROMPT_LIMITS.summary, notes: PROMPT_LIMITS.topicText, text: PROMPT_LIMITS.errorHint };
96
+ const over = (kind !== 'errorHints' && (summary.length > caps.summary || notes.length > caps.notes)) || (kind === 'errorHints' && text.length > caps.text);
97
+ const complete = key !== '' && !keyProblem && !over && (kind === 'errorHints' ? text !== '' : summary !== '' || (kind === 'actions' && notes !== ''));
98
+ const save = () => {
99
+ card.setPromptExtra(kind, key, kind === 'errorHints' ? text : kind === 'groups' ? { summary } : { summary, notes });
100
+ onClose();
101
+ };
102
+ const field = (label, id, value, set, cap, defaultText, rows) => _jsxs("div", { className: css.compare, children: [_jsxs("div", { className: css.compareCol, children: [_jsxs("strong", { children: [label, " \u00B7 ", t('promptDefaultCol')] }), _jsx("pre", { className: css.preview, children: defaultText ?? t('promptNoDefault') })] }), _jsxs("div", { className: css.compareCol, children: [_jsxs("label", { htmlFor: id, children: [label, " \u00B7 ", t('promptMineCol')] }), _jsx("textarea", { id: id, className: `${css.input} ${css.textarea} ${value.length > cap ? css.invalidInput : ''}`, rows: rows, spellCheck: false, value: value, disabled: disabled, placeholder: t('promptEmptyIsDefault'), onChange: event => set(event.currentTarget.value) }), _jsxs("p", { className: value.length > cap ? `${css.rowHint} dsb-bad` : css.rowHint, children: ["(", value.length, "/", cap, ")"] })] })] }, id);
103
+ return _jsxs(Dialog, { open: true, wide: true, title: entry ? fill(t('promptEntryEditTitle'), { key: entry.key }) : t('promptEntryNewTitle'), closeLabel: t('close'), onClose: onClose, footer: _jsxs(_Fragment, { children: [entry ? _jsx(Btn, { danger: true, disabled: disabled, onClick: () => { card.setPromptExtra(entry.kind, entry.key, undefined); onClose(); }, data: "entry-remove", children: t('promptEntryRemove') }) : null, _jsx(Btn, { onClick: onClose, data: "entry-cancel", children: t('cancel') }), _jsx(Btn, { primary: true, disabled: disabled || !complete, onClick: save, data: "entry-save", children: t('promptSave') })] }), children: [_jsx(Row, { id: "dsb-entry-kind", label: t('promptEntryKind'), hint: t('promptEntryKindHint'), labels: rowLabels(t), children: entry ? _jsx(Badge, { tone: "neutral", children: t(KIND_LABELS[kind]) })
104
+ : _jsx(Select, { id: "dsb-entry-kind", value: kind, disabled: disabled, options: PROMPT_EXTRA_KEYS.map(value => ({ value, label: t(KIND_LABELS[value]) })), onChange: value => setKind(value) }) }), _jsxs(Row, { id: "dsb-entry-key", label: t('promptEntryKey'), hint: t('promptEntryKeyHint'), invalid: keyProblem, problem: t('promptEntryKeyInvalid'), labels: rowLabels(t), children: [entry ? _jsx("code", { children: entry.key }) : _jsxs(_Fragment, { children: [_jsx(TextInput, { id: "dsb-entry-key", value: key, list: "dsb-entry-keys", code: true, disabled: disabled, invalid: keyProblem, placeholder: kind === 'errorHints' ? 'DEADLINE' : kind === 'groups' ? 'act' : 'act.click', onChange: setKey }), _jsx("datalist", { id: "dsb-entry-keys", children: Object.keys(known ?? {}).map(name => _jsx("option", { value: name }, name)) })] }), unknown ? _jsx("p", { className: css.rowHint, role: "note", children: t('promptEntryUnknown') }) : null] }), kind === 'errorHints'
105
+ ? field(t('promptEntryText'), 'dsb-entry-text', text, setText, caps.text, baseText, 6)
106
+ : _jsxs(_Fragment, { children: [field(t('promptEntrySummary'), 'dsb-entry-summary', summary, setSummary, caps.summary, baseSummary, 3), kind === 'actions' ? field(t('promptEntryNotes'), 'dsb-entry-notes', notes, setNotes, caps.notes, baseNotes, 8) : null] })] });
107
+ }
108
+ /** The entries you changed. */
109
+ function EntryList({ card }) {
110
+ const { t } = card;
111
+ const { state, disabled } = usePrompts(card);
112
+ const [dialog, setDialog] = useState();
113
+ return _jsxs(_Fragment, { children: [_jsx(SubHead, { children: t('promptsEntriesTitle') }), _jsx("p", { className: css.rowHint, children: t('promptsEntriesHint') }), _jsxs("div", { className: css.list, "data-dsb-entry-list": true, children: [state.entries.length === 0 ? _jsx("p", { className: css.empty, children: t('promptsEntriesEmpty') }) : null, state.entries.map(entry => _jsx(Item, { data: `${entry.kind}:${entry.key}`, title: _jsx("code", { children: entry.key }), badges: _jsx(Badge, { tone: "neutral", children: t(KIND_LABELS[entry.kind]) }), meta: entry.summary ?? entry.text ?? entry.notes, actions: _jsx(Btn, { disabled: disabled, onClick: () => setDialog({ entry }), data: "entry-edit", children: t('edit') }) }, `${entry.kind}:${entry.key}`))] }), _jsx("div", { children: _jsx(Btn, { disabled: disabled, onClick: () => setDialog({}), data: "entry-add", children: t('promptsEntryAdd') }) }), dialog ? _jsx(EntryDialog, { card: card, entry: dialog.entry, onClose: () => setDialog(undefined) }, dialog.entry ? `${dialog.entry.kind}:${dialog.entry.key}` : '\u0000new') : null] });
114
+ }
115
+ /** The default text, commented YAML or JSON, to copy. */
116
+ function ExportDialog({ card, onClose }) {
117
+ const { t } = card;
118
+ const { status } = usePrompts(card);
119
+ const [form, setForm] = useState('yaml');
120
+ const [copied, setCopied] = useState(false);
121
+ const lang = t('lang');
122
+ const { exportPromptDefaults, exportPromptYaml } = card;
123
+ useEffect(() => { void exportPromptDefaults(); void exportPromptYaml(lang); }, [exportPromptDefaults, exportPromptYaml, lang]);
124
+ const shown = form === 'yaml' ? (status.defaultsYaml?.lang === lang ? status.defaultsYaml.text : undefined) : status.defaults;
125
+ const failed = form === 'yaml' ? status.yamlFailed : status.defaultsFailed;
126
+ return _jsxs(Dialog, { open: true, wide: true, title: t('promptExportTitle'), closeLabel: t('close'), description: t('promptExportHint'), onClose: onClose, footer: _jsxs(_Fragment, { children: [_jsx(Btn, { disabled: shown === undefined, onClick: () => { void navigator.clipboard?.writeText(shown ?? '').then(() => setCopied(true)).catch(() => undefined); }, data: "export-copy", children: copied ? t('promptExportCopied') : t('promptExportCopy') }), _jsx(Btn, { primary: true, onClick: onClose, children: t('close') })] }), children: [_jsx(SegmentedControl, { id: "dsb-export-form", label: t('promptExportTitle'), value: form, onChange: next => { setForm(next); setCopied(false); }, options: [{ value: 'yaml', label: t('promptExportYaml') }, { value: 'json', label: t('promptExportJson') }] }), failed ? _jsx("p", { className: "dsb-bad", role: "alert", children: t('promptExportFailed') })
127
+ : _jsx("textarea", { className: `${css.input} ${css.textarea} ${css.code}`, rows: 16, readOnly: true, spellCheck: false, "aria-label": t('promptExportTitle'), value: shown ?? t('promptExportLoading'), onFocus: event => event.currentTarget.select(), "data-dsh-browser-prompts-defaults": true })] });
128
+ }
129
+ export function PromptsGroup({ card }) {
130
+ const { t } = card;
131
+ const { state, disabled } = usePrompts(card);
132
+ const [exporting, setExporting] = useState(false);
133
+ const overridden = state.overridden;
134
+ return _jsxs(Group, { id: "prompts", title: t('groupPrompts'), summary: t('groupPromptsSub'), badges: overridden ? _jsx(Badge, { tone: "info", children: t('overridden') }) : null, children: [_jsxs("div", { className: css.stack, "data-dsb-field": "prompts", "data-dsh-browser-prompts": true, children: [_jsx(StatusLine, { card: card }), _jsx(Row, { label: t('promptsSkillEnabled'), hint: t('promptsSkillEnabledHint'), labels: rowLabels(t), inline: true, children: _jsx(Toggle, { label: t('promptsSkillEnabled'), checked: state.skillEnabled, disabled: disabled, onChange: card.setPromptSkillEnabled }) }), _jsx(TextList, { card: card }), _jsx(EntryList, { card: card }), _jsx("div", { "data-dsh-browser-prompts-export": true, children: _jsx(Btn, { onClick: () => setExporting(true), data: "export-open", children: t('promptExportOpen') }) }), _jsx("p", { className: css.notice, role: "note", children: t('promptsRestart') })] }), exporting ? _jsx(ExportDialog, { card: card, onClose: () => setExporting(false) }) : null] });
135
+ }
136
+ //# sourceMappingURL=group-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-prompts.js","sourceRoot":"","sources":["../../src/client/group-prompts.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +1,11 @@
1
1
  import type { PropsLocale } from '@deepseek-ai/dsh-client-ui-slots';
2
2
  import type { Context } from './context-types.ts';
3
3
  import { type BrowserCardState } from './form.ts';
4
- import type { PromptTextFieldId } from './prompts-form.ts';
4
+ import type { PromptExtraKind, PromptExtraValue, PromptTextFieldId } from './prompts-form.ts';
5
+ import type { AuthProfileEntry } from './auth-profiles-form.ts';
6
+ import type { PolicyFieldName } from './policy-fields.ts';
5
7
  import { type PromptsStatusState } from './prompts-status-client.ts';
8
+ import { type PolicyStatusState } from './policy-status-client.ts';
6
9
  import { SETTINGS_NAMESPACE } from './settings-namespace.ts';
7
10
  import { type AutomationAssetsState } from './automation-assets-client.ts';
8
11
  import type { AutomationAsset, AutomationAssetStatus } from '../automation-assets.ts';
@@ -18,14 +21,31 @@ export type BrowserSettingsCardProps = PropsLocale<typeof NS> & {
18
21
  resetField: (field: string) => void;
19
22
  save: () => void;
20
23
  discard: () => void;
24
+ /** The default-parameters editor (one `key = value` text over the plugin-wide defaults). */
25
+ editProperties: (text: string) => void;
26
+ /** The language of the comments in the advanced text (`zh` or `en`). */
27
+ setPropertyLanguage: (lang: string) => void;
28
+ resetProperty: (key: string) => void;
21
29
  editPromptText: (id: PromptTextFieldId, text: string) => void;
22
30
  setPromptSkillEnabled: (enabled: boolean) => void;
23
31
  editPromptExtras: (text: string) => void;
24
32
  resetPromptExtras: () => void;
33
+ /** One key of `usagePolicy` or `automationAssets` from its own control; an empty text puts the default back. */
34
+ editPolicyKey: (field: PolicyFieldName, key: string, text: string) => void;
35
+ /** The login-profile list: add or replace one profile, or remove one, in the staged configuration. */
36
+ saveAuthProfile: (id: string, entry: AuthProfileEntry) => void;
37
+ removeAuthProfile: (id: string) => void;
25
38
  usePromptsStatus: <R>(selector: (snapshot: PromptsStatusState) => R) => R;
26
39
  refreshPromptsStatus: () => void;
27
40
  exportPromptDefaults: () => Promise<void>;
41
+ /** The default texts as commented YAML, in the given language (`en` or `zh`). */
42
+ exportPromptYaml: (lang: string) => Promise<void>;
43
+ /** One entry of the groups / actions / errorHints overrides: a group summary, an action's summary and notes, or an error hint. */
44
+ setPromptExtra: (kind: PromptExtraKind, key: string, value: PromptExtraValue | undefined) => void;
28
45
  hidePromptDefaults: () => void;
46
+ usePolicyStatus: <R>(selector: (snapshot: PolicyStatusState) => R) => R;
47
+ refreshPolicyStatus: () => void;
48
+ clearPolicyOverlay: (scope?: 'all' | 'usagePolicy' | 'authProfile', id?: string) => Promise<void>;
29
49
  useAutomationAssets: <R>(selector: (snapshot: AutomationAssetsState) => R) => R;
30
50
  refreshAutomationAssets: () => void;
31
51
  selectAutomationAsset: (id?: string) => void;
@@ -1,5 +1,6 @@
1
1
  import { BrowserSettingsController } from "./form.js";
2
2
  import { PromptsStatusController } from "./prompts-status-client.js";
3
+ import { PolicyStatusController } from "./policy-status-client.js";
3
4
  import { SettingsCard } from "./SettingsCard.js";
4
5
  import { en, zh } from "./locales.js";
5
6
  import { ensureStyles } from "./styles.js";
@@ -14,11 +15,15 @@ export function apply(ctx) {
14
15
  ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'dsh-browser: settings dictionaries');
15
16
  // The Host derives the settings page from the plugin entry's own Config
16
17
  // schema, keyed by the loader entry id; the shared form service reads it.
17
- const controller = new BrowserSettingsController(ctx.configForms.get(SETTINGS_NAMESPACE));
18
- const assets = new AutomationAssetsController(ctx.connection.rpc);
19
- const prompts = new PromptsStatusController(ctx.connection.rpc);
18
+ const rpc = ctx.connection.rpc;
19
+ const assets = new AutomationAssetsController(rpc);
20
+ const prompts = new PromptsStatusController(rpc);
21
+ // The form compares prompt text with the plugin's own default text, which the prompts controller loads.
22
+ const controller = new BrowserSettingsController(ctx.configForms.get(SETTINGS_NAMESPACE), () => prompts.promptDefaults());
23
+ const policy = new PolicyStatusController(ctx.connection.rpc);
20
24
  ctx.effect(() => () => controller.dispose(), 'dsh-browser: settings controller');
21
25
  ctx.effect(() => () => prompts.dispose(), 'dsh-browser: prompts status controller');
26
+ ctx.effect(() => () => policy.dispose(), 'dsh-browser: policy status controller');
22
27
  ctx.effect(() => () => assets.dispose(), 'dsh-browser: automation assets controller');
23
28
  // External bundles own their keyed configuration on the bundle's detail
24
29
  // page; `plugins.item` is reserved for official host-plane plugins.
@@ -28,7 +33,8 @@ export function apply(ctx) {
28
33
  const settingsProps = controller.inject();
29
34
  const assetProps = assets.inject();
30
35
  const promptsProps = prompts.inject();
31
- return { ...settingsProps, ...assetProps, ...promptsProps, hooks: { ...settingsProps.hooks, ...assetProps.hooks, ...promptsProps.hooks } };
36
+ const policyProps = policy.inject();
37
+ return { ...settingsProps, ...assetProps, ...promptsProps, ...policyProps, hooks: { ...settingsProps.hooks, ...assetProps.hooks, ...promptsProps.hooks, ...policyProps.hooks } };
32
38
  },
33
39
  }, SettingsCard))), 'dsh-browser: settings page');
34
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAyB,MAAM,WAAW,CAAA;AAE5E,OAAO,EAAE,uBAAuB,EAA2B,MAAM,4BAA4B,CAAA;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAA;AACjD,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,0BAA0B,EAA8B,MAAM,+BAA+B,CAAA;AAItG,MAAM,CAAC,MAAM,IAAI,GAAG,oBAAoB,CAAA;AACxC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,CAAC,CAAA;AACtE,MAAM,CAAC,MAAM,EAAE,GAAG,kBAAkB,CAAA;AACpC,OAAO,EAAE,kBAAkB,EAAE,CAAA;AA8C7B,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,YAAY,EAAE,CAAA;IACd,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,oCAAoC,CAAC,CAAA;IAE3F,wEAAwE;IACxE,0EAA0E;IAC1E,MAAM,UAAU,GAAG,IAAI,yBAAyB,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAA0B,kBAAkB,CAAC,CAAC,CAAA;IAClH,MAAM,MAAM,GAAG,IAAI,0BAA0B,CAAE,GAA+D,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IAC9H,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAE,GAA+D,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IAC5H,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,kCAAkC,CAAC,CAAA;IAChF,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,wCAAwC,CAAC,CAAA;IACnF,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,2CAA2C,CAAC,CAAA;IAErF,wEAAwE;IACxE,oEAAoE;IACpE,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,CACtE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAC7C,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjB,IAAI,EAAE,uBAAuB,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,EAAE;QACrE,MAAM,EAAE,GAAG,EAAE;YACX,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,EAAE,CAAA;YACzC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;YAClC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;YACrC,OAAO,EAAE,GAAG,aAAa,EAAE,GAAG,UAAU,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,EAAE,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,CAAA;QAC5I,CAAC;KACF,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAA;AACvD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Labels and one-line hints for every key of `usagePolicy` and `automationAssets`, plus the words of the limits group.
3
+ * A key added to `../policy-keys.ts` needs its entries here: the render test asks for every one.
4
+ * @module dsh-browser/client/locales-policy
5
+ */
6
+ export declare const zhPolicy: {
7
+ readonly limitsUsageTitle: "调用缓冲";
8
+ readonly limitsUsageSub: "保护目标站点:限制并发、突发与爬取预算,遇到 429/503 自动退避。";
9
+ readonly limitsAssetsFold: "资产策略(高级)";
10
+ readonly limitsAssetsFoldHint: "何时建议总结、数量与上下文预算、激活条件";
11
+ readonly limitsRawFold: "高级:原始 JSON";
12
+ readonly limitsRawHint: "与上面的输入框是同一份数据;JSON 里只写与默认不同的键。";
13
+ readonly limitsRawUsage: "调用缓冲 JSON";
14
+ readonly limitsRawAssets: "资产策略 JSON";
15
+ readonly policyKeys: "可用键名:";
16
+ readonly limitsOverlayNote: "覆盖层生效:{value}(基线 {baseline})";
17
+ readonly limitsUnitMs: "毫秒";
18
+ readonly limitsUnitDays: "天";
19
+ readonly limitsUnitTokens: "token";
20
+ readonly limitsUnitCount: "";
21
+ readonly limitsUnitRatio: "比例";
22
+ readonly limitsSectionCandidates: "候选与建议";
23
+ readonly limitsSectionLibrary: "资产库与上下文";
24
+ readonly limitsSectionActivation: "激活与测试";
25
+ readonly invalidNumber: "请填数字(整数键不能带小数)。";
26
+ readonly invalidChoice: "不是可选的值。";
27
+ readonly invalidRange: "超出范围,插件会悄悄截断到边界,所以这里不让保存。";
28
+ readonly pk_minDelayMs: "最小间隔";
29
+ readonly pk_minDelayMsHint: "同一主机两次请求之间至少等待。";
30
+ readonly pk_maxConcurrency: "最大并发";
31
+ readonly pk_maxConcurrencyHint: "同时进行的请求数。";
32
+ readonly pk_burst: "突发额度";
33
+ readonly pk_burstHint: "短时间内允许连续发出的请求数。";
34
+ readonly pk_maxPagesPerRun: "单次爬取页数";
35
+ readonly pk_maxPagesPerRunHint: "一次 crawl 最多访问的页面数。";
36
+ readonly pk_maxDepth: "爬取深度";
37
+ readonly pk_maxDepthHint: "从起点出发最多跟进的链接层数。";
38
+ readonly pk_retryLimit: "重试次数";
39
+ readonly pk_retryLimitHint: "遇到可重试错误时的最大重试数。";
40
+ readonly pk_backoffBaseMs: "退避基数";
41
+ readonly pk_backoffBaseMsHint: "重试等待的起始时长,逐次加倍。";
42
+ readonly pk_cooldownMs: "冷却时长";
43
+ readonly pk_cooldownMsHint: "收到 429/503 后暂停该主机的时长。";
44
+ readonly pk_persistenceMode: "持久化模式";
45
+ readonly pk_persistenceModeHint: "off 不记录;manual 仅手动;suggest 记录并建议(默认);auto-draft 自动生成草稿。";
46
+ readonly pk_minSuccessfulRuns: "成功次数门槛";
47
+ readonly pk_minSuccessfulRunsHint: "同一操作成功多少次才建议总结。";
48
+ readonly pk_minDistinctSessions: "会话数门槛";
49
+ readonly pk_minDistinctSessionsHint: "成功分布在至少几个不同会话。";
50
+ readonly pk_successWindowDays: "统计窗口";
51
+ readonly pk_successWindowDaysHint: "只统计最近多少天内的成功。";
52
+ readonly pk_minSuccessRate: "最低成功率";
53
+ readonly pk_minSuccessRateHint: "0.5–1 的比例,如 0.8 即 80%。";
54
+ readonly pk_maxCandidates: "候选上限";
55
+ readonly pk_maxCandidatesHint: "同时保留的候选数量。";
56
+ readonly pk_candidateTtlDays: "候选保留天数";
57
+ readonly pk_candidateTtlDaysHint: "候选多久没再出现就丢弃。";
58
+ readonly pk_maxSuggestionsPerDay: "每日建议上限";
59
+ readonly pk_maxSuggestionsPerDayHint: "每天最多提示几次“是否总结”;0 为不提示。";
60
+ readonly pk_enabled: "启用资产库";
61
+ readonly pk_enabledHint: "关闭后不记录、不检索自动化资产。";
62
+ readonly pk_directory: "资产目录";
63
+ readonly pk_directoryHint: "绝对路径;留空用 $DSH_HOME/data/browser/automations。";
64
+ readonly pk_maxDrafts: "草稿上限";
65
+ readonly pk_maxDraftsHint: "同时保留的草稿数。";
66
+ readonly pk_maxActiveAssets: "激活资产上限";
67
+ readonly pk_maxActiveAssetsHint: "同时处于激活状态的资产数。";
68
+ readonly pk_retrievalTopK: "检索条数";
69
+ readonly pk_retrievalTopKHint: "每次最多向模型展示几条相关资产摘要。";
70
+ readonly pk_catalogTokenBudget: "目录 token 预算";
71
+ readonly pk_catalogTokenBudgetHint: "资产摘要占用模型上下文的上限。";
72
+ readonly pk_activationMode: "激活方式";
73
+ readonly pk_activationModeHint: "manual 必须手动激活(默认);auto-tested 通过测试后自动激活。";
74
+ readonly pk_modelDevelopmentEnabled: "允许模型开发资产";
75
+ readonly pk_modelDevelopmentEnabledHint: "关闭后 agent 看不到 automation.develop,需重启生效。";
76
+ readonly pk_maxModelDraftWritesPerSession: "模型每会话写草稿次数";
77
+ readonly pk_maxModelDraftWritesPerSessionHint: "限制一个会话里模型保存草稿的次数。";
78
+ readonly pk_maxTestCredentials: "保留的测试凭据数";
79
+ readonly pk_maxTestCredentialsHint: "每个资产保留最近几次测试结果。";
80
+ readonly pk_minInputSetsForActivation: "激活所需输入组数";
81
+ readonly pk_minInputSetsForActivationHint: "带输入的资产至少要用几组不同输入测试通过才能激活。";
82
+ };
83
+ export declare const enPolicy: Record<keyof typeof zhPolicy, string>;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Labels and one-line hints for every key of `usagePolicy` and `automationAssets`, plus the words of the limits group.
3
+ * A key added to `../policy-keys.ts` needs its entries here: the render test asks for every one.
4
+ * @module dsh-browser/client/locales-policy
5
+ */
6
+ export const zhPolicy = {
7
+ limitsUsageTitle: '调用缓冲', limitsUsageSub: '保护目标站点:限制并发、突发与爬取预算,遇到 429/503 自动退避。', limitsAssetsFold: '资产策略(高级)', limitsAssetsFoldHint: '何时建议总结、数量与上下文预算、激活条件',
8
+ limitsRawFold: '高级:原始 JSON', limitsRawHint: '与上面的输入框是同一份数据;JSON 里只写与默认不同的键。', limitsRawUsage: '调用缓冲 JSON', limitsRawAssets: '资产策略 JSON', policyKeys: '可用键名:',
9
+ limitsOverlayNote: '覆盖层生效:{value}(基线 {baseline})',
10
+ limitsUnitMs: '毫秒', limitsUnitDays: '天', limitsUnitTokens: 'token', limitsUnitCount: '', limitsUnitRatio: '比例',
11
+ limitsSectionCandidates: '候选与建议', limitsSectionLibrary: '资产库与上下文', limitsSectionActivation: '激活与测试',
12
+ invalidNumber: '请填数字(整数键不能带小数)。', invalidChoice: '不是可选的值。', invalidRange: '超出范围,插件会悄悄截断到边界,所以这里不让保存。',
13
+ pk_minDelayMs: '最小间隔', pk_minDelayMsHint: '同一主机两次请求之间至少等待。', pk_maxConcurrency: '最大并发', pk_maxConcurrencyHint: '同时进行的请求数。', pk_burst: '突发额度', pk_burstHint: '短时间内允许连续发出的请求数。',
14
+ pk_maxPagesPerRun: '单次爬取页数', pk_maxPagesPerRunHint: '一次 crawl 最多访问的页面数。', pk_maxDepth: '爬取深度', pk_maxDepthHint: '从起点出发最多跟进的链接层数。', pk_retryLimit: '重试次数', pk_retryLimitHint: '遇到可重试错误时的最大重试数。',
15
+ pk_backoffBaseMs: '退避基数', pk_backoffBaseMsHint: '重试等待的起始时长,逐次加倍。', pk_cooldownMs: '冷却时长', pk_cooldownMsHint: '收到 429/503 后暂停该主机的时长。',
16
+ pk_persistenceMode: '持久化模式', pk_persistenceModeHint: 'off 不记录;manual 仅手动;suggest 记录并建议(默认);auto-draft 自动生成草稿。',
17
+ pk_minSuccessfulRuns: '成功次数门槛', pk_minSuccessfulRunsHint: '同一操作成功多少次才建议总结。', pk_minDistinctSessions: '会话数门槛', pk_minDistinctSessionsHint: '成功分布在至少几个不同会话。',
18
+ pk_successWindowDays: '统计窗口', pk_successWindowDaysHint: '只统计最近多少天内的成功。', pk_minSuccessRate: '最低成功率', pk_minSuccessRateHint: '0.5–1 的比例,如 0.8 即 80%。',
19
+ pk_maxCandidates: '候选上限', pk_maxCandidatesHint: '同时保留的候选数量。', pk_candidateTtlDays: '候选保留天数', pk_candidateTtlDaysHint: '候选多久没再出现就丢弃。', pk_maxSuggestionsPerDay: '每日建议上限', pk_maxSuggestionsPerDayHint: '每天最多提示几次“是否总结”;0 为不提示。',
20
+ pk_enabled: '启用资产库', pk_enabledHint: '关闭后不记录、不检索自动化资产。', pk_directory: '资产目录', pk_directoryHint: '绝对路径;留空用 $DSH_HOME/data/browser/automations。', pk_maxDrafts: '草稿上限', pk_maxDraftsHint: '同时保留的草稿数。',
21
+ pk_maxActiveAssets: '激活资产上限', pk_maxActiveAssetsHint: '同时处于激活状态的资产数。', pk_retrievalTopK: '检索条数', pk_retrievalTopKHint: '每次最多向模型展示几条相关资产摘要。', pk_catalogTokenBudget: '目录 token 预算', pk_catalogTokenBudgetHint: '资产摘要占用模型上下文的上限。',
22
+ pk_activationMode: '激活方式', pk_activationModeHint: 'manual 必须手动激活(默认);auto-tested 通过测试后自动激活。', pk_modelDevelopmentEnabled: '允许模型开发资产', pk_modelDevelopmentEnabledHint: '关闭后 agent 看不到 automation.develop,需重启生效。',
23
+ pk_maxModelDraftWritesPerSession: '模型每会话写草稿次数', pk_maxModelDraftWritesPerSessionHint: '限制一个会话里模型保存草稿的次数。', pk_maxTestCredentials: '保留的测试凭据数', pk_maxTestCredentialsHint: '每个资产保留最近几次测试结果。',
24
+ pk_minInputSetsForActivation: '激活所需输入组数', pk_minInputSetsForActivationHint: '带输入的资产至少要用几组不同输入测试通过才能激活。',
25
+ };
26
+ export const enPolicy = {
27
+ limitsUsageTitle: 'Call buffer', limitsUsageSub: 'Protects target sites: bounds concurrency, bursts and crawl budget, and backs off on 429/503.', limitsAssetsFold: 'Asset policy (advanced)', limitsAssetsFoldHint: 'when to suggest summarizing, counts and context budget, activation',
28
+ limitsRawFold: 'Advanced: raw JSON', limitsRawHint: 'The same data as the inputs above; write only the keys that differ from the default.', limitsRawUsage: 'Call buffer JSON', limitsRawAssets: 'Asset policy JSON', policyKeys: 'Keys:',
29
+ limitsOverlayNote: 'Overlay in force: {value} (baseline {baseline})',
30
+ limitsUnitMs: 'ms', limitsUnitDays: 'days', limitsUnitTokens: 'tokens', limitsUnitCount: '', limitsUnitRatio: 'ratio',
31
+ limitsSectionCandidates: 'Candidates and suggestions', limitsSectionLibrary: 'Library and context', limitsSectionActivation: 'Activation and tests',
32
+ invalidNumber: 'Enter a number (whole-number keys take no decimals).', invalidChoice: 'Not an allowed value.', invalidRange: 'Out of range: the plugin would quietly clamp it, so saving is refused.',
33
+ pk_minDelayMs: 'Minimum gap', pk_minDelayMsHint: 'Least wait between two requests to one host.', pk_maxConcurrency: 'Max concurrency', pk_maxConcurrencyHint: 'Requests in flight at once.', pk_burst: 'Burst allowance', pk_burstHint: 'Requests allowed back to back in a short window.',
34
+ pk_maxPagesPerRun: 'Pages per crawl', pk_maxPagesPerRunHint: 'Most pages one crawl may visit.', pk_maxDepth: 'Crawl depth', pk_maxDepthHint: 'Most link levels followed from the start.', pk_retryLimit: 'Retries', pk_retryLimitHint: 'Most retries after a retryable error.',
35
+ pk_backoffBaseMs: 'Backoff base', pk_backoffBaseMsHint: 'First retry wait; doubles each time.', pk_cooldownMs: 'Cooldown', pk_cooldownMsHint: 'How long a host pauses after a 429/503.',
36
+ pk_persistenceMode: 'Persistence mode', pk_persistenceModeHint: 'off records nothing; manual by hand only; suggest records and suggests (default); auto-draft writes drafts itself.',
37
+ pk_minSuccessfulRuns: 'Successes needed', pk_minSuccessfulRunsHint: 'Successful runs before summarizing is suggested.', pk_minDistinctSessions: 'Sessions needed', pk_minDistinctSessionsHint: 'The successes span at least this many sessions.',
38
+ pk_successWindowDays: 'Counting window', pk_successWindowDaysHint: 'Only successes this recent count.', pk_minSuccessRate: 'Minimum success rate', pk_minSuccessRateHint: 'A ratio from 0.5 to 1; 0.8 is 80%.',
39
+ pk_maxCandidates: 'Candidate limit', pk_maxCandidatesHint: 'Candidates kept at once.', pk_candidateTtlDays: 'Candidate lifetime', pk_candidateTtlDaysHint: 'Days without a repeat before a candidate is dropped.', pk_maxSuggestionsPerDay: 'Suggestions per day', pk_maxSuggestionsPerDayHint: 'At most this many "summarize?" prompts a day; 0 turns them off.',
40
+ pk_enabled: 'Enable the asset library', pk_enabledHint: 'Off: nothing is recorded or retrieved.', pk_directory: 'Asset directory', pk_directoryHint: 'Absolute path; empty uses $DSH_HOME/data/browser/automations.', pk_maxDrafts: 'Draft limit', pk_maxDraftsHint: 'Drafts kept at once.',
41
+ pk_maxActiveAssets: 'Active asset limit', pk_maxActiveAssetsHint: 'Assets active at once.', pk_retrievalTopK: 'Retrieved entries', pk_retrievalTopKHint: 'Related asset summaries shown to the model per lookup.', pk_catalogTokenBudget: 'Catalog token budget', pk_catalogTokenBudgetHint: 'Most model context the asset summaries may use.',
42
+ pk_activationMode: 'Activation', pk_activationModeHint: 'manual needs a person to activate (default); auto-tested activates once tests pass.', pk_modelDevelopmentEnabled: 'Let the model develop assets', pk_modelDevelopmentEnabledHint: 'Off: the agent does not see automation.develop; restart to apply.',
43
+ pk_maxModelDraftWritesPerSession: 'Model draft saves per session', pk_maxModelDraftWritesPerSessionHint: 'Limits how often the model saves a draft in one session.', pk_maxTestCredentials: 'Test results kept', pk_maxTestCredentialsHint: 'Recent test results kept per asset.',
44
+ pk_minInputSetsForActivation: 'Input sets needed to activate', pk_minInputSetsForActivationHint: 'An asset with inputs must pass tests on at least this many different input sets.',
45
+ };
46
+ //# sourceMappingURL=locales-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locales-policy.js","sourceRoot":"","sources":["../../src/client/locales-policy.ts"],"names":[],"mappings":"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"}