@kyun.si/codex-hongguo 0.0.21 → 0.0.22
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/.codex-plugin/plugin.json +1 -1
- package/README.en.md +26 -53
- package/README.md +26 -53
- package/dist/cli/main.mjs +14 -4
- package/dist/server/index.mjs +61 -53
- package/dist/setup/check.mjs +19 -9
- package/dist/ui/player.html +2 -2
- package/licenses/fflate-LICENSE +21 -0
- package/licenses/ffmpeg/COPYING.GPLv3 +674 -0
- package/licenses/ffmpeg/NOTICE.md +24 -0
- package/licenses/ffmpeg/ffmpeg-artifacts.json +46 -0
- package/package.json +5 -1
- package/skills/hongguo-setup/SKILL.md +1 -1
package/README.en.md
CHANGED
|
@@ -6,6 +6,27 @@ Watch Hongguo short dramas in the right-hand panel while Codex works on a task.
|
|
|
6
6
|
|
|
7
7
|
After installation and Hook review, continue working normally. The optional **Watch while you wait** card offers up to three shows per turn. It prioritizes **Continue watching**, or **Watch next** when the saved episode is complete and another episode is available. Other slots rotate unwatched shows. Clicking a title opens the player in that chat and starts muted playback.
|
|
8
8
|
|
|
9
|
+
## Installation & Setup
|
|
10
|
+
|
|
11
|
+
Supports macOS and Linux (x64/arm64). Requires Node.js >=22.16 with npm and a Codex CLI supporting npm plugin sources. The plugin prepares its playback component automatically; no separate FFmpeg installation is needed.
|
|
12
|
+
|
|
13
|
+
Install with npm:
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
npx @kyun.si/codex-hongguo@latest setup
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The command checks the environment, downloads and verifies the playback component, then installs the plugin through Codex's native marketplace. The first installation requires a network connection; later runs reuse the local cache. Open a new local chat after installing, run plugin Setup, and review the Hooks.
|
|
20
|
+
|
|
21
|
+
### Post-Install Setup
|
|
22
|
+
|
|
23
|
+
- **Run the Setup guide**: Run **Setup** from the plugin details view (which invokes `hongguo-setup`), or say `配置红果短剧` in a local conversation. The setup check verifies Node, the progress database, the playback component, and whether all three plugin Hooks are trusted and enabled.
|
|
24
|
+
- **In-player getting started guide**: The player shows a getting started guide (`使用指南`) the first time it opens. Clicking **Browse shows** (`开始选剧`) dismisses the guide. It appears again if an update requires hook review. You can reopen it anytime from **Settings → Getting started** (`设置 → 使用指南`) and click **Check again** (`重新检查`), or run **Diagnostics** (`自检`) in Settings.
|
|
25
|
+
- **Review and trust Hooks**: For task-start and task-end playback control, open Codex Desktop **Settings → Hooks** (`设置 → Hooks`), review and trust Hongguo's `UserPromptSubmit`, `Stop`, and `Interrupt` hooks, and then run the check again. Installation and Setup never trust Hooks automatically on your behalf and never treat past turn records as proof that Hooks are configured; if host trust status cannot be read, it is shown as **Unverified** (`待确认`). You can watch manually before completing Hook setup.
|
|
26
|
+
- **No extra accounts or permissions**: Normal browsing and playback do not require a Hongguo account, API key, or browser automation permissions.
|
|
27
|
+
|
|
28
|
+
## Screenshots
|
|
29
|
+
|
|
9
30
|
**Show catalog**: Browse recommendations, search for shows, or continue where you left off.
|
|
10
31
|
|
|
11
32
|

|
|
@@ -40,79 +61,32 @@ Open **Settings** at the top right of the player, make your changes, and click *
|
|
|
40
61
|
|
|
41
62
|
The switches are independent, saved across restarts, and shared by all chats. Other open players sync saved settings. Autoplay requires an open player with an episode selected; it does not choose a show or reopen a closed player. Manual pausing lasts for the current task; the autoplay switch determines whether the next task resumes playback. Updates preserve saved choices.
|
|
42
63
|
|
|
43
|
-
##
|
|
44
|
-
|
|
45
|
-
Requires macOS or Linux, Node.js >=22.16 with npm, a Codex CLI supporting npm plugin sources, and FFmpeg (>=8 recommended). On macOS, install dependencies with `brew install node ffmpeg`. Local verification uses Codex CLI 0.157.1. Linux desktop verification is pending. The offline ZIP includes a native Windows x64 preview launcher; Windows npm installation remains gated until desktop acceptance. See the [Windows preview guide](https://github.com/mreasonyang/codex-hongguo/blob/main/docs/windows-support.md).
|
|
46
|
-
|
|
47
|
-
The npm release is available. Installation and updates use the native Codex plugin marketplace.
|
|
48
|
-
|
|
49
|
-
### Build from source
|
|
50
|
-
|
|
51
|
-
In addition to the runtime dependencies, building requires Go >=1.25 to generate the Windows launcher.
|
|
52
|
-
|
|
53
|
-
```sh
|
|
54
|
-
git clone https://github.com/mreasonyang/codex-hongguo.git
|
|
55
|
-
cd codex-hongguo
|
|
56
|
-
npm ci
|
|
57
|
-
npm run package
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
This generates `release/codex-hongguo-<version>/` and a ZIP with the same name. Enter the generated directory and follow the installation command below. See [CONTRIBUTING.md](CONTRIBUTING.md) for the full development workflow.
|
|
61
|
-
|
|
62
|
-
### Offline package
|
|
63
|
-
|
|
64
|
-
Extract `codex-hongguo-<version>.zip` into a permanent directory, or enter `release/codex-hongguo-<version>/` after building from source. Run from that directory:
|
|
65
|
-
|
|
66
|
-
```sh
|
|
67
|
-
node plugins/codex-hongguo/bin/codex-hongguo.mjs setup --marketplace .
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
The offline archive uses the same build as npm, with automatic runtime discovery. Repeat this command for offline updates, pointing `--marketplace` at the new directory. Always repeat this option for custom sources; omitting it selects the default GitHub marketplace.
|
|
71
|
-
|
|
72
|
-
### Online installation
|
|
73
|
-
|
|
74
|
-
Install with npm:
|
|
75
|
-
|
|
76
|
-
```sh
|
|
77
|
-
npx @kyun.si/codex-hongguo@latest setup
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
The setup command checks dependencies and installs a pinned package version through Codex's native marketplace. The package includes JavaScript dependencies, the player and WASM; Node, npm and FFmpeg remain local prerequisites. The launcher discovers them automatically. Open a new local chat after installing, run plugin Setup, and review the Hooks.
|
|
81
|
-
|
|
82
|
-
### Post-Install Setup
|
|
83
|
-
|
|
84
|
-
- **Run the Setup guide**: Run **Setup** from the plugin details view (which invokes `hongguo-setup`), or say `配置红果短剧` in a local conversation. The setup check verifies Node, the progress database, FFmpeg, and whether all three plugin Hooks are trusted and enabled.
|
|
85
|
-
- **In-player getting started guide**: The player shows a getting started guide (`使用指南`) the first time it opens. Clicking **Browse shows** (`开始选剧`) dismisses the guide. It appears again if an update requires hook review. You can reopen it anytime from **Settings → Getting started** (`设置 → 使用指南`) and click **Check again** (`重新检查`), or run **Diagnostics** (`自检`) in Settings.
|
|
86
|
-
- **Review and trust Hooks**: For task-start and task-end playback control, open Codex Desktop **Settings → Hooks** (`设置 → Hooks`), review and trust Hongguo's `UserPromptSubmit`, `Stop`, and `Interrupt` hooks, and then run the check again. Installation and Setup never trust Hooks automatically on your behalf and never treat past turn records as proof that Hooks are configured; if host trust status cannot be read, it is shown as **Unverified** (`待确认`). You can watch manually before completing Hook setup.
|
|
87
|
-
- **No extra accounts or permissions**: Normal browsing and playback do not require a Hongguo account, API key, or browser automation permissions.
|
|
88
|
-
|
|
89
|
-
### Troubleshooting
|
|
64
|
+
## Troubleshooting
|
|
90
65
|
|
|
91
66
|
- **No task suggestions**: Enable suggestions, trust all three Hooks, and retry in a new local turn with no visible player. If the catalog returns no candidates or the host does not display the card, use the right-side **+** to open the player.
|
|
92
|
-
- **
|
|
67
|
+
- **Playback component preparation failed**: Check your connection and run the installation command again, or click **Check again** in **Settings → Getting started**. The plugin retries preparation automatically.
|
|
93
68
|
- **Turn linkage is unverified**: Check all three events in Codex **Settings → Hooks**. A passing environment check does not establish that automatic pausing works; manual playback remains available.
|
|
94
69
|
|
|
95
70
|
- **Playback pauses too often**: Turn off **Pause automatically when a task ends** in the player's Settings and save to keep watching continuously.
|
|
96
71
|
- **A new task does not resume playback**: Enable and save **Play automatically when a task starts**. Keep the player open in that chat with an episode selected. New defaults do not override a previously saved off setting.
|
|
97
72
|
|
|
98
|
-
|
|
73
|
+
## Updating, Disabling & Uninstalling
|
|
99
74
|
|
|
100
75
|
Close all open player panels and split-view browser tabs before updating or uninstalling. Open a new conversation to verify after managing plugins.
|
|
101
76
|
|
|
102
|
-
|
|
77
|
+
Update with:
|
|
103
78
|
|
|
104
79
|
```sh
|
|
105
80
|
npx @kyun.si/codex-hongguo@latest update
|
|
106
81
|
```
|
|
107
82
|
|
|
108
|
-
|
|
83
|
+
Updates preserve viewing progress and settings. Open a new chat afterward and review changed Hooks when prompted.
|
|
109
84
|
|
|
110
85
|
- **Disable or uninstall**: Disable the plugin in Codex plugin settings, or run `codex plugin remove codex-hongguo@hongguo-local`. After uninstalling, you can keep or manually remove the dedicated user data directory below:
|
|
111
86
|
|
|
112
87
|
| OS | User Data Directory |
|
|
113
88
|
| --- | --- |
|
|
114
89
|
| macOS | `~/Library/Application Support/CodexHongguo/` |
|
|
115
|
-
| Windows x64 (preview) | `%LOCALAPPDATA%\CodexHongguo\` |
|
|
116
90
|
| Linux | `codex-hongguo` under `XDG_DATA_HOME` (defaults to `~/.local/share/codex-hongguo/`) |
|
|
117
91
|
|
|
118
92
|
Inside this folder, `player.sqlite` and its WAL/SHM files store progress, turn state, recommendation rotation and settings. `media/` holds prepared full episodes, capped at 40 episodes and 1 GiB with protection for active files. `panel-media/` contains temporary panel fragments with separate cleanup; its size is outside that 1 GiB limit. `device/` holds the upstream SDK's anonymous device profile. Raw hook payloads, prompts and assistant replies are not written to disk. Third-party runtime dependency notices are under `licenses/` in the plugin root.
|
|
@@ -128,4 +102,3 @@ Inside this folder, `player.sqlite` and its WAL/SHM files store progress, turn s
|
|
|
128
102
|
| Progress persistence | Saves playback position locally every ~5 seconds while playing, as well as on pause, seek, episode change, or panel hide. |
|
|
129
103
|
| Turn linkage & autoplay | Task-start autoplay and task-end automatic pausing both default to on; see Global playback settings above. Autoplay next is enabled by default and remembers changes. |
|
|
130
104
|
| Appearance & locale | Adapts to narrow sidebars (episodes below video) and wide panels (episodes beside video), following Codex light/dark themes and Chinese/English UI locales. |
|
|
131
|
-
| Verification status | macOS local regression, isolated npm/npx installation and source migration, live host catalog/episode access, fragment decoding, and public npm installation and updates have been verified. See [GitHub Actions](https://github.com/mreasonyang/codex-hongguo/actions) for cross-platform CI status. Full Windows/Linux desktop and natural task-playback acceptance remain pending. GitHub Releases installers have not been published. |
|
package/README.md
CHANGED
|
@@ -6,6 +6,27 @@
|
|
|
6
6
|
|
|
7
7
|
完成安装并信任 Hooks 后,照常发任务,对话里的「等待时看一集」每轮最多推荐三部。已有进度优先显示「继续观看」;本集已看完且还有后续分集时显示「看下一集」。其余位置轮换没看过的剧,点剧名即可在当前聊天里打开播放器并静音开播。
|
|
8
8
|
|
|
9
|
+
## 安装与配置
|
|
10
|
+
|
|
11
|
+
支持 macOS 和 Linux(x64/arm64)。需要 Node.js >=22.16(含 npm)和支持 npm 插件源的 Codex CLI。播放组件由插件自动准备,无需单独安装 FFmpeg。
|
|
12
|
+
|
|
13
|
+
使用 npm 安装:
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
npx @kyun.si/codex-hongguo@latest setup
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
命令会检查运行环境、自动下载并校验播放组件,再通过 Codex 原生市场安装插件。首次安装需要联网,之后复用本机缓存。安装完成后打开新的本地聊天,运行插件 Setup 并审查 Hooks。
|
|
20
|
+
|
|
21
|
+
### 安装后配置
|
|
22
|
+
|
|
23
|
+
- **运行设置引导(Setup)**:安装后可在插件详情页运行 **Setup**(调用 `hongguo-setup`),或在本地对话中直接说“配置红果短剧”。引导会检查 Node、进度库、播放组件,以及本插件三个 Hooks 是否已信任并启用。
|
|
24
|
+
- **播放器使用指南**:播放器首次打开会显示使用指南,点击「开始选剧」可收起指南。更新后如有 Hooks 待审查,指南会再次提示。之后可随时从「设置 → 使用指南」重开并点击「重新检查」,也可在「设置 → 自检」查看本机运行环境。
|
|
25
|
+
- **审查并信任 Hooks**:任务开始和结束联动需要你在 Codex 桌面 **设置 → Hooks** 中找到红果短剧,审查并信任 `UserPromptSubmit`、`Stop` 和 `Interrupt` 三个事件,完成后重新检查。安装脚本与设置引导不会替用户自动信任 Hooks,也不会把历史回合记录当成配置成功;读取不到宿主信任状态时会显示「待确认」。未完成 Hooks 配置前仍可先手动观看。
|
|
26
|
+
- **账号与权限**:日常浏览和观看不需要红果账号、API Key 或浏览器自动化权限。
|
|
27
|
+
|
|
28
|
+
## 界面预览
|
|
29
|
+
|
|
9
30
|
**选剧目录**:浏览推荐、搜索剧目,或继续观看上次的剧集。
|
|
10
31
|
|
|
11
32
|

|
|
@@ -40,78 +61,31 @@
|
|
|
40
61
|
|
|
41
62
|
两个开关独立保存,所有聊天共用,其他已打开的播放器会同步设置。自动播放需要播放器保持打开且已有选中的剧集;它不会自动选剧或重新打开已关闭的播放器。手动暂停在当前任务内保持有效,下一轮是否续播取决于自动播放开关。升级会保留已保存的选择。
|
|
42
63
|
|
|
43
|
-
##
|
|
44
|
-
|
|
45
|
-
需要 macOS 或 Linux、Node.js >=22.16(含 npm)、支持 npm 插件源的 Codex CLI,以及 FFmpeg(建议 >=8)。macOS 可用 `brew install node ffmpeg` 安装依赖。本机验收使用 Codex CLI 0.157.1;Linux 尚待桌面实机验收。Windows x64 原生启动器已随离线包提供,当前为试用,npm 安装限制将在实机验收通过后开放;见 [Windows 试用说明](https://github.com/mreasonyang/codex-hongguo/blob/main/docs/windows-support.md)。
|
|
46
|
-
|
|
47
|
-
npm 正式发行包已发布。安装与更新通过 Codex 原生插件市场完成。
|
|
48
|
-
|
|
49
|
-
### 从源码构建
|
|
50
|
-
|
|
51
|
-
除运行依赖外,构建还需要 Go >=1.25,用于生成 Windows 启动器。
|
|
52
|
-
|
|
53
|
-
```sh
|
|
54
|
-
git clone https://github.com/mreasonyang/codex-hongguo.git
|
|
55
|
-
cd codex-hongguo
|
|
56
|
-
npm ci
|
|
57
|
-
npm run package
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
构建会生成 `release/codex-hongguo-<版本号>/` 和同名 ZIP。进入生成的目录,按下一节的命令安装;完整开发说明见 [CONTRIBUTING.md](CONTRIBUTING.md)。
|
|
61
|
-
|
|
62
|
-
### 离线包
|
|
63
|
-
|
|
64
|
-
将 `codex-hongguo-<版本号>.zip` 解压到长期保留的目录;若刚从源码构建,可直接进入生成的 `release/codex-hongguo-<版本号>/`。在该目录运行:
|
|
65
|
-
|
|
66
|
-
```sh
|
|
67
|
-
node plugins/codex-hongguo/bin/codex-hongguo.mjs setup --marketplace .
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
离线包与 npm 包使用同一构建产物,启动器自动发现运行环境。离线更新时重复上述命令,将 `--marketplace` 指向新版解压目录。自定义来源的后续安装或更新也应显式带上此参数;省略时会选择默认 GitHub 市场。
|
|
71
|
-
|
|
72
|
-
### 在线安装
|
|
73
|
-
|
|
74
|
-
使用 npm 安装:
|
|
75
|
-
|
|
76
|
-
```sh
|
|
77
|
-
npx @kyun.si/codex-hongguo@latest setup
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
向导检查运行环境,再通过 Codex 原生市场安装确定版本的完整插件包。包内包含 JavaScript 依赖、播放器和 WASM;Node、npm 与 FFmpeg 仍需本机准备,启动器会自动寻找程序。安装完成后打开新的本地聊天,运行插件 Setup 并审查 Hooks。
|
|
81
|
-
|
|
82
|
-
### 安装后配置
|
|
83
|
-
|
|
84
|
-
- **运行设置引导(Setup)**:安装后可在插件详情页运行 **Setup**(调用 `hongguo-setup`),或在本地对话中直接说“配置红果短剧”。引导会检查 Node、进度库、FFmpeg,以及本插件三个 Hooks 是否已信任并启用。
|
|
85
|
-
- **播放器使用指南**:播放器首次打开会显示使用指南,点击「开始选剧」可收起指南。更新后如有 Hooks 待审查,指南会再次提示。之后可随时从「设置 → 使用指南」重开并点击「重新检查」,也可在「设置 → 自检」查看本机运行环境。
|
|
86
|
-
- **审查并信任 Hooks**:任务开始和结束联动需要你在 Codex 桌面 **设置 → Hooks** 中找到红果短剧,审查并信任 `UserPromptSubmit`、`Stop` 和 `Interrupt` 三个事件,完成后重新检查。安装脚本与设置引导不会替用户自动信任 Hooks,也不会把历史回合记录当成配置成功;读取不到宿主信任状态时会显示「待确认」。未完成 Hooks 配置前仍可先手动观看。
|
|
87
|
-
- **账号与权限**:日常浏览和观看不需要红果账号、API Key 或浏览器自动化权限。
|
|
88
|
-
|
|
89
|
-
### 排查问题
|
|
64
|
+
## 排查问题
|
|
90
65
|
|
|
91
66
|
- **没有任务推荐**:确认推荐开关已开启、三个 Hooks 已信任,并在没有可见播放器的新本地回合中重试。片库没有返回候选或宿主未展示卡片时,仍可从右侧 + 打开播放器。
|
|
92
|
-
-
|
|
67
|
+
- **播放组件准备失败**:检查网络后重新运行安装命令,或从播放器「设置 → 使用指南」点击「重新检查」。插件会自动重试准备。
|
|
93
68
|
- **回合联动显示「待确认」**:到 Codex「设置 → Hooks」核对三个事件。环境检查通过不等于回合联动已生效;未完成时可先手动观看。
|
|
94
69
|
- **任务结束时频繁暂停**:在播放器「设置」中关闭「任务结束自动暂停」并保存,即可持续播放。
|
|
95
70
|
- **新任务开始没有续播**:确认「任务开始自动播放」已开启并保存,且播放器在对应聊天中保持打开、已选中剧集。新默认值不会覆盖此前手动保存的关闭设置。
|
|
96
71
|
|
|
97
|
-
|
|
72
|
+
## 更新、禁用与卸载
|
|
98
73
|
|
|
99
74
|
更新或卸载前,请先关闭所有播放器面板和内置浏览器分屏;管理插件后请使用新会话验证。
|
|
100
75
|
|
|
101
|
-
|
|
76
|
+
更新命令:
|
|
102
77
|
|
|
103
78
|
```sh
|
|
104
79
|
npx @kyun.si/codex-hongguo@latest update
|
|
105
80
|
```
|
|
106
81
|
|
|
107
|
-
|
|
82
|
+
更新会保留观看进度和设置。完成后打开新聊天,并按提示重新审查 Hooks。
|
|
108
83
|
|
|
109
84
|
- **禁用与卸载**:可从插件设置中禁用,或运行 `codex plugin remove codex-hongguo@hongguo-local` 卸载。卸载后可按需保留或手动清理以下专用数据目录:
|
|
110
85
|
|
|
111
86
|
| 系统 | 用户数据目录 |
|
|
112
87
|
| --- | --- |
|
|
113
88
|
| macOS | `~/Library/Application Support/CodexHongguo/` |
|
|
114
|
-
| Windows x64(试用) | `%LOCALAPPDATA%\CodexHongguo\` |
|
|
115
89
|
| Linux | `XDG_DATA_HOME` 下的 `codex-hongguo`(缺省为 `~/.local/share/codex-hongguo/`) |
|
|
116
90
|
|
|
117
91
|
目录内 `player.sqlite`(及其 WAL/SHM 文件)保存观看进度、回合状态、推荐轮换与播放器设置;`media/` 保存本机处理后的整集缓存(上限 40 集、1 GiB,活动文件有保护期);`panel-media/` 保存单独回收的临时面板分片,其占用不计入整集缓存的 1 GiB 上限;`device/` 为上游 SDK 管理的匿名设备档案。本插件不将 Hook 原始输入、提示词和模型回复写入磁盘。第三方运行时依赖的许可证位于插件根目录 `licenses/`。
|
|
@@ -127,4 +101,3 @@ npx @kyun.si/codex-hongguo@latest update
|
|
|
127
101
|
| 进度保存 | 播放期间每约 5 秒自动保存一次进度,暂停、拖动、换集或隐藏面板时也会立即保存。 |
|
|
128
102
|
| 回合联动与连播 | 任务开始自动播放、任务结束自动暂停均默认开启,详见「全局播放设置」。连播默认开启,当前集播完自动播放下一集;关闭后也会记住。 |
|
|
129
103
|
| 外观与语言 | 选剧页与播放器跟随 Codex 浅色/深色外观及中英文界面;窄侧栏在画面下方显示选集栏,宽面板将选集栏置于画面右侧。 |
|
|
130
|
-
| 验证范围 | macOS 本地回归、隔离 npm/npx 安装与旧来源迁移、真实宿主片库/分集及分片解码,以及公网 npm 安装与更新已验证。跨平台 CI 状态见 [GitHub Actions](https://github.com/mreasonyang/codex-hongguo/actions)。Windows/Linux 桌面实机与自然任务联动的完整验收仍待完成;GitHub Releases 安装包尚未发布。 |
|
package/dist/cli/main.mjs
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import {createRequire as __cr} from 'node:module';const require=__cr(import.meta.url);
|
|
2
|
-
var ze=Object.create;var W=Object.defineProperty;var Be=Object.getOwnPropertyDescriptor;var Ke=Object.getOwnPropertyNames;var Je=Object.getPrototypeOf,Ye=Object.prototype.hasOwnProperty;var E=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var x=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(n){throw t=0,n}};var Ve=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ke(t))!Ye.call(e,o)&&o!==n&&W(e,o,{get:()=>t[o],enumerable:!(r=Be(t,o))||r.enumerable});return e};var Qe=(e,t,n)=>(n=e!=null?ze(Je(e)):{},Ve(t||!e||!e.__esModule?W(n,"default",{value:e,enumerable:!0}):n,e));var Y=x((Dt,J)=>{J.exports=K;K.sync=et;var z=E("fs");function Ze(e,t){var n=t.pathExt!==void 0?t.pathExt:process.env.PATHEXT;if(!n||(n=n.split(";"),n.indexOf("")!==-1))return!0;for(var r=0;r<n.length;r++){var o=n[r].toLowerCase();if(o&&e.substr(-o.length).toLowerCase()===o)return!0}return!1}function B(e,t,n){return!e.isSymbolicLink()&&!e.isFile()?!1:Ze(t,n)}function K(e,t,n){z.stat(e,function(r,o){n(r,r?!1:B(o,e,t))})}function et(e,t){return B(z.statSync(e),e,t)}});var te=x((It,ee)=>{ee.exports=Q;Q.sync=tt;var V=E("fs");function Q(e,t,n){V.stat(e,function(r,o){n(r,r?!1:Z(o,t))})}function tt(e,t){return Z(V.statSync(e),t)}function Z(e,t){return e.isFile()&&nt(e,t)}function nt(e,t){var n=e.mode,r=e.uid,o=e.gid,s=t.uid!==void 0?t.uid:process.getuid&&process.getuid(),c=t.gid!==void 0?t.gid:process.getgid&&process.getgid(),u=parseInt("100",8),i=parseInt("010",8),a=parseInt("001",8),l=u|i,p=n&a||n&i&&o===c||n&u&&r===s||n&l&&s===0;return p}});var re=x((Mt,ne)=>{var Lt=E("fs"),N;process.platform==="win32"||global.TESTING_WINDOWS?N=Y():N=te();ne.exports=j;j.sync=rt;function j(e,t,n){if(typeof t=="function"&&(n=t,t={}),!n){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(r,o){j(e,t||{},function(s,c){s?o(s):r(c)})})}N(e,t||{},function(r,o){r&&(r.code==="EACCES"||t&&t.ignoreErrors)&&(r=null,o=!1),n(r,o)})}function rt(e,t){try{return N.sync(e,t||{})}catch(n){if(t&&t.ignoreErrors||n.code==="EACCES")return!1;throw n}}});var pe=x((Xt,ue)=>{var k=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",oe=E("path"),ot=k?";":":",se=re(),ie=e=>Object.assign(new Error(`not found: ${e}`),{code:"ENOENT"}),ce=(e,t)=>{let n=t.colon||ot,r=e.match(/\//)||k&&e.match(/\\/)?[""]:[...k?[process.cwd()]:[],...(t.path||process.env.PATH||"").split(n)],o=k?t.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=k?o.split(n):[""];return k&&e.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:r,pathExt:s,pathExtExe:o}},ae=(e,t,n)=>{typeof t=="function"&&(n=t,t={}),t||(t={});let{pathEnv:r,pathExt:o,pathExtExe:s}=ce(e,t),c=[],u=a=>new Promise((l,p)=>{if(a===r.length)return t.all&&c.length?l(c):p(ie(e));let m=r[a],f=/^".*"$/.test(m)?m.slice(1,-1):m,d=oe.join(f,e),g=!f&&/^\.[\\\/]/.test(e)?e.slice(0,2)+d:d;l(i(g,a,0))}),i=(a,l,p)=>new Promise((m,f)=>{if(p===o.length)return m(u(l+1));let d=o[p];se(a+d,{pathExt:s},(g,O)=>{if(!g&&O)if(t.all)c.push(a+d);else return m(a+d);return m(i(a,l,p+1))})});return n?u(0).then(a=>n(null,a),n):u(0)},st=(e,t)=>{t=t||{};let{pathEnv:n,pathExt:r,pathExtExe:o}=ce(e,t),s=[];for(let c=0;c<n.length;c++){let u=n[c],i=/^".*"$/.test(u)?u.slice(1,-1):u,a=oe.join(i,e),l=!i&&/^\.[\\\/]/.test(e)?e.slice(0,2)+a:a;for(let p=0;p<r.length;p++){let m=l+r[p];try{if(se.sync(m,{pathExt:o}))if(t.all)s.push(m);else return m}catch{}}}if(t.all&&s.length)return s;if(t.nothrow)return null;throw ie(e)};ue.exports=ae;ae.sync=st});var fe=x((Wt,$)=>{"use strict";var le=(e={})=>{let t=e.env||process.env;return(e.platform||process.platform)!=="win32"?"PATH":Object.keys(t).reverse().find(r=>r.toUpperCase()==="PATH")||"Path"};$.exports=le;$.exports.default=le});var xe=x((zt,he)=>{"use strict";var de=E("path"),it=pe(),ct=fe();function me(e,t){let n=e.options.env||process.env,r=process.cwd(),o=e.options.cwd!=null,s=o&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(e.options.cwd)}catch{}let c;try{c=it.sync(e.command,{path:n[ct({env:n})],pathExt:t?de.delimiter:void 0})}catch{}finally{s&&process.chdir(r)}return c&&(c=de.resolve(o?e.options.cwd:"",c)),c}function at(e){return me(e)||me(e,!0)}he.exports=at});var ge=x((Bt,R)=>{"use strict";var G=/([()\][%!^"`<>&|;, *?])/g;function ut(e){return e=e.replace(G,"^$1"),e}function pt(e,t){return e=`${e}`,e=e.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),e=e.replace(/(?=(\\+?)?)\1$/,"$1$1"),e=`"${e}"`,e=e.replace(G,"^$1"),t&&(e=e.replace(G,"^$1")),e}R.exports.command=ut;R.exports.argument=pt});var ye=x((Kt,we)=>{"use strict";we.exports=/^#!(.*)/});var ve=x((Jt,Ee)=>{"use strict";var lt=ye();Ee.exports=(e="")=>{let t=e.match(lt);if(!t)return null;let[n,r]=t[0].replace(/#! ?/,"").split(" "),o=n.split("/").pop();return o==="env"?r:r?`${o} ${r}`:o}});var Ce=x((Yt,Se)=>{"use strict";var _=E("fs"),ft=ve();function dt(e){let n=Buffer.alloc(150),r;try{r=_.openSync(e,"r"),_.readSync(r,n,0,150,0),_.closeSync(r)}catch{}return ft(n.toString())}Se.exports=dt});var Pe=x((Vt,be)=>{"use strict";var mt=E("path"),Oe=xe(),ke=ge(),ht=Ce(),xt=process.platform==="win32",gt=/\.(?:com|exe)$/i,wt=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function yt(e){e.file=Oe(e);let t=e.file&&ht(e.file);return t?(e.args.unshift(e.file),e.command=t,Oe(e)):e.file}function Et(e){if(!xt)return e;let t=yt(e),n=!gt.test(t);if(e.options.forceShell||n){let r=wt.test(t);e.command=mt.normalize(e.command),e.command=ke.command(e.command),e.args=e.args.map(s=>ke.argument(s,r));let o=[e.command].concat(e.args).join(" ");e.args=["/d","/s","/c",`"${o}"`],e.command=process.env.comspec||"cmd.exe",e.options.windowsVerbatimArguments=!0}return e}function vt(e,t,n){t&&!Array.isArray(t)&&(n=t,t=null),t=t?t.slice(0):[],n=Object.assign({},n);let r={command:e,args:t,options:n,file:void 0,original:{command:e,args:t}};return n.shell?r:Et(r)}be.exports=vt});var Te=x((Qt,Ne)=>{"use strict";var q=process.platform==="win32";function F(e,t){return Object.assign(new Error(`${t} ${e.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function St(e,t){if(!q)return;let n=e.emit;e.emit=function(r,o){if(r==="exit"){let s=Ae(o,t);if(s)return n.call(e,"error",s)}return n.apply(e,arguments)}}function Ae(e,t){return q&&e===1&&!t.file?F(t.original,"spawn"):null}function Ct(e,t){return q&&e===1&&!t.file?F(t.original,"spawnSync"):null}Ne.exports={hookChildProcess:St,verifyENOENT:Ae,verifyENOENTSync:Ct,notFoundError:F}});var $e=x((Zt,b)=>{"use strict";var He=E("child_process"),U=Pe(),D=Te();function je(e,t,n){let r=U(e,t,n),o=He.spawn(r.command,r.args,r.options);return D.hookChildProcess(o,r),o}function Ot(e,t,n){let r=U(e,t,n),o=He.spawnSync(r.command,r.args,r.options);return o.error=o.error||D.verifyENOENTSync(o.status,r),o}b.exports=je;b.exports.spawn=je;b.exports.sync=Ot;b.exports._parse=U;b.exports._enoent=D});import{readFileSync as $t,existsSync as Gt}from"node:fs";import{fileURLToPath as Rt}from"node:url";var L=Qe($e(),1);import{accessSync as kt,constants as Ge,statSync as bt}from"node:fs";import{homedir as Pt}from"node:os";import{posix as Re,win32 as I}from"node:path";var _e=L.default,P=L.default.sync;function qe(e){if(!(!e?.pid||e.exitCode!==null||e.signalCode!==null))if(e.stdin?.destroy(),process.platform==="win32"){let t=I.join(process.env.SystemRoot||"C:\\Windows","System32","taskkill.exe");P(t,["/pid",String(e.pid),"/t","/f"],{stdio:"ignore",timeout:3e3,windowsHide:!0})}else e.kill()}function C(e,t,{env:n=process.env,home:r=Pt(),platform:o=process.platform}={}){if(t)return t;let{delimiter:s,dirname:c,join:u,isAbsolute:i,extname:a}=o==="win32"?I:Re,l=Object.keys(n).find(d=>d.toUpperCase()==="PATH")||"PATH",p=[c(process.execPath),...(n[l]||"").split(s).filter(Boolean).map(d=>d.replace(/^"(.*)"$/,"$1"))];o!=="win32"?p.push("/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin",u(r,".volta/bin"),u(r,".local/bin")):p.push(u(n.APPDATA||u(r,"AppData","Roaming"),"npm"),u(r,".volta","bin"));let m=o!=="win32"||a(e)?[""]:[".exe",".com",".cmd",".bat"],f=p.filter(i).flatMap(d=>m.map(g=>u(d,e+g)));e==="codex"&&o==="darwin"&&f.push("/Applications/Codex.app/Contents/Resources/codex");for(let d of f)try{if(kt(d,o==="win32"?Ge.F_OK:Ge.X_OK),bt(d).isFile())return d}catch{}return e}function Fe(){let{delimiter:e,dirname:t}=process.platform==="win32"?I:Re,n=Object.keys(process.env).find(r=>r.toUpperCase()==="PATH")||"PATH";process.env[n]=[...new Set([t(process.execPath),...(process.env[n]||"").split(e).filter(Boolean)])].join(e),process.env.HONGGUO_FFMPEG=C("ffmpeg",process.env.HONGGUO_FFMPEG),process.env.HONGGUO_CODEX=C("codex",process.env.HONGGUO_CODEX)}import{realpathSync as Nt}from"node:fs";import{relative as Tt,resolve as Ht,isAbsolute as jt}from"node:path";import{fileURLToPath as At}from"node:url";var Ue=At(new URL("../../",import.meta.url));var De=["userPromptSubmit","stop","interrupt"],v=()=>({status:"unknown",events:De.map(e=>({event:e,status:"unknown"}))});function Ie({command:e=C("codex",process.env.HONGGUO_CODEX),args:t=["app-server"],cwd:n=process.cwd(),timeoutMs:r=8e3,pluginRoot:o=Ue,installedId:s}={}){let c=i=>{try{return Nt(i)}catch{return Ht(i)}},u=c(o);return new Promise(i=>{let a,l=!1,p="",m=0,f=g=>{l||(l=!0,clearTimeout(d),qe(a),i(g))},d=setTimeout(()=>f(v()),r);try{a=_e(e,t,{cwd:n,stdio:["pipe","pipe","ignore"],windowsHide:!0}),a.on("error",()=>f(v())),a.on("exit",()=>f(v())),a.stdin.on("error",()=>f(v())),a.stdout.setEncoding("utf8");let g=O=>a.stdin.write(JSON.stringify(O)+`
|
|
3
|
-
|
|
4
|
-
`)
|
|
2
|
+
var Ct=Object.create;var GA=Object.defineProperty;var ft=Object.getOwnPropertyDescriptor;var ct=Object.getOwnPropertyNames;var ut=Object.getPrototypeOf,ht=Object.prototype.hasOwnProperty;var F=(A=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(A,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):A)(function(A){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+A+'" is not supported')});var y=(A,e)=>()=>{try{return e||A((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var Qt=(A,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ct(e))!ht.call(A,n)&&n!==t&&GA(A,n,{get:()=>e[n],enumerable:!(r=ft(e,n))||r.enumerable});return A};var bA=(A,e,t)=>(t=A!=null?Ct(ut(A)):{},Qt(e||!A||!A.__esModule?GA(t,"default",{value:A,enumerable:!0}):t,A));var zA=y((Rr,UA)=>{UA.exports=KA;KA.sync=Bt;var RA=F("fs");function lt(A,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(";"),t.indexOf("")!==-1))return!0;for(var r=0;r<t.length;r++){var n=t[r].toLowerCase();if(n&&A.substr(-n.length).toLowerCase()===n)return!0}return!1}function qA(A,e,t){return!A.isSymbolicLink()&&!A.isFile()?!1:lt(e,t)}function KA(A,e,t){RA.stat(A,function(r,n){t(r,r?!1:qA(n,A,e))})}function Bt(A,e){return qA(RA.statSync(A),A,e)}});var WA=y((qr,jA)=>{jA.exports=TA;TA.sync=Et;var OA=F("fs");function TA(A,e,t){OA.stat(A,function(r,n){t(r,r?!1:PA(n,e))})}function Et(A,e){return PA(OA.statSync(A),e)}function PA(A,e){return A.isFile()&&pt(A,e)}function pt(A,e){var t=A.mode,r=A.uid,n=A.gid,i=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt("100",8),g=parseInt("010",8),I=parseInt("001",8),C=a|g,s=t&I||t&g&&n===o||t&a&&r===i||t&C&&i===0;return s}});var ZA=y((Ur,XA)=>{var Kr=F("fs"),AA;process.platform==="win32"||global.TESTING_WINDOWS?AA=zA():AA=WA();XA.exports=aA;aA.sync=wt;function aA(A,e,t){if(typeof e=="function"&&(t=e,e={}),!t){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(r,n){aA(A,e||{},function(i,o){i?n(i):r(o)})})}AA(A,e||{},function(r,n){r&&(r.code==="EACCES"||e&&e.ignoreErrors)&&(r=null,n=!1),t(r,n)})}function wt(A,e){try{return AA.sync(A,e||{})}catch(t){if(e&&e.ignoreErrors||t.code==="EACCES")return!1;throw t}}});var re=y((zr,te)=>{var q=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",VA=F("path"),vt=q?";":":",$A=ZA(),_A=A=>Object.assign(new Error(`not found: ${A}`),{code:"ENOENT"}),Ae=(A,e)=>{let t=e.colon||vt,r=A.match(/\//)||q&&A.match(/\\/)?[""]:[...q?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(t)],n=q?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",i=q?n.split(t):[""];return q&&A.indexOf(".")!==-1&&i[0]!==""&&i.unshift(""),{pathEnv:r,pathExt:i,pathExtExe:n}},ee=(A,e,t)=>{typeof e=="function"&&(t=e,e={}),e||(e={});let{pathEnv:r,pathExt:n,pathExtExe:i}=Ae(A,e),o=[],a=I=>new Promise((C,s)=>{if(I===r.length)return e.all&&o.length?C(o):s(_A(A));let c=r[I],f=/^".*"$/.test(c)?c.slice(1,-1):c,u=VA.join(f,A),h=!f&&/^\.[\\\/]/.test(A)?A.slice(0,2)+u:u;C(g(h,I,0))}),g=(I,C,s)=>new Promise((c,f)=>{if(s===n.length)return c(a(C+1));let u=n[s];$A(I+u,{pathExt:i},(h,l)=>{if(!h&&l)if(e.all)o.push(I+u);else return c(I+u);return c(g(I,C,s+1))})});return t?a(0).then(I=>t(null,I),t):a(0)},yt=(A,e)=>{e=e||{};let{pathEnv:t,pathExt:r,pathExtExe:n}=Ae(A,e),i=[];for(let o=0;o<t.length;o++){let a=t[o],g=/^".*"$/.test(a)?a.slice(1,-1):a,I=VA.join(g,A),C=!g&&/^\.[\\\/]/.test(A)?A.slice(0,2)+I:I;for(let s=0;s<r.length;s++){let c=C+r[s];try{if($A.sync(c,{pathExt:n}))if(e.all)i.push(c);else return c}catch{}}}if(e.all&&i.length)return i;if(e.nothrow)return null;throw _A(A)};te.exports=ee;ee.sync=yt});var ie=y((Or,gA)=>{"use strict";var ne=(A={})=>{let e=A.env||process.env;return(A.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(r=>r.toUpperCase()==="PATH")||"Path"};gA.exports=ne;gA.exports.default=ne});var ge=y((Tr,ae)=>{"use strict";var oe=F("path"),mt=re(),dt=ie();function se(A,e){let t=A.options.env||process.env,r=process.cwd(),n=A.options.cwd!=null,i=n&&process.chdir!==void 0&&!process.chdir.disabled;if(i)try{process.chdir(A.options.cwd)}catch{}let o;try{o=mt.sync(A.command,{path:t[dt({env:t})],pathExt:e?oe.delimiter:void 0})}catch{}finally{i&&process.chdir(r)}return o&&(o=oe.resolve(n?A.options.cwd:"",o)),o}function Dt(A){return se(A)||se(A,!0)}ae.exports=Dt});var Ie=y((Pr,CA)=>{"use strict";var IA=/([()\][%!^"`<>&|;, *?])/g;function xt(A){return A=A.replace(IA,"^$1"),A}function Nt(A,e){return A=`${A}`,A=A.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),A=A.replace(/(?=(\\+?)?)\1$/,"$1$1"),A=`"${A}"`,A=A.replace(IA,"^$1"),e&&(A=A.replace(IA,"^$1")),A}CA.exports.command=xt;CA.exports.argument=Nt});var fe=y((jr,Ce)=>{"use strict";Ce.exports=/^#!(.*)/});var ue=y((Wr,ce)=>{"use strict";var kt=fe();ce.exports=(A="")=>{let e=A.match(kt);if(!e)return null;let[t,r]=e[0].replace(/#! ?/,"").split(" "),n=t.split("/").pop();return n==="env"?r:r?`${n} ${r}`:n}});var Qe=y((Xr,he)=>{"use strict";var fA=F("fs"),St=ue();function Ft(A){let t=Buffer.alloc(150),r;try{r=fA.openSync(A,"r"),fA.readSync(r,t,0,150,0),fA.closeSync(r)}catch{}return St(t.toString())}he.exports=Ft});var pe=y((Zr,Ee)=>{"use strict";var Mt=F("path"),le=ge(),Be=Ie(),Jt=Qe(),Lt=process.platform==="win32",Yt=/\.(?:com|exe)$/i,Ht=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function Gt(A){A.file=le(A);let e=A.file&&Jt(A.file);return e?(A.args.unshift(A.file),A.command=e,le(A)):A.file}function bt(A){if(!Lt)return A;let e=Gt(A),t=!Yt.test(e);if(A.options.forceShell||t){let r=Ht.test(e);A.command=Mt.normalize(A.command),A.command=Be.command(A.command),A.args=A.args.map(i=>Be.argument(i,r));let n=[A.command].concat(A.args).join(" ");A.args=["/d","/s","/c",`"${n}"`],A.command=process.env.comspec||"cmd.exe",A.options.windowsVerbatimArguments=!0}return A}function Rt(A,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let r={command:A,args:e,options:t,file:void 0,original:{command:A,args:e}};return t.shell?r:bt(r)}Ee.exports=Rt});var ye=y((Vr,ve)=>{"use strict";var cA=process.platform==="win32";function uA(A,e){return Object.assign(new Error(`${e} ${A.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${A.command}`,path:A.command,spawnargs:A.args})}function qt(A,e){if(!cA)return;let t=A.emit;A.emit=function(r,n){if(r==="exit"){let i=we(n,e);if(i)return t.call(A,"error",i)}return t.apply(A,arguments)}}function we(A,e){return cA&&A===1&&!e.file?uA(e.original,"spawn"):null}function Kt(A,e){return cA&&A===1&&!e.file?uA(e.original,"spawnSync"):null}ve.exports={hookChildProcess:qt,verifyENOENT:we,verifyENOENTSync:Kt,notFoundError:uA}});var De=y(($r,K)=>{"use strict";var me=F("child_process"),hA=pe(),QA=ye();function de(A,e,t){let r=hA(A,e,t),n=me.spawn(r.command,r.args,r.options);return QA.hookChildProcess(n,r),n}function Ut(A,e,t){let r=hA(A,e,t),n=me.spawnSync(r.command,r.args,r.options);return n.error=n.error||QA.verifyENOENTSync(n.status,r),n}K.exports=de;K.exports.spawn=de;K.exports.sync=Ut;K.exports._parse=hA;K.exports._enoent=QA});var Le=y((W,yA)=>{(function(e,t){typeof W=="object"&&typeof yA=="object"?yA.exports=t(F("stream/web")):typeof define=="function"&&define.amd?define(["stream/web"],t):typeof W=="object"?W["xz-decompress"]=t(F("stream/web")):e["xz-decompress"]=t(e["stream/web"])})(W,A=>(()=>{"use strict";var e=[,(i=>{i.exports="data:application/wasm;base64,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ACABQX9qIgENAAsgAkJ/hSECCyACC8oQAgx/An4CQAJAIAAoAiRFDQAgACgCACECDAELQQAhAiAAQQA6ACggAEIANwMAIABCADcDGCAAQcgAakEAQeQAEIaAgIAAGiAAQawBakEMNgIACyAAIAEoAgQiAzYCECAAQeAAaiEEIABByABqIQUgAEG2AWohBiAAQbABaiEHIABBqAFqIQggASgCECEJAkACQAJAAkADQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCACDgoBAgAEBQYHCAkKDwsgASgCACEKIAAoAqgBIQIgACgCrAEhCyABKAIEIQwgASgCCCENDAILIAcgACgCqAEiDGogASgCACABKAIEIgJqIAEoAgggAmsiAiAAKAKsASAMayIMIAIgDEkbIgIQh4CAgAAaIAEgASgCBCACajYCBEEAIQwgAEEAIAAoAqgBIAJqIgIgAiAAKAKsASILRhs2AqgBIAIgC0cNESAAQQE2AgACQCAHQaiIgIAAQQYQhICAgABFDQBBBSEMDBILIAZBAkEAEI2AgIAAIAAoALgBRw0QQQYhDCAGLQAADREgACAALQC3ASICNgIgIAJBBEsNEUEBIAJ0QRNxRQ0RCyABKAIEIgwgASgCCCINRg0OAkAgASgCACIKIAxqLQAAIgsNACAAIAw2AhAgASAMQQFqNgIEQQYhAgwMC0EAIQIgAEEANgKoASAAQQI2AgAgACALQQJ0QQRqIgs2AqwBIAAgCzYCQAsgByACaiAKIAxqIA0gDGsiDCALIAJrIgIgDCACSRsiAhCHgICAABogASABKAIEIAJqNgIEQQAhDCAAQQAgACgCqAEgAmoiAiACIAAoAqwBIgtGGzYCqAEgAiALRw0PIAAgAkF8aiICNgKsAUEHIQwgByACQQAQjYCAgAAgByAAKAKsASICaigAAEcNDyAAQQI2AqgBIAAtALEBIgtBP3ENDAJAAkAgC0HAAHFFDQAgACAHIAggAhCRgICAAEEBRw0RIAAgACkDCDcDMCAAKAKsASECIAAtALEBIQsMAQsgAEJ/NwMwC0J/IQ4CQCALwEF/Sg0AIAAgByAIIAIQkYCAgABBAUcNECAAKAKsASECIAApAwghDgsgACAONwM4IAIgACgCqAEiC2tBAkkNDyAAIAtBAWoiCjYCqAEgCCALakEI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AA8LIAEgA0EBaiIFNgIEAkAgASgCACADai0AACAAKQMYIAAoAgQiA62Ip0H/AXFGDQBBBw8LIAAgA0EIaiIGNgIEIAUhAyAGIAJJDQALIABBADYCBCAAQgA3AxhBAQtvAQF/QQchAQJAIABBugFqLwAAQdm0AUcNACAAQbQBakEGQQAQjYCAgAAgAEGwAWooAABHDQAgAEGAAWopAwBCAoggADUAtAFSDQAgAEG4AWotAAANAEEBQQcgACgCICAAQbkBai0AAEYbIQELIAELwAIBA38CQAJAAkAgACgCJA0AIABBADoAKCAAQQA2AgBBASECDAELAkAgACgCAEEKRw0AQQAhAwwCC0ECIQMMAQtBASEDCwJAAkADQAJAAkACQAJAIAMOAwABAwMLIAEoAgQiAyABKAIIIgRGDQQgASgCACEFAkADQCAFIANqLQAADQEgASADQQFqIgM2AgQgACAAKAIEQQFqQQNxNgIEIAQgA0YNBgwACwsCQCAAKAIERQ0AQQcPCyAAKAIkRQ0BIABBADoAKCAAQQA2AgBBASEDDAMLIABCADcDGCAAQQA2AgQgAEHIAGpBAEHkABCGgICAABogAEGsAWpBDDYCAAtBAiEDDAELIAAgARCQgICAACIDQQFHDQIgAEEKNgIAQQAhAwwACwsCQCACDQBBAA8LQQdBASAAKAIEGyEDCyADC3UBAX8CQEG4CRCAgICAACICRQ0AIAIgADYCJCACIAAgARCbgICAACIANgKwCQJAIABFDQAgAkEAOgAoIAJCADcDACACQgA3AxggAkHIAGpBAEHkABCGgICAABogAkGsAWpBDDYCACACDwsgAhCCgICAAAtBAAseAAJAIABFDQAgACgCsAkQnYCAgAAgABCCgICAAAsL3RABCn8gAEHo3QFqIQIgAEHUAGohAyAAQRxqIgRBCGohBQJAAkADQCAAKAJAIQYCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgASgCBCIHIAEoAghJDQAgBkEHRg0BDBELIAYOCQECAwQFBgcACQ4LIAAoAkwhBgwHC0EBIQYgASAHQQFqNgIEIAEoAgAgB2otAAAiB0UNCAJAAkAgB0HfAUsNACAHQQFHDQELIABBgAI7AVACQCAAKAI8DQAgACABKAIMIAEoAhAiBmo2AhggACABKAIUIAZr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"}),(i=>{i.exports=A})],t={};function r(i){var o=t[i];if(o!==void 0)return o.exports;var a=t[i]={exports:{}};return e[i](a,a.exports,r),a.exports}r.d=(i,o)=>{for(var a in o)r.o(o,a)&&!r.o(i,a)&&Object.defineProperty(i,a,{enumerable:!0,get:o[a]})},r.o=(i,o)=>Object.prototype.hasOwnProperty.call(i,o),r.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var n={};return(()=>{r.r(n),r.d(n,{XzReadableStream:()=>s});var i=r(1);let o=globalThis.ReadableStream||r(2).ReadableStream,a=0,g=1;class I{constructor(f){this.exports=f.exports,this.memory=this.exports.memory,this.ptr=this.exports.create_context(),this._refresh(),this.bufSize=this.mem32[0],this.inStart=this.mem32[1]-this.ptr,this.inEnd=this.inStart+this.bufSize,this.outStart=this.mem32[4]-this.ptr}supplyInput(f){this._refresh(),this.mem8.subarray(this.inStart,this.inEnd).set(f,0),this.exports.supply_input(this.ptr,f.byteLength),this._refresh()}getNextOutput(){let f=this.exports.get_next_output(this.ptr);if(this._refresh(),f!==a&&f!==g)throw new Error(`get_next_output failed with error code ${f}`);return{outChunk:this.mem8.slice(this.outStart,this.outStart+this.mem32[5]),finished:f===g}}needsMoreInput(){return this.mem32[2]===this.mem32[3]}outputBufferIsFull(){return this.mem32[5]===this.bufSize}resetOutputBuffer(){this.outPos=this.mem32[5]=0}dispose(){this.exports.destroy_context(this.ptr),this.exports=null}_refresh(){this.memory.buffer!==this.mem8?.buffer&&(this.mem8=new Uint8Array(this.memory.buffer,this.ptr),this.mem32=new Uint32Array(this.memory.buffer,this.ptr))}}class C{constructor(){this.locked=!1,this.waitQueue=[]}async acquire(){if(!this.locked){this.locked=!0;return}return new Promise(f=>{this.waitQueue.push(f)})}release(){this.waitQueue.length>0?this.waitQueue.shift()():this.locked=!1}}class s extends o{static _moduleInstancePromise;static _moduleInstance;static _contextMutex=new C;static async _getModuleInstance(){let f=i.replace("data:application/wasm;base64,",""),u=Uint8Array.from(atob(f),E=>E.charCodeAt(0)).buffer,h={},l=await WebAssembly.instantiate(u,h);s._moduleInstance=l.instance}constructor(f){let u,h=null,l=f.getReader();super({async start(E){await s._contextMutex.acquire();try{s._moduleInstance||await(s._moduleInstancePromise||(s._moduleInstancePromise=s._getModuleInstance())),u=new I(s._moduleInstance)}catch(v){throw s._contextMutex.release(),v}},async pull(E){try{if(u.needsMoreInput()){if(h===null||h.byteLength===0){let{done:L,value:Y}=await l.read();L||(h=Y)}let B=Math.min(u.bufSize,h.byteLength);u.supplyInput(h.subarray(0,B)),h=h.subarray(B)}let v=u.getNextOutput();E.enqueue(v.outChunk),u.resetOutputBuffer(),v.finished&&(u.dispose(),s._contextMutex.release(),E.close())}catch(v){throw u&&u.dispose(),s._contextMutex.release(),v}},cancel(){try{return u&&u.dispose(),l.cancel()}finally{s._contextMutex.release()}}})}}})(),n})())});import{readFileSync as Mr,existsSync as Jr}from"node:fs";import{fileURLToPath as Lr}from"node:url";var xA=bA(De(),1);import{accessSync as mr,constants as Ze,statSync as dr}from"node:fs";import{homedir as Dr}from"node:os";import{posix as Ve,win32 as DA}from"node:path";import{createHash as be,randomUUID as Cr}from"node:crypto";import{createReadStream as Re}from"node:fs";import{mkdir as He,lstat as fr,open as qe,readFile as Ke,writeFile as cr,rename as ur,rm as X,chmod as hr,stat as Ge}from"node:fs/promises";import{lstatSync as Qr}from"node:fs";import{homedir as lr}from"node:os";import{posix as Ue,win32 as ze}from"node:path";import{spawnSync as Br}from"node:child_process";import{createRequire as zt}from"module";var Ot=zt("/"),z,Tt,Pt;try{z=Ot("worker_threads"),Tt=z.Worker,Pt=z.isMarkedAsUntransferable}catch{}var D=Uint8Array,U=Uint16Array,jt=Int32Array,xe=new D([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Ne=new D([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Wt=new D([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ke=function(A,e){for(var t=new U(31),r=0;r<31;++r)t[r]=e+=1<<A[r-1];for(var n=new jt(t[30]),r=1;r<30;++r)for(var i=t[r];i<t[r+1];++i)n[i]=i-t[r]<<5|r;return{b:t,r:n}},z=ke(xe,2),Se=z.b,Xt=z.r;Se[28]=258,Xt[258]=28;var Fe=ke(Ne,0),Zt=Fe.b,An=Fe.r,pA=new U(32768);for(Q=0;Q<32768;++Q)J=(Q&43690)>>1|(Q&21845)<<1,J=(J&52428)>>2|(J&13107)<<2,J=(J&61680)>>4|(J&3855)<<4,pA[Q]=((J&65280)>>8|(J&255)<<8)>>1;var J,Q,P=(function(A,e,t){for(var r=A.length,n=0,i=new U(e);n<r;++n)A[n]&&++i[A[n]-1];var o=new U(e);for(n=1;n<e;++n)o[n]=o[n-1]+i[n-1]<<1;var a;if(t){a=new U(1<<e);var g=15-e;for(n=0;n<r;++n)if(A[n])for(var I=n<<4|A[n],C=e-A[n],s=o[A[n]-1]++<<C,c=s|(1<<C)-1;s<=c;++s)a[pA[s]>>g]=I}else for(a=new U(r),n=0;n<r;++n)A[n]&&(a[n]=pA[o[A[n]-1]++]>>15-A[n]);return a}),j=new D(288);for(Q=0;Q<144;++Q)j[Q]=8;var Q;for(Q=144;Q<256;++Q)j[Q]=9;var Q;for(Q=256;Q<280;++Q)j[Q]=7;var Q;for(Q=280;Q<288;++Q)j[Q]=8;var Q,Me=new D(32);for(Q=0;Q<32;++Q)Me[Q]=5;var Q;var Vt=P(j,9,1);var $t=P(Me,5,1),lA=function(A){for(var e=A[0],t=1;t<A.length;++t)A[t]>e&&(e=A[t]);return e},S=function(A,e,t){var r=e/8|0;return(A[r]|A[r+1]<<8)>>(e&7)&t},BA=function(A,e){var t=e/8|0;return(A[t]|A[t+1]<<8|A[t+2]<<16)>>(e&7)},_t=function(A){return(A+7)/8|0},vA=function(A,e,t){return(e==null||e<0)&&(e=0),(t==null||t>A.length)&&(t=A.length),new D(A.subarray(e,t))};var Ar=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],d=function(A,e,t){var r=new Error(e||Ar[A]);if(r.code=A,Error.captureStackTrace&&Error.captureStackTrace(r,d),!t)throw r;return r},er=function(A,e,t,r){var n=A.length,i=r?r.length:0;if(!n||e.f&&!e.l)return t||new D(0);var o=!t,a=o||e.i!=2,g=e.i;o&&(t=new D(n*3));var I=function(LA){var YA=t.length;if(LA>YA){var HA=new D(Math.max(YA*2,LA));HA.set(t),t=HA}},C=e.f||0,s=e.p||0,c=e.b||0,f=e.l,u=e.d,h=e.m,l=e.n,E=n*8;do{if(!f){C=S(A,s,1);var v=S(A,s+1,3);if(s+=3,v)if(v==1)f=Vt,u=$t,h=9,l=5;else if(v==2){var p=S(A,s,31)+257,k=S(A,s+10,15)+4,$=p+S(A,s+5,31)+1;s+=14;for(var m=new D($),nA=new D(19),x=0;x<k;++x)nA[Wt[x]]=S(A,s+x*3,7);s+=k*3;for(var NA=lA(nA),ot=(1<<NA)-1,st=P(nA,NA,1),x=0;x<$;){var kA=st[S(A,s,ot)];s+=kA&15;var B=kA>>4;if(B<16)m[x++]=B;else{var b=0,_=0;for(B==16?(_=3+S(A,s,3),s+=2,b=m[x-1]):B==17?(_=3+S(A,s,7),s+=3):B==18&&(_=11+S(A,s,127),s+=7);_--;)m[x++]=b}}var SA=m.subarray(0,p),H=m.subarray(p);h=lA(SA),l=lA(H),f=P(SA,h,1),u=P(H,l,1)}else d(1);else{var B=_t(s)+4,L=A[B-4]|A[B-3]<<8,Y=B+L;if(Y>n){g&&d(0);break}a&&I(c+L),t.set(A.subarray(B,Y),c),e.b=c+=L,e.p=s=Y*8,e.f=C;continue}if(s>E){g&&d(0);break}}a&&I(c+131072);for(var at=(1<<h)-1,gt=(1<<l)-1,iA=s;;iA=s){var b=f[BA(A,s)&at],R=b>>4;if(s+=b&15,s>E){g&&d(0);break}if(b||d(2),R<256)t[c++]=R;else if(R==256){iA=s,f=null;break}else{var FA=R-254;if(R>264){var x=R-257,T=xe[x];FA=S(A,s,(1<<T)-1)+Se[x],s+=T}var oA=u[BA(A,s)>],sA=oA>>4;oA||d(3),s+=oA&15;var H=Zt[sA];if(sA>3){var T=Ne[sA];H+=BA(A,s)&(1<<T)-1,s+=T}if(s>E){g&&d(0);break}a&&I(c+131072);var MA=c+FA;if(c<H){var JA=i-H,It=Math.min(H,MA);for(JA+c<0&&d(3);c<It;++c)t[c]=r[JA+c]}for(;c<MA;++c)t[c]=t[c-H]}}e.l=f,e.p=iA,e.b=c,e.f=C,f&&(C=1,e.m=h,e.d=u,e.n=l)}while(!C);return c!=t.length&&o?vA(t,0,c):t.subarray(0,c)};var tr=new D(0);var M=function(A,e){return A[e]|A[e+1]<<8},N=function(A,e){return(A[e]|A[e+1]<<8|A[e+2]<<16|A[e+3]<<24)>>>0},EA=function(A,e){return N(A,e)+N(A,e+4)*4294967296};function rr(A,e){return er(A,{i:2},e&&e.out,e&&e.dictionary)}var wA=typeof TextDecoder<"u"&&new TextDecoder,nr=0;try{wA.decode(tr,{stream:!0}),nr=1}catch{}var ir=function(A){for(var e="",t=0;;){var r=A[t++],n=(r>127)+(r>223)+(r>239);if(t+n>A.length)return{s:e,r:vA(A,t-1)};n?n==3?(r=((r&15)<<18|(A[t++]&63)<<12|(A[t++]&63)<<6|A[t++]&63)-65536,e+=String.fromCharCode(55296|r>>10,56320|r&1023)):n&1?e+=String.fromCharCode((r&31)<<6|A[t++]&63):e+=String.fromCharCode((r&15)<<12|(A[t++]&63)<<6|A[t++]&63):e+=String.fromCharCode(r)}};function or(A,e){if(e){for(var t="",r=0;r<A.length;r+=16384)t+=String.fromCharCode.apply(null,A.subarray(r,r+16384));return t}else{if(wA)return wA.decode(A);var n=ir(A),i=n.s,t=n.r;return t.length&&d(8),i}}var sr=function(A,e){return e+30+M(A,e+26)+M(A,e+28)},ar=function(A,e,t){var r=M(A,e+28),n=M(A,e+30),i=or(A.subarray(e+46,e+46+r),!(M(A,e+8)&2048)),o=e+46+r,a=gr(A,o,n,t,N(A,e+20),N(A,e+24),N(A,e+42)),g=a[0],I=a[1],C=a[2];return[M(A,e+10),g,I,i,o+n+M(A,e+32),C]},gr=function(A,e,t,r,n,i,o){var a=n==4294967295,g=i==4294967295,I=o==4294967295,C=e+t,s=a+g+I;if(r&&s){for(;e+4<C;e+=4+M(A,e+2))if(M(A,e)==1)return[a?EA(A,e+4+8*g):n,g?EA(A,e+4):i,I?EA(A,e+4+8*(g+a)):o,1];r<2&&d(13)}return[n,i,o,0]};function Je(A,e){for(var t={},r=A.length-22;N(A,r)!=101010256;--r)(!r||A.length-r>65558)&&d(13);var n=M(A,r+8);if(!n)return{};var i=N(A,r+16),o=N(A,r-20)==117853008;if(o){var a=N(A,r-12);o=N(A,a)==101075792,o&&(n=N(A,a+32),i=N(A,a+48))}for(var g=e&&e.filter,I=0;I<n;++I){var C=ar(A,i,o),s=C[0],c=C[1],f=C[2],u=C[3],h=C[4],l=C[5],E=sr(A,l);i=h,(!g||g({name:u,size:c,originalSize:f,compression:s}))&&(s?s==8?t[u]=rr(A.subarray(E,E+c),{out:new D(f)}):d(14,"unknown compression type "+s):t[u]=vA(A,E,E+c))}return t}var Oe=bA(Le(),1);var Ye={"darwin-arm64":{version:"9.0.2",url:"https://www.osxexperts.net/ffmpeg902arm.zip",format:"zip",entry:"ffmpeg",archiveBytes:22665869,archiveSha256:"07e00300593799005b060c03a99fe648b1edda0f30c36b0c1adafe8e3247e586",binaryBytes:52160568,binarySha256:"762f16b2913b8d3b8fdb8092df12b691053b035b13ae9b88205513c55cb8e71e"},"darwin-x64":{version:"9.0.2",url:"https://evermeet.cx/ffmpeg/ffmpeg-9.0.2.zip",format:"zip",entry:"ffmpeg",archiveBytes:26198325,archiveSha256:"4acc0be580f9b2788029eb7bd4d645ff87968911b0a62aeeb3940d42d54558d5",binaryBytes:80827688,binarySha256:"a45b462cf91ed89148ae218c4577e30896485d7a6792c3673bcf5f823fa01b63"},"linux-x64":{version:"9.0.2-20261031",url:"https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2026-10-31-12-59/ffmpeg-n9.0.2-39-g7adfbe40dc-linux64-gpl-9.0.tar.xz",format:"tar.xz",entry:"ffmpeg-n9.0.2-39-g7adfbe40dc-linux64-gpl-9.0/bin/ffmpeg",archiveBytes:153175100,archiveSha256:"73e29a56974ae5a651133a04584c7483b21afe941e17dc91d79814a758b608d3"},"linux-arm64":{version:"9.0.2-20261031",url:"https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2026-10-31-12-59/ffmpeg-n9.0.2-39-g7adfbe40dc-linuxarm64-gpl-9.0.tar.xz",format:"tar.xz",entry:"ffmpeg-n9.0.2-39-g7adfbe40dc-linuxarm64-gpl-9.0/bin/ffmpeg",archiveBytes:128664064,archiveSha256:"6cad88ae5bcec356cfc5d7979a036cc4007128201928a0cf243df3db483276cc"},"win32-x64":{version:"9.0.2-20261031",url:"https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2026-10-31-12-59/ffmpeg-n9.0.2-39-g7adfbe40dc-win64-gpl-9.0.zip",format:"zip",entry:"ffmpeg-n9.0.2-39-g7adfbe40dc-win64-gpl-9.0/bin/ffmpeg.exe",archiveBytes:195110184,archiveSha256:"693f3e224bc184b40524a62ca47526cfebaf2504414021b92fe75f677ad868b9"}};var tA=new Map,eA=new Map,w=()=>Error("\u64AD\u653E\u7EC4\u4EF6\u81EA\u52A8\u51C6\u5907\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u548C\u7F13\u5B58\u76EE\u5F55\u6743\u9650\u540E\u91CD\u8BD5\u5B89\u88C5\u3002"),Er=A=>new Promise(e=>setTimeout(e,A));function Te(A={}){let{env:e=process.env,home:t=lr(),platform:r=process.platform,arch:n=process.arch}=A,i=r==="win32"?ze:Ue;if(e.HONGGUO_FFMPEG){if(!i.isAbsolute(e.HONGGUO_FFMPEG))throw w();return{...A,env:e,platform:r,target:e.HONGGUO_FFMPEG,override:!0}}let o=(A.artifacts||Ye)[r+"-"+n];if(!o)throw Error("\u5F53\u524D\u7CFB\u7EDF\u67B6\u6784\u6682\u4E0D\u652F\u6301\u81EA\u52A8\u51C6\u5907\u64AD\u653E\u7EC4\u4EF6\u3002");let a=e.HONGGUO_RUNTIME_DIR||(r==="darwin"?i.join(t,"Library","Caches","CodexHongguo"):r==="win32"?i.join(e.LOCALAPPDATA||i.join(t,"AppData","Local"),"CodexHongguo","Cache"):i.join(e.XDG_CACHE_HOME||i.join(t,".cache"),"codex-hongguo")),g=i.join(a,"runtime","ffmpeg",o.archiveSha256.slice(0,16),r+"-"+n);return{...A,env:e,platform:r,artifact:o,directory:g,target:i.join(g,r==="win32"?"ffmpeg.exe":"ffmpeg")}}function Pe(A){return Te(A).target}function mA(A){try{let e=Qr(A);return e.isFile()&&!e.isSymbolicLink()?`${e.size}:${e.mtimeMs}:${e.ctimeMs}`:null}catch{return null}}async function je(A){let e=be("sha256");for await(let t of Re(A))e.update(t);return e.digest("hex")}function We(A,e){return e.probe?e.probe(A):Br(A,["-version"],{stdio:"ignore",timeout:5e3,windowsHide:!0}).status===0}async function dA(A){let{target:e,artifact:t}=A;if(tA.get(e)&&tA.get(e)===mA(e))return!0;try{let r=await fr(e);if(!r.isFile()||r.isSymbolicLink())return!1;if(t){let n=JSON.parse(await Ke(e+".json","utf8"));if(n.archiveSha256!==t.archiveSha256||!/^[a-f0-9]{64}$/.test(n.binarySha256)||r.size!==(t.binaryBytes||n.binaryBytes)||await je(e)!==(t.binarySha256||n.binarySha256))return!1}return We(e,A)?(tA.set(e,mA(e)),!0):!1}catch{return!1}}async function pr(A,e,t){let r=new Set(["github.com","release-assets.githubusercontent.com","objects.githubusercontent.com","evermeet.cx","www.osxexperts.net"]),n=AbortSignal.timeout(3e5),i=new URL(A.url),o;for(let C=0;C<=6;C++){if(i.protocol!=="https:"||i.username||i.password||i.port||!r.has(i.hostname))throw w();if(o=await t(i,{redirect:"manual",signal:n}),![301,302,303,307,308].includes(o.status))break;let s=o.headers.get("location");if(await o.body?.cancel(),!s||C===6)throw w();i=new URL(s,i)}if(!o.ok||!o.body||Number(o.headers.get("content-length"))>A.archiveBytes)throw await o.body?.cancel(),w();let a=await qe(e,"wx",384),g=be("sha256"),I=0;try{for await(let C of o.body){if(I+=C.length,I>A.archiveBytes)throw w();g.update(C),await a.writeFile(C)}if(I!==A.archiveBytes||g.digest("hex")!==A.archiveSha256)throw w()}finally{await a.close()}}async function wr(A,e,t){let r=await qe(t,"wx",384);try{if(A.format==="zip"){let c=Je(await Ke(e),{filter:f=>f.name===A.entry&&f.originalSize<=(A.binaryBytes||268435456)})[A.entry];if(!c||A.binaryBytes&&c.length!==A.binaryBytes)throw w();await r.writeFile(c);return}let n=new Oe.default.XzReadableStream(vr(e)),i=n.getReader(),o=Buffer.alloc(0),a=0,g=0,I=!1,C=0;try{for(;;){let{value:s,done:c}=await i.read();if(c)break;if(C+=s.length,C>1024*1024*1024)throw w();for(o=Buffer.concat([o,s]);o.length;)if(a){let f=Math.min(a,o.length);if(I&&await r.writeFile(o.subarray(0,f)),o=o.subarray(f),a-=f,!a&&I)return}else if(g){let f=Math.min(g,o.length);o=o.subarray(f),g-=f}else{if(o.length<512)break;let f=o.subarray(0,512);o=o.subarray(512);let u=(E,v)=>f.subarray(E,v).toString("utf8").split("\0")[0],h=[u(345,500),u(0,100)].filter(Boolean).join("/"),l=parseInt(u(124,136).trim()||"0",8);if(!Number.isSafeInteger(l)||l<0||l>512*1024*1024||(I=h===A.entry,I&&(A.binaryBytes&&l!==A.binaryBytes||l>256*1024*1024||![0,48].includes(f[156]))))throw w();a=l,g=(512-l%512)%512}}throw w()}finally{await i.cancel().catch(()=>{})}}finally{await r.close()}}function vr(A){let e=Re(A)[Symbol.asyncIterator]();return new ReadableStream({async pull(t){let{value:r,done:n}=await e.next();n?t.close():t.enqueue(r)},async cancel(){await e.return?.()}})}async function Xe(A={}){let e=Te(A);if(await dA(e))return e.target;if(e.override)throw w();if(eA.has(e.target))return eA.get(e.target);let t=yr(e).finally(()=>eA.delete(e.target));return eA.set(e.target,t),t}async function yr(A){let{directory:e,target:t,artifact:r}=A,n=e+".lock",i=Date.now()+42e4;await He(e,{recursive:!0,mode:448});let o=!1;for(;!o;)try{await He(n,{mode:448}),o=!0}catch(s){if(s.code!=="EEXIST"||Date.now()>i)throw w();if(await dA(A))return t;try{Date.now()-(await Ge(n)).mtimeMs>6e5&&await X(n,{recursive:!0,force:!0})}catch{}await Er(200)}let a=A.platform==="win32"?ze:Ue,g=a.basename(t)+"."+Cr(),I=a.join(e,g+".archive"),C=a.join(e,g+".part");try{if(await dA(A))return t;await pr(r,I,A.fetchImpl||fetch),await wr(r,I,C);let s=await je(C);if(r.binarySha256&&s!==r.binarySha256||(await hr(C,493),!We(C,A)))throw w();return A.platform==="win32"&&await X(t,{force:!0}),await ur(C,t),await cr(t+".json",JSON.stringify({archiveSha256:r.archiveSha256,binarySha256:s,binaryBytes:(await Ge(t)).size,version:r.version})+`
|
|
3
|
+
`,{mode:384}),tA.set(t,mA(t)),t}catch{throw w()}finally{await Promise.all([X(I,{force:!0}),X(C,{force:!0}),X(n,{recursive:!0,force:!0})])}}var $e=xA.default,Z=xA.default.sync;function _e(A){if(!(!A?.pid||A.exitCode!==null||A.signalCode!==null))if(A.stdin?.destroy(),process.platform==="win32"){let e=DA.join(process.env.SystemRoot||"C:\\Windows","System32","taskkill.exe");Z(e,["/pid",String(A.pid),"/t","/f"],{stdio:"ignore",timeout:3e3,windowsHide:!0})}else A.kill()}function O(A,e,{env:t=process.env,home:r=Dr(),platform:n=process.platform,arch:i=process.arch}={}){if(e)return e;if(A==="ffmpeg")return Pe({env:t,home:r,platform:n,arch:i});let{delimiter:o,dirname:a,join:g,isAbsolute:I,extname:C}=n==="win32"?DA:Ve,s=Object.keys(t).find(h=>h.toUpperCase()==="PATH")||"PATH",c=[a(process.execPath),...(t[s]||"").split(o).filter(Boolean).map(h=>h.replace(/^"(.*)"$/,"$1"))];n!=="win32"?c.push("/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin",g(r,".volta/bin"),g(r,".local/bin")):c.push(g(t.APPDATA||g(r,"AppData","Roaming"),"npm"),g(r,".volta","bin"));let f=n!=="win32"||C(A)?[""]:[".exe",".com",".cmd",".bat"],u=c.filter(I).flatMap(h=>f.map(l=>g(h,A+l)));A==="codex"&&n==="darwin"&&u.push("/Applications/Codex.app/Contents/Resources/codex");for(let h of u)try{if(mr(h,n==="win32"?Ze.F_OK:Ze.X_OK),dr(h).isFile())return h}catch{}return A}function At(){let{delimiter:A,dirname:e}=process.platform==="win32"?DA:Ve,t=Object.keys(process.env).find(r=>r.toUpperCase()==="PATH")||"PATH";process.env[t]=[...new Set([e(process.execPath),...(process.env[t]||"").split(A).filter(Boolean)])].join(A),process.env.HONGGUO_CODEX=O("codex",process.env.HONGGUO_CODEX)}import{realpathSync as Nr}from"node:fs";import{relative as kr,resolve as Sr,isAbsolute as Fr}from"node:path";import{fileURLToPath as xr}from"node:url";var et=xr(new URL("../../",import.meta.url));var tt=["userPromptSubmit","stop","interrupt"],G=()=>({status:"unknown",events:tt.map(A=>({event:A,status:"unknown"}))});function rt({command:A=O("codex",process.env.HONGGUO_CODEX),args:e=["app-server"],cwd:t=process.cwd(),timeoutMs:r=8e3,pluginRoot:n=et,installedId:i}={}){let o=g=>{try{return Nr(g)}catch{return Sr(g)}},a=o(n);return new Promise(g=>{let I,C=!1,s="",c=0,f=h=>{C||(C=!0,clearTimeout(u),_e(I),g(h))},u=setTimeout(()=>f(G()),r);try{I=$e(A,e,{cwd:t,stdio:["pipe","pipe","ignore"],windowsHide:!0}),I.on("error",()=>f(G())),I.on("exit",()=>f(G())),I.stdin.on("error",()=>f(G())),I.stdout.setEncoding("utf8");let h=l=>I.stdin.write(JSON.stringify(l)+`
|
|
4
|
+
`);I.stdout.on("data",l=>{if(C)return;if(c+=Buffer.byteLength(l),c>2*1024*1024)return f(G());s+=l;let E;for(;!C&&(E=s.indexOf(`
|
|
5
|
+
`))>=0;){let v=s.slice(0,E);s=s.slice(E+1);let B;try{B=JSON.parse(v)}catch{continue}if(B.error&&[1,2].includes(B.id))return f(G());if(B.id===1&&B.result&&(h({jsonrpc:"2.0",method:"initialized"}),h({jsonrpc:"2.0",id:2,method:"hooks/list",params:{cwds:[t]}})),B.id===2&&Array.isArray(B.result?.data)){let L=B.result.data.flatMap(p=>Array.isArray(p?.hooks)?p.hooks:[]).filter(p=>typeof p?.pluginId=="string"&&p.pluginId.split("@")[0]==="codex-hongguo").filter(p=>{if(typeof p.sourcePath!="string")return!1;if(i)return p.pluginId===i;let k=kr(a,o(p.sourcePath));return k&&!k.startsWith("..")&&!Fr(k)});if(!L.length)return f(G());let Y=tt.map(p=>{let k=L.filter(m=>m.eventName===p),$=k.length?k.some(m=>!m.enabled)?"disabled":k.every(m=>["trusted","managed"].includes(m.trustStatus))?"ready":k.some(m=>["untrusted","modified"].includes(m.trustStatus))?"needs_review":"unknown":"missing";return{event:p,status:$}});f({status:Y.every(p=>p.status==="ready")?"ready":"needs_attention",events:Y})}}}),h({jsonrpc:"2.0",id:1,method:"initialize",params:{clientInfo:{name:"hongguo-setup",version:"1"},capabilities:{experimentalApi:!0}}})}catch{f(G())}})}var V="hongguo-local",rA="codex-hongguo@"+V,it="mreasonyang/codex-hongguo",nt=A=>typeof A=="string"?A.replace(/^https:\/\/github\.com\//,"").replace(/\.git$/,"").replace(/\/$/,""):A;function Yr(A,e=process.env){return t=>{let r=Z(A,[...t,"--json"],{env:e,encoding:"utf8",timeout:12e4,windowsHide:!0,maxBuffer:4194304});if(r.status!==0)throw Error("Codex \u6B65\u9AA4\u5931\u8D25\uFF1A"+t.slice(0,3).join(" ")+"\u3002\u8BF7\u5728 Codex \u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u68C0\u67E5\u72B6\u6001\u540E\u91CD\u8BD5\u3002");try{return JSON.parse(r.stdout)}catch{throw Error("Codex \u8FD4\u56DE\u4E86\u65E0\u6CD5\u8BC6\u522B\u7684\u7ED3\u679C\uFF0C\u8BF7\u66F4\u65B0 Codex \u540E\u91CD\u8BD5\u3002")}}}function Hr(A){if(/^[\w.-]+\/[\w.-]+$/.test(A)||Jr(A))return A;throw Error("--marketplace \u53EA\u63A5\u53D7 owner/repo \u6216\u73B0\u6709\u672C\u5730\u5E02\u573A\u76EE\u5F55\u3002")}function Gr({run:A,source:e=it,update:t=!1,dryRun:r=!1,log:n=console.log}){if(Hr(e),r){n("\u5C06\u4F7F\u7528 Codex \u539F\u751F\u5E02\u573A\u5B89\u88C5 "+rA+"\uFF1B\u5E02\u573A\u6765\u6E90\uFF1A"+e),n("\u89C2\u770B\u8FDB\u5EA6\u4FDD\u7559\u5728\u539F\u6570\u636E\u76EE\u5F55\u3002\u5B89\u88C5\u5B8C\u6210\u540E\u9700\u5728 Codex \u4E2D\u5BA1\u67E5\u5E76\u4FE1\u4EFB\u4E09\u4E2A Hooks\u3002");return}let i=A(["plugin","marketplace","list"]).marketplaces?.find(g=>g.name===V),o=i?.marketplaceSource?.source,a=!!i&&nt(o)!==nt(e);a&&A(["plugin","marketplace","remove",V]);try{A(["plugin","marketplace","add",e]),t&&!a&&i?.marketplaceSource?.sourceType==="git"&&A(["plugin","marketplace","upgrade",V]),A(["plugin","add",rA])}catch(g){if(a&&o){try{A(["plugin","marketplace","remove",V])}catch{}try{A(["plugin","marketplace","add",o]),A(["plugin","add",rA])}catch{throw Error("\u5B89\u88C5\u5931\u8D25\uFF0C\u539F\u5E02\u573A\u672A\u80FD\u81EA\u52A8\u6062\u590D\u3002\u8BF7\u4ECE Codex \u63D2\u4EF6\u8BBE\u7F6E\u91CD\u65B0\u6DFB\u52A0\u539F\u6765\u6E90\uFF1B\u89C2\u770B\u8FDB\u5EA6\u4ECD\u4FDD\u7559\u3002")}}throw g}n("\u7EA2\u679C\u77ED\u5267\u5DF2\u5B89\u88C5\u3002\u91CD\u65B0\u6253\u5F00\u64AD\u653E\u5668\u5373\u53EF\u4F7F\u7528\u65B0\u7248\u3002")}async function Fn(A=process.argv.slice(2)){try{let[e="help",...t]=A;if(e==="--version"){console.log(JSON.parse(Mr(new URL("../../package.json",import.meta.url),"utf8")).version);return}if(["help","--help","-h"].includes(e)){console.log(`\u7EA2\u679C\u77ED\u5267
|
|
5
6
|
codex-hongguo setup [--dry-run] [--marketplace owner/repo|\u76EE\u5F55]
|
|
6
7
|
codex-hongguo update [--dry-run] [--marketplace owner/repo|\u76EE\u5F55]
|
|
7
8
|
codex-hongguo doctor
|
|
8
|
-
\u9700\u8981 Node.js >=22.16
|
|
9
|
+
\u9700\u8981 Node.js >=22.16 \u548C Codex CLI\uFF1B\u64AD\u653E\u7EC4\u4EF6\u7531\u63D2\u4EF6\u81EA\u52A8\u51C6\u5907\u3002`);return}if(!["setup","update","doctor"].includes(e))throw Error("\u672A\u77E5\u547D\u4EE4\uFF1B\u8FD0\u884C codex-hongguo --help \u67E5\u770B\u7528\u6CD5\u3002");if(process.platform==="win32"&&process.arch!=="x64")throw Error("Windows \u8BD5\u7528\u7248\u9700\u8981 x64 Node.js\u3002");let[r,n]=process.versions.node.split(".").map(Number);if(r<22||r===22&&n<16)throw Error("\u9700\u8981 Node.js >=22.16\u3002");if(At(),e==="doctor"){if(t.length)throw Error("doctor \u4E0D\u63A5\u53D7\u989D\u5916\u53C2\u6570\u3002");if(Z(process.execPath,[Lr(new URL("../../dist/setup/check.mjs",import.meta.url))],{stdio:"inherit",timeout:15e3}).status!==0)throw Error("\u73AF\u5883\u68C0\u67E5\u672A\u5B8C\u6210\u3002");return}let i=it,o=!1;for(let g=0;g<t.length;g++)if(t[g]==="--dry-run")o=!0;else if(t[g]==="--marketplace"&&t[g+1])i=t[++g];else throw Error("\u65E0\u6CD5\u8BC6\u522B\u5B89\u88C5\u53C2\u6570\uFF1B\u8FD0\u884C codex-hongguo --help \u67E5\u770B\u7528\u6CD5\u3002");let a=O("codex",process.env.HONGGUO_CODEX);for(let[g,I]of[["Codex CLI",a],["npm",O("npm")]])if(Z(I,["--version"],{stdio:"ignore",timeout:3e3}).status!==0)throw Error("\u672A\u627E\u5230\u53EF\u8FD0\u884C\u7684 "+g+"\u3002\u5B89\u88C5\u540E\u91CD\u65B0\u8FD0\u884C setup\uFF1B\u5DF2\u6709\u63D2\u4EF6\u4E0E\u89C2\u770B\u8FDB\u5EA6\u4FDD\u6301\u539F\u6837\u3002");if(o||(console.log("\u6B63\u5728\u51C6\u5907\u64AD\u653E\u7EC4\u4EF6\uFF0C\u9996\u6B21\u4F7F\u7528\u9700\u8981\u8054\u7F51\u4E0B\u8F7D\u2026"),await Xe()),Gr({run:Yr(a),source:i,update:e==="update",dryRun:o}),!o){let g=await rt({command:a,installedId:rA}),I={userPromptSubmit:"UserPromptSubmit",stop:"Stop",interrupt:"Interrupt"},C=g.events.filter(s=>s.status!=="ready").map(s=>I[s.event]);g.status==="ready"?console.log("\u4E09\u4E2A\u56DE\u5408 Hooks \u5747\u5DF2\u4FE1\u4EFB\u5E76\u542F\u7528\u3002"):g.status==="unknown"?console.log("\u6682\u672A\u8BFB\u5230\u6388\u6743\u72B6\u6001\u3002\u8BF7\u6253\u5F00 Codex \u8BBE\u7F6E \u2192 Hooks \u2192 \u7EA2\u679C\u77ED\u5267\uFF0C\u6216\u5728\u64AD\u653E\u5668\u7684\u4F7F\u7528\u6307\u5357\u4E2D\u91CD\u65B0\u68C0\u67E5\u3002"):console.log("\u9700\u8981\u5904\u7406\u56DE\u5408 Hooks\u3002\u8BF7\u6253\u5F00 Codex \u8BBE\u7F6E \u2192 Hooks \u2192 \u7EA2\u679C\u77ED\u5267\uFF0C\u5BA1\u67E5\u5E76\u542F\u7528 "+C.join("\u3001")+"\u3002")}}catch(e){console.error(e.message),process.exitCode=1}}export{Yr as codexRunner,it as defaultSource,Gr as install,Fn as main,V as marketplaceName,rA as pluginId,Hr as validateSource};
|
|
10
|
+
/*! Bundled license information:
|
|
11
|
+
|
|
12
|
+
xz-decompress/dist/package/xz-decompress.js:
|
|
13
|
+
(*!
|
|
14
|
+
* Based on xzwasm (c) Steve Sanderson. License: MIT - https://github.com/SteveSanderson/xzwasm
|
|
15
|
+
* Contains xz-embedded by Lasse Collin and Igor Pavlov. License: Public domain - https://tukaani.org/xz/embedded.html
|
|
16
|
+
* and walloc (c) 2020 Igalia, S.L. License: MIT - https://github.com/wingo/walloc
|
|
17
|
+
*)
|
|
18
|
+
*/
|