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.
Files changed (134) hide show
  1. package/README.md +54 -182
  2. package/bin/abelworkflow.mjs +5 -3
  3. package/extensions/pi-gpt-responses-compat/index.ts +1 -1
  4. package/lib/cli/args.mjs +76 -0
  5. package/lib/cli/main.mjs +385 -0
  6. package/lib/cli/prompts.mjs +106 -0
  7. package/lib/config/dotenv.mjs +102 -0
  8. package/lib/config/jsonc.mjs +80 -0
  9. package/lib/config/store.mjs +310 -0
  10. package/lib/config/toml.mjs +638 -0
  11. package/lib/installer/assets.mjs +324 -0
  12. package/lib/installer/install.mjs +153 -0
  13. package/lib/installer/links.mjs +427 -0
  14. package/lib/installer/state.mjs +163 -0
  15. package/lib/paths.mjs +99 -0
  16. package/lib/providers/claude.mjs +197 -0
  17. package/lib/providers/codex.mjs +433 -0
  18. package/lib/providers/pi.mjs +577 -0
  19. package/lib/providers/skills.mjs +105 -0
  20. package/lib/templates/codex/agents/default.toml +7 -0
  21. package/lib/templates/codex/agents/explorer.toml +7 -0
  22. package/lib/templates/codex/agents/planner.toml +7 -0
  23. package/lib/templates/codex/agents/reviewer.toml +7 -0
  24. package/lib/templates/codex/agents/worker.toml +7 -0
  25. package/lib/templates/codex/config-base.toml +11 -3
  26. package/lib/templates/workflow/AGENTS.md +50 -0
  27. package/lib/templates/workflow/commands/abel-design.md +175 -0
  28. package/{commands → lib/templates/workflow/commands}/abel-diagnose.md +5 -5
  29. package/lib/templates/workflow/commands/abel-implement.md +170 -0
  30. package/{commands → lib/templates/workflow/commands}/abel-init.md +3 -5
  31. package/{.gitignore → lib/templates/workflow/gitignore.template} +0 -2
  32. package/lib/tools/cli-installer.mjs +277 -0
  33. package/package.json +37 -10
  34. package/skills/context7-auto-research/SKILL.md +5 -5
  35. package/skills/context7-auto-research/{context7-api.js → context7-api.cjs} +5 -8
  36. package/skills/dev-browser/SKILL.md +53 -33
  37. package/skills/dev-browser/dist/scripts/start.d.ts +2 -0
  38. package/skills/dev-browser/dist/scripts/start.d.ts.map +1 -0
  39. package/skills/dev-browser/dist/scripts/start.js +118 -0
  40. package/skills/dev-browser/dist/scripts/start.js.map +1 -0
  41. package/skills/dev-browser/dist/src/client.d.ts +93 -0
  42. package/skills/dev-browser/dist/src/client.d.ts.map +1 -0
  43. package/skills/dev-browser/dist/src/client.js +310 -0
  44. package/skills/dev-browser/dist/src/client.js.map +1 -0
  45. package/skills/dev-browser/dist/src/entrypoint.d.ts +29 -0
  46. package/skills/dev-browser/dist/src/entrypoint.d.ts.map +1 -0
  47. package/skills/dev-browser/dist/src/entrypoint.js +106 -0
  48. package/skills/dev-browser/dist/src/entrypoint.js.map +1 -0
  49. package/skills/dev-browser/dist/src/index.d.ts +4 -0
  50. package/skills/dev-browser/dist/src/index.d.ts.map +1 -0
  51. package/skills/dev-browser/dist/src/index.js +2 -0
  52. package/skills/dev-browser/dist/src/index.js.map +1 -0
  53. package/skills/dev-browser/dist/src/page-api.d.ts +25 -0
  54. package/skills/dev-browser/dist/src/page-api.d.ts.map +1 -0
  55. package/skills/dev-browser/dist/src/page-api.js +104 -0
  56. package/skills/dev-browser/dist/src/page-api.js.map +1 -0
  57. package/skills/dev-browser/dist/src/relay.d.ts +27 -0
  58. package/skills/dev-browser/dist/src/relay.d.ts.map +1 -0
  59. package/skills/dev-browser/dist/src/relay.js +521 -0
  60. package/skills/dev-browser/dist/src/relay.js.map +1 -0
  61. package/skills/dev-browser/dist/src/runtime.d.ts +45 -0
  62. package/skills/dev-browser/dist/src/runtime.d.ts.map +1 -0
  63. package/skills/dev-browser/dist/src/runtime.js +54 -0
  64. package/skills/dev-browser/dist/src/runtime.js.map +1 -0
  65. package/skills/dev-browser/dist/src/snapshot/browser-script.d.ts +23 -0
  66. package/skills/dev-browser/dist/src/snapshot/browser-script.d.ts.map +1 -0
  67. package/skills/dev-browser/{src/snapshot/browser-script.ts → dist/src/snapshot/browser-script.js} +21 -30
  68. package/skills/dev-browser/dist/src/snapshot/browser-script.js.map +1 -0
  69. package/skills/dev-browser/dist/src/snapshot/index.d.ts +14 -0
  70. package/skills/dev-browser/dist/src/snapshot/index.d.ts.map +1 -0
  71. package/skills/dev-browser/{src/snapshot/index.ts → dist/src/snapshot/index.js} +2 -2
  72. package/skills/dev-browser/dist/src/snapshot/index.js.map +1 -0
  73. package/skills/dev-browser/dist/src/snapshot/inject.d.ts +13 -0
  74. package/skills/dev-browser/dist/src/snapshot/inject.d.ts.map +1 -0
  75. package/skills/dev-browser/{src/snapshot/inject.ts → dist/src/snapshot/inject.js} +2 -2
  76. package/skills/dev-browser/dist/src/snapshot/inject.js.map +1 -0
  77. package/skills/dev-browser/dist/src/standalone.d.ts +32 -0
  78. package/skills/dev-browser/dist/src/standalone.d.ts.map +1 -0
  79. package/skills/dev-browser/dist/src/standalone.js +174 -0
  80. package/skills/dev-browser/dist/src/standalone.js.map +1 -0
  81. package/skills/dev-browser/dist/src/startup.d.ts +55 -0
  82. package/skills/dev-browser/dist/src/startup.d.ts.map +1 -0
  83. package/skills/dev-browser/dist/src/startup.js +81 -0
  84. package/skills/dev-browser/dist/src/startup.js.map +1 -0
  85. package/skills/dev-browser/dist/src/target-registry.d.ts +29 -0
  86. package/skills/dev-browser/dist/src/target-registry.d.ts.map +1 -0
  87. package/skills/dev-browser/dist/src/target-registry.js +135 -0
  88. package/skills/dev-browser/dist/src/target-registry.js.map +1 -0
  89. package/skills/dev-browser/dist/src/types.d.ts +27 -0
  90. package/skills/dev-browser/dist/src/types.d.ts.map +1 -0
  91. package/skills/dev-browser/dist/src/types.js +2 -0
  92. package/skills/dev-browser/dist/src/types.js.map +1 -0
  93. package/skills/dev-browser/package-lock.json +67 -1510
  94. package/skills/dev-browser/package.json +18 -14
  95. package/skills/dev-browser/references/scraping.md +94 -105
  96. package/skills/grok-search/.env.example +3 -3
  97. package/skills/grok-search/SKILL.md +1 -1
  98. package/skills/grok-search/defaults.json +3 -0
  99. package/skills/grok-search/gitignore.template +4 -0
  100. package/skills/grok-search/scripts/_dotenv.py +5 -1
  101. package/skills/grok-search/scripts/groksearch_cli.py +15 -33
  102. package/skills/prompt-enhancer/SKILL.md +2 -27
  103. package/skills/prompt-enhancer/TEMPLATE.md +0 -4
  104. package/.skill-lock.json +0 -29
  105. package/AGENTS.md +0 -45
  106. package/commands/abel-implement.md +0 -157
  107. package/commands/abel-plan.md +0 -88
  108. package/commands/abel-research.md +0 -126
  109. package/lib/cli/logic.mjs +0 -213
  110. package/lib/cli.mjs +0 -3016
  111. package/skills/confidence-check/SKILL.md +0 -34
  112. package/skills/confidence-check/confidence.ts +0 -276
  113. package/skills/dev-browser/bun.lock +0 -460
  114. package/skills/dev-browser/scripts/start.ts +0 -280
  115. package/skills/dev-browser/src/client.ts +0 -474
  116. package/skills/dev-browser/src/entrypoint.ts +0 -157
  117. package/skills/dev-browser/src/index.ts +0 -289
  118. package/skills/dev-browser/src/relay.ts +0 -731
  119. package/skills/dev-browser/src/runtime.test.ts +0 -60
  120. package/skills/dev-browser/src/runtime.ts +0 -171
  121. package/skills/dev-browser/src/startup.test.ts +0 -95
  122. package/skills/dev-browser/src/startup.ts +0 -153
  123. package/skills/dev-browser/src/types.ts +0 -35
  124. package/skills/dev-browser/tsconfig.json +0 -36
  125. package/skills/dev-browser/vitest.config.ts +0 -12
  126. package/skills/prompt-enhancer/.env.example +0 -12
  127. package/skills/prompt-enhancer/ADVANCED.md +0 -103
  128. package/skills/prompt-enhancer/requirements.txt +0 -2
  129. package/skills/prompt-enhancer/scripts/_dotenv.py +0 -28
  130. package/skills/prompt-enhancer/scripts/enhance.py +0 -191
  131. package/skills/prompt-enhancer/scripts/prompt_enhancer_entry.py +0 -253
  132. package/skills/sequential-think/SKILL.md +0 -198
  133. package/skills/sequential-think/scripts/.env.example +0 -5
  134. package/skills/sequential-think/scripts/sequential_think_cli.py +0 -253
@@ -0,0 +1,118 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { spawn } from "node:child_process";
3
+ import { createRequire } from "node:module";
4
+ import { join } from "node:path";
5
+ import { formatHttpUrl, parseEntrypointArgs, resolveHostForProbe } from "../src/entrypoint.js";
6
+ import { getInvalidRuntimeDependencies, getLockedRuntimeDependencies, getPlaywrightInstallCommand, getRuntimeDependencyInstallCommand, isPlaywrightChromiumInstalled, isTcpPortInUse, resolveSkillDirFromEntrypoint, resolveRuntimePaths, shouldUseShellForPackageCommands, } from "../src/runtime.js";
7
+ import { ensurePlaywrightChromium, preflightStandaloneStartup, runEntrypoint, } from "../src/startup.js";
8
+ const runtimePaths = resolveRuntimePaths(resolveSkillDirFromEntrypoint(import.meta.url));
9
+ const useShell = shouldUseShellForPackageCommands(process.platform);
10
+ const require = createRequire(import.meta.url);
11
+ async function main() {
12
+ const args = parseEntrypointArgs(process.argv.slice(2));
13
+ await ensureSkillDependencies();
14
+ await runEntrypoint(args, {
15
+ runtimePaths,
16
+ serveStandalone: async (options) => {
17
+ const { serve } = await import("../src/index.js");
18
+ return serve(options);
19
+ },
20
+ serveExtension: async (options) => {
21
+ const { serveRelay } = await import("../src/relay.js");
22
+ return serveRelay(options);
23
+ },
24
+ registerShutdown,
25
+ keepAlive: () => new Promise(() => { }),
26
+ log: (line) => console.log(line),
27
+ ensureBrowser: async () => {
28
+ const { registry } = require("playwright-core/lib/server/registry/index");
29
+ await ensurePlaywrightChromium({
30
+ isInstalled: () => isPlaywrightChromiumInstalled({
31
+ headless: args.headless,
32
+ findExecutable: (name) => registry.findExecutable(name),
33
+ exists: existsSync,
34
+ }),
35
+ installCommand: getPlaywrightInstallCommand({ skillDir: runtimePaths.skillDir }),
36
+ runCommand,
37
+ log: (line) => console.log(line),
38
+ });
39
+ },
40
+ preflightStandalone: () => preflightStandaloneStartup(args, {
41
+ checkServer: async (host, port) => {
42
+ try {
43
+ const response = await fetch(formatHttpUrl(resolveHostForProbe(host), port), {
44
+ signal: AbortSignal.timeout(1000),
45
+ });
46
+ if (!response.ok) {
47
+ return { ok: false };
48
+ }
49
+ const info = (await response.json());
50
+ return { ok: true, info };
51
+ }
52
+ catch {
53
+ return { ok: false };
54
+ }
55
+ },
56
+ isPortInUse: isTcpPortInUse,
57
+ log: (line) => console.log(line),
58
+ }),
59
+ });
60
+ }
61
+ async function ensureSkillDependencies() {
62
+ const packageLock = JSON.parse(readFileSync(join(runtimePaths.skillDir, "package-lock.json"), "utf8"));
63
+ const invalidDependencies = getInvalidRuntimeDependencies({
64
+ skillDir: runtimePaths.skillDir,
65
+ lockedDependencies: getLockedRuntimeDependencies(packageLock),
66
+ readPackageVersion: (path) => {
67
+ try {
68
+ const installed = JSON.parse(readFileSync(path, "utf8"));
69
+ return typeof installed.version === "string" ? installed.version : undefined;
70
+ }
71
+ catch {
72
+ return undefined;
73
+ }
74
+ },
75
+ });
76
+ if (invalidDependencies.length === 0)
77
+ return;
78
+ console.log("dev-browser dependencies missing or out of date. Installing local packages...");
79
+ const installCommand = getRuntimeDependencyInstallCommand();
80
+ await runCommand(installCommand.command, installCommand.args);
81
+ console.log("dev-browser dependencies installed.");
82
+ }
83
+ async function runCommand(command, args) {
84
+ await new Promise((resolve, reject) => {
85
+ const child = spawn(command, args, {
86
+ cwd: runtimePaths.skillDir,
87
+ stdio: "inherit",
88
+ shell: useShell && command === "npm",
89
+ windowsHide: useShell && command === "npm",
90
+ });
91
+ child.on("error", reject);
92
+ child.on("close", (code) => {
93
+ if (code === 0) {
94
+ resolve();
95
+ return;
96
+ }
97
+ reject(new Error(`${command} ${args.join(" ")} exited with code ${code}`));
98
+ });
99
+ });
100
+ }
101
+ function registerShutdown(stop) {
102
+ let shutdownPromise;
103
+ const shutdown = () => {
104
+ shutdownPromise ??= (async () => {
105
+ await stop();
106
+ process.exit(0);
107
+ })();
108
+ return shutdownPromise;
109
+ };
110
+ process.on("SIGINT", shutdown);
111
+ process.on("SIGTERM", shutdown);
112
+ process.on("SIGHUP", shutdown);
113
+ }
114
+ main().catch((error) => {
115
+ console.error("Failed to start dev-browser:", error);
116
+ process.exit(1);
117
+ });
118
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../scripts/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { type Page, type ElementHandle } from "playwright";
2
+ import type { ViewportSize } from "./types.js";
3
+ /**
4
+ * Options for waiting for page load
5
+ */
6
+ export interface WaitForPageLoadOptions {
7
+ /** Maximum time to wait in ms (default: 10000) */
8
+ timeout?: number;
9
+ /** How often to check page state in ms (default: 50) */
10
+ pollInterval?: number;
11
+ /** Minimum time to wait even if page appears ready in ms (default: 100) */
12
+ minimumWait?: number;
13
+ /** Wait for network to be idle (no pending requests) (default: true) */
14
+ waitForNetworkIdle?: boolean;
15
+ }
16
+ /**
17
+ * Result of waiting for page load
18
+ */
19
+ export interface WaitForPageLoadResult {
20
+ /** Whether the page is considered loaded */
21
+ success: boolean;
22
+ /** Document ready state when finished */
23
+ readyState: string;
24
+ /** Number of pending network requests when finished */
25
+ pendingRequests: number;
26
+ /** Time spent waiting in ms */
27
+ waitTimeMs: number;
28
+ /** Whether timeout was reached */
29
+ timedOut: boolean;
30
+ }
31
+ /**
32
+ * Wait for a page to finish loading using document.readyState and performance API.
33
+ *
34
+ * Uses browser-use's approach of:
35
+ * - Checking document.readyState for 'complete'
36
+ * - Monitoring pending network requests via Performance API
37
+ * - Filtering out ads, tracking, and non-critical resources
38
+ * - Graceful timeout handling (continues even if timeout reached)
39
+ */
40
+ export declare function waitForPageLoad(page: Page, options?: WaitForPageLoadOptions): Promise<WaitForPageLoadResult>;
41
+ /** Server mode information */
42
+ export interface ServerInfo {
43
+ wsEndpoint: string;
44
+ mode: "standalone" | "extension";
45
+ extensionConnected?: boolean;
46
+ }
47
+ /**
48
+ * Options for creating or getting a page
49
+ */
50
+ export interface PageOptions {
51
+ /** Viewport size for new pages */
52
+ viewport?: ViewportSize;
53
+ }
54
+ export interface DevBrowserClient {
55
+ page: (name: string, options?: PageOptions) => Promise<Page>;
56
+ list: () => Promise<string[]>;
57
+ close: (name: string) => Promise<void>;
58
+ disconnect: () => Promise<void>;
59
+ /**
60
+ * Get AI-friendly ARIA snapshot for a page.
61
+ * Returns YAML format with refs like [ref=e1], [ref=e2].
62
+ * Refs are stored on window.__devBrowserRefs for cross-connection persistence.
63
+ */
64
+ getAISnapshot: (name: string) => Promise<string>;
65
+ /**
66
+ * Get an element handle by its ref from the last getAISnapshot call.
67
+ * Refs persist across Playwright connections.
68
+ */
69
+ selectSnapshotRef: (name: string, ref: string) => Promise<ElementHandle | null>;
70
+ /**
71
+ * Get server information including mode and extension connection status.
72
+ */
73
+ getServerInfo: () => Promise<ServerInfo>;
74
+ }
75
+ interface TargetLookupSession {
76
+ send(method: "Target.getTargetInfo"): Promise<{
77
+ targetInfo: {
78
+ targetId: string;
79
+ };
80
+ }>;
81
+ detach(): Promise<void>;
82
+ }
83
+ interface TargetLookupContext<TPage> {
84
+ pages(): TPage[];
85
+ newCDPSession(page: TPage): Promise<TargetLookupSession>;
86
+ }
87
+ interface TargetLookupBrowser<TPage> {
88
+ contexts(): Array<TargetLookupContext<TPage>>;
89
+ }
90
+ export declare function findPageByTargetId<TPage>(browser: TargetLookupBrowser<TPage>, targetId: string): Promise<TPage | null>;
91
+ export declare function connect(serverUrl?: string): Promise<DevBrowserClient>;
92
+ export {};
93
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,310 @@
1
+ import { chromium } from "playwright";
2
+ import { getSnapshotScript } from "./snapshot/browser-script.js";
3
+ /**
4
+ * Wait for a page to finish loading using document.readyState and performance API.
5
+ *
6
+ * Uses browser-use's approach of:
7
+ * - Checking document.readyState for 'complete'
8
+ * - Monitoring pending network requests via Performance API
9
+ * - Filtering out ads, tracking, and non-critical resources
10
+ * - Graceful timeout handling (continues even if timeout reached)
11
+ */
12
+ export async function waitForPageLoad(page, options = {}) {
13
+ const { timeout = 10000, pollInterval = 50, minimumWait = 100, waitForNetworkIdle = true, } = options;
14
+ const startTime = Date.now();
15
+ let lastState = null;
16
+ // Wait minimum time first
17
+ if (minimumWait > 0) {
18
+ await new Promise((resolve) => setTimeout(resolve, minimumWait));
19
+ }
20
+ // Poll until ready or timeout
21
+ while (Date.now() - startTime < timeout) {
22
+ try {
23
+ lastState = await getPageLoadState(page);
24
+ // Check if document is complete
25
+ const documentReady = lastState.documentReadyState === "complete";
26
+ // Check if network is idle (no pending critical requests)
27
+ const networkIdle = !waitForNetworkIdle || lastState.pendingRequests.length === 0;
28
+ if (documentReady && networkIdle) {
29
+ return {
30
+ success: true,
31
+ readyState: lastState.documentReadyState,
32
+ pendingRequests: lastState.pendingRequests.length,
33
+ waitTimeMs: Date.now() - startTime,
34
+ timedOut: false,
35
+ };
36
+ }
37
+ }
38
+ catch {
39
+ // Page may be navigating, continue polling
40
+ }
41
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
42
+ }
43
+ // Timeout reached - return current state
44
+ return {
45
+ success: false,
46
+ readyState: lastState?.documentReadyState ?? "unknown",
47
+ pendingRequests: lastState?.pendingRequests.length ?? 0,
48
+ waitTimeMs: Date.now() - startTime,
49
+ timedOut: true,
50
+ };
51
+ }
52
+ /**
53
+ * Get the current page load state including document ready state and pending requests.
54
+ * Filters out ads, tracking, and non-critical resources that shouldn't block loading.
55
+ */
56
+ async function getPageLoadState(page) {
57
+ const result = await page.evaluate(() => {
58
+ // Access browser globals via globalThis for TypeScript compatibility
59
+ /* eslint-disable @typescript-eslint/no-explicit-any */
60
+ const g = globalThis;
61
+ /* eslint-enable @typescript-eslint/no-explicit-any */
62
+ const perf = g.performance;
63
+ const doc = g.document;
64
+ const now = perf.now();
65
+ const resources = perf.getEntriesByType("resource");
66
+ const pending = [];
67
+ // Common ad/tracking domains and patterns to filter out
68
+ const adPatterns = [
69
+ "doubleclick.net",
70
+ "googlesyndication.com",
71
+ "googletagmanager.com",
72
+ "google-analytics.com",
73
+ "facebook.net",
74
+ "connect.facebook.net",
75
+ "analytics",
76
+ "ads",
77
+ "tracking",
78
+ "pixel",
79
+ "hotjar.com",
80
+ "clarity.ms",
81
+ "mixpanel.com",
82
+ "segment.com",
83
+ "newrelic.com",
84
+ "nr-data.net",
85
+ "/tracker/",
86
+ "/collector/",
87
+ "/beacon/",
88
+ "/telemetry/",
89
+ "/log/",
90
+ "/events/",
91
+ "/track.",
92
+ "/metrics/",
93
+ ];
94
+ // Non-critical resource types
95
+ const nonCriticalTypes = ["img", "image", "icon", "font"];
96
+ for (const entry of resources) {
97
+ // Resources with responseEnd === 0 are still loading
98
+ if (entry.responseEnd === 0) {
99
+ const url = entry.name;
100
+ // Filter out ads and tracking
101
+ const isAd = adPatterns.some((pattern) => url.includes(pattern));
102
+ if (isAd)
103
+ continue;
104
+ // Filter out data: URLs and very long URLs
105
+ if (url.startsWith("data:") || url.length > 500)
106
+ continue;
107
+ const loadingDuration = now - entry.startTime;
108
+ // Skip requests loading > 10 seconds (likely stuck/polling)
109
+ if (loadingDuration > 10000)
110
+ continue;
111
+ const resourceType = entry.initiatorType || "unknown";
112
+ // Filter out non-critical resources loading > 3 seconds
113
+ if (nonCriticalTypes.includes(resourceType) && loadingDuration > 3000)
114
+ continue;
115
+ // Filter out image URLs even if type is unknown
116
+ const isImageUrl = /\.(jpg|jpeg|png|gif|webp|svg|ico)(\?|$)/i.test(url);
117
+ if (isImageUrl && loadingDuration > 3000)
118
+ continue;
119
+ pending.push({
120
+ url,
121
+ loadingDurationMs: Math.round(loadingDuration),
122
+ resourceType,
123
+ });
124
+ }
125
+ }
126
+ return {
127
+ documentReadyState: doc.readyState,
128
+ documentLoading: doc.readyState !== "complete",
129
+ pendingRequests: pending,
130
+ };
131
+ });
132
+ return result;
133
+ }
134
+ export async function findPageByTargetId(browser, targetId) {
135
+ for (const context of browser.contexts()) {
136
+ for (const page of context.pages()) {
137
+ let session;
138
+ try {
139
+ session = await context.newCDPSession(page);
140
+ const { targetInfo } = await session.send("Target.getTargetInfo");
141
+ if (targetInfo.targetId === targetId)
142
+ return page;
143
+ }
144
+ catch (error) {
145
+ const message = error instanceof Error ? error.message : String(error);
146
+ if (!message.includes("Target closed") && !message.includes("Session closed")) {
147
+ console.warn(`Unexpected error checking page target: ${message}`);
148
+ }
149
+ }
150
+ finally {
151
+ await session?.detach().catch(() => undefined);
152
+ }
153
+ }
154
+ }
155
+ return null;
156
+ }
157
+ export async function connect(serverUrl = "http://localhost:9222") {
158
+ let browser = null;
159
+ let connectingPromise = null;
160
+ async function ensureConnected() {
161
+ // Return existing connection if still active
162
+ if (browser && browser.isConnected()) {
163
+ return browser;
164
+ }
165
+ // If already connecting, wait for that connection (prevents race condition)
166
+ if (connectingPromise) {
167
+ return connectingPromise;
168
+ }
169
+ // Start new connection with mutex
170
+ connectingPromise = (async () => {
171
+ try {
172
+ const { wsEndpoint } = await fetchServerInfo(serverUrl);
173
+ // Connect to the browser via CDP
174
+ browser = await chromium.connectOverCDP(wsEndpoint);
175
+ return browser;
176
+ }
177
+ finally {
178
+ connectingPromise = null;
179
+ }
180
+ })();
181
+ return connectingPromise;
182
+ }
183
+ // Helper to get a page by name (used by multiple methods)
184
+ async function getPage(name, options) {
185
+ // Request the page from server (creates if doesn't exist)
186
+ const res = await fetch(`${serverUrl}/pages`, {
187
+ method: "POST",
188
+ headers: { "Content-Type": "application/json" },
189
+ body: JSON.stringify({ name, viewport: options?.viewport }),
190
+ });
191
+ if (!res.ok) {
192
+ throw new Error(`Failed to get page: ${await res.text()}`);
193
+ }
194
+ const pageInfo = (await res.json());
195
+ const { targetId } = pageInfo;
196
+ // Connect to browser
197
+ const b = await ensureConnected();
198
+ const page = await waitForExactPage(b, targetId);
199
+ if (!page) {
200
+ throw new Error(`Page "${name}" not found in browser contexts`);
201
+ }
202
+ return page;
203
+ }
204
+ return {
205
+ page: getPage,
206
+ async list() {
207
+ const res = await fetch(`${serverUrl}/pages`);
208
+ const data = (await res.json());
209
+ return data.pages;
210
+ },
211
+ async close(name) {
212
+ const res = await fetch(`${serverUrl}/pages/${encodeURIComponent(name)}`, {
213
+ method: "DELETE",
214
+ });
215
+ if (!res.ok) {
216
+ throw new Error(`Failed to close page: ${await res.text()}`);
217
+ }
218
+ },
219
+ async disconnect() {
220
+ // Just disconnect the CDP connection - pages persist on server
221
+ if (browser) {
222
+ await browser.close();
223
+ browser = null;
224
+ }
225
+ },
226
+ async getAISnapshot(name) {
227
+ // Get the page
228
+ const page = await getPage(name);
229
+ // Inject the snapshot script and call getAISnapshot
230
+ const snapshotScript = getSnapshotScript();
231
+ const snapshot = await page.evaluate((script) => {
232
+ // Inject script if not already present
233
+ // Note: page.evaluate runs in browser context where window exists
234
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
235
+ const w = globalThis;
236
+ if (!w.__devBrowser_getAISnapshot) {
237
+ // eslint-disable-next-line no-eval
238
+ eval(script);
239
+ }
240
+ return w.__devBrowser_getAISnapshot();
241
+ }, snapshotScript);
242
+ return snapshot;
243
+ },
244
+ async selectSnapshotRef(name, ref) {
245
+ // Get the page
246
+ const page = await getPage(name);
247
+ // Find the element using the stored refs
248
+ const elementHandle = await page.evaluateHandle((refId) => {
249
+ // Note: page.evaluateHandle runs in browser context where globalThis is the window
250
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
251
+ const w = globalThis;
252
+ const refs = w.__devBrowserRefs;
253
+ if (!refs) {
254
+ throw new Error("No snapshot refs found. Call getAISnapshot first.");
255
+ }
256
+ const element = refs[refId];
257
+ if (!element) {
258
+ throw new Error(`Ref "${refId}" not found. Available refs: ${Object.keys(refs).join(", ")}`);
259
+ }
260
+ return element;
261
+ }, ref);
262
+ // Check if we got an element
263
+ const element = elementHandle.asElement();
264
+ if (!element) {
265
+ await elementHandle.dispose();
266
+ return null;
267
+ }
268
+ return element;
269
+ },
270
+ async getServerInfo() {
271
+ return fetchServerInfo(serverUrl);
272
+ },
273
+ };
274
+ }
275
+ async function fetchServerInfo(serverUrl) {
276
+ const res = await fetch(serverUrl);
277
+ if (!res.ok) {
278
+ throw new Error(`Server returned ${res.status}: ${await res.text()}`);
279
+ }
280
+ return parseServerInfo(await res.json());
281
+ }
282
+ function parseServerInfo(value) {
283
+ const info = typeof value === "object" && value !== null
284
+ ? value
285
+ : {};
286
+ const mode = Object.hasOwn(info, "mode") ? info.mode : "standalone";
287
+ if (mode !== "standalone" && mode !== "extension") {
288
+ throw new Error(`Invalid dev-browser server mode: expected "standalone" or "extension", received ${JSON.stringify(mode)}`);
289
+ }
290
+ if (typeof info.wsEndpoint !== "string" || info.wsEndpoint.trim().length === 0) {
291
+ throw new Error(`Invalid dev-browser wsEndpoint: expected a non-empty string, received ${JSON.stringify(info.wsEndpoint)}`);
292
+ }
293
+ return {
294
+ wsEndpoint: info.wsEndpoint,
295
+ mode,
296
+ extensionConnected: info.extensionConnected,
297
+ };
298
+ }
299
+ async function waitForExactPage(browser, targetId) {
300
+ const deadline = Date.now() + 5000;
301
+ do {
302
+ const page = await findPageByTargetId(browser, targetId);
303
+ if (page)
304
+ return page;
305
+ if (Date.now() >= deadline)
306
+ return null;
307
+ await new Promise((resolve) => setTimeout(resolve, 25));
308
+ } while (true);
309
+ }
310
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export type EntrypointMode = "standalone" | "extension";
2
+ export interface EntrypointArgs {
3
+ mode: EntrypointMode;
4
+ host: string;
5
+ port: number;
6
+ cdpPort: number;
7
+ headless: boolean;
8
+ }
9
+ export interface StandaloneReadinessInfo {
10
+ mode: "standalone";
11
+ host: string;
12
+ port: number;
13
+ wsEndpoint: string;
14
+ }
15
+ export interface ExtensionReadinessInfo {
16
+ mode: "extension";
17
+ host: string;
18
+ port: number;
19
+ wsEndpoint: string;
20
+ }
21
+ export type ReadinessInfo = StandaloneReadinessInfo | ExtensionReadinessInfo;
22
+ export declare const DEFAULT_HOST = "localhost";
23
+ export declare function formatHostForUrl(host: string): string;
24
+ export declare function formatHttpUrl(host: string, port: number): string;
25
+ export declare function formatWsUrl(host: string, port: number, path?: string): string;
26
+ export declare function resolveHostForProbe(host: string): string;
27
+ export declare function parseEntrypointArgs(argv: string[], env?: Record<string, string | undefined>): EntrypointArgs;
28
+ export declare function formatReadinessLines(info: ReadinessInfo): string[];
29
+ //# sourceMappingURL=entrypoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entrypoint.d.ts","sourceRoot":"","sources":["../../src/entrypoint.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,WAAW,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,GAAG,uBAAuB,GAAG,sBAAsB,CAAC;AAE7E,eAAO,MAAM,YAAY,cAAc,CAAC;AAIxC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,MAAM,CAEzE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAaxD;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,cAAc,CA6ChB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE,CAmBlE"}