@ccpocket/bridge 1.59.3 → 1.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/cli-args.d.ts +9 -0
- package/dist/cli-args.js +68 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli.js +67 -33
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ParsedCliArgs {
|
|
2
|
+
command?: string;
|
|
3
|
+
flags: Map<string, string | true>;
|
|
4
|
+
helpRequested: boolean;
|
|
5
|
+
versionRequested: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function parseCliArgs(args: string[]): ParsedCliArgs;
|
|
8
|
+
export declare function parseFlag(parsed: ParsedCliArgs, name: string): string | undefined;
|
|
9
|
+
export declare function hasFlag(parsed: ParsedCliArgs, name: string): boolean;
|
package/dist/cli-args.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const VALUE_FLAGS = new Set([
|
|
2
|
+
"port",
|
|
3
|
+
"host",
|
|
4
|
+
"api-key",
|
|
5
|
+
"public-ws-url",
|
|
6
|
+
"codex-app-server-mode",
|
|
7
|
+
"codex-shared-app-server-url",
|
|
8
|
+
"codex-app-server-port",
|
|
9
|
+
"codex-app-server-url",
|
|
10
|
+
]);
|
|
11
|
+
const BOOLEAN_FLAGS = new Set([
|
|
12
|
+
"json",
|
|
13
|
+
"uninstall",
|
|
14
|
+
"no-mdns",
|
|
15
|
+
]);
|
|
16
|
+
export function parseCliArgs(args) {
|
|
17
|
+
const flags = new Map();
|
|
18
|
+
const positionals = [];
|
|
19
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
20
|
+
const arg = args[i];
|
|
21
|
+
if (arg === "-h") {
|
|
22
|
+
flags.set("help", true);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (arg === "-v") {
|
|
26
|
+
flags.set("version", true);
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (arg.startsWith("--")) {
|
|
30
|
+
const raw = arg.slice(2);
|
|
31
|
+
const equalIndex = raw.indexOf("=");
|
|
32
|
+
const name = equalIndex === -1 ? raw : raw.slice(0, equalIndex);
|
|
33
|
+
const inlineValue = equalIndex === -1 ? undefined : raw.slice(equalIndex + 1);
|
|
34
|
+
if (VALUE_FLAGS.has(name)) {
|
|
35
|
+
if (inlineValue !== undefined) {
|
|
36
|
+
flags.set(name, inlineValue);
|
|
37
|
+
}
|
|
38
|
+
else if (i + 1 < args.length) {
|
|
39
|
+
flags.set(name, args[i + 1]);
|
|
40
|
+
i += 1;
|
|
41
|
+
}
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (BOOLEAN_FLAGS.has(name) ||
|
|
45
|
+
name === "help" ||
|
|
46
|
+
name === "version") {
|
|
47
|
+
flags.set(name, true);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
positionals.push(arg);
|
|
52
|
+
}
|
|
53
|
+
const command = positionals[0];
|
|
54
|
+
return {
|
|
55
|
+
command,
|
|
56
|
+
flags,
|
|
57
|
+
helpRequested: flags.has("help") || command === "help",
|
|
58
|
+
versionRequested: flags.has("version") || command === "version",
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export function parseFlag(parsed, name) {
|
|
62
|
+
const value = parsed.flags.get(name);
|
|
63
|
+
return typeof value === "string" ? value : undefined;
|
|
64
|
+
}
|
|
65
|
+
export function hasFlag(parsed, name) {
|
|
66
|
+
return parsed.flags.has(name);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=cli-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -2,23 +2,51 @@
|
|
|
2
2
|
import { setupProxy } from "./proxy.js";
|
|
3
3
|
import { platform } from "node:os";
|
|
4
4
|
import { startServer } from "./index.js";
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { getPackageVersion } from "./version.js";
|
|
6
|
+
import { hasFlag, parseCliArgs, parseFlag } from "./cli-args.js";
|
|
7
7
|
const args = process.argv.slice(2);
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
const parsed = parseCliArgs(args);
|
|
9
|
+
function printHelp() {
|
|
10
|
+
console.log(`ccpocket-bridge
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
ccpocket-bridge [options]
|
|
14
|
+
ccpocket-bridge <command> [options]
|
|
15
|
+
|
|
16
|
+
Commands:
|
|
17
|
+
help Show this help
|
|
18
|
+
version Show the installed Bridge version
|
|
19
|
+
doctor [--json] Check the local Bridge environment
|
|
20
|
+
setup [options] Register Bridge as a macOS launchd or Linux systemd service
|
|
21
|
+
|
|
22
|
+
Options:
|
|
23
|
+
-h, --help Show this help
|
|
24
|
+
-v, --version Show the installed Bridge version
|
|
25
|
+
--port <port> WebSocket port (default: 8765)
|
|
26
|
+
--host <host> Bind address (default: 0.0.0.0)
|
|
27
|
+
--api-key <key> Enable API key authentication
|
|
28
|
+
--public-ws-url <url>
|
|
29
|
+
Public ws:// or wss:// URL used in QR codes
|
|
30
|
+
--no-mdns Disable mDNS auto-discovery advertisement
|
|
31
|
+
|
|
32
|
+
Setup options:
|
|
33
|
+
--uninstall Remove the registered service
|
|
34
|
+
|
|
35
|
+
Configuration can also be provided with BRIDGE_PORT, BRIDGE_HOST,
|
|
36
|
+
BRIDGE_API_KEY, BRIDGE_ALLOWED_DIRS, BRIDGE_PUBLIC_WS_URL, and
|
|
37
|
+
BRIDGE_DISABLE_MDNS.`);
|
|
15
38
|
}
|
|
16
|
-
|
|
17
|
-
|
|
39
|
+
if (parsed.helpRequested) {
|
|
40
|
+
printHelp();
|
|
18
41
|
}
|
|
19
|
-
if (
|
|
42
|
+
else if (parsed.versionRequested) {
|
|
43
|
+
console.log(`ccpocket-bridge ${getPackageVersion()}`);
|
|
44
|
+
}
|
|
45
|
+
else if (parsed.command === "doctor") {
|
|
46
|
+
// Configure global fetch proxy before any network calls
|
|
47
|
+
setupProxy();
|
|
20
48
|
// Doctor subcommand: check environment health
|
|
21
|
-
const jsonOutput = hasFlag("json");
|
|
49
|
+
const jsonOutput = hasFlag(parsed, "json");
|
|
22
50
|
import("./doctor.js")
|
|
23
51
|
.then(({ runDoctor, printReport }) => runDoctor().then((report) => {
|
|
24
52
|
if (jsonOutput) {
|
|
@@ -34,22 +62,24 @@ if (subcommand === "doctor") {
|
|
|
34
62
|
process.exit(1);
|
|
35
63
|
});
|
|
36
64
|
}
|
|
37
|
-
else if (
|
|
65
|
+
else if (parsed.command === "setup") {
|
|
38
66
|
// Service setup subcommand (platform-specific)
|
|
39
67
|
const opts = {
|
|
40
|
-
port: parseFlag("port"),
|
|
41
|
-
host: parseFlag("host"),
|
|
42
|
-
apiKey: parseFlag("api-key"),
|
|
43
|
-
publicWsUrl: parseFlag("public-ws-url"),
|
|
44
|
-
codexAppServerMode: parseFlag("codex-app-server-mode"),
|
|
45
|
-
codexSharedAppServerUrl: parseFlag("codex-shared-app-server-url"),
|
|
46
|
-
codexAppServerPort: parseFlag("codex-app-server-port"),
|
|
47
|
-
codexAppServerUrl: parseFlag("codex-app-server-url"),
|
|
68
|
+
port: parseFlag(parsed, "port"),
|
|
69
|
+
host: parseFlag(parsed, "host"),
|
|
70
|
+
apiKey: parseFlag(parsed, "api-key"),
|
|
71
|
+
publicWsUrl: parseFlag(parsed, "public-ws-url"),
|
|
72
|
+
codexAppServerMode: parseFlag(parsed, "codex-app-server-mode"),
|
|
73
|
+
codexSharedAppServerUrl: parseFlag(parsed, "codex-shared-app-server-url"),
|
|
74
|
+
codexAppServerPort: parseFlag(parsed, "codex-app-server-port"),
|
|
75
|
+
codexAppServerUrl: parseFlag(parsed, "codex-app-server-url"),
|
|
48
76
|
};
|
|
49
77
|
if (platform() === "darwin") {
|
|
50
78
|
import("./setup-launchd.js")
|
|
51
79
|
.then(({ setupLaunchd, uninstallLaunchd }) => {
|
|
52
|
-
hasFlag("uninstall")
|
|
80
|
+
hasFlag(parsed, "uninstall")
|
|
81
|
+
? uninstallLaunchd()
|
|
82
|
+
: setupLaunchd(opts);
|
|
53
83
|
})
|
|
54
84
|
.catch((err) => {
|
|
55
85
|
console.error("Setup failed:", err);
|
|
@@ -59,7 +89,9 @@ else if (subcommand === "setup") {
|
|
|
59
89
|
else if (platform() === "linux") {
|
|
60
90
|
import("./setup-systemd.js")
|
|
61
91
|
.then(({ setupSystemd, uninstallSystemd }) => {
|
|
62
|
-
hasFlag("uninstall")
|
|
92
|
+
hasFlag(parsed, "uninstall")
|
|
93
|
+
? uninstallSystemd()
|
|
94
|
+
: setupSystemd(opts);
|
|
63
95
|
})
|
|
64
96
|
.catch((err) => {
|
|
65
97
|
console.error("Setup failed:", err);
|
|
@@ -72,15 +104,17 @@ else if (subcommand === "setup") {
|
|
|
72
104
|
}
|
|
73
105
|
}
|
|
74
106
|
else {
|
|
107
|
+
// Configure global fetch proxy before any network calls
|
|
108
|
+
setupProxy();
|
|
75
109
|
// Server mode: set env vars from CLI flags, then start
|
|
76
|
-
const port = parseFlag("port");
|
|
77
|
-
const host = parseFlag("host");
|
|
78
|
-
const apiKey = parseFlag("api-key");
|
|
79
|
-
const publicWsUrl = parseFlag("public-ws-url");
|
|
80
|
-
const codexAppServerMode = parseFlag("codex-app-server-mode");
|
|
81
|
-
const codexSharedAppServerUrl = parseFlag("codex-shared-app-server-url");
|
|
82
|
-
const codexAppServerPort = parseFlag("codex-app-server-port");
|
|
83
|
-
const codexAppServerUrl = parseFlag("codex-app-server-url");
|
|
110
|
+
const port = parseFlag(parsed, "port");
|
|
111
|
+
const host = parseFlag(parsed, "host");
|
|
112
|
+
const apiKey = parseFlag(parsed, "api-key");
|
|
113
|
+
const publicWsUrl = parseFlag(parsed, "public-ws-url");
|
|
114
|
+
const codexAppServerMode = parseFlag(parsed, "codex-app-server-mode");
|
|
115
|
+
const codexSharedAppServerUrl = parseFlag(parsed, "codex-shared-app-server-url");
|
|
116
|
+
const codexAppServerPort = parseFlag(parsed, "codex-app-server-port");
|
|
117
|
+
const codexAppServerUrl = parseFlag(parsed, "codex-app-server-url");
|
|
84
118
|
if (port)
|
|
85
119
|
process.env.BRIDGE_PORT = port;
|
|
86
120
|
if (host)
|
|
@@ -101,7 +135,7 @@ else {
|
|
|
101
135
|
else if (codexAppServerUrl) {
|
|
102
136
|
process.env.BRIDGE_CODEX_APP_SERVER_URL = codexAppServerUrl;
|
|
103
137
|
}
|
|
104
|
-
if (hasFlag("no-mdns"))
|
|
138
|
+
if (hasFlag(parsed, "no-mdns"))
|
|
105
139
|
process.env.BRIDGE_DISABLE_MDNS = "1";
|
|
106
140
|
startServer();
|
|
107
141
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|