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

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 (834) hide show
  1. package/README.md +51 -45
  2. package/dist/bin/cleanup-accounts.mjs +63 -0
  3. package/dist/bin/codex-remote.mjs +315 -210
  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 +58 -0
  7. package/dist/bin/self-relay-admin.mjs +8 -0
  8. package/dist/bin/self-relay-demo.mjs +33 -33
  9. package/dist/bin/self-relay-server.mjs +44 -31
  10. package/dist/build-platform.json +1 -0
  11. package/dist/get-lan-networks.ps1 +40 -40
  12. package/dist/shared/app-server-events.cjs +200 -80
  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 +72 -50
  19. package/dist/shared/p2p-diagnostics.cjs +28 -28
  20. package/dist/shared/p2p-file-channel.cjs +74 -0
  21. package/dist/shared/plan-pricing.cjs +32 -0
  22. package/dist/shared/server-requests.cjs +219 -67
  23. package/dist/shared/service-endpoints.cjs +21 -0
  24. package/dist/shared/timeline-sync.cjs +173 -67
  25. package/dist/skills/code-relax/SKILL.md +22 -17
  26. package/dist/src/background-process.mjs +18 -18
  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 +29 -34
  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/execution-health.mjs +26 -26
  45. package/dist/src/file-transfer-range.mjs +22 -0
  46. package/dist/src/file-upload-session.mjs +130 -0
  47. package/dist/src/hosted-history-app-server.mjs +103 -0
  48. package/dist/src/hosted-history-cache.mjs +113 -0
  49. package/dist/src/lan-socket-server.mjs +191 -37
  50. package/dist/src/managed-app-server.mjs +244 -207
  51. package/dist/src/message-images.mjs +9 -27
  52. package/dist/src/message-upload-files.mjs +74 -0
  53. package/dist/src/onboarding.mjs +9 -28
  54. package/dist/src/plan-pricing.mjs +47 -0
  55. package/dist/src/platform/README.md +11 -11
  56. package/dist/src/platform/codex-protocol.mjs +46 -0
  57. package/dist/src/platform/codex-runtime.mjs +3 -0
  58. package/dist/src/platform/credential-store.mjs +3 -0
  59. package/dist/src/platform/desktop-host.mjs +3 -0
  60. package/dist/src/platform/desktop-project-registration.mjs +3 -0
  61. package/dist/src/platform/desktop-project-store.mjs +149 -0
  62. package/dist/src/platform/linux/README.md +3 -3
  63. package/dist/src/platform/macos/README.md +3 -3
  64. package/dist/src/platform/macos/codex-runtime.mjs +125 -0
  65. package/dist/src/platform/macos/credential-store.mjs +10 -0
  66. package/dist/src/platform/macos/desktop-host.mjs +82 -0
  67. package/dist/src/platform/macos/desktop-project-registration.mjs +10 -0
  68. package/dist/src/platform/macos/network-info.mjs +28 -0
  69. package/dist/src/platform/macos/project-locations.mjs +8 -0
  70. package/dist/src/platform/macos/resident-startup.mjs +84 -0
  71. package/dist/src/platform/macos/retained-runtime.mjs +127 -0
  72. package/dist/src/platform/macos/service-host.mjs +18 -0
  73. package/dist/src/platform/macos/system.mjs +29 -0
  74. package/dist/src/platform/macos/user-environment.mjs +7 -0
  75. package/dist/src/platform/native-package.mjs +46 -0
  76. package/dist/src/platform/network-info.mjs +3 -0
  77. package/dist/src/platform/path-identity.mjs +5 -0
  78. package/dist/src/platform/posix/runtime-paths.mjs +25 -0
  79. package/dist/src/platform/project-locations.mjs +3 -0
  80. package/dist/src/platform/runtime-paths.mjs +8 -0
  81. package/dist/src/platform/select.mjs +5 -0
  82. package/dist/src/platform/service-host.mjs +3 -0
  83. package/dist/src/platform/user-environment.mjs +3 -0
  84. package/dist/src/platform/windows/IsolatedProcess.cs +79 -79
  85. package/dist/src/platform/windows/activate-desktop.ps1 +48 -0
  86. package/dist/src/platform/windows/background-process.mjs +30 -30
  87. package/dist/src/platform/windows/codex-runtime.mjs +215 -0
  88. package/dist/src/platform/windows/desktop-helper.mjs +179 -0
  89. package/dist/src/platform/windows/desktop-host.mjs +37 -17
  90. package/dist/src/platform/windows/desktop-info.ps1 +2 -4
  91. package/dist/src/platform/windows/desktop-project-registration.mjs +4 -0
  92. package/dist/src/platform/windows/desktop-runtime.ps1 +10 -0
  93. package/dist/src/platform/windows/desktop-shortcuts.ps1 +6 -13
  94. package/dist/src/platform/windows/dots-profile.mjs +49 -0
  95. package/dist/src/platform/windows/launch-worker.mjs +41 -42
  96. package/dist/src/platform/windows/network-info.mjs +34 -34
  97. package/dist/src/platform/windows/project-locations.mjs +16 -0
  98. package/dist/src/platform/windows/resident-start.js +20 -0
  99. package/dist/src/platform/windows/resident-start.ps1 +7 -7
  100. package/dist/src/platform/windows/resident-startup.ps1 +83 -27
  101. package/dist/src/platform/windows/resolve-state-root.ps1 +14 -14
  102. package/dist/src/platform/windows/runtime-paths.mjs +20 -20
  103. package/dist/src/platform/windows/rustdesk-video-probe.mjs +168 -0
  104. package/dist/src/platform/windows/service-host.mjs +9 -21
  105. package/dist/src/platform/windows/start-hidden-console.ps1 +49 -49
  106. package/dist/src/platform/windows/stop-desktop.ps1 +22 -19
  107. package/dist/src/platform/windows/user-environment.mjs +50 -50
  108. package/dist/src/platform/windows/user-environment.ps1 +41 -41
  109. package/dist/src/project-create.mjs +119 -0
  110. package/dist/src/project-management.mjs +69 -0
  111. package/dist/src/runtime-discovery.mjs +47 -0
  112. package/dist/src/self-relay/account-cleanup.mjs +30 -0
  113. package/dist/src/self-relay/account-connections.mjs +52 -0
  114. package/dist/src/self-relay/admin-cloud.mjs +101 -0
  115. package/dist/src/self-relay/admin-page.mjs +80 -0
  116. package/dist/src/self-relay/admin-server.mjs +74 -0
  117. package/dist/src/self-relay/admin-state.mjs +127 -61
  118. package/dist/src/self-relay/admin-style.mjs +14 -0
  119. package/dist/src/self-relay/android-releases.mjs +61 -0
  120. package/dist/src/self-relay/client.mjs +19 -19
  121. package/dist/src/self-relay/connector.mjs +324 -48
  122. package/dist/src/self-relay/debug-allowlist.mjs +33 -33
  123. package/dist/src/self-relay/demo.mjs +6 -7
  124. package/dist/src/self-relay/device-store.mjs +84 -84
  125. package/dist/src/self-relay/diagnostics.mjs +54 -0
  126. package/dist/src/self-relay/email-accounts.mjs +183 -0
  127. package/dist/src/self-relay/file-wire.mjs +13 -0
  128. package/dist/src/self-relay/lan-authorizations.mjs +42 -29
  129. package/dist/src/self-relay/lifecycle.mjs +117 -148
  130. package/dist/src/self-relay/long-pairing.mjs +40 -0
  131. package/dist/src/self-relay/mysql-state.mjs +105 -0
  132. package/dist/src/self-relay/p2p-probe.mjs +159 -123
  133. package/dist/src/self-relay/privacy-page.mjs +26 -0
  134. package/dist/src/self-relay/rtc-file-bridge.mjs +41 -0
  135. package/dist/src/self-relay/server.mjs +889 -423
  136. package/dist/src/self-relay/usage-daily.mjs +55 -0
  137. package/dist/src/self-relay/usage-meter.mjs +141 -0
  138. package/dist/src/self-relay/windows-route-helper.mjs +75 -75
  139. package/dist/src/self-relay/wire.mjs +36 -36
  140. package/dist/src/server.mjs +1124 -1514
  141. package/dist/src/service-control.mjs +82 -72
  142. package/dist/src/service-doctor.mjs +110 -63
  143. package/dist/src/service-health.mjs +33 -33
  144. package/dist/src/service-install.mjs +9 -9
  145. package/dist/src/service-lifecycle.mjs +47 -39
  146. package/dist/src/service-restart.mjs +81 -48
  147. package/dist/src/shared-app-server.mjs +396 -297
  148. package/dist/src/shared-catalog.mjs +132 -50
  149. package/dist/src/shared-recovery.mjs +146 -142
  150. package/dist/src/shared-thread-stream.mjs +135 -51
  151. package/dist/src/skill-install.mjs +51 -64
  152. package/dist/src/thread-title-generation.mjs +150 -150
  153. package/dist/src/turn-model-history.mjs +47 -0
  154. package/dist/src/usage-reset.mjs +17 -0
  155. package/dist/src/workstation-downloads.mjs +120 -0
  156. package/dist/tools/rtc-route-helper.ps1 +99 -99
  157. package/dist/tools/start-rtc-route-helper.ps1 +15 -15
  158. package/dist/web/vendor/markdown-it.LICENSE.txt +22 -22
  159. package/dist/web/vendor/markdown-it.umd.min.js +13 -13
  160. package/package.json +34 -37
  161. package/tools/postinstall.mjs +127 -118
  162. package/dist/src/app-server-client.mjs +0 -468
  163. package/dist/src/app-server-tasks.mjs +0 -358
  164. package/dist/src/debug-ui.mjs +0 -131
  165. package/dist/src/platform/windows/desktop-monitor.mjs +0 -34
  166. package/dist/src/platform/windows/desktop-shortcut-run.ps1 +0 -5
  167. package/dist/src/platform/windows/desktop-tools.mjs +0 -48
  168. package/dist/src/thread-catalog.mjs +0 -47
  169. package/dist/tools/find-desktop-pipe.mjs +0 -10
  170. package/dist/web/activity-view.js +0 -283
  171. package/dist/web/approval-ui.js +0 -188
  172. package/dist/web/capabilities.js +0 -57
  173. package/dist/web/chat-transport.js +0 -202
  174. package/dist/web/chat.css +0 -782
  175. package/dist/web/chat.js +0 -3830
  176. package/dist/web/client-platform.js +0 -11
  177. package/dist/web/community-view.js +0 -20
  178. package/dist/web/community.css +0 -77
  179. package/dist/web/community.html +0 -37
  180. package/dist/web/composer-controller.js +0 -101
  181. package/dist/web/conversation-controller.js +0 -99
  182. package/dist/web/disclosure-state-controller.js +0 -95
  183. package/dist/web/draft-controller.js +0 -103
  184. package/dist/web/harmony-platform.js +0 -52
  185. package/dist/web/highlight-powershell.min.js +0 -39
  186. package/dist/web/highlight.min.js +0 -1262
  187. package/dist/web/history-cache.js +0 -240
  188. package/dist/web/history-controller.js +0 -167
  189. package/dist/web/index.html +0 -325
  190. package/dist/web/lan-session.js +0 -122
  191. package/dist/web/link-action-controller.js +0 -212
  192. package/dist/web/message-send-controller.js +0 -177
  193. package/dist/web/message-view.js +0 -98
  194. package/dist/web/p2p-data-channel.js +0 -50
  195. package/dist/web/p2p-diagnostics.js +0 -28
  196. package/dist/web/p2p-probe.js +0 -123
  197. package/dist/web/page-resume.js +0 -28
  198. package/dist/web/pending-message-store.js +0 -108
  199. package/dist/web/queue-controller.js +0 -82
  200. package/dist/web/resources.json +0 -1
  201. package/dist/web/self-relay-session.js +0 -129
  202. package/dist/web/server-requests.js +0 -67
  203. package/dist/web/station-connection-controller.js +0 -75
  204. package/dist/web/task-list-view.js +0 -296
  205. package/dist/web/thread-attention-controller.js +0 -124
  206. package/dist/web/thread-context-controller.js +0 -30
  207. package/dist/web/thread-list-controller.js +0 -61
  208. package/dist/web/thread-list-sync.js +0 -86
  209. package/dist/web/thread-title-controller.js +0 -57
  210. package/dist/web/timeline-formatters.js +0 -249
  211. package/dist/web/timeline-reducer.js +0 -81
  212. package/dist/web/timeline-renderer.js +0 -161
  213. package/dist/web/timeline-scroll-controller.js +0 -50
  214. package/dist/web/timeline-sync.js +0 -67
  215. package/dist/web/usage-controller.js +0 -258
  216. package/dist/web/vendor/README.md +0 -14
  217. package/dist/web/vendor/highlight-powershell.min.js +0 -39
  218. package/dist/web/vendor/highlight.LICENSE.txt +0 -29
  219. package/dist/web/vendor/highlight.min.js +0 -1262
  220. package/dist/web/vendor/lucide.LICENSE.txt +0 -17
  221. package/node_modules/@img/colour/LICENSE.md +0 -82
  222. package/node_modules/@img/colour/README.md +0 -15
  223. package/node_modules/@img/colour/color.cjs +0 -1596
  224. package/node_modules/@img/colour/index.cjs +0 -1
  225. package/node_modules/@img/colour/index.d.ts +0 -929
  226. package/node_modules/@img/colour/package.json +0 -58
  227. package/node_modules/@img/sharp-win32-x64/LICENSE +0 -191
  228. package/node_modules/@img/sharp-win32-x64/README.md +0 -59
  229. package/node_modules/@img/sharp-win32-x64/index.cjs +0 -1
  230. package/node_modules/@img/sharp-win32-x64/lib/libvips-42.dll +0 -0
  231. package/node_modules/@img/sharp-win32-x64/lib/libvips-cpp-8.18.6.dll +0 -0
  232. package/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64-0.35.4.node +0 -0
  233. package/node_modules/@img/sharp-win32-x64/package.json +0 -40
  234. package/node_modules/@img/sharp-win32-x64/versions.json +0 -30
  235. package/node_modules/@node-datachannel/win32-x64-msvc/node_datachannel.node +0 -0
  236. package/node_modules/@node-datachannel/win32-x64-msvc/package.json +0 -20
  237. package/node_modules/ansi-regex/index.d.ts +0 -37
  238. package/node_modules/ansi-regex/index.js +0 -10
  239. package/node_modules/ansi-regex/license +0 -9
  240. package/node_modules/ansi-regex/package.json +0 -55
  241. package/node_modules/ansi-regex/readme.md +0 -78
  242. package/node_modules/ansi-styles/index.d.ts +0 -345
  243. package/node_modules/ansi-styles/index.js +0 -163
  244. package/node_modules/ansi-styles/license +0 -9
  245. package/node_modules/ansi-styles/package.json +0 -56
  246. package/node_modules/ansi-styles/readme.md +0 -152
  247. package/node_modules/camelcase/index.d.ts +0 -63
  248. package/node_modules/camelcase/index.js +0 -76
  249. package/node_modules/camelcase/license +0 -9
  250. package/node_modules/camelcase/package.json +0 -43
  251. package/node_modules/camelcase/readme.md +0 -99
  252. package/node_modules/cliui/CHANGELOG.md +0 -76
  253. package/node_modules/cliui/LICENSE.txt +0 -14
  254. package/node_modules/cliui/README.md +0 -115
  255. package/node_modules/cliui/index.js +0 -354
  256. package/node_modules/cliui/package.json +0 -65
  257. package/node_modules/color-convert/CHANGELOG.md +0 -54
  258. package/node_modules/color-convert/LICENSE +0 -21
  259. package/node_modules/color-convert/README.md +0 -68
  260. package/node_modules/color-convert/conversions.js +0 -839
  261. package/node_modules/color-convert/index.js +0 -81
  262. package/node_modules/color-convert/package.json +0 -48
  263. package/node_modules/color-convert/route.js +0 -97
  264. package/node_modules/color-name/LICENSE +0 -8
  265. package/node_modules/color-name/README.md +0 -11
  266. package/node_modules/color-name/index.js +0 -152
  267. package/node_modules/color-name/package.json +0 -28
  268. package/node_modules/decamelize/index.js +0 -13
  269. package/node_modules/decamelize/license +0 -21
  270. package/node_modules/decamelize/package.json +0 -38
  271. package/node_modules/decamelize/readme.md +0 -48
  272. package/node_modules/detect-libc/LICENSE +0 -201
  273. package/node_modules/detect-libc/README.md +0 -163
  274. package/node_modules/detect-libc/index.d.ts +0 -14
  275. package/node_modules/detect-libc/lib/detect-libc.js +0 -313
  276. package/node_modules/detect-libc/lib/elf.js +0 -39
  277. package/node_modules/detect-libc/lib/filesystem.js +0 -51
  278. package/node_modules/detect-libc/lib/process.js +0 -24
  279. package/node_modules/detect-libc/package.json +0 -44
  280. package/node_modules/dijkstrajs/.travis.yml +0 -4
  281. package/node_modules/dijkstrajs/CONTRIBUTING.md +0 -8
  282. package/node_modules/dijkstrajs/LICENSE.md +0 -19
  283. package/node_modules/dijkstrajs/README.md +0 -18
  284. package/node_modules/dijkstrajs/dijkstra.js +0 -165
  285. package/node_modules/dijkstrajs/package.json +0 -60
  286. package/node_modules/dijkstrajs/test/dijkstra.test.js +0 -96
  287. package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  288. package/node_modules/emoji-regex/README.md +0 -73
  289. package/node_modules/emoji-regex/es2015/index.js +0 -6
  290. package/node_modules/emoji-regex/es2015/text.js +0 -6
  291. package/node_modules/emoji-regex/index.d.ts +0 -23
  292. package/node_modules/emoji-regex/index.js +0 -6
  293. package/node_modules/emoji-regex/package.json +0 -50
  294. package/node_modules/emoji-regex/text.js +0 -6
  295. package/node_modules/find-up/index.d.ts +0 -137
  296. package/node_modules/find-up/index.js +0 -89
  297. package/node_modules/find-up/license +0 -9
  298. package/node_modules/find-up/package.json +0 -53
  299. package/node_modules/find-up/readme.md +0 -156
  300. package/node_modules/get-caller-file/LICENSE.md +0 -6
  301. package/node_modules/get-caller-file/README.md +0 -41
  302. package/node_modules/get-caller-file/index.d.ts +0 -2
  303. package/node_modules/get-caller-file/index.js +0 -22
  304. package/node_modules/get-caller-file/index.js.map +0 -1
  305. package/node_modules/get-caller-file/package.json +0 -42
  306. package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  307. package/node_modules/is-fullwidth-code-point/index.js +0 -50
  308. package/node_modules/is-fullwidth-code-point/license +0 -9
  309. package/node_modules/is-fullwidth-code-point/package.json +0 -42
  310. package/node_modules/is-fullwidth-code-point/readme.md +0 -39
  311. package/node_modules/locate-path/index.d.ts +0 -83
  312. package/node_modules/locate-path/index.js +0 -65
  313. package/node_modules/locate-path/license +0 -9
  314. package/node_modules/locate-path/package.json +0 -45
  315. package/node_modules/locate-path/readme.md +0 -122
  316. package/node_modules/node-datachannel/.clang-format +0 -17
  317. package/node_modules/node-datachannel/.editorconfig +0 -12
  318. package/node_modules/node-datachannel/.eslintignore +0 -8
  319. package/node_modules/node-datachannel/.eslintrc.json +0 -27
  320. package/node_modules/node-datachannel/.gitmodules +0 -3
  321. package/node_modules/node-datachannel/.prettierignore +0 -7
  322. package/node_modules/node-datachannel/.prettierrc +0 -13
  323. package/node_modules/node-datachannel/API.md +0 -247
  324. package/node_modules/node-datachannel/BULDING.md +0 -26
  325. package/node_modules/node-datachannel/CMakeLists.txt +0 -153
  326. package/node_modules/node-datachannel/LICENSE +0 -373
  327. package/node_modules/node-datachannel/README.md +0 -129
  328. package/node_modules/node-datachannel/dist/cjs/index.cjs +0 -11
  329. package/node_modules/node-datachannel/dist/cjs/index.cjs.map +0 -1
  330. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs +0 -101
  331. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs.map +0 -1
  332. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs +0 -91
  333. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs.map +0 -1
  334. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs +0 -94
  335. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs.map +0 -1
  336. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs +0 -45
  337. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs.map +0 -1
  338. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs +0 -8
  339. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs.map +0 -1
  340. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs +0 -86
  341. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs.map +0 -1
  342. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs +0 -34
  343. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs.map +0 -1
  344. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs +0 -34
  345. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs.map +0 -1
  346. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs +0 -214
  347. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs.map +0 -1
  348. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs +0 -53
  349. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +0 -1
  350. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs +0 -83
  351. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs.map +0 -1
  352. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs +0 -132
  353. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs.map +0 -1
  354. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs +0 -94
  355. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs.map +0 -1
  356. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs +0 -434
  357. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs.map +0 -1
  358. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs +0 -59
  359. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs.map +0 -1
  360. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs +0 -45
  361. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs.map +0 -1
  362. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs +0 -42
  363. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs.map +0 -1
  364. package/node_modules/node-datachannel/dist/esm/index.mjs +0 -8
  365. package/node_modules/node-datachannel/dist/esm/index.mjs.map +0 -1
  366. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs +0 -78
  367. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs.map +0 -1
  368. package/node_modules/node-datachannel/dist/esm/lib/index.mjs +0 -64
  369. package/node_modules/node-datachannel/dist/esm/lib/index.mjs.map +0 -1
  370. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs +0 -78
  371. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs.map +0 -1
  372. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs +0 -43
  373. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs.map +0 -1
  374. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs +0 -6
  375. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs.map +0 -1
  376. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs +0 -82
  377. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs.map +0 -1
  378. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs +0 -28
  379. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs.map +0 -1
  380. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs +0 -30
  381. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs.map +0 -1
  382. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs +0 -210
  383. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs.map +0 -1
  384. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs +0 -49
  385. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs.map +0 -1
  386. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs +0 -79
  387. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs.map +0 -1
  388. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs +0 -128
  389. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs.map +0 -1
  390. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs +0 -89
  391. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs.map +0 -1
  392. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs +0 -430
  393. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs.map +0 -1
  394. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs +0 -55
  395. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs.map +0 -1
  396. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs +0 -41
  397. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs.map +0 -1
  398. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs +0 -27
  399. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs.map +0 -1
  400. package/node_modules/node-datachannel/dist/types/lib/datachannel-stream.d.ts +0 -24
  401. package/node_modules/node-datachannel/dist/types/lib/index.d.ts +0 -241
  402. package/node_modules/node-datachannel/dist/types/lib/types.d.ts +0 -119
  403. package/node_modules/node-datachannel/dist/types/lib/websocket-server.d.ts +0 -13
  404. package/node_modules/node-datachannel/dist/types/lib/websocket.d.ts +0 -25
  405. package/node_modules/node-datachannel/dist/types/polyfill/Events.d.ts +0 -15
  406. package/node_modules/node-datachannel/dist/types/polyfill/RTCCertificate.d.ts +0 -9
  407. package/node_modules/node-datachannel/dist/types/polyfill/RTCDataChannel.d.ts +0 -29
  408. package/node_modules/node-datachannel/dist/types/polyfill/RTCDtlsTransport.d.ts +0 -15
  409. package/node_modules/node-datachannel/dist/types/polyfill/RTCError.d.ts +0 -17
  410. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceCandidate.d.ts +0 -21
  411. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceTransport.d.ts +0 -30
  412. package/node_modules/node-datachannel/dist/types/polyfill/RTCPeerConnection.d.ts +0 -64
  413. package/node_modules/node-datachannel/dist/types/polyfill/RTCSctpTransport.d.ts +0 -15
  414. package/node_modules/node-datachannel/dist/types/polyfill/RTCSessionDescription.d.ts +0 -10
  415. package/node_modules/node-datachannel/dist/types/polyfill/index.d.ts +0 -26
  416. package/node_modules/node-datachannel/jest.config.ts +0 -14
  417. package/node_modules/node-datachannel/package.json +0 -133
  418. package/node_modules/node-datachannel/rollup.config.mjs +0 -67
  419. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.cpp +0 -530
  420. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.h +0 -63
  421. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.cpp +0 -172
  422. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.h +0 -43
  423. package/node_modules/node-datachannel/src/cpp/main.cpp +0 -58
  424. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.cpp +0 -457
  425. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.h +0 -52
  426. package/node_modules/node-datachannel/src/cpp/media-av1packetization.cpp +0 -24
  427. package/node_modules/node-datachannel/src/cpp/media-av1packetization.h +0 -11
  428. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.cpp +0 -126
  429. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.h +0 -29
  430. package/node_modules/node-datachannel/src/cpp/media-direction.cpp +0 -43
  431. package/node_modules/node-datachannel/src/cpp/media-direction.h +0 -10
  432. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.cpp +0 -126
  433. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.h +0 -30
  434. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.cpp +0 -126
  435. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.h +0 -30
  436. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.cpp +0 -32
  437. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.h +0 -11
  438. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.cpp +0 -31
  439. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.h +0 -11
  440. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.cpp +0 -79
  441. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.h +0 -28
  442. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.cpp +0 -68
  443. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.h +0 -28
  444. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.cpp +0 -57
  445. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.h +0 -28
  446. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.cpp +0 -93
  447. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.h +0 -30
  448. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.cpp +0 -167
  449. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.h +0 -35
  450. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.cpp +0 -95
  451. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.h +0 -30
  452. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.cpp +0 -458
  453. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.h +0 -61
  454. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.cpp +0 -526
  455. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.h +0 -56
  456. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.cpp +0 -1298
  457. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.h +0 -89
  458. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.cpp +0 -205
  459. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.h +0 -24
  460. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.cpp +0 -57
  461. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.h +0 -47
  462. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.cpp +0 -275
  463. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.h +0 -41
  464. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.cpp +0 -796
  465. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.h +0 -63
  466. package/node_modules/node-datachannel/src/index.ts +0 -9
  467. package/node_modules/node-datachannel/src/lib/datachannel-stream.ts +0 -100
  468. package/node_modules/node-datachannel/src/lib/index.ts +0 -290
  469. package/node_modules/node-datachannel/src/lib/node-datachannel.ts +0 -84
  470. package/node_modules/node-datachannel/src/lib/types.ts +0 -169
  471. package/node_modules/node-datachannel/src/lib/websocket-server.ts +0 -37
  472. package/node_modules/node-datachannel/src/lib/websocket.ts +0 -26
  473. package/node_modules/node-datachannel/src/polyfill/Events.ts +0 -82
  474. package/node_modules/node-datachannel/src/polyfill/Exception.ts +0 -37
  475. package/node_modules/node-datachannel/src/polyfill/README.md +0 -41
  476. package/node_modules/node-datachannel/src/polyfill/RTCCertificate.ts +0 -21
  477. package/node_modules/node-datachannel/src/polyfill/RTCDataChannel.ts +0 -225
  478. package/node_modules/node-datachannel/src/polyfill/RTCDtlsTransport.ts +0 -46
  479. package/node_modules/node-datachannel/src/polyfill/RTCError.ts +0 -78
  480. package/node_modules/node-datachannel/src/polyfill/RTCIceCandidate.ts +0 -128
  481. package/node_modules/node-datachannel/src/polyfill/RTCIceTransport.ts +0 -90
  482. package/node_modules/node-datachannel/src/polyfill/RTCPeerConnection.ts +0 -527
  483. package/node_modules/node-datachannel/src/polyfill/RTCSctpTransport.ts +0 -51
  484. package/node_modules/node-datachannel/src/polyfill/RTCSessionDescription.ts +0 -41
  485. package/node_modules/node-datachannel/src/polyfill/index.ts +0 -38
  486. package/node_modules/node-datachannel/tsconfig.json +0 -21
  487. package/node_modules/p-limit/index.d.ts +0 -38
  488. package/node_modules/p-limit/index.js +0 -57
  489. package/node_modules/p-limit/license +0 -9
  490. package/node_modules/p-limit/package.json +0 -52
  491. package/node_modules/p-limit/readme.md +0 -101
  492. package/node_modules/p-locate/index.d.ts +0 -64
  493. package/node_modules/p-locate/index.js +0 -52
  494. package/node_modules/p-locate/license +0 -9
  495. package/node_modules/p-locate/package.json +0 -53
  496. package/node_modules/p-locate/readme.md +0 -90
  497. package/node_modules/p-try/index.d.ts +0 -39
  498. package/node_modules/p-try/index.js +0 -9
  499. package/node_modules/p-try/license +0 -9
  500. package/node_modules/p-try/package.json +0 -42
  501. package/node_modules/p-try/readme.md +0 -58
  502. package/node_modules/path-exists/index.d.ts +0 -28
  503. package/node_modules/path-exists/index.js +0 -23
  504. package/node_modules/path-exists/license +0 -9
  505. package/node_modules/path-exists/package.json +0 -39
  506. package/node_modules/path-exists/readme.md +0 -52
  507. package/node_modules/pngjs/.eslintignore +0 -2
  508. package/node_modules/pngjs/.eslintrc.json +0 -19
  509. package/node_modules/pngjs/.prettierignore +0 -3
  510. package/node_modules/pngjs/LICENSE +0 -20
  511. package/node_modules/pngjs/README.md +0 -429
  512. package/node_modules/pngjs/browser.js +0 -16096
  513. package/node_modules/pngjs/coverage/lcov-report/base.css +0 -354
  514. package/node_modules/pngjs/coverage/lcov-report/bitmapper.js.html +0 -881
  515. package/node_modules/pngjs/coverage/lcov-report/bitpacker.js.html +0 -554
  516. package/node_modules/pngjs/coverage/lcov-report/block-navigation.js +0 -77
  517. package/node_modules/pngjs/coverage/lcov-report/chunkstream.js.html +0 -647
  518. package/node_modules/pngjs/coverage/lcov-report/constants.js.html +0 -176
  519. package/node_modules/pngjs/coverage/lcov-report/crc.js.html +0 -200
  520. package/node_modules/pngjs/coverage/lcov-report/favicon.png +0 -0
  521. package/node_modules/pngjs/coverage/lcov-report/filter-pack.js.html +0 -593
  522. package/node_modules/pngjs/coverage/lcov-report/filter-parse-async.js.html +0 -152
  523. package/node_modules/pngjs/coverage/lcov-report/filter-parse-sync.js.html +0 -143
  524. package/node_modules/pngjs/coverage/lcov-report/filter-parse.js.html +0 -611
  525. package/node_modules/pngjs/coverage/lcov-report/format-normaliser.js.html +0 -359
  526. package/node_modules/pngjs/coverage/lcov-report/index.html +0 -426
  527. package/node_modules/pngjs/coverage/lcov-report/interlace.js.html +0 -365
  528. package/node_modules/pngjs/coverage/lcov-report/packer-async.js.html +0 -230
  529. package/node_modules/pngjs/coverage/lcov-report/packer-sync.js.html +0 -248
  530. package/node_modules/pngjs/coverage/lcov-report/packer.js.html +0 -467
  531. package/node_modules/pngjs/coverage/lcov-report/paeth-predictor.js.html +0 -128
  532. package/node_modules/pngjs/coverage/lcov-report/parser-async.js.html +0 -575
  533. package/node_modules/pngjs/coverage/lcov-report/parser-sync.js.html +0 -404
  534. package/node_modules/pngjs/coverage/lcov-report/parser.js.html +0 -950
  535. package/node_modules/pngjs/coverage/lcov-report/png-sync.js.html +0 -116
  536. package/node_modules/pngjs/coverage/lcov-report/png.js.html +0 -662
  537. package/node_modules/pngjs/coverage/lcov-report/prettify.css +0 -101
  538. package/node_modules/pngjs/coverage/lcov-report/prettify.js +0 -1007
  539. package/node_modules/pngjs/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  540. package/node_modules/pngjs/coverage/lcov-report/sorter.js +0 -169
  541. package/node_modules/pngjs/coverage/lcov-report/sync-inflate.js.html +0 -584
  542. package/node_modules/pngjs/coverage/lcov-report/sync-reader.js.html +0 -215
  543. package/node_modules/pngjs/coverage/lcov.info +0 -2177
  544. package/node_modules/pngjs/lib/bitmapper.js +0 -267
  545. package/node_modules/pngjs/lib/bitpacker.js +0 -158
  546. package/node_modules/pngjs/lib/chunkstream.js +0 -189
  547. package/node_modules/pngjs/lib/constants.js +0 -32
  548. package/node_modules/pngjs/lib/crc.js +0 -40
  549. package/node_modules/pngjs/lib/filter-pack.js +0 -171
  550. package/node_modules/pngjs/lib/filter-parse-async.js +0 -24
  551. package/node_modules/pngjs/lib/filter-parse-sync.js +0 -21
  552. package/node_modules/pngjs/lib/filter-parse.js +0 -177
  553. package/node_modules/pngjs/lib/format-normaliser.js +0 -93
  554. package/node_modules/pngjs/lib/interlace.js +0 -95
  555. package/node_modules/pngjs/lib/packer-async.js +0 -50
  556. package/node_modules/pngjs/lib/packer-sync.js +0 -56
  557. package/node_modules/pngjs/lib/packer.js +0 -129
  558. package/node_modules/pngjs/lib/paeth-predictor.js +0 -16
  559. package/node_modules/pngjs/lib/parser-async.js +0 -165
  560. package/node_modules/pngjs/lib/parser-sync.js +0 -108
  561. package/node_modules/pngjs/lib/parser.js +0 -290
  562. package/node_modules/pngjs/lib/png-sync.js +0 -12
  563. package/node_modules/pngjs/lib/png.js +0 -194
  564. package/node_modules/pngjs/lib/sync-inflate.js +0 -168
  565. package/node_modules/pngjs/lib/sync-reader.js +0 -45
  566. package/node_modules/pngjs/package.json +0 -73
  567. package/node_modules/qrcode/README.md +0 -770
  568. package/node_modules/qrcode/bin/qrcode +0 -159
  569. package/node_modules/qrcode/helper/to-sjis-browser.js +0 -2
  570. package/node_modules/qrcode/helper/to-sjis.js +0 -105
  571. package/node_modules/qrcode/lib/browser.js +0 -76
  572. package/node_modules/qrcode/lib/can-promise.js +0 -7
  573. package/node_modules/qrcode/lib/core/alignment-pattern.js +0 -83
  574. package/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -59
  575. package/node_modules/qrcode/lib/core/bit-buffer.js +0 -37
  576. package/node_modules/qrcode/lib/core/bit-matrix.js +0 -65
  577. package/node_modules/qrcode/lib/core/byte-data.js +0 -30
  578. package/node_modules/qrcode/lib/core/error-correction-code.js +0 -135
  579. package/node_modules/qrcode/lib/core/error-correction-level.js +0 -50
  580. package/node_modules/qrcode/lib/core/finder-pattern.js +0 -22
  581. package/node_modules/qrcode/lib/core/format-info.js +0 -29
  582. package/node_modules/qrcode/lib/core/galois-field.js +0 -69
  583. package/node_modules/qrcode/lib/core/kanji-data.js +0 -54
  584. package/node_modules/qrcode/lib/core/mask-pattern.js +0 -234
  585. package/node_modules/qrcode/lib/core/mode.js +0 -167
  586. package/node_modules/qrcode/lib/core/numeric-data.js +0 -43
  587. package/node_modules/qrcode/lib/core/polynomial.js +0 -62
  588. package/node_modules/qrcode/lib/core/qrcode.js +0 -495
  589. package/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -56
  590. package/node_modules/qrcode/lib/core/regex.js +0 -31
  591. package/node_modules/qrcode/lib/core/segments.js +0 -330
  592. package/node_modules/qrcode/lib/core/utils.js +0 -63
  593. package/node_modules/qrcode/lib/core/version-check.js +0 -9
  594. package/node_modules/qrcode/lib/core/version.js +0 -163
  595. package/node_modules/qrcode/lib/index.js +0 -12
  596. package/node_modules/qrcode/lib/renderer/canvas.js +0 -63
  597. package/node_modules/qrcode/lib/renderer/png.js +0 -78
  598. package/node_modules/qrcode/lib/renderer/svg-tag.js +0 -81
  599. package/node_modules/qrcode/lib/renderer/svg.js +0 -19
  600. package/node_modules/qrcode/lib/renderer/terminal/terminal-small.js +0 -85
  601. package/node_modules/qrcode/lib/renderer/terminal/terminal.js +0 -49
  602. package/node_modules/qrcode/lib/renderer/terminal.js +0 -9
  603. package/node_modules/qrcode/lib/renderer/utf8.js +0 -71
  604. package/node_modules/qrcode/lib/renderer/utils.js +0 -99
  605. package/node_modules/qrcode/lib/server.js +0 -138
  606. package/node_modules/qrcode/license +0 -10
  607. package/node_modules/qrcode/package.json +0 -77
  608. package/node_modules/require-directory/.jshintrc +0 -67
  609. package/node_modules/require-directory/.npmignore +0 -1
  610. package/node_modules/require-directory/.travis.yml +0 -3
  611. package/node_modules/require-directory/LICENSE +0 -22
  612. package/node_modules/require-directory/README.markdown +0 -184
  613. package/node_modules/require-directory/index.js +0 -86
  614. package/node_modules/require-directory/package.json +0 -40
  615. package/node_modules/require-main-filename/CHANGELOG.md +0 -26
  616. package/node_modules/require-main-filename/LICENSE.txt +0 -14
  617. package/node_modules/require-main-filename/README.md +0 -26
  618. package/node_modules/require-main-filename/index.js +0 -18
  619. package/node_modules/require-main-filename/package.json +0 -35
  620. package/node_modules/semver/LICENSE +0 -15
  621. package/node_modules/semver/README.md +0 -680
  622. package/node_modules/semver/bin/semver.js +0 -195
  623. package/node_modules/semver/classes/comparator.js +0 -143
  624. package/node_modules/semver/classes/index.js +0 -7
  625. package/node_modules/semver/classes/range.js +0 -577
  626. package/node_modules/semver/classes/semver.js +0 -350
  627. package/node_modules/semver/functions/clean.js +0 -8
  628. package/node_modules/semver/functions/cmp.js +0 -54
  629. package/node_modules/semver/functions/coerce.js +0 -62
  630. package/node_modules/semver/functions/compare-build.js +0 -9
  631. package/node_modules/semver/functions/compare-loose.js +0 -5
  632. package/node_modules/semver/functions/compare.js +0 -7
  633. package/node_modules/semver/functions/diff.js +0 -60
  634. package/node_modules/semver/functions/eq.js +0 -5
  635. package/node_modules/semver/functions/gt.js +0 -5
  636. package/node_modules/semver/functions/gte.js +0 -5
  637. package/node_modules/semver/functions/inc.js +0 -21
  638. package/node_modules/semver/functions/lt.js +0 -5
  639. package/node_modules/semver/functions/lte.js +0 -5
  640. package/node_modules/semver/functions/major.js +0 -5
  641. package/node_modules/semver/functions/minor.js +0 -5
  642. package/node_modules/semver/functions/neq.js +0 -5
  643. package/node_modules/semver/functions/parse.js +0 -18
  644. package/node_modules/semver/functions/patch.js +0 -5
  645. package/node_modules/semver/functions/prerelease.js +0 -8
  646. package/node_modules/semver/functions/rcompare.js +0 -5
  647. package/node_modules/semver/functions/rsort.js +0 -5
  648. package/node_modules/semver/functions/satisfies.js +0 -12
  649. package/node_modules/semver/functions/sort.js +0 -5
  650. package/node_modules/semver/functions/truncate.js +0 -48
  651. package/node_modules/semver/functions/valid.js +0 -8
  652. package/node_modules/semver/index.js +0 -93
  653. package/node_modules/semver/internal/constants.js +0 -37
  654. package/node_modules/semver/internal/debug.js +0 -11
  655. package/node_modules/semver/internal/identifiers.js +0 -29
  656. package/node_modules/semver/internal/lrucache.js +0 -42
  657. package/node_modules/semver/internal/parse-options.js +0 -17
  658. package/node_modules/semver/internal/re.js +0 -223
  659. package/node_modules/semver/package.json +0 -78
  660. package/node_modules/semver/preload.js +0 -4
  661. package/node_modules/semver/range.bnf +0 -17
  662. package/node_modules/semver/ranges/gtr.js +0 -6
  663. package/node_modules/semver/ranges/intersects.js +0 -9
  664. package/node_modules/semver/ranges/ltr.js +0 -6
  665. package/node_modules/semver/ranges/max-satisfying.js +0 -27
  666. package/node_modules/semver/ranges/min-satisfying.js +0 -26
  667. package/node_modules/semver/ranges/min-version.js +0 -63
  668. package/node_modules/semver/ranges/outside.js +0 -82
  669. package/node_modules/semver/ranges/simplify.js +0 -49
  670. package/node_modules/semver/ranges/subset.js +0 -249
  671. package/node_modules/semver/ranges/to-comparators.js +0 -10
  672. package/node_modules/semver/ranges/valid.js +0 -13
  673. package/node_modules/set-blocking/CHANGELOG.md +0 -26
  674. package/node_modules/set-blocking/LICENSE.txt +0 -14
  675. package/node_modules/set-blocking/README.md +0 -31
  676. package/node_modules/set-blocking/index.js +0 -7
  677. package/node_modules/set-blocking/package.json +0 -42
  678. package/node_modules/sharp/LICENSE +0 -191
  679. package/node_modules/sharp/README.md +0 -112
  680. package/node_modules/sharp/dist/channel.cjs +0 -177
  681. package/node_modules/sharp/dist/channel.mjs +0 -177
  682. package/node_modules/sharp/dist/colour.cjs +0 -199
  683. package/node_modules/sharp/dist/colour.mjs +0 -199
  684. package/node_modules/sharp/dist/composite.cjs +0 -213
  685. package/node_modules/sharp/dist/composite.mjs +0 -213
  686. package/node_modules/sharp/dist/constructor.cjs +0 -511
  687. package/node_modules/sharp/dist/constructor.mjs +0 -511
  688. package/node_modules/sharp/dist/index.cjs +0 -25
  689. package/node_modules/sharp/dist/index.d.cts +0 -1999
  690. package/node_modules/sharp/dist/index.d.mts +0 -2046
  691. package/node_modules/sharp/dist/index.mjs +0 -25
  692. package/node_modules/sharp/dist/input.cjs +0 -819
  693. package/node_modules/sharp/dist/input.mjs +0 -819
  694. package/node_modules/sharp/dist/is.cjs +0 -143
  695. package/node_modules/sharp/dist/is.mjs +0 -143
  696. package/node_modules/sharp/dist/libvips.cjs +0 -212
  697. package/node_modules/sharp/dist/libvips.mjs +0 -212
  698. package/node_modules/sharp/dist/operation.cjs +0 -1002
  699. package/node_modules/sharp/dist/operation.mjs +0 -1002
  700. package/node_modules/sharp/dist/output.cjs +0 -1785
  701. package/node_modules/sharp/dist/output.mjs +0 -1785
  702. package/node_modules/sharp/dist/resize.cjs +0 -617
  703. package/node_modules/sharp/dist/resize.mjs +0 -617
  704. package/node_modules/sharp/dist/sharp.cjs +0 -174
  705. package/node_modules/sharp/dist/sharp.mjs +0 -174
  706. package/node_modules/sharp/dist/utility.cjs +0 -301
  707. package/node_modules/sharp/dist/utility.mjs +0 -301
  708. package/node_modules/sharp/install/build.js +0 -38
  709. package/node_modules/sharp/lib/index.d.ts +0 -1999
  710. package/node_modules/sharp/package.json +0 -227
  711. package/node_modules/sharp/src/binding.gyp +0 -303
  712. package/node_modules/sharp/src/common.cc +0 -1186
  713. package/node_modules/sharp/src/common.h +0 -421
  714. package/node_modules/sharp/src/metadata.cc +0 -404
  715. package/node_modules/sharp/src/metadata.h +0 -95
  716. package/node_modules/sharp/src/operations.cc +0 -516
  717. package/node_modules/sharp/src/operations.h +0 -137
  718. package/node_modules/sharp/src/pipeline.cc +0 -1948
  719. package/node_modules/sharp/src/pipeline.h +0 -422
  720. package/node_modules/sharp/src/sharp.cc +0 -43
  721. package/node_modules/sharp/src/stats.cc +0 -186
  722. package/node_modules/sharp/src/stats.h +0 -62
  723. package/node_modules/sharp/src/utilities.cc +0 -289
  724. package/node_modules/sharp/src/utilities.h +0 -22
  725. package/node_modules/string-width/index.d.ts +0 -29
  726. package/node_modules/string-width/index.js +0 -47
  727. package/node_modules/string-width/license +0 -9
  728. package/node_modules/string-width/package.json +0 -56
  729. package/node_modules/string-width/readme.md +0 -50
  730. package/node_modules/strip-ansi/index.d.ts +0 -17
  731. package/node_modules/strip-ansi/index.js +0 -4
  732. package/node_modules/strip-ansi/license +0 -9
  733. package/node_modules/strip-ansi/package.json +0 -54
  734. package/node_modules/strip-ansi/readme.md +0 -46
  735. package/node_modules/which-module/LICENSE +0 -13
  736. package/node_modules/which-module/README.md +0 -58
  737. package/node_modules/which-module/index.js +0 -9
  738. package/node_modules/which-module/package.json +0 -41
  739. package/node_modules/wrap-ansi/index.js +0 -186
  740. package/node_modules/wrap-ansi/license +0 -9
  741. package/node_modules/wrap-ansi/package.json +0 -61
  742. package/node_modules/wrap-ansi/readme.md +0 -97
  743. package/node_modules/ws/LICENSE +0 -20
  744. package/node_modules/ws/README.md +0 -548
  745. package/node_modules/ws/browser.js +0 -8
  746. package/node_modules/ws/index.js +0 -22
  747. package/node_modules/ws/lib/buffer-util.js +0 -131
  748. package/node_modules/ws/lib/constants.js +0 -19
  749. package/node_modules/ws/lib/event-target.js +0 -292
  750. package/node_modules/ws/lib/extension.js +0 -203
  751. package/node_modules/ws/lib/limiter.js +0 -55
  752. package/node_modules/ws/lib/permessage-deflate.js +0 -530
  753. package/node_modules/ws/lib/receiver.js +0 -743
  754. package/node_modules/ws/lib/sender.js +0 -607
  755. package/node_modules/ws/lib/stream.js +0 -161
  756. package/node_modules/ws/lib/subprotocol.js +0 -62
  757. package/node_modules/ws/lib/validation.js +0 -152
  758. package/node_modules/ws/lib/websocket-server.js +0 -562
  759. package/node_modules/ws/lib/websocket.js +0 -1407
  760. package/node_modules/ws/package.json +0 -74
  761. package/node_modules/ws/wrapper.mjs +0 -21
  762. package/node_modules/y18n/CHANGELOG.md +0 -35
  763. package/node_modules/y18n/LICENSE +0 -13
  764. package/node_modules/y18n/README.md +0 -109
  765. package/node_modules/y18n/index.js +0 -188
  766. package/node_modules/y18n/package.json +0 -39
  767. package/node_modules/yargs/CHANGELOG.md +0 -420
  768. package/node_modules/yargs/LICENSE +0 -21
  769. package/node_modules/yargs/README.md +0 -140
  770. package/node_modules/yargs/build/lib/apply-extends.d.ts +0 -2
  771. package/node_modules/yargs/build/lib/apply-extends.js +0 -65
  772. package/node_modules/yargs/build/lib/argsert.d.ts +0 -2
  773. package/node_modules/yargs/build/lib/argsert.js +0 -65
  774. package/node_modules/yargs/build/lib/command.d.ts +0 -64
  775. package/node_modules/yargs/build/lib/command.js +0 -416
  776. package/node_modules/yargs/build/lib/common-types.d.ts +0 -36
  777. package/node_modules/yargs/build/lib/common-types.js +0 -25
  778. package/node_modules/yargs/build/lib/completion-templates.d.ts +0 -2
  779. package/node_modules/yargs/build/lib/completion-templates.js +0 -50
  780. package/node_modules/yargs/build/lib/completion.d.ts +0 -21
  781. package/node_modules/yargs/build/lib/completion.js +0 -135
  782. package/node_modules/yargs/build/lib/is-promise.d.ts +0 -1
  783. package/node_modules/yargs/build/lib/is-promise.js +0 -9
  784. package/node_modules/yargs/build/lib/levenshtein.d.ts +0 -1
  785. package/node_modules/yargs/build/lib/levenshtein.js +0 -58
  786. package/node_modules/yargs/build/lib/middleware.d.ts +0 -10
  787. package/node_modules/yargs/build/lib/middleware.js +0 -57
  788. package/node_modules/yargs/build/lib/obj-filter.d.ts +0 -1
  789. package/node_modules/yargs/build/lib/obj-filter.js +0 -14
  790. package/node_modules/yargs/build/lib/parse-command.d.ts +0 -11
  791. package/node_modules/yargs/build/lib/parse-command.js +0 -36
  792. package/node_modules/yargs/build/lib/process-argv.d.ts +0 -2
  793. package/node_modules/yargs/build/lib/process-argv.js +0 -31
  794. package/node_modules/yargs/build/lib/usage.d.ts +0 -49
  795. package/node_modules/yargs/build/lib/usage.js +0 -540
  796. package/node_modules/yargs/build/lib/validation.d.ts +0 -34
  797. package/node_modules/yargs/build/lib/validation.js +0 -330
  798. package/node_modules/yargs/build/lib/yargs.d.ts +0 -274
  799. package/node_modules/yargs/build/lib/yargs.js +0 -1190
  800. package/node_modules/yargs/build/lib/yerror.d.ts +0 -4
  801. package/node_modules/yargs/build/lib/yerror.js +0 -11
  802. package/node_modules/yargs/index.js +0 -40
  803. package/node_modules/yargs/locales/be.json +0 -46
  804. package/node_modules/yargs/locales/de.json +0 -46
  805. package/node_modules/yargs/locales/en.json +0 -51
  806. package/node_modules/yargs/locales/es.json +0 -46
  807. package/node_modules/yargs/locales/fi.json +0 -49
  808. package/node_modules/yargs/locales/fr.json +0 -53
  809. package/node_modules/yargs/locales/hi.json +0 -49
  810. package/node_modules/yargs/locales/hu.json +0 -46
  811. package/node_modules/yargs/locales/id.json +0 -50
  812. package/node_modules/yargs/locales/it.json +0 -46
  813. package/node_modules/yargs/locales/ja.json +0 -51
  814. package/node_modules/yargs/locales/ko.json +0 -49
  815. package/node_modules/yargs/locales/nb.json +0 -44
  816. package/node_modules/yargs/locales/nl.json +0 -49
  817. package/node_modules/yargs/locales/nn.json +0 -44
  818. package/node_modules/yargs/locales/pirate.json +0 -13
  819. package/node_modules/yargs/locales/pl.json +0 -49
  820. package/node_modules/yargs/locales/pt.json +0 -45
  821. package/node_modules/yargs/locales/pt_BR.json +0 -48
  822. package/node_modules/yargs/locales/ru.json +0 -46
  823. package/node_modules/yargs/locales/th.json +0 -46
  824. package/node_modules/yargs/locales/tr.json +0 -48
  825. package/node_modules/yargs/locales/zh_CN.json +0 -48
  826. package/node_modules/yargs/locales/zh_TW.json +0 -47
  827. package/node_modules/yargs/package.json +0 -92
  828. package/node_modules/yargs/yargs.js +0 -14
  829. package/node_modules/yargs-parser/CHANGELOG.md +0 -601
  830. package/node_modules/yargs-parser/LICENSE.txt +0 -14
  831. package/node_modules/yargs-parser/README.md +0 -449
  832. package/node_modules/yargs-parser/index.js +0 -1032
  833. package/node_modules/yargs-parser/lib/tokenize-arg-string.js +0 -40
  834. package/node_modules/yargs-parser/package.json +0 -46
@@ -1,49 +1,49 @@
1
- $ErrorActionPreference = 'Stop'
2
- [Console]::InputEncoding = New-Object System.Text.UTF8Encoding($false)
3
- [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
4
- try {
5
- $spec = [Console]::In.ReadToEnd() | ConvertFrom-Json
6
- # WMI owns this launch, not the caller's kill-on-close Desktop job hierarchy.
7
- $instance = [Guid]::NewGuid().ToString()
8
- $launchRoot = [IO.Path]::GetFullPath((Join-Path $env:LOCALAPPDATA 'CodexRemote\process-launch'))
9
- New-Item -ItemType Directory -Path $launchRoot -Force | Out-Null
10
- Add-Type -Path (Join-Path $PSScriptRoot 'IsolatedProcess.cs')
11
- $launchRoot = [IsolatedProcess]::ResolvePath($launchRoot)
12
- $ready = Join-Path $launchRoot ($instance + '.json')
13
- $request = Join-Path $launchRoot ($instance + '.request.json')
14
- $diagnostic = Join-Path $launchRoot ($instance + '.broker.log')
15
- $spec | Add-Member -NotePropertyName instance -NotePropertyValue $instance
16
- $spec | Add-Member -NotePropertyName diagnostic -NotePropertyValue $diagnostic
17
- $requestTemporary = $request + '.tmp'
18
- [IO.File]::WriteAllText($requestTemporary, ($spec | ConvertTo-Json -Compress -Depth 10), (New-Object Text.UTF8Encoding($false)))
19
- [IO.File]::Move($requestTemporary, $request)
20
- $startup = New-CimInstance -ClassName Win32_ProcessStartup -ClientOnly -Property @{
21
- ShowWindow=[uint16]0; CreateFlags=[uint32]0x1000010
22
- }
23
- $worker = Join-Path $PSScriptRoot 'launch-worker.mjs'
24
- $command = '"' + [string]$spec.brokerExecutable + '" "' + $worker + '" "' + $request + '" "' + $ready + '" "' + $instance + '" "' + $diagnostic + '"'
25
- $broker = Invoke-CimMethod -ClassName Win32_Process -MethodName Create -Arguments @{
26
- CommandLine=$command; CurrentDirectory=$env:USERPROFILE; ProcessStartupInformation=$startup
27
- }
28
- if ($broker.ReturnValue -ne 0) { throw ('Windows process broker failed: ' + $broker.ReturnValue) }
29
- $deadline = [DateTime]::UtcNow.AddSeconds(30)
30
- while (-not (Test-Path -LiteralPath $ready)) {
31
- if ([DateTime]::UtcNow -gt $deadline) {
32
- $detail = if (Test-Path -LiteralPath $diagnostic) { (Get-Content -LiteralPath $diagnostic -Raw -Encoding UTF8).Trim() } else { 'broker did not create a diagnostic log' }
33
- throw ('Windows process broker handoff timed out (broker PID ' + $broker.ProcessId + '): ' + $detail)
34
- }
35
- Start-Sleep -Milliseconds 50
36
- }
37
- $result = Get-Content -LiteralPath $ready -Raw -Encoding UTF8 | ConvertFrom-Json
38
- Remove-Item -LiteralPath $ready
39
- if ($result.instance -ne $instance -or $result.brokerPid -ne $broker.ProcessId) { throw 'Windows process broker identity mismatch.' }
40
- if ($result.error) { throw [string]$result.error }
41
- if (Test-Path -LiteralPath $diagnostic) { Remove-Item -LiteralPath $diagnostic -Force }
42
- [Console]::WriteLine([int]$result.pid)
43
- } catch {
44
- [Console]::Error.WriteLine($_.Exception.Message)
45
- exit 1
46
- } finally {
47
- if ($request -and (Test-Path -LiteralPath $request)) { Remove-Item -LiteralPath $request -Force }
48
- if ($requestTemporary -and (Test-Path -LiteralPath $requestTemporary)) { Remove-Item -LiteralPath $requestTemporary -Force }
49
- }
1
+ $ErrorActionPreference = 'Stop'
2
+ [Console]::InputEncoding = New-Object System.Text.UTF8Encoding($false)
3
+ [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
4
+ try {
5
+ $spec = [Console]::In.ReadToEnd() | ConvertFrom-Json
6
+ # WMI owns this launch, not the caller's kill-on-close Desktop job hierarchy.
7
+ $instance = [Guid]::NewGuid().ToString()
8
+ $launchRoot = [IO.Path]::GetFullPath((Join-Path $env:LOCALAPPDATA 'CodexRemote\process-launch'))
9
+ New-Item -ItemType Directory -Path $launchRoot -Force | Out-Null
10
+ Add-Type -Path (Join-Path $PSScriptRoot 'IsolatedProcess.cs')
11
+ $launchRoot = [IsolatedProcess]::ResolvePath($launchRoot)
12
+ $ready = Join-Path $launchRoot ($instance + '.json')
13
+ $request = Join-Path $launchRoot ($instance + '.request.json')
14
+ $diagnostic = Join-Path $launchRoot ($instance + '.broker.log')
15
+ $spec | Add-Member -NotePropertyName instance -NotePropertyValue $instance
16
+ $spec | Add-Member -NotePropertyName diagnostic -NotePropertyValue $diagnostic
17
+ $requestTemporary = $request + '.tmp'
18
+ [IO.File]::WriteAllText($requestTemporary, ($spec | ConvertTo-Json -Compress -Depth 10), (New-Object Text.UTF8Encoding($false)))
19
+ [IO.File]::Move($requestTemporary, $request)
20
+ $startup = New-CimInstance -ClassName Win32_ProcessStartup -ClientOnly -Property @{
21
+ ShowWindow=[uint16]0; CreateFlags=[uint32]0x1000010
22
+ }
23
+ $worker = Join-Path $PSScriptRoot 'launch-worker.mjs'
24
+ $command = '"' + [string]$spec.brokerExecutable + '" "' + $worker + '" "' + $request + '" "' + $ready + '" "' + $instance + '" "' + $diagnostic + '"'
25
+ $broker = Invoke-CimMethod -ClassName Win32_Process -MethodName Create -Arguments @{
26
+ CommandLine=$command; CurrentDirectory=$env:USERPROFILE; ProcessStartupInformation=$startup
27
+ }
28
+ if ($broker.ReturnValue -ne 0) { throw ('Windows process broker failed: ' + $broker.ReturnValue) }
29
+ $deadline = [DateTime]::UtcNow.AddSeconds(30)
30
+ while (-not (Test-Path -LiteralPath $ready)) {
31
+ if ([DateTime]::UtcNow -gt $deadline) {
32
+ $detail = if (Test-Path -LiteralPath $diagnostic) { (Get-Content -LiteralPath $diagnostic -Raw -Encoding UTF8).Trim() } else { 'broker did not create a diagnostic log' }
33
+ throw ('Windows process broker handoff timed out (broker PID ' + $broker.ProcessId + '): ' + $detail)
34
+ }
35
+ Start-Sleep -Milliseconds 50
36
+ }
37
+ $result = Get-Content -LiteralPath $ready -Raw -Encoding UTF8 | ConvertFrom-Json
38
+ Remove-Item -LiteralPath $ready
39
+ if ($result.instance -ne $instance -or $result.brokerPid -ne $broker.ProcessId) { throw 'Windows process broker identity mismatch.' }
40
+ if ($result.error) { throw [string]$result.error }
41
+ if (Test-Path -LiteralPath $diagnostic) { Remove-Item -LiteralPath $diagnostic -Force }
42
+ [Console]::WriteLine([int]$result.pid)
43
+ } catch {
44
+ [Console]::Error.WriteLine($_.Exception.Message)
45
+ exit 1
46
+ } finally {
47
+ if ($request -and (Test-Path -LiteralPath $request)) { Remove-Item -LiteralPath $request -Force }
48
+ if ($requestTemporary -and (Test-Path -LiteralPath $requestTemporary)) { Remove-Item -LiteralPath $requestTemporary -Force }
49
+ }
@@ -1,19 +1,22 @@
1
- param([Parameter(Mandatory=$true)][string]$Executable)
2
- $ErrorActionPreference = 'Stop'
3
- [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
4
- $package = Get-AppxPackage OpenAI.Codex | Select-Object -First 1
5
- if (-not $package -or $Executable -ne (Join-Path $package.InstallLocation 'app/ChatGPT.exe')) {
6
- throw 'Desktop executable identity changed; recovery stopped.'
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 })
11
- foreach ($worker in $workers) {
12
- $actual = Get-CimInstance Win32_Process -Filter "ProcessId=$($worker.ProcessId)"
13
- if ($actual -and $actual.ExecutablePath -eq $worker.ExecutablePath -and $actual.CreationDate -eq $worker.CreationDate) {
14
- Stop-Process -Id $worker.ProcessId -Force -ErrorAction Stop
15
- }
16
- }
17
- if (Get-Process ChatGPT -ErrorAction SilentlyContinue | Where-Object { $_.Path -eq $Executable }) {
18
- throw 'Desktop did not exit; recovery stopped.'
19
- }
1
+ param([Parameter(Mandatory=$true)][string]$Executable)
2
+ $ErrorActionPreference = 'Stop'
3
+ [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
4
+ $package = Get-AppxPackage OpenAI.Codex | Select-Object -First 1
5
+ if (-not $package -or $Executable -ne (Join-Path $package.InstallLocation 'app/ChatGPT.exe')) {
6
+ throw 'Desktop executable identity changed; recovery stopped.'
7
+ }
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
+ })
14
+ foreach ($worker in $workers) {
15
+ $actual = Get-CimInstance Win32_Process -Filter "ProcessId=$($worker.ProcessId)"
16
+ if ($actual -and $actual.ExecutablePath -eq $worker.ExecutablePath -and $actual.CreationDate -eq $worker.CreationDate) {
17
+ Stop-Process -Id $worker.ProcessId -Force -ErrorAction Stop
18
+ }
19
+ }
20
+ if (Get-Process ChatGPT -ErrorAction SilentlyContinue | Where-Object { $_.Path -eq $Executable -and $_.SessionId -eq $currentSessionId }) {
21
+ throw 'Desktop did not exit; recovery stopped.'
22
+ }
@@ -1,50 +1,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 { 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 { 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 忽略当前内核地址;未修改该配置。');
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,41 +1,41 @@
1
- param(
2
- [ValidateSet('Read', 'Set', 'Clear')][string]$Action = 'Read',
3
- [string]$Value = ''
4
- )
5
- $ErrorActionPreference = 'Stop'
6
- [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
7
- $name = 'CODEX_APP_SERVER_WS_URL'
8
-
9
- function Broadcast-EnvironmentChange {
10
- if (-not ('CodeRelax.EnvironmentBroadcast' -as [type])) {
11
- Add-Type -Namespace CodeRelax -Name EnvironmentBroadcast -MemberDefinition @'
12
- [System.Runtime.InteropServices.DllImport("user32.dll", CharSet=System.Runtime.InteropServices.CharSet.Unicode, SetLastError=true)]
13
- public static extern System.IntPtr SendMessageTimeout(
14
- System.IntPtr hWnd, uint Msg, System.UIntPtr wParam, string lParam,
15
- uint flags, uint timeout, out System.UIntPtr result);
16
- '@
17
- }
18
- [UIntPtr]$result = [UIntPtr]::Zero
19
- [void][CodeRelax.EnvironmentBroadcast]::SendMessageTimeout(
20
- [IntPtr]0xffff, 0x001A, [UIntPtr]::Zero, 'Environment', 0x0002, 5000, [ref]$result)
21
- }
22
-
23
- if ($Action -eq 'Set') {
24
- if ([string]::IsNullOrWhiteSpace($Value)) { throw 'Environment value is required.' }
25
- [Environment]::SetEnvironmentVariable($name, $Value, 'User')
26
- Broadcast-EnvironmentChange
27
- } elseif ($Action -eq 'Clear') {
28
- [Environment]::SetEnvironmentVariable($name, $null, 'User')
29
- Broadcast-EnvironmentChange
30
- }
31
-
32
- $userValue = [Environment]::GetEnvironmentVariable($name, 'User')
33
- $result = @{
34
- userValue = $userValue
35
- machineValue = [Environment]::GetEnvironmentVariable($name, 'Machine')
36
- forceCliUser = [Environment]::GetEnvironmentVariable('CODEX_APP_SERVER_FORCE_CLI', 'User')
37
- forceCliMachine = [Environment]::GetEnvironmentVariable('CODEX_APP_SERVER_FORCE_CLI', 'Machine')
38
- }
39
- if ($Action -eq 'Set' -and $userValue -ne $Value) { throw 'Environment value verification failed.' }
40
- if ($Action -eq 'Clear' -and -not [string]::IsNullOrEmpty($userValue)) { throw 'Environment removal verification failed.' }
41
- $result | ConvertTo-Json -Compress
1
+ param(
2
+ [ValidateSet('Read', 'Set', 'Clear')][string]$Action = 'Read',
3
+ [string]$Value = ''
4
+ )
5
+ $ErrorActionPreference = 'Stop'
6
+ [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
7
+ $name = 'CODEX_APP_SERVER_WS_URL'
8
+
9
+ function Broadcast-EnvironmentChange {
10
+ if (-not ('CodeRelax.EnvironmentBroadcast' -as [type])) {
11
+ Add-Type -Namespace CodeRelax -Name EnvironmentBroadcast -MemberDefinition @'
12
+ [System.Runtime.InteropServices.DllImport("user32.dll", CharSet=System.Runtime.InteropServices.CharSet.Unicode, SetLastError=true)]
13
+ public static extern System.IntPtr SendMessageTimeout(
14
+ System.IntPtr hWnd, uint Msg, System.UIntPtr wParam, string lParam,
15
+ uint flags, uint timeout, out System.UIntPtr result);
16
+ '@
17
+ }
18
+ [UIntPtr]$result = [UIntPtr]::Zero
19
+ [void][CodeRelax.EnvironmentBroadcast]::SendMessageTimeout(
20
+ [IntPtr]0xffff, 0x001A, [UIntPtr]::Zero, 'Environment', 0x0002, 5000, [ref]$result)
21
+ }
22
+
23
+ if ($Action -eq 'Set') {
24
+ if ([string]::IsNullOrWhiteSpace($Value)) { throw 'Environment value is required.' }
25
+ [Environment]::SetEnvironmentVariable($name, $Value, 'User')
26
+ Broadcast-EnvironmentChange
27
+ } elseif ($Action -eq 'Clear') {
28
+ [Environment]::SetEnvironmentVariable($name, $null, 'User')
29
+ Broadcast-EnvironmentChange
30
+ }
31
+
32
+ $userValue = [Environment]::GetEnvironmentVariable($name, 'User')
33
+ $result = @{
34
+ userValue = $userValue
35
+ machineValue = [Environment]::GetEnvironmentVariable($name, 'Machine')
36
+ forceCliUser = [Environment]::GetEnvironmentVariable('CODEX_APP_SERVER_FORCE_CLI', 'User')
37
+ forceCliMachine = [Environment]::GetEnvironmentVariable('CODEX_APP_SERVER_FORCE_CLI', 'Machine')
38
+ }
39
+ if ($Action -eq 'Set' -and $userValue -ne $Value) { throw 'Environment value verification failed.' }
40
+ if ($Action -eq 'Clear' -and -not [string]::IsNullOrEmpty($userValue)) { throw 'Environment removal verification failed.' }
41
+ $result | ConvertTo-Json -Compress
@@ -0,0 +1,119 @@
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
+ if (!operation.resolvedRoots) {
55
+ operation.resolvedRoots = await projectRoots(rpc, roots);
56
+ if (!operation.resolvedRoots.length) {
57
+ const locations = await (dependencies.locations || projectLocations)();
58
+ await rpc('fs/createDirectory', { path: locations.defaultParent, recursive: true });
59
+ const entries = (await rpc('fs/readDirectory', { path: locations.defaultParent })).entries;
60
+ const names = new Set(entries.map(entry => entry.fileName.toLowerCase()));
61
+ const base = defaultName(name);
62
+ let folder = base;
63
+ for (let suffix = 2; names.has(folder.toLowerCase()); suffix++) folder = `${base} ${suffix}`;
64
+ operation.defaultDirectory = path.join(locations.defaultParent, folder);
65
+ operation.resolvedRoots = [{ path: operation.defaultDirectory }];
66
+ }
67
+ save();
68
+ }
69
+ if (operation.defaultDirectory && !operation.directoryCreated) {
70
+ if (operation.directoryAttempted) {
71
+ // On an explicit retry, keep the originally allocated directory. Never
72
+ // allocate another name after an interrupted createDirectory response.
73
+ await projectRoots(rpc, operation.resolvedRoots);
74
+ } else {
75
+ operation.directoryAttempted = true; save();
76
+ await rpc('fs/createDirectory', { path: operation.defaultDirectory, recursive: false });
77
+ }
78
+ operation.directoryCreated = true; save();
79
+ try {
80
+ const result = await rpc('command/exec', { command: ['git', 'init'], cwd: operation.defaultDirectory, timeoutMs: 10000 });
81
+ if (result.exitCode !== 0) throw new Error(result.stderr || result.stdout || `退出码 ${result.exitCode}`);
82
+ } catch (error) { operation.gitWarning = `项目目录已创建,Git 初始化未完成:${error.message}`; save(); }
83
+ }
84
+ const resolvedRoots = await projectRoots(rpc, operation.resolvedRoots);
85
+ if (!operation.projectId) {
86
+ operation.createAttempted = true; save();
87
+ // Native project/create owns idempotency; a retry uses this exact key
88
+ // and original roots on the same server, never a second transport.
89
+ const created = await rpc('project/create', { name, roots: resolvedRoots, idempotencyKey: body.idempotencyKey });
90
+ operation.projectId = created.project.id; save();
91
+ }
92
+ const { project } = await rpc('project/read', { projectId: operation.projectId });
93
+ if (project.id !== operation.projectId || project.name !== name || project.roots.length !== resolvedRoots.length
94
+ || project.roots.some((root, index) => pathKey(root.path) !== pathKey(resolvedRoots[index].path))) {
95
+ throw new Error('已创建项目的名称或目录发生变化,未覆盖其内容。');
96
+ }
97
+ if (!operation.ordered) {
98
+ const first = (await rpc('project/list', { limit: 1, sortKey: 'position', sortDirection: 'asc' })).data[0];
99
+ if (first && first.id !== project.id) await rpc('project/move', { projectId: project.id, beforeProjectId: first.id });
100
+ operation.ordered = true; save();
101
+ }
102
+ const desktopRegistration = await desktop.register(project, operation, save);
103
+ operation.result = { project: projectSummary(project), desktopRegistration,
104
+ ...(operation.gitWarning ? { warning: operation.gitWarning } : {}) };
105
+ save();
106
+ return operation.result;
107
+ });
108
+ } catch (error) {
109
+ if (operation.projectId || operation.createAttempted || operation.directoryAttempted) {
110
+ error.details = { ...error.details, projectCreationPending: true,
111
+ ...(operation.projectId ? { createdProjectId: operation.projectId } : {}) };
112
+ error.message += operation.projectId
113
+ ? ' 项目已创建,请继续完成桌面登记;会沿用同一项目,不会重复创建。'
114
+ : ' 请继续核对本次创建;会沿用原请求标识和目录。';
115
+ } else error.details = { ...error.details, projectCreationPending: false };
116
+ throw error;
117
+ }
118
+ }
119
+ }
@@ -0,0 +1,69 @@
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 = await directory(rpc, 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
+ }
60
+
61
+ export async function saveProject(rpc, locations, body, projectId = null) {
62
+ // Native creation and Desktop registration are coordinated by project-create.mjs.
63
+ if (!projectId) fail('新建项目必须通过工作站项目创建流程。', 503);
64
+ const name = typeof body.name === 'string' ? body.name.trim() : '';
65
+ if (!name) fail('请输入项目名称。');
66
+ const roots = await projectRoots(rpc, body.roots);
67
+ const result = await rpc('project/update', { name, roots, projectId });
68
+ return { project: projectSummary(result.project) };
69
+ }
@@ -0,0 +1,47 @@
1
+ import { discoverCodex, resolveCodexRuntime, runtimeFingerprint } from './platform/codex-runtime.mjs';
2
+
3
+ // Advisory discovery is independent of execution health. Failure here must never
4
+ // disable an already running app-server or cause an automatic process restart.
5
+ export class RuntimeDiscovery {
6
+ constructor({ stateRoot, host, url, interval = 60000 }) {
7
+ Object.assign(this, { stateRoot, host, url, interval });
8
+ this.state = {};
9
+ }
10
+ start() { this.stopped = false; void this.tick(); }
11
+ stop() { this.stopped = true; clearTimeout(this.timer); }
12
+ async sample() {
13
+ const errors = [];
14
+ try {
15
+ const candidates = discoverCodex();
16
+ const signature = JSON.stringify(candidates.map(candidate => {
17
+ try { return [candidate.executable, runtimeFingerprint(candidate.executable)]; }
18
+ catch (error) { return [candidate.executable, error.message]; }
19
+ }));
20
+ if (signature !== this.signature) {
21
+ await resolveCodexRuntime(this.stateRoot, { refresh: true });
22
+ this.signature = signature;
23
+ }
24
+ } catch (error) { errors.push(error.message); }
25
+ try {
26
+ if (this.host.desktopIntegration === false) {
27
+ this.state = { desktop: { state: 'unsupported', integrationSupported: false }, checkedAt: new Date().toISOString() };
28
+ if (errors.length) this.state.discoveryError = errors.join('\n');
29
+ return this.state;
30
+ }
31
+ const desktop = await this.host.inspect();
32
+ const attached = desktop.running && await this.host.sharedServiceUrl() === this.url;
33
+ this.state = { desktop: { state: !desktop.running ? 'stopped' : attached ? 'managed' : 'ordinary',
34
+ installed: Boolean(desktop.desktop), attachedToManagedServer: Boolean(attached) },
35
+ desktopRestartRecommended: Boolean(desktop.running && !attached), checkedAt: new Date().toISOString() };
36
+ } catch (error) {
37
+ errors.push(error.message);
38
+ this.state = { checkedAt: new Date().toISOString() };
39
+ }
40
+ if (errors.length) this.state.discoveryError = errors.join('\n');
41
+ return this.state;
42
+ }
43
+ async tick() {
44
+ await this.sample();
45
+ if (!this.stopped) { this.timer = setTimeout(() => this.tick(), this.interval); this.timer.unref?.(); }
46
+ }
47
+ }
@@ -0,0 +1,30 @@
1
+ // Process one account per transaction; foreign keys keep incomplete deletion atomic.
2
+ export async function purgeCancelledAccounts(pool, scopeHash) {
3
+ let purged = 0;
4
+ for (;;) {
5
+ const db = await pool.getConnection();
6
+ try {
7
+ await db.beginTransaction();
8
+ const [rows] = await db.query(`SELECT id FROM users WHERE status='cancelled'
9
+ AND cancelled_at <= UTC_TIMESTAMP(3) - INTERVAL 1 DAY
10
+ ORDER BY cancelled_at LIMIT 1 FOR UPDATE`);
11
+ if (!rows.length) { await db.commit(); return purged; }
12
+ const id = rows[0].id;
13
+ const [identities] = await db.execute("SELECT normalized_value FROM user_login_identities WHERE user_id=? AND kind='email'", [id]);
14
+ for (const { normalized_value: email } of identities) {
15
+ await db.execute('DELETE FROM email_login_challenges WHERE email=?', [email]);
16
+ await db.execute('DELETE FROM email_send_limits WHERE scope_hash=?', [scopeHash(`email:${email}`)]);
17
+ await db.execute('DELETE FROM relay_admin_emails WHERE email=?', [email]);
18
+ }
19
+ for (const table of ['user_sessions', 'relay_usage_actions', 'relay_usage_sessions',
20
+ 'relay_usage_user_days', 'relay_usage_budgets', 'relay_usage_entitlements',
21
+ 'relay_usage_totals', 'user_login_identities']) {
22
+ await db.execute(`DELETE FROM ${table} WHERE user_id=?`, [id]);
23
+ }
24
+ await db.execute('UPDATE computers SET owner_user_id=NULL WHERE owner_user_id=?', [id]);
25
+ await db.execute('DELETE FROM users WHERE id=?', [id]);
26
+ await db.commit(); purged++;
27
+ } catch (error) { await db.rollback(); throw error; }
28
+ finally { db.release(); }
29
+ }
30
+ }