opendevbrowser 0.0.16 → 0.0.17
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 +51 -27
- package/dist/browser/annotation-manager.d.ts +3 -0
- package/dist/browser/annotation-manager.d.ts.map +1 -1
- package/dist/browser/browser-manager.d.ts +6 -1
- package/dist/browser/browser-manager.d.ts.map +1 -1
- package/dist/browser/canvas-client.d.ts +53 -0
- package/dist/browser/canvas-client.d.ts.map +1 -0
- package/dist/browser/canvas-code-sync-manager.d.ts +79 -0
- package/dist/browser/canvas-code-sync-manager.d.ts.map +1 -0
- package/dist/browser/canvas-manager.d.ts +94 -0
- package/dist/browser/canvas-manager.d.ts.map +1 -0
- package/dist/browser/canvas-runtime-preview-bridge.d.ts +20 -0
- package/dist/browser/canvas-runtime-preview-bridge.d.ts.map +1 -0
- package/dist/browser/canvas-session-sync-manager.d.ts +21 -0
- package/dist/browser/canvas-session-sync-manager.d.ts.map +1 -0
- package/dist/browser/manager-types.d.ts +13 -1
- package/dist/browser/manager-types.d.ts.map +1 -1
- package/dist/browser/ops-browser-manager.d.ts +11 -1
- package/dist/browser/ops-browser-manager.d.ts.map +1 -1
- package/dist/canvas/code-sync/apply-tsx.d.ts +23 -0
- package/dist/canvas/code-sync/apply-tsx.d.ts.map +1 -0
- package/dist/canvas/code-sync/graph.d.ts +5 -0
- package/dist/canvas/code-sync/graph.d.ts.map +1 -0
- package/dist/canvas/code-sync/hash.d.ts +3 -0
- package/dist/canvas/code-sync/hash.d.ts.map +1 -0
- package/dist/canvas/code-sync/import.d.ts +18 -0
- package/dist/canvas/code-sync/import.d.ts.map +1 -0
- package/dist/canvas/code-sync/manifest.d.ts +5 -0
- package/dist/canvas/code-sync/manifest.d.ts.map +1 -0
- package/dist/canvas/code-sync/tsx-adapter.d.ts +8 -0
- package/dist/canvas/code-sync/tsx-adapter.d.ts.map +1 -0
- package/dist/canvas/code-sync/types.d.ts +152 -0
- package/dist/canvas/code-sync/types.d.ts.map +1 -0
- package/dist/canvas/code-sync/write.d.ts +9 -0
- package/dist/canvas/code-sync/write.d.ts.map +1 -0
- package/dist/canvas/document-store.d.ts +81 -0
- package/dist/canvas/document-store.d.ts.map +1 -0
- package/dist/canvas/export.d.ts +12 -0
- package/dist/canvas/export.d.ts.map +1 -0
- package/dist/canvas/repo-store.d.ts +10 -0
- package/dist/canvas/repo-store.d.ts.map +1 -0
- package/dist/canvas/surface-palette.d.ts +15 -0
- package/dist/canvas/surface-palette.d.ts.map +1 -0
- package/dist/canvas/types.d.ts +255 -0
- package/dist/canvas/types.d.ts.map +1 -0
- package/dist/canvas-runtime-preview-bridge-HBEHXM4T.js +7 -0
- package/dist/canvas-runtime-preview-bridge-HBEHXM4T.js.map +1 -0
- package/dist/{chunk-ST7CO5FA.js → chunk-5J3IFL3X.js} +11577 -13539
- package/dist/chunk-5J3IFL3X.js.map +1 -0
- package/dist/chunk-D633UO34.js +8149 -0
- package/dist/chunk-D633UO34.js.map +1 -0
- package/dist/{chunk-7W3SPXIB.js → chunk-FUSXMW3G.js} +4 -1
- package/dist/chunk-TBUCZX4A.js +34 -0
- package/dist/chunk-TBUCZX4A.js.map +1 -0
- package/dist/chunk-V7KUDHDG.js +276 -0
- package/dist/chunk-V7KUDHDG.js.map +1 -0
- package/dist/chunk-Y2KL55OG.js +59 -0
- package/dist/chunk-Y2KL55OG.js.map +1 -0
- package/dist/cli/args.d.ts +3 -3
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/commands/annotate.d.ts +11 -0
- package/dist/cli/commands/annotate.d.ts.map +1 -1
- package/dist/cli/commands/canvas.d.ts +45 -0
- package/dist/cli/commands/canvas.d.ts.map +1 -0
- package/dist/cli/commands/devtools/perf.d.ts.map +1 -1
- package/dist/cli/commands/devtools/screenshot.d.ts +1 -0
- package/dist/cli/commands/devtools/screenshot.d.ts.map +1 -1
- package/dist/cli/commands/dom/attr.d.ts.map +1 -1
- package/dist/cli/commands/dom/checked.d.ts.map +1 -1
- package/dist/cli/commands/dom/enabled.d.ts.map +1 -1
- package/dist/cli/commands/dom/html.d.ts.map +1 -1
- package/dist/cli/commands/dom/text.d.ts.map +1 -1
- package/dist/cli/commands/dom/value.d.ts.map +1 -1
- package/dist/cli/commands/dom/visible.d.ts.map +1 -1
- package/dist/cli/commands/export/clone-component.d.ts +9 -0
- package/dist/cli/commands/export/clone-component.d.ts.map +1 -1
- package/dist/cli/commands/export/clone-page.d.ts +8 -0
- package/dist/cli/commands/export/clone-page.d.ts.map +1 -1
- package/dist/cli/commands/interact/check.d.ts.map +1 -1
- package/dist/cli/commands/interact/click.d.ts.map +1 -1
- package/dist/cli/commands/interact/hover.d.ts.map +1 -1
- package/dist/cli/commands/interact/press.d.ts.map +1 -1
- package/dist/cli/commands/interact/scroll-into-view.d.ts.map +1 -1
- package/dist/cli/commands/interact/scroll.d.ts.map +1 -1
- package/dist/cli/commands/interact/select.d.ts.map +1 -1
- package/dist/cli/commands/interact/type.d.ts.map +1 -1
- package/dist/cli/commands/interact/uncheck.d.ts.map +1 -1
- package/dist/cli/commands/native.d.ts +12 -1
- package/dist/cli/commands/native.d.ts.map +1 -1
- package/dist/cli/commands/nav/goto.d.ts.map +1 -1
- package/dist/cli/commands/nav/snapshot.d.ts.map +1 -1
- package/dist/cli/commands/nav/wait.d.ts.map +1 -1
- package/dist/cli/commands/serve.d.ts +5 -0
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/session/connect.d.ts.map +1 -1
- package/dist/cli/commands/status.d.ts +5 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/daemon-commands.d.ts.map +1 -1
- package/dist/cli/help.d.ts +5 -0
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.js +724 -163
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/remote-canvas-manager.d.ts +8 -0
- package/dist/cli/remote-canvas-manager.d.ts.map +1 -0
- package/dist/cli/remote-manager.d.ts +3 -1
- package/dist/cli/remote-manager.d.ts.map +1 -1
- package/dist/cli/remote-relay.d.ts +2 -0
- package/dist/cli/remote-relay.d.ts.map +1 -1
- package/dist/cli/utils/parse.d.ts +1 -0
- package/dist/cli/utils/parse.d.ts.map +1 -1
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/fs-UMRKOBNN.js +7 -0
- package/dist/fs-UMRKOBNN.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +192 -67
- package/dist/index.js.map +1 -1
- package/dist/{macros-NUBRM44Y.js → macros-ND2M7LWU.js} +2 -2
- package/dist/opendevbrowser.d.ts.map +1 -1
- package/dist/opendevbrowser.js +192 -67
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/shopping/index.d.ts.map +1 -1
- package/dist/providers-G3LRHQXX.js +121 -0
- package/dist/providers-G3LRHQXX.js.map +1 -0
- package/dist/relay/protocol.d.ts +85 -3
- package/dist/relay/protocol.d.ts.map +1 -1
- package/dist/relay/relay-server.d.ts +14 -1
- package/dist/relay/relay-server.d.ts.map +1 -1
- package/dist/relay/relay-types.d.ts +3 -0
- package/dist/relay/relay-types.d.ts.map +1 -1
- package/dist/runtime-factory-BICHDPE7.js +13 -0
- package/dist/runtime-factory-BICHDPE7.js.map +1 -0
- package/dist/tools/annotate.d.ts.map +1 -1
- package/dist/tools/canvas.d.ts +4 -0
- package/dist/tools/canvas.d.ts.map +1 -0
- package/dist/tools/check.d.ts.map +1 -1
- package/dist/tools/click.d.ts.map +1 -1
- package/dist/tools/clone_component.d.ts.map +1 -1
- package/dist/tools/clone_page.d.ts.map +1 -1
- package/dist/tools/connect.d.ts.map +1 -1
- package/dist/tools/deps.d.ts +2 -0
- package/dist/tools/deps.d.ts.map +1 -1
- package/dist/tools/dom_get_html.d.ts.map +1 -1
- package/dist/tools/dom_get_text.d.ts.map +1 -1
- package/dist/tools/get_attr.d.ts.map +1 -1
- package/dist/tools/get_value.d.ts.map +1 -1
- package/dist/tools/goto.d.ts.map +1 -1
- package/dist/tools/hover.d.ts.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/is_checked.d.ts.map +1 -1
- package/dist/tools/is_enabled.d.ts.map +1 -1
- package/dist/tools/is_visible.d.ts.map +1 -1
- package/dist/tools/launch.d.ts.map +1 -1
- package/dist/tools/macro_resolve.d.ts.map +1 -1
- package/dist/tools/perf.d.ts.map +1 -1
- package/dist/tools/press.d.ts.map +1 -1
- package/dist/tools/product_video_run.d.ts.map +1 -1
- package/dist/tools/research_run.d.ts.map +1 -1
- package/dist/tools/response.d.ts +4 -1
- package/dist/tools/response.d.ts.map +1 -1
- package/dist/tools/screenshot.d.ts.map +1 -1
- package/dist/tools/scroll.d.ts.map +1 -1
- package/dist/tools/scroll_into_view.d.ts.map +1 -1
- package/dist/tools/select.d.ts.map +1 -1
- package/dist/tools/shopping_run.d.ts.map +1 -1
- package/dist/tools/snapshot.d.ts.map +1 -1
- package/dist/tools/type.d.ts.map +1 -1
- package/dist/tools/uncheck.d.ts.map +1 -1
- package/dist/tools/wait.d.ts.map +1 -1
- package/dist/tools/workflow-runtime.d.ts +1 -2
- package/dist/tools/workflow-runtime.d.ts.map +1 -1
- package/extension/canvas.html +636 -0
- package/extension/dist/annotate-content.css +15 -6
- package/extension/dist/annotate-content.js +119 -9
- package/extension/dist/annotation-payload.js +163 -0
- package/extension/dist/background.js +148 -18
- package/extension/dist/canvas/canvas-runtime.js +1061 -0
- package/extension/dist/canvas/model.js +213 -0
- package/extension/dist/canvas/viewport-fit.js +67 -0
- package/extension/dist/canvas-page.js +1801 -0
- package/extension/dist/ops/dom-bridge.js +116 -3
- package/extension/dist/ops/ops-runtime.js +508 -44
- package/extension/dist/ops/ops-session-store.js +21 -114
- package/extension/dist/ops/target-session-coordinator.js +157 -0
- package/extension/dist/popup.js +155 -31
- package/extension/dist/services/ConnectionManager.js +17 -0
- package/extension/dist/services/RelayClient.js +9 -0
- package/extension/dist/services/TabManager.js +35 -12
- package/extension/dist/types.js +2 -0
- package/extension/manifest.json +1 -1
- package/extension/popup.html +52 -0
- package/package.json +6 -4
- package/skills/AGENTS.md +5 -2
- package/skills/opendevbrowser-best-practices/SKILL.md +71 -3
- package/skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md +141 -0
- package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +113 -17
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-blocker-checklist.json +70 -0
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-feedback-eval.json +73 -0
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-generation-plan.v1.json +67 -0
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-handshake-example.json +126 -0
- package/skills/opendevbrowser-best-practices/assets/templates/robustness-checklist.json +57 -0
- package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +7 -3
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +26 -0
- package/skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh +82 -1
- package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +225 -84
- package/dist/chunk-ST7CO5FA.js.map +0 -1
- /package/dist/{chunk-7W3SPXIB.js.map → chunk-FUSXMW3G.js.map} +0 -0
- /package/dist/{macros-NUBRM44Y.js.map → macros-ND2M7LWU.js.map} +0 -0
|
@@ -157,10 +157,13 @@ var classifyErrorCode = (message, fallback) => {
|
|
|
157
157
|
};
|
|
158
158
|
|
|
159
159
|
export {
|
|
160
|
+
isProviderReasonCode,
|
|
160
161
|
normalizeProviderReasonCode,
|
|
161
162
|
providerErrorCodeFromReasonCode,
|
|
162
163
|
ProviderRuntimeError,
|
|
164
|
+
isRetryableByCode,
|
|
165
|
+
isProviderRuntimeError,
|
|
163
166
|
createProviderError,
|
|
164
167
|
toProviderError
|
|
165
168
|
};
|
|
166
|
-
//# sourceMappingURL=chunk-
|
|
169
|
+
//# sourceMappingURL=chunk-FUSXMW3G.js.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// src/utils/fs.ts
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
import * as crypto from "crypto";
|
|
5
|
+
function writeFileAtomic(filePath, content, options = {}) {
|
|
6
|
+
const { encoding = "utf-8", mode } = options;
|
|
7
|
+
const dir = path.dirname(filePath);
|
|
8
|
+
const hash = crypto.randomBytes(8).toString("hex");
|
|
9
|
+
const tempPath = path.join(dir, `.${path.basename(filePath)}.${process.pid}.${hash}.tmp`);
|
|
10
|
+
try {
|
|
11
|
+
if (!fs.existsSync(dir)) {
|
|
12
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
const writeOptions = { encoding };
|
|
15
|
+
if (mode !== void 0) {
|
|
16
|
+
writeOptions.mode = mode;
|
|
17
|
+
}
|
|
18
|
+
fs.writeFileSync(tempPath, content, writeOptions);
|
|
19
|
+
fs.renameSync(tempPath, filePath);
|
|
20
|
+
} catch (error) {
|
|
21
|
+
try {
|
|
22
|
+
if (fs.existsSync(tempPath)) {
|
|
23
|
+
fs.unlinkSync(tempPath);
|
|
24
|
+
}
|
|
25
|
+
} catch {
|
|
26
|
+
}
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
writeFileAtomic
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=chunk-TBUCZX4A.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/fs.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as crypto from \"crypto\";\n\nexport function writeFileAtomic(\n filePath: string,\n content: string,\n options: { encoding?: BufferEncoding; mode?: number } = {}\n): void {\n const { encoding = \"utf-8\", mode } = options;\n const dir = path.dirname(filePath);\n const hash = crypto.randomBytes(8).toString(\"hex\");\n const tempPath = path.join(dir, `.${path.basename(filePath)}.${process.pid}.${hash}.tmp`);\n\n try {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n const writeOptions: fs.WriteFileOptions = { encoding };\n if (mode !== undefined) {\n writeOptions.mode = mode;\n }\n fs.writeFileSync(tempPath, content, writeOptions);\n fs.renameSync(tempPath, filePath);\n } catch (error) {\n try {\n if (fs.existsSync(tempPath)) {\n fs.unlinkSync(tempPath);\n }\n } catch {\n /* best-effort cleanup */\n }\n throw error;\n }\n}\n"],"mappings":";AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,YAAY,YAAY;AAEjB,SAAS,gBACd,UACA,SACA,UAAwD,CAAC,GACnD;AACN,QAAM,EAAE,WAAW,SAAS,KAAK,IAAI;AACrC,QAAM,MAAW,aAAQ,QAAQ;AACjC,QAAM,OAAc,mBAAY,CAAC,EAAE,SAAS,KAAK;AACjD,QAAM,WAAgB,UAAK,KAAK,IAAS,cAAS,QAAQ,CAAC,IAAI,QAAQ,GAAG,IAAI,IAAI,MAAM;AAExF,MAAI;AACF,QAAI,CAAI,cAAW,GAAG,GAAG;AACvB,MAAG,aAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,IACvC;AAEA,UAAM,eAAoC,EAAE,SAAS;AACrD,QAAI,SAAS,QAAW;AACtB,mBAAa,OAAO;AAAA,IACtB;AACA,IAAG,iBAAc,UAAU,SAAS,YAAY;AAChD,IAAG,cAAW,UAAU,QAAQ;AAAA,EAClC,SAAS,OAAO;AACd,QAAI;AACF,UAAO,cAAW,QAAQ,GAAG;AAC3B,QAAG,cAAW,QAAQ;AAAA,MACxB;AAAA,IACF,QAAQ;AAAA,IAER;AACA,UAAM;AAAA,EACR;AACF;","names":[]}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createDefaultRuntime
|
|
3
|
+
} from "./chunk-D633UO34.js";
|
|
4
|
+
|
|
5
|
+
// src/providers/runtime-factory.ts
|
|
6
|
+
import * as path from "path";
|
|
7
|
+
import * as os from "os";
|
|
8
|
+
import { readFile } from "fs/promises";
|
|
9
|
+
var DEFAULT_COOKIE_POLICY = "auto";
|
|
10
|
+
var DEFAULT_COOKIE_SOURCE = {
|
|
11
|
+
type: "file",
|
|
12
|
+
value: "~/.config/opencode/opendevbrowser.provider-cookies.json"
|
|
13
|
+
};
|
|
14
|
+
var toFallbackMode = (mode) => {
|
|
15
|
+
return mode === "extension" ? "extension" : "managed_headed";
|
|
16
|
+
};
|
|
17
|
+
var expandHomePath = (filePath) => {
|
|
18
|
+
if (filePath === "~") return os.homedir();
|
|
19
|
+
if (filePath.startsWith("~/")) {
|
|
20
|
+
return path.join(os.homedir(), filePath.slice(2));
|
|
21
|
+
}
|
|
22
|
+
return filePath;
|
|
23
|
+
};
|
|
24
|
+
var cookieSourceRef = (source) => {
|
|
25
|
+
if (source.type === "file") {
|
|
26
|
+
return expandHomePath(source.value);
|
|
27
|
+
}
|
|
28
|
+
if (source.type === "env") {
|
|
29
|
+
return source.value;
|
|
30
|
+
}
|
|
31
|
+
return "inline";
|
|
32
|
+
};
|
|
33
|
+
var parseCookieArray = (payload) => {
|
|
34
|
+
const parsed = JSON.parse(payload);
|
|
35
|
+
if (!Array.isArray(parsed)) {
|
|
36
|
+
throw new Error("Cookie payload must be a JSON array.");
|
|
37
|
+
}
|
|
38
|
+
return parsed;
|
|
39
|
+
};
|
|
40
|
+
var readCookiesFromSource = async (source) => {
|
|
41
|
+
if (source.type === "inline") {
|
|
42
|
+
return {
|
|
43
|
+
cookies: source.value,
|
|
44
|
+
available: source.value.length > 0,
|
|
45
|
+
...source.value.length === 0 ? { message: "Inline cookie source is empty." } : {}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (source.type === "env") {
|
|
49
|
+
const envValue = process.env[source.value];
|
|
50
|
+
if (!envValue || envValue.trim().length === 0) {
|
|
51
|
+
return {
|
|
52
|
+
cookies: [],
|
|
53
|
+
available: false,
|
|
54
|
+
message: `Cookie env ${source.value} is not set.`
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
const cookies = parseCookieArray(envValue);
|
|
59
|
+
return { cookies, available: cookies.length > 0 };
|
|
60
|
+
} catch (error) {
|
|
61
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
62
|
+
return {
|
|
63
|
+
cookies: [],
|
|
64
|
+
available: false,
|
|
65
|
+
message: `Cookie env ${source.value} is invalid JSON: ${message}`
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const resolvedPath = expandHomePath(source.value);
|
|
70
|
+
try {
|
|
71
|
+
const payload = await readFile(resolvedPath, "utf8");
|
|
72
|
+
const cookies = parseCookieArray(payload);
|
|
73
|
+
return { cookies, available: cookies.length > 0 };
|
|
74
|
+
} catch (error) {
|
|
75
|
+
if (error.code === "ENOENT") {
|
|
76
|
+
return {
|
|
77
|
+
cookies: [],
|
|
78
|
+
available: false,
|
|
79
|
+
message: `Cookie file not found: ${resolvedPath}`
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
83
|
+
return {
|
|
84
|
+
cookies: [],
|
|
85
|
+
available: false,
|
|
86
|
+
message: `Cookie file read failed: ${message}`
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
var resolveEffectiveCookiePolicy = (defaults, request) => {
|
|
91
|
+
if (request.cookiePolicyOverride) {
|
|
92
|
+
return request.cookiePolicyOverride;
|
|
93
|
+
}
|
|
94
|
+
if (request.useCookies === false) {
|
|
95
|
+
return "off";
|
|
96
|
+
}
|
|
97
|
+
if (request.useCookies === true && defaults.policy === "off") {
|
|
98
|
+
return "auto";
|
|
99
|
+
}
|
|
100
|
+
return defaults.policy;
|
|
101
|
+
};
|
|
102
|
+
var baseCookieDiagnostics = (policy, source) => ({
|
|
103
|
+
policy,
|
|
104
|
+
source: source.type,
|
|
105
|
+
sourceRef: cookieSourceRef(source),
|
|
106
|
+
attempted: false,
|
|
107
|
+
available: false,
|
|
108
|
+
loaded: 0,
|
|
109
|
+
injected: 0,
|
|
110
|
+
rejected: 0,
|
|
111
|
+
verifiedCount: 0,
|
|
112
|
+
strict: false
|
|
113
|
+
});
|
|
114
|
+
var fallbackFailure = (reasonCode, message, cookieDiagnostics) => ({
|
|
115
|
+
ok: false,
|
|
116
|
+
reasonCode,
|
|
117
|
+
details: {
|
|
118
|
+
message,
|
|
119
|
+
...cookieDiagnostics ? { cookieDiagnostics } : {}
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
var createBrowserFallbackPort = (manager, cookieDefaults = {}) => {
|
|
123
|
+
if (!manager) return void 0;
|
|
124
|
+
const defaults = {
|
|
125
|
+
policy: cookieDefaults.policy ?? DEFAULT_COOKIE_POLICY,
|
|
126
|
+
source: cookieDefaults.source ?? DEFAULT_COOKIE_SOURCE
|
|
127
|
+
};
|
|
128
|
+
return {
|
|
129
|
+
resolve: async (request) => {
|
|
130
|
+
const requestUrl = request.url;
|
|
131
|
+
if (!requestUrl) {
|
|
132
|
+
return fallbackFailure("env_limited", "Browser fallback requires a URL.");
|
|
133
|
+
}
|
|
134
|
+
let sessionId = null;
|
|
135
|
+
const policy = resolveEffectiveCookiePolicy(defaults, request);
|
|
136
|
+
const cookieDiagnostics = baseCookieDiagnostics(policy, defaults.source);
|
|
137
|
+
try {
|
|
138
|
+
const launched = await manager.launch({
|
|
139
|
+
// Force managed fallback so retrieval recovery is not coupled to extension relay state.
|
|
140
|
+
noExtension: true,
|
|
141
|
+
headless: false,
|
|
142
|
+
startUrl: "about:blank",
|
|
143
|
+
// Browser fallback sessions are transient and should not contend for persisted profile locks.
|
|
144
|
+
persistProfile: false
|
|
145
|
+
});
|
|
146
|
+
sessionId = launched.sessionId;
|
|
147
|
+
if (policy !== "off") {
|
|
148
|
+
const loaded = await readCookiesFromSource(defaults.source);
|
|
149
|
+
cookieDiagnostics.available = loaded.available;
|
|
150
|
+
cookieDiagnostics.loaded = loaded.cookies.length;
|
|
151
|
+
if (loaded.message) {
|
|
152
|
+
cookieDiagnostics.message = loaded.message;
|
|
153
|
+
}
|
|
154
|
+
if (loaded.cookies.length > 0) {
|
|
155
|
+
cookieDiagnostics.attempted = true;
|
|
156
|
+
const imported = await manager.cookieImport(sessionId, loaded.cookies, false);
|
|
157
|
+
cookieDiagnostics.injected = imported.imported;
|
|
158
|
+
cookieDiagnostics.rejected = imported.rejected.length;
|
|
159
|
+
const verified = await manager.cookieList(sessionId, [requestUrl]);
|
|
160
|
+
cookieDiagnostics.verifiedCount = verified.count;
|
|
161
|
+
}
|
|
162
|
+
if (policy === "required") {
|
|
163
|
+
const reasonMessage = cookieDiagnostics.message ?? (cookieDiagnostics.loaded === 0 ? "Required provider cookies are missing." : cookieDiagnostics.injected === 0 ? "Provider cookie injection imported 0 entries." : cookieDiagnostics.verifiedCount === 0 ? "Provider cookies were not observable after injection." : void 0);
|
|
164
|
+
if (reasonMessage) {
|
|
165
|
+
cookieDiagnostics.reasonCode = "auth_required";
|
|
166
|
+
cookieDiagnostics.message = reasonMessage;
|
|
167
|
+
return fallbackFailure("auth_required", reasonMessage, cookieDiagnostics);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
await manager.goto(sessionId, requestUrl, "load", 45e3);
|
|
172
|
+
const html = await manager.withPage(sessionId, null, async (page) => {
|
|
173
|
+
const candidate = page;
|
|
174
|
+
if (typeof candidate.content !== "function") return "";
|
|
175
|
+
return await candidate.content();
|
|
176
|
+
});
|
|
177
|
+
const status = await manager.status(sessionId);
|
|
178
|
+
return {
|
|
179
|
+
ok: true,
|
|
180
|
+
reasonCode: request.reasonCode,
|
|
181
|
+
mode: toFallbackMode(status.mode),
|
|
182
|
+
output: {
|
|
183
|
+
html,
|
|
184
|
+
url: status.url ?? requestUrl
|
|
185
|
+
},
|
|
186
|
+
details: {
|
|
187
|
+
provider: request.provider,
|
|
188
|
+
operation: request.operation,
|
|
189
|
+
cookieDiagnostics
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
} catch (error) {
|
|
193
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
194
|
+
return fallbackFailure("env_limited", message, cookieDiagnostics);
|
|
195
|
+
} finally {
|
|
196
|
+
if (sessionId) {
|
|
197
|
+
await manager.disconnect(sessionId, true).catch(() => {
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
var buildRuntimeInitFromConfig = (config, browserFallbackPort) => {
|
|
205
|
+
const providers = config?.providers;
|
|
206
|
+
return {
|
|
207
|
+
...typeof config?.blockerDetectionThreshold === "number" ? { blockerDetectionThreshold: config.blockerDetectionThreshold } : {},
|
|
208
|
+
promptInjectionGuard: {
|
|
209
|
+
enabled: config?.security.promptInjectionGuard?.enabled ?? true
|
|
210
|
+
},
|
|
211
|
+
...providers?.tiers ? {
|
|
212
|
+
tiers: {
|
|
213
|
+
defaultTier: providers.tiers.default,
|
|
214
|
+
enableHybrid: providers.tiers.enableHybrid,
|
|
215
|
+
enableRestrictedSafe: providers.tiers.enableRestrictedSafe,
|
|
216
|
+
hybridRiskThreshold: providers.tiers.hybridRiskThreshold,
|
|
217
|
+
restrictedSafeRecoveryIntervalMs: providers.tiers.restrictedSafeRecoveryIntervalMs
|
|
218
|
+
}
|
|
219
|
+
} : {},
|
|
220
|
+
...providers?.adaptiveConcurrency ? {
|
|
221
|
+
adaptiveConcurrency: {
|
|
222
|
+
enabled: providers.adaptiveConcurrency.enabled,
|
|
223
|
+
maxGlobal: providers.adaptiveConcurrency.maxGlobal,
|
|
224
|
+
maxPerDomain: providers.adaptiveConcurrency.maxPerDomain
|
|
225
|
+
}
|
|
226
|
+
} : {},
|
|
227
|
+
...providers?.antiBotPolicy ? {
|
|
228
|
+
antiBotPolicy: {
|
|
229
|
+
enabled: providers.antiBotPolicy.enabled,
|
|
230
|
+
cooldownMs: providers.antiBotPolicy.cooldownMs,
|
|
231
|
+
maxChallengeRetries: providers.antiBotPolicy.maxChallengeRetries,
|
|
232
|
+
proxyHint: providers.antiBotPolicy.proxyHint,
|
|
233
|
+
sessionHint: providers.antiBotPolicy.sessionHint,
|
|
234
|
+
allowBrowserEscalation: providers.antiBotPolicy.allowBrowserEscalation
|
|
235
|
+
}
|
|
236
|
+
} : {},
|
|
237
|
+
...providers?.transcript ? {
|
|
238
|
+
transcript: {
|
|
239
|
+
modeDefault: providers.transcript.modeDefault,
|
|
240
|
+
strategyOrder: providers.transcript.strategyOrder,
|
|
241
|
+
enableYtdlp: providers.transcript.enableYtdlp,
|
|
242
|
+
enableAsr: providers.transcript.enableAsr,
|
|
243
|
+
enableYtdlpAudioAsr: providers.transcript.enableYtdlpAudioAsr,
|
|
244
|
+
enableApify: providers.transcript.enableApify,
|
|
245
|
+
apifyActorId: providers.transcript.apifyActorId,
|
|
246
|
+
enableBrowserFallback: providers.transcript.enableBrowserFallback,
|
|
247
|
+
ytdlpTimeoutMs: providers.transcript.ytdlpTimeoutMs
|
|
248
|
+
}
|
|
249
|
+
} : {},
|
|
250
|
+
...providers?.cookiePolicy || providers?.cookieSource ? {
|
|
251
|
+
cookies: {
|
|
252
|
+
...providers.cookiePolicy ? { policy: providers.cookiePolicy } : {},
|
|
253
|
+
...providers.cookieSource ? { source: providers.cookieSource } : {}
|
|
254
|
+
}
|
|
255
|
+
} : {},
|
|
256
|
+
...browserFallbackPort ? { browserFallbackPort } : {}
|
|
257
|
+
};
|
|
258
|
+
};
|
|
259
|
+
var createConfiguredProviderRuntime = (args) => {
|
|
260
|
+
const fallbackPort = args.browserFallbackPort ?? createBrowserFallbackPort(args.manager, {
|
|
261
|
+
policy: args.config?.providers?.cookiePolicy,
|
|
262
|
+
source: args.config?.providers?.cookieSource
|
|
263
|
+
});
|
|
264
|
+
const runtimeInit = {
|
|
265
|
+
...buildRuntimeInitFromConfig(args.config, fallbackPort),
|
|
266
|
+
...args.init ?? {}
|
|
267
|
+
};
|
|
268
|
+
return createDefaultRuntime(args.defaults ?? {}, runtimeInit);
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
export {
|
|
272
|
+
createBrowserFallbackPort,
|
|
273
|
+
buildRuntimeInitFromConfig,
|
|
274
|
+
createConfiguredProviderRuntime
|
|
275
|
+
};
|
|
276
|
+
//# sourceMappingURL=chunk-V7KUDHDG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/runtime-factory.ts"],"sourcesContent":["import * as path from \"path\";\nimport * as os from \"os\";\nimport { readFile } from \"fs/promises\";\nimport type { BrowserManagerLike } from \"../browser/manager-types\";\nimport type { OpenDevBrowserConfig } from \"../config\";\nimport { createDefaultRuntime, type RuntimeDefaults, type RuntimeInit } from \"./index\";\nimport type {\n BrowserFallbackMode,\n BrowserFallbackPort,\n BrowserFallbackResponse,\n ProviderCookieImportRecord,\n ProviderCookiePolicy,\n ProviderCookieSourceConfig\n} from \"./types\";\n\ntype RuntimeConfig = Pick<OpenDevBrowserConfig, \"blockerDetectionThreshold\" | \"security\" | \"providers\">;\n\ntype BrowserFallbackCookieConfig = {\n policy: ProviderCookiePolicy;\n source: ProviderCookieSourceConfig;\n};\n\ntype BrowserFallbackCookieDiagnostics = {\n policy: ProviderCookiePolicy;\n source: ProviderCookieSourceConfig[\"type\"];\n sourceRef: string;\n attempted: boolean;\n available: boolean;\n loaded: number;\n injected: number;\n rejected: number;\n verifiedCount: number;\n strict: boolean;\n reasonCode?: BrowserFallbackResponse[\"reasonCode\"];\n message?: string;\n};\n\nconst DEFAULT_COOKIE_POLICY: ProviderCookiePolicy = \"auto\";\nconst DEFAULT_COOKIE_SOURCE: ProviderCookieSourceConfig = {\n type: \"file\",\n value: \"~/.config/opencode/opendevbrowser.provider-cookies.json\"\n};\n\nconst toFallbackMode = (mode: unknown): BrowserFallbackMode => {\n return mode === \"extension\" ? \"extension\" : \"managed_headed\";\n};\n\nconst expandHomePath = (filePath: string): string => {\n if (filePath === \"~\") return os.homedir();\n if (filePath.startsWith(\"~/\")) {\n return path.join(os.homedir(), filePath.slice(2));\n }\n return filePath;\n};\n\nconst cookieSourceRef = (source: ProviderCookieSourceConfig): string => {\n if (source.type === \"file\") {\n return expandHomePath(source.value);\n }\n if (source.type === \"env\") {\n return source.value;\n }\n return \"inline\";\n};\n\nconst parseCookieArray = (payload: string): ProviderCookieImportRecord[] => {\n const parsed = JSON.parse(payload);\n if (!Array.isArray(parsed)) {\n throw new Error(\"Cookie payload must be a JSON array.\");\n }\n return parsed as ProviderCookieImportRecord[];\n};\n\nconst readCookiesFromSource = async (\n source: ProviderCookieSourceConfig\n): Promise<{ cookies: ProviderCookieImportRecord[]; available: boolean; message?: string }> => {\n if (source.type === \"inline\") {\n return {\n cookies: source.value,\n available: source.value.length > 0,\n ...(source.value.length === 0 ? { message: \"Inline cookie source is empty.\" } : {})\n };\n }\n\n if (source.type === \"env\") {\n const envValue = process.env[source.value];\n if (!envValue || envValue.trim().length === 0) {\n return {\n cookies: [],\n available: false,\n message: `Cookie env ${source.value} is not set.`\n };\n }\n try {\n const cookies = parseCookieArray(envValue);\n return { cookies, available: cookies.length > 0 };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n cookies: [],\n available: false,\n message: `Cookie env ${source.value} is invalid JSON: ${message}`\n };\n }\n }\n\n const resolvedPath = expandHomePath(source.value);\n try {\n const payload = await readFile(resolvedPath, \"utf8\");\n const cookies = parseCookieArray(payload);\n return { cookies, available: cookies.length > 0 };\n } catch (error) {\n if ((error as { code?: string }).code === \"ENOENT\") {\n return {\n cookies: [],\n available: false,\n message: `Cookie file not found: ${resolvedPath}`\n };\n }\n const message = error instanceof Error ? error.message : String(error);\n return {\n cookies: [],\n available: false,\n message: `Cookie file read failed: ${message}`\n };\n }\n};\n\nconst resolveEffectiveCookiePolicy = (\n defaults: BrowserFallbackCookieConfig,\n request: { useCookies?: boolean; cookiePolicyOverride?: ProviderCookiePolicy }\n): ProviderCookiePolicy => {\n if (request.cookiePolicyOverride) {\n return request.cookiePolicyOverride;\n }\n if (request.useCookies === false) {\n return \"off\";\n }\n if (request.useCookies === true && defaults.policy === \"off\") {\n return \"auto\";\n }\n return defaults.policy;\n};\n\nconst baseCookieDiagnostics = (\n policy: ProviderCookiePolicy,\n source: ProviderCookieSourceConfig\n): BrowserFallbackCookieDiagnostics => ({\n policy,\n source: source.type,\n sourceRef: cookieSourceRef(source),\n attempted: false,\n available: false,\n loaded: 0,\n injected: 0,\n rejected: 0,\n verifiedCount: 0,\n strict: false\n});\n\nconst fallbackFailure = (\n reasonCode: BrowserFallbackResponse[\"reasonCode\"],\n message: string,\n cookieDiagnostics?: BrowserFallbackCookieDiagnostics\n): BrowserFallbackResponse => ({\n ok: false,\n reasonCode,\n details: {\n message,\n ...(cookieDiagnostics ? { cookieDiagnostics } : {})\n }\n});\n\nexport const createBrowserFallbackPort = (\n manager: BrowserManagerLike | undefined,\n cookieDefaults: Partial<BrowserFallbackCookieConfig> = {}\n): BrowserFallbackPort | undefined => {\n if (!manager) return undefined;\n const defaults: BrowserFallbackCookieConfig = {\n policy: cookieDefaults.policy ?? DEFAULT_COOKIE_POLICY,\n source: cookieDefaults.source ?? DEFAULT_COOKIE_SOURCE\n };\n return {\n resolve: async (request) => {\n const requestUrl = request.url;\n if (!requestUrl) {\n return fallbackFailure(\"env_limited\", \"Browser fallback requires a URL.\");\n }\n\n let sessionId: string | null = null;\n const policy = resolveEffectiveCookiePolicy(defaults, request);\n const cookieDiagnostics = baseCookieDiagnostics(policy, defaults.source);\n try {\n const launched = await manager.launch({\n // Force managed fallback so retrieval recovery is not coupled to extension relay state.\n noExtension: true,\n headless: false,\n startUrl: \"about:blank\",\n // Browser fallback sessions are transient and should not contend for persisted profile locks.\n persistProfile: false\n });\n sessionId = launched.sessionId;\n\n if (policy !== \"off\") {\n const loaded = await readCookiesFromSource(defaults.source);\n cookieDiagnostics.available = loaded.available;\n cookieDiagnostics.loaded = loaded.cookies.length;\n if (loaded.message) {\n cookieDiagnostics.message = loaded.message;\n }\n\n if (loaded.cookies.length > 0) {\n cookieDiagnostics.attempted = true;\n const imported = await manager.cookieImport(sessionId, loaded.cookies, false);\n cookieDiagnostics.injected = imported.imported;\n cookieDiagnostics.rejected = imported.rejected.length;\n\n const verified = await manager.cookieList(sessionId, [requestUrl]);\n cookieDiagnostics.verifiedCount = verified.count;\n }\n\n if (policy === \"required\") {\n const reasonMessage = cookieDiagnostics.message\n ?? (\n cookieDiagnostics.loaded === 0\n ? \"Required provider cookies are missing.\"\n : cookieDiagnostics.injected === 0\n ? \"Provider cookie injection imported 0 entries.\"\n : cookieDiagnostics.verifiedCount === 0\n ? \"Provider cookies were not observable after injection.\"\n : undefined\n );\n if (reasonMessage) {\n cookieDiagnostics.reasonCode = \"auth_required\";\n cookieDiagnostics.message = reasonMessage;\n return fallbackFailure(\"auth_required\", reasonMessage, cookieDiagnostics);\n }\n }\n }\n\n await manager.goto(sessionId, requestUrl, \"load\", 45000);\n const html = await manager.withPage(sessionId, null, async (page: unknown) => {\n const candidate = page as { content?: () => Promise<string> };\n if (typeof candidate.content !== \"function\") return \"\";\n return await candidate.content();\n });\n const status = await manager.status(sessionId);\n\n return {\n ok: true,\n reasonCode: request.reasonCode,\n mode: toFallbackMode(status.mode),\n output: {\n html,\n url: status.url ?? requestUrl\n },\n details: {\n provider: request.provider,\n operation: request.operation,\n cookieDiagnostics\n }\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return fallbackFailure(\"env_limited\", message, cookieDiagnostics);\n } finally {\n if (sessionId) {\n await manager.disconnect(sessionId, true).catch(() => {\n // Best effort cleanup for fallback sessions.\n });\n }\n }\n }\n };\n};\n\nexport const buildRuntimeInitFromConfig = (\n config: RuntimeConfig | undefined,\n browserFallbackPort?: BrowserFallbackPort\n): Omit<RuntimeInit, \"providers\"> => {\n const providers = config?.providers;\n return {\n ...(typeof config?.blockerDetectionThreshold === \"number\"\n ? { blockerDetectionThreshold: config.blockerDetectionThreshold }\n : {}),\n promptInjectionGuard: {\n enabled: config?.security.promptInjectionGuard?.enabled ?? true\n },\n ...(providers?.tiers\n ? {\n tiers: {\n defaultTier: providers.tiers.default,\n enableHybrid: providers.tiers.enableHybrid,\n enableRestrictedSafe: providers.tiers.enableRestrictedSafe,\n hybridRiskThreshold: providers.tiers.hybridRiskThreshold,\n restrictedSafeRecoveryIntervalMs: providers.tiers.restrictedSafeRecoveryIntervalMs\n }\n }\n : {}),\n ...(providers?.adaptiveConcurrency\n ? {\n adaptiveConcurrency: {\n enabled: providers.adaptiveConcurrency.enabled,\n maxGlobal: providers.adaptiveConcurrency.maxGlobal,\n maxPerDomain: providers.adaptiveConcurrency.maxPerDomain\n }\n }\n : {}),\n ...(providers?.antiBotPolicy\n ? {\n antiBotPolicy: {\n enabled: providers.antiBotPolicy.enabled,\n cooldownMs: providers.antiBotPolicy.cooldownMs,\n maxChallengeRetries: providers.antiBotPolicy.maxChallengeRetries,\n proxyHint: providers.antiBotPolicy.proxyHint,\n sessionHint: providers.antiBotPolicy.sessionHint,\n allowBrowserEscalation: providers.antiBotPolicy.allowBrowserEscalation\n }\n }\n : {}),\n ...(providers?.transcript\n ? {\n transcript: {\n modeDefault: providers.transcript.modeDefault,\n strategyOrder: providers.transcript.strategyOrder,\n enableYtdlp: providers.transcript.enableYtdlp,\n enableAsr: providers.transcript.enableAsr,\n enableYtdlpAudioAsr: providers.transcript.enableYtdlpAudioAsr,\n enableApify: providers.transcript.enableApify,\n apifyActorId: providers.transcript.apifyActorId,\n enableBrowserFallback: providers.transcript.enableBrowserFallback,\n ytdlpTimeoutMs: providers.transcript.ytdlpTimeoutMs\n }\n }\n : {}),\n ...(providers?.cookiePolicy || providers?.cookieSource\n ? {\n cookies: {\n ...(providers.cookiePolicy ? { policy: providers.cookiePolicy } : {}),\n ...(providers.cookieSource ? { source: providers.cookieSource } : {})\n }\n }\n : {}),\n ...(browserFallbackPort ? { browserFallbackPort } : {})\n };\n};\n\nexport const createConfiguredProviderRuntime = (args: {\n config?: RuntimeConfig;\n defaults?: RuntimeDefaults;\n manager?: BrowserManagerLike;\n browserFallbackPort?: BrowserFallbackPort;\n init?: Omit<RuntimeInit, \"providers\">;\n}) => {\n const fallbackPort = args.browserFallbackPort ?? createBrowserFallbackPort(args.manager, {\n policy: args.config?.providers?.cookiePolicy,\n source: args.config?.providers?.cookieSource\n });\n const runtimeInit = {\n ...buildRuntimeInitFromConfig(args.config, fallbackPort),\n ...(args.init ?? {})\n };\n return createDefaultRuntime(args.defaults ?? {}, runtimeInit);\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// src/browser/canvas-runtime-preview-bridge.ts
|
|
2
|
+
async function applyRuntimePreviewBridge(page, input) {
|
|
3
|
+
return await page.evaluate((payload) => {
|
|
4
|
+
const root = document.querySelector(payload.rootSelector);
|
|
5
|
+
if (!(root instanceof HTMLElement)) {
|
|
6
|
+
return {
|
|
7
|
+
ok: false,
|
|
8
|
+
fallbackReason: "runtime_projection_unsupported",
|
|
9
|
+
message: `Runtime root not found for selector ${payload.rootSelector}.`
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
const existingBindingId = root.getAttribute("data-binding-id");
|
|
13
|
+
if (existingBindingId !== payload.bindingId) {
|
|
14
|
+
return {
|
|
15
|
+
ok: false,
|
|
16
|
+
fallbackReason: "runtime_instrumentation_missing",
|
|
17
|
+
message: "Runtime root is missing the expected data-binding-id instrumentation."
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
root.innerHTML = payload.html;
|
|
21
|
+
const nodes = [root, ...Array.from(root.querySelectorAll("[data-node-id]"))].filter((element) => element instanceof HTMLElement && element.hasAttribute("data-node-id")).map((element) => {
|
|
22
|
+
const computed = window.getComputedStyle(element);
|
|
23
|
+
const childOrder = Array.from(element.children).map((child) => child instanceof HTMLElement ? child.getAttribute("data-node-id") ?? child.tagName.toLowerCase() : "").join("|");
|
|
24
|
+
return {
|
|
25
|
+
nodeId: element.getAttribute("data-node-id") ?? "",
|
|
26
|
+
bindingId: element.getAttribute("data-binding-id") ?? payload.bindingId,
|
|
27
|
+
text: (element.innerText || "").trim(),
|
|
28
|
+
childOrderHash: childOrder,
|
|
29
|
+
attributes: {
|
|
30
|
+
"data-node-id": element.getAttribute("data-node-id") ?? "",
|
|
31
|
+
...element.hasAttribute("data-binding-id") ? { "data-binding-id": element.getAttribute("data-binding-id") ?? "" } : {}
|
|
32
|
+
},
|
|
33
|
+
styleProjection: {
|
|
34
|
+
color: computed.color,
|
|
35
|
+
backgroundColor: computed.backgroundColor,
|
|
36
|
+
fontSize: computed.fontSize,
|
|
37
|
+
fontWeight: computed.fontWeight,
|
|
38
|
+
borderRadius: computed.borderRadius,
|
|
39
|
+
display: computed.display
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
ok: true,
|
|
45
|
+
artifact: {
|
|
46
|
+
projection: "bound_app_runtime",
|
|
47
|
+
rootBindingId: payload.bindingId,
|
|
48
|
+
capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
49
|
+
hierarchyHash: nodes.map((node) => `${node.nodeId}:${node.childOrderHash}`).join("|"),
|
|
50
|
+
nodes
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}, input);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export {
|
|
57
|
+
applyRuntimePreviewBridge
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=chunk-Y2KL55OG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/browser/canvas-runtime-preview-bridge.ts"],"sourcesContent":["import type { CanvasParityArtifact } from \"../canvas/types\";\n\ntype RuntimePreviewPageLike = {\n evaluate: <TArg, TResult>(pageFunction: (arg: TArg) => TResult | Promise<TResult>, arg: TArg) => Promise<TResult>;\n};\n\nexport type RuntimePreviewBridgeInput = {\n bindingId: string;\n rootSelector: string;\n html: string;\n};\n\nexport type RuntimePreviewBridgeResult =\n | {\n ok: true;\n artifact: CanvasParityArtifact;\n }\n | {\n ok: false;\n fallbackReason:\n | \"runtime_bridge_unavailable\"\n | \"runtime_projection_unsupported\"\n | \"runtime_projection_failed\"\n | \"runtime_instrumentation_missing\"\n | \"fallback_canvas_html\";\n message: string;\n };\n\nexport async function applyRuntimePreviewBridge(\n page: RuntimePreviewPageLike,\n input: RuntimePreviewBridgeInput\n): Promise<RuntimePreviewBridgeResult> {\n return await page.evaluate((payload) => {\n const root = document.querySelector(payload.rootSelector);\n if (!(root instanceof HTMLElement)) {\n return {\n ok: false,\n fallbackReason: \"runtime_projection_unsupported\",\n message: `Runtime root not found for selector ${payload.rootSelector}.`\n } satisfies RuntimePreviewBridgeResult;\n }\n const existingBindingId = root.getAttribute(\"data-binding-id\");\n if (existingBindingId !== payload.bindingId) {\n return {\n ok: false,\n fallbackReason: \"runtime_instrumentation_missing\",\n message: \"Runtime root is missing the expected data-binding-id instrumentation.\"\n } satisfies RuntimePreviewBridgeResult;\n }\n root.innerHTML = payload.html;\n const nodes = [root, ...Array.from(root.querySelectorAll(\"[data-node-id]\"))]\n .filter((element): element is HTMLElement => element instanceof HTMLElement && element.hasAttribute(\"data-node-id\"))\n .map((element) => {\n const computed = window.getComputedStyle(element);\n const childOrder = Array.from(element.children)\n .map((child) => child instanceof HTMLElement ? child.getAttribute(\"data-node-id\") ?? child.tagName.toLowerCase() : \"\")\n .join(\"|\");\n return {\n nodeId: element.getAttribute(\"data-node-id\") ?? \"\",\n bindingId: element.getAttribute(\"data-binding-id\") ?? payload.bindingId,\n text: (element.innerText || \"\").trim(),\n childOrderHash: childOrder,\n attributes: {\n \"data-node-id\": element.getAttribute(\"data-node-id\") ?? \"\",\n ...(element.hasAttribute(\"data-binding-id\") ? { \"data-binding-id\": element.getAttribute(\"data-binding-id\") ?? \"\" } : {})\n },\n styleProjection: {\n color: computed.color,\n backgroundColor: computed.backgroundColor,\n fontSize: computed.fontSize,\n fontWeight: computed.fontWeight,\n borderRadius: computed.borderRadius,\n display: computed.display\n }\n };\n });\n return {\n ok: true,\n artifact: {\n projection: \"bound_app_runtime\",\n rootBindingId: payload.bindingId,\n capturedAt: new Date().toISOString(),\n hierarchyHash: nodes.map((node) => `${node.nodeId}:${node.childOrderHash}`).join(\"|\"),\n nodes\n }\n } satisfies RuntimePreviewBridgeResult;\n }, input);\n}\n"],"mappings":";AA4BA,eAAsB,0BACpB,MACA,OACqC;AACrC,SAAO,MAAM,KAAK,SAAS,CAAC,YAAY;AACtC,UAAM,OAAO,SAAS,cAAc,QAAQ,YAAY;AACxD,QAAI,EAAE,gBAAgB,cAAc;AAClC,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,QAChB,SAAS,uCAAuC,QAAQ,YAAY;AAAA,MACtE;AAAA,IACF;AACA,UAAM,oBAAoB,KAAK,aAAa,iBAAiB;AAC7D,QAAI,sBAAsB,QAAQ,WAAW;AAC3C,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,QAChB,SAAS;AAAA,MACX;AAAA,IACF;AACA,SAAK,YAAY,QAAQ;AACzB,UAAM,QAAQ,CAAC,MAAM,GAAG,MAAM,KAAK,KAAK,iBAAiB,gBAAgB,CAAC,CAAC,EACxE,OAAO,CAAC,YAAoC,mBAAmB,eAAe,QAAQ,aAAa,cAAc,CAAC,EAClH,IAAI,CAAC,YAAY;AAChB,YAAM,WAAW,OAAO,iBAAiB,OAAO;AAChD,YAAM,aAAa,MAAM,KAAK,QAAQ,QAAQ,EAC3C,IAAI,CAAC,UAAU,iBAAiB,cAAc,MAAM,aAAa,cAAc,KAAK,MAAM,QAAQ,YAAY,IAAI,EAAE,EACpH,KAAK,GAAG;AACX,aAAO;AAAA,QACL,QAAQ,QAAQ,aAAa,cAAc,KAAK;AAAA,QAChD,WAAW,QAAQ,aAAa,iBAAiB,KAAK,QAAQ;AAAA,QAC9D,OAAO,QAAQ,aAAa,IAAI,KAAK;AAAA,QACrC,gBAAgB;AAAA,QAChB,YAAY;AAAA,UACV,gBAAgB,QAAQ,aAAa,cAAc,KAAK;AAAA,UACxD,GAAI,QAAQ,aAAa,iBAAiB,IAAI,EAAE,mBAAmB,QAAQ,aAAa,iBAAiB,KAAK,GAAG,IAAI,CAAC;AAAA,QACxH;AAAA,QACA,iBAAiB;AAAA,UACf,OAAO,SAAS;AAAA,UAChB,iBAAiB,SAAS;AAAA,UAC1B,UAAU,SAAS;AAAA,UACnB,YAAY,SAAS;AAAA,UACrB,cAAc,SAAS;AAAA,UACvB,SAAS,SAAS;AAAA,QACpB;AAAA,MACF;AAAA,IACF,CAAC;AACH,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,QACR,YAAY;AAAA,QACZ,eAAe,QAAQ;AAAA,QACvB,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,QACnC,eAAe,MAAM,IAAI,CAAC,SAAS,GAAG,KAAK,MAAM,IAAI,KAAK,cAAc,EAAE,EAAE,KAAK,GAAG;AAAA,QACpF;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,KAAK;AACV;","names":[]}
|
package/dist/cli/args.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const CLI_COMMANDS: readonly ["install", "update", "uninstall", "help", "version", "serve", "daemon", "native", "run", "launch", "connect", "disconnect", "status", "research", "shopping", "product-video", "artifacts", "goto", "wait", "snapshot", "click", "hover", "press", "check", "uncheck", "type", "select", "scroll", "scroll-into-view", "targets-list", "target-use", "target-new", "target-close", "page", "pages", "page-close", "dom-html", "dom-text", "dom-attr", "dom-value", "dom-visible", "dom-enabled", "dom-checked", "clone-page", "clone-component", "perf", "screenshot", "console-poll", "network-poll", "debug-trace-snapshot", "cookie-import", "cookie-list", "macro-resolve", "annotate", "rpc"];
|
|
1
|
+
export declare const CLI_COMMANDS: readonly ["install", "update", "uninstall", "help", "version", "serve", "daemon", "native", "run", "launch", "connect", "disconnect", "status", "research", "shopping", "product-video", "artifacts", "goto", "wait", "snapshot", "click", "hover", "press", "check", "uncheck", "type", "select", "scroll", "scroll-into-view", "targets-list", "target-use", "target-new", "target-close", "page", "pages", "page-close", "dom-html", "dom-text", "dom-attr", "dom-value", "dom-visible", "dom-enabled", "dom-checked", "clone-page", "clone-component", "perf", "screenshot", "console-poll", "network-poll", "debug-trace-snapshot", "cookie-import", "cookie-list", "macro-resolve", "annotate", "canvas", "rpc"];
|
|
2
2
|
export type CliCommand = (typeof CLI_COMMANDS)[number];
|
|
3
3
|
export type InstallMode = "global" | "local";
|
|
4
4
|
export type SkillsMode = "global" | "local" | "none";
|
|
@@ -17,8 +17,8 @@ export interface ParsedArgs {
|
|
|
17
17
|
fullInstall: boolean;
|
|
18
18
|
rawArgs: string[];
|
|
19
19
|
}
|
|
20
|
-
export declare const VALID_FLAGS: readonly ["--global", "--local", "--update", "--uninstall", "--help", "--version", "--with-config", "--no-prompt", "--no-interactive", "--quiet", "--output-format", "--full", "--port", "--token", "--stop", "--script", "--headless", "--profile", "--persist-profile", "--chrome-path", "--start-url", "--flag", "--session-id", "--close-browser", "--ws-endpoint", "--host", "--cdp-port", "--url", "--wait-until", "--timeout-ms", "--ref", "--state", "--until", "--mode", "--max-chars", "--cursor", "--text", "--clear", "--submit", "--values", "--dy", "--key", "--attr", "--name", "--target-id", "--tab-id", "--include-urls", "--path", "--since-seq", "--max", "--since-console-seq", "--since-network-seq", "--since-exception-seq", "--request-id", "--cookies", "--cookies-file", "--strict", "--expression", "--default-provider", "--include-catalog", "--execute", "--params", "--params-file", "--unsafe-internal", "--daemon", "--transport", "--no-extension", "--extension-only", "--extension-legacy", "--wait-for-extension", "--wait-timeout-ms", "--skills-global", "--skills-local", "--no-skills", "--screenshot-mode", "--debug", "--context", "--topic", "--days", "--from", "--to", "--source-selection", "--sources", "--include-engagement", "--limit-per-source", "--query", "--providers", "--budget", "--region", "--sort", "--product-url", "--product-name", "--provider-hint", "--include-screenshots", "--include-all-images", "--include-copy", "--output-dir", "--ttl-hours", "--expired-only"];
|
|
21
|
-
export declare const VALID_EQUALS_FLAGS: readonly ["--output-format", "--transport", "--session-id", "--url", "--screenshot-mode", "--context", "--timeout-ms", "--since-seq", "--since-console-seq", "--since-network-seq", "--since-exception-seq", "--max", "--target-id", "--tab-id", "--name", "--cookies", "--cookies-file", "--persist-profile", "--expression", "--default-provider", "--request-id", "--strict", "--params", "--params-file", "--topic", "--days", "--from", "--to", "--source-selection", "--sources", "--mode", "--limit-per-source", "--query", "--providers", "--budget", "--region", "--sort", "--product-url", "--product-name", "--provider-hint", "--include-screenshots", "--include-all-images", "--include-copy", "--output-dir", "--ttl-hours"];
|
|
20
|
+
export declare const VALID_FLAGS: readonly ["--global", "--local", "--update", "--uninstall", "--help", "--version", "--with-config", "--no-prompt", "--no-interactive", "--quiet", "--output-format", "--full", "--port", "--token", "--stop", "--script", "--headless", "--profile", "--persist-profile", "--chrome-path", "--start-url", "--flag", "--session-id", "--close-browser", "--ws-endpoint", "--host", "--cdp-port", "--url", "--wait-until", "--timeout-ms", "--ref", "--state", "--until", "--mode", "--max-chars", "--cursor", "--text", "--clear", "--submit", "--values", "--dy", "--key", "--attr", "--name", "--target-id", "--tab-id", "--include-urls", "--path", "--since-seq", "--max", "--since-console-seq", "--since-network-seq", "--since-exception-seq", "--request-id", "--cookies", "--cookies-file", "--strict", "--expression", "--default-provider", "--include-catalog", "--command", "--execute", "--params", "--params-file", "--unsafe-internal", "--daemon", "--transport", "--no-extension", "--extension-only", "--extension-legacy", "--wait-for-extension", "--wait-timeout-ms", "--skills-global", "--skills-local", "--no-skills", "--screenshot-mode", "--debug", "--context", "--stored", "--topic", "--days", "--from", "--to", "--source-selection", "--sources", "--include-engagement", "--limit-per-source", "--query", "--providers", "--budget", "--region", "--sort", "--product-url", "--product-name", "--provider-hint", "--include-screenshots", "--include-all-images", "--include-copy", "--output-dir", "--ttl-hours", "--expired-only"];
|
|
21
|
+
export declare const VALID_EQUALS_FLAGS: readonly ["--output-format", "--transport", "--session-id", "--url", "--screenshot-mode", "--context", "--timeout-ms", "--since-seq", "--since-console-seq", "--since-network-seq", "--since-exception-seq", "--max", "--target-id", "--tab-id", "--name", "--cookies", "--cookies-file", "--persist-profile", "--expression", "--default-provider", "--command", "--request-id", "--strict", "--params", "--params-file", "--topic", "--days", "--from", "--to", "--source-selection", "--sources", "--mode", "--limit-per-source", "--query", "--providers", "--budget", "--region", "--sort", "--product-url", "--product-name", "--provider-hint", "--include-screenshots", "--include-all-images", "--include-copy", "--output-dir", "--ttl-hours"];
|
|
22
22
|
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
23
23
|
export declare function detectOutputFormat(argv: string[]): OutputFormat;
|
|
24
24
|
export declare function detectQuiet(argv: string[]): boolean;
|
package/dist/cli/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,wrBAaf,CAAC;AAIX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC7C,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE/C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AA2ED,eAAO,MAAM,WAAW,u+CA2Bd,CAAC;AAIX,eAAO,MAAM,kBAAkB,0tBA+CrB,CAAC;AAIX,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAmIpD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAO/D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAGnD"}
|
|
@@ -2,6 +2,8 @@ import type { ParsedArgs } from "../args";
|
|
|
2
2
|
import type { AnnotationTransport } from "../../relay/protocol";
|
|
3
3
|
type AnnotateArgs = {
|
|
4
4
|
sessionId?: string;
|
|
5
|
+
stored?: boolean;
|
|
6
|
+
includeScreenshots?: boolean;
|
|
5
7
|
url?: string;
|
|
6
8
|
screenshotMode?: "visible" | "full" | "none";
|
|
7
9
|
debug?: boolean;
|
|
@@ -13,6 +15,14 @@ type AnnotateArgs = {
|
|
|
13
15
|
};
|
|
14
16
|
export declare const parseAnnotateArgs: (rawArgs: string[]) => AnnotateArgs;
|
|
15
17
|
export declare function runAnnotate(args: ParsedArgs): Promise<{
|
|
18
|
+
success: boolean;
|
|
19
|
+
message: string;
|
|
20
|
+
data: {
|
|
21
|
+
cancelled: boolean;
|
|
22
|
+
details?: undefined;
|
|
23
|
+
screenshots?: undefined;
|
|
24
|
+
};
|
|
25
|
+
} | {
|
|
16
26
|
success: boolean;
|
|
17
27
|
message: string;
|
|
18
28
|
data: {
|
|
@@ -21,6 +31,7 @@ export declare function runAnnotate(args: ParsedArgs): Promise<{
|
|
|
21
31
|
id: string;
|
|
22
32
|
path: string;
|
|
23
33
|
}[];
|
|
34
|
+
cancelled?: undefined;
|
|
24
35
|
};
|
|
25
36
|
}>;
|
|
26
37
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/annotate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAK1C,OAAO,KAAK,EAAsB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEpF,KAAK,YAAY,GAAG;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAqBF,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,EAAE,KAAG,
|
|
1
|
+
{"version":3,"file":"annotate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/annotate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAK1C,OAAO,KAAK,EAAsB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEpF,KAAK,YAAY,GAAG;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAqBF,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,EAAE,KAAG,YA0GrD,CAAC;AAEF,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU;;;;;;;;;;;;;;;;;;;GAoDjD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ParsedArgs } from "../args";
|
|
2
|
+
type CanvasArgs = {
|
|
3
|
+
command?: string;
|
|
4
|
+
params?: string;
|
|
5
|
+
paramsFile?: string;
|
|
6
|
+
timeoutMs?: number;
|
|
7
|
+
};
|
|
8
|
+
type FeedbackItem = Record<string, unknown>;
|
|
9
|
+
type FeedbackPollResult = {
|
|
10
|
+
items: FeedbackItem[];
|
|
11
|
+
nextCursor: string | null;
|
|
12
|
+
retention?: {
|
|
13
|
+
activeTargetIds?: string[];
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export declare const parseCanvasArgs: (rawArgs: string[]) => CanvasArgs;
|
|
17
|
+
export declare function runCanvas(args: ParsedArgs): Promise<{
|
|
18
|
+
success: boolean;
|
|
19
|
+
message: string;
|
|
20
|
+
data: {
|
|
21
|
+
suppressOutput: boolean;
|
|
22
|
+
command?: undefined;
|
|
23
|
+
result?: undefined;
|
|
24
|
+
};
|
|
25
|
+
} | {
|
|
26
|
+
success: boolean;
|
|
27
|
+
message: string;
|
|
28
|
+
data?: undefined;
|
|
29
|
+
} | {
|
|
30
|
+
success: boolean;
|
|
31
|
+
message: string;
|
|
32
|
+
data: {
|
|
33
|
+
command: string;
|
|
34
|
+
result: unknown;
|
|
35
|
+
suppressOutput?: undefined;
|
|
36
|
+
};
|
|
37
|
+
}>;
|
|
38
|
+
export declare const __test__: {
|
|
39
|
+
parseCanvasArgs: (rawArgs: string[]) => CanvasArgs;
|
|
40
|
+
parseJsonObject: (raw: string, source: string) => Record<string, unknown>;
|
|
41
|
+
resolveCanvasParams: (canvasArgs: CanvasArgs) => Record<string, unknown>;
|
|
42
|
+
toFeedbackPollResult: (value: unknown) => FeedbackPollResult;
|
|
43
|
+
};
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=canvas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/canvas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAM1C,KAAK,UAAU,GAAG;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAMF,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5C,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE;QACV,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;CACH,CAAC;AAgKF,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,EAAE,KAAG,UAyCnD,CAAC;AA2BF,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;GAiD/C;AAED,eAAO,MAAM,QAAQ;+BAvHoB,MAAM,EAAE,KAAG,UAAU;2BAdhC,MAAM,UAAU,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;sCAyDrC,UAAU,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;kCArLxC,OAAO,KAAG,kBAAkB;CAsQhE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perf.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/devtools/perf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"perf.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/devtools/perf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAwB7C,wBAAsB,OAAO,CAAC,IAAI,EAAE,UAAU;;;;GAS7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/devtools/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C,KAAK,cAAc,GAAG;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAOF,iBAAS,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/devtools/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C,KAAK,cAAc,GAAG;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAOF,iBAAS,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,CA0C9D;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU;;;;GAYnD;AAED,eAAO,MAAM,QAAQ;;CAEpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attr.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/attr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"attr.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/attr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA8C7C,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU;;;;GAahD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checked.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/checked.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"checked.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/checked.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAmC7C,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU;;;;GAWnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enabled.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/enabled.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"enabled.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/enabled.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAmC7C,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU;;;;GAWnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA8C7C,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU;;;;GAYhD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA8C7C,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU;;;;GAYhD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAmC7C,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU;;;;GAWjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visible.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/visible.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"visible.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dom/visible.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAmC7C,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU;;;;GAWnD"}
|