@walkhi/code-relax 0.1.0-beta.5 → 0.1.0-beta.50

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.
Files changed (847) hide show
  1. package/README.md +93 -71
  2. package/dist/bin/cleanup-accounts.mjs +63 -0
  3. package/dist/bin/codex-remote.mjs +325 -184
  4. package/dist/bin/manage-relay-admin.mjs +20 -0
  5. package/dist/bin/migrate-relay-db.mjs +109 -0
  6. package/dist/bin/publish-android-release.mjs +63 -0
  7. package/dist/bin/publish-harmony-release.mjs +46 -0
  8. package/dist/bin/release-upload-server.mjs +190 -0
  9. package/dist/bin/self-relay-admin.mjs +8 -0
  10. package/dist/bin/self-relay-demo.mjs +2 -2
  11. package/dist/bin/self-relay-server.mjs +43 -30
  12. package/dist/build-platform.json +1 -0
  13. package/dist/get-shared-service-url.ps1 +14 -6
  14. package/dist/shared/app-server-events.cjs +378 -238
  15. package/dist/shared/code-browser.cjs +159 -0
  16. package/dist/shared/file-changes.cjs +31 -0
  17. package/dist/shared/file-citations.cjs +117 -0
  18. package/dist/shared/file-mentions.cjs +92 -0
  19. package/dist/shared/message-delivery.cjs +115 -0
  20. package/dist/shared/p2p-data-channel.cjs +22 -0
  21. package/dist/shared/p2p-diagnostics.cjs +1 -1
  22. package/dist/shared/p2p-file-channel.cjs +87 -0
  23. package/dist/shared/p2p-ice-policy.cjs +22 -0
  24. package/dist/shared/plan-pricing.cjs +32 -0
  25. package/dist/shared/question-attention.cjs +69 -0
  26. package/dist/shared/server-requests.cjs +250 -6
  27. package/dist/shared/service-endpoints.cjs +21 -0
  28. package/dist/shared/timeline-sync.cjs +111 -5
  29. package/dist/skills/code-relax/SKILL.md +13 -8
  30. package/dist/src/archived-threads.mjs +22 -0
  31. package/dist/src/bounded-process-log.mjs +63 -0
  32. package/dist/src/celsius-client.mjs +107 -0
  33. package/dist/src/code-browser.mjs +100 -0
  34. package/dist/src/desktop-launcher.mjs +53 -42
  35. package/dist/src/dots-approval-timeline.mjs +99 -0
  36. package/dist/src/dots-avatar.mjs +42 -0
  37. package/dist/src/dots-chat-projection.mjs +50 -0
  38. package/dist/src/dots-chat-server.mjs +483 -0
  39. package/dist/src/dots-message-images.mjs +319 -0
  40. package/dist/src/dots-profile.mjs +77 -0
  41. package/dist/src/dots-room-activity.mjs +172 -0
  42. package/dist/src/dots-room-client.mjs +135 -0
  43. package/dist/src/dots-room-projection.mjs +94 -0
  44. package/dist/src/dots-schedules.mjs +66 -0
  45. package/dist/src/dots-summary-tasks.mjs +32 -0
  46. package/dist/src/dots-task-catalog.mjs +430 -0
  47. package/dist/src/dots-task-files.mjs +52 -0
  48. package/dist/src/file-transfer-range.mjs +22 -0
  49. package/dist/src/file-upload-session.mjs +130 -0
  50. package/dist/src/hosted-history-app-server.mjs +103 -0
  51. package/dist/src/hosted-history-cache.mjs +113 -0
  52. package/dist/src/lan-socket-server.mjs +241 -84
  53. package/dist/src/managed-app-server.mjs +210 -44
  54. package/dist/src/managed-endpoint.mjs +25 -0
  55. package/dist/src/message-images.mjs +0 -18
  56. package/dist/src/message-upload-files.mjs +109 -0
  57. package/dist/src/onboarding.mjs +10 -29
  58. package/dist/src/plan-pricing.mjs +47 -0
  59. package/dist/src/platform/README.md +2 -2
  60. package/dist/src/platform/codex-protocol.mjs +46 -0
  61. package/dist/src/platform/codex-runtime.mjs +3 -0
  62. package/dist/src/platform/credential-store.mjs +3 -0
  63. package/dist/src/platform/desktop-host.mjs +3 -0
  64. package/dist/src/platform/desktop-project-registration.mjs +3 -0
  65. package/dist/src/platform/desktop-project-store.mjs +208 -0
  66. package/dist/src/platform/file-opener.mjs +9 -0
  67. package/dist/src/platform/linux/codex-runtime.mjs +56 -0
  68. package/dist/src/platform/linux/credential-store.mjs +28 -0
  69. package/dist/src/platform/linux/desktop-host.mjs +87 -0
  70. package/dist/src/platform/linux/desktop-installation.mjs +36 -0
  71. package/dist/src/platform/linux/desktop-project-registration.mjs +11 -0
  72. package/dist/src/platform/linux/network-info.mjs +11 -0
  73. package/dist/src/platform/linux/process.mjs +53 -0
  74. package/dist/src/platform/linux/project-locations.mjs +17 -0
  75. package/dist/src/platform/linux/resident-startup.mjs +52 -0
  76. package/dist/src/platform/linux/retained-runtime.mjs +76 -0
  77. package/dist/src/platform/linux/service-host.mjs +18 -0
  78. package/dist/src/platform/linux/system.mjs +50 -0
  79. package/dist/src/platform/linux/user-environment.mjs +9 -0
  80. package/dist/src/platform/macos/codex-runtime.mjs +125 -0
  81. package/dist/src/platform/macos/credential-store.mjs +10 -0
  82. package/dist/src/platform/macos/desktop-host.mjs +86 -0
  83. package/dist/src/platform/macos/desktop-project-registration.mjs +11 -0
  84. package/dist/src/platform/macos/network-info.mjs +8 -0
  85. package/dist/src/platform/macos/project-locations.mjs +8 -0
  86. package/dist/src/platform/macos/resident-startup.mjs +84 -0
  87. package/dist/src/platform/macos/retained-runtime.mjs +127 -0
  88. package/dist/src/platform/macos/service-host.mjs +18 -0
  89. package/dist/src/platform/macos/system.mjs +29 -0
  90. package/dist/src/platform/macos/user-environment.mjs +9 -0
  91. package/dist/src/platform/native-package.mjs +58 -0
  92. package/dist/src/platform/network-info.mjs +3 -0
  93. package/dist/src/platform/path-identity.mjs +5 -0
  94. package/dist/src/platform/posix/network-candidates.mjs +23 -0
  95. package/dist/src/platform/posix/runtime-paths.mjs +25 -0
  96. package/dist/src/platform/power-inhibitor.mjs +22 -0
  97. package/dist/src/platform/project-locations.mjs +3 -0
  98. package/dist/src/platform/runtime-paths.mjs +8 -0
  99. package/dist/src/platform/select.mjs +5 -0
  100. package/dist/src/platform/service-host.mjs +3 -0
  101. package/dist/src/platform/user-environment.mjs +3 -0
  102. package/dist/src/platform/windows/activate-desktop.ps1 +49 -0
  103. package/dist/src/platform/windows/codex-runtime.mjs +215 -0
  104. package/dist/src/platform/windows/credential-store.mjs +27 -27
  105. package/dist/src/platform/windows/credential-store.ps1 +49 -49
  106. package/dist/src/platform/windows/desktop-helper.mjs +179 -0
  107. package/dist/src/platform/windows/desktop-host.mjs +50 -23
  108. package/dist/src/platform/windows/desktop-info.ps1 +38 -16
  109. package/dist/src/platform/windows/desktop-project-registration.mjs +4 -0
  110. package/dist/src/platform/windows/desktop-runtime.ps1 +10 -0
  111. package/dist/src/platform/windows/desktop-shortcuts.ps1 +21 -28
  112. package/dist/src/platform/windows/dots-profile.mjs +49 -0
  113. package/dist/src/platform/windows/keep-awake.ps1 +20 -0
  114. package/dist/src/platform/windows/launch-worker.mjs +17 -18
  115. package/dist/src/platform/windows/project-locations.mjs +16 -0
  116. package/dist/src/platform/windows/resident-start.js +20 -0
  117. package/dist/src/platform/windows/resident-startup.ps1 +76 -20
  118. package/dist/src/platform/windows/rustdesk-video-probe.mjs +168 -0
  119. package/dist/src/platform/windows/service-host.mjs +29 -37
  120. package/dist/src/platform/windows/start-hidden-console.ps1 +11 -2
  121. package/dist/src/platform/windows/stop-desktop.ps1 +7 -4
  122. package/dist/src/platform/windows/user-environment.mjs +12 -10
  123. package/dist/src/project-create.mjs +121 -0
  124. package/dist/src/project-management.mjs +59 -0
  125. package/dist/src/project-remove.mjs +55 -0
  126. package/dist/src/project-update.mjs +59 -0
  127. package/dist/src/runtime-discovery.mjs +47 -0
  128. package/dist/src/self-relay/account-cleanup.mjs +30 -0
  129. package/dist/src/self-relay/account-connections.mjs +52 -0
  130. package/dist/src/self-relay/admin-cloud.mjs +101 -0
  131. package/dist/src/self-relay/admin-page.mjs +80 -0
  132. package/dist/src/self-relay/admin-server.mjs +74 -0
  133. package/dist/src/self-relay/admin-state.mjs +85 -19
  134. package/dist/src/self-relay/admin-style.mjs +14 -0
  135. package/dist/src/self-relay/android-releases.mjs +61 -0
  136. package/dist/src/self-relay/client.mjs +45 -45
  137. package/dist/src/self-relay/connector.mjs +421 -144
  138. package/dist/src/self-relay/demo.mjs +34 -35
  139. package/dist/src/self-relay/device-info.mjs +27 -0
  140. package/dist/src/self-relay/device-store.mjs +10 -2
  141. package/dist/src/self-relay/diagnostics.mjs +54 -0
  142. package/dist/src/self-relay/email-accounts.mjs +183 -0
  143. package/dist/src/self-relay/file-wire.mjs +13 -0
  144. package/dist/src/self-relay/lan-authorizations.mjs +44 -2
  145. package/dist/src/self-relay/lifecycle.mjs +241 -262
  146. package/dist/src/self-relay/long-pairing.mjs +40 -0
  147. package/dist/src/self-relay/mysql-state.mjs +118 -0
  148. package/dist/src/self-relay/p2p-probe.mjs +56 -11
  149. package/dist/src/self-relay/privacy-page.mjs +26 -0
  150. package/dist/src/self-relay/public-releases.mjs +67 -0
  151. package/dist/src/self-relay/rtc-file-bridge.mjs +41 -0
  152. package/dist/src/self-relay/server.mjs +653 -115
  153. package/dist/src/self-relay/usage-daily.mjs +55 -0
  154. package/dist/src/self-relay/usage-meter.mjs +141 -0
  155. package/dist/src/server.mjs +1547 -1794
  156. package/dist/src/service-control.mjs +17 -7
  157. package/dist/src/service-doctor.mjs +119 -34
  158. package/dist/src/service-health.mjs +2 -2
  159. package/dist/src/service-install.mjs +91 -85
  160. package/dist/src/service-lifecycle.mjs +117 -108
  161. package/dist/src/service-power.mjs +58 -0
  162. package/dist/src/service-restart.mjs +45 -12
  163. package/dist/src/service-update-worker.mjs +42 -0
  164. package/dist/src/service-update.mjs +77 -0
  165. package/dist/src/shared-app-server.mjs +561 -407
  166. package/dist/src/shared-catalog.mjs +95 -13
  167. package/dist/src/shared-recovery.mjs +24 -14
  168. package/dist/src/shared-thread-stream.mjs +148 -63
  169. package/dist/src/skill-install.mjs +0 -13
  170. package/dist/src/turn-model-history.mjs +47 -0
  171. package/dist/src/usage-reset.mjs +17 -0
  172. package/dist/src/workstation-downloads.mjs +120 -0
  173. package/package.json +35 -37
  174. package/tools/postinstall.mjs +90 -22
  175. package/dist/src/app-server-client.mjs +0 -468
  176. package/dist/src/app-server-tasks.mjs +0 -358
  177. package/dist/src/debug-ui.mjs +0 -131
  178. package/dist/src/platform/windows/desktop-monitor.mjs +0 -34
  179. package/dist/src/platform/windows/desktop-shortcut-run.ps1 +0 -5
  180. package/dist/src/platform/windows/desktop-tools.mjs +0 -48
  181. package/dist/src/thread-catalog.mjs +0 -47
  182. package/dist/tools/find-desktop-pipe.mjs +0 -10
  183. package/dist/web/activity-view.js +0 -283
  184. package/dist/web/approval-ui.js +0 -188
  185. package/dist/web/capabilities.js +0 -57
  186. package/dist/web/chat-transport.js +0 -202
  187. package/dist/web/chat.css +0 -782
  188. package/dist/web/chat.js +0 -3830
  189. package/dist/web/client-platform.js +0 -11
  190. package/dist/web/community-view.js +0 -20
  191. package/dist/web/community.css +0 -77
  192. package/dist/web/community.html +0 -37
  193. package/dist/web/composer-controller.js +0 -101
  194. package/dist/web/conversation-controller.js +0 -99
  195. package/dist/web/disclosure-state-controller.js +0 -95
  196. package/dist/web/draft-controller.js +0 -103
  197. package/dist/web/harmony-platform.js +0 -52
  198. package/dist/web/highlight-powershell.min.js +0 -39
  199. package/dist/web/highlight.min.js +0 -1262
  200. package/dist/web/history-cache.js +0 -240
  201. package/dist/web/history-controller.js +0 -167
  202. package/dist/web/index.html +0 -325
  203. package/dist/web/lan-session.js +0 -122
  204. package/dist/web/link-action-controller.js +0 -212
  205. package/dist/web/message-send-controller.js +0 -177
  206. package/dist/web/message-view.js +0 -98
  207. package/dist/web/p2p-data-channel.js +0 -50
  208. package/dist/web/p2p-diagnostics.js +0 -28
  209. package/dist/web/p2p-probe.js +0 -123
  210. package/dist/web/page-resume.js +0 -28
  211. package/dist/web/pending-message-store.js +0 -108
  212. package/dist/web/queue-controller.js +0 -82
  213. package/dist/web/resources.json +0 -1
  214. package/dist/web/self-relay-session.js +0 -129
  215. package/dist/web/server-requests.js +0 -67
  216. package/dist/web/station-connection-controller.js +0 -75
  217. package/dist/web/task-list-view.js +0 -296
  218. package/dist/web/thread-attention-controller.js +0 -124
  219. package/dist/web/thread-context-controller.js +0 -30
  220. package/dist/web/thread-list-controller.js +0 -61
  221. package/dist/web/thread-list-sync.js +0 -86
  222. package/dist/web/thread-title-controller.js +0 -57
  223. package/dist/web/timeline-formatters.js +0 -249
  224. package/dist/web/timeline-reducer.js +0 -81
  225. package/dist/web/timeline-renderer.js +0 -161
  226. package/dist/web/timeline-scroll-controller.js +0 -50
  227. package/dist/web/timeline-sync.js +0 -67
  228. package/dist/web/usage-controller.js +0 -258
  229. package/dist/web/vendor/README.md +0 -14
  230. package/dist/web/vendor/highlight-powershell.min.js +0 -39
  231. package/dist/web/vendor/highlight.LICENSE.txt +0 -29
  232. package/dist/web/vendor/highlight.min.js +0 -1262
  233. package/dist/web/vendor/lucide.LICENSE.txt +0 -17
  234. package/node_modules/@img/colour/LICENSE.md +0 -82
  235. package/node_modules/@img/colour/README.md +0 -15
  236. package/node_modules/@img/colour/color.cjs +0 -1596
  237. package/node_modules/@img/colour/index.cjs +0 -1
  238. package/node_modules/@img/colour/index.d.ts +0 -929
  239. package/node_modules/@img/colour/package.json +0 -58
  240. package/node_modules/@img/sharp-win32-x64/LICENSE +0 -191
  241. package/node_modules/@img/sharp-win32-x64/README.md +0 -59
  242. package/node_modules/@img/sharp-win32-x64/index.cjs +0 -1
  243. package/node_modules/@img/sharp-win32-x64/lib/libvips-42.dll +0 -0
  244. package/node_modules/@img/sharp-win32-x64/lib/libvips-cpp-8.18.6.dll +0 -0
  245. package/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64-0.35.4.node +0 -0
  246. package/node_modules/@img/sharp-win32-x64/package.json +0 -40
  247. package/node_modules/@img/sharp-win32-x64/versions.json +0 -30
  248. package/node_modules/@node-datachannel/win32-x64-msvc/node_datachannel.node +0 -0
  249. package/node_modules/@node-datachannel/win32-x64-msvc/package.json +0 -20
  250. package/node_modules/ansi-regex/index.d.ts +0 -37
  251. package/node_modules/ansi-regex/index.js +0 -10
  252. package/node_modules/ansi-regex/license +0 -9
  253. package/node_modules/ansi-regex/package.json +0 -55
  254. package/node_modules/ansi-regex/readme.md +0 -78
  255. package/node_modules/ansi-styles/index.d.ts +0 -345
  256. package/node_modules/ansi-styles/index.js +0 -163
  257. package/node_modules/ansi-styles/license +0 -9
  258. package/node_modules/ansi-styles/package.json +0 -56
  259. package/node_modules/ansi-styles/readme.md +0 -152
  260. package/node_modules/camelcase/index.d.ts +0 -63
  261. package/node_modules/camelcase/index.js +0 -76
  262. package/node_modules/camelcase/license +0 -9
  263. package/node_modules/camelcase/package.json +0 -43
  264. package/node_modules/camelcase/readme.md +0 -99
  265. package/node_modules/cliui/CHANGELOG.md +0 -76
  266. package/node_modules/cliui/LICENSE.txt +0 -14
  267. package/node_modules/cliui/README.md +0 -115
  268. package/node_modules/cliui/index.js +0 -354
  269. package/node_modules/cliui/package.json +0 -65
  270. package/node_modules/color-convert/CHANGELOG.md +0 -54
  271. package/node_modules/color-convert/LICENSE +0 -21
  272. package/node_modules/color-convert/README.md +0 -68
  273. package/node_modules/color-convert/conversions.js +0 -839
  274. package/node_modules/color-convert/index.js +0 -81
  275. package/node_modules/color-convert/package.json +0 -48
  276. package/node_modules/color-convert/route.js +0 -97
  277. package/node_modules/color-name/LICENSE +0 -8
  278. package/node_modules/color-name/README.md +0 -11
  279. package/node_modules/color-name/index.js +0 -152
  280. package/node_modules/color-name/package.json +0 -28
  281. package/node_modules/decamelize/index.js +0 -13
  282. package/node_modules/decamelize/license +0 -21
  283. package/node_modules/decamelize/package.json +0 -38
  284. package/node_modules/decamelize/readme.md +0 -48
  285. package/node_modules/detect-libc/LICENSE +0 -201
  286. package/node_modules/detect-libc/README.md +0 -163
  287. package/node_modules/detect-libc/index.d.ts +0 -14
  288. package/node_modules/detect-libc/lib/detect-libc.js +0 -313
  289. package/node_modules/detect-libc/lib/elf.js +0 -39
  290. package/node_modules/detect-libc/lib/filesystem.js +0 -51
  291. package/node_modules/detect-libc/lib/process.js +0 -24
  292. package/node_modules/detect-libc/package.json +0 -44
  293. package/node_modules/dijkstrajs/.travis.yml +0 -4
  294. package/node_modules/dijkstrajs/CONTRIBUTING.md +0 -8
  295. package/node_modules/dijkstrajs/LICENSE.md +0 -19
  296. package/node_modules/dijkstrajs/README.md +0 -18
  297. package/node_modules/dijkstrajs/dijkstra.js +0 -165
  298. package/node_modules/dijkstrajs/package.json +0 -60
  299. package/node_modules/dijkstrajs/test/dijkstra.test.js +0 -96
  300. package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  301. package/node_modules/emoji-regex/README.md +0 -73
  302. package/node_modules/emoji-regex/es2015/index.js +0 -6
  303. package/node_modules/emoji-regex/es2015/text.js +0 -6
  304. package/node_modules/emoji-regex/index.d.ts +0 -23
  305. package/node_modules/emoji-regex/index.js +0 -6
  306. package/node_modules/emoji-regex/package.json +0 -50
  307. package/node_modules/emoji-regex/text.js +0 -6
  308. package/node_modules/find-up/index.d.ts +0 -137
  309. package/node_modules/find-up/index.js +0 -89
  310. package/node_modules/find-up/license +0 -9
  311. package/node_modules/find-up/package.json +0 -53
  312. package/node_modules/find-up/readme.md +0 -156
  313. package/node_modules/get-caller-file/LICENSE.md +0 -6
  314. package/node_modules/get-caller-file/README.md +0 -41
  315. package/node_modules/get-caller-file/index.d.ts +0 -2
  316. package/node_modules/get-caller-file/index.js +0 -22
  317. package/node_modules/get-caller-file/index.js.map +0 -1
  318. package/node_modules/get-caller-file/package.json +0 -42
  319. package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  320. package/node_modules/is-fullwidth-code-point/index.js +0 -50
  321. package/node_modules/is-fullwidth-code-point/license +0 -9
  322. package/node_modules/is-fullwidth-code-point/package.json +0 -42
  323. package/node_modules/is-fullwidth-code-point/readme.md +0 -39
  324. package/node_modules/locate-path/index.d.ts +0 -83
  325. package/node_modules/locate-path/index.js +0 -65
  326. package/node_modules/locate-path/license +0 -9
  327. package/node_modules/locate-path/package.json +0 -45
  328. package/node_modules/locate-path/readme.md +0 -122
  329. package/node_modules/node-datachannel/.clang-format +0 -17
  330. package/node_modules/node-datachannel/.editorconfig +0 -12
  331. package/node_modules/node-datachannel/.eslintignore +0 -8
  332. package/node_modules/node-datachannel/.eslintrc.json +0 -27
  333. package/node_modules/node-datachannel/.gitmodules +0 -3
  334. package/node_modules/node-datachannel/.prettierignore +0 -7
  335. package/node_modules/node-datachannel/.prettierrc +0 -13
  336. package/node_modules/node-datachannel/API.md +0 -247
  337. package/node_modules/node-datachannel/BULDING.md +0 -26
  338. package/node_modules/node-datachannel/CMakeLists.txt +0 -153
  339. package/node_modules/node-datachannel/LICENSE +0 -373
  340. package/node_modules/node-datachannel/README.md +0 -129
  341. package/node_modules/node-datachannel/dist/cjs/index.cjs +0 -11
  342. package/node_modules/node-datachannel/dist/cjs/index.cjs.map +0 -1
  343. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs +0 -101
  344. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs.map +0 -1
  345. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs +0 -91
  346. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs.map +0 -1
  347. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs +0 -94
  348. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs.map +0 -1
  349. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs +0 -45
  350. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs.map +0 -1
  351. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs +0 -8
  352. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs.map +0 -1
  353. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs +0 -86
  354. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs.map +0 -1
  355. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs +0 -34
  356. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs.map +0 -1
  357. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs +0 -34
  358. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs.map +0 -1
  359. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs +0 -214
  360. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs.map +0 -1
  361. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs +0 -53
  362. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +0 -1
  363. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs +0 -83
  364. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs.map +0 -1
  365. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs +0 -132
  366. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs.map +0 -1
  367. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs +0 -94
  368. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs.map +0 -1
  369. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs +0 -434
  370. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs.map +0 -1
  371. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs +0 -59
  372. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs.map +0 -1
  373. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs +0 -45
  374. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs.map +0 -1
  375. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs +0 -42
  376. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs.map +0 -1
  377. package/node_modules/node-datachannel/dist/esm/index.mjs +0 -8
  378. package/node_modules/node-datachannel/dist/esm/index.mjs.map +0 -1
  379. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs +0 -78
  380. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs.map +0 -1
  381. package/node_modules/node-datachannel/dist/esm/lib/index.mjs +0 -64
  382. package/node_modules/node-datachannel/dist/esm/lib/index.mjs.map +0 -1
  383. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs +0 -78
  384. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs.map +0 -1
  385. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs +0 -43
  386. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs.map +0 -1
  387. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs +0 -6
  388. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs.map +0 -1
  389. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs +0 -82
  390. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs.map +0 -1
  391. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs +0 -28
  392. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs.map +0 -1
  393. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs +0 -30
  394. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs.map +0 -1
  395. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs +0 -210
  396. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs.map +0 -1
  397. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs +0 -49
  398. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs.map +0 -1
  399. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs +0 -79
  400. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs.map +0 -1
  401. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs +0 -128
  402. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs.map +0 -1
  403. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs +0 -89
  404. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs.map +0 -1
  405. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs +0 -430
  406. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs.map +0 -1
  407. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs +0 -55
  408. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs.map +0 -1
  409. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs +0 -41
  410. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs.map +0 -1
  411. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs +0 -27
  412. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs.map +0 -1
  413. package/node_modules/node-datachannel/dist/types/lib/datachannel-stream.d.ts +0 -24
  414. package/node_modules/node-datachannel/dist/types/lib/index.d.ts +0 -241
  415. package/node_modules/node-datachannel/dist/types/lib/types.d.ts +0 -119
  416. package/node_modules/node-datachannel/dist/types/lib/websocket-server.d.ts +0 -13
  417. package/node_modules/node-datachannel/dist/types/lib/websocket.d.ts +0 -25
  418. package/node_modules/node-datachannel/dist/types/polyfill/Events.d.ts +0 -15
  419. package/node_modules/node-datachannel/dist/types/polyfill/RTCCertificate.d.ts +0 -9
  420. package/node_modules/node-datachannel/dist/types/polyfill/RTCDataChannel.d.ts +0 -29
  421. package/node_modules/node-datachannel/dist/types/polyfill/RTCDtlsTransport.d.ts +0 -15
  422. package/node_modules/node-datachannel/dist/types/polyfill/RTCError.d.ts +0 -17
  423. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceCandidate.d.ts +0 -21
  424. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceTransport.d.ts +0 -30
  425. package/node_modules/node-datachannel/dist/types/polyfill/RTCPeerConnection.d.ts +0 -64
  426. package/node_modules/node-datachannel/dist/types/polyfill/RTCSctpTransport.d.ts +0 -15
  427. package/node_modules/node-datachannel/dist/types/polyfill/RTCSessionDescription.d.ts +0 -10
  428. package/node_modules/node-datachannel/dist/types/polyfill/index.d.ts +0 -26
  429. package/node_modules/node-datachannel/jest.config.ts +0 -14
  430. package/node_modules/node-datachannel/package.json +0 -133
  431. package/node_modules/node-datachannel/rollup.config.mjs +0 -67
  432. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.cpp +0 -530
  433. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.h +0 -63
  434. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.cpp +0 -172
  435. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.h +0 -43
  436. package/node_modules/node-datachannel/src/cpp/main.cpp +0 -58
  437. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.cpp +0 -457
  438. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.h +0 -52
  439. package/node_modules/node-datachannel/src/cpp/media-av1packetization.cpp +0 -24
  440. package/node_modules/node-datachannel/src/cpp/media-av1packetization.h +0 -11
  441. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.cpp +0 -126
  442. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.h +0 -29
  443. package/node_modules/node-datachannel/src/cpp/media-direction.cpp +0 -43
  444. package/node_modules/node-datachannel/src/cpp/media-direction.h +0 -10
  445. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.cpp +0 -126
  446. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.h +0 -30
  447. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.cpp +0 -126
  448. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.h +0 -30
  449. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.cpp +0 -32
  450. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.h +0 -11
  451. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.cpp +0 -31
  452. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.h +0 -11
  453. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.cpp +0 -79
  454. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.h +0 -28
  455. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.cpp +0 -68
  456. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.h +0 -28
  457. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.cpp +0 -57
  458. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.h +0 -28
  459. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.cpp +0 -93
  460. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.h +0 -30
  461. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.cpp +0 -167
  462. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.h +0 -35
  463. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.cpp +0 -95
  464. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.h +0 -30
  465. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.cpp +0 -458
  466. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.h +0 -61
  467. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.cpp +0 -526
  468. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.h +0 -56
  469. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.cpp +0 -1298
  470. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.h +0 -89
  471. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.cpp +0 -205
  472. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.h +0 -24
  473. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.cpp +0 -57
  474. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.h +0 -47
  475. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.cpp +0 -275
  476. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.h +0 -41
  477. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.cpp +0 -796
  478. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.h +0 -63
  479. package/node_modules/node-datachannel/src/index.ts +0 -9
  480. package/node_modules/node-datachannel/src/lib/datachannel-stream.ts +0 -100
  481. package/node_modules/node-datachannel/src/lib/index.ts +0 -290
  482. package/node_modules/node-datachannel/src/lib/node-datachannel.ts +0 -84
  483. package/node_modules/node-datachannel/src/lib/types.ts +0 -169
  484. package/node_modules/node-datachannel/src/lib/websocket-server.ts +0 -37
  485. package/node_modules/node-datachannel/src/lib/websocket.ts +0 -26
  486. package/node_modules/node-datachannel/src/polyfill/Events.ts +0 -82
  487. package/node_modules/node-datachannel/src/polyfill/Exception.ts +0 -37
  488. package/node_modules/node-datachannel/src/polyfill/README.md +0 -41
  489. package/node_modules/node-datachannel/src/polyfill/RTCCertificate.ts +0 -21
  490. package/node_modules/node-datachannel/src/polyfill/RTCDataChannel.ts +0 -225
  491. package/node_modules/node-datachannel/src/polyfill/RTCDtlsTransport.ts +0 -46
  492. package/node_modules/node-datachannel/src/polyfill/RTCError.ts +0 -78
  493. package/node_modules/node-datachannel/src/polyfill/RTCIceCandidate.ts +0 -128
  494. package/node_modules/node-datachannel/src/polyfill/RTCIceTransport.ts +0 -90
  495. package/node_modules/node-datachannel/src/polyfill/RTCPeerConnection.ts +0 -527
  496. package/node_modules/node-datachannel/src/polyfill/RTCSctpTransport.ts +0 -51
  497. package/node_modules/node-datachannel/src/polyfill/RTCSessionDescription.ts +0 -41
  498. package/node_modules/node-datachannel/src/polyfill/index.ts +0 -38
  499. package/node_modules/node-datachannel/tsconfig.json +0 -21
  500. package/node_modules/p-limit/index.d.ts +0 -38
  501. package/node_modules/p-limit/index.js +0 -57
  502. package/node_modules/p-limit/license +0 -9
  503. package/node_modules/p-limit/package.json +0 -52
  504. package/node_modules/p-limit/readme.md +0 -101
  505. package/node_modules/p-locate/index.d.ts +0 -64
  506. package/node_modules/p-locate/index.js +0 -52
  507. package/node_modules/p-locate/license +0 -9
  508. package/node_modules/p-locate/package.json +0 -53
  509. package/node_modules/p-locate/readme.md +0 -90
  510. package/node_modules/p-try/index.d.ts +0 -39
  511. package/node_modules/p-try/index.js +0 -9
  512. package/node_modules/p-try/license +0 -9
  513. package/node_modules/p-try/package.json +0 -42
  514. package/node_modules/p-try/readme.md +0 -58
  515. package/node_modules/path-exists/index.d.ts +0 -28
  516. package/node_modules/path-exists/index.js +0 -23
  517. package/node_modules/path-exists/license +0 -9
  518. package/node_modules/path-exists/package.json +0 -39
  519. package/node_modules/path-exists/readme.md +0 -52
  520. package/node_modules/pngjs/.eslintignore +0 -2
  521. package/node_modules/pngjs/.eslintrc.json +0 -19
  522. package/node_modules/pngjs/.prettierignore +0 -3
  523. package/node_modules/pngjs/LICENSE +0 -20
  524. package/node_modules/pngjs/README.md +0 -429
  525. package/node_modules/pngjs/browser.js +0 -16096
  526. package/node_modules/pngjs/coverage/lcov-report/base.css +0 -354
  527. package/node_modules/pngjs/coverage/lcov-report/bitmapper.js.html +0 -881
  528. package/node_modules/pngjs/coverage/lcov-report/bitpacker.js.html +0 -554
  529. package/node_modules/pngjs/coverage/lcov-report/block-navigation.js +0 -77
  530. package/node_modules/pngjs/coverage/lcov-report/chunkstream.js.html +0 -647
  531. package/node_modules/pngjs/coverage/lcov-report/constants.js.html +0 -176
  532. package/node_modules/pngjs/coverage/lcov-report/crc.js.html +0 -200
  533. package/node_modules/pngjs/coverage/lcov-report/favicon.png +0 -0
  534. package/node_modules/pngjs/coverage/lcov-report/filter-pack.js.html +0 -593
  535. package/node_modules/pngjs/coverage/lcov-report/filter-parse-async.js.html +0 -152
  536. package/node_modules/pngjs/coverage/lcov-report/filter-parse-sync.js.html +0 -143
  537. package/node_modules/pngjs/coverage/lcov-report/filter-parse.js.html +0 -611
  538. package/node_modules/pngjs/coverage/lcov-report/format-normaliser.js.html +0 -359
  539. package/node_modules/pngjs/coverage/lcov-report/index.html +0 -426
  540. package/node_modules/pngjs/coverage/lcov-report/interlace.js.html +0 -365
  541. package/node_modules/pngjs/coverage/lcov-report/packer-async.js.html +0 -230
  542. package/node_modules/pngjs/coverage/lcov-report/packer-sync.js.html +0 -248
  543. package/node_modules/pngjs/coverage/lcov-report/packer.js.html +0 -467
  544. package/node_modules/pngjs/coverage/lcov-report/paeth-predictor.js.html +0 -128
  545. package/node_modules/pngjs/coverage/lcov-report/parser-async.js.html +0 -575
  546. package/node_modules/pngjs/coverage/lcov-report/parser-sync.js.html +0 -404
  547. package/node_modules/pngjs/coverage/lcov-report/parser.js.html +0 -950
  548. package/node_modules/pngjs/coverage/lcov-report/png-sync.js.html +0 -116
  549. package/node_modules/pngjs/coverage/lcov-report/png.js.html +0 -662
  550. package/node_modules/pngjs/coverage/lcov-report/prettify.css +0 -101
  551. package/node_modules/pngjs/coverage/lcov-report/prettify.js +0 -1007
  552. package/node_modules/pngjs/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  553. package/node_modules/pngjs/coverage/lcov-report/sorter.js +0 -169
  554. package/node_modules/pngjs/coverage/lcov-report/sync-inflate.js.html +0 -584
  555. package/node_modules/pngjs/coverage/lcov-report/sync-reader.js.html +0 -215
  556. package/node_modules/pngjs/coverage/lcov.info +0 -2177
  557. package/node_modules/pngjs/lib/bitmapper.js +0 -267
  558. package/node_modules/pngjs/lib/bitpacker.js +0 -158
  559. package/node_modules/pngjs/lib/chunkstream.js +0 -189
  560. package/node_modules/pngjs/lib/constants.js +0 -32
  561. package/node_modules/pngjs/lib/crc.js +0 -40
  562. package/node_modules/pngjs/lib/filter-pack.js +0 -171
  563. package/node_modules/pngjs/lib/filter-parse-async.js +0 -24
  564. package/node_modules/pngjs/lib/filter-parse-sync.js +0 -21
  565. package/node_modules/pngjs/lib/filter-parse.js +0 -177
  566. package/node_modules/pngjs/lib/format-normaliser.js +0 -93
  567. package/node_modules/pngjs/lib/interlace.js +0 -95
  568. package/node_modules/pngjs/lib/packer-async.js +0 -50
  569. package/node_modules/pngjs/lib/packer-sync.js +0 -56
  570. package/node_modules/pngjs/lib/packer.js +0 -129
  571. package/node_modules/pngjs/lib/paeth-predictor.js +0 -16
  572. package/node_modules/pngjs/lib/parser-async.js +0 -165
  573. package/node_modules/pngjs/lib/parser-sync.js +0 -108
  574. package/node_modules/pngjs/lib/parser.js +0 -290
  575. package/node_modules/pngjs/lib/png-sync.js +0 -12
  576. package/node_modules/pngjs/lib/png.js +0 -194
  577. package/node_modules/pngjs/lib/sync-inflate.js +0 -168
  578. package/node_modules/pngjs/lib/sync-reader.js +0 -45
  579. package/node_modules/pngjs/package.json +0 -73
  580. package/node_modules/qrcode/README.md +0 -770
  581. package/node_modules/qrcode/bin/qrcode +0 -159
  582. package/node_modules/qrcode/helper/to-sjis-browser.js +0 -2
  583. package/node_modules/qrcode/helper/to-sjis.js +0 -105
  584. package/node_modules/qrcode/lib/browser.js +0 -76
  585. package/node_modules/qrcode/lib/can-promise.js +0 -7
  586. package/node_modules/qrcode/lib/core/alignment-pattern.js +0 -83
  587. package/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -59
  588. package/node_modules/qrcode/lib/core/bit-buffer.js +0 -37
  589. package/node_modules/qrcode/lib/core/bit-matrix.js +0 -65
  590. package/node_modules/qrcode/lib/core/byte-data.js +0 -30
  591. package/node_modules/qrcode/lib/core/error-correction-code.js +0 -135
  592. package/node_modules/qrcode/lib/core/error-correction-level.js +0 -50
  593. package/node_modules/qrcode/lib/core/finder-pattern.js +0 -22
  594. package/node_modules/qrcode/lib/core/format-info.js +0 -29
  595. package/node_modules/qrcode/lib/core/galois-field.js +0 -69
  596. package/node_modules/qrcode/lib/core/kanji-data.js +0 -54
  597. package/node_modules/qrcode/lib/core/mask-pattern.js +0 -234
  598. package/node_modules/qrcode/lib/core/mode.js +0 -167
  599. package/node_modules/qrcode/lib/core/numeric-data.js +0 -43
  600. package/node_modules/qrcode/lib/core/polynomial.js +0 -62
  601. package/node_modules/qrcode/lib/core/qrcode.js +0 -495
  602. package/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -56
  603. package/node_modules/qrcode/lib/core/regex.js +0 -31
  604. package/node_modules/qrcode/lib/core/segments.js +0 -330
  605. package/node_modules/qrcode/lib/core/utils.js +0 -63
  606. package/node_modules/qrcode/lib/core/version-check.js +0 -9
  607. package/node_modules/qrcode/lib/core/version.js +0 -163
  608. package/node_modules/qrcode/lib/index.js +0 -12
  609. package/node_modules/qrcode/lib/renderer/canvas.js +0 -63
  610. package/node_modules/qrcode/lib/renderer/png.js +0 -78
  611. package/node_modules/qrcode/lib/renderer/svg-tag.js +0 -81
  612. package/node_modules/qrcode/lib/renderer/svg.js +0 -19
  613. package/node_modules/qrcode/lib/renderer/terminal/terminal-small.js +0 -85
  614. package/node_modules/qrcode/lib/renderer/terminal/terminal.js +0 -49
  615. package/node_modules/qrcode/lib/renderer/terminal.js +0 -9
  616. package/node_modules/qrcode/lib/renderer/utf8.js +0 -71
  617. package/node_modules/qrcode/lib/renderer/utils.js +0 -99
  618. package/node_modules/qrcode/lib/server.js +0 -138
  619. package/node_modules/qrcode/license +0 -10
  620. package/node_modules/qrcode/package.json +0 -77
  621. package/node_modules/require-directory/.jshintrc +0 -67
  622. package/node_modules/require-directory/.npmignore +0 -1
  623. package/node_modules/require-directory/.travis.yml +0 -3
  624. package/node_modules/require-directory/LICENSE +0 -22
  625. package/node_modules/require-directory/README.markdown +0 -184
  626. package/node_modules/require-directory/index.js +0 -86
  627. package/node_modules/require-directory/package.json +0 -40
  628. package/node_modules/require-main-filename/CHANGELOG.md +0 -26
  629. package/node_modules/require-main-filename/LICENSE.txt +0 -14
  630. package/node_modules/require-main-filename/README.md +0 -26
  631. package/node_modules/require-main-filename/index.js +0 -18
  632. package/node_modules/require-main-filename/package.json +0 -35
  633. package/node_modules/semver/LICENSE +0 -15
  634. package/node_modules/semver/README.md +0 -680
  635. package/node_modules/semver/bin/semver.js +0 -195
  636. package/node_modules/semver/classes/comparator.js +0 -143
  637. package/node_modules/semver/classes/index.js +0 -7
  638. package/node_modules/semver/classes/range.js +0 -577
  639. package/node_modules/semver/classes/semver.js +0 -350
  640. package/node_modules/semver/functions/clean.js +0 -8
  641. package/node_modules/semver/functions/cmp.js +0 -54
  642. package/node_modules/semver/functions/coerce.js +0 -62
  643. package/node_modules/semver/functions/compare-build.js +0 -9
  644. package/node_modules/semver/functions/compare-loose.js +0 -5
  645. package/node_modules/semver/functions/compare.js +0 -7
  646. package/node_modules/semver/functions/diff.js +0 -60
  647. package/node_modules/semver/functions/eq.js +0 -5
  648. package/node_modules/semver/functions/gt.js +0 -5
  649. package/node_modules/semver/functions/gte.js +0 -5
  650. package/node_modules/semver/functions/inc.js +0 -21
  651. package/node_modules/semver/functions/lt.js +0 -5
  652. package/node_modules/semver/functions/lte.js +0 -5
  653. package/node_modules/semver/functions/major.js +0 -5
  654. package/node_modules/semver/functions/minor.js +0 -5
  655. package/node_modules/semver/functions/neq.js +0 -5
  656. package/node_modules/semver/functions/parse.js +0 -18
  657. package/node_modules/semver/functions/patch.js +0 -5
  658. package/node_modules/semver/functions/prerelease.js +0 -8
  659. package/node_modules/semver/functions/rcompare.js +0 -5
  660. package/node_modules/semver/functions/rsort.js +0 -5
  661. package/node_modules/semver/functions/satisfies.js +0 -12
  662. package/node_modules/semver/functions/sort.js +0 -5
  663. package/node_modules/semver/functions/truncate.js +0 -48
  664. package/node_modules/semver/functions/valid.js +0 -8
  665. package/node_modules/semver/index.js +0 -93
  666. package/node_modules/semver/internal/constants.js +0 -37
  667. package/node_modules/semver/internal/debug.js +0 -11
  668. package/node_modules/semver/internal/identifiers.js +0 -29
  669. package/node_modules/semver/internal/lrucache.js +0 -42
  670. package/node_modules/semver/internal/parse-options.js +0 -17
  671. package/node_modules/semver/internal/re.js +0 -223
  672. package/node_modules/semver/package.json +0 -78
  673. package/node_modules/semver/preload.js +0 -4
  674. package/node_modules/semver/range.bnf +0 -17
  675. package/node_modules/semver/ranges/gtr.js +0 -6
  676. package/node_modules/semver/ranges/intersects.js +0 -9
  677. package/node_modules/semver/ranges/ltr.js +0 -6
  678. package/node_modules/semver/ranges/max-satisfying.js +0 -27
  679. package/node_modules/semver/ranges/min-satisfying.js +0 -26
  680. package/node_modules/semver/ranges/min-version.js +0 -63
  681. package/node_modules/semver/ranges/outside.js +0 -82
  682. package/node_modules/semver/ranges/simplify.js +0 -49
  683. package/node_modules/semver/ranges/subset.js +0 -249
  684. package/node_modules/semver/ranges/to-comparators.js +0 -10
  685. package/node_modules/semver/ranges/valid.js +0 -13
  686. package/node_modules/set-blocking/CHANGELOG.md +0 -26
  687. package/node_modules/set-blocking/LICENSE.txt +0 -14
  688. package/node_modules/set-blocking/README.md +0 -31
  689. package/node_modules/set-blocking/index.js +0 -7
  690. package/node_modules/set-blocking/package.json +0 -42
  691. package/node_modules/sharp/LICENSE +0 -191
  692. package/node_modules/sharp/README.md +0 -112
  693. package/node_modules/sharp/dist/channel.cjs +0 -177
  694. package/node_modules/sharp/dist/channel.mjs +0 -177
  695. package/node_modules/sharp/dist/colour.cjs +0 -199
  696. package/node_modules/sharp/dist/colour.mjs +0 -199
  697. package/node_modules/sharp/dist/composite.cjs +0 -213
  698. package/node_modules/sharp/dist/composite.mjs +0 -213
  699. package/node_modules/sharp/dist/constructor.cjs +0 -511
  700. package/node_modules/sharp/dist/constructor.mjs +0 -511
  701. package/node_modules/sharp/dist/index.cjs +0 -25
  702. package/node_modules/sharp/dist/index.d.cts +0 -1999
  703. package/node_modules/sharp/dist/index.d.mts +0 -2046
  704. package/node_modules/sharp/dist/index.mjs +0 -25
  705. package/node_modules/sharp/dist/input.cjs +0 -819
  706. package/node_modules/sharp/dist/input.mjs +0 -819
  707. package/node_modules/sharp/dist/is.cjs +0 -143
  708. package/node_modules/sharp/dist/is.mjs +0 -143
  709. package/node_modules/sharp/dist/libvips.cjs +0 -212
  710. package/node_modules/sharp/dist/libvips.mjs +0 -212
  711. package/node_modules/sharp/dist/operation.cjs +0 -1002
  712. package/node_modules/sharp/dist/operation.mjs +0 -1002
  713. package/node_modules/sharp/dist/output.cjs +0 -1785
  714. package/node_modules/sharp/dist/output.mjs +0 -1785
  715. package/node_modules/sharp/dist/resize.cjs +0 -617
  716. package/node_modules/sharp/dist/resize.mjs +0 -617
  717. package/node_modules/sharp/dist/sharp.cjs +0 -174
  718. package/node_modules/sharp/dist/sharp.mjs +0 -174
  719. package/node_modules/sharp/dist/utility.cjs +0 -301
  720. package/node_modules/sharp/dist/utility.mjs +0 -301
  721. package/node_modules/sharp/install/build.js +0 -38
  722. package/node_modules/sharp/lib/index.d.ts +0 -1999
  723. package/node_modules/sharp/package.json +0 -227
  724. package/node_modules/sharp/src/binding.gyp +0 -303
  725. package/node_modules/sharp/src/common.cc +0 -1186
  726. package/node_modules/sharp/src/common.h +0 -421
  727. package/node_modules/sharp/src/metadata.cc +0 -404
  728. package/node_modules/sharp/src/metadata.h +0 -95
  729. package/node_modules/sharp/src/operations.cc +0 -516
  730. package/node_modules/sharp/src/operations.h +0 -137
  731. package/node_modules/sharp/src/pipeline.cc +0 -1948
  732. package/node_modules/sharp/src/pipeline.h +0 -422
  733. package/node_modules/sharp/src/sharp.cc +0 -43
  734. package/node_modules/sharp/src/stats.cc +0 -186
  735. package/node_modules/sharp/src/stats.h +0 -62
  736. package/node_modules/sharp/src/utilities.cc +0 -289
  737. package/node_modules/sharp/src/utilities.h +0 -22
  738. package/node_modules/string-width/index.d.ts +0 -29
  739. package/node_modules/string-width/index.js +0 -47
  740. package/node_modules/string-width/license +0 -9
  741. package/node_modules/string-width/package.json +0 -56
  742. package/node_modules/string-width/readme.md +0 -50
  743. package/node_modules/strip-ansi/index.d.ts +0 -17
  744. package/node_modules/strip-ansi/index.js +0 -4
  745. package/node_modules/strip-ansi/license +0 -9
  746. package/node_modules/strip-ansi/package.json +0 -54
  747. package/node_modules/strip-ansi/readme.md +0 -46
  748. package/node_modules/which-module/LICENSE +0 -13
  749. package/node_modules/which-module/README.md +0 -58
  750. package/node_modules/which-module/index.js +0 -9
  751. package/node_modules/which-module/package.json +0 -41
  752. package/node_modules/wrap-ansi/index.js +0 -186
  753. package/node_modules/wrap-ansi/license +0 -9
  754. package/node_modules/wrap-ansi/package.json +0 -61
  755. package/node_modules/wrap-ansi/readme.md +0 -97
  756. package/node_modules/ws/LICENSE +0 -20
  757. package/node_modules/ws/README.md +0 -548
  758. package/node_modules/ws/browser.js +0 -8
  759. package/node_modules/ws/index.js +0 -22
  760. package/node_modules/ws/lib/buffer-util.js +0 -131
  761. package/node_modules/ws/lib/constants.js +0 -19
  762. package/node_modules/ws/lib/event-target.js +0 -292
  763. package/node_modules/ws/lib/extension.js +0 -203
  764. package/node_modules/ws/lib/limiter.js +0 -55
  765. package/node_modules/ws/lib/permessage-deflate.js +0 -530
  766. package/node_modules/ws/lib/receiver.js +0 -743
  767. package/node_modules/ws/lib/sender.js +0 -607
  768. package/node_modules/ws/lib/stream.js +0 -161
  769. package/node_modules/ws/lib/subprotocol.js +0 -62
  770. package/node_modules/ws/lib/validation.js +0 -152
  771. package/node_modules/ws/lib/websocket-server.js +0 -562
  772. package/node_modules/ws/lib/websocket.js +0 -1407
  773. package/node_modules/ws/package.json +0 -74
  774. package/node_modules/ws/wrapper.mjs +0 -21
  775. package/node_modules/y18n/CHANGELOG.md +0 -35
  776. package/node_modules/y18n/LICENSE +0 -13
  777. package/node_modules/y18n/README.md +0 -109
  778. package/node_modules/y18n/index.js +0 -188
  779. package/node_modules/y18n/package.json +0 -39
  780. package/node_modules/yargs/CHANGELOG.md +0 -420
  781. package/node_modules/yargs/LICENSE +0 -21
  782. package/node_modules/yargs/README.md +0 -140
  783. package/node_modules/yargs/build/lib/apply-extends.d.ts +0 -2
  784. package/node_modules/yargs/build/lib/apply-extends.js +0 -65
  785. package/node_modules/yargs/build/lib/argsert.d.ts +0 -2
  786. package/node_modules/yargs/build/lib/argsert.js +0 -65
  787. package/node_modules/yargs/build/lib/command.d.ts +0 -64
  788. package/node_modules/yargs/build/lib/command.js +0 -416
  789. package/node_modules/yargs/build/lib/common-types.d.ts +0 -36
  790. package/node_modules/yargs/build/lib/common-types.js +0 -25
  791. package/node_modules/yargs/build/lib/completion-templates.d.ts +0 -2
  792. package/node_modules/yargs/build/lib/completion-templates.js +0 -50
  793. package/node_modules/yargs/build/lib/completion.d.ts +0 -21
  794. package/node_modules/yargs/build/lib/completion.js +0 -135
  795. package/node_modules/yargs/build/lib/is-promise.d.ts +0 -1
  796. package/node_modules/yargs/build/lib/is-promise.js +0 -9
  797. package/node_modules/yargs/build/lib/levenshtein.d.ts +0 -1
  798. package/node_modules/yargs/build/lib/levenshtein.js +0 -58
  799. package/node_modules/yargs/build/lib/middleware.d.ts +0 -10
  800. package/node_modules/yargs/build/lib/middleware.js +0 -57
  801. package/node_modules/yargs/build/lib/obj-filter.d.ts +0 -1
  802. package/node_modules/yargs/build/lib/obj-filter.js +0 -14
  803. package/node_modules/yargs/build/lib/parse-command.d.ts +0 -11
  804. package/node_modules/yargs/build/lib/parse-command.js +0 -36
  805. package/node_modules/yargs/build/lib/process-argv.d.ts +0 -2
  806. package/node_modules/yargs/build/lib/process-argv.js +0 -31
  807. package/node_modules/yargs/build/lib/usage.d.ts +0 -49
  808. package/node_modules/yargs/build/lib/usage.js +0 -540
  809. package/node_modules/yargs/build/lib/validation.d.ts +0 -34
  810. package/node_modules/yargs/build/lib/validation.js +0 -330
  811. package/node_modules/yargs/build/lib/yargs.d.ts +0 -274
  812. package/node_modules/yargs/build/lib/yargs.js +0 -1190
  813. package/node_modules/yargs/build/lib/yerror.d.ts +0 -4
  814. package/node_modules/yargs/build/lib/yerror.js +0 -11
  815. package/node_modules/yargs/index.js +0 -40
  816. package/node_modules/yargs/locales/be.json +0 -46
  817. package/node_modules/yargs/locales/de.json +0 -46
  818. package/node_modules/yargs/locales/en.json +0 -51
  819. package/node_modules/yargs/locales/es.json +0 -46
  820. package/node_modules/yargs/locales/fi.json +0 -49
  821. package/node_modules/yargs/locales/fr.json +0 -53
  822. package/node_modules/yargs/locales/hi.json +0 -49
  823. package/node_modules/yargs/locales/hu.json +0 -46
  824. package/node_modules/yargs/locales/id.json +0 -50
  825. package/node_modules/yargs/locales/it.json +0 -46
  826. package/node_modules/yargs/locales/ja.json +0 -51
  827. package/node_modules/yargs/locales/ko.json +0 -49
  828. package/node_modules/yargs/locales/nb.json +0 -44
  829. package/node_modules/yargs/locales/nl.json +0 -49
  830. package/node_modules/yargs/locales/nn.json +0 -44
  831. package/node_modules/yargs/locales/pirate.json +0 -13
  832. package/node_modules/yargs/locales/pl.json +0 -49
  833. package/node_modules/yargs/locales/pt.json +0 -45
  834. package/node_modules/yargs/locales/pt_BR.json +0 -48
  835. package/node_modules/yargs/locales/ru.json +0 -46
  836. package/node_modules/yargs/locales/th.json +0 -46
  837. package/node_modules/yargs/locales/tr.json +0 -48
  838. package/node_modules/yargs/locales/zh_CN.json +0 -48
  839. package/node_modules/yargs/locales/zh_TW.json +0 -47
  840. package/node_modules/yargs/package.json +0 -92
  841. package/node_modules/yargs/yargs.js +0 -14
  842. package/node_modules/yargs-parser/CHANGELOG.md +0 -601
  843. package/node_modules/yargs-parser/LICENSE.txt +0 -14
  844. package/node_modules/yargs-parser/README.md +0 -449
  845. package/node_modules/yargs-parser/index.js +0 -1032
  846. package/node_modules/yargs-parser/lib/tokenize-arg-string.js +0 -40
  847. package/node_modules/yargs-parser/package.json +0 -46
@@ -0,0 +1,127 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { createHash, randomUUID } from 'node:crypto';
4
+ import { readRecord, writeRecord } from '../../service-lifecycle.mjs';
5
+
6
+ const owner = 'code-relax-macos-runtime';
7
+ const manifestName = '.code-relax-runtime.json';
8
+ function filesAt(root, relative = '') {
9
+ const result = [];
10
+ if (fs.lstatSync(root).isSymbolicLink()) throw new Error('Codex 运行时目录不能是符号链接。');
11
+ for (const entry of fs.readdirSync(path.join(root, relative), { withFileTypes: true })) {
12
+ const name = path.join(relative, entry.name);
13
+ if (entry.isDirectory()) result.push(...filesAt(root, name));
14
+ else if (entry.isFile()) result.push(name);
15
+ else throw new Error(`Codex 运行时包含不支持的链接或文件:${name}`);
16
+ }
17
+ return result.sort();
18
+ }
19
+ export function packageRoot(executable) {
20
+ const bundleSuffix = path.join('CodexCLI.app', 'Contents', 'MacOS', 'codex');
21
+ const bundled = executable.endsWith(path.sep + bundleSuffix);
22
+ const root = bundled ? path.resolve(executable, '../../../..') : path.dirname(path.dirname(executable));
23
+ const metadata = readRecord(path.join(root, 'codex-package.json'));
24
+ if ((!bundled && path.basename(path.dirname(executable)) !== 'bin') || path.basename(executable) !== 'codex'
25
+ || metadata?.layoutVersion !== 1 || metadata.entrypoint !== 'bin/codex' || metadata.variant !== 'codex'
26
+ || !['aarch64-apple-darwin', 'x86_64-apple-darwin'].includes(metadata.target)
27
+ || metadata.resourcesDir !== 'codex-resources' || metadata.pathDir !== 'codex-path')
28
+ throw new Error('需要完整的官方 Mac Codex 运行时包,不能仅复制 codex 单个文件。');
29
+ for (const file of ['bin/codex', 'bin/codex-code-mode-host', 'codex-path/rg']) {
30
+ if (!fs.statSync(path.join(root, file)).isFile()) throw new Error(`Codex 运行时缺少 ${file}`);
31
+ }
32
+ if (!fs.statSync(path.join(root, 'codex-resources')).isDirectory()) throw new Error('Codex 运行时缺少资源目录。');
33
+ return root;
34
+ }
35
+ export function runtimeFingerprint(executable) {
36
+ const root = packageRoot(executable);
37
+ return JSON.stringify(filesAt(root).filter(name => name !== manifestName).map(name => {
38
+ const stat = fs.statSync(path.join(root, name));
39
+ return [name, stat.size, stat.mtimeMs, stat.ctimeMs, stat.ino, stat.mode & 0o777];
40
+ }));
41
+ }
42
+ async function digestFiles(root) {
43
+ const records = [];
44
+ for (const name of filesAt(root).filter(name => name !== manifestName)) {
45
+ const file = path.join(root, name), hash = createHash('sha256');
46
+ const before = fs.statSync(file);
47
+ for await (const chunk of fs.createReadStream(file)) hash.update(chunk);
48
+ const after = fs.statSync(file);
49
+ if (before.size !== after.size || before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs || before.ino !== after.ino)
50
+ throw new Error('Codex 更新正在替换文件,请待安装完成后重试。');
51
+ records.push({ name, size: after.size, mode: after.mode & 0o777, sha256: hash.digest('hex') });
52
+ }
53
+ return records;
54
+ }
55
+ const treeHash = files => createHash('sha256').update(JSON.stringify(files)).digest('hex');
56
+ function removeFiles(root, names) {
57
+ for (const name of names) {
58
+ fs.unlinkSync(path.join(root, name));
59
+ }
60
+ // Empty package resource directories must also be removed, without recursive deletion.
61
+ const collect = directory => {
62
+ for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
63
+ if (!entry.isDirectory()) throw new Error('运行时清理期间出现未知文件,保留目录。');
64
+ const child = path.join(directory, entry.name); collect(child); fs.rmdirSync(child);
65
+ }
66
+ };
67
+ collect(root);
68
+ fs.rmdirSync(root);
69
+ }
70
+
71
+ export async function retainRuntime(executable, stateRoot, version) {
72
+ const source = packageRoot(executable);
73
+ const sourceFingerprint = runtimeFingerprint(executable);
74
+ const files = await digestFiles(source);
75
+ if (sourceFingerprint !== runtimeFingerprint(executable)) throw new Error('Codex 包在核对期间发生变化,未切换内核。');
76
+ const digest = treeHash(files);
77
+ const parent = path.join(stateRoot, 'macos-runtimes'), target = path.join(parent, digest);
78
+ const retained = path.join(target, path.relative(source, executable));
79
+ if (fs.existsSync(target)) {
80
+ const manifest = readRecord(path.join(target, manifestName));
81
+ if (manifest?.owner !== owner || manifest.digest !== digest || treeHash(await digestFiles(target)) !== digest)
82
+ throw new Error('已保留的 Mac 内核内容不完整,未覆盖运行中的文件。');
83
+ return { executable: retained, sourceExecutable: executable, sourceFingerprint };
84
+ }
85
+ fs.mkdirSync(parent, { recursive: true, mode: 0o700 });
86
+ const staging = path.join(parent, `.${randomUUID()}.tmp`);
87
+ fs.mkdirSync(staging, { mode: 0o700 });
88
+ const created = [];
89
+ try {
90
+ for (const file of files) {
91
+ const destination = path.join(staging, file.name);
92
+ fs.mkdirSync(path.dirname(destination), { recursive: true, mode: 0o700 });
93
+ // APFS can clone blocks, but each snapshot has independent file identity.
94
+ // A hard link would let an in-place npm update modify the running kernel.
95
+ fs.copyFileSync(path.join(source, file.name), destination, fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE);
96
+ created.push(file.name);
97
+ fs.chmodSync(destination, file.mode);
98
+ }
99
+ fs.mkdirSync(path.join(staging, 'codex-resources'), { recursive: true, mode: 0o700 });
100
+ if (treeHash(await digestFiles(staging)) !== digest || sourceFingerprint !== runtimeFingerprint(executable))
101
+ throw new Error('复制期间 Codex 包发生变化,未使用混合版本。');
102
+ writeRecord(path.join(staging, manifestName), { owner, digest, version, files });
103
+ created.push(manifestName);
104
+ fs.renameSync(staging, target);
105
+ return { executable: retained, sourceExecutable: executable, sourceFingerprint };
106
+ } catch (error) {
107
+ if (fs.existsSync(staging)) removeFiles(staging, created);
108
+ throw error;
109
+ }
110
+ }
111
+
112
+ export async function pruneRetainedDesktopRuntimes(stateRoot, keepExecutable) {
113
+ const parent = path.join(stateRoot, 'macos-runtimes');
114
+ if (!fs.existsSync(parent)) return;
115
+ const keep = packageRoot(path.resolve(keepExecutable));
116
+ // An installed (non-retained) process is not authority to clean this store.
117
+ if (path.dirname(keep) !== path.resolve(parent) || !/^[a-f0-9]{64}$/.test(path.basename(keep))) return;
118
+ for (const entry of fs.readdirSync(parent, { withFileTypes: true })) {
119
+ const directory = path.join(parent, entry.name);
120
+ if (!entry.isDirectory() || !/^[a-f0-9]{64}$/.test(entry.name) || directory === keep) continue;
121
+ const manifest = readRecord(path.join(directory, manifestName));
122
+ if (manifest?.owner !== owner || manifest.digest !== entry.name || !Array.isArray(manifest.files)) continue;
123
+ const actual = await digestFiles(directory);
124
+ if (treeHash(actual) !== entry.name || JSON.stringify(actual) !== JSON.stringify(manifest.files)) continue;
125
+ removeFiles(directory, [...actual.map(file => file.name), manifestName]);
126
+ }
127
+ }
@@ -0,0 +1,18 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { runtimePaths } from '../runtime-paths.mjs';
4
+ import { readRecord } from '../../service-lifecycle.mjs';
5
+ import { lanNetworks } from './network-info.mjs';
6
+ import { desktopHost } from './desktop-host.mjs';
7
+
8
+ export { lanNetworks };
9
+ export const lanAddress = async () => (await lanNetworks())[0]?.address || '';
10
+ export const sharedServiceUrl = () => desktopHost.sharedServiceUrl();
11
+ export async function bridgeEnvironment() {
12
+ const environment = { ...process.env };
13
+ const installed = readRecord(path.join(runtimePaths().serviceRoot, 'installation.json'));
14
+ if (!installed?.nodeExecutable || !fs.existsSync(installed.nodeExecutable)) throw new Error('安装时选用的 Node 不存在,请重新执行 relax setup。');
15
+ environment.CODEX_MCP_NODE_PATH = installed.nodeExecutable;
16
+ delete environment.CODEX_APP_TOOLS_PIPE_PATH;
17
+ return { executable: installed.nodeExecutable, environment };
18
+ }
@@ -0,0 +1,29 @@
1
+ import fs from 'node:fs';
2
+ import { spawn } from 'node:child_process';
3
+ import { fileURLToPath } from 'node:url';
4
+
5
+ export const hostBinary = fileURLToPath(new URL('../../../native/macos-host/CodeRelaxHost', import.meta.url));
6
+ export function systemRequest(request) {
7
+ if (process.platform !== 'darwin') return Promise.reject(new Error('需要 macOS 工作站。'));
8
+ if (!fs.existsSync(hostBinary)) return Promise.reject(new Error('缺少 Mac 系统适配组件,请先在 Mac 上执行 npm run build。'));
9
+ return new Promise((resolve, reject) => {
10
+ const child = spawn(hostBinary, [], { stdio: ['pipe', 'pipe', 'pipe'] });
11
+ let output = '', diagnostic = '', failure;
12
+ const timer = setTimeout(() => { failure = new Error('macOS 系统操作超时;请检查钥匙串是否已解锁。'); child.kill(); }, 60000);
13
+ child.stdout.setEncoding('utf8'); child.stderr.setEncoding('utf8');
14
+ child.stdout.on('data', value => {
15
+ output += value;
16
+ if (Buffer.byteLength(output) > 2 * 1024 * 1024) { failure = new Error('macOS 系统响应过大。'); child.kill(); }
17
+ });
18
+ child.stderr.on('data', value => { diagnostic = (diagnostic + value).slice(0, 1024); });
19
+ child.stdin.on('error', () => {});
20
+ child.once('error', () => { clearTimeout(timer); reject(new Error('无法启动 macOS 系统适配组件。')); });
21
+ child.once('close', code => {
22
+ clearTimeout(timer);
23
+ if (failure || code !== 0) return reject(failure || new Error(`macOS 系统操作失败:${diagnostic.trim() || code}`));
24
+ try { resolve(JSON.parse(output)); }
25
+ catch { reject(new Error('macOS 系统组件返回无效结果。')); }
26
+ });
27
+ child.stdin.end(JSON.stringify(request));
28
+ });
29
+ }
@@ -0,0 +1,9 @@
1
+ import { managedEndpointUrl } from '../../managed-endpoint.mjs';
2
+ // Launch Services receives these settings for one new application instance.
3
+ // Do not mutate shell profiles or the login session's global environment.
4
+ export async function configureManagedEnvironment(stateRoot, url) {
5
+ if (!managedEndpointUrl(url)) throw new Error('未确认 Codex 内核地址。');
6
+ return { configured: true, changed: false, owned: false, persistent: false,
7
+ scope: 'application-launch', value: url };
8
+ }
9
+ export async function clearManagedEnvironment() { return { removed: false, preserved: false, reason: 'application-launch-only' }; }
@@ -0,0 +1,58 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { createRequire } from 'node:module';
4
+
5
+ export const nativeTargets = Object.freeze({
6
+ 'win32-x64': { packageName: '@walkhi/code-relax-native-win32-x64', file: 'desktop-helper/CodeRelaxDesktop.exe' },
7
+ 'darwin-arm64': { packageName: '@walkhi/code-relax-native-darwin-arm64', file: 'macos-host/CodeRelaxHost' },
8
+ 'darwin-x64': { packageName: '@walkhi/code-relax-native-darwin-x64', file: 'macos-host/CodeRelaxHost' },
9
+ 'linux-x64': { packageName: null, file: null },
10
+ 'linux-arm64': { packageName: null, file: null },
11
+ });
12
+
13
+ const readJson = file => JSON.parse(fs.readFileSync(file, 'utf8').replace(/^\uFEFF/, ''));
14
+
15
+ // Native dependencies are selected by npm's os/cpu filters. Materialize only
16
+ // this platform's helper before setup touches the installed workstation.
17
+ export function prepareNativePackage(packageRoot, { platform = process.platform, arch = process.arch } = {}) {
18
+ const target = nativeTargets[`${platform}-${arch}`];
19
+ if (!target) throw new Error(`尚不支持此工作站平台:${platform}-${arch}。`);
20
+ const marker = path.join(packageRoot, 'dist/build-platform.json');
21
+ const build = readJson(marker);
22
+ if (!target.file) {
23
+ const pkg = readJson(path.join(packageRoot, 'package.json'));
24
+ if (!(build.platform === platform && build.arch === arch)
25
+ && !(build.layout === 'npm-platform-packages' && build.version === pkg.version))
26
+ throw new Error('安装包构建与当前系统、架构或版本不匹配,请重新安装。');
27
+ // Linux adapters use Node/procfs and the session's Secret Service. There is
28
+ // no private native helper to download; sharp/RTC select their own binaries.
29
+ fs.writeFileSync(marker, JSON.stringify({ platform, arch, version: pkg.version }));
30
+ return { platform, arch, materialized: false };
31
+ }
32
+ const destination = path.join(packageRoot, 'dist/native', target.file);
33
+ if (build.platform === platform && build.arch === arch) {
34
+ if (!fs.statSync(destination).isFile()) throw new Error('安装包缺少当前平台原生组件,请重新安装。');
35
+ return { platform, arch, materialized: false };
36
+ }
37
+ const pkg = readJson(path.join(packageRoot, 'package.json'));
38
+ if (build.layout !== 'npm-platform-packages' || build.version !== pkg.version)
39
+ throw new Error('安装包构建与当前系统、架构或版本不匹配,请重新安装。');
40
+ let manifest;
41
+ try { manifest = createRequire(path.join(packageRoot, 'package.json')).resolve(`${target.packageName}/package.json`); }
42
+ catch (error) {
43
+ if (error.code !== 'MODULE_NOT_FOUND') throw error;
44
+ throw new Error(`缺少 ${target.packageName}@${pkg.version};请勿省略 optional 依赖,使用 npm install -g @walkhi/code-relax@${pkg.version} --include=optional --allow-scripts=@walkhi/code-relax --foreground-scripts 重新安装。`);
45
+ }
46
+ const native = readJson(manifest);
47
+ if (native.name !== target.packageName || native.version !== pkg.version
48
+ || native.os?.length !== 1 || native.os[0] !== platform || native.cpu?.length !== 1 || native.cpu[0] !== arch)
49
+ throw new Error('原生组件包的系统、架构或版本不匹配,未更新工作站。');
50
+ const source = path.join(path.dirname(manifest), 'native', target.file);
51
+ if (!fs.statSync(source).isFile()) throw new Error('平台包缺少原生组件,未更新工作站。');
52
+ fs.mkdirSync(path.dirname(destination), { recursive: true });
53
+ fs.copyFileSync(source, destination);
54
+ if (platform === 'darwin') fs.chmodSync(destination, 0o755);
55
+ // Only commit the selected platform after the component has been copied.
56
+ fs.writeFileSync(marker, JSON.stringify({ platform, arch, version: pkg.version }));
57
+ return { platform, arch, packageName: native.name, materialized: true };
58
+ }
@@ -0,0 +1,3 @@
1
+ import { platformModule } from './select.mjs';
2
+ const adapter = await import(platformModule('network-info'));
3
+ export const { lanNetworks } = adapter;
@@ -0,0 +1,5 @@
1
+ import path from 'node:path';
2
+ export function executableKey(file, platform = process.platform) {
3
+ const resolved = path.resolve(file);
4
+ return platform === 'win32' ? resolved.toLowerCase() : resolved;
5
+ }
@@ -0,0 +1,23 @@
1
+ import net from 'node:net';
2
+
3
+ const privateIpv4 = address => {
4
+ if (net.isIP(address) !== 4) return false;
5
+ const [a, b] = address.split('.').map(Number);
6
+ return a === 10 || (a === 192 && b === 168) || (a === 172 && b >= 16 && b <= 31) || (a === 100 && b >= 64 && b <= 127);
7
+ };
8
+ export function networkCandidates(hardware, addresses) {
9
+ const results = [];
10
+ const seen = new Set();
11
+ for (const item of hardware) {
12
+ if (!['wifi', 'ethernet'].includes(item.networkType) || typeof item.interfaceName !== 'string') continue;
13
+ const label = value => String(value).replace(/[\u0000-\u001f\u007f]/g, '').trim().slice(0, 80);
14
+ const interfaceName = label(item.interfaceName), networkName = label(item.networkName || interfaceName);
15
+ if (!interfaceName || !networkName) continue;
16
+ for (const info of addresses[item.interfaceName] || []) {
17
+ if (info.internal || !privateIpv4(info.address) || seen.has(info.address)) continue;
18
+ seen.add(info.address);
19
+ results.push({ address: info.address, interfaceName, networkName, networkType: item.networkType });
20
+ }
21
+ }
22
+ return results.slice(0, 8);
23
+ }
@@ -0,0 +1,25 @@
1
+ import os from 'node:os';
2
+ import path from 'node:path';
3
+
4
+ // These are user-owned locations; resolving paths does not create or migrate data.
5
+ export function runtimePaths(environment = process.env, home = os.homedir(), platform = process.platform) {
6
+ if (!['darwin', 'linux'].includes(platform)) throw new Error(`Unsupported POSIX host: ${platform}`);
7
+ const join = path.posix.join;
8
+ const xdgRoot = (name, fallback) => path.posix.isAbsolute(environment[name] || '')
9
+ ? environment[name] : join(home, fallback);
10
+ const dataRoot = platform === 'darwin'
11
+ ? join(home, 'Library', 'Application Support', 'CodexRemote')
12
+ : join(xdgRoot('XDG_DATA_HOME', '.local/share'), 'CodexRemote');
13
+ const stateRoot = platform === 'darwin'
14
+ ? join(dataRoot, 'state')
15
+ : join(xdgRoot('XDG_STATE_HOME', '.local/state'), 'CodexRemote');
16
+ const codexDataRoot = environment.CODEX_HOME?.trim() || join(home, '.codex');
17
+ return {
18
+ codexDataRoot,
19
+ sessionsRoot: join(codexDataRoot, 'sessions'),
20
+ stateRoot,
21
+ serviceRoot: join(dataRoot, 'service'),
22
+ uploadsRoot: join(dataRoot, 'attachments'),
23
+ credentialsRoot: join(dataRoot, 'credentials'),
24
+ };
25
+ }
@@ -0,0 +1,22 @@
1
+ import path from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { spawn } from 'node:child_process';
4
+
5
+ // stdin is a lifetime lease: even an abrupt service exit releases the assertion.
6
+ export function launchPowerInhibitor() {
7
+ const lease = "process.stdin.resume();process.stdin.on('end',()=>process.exit(0));console.log('ready')";
8
+ let executable, args;
9
+ if (process.platform === 'darwin') {
10
+ executable = '/usr/bin/caffeinate';
11
+ args = ['-i', process.execPath, '-e', lease];
12
+ } else if (process.platform === 'win32') {
13
+ executable = path.join(process.env.SystemRoot || 'C:\\Windows', 'System32/WindowsPowerShell/v1.0/powershell.exe');
14
+ args = ['-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-File',
15
+ fileURLToPath(new URL('./windows/keep-awake.ps1', import.meta.url))];
16
+ } else if (process.platform === 'linux') {
17
+ executable = '/usr/bin/systemd-inhibit';
18
+ args = ['--what=idle', '--mode=block', '--who=Code Relax', '--why=Workstation remote access',
19
+ process.execPath, '-e', lease];
20
+ } else throw new Error(`保持唤醒不支持当前系统:${process.platform}`);
21
+ return spawn(executable, args, { stdio: ['pipe', 'pipe', 'pipe'], windowsHide: true });
22
+ }
@@ -0,0 +1,3 @@
1
+ import { platformModule } from './select.mjs';
2
+ const adapter = await import(platformModule('project-locations'));
3
+ export const { projectLocations } = adapter;
@@ -0,0 +1,8 @@
1
+ import { runtimePaths as windowsPaths } from './windows/runtime-paths.mjs';
2
+ import { runtimePaths as posixPaths } from './posix/runtime-paths.mjs';
3
+
4
+ export function runtimePaths(environment = process.env, home, platform = process.platform) {
5
+ if (platform === 'win32') return windowsPaths(environment, home);
6
+ if (platform === 'darwin' || platform === 'linux') return posixPaths(environment, home, platform);
7
+ throw new Error(`Unsupported workstation platform: ${platform}`);
8
+ }
@@ -0,0 +1,5 @@
1
+ export function platformModule(name, platform = process.platform) {
2
+ const directory = { win32: 'windows', darwin: 'macos', linux: 'linux' }[platform];
3
+ if (!directory) throw new Error(`工作站暂不支持此系统:${platform}`);
4
+ return new URL(`./${directory}/${name}.mjs`, import.meta.url);
5
+ }
@@ -0,0 +1,3 @@
1
+ import { platformModule } from './select.mjs';
2
+ const adapter = await import(platformModule('service-host'));
3
+ export const { sharedServiceUrl, lanAddress, lanNetworks, bridgeEnvironment } = adapter;
@@ -0,0 +1,3 @@
1
+ import { platformModule } from './select.mjs';
2
+ const adapter = await import(platformModule('user-environment'));
3
+ export const { configureManagedEnvironment, clearManagedEnvironment } = adapter;
@@ -0,0 +1,49 @@
1
+ param(
2
+ [Parameter(Mandatory=$true)][string]$Executable,
3
+ [Parameter(Mandatory=$true)][string]$AppServerUrl
4
+ )
5
+ $ErrorActionPreference = 'Stop'
6
+ [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
7
+ if ($AppServerUrl -cnotmatch '^ws://127\.0\.0\.1:([1-9][0-9]{0,4})\z' -or [int]$Matches[1] -gt 65535) { throw 'Invalid managed app-server URL.' }
8
+ $package = Get-AppxPackage OpenAI.Codex | Select-Object -First 1
9
+ if (-not $package -or $Executable -ne (Join-Path $package.InstallLocation 'app/ChatGPT.exe')) {
10
+ throw 'Desktop executable identity changed; activation stopped.'
11
+ }
12
+ # Packaged activation uses the user's environment, not the worker's env block.
13
+ # Installation already owns and broadcasts this setting. Do not silently launch
14
+ # a separate app-server if it has been removed or changed since installation.
15
+ if ([Environment]::GetEnvironmentVariable('CODEX_APP_SERVER_WS_URL', 'User') -ne $AppServerUrl) {
16
+ throw 'Desktop app-server environment differs from the workstation; run relax setup to repair it.'
17
+ }
18
+ if ([Environment]::GetEnvironmentVariable('CODEX_APP_SERVER_FORCE_CLI', 'User') -eq '1' -or
19
+ [Environment]::GetEnvironmentVariable('CODEX_APP_SERVER_FORCE_CLI', 'Machine') -eq '1') {
20
+ throw 'CODEX_APP_SERVER_FORCE_CLI=1 prevents Desktop from connecting to the workstation.'
21
+ }
22
+ # Activate the registered application so Windows supplies its MSIX identity.
23
+ # Never spawn ChatGPT.exe through the hidden-console broker: a bootstrap failure
24
+ # can leave a windowless Electron singleton blocking subsequent taskbar launches.
25
+ Add-Type -TypeDefinition @'
26
+ using System;
27
+ using System.Runtime.InteropServices;
28
+ namespace CodeRelax {
29
+ [ComImport, Guid("2e941141-7f97-4756-ba1d-9decde894a3d"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
30
+ interface IApplicationActivationManager {
31
+ void ActivateApplication([MarshalAs(UnmanagedType.LPWStr)] string appId,
32
+ [MarshalAs(UnmanagedType.LPWStr)] string arguments, uint options, out uint processId);
33
+ void ActivateForFile([MarshalAs(UnmanagedType.LPWStr)] string appId, IntPtr items,
34
+ [MarshalAs(UnmanagedType.LPWStr)] string verb, out uint processId);
35
+ void ActivateForProtocol([MarshalAs(UnmanagedType.LPWStr)] string appId, IntPtr items, out uint processId);
36
+ }
37
+ public static class DesktopActivation {
38
+ public static uint Activate(string appId) {
39
+ object instance = Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("45BA127D-10A8-46EA-8AB7-56EA9078943C")));
40
+ try {
41
+ uint processId;
42
+ ((IApplicationActivationManager)instance).ActivateApplication(appId, "", 2, out processId);
43
+ return processId;
44
+ } finally { Marshal.ReleaseComObject(instance); }
45
+ }
46
+ }
47
+ }
48
+ '@
49
+ [CodeRelax.DesktopActivation]::Activate($package.PackageFamilyName + '!App')
@@ -0,0 +1,215 @@
1
+ import fs from 'node:fs';
2
+ import { compareVersions, verifyProtocol } from '../codex-protocol.mjs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { createRequire } from 'node:module';
6
+ import { execFile } from 'node:child_process';
7
+ import { createHash, randomUUID } from 'node:crypto';
8
+ import { fileURLToPath } from 'node:url';
9
+ import { promisify } from 'node:util';
10
+ import { readRecord, writeRecord } from '../../service-lifecycle.mjs';
11
+
12
+ const exec = promisify(execFile);
13
+ export const codeModeHostPath = executable => path.join(path.dirname(executable), 'codex-code-mode-host.exe');
14
+ export const runtimeFilesAvailable = executable => fs.existsSync(executable) && fs.existsSync(codeModeHostPath(executable));
15
+ const fingerprint = executable => [executable, codeModeHostPath(executable)]
16
+ .map(file => { const s = fs.statSync(file); return `${s.size}:${s.mtimeMs}`; }).join('|');
17
+ export const runtimeFingerprint = fingerprint;
18
+ const powershell = path.join(process.env.SystemRoot || 'C:\\Windows', 'System32/WindowsPowerShell/v1.0/powershell.exe');
19
+ const desktopRuntimeScript = path.join(path.dirname(fileURLToPath(import.meta.url)), 'desktop-runtime.ps1');
20
+
21
+ async function fileHash(file) {
22
+ const hash = createHash('sha256');
23
+ for await (const chunk of fs.createReadStream(file)) hash.update(chunk);
24
+ return hash.digest('hex');
25
+ }
26
+
27
+ async function installedDesktopRuntime() {
28
+ const { stdout } = await exec(powershell, ['-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass',
29
+ '-File', desktopRuntimeScript], { windowsHide: true, encoding: 'utf8', timeout: 30000 });
30
+ return JSON.parse(stdout.trim());
31
+ }
32
+
33
+ async function matchesInstalledDesktop(executable, installed) {
34
+ if (!installed || !runtimeFilesAvailable(executable) || !runtimeFilesAvailable(installed.executable)) return false;
35
+ const files = [[executable, installed.executable], [codeModeHostPath(executable), installed.codeModeHost]];
36
+ for (const [candidate, bundled] of files) {
37
+ if (fs.statSync(candidate).size !== fs.statSync(bundled).size || await fileHash(candidate) !== await fileHash(bundled)) return false;
38
+ }
39
+ return true;
40
+ }
41
+
42
+ function runtimeFiles(directory, relative = '') {
43
+ const files = [];
44
+ for (const entry of fs.readdirSync(path.join(directory, relative), { withFileTypes: true })) {
45
+ const name = path.join(relative, entry.name);
46
+ if (entry.isDirectory()) files.push(...runtimeFiles(directory, name));
47
+ else if (entry.isFile()) files.push(name);
48
+ else throw new Error(`Codex 内核目录包含不支持的文件类型:${name}`);
49
+ }
50
+ return files.sort();
51
+ }
52
+
53
+ function runtimeDirectories(files) {
54
+ const directories = new Set();
55
+ for (const file of files) {
56
+ let directory = path.dirname(file);
57
+ while (directory !== '.') { directories.add(directory); directory = path.dirname(directory); }
58
+ }
59
+ return [...directories].sort((a, b) => a.split(path.sep).length - b.split(path.sep).length);
60
+ }
61
+
62
+ async function retainDesktopRuntime(executable, installed, stateRoot) {
63
+ if (!/^[\w.-]+$/.test(installed.package)) throw new Error('Codex Desktop 安装包名称无效。');
64
+ const source = path.dirname(executable);
65
+ const files = runtimeFiles(source);
66
+ if (files.includes('runtime.json')) throw new Error('Codex 内核目录与保留清单文件名冲突。');
67
+ const directories = runtimeDirectories(files);
68
+ const root = path.join(stateRoot, 'desktop-runtimes');
69
+ const target = path.join(root, installed.package);
70
+ const retained = path.join(target, 'codex.exe');
71
+ if (fs.existsSync(target)) {
72
+ const manifest = readRecord(path.join(target, 'runtime.json'));
73
+ if (manifest?.package !== installed.package || JSON.stringify(manifest.files) !== JSON.stringify(files)
74
+ || JSON.stringify(runtimeFiles(target)) !== JSON.stringify([...files, 'runtime.json'].sort())
75
+ || !await matchesInstalledDesktop(retained, installed)) {
76
+ throw new Error(`已保留的 Codex 内核文件不完整:${target}`);
77
+ }
78
+ return retained;
79
+ }
80
+ fs.mkdirSync(root, { recursive: true });
81
+ const staging = path.join(root, `.${installed.package}.${randomUUID()}.tmp`);
82
+ fs.mkdirSync(staging);
83
+ const created = [];
84
+ try {
85
+ for (const directory of directories) fs.mkdirSync(path.join(staging, directory));
86
+ for (const name of files) {
87
+ const from = path.join(source, name), to = path.join(staging, name);
88
+ created.push(to);
89
+ try { fs.linkSync(from, to); }
90
+ catch (error) {
91
+ if (error.code !== 'EXDEV') throw error;
92
+ fs.copyFileSync(from, to);
93
+ }
94
+ }
95
+ if (!await matchesInstalledDesktop(path.join(staging, 'codex.exe'), installed)) {
96
+ throw new Error('保留的 Codex 内核与当前安装包不一致。');
97
+ }
98
+ const manifestPath = path.join(staging, 'runtime.json');
99
+ writeRecord(manifestPath, { package: installed.package, files });
100
+ created.push(manifestPath);
101
+ fs.renameSync(staging, target);
102
+ return retained;
103
+ } catch (error) {
104
+ for (const file of created) fs.rmSync(file, { force: true });
105
+ for (const directory of directories.reverse()) {
106
+ const nested = path.join(staging, directory);
107
+ if (fs.existsSync(nested)) fs.rmdirSync(nested);
108
+ }
109
+ fs.rmdirSync(staging);
110
+ throw error;
111
+ }
112
+ }
113
+
114
+ export function pruneRetainedDesktopRuntimes(stateRoot, keepExecutable) {
115
+ const root = path.join(stateRoot, 'desktop-runtimes');
116
+ if (!fs.existsSync(root)) return;
117
+ const keep = path.resolve(path.dirname(keepExecutable)).toLowerCase();
118
+ for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
119
+ if (!entry.isDirectory() || !/^OpenAI\.Codex_[\w.-]+$/.test(entry.name)) continue;
120
+ const directory = path.join(root, entry.name);
121
+ if (path.resolve(directory).toLowerCase() === keep || fs.lstatSync(directory).isSymbolicLink()) continue;
122
+ const manifest = readRecord(path.join(directory, 'runtime.json'));
123
+ const files = manifest?.files;
124
+ if (manifest?.package !== entry.name || !Array.isArray(files) || !files.includes('codex.exe')
125
+ || !files.includes('codex-code-mode-host.exe') || new Set(files).size !== files.length
126
+ || !files.every(name => typeof name === 'string' && name !== 'runtime.json'
127
+ && path.resolve(directory, name).toLowerCase().startsWith(`${path.resolve(directory).toLowerCase()}${path.sep}`))) continue;
128
+ const expected = [...files, 'runtime.json'].sort();
129
+ if (JSON.stringify(runtimeFiles(directory)) !== JSON.stringify(expected)) continue;
130
+ if (!fs.lstatSync(path.join(directory, 'runtime.json')).isFile()
131
+ || !files.every(name => fs.lstatSync(path.join(directory, name)).isFile())) continue;
132
+ for (const name of files) fs.unlinkSync(path.join(directory, name));
133
+ fs.unlinkSync(path.join(directory, 'runtime.json'));
134
+ for (const name of runtimeDirectories(files).reverse()) fs.rmdirSync(path.join(directory, name));
135
+ fs.rmdirSync(directory);
136
+ }
137
+ }
138
+
139
+ // Resolve native binaries, never execute a shell shim from a background task.
140
+ export function discoverCodex(environment = process.env) {
141
+ const found = new Map();
142
+ const add = (file, source) => {
143
+ if (!fs.existsSync(file) || !fs.statSync(file).isFile()) return;
144
+ const executable = fs.realpathSync(file);
145
+ if (!found.has(executable.toLowerCase()) || source === 'desktop') found.set(executable.toLowerCase(), { executable, source });
146
+ };
147
+ if (environment.CODE_RELAX_CODEX_PATH) {
148
+ const file = environment.CODE_RELAX_CODEX_PATH;
149
+ if (!path.isAbsolute(file) || path.basename(file).toLowerCase() !== 'codex.exe') throw new Error('CODE_RELAX_CODEX_PATH 必须是 codex.exe 的绝对路径。');
150
+ add(file, 'explicit');
151
+ if (!found.size) throw new Error('CODE_RELAX_CODEX_PATH 指定的程序不存在。');
152
+ return [...found.values()];
153
+ }
154
+ const local = environment.LOCALAPPDATA || path.join(os.homedir(), 'AppData/Local');
155
+ const home = environment.CODEX_HOME || path.join(os.homedir(), '.codex');
156
+ const directories = [...String(environment.PATH || environment.Path || '').split(';').filter(Boolean),
157
+ environment.CODEX_INSTALL_DIR, path.join(local, 'Programs/OpenAI/Codex/bin'),
158
+ path.join(home, 'packages/standalone/current/bin')].filter(Boolean);
159
+ for (const directory of directories) {
160
+ add(path.join(directory, 'codex.exe'), 'cli');
161
+ const packageFile = path.join(directory, 'node_modules/@openai/codex/package.json');
162
+ if (!fs.existsSync(packageFile)) continue;
163
+ const root = path.dirname(fs.realpathSync(packageFile));
164
+ let vendor = path.join(root, 'vendor');
165
+ try { vendor = path.join(path.dirname(createRequire(packageFile).resolve('@openai/codex-win32-x64/package.json')), 'vendor'); }
166
+ catch (error) { if (error.code !== 'MODULE_NOT_FOUND') throw error; }
167
+ add(path.join(vendor, 'x86_64-pc-windows-msvc/bin/codex.exe'), 'npm');
168
+ }
169
+ const desktopRoot = path.join(local, 'OpenAI/Codex/bin');
170
+ add(path.join(desktopRoot, 'codex.exe'), 'desktop');
171
+ if (fs.existsSync(desktopRoot)) for (const entry of fs.readdirSync(desktopRoot, { withFileTypes: true })) {
172
+ if (entry.isDirectory()) add(path.join(desktopRoot, entry.name, 'codex.exe'), 'desktop');
173
+ }
174
+ return [...found.values()];
175
+ }
176
+
177
+ export async function resolveCodexRuntime(stateRoot, { refresh = false, environment = process.env } = {}) {
178
+ fs.mkdirSync(stateRoot, { recursive: true });
179
+ const recordFile = path.join(stateRoot, 'codex-runtime.json');
180
+ const saved = readRecord(recordFile);
181
+ environment = { ...environment,
182
+ CODEX_HOME: environment.CODEX_HOME || saved?.codexHome || path.join(os.homedir(), '.codex'),
183
+ CODE_RELAX_CODEX_PATH: environment.CODE_RELAX_CODEX_PATH || (saved?.source === 'explicit' ? saved.executable : '') };
184
+ if (!refresh && saved?.executable && runtimeFilesAvailable(saved.executable)
185
+ && saved.fingerprint === fingerprint(saved.executable)) return saved;
186
+ const candidates = [], rejected = [];
187
+ let installed = null;
188
+ try { installed = await installedDesktopRuntime(); }
189
+ catch (error) { rejected.push(`无法读取当前 Codex Desktop 安装包:${error.message}`); }
190
+ for (const candidate of discoverCodex(environment)) {
191
+ try {
192
+ if (!runtimeFilesAvailable(candidate.executable)) throw new Error('缺少同目录的 codex-code-mode-host.exe');
193
+ if (candidate.source === 'desktop' && !await matchesInstalledDesktop(candidate.executable, installed)) {
194
+ throw new Error('不是当前 Codex Desktop 安装包配套的 CLI');
195
+ }
196
+ const { stdout } = await exec(candidate.executable, ['--version'], { windowsHide: true, timeout: 10000 });
197
+ const version = /^codex-cli (\d+\.\d+\.\d+(?:-[\w.]+)?)/m.exec(stdout)?.[1];
198
+ if (!version) throw new Error('无法识别版本');
199
+ candidates.push({ ...candidate, version });
200
+ } catch (error) { rejected.push(`${candidate.executable}: ${error.message}`); }
201
+ }
202
+ candidates.sort((a, b) => Number(b.source === 'desktop') - Number(a.source === 'desktop') || compareVersions(b.version, a.version));
203
+ for (const candidate of candidates) {
204
+ try {
205
+ const executable = candidate.source === 'desktop'
206
+ ? await retainDesktopRuntime(candidate.executable, installed, stateRoot) : candidate.executable;
207
+ await verifyProtocol(executable, stateRoot);
208
+ const result = { ...candidate, executable, fingerprint: fingerprint(executable),
209
+ codexHome: path.resolve(environment.CODEX_HOME || path.join(os.homedir(), '.codex')) };
210
+ writeRecord(recordFile, result);
211
+ return result;
212
+ } catch (error) { rejected.push(`${candidate.executable}: ${error.message}`); }
213
+ }
214
+ throw new Error(`未找到兼容的 Codex CLI,请安装或更新 Codex CLI 后执行 relax setup。${rejected.length ? '\n' + rejected.join('\n') : ''}`);
215
+ }