sweetlink 0.1.0 → 0.2.1
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/CHANGELOG.md +20 -0
- package/LICENSE +1 -1
- package/README.md +22 -11
- package/dist/daemon/src/codename.d.ts.map +1 -1
- package/dist/daemon/src/codename.js +11 -11
- package/dist/daemon/src/codename.js.map +1 -1
- package/dist/daemon/src/index.d.ts +1 -1
- package/dist/daemon/src/index.js +131 -122
- package/dist/daemon/src/index.js.map +1 -1
- package/dist/shared/src/env.d.ts.map +1 -1
- package/dist/shared/src/env.js +12 -12
- package/dist/shared/src/env.js.map +1 -1
- package/dist/shared/src/index.d.ts +30 -30
- package/dist/shared/src/index.d.ts.map +1 -1
- package/dist/shared/src/index.js +17 -17
- package/dist/shared/src/index.js.map +1 -1
- package/dist/shared/src/node.d.ts +1 -1
- package/dist/shared/src/node.d.ts.map +1 -1
- package/dist/shared/src/node.js +18 -18
- package/dist/shared/src/node.js.map +1 -1
- package/dist/src/codex.d.ts +1 -1
- package/dist/src/codex.js +19 -19
- package/dist/src/codex.js.map +1 -1
- package/dist/src/commands/click.d.ts +1 -1
- package/dist/src/commands/click.d.ts.map +1 -1
- package/dist/src/commands/click.js +32 -24
- package/dist/src/commands/click.js.map +1 -1
- package/dist/src/commands/run-js.d.ts +1 -1
- package/dist/src/commands/run-js.d.ts.map +1 -1
- package/dist/src/commands/run-js.js +10 -10
- package/dist/src/commands/run-js.js.map +1 -1
- package/dist/src/commands/trust-ca.d.ts +1 -1
- package/dist/src/commands/trust-ca.js +15 -15
- package/dist/src/core/config-file.d.ts +6 -0
- package/dist/src/core/config-file.d.ts.map +1 -1
- package/dist/src/core/config-file.js +73 -38
- package/dist/src/core/config-file.js.map +1 -1
- package/dist/src/core/config.d.ts +3 -2
- package/dist/src/core/config.d.ts.map +1 -1
- package/dist/src/core/config.js +31 -18
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/dev-bootstrap.d.ts +10 -0
- package/dist/src/core/dev-bootstrap.d.ts.map +1 -0
- package/dist/src/core/dev-bootstrap.js +112 -0
- package/dist/src/core/dev-bootstrap.js.map +1 -0
- package/dist/src/core/env.d.ts +1 -1
- package/dist/src/core/env.d.ts.map +1 -1
- package/dist/src/core/env.js +3 -3
- package/dist/src/core/env.js.map +1 -1
- package/dist/src/devtools-registry.d.ts.map +1 -1
- package/dist/src/devtools-registry.js +48 -46
- package/dist/src/devtools-registry.js.map +1 -1
- package/dist/src/env.d.ts +1 -1
- package/dist/src/env.js +1 -1
- package/dist/src/http.d.ts.map +1 -1
- package/dist/src/http.js +7 -6
- package/dist/src/http.js.map +1 -1
- package/dist/src/index.d.ts +7 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +450 -363
- package/dist/src/index.js.map +1 -1
- package/dist/src/runtime/browser/client.d.ts +3 -3
- package/dist/src/runtime/browser/client.d.ts.map +1 -1
- package/dist/src/runtime/browser/client.js +79 -72
- package/dist/src/runtime/browser/client.js.map +1 -1
- package/dist/src/runtime/browser/commands/index.d.ts +2 -2
- package/dist/src/runtime/browser/commands/index.js +17 -17
- package/dist/src/runtime/browser/commands/index.js.map +1 -1
- package/dist/src/runtime/browser/dom-to-image-loader.d.ts.map +1 -1
- package/dist/src/runtime/browser/dom-to-image-loader.js +7 -7
- package/dist/src/runtime/browser/dom-to-image-loader.js.map +1 -1
- package/dist/src/runtime/browser/index.d.ts +3 -3
- package/dist/src/runtime/browser/index.js +2 -2
- package/dist/src/runtime/browser/module-loader.js +2 -2
- package/dist/src/runtime/browser/screenshot/hooks.d.ts +25 -53
- package/dist/src/runtime/browser/screenshot/hooks.d.ts.map +1 -1
- package/dist/src/runtime/browser/screenshot/hooks.js +32 -29
- package/dist/src/runtime/browser/screenshot/hooks.js.map +1 -1
- package/dist/src/runtime/browser/screenshot/index.d.ts +3 -3
- package/dist/src/runtime/browser/screenshot/index.d.ts.map +1 -1
- package/dist/src/runtime/browser/screenshot/index.js +17 -15
- package/dist/src/runtime/browser/screenshot/index.js.map +1 -1
- package/dist/src/runtime/browser/screenshot/renderers/dom-to-image.d.ts +1 -1
- package/dist/src/runtime/browser/screenshot/renderers/dom-to-image.js +13 -13
- package/dist/src/runtime/browser/screenshot/renderers/dom-to-image.js.map +1 -1
- package/dist/src/runtime/browser/screenshot/renderers/html2canvas.d.ts +1 -1
- package/dist/src/runtime/browser/screenshot/renderers/html2canvas.d.ts.map +1 -1
- package/dist/src/runtime/browser/screenshot/renderers/html2canvas.js +24 -24
- package/dist/src/runtime/browser/screenshot/renderers/html2canvas.js.map +1 -1
- package/dist/src/runtime/browser/screenshot/targets.d.ts +2 -2
- package/dist/src/runtime/browser/screenshot/targets.js +9 -9
- package/dist/src/runtime/browser/screenshot/utils.d.ts +1 -1
- package/dist/src/runtime/browser/screenshot/utils.d.ts.map +1 -1
- package/dist/src/runtime/browser/screenshot/utils.js +73 -71
- package/dist/src/runtime/browser/screenshot/utils.js.map +1 -1
- package/dist/src/runtime/browser/selector-discovery.d.ts +1 -1
- package/dist/src/runtime/browser/selector-discovery.d.ts.map +1 -1
- package/dist/src/runtime/browser/selector-discovery.js +24 -22
- package/dist/src/runtime/browser/selector-discovery.js.map +1 -1
- package/dist/src/runtime/browser/storage/session-storage.d.ts +1 -1
- package/dist/src/runtime/browser/storage/session-storage.d.ts.map +1 -1
- package/dist/src/runtime/browser/storage/session-storage.js +12 -10
- package/dist/src/runtime/browser/storage/session-storage.js.map +1 -1
- package/dist/src/runtime/browser/types.d.ts +7 -7
- package/dist/src/runtime/browser/types.js +1 -1
- package/dist/src/runtime/browser/utils/console.d.ts +1 -1
- package/dist/src/runtime/browser/utils/console.js +16 -16
- package/dist/src/runtime/browser/utils/console.js.map +1 -1
- package/dist/src/runtime/browser/utils/environment.js +2 -2
- package/dist/src/runtime/browser/utils/errors.d.ts.map +1 -1
- package/dist/src/runtime/browser/utils/errors.js +11 -11
- package/dist/src/runtime/browser/utils/number.d.ts.map +1 -1
- package/dist/src/runtime/browser/utils/number.js.map +1 -1
- package/dist/src/runtime/browser/utils/object.d.ts.map +1 -1
- package/dist/src/runtime/browser/utils/object.js +2 -2
- package/dist/src/runtime/browser/utils/object.js.map +1 -1
- package/dist/src/runtime/browser/utils/sanitize.js +2 -2
- package/dist/src/runtime/browser/utils/time.d.ts.map +1 -1
- package/dist/src/runtime/browser/utils/time.js +1 -1
- package/dist/src/runtime/chrome/cookies.d.ts +4 -4
- package/dist/src/runtime/chrome/cookies.d.ts.map +1 -1
- package/dist/src/runtime/chrome/cookies.js +31 -31
- package/dist/src/runtime/chrome/cookies.js.map +1 -1
- package/dist/src/runtime/chrome/deep-link.d.ts +13 -0
- package/dist/src/runtime/chrome/deep-link.d.ts.map +1 -0
- package/dist/src/runtime/chrome/deep-link.js +292 -0
- package/dist/src/runtime/chrome/deep-link.js.map +1 -0
- package/dist/src/runtime/chrome/diagnostics.d.ts.map +1 -1
- package/dist/src/runtime/chrome/diagnostics.js +13 -11
- package/dist/src/runtime/chrome/diagnostics.js.map +1 -1
- package/dist/src/runtime/chrome/focus.d.ts.map +1 -1
- package/dist/src/runtime/chrome/focus.js +5 -5
- package/dist/src/runtime/chrome/focus.js.map +1 -1
- package/dist/src/runtime/chrome/launch.d.ts.map +1 -1
- package/dist/src/runtime/chrome/launch.js +30 -30
- package/dist/src/runtime/chrome/launch.js.map +1 -1
- package/dist/src/runtime/chrome/puppeteer.d.ts +2 -2
- package/dist/src/runtime/chrome/puppeteer.d.ts.map +1 -1
- package/dist/src/runtime/chrome/puppeteer.js +16 -11
- package/dist/src/runtime/chrome/puppeteer.js.map +1 -1
- package/dist/src/runtime/chrome/reuse.d.ts.map +1 -1
- package/dist/src/runtime/chrome/reuse.js +38 -35
- package/dist/src/runtime/chrome/reuse.js.map +1 -1
- package/dist/src/runtime/chrome/session.d.ts +1 -1
- package/dist/src/runtime/chrome/session.d.ts.map +1 -1
- package/dist/src/runtime/chrome/session.js +12 -10
- package/dist/src/runtime/chrome/session.js.map +1 -1
- package/dist/src/runtime/chrome.d.ts +8 -8
- package/dist/src/runtime/chrome.js +8 -8
- package/dist/src/runtime/cookies.d.ts +1 -16
- package/dist/src/runtime/cookies.d.ts.map +1 -1
- package/dist/src/runtime/cookies.js +177 -281
- package/dist/src/runtime/cookies.js.map +1 -1
- package/dist/src/runtime/devstack.d.ts +1 -1
- package/dist/src/runtime/devstack.d.ts.map +1 -1
- package/dist/src/runtime/devstack.js +31 -28
- package/dist/src/runtime/devstack.js.map +1 -1
- package/dist/src/runtime/devtools/background.js +22 -22
- package/dist/src/runtime/devtools/cdp.d.ts +3 -2
- package/dist/src/runtime/devtools/cdp.d.ts.map +1 -1
- package/dist/src/runtime/devtools/cdp.js +61 -56
- package/dist/src/runtime/devtools/cdp.js.map +1 -1
- package/dist/src/runtime/devtools/config.d.ts +44 -1
- package/dist/src/runtime/devtools/config.d.ts.map +1 -1
- package/dist/src/runtime/devtools/config.js +15 -15
- package/dist/src/runtime/devtools/config.js.map +1 -1
- package/dist/src/runtime/devtools/constants.d.ts.map +1 -1
- package/dist/src/runtime/devtools/constants.js +18 -10
- package/dist/src/runtime/devtools/constants.js.map +1 -1
- package/dist/src/runtime/devtools/diagnostics.d.ts +6 -3
- package/dist/src/runtime/devtools/diagnostics.d.ts.map +1 -1
- package/dist/src/runtime/devtools/diagnostics.js +40 -38
- package/dist/src/runtime/devtools/diagnostics.js.map +1 -1
- package/dist/src/runtime/devtools/oauth.d.ts +1 -1
- package/dist/src/runtime/devtools/oauth.d.ts.map +1 -1
- package/dist/src/runtime/devtools/oauth.js +35 -28
- package/dist/src/runtime/devtools/oauth.js.map +1 -1
- package/dist/src/runtime/devtools/types.d.ts +3 -48
- package/dist/src/runtime/devtools/types.d.ts.map +1 -1
- package/dist/src/runtime/devtools.d.ts +7 -7
- package/dist/src/runtime/devtools.js +7 -7
- package/dist/src/runtime/next-devtools.d.ts.map +1 -1
- package/dist/src/runtime/next-devtools.js +12 -12
- package/dist/src/runtime/next-devtools.js.map +1 -1
- package/dist/src/runtime/screenshot.d.ts +9 -9
- package/dist/src/runtime/screenshot.d.ts.map +1 -1
- package/dist/src/runtime/screenshot.js +65 -46
- package/dist/src/runtime/screenshot.js.map +1 -1
- package/dist/src/runtime/scripts.d.ts +1 -1
- package/dist/src/runtime/scripts.d.ts.map +1 -1
- package/dist/src/runtime/scripts.js +28 -28
- package/dist/src/runtime/scripts.js.map +1 -1
- package/dist/src/runtime/session.d.ts +6 -6
- package/dist/src/runtime/session.d.ts.map +1 -1
- package/dist/src/runtime/session.js +35 -35
- package/dist/src/runtime/session.js.map +1 -1
- package/dist/src/runtime/smoke.d.ts +3 -3
- package/dist/src/runtime/smoke.d.ts.map +1 -1
- package/dist/src/runtime/smoke.js +85 -79
- package/dist/src/runtime/smoke.js.map +1 -1
- package/dist/src/runtime/url.d.ts +2 -2
- package/dist/src/runtime/url.d.ts.map +1 -1
- package/dist/src/runtime/url.js +20 -20
- package/dist/src/runtime/url.js.map +1 -1
- package/dist/src/screenshot-hooks.d.ts +1 -1
- package/dist/src/screenshot-hooks.d.ts.map +1 -1
- package/dist/src/screenshot-hooks.js +12 -12
- package/dist/src/screenshot-hooks.js.map +1 -1
- package/dist/src/shared/env.d.ts.map +1 -1
- package/dist/src/shared/env.js +11 -11
- package/dist/src/shared/env.js.map +1 -1
- package/dist/src/shared/index.d.ts +30 -30
- package/dist/src/shared/index.d.ts.map +1 -1
- package/dist/src/shared/index.js +17 -17
- package/dist/src/shared/index.js.map +1 -1
- package/dist/src/shared/node.d.ts +1 -1
- package/dist/src/shared/node.d.ts.map +1 -1
- package/dist/src/shared/node.js +18 -18
- package/dist/src/shared/node.js.map +1 -1
- package/dist/src/token.d.ts +1 -1
- package/dist/src/token.d.ts.map +1 -1
- package/dist/src/token.js +21 -18
- package/dist/src/token.js.map +1 -1
- package/dist/src/types.d.ts +7 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/util/app-label.js +4 -4
- package/dist/src/util/errors.d.ts.map +1 -1
- package/dist/src/util/errors.js +12 -10
- package/dist/src/util/errors.js.map +1 -1
- package/dist/src/util/path.js +2 -2
- package/dist/src/util/regex.js +4 -4
- package/package.json +48 -40
package/dist/src/codex.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { spawn } from
|
|
2
|
-
import { describeAppForPrompt } from
|
|
3
|
-
import { extractEventMessage, isErrnoException } from
|
|
4
|
-
const CODEX_ARGS = [
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { describeAppForPrompt } from "./util/app-label.js";
|
|
3
|
+
import { extractEventMessage, isErrnoException } from "./util/errors.js";
|
|
4
|
+
const CODEX_ARGS = ["exec", "--yolo", "--skip-git-repo-check"];
|
|
5
5
|
/** Invokes the Codex CLI with optional stdin. */
|
|
6
6
|
async function runCodexExec(args, options = {}) {
|
|
7
7
|
const stdio = options.stdin
|
|
8
|
-
? [
|
|
9
|
-
: [
|
|
10
|
-
const child = spawn(
|
|
8
|
+
? ["pipe", "inherit", "inherit"]
|
|
9
|
+
: ["inherit", "inherit", "inherit"];
|
|
10
|
+
const child = spawn("codex", [...CODEX_ARGS, ...args], { stdio });
|
|
11
11
|
return await new Promise((resolve, reject) => {
|
|
12
|
-
child.once(
|
|
13
|
-
child.once(
|
|
12
|
+
child.once("error", (error) => reject(error));
|
|
13
|
+
child.once("close", (code) => resolve(code ?? 0));
|
|
14
14
|
if (options.stdin) {
|
|
15
|
-
const payload = options.stdin.endsWith(
|
|
15
|
+
const payload = options.stdin.endsWith("\n") ? options.stdin : `${options.stdin}\n`;
|
|
16
16
|
child.stdin?.write(payload);
|
|
17
17
|
child.stdin?.end();
|
|
18
18
|
}
|
|
@@ -20,8 +20,8 @@ async function runCodexExec(args, options = {}) {
|
|
|
20
20
|
}
|
|
21
21
|
/** Asks Codex about a screenshot file. */
|
|
22
22
|
export function runCodexImagePrompt(imagePath, prompt) {
|
|
23
|
-
const payload = prompt.endsWith(
|
|
24
|
-
return runCodexExec([
|
|
23
|
+
const payload = prompt.endsWith("\n") ? prompt : `${prompt}\n`;
|
|
24
|
+
return runCodexExec(["-i", imagePath, "-"], { stdin: payload });
|
|
25
25
|
}
|
|
26
26
|
/** Asks Codex about a text payload. */
|
|
27
27
|
export function runCodexTextPrompt(prompt) {
|
|
@@ -36,15 +36,15 @@ export async function analyzeConsoleWithCodex(selector, prompt, events, options
|
|
|
36
36
|
const lines = events.length > 0
|
|
37
37
|
? events.map((event) => {
|
|
38
38
|
const timestamp = new Date(event.timestamp ?? Date.now()).toLocaleTimeString();
|
|
39
|
-
const args = Array.isArray(event.args) ? event.args.map(String).join(
|
|
40
|
-
const suffix = args.length > 0 ? `: ${args}` :
|
|
39
|
+
const args = Array.isArray(event.args) ? event.args.map(String).join(" ") : "";
|
|
40
|
+
const suffix = args.length > 0 ? `: ${args}` : "";
|
|
41
41
|
return `[${timestamp}] ${event.level}${suffix}`;
|
|
42
42
|
})
|
|
43
|
-
: [
|
|
43
|
+
: ["(no console events were captured after the click)"];
|
|
44
44
|
const appDescription = describeAppForPrompt(options.appLabel);
|
|
45
45
|
const combinedPrompt = `You are analyzing console output from ${appDescription} immediately after triggering a click on selector "${selector}". ` +
|
|
46
|
-
|
|
47
|
-
`Console output:\n${lines.join(
|
|
46
|
+
"Review the log lines below (most recent last) and answer the agent’s question.\n\n" +
|
|
47
|
+
`Console output:\n${lines.join("\n")}\n\nQuestion: ${question}`;
|
|
48
48
|
if (!options.silent) {
|
|
49
49
|
console.log(`Asking Codex about console output after ${selector}: ${question}`);
|
|
50
50
|
}
|
|
@@ -58,8 +58,8 @@ export async function analyzeConsoleWithCodex(selector, prompt, events, options
|
|
|
58
58
|
}
|
|
59
59
|
catch (error) {
|
|
60
60
|
const message = extractEventMessage(error);
|
|
61
|
-
const missing = isErrnoException(error) && error.code ===
|
|
62
|
-
const prefix = missing ?
|
|
61
|
+
const missing = isErrnoException(error) && error.code === "ENOENT";
|
|
62
|
+
const prefix = missing ? "Codex CLI not found" : `Codex CLI failed: ${message}`;
|
|
63
63
|
console.warn(missing ? `${prefix}; install it or add it to $PATH to use --prompt.` : prefix);
|
|
64
64
|
return false;
|
|
65
65
|
}
|
package/dist/src/codex.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzE,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAC;AAE/D,iDAAiD;AACjD,KAAK,UAAU,YAAY,CAAC,IAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"click.d.ts","sourceRoot":"","sources":["../../../src/commands/click.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"click.d.ts","sourceRoot":"","sources":["../../../src/commands/click.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwD3D"}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { analyzeConsoleWithCodex } from
|
|
2
|
-
import { resolveConfig } from
|
|
3
|
-
import { readCommandOptions } from
|
|
4
|
-
import { sweetLinkDebug } from
|
|
5
|
-
import { renderCommandResult } from
|
|
6
|
-
import { buildClickScript, executeRunScriptCommand, fetchConsoleEvents, resolvePromptOption, resolveSessionIdFromHint, } from
|
|
7
|
-
import { extractEventMessage } from
|
|
8
|
-
import { delay } from
|
|
1
|
+
import { analyzeConsoleWithCodex } from "../codex.js";
|
|
2
|
+
import { resolveConfig } from "../core/config.js";
|
|
3
|
+
import { readCommandOptions } from "../core/env.js";
|
|
4
|
+
import { sweetLinkDebug } from "../env.js";
|
|
5
|
+
import { renderCommandResult } from "../runtime/scripts.js";
|
|
6
|
+
import { buildClickScript, executeRunScriptCommand, fetchConsoleEvents, resolvePromptOption, resolveSessionIdFromHint, } from "../runtime/session.js";
|
|
7
|
+
import { extractEventMessage } from "../util/errors.js";
|
|
8
|
+
import { delay } from "../util/time.js";
|
|
9
9
|
const POST_CLICK_CONSOLE_LIMIT = 20;
|
|
10
10
|
export function registerClickCommand(program) {
|
|
11
11
|
program
|
|
12
|
-
.command(
|
|
13
|
-
.description(
|
|
14
|
-
.requiredOption(
|
|
15
|
-
.option(
|
|
16
|
-
.option(
|
|
17
|
-
.option(
|
|
18
|
-
.option(
|
|
19
|
-
.addOption(program.createOption(
|
|
12
|
+
.command("click <sessionId>")
|
|
13
|
+
.description("Dispatch a click event on a selector inside a SweetLink session")
|
|
14
|
+
.requiredOption("-s, --selector <selector>", "CSS selector to click")
|
|
15
|
+
.option("--no-scroll", "Skip scrolling the element into view before clicking")
|
|
16
|
+
.option("--no-bubbles", "Dispatch the click event without bubbling")
|
|
17
|
+
.option("-t, --timeout <ms>", "Command timeout in milliseconds (default 15_000)", Number, 15_000)
|
|
18
|
+
.option("--prompt <prompt>", "Send console output after the click to Codex for analysis")
|
|
19
|
+
.addOption(program.createOption("--question <prompt>").hideHelp())
|
|
20
20
|
.action(async function (sessionId) {
|
|
21
21
|
const options = readCommandOptions(this);
|
|
22
22
|
const selector = options.selector?.trim();
|
|
23
23
|
if (!selector) {
|
|
24
|
-
throw new Error(
|
|
24
|
+
throw new Error("A --selector value is required for sweetlink click");
|
|
25
25
|
}
|
|
26
26
|
const prompt = resolvePromptOption(options);
|
|
27
27
|
const config = resolveConfig(this);
|
|
@@ -32,7 +32,9 @@ export function registerClickCommand(program) {
|
|
|
32
32
|
scrollIntoView: options.scroll !== false,
|
|
33
33
|
bubbles: options.bubbles !== false,
|
|
34
34
|
});
|
|
35
|
-
const timeoutMs = typeof options.timeout ===
|
|
35
|
+
const timeoutMs = typeof options.timeout === "number" && Number.isFinite(options.timeout)
|
|
36
|
+
? options.timeout
|
|
37
|
+
: 15_000;
|
|
36
38
|
const result = await executeRunScriptCommand(config, {
|
|
37
39
|
sessionId: resolvedSessionId,
|
|
38
40
|
code: script,
|
|
@@ -40,7 +42,13 @@ export function registerClickCommand(program) {
|
|
|
40
42
|
});
|
|
41
43
|
renderCommandResult(result);
|
|
42
44
|
await delay(250);
|
|
43
|
-
await reportConsoleAfterClick({
|
|
45
|
+
await reportConsoleAfterClick({
|
|
46
|
+
config,
|
|
47
|
+
sessionId: resolvedSessionId,
|
|
48
|
+
baselineIds,
|
|
49
|
+
prompt,
|
|
50
|
+
selector,
|
|
51
|
+
});
|
|
44
52
|
});
|
|
45
53
|
}
|
|
46
54
|
async function fetchBaselineConsoleIds(config, sessionId) {
|
|
@@ -50,7 +58,7 @@ async function fetchBaselineConsoleIds(config, sessionId) {
|
|
|
50
58
|
}
|
|
51
59
|
catch (error) {
|
|
52
60
|
if (sweetLinkDebug) {
|
|
53
|
-
console.warn(
|
|
61
|
+
console.warn("Failed to fetch baseline console events before click.", error);
|
|
54
62
|
}
|
|
55
63
|
return null;
|
|
56
64
|
}
|
|
@@ -72,22 +80,22 @@ async function reportConsoleAfterClick(params) {
|
|
|
72
80
|
}
|
|
73
81
|
}
|
|
74
82
|
if (recent.length > 0) {
|
|
75
|
-
console.log(`Console after click (${recent.length} event${recent.length === 1 ?
|
|
83
|
+
console.log(`Console after click (${recent.length} event${recent.length === 1 ? "" : "s"}):`);
|
|
76
84
|
for (const event of recent) {
|
|
77
85
|
const timestamp = new Date(event.timestamp ?? Date.now()).toLocaleTimeString();
|
|
78
86
|
console.log(` [${timestamp}] ${event.level}:`, ...event.args);
|
|
79
87
|
}
|
|
80
88
|
const dropped = newEvents.length - recent.length;
|
|
81
89
|
if (dropped > 0) {
|
|
82
|
-
console.log(` … ${dropped} more event${dropped === 1 ?
|
|
90
|
+
console.log(` … ${dropped} more event${dropped === 1 ? "" : "s"} omitted`);
|
|
83
91
|
}
|
|
84
92
|
}
|
|
85
93
|
else if (params.prompt) {
|
|
86
|
-
console.log(
|
|
94
|
+
console.log("Console after click: no new events captured.");
|
|
87
95
|
}
|
|
88
96
|
}
|
|
89
97
|
catch (error) {
|
|
90
|
-
console.warn(
|
|
98
|
+
console.warn("Unable to fetch console events after click:", extractEventMessage(error));
|
|
91
99
|
}
|
|
92
100
|
}
|
|
93
101
|
//# sourceMappingURL=click.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"click.js","sourceRoot":"","sources":["../../../src/commands/click.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAWpC,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,iEAAiE,CAAC;SAC9E,cAAc,CAAC,2BAA2B,EAAE,uBAAuB,CAAC;SACpE,MAAM,CAAC,aAAa,EAAE,sDAAsD,
|
|
1
|
+
{"version":3,"file":"click.js","sourceRoot":"","sources":["../../../src/commands/click.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-js.d.ts","sourceRoot":"","sources":["../../../src/commands/run-js.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,gDAAgD;AAChD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"run-js.d.ts","sourceRoot":"","sources":["../../../src/commands/run-js.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,gDAAgD;AAChD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4B3D"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { resolveConfig } from
|
|
2
|
-
import { readCommandOptions } from
|
|
3
|
-
import { renderCommandResult, resolveScript } from
|
|
4
|
-
import { executeRunScriptCommand, resolveSessionIdFromHint } from
|
|
1
|
+
import { resolveConfig } from "../core/config.js";
|
|
2
|
+
import { readCommandOptions } from "../core/env.js";
|
|
3
|
+
import { renderCommandResult, resolveScript } from "../runtime/scripts.js";
|
|
4
|
+
import { executeRunScriptCommand, resolveSessionIdFromHint } from "../runtime/session.js";
|
|
5
5
|
/** Registers the `sweetlink run-js` command. */
|
|
6
6
|
export function registerRunJsCommand(program) {
|
|
7
7
|
program
|
|
8
|
-
.command(
|
|
9
|
-
.description(
|
|
10
|
-
.option(
|
|
11
|
-
.option(
|
|
12
|
-
.option(
|
|
13
|
-
.option(
|
|
8
|
+
.command("run-js <sessionId> [inline...]")
|
|
9
|
+
.description("Execute JavaScript inside a SweetLink session")
|
|
10
|
+
.option("-c, --code <code...>", "Inline JavaScript to execute")
|
|
11
|
+
.option("-f, --file <path>", "Path to a file containing JavaScript")
|
|
12
|
+
.option("--capture-console", "Return console output from the page context", false)
|
|
13
|
+
.option("-t, --timeout <ms>", "Command timeout in milliseconds (default 15_000)", Number, 15_000)
|
|
14
14
|
.action(async function (sessionId, inline) {
|
|
15
15
|
const options = readCommandOptions(this);
|
|
16
16
|
const code = await resolveScript(options, inline);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-js.js","sourceRoot":"","sources":["../../../src/commands/run-js.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAqB,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAE1F,gDAAgD;AAChD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,gCAAgC,CAAC;SACzC,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,CAAC;SAC9D,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,mBAAmB,EAAE,6CAA6C,EAAE,KAAK,CAAC;SACjF,MAAM,
|
|
1
|
+
{"version":3,"file":"run-js.js","sourceRoot":"","sources":["../../../src/commands/run-js.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAqB,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAE1F,gDAAgD;AAChD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,gCAAgC,CAAC;SACzC,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,CAAC;SAC9D,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,mBAAmB,EAAE,6CAA6C,EAAE,KAAK,CAAC;SACjF,MAAM,CACL,oBAAoB,EACpB,kDAAkD,EAClD,MAAM,EACN,MAAM,CACP;SACA,MAAM,CAAC,KAAK,WAA0B,SAAiB,EAAE,MAA4B;QACpF,MAAM,OAAO,GAAG,kBAAkB,CAAe,IAAI,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,iBAAiB,GAAG,MAAM,wBAAwB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE;YACnD,SAAS,EAAE,iBAAiB;YAC5B,IAAI;YACJ,SAAS,EAAE,OAAO,CAAC,OAAO;YAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC,CAAC;QAEH,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { spawn } from
|
|
2
|
-
import { access } from
|
|
3
|
-
import path from
|
|
4
|
-
const DEFAULT_MKCERT_PATH =
|
|
5
|
-
const MKCERT_INSTALL_ARGS = [
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { access } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
const DEFAULT_MKCERT_PATH = "mkcert";
|
|
5
|
+
const MKCERT_INSTALL_ARGS = ["-install"];
|
|
6
6
|
async function resolveMkcertBinary(candidate) {
|
|
7
7
|
const bin = candidate?.trim() ?? DEFAULT_MKCERT_PATH;
|
|
8
8
|
if (path.isAbsolute(bin)) {
|
|
@@ -13,31 +13,31 @@ async function resolveMkcertBinary(candidate) {
|
|
|
13
13
|
}
|
|
14
14
|
export function registerTrustCaCommand(program) {
|
|
15
15
|
program
|
|
16
|
-
.command(
|
|
16
|
+
.command("trust-ca")
|
|
17
17
|
.description([
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
].join(
|
|
21
|
-
.option(
|
|
18
|
+
"Install or refresh the SweetLink TLS certificate.",
|
|
19
|
+
"Runs `mkcert -install` so browsers and the daemon share the same trusted CA.",
|
|
20
|
+
].join(" "))
|
|
21
|
+
.option("--mkcert <path>", "Explicit path to the mkcert binary")
|
|
22
22
|
.action(async (options) => {
|
|
23
23
|
const mkcertBinary = await resolveMkcertBinary(options.mkcert);
|
|
24
24
|
await new Promise((resolve, reject) => {
|
|
25
25
|
const child = spawn(mkcertBinary, MKCERT_INSTALL_ARGS, {
|
|
26
|
-
stdio:
|
|
26
|
+
stdio: "inherit",
|
|
27
27
|
});
|
|
28
|
-
child.on(
|
|
28
|
+
child.on("exit", (code) => {
|
|
29
29
|
if (code === 0) {
|
|
30
30
|
resolve();
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
|
-
reject(new Error(`mkcert exited with code ${code ??
|
|
33
|
+
reject(new Error(`mkcert exited with code ${code ?? "unknown"}. Ensure mkcert is installed (https://github.com/FiloSottile/mkcert) and rerun this command.`));
|
|
34
34
|
});
|
|
35
|
-
child.on(
|
|
35
|
+
child.on("error", (error) => {
|
|
36
36
|
reject(new Error(`Unable to execute mkcert at "${mkcertBinary}": ${error instanceof Error ? error.message : String(error)}`));
|
|
37
37
|
});
|
|
38
38
|
});
|
|
39
39
|
// eslint-disable-next-line no-console -- CLI feedback for operators
|
|
40
|
-
console.log(
|
|
40
|
+
console.log("✅ SweetLink certificate installed. Reload https://localhost:4455 in your browser to trust the daemon.");
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
//# sourceMappingURL=trust-ca.js.map
|
|
@@ -17,6 +17,11 @@ export interface SweetLinkServerConfig {
|
|
|
17
17
|
cwd?: string;
|
|
18
18
|
timeoutMs?: number;
|
|
19
19
|
}
|
|
20
|
+
export interface SweetLinkDevBootstrapConfig {
|
|
21
|
+
endpoint?: string;
|
|
22
|
+
loginPath?: string;
|
|
23
|
+
redirectParam?: string;
|
|
24
|
+
}
|
|
20
25
|
export interface SweetLinkFileConfig {
|
|
21
26
|
appLabel?: string;
|
|
22
27
|
appUrl?: string;
|
|
@@ -24,6 +29,7 @@ export interface SweetLinkFileConfig {
|
|
|
24
29
|
daemonUrl?: string;
|
|
25
30
|
adminKey?: string;
|
|
26
31
|
port?: number;
|
|
32
|
+
devBootstrap?: SweetLinkDevBootstrapConfig;
|
|
27
33
|
cookieMappings?: SweetLinkCookieMapping[];
|
|
28
34
|
healthChecks?: SweetLinkHealthChecksConfig;
|
|
29
35
|
smokeRoutes?: SweetLinkSmokeRoutesConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../../../src/core/config-file.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../../../src/core/config-file.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACpC;AAED,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,2BAA2B,CAAC;IAC3C,cAAc,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC1C,YAAY,CAAC,EAAE,2BAA2B,CAAC;IAC3C,WAAW,CAAC,EAAE,0BAA0B,CAAC;IACzC,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,OAAO,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,YAAY;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;CACtC;AAMD,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD;AAED,wBAAgB,uBAAuB,IAAI,YAAY,CA0BtD"}
|