@walkhi/code-relax 0.1.0-beta.5 → 0.1.0-beta.50

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 (847) hide show
  1. package/README.md +93 -71
  2. package/dist/bin/cleanup-accounts.mjs +63 -0
  3. package/dist/bin/codex-remote.mjs +325 -184
  4. package/dist/bin/manage-relay-admin.mjs +20 -0
  5. package/dist/bin/migrate-relay-db.mjs +109 -0
  6. package/dist/bin/publish-android-release.mjs +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-admin.mjs +8 -0
  10. package/dist/bin/self-relay-demo.mjs +2 -2
  11. package/dist/bin/self-relay-server.mjs +43 -30
  12. package/dist/build-platform.json +1 -0
  13. package/dist/get-shared-service-url.ps1 +14 -6
  14. package/dist/shared/app-server-events.cjs +378 -238
  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 +69 -0
  26. package/dist/shared/server-requests.cjs +250 -6
  27. package/dist/shared/service-endpoints.cjs +21 -0
  28. package/dist/shared/timeline-sync.cjs +111 -5
  29. package/dist/skills/code-relax/SKILL.md +13 -8
  30. package/dist/src/archived-threads.mjs +22 -0
  31. package/dist/src/bounded-process-log.mjs +63 -0
  32. package/dist/src/celsius-client.mjs +107 -0
  33. package/dist/src/code-browser.mjs +100 -0
  34. package/dist/src/desktop-launcher.mjs +53 -42
  35. package/dist/src/dots-approval-timeline.mjs +99 -0
  36. package/dist/src/dots-avatar.mjs +42 -0
  37. package/dist/src/dots-chat-projection.mjs +50 -0
  38. package/dist/src/dots-chat-server.mjs +483 -0
  39. package/dist/src/dots-message-images.mjs +319 -0
  40. package/dist/src/dots-profile.mjs +77 -0
  41. package/dist/src/dots-room-activity.mjs +172 -0
  42. package/dist/src/dots-room-client.mjs +135 -0
  43. package/dist/src/dots-room-projection.mjs +94 -0
  44. package/dist/src/dots-schedules.mjs +66 -0
  45. package/dist/src/dots-summary-tasks.mjs +32 -0
  46. package/dist/src/dots-task-catalog.mjs +430 -0
  47. package/dist/src/dots-task-files.mjs +52 -0
  48. package/dist/src/file-transfer-range.mjs +22 -0
  49. package/dist/src/file-upload-session.mjs +130 -0
  50. package/dist/src/hosted-history-app-server.mjs +103 -0
  51. package/dist/src/hosted-history-cache.mjs +113 -0
  52. package/dist/src/lan-socket-server.mjs +241 -84
  53. package/dist/src/managed-app-server.mjs +210 -44
  54. package/dist/src/managed-endpoint.mjs +25 -0
  55. package/dist/src/message-images.mjs +0 -18
  56. package/dist/src/message-upload-files.mjs +109 -0
  57. package/dist/src/onboarding.mjs +10 -29
  58. package/dist/src/plan-pricing.mjs +47 -0
  59. package/dist/src/platform/README.md +2 -2
  60. package/dist/src/platform/codex-protocol.mjs +46 -0
  61. package/dist/src/platform/codex-runtime.mjs +3 -0
  62. package/dist/src/platform/credential-store.mjs +3 -0
  63. package/dist/src/platform/desktop-host.mjs +3 -0
  64. package/dist/src/platform/desktop-project-registration.mjs +3 -0
  65. package/dist/src/platform/desktop-project-store.mjs +208 -0
  66. package/dist/src/platform/file-opener.mjs +9 -0
  67. package/dist/src/platform/linux/codex-runtime.mjs +56 -0
  68. package/dist/src/platform/linux/credential-store.mjs +28 -0
  69. package/dist/src/platform/linux/desktop-host.mjs +87 -0
  70. package/dist/src/platform/linux/desktop-installation.mjs +36 -0
  71. package/dist/src/platform/linux/desktop-project-registration.mjs +11 -0
  72. package/dist/src/platform/linux/network-info.mjs +11 -0
  73. package/dist/src/platform/linux/process.mjs +53 -0
  74. package/dist/src/platform/linux/project-locations.mjs +17 -0
  75. package/dist/src/platform/linux/resident-startup.mjs +52 -0
  76. package/dist/src/platform/linux/retained-runtime.mjs +76 -0
  77. package/dist/src/platform/linux/service-host.mjs +18 -0
  78. package/dist/src/platform/linux/system.mjs +50 -0
  79. package/dist/src/platform/linux/user-environment.mjs +9 -0
  80. package/dist/src/platform/macos/codex-runtime.mjs +125 -0
  81. package/dist/src/platform/macos/credential-store.mjs +10 -0
  82. package/dist/src/platform/macos/desktop-host.mjs +86 -0
  83. package/dist/src/platform/macos/desktop-project-registration.mjs +11 -0
  84. package/dist/src/platform/macos/network-info.mjs +8 -0
  85. package/dist/src/platform/macos/project-locations.mjs +8 -0
  86. package/dist/src/platform/macos/resident-startup.mjs +84 -0
  87. package/dist/src/platform/macos/retained-runtime.mjs +127 -0
  88. package/dist/src/platform/macos/service-host.mjs +18 -0
  89. package/dist/src/platform/macos/system.mjs +29 -0
  90. package/dist/src/platform/macos/user-environment.mjs +9 -0
  91. package/dist/src/platform/native-package.mjs +58 -0
  92. package/dist/src/platform/network-info.mjs +3 -0
  93. package/dist/src/platform/path-identity.mjs +5 -0
  94. package/dist/src/platform/posix/network-candidates.mjs +23 -0
  95. package/dist/src/platform/posix/runtime-paths.mjs +25 -0
  96. package/dist/src/platform/power-inhibitor.mjs +22 -0
  97. package/dist/src/platform/project-locations.mjs +3 -0
  98. package/dist/src/platform/runtime-paths.mjs +8 -0
  99. package/dist/src/platform/select.mjs +5 -0
  100. package/dist/src/platform/service-host.mjs +3 -0
  101. package/dist/src/platform/user-environment.mjs +3 -0
  102. package/dist/src/platform/windows/activate-desktop.ps1 +49 -0
  103. package/dist/src/platform/windows/codex-runtime.mjs +215 -0
  104. package/dist/src/platform/windows/credential-store.mjs +27 -27
  105. package/dist/src/platform/windows/credential-store.ps1 +49 -49
  106. package/dist/src/platform/windows/desktop-helper.mjs +179 -0
  107. package/dist/src/platform/windows/desktop-host.mjs +50 -23
  108. package/dist/src/platform/windows/desktop-info.ps1 +38 -16
  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 +21 -28
  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 +17 -18
  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 +76 -20
  118. package/dist/src/platform/windows/rustdesk-video-probe.mjs +168 -0
  119. package/dist/src/platform/windows/service-host.mjs +29 -37
  120. package/dist/src/platform/windows/start-hidden-console.ps1 +11 -2
  121. package/dist/src/platform/windows/stop-desktop.ps1 +7 -4
  122. package/dist/src/platform/windows/user-environment.mjs +12 -10
  123. package/dist/src/project-create.mjs +121 -0
  124. package/dist/src/project-management.mjs +59 -0
  125. package/dist/src/project-remove.mjs +55 -0
  126. package/dist/src/project-update.mjs +59 -0
  127. package/dist/src/runtime-discovery.mjs +47 -0
  128. package/dist/src/self-relay/account-cleanup.mjs +30 -0
  129. package/dist/src/self-relay/account-connections.mjs +52 -0
  130. package/dist/src/self-relay/admin-cloud.mjs +101 -0
  131. package/dist/src/self-relay/admin-page.mjs +80 -0
  132. package/dist/src/self-relay/admin-server.mjs +74 -0
  133. package/dist/src/self-relay/admin-state.mjs +85 -19
  134. package/dist/src/self-relay/admin-style.mjs +14 -0
  135. package/dist/src/self-relay/android-releases.mjs +61 -0
  136. package/dist/src/self-relay/client.mjs +45 -45
  137. package/dist/src/self-relay/connector.mjs +421 -144
  138. package/dist/src/self-relay/demo.mjs +34 -35
  139. package/dist/src/self-relay/device-info.mjs +27 -0
  140. package/dist/src/self-relay/device-store.mjs +10 -2
  141. package/dist/src/self-relay/diagnostics.mjs +54 -0
  142. package/dist/src/self-relay/email-accounts.mjs +183 -0
  143. package/dist/src/self-relay/file-wire.mjs +13 -0
  144. package/dist/src/self-relay/lan-authorizations.mjs +44 -2
  145. package/dist/src/self-relay/lifecycle.mjs +241 -262
  146. package/dist/src/self-relay/long-pairing.mjs +40 -0
  147. package/dist/src/self-relay/mysql-state.mjs +118 -0
  148. package/dist/src/self-relay/p2p-probe.mjs +56 -11
  149. package/dist/src/self-relay/privacy-page.mjs +26 -0
  150. package/dist/src/self-relay/public-releases.mjs +67 -0
  151. package/dist/src/self-relay/rtc-file-bridge.mjs +41 -0
  152. package/dist/src/self-relay/server.mjs +653 -115
  153. package/dist/src/self-relay/usage-daily.mjs +55 -0
  154. package/dist/src/self-relay/usage-meter.mjs +141 -0
  155. package/dist/src/server.mjs +1547 -1794
  156. package/dist/src/service-control.mjs +17 -7
  157. package/dist/src/service-doctor.mjs +119 -34
  158. package/dist/src/service-health.mjs +2 -2
  159. package/dist/src/service-install.mjs +91 -85
  160. package/dist/src/service-lifecycle.mjs +117 -108
  161. package/dist/src/service-power.mjs +58 -0
  162. package/dist/src/service-restart.mjs +45 -12
  163. package/dist/src/service-update-worker.mjs +42 -0
  164. package/dist/src/service-update.mjs +77 -0
  165. package/dist/src/shared-app-server.mjs +561 -407
  166. package/dist/src/shared-catalog.mjs +95 -13
  167. package/dist/src/shared-recovery.mjs +24 -14
  168. package/dist/src/shared-thread-stream.mjs +148 -63
  169. package/dist/src/skill-install.mjs +0 -13
  170. package/dist/src/turn-model-history.mjs +47 -0
  171. package/dist/src/usage-reset.mjs +17 -0
  172. package/dist/src/workstation-downloads.mjs +120 -0
  173. package/package.json +35 -37
  174. package/tools/postinstall.mjs +90 -22
  175. package/dist/src/app-server-client.mjs +0 -468
  176. package/dist/src/app-server-tasks.mjs +0 -358
  177. package/dist/src/debug-ui.mjs +0 -131
  178. package/dist/src/platform/windows/desktop-monitor.mjs +0 -34
  179. package/dist/src/platform/windows/desktop-shortcut-run.ps1 +0 -5
  180. package/dist/src/platform/windows/desktop-tools.mjs +0 -48
  181. package/dist/src/thread-catalog.mjs +0 -47
  182. package/dist/tools/find-desktop-pipe.mjs +0 -10
  183. package/dist/web/activity-view.js +0 -283
  184. package/dist/web/approval-ui.js +0 -188
  185. package/dist/web/capabilities.js +0 -57
  186. package/dist/web/chat-transport.js +0 -202
  187. package/dist/web/chat.css +0 -782
  188. package/dist/web/chat.js +0 -3830
  189. package/dist/web/client-platform.js +0 -11
  190. package/dist/web/community-view.js +0 -20
  191. package/dist/web/community.css +0 -77
  192. package/dist/web/community.html +0 -37
  193. package/dist/web/composer-controller.js +0 -101
  194. package/dist/web/conversation-controller.js +0 -99
  195. package/dist/web/disclosure-state-controller.js +0 -95
  196. package/dist/web/draft-controller.js +0 -103
  197. package/dist/web/harmony-platform.js +0 -52
  198. package/dist/web/highlight-powershell.min.js +0 -39
  199. package/dist/web/highlight.min.js +0 -1262
  200. package/dist/web/history-cache.js +0 -240
  201. package/dist/web/history-controller.js +0 -167
  202. package/dist/web/index.html +0 -325
  203. package/dist/web/lan-session.js +0 -122
  204. package/dist/web/link-action-controller.js +0 -212
  205. package/dist/web/message-send-controller.js +0 -177
  206. package/dist/web/message-view.js +0 -98
  207. package/dist/web/p2p-data-channel.js +0 -50
  208. package/dist/web/p2p-diagnostics.js +0 -28
  209. package/dist/web/p2p-probe.js +0 -123
  210. package/dist/web/page-resume.js +0 -28
  211. package/dist/web/pending-message-store.js +0 -108
  212. package/dist/web/queue-controller.js +0 -82
  213. package/dist/web/resources.json +0 -1
  214. package/dist/web/self-relay-session.js +0 -129
  215. package/dist/web/server-requests.js +0 -67
  216. package/dist/web/station-connection-controller.js +0 -75
  217. package/dist/web/task-list-view.js +0 -296
  218. package/dist/web/thread-attention-controller.js +0 -124
  219. package/dist/web/thread-context-controller.js +0 -30
  220. package/dist/web/thread-list-controller.js +0 -61
  221. package/dist/web/thread-list-sync.js +0 -86
  222. package/dist/web/thread-title-controller.js +0 -57
  223. package/dist/web/timeline-formatters.js +0 -249
  224. package/dist/web/timeline-reducer.js +0 -81
  225. package/dist/web/timeline-renderer.js +0 -161
  226. package/dist/web/timeline-scroll-controller.js +0 -50
  227. package/dist/web/timeline-sync.js +0 -67
  228. package/dist/web/usage-controller.js +0 -258
  229. package/dist/web/vendor/README.md +0 -14
  230. package/dist/web/vendor/highlight-powershell.min.js +0 -39
  231. package/dist/web/vendor/highlight.LICENSE.txt +0 -29
  232. package/dist/web/vendor/highlight.min.js +0 -1262
  233. package/dist/web/vendor/lucide.LICENSE.txt +0 -17
  234. package/node_modules/@img/colour/LICENSE.md +0 -82
  235. package/node_modules/@img/colour/README.md +0 -15
  236. package/node_modules/@img/colour/color.cjs +0 -1596
  237. package/node_modules/@img/colour/index.cjs +0 -1
  238. package/node_modules/@img/colour/index.d.ts +0 -929
  239. package/node_modules/@img/colour/package.json +0 -58
  240. package/node_modules/@img/sharp-win32-x64/LICENSE +0 -191
  241. package/node_modules/@img/sharp-win32-x64/README.md +0 -59
  242. package/node_modules/@img/sharp-win32-x64/index.cjs +0 -1
  243. package/node_modules/@img/sharp-win32-x64/lib/libvips-42.dll +0 -0
  244. package/node_modules/@img/sharp-win32-x64/lib/libvips-cpp-8.18.6.dll +0 -0
  245. package/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64-0.35.4.node +0 -0
  246. package/node_modules/@img/sharp-win32-x64/package.json +0 -40
  247. package/node_modules/@img/sharp-win32-x64/versions.json +0 -30
  248. package/node_modules/@node-datachannel/win32-x64-msvc/node_datachannel.node +0 -0
  249. package/node_modules/@node-datachannel/win32-x64-msvc/package.json +0 -20
  250. package/node_modules/ansi-regex/index.d.ts +0 -37
  251. package/node_modules/ansi-regex/index.js +0 -10
  252. package/node_modules/ansi-regex/license +0 -9
  253. package/node_modules/ansi-regex/package.json +0 -55
  254. package/node_modules/ansi-regex/readme.md +0 -78
  255. package/node_modules/ansi-styles/index.d.ts +0 -345
  256. package/node_modules/ansi-styles/index.js +0 -163
  257. package/node_modules/ansi-styles/license +0 -9
  258. package/node_modules/ansi-styles/package.json +0 -56
  259. package/node_modules/ansi-styles/readme.md +0 -152
  260. package/node_modules/camelcase/index.d.ts +0 -63
  261. package/node_modules/camelcase/index.js +0 -76
  262. package/node_modules/camelcase/license +0 -9
  263. package/node_modules/camelcase/package.json +0 -43
  264. package/node_modules/camelcase/readme.md +0 -99
  265. package/node_modules/cliui/CHANGELOG.md +0 -76
  266. package/node_modules/cliui/LICENSE.txt +0 -14
  267. package/node_modules/cliui/README.md +0 -115
  268. package/node_modules/cliui/index.js +0 -354
  269. package/node_modules/cliui/package.json +0 -65
  270. package/node_modules/color-convert/CHANGELOG.md +0 -54
  271. package/node_modules/color-convert/LICENSE +0 -21
  272. package/node_modules/color-convert/README.md +0 -68
  273. package/node_modules/color-convert/conversions.js +0 -839
  274. package/node_modules/color-convert/index.js +0 -81
  275. package/node_modules/color-convert/package.json +0 -48
  276. package/node_modules/color-convert/route.js +0 -97
  277. package/node_modules/color-name/LICENSE +0 -8
  278. package/node_modules/color-name/README.md +0 -11
  279. package/node_modules/color-name/index.js +0 -152
  280. package/node_modules/color-name/package.json +0 -28
  281. package/node_modules/decamelize/index.js +0 -13
  282. package/node_modules/decamelize/license +0 -21
  283. package/node_modules/decamelize/package.json +0 -38
  284. package/node_modules/decamelize/readme.md +0 -48
  285. package/node_modules/detect-libc/LICENSE +0 -201
  286. package/node_modules/detect-libc/README.md +0 -163
  287. package/node_modules/detect-libc/index.d.ts +0 -14
  288. package/node_modules/detect-libc/lib/detect-libc.js +0 -313
  289. package/node_modules/detect-libc/lib/elf.js +0 -39
  290. package/node_modules/detect-libc/lib/filesystem.js +0 -51
  291. package/node_modules/detect-libc/lib/process.js +0 -24
  292. package/node_modules/detect-libc/package.json +0 -44
  293. package/node_modules/dijkstrajs/.travis.yml +0 -4
  294. package/node_modules/dijkstrajs/CONTRIBUTING.md +0 -8
  295. package/node_modules/dijkstrajs/LICENSE.md +0 -19
  296. package/node_modules/dijkstrajs/README.md +0 -18
  297. package/node_modules/dijkstrajs/dijkstra.js +0 -165
  298. package/node_modules/dijkstrajs/package.json +0 -60
  299. package/node_modules/dijkstrajs/test/dijkstra.test.js +0 -96
  300. package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  301. package/node_modules/emoji-regex/README.md +0 -73
  302. package/node_modules/emoji-regex/es2015/index.js +0 -6
  303. package/node_modules/emoji-regex/es2015/text.js +0 -6
  304. package/node_modules/emoji-regex/index.d.ts +0 -23
  305. package/node_modules/emoji-regex/index.js +0 -6
  306. package/node_modules/emoji-regex/package.json +0 -50
  307. package/node_modules/emoji-regex/text.js +0 -6
  308. package/node_modules/find-up/index.d.ts +0 -137
  309. package/node_modules/find-up/index.js +0 -89
  310. package/node_modules/find-up/license +0 -9
  311. package/node_modules/find-up/package.json +0 -53
  312. package/node_modules/find-up/readme.md +0 -156
  313. package/node_modules/get-caller-file/LICENSE.md +0 -6
  314. package/node_modules/get-caller-file/README.md +0 -41
  315. package/node_modules/get-caller-file/index.d.ts +0 -2
  316. package/node_modules/get-caller-file/index.js +0 -22
  317. package/node_modules/get-caller-file/index.js.map +0 -1
  318. package/node_modules/get-caller-file/package.json +0 -42
  319. package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  320. package/node_modules/is-fullwidth-code-point/index.js +0 -50
  321. package/node_modules/is-fullwidth-code-point/license +0 -9
  322. package/node_modules/is-fullwidth-code-point/package.json +0 -42
  323. package/node_modules/is-fullwidth-code-point/readme.md +0 -39
  324. package/node_modules/locate-path/index.d.ts +0 -83
  325. package/node_modules/locate-path/index.js +0 -65
  326. package/node_modules/locate-path/license +0 -9
  327. package/node_modules/locate-path/package.json +0 -45
  328. package/node_modules/locate-path/readme.md +0 -122
  329. package/node_modules/node-datachannel/.clang-format +0 -17
  330. package/node_modules/node-datachannel/.editorconfig +0 -12
  331. package/node_modules/node-datachannel/.eslintignore +0 -8
  332. package/node_modules/node-datachannel/.eslintrc.json +0 -27
  333. package/node_modules/node-datachannel/.gitmodules +0 -3
  334. package/node_modules/node-datachannel/.prettierignore +0 -7
  335. package/node_modules/node-datachannel/.prettierrc +0 -13
  336. package/node_modules/node-datachannel/API.md +0 -247
  337. package/node_modules/node-datachannel/BULDING.md +0 -26
  338. package/node_modules/node-datachannel/CMakeLists.txt +0 -153
  339. package/node_modules/node-datachannel/LICENSE +0 -373
  340. package/node_modules/node-datachannel/README.md +0 -129
  341. package/node_modules/node-datachannel/dist/cjs/index.cjs +0 -11
  342. package/node_modules/node-datachannel/dist/cjs/index.cjs.map +0 -1
  343. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs +0 -101
  344. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs.map +0 -1
  345. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs +0 -91
  346. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs.map +0 -1
  347. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs +0 -94
  348. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs.map +0 -1
  349. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs +0 -45
  350. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs.map +0 -1
  351. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs +0 -8
  352. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs.map +0 -1
  353. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs +0 -86
  354. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs.map +0 -1
  355. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs +0 -34
  356. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs.map +0 -1
  357. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs +0 -34
  358. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs.map +0 -1
  359. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs +0 -214
  360. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs.map +0 -1
  361. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs +0 -53
  362. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +0 -1
  363. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs +0 -83
  364. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs.map +0 -1
  365. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs +0 -132
  366. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs.map +0 -1
  367. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs +0 -94
  368. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs.map +0 -1
  369. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs +0 -434
  370. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs.map +0 -1
  371. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs +0 -59
  372. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs.map +0 -1
  373. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs +0 -45
  374. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs.map +0 -1
  375. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs +0 -42
  376. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs.map +0 -1
  377. package/node_modules/node-datachannel/dist/esm/index.mjs +0 -8
  378. package/node_modules/node-datachannel/dist/esm/index.mjs.map +0 -1
  379. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs +0 -78
  380. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs.map +0 -1
  381. package/node_modules/node-datachannel/dist/esm/lib/index.mjs +0 -64
  382. package/node_modules/node-datachannel/dist/esm/lib/index.mjs.map +0 -1
  383. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs +0 -78
  384. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs.map +0 -1
  385. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs +0 -43
  386. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs.map +0 -1
  387. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs +0 -6
  388. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs.map +0 -1
  389. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs +0 -82
  390. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs.map +0 -1
  391. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs +0 -28
  392. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs.map +0 -1
  393. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs +0 -30
  394. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs.map +0 -1
  395. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs +0 -210
  396. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs.map +0 -1
  397. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs +0 -49
  398. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs.map +0 -1
  399. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs +0 -79
  400. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs.map +0 -1
  401. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs +0 -128
  402. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs.map +0 -1
  403. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs +0 -89
  404. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs.map +0 -1
  405. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs +0 -430
  406. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs.map +0 -1
  407. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs +0 -55
  408. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs.map +0 -1
  409. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs +0 -41
  410. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs.map +0 -1
  411. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs +0 -27
  412. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs.map +0 -1
  413. package/node_modules/node-datachannel/dist/types/lib/datachannel-stream.d.ts +0 -24
  414. package/node_modules/node-datachannel/dist/types/lib/index.d.ts +0 -241
  415. package/node_modules/node-datachannel/dist/types/lib/types.d.ts +0 -119
  416. package/node_modules/node-datachannel/dist/types/lib/websocket-server.d.ts +0 -13
  417. package/node_modules/node-datachannel/dist/types/lib/websocket.d.ts +0 -25
  418. package/node_modules/node-datachannel/dist/types/polyfill/Events.d.ts +0 -15
  419. package/node_modules/node-datachannel/dist/types/polyfill/RTCCertificate.d.ts +0 -9
  420. package/node_modules/node-datachannel/dist/types/polyfill/RTCDataChannel.d.ts +0 -29
  421. package/node_modules/node-datachannel/dist/types/polyfill/RTCDtlsTransport.d.ts +0 -15
  422. package/node_modules/node-datachannel/dist/types/polyfill/RTCError.d.ts +0 -17
  423. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceCandidate.d.ts +0 -21
  424. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceTransport.d.ts +0 -30
  425. package/node_modules/node-datachannel/dist/types/polyfill/RTCPeerConnection.d.ts +0 -64
  426. package/node_modules/node-datachannel/dist/types/polyfill/RTCSctpTransport.d.ts +0 -15
  427. package/node_modules/node-datachannel/dist/types/polyfill/RTCSessionDescription.d.ts +0 -10
  428. package/node_modules/node-datachannel/dist/types/polyfill/index.d.ts +0 -26
  429. package/node_modules/node-datachannel/jest.config.ts +0 -14
  430. package/node_modules/node-datachannel/package.json +0 -133
  431. package/node_modules/node-datachannel/rollup.config.mjs +0 -67
  432. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.cpp +0 -530
  433. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.h +0 -63
  434. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.cpp +0 -172
  435. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.h +0 -43
  436. package/node_modules/node-datachannel/src/cpp/main.cpp +0 -58
  437. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.cpp +0 -457
  438. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.h +0 -52
  439. package/node_modules/node-datachannel/src/cpp/media-av1packetization.cpp +0 -24
  440. package/node_modules/node-datachannel/src/cpp/media-av1packetization.h +0 -11
  441. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.cpp +0 -126
  442. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.h +0 -29
  443. package/node_modules/node-datachannel/src/cpp/media-direction.cpp +0 -43
  444. package/node_modules/node-datachannel/src/cpp/media-direction.h +0 -10
  445. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.cpp +0 -126
  446. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.h +0 -30
  447. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.cpp +0 -126
  448. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.h +0 -30
  449. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.cpp +0 -32
  450. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.h +0 -11
  451. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.cpp +0 -31
  452. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.h +0 -11
  453. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.cpp +0 -79
  454. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.h +0 -28
  455. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.cpp +0 -68
  456. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.h +0 -28
  457. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.cpp +0 -57
  458. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.h +0 -28
  459. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.cpp +0 -93
  460. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.h +0 -30
  461. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.cpp +0 -167
  462. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.h +0 -35
  463. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.cpp +0 -95
  464. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.h +0 -30
  465. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.cpp +0 -458
  466. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.h +0 -61
  467. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.cpp +0 -526
  468. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.h +0 -56
  469. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.cpp +0 -1298
  470. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.h +0 -89
  471. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.cpp +0 -205
  472. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.h +0 -24
  473. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.cpp +0 -57
  474. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.h +0 -47
  475. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.cpp +0 -275
  476. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.h +0 -41
  477. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.cpp +0 -796
  478. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.h +0 -63
  479. package/node_modules/node-datachannel/src/index.ts +0 -9
  480. package/node_modules/node-datachannel/src/lib/datachannel-stream.ts +0 -100
  481. package/node_modules/node-datachannel/src/lib/index.ts +0 -290
  482. package/node_modules/node-datachannel/src/lib/node-datachannel.ts +0 -84
  483. package/node_modules/node-datachannel/src/lib/types.ts +0 -169
  484. package/node_modules/node-datachannel/src/lib/websocket-server.ts +0 -37
  485. package/node_modules/node-datachannel/src/lib/websocket.ts +0 -26
  486. package/node_modules/node-datachannel/src/polyfill/Events.ts +0 -82
  487. package/node_modules/node-datachannel/src/polyfill/Exception.ts +0 -37
  488. package/node_modules/node-datachannel/src/polyfill/README.md +0 -41
  489. package/node_modules/node-datachannel/src/polyfill/RTCCertificate.ts +0 -21
  490. package/node_modules/node-datachannel/src/polyfill/RTCDataChannel.ts +0 -225
  491. package/node_modules/node-datachannel/src/polyfill/RTCDtlsTransport.ts +0 -46
  492. package/node_modules/node-datachannel/src/polyfill/RTCError.ts +0 -78
  493. package/node_modules/node-datachannel/src/polyfill/RTCIceCandidate.ts +0 -128
  494. package/node_modules/node-datachannel/src/polyfill/RTCIceTransport.ts +0 -90
  495. package/node_modules/node-datachannel/src/polyfill/RTCPeerConnection.ts +0 -527
  496. package/node_modules/node-datachannel/src/polyfill/RTCSctpTransport.ts +0 -51
  497. package/node_modules/node-datachannel/src/polyfill/RTCSessionDescription.ts +0 -41
  498. package/node_modules/node-datachannel/src/polyfill/index.ts +0 -38
  499. package/node_modules/node-datachannel/tsconfig.json +0 -21
  500. package/node_modules/p-limit/index.d.ts +0 -38
  501. package/node_modules/p-limit/index.js +0 -57
  502. package/node_modules/p-limit/license +0 -9
  503. package/node_modules/p-limit/package.json +0 -52
  504. package/node_modules/p-limit/readme.md +0 -101
  505. package/node_modules/p-locate/index.d.ts +0 -64
  506. package/node_modules/p-locate/index.js +0 -52
  507. package/node_modules/p-locate/license +0 -9
  508. package/node_modules/p-locate/package.json +0 -53
  509. package/node_modules/p-locate/readme.md +0 -90
  510. package/node_modules/p-try/index.d.ts +0 -39
  511. package/node_modules/p-try/index.js +0 -9
  512. package/node_modules/p-try/license +0 -9
  513. package/node_modules/p-try/package.json +0 -42
  514. package/node_modules/p-try/readme.md +0 -58
  515. package/node_modules/path-exists/index.d.ts +0 -28
  516. package/node_modules/path-exists/index.js +0 -23
  517. package/node_modules/path-exists/license +0 -9
  518. package/node_modules/path-exists/package.json +0 -39
  519. package/node_modules/path-exists/readme.md +0 -52
  520. package/node_modules/pngjs/.eslintignore +0 -2
  521. package/node_modules/pngjs/.eslintrc.json +0 -19
  522. package/node_modules/pngjs/.prettierignore +0 -3
  523. package/node_modules/pngjs/LICENSE +0 -20
  524. package/node_modules/pngjs/README.md +0 -429
  525. package/node_modules/pngjs/browser.js +0 -16096
  526. package/node_modules/pngjs/coverage/lcov-report/base.css +0 -354
  527. package/node_modules/pngjs/coverage/lcov-report/bitmapper.js.html +0 -881
  528. package/node_modules/pngjs/coverage/lcov-report/bitpacker.js.html +0 -554
  529. package/node_modules/pngjs/coverage/lcov-report/block-navigation.js +0 -77
  530. package/node_modules/pngjs/coverage/lcov-report/chunkstream.js.html +0 -647
  531. package/node_modules/pngjs/coverage/lcov-report/constants.js.html +0 -176
  532. package/node_modules/pngjs/coverage/lcov-report/crc.js.html +0 -200
  533. package/node_modules/pngjs/coverage/lcov-report/favicon.png +0 -0
  534. package/node_modules/pngjs/coverage/lcov-report/filter-pack.js.html +0 -593
  535. package/node_modules/pngjs/coverage/lcov-report/filter-parse-async.js.html +0 -152
  536. package/node_modules/pngjs/coverage/lcov-report/filter-parse-sync.js.html +0 -143
  537. package/node_modules/pngjs/coverage/lcov-report/filter-parse.js.html +0 -611
  538. package/node_modules/pngjs/coverage/lcov-report/format-normaliser.js.html +0 -359
  539. package/node_modules/pngjs/coverage/lcov-report/index.html +0 -426
  540. package/node_modules/pngjs/coverage/lcov-report/interlace.js.html +0 -365
  541. package/node_modules/pngjs/coverage/lcov-report/packer-async.js.html +0 -230
  542. package/node_modules/pngjs/coverage/lcov-report/packer-sync.js.html +0 -248
  543. package/node_modules/pngjs/coverage/lcov-report/packer.js.html +0 -467
  544. package/node_modules/pngjs/coverage/lcov-report/paeth-predictor.js.html +0 -128
  545. package/node_modules/pngjs/coverage/lcov-report/parser-async.js.html +0 -575
  546. package/node_modules/pngjs/coverage/lcov-report/parser-sync.js.html +0 -404
  547. package/node_modules/pngjs/coverage/lcov-report/parser.js.html +0 -950
  548. package/node_modules/pngjs/coverage/lcov-report/png-sync.js.html +0 -116
  549. package/node_modules/pngjs/coverage/lcov-report/png.js.html +0 -662
  550. package/node_modules/pngjs/coverage/lcov-report/prettify.css +0 -101
  551. package/node_modules/pngjs/coverage/lcov-report/prettify.js +0 -1007
  552. package/node_modules/pngjs/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  553. package/node_modules/pngjs/coverage/lcov-report/sorter.js +0 -169
  554. package/node_modules/pngjs/coverage/lcov-report/sync-inflate.js.html +0 -584
  555. package/node_modules/pngjs/coverage/lcov-report/sync-reader.js.html +0 -215
  556. package/node_modules/pngjs/coverage/lcov.info +0 -2177
  557. package/node_modules/pngjs/lib/bitmapper.js +0 -267
  558. package/node_modules/pngjs/lib/bitpacker.js +0 -158
  559. package/node_modules/pngjs/lib/chunkstream.js +0 -189
  560. package/node_modules/pngjs/lib/constants.js +0 -32
  561. package/node_modules/pngjs/lib/crc.js +0 -40
  562. package/node_modules/pngjs/lib/filter-pack.js +0 -171
  563. package/node_modules/pngjs/lib/filter-parse-async.js +0 -24
  564. package/node_modules/pngjs/lib/filter-parse-sync.js +0 -21
  565. package/node_modules/pngjs/lib/filter-parse.js +0 -177
  566. package/node_modules/pngjs/lib/format-normaliser.js +0 -93
  567. package/node_modules/pngjs/lib/interlace.js +0 -95
  568. package/node_modules/pngjs/lib/packer-async.js +0 -50
  569. package/node_modules/pngjs/lib/packer-sync.js +0 -56
  570. package/node_modules/pngjs/lib/packer.js +0 -129
  571. package/node_modules/pngjs/lib/paeth-predictor.js +0 -16
  572. package/node_modules/pngjs/lib/parser-async.js +0 -165
  573. package/node_modules/pngjs/lib/parser-sync.js +0 -108
  574. package/node_modules/pngjs/lib/parser.js +0 -290
  575. package/node_modules/pngjs/lib/png-sync.js +0 -12
  576. package/node_modules/pngjs/lib/png.js +0 -194
  577. package/node_modules/pngjs/lib/sync-inflate.js +0 -168
  578. package/node_modules/pngjs/lib/sync-reader.js +0 -45
  579. package/node_modules/pngjs/package.json +0 -73
  580. package/node_modules/qrcode/README.md +0 -770
  581. package/node_modules/qrcode/bin/qrcode +0 -159
  582. package/node_modules/qrcode/helper/to-sjis-browser.js +0 -2
  583. package/node_modules/qrcode/helper/to-sjis.js +0 -105
  584. package/node_modules/qrcode/lib/browser.js +0 -76
  585. package/node_modules/qrcode/lib/can-promise.js +0 -7
  586. package/node_modules/qrcode/lib/core/alignment-pattern.js +0 -83
  587. package/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -59
  588. package/node_modules/qrcode/lib/core/bit-buffer.js +0 -37
  589. package/node_modules/qrcode/lib/core/bit-matrix.js +0 -65
  590. package/node_modules/qrcode/lib/core/byte-data.js +0 -30
  591. package/node_modules/qrcode/lib/core/error-correction-code.js +0 -135
  592. package/node_modules/qrcode/lib/core/error-correction-level.js +0 -50
  593. package/node_modules/qrcode/lib/core/finder-pattern.js +0 -22
  594. package/node_modules/qrcode/lib/core/format-info.js +0 -29
  595. package/node_modules/qrcode/lib/core/galois-field.js +0 -69
  596. package/node_modules/qrcode/lib/core/kanji-data.js +0 -54
  597. package/node_modules/qrcode/lib/core/mask-pattern.js +0 -234
  598. package/node_modules/qrcode/lib/core/mode.js +0 -167
  599. package/node_modules/qrcode/lib/core/numeric-data.js +0 -43
  600. package/node_modules/qrcode/lib/core/polynomial.js +0 -62
  601. package/node_modules/qrcode/lib/core/qrcode.js +0 -495
  602. package/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -56
  603. package/node_modules/qrcode/lib/core/regex.js +0 -31
  604. package/node_modules/qrcode/lib/core/segments.js +0 -330
  605. package/node_modules/qrcode/lib/core/utils.js +0 -63
  606. package/node_modules/qrcode/lib/core/version-check.js +0 -9
  607. package/node_modules/qrcode/lib/core/version.js +0 -163
  608. package/node_modules/qrcode/lib/index.js +0 -12
  609. package/node_modules/qrcode/lib/renderer/canvas.js +0 -63
  610. package/node_modules/qrcode/lib/renderer/png.js +0 -78
  611. package/node_modules/qrcode/lib/renderer/svg-tag.js +0 -81
  612. package/node_modules/qrcode/lib/renderer/svg.js +0 -19
  613. package/node_modules/qrcode/lib/renderer/terminal/terminal-small.js +0 -85
  614. package/node_modules/qrcode/lib/renderer/terminal/terminal.js +0 -49
  615. package/node_modules/qrcode/lib/renderer/terminal.js +0 -9
  616. package/node_modules/qrcode/lib/renderer/utf8.js +0 -71
  617. package/node_modules/qrcode/lib/renderer/utils.js +0 -99
  618. package/node_modules/qrcode/lib/server.js +0 -138
  619. package/node_modules/qrcode/license +0 -10
  620. package/node_modules/qrcode/package.json +0 -77
  621. package/node_modules/require-directory/.jshintrc +0 -67
  622. package/node_modules/require-directory/.npmignore +0 -1
  623. package/node_modules/require-directory/.travis.yml +0 -3
  624. package/node_modules/require-directory/LICENSE +0 -22
  625. package/node_modules/require-directory/README.markdown +0 -184
  626. package/node_modules/require-directory/index.js +0 -86
  627. package/node_modules/require-directory/package.json +0 -40
  628. package/node_modules/require-main-filename/CHANGELOG.md +0 -26
  629. package/node_modules/require-main-filename/LICENSE.txt +0 -14
  630. package/node_modules/require-main-filename/README.md +0 -26
  631. package/node_modules/require-main-filename/index.js +0 -18
  632. package/node_modules/require-main-filename/package.json +0 -35
  633. package/node_modules/semver/LICENSE +0 -15
  634. package/node_modules/semver/README.md +0 -680
  635. package/node_modules/semver/bin/semver.js +0 -195
  636. package/node_modules/semver/classes/comparator.js +0 -143
  637. package/node_modules/semver/classes/index.js +0 -7
  638. package/node_modules/semver/classes/range.js +0 -577
  639. package/node_modules/semver/classes/semver.js +0 -350
  640. package/node_modules/semver/functions/clean.js +0 -8
  641. package/node_modules/semver/functions/cmp.js +0 -54
  642. package/node_modules/semver/functions/coerce.js +0 -62
  643. package/node_modules/semver/functions/compare-build.js +0 -9
  644. package/node_modules/semver/functions/compare-loose.js +0 -5
  645. package/node_modules/semver/functions/compare.js +0 -7
  646. package/node_modules/semver/functions/diff.js +0 -60
  647. package/node_modules/semver/functions/eq.js +0 -5
  648. package/node_modules/semver/functions/gt.js +0 -5
  649. package/node_modules/semver/functions/gte.js +0 -5
  650. package/node_modules/semver/functions/inc.js +0 -21
  651. package/node_modules/semver/functions/lt.js +0 -5
  652. package/node_modules/semver/functions/lte.js +0 -5
  653. package/node_modules/semver/functions/major.js +0 -5
  654. package/node_modules/semver/functions/minor.js +0 -5
  655. package/node_modules/semver/functions/neq.js +0 -5
  656. package/node_modules/semver/functions/parse.js +0 -18
  657. package/node_modules/semver/functions/patch.js +0 -5
  658. package/node_modules/semver/functions/prerelease.js +0 -8
  659. package/node_modules/semver/functions/rcompare.js +0 -5
  660. package/node_modules/semver/functions/rsort.js +0 -5
  661. package/node_modules/semver/functions/satisfies.js +0 -12
  662. package/node_modules/semver/functions/sort.js +0 -5
  663. package/node_modules/semver/functions/truncate.js +0 -48
  664. package/node_modules/semver/functions/valid.js +0 -8
  665. package/node_modules/semver/index.js +0 -93
  666. package/node_modules/semver/internal/constants.js +0 -37
  667. package/node_modules/semver/internal/debug.js +0 -11
  668. package/node_modules/semver/internal/identifiers.js +0 -29
  669. package/node_modules/semver/internal/lrucache.js +0 -42
  670. package/node_modules/semver/internal/parse-options.js +0 -17
  671. package/node_modules/semver/internal/re.js +0 -223
  672. package/node_modules/semver/package.json +0 -78
  673. package/node_modules/semver/preload.js +0 -4
  674. package/node_modules/semver/range.bnf +0 -17
  675. package/node_modules/semver/ranges/gtr.js +0 -6
  676. package/node_modules/semver/ranges/intersects.js +0 -9
  677. package/node_modules/semver/ranges/ltr.js +0 -6
  678. package/node_modules/semver/ranges/max-satisfying.js +0 -27
  679. package/node_modules/semver/ranges/min-satisfying.js +0 -26
  680. package/node_modules/semver/ranges/min-version.js +0 -63
  681. package/node_modules/semver/ranges/outside.js +0 -82
  682. package/node_modules/semver/ranges/simplify.js +0 -49
  683. package/node_modules/semver/ranges/subset.js +0 -249
  684. package/node_modules/semver/ranges/to-comparators.js +0 -10
  685. package/node_modules/semver/ranges/valid.js +0 -13
  686. package/node_modules/set-blocking/CHANGELOG.md +0 -26
  687. package/node_modules/set-blocking/LICENSE.txt +0 -14
  688. package/node_modules/set-blocking/README.md +0 -31
  689. package/node_modules/set-blocking/index.js +0 -7
  690. package/node_modules/set-blocking/package.json +0 -42
  691. package/node_modules/sharp/LICENSE +0 -191
  692. package/node_modules/sharp/README.md +0 -112
  693. package/node_modules/sharp/dist/channel.cjs +0 -177
  694. package/node_modules/sharp/dist/channel.mjs +0 -177
  695. package/node_modules/sharp/dist/colour.cjs +0 -199
  696. package/node_modules/sharp/dist/colour.mjs +0 -199
  697. package/node_modules/sharp/dist/composite.cjs +0 -213
  698. package/node_modules/sharp/dist/composite.mjs +0 -213
  699. package/node_modules/sharp/dist/constructor.cjs +0 -511
  700. package/node_modules/sharp/dist/constructor.mjs +0 -511
  701. package/node_modules/sharp/dist/index.cjs +0 -25
  702. package/node_modules/sharp/dist/index.d.cts +0 -1999
  703. package/node_modules/sharp/dist/index.d.mts +0 -2046
  704. package/node_modules/sharp/dist/index.mjs +0 -25
  705. package/node_modules/sharp/dist/input.cjs +0 -819
  706. package/node_modules/sharp/dist/input.mjs +0 -819
  707. package/node_modules/sharp/dist/is.cjs +0 -143
  708. package/node_modules/sharp/dist/is.mjs +0 -143
  709. package/node_modules/sharp/dist/libvips.cjs +0 -212
  710. package/node_modules/sharp/dist/libvips.mjs +0 -212
  711. package/node_modules/sharp/dist/operation.cjs +0 -1002
  712. package/node_modules/sharp/dist/operation.mjs +0 -1002
  713. package/node_modules/sharp/dist/output.cjs +0 -1785
  714. package/node_modules/sharp/dist/output.mjs +0 -1785
  715. package/node_modules/sharp/dist/resize.cjs +0 -617
  716. package/node_modules/sharp/dist/resize.mjs +0 -617
  717. package/node_modules/sharp/dist/sharp.cjs +0 -174
  718. package/node_modules/sharp/dist/sharp.mjs +0 -174
  719. package/node_modules/sharp/dist/utility.cjs +0 -301
  720. package/node_modules/sharp/dist/utility.mjs +0 -301
  721. package/node_modules/sharp/install/build.js +0 -38
  722. package/node_modules/sharp/lib/index.d.ts +0 -1999
  723. package/node_modules/sharp/package.json +0 -227
  724. package/node_modules/sharp/src/binding.gyp +0 -303
  725. package/node_modules/sharp/src/common.cc +0 -1186
  726. package/node_modules/sharp/src/common.h +0 -421
  727. package/node_modules/sharp/src/metadata.cc +0 -404
  728. package/node_modules/sharp/src/metadata.h +0 -95
  729. package/node_modules/sharp/src/operations.cc +0 -516
  730. package/node_modules/sharp/src/operations.h +0 -137
  731. package/node_modules/sharp/src/pipeline.cc +0 -1948
  732. package/node_modules/sharp/src/pipeline.h +0 -422
  733. package/node_modules/sharp/src/sharp.cc +0 -43
  734. package/node_modules/sharp/src/stats.cc +0 -186
  735. package/node_modules/sharp/src/stats.h +0 -62
  736. package/node_modules/sharp/src/utilities.cc +0 -289
  737. package/node_modules/sharp/src/utilities.h +0 -22
  738. package/node_modules/string-width/index.d.ts +0 -29
  739. package/node_modules/string-width/index.js +0 -47
  740. package/node_modules/string-width/license +0 -9
  741. package/node_modules/string-width/package.json +0 -56
  742. package/node_modules/string-width/readme.md +0 -50
  743. package/node_modules/strip-ansi/index.d.ts +0 -17
  744. package/node_modules/strip-ansi/index.js +0 -4
  745. package/node_modules/strip-ansi/license +0 -9
  746. package/node_modules/strip-ansi/package.json +0 -54
  747. package/node_modules/strip-ansi/readme.md +0 -46
  748. package/node_modules/which-module/LICENSE +0 -13
  749. package/node_modules/which-module/README.md +0 -58
  750. package/node_modules/which-module/index.js +0 -9
  751. package/node_modules/which-module/package.json +0 -41
  752. package/node_modules/wrap-ansi/index.js +0 -186
  753. package/node_modules/wrap-ansi/license +0 -9
  754. package/node_modules/wrap-ansi/package.json +0 -61
  755. package/node_modules/wrap-ansi/readme.md +0 -97
  756. package/node_modules/ws/LICENSE +0 -20
  757. package/node_modules/ws/README.md +0 -548
  758. package/node_modules/ws/browser.js +0 -8
  759. package/node_modules/ws/index.js +0 -22
  760. package/node_modules/ws/lib/buffer-util.js +0 -131
  761. package/node_modules/ws/lib/constants.js +0 -19
  762. package/node_modules/ws/lib/event-target.js +0 -292
  763. package/node_modules/ws/lib/extension.js +0 -203
  764. package/node_modules/ws/lib/limiter.js +0 -55
  765. package/node_modules/ws/lib/permessage-deflate.js +0 -530
  766. package/node_modules/ws/lib/receiver.js +0 -743
  767. package/node_modules/ws/lib/sender.js +0 -607
  768. package/node_modules/ws/lib/stream.js +0 -161
  769. package/node_modules/ws/lib/subprotocol.js +0 -62
  770. package/node_modules/ws/lib/validation.js +0 -152
  771. package/node_modules/ws/lib/websocket-server.js +0 -562
  772. package/node_modules/ws/lib/websocket.js +0 -1407
  773. package/node_modules/ws/package.json +0 -74
  774. package/node_modules/ws/wrapper.mjs +0 -21
  775. package/node_modules/y18n/CHANGELOG.md +0 -35
  776. package/node_modules/y18n/LICENSE +0 -13
  777. package/node_modules/y18n/README.md +0 -109
  778. package/node_modules/y18n/index.js +0 -188
  779. package/node_modules/y18n/package.json +0 -39
  780. package/node_modules/yargs/CHANGELOG.md +0 -420
  781. package/node_modules/yargs/LICENSE +0 -21
  782. package/node_modules/yargs/README.md +0 -140
  783. package/node_modules/yargs/build/lib/apply-extends.d.ts +0 -2
  784. package/node_modules/yargs/build/lib/apply-extends.js +0 -65
  785. package/node_modules/yargs/build/lib/argsert.d.ts +0 -2
  786. package/node_modules/yargs/build/lib/argsert.js +0 -65
  787. package/node_modules/yargs/build/lib/command.d.ts +0 -64
  788. package/node_modules/yargs/build/lib/command.js +0 -416
  789. package/node_modules/yargs/build/lib/common-types.d.ts +0 -36
  790. package/node_modules/yargs/build/lib/common-types.js +0 -25
  791. package/node_modules/yargs/build/lib/completion-templates.d.ts +0 -2
  792. package/node_modules/yargs/build/lib/completion-templates.js +0 -50
  793. package/node_modules/yargs/build/lib/completion.d.ts +0 -21
  794. package/node_modules/yargs/build/lib/completion.js +0 -135
  795. package/node_modules/yargs/build/lib/is-promise.d.ts +0 -1
  796. package/node_modules/yargs/build/lib/is-promise.js +0 -9
  797. package/node_modules/yargs/build/lib/levenshtein.d.ts +0 -1
  798. package/node_modules/yargs/build/lib/levenshtein.js +0 -58
  799. package/node_modules/yargs/build/lib/middleware.d.ts +0 -10
  800. package/node_modules/yargs/build/lib/middleware.js +0 -57
  801. package/node_modules/yargs/build/lib/obj-filter.d.ts +0 -1
  802. package/node_modules/yargs/build/lib/obj-filter.js +0 -14
  803. package/node_modules/yargs/build/lib/parse-command.d.ts +0 -11
  804. package/node_modules/yargs/build/lib/parse-command.js +0 -36
  805. package/node_modules/yargs/build/lib/process-argv.d.ts +0 -2
  806. package/node_modules/yargs/build/lib/process-argv.js +0 -31
  807. package/node_modules/yargs/build/lib/usage.d.ts +0 -49
  808. package/node_modules/yargs/build/lib/usage.js +0 -540
  809. package/node_modules/yargs/build/lib/validation.d.ts +0 -34
  810. package/node_modules/yargs/build/lib/validation.js +0 -330
  811. package/node_modules/yargs/build/lib/yargs.d.ts +0 -274
  812. package/node_modules/yargs/build/lib/yargs.js +0 -1190
  813. package/node_modules/yargs/build/lib/yerror.d.ts +0 -4
  814. package/node_modules/yargs/build/lib/yerror.js +0 -11
  815. package/node_modules/yargs/index.js +0 -40
  816. package/node_modules/yargs/locales/be.json +0 -46
  817. package/node_modules/yargs/locales/de.json +0 -46
  818. package/node_modules/yargs/locales/en.json +0 -51
  819. package/node_modules/yargs/locales/es.json +0 -46
  820. package/node_modules/yargs/locales/fi.json +0 -49
  821. package/node_modules/yargs/locales/fr.json +0 -53
  822. package/node_modules/yargs/locales/hi.json +0 -49
  823. package/node_modules/yargs/locales/hu.json +0 -46
  824. package/node_modules/yargs/locales/id.json +0 -50
  825. package/node_modules/yargs/locales/it.json +0 -46
  826. package/node_modules/yargs/locales/ja.json +0 -51
  827. package/node_modules/yargs/locales/ko.json +0 -49
  828. package/node_modules/yargs/locales/nb.json +0 -44
  829. package/node_modules/yargs/locales/nl.json +0 -49
  830. package/node_modules/yargs/locales/nn.json +0 -44
  831. package/node_modules/yargs/locales/pirate.json +0 -13
  832. package/node_modules/yargs/locales/pl.json +0 -49
  833. package/node_modules/yargs/locales/pt.json +0 -45
  834. package/node_modules/yargs/locales/pt_BR.json +0 -48
  835. package/node_modules/yargs/locales/ru.json +0 -46
  836. package/node_modules/yargs/locales/th.json +0 -46
  837. package/node_modules/yargs/locales/tr.json +0 -48
  838. package/node_modules/yargs/locales/zh_CN.json +0 -48
  839. package/node_modules/yargs/locales/zh_TW.json +0 -47
  840. package/node_modules/yargs/package.json +0 -92
  841. package/node_modules/yargs/yargs.js +0 -14
  842. package/node_modules/yargs-parser/CHANGELOG.md +0 -601
  843. package/node_modules/yargs-parser/LICENSE.txt +0 -14
  844. package/node_modules/yargs-parser/README.md +0 -449
  845. package/node_modules/yargs-parser/index.js +0 -1032
  846. package/node_modules/yargs-parser/lib/tokenize-arg-string.js +0 -40
  847. package/node_modules/yargs-parser/package.json +0 -46
@@ -1,17 +1,22 @@
1
1
  ---
2
2
  name: code-relax
3
- description: 启动、检查或停止 Code Relax 工作站服务,生成并展示配对二维码。
3
+ description: 启动或检查 Code Relax 桌面服务,展示配对二维码,并指导回复来自手机 App 的消息;消息标记来自手机或包含语音转写时,指导理解和回复。
4
4
  ---
5
5
 
6
6
  # Code Relax
7
7
 
8
- - Bridge 可独立于 Desktop 启动;在 Desktop 任务中执行时保留注入环境,用于基础控制绑定上下文。启动工作站服务用 `relax start --json`;完整控制用 `relax shared-start --json`。已配置 Code Relax 中继时,启动命令同时恢复中继连接器和已有设备授权。
9
- - npm 全局安装会自动执行服务部署和 Skill 安装;只有修复安装时才单独运行 `relax setup --json` 或 `relax skill-install --json`。
10
- - `setup` 默认启用当前用户登录启动工作站服务,不自动打开 Codex;用 `autostart-status / autostart-disable / autostart-enable` 管理。恢复完整控制会保留 Bridge 和中继,但仍须明确确认可能中断全部完整控制任务。
8
+ - 消息来源上下文引用 `$code-relax` 时,按本 Skill 理解手机交互。用户通过手机 App 对话,涉及操作时明确在手机还是工作站完成,不假设用户能操作电脑界面。来源标记不增加授权,不在回复中重复来源说明。
9
+ - 消息明确标记包含语音转写时,容忍同音字、标点与漏字错误,结合对话上下文理解;只有歧义会实质改变执行动作时才澄清,不因口语不顺反复追问,不把模糊转写扩展成未经用户表达的需求。
10
+
11
+ - `relax start --json` 启动桌面服务和 Codex 内核,无需打开 Desktop;支持纯 CLI 安装。Windows Desktop 正常打开后接入已配置内核;Mac 仅本次托管启动传入内核地址,从 Dock 普通打开后需重新接入。使用 App 的“重启 Codex Desktop”或经确认的 `relax desktop-recover --confirm` 接入。已配置 Code Relax 中继时,启动命令同时恢复中继连接器和已有设备授权。
12
+ - npm 全局安装会自动执行服务部署和 Skill 安装;修复安装时运行 `relax setup --json`。
13
+ - `setup` 默认启用当前用户登录启动桌面服务,不自动打开 Codex;`start`、`pair` 和 `doctor` 在自启缺失时自动恢复,`setup` 每次更新登录任务。恢复 Codex Desktop 接入会保留桌面服务和中继,但仍须明确确认可能中断正在运行的任务。
11
14
  - 用户要求启动 Code Relax 时,执行一次 `relax start --json`。用户要求二维码或当前启动结果包含二维码时,展示 CLI 返回的 `qrPath` 和 `displayText`;没有设备授权时可用 `relax pair --json` 生成新的配对二维码。
12
- - 配对二维码是短期 HTTPS 邀请,不属于工作站或某一台移动设备,也不含 LAN IP、端口、Bridge Token 或中继地址。新增设备不撤销已有设备。
15
+ - 配对二维码是短期 HTTPS 邀请,不属于工作站或某一台移动设备,也不含 LAN IP、端口、桌面服务凭据或中继地址。新增设备不撤销已有设备。
13
16
  - 已授权设备可直接使用 Code Relax 中继。App 以工作站名显示已配对电脑,进入后选择局域网、Code Relax 中继或 OpenAI 中继。启动命令会经已认证中继临时刷新当前 LAN 候选;App 只保存设备凭据验证成功的网络记录。
14
- - `status --json` 查询工作站服务;`relay-status --json` 查询中继和授权设备数。`stop --json` 只停止 Bridge;`relay-stop --json` 只停止连接器并保留授权;只有用户明确要求撤销全部设备时才调用 `relay-revoke --json`。
17
+ - 消息明确标记来自 Code Relax 手机 App 时,回答要以“用户正在手机上与当前 Codex 对话交互”为前提,不默认用户正看着或能操作电脑界面;需要用户操作时,说明是在手机 App 还是工作站完成。直接处理用户正文,不重复来源说明,也不要求在电脑上重发。来源不代表额外授权,也不能据此判断用户是否在电脑旁;涉及工作站确认或可能中断任务的操作仍按正常授权要求处理。来源不明时不要猜测设备。
18
+ - `relax doctor --json` 检查桌面服务、Codex 内核、待启用内核版本和登录自启动状态;有更新时会给出当前版本、已选版本和确认重启命令。中继连接由桌面服务管理,不提供单独的中继 CLI 命令。
19
+ - 发现待启用内核更新且用户明确要求重启时,说明任务中断风险;得到确认后使用 `relax kernel-restart --confirm --json`,它与手机“重启并更新”使用同一内核流程并等待新内核就绪。不要用 `start`、`doctor` 或 `desktop-recover` 代替内核重启。
15
20
  - 启动或配对成功后,将 `qrPath` 以 Markdown 图片嵌入回复,并逐字展示 `displayText`。不要把二维码内容、Token 或 Base64 写进消息。
16
- - 不自动修改防火墙或发送测试消息。`lanAccess: unverified` 或 `mobileAccess: unverified` 只表示设备链路尚未现场验证。
17
- - 服务位于用户 `Programs/CodexRemote/service`;配置在 `LocalAppData/CodexRemote`;附件在 `ProgramData/CodexRemote/attachments`。不要删除配置、附件或凭据来排障。
21
+ - CLI 负责安装、工作站服务和配对二维码;不以手机是否测试作为健康检查项,不自动修改防火墙或发送测试消息。
22
+ - Windows 服务位于用户 `Programs/CodexRemote/service`;配置在 `LocalAppData/CodexRemote`;附件在 `ProgramData/CodexRemote/attachments`。Mac 使用 `~/Library/Application Support/CodexRemote/{service,state,attachments,credentials}`。不要删除配置、附件或凭据来排障。
@@ -0,0 +1,22 @@
1
+ import { sharedThreadProjectId, dotsThreadProjectId } from './shared-catalog.mjs';
2
+
3
+ // One metadata page per request. Local and hosted cursors must never be mixed.
4
+ export async function archivedThreadsPage(server, localServer, hostId, cursor) {
5
+ await server.connect();
6
+ const identity = server.profileIdentity;
7
+ const [page, projects] = await Promise.all([
8
+ server.request('thread/list', { archived: true, limit: 100, sortKey: 'updated_at',
9
+ sortDirection: 'desc', ...(hostId === 'local' ? { useStateDbOnly: true } : {}),
10
+ ...(cursor ? { cursor } : {}) }),
11
+ localServer.projects(),
12
+ ]);
13
+ if (hostId === 'durable' && identity !== server.profileIdentity) throw new Error('云端账号已变化,请重新读取归档列表。');
14
+ const group = hostId === 'durable' ? dotsThreadProjectId : sharedThreadProjectId;
15
+ return { nextCursor: page.nextCursor || null,
16
+ threads: page.data.filter(thread => hostId === 'durable' ? thread.threadSource === 'aeon_child' : thread.threadSource !== 'aeon')
17
+ .map(thread => ({ id: thread.id, hostId, kind: 'codex', threadSource: thread.threadSource,
18
+ title: thread.name || thread.preview || '', projectId: group(thread, projects),
19
+ cwd: thread.cwd, updatedAt: thread.updatedAt, recencyAt: thread.recencyAt ?? thread.updatedAt,
20
+ status: typeof thread.status === 'string' ? thread.status : thread.status?.type || 'unknown',
21
+ activeFlags: Array.isArray(thread.status?.activeFlags) ? thread.status.activeFlags : [] })) };
22
+ }
@@ -0,0 +1,63 @@
1
+ import fs from 'node:fs';
2
+
3
+ export const processLogMaxBytes = 8 * 1024 * 1024;
4
+ const retryMs = 30_000;
5
+
6
+ // The broker drains output even when storage fails, so logging cannot crash
7
+ // the child or build an unbounded in-memory queue.
8
+ export function attachProcessLog(stream, file, { maxBytes = processLogMaxBytes, now = Date.now } = {}) {
9
+ let retryAt = 0, dropped = 0, lastError = '';
10
+ function append(bytes) {
11
+ let size = 0;
12
+ try { size = fs.statSync(file).size; }
13
+ catch (error) { if (error.code !== 'ENOENT') throw error; }
14
+ // Apply the same retention bound to a log left by an earlier launch.
15
+ if (size > maxBytes) {
16
+ const fd = fs.openSync(file, 'r+');
17
+ try {
18
+ const tail = Buffer.alloc(maxBytes);
19
+ const count = fs.readSync(fd, tail, 0, maxBytes, size - maxBytes);
20
+ fs.ftruncateSync(fd, 0);
21
+ writeAll(fd, tail.subarray(0, count));
22
+ size = count;
23
+ } finally { fs.closeSync(fd); }
24
+ }
25
+ for (let offset = 0; offset < bytes.length;) {
26
+ if (size >= maxBytes) {
27
+ fs.rmSync(`${file}.2`, { force: true });
28
+ try { fs.renameSync(`${file}.1`, `${file}.2`); }
29
+ catch (error) { if (error.code !== 'ENOENT') throw error; }
30
+ fs.renameSync(file, `${file}.1`);
31
+ size = 0;
32
+ }
33
+ const part = bytes.subarray(offset, offset + maxBytes - size);
34
+ const fd = fs.openSync(file, 'a');
35
+ try { writeAll(fd, part); } finally { fs.closeSync(fd); }
36
+ offset += part.length;
37
+ size += part.length;
38
+ }
39
+ }
40
+ stream.on('data', chunk => {
41
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
42
+ if (now() < retryAt) { dropped += bytes.length; return; }
43
+ try {
44
+ if (dropped) append(Buffer.from(`\n[log recovered ${new Date(now()).toISOString()}; previous error: ${lastError}; discarded output bytes: ${dropped}]\n`));
45
+ append(bytes);
46
+ dropped = 0;
47
+ retryAt = 0;
48
+ } catch (error) {
49
+ dropped += bytes.length;
50
+ lastError = error.code || error.message;
51
+ retryAt = now() + retryMs;
52
+ }
53
+ });
54
+ }
55
+
56
+ function writeAll(fd, bytes) {
57
+ let offset = 0;
58
+ while (offset < bytes.length) {
59
+ const count = fs.writeSync(fd, bytes, offset, bytes.length - offset);
60
+ if (!count) throw new Error('Log write made no progress.');
61
+ offset += count;
62
+ }
63
+ }
@@ -0,0 +1,107 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import WebSocket from 'ws';
3
+
4
+ // Shared Celsius framing and acknowledged topic lifecycle; callers own identity and HTTP.
5
+ export class CelsiusClient extends EventEmitter {
6
+ constructor({ getConnection, topics = [] }) {
7
+ super(); this.getConnection = getConnection; this.initialTopics = topics;
8
+ this.generation = 0; this.topics = new Map(); this.commands = new Map();
9
+ this.nextId = 0; this.topicLoads = new Map();
10
+ }
11
+ async connect() {
12
+ if (this.ready) return;
13
+ if (this.connecting) return this.connecting;
14
+ const generation = this.generation;
15
+ const work = (async () => {
16
+ const value = await this.getConnection();
17
+ if (generation !== this.generation) throw new Error('消息连接已变化。');
18
+ const url = new URL(value.websocket_url);
19
+ if (url.protocol !== 'wss:' || url.username || url.password) throw new Error('消息推送地址无效。');
20
+ await new Promise((resolve, reject) => {
21
+ const socket = new WebSocket(url, { handshakeTimeout: 15000, maxPayload: 8 * 1024 * 1024 });
22
+ this.socket = socket;
23
+ const timer = setTimeout(() => { reject(new Error('消息推送订阅超时。')); socket.terminate(); }, 30000);
24
+ const current = () => this.socket === socket && generation === this.generation;
25
+ socket.on('error', () => {}); // Do not expose the signed URL in library errors.
26
+ socket.on('open', async () => {
27
+ try {
28
+ await this.command({ type: 'connect', presence: { type: 'presence', state: 'background' } });
29
+ for (const topic of this.initialTopics) await this.subscribe(topic);
30
+ if (!current()) throw new Error('消息连接已变化。');
31
+ this.ready = true; clearTimeout(timer); resolve(); this.emit('connected');
32
+ } catch (error) { clearTimeout(timer); reject(error); socket.terminate(); }
33
+ });
34
+ socket.on('message', data => {
35
+ if (!current()) return;
36
+ let frames; try { frames = JSON.parse(data.toString()); } catch { return; }
37
+ if (!Array.isArray(frames)) return;
38
+ for (const frame of frames) {
39
+ if (frame.type === 'message') this.receive(frame);
40
+ else if (frame.id != null) this.commands.get(frame.id)?.resolve(frame.reply);
41
+ }
42
+ });
43
+ socket.on('close', code => {
44
+ clearTimeout(timer); reject(new Error('消息推送连接已断开。'));
45
+ if (!current()) return;
46
+ this.ready = false; this.socket = null;
47
+ for (const entry of this.commands.values()) entry.reject(new Error('消息推送连接已断开。'));
48
+ this.commands.clear(); this.topics.clear(); this.topicLoads.clear();
49
+ this.emit('disconnected', { source: 'celsius', code });
50
+ });
51
+ });
52
+ })();
53
+ this.connecting = work;
54
+ try { await work; } finally { if (this.connecting === work) this.connecting = null; }
55
+ }
56
+
57
+ command(command) {
58
+ if (this.socket?.readyState !== WebSocket.OPEN) return Promise.reject(new Error('消息推送尚未连接。'));
59
+ const id = ++this.nextId;
60
+ const socket = this.socket;
61
+ return new Promise((resolve, reject) => {
62
+ const finish = (error, value) => {
63
+ if (!this.commands.has(id)) return;
64
+ clearTimeout(timer); this.commands.delete(id);
65
+ if (error) reject(error); else resolve(value);
66
+ };
67
+ const timer = setTimeout(() => { finish(new Error('消息推送请求超时。')); socket.terminate(); }, 30000);
68
+ this.commands.set(id, { resolve: value => finish(null, value), reject: error => finish(error) });
69
+ socket.send(JSON.stringify([{ id, command }]), error => { if (error) finish(new Error('消息推送连接已断开。')); });
70
+ });
71
+ }
72
+
73
+ async subscribe(name, { offset, requireRecovery = false } = {}) {
74
+ if (this.topics.has(name)) return;
75
+ if (this.topicLoads.has(name)) return this.topicLoads.get(name);
76
+ const generation = this.generation, socket = this.socket;
77
+ // Every transport reconnection invalidates chat snapshots and reads a new
78
+ // latest window. An old offset never certifies the new snapshot by itself.
79
+ const work = this.command({ type: 'subscribe', topic_id: name, ...(offset == null ? {} : { offset }) }).then(reply => {
80
+ if (socket !== this.socket || generation !== this.generation) throw new Error('消息连接已变化。');
81
+ if (reply?.type !== 'subscribe' || reply.topic_id !== name) throw new Error('消息推送订阅未确认。');
82
+ if (requireRecovery && !reply.recovered) throw new Error('ChatGPT 输出历史未完整接续,请核对原消息。');
83
+ this.topics.set(name, reply.last_offset || null);
84
+ if (reply.recovered) for (const message of reply.catchups || []) this.receive(message);
85
+ });
86
+ this.topicLoads.set(name, work);
87
+ try { await work; } finally { if (this.topicLoads.get(name) === work) this.topicLoads.delete(name); }
88
+ }
89
+
90
+ async unsubscribe(name) {
91
+ if (!this.topics.delete(name) || this.socket?.readyState !== WebSocket.OPEN) return;
92
+ await this.command({ type: 'unsubscribe', topic_id: name });
93
+ }
94
+
95
+ receive(frame) {
96
+ if (frame.offset) this.topics.set(frame.topic_id, frame.offset);
97
+ this.emit('message', frame.topic_id, frame.payload);
98
+ }
99
+
100
+
101
+ close() {
102
+ this.generation++; this.ready = false; this.connecting = null;
103
+ const socket = this.socket; this.socket = null; socket?.terminate();
104
+ for (const entry of this.commands.values()) entry.reject(new Error('消息推送连接已结束。'));
105
+ this.commands.clear(); this.topics.clear(); this.topicLoads.clear();
106
+ }
107
+ }
@@ -0,0 +1,100 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { execFile } from 'node:child_process';
4
+ import protocol from '../shared/code-browser.cjs';
5
+ import { fileRange, fileRevision } from './file-transfer-range.mjs';
6
+
7
+ async function checkedPath(root, relative) {
8
+ const target = protocol.child(root, relative);
9
+ return fs.realpath(target);
10
+ }
11
+
12
+ function git(cwd, args) {
13
+ return new Promise((resolve, reject) => execFile('git', ['--no-optional-locks', '--literal-pathspecs', '-c', 'core.quotePath=false', ...args],
14
+ { cwd, encoding: 'utf8', maxBuffer: protocol.maxBytes, timeout: 15000, windowsHide: true },
15
+ (error, stdout, stderr) => {
16
+ if (error) reject(Object.assign(new Error(error.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER'
17
+ ? 'Git 输出超过预览上限(1 MiB)。' : String(stderr || error.message).trim()), { statusCode: 422 }));
18
+ else resolve(stdout);
19
+ }));
20
+ }
21
+
22
+ export async function browseCode(rpc, operation, query) {
23
+ if (operation === 'change') return protocol.change(rpc, query);
24
+ if (operation === 'changes') return protocol.changes(rpc, query);
25
+ if (operation === 'roots') return { ...await protocol.context(rpc, query), workspaceDiff: true, sizeCheckedBeforeRead: true };
26
+ const root = query.get('root');
27
+ if (typeof root !== 'string' || !path.isAbsolute(root)) protocol.fail('请输入电脑上的绝对目录路径。');
28
+ if (operation === 'workspace' || operation === 'workspace-file') {
29
+ const realRoot = await checkedPath(root, '');
30
+ const repository = (await git(realRoot, ['rev-parse', '--show-toplevel'])).trim();
31
+ const scope = path.relative(repository, realRoot).replaceAll('\\', '/') || '.';
32
+ if (scope.startsWith('..') || path.isAbsolute(scope)) protocol.fail('无法确认 Git 仓库范围。', 403);
33
+ const toRelative = name => protocol.relative(realRoot, path.resolve(repository, name));
34
+ if (operation === 'workspace-file') {
35
+ const group = query.get('group');
36
+ if (!['staged', 'unstaged'].includes(group)) protocol.fail('未知的变更来源。');
37
+ const names = [query.get('path'), query.get('oldPath')].filter(Boolean);
38
+ if (!names.length) protocol.fail('请选择变更文件。');
39
+ const paths = names.map(name => path.relative(repository, protocol.child(realRoot, name)).replaceAll('\\', '/'));
40
+ const diff = await git(repository, ['diff', ...(group === 'staged' ? ['--cached'] : []), '--no-ext-diff', '--no-textconv', '--no-color', names.length > 1 ? '--find-renames' : '--no-renames', '--', ...paths]);
41
+ return { diff, scope: group === 'staged' ? '当前工作区 · 已暂存' : '当前工作区 · 未暂存' };
42
+ }
43
+ const entries = [];
44
+ for (const group of ['unstaged', 'staged']) {
45
+ const fields = (await git(repository, ['diff', ...(group === 'staged' ? ['--cached'] : []), '--name-status', '-z', '--find-renames', '--no-ext-diff', '--no-textconv', '--', scope])).split('\0');
46
+ for (let i = 0; i < fields.length && fields[i];) {
47
+ const status = fields[i++], first = fields[i++];
48
+ const renamed = /^[RC]/.test(status), last = renamed ? fields[i++] : first;
49
+ const name = toRelative(last), oldPath = renamed ? toRelative(first) : null;
50
+ if (name == null) { if (oldPath != null) entries.push({ path: oldPath, oldPath: null, status: 'D', group }); continue; }
51
+ entries.push({ path: name, oldPath, status: renamed && oldPath == null ? 'A' : status, group });
52
+ }
53
+ }
54
+ for (const name of (await git(repository, ['ls-files', '--others', '--exclude-standard', '-z', '--', scope])).split('\0').filter(Boolean)) {
55
+ const relative = toRelative(name);
56
+ if (relative != null) entries.push({ path: relative, status: '?', group: 'untracked' });
57
+ }
58
+ if (entries.length > protocol.maxEntries) protocol.fail('变更文件超过 4000 项,暂不支持展示。', 413);
59
+ return { root, entries, scope: '当前工作区快照 · 非本次任务归属' };
60
+ }
61
+ const relative = query.get('path') || '';
62
+ const target = await checkedPath(root, relative);
63
+ if ((operation === 'image' || operation === 'binary')) {
64
+ const handle = await fs.open(target, 'r');
65
+ try {
66
+ const before = await handle.stat();
67
+ if (!before.isFile()) protocol.fail('请选择普通文件。', 415);
68
+ if (before.size > protocol.maxFileBytes) protocol.fail('文件超过预览上限(20 MiB)。', 413);
69
+ if (!before.size) protocol.fail('文件为空。', 415);
70
+ const revision = fileRevision(before);
71
+ const { offset, length } = fileRange(query, before.size, revision);
72
+ const header = Buffer.alloc(12);
73
+ await handle.read(header, 0, header.length, 0);
74
+ const mimeType = operation === 'binary' ? 'application/octet-stream' : protocol.imageMime(header);
75
+ const data = Buffer.alloc(length);
76
+ const { bytesRead } = await handle.read(data, 0, data.length, offset);
77
+ const real = await checkedPath(root, relative), after = await handle.stat(), onDisk = await fs.stat(real);
78
+ if (real !== target || bytesRead !== data.length || after.mtimeMs !== before.mtimeMs || after.ctimeMs !== before.ctimeMs || after.size !== before.size || onDisk.ino !== before.ino || onDisk.dev !== before.dev || onDisk.mtimeMs !== before.mtimeMs || onDisk.size !== before.size) protocol.fail('读取期间文件发生变化,请重新打开。', 409);
79
+ return { name: path.basename(target), size: before.size, offset, revision, mimeType, data };
80
+ } finally { await handle.close(); }
81
+ }
82
+ if (operation === 'directory') {
83
+ const entries = await fs.readdir(target, { withFileTypes: true });
84
+ const result = { entries: entries.map(entry => ({ fileName: entry.name, isDirectory: entry.isDirectory(), isFile: entry.isFile() })) };
85
+ await checkedPath(root, relative);
86
+ return protocol.directory(result);
87
+ }
88
+ if (operation === 'file') {
89
+ const before = await fs.stat(target);
90
+ if (!before.isFile()) protocol.fail('请选择普通文件。', 415);
91
+ if (before.size > protocol.maxBytes) protocol.fail('文件超过只读预览上限(1 MiB)。', 413);
92
+ const result = { dataBase64: (await fs.readFile(target)).toString('base64') };
93
+ const real = await checkedPath(root, relative), after = await fs.stat(real);
94
+ if (real !== target || before.size !== after.size || before.mtimeMs !== after.mtimeMs || before.ino !== after.ino) {
95
+ protocol.fail('读取期间文件发生变化,请刷新。', 409);
96
+ }
97
+ return { ...protocol.fromBase64(result.dataBase64), modifiedAtMs: after.mtimeMs };
98
+ }
99
+ protocol.fail('未知的代码浏览操作。', 404);
100
+ }
@@ -1,51 +1,62 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { setTimeout as delay } from 'node:timers/promises';
4
- import { readRecord, writeRecord } from './service-lifecycle.mjs';
5
- import { ManagedAppServer, managedAppServerUrl as sharedUrl, managedPortAvailable as portAvailable } from './managed-app-server.mjs';
4
+ import { readRecord, lifecycle } from './service-lifecycle.mjs';
5
+ import * as serviceHost from './platform/service-host.mjs';
6
+ import { managedPortAvailable as portAvailable } from './managed-app-server.mjs';
7
+ import { readManagedEndpoint } from './managed-endpoint.mjs';
6
8
  export { portAvailable };
7
- export async function launchDesktop(mode, { stateRoot, host, environment = process.env, available = portAvailable, wait = delay, timeout = 30000, recoveryId, progress = () => {} }) {
8
- if (!['shared', 'ordinary'].includes(mode)) throw new Error('无效的 Desktop 启动模式。');
9
+ function desktopEnvironment(stateRoot, environment) {
10
+ const childEnv = { ...environment };
11
+ for (const key of ['CODEX_APP_SERVER_WS_URL', 'CODEX_APP_SERVER_FORCE_CLI', 'CODEX_APP_TOOLS_PIPE_PATH']) delete childEnv[key];
12
+ const runtime = readRecord(path.join(stateRoot, 'codex-runtime.json'));
13
+ if (runtime?.codexHome) childEnv.CODEX_HOME = runtime.codexHome;
14
+ childEnv.CODEX_APP_SERVER_WS_URL = readManagedEndpoint(stateRoot);
15
+ return childEnv;
16
+ }
17
+
18
+ // Opening the optional UI does not start, restart or supervise the kernel.
19
+ export async function startDesktop({ stateRoot, host, environment = process.env, restart = false }) {
20
+ const info = await host.inspect();
21
+ if (!info.desktop) throw new Error('未安装 Codex 桌面端。');
22
+ if (info.running && !restart) return { status: 'running', message: 'Codex 桌面端已启动。' };
23
+ if (info.running) await host.closeDesktop(info.desktop);
24
+ await host.startDesktop(info.desktop, desktopEnvironment(stateRoot, environment));
25
+ return { status: 'accepted', message: restart ? '已提交 Codex 桌面端重启请求。' : '已提交 Codex 桌面端启动请求。' };
26
+ }
27
+
28
+ export async function launchDesktop({ stateRoot, host, environment = process.env, wait = delay, timeout = 30000, recoveryId, progress = () => {}, service = lifecycle({ stateRoot, host: serviceHost }) }) {
9
29
  fs.mkdirSync(stateRoot, { recursive: true });
10
30
  const recovery = readRecord(path.join(stateRoot, 'shared-recovery.lock'));
11
- if (recovery && recovery.operationId !== recoveryId) throw new Error('完整控制正在启动,请先查看 shared-recovery-status。');
12
- const lock = path.join(stateRoot, 'desktop-launch.lock');
31
+ if (recovery && recovery.operationId !== recoveryId) throw new Error('Codex 内核正在启动,请用 relax doctor 查看恢复状态。');
32
+ const lock = path.join(stateRoot, 'desktop-launch.lock');
13
33
  let descriptor;
14
- let managed;
15
- try { descriptor = fs.openSync(lock, 'wx'); }
16
- catch (error) {
17
- if (error.code === 'EEXIST') throw new Error('另一个 Desktop 启动操作正在进行;若上次异常退出,请确认没有启动器运行后移除 desktop-launch.lock。');
18
- throw error;
19
- }
20
- try {
21
- const info = await host.inspect();
22
- const connected = await host.sharedServiceUrl();
23
- if (info.running) {
24
- if ((mode === 'shared') === Boolean(connected)) {
25
- writeRecord(path.join(stateRoot, 'execution-mode.json'), { mode });
26
- return { reused: true, mode };
27
- }
28
- throw new Error('请先保存任务并完全退出 Codex Desktop,再切换模式;不会自动结束正在运行的任务。');
29
- }
30
- const childEnv = { ...environment };
31
- for (const key of ['CODEX_APP_SERVER_WS_URL', 'CODEX_APP_SERVER_FORCE_CLI', 'CODEX_APP_TOOLS_PIPE_PATH']) delete childEnv[key];
32
- if (mode === 'shared') {
33
- progress('starting-app-server');
34
- managed = new ManagedAppServer({ stateRoot, host, environment, available, wait, timeout });
35
- if (!await managed.start()) throw new Error(managed.snapshot().error || '受管 app-server 未就绪。');
36
- childEnv.CODEX_APP_SERVER_WS_URL = sharedUrl;
37
- }
38
- // Ordinary Desktop must not terminate a shared server that may still be executing tasks.
34
+ try { descriptor = fs.openSync(lock, 'wx'); }
35
+ catch (error) {
36
+ if (error.code === 'EEXIST') throw new Error('另一个 Desktop 启动操作正在进行;若上次异常退出,请确认没有启动器运行后移除 desktop-launch.lock。');
37
+ throw error;
38
+ }
39
+ try {
40
+ const info = await host.inspect();
41
+ if (!info.desktop) throw new Error('未安装 Codex Desktop,请使用 relax start 启动工作站。');
42
+ const connected = await host.sharedServiceUrl();
43
+ if (info.running) {
44
+ if (connected) return { reused: true };
45
+ throw new Error('请先保存任务并完全退出 Codex Desktop,再接入 Codex 内核;不会自动结束正在运行的任务。');
46
+ }
47
+ progress('starting-app-server');
48
+ const health = await service.status();
49
+ if (!health.running || !health.managedAppServer?.ready) throw new Error(health.managedAppServer?.error || '工作站 Codex 内核未就绪。');
50
+ const childEnv = desktopEnvironment(stateRoot, environment);
39
51
  progress('starting-desktop');
40
- await host.start(info.desktop, [], childEnv, []);
41
- const deadline = Date.now() + timeout;
42
- while (true) {
43
- const ready = mode === 'shared' ? await host.sharedServiceUrl() : (await host.inspect()).running;
44
- if (ready) break;
45
- if (Date.now() >= deadline) throw new Error('Desktop 尚未按所选模式就绪,未启动 Bridge。请查看 Desktop 窗口后重试。');
46
- await wait(500);
47
- }
48
- writeRecord(path.join(stateRoot, 'execution-mode.json'), { mode });
49
- return { reused: false, mode };
50
- } finally { managed?.close(); fs.closeSync(descriptor); fs.rmSync(lock, { force: true }); }
52
+ await host.startDesktop(info.desktop, childEnv);
53
+ const deadline = Date.now() + timeout;
54
+ while (true) {
55
+ const ready = await host.desktopReady();
56
+ if (ready) break;
57
+ if (Date.now() >= deadline) throw new Error('Desktop 尚未接入 Codex 内核。请查看 Desktop 窗口后重试。');
58
+ await wait(500);
59
+ }
60
+ return { reused: false };
61
+ } finally { fs.closeSync(descriptor); fs.rmSync(lock, { force: true }); }
51
62
  }
@@ -0,0 +1,99 @@
1
+ const itemTime = item => item.dotsReceipt?.sentAt ? Date.parse(item.dotsReceipt.sentAt)
2
+ : item.startedAtMs ?? item.receivedAtMs;
3
+ const terminal = status => ['resolved', 'expired'].includes(status);
4
+
5
+ // Approval records have their own official room source. Keep them with the
6
+ // account-scoped hosted cache, then place them in the chat's observed positions.
7
+ export class DotsApprovalTimeline {
8
+ constructor(server) { this.server = server; this.states = new Map(); }
9
+
10
+ async state(threadId) {
11
+ const scope = this.server.historyScope(threadId);
12
+ if (!scope) throw new Error('读取点点审批历史需要账号身份。');
13
+ let state = this.states.get(scope);
14
+ if (!state) {
15
+ state = { scope, threadId, epoch: this.server.epoch, records: new Map() };
16
+ state.ready = (async () => {
17
+ const saved = await this.server.historyCache?.get(scope, 'approval-records');
18
+ for (const record of saved?.data || []) {
19
+ // A display record never reactivates an old pending request.
20
+ state.records.set(this.key(record), terminal(record.status) ? record : { ...record, status: 'expired' });
21
+ }
22
+ })();
23
+ this.states.set(scope, state);
24
+ }
25
+ await state.ready;
26
+ this.check(threadId, state);
27
+ return state;
28
+ }
29
+
30
+ check(threadId, state) {
31
+ if (state.scope !== this.server.historyScope(threadId) || state.epoch !== this.server.epoch) throw new Error('点点审批历史的账号连接已变化。');
32
+ }
33
+
34
+ key(item) { return JSON.stringify([typeof item.requestId, item.requestId]); }
35
+
36
+ merge(state, incoming) {
37
+ let changed = false;
38
+ for (const item of incoming) {
39
+ const key = this.key(item), previous = state.records.get(key);
40
+ const merged = { ...previous, ...item, id: previous?.id || item.id,
41
+ receivedAtMs: previous?.receivedAtMs ?? item.receivedAtMs,
42
+ ...(previous?.result && item.result == null ? { result: previous.result } : {}),
43
+ ...(previous?.afterItemId ? { afterItemId: previous.afterItemId } : {}) };
44
+ if (JSON.stringify(previous) !== JSON.stringify(merged)) { state.records.set(key, merged); changed = true; }
45
+ }
46
+ return changed;
47
+ }
48
+
49
+ save(state) {
50
+ return this.server.historyCache?.put(state.scope, 'approval-records', { data: [...state.records.values()] });
51
+ }
52
+
53
+ targets(sourceThreadId) {
54
+ return [...this.states.values()].filter(state => state.scope === this.server.historyScope(state.threadId)
55
+ && [...state.records.values()].some(record => record.params.threadId === sourceThreadId)).map(state => state.threadId);
56
+ }
57
+
58
+ async observe(threadId, records, turns) {
59
+ const state = await this.state(threadId);
60
+ const incoming = records.map(record => {
61
+ const turn = turns?.find(turn => turn.id === record.turnId);
62
+ const afterItemId = turn?.items.filter(item => item.type !== 'approval').at(-1)?.id;
63
+ return { ...record, ...(afterItemId ? { afterItemId } : {}) };
64
+ });
65
+ if (this.merge(state, incoming)) await this.save(state);
66
+ this.check(threadId, state);
67
+ }
68
+
69
+ overlay(threadId, turns, range = {}) {
70
+ const state = this.states.get(this.server.historyScope(threadId));
71
+ if (!state) return turns;
72
+ const ids = new Set([...state.records.values()].map(item => item.id));
73
+ const result = turns.map(turn => ({ ...turn, items: turn.items.filter(item => item.type !== 'approval' || !ids.has(item.id)) }));
74
+ for (const approval of [...state.records.values()].sort((a, b) => a.receivedAtMs - b.receivedAtMs)) {
75
+ if (Number.isFinite(range.fromMs) && approval.receivedAtMs < range.fromMs
76
+ || Number.isFinite(range.toMs) && approval.receivedAtMs > range.toMs) continue;
77
+ let turn = result.find(turn => turn.id === approval.roomMessageId || turn.id === approval.turnId);
78
+ if (!turn) {
79
+ if (!Number.isFinite(range.fromMs)) continue;
80
+ const positions = result.flatMap(turn => turn.items.map(item => ({ turn, item, time: itemTime(item) })))
81
+ .filter(position => Number.isFinite(position.time));
82
+ turn = positions.filter(position => position.time <= approval.receivedAtMs).at(-1)?.turn || positions[0]?.turn;
83
+ }
84
+ if (!turn) continue;
85
+ const after = turn.items.findIndex(item => item.id === approval.afterItemId);
86
+ if (after >= 0) {
87
+ let index = after + 1;
88
+ while (turn.items[index]?.type === 'approval' && turn.items[index].receivedAtMs <= approval.receivedAtMs) index++;
89
+ turn.items.splice(index, 0, approval);
90
+ } else {
91
+ const next = turn.items.findIndex(item => Number.isFinite(itemTime(item)) && itemTime(item) > approval.receivedAtMs);
92
+ turn.items.splice(next < 0 ? turn.items.length : next, 0, approval);
93
+ }
94
+ }
95
+ return result;
96
+ }
97
+
98
+ clear() { this.states.clear(); }
99
+ }
@@ -0,0 +1,42 @@
1
+ import sharp from 'sharp';
2
+
3
+ // Resolve Desktop's saved snapshot on the workstation. Signed URLs never go to the phone.
4
+ export function createDotsAvatarReader(localServer) {
5
+ const cache = new Map();
6
+ return async (profile, identity) => {
7
+ if (!profile.avatarFileId) return '';
8
+ const key = JSON.stringify([identity.accountId, identity.userId, profile.avatarFileId]);
9
+ if (!cache.has(key)) {
10
+ const work = (async () => {
11
+ const auth = await localServer.request('getAuthStatus', { includeToken: true, refreshToken: false });
12
+ const principal = JSON.parse(Buffer.from(auth.authToken.split('.')[1], 'base64url'))['https://api.openai.com/auth'];
13
+ if (principal?.chatgpt_account_id !== identity.accountId || principal.chatgpt_user_id !== identity.userId) {
14
+ throw new Error('头像账号已变化,请刷新对话。');
15
+ }
16
+ const response = await fetch(`https://chatgpt.com/backend-api/files/download/${encodeURIComponent(profile.avatarFileId)}?download_intent=false&inline=true`, {
17
+ headers: { Authorization: `Bearer ${auth.authToken}`, 'ChatGPT-Account-Id': identity.accountId },
18
+ redirect: 'error', signal: AbortSignal.timeout(15000),
19
+ });
20
+ if (!response.ok) { await response.body?.cancel(); throw new Error(`点点头像资料读取失败(${response.status})`); }
21
+ const { download_url: downloadUrl } = await response.json();
22
+ const url = new URL(downloadUrl);
23
+ const authenticated = url.origin === 'https://chatgpt.com' && url.pathname === '/backend-api/estuary/content';
24
+ if (url.protocol !== 'https:' || !(authenticated || url.hostname.endsWith('.oaiusercontent.com'))) throw new Error('点点头像下载地址无效。');
25
+ const image = await fetch(url, { redirect: 'error', signal: AbortSignal.timeout(15000),
26
+ ...(authenticated ? { headers: { Authorization: `Bearer ${auth.authToken}`, 'ChatGPT-Account-Id': identity.accountId } } : {}) });
27
+ if (!image.ok) { await image.body?.cancel(); throw new Error(`点点头像下载失败(${image.status})`); }
28
+ const chunks = []; let size = 0;
29
+ for await (const chunk of image.body) {
30
+ size += chunk.length;
31
+ if (size > 4 * 1024 * 1024) throw new Error('点点头像超过 4 MiB。');
32
+ chunks.push(chunk);
33
+ }
34
+ const thumbnail = await sharp(Buffer.concat(chunks)).resize(96, 96, { fit: 'inside', withoutEnlargement: true }).webp().toBuffer();
35
+ return `data:image/webp;base64,${thumbnail.toString('base64')}`;
36
+ })();
37
+ cache.set(key, work);
38
+ work.catch(() => { if (cache.get(key) === work) cache.delete(key); });
39
+ }
40
+ return cache.get(key);
41
+ };
42
+ }
@@ -0,0 +1,50 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { dotsImageReference } from './dots-message-images.mjs';
3
+
4
+ const nonempty = value => typeof value === 'string' && value.trim().length > 0;
5
+
6
+ export function dotsChatRevision(turns) {
7
+ const latest = dotsChatTailRevision(turns);
8
+ const message = dotsChatMessageRevision(turns);
9
+ // A message can keep streaming while a later agent action is already visible.
10
+ return !latest || latest === message ? latest
11
+ : createHash('sha256').update(JSON.stringify([latest, message])).digest('hex');
12
+ }
13
+
14
+ // A bounded disk-head probe compares the same last visible item on both sides.
15
+ // The full transcript revision also tracks an earlier streaming message.
16
+ export function dotsChatTailRevision(turns) {
17
+ return chatItemRevision(turns.at(-1)?.items.at(-1));
18
+ }
19
+
20
+ export function dotsChatMessageRevision(turns) {
21
+ for (let turnIndex = turns.length - 1; turnIndex >= 0; turnIndex--) {
22
+ const items = turns[turnIndex].items;
23
+ for (let itemIndex = items.length - 1; itemIndex >= 0; itemIndex--) {
24
+ const item = items[itemIndex];
25
+ if (item.type === 'userMessage' || item.type === 'agentMessage') return chatItemRevision(item);
26
+ }
27
+ }
28
+ // A recent window containing only agent actions cannot acknowledge a chat message.
29
+ return undefined;
30
+ }
31
+
32
+ function chatItemRevision(item) {
33
+ if (!item) return '';
34
+ const content = item.type === 'userMessage' ? item.content.map(part => {
35
+ const reference = dotsImageReference(part);
36
+ if (!reference?.url) return part;
37
+ // Renewing an official storage signature does not create a new message.
38
+ const url = new URL(reference.url);
39
+ return { ...part, url: url.origin + url.pathname };
40
+ }) : item.type === 'subAgentActivity' ? [item.kind, item.agentThreadId, item.agentPath]
41
+ : [item.text || '', item.attachments || []];
42
+ // Identity and displayed content survive reconnects; internal work does not affect this marker.
43
+ return createHash('sha256').update(JSON.stringify([item.id, item.type, content])).digest('hex');
44
+ }
45
+ // Execution events remain separate from room user/agent messages.
46
+ export function projectDotsChatItem(item) {
47
+ if (item?.type !== 'subAgentActivity' || !nonempty(item.id) || !nonempty(item.agentThreadId)
48
+ || !['started', 'interacted', 'completed', 'interrupted'].includes(item.kind)) return null;
49
+ return { type: item.type, id: item.id, kind: item.kind, agentThreadId: item.agentThreadId, agentPath: item.agentPath || '' };
50
+ }