abelworkflow 0.9.2 → 1.0.0
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 +54 -182
- package/bin/abelworkflow.mjs +5 -3
- package/extensions/pi-gpt-responses-compat/index.ts +1 -1
- package/lib/cli/args.mjs +76 -0
- package/lib/cli/main.mjs +385 -0
- package/lib/cli/prompts.mjs +106 -0
- package/lib/config/dotenv.mjs +102 -0
- package/lib/config/jsonc.mjs +80 -0
- package/lib/config/store.mjs +310 -0
- package/lib/config/toml.mjs +638 -0
- package/lib/installer/assets.mjs +324 -0
- package/lib/installer/install.mjs +153 -0
- package/lib/installer/links.mjs +427 -0
- package/lib/installer/state.mjs +163 -0
- package/lib/paths.mjs +99 -0
- package/lib/providers/claude.mjs +197 -0
- package/lib/providers/codex.mjs +433 -0
- package/lib/providers/pi.mjs +577 -0
- package/lib/providers/skills.mjs +105 -0
- package/lib/templates/codex/agents/default.toml +7 -0
- package/lib/templates/codex/agents/explorer.toml +7 -0
- package/lib/templates/codex/agents/planner.toml +7 -0
- package/lib/templates/codex/agents/reviewer.toml +7 -0
- package/lib/templates/codex/agents/worker.toml +7 -0
- package/lib/templates/codex/config-base.toml +11 -3
- package/lib/templates/workflow/AGENTS.md +50 -0
- package/lib/templates/workflow/commands/abel-design.md +175 -0
- package/{commands → lib/templates/workflow/commands}/abel-diagnose.md +5 -5
- package/lib/templates/workflow/commands/abel-implement.md +170 -0
- package/{commands → lib/templates/workflow/commands}/abel-init.md +3 -5
- package/{.gitignore → lib/templates/workflow/gitignore.template} +0 -2
- package/lib/tools/cli-installer.mjs +277 -0
- package/package.json +37 -10
- package/skills/context7-auto-research/SKILL.md +5 -5
- package/skills/context7-auto-research/{context7-api.js → context7-api.cjs} +5 -8
- package/skills/dev-browser/SKILL.md +53 -33
- package/skills/dev-browser/dist/scripts/start.d.ts +2 -0
- package/skills/dev-browser/dist/scripts/start.d.ts.map +1 -0
- package/skills/dev-browser/dist/scripts/start.js +118 -0
- package/skills/dev-browser/dist/scripts/start.js.map +1 -0
- package/skills/dev-browser/dist/src/client.d.ts +93 -0
- package/skills/dev-browser/dist/src/client.d.ts.map +1 -0
- package/skills/dev-browser/dist/src/client.js +310 -0
- package/skills/dev-browser/dist/src/client.js.map +1 -0
- package/skills/dev-browser/dist/src/entrypoint.d.ts +29 -0
- package/skills/dev-browser/dist/src/entrypoint.d.ts.map +1 -0
- package/skills/dev-browser/dist/src/entrypoint.js +106 -0
- package/skills/dev-browser/dist/src/entrypoint.js.map +1 -0
- package/skills/dev-browser/dist/src/index.d.ts +4 -0
- package/skills/dev-browser/dist/src/index.d.ts.map +1 -0
- package/skills/dev-browser/dist/src/index.js +2 -0
- package/skills/dev-browser/dist/src/index.js.map +1 -0
- package/skills/dev-browser/dist/src/page-api.d.ts +25 -0
- package/skills/dev-browser/dist/src/page-api.d.ts.map +1 -0
- package/skills/dev-browser/dist/src/page-api.js +104 -0
- package/skills/dev-browser/dist/src/page-api.js.map +1 -0
- package/skills/dev-browser/dist/src/relay.d.ts +27 -0
- package/skills/dev-browser/dist/src/relay.d.ts.map +1 -0
- package/skills/dev-browser/dist/src/relay.js +521 -0
- package/skills/dev-browser/dist/src/relay.js.map +1 -0
- package/skills/dev-browser/dist/src/runtime.d.ts +45 -0
- package/skills/dev-browser/dist/src/runtime.d.ts.map +1 -0
- package/skills/dev-browser/dist/src/runtime.js +54 -0
- package/skills/dev-browser/dist/src/runtime.js.map +1 -0
- package/skills/dev-browser/dist/src/snapshot/browser-script.d.ts +23 -0
- package/skills/dev-browser/dist/src/snapshot/browser-script.d.ts.map +1 -0
- package/skills/dev-browser/{src/snapshot/browser-script.ts → dist/src/snapshot/browser-script.js} +21 -30
- package/skills/dev-browser/dist/src/snapshot/browser-script.js.map +1 -0
- package/skills/dev-browser/dist/src/snapshot/index.d.ts +14 -0
- package/skills/dev-browser/dist/src/snapshot/index.d.ts.map +1 -0
- package/skills/dev-browser/{src/snapshot/index.ts → dist/src/snapshot/index.js} +2 -2
- package/skills/dev-browser/dist/src/snapshot/index.js.map +1 -0
- package/skills/dev-browser/dist/src/snapshot/inject.d.ts +13 -0
- package/skills/dev-browser/dist/src/snapshot/inject.d.ts.map +1 -0
- package/skills/dev-browser/{src/snapshot/inject.ts → dist/src/snapshot/inject.js} +2 -2
- package/skills/dev-browser/dist/src/snapshot/inject.js.map +1 -0
- package/skills/dev-browser/dist/src/standalone.d.ts +32 -0
- package/skills/dev-browser/dist/src/standalone.d.ts.map +1 -0
- package/skills/dev-browser/dist/src/standalone.js +174 -0
- package/skills/dev-browser/dist/src/standalone.js.map +1 -0
- package/skills/dev-browser/dist/src/startup.d.ts +55 -0
- package/skills/dev-browser/dist/src/startup.d.ts.map +1 -0
- package/skills/dev-browser/dist/src/startup.js +81 -0
- package/skills/dev-browser/dist/src/startup.js.map +1 -0
- package/skills/dev-browser/dist/src/target-registry.d.ts +29 -0
- package/skills/dev-browser/dist/src/target-registry.d.ts.map +1 -0
- package/skills/dev-browser/dist/src/target-registry.js +135 -0
- package/skills/dev-browser/dist/src/target-registry.js.map +1 -0
- package/skills/dev-browser/dist/src/types.d.ts +27 -0
- package/skills/dev-browser/dist/src/types.d.ts.map +1 -0
- package/skills/dev-browser/dist/src/types.js +2 -0
- package/skills/dev-browser/dist/src/types.js.map +1 -0
- package/skills/dev-browser/package-lock.json +67 -1510
- package/skills/dev-browser/package.json +18 -14
- package/skills/dev-browser/references/scraping.md +94 -105
- package/skills/grok-search/.env.example +3 -3
- package/skills/grok-search/SKILL.md +1 -1
- package/skills/grok-search/defaults.json +3 -0
- package/skills/grok-search/gitignore.template +4 -0
- package/skills/grok-search/scripts/_dotenv.py +5 -1
- package/skills/grok-search/scripts/groksearch_cli.py +15 -33
- package/skills/prompt-enhancer/SKILL.md +2 -27
- package/skills/prompt-enhancer/TEMPLATE.md +0 -4
- package/.skill-lock.json +0 -29
- package/AGENTS.md +0 -45
- package/commands/abel-implement.md +0 -157
- package/commands/abel-plan.md +0 -88
- package/commands/abel-research.md +0 -126
- package/lib/cli/logic.mjs +0 -213
- package/lib/cli.mjs +0 -3016
- package/skills/confidence-check/SKILL.md +0 -34
- package/skills/confidence-check/confidence.ts +0 -276
- package/skills/dev-browser/bun.lock +0 -460
- package/skills/dev-browser/scripts/start.ts +0 -280
- package/skills/dev-browser/src/client.ts +0 -474
- package/skills/dev-browser/src/entrypoint.ts +0 -157
- package/skills/dev-browser/src/index.ts +0 -289
- package/skills/dev-browser/src/relay.ts +0 -731
- package/skills/dev-browser/src/runtime.test.ts +0 -60
- package/skills/dev-browser/src/runtime.ts +0 -171
- package/skills/dev-browser/src/startup.test.ts +0 -95
- package/skills/dev-browser/src/startup.ts +0 -153
- package/skills/dev-browser/src/types.ts +0 -35
- package/skills/dev-browser/tsconfig.json +0 -36
- package/skills/dev-browser/vitest.config.ts +0 -12
- package/skills/prompt-enhancer/.env.example +0 -12
- package/skills/prompt-enhancer/ADVANCED.md +0 -103
- package/skills/prompt-enhancer/requirements.txt +0 -2
- package/skills/prompt-enhancer/scripts/_dotenv.py +0 -28
- package/skills/prompt-enhancer/scripts/enhance.py +0 -191
- package/skills/prompt-enhancer/scripts/prompt_enhancer_entry.py +0 -253
- package/skills/sequential-think/SKILL.md +0 -198
- package/skills/sequential-think/scripts/.env.example +0 -5
- package/skills/sequential-think/scripts/sequential_think_cli.py +0 -253
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-injectable snapshot script.
|
|
3
|
+
*
|
|
4
|
+
* This module provides the snapshot functionality as a string that can be
|
|
5
|
+
* injected into the browser via page.addScriptTag() or page.evaluate().
|
|
6
|
+
*
|
|
7
|
+
* The approach is to read the compiled JavaScript at runtime and bundle it
|
|
8
|
+
* into a single script that exposes window.__devBrowser_getAISnapshot() and
|
|
9
|
+
* window.__devBrowser_selectSnapshotRef().
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Get the snapshot script that can be injected into the browser.
|
|
13
|
+
* Returns a self-contained JavaScript string that:
|
|
14
|
+
* 1. Defines all necessary functions (domUtils, roleUtils, yaml, ariaSnapshot)
|
|
15
|
+
* 2. Exposes window.__devBrowser_getAISnapshot()
|
|
16
|
+
* 3. Exposes window.__devBrowser_selectSnapshotRef()
|
|
17
|
+
*/
|
|
18
|
+
export declare function getSnapshotScript(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Clear the cached script (useful for development/testing)
|
|
21
|
+
*/
|
|
22
|
+
export declare function clearSnapshotScriptCache(): void;
|
|
23
|
+
//# sourceMappingURL=browser-script.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-script.d.ts","sourceRoot":"","sources":["../../../src/snapshot/browser-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAyB1C;AAszBD;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
|
package/skills/dev-browser/{src/snapshot/browser-script.ts → dist/src/snapshot/browser-script.js}
RENAMED
|
@@ -8,14 +8,11 @@
|
|
|
8
8
|
* into a single script that exposes window.__devBrowser_getAISnapshot() and
|
|
9
9
|
* window.__devBrowser_selectSnapshotRef().
|
|
10
10
|
*/
|
|
11
|
-
|
|
12
11
|
import * as fs from "fs";
|
|
13
12
|
import * as path from "path";
|
|
14
13
|
import { fileURLToPath } from "node:url";
|
|
15
|
-
|
|
16
14
|
// Cache the bundled script
|
|
17
|
-
let cachedScript
|
|
18
|
-
|
|
15
|
+
let cachedScript = null;
|
|
19
16
|
/**
|
|
20
17
|
* Get the snapshot script that can be injected into the browser.
|
|
21
18
|
* Returns a self-contained JavaScript string that:
|
|
@@ -23,15 +20,14 @@ let cachedScript: string | null = null;
|
|
|
23
20
|
* 2. Exposes window.__devBrowser_getAISnapshot()
|
|
24
21
|
* 3. Exposes window.__devBrowser_selectSnapshotRef()
|
|
25
22
|
*/
|
|
26
|
-
export function getSnapshotScript()
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
cachedScript = `
|
|
23
|
+
export function getSnapshotScript() {
|
|
24
|
+
if (cachedScript)
|
|
25
|
+
return cachedScript;
|
|
26
|
+
// Read the compiled JavaScript files
|
|
27
|
+
const snapshotDir = path.dirname(fileURLToPath(import.meta.url));
|
|
28
|
+
// For now, we'll inline the functions directly
|
|
29
|
+
// In production, we could use a bundler like esbuild to create a single file
|
|
30
|
+
cachedScript = `
|
|
35
31
|
(function() {
|
|
36
32
|
// Skip if already injected
|
|
37
33
|
if (window.__devBrowser_getAISnapshot) return;
|
|
@@ -46,12 +42,10 @@ export function getSnapshotScript(): string {
|
|
|
46
42
|
window.__devBrowser_selectSnapshotRef = selectSnapshotRef;
|
|
47
43
|
})();
|
|
48
44
|
`;
|
|
49
|
-
|
|
50
|
-
return cachedScript;
|
|
45
|
+
return cachedScript;
|
|
51
46
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return `
|
|
47
|
+
function getDomUtilsCode() {
|
|
48
|
+
return `
|
|
55
49
|
// === domUtils ===
|
|
56
50
|
let cacheStyle;
|
|
57
51
|
let cachesCounter = 0;
|
|
@@ -160,9 +154,8 @@ function normalizeWhiteSpace(text) {
|
|
|
160
154
|
}
|
|
161
155
|
`;
|
|
162
156
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
return `
|
|
157
|
+
function getYamlCode() {
|
|
158
|
+
return `
|
|
166
159
|
// === yaml ===
|
|
167
160
|
function yamlEscapeKeyIfNeeded(str) {
|
|
168
161
|
if (!yamlStringNeedsQuotes(str)) return str;
|
|
@@ -203,9 +196,8 @@ function yamlStringNeedsQuotes(str) {
|
|
|
203
196
|
}
|
|
204
197
|
`;
|
|
205
198
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
return `
|
|
199
|
+
function getRoleUtilsCode() {
|
|
200
|
+
return `
|
|
209
201
|
// === roleUtils ===
|
|
210
202
|
const validRoles = ["alert","alertdialog","application","article","banner","blockquote","button","caption","cell","checkbox","code","columnheader","combobox","complementary","contentinfo","definition","deletion","dialog","directory","document","emphasis","feed","figure","form","generic","grid","gridcell","group","heading","img","insertion","link","list","listbox","listitem","log","main","mark","marquee","math","meter","menu","menubar","menuitem","menuitemcheckbox","menuitemradio","navigation","none","note","option","paragraph","presentation","progressbar","radio","radiogroup","region","row","rowgroup","rowheader","scrollbar","search","searchbox","separator","slider","spinbutton","status","strong","subscript","superscript","switch","tab","table","tablist","tabpanel","term","textbox","time","timer","toolbar","tooltip","tree","treegrid","treeitem"];
|
|
211
203
|
|
|
@@ -625,9 +617,8 @@ function getCSSContent(element, pseudo) {
|
|
|
625
617
|
}
|
|
626
618
|
`;
|
|
627
619
|
}
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
return `
|
|
620
|
+
function getAriaSnapshotCode() {
|
|
621
|
+
return `
|
|
631
622
|
// === ariaSnapshot ===
|
|
632
623
|
let lastRef = 0;
|
|
633
624
|
|
|
@@ -869,10 +860,10 @@ function selectSnapshotRef(ref) {
|
|
|
869
860
|
}
|
|
870
861
|
`;
|
|
871
862
|
}
|
|
872
|
-
|
|
873
863
|
/**
|
|
874
864
|
* Clear the cached script (useful for development/testing)
|
|
875
865
|
*/
|
|
876
|
-
export function clearSnapshotScriptCache()
|
|
877
|
-
|
|
866
|
+
export function clearSnapshotScriptCache() {
|
|
867
|
+
cachedScript = null;
|
|
878
868
|
}
|
|
869
|
+
//# sourceMappingURL=browser-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-script.js","sourceRoot":"","sources":["../../../src/snapshot/browser-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,2BAA2B;AAC3B,IAAI,YAAY,GAAkB,IAAI,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,qCAAqC;IACrC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAEjE,+CAA+C;IAC/C,6EAA6E;IAC7E,YAAY,GAAG;;;;;IAKb,eAAe,EAAE;IACjB,WAAW,EAAE;IACb,gBAAgB,EAAE;IAClB,mBAAmB,EAAE;;;;;;CAMxB,CAAC;IAEA,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2GR,CAAC;AACF,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCR,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkaR,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgPR,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ARIA Snapshot module for dev-browser.
|
|
3
|
+
*
|
|
4
|
+
* Provides Playwright-compatible ARIA snapshots with cross-connection ref persistence.
|
|
5
|
+
* Refs are stored on window.__devBrowserRefs and survive across Playwright reconnections.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* import { getSnapshotScript } from './snapshot';
|
|
9
|
+
* const script = getSnapshotScript();
|
|
10
|
+
* await page.evaluate(script);
|
|
11
|
+
* // Now window.__devBrowser_getAISnapshot() and window.__devBrowser_selectSnapshotRef(ref) are available
|
|
12
|
+
*/
|
|
13
|
+
export { getSnapshotScript, clearSnapshotScriptCache } from "./browser-script.js";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/snapshot/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -10,5 +10,5 @@
|
|
|
10
10
|
* await page.evaluate(script);
|
|
11
11
|
* // Now window.__devBrowser_getAISnapshot() and window.__devBrowser_selectSnapshotRef(ref) are available
|
|
12
12
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
export { getSnapshotScript, clearSnapshotScriptCache } from "./browser-script.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/snapshot/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Injectable snapshot script for browser context.
|
|
3
|
+
*
|
|
4
|
+
* This module provides the getSnapshotScript function that returns a
|
|
5
|
+
* self-contained JavaScript string for injection into browser contexts.
|
|
6
|
+
*
|
|
7
|
+
* The script is injected via page.evaluate() and exposes:
|
|
8
|
+
* - window.__devBrowser_getAISnapshot(): Returns ARIA snapshot YAML
|
|
9
|
+
* - window.__devBrowser_selectSnapshotRef(ref): Returns element for given ref
|
|
10
|
+
* - window.__devBrowserRefs: Map of ref -> Element (persists across connections)
|
|
11
|
+
*/
|
|
12
|
+
export { getSnapshotScript, clearSnapshotScriptCache } from "./browser-script.js";
|
|
13
|
+
//# sourceMappingURL=inject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../../src/snapshot/inject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
* - window.__devBrowser_selectSnapshotRef(ref): Returns element for given ref
|
|
10
10
|
* - window.__devBrowserRefs: Map of ref -> Element (persists across connections)
|
|
11
11
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
export { getSnapshotScript, clearSnapshotScriptCache } from "./browser-script.js";
|
|
13
|
+
//# sourceMappingURL=inject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../../src/snapshot/inject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import { type PageBackend, type Viewport } from "./page-api.js";
|
|
3
|
+
import type { ServeOptions } from "./types.js";
|
|
4
|
+
export interface DevBrowserServer {
|
|
5
|
+
wsEndpoint: string;
|
|
6
|
+
port: number;
|
|
7
|
+
stop: () => Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
interface StandalonePage {
|
|
10
|
+
setViewportSize(viewport: Viewport): Promise<void>;
|
|
11
|
+
close(): Promise<void>;
|
|
12
|
+
on(event: "close", listener: () => void): void;
|
|
13
|
+
}
|
|
14
|
+
interface StandaloneContext {
|
|
15
|
+
newPage(): Promise<StandalonePage>;
|
|
16
|
+
newCDPSession(page: StandalonePage): Promise<{
|
|
17
|
+
send(method: "Target.getTargetInfo"): Promise<{
|
|
18
|
+
targetInfo: {
|
|
19
|
+
targetId: string;
|
|
20
|
+
};
|
|
21
|
+
}>;
|
|
22
|
+
detach(): Promise<void>;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
export declare function createStandalonePageBackend(context: StandaloneContext): PageBackend;
|
|
26
|
+
export declare function createStandaloneApp({ backend, wsEndpoint, }: {
|
|
27
|
+
backend: PageBackend;
|
|
28
|
+
wsEndpoint: string;
|
|
29
|
+
}): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
30
|
+
export declare function serve(options?: ServeOptions): Promise<DevBrowserServer>;
|
|
31
|
+
export type { ServeOptions } from "./types.js";
|
|
32
|
+
//# sourceMappingURL=standalone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../../src/standalone.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,EAEL,KAAK,WAAW,EAEhB,KAAK,QAAQ,EACd,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,UAAU,cAAc;IACtB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAChD;AAED,UAAU,iBAAiB;IACzB,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IACnC,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC;YAAE,UAAU,EAAE;gBAAE,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC,CAAC;QACpF,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;KACzB,CAAC,CAAC;CACJ;AAMD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAmEnF;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,UAAU,GACX,EAAE;IACD,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,8EAKA;AAED,wBAAsB,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiDjF;AAoDD,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { once } from "node:events";
|
|
2
|
+
import { serve as serveNode } from "@hono/node-server";
|
|
3
|
+
import { Hono } from "hono";
|
|
4
|
+
import { chromium } from "playwright";
|
|
5
|
+
import { formatHttpUrl } from "./entrypoint.js";
|
|
6
|
+
import { createPageApi, } from "./page-api.js";
|
|
7
|
+
export function createStandalonePageBackend(context) {
|
|
8
|
+
const pages = new Map();
|
|
9
|
+
const pending = new Map();
|
|
10
|
+
async function create(name, viewport) {
|
|
11
|
+
const pagePromise = context.newPage();
|
|
12
|
+
let page;
|
|
13
|
+
try {
|
|
14
|
+
page = await withTimeout(pagePromise, 30_000, "Page creation timed out after 30000ms");
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
void pagePromise.then((latePage) => latePage.close().catch(() => undefined), () => undefined);
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
if (viewport)
|
|
22
|
+
await page.setViewportSize(viewport);
|
|
23
|
+
const session = await context.newCDPSession(page);
|
|
24
|
+
let targetId;
|
|
25
|
+
try {
|
|
26
|
+
({ targetInfo: { targetId } } = await session.send("Target.getTargetInfo"));
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
await session.detach();
|
|
30
|
+
}
|
|
31
|
+
const entry = { name, targetId, page };
|
|
32
|
+
pages.set(name, entry);
|
|
33
|
+
page.on("close", () => {
|
|
34
|
+
if (pages.get(name) === entry)
|
|
35
|
+
pages.delete(name);
|
|
36
|
+
});
|
|
37
|
+
return { name, targetId };
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
await page.close().catch(() => undefined);
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
async list() {
|
|
46
|
+
return [...pages.values()].map(({ name, targetId }) => ({ name, targetId }));
|
|
47
|
+
},
|
|
48
|
+
async getOrCreate(name, viewport) {
|
|
49
|
+
const existing = pages.get(name);
|
|
50
|
+
if (existing)
|
|
51
|
+
return { name, targetId: existing.targetId };
|
|
52
|
+
const inFlight = pending.get(name);
|
|
53
|
+
if (inFlight)
|
|
54
|
+
return inFlight;
|
|
55
|
+
const creation = create(name, viewport);
|
|
56
|
+
pending.set(name, creation);
|
|
57
|
+
try {
|
|
58
|
+
return await creation;
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
if (pending.get(name) === creation)
|
|
62
|
+
pending.delete(name);
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
async close(name) {
|
|
66
|
+
const entry = pages.get(name);
|
|
67
|
+
if (!entry)
|
|
68
|
+
return false;
|
|
69
|
+
await entry.page.close();
|
|
70
|
+
if (pages.get(name) === entry)
|
|
71
|
+
pages.delete(name);
|
|
72
|
+
return true;
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export function createStandaloneApp({ backend, wsEndpoint, }) {
|
|
77
|
+
const app = new Hono();
|
|
78
|
+
app.get("/", (c) => c.json({ wsEndpoint, mode: "standalone" }));
|
|
79
|
+
app.route("/", createPageApi({ backend, wsEndpoint }));
|
|
80
|
+
return app;
|
|
81
|
+
}
|
|
82
|
+
export async function serve(options = {}) {
|
|
83
|
+
const port = options.port ?? 9222;
|
|
84
|
+
const host = options.host ?? "localhost";
|
|
85
|
+
const cdpPort = options.cdpPort ?? 9223;
|
|
86
|
+
validatePorts(port, cdpPort);
|
|
87
|
+
const context = await chromium.launchPersistentContext("", {
|
|
88
|
+
headless: options.headless ?? false,
|
|
89
|
+
args: [`--remote-debugging-port=${cdpPort}`],
|
|
90
|
+
});
|
|
91
|
+
try {
|
|
92
|
+
const response = await fetchWithRetry(`http://127.0.0.1:${cdpPort}/json/version`);
|
|
93
|
+
const { webSocketDebuggerUrl: wsEndpoint } = (await response.json());
|
|
94
|
+
const backend = createStandalonePageBackend(context);
|
|
95
|
+
const app = createStandaloneApp({ backend, wsEndpoint });
|
|
96
|
+
const server = serveNode({ fetch: app.fetch, port, hostname: host });
|
|
97
|
+
const connections = new Set();
|
|
98
|
+
server.on("connection", (socket) => {
|
|
99
|
+
connections.add(socket);
|
|
100
|
+
socket.on("close", () => connections.delete(socket));
|
|
101
|
+
});
|
|
102
|
+
await once(server, "listening");
|
|
103
|
+
console.log(`HTTP API server running on ${formatHttpUrl(host, port)}`);
|
|
104
|
+
let stopped = false;
|
|
105
|
+
return {
|
|
106
|
+
wsEndpoint,
|
|
107
|
+
port,
|
|
108
|
+
async stop() {
|
|
109
|
+
if (stopped)
|
|
110
|
+
return;
|
|
111
|
+
stopped = true;
|
|
112
|
+
for (const socket of connections)
|
|
113
|
+
socket.destroy();
|
|
114
|
+
connections.clear();
|
|
115
|
+
for (const { name } of await backend.list()) {
|
|
116
|
+
await backend.close(name).catch(() => undefined);
|
|
117
|
+
}
|
|
118
|
+
await context.close().catch(() => undefined);
|
|
119
|
+
await closeServer(server);
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
await context.close().catch(() => undefined);
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function validatePorts(port, cdpPort) {
|
|
129
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
130
|
+
throw new Error(`Invalid port: ${port}. Must be between 1 and 65535`);
|
|
131
|
+
}
|
|
132
|
+
if (!Number.isInteger(cdpPort) || cdpPort < 1 || cdpPort > 65535) {
|
|
133
|
+
throw new Error(`Invalid cdpPort: ${cdpPort}. Must be between 1 and 65535`);
|
|
134
|
+
}
|
|
135
|
+
if (port === cdpPort)
|
|
136
|
+
throw new Error("port and cdpPort must be different");
|
|
137
|
+
}
|
|
138
|
+
async function fetchWithRetry(url, maxRetries = 5, delayMs = 500) {
|
|
139
|
+
let lastError;
|
|
140
|
+
for (let attempt = 0; attempt < maxRetries; attempt += 1) {
|
|
141
|
+
try {
|
|
142
|
+
const response = await fetch(url);
|
|
143
|
+
if (response.ok)
|
|
144
|
+
return response;
|
|
145
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
lastError = error;
|
|
149
|
+
if (attempt + 1 < maxRetries) {
|
|
150
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs * (attempt + 1)));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const message = lastError instanceof Error ? lastError.message : String(lastError);
|
|
155
|
+
throw new Error(`Failed after ${maxRetries} retries: ${message}`);
|
|
156
|
+
}
|
|
157
|
+
function withTimeout(promise, timeoutMs, message) {
|
|
158
|
+
return new Promise((resolve, reject) => {
|
|
159
|
+
const timer = setTimeout(() => reject(new Error(message)), timeoutMs);
|
|
160
|
+
promise.then((value) => {
|
|
161
|
+
clearTimeout(timer);
|
|
162
|
+
resolve(value);
|
|
163
|
+
}, (error) => {
|
|
164
|
+
clearTimeout(timer);
|
|
165
|
+
reject(error);
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
function closeServer(server) {
|
|
170
|
+
return new Promise((resolve, reject) => {
|
|
171
|
+
server.close((error) => (error ? reject(error) : resolve()));
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=standalone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../src/standalone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAGnC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAuB,MAAM,YAAY,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,aAAa,GAId,MAAM,eAAe,CAAC;AA2BvB,MAAM,UAAU,2BAA2B,CAAC,OAA0B;IACpE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmC,CAAC;IAE3D,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,QAAmB;QACrD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QACtC,IAAI,IAAoB,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,uCAAuC,CAAC,CAAC;QACzF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,KAAK,WAAW,CAAC,IAAI,CACnB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EACrD,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACH,IAAI,QAAQ;gBAAE,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,QAAgB,CAAC;YACrB,IAAI,CAAC;gBACH,CAAC,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC9E,CAAC;oBAAS,CAAC;gBACT,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;YACzB,CAAC;YAED,MAAM,KAAK,GAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAClD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACvB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK;oBAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,CAAC,IAAI;YACR,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/E,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ;YAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,QAAQ;gBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAE3D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAE9B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC5B,IAAI,CAAC;gBACH,OAAO,MAAM,QAAQ,CAAC;YACxB,CAAC;oBAAS,CAAC;gBACT,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ;oBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,IAAI;YACd,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;YACzB,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK;gBAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAClC,OAAO,EACP,UAAU,GAIX;IACC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,YAAqB,EAAE,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IACvD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,UAAwB,EAAE;IACpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;IACxC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE7B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,uBAAuB,CAAC,EAAE,EAAE;QACzD,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;QACnC,IAAI,EAAE,CAAC,2BAA2B,OAAO,EAAE,CAAC;KAC7C,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,oBAAoB,OAAO,eAAe,CAAC,CAAC;QAClF,MAAM,EAAE,oBAAoB,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElE,CAAC;QACF,MAAM,OAAO,GAAG,2BAA2B,CACzC,OAAuC,CACxC,CAAC;QACF,MAAM,GAAG,GAAG,mBAAmB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;YACjC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACxB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAEhC,OAAO,CAAC,GAAG,CAAC,8BAA8B,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACvE,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,OAAO;YACL,UAAU;YACV,IAAI;YACJ,KAAK,CAAC,IAAI;gBACR,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,KAAK,MAAM,MAAM,IAAI,WAAW;oBAAE,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnD,WAAW,CAAC,KAAK,EAAE,CAAC;gBACpB,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC5C,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACnD,CAAC;gBACD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC7C,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,OAAe;IAClD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,+BAA+B,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,+BAA+B,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,IAAI,KAAK,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,UAAU,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG;IACtE,IAAI,SAAkB,CAAC;IACvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,UAAU,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,QAAQ,CAAC,EAAE;gBAAE,OAAO,QAAQ,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAClB,IAAI,OAAO,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC;gBAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnF,MAAM,IAAI,KAAK,CAAC,gBAAgB,UAAU,aAAa,OAAO,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,WAAW,CAAI,OAAmB,EAAE,SAAiB,EAAE,OAAe;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CACV,CAAC,KAAK,EAAE,EAAE;YACR,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACR,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,MAAoC;IACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type EntrypointArgs } from "./entrypoint.js";
|
|
2
|
+
import type { RuntimeCommand } from "./runtime.js";
|
|
3
|
+
export interface RuntimePaths {
|
|
4
|
+
skillDir: string;
|
|
5
|
+
}
|
|
6
|
+
interface StandaloneServer {
|
|
7
|
+
port: number;
|
|
8
|
+
wsEndpoint: string;
|
|
9
|
+
stop: () => Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
interface ExtensionServer {
|
|
12
|
+
port: number;
|
|
13
|
+
wsEndpoint: string;
|
|
14
|
+
stop: () => Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export interface RunEntrypointDeps {
|
|
17
|
+
runtimePaths: RuntimePaths;
|
|
18
|
+
serveStandalone: (options: {
|
|
19
|
+
port: number;
|
|
20
|
+
host: string;
|
|
21
|
+
headless: boolean;
|
|
22
|
+
cdpPort: number;
|
|
23
|
+
}) => Promise<StandaloneServer>;
|
|
24
|
+
serveExtension: (options: {
|
|
25
|
+
port: number;
|
|
26
|
+
host: string;
|
|
27
|
+
}) => Promise<ExtensionServer>;
|
|
28
|
+
registerShutdown: (stop: () => Promise<void>) => void;
|
|
29
|
+
keepAlive: () => Promise<void>;
|
|
30
|
+
log: (line: string) => void;
|
|
31
|
+
ensureBrowser?: () => Promise<void>;
|
|
32
|
+
preflightStandalone?: () => Promise<boolean>;
|
|
33
|
+
}
|
|
34
|
+
export interface EnsurePlaywrightChromiumDeps {
|
|
35
|
+
isInstalled: () => boolean;
|
|
36
|
+
installCommand: RuntimeCommand;
|
|
37
|
+
runCommand: (command: string, args: string[]) => Promise<void>;
|
|
38
|
+
log: (line: string) => void;
|
|
39
|
+
}
|
|
40
|
+
export interface PreflightStandaloneStartupDeps {
|
|
41
|
+
checkServer: (host: string, port: number) => Promise<{
|
|
42
|
+
ok: boolean;
|
|
43
|
+
info?: {
|
|
44
|
+
mode?: unknown;
|
|
45
|
+
wsEndpoint?: unknown;
|
|
46
|
+
};
|
|
47
|
+
}>;
|
|
48
|
+
isPortInUse: (port: number) => Promise<boolean>;
|
|
49
|
+
log: (line: string) => void;
|
|
50
|
+
}
|
|
51
|
+
export declare function preflightStandaloneStartup(args: EntrypointArgs, deps: PreflightStandaloneStartupDeps): Promise<boolean>;
|
|
52
|
+
export declare function ensurePlaywrightChromium(deps: EnsurePlaywrightChromiumDeps): Promise<void>;
|
|
53
|
+
export declare function runEntrypoint(args: EntrypointArgs, deps: RunEntrypointDeps): Promise<void>;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=startup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../../src/startup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,CAAC,OAAO,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChC,cAAc,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACtF,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACtD,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QACnD,EAAE,EAAE,OAAO,CAAC;QACZ,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,OAAO,CAAC;YAAC,UAAU,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;KACjD,CAAC,CAAC;IACH,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,8BAA8B,GACnC,OAAO,CAAC,OAAO,CAAC,CAyBlB;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,4BAA4B,iBAShF;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,iBA0DhF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { formatReadinessLines } from "./entrypoint.js";
|
|
2
|
+
export async function preflightStandaloneStartup(args, deps) {
|
|
3
|
+
const serverCheck = await deps.checkServer(args.host, args.port);
|
|
4
|
+
if (serverCheck.ok &&
|
|
5
|
+
serverCheck.info?.mode === "standalone" &&
|
|
6
|
+
typeof serverCheck.info.wsEndpoint === "string" &&
|
|
7
|
+
serverCheck.info.wsEndpoint.trim().length > 0) {
|
|
8
|
+
deps.log(`Server already running on port ${args.port}`);
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
if (await deps.isPortInUse(args.port)) {
|
|
12
|
+
throw new Error(`HTTP port ${args.port} is already in use. Stop the existing service or use --port.`);
|
|
13
|
+
}
|
|
14
|
+
if (await deps.isPortInUse(args.cdpPort)) {
|
|
15
|
+
throw new Error(`CDP port ${args.cdpPort} is already in use. Close the existing browser or use --cdp-port.`);
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
export async function ensurePlaywrightChromium(deps) {
|
|
20
|
+
if (deps.isInstalled()) {
|
|
21
|
+
deps.log("Playwright Chromium already installed.");
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
deps.log("Playwright Chromium not found. Installing (this may take a minute)...");
|
|
25
|
+
await deps.runCommand(deps.installCommand.command, deps.installCommand.args);
|
|
26
|
+
deps.log("Chromium installed successfully.");
|
|
27
|
+
}
|
|
28
|
+
export async function runEntrypoint(args, deps) {
|
|
29
|
+
if (args.mode === "extension") {
|
|
30
|
+
const server = await deps.serveExtension({
|
|
31
|
+
port: args.port,
|
|
32
|
+
host: args.host,
|
|
33
|
+
});
|
|
34
|
+
for (const line of formatReadinessLines({
|
|
35
|
+
mode: "extension",
|
|
36
|
+
host: args.host,
|
|
37
|
+
port: args.port,
|
|
38
|
+
wsEndpoint: server.wsEndpoint,
|
|
39
|
+
})) {
|
|
40
|
+
deps.log(line);
|
|
41
|
+
}
|
|
42
|
+
deps.registerShutdown(() => server.stop());
|
|
43
|
+
await deps.keepAlive();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const shouldStart = await deps.preflightStandalone?.();
|
|
47
|
+
if (shouldStart === false) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
await deps.ensureBrowser?.();
|
|
51
|
+
let settleServer;
|
|
52
|
+
const serverReady = new Promise((resolve) => {
|
|
53
|
+
settleServer = resolve;
|
|
54
|
+
});
|
|
55
|
+
deps.registerShutdown(async () => {
|
|
56
|
+
await (await serverReady)?.stop();
|
|
57
|
+
});
|
|
58
|
+
try {
|
|
59
|
+
const server = await deps.serveStandalone({
|
|
60
|
+
port: args.port,
|
|
61
|
+
host: args.host,
|
|
62
|
+
headless: args.headless,
|
|
63
|
+
cdpPort: args.cdpPort,
|
|
64
|
+
});
|
|
65
|
+
settleServer(server);
|
|
66
|
+
for (const line of formatReadinessLines({
|
|
67
|
+
mode: "standalone",
|
|
68
|
+
host: args.host,
|
|
69
|
+
port: args.port,
|
|
70
|
+
wsEndpoint: server.wsEndpoint,
|
|
71
|
+
})) {
|
|
72
|
+
deps.log(line);
|
|
73
|
+
}
|
|
74
|
+
await deps.keepAlive();
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
settleServer(undefined);
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=startup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup.js","sourceRoot":"","sources":["../../src/startup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { PageDescriptor } from "./page-api.js";
|
|
2
|
+
export interface TargetInfo {
|
|
3
|
+
targetId: string;
|
|
4
|
+
type: string;
|
|
5
|
+
title: string;
|
|
6
|
+
url: string;
|
|
7
|
+
attached: boolean;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
}
|
|
10
|
+
export interface ConnectedTarget {
|
|
11
|
+
sessionId: string;
|
|
12
|
+
targetId: string;
|
|
13
|
+
targetInfo: TargetInfo;
|
|
14
|
+
}
|
|
15
|
+
export declare function createTargetRegistry(): {
|
|
16
|
+
attach: (target: ConnectedTarget) => void;
|
|
17
|
+
detach: (sessionId: string) => ConnectedTarget | undefined;
|
|
18
|
+
updateTargetInfo: (targetInfo: TargetInfo) => ConnectedTarget | undefined;
|
|
19
|
+
bindName: (name: string, targetId: string) => void;
|
|
20
|
+
getByName: (name: string) => ConnectedTarget | undefined;
|
|
21
|
+
getByTargetId: (targetId: string) => ConnectedTarget | undefined;
|
|
22
|
+
getBySessionId: (sessionId: string) => ConnectedTarget | undefined;
|
|
23
|
+
targets: () => ConnectedTarget[];
|
|
24
|
+
list: () => PageDescriptor[];
|
|
25
|
+
waitForAttach: (targetId: string, timeoutMs: number) => Promise<ConnectedTarget>;
|
|
26
|
+
waitForDetach: (targetId: string, timeoutMs: number) => Promise<void>;
|
|
27
|
+
disconnect: (error: Error) => void;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=target-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target-registry.d.ts","sourceRoot":"","sources":["../../src/target-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;CACxB;AAQD,wBAAgB,oBAAoB;qBAOV,eAAe;wBAgBZ,MAAM,KAAG,eAAe,GAAG,SAAS;mCAgBzB,UAAU,KAAG,eAAe,GAAG,SAAS;qBAOtD,MAAM,YAAY,MAAM;sBAOvB,MAAM,KAAG,eAAe,GAAG,SAAS;8BAgDjC,MAAM;gCACJ,MAAM;;gBA5CnB,cAAc,EAAE;8BAQA,MAAM,aAAa,MAAM,KAAG,OAAO,CAAC,eAAe,CAAC;8BAWpD,MAAM,aAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;wBAU/C,KAAK;EAsBjC"}
|