@anweat/dsh-browser 0.1.15 → 0.2.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +272 -75
  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 +35 -30
  161. package/scripts/dump-prompts.mjs +29 -0
  162. package/scripts/measure-tool-surface.mjs +190 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl.js","sourceRoot":"","sources":["../../src/actions/crawl.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAIrF,MAAM,CAAC,MAAM,aAAa,GAAgB;IACxC;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,wHAAwH;QACjI,KAAK,EAAE,uFAAuF;QAC9F,MAAM,EAAE;YACN,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,oBAAoB,EAAE;YAC1G,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oDAAoD,EAAE;YAC/F,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;YACxF,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sDAAsD,EAAE;YACpG,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;SAC5F;QACD,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO;QAC7F,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QACvF,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG;YACrB,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE;gBACvC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;gBACjE,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;gBACjE,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;gBACvE,GAAG,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE;aACvF,CAAC,CAAA;QACJ,CAAC;KACF;CACF,CAAA"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Error mapping: Playwright and service errors to the structured codes of the
3
+ * tool contract (§5). The original message is always preserved; the code and
4
+ * hint only add what the model should do next.
5
+ * @module dsh-browser/actions/errors
6
+ */
7
+ import { type ActionErrorBody, type ErrorCode } from './types.ts';
8
+ /** The built-in hint of every error code that has one fixed text. These are what `prompts.errorHints` can replace. */
9
+ export declare const DEFAULT_ERROR_HINTS: Readonly<Partial<Record<ErrorCode, string>>>;
10
+ type HintSource = () => Readonly<Partial<Record<string, string>>>;
11
+ /** Install a live source of hint overrides. @returns the function that removes it. */
12
+ export declare function installErrorHints(source: HintSource): () => void;
13
+ /** The hint for a code: the configured override, else the built-in text (undefined when the code has none). */
14
+ export declare function hintFor(code: ErrorCode): string | undefined;
15
+ /** Thrown by a recipe `assert` step whose condition did not become true in time. */
16
+ export declare class RecipeAssertionError extends Error {
17
+ constructor(message: string);
18
+ }
19
+ /** Thrown for a malformed recipe (bad step fields, out-of-range limits, unknown enum values). */
20
+ export declare class RecipeValidationError extends Error {
21
+ constructor(message: string);
22
+ }
23
+ /** The abort reason of an action whose overall deadline expired, so a stop can be told apart from a user cancel. */
24
+ export declare class DeadlineError extends Error {
25
+ constructor(message?: string);
26
+ }
27
+ /** True when the signal was aborted because the overall deadline expired. */
28
+ export declare function abortedByDeadline(signal: AbortSignal | undefined): boolean;
29
+ /** True for a Playwright timeout (waiting for a locator, an actionability check, or a navigation). */
30
+ export declare function isTimeoutError(error: unknown): boolean;
31
+ /** Playwright colours its call log for terminals; the model and the settings card get plain text. */
32
+ export declare function stripAnsi(text: string): string;
33
+ /**
34
+ * True when a failure proves the action never touched an element: the locator
35
+ * never matched anything (a timeout whose call log only says "waiting for
36
+ * locator", or a frame that does not exist). A timeout after the element was
37
+ * resolved and the action began says nothing about whether it took effect, so
38
+ * it is not this. Judged from Playwright's call log; a timeout without a call
39
+ * log is treated as "unknown", never as "never reached".
40
+ */
41
+ export declare function neverReachedElement(error: unknown): boolean;
42
+ /**
43
+ * True when a timeout proves the action never ran although the element was found: the call log shows
44
+ * Playwright waiting for it to become visible, enabled, stable or editable (or for an overlay to move)
45
+ * and never reaches the line that says the action is being performed. Needs a call log; without one
46
+ * (or with a performed marker) the outcome stays unknown.
47
+ */
48
+ export declare function blockedBeforeAction(error: unknown): boolean;
49
+ /** Map any thrown value to a structured error body. */
50
+ export declare function mapError(error: unknown, action: string, opts?: {
51
+ signal?: AbortSignal;
52
+ }): ActionErrorBody;
53
+ export {};
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Error mapping: Playwright and service errors to the structured codes of the
3
+ * tool contract (§5). The original message is always preserved; the code and
4
+ * hint only add what the model should do next.
5
+ * @module dsh-browser/actions/errors
6
+ */
7
+ import { ActionArgError, ActionUnavailableError } from "./types.js";
8
+ import { LocatorAmbiguousError, TargetStaleError } from "../locator.js";
9
+ /** The built-in hint of every error code that has one fixed text. These are what `prompts.errorHints` can replace. */
10
+ export const DEFAULT_ERROR_HINTS = {
11
+ LOCATOR_NOT_FOUND: 'No element matched. Re-read the page (observe.read), check the locator, and wait for dynamic content (act.wait) before retrying.',
12
+ LOCATOR_AMBIGUOUS: 'More than one element matched and nothing was done. Pick the intended element from candidates: narrow the locator (role+name, exact, label, testId, frame), or give index with indexReason.',
13
+ NOT_ACTIONABLE: 'The element exists but cannot take this action now (hidden, disabled, covered, or still moving). Wait for it or dismiss the overlay.',
14
+ TARGET_CLOSED: 'The page is gone or none is open. Call target.open first.',
15
+ TARGET_STALE: 'The page navigated, reloaded, or changed history since you observed it, and nothing was done. Call observe.read again, check the page is still the one you meant, then retry with the new generation (current.generation).',
16
+ DEADLINE: 'The action ran out of time. Re-read the page to see whether it took effect before retrying.',
17
+ CANCELLED: 'The call was cancelled before it finished.',
18
+ CAPABILITY_UNAVAILABLE: 'This capability is not available in the current setup (see browser_index() for runtime state; runtime.install installs Chromium).',
19
+ POLICY_DENIED: 'Blocked by the plugin policy for this automationMode or by input validation.',
20
+ NOT_FOUND: 'The referenced item does not exist. Use automation.search to find valid ids.',
21
+ VALIDATION_FAILED: 'The steps ran but an assert step did not hold, so the business result is not confirmed. Read the page (observe.read) to see what happened; if earlier steps submitted something, do not run them again blindly.',
22
+ OUTCOME_UNKNOWN: 'A side-effecting step timed out, so it may or may not have taken effect. Verify the real result on the page (observe.read) before any retry; never resubmit blindly.',
23
+ VALIDATION_MISSING: 'The steps ran, but nothing in this asset verifies the result, so the test cannot pass. Add an assert step or a postcondition that proves the outcome, save (a new revision), and test again.',
24
+ INVALID_RECIPE: 'The recipe itself is malformed (see the message). Fix the step and send it again; nothing ran.',
25
+ };
26
+ /**
27
+ * Deployment overrides of the hint per error code (`prompts.errorHints`).
28
+ *
29
+ * `mapError` and `hintFor` are called from places that hold no configuration (recipe execution, asset replay),
30
+ * so the overrides are ambient: the plugin installs a source on apply and removes it when its fiber goes away.
31
+ * The source is read on every call, which is what makes a config change take effect without a restart.
32
+ * The most recently installed source wins; with none installed the built-in texts apply.
33
+ */
34
+ const hintSources = [];
35
+ /** Install a live source of hint overrides. @returns the function that removes it. */
36
+ export function installErrorHints(source) {
37
+ hintSources.push(source);
38
+ return () => {
39
+ const index = hintSources.lastIndexOf(source);
40
+ if (index >= 0)
41
+ hintSources.splice(index, 1);
42
+ };
43
+ }
44
+ /** The hint for a code: the configured override, else the built-in text (undefined when the code has none). */
45
+ export function hintFor(code) {
46
+ const source = hintSources[hintSources.length - 1];
47
+ return source?.()[code] ?? DEFAULT_ERROR_HINTS[code];
48
+ }
49
+ /** Thrown by a recipe `assert` step whose condition did not become true in time. */
50
+ export class RecipeAssertionError extends Error {
51
+ constructor(message) {
52
+ super(message);
53
+ this.name = 'RecipeAssertionError';
54
+ }
55
+ }
56
+ /** Thrown for a malformed recipe (bad step fields, out-of-range limits, unknown enum values). */
57
+ export class RecipeValidationError extends Error {
58
+ constructor(message) {
59
+ super(message);
60
+ this.name = 'RecipeValidationError';
61
+ }
62
+ }
63
+ /** The abort reason of an action whose overall deadline expired, so a stop can be told apart from a user cancel. */
64
+ export class DeadlineError extends Error {
65
+ constructor(message = 'deadline') {
66
+ super(message);
67
+ this.name = 'DeadlineError';
68
+ }
69
+ }
70
+ /** True when the signal was aborted because the overall deadline expired. */
71
+ export function abortedByDeadline(signal) {
72
+ return signal?.aborted === true && signal.reason?.name === 'DeadlineError';
73
+ }
74
+ /** True for a Playwright timeout (waiting for a locator, an actionability check, or a navigation). */
75
+ export function isTimeoutError(error) {
76
+ if (error instanceof Error && error.name === 'TimeoutError')
77
+ return true;
78
+ return /Timeout \d+ms exceeded|timed out after/i.test(messageOf(error));
79
+ }
80
+ /** Playwright colours its call log for terminals; the model and the settings card get plain text. */
81
+ export function stripAnsi(text) {
82
+ return text.replace(/\u001b\[[0-9;]*m/g, '');
83
+ }
84
+ function messageOf(error) {
85
+ return stripAnsi(error instanceof Error ? error.message : String(error));
86
+ }
87
+ const NOT_ACTIONABLE_LOG = /locator resolved to|element is not (visible|enabled|stable|editable)|intercepts pointer events|is outside of the viewport|element is disabled|not receive pointer events|Element is not an <input>|readonly/i;
88
+ const CLOSED = /Target (page, context or browser has been )?closed|Page closed|has been closed|browser has been closed|Browser closed|Connection closed|Session closed/i;
89
+ const UNAVAILABLE = /chromium is not installed|Executable doesn't exist|browser service is disabled|OpenCLI is disabled|persistence is disabled|automation development is disabled|automation assets are unavailable|could not be created/i;
90
+ const NO_PAGE = /requires url or an active|no active page|active .* page/i;
91
+ const POLICY = /is not allowed (for|on)|outside its allowed match|userscript is invalid|userscript validation failed|auth profile .* (not allowed|storageState)|requires explicit keywords|limit reached/i;
92
+ const NOT_FOUND_RE = /(asset|candidate) not found|unknown (auth profile|rule pack|built-in script)/i;
93
+ const INVALID = /(must be|must contain|must use|must end|must start|must include|requires|exceeds|is invalid|invalid |unsupported|exactly one|only valid with|cannot combine|not a file|absolute file|missing declared|undeclared|is required|only supports|only draft|only http)/i;
94
+ /** Call-log lines that only appear once Playwright has resolved the element and started working on it. */
95
+ const ACTION_STARTED_LOG = /locator resolved to|resolved to \d+ elements|attempting .* action|performing .* action|scrolling into view|waiting for element to be|element is |intercepts pointer events|waiting for scheduled navigations|waiting for navigation/i;
96
+ /**
97
+ * True when a failure proves the action never touched an element: the locator
98
+ * never matched anything (a timeout whose call log only says "waiting for
99
+ * locator", or a frame that does not exist). A timeout after the element was
100
+ * resolved and the action began says nothing about whether it took effect, so
101
+ * it is not this. Judged from Playwright's call log; a timeout without a call
102
+ * log is treated as "unknown", never as "never reached".
103
+ */
104
+ export function neverReachedElement(error) {
105
+ const message = messageOf(error);
106
+ if (/target frame was not found/i.test(message))
107
+ return true;
108
+ if (!isTimeoutError(error))
109
+ return false;
110
+ return /waiting for (locator|selector|getBy|frameLocator)/i.test(message) && !ACTION_STARTED_LOG.test(message);
111
+ }
112
+ /** Call-log lines that prove Playwright was still waiting for the element to become actionable. */
113
+ const WAITING_ON_ELEMENT_LOG = /element is not (visible|enabled|stable|editable)|intercepts pointer events/i;
114
+ /** Call-log lines that appear only once the action itself is being carried out (or its checks passed for a fill). */
115
+ const ACTION_PERFORMED_LOG = /performing .* action|action done|element is visible, enabled and editable/i;
116
+ /**
117
+ * True when a timeout proves the action never ran although the element was found: the call log shows
118
+ * Playwright waiting for it to become visible, enabled, stable or editable (or for an overlay to move)
119
+ * and never reaches the line that says the action is being performed. Needs a call log; without one
120
+ * (or with a performed marker) the outcome stays unknown.
121
+ */
122
+ export function blockedBeforeAction(error) {
123
+ if (!isTimeoutError(error))
124
+ return false;
125
+ const message = messageOf(error);
126
+ return /Call log:/i.test(message) && WAITING_ON_ELEMENT_LOG.test(message) && !ACTION_PERFORMED_LOG.test(message);
127
+ }
128
+ /** Map any thrown value to a structured error body. */
129
+ export function mapError(error, action, opts = {}) {
130
+ if (error instanceof ActionArgError)
131
+ return { code: 'INVALID_ARGS', message: error.message, ...error.hint ? { hint: error.hint } : {} };
132
+ if (error instanceof ActionUnavailableError)
133
+ return { code: 'CAPABILITY_UNAVAILABLE', message: error.message, hint: error.hint ?? hintFor('CAPABILITY_UNAVAILABLE') };
134
+ const message = messageOf(error);
135
+ const name = error instanceof Error ? error.name : '';
136
+ const result = (code, hint = hintFor(code)) => ({ code, message, ...hint ? { hint } : {} });
137
+ if (error instanceof LocatorAmbiguousError)
138
+ return { ...result('LOCATOR_AMBIGUOUS'), candidates: error.ambiguity };
139
+ if (error instanceof TargetStaleError)
140
+ return { ...result('TARGET_STALE'), current: error.current };
141
+ if (error instanceof RecipeValidationError)
142
+ return result('INVALID_RECIPE');
143
+ if (error instanceof RecipeAssertionError)
144
+ return result('VALIDATION_FAILED');
145
+ if (abortedByDeadline(opts.signal))
146
+ return result('DEADLINE');
147
+ if (opts.signal?.aborted || name === 'AbortError' || /\baborted\b/i.test(message))
148
+ return result('CANCELLED');
149
+ if (CLOSED.test(message))
150
+ return result('TARGET_CLOSED');
151
+ if (name === 'TimeoutError' || /Timeout \d+ms exceeded|timed out after/i.test(message)) {
152
+ // Waits time out by design; everything else distinguishes "never found" from "found but blocked".
153
+ if (action === 'act.wait' || /timed out after/i.test(message))
154
+ return result('DEADLINE');
155
+ if (NOT_ACTIONABLE_LOG.test(message))
156
+ return result('NOT_ACTIONABLE');
157
+ // "Never found" only when the log stops at the wait; once the element was resolved and the action began, the cause is the deadline.
158
+ if (/waiting for (locator|selector|getBy|frameLocator)/i.test(message) && !ACTION_STARTED_LOG.test(message))
159
+ return result('LOCATOR_NOT_FOUND');
160
+ return result('DEADLINE');
161
+ }
162
+ if (/strict mode violation/i.test(message))
163
+ return result('LOCATOR_AMBIGUOUS');
164
+ if (/target frame was not found/i.test(message))
165
+ return result('LOCATOR_NOT_FOUND');
166
+ if (UNAVAILABLE.test(message))
167
+ return result('CAPABILITY_UNAVAILABLE');
168
+ if (NO_PAGE.test(message))
169
+ return result('TARGET_CLOSED');
170
+ if (NOT_FOUND_RE.test(message))
171
+ return result('NOT_FOUND');
172
+ if (POLICY.test(message))
173
+ return result('POLICY_DENIED');
174
+ if (INVALID.test(message))
175
+ return result('INVALID_ARGS', 'Check the arguments with browser_index({action}).');
176
+ return result('ACTION_FAILED', 'The action failed; read the message, and re-observe the page before retrying side-effecting actions.');
177
+ }
178
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/actions/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * The progressive-disclosure views behind `browser_index`.
3
+ *
4
+ * L1 is the group list (root) and one group's actions; L2 is one action's full
5
+ * schema. Only actions usable under the current automationMode are listed;
6
+ * the rest collapse into one line with the reason.
7
+ * @module dsh-browser/actions/index-view
8
+ */
9
+ import { type ActionDef } from './types.ts';
10
+ import { type AutomationMode, type ExposureOptions } from '../freedom.ts';
11
+ import type { ResolvedPrompts } from '../prompts.ts';
12
+ export interface IndexEnvironment {
13
+ mode: AutomationMode;
14
+ options: ExposureOptions;
15
+ enabled: boolean;
16
+ /** True when the `dsh-browser` skill is registered with the Host. */
17
+ skillAvailable: boolean;
18
+ /** Runtime facts worth surfacing at the root (undefined when unknown). */
19
+ runtime?: {
20
+ chromiumInstalled?: boolean;
21
+ opencliInstalled?: boolean;
22
+ opencliEnabled?: boolean;
23
+ };
24
+ /** Deployment overrides of the text (`prompts` configuration); absent means the built-in text everywhere. */
25
+ prompts?: ResolvedPrompts;
26
+ }
27
+ /** The fallback guide shown at the root when no skill service is present (kept under ~300 tokens). */
28
+ export declare const COMPACT_GUIDE: string;
29
+ export declare function renderRoot(env: IndexEnvironment): string;
30
+ export declare function renderGroup(group: string, env: IndexEnvironment): string;
31
+ export declare function renderAction(name: string, env: IndexEnvironment): string;
32
+ export declare function searchActions(query: string, env: IndexEnvironment): ActionDef[];
33
+ export declare function renderSearch(query: string, env: IndexEnvironment): string;
34
+ /** Resolve a `browser_index` call to text. `action` wins over `group`, which wins over `query`. */
35
+ export declare function renderIndex(args: {
36
+ group?: string;
37
+ action?: string;
38
+ query?: string;
39
+ }, env: IndexEnvironment): {
40
+ level: 'root' | 'group' | 'action' | 'search';
41
+ text: string;
42
+ };
@@ -0,0 +1,268 @@
1
+ /**
2
+ * The progressive-disclosure views behind `browser_index`.
3
+ *
4
+ * L1 is the group list (root) and one group's actions; L2 is one action's full
5
+ * schema. Only actions usable under the current automationMode are listed;
6
+ * the rest collapse into one line with the reason.
7
+ * @module dsh-browser/actions/index-view
8
+ */
9
+ import { ACTIONS, GROUP_SUMMARIES, actionsInGroup, findAction, findSubAction, findTopic, isActionGroup, traitsFor } from "./registry.js";
10
+ import { ACTION_GROUPS } from "./types.js";
11
+ import { compactParams, describeParams } from "./schema.js";
12
+ import { actionUnavailableReason } from "../freedom.js";
13
+ // The text of a catalog entry: the configured override, else the one in the registry.
14
+ const groupSummary = (group, env) => env.prompts?.groups[group] ?? GROUP_SUMMARIES[group];
15
+ const summaryOf = (action, env) => env.prompts?.actions[action.name]?.summary ?? action.summary;
16
+ const notesOf = (action, env) => env.prompts?.actions[action.name]?.notes ?? action.notes;
17
+ const subSummary = (action, sub, env) => env.prompts?.actions[`${action.name}.${sub}`]?.summary ?? action.subActions.items[sub].summary;
18
+ const subNotes = (action, sub, env) => env.prompts?.actions[`${action.name}.${sub}`]?.notes ?? action.subActions.items[sub].notes;
19
+ const topicSummary = (action, topic, env) => env.prompts?.actions[`${action.name}.${topic}`]?.summary ?? action.topics[topic].summary;
20
+ const topicText = (action, topic, env) => env.prompts?.actions[`${action.name}.${topic}`]?.notes ?? action.topics[topic].text;
21
+ /** The fallback guide shown at the root when no skill service is present (kept under ~300 tokens). */
22
+ export const COMPACT_GUIDE = [
23
+ 'Guide: (1) automation.search first; if an active asset fits, automation.run it instead of exploring.',
24
+ '(2) Else target.open -> observe.read -> act.* using locators (role+name, label, text) -> observe.read to verify.',
25
+ '(3) act.* change pages. If a submit-like action times out (outcome_unknown), check the result before retrying.',
26
+ '(4) Errors carry code+hint; INVALID_ARGS includes the schema; LOCATOR_AMBIGUOUS lists candidates (nothing was done). (5) Repeatable success: automation.develop draft_from_journal (uses the seq of your calls), then test with inputSets; activation is the user\'s.',
27
+ ].join('\n');
28
+ const MAX_LINE = 170;
29
+ function approvalNote(action, mode) {
30
+ const asks = {
31
+ none: () => '',
32
+ interaction: m => m === 'standard' ? 'asks' : '',
33
+ install: m => m === 'unrestricted' ? '' : 'asks',
34
+ upload: m => m === 'unrestricted' ? '' : 'asks',
35
+ evaluate: m => m === 'unrestricted' ? '' : 'asks',
36
+ userscript: m => m === 'unrestricted' ? '' : 'asks',
37
+ opencli: m => m === 'unrestricted' ? '' : 'asks',
38
+ recipe: m => m === 'standard' ? 'asks if mutating' : '',
39
+ 'asset-run': m => m === 'unrestricted' ? '' : m === 'autonomous' ? 'asks for userscripts' : 'asks',
40
+ 'asset-develop': m => m === 'standard' ? 'asks to write' : '',
41
+ };
42
+ return asks[action.approval](mode);
43
+ }
44
+ function line(action, env) {
45
+ const note = approvalNote(action, env.mode);
46
+ const params = compactParams(action.params);
47
+ const head = `${action.name} - ${summaryOf(action, env)}`;
48
+ const tail = ` | ${params || 'no args'}${note ? ` | ${note}` : ''}`;
49
+ const text = head + tail;
50
+ return text.length > MAX_LINE * 2 ? text.slice(0, MAX_LINE * 2 - 1) + '…' : text;
51
+ }
52
+ function split(actions, env) {
53
+ const usable = [];
54
+ const blocked = [];
55
+ for (const action of actions) {
56
+ const reason = actionUnavailableReason(action, env.mode, env.options, env.enabled);
57
+ if (reason)
58
+ blocked.push({ action, reason });
59
+ else
60
+ usable.push(action);
61
+ }
62
+ return { usable, blocked };
63
+ }
64
+ function blockedLine(blocked) {
65
+ if (!blocked.length)
66
+ return undefined;
67
+ const reasons = [...new Set(blocked.map(entry => entry.reason))].join('; ');
68
+ return `Unavailable (${reasons}): ${blocked.map(entry => entry.action.name).join(', ')}`;
69
+ }
70
+ function modeNote(mode) {
71
+ switch (mode) {
72
+ case 'read-only': return 'read-only: page interaction, scripts, and writes are off';
73
+ case 'standard': return 'standard: page interactions and writes ask the user first';
74
+ case 'autonomous': return 'autonomous: interactions and recipes run directly; scripts, uploads, installs ask';
75
+ case 'unrestricted': return 'unrestricted: no approvals (validation and budgets still apply)';
76
+ }
77
+ }
78
+ export function renderRoot(env) {
79
+ const { usable, blocked } = split(ACTIONS, env);
80
+ const lines = [
81
+ 'dsh-browser: run actions with browser_call({action, args}); browser_index({group}) lists a group, browser_index({action}) gives one action\'s schema, browser_index({query}) searches.',
82
+ `mode ${modeNote(env.mode)}`,
83
+ ];
84
+ if (env.runtime?.chromiumInstalled === false)
85
+ lines.push('Chromium is NOT installed: run runtime.install first (large download).');
86
+ if (env.runtime?.opencliEnabled && env.runtime.opencliInstalled === false)
87
+ lines.push('OpenCLI is enabled but not installed.');
88
+ lines.push('Groups:');
89
+ for (const group of ACTION_GROUPS) {
90
+ const count = usable.filter(action => action.group === group).length;
91
+ if (count === 0)
92
+ continue;
93
+ lines.push(` ${group} (${count}) ${groupSummary(group, env)}`);
94
+ }
95
+ lines.push('Reuse first: browser_call({action:"automation.search",args:{query}}) then {action:"automation.run",args:{id,url,inputs?}}.');
96
+ const note = blockedLine(blocked);
97
+ if (note)
98
+ lines.push(note.length > 400 ? `Unavailable: ${blocked.length} actions (${[...new Set(blocked.map(entry => entry.reason))].join('; ')}); browser_index({group}) shows what is usable.` : note);
99
+ lines.push(env.skillAvailable ? 'Load skill "dsh-browser" for workflow and locator guidance.' : env.prompts?.rootGuide ?? COMPACT_GUIDE);
100
+ if (env.prompts?.rootNote)
101
+ lines.push(env.prompts.rootNote);
102
+ return lines.join('\n');
103
+ }
104
+ export function renderGroup(group, env) {
105
+ if (!isActionGroup(group))
106
+ return `Unknown group "${group}". Groups: ${ACTION_GROUPS.join(', ')}.`;
107
+ const { usable, blocked } = split(actionsInGroup(group), env);
108
+ const lines = [`${group} - ${groupSummary(group, env)}`, ...usable.map(action => line(action, env))];
109
+ const note = blockedLine(blocked);
110
+ if (note)
111
+ lines.push(note);
112
+ return lines.join('\n');
113
+ }
114
+ function exampleLine(action) {
115
+ return (action.examples ?? []).slice(0, 2).map(example => `example: browser_call(${JSON.stringify({ action: action.name, args: example.args })})${example.note ? ` // ${example.note}` : ''}`);
116
+ }
117
+ /** Approval wording for one operation of an action that bundles several (automation.develop). */
118
+ function subApprovalNote(action, sub, mode) {
119
+ if (action.approval !== 'asset-develop')
120
+ return approvalNote(action, mode);
121
+ if (sub === 'get' || sub === 'validate')
122
+ return '';
123
+ if (sub === 'test')
124
+ return mode === 'unrestricted' ? '' : mode === 'autonomous' ? 'asks for userscript drafts' : 'asks';
125
+ return mode === 'standard' ? 'asks to write' : '';
126
+ }
127
+ function pick(params, names) {
128
+ return Object.fromEntries(names.filter(name => name in params).map(name => [name, params[name]]));
129
+ }
130
+ function errorsLine(action, mutating) {
131
+ const codes = action.errors ?? [];
132
+ return `errors: INVALID_ARGS, TARGET_CLOSED, DEADLINE, CANCELLED${action.group === 'act' ? ', LOCATOR_NOT_FOUND, NOT_ACTIONABLE' : ''}${action.params.expectGeneration ? ', TARGET_STALE' : ''}${codes.length ? ', ' + codes.join(', ') : ''}${mutating ? ' (a DEADLINE on this action means the outcome is unknown: verify before retrying)' : ''}`;
133
+ }
134
+ /** The parameters of one operation as the detail prints them: its own required marks and descriptions. */
135
+ function subParams(action, sub, selector) {
136
+ const params = {};
137
+ for (const name of sub.params.filter(param => param !== selector)) {
138
+ const node = action.params[name];
139
+ if (!node)
140
+ continue;
141
+ const hint = sub.hints?.[name];
142
+ const { required: _required, description, ...rest } = node;
143
+ params[name] = { ...rest, ...hint !== undefined ? (hint ? { description: hint } : {}) : description ? { description } : {}, ...sub.required?.includes(name) ? { required: true } : {} };
144
+ }
145
+ return params;
146
+ }
147
+ /** The parent view of an action with sub-actions: what it is, the arguments every operation shares, and one line per operation. */
148
+ function renderActionWithSubs(action, env) {
149
+ const set = action.subActions;
150
+ const reason = actionUnavailableReason(action, env.mode, env.options, env.enabled);
151
+ const note = approvalNote(action, env.mode);
152
+ const own = (sub) => sub.params.filter(name => !set.common.includes(name)).join(', ');
153
+ const lines = [
154
+ `${action.name} - ${summaryOf(action, env)}`,
155
+ `group ${action.group} | changes state (get and validate only read) | ${reason ? `UNAVAILABLE: ${reason}` : note ? `approval: ${note}` : 'no approval needed'}`,
156
+ ...notesOf(action, env) ? [notesOf(action, env)] : [],
157
+ 'common args:',
158
+ ...Object.entries(pick(action.params, set.common)).map(([key, node]) => ` ${key}${node.required ? '' : '?'}: ${node.enum ? node.enum.map(value => JSON.stringify(value)).join('|') : node.type ?? 'any'}${node.description ? ' - ' + node.description : ''}`),
159
+ `sub-actions (full schema of one: browser_index({action:"${action.name}.<sub>"})):`,
160
+ ...Object.entries(set.items).map(([key, sub]) => {
161
+ const flags = env.mode === 'read-only' && !traitsFor(action, { [set.key]: key }).readOnly ? ' [not in read-only]' : '';
162
+ return ` ${key} - ${subSummary(action, key, env)} | ${own(sub) || 'id only'}${flags}`;
163
+ }),
164
+ errorsLine(action, action.mutating),
165
+ ];
166
+ return lines.join('\n');
167
+ }
168
+ /** One operation of an action with sub-actions: only its own arguments, notes and example. */
169
+ function renderSubAction(action, subName, env) {
170
+ const set = action.subActions;
171
+ const sub = set.items[subName];
172
+ const traits = traitsFor(action, { [set.key]: subName });
173
+ const name = `${action.name}.${subName}`;
174
+ const reason = actionUnavailableReason(action, env.mode, env.options, env.enabled, { [set.key]: subName });
175
+ const note = subApprovalNote(action, subName, env.mode);
176
+ const lines = [
177
+ `${name} - ${subSummary(action, subName, env)}`,
178
+ `call: browser_call({action:"${action.name}",args:{${set.key}:"${subName}",...}}) | ${traits.mutating ? 'changes state' : 'read/observe'} | ${reason ? `UNAVAILABLE: ${reason}` : note ? `approval: ${note}` : 'no approval needed'}`,
179
+ ...subNotes(action, subName, env) ? [subNotes(action, subName, env)] : [],
180
+ 'args:',
181
+ ` ${set.key}: "${subName}" - selects this operation`,
182
+ ...describeParams(subParams(action, sub, set.key)).filter(line => line !== ' (no arguments)'),
183
+ ...(sub.examples ?? []).slice(0, 2).map(example => `example: browser_call(${JSON.stringify({ action: action.name, args: example.args })})${example.note ? ` // ${example.note}` : ''}`),
184
+ `errors: INVALID_ARGS${sub.params.includes('url') ? ', TARGET_CLOSED, DEADLINE, CANCELLED' : ''}${sub.errors?.length ? ', ' + sub.errors.join(', ') : ''}${traits.mutating && sub.params.includes('url') ? ' (a DEADLINE here means the outcome is unknown: verify before retrying)' : ''}`,
185
+ ];
186
+ return lines.join('\n');
187
+ }
188
+ export function renderAction(name, env) {
189
+ const action = findAction(name);
190
+ if (!action) {
191
+ const nested = findSubAction(name);
192
+ if (nested)
193
+ return renderSubAction(nested.action, nested.sub, env);
194
+ const topic = findTopic(name);
195
+ if (topic)
196
+ return `${name} - ${topicSummary(topic.action, topic.topic, env)}\n${topicText(topic.action, topic.topic, env)}`;
197
+ if (isActionGroup(name))
198
+ return renderGroup(name, env);
199
+ const hits = searchActions(name, env).slice(0, 5);
200
+ return `Unknown action "${name}".${hits.length ? ' Similar: ' + hits.map(hit => hit.name).join(', ') + '.' : ''} browser_index() lists the groups.`;
201
+ }
202
+ if (action.subActions)
203
+ return renderActionWithSubs(action, env);
204
+ const reason = actionUnavailableReason(action, env.mode, env.options, env.enabled);
205
+ const note = approvalNote(action, env.mode);
206
+ const lines = [
207
+ `${action.name} - ${summaryOf(action, env)}`,
208
+ `group ${action.group} | ${action.mutating ? 'changes state' : 'read/observe'} | ${reason ? `UNAVAILABLE: ${reason}` : note ? `approval: ${note}` : 'no approval needed'}`,
209
+ ...notesOf(action, env) ? [notesOf(action, env)] : [],
210
+ 'args:',
211
+ ...describeParams(action.params),
212
+ ...exampleLine(action),
213
+ ...topicLines(action, env),
214
+ errorsLine(action, action.mutating),
215
+ ];
216
+ return lines.join('\n');
217
+ }
218
+ /** The extra detail pages of an action, one line each. */
219
+ function topicLines(action, env) {
220
+ const topics = Object.keys(action.topics ?? {});
221
+ if (!topics.length)
222
+ return [];
223
+ return [`more detail: ${topics.map(key => `browser_index({action:"${action.name}.${key}"}) ${topicSummary(action, key, env)}`).join(' | ')}`];
224
+ }
225
+ function score(action, terms, env) {
226
+ const name = action.name.toLowerCase();
227
+ const summary = (summaryOf(action, env) + ' ' + Object.keys(action.subActions?.items ?? {}).map(key => key + ' ' + subSummary(action, key, env)).join(' ')).toLowerCase();
228
+ const params = Object.keys(action.params).join(' ').toLowerCase();
229
+ let total = 0;
230
+ for (const term of terms) {
231
+ if (name === term)
232
+ total += 10;
233
+ else if (name.includes(term))
234
+ total += 5;
235
+ if (summary.includes(term))
236
+ total += 2;
237
+ if (action.group === term)
238
+ total += 3;
239
+ if (params.includes(term))
240
+ total += 1;
241
+ }
242
+ return total;
243
+ }
244
+ export function searchActions(query, env) {
245
+ const terms = query.toLowerCase().split(/[^a-z0-9_.]+/).filter(Boolean);
246
+ if (!terms.length)
247
+ return [];
248
+ const { usable } = split(ACTIONS, env);
249
+ return usable.map(action => ({ action, score: score(action, terms, env) })).filter(entry => entry.score > 0)
250
+ .sort((a, b) => b.score - a.score || a.action.name.localeCompare(b.action.name)).slice(0, 8).map(entry => entry.action);
251
+ }
252
+ export function renderSearch(query, env) {
253
+ const hits = searchActions(query, env);
254
+ if (!hits.length)
255
+ return `No usable action matches "${query}". browser_index() lists the groups.`;
256
+ return [`${hits.length} match${hits.length === 1 ? '' : 'es'} for "${query}":`, ...hits.map(action => line(action, env))].join('\n');
257
+ }
258
+ /** Resolve a `browser_index` call to text. `action` wins over `group`, which wins over `query`. */
259
+ export function renderIndex(args, env) {
260
+ if (args.action)
261
+ return { level: 'action', text: renderAction(args.action, env) };
262
+ if (args.group)
263
+ return { level: 'group', text: renderGroup(args.group, env) };
264
+ if (args.query)
265
+ return { level: 'search', text: renderSearch(args.query, env) };
266
+ return { level: 'root', text: renderRoot(env) };
267
+ }
268
+ //# sourceMappingURL=index-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-view.js","sourceRoot":"","sources":["../../src/actions/index-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** `inspect` group: captured console and network records. @module dsh-browser/actions/inspect */
2
+ import type { ActionDef } from './types.ts';
3
+ export declare const INSPECT_ACTIONS: ActionDef[];