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,521 @@
1
+ import { serve } from "@hono/node-server";
2
+ import { createNodeWebSocket } from "@hono/node-ws";
3
+ import { Hono } from "hono";
4
+ import { formatHttpUrl, formatWsUrl } from "./entrypoint.js";
5
+ import { PageBackendError, createPageApi, } from "./page-api.js";
6
+ import { createTargetRegistry, } from "./target-registry.js";
7
+ export const WEBSOCKET_POLICY_VIOLATION_CODE = 1008;
8
+ export const CDP_ORIGIN_POLICY_REASON = "CDP endpoint requires an originless client";
9
+ export const EXTENSION_ORIGIN_POLICY_REASON = "Extension endpoint requires originless or chrome-extension client";
10
+ export function isTrustedCdpOrigin(origin) {
11
+ return origin === undefined;
12
+ }
13
+ export function isTrustedExtensionOrigin(origin) {
14
+ if (origin === undefined)
15
+ return true;
16
+ try {
17
+ const url = new URL(origin);
18
+ return (url.protocol === "chrome-extension:" &&
19
+ /^[a-p]{32}$/.test(url.hostname) &&
20
+ (url.pathname === "" || url.pathname === "/") &&
21
+ url.username === "" &&
22
+ url.password === "" &&
23
+ url.port === "" &&
24
+ url.search === "" &&
25
+ url.hash === "");
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ function isRecord(value) {
32
+ return typeof value === "object" && value !== null && !Array.isArray(value);
33
+ }
34
+ function isCdpCommand(value) {
35
+ return isRecord(value)
36
+ && typeof value.id === "number"
37
+ && Number.isFinite(value.id)
38
+ && typeof value.method === "string"
39
+ && (value.params === undefined || isRecord(value.params))
40
+ && (value.sessionId === undefined || typeof value.sessionId === "string");
41
+ }
42
+ export function createExtensionPageBackend({ registry, isConnected, sendCommand, timeoutMs, }) {
43
+ const pending = new Map();
44
+ async function create(name) {
45
+ if (!isConnected())
46
+ throw new PageBackendError(503, "extension not connected");
47
+ const result = (await sendCommand("Target.createTarget", { url: "about:blank" }));
48
+ if (typeof result?.targetId !== "string" || result.targetId.length === 0) {
49
+ throw new PageBackendError(502, "extension returned an invalid targetId");
50
+ }
51
+ if (!isConnected()) {
52
+ throw new PageBackendError(503, "extension connection closed");
53
+ }
54
+ let target;
55
+ try {
56
+ target = await registry.waitForAttach(result.targetId, timeoutMs);
57
+ }
58
+ catch (error) {
59
+ if (error instanceof PageBackendError)
60
+ throw error;
61
+ const timeout = new PageBackendError(504, errorMessage(error));
62
+ try {
63
+ await sendCommand("Target.closeTarget", { targetId: result.targetId });
64
+ }
65
+ catch { }
66
+ throw timeout;
67
+ }
68
+ registry.bindName(name, target.targetId);
69
+ return { name, targetId: target.targetId };
70
+ }
71
+ return {
72
+ async list() {
73
+ return registry.list();
74
+ },
75
+ async getOrCreate(name) {
76
+ const existing = registry.getByName(name);
77
+ if (existing)
78
+ return { name, targetId: existing.targetId };
79
+ const inFlight = pending.get(name);
80
+ if (inFlight)
81
+ return inFlight;
82
+ const creation = create(name);
83
+ pending.set(name, creation);
84
+ try {
85
+ return await creation;
86
+ }
87
+ finally {
88
+ if (pending.get(name) === creation)
89
+ pending.delete(name);
90
+ }
91
+ },
92
+ async close(name) {
93
+ const target = registry.getByName(name);
94
+ if (!target)
95
+ return false;
96
+ if (!isConnected())
97
+ throw new PageBackendError(503, "extension not connected");
98
+ const result = (await sendCommand("Target.closeTarget", {
99
+ targetId: target.targetId,
100
+ }));
101
+ if (result?.success !== true) {
102
+ throw new PageBackendError(502, `extension failed to close target ${target.targetId}`);
103
+ }
104
+ if (!isConnected()) {
105
+ throw new PageBackendError(503, "extension connection closed");
106
+ }
107
+ try {
108
+ await registry.waitForDetach(target.targetId, timeoutMs);
109
+ }
110
+ catch (error) {
111
+ if (error instanceof PageBackendError)
112
+ throw error;
113
+ throw new PageBackendError(504, errorMessage(error));
114
+ }
115
+ return true;
116
+ },
117
+ };
118
+ }
119
+ export async function serveRelay(options = {}) {
120
+ const requestedPort = options.port ?? 9222;
121
+ const host = options.host ?? "127.0.0.1";
122
+ const targetTimeoutMs = options.targetTimeoutMs ?? 5000;
123
+ const wsEndpoint = formatWsUrl(host, requestedPort, "/cdp");
124
+ const registry = createTargetRegistry();
125
+ const playwrightClients = new Map();
126
+ const extensionPending = new Map();
127
+ let extensionWs = null;
128
+ let extensionMessageId = 0;
129
+ let virtualSessionId = 0;
130
+ function log(...args) {
131
+ console.log("[relay]", ...args);
132
+ }
133
+ function isPlaywrightClientOwner(client) {
134
+ return playwrightClients.get(client.id) === client;
135
+ }
136
+ function sendToPlaywright(message, client) {
137
+ const encoded = JSON.stringify(message);
138
+ if (client) {
139
+ if (isPlaywrightClientOwner(client))
140
+ client.ws.send(encoded);
141
+ return;
142
+ }
143
+ for (const client of playwrightClients.values())
144
+ client.ws.send(encoded);
145
+ }
146
+ function sendAttached(target, client) {
147
+ const event = {
148
+ method: "Target.attachedToTarget",
149
+ params: {
150
+ sessionId: target.sessionId,
151
+ targetInfo: { ...target.targetInfo, attached: true },
152
+ waitingForDebugger: false,
153
+ },
154
+ };
155
+ const clients = client ? [client] : playwrightClients.values();
156
+ for (const owner of clients) {
157
+ if (!isPlaywrightClientOwner(owner) || owner.knownTargets.has(target.targetId))
158
+ continue;
159
+ owner.knownTargets.add(target.targetId);
160
+ owner.ws.send(JSON.stringify(event));
161
+ }
162
+ }
163
+ function createSessionAlias(client, physicalSessionId, parentSessionId) {
164
+ let sessionId;
165
+ do {
166
+ sessionId = `dev-browser-virtual-${++virtualSessionId}`;
167
+ } while (registry.getBySessionId(sessionId) || client.sessionAliases.has(sessionId));
168
+ client.sessionAliases.set(sessionId, { physicalSessionId, parentSessionId });
169
+ return sessionId;
170
+ }
171
+ function resolveSessionId(client, sessionId) {
172
+ return sessionId
173
+ ? (client.sessionAliases.get(sessionId)?.physicalSessionId ?? sessionId)
174
+ : undefined;
175
+ }
176
+ function sendSessionEvent(method, params, sessionId) {
177
+ for (const client of playwrightClients.values()) {
178
+ client.ws.send(JSON.stringify({ method, params, sessionId }));
179
+ if (!sessionId)
180
+ continue;
181
+ for (const [alias, binding] of client.sessionAliases) {
182
+ if (binding.physicalSessionId !== sessionId)
183
+ continue;
184
+ client.ws.send(JSON.stringify({ method, params, sessionId: alias }));
185
+ }
186
+ }
187
+ }
188
+ function sendDetached(physicalSessionId, params, target) {
189
+ const physicalParams = { ...params, sessionId: physicalSessionId };
190
+ for (const client of playwrightClients.values()) {
191
+ if (target)
192
+ client.knownTargets.delete(target.targetId);
193
+ client.ws.send(JSON.stringify({ method: "Target.detachedFromTarget", params: physicalParams }));
194
+ for (const [alias, binding] of client.sessionAliases) {
195
+ if (binding.physicalSessionId !== physicalSessionId)
196
+ continue;
197
+ client.sessionAliases.delete(alias);
198
+ client.ws.send(JSON.stringify({
199
+ method: "Target.detachedFromTarget",
200
+ params: { ...params, sessionId: alias },
201
+ sessionId: binding.parentSessionId,
202
+ }));
203
+ }
204
+ }
205
+ }
206
+ function rejectExtensionPending(error) {
207
+ for (const pending of extensionPending.values())
208
+ pending.reject(error);
209
+ extensionPending.clear();
210
+ }
211
+ function closePlaywrightClients(reason) {
212
+ for (const client of playwrightClients.values())
213
+ client.ws.close(1000, reason);
214
+ playwrightClients.clear();
215
+ }
216
+ function disconnectExtension(error) {
217
+ rejectExtensionPending(error);
218
+ registry.disconnect(error);
219
+ extensionWs = null;
220
+ closePlaywrightClients(error.message);
221
+ }
222
+ async function sendToExtension(method, params, timeoutMs = 30_000) {
223
+ const ws = extensionWs;
224
+ if (!ws)
225
+ throw new PageBackendError(503, "extension not connected");
226
+ const id = ++extensionMessageId;
227
+ ws.send(JSON.stringify({ id, method, params }));
228
+ return new Promise((resolve, reject) => {
229
+ const timer = setTimeout(() => {
230
+ extensionPending.delete(id);
231
+ reject(new Error(`Extension request timeout after ${timeoutMs}ms: ${method}`));
232
+ }, timeoutMs);
233
+ extensionPending.set(id, {
234
+ resolve: (result) => {
235
+ clearTimeout(timer);
236
+ resolve(result);
237
+ },
238
+ reject: (error) => {
239
+ clearTimeout(timer);
240
+ reject(error);
241
+ },
242
+ });
243
+ });
244
+ }
245
+ const sendCdpCommand = (method, params) => sendToExtension("forwardCDPCommand", { method, params });
246
+ const pageBackend = createExtensionPageBackend({
247
+ registry,
248
+ isConnected: () => extensionWs !== null,
249
+ sendCommand: sendCdpCommand,
250
+ timeoutMs: targetTimeoutMs,
251
+ });
252
+ async function routeCdpCommand(client, { method, params, sessionId }) {
253
+ const physicalSessionId = resolveSessionId(client, sessionId);
254
+ switch (method) {
255
+ case "Browser.getVersion":
256
+ return {
257
+ protocolVersion: "1.3",
258
+ product: "Chrome/Extension-Bridge",
259
+ revision: "1.0.0",
260
+ userAgent: "dev-browser-relay/1.0.0",
261
+ jsVersion: "V8",
262
+ };
263
+ case "Browser.setDownloadBehavior":
264
+ case "Target.setDiscoverTargets":
265
+ return {};
266
+ case "Target.setAutoAttach":
267
+ if (!sessionId)
268
+ return {};
269
+ break;
270
+ case "Target.attachToBrowserTarget":
271
+ return { sessionId: "browser" };
272
+ case "Target.detachFromTarget": {
273
+ const detachedSessionId = params?.sessionId;
274
+ if (typeof detachedSessionId === "string" && client.sessionAliases.delete(detachedSessionId)) {
275
+ return {};
276
+ }
277
+ if (sessionId === "browser" || params?.sessionId === "browser")
278
+ return {};
279
+ break;
280
+ }
281
+ case "Target.attachToTarget": {
282
+ const targetId = params?.targetId;
283
+ if (typeof targetId !== "string")
284
+ throw new Error("targetId is required");
285
+ const target = registry.getByTargetId(targetId);
286
+ if (!target)
287
+ throw new Error(`Target ${targetId} not found`);
288
+ return {
289
+ sessionId: createSessionAlias(client, target.sessionId, sessionId),
290
+ };
291
+ }
292
+ case "Target.getTargetInfo": {
293
+ const targetId = params?.targetId;
294
+ const target = typeof targetId === "string"
295
+ ? registry.getByTargetId(targetId)
296
+ : physicalSessionId
297
+ ? registry.getBySessionId(physicalSessionId)
298
+ : undefined;
299
+ return { targetInfo: target?.targetInfo };
300
+ }
301
+ case "Target.getTargets":
302
+ return {
303
+ targetInfos: registry.targets().map(({ targetInfo }) => ({
304
+ ...targetInfo,
305
+ attached: true,
306
+ })),
307
+ };
308
+ case "Target.createTarget":
309
+ case "Target.closeTarget":
310
+ return sendCdpCommand(method, params);
311
+ }
312
+ return sendToExtension("forwardCDPCommand", {
313
+ sessionId: physicalSessionId,
314
+ method,
315
+ params,
316
+ });
317
+ }
318
+ const app = new Hono();
319
+ const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({ app });
320
+ app.get("/", (c) => c.json({
321
+ wsEndpoint,
322
+ extensionConnected: extensionWs !== null,
323
+ mode: "extension",
324
+ }));
325
+ app.route("/", createPageApi({ backend: pageBackend, wsEndpoint }));
326
+ app.get("/cdp/:clientId?", upgradeWebSocket((c) => {
327
+ const clientId = c.req.param("clientId") ?? `client-${Date.now()}-${Math.random().toString(36).slice(2)}`;
328
+ const trustedOrigin = isTrustedCdpOrigin(c.req.header("origin"));
329
+ return {
330
+ onOpen(_event, ws) {
331
+ if (!trustedOrigin) {
332
+ ws.close(WEBSOCKET_POLICY_VIOLATION_CODE, CDP_ORIGIN_POLICY_REASON);
333
+ return;
334
+ }
335
+ if (playwrightClients.has(clientId)) {
336
+ ws.close(1000, "Client ID already connected");
337
+ return;
338
+ }
339
+ playwrightClients.set(clientId, {
340
+ id: clientId,
341
+ ws,
342
+ knownTargets: new Set(),
343
+ sessionAliases: new Map(),
344
+ });
345
+ },
346
+ async onMessage(event, ws) {
347
+ if (!trustedOrigin)
348
+ return;
349
+ let parsed;
350
+ try {
351
+ parsed = JSON.parse(event.data.toString());
352
+ }
353
+ catch {
354
+ return;
355
+ }
356
+ if (!isCdpCommand(parsed))
357
+ return;
358
+ const command = parsed;
359
+ const { id, method, params, sessionId } = command;
360
+ const client = playwrightClients.get(clientId);
361
+ if (!client || client.ws !== ws)
362
+ return;
363
+ if (!extensionWs) {
364
+ sendToPlaywright({ id, sessionId, error: { message: "extension not connected" } }, client);
365
+ return;
366
+ }
367
+ try {
368
+ const result = await routeCdpCommand(client, { method, params, sessionId });
369
+ if (method === "Target.setAutoAttach" && !sessionId) {
370
+ for (const target of registry.targets())
371
+ sendAttached(target, client);
372
+ }
373
+ if (method === "Target.setDiscoverTargets" && params?.discover === true) {
374
+ for (const target of registry.targets()) {
375
+ sendToPlaywright({
376
+ method: "Target.targetCreated",
377
+ params: { targetInfo: { ...target.targetInfo, attached: true } },
378
+ }, client);
379
+ }
380
+ }
381
+ if (method === "Target.attachToTarget") {
382
+ const targetId = params?.targetId;
383
+ if (typeof targetId === "string") {
384
+ const target = registry.getByTargetId(targetId);
385
+ if (target)
386
+ sendAttached(target, client);
387
+ }
388
+ }
389
+ sendToPlaywright({ id, sessionId, result }, client);
390
+ }
391
+ catch (error) {
392
+ sendToPlaywright({ id, sessionId, error: { message: errorMessage(error) } }, client);
393
+ }
394
+ },
395
+ onClose(_event, ws) {
396
+ if (!trustedOrigin)
397
+ return;
398
+ const client = playwrightClients.get(clientId);
399
+ if (client?.ws === ws)
400
+ playwrightClients.delete(clientId);
401
+ },
402
+ };
403
+ }));
404
+ app.get("/extension", upgradeWebSocket((c) => {
405
+ const trustedOrigin = isTrustedExtensionOrigin(c.req.header("origin"));
406
+ return {
407
+ onOpen(_event, ws) {
408
+ if (!trustedOrigin) {
409
+ ws.close(WEBSOCKET_POLICY_VIOLATION_CODE, EXTENSION_ORIGIN_POLICY_REASON);
410
+ return;
411
+ }
412
+ if (extensionWs) {
413
+ const old = extensionWs;
414
+ disconnectExtension(new PageBackendError(503, "extension connection replaced"));
415
+ old.close(4001, "Extension replaced");
416
+ }
417
+ extensionWs = ws;
418
+ log("Extension connected");
419
+ },
420
+ onMessage(event, ws) {
421
+ if (!trustedOrigin)
422
+ return;
423
+ if (extensionWs !== ws)
424
+ return;
425
+ let parsed;
426
+ try {
427
+ parsed = JSON.parse(event.data.toString());
428
+ }
429
+ catch {
430
+ ws.close(1000, "Invalid JSON");
431
+ return;
432
+ }
433
+ if (!isRecord(parsed)) {
434
+ ws.close(1003, "Invalid extension message");
435
+ return;
436
+ }
437
+ const message = parsed;
438
+ if ("id" in message) {
439
+ if (typeof message.id !== "number")
440
+ return;
441
+ const pending = extensionPending.get(message.id);
442
+ if (!pending)
443
+ return;
444
+ extensionPending.delete(message.id);
445
+ if (message.error)
446
+ pending.reject(new PageBackendError(502, message.error));
447
+ else
448
+ pending.resolve(message.result);
449
+ return;
450
+ }
451
+ if (message.method !== "forwardCDPEvent")
452
+ return;
453
+ const { method, params, sessionId } = message.params;
454
+ if (method === "Target.attachedToTarget") {
455
+ const attached = params;
456
+ const target = {
457
+ sessionId: attached.sessionId,
458
+ targetId: attached.targetInfo.targetId,
459
+ targetInfo: attached.targetInfo,
460
+ };
461
+ registry.attach(target);
462
+ sendAttached(target);
463
+ return;
464
+ }
465
+ if (method === "Target.detachedFromTarget") {
466
+ const detached = params;
467
+ const target = registry.detach(detached.sessionId);
468
+ sendDetached(detached.sessionId, detached, target);
469
+ return;
470
+ }
471
+ if (method === "Target.targetInfoChanged") {
472
+ const changed = params;
473
+ registry.updateTargetInfo(changed.targetInfo);
474
+ sendToPlaywright({ method, params: changed });
475
+ return;
476
+ }
477
+ sendSessionEvent(method, params, sessionId);
478
+ },
479
+ onClose(_event, ws) {
480
+ if (!trustedOrigin)
481
+ return;
482
+ if (extensionWs !== ws)
483
+ return;
484
+ log("Extension disconnected");
485
+ disconnectExtension(new PageBackendError(503, "extension connection closed"));
486
+ },
487
+ };
488
+ }));
489
+ const server = serve({ fetch: app.fetch, port: requestedPort, hostname: host });
490
+ injectWebSocket(server);
491
+ await waitForListening(server);
492
+ log(`HTTP: ${formatHttpUrl(host, requestedPort)}`);
493
+ let stopped = false;
494
+ return {
495
+ wsEndpoint,
496
+ port: requestedPort,
497
+ async stop() {
498
+ if (stopped)
499
+ return;
500
+ stopped = true;
501
+ const ws = extensionWs;
502
+ disconnectExtension(new PageBackendError(503, "relay server stopped"));
503
+ ws?.close(1000, "Server stopped");
504
+ await new Promise((resolve, reject) => {
505
+ server.close((error) => (error ? reject(error) : resolve()));
506
+ });
507
+ },
508
+ };
509
+ }
510
+ function waitForListening(server) {
511
+ if (server.listening)
512
+ return Promise.resolve();
513
+ return new Promise((resolve, reject) => {
514
+ server.once("listening", resolve);
515
+ server.once("error", reject);
516
+ });
517
+ }
518
+ function errorMessage(error) {
519
+ return error instanceof Error ? error.message : String(error);
520
+ }
521
+ //# sourceMappingURL=relay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.js","sourceRoot":"","sources":["../../src/relay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export interface RuntimeCommand {
2
+ command: string;
3
+ args: string[];
4
+ }
5
+ export interface TcpPortProbe {
6
+ once(event: "error" | "listening", listener: () => void): this;
7
+ listen(port: number, host: string): unknown;
8
+ close(callback: () => void): unknown;
9
+ }
10
+ export type TcpPortProbeFactory = () => TcpPortProbe;
11
+ export type PlaywrightChromiumExecutableName = "chromium" | "chromium-headless-shell";
12
+ export interface ChromiumInstallCheckOptions {
13
+ headless: boolean;
14
+ findExecutable: (name: PlaywrightChromiumExecutableName) => {
15
+ executablePath: () => string | undefined;
16
+ } | undefined;
17
+ exists: (path: string) => boolean;
18
+ }
19
+ export interface RuntimePackageLock {
20
+ packages?: Record<string, {
21
+ dependencies?: Record<string, string>;
22
+ version?: string;
23
+ }>;
24
+ }
25
+ export interface InvalidRuntimeDependenciesOptions {
26
+ skillDir: string;
27
+ lockedDependencies: Record<string, string>;
28
+ readPackageVersion: (packageJsonPath: string) => string | undefined;
29
+ }
30
+ export declare function getRuntimeDependencyInstallCommand(): RuntimeCommand;
31
+ export declare function getPlaywrightInstallCommand({ skillDir, nodeExecutable, }: {
32
+ skillDir: string;
33
+ nodeExecutable?: string;
34
+ }): RuntimeCommand;
35
+ export declare function isTcpPortInUse(port: number, host?: string, createProbe?: TcpPortProbeFactory): Promise<boolean>;
36
+ export declare function isPlaywrightChromiumInstalled({ headless, findExecutable, exists, }: ChromiumInstallCheckOptions): boolean;
37
+ export declare function getLockedRuntimeDependencies(lockfile: RuntimePackageLock): Record<string, string>;
38
+ export declare function getInvalidRuntimeDependencies({ skillDir, lockedDependencies, readPackageVersion, }: InvalidRuntimeDependenciesOptions): string[];
39
+ export declare function resolveRuntimePaths(skillDir: string): {
40
+ skillDir: string;
41
+ };
42
+ export declare function resolveImportMetaDir(moduleUrl: string): string;
43
+ export declare function resolveSkillDirFromEntrypoint(moduleUrl: string): string;
44
+ export declare function shouldUseShellForPackageCommands(platform: NodeJS.Platform): boolean;
45
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC/D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5C,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;CACtC;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,YAAY,CAAC;AAErD,MAAM,MAAM,gCAAgC,GAAG,UAAU,GAAG,yBAAyB,CAAC;AAEtF,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,CAAC,IAAI,EAAE,gCAAgC,KACnD;QAAE,cAAc,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;KAAE,GAC5C,SAAS,CAAC;IACd,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CACf,MAAM,EACN;QACE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CACF,CAAC;CACH;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,kBAAkB,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CACrE;AAED,wBAAgB,kCAAkC,IAAI,cAAc,CAEnE;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,QAAQ,EACR,cAAiC,GAClC,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,cAAc,CAKjB;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,SAAc,EAClB,WAAW,GAAE,mBAAkC,GAC9C,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,wBAAgB,6BAA6B,CAAC,EAC5C,QAAQ,EACR,cAAc,EACd,MAAM,GACP,EAAE,2BAA2B,GAAG,OAAO,CAIvC;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,kBAAkB,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAED,wBAAgB,6BAA6B,CAAC,EAC5C,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,GACnB,EAAE,iCAAiC,GAAG,MAAM,EAAE,CAO9C;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM;;EAEnD;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGvE;AAED,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAEnF"}
@@ -0,0 +1,54 @@
1
+ import { createServer } from "node:net";
2
+ import { basename, dirname, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ export function getRuntimeDependencyInstallCommand() {
5
+ return { command: "npm", args: ["ci", "--omit=dev"] };
6
+ }
7
+ export function getPlaywrightInstallCommand({ skillDir, nodeExecutable = process.execPath, }) {
8
+ return {
9
+ command: nodeExecutable,
10
+ args: [join(skillDir, "node_modules", "playwright", "cli.js"), "install", "chromium"],
11
+ };
12
+ }
13
+ export async function isTcpPortInUse(port, host = "127.0.0.1", createProbe = createServer) {
14
+ return await new Promise((resolve) => {
15
+ const server = createProbe();
16
+ server.once("error", () => resolve(true));
17
+ server.once("listening", () => server.close(() => resolve(false)));
18
+ server.listen(port, host);
19
+ });
20
+ }
21
+ export function isPlaywrightChromiumInstalled({ headless, findExecutable, exists, }) {
22
+ const name = headless ? "chromium-headless-shell" : "chromium";
23
+ const executablePath = findExecutable(name)?.executablePath();
24
+ return typeof executablePath === "string" && executablePath.length > 0 && exists(executablePath);
25
+ }
26
+ export function getLockedRuntimeDependencies(lockfile) {
27
+ const packages = lockfile.packages ?? {};
28
+ return Object.fromEntries(Object.keys(packages[""]?.dependencies ?? {}).map((name) => {
29
+ const version = packages[`node_modules/${name}`]?.version;
30
+ if (!version)
31
+ throw new Error(`Missing locked version for runtime dependency ${name}`);
32
+ return [name, version];
33
+ }));
34
+ }
35
+ export function getInvalidRuntimeDependencies({ skillDir, lockedDependencies, readPackageVersion, }) {
36
+ return Object.entries(lockedDependencies).flatMap(([name, version]) => readPackageVersion(join(skillDir, "node_modules", ...name.split("/"), "package.json")) ===
37
+ version
38
+ ? []
39
+ : [name]);
40
+ }
41
+ export function resolveRuntimePaths(skillDir) {
42
+ return { skillDir };
43
+ }
44
+ export function resolveImportMetaDir(moduleUrl) {
45
+ return dirname(fileURLToPath(moduleUrl));
46
+ }
47
+ export function resolveSkillDirFromEntrypoint(moduleUrl) {
48
+ const parentDir = dirname(resolveImportMetaDir(moduleUrl));
49
+ return basename(parentDir) === "dist" ? dirname(parentDir) : parentDir;
50
+ }
51
+ export function shouldUseShellForPackageCommands(platform) {
52
+ return platform === "win32";
53
+ }
54
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"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"}