@fengye404/termpilot 0.2.2 → 0.2.3
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/dist/cli.js +39 -4
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -652,8 +652,7 @@ function createDaemonFromEnv() {
|
|
|
652
652
|
function isLocalRelayHost(hostname) {
|
|
653
653
|
return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1" || /^10\./.test(hostname) || /^192\.168\./.test(hostname) || /^172\.(1[6-9]|2\d|3[0-1])\./.test(hostname);
|
|
654
654
|
}
|
|
655
|
-
function getRelayBaseCandidates() {
|
|
656
|
-
const relayUrl = process.env.TERMPILOT_RELAY_URL ?? "ws://127.0.0.1:8787/ws";
|
|
655
|
+
function getRelayBaseCandidates(relayUrl = process.env.TERMPILOT_RELAY_URL ?? "ws://127.0.0.1:8787/ws") {
|
|
657
656
|
let url;
|
|
658
657
|
try {
|
|
659
658
|
url = new URL(relayUrl);
|
|
@@ -686,6 +685,32 @@ function getRelayBaseCandidates() {
|
|
|
686
685
|
}
|
|
687
686
|
return candidates;
|
|
688
687
|
}
|
|
688
|
+
async function isRelayReachable(baseUrl) {
|
|
689
|
+
try {
|
|
690
|
+
const response = await fetch(new URL("/health", baseUrl), {
|
|
691
|
+
signal: AbortSignal.timeout(2e3)
|
|
692
|
+
});
|
|
693
|
+
return response.ok;
|
|
694
|
+
} catch {
|
|
695
|
+
return false;
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
async function resolvePreferredRelayUrl(relayUrl) {
|
|
699
|
+
const candidates = getRelayBaseCandidates(relayUrl);
|
|
700
|
+
if (candidates.length === 1) {
|
|
701
|
+
return candidates[0].relayUrl;
|
|
702
|
+
}
|
|
703
|
+
const primary = candidates[0];
|
|
704
|
+
if (await isRelayReachable(primary.baseUrl)) {
|
|
705
|
+
return primary.relayUrl;
|
|
706
|
+
}
|
|
707
|
+
for (const candidate of candidates.slice(1)) {
|
|
708
|
+
if (await isRelayReachable(candidate.baseUrl)) {
|
|
709
|
+
return candidate.relayUrl;
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
return primary.relayUrl;
|
|
713
|
+
}
|
|
689
714
|
function getAgentToken() {
|
|
690
715
|
return process.env.TERMPILOT_AGENT_TOKEN ?? DEFAULT_AGENT_TOKEN;
|
|
691
716
|
}
|
|
@@ -1076,9 +1101,19 @@ async function waitForPairingCode(deviceId) {
|
|
|
1076
1101
|
async function runStart(argv) {
|
|
1077
1102
|
const args = parseArgs(argv);
|
|
1078
1103
|
const shouldPair = Boolean(args.pair);
|
|
1079
|
-
const
|
|
1104
|
+
const resolved = await ensureConfigured(argv);
|
|
1105
|
+
let { config } = resolved;
|
|
1106
|
+
const { source } = resolved;
|
|
1107
|
+
const preferredRelayUrl = await resolvePreferredRelayUrl(config.relayUrl);
|
|
1108
|
+
if (preferredRelayUrl !== config.relayUrl) {
|
|
1109
|
+
config = {
|
|
1110
|
+
...config,
|
|
1111
|
+
relayUrl: preferredRelayUrl
|
|
1112
|
+
};
|
|
1113
|
+
console.log(`\u5DF2\u81EA\u52A8\u4FEE\u6B63 relay \u5730\u5740\u4E3A: ${preferredRelayUrl}`);
|
|
1114
|
+
}
|
|
1080
1115
|
applyAgentConfig(config);
|
|
1081
|
-
if (source === "cli" || source === "prompt") {
|
|
1116
|
+
if (source === "cli" || source === "prompt" || source === "saved") {
|
|
1082
1117
|
saveAgentConfig(config);
|
|
1083
1118
|
}
|
|
1084
1119
|
if (args.foreground) {
|