@walkhi/code-relax 0.1.0-beta.1

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 (713) hide show
  1. package/README.md +83 -0
  2. package/dist/bin/codex-remote.mjs +262 -0
  3. package/dist/bin/self-relay-demo.mjs +33 -0
  4. package/dist/bin/self-relay-server.mjs +50 -0
  5. package/dist/get-lan-networks.ps1 +40 -0
  6. package/dist/get-shared-service-url.ps1 +6 -0
  7. package/dist/shared/app-server-events.cjs +266 -0
  8. package/dist/shared/p2p-diagnostics.cjs +28 -0
  9. package/dist/shared/server-requests.cjs +67 -0
  10. package/dist/shared/timeline-sync.cjs +67 -0
  11. package/dist/skills/code-relax/SKILL.md +17 -0
  12. package/dist/src/app-server-client.mjs +468 -0
  13. package/dist/src/app-server-tasks.mjs +355 -0
  14. package/dist/src/background-process.mjs +18 -0
  15. package/dist/src/debug-ui.mjs +131 -0
  16. package/dist/src/desktop-launcher.mjs +51 -0
  17. package/dist/src/execution-health.mjs +26 -0
  18. package/dist/src/lan-socket-server.mjs +103 -0
  19. package/dist/src/managed-app-server.mjs +207 -0
  20. package/dist/src/message-images.mjs +27 -0
  21. package/dist/src/onboarding.mjs +31 -0
  22. package/dist/src/platform/README.md +12 -0
  23. package/dist/src/platform/linux/README.md +3 -0
  24. package/dist/src/platform/macos/README.md +3 -0
  25. package/dist/src/platform/windows/IsolatedProcess.cs +75 -0
  26. package/dist/src/platform/windows/background-process.mjs +25 -0
  27. package/dist/src/platform/windows/credential-store.mjs +27 -0
  28. package/dist/src/platform/windows/credential-store.ps1 +49 -0
  29. package/dist/src/platform/windows/desktop-host.mjs +38 -0
  30. package/dist/src/platform/windows/desktop-info.ps1 +16 -0
  31. package/dist/src/platform/windows/desktop-monitor.mjs +34 -0
  32. package/dist/src/platform/windows/desktop-shortcut-run.ps1 +5 -0
  33. package/dist/src/platform/windows/desktop-shortcuts.ps1 +28 -0
  34. package/dist/src/platform/windows/desktop-tools.mjs +48 -0
  35. package/dist/src/platform/windows/launch-worker.ps1 +13 -0
  36. package/dist/src/platform/windows/network-info.mjs +34 -0
  37. package/dist/src/platform/windows/resident-start.ps1 +7 -0
  38. package/dist/src/platform/windows/resident-startup.ps1 +27 -0
  39. package/dist/src/platform/windows/resolve-state-root.ps1 +14 -0
  40. package/dist/src/platform/windows/runtime-paths.mjs +20 -0
  41. package/dist/src/platform/windows/service-host.mjs +43 -0
  42. package/dist/src/platform/windows/start-hidden-console.ps1 +39 -0
  43. package/dist/src/platform/windows/stop-desktop.ps1 +19 -0
  44. package/dist/src/platform/windows/user-environment.mjs +50 -0
  45. package/dist/src/platform/windows/user-environment.ps1 +41 -0
  46. package/dist/src/self-relay/client.mjs +59 -0
  47. package/dist/src/self-relay/connector.mjs +147 -0
  48. package/dist/src/self-relay/debug-allowlist.mjs +33 -0
  49. package/dist/src/self-relay/demo.mjs +38 -0
  50. package/dist/src/self-relay/device-store.mjs +84 -0
  51. package/dist/src/self-relay/lan-authorizations.mjs +29 -0
  52. package/dist/src/self-relay/lifecycle.mjs +281 -0
  53. package/dist/src/self-relay/p2p-probe.mjs +83 -0
  54. package/dist/src/self-relay/server.mjs +340 -0
  55. package/dist/src/self-relay/windows-route-helper.mjs +75 -0
  56. package/dist/src/self-relay/wire.mjs +36 -0
  57. package/dist/src/server.mjs +2086 -0
  58. package/dist/src/service-control.mjs +72 -0
  59. package/dist/src/service-doctor.mjs +63 -0
  60. package/dist/src/service-health.mjs +33 -0
  61. package/dist/src/service-install.mjs +91 -0
  62. package/dist/src/service-lifecycle.mjs +130 -0
  63. package/dist/src/service-restart.mjs +48 -0
  64. package/dist/src/shared-app-server.mjs +356 -0
  65. package/dist/src/shared-catalog.mjs +60 -0
  66. package/dist/src/shared-recovery.mjs +142 -0
  67. package/dist/src/shared-thread-stream.mjs +80 -0
  68. package/dist/src/skill-install.mjs +64 -0
  69. package/dist/src/thread-catalog.mjs +42 -0
  70. package/dist/src/thread-title-generation.mjs +150 -0
  71. package/dist/tools/find-desktop-pipe.mjs +10 -0
  72. package/dist/tools/rtc-route-helper.ps1 +99 -0
  73. package/dist/tools/start-rtc-route-helper.ps1 +15 -0
  74. package/dist/web/approval-ui.js +188 -0
  75. package/dist/web/capabilities.js +57 -0
  76. package/dist/web/chat-transport.js +196 -0
  77. package/dist/web/chat.css +736 -0
  78. package/dist/web/chat.js +5149 -0
  79. package/dist/web/client-platform.js +11 -0
  80. package/dist/web/harmony-platform.js +51 -0
  81. package/dist/web/highlight-powershell.min.js +39 -0
  82. package/dist/web/highlight.min.js +1262 -0
  83. package/dist/web/history-cache.js +146 -0
  84. package/dist/web/index.html +222 -0
  85. package/dist/web/lan-session.js +122 -0
  86. package/dist/web/p2p-diagnostics.js +28 -0
  87. package/dist/web/p2p-probe.js +83 -0
  88. package/dist/web/resources.json +1 -0
  89. package/dist/web/self-relay-session.js +119 -0
  90. package/dist/web/server-requests.js +67 -0
  91. package/dist/web/timeline-sync.js +67 -0
  92. package/dist/web/vendor/README.md +14 -0
  93. package/dist/web/vendor/highlight-powershell.min.js +39 -0
  94. package/dist/web/vendor/highlight.LICENSE.txt +29 -0
  95. package/dist/web/vendor/highlight.min.js +1262 -0
  96. package/dist/web/vendor/markdown-it.LICENSE.txt +22 -0
  97. package/dist/web/vendor/markdown-it.umd.min.js +14 -0
  98. package/node_modules/@img/colour/LICENSE.md +82 -0
  99. package/node_modules/@img/colour/README.md +15 -0
  100. package/node_modules/@img/colour/color.cjs +1596 -0
  101. package/node_modules/@img/colour/index.cjs +1 -0
  102. package/node_modules/@img/colour/index.d.ts +929 -0
  103. package/node_modules/@img/colour/package.json +58 -0
  104. package/node_modules/@img/sharp-win32-x64/LICENSE +191 -0
  105. package/node_modules/@img/sharp-win32-x64/README.md +59 -0
  106. package/node_modules/@img/sharp-win32-x64/index.cjs +1 -0
  107. package/node_modules/@img/sharp-win32-x64/lib/libvips-42.dll +0 -0
  108. package/node_modules/@img/sharp-win32-x64/lib/libvips-cpp-8.18.6.dll +0 -0
  109. package/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64-0.35.4.node +0 -0
  110. package/node_modules/@img/sharp-win32-x64/package.json +40 -0
  111. package/node_modules/@img/sharp-win32-x64/versions.json +30 -0
  112. package/node_modules/@node-datachannel/win32-x64-msvc/node_datachannel.node +0 -0
  113. package/node_modules/@node-datachannel/win32-x64-msvc/package.json +20 -0
  114. package/node_modules/ansi-regex/index.d.ts +37 -0
  115. package/node_modules/ansi-regex/index.js +10 -0
  116. package/node_modules/ansi-regex/license +9 -0
  117. package/node_modules/ansi-regex/package.json +55 -0
  118. package/node_modules/ansi-regex/readme.md +78 -0
  119. package/node_modules/ansi-styles/index.d.ts +345 -0
  120. package/node_modules/ansi-styles/index.js +163 -0
  121. package/node_modules/ansi-styles/license +9 -0
  122. package/node_modules/ansi-styles/package.json +56 -0
  123. package/node_modules/ansi-styles/readme.md +152 -0
  124. package/node_modules/camelcase/index.d.ts +63 -0
  125. package/node_modules/camelcase/index.js +76 -0
  126. package/node_modules/camelcase/license +9 -0
  127. package/node_modules/camelcase/package.json +43 -0
  128. package/node_modules/camelcase/readme.md +99 -0
  129. package/node_modules/cliui/CHANGELOG.md +76 -0
  130. package/node_modules/cliui/LICENSE.txt +14 -0
  131. package/node_modules/cliui/README.md +115 -0
  132. package/node_modules/cliui/index.js +354 -0
  133. package/node_modules/cliui/package.json +65 -0
  134. package/node_modules/color-convert/CHANGELOG.md +54 -0
  135. package/node_modules/color-convert/LICENSE +21 -0
  136. package/node_modules/color-convert/README.md +68 -0
  137. package/node_modules/color-convert/conversions.js +839 -0
  138. package/node_modules/color-convert/index.js +81 -0
  139. package/node_modules/color-convert/package.json +48 -0
  140. package/node_modules/color-convert/route.js +97 -0
  141. package/node_modules/color-name/LICENSE +8 -0
  142. package/node_modules/color-name/README.md +11 -0
  143. package/node_modules/color-name/index.js +152 -0
  144. package/node_modules/color-name/package.json +28 -0
  145. package/node_modules/decamelize/index.js +13 -0
  146. package/node_modules/decamelize/license +21 -0
  147. package/node_modules/decamelize/package.json +38 -0
  148. package/node_modules/decamelize/readme.md +48 -0
  149. package/node_modules/detect-libc/LICENSE +201 -0
  150. package/node_modules/detect-libc/README.md +163 -0
  151. package/node_modules/detect-libc/index.d.ts +14 -0
  152. package/node_modules/detect-libc/lib/detect-libc.js +313 -0
  153. package/node_modules/detect-libc/lib/elf.js +39 -0
  154. package/node_modules/detect-libc/lib/filesystem.js +51 -0
  155. package/node_modules/detect-libc/lib/process.js +24 -0
  156. package/node_modules/detect-libc/package.json +44 -0
  157. package/node_modules/dijkstrajs/.travis.yml +4 -0
  158. package/node_modules/dijkstrajs/CONTRIBUTING.md +8 -0
  159. package/node_modules/dijkstrajs/LICENSE.md +19 -0
  160. package/node_modules/dijkstrajs/README.md +18 -0
  161. package/node_modules/dijkstrajs/dijkstra.js +165 -0
  162. package/node_modules/dijkstrajs/package.json +60 -0
  163. package/node_modules/dijkstrajs/test/dijkstra.test.js +96 -0
  164. package/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
  165. package/node_modules/emoji-regex/README.md +73 -0
  166. package/node_modules/emoji-regex/es2015/index.js +6 -0
  167. package/node_modules/emoji-regex/es2015/text.js +6 -0
  168. package/node_modules/emoji-regex/index.d.ts +23 -0
  169. package/node_modules/emoji-regex/index.js +6 -0
  170. package/node_modules/emoji-regex/package.json +50 -0
  171. package/node_modules/emoji-regex/text.js +6 -0
  172. package/node_modules/find-up/index.d.ts +137 -0
  173. package/node_modules/find-up/index.js +89 -0
  174. package/node_modules/find-up/license +9 -0
  175. package/node_modules/find-up/package.json +53 -0
  176. package/node_modules/find-up/readme.md +156 -0
  177. package/node_modules/get-caller-file/LICENSE.md +6 -0
  178. package/node_modules/get-caller-file/README.md +41 -0
  179. package/node_modules/get-caller-file/index.d.ts +2 -0
  180. package/node_modules/get-caller-file/index.js +22 -0
  181. package/node_modules/get-caller-file/index.js.map +1 -0
  182. package/node_modules/get-caller-file/package.json +42 -0
  183. package/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
  184. package/node_modules/is-fullwidth-code-point/index.js +50 -0
  185. package/node_modules/is-fullwidth-code-point/license +9 -0
  186. package/node_modules/is-fullwidth-code-point/package.json +42 -0
  187. package/node_modules/is-fullwidth-code-point/readme.md +39 -0
  188. package/node_modules/locate-path/index.d.ts +83 -0
  189. package/node_modules/locate-path/index.js +65 -0
  190. package/node_modules/locate-path/license +9 -0
  191. package/node_modules/locate-path/package.json +45 -0
  192. package/node_modules/locate-path/readme.md +122 -0
  193. package/node_modules/node-datachannel/.clang-format +17 -0
  194. package/node_modules/node-datachannel/.editorconfig +12 -0
  195. package/node_modules/node-datachannel/.eslintignore +8 -0
  196. package/node_modules/node-datachannel/.eslintrc.json +27 -0
  197. package/node_modules/node-datachannel/.gitmodules +3 -0
  198. package/node_modules/node-datachannel/.prettierignore +7 -0
  199. package/node_modules/node-datachannel/.prettierrc +13 -0
  200. package/node_modules/node-datachannel/API.md +247 -0
  201. package/node_modules/node-datachannel/BULDING.md +26 -0
  202. package/node_modules/node-datachannel/CMakeLists.txt +153 -0
  203. package/node_modules/node-datachannel/LICENSE +373 -0
  204. package/node_modules/node-datachannel/README.md +129 -0
  205. package/node_modules/node-datachannel/dist/cjs/index.cjs +11 -0
  206. package/node_modules/node-datachannel/dist/cjs/index.cjs.map +1 -0
  207. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs +101 -0
  208. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs.map +1 -0
  209. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs +91 -0
  210. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs.map +1 -0
  211. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs +94 -0
  212. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs.map +1 -0
  213. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs +45 -0
  214. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs.map +1 -0
  215. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs +8 -0
  216. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs.map +1 -0
  217. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs +86 -0
  218. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs.map +1 -0
  219. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs +34 -0
  220. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs.map +1 -0
  221. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs +34 -0
  222. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs.map +1 -0
  223. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs +214 -0
  224. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs.map +1 -0
  225. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs +53 -0
  226. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +1 -0
  227. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs +83 -0
  228. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs.map +1 -0
  229. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs +132 -0
  230. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs.map +1 -0
  231. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs +94 -0
  232. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs.map +1 -0
  233. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs +434 -0
  234. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs.map +1 -0
  235. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs +59 -0
  236. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs.map +1 -0
  237. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs +45 -0
  238. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs.map +1 -0
  239. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs +42 -0
  240. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs.map +1 -0
  241. package/node_modules/node-datachannel/dist/esm/index.mjs +8 -0
  242. package/node_modules/node-datachannel/dist/esm/index.mjs.map +1 -0
  243. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs +78 -0
  244. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs.map +1 -0
  245. package/node_modules/node-datachannel/dist/esm/lib/index.mjs +64 -0
  246. package/node_modules/node-datachannel/dist/esm/lib/index.mjs.map +1 -0
  247. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs +78 -0
  248. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs.map +1 -0
  249. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs +43 -0
  250. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs.map +1 -0
  251. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs +6 -0
  252. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs.map +1 -0
  253. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs +82 -0
  254. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs.map +1 -0
  255. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs +28 -0
  256. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs.map +1 -0
  257. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs +30 -0
  258. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs.map +1 -0
  259. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs +210 -0
  260. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs.map +1 -0
  261. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs +49 -0
  262. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs.map +1 -0
  263. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs +79 -0
  264. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs.map +1 -0
  265. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs +128 -0
  266. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs.map +1 -0
  267. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs +89 -0
  268. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs.map +1 -0
  269. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs +430 -0
  270. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs.map +1 -0
  271. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs +55 -0
  272. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs.map +1 -0
  273. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs +41 -0
  274. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs.map +1 -0
  275. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs +27 -0
  276. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs.map +1 -0
  277. package/node_modules/node-datachannel/dist/types/lib/datachannel-stream.d.ts +24 -0
  278. package/node_modules/node-datachannel/dist/types/lib/index.d.ts +241 -0
  279. package/node_modules/node-datachannel/dist/types/lib/types.d.ts +119 -0
  280. package/node_modules/node-datachannel/dist/types/lib/websocket-server.d.ts +13 -0
  281. package/node_modules/node-datachannel/dist/types/lib/websocket.d.ts +25 -0
  282. package/node_modules/node-datachannel/dist/types/polyfill/Events.d.ts +15 -0
  283. package/node_modules/node-datachannel/dist/types/polyfill/RTCCertificate.d.ts +9 -0
  284. package/node_modules/node-datachannel/dist/types/polyfill/RTCDataChannel.d.ts +29 -0
  285. package/node_modules/node-datachannel/dist/types/polyfill/RTCDtlsTransport.d.ts +15 -0
  286. package/node_modules/node-datachannel/dist/types/polyfill/RTCError.d.ts +17 -0
  287. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceCandidate.d.ts +21 -0
  288. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceTransport.d.ts +30 -0
  289. package/node_modules/node-datachannel/dist/types/polyfill/RTCPeerConnection.d.ts +64 -0
  290. package/node_modules/node-datachannel/dist/types/polyfill/RTCSctpTransport.d.ts +15 -0
  291. package/node_modules/node-datachannel/dist/types/polyfill/RTCSessionDescription.d.ts +10 -0
  292. package/node_modules/node-datachannel/dist/types/polyfill/index.d.ts +26 -0
  293. package/node_modules/node-datachannel/jest.config.ts +14 -0
  294. package/node_modules/node-datachannel/package.json +133 -0
  295. package/node_modules/node-datachannel/rollup.config.mjs +67 -0
  296. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.cpp +530 -0
  297. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.h +63 -0
  298. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.cpp +172 -0
  299. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.h +43 -0
  300. package/node_modules/node-datachannel/src/cpp/main.cpp +58 -0
  301. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.cpp +457 -0
  302. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.h +52 -0
  303. package/node_modules/node-datachannel/src/cpp/media-av1packetization.cpp +24 -0
  304. package/node_modules/node-datachannel/src/cpp/media-av1packetization.h +11 -0
  305. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.cpp +126 -0
  306. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.h +29 -0
  307. package/node_modules/node-datachannel/src/cpp/media-direction.cpp +43 -0
  308. package/node_modules/node-datachannel/src/cpp/media-direction.h +10 -0
  309. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.cpp +126 -0
  310. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.h +30 -0
  311. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.cpp +126 -0
  312. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.h +30 -0
  313. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.cpp +32 -0
  314. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.h +11 -0
  315. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.cpp +31 -0
  316. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.h +11 -0
  317. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.cpp +79 -0
  318. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.h +28 -0
  319. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.cpp +68 -0
  320. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.h +28 -0
  321. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.cpp +57 -0
  322. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.h +28 -0
  323. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.cpp +93 -0
  324. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.h +30 -0
  325. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.cpp +167 -0
  326. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.h +35 -0
  327. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.cpp +95 -0
  328. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.h +30 -0
  329. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.cpp +458 -0
  330. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.h +61 -0
  331. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.cpp +526 -0
  332. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.h +56 -0
  333. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.cpp +1298 -0
  334. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.h +89 -0
  335. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.cpp +205 -0
  336. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.h +24 -0
  337. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.cpp +57 -0
  338. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.h +47 -0
  339. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.cpp +275 -0
  340. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.h +41 -0
  341. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.cpp +796 -0
  342. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.h +63 -0
  343. package/node_modules/node-datachannel/src/index.ts +9 -0
  344. package/node_modules/node-datachannel/src/lib/datachannel-stream.ts +100 -0
  345. package/node_modules/node-datachannel/src/lib/index.ts +290 -0
  346. package/node_modules/node-datachannel/src/lib/node-datachannel.ts +84 -0
  347. package/node_modules/node-datachannel/src/lib/types.ts +169 -0
  348. package/node_modules/node-datachannel/src/lib/websocket-server.ts +37 -0
  349. package/node_modules/node-datachannel/src/lib/websocket.ts +26 -0
  350. package/node_modules/node-datachannel/src/polyfill/Events.ts +82 -0
  351. package/node_modules/node-datachannel/src/polyfill/Exception.ts +37 -0
  352. package/node_modules/node-datachannel/src/polyfill/README.md +41 -0
  353. package/node_modules/node-datachannel/src/polyfill/RTCCertificate.ts +21 -0
  354. package/node_modules/node-datachannel/src/polyfill/RTCDataChannel.ts +225 -0
  355. package/node_modules/node-datachannel/src/polyfill/RTCDtlsTransport.ts +46 -0
  356. package/node_modules/node-datachannel/src/polyfill/RTCError.ts +78 -0
  357. package/node_modules/node-datachannel/src/polyfill/RTCIceCandidate.ts +128 -0
  358. package/node_modules/node-datachannel/src/polyfill/RTCIceTransport.ts +90 -0
  359. package/node_modules/node-datachannel/src/polyfill/RTCPeerConnection.ts +527 -0
  360. package/node_modules/node-datachannel/src/polyfill/RTCSctpTransport.ts +51 -0
  361. package/node_modules/node-datachannel/src/polyfill/RTCSessionDescription.ts +41 -0
  362. package/node_modules/node-datachannel/src/polyfill/index.ts +38 -0
  363. package/node_modules/node-datachannel/tsconfig.json +21 -0
  364. package/node_modules/p-limit/index.d.ts +38 -0
  365. package/node_modules/p-limit/index.js +57 -0
  366. package/node_modules/p-limit/license +9 -0
  367. package/node_modules/p-limit/package.json +52 -0
  368. package/node_modules/p-limit/readme.md +101 -0
  369. package/node_modules/p-locate/index.d.ts +64 -0
  370. package/node_modules/p-locate/index.js +52 -0
  371. package/node_modules/p-locate/license +9 -0
  372. package/node_modules/p-locate/package.json +53 -0
  373. package/node_modules/p-locate/readme.md +90 -0
  374. package/node_modules/p-try/index.d.ts +39 -0
  375. package/node_modules/p-try/index.js +9 -0
  376. package/node_modules/p-try/license +9 -0
  377. package/node_modules/p-try/package.json +42 -0
  378. package/node_modules/p-try/readme.md +58 -0
  379. package/node_modules/path-exists/index.d.ts +28 -0
  380. package/node_modules/path-exists/index.js +23 -0
  381. package/node_modules/path-exists/license +9 -0
  382. package/node_modules/path-exists/package.json +39 -0
  383. package/node_modules/path-exists/readme.md +52 -0
  384. package/node_modules/pngjs/.eslintignore +2 -0
  385. package/node_modules/pngjs/.eslintrc.json +19 -0
  386. package/node_modules/pngjs/.prettierignore +3 -0
  387. package/node_modules/pngjs/LICENSE +20 -0
  388. package/node_modules/pngjs/README.md +429 -0
  389. package/node_modules/pngjs/browser.js +16096 -0
  390. package/node_modules/pngjs/coverage/lcov-report/base.css +354 -0
  391. package/node_modules/pngjs/coverage/lcov-report/bitmapper.js.html +881 -0
  392. package/node_modules/pngjs/coverage/lcov-report/bitpacker.js.html +554 -0
  393. package/node_modules/pngjs/coverage/lcov-report/block-navigation.js +77 -0
  394. package/node_modules/pngjs/coverage/lcov-report/chunkstream.js.html +647 -0
  395. package/node_modules/pngjs/coverage/lcov-report/constants.js.html +176 -0
  396. package/node_modules/pngjs/coverage/lcov-report/crc.js.html +200 -0
  397. package/node_modules/pngjs/coverage/lcov-report/favicon.png +0 -0
  398. package/node_modules/pngjs/coverage/lcov-report/filter-pack.js.html +593 -0
  399. package/node_modules/pngjs/coverage/lcov-report/filter-parse-async.js.html +152 -0
  400. package/node_modules/pngjs/coverage/lcov-report/filter-parse-sync.js.html +143 -0
  401. package/node_modules/pngjs/coverage/lcov-report/filter-parse.js.html +611 -0
  402. package/node_modules/pngjs/coverage/lcov-report/format-normaliser.js.html +359 -0
  403. package/node_modules/pngjs/coverage/lcov-report/index.html +426 -0
  404. package/node_modules/pngjs/coverage/lcov-report/interlace.js.html +365 -0
  405. package/node_modules/pngjs/coverage/lcov-report/packer-async.js.html +230 -0
  406. package/node_modules/pngjs/coverage/lcov-report/packer-sync.js.html +248 -0
  407. package/node_modules/pngjs/coverage/lcov-report/packer.js.html +467 -0
  408. package/node_modules/pngjs/coverage/lcov-report/paeth-predictor.js.html +128 -0
  409. package/node_modules/pngjs/coverage/lcov-report/parser-async.js.html +575 -0
  410. package/node_modules/pngjs/coverage/lcov-report/parser-sync.js.html +404 -0
  411. package/node_modules/pngjs/coverage/lcov-report/parser.js.html +950 -0
  412. package/node_modules/pngjs/coverage/lcov-report/png-sync.js.html +116 -0
  413. package/node_modules/pngjs/coverage/lcov-report/png.js.html +662 -0
  414. package/node_modules/pngjs/coverage/lcov-report/prettify.css +101 -0
  415. package/node_modules/pngjs/coverage/lcov-report/prettify.js +1007 -0
  416. package/node_modules/pngjs/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  417. package/node_modules/pngjs/coverage/lcov-report/sorter.js +169 -0
  418. package/node_modules/pngjs/coverage/lcov-report/sync-inflate.js.html +584 -0
  419. package/node_modules/pngjs/coverage/lcov-report/sync-reader.js.html +215 -0
  420. package/node_modules/pngjs/coverage/lcov.info +2177 -0
  421. package/node_modules/pngjs/lib/bitmapper.js +267 -0
  422. package/node_modules/pngjs/lib/bitpacker.js +158 -0
  423. package/node_modules/pngjs/lib/chunkstream.js +189 -0
  424. package/node_modules/pngjs/lib/constants.js +32 -0
  425. package/node_modules/pngjs/lib/crc.js +40 -0
  426. package/node_modules/pngjs/lib/filter-pack.js +171 -0
  427. package/node_modules/pngjs/lib/filter-parse-async.js +24 -0
  428. package/node_modules/pngjs/lib/filter-parse-sync.js +21 -0
  429. package/node_modules/pngjs/lib/filter-parse.js +177 -0
  430. package/node_modules/pngjs/lib/format-normaliser.js +93 -0
  431. package/node_modules/pngjs/lib/interlace.js +95 -0
  432. package/node_modules/pngjs/lib/packer-async.js +50 -0
  433. package/node_modules/pngjs/lib/packer-sync.js +56 -0
  434. package/node_modules/pngjs/lib/packer.js +129 -0
  435. package/node_modules/pngjs/lib/paeth-predictor.js +16 -0
  436. package/node_modules/pngjs/lib/parser-async.js +165 -0
  437. package/node_modules/pngjs/lib/parser-sync.js +108 -0
  438. package/node_modules/pngjs/lib/parser.js +290 -0
  439. package/node_modules/pngjs/lib/png-sync.js +12 -0
  440. package/node_modules/pngjs/lib/png.js +194 -0
  441. package/node_modules/pngjs/lib/sync-inflate.js +168 -0
  442. package/node_modules/pngjs/lib/sync-reader.js +45 -0
  443. package/node_modules/pngjs/package.json +73 -0
  444. package/node_modules/qrcode/README.md +770 -0
  445. package/node_modules/qrcode/bin/qrcode +159 -0
  446. package/node_modules/qrcode/helper/to-sjis-browser.js +2 -0
  447. package/node_modules/qrcode/helper/to-sjis.js +105 -0
  448. package/node_modules/qrcode/lib/browser.js +76 -0
  449. package/node_modules/qrcode/lib/can-promise.js +7 -0
  450. package/node_modules/qrcode/lib/core/alignment-pattern.js +83 -0
  451. package/node_modules/qrcode/lib/core/alphanumeric-data.js +59 -0
  452. package/node_modules/qrcode/lib/core/bit-buffer.js +37 -0
  453. package/node_modules/qrcode/lib/core/bit-matrix.js +65 -0
  454. package/node_modules/qrcode/lib/core/byte-data.js +30 -0
  455. package/node_modules/qrcode/lib/core/error-correction-code.js +135 -0
  456. package/node_modules/qrcode/lib/core/error-correction-level.js +50 -0
  457. package/node_modules/qrcode/lib/core/finder-pattern.js +22 -0
  458. package/node_modules/qrcode/lib/core/format-info.js +29 -0
  459. package/node_modules/qrcode/lib/core/galois-field.js +69 -0
  460. package/node_modules/qrcode/lib/core/kanji-data.js +54 -0
  461. package/node_modules/qrcode/lib/core/mask-pattern.js +234 -0
  462. package/node_modules/qrcode/lib/core/mode.js +167 -0
  463. package/node_modules/qrcode/lib/core/numeric-data.js +43 -0
  464. package/node_modules/qrcode/lib/core/polynomial.js +62 -0
  465. package/node_modules/qrcode/lib/core/qrcode.js +495 -0
  466. package/node_modules/qrcode/lib/core/reed-solomon-encoder.js +56 -0
  467. package/node_modules/qrcode/lib/core/regex.js +31 -0
  468. package/node_modules/qrcode/lib/core/segments.js +330 -0
  469. package/node_modules/qrcode/lib/core/utils.js +63 -0
  470. package/node_modules/qrcode/lib/core/version-check.js +9 -0
  471. package/node_modules/qrcode/lib/core/version.js +163 -0
  472. package/node_modules/qrcode/lib/index.js +12 -0
  473. package/node_modules/qrcode/lib/renderer/canvas.js +63 -0
  474. package/node_modules/qrcode/lib/renderer/png.js +78 -0
  475. package/node_modules/qrcode/lib/renderer/svg-tag.js +81 -0
  476. package/node_modules/qrcode/lib/renderer/svg.js +19 -0
  477. package/node_modules/qrcode/lib/renderer/terminal/terminal-small.js +85 -0
  478. package/node_modules/qrcode/lib/renderer/terminal/terminal.js +49 -0
  479. package/node_modules/qrcode/lib/renderer/terminal.js +9 -0
  480. package/node_modules/qrcode/lib/renderer/utf8.js +71 -0
  481. package/node_modules/qrcode/lib/renderer/utils.js +99 -0
  482. package/node_modules/qrcode/lib/server.js +138 -0
  483. package/node_modules/qrcode/license +10 -0
  484. package/node_modules/qrcode/package.json +77 -0
  485. package/node_modules/require-directory/.jshintrc +67 -0
  486. package/node_modules/require-directory/.npmignore +1 -0
  487. package/node_modules/require-directory/.travis.yml +3 -0
  488. package/node_modules/require-directory/LICENSE +22 -0
  489. package/node_modules/require-directory/README.markdown +184 -0
  490. package/node_modules/require-directory/index.js +86 -0
  491. package/node_modules/require-directory/package.json +40 -0
  492. package/node_modules/require-main-filename/CHANGELOG.md +26 -0
  493. package/node_modules/require-main-filename/LICENSE.txt +14 -0
  494. package/node_modules/require-main-filename/README.md +26 -0
  495. package/node_modules/require-main-filename/index.js +18 -0
  496. package/node_modules/require-main-filename/package.json +35 -0
  497. package/node_modules/semver/LICENSE +15 -0
  498. package/node_modules/semver/README.md +680 -0
  499. package/node_modules/semver/bin/semver.js +195 -0
  500. package/node_modules/semver/classes/comparator.js +143 -0
  501. package/node_modules/semver/classes/index.js +7 -0
  502. package/node_modules/semver/classes/range.js +577 -0
  503. package/node_modules/semver/classes/semver.js +350 -0
  504. package/node_modules/semver/functions/clean.js +8 -0
  505. package/node_modules/semver/functions/cmp.js +54 -0
  506. package/node_modules/semver/functions/coerce.js +62 -0
  507. package/node_modules/semver/functions/compare-build.js +9 -0
  508. package/node_modules/semver/functions/compare-loose.js +5 -0
  509. package/node_modules/semver/functions/compare.js +7 -0
  510. package/node_modules/semver/functions/diff.js +60 -0
  511. package/node_modules/semver/functions/eq.js +5 -0
  512. package/node_modules/semver/functions/gt.js +5 -0
  513. package/node_modules/semver/functions/gte.js +5 -0
  514. package/node_modules/semver/functions/inc.js +21 -0
  515. package/node_modules/semver/functions/lt.js +5 -0
  516. package/node_modules/semver/functions/lte.js +5 -0
  517. package/node_modules/semver/functions/major.js +5 -0
  518. package/node_modules/semver/functions/minor.js +5 -0
  519. package/node_modules/semver/functions/neq.js +5 -0
  520. package/node_modules/semver/functions/parse.js +18 -0
  521. package/node_modules/semver/functions/patch.js +5 -0
  522. package/node_modules/semver/functions/prerelease.js +8 -0
  523. package/node_modules/semver/functions/rcompare.js +5 -0
  524. package/node_modules/semver/functions/rsort.js +5 -0
  525. package/node_modules/semver/functions/satisfies.js +12 -0
  526. package/node_modules/semver/functions/sort.js +5 -0
  527. package/node_modules/semver/functions/truncate.js +48 -0
  528. package/node_modules/semver/functions/valid.js +8 -0
  529. package/node_modules/semver/index.js +93 -0
  530. package/node_modules/semver/internal/constants.js +37 -0
  531. package/node_modules/semver/internal/debug.js +11 -0
  532. package/node_modules/semver/internal/identifiers.js +29 -0
  533. package/node_modules/semver/internal/lrucache.js +42 -0
  534. package/node_modules/semver/internal/parse-options.js +17 -0
  535. package/node_modules/semver/internal/re.js +223 -0
  536. package/node_modules/semver/package.json +78 -0
  537. package/node_modules/semver/preload.js +4 -0
  538. package/node_modules/semver/range.bnf +17 -0
  539. package/node_modules/semver/ranges/gtr.js +6 -0
  540. package/node_modules/semver/ranges/intersects.js +9 -0
  541. package/node_modules/semver/ranges/ltr.js +6 -0
  542. package/node_modules/semver/ranges/max-satisfying.js +27 -0
  543. package/node_modules/semver/ranges/min-satisfying.js +26 -0
  544. package/node_modules/semver/ranges/min-version.js +63 -0
  545. package/node_modules/semver/ranges/outside.js +82 -0
  546. package/node_modules/semver/ranges/simplify.js +49 -0
  547. package/node_modules/semver/ranges/subset.js +249 -0
  548. package/node_modules/semver/ranges/to-comparators.js +10 -0
  549. package/node_modules/semver/ranges/valid.js +13 -0
  550. package/node_modules/set-blocking/CHANGELOG.md +26 -0
  551. package/node_modules/set-blocking/LICENSE.txt +14 -0
  552. package/node_modules/set-blocking/README.md +31 -0
  553. package/node_modules/set-blocking/index.js +7 -0
  554. package/node_modules/set-blocking/package.json +42 -0
  555. package/node_modules/sharp/LICENSE +191 -0
  556. package/node_modules/sharp/README.md +112 -0
  557. package/node_modules/sharp/dist/channel.cjs +177 -0
  558. package/node_modules/sharp/dist/channel.mjs +177 -0
  559. package/node_modules/sharp/dist/colour.cjs +199 -0
  560. package/node_modules/sharp/dist/colour.mjs +199 -0
  561. package/node_modules/sharp/dist/composite.cjs +213 -0
  562. package/node_modules/sharp/dist/composite.mjs +213 -0
  563. package/node_modules/sharp/dist/constructor.cjs +511 -0
  564. package/node_modules/sharp/dist/constructor.mjs +511 -0
  565. package/node_modules/sharp/dist/index.cjs +25 -0
  566. package/node_modules/sharp/dist/index.d.cts +1999 -0
  567. package/node_modules/sharp/dist/index.d.mts +2046 -0
  568. package/node_modules/sharp/dist/index.mjs +25 -0
  569. package/node_modules/sharp/dist/input.cjs +819 -0
  570. package/node_modules/sharp/dist/input.mjs +819 -0
  571. package/node_modules/sharp/dist/is.cjs +143 -0
  572. package/node_modules/sharp/dist/is.mjs +143 -0
  573. package/node_modules/sharp/dist/libvips.cjs +212 -0
  574. package/node_modules/sharp/dist/libvips.mjs +212 -0
  575. package/node_modules/sharp/dist/operation.cjs +1002 -0
  576. package/node_modules/sharp/dist/operation.mjs +1002 -0
  577. package/node_modules/sharp/dist/output.cjs +1785 -0
  578. package/node_modules/sharp/dist/output.mjs +1785 -0
  579. package/node_modules/sharp/dist/resize.cjs +617 -0
  580. package/node_modules/sharp/dist/resize.mjs +617 -0
  581. package/node_modules/sharp/dist/sharp.cjs +174 -0
  582. package/node_modules/sharp/dist/sharp.mjs +174 -0
  583. package/node_modules/sharp/dist/utility.cjs +301 -0
  584. package/node_modules/sharp/dist/utility.mjs +301 -0
  585. package/node_modules/sharp/install/build.js +38 -0
  586. package/node_modules/sharp/lib/index.d.ts +1999 -0
  587. package/node_modules/sharp/package.json +227 -0
  588. package/node_modules/sharp/src/binding.gyp +303 -0
  589. package/node_modules/sharp/src/common.cc +1186 -0
  590. package/node_modules/sharp/src/common.h +421 -0
  591. package/node_modules/sharp/src/metadata.cc +404 -0
  592. package/node_modules/sharp/src/metadata.h +95 -0
  593. package/node_modules/sharp/src/operations.cc +516 -0
  594. package/node_modules/sharp/src/operations.h +137 -0
  595. package/node_modules/sharp/src/pipeline.cc +1948 -0
  596. package/node_modules/sharp/src/pipeline.h +422 -0
  597. package/node_modules/sharp/src/sharp.cc +43 -0
  598. package/node_modules/sharp/src/stats.cc +186 -0
  599. package/node_modules/sharp/src/stats.h +62 -0
  600. package/node_modules/sharp/src/utilities.cc +289 -0
  601. package/node_modules/sharp/src/utilities.h +22 -0
  602. package/node_modules/string-width/index.d.ts +29 -0
  603. package/node_modules/string-width/index.js +47 -0
  604. package/node_modules/string-width/license +9 -0
  605. package/node_modules/string-width/package.json +56 -0
  606. package/node_modules/string-width/readme.md +50 -0
  607. package/node_modules/strip-ansi/index.d.ts +17 -0
  608. package/node_modules/strip-ansi/index.js +4 -0
  609. package/node_modules/strip-ansi/license +9 -0
  610. package/node_modules/strip-ansi/package.json +54 -0
  611. package/node_modules/strip-ansi/readme.md +46 -0
  612. package/node_modules/which-module/LICENSE +13 -0
  613. package/node_modules/which-module/README.md +58 -0
  614. package/node_modules/which-module/index.js +9 -0
  615. package/node_modules/which-module/package.json +41 -0
  616. package/node_modules/wrap-ansi/index.js +186 -0
  617. package/node_modules/wrap-ansi/license +9 -0
  618. package/node_modules/wrap-ansi/package.json +61 -0
  619. package/node_modules/wrap-ansi/readme.md +97 -0
  620. package/node_modules/ws/LICENSE +20 -0
  621. package/node_modules/ws/README.md +548 -0
  622. package/node_modules/ws/browser.js +8 -0
  623. package/node_modules/ws/index.js +22 -0
  624. package/node_modules/ws/lib/buffer-util.js +131 -0
  625. package/node_modules/ws/lib/constants.js +19 -0
  626. package/node_modules/ws/lib/event-target.js +292 -0
  627. package/node_modules/ws/lib/extension.js +203 -0
  628. package/node_modules/ws/lib/limiter.js +55 -0
  629. package/node_modules/ws/lib/permessage-deflate.js +530 -0
  630. package/node_modules/ws/lib/receiver.js +743 -0
  631. package/node_modules/ws/lib/sender.js +607 -0
  632. package/node_modules/ws/lib/stream.js +161 -0
  633. package/node_modules/ws/lib/subprotocol.js +62 -0
  634. package/node_modules/ws/lib/validation.js +152 -0
  635. package/node_modules/ws/lib/websocket-server.js +562 -0
  636. package/node_modules/ws/lib/websocket.js +1407 -0
  637. package/node_modules/ws/package.json +74 -0
  638. package/node_modules/ws/wrapper.mjs +21 -0
  639. package/node_modules/y18n/CHANGELOG.md +35 -0
  640. package/node_modules/y18n/LICENSE +13 -0
  641. package/node_modules/y18n/README.md +109 -0
  642. package/node_modules/y18n/index.js +188 -0
  643. package/node_modules/y18n/package.json +39 -0
  644. package/node_modules/yargs/CHANGELOG.md +420 -0
  645. package/node_modules/yargs/LICENSE +21 -0
  646. package/node_modules/yargs/README.md +140 -0
  647. package/node_modules/yargs/build/lib/apply-extends.d.ts +2 -0
  648. package/node_modules/yargs/build/lib/apply-extends.js +65 -0
  649. package/node_modules/yargs/build/lib/argsert.d.ts +2 -0
  650. package/node_modules/yargs/build/lib/argsert.js +65 -0
  651. package/node_modules/yargs/build/lib/command.d.ts +64 -0
  652. package/node_modules/yargs/build/lib/command.js +416 -0
  653. package/node_modules/yargs/build/lib/common-types.d.ts +36 -0
  654. package/node_modules/yargs/build/lib/common-types.js +25 -0
  655. package/node_modules/yargs/build/lib/completion-templates.d.ts +2 -0
  656. package/node_modules/yargs/build/lib/completion-templates.js +50 -0
  657. package/node_modules/yargs/build/lib/completion.d.ts +21 -0
  658. package/node_modules/yargs/build/lib/completion.js +135 -0
  659. package/node_modules/yargs/build/lib/is-promise.d.ts +1 -0
  660. package/node_modules/yargs/build/lib/is-promise.js +9 -0
  661. package/node_modules/yargs/build/lib/levenshtein.d.ts +1 -0
  662. package/node_modules/yargs/build/lib/levenshtein.js +58 -0
  663. package/node_modules/yargs/build/lib/middleware.d.ts +10 -0
  664. package/node_modules/yargs/build/lib/middleware.js +57 -0
  665. package/node_modules/yargs/build/lib/obj-filter.d.ts +1 -0
  666. package/node_modules/yargs/build/lib/obj-filter.js +14 -0
  667. package/node_modules/yargs/build/lib/parse-command.d.ts +11 -0
  668. package/node_modules/yargs/build/lib/parse-command.js +36 -0
  669. package/node_modules/yargs/build/lib/process-argv.d.ts +2 -0
  670. package/node_modules/yargs/build/lib/process-argv.js +31 -0
  671. package/node_modules/yargs/build/lib/usage.d.ts +49 -0
  672. package/node_modules/yargs/build/lib/usage.js +540 -0
  673. package/node_modules/yargs/build/lib/validation.d.ts +34 -0
  674. package/node_modules/yargs/build/lib/validation.js +330 -0
  675. package/node_modules/yargs/build/lib/yargs.d.ts +274 -0
  676. package/node_modules/yargs/build/lib/yargs.js +1190 -0
  677. package/node_modules/yargs/build/lib/yerror.d.ts +4 -0
  678. package/node_modules/yargs/build/lib/yerror.js +11 -0
  679. package/node_modules/yargs/index.js +40 -0
  680. package/node_modules/yargs/locales/be.json +46 -0
  681. package/node_modules/yargs/locales/de.json +46 -0
  682. package/node_modules/yargs/locales/en.json +51 -0
  683. package/node_modules/yargs/locales/es.json +46 -0
  684. package/node_modules/yargs/locales/fi.json +49 -0
  685. package/node_modules/yargs/locales/fr.json +53 -0
  686. package/node_modules/yargs/locales/hi.json +49 -0
  687. package/node_modules/yargs/locales/hu.json +46 -0
  688. package/node_modules/yargs/locales/id.json +50 -0
  689. package/node_modules/yargs/locales/it.json +46 -0
  690. package/node_modules/yargs/locales/ja.json +51 -0
  691. package/node_modules/yargs/locales/ko.json +49 -0
  692. package/node_modules/yargs/locales/nb.json +44 -0
  693. package/node_modules/yargs/locales/nl.json +49 -0
  694. package/node_modules/yargs/locales/nn.json +44 -0
  695. package/node_modules/yargs/locales/pirate.json +13 -0
  696. package/node_modules/yargs/locales/pl.json +49 -0
  697. package/node_modules/yargs/locales/pt.json +45 -0
  698. package/node_modules/yargs/locales/pt_BR.json +48 -0
  699. package/node_modules/yargs/locales/ru.json +46 -0
  700. package/node_modules/yargs/locales/th.json +46 -0
  701. package/node_modules/yargs/locales/tr.json +48 -0
  702. package/node_modules/yargs/locales/zh_CN.json +48 -0
  703. package/node_modules/yargs/locales/zh_TW.json +47 -0
  704. package/node_modules/yargs/package.json +92 -0
  705. package/node_modules/yargs/yargs.js +14 -0
  706. package/node_modules/yargs-parser/CHANGELOG.md +601 -0
  707. package/node_modules/yargs-parser/LICENSE.txt +14 -0
  708. package/node_modules/yargs-parser/README.md +449 -0
  709. package/node_modules/yargs-parser/index.js +1032 -0
  710. package/node_modules/yargs-parser/lib/tokenize-arg-string.js +40 -0
  711. package/node_modules/yargs-parser/package.json +46 -0
  712. package/package.json +50 -0
  713. package/tools/postinstall.mjs +9 -0
@@ -0,0 +1,146 @@
1
+ /* Device-local display cache. Never supplies execution state or credentials. */
2
+ (() => {
3
+ const limit = 100 * 1024 * 1024;
4
+ let opening, writes = Promise.resolve(), displayVersion = 0;
5
+ const urls = new Map();
6
+ function database() {
7
+ if (!opening) opening = new Promise((resolve, reject) => {
8
+ const request = indexedDB.open('codex-remote-history-v1', 1);
9
+ request.onupgradeneeded = () => {
10
+ for (const name of ['threads', 'images', 'blobs']) request.result.createObjectStore(name, { keyPath: 'key' });
11
+ };
12
+ request.onsuccess = () => resolve(request.result);
13
+ request.onerror = () => reject(request.error);
14
+ request.onblocked = () => reject(new Error('缓存数据库正在被旧页面占用'));
15
+ });
16
+ return opening;
17
+ }
18
+ function read(db, store, key) {
19
+ return new Promise((resolve, reject) => {
20
+ const request = db.transaction(store).objectStore(store).get(key);
21
+ request.onsuccess = () => resolve(request.result);
22
+ request.onerror = () => reject(request.error);
23
+ });
24
+ }
25
+ function release() { displayVersion++; for (const url of urls.values()) URL.revokeObjectURL(url); urls.clear(); }
26
+ async function get(scope, id) {
27
+ const version = displayVersion;
28
+ const db = await database(), record = await read(db, 'threads', JSON.stringify([scope, id]));
29
+ if (!record) return null;
30
+ async function unpack(value) {
31
+ if (version !== displayVersion) return null;
32
+ if (value && typeof value === 'object' && value.cacheImage) {
33
+ const key = value.cacheImage;
34
+ if (!urls.has(key)) {
35
+ const image = await read(db, 'blobs', key);
36
+ if (version !== displayVersion) return null;
37
+ if (!image) throw new Error('缓存图片缺失');
38
+ urls.set(key, URL.createObjectURL(image.blob));
39
+ }
40
+ return urls.get(key);
41
+ }
42
+ if (Array.isArray(value)) { const result = []; for (const item of value) result.push(await unpack(item)); return result; }
43
+ if (value && typeof value === 'object') { const result = {}; for (const [k, v] of Object.entries(value)) result[k] = await unpack(v); return result; }
44
+ return value;
45
+ }
46
+ const data = await unpack(record.data);
47
+ return version === displayVersion ? { ...data, cached: true, nextCursor: null } : null;
48
+ }
49
+ function save(scope, data, hash, id = data.thread.id) {
50
+ // Snapshot at scheduling time; live events may mutate the UI model while hashing.
51
+ const snapshot = structuredClone({ ...data, turns: data.turns.slice(-40) });
52
+ const key = JSON.stringify([scope, id]);
53
+ const work = writes.then(async () => {
54
+ const db = await database(), images = new Map(), byUrl = new Map(), referenced = new Set(), previousImages = new Map();
55
+ const previous = await read(db, 'threads', key);
56
+ function collect(value) {
57
+ if (!value || typeof value !== 'object') return;
58
+ if (value.remotePath && value.url?.cacheImage) previousImages.set(value.remotePath, value.url.cacheImage);
59
+ for (const child of Object.values(value)) collect(child);
60
+ }
61
+ collect(previous?.data);
62
+ async function pack(value) {
63
+ if (typeof value === 'string' && value.startsWith('data:image/')) {
64
+ if (!byUrl.has(value)) byUrl.set(value, (async () => {
65
+ const key = JSON.stringify([scope, await hash(value)]);
66
+ referenced.add(key);
67
+ const comma = value.indexOf(','), mime = value.slice(5, value.indexOf(';'));
68
+ const bytes = Uint8Array.from(atob(value.slice(comma + 1)), c => c.charCodeAt(0));
69
+ images.set(key, { key, blob: new Blob([bytes], { type: mime }), size: bytes.length });
70
+ return { cacheImage: key };
71
+ })());
72
+ return byUrl.get(value);
73
+ }
74
+ if (Array.isArray(value)) return Promise.all(value.map(pack));
75
+ if (value && typeof value === 'object') {
76
+ if (value.remotePath && !value.url && previousImages.has(value.remotePath)) {
77
+ const key = previousImages.get(value.remotePath); referenced.add(key);
78
+ return { ...value, available: true, url: { cacheImage: key }, thumbnailUrl: { cacheImage: key } };
79
+ }
80
+ return Object.fromEntries(await Promise.all(Object.entries(value).map(async ([k, v]) => [k, await pack(v)])));
81
+ }
82
+ return value;
83
+ }
84
+ const packed = await pack(snapshot);
85
+ const record = { key, data: packed, at: Date.now(), imageKeys: [...referenced], size: new TextEncoder().encode(JSON.stringify(packed)).length };
86
+ await new Promise((resolve, reject) => {
87
+ const tx = db.transaction(['threads', 'images', 'blobs'], 'readwrite');
88
+ tx.oncomplete = resolve; tx.onerror = () => reject(tx.error); tx.onabort = () => reject(tx.error || new Error('缓存写入中止'));
89
+ const threads = tx.objectStore('threads'), metadata = tx.objectStore('images'), blobs = tx.objectStore('blobs');
90
+ threads.put(record);
91
+ for (const image of images.values()) { metadata.put({ key: image.key, size: image.size }); blobs.put({ key: image.key, blob: image.blob }); }
92
+ const allThreads = threads.getAll(), allImages = metadata.getAll();
93
+ let records, sizes;
94
+ function prune() {
95
+ if (!records || !sizes) return;
96
+ records.sort((a, b) => b.at - a.at);
97
+ const keep = new Set(); let bytes = 0;
98
+ for (const [index, item] of records.entries()) {
99
+ const added = item.size + item.imageKeys.reduce((sum, image) => sum + (keep.has(image) ? 0 : sizes.get(image) || 0), 0);
100
+ if (index >= 20 || bytes + added > limit) { threads.delete(item.key); continue; }
101
+ bytes += added; for (const image of item.imageKeys) keep.add(image);
102
+ }
103
+ for (const image of sizes.keys()) if (!keep.has(image)) { metadata.delete(image); blobs.delete(image); }
104
+ }
105
+ allThreads.onsuccess = () => { records = allThreads.result; prune(); };
106
+ allImages.onsuccess = () => { sizes = new Map(allImages.result.map(image => [image.key, image.size])); prune(); };
107
+ });
108
+ });
109
+ writes = work.catch(() => {});
110
+ return work;
111
+ }
112
+ async function getImage(scope, id, path) {
113
+ const db = await database(), record = await read(db, 'threads', JSON.stringify([scope, id]));
114
+ function find(value) {
115
+ if (!value || typeof value !== 'object') return null;
116
+ if (value.remotePath === path && value.url?.cacheImage) return value.url.cacheImage;
117
+ for (const child of Object.values(value)) { const key = find(child); if (key) return key; }
118
+ return null;
119
+ }
120
+ const key = find(record?.data); if (!key) return null;
121
+ const image = await read(db, 'blobs', key); if (!image) return null;
122
+ const bytes = new Uint8Array(await image.blob.arrayBuffer()); let binary = '';
123
+ for (let i = 0; i < bytes.length; i += 16384) binary += String.fromCharCode(...bytes.subarray(i, i + 16384));
124
+ return `data:${image.blob.type};base64,${btoa(binary)}`;
125
+ }
126
+ async function clear() {
127
+ await writes;
128
+ const db = await database();
129
+ await new Promise((resolve, reject) => {
130
+ const tx = db.transaction(['threads', 'images', 'blobs'], 'readwrite');
131
+ for (const store of ['threads', 'images', 'blobs']) tx.objectStore(store).clear();
132
+ tx.oncomplete = resolve; tx.onabort = tx.onerror = () => reject(tx.error);
133
+ });
134
+ release();
135
+ }
136
+ async function latest(scope) {
137
+ const db = await database();
138
+ const records = await new Promise((resolve, reject) => {
139
+ const request = db.transaction('threads').objectStore('threads').getAll();
140
+ request.onsuccess = () => resolve(request.result); request.onerror = () => reject(request.error);
141
+ });
142
+ const record = records.filter(item => JSON.parse(item.key)[0] === scope).sort((a, b) => b.at - a.at)[0];
143
+ return record ? get(scope, JSON.parse(record.key)[1]) : null;
144
+ }
145
+ window.codexHistoryCache = { get, getImage, save, latest, clear, release };
146
+ })();
@@ -0,0 +1,222 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Code Relax</title>
7
+ <style>
8
+ #pageLoading { display:none; }
9
+ body.page-loading > :not(#pageLoading) { display:none !important; }
10
+ body.page-loading #pageLoading { display:flex; flex:1; align-items:center; justify-content:center; min-height:100vh; font:14px/1.5 system-ui; color:GrayText; }
11
+ body.page-loading.silent-page-loading #pageLoading { visibility:hidden; }
12
+ </style>
13
+ <link rel="stylesheet" href="chat.css">
14
+ </head>
15
+ <body class="page-loading">
16
+ <div id="pageLoading" role="status">正在加载…</div>
17
+ <section id="connectionEntry" role="region" aria-label="连接工作站">
18
+ <div class="connection-entry-card">
19
+ <div class="entry-brand">Code Relax</div>
20
+ <h1>连接你的工作站</h1>
21
+ <p id="entryMode">Code Relax</p>
22
+ <ol id="entrySteps" class="entry-steps" aria-label="连接阶段" hidden>
23
+ <li>账号</li><li>设备授权</li><li>连接工作站</li>
24
+ </ol>
25
+ <div id="entryProgress" class="entry-progress" data-state="loading">
26
+ <span class="entry-indicator" aria-hidden="true"></span>
27
+ <div><p id="entryStatus" role="status" aria-live="polite">正在连接工作站…</p>
28
+ <p id="entryDetail">连接完成后会自动进入对话。</p></div>
29
+ </div>
30
+ <div class="connection-entry-actions">
31
+ <button id="entryRetry" type="button" disabled>正在连接…</button>
32
+ <button id="entrySettings" type="button" hidden>切换连接方式</button>
33
+ </div>
34
+ </div>
35
+ </section>
36
+ <header>
37
+ <h1>Code Relax</h1>
38
+ <div class="sub">直接连接当前 Codex Desktop · MVP 0.22</div>
39
+ <div class="status"><span id="dot" class="dot"></span><span id="status">正在连接…</span></div>
40
+ </header>
41
+ <main>
42
+ <div id="actionToast" role="status" hidden></div>
43
+ <button id="sidebarBackdrop" aria-label="关闭聊天菜单" type="button"></button>
44
+ <aside>
45
+ <div class="sidebar-brand"><span>Code Relax</span><button id="wideSidebarToggle" type="button" aria-label="收起聊天菜单" aria-expanded="true" title="收起聊天菜单"><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M9 3v18"/></svg></button></div>
46
+ <button id="newChat" type="button" class="new-chat-entry"><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 4H6a3 3 0 0 0-3 3v11a3 3 0 0 0 3 3h11a3 3 0 0 0 3-3v-6M16 3a2.12 2.12 0 0 1 3 3l-8 8-4 1 1-4Z"/></svg><span>新对话</span></button>
47
+ <div class="toolbar"><span class="sidebar-title">项目</span><button id="refresh" class="refresh-icon" title="刷新任务" aria-label="刷新任务">↻</button></div>
48
+ <div id="tasks"></div>
49
+ <button id="archivedThreads" class="archive-list-entry" type="button" title="查看已归档对话" aria-label="查看已归档对话" hidden><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 7h16v12H4zM3 4h18v3H3zM9 11h6"/></svg><span id="archivedThreadsLabel">已归档对话</span><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></button>
50
+ <button id="usageButton" type="button" title="查看剩余额度" aria-label="查看剩余额度"><svg class="codex-icon filled" viewBox="0 0 16 16" aria-hidden="true"><path d="M7.99951 0.807861C8.82345 0.807861 9.61914 0.935296 10.3667 1.17114C10.643 1.2584 10.7964 1.553 10.7095 1.82935C10.6222 2.10586 10.3268 2.25936 10.0503 2.17212C9.40387 1.96822 8.71489 1.85864 7.99951 1.85864C4.23962 1.85879 1.19204 4.90637 1.19189 8.66626C1.19189 10.4623 1.88656 12.0948 3.02295 13.3118C3.22077 13.5236 3.20925 13.856 2.99756 14.054C2.78565 14.2519 2.45327 14.2405 2.25537 14.0286C0.9446 12.6249 0.141113 10.7387 0.141113 8.66626C0.141259 4.32647 3.65972 0.808008 7.99951 0.807861Z"/><path d="M14.8569 6.00903C15.134 5.92414 15.428 6.07972 15.5132 6.35669C15.7376 7.0875 15.8579 7.86342 15.8579 8.66626C15.8579 10.7385 15.0552 12.6249 13.7446 14.0286C13.5468 14.2404 13.2144 14.2517 13.0024 14.054C12.7909 13.8561 12.7795 13.5246 12.9771 13.3127C14.1134 12.0958 14.8081 10.4623 14.8081 8.66626C14.8081 7.9691 14.7033 7.29731 14.5093 6.66528C14.4242 6.38817 14.5799 6.09422 14.8569 6.00903Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M12.2886 3.6604C12.4936 3.45576 12.8258 3.45564 13.0308 3.6604C13.2356 3.86532 13.2354 4.19756 13.0308 4.40259L9.8833 7.54907C10.0781 7.87667 10.1919 8.25855 10.1919 8.66724C10.1916 9.87721 9.21046 10.8583 8.00049 10.8586C6.79025 10.8586 5.80841 9.8774 5.80811 8.66724C5.80811 7.45681 6.79006 6.47485 8.00049 6.47485C8.42125 6.47496 8.81322 6.59526 9.14697 6.80103L12.2886 3.6604ZM8.00049 7.52563C7.36996 7.52563 6.85889 8.03671 6.85889 8.66724C6.85919 9.2975 7.37015 9.80884 8.00049 9.80884C8.63056 9.80853 9.14178 9.29731 9.14209 8.66724C9.14209 8.0369 8.63075 7.52594 8.00049 7.52563Z"/></svg><span id="usageSummary">剩余 —%</span><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></button>
51
+ <div id="sharedServiceNotice" class="shared-service-notice" role="button" tabindex="0" aria-label="查看 Codex 状态" hidden><span class="shared-service-copy"><strong id="sharedServiceNoticeTitle">当前为基础控制</strong><span id="sharedServiceNoticeText">点击查看当前状况和可执行操作</span></span><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></div>
52
+ <button id="connectionSettings" type="button" title="修改连接" aria-label="修改连接"><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="4" width="18" height="12" rx="2"/><path d="M8 20h8M12 16v4"/></svg><span id="connectionAddress"></span><span id="connectionStatus" role="status">连接中</span><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></button>
53
+ <div class="app-actions">
54
+ <button id="returnToComputer" type="button" title="返回工作站" aria-label="返回工作站" hidden><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><g transform="translate(24 0) scale(-1 1)"><path d="M10 4H5a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h5M14 8l4 4-4 4M8 12h10"/></g></svg><span>返回</span></button>
55
+ <details id="debugMenu" hidden>
56
+ <summary><span>调试</span><svg class="codex-icon debug-chevron" viewBox="0 0 24 24" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></summary>
57
+ <div class="debug-menu-items">
58
+ <button id="networkDiagnostics" type="button">网络诊断</button>
59
+ <button id="recoverShared" type="button">启用或重新启动完整控制</button>
60
+ <div id="sharedRecoveryConfirm" hidden role="group" aria-label="确认启用完整控制">
61
+ <p>将重新打开工作站当前的 Codex,以启用完整的手机控制功能。正在运行的任务可能中断,请先保存未发送内容。工作站连接保持运行。</p>
62
+ <button id="sharedRecoveryExecute" type="button">确认启用完整控制</button>
63
+ <button id="sharedRecoveryCancel" type="button">取消</button>
64
+ </div>
65
+ <p id="sharedRecoveryResult" role="status" hidden></p>
66
+ <label id="externalUiOption" hidden><span>内置页面</span><input id="externalUiToggle" type="checkbox" role="switch" aria-label="在内置页面和调试页面之间切换"><span>调试页面</span></label>
67
+ <button id="reloadDebugPage" type="button" hidden>重新加载调试页面</button>
68
+ </div>
69
+ </details>
70
+ </div>
71
+ </aside>
72
+ <section>
73
+ <button id="wideSidebarExpand" type="button" aria-label="展开聊天菜单" title="展开聊天菜单"><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M9 3v18"/></svg></button>
74
+ <div id="empty"><strong id="emptyConnection">准备连接</strong><p>选择已有对话继续,或开始一个新对话。</p><div class="connection-entry-actions"><button id="firstChooseTask" type="button">选择已有对话</button><button id="firstNewChat" type="button">新建对话</button></div></div>
75
+ <div id="selected" hidden>
76
+ <div id="newThreadWelcome" class="new-thread-welcome" hidden><!-- Static home icon from Codex Desktop 26.908.9136.0 -->
77
+ <div id="newThreadIcon" aria-hidden="true"><svg width="716" height="716" viewBox="149 149 418 418" fill="none" xmlns="http://www.w3.org/2000/svg" class="new-thread-brand"><mask id="path-1-inside-1_24_869" fill="white"><path fill-rule="evenodd" clip-rule="evenodd" d="M247.429 247.43C257.73 208.911 292.871 180.543 334.638 180.543C359.555 180.543 382.115 190.64 398.449 206.964C405.906 204.97 413.743 203.905 421.829 203.905C471.681 203.906 512.096 244.32 512.096 294.173C512.096 302.259 511.031 310.096 509.037 317.553C525.361 333.887 535.458 356.446 535.458 381.364C535.458 423.131 507.09 458.271 468.571 468.572C458.271 507.091 423.131 535.459 381.364 535.459C356.446 535.459 333.886 525.362 317.552 509.037C310.095 511.031 302.258 512.097 294.172 512.097C244.319 512.097 203.906 471.682 203.906 421.829C203.906 413.743 204.969 405.905 206.963 398.448C190.639 382.115 180.543 359.555 180.543 334.638C180.543 292.871 208.91 257.73 247.429 247.43Z"></path></mask><path d="M247.429 247.43L252.746 267.312L264.238 264.239L267.311 252.747L247.429 247.43ZM334.638 180.543L334.638 159.962L334.638 159.962L334.638 180.543ZM398.449 206.964L383.9 221.521L392.297 229.913L403.765 226.846L398.449 206.964ZM421.829 203.905L421.829 183.325L421.829 183.325L421.829 203.905ZM512.096 294.173L532.677 294.173L532.677 294.173L512.096 294.173ZM509.037 317.553L489.155 312.236L486.087 323.705L494.48 332.102L509.037 317.553ZM535.458 381.364L556.039 381.364L556.039 381.364L535.458 381.364ZM468.571 468.572L463.255 448.69L451.762 451.763L448.689 463.255L468.571 468.572ZM381.364 535.459L381.364 556.04L381.364 556.04L381.364 535.459ZM317.552 509.037L332.101 494.481L323.704 486.088L312.235 489.155L317.552 509.037ZM294.172 512.097L294.172 532.678L294.173 532.678L294.172 512.097ZM203.906 421.829L183.325 421.829L183.325 421.829L203.906 421.829ZM206.963 398.448L226.845 403.765L229.912 392.297L221.52 383.9L206.963 398.448ZM180.543 334.638L159.962 334.638L159.962 334.639L180.543 334.638ZM247.429 247.43L267.311 252.747C275.266 223.003 302.423 201.124 334.638 201.124L334.638 180.543L334.638 159.962C283.319 159.962 240.195 194.819 227.547 242.113L247.429 247.43ZM334.638 180.543L334.638 201.124C353.88 201.124 371.268 208.896 383.9 221.521L398.449 206.964L412.997 192.407C392.962 172.383 365.231 159.962 334.638 159.962L334.638 180.543ZM398.449 206.964L403.765 226.846C409.506 225.311 415.557 224.486 421.829 224.486L421.829 203.905L421.829 183.325C411.929 183.325 402.305 184.629 393.132 187.082L398.449 206.964ZM421.829 203.905L421.828 224.486C460.315 224.486 491.516 255.687 491.516 294.173L512.096 294.173L532.677 294.173C532.677 232.953 483.048 183.325 421.829 183.325L421.829 203.905ZM512.096 294.173L491.516 294.173C491.516 300.444 490.69 306.494 489.155 312.236L509.037 317.553L528.919 322.87C531.372 313.698 532.677 304.074 532.677 294.173L512.096 294.173ZM509.037 317.553L494.48 332.102C507.105 344.735 514.877 362.122 514.877 381.364L535.458 381.364L556.039 381.364C556.039 350.771 543.618 323.04 523.594 303.005L509.037 317.553ZM535.458 381.364L514.877 381.364C514.877 413.578 492.999 440.735 463.255 448.69L468.571 468.572L473.888 488.454C521.182 475.806 556.039 432.683 556.039 381.364L535.458 381.364ZM468.571 468.572L448.689 463.255C440.735 492.999 413.578 514.878 381.364 514.878L381.364 535.459L381.364 556.04C432.683 556.04 475.806 521.183 488.454 473.889L468.571 468.572ZM381.364 535.459L381.364 514.878C362.122 514.878 344.733 507.106 332.101 494.481L317.552 509.037L303.003 523.594C323.038 543.619 350.77 556.04 381.364 556.04L381.364 535.459ZM317.552 509.037L312.235 489.155C306.493 490.691 300.443 491.516 294.172 491.516L294.172 512.097L294.173 532.678C304.073 532.678 313.698 531.372 322.869 528.919L317.552 509.037ZM294.172 512.097L294.172 491.516C255.686 491.516 224.486 460.316 224.486 421.829L203.906 421.829L183.325 421.829C183.325 483.048 232.953 532.678 294.172 532.678L294.172 512.097ZM203.906 421.829L224.486 421.829C224.486 415.555 225.311 409.504 226.845 403.765L206.963 398.448L187.081 393.131C184.627 402.307 183.325 411.932 183.325 421.829L203.906 421.829ZM206.963 398.448L221.52 383.9C208.895 371.268 201.124 353.88 201.124 334.638L180.543 334.638L159.962 334.639C159.962 365.231 172.382 392.962 192.406 412.997L206.963 398.448ZM180.543 334.638L201.124 334.638C201.124 302.423 223.002 275.266 252.746 267.312L247.429 247.43L242.112 227.547C194.818 240.195 159.962 283.319 159.962 334.638L180.543 334.638Z" fill="currentColor" mask="url(#path-1-inside-1_24_869)"></path><path d="M436.706 408.738H370.021" stroke="currentColor" stroke-width="24" stroke-linecap="round"></path><path d="M276.533 309.154L303.468 357.831C304.433 359.575 304.412 361.698 303.414 363.423L276.533 409.854" stroke="currentColor" stroke-width="24" stroke-linecap="round"></path></svg></div><h3 id="newThreadTitle" class="new-thread-title">我们要构建什么?</h3></div>
78
+ <div class="selected-heading">
79
+ <h2 id="selectedTitle"></h2>
80
+ </div>
81
+ <div id="timeline"></div>
82
+ <button id="scrollToBottom" class="scroll-to-bottom" type="button" aria-label="滚动到最新消息" title="滚动到最新消息" hidden><svg class="codex-icon filled" viewBox="0 0 20 20" aria-hidden="true"><path d="M9.33467 16.6663V4.93978L4.6374 9.63704L4.1667 9.16634L3.69599 8.69661L9.52998 2.86263L9.63447 2.77767C9.8925 2.60753 10.2433 2.63564 10.4704 2.86263L16.3034 8.69661L16.3884 8.80111C16.5588 9.05922 16.5306 9.40982 16.3034 9.63704C16.0762 9.86414 15.7255 9.89242 15.4675 9.722L15.363 9.63704L10.6647 4.9388V16.6663C10.6647 17.0336 10.367 17.3314 9.99971 17.3314C9.63259 17.3312 9.33467 17.0335 9.33467 16.6663ZM4.6374 9.63704C4.3777 9.89674 3.95569 9.89674 3.69599 9.63704C3.43657 9.37744 3.43668 8.95628 3.69599 8.69661L4.6374 9.63704Z"/></svg></button>
83
+ <div id="queuePanel" class="queue-panel" hidden></div>
84
+ <div id="turnActions" style="display:flex;gap:8px;align-items:center;padding:4px 0;font-size:12px" hidden>
85
+ <button id="interruptTurn" type="button" hidden>停止</button>
86
+ </div>
87
+ <div id="connectionNotice" class="connection-notice" role="status" hidden><span class="connection-indicator" aria-hidden="true"></span><span id="connectionNoticeText">连接已断开</span><button id="reconnectConversation" type="button">重新连接</button></div>
88
+ <div id="newThreadProjectBar" class="new-thread-project" hidden><span id="newThreadProjectName">不在项目中工作</span><button id="clearNewThreadProject" type="button" aria-label="清空项目" title="清空项目">×</button></div>
89
+ <div id="approvalPanel" class="approval-panel" hidden></div>
90
+ <div class="composer">
91
+ <div id="pendingSettings" class="pending-settings" hidden><span id="pendingSettingsText" role="status"></span><button id="clearPendingSettings" class="clear-pending-settings" type="button" title="清除下一条消息设置" aria-label="清除下一条消息设置">×</button></div>
92
+ <div id="draftImages" style="display:flex;gap:8px;flex-wrap:wrap"></div>
93
+ <input id="imagePicker" type="file" accept="image/*" multiple hidden>
94
+ <textarea id="prompt" placeholder="随心输入"></textarea>
95
+ <div id="voiceStopPopover" class="voice-stop-popover" hidden>
96
+ <button id="stopVoiceToEdit" type="button">停止录音</button>
97
+ </div>
98
+ <div class="composer-row">
99
+ <div class="composer-add">
100
+ <button id="addMenuTrigger" class="composer-icon-button" type="button" title="添加内容" aria-label="添加内容" aria-haspopup="menu" aria-expanded="false"><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 5v14M5 12h14"/></svg></button>
101
+ <div id="addMenu" class="composer-add-menu" role="menu" aria-label="添加内容" hidden>
102
+ <button id="addImage" class="composer-add-option" type="button" role="menuitem"><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="8.5" cy="9" r="1.5"/><path d="m5 17 4.5-4 3 3 2.5-2 4 3"/></svg><span>添加图片</span></button>
103
+ <button id="sendAppLog" class="composer-add-option" type="button" role="menuitem" hidden><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M5 4h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H9l-5 3v-3a2 2 0 0 1-1-2V6a2 2 0 0 1 2-2Z"/><path d="M8 9h8M8 13h5"/></svg><span>发送应用日志</span></button>
104
+ <button id="clearAppLog" class="composer-add-option" type="button" role="menuitem" hidden><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 7h16M9 7V4h6v3M6 7l1 14h10l1-14M10 11v6M14 11v6"/></svg><span>清除应用日志</span></button>
105
+ </div>
106
+ </div>
107
+ <div id="permissionControl" class="permission-control" hidden>
108
+ <button id="permissionTrigger" class="permission-trigger" type="button" aria-haspopup="menu" aria-expanded="false" title="操作权限"><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m12 3 8 3v6c0 5-8 9-8 9s-8-4-8-9V6zM12 8v5m0 3h.01"/></svg><span id="permissionLabel">权限</span></button>
109
+ <div id="permissionMenu" class="permission-menu" role="menu" aria-label="操作权限" hidden>
110
+ <div class="permission-menu-title">应如何批准操作?</div>
111
+ <button type="button" class="permission-option" data-permission="ask" role="menuitemradio" aria-checked="false"><span><strong>请求批准</strong><small>编辑外部文件和使用互联网时始终询问</small></span><span class="permission-check">✓</span></button>
112
+ <button type="button" class="permission-option" data-permission="auto" role="menuitemradio" aria-checked="false"><span><strong>帮我批准</strong><small>仅对检测到的风险操作请求批准</small></span><span class="permission-check">✓</span></button>
113
+ <button type="button" class="permission-option" data-permission="full" role="menuitemradio" aria-checked="false"><span><strong>完全访问权限</strong><small>可不受限制地访问互联网和工作站上的任何文件</small></span><span class="permission-check">✓</span></button>
114
+ </div>
115
+ </div>
116
+ <div class="composer-controls">
117
+ <div class="context-control">
118
+ <button id="contextTrigger" class="context-trigger" type="button" aria-label="查看上下文占用" aria-expanded="false"><span id="contextMeter" class="context-meter" title="上下文占用暂不可用" aria-label="上下文占用暂不可用"></span></button>
119
+ <div id="contextDetails" class="context-details" role="status" hidden></div>
120
+ </div>
121
+ <div class="model-control">
122
+ <button id="modelTrigger" class="model-trigger" type="button" aria-expanded="false" aria-haspopup="menu">
123
+ <span id="modelFastIndicator" class="model-fast-indicator" title="快速模式" hidden><svg class="codex-icon filled" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"/></svg></span>
124
+ <span id="modelSummary" class="model-summary"><span id="modelSummaryName">读取当前模型…</span> <span id="modelSummaryEffort"></span></span>
125
+ <span class="chevron"><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg></span>
126
+ </button>
127
+ <div id="modelMenu" class="model-menu" role="menu" hidden>
128
+ <div id="modelView" class="menu-view">
129
+ <div class="menu-title">选择下一条消息使用的模型</div>
130
+ <button class="model-option" type="button" data-model="gpt-6-astra"><span>GPT-6 Astra</span><span class="check"></span></button>
131
+ <button class="model-option" type="button" data-model="gpt-5.6-sol"><span>GPT-5.6 Sol</span><span class="check"></span></button>
132
+ <button class="model-option" type="button" data-model="gpt-5.6-terra"><span>GPT-5.6 Terra</span><span class="check"></span></button>
133
+ <button class="model-option" type="button" data-model="gpt-5.6-luna"><span>GPT-5.6 Luna</span><span class="check"></span></button>
134
+ <button class="model-option" type="button" data-model="gpt-5.5"><span>GPT-5.5</span><span class="check"></span></button>
135
+ <button class="model-option" type="button" data-model="gpt-5.3-codex-spark"><span>GPT-5.3 Codex Spark</span><span class="check"></span></button>
136
+ <div class="menu-divider"></div>
137
+ <button id="openEffort" class="effort-entry" type="button"><span class="effort-entry-label"><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"/></svg>推理强度</span><span class="effort-entry-value"><span id="effortEntryText">高</span><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg></span></button>
138
+ <div class="menu-hint">设置将在发送下一条消息时生效</div>
139
+ </div>
140
+ <div id="effortView" class="menu-view effort-panel" hidden>
141
+ <div class="effort-header">
142
+ <button id="fastMode" class="effort-bolt" type="button" role="switch" aria-checked="false" aria-label="快速模式,开启会增加用量" title="快速模式,开启会增加用量" disabled><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"/></svg></button>
143
+ <button id="effortModelButton" class="effort-heading" type="button" title="选择模型"><strong><span id="effortHeadingValue">高</span><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg></strong><span id="effortModelName" class="effort-model-name">GPT-5.6 Sol</span></button>
144
+ </div>
145
+ <div id="effortTrack" class="effort-track" role="group" aria-label="推理强度">
146
+ <span class="effort-rail" aria-hidden="true"><span class="effort-range"></span></span>
147
+ <span class="effort-thumb" aria-hidden="true"></span>
148
+ <div class="effort-options">
149
+ <button class="effort-option" type="button" data-thinking="low" title="轻度" aria-label="轻度"></button>
150
+ <button class="effort-option" type="button" data-thinking="medium" title="中" aria-label="中"></button>
151
+ <button class="effort-option" type="button" data-thinking="high" title="高" aria-label="高"></button>
152
+ <button class="effort-option" type="button" data-thinking="xhigh" title="极高" aria-label="极高"></button>
153
+ <button class="effort-option" type="button" data-thinking="max" title="最高" aria-label="最高"></button>
154
+ <button class="effort-option" type="button" data-thinking="ultra" title="Ultra" aria-label="Ultra"></button>
155
+ </div>
156
+ </div>
157
+ <div class="menu-hint">设置将在发送下一条消息时生效</div>
158
+ </div>
159
+ </div>
160
+ </div>
161
+ <select id="model" class="setting-select" aria-label="模型">
162
+ <option id="currentModel" value=""></option>
163
+ <option value="gpt-6-astra">GPT-6 Astra</option>
164
+ <option value="gpt-5.6-sol">GPT-5.6 Sol</option>
165
+ <option value="gpt-5.6-terra">GPT-5.6 Terra</option>
166
+ <option value="gpt-5.6-luna">GPT-5.6 Luna</option>
167
+ <option value="gpt-5.5">GPT-5.5</option>
168
+ <option value="gpt-5.3-codex-spark">GPT-5.3 Codex Spark</option>
169
+ </select>
170
+ <select id="thinking" class="setting-select" aria-label="推理强度">
171
+ <option id="currentThinking" value=""></option>
172
+ <option value="low">轻度</option>
173
+ <option value="medium">中</option>
174
+ <option value="high">高</option>
175
+ <option value="xhigh">极高</option>
176
+ <option value="max">最高</option>
177
+ <option value="ultra">Ultra</option>
178
+ </select>
179
+ <button id="voice" class="composer-icon-button voice-icon" type="button" title="语音输入暂未实现" aria-label="语音输入暂未实现" disabled><svg class="codex-icon filled" viewBox="0 0 20 20" aria-hidden="true"><g transform="scale(0.8333333333333334)"><path d="M18.5848 13.4121C18.7715 12.9516 19.2961 12.7296 19.7567 12.916C20.217 13.1027 20.4391 13.6274 20.2528 14.0879C19.0405 17.0826 16.2438 19.2675 12.9003 19.6035V22C12.9003 22.4971 12.4969 22.9004 11.9999 22.9004C11.5029 22.9003 11.0995 22.497 11.0995 22V19.6035C7.75618 19.2673 4.96018 17.0823 3.74791 14.0879C3.56144 13.6272 3.78344 13.1026 4.244 12.916C4.70458 12.7298 5.22933 12.9517 5.41588 13.4121C6.46985 16.0157 9.02264 17.8496 12.0008 17.8496C14.9787 17.8493 17.531 16.0155 18.5848 13.4121Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M11.9999 1.34961C14.7061 1.34961 16.9003 3.5438 16.9003 6.25V10.7334C16.9003 13.4396 14.7061 15.6338 11.9999 15.6338C9.29371 15.6337 7.09947 13.4396 7.09947 10.7334V6.25C7.09947 3.54384 9.29372 1.34967 11.9999 1.34961ZM11.9999 3.15039C10.2878 3.15045 8.90025 4.53795 8.90025 6.25V10.7334C8.90025 12.4454 10.2878 13.8339 11.9999 13.834C13.7119 13.834 15.0995 12.4455 15.0995 10.7334V6.25C15.0995 4.53792 13.7119 3.15039 11.9999 3.15039Z"/></g></svg></button>
180
+
181
+ <div class="send-control">
182
+ <button id="sendQueued" class="composer-icon-button send-icon queue-send-icon" type="button" title="排队发送" aria-label="排队发送" hidden><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 14V4"/><path d="m8 8 4-4 4 4"/><path d="M7 17h10"/><path d="M9 20h6"/></svg></button>
183
+ <button id="send" class="composer-icon-button send-icon" type="button" title="发送消息" aria-label="发送消息"><svg class="codex-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 18V6"/><path d="m7.5 10.5 4.5-4.5 4.5 4.5"/></svg></button>
184
+ </div>
185
+ </div>
186
+ </div>
187
+ </div>
188
+ </div>
189
+ </section>
190
+ </main>
191
+ <dialog id="imageViewer" class="image-viewer">
192
+ <div class="image-viewer-shell">
193
+ <button id="imageViewerClose" class="image-viewer-close" type="button" aria-label="关闭图片">×</button>
194
+ <img id="imageViewerImage" alt="">
195
+ </div>
196
+ </dialog>
197
+ <dialog id="usageDialog" class="usage-dialog">
198
+ <div class="usage-dialog-shell">
199
+ <div class="usage-dialog-header"><h3>使用情况</h3><button id="usageDialogClose" class="usage-dialog-close" type="button" aria-label="关闭">×</button></div>
200
+ <div class="usage-plan-row"><span>套餐</span><span id="usagePlan"></span></div>
201
+ <div id="usageRows" aria-live="polite"></div>
202
+ </div>
203
+ </dialog>
204
+
205
+ <script src="server-requests.js"></script>
206
+ <script src="approval-ui.js"></script>
207
+ <script src="/vendor/markdown-it.umd.min.js"></script>
208
+ <script src="highlight.min.js"></script>
209
+ <script src="highlight-powershell.min.js"></script>
210
+ <script src="capabilities.js"></script>
211
+ <script src="timeline-sync.js"></script>
212
+ <script src="harmony-platform.js"></script>
213
+ <script src="client-platform.js"></script>
214
+ <script src="lan-session.js"></script>
215
+ <script src="history-cache.js"></script>
216
+ <script src="p2p-diagnostics.js"></script>
217
+ <script src="p2p-probe.js"></script>
218
+ <script src="self-relay-session.js"></script>
219
+ <script src="chat-transport.js"></script>
220
+ <script src="chat.js"></script>
221
+ </body>
222
+ </html>
@@ -0,0 +1,122 @@
1
+ (function (root) {
2
+ class Subscription extends EventTarget {
3
+ constructor(owner, id, path) { super(); this.owner = owner; this.id = id; this.path = path; this.closed = false; }
4
+ emit(name, data) {
5
+ if (this.closed) return;
6
+ const event = new MessageEvent(name, { data: JSON.stringify(data) });
7
+ this.dispatchEvent(event); this['on' + name]?.(event);
8
+ }
9
+ close() {
10
+ if (this.closed) return;
11
+ this.closed = true; this.owner.subscriptions.delete(this.id);
12
+ if (this.owner.ready) this.owner.sendMessage({ type: 'unsubscribe', id: this.id });
13
+ }
14
+ }
15
+ root.CodexLanSession = class {
16
+ constructor(token) {
17
+ this.token = token; this.serial = 0; this.pending = new Map(); this.subscriptions = new Map(); this.ready = false;
18
+ }
19
+ socketUrl() {
20
+ const url = new URL('/api/socket', root.codexLanConfig?.address || location.origin);
21
+ url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:'; return url.href;
22
+ }
23
+ authenticationMessage() {
24
+ const config = root.codexLanConfig || {};
25
+ return this.token ? { type: 'auth', token: this.token }
26
+ : { type: 'device-auth', clientId: config.clientId, credential: config.credential };
27
+ }
28
+ encodeMessage(message) { return message; }
29
+ createSocket() { return new WebSocket(this.socketUrl()); }
30
+ decodeMessage(message) { return message; }
31
+ closeError(event) { return new TypeError(event.code === 1008 ? '连接被拒绝,请重新配对这台移动设备' : '局域网连接已断开'); }
32
+ sendMessage(message) { this.socket.send(JSON.stringify(this.encodeMessage(message))); }
33
+ connect() {
34
+ if (this.ready) return Promise.resolve();
35
+ if (this.connecting) return this.connecting;
36
+ const socket = this.socket = this.createSocket();
37
+ this.connecting = new Promise((resolve, reject) => {
38
+ let settled = false, failedOnce = false;
39
+ const timer = setTimeout(() => { failed(new TypeError('局域网连接超时')); socket.close(); }, 10000);
40
+ const failed = error => {
41
+ if (failedOnce) return;
42
+ failedOnce = true;
43
+ clearTimeout(timer);
44
+ if (!settled) { settled = true; reject(error); }
45
+ if (this.socket !== socket) return;
46
+ this.ready = false; this.connecting = null;
47
+ this.disconnected = true;
48
+ for (const request of this.pending.values()) {
49
+ clearTimeout(request.timer);
50
+ request.reject(new TypeError(request.write ? '连接已断开,操作结果未确认;请查看恢复后的对话,勿重复发送' : error.message));
51
+ }
52
+ this.pending.clear();
53
+ for (const source of this.subscriptions.values()) source.emit('error', { error: error.message });
54
+ this.onConnectionChange?.('disconnected');
55
+ };
56
+ socket.onopen = () => socket.send(JSON.stringify(this.authenticationMessage()));
57
+ socket.onerror = () => { failed(new TypeError('局域网 WebSocket 连接失败')); socket.close(); };
58
+ socket.onclose = event => {
59
+ const error = this.closeError(event);
60
+ error.code = event.code;
61
+ failed(error);
62
+ };
63
+ socket.onmessage = event => {
64
+ if (this.socket !== socket) return;
65
+ let message;
66
+ try { message = this.decodeMessage(JSON.parse(event.data)); } catch (error) { failed(Object.assign(new TypeError(error.code ? error.message : '无效的连接响应'), { code: error.code })); socket.close(); return; }
67
+ if (!message) return;
68
+ if (message.type === 'ready') {
69
+ clearTimeout(timer); this.ready = true; this.disconnected = false; settled = true; resolve();
70
+ for (const source of this.subscriptions.values()) this.sendSubscription(source);
71
+ } else if (message.type === 'response') {
72
+ const request = this.pending.get(message.id);
73
+ if (request) {
74
+ clearTimeout(request.timer); this.pending.delete(message.id);
75
+ if (message.status >= 400) request.reject(Object.assign(new Error(message.body?.error || '请求失败'), message.body || {}));
76
+ else request.resolve(message.body);
77
+ } else this.subscriptions.get(message.id)?.emit('error', message.body);
78
+ } else {
79
+ const source = this.subscriptions.get(message.id); if (!source) return;
80
+ if (message.type === 'subscribed') source.emit('open', {});
81
+ if (message.type === 'event') source.emit(message.event, message.data);
82
+ if (message.type === 'end') source.emit('error', { error: '订阅已结束,请重新连接' });
83
+ }
84
+ };
85
+ });
86
+ return this.connecting;
87
+ }
88
+ async request(path, options = {}) {
89
+ if (this.disconnected && path !== '/api/health') throw new TypeError('连接已断开,请重新连接后操作');
90
+ await this.connect();
91
+ if (!this.ready) throw new TypeError('局域网连接已断开');
92
+ const id = ++this.serial, method = options.method || 'GET';
93
+ const body = typeof options.body === 'string' ? JSON.parse(options.body) : options.body;
94
+ return new Promise((resolve, reject) => {
95
+ const timer = setTimeout(() => {
96
+ this.pending.delete(id);
97
+ reject(new Error(method !== 'GET' ? '操作响应超时,结果未确认;请查看对话,勿重复发送' : '读取响应超时'));
98
+ }, options.timeoutMs ?? (path === '/api/wait' ? 150000 : 95000));
99
+ this.pending.set(id, { resolve, reject, timer, write: method !== 'GET', path });
100
+ try { this.sendMessage({ type: 'request', id, path, method, body }); }
101
+ catch (error) { clearTimeout(timer); this.pending.delete(id); reject(error); }
102
+ });
103
+ }
104
+ sendSubscription(source) {
105
+ if (!source.closed) this.sendMessage({ type: 'subscribe', id: source.id, path: source.path });
106
+ }
107
+ subscribe(path) {
108
+ const source = new Subscription(this, ++this.serial, path); this.subscriptions.set(source.id, source);
109
+ if (this.ready) queueMicrotask(() => { if (this.ready) this.sendSubscription(source); });
110
+ else if (this.disconnected) queueMicrotask(() => source.emit('error', { error: '连接已断开,请重新连接' }));
111
+ else this.connect().catch(() => {}); // connect reports errors to each subscription.
112
+ return source;
113
+ }
114
+ async pause() {
115
+ const socket = this.socket;
116
+ if (!socket) return;
117
+ // Run the same cleanup immediately; subsequent native close is harmless.
118
+ socket.onclose({ code: 1000 }); this.socket = null; socket.close();
119
+ }
120
+ async resume() { await this.connect(); }
121
+ };
122
+ })(globalThis);
@@ -0,0 +1,28 @@
1
+ (function (root, factory) {
2
+ if (typeof module === 'object' && module.exports) module.exports = factory();
3
+ else root.CodeRelaxP2pDiagnostics = factory();
4
+ })(globalThis, () => class {
5
+ constructor() {
6
+ this.started = Date.now(); this.local = [0, 0, 0, 0, 0]; this.remote = [0, 0, 0, 0, 0];
7
+ this.offer = false; this.answer = false; this.open = false; this.ping = false; this.pong = false;
8
+ this.ice = 'new'; this.gathering = 'new'; this.error = 'none';
9
+ }
10
+ candidate(side, candidate) {
11
+ const type = /\btyp (host|srflx|prflx|relay)\b/.exec(candidate || '')?.[1];
12
+ const index = ['host', 'srflx', 'prflx', 'relay'].indexOf(type);
13
+ const counts = side === 'local' ? this.local : this.remote;
14
+ counts[index < 0 ? 4 : index]++;
15
+ }
16
+ snapshot(stage) {
17
+ const known = (value, choices) => choices.includes(value) ? value : 'unknown';
18
+ const counts = values => values.map(value => Math.min(value, 999)).join(',');
19
+ return `stage=${known(stage, ['verified', 'timeout', 'failed', 'closed', 'complete', 'replaced', 'unsupported'])}` +
20
+ `;ms=${Math.min(Date.now() - this.started, 999999)}` +
21
+ `;offer=${Number(this.offer)};answer=${Number(this.answer)}` +
22
+ `;ice=${known(this.ice, ['new', 'checking', 'connected', 'completed', 'failed', 'disconnected', 'closed'])}` +
23
+ `;gathering=${known(this.gathering, ['new', 'in-progress', 'gathering', 'complete'])}` +
24
+ `;local=${counts(this.local)};remote=${counts(this.remote)}` +
25
+ `;open=${Number(this.open)};ping=${Number(this.ping)};pong=${Number(this.pong)}` +
26
+ `;error=${known(this.error, ['none', 'stun', 'description', 'candidate', 'channel', 'frame', 'peer', 'initialization', 'signal'])}`;
27
+ }
28
+ });