@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.
- package/README.md +238 -71
- 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 +5 -1
- package/scripts/dump-prompts.mjs +29 -0
- package/scripts/measure-tool-surface.mjs +190 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
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 :
|
|
290
|
+
const selected = value && typeof value === 'object' && 'id' in value ? value : before;
|
|
66
291
|
const snapshot = await this.call('snapshot', {});
|
|
67
|
-
|
|
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.
|
|
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
|
|
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":"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"}
|
|
1
|
+
{"version":3,"file":"automation-assets-client.js","sourceRoot":"","sources":["../../src/client/automation-assets-client.ts"],"names":[],"mappings":"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"}
|
package/lib/client/form.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
}
|