@walkhi/code-relax 0.1.0-beta.10 → 0.1.0-beta.100

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 (849) hide show
  1. package/README.md +67 -44
  2. package/dist/bin/cleanup-accounts.mjs +63 -0
  3. package/dist/bin/codex-remote.mjs +387 -265
  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-demo.mjs +1 -1
  10. package/dist/bin/self-relay-server.mjs +43 -30
  11. package/dist/bin/set-relay-admin-password.mjs +11 -0
  12. package/dist/build-platform.json +1 -0
  13. package/dist/get-shared-service-url.ps1 +12 -4
  14. package/dist/shared/app-server-events.cjs +452 -235
  15. package/dist/shared/code-browser.cjs +159 -0
  16. package/dist/shared/file-changes.cjs +31 -0
  17. package/dist/shared/file-citations.cjs +117 -0
  18. package/dist/shared/file-mentions.cjs +92 -0
  19. package/dist/shared/message-delivery.cjs +115 -0
  20. package/dist/shared/p2p-data-channel.cjs +22 -0
  21. package/dist/shared/p2p-diagnostics.cjs +1 -1
  22. package/dist/shared/p2p-file-channel.cjs +87 -0
  23. package/dist/shared/p2p-ice-policy.cjs +22 -0
  24. package/dist/shared/plan-pricing.cjs +32 -0
  25. package/dist/shared/question-attention.cjs +100 -0
  26. package/dist/shared/release-version.cjs +31 -0
  27. package/dist/shared/server-requests.cjs +347 -67
  28. package/dist/shared/service-endpoints.cjs +21 -0
  29. package/dist/shared/timeline-sync.cjs +173 -67
  30. package/dist/skills/code-relax/SKILL.md +22 -17
  31. package/dist/src/archived-threads.mjs +22 -0
  32. package/dist/src/bounded-process-log.mjs +63 -0
  33. package/dist/src/browser-auth-operations.mjs +46 -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 +58 -36
  37. package/dist/src/desktop-operation.mjs +46 -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 +623 -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 +151 -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 +271 -38
  56. package/dist/src/managed-app-server.mjs +398 -227
  57. package/dist/src/managed-endpoint.mjs +25 -0
  58. package/dist/src/message-upload-files.mjs +111 -0
  59. package/dist/src/onboarding.mjs +9 -26
  60. package/dist/src/plan-pricing.mjs +47 -0
  61. package/dist/src/platform/README.md +7 -12
  62. package/dist/src/platform/codex-protocol.mjs +51 -0
  63. package/dist/src/platform/codex-runtime.mjs +4 -0
  64. package/dist/src/platform/credential-store.mjs +19 -0
  65. package/dist/src/platform/desktop-host.mjs +3 -0
  66. package/dist/src/platform/desktop-permission-mode.mjs +17 -0
  67. package/dist/src/platform/desktop-project-registration.mjs +3 -0
  68. package/dist/src/platform/desktop-project-store.mjs +219 -0
  69. package/dist/src/platform/file-opener.mjs +9 -0
  70. package/dist/src/platform/linux/codex-runtime.mjs +56 -0
  71. package/dist/src/platform/linux/desktop-host.mjs +87 -0
  72. package/dist/src/platform/linux/desktop-installation.mjs +36 -0
  73. package/dist/src/platform/linux/desktop-project-registration.mjs +11 -0
  74. package/dist/src/platform/linux/network-info.mjs +11 -0
  75. package/dist/src/platform/linux/process.mjs +53 -0
  76. package/dist/src/platform/linux/project-locations.mjs +17 -0
  77. package/dist/src/platform/linux/resident-startup.mjs +52 -0
  78. package/dist/src/platform/linux/retained-runtime.mjs +76 -0
  79. package/dist/src/platform/linux/service-host.mjs +18 -0
  80. package/dist/src/platform/linux/system.mjs +50 -0
  81. package/dist/src/platform/linux/user-environment.mjs +31 -0
  82. package/dist/src/platform/macos/codex-runtime.mjs +121 -0
  83. package/dist/src/platform/macos/desktop-host.mjs +114 -0
  84. package/dist/src/platform/macos/desktop-project-registration.mjs +11 -0
  85. package/dist/src/platform/macos/network-info.mjs +8 -0
  86. package/dist/src/platform/macos/project-locations.mjs +8 -0
  87. package/dist/src/platform/macos/resident-startup.mjs +84 -0
  88. package/dist/src/platform/macos/retained-runtime.mjs +127 -0
  89. package/dist/src/platform/macos/service-host.mjs +18 -0
  90. package/dist/src/platform/macos/system.mjs +29 -0
  91. package/dist/src/platform/macos/user-environment.mjs +31 -0
  92. package/dist/src/platform/managed-user-environment.mjs +78 -0
  93. package/dist/src/platform/native-package.mjs +69 -0
  94. package/dist/src/platform/network-info.mjs +3 -0
  95. package/dist/src/platform/path-identity.mjs +5 -0
  96. package/dist/src/platform/posix/network-candidates.mjs +23 -0
  97. package/dist/src/platform/posix/runtime-paths.mjs +25 -0
  98. package/dist/src/platform/power-inhibitor.mjs +22 -0
  99. package/dist/src/platform/project-locations.mjs +3 -0
  100. package/dist/src/platform/runtime-paths.mjs +8 -0
  101. package/dist/src/platform/select.mjs +5 -0
  102. package/dist/src/platform/service-host.mjs +3 -0
  103. package/dist/src/platform/user-environment.mjs +3 -0
  104. package/dist/src/platform/windows/activate-desktop.ps1 +49 -0
  105. package/dist/src/platform/windows/codex-runtime.mjs +215 -107
  106. package/dist/src/platform/windows/desktop-helper.mjs +272 -0
  107. package/dist/src/platform/windows/desktop-host.mjs +45 -33
  108. package/dist/src/platform/windows/desktop-info.ps1 +27 -3
  109. package/dist/src/platform/windows/desktop-project-registration.mjs +4 -0
  110. package/dist/src/platform/windows/desktop-runtime.ps1 +10 -0
  111. package/dist/src/platform/windows/desktop-shortcuts.ps1 +6 -13
  112. package/dist/src/platform/windows/dots-profile.mjs +49 -0
  113. package/dist/src/platform/windows/keep-awake.ps1 +20 -0
  114. package/dist/src/platform/windows/launch-worker.mjs +41 -42
  115. package/dist/src/platform/windows/project-locations.mjs +16 -0
  116. package/dist/src/platform/windows/resident-start.js +20 -0
  117. package/dist/src/platform/windows/resident-startup.ps1 +27 -11
  118. package/dist/src/platform/windows/rustdesk-video-probe.mjs +168 -0
  119. package/dist/src/platform/windows/service-host.mjs +17 -22
  120. package/dist/src/platform/windows/start-hidden-console.ps1 +11 -2
  121. package/dist/src/platform/windows/user-environment.mjs +52 -50
  122. package/dist/src/project-create.mjs +121 -0
  123. package/dist/src/project-management.mjs +59 -0
  124. package/dist/src/project-remove.mjs +55 -0
  125. package/dist/src/project-update.mjs +59 -0
  126. package/dist/src/relay-config-import.mjs +45 -0
  127. package/dist/src/remote-control.mjs +51 -0
  128. package/dist/src/runtime-discovery.mjs +65 -41
  129. package/dist/src/self-relay/account-cleanup.mjs +30 -0
  130. package/dist/src/self-relay/account-connections.mjs +63 -0
  131. package/dist/src/self-relay/admin-auth.mjs +59 -0
  132. package/dist/src/self-relay/admin-login-page.mjs +7 -0
  133. package/dist/src/self-relay/admin-page.mjs +87 -71
  134. package/dist/src/self-relay/admin-server.mjs +68 -24
  135. package/dist/src/self-relay/admin-state.mjs +11 -6
  136. package/dist/src/self-relay/admin-style.mjs +58 -0
  137. package/dist/src/self-relay/admin-workstations-page.mjs +95 -0
  138. package/dist/src/self-relay/admin-workstations.mjs +145 -0
  139. package/dist/src/self-relay/android-releases.mjs +61 -0
  140. package/dist/src/self-relay/client.mjs +45 -45
  141. package/dist/src/self-relay/connection-reporting.mjs +38 -0
  142. package/dist/src/self-relay/connector.mjs +456 -145
  143. package/dist/src/self-relay/demo.mjs +1 -1
  144. package/dist/src/self-relay/device-info.mjs +27 -0
  145. package/dist/src/self-relay/device-store.mjs +10 -2
  146. package/dist/src/self-relay/diagnostics.mjs +54 -0
  147. package/dist/src/self-relay/email-accounts.mjs +195 -0
  148. package/dist/src/self-relay/file-wire.mjs +76 -0
  149. package/dist/src/self-relay/lan-authorizations.mjs +44 -2
  150. package/dist/src/self-relay/lifecycle.mjs +252 -259
  151. package/dist/src/self-relay/long-pairing.mjs +40 -0
  152. package/dist/src/self-relay/mysql-state.mjs +118 -0
  153. package/dist/src/self-relay/p2p-probe.mjs +168 -123
  154. package/dist/src/self-relay/phone-connections.mjs +55 -0
  155. package/dist/src/self-relay/privacy-page.mjs +26 -0
  156. package/dist/src/self-relay/public-releases.mjs +67 -0
  157. package/dist/src/self-relay/rtc-file-bridge.mjs +46 -0
  158. package/dist/src/self-relay/server.mjs +1078 -441
  159. package/dist/src/self-relay/usage-daily.mjs +55 -0
  160. package/dist/src/self-relay/usage-meter.mjs +141 -0
  161. package/dist/src/server.mjs +1442 -716
  162. package/dist/src/service-control.mjs +17 -7
  163. package/dist/src/service-doctor.mjs +150 -51
  164. package/dist/src/service-health.mjs +2 -2
  165. package/dist/src/service-install.mjs +16 -10
  166. package/dist/src/service-lifecycle.mjs +52 -42
  167. package/dist/src/service-power.mjs +58 -0
  168. package/dist/src/service-restart.mjs +45 -12
  169. package/dist/src/service-update-worker.mjs +42 -0
  170. package/dist/src/service-update.mjs +80 -0
  171. package/dist/src/shared-app-server.mjs +511 -307
  172. package/dist/src/shared-catalog.mjs +132 -50
  173. package/dist/src/shared-recovery.mjs +21 -13
  174. package/dist/src/shared-thread-stream.mjs +143 -51
  175. package/dist/src/skill-install.mjs +0 -13
  176. package/dist/src/thread-goals.mjs +40 -0
  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 +48 -48
  181. package/tools/postinstall.mjs +186 -146
  182. package/dist/src/debug-ui.mjs +0 -131
  183. package/dist/src/platform/windows/credential-store.mjs +0 -27
  184. package/dist/src/platform/windows/credential-store.ps1 +0 -49
  185. package/dist/src/platform/windows/desktop-shortcut-run.ps1 +0 -5
  186. package/dist/web/activity-view.js +0 -283
  187. package/dist/web/approval-ui.js +0 -188
  188. package/dist/web/capabilities.js +0 -50
  189. package/dist/web/chat-transport.js +0 -196
  190. package/dist/web/chat.css +0 -778
  191. package/dist/web/chat.js +0 -3815
  192. package/dist/web/client-platform.js +0 -11
  193. package/dist/web/community.css +0 -82
  194. package/dist/web/community.html +0 -36
  195. package/dist/web/composer-controller.js +0 -97
  196. package/dist/web/conversation-controller.js +0 -99
  197. package/dist/web/disclosure-state-controller.js +0 -95
  198. package/dist/web/draft-controller.js +0 -103
  199. package/dist/web/harmony-platform.js +0 -52
  200. package/dist/web/highlight-powershell.min.js +0 -39
  201. package/dist/web/highlight.min.js +0 -1262
  202. package/dist/web/history-cache.js +0 -240
  203. package/dist/web/history-controller.js +0 -167
  204. package/dist/web/index.html +0 -288
  205. package/dist/web/lan-session.js +0 -122
  206. package/dist/web/link-action-controller.js +0 -212
  207. package/dist/web/message-send-controller.js +0 -177
  208. package/dist/web/message-view.js +0 -98
  209. package/dist/web/p2p-data-channel.js +0 -50
  210. package/dist/web/p2p-diagnostics.js +0 -28
  211. package/dist/web/p2p-probe.js +0 -123
  212. package/dist/web/page-resume.js +0 -28
  213. package/dist/web/pending-message-store.js +0 -108
  214. package/dist/web/queue-controller.js +0 -82
  215. package/dist/web/resources.json +0 -1
  216. package/dist/web/self-relay-session.js +0 -129
  217. package/dist/web/server-requests.js +0 -67
  218. package/dist/web/station-connection-controller.js +0 -75
  219. package/dist/web/task-list-view.js +0 -289
  220. package/dist/web/thread-attention-controller.js +0 -124
  221. package/dist/web/thread-context-controller.js +0 -30
  222. package/dist/web/thread-list-controller.js +0 -61
  223. package/dist/web/thread-list-sync.js +0 -86
  224. package/dist/web/thread-title-controller.js +0 -57
  225. package/dist/web/timeline-formatters.js +0 -249
  226. package/dist/web/timeline-reducer.js +0 -77
  227. package/dist/web/timeline-renderer.js +0 -161
  228. package/dist/web/timeline-scroll-controller.js +0 -50
  229. package/dist/web/timeline-sync.js +0 -67
  230. package/dist/web/usage-controller.js +0 -258
  231. package/dist/web/vendor/README.md +0 -14
  232. package/dist/web/vendor/highlight-powershell.min.js +0 -39
  233. package/dist/web/vendor/highlight.LICENSE.txt +0 -29
  234. package/dist/web/vendor/highlight.min.js +0 -1262
  235. package/dist/web/vendor/lucide.LICENSE.txt +0 -17
  236. package/node_modules/@img/colour/LICENSE.md +0 -82
  237. package/node_modules/@img/colour/README.md +0 -15
  238. package/node_modules/@img/colour/color.cjs +0 -1596
  239. package/node_modules/@img/colour/index.cjs +0 -1
  240. package/node_modules/@img/colour/index.d.ts +0 -929
  241. package/node_modules/@img/colour/package.json +0 -58
  242. package/node_modules/@img/sharp-win32-x64/LICENSE +0 -191
  243. package/node_modules/@img/sharp-win32-x64/README.md +0 -59
  244. package/node_modules/@img/sharp-win32-x64/index.cjs +0 -1
  245. package/node_modules/@img/sharp-win32-x64/lib/libvips-42.dll +0 -0
  246. package/node_modules/@img/sharp-win32-x64/lib/libvips-cpp-8.18.6.dll +0 -0
  247. package/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64-0.35.4.node +0 -0
  248. package/node_modules/@img/sharp-win32-x64/package.json +0 -40
  249. package/node_modules/@img/sharp-win32-x64/versions.json +0 -30
  250. package/node_modules/@node-datachannel/win32-x64-msvc/node_datachannel.node +0 -0
  251. package/node_modules/@node-datachannel/win32-x64-msvc/package.json +0 -20
  252. package/node_modules/ansi-regex/index.d.ts +0 -37
  253. package/node_modules/ansi-regex/index.js +0 -10
  254. package/node_modules/ansi-regex/license +0 -9
  255. package/node_modules/ansi-regex/package.json +0 -55
  256. package/node_modules/ansi-regex/readme.md +0 -78
  257. package/node_modules/ansi-styles/index.d.ts +0 -345
  258. package/node_modules/ansi-styles/index.js +0 -163
  259. package/node_modules/ansi-styles/license +0 -9
  260. package/node_modules/ansi-styles/package.json +0 -56
  261. package/node_modules/ansi-styles/readme.md +0 -152
  262. package/node_modules/camelcase/index.d.ts +0 -63
  263. package/node_modules/camelcase/index.js +0 -76
  264. package/node_modules/camelcase/license +0 -9
  265. package/node_modules/camelcase/package.json +0 -43
  266. package/node_modules/camelcase/readme.md +0 -99
  267. package/node_modules/cliui/CHANGELOG.md +0 -76
  268. package/node_modules/cliui/LICENSE.txt +0 -14
  269. package/node_modules/cliui/README.md +0 -115
  270. package/node_modules/cliui/index.js +0 -354
  271. package/node_modules/cliui/package.json +0 -65
  272. package/node_modules/color-convert/CHANGELOG.md +0 -54
  273. package/node_modules/color-convert/LICENSE +0 -21
  274. package/node_modules/color-convert/README.md +0 -68
  275. package/node_modules/color-convert/conversions.js +0 -839
  276. package/node_modules/color-convert/index.js +0 -81
  277. package/node_modules/color-convert/package.json +0 -48
  278. package/node_modules/color-convert/route.js +0 -97
  279. package/node_modules/color-name/LICENSE +0 -8
  280. package/node_modules/color-name/README.md +0 -11
  281. package/node_modules/color-name/index.js +0 -152
  282. package/node_modules/color-name/package.json +0 -28
  283. package/node_modules/decamelize/index.js +0 -13
  284. package/node_modules/decamelize/license +0 -21
  285. package/node_modules/decamelize/package.json +0 -38
  286. package/node_modules/decamelize/readme.md +0 -48
  287. package/node_modules/detect-libc/LICENSE +0 -201
  288. package/node_modules/detect-libc/README.md +0 -163
  289. package/node_modules/detect-libc/index.d.ts +0 -14
  290. package/node_modules/detect-libc/lib/detect-libc.js +0 -313
  291. package/node_modules/detect-libc/lib/elf.js +0 -39
  292. package/node_modules/detect-libc/lib/filesystem.js +0 -51
  293. package/node_modules/detect-libc/lib/process.js +0 -24
  294. package/node_modules/detect-libc/package.json +0 -44
  295. package/node_modules/dijkstrajs/.travis.yml +0 -4
  296. package/node_modules/dijkstrajs/CONTRIBUTING.md +0 -8
  297. package/node_modules/dijkstrajs/LICENSE.md +0 -19
  298. package/node_modules/dijkstrajs/README.md +0 -18
  299. package/node_modules/dijkstrajs/dijkstra.js +0 -165
  300. package/node_modules/dijkstrajs/package.json +0 -60
  301. package/node_modules/dijkstrajs/test/dijkstra.test.js +0 -96
  302. package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  303. package/node_modules/emoji-regex/README.md +0 -73
  304. package/node_modules/emoji-regex/es2015/index.js +0 -6
  305. package/node_modules/emoji-regex/es2015/text.js +0 -6
  306. package/node_modules/emoji-regex/index.d.ts +0 -23
  307. package/node_modules/emoji-regex/index.js +0 -6
  308. package/node_modules/emoji-regex/package.json +0 -50
  309. package/node_modules/emoji-regex/text.js +0 -6
  310. package/node_modules/find-up/index.d.ts +0 -137
  311. package/node_modules/find-up/index.js +0 -89
  312. package/node_modules/find-up/license +0 -9
  313. package/node_modules/find-up/package.json +0 -53
  314. package/node_modules/find-up/readme.md +0 -156
  315. package/node_modules/get-caller-file/LICENSE.md +0 -6
  316. package/node_modules/get-caller-file/README.md +0 -41
  317. package/node_modules/get-caller-file/index.d.ts +0 -2
  318. package/node_modules/get-caller-file/index.js +0 -22
  319. package/node_modules/get-caller-file/index.js.map +0 -1
  320. package/node_modules/get-caller-file/package.json +0 -42
  321. package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  322. package/node_modules/is-fullwidth-code-point/index.js +0 -50
  323. package/node_modules/is-fullwidth-code-point/license +0 -9
  324. package/node_modules/is-fullwidth-code-point/package.json +0 -42
  325. package/node_modules/is-fullwidth-code-point/readme.md +0 -39
  326. package/node_modules/locate-path/index.d.ts +0 -83
  327. package/node_modules/locate-path/index.js +0 -65
  328. package/node_modules/locate-path/license +0 -9
  329. package/node_modules/locate-path/package.json +0 -45
  330. package/node_modules/locate-path/readme.md +0 -122
  331. package/node_modules/node-datachannel/.clang-format +0 -17
  332. package/node_modules/node-datachannel/.editorconfig +0 -12
  333. package/node_modules/node-datachannel/.eslintignore +0 -8
  334. package/node_modules/node-datachannel/.eslintrc.json +0 -27
  335. package/node_modules/node-datachannel/.gitmodules +0 -3
  336. package/node_modules/node-datachannel/.prettierignore +0 -7
  337. package/node_modules/node-datachannel/.prettierrc +0 -13
  338. package/node_modules/node-datachannel/API.md +0 -247
  339. package/node_modules/node-datachannel/BULDING.md +0 -26
  340. package/node_modules/node-datachannel/CMakeLists.txt +0 -153
  341. package/node_modules/node-datachannel/LICENSE +0 -373
  342. package/node_modules/node-datachannel/README.md +0 -129
  343. package/node_modules/node-datachannel/dist/cjs/index.cjs +0 -11
  344. package/node_modules/node-datachannel/dist/cjs/index.cjs.map +0 -1
  345. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs +0 -101
  346. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs.map +0 -1
  347. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs +0 -91
  348. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs.map +0 -1
  349. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs +0 -94
  350. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs.map +0 -1
  351. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs +0 -45
  352. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs.map +0 -1
  353. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs +0 -8
  354. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs.map +0 -1
  355. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs +0 -86
  356. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs.map +0 -1
  357. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs +0 -34
  358. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs.map +0 -1
  359. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs +0 -34
  360. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs.map +0 -1
  361. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs +0 -214
  362. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs.map +0 -1
  363. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs +0 -53
  364. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +0 -1
  365. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs +0 -83
  366. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs.map +0 -1
  367. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs +0 -132
  368. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs.map +0 -1
  369. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs +0 -94
  370. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs.map +0 -1
  371. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs +0 -434
  372. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs.map +0 -1
  373. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs +0 -59
  374. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs.map +0 -1
  375. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs +0 -45
  376. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs.map +0 -1
  377. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs +0 -42
  378. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs.map +0 -1
  379. package/node_modules/node-datachannel/dist/esm/index.mjs +0 -8
  380. package/node_modules/node-datachannel/dist/esm/index.mjs.map +0 -1
  381. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs +0 -78
  382. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs.map +0 -1
  383. package/node_modules/node-datachannel/dist/esm/lib/index.mjs +0 -64
  384. package/node_modules/node-datachannel/dist/esm/lib/index.mjs.map +0 -1
  385. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs +0 -78
  386. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs.map +0 -1
  387. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs +0 -43
  388. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs.map +0 -1
  389. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs +0 -6
  390. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs.map +0 -1
  391. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs +0 -82
  392. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs.map +0 -1
  393. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs +0 -28
  394. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs.map +0 -1
  395. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs +0 -30
  396. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs.map +0 -1
  397. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs +0 -210
  398. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs.map +0 -1
  399. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs +0 -49
  400. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs.map +0 -1
  401. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs +0 -79
  402. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs.map +0 -1
  403. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs +0 -128
  404. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs.map +0 -1
  405. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs +0 -89
  406. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs.map +0 -1
  407. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs +0 -430
  408. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs.map +0 -1
  409. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs +0 -55
  410. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs.map +0 -1
  411. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs +0 -41
  412. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs.map +0 -1
  413. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs +0 -27
  414. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs.map +0 -1
  415. package/node_modules/node-datachannel/dist/types/lib/datachannel-stream.d.ts +0 -24
  416. package/node_modules/node-datachannel/dist/types/lib/index.d.ts +0 -241
  417. package/node_modules/node-datachannel/dist/types/lib/types.d.ts +0 -119
  418. package/node_modules/node-datachannel/dist/types/lib/websocket-server.d.ts +0 -13
  419. package/node_modules/node-datachannel/dist/types/lib/websocket.d.ts +0 -25
  420. package/node_modules/node-datachannel/dist/types/polyfill/Events.d.ts +0 -15
  421. package/node_modules/node-datachannel/dist/types/polyfill/RTCCertificate.d.ts +0 -9
  422. package/node_modules/node-datachannel/dist/types/polyfill/RTCDataChannel.d.ts +0 -29
  423. package/node_modules/node-datachannel/dist/types/polyfill/RTCDtlsTransport.d.ts +0 -15
  424. package/node_modules/node-datachannel/dist/types/polyfill/RTCError.d.ts +0 -17
  425. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceCandidate.d.ts +0 -21
  426. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceTransport.d.ts +0 -30
  427. package/node_modules/node-datachannel/dist/types/polyfill/RTCPeerConnection.d.ts +0 -64
  428. package/node_modules/node-datachannel/dist/types/polyfill/RTCSctpTransport.d.ts +0 -15
  429. package/node_modules/node-datachannel/dist/types/polyfill/RTCSessionDescription.d.ts +0 -10
  430. package/node_modules/node-datachannel/dist/types/polyfill/index.d.ts +0 -26
  431. package/node_modules/node-datachannel/jest.config.ts +0 -14
  432. package/node_modules/node-datachannel/package.json +0 -133
  433. package/node_modules/node-datachannel/rollup.config.mjs +0 -67
  434. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.cpp +0 -530
  435. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.h +0 -63
  436. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.cpp +0 -172
  437. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.h +0 -43
  438. package/node_modules/node-datachannel/src/cpp/main.cpp +0 -58
  439. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.cpp +0 -457
  440. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.h +0 -52
  441. package/node_modules/node-datachannel/src/cpp/media-av1packetization.cpp +0 -24
  442. package/node_modules/node-datachannel/src/cpp/media-av1packetization.h +0 -11
  443. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.cpp +0 -126
  444. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.h +0 -29
  445. package/node_modules/node-datachannel/src/cpp/media-direction.cpp +0 -43
  446. package/node_modules/node-datachannel/src/cpp/media-direction.h +0 -10
  447. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.cpp +0 -126
  448. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.h +0 -30
  449. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.cpp +0 -126
  450. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.h +0 -30
  451. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.cpp +0 -32
  452. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.h +0 -11
  453. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.cpp +0 -31
  454. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.h +0 -11
  455. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.cpp +0 -79
  456. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.h +0 -28
  457. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.cpp +0 -68
  458. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.h +0 -28
  459. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.cpp +0 -57
  460. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.h +0 -28
  461. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.cpp +0 -93
  462. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.h +0 -30
  463. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.cpp +0 -167
  464. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.h +0 -35
  465. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.cpp +0 -95
  466. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.h +0 -30
  467. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.cpp +0 -458
  468. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.h +0 -61
  469. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.cpp +0 -526
  470. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.h +0 -56
  471. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.cpp +0 -1298
  472. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.h +0 -89
  473. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.cpp +0 -205
  474. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.h +0 -24
  475. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.cpp +0 -57
  476. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.h +0 -47
  477. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.cpp +0 -275
  478. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.h +0 -41
  479. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.cpp +0 -796
  480. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.h +0 -63
  481. package/node_modules/node-datachannel/src/index.ts +0 -9
  482. package/node_modules/node-datachannel/src/lib/datachannel-stream.ts +0 -100
  483. package/node_modules/node-datachannel/src/lib/index.ts +0 -290
  484. package/node_modules/node-datachannel/src/lib/node-datachannel.ts +0 -84
  485. package/node_modules/node-datachannel/src/lib/types.ts +0 -169
  486. package/node_modules/node-datachannel/src/lib/websocket-server.ts +0 -37
  487. package/node_modules/node-datachannel/src/lib/websocket.ts +0 -26
  488. package/node_modules/node-datachannel/src/polyfill/Events.ts +0 -82
  489. package/node_modules/node-datachannel/src/polyfill/Exception.ts +0 -37
  490. package/node_modules/node-datachannel/src/polyfill/README.md +0 -41
  491. package/node_modules/node-datachannel/src/polyfill/RTCCertificate.ts +0 -21
  492. package/node_modules/node-datachannel/src/polyfill/RTCDataChannel.ts +0 -225
  493. package/node_modules/node-datachannel/src/polyfill/RTCDtlsTransport.ts +0 -46
  494. package/node_modules/node-datachannel/src/polyfill/RTCError.ts +0 -78
  495. package/node_modules/node-datachannel/src/polyfill/RTCIceCandidate.ts +0 -128
  496. package/node_modules/node-datachannel/src/polyfill/RTCIceTransport.ts +0 -90
  497. package/node_modules/node-datachannel/src/polyfill/RTCPeerConnection.ts +0 -527
  498. package/node_modules/node-datachannel/src/polyfill/RTCSctpTransport.ts +0 -51
  499. package/node_modules/node-datachannel/src/polyfill/RTCSessionDescription.ts +0 -41
  500. package/node_modules/node-datachannel/src/polyfill/index.ts +0 -38
  501. package/node_modules/node-datachannel/tsconfig.json +0 -21
  502. package/node_modules/p-limit/index.d.ts +0 -38
  503. package/node_modules/p-limit/index.js +0 -57
  504. package/node_modules/p-limit/license +0 -9
  505. package/node_modules/p-limit/package.json +0 -52
  506. package/node_modules/p-limit/readme.md +0 -101
  507. package/node_modules/p-locate/index.d.ts +0 -64
  508. package/node_modules/p-locate/index.js +0 -52
  509. package/node_modules/p-locate/license +0 -9
  510. package/node_modules/p-locate/package.json +0 -53
  511. package/node_modules/p-locate/readme.md +0 -90
  512. package/node_modules/p-try/index.d.ts +0 -39
  513. package/node_modules/p-try/index.js +0 -9
  514. package/node_modules/p-try/license +0 -9
  515. package/node_modules/p-try/package.json +0 -42
  516. package/node_modules/p-try/readme.md +0 -58
  517. package/node_modules/path-exists/index.d.ts +0 -28
  518. package/node_modules/path-exists/index.js +0 -23
  519. package/node_modules/path-exists/license +0 -9
  520. package/node_modules/path-exists/package.json +0 -39
  521. package/node_modules/path-exists/readme.md +0 -52
  522. package/node_modules/pngjs/.eslintignore +0 -2
  523. package/node_modules/pngjs/.eslintrc.json +0 -19
  524. package/node_modules/pngjs/.prettierignore +0 -3
  525. package/node_modules/pngjs/LICENSE +0 -20
  526. package/node_modules/pngjs/README.md +0 -429
  527. package/node_modules/pngjs/browser.js +0 -16096
  528. package/node_modules/pngjs/coverage/lcov-report/base.css +0 -354
  529. package/node_modules/pngjs/coverage/lcov-report/bitmapper.js.html +0 -881
  530. package/node_modules/pngjs/coverage/lcov-report/bitpacker.js.html +0 -554
  531. package/node_modules/pngjs/coverage/lcov-report/block-navigation.js +0 -77
  532. package/node_modules/pngjs/coverage/lcov-report/chunkstream.js.html +0 -647
  533. package/node_modules/pngjs/coverage/lcov-report/constants.js.html +0 -176
  534. package/node_modules/pngjs/coverage/lcov-report/crc.js.html +0 -200
  535. package/node_modules/pngjs/coverage/lcov-report/favicon.png +0 -0
  536. package/node_modules/pngjs/coverage/lcov-report/filter-pack.js.html +0 -593
  537. package/node_modules/pngjs/coverage/lcov-report/filter-parse-async.js.html +0 -152
  538. package/node_modules/pngjs/coverage/lcov-report/filter-parse-sync.js.html +0 -143
  539. package/node_modules/pngjs/coverage/lcov-report/filter-parse.js.html +0 -611
  540. package/node_modules/pngjs/coverage/lcov-report/format-normaliser.js.html +0 -359
  541. package/node_modules/pngjs/coverage/lcov-report/index.html +0 -426
  542. package/node_modules/pngjs/coverage/lcov-report/interlace.js.html +0 -365
  543. package/node_modules/pngjs/coverage/lcov-report/packer-async.js.html +0 -230
  544. package/node_modules/pngjs/coverage/lcov-report/packer-sync.js.html +0 -248
  545. package/node_modules/pngjs/coverage/lcov-report/packer.js.html +0 -467
  546. package/node_modules/pngjs/coverage/lcov-report/paeth-predictor.js.html +0 -128
  547. package/node_modules/pngjs/coverage/lcov-report/parser-async.js.html +0 -575
  548. package/node_modules/pngjs/coverage/lcov-report/parser-sync.js.html +0 -404
  549. package/node_modules/pngjs/coverage/lcov-report/parser.js.html +0 -950
  550. package/node_modules/pngjs/coverage/lcov-report/png-sync.js.html +0 -116
  551. package/node_modules/pngjs/coverage/lcov-report/png.js.html +0 -662
  552. package/node_modules/pngjs/coverage/lcov-report/prettify.css +0 -101
  553. package/node_modules/pngjs/coverage/lcov-report/prettify.js +0 -1007
  554. package/node_modules/pngjs/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  555. package/node_modules/pngjs/coverage/lcov-report/sorter.js +0 -169
  556. package/node_modules/pngjs/coverage/lcov-report/sync-inflate.js.html +0 -584
  557. package/node_modules/pngjs/coverage/lcov-report/sync-reader.js.html +0 -215
  558. package/node_modules/pngjs/coverage/lcov.info +0 -2177
  559. package/node_modules/pngjs/lib/bitmapper.js +0 -267
  560. package/node_modules/pngjs/lib/bitpacker.js +0 -158
  561. package/node_modules/pngjs/lib/chunkstream.js +0 -189
  562. package/node_modules/pngjs/lib/constants.js +0 -32
  563. package/node_modules/pngjs/lib/crc.js +0 -40
  564. package/node_modules/pngjs/lib/filter-pack.js +0 -171
  565. package/node_modules/pngjs/lib/filter-parse-async.js +0 -24
  566. package/node_modules/pngjs/lib/filter-parse-sync.js +0 -21
  567. package/node_modules/pngjs/lib/filter-parse.js +0 -177
  568. package/node_modules/pngjs/lib/format-normaliser.js +0 -93
  569. package/node_modules/pngjs/lib/interlace.js +0 -95
  570. package/node_modules/pngjs/lib/packer-async.js +0 -50
  571. package/node_modules/pngjs/lib/packer-sync.js +0 -56
  572. package/node_modules/pngjs/lib/packer.js +0 -129
  573. package/node_modules/pngjs/lib/paeth-predictor.js +0 -16
  574. package/node_modules/pngjs/lib/parser-async.js +0 -165
  575. package/node_modules/pngjs/lib/parser-sync.js +0 -108
  576. package/node_modules/pngjs/lib/parser.js +0 -290
  577. package/node_modules/pngjs/lib/png-sync.js +0 -12
  578. package/node_modules/pngjs/lib/png.js +0 -194
  579. package/node_modules/pngjs/lib/sync-inflate.js +0 -168
  580. package/node_modules/pngjs/lib/sync-reader.js +0 -45
  581. package/node_modules/pngjs/package.json +0 -73
  582. package/node_modules/qrcode/README.md +0 -770
  583. package/node_modules/qrcode/bin/qrcode +0 -159
  584. package/node_modules/qrcode/helper/to-sjis-browser.js +0 -2
  585. package/node_modules/qrcode/helper/to-sjis.js +0 -105
  586. package/node_modules/qrcode/lib/browser.js +0 -76
  587. package/node_modules/qrcode/lib/can-promise.js +0 -7
  588. package/node_modules/qrcode/lib/core/alignment-pattern.js +0 -83
  589. package/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -59
  590. package/node_modules/qrcode/lib/core/bit-buffer.js +0 -37
  591. package/node_modules/qrcode/lib/core/bit-matrix.js +0 -65
  592. package/node_modules/qrcode/lib/core/byte-data.js +0 -30
  593. package/node_modules/qrcode/lib/core/error-correction-code.js +0 -135
  594. package/node_modules/qrcode/lib/core/error-correction-level.js +0 -50
  595. package/node_modules/qrcode/lib/core/finder-pattern.js +0 -22
  596. package/node_modules/qrcode/lib/core/format-info.js +0 -29
  597. package/node_modules/qrcode/lib/core/galois-field.js +0 -69
  598. package/node_modules/qrcode/lib/core/kanji-data.js +0 -54
  599. package/node_modules/qrcode/lib/core/mask-pattern.js +0 -234
  600. package/node_modules/qrcode/lib/core/mode.js +0 -167
  601. package/node_modules/qrcode/lib/core/numeric-data.js +0 -43
  602. package/node_modules/qrcode/lib/core/polynomial.js +0 -62
  603. package/node_modules/qrcode/lib/core/qrcode.js +0 -495
  604. package/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -56
  605. package/node_modules/qrcode/lib/core/regex.js +0 -31
  606. package/node_modules/qrcode/lib/core/segments.js +0 -330
  607. package/node_modules/qrcode/lib/core/utils.js +0 -63
  608. package/node_modules/qrcode/lib/core/version-check.js +0 -9
  609. package/node_modules/qrcode/lib/core/version.js +0 -163
  610. package/node_modules/qrcode/lib/index.js +0 -12
  611. package/node_modules/qrcode/lib/renderer/canvas.js +0 -63
  612. package/node_modules/qrcode/lib/renderer/png.js +0 -78
  613. package/node_modules/qrcode/lib/renderer/svg-tag.js +0 -81
  614. package/node_modules/qrcode/lib/renderer/svg.js +0 -19
  615. package/node_modules/qrcode/lib/renderer/terminal/terminal-small.js +0 -85
  616. package/node_modules/qrcode/lib/renderer/terminal/terminal.js +0 -49
  617. package/node_modules/qrcode/lib/renderer/terminal.js +0 -9
  618. package/node_modules/qrcode/lib/renderer/utf8.js +0 -71
  619. package/node_modules/qrcode/lib/renderer/utils.js +0 -99
  620. package/node_modules/qrcode/lib/server.js +0 -138
  621. package/node_modules/qrcode/license +0 -10
  622. package/node_modules/qrcode/package.json +0 -77
  623. package/node_modules/require-directory/.jshintrc +0 -67
  624. package/node_modules/require-directory/.npmignore +0 -1
  625. package/node_modules/require-directory/.travis.yml +0 -3
  626. package/node_modules/require-directory/LICENSE +0 -22
  627. package/node_modules/require-directory/README.markdown +0 -184
  628. package/node_modules/require-directory/index.js +0 -86
  629. package/node_modules/require-directory/package.json +0 -40
  630. package/node_modules/require-main-filename/CHANGELOG.md +0 -26
  631. package/node_modules/require-main-filename/LICENSE.txt +0 -14
  632. package/node_modules/require-main-filename/README.md +0 -26
  633. package/node_modules/require-main-filename/index.js +0 -18
  634. package/node_modules/require-main-filename/package.json +0 -35
  635. package/node_modules/semver/LICENSE +0 -15
  636. package/node_modules/semver/README.md +0 -680
  637. package/node_modules/semver/bin/semver.js +0 -195
  638. package/node_modules/semver/classes/comparator.js +0 -143
  639. package/node_modules/semver/classes/index.js +0 -7
  640. package/node_modules/semver/classes/range.js +0 -577
  641. package/node_modules/semver/classes/semver.js +0 -350
  642. package/node_modules/semver/functions/clean.js +0 -8
  643. package/node_modules/semver/functions/cmp.js +0 -54
  644. package/node_modules/semver/functions/coerce.js +0 -62
  645. package/node_modules/semver/functions/compare-build.js +0 -9
  646. package/node_modules/semver/functions/compare-loose.js +0 -5
  647. package/node_modules/semver/functions/compare.js +0 -7
  648. package/node_modules/semver/functions/diff.js +0 -60
  649. package/node_modules/semver/functions/eq.js +0 -5
  650. package/node_modules/semver/functions/gt.js +0 -5
  651. package/node_modules/semver/functions/gte.js +0 -5
  652. package/node_modules/semver/functions/inc.js +0 -21
  653. package/node_modules/semver/functions/lt.js +0 -5
  654. package/node_modules/semver/functions/lte.js +0 -5
  655. package/node_modules/semver/functions/major.js +0 -5
  656. package/node_modules/semver/functions/minor.js +0 -5
  657. package/node_modules/semver/functions/neq.js +0 -5
  658. package/node_modules/semver/functions/parse.js +0 -18
  659. package/node_modules/semver/functions/patch.js +0 -5
  660. package/node_modules/semver/functions/prerelease.js +0 -8
  661. package/node_modules/semver/functions/rcompare.js +0 -5
  662. package/node_modules/semver/functions/rsort.js +0 -5
  663. package/node_modules/semver/functions/satisfies.js +0 -12
  664. package/node_modules/semver/functions/sort.js +0 -5
  665. package/node_modules/semver/functions/truncate.js +0 -48
  666. package/node_modules/semver/functions/valid.js +0 -8
  667. package/node_modules/semver/index.js +0 -93
  668. package/node_modules/semver/internal/constants.js +0 -37
  669. package/node_modules/semver/internal/debug.js +0 -11
  670. package/node_modules/semver/internal/identifiers.js +0 -29
  671. package/node_modules/semver/internal/lrucache.js +0 -42
  672. package/node_modules/semver/internal/parse-options.js +0 -17
  673. package/node_modules/semver/internal/re.js +0 -223
  674. package/node_modules/semver/package.json +0 -78
  675. package/node_modules/semver/preload.js +0 -4
  676. package/node_modules/semver/range.bnf +0 -17
  677. package/node_modules/semver/ranges/gtr.js +0 -6
  678. package/node_modules/semver/ranges/intersects.js +0 -9
  679. package/node_modules/semver/ranges/ltr.js +0 -6
  680. package/node_modules/semver/ranges/max-satisfying.js +0 -27
  681. package/node_modules/semver/ranges/min-satisfying.js +0 -26
  682. package/node_modules/semver/ranges/min-version.js +0 -63
  683. package/node_modules/semver/ranges/outside.js +0 -82
  684. package/node_modules/semver/ranges/simplify.js +0 -49
  685. package/node_modules/semver/ranges/subset.js +0 -249
  686. package/node_modules/semver/ranges/to-comparators.js +0 -10
  687. package/node_modules/semver/ranges/valid.js +0 -13
  688. package/node_modules/set-blocking/CHANGELOG.md +0 -26
  689. package/node_modules/set-blocking/LICENSE.txt +0 -14
  690. package/node_modules/set-blocking/README.md +0 -31
  691. package/node_modules/set-blocking/index.js +0 -7
  692. package/node_modules/set-blocking/package.json +0 -42
  693. package/node_modules/sharp/LICENSE +0 -191
  694. package/node_modules/sharp/README.md +0 -112
  695. package/node_modules/sharp/dist/channel.cjs +0 -177
  696. package/node_modules/sharp/dist/channel.mjs +0 -177
  697. package/node_modules/sharp/dist/colour.cjs +0 -199
  698. package/node_modules/sharp/dist/colour.mjs +0 -199
  699. package/node_modules/sharp/dist/composite.cjs +0 -213
  700. package/node_modules/sharp/dist/composite.mjs +0 -213
  701. package/node_modules/sharp/dist/constructor.cjs +0 -511
  702. package/node_modules/sharp/dist/constructor.mjs +0 -511
  703. package/node_modules/sharp/dist/index.cjs +0 -25
  704. package/node_modules/sharp/dist/index.d.cts +0 -1999
  705. package/node_modules/sharp/dist/index.d.mts +0 -2046
  706. package/node_modules/sharp/dist/index.mjs +0 -25
  707. package/node_modules/sharp/dist/input.cjs +0 -819
  708. package/node_modules/sharp/dist/input.mjs +0 -819
  709. package/node_modules/sharp/dist/is.cjs +0 -143
  710. package/node_modules/sharp/dist/is.mjs +0 -143
  711. package/node_modules/sharp/dist/libvips.cjs +0 -212
  712. package/node_modules/sharp/dist/libvips.mjs +0 -212
  713. package/node_modules/sharp/dist/operation.cjs +0 -1002
  714. package/node_modules/sharp/dist/operation.mjs +0 -1002
  715. package/node_modules/sharp/dist/output.cjs +0 -1785
  716. package/node_modules/sharp/dist/output.mjs +0 -1785
  717. package/node_modules/sharp/dist/resize.cjs +0 -617
  718. package/node_modules/sharp/dist/resize.mjs +0 -617
  719. package/node_modules/sharp/dist/sharp.cjs +0 -174
  720. package/node_modules/sharp/dist/sharp.mjs +0 -174
  721. package/node_modules/sharp/dist/utility.cjs +0 -301
  722. package/node_modules/sharp/dist/utility.mjs +0 -301
  723. package/node_modules/sharp/install/build.js +0 -38
  724. package/node_modules/sharp/lib/index.d.ts +0 -1999
  725. package/node_modules/sharp/package.json +0 -227
  726. package/node_modules/sharp/src/binding.gyp +0 -303
  727. package/node_modules/sharp/src/common.cc +0 -1186
  728. package/node_modules/sharp/src/common.h +0 -421
  729. package/node_modules/sharp/src/metadata.cc +0 -404
  730. package/node_modules/sharp/src/metadata.h +0 -95
  731. package/node_modules/sharp/src/operations.cc +0 -516
  732. package/node_modules/sharp/src/operations.h +0 -137
  733. package/node_modules/sharp/src/pipeline.cc +0 -1948
  734. package/node_modules/sharp/src/pipeline.h +0 -422
  735. package/node_modules/sharp/src/sharp.cc +0 -43
  736. package/node_modules/sharp/src/stats.cc +0 -186
  737. package/node_modules/sharp/src/stats.h +0 -62
  738. package/node_modules/sharp/src/utilities.cc +0 -289
  739. package/node_modules/sharp/src/utilities.h +0 -22
  740. package/node_modules/string-width/index.d.ts +0 -29
  741. package/node_modules/string-width/index.js +0 -47
  742. package/node_modules/string-width/license +0 -9
  743. package/node_modules/string-width/package.json +0 -56
  744. package/node_modules/string-width/readme.md +0 -50
  745. package/node_modules/strip-ansi/index.d.ts +0 -17
  746. package/node_modules/strip-ansi/index.js +0 -4
  747. package/node_modules/strip-ansi/license +0 -9
  748. package/node_modules/strip-ansi/package.json +0 -54
  749. package/node_modules/strip-ansi/readme.md +0 -46
  750. package/node_modules/which-module/LICENSE +0 -13
  751. package/node_modules/which-module/README.md +0 -58
  752. package/node_modules/which-module/index.js +0 -9
  753. package/node_modules/which-module/package.json +0 -41
  754. package/node_modules/wrap-ansi/index.js +0 -186
  755. package/node_modules/wrap-ansi/license +0 -9
  756. package/node_modules/wrap-ansi/package.json +0 -61
  757. package/node_modules/wrap-ansi/readme.md +0 -97
  758. package/node_modules/ws/LICENSE +0 -20
  759. package/node_modules/ws/README.md +0 -548
  760. package/node_modules/ws/browser.js +0 -8
  761. package/node_modules/ws/index.js +0 -22
  762. package/node_modules/ws/lib/buffer-util.js +0 -131
  763. package/node_modules/ws/lib/constants.js +0 -19
  764. package/node_modules/ws/lib/event-target.js +0 -292
  765. package/node_modules/ws/lib/extension.js +0 -203
  766. package/node_modules/ws/lib/limiter.js +0 -55
  767. package/node_modules/ws/lib/permessage-deflate.js +0 -530
  768. package/node_modules/ws/lib/receiver.js +0 -743
  769. package/node_modules/ws/lib/sender.js +0 -607
  770. package/node_modules/ws/lib/stream.js +0 -161
  771. package/node_modules/ws/lib/subprotocol.js +0 -62
  772. package/node_modules/ws/lib/validation.js +0 -152
  773. package/node_modules/ws/lib/websocket-server.js +0 -562
  774. package/node_modules/ws/lib/websocket.js +0 -1407
  775. package/node_modules/ws/package.json +0 -74
  776. package/node_modules/ws/wrapper.mjs +0 -21
  777. package/node_modules/y18n/CHANGELOG.md +0 -35
  778. package/node_modules/y18n/LICENSE +0 -13
  779. package/node_modules/y18n/README.md +0 -109
  780. package/node_modules/y18n/index.js +0 -188
  781. package/node_modules/y18n/package.json +0 -39
  782. package/node_modules/yargs/CHANGELOG.md +0 -420
  783. package/node_modules/yargs/LICENSE +0 -21
  784. package/node_modules/yargs/README.md +0 -140
  785. package/node_modules/yargs/build/lib/apply-extends.d.ts +0 -2
  786. package/node_modules/yargs/build/lib/apply-extends.js +0 -65
  787. package/node_modules/yargs/build/lib/argsert.d.ts +0 -2
  788. package/node_modules/yargs/build/lib/argsert.js +0 -65
  789. package/node_modules/yargs/build/lib/command.d.ts +0 -64
  790. package/node_modules/yargs/build/lib/command.js +0 -416
  791. package/node_modules/yargs/build/lib/common-types.d.ts +0 -36
  792. package/node_modules/yargs/build/lib/common-types.js +0 -25
  793. package/node_modules/yargs/build/lib/completion-templates.d.ts +0 -2
  794. package/node_modules/yargs/build/lib/completion-templates.js +0 -50
  795. package/node_modules/yargs/build/lib/completion.d.ts +0 -21
  796. package/node_modules/yargs/build/lib/completion.js +0 -135
  797. package/node_modules/yargs/build/lib/is-promise.d.ts +0 -1
  798. package/node_modules/yargs/build/lib/is-promise.js +0 -9
  799. package/node_modules/yargs/build/lib/levenshtein.d.ts +0 -1
  800. package/node_modules/yargs/build/lib/levenshtein.js +0 -58
  801. package/node_modules/yargs/build/lib/middleware.d.ts +0 -10
  802. package/node_modules/yargs/build/lib/middleware.js +0 -57
  803. package/node_modules/yargs/build/lib/obj-filter.d.ts +0 -1
  804. package/node_modules/yargs/build/lib/obj-filter.js +0 -14
  805. package/node_modules/yargs/build/lib/parse-command.d.ts +0 -11
  806. package/node_modules/yargs/build/lib/parse-command.js +0 -36
  807. package/node_modules/yargs/build/lib/process-argv.d.ts +0 -2
  808. package/node_modules/yargs/build/lib/process-argv.js +0 -31
  809. package/node_modules/yargs/build/lib/usage.d.ts +0 -49
  810. package/node_modules/yargs/build/lib/usage.js +0 -540
  811. package/node_modules/yargs/build/lib/validation.d.ts +0 -34
  812. package/node_modules/yargs/build/lib/validation.js +0 -330
  813. package/node_modules/yargs/build/lib/yargs.d.ts +0 -274
  814. package/node_modules/yargs/build/lib/yargs.js +0 -1190
  815. package/node_modules/yargs/build/lib/yerror.d.ts +0 -4
  816. package/node_modules/yargs/build/lib/yerror.js +0 -11
  817. package/node_modules/yargs/index.js +0 -40
  818. package/node_modules/yargs/locales/be.json +0 -46
  819. package/node_modules/yargs/locales/de.json +0 -46
  820. package/node_modules/yargs/locales/en.json +0 -51
  821. package/node_modules/yargs/locales/es.json +0 -46
  822. package/node_modules/yargs/locales/fi.json +0 -49
  823. package/node_modules/yargs/locales/fr.json +0 -53
  824. package/node_modules/yargs/locales/hi.json +0 -49
  825. package/node_modules/yargs/locales/hu.json +0 -46
  826. package/node_modules/yargs/locales/id.json +0 -50
  827. package/node_modules/yargs/locales/it.json +0 -46
  828. package/node_modules/yargs/locales/ja.json +0 -51
  829. package/node_modules/yargs/locales/ko.json +0 -49
  830. package/node_modules/yargs/locales/nb.json +0 -44
  831. package/node_modules/yargs/locales/nl.json +0 -49
  832. package/node_modules/yargs/locales/nn.json +0 -44
  833. package/node_modules/yargs/locales/pirate.json +0 -13
  834. package/node_modules/yargs/locales/pl.json +0 -49
  835. package/node_modules/yargs/locales/pt.json +0 -45
  836. package/node_modules/yargs/locales/pt_BR.json +0 -48
  837. package/node_modules/yargs/locales/ru.json +0 -46
  838. package/node_modules/yargs/locales/th.json +0 -46
  839. package/node_modules/yargs/locales/tr.json +0 -48
  840. package/node_modules/yargs/locales/zh_CN.json +0 -48
  841. package/node_modules/yargs/locales/zh_TW.json +0 -47
  842. package/node_modules/yargs/package.json +0 -92
  843. package/node_modules/yargs/yargs.js +0 -14
  844. package/node_modules/yargs-parser/CHANGELOG.md +0 -601
  845. package/node_modules/yargs-parser/LICENSE.txt +0 -14
  846. package/node_modules/yargs-parser/README.md +0 -449
  847. package/node_modules/yargs-parser/index.js +0 -1032
  848. package/node_modules/yargs-parser/lib/tokenize-arg-string.js +0 -40
  849. package/node_modules/yargs-parser/package.json +0 -46
@@ -1,50 +1,69 @@
1
1
  #!/usr/bin/env node
2
2
  import { phonePairingSteps, desktopSetupSteps, pairingDisplayText } from '../src/onboarding.mjs';
3
- import { lifecycle, readRecord } from '../src/service-lifecycle.mjs';
4
- import { runtimePaths } from '../src/platform/windows/runtime-paths.mjs';
5
- import * as host from '../src/platform/windows/service-host.mjs';
3
+ import { lifecycle, readRecord, writeRecord } from '../src/service-lifecycle.mjs';
4
+ import { runtimePaths } from '../src/platform/runtime-paths.mjs';
5
+ import { openFile } from '../src/platform/file-opener.mjs';
6
+ import * as host from '../src/platform/service-host.mjs';
6
7
  import { installService, uninstallService, packageRoot } from '../src/service-install.mjs';
7
8
  import { installSkill, removeSkill, inspectSkill } from '../src/skill-install.mjs';
8
- import { doctor } from '../src/service-doctor.mjs';
9
+ import { doctor, formatDoctorOutput } from '../src/service-doctor.mjs';
9
10
  import { launchDesktop } from '../src/desktop-launcher.mjs';
10
- import { desktopHost, desktopShortcuts, residentStartup, resolveStateRoot } from '../src/platform/windows/desktop-host.mjs';
11
- import { debugUi } from '../src/debug-ui.mjs';
11
+ import { desktopHost, removeDesktopShortcut, residentStartup, resolveStateRoot } from '../src/platform/desktop-host.mjs';
12
12
  import { selfRelay } from '../src/self-relay/lifecycle.mjs';
13
- import { fileURLToPath } from 'node:url';
13
+ import { importRelayConfig } from '../src/relay-config-import.mjs';
14
+ import { fileURLToPath, pathToFileURL } from 'node:url';
14
15
  import path from 'node:path';
16
+ import { executableKey } from '../src/platform/path-identity.mjs';
15
17
  import fs from 'node:fs';
16
- import { spawn } from 'node:child_process';
17
- import { setTimeout as delay } from 'node:timers/promises';
18
- import { requestRecovery, recoveryStatus, recoveryWarning } from '../src/shared-recovery.mjs';
19
- import { configureManagedEnvironment, clearManagedEnvironment } from '../src/platform/windows/user-environment.mjs';
20
- import { resolveCodexRuntime } from '../src/platform/windows/codex-runtime.mjs';
18
+ import { spawn } from 'node:child_process';
19
+ import { setTimeout as delay } from 'node:timers/promises';
20
+ import { requestRecovery, recoveryWarning } from '../src/shared-recovery.mjs';
21
+ import { configureManagedEnvironment, clearManagedEnvironment } from '../src/platform/user-environment.mjs';
22
+ import { resolveCodexRuntime } from '../src/platform/codex-runtime.mjs';
23
+ import { controlRequest } from '../src/service-control.mjs';
24
+ import { processAlive } from '../src/background-process.mjs';
25
+ import { prepareNativePackage } from '../src/platform/native-package.mjs';
26
+ import { readManagedEndpoint } from '../src/managed-endpoint.mjs';
27
+ import { powerConfigPath, powerEnabled } from '../src/service-power.mjs';
28
+ import { readDotsTasks } from '../src/dots-task-catalog.mjs';
29
+ import { installDesktopHelper, desktopHelperStatus, removeDesktopHelper } from '../src/platform/windows/desktop-helper.mjs';
21
30
 
22
- const help = `Code Relax(Windows)
23
- 用法:relax <setup|doctor|skill-install|skill-remove|uninstall|start|shared-start|shortcuts|pair|status|stop> [--json]
24
- setup 部署并启动固定目录服务、受管 app-server 和登录自启动;安全配置 Desktop 后续接入
25
- start 启动或复用 Bridge,并恢复已配置的私有中继
26
- shared-start 启动或复用 Codex 内核,再启动 Desktop、Bridge 和已配置的私有中继
27
- shared-recover --confirm 重新打开 Desktop 并接入 Codex 内核;不强制重启已有内核
28
- shared-recovery-status 查看最近一次恢复的实际阶段和结果
29
- autostart-enable / autostart-disable / autostart-status 管理当前用户登录时启动 Bridge
30
- shortcuts 创建 Codex 内核桌面快捷方式
31
- pair 启动或复用工作站服务,并打开一次性配对二维码
32
- status 查看服务健康状态
33
- stop 停止服务
34
- dev 在 Bridge 端口开启调试页面(实时读取当前源码/包资源)
35
- dev-status 查看 Bridge 调试页面状态
36
- dev-stop 关闭调试页面,不停止 Bridge
37
- relay-start 启动或复用私有中继,已有授权直接恢复,首次授权生成二维码
38
- relay-shared-start 启动 Codex 内核和 Bridge 后连接私有中继(需先退出当前 Codex)
39
- relay-status 查看私有中继连接器及手机连接状态
40
- relay-stop 停止私有中继连接器,不停止 Bridge 或 Codex
41
- relay-revoke 撤销这台电脑的全部移动设备授权(停止连接器不会撤销授权)
42
- doctor 检查安装、Node、Codex 内核、网络和 Skill,提示防火墙处理方式
43
- skill-install 安装/更新当前用户的 Codex Skill,不覆盖自定义文件
44
- skill-remove 移除本包安装且未修改的 Skill
45
- uninstall 停止并移除固定目录服务和本包 Skill,清理自有 Desktop 环境变量,保留其他配置与附件
46
- 默认监听 0.0.0.0,手机与电脑需在同一受信任局域网。
47
- --json 输出机器可读结果;统一二维码不含 LAN 地址、Bridge Token 或中继地址。`;
31
+ const help = `Code Relax(Windows / macOS / Linux)
32
+ 用法:relax <命令>
33
+ 常用指令:
34
+ start 启动或复用桌面服务和 Codex 内核,并恢复已配置的 Code Relax 中继
35
+ pair 启动或复用桌面服务,并打开一次性配对二维码
36
+ pair --expires <带时区的截止时间> 创建本工作站可重复使用的长期二维码
37
+ pair-list 查看本工作站长期邀请的 ID 和截止时间
38
+ pair-revoke <邀请ID> 废止本工作站指定长期邀请
39
+ devices 查看本工作站配对授权及最后连接时间
40
+ device-revoke <授权ID> --confirm 撤销指定配对授权
41
+ dots-tasks 读取当前 ChatGPT 账号的 Dots 委派任务与最近轮次状态
42
+ 维护指令:
43
+ setup 部署并启动桌面服务、Codex 内核和登录自启动;安全配置 Desktop 后续接入
44
+ setup --desktop-helper (Windows)同时安装受保护的桌面操作辅助服务,首次需要工作站 UAC 授权
45
+ desktop-helper-install (Windows)单独安装桌面操作辅助服务,保持现有桌面服务和 Codex 内核
46
+ desktop-helper-status (Windows)查看桌面操作辅助服务状态
47
+ desktop-helper-remove (Windows)移除桌面操作辅助服务,需要工作站 UAC 授权
48
+ doctor 简单检查工作站是否正常
49
+ diag 输出详细诊断报告,供客服或技术人员排查
50
+ keep-awake 默认保持电脑唤醒;查看状态
51
+ keep-awake on|off 开启或关闭保持唤醒,立即生效并记住选择;允许屏幕熄灭
52
+ kernel-restart --confirm 重启 Codex 内核并启用已选更新;等待新内核就绪
53
+ desktop-recover --confirm 重新打开 Desktop 并接入 Codex 内核;不强制重启已有内核
54
+ uninstall 停止并移除固定目录服务和本包 Skill,清理自有 Desktop 环境变量,保留其他配置与附件
55
+ 默认监听 0.0.0.0,移动端与电脑需在同一受信任局域网。
56
+ --json 仅供安装脚本等程序调用。`;
57
+
58
+ function currentNodeExecutable() {
59
+ const link = process.env.NVM_SYMLINK && path.join(process.env.NVM_SYMLINK, 'node.exe');
60
+ if (link && fs.existsSync(link)) {
61
+ try {
62
+ if (fs.realpathSync(link).toLowerCase() === fs.realpathSync(process.execPath).toLowerCase()) return link;
63
+ } catch {}
64
+ }
65
+ return process.execPath;
66
+ }
48
67
 
49
68
  async function main() {
50
69
  const [command, ...flags] = process.argv.slice(2);
@@ -52,266 +71,369 @@ async function main() {
52
71
  console.log(help);
53
72
  return;
54
73
  }
55
- if (!['autostart-enable', 'autostart-disable', 'autostart-status', 'shared-recover', 'shared-recovery-status', 'relay-shared-start', 'relay-revoke', 'relay-start', 'relay-status', 'relay-stop', 'dev', 'dev-status', 'dev-stop', 'setup', 'doctor', 'skill-install', 'skill-remove', 'uninstall', 'shared-start', 'shortcuts', 'start', 'pair', 'status', 'stop'].includes(command)
56
- || flags.some(flag => flag !== '--json' && !(command === 'shared-recover' && flag === '--confirm'))) {
74
+ const options = flags.filter(flag => flag !== '--json');
75
+ const longPair = command === 'pair' && options.length === 2 && options[0] === '--expires';
76
+ const revokeInvite = command === 'pair-revoke' && options.length === 1 && /^[\w-]{16,128}$/.test(options[0]);
77
+ const revokeDevice = command === 'device-revoke' && options.length === 2 && /^[\w-]{16,128}$/.test(options[0]) && options[1] === '--confirm';
78
+ const powerCommand = command === 'keep-awake';
79
+ if (powerCommand && !(options.length === 0 || options.length === 1 && ['on', 'off'].includes(options[0]))) throw new Error('用法:relax keep-awake [on|off]');
80
+ if (!['keep-awake', 'kernel-restart', 'desktop-recover', 'setup', 'doctor', 'diag', 'uninstall', 'start', 'pair', 'pair-list', 'pair-revoke', 'devices', 'device-revoke', 'dots-tasks', 'desktop-helper-install', 'desktop-helper-status', 'desktop-helper-remove'].includes(command)
81
+ || (!powerCommand && !longPair && !revokeInvite && !revokeDevice && (['pair-revoke', 'device-revoke'].includes(command) || options.some(flag => !((['kernel-restart', 'desktop-recover'].includes(command) && flag === '--confirm') || (command === 'setup' && ['--desktop-helper', '--preserve-codex'].includes(flag))))))) {
57
82
  throw new Error('无效命令或参数。使用 --help 查看用法。');
58
83
  }
59
- if (process.platform !== 'win32') throw new Error('当前被控端仅支持 Windows。');
84
+ const inviteExpires = longPair ? Date.parse(options[1]) : undefined;
85
+ if (longPair && (!/(Z|[+-]\d{2}:\d{2})$/.test(options[1]) || !Number.isSafeInteger(inviteExpires) || inviteExpires <= Date.now())) {
86
+ throw new Error('截止时间必须在未来且含时区,例如 2026-11-01T00:00:00+08:00。');
87
+ }
88
+ if (!['win32', 'darwin', 'linux'].includes(process.platform)) throw new Error('工作站目前支持 Windows、macOS 和 Linux。');
89
+ if (process.platform !== 'win32' && (command.startsWith('desktop-helper-') || options.includes('--desktop-helper')))
90
+ throw new Error('此平台不提供远程桌面画面、鼠标和键盘控制。');
91
+ if (command === 'desktop-recover' && desktopHost.desktopIntegration === false)
92
+ throw new Error('此平台的 Codex Desktop 自动接入尚未支持。');
60
93
  const json = flags.includes('--json');
94
+ if (['desktop-helper-install', 'desktop-helper-status', 'desktop-helper-remove'].includes(command)) {
95
+ const result = command === 'desktop-helper-install' ? await installDesktopHelper() : command === 'desktop-helper-remove' ? await removeDesktopHelper() : await desktopHelperStatus();
96
+ console.log(json ? JSON.stringify(result) : result.removed ? '桌面操作辅助服务已移除。' : result.running ? '桌面操作辅助服务已就绪,手机可按需获取画面并确认点击。' : '桌面操作辅助服务尚未就绪,请运行 relax desktop-helper-install。');
97
+ return;
98
+ }
99
+ if (command === 'dots-tasks') {
100
+ const url = readManagedEndpoint(runtimePaths().stateRoot);
101
+ if (!url) throw new Error('Codex 内核尚未就绪,请先运行 relax start。');
102
+ const result = await readDotsTasks(url);
103
+ const statuses = { completed: '完成', inProgress: '进行中', failed: '失败', interrupted: '已中断' };
104
+ console.log(json ? JSON.stringify(result) : result.tasks.length
105
+ ? result.tasks.map(task => `${task.title || task.id} — ${statuses[task.latestTurn?.status] || task.status || '暂无轮次'}\n${task.cwd || ''}`).join('\n\n')
106
+ : '当前账号没有未归档的 Dots 委派任务。');
107
+ return;
108
+ }
61
109
  const paths = runtimePaths();
62
110
  const { stateRoot, serviceRoot } = paths;
63
- if (['relay-shared-start', 'relay-revoke', 'relay-start', 'relay-status', 'relay-stop'].includes(command)) {
64
- if (command === 'relay-shared-start') {
65
- const existing = await selfRelay('relay-status', stateRoot);
66
- if (existing.running && existing.transportMode !== 'lan-shared') throw new Error('旧连接器仍在运行,请先执行 relay-stop;不会自动中断手机连接。');
67
- const result = await new Promise((resolve, reject) => {
68
- const child = spawn(process.execPath, [fileURLToPath(import.meta.url), 'shared-start', '--json'], { windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] });
69
- let output = '', errors = '';
70
- child.stdout.on('data', chunk => { output += chunk; }); child.stderr.on('data', chunk => { errors += chunk; });
71
- child.once('error', reject);
72
- child.once('exit', code => { if (code) reject(new Error(errors.trim().replace(/^(?:Code Relax:)+/u, '') || 'Codex 内核启动失败')); else { try { resolve(JSON.parse(output)); } catch { reject(new Error('Codex 内核启动结果无法确认,未启动中继')); } } });
73
- });
74
- if (!result.bridgeReady) { console.log(json ? JSON.stringify(result) : result.displayText); return; }
111
+ if (powerCommand) {
112
+ const session = readRecord(path.join(stateRoot, 'bridge-session.json'));
113
+ let live = false;
114
+ if (session?.controlPort) {
115
+ try { await controlRequest(session); live = true; }
116
+ catch (error) { if (error.code !== 'ECONNREFUSED') throw error; }
75
117
  }
76
- const result = await selfRelay(command === 'relay-shared-start' ? 'relay-start' : command, stateRoot, command === 'relay-shared-start' ? 'lan-shared' : '');
77
- console.log(json ? JSON.stringify(result) : `${result.displayText}${result.qrPath ? '\n二维码:' + result.qrPath : ''}`);
78
- return;
79
- }
80
- if (['dev', 'dev-status', 'dev-stop'].includes(command)) {
81
- const result = await debugUi(command, stateRoot);
82
- console.log(json ? JSON.stringify(result) : result.message || JSON.stringify(result));
118
+ let result;
119
+ if (live) {
120
+ const action = options[0] === 'on' ? 'enable' : options[0] === 'off' ? 'disable' : 'status';
121
+ result = await controlRequest(session, 'POST', `keep-awake-${action}`);
122
+ } else {
123
+ if (options.length) { fs.mkdirSync(stateRoot, { recursive: true }); writeRecord(powerConfigPath(stateRoot), { enabled: options[0] === 'on' }); }
124
+ result = { enabled: powerEnabled(stateRoot), active: false, error: '', serviceStopped: true };
125
+ }
126
+ console.log(json ? JSON.stringify(result) : `保持唤醒:${result.enabled ? '已开启' : '已关闭'};${result.active ? '正在生效,允许屏幕熄灭' : result.serviceStopped ? '服务未运行,下次启动应用此设置' : result.error || '未生效'}`);
127
+ if (result.error) process.exitCode = 1;
83
128
  return;
84
129
  }
85
130
  const installedEntry = path.join(serviceRoot, 'dist/bin/codex-remote.mjs');
86
- if (['autostart-enable', 'autostart-disable', 'autostart-status', 'shared-recover', 'shared-recovery-status', 'shared-start', 'shortcuts', 'start', 'pair', 'status', 'stop'].includes(command) && path.resolve(fileURLToPath(import.meta.url)).toLowerCase() !== installedEntry.toLowerCase()) {
87
- if (!fs.existsSync(installedEntry)) throw new Error('尚未部署服务,请先执行 relax setup。');
88
- const executable = readRecord(path.join(serviceRoot, 'installation.json'))?.nodeExecutable;
89
- if (!executable || !fs.existsSync(executable)) throw new Error('安装时选用的 Node 不存在,请重新执行 relax setup。');
131
+ const installationPath = path.join(serviceRoot, 'installation.json');
132
+ const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(Number);
133
+ const currentNodeSupported = nodeMajor > 22 || (nodeMajor === 22 && nodeMinor >= 12);
134
+ const installed = executableKey(fileURLToPath(import.meta.url)) === executableKey(installedEntry);
135
+ const installation = readRecord(installationPath);
136
+ if (installation?.nodeExecutable && !fs.existsSync(installation.nodeExecutable) && currentNodeSupported
137
+ && ['start', 'pair', 'doctor'].includes(command)) {
138
+ writeRecord(installationPath, { ...installation, nodeExecutable: currentNodeExecutable() });
139
+ }
140
+ if (['kernel-restart', 'desktop-recover', 'start', 'pair', 'pair-list', 'pair-revoke', 'devices', 'device-revoke'].includes(command) && !installed) {
141
+ if (!fs.existsSync(installedEntry)) throw new Error('尚未部署服务,请先执行 relax setup。');
142
+ const executable = readRecord(installationPath)?.nodeExecutable;
143
+ if (!executable || !fs.existsSync(executable)) throw new Error('安装时选用的 Node 不存在,请重新执行 relax setup。');
90
144
  const child = spawn(executable, [installedEntry, command, ...flags], { stdio: 'inherit', windowsHide: true });
91
145
  const code = await new Promise((resolve, reject) => { child.once('error', reject); child.once('exit', resolve); });
92
146
  process.exitCode = code ?? 1;
93
147
  return;
94
148
  }
95
- host.migrateState(stateRoot);
96
- const service = lifecycle({ stateRoot, host });
97
- if (command.startsWith('autostart-')) {
98
- const installation = readRecord(path.join(serviceRoot, 'installation.json'));
99
- if (!installation?.nodeExecutable) throw new Error('请先执行 setup。');
100
- const result = await residentStartup({ serviceRoot, nodeExecutable: installation.nodeExecutable }, command.slice('autostart-'.length));
101
- console.log(json ? JSON.stringify(result) : `登录启动:${result.enabled ? '已启用' : '已关闭'}`); return;
102
- }
103
- if (command === 'shared-recover' || command === 'shared-recovery-status') {
104
- if (command === 'shared-recover' && !flags.includes('--confirm')) throw new Error(recoveryWarning + ' 使用 --confirm 确认。');
105
- const result = command === 'shared-recover'
106
- ? await requestRecovery(stateRoot, { confirmed: true }) : await recoveryStatus(stateRoot);
107
- console.log(json ? JSON.stringify(result) : `${result.message || result.status}${result.error ? '\n' + result.error : ''}\n${result.operationId || ''}`.trim());
108
- return;
109
- }
110
- if (command === 'pair') {
111
- let bridge = await service.status();
112
- if (!bridge.running) {
113
- await service.start();
114
- bridge = await service.status();
115
- }
116
- if (!bridge.running) throw new Error('Code Relax 工作站服务未能启动。');
117
- const result = await selfRelay('relay-pair', stateRoot);
118
- if (!json && result.qrPath) {
119
- const viewer = spawn('explorer.exe', [result.qrPath], { detached: true, stdio: 'ignore', windowsHide: true });
120
- viewer.unref();
121
- }
122
- console.log(json ? JSON.stringify(result) : `${result.displayText}\n二维码:${result.qrPath}`);
123
- return;
124
- }
125
- if (command === 'shortcuts') {
126
- const installation = readRecord(path.join(serviceRoot, 'installation.json'));
127
- if (!installation?.nodeExecutable) throw new Error('请先执行 relax setup。');
128
- const shortcuts = await desktopShortcuts({ serviceRoot, nodeExecutable: installation.nodeExecutable });
129
- console.log(json ? JSON.stringify({ shortcuts }) : `桌面快捷方式已创建:\n${shortcuts.join('\n')}`);
149
+ const service = lifecycle({ stateRoot, host });
150
+ const ensureAutostart = async () => {
151
+ const currentInstallation = readRecord(installationPath);
152
+ if (!currentInstallation?.nodeExecutable) throw new Error('请先执行 setup。');
153
+ const startup = { serviceRoot, nodeExecutable: currentInstallation.nodeExecutable };
154
+ const current = await residentStartup(startup, 'status');
155
+ if (current.enabled) return { ...current, repaired: false };
156
+ const result = await residentStartup(startup, 'enable');
157
+ return { ...result, repaired: true };
158
+ };
159
+ if (command === 'kernel-restart') {
160
+ if (!flags.includes('--confirm')) {
161
+ throw new Error('重启会立即结束当前 Codex 内核,正在运行的任务、待审批和未确认结果可能中断;恢复后不会自动重发。使用 --confirm 确认。');
162
+ }
163
+ const previous = await service.status();
164
+ if (!previous.running) throw new Error('桌面服务尚未运行,请先执行 relax start。');
165
+ await service.restartManagedAppServer(true);
166
+ const deadline = Date.now() + 60_000;
167
+ let current = await service.status();
168
+ while (current.managedAppServer?.restart?.status === 'running' && Date.now() < deadline) {
169
+ await delay(250);
170
+ current = await service.status();
171
+ }
172
+ if (current.managedAppServer?.restart?.status === 'failed') {
173
+ throw new Error(current.managedAppServer.restart.error || 'Codex 内核重启失败。');
174
+ }
175
+ if (!current.running || current.managedAppServer?.state !== 'ready'
176
+ || current.managedAppServer?.restart?.status !== 'completed') {
177
+ throw new Error('Codex 内核未在 60 秒内完成重启,请运行 relax doctor 查看状态。');
178
+ }
179
+ if (previous.managedAppServer?.updatePending && current.managedAppServer.updatePending) {
180
+ throw new Error('Codex 内核已重启,但更新仍未应用;请运行 relax doctor 查看状态。');
181
+ }
182
+ const result = { status: 'completed', message: previous.managedAppServer?.updatePending
183
+ ? 'Codex 内核已重启并应用更新。' : 'Codex 内核已重启。',
184
+ previousVersion: previous.managedAppServer?.version || null,
185
+ version: current.managedAppServer.version || null,
186
+ selectedVersion: current.managedAppServer.selectedVersion || null,
187
+ updateApplied: previous.managedAppServer?.updatePending === true,
188
+ updatePending: current.managedAppServer.updatePending === true,
189
+ pid: current.managedAppServer.pid || null,
190
+ executionReady: current.execution?.ready === true };
191
+ console.log(json ? JSON.stringify(result) : `${result.message}\n版本:${result.version || '未知'}\n执行状态:${result.executionReady ? '已就绪' : '正在恢复'}`);
130
192
  return;
131
193
  }
132
- if (command === 'doctor') {
133
- const result = await doctor({ paths, host, service });
134
- console.log(json ? JSON.stringify(result) : result.checks.map(item => `[${item.status}] ${item.message}`).join('\n'));
135
- if (!result.ready) process.exitCode = 1;
194
+ if (command === 'desktop-recover') {
195
+ if (!flags.includes('--confirm')) throw new Error(recoveryWarning + ' 使用 --confirm 确认。');
196
+ const result = await requestRecovery(stateRoot, { confirmed: true });
197
+ console.log(json ? JSON.stringify(result) : `${result.message || result.status}${result.error ? '\n' + result.error : ''}\n${result.operationId || ''}`.trim());
136
198
  return;
137
199
  }
138
- if (command === 'skill-install' || command === 'skill-remove') {
139
- const result = command === 'skill-install'
140
- ? installSkill(path.join(packageRoot(path.dirname(fileURLToPath(import.meta.url))), 'dist/skills/code-relax/SKILL.md'))
141
- : removeSkill();
142
- console.log(json ? JSON.stringify(result) : `${result.message}\n${result.target}`);
143
- return;
200
+ if (command === 'devices' || command === 'device-revoke') {
201
+ const result = await selfRelay(command === 'devices' ? 'devices-list' : 'device-revoke', stateRoot,
202
+ command === 'device-revoke' ? { id: options[0], confirmed: true } : undefined);
203
+ console.log(json ? JSON.stringify(result) : result.displayText); return;
144
204
  }
145
- if (command === 'uninstall') {
146
- const skill = inspectSkill();
147
- let environment;
148
- const result = await uninstallService(paths, service, async () => {
149
- environment = await clearManagedEnvironment(stateRoot);
150
- const installation = readRecord(path.join(serviceRoot, 'installation.json'));
151
- if (installation?.nodeExecutable) await desktopShortcuts({ serviceRoot, nodeExecutable: installation.nodeExecutable }, true);
152
- if (installation?.nodeExecutable) await residentStartup({ serviceRoot, nodeExecutable: installation.nodeExecutable }, 'disable');
153
- });
154
- result.environment = environment;
155
- result.skill = skill.managed ? removeSkill() : { removed: false, message: '未移除自定义或未安装的 Skill。' };
156
- result.message = environment?.preserved
157
- ? '固定目录服务已卸载;检测到用户自定义的 CODEX_APP_SERVER_WS_URL,已保留。配置、附件和可能仍在执行任务的 app-server 也已保留;重启 Windows可结束该进程。npm 命令入口可再用 npm uninstall -g @walkhi/code-relax 移除。'
158
- : '固定目录服务已卸载;Code Relax 设置的 app-server 环境变量已清理,其他配置、附件和可能仍在执行任务的 app-server 已保留;重启 Windows可结束该进程。npm 命令入口可再用 npm uninstall -g @walkhi/code-relax 移除。';
159
- console.log(json ? JSON.stringify(result) : `${result.message}\n${result.skill.message}`);
205
+ if (command === 'pair-list' || command === 'pair-revoke') {
206
+ const result = await selfRelay(command === 'pair-list' ? 'invite-list' : 'invite-revoke', stateRoot,
207
+ command === 'pair-revoke' ? { id: options[0] } : undefined);
208
+ console.log(json ? JSON.stringify(result) : result.displayText);
160
209
  return;
161
210
  }
162
- if (command === 'setup') {
163
- const [major, minor] = process.versions.node.split('.').map(Number);
164
- if (major < 22 || (major === 22 && minor < 12)) throw new Error('需要 Node >=22.12。');
165
- const physicalStateRoot = await resolveStateRoot(stateRoot);
166
- // Preserve the effective package view; never replace a newer file already in it.
167
- for (const name of ['bridge-config.json', 'bridge-session.json', 'bridge-startup-context.json', 'execution-mode.json',
168
- 'self-relay-config.json', 'self-relay-session.json', 'lan-device-authorizations.json', 'shared-desktop.json',
169
- 'managed-app-server.json', 'managed-environment.json', 'shared-recovery.json', 'shared-recovery.lock', 'debug-ui-session.json']) {
170
- const source = path.join(stateRoot, name), target = path.join(physicalStateRoot, name);
171
- if (fs.existsSync(source) && !fs.existsSync(target)) fs.copyFileSync(source, target, fs.constants.COPYFILE_EXCL);
172
- }
173
- const hadInstalledService = fs.existsSync(path.join(serviceRoot, 'installation.json'));
174
- const desktopBeforeSetup = await desktopHost.inspect();
175
- const runtime = await resolveCodexRuntime(physicalStateRoot, { refresh: true });
176
- const desktopNeedsAttach = desktopBeforeSetup.running && !await host.sharedServiceUrl();
177
- const previous = hadInstalledService ? await service.status() : { processRunning: false };
178
- const previousRelay = await selfRelay('relay-status', stateRoot);
179
- const resumeAfterUpdate = previous.processRunning || previousRelay.running;
180
- const executable = fs.realpathSync(process.execPath);
181
- const startInstalled = async () => {
182
- const entry = path.join(serviceRoot, 'dist/bin/codex-remote.mjs');
183
- const child = spawn(executable, [entry, 'start', '--json'], { windowsHide: true, stdio: ['ignore', 'ignore', 'pipe'] });
184
- let errors = '';
185
- child.stderr.on('data', chunk => { errors += chunk; });
186
- const code = await new Promise((resolve, reject) => { child.once('error', reject); child.once('exit', resolve); });
187
- if (code) {
188
- try { await selfRelay('relay-stop', stateRoot); } catch {}
189
- try { await service.stop(); } catch {}
190
- throw new Error(errors.trim().replace(/^(?:Code Relax:)+/u, '') || 'Bridge 启动失败');
191
- }
192
- };
193
- let stoppedForUpdate = false;
194
- const installed = await installService(packageRoot(path.dirname(fileURLToPath(import.meta.url))), serviceRoot, executable, physicalStateRoot, {
195
- beforeActivate: async () => {
196
- if (desktopNeedsAttach) await desktopHost.closeDesktop(desktopBeforeSetup.desktop);
197
- stoppedForUpdate = resumeAfterUpdate;
198
- if (previousRelay.running) await selfRelay('relay-stop', stateRoot);
199
- if (previous.processRunning) await service.stop();
200
- },
201
- verifyActivation: async () => { await startInstalled(); },
202
- restoreActivation: async () => { if (stoppedForUpdate) await startInstalled(); },
203
- });
204
- const deadline = Date.now() + 35_000;
205
- let bridge = await service.status();
206
- while (bridge.running && !['ready', 'failed'].includes(bridge.managedAppServer?.state) && Date.now() < deadline) {
207
- await delay(250);
208
- bridge = await service.status();
209
- }
210
- if (!bridge.running || bridge.managedAppServer?.state !== 'ready') {
211
- throw new Error(bridge.managedAppServer?.error || 'Bridge 已安装,但受管 app-server 未就绪;未写入 Desktop 环境变量。');
212
- }
213
- const environment = desktopBeforeSetup.desktop
214
- ? await configureManagedEnvironment(physicalStateRoot) : { configured: false, reason: 'desktop-not-installed' };
215
- let managedAppServerMigrated = false;
216
- const managedAppServerMigration = {
217
- required: bridge.managedAppServer.launcherRestartRequired === true,
218
- restarted: false,
219
- previousPid: bridge.managedAppServer.pid || null,
220
- };
221
- let desktopRestarted = false;
222
- let desktopRestartReason = null;
223
- if (managedAppServerMigration.required) {
224
- const desktopInfo = await desktopHost.inspect();
225
- const desktopAttached = desktopInfo.running
226
- && (bridge.desktop?.attachedToManagedServer === true || Boolean(await host.sharedServiceUrl()));
227
- if (desktopAttached) await desktopHost.closeDesktop(desktopInfo.desktop);
228
- await service.restartManagedAppServer();
229
- const migrationDeadline = Date.now() + 40_000;
230
- do {
231
- await delay(250);
232
- bridge = await service.status();
233
- if (bridge.managedAppServer?.restart?.status === 'failed') {
234
- throw new Error(bridge.managedAppServer.restart.error || '受管 app-server 启动链迁移失败。');
235
- }
236
- } while (Date.now() < migrationDeadline && (!bridge.running || bridge.managedAppServer?.state !== 'ready' || bridge.managedAppServer.launcherRestartRequired));
237
- if (!bridge.running || bridge.managedAppServer?.state !== 'ready' || bridge.managedAppServer.launcherRestartRequired) {
238
- throw new Error('受管 app-server 未在 40 秒内完成启动链迁移。');
239
- }
240
- managedAppServerMigrated = true;
241
- managedAppServerMigration.restarted = true;
242
- if (desktopAttached) {
243
- await launchDesktop('shared', { stateRoot: physicalStateRoot, host: desktopHost });
244
- desktopRestarted = true;
245
- desktopRestartReason = 'app-server-migration';
246
- bridge = await service.status();
247
- }
248
- }
249
- const autostart = await residentStartup(installed, 'enable');
250
- if (desktopNeedsAttach && !desktopRestarted) {
251
- const currentDesktop = await desktopHost.inspect();
252
- if (currentDesktop.running) await desktopHost.closeDesktop(currentDesktop.desktop);
253
- await launchDesktop('shared', { stateRoot: physicalStateRoot, host: desktopHost });
254
- desktopRestarted = true;
255
- desktopRestartReason = 'attach-managed-server';
256
- bridge = await service.status();
257
- }
258
- installed.autostart = autostart;
259
- installed.restarted = resumeAfterUpdate;
260
- installed.environment = environment;
261
- installed.managedAppServer = bridge.managedAppServer;
262
- installed.codexRuntime = runtime;
263
- installed.managedAppServerMigrated = managedAppServerMigrated;
264
- installed.managedAppServerMigration = { ...managedAppServerMigration,
265
- currentPid: bridge.managedAppServer.pid || null,
266
- launcherRevision: bridge.managedAppServer.launcherRevision ?? null };
267
- installed.desktopRestarted = desktopRestarted;
268
- installed.desktopRestartReason = desktopRestartReason;
269
- const migrationText = managedAppServerMigrated ? '已自动重建旧启动链的 app-server;安装前尚未完成的任务可能已中断。\n' : '';
270
- const restartText = desktopRestarted
271
- ? 'Codex Desktop 已干净重启并重新接入受管 app-server。'
272
- : desktopBeforeSetup.desktop ? 'Codex Desktop 使用同一受管 app-server;手机控制不依赖 Desktop 是否打开。'
273
- : '使用独立 Codex CLI;无需安装 Codex Desktop。';
274
- console.log(json ? JSON.stringify({ ...installed, nextSteps: desktopSetupSteps, displayText: `${migrationText}${desktopSetupSteps.join('\n')}\n${restartText}` }) : `服务已安装:${installed.serviceRoot}\n使用已安装的 Node:${installed.nodeExecutable}\n受管 app-server 已就绪;首次联网可能需要 Windows 防火墙授权。\n${migrationText}${desktopSetupSteps.join('\n')}\n${restartText}`);
211
+ if (command === 'pair') {
212
+ await ensureAutostart();
213
+ let bridge = await service.status();
214
+ if (!bridge.running) {
215
+ await service.start();
216
+ bridge = await service.status();
217
+ }
218
+ if (!bridge.running) throw new Error('Code Relax 工作站服务未能启动。');
219
+ if (longPair) await selfRelay('relay-start', stateRoot);
220
+ const result = await selfRelay(longPair ? 'invite-create' : 'relay-pair', stateRoot, longPair ? { expires: inviteExpires } : undefined);
221
+ if (!json && result.qrPath) {
222
+ openFile(result.qrPath);
223
+ }
224
+ console.log(json ? JSON.stringify(result) : `配对二维码已生成。\n${result.displayText}\n二维码文件:${result.qrPath}`);
275
225
  return;
276
226
  }
277
- if (command === 'stop') {
278
- const result = await service.stop();
279
- console.log(json ? JSON.stringify(result) : result.message);
227
+ if (command === 'doctor' || command === 'diag') {
228
+ const cliVersion = readRecord(path.join(packageRoot(path.dirname(fileURLToPath(import.meta.url))), 'package.json'))?.version;
229
+ const result = await doctor({ paths, host, service, ensureAutostart, cliVersion, diagnostics: command === 'diag' });
230
+ console.log(json ? JSON.stringify(result) : formatDoctorOutput(result, command === 'diag'));
231
+ if (!result.ready) process.exitCode = 1;
280
232
  return;
281
233
  }
282
- let desktop;
283
- if (command === 'shared-start') {
284
- if (!json) console.log('正在检查 Codex 的启动模式…');
285
- desktop = await launchDesktop('shared', { stateRoot, host: desktopHost });
286
- delete process.env.CODEX_APP_TOOLS_PIPE_PATH;
234
+ if (command === 'uninstall') {
235
+ const desktopHelper = process.platform === 'win32' ? await removeDesktopHelper() : { removed: false, supported: false };
236
+ const skill = inspectSkill();
237
+ let environment;
238
+ const result = await uninstallService(paths, service, async () => {
239
+ environment = await clearManagedEnvironment(stateRoot);
240
+ const installation = readRecord(path.join(serviceRoot, 'installation.json'));
241
+ if (installation?.nodeExecutable) await removeDesktopShortcut({ serviceRoot, nodeExecutable: installation.nodeExecutable });
242
+ if (installation?.nodeExecutable) await residentStartup({ serviceRoot, nodeExecutable: installation.nodeExecutable }, 'disable');
243
+ });
244
+ result.environment = environment;
245
+ result.desktopHelper = desktopHelper;
246
+ result.skill = skill.managed ? removeSkill() : { removed: false, message: '未移除自定义或未安装的 Skill。' };
247
+ result.message = process.platform !== 'win32'
248
+ ? '固定目录服务已卸载;配置、附件、钥匙串凭据和可能仍在执行任务的 Codex 内核已保留。'
249
+ : environment?.preserved
250
+ ? '固定目录服务已卸载;检测到用户自定义的 CODEX_APP_SERVER_WS_URL,已保留。配置、附件和可能仍在执行任务的 app-server 也已保留;重启电脑可结束该进程。npm 命令入口可再用 npm uninstall -g @walkhi/code-relax 移除。'
251
+ : '固定目录服务已卸载;Code Relax 设置的 app-server 环境变量已清理,其他配置、附件和可能仍在执行任务的 app-server 已保留;重启电脑可结束该进程。npm 命令入口可再用 npm uninstall -g @walkhi/code-relax 移除。';
252
+ console.log(json ? JSON.stringify(result) : `${result.message}\n${result.skill.message}`);
253
+ return;
287
254
  }
288
- if (!json && (desktop || command === 'start')) console.log('正在检查电脑连接并准备 Bridge…');
289
- const result = await service[desktop ? 'start' : command]();
290
- if (command === 'status') {
291
- console.log(json ? JSON.stringify(result) : result.running
292
- ? `服务正常:${result.mode},版本 ${result.version || '未知'},端口 ${result.port},PID ${result.pid}` : '服务未就绪。');
255
+ if (command === 'setup') {
256
+ prepareNativePackage(packageRoot(path.dirname(fileURLToPath(import.meta.url))));
257
+ const [major, minor] = process.versions.node.split('.').map(Number);
258
+ if (major < 22 || (major === 22 && minor < 12)) throw new Error('需要 Node >=22.12。');
259
+ const physicalStateRoot = await resolveStateRoot(stateRoot);
260
+ // Preserve the effective package view; never replace a newer file already in it.
261
+ for (const name of ['bridge-config.json', 'bridge-session.json', 'bridge-startup-context.json',
262
+ 'self-relay-config.json', 'self-relay-session.json', 'lan-device-authorizations.json',
263
+ 'managed-app-server.json', 'managed-environment.json', 'shared-recovery.json', 'shared-recovery.lock']) {
264
+ const source = path.join(stateRoot, name), target = path.join(physicalStateRoot, name);
265
+ if (fs.existsSync(source) && !fs.existsSync(target)) fs.copyFileSync(source, target, fs.constants.COPYFILE_EXCL);
266
+ }
267
+ const hadInstalledService = fs.existsSync(path.join(serviceRoot, 'installation.json'));
268
+ const previousInstallation = readRecord(path.join(serviceRoot, 'installation.json'));
269
+ await importRelayConfig(serviceRoot, physicalStateRoot, previousInstallation?.nodeExecutable);
270
+ if (previousInstallation?.nodeExecutable) await removeDesktopShortcut({ serviceRoot, nodeExecutable: previousInstallation.nodeExecutable });
271
+ const desktopBeforeSetup = desktopHost.desktopIntegration === false ? { running: false, desktop: null } : await desktopHost.inspect();
272
+ const runtime = await resolveCodexRuntime(physicalStateRoot, { refresh: true });
273
+ const preserveCodex = options.includes('--preserve-codex');
274
+ const desktopNeedsRestart = !hadInstalledService && desktopBeforeSetup.running && !preserveCodex;
275
+ const previous = hadInstalledService ? await service.status() : { processRunning: false };
276
+ const legacyRelaySession = readRecord(path.join(stateRoot, 'self-relay-session.json'));
277
+ const previousRelay = legacyRelaySession ? await controlRequest(legacyRelaySession) : await selfRelay('relay-status', stateRoot);
278
+ const resumeAfterUpdate = previous.processRunning || previousRelay.running;
279
+ const executable = currentNodeExecutable();
280
+ const startInstalled = async () => {
281
+ const entry = path.join(serviceRoot, 'dist/bin/codex-remote.mjs');
282
+ const child = spawn(executable, [entry, 'start', '--json'], { windowsHide: true, stdio: ['ignore', 'ignore', 'pipe'] });
283
+ let errors = '';
284
+ child.stderr.on('data', chunk => { errors += chunk; });
285
+ const code = await new Promise((resolve, reject) => { child.once('error', reject); child.once('exit', resolve); });
286
+ try {
287
+ if (code !== 0) throw new Error(errors.trim().replace(/^(?:Code Relax:)+/u, '') || '桌面服务启动失败');
288
+ if (previousRelay.deviceId) {
289
+ const restoredRelay = await selfRelay('relay-status', stateRoot);
290
+ if (restoredRelay.deviceId !== previousRelay.deviceId ||
291
+ (previousRelay.relayConnected && !restoredRelay.relayConnected) ||
292
+ (previousRelay.paired && !restoredRelay.paired)) {
293
+ throw new Error('更新后未确认原工作站身份和中继授权恢复,安装未完成。');
294
+ }
295
+ }
296
+ } catch (error) {
297
+ try { await selfRelay('relay-stop', stateRoot); } catch {}
298
+ try { await service.stop(); } catch {}
299
+ throw error;
300
+ }
301
+ };
302
+ let stoppedForUpdate = false;
303
+ const installed = await installService(packageRoot(path.dirname(fileURLToPath(import.meta.url))), serviceRoot, executable, physicalStateRoot, {
304
+ beforeActivate: async () => {
305
+ stoppedForUpdate = resumeAfterUpdate;
306
+ if (previousRelay.running && legacyRelaySession) {
307
+ await controlRequest(legacyRelaySession, 'POST');
308
+ const deadline = Date.now() + 10000;
309
+ while (processAlive(legacyRelaySession.pid)) {
310
+ if (Date.now() >= deadline) throw new Error('旧中继进程未在 10 秒内退出。');
311
+ await delay(100);
312
+ }
313
+ } else if (previousRelay.running) await selfRelay('relay-stop', stateRoot);
314
+ if (previous.processRunning) await service.stop();
315
+ },
316
+ verifyActivation: async () => { await startInstalled(); },
317
+ restoreActivation: async () => { if (stoppedForUpdate) await startInstalled(); },
318
+ });
319
+ const autostart = await residentStartup(installed, 'enable');
320
+ const deadline = Date.now() + 35_000;
321
+ let bridge = await service.status();
322
+ while (bridge.running && !['ready', 'failed'].includes(bridge.managedAppServer?.state) && Date.now() < deadline) {
323
+ await delay(250);
324
+ bridge = await service.status();
325
+ }
326
+ if (!bridge.running || bridge.managedAppServer?.state !== 'ready') {
327
+ throw new Error(bridge.managedAppServer?.error || '桌面服务已安装,但 Codex 内核未就绪;未写入 Desktop 环境变量。');
328
+ }
329
+ const environment = desktopBeforeSetup.desktop
330
+ ? await configureManagedEnvironment(physicalStateRoot, bridge.managedAppServer.url) : { configured: false, reason: desktopHost.desktopIntegration === false ? 'desktop-integration-unsupported' : 'desktop-not-installed' };
331
+ let managedAppServerMigrated = false;
332
+ const managedAppServerMigration = {
333
+ required: bridge.managedAppServer.launcherRestartRequired === true || bridge.managedAppServer.updatePending === true,
334
+ reason: bridge.managedAppServer.updatePending ? 'runtime-update' : bridge.managedAppServer.launcherRestartRequired ? 'launcher-migration' : null,
335
+ restarted: false,
336
+ previousPid: bridge.managedAppServer.pid || null,
337
+ previousVersion: bridge.managedAppServer.version || null,
338
+ };
339
+ let desktopRestarted = false;
340
+ if (managedAppServerMigration.required && !preserveCodex) {
341
+ const requested = await service.restartManagedAppServer(true);
342
+ const operationId = requested.restart?.operationId;
343
+ if (!operationId) throw new Error('安装更新未取得 Codex 内核重启操作编号。');
344
+ const complete = () => bridge.running && bridge.managedAppServer?.state === 'ready'
345
+ && bridge.managedAppServer.restart?.operationId === operationId
346
+ && bridge.managedAppServer.restart.status === 'completed'
347
+ && !bridge.managedAppServer.launcherRestartRequired && !bridge.managedAppServer.updatePending;
348
+ const migrationDeadline = Date.now() + 60_000;
349
+ do {
350
+ await delay(250);
351
+ bridge = await service.status();
352
+ if (bridge.managedAppServer?.restart?.operationId === operationId && bridge.managedAppServer.restart.status === 'failed') {
353
+ throw new Error(bridge.managedAppServer.restart.error || '安装期间 Codex 内核更新失败。');
354
+ }
355
+ } while (Date.now() < migrationDeadline && !complete());
356
+ if (!complete()) throw new Error('安装期间 Codex 内核未在 60 秒内完成更新;未确认新内核就绪。');
357
+ managedAppServerMigrated = true;
358
+ managedAppServerMigration.restarted = true;
359
+ }
360
+ const skill = installSkill(path.join(serviceRoot, 'dist/skills/code-relax/SKILL.md'));
361
+ // Kernel migration already reconnects Desktop. Ordinary service updates retain it.
362
+ if (desktopNeedsRestart && !managedAppServerMigrated) {
363
+ const currentDesktop = await desktopHost.inspect();
364
+ if (currentDesktop.running) await desktopHost.closeDesktop(currentDesktop.desktop);
365
+ await launchDesktop({ stateRoot: physicalStateRoot, host: desktopHost });
366
+ if (!await desktopHost.desktopReady()) throw new Error('安装期间 Codex 窗口已启动,但未确认连接到工作站内核。');
367
+ desktopRestarted = true;
368
+ }
369
+ // Kernel restart completion can precede the next execution-health sample.
370
+ // Observe readiness only: never repeat installation or restart the kernel here.
371
+ const readinessDeadline = Date.now() + 35_000;
372
+ const installationReady = () => bridge.running && bridge.managedAppServer?.state === 'ready'
373
+ && bridge.execution?.ready === true
374
+ && (preserveCodex || (!bridge.managedAppServer.updatePending && !bridge.managedAppServer.launcherRestartRequired));
375
+ do {
376
+ bridge = await service.status();
377
+ if (installationReady()) break;
378
+ if (Date.now() >= readinessDeadline) {
379
+ const diagnostic = {
380
+ observedAt: new Date().toISOString(), running: bridge.running,
381
+ kernelState: bridge.managedAppServer?.state, kernelError: bridge.managedAppServer?.error,
382
+ kernelVersion: bridge.managedAppServer?.version, kernelPid: bridge.managedAppServer?.pid,
383
+ updatePending: bridge.managedAppServer?.updatePending,
384
+ launcherRestartRequired: bridge.managedAppServer?.launcherRestartRequired,
385
+ execution: bridge.execution, restart: bridge.managedAppServer?.restart,
386
+ migration: managedAppServerMigration, preserveCodex,
387
+ };
388
+ throw new Error(`安装文件已更新,但等待 35 秒后 Codex 内核更新或完整控制仍未就绪,安装未完成。状态:${JSON.stringify(diagnostic)}`);
389
+ }
390
+ await delay(250);
391
+ } while (true);
392
+ installed.autostart = autostart;
393
+ installed.skill = skill;
394
+ installed.restarted = resumeAfterUpdate;
395
+ installed.environment = environment;
396
+ installed.managedAppServer = bridge.managedAppServer;
397
+ installed.codexRuntime = runtime;
398
+ installed.managedAppServerMigrated = managedAppServerMigrated;
399
+ installed.managedAppServerMigration = { ...managedAppServerMigration,
400
+ currentPid: bridge.managedAppServer.pid || null,
401
+ launcherRevision: bridge.managedAppServer.launcherRevision ?? null };
402
+ installed.preserveCodex = preserveCodex;
403
+ installed.desktopRestarted = desktopRestarted;
404
+ installed.desktopWasRunning = desktopBeforeSetup.running;
405
+ installed.desktopRestartReason = desktopRestarted ? 'setup-reconnect' : null;
406
+ installed.desktopConnected = desktopRestarted ? true : null;
407
+ installed.executionReady = bridge.execution.ready;
408
+ if (process.platform === 'win32') {
409
+ // Use the newly installed package, including its native signed update payload.
410
+ const helper = await import(pathToFileURL(path.join(serviceRoot, 'dist/src/platform/windows/desktop-helper.mjs')).href);
411
+ installed.desktopHelper = options.includes('--desktop-helper') ? await helper.installDesktopHelper() : await helper.updateDesktopHelperIfEnabled();
412
+ }
413
+ const migrationText = managedAppServerMigrated ? 'Codex 内核已更新并重启;请检查安装前正在进行的任务。\n' : '';
414
+ const displayText = `Code Relax ${installed.version} 安装成功。\n${migrationText}${desktopSetupSteps.join('\n')}`;
415
+ console.log(json ? JSON.stringify({ ...installed, nextSteps: desktopSetupSteps, displayText }) : displayText);
293
416
  return;
294
417
  }
295
- const { accessUrl, qrPath: _legacyQrPath, ...metadata } = result;
296
- const notice = '本机服务检查通过,手机连通性尚未验证。若电脑弹出 Node 网络访问提示,请先处理 Windows 防火墙授权,再用手机连接。';
297
- let relay;
298
- if (fs.existsSync(path.join(stateRoot, 'self-relay-config.json'))) relay = await selfRelay('relay-start', stateRoot);
299
- const nextSteps = phonePairingSteps(metadata.transportMode, relay?.paired === true);
300
- const displayText = pairingDisplayText(nextSteps, notice);
301
- const output = { ...metadata, ...(desktop ? { desktop, bridgeReady: true } : {}), ...(relay ? { relayConnected: relay.relayConnected,
302
- paired: relay.paired, clientCount: relay.clientCount, ...(relay.qrPath ? { qrPath: relay.qrPath, expiresAt: relay.expiresAt } : {}) } : {}),
303
- nextSteps, displayText, mode: 'lan', listenAddress: '0.0.0.0', address: new URL(accessUrl).host,
304
- lanAccess: 'unverified', notice };
418
+ if (!json && command === 'start') console.log('正在检查电脑连接并准备桌面服务…');
419
+ await ensureAutostart();
420
+ const result = await service[command]();
421
+ const { accessUrl, qrPath: _legacyQrPath, ...metadata } = result;
422
+ let relay;
423
+ if (fs.existsSync(path.join(stateRoot, 'self-relay-config.json'))) relay = await selfRelay('relay-status', stateRoot);
424
+ const nextSteps = phonePairingSteps(metadata.transportMode, relay?.paired === true);
425
+ const displayText = pairingDisplayText(nextSteps);
426
+ const output = { ...metadata, ...(relay ? { relayConnected: relay.relayConnected,
427
+ paired: relay.paired, clientCount: relay.clientCount, ...(relay.qrPath ? { qrPath: relay.qrPath, expiresAt: relay.expiresAt } : {}) } : {}),
428
+ nextSteps, displayText, mode: 'lan', listenAddress: '0.0.0.0', address: new URL(accessUrl).host };
305
429
  if (json) console.log(JSON.stringify(output));
306
430
  else {
307
- console.log('电脑连接检查通过 · Bridge 已就绪');
308
- console.log(`局域网模式:监听 0.0.0.0:${result.port},连接地址 ${output.address},PID ${result.pid}`);
309
- if (relay?.qrPath) console.log(`配对二维码:${relay.qrPath}`);
310
- console.log(displayText);
431
+ if (relay?.qrPath) console.log(`配对二维码:${relay.qrPath}`);
432
+ console.log(displayText);
311
433
  }
312
434
  }
313
435
 
314
436
  main().catch(error => {
315
- console.error(`Code Relax:${error.message}`);
437
+ console.error(`Code Relax:${error.message}`);
316
438
  process.exitCode = 1;
317
439
  });