@anybrowser/cli 0.0.0-stage → 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
package/dist/hello.js ADDED
@@ -0,0 +1,62 @@
1
+ /**
2
+ * The hello line protocol: the first line written by every client on a
3
+ * fresh connection to the daemon's Unix socket, a single JSON object
4
+ * followed by `\n`:
5
+ *
6
+ * {"anybrowser":{"version":"<package version>","role":"mcp"}}
7
+ *
8
+ * `role` selects what the rest of the connection carries. See daemon.ts for
9
+ * how each role is handled.
10
+ */
11
+ const HELLO_ROLES = ["mcp", "status", "stop"];
12
+ export function isHelloRole(value) {
13
+ return (typeof value === "string" &&
14
+ HELLO_ROLES.includes(value));
15
+ }
16
+ /** Formats a hello line, including its trailing newline. */
17
+ export function formatHelloLine(role, version) {
18
+ const hello = { anybrowser: { version, role } };
19
+ return JSON.stringify(hello) + "\n";
20
+ }
21
+ /**
22
+ * Parses a hello line (without its trailing newline). Never throws: any
23
+ * problem is reported through the `ok: false` branch so the caller can
24
+ * reply with an error line instead of crashing.
25
+ */
26
+ export function parseHelloLine(line) {
27
+ let data;
28
+ try {
29
+ data = JSON.parse(line);
30
+ }
31
+ catch {
32
+ return { ok: false, error: "first line is not valid JSON" };
33
+ }
34
+ if (typeof data !== "object" || data === null || !("anybrowser" in data)) {
35
+ return { ok: false, error: "missing 'anybrowser' key" };
36
+ }
37
+ const envelope = data.anybrowser;
38
+ if (typeof envelope !== "object" || envelope === null) {
39
+ return { ok: false, error: "'anybrowser' must be an object" };
40
+ }
41
+ const { version, role } = envelope;
42
+ if (typeof version !== "string") {
43
+ return { ok: false, error: "missing 'anybrowser.version'" };
44
+ }
45
+ if (!isHelloRole(role)) {
46
+ return { ok: false, error: `unknown role '${String(role)}'` };
47
+ }
48
+ return { ok: true, version, role };
49
+ }
50
+ /** One JSON line the daemon sends back when a hello line is invalid. */
51
+ export function formatErrorLine(reason) {
52
+ return JSON.stringify({ error: reason }) + "\n";
53
+ }
54
+ /** One JSON line the daemon sends back to acknowledge a `stop` hello. */
55
+ export function formatStopAckLine() {
56
+ return JSON.stringify({ ok: true }) + "\n";
57
+ }
58
+ /** One JSON line the daemon sends back to a `status` hello. */
59
+ export function formatStatusLine(status) {
60
+ return JSON.stringify(status) + "\n";
61
+ }
62
+ //# sourceMappingURL=hello.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hello.js","sourceRoot":"","sources":["../src/hello.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,GAAyB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAoBpE,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACxB,WAAiC,CAAC,QAAQ,CAAC,KAAK,CAAC,CACnD,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,eAAe,CAAC,IAAe,EAAE,OAAe;IAC9D,MAAM,KAAK,GAAc,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;IAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACtC,CAAC;AAKD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;IAC9D,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,EAAE,CAAC;QACzE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,QAAQ,GAAI,IAAgC,CAAC,UAAU,CAAC;IAC9D,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,QAAiD,CAAC;IAC5E,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAChE,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;AAClD,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;AAC7C,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AACvC,CAAC"}
package/dist/idle.js ADDED
@@ -0,0 +1,84 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ /**
4
+ * Default idle timeout (docs/DESIGN.md decision 5), used when neither
5
+ * ANYBROWSER_IDLE_MS nor config.json's `idleMinutes` gives a usable value.
6
+ */
7
+ export const DEFAULT_IDLE_MINUTES = 10;
8
+ export const DEFAULT_IDLE_MS = DEFAULT_IDLE_MINUTES * 60_000;
9
+ function fromEnv(env) {
10
+ const raw = env["ANYBROWSER_IDLE_MS"];
11
+ if (raw === undefined) {
12
+ return undefined;
13
+ }
14
+ const trimmed = raw.trim();
15
+ if (trimmed === "") {
16
+ return undefined;
17
+ }
18
+ if (trimmed.toLowerCase() === "off") {
19
+ return null;
20
+ }
21
+ const parsed = Number(trimmed);
22
+ // 0 or negative means "use the next source", not "never" - only the
23
+ // literal "off" above disables the timers.
24
+ if (Number.isFinite(parsed) && parsed > 0) {
25
+ return parsed;
26
+ }
27
+ return undefined;
28
+ }
29
+ function fromConfigFile(paths) {
30
+ let raw;
31
+ try {
32
+ raw = readFileSync(join(paths.home, "config.json"), "utf8");
33
+ }
34
+ catch {
35
+ return undefined; // absent or unreadable: fall through silently
36
+ }
37
+ let parsed;
38
+ try {
39
+ parsed = JSON.parse(raw);
40
+ }
41
+ catch {
42
+ return undefined; // malformed JSON: fall through silently
43
+ }
44
+ if (typeof parsed !== "object" || parsed === null) {
45
+ return undefined;
46
+ }
47
+ const idleMinutes = parsed.idleMinutes;
48
+ if (typeof idleMinutes !== "number" ||
49
+ !Number.isFinite(idleMinutes) ||
50
+ idleMinutes <= 0) {
51
+ return undefined;
52
+ }
53
+ return idleMinutes * 60_000;
54
+ }
55
+ /**
56
+ * Resolves the idle timeout shared by the daemon-exit timer and each
57
+ * profile's browser-close timer (docs/DESIGN.md decision 5).
58
+ *
59
+ * Precedence, checked in order, each falling through silently to the next
60
+ * on an absent/invalid value:
61
+ *
62
+ * 1. `ANYBROWSER_IDLE_MS` - an env var in milliseconds, for tests and
63
+ * power users. The literal value "off" (case-insensitive) disables
64
+ * BOTH timers entirely (returns null). Any other non-positive or
65
+ * unparseable value is treated as absent, not as "never".
66
+ * 2. `idleMinutes` in `<home>/config.json` (a number of minutes). The
67
+ * file may be absent, unreadable, malformed JSON, or missing the key.
68
+ * A non-numeric or non-positive `idleMinutes` also falls through.
69
+ * 3. The default, `DEFAULT_IDLE_MS` (10 minutes).
70
+ *
71
+ * Returns the resolved timeout in milliseconds, or null when disabled.
72
+ */
73
+ export function resolveIdleMs(paths, env = process.env) {
74
+ const envValue = fromEnv(env);
75
+ if (envValue !== undefined) {
76
+ return envValue;
77
+ }
78
+ const configValue = fromConfigFile(paths);
79
+ if (configValue !== undefined) {
80
+ return configValue;
81
+ }
82
+ return DEFAULT_IDLE_MS;
83
+ }
84
+ //# sourceMappingURL=idle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idle.js","sourceRoot":"","sources":["../src/idle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,GAAG,MAAM,CAAC;AAE7D,SAAS,OAAO,CAAC,GAAsB;IACrC,MAAM,GAAG,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACtC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,oEAAoE;IACpE,2CAA2C;IAC3C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,KAAsB;IAC5C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC,CAAC,8CAA8C;IAClE,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC,CAAC,wCAAwC;IAC5D,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,WAAW,GAAI,MAAoC,CAAC,WAAW,CAAC;IACtE,IACE,OAAO,WAAW,KAAK,QAAQ;QAC/B,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC7B,WAAW,IAAI,CAAC,EAChB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,WAAW,GAAG,MAAM,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAsB,EACtB,GAAG,GAAsB,OAAO,CAAC,GAAG;IAEpC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { copyFileSync, existsSync, mkdirSync, readFileSync, rmSync, } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+ /** Claude Code's home, honouring the same CLAUDE_CONFIG_DIR override Claude Code itself reads. */
6
+ function claudeHome() {
7
+ const override = process.env["CLAUDE_CONFIG_DIR"];
8
+ return override !== undefined && override !== ""
9
+ ? override
10
+ : join(homedir(), ".claude");
11
+ }
12
+ const packagedSkill = new URL("../skills/anybrowser/SKILL.md", import.meta.url);
13
+ export function runInstallCommand(args) {
14
+ if (args.includes("--print")) {
15
+ console.log(JSON.stringify({ mcpServers: { anybrowser: { command: "anyb", args: ["mcp"] } } }, null, 2));
16
+ console.log("Paste this into your MCP host's server configuration (its mcpServers section).");
17
+ return 0;
18
+ }
19
+ const force = args.includes("--force");
20
+ const skillDir = join(claudeHome(), "skills", "anybrowser");
21
+ const skillFile = join(skillDir, "SKILL.md");
22
+ const existing = spawnSync("claude", ["mcp", "get", "anybrowser"], {
23
+ stdio: "ignore",
24
+ });
25
+ if (existing.error?.code === "ENOENT") {
26
+ console.error("anyb: Claude Code was not found on PATH; use 'anyb install --print' to get a config snippet instead");
27
+ return 1;
28
+ }
29
+ if (!force &&
30
+ existsSync(skillFile) &&
31
+ !readFileSync(skillFile).equals(readFileSync(packagedSkill))) {
32
+ console.error(`anyb: ${skillFile} already exists with different content; use 'anyb install --force' to overwrite it`);
33
+ return 1;
34
+ }
35
+ if (existing.status === 0) {
36
+ console.log("anyb: already registered with Claude Code");
37
+ }
38
+ else {
39
+ spawnSync("claude", ["mcp", "add", "--scope", "user", "anybrowser", "--", "anyb", "mcp"], { stdio: "ignore" });
40
+ }
41
+ mkdirSync(skillDir, { recursive: true });
42
+ copyFileSync(packagedSkill, skillFile);
43
+ return 0;
44
+ }
45
+ export function runUninstallCommand() {
46
+ const removal = spawnSync("claude", ["mcp", "remove", "anybrowser", "--scope", "user"], { stdio: "ignore" });
47
+ if (removal.error?.code === "ENOENT") {
48
+ console.log("anyb: Claude Code was not found on PATH; skipped removing the server");
49
+ }
50
+ const skillDir = join(claudeHome(), "skills", "anybrowser");
51
+ const skillFile = join(skillDir, "SKILL.md");
52
+ if (!existsSync(skillFile)) {
53
+ return 0;
54
+ }
55
+ if (readFileSync(skillFile).equals(readFileSync(packagedSkill))) {
56
+ rmSync(skillDir, { recursive: true, force: true });
57
+ }
58
+ else {
59
+ console.log(`anyb: left ${skillFile} in place because it was modified`);
60
+ }
61
+ return 0;
62
+ }
63
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
package/dist/paths.js ADDED
@@ -0,0 +1,36 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ /**
4
+ * Unix socket paths are limited to roughly 104 bytes on macOS (sockaddr_un's
5
+ * sun_path is 104 bytes including the trailing NUL) and 108 bytes on Linux.
6
+ * We check against the smaller of the two so state directories that work on
7
+ * macOS also work on Linux.
8
+ */
9
+ export const SOCKET_PATH_LIMIT = 104;
10
+ /**
11
+ * Resolves the anybrowser state directory and the well-known files inside
12
+ * it, honoring ANYBROWSER_HOME when set. Does not touch the filesystem.
13
+ */
14
+ export function resolvePaths(env = process.env) {
15
+ const home = env["ANYBROWSER_HOME"]?.trim() || join(homedir(), ".anybrowser");
16
+ return {
17
+ home,
18
+ socket: join(home, "daemon.sock"),
19
+ lock: join(home, "daemon.lock"),
20
+ log: join(home, "daemon.log"),
21
+ };
22
+ }
23
+ /**
24
+ * Throws a clear error if the socket path would exceed the platform's
25
+ * sockaddr_un length limit, naming the limit and suggesting a fix.
26
+ */
27
+ export function assertSocketPathFits(socketPath) {
28
+ const byteLength = Buffer.byteLength(socketPath, "utf8");
29
+ if (byteLength > SOCKET_PATH_LIMIT) {
30
+ throw new Error(`anybrowser: socket path is ${byteLength} bytes, which exceeds the ` +
31
+ `${SOCKET_PATH_LIMIT}-byte limit for Unix domain socket paths on ` +
32
+ `macOS (108 on Linux). Set ANYBROWSER_HOME to a shorter path, e.g. ` +
33
+ `ANYBROWSER_HOME=~/.ab, and try again.\n path: ${socketPath}`);
34
+ }
35
+ }
36
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAarC;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAG,GAAsB,OAAO,CAAC,GAAG;IAEpC,MAAM,IAAI,GAAG,GAAG,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;IAC9E,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QACjC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QAC/B,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzD,IAAI,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,8BAA8B,UAAU,4BAA4B;YAClE,GAAG,iBAAiB,8CAA8C;YAClE,oEAAoE;YACpE,kDAAkD,UAAU,EAAE,CACjE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,273 @@
1
+ import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync, } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { BrowserDetectionUnsupportedError, findBrowserExecutable, } from "./browserDetect.js";
4
+ import { parseAllowedOrigin } from "./allowedSites.js";
5
+ /** Chromium-family browsers supported in this slice. Firefox and WebKit are not yet. */
6
+ export const SUPPORTED_BROWSERS = [
7
+ "chrome",
8
+ "chromium",
9
+ "brave",
10
+ "edge",
11
+ "arc",
12
+ "vivaldi",
13
+ "opera",
14
+ ];
15
+ /** Browsers we recognise but do not support yet in this slice. */
16
+ const NOT_YET_SUPPORTED_BROWSERS = ["firefox", "webkit"];
17
+ const NAME_PATTERN = /^[a-z0-9]+(-[a-z0-9]+)*$/;
18
+ const MAX_NAME_LENGTH = 40;
19
+ /** Validates a profile `name`. Returns an error message, or null when valid. */
20
+ export function validateName(name) {
21
+ if (name.length === 0 || name.length > MAX_NAME_LENGTH) {
22
+ return `profile name must be 1-${MAX_NAME_LENGTH} characters`;
23
+ }
24
+ if (name.includes("-in-")) {
25
+ return "profile name must not contain '-in-'";
26
+ }
27
+ if (!NAME_PATTERN.test(name)) {
28
+ return "profile name must be a lowercase slug: [a-z0-9]+(-[a-z0-9]+)*";
29
+ }
30
+ return null;
31
+ }
32
+ /**
33
+ * Validates and normalizes a whole allowed-sites list (see
34
+ * `parseAllowedOrigin` for the entry forms): entries trimmed, hosts
35
+ * lowercased and in ASCII form. Returns the first error message otherwise.
36
+ */
37
+ export function normalizeAllowedOrigins(entries) {
38
+ const value = [];
39
+ for (const entry of entries) {
40
+ const parsed = parseAllowedOrigin(entry);
41
+ if (!parsed.ok) {
42
+ return { ok: false, message: parsed.error };
43
+ }
44
+ value.push(parsed.normalized);
45
+ }
46
+ return { ok: true, value };
47
+ }
48
+ /** Validates a `browser`. Returns an error message, or null when it is one of the supported browsers. */
49
+ export function validateBrowser(browser) {
50
+ if (NOT_YET_SUPPORTED_BROWSERS.includes(browser)) {
51
+ return `browser '${browser}' is not supported yet`;
52
+ }
53
+ if (!SUPPORTED_BROWSERS.includes(browser)) {
54
+ return `unknown browser '${browser}'; supported: ${SUPPORTED_BROWSERS.join(", ")}`;
55
+ }
56
+ return null;
57
+ }
58
+ /** Composes a profile id from a validated `name` and `browser`. */
59
+ export function profileId(name, browser) {
60
+ return `${name}-in-${browser}`;
61
+ }
62
+ function profileDir(paths, id) {
63
+ return join(paths.home, "profiles", id);
64
+ }
65
+ export function profileJsonPath(paths, id) {
66
+ return join(profileDir(paths, id), "profile.json");
67
+ }
68
+ export function profileExists(paths, id) {
69
+ return existsSync(profileJsonPath(paths, id));
70
+ }
71
+ /** What `profile_status`, `profile_list` and `anyb profile list` say about a profile whose `allowedOrigins` was hand-edited into something that is not a list of strings. */
72
+ export const UNREADABLE_ALLOWED_ORIGINS = "allowedOrigins in profile.json is unreadable: it must be null or a list of strings";
73
+ function hasValidAllowedOrigins(value) {
74
+ return (value === undefined ||
75
+ value === null ||
76
+ (Array.isArray(value) && value.every((entry) => typeof entry === "string")));
77
+ }
78
+ function readRaw(paths, id) {
79
+ try {
80
+ return JSON.parse(readFileSync(profileJsonPath(paths, id), "utf8"));
81
+ }
82
+ catch {
83
+ return null;
84
+ }
85
+ }
86
+ /**
87
+ * Reads profile.json, or null when it is missing, not JSON, or its
88
+ * `allowedOrigins` is neither null nor a list of strings (a hand-edit gone
89
+ * wrong): a list that cannot be read is never guessed at.
90
+ */
91
+ export function readProfile(paths, id) {
92
+ const parsed = readRaw(paths, id);
93
+ if (!parsed || !hasValidAllowedOrigins(parsed.allowedOrigins)) {
94
+ return null;
95
+ }
96
+ // Older profile.json files predate the field: no list means unrestricted.
97
+ return {
98
+ ...parsed,
99
+ allowedOrigins: parsed.allowedOrigins ?? null,
100
+ };
101
+ }
102
+ /** The reason profile.json is unreadable because of its allowed-sites list, or null when it is fine (or unreadable for another reason). */
103
+ export function allowedOriginsProblem(paths, id) {
104
+ const parsed = readRaw(paths, id);
105
+ return parsed && !hasValidAllowedOrigins(parsed.allowedOrigins)
106
+ ? UNREADABLE_ALLOWED_ORIGINS
107
+ : null;
108
+ }
109
+ /** Writes a new profile directory (mode 0700) and its profile.json. Throws if the id already exists. */
110
+ export function createProfile(paths, input) {
111
+ const id = profileId(input.name, input.browser);
112
+ if (profileExists(paths, id)) {
113
+ throw new Error(`profile '${id}' already exists`);
114
+ }
115
+ const dir = profileDir(paths, id);
116
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
117
+ const profile = {
118
+ name: input.name,
119
+ browser: input.browser,
120
+ headless: input.headless ?? false,
121
+ executablePath: input.executablePath,
122
+ allowedOrigins: input.allowedOrigins ?? null,
123
+ createdAt: new Date().toISOString(),
124
+ };
125
+ writeFileSync(profileJsonPath(paths, id), JSON.stringify(profile, null, 2));
126
+ return { id, ...profile };
127
+ }
128
+ /**
129
+ * Validates `name`/`browser`, resolves an executable for non-`chromium`
130
+ * browsers (macOS app-bundle detection), and creates the profile. Shared by
131
+ * the CLI (`anyb profile add`) and the `profile_create` MCP tool so both
132
+ * apply the exact same rules.
133
+ */
134
+ export function addProfileWithDetection(paths, input, env = process.env) {
135
+ const nameError = validateName(input.name);
136
+ if (nameError) {
137
+ return { ok: false, kind: "invalid-name", message: nameError };
138
+ }
139
+ const browserError = validateBrowser(input.browser);
140
+ if (browserError) {
141
+ return { ok: false, kind: "invalid-browser", message: browserError };
142
+ }
143
+ const browser = input.browser;
144
+ const allowed = normalizeAllowedOrigins(input.allowedOrigins ?? []);
145
+ if (!allowed.ok) {
146
+ return {
147
+ ok: false,
148
+ kind: "invalid-allowed-origins",
149
+ message: allowed.message,
150
+ };
151
+ }
152
+ let executablePath = null;
153
+ if (browser !== "chromium") {
154
+ try {
155
+ executablePath = findBrowserExecutable(browser, env);
156
+ }
157
+ catch (error) {
158
+ if (error instanceof BrowserDetectionUnsupportedError) {
159
+ return {
160
+ ok: false,
161
+ kind: "detection-unsupported",
162
+ message: error.message,
163
+ };
164
+ }
165
+ throw error;
166
+ }
167
+ if (executablePath === null) {
168
+ return {
169
+ ok: false,
170
+ kind: "not-found",
171
+ message: `could not find an installed '${browser}'; try 'chromium' instead`,
172
+ };
173
+ }
174
+ }
175
+ try {
176
+ const profile = createProfile(paths, {
177
+ name: input.name,
178
+ browser,
179
+ headless: input.headless ?? false,
180
+ allowedOrigins: input.allowedOrigins ? allowed.value : null,
181
+ executablePath,
182
+ });
183
+ return { ok: true, id: profile.id };
184
+ }
185
+ catch (error) {
186
+ return {
187
+ ok: false,
188
+ kind: "exists",
189
+ message: error instanceof Error ? error.message : String(error),
190
+ };
191
+ }
192
+ }
193
+ /** Deletes a profile's whole directory. Throws if it doesn't exist. */
194
+ export function removeProfile(paths, id) {
195
+ if (!profileExists(paths, id)) {
196
+ throw new Error(`profile '${id}' does not exist`);
197
+ }
198
+ rmSync(profileDir(paths, id), { recursive: true, force: true });
199
+ }
200
+ const SETTABLE_KEYS = new Set(["headless", "allowedOrigins"]);
201
+ /** Updates one setting in profile.json (`headless` or `allowedOrigins`). Throws on an unknown key/profile/value. */
202
+ export function setProfileSetting(paths, id, key, value) {
203
+ if (!SETTABLE_KEYS.has(key)) {
204
+ throw new Error(`unknown profile setting '${key}'`);
205
+ }
206
+ const profile = readProfile(paths, id);
207
+ if (!profile) {
208
+ throw new Error(`profile '${id}' does not exist`);
209
+ }
210
+ let updated;
211
+ if (key === "allowedOrigins") {
212
+ // An empty value or 'off' clears the list back to unrestricted.
213
+ let entries = null;
214
+ if (value !== "" && value !== "off") {
215
+ const normalized = normalizeAllowedOrigins(value.split(","));
216
+ if (!normalized.ok) {
217
+ throw new Error(normalized.message);
218
+ }
219
+ entries = normalized.value;
220
+ }
221
+ updated = { ...profile, allowedOrigins: entries };
222
+ }
223
+ else {
224
+ if (value !== "true" && value !== "false") {
225
+ throw new Error(`'${key}' must be 'true' or 'false'`);
226
+ }
227
+ updated = { ...profile, headless: value === "true" };
228
+ }
229
+ writeFileSync(profileJsonPath(paths, id), JSON.stringify(updated, null, 2));
230
+ }
231
+ /** Lists every profile under `paths.home/profiles`, sorted by id. Returns [] if the directory doesn't exist. */
232
+ export function listProfiles(paths) {
233
+ const root = join(paths.home, "profiles");
234
+ let ids;
235
+ try {
236
+ ids = readdirSync(root, { withFileTypes: true })
237
+ .filter((entry) => entry.isDirectory())
238
+ .map((entry) => entry.name);
239
+ }
240
+ catch {
241
+ return [];
242
+ }
243
+ const profiles = [];
244
+ for (const id of ids.sort()) {
245
+ const profile = readProfile(paths, id);
246
+ if (profile) {
247
+ profiles.push({ id, ...profile });
248
+ }
249
+ }
250
+ return profiles;
251
+ }
252
+ /** Profiles whose profile.json exists but whose allowed-sites list is unreadable (so `listProfiles` skips them), sorted by id. */
253
+ export function listProfilesWithBadList(paths) {
254
+ const root = join(paths.home, "profiles");
255
+ let ids;
256
+ try {
257
+ ids = readdirSync(root, { withFileTypes: true })
258
+ .filter((entry) => entry.isDirectory())
259
+ .map((entry) => entry.name);
260
+ }
261
+ catch {
262
+ return [];
263
+ }
264
+ const broken = [];
265
+ for (const id of ids.sort()) {
266
+ const problem = allowedOriginsProblem(paths, id);
267
+ if (problem) {
268
+ broken.push({ id, problem });
269
+ }
270
+ }
271
+ return broken;
272
+ }
273
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,gCAAgC,EAChC,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,wFAAwF;AACxF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,QAAQ;IACR,UAAU;IACV,OAAO;IACP,MAAM;IACN,KAAK;IACL,SAAS;IACT,OAAO;CACC,CAAC;AAIX,kEAAkE;AAClE,MAAM,0BAA0B,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAEzD,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAChD,MAAM,eAAe,GAAG,EAAE,CAAC;AAkB3B,gFAAgF;AAChF,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QACvD,OAAO,0BAA0B,eAAe,aAAa,CAAC;IAChE,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,sCAAsC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,+DAA+D,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAiB;IAEjB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,0BAA0B,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,OAAO,YAAY,OAAO,wBAAwB,CAAC;IACrD,CAAC;IACD,IAAI,CAAE,kBAAwC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,OAAO,oBAAoB,OAAO,iBAAiB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACrF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,OAAe;IACrD,OAAO,GAAG,IAAI,OAAO,OAAO,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,KAAsB,EAAE,EAAU;IACpD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAsB,EAAE,EAAU;IAChE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAsB,EAAE,EAAU;IAC9D,OAAO,UAAU,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,6KAA6K;AAC7K,MAAM,CAAC,MAAM,0BAA0B,GACrC,oFAAoF,CAAC;AAEvF,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,CACL,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAC5E,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CACd,KAAsB,EACtB,EAAU;IAEV,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,KAAsB,EACtB,EAAU;IAEV,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,0EAA0E;IAC1E,OAAO;QACL,GAAG,MAAM;QACT,cAAc,EAAG,MAAM,CAAC,cAAkC,IAAI,IAAI;KACnE,CAAC;AACJ,CAAC;AAED,2IAA2I;AAC3I,MAAM,UAAU,qBAAqB,CACnC,KAAsB,EACtB,EAAU;IAEV,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAClC,OAAO,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,cAAc,CAAC;QAC7D,CAAC,CAAC,0BAA0B;QAC5B,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAUD,wGAAwG;AACxG,MAAM,UAAU,aAAa,CAC3B,KAAsB,EACtB,KAAyB;IAEzB,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAClC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,MAAM,OAAO,GAAY;QACvB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;QACjC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,IAAI;QAC5C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IACF,aAAa,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC;AAC5B,CAAC;AAwBD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAsB,EACtB,KAAwB,EACxB,GAAG,GAAsB,OAAO,CAAC,GAAG;IAEpC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACjE,CAAC;IACD,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IACvE,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAA2B,CAAC;IAClD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,yBAAyB;YAC/B,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,cAAc,GAAG,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,gCAAgC,EAAE,CAAC;gBACtD,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,IAAI,EAAE,uBAAuB;oBAC7B,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,gCAAgC,OAAO,2BAA2B;aAC5E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE;YACnC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO;YACP,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;YACjC,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YAC3D,cAAc;SACf,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,aAAa,CAAC,KAAsB,EAAE,EAAU;IAC9D,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAE9D,oHAAoH;AACpH,MAAM,UAAU,iBAAiB,CAC/B,KAAsB,EACtB,EAAU,EACV,GAAW,EACX,KAAa;IAEb,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,OAAgB,CAAC;IACrB,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;QAC7B,gEAAgE;QAChE,IAAI,OAAO,GAAoB,IAAI,CAAC;QACpC,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC;QAC7B,CAAC;QACD,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,6BAA6B,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,KAAK,KAAK,MAAM,EAAE,CAAC;IACvD,CAAC;IACD,aAAa,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,gHAAgH;AAChH,MAAM,UAAU,YAAY,CAAC,KAAsB;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1C,IAAI,GAAa,CAAC;IAClB,IAAI,CAAC;QACH,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aAC7C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;aACtC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,kIAAkI;AAClI,MAAM,UAAU,uBAAuB,CACrC,KAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1C,IAAI,GAAa,CAAC;IAClB,IAAI,CAAC;QACH,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aAC7C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;aACtC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAA2C,EAAE,CAAC;IAC1D,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/proxy.js ADDED
@@ -0,0 +1,40 @@
1
+ import { ensureDaemon } from "./connect.js";
2
+ import { formatHelloLine } from "./hello.js";
3
+ import { readVersion } from "./version.js";
4
+ /**
5
+ * Runs the stdio-to-socket proxy: `anyb mcp`. Spawns the daemon if needed,
6
+ * sends the hello line, then pipes stdin/stdout to/from the daemon socket.
7
+ * Only the MCP JSON-RPC stream may touch stdout; everything else goes to
8
+ * stderr.
9
+ */
10
+ export async function runProxy(paths) {
11
+ let socket;
12
+ try {
13
+ socket = await ensureDaemon(paths);
14
+ }
15
+ catch (error) {
16
+ process.stderr.write(`anyb: ${error instanceof Error ? error.message : String(error)}\n`);
17
+ return 1;
18
+ }
19
+ socket.write(formatHelloLine("mcp", readVersion()));
20
+ return new Promise((resolve) => {
21
+ let settled = false;
22
+ const finish = (code) => {
23
+ if (settled)
24
+ return;
25
+ settled = true;
26
+ resolve(code);
27
+ };
28
+ socket.on("close", () => finish(0));
29
+ socket.on("error", (error) => {
30
+ process.stderr.write(`anyb: daemon connection error: ${error.message}\n`);
31
+ finish(1);
32
+ });
33
+ process.stdin.on("end", () => {
34
+ socket.end();
35
+ });
36
+ process.stdin.pipe(socket);
37
+ socket.pipe(process.stdout);
38
+ });
39
+ }
40
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAsB;IACnD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,SAAS,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CACpE,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAEpD,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACrC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;YAC9B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YAC1E,MAAM,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAC3B,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC"}