@walkhi/code-relax 0.1.0-beta.8 → 0.1.0-beta.81

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 (856) hide show
  1. package/README.md +67 -45
  2. package/dist/bin/cleanup-accounts.mjs +63 -0
  3. package/dist/bin/codex-remote.mjs +382 -262
  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/bin/set-relay-admin-password.mjs +11 -0
  13. package/dist/build-platform.json +1 -0
  14. package/dist/get-shared-service-url.ps1 +12 -4
  15. package/dist/shared/app-server-events.cjs +457 -238
  16. package/dist/shared/code-browser.cjs +159 -0
  17. package/dist/shared/file-changes.cjs +31 -0
  18. package/dist/shared/file-citations.cjs +117 -0
  19. package/dist/shared/file-mentions.cjs +92 -0
  20. package/dist/shared/message-delivery.cjs +115 -0
  21. package/dist/shared/p2p-data-channel.cjs +22 -0
  22. package/dist/shared/p2p-diagnostics.cjs +1 -1
  23. package/dist/shared/p2p-file-channel.cjs +87 -0
  24. package/dist/shared/p2p-ice-policy.cjs +22 -0
  25. package/dist/shared/plan-pricing.cjs +32 -0
  26. package/dist/shared/question-attention.cjs +69 -0
  27. package/dist/shared/release-version.cjs +31 -0
  28. package/dist/shared/server-requests.cjs +311 -67
  29. package/dist/shared/service-endpoints.cjs +21 -0
  30. package/dist/shared/timeline-sync.cjs +173 -67
  31. package/dist/skills/code-relax/SKILL.md +22 -17
  32. package/dist/src/archived-threads.mjs +22 -0
  33. package/dist/src/bounded-process-log.mjs +63 -0
  34. package/dist/src/celsius-client.mjs +107 -0
  35. package/dist/src/code-browser.mjs +99 -0
  36. package/dist/src/desktop-launcher.mjs +62 -42
  37. package/dist/src/desktop-operation.mjs +41 -0
  38. package/dist/src/dots-approval-timeline.mjs +99 -0
  39. package/dist/src/dots-avatar.mjs +42 -0
  40. package/dist/src/dots-chat-projection.mjs +50 -0
  41. package/dist/src/dots-chat-server.mjs +531 -0
  42. package/dist/src/dots-message-images.mjs +318 -0
  43. package/dist/src/dots-profile.mjs +77 -0
  44. package/dist/src/dots-room-activity.mjs +199 -0
  45. package/dist/src/dots-room-client.mjs +163 -0
  46. package/dist/src/dots-room-projection.mjs +94 -0
  47. package/dist/src/dots-schedules.mjs +66 -0
  48. package/dist/src/dots-summary-tasks.mjs +32 -0
  49. package/dist/src/dots-task-catalog.mjs +433 -0
  50. package/dist/src/dots-task-files.mjs +52 -0
  51. package/dist/src/file-transfer-range.mjs +22 -0
  52. package/dist/src/file-upload-session.mjs +153 -0
  53. package/dist/src/hosted-history-app-server.mjs +103 -0
  54. package/dist/src/hosted-history-cache.mjs +113 -0
  55. package/dist/src/lan-socket-server.mjs +269 -37
  56. package/dist/src/managed-app-server.mjs +398 -216
  57. package/dist/src/managed-endpoint.mjs +25 -0
  58. package/dist/src/message-images.mjs +0 -18
  59. package/dist/src/message-upload-files.mjs +115 -0
  60. package/dist/src/onboarding.mjs +9 -28
  61. package/dist/src/plan-pricing.mjs +47 -0
  62. package/dist/src/platform/README.md +7 -12
  63. package/dist/src/platform/codex-protocol.mjs +51 -0
  64. package/dist/src/platform/codex-runtime.mjs +4 -0
  65. package/dist/src/platform/credential-store.mjs +19 -0
  66. package/dist/src/platform/desktop-host.mjs +3 -0
  67. package/dist/src/platform/desktop-permission-mode.mjs +17 -0
  68. package/dist/src/platform/desktop-project-registration.mjs +3 -0
  69. package/dist/src/platform/desktop-project-store.mjs +219 -0
  70. package/dist/src/platform/file-opener.mjs +9 -0
  71. package/dist/src/platform/linux/codex-runtime.mjs +56 -0
  72. package/dist/src/platform/linux/desktop-host.mjs +87 -0
  73. package/dist/src/platform/linux/desktop-installation.mjs +36 -0
  74. package/dist/src/platform/linux/desktop-project-registration.mjs +11 -0
  75. package/dist/src/platform/linux/network-info.mjs +11 -0
  76. package/dist/src/platform/linux/process.mjs +53 -0
  77. package/dist/src/platform/linux/project-locations.mjs +17 -0
  78. package/dist/src/platform/linux/resident-startup.mjs +52 -0
  79. package/dist/src/platform/linux/retained-runtime.mjs +76 -0
  80. package/dist/src/platform/linux/service-host.mjs +18 -0
  81. package/dist/src/platform/linux/system.mjs +50 -0
  82. package/dist/src/platform/linux/user-environment.mjs +31 -0
  83. package/dist/src/platform/macos/codex-runtime.mjs +121 -0
  84. package/dist/src/platform/macos/desktop-host.mjs +86 -0
  85. package/dist/src/platform/macos/desktop-project-registration.mjs +11 -0
  86. package/dist/src/platform/macos/network-info.mjs +8 -0
  87. package/dist/src/platform/macos/project-locations.mjs +8 -0
  88. package/dist/src/platform/macos/resident-startup.mjs +84 -0
  89. package/dist/src/platform/macos/retained-runtime.mjs +127 -0
  90. package/dist/src/platform/macos/service-host.mjs +18 -0
  91. package/dist/src/platform/macos/system.mjs +29 -0
  92. package/dist/src/platform/macos/user-environment.mjs +31 -0
  93. package/dist/src/platform/managed-user-environment.mjs +78 -0
  94. package/dist/src/platform/native-package.mjs +61 -0
  95. package/dist/src/platform/network-info.mjs +3 -0
  96. package/dist/src/platform/path-identity.mjs +5 -0
  97. package/dist/src/platform/posix/network-candidates.mjs +23 -0
  98. package/dist/src/platform/posix/runtime-paths.mjs +25 -0
  99. package/dist/src/platform/power-inhibitor.mjs +22 -0
  100. package/dist/src/platform/project-locations.mjs +3 -0
  101. package/dist/src/platform/runtime-paths.mjs +8 -0
  102. package/dist/src/platform/select.mjs +5 -0
  103. package/dist/src/platform/service-host.mjs +3 -0
  104. package/dist/src/platform/user-environment.mjs +3 -0
  105. package/dist/src/platform/windows/activate-desktop.ps1 +49 -0
  106. package/dist/src/platform/windows/codex-runtime.mjs +225 -0
  107. package/dist/src/platform/windows/desktop-helper.mjs +179 -0
  108. package/dist/src/platform/windows/desktop-host.mjs +45 -18
  109. package/dist/src/platform/windows/desktop-info.ps1 +27 -5
  110. package/dist/src/platform/windows/desktop-project-registration.mjs +4 -0
  111. package/dist/src/platform/windows/desktop-runtime.ps1 +10 -0
  112. package/dist/src/platform/windows/desktop-shortcuts.ps1 +7 -14
  113. package/dist/src/platform/windows/dots-profile.mjs +49 -0
  114. package/dist/src/platform/windows/keep-awake.ps1 +20 -0
  115. package/dist/src/platform/windows/launch-worker.mjs +41 -42
  116. package/dist/src/platform/windows/project-locations.mjs +16 -0
  117. package/dist/src/platform/windows/resident-start.js +20 -0
  118. package/dist/src/platform/windows/resident-startup.ps1 +27 -11
  119. package/dist/src/platform/windows/rustdesk-video-probe.mjs +168 -0
  120. package/dist/src/platform/windows/service-host.mjs +15 -23
  121. package/dist/src/platform/windows/start-hidden-console.ps1 +11 -2
  122. package/dist/src/platform/windows/user-environment.mjs +52 -50
  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/relay-config-import.mjs +45 -0
  128. package/dist/src/runtime-discovery.mjs +67 -0
  129. package/dist/src/self-relay/account-cleanup.mjs +30 -0
  130. package/dist/src/self-relay/account-connections.mjs +52 -0
  131. package/dist/src/self-relay/admin-auth.mjs +59 -0
  132. package/dist/src/self-relay/admin-cloud.mjs +101 -0
  133. package/dist/src/self-relay/admin-login-page.mjs +7 -0
  134. package/dist/src/self-relay/admin-page.mjs +87 -0
  135. package/dist/src/self-relay/admin-server.mjs +105 -0
  136. package/dist/src/self-relay/admin-state.mjs +85 -19
  137. package/dist/src/self-relay/admin-style.mjs +58 -0
  138. package/dist/src/self-relay/admin-workstations-page.mjs +95 -0
  139. package/dist/src/self-relay/admin-workstations.mjs +143 -0
  140. package/dist/src/self-relay/android-releases.mjs +61 -0
  141. package/dist/src/self-relay/client.mjs +45 -45
  142. package/dist/src/self-relay/connection-reporting.mjs +38 -0
  143. package/dist/src/self-relay/connector.mjs +456 -145
  144. package/dist/src/self-relay/demo.mjs +3 -4
  145. package/dist/src/self-relay/device-info.mjs +27 -0
  146. package/dist/src/self-relay/device-store.mjs +10 -2
  147. package/dist/src/self-relay/diagnostics.mjs +54 -0
  148. package/dist/src/self-relay/email-accounts.mjs +183 -0
  149. package/dist/src/self-relay/file-wire.mjs +76 -0
  150. package/dist/src/self-relay/lan-authorizations.mjs +44 -2
  151. package/dist/src/self-relay/lifecycle.mjs +255 -262
  152. package/dist/src/self-relay/long-pairing.mjs +40 -0
  153. package/dist/src/self-relay/mysql-state.mjs +118 -0
  154. package/dist/src/self-relay/p2p-probe.mjs +168 -123
  155. package/dist/src/self-relay/phone-connections.mjs +55 -0
  156. package/dist/src/self-relay/privacy-page.mjs +26 -0
  157. package/dist/src/self-relay/public-releases.mjs +67 -0
  158. package/dist/src/self-relay/rtc-file-bridge.mjs +46 -0
  159. package/dist/src/self-relay/server.mjs +1064 -428
  160. package/dist/src/self-relay/usage-daily.mjs +55 -0
  161. package/dist/src/self-relay/usage-meter.mjs +141 -0
  162. package/dist/src/server.mjs +1599 -1797
  163. package/dist/src/service-control.mjs +17 -7
  164. package/dist/src/service-doctor.mjs +150 -70
  165. package/dist/src/service-health.mjs +2 -2
  166. package/dist/src/service-install.mjs +16 -10
  167. package/dist/src/service-lifecycle.mjs +51 -46
  168. package/dist/src/service-power.mjs +58 -0
  169. package/dist/src/service-restart.mjs +45 -12
  170. package/dist/src/service-update-worker.mjs +42 -0
  171. package/dist/src/service-update.mjs +80 -0
  172. package/dist/src/shared-app-server.mjs +490 -305
  173. package/dist/src/shared-catalog.mjs +132 -50
  174. package/dist/src/shared-recovery.mjs +24 -14
  175. package/dist/src/shared-thread-stream.mjs +136 -51
  176. package/dist/src/skill-install.mjs +0 -13
  177. package/dist/src/turn-model-history.mjs +47 -0
  178. package/dist/src/usage-reset.mjs +17 -0
  179. package/dist/src/workstation-downloads.mjs +120 -0
  180. package/package.json +35 -37
  181. package/tools/postinstall.mjs +186 -146
  182. package/dist/src/app-server-client.mjs +0 -468
  183. package/dist/src/app-server-tasks.mjs +0 -358
  184. package/dist/src/debug-ui.mjs +0 -131
  185. package/dist/src/platform/windows/credential-store.mjs +0 -27
  186. package/dist/src/platform/windows/credential-store.ps1 +0 -49
  187. package/dist/src/platform/windows/desktop-monitor.mjs +0 -34
  188. package/dist/src/platform/windows/desktop-shortcut-run.ps1 +0 -5
  189. package/dist/src/platform/windows/desktop-tools.mjs +0 -48
  190. package/dist/src/thread-catalog.mjs +0 -47
  191. package/dist/tools/find-desktop-pipe.mjs +0 -10
  192. package/dist/web/activity-view.js +0 -283
  193. package/dist/web/approval-ui.js +0 -188
  194. package/dist/web/capabilities.js +0 -57
  195. package/dist/web/chat-transport.js +0 -202
  196. package/dist/web/chat.css +0 -782
  197. package/dist/web/chat.js +0 -3830
  198. package/dist/web/client-platform.js +0 -11
  199. package/dist/web/community-view.js +0 -20
  200. package/dist/web/community.css +0 -77
  201. package/dist/web/community.html +0 -37
  202. package/dist/web/composer-controller.js +0 -101
  203. package/dist/web/conversation-controller.js +0 -99
  204. package/dist/web/disclosure-state-controller.js +0 -95
  205. package/dist/web/draft-controller.js +0 -103
  206. package/dist/web/harmony-platform.js +0 -52
  207. package/dist/web/highlight-powershell.min.js +0 -39
  208. package/dist/web/highlight.min.js +0 -1262
  209. package/dist/web/history-cache.js +0 -240
  210. package/dist/web/history-controller.js +0 -167
  211. package/dist/web/index.html +0 -325
  212. package/dist/web/lan-session.js +0 -122
  213. package/dist/web/link-action-controller.js +0 -212
  214. package/dist/web/message-send-controller.js +0 -177
  215. package/dist/web/message-view.js +0 -98
  216. package/dist/web/p2p-data-channel.js +0 -50
  217. package/dist/web/p2p-diagnostics.js +0 -28
  218. package/dist/web/p2p-probe.js +0 -123
  219. package/dist/web/page-resume.js +0 -28
  220. package/dist/web/pending-message-store.js +0 -108
  221. package/dist/web/queue-controller.js +0 -82
  222. package/dist/web/resources.json +0 -1
  223. package/dist/web/self-relay-session.js +0 -129
  224. package/dist/web/server-requests.js +0 -67
  225. package/dist/web/station-connection-controller.js +0 -75
  226. package/dist/web/task-list-view.js +0 -296
  227. package/dist/web/thread-attention-controller.js +0 -124
  228. package/dist/web/thread-context-controller.js +0 -30
  229. package/dist/web/thread-list-controller.js +0 -61
  230. package/dist/web/thread-list-sync.js +0 -86
  231. package/dist/web/thread-title-controller.js +0 -57
  232. package/dist/web/timeline-formatters.js +0 -249
  233. package/dist/web/timeline-reducer.js +0 -81
  234. package/dist/web/timeline-renderer.js +0 -161
  235. package/dist/web/timeline-scroll-controller.js +0 -50
  236. package/dist/web/timeline-sync.js +0 -67
  237. package/dist/web/usage-controller.js +0 -258
  238. package/dist/web/vendor/README.md +0 -14
  239. package/dist/web/vendor/highlight-powershell.min.js +0 -39
  240. package/dist/web/vendor/highlight.LICENSE.txt +0 -29
  241. package/dist/web/vendor/highlight.min.js +0 -1262
  242. package/dist/web/vendor/lucide.LICENSE.txt +0 -17
  243. package/node_modules/@img/colour/LICENSE.md +0 -82
  244. package/node_modules/@img/colour/README.md +0 -15
  245. package/node_modules/@img/colour/color.cjs +0 -1596
  246. package/node_modules/@img/colour/index.cjs +0 -1
  247. package/node_modules/@img/colour/index.d.ts +0 -929
  248. package/node_modules/@img/colour/package.json +0 -58
  249. package/node_modules/@img/sharp-win32-x64/LICENSE +0 -191
  250. package/node_modules/@img/sharp-win32-x64/README.md +0 -59
  251. package/node_modules/@img/sharp-win32-x64/index.cjs +0 -1
  252. package/node_modules/@img/sharp-win32-x64/lib/libvips-42.dll +0 -0
  253. package/node_modules/@img/sharp-win32-x64/lib/libvips-cpp-8.18.6.dll +0 -0
  254. package/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64-0.35.4.node +0 -0
  255. package/node_modules/@img/sharp-win32-x64/package.json +0 -40
  256. package/node_modules/@img/sharp-win32-x64/versions.json +0 -30
  257. package/node_modules/@node-datachannel/win32-x64-msvc/node_datachannel.node +0 -0
  258. package/node_modules/@node-datachannel/win32-x64-msvc/package.json +0 -20
  259. package/node_modules/ansi-regex/index.d.ts +0 -37
  260. package/node_modules/ansi-regex/index.js +0 -10
  261. package/node_modules/ansi-regex/license +0 -9
  262. package/node_modules/ansi-regex/package.json +0 -55
  263. package/node_modules/ansi-regex/readme.md +0 -78
  264. package/node_modules/ansi-styles/index.d.ts +0 -345
  265. package/node_modules/ansi-styles/index.js +0 -163
  266. package/node_modules/ansi-styles/license +0 -9
  267. package/node_modules/ansi-styles/package.json +0 -56
  268. package/node_modules/ansi-styles/readme.md +0 -152
  269. package/node_modules/camelcase/index.d.ts +0 -63
  270. package/node_modules/camelcase/index.js +0 -76
  271. package/node_modules/camelcase/license +0 -9
  272. package/node_modules/camelcase/package.json +0 -43
  273. package/node_modules/camelcase/readme.md +0 -99
  274. package/node_modules/cliui/CHANGELOG.md +0 -76
  275. package/node_modules/cliui/LICENSE.txt +0 -14
  276. package/node_modules/cliui/README.md +0 -115
  277. package/node_modules/cliui/index.js +0 -354
  278. package/node_modules/cliui/package.json +0 -65
  279. package/node_modules/color-convert/CHANGELOG.md +0 -54
  280. package/node_modules/color-convert/LICENSE +0 -21
  281. package/node_modules/color-convert/README.md +0 -68
  282. package/node_modules/color-convert/conversions.js +0 -839
  283. package/node_modules/color-convert/index.js +0 -81
  284. package/node_modules/color-convert/package.json +0 -48
  285. package/node_modules/color-convert/route.js +0 -97
  286. package/node_modules/color-name/LICENSE +0 -8
  287. package/node_modules/color-name/README.md +0 -11
  288. package/node_modules/color-name/index.js +0 -152
  289. package/node_modules/color-name/package.json +0 -28
  290. package/node_modules/decamelize/index.js +0 -13
  291. package/node_modules/decamelize/license +0 -21
  292. package/node_modules/decamelize/package.json +0 -38
  293. package/node_modules/decamelize/readme.md +0 -48
  294. package/node_modules/detect-libc/LICENSE +0 -201
  295. package/node_modules/detect-libc/README.md +0 -163
  296. package/node_modules/detect-libc/index.d.ts +0 -14
  297. package/node_modules/detect-libc/lib/detect-libc.js +0 -313
  298. package/node_modules/detect-libc/lib/elf.js +0 -39
  299. package/node_modules/detect-libc/lib/filesystem.js +0 -51
  300. package/node_modules/detect-libc/lib/process.js +0 -24
  301. package/node_modules/detect-libc/package.json +0 -44
  302. package/node_modules/dijkstrajs/.travis.yml +0 -4
  303. package/node_modules/dijkstrajs/CONTRIBUTING.md +0 -8
  304. package/node_modules/dijkstrajs/LICENSE.md +0 -19
  305. package/node_modules/dijkstrajs/README.md +0 -18
  306. package/node_modules/dijkstrajs/dijkstra.js +0 -165
  307. package/node_modules/dijkstrajs/package.json +0 -60
  308. package/node_modules/dijkstrajs/test/dijkstra.test.js +0 -96
  309. package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  310. package/node_modules/emoji-regex/README.md +0 -73
  311. package/node_modules/emoji-regex/es2015/index.js +0 -6
  312. package/node_modules/emoji-regex/es2015/text.js +0 -6
  313. package/node_modules/emoji-regex/index.d.ts +0 -23
  314. package/node_modules/emoji-regex/index.js +0 -6
  315. package/node_modules/emoji-regex/package.json +0 -50
  316. package/node_modules/emoji-regex/text.js +0 -6
  317. package/node_modules/find-up/index.d.ts +0 -137
  318. package/node_modules/find-up/index.js +0 -89
  319. package/node_modules/find-up/license +0 -9
  320. package/node_modules/find-up/package.json +0 -53
  321. package/node_modules/find-up/readme.md +0 -156
  322. package/node_modules/get-caller-file/LICENSE.md +0 -6
  323. package/node_modules/get-caller-file/README.md +0 -41
  324. package/node_modules/get-caller-file/index.d.ts +0 -2
  325. package/node_modules/get-caller-file/index.js +0 -22
  326. package/node_modules/get-caller-file/index.js.map +0 -1
  327. package/node_modules/get-caller-file/package.json +0 -42
  328. package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  329. package/node_modules/is-fullwidth-code-point/index.js +0 -50
  330. package/node_modules/is-fullwidth-code-point/license +0 -9
  331. package/node_modules/is-fullwidth-code-point/package.json +0 -42
  332. package/node_modules/is-fullwidth-code-point/readme.md +0 -39
  333. package/node_modules/locate-path/index.d.ts +0 -83
  334. package/node_modules/locate-path/index.js +0 -65
  335. package/node_modules/locate-path/license +0 -9
  336. package/node_modules/locate-path/package.json +0 -45
  337. package/node_modules/locate-path/readme.md +0 -122
  338. package/node_modules/node-datachannel/.clang-format +0 -17
  339. package/node_modules/node-datachannel/.editorconfig +0 -12
  340. package/node_modules/node-datachannel/.eslintignore +0 -8
  341. package/node_modules/node-datachannel/.eslintrc.json +0 -27
  342. package/node_modules/node-datachannel/.gitmodules +0 -3
  343. package/node_modules/node-datachannel/.prettierignore +0 -7
  344. package/node_modules/node-datachannel/.prettierrc +0 -13
  345. package/node_modules/node-datachannel/API.md +0 -247
  346. package/node_modules/node-datachannel/BULDING.md +0 -26
  347. package/node_modules/node-datachannel/CMakeLists.txt +0 -153
  348. package/node_modules/node-datachannel/LICENSE +0 -373
  349. package/node_modules/node-datachannel/README.md +0 -129
  350. package/node_modules/node-datachannel/dist/cjs/index.cjs +0 -11
  351. package/node_modules/node-datachannel/dist/cjs/index.cjs.map +0 -1
  352. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs +0 -101
  353. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs.map +0 -1
  354. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs +0 -91
  355. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs.map +0 -1
  356. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs +0 -94
  357. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs.map +0 -1
  358. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs +0 -45
  359. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs.map +0 -1
  360. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs +0 -8
  361. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs.map +0 -1
  362. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs +0 -86
  363. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs.map +0 -1
  364. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs +0 -34
  365. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs.map +0 -1
  366. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs +0 -34
  367. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs.map +0 -1
  368. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs +0 -214
  369. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs.map +0 -1
  370. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs +0 -53
  371. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +0 -1
  372. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs +0 -83
  373. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs.map +0 -1
  374. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs +0 -132
  375. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs.map +0 -1
  376. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs +0 -94
  377. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs.map +0 -1
  378. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs +0 -434
  379. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs.map +0 -1
  380. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs +0 -59
  381. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs.map +0 -1
  382. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs +0 -45
  383. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs.map +0 -1
  384. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs +0 -42
  385. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs.map +0 -1
  386. package/node_modules/node-datachannel/dist/esm/index.mjs +0 -8
  387. package/node_modules/node-datachannel/dist/esm/index.mjs.map +0 -1
  388. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs +0 -78
  389. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs.map +0 -1
  390. package/node_modules/node-datachannel/dist/esm/lib/index.mjs +0 -64
  391. package/node_modules/node-datachannel/dist/esm/lib/index.mjs.map +0 -1
  392. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs +0 -78
  393. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs.map +0 -1
  394. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs +0 -43
  395. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs.map +0 -1
  396. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs +0 -6
  397. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs.map +0 -1
  398. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs +0 -82
  399. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs.map +0 -1
  400. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs +0 -28
  401. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs.map +0 -1
  402. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs +0 -30
  403. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs.map +0 -1
  404. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs +0 -210
  405. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs.map +0 -1
  406. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs +0 -49
  407. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs.map +0 -1
  408. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs +0 -79
  409. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs.map +0 -1
  410. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs +0 -128
  411. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs.map +0 -1
  412. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs +0 -89
  413. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs.map +0 -1
  414. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs +0 -430
  415. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs.map +0 -1
  416. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs +0 -55
  417. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs.map +0 -1
  418. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs +0 -41
  419. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs.map +0 -1
  420. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs +0 -27
  421. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs.map +0 -1
  422. package/node_modules/node-datachannel/dist/types/lib/datachannel-stream.d.ts +0 -24
  423. package/node_modules/node-datachannel/dist/types/lib/index.d.ts +0 -241
  424. package/node_modules/node-datachannel/dist/types/lib/types.d.ts +0 -119
  425. package/node_modules/node-datachannel/dist/types/lib/websocket-server.d.ts +0 -13
  426. package/node_modules/node-datachannel/dist/types/lib/websocket.d.ts +0 -25
  427. package/node_modules/node-datachannel/dist/types/polyfill/Events.d.ts +0 -15
  428. package/node_modules/node-datachannel/dist/types/polyfill/RTCCertificate.d.ts +0 -9
  429. package/node_modules/node-datachannel/dist/types/polyfill/RTCDataChannel.d.ts +0 -29
  430. package/node_modules/node-datachannel/dist/types/polyfill/RTCDtlsTransport.d.ts +0 -15
  431. package/node_modules/node-datachannel/dist/types/polyfill/RTCError.d.ts +0 -17
  432. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceCandidate.d.ts +0 -21
  433. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceTransport.d.ts +0 -30
  434. package/node_modules/node-datachannel/dist/types/polyfill/RTCPeerConnection.d.ts +0 -64
  435. package/node_modules/node-datachannel/dist/types/polyfill/RTCSctpTransport.d.ts +0 -15
  436. package/node_modules/node-datachannel/dist/types/polyfill/RTCSessionDescription.d.ts +0 -10
  437. package/node_modules/node-datachannel/dist/types/polyfill/index.d.ts +0 -26
  438. package/node_modules/node-datachannel/jest.config.ts +0 -14
  439. package/node_modules/node-datachannel/package.json +0 -133
  440. package/node_modules/node-datachannel/rollup.config.mjs +0 -67
  441. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.cpp +0 -530
  442. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.h +0 -63
  443. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.cpp +0 -172
  444. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.h +0 -43
  445. package/node_modules/node-datachannel/src/cpp/main.cpp +0 -58
  446. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.cpp +0 -457
  447. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.h +0 -52
  448. package/node_modules/node-datachannel/src/cpp/media-av1packetization.cpp +0 -24
  449. package/node_modules/node-datachannel/src/cpp/media-av1packetization.h +0 -11
  450. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.cpp +0 -126
  451. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.h +0 -29
  452. package/node_modules/node-datachannel/src/cpp/media-direction.cpp +0 -43
  453. package/node_modules/node-datachannel/src/cpp/media-direction.h +0 -10
  454. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.cpp +0 -126
  455. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.h +0 -30
  456. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.cpp +0 -126
  457. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.h +0 -30
  458. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.cpp +0 -32
  459. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.h +0 -11
  460. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.cpp +0 -31
  461. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.h +0 -11
  462. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.cpp +0 -79
  463. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.h +0 -28
  464. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.cpp +0 -68
  465. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.h +0 -28
  466. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.cpp +0 -57
  467. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.h +0 -28
  468. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.cpp +0 -93
  469. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.h +0 -30
  470. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.cpp +0 -167
  471. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.h +0 -35
  472. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.cpp +0 -95
  473. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.h +0 -30
  474. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.cpp +0 -458
  475. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.h +0 -61
  476. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.cpp +0 -526
  477. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.h +0 -56
  478. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.cpp +0 -1298
  479. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.h +0 -89
  480. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.cpp +0 -205
  481. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.h +0 -24
  482. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.cpp +0 -57
  483. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.h +0 -47
  484. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.cpp +0 -275
  485. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.h +0 -41
  486. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.cpp +0 -796
  487. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.h +0 -63
  488. package/node_modules/node-datachannel/src/index.ts +0 -9
  489. package/node_modules/node-datachannel/src/lib/datachannel-stream.ts +0 -100
  490. package/node_modules/node-datachannel/src/lib/index.ts +0 -290
  491. package/node_modules/node-datachannel/src/lib/node-datachannel.ts +0 -84
  492. package/node_modules/node-datachannel/src/lib/types.ts +0 -169
  493. package/node_modules/node-datachannel/src/lib/websocket-server.ts +0 -37
  494. package/node_modules/node-datachannel/src/lib/websocket.ts +0 -26
  495. package/node_modules/node-datachannel/src/polyfill/Events.ts +0 -82
  496. package/node_modules/node-datachannel/src/polyfill/Exception.ts +0 -37
  497. package/node_modules/node-datachannel/src/polyfill/README.md +0 -41
  498. package/node_modules/node-datachannel/src/polyfill/RTCCertificate.ts +0 -21
  499. package/node_modules/node-datachannel/src/polyfill/RTCDataChannel.ts +0 -225
  500. package/node_modules/node-datachannel/src/polyfill/RTCDtlsTransport.ts +0 -46
  501. package/node_modules/node-datachannel/src/polyfill/RTCError.ts +0 -78
  502. package/node_modules/node-datachannel/src/polyfill/RTCIceCandidate.ts +0 -128
  503. package/node_modules/node-datachannel/src/polyfill/RTCIceTransport.ts +0 -90
  504. package/node_modules/node-datachannel/src/polyfill/RTCPeerConnection.ts +0 -527
  505. package/node_modules/node-datachannel/src/polyfill/RTCSctpTransport.ts +0 -51
  506. package/node_modules/node-datachannel/src/polyfill/RTCSessionDescription.ts +0 -41
  507. package/node_modules/node-datachannel/src/polyfill/index.ts +0 -38
  508. package/node_modules/node-datachannel/tsconfig.json +0 -21
  509. package/node_modules/p-limit/index.d.ts +0 -38
  510. package/node_modules/p-limit/index.js +0 -57
  511. package/node_modules/p-limit/license +0 -9
  512. package/node_modules/p-limit/package.json +0 -52
  513. package/node_modules/p-limit/readme.md +0 -101
  514. package/node_modules/p-locate/index.d.ts +0 -64
  515. package/node_modules/p-locate/index.js +0 -52
  516. package/node_modules/p-locate/license +0 -9
  517. package/node_modules/p-locate/package.json +0 -53
  518. package/node_modules/p-locate/readme.md +0 -90
  519. package/node_modules/p-try/index.d.ts +0 -39
  520. package/node_modules/p-try/index.js +0 -9
  521. package/node_modules/p-try/license +0 -9
  522. package/node_modules/p-try/package.json +0 -42
  523. package/node_modules/p-try/readme.md +0 -58
  524. package/node_modules/path-exists/index.d.ts +0 -28
  525. package/node_modules/path-exists/index.js +0 -23
  526. package/node_modules/path-exists/license +0 -9
  527. package/node_modules/path-exists/package.json +0 -39
  528. package/node_modules/path-exists/readme.md +0 -52
  529. package/node_modules/pngjs/.eslintignore +0 -2
  530. package/node_modules/pngjs/.eslintrc.json +0 -19
  531. package/node_modules/pngjs/.prettierignore +0 -3
  532. package/node_modules/pngjs/LICENSE +0 -20
  533. package/node_modules/pngjs/README.md +0 -429
  534. package/node_modules/pngjs/browser.js +0 -16096
  535. package/node_modules/pngjs/coverage/lcov-report/base.css +0 -354
  536. package/node_modules/pngjs/coverage/lcov-report/bitmapper.js.html +0 -881
  537. package/node_modules/pngjs/coverage/lcov-report/bitpacker.js.html +0 -554
  538. package/node_modules/pngjs/coverage/lcov-report/block-navigation.js +0 -77
  539. package/node_modules/pngjs/coverage/lcov-report/chunkstream.js.html +0 -647
  540. package/node_modules/pngjs/coverage/lcov-report/constants.js.html +0 -176
  541. package/node_modules/pngjs/coverage/lcov-report/crc.js.html +0 -200
  542. package/node_modules/pngjs/coverage/lcov-report/favicon.png +0 -0
  543. package/node_modules/pngjs/coverage/lcov-report/filter-pack.js.html +0 -593
  544. package/node_modules/pngjs/coverage/lcov-report/filter-parse-async.js.html +0 -152
  545. package/node_modules/pngjs/coverage/lcov-report/filter-parse-sync.js.html +0 -143
  546. package/node_modules/pngjs/coverage/lcov-report/filter-parse.js.html +0 -611
  547. package/node_modules/pngjs/coverage/lcov-report/format-normaliser.js.html +0 -359
  548. package/node_modules/pngjs/coverage/lcov-report/index.html +0 -426
  549. package/node_modules/pngjs/coverage/lcov-report/interlace.js.html +0 -365
  550. package/node_modules/pngjs/coverage/lcov-report/packer-async.js.html +0 -230
  551. package/node_modules/pngjs/coverage/lcov-report/packer-sync.js.html +0 -248
  552. package/node_modules/pngjs/coverage/lcov-report/packer.js.html +0 -467
  553. package/node_modules/pngjs/coverage/lcov-report/paeth-predictor.js.html +0 -128
  554. package/node_modules/pngjs/coverage/lcov-report/parser-async.js.html +0 -575
  555. package/node_modules/pngjs/coverage/lcov-report/parser-sync.js.html +0 -404
  556. package/node_modules/pngjs/coverage/lcov-report/parser.js.html +0 -950
  557. package/node_modules/pngjs/coverage/lcov-report/png-sync.js.html +0 -116
  558. package/node_modules/pngjs/coverage/lcov-report/png.js.html +0 -662
  559. package/node_modules/pngjs/coverage/lcov-report/prettify.css +0 -101
  560. package/node_modules/pngjs/coverage/lcov-report/prettify.js +0 -1007
  561. package/node_modules/pngjs/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  562. package/node_modules/pngjs/coverage/lcov-report/sorter.js +0 -169
  563. package/node_modules/pngjs/coverage/lcov-report/sync-inflate.js.html +0 -584
  564. package/node_modules/pngjs/coverage/lcov-report/sync-reader.js.html +0 -215
  565. package/node_modules/pngjs/coverage/lcov.info +0 -2177
  566. package/node_modules/pngjs/lib/bitmapper.js +0 -267
  567. package/node_modules/pngjs/lib/bitpacker.js +0 -158
  568. package/node_modules/pngjs/lib/chunkstream.js +0 -189
  569. package/node_modules/pngjs/lib/constants.js +0 -32
  570. package/node_modules/pngjs/lib/crc.js +0 -40
  571. package/node_modules/pngjs/lib/filter-pack.js +0 -171
  572. package/node_modules/pngjs/lib/filter-parse-async.js +0 -24
  573. package/node_modules/pngjs/lib/filter-parse-sync.js +0 -21
  574. package/node_modules/pngjs/lib/filter-parse.js +0 -177
  575. package/node_modules/pngjs/lib/format-normaliser.js +0 -93
  576. package/node_modules/pngjs/lib/interlace.js +0 -95
  577. package/node_modules/pngjs/lib/packer-async.js +0 -50
  578. package/node_modules/pngjs/lib/packer-sync.js +0 -56
  579. package/node_modules/pngjs/lib/packer.js +0 -129
  580. package/node_modules/pngjs/lib/paeth-predictor.js +0 -16
  581. package/node_modules/pngjs/lib/parser-async.js +0 -165
  582. package/node_modules/pngjs/lib/parser-sync.js +0 -108
  583. package/node_modules/pngjs/lib/parser.js +0 -290
  584. package/node_modules/pngjs/lib/png-sync.js +0 -12
  585. package/node_modules/pngjs/lib/png.js +0 -194
  586. package/node_modules/pngjs/lib/sync-inflate.js +0 -168
  587. package/node_modules/pngjs/lib/sync-reader.js +0 -45
  588. package/node_modules/pngjs/package.json +0 -73
  589. package/node_modules/qrcode/README.md +0 -770
  590. package/node_modules/qrcode/bin/qrcode +0 -159
  591. package/node_modules/qrcode/helper/to-sjis-browser.js +0 -2
  592. package/node_modules/qrcode/helper/to-sjis.js +0 -105
  593. package/node_modules/qrcode/lib/browser.js +0 -76
  594. package/node_modules/qrcode/lib/can-promise.js +0 -7
  595. package/node_modules/qrcode/lib/core/alignment-pattern.js +0 -83
  596. package/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -59
  597. package/node_modules/qrcode/lib/core/bit-buffer.js +0 -37
  598. package/node_modules/qrcode/lib/core/bit-matrix.js +0 -65
  599. package/node_modules/qrcode/lib/core/byte-data.js +0 -30
  600. package/node_modules/qrcode/lib/core/error-correction-code.js +0 -135
  601. package/node_modules/qrcode/lib/core/error-correction-level.js +0 -50
  602. package/node_modules/qrcode/lib/core/finder-pattern.js +0 -22
  603. package/node_modules/qrcode/lib/core/format-info.js +0 -29
  604. package/node_modules/qrcode/lib/core/galois-field.js +0 -69
  605. package/node_modules/qrcode/lib/core/kanji-data.js +0 -54
  606. package/node_modules/qrcode/lib/core/mask-pattern.js +0 -234
  607. package/node_modules/qrcode/lib/core/mode.js +0 -167
  608. package/node_modules/qrcode/lib/core/numeric-data.js +0 -43
  609. package/node_modules/qrcode/lib/core/polynomial.js +0 -62
  610. package/node_modules/qrcode/lib/core/qrcode.js +0 -495
  611. package/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -56
  612. package/node_modules/qrcode/lib/core/regex.js +0 -31
  613. package/node_modules/qrcode/lib/core/segments.js +0 -330
  614. package/node_modules/qrcode/lib/core/utils.js +0 -63
  615. package/node_modules/qrcode/lib/core/version-check.js +0 -9
  616. package/node_modules/qrcode/lib/core/version.js +0 -163
  617. package/node_modules/qrcode/lib/index.js +0 -12
  618. package/node_modules/qrcode/lib/renderer/canvas.js +0 -63
  619. package/node_modules/qrcode/lib/renderer/png.js +0 -78
  620. package/node_modules/qrcode/lib/renderer/svg-tag.js +0 -81
  621. package/node_modules/qrcode/lib/renderer/svg.js +0 -19
  622. package/node_modules/qrcode/lib/renderer/terminal/terminal-small.js +0 -85
  623. package/node_modules/qrcode/lib/renderer/terminal/terminal.js +0 -49
  624. package/node_modules/qrcode/lib/renderer/terminal.js +0 -9
  625. package/node_modules/qrcode/lib/renderer/utf8.js +0 -71
  626. package/node_modules/qrcode/lib/renderer/utils.js +0 -99
  627. package/node_modules/qrcode/lib/server.js +0 -138
  628. package/node_modules/qrcode/license +0 -10
  629. package/node_modules/qrcode/package.json +0 -77
  630. package/node_modules/require-directory/.jshintrc +0 -67
  631. package/node_modules/require-directory/.npmignore +0 -1
  632. package/node_modules/require-directory/.travis.yml +0 -3
  633. package/node_modules/require-directory/LICENSE +0 -22
  634. package/node_modules/require-directory/README.markdown +0 -184
  635. package/node_modules/require-directory/index.js +0 -86
  636. package/node_modules/require-directory/package.json +0 -40
  637. package/node_modules/require-main-filename/CHANGELOG.md +0 -26
  638. package/node_modules/require-main-filename/LICENSE.txt +0 -14
  639. package/node_modules/require-main-filename/README.md +0 -26
  640. package/node_modules/require-main-filename/index.js +0 -18
  641. package/node_modules/require-main-filename/package.json +0 -35
  642. package/node_modules/semver/LICENSE +0 -15
  643. package/node_modules/semver/README.md +0 -680
  644. package/node_modules/semver/bin/semver.js +0 -195
  645. package/node_modules/semver/classes/comparator.js +0 -143
  646. package/node_modules/semver/classes/index.js +0 -7
  647. package/node_modules/semver/classes/range.js +0 -577
  648. package/node_modules/semver/classes/semver.js +0 -350
  649. package/node_modules/semver/functions/clean.js +0 -8
  650. package/node_modules/semver/functions/cmp.js +0 -54
  651. package/node_modules/semver/functions/coerce.js +0 -62
  652. package/node_modules/semver/functions/compare-build.js +0 -9
  653. package/node_modules/semver/functions/compare-loose.js +0 -5
  654. package/node_modules/semver/functions/compare.js +0 -7
  655. package/node_modules/semver/functions/diff.js +0 -60
  656. package/node_modules/semver/functions/eq.js +0 -5
  657. package/node_modules/semver/functions/gt.js +0 -5
  658. package/node_modules/semver/functions/gte.js +0 -5
  659. package/node_modules/semver/functions/inc.js +0 -21
  660. package/node_modules/semver/functions/lt.js +0 -5
  661. package/node_modules/semver/functions/lte.js +0 -5
  662. package/node_modules/semver/functions/major.js +0 -5
  663. package/node_modules/semver/functions/minor.js +0 -5
  664. package/node_modules/semver/functions/neq.js +0 -5
  665. package/node_modules/semver/functions/parse.js +0 -18
  666. package/node_modules/semver/functions/patch.js +0 -5
  667. package/node_modules/semver/functions/prerelease.js +0 -8
  668. package/node_modules/semver/functions/rcompare.js +0 -5
  669. package/node_modules/semver/functions/rsort.js +0 -5
  670. package/node_modules/semver/functions/satisfies.js +0 -12
  671. package/node_modules/semver/functions/sort.js +0 -5
  672. package/node_modules/semver/functions/truncate.js +0 -48
  673. package/node_modules/semver/functions/valid.js +0 -8
  674. package/node_modules/semver/index.js +0 -93
  675. package/node_modules/semver/internal/constants.js +0 -37
  676. package/node_modules/semver/internal/debug.js +0 -11
  677. package/node_modules/semver/internal/identifiers.js +0 -29
  678. package/node_modules/semver/internal/lrucache.js +0 -42
  679. package/node_modules/semver/internal/parse-options.js +0 -17
  680. package/node_modules/semver/internal/re.js +0 -223
  681. package/node_modules/semver/package.json +0 -78
  682. package/node_modules/semver/preload.js +0 -4
  683. package/node_modules/semver/range.bnf +0 -17
  684. package/node_modules/semver/ranges/gtr.js +0 -6
  685. package/node_modules/semver/ranges/intersects.js +0 -9
  686. package/node_modules/semver/ranges/ltr.js +0 -6
  687. package/node_modules/semver/ranges/max-satisfying.js +0 -27
  688. package/node_modules/semver/ranges/min-satisfying.js +0 -26
  689. package/node_modules/semver/ranges/min-version.js +0 -63
  690. package/node_modules/semver/ranges/outside.js +0 -82
  691. package/node_modules/semver/ranges/simplify.js +0 -49
  692. package/node_modules/semver/ranges/subset.js +0 -249
  693. package/node_modules/semver/ranges/to-comparators.js +0 -10
  694. package/node_modules/semver/ranges/valid.js +0 -13
  695. package/node_modules/set-blocking/CHANGELOG.md +0 -26
  696. package/node_modules/set-blocking/LICENSE.txt +0 -14
  697. package/node_modules/set-blocking/README.md +0 -31
  698. package/node_modules/set-blocking/index.js +0 -7
  699. package/node_modules/set-blocking/package.json +0 -42
  700. package/node_modules/sharp/LICENSE +0 -191
  701. package/node_modules/sharp/README.md +0 -112
  702. package/node_modules/sharp/dist/channel.cjs +0 -177
  703. package/node_modules/sharp/dist/channel.mjs +0 -177
  704. package/node_modules/sharp/dist/colour.cjs +0 -199
  705. package/node_modules/sharp/dist/colour.mjs +0 -199
  706. package/node_modules/sharp/dist/composite.cjs +0 -213
  707. package/node_modules/sharp/dist/composite.mjs +0 -213
  708. package/node_modules/sharp/dist/constructor.cjs +0 -511
  709. package/node_modules/sharp/dist/constructor.mjs +0 -511
  710. package/node_modules/sharp/dist/index.cjs +0 -25
  711. package/node_modules/sharp/dist/index.d.cts +0 -1999
  712. package/node_modules/sharp/dist/index.d.mts +0 -2046
  713. package/node_modules/sharp/dist/index.mjs +0 -25
  714. package/node_modules/sharp/dist/input.cjs +0 -819
  715. package/node_modules/sharp/dist/input.mjs +0 -819
  716. package/node_modules/sharp/dist/is.cjs +0 -143
  717. package/node_modules/sharp/dist/is.mjs +0 -143
  718. package/node_modules/sharp/dist/libvips.cjs +0 -212
  719. package/node_modules/sharp/dist/libvips.mjs +0 -212
  720. package/node_modules/sharp/dist/operation.cjs +0 -1002
  721. package/node_modules/sharp/dist/operation.mjs +0 -1002
  722. package/node_modules/sharp/dist/output.cjs +0 -1785
  723. package/node_modules/sharp/dist/output.mjs +0 -1785
  724. package/node_modules/sharp/dist/resize.cjs +0 -617
  725. package/node_modules/sharp/dist/resize.mjs +0 -617
  726. package/node_modules/sharp/dist/sharp.cjs +0 -174
  727. package/node_modules/sharp/dist/sharp.mjs +0 -174
  728. package/node_modules/sharp/dist/utility.cjs +0 -301
  729. package/node_modules/sharp/dist/utility.mjs +0 -301
  730. package/node_modules/sharp/install/build.js +0 -38
  731. package/node_modules/sharp/lib/index.d.ts +0 -1999
  732. package/node_modules/sharp/package.json +0 -227
  733. package/node_modules/sharp/src/binding.gyp +0 -303
  734. package/node_modules/sharp/src/common.cc +0 -1186
  735. package/node_modules/sharp/src/common.h +0 -421
  736. package/node_modules/sharp/src/metadata.cc +0 -404
  737. package/node_modules/sharp/src/metadata.h +0 -95
  738. package/node_modules/sharp/src/operations.cc +0 -516
  739. package/node_modules/sharp/src/operations.h +0 -137
  740. package/node_modules/sharp/src/pipeline.cc +0 -1948
  741. package/node_modules/sharp/src/pipeline.h +0 -422
  742. package/node_modules/sharp/src/sharp.cc +0 -43
  743. package/node_modules/sharp/src/stats.cc +0 -186
  744. package/node_modules/sharp/src/stats.h +0 -62
  745. package/node_modules/sharp/src/utilities.cc +0 -289
  746. package/node_modules/sharp/src/utilities.h +0 -22
  747. package/node_modules/string-width/index.d.ts +0 -29
  748. package/node_modules/string-width/index.js +0 -47
  749. package/node_modules/string-width/license +0 -9
  750. package/node_modules/string-width/package.json +0 -56
  751. package/node_modules/string-width/readme.md +0 -50
  752. package/node_modules/strip-ansi/index.d.ts +0 -17
  753. package/node_modules/strip-ansi/index.js +0 -4
  754. package/node_modules/strip-ansi/license +0 -9
  755. package/node_modules/strip-ansi/package.json +0 -54
  756. package/node_modules/strip-ansi/readme.md +0 -46
  757. package/node_modules/which-module/LICENSE +0 -13
  758. package/node_modules/which-module/README.md +0 -58
  759. package/node_modules/which-module/index.js +0 -9
  760. package/node_modules/which-module/package.json +0 -41
  761. package/node_modules/wrap-ansi/index.js +0 -186
  762. package/node_modules/wrap-ansi/license +0 -9
  763. package/node_modules/wrap-ansi/package.json +0 -61
  764. package/node_modules/wrap-ansi/readme.md +0 -97
  765. package/node_modules/ws/LICENSE +0 -20
  766. package/node_modules/ws/README.md +0 -548
  767. package/node_modules/ws/browser.js +0 -8
  768. package/node_modules/ws/index.js +0 -22
  769. package/node_modules/ws/lib/buffer-util.js +0 -131
  770. package/node_modules/ws/lib/constants.js +0 -19
  771. package/node_modules/ws/lib/event-target.js +0 -292
  772. package/node_modules/ws/lib/extension.js +0 -203
  773. package/node_modules/ws/lib/limiter.js +0 -55
  774. package/node_modules/ws/lib/permessage-deflate.js +0 -530
  775. package/node_modules/ws/lib/receiver.js +0 -743
  776. package/node_modules/ws/lib/sender.js +0 -607
  777. package/node_modules/ws/lib/stream.js +0 -161
  778. package/node_modules/ws/lib/subprotocol.js +0 -62
  779. package/node_modules/ws/lib/validation.js +0 -152
  780. package/node_modules/ws/lib/websocket-server.js +0 -562
  781. package/node_modules/ws/lib/websocket.js +0 -1407
  782. package/node_modules/ws/package.json +0 -74
  783. package/node_modules/ws/wrapper.mjs +0 -21
  784. package/node_modules/y18n/CHANGELOG.md +0 -35
  785. package/node_modules/y18n/LICENSE +0 -13
  786. package/node_modules/y18n/README.md +0 -109
  787. package/node_modules/y18n/index.js +0 -188
  788. package/node_modules/y18n/package.json +0 -39
  789. package/node_modules/yargs/CHANGELOG.md +0 -420
  790. package/node_modules/yargs/LICENSE +0 -21
  791. package/node_modules/yargs/README.md +0 -140
  792. package/node_modules/yargs/build/lib/apply-extends.d.ts +0 -2
  793. package/node_modules/yargs/build/lib/apply-extends.js +0 -65
  794. package/node_modules/yargs/build/lib/argsert.d.ts +0 -2
  795. package/node_modules/yargs/build/lib/argsert.js +0 -65
  796. package/node_modules/yargs/build/lib/command.d.ts +0 -64
  797. package/node_modules/yargs/build/lib/command.js +0 -416
  798. package/node_modules/yargs/build/lib/common-types.d.ts +0 -36
  799. package/node_modules/yargs/build/lib/common-types.js +0 -25
  800. package/node_modules/yargs/build/lib/completion-templates.d.ts +0 -2
  801. package/node_modules/yargs/build/lib/completion-templates.js +0 -50
  802. package/node_modules/yargs/build/lib/completion.d.ts +0 -21
  803. package/node_modules/yargs/build/lib/completion.js +0 -135
  804. package/node_modules/yargs/build/lib/is-promise.d.ts +0 -1
  805. package/node_modules/yargs/build/lib/is-promise.js +0 -9
  806. package/node_modules/yargs/build/lib/levenshtein.d.ts +0 -1
  807. package/node_modules/yargs/build/lib/levenshtein.js +0 -58
  808. package/node_modules/yargs/build/lib/middleware.d.ts +0 -10
  809. package/node_modules/yargs/build/lib/middleware.js +0 -57
  810. package/node_modules/yargs/build/lib/obj-filter.d.ts +0 -1
  811. package/node_modules/yargs/build/lib/obj-filter.js +0 -14
  812. package/node_modules/yargs/build/lib/parse-command.d.ts +0 -11
  813. package/node_modules/yargs/build/lib/parse-command.js +0 -36
  814. package/node_modules/yargs/build/lib/process-argv.d.ts +0 -2
  815. package/node_modules/yargs/build/lib/process-argv.js +0 -31
  816. package/node_modules/yargs/build/lib/usage.d.ts +0 -49
  817. package/node_modules/yargs/build/lib/usage.js +0 -540
  818. package/node_modules/yargs/build/lib/validation.d.ts +0 -34
  819. package/node_modules/yargs/build/lib/validation.js +0 -330
  820. package/node_modules/yargs/build/lib/yargs.d.ts +0 -274
  821. package/node_modules/yargs/build/lib/yargs.js +0 -1190
  822. package/node_modules/yargs/build/lib/yerror.d.ts +0 -4
  823. package/node_modules/yargs/build/lib/yerror.js +0 -11
  824. package/node_modules/yargs/index.js +0 -40
  825. package/node_modules/yargs/locales/be.json +0 -46
  826. package/node_modules/yargs/locales/de.json +0 -46
  827. package/node_modules/yargs/locales/en.json +0 -51
  828. package/node_modules/yargs/locales/es.json +0 -46
  829. package/node_modules/yargs/locales/fi.json +0 -49
  830. package/node_modules/yargs/locales/fr.json +0 -53
  831. package/node_modules/yargs/locales/hi.json +0 -49
  832. package/node_modules/yargs/locales/hu.json +0 -46
  833. package/node_modules/yargs/locales/id.json +0 -50
  834. package/node_modules/yargs/locales/it.json +0 -46
  835. package/node_modules/yargs/locales/ja.json +0 -51
  836. package/node_modules/yargs/locales/ko.json +0 -49
  837. package/node_modules/yargs/locales/nb.json +0 -44
  838. package/node_modules/yargs/locales/nl.json +0 -49
  839. package/node_modules/yargs/locales/nn.json +0 -44
  840. package/node_modules/yargs/locales/pirate.json +0 -13
  841. package/node_modules/yargs/locales/pl.json +0 -49
  842. package/node_modules/yargs/locales/pt.json +0 -45
  843. package/node_modules/yargs/locales/pt_BR.json +0 -48
  844. package/node_modules/yargs/locales/ru.json +0 -46
  845. package/node_modules/yargs/locales/th.json +0 -46
  846. package/node_modules/yargs/locales/tr.json +0 -48
  847. package/node_modules/yargs/locales/zh_CN.json +0 -48
  848. package/node_modules/yargs/locales/zh_TW.json +0 -47
  849. package/node_modules/yargs/package.json +0 -92
  850. package/node_modules/yargs/yargs.js +0 -14
  851. package/node_modules/yargs-parser/CHANGELOG.md +0 -601
  852. package/node_modules/yargs-parser/LICENSE.txt +0 -14
  853. package/node_modules/yargs-parser/README.md +0 -449
  854. package/node_modules/yargs-parser/index.js +0 -1032
  855. package/node_modules/yargs-parser/lib/tokenize-arg-string.js +0 -40
  856. package/node_modules/yargs-parser/package.json +0 -46
@@ -0,0 +1,56 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { execFile } from 'node:child_process';
5
+ import { promisify } from 'node:util';
6
+ import { verifyProtocol } from '../codex-protocol.mjs';
7
+ import { readRecord, writeRecord } from '../../service-lifecycle.mjs';
8
+ import { installedDesktop, verifyDesktopPackage } from './desktop-installation.mjs';
9
+ import { retainRuntime, runtimeFingerprint } from './retained-runtime.mjs';
10
+ export { runtimeFingerprint, pruneRetainedDesktopRuntimes } from './retained-runtime.mjs';
11
+
12
+ const exec = promisify(execFile);
13
+ export const codeModeHostPath = executable => path.join(path.dirname(executable), 'codex-code-mode-host');
14
+ export function nativeExecutable(file, arch = process.arch) {
15
+ let descriptor;
16
+ try {
17
+ descriptor = fs.openSync(file, 'r');
18
+ const bytes = Buffer.alloc(20);
19
+ if (fs.readSync(descriptor, bytes, 0, 20, 0) !== 20) return false;
20
+ return bytes.subarray(0, 4).equals(Buffer.from([127, 69, 76, 70])) && bytes[4] === 2 && bytes[5] === 1
21
+ && bytes.readUInt16LE(18) === ({ x64: 62, arm64: 183 }[arch]);
22
+ } catch (error) { if (error.code === 'ENOENT') return false; throw error; }
23
+ finally { if (descriptor !== undefined) fs.closeSync(descriptor); }
24
+ }
25
+ export function runtimeFilesAvailable(executable) {
26
+ return nativeExecutable(executable) && nativeExecutable(codeModeHostPath(executable))
27
+ && nativeExecutable(path.join(path.dirname(executable), 'rg'));
28
+ }
29
+ export function discoverCodex(environment = process.env) {
30
+ const desktop = installedDesktop(environment);
31
+ if (!desktop) return [];
32
+ const executable = path.join(desktop.desktop, 'resources/codex');
33
+ if (environment.CODE_RELAX_CODEX_PATH && path.resolve(environment.CODE_RELAX_CODEX_PATH) !== executable)
34
+ throw new Error('Linux 工作站需要官方 ChatGPT 桌面版内核,CODE_RELAX_CODEX_PATH 与桌面内核不一致。');
35
+ return nativeExecutable(executable) ? [{ executable, source: 'desktop', desktop: desktop.desktop }] : [];
36
+ }
37
+ export async function resolveCodexRuntime(stateRoot, { refresh = false, environment = process.env } = {}) {
38
+ fs.mkdirSync(stateRoot, { recursive: true, mode: 0o700 });
39
+ const recordFile = path.join(stateRoot, 'codex-runtime.json'), saved = readRecord(recordFile);
40
+ const codexHome = path.resolve(environment.CODEX_HOME?.trim() || saved?.codexHome || path.join(os.homedir(), '.codex'));
41
+ if (!refresh && saved?.source === 'desktop' && saved.executable && codexHome === saved.codexHome
42
+ && (!environment.CODE_RELAX_CODEX_PATH || environment.CODE_RELAX_CODEX_PATH === saved.sourceExecutable)
43
+ && runtimeFilesAvailable(saved.executable) && saved.fingerprint === runtimeFingerprint(saved.executable)) return saved;
44
+ const [candidate] = discoverCodex(environment);
45
+ if (!candidate) throw new Error('请先安装并登录官方 Linux ChatGPT 桌面版;独立 CLI 不能代替点点所需的桌面接入。');
46
+ verifyDesktopPackage(candidate.desktop);
47
+ if (!runtimeFilesAvailable(candidate.executable)) throw new Error('Linux 桌面内核缺少当前架构的配套组件。');
48
+ const { stdout } = await exec(candidate.executable, ['--version'], { timeout: 10000, env: { ...environment, CODEX_HOME: codexHome } });
49
+ const version = /^codex-cli (\d+\.\d+\.\d+(?:-[\w.]+)?)/m.exec(stdout)?.[1];
50
+ if (!version) throw new Error('无法识别 Linux 桌面内核版本。');
51
+ const retained = await retainRuntime(candidate.executable, stateRoot, version);
52
+ await verifyProtocol(retained.executable, stateRoot);
53
+ const result = { ...candidate, ...retained, version, codexHome, fingerprint: runtimeFingerprint(retained.executable) };
54
+ writeRecord(recordFile, result);
55
+ return result;
56
+ }
@@ -0,0 +1,87 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { startBackground } from '../../background-process.mjs';
4
+ import { systemRequest } from './system.mjs';
5
+ import { assertPlainPath } from '../../skill-install.mjs';
6
+ import { setTimeout as delay } from 'node:timers/promises';
7
+ import { runtimePaths } from '../runtime-paths.mjs';
8
+ import { readRecord } from '../../service-lifecycle.mjs';
9
+ export { residentStartup } from './resident-startup.mjs';
10
+
11
+ import { managedEndpointUrl, readManagedEndpoint } from '../../managed-endpoint.mjs';
12
+ export function createDesktopHost({ request = systemRequest, wait = delay, now = Date.now, timeout = 10000,
13
+ stateRoot = () => runtimePaths().stateRoot, fingerprint = file => {
14
+ const stat = fs.statSync(path.join(file, 'resources/linux-package-metadata.json'));
15
+ return `${stat.ino}:${stat.size}:${stat.mtimeMs}:${stat.ctimeMs}`;
16
+ } } = {}) {
17
+ return {
18
+ desktopIntegration: true,
19
+ async inspect() {
20
+ const url = readManagedEndpoint(stateRoot());
21
+ const info = await request({ operation: 'desktop-info', url });
22
+ return { ...info, managedUrl: url, desktopIdentity: info.desktop ? `${info.desktop}:${info.version}:${info.build}:${fingerprint(info.desktop)}` : null };
23
+ },
24
+ process: pid => request({ operation: 'process', pid }),
25
+ ownsListener: (expected, url) => request({ operation: 'owns-listener', expected, url }),
26
+ start: startBackground,
27
+ async stop(pid, expected) {
28
+ if (!expected || expected.pid !== pid) throw new Error('停止内核前缺少进程身份,未结束任何进程。');
29
+ return request({ operation: 'stop', expected });
30
+ },
31
+ async sharedServiceUrl() {
32
+ const info = await this.inspect();
33
+ return info.connectedToManagedServer ? info.managedUrl : '';
34
+ },
35
+ async startDesktop(bundlePath, environment) {
36
+ const managedUrl = managedEndpointUrl(environment.CODEX_APP_SERVER_WS_URL);
37
+ if (!managedUrl || managedUrl !== readManagedEndpoint(stateRoot())) throw new Error('Desktop 内核地址与工作站不一致。');
38
+ const runtime = readRecord(path.join(stateRoot(), 'codex-runtime.json'));
39
+ const codexHome = environment.CODEX_HOME || runtime?.codexHome;
40
+ if (!codexHome || !path.isAbsolute(codexHome)) throw new Error('缺少已选内核的 CODEX_HOME,请先运行 relax setup。');
41
+ const info = await this.inspect();
42
+ if (info.running) throw new Error('Desktop 仍在运行,未创建第二个实例。');
43
+ if (info.desktop !== bundlePath) throw new Error('Codex Desktop 安装位置已变化,请重新检查。');
44
+ return request({ operation: 'desktop-start', bundlePath,
45
+ environment: { CODEX_HOME: codexHome, CODEX_APP_SERVER_WS_URL: managedUrl } });
46
+ },
47
+ async closeDesktop(bundlePath) {
48
+ const info = await this.inspect();
49
+ if (!info.running) return;
50
+ if (info.desktop !== bundlePath || !info.process) throw new Error('Desktop 进程身份已变化,未请求退出。');
51
+ await request({ operation: 'desktop-close', bundlePath, expected: info.process });
52
+ const deadline = now() + timeout;
53
+ while ((await this.inspect()).running) {
54
+ if (now() >= deadline) throw new Error('Desktop 尚未正常退出,请在 Linux 上处理未保存内容后重试;未强制结束进程。');
55
+ await wait(200);
56
+ }
57
+ },
58
+ async desktopReady() {
59
+ const info = await this.inspect();
60
+ return info.running && info.finishedLaunching && info.connectedToManagedServer;
61
+ },
62
+ async prepareKernelRestart() {
63
+ const info = await this.inspect();
64
+ if (!info.running || !info.connectedToManagedServer) return null;
65
+ await this.closeDesktop(info.desktop);
66
+ return info.desktop;
67
+ },
68
+ async resumeAfterKernelRestart(bundlePath, environment) {
69
+ if (!bundlePath) return;
70
+ await this.startDesktop(bundlePath, environment);
71
+ const deadline = now() + 30000;
72
+ while (!await this.desktopReady()) {
73
+ if (now() >= deadline) throw new Error('内核已就绪,但 Linux Desktop 尚未重新接入。');
74
+ await wait(500);
75
+ }
76
+ },
77
+ ready: async url => { try { return (await fetch(url, { signal: AbortSignal.timeout(1000) })).ok; } catch { return false; } },
78
+ };
79
+ }
80
+ export const desktopHost = createDesktopHost();
81
+ export async function resolveStateRoot(stateRoot) {
82
+ if (process.getuid() === 0) throw new Error('请以普通 Linux 桌面用户安装 Code Relax,不使用 sudo。');
83
+ assertPlainPath(stateRoot);
84
+ fs.mkdirSync(stateRoot, { recursive: true, mode: 0o700 });
85
+ return fs.realpathSync(stateRoot);
86
+ }
87
+ export async function removeDesktopShortcut() { return { removed: false, reason: 'not-used-on-linux' }; }
@@ -0,0 +1,36 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { execFileSync } from 'node:child_process';
4
+
5
+ // Official Linux 26.1007.71326 deb: /usr/bin/chatgpt -> codex-launcher,
6
+ // ChatGPT and resources/{codex,codex-code-mode-host,rg} share this root.
7
+ export function installedDesktop(environment = process.env) {
8
+ const roots = ['/usr/lib/chatgpt', '/opt/chatgpt', '/opt/ChatGPT'];
9
+ for (const directory of String(environment.PATH || '').split(':').filter(value => value.startsWith('/'))) {
10
+ try { roots.push(path.dirname(fs.realpathSync(path.join(directory, 'chatgpt')))); }
11
+ catch (error) { if (error.code !== 'ENOENT') throw error; }
12
+ }
13
+ for (const root of new Set(roots)) {
14
+ const metadataFile = path.join(root, 'resources/linux-package-metadata.json');
15
+ if (!fs.existsSync(metadataFile)) continue;
16
+ const metadata = JSON.parse(fs.readFileSync(metadataFile, 'utf8'));
17
+ if (metadata.codexAppBrand !== 'chatgpt' || metadata.codexBuildFlavor !== 'prod' || !metadata.version) continue;
18
+ const executable = path.join(root, 'ChatGPT');
19
+ if (!fs.existsSync(executable)) continue;
20
+ return { desktop: fs.realpathSync(root), executable: fs.realpathSync(executable), version: metadata.version, build: metadata.version };
21
+ }
22
+ return null;
23
+ }
24
+ export function verifyDesktopPackage(root) {
25
+ const file = path.join(root, 'resources/codex');
26
+ // Trust the machine's installed package database; do not treat a JSON brand
27
+ // marker as an operating-system signature or accept an unrelated CLI shim.
28
+ if (fs.existsSync('/usr/bin/dpkg-query')) {
29
+ const owner = execFileSync('/usr/bin/dpkg-query', ['-S', file], { encoding: 'utf8' }).trim();
30
+ if (!owner.split('\n').some(line => line === `chatgpt: ${file}`)) throw new Error('内核不属于已安装的官方 chatgpt 软件包。');
31
+ } else if (fs.existsSync('/usr/bin/rpm')) {
32
+ if (execFileSync('/usr/bin/rpm', ['-qf', '--qf', '%{NAME}', file], { encoding: 'utf8' }).trim() !== 'chatgpt') throw new Error('内核软件包身份不匹配。');
33
+ } else if (fs.existsSync('/usr/bin/pacman')) {
34
+ if (!/^chatgpt(?:-bin)?$/.test(execFileSync('/usr/bin/pacman', ['-Qoq', file], { encoding: 'utf8' }).trim())) throw new Error('内核软件包身份不匹配。');
35
+ } else throw new Error('无法核对 Linux 桌面版软件包,请通过官方软件包安装 ChatGPT。');
36
+ }
@@ -0,0 +1,11 @@
1
+ import { desktopHost } from './desktop-host.mjs';
2
+ import { withDesktopProjectRegistration as register } from '../desktop-project-store.mjs';
3
+
4
+ // Verified against the Linux 26.1007.71326 local-projects/project-order store.
5
+ export async function withDesktopProjectRegistration(options, action) {
6
+ const host = options.host || desktopHost;
7
+ if (!(await host.inspect()).desktop)
8
+ return action({ register: async () => ({ status: 'not-applicable', reason: 'desktop-not-installed' }),
9
+ remove: async (_project, _operation, _save, removeNative) => { await removeNative(); return { status: 'not-applicable', reason: 'desktop-not-installed' }; } });
10
+ return register({ ...options, host }, action);
11
+ }
@@ -0,0 +1,11 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import { networkCandidates } from '../posix/network-candidates.mjs';
4
+
5
+ export async function lanNetworks() {
6
+ const hardware = fs.readdirSync('/sys/class/net').filter(name => fs.existsSync(`/sys/class/net/${name}/device`)).map(interfaceName => ({
7
+ interfaceName, networkName: interfaceName,
8
+ networkType: fs.existsSync(`/sys/class/net/${interfaceName}/wireless`) ? 'wifi' : 'ethernet',
9
+ }));
10
+ return networkCandidates(hardware, os.networkInterfaces());
11
+ }
@@ -0,0 +1,53 @@
1
+ import fs from 'node:fs';
2
+ import { managedEndpointUrl } from '../../managed-endpoint.mjs';
3
+
4
+ const gone = error => ['ENOENT', 'ESRCH'].includes(error.code);
5
+ let bootId;
6
+ export function processInfo(pid) {
7
+ if (!Number.isSafeInteger(pid) || pid <= 0) throw new Error('无效的进程 ID。');
8
+ const root = `/proc/${pid}`;
9
+ try {
10
+ if (fs.statSync(root).uid !== process.getuid()) return null;
11
+ const stat = fs.readFileSync(`${root}/stat`, 'utf8');
12
+ const fields = stat.slice(stat.lastIndexOf(')') + 2).split(' ');
13
+ if (fields[0] === 'Z') return null;
14
+ const ticks = fields[19];
15
+ bootId ??= fs.readFileSync('/proc/sys/kernel/random/boot_id', 'utf8').trim();
16
+ const created = `${bootId}:${ticks}`;
17
+ const executable = fs.readlinkSync(`${root}/exe`);
18
+ const args = fs.readFileSync(`${root}/cmdline`, 'utf8').split('\0').filter(Boolean);
19
+ const after = fs.readFileSync(`${root}/stat`, 'utf8');
20
+ if (after.slice(after.lastIndexOf(')') + 2).split(' ')[19] !== ticks) return null;
21
+ return { pid, created, executable, args, command: args.join(' ') };
22
+ } catch (error) { if (gone(error)) return null; throw error; }
23
+ }
24
+ export const sameProcess = (a, b) => !!a && !!b && a.pid === b.pid && a.created === b.created
25
+ && a.executable === b.executable && JSON.stringify(a.args) === JSON.stringify(b.args);
26
+ export function stopProcess(pid, expected) {
27
+ if (expected?.pid !== pid || !sameProcess(expected, processInfo(pid))) throw new Error('进程身份已变化,未结束进程。');
28
+ process.kill(pid, 'SIGTERM');
29
+ return { stopped: true };
30
+ }
31
+ function hasManagedSocket(pid, url, listener) {
32
+ const endpoint = managedEndpointUrl(url);
33
+ if (!endpoint) return false;
34
+ const port = Number(endpoint.slice(endpoint.lastIndexOf(':') + 1)).toString(16).toUpperCase().padStart(4, '0');
35
+ try {
36
+ const sockets = new Set(fs.readdirSync(`/proc/${pid}/fd`).flatMap(fd => {
37
+ try { return /^socket:\[(\d+)\]$/.exec(fs.readlinkSync(`/proc/${pid}/fd/${fd}`))?.slice(1) || []; }
38
+ catch (error) { if (gone(error)) return []; throw error; }
39
+ }));
40
+ return ['tcp', 'tcp6'].some(table => fs.readFileSync(`/proc/${pid}/net/${table}`, 'utf8').trim().split('\n').slice(1).some(line => {
41
+ const fields = line.trim().split(/\s+/);
42
+ return fields[3] === (listener ? '0A' : '01') && sockets.has(fields[9])
43
+ && [`0100007F:${port}`, `0000000000000000FFFF00000100007F:${port}`].includes(fields[listener ? 1 : 2]);
44
+ }));
45
+ } catch (error) { if (gone(error)) return false; throw error; }
46
+ }
47
+
48
+ export const connectedToManagedServer = (pid, url) => hasManagedSocket(pid, url, false);
49
+ export function ownsManagedListener(expected, url) {
50
+ return !!expected && sameProcess(expected, processInfo(expected.pid))
51
+ && hasManagedSocket(expected.pid, url, true)
52
+ && sameProcess(expected, processInfo(expected.pid));
53
+ }
@@ -0,0 +1,17 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+
5
+ export async function projectLocations() {
6
+ const home = os.homedir();
7
+ const config = path.isAbsolute(process.env.XDG_CONFIG_HOME || '') ? process.env.XDG_CONFIG_HOME : path.join(home, '.config');
8
+ let text = '';
9
+ try { text = fs.readFileSync(path.join(config, 'user-dirs.dirs'), 'utf8'); }
10
+ catch (error) { if (error.code !== 'ENOENT') throw error; }
11
+ const directory = (name, fallback) => {
12
+ const match = new RegExp(`^XDG_${name}_DIR="([^"\\n]+)"$`, 'm').exec(text);
13
+ const value = match?.[1].replace(/^\$HOME(?=\/|$)/, home);
14
+ return value && path.isAbsolute(value) && !value.includes('$') ? value : path.join(home, fallback);
15
+ };
16
+ return { home, downloads: directory('DOWNLOAD', 'Downloads'), defaultParent: path.join(directory('DOCUMENTS', 'Documents'), 'ChatGPT'), roots: ['/'] };
17
+ }
@@ -0,0 +1,52 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { assertPlainPath } from '../../skill-install.mjs';
5
+ import { runtimePaths } from '../runtime-paths.mjs';
6
+ import { readRecord } from '../../service-lifecycle.mjs';
7
+
8
+ // XDG autostart inherits the actual graphical session (Wayland/X11 and the
9
+ // unlocked Secret Service). No system daemon, sudo, or shell profile mutation.
10
+ const quote = value => {
11
+ if (/[\u0000-\u001f\u007f]/.test(value)) throw new Error('登录启动路径含无效控制字符。');
12
+ return `"${value.replace(/%/g, '%%').replace(/[\\"`$]/g, char => `\\${char}`).replace(/\\/g, '\\\\')}"`;
13
+ };
14
+ export function autostartEntry({ serviceRoot, nodeExecutable, environment = process.env }) {
15
+ const entry = path.join(serviceRoot, 'dist/bin/codex-remote.mjs');
16
+ const variables = {};
17
+ for (const name of ['CODEX_HOME', 'XDG_DATA_HOME', 'XDG_STATE_HOME', 'XDG_CONFIG_HOME'])
18
+ if (environment[name]) variables[name] = environment[name];
19
+ const stablePath = String(environment.PATH || '').split(':').filter(value => value.startsWith('/') && !value.endsWith('/node_modules/.bin')).join(':');
20
+ if (stablePath) variables.PATH = stablePath;
21
+ const command = [quote(nodeExecutable), quote(entry), 'start', '--json'].join(' ');
22
+ const assignments = Object.entries(variables).map(([key, value]) => quote(`${key}=${value}`));
23
+ return `[Desktop Entry]\nType=Application\nName=Code Relax\nComment=Code Relax workstation\nExec=/usr/bin/env ${[...assignments, command].join(' ')}\nTerminal=false\nX-CodeRelax-Owner=${encodeURIComponent(path.resolve(serviceRoot))}\n`;
24
+ }
25
+ export async function residentStartup(installation, action = 'status') {
26
+ if (!['status', 'enable', 'disable'].includes(action)) throw new Error('无效的登录启动操作。');
27
+ if (process.getuid() === 0) throw new Error('请以普通 Linux 桌面用户安装,不使用 sudo。');
28
+ const config = path.isAbsolute(process.env.XDG_CONFIG_HOME || '') ? process.env.XDG_CONFIG_HOME : path.join(os.homedir(), '.config');
29
+ const file = path.join(config, 'autostart/cn.walkhi.code-relax.desktop');
30
+ assertPlainPath(file);
31
+ const runtime = readRecord(path.join(runtimePaths().stateRoot, 'codex-runtime.json'));
32
+ const environment = { ...process.env, ...(runtime?.codexHome ? { CODEX_HOME: runtime.codexHome } : {}) };
33
+ const expected = autostartEntry({ ...installation, environment });
34
+ let current = '';
35
+ try { current = fs.readFileSync(file, 'utf8'); }
36
+ catch (error) { if (error.code !== 'ENOENT') throw error; }
37
+ const marker = `X-CodeRelax-Owner=${encodeURIComponent(path.resolve(installation.serviceRoot))}`;
38
+ if (current && !current.split(/\r?\n/).includes(marker)) throw new Error('同名登录启动项不属于此安装,未修改。');
39
+ const command = `${quote(installation.nodeExecutable)} ${quote(path.join(installation.serviceRoot, 'dist/bin/codex-remote.mjs'))} start --json`;
40
+ const execLine = current.split(/\r?\n/).find(line => line.startsWith('Exec=')) || '';
41
+ if (action === 'status') return { enabled: execLine.startsWith('Exec=/usr/bin/env ') && execLine.endsWith(command)
42
+ && !/^(?:Hidden=true|X-GNOME-Autostart-enabled=false)$/m.test(current), path: file, mechanism: 'XDG Autostart' };
43
+ if (action === 'disable') {
44
+ if (current) fs.unlinkSync(file);
45
+ return { enabled: false, removed: !!current, path: file };
46
+ }
47
+ fs.mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });
48
+ const temporary = `${file}.${process.pid}.tmp`;
49
+ try { fs.writeFileSync(temporary, expected, { flag: 'wx', mode: 0o600 }); fs.renameSync(temporary, file); }
50
+ finally { if (fs.existsSync(temporary)) fs.unlinkSync(temporary); }
51
+ return { enabled: true, path: file, mechanism: 'XDG Autostart', appliesAtNextLogin: true };
52
+ }
@@ -0,0 +1,76 @@
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-linux-runtime';
7
+ const manifestName = '.code-relax-runtime.json';
8
+ // Linux Desktop currently ships a flat, statically linked runtime, unlike Mac.
9
+ const names = ['codex', 'codex-code-mode-host', 'rg'];
10
+ export function runtimeFingerprint(executable) {
11
+ return JSON.stringify(names.map(name => {
12
+ const stat = fs.statSync(path.join(path.dirname(executable), name));
13
+ return [name, stat.size, stat.mtimeMs, stat.ctimeMs, stat.ino, stat.mode & 0o777];
14
+ }));
15
+ }
16
+ async function digestFiles(root) {
17
+ const files = [];
18
+ for (const name of names) {
19
+ const file = path.join(root, name), hash = createHash('sha256');
20
+ const before = fs.lstatSync(file);
21
+ if (!before.isFile()) throw new Error(`Linux 内核组件不是普通文件:${name}`);
22
+ for await (const chunk of fs.createReadStream(file)) hash.update(chunk);
23
+ const after = fs.statSync(file);
24
+ if (before.ino !== after.ino || before.size !== after.size || before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs)
25
+ throw new Error('Linux 内核更新正在替换文件,请稍后重试。');
26
+ files.push({ name, size: after.size, mode: after.mode & 0o777, sha256: hash.digest('hex') });
27
+ }
28
+ return files;
29
+ }
30
+ const treeHash = files => createHash('sha256').update(JSON.stringify(files)).digest('hex');
31
+ export async function retainRuntime(executable, stateRoot, version) {
32
+ const source = path.dirname(executable), sourceFingerprint = runtimeFingerprint(executable);
33
+ const files = await digestFiles(source), digest = treeHash(files);
34
+ if (sourceFingerprint !== runtimeFingerprint(executable)) throw new Error('Linux 内核在核对期间发生变化。');
35
+ const parent = path.join(stateRoot, 'linux-runtimes'), target = path.join(parent, digest);
36
+ const result = { executable: path.join(target, 'codex'), sourceExecutable: executable, sourceFingerprint };
37
+ if (fs.existsSync(target)) {
38
+ if (readRecord(path.join(target, manifestName))?.owner !== owner || treeHash(await digestFiles(target)) !== digest)
39
+ throw new Error('保留的 Linux 内核不完整,未覆盖运行中的文件。');
40
+ return result;
41
+ }
42
+ fs.mkdirSync(parent, { recursive: true, mode: 0o700 });
43
+ const staging = path.join(parent, `.${randomUUID()}.tmp`), created = [];
44
+ fs.mkdirSync(staging, { mode: 0o700 });
45
+ try {
46
+ for (const file of files) {
47
+ const destination = path.join(staging, file.name);
48
+ fs.copyFileSync(path.join(source, file.name), destination, fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE);
49
+ created.push(file.name); fs.chmodSync(destination, file.mode);
50
+ }
51
+ if (treeHash(await digestFiles(staging)) !== digest || sourceFingerprint !== runtimeFingerprint(executable))
52
+ throw new Error('Linux 内核复制期间发生变化,未使用混合版本。');
53
+ writeRecord(path.join(staging, manifestName), { owner, digest, version, files });
54
+ created.push(manifestName);
55
+ fs.renameSync(staging, target);
56
+ return result;
57
+ } catch (error) {
58
+ if (fs.existsSync(staging)) { for (const name of created) fs.unlinkSync(path.join(staging, name)); fs.rmdirSync(staging); }
59
+ throw error;
60
+ }
61
+ }
62
+ export async function pruneRetainedDesktopRuntimes(stateRoot, keepExecutable) {
63
+ const parent = path.resolve(stateRoot, 'linux-runtimes'), keep = path.dirname(path.resolve(keepExecutable));
64
+ if (path.dirname(keep) !== parent || !/^[a-f0-9]{64}$/.test(path.basename(keep)) || !fs.existsSync(parent)) return;
65
+ for (const entry of fs.readdirSync(parent, { withFileTypes: true })) {
66
+ const directory = path.join(parent, entry.name);
67
+ if (!entry.isDirectory() || !/^[a-f0-9]{64}$/.test(entry.name) || directory === keep) continue;
68
+ const record = readRecord(path.join(directory, manifestName));
69
+ if (record?.owner !== owner || record.digest !== entry.name) continue;
70
+ if (fs.readdirSync(directory).sort().join('|') !== [...names, manifestName].sort().join('|')) continue;
71
+ const actual = await digestFiles(directory);
72
+ if (treeHash(actual) !== entry.name || JSON.stringify(record.files) !== JSON.stringify(actual)) continue;
73
+ for (const name of [...names, manifestName]) fs.unlinkSync(path.join(directory, name));
74
+ fs.rmdirSync(directory);
75
+ }
76
+ }
@@ -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,50 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { installedDesktop, verifyDesktopPackage } from './desktop-installation.mjs';
4
+ import { processInfo, sameProcess, stopProcess, connectedToManagedServer, ownsManagedListener } from './process.mjs';
5
+ import { startBackground } from '../../background-process.mjs';
6
+
7
+ // Package upgrades unlink the old executable while its process stays alive.
8
+ // Match that process for Desktop discovery, but retain its exact /proc identity
9
+ // for sameProcess/stopProcess so a changed process is never signalled blindly.
10
+ const desktopExecutableMatches = (actual, installed) => actual === installed || actual === `${installed} (deleted)`;
11
+
12
+ export async function systemRequest(request) {
13
+ if (request.operation === 'owns-listener') return ownsManagedListener(request.expected, request.url);
14
+ if (request.operation === 'process') return processInfo(request.pid);
15
+ if (request.operation === 'stop') return stopProcess(request.expected?.pid, request.expected);
16
+ const installed = installedDesktop();
17
+ if (request.operation === 'desktop-info') {
18
+ const running = [];
19
+ if (installed) for (const name of fs.readdirSync('/proc').filter(name => /^\d+$/.test(name))) {
20
+ try {
21
+ if (fs.statSync(`/proc/${name}`).uid !== process.getuid()
22
+ || !desktopExecutableMatches(fs.readlinkSync(`/proc/${name}/exe`), installed.executable)) continue;
23
+ } catch (error) { if (['ENOENT', 'ESRCH', 'EACCES'].includes(error.code)) continue; throw error; }
24
+ const info = processInfo(Number(name));
25
+ if (info && desktopExecutableMatches(info.executable, installed.executable) && !info.args.some(arg => arg.startsWith('--type='))) running.push(info);
26
+ }
27
+ if (running.length > 1) throw new Error('发现多个 ChatGPT 桌面实例,请先关闭多余实例。');
28
+ const info = running[0] || null;
29
+ const connected = info ? connectedToManagedServer(info.pid, request.url) : false;
30
+ if (info && !sameProcess(info, processInfo(info.pid))) throw new Error('核对期间桌面进程发生变化。');
31
+ return { ...(installed || { desktop: null, version: '', build: '' }), running: !!info,
32
+ finishedLaunching: connected, connectedToManagedServer: connected, process: info };
33
+ }
34
+ if (!installed || installed.desktop !== request.bundlePath) throw new Error('桌面版安装位置已变化。');
35
+ if (request.operation === 'desktop-start') {
36
+ verifyDesktopPackage(installed.desktop);
37
+ if (!process.env.DISPLAY && !process.env.WAYLAND_DISPLAY) throw new Error('请在 Linux 图形桌面的当前用户会话中运行 relax setup。');
38
+ const environment = { ...process.env, ...request.environment };
39
+ delete environment.CODEX_APP_SERVER_FORCE_CLI;
40
+ delete environment.CODEX_APP_TOOLS_PIPE_PATH;
41
+ const pid = await startBackground(path.join(installed.desktop, 'codex-launcher'), [], environment);
42
+ return { pid, started: true };
43
+ }
44
+ if (request.operation === 'desktop-close') {
45
+ // Electron's POSIX signal handler calls Browser::Quit for SIGTERM. Wait
46
+ // for exit before touching the store; never escalate to SIGKILL.
47
+ return stopProcess(request.expected?.pid, request.expected);
48
+ }
49
+ throw new Error(`不支持的 Linux 系统操作:${request.operation}`);
50
+ }
@@ -0,0 +1,31 @@
1
+ import os from 'node:os';
2
+ import path from 'node:path';
3
+ import { execFile } from 'node:child_process';
4
+ import { promisify } from 'node:util';
5
+ import { managedUserEnvironment, managedEnvironmentName } from '../managed-user-environment.mjs';
6
+ import { installedDesktop } from './desktop-installation.mjs';
7
+
8
+ const exec = promisify(execFile);
9
+ const systemctl = async args => (await exec('/usr/bin/systemctl', ['--user', ...args], { timeout: 5000 })).stdout;
10
+ const config = path.isAbsolute(process.env.XDG_CONFIG_HOME || '') ? process.env.XDG_CONFIG_HOME : path.join(os.homedir(), '.config');
11
+ export const environmentConfig = url => `# Managed by Code Relax\n${managedEnvironmentName}=${url}\n`;
12
+ const adapter = managedUserEnvironment({
13
+ file: path.join(config, 'environment.d/60-code-relax.conf'),
14
+ render: environmentConfig, scope: 'systemd-user',
15
+ read: async () => {
16
+ if (process.getuid() === 0) throw new Error('请以普通 Linux 用户配置内核环境,不使用 sudo。');
17
+ const lines = (await systemctl(['show-environment'])).split('\n');
18
+ const value = name => {
19
+ const raw = lines.find(line => line.startsWith(`${name}=`))?.slice(name.length + 1) || '';
20
+ return raw.startsWith('"') ? JSON.parse(raw) : raw;
21
+ };
22
+ return { value: value(managedEnvironmentName), forceCli: value('CODEX_APP_SERVER_FORCE_CLI') };
23
+ },
24
+ set: url => systemctl(['set-environment', `${managedEnvironmentName}=${url}`]),
25
+ unset: () => systemctl(['unset-environment', managedEnvironmentName]),
26
+ });
27
+ export async function configureManagedEnvironment(stateRoot, url) {
28
+ if (!installedDesktop()) return { configured: false, reason: 'desktop-not-installed' };
29
+ return adapter.configureManagedEnvironment(stateRoot, url);
30
+ }
31
+ export const { clearManagedEnvironment } = adapter;
@@ -0,0 +1,121 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { createRequire } from 'node:module';
5
+ import { execFile, execFileSync } from 'node:child_process';
6
+ import { promisify } from 'node:util';
7
+ import { newestRuntime, verifyProtocol } from '../codex-protocol.mjs';
8
+ import { readRecord, writeRecord } from '../../service-lifecycle.mjs';
9
+ import { retainRuntime, runtimeFingerprint, packageRoot } from './retained-runtime.mjs';
10
+ export { runtimeFingerprint, pruneRetainedDesktopRuntimes } from './retained-runtime.mjs';
11
+
12
+ const exec = promisify(execFile);
13
+ export const codeModeHostPath = executable => path.join(packageRoot(executable), 'bin/codex-code-mode-host');
14
+ const fileExists = file => { try { return fs.statSync(file).isFile(); } catch (error) { if (error.code === 'ENOENT') return false; throw error; } };
15
+ export function nativeExecutable(file) {
16
+ if (!fileExists(file)) return false;
17
+ const descriptor = fs.openSync(file, 'r');
18
+ try {
19
+ const magic = Buffer.alloc(4);
20
+ if (fs.readSync(descriptor, magic, 0, 4, 0) !== 4) return false;
21
+ return [0xfeedface, 0xfeedfacf, 0xcefaedfe, 0xcffaedfe, 0xcafebabe, 0xbebafeca, 0xcafebabf, 0xbfbafeca].includes(magic.readUInt32BE());
22
+ } finally { fs.closeSync(descriptor); }
23
+ }
24
+ export function runtimeFilesAvailable(executable) {
25
+ try { return nativeExecutable(executable) && nativeExecutable(codeModeHostPath(executable)); }
26
+ catch (error) { if (error.code === 'EACCES') throw error; return false; }
27
+ }
28
+ function nativeEntry(file) {
29
+ if (!fileExists(file)) return null;
30
+ file = fs.realpathSync(file);
31
+ if (nativeExecutable(file)) return file;
32
+ if (path.basename(path.dirname(file)) === 'bin') {
33
+ const bundle = path.resolve(file, '../../CodexCLI.app/Contents/MacOS/codex');
34
+ if (nativeExecutable(bundle)) return bundle;
35
+ }
36
+ return null;
37
+ }
38
+
39
+ // Match the official CLI's native package mapping. Never launch the npm JS shim as a kernel.
40
+ export function discoverCodex(environment = process.env, { home = os.homedir(), arch = process.arch } = {}) {
41
+ if (!['arm64', 'x64'].includes(arch)) throw new Error(`不支持的 Mac CPU:${arch}`);
42
+ const found = new Map();
43
+ const add = (file, source) => {
44
+ file = nativeEntry(file);
45
+ if (!file) return;
46
+ fs.accessSync(file, fs.constants.X_OK);
47
+ const executable = fs.realpathSync(file);
48
+ if (!found.has(executable)) found.set(executable, { executable, source });
49
+ };
50
+ if (environment.CODE_RELAX_CODEX_PATH) {
51
+ const file = environment.CODE_RELAX_CODEX_PATH;
52
+ if (!path.isAbsolute(file) || path.basename(file) !== 'codex') throw new Error('CODE_RELAX_CODEX_PATH 必须是原生 codex 程序的绝对路径。');
53
+ add(file, 'explicit');
54
+ if (!found.size) throw new Error('指定的 Codex 原生程序不存在或不是 Mach-O 可执行文件。');
55
+ return [...found.values()];
56
+ }
57
+ for (const directory of ['/Applications', path.join(home, 'Applications')]) {
58
+ for (const name of ['ChatGPT.app', 'Codex.app']) {
59
+ const bundle = path.join(directory, name);
60
+ if (!fileExists(path.join(bundle, 'Contents/Info.plist'))) continue;
61
+ const id = execFileSync('/usr/bin/plutil', ['-extract', 'CFBundleIdentifier', 'raw', '-o', '-', path.join(bundle, 'Contents/Info.plist')], { encoding: 'utf8', timeout: 5000 }).trim();
62
+ if (id !== 'com.openai.codex') continue;
63
+ add(path.join(bundle, 'Contents/Resources/codex-cli/CodexCLI.app/Contents/MacOS/codex'), 'desktop');
64
+ }
65
+ }
66
+ const codexHome = environment.CODEX_HOME?.trim() || path.join(home, '.codex');
67
+ const directories = [...String(environment.PATH || '').split(path.delimiter), environment.CODEX_INSTALL_DIR,
68
+ path.join(home, '.local/bin'), path.join(codexHome, 'packages/standalone/current/bin')].filter(item => item && path.isAbsolute(item));
69
+ const target = `${arch === 'arm64' ? 'aarch64' : 'x86_64'}-apple-darwin`;
70
+ for (const directory of new Set(directories)) {
71
+ const entry = path.join(directory, 'codex');
72
+ if (!fileExists(entry)) continue;
73
+ if (nativeEntry(entry)) { add(entry, 'cli'); continue; }
74
+ let root = path.dirname(fs.realpathSync(entry));
75
+ while (true) {
76
+ const packageFile = path.join(root, 'package.json');
77
+ if (fileExists(packageFile) && readRecord(packageFile)?.name === '@openai/codex') {
78
+ let vendor = path.join(root, 'vendor');
79
+ try { vendor = path.join(path.dirname(createRequire(packageFile).resolve(`@openai/codex-darwin-${arch}/package.json`)), 'vendor'); }
80
+ catch (error) { if (error.code !== 'MODULE_NOT_FOUND') throw error; }
81
+ add(path.join(vendor, target, 'bin/codex'), 'npm');
82
+ break;
83
+ }
84
+ const parent = path.dirname(root);
85
+ if (parent === root) break;
86
+ root = parent;
87
+ }
88
+ }
89
+ return [...found.values()];
90
+ }
91
+
92
+ export async function resolveCodexRuntime(stateRoot, { refresh = false, environment = process.env } = {}) {
93
+ fs.mkdirSync(stateRoot, { recursive: true, mode: 0o700 });
94
+ const recordFile = path.join(stateRoot, 'codex-runtime.json');
95
+ const saved = readRecord(recordFile);
96
+ const codexHome = path.resolve(environment.CODEX_HOME?.trim() || saved?.codexHome || path.join(os.homedir(), '.codex'));
97
+ const explicit = environment.CODE_RELAX_CODEX_PATH || (saved?.source === 'explicit' ? saved.sourceExecutable : '');
98
+ if (!refresh && saved?.executable && (!explicit || explicit === saved.sourceExecutable) && codexHome === saved.codexHome
99
+ && runtimeFilesAvailable(saved.executable) && saved.fingerprint === runtimeFingerprint(saved.executable)) return saved;
100
+ const candidates = [];
101
+ for (const candidate of discoverCodex({ ...environment, CODEX_HOME: codexHome, CODE_RELAX_CODEX_PATH: explicit })) {
102
+ try {
103
+ const { stdout } = await exec(candidate.executable, ['--version'], { timeout: 10000, env: { ...environment, CODEX_HOME: codexHome } });
104
+ const version = /^codex-cli (\d+\.\d+\.\d+(?:-[\w.]+)?)/m.exec(stdout)?.[1];
105
+ if (!version) throw new Error('无法识别 Codex 版本');
106
+ candidates.push({ ...candidate, version });
107
+ } catch (error) { throw new Error(`无法确认 Codex 候选版本,未降级:${candidate.executable}: ${error.message}`); }
108
+ }
109
+ const candidate = newestRuntime(candidates);
110
+ if (candidate) {
111
+ try {
112
+ if (!runtimeFilesAvailable(candidate.executable)) throw new Error('缺少配套原生 codex-code-mode-host');
113
+ const retained = await retainRuntime(candidate.executable, stateRoot, candidate.version);
114
+ await verifyProtocol(retained.executable, stateRoot);
115
+ const result = { ...candidate, ...retained, codexHome, fingerprint: runtimeFingerprint(retained.executable) };
116
+ writeRecord(recordFile, result);
117
+ return result;
118
+ } catch (error) { throw new Error(`最新 Codex 内核 ${candidate.version} 校验失败,未降级:${candidate.executable}: ${error.message}`); }
119
+ }
120
+ throw new Error('未找到 Mac Codex 内核,请安装官方 Codex 应用或完整 CLI 并登录账号。');
121
+ }