opensteer 0.9.3 → 0.9.5
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 +158 -165
- package/dist/{chunk-UM2Q4JD2.js → chunk-7D45QUZ3.js} +5 -7
- package/dist/chunk-7D45QUZ3.js.map +1 -0
- package/dist/{chunk-GREXSYNC.js → chunk-7LQL5YUR.js} +578 -224
- package/dist/chunk-7LQL5YUR.js.map +1 -0
- package/dist/{chunk-2TIVULZY.js → chunk-GSCQQKZZ.js} +53 -9
- package/dist/chunk-GSCQQKZZ.js.map +1 -0
- package/dist/{chunk-BMPUL66S.js → chunk-T5P2QGZ3.js} +58 -53
- package/dist/chunk-T5P2QGZ3.js.map +1 -0
- package/dist/{chunk-FIMNKEG5.js → chunk-ZRF7WMS3.js} +4 -4
- package/dist/{chunk-FIMNKEG5.js.map → chunk-ZRF7WMS3.js.map} +1 -1
- package/dist/cli/bin.cjs +707 -278
- package/dist/cli/bin.cjs.map +1 -1
- package/dist/cli/bin.js +30 -34
- package/dist/cli/bin.js.map +1 -1
- package/dist/index.cjs +733 -473
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +25 -460
- package/dist/index.d.ts +25 -460
- package/dist/index.js +4 -5
- package/dist/local-view/serve-entry.cjs +106 -57
- package/dist/local-view/serve-entry.cjs.map +1 -1
- package/dist/local-view/serve-entry.js +2 -2
- package/dist/opensteer-T2JENADR.js +6 -0
- package/dist/{opensteer-IBDPRIEX.js.map → opensteer-T2JENADR.js.map} +1 -1
- package/dist/{session-control-IFE3IPS3.js → session-control-M3JD7ZKA.js} +4 -4
- package/dist/{session-control-IFE3IPS3.js.map → session-control-M3JD7ZKA.js.map} +1 -1
- package/package.json +6 -6
- package/skills/opensteer/SKILL.md +134 -95
- package/skills/recorder/SKILL.md +43 -48
- package/dist/chunk-2TIVULZY.js.map +0 -1
- package/dist/chunk-BMPUL66S.js.map +0 -1
- package/dist/chunk-GREXSYNC.js.map +0 -1
- package/dist/chunk-KCINASQC.js +0 -3
- package/dist/chunk-KCINASQC.js.map +0 -1
- package/dist/chunk-UM2Q4JD2.js.map +0 -1
- package/dist/opensteer-IBDPRIEX.js +0 -6
- package/skills/recorder/references/recorder-reference.md +0 -71
package/dist/chunk-KCINASQC.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-KCINASQC.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/opensteer.ts"],"names":["options"],"mappings":"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","file":"chunk-UM2Q4JD2.js","sourcesContent":["import type {\n CookieRecord,\n OpensteerCookieQueryOutput,\n OpensteerActionResult,\n OpensteerAddInitScriptInput,\n OpensteerAddInitScriptOutput,\n OpensteerComputerExecuteInput,\n OpensteerComputerExecuteOutput,\n OpensteerComputerKeyModifier,\n OpensteerComputerMouseButton,\n OpensteerNetworkDetailOutput,\n OpensteerNetworkQueryInput,\n OpensteerNetworkQueryOutput,\n OpensteerOpenInput,\n OpensteerOpenOutput,\n OpensteerPageActivateInput,\n OpensteerPageActivateOutput,\n OpensteerPageCloseInput,\n OpensteerPageCloseOutput,\n OpensteerPageEvaluateInput,\n OpensteerPageEvaluateOutput,\n OpensteerPageGotoInput,\n OpensteerPageGotoOutput,\n OpensteerPageListInput,\n OpensteerPageListOutput,\n OpensteerPageNewInput,\n OpensteerPageNewOutput,\n OpensteerRequestBodyInput,\n OpensteerRequestResponseResult,\n OpensteerSessionCloseOutput,\n OpensteerSessionFetchInput,\n OpensteerSessionInfo,\n OpensteerSnapshotMode,\n OpensteerStateQueryOutput,\n OpensteerStorageArea,\n OpensteerStorageDomainSnapshot,\n OpensteerTargetInput,\n} from \"@opensteer/protocol\";\n\nimport {\n OpensteerBrowserManager,\n type OpensteerBrowserStatus,\n type WorkspaceBrowserManifest,\n} from \"../browser-manager.js\";\nimport { resolveOpensteerEnvironment } from \"../env.js\";\nimport type { OpensteerProviderOptions } from \"../provider/config.js\";\nimport type {\n OpensteerInterceptScriptOptions,\n OpensteerInstrumentableRuntime,\n OpensteerRouteOptions,\n OpensteerRouteRegistration,\n} from \"./instrumentation.js\";\nimport type { OpensteerRuntimeOptions } from \"./runtime.js\";\nimport {\n createOpensteerSemanticRuntime,\n resolveOpensteerRuntimeConfig,\n} from \"./runtime-resolution.js\";\nimport type { OpensteerDisconnectableRuntime } from \"./semantic-runtime.js\";\n\nexport interface OpensteerTargetOptions {\n readonly element?: number;\n readonly selector?: string;\n readonly persist?: string;\n readonly captureNetwork?: string;\n}\n\nexport interface OpensteerClickOptions extends OpensteerTargetOptions {\n readonly button?: OpensteerComputerMouseButton;\n readonly clickCount?: number;\n readonly modifiers?: readonly OpensteerComputerKeyModifier[];\n}\n\nexport interface OpensteerInputOptions extends OpensteerTargetOptions {\n readonly text: string;\n readonly pressEnter?: boolean;\n}\n\nexport interface OpensteerScrollOptions extends OpensteerTargetOptions {\n readonly direction: \"up\" | \"down\" | \"left\" | \"right\";\n readonly amount: number;\n}\n\nexport type OpensteerExtractOptions =\n | {\n readonly persist: string;\n readonly schema?: Record<string, unknown>;\n }\n | {\n readonly persist?: string;\n readonly schema: Record<string, unknown>;\n };\n\nexport interface OpensteerWaitForPageOptions {\n readonly openerPageRef?: string;\n readonly urlIncludes?: string;\n readonly timeoutMs?: number;\n readonly pollIntervalMs?: number;\n}\n\nexport type OpensteerAddInitScriptOptions = OpensteerAddInitScriptInput;\nexport type OpensteerGotoOptions = Omit<OpensteerPageGotoInput, \"url\">;\nexport type OpensteerNetworkQueryOptions = OpensteerNetworkQueryInput;\nexport type OpensteerNetworkQueryResult = OpensteerNetworkQueryOutput;\nexport type OpensteerNetworkDetailResult = OpensteerNetworkDetailOutput;\nexport type OpensteerFetchOptions = Omit<OpensteerSessionFetchInput, \"url\" | \"body\"> & {\n readonly body?: string | OpensteerRequestBodyInput;\n};\nexport type OpensteerComputerExecuteOptions = OpensteerComputerExecuteInput;\nexport type OpensteerStorageMap = Readonly<Record<string, string>>;\nexport type OpensteerBrowserState = OpensteerStateQueryOutput;\n\nexport interface OpensteerCookieJar {\n readonly domain?: string;\n has(name: string): boolean;\n get(name: string): string | undefined;\n getAll(): readonly CookieRecord[];\n serialize(): string;\n}\n\nexport interface OpensteerDomController {\n click(input: OpensteerClickOptions): Promise<OpensteerActionResult>;\n hover(input: OpensteerTargetOptions): Promise<OpensteerActionResult>;\n input(input: OpensteerInputOptions): Promise<OpensteerActionResult>;\n scroll(input: OpensteerScrollOptions): Promise<OpensteerActionResult>;\n}\n\nexport interface OpensteerNetworkController {\n query(input?: OpensteerNetworkQueryOptions): Promise<OpensteerNetworkQueryResult>;\n detail(\n recordId: string,\n options?: { readonly probe?: boolean },\n ): Promise<OpensteerNetworkDetailResult>;\n}\n\nexport interface OpensteerOptions extends OpensteerRuntimeOptions {\n readonly provider?: OpensteerProviderOptions;\n}\n\nexport interface OpensteerBrowserCloneOptions {\n readonly sourceUserDataDir: string;\n readonly sourceProfileDirectory?: string;\n}\n\nexport interface OpensteerBrowserController {\n status(): Promise<OpensteerBrowserStatus>;\n clone(input: OpensteerBrowserCloneOptions): Promise<WorkspaceBrowserManifest>;\n reset(): Promise<void>;\n delete(): Promise<void>;\n}\n\nclass SessionCookieJar implements OpensteerCookieJar {\n readonly domain?: string;\n private readonly cookies: readonly CookieRecord[];\n\n constructor(output: OpensteerCookieQueryOutput) {\n if (output.domain !== undefined) {\n this.domain = output.domain;\n }\n this.cookies = output.cookies;\n }\n\n has(name: string): boolean {\n return this.cookies.some((cookie) => cookie.name === name);\n }\n\n get(name: string): string | undefined {\n return this.cookies.find((cookie) => cookie.name === name)?.value;\n }\n\n getAll(): readonly CookieRecord[] {\n return this.cookies;\n }\n\n serialize(): string {\n return this.cookies.map((cookie) => `${cookie.name}=${cookie.value}`).join(\"; \");\n }\n}\n\nexport class Opensteer {\n private readonly runtime: OpensteerDisconnectableRuntime;\n private readonly browserManager: OpensteerBrowserManager | undefined;\n readonly browser: OpensteerBrowserController;\n readonly dom: OpensteerDomController;\n readonly network: OpensteerNetworkController;\n\n constructor(options: OpensteerOptions = {}) {\n const environment = resolveOpensteerEnvironment(options.rootDir);\n const { provider, engineName, ...runtimeOptions } = options;\n const runtimeConfig = resolveOpensteerRuntimeConfig({\n ...(provider === undefined ? {} : { provider }),\n environment,\n });\n\n if (runtimeConfig.provider.mode === \"cloud\") {\n this.browserManager = undefined;\n this.runtime = createOpensteerSemanticRuntime({\n ...(provider === undefined ? {} : { provider }),\n ...(engineName === undefined ? {} : { engine: engineName }),\n environment,\n runtimeOptions,\n });\n this.browser = createUnsupportedBrowserController();\n } else {\n this.browserManager = new OpensteerBrowserManager({\n ...(runtimeOptions.rootDir === undefined ? {} : { rootDir: runtimeOptions.rootDir }),\n ...(runtimeOptions.rootPath === undefined ? {} : { rootPath: runtimeOptions.rootPath }),\n ...(runtimeOptions.workspace === undefined ? {} : { workspace: runtimeOptions.workspace }),\n ...(engineName === undefined ? {} : { engineName }),\n ...(runtimeOptions.browser === undefined ? {} : { browser: runtimeOptions.browser }),\n ...(runtimeOptions.launch === undefined ? {} : { launch: runtimeOptions.launch }),\n ...(runtimeOptions.context === undefined ? {} : { context: runtimeOptions.context }),\n });\n this.runtime = createOpensteerSemanticRuntime({\n ...(provider === undefined ? {} : { provider }),\n ...(engineName === undefined ? {} : { engine: engineName }),\n environment,\n runtimeOptions: {\n ...runtimeOptions,\n rootPath: this.browserManager.rootPath,\n cleanupRootOnClose: this.browserManager.cleanupRootOnDisconnect,\n },\n });\n this.browser = {\n status: () => this.browserManager!.status(),\n clone: (input) => this.browserManager!.clonePersistentBrowser(input),\n reset: () => this.browserManager!.reset(),\n delete: () => this.browserManager!.delete(),\n };\n }\n\n this.dom = {\n click: (input) => this.click(input),\n hover: (input) => this.hover(input),\n input: (input) => this.input(input),\n scroll: (input) => this.scroll(input),\n };\n\n this.network = {\n query: (input = {}) => this.runtime.queryNetwork(input),\n detail: (recordId, options) => this.runtime.getNetworkDetail({ recordId, ...options }),\n };\n }\n\n async open(input: string | OpensteerOpenInput = {}): Promise<OpensteerOpenOutput> {\n return this.runtime.open(typeof input === \"string\" ? { url: input } : input);\n }\n\n async info(): Promise<OpensteerSessionInfo> {\n return this.runtime.info();\n }\n\n async listPages(input: OpensteerPageListInput = {}): Promise<OpensteerPageListOutput> {\n return this.runtime.listPages(input);\n }\n\n async newPage(input: OpensteerPageNewInput = {}): Promise<OpensteerPageNewOutput> {\n return this.runtime.newPage(input);\n }\n\n async activatePage(input: OpensteerPageActivateInput): Promise<OpensteerPageActivateOutput> {\n return this.runtime.activatePage(input);\n }\n\n async closePage(input: OpensteerPageCloseInput = {}): Promise<OpensteerPageCloseOutput> {\n return this.runtime.closePage(input);\n }\n\n async goto(url: string, options: OpensteerGotoOptions = {}): Promise<OpensteerPageGotoOutput> {\n return this.runtime.goto({\n url,\n ...options,\n });\n }\n\n async evaluate(\n input: string | OpensteerPageEvaluateInput,\n ): Promise<OpensteerPageEvaluateOutput[\"value\"]> {\n const normalized =\n typeof input === \"string\"\n ? {\n script: input,\n }\n : input;\n return (await this.runtime.evaluate(normalized)).value;\n }\n\n async addInitScript(\n input: string | OpensteerAddInitScriptInput,\n ): Promise<OpensteerAddInitScriptOutput> {\n return this.runtime.addInitScript(\n typeof input === \"string\"\n ? {\n script: input,\n }\n : input,\n );\n }\n\n async click(input: OpensteerClickOptions): Promise<OpensteerActionResult> {\n const { button, clickCount, modifiers, ...target } = input;\n return this.runtime.click({\n ...normalizeTargetOptions(target),\n ...(button === undefined ? {} : { button }),\n ...(clickCount === undefined ? {} : { clickCount }),\n ...(modifiers === undefined ? {} : { modifiers }),\n });\n }\n\n async hover(input: OpensteerTargetOptions): Promise<OpensteerActionResult> {\n return this.runtime.hover(normalizeTargetOptions(input));\n }\n\n async input(input: OpensteerInputOptions): Promise<OpensteerActionResult> {\n return this.runtime.input({\n ...normalizeTargetOptions(input),\n text: input.text,\n ...(input.pressEnter === undefined ? {} : { pressEnter: input.pressEnter }),\n });\n }\n\n async scroll(input: OpensteerScrollOptions): Promise<OpensteerActionResult> {\n return this.runtime.scroll({\n ...normalizeTargetOptions(input),\n direction: input.direction,\n amount: input.amount,\n });\n }\n\n async extract(input: OpensteerExtractOptions): Promise<unknown> {\n return (await this.runtime.extract(input)).data;\n }\n\n async waitForPage(\n input: OpensteerWaitForPageOptions = {},\n ): Promise<OpensteerPageListOutput[\"pages\"][number]> {\n const baseline = new Set((await this.runtime.listPages()).pages.map((page) => page.pageRef));\n const timeoutAt = Date.now() + (input.timeoutMs ?? 30_000);\n const pollIntervalMs = input.pollIntervalMs ?? 100;\n\n while (true) {\n const match = (await this.runtime.listPages()).pages.find((page) => {\n if (baseline.has(page.pageRef)) {\n return false;\n }\n if (input.openerPageRef !== undefined && page.openerPageRef !== input.openerPageRef) {\n return false;\n }\n if (input.urlIncludes !== undefined && !page.url.includes(input.urlIncludes)) {\n return false;\n }\n return true;\n });\n if (match !== undefined) {\n return match;\n }\n if (Date.now() >= timeoutAt) {\n throw new Error(\"waitForPage timed out\");\n }\n await delay(pollIntervalMs);\n }\n }\n\n async snapshot(mode: OpensteerSnapshotMode = \"action\"): Promise<string> {\n return (await this.runtime.snapshot({ mode })).html;\n }\n\n async cookies(domain?: string): Promise<OpensteerCookieJar> {\n return new SessionCookieJar(\n await this.runtime.getCookies(domain === undefined ? {} : { domain }),\n );\n }\n\n async storage(\n domain?: string,\n type: OpensteerStorageArea = \"local\",\n ): Promise<OpensteerStorageMap> {\n const snapshot = await this.runtime.getStorageSnapshot(domain === undefined ? {} : { domain });\n const domainSnapshot = pickStorageDomainSnapshot(snapshot, domain);\n if (domainSnapshot === undefined) {\n return {};\n }\n const entries = type === \"local\" ? domainSnapshot.localStorage : domainSnapshot.sessionStorage;\n return Object.fromEntries(entries.map((entry) => [entry.key, entry.value]));\n }\n\n async state(domain?: string): Promise<OpensteerBrowserState> {\n return this.runtime.getBrowserState(domain === undefined ? {} : { domain });\n }\n\n async fetch(url: string, options: OpensteerFetchOptions = {}): Promise<Response> {\n const input = buildFetchInput(url, options);\n const result = await this.runtime.fetch(input);\n if (result.response === undefined) {\n throw new Error(result.note ?? `session.fetch did not produce a response for ${url}`);\n }\n return toResponse(result.response);\n }\n\n async computerExecute(\n input: OpensteerComputerExecuteOptions,\n ): Promise<OpensteerComputerExecuteOutput> {\n return this.runtime.computerExecute(input);\n }\n\n async route(input: OpensteerRouteOptions): Promise<OpensteerRouteRegistration> {\n return this.requireOwnedInstrumentationRuntime(\"route\").route(input);\n }\n\n async interceptScript(\n input: OpensteerInterceptScriptOptions,\n ): Promise<OpensteerRouteRegistration> {\n return this.requireOwnedInstrumentationRuntime(\"interceptScript\").interceptScript(input);\n }\n\n async close(): Promise<OpensteerSessionCloseOutput> {\n if (this.browserManager === undefined || this.browserManager.mode === \"temporary\") {\n return this.runtime.close();\n }\n\n const output = await this.runtime.close();\n await this.browserManager.close();\n return output;\n }\n\n async disconnect(): Promise<void> {\n await this.runtime.disconnect();\n }\n\n private requireOwnedInstrumentationRuntime(\n method: \"route\" | \"interceptScript\",\n ): OpensteerInstrumentableRuntime {\n if (\n typeof (this.runtime as Partial<OpensteerInstrumentableRuntime>).route === \"function\" &&\n typeof (this.runtime as Partial<OpensteerInstrumentableRuntime>).interceptScript ===\n \"function\"\n ) {\n return this.runtime as OpensteerDisconnectableRuntime & OpensteerInstrumentableRuntime;\n }\n throw new Error(`${method}() is not available for this session runtime.`);\n }\n}\n\nfunction createUnsupportedBrowserController(): OpensteerBrowserController {\n const fail = async (): Promise<never> => {\n throw new Error(\"browser.* helpers are only available in local mode.\");\n };\n\n return {\n status: fail,\n clone: fail,\n reset: fail,\n delete: fail,\n };\n}\n\nfunction normalizeTargetOptions(input: OpensteerTargetOptions): {\n readonly target: OpensteerTargetInput;\n readonly persist?: string;\n readonly captureNetwork?: string;\n} {\n const hasElement = input.element !== undefined;\n const hasSelector = input.selector !== undefined;\n if (hasElement && hasSelector) {\n throw new Error(\"Specify exactly one of element, selector, or persist.\");\n }\n\n if (hasElement) {\n return {\n target: {\n kind: \"element\",\n element: input.element,\n },\n ...(input.persist === undefined ? {} : { persist: input.persist }),\n ...(input.captureNetwork === undefined ? {} : { captureNetwork: input.captureNetwork }),\n };\n }\n\n if (hasSelector) {\n return {\n target: {\n kind: \"selector\",\n selector: input.selector,\n },\n ...(input.persist === undefined ? {} : { persist: input.persist }),\n ...(input.captureNetwork === undefined ? {} : { captureNetwork: input.captureNetwork }),\n };\n }\n\n if (input.persist === undefined) {\n throw new Error(\"Specify exactly one of element, selector, or persist.\");\n }\n\n return {\n target: {\n kind: \"persist\",\n persist: input.persist,\n },\n ...(input.captureNetwork === undefined ? {} : { captureNetwork: input.captureNetwork }),\n };\n}\n\nfunction pickStorageDomainSnapshot(\n snapshot: {\n readonly domains: readonly OpensteerStorageDomainSnapshot[];\n },\n domain: string | undefined,\n): OpensteerStorageDomainSnapshot | undefined {\n if (snapshot.domains.length === 0) {\n return undefined;\n }\n if (domain === undefined) {\n return snapshot.domains[0];\n }\n return snapshot.domains.find((entry) => entry.domain === domain);\n}\n\nfunction buildFetchInput(url: string, options: OpensteerFetchOptions): OpensteerSessionFetchInput {\n const { body, ...rest } = options;\n return {\n url,\n ...rest,\n ...(body === undefined ? {} : { body: normalizeFetchBody(body, rest.headers) }),\n };\n}\n\nfunction normalizeFetchBody(\n body: string | OpensteerRequestBodyInput,\n headers: OpensteerSessionFetchInput[\"headers\"],\n): OpensteerRequestBodyInput {\n if (typeof body !== \"string\") {\n return body;\n }\n\n const contentType = findHeaderValue(headers, \"content-type\");\n return contentType === undefined ? { text: body } : { text: body, contentType };\n}\n\nfunction findHeaderValue(\n headers: OpensteerSessionFetchInput[\"headers\"],\n headerName: string,\n): string | undefined {\n if (headers === undefined) {\n return undefined;\n }\n\n const match = Object.entries(headers).find(\n ([name]) => name.toLowerCase() === headerName.toLowerCase(),\n );\n return match === undefined ? undefined : String(match[1]);\n}\n\nfunction toResponse(response: OpensteerRequestResponseResult): Response {\n return new Response(decodeBody(response), {\n status: response.status,\n statusText: response.statusText,\n headers: Object.fromEntries(response.headers.map((header) => [header.name, header.value])),\n });\n}\n\nfunction decodeBody(response: OpensteerRequestResponseResult): Uint8Array | undefined {\n if (response.body === undefined) {\n return undefined;\n }\n return Uint8Array.from(Buffer.from(response.body.data, \"base64\"));\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"]}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# Recorder Reference
|
|
2
|
-
|
|
3
|
-
Read this file when you need recorder constraints, replay details, or non-default invocation patterns.
|
|
4
|
-
|
|
5
|
-
## Command
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
opensteer record --workspace <id> --url <url> [--output <path>]
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Useful launch-arg pattern when the value begins with dashes:
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
opensteer record --workspace <id> --url <url> --arg=--remote-debugging-port=9333
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## Stop behavior
|
|
18
|
-
|
|
19
|
-
- The recorder stops when the user clicks the injected `Stop recording` button in the browser.
|
|
20
|
-
- After stop, the CLI writes the replay script and closes the owned browser session.
|
|
21
|
-
- Do not use removed timeout flags such as `--record-timeout-ms`.
|
|
22
|
-
|
|
23
|
-
## What Gets Recorded
|
|
24
|
-
|
|
25
|
-
- Clicks and double-clicks
|
|
26
|
-
- Text entry with idle-based coalescing
|
|
27
|
-
- Special key presses such as `Enter`, `Tab`, `Escape`, `Backspace`, `Delete`, and arrow keys
|
|
28
|
-
- Scroll gestures
|
|
29
|
-
- `<select>` value changes
|
|
30
|
-
- Same-document navigation via `pushState`, `replaceState`, `popstate`, and `hashchange`
|
|
31
|
-
- Full-page navigations, reloads, and back/forward traversal when they can be inferred
|
|
32
|
-
- New tabs, closed tabs, and tab switches
|
|
33
|
-
|
|
34
|
-
## Selector Strategy
|
|
35
|
-
|
|
36
|
-
- Prefer stable single-attribute selectors such as `data-testid`, `data-test`, `data-qa`, `data-cy`, `id`, `name`, `role`, and `aria-label`
|
|
37
|
-
- Reuse the same attribute-priority ordering as Opensteer DOM match policy
|
|
38
|
-
- Fall back to short ancestor paths with attribute hints and `:nth-of-type()` when needed
|
|
39
|
-
- Require selector uniqueness at capture time
|
|
40
|
-
|
|
41
|
-
## Generated Replay
|
|
42
|
-
|
|
43
|
-
- Opens the recorded start URL in the target workspace
|
|
44
|
-
- Keeps stable page variables such as `page0`, `page1`, and `page2`
|
|
45
|
-
- Activates the correct page before page-scoped SDK actions
|
|
46
|
-
- Merges `Enter` into the preceding `input()` call when the capture sequence allows it
|
|
47
|
-
- Uses `evaluate()` helpers when replay needs behavior that is not yet exposed as a first-class SDK helper
|
|
48
|
-
|
|
49
|
-
## Replay verification
|
|
50
|
-
|
|
51
|
-
- Default generated path: `.opensteer/workspaces/<id>/recorded-flow.ts`
|
|
52
|
-
- Typical replay command: `pnpm exec tsx <path-to-recorded-flow.ts>`
|
|
53
|
-
- Review the script before replay if the user performed unsupported or approximate browser actions
|
|
54
|
-
|
|
55
|
-
## Limitations
|
|
56
|
-
|
|
57
|
-
- v1 records only the top frame
|
|
58
|
-
- Cross-origin iframes are not recorded
|
|
59
|
-
- Shadow DOM selectors are best effort
|
|
60
|
-
- File uploads, drag-and-drop, and canvas interactions are not fully modeled
|
|
61
|
-
- Some browser-native key and pointer modifiers are approximated in replay because the public SDK surface is narrower than the raw browser event stream
|
|
62
|
-
- Back and forward detection is best effort and may fall back to direct navigation replay in ambiguous cases
|
|
63
|
-
|
|
64
|
-
## Workflow
|
|
65
|
-
|
|
66
|
-
1. Start recording with `opensteer record`.
|
|
67
|
-
2. Perform the workflow manually in the headed browser.
|
|
68
|
-
3. Click the `Stop recording` button in the browser.
|
|
69
|
-
4. Wait for the recorder to write `recorded-flow.ts` and close the browser session.
|
|
70
|
-
5. Review the generated `recorded-flow.ts`.
|
|
71
|
-
6. Run the script with `tsx` or integrate it into a larger automation.
|