@anweat/dsh-browser 0.1.7 → 0.1.9

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 (74) hide show
  1. package/README.md +356 -245
  2. package/cordis.patch.yml +26 -16
  3. package/lib/approval-policy.js +34 -0
  4. package/lib/approval-policy.js.map +1 -1
  5. package/lib/auth-profiles.js +10 -1
  6. package/lib/auth-profiles.js.map +1 -1
  7. package/lib/automation-assets-rpc.d.ts +5 -0
  8. package/lib/automation-assets-rpc.js +63 -0
  9. package/lib/automation-assets-rpc.js.map +1 -0
  10. package/lib/automation-assets.d.ts +139 -0
  11. package/lib/automation-assets.js +372 -0
  12. package/lib/automation-assets.js.map +1 -0
  13. package/lib/automation-development.d.ts +13 -0
  14. package/lib/automation-development.js +37 -0
  15. package/lib/automation-development.js.map +1 -0
  16. package/lib/automation-execution.d.ts +14 -0
  17. package/lib/automation-execution.js +55 -0
  18. package/lib/automation-execution.js.map +1 -0
  19. package/lib/browser-service.d.ts +73 -25
  20. package/lib/browser-service.js +286 -74
  21. package/lib/browser-service.js.map +1 -1
  22. package/lib/client/SettingsCard.d.ts +2 -0
  23. package/lib/client/SettingsCard.js +69 -0
  24. package/lib/client/SettingsCard.js.map +1 -0
  25. package/lib/client/automation-assets-client.d.ts +38 -0
  26. package/lib/client/automation-assets-client.js +83 -0
  27. package/lib/client/automation-assets-client.js.map +1 -0
  28. package/lib/client/context-types.d.ts +8 -0
  29. package/lib/client/context-types.js +2 -0
  30. package/lib/client/context-types.js.map +1 -0
  31. package/lib/client/form.d.ts +62 -0
  32. package/lib/client/form.js +224 -0
  33. package/lib/client/form.js.map +1 -0
  34. package/lib/client/index.d.ts +27 -0
  35. package/lib/client/index.js +28 -0
  36. package/lib/client/index.js.map +1 -0
  37. package/lib/client/locales.d.ts +86 -0
  38. package/lib/client/locales.js +65 -0
  39. package/lib/client/locales.js.map +1 -0
  40. package/lib/client/settings-namespace.d.ts +2 -0
  41. package/lib/client/settings-namespace.js +3 -0
  42. package/lib/client/settings-namespace.js.map +1 -0
  43. package/lib/client/styles.d.ts +48 -0
  44. package/lib/client/styles.js +28 -0
  45. package/lib/client/styles.js.map +1 -0
  46. package/lib/client.js +1282 -0
  47. package/lib/client.js.map +1 -0
  48. package/lib/config.d.ts +14 -0
  49. package/lib/config.js +43 -0
  50. package/lib/config.js.map +1 -1
  51. package/lib/deps.d.ts +7 -1
  52. package/lib/deps.js +22 -6
  53. package/lib/deps.js.map +1 -1
  54. package/lib/freedom.d.ts +4 -1
  55. package/lib/freedom.js +14 -0
  56. package/lib/freedom.js.map +1 -1
  57. package/lib/index.d.ts +3 -1
  58. package/lib/index.js +20 -3
  59. package/lib/index.js.map +1 -1
  60. package/lib/opencli-catalog.d.ts +21 -0
  61. package/lib/opencli-catalog.js +49 -0
  62. package/lib/opencli-catalog.js.map +1 -0
  63. package/lib/scripts.d.ts +1 -1
  64. package/lib/scripts.js +30 -29
  65. package/lib/scripts.js.map +1 -1
  66. package/lib/tools.d.ts +2 -1
  67. package/lib/tools.js +222 -11
  68. package/lib/tools.js.map +1 -1
  69. package/lib/usage-policy.d.ts +49 -0
  70. package/lib/usage-policy.js +171 -0
  71. package/lib/usage-policy.js.map +1 -0
  72. package/package.json +133 -78
  73. package/scripts/check-client-bundle.mjs +15 -0
  74. package/scripts/clean-lib.mjs +3 -0
package/cordis.patch.yml CHANGED
@@ -1,16 +1,26 @@
1
- # dsh-browser bundle patch — installs the browser runtime as one more row over
2
- # the active profile. Install with:
3
- # dsh plugin --profile <name> add @anweat/dsh-browser
4
- # then boot the profile (the web profile has HMR disabled, so a restart applies it).
5
- #
6
- # Login state: prefer named `authProfiles` with explicit `allowedDomains` (see
7
- # README). `storageStatePath` remains as a legacy global fallback.
8
- - insert:
9
- - id: browser
10
- name: '@anweat/dsh-browser'
11
- config:
12
- automationMode: standard
13
- channel: chromium
14
- headless: true
15
- opencliEnabled: true
16
- verbose: false
1
+ # dsh-browser bundle patch — installs the browser runtime as one more row over
2
+ # the active profile. Install with:
3
+ # dsh plugin --profile <name> add @anweat/dsh-browser
4
+ # then boot the profile (the web profile has HMR disabled, so a restart applies it).
5
+ #
6
+ # Login state: prefer named `authProfiles` with explicit `allowedDomains` (see
7
+ # README). `storageStatePath` remains as a legacy global fallback.
8
+ - insert:
9
+ - id: browser
10
+ name: '@anweat/dsh-browser'
11
+ config:
12
+ automationMode: standard
13
+ browserRuntime: playwright
14
+ channel: chromium
15
+ headless: true
16
+ opencliEnabled: true
17
+ usagePolicy:
18
+ minDelayMs: 750
19
+ maxConcurrency: 2
20
+ burst: 3
21
+ maxPagesPerRun: 20
22
+ maxDepth: 2
23
+ retryLimit: 2
24
+ backoffBaseMs: 1000
25
+ cooldownMs: 30000
26
+ verbose: false
@@ -3,6 +3,7 @@ import { recipeNeedsApproval } from "./automation.js";
3
3
  import { validateUserscript } from "./scripts.js";
4
4
  import { isBrowserToolExposed } from "./freedom.js";
5
5
  const DIRECT_INTERACTIONS = new Set(['browser_click', 'browser_type', 'browser_scroll']);
6
+ const WEB_LOCAL_MUTATIONS = new Set(['web_cache_clear']);
6
7
  export function browserPolicyDecision(name, args, mode = 'standard') {
7
8
  if (!isBrowserToolExposed(name, mode) && name.startsWith('browser_')) {
8
9
  return { kind: 'deny', reason: `Browser tool ${name} is disabled by automationMode=${mode}` };
@@ -58,6 +59,39 @@ export function browserPolicyDecision(name, args, mode = 'standard') {
58
59
  return { kind: 'ask', reason: 'Run a multi-step Playwright recipe with page mutations: ' + actions.join(', ') };
59
60
  }
60
61
  }
62
+ if (name === 'browser_automation_run') {
63
+ if (mode === 'read-only')
64
+ return { kind: 'deny', reason: `Reusable automation execution is disabled by automationMode=${mode}` };
65
+ if (mode === 'autonomous' || mode === 'unrestricted')
66
+ return { kind: 'allow' };
67
+ return { kind: 'ask', reason: 'Run an active reusable browser automation asset' };
68
+ }
69
+ if (name === 'browser_automation_develop') {
70
+ const action = String(args?.action ?? '');
71
+ if (['get', 'validate'].includes(action))
72
+ return { kind: 'allow' };
73
+ if (mode === 'read-only')
74
+ return { kind: 'deny', reason: `Automation draft writes are disabled by automationMode=${mode}` };
75
+ if (action === 'test' && mode !== 'unrestricted')
76
+ return { kind: 'ask', reason: 'Replay a reusable automation draft in a real browser context' };
77
+ if (mode === 'standard')
78
+ return { kind: 'ask', reason: 'Save a bounded local reusable automation draft' };
79
+ return { kind: 'allow' };
80
+ }
81
+ if (name === 'web_deps' && args?.action === 'install') {
82
+ if (mode === 'read-only')
83
+ return { kind: 'deny', reason: `Dependency installation is disabled by automationMode=${mode}` };
84
+ if (mode === 'unrestricted')
85
+ return { kind: 'allow' };
86
+ return { kind: 'ask', reason: 'Install an external Web Search Pro backend dependency' };
87
+ }
88
+ const webRuleAction = name === 'web_rule' ? args?.action : undefined;
89
+ if (WEB_LOCAL_MUTATIONS.has(name) || (name === 'web_rule' && ['upsert', 'remove', 'import'].includes(String(webRuleAction)))) {
90
+ if (mode === 'read-only')
91
+ return { kind: 'deny', reason: `Web Search Pro mutations are disabled by automationMode=${mode}` };
92
+ if (mode === 'standard')
93
+ return { kind: 'ask', reason: 'Modify Web Search Pro local state: ' + name };
94
+ }
61
95
  return { kind: 'allow' };
62
96
  }
63
97
  //# sourceMappingURL=approval-policy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"approval-policy.js","sourceRoot":"","sources":["../src/approval-policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approval-policy.js","sourceRoot":"","sources":["../src/approval-policy.ts"],"names":[],"mappings":"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"}
@@ -19,10 +19,19 @@ export class AuthProfileStore {
19
19
  throw new Error('auth profile ' + id + ' is not allowed for ' + url.hostname);
20
20
  if (!profile.storageStatePath?.trim())
21
21
  throw new Error('auth profile ' + id + ' has no storageStatePath');
22
- return { id, ...profile, persistState: profile.persistState ?? false };
22
+ const persistState = profile.persistState ?? false;
23
+ if (!fs.existsSync(profile.storageStatePath)) {
24
+ if (!persistState)
25
+ throw new Error('auth profile ' + id + ' storageState file does not exist: ' + profile.storageStatePath);
26
+ }
27
+ else if (!fs.statSync(profile.storageStatePath).isFile()) {
28
+ throw new Error('auth profile ' + id + ' storageState path is not a file: ' + profile.storageStatePath);
29
+ }
30
+ return { id, ...profile, persistState };
23
31
  }
24
32
  list() {
25
33
  return Object.entries(this.profiles).sort(([a], [b]) => a.localeCompare(b)).map(([id, profile]) => ({ id, allowedDomains: [...(profile.allowedDomains ?? [])], persistState: profile.persistState ?? false }));
26
34
  }
27
35
  }
36
+ import fs from 'node:fs';
28
37
  //# sourceMappingURL=auth-profiles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-profiles.js","sourceRoot":"","sources":["../src/auth-profiles.ts"],"names":[],"mappings":"AAYA,SAAS,WAAW,CAAC,QAAgB,EAAE,OAA0B;IAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACtD,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACjF,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,WAA8C,EAAE;QAAhD,aAAQ,GAAR,QAAQ,CAAwC;IAAG,CAAC;IAEjF,OAAO,CAAC,EAAU,EAAE,SAAiB;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;QAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAA;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,sBAAsB,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC3I,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,0BAA0B,CAAC,CAAA;QACzG,OAAO,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK,EAAE,CAAA;IACxE,CAAC;IAED,IAAI;QACF,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC,CAAC,CAAA;IAChN,CAAC;CACF"}
1
+ {"version":3,"file":"auth-profiles.js","sourceRoot":"","sources":["../src/auth-profiles.ts"],"names":[],"mappings":"AAYA,SAAS,WAAW,CAAC,QAAgB,EAAE,OAA0B;IAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACtD,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACjF,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,WAA8C,EAAE;QAAhD,aAAQ,GAAR,QAAQ,CAAwC;IAAG,CAAC;IAEjF,OAAO,CAAC,EAAU,EAAE,SAAiB;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;QAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAA;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,sBAAsB,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC3I,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,0BAA0B,CAAC,CAAA;QACzG,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAA;QAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,YAAY;gBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,qCAAqC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC7H,CAAC;aAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,GAAG,oCAAoC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;QACzG,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,CAAA;IACzC,CAAC;IAED,IAAI;QACF,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC,CAAC,CAAA;IAChN,CAAC;CACF;AACD,OAAO,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,5 @@
1
+ /** Loopback-only Host RPC for the automation asset review UI. */
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ import type { AutomationAssetStore } from './automation-assets.ts';
4
+ import type { BrowserService } from './browser-service.ts';
5
+ export declare function registerAutomationAssetRpc(ctx: Context, store: AutomationAssetStore, service: BrowserService): void;
@@ -0,0 +1,63 @@
1
+ /** Loopback-only Host RPC for the automation asset review UI. */
2
+ import { executeAutomationAsset } from "./automation-execution.js";
3
+ const CHANNEL = '/dsh-browser-assets';
4
+ function record(payload) {
5
+ if (!payload || typeof payload !== 'object' || Array.isArray(payload))
6
+ throw new Error('request payload must be an object');
7
+ if (JSON.stringify(payload).length > 100_000)
8
+ throw new Error('request payload exceeds 100000 characters');
9
+ return payload;
10
+ }
11
+ function stringField(payload, name) {
12
+ const value = payload[name];
13
+ if (typeof value !== 'string' || value.length < 1 || value.length > 200)
14
+ throw new Error(`${name} must be a non-empty string`);
15
+ return value;
16
+ }
17
+ export function registerAutomationAssetRpc(ctx, store, service) {
18
+ ctx.inject(['connection'], (connectionCtx) => {
19
+ const connection = connectionCtx.connection;
20
+ const dispose = connection.rpc.handle(CHANNEL, async (endpoint, rawPayload) => {
21
+ try {
22
+ const payload = record(rawPayload);
23
+ let value;
24
+ switch (endpoint) {
25
+ case 'snapshot':
26
+ value = store.snapshot();
27
+ break;
28
+ case 'get':
29
+ value = store.get(stringField(payload, 'id')) ?? null;
30
+ break;
31
+ case 'save':
32
+ value = store.saveDraft(payload.asset);
33
+ break;
34
+ case 'summarize':
35
+ value = store.summarizeCandidate(stringField(payload, 'id'));
36
+ break;
37
+ case 'dismiss':
38
+ store.dismissCandidate(stringField(payload, 'id'));
39
+ value = store.snapshot();
40
+ break;
41
+ case 'validate':
42
+ value = store.validate(stringField(payload, 'id'));
43
+ break;
44
+ case 'test': {
45
+ const result = await executeAutomationAsset(service, store, stringField(payload, 'id'), stringField(payload, 'url'), payload.inputs, 'draft');
46
+ value = result.asset;
47
+ break;
48
+ }
49
+ case 'status':
50
+ value = store.setStatus(stringField(payload, 'id'), stringField(payload, 'status'));
51
+ break;
52
+ default: return { ok: false, error: { code: 'not-found', message: `unknown automation asset endpoint: ${endpoint}` } };
53
+ }
54
+ return { ok: true, value };
55
+ }
56
+ catch (error) {
57
+ return { ok: false, error: { code: 'bad-request', message: String(error instanceof Error ? error.message : error).slice(0, 500) } };
58
+ }
59
+ }, { authority: 'loopback' });
60
+ connectionCtx.effect(() => dispose, 'dsh-browser: automation asset RPC');
61
+ });
62
+ }
63
+ //# sourceMappingURL=automation-assets-rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-assets-rpc.js","sourceRoot":"","sources":["../src/automation-assets-rpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ /** Bounded, local automation-asset lifecycle and retrieval. */
2
+ import type { BrowserRecipeStep } from './automation.ts';
3
+ export declare const ASSET_PERSISTENCE_MODES: readonly ["off", "manual", "suggest", "auto-draft"];
4
+ export type AssetPersistenceMode = typeof ASSET_PERSISTENCE_MODES[number];
5
+ export declare const ASSET_ACTIVATION_MODES: readonly ["manual", "auto-tested"];
6
+ export type AssetActivationMode = typeof ASSET_ACTIVATION_MODES[number];
7
+ export type AutomationAssetKind = 'recipe' | 'userscript';
8
+ export type AutomationAssetStatus = 'draft' | 'active' | 'archived';
9
+ export interface AutomationAssetPolicyInput {
10
+ enabled?: boolean;
11
+ directory?: string;
12
+ persistenceMode?: AssetPersistenceMode;
13
+ activationMode?: AssetActivationMode;
14
+ minSuccessfulRuns?: number;
15
+ minDistinctSessions?: number;
16
+ successWindowDays?: number;
17
+ minSuccessRate?: number;
18
+ maxCandidates?: number;
19
+ candidateTtlDays?: number;
20
+ maxSuggestionsPerDay?: number;
21
+ maxDrafts?: number;
22
+ maxActiveAssets?: number;
23
+ retrievalTopK?: number;
24
+ catalogTokenBudget?: number;
25
+ modelDevelopmentEnabled?: boolean;
26
+ maxModelDraftWritesPerSession?: number;
27
+ }
28
+ export interface AutomationAssetPolicy {
29
+ enabled: boolean;
30
+ directory: string;
31
+ persistenceMode: AssetPersistenceMode;
32
+ activationMode: AssetActivationMode;
33
+ minSuccessfulRuns: number;
34
+ minDistinctSessions: number;
35
+ successWindowDays: number;
36
+ minSuccessRate: number;
37
+ maxCandidates: number;
38
+ candidateTtlDays: number;
39
+ maxSuggestionsPerDay: number;
40
+ maxDrafts: number;
41
+ maxActiveAssets: number;
42
+ retrievalTopK: number;
43
+ catalogTokenBudget: number;
44
+ modelDevelopmentEnabled: boolean;
45
+ maxModelDraftWritesPerSession: number;
46
+ }
47
+ export interface AutomationCandidate {
48
+ id: string;
49
+ fingerprint: string;
50
+ domain: string;
51
+ title: string;
52
+ steps: BrowserRecipeStep[];
53
+ successfulRuns: number;
54
+ failedRuns: number;
55
+ sessionIds: string[];
56
+ firstSeenAt: string;
57
+ lastSeenAt: string;
58
+ suggestedAt?: string;
59
+ dismissedAt?: string;
60
+ }
61
+ export interface AutomationAsset {
62
+ id: string;
63
+ kind: AutomationAssetKind;
64
+ status: AutomationAssetStatus;
65
+ name: string;
66
+ description: string;
67
+ domains: string[];
68
+ tags: string[];
69
+ inputNames: string[];
70
+ recipe?: BrowserRecipeStep[];
71
+ source?: string;
72
+ revision: number;
73
+ testStatus: 'untested' | 'passed' | 'failed';
74
+ testMessage?: string;
75
+ successCount: number;
76
+ failureCount: number;
77
+ createdAt: string;
78
+ updatedAt: string;
79
+ lastRunAt?: string;
80
+ }
81
+ export interface AutomationAssetSummary {
82
+ id: string;
83
+ kind: AutomationAssetKind;
84
+ status: AutomationAssetStatus;
85
+ name: string;
86
+ description: string;
87
+ domains: string[];
88
+ tags: string[];
89
+ inputNames: string[];
90
+ revision: number;
91
+ testStatus: AutomationAsset['testStatus'];
92
+ successCount: number;
93
+ failureCount: number;
94
+ updatedAt: string;
95
+ lastRunAt?: string;
96
+ }
97
+ export interface AutomationCandidateSummary {
98
+ id: string;
99
+ domain: string;
100
+ title: string;
101
+ successfulRuns: number;
102
+ failedRuns: number;
103
+ distinctSessions: number;
104
+ firstSeenAt: string;
105
+ lastSeenAt: string;
106
+ suggestedAt?: string;
107
+ dismissedAt?: string;
108
+ }
109
+ export interface AutomationAssetSnapshot {
110
+ policy: Omit<AutomationAssetPolicy, 'directory'>;
111
+ candidates: AutomationCandidateSummary[];
112
+ assets: AutomationAssetSummary[];
113
+ }
114
+ export declare function defaultAutomationAssetDirectory(): string;
115
+ export declare function resolveAutomationAssetPolicy(input?: AutomationAssetPolicyInput): AutomationAssetPolicy;
116
+ /** Remove concrete form values and non-semantic output from a successful recipe. */
117
+ export declare function normalizeRecipeForCandidate(steps: BrowserRecipeStep[]): BrowserRecipeStep[];
118
+ export declare class AutomationAssetStore {
119
+ readonly policy: AutomationAssetPolicy;
120
+ private readonly statePath;
121
+ private state;
122
+ constructor(policy: AutomationAssetPolicy);
123
+ snapshot(): AutomationAssetSnapshot;
124
+ get(id: string): AutomationAsset | undefined;
125
+ recordRecipe(url: string, steps: BrowserRecipeStep[], sessionId: string, ok: boolean, now?: number): AutomationCandidate | undefined;
126
+ summarizeCandidate(id: string): AutomationAsset;
127
+ dismissCandidate(id: string): void;
128
+ saveDraft(input: Partial<AutomationAsset> & Pick<AutomationAsset, 'kind' | 'name'>): AutomationAsset;
129
+ validate(id: string): AutomationAsset;
130
+ setStatus(id: string, status: AutomationAssetStatus): AutomationAsset;
131
+ search(query: string, domain?: string, status?: AutomationAssetStatus | 'all', kind?: AutomationAssetKind): AutomationAssetSummary[];
132
+ noteRun(id: string, ok: boolean): void;
133
+ noteTestResult(id: string, ok: boolean, url: string): void;
134
+ assertTarget(asset: AutomationAsset, url: string): void;
135
+ private requireAsset;
136
+ private prune;
137
+ private read;
138
+ private write;
139
+ }