@anweat/dsh-browser 0.1.17 → 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.
Files changed (162) hide show
  1. package/README.md +238 -71
  2. package/assets/skills/dsh-browser/SKILL.md +120 -0
  3. package/assets/skills/dsh-browser/references/develop.md +48 -0
  4. package/assets/skills/dsh-browser/references/observe.md +91 -0
  5. package/assets/skills/dsh-browser/references/opencli.md +25 -0
  6. package/assets/skills/dsh-browser/references/recipes.md +149 -0
  7. package/assets/skills/dsh-browser/references/userscripts.md +44 -0
  8. package/cordis.patch.yml +4 -0
  9. package/lib/actions/act.d.ts +3 -0
  10. package/lib/actions/act.js +147 -0
  11. package/lib/actions/act.js.map +1 -0
  12. package/lib/actions/automation.d.ts +3 -0
  13. package/lib/actions/automation.js +356 -0
  14. package/lib/actions/automation.js.map +1 -0
  15. package/lib/actions/crawl.d.ts +3 -0
  16. package/lib/actions/crawl.js +28 -0
  17. package/lib/actions/crawl.js.map +1 -0
  18. package/lib/actions/errors.d.ts +53 -0
  19. package/lib/actions/errors.js +178 -0
  20. package/lib/actions/errors.js.map +1 -0
  21. package/lib/actions/index-view.d.ts +42 -0
  22. package/lib/actions/index-view.js +268 -0
  23. package/lib/actions/index-view.js.map +1 -0
  24. package/lib/actions/inspect.d.ts +3 -0
  25. package/lib/actions/inspect.js +35 -0
  26. package/lib/actions/inspect.js.map +1 -0
  27. package/lib/actions/observe.d.ts +3 -0
  28. package/lib/actions/observe.js +121 -0
  29. package/lib/actions/observe.js.map +1 -0
  30. package/lib/actions/opencli.d.ts +3 -0
  31. package/lib/actions/opencli.js +51 -0
  32. package/lib/actions/opencli.js.map +1 -0
  33. package/lib/actions/registry.d.ts +35 -0
  34. package/lib/actions/registry.js +89 -0
  35. package/lib/actions/registry.js.map +1 -0
  36. package/lib/actions/run.d.ts +34 -0
  37. package/lib/actions/run.js +226 -0
  38. package/lib/actions/run.js.map +1 -0
  39. package/lib/actions/runtime.d.ts +3 -0
  40. package/lib/actions/runtime.js +33 -0
  41. package/lib/actions/runtime.js.map +1 -0
  42. package/lib/actions/schema.d.ts +31 -0
  43. package/lib/actions/schema.js +309 -0
  44. package/lib/actions/schema.js.map +1 -0
  45. package/lib/actions/script.d.ts +3 -0
  46. package/lib/actions/script.js +97 -0
  47. package/lib/actions/script.js.map +1 -0
  48. package/lib/actions/shared.d.ts +31 -0
  49. package/lib/actions/shared.js +45 -0
  50. package/lib/actions/shared.js.map +1 -0
  51. package/lib/actions/surface.d.ts +22 -0
  52. package/lib/actions/surface.js +18 -0
  53. package/lib/actions/surface.js.map +1 -0
  54. package/lib/actions/target.d.ts +3 -0
  55. package/lib/actions/target.js +66 -0
  56. package/lib/actions/target.js.map +1 -0
  57. package/lib/actions/types.d.ts +181 -0
  58. package/lib/actions/types.js +48 -0
  59. package/lib/actions/types.js.map +1 -0
  60. package/lib/activation-rules.d.ts +29 -0
  61. package/lib/activation-rules.js +33 -0
  62. package/lib/activation-rules.js.map +1 -0
  63. package/lib/approval-policy.d.ts +40 -2
  64. package/lib/approval-policy.js +184 -97
  65. package/lib/approval-policy.js.map +1 -1
  66. package/lib/automation-assets-rpc.d.ts +8 -2
  67. package/lib/automation-assets-rpc.js +67 -6
  68. package/lib/automation-assets-rpc.js.map +1 -1
  69. package/lib/automation-assets.d.ts +152 -4
  70. package/lib/automation-assets.js +255 -15
  71. package/lib/automation-assets.js.map +1 -1
  72. package/lib/automation-convert.d.ts +23 -0
  73. package/lib/automation-convert.js +110 -0
  74. package/lib/automation-convert.js.map +1 -0
  75. package/lib/automation-development.d.ts +26 -0
  76. package/lib/automation-development.js +47 -0
  77. package/lib/automation-development.js.map +1 -1
  78. package/lib/automation-execution.d.ts +57 -1
  79. package/lib/automation-execution.js +167 -11
  80. package/lib/automation-execution.js.map +1 -1
  81. package/lib/automation-journal.d.ts +92 -0
  82. package/lib/automation-journal.js +449 -0
  83. package/lib/automation-journal.js.map +1 -0
  84. package/lib/automation-v2.d.ts +138 -0
  85. package/lib/automation-v2.js +631 -0
  86. package/lib/automation-v2.js.map +1 -0
  87. package/lib/automation.d.ts +82 -5
  88. package/lib/automation.js +239 -82
  89. package/lib/automation.js.map +1 -1
  90. package/lib/browser-service.d.ts +304 -32
  91. package/lib/browser-service.js +631 -182
  92. package/lib/browser-service.js.map +1 -1
  93. package/lib/client/SettingsCard.js +95 -57
  94. package/lib/client/SettingsCard.js.map +1 -1
  95. package/lib/client/asset-editor.d.ts +55 -0
  96. package/lib/client/asset-editor.js +101 -0
  97. package/lib/client/asset-editor.js.map +1 -0
  98. package/lib/client/automation-assets-client.d.ts +99 -2
  99. package/lib/client/automation-assets-client.js +243 -10
  100. package/lib/client/automation-assets-client.js.map +1 -1
  101. package/lib/client/form.d.ts +48 -4
  102. package/lib/client/form.js +142 -29
  103. package/lib/client/form.js.map +1 -1
  104. package/lib/client/index.d.ts +25 -2
  105. package/lib/client/index.js +5 -1
  106. package/lib/client/index.js.map +1 -1
  107. package/lib/client/locales.d.ts +85 -6
  108. package/lib/client/locales.js +64 -12
  109. package/lib/client/locales.js.map +1 -1
  110. package/lib/client/prompts-form.d.ts +67 -0
  111. package/lib/client/prompts-form.js +140 -0
  112. package/lib/client/prompts-form.js.map +1 -0
  113. package/lib/client/prompts-status-client.d.ts +34 -0
  114. package/lib/client/prompts-status-client.js +53 -0
  115. package/lib/client/prompts-status-client.js.map +1 -0
  116. package/lib/client.js +1914 -329
  117. package/lib/client.js.map +1 -1
  118. package/lib/config.d.ts +50 -1
  119. package/lib/config.js +31 -1
  120. package/lib/config.js.map +1 -1
  121. package/lib/dialogs.d.ts +37 -0
  122. package/lib/dialogs.js +73 -0
  123. package/lib/dialogs.js.map +1 -0
  124. package/lib/freedom.d.ts +23 -7
  125. package/lib/freedom.js +48 -59
  126. package/lib/freedom.js.map +1 -1
  127. package/lib/index.d.ts +4 -4
  128. package/lib/index.js +36 -10
  129. package/lib/index.js.map +1 -1
  130. package/lib/journal.d.ts +109 -0
  131. package/lib/journal.js +238 -0
  132. package/lib/journal.js.map +1 -0
  133. package/lib/locator.d.ts +82 -0
  134. package/lib/locator.js +190 -0
  135. package/lib/locator.js.map +1 -0
  136. package/lib/observe-script.d.ts +27 -0
  137. package/lib/observe-script.js +565 -0
  138. package/lib/observe-script.js.map +1 -0
  139. package/lib/observe.d.ts +179 -0
  140. package/lib/observe.js +368 -0
  141. package/lib/observe.js.map +1 -0
  142. package/lib/policy-keys.d.ts +30 -0
  143. package/lib/policy-keys.js +34 -0
  144. package/lib/policy-keys.js.map +1 -0
  145. package/lib/prompt-limits.d.ts +30 -0
  146. package/lib/prompt-limits.js +31 -0
  147. package/lib/prompt-limits.js.map +1 -0
  148. package/lib/prompts.d.ts +131 -0
  149. package/lib/prompts.js +295 -0
  150. package/lib/prompts.js.map +1 -0
  151. package/lib/skill.d.ts +100 -0
  152. package/lib/skill.js +181 -0
  153. package/lib/skill.js.map +1 -0
  154. package/lib/tool-defs.d.ts +72 -0
  155. package/lib/tool-defs.js +67 -0
  156. package/lib/tool-defs.js.map +1 -0
  157. package/lib/tools.d.ts +19 -4
  158. package/lib/tools.js +124 -922
  159. package/lib/tools.js.map +1 -1
  160. package/package.json +5 -1
  161. package/scripts/dump-prompts.mjs +29 -0
  162. package/scripts/measure-tool-surface.mjs +190 -0
@@ -1,4 +1,6 @@
1
- function localStore(initial) {
1
+ import { isDirty, parseEditor, parseTestInputs, serializeEditable } from "./asset-editor.js";
2
+ const EMPTY_EDITOR = { text: '', baseline: '', testUrl: '', testInputs: '{}' };
3
+ export function localStore(initial) {
2
4
  let snapshot = initial;
3
5
  const listeners = new Set();
4
6
  return {
@@ -12,9 +14,44 @@ function localStore(initial) {
12
14
  }
13
15
  /** This plugin's private RPC channel, matching the Host half. */
14
16
  const CHANNEL = '/dsh-browser-assets';
17
+ /** A failed RPC call, with the structured details the Host attached (`errorCode`, `reason`, ...). */
18
+ export class AssetCallError extends Error {
19
+ details;
20
+ constructor(message, details = {}) {
21
+ super(message);
22
+ this.details = details;
23
+ this.name = 'AssetCallError';
24
+ }
25
+ get code() { return typeof this.details.errorCode === 'string' ? this.details.errorCode : undefined; }
26
+ }
27
+ const VALIDATION_CODES = new Set(['VALIDATION_FAILED', 'VALIDATION_MISSING']);
28
+ export function noticeFor(error) {
29
+ const message = String(error instanceof Error ? error.message : error).slice(0, 400);
30
+ const code = error instanceof AssetCallError ? error.code : undefined;
31
+ return { kind: code && VALIDATION_CODES.has(code) ? 'validation' : 'backend', message, ...code ? { code } : {} };
32
+ }
33
+ /**
34
+ * The "new recipe" template: schema v2 (typed inputs, locators, a result to extract and a postcondition that checks it),
35
+ * so what a person starts from is what the plugin writes today. Every value is a placeholder to replace; the template
36
+ * itself passes the save validation, which test/automation-assets-client.test.ts holds it to.
37
+ */
38
+ export const NEW_RECIPE = {
39
+ kind: 'recipe', schemaVersion: 2, name: 'New recipe', description: '', domains: ['example.com'], tags: [],
40
+ inputSchema: [{ name: 'keyword', type: 'string', required: true, example: 'example' }],
41
+ recipe: [
42
+ { type: 'fill', locator: { label: 'Search' }, value: '{{keyword}}' },
43
+ { type: 'click', locator: { role: 'button', name: 'Search' } },
44
+ { type: 'extract', locator: { css: '#results' }, as: 'results' },
45
+ ],
46
+ postconditions: [{ output: 'results', nonEmpty: true }],
47
+ };
48
+ const NEW_SCRIPT = {
49
+ kind: 'userscript', name: 'New userscript', description: '', domains: [], tags: [], inputNames: [],
50
+ source: '// ==UserScript==\n// @name New userscript\n// @match https://example.com/*\n// @grant none\n// ==/UserScript==\nreturn { title: document.title }',
51
+ };
15
52
  export class AutomationAssetsController {
16
53
  rpc;
17
- store = localStore({ loading: true, busy: false, failed: false });
54
+ store = localStore({ loading: true, busy: false, failed: false, editor: EMPTY_EDITOR });
18
55
  disposed = false;
19
56
  constructor(rpc) {
20
57
  this.rpc = rpc;
@@ -29,12 +66,32 @@ export class AutomationAssetsController {
29
66
  summarizeAutomationCandidate: (id) => this.mutate('summarize', { id }),
30
67
  dismissAutomationCandidate: (id) => this.mutate('dismiss', { id }),
31
68
  validateAutomationAsset: (id) => this.mutate('validate', { id }),
32
- testAutomationAsset: (id, url, inputs) => this.mutate('test', { id, url, inputs }),
33
- setAutomationAssetStatus: (id, status) => this.mutate('status', { id, status }),
69
+ testAutomationAsset: (id, url, inputs, expectedRevision) => this.mutate('test', { id, url, inputs, ...expectedRevision !== undefined ? { expectedRevision } : {} }),
70
+ setAutomationAssetStatus: (id, status, expectedRevision) => this.mutate('status', { id, status, ...expectedRevision !== undefined ? { expectedRevision } : {} }),
71
+ // The editor: every way of leaving unsaved edits goes through a request/confirm pair.
72
+ editAutomationAsset: (text) => this.edit(text),
73
+ setAssetTestUrl: (value) => this.patchEditor({ testUrl: value, notice: undefined }),
74
+ setAssetTestInputs: (value) => this.patchEditor({ testInputs: value, notice: undefined }),
75
+ requestSelectAutomationAsset: (id) => this.requestLeave({ kind: 'select', id }),
76
+ requestNewAutomationAsset: (assetKind) => this.requestLeave({ kind: 'new', assetKind }),
77
+ requestRefreshAutomationAssets: () => this.requestLeave({ kind: 'refresh' }),
78
+ requestForkAutomationAsset: (id) => this.requestLeave({ kind: 'fork', id }),
79
+ requestConvertAutomationAsset: (id) => this.requestLeave({ kind: 'convert', id }),
80
+ confirmLeaveAutomationAsset: () => this.confirmLeave(),
81
+ cancelLeaveAutomationAsset: () => this.patchEditor({ confirm: undefined }),
82
+ saveEditedAutomationAsset: () => this.saveEdited(),
83
+ saveAndTestAutomationAsset: () => this.saveAndTest(),
84
+ activateAutomationAsset: () => this.activate(),
34
85
  };
35
86
  }
36
87
  snapshot() { return this.store.getSnapshot(); }
37
88
  dispose() { this.disposed = true; }
89
+ /** Whether the editor holds edits that are not saved. */
90
+ dirty() {
91
+ const { editor } = this.store.getSnapshot();
92
+ return isDirty(editor.text, editor.baseline);
93
+ }
94
+ // --- loading -------------------------------------------------------------
38
95
  async refresh() {
39
96
  this.publish({ ...this.store.getSnapshot(), loading: true, failed: false, error: undefined });
40
97
  try {
@@ -45,38 +102,214 @@ export class AutomationAssetsController {
45
102
  this.fail(error);
46
103
  }
47
104
  }
105
+ /** Load one asset into the selection and the editor, replacing whatever the editor held. */
48
106
  async select(id) {
49
107
  if (!id) {
50
- this.publish({ ...this.store.getSnapshot(), selected: undefined });
108
+ this.publish({ ...this.store.getSnapshot(), selected: undefined, editor: { ...this.store.getSnapshot().editor, text: '', baseline: '', notice: undefined, confirm: undefined } });
51
109
  return;
52
110
  }
53
111
  try {
54
112
  const selected = await this.call('get', { id });
55
- this.publish({ ...this.store.getSnapshot(), selected: selected ?? undefined, failed: false, error: undefined });
113
+ this.publish({ ...this.store.getSnapshot(), selected: selected ?? undefined, failed: false, error: undefined, editor: this.editorFor(selected ?? undefined) });
56
114
  }
57
115
  catch (error) {
58
116
  this.fail(error);
59
117
  }
60
118
  }
119
+ editorFor(asset) {
120
+ const previous = this.store.getSnapshot().editor;
121
+ const text = asset ? serializeEditable(asset) : '';
122
+ return { text, baseline: text, testUrl: previous.testUrl, testInputs: previous.testInputs };
123
+ }
124
+ // --- leaving the editor --------------------------------------------------
125
+ requestLeave(leave) {
126
+ if (this.dirty()) {
127
+ this.patchEditor({ confirm: leave });
128
+ return;
129
+ }
130
+ void this.perform(leave);
131
+ }
132
+ confirmLeave() {
133
+ const leave = this.store.getSnapshot().editor.confirm;
134
+ this.patchEditor({ confirm: undefined });
135
+ if (leave)
136
+ void this.perform(leave);
137
+ }
138
+ async perform(leave) {
139
+ switch (leave.kind) {
140
+ case 'select':
141
+ await this.select(leave.id);
142
+ return;
143
+ case 'new':
144
+ this.startNew(leave.assetKind);
145
+ return;
146
+ case 'refresh': {
147
+ await this.refresh();
148
+ const id = this.store.getSnapshot().selected?.id;
149
+ if (id)
150
+ await this.select(id);
151
+ return;
152
+ }
153
+ case 'fork': {
154
+ const draft = await this.run(() => this.call('fork', { id: leave.id }));
155
+ if (draft) {
156
+ await this.reloadSnapshot();
157
+ this.publish({ ...this.store.getSnapshot(), selected: draft, editor: this.editorFor(draft) });
158
+ }
159
+ return;
160
+ }
161
+ case 'convert': {
162
+ const sourceName = this.store.getSnapshot().snapshot?.assets.find(entry => entry.id === leave.id)?.name ?? this.store.getSnapshot().selected?.name ?? '';
163
+ const result = await this.run(() => this.call('convert', { id: leave.id }));
164
+ if (result) {
165
+ await this.reloadSnapshot();
166
+ this.publish({ ...this.store.getSnapshot(), selected: result.draft, editor: { ...this.editorFor(result.draft), converted: { sourceName, notes: result.notes } } });
167
+ }
168
+ }
169
+ }
170
+ }
171
+ startNew(assetKind) {
172
+ const text = JSON.stringify(assetKind === 'recipe' ? NEW_RECIPE : NEW_SCRIPT, null, 2);
173
+ const current = this.store.getSnapshot();
174
+ this.publish({ ...current, selected: undefined, editor: { text, baseline: text, testUrl: current.editor.testUrl, testInputs: current.editor.testInputs } });
175
+ }
176
+ // --- editing, saving, testing, activating --------------------------------
177
+ edit(text) { this.patchEditor({ text, notice: undefined }); }
178
+ /** Save the editor text as a new revision. Resolves to the saved asset, or undefined when nothing was saved (the notice says why). */
179
+ async saveEdited() {
180
+ const { editor, selected } = this.store.getSnapshot();
181
+ const parsed = parseEditor(editor.text);
182
+ if (!parsed.ok) {
183
+ this.patchEditor({ notice: { kind: 'json', message: parsed.message } });
184
+ return undefined;
185
+ }
186
+ if (selected?.status === 'active') {
187
+ this.patchEditor({ notice: { kind: 'refused', message: 'active assets cannot be edited: create a repair draft first' } });
188
+ return undefined;
189
+ }
190
+ const value = parsed.value;
191
+ if (selected?.id)
192
+ value.id = selected.id;
193
+ const saved = await this.run(() => this.call('save', { asset: value }));
194
+ if (!saved)
195
+ return undefined;
196
+ await this.reloadSnapshot();
197
+ this.publish({ ...this.store.getSnapshot(), selected: saved, editor: { ...this.editorFor(saved), notice: undefined } });
198
+ return saved;
199
+ }
200
+ /**
201
+ * One button, one meaning: whatever is in the editor is what gets tested. Unsaved edits are saved first
202
+ * (a new revision), and the test is pinned to that revision, so the test, its credential and a later
203
+ * activation all refer to the content on screen.
204
+ */
205
+ async saveAndTest() {
206
+ const state = this.store.getSnapshot();
207
+ const url = state.editor.testUrl.trim();
208
+ const parsedInputs = parseTestInputs(state.editor.testInputs);
209
+ if (parsedInputs.kind === 'error') {
210
+ this.patchEditor({ notice: { kind: 'json', message: parsedInputs.message } });
211
+ return;
212
+ }
213
+ if (!url) {
214
+ this.patchEditor({ notice: { kind: 'json', message: 'enter the test URL first' } });
215
+ return;
216
+ }
217
+ let target = state.selected;
218
+ if (this.dirty() || !target) {
219
+ target = await this.saveEdited();
220
+ if (!target)
221
+ return;
222
+ }
223
+ if (target.status !== 'draft') {
224
+ this.patchEditor({ notice: { kind: 'refused', message: 'only drafts can be tested' } });
225
+ return;
226
+ }
227
+ const id = target.id;
228
+ const revision = target.revision;
229
+ this.publish({ ...this.store.getSnapshot(), busy: true });
230
+ try {
231
+ // One object is one run on the session page; an array is 2 to 5 runs, each in a fresh context.
232
+ const body = parsedInputs.kind === 'sets' ? { inputSets: parsedInputs.sets } : { inputs: parsedInputs.inputs };
233
+ const tested = await this.call('test', { id, url, ...body, expectedRevision: revision });
234
+ await this.reloadSnapshot();
235
+ this.publish({ ...this.store.getSnapshot(), busy: false, selected: tested, editor: { ...this.store.getSnapshot().editor, notice: undefined } });
236
+ }
237
+ catch (error) {
238
+ // The failed replay left a credential behind; show it, and keep the edits.
239
+ const notice = noticeFor(error);
240
+ await this.reloadSnapshot();
241
+ let selected = this.store.getSnapshot().selected;
242
+ try {
243
+ selected = (await this.call('get', { id })) ?? selected;
244
+ }
245
+ catch { /* keep what is shown */ }
246
+ this.publish({ ...this.store.getSnapshot(), busy: false, selected, editor: { ...this.store.getSnapshot().editor, notice } });
247
+ }
248
+ }
249
+ /** Activate the revision on screen. Refused while the editor has edits, and the request names the revision. */
250
+ async activate() {
251
+ const { selected } = this.store.getSnapshot();
252
+ if (!selected)
253
+ return;
254
+ if (this.dirty()) {
255
+ this.patchEditor({ notice: { kind: 'refused', message: 'save and test your edits before activating' } });
256
+ return;
257
+ }
258
+ const activated = await this.run(() => this.call('status', { id: selected.id, status: 'active', expectedRevision: selected.revision }));
259
+ if (!activated)
260
+ return;
261
+ await this.reloadSnapshot();
262
+ this.publish({ ...this.store.getSnapshot(), selected: activated, editor: { ...this.editorFor(activated), notice: undefined } });
263
+ }
264
+ // --- plumbing ------------------------------------------------------------
265
+ /** Run a call with the busy flag; a failure becomes the editor's notice. */
266
+ async run(fn) {
267
+ this.publish({ ...this.store.getSnapshot(), busy: true });
268
+ try {
269
+ const value = await fn();
270
+ this.publish({ ...this.store.getSnapshot(), busy: false });
271
+ return value;
272
+ }
273
+ catch (error) {
274
+ this.publish({ ...this.store.getSnapshot(), busy: false, editor: { ...this.store.getSnapshot().editor, notice: noticeFor(error) } });
275
+ return undefined;
276
+ }
277
+ }
278
+ async reloadSnapshot() {
279
+ try {
280
+ const snapshot = await this.call('snapshot', {});
281
+ this.publish({ ...this.store.getSnapshot(), snapshot });
282
+ }
283
+ catch { /* the list is stale until the next refresh */ }
284
+ }
61
285
  async mutate(endpoint, payload) {
62
286
  this.publish({ ...this.store.getSnapshot(), busy: true, failed: false, error: undefined });
287
+ const before = this.store.getSnapshot().selected;
63
288
  try {
64
289
  const value = await this.call(endpoint, payload);
65
- const selected = value && typeof value === 'object' && 'id' in value ? value : this.store.getSnapshot().selected;
290
+ const selected = value && typeof value === 'object' && 'id' in value ? value : before;
66
291
  const snapshot = await this.call('snapshot', {});
67
- this.publish({ loading: false, busy: false, failed: false, snapshot, ...selected ? { selected } : {} });
292
+ // Calls made through the plain API (validate, status, ...) never replace text the person is still editing.
293
+ const replaced = !!selected && selected.id !== before?.id;
294
+ const now = this.store.getSnapshot();
295
+ this.publish({ ...now, loading: false, busy: false, failed: false, error: undefined, snapshot, ...selected ? { selected } : {}, ...replaced ? { editor: this.editorFor(selected) } : {} });
68
296
  }
69
297
  catch (error) {
70
- this.fail(error);
298
+ const now = this.store.getSnapshot();
299
+ this.publish({ ...now, loading: false, busy: false, failed: false, error: undefined, editor: { ...now.editor, notice: noticeFor(error) } });
71
300
  }
72
301
  }
302
+ patchEditor(patch) {
303
+ const current = this.store.getSnapshot();
304
+ this.publish({ ...current, editor: { ...current.editor, ...patch } });
305
+ }
73
306
  async call(endpoint, payload) {
74
307
  // The plugin's own logical channel: the shared `/api` channel is reserved
75
308
  // for host-composed endpoints, and intercepting it there replaced the whole
76
309
  // channel's fallback (see automation-assets-rpc.ts).
77
310
  const result = await this.rpc.call(CHANNEL, endpoint, payload);
78
311
  if (!result.ok)
79
- throw new Error(result.error.message);
312
+ throw new AssetCallError(result.error.message, (result.error.details ?? {}));
80
313
  return result.value;
81
314
  }
82
315
  fail(error) {
@@ -1 +1 @@
1
- {"version":3,"file":"automation-assets-client.js","sourceRoot":"","sources":["../../src/client/automation-assets-client.ts"],"names":[],"mappings":"AAaA,SAAS,UAAU,CAAI,OAAU;IAC/B,IAAI,QAAQ,GAAG,OAAO,CAAA;IACtB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAA;IACvC,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ;QAC3B,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,CAAA,CAAC,CAAC;QAC5F,GAAG,CAAC,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,KAAK,MAAM,QAAQ,IAAI,SAAS;YAAE,QAAQ,EAAE,CAAA,CAAC,CAAC;QAC3E,MAAM,CAAC,OAAO,IAAI,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,KAAK,MAAM,QAAQ,IAAI,SAAS;YAAE,QAAQ,EAAE,CAAA,CAAC,CAAC;KAC5I,CAAA;AACH,CAAC;AAED,iEAAiE;AACjE,MAAM,OAAO,GAAG,qBAAqB,CAAA;AAErC,MAAM,OAAO,0BAA0B;IAIR;IAHZ,KAAK,GAAG,UAAU,CAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IACjG,QAAQ,GAAG,KAAK,CAAA;IAExB,YAA6B,GAAwB;QAAxB,QAAG,GAAH,GAAG,CAAqB;QAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAA;IAAC,CAAC;IAE9E,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,KAAK,EAAE;YACvC,uBAAuB,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,OAAO,EAAE,CAAA,CAAC,CAAC;YACtD,qBAAqB,EAAE,CAAC,EAAW,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC;YAChE,mBAAmB,EAAE,CAAC,KAAwE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC;YACjI,4BAA4B,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC;YAC9E,0BAA0B,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC;YAC1E,uBAAuB,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC;YACxE,mBAAmB,EAAE,CAAC,EAAU,EAAE,GAAW,EAAE,MAA8B,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;YAC1H,wBAAwB,EAAE,CAAC,EAAU,EAAE,MAA6B,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;SAC/G,CAAA;IACH,CAAC;IAED,QAAQ,KAA4B,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA,CAAC,CAAC;IACrE,OAAO,KAAW,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA,CAAC,CAAC;IAExC,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QAC7F,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAA0B,UAAU,EAAE,EAAE,CAAC,CAAA;YACzE,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAW;QACtB,IAAI,CAAC,EAAE,EAAE,CAAC;YAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QACvF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAyB,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;YACvE,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QACjH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAAC,CAAC;IACtC,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,OAAgC;QACrE,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QAC1F,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAU,QAAQ,EAAE,OAAO,CAAC,CAAA;YACzD,MAAM,QAAQ,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAA;YACnI,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAA0B,UAAU,EAAE,EAAE,CAAC,CAAA;YACzE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACzG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAAC,CAAC;IACtC,CAAC;IAEO,KAAK,CAAC,IAAI,CAAI,QAAgB,EAAE,OAAgB;QACtD,0EAA0E;QAC1E,4EAA4E;QAC5E,qDAAqD;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC9D,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACrD,OAAO,MAAM,CAAC,KAAU,CAAA;IAC1B,CAAC;IAEO,IAAI,CAAC,KAAc;QACzB,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;IACvK,CAAC;IAEO,OAAO,CAAC,KAA4B,IAAU,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;CAClG"}
1
+ {"version":3,"file":"automation-assets-client.js","sourceRoot":"","sources":["../../src/client/automation-assets-client.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,8 @@
11
11
  */
12
12
  import type { SnapshotStore } from '@deepseek-ai/dsh-client-store';
13
13
  import type { SettingsFieldSpec, SettingsFormScope, SettingsFieldState, SettingsFormShell } from '@deepseek-ai/dsh-client-ui-primitives';
14
- export type SectionField = 'enabled' | 'automationMode' | 'browserRuntime' | 'channel' | 'headless' | 'opencliEnabled' | 'autoInstall' | 'storageStatePath' | 'defaultAuthProfile' | 'executablePath' | 'snapshotDir' | 'verbose' | 'cdpPort';
14
+ import { type PromptTextFieldId } from './prompts-form.ts';
15
+ export type SectionField = 'enabled' | 'automationMode' | 'toolSurface' | 'browserRuntime' | 'channel' | 'headless' | 'opencliEnabled' | 'autoInstall' | 'storageStatePath' | 'defaultAuthProfile' | 'executablePath' | 'snapshotDir' | 'verbose' | 'cdpPort' | 'maxSessions';
15
16
  /** Retained name for callers that predate the section/JSON split. */
16
17
  export type SettingField = SectionField;
17
18
  /** One control's state, as the shared form model reports it. */
@@ -21,6 +22,24 @@ export interface BrowserCardState extends SettingsFormShell {
21
22
  fields: Record<SectionField, CardFieldState>;
22
23
  /** JSON code-editor controls, kept apart so `fields` stays exhaustively keyed. */
23
24
  jsonFields: Record<string, CardFieldState>;
25
+ /** The "prompt text" section: views of the one staged `prompts` draft. */
26
+ prompts: PromptsCardState;
27
+ }
28
+ export interface PromptsCardState {
29
+ texts: Record<PromptTextFieldId, {
30
+ text: string;
31
+ invalid: boolean;
32
+ }>;
33
+ skillEnabled: boolean;
34
+ /** The JSON box for groups, actions and errorHints. */
35
+ extras: {
36
+ text: string;
37
+ invalid: boolean;
38
+ };
39
+ /** Whether saving would leave a `prompts` entry in the user layer. */
40
+ overridden: boolean;
41
+ /** Whether the whole `prompts` draft is one the plugin would refuse to take. */
42
+ invalid: boolean;
24
43
  }
25
44
  /**
26
45
  * The single-input section fields the card edits, in display order. Every entry
@@ -28,26 +47,51 @@ export interface BrowserCardState extends SettingsFormShell {
28
47
  * unmarked fields, and the Host would refuse a write to one.
29
48
  */
30
49
  export declare const FIELD_SPECS: readonly SettingsFieldSpec[];
31
- /** The JSON-shaped section fields the card renders as code editors. */
50
+ /** The JSON-shaped section fields: objects (policies, prompts) and the launch-argument array. */
32
51
  export declare const JSON_FIELD_SPECS: readonly SettingsFieldSpec[];
52
+ /**
53
+ * Public config fields the card has no form for, on purpose: nested records (named login states, rule packs with
54
+ * hash-pinned scripts) that are safer to edit in the profile config file. The card names each one and says so, instead
55
+ * of leaving it out without a word. `rulePacks` is not `.volatile()` in the Host schema, so no form could write it.
56
+ */
57
+ export declare const CONFIG_FILE_ONLY_FIELDS: readonly ["authProfiles", "rulePacks"];
33
58
  /** Section fields rendered as JSON code editors rather than single inputs. */
34
59
  export declare const JSON_FIELDS: ReadonlySet<string>;
35
60
  /** Every field the card renders, in display order. */
36
61
  export declare const ALL_FIELD_SPECS: readonly SettingsFieldSpec[];
37
62
  export declare class BrowserSettingsController {
63
+ private readonly scope;
38
64
  private readonly form;
39
65
  private readonly store;
66
+ /** What the person typed in the groups/actions/errorHints box, kept verbatim while it is not valid JSON yet. */
67
+ private extrasRaw;
68
+ private extrasInvalid;
40
69
  constructor(scope: SettingsFormScope<Record<string, unknown>>);
41
70
  inject(): {
71
+ save: () => Promise<void>;
72
+ discard: () => void;
73
+ editPromptText: (id: PromptTextFieldId, text: string) => void;
74
+ setPromptSkillEnabled: (enabled: boolean) => void;
75
+ editPromptExtras: (text: string) => void;
76
+ resetPromptExtras: () => void;
42
77
  edit: (field: string, text: string) => void;
43
78
  resetField: (field: string) => void;
44
- save: () => void;
45
- discard: () => void;
46
79
  hooks: {
47
80
  browserSettings: SnapshotStore<BrowserCardState>;
48
81
  };
49
82
  };
83
+ private save;
84
+ /** The staged `prompts` value as an object (empty when none, or when its text is not JSON). */
85
+ private promptsDraft;
86
+ private stagePrompts;
87
+ private refresh;
88
+ editPromptText(id: PromptTextFieldId, text: string): void;
89
+ setPromptSkillEnabled(enabled: boolean): void;
90
+ editPromptExtras(text: string): void;
91
+ /** Back to the plugin's own text for groups, actions and error hints. */
92
+ resetPromptExtras(): void;
50
93
  snapshot(): BrowserCardState;
51
94
  dispose(): void;
52
95
  private project;
96
+ private projectPrompts;
53
97
  }