@walkhi/code-relax 0.1.0-beta.3 → 0.1.0-beta.31

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 (837) hide show
  1. package/README.md +83 -71
  2. package/dist/bin/cleanup-accounts.mjs +63 -0
  3. package/dist/bin/codex-remote.mjs +296 -184
  4. package/dist/bin/manage-relay-admin.mjs +20 -0
  5. package/dist/bin/migrate-relay-db.mjs +109 -0
  6. package/dist/bin/publish-android-release.mjs +62 -0
  7. package/dist/bin/self-relay-admin.mjs +8 -0
  8. package/dist/bin/self-relay-demo.mjs +2 -2
  9. package/dist/bin/self-relay-server.mjs +43 -30
  10. package/dist/build-platform.json +1 -0
  11. package/dist/get-shared-service-url.ps1 +6 -6
  12. package/dist/shared/app-server-events.cjs +368 -238
  13. package/dist/shared/code-browser.cjs +159 -0
  14. package/dist/shared/file-changes.cjs +31 -0
  15. package/dist/shared/file-citations.cjs +117 -0
  16. package/dist/shared/file-mentions.cjs +92 -0
  17. package/dist/shared/message-delivery.cjs +54 -0
  18. package/dist/shared/p2p-data-channel.cjs +22 -0
  19. package/dist/shared/p2p-file-channel.cjs +74 -0
  20. package/dist/shared/plan-pricing.cjs +32 -0
  21. package/dist/shared/question-attention.cjs +40 -0
  22. package/dist/shared/server-requests.cjs +157 -5
  23. package/dist/shared/service-endpoints.cjs +21 -0
  24. package/dist/shared/timeline-sync.cjs +111 -5
  25. package/dist/skills/code-relax/SKILL.md +13 -8
  26. package/dist/src/archived-threads.mjs +22 -0
  27. package/dist/src/bounded-process-log.mjs +63 -0
  28. package/dist/src/celsius-client.mjs +107 -0
  29. package/dist/src/code-browser.mjs +100 -0
  30. package/dist/src/desktop-launcher.mjs +33 -38
  31. package/dist/src/dots-approval-timeline.mjs +99 -0
  32. package/dist/src/dots-avatar.mjs +42 -0
  33. package/dist/src/dots-chat-projection.mjs +50 -0
  34. package/dist/src/dots-chat-server.mjs +461 -0
  35. package/dist/src/dots-message-images.mjs +319 -0
  36. package/dist/src/dots-profile.mjs +77 -0
  37. package/dist/src/dots-room-activity.mjs +94 -0
  38. package/dist/src/dots-room-client.mjs +135 -0
  39. package/dist/src/dots-room-projection.mjs +94 -0
  40. package/dist/src/dots-schedules.mjs +66 -0
  41. package/dist/src/dots-summary-tasks.mjs +32 -0
  42. package/dist/src/dots-task-catalog.mjs +430 -0
  43. package/dist/src/dots-task-files.mjs +52 -0
  44. package/dist/src/file-transfer-range.mjs +22 -0
  45. package/dist/src/file-upload-session.mjs +130 -0
  46. package/dist/src/hosted-history-app-server.mjs +103 -0
  47. package/dist/src/hosted-history-cache.mjs +113 -0
  48. package/dist/src/lan-socket-server.mjs +240 -84
  49. package/dist/src/managed-app-server.mjs +53 -16
  50. package/dist/src/message-images.mjs +0 -18
  51. package/dist/src/message-upload-files.mjs +74 -0
  52. package/dist/src/onboarding.mjs +10 -29
  53. package/dist/src/plan-pricing.mjs +47 -0
  54. package/dist/src/platform/README.md +2 -2
  55. package/dist/src/platform/codex-protocol.mjs +46 -0
  56. package/dist/src/platform/codex-runtime.mjs +3 -0
  57. package/dist/src/platform/credential-store.mjs +3 -0
  58. package/dist/src/platform/desktop-host.mjs +3 -0
  59. package/dist/src/platform/desktop-project-registration.mjs +3 -0
  60. package/dist/src/platform/desktop-project-store.mjs +208 -0
  61. package/dist/src/platform/file-opener.mjs +9 -0
  62. package/dist/src/platform/linux/codex-runtime.mjs +56 -0
  63. package/dist/src/platform/linux/credential-store.mjs +28 -0
  64. package/dist/src/platform/linux/desktop-host.mjs +83 -0
  65. package/dist/src/platform/linux/desktop-installation.mjs +36 -0
  66. package/dist/src/platform/linux/desktop-project-registration.mjs +11 -0
  67. package/dist/src/platform/linux/network-info.mjs +11 -0
  68. package/dist/src/platform/linux/process.mjs +42 -0
  69. package/dist/src/platform/linux/project-locations.mjs +17 -0
  70. package/dist/src/platform/linux/resident-startup.mjs +52 -0
  71. package/dist/src/platform/linux/retained-runtime.mjs +76 -0
  72. package/dist/src/platform/linux/service-host.mjs +18 -0
  73. package/dist/src/platform/linux/system.mjs +49 -0
  74. package/dist/src/platform/linux/user-environment.mjs +7 -0
  75. package/dist/src/platform/macos/codex-runtime.mjs +125 -0
  76. package/dist/src/platform/macos/credential-store.mjs +10 -0
  77. package/dist/src/platform/macos/desktop-host.mjs +82 -0
  78. package/dist/src/platform/macos/desktop-project-registration.mjs +11 -0
  79. package/dist/src/platform/macos/network-info.mjs +8 -0
  80. package/dist/src/platform/macos/project-locations.mjs +8 -0
  81. package/dist/src/platform/macos/resident-startup.mjs +84 -0
  82. package/dist/src/platform/macos/retained-runtime.mjs +127 -0
  83. package/dist/src/platform/macos/service-host.mjs +18 -0
  84. package/dist/src/platform/macos/system.mjs +29 -0
  85. package/dist/src/platform/macos/user-environment.mjs +7 -0
  86. package/dist/src/platform/native-package.mjs +58 -0
  87. package/dist/src/platform/network-info.mjs +3 -0
  88. package/dist/src/platform/path-identity.mjs +5 -0
  89. package/dist/src/platform/posix/network-candidates.mjs +23 -0
  90. package/dist/src/platform/posix/runtime-paths.mjs +25 -0
  91. package/dist/src/platform/project-locations.mjs +3 -0
  92. package/dist/src/platform/runtime-paths.mjs +8 -0
  93. package/dist/src/platform/select.mjs +5 -0
  94. package/dist/src/platform/service-host.mjs +3 -0
  95. package/dist/src/platform/user-environment.mjs +3 -0
  96. package/dist/src/platform/windows/activate-desktop.ps1 +48 -0
  97. package/dist/src/platform/windows/codex-runtime.mjs +215 -0
  98. package/dist/src/platform/windows/credential-store.mjs +27 -27
  99. package/dist/src/platform/windows/credential-store.ps1 +49 -49
  100. package/dist/src/platform/windows/desktop-helper.mjs +179 -0
  101. package/dist/src/platform/windows/desktop-host.mjs +43 -23
  102. package/dist/src/platform/windows/desktop-info.ps1 +14 -16
  103. package/dist/src/platform/windows/desktop-project-registration.mjs +4 -0
  104. package/dist/src/platform/windows/desktop-runtime.ps1 +10 -0
  105. package/dist/src/platform/windows/desktop-shortcuts.ps1 +21 -28
  106. package/dist/src/platform/windows/dots-profile.mjs +49 -0
  107. package/dist/src/platform/windows/launch-worker.mjs +17 -18
  108. package/dist/src/platform/windows/project-locations.mjs +16 -0
  109. package/dist/src/platform/windows/resident-start.js +20 -0
  110. package/dist/src/platform/windows/resident-startup.ps1 +76 -20
  111. package/dist/src/platform/windows/rustdesk-video-probe.mjs +168 -0
  112. package/dist/src/platform/windows/service-host.mjs +24 -36
  113. package/dist/src/platform/windows/stop-desktop.ps1 +7 -4
  114. package/dist/src/platform/windows/user-environment.mjs +1 -1
  115. package/dist/src/project-archive.mjs +30 -0
  116. package/dist/src/project-create.mjs +121 -0
  117. package/dist/src/project-management.mjs +59 -0
  118. package/dist/src/project-remove.mjs +55 -0
  119. package/dist/src/project-update.mjs +56 -0
  120. package/dist/src/runtime-discovery.mjs +47 -0
  121. package/dist/src/self-relay/account-cleanup.mjs +30 -0
  122. package/dist/src/self-relay/account-connections.mjs +52 -0
  123. package/dist/src/self-relay/admin-cloud.mjs +101 -0
  124. package/dist/src/self-relay/admin-page.mjs +80 -0
  125. package/dist/src/self-relay/admin-server.mjs +74 -0
  126. package/dist/src/self-relay/admin-state.mjs +85 -19
  127. package/dist/src/self-relay/admin-style.mjs +14 -0
  128. package/dist/src/self-relay/android-releases.mjs +61 -0
  129. package/dist/src/self-relay/client.mjs +45 -45
  130. package/dist/src/self-relay/connector.mjs +421 -144
  131. package/dist/src/self-relay/demo.mjs +34 -35
  132. package/dist/src/self-relay/device-info.mjs +27 -0
  133. package/dist/src/self-relay/device-store.mjs +10 -2
  134. package/dist/src/self-relay/diagnostics.mjs +54 -0
  135. package/dist/src/self-relay/email-accounts.mjs +183 -0
  136. package/dist/src/self-relay/file-wire.mjs +13 -0
  137. package/dist/src/self-relay/lan-authorizations.mjs +44 -2
  138. package/dist/src/self-relay/lifecycle.mjs +256 -273
  139. package/dist/src/self-relay/long-pairing.mjs +40 -0
  140. package/dist/src/self-relay/mysql-state.mjs +118 -0
  141. package/dist/src/self-relay/p2p-probe.mjs +41 -5
  142. package/dist/src/self-relay/privacy-page.mjs +26 -0
  143. package/dist/src/self-relay/public-releases.mjs +34 -0
  144. package/dist/src/self-relay/rtc-file-bridge.mjs +41 -0
  145. package/dist/src/self-relay/server.mjs +655 -115
  146. package/dist/src/self-relay/usage-daily.mjs +55 -0
  147. package/dist/src/self-relay/usage-meter.mjs +141 -0
  148. package/dist/src/server.mjs +1486 -1793
  149. package/dist/src/service-control.mjs +17 -7
  150. package/dist/src/service-doctor.mjs +80 -33
  151. package/dist/src/service-health.mjs +2 -2
  152. package/dist/src/service-install.mjs +85 -85
  153. package/dist/src/service-lifecycle.mjs +116 -108
  154. package/dist/src/service-restart.mjs +43 -10
  155. package/dist/src/shared-app-server.mjs +507 -404
  156. package/dist/src/shared-catalog.mjs +95 -13
  157. package/dist/src/shared-recovery.mjs +15 -11
  158. package/dist/src/shared-thread-stream.mjs +147 -63
  159. package/dist/src/skill-install.mjs +0 -13
  160. package/dist/src/turn-model-history.mjs +47 -0
  161. package/dist/src/usage-reset.mjs +17 -0
  162. package/dist/src/workstation-downloads.mjs +120 -0
  163. package/package.json +35 -37
  164. package/tools/postinstall.mjs +30 -21
  165. package/dist/src/app-server-client.mjs +0 -468
  166. package/dist/src/app-server-tasks.mjs +0 -358
  167. package/dist/src/debug-ui.mjs +0 -131
  168. package/dist/src/platform/windows/desktop-monitor.mjs +0 -34
  169. package/dist/src/platform/windows/desktop-shortcut-run.ps1 +0 -5
  170. package/dist/src/platform/windows/desktop-tools.mjs +0 -48
  171. package/dist/src/thread-catalog.mjs +0 -47
  172. package/dist/tools/find-desktop-pipe.mjs +0 -10
  173. package/dist/web/activity-view.js +0 -283
  174. package/dist/web/approval-ui.js +0 -188
  175. package/dist/web/capabilities.js +0 -57
  176. package/dist/web/chat-transport.js +0 -202
  177. package/dist/web/chat.css +0 -782
  178. package/dist/web/chat.js +0 -3830
  179. package/dist/web/client-platform.js +0 -11
  180. package/dist/web/community-view.js +0 -20
  181. package/dist/web/community.css +0 -77
  182. package/dist/web/community.html +0 -37
  183. package/dist/web/composer-controller.js +0 -101
  184. package/dist/web/conversation-controller.js +0 -99
  185. package/dist/web/disclosure-state-controller.js +0 -95
  186. package/dist/web/draft-controller.js +0 -103
  187. package/dist/web/harmony-platform.js +0 -52
  188. package/dist/web/highlight-powershell.min.js +0 -39
  189. package/dist/web/highlight.min.js +0 -1262
  190. package/dist/web/history-cache.js +0 -240
  191. package/dist/web/history-controller.js +0 -167
  192. package/dist/web/index.html +0 -325
  193. package/dist/web/lan-session.js +0 -122
  194. package/dist/web/link-action-controller.js +0 -212
  195. package/dist/web/message-send-controller.js +0 -177
  196. package/dist/web/message-view.js +0 -98
  197. package/dist/web/p2p-data-channel.js +0 -50
  198. package/dist/web/p2p-diagnostics.js +0 -28
  199. package/dist/web/p2p-probe.js +0 -123
  200. package/dist/web/page-resume.js +0 -28
  201. package/dist/web/pending-message-store.js +0 -108
  202. package/dist/web/queue-controller.js +0 -82
  203. package/dist/web/resources.json +0 -1
  204. package/dist/web/self-relay-session.js +0 -129
  205. package/dist/web/server-requests.js +0 -67
  206. package/dist/web/station-connection-controller.js +0 -75
  207. package/dist/web/task-list-view.js +0 -296
  208. package/dist/web/thread-attention-controller.js +0 -124
  209. package/dist/web/thread-context-controller.js +0 -30
  210. package/dist/web/thread-list-controller.js +0 -61
  211. package/dist/web/thread-list-sync.js +0 -86
  212. package/dist/web/thread-title-controller.js +0 -57
  213. package/dist/web/timeline-formatters.js +0 -249
  214. package/dist/web/timeline-reducer.js +0 -81
  215. package/dist/web/timeline-renderer.js +0 -161
  216. package/dist/web/timeline-scroll-controller.js +0 -50
  217. package/dist/web/timeline-sync.js +0 -67
  218. package/dist/web/usage-controller.js +0 -258
  219. package/dist/web/vendor/README.md +0 -14
  220. package/dist/web/vendor/highlight-powershell.min.js +0 -39
  221. package/dist/web/vendor/highlight.LICENSE.txt +0 -29
  222. package/dist/web/vendor/highlight.min.js +0 -1262
  223. package/dist/web/vendor/lucide.LICENSE.txt +0 -17
  224. package/node_modules/@img/colour/LICENSE.md +0 -82
  225. package/node_modules/@img/colour/README.md +0 -15
  226. package/node_modules/@img/colour/color.cjs +0 -1596
  227. package/node_modules/@img/colour/index.cjs +0 -1
  228. package/node_modules/@img/colour/index.d.ts +0 -929
  229. package/node_modules/@img/colour/package.json +0 -58
  230. package/node_modules/@img/sharp-win32-x64/LICENSE +0 -191
  231. package/node_modules/@img/sharp-win32-x64/README.md +0 -59
  232. package/node_modules/@img/sharp-win32-x64/index.cjs +0 -1
  233. package/node_modules/@img/sharp-win32-x64/lib/libvips-42.dll +0 -0
  234. package/node_modules/@img/sharp-win32-x64/lib/libvips-cpp-8.18.6.dll +0 -0
  235. package/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64-0.35.4.node +0 -0
  236. package/node_modules/@img/sharp-win32-x64/package.json +0 -40
  237. package/node_modules/@img/sharp-win32-x64/versions.json +0 -30
  238. package/node_modules/@node-datachannel/win32-x64-msvc/node_datachannel.node +0 -0
  239. package/node_modules/@node-datachannel/win32-x64-msvc/package.json +0 -20
  240. package/node_modules/ansi-regex/index.d.ts +0 -37
  241. package/node_modules/ansi-regex/index.js +0 -10
  242. package/node_modules/ansi-regex/license +0 -9
  243. package/node_modules/ansi-regex/package.json +0 -55
  244. package/node_modules/ansi-regex/readme.md +0 -78
  245. package/node_modules/ansi-styles/index.d.ts +0 -345
  246. package/node_modules/ansi-styles/index.js +0 -163
  247. package/node_modules/ansi-styles/license +0 -9
  248. package/node_modules/ansi-styles/package.json +0 -56
  249. package/node_modules/ansi-styles/readme.md +0 -152
  250. package/node_modules/camelcase/index.d.ts +0 -63
  251. package/node_modules/camelcase/index.js +0 -76
  252. package/node_modules/camelcase/license +0 -9
  253. package/node_modules/camelcase/package.json +0 -43
  254. package/node_modules/camelcase/readme.md +0 -99
  255. package/node_modules/cliui/CHANGELOG.md +0 -76
  256. package/node_modules/cliui/LICENSE.txt +0 -14
  257. package/node_modules/cliui/README.md +0 -115
  258. package/node_modules/cliui/index.js +0 -354
  259. package/node_modules/cliui/package.json +0 -65
  260. package/node_modules/color-convert/CHANGELOG.md +0 -54
  261. package/node_modules/color-convert/LICENSE +0 -21
  262. package/node_modules/color-convert/README.md +0 -68
  263. package/node_modules/color-convert/conversions.js +0 -839
  264. package/node_modules/color-convert/index.js +0 -81
  265. package/node_modules/color-convert/package.json +0 -48
  266. package/node_modules/color-convert/route.js +0 -97
  267. package/node_modules/color-name/LICENSE +0 -8
  268. package/node_modules/color-name/README.md +0 -11
  269. package/node_modules/color-name/index.js +0 -152
  270. package/node_modules/color-name/package.json +0 -28
  271. package/node_modules/decamelize/index.js +0 -13
  272. package/node_modules/decamelize/license +0 -21
  273. package/node_modules/decamelize/package.json +0 -38
  274. package/node_modules/decamelize/readme.md +0 -48
  275. package/node_modules/detect-libc/LICENSE +0 -201
  276. package/node_modules/detect-libc/README.md +0 -163
  277. package/node_modules/detect-libc/index.d.ts +0 -14
  278. package/node_modules/detect-libc/lib/detect-libc.js +0 -313
  279. package/node_modules/detect-libc/lib/elf.js +0 -39
  280. package/node_modules/detect-libc/lib/filesystem.js +0 -51
  281. package/node_modules/detect-libc/lib/process.js +0 -24
  282. package/node_modules/detect-libc/package.json +0 -44
  283. package/node_modules/dijkstrajs/.travis.yml +0 -4
  284. package/node_modules/dijkstrajs/CONTRIBUTING.md +0 -8
  285. package/node_modules/dijkstrajs/LICENSE.md +0 -19
  286. package/node_modules/dijkstrajs/README.md +0 -18
  287. package/node_modules/dijkstrajs/dijkstra.js +0 -165
  288. package/node_modules/dijkstrajs/package.json +0 -60
  289. package/node_modules/dijkstrajs/test/dijkstra.test.js +0 -96
  290. package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  291. package/node_modules/emoji-regex/README.md +0 -73
  292. package/node_modules/emoji-regex/es2015/index.js +0 -6
  293. package/node_modules/emoji-regex/es2015/text.js +0 -6
  294. package/node_modules/emoji-regex/index.d.ts +0 -23
  295. package/node_modules/emoji-regex/index.js +0 -6
  296. package/node_modules/emoji-regex/package.json +0 -50
  297. package/node_modules/emoji-regex/text.js +0 -6
  298. package/node_modules/find-up/index.d.ts +0 -137
  299. package/node_modules/find-up/index.js +0 -89
  300. package/node_modules/find-up/license +0 -9
  301. package/node_modules/find-up/package.json +0 -53
  302. package/node_modules/find-up/readme.md +0 -156
  303. package/node_modules/get-caller-file/LICENSE.md +0 -6
  304. package/node_modules/get-caller-file/README.md +0 -41
  305. package/node_modules/get-caller-file/index.d.ts +0 -2
  306. package/node_modules/get-caller-file/index.js +0 -22
  307. package/node_modules/get-caller-file/index.js.map +0 -1
  308. package/node_modules/get-caller-file/package.json +0 -42
  309. package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  310. package/node_modules/is-fullwidth-code-point/index.js +0 -50
  311. package/node_modules/is-fullwidth-code-point/license +0 -9
  312. package/node_modules/is-fullwidth-code-point/package.json +0 -42
  313. package/node_modules/is-fullwidth-code-point/readme.md +0 -39
  314. package/node_modules/locate-path/index.d.ts +0 -83
  315. package/node_modules/locate-path/index.js +0 -65
  316. package/node_modules/locate-path/license +0 -9
  317. package/node_modules/locate-path/package.json +0 -45
  318. package/node_modules/locate-path/readme.md +0 -122
  319. package/node_modules/node-datachannel/.clang-format +0 -17
  320. package/node_modules/node-datachannel/.editorconfig +0 -12
  321. package/node_modules/node-datachannel/.eslintignore +0 -8
  322. package/node_modules/node-datachannel/.eslintrc.json +0 -27
  323. package/node_modules/node-datachannel/.gitmodules +0 -3
  324. package/node_modules/node-datachannel/.prettierignore +0 -7
  325. package/node_modules/node-datachannel/.prettierrc +0 -13
  326. package/node_modules/node-datachannel/API.md +0 -247
  327. package/node_modules/node-datachannel/BULDING.md +0 -26
  328. package/node_modules/node-datachannel/CMakeLists.txt +0 -153
  329. package/node_modules/node-datachannel/LICENSE +0 -373
  330. package/node_modules/node-datachannel/README.md +0 -129
  331. package/node_modules/node-datachannel/dist/cjs/index.cjs +0 -11
  332. package/node_modules/node-datachannel/dist/cjs/index.cjs.map +0 -1
  333. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs +0 -101
  334. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs.map +0 -1
  335. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs +0 -91
  336. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs.map +0 -1
  337. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs +0 -94
  338. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs.map +0 -1
  339. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs +0 -45
  340. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs.map +0 -1
  341. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs +0 -8
  342. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs.map +0 -1
  343. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs +0 -86
  344. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs.map +0 -1
  345. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs +0 -34
  346. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs.map +0 -1
  347. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs +0 -34
  348. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs.map +0 -1
  349. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs +0 -214
  350. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs.map +0 -1
  351. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs +0 -53
  352. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +0 -1
  353. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs +0 -83
  354. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs.map +0 -1
  355. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs +0 -132
  356. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs.map +0 -1
  357. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs +0 -94
  358. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs.map +0 -1
  359. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs +0 -434
  360. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs.map +0 -1
  361. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs +0 -59
  362. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs.map +0 -1
  363. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs +0 -45
  364. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs.map +0 -1
  365. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs +0 -42
  366. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs.map +0 -1
  367. package/node_modules/node-datachannel/dist/esm/index.mjs +0 -8
  368. package/node_modules/node-datachannel/dist/esm/index.mjs.map +0 -1
  369. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs +0 -78
  370. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs.map +0 -1
  371. package/node_modules/node-datachannel/dist/esm/lib/index.mjs +0 -64
  372. package/node_modules/node-datachannel/dist/esm/lib/index.mjs.map +0 -1
  373. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs +0 -78
  374. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs.map +0 -1
  375. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs +0 -43
  376. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs.map +0 -1
  377. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs +0 -6
  378. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs.map +0 -1
  379. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs +0 -82
  380. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs.map +0 -1
  381. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs +0 -28
  382. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs.map +0 -1
  383. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs +0 -30
  384. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs.map +0 -1
  385. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs +0 -210
  386. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs.map +0 -1
  387. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs +0 -49
  388. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs.map +0 -1
  389. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs +0 -79
  390. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs.map +0 -1
  391. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs +0 -128
  392. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs.map +0 -1
  393. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs +0 -89
  394. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs.map +0 -1
  395. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs +0 -430
  396. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs.map +0 -1
  397. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs +0 -55
  398. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs.map +0 -1
  399. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs +0 -41
  400. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs.map +0 -1
  401. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs +0 -27
  402. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs.map +0 -1
  403. package/node_modules/node-datachannel/dist/types/lib/datachannel-stream.d.ts +0 -24
  404. package/node_modules/node-datachannel/dist/types/lib/index.d.ts +0 -241
  405. package/node_modules/node-datachannel/dist/types/lib/types.d.ts +0 -119
  406. package/node_modules/node-datachannel/dist/types/lib/websocket-server.d.ts +0 -13
  407. package/node_modules/node-datachannel/dist/types/lib/websocket.d.ts +0 -25
  408. package/node_modules/node-datachannel/dist/types/polyfill/Events.d.ts +0 -15
  409. package/node_modules/node-datachannel/dist/types/polyfill/RTCCertificate.d.ts +0 -9
  410. package/node_modules/node-datachannel/dist/types/polyfill/RTCDataChannel.d.ts +0 -29
  411. package/node_modules/node-datachannel/dist/types/polyfill/RTCDtlsTransport.d.ts +0 -15
  412. package/node_modules/node-datachannel/dist/types/polyfill/RTCError.d.ts +0 -17
  413. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceCandidate.d.ts +0 -21
  414. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceTransport.d.ts +0 -30
  415. package/node_modules/node-datachannel/dist/types/polyfill/RTCPeerConnection.d.ts +0 -64
  416. package/node_modules/node-datachannel/dist/types/polyfill/RTCSctpTransport.d.ts +0 -15
  417. package/node_modules/node-datachannel/dist/types/polyfill/RTCSessionDescription.d.ts +0 -10
  418. package/node_modules/node-datachannel/dist/types/polyfill/index.d.ts +0 -26
  419. package/node_modules/node-datachannel/jest.config.ts +0 -14
  420. package/node_modules/node-datachannel/package.json +0 -133
  421. package/node_modules/node-datachannel/rollup.config.mjs +0 -67
  422. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.cpp +0 -530
  423. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.h +0 -63
  424. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.cpp +0 -172
  425. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.h +0 -43
  426. package/node_modules/node-datachannel/src/cpp/main.cpp +0 -58
  427. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.cpp +0 -457
  428. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.h +0 -52
  429. package/node_modules/node-datachannel/src/cpp/media-av1packetization.cpp +0 -24
  430. package/node_modules/node-datachannel/src/cpp/media-av1packetization.h +0 -11
  431. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.cpp +0 -126
  432. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.h +0 -29
  433. package/node_modules/node-datachannel/src/cpp/media-direction.cpp +0 -43
  434. package/node_modules/node-datachannel/src/cpp/media-direction.h +0 -10
  435. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.cpp +0 -126
  436. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.h +0 -30
  437. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.cpp +0 -126
  438. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.h +0 -30
  439. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.cpp +0 -32
  440. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.h +0 -11
  441. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.cpp +0 -31
  442. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.h +0 -11
  443. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.cpp +0 -79
  444. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.h +0 -28
  445. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.cpp +0 -68
  446. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.h +0 -28
  447. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.cpp +0 -57
  448. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.h +0 -28
  449. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.cpp +0 -93
  450. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.h +0 -30
  451. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.cpp +0 -167
  452. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.h +0 -35
  453. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.cpp +0 -95
  454. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.h +0 -30
  455. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.cpp +0 -458
  456. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.h +0 -61
  457. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.cpp +0 -526
  458. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.h +0 -56
  459. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.cpp +0 -1298
  460. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.h +0 -89
  461. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.cpp +0 -205
  462. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.h +0 -24
  463. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.cpp +0 -57
  464. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.h +0 -47
  465. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.cpp +0 -275
  466. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.h +0 -41
  467. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.cpp +0 -796
  468. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.h +0 -63
  469. package/node_modules/node-datachannel/src/index.ts +0 -9
  470. package/node_modules/node-datachannel/src/lib/datachannel-stream.ts +0 -100
  471. package/node_modules/node-datachannel/src/lib/index.ts +0 -290
  472. package/node_modules/node-datachannel/src/lib/node-datachannel.ts +0 -84
  473. package/node_modules/node-datachannel/src/lib/types.ts +0 -169
  474. package/node_modules/node-datachannel/src/lib/websocket-server.ts +0 -37
  475. package/node_modules/node-datachannel/src/lib/websocket.ts +0 -26
  476. package/node_modules/node-datachannel/src/polyfill/Events.ts +0 -82
  477. package/node_modules/node-datachannel/src/polyfill/Exception.ts +0 -37
  478. package/node_modules/node-datachannel/src/polyfill/README.md +0 -41
  479. package/node_modules/node-datachannel/src/polyfill/RTCCertificate.ts +0 -21
  480. package/node_modules/node-datachannel/src/polyfill/RTCDataChannel.ts +0 -225
  481. package/node_modules/node-datachannel/src/polyfill/RTCDtlsTransport.ts +0 -46
  482. package/node_modules/node-datachannel/src/polyfill/RTCError.ts +0 -78
  483. package/node_modules/node-datachannel/src/polyfill/RTCIceCandidate.ts +0 -128
  484. package/node_modules/node-datachannel/src/polyfill/RTCIceTransport.ts +0 -90
  485. package/node_modules/node-datachannel/src/polyfill/RTCPeerConnection.ts +0 -527
  486. package/node_modules/node-datachannel/src/polyfill/RTCSctpTransport.ts +0 -51
  487. package/node_modules/node-datachannel/src/polyfill/RTCSessionDescription.ts +0 -41
  488. package/node_modules/node-datachannel/src/polyfill/index.ts +0 -38
  489. package/node_modules/node-datachannel/tsconfig.json +0 -21
  490. package/node_modules/p-limit/index.d.ts +0 -38
  491. package/node_modules/p-limit/index.js +0 -57
  492. package/node_modules/p-limit/license +0 -9
  493. package/node_modules/p-limit/package.json +0 -52
  494. package/node_modules/p-limit/readme.md +0 -101
  495. package/node_modules/p-locate/index.d.ts +0 -64
  496. package/node_modules/p-locate/index.js +0 -52
  497. package/node_modules/p-locate/license +0 -9
  498. package/node_modules/p-locate/package.json +0 -53
  499. package/node_modules/p-locate/readme.md +0 -90
  500. package/node_modules/p-try/index.d.ts +0 -39
  501. package/node_modules/p-try/index.js +0 -9
  502. package/node_modules/p-try/license +0 -9
  503. package/node_modules/p-try/package.json +0 -42
  504. package/node_modules/p-try/readme.md +0 -58
  505. package/node_modules/path-exists/index.d.ts +0 -28
  506. package/node_modules/path-exists/index.js +0 -23
  507. package/node_modules/path-exists/license +0 -9
  508. package/node_modules/path-exists/package.json +0 -39
  509. package/node_modules/path-exists/readme.md +0 -52
  510. package/node_modules/pngjs/.eslintignore +0 -2
  511. package/node_modules/pngjs/.eslintrc.json +0 -19
  512. package/node_modules/pngjs/.prettierignore +0 -3
  513. package/node_modules/pngjs/LICENSE +0 -20
  514. package/node_modules/pngjs/README.md +0 -429
  515. package/node_modules/pngjs/browser.js +0 -16096
  516. package/node_modules/pngjs/coverage/lcov-report/base.css +0 -354
  517. package/node_modules/pngjs/coverage/lcov-report/bitmapper.js.html +0 -881
  518. package/node_modules/pngjs/coverage/lcov-report/bitpacker.js.html +0 -554
  519. package/node_modules/pngjs/coverage/lcov-report/block-navigation.js +0 -77
  520. package/node_modules/pngjs/coverage/lcov-report/chunkstream.js.html +0 -647
  521. package/node_modules/pngjs/coverage/lcov-report/constants.js.html +0 -176
  522. package/node_modules/pngjs/coverage/lcov-report/crc.js.html +0 -200
  523. package/node_modules/pngjs/coverage/lcov-report/favicon.png +0 -0
  524. package/node_modules/pngjs/coverage/lcov-report/filter-pack.js.html +0 -593
  525. package/node_modules/pngjs/coverage/lcov-report/filter-parse-async.js.html +0 -152
  526. package/node_modules/pngjs/coverage/lcov-report/filter-parse-sync.js.html +0 -143
  527. package/node_modules/pngjs/coverage/lcov-report/filter-parse.js.html +0 -611
  528. package/node_modules/pngjs/coverage/lcov-report/format-normaliser.js.html +0 -359
  529. package/node_modules/pngjs/coverage/lcov-report/index.html +0 -426
  530. package/node_modules/pngjs/coverage/lcov-report/interlace.js.html +0 -365
  531. package/node_modules/pngjs/coverage/lcov-report/packer-async.js.html +0 -230
  532. package/node_modules/pngjs/coverage/lcov-report/packer-sync.js.html +0 -248
  533. package/node_modules/pngjs/coverage/lcov-report/packer.js.html +0 -467
  534. package/node_modules/pngjs/coverage/lcov-report/paeth-predictor.js.html +0 -128
  535. package/node_modules/pngjs/coverage/lcov-report/parser-async.js.html +0 -575
  536. package/node_modules/pngjs/coverage/lcov-report/parser-sync.js.html +0 -404
  537. package/node_modules/pngjs/coverage/lcov-report/parser.js.html +0 -950
  538. package/node_modules/pngjs/coverage/lcov-report/png-sync.js.html +0 -116
  539. package/node_modules/pngjs/coverage/lcov-report/png.js.html +0 -662
  540. package/node_modules/pngjs/coverage/lcov-report/prettify.css +0 -101
  541. package/node_modules/pngjs/coverage/lcov-report/prettify.js +0 -1007
  542. package/node_modules/pngjs/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  543. package/node_modules/pngjs/coverage/lcov-report/sorter.js +0 -169
  544. package/node_modules/pngjs/coverage/lcov-report/sync-inflate.js.html +0 -584
  545. package/node_modules/pngjs/coverage/lcov-report/sync-reader.js.html +0 -215
  546. package/node_modules/pngjs/coverage/lcov.info +0 -2177
  547. package/node_modules/pngjs/lib/bitmapper.js +0 -267
  548. package/node_modules/pngjs/lib/bitpacker.js +0 -158
  549. package/node_modules/pngjs/lib/chunkstream.js +0 -189
  550. package/node_modules/pngjs/lib/constants.js +0 -32
  551. package/node_modules/pngjs/lib/crc.js +0 -40
  552. package/node_modules/pngjs/lib/filter-pack.js +0 -171
  553. package/node_modules/pngjs/lib/filter-parse-async.js +0 -24
  554. package/node_modules/pngjs/lib/filter-parse-sync.js +0 -21
  555. package/node_modules/pngjs/lib/filter-parse.js +0 -177
  556. package/node_modules/pngjs/lib/format-normaliser.js +0 -93
  557. package/node_modules/pngjs/lib/interlace.js +0 -95
  558. package/node_modules/pngjs/lib/packer-async.js +0 -50
  559. package/node_modules/pngjs/lib/packer-sync.js +0 -56
  560. package/node_modules/pngjs/lib/packer.js +0 -129
  561. package/node_modules/pngjs/lib/paeth-predictor.js +0 -16
  562. package/node_modules/pngjs/lib/parser-async.js +0 -165
  563. package/node_modules/pngjs/lib/parser-sync.js +0 -108
  564. package/node_modules/pngjs/lib/parser.js +0 -290
  565. package/node_modules/pngjs/lib/png-sync.js +0 -12
  566. package/node_modules/pngjs/lib/png.js +0 -194
  567. package/node_modules/pngjs/lib/sync-inflate.js +0 -168
  568. package/node_modules/pngjs/lib/sync-reader.js +0 -45
  569. package/node_modules/pngjs/package.json +0 -73
  570. package/node_modules/qrcode/README.md +0 -770
  571. package/node_modules/qrcode/bin/qrcode +0 -159
  572. package/node_modules/qrcode/helper/to-sjis-browser.js +0 -2
  573. package/node_modules/qrcode/helper/to-sjis.js +0 -105
  574. package/node_modules/qrcode/lib/browser.js +0 -76
  575. package/node_modules/qrcode/lib/can-promise.js +0 -7
  576. package/node_modules/qrcode/lib/core/alignment-pattern.js +0 -83
  577. package/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -59
  578. package/node_modules/qrcode/lib/core/bit-buffer.js +0 -37
  579. package/node_modules/qrcode/lib/core/bit-matrix.js +0 -65
  580. package/node_modules/qrcode/lib/core/byte-data.js +0 -30
  581. package/node_modules/qrcode/lib/core/error-correction-code.js +0 -135
  582. package/node_modules/qrcode/lib/core/error-correction-level.js +0 -50
  583. package/node_modules/qrcode/lib/core/finder-pattern.js +0 -22
  584. package/node_modules/qrcode/lib/core/format-info.js +0 -29
  585. package/node_modules/qrcode/lib/core/galois-field.js +0 -69
  586. package/node_modules/qrcode/lib/core/kanji-data.js +0 -54
  587. package/node_modules/qrcode/lib/core/mask-pattern.js +0 -234
  588. package/node_modules/qrcode/lib/core/mode.js +0 -167
  589. package/node_modules/qrcode/lib/core/numeric-data.js +0 -43
  590. package/node_modules/qrcode/lib/core/polynomial.js +0 -62
  591. package/node_modules/qrcode/lib/core/qrcode.js +0 -495
  592. package/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -56
  593. package/node_modules/qrcode/lib/core/regex.js +0 -31
  594. package/node_modules/qrcode/lib/core/segments.js +0 -330
  595. package/node_modules/qrcode/lib/core/utils.js +0 -63
  596. package/node_modules/qrcode/lib/core/version-check.js +0 -9
  597. package/node_modules/qrcode/lib/core/version.js +0 -163
  598. package/node_modules/qrcode/lib/index.js +0 -12
  599. package/node_modules/qrcode/lib/renderer/canvas.js +0 -63
  600. package/node_modules/qrcode/lib/renderer/png.js +0 -78
  601. package/node_modules/qrcode/lib/renderer/svg-tag.js +0 -81
  602. package/node_modules/qrcode/lib/renderer/svg.js +0 -19
  603. package/node_modules/qrcode/lib/renderer/terminal/terminal-small.js +0 -85
  604. package/node_modules/qrcode/lib/renderer/terminal/terminal.js +0 -49
  605. package/node_modules/qrcode/lib/renderer/terminal.js +0 -9
  606. package/node_modules/qrcode/lib/renderer/utf8.js +0 -71
  607. package/node_modules/qrcode/lib/renderer/utils.js +0 -99
  608. package/node_modules/qrcode/lib/server.js +0 -138
  609. package/node_modules/qrcode/license +0 -10
  610. package/node_modules/qrcode/package.json +0 -77
  611. package/node_modules/require-directory/.jshintrc +0 -67
  612. package/node_modules/require-directory/.npmignore +0 -1
  613. package/node_modules/require-directory/.travis.yml +0 -3
  614. package/node_modules/require-directory/LICENSE +0 -22
  615. package/node_modules/require-directory/README.markdown +0 -184
  616. package/node_modules/require-directory/index.js +0 -86
  617. package/node_modules/require-directory/package.json +0 -40
  618. package/node_modules/require-main-filename/CHANGELOG.md +0 -26
  619. package/node_modules/require-main-filename/LICENSE.txt +0 -14
  620. package/node_modules/require-main-filename/README.md +0 -26
  621. package/node_modules/require-main-filename/index.js +0 -18
  622. package/node_modules/require-main-filename/package.json +0 -35
  623. package/node_modules/semver/LICENSE +0 -15
  624. package/node_modules/semver/README.md +0 -680
  625. package/node_modules/semver/bin/semver.js +0 -195
  626. package/node_modules/semver/classes/comparator.js +0 -143
  627. package/node_modules/semver/classes/index.js +0 -7
  628. package/node_modules/semver/classes/range.js +0 -577
  629. package/node_modules/semver/classes/semver.js +0 -350
  630. package/node_modules/semver/functions/clean.js +0 -8
  631. package/node_modules/semver/functions/cmp.js +0 -54
  632. package/node_modules/semver/functions/coerce.js +0 -62
  633. package/node_modules/semver/functions/compare-build.js +0 -9
  634. package/node_modules/semver/functions/compare-loose.js +0 -5
  635. package/node_modules/semver/functions/compare.js +0 -7
  636. package/node_modules/semver/functions/diff.js +0 -60
  637. package/node_modules/semver/functions/eq.js +0 -5
  638. package/node_modules/semver/functions/gt.js +0 -5
  639. package/node_modules/semver/functions/gte.js +0 -5
  640. package/node_modules/semver/functions/inc.js +0 -21
  641. package/node_modules/semver/functions/lt.js +0 -5
  642. package/node_modules/semver/functions/lte.js +0 -5
  643. package/node_modules/semver/functions/major.js +0 -5
  644. package/node_modules/semver/functions/minor.js +0 -5
  645. package/node_modules/semver/functions/neq.js +0 -5
  646. package/node_modules/semver/functions/parse.js +0 -18
  647. package/node_modules/semver/functions/patch.js +0 -5
  648. package/node_modules/semver/functions/prerelease.js +0 -8
  649. package/node_modules/semver/functions/rcompare.js +0 -5
  650. package/node_modules/semver/functions/rsort.js +0 -5
  651. package/node_modules/semver/functions/satisfies.js +0 -12
  652. package/node_modules/semver/functions/sort.js +0 -5
  653. package/node_modules/semver/functions/truncate.js +0 -48
  654. package/node_modules/semver/functions/valid.js +0 -8
  655. package/node_modules/semver/index.js +0 -93
  656. package/node_modules/semver/internal/constants.js +0 -37
  657. package/node_modules/semver/internal/debug.js +0 -11
  658. package/node_modules/semver/internal/identifiers.js +0 -29
  659. package/node_modules/semver/internal/lrucache.js +0 -42
  660. package/node_modules/semver/internal/parse-options.js +0 -17
  661. package/node_modules/semver/internal/re.js +0 -223
  662. package/node_modules/semver/package.json +0 -78
  663. package/node_modules/semver/preload.js +0 -4
  664. package/node_modules/semver/range.bnf +0 -17
  665. package/node_modules/semver/ranges/gtr.js +0 -6
  666. package/node_modules/semver/ranges/intersects.js +0 -9
  667. package/node_modules/semver/ranges/ltr.js +0 -6
  668. package/node_modules/semver/ranges/max-satisfying.js +0 -27
  669. package/node_modules/semver/ranges/min-satisfying.js +0 -26
  670. package/node_modules/semver/ranges/min-version.js +0 -63
  671. package/node_modules/semver/ranges/outside.js +0 -82
  672. package/node_modules/semver/ranges/simplify.js +0 -49
  673. package/node_modules/semver/ranges/subset.js +0 -249
  674. package/node_modules/semver/ranges/to-comparators.js +0 -10
  675. package/node_modules/semver/ranges/valid.js +0 -13
  676. package/node_modules/set-blocking/CHANGELOG.md +0 -26
  677. package/node_modules/set-blocking/LICENSE.txt +0 -14
  678. package/node_modules/set-blocking/README.md +0 -31
  679. package/node_modules/set-blocking/index.js +0 -7
  680. package/node_modules/set-blocking/package.json +0 -42
  681. package/node_modules/sharp/LICENSE +0 -191
  682. package/node_modules/sharp/README.md +0 -112
  683. package/node_modules/sharp/dist/channel.cjs +0 -177
  684. package/node_modules/sharp/dist/channel.mjs +0 -177
  685. package/node_modules/sharp/dist/colour.cjs +0 -199
  686. package/node_modules/sharp/dist/colour.mjs +0 -199
  687. package/node_modules/sharp/dist/composite.cjs +0 -213
  688. package/node_modules/sharp/dist/composite.mjs +0 -213
  689. package/node_modules/sharp/dist/constructor.cjs +0 -511
  690. package/node_modules/sharp/dist/constructor.mjs +0 -511
  691. package/node_modules/sharp/dist/index.cjs +0 -25
  692. package/node_modules/sharp/dist/index.d.cts +0 -1999
  693. package/node_modules/sharp/dist/index.d.mts +0 -2046
  694. package/node_modules/sharp/dist/index.mjs +0 -25
  695. package/node_modules/sharp/dist/input.cjs +0 -819
  696. package/node_modules/sharp/dist/input.mjs +0 -819
  697. package/node_modules/sharp/dist/is.cjs +0 -143
  698. package/node_modules/sharp/dist/is.mjs +0 -143
  699. package/node_modules/sharp/dist/libvips.cjs +0 -212
  700. package/node_modules/sharp/dist/libvips.mjs +0 -212
  701. package/node_modules/sharp/dist/operation.cjs +0 -1002
  702. package/node_modules/sharp/dist/operation.mjs +0 -1002
  703. package/node_modules/sharp/dist/output.cjs +0 -1785
  704. package/node_modules/sharp/dist/output.mjs +0 -1785
  705. package/node_modules/sharp/dist/resize.cjs +0 -617
  706. package/node_modules/sharp/dist/resize.mjs +0 -617
  707. package/node_modules/sharp/dist/sharp.cjs +0 -174
  708. package/node_modules/sharp/dist/sharp.mjs +0 -174
  709. package/node_modules/sharp/dist/utility.cjs +0 -301
  710. package/node_modules/sharp/dist/utility.mjs +0 -301
  711. package/node_modules/sharp/install/build.js +0 -38
  712. package/node_modules/sharp/lib/index.d.ts +0 -1999
  713. package/node_modules/sharp/package.json +0 -227
  714. package/node_modules/sharp/src/binding.gyp +0 -303
  715. package/node_modules/sharp/src/common.cc +0 -1186
  716. package/node_modules/sharp/src/common.h +0 -421
  717. package/node_modules/sharp/src/metadata.cc +0 -404
  718. package/node_modules/sharp/src/metadata.h +0 -95
  719. package/node_modules/sharp/src/operations.cc +0 -516
  720. package/node_modules/sharp/src/operations.h +0 -137
  721. package/node_modules/sharp/src/pipeline.cc +0 -1948
  722. package/node_modules/sharp/src/pipeline.h +0 -422
  723. package/node_modules/sharp/src/sharp.cc +0 -43
  724. package/node_modules/sharp/src/stats.cc +0 -186
  725. package/node_modules/sharp/src/stats.h +0 -62
  726. package/node_modules/sharp/src/utilities.cc +0 -289
  727. package/node_modules/sharp/src/utilities.h +0 -22
  728. package/node_modules/string-width/index.d.ts +0 -29
  729. package/node_modules/string-width/index.js +0 -47
  730. package/node_modules/string-width/license +0 -9
  731. package/node_modules/string-width/package.json +0 -56
  732. package/node_modules/string-width/readme.md +0 -50
  733. package/node_modules/strip-ansi/index.d.ts +0 -17
  734. package/node_modules/strip-ansi/index.js +0 -4
  735. package/node_modules/strip-ansi/license +0 -9
  736. package/node_modules/strip-ansi/package.json +0 -54
  737. package/node_modules/strip-ansi/readme.md +0 -46
  738. package/node_modules/which-module/LICENSE +0 -13
  739. package/node_modules/which-module/README.md +0 -58
  740. package/node_modules/which-module/index.js +0 -9
  741. package/node_modules/which-module/package.json +0 -41
  742. package/node_modules/wrap-ansi/index.js +0 -186
  743. package/node_modules/wrap-ansi/license +0 -9
  744. package/node_modules/wrap-ansi/package.json +0 -61
  745. package/node_modules/wrap-ansi/readme.md +0 -97
  746. package/node_modules/ws/LICENSE +0 -20
  747. package/node_modules/ws/README.md +0 -548
  748. package/node_modules/ws/browser.js +0 -8
  749. package/node_modules/ws/index.js +0 -22
  750. package/node_modules/ws/lib/buffer-util.js +0 -131
  751. package/node_modules/ws/lib/constants.js +0 -19
  752. package/node_modules/ws/lib/event-target.js +0 -292
  753. package/node_modules/ws/lib/extension.js +0 -203
  754. package/node_modules/ws/lib/limiter.js +0 -55
  755. package/node_modules/ws/lib/permessage-deflate.js +0 -530
  756. package/node_modules/ws/lib/receiver.js +0 -743
  757. package/node_modules/ws/lib/sender.js +0 -607
  758. package/node_modules/ws/lib/stream.js +0 -161
  759. package/node_modules/ws/lib/subprotocol.js +0 -62
  760. package/node_modules/ws/lib/validation.js +0 -152
  761. package/node_modules/ws/lib/websocket-server.js +0 -562
  762. package/node_modules/ws/lib/websocket.js +0 -1407
  763. package/node_modules/ws/package.json +0 -74
  764. package/node_modules/ws/wrapper.mjs +0 -21
  765. package/node_modules/y18n/CHANGELOG.md +0 -35
  766. package/node_modules/y18n/LICENSE +0 -13
  767. package/node_modules/y18n/README.md +0 -109
  768. package/node_modules/y18n/index.js +0 -188
  769. package/node_modules/y18n/package.json +0 -39
  770. package/node_modules/yargs/CHANGELOG.md +0 -420
  771. package/node_modules/yargs/LICENSE +0 -21
  772. package/node_modules/yargs/README.md +0 -140
  773. package/node_modules/yargs/build/lib/apply-extends.d.ts +0 -2
  774. package/node_modules/yargs/build/lib/apply-extends.js +0 -65
  775. package/node_modules/yargs/build/lib/argsert.d.ts +0 -2
  776. package/node_modules/yargs/build/lib/argsert.js +0 -65
  777. package/node_modules/yargs/build/lib/command.d.ts +0 -64
  778. package/node_modules/yargs/build/lib/command.js +0 -416
  779. package/node_modules/yargs/build/lib/common-types.d.ts +0 -36
  780. package/node_modules/yargs/build/lib/common-types.js +0 -25
  781. package/node_modules/yargs/build/lib/completion-templates.d.ts +0 -2
  782. package/node_modules/yargs/build/lib/completion-templates.js +0 -50
  783. package/node_modules/yargs/build/lib/completion.d.ts +0 -21
  784. package/node_modules/yargs/build/lib/completion.js +0 -135
  785. package/node_modules/yargs/build/lib/is-promise.d.ts +0 -1
  786. package/node_modules/yargs/build/lib/is-promise.js +0 -9
  787. package/node_modules/yargs/build/lib/levenshtein.d.ts +0 -1
  788. package/node_modules/yargs/build/lib/levenshtein.js +0 -58
  789. package/node_modules/yargs/build/lib/middleware.d.ts +0 -10
  790. package/node_modules/yargs/build/lib/middleware.js +0 -57
  791. package/node_modules/yargs/build/lib/obj-filter.d.ts +0 -1
  792. package/node_modules/yargs/build/lib/obj-filter.js +0 -14
  793. package/node_modules/yargs/build/lib/parse-command.d.ts +0 -11
  794. package/node_modules/yargs/build/lib/parse-command.js +0 -36
  795. package/node_modules/yargs/build/lib/process-argv.d.ts +0 -2
  796. package/node_modules/yargs/build/lib/process-argv.js +0 -31
  797. package/node_modules/yargs/build/lib/usage.d.ts +0 -49
  798. package/node_modules/yargs/build/lib/usage.js +0 -540
  799. package/node_modules/yargs/build/lib/validation.d.ts +0 -34
  800. package/node_modules/yargs/build/lib/validation.js +0 -330
  801. package/node_modules/yargs/build/lib/yargs.d.ts +0 -274
  802. package/node_modules/yargs/build/lib/yargs.js +0 -1190
  803. package/node_modules/yargs/build/lib/yerror.d.ts +0 -4
  804. package/node_modules/yargs/build/lib/yerror.js +0 -11
  805. package/node_modules/yargs/index.js +0 -40
  806. package/node_modules/yargs/locales/be.json +0 -46
  807. package/node_modules/yargs/locales/de.json +0 -46
  808. package/node_modules/yargs/locales/en.json +0 -51
  809. package/node_modules/yargs/locales/es.json +0 -46
  810. package/node_modules/yargs/locales/fi.json +0 -49
  811. package/node_modules/yargs/locales/fr.json +0 -53
  812. package/node_modules/yargs/locales/hi.json +0 -49
  813. package/node_modules/yargs/locales/hu.json +0 -46
  814. package/node_modules/yargs/locales/id.json +0 -50
  815. package/node_modules/yargs/locales/it.json +0 -46
  816. package/node_modules/yargs/locales/ja.json +0 -51
  817. package/node_modules/yargs/locales/ko.json +0 -49
  818. package/node_modules/yargs/locales/nb.json +0 -44
  819. package/node_modules/yargs/locales/nl.json +0 -49
  820. package/node_modules/yargs/locales/nn.json +0 -44
  821. package/node_modules/yargs/locales/pirate.json +0 -13
  822. package/node_modules/yargs/locales/pl.json +0 -49
  823. package/node_modules/yargs/locales/pt.json +0 -45
  824. package/node_modules/yargs/locales/pt_BR.json +0 -48
  825. package/node_modules/yargs/locales/ru.json +0 -46
  826. package/node_modules/yargs/locales/th.json +0 -46
  827. package/node_modules/yargs/locales/tr.json +0 -48
  828. package/node_modules/yargs/locales/zh_CN.json +0 -48
  829. package/node_modules/yargs/locales/zh_TW.json +0 -47
  830. package/node_modules/yargs/package.json +0 -92
  831. package/node_modules/yargs/yargs.js +0 -14
  832. package/node_modules/yargs-parser/CHANGELOG.md +0 -601
  833. package/node_modules/yargs-parser/LICENSE.txt +0 -14
  834. package/node_modules/yargs-parser/README.md +0 -449
  835. package/node_modules/yargs-parser/index.js +0 -1032
  836. package/node_modules/yargs-parser/lib/tokenize-arg-string.js +0 -40
  837. package/node_modules/yargs-parser/package.json +0 -46
@@ -0,0 +1,20 @@
1
+ // Windows Script Host has no console. Keep the login task alive until the
2
+ // short-lived CLI has handed the resident service to the background broker.
3
+ if (WScript.Arguments.length !== 2) WScript.Quit(2);
4
+ var shell = new ActiveXObject('WScript.Shell');
5
+ var files = new ActiveXObject('Scripting.FileSystemObject');
6
+ var node = WScript.Arguments.Item(0);
7
+ var entry = WScript.Arguments.Item(1);
8
+ if (!files.FileExists(node)) {
9
+ var directories = shell.Environment('PROCESS').Item('PATH').split(';');
10
+ node = '';
11
+ for (var i = 0; i < directories.length; i++) {
12
+ var directory = directories[i].replace(/^"|"$/g, '');
13
+ if (!directory) continue;
14
+ var candidate = files.BuildPath(directory, 'node.exe');
15
+ if (files.FileExists(candidate)) { node = candidate; break; }
16
+ }
17
+ if (!node) WScript.Quit(2);
18
+ }
19
+ var command = '"' + node + '" "' + entry + '" start --json';
20
+ WScript.Quit(shell.Run(command, 0, true));
@@ -1,27 +1,83 @@
1
- param([string]$NodePath, [string]$Entry, [ValidateSet('enable','disable','status')][string]$Action='status')
1
+ param([string]$NodePath, [string]$Entry, [ValidateSet('enable','disable','status')][string]$Action='status')
2
2
  $ErrorActionPreference = 'Stop'
3
3
  [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
4
+
5
+ $taskName = 'Code Relax 桌面服务'
6
+ $legacyTaskName = 'Code Relax Bridge'
7
+ $taskSource = '@walkhi/code-relax'
8
+ $taskPath = '\' + $taskName
9
+ $launcher = Join-Path $PSScriptRoot 'resident-start.js'
10
+ $wscript = Join-Path $env:WINDIR 'System32\wscript.exe'
11
+ $arguments = '//B //Nologo "' + $launcher + '" "' + $NodePath + '" "' + $Entry + '"'
12
+ $currentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
13
+
14
+ $scheduler = New-Object -ComObject 'Schedule.Service'
15
+ $scheduler.Connect()
16
+ $root = $scheduler.GetFolder('\')
17
+ $registered = @($root.GetTasks(1) | Where-Object { $_.Name -eq $taskName } | Select-Object -First 1)
18
+ $legacyRegistered = @($root.GetTasks(1) | Where-Object { $_.Name -eq $legacyTaskName } | Select-Object -First 1)
19
+ if ($registered.Count -gt 0 -and $registered[0].Definition.RegistrationInfo.Source -ne $taskSource) {
20
+ throw 'Scheduled task is not owned by this installation.'
21
+ }
22
+ if ($legacyRegistered.Count -gt 0 -and $legacyRegistered[0].Definition.RegistrationInfo.Source -ne $taskSource) {
23
+ throw 'Legacy scheduled task is not owned by this installation.'
24
+ }
25
+
26
+ # Remove only the legacy shortcut created by this package. A Startup LNK that
27
+ # launches hidden PowerShell with ExecutionPolicy Bypass triggers AV heuristics.
4
28
  $shell = New-Object -ComObject WScript.Shell
5
- $target = Join-Path $shell.SpecialFolders.Item('Startup') 'Code Relax Bridge.lnk'
6
- $launcher = Join-Path $PSScriptRoot 'resident-start.ps1'
7
- $powershell = Join-Path $env:SystemRoot 'System32/WindowsPowerShell/v1.0/powershell.exe'
8
- $exists = Test-Path -LiteralPath $target
9
- if ($exists) {
10
- $existing = $shell.CreateShortcut($target)
11
- if ($existing.TargetPath -ne $powershell -or -not $existing.Arguments.Contains('"' + $launcher + '"')) {
12
- throw 'Startup shortcut is not owned by this installation.'
29
+ $legacyPath = Join-Path $shell.SpecialFolders.Item('Startup') 'Code Relax Bridge.lnk'
30
+ $legacyLauncher = Join-Path $PSScriptRoot 'resident-start.ps1'
31
+ $legacyExists = Test-Path -LiteralPath $legacyPath
32
+ if ($Action -ne 'status' -and $legacyExists) {
33
+ $legacy = $shell.CreateShortcut($legacyPath)
34
+ if (-not $legacy.Arguments.Contains('"' + $legacyLauncher + '"')) {
35
+ throw 'Legacy startup shortcut is not owned by this installation.'
13
36
  }
14
37
  }
38
+
15
39
  if ($Action -eq 'enable') {
16
- if (-not (Test-Path -LiteralPath $NodePath) -or -not (Test-Path -LiteralPath $Entry)) { throw 'Installed runtime is missing.' }
17
- $link = $shell.CreateShortcut($target)
18
- $link.TargetPath = $powershell
19
- $link.Arguments = '-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File "' + $launcher + '" -NodePath "' + $NodePath + '" -Entry "' + $Entry + '"'
20
- $link.WorkingDirectory = $env:USERPROFILE
21
- $link.WindowStyle = 7
22
- $link.Description = 'Code Relax resident computer connection'
23
- $link.Save()
24
- } elseif ($Action -eq 'disable' -and $exists) {
25
- Remove-Item -LiteralPath $target
40
+ if (-not (Test-Path -LiteralPath $NodePath) -or -not (Test-Path -LiteralPath $Entry) -or
41
+ -not (Test-Path -LiteralPath $launcher) -or -not (Test-Path -LiteralPath $wscript)) { throw 'Installed runtime is missing.' }
42
+ $definition = $scheduler.NewTask(0)
43
+ $definition.RegistrationInfo.Description = 'Start the Code Relax desktop service when this user signs in.'
44
+ $definition.RegistrationInfo.Source = $taskSource
45
+ $definition.Principal.UserId = $currentUser
46
+ $definition.Principal.LogonType = 3 # TASK_LOGON_INTERACTIVE_TOKEN
47
+ $definition.Principal.RunLevel = 0 # TASK_RUNLEVEL_LUA
48
+ $definition.Settings.Enabled = $true
49
+ $definition.Settings.Hidden = $true
50
+ $definition.Settings.StartWhenAvailable = $true
51
+ $definition.Settings.DisallowStartIfOnBatteries = $false
52
+ $definition.Settings.StopIfGoingOnBatteries = $false
53
+ $definition.Settings.ExecutionTimeLimit = 'PT5M'
54
+ $definition.Settings.MultipleInstances = 2 # TASK_INSTANCES_IGNORE_NEW
55
+ $trigger = $definition.Triggers.Create(9) # TASK_TRIGGER_LOGON
56
+ $trigger.UserId = $currentUser
57
+ $trigger.Enabled = $true
58
+ $exec = $definition.Actions.Create(0) # TASK_ACTION_EXEC
59
+ $exec.Path = $wscript
60
+ $exec.Arguments = $arguments
61
+ $exec.WorkingDirectory = $env:USERPROFILE
62
+ [void]$root.RegisterTaskDefinition($taskName, $definition, 6, $null, $null, 3, $null) # TASK_CREATE_OR_UPDATE
63
+ if ($legacyRegistered.Count -gt 0) { $root.DeleteTask($legacyTaskName, 0) }
64
+ } elseif ($Action -eq 'disable') {
65
+ if ($registered.Count -gt 0) { $root.DeleteTask($taskName, 0) }
66
+ if ($legacyRegistered.Count -gt 0) { $root.DeleteTask($legacyTaskName, 0) }
67
+ }
68
+ if ($Action -ne 'status' -and $legacyExists) { Remove-Item -LiteralPath $legacyPath }
69
+
70
+ $active = @($root.GetTasks(1) | Where-Object { $_.Name -eq $taskName } | Select-Object -First 1)
71
+ $taskEnabled = $active.Count -gt 0 -and $active[0].Enabled
72
+ $taskCurrent = $false
73
+ if ($taskEnabled) {
74
+ $taskAction = $active[0].Definition.Actions.Item(1)
75
+ $taskCurrent = $taskAction.Path -ieq $wscript -and $taskAction.Arguments -ieq $arguments
26
76
  }
27
- @{ enabled=(Test-Path -LiteralPath $target); path=$target; scope='current-user-logon' } | ConvertTo-Json -Compress
77
+ @{
78
+ enabled=($taskCurrent -and $legacyRegistered.Count -eq 0)
79
+ taskPresent=$taskEnabled
80
+ path=$(if ($taskEnabled) { 'Task Scheduler:' + $taskPath } elseif ($legacyRegistered.Count -gt 0) { 'Task Scheduler:\' + $legacyTaskName } elseif ($legacyExists) { $legacyPath } else { 'Task Scheduler:' + $taskPath })
81
+ scope='current-user-logon'
82
+ mechanism=$(if ($taskCurrent -and $legacyRegistered.Count -eq 0) { 'task-scheduler' } elseif ($taskEnabled -or $legacyRegistered.Count -gt 0) { 'stale-task-scheduler' } elseif ($legacyExists) { 'legacy-startup-shortcut' } else { 'task-scheduler' })
83
+ } | ConvertTo-Json -Compress
@@ -0,0 +1,168 @@
1
+ import crypto from 'node:crypto';
2
+ import fs from 'node:fs';
3
+ import net from 'node:net';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import { spawn } from 'node:child_process';
7
+ import { brotliDecompressSync } from 'node:zlib';
8
+
9
+ export const RUSTDESK_PROBE_HOST_SHA256 = '8555777215510d83d2d61c9dc984e4fcc838bd7e79f9d18a42585431f5e8bb47';
10
+ const leaseMs = 60_000;
11
+ const pause = ms => new Promise(resolve => setTimeout(resolve, ms));
12
+ const failure = code => Object.assign(new Error('桌面视频测试尚未就绪'), { code, statusCode: 503 });
13
+
14
+ // The official EXE is a launcher. Extract its verified Brotli payload into our
15
+ // own runtime directory and launch the actual process, so leases own its PID.
16
+ export function prepareRustDeskProbeHost(root) {
17
+ const bytes = fs.readFileSync(path.join(root, 'rustdesk-1.5.0-x86_64.exe'));
18
+ if (crypto.createHash('sha256').update(bytes).digest('hex') !== RUSTDESK_PROBE_HOST_SHA256) throw failure('desktop_video_host_hash');
19
+ const magic = Buffer.from('rustdesk'), decoder = new TextDecoder('utf-8', { fatal: true });
20
+ let search = 0, entries;
21
+ while (search < bytes.length) {
22
+ const at = bytes.indexOf(magic, search); if (at < 0) break; search = at + magic.length;
23
+ try {
24
+ let offset = at + magic.length; const files = [];
25
+ while (!bytes.subarray(offset, offset + magic.length).equals(magic)) {
26
+ const length = bytes.readUInt32BE(offset); offset += 4;
27
+ if (length < 1 || length > 512) throw new Error('payload');
28
+ const name = decoder.decode(bytes.subarray(offset, offset + length)).replaceAll('\\', '/'); offset += length;
29
+ if (/[\x00-\x1f]/.test(name) || path.posix.isAbsolute(name) || name.includes(':') || name.split('/').includes('..')) throw new Error('payload_path');
30
+ const size = bytes.readUInt32BE(offset); offset += 4;
31
+ if (size < 1 || offset + size + 32 > bytes.length) throw new Error('payload');
32
+ const data = bytes.subarray(offset, offset + size); offset += size;
33
+ const md5 = bytes.subarray(offset, offset + 32).toString(); offset += 32;
34
+ if (!/^[a-f0-9]{32}$/.test(md5)) throw new Error('payload');
35
+ files.push({ name: path.posix.normalize(name), data, md5 });
36
+ if (files.length > 5000) throw new Error('payload');
37
+ }
38
+ if (files.length !== 104 || !files.some(file => file.name === 'rustdesk.exe')) continue;
39
+ const suffix = Buffer.from('.\\rustdesk.exe');
40
+ if (!bytes.subarray(offset + 8, offset + 8 + suffix.length).equals(suffix)) continue;
41
+ entries = files; break;
42
+ } catch { /* Non-payload occurrences of the ASCII magic are expected in PE strings. */ }
43
+ }
44
+ if (!entries) throw failure('desktop_video_host_payload');
45
+ const runtime = path.resolve(root, 'runtime');
46
+ for (const file of entries) {
47
+ const target = path.resolve(runtime, file.name);
48
+ if (!target.startsWith(runtime + path.sep)) throw failure('desktop_video_host_path');
49
+ let existing;
50
+ try { existing = crypto.createHash('md5').update(fs.readFileSync(target)).digest('hex'); } catch {}
51
+ if (existing === file.md5) continue;
52
+ const data = brotliDecompressSync(file.data, { maxOutputLength: 128 * 1024 * 1024 });
53
+ if (crypto.createHash('md5').update(data).digest('hex') !== file.md5) throw failure('desktop_video_host_payload');
54
+ fs.mkdirSync(path.dirname(target), { recursive: true }); fs.writeFileSync(target, data);
55
+ }
56
+ return path.join(runtime, 'rustdesk.exe');
57
+ }
58
+
59
+ // A read-only, LAN-only prototype. The normal desktop helper and input path are independent.
60
+ export class RustDeskVideoProbe {
61
+ constructor({ stateRoot, appData = process.env.APPDATA, platform = process.platform } = {}) {
62
+ this.platform = platform;
63
+ this.root = path.join(stateRoot, 'desktop-video-probe');
64
+ this.configRoot = path.join(appData || os.tmpdir(), 'RustDesk', 'config');
65
+ this.process = null; this.lease = null; this.timer = null; this.starting = false; this.stopped = Promise.resolve(); this.preparedExecutable = null;
66
+ }
67
+ configuration(port, password) {
68
+ const options = {
69
+ 'direct-server': 'Y', 'direct-access-port': String(port),
70
+ 'custom-rendezvous-server': '127.0.0.1:9', 'relay-server': '127.0.0.1:9', 'api-server': 'http://127.0.0.1:9',
71
+ 'enable-hwcodec': 'N', 'access-mode': 'view', 'approve-mode': 'password', 'verification-method': 'use-permanent-password',
72
+ 'enable-keyboard': 'N', 'enable-clipboard': 'N', 'enable-file-transfer': 'N', 'enable-audio': 'N',
73
+ 'enable-tunnel': 'N', 'enable-terminal': 'N', 'enable-record-session': 'N',
74
+ 'allow-auto-record-incoming': 'N', 'allow-auto-record-outgoing': 'N'
75
+ };
76
+ return {
77
+ main: `password = '${password}'\nsalt = '${crypto.randomBytes(16).toString('hex')}'\n`,
78
+ secondary: "rendezvous_server = '127.0.0.1:9'\n\n[options]\n" + Object.entries(options).map(([key, value]) => `${key} = '${value}'`).join('\n') + '\n'
79
+ };
80
+ }
81
+ async begin() {
82
+ if (this.platform !== 'win32') throw failure('desktop_video_platform');
83
+ if (this.starting || this.lease) throw failure('desktop_video_busy');
84
+ this.starting = true;
85
+ try {
86
+ await this.stopped;
87
+ const executable = path.join(this.root, 'rustdesk-1.5.0-x86_64.exe');
88
+ let binary;
89
+ try { binary = fs.readFileSync(executable); } catch { throw failure('desktop_video_host_missing'); }
90
+ if (crypto.createHash('sha256').update(binary).digest('hex') !== RUSTDESK_PROBE_HOST_SHA256) throw failure('desktop_video_host_hash');
91
+ const ownerFile = path.join(this.root, 'config-owner.json');
92
+ let owner;
93
+ try { owner = JSON.parse(fs.readFileSync(ownerFile, 'utf8')); } catch {}
94
+ const entries = fs.existsSync(this.configRoot) ? fs.readdirSync(this.configRoot) : [];
95
+ if (entries.length && (owner?.configRoot !== this.configRoot || !owner.hashes
96
+ || JSON.stringify(owner.hashes) !== JSON.stringify(this.configHashes()))) throw failure('desktop_video_existing_rustdesk');
97
+ const port = await new Promise((resolve, reject) => {
98
+ const server = net.createServer(); server.once('error', reject);
99
+ server.listen(0, '127.0.0.1', () => { const port = server.address().port; server.close(error => error ? reject(error) : resolve(port)); });
100
+ });
101
+ const actualExecutable = this.preparedExecutable ||= prepareRustDeskProbeHost(this.root);
102
+ const password = crypto.randomBytes(24).toString('hex'), leaseId = crypto.randomBytes(16).toString('hex');
103
+ const config = this.configuration(port, password);
104
+ fs.mkdirSync(this.root, { recursive: true, mode: 0o700 });
105
+ fs.mkdirSync(this.configRoot, { recursive: true, mode: 0o700 });
106
+ fs.writeFileSync(path.join(this.configRoot, 'RustDesk.toml'), config.main, { mode: 0o600 });
107
+ fs.writeFileSync(path.join(this.configRoot, 'RustDesk2.toml'), config.secondary, { mode: 0o600 });
108
+ this.saveOwner();
109
+ this.process = spawn(actualExecutable, ['--server'], { cwd: path.dirname(actualExecutable),
110
+ env: { ...process.env, RUSTDESK_APPNAME: 'rustdesk-1.5.0-x86_64.exe' }, windowsHide: true, stdio: 'ignore' });
111
+ const child = this.process; let launchError = false;
112
+ console.info(JSON.stringify({ event: 'desktop-video-host', stage: 'spawn', pid: child.pid }));
113
+ this.stopped = new Promise(resolve => {
114
+ let ended = false;
115
+ const finished = () => {
116
+ console.info(JSON.stringify({ event: 'desktop-video-host', stage: 'exit', pid: child.pid, code: child.exitCode }));
117
+ if (ended) return; ended = true;
118
+ try { this.saveOwner(); } catch { console.error(JSON.stringify({ event: 'desktop-video-owner', state: 'failed' })); }
119
+ if (this.process === child) { clearTimeout(this.timer); this.process = null; this.lease = null; }
120
+ resolve();
121
+ };
122
+ child.once('error', () => { launchError = true; finished(); });
123
+ child.once('exit', finished);
124
+ });
125
+ const deadline = Date.now() + 8_000;
126
+ let ready = false;
127
+ while (Date.now() < deadline && child.exitCode === null && !launchError) {
128
+ ready = await new Promise(resolve => {
129
+ const socket = net.connect({ host: '127.0.0.1', port });
130
+ let settled = false;
131
+ const finish = value => { if (settled) return; settled = true; socket.destroy(); resolve(value); };
132
+ socket.once('connect', () => finish(true)); socket.once('error', () => finish(false)); socket.setTimeout(300, () => finish(false));
133
+ });
134
+ if (ready) break;
135
+ await pause(150);
136
+ }
137
+ if (!ready) throw failure('desktop_video_host_start');
138
+ this.lease = { leaseId, password, port, codec: 'vp9', fps: 5, viewOnly: true };
139
+ console.info(JSON.stringify({ event: 'desktop-video-host', stage: 'ready', pid: child.pid }));
140
+ this.renew(leaseId);
141
+ return { ...this.lease, engine: 'rustdesk-probe', expiresInMs: leaseMs };
142
+ } catch (error) { this.stop(); throw error; }
143
+ finally { this.starting = false; }
144
+ }
145
+ configHashes() {
146
+ return ['RustDesk.toml', 'RustDesk2.toml'].map(name => {
147
+ try { return crypto.createHash('sha256').update(fs.readFileSync(path.join(this.configRoot, name))).digest('hex'); }
148
+ catch { return ''; }
149
+ });
150
+ }
151
+ saveOwner() {
152
+ fs.writeFileSync(path.join(this.root, 'config-owner.json'), JSON.stringify({ configRoot: this.configRoot, hashes: this.configHashes() }), { mode: 0o600 });
153
+ }
154
+ renew(leaseId) {
155
+ if (!this.lease || leaseId !== this.lease.leaseId) throw failure('desktop_video_lease');
156
+ clearTimeout(this.timer); this.timer = setTimeout(() => this.stop(), leaseMs); this.timer.unref();
157
+ return { active: true, expiresInMs: leaseMs };
158
+ }
159
+ release(leaseId) {
160
+ if (this.lease?.leaseId === leaseId) this.stop();
161
+ return { released: true };
162
+ }
163
+ stop() {
164
+ clearTimeout(this.timer); this.timer = null;
165
+ const child = this.process; this.process = null; this.lease = null;
166
+ if (child && child.exitCode === null) child.kill();
167
+ }
168
+ }
@@ -1,43 +1,31 @@
1
- import { execFile } from 'node:child_process';
2
- import { promisify } from 'node:util';
3
- import path from 'node:path';
4
- import { fileURLToPath } from 'node:url';
5
- import fs from 'node:fs';
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ import path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import fs from 'node:fs';
6
6
  import { runtimePaths } from './runtime-paths.mjs';
7
7
  import { readRecord } from '../../service-lifecycle.mjs';
8
8
  import { lanNetworks } from './network-info.mjs';
9
-
10
- const exec = promisify(execFile);
11
- const bridgeRoot = fileURLToPath(new URL('../../../', import.meta.url));
12
- async function detect(script) {
13
- const executable = path.join(process.env.SystemRoot, 'System32/WindowsPowerShell/v1.0/powershell.exe');
14
- const { stdout } = await exec(executable, ['-NoProfile', '-NonInteractive', '-File',
15
- path.join(bridgeRoot, script)], { windowsHide: true, encoding: 'utf8' });
16
- return stdout.trim();
17
- }
18
-
19
- // Windows-only network metadata stays here, outside the lifecycle implementation.
9
+
10
+ const exec = promisify(execFile);
11
+ const bridgeRoot = fileURLToPath(new URL('../../../', import.meta.url));
12
+ async function detect(script) {
13
+ const executable = path.join(process.env.SystemRoot, 'System32/WindowsPowerShell/v1.0/powershell.exe');
14
+ const { stdout } = await exec(executable, ['-NoProfile', '-NonInteractive', '-File',
15
+ path.join(bridgeRoot, script)], { windowsHide: true, encoding: 'utf8' });
16
+ return stdout.trim();
17
+ }
18
+
19
+ // Windows-only network metadata stays here, outside the lifecycle implementation.
20
20
  export const sharedServiceUrl = () => detect('get-shared-service-url.ps1');
21
21
  export const lanAddress = async () => (await lanNetworks())[0]?.address || '';
22
22
  export { lanNetworks };
23
- export function migrateState(stateRoot) {
24
- fs.mkdirSync(stateRoot, { recursive: true });
25
- for (const name of ['bridge-config.json', 'bridge-session.json']) {
26
- const target = path.join(stateRoot, name);
27
- const old = path.join(bridgeRoot, '../.codex/bridge', name);
28
- if (!fs.existsSync(target) && fs.existsSync(old)) fs.copyFileSync(old, target, fs.constants.COPYFILE_EXCL);
29
- }
30
- }
31
- export async function desktopEnvironment(context, sharedUrl) {
32
- const environment = { ...process.env };
33
- environment.CODEX_THREAD_ID ||= environment.CODEX_SESSION_ID || context?.sourceThreadId;
34
- if (sharedUrl) environment.CODEX_REMOTE_SHARED_WS_URL = sharedUrl;
35
- else delete environment.CODEX_REMOTE_SHARED_WS_URL;
36
- const installation = readRecord(path.join(runtimePaths(environment).serviceRoot, 'installation.json'));
37
- const executable = installation?.nodeExecutable;
23
+ export async function bridgeEnvironment() {
24
+ const environment = { ...process.env };
25
+ const installation = readRecord(path.join(runtimePaths(environment).serviceRoot, 'installation.json'));
26
+ const executable = installation?.nodeExecutable;
38
27
  if (!executable || !fs.existsSync(executable)) throw new Error('安装时选用的 Node 不存在,请重新安装 Code Relax。');
39
- environment.CODEX_MCP_NODE_PATH = executable;
40
- environment.CODEX_REMOTE_LEGACY_UPLOADS_ROOTS = JSON.stringify(installation.legacyUploadsRoots || []);
41
- if (sharedUrl) delete environment.CODEX_APP_TOOLS_PIPE_PATH;
42
- return { executable, environment };
43
- }
28
+ environment.CODEX_MCP_NODE_PATH = executable;
29
+ delete environment.CODEX_APP_TOOLS_PIPE_PATH;
30
+ return { executable, environment };
31
+ }
@@ -5,15 +5,18 @@ $package = Get-AppxPackage OpenAI.Codex | Select-Object -First 1
5
5
  if (-not $package -or $Executable -ne (Join-Path $package.InstallLocation 'app/ChatGPT.exe')) {
6
6
  throw 'Desktop executable identity changed; recovery stopped.'
7
7
  }
8
- # This action is only reached after explicit whole-workstation recovery confirmation.
9
- # Never kill an app-server process tree: the independent recovery worker must survive.
10
- $workers = @(Get-CimInstance Win32_Process -Filter "Name='ChatGPT.exe'" | Where-Object { $_.ExecutablePath -eq $Executable })
8
+ # Never kill another user's Desktop or an app-server process tree. The independent
9
+ # installer/recovery worker must survive and relaunch only in this interactive session.
10
+ $currentSessionId = (Get-Process -Id $PID -ErrorAction Stop).SessionId
11
+ $workers = @(Get-CimInstance Win32_Process -Filter "Name='ChatGPT.exe'" | Where-Object {
12
+ $_.ExecutablePath -eq $Executable -and $_.SessionId -eq $currentSessionId
13
+ })
11
14
  foreach ($worker in $workers) {
12
15
  $actual = Get-CimInstance Win32_Process -Filter "ProcessId=$($worker.ProcessId)"
13
16
  if ($actual -and $actual.ExecutablePath -eq $worker.ExecutablePath -and $actual.CreationDate -eq $worker.CreationDate) {
14
17
  Stop-Process -Id $worker.ProcessId -Force -ErrorAction Stop
15
18
  }
16
19
  }
17
- if (Get-Process ChatGPT -ErrorAction SilentlyContinue | Where-Object { $_.Path -eq $Executable }) {
20
+ if (Get-Process ChatGPT -ErrorAction SilentlyContinue | Where-Object { $_.Path -eq $Executable -and $_.SessionId -eq $currentSessionId }) {
18
21
  throw 'Desktop did not exit; recovery stopped.'
19
22
  }
@@ -15,7 +15,7 @@ export async function configureManagedEnvironment(stateRoot) {
15
15
  const ownershipPath = path.join(stateRoot, ownershipFile);
16
16
  const ownership = readRecord(ownershipPath);
17
17
  if (current.forceCliUser === '1' || current.forceCliMachine === '1') {
18
- throw new Error('CODEX_APP_SERVER_FORCE_CLI=1 会让 Codex 忽略受管 app-server;未修改该配置。');
18
+ throw new Error('CODEX_APP_SERVER_FORCE_CLI=1 会让 Codex 忽略当前内核地址;未修改该配置。');
19
19
  }
20
20
  if (current.userValue && current.userValue !== managedAppServerUrl) {
21
21
  throw new Error(`用户已有 CODEX_APP_SERVER_WS_URL=${current.userValue};未覆盖该配置。`);
@@ -0,0 +1,30 @@
1
+ import { sharedThreadProjectId, dotsThreadProjectId } from './shared-catalog.mjs';
2
+
3
+ // Enumerate metadata, not the sidebar's limited window or conversation bodies.
4
+ export async function projectArchiveCandidates(server, dotsServer, projectId) {
5
+ const projects = await server.projects();
6
+ const project = projects.find(value => value.id === projectId);
7
+ if (!project) throw Object.assign(new Error('项目不存在,请刷新列表。'), { statusCode: 404 });
8
+ const local = [];
9
+ let cursor;
10
+ do {
11
+ const page = await server.request('thread/list', { limit: 100, archived: false,
12
+ sortKey: 'recency_at', sortDirection: 'desc', ...(cursor ? { cursor } : {}) });
13
+ local.push(...page.data); cursor = page.nextCursor;
14
+ } while (cursor);
15
+ let hosted = [], catalogError = '';
16
+ if (dotsServer) {
17
+ try { hosted = await dotsServer.taskCatalog(false, true); }
18
+ catch (error) { catalogError = `云端目录读取失败,本次仅包含本机对话:${error.message}`; }
19
+ }
20
+ const threads = [];
21
+ for (const [hostId, values, group] of [['local', local, sharedThreadProjectId], ['durable', hosted, dotsThreadProjectId]]) {
22
+ for (const thread of values) {
23
+ if (thread.threadSource === 'aeon' || group(thread, projects) !== projectId) continue;
24
+ const status = typeof thread.status === 'string' ? thread.status : thread.status?.type || 'unknown';
25
+ threads.push({ id: thread.id, hostId, projectId, threadSource: thread.threadSource,
26
+ title: thread.name || thread.preview || thread.id, status });
27
+ }
28
+ }
29
+ return { projectId, threads, ...(catalogError ? { catalogError } : {}) };
30
+ }
@@ -0,0 +1,121 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { createHash } from 'node:crypto';
4
+ import { readRecord, writeRecord } from './service-lifecycle.mjs';
5
+ import { projectRoots, projectSummary } from './project-management.mjs';
6
+ import { projectLocations } from './platform/project-locations.mjs';
7
+ import { withDesktopProjectRegistration } from './platform/desktop-project-registration.mjs';
8
+
9
+ const pending = new Map();
10
+ const uuid = /^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i;
11
+ const fail = message => { throw Object.assign(new Error(message), { statusCode: 400 }); };
12
+ const pathKey = value => process.platform === 'win32' ? path.normalize(value).toLowerCase() : path.normalize(value);
13
+
14
+ function defaultName(name) {
15
+ let value = path.basename(name).trim().replace(/[<>:"/\\|?*\x00-\x1f]/g, '_').replace(/[ .]+$/g, '') || 'New project';
16
+ if (/^(?:con|prn|aux|nul|com[1-9¹²³]|lpt[1-9¹²³])(?:\.|$)/i.test(value)) value = `_${value}`;
17
+ return value;
18
+ }
19
+
20
+ export async function createWorkstationProject(server, stateRoot, codexDataRoot, body, dependencies = {}) {
21
+ if (!uuid.test(body.idempotencyKey || '')) fail('项目创建标识无效。');
22
+ const name = typeof body.name === 'string' ? body.name.trim() : '';
23
+ if (!name) fail('请输入项目名称。');
24
+ if (!Array.isArray(body.roots) || body.roots.some(root => typeof root?.path !== 'string' || !path.isAbsolute(root.path.trim()))) {
25
+ fail('项目文件夹路径无效。');
26
+ }
27
+ const roots = body.roots.map(root => ({ path: path.normalize(root.path.trim()) }));
28
+ const signature = createHash('sha256').update(JSON.stringify({ name, roots })).digest('hex');
29
+ const directory = path.join(stateRoot, 'project-create-operations');
30
+ const record = path.join(directory, `${body.idempotencyKey}.json`);
31
+ const running = pending.get(record);
32
+ if (running) {
33
+ if (running.signature !== signature) fail('同一个创建请求不能修改项目名称或目录。');
34
+ return running.promise;
35
+ }
36
+ const promise = perform().finally(() => pending.delete(record));
37
+ pending.set(record, { signature, promise });
38
+ return promise;
39
+
40
+ async function perform() {
41
+ await fs.mkdir(directory, { recursive: true });
42
+ let operation = readRecord(record);
43
+ if (operation && operation.signature !== signature) fail('项目创建标识已用于其他内容,请重新打开项目编辑器。');
44
+ if (operation?.result) return operation.result;
45
+ operation ||= { signature, name, roots };
46
+ const save = () => writeRecord(record, operation);
47
+ const rpc = (method, params) => server.request(method, params);
48
+ const register = dependencies.registration || withDesktopProjectRegistration;
49
+ try {
50
+ return await register({ stateRoot, codexDataRoot, operationId: body.idempotencyKey,
51
+ confirmed: body.confirmDesktopRestart === true, serverUrl: server.url }, async desktop => {
52
+ // The restart confirmation and state checks happen before any
53
+ // directory or project write. Existing folders are never moved or copied.
54
+ let validatedRoots;
55
+ if (!operation.resolvedRoots) {
56
+ validatedRoots = await projectRoots(rpc, roots);
57
+ operation.resolvedRoots = validatedRoots;
58
+ if (!operation.resolvedRoots.length) {
59
+ const locations = await (dependencies.locations || projectLocations)();
60
+ await rpc('fs/createDirectory', { path: locations.defaultParent, recursive: true });
61
+ const entries = (await rpc('fs/readDirectory', { path: locations.defaultParent })).entries;
62
+ const names = new Set(entries.map(entry => entry.fileName.toLowerCase()));
63
+ const base = defaultName(name);
64
+ let folder = base;
65
+ for (let suffix = 2; names.has(folder.toLowerCase()); suffix++) folder = `${base} ${suffix}`;
66
+ operation.defaultDirectory = path.join(locations.defaultParent, folder);
67
+ operation.resolvedRoots = [{ path: operation.defaultDirectory }];
68
+ }
69
+ save();
70
+ }
71
+ if (operation.defaultDirectory && !operation.directoryCreated) {
72
+ if (operation.directoryAttempted) {
73
+ // On an explicit retry, keep the originally allocated directory. Never
74
+ // allocate another name after an interrupted createDirectory response.
75
+ await projectRoots(rpc, operation.resolvedRoots);
76
+ } else {
77
+ operation.directoryAttempted = true; save();
78
+ await rpc('fs/createDirectory', { path: operation.defaultDirectory, recursive: false });
79
+ }
80
+ operation.directoryCreated = true; save();
81
+ try {
82
+ const result = await rpc('command/exec', { command: ['git', 'init'], cwd: operation.defaultDirectory, timeoutMs: 10000 });
83
+ if (result.exitCode !== 0) throw new Error(result.stderr || result.stdout || `退出码 ${result.exitCode}`);
84
+ } catch (error) { operation.gitWarning = `项目目录已创建,Git 初始化未完成:${error.message}`; save(); }
85
+ }
86
+ const resolvedRoots = validatedRoots?.length ? validatedRoots : await projectRoots(rpc, operation.resolvedRoots);
87
+ if (!operation.projectId) {
88
+ operation.createAttempted = true; save();
89
+ // Native project/create owns idempotency; a retry uses this exact key
90
+ // and original roots on the same server, never a second transport.
91
+ const created = await rpc('project/create', { name, roots: resolvedRoots, idempotencyKey: body.idempotencyKey });
92
+ operation.projectId = created.project.id; save();
93
+ }
94
+ const { project } = await rpc('project/read', { projectId: operation.projectId });
95
+ if (project.id !== operation.projectId || project.name !== name || project.roots.length !== resolvedRoots.length
96
+ || project.roots.some((root, index) => pathKey(root.path) !== pathKey(resolvedRoots[index].path))) {
97
+ throw new Error('已创建项目的名称或目录发生变化,未覆盖其内容。');
98
+ }
99
+ if (!operation.ordered) {
100
+ const first = (await rpc('project/list', { limit: 1, sortKey: 'position', sortDirection: 'asc' })).data[0];
101
+ if (first && first.id !== project.id) await rpc('project/move', { projectId: project.id, beforeProjectId: first.id });
102
+ operation.ordered = true; save();
103
+ }
104
+ const desktopRegistration = await desktop.register(project, operation, save);
105
+ operation.result = { project: projectSummary(project), desktopRegistration,
106
+ ...(operation.gitWarning ? { warning: operation.gitWarning } : {}) };
107
+ save();
108
+ return operation.result;
109
+ });
110
+ } catch (error) {
111
+ if (operation.projectId || operation.createAttempted || operation.directoryAttempted) {
112
+ error.details = { ...error.details, projectCreationPending: true,
113
+ ...(operation.projectId ? { createdProjectId: operation.projectId } : {}) };
114
+ error.message += operation.projectId
115
+ ? ' 项目已创建,请继续完成桌面登记;会沿用同一项目,不会重复创建。'
116
+ : ' 请继续核对本次创建;会沿用原请求标识和目录。';
117
+ } else error.details = { ...error.details, projectCreationPending: false };
118
+ throw error;
119
+ }
120
+ }
121
+ }
@@ -0,0 +1,59 @@
1
+ import path from 'node:path';
2
+
3
+ const fail = (message, statusCode = 400) => { throw Object.assign(new Error(message), { statusCode }); };
4
+ const pathKey = value => process.platform === 'win32' ? value.toLowerCase() : value;
5
+
6
+ function absoluteDirectory(value) {
7
+ if (typeof value !== 'string' || !value.trim() || !path.isAbsolute(value.trim())) fail('请输入电脑上的绝对文件夹路径。');
8
+ return path.normalize(value.trim());
9
+ }
10
+
11
+ async function directory(rpc, value) {
12
+ const target = absoluteDirectory(value);
13
+ const stat = await rpc('fs/getMetadata', { path: target });
14
+ if (!stat.isDirectory) fail(`此路径不是文件夹:${target}`);
15
+ return target;
16
+ }
17
+
18
+ function folderName(value) {
19
+ if (typeof value !== 'string' || !value.trim() || /[<>:"/\\|?*\x00-\x1f]/.test(value) || /[ .]$/.test(value)
20
+ || /^(?:con|prn|aux|nul|com[1-9¹²³]|lpt[1-9¹²³])(?:\.|$)/i.test(value) || ['.', '..'].includes(value)) {
21
+ fail('文件夹名称无效,请勿使用路径分隔符或系统保留名称。');
22
+ }
23
+ return value;
24
+ }
25
+
26
+ export async function projectRoots(rpc, roots) {
27
+ if (!Array.isArray(roots)) fail('项目文件夹列表无效。');
28
+ const result = [], seen = new Set();
29
+ for (const root of roots) {
30
+ const target = await directory(rpc, root?.path);
31
+ const key = pathKey(target);
32
+ if (seen.has(key)) fail(`重复的项目文件夹:${target}`);
33
+ seen.add(key); result.push({ path: target });
34
+ }
35
+ return result;
36
+ }
37
+
38
+ export function projectSummary(project) {
39
+ return { projectId: project.id, name: project.name, label: project.name, roots: project.roots,
40
+ path: project.roots[0]?.path || '', cwd: project.roots[0]?.path || '', hostId: 'local' };
41
+ }
42
+
43
+ export async function browseProjectFolders(rpc, locations, value) {
44
+ const target = absoluteDirectory(value || locations?.home);
45
+ const entries = (await rpc('fs/readDirectory', { path: target })).entries
46
+ .filter(entry => entry.isDirectory).map(entry => ({ name: entry.fileName, path: path.join(target, entry.fileName) }))
47
+ .sort((a, b) => a.name.localeCompare(b.name, 'zh-CN', { numeric: true }));
48
+ return { path: target, parent: path.dirname(target) === target ? null : path.dirname(target), entries, ...(locations || {}) };
49
+ }
50
+
51
+ export async function createProjectFolder(rpc, body) {
52
+ const parent = await directory(rpc, body.parent);
53
+ const name = folderName(body.name);
54
+ const entries = (await rpc('fs/readDirectory', { path: parent })).entries;
55
+ if (entries.some(entry => pathKey(entry.fileName) === pathKey(name))) fail('同名文件夹已存在,请选择它或使用其他名称。', 409);
56
+ const target = path.join(parent, name);
57
+ await rpc('fs/createDirectory', { path: target, recursive: false });
58
+ return { path: target };
59
+ }