codex-weixin 0.2.4 → 0.2.6
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/README.en.md +1 -0
- package/README.md +1 -0
- package/dist/server/http-server.d.ts +3 -0
- package/dist/server/http-server.js +33 -2
- package/dist/server/http-server.js.map +1 -1
- package/dist/server/index.js +40 -14
- package/dist/server/index.js.map +1 -1
- package/dist/server/restart-helper.d.ts +1 -0
- package/dist/server/restart-helper.js +46 -0
- package/dist/server/restart-helper.js.map +1 -0
- package/dist/server/restart.d.ts +7 -0
- package/dist/server/restart.js +36 -0
- package/dist/server/restart.js.map +1 -0
- package/dist/server/update-manager.d.ts +51 -0
- package/dist/server/update-manager.js +230 -0
- package/dist/server/update-manager.js.map +1 -0
- package/dist/web/app.js +144 -0
- package/dist/web/index.html +38 -4
- package/dist/web/styles.css +24 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `codex-weixin` are documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.2.6] - 2026-07-15
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added non-blocking Web update checks with a "Later" or "Update now" prompt when a newer stable npm release is available.
|
|
10
|
+
- Added automatic npm Registry selection between the official registry and npmmirror, including stale-mirror verification and installation through the selected source.
|
|
11
|
+
- Added guarded global package installation followed by a detached, cross-platform service restart and automatic Web reconnection.
|
|
12
|
+
|
|
13
|
+
### Security
|
|
14
|
+
|
|
15
|
+
- Restricted Web-triggered updates to a server-verified stable `codex-weixin` version and fixed Registry allowlist, protected by the existing localhost, Origin, and request-token checks.
|
|
16
|
+
|
|
17
|
+
## [0.2.5] - 2026-07-15
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- Added a responsive GitHub shortcut to the Web header that opens the codex-weixin repository in a new tab.
|
|
22
|
+
|
|
5
23
|
## [0.2.4] - 2026-07-15
|
|
6
24
|
|
|
7
25
|
### Fixed
|
|
@@ -65,6 +83,8 @@ All notable changes to `codex-weixin` are documented in this file.
|
|
|
65
83
|
- Kept GPT-5.6 options available after selecting a different model.
|
|
66
84
|
- Removed extra message spacing and hid internal WeChat and Codex routing identifiers from the normal UI.
|
|
67
85
|
|
|
86
|
+
[0.2.6]: https://github.com/XavierJiezou/codex-weixin/releases/tag/v0.2.6
|
|
87
|
+
[0.2.5]: https://github.com/XavierJiezou/codex-weixin/releases/tag/v0.2.5
|
|
68
88
|
[0.2.4]: https://github.com/XavierJiezou/codex-weixin/releases/tag/v0.2.4
|
|
69
89
|
[0.2.3]: https://github.com/XavierJiezou/codex-weixin/releases/tag/v0.2.3
|
|
70
90
|
[0.2.2]: https://github.com/XavierJiezou/codex-weixin/releases/tag/v0.2.2
|
package/README.en.md
CHANGED
|
@@ -37,6 +37,7 @@ Screenshots live under `docs/images/screenshots/`. The Web management screenshot
|
|
|
37
37
|
| ✅ | Models and reasoning effort | Model-aware dropdowns loaded from app-server, including GPT-5.6 Sol, Terra, and Luna for IkunCoding. | Pending: `docs/images/screenshots/web-model-settings.png` |
|
|
38
38
|
| ✅ | Typing state and deduplication | Web typing state plus persistent sync cursors and message IDs prevent duplicate replies. | Pending: `docs/images/screenshots/wechat-typing.png` |
|
|
39
39
|
| ✅ | App-server first | New and resumed sessions prefer Codex app-server V2 and fall back to `codex exec` when unavailable. | Pending: `docs/images/screenshots/wechat-status.png` |
|
|
40
|
+
| ✅ | Web auto-update | Automatically selects npm or npmmirror, then installs, restarts, and reconnects from the Web prompt. | Pending: `docs/images/screenshots/web-auto-update.png` |
|
|
40
41
|
|
|
41
42
|
## Web management preview
|
|
42
43
|
|
package/README.md
CHANGED
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
| ✅ | 模型和推理强度 | 从 app-server 读取模型能力并通过下拉列表切换;IkunCoding 支持 GPT-5.6 Sol、Terra 和 Luna。 | 待补:`docs/images/screenshots/web-model-settings.png` |
|
|
38
38
|
| ✅ | 输入状态与去重 | Web 显示“对方正在输入…”,并持久记录同步游标和消息 ID,防止重复回复。 | 待补:`docs/images/screenshots/wechat-typing.png` |
|
|
39
39
|
| ✅ | App-server 优先 | 新旧会话优先使用 Codex app-server V2;不可用时自动回退到 `codex exec`。 | 待补:`docs/images/screenshots/wechat-status.png` |
|
|
40
|
+
| ✅ | Web 自动更新 | 后台自动选择 npm 官方源或 npmmirror;发现新版本后可在 Web 安装、重启并恢复连接。 | 待补:`docs/images/screenshots/web-auto-update.png` |
|
|
40
41
|
|
|
41
42
|
## Web 管理页预览
|
|
42
43
|
|
|
@@ -2,6 +2,7 @@ import type { StatePaths } from "../state/paths.js";
|
|
|
2
2
|
import type { CodexModelOption, CodexRuntimeInfo } from "../codex/app-server-runner.js";
|
|
3
3
|
import type { AccountManager } from "./account-manager.js";
|
|
4
4
|
import { LoginManager } from "./login-manager.js";
|
|
5
|
+
import { type UpdateService } from "./update-manager.js";
|
|
5
6
|
export type LocalHttpServerOptions = {
|
|
6
7
|
paths: StatePaths;
|
|
7
8
|
accountManager: AccountManager;
|
|
@@ -15,6 +16,8 @@ export type LocalHttpServerOptions = {
|
|
|
15
16
|
}>;
|
|
16
17
|
codexRuntimeCheck?: () => Promise<CodexRuntimeInfo>;
|
|
17
18
|
codexModelsCheck?: () => Promise<CodexModelOption[]>;
|
|
19
|
+
updateService?: UpdateService;
|
|
20
|
+
onUpdateInstalled?: (version: string) => void;
|
|
18
21
|
};
|
|
19
22
|
export type LocalHttpServer = {
|
|
20
23
|
url: string;
|
|
@@ -9,6 +9,7 @@ import { z } from "zod";
|
|
|
9
9
|
import { resolveCodexCommand } from "../codex/exec-runner.js";
|
|
10
10
|
import { loadConfig, saveConfig } from "../state/config.js";
|
|
11
11
|
import { LoginManager } from "./login-manager.js";
|
|
12
|
+
import { UpdateManager } from "./update-manager.js";
|
|
12
13
|
const bodySchema = z.record(z.string(), z.unknown());
|
|
13
14
|
const accountDisplayNameSchema = z.object({
|
|
14
15
|
displayName: z.string().max(40)
|
|
@@ -32,16 +33,20 @@ const webRoot = fileURLToPath(new URL("../web", import.meta.url));
|
|
|
32
33
|
const execFileAsync = promisify(execFile);
|
|
33
34
|
export async function startLocalHttpServer(options) {
|
|
34
35
|
const requestToken = crypto.randomBytes(24).toString("base64url");
|
|
36
|
+
const productVersion = options.productVersion ?? readProductVersion();
|
|
35
37
|
const loginManager = options.loginManager ?? new LoginManager({
|
|
36
38
|
paths: options.paths,
|
|
37
39
|
accountManager: options.accountManager
|
|
38
40
|
});
|
|
41
|
+
const updateService = options.updateService ?? new UpdateManager({ currentVersion: productVersion });
|
|
39
42
|
let actualPort = options.port ?? 8787;
|
|
40
43
|
const server = http.createServer((request, response) => {
|
|
41
44
|
void handleRequest(request, response, {
|
|
42
45
|
...options,
|
|
43
46
|
loginManager,
|
|
47
|
+
productVersion,
|
|
44
48
|
requestToken,
|
|
49
|
+
updateService,
|
|
45
50
|
port: actualPort
|
|
46
51
|
}).catch((error) => {
|
|
47
52
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -90,7 +95,7 @@ async function handleRequest(request, response, context) {
|
|
|
90
95
|
]);
|
|
91
96
|
sendJson(response, 200, {
|
|
92
97
|
product: "codex-weixin",
|
|
93
|
-
version: context.productVersion
|
|
98
|
+
version: context.productVersion,
|
|
94
99
|
requestToken: context.requestToken,
|
|
95
100
|
config,
|
|
96
101
|
codex,
|
|
@@ -101,6 +106,26 @@ async function handleRequest(request, response, context) {
|
|
|
101
106
|
});
|
|
102
107
|
return;
|
|
103
108
|
}
|
|
109
|
+
if (method === "GET" && url.pathname === "/api/update") {
|
|
110
|
+
sendJson(response, 200, await context.updateService.check());
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (method === "POST" && url.pathname === "/api/update") {
|
|
114
|
+
const result = await context.updateService.installLatest();
|
|
115
|
+
sendJson(response, 200, { ok: true, ...result, restarting: Boolean(context.onUpdateInstalled) });
|
|
116
|
+
if (context.onUpdateInstalled) {
|
|
117
|
+
const timer = setTimeout(() => {
|
|
118
|
+
try {
|
|
119
|
+
context.onUpdateInstalled?.(result.version);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.error(`[codex-weixin] unable to schedule restart: ${error instanceof Error ? error.message : String(error)}`);
|
|
123
|
+
}
|
|
124
|
+
}, 250);
|
|
125
|
+
timer.unref();
|
|
126
|
+
}
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
104
129
|
if (method === "GET" && url.pathname === "/api/accounts") {
|
|
105
130
|
sendJson(response, 200, { accounts: context.accountManager.listAccounts() });
|
|
106
131
|
return;
|
|
@@ -387,7 +412,13 @@ function optionalString(value) {
|
|
|
387
412
|
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
388
413
|
}
|
|
389
414
|
function errorStatus(message) {
|
|
390
|
-
|
|
415
|
+
if (/not found/i.test(message))
|
|
416
|
+
return 404;
|
|
417
|
+
if (/already in progress|no newer/i.test(message))
|
|
418
|
+
return 409;
|
|
419
|
+
if (/unable to verify|timed out/i.test(message))
|
|
420
|
+
return 503;
|
|
421
|
+
return /required|invalid|allowed|empty|too large|too many|exceed/i.test(message) ? 400 : 500;
|
|
391
422
|
}
|
|
392
423
|
function sendJson(response, status, value) {
|
|
393
424
|
if (response.headersSent)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/server/http-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/server/http-server.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAmD,MAAM,WAAW,CAAC;AAC5E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAI5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAsB,MAAM,qBAAqB,CAAC;AAExE,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACrD,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;CAChC,CAAC,CAAC;AACH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,yBAAyB,CAAC,CAAC;AAC/E,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IACpD,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AACH,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,wBAAwB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAqB1C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAA+B;IACxE,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAClE,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,kBAAkB,EAAE,CAAC;IACtE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,YAAY,CAAC;QAC5D,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,aAAa,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAAC;IACrG,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;QACrD,KAAK,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE;YACpC,GAAG,OAAO;YACV,YAAY;YACZ,cAAc;YACd,YAAY;YACZ,aAAa;YACb,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,OAAO;QACL,GAAG,EAAE,oBAAoB,UAAU,EAAE;QACrC,YAAY;QACZ,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;KAChH,CAAC;AACJ,CAAC;AAUD,KAAK,UAAU,aAAa,CAAC,OAAwB,EAAE,QAAwB,EAAE,OAAuB;IACtG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACvC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC;YACrE,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC3D,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7D,gBAAgB,CAAC,OAAO,CAAC;YACzB,eAAe,CAAC,OAAO,CAAC;SACzB,CAAC,CAAC;QACH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,OAAO,CAAC,cAAc;YAC/B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,MAAM;YACN,KAAK;YACL,YAAY;YACZ,WAAW;YACX,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE;YAC/C,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE;SAChD,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACvD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAC3D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACjG,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC;oBACH,OAAO,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,8CAA8C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACxH,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;QACzD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;QACzD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACxD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IACD,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAC9D,IAAI,MAAM,KAAK,KAAK,IAAI,UAAU,EAAE,CAAC;QACnC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC;IAClF,IAAI,MAAM,KAAK,MAAM,IAAI,aAAa,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;QAC3D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5F,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,IAAI,aAAa,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3F,OAAO;IACT,CAAC;IACD,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IACzE,IAAI,MAAM,KAAK,OAAO,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,wBAAwB,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QACzE,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;SACxF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,IAAI,YAAY,EAAE,CAAC;QACxC,MAAM,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACnE,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,oDAAoD,CAAC,CAAC;IAClG,IAAI,MAAM,KAAK,MAAM,IAAI,WAAW,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;QACzD,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;QAChF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,IAAI,WAAW,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1D,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;QACjF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,aAAa,CAClD,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAC3C,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EACzC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAC9B,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAC3B,CAAC;QACF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IACD,MAAM,eAAe,GAAG,SAAS,CAC/B,GAAG,CAAC,QAAQ,EACZ,sFAAsF,CACvF,CAAC;IACF,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAC/D,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAClE,eAAe,CAAC,SAAS,EACzB,eAAe,CAAC,SAAS,EACzB,eAAe,CAAC,SAAS,EACzB,eAAe,CAChB,CAAC;QACF,sBAAsB,CACpB,OAAO,EACP,QAAQ,EACR,UAAU,EACV,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,EACxC,MAAM,KAAK,MAAM,CAClB,CAAC;QACF,OAAO;IACT,CAAC;IACD,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,6CAA6C,CAAC,CAAC;IAC7F,IAAI,MAAM,KAAK,KAAK,IAAI,aAAa,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;QACnH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC;SACzF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,IAAI,aAAa,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC;QAC9F,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,MAAM,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,eAAe,CAClD,aAAa,CAAC,SAAS,EACvB,aAAa,CAAC,SAAS,EACvB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,CACb;SACF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,IAAI,aAAa,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;QAC9D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC/H,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,IAAI,aAAa,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;QAC3D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5H,OAAO;IACT,CAAC;IACD,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,qCAAqC,CAAC,CAAC;IACpF,IAAI,MAAM,KAAK,OAAO,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QACnE,IAAI,OAAO,CAAC;QACZ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,aAAa,CAC5C,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,SAAS,EACtB,IAAI,CAAC,KAAK,CACX,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1D,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,oBAAoB,CACnD,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,SAAS,EACtB;gBACE,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9D,CACF,CAAC;QACJ,CAAC;QACD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,OAAO;SACR,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,IAAI,YAAY,EAAE,CAAC;QACxC,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QACrF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,IAAI,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QAC7H,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE;YACxB,GAAG,OAAO;YACV,GAAG,KAAK;YACR,UAAU;YACV,iBAAiB;YACjB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,SAAS;YACrD,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;YAClC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;SACrC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;QAC9C,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;YACjC,YAAY,EAAE,MAAM,gBAAgB,CAAC,OAAO,CAAC;YAC7C,WAAW,EAAE,MAAM,eAAe,CAAC,OAAO,CAAC;SAC5C,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IACD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAA0B,CAAC;QACjI,OAAO,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAuB;IAC/C,OAAO,CAAC,OAAO,CAAC,iBAAiB,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC;AAC/F,CAAC;AAED,SAAS,eAAe,CAAC,OAAuB;IAC9C,OAAO,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC;AACzF,CAAC;AAED,SAAS,WAAW,CAAC,QAAwB,EAAE,QAAgB;IAC7D,MAAM,KAAK,GAAmD;QAC5D,GAAG,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,0BAA0B,EAAE;QAC7D,aAAa,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,0BAA0B,EAAE;QACvE,cAAc,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE;QAC9D,cAAc,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE;QAC9D,aAAa,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,yBAAyB,EAAE;QACtE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gCAAgC,EAAE;QACrE,uBAAuB,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,gCAAgC,EAAE;QACjG,uBAAuB,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,gCAAgC,EAAE;QACjG,uBAAuB,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,gCAAgC,EAAE;KAClG,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IACD,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAwB;IAClD,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;IACxD,QAAQ,CAAC,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,SAAS,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACrD,QAAQ,CAAC,SAAS,CAAC,yBAAyB,EAAE,2HAA2H,CAAC,CAAC;AAC7K,CAAC;AAED,SAAS,aAAa,CAAC,IAAwB,EAAE,IAAY;IAC3D,OAAO,IAAI,KAAK,aAAa,IAAI,EAAE,IAAI,IAAI,KAAK,aAAa,IAAI,EAAE,CAAC;AACtE,CAAC;AAED,SAAS,eAAe,CAAC,MAA0B,EAAE,IAAY;IAC/D,OAAO,CAAC,MAAM,IAAI,MAAM,KAAK,oBAAoB,IAAI,EAAE,IAAI,MAAM,KAAK,oBAAoB,IAAI,EAAE,CAAC;AACnG,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS,CAAC;AACvE,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE,OAAe;IAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAwB;IAClD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAAwB,EAAE,QAAgB;IACtE,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,QAAQ,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC;QACvB,IAAI,KAAK,GAAG,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,OAAwB,EACxB,cAAsB;IAEtB,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACpD,MAAM,qBAAqB,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;IAC9F,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3D,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,wBAAwB,CAAC,CAAC;IACrF,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;YACjD,OAAO,EAAE,EAAE,cAAc,EAAE,qBAAqB,EAAE;SACnD,CAAC,CAAC,QAAQ,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,WAAW,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,oCAAoC,oBAAoB,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACpD,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,UAAU,GAAG,cAAc,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,+BAA+B,cAAc,QAAQ,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,IAAY;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IACvF,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,GAAG,CAAC;IAC3C,IAAI,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,GAAG,CAAC;IAC9D,IAAI,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,GAAG,CAAC;IAC5D,OAAO,2DAA2D,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC/F,CAAC;AAED,SAAS,QAAQ,CAAC,QAAwB,EAAE,MAAc,EAAE,KAAc;IACxE,IAAI,QAAQ,CAAC,WAAW;QAAE,OAAO;IACjC,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAC;IACtE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,kBAAkB,CACzB,QAAiC,EACjC,SAAiB,EACjB,SAAiB;IAEjB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAChC,GAAG,OAAO;QACV,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC5D,GAAG,UAAU;YACb,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzB,GAAG,EAAE;oBACH,eAAe;oBACf,kBAAkB,CAAC,SAAS,CAAC;oBAC7B,kBAAkB,CAAC,SAAS,CAAC;oBAC7B,UAAU;oBACV,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC9B,aAAa;oBACb,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;iBACzB,CAAC,IAAI,CAAC,GAAG,CAAC;aACZ,CAAC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAwB,EACxB,QAAwB,EACxB,UAAiC,EACjC,QAAiB,EACjB,QAAiB;IAEjB,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,QAAQ,CAAC,GAAG,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IACxC,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,QAAQ,CAAC,SAAS,CAChB,qBAAqB,EACrB,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,sBAAsB,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CACjG,CAAC;IACF,IAAI,KAAK,EAAE,CAAC;QACV,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,GAAG,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3B,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC1B,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB,EAAE,IAAY;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1D,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;IAC9D,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,YAAY,GAAG,KAAK,EAAE,CAAC;QACtH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,OAAQ;QACN,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,iBAAiB;QACzB,MAAM,EAAE,2BAA2B;QACnC,OAAO,EAAE,iCAAiC;QAC1C,MAAM,EAAE,iBAAiB;KACC,CAAC,SAAS,CAAC,IAAI,0BAA0B,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9G,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;IAC5F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACzF,CAAC;AACH,CAAC"}
|
package/dist/server/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
2
3
|
import open from "open";
|
|
3
4
|
import { resolveStatePaths } from "../state/paths.js";
|
|
4
5
|
import { AccountManager } from "./account-manager.js";
|
|
5
6
|
import { parseServerCommand, serverHelpText } from "./arguments.js";
|
|
6
7
|
import { startLocalHttpServer } from "./http-server.js";
|
|
7
8
|
import { acquireServiceProcessLock } from "./process-lock.js";
|
|
9
|
+
import { launchRestartHelper } from "./restart.js";
|
|
8
10
|
async function main() {
|
|
9
11
|
const stateDir = process.env.CODEX_WEIXIN_STATE_DIR;
|
|
10
12
|
const port = parsePort(process.env.CODEX_WEIXIN_PORT);
|
|
@@ -12,8 +14,45 @@ async function main() {
|
|
|
12
14
|
const processLock = acquireServiceProcessLock(paths.root);
|
|
13
15
|
const accountManager = new AccountManager({ paths });
|
|
14
16
|
let server;
|
|
17
|
+
let shuttingDown = false;
|
|
18
|
+
let restartScheduled = false;
|
|
19
|
+
const shutdown = async () => {
|
|
20
|
+
if (shuttingDown)
|
|
21
|
+
return;
|
|
22
|
+
shuttingDown = true;
|
|
23
|
+
try {
|
|
24
|
+
await accountManager.stopAll();
|
|
25
|
+
await server?.close();
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
processLock.release();
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const scheduleRestart = (version) => {
|
|
32
|
+
if (restartScheduled)
|
|
33
|
+
return;
|
|
34
|
+
restartScheduled = true;
|
|
35
|
+
const timer = setTimeout(() => {
|
|
36
|
+
try {
|
|
37
|
+
launchRestartHelper({
|
|
38
|
+
parentPid: process.pid,
|
|
39
|
+
entryPath: fileURLToPath(import.meta.url),
|
|
40
|
+
stateDir: paths.root,
|
|
41
|
+
port
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
restartScheduled = false;
|
|
46
|
+
console.error(`[codex-weixin] unable to restart after update: ${error instanceof Error ? error.message : String(error)}`);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
console.log(`[codex-weixin] updated to ${version}; restarting`);
|
|
50
|
+
void shutdown().finally(() => process.exit(0));
|
|
51
|
+
}, 500);
|
|
52
|
+
timer.unref();
|
|
53
|
+
};
|
|
15
54
|
try {
|
|
16
|
-
server = await startLocalHttpServer({ paths, accountManager, port });
|
|
55
|
+
server = await startLocalHttpServer({ paths, accountManager, port, onUpdateInstalled: scheduleRestart });
|
|
17
56
|
await accountManager.startAll();
|
|
18
57
|
}
|
|
19
58
|
catch (error) {
|
|
@@ -29,19 +68,6 @@ async function main() {
|
|
|
29
68
|
console.warn(`Unable to open the browser automatically: ${error instanceof Error ? error.message : String(error)}`);
|
|
30
69
|
});
|
|
31
70
|
}
|
|
32
|
-
let shuttingDown = false;
|
|
33
|
-
const shutdown = async () => {
|
|
34
|
-
if (shuttingDown)
|
|
35
|
-
return;
|
|
36
|
-
shuttingDown = true;
|
|
37
|
-
try {
|
|
38
|
-
await accountManager.stopAll();
|
|
39
|
-
await server.close();
|
|
40
|
-
}
|
|
41
|
-
finally {
|
|
42
|
-
processLock.release();
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
71
|
process.once("SIGINT", () => void shutdown().finally(() => process.exit(0)));
|
|
46
72
|
process.once("SIGTERM", () => void shutdown().finally(() => process.exit(0)));
|
|
47
73
|
}
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
const [parentPidValue, entryPathValue] = process.argv.slice(2);
|
|
5
|
+
const parentPid = Number(parentPidValue);
|
|
6
|
+
const entryPath = path.resolve(entryPathValue || "");
|
|
7
|
+
if (!Number.isInteger(parentPid) || parentPid <= 0 || !entryPathValue || !fs.existsSync(entryPath)) {
|
|
8
|
+
process.exitCode = 1;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
await waitForProcessExit(parentPid, 60_000);
|
|
12
|
+
await delay(400);
|
|
13
|
+
const child = spawn(process.execPath, [entryPath], {
|
|
14
|
+
detached: true,
|
|
15
|
+
env: process.env,
|
|
16
|
+
shell: false,
|
|
17
|
+
stdio: "ignore",
|
|
18
|
+
windowsHide: true
|
|
19
|
+
});
|
|
20
|
+
child.once("error", () => {
|
|
21
|
+
process.exitCode = 1;
|
|
22
|
+
});
|
|
23
|
+
child.unref();
|
|
24
|
+
}
|
|
25
|
+
async function waitForProcessExit(pid, timeoutMs) {
|
|
26
|
+
const deadline = Date.now() + timeoutMs;
|
|
27
|
+
while (processExists(pid)) {
|
|
28
|
+
if (Date.now() >= deadline) {
|
|
29
|
+
throw new Error("Timed out waiting for codex-weixin to stop");
|
|
30
|
+
}
|
|
31
|
+
await delay(200);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function processExists(pid) {
|
|
35
|
+
try {
|
|
36
|
+
process.kill(pid, 0);
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
return error.code === "EPERM";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function delay(ms) {
|
|
44
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=restart-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart-helper.js","sourceRoot":"","sources":["../../src/server/restart-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;AAErD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IACnG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC;KAAM,CAAC;IACN,MAAM,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;QACjD,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QACvB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,GAAW,EAAE,SAAiB;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAQ,KAA+B,CAAC,IAAI,KAAK,OAAO,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
export function launchRestartHelper(options) {
|
|
6
|
+
if (!Number.isInteger(options.parentPid) || options.parentPid <= 0) {
|
|
7
|
+
throw new Error("Invalid parent process id");
|
|
8
|
+
}
|
|
9
|
+
if (!path.isAbsolute(options.entryPath) || !path.isAbsolute(options.stateDir)) {
|
|
10
|
+
throw new Error("Restart paths must be absolute");
|
|
11
|
+
}
|
|
12
|
+
if (!Number.isInteger(options.port) || options.port <= 0 || options.port > 65535) {
|
|
13
|
+
throw new Error("Invalid restart port");
|
|
14
|
+
}
|
|
15
|
+
const helperPath = fileURLToPath(new URL("./restart-helper.js", import.meta.url));
|
|
16
|
+
if (!fs.existsSync(helperPath) || !fs.existsSync(options.entryPath)) {
|
|
17
|
+
throw new Error("Updated service entry point is unavailable");
|
|
18
|
+
}
|
|
19
|
+
const child = spawn(process.execPath, [helperPath, String(options.parentPid), options.entryPath], {
|
|
20
|
+
detached: true,
|
|
21
|
+
env: {
|
|
22
|
+
...process.env,
|
|
23
|
+
CODEX_WEIXIN_OPEN: "0",
|
|
24
|
+
CODEX_WEIXIN_PORT: String(options.port),
|
|
25
|
+
CODEX_WEIXIN_STATE_DIR: options.stateDir
|
|
26
|
+
},
|
|
27
|
+
shell: false,
|
|
28
|
+
stdio: "ignore",
|
|
29
|
+
windowsHide: true
|
|
30
|
+
});
|
|
31
|
+
child.once("error", (error) => {
|
|
32
|
+
console.error(`[codex-weixin] unable to launch restart helper: ${error.message}`);
|
|
33
|
+
});
|
|
34
|
+
child.unref();
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=restart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/server/restart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AASzC,MAAM,UAAU,mBAAmB,CAAC,OAA6B;IAC/D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE;QAChG,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,iBAAiB,EAAE,GAAG;YACtB,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YACvC,sBAAsB,EAAE,OAAO,CAAC,QAAQ;SACzC;QACD,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC5B,OAAO,CAAC,KAAK,CAAC,mDAAmD,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
declare const UPDATE_REGISTRY_URLS: {
|
|
2
|
+
readonly official: "https://registry.npmjs.org";
|
|
3
|
+
readonly npmmirror: "https://registry.npmmirror.com";
|
|
4
|
+
};
|
|
5
|
+
export type UpdateRegistryId = keyof typeof UPDATE_REGISTRY_URLS;
|
|
6
|
+
export type UpdateStatus = {
|
|
7
|
+
currentVersion: string;
|
|
8
|
+
latestVersion?: string;
|
|
9
|
+
updateAvailable: boolean;
|
|
10
|
+
checkedAt: string;
|
|
11
|
+
registry?: UpdateRegistryId;
|
|
12
|
+
error?: string;
|
|
13
|
+
};
|
|
14
|
+
export type UpdateInstallResult = {
|
|
15
|
+
version: string;
|
|
16
|
+
registry: UpdateRegistryId;
|
|
17
|
+
};
|
|
18
|
+
export type UpdateService = {
|
|
19
|
+
check: (force?: boolean) => Promise<UpdateStatus>;
|
|
20
|
+
installLatest: () => Promise<UpdateInstallResult>;
|
|
21
|
+
};
|
|
22
|
+
export type UpdateManagerOptions = {
|
|
23
|
+
currentVersion: string;
|
|
24
|
+
fetch?: typeof globalThis.fetch;
|
|
25
|
+
install?: (version: string, registry: UpdateRegistryId) => Promise<void>;
|
|
26
|
+
now?: () => number;
|
|
27
|
+
cacheTtlMs?: number;
|
|
28
|
+
checkTimeoutMs?: number;
|
|
29
|
+
};
|
|
30
|
+
export declare class UpdateManager implements UpdateService {
|
|
31
|
+
private readonly options;
|
|
32
|
+
private readonly fetchImpl;
|
|
33
|
+
private readonly installImpl;
|
|
34
|
+
private readonly now;
|
|
35
|
+
private readonly cacheTtlMs;
|
|
36
|
+
private readonly checkTimeoutMs;
|
|
37
|
+
private cached?;
|
|
38
|
+
private checkPromise?;
|
|
39
|
+
private installing;
|
|
40
|
+
constructor(options: UpdateManagerOptions);
|
|
41
|
+
check(force?: boolean): Promise<UpdateStatus>;
|
|
42
|
+
installLatest(): Promise<UpdateInstallResult>;
|
|
43
|
+
private fetchStatus;
|
|
44
|
+
private fetchLatestFromRegistry;
|
|
45
|
+
}
|
|
46
|
+
export declare function isNewerVersion(currentVersion: string, candidateVersion: string): boolean;
|
|
47
|
+
export declare function buildNpmInstallCommand(version: string, registry: UpdateRegistryId, platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv, nodePath?: string): {
|
|
48
|
+
command: string;
|
|
49
|
+
args: string[];
|
|
50
|
+
};
|
|
51
|
+
export {};
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
const UPDATE_REGISTRY_URLS = {
|
|
3
|
+
official: "https://registry.npmjs.org",
|
|
4
|
+
npmmirror: "https://registry.npmmirror.com"
|
|
5
|
+
};
|
|
6
|
+
const UPDATE_REGISTRY_IDS = Object.keys(UPDATE_REGISTRY_URLS);
|
|
7
|
+
const MAX_REGISTRY_RESPONSE_BYTES = 64 * 1024;
|
|
8
|
+
const MAX_INSTALL_OUTPUT_BYTES = 20 * 1024;
|
|
9
|
+
const STABLE_VERSION_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;
|
|
10
|
+
export class UpdateManager {
|
|
11
|
+
options;
|
|
12
|
+
fetchImpl;
|
|
13
|
+
installImpl;
|
|
14
|
+
now;
|
|
15
|
+
cacheTtlMs;
|
|
16
|
+
checkTimeoutMs;
|
|
17
|
+
cached;
|
|
18
|
+
checkPromise;
|
|
19
|
+
installing = false;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
this.options = options;
|
|
22
|
+
this.fetchImpl = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
23
|
+
this.installImpl = options.install ?? installGlobalVersion;
|
|
24
|
+
this.now = options.now ?? (() => Date.now());
|
|
25
|
+
this.cacheTtlMs = options.cacheTtlMs ?? 30 * 60 * 1000;
|
|
26
|
+
this.checkTimeoutMs = options.checkTimeoutMs ?? 5_000;
|
|
27
|
+
}
|
|
28
|
+
async check(force = false) {
|
|
29
|
+
const now = this.now();
|
|
30
|
+
if (!force && this.cached && this.cached.expiresAt > now) {
|
|
31
|
+
return { ...this.cached.status };
|
|
32
|
+
}
|
|
33
|
+
if (!this.checkPromise) {
|
|
34
|
+
this.checkPromise = this.fetchStatus().finally(() => {
|
|
35
|
+
this.checkPromise = undefined;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return { ...await this.checkPromise };
|
|
39
|
+
}
|
|
40
|
+
async installLatest() {
|
|
41
|
+
if (this.installing) {
|
|
42
|
+
throw new Error("Update is already in progress");
|
|
43
|
+
}
|
|
44
|
+
this.installing = true;
|
|
45
|
+
try {
|
|
46
|
+
const status = await this.check(true);
|
|
47
|
+
if (status.error) {
|
|
48
|
+
throw new Error("Unable to verify the latest codex-weixin version");
|
|
49
|
+
}
|
|
50
|
+
if (!status.latestVersion || !status.updateAvailable) {
|
|
51
|
+
throw new Error("No newer codex-weixin version is available");
|
|
52
|
+
}
|
|
53
|
+
if (!status.registry) {
|
|
54
|
+
throw new Error("Unable to select an npm Registry");
|
|
55
|
+
}
|
|
56
|
+
const version = requireStableVersion(status.latestVersion);
|
|
57
|
+
await this.installImpl(version, status.registry);
|
|
58
|
+
return { version, registry: status.registry };
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
this.installing = false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async fetchStatus() {
|
|
65
|
+
const checkedAtMs = this.now();
|
|
66
|
+
const checkedAt = new Date(checkedAtMs).toISOString();
|
|
67
|
+
const base = {
|
|
68
|
+
currentVersion: this.options.currentVersion,
|
|
69
|
+
updateAvailable: false,
|
|
70
|
+
checkedAt
|
|
71
|
+
};
|
|
72
|
+
const controller = new AbortController();
|
|
73
|
+
const timer = setTimeout(() => controller.abort(), this.checkTimeoutMs);
|
|
74
|
+
try {
|
|
75
|
+
requireStableVersion(this.options.currentVersion);
|
|
76
|
+
const probes = UPDATE_REGISTRY_IDS.map((candidate, index) => this.fetchLatestFromRegistry(candidate, controller.signal)
|
|
77
|
+
.then((result) => ({ index, result })));
|
|
78
|
+
const first = await Promise.any(probes);
|
|
79
|
+
let selected = first.result;
|
|
80
|
+
if (!isNewerVersion(this.options.currentVersion, selected.latestVersion)) {
|
|
81
|
+
const remaining = probes.filter((_probe, index) => index !== first.index);
|
|
82
|
+
try {
|
|
83
|
+
const fallback = await Promise.any(remaining);
|
|
84
|
+
if (isNewerVersion(this.options.currentVersion, fallback.result.latestVersion)) {
|
|
85
|
+
selected = fallback.result;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// The first valid registry remains usable when every fallback fails.
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
controller.abort();
|
|
93
|
+
const status = {
|
|
94
|
+
...base,
|
|
95
|
+
latestVersion: selected.latestVersion,
|
|
96
|
+
updateAvailable: isNewerVersion(this.options.currentVersion, selected.latestVersion),
|
|
97
|
+
registry: selected.registry
|
|
98
|
+
};
|
|
99
|
+
this.cached = { expiresAt: checkedAtMs + this.cacheTtlMs, status };
|
|
100
|
+
return status;
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
const status = { ...base, error: "无法检查新版本" };
|
|
104
|
+
this.cached = { expiresAt: checkedAtMs + Math.min(this.cacheTtlMs, 60_000), status };
|
|
105
|
+
return status;
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
clearTimeout(timer);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async fetchLatestFromRegistry(registry, signal) {
|
|
112
|
+
const response = await this.fetchImpl(`${UPDATE_REGISTRY_URLS[registry]}/codex-weixin/latest`, {
|
|
113
|
+
headers: { Accept: "application/json" },
|
|
114
|
+
signal
|
|
115
|
+
});
|
|
116
|
+
if (!response.ok) {
|
|
117
|
+
throw new Error(`${registry} npm Registry returned HTTP ${response.status}`);
|
|
118
|
+
}
|
|
119
|
+
const text = await response.text();
|
|
120
|
+
if (Buffer.byteLength(text, "utf8") > MAX_REGISTRY_RESPONSE_BYTES) {
|
|
121
|
+
throw new Error(`${registry} npm Registry response is too large`);
|
|
122
|
+
}
|
|
123
|
+
const value = JSON.parse(text);
|
|
124
|
+
return {
|
|
125
|
+
latestVersion: requireStableVersion(value.version),
|
|
126
|
+
registry
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export function isNewerVersion(currentVersion, candidateVersion) {
|
|
131
|
+
const current = parseStableVersion(currentVersion);
|
|
132
|
+
const candidate = parseStableVersion(candidateVersion);
|
|
133
|
+
for (let index = 0; index < current.length; index += 1) {
|
|
134
|
+
if (candidate[index] !== current[index]) {
|
|
135
|
+
return candidate[index] > current[index];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
export function buildNpmInstallCommand(version, registry, platform = process.platform, env = process.env, nodePath = process.execPath) {
|
|
141
|
+
const safeVersion = requireStableVersion(version);
|
|
142
|
+
const safeRegistry = requireRegistryId(registry);
|
|
143
|
+
const installArgs = [
|
|
144
|
+
"install",
|
|
145
|
+
"--global",
|
|
146
|
+
`codex-weixin@${safeVersion}`,
|
|
147
|
+
`--registry=${UPDATE_REGISTRY_URLS[safeRegistry]}`,
|
|
148
|
+
"--no-audit",
|
|
149
|
+
"--no-fund"
|
|
150
|
+
];
|
|
151
|
+
const npmExecPath = env.npm_execpath;
|
|
152
|
+
if (npmExecPath && /\.(?:c?js|mjs)$/i.test(npmExecPath)) {
|
|
153
|
+
return { command: nodePath, args: [npmExecPath, ...installArgs] };
|
|
154
|
+
}
|
|
155
|
+
if (platform === "win32") {
|
|
156
|
+
return {
|
|
157
|
+
command: env.ComSpec || "cmd.exe",
|
|
158
|
+
args: ["/d", "/s", "/c", "npm", ...installArgs]
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
return { command: "npm", args: installArgs };
|
|
162
|
+
}
|
|
163
|
+
async function installGlobalVersion(version, registry) {
|
|
164
|
+
const command = buildNpmInstallCommand(version, registry);
|
|
165
|
+
await new Promise((resolve, reject) => {
|
|
166
|
+
const child = spawn(command.command, command.args, {
|
|
167
|
+
env: process.env,
|
|
168
|
+
shell: false,
|
|
169
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
170
|
+
windowsHide: true
|
|
171
|
+
});
|
|
172
|
+
let output = "";
|
|
173
|
+
let settled = false;
|
|
174
|
+
const appendOutput = (chunk) => {
|
|
175
|
+
output = `${output}${chunk.toString("utf8")}`.slice(-MAX_INSTALL_OUTPUT_BYTES);
|
|
176
|
+
};
|
|
177
|
+
child.stdout.on("data", appendOutput);
|
|
178
|
+
child.stderr.on("data", appendOutput);
|
|
179
|
+
const timer = setTimeout(() => {
|
|
180
|
+
if (settled)
|
|
181
|
+
return;
|
|
182
|
+
settled = true;
|
|
183
|
+
child.kill();
|
|
184
|
+
reject(new Error("npm update timed out"));
|
|
185
|
+
}, 5 * 60 * 1000);
|
|
186
|
+
child.once("error", (error) => finishInstall(child, timer, () => {
|
|
187
|
+
if (settled)
|
|
188
|
+
return;
|
|
189
|
+
settled = true;
|
|
190
|
+
reject(new Error(`Unable to start npm: ${error.message}`));
|
|
191
|
+
}));
|
|
192
|
+
child.once("exit", (code) => finishInstall(child, timer, () => {
|
|
193
|
+
if (settled)
|
|
194
|
+
return;
|
|
195
|
+
settled = true;
|
|
196
|
+
if (code === 0) {
|
|
197
|
+
resolve();
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const permissionHint = /EACCES|EPERM|permission/i.test(output)
|
|
201
|
+
? " npm does not have permission to update the global package."
|
|
202
|
+
: "";
|
|
203
|
+
reject(new Error(`npm update failed with exit code ${code ?? "unknown"}.${permissionHint}`));
|
|
204
|
+
}));
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
function finishInstall(child, timer, finish) {
|
|
208
|
+
clearTimeout(timer);
|
|
209
|
+
child.stdout.removeAllListeners("data");
|
|
210
|
+
child.stderr.removeAllListeners("data");
|
|
211
|
+
finish();
|
|
212
|
+
}
|
|
213
|
+
function requireStableVersion(value) {
|
|
214
|
+
if (typeof value !== "string"
|
|
215
|
+
|| !STABLE_VERSION_PATTERN.test(value)
|
|
216
|
+
|| value.split(".").some((part) => !Number.isSafeInteger(Number(part)))) {
|
|
217
|
+
throw new Error("Invalid stable version");
|
|
218
|
+
}
|
|
219
|
+
return value;
|
|
220
|
+
}
|
|
221
|
+
function requireRegistryId(value) {
|
|
222
|
+
if (value === "official" || value === "npmmirror")
|
|
223
|
+
return value;
|
|
224
|
+
throw new Error("Invalid npm Registry");
|
|
225
|
+
}
|
|
226
|
+
function parseStableVersion(value) {
|
|
227
|
+
const version = requireStableVersion(value);
|
|
228
|
+
return version.split(".").map(Number);
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=update-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-manager.js","sourceRoot":"","sources":["../../src/server/update-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/web/app.js
CHANGED
|
@@ -14,12 +14,17 @@ const state = {
|
|
|
14
14
|
loadingMessages: false,
|
|
15
15
|
sendingMessage: false,
|
|
16
16
|
savingSessionRuntime: false,
|
|
17
|
+
updateInfo: null,
|
|
18
|
+
updateInstalling: false,
|
|
17
19
|
selectedAccountId: "",
|
|
18
20
|
chatFiles: []
|
|
19
21
|
};
|
|
20
22
|
|
|
21
23
|
const MAX_CHAT_FILES = 10;
|
|
22
24
|
const MAX_CHAT_FILE_BYTES = 50 * 1024 * 1024;
|
|
25
|
+
const DISMISSED_UPDATE_KEY = "codex-weixin.dismissed-update";
|
|
26
|
+
const UPDATE_CHECK_INTERVAL_MS = 6 * 60 * 60 * 1000;
|
|
27
|
+
const UPDATE_RECONNECT_TIMEOUT_MS = 90 * 1000;
|
|
23
28
|
|
|
24
29
|
const els = {};
|
|
25
30
|
|
|
@@ -49,6 +54,14 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
49
54
|
qrDialog: document.querySelector("#qrDialog"),
|
|
50
55
|
qrFrame: document.querySelector("#qrFrame"),
|
|
51
56
|
qrStatus: document.querySelector("#qrStatus"),
|
|
57
|
+
updateDialog: document.querySelector("#updateDialog"),
|
|
58
|
+
updateCurrentVersion: document.querySelector("#updateCurrentVersion"),
|
|
59
|
+
updateLatestVersion: document.querySelector("#updateLatestVersion"),
|
|
60
|
+
updateProgress: document.querySelector("#updateProgress"),
|
|
61
|
+
updateProgressTitle: document.querySelector("#updateProgressTitle"),
|
|
62
|
+
updateProgressDetail: document.querySelector("#updateProgressDetail"),
|
|
63
|
+
updateLaterButton: document.querySelector("#updateLaterButton"),
|
|
64
|
+
updateNowButton: document.querySelector("#updateNowButton"),
|
|
52
65
|
accountDialog: document.querySelector("#accountDialog"),
|
|
53
66
|
sessionDialog: document.querySelector("#sessionDialog")
|
|
54
67
|
});
|
|
@@ -81,6 +94,12 @@ function bindEvents() {
|
|
|
81
94
|
els.sessionsList.addEventListener("click", (event) => void handleSessionAction(event));
|
|
82
95
|
els.sessionAccountTabs.addEventListener("click", handleSessionAccountTab);
|
|
83
96
|
els.qrDialog.addEventListener("close", stopLoginPoll);
|
|
97
|
+
els.updateLaterButton.addEventListener("click", dismissUpdate);
|
|
98
|
+
els.updateNowButton.addEventListener("click", () => void installUpdate());
|
|
99
|
+
els.updateDialog.addEventListener("cancel", (event) => {
|
|
100
|
+
event.preventDefault();
|
|
101
|
+
if (!state.updateInstalling) dismissUpdate();
|
|
102
|
+
});
|
|
84
103
|
window.addEventListener("hashchange", () => showView(location.hash.slice(1) || "accounts", false));
|
|
85
104
|
}
|
|
86
105
|
|
|
@@ -98,12 +117,137 @@ async function bootstrap() {
|
|
|
98
117
|
renderAll();
|
|
99
118
|
showView(location.hash.slice(1) || "accounts", false);
|
|
100
119
|
window.setInterval(() => void refreshData(false), 5000);
|
|
120
|
+
void checkForUpdate();
|
|
121
|
+
window.setInterval(() => void checkForUpdate(), UPDATE_CHECK_INTERVAL_MS);
|
|
101
122
|
} catch (error) {
|
|
102
123
|
toast(error.message, true);
|
|
103
124
|
els.accountsList.innerHTML = emptyState("server-off", "无法连接本机服务", "请重新启动 codex-weixin");
|
|
104
125
|
}
|
|
105
126
|
}
|
|
106
127
|
|
|
128
|
+
async function checkForUpdate() {
|
|
129
|
+
if (state.updateInstalling) return;
|
|
130
|
+
try {
|
|
131
|
+
const info = await api("/api/update", { token: false });
|
|
132
|
+
if (!info.updateAvailable || !info.latestVersion || dismissedUpdateVersion() === info.latestVersion) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
state.updateInfo = info;
|
|
136
|
+
els.updateCurrentVersion.textContent = `v${String(info.currentVersion).replace(/^v/i, "")}`;
|
|
137
|
+
els.updateLatestVersion.textContent = `v${String(info.latestVersion).replace(/^v/i, "")}`;
|
|
138
|
+
resetUpdateDialog();
|
|
139
|
+
if (!els.updateDialog.open) els.updateDialog.showModal();
|
|
140
|
+
drawIcons();
|
|
141
|
+
} catch {
|
|
142
|
+
// Update checks are best-effort and must not interrupt the local management page.
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function dismissUpdate() {
|
|
147
|
+
if (state.updateInstalling) return;
|
|
148
|
+
const version = state.updateInfo?.latestVersion;
|
|
149
|
+
if (version) {
|
|
150
|
+
try {
|
|
151
|
+
localStorage.setItem(DISMISSED_UPDATE_KEY, version);
|
|
152
|
+
} catch {
|
|
153
|
+
// Dismissing still works when browser storage is unavailable.
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
state.updateInfo = null;
|
|
157
|
+
if (els.updateDialog.open) els.updateDialog.close();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
async function installUpdate() {
|
|
161
|
+
if (state.updateInstalling || !state.updateInfo?.latestVersion) return;
|
|
162
|
+
const previousToken = state.requestToken;
|
|
163
|
+
state.updateInstalling = true;
|
|
164
|
+
els.updateLaterButton.disabled = true;
|
|
165
|
+
els.updateNowButton.disabled = true;
|
|
166
|
+
els.updateNowButton.querySelector("span").textContent = "更新中";
|
|
167
|
+
setUpdateProgress(
|
|
168
|
+
"正在安装更新",
|
|
169
|
+
`正在连接${updateRegistryName(state.updateInfo.registry)},微信服务将继续运行`
|
|
170
|
+
);
|
|
171
|
+
try {
|
|
172
|
+
const result = await api("/api/update", { method: "POST" });
|
|
173
|
+
const targetVersion = result.version;
|
|
174
|
+
state.updateInfo = { ...state.updateInfo, latestVersion: targetVersion, registry: result.registry };
|
|
175
|
+
els.updateLatestVersion.textContent = `v${String(targetVersion).replace(/^v/i, "")}`;
|
|
176
|
+
if (!result.restarting) {
|
|
177
|
+
throw new Error("更新已安装,但自动重启未启动,请手动重启 codex-weixin");
|
|
178
|
+
}
|
|
179
|
+
setUpdateProgress(
|
|
180
|
+
"正在重启服务",
|
|
181
|
+
`已通过${updateRegistryName(result.registry)}完成安装,正在恢复微信连接`
|
|
182
|
+
);
|
|
183
|
+
await waitForUpdatedService(targetVersion, previousToken);
|
|
184
|
+
setUpdateProgress("更新完成", "新版本已启动,正在刷新页面");
|
|
185
|
+
window.location.reload();
|
|
186
|
+
} catch (error) {
|
|
187
|
+
state.updateInstalling = false;
|
|
188
|
+
els.updateLaterButton.disabled = false;
|
|
189
|
+
els.updateNowButton.disabled = false;
|
|
190
|
+
els.updateNowButton.querySelector("span").textContent = "重试更新";
|
|
191
|
+
setUpdateProgress("更新未完成", error.message || "请稍后重试", true);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
async function waitForUpdatedService(targetVersion, previousToken) {
|
|
196
|
+
const deadline = Date.now() + UPDATE_RECONNECT_TIMEOUT_MS;
|
|
197
|
+
while (Date.now() < deadline) {
|
|
198
|
+
try {
|
|
199
|
+
const response = await fetch("/api/bootstrap", { cache: "no-store" });
|
|
200
|
+
const data = await response.json().catch(() => ({}));
|
|
201
|
+
if (
|
|
202
|
+
response.ok
|
|
203
|
+
&& data.version === targetVersion
|
|
204
|
+
&& data.requestToken
|
|
205
|
+
&& data.requestToken !== previousToken
|
|
206
|
+
) {
|
|
207
|
+
state.requestToken = data.requestToken;
|
|
208
|
+
state.version = data.version;
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
} catch {
|
|
212
|
+
// The service is expected to be briefly unavailable while it restarts.
|
|
213
|
+
}
|
|
214
|
+
await delay(900);
|
|
215
|
+
}
|
|
216
|
+
throw new Error("新版本已安装,但服务未能自动恢复,请手动重启 codex-weixin");
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
function resetUpdateDialog() {
|
|
220
|
+
state.updateInstalling = false;
|
|
221
|
+
els.updateProgress.hidden = true;
|
|
222
|
+
els.updateProgress.classList.remove("is-error");
|
|
223
|
+
els.updateLaterButton.disabled = false;
|
|
224
|
+
els.updateNowButton.disabled = false;
|
|
225
|
+
els.updateNowButton.querySelector("span").textContent = "立即更新";
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
function setUpdateProgress(title, detail, error = false) {
|
|
229
|
+
els.updateProgress.hidden = false;
|
|
230
|
+
els.updateProgress.classList.toggle("is-error", error);
|
|
231
|
+
els.updateProgressTitle.textContent = title;
|
|
232
|
+
els.updateProgressDetail.textContent = detail;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function updateRegistryName(registry) {
|
|
236
|
+
return registry === "npmmirror" ? "国内镜像" : "npm 官方源";
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
function dismissedUpdateVersion() {
|
|
240
|
+
try {
|
|
241
|
+
return localStorage.getItem(DISMISSED_UPDATE_KEY) || "";
|
|
242
|
+
} catch {
|
|
243
|
+
return "";
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function delay(ms) {
|
|
248
|
+
return new Promise((resolve) => window.setTimeout(resolve, ms));
|
|
249
|
+
}
|
|
250
|
+
|
|
107
251
|
async function refreshData(notify) {
|
|
108
252
|
try {
|
|
109
253
|
const previousSession = selectedSession();
|
package/dist/web/index.html
CHANGED
|
@@ -28,10 +28,15 @@
|
|
|
28
28
|
<button class="tab" type="button" data-view="sessions">会话</button>
|
|
29
29
|
<button class="tab" type="button" data-view="settings">设置</button>
|
|
30
30
|
</nav>
|
|
31
|
-
<
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
<div class="header-actions">
|
|
32
|
+
<a class="icon-button github-link" href="https://github.com/XavierJiezou/codex-weixin" target="_blank" rel="noopener noreferrer" title="前往 GitHub" aria-label="前往 codex-weixin GitHub 仓库">
|
|
33
|
+
<i data-lucide="github"></i>
|
|
34
|
+
</a>
|
|
35
|
+
<button class="button button-primary header-action" id="addAccountButton" type="button" title="添加微信" aria-label="添加微信">
|
|
36
|
+
<i data-lucide="scan-line"></i>
|
|
37
|
+
<span>添加微信</span>
|
|
38
|
+
</button>
|
|
39
|
+
</div>
|
|
35
40
|
</div>
|
|
36
41
|
</header>
|
|
37
42
|
|
|
@@ -191,6 +196,35 @@
|
|
|
191
196
|
</section>
|
|
192
197
|
</main>
|
|
193
198
|
|
|
199
|
+
<dialog class="modal update-modal" id="updateDialog" aria-labelledby="updateDialogTitle">
|
|
200
|
+
<div class="modal-header update-modal-header">
|
|
201
|
+
<div>
|
|
202
|
+
<p class="eyebrow">PRODUCT UPDATE</p>
|
|
203
|
+
<h2 id="updateDialogTitle">发现新版本</h2>
|
|
204
|
+
</div>
|
|
205
|
+
<span class="update-modal-icon" aria-hidden="true"><i data-lucide="package"></i></span>
|
|
206
|
+
</div>
|
|
207
|
+
<div class="modal-body update-modal-body">
|
|
208
|
+
<div class="update-version-flow" aria-label="版本升级">
|
|
209
|
+
<span><small>当前版本</small><strong id="updateCurrentVersion">--</strong></span>
|
|
210
|
+
<i data-lucide="arrow-right" aria-hidden="true"></i>
|
|
211
|
+
<span class="is-latest"><small>最新版本</small><strong id="updateLatestVersion">--</strong></span>
|
|
212
|
+
</div>
|
|
213
|
+
<p class="update-description">更新期间微信连接会短暂中断,完成后服务将自动重启并恢复连接。</p>
|
|
214
|
+
<div class="update-progress" id="updateProgress" aria-live="polite" hidden>
|
|
215
|
+
<span class="spinner" aria-hidden="true"></span>
|
|
216
|
+
<div><strong id="updateProgressTitle">正在安装更新</strong><span id="updateProgressDetail">请保持此页面打开</span></div>
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
<div class="modal-footer">
|
|
220
|
+
<button class="button button-secondary" id="updateLaterButton" type="button">稍后</button>
|
|
221
|
+
<button class="button button-primary" id="updateNowButton" type="button">
|
|
222
|
+
<i data-lucide="download"></i>
|
|
223
|
+
<span>立即更新</span>
|
|
224
|
+
</button>
|
|
225
|
+
</div>
|
|
226
|
+
</dialog>
|
|
227
|
+
|
|
194
228
|
<dialog class="modal qr-modal" id="qrDialog">
|
|
195
229
|
<div class="modal-header">
|
|
196
230
|
<div>
|
package/dist/web/styles.css
CHANGED
|
@@ -44,7 +44,8 @@ button:disabled { cursor: not-allowed; opacity: .48; }
|
|
|
44
44
|
.tab { min-width: 82px; height: 30px; border: 0; border-radius: 4px; color: var(--ink-soft); background: transparent; font-size: 13px; font-weight: 650; }
|
|
45
45
|
.tab:hover { color: var(--ink); }
|
|
46
46
|
.tab.is-active { color: var(--ink); background: var(--surface); box-shadow: 0 1px 3px rgb(20 27 25 / 12%); }
|
|
47
|
-
.header-
|
|
47
|
+
.header-actions { justify-self: end; display: flex; align-items: center; gap: 8px; }
|
|
48
|
+
.github-link { color: var(--ink); text-decoration: none; }
|
|
48
49
|
|
|
49
50
|
.button { min-height: 38px; padding: 0 14px; border: 1px solid transparent; border-radius: var(--radius); display: inline-flex; align-items: center; justify-content: center; gap: 8px; font-size: 13px; font-weight: 700; white-space: nowrap; transition: background-color .16s ease, border-color .16s ease, transform .16s ease; }
|
|
50
51
|
.button svg { width: 17px; height: 17px; }
|
|
@@ -267,6 +268,28 @@ input:focus, select:focus, textarea:focus { border-color: var(--focus); outline:
|
|
|
267
268
|
.modal-header h2 { font-size: 18px; }
|
|
268
269
|
.modal-body { padding: 22px 20px; }
|
|
269
270
|
.modal-footer { min-height: 70px; padding: 14px 20px; border-top: 1px solid var(--line); display: flex; align-items: center; justify-content: end; gap: 10px; }
|
|
271
|
+
.update-modal { width: min(calc(100% - 32px), 520px); }
|
|
272
|
+
.update-modal-header { background: #f8faf8; }
|
|
273
|
+
.update-modal-icon { width: 42px; height: 42px; flex: 0 0 42px; border-radius: var(--radius); color: var(--green-dark); background: var(--green-soft); display: grid; place-items: center; }
|
|
274
|
+
.update-modal-icon svg { width: 21px; height: 21px; }
|
|
275
|
+
.update-modal-body { display: grid; gap: 17px; }
|
|
276
|
+
.update-version-flow { min-height: 86px; padding: 14px; border: 1px solid var(--line); border-radius: var(--radius); background: var(--canvas); display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 14px; }
|
|
277
|
+
.update-version-flow > span { min-width: 0; }
|
|
278
|
+
.update-version-flow small { margin-bottom: 5px; color: var(--ink-soft); font-size: 9px; font-weight: 750; display: block; }
|
|
279
|
+
.update-version-flow strong { overflow: hidden; font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; display: block; }
|
|
280
|
+
.update-version-flow > svg { width: 17px; height: 17px; color: #84908a; }
|
|
281
|
+
.update-version-flow .is-latest strong { color: var(--green-dark); }
|
|
282
|
+
.update-description { margin: 0; color: var(--ink-soft); font-size: 11px; line-height: 1.65; }
|
|
283
|
+
.update-progress { min-height: 64px; padding: 12px 14px; border: 1px solid #b9ddc7; border-radius: var(--radius); background: var(--green-soft); display: flex; align-items: center; gap: 13px; }
|
|
284
|
+
.update-progress[hidden] { display: none; }
|
|
285
|
+
.update-progress .spinner { width: 25px; height: 25px; flex: 0 0 25px; border-color: rgb(8 114 57 / 18%); border-top-color: var(--green-dark); }
|
|
286
|
+
.update-progress strong, .update-progress span { display: block; }
|
|
287
|
+
.update-progress strong { color: var(--green-dark); font-size: 11px; }
|
|
288
|
+
.update-progress div span { margin-top: 3px; color: #466453; font-size: 9px; }
|
|
289
|
+
.update-progress.is-error { border-color: #efc5c3; background: var(--red-soft); }
|
|
290
|
+
.update-progress.is-error .spinner { display: none; }
|
|
291
|
+
.update-progress.is-error strong { color: var(--red); }
|
|
292
|
+
.update-progress.is-error div span { color: #7c4442; }
|
|
270
293
|
.qr-stage { min-height: 390px; padding: 28px 20px 22px; display: grid; justify-items: center; align-content: center; }
|
|
271
294
|
.qr-frame { width: 300px; height: 300px; border: 1px solid var(--line); border-radius: var(--radius); background: white; display: grid; place-items: center; overflow: hidden; }
|
|
272
295
|
.qr-frame img { width: 100%; height: 100%; object-fit: contain; }
|