pi-maestro-mobile 0.1.2 → 0.1.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 +26 -7
- package/dist/cli.js.map +1 -1
- package/package.json +3 -2
package/dist/cli.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* 环境变量(与 CLI 参数等价):
|
|
9
9
|
* MAESTRO_MOBILE_PORT / MAESTRO_MOBILE_HOST / MAESTRO_MOBILE_TOKEN / MAESTRO_MOBILE_PROJECT_ROOT
|
|
10
10
|
*
|
|
11
|
-
* 安全:token 强制启用 —— 未提供 --token
|
|
11
|
+
* 安全:token 强制启用 —— 未提供 --token/环境变量时自动生成并持久化到 ~/.pi/maestro-mobile-token。
|
|
12
12
|
* WS 握手校验 Origin(loopback 与绑定 host 白名单)。
|
|
13
13
|
*/
|
|
14
14
|
import { HostController } from "./host-controller.js";
|
|
@@ -16,6 +16,25 @@ import { MobileHostServer } from "./server/mobile-host-server.js";
|
|
|
16
16
|
import { MaestroStateReader } from "./maestro-state.js";
|
|
17
17
|
import { PiSdkRuntimeFactory } from "./pi/pi-sdk-runtime.js";
|
|
18
18
|
import { randomBytes } from "node:crypto";
|
|
19
|
+
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
20
|
+
import { homedir } from "node:os";
|
|
21
|
+
import { join } from "node:path";
|
|
22
|
+
const TOKEN_FILE = join(homedir(), ".pi", "maestro-mobile-token");
|
|
23
|
+
/** 读取或创建持久化 token(重启不变号,手机连接配置不失效) */
|
|
24
|
+
async function loadOrCreateToken() {
|
|
25
|
+
try {
|
|
26
|
+
const saved = (await readFile(TOKEN_FILE, "utf8")).trim();
|
|
27
|
+
if (saved.length >= 24)
|
|
28
|
+
return saved;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// 文件不存在 → 创建
|
|
32
|
+
}
|
|
33
|
+
const token = randomBytes(24).toString("hex");
|
|
34
|
+
await mkdir(join(homedir(), ".pi"), { recursive: true });
|
|
35
|
+
await writeFile(TOKEN_FILE, token + "\n", { mode: 0o600 });
|
|
36
|
+
return token;
|
|
37
|
+
}
|
|
19
38
|
function parseArgs(argv) {
|
|
20
39
|
const args = new Map();
|
|
21
40
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -29,8 +48,9 @@ function parseArgs(argv) {
|
|
|
29
48
|
}
|
|
30
49
|
}
|
|
31
50
|
const port = Number(args.get("port") ?? process.env.MAESTRO_MOBILE_PORT ?? "4739");
|
|
32
|
-
//
|
|
33
|
-
|
|
51
|
+
// 默认 0.0.0.0(手机直连);强制 token:未提供时自动生成并持久化到 ~/.pi/maestro-mobile-token,
|
|
52
|
+
// 重启不换号(手机连接配置不失效),换号需删除该文件或显式 --token
|
|
53
|
+
const host = args.get("host") ?? process.env.MAESTRO_MOBILE_HOST ?? "0.0.0.0";
|
|
34
54
|
const token = args.get("token") ?? process.env.MAESTRO_MOBILE_TOKEN ?? undefined;
|
|
35
55
|
const projectRoot = args.get("project-root") ?? process.env.MAESTRO_MOBILE_PROJECT_ROOT ?? process.cwd();
|
|
36
56
|
const pollMs = Number(args.get("poll-ms") ?? process.env.MAESTRO_MOBILE_POLL_MS ?? "5000");
|
|
@@ -41,12 +61,11 @@ function parseArgs(argv) {
|
|
|
41
61
|
}
|
|
42
62
|
async function main() {
|
|
43
63
|
const cli = parseArgs(process.argv.slice(2));
|
|
44
|
-
// P0-1
|
|
45
|
-
const token = cli.token ??
|
|
64
|
+
// P0-1:强制 token —— 未提供时生成并持久化到 ~/.pi/maestro-mobile-token(重启不变号)
|
|
65
|
+
const token = cli.token ?? (await loadOrCreateToken());
|
|
46
66
|
if (!cli.token) {
|
|
47
|
-
console.log(
|
|
67
|
+
console.log(`[maestro-mobile] no --token provided; using persisted token (${TOKEN_FILE}):`);
|
|
48
68
|
console.log(`[maestro-mobile] token: ${token}`);
|
|
49
|
-
console.log("[maestro-mobile] (set MAESTRO_MOBILE_TOKEN or pass --token to reuse a stable token)");
|
|
50
69
|
}
|
|
51
70
|
console.log(`[maestro-mobile] starting on ${cli.host}:${cli.port} (project: ${cli.projectRoot})`);
|
|
52
71
|
const runtimeFactory = new PiSdkRuntimeFactory();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-maestro-mobile",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Maestro Mobile Host — PC 端常驻服务:Pi agent 会话桥 + Monitor telemetry 投影 + 移动端 WS/HTTP 服务",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,10 +31,11 @@
|
|
|
31
31
|
"test:coverage": "vitest run --coverage",
|
|
32
32
|
"dev": "tsx src/cli.ts",
|
|
33
33
|
"start": "node dist/cli.js",
|
|
34
|
-
"prepublishOnly": "bash build.sh && vitest run"
|
|
34
|
+
"prepublishOnly": "pnpm --filter @maestro-mobile/shared build && bash build.sh && vitest run"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@earendil-works/pi-coding-agent": "^0.79.0",
|
|
38
|
+
"qrcode-terminal": "^0.12.0",
|
|
38
39
|
"ws": "^8.18.0"
|
|
39
40
|
},
|
|
40
41
|
"devDependencies": {
|