@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,16 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ import path from 'node:path';
4
+ import { powershell } from './desktop-host.mjs';
5
+
6
+ const exec = promisify(execFile);
7
+
8
+ export async function projectLocations() {
9
+ const command = "[Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false); $projectDocuments = [Environment]::GetFolderPath('MyDocuments'); $projectUserDirectory = [Environment]::GetFolderPath('UserProfile'); $projectDownloads = [Environment]::ExpandEnvironmentVariables((Get-ItemPropertyValue -LiteralPath 'HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders' -Name '{374DE290-123F-4565-9164-39C4925E467B}' -ErrorAction Stop)); $projectDriveRoots = @(Get-PSDrive -PSProvider FileSystem | ForEach-Object { $_.Root }); @{ documents = $projectDocuments; home = $projectUserDirectory; downloads = $projectDownloads; roots = $projectDriveRoots } | ConvertTo-Json -Compress";
10
+ const { stdout } = await exec(powershell, ['-NoProfile', '-NonInteractive', '-Command', command],
11
+ { windowsHide: true, encoding: 'utf8', timeout: 10000 });
12
+ const locations = JSON.parse(stdout);
13
+ if (!path.isAbsolute(locations.documents)) throw new Error('无法取得电脑的文档目录。');
14
+ if (!path.isAbsolute(locations.downloads)) throw new Error('无法取得电脑的下载目录。');
15
+ return { defaultParent: path.join(locations.documents, 'ChatGPT'), home: locations.home, downloads: locations.downloads, roots: locations.roots };
16
+ }
@@ -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,20 +1,27 @@
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
4
 
5
- $taskName = 'Code Relax Bridge'
5
+ $taskName = 'Code Relax 桌面服务'
6
+ $legacyTaskName = 'Code Relax Bridge'
6
7
  $taskSource = '@walkhi/code-relax'
7
8
  $taskPath = '\' + $taskName
8
- $arguments = '"' + $Entry + '" start --json'
9
+ $launcher = Join-Path $PSScriptRoot 'resident-start.js'
10
+ $wscript = Join-Path $env:WINDIR 'System32\wscript.exe'
11
+ $arguments = '//B //Nologo "' + $launcher + '" "' + $NodePath + '" "' + $Entry + '"'
9
12
  $currentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
10
13
 
11
14
  $scheduler = New-Object -ComObject 'Schedule.Service'
12
15
  $scheduler.Connect()
13
16
  $root = $scheduler.GetFolder('\')
14
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)
15
19
  if ($registered.Count -gt 0 -and $registered[0].Definition.RegistrationInfo.Source -ne $taskSource) {
16
20
  throw 'Scheduled task is not owned by this installation.'
17
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
+ }
18
25
 
19
26
  # Remove only the legacy shortcut created by this package. A Startup LNK that
20
27
  # launches hidden PowerShell with ExecutionPolicy Bypass triggers AV heuristics.
@@ -30,9 +37,10 @@ if ($Action -ne 'status' -and $legacyExists) {
30
37
  }
31
38
 
32
39
  if ($Action -eq 'enable') {
33
- if (-not (Test-Path -LiteralPath $NodePath) -or -not (Test-Path -LiteralPath $Entry)) { throw 'Installed runtime is missing.' }
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.' }
34
42
  $definition = $scheduler.NewTask(0)
35
- $definition.RegistrationInfo.Description = 'Start the Code Relax Bridge when this user signs in.'
43
+ $definition.RegistrationInfo.Description = 'Start the Code Relax desktop service when this user signs in.'
36
44
  $definition.RegistrationInfo.Source = $taskSource
37
45
  $definition.Principal.UserId = $currentUser
38
46
  $definition.Principal.LogonType = 3 # TASK_LOGON_INTERACTIVE_TOKEN
@@ -48,20 +56,28 @@ if ($Action -eq 'enable') {
48
56
  $trigger.UserId = $currentUser
49
57
  $trigger.Enabled = $true
50
58
  $exec = $definition.Actions.Create(0) # TASK_ACTION_EXEC
51
- $exec.Path = $NodePath
59
+ $exec.Path = $wscript
52
60
  $exec.Arguments = $arguments
53
61
  $exec.WorkingDirectory = $env:USERPROFILE
54
62
  [void]$root.RegisterTaskDefinition($taskName, $definition, 6, $null, $null, 3, $null) # TASK_CREATE_OR_UPDATE
55
- } elseif ($Action -eq 'disable' -and $registered.Count -gt 0) {
56
- $root.DeleteTask($taskName, 0)
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) }
57
67
  }
58
68
  if ($Action -ne 'status' -and $legacyExists) { Remove-Item -LiteralPath $legacyPath }
59
69
 
60
70
  $active = @($root.GetTasks(1) | Where-Object { $_.Name -eq $taskName } | Select-Object -First 1)
61
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
76
+ }
62
77
  @{
63
- enabled=($taskEnabled -or ($Action -eq 'status' -and $legacyExists))
64
- path=$(if ($taskEnabled) { 'Task Scheduler:' + $taskPath } elseif ($legacyExists) { $legacyPath } else { 'Task Scheduler:' + $taskPath })
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 })
65
81
  scope='current-user-logon'
66
- mechanism=$(if ($taskEnabled) { 'task-scheduler' } elseif ($legacyExists) { 'legacy-startup-shortcut' } else { 'task-scheduler' })
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' })
67
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
+ }
@@ -3,38 +3,33 @@ import { promisify } from 'node:util';
3
3
  import path from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
5
  import fs from 'node:fs';
6
- import { runtimePaths } from './runtime-paths.mjs';
7
- import { readRecord } from '../../service-lifecycle.mjs';
8
- import { lanNetworks } from './network-info.mjs';
6
+ import { runtimePaths } from './runtime-paths.mjs';
7
+ import { readRecord } from '../../service-lifecycle.mjs';
8
+ import { readManagedEndpoint } from '../../managed-endpoint.mjs';
9
+ import { lanNetworks } from './network-info.mjs';
9
10
 
10
11
  const exec = promisify(execFile);
11
12
  const bridgeRoot = fileURLToPath(new URL('../../../', import.meta.url));
12
- async function detect(script) {
13
+ async function detect(script, args = []) {
13
14
  const executable = path.join(process.env.SystemRoot, 'System32/WindowsPowerShell/v1.0/powershell.exe');
14
15
  const { stdout } = await exec(executable, ['-NoProfile', '-NonInteractive', '-File',
15
- path.join(bridgeRoot, script)], { windowsHide: true, encoding: 'utf8' });
16
+ path.join(bridgeRoot, script), ...args], { windowsHide: true, encoding: 'utf8' });
16
17
  return stdout.trim();
17
18
  }
18
19
 
19
20
  // Windows-only network metadata stays here, outside the lifecycle implementation.
20
- export const sharedServiceUrl = () => detect('get-shared-service-url.ps1');
21
- export const lanAddress = async () => (await lanNetworks())[0]?.address || '';
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 bridgeEnvironment() {
32
- const environment = { ...process.env };
33
- const installation = readRecord(path.join(runtimePaths(environment).serviceRoot, 'installation.json'));
21
+ export const sharedServiceUrl = () => {
22
+ const url = readManagedEndpoint(runtimePaths().stateRoot);
23
+ return url ? detect('get-shared-service-url.ps1', ['-AppServerUrl', url]) : '';
24
+ };
25
+ export const lanAddress = async () => (await lanNetworks())[0]?.address || '';
26
+ export { lanNetworks };
27
+ export async function bridgeEnvironment() {
28
+ const environment = { ...process.env };
29
+ const installation = readRecord(path.join(runtimePaths(environment).serviceRoot, 'installation.json'));
34
30
  const executable = installation?.nodeExecutable;
35
- if (!executable || !fs.existsSync(executable)) throw new Error('安装时选用的 Node 不存在,请重新安装 Code Relax。');
31
+ if (!executable || !fs.existsSync(executable)) throw new Error('安装时选用的 Node 不存在,请重新安装 Code Relax。');
36
32
  environment.CODEX_MCP_NODE_PATH = executable;
37
- environment.CODEX_REMOTE_LEGACY_UPLOADS_ROOTS = JSON.stringify(installation.legacyUploadsRoots || []);
38
- delete environment.CODEX_APP_TOOLS_PIPE_PATH;
33
+ delete environment.CODEX_APP_TOOLS_PIPE_PATH;
39
34
  return { executable, environment };
40
35
  }
@@ -1,6 +1,7 @@
1
1
  $ErrorActionPreference = 'Stop'
2
2
  [Console]::InputEncoding = New-Object System.Text.UTF8Encoding($false)
3
3
  [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
4
+ $brokerStarted = $false
4
5
  try {
5
6
  $spec = [Console]::In.ReadToEnd() | ConvertFrom-Json
6
7
  # WMI owns this launch, not the caller's kill-on-close Desktop job hierarchy.
@@ -13,10 +14,15 @@ try {
13
14
  $request = Join-Path $launchRoot ($instance + '.request.json')
14
15
  $diagnostic = Join-Path $launchRoot ($instance + '.broker.log')
15
16
  $spec | Add-Member -NotePropertyName instance -NotePropertyValue $instance
16
- $spec | Add-Member -NotePropertyName diagnostic -NotePropertyValue $diagnostic
17
17
  $requestTemporary = $request + '.tmp'
18
18
  [IO.File]::WriteAllText($requestTemporary, ($spec | ConvertTo-Json -Compress -Depth 10), (New-Object Text.UTF8Encoding($false)))
19
19
  [IO.File]::Move($requestTemporary, $request)
20
+ # MSIX can redirect a newly written file even when its existing parent
21
+ # resolves outside the package. Resolve the file handle, not just the folder.
22
+ $request = [IsolatedProcess]::ResolvePath($request)
23
+ $launchRoot = [IO.Path]::GetDirectoryName($request)
24
+ $ready = Join-Path $launchRoot ($instance + '.json')
25
+ $diagnostic = Join-Path $launchRoot ($instance + '.broker.log')
20
26
  $startup = New-CimInstance -ClassName Win32_ProcessStartup -ClientOnly -Property @{
21
27
  ShowWindow=[uint16]0; CreateFlags=[uint32]0x1000010
22
28
  }
@@ -26,6 +32,7 @@ try {
26
32
  CommandLine=$command; CurrentDirectory=$env:USERPROFILE; ProcessStartupInformation=$startup
27
33
  }
28
34
  if ($broker.ReturnValue -ne 0) { throw ('Windows process broker failed: ' + $broker.ReturnValue) }
35
+ $brokerStarted = $true
29
36
  $deadline = [DateTime]::UtcNow.AddSeconds(30)
30
37
  while (-not (Test-Path -LiteralPath $ready)) {
31
38
  if ([DateTime]::UtcNow -gt $deadline) {
@@ -44,6 +51,8 @@ try {
44
51
  [Console]::Error.WriteLine($_.Exception.Message)
45
52
  exit 1
46
53
  } finally {
47
- if ($request -and (Test-Path -LiteralPath $request)) { Remove-Item -LiteralPath $request -Force }
54
+ # Once launched, the worker owns consumption. A slow broker must not lose
55
+ # its request merely because this caller timed out; never launch a retry.
56
+ if (-not $brokerStarted -and $request -and (Test-Path -LiteralPath $request)) { Remove-Item -LiteralPath $request -Force }
48
57
  if ($requestTemporary -and (Test-Path -LiteralPath $requestTemporary)) { Remove-Item -LiteralPath $requestTemporary -Force }
49
58
  }
@@ -1,50 +1,52 @@
1
- import path from 'node:path';
2
- import fs from 'node:fs';
3
- import { readRecord, writeRecord } from '../../service-lifecycle.mjs';
4
- import { runScript } from './desktop-host.mjs';
5
- import { managedAppServerUrl } from '../../managed-app-server.mjs';
6
-
7
- const ownershipFile = 'managed-environment.json';
8
-
9
- export async function readManagedEnvironment() {
10
- return JSON.parse(await runScript('user-environment.ps1', ['-Action', 'Read']));
11
- }
12
-
13
- export async function configureManagedEnvironment(stateRoot) {
14
- const current = await readManagedEnvironment();
15
- const ownershipPath = path.join(stateRoot, ownershipFile);
16
- const ownership = readRecord(ownershipPath);
17
- if (current.forceCliUser === '1' || current.forceCliMachine === '1') {
18
- throw new Error('CODEX_APP_SERVER_FORCE_CLI=1 会让 Codex 忽略受管 app-server;未修改该配置。');
19
- }
20
- if (current.userValue && current.userValue !== managedAppServerUrl) {
21
- throw new Error(`用户已有 CODEX_APP_SERVER_WS_URL=${current.userValue};未覆盖该配置。`);
22
- }
23
- if (current.userValue === managedAppServerUrl) {
24
- const owned = ownership?.value === managedAppServerUrl;
25
- return { configured: true, value: current.userValue, changed: false, owned };
26
- }
27
- const applied = JSON.parse(await runScript('user-environment.ps1', ['-Action', 'Set', '-Value', managedAppServerUrl]));
28
- writeRecord(ownershipPath, { name: 'CODEX_APP_SERVER_WS_URL', value: managedAppServerUrl,
29
- configuredAt: new Date().toISOString() });
30
- return { configured: true, value: applied.userValue, changed: true, owned: true };
31
- }
32
-
33
- export async function clearManagedEnvironment(stateRoot) {
34
- const ownershipPath = path.join(stateRoot, ownershipFile);
35
- const ownership = readRecord(ownershipPath);
36
- const current = await readManagedEnvironment();
37
- if (!current.userValue) {
38
- fs.rmSync(ownershipPath, { force: true });
39
- return { removed: false, preserved: false, reason: 'already-empty' };
40
- }
41
- if (ownership?.value !== managedAppServerUrl || current.userValue !== managedAppServerUrl) {
42
- fs.rmSync(ownershipPath, { force: true });
43
- return { removed: false, preserved: true, value: current.userValue,
44
- reason: ownership?.value === managedAppServerUrl ? 'user-modified' : 'not-owned' };
45
- }
46
- const result = JSON.parse(await runScript('user-environment.ps1', ['-Action', 'Clear']));
47
- if (result.userValue) throw new Error('CODEX_APP_SERVER_WS_URL 清理后读回仍不为空。');
48
- fs.rmSync(ownershipPath, { force: true });
49
- return { removed: true, preserved: false, reason: 'removed' };
50
- }
1
+ import path from 'node:path';
2
+ import fs from 'node:fs';
3
+ import { readRecord, writeRecord } from '../../service-lifecycle.mjs';
4
+ import { runScript } from './desktop-host.mjs';
5
+ import { managedEndpointUrl } from '../../managed-endpoint.mjs';
6
+
7
+ const ownershipFile = 'managed-environment.json';
8
+
9
+ export async function readManagedEnvironment() {
10
+ return JSON.parse(await runScript('user-environment.ps1', ['-Action', 'Read']));
11
+ }
12
+
13
+ export async function configureManagedEnvironment(stateRoot, url) {
14
+ const current = await readManagedEnvironment();
15
+ if (!managedEndpointUrl(url)) throw new Error('未确认 Codex 内核地址,未修改环境变量。');
16
+ const ownershipPath = path.join(stateRoot, ownershipFile);
17
+ const ownership = readRecord(ownershipPath);
18
+ if (current.forceCliUser === '1' || current.forceCliMachine === '1') {
19
+ throw new Error('CODEX_APP_SERVER_FORCE_CLI=1 会让 Codex 忽略当前内核地址;未修改该配置。');
20
+ }
21
+ if (current.userValue && current.userValue !== url && current.userValue !== ownership?.value) {
22
+ throw new Error(`用户已有 CODEX_APP_SERVER_WS_URL=${current.userValue};未覆盖该配置。`);
23
+ }
24
+ if (current.userValue === url) {
25
+ const owned = ownership?.value === url;
26
+ return { configured: true, value: current.userValue, changed: false, owned };
27
+ }
28
+ const applied = JSON.parse(await runScript('user-environment.ps1', ['-Action', 'Set', '-Value', url]));
29
+ if (applied.userValue !== url) throw new Error('CODEX_APP_SERVER_WS_URL 写入后读回不一致。');
30
+ writeRecord(ownershipPath, { name: 'CODEX_APP_SERVER_WS_URL', value: url,
31
+ configuredAt: new Date().toISOString() });
32
+ return { configured: true, value: applied.userValue, changed: true, owned: true };
33
+ }
34
+
35
+ export async function clearManagedEnvironment(stateRoot) {
36
+ const ownershipPath = path.join(stateRoot, ownershipFile);
37
+ const ownership = readRecord(ownershipPath);
38
+ const current = await readManagedEnvironment();
39
+ if (!current.userValue) {
40
+ fs.rmSync(ownershipPath, { force: true });
41
+ return { removed: false, preserved: false, reason: 'already-empty' };
42
+ }
43
+ if (!managedEndpointUrl(ownership?.value) || current.userValue !== ownership.value) {
44
+ fs.rmSync(ownershipPath, { force: true });
45
+ return { removed: false, preserved: true, value: current.userValue,
46
+ reason: managedEndpointUrl(ownership?.value) ? 'user-modified' : 'not-owned' };
47
+ }
48
+ const result = JSON.parse(await runScript('user-environment.ps1', ['-Action', 'Clear']));
49
+ if (result.userValue) throw new Error('CODEX_APP_SERVER_WS_URL 清理后读回仍不为空。');
50
+ fs.rmSync(ownershipPath, { force: true });
51
+ return { removed: true, preserved: false, reason: 'removed' };
52
+ }
@@ -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
+ }