@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
@@ -0,0 +1,114 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { startBackground } from '../../background-process.mjs';
4
+ import { systemRequest } from './system.mjs';
5
+ import { assertPlainPath } from '../../skill-install.mjs';
6
+ import { setTimeout as delay } from 'node:timers/promises';
7
+ import { runtimePaths } from '../runtime-paths.mjs';
8
+ import { readRecord } from '../../service-lifecycle.mjs';
9
+ export { residentStartup } from './resident-startup.mjs';
10
+
11
+ import { managedEndpointUrl, readManagedEndpoint } from '../../managed-endpoint.mjs';
12
+ export function createDesktopHost({ request = systemRequest, wait = delay, now = Date.now, timeout = 30000,
13
+ diagnose = record => console.info(JSON.stringify({ time: new Date().toISOString(), event: 'mac-desktop-close', ...record })),
14
+ stateRoot = () => runtimePaths().stateRoot, fingerprint = file => {
15
+ const stat = fs.statSync(path.join(file, 'Contents/Info.plist'));
16
+ return `${stat.ino}:${stat.size}:${stat.mtimeMs}:${stat.ctimeMs}`;
17
+ } } = {}) {
18
+ return {
19
+ desktopIntegration: true,
20
+ async inspect() {
21
+ const url = readManagedEndpoint(stateRoot());
22
+ const info = await request({ operation: 'desktop-info', url });
23
+ return { ...info, managedUrl: url, desktopIdentity: info.desktop ? `${info.desktop}:${info.version}:${info.build}:${fingerprint(info.desktop)}` : null };
24
+ },
25
+ process: pid => request({ operation: 'process', pid }),
26
+ ownsListener: (expected, url) => request({ operation: 'owns-listener', expected, url }),
27
+ start: startBackground,
28
+ async stop(pid, expected) {
29
+ if (!expected || expected.pid !== pid) throw new Error('停止内核前缺少进程身份,未结束任何进程。');
30
+ return request({ operation: 'stop', expected });
31
+ },
32
+ async sharedServiceUrl() {
33
+ const info = await this.inspect();
34
+ return info.connectedToManagedServer ? info.managedUrl : '';
35
+ },
36
+ async startDesktop(bundlePath, environment) {
37
+ const managedUrl = managedEndpointUrl(environment.CODEX_APP_SERVER_WS_URL);
38
+ if (!managedUrl || managedUrl !== readManagedEndpoint(stateRoot())) throw new Error('Desktop 内核地址与工作站不一致。');
39
+ const runtime = readRecord(path.join(stateRoot(), 'codex-runtime.json'));
40
+ const codexHome = environment.CODEX_HOME || runtime?.codexHome;
41
+ if (!codexHome || !path.isAbsolute(codexHome)) throw new Error('缺少已选内核的 CODEX_HOME,请先运行 relax setup。');
42
+ const info = await this.inspect();
43
+ if (info.running) throw new Error('Desktop 仍在运行,未创建第二个实例。');
44
+ if (info.desktop !== bundlePath) throw new Error('Codex Desktop 安装位置已变化,请重新检查。');
45
+ return request({ operation: 'desktop-start', bundlePath,
46
+ environment: { CODEX_HOME: codexHome, CODEX_APP_SERVER_WS_URL: managedUrl } });
47
+ },
48
+ async closeDesktop(bundlePath) {
49
+ const info = await this.inspect();
50
+ if (!info.running) return;
51
+ if (info.desktop !== bundlePath || !info.process) throw new Error('Desktop 进程身份已变化,未请求退出。');
52
+ const started = now();
53
+ const identity = value => value ? { pid: value.pid, created: value.created, executable: value.executable } : null;
54
+ const context = { target: identity(info.process), version: info.version, build: info.build, timeoutMs: timeout };
55
+ diagnose({ ...context, stage: 'request' });
56
+ let result;
57
+ try { result = await request({ operation: 'desktop-close', bundlePath, expected: info.process }); }
58
+ catch (error) {
59
+ diagnose({ ...context, stage: 'request-failed', elapsedMs: now() - started, error: error.message });
60
+ throw error;
61
+ }
62
+ diagnose({ ...context, stage: 'request-returned', elapsedMs: now() - started,
63
+ quitRequested: result.quitRequested === true, alreadyStopped: result.stopped === true });
64
+ const deadline = now() + timeout;
65
+ while (true) {
66
+ let current;
67
+ try { current = await this.inspect(); }
68
+ catch (error) {
69
+ diagnose({ ...context, stage: 'inspect-failed', elapsedMs: now() - started, error: error.message });
70
+ throw error;
71
+ }
72
+ const observation = { ...context, elapsedMs: now() - started, current: identity(current.process),
73
+ finishedLaunching: current.finishedLaunching, connectedToManagedServer: current.connectedToManagedServer };
74
+ if (!current.running) { diagnose({ ...observation, stage: 'exited' }); return; }
75
+ if (current.process?.pid !== info.process.pid || current.process?.created !== info.process.created) {
76
+ diagnose({ ...observation, stage: 'process-changed' });
77
+ throw Object.assign(new Error('Mac 桌面端进程已变化,请刷新状态核对;未再次请求退出。'), { code: 'MAC_DESKTOP_CLOSE_CHANGED' });
78
+ }
79
+ if (now() >= deadline) {
80
+ diagnose({ ...observation, stage: 'timeout', quitRequested: result.quitRequested === true });
81
+ throw Object.assign(new Error('Mac 桌面端退出请求已发送,但未在等待时间内退出。请在 Mac 查看桌面端退出状态和诊断日志;未强制结束进程。'), { code: 'MAC_DESKTOP_CLOSE_TIMEOUT' });
82
+ }
83
+ await wait(200);
84
+ }
85
+ },
86
+ async desktopReady() {
87
+ const info = await this.inspect();
88
+ return info.running && info.finishedLaunching && info.connectedToManagedServer;
89
+ },
90
+ async prepareKernelRestart() {
91
+ const info = await this.inspect();
92
+ if (!info.running || !info.connectedToManagedServer) return null;
93
+ await this.closeDesktop(info.desktop);
94
+ return info.desktop;
95
+ },
96
+ async resumeAfterKernelRestart(bundlePath, environment) {
97
+ if (!bundlePath) return;
98
+ await this.startDesktop(bundlePath, environment);
99
+ const deadline = now() + 30000;
100
+ while (!await this.desktopReady()) {
101
+ if (now() >= deadline) throw new Error('内核已就绪,但 Mac Desktop 尚未重新接入。');
102
+ await wait(500);
103
+ }
104
+ },
105
+ ready: async url => { try { return (await fetch(url, { signal: AbortSignal.timeout(1000) })).ok; } catch { return false; } },
106
+ };
107
+ }
108
+ export const desktopHost = createDesktopHost();
109
+ export async function resolveStateRoot(stateRoot) {
110
+ assertPlainPath(stateRoot);
111
+ fs.mkdirSync(stateRoot, { recursive: true, mode: 0o700 });
112
+ return fs.realpathSync(stateRoot);
113
+ }
114
+ export async function removeDesktopShortcut() { return { removed: false, reason: 'not-used-on-macos' }; }
@@ -0,0 +1,11 @@
1
+ import { desktopHost } from './desktop-host.mjs';
2
+ import { withDesktopProjectRegistration as register } from '../desktop-project-store.mjs';
3
+
4
+ // Verified against the Mac 26.1007.71326 local-projects/project-order store.
5
+ export async function withDesktopProjectRegistration(options, action) {
6
+ const host = options.host || desktopHost;
7
+ if (!(await host.inspect()).desktop)
8
+ return action({ register: async () => ({ status: 'not-applicable', reason: 'desktop-not-installed' }),
9
+ remove: async (_project, _operation, _save, removeNative) => { await removeNative(); return { status: 'not-applicable', reason: 'desktop-not-installed' }; } });
10
+ return register({ ...options, host }, action);
11
+ }
@@ -0,0 +1,8 @@
1
+ import os from 'node:os';
2
+ import { systemRequest } from './system.mjs';
3
+ import { networkCandidates } from '../posix/network-candidates.mjs';
4
+ export { networkCandidates } from '../posix/network-candidates.mjs';
5
+
6
+ export async function lanNetworks() {
7
+ return networkCandidates(await systemRequest({ operation: 'network-interfaces' }), os.networkInterfaces());
8
+ }
@@ -0,0 +1,8 @@
1
+ import path from 'node:path';
2
+ import { systemRequest } from './system.mjs';
3
+
4
+ export async function projectLocations() {
5
+ const { home, documents, downloads } = await systemRequest({ operation: 'locations' });
6
+ if (![home, documents, downloads].every(value => typeof value === 'string' && path.isAbsolute(value))) throw new Error('Mac 用户目录无效。');
7
+ return { home, downloads, defaultParent: path.join(documents, 'ChatGPT'), roots: ['/'] };
8
+ }
@@ -0,0 +1,84 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { execFile } from 'node:child_process';
5
+ import { promisify } from 'node:util';
6
+ import { readRecord } from '../../service-lifecycle.mjs';
7
+ import { assertPlainPath } from '../../skill-install.mjs';
8
+ import { runtimePaths } from '../runtime-paths.mjs';
9
+
10
+ const exec = promisify(execFile);
11
+ export const launchAgentLabel = 'cn.walkhi.code-relax';
12
+ const xml = value => String(value).replace(/[&<>"']/g, character => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&apos;' }[character]));
13
+ export function launchAgentPlist({ serviceRoot, nodeExecutable, stateRoot, home, environment }) {
14
+ const entry = path.join(serviceRoot, 'dist/bin/codex-remote.mjs');
15
+ // npm adds temporary .bin directories during postinstall. Login must use the
16
+ // user's stable tool paths after the source archive has been removed.
17
+ const stablePath = String(environment.PATH || '').split(':')
18
+ .filter(value => value.startsWith('/') && !value.endsWith('/node_modules/.bin')).join(':');
19
+ const variables = { HOME: home, PATH: stablePath || '/usr/bin:/bin:/usr/sbin:/sbin' };
20
+ for (const name of ['CODEX_HOME', 'CODEX_INSTALL_DIR', 'CODE_RELAX_CODEX_PATH']) if (environment[name]) variables[name] = environment[name];
21
+ const strings = [nodeExecutable, entry, ...Object.values(variables), stateRoot];
22
+ if (strings.some(value => /[\u0000-\u0008\u000b\u000c\u000e-\u001f]/.test(value))) throw new Error('登录启动参数含无效控制字符。');
23
+ return `<?xml version="1.0" encoding="UTF-8"?>
24
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
25
+ <plist version="1.0"><dict>
26
+ <key>Label</key><string>${launchAgentLabel}</string>
27
+ <key>ProgramArguments</key><array>${[nodeExecutable, entry, 'start', '--json'].map(value => `<string>${xml(value)}</string>`).join('')}</array>
28
+ <key>RunAtLoad</key><true/>
29
+ <key>AbandonProcessGroup</key><true/>
30
+ <key>EnvironmentVariables</key><dict>${Object.entries(variables).map(([key, value]) => `<key>${key}</key><string>${xml(value)}</string>`).join('')}</dict>
31
+ <key>StandardOutPath</key><string>${xml(path.join(stateRoot, 'login.stdout.log'))}</string>
32
+ <key>StandardErrorPath</key><string>${xml(path.join(stateRoot, 'login.stderr.log'))}</string>
33
+ </dict></plist>
34
+ `;
35
+ }
36
+
37
+ export async function residentStartup({ serviceRoot, nodeExecutable }, action = 'status') {
38
+ if (!['status', 'enable', 'disable'].includes(action)) throw new Error('无效的登录启动操作。');
39
+ const uid = process.getuid();
40
+ if (uid === 0) throw new Error('请以普通 Mac 用户安装 Code Relax,不使用 sudo。');
41
+ const home = os.homedir();
42
+ const file = path.join(home, 'Library/LaunchAgents', `${launchAgentLabel}.plist`);
43
+ const domain = `gui/${uid}`, target = `${domain}/${launchAgentLabel}`;
44
+ assertPlainPath(file);
45
+ let current;
46
+ if (fs.existsSync(file)) {
47
+ const { stdout } = await exec('/usr/bin/plutil', ['-convert', 'json', '-o', '-', file], { timeout: 5000 });
48
+ current = JSON.parse(stdout);
49
+ if (current.Label !== launchAgentLabel || current.ProgramArguments?.[1] !== path.join(serviceRoot, 'dist/bin/codex-remote.mjs'))
50
+ throw new Error('同名 LaunchAgent 不属于此安装,未覆盖或移除。');
51
+ }
52
+ const { stdout: disabled } = await exec('/bin/launchctl', ['print-disabled', domain], { timeout: 5000 });
53
+ const isDisabled = /"cn\.walkhi\.code-relax"\s*=>\s*true/.test(disabled);
54
+ const expectedArguments = [nodeExecutable, path.join(serviceRoot, 'dist/bin/codex-remote.mjs'), 'start', '--json'];
55
+ const enabled = JSON.stringify(current?.ProgramArguments) === JSON.stringify(expectedArguments)
56
+ && current.RunAtLoad === true && current.AbandonProcessGroup === true
57
+ && current.EnvironmentVariables?.HOME === home && !isDisabled;
58
+ if (action === 'status') return { enabled, path: file, mechanism: 'LaunchAgent' };
59
+ if (action === 'disable') {
60
+ if (!current) return { enabled: false, removed: false, path: file };
61
+ let loaded = false;
62
+ try { await exec('/bin/launchctl', ['print', target], { timeout: 5000 }); loaded = true; }
63
+ catch (error) { if (error.code !== 113) throw error; }
64
+ if (loaded) await exec('/bin/launchctl', ['bootout', target], { timeout: 5000 });
65
+ await exec('/bin/launchctl', ['disable', target], { timeout: 5000 });
66
+ fs.unlinkSync(file);
67
+ return { enabled: false, removed: true, path: file };
68
+ }
69
+ const { stateRoot } = runtimePaths();
70
+ const runtime = readRecord(path.join(stateRoot, 'codex-runtime.json'));
71
+ const environment = { ...process.env, ...(runtime?.codexHome ? { CODEX_HOME: runtime.codexHome } : {}) };
72
+ fs.mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });
73
+ fs.mkdirSync(stateRoot, { recursive: true, mode: 0o700 });
74
+ const temporary = `${file}.${process.pid}.tmp`;
75
+ try {
76
+ fs.writeFileSync(temporary, launchAgentPlist({ serviceRoot, nodeExecutable, stateRoot, home, environment }), { flag: 'wx', mode: 0o600 });
77
+ await exec('/usr/bin/plutil', ['-lint', temporary], { timeout: 5000 });
78
+ fs.renameSync(temporary, file);
79
+ } finally { if (fs.existsSync(temporary)) fs.unlinkSync(temporary); }
80
+ await exec('/bin/launchctl', ['enable', target], { timeout: 5000 });
81
+ // setup/start already launches the service. Bootstrap would run a second start
82
+ // concurrently; launchd will load this user agent at the next GUI login.
83
+ return { enabled: true, path: file, mechanism: 'LaunchAgent', appliesAtNextLogin: true };
84
+ }
@@ -0,0 +1,127 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { createHash, randomUUID } from 'node:crypto';
4
+ import { readRecord, writeRecord } from '../../service-lifecycle.mjs';
5
+
6
+ const owner = 'code-relax-macos-runtime';
7
+ const manifestName = '.code-relax-runtime.json';
8
+ function filesAt(root, relative = '') {
9
+ const result = [];
10
+ if (fs.lstatSync(root).isSymbolicLink()) throw new Error('Codex 运行时目录不能是符号链接。');
11
+ for (const entry of fs.readdirSync(path.join(root, relative), { withFileTypes: true })) {
12
+ const name = path.join(relative, entry.name);
13
+ if (entry.isDirectory()) result.push(...filesAt(root, name));
14
+ else if (entry.isFile()) result.push(name);
15
+ else throw new Error(`Codex 运行时包含不支持的链接或文件:${name}`);
16
+ }
17
+ return result.sort();
18
+ }
19
+ export function packageRoot(executable) {
20
+ const bundleSuffix = path.join('CodexCLI.app', 'Contents', 'MacOS', 'codex');
21
+ const bundled = executable.endsWith(path.sep + bundleSuffix);
22
+ const root = bundled ? path.resolve(executable, '../../../..') : path.dirname(path.dirname(executable));
23
+ const metadata = readRecord(path.join(root, 'codex-package.json'));
24
+ if ((!bundled && path.basename(path.dirname(executable)) !== 'bin') || path.basename(executable) !== 'codex'
25
+ || metadata?.layoutVersion !== 1 || metadata.entrypoint !== 'bin/codex' || metadata.variant !== 'codex'
26
+ || !['aarch64-apple-darwin', 'x86_64-apple-darwin'].includes(metadata.target)
27
+ || metadata.resourcesDir !== 'codex-resources' || metadata.pathDir !== 'codex-path')
28
+ throw new Error('需要完整的官方 Mac Codex 运行时包,不能仅复制 codex 单个文件。');
29
+ for (const file of ['bin/codex', 'bin/codex-code-mode-host', 'codex-path/rg']) {
30
+ if (!fs.statSync(path.join(root, file)).isFile()) throw new Error(`Codex 运行时缺少 ${file}`);
31
+ }
32
+ if (!fs.statSync(path.join(root, 'codex-resources')).isDirectory()) throw new Error('Codex 运行时缺少资源目录。');
33
+ return root;
34
+ }
35
+ export function runtimeFingerprint(executable) {
36
+ const root = packageRoot(executable);
37
+ return JSON.stringify(filesAt(root).filter(name => name !== manifestName).map(name => {
38
+ const stat = fs.statSync(path.join(root, name));
39
+ return [name, stat.size, stat.mtimeMs, stat.ctimeMs, stat.ino, stat.mode & 0o777];
40
+ }));
41
+ }
42
+ async function digestFiles(root) {
43
+ const records = [];
44
+ for (const name of filesAt(root).filter(name => name !== manifestName)) {
45
+ const file = path.join(root, name), hash = createHash('sha256');
46
+ const before = fs.statSync(file);
47
+ for await (const chunk of fs.createReadStream(file)) hash.update(chunk);
48
+ const after = fs.statSync(file);
49
+ if (before.size !== after.size || before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs || before.ino !== after.ino)
50
+ throw new Error('Codex 更新正在替换文件,请待安装完成后重试。');
51
+ records.push({ name, size: after.size, mode: after.mode & 0o777, sha256: hash.digest('hex') });
52
+ }
53
+ return records;
54
+ }
55
+ const treeHash = files => createHash('sha256').update(JSON.stringify(files)).digest('hex');
56
+ function removeFiles(root, names) {
57
+ for (const name of names) {
58
+ fs.unlinkSync(path.join(root, name));
59
+ }
60
+ // Empty package resource directories must also be removed, without recursive deletion.
61
+ const collect = directory => {
62
+ for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
63
+ if (!entry.isDirectory()) throw new Error('运行时清理期间出现未知文件,保留目录。');
64
+ const child = path.join(directory, entry.name); collect(child); fs.rmdirSync(child);
65
+ }
66
+ };
67
+ collect(root);
68
+ fs.rmdirSync(root);
69
+ }
70
+
71
+ export async function retainRuntime(executable, stateRoot, version) {
72
+ const source = packageRoot(executable);
73
+ const sourceFingerprint = runtimeFingerprint(executable);
74
+ const files = await digestFiles(source);
75
+ if (sourceFingerprint !== runtimeFingerprint(executable)) throw new Error('Codex 包在核对期间发生变化,未切换内核。');
76
+ const digest = treeHash(files);
77
+ const parent = path.join(stateRoot, 'macos-runtimes'), target = path.join(parent, digest);
78
+ const retained = path.join(target, path.relative(source, executable));
79
+ if (fs.existsSync(target)) {
80
+ const manifest = readRecord(path.join(target, manifestName));
81
+ if (manifest?.owner !== owner || manifest.digest !== digest || treeHash(await digestFiles(target)) !== digest)
82
+ throw new Error('已保留的 Mac 内核内容不完整,未覆盖运行中的文件。');
83
+ return { executable: retained, sourceExecutable: executable, sourceFingerprint };
84
+ }
85
+ fs.mkdirSync(parent, { recursive: true, mode: 0o700 });
86
+ const staging = path.join(parent, `.${randomUUID()}.tmp`);
87
+ fs.mkdirSync(staging, { mode: 0o700 });
88
+ const created = [];
89
+ try {
90
+ for (const file of files) {
91
+ const destination = path.join(staging, file.name);
92
+ fs.mkdirSync(path.dirname(destination), { recursive: true, mode: 0o700 });
93
+ // APFS can clone blocks, but each snapshot has independent file identity.
94
+ // A hard link would let an in-place npm update modify the running kernel.
95
+ fs.copyFileSync(path.join(source, file.name), destination, fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE);
96
+ created.push(file.name);
97
+ fs.chmodSync(destination, file.mode);
98
+ }
99
+ fs.mkdirSync(path.join(staging, 'codex-resources'), { recursive: true, mode: 0o700 });
100
+ if (treeHash(await digestFiles(staging)) !== digest || sourceFingerprint !== runtimeFingerprint(executable))
101
+ throw new Error('复制期间 Codex 包发生变化,未使用混合版本。');
102
+ writeRecord(path.join(staging, manifestName), { owner, digest, version, files });
103
+ created.push(manifestName);
104
+ fs.renameSync(staging, target);
105
+ return { executable: retained, sourceExecutable: executable, sourceFingerprint };
106
+ } catch (error) {
107
+ if (fs.existsSync(staging)) removeFiles(staging, created);
108
+ throw error;
109
+ }
110
+ }
111
+
112
+ export async function pruneRetainedDesktopRuntimes(stateRoot, keepExecutable) {
113
+ const parent = path.join(stateRoot, 'macos-runtimes');
114
+ if (!fs.existsSync(parent)) return;
115
+ const keep = packageRoot(path.resolve(keepExecutable));
116
+ // An installed (non-retained) process is not authority to clean this store.
117
+ if (path.dirname(keep) !== path.resolve(parent) || !/^[a-f0-9]{64}$/.test(path.basename(keep))) return;
118
+ for (const entry of fs.readdirSync(parent, { withFileTypes: true })) {
119
+ const directory = path.join(parent, entry.name);
120
+ if (!entry.isDirectory() || !/^[a-f0-9]{64}$/.test(entry.name) || directory === keep) continue;
121
+ const manifest = readRecord(path.join(directory, manifestName));
122
+ if (manifest?.owner !== owner || manifest.digest !== entry.name || !Array.isArray(manifest.files)) continue;
123
+ const actual = await digestFiles(directory);
124
+ if (treeHash(actual) !== entry.name || JSON.stringify(actual) !== JSON.stringify(manifest.files)) continue;
125
+ removeFiles(directory, [...actual.map(file => file.name), manifestName]);
126
+ }
127
+ }
@@ -0,0 +1,18 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { runtimePaths } from '../runtime-paths.mjs';
4
+ import { readRecord } from '../../service-lifecycle.mjs';
5
+ import { lanNetworks } from './network-info.mjs';
6
+ import { desktopHost } from './desktop-host.mjs';
7
+
8
+ export { lanNetworks };
9
+ export const lanAddress = async () => (await lanNetworks())[0]?.address || '';
10
+ export const sharedServiceUrl = () => desktopHost.sharedServiceUrl();
11
+ export async function bridgeEnvironment() {
12
+ const environment = { ...process.env };
13
+ const installed = readRecord(path.join(runtimePaths().serviceRoot, 'installation.json'));
14
+ if (!installed?.nodeExecutable || !fs.existsSync(installed.nodeExecutable)) throw new Error('安装时选用的 Node 不存在,请重新执行 relax setup。');
15
+ environment.CODEX_MCP_NODE_PATH = installed.nodeExecutable;
16
+ delete environment.CODEX_APP_TOOLS_PIPE_PATH;
17
+ return { executable: installed.nodeExecutable, environment };
18
+ }
@@ -0,0 +1,29 @@
1
+ import fs from 'node:fs';
2
+ import { spawn } from 'node:child_process';
3
+ import { fileURLToPath } from 'node:url';
4
+
5
+ export const hostBinary = fileURLToPath(new URL('../../../native/macos-host/CodeRelaxHost', import.meta.url));
6
+ export function systemRequest(request) {
7
+ if (process.platform !== 'darwin') return Promise.reject(new Error('需要 macOS 工作站。'));
8
+ if (!fs.existsSync(hostBinary)) return Promise.reject(new Error('缺少 Mac 系统适配组件,请先在 Mac 上执行 npm run build。'));
9
+ return new Promise((resolve, reject) => {
10
+ const child = spawn(hostBinary, [], { stdio: ['pipe', 'pipe', 'pipe'] });
11
+ let output = '', diagnostic = '', failure;
12
+ const timer = setTimeout(() => { failure = new Error('macOS 系统操作超时;请检查钥匙串是否已解锁。'); child.kill(); }, 60000);
13
+ child.stdout.setEncoding('utf8'); child.stderr.setEncoding('utf8');
14
+ child.stdout.on('data', value => {
15
+ output += value;
16
+ if (Buffer.byteLength(output) > 2 * 1024 * 1024) { failure = new Error('macOS 系统响应过大。'); child.kill(); }
17
+ });
18
+ child.stderr.on('data', value => { diagnostic = (diagnostic + value).slice(0, 1024); });
19
+ child.stdin.on('error', () => {});
20
+ child.once('error', () => { clearTimeout(timer); reject(new Error('无法启动 macOS 系统适配组件。')); });
21
+ child.once('close', code => {
22
+ clearTimeout(timer);
23
+ if (failure || code !== 0) return reject(failure || new Error(`macOS 系统操作失败:${diagnostic.trim() || code}`));
24
+ try { resolve(JSON.parse(output)); }
25
+ catch { reject(new Error('macOS 系统组件返回无效结果。')); }
26
+ });
27
+ child.stdin.end(JSON.stringify(request));
28
+ });
29
+ }
@@ -0,0 +1,31 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ import { managedUserEnvironment, managedEnvironmentName } from '../managed-user-environment.mjs';
4
+ import { systemRequest } from './system.mjs';
5
+
6
+ const exec = promisify(execFile);
7
+ const launchctl = async args => (await exec('/bin/launchctl', args, { timeout: 5000 })).stdout.trim();
8
+ const readVariable = async name => {
9
+ try { return await launchctl(['getenv', name]); }
10
+ catch (error) { if (error.code === 1 && !error.stdout && !error.stderr) return ''; throw error; }
11
+ };
12
+ const adapter = managedUserEnvironment({
13
+ // The existing login service restores this only after the kernel is verified.
14
+ // A second static setenv LaunchAgent could race a newly selected dynamic port.
15
+ scope: 'user-launchd',
16
+ read: async () => {
17
+ if (process.getuid() === 0) throw new Error('请以普通 Mac 用户配置内核环境,不使用 sudo。');
18
+ await launchctl(['print-disabled', `gui/${process.getuid()}`]);
19
+ if (await launchctl(['managername']) !== 'Aqua')
20
+ throw new Error('请在当前 Mac 图形登录会话的终端运行 relax setup,以配置 Desktop 的用户环境。');
21
+ return { value: await readVariable(managedEnvironmentName), forceCli: await readVariable('CODEX_APP_SERVER_FORCE_CLI') };
22
+ },
23
+ set: url => launchctl(['setenv', managedEnvironmentName, url]),
24
+ unset: () => launchctl(['unsetenv', managedEnvironmentName]),
25
+ });
26
+ export async function configureManagedEnvironment(stateRoot, url) {
27
+ if (!(await systemRequest({ operation: 'desktop-info', url })).desktop)
28
+ return { configured: false, reason: 'desktop-not-installed' };
29
+ return adapter.configureManagedEnvironment(stateRoot, url);
30
+ }
31
+ export const { clearManagedEnvironment } = adapter;
@@ -0,0 +1,78 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { randomUUID } from 'node:crypto';
4
+ import { readRecord, writeRecord } from '../service-lifecycle.mjs';
5
+ import { managedEndpointUrl } from '../managed-endpoint.mjs';
6
+ import { assertPlainPath } from '../skill-install.mjs';
7
+
8
+ export const managedEnvironmentName = 'CODEX_APP_SERVER_WS_URL';
9
+ const readText = file => {
10
+ try { return fs.readFileSync(file, 'utf8'); }
11
+ catch (error) { if (error.code === 'ENOENT') return null; throw error; }
12
+ };
13
+
14
+ // Platform adapters own the session mechanism; ownership and file updates are shared.
15
+ export function managedUserEnvironment({ file = null, render, read, set, unset, scope, environment = process.env }) {
16
+ const values = record => record?.file === file && record?.scope === scope && record?.name === managedEnvironmentName ? record.values || [] : [];
17
+ const ownedValue = (record, value) => !!value && values(record).some(item => managedEndpointUrl(item) === value);
18
+ const ownedFile = (record, text) => !!file && text !== null && values(record)
19
+ .some(value => managedEndpointUrl(value) && text === render(value));
20
+ return {
21
+ async configureManagedEnvironment(stateRoot, url) {
22
+ if (!managedEndpointUrl(url)) throw new Error('未确认 Codex 内核地址,未修改环境变量。');
23
+ const ownershipPath = path.join(stateRoot, 'managed-environment.json');
24
+ if (file) assertPlainPath(file);
25
+ assertPlainPath(ownershipPath);
26
+ const record = readRecord(ownershipPath), text = file ? readText(file) : null, current = await read();
27
+ if (environment.CODEX_APP_SERVER_FORCE_CLI === '1' || current.forceCli === '1')
28
+ throw new Error('CODEX_APP_SERVER_FORCE_CLI=1 会让 Codex 忽略当前内核地址;未修改该配置。');
29
+ if (current.value && (current.value !== url || record) && !ownedValue(record, current.value))
30
+ throw new Error('用户已有其他 CODEX_APP_SERVER_WS_URL;未覆盖该配置。');
31
+ if (text !== null && !ownedFile(record, text))
32
+ throw new Error('同名用户环境文件不属于此安装或已被修改,未覆盖。');
33
+ if (!record && text === null && current.value === url)
34
+ return { configured: true, changed: false, owned: false, persistent: false, scope, value: url };
35
+ const expected = file ? render(url) : null, changed = text !== expected || current.value !== url;
36
+ // Journal owned endpoints before mutation so interrupted updates remain recoverable.
37
+ const ownership = { name: managedEnvironmentName, value: url, file, scope,
38
+ values: [...new Set([url, ...values(record).filter(value => value === current.value || (file && render(value) === text))])],
39
+ configuredAt: new Date().toISOString() };
40
+ writeRecord(ownershipPath, ownership);
41
+ if (text !== expected) {
42
+ fs.mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });
43
+ const temporary = `${file}.${randomUUID()}.tmp`;
44
+ try {
45
+ fs.writeFileSync(temporary, expected, { flag: 'wx', mode: 0o600 });
46
+ fs.renameSync(temporary, file);
47
+ } finally { fs.rmSync(temporary, { force: true }); }
48
+ }
49
+ if (current.value !== url) await set(url);
50
+ if ((await read()).value !== url) throw new Error('CODEX_APP_SERVER_WS_URL 写入后读回不一致。');
51
+ ownership.values = [url];
52
+ writeRecord(ownershipPath, ownership);
53
+ return { configured: true, changed, owned: true, persistent: !!file, restoredAtServiceStart: true, scope, value: url };
54
+ },
55
+ async clearManagedEnvironment(stateRoot) {
56
+ const ownershipPath = path.join(stateRoot, 'managed-environment.json');
57
+ if (file) assertPlainPath(file);
58
+ assertPlainPath(ownershipPath);
59
+ const record = readRecord(ownershipPath), text = file ? readText(file) : null;
60
+ if (!record && text === null) return { removed: false, preserved: false, reason: 'not-owned' };
61
+ const current = await read();
62
+ let removed = false, preserved = false;
63
+ if (text !== null) {
64
+ if (ownedFile(record, text)) { fs.unlinkSync(file); removed = true; }
65
+ else preserved = true;
66
+ }
67
+ if (current.value) {
68
+ if (ownedValue(record, current.value)) {
69
+ await unset();
70
+ if ((await read()).value) throw new Error('CODEX_APP_SERVER_WS_URL 清理后读回仍不为空。');
71
+ removed = true;
72
+ } else preserved = true;
73
+ }
74
+ fs.rmSync(ownershipPath, { force: true });
75
+ return { removed, preserved, reason: preserved ? 'user-modified-or-not-owned' : removed ? 'removed' : 'already-empty' };
76
+ },
77
+ };
78
+ }
@@ -0,0 +1,69 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { createRequire } from 'node:module';
4
+
5
+ export const nativeTargets = Object.freeze({
6
+ 'win32-x64': { packageName: '@walkhi/code-relax-native-win32-x64', file: 'desktop-helper/CodeRelaxDesktop.exe' },
7
+ 'darwin-arm64': { packageName: '@walkhi/code-relax-native-darwin-arm64', file: 'macos-host/CodeRelaxHost' },
8
+ 'darwin-x64': { packageName: '@walkhi/code-relax-native-darwin-x64', file: 'macos-host/CodeRelaxHost' },
9
+ 'linux-x64': { packageName: null, file: null },
10
+ 'linux-arm64': { packageName: null, file: null },
11
+ });
12
+
13
+ const readJson = file => JSON.parse(fs.readFileSync(file, 'utf8').replace(/^\uFEFF/, ''));
14
+
15
+ // Native dependencies are selected by npm's os/cpu filters. Materialize only
16
+ // this platform's helper before setup touches the installed workstation.
17
+ export function prepareNativePackage(packageRoot, { platform = process.platform, arch = process.arch } = {}) {
18
+ const target = nativeTargets[`${platform}-${arch}`];
19
+ if (!target) throw new Error(`尚不支持此工作站平台:${platform}-${arch}。`);
20
+ const marker = path.join(packageRoot, 'dist/build-platform.json');
21
+ const build = readJson(marker);
22
+ if (!target.file) {
23
+ const pkg = readJson(path.join(packageRoot, 'package.json'));
24
+ if (!(build.platform === platform && build.arch === arch)
25
+ && !(build.layout === 'npm-platform-packages' && build.version === pkg.version))
26
+ throw new Error('安装包构建与当前系统、架构或版本不匹配,请重新安装。');
27
+ // Linux adapters use Node/procfs and the session's Secret Service. There is
28
+ // no private native helper to download; sharp/RTC select their own binaries.
29
+ fs.writeFileSync(marker, JSON.stringify({ platform, arch, version: pkg.version }));
30
+ return { platform, arch, materialized: false };
31
+ }
32
+ const destination = path.join(packageRoot, 'dist/native', target.file);
33
+ if (build.platform === platform && build.arch === arch) {
34
+ if (!fs.statSync(destination).isFile()) throw new Error('安装包缺少当前平台原生组件,请重新安装。');
35
+ if (platform === 'win32' && !fs.statSync(destination + '.update.json').isFile()) throw new Error('安装包缺少辅助组件升级签名。');
36
+ return { platform, arch, materialized: false };
37
+ }
38
+ const pkg = readJson(path.join(packageRoot, 'package.json'));
39
+ if (build.layout !== 'npm-platform-packages' || build.version !== pkg.version)
40
+ throw new Error('安装包构建与当前系统、架构或版本不匹配,请重新安装。');
41
+ const nativeVersion = pkg.optionalDependencies?.[target.packageName];
42
+ if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(nativeVersion || ''))
43
+ throw new Error('安装包未锁定当前平台原生组件的精确版本。');
44
+ let manifest;
45
+ try { manifest = createRequire(path.join(packageRoot, 'package.json')).resolve(`${target.packageName}/package.json`); }
46
+ catch (error) {
47
+ if (error.code !== 'MODULE_NOT_FOUND') throw error;
48
+ throw new Error(`缺少 ${target.packageName}@${nativeVersion};请勿省略 optional 依赖,使用 npm install -g @walkhi/code-relax@${pkg.version} --include=optional --allow-scripts=@walkhi/code-relax --foreground-scripts 重新安装。`);
49
+ }
50
+ const native = readJson(manifest);
51
+ if (native.name !== target.packageName || native.version !== nativeVersion
52
+ || native.os?.length !== 1 || native.os[0] !== platform || native.cpu?.length !== 1 || native.cpu[0] !== arch)
53
+ throw new Error('原生组件包的系统、架构或版本不匹配,未更新工作站。');
54
+ const source = path.join(path.dirname(manifest), 'native', target.file);
55
+ if (!fs.statSync(source).isFile()) throw new Error('平台包缺少原生组件,未更新工作站。');
56
+ const cameraSource = platform === 'win32' ? path.join(path.dirname(source), 'CodeRelaxCamera.exe') : null;
57
+ if (cameraSource && !fs.statSync(cameraSource).isFile()) throw new Error('平台包缺少摄像头组件,未更新工作站。');
58
+ if (platform === 'win32' && !fs.statSync(source + '.update.json').isFile()) throw new Error('平台包缺少辅助组件升级签名。');
59
+ fs.mkdirSync(path.dirname(destination), { recursive: true });
60
+ fs.copyFileSync(source, destination);
61
+ if (cameraSource) {
62
+ fs.copyFileSync(cameraSource, path.join(path.dirname(destination), 'CodeRelaxCamera.exe'));
63
+ fs.copyFileSync(source + '.update.json', destination + '.update.json');
64
+ }
65
+ if (platform === 'darwin') fs.chmodSync(destination, 0o755);
66
+ // Only commit the selected platform after the component has been copied.
67
+ fs.writeFileSync(marker, JSON.stringify({ platform, arch, version: pkg.version }));
68
+ return { platform, arch, packageName: native.name, materialized: true };
69
+ }
@@ -0,0 +1,3 @@
1
+ import { platformModule } from './select.mjs';
2
+ const adapter = await import(platformModule('network-info'));
3
+ export const { lanNetworks } = adapter;
@@ -0,0 +1,5 @@
1
+ import path from 'node:path';
2
+ export function executableKey(file, platform = process.platform) {
3
+ const resolved = path.resolve(file);
4
+ return platform === 'win32' ? resolved.toLowerCase() : resolved;
5
+ }
@@ -0,0 +1,23 @@
1
+ import net from 'node:net';
2
+
3
+ const privateIpv4 = address => {
4
+ if (net.isIP(address) !== 4) return false;
5
+ const [a, b] = address.split('.').map(Number);
6
+ return a === 10 || (a === 192 && b === 168) || (a === 172 && b >= 16 && b <= 31) || (a === 100 && b >= 64 && b <= 127);
7
+ };
8
+ export function networkCandidates(hardware, addresses) {
9
+ const results = [];
10
+ const seen = new Set();
11
+ for (const item of hardware) {
12
+ if (!['wifi', 'ethernet'].includes(item.networkType) || typeof item.interfaceName !== 'string') continue;
13
+ const label = value => String(value).replace(/[\u0000-\u001f\u007f]/g, '').trim().slice(0, 80);
14
+ const interfaceName = label(item.interfaceName), networkName = label(item.networkName || interfaceName);
15
+ if (!interfaceName || !networkName) continue;
16
+ for (const info of addresses[item.interfaceName] || []) {
17
+ if (info.internal || !privateIpv4(info.address) || seen.has(info.address)) continue;
18
+ seen.add(info.address);
19
+ results.push({ address: info.address, interfaceName, networkName, networkType: item.networkType });
20
+ }
21
+ }
22
+ return results.slice(0, 8);
23
+ }