@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.
- package/README.md +93 -71
- package/dist/bin/cleanup-accounts.mjs +63 -0
- package/dist/bin/codex-remote.mjs +325 -184
- package/dist/bin/manage-relay-admin.mjs +20 -0
- package/dist/bin/migrate-relay-db.mjs +109 -0
- package/dist/bin/publish-android-release.mjs +63 -0
- package/dist/bin/publish-harmony-release.mjs +46 -0
- package/dist/bin/release-upload-server.mjs +190 -0
- package/dist/bin/self-relay-admin.mjs +8 -0
- package/dist/bin/self-relay-demo.mjs +2 -2
- package/dist/bin/self-relay-server.mjs +43 -30
- package/dist/build-platform.json +1 -0
- package/dist/get-shared-service-url.ps1 +14 -6
- package/dist/shared/app-server-events.cjs +378 -238
- package/dist/shared/code-browser.cjs +159 -0
- package/dist/shared/file-changes.cjs +31 -0
- package/dist/shared/file-citations.cjs +117 -0
- package/dist/shared/file-mentions.cjs +92 -0
- package/dist/shared/message-delivery.cjs +115 -0
- package/dist/shared/p2p-data-channel.cjs +22 -0
- package/dist/shared/p2p-diagnostics.cjs +1 -1
- package/dist/shared/p2p-file-channel.cjs +87 -0
- package/dist/shared/p2p-ice-policy.cjs +22 -0
- package/dist/shared/plan-pricing.cjs +32 -0
- package/dist/shared/question-attention.cjs +69 -0
- package/dist/shared/server-requests.cjs +250 -6
- package/dist/shared/service-endpoints.cjs +21 -0
- package/dist/shared/timeline-sync.cjs +111 -5
- package/dist/skills/code-relax/SKILL.md +13 -8
- package/dist/src/archived-threads.mjs +22 -0
- package/dist/src/bounded-process-log.mjs +63 -0
- package/dist/src/celsius-client.mjs +107 -0
- package/dist/src/code-browser.mjs +100 -0
- package/dist/src/desktop-launcher.mjs +53 -42
- package/dist/src/dots-approval-timeline.mjs +99 -0
- package/dist/src/dots-avatar.mjs +42 -0
- package/dist/src/dots-chat-projection.mjs +50 -0
- package/dist/src/dots-chat-server.mjs +483 -0
- package/dist/src/dots-message-images.mjs +319 -0
- package/dist/src/dots-profile.mjs +77 -0
- package/dist/src/dots-room-activity.mjs +172 -0
- package/dist/src/dots-room-client.mjs +135 -0
- package/dist/src/dots-room-projection.mjs +94 -0
- package/dist/src/dots-schedules.mjs +66 -0
- package/dist/src/dots-summary-tasks.mjs +32 -0
- package/dist/src/dots-task-catalog.mjs +430 -0
- package/dist/src/dots-task-files.mjs +52 -0
- package/dist/src/file-transfer-range.mjs +22 -0
- package/dist/src/file-upload-session.mjs +130 -0
- package/dist/src/hosted-history-app-server.mjs +103 -0
- package/dist/src/hosted-history-cache.mjs +113 -0
- package/dist/src/lan-socket-server.mjs +241 -84
- package/dist/src/managed-app-server.mjs +210 -44
- package/dist/src/managed-endpoint.mjs +25 -0
- package/dist/src/message-images.mjs +0 -18
- package/dist/src/message-upload-files.mjs +109 -0
- package/dist/src/onboarding.mjs +10 -29
- package/dist/src/plan-pricing.mjs +47 -0
- package/dist/src/platform/README.md +2 -2
- package/dist/src/platform/codex-protocol.mjs +46 -0
- package/dist/src/platform/codex-runtime.mjs +3 -0
- package/dist/src/platform/credential-store.mjs +3 -0
- package/dist/src/platform/desktop-host.mjs +3 -0
- package/dist/src/platform/desktop-project-registration.mjs +3 -0
- package/dist/src/platform/desktop-project-store.mjs +208 -0
- package/dist/src/platform/file-opener.mjs +9 -0
- package/dist/src/platform/linux/codex-runtime.mjs +56 -0
- package/dist/src/platform/linux/credential-store.mjs +28 -0
- package/dist/src/platform/linux/desktop-host.mjs +87 -0
- package/dist/src/platform/linux/desktop-installation.mjs +36 -0
- package/dist/src/platform/linux/desktop-project-registration.mjs +11 -0
- package/dist/src/platform/linux/network-info.mjs +11 -0
- package/dist/src/platform/linux/process.mjs +53 -0
- package/dist/src/platform/linux/project-locations.mjs +17 -0
- package/dist/src/platform/linux/resident-startup.mjs +52 -0
- package/dist/src/platform/linux/retained-runtime.mjs +76 -0
- package/dist/src/platform/linux/service-host.mjs +18 -0
- package/dist/src/platform/linux/system.mjs +50 -0
- package/dist/src/platform/linux/user-environment.mjs +9 -0
- package/dist/src/platform/macos/codex-runtime.mjs +125 -0
- package/dist/src/platform/macos/credential-store.mjs +10 -0
- package/dist/src/platform/macos/desktop-host.mjs +86 -0
- package/dist/src/platform/macos/desktop-project-registration.mjs +11 -0
- package/dist/src/platform/macos/network-info.mjs +8 -0
- package/dist/src/platform/macos/project-locations.mjs +8 -0
- package/dist/src/platform/macos/resident-startup.mjs +84 -0
- package/dist/src/platform/macos/retained-runtime.mjs +127 -0
- package/dist/src/platform/macos/service-host.mjs +18 -0
- package/dist/src/platform/macos/system.mjs +29 -0
- package/dist/src/platform/macos/user-environment.mjs +9 -0
- package/dist/src/platform/native-package.mjs +58 -0
- package/dist/src/platform/network-info.mjs +3 -0
- package/dist/src/platform/path-identity.mjs +5 -0
- package/dist/src/platform/posix/network-candidates.mjs +23 -0
- package/dist/src/platform/posix/runtime-paths.mjs +25 -0
- package/dist/src/platform/power-inhibitor.mjs +22 -0
- package/dist/src/platform/project-locations.mjs +3 -0
- package/dist/src/platform/runtime-paths.mjs +8 -0
- package/dist/src/platform/select.mjs +5 -0
- package/dist/src/platform/service-host.mjs +3 -0
- package/dist/src/platform/user-environment.mjs +3 -0
- package/dist/src/platform/windows/activate-desktop.ps1 +49 -0
- package/dist/src/platform/windows/codex-runtime.mjs +215 -0
- package/dist/src/platform/windows/credential-store.mjs +27 -27
- package/dist/src/platform/windows/credential-store.ps1 +49 -49
- package/dist/src/platform/windows/desktop-helper.mjs +179 -0
- package/dist/src/platform/windows/desktop-host.mjs +50 -23
- package/dist/src/platform/windows/desktop-info.ps1 +38 -16
- package/dist/src/platform/windows/desktop-project-registration.mjs +4 -0
- package/dist/src/platform/windows/desktop-runtime.ps1 +10 -0
- package/dist/src/platform/windows/desktop-shortcuts.ps1 +21 -28
- package/dist/src/platform/windows/dots-profile.mjs +49 -0
- package/dist/src/platform/windows/keep-awake.ps1 +20 -0
- package/dist/src/platform/windows/launch-worker.mjs +17 -18
- package/dist/src/platform/windows/project-locations.mjs +16 -0
- package/dist/src/platform/windows/resident-start.js +20 -0
- package/dist/src/platform/windows/resident-startup.ps1 +76 -20
- package/dist/src/platform/windows/rustdesk-video-probe.mjs +168 -0
- package/dist/src/platform/windows/service-host.mjs +29 -37
- package/dist/src/platform/windows/start-hidden-console.ps1 +11 -2
- package/dist/src/platform/windows/stop-desktop.ps1 +7 -4
- package/dist/src/platform/windows/user-environment.mjs +12 -10
- package/dist/src/project-create.mjs +121 -0
- package/dist/src/project-management.mjs +59 -0
- package/dist/src/project-remove.mjs +55 -0
- package/dist/src/project-update.mjs +59 -0
- package/dist/src/runtime-discovery.mjs +47 -0
- package/dist/src/self-relay/account-cleanup.mjs +30 -0
- package/dist/src/self-relay/account-connections.mjs +52 -0
- package/dist/src/self-relay/admin-cloud.mjs +101 -0
- package/dist/src/self-relay/admin-page.mjs +80 -0
- package/dist/src/self-relay/admin-server.mjs +74 -0
- package/dist/src/self-relay/admin-state.mjs +85 -19
- package/dist/src/self-relay/admin-style.mjs +14 -0
- package/dist/src/self-relay/android-releases.mjs +61 -0
- package/dist/src/self-relay/client.mjs +45 -45
- package/dist/src/self-relay/connector.mjs +421 -144
- package/dist/src/self-relay/demo.mjs +34 -35
- package/dist/src/self-relay/device-info.mjs +27 -0
- package/dist/src/self-relay/device-store.mjs +10 -2
- package/dist/src/self-relay/diagnostics.mjs +54 -0
- package/dist/src/self-relay/email-accounts.mjs +183 -0
- package/dist/src/self-relay/file-wire.mjs +13 -0
- package/dist/src/self-relay/lan-authorizations.mjs +44 -2
- package/dist/src/self-relay/lifecycle.mjs +241 -262
- package/dist/src/self-relay/long-pairing.mjs +40 -0
- package/dist/src/self-relay/mysql-state.mjs +118 -0
- package/dist/src/self-relay/p2p-probe.mjs +56 -11
- package/dist/src/self-relay/privacy-page.mjs +26 -0
- package/dist/src/self-relay/public-releases.mjs +67 -0
- package/dist/src/self-relay/rtc-file-bridge.mjs +41 -0
- package/dist/src/self-relay/server.mjs +653 -115
- package/dist/src/self-relay/usage-daily.mjs +55 -0
- package/dist/src/self-relay/usage-meter.mjs +141 -0
- package/dist/src/server.mjs +1547 -1794
- package/dist/src/service-control.mjs +17 -7
- package/dist/src/service-doctor.mjs +119 -34
- package/dist/src/service-health.mjs +2 -2
- package/dist/src/service-install.mjs +91 -85
- package/dist/src/service-lifecycle.mjs +117 -108
- package/dist/src/service-power.mjs +58 -0
- package/dist/src/service-restart.mjs +45 -12
- package/dist/src/service-update-worker.mjs +42 -0
- package/dist/src/service-update.mjs +77 -0
- package/dist/src/shared-app-server.mjs +561 -407
- package/dist/src/shared-catalog.mjs +95 -13
- package/dist/src/shared-recovery.mjs +24 -14
- package/dist/src/shared-thread-stream.mjs +148 -63
- package/dist/src/skill-install.mjs +0 -13
- package/dist/src/turn-model-history.mjs +47 -0
- package/dist/src/usage-reset.mjs +17 -0
- package/dist/src/workstation-downloads.mjs +120 -0
- package/package.json +35 -37
- package/tools/postinstall.mjs +90 -22
- package/dist/src/app-server-client.mjs +0 -468
- package/dist/src/app-server-tasks.mjs +0 -358
- package/dist/src/debug-ui.mjs +0 -131
- package/dist/src/platform/windows/desktop-monitor.mjs +0 -34
- package/dist/src/platform/windows/desktop-shortcut-run.ps1 +0 -5
- package/dist/src/platform/windows/desktop-tools.mjs +0 -48
- package/dist/src/thread-catalog.mjs +0 -47
- package/dist/tools/find-desktop-pipe.mjs +0 -10
- package/dist/web/activity-view.js +0 -283
- package/dist/web/approval-ui.js +0 -188
- package/dist/web/capabilities.js +0 -57
- package/dist/web/chat-transport.js +0 -202
- package/dist/web/chat.css +0 -782
- package/dist/web/chat.js +0 -3830
- package/dist/web/client-platform.js +0 -11
- package/dist/web/community-view.js +0 -20
- package/dist/web/community.css +0 -77
- package/dist/web/community.html +0 -37
- package/dist/web/composer-controller.js +0 -101
- package/dist/web/conversation-controller.js +0 -99
- package/dist/web/disclosure-state-controller.js +0 -95
- package/dist/web/draft-controller.js +0 -103
- package/dist/web/harmony-platform.js +0 -52
- package/dist/web/highlight-powershell.min.js +0 -39
- package/dist/web/highlight.min.js +0 -1262
- package/dist/web/history-cache.js +0 -240
- package/dist/web/history-controller.js +0 -167
- package/dist/web/index.html +0 -325
- package/dist/web/lan-session.js +0 -122
- package/dist/web/link-action-controller.js +0 -212
- package/dist/web/message-send-controller.js +0 -177
- package/dist/web/message-view.js +0 -98
- package/dist/web/p2p-data-channel.js +0 -50
- package/dist/web/p2p-diagnostics.js +0 -28
- package/dist/web/p2p-probe.js +0 -123
- package/dist/web/page-resume.js +0 -28
- package/dist/web/pending-message-store.js +0 -108
- package/dist/web/queue-controller.js +0 -82
- package/dist/web/resources.json +0 -1
- package/dist/web/self-relay-session.js +0 -129
- package/dist/web/server-requests.js +0 -67
- package/dist/web/station-connection-controller.js +0 -75
- package/dist/web/task-list-view.js +0 -296
- package/dist/web/thread-attention-controller.js +0 -124
- package/dist/web/thread-context-controller.js +0 -30
- package/dist/web/thread-list-controller.js +0 -61
- package/dist/web/thread-list-sync.js +0 -86
- package/dist/web/thread-title-controller.js +0 -57
- package/dist/web/timeline-formatters.js +0 -249
- package/dist/web/timeline-reducer.js +0 -81
- package/dist/web/timeline-renderer.js +0 -161
- package/dist/web/timeline-scroll-controller.js +0 -50
- package/dist/web/timeline-sync.js +0 -67
- package/dist/web/usage-controller.js +0 -258
- package/dist/web/vendor/README.md +0 -14
- package/dist/web/vendor/highlight-powershell.min.js +0 -39
- package/dist/web/vendor/highlight.LICENSE.txt +0 -29
- package/dist/web/vendor/highlight.min.js +0 -1262
- package/dist/web/vendor/lucide.LICENSE.txt +0 -17
- package/node_modules/@img/colour/LICENSE.md +0 -82
- package/node_modules/@img/colour/README.md +0 -15
- package/node_modules/@img/colour/color.cjs +0 -1596
- package/node_modules/@img/colour/index.cjs +0 -1
- package/node_modules/@img/colour/index.d.ts +0 -929
- package/node_modules/@img/colour/package.json +0 -58
- package/node_modules/@img/sharp-win32-x64/LICENSE +0 -191
- package/node_modules/@img/sharp-win32-x64/README.md +0 -59
- package/node_modules/@img/sharp-win32-x64/index.cjs +0 -1
- package/node_modules/@img/sharp-win32-x64/lib/libvips-42.dll +0 -0
- package/node_modules/@img/sharp-win32-x64/lib/libvips-cpp-8.18.6.dll +0 -0
- package/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64-0.35.4.node +0 -0
- package/node_modules/@img/sharp-win32-x64/package.json +0 -40
- package/node_modules/@img/sharp-win32-x64/versions.json +0 -30
- package/node_modules/@node-datachannel/win32-x64-msvc/node_datachannel.node +0 -0
- package/node_modules/@node-datachannel/win32-x64-msvc/package.json +0 -20
- package/node_modules/ansi-regex/index.d.ts +0 -37
- package/node_modules/ansi-regex/index.js +0 -10
- package/node_modules/ansi-regex/license +0 -9
- package/node_modules/ansi-regex/package.json +0 -55
- package/node_modules/ansi-regex/readme.md +0 -78
- package/node_modules/ansi-styles/index.d.ts +0 -345
- package/node_modules/ansi-styles/index.js +0 -163
- package/node_modules/ansi-styles/license +0 -9
- package/node_modules/ansi-styles/package.json +0 -56
- package/node_modules/ansi-styles/readme.md +0 -152
- package/node_modules/camelcase/index.d.ts +0 -63
- package/node_modules/camelcase/index.js +0 -76
- package/node_modules/camelcase/license +0 -9
- package/node_modules/camelcase/package.json +0 -43
- package/node_modules/camelcase/readme.md +0 -99
- package/node_modules/cliui/CHANGELOG.md +0 -76
- package/node_modules/cliui/LICENSE.txt +0 -14
- package/node_modules/cliui/README.md +0 -115
- package/node_modules/cliui/index.js +0 -354
- package/node_modules/cliui/package.json +0 -65
- package/node_modules/color-convert/CHANGELOG.md +0 -54
- package/node_modules/color-convert/LICENSE +0 -21
- package/node_modules/color-convert/README.md +0 -68
- package/node_modules/color-convert/conversions.js +0 -839
- package/node_modules/color-convert/index.js +0 -81
- package/node_modules/color-convert/package.json +0 -48
- package/node_modules/color-convert/route.js +0 -97
- package/node_modules/color-name/LICENSE +0 -8
- package/node_modules/color-name/README.md +0 -11
- package/node_modules/color-name/index.js +0 -152
- package/node_modules/color-name/package.json +0 -28
- package/node_modules/decamelize/index.js +0 -13
- package/node_modules/decamelize/license +0 -21
- package/node_modules/decamelize/package.json +0 -38
- package/node_modules/decamelize/readme.md +0 -48
- package/node_modules/detect-libc/LICENSE +0 -201
- package/node_modules/detect-libc/README.md +0 -163
- package/node_modules/detect-libc/index.d.ts +0 -14
- package/node_modules/detect-libc/lib/detect-libc.js +0 -313
- package/node_modules/detect-libc/lib/elf.js +0 -39
- package/node_modules/detect-libc/lib/filesystem.js +0 -51
- package/node_modules/detect-libc/lib/process.js +0 -24
- package/node_modules/detect-libc/package.json +0 -44
- package/node_modules/dijkstrajs/.travis.yml +0 -4
- package/node_modules/dijkstrajs/CONTRIBUTING.md +0 -8
- package/node_modules/dijkstrajs/LICENSE.md +0 -19
- package/node_modules/dijkstrajs/README.md +0 -18
- package/node_modules/dijkstrajs/dijkstra.js +0 -165
- package/node_modules/dijkstrajs/package.json +0 -60
- package/node_modules/dijkstrajs/test/dijkstra.test.js +0 -96
- package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
- package/node_modules/emoji-regex/README.md +0 -73
- package/node_modules/emoji-regex/es2015/index.js +0 -6
- package/node_modules/emoji-regex/es2015/text.js +0 -6
- package/node_modules/emoji-regex/index.d.ts +0 -23
- package/node_modules/emoji-regex/index.js +0 -6
- package/node_modules/emoji-regex/package.json +0 -50
- package/node_modules/emoji-regex/text.js +0 -6
- package/node_modules/find-up/index.d.ts +0 -137
- package/node_modules/find-up/index.js +0 -89
- package/node_modules/find-up/license +0 -9
- package/node_modules/find-up/package.json +0 -53
- package/node_modules/find-up/readme.md +0 -156
- package/node_modules/get-caller-file/LICENSE.md +0 -6
- package/node_modules/get-caller-file/README.md +0 -41
- package/node_modules/get-caller-file/index.d.ts +0 -2
- package/node_modules/get-caller-file/index.js +0 -22
- package/node_modules/get-caller-file/index.js.map +0 -1
- package/node_modules/get-caller-file/package.json +0 -42
- package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
- package/node_modules/is-fullwidth-code-point/index.js +0 -50
- package/node_modules/is-fullwidth-code-point/license +0 -9
- package/node_modules/is-fullwidth-code-point/package.json +0 -42
- package/node_modules/is-fullwidth-code-point/readme.md +0 -39
- package/node_modules/locate-path/index.d.ts +0 -83
- package/node_modules/locate-path/index.js +0 -65
- package/node_modules/locate-path/license +0 -9
- package/node_modules/locate-path/package.json +0 -45
- package/node_modules/locate-path/readme.md +0 -122
- package/node_modules/node-datachannel/.clang-format +0 -17
- package/node_modules/node-datachannel/.editorconfig +0 -12
- package/node_modules/node-datachannel/.eslintignore +0 -8
- package/node_modules/node-datachannel/.eslintrc.json +0 -27
- package/node_modules/node-datachannel/.gitmodules +0 -3
- package/node_modules/node-datachannel/.prettierignore +0 -7
- package/node_modules/node-datachannel/.prettierrc +0 -13
- package/node_modules/node-datachannel/API.md +0 -247
- package/node_modules/node-datachannel/BULDING.md +0 -26
- package/node_modules/node-datachannel/CMakeLists.txt +0 -153
- package/node_modules/node-datachannel/LICENSE +0 -373
- package/node_modules/node-datachannel/README.md +0 -129
- package/node_modules/node-datachannel/dist/cjs/index.cjs +0 -11
- package/node_modules/node-datachannel/dist/cjs/index.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs +0 -101
- package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/lib/index.cjs +0 -91
- package/node_modules/node-datachannel/dist/cjs/lib/index.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs +0 -94
- package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs +0 -45
- package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs +0 -8
- package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs +0 -86
- package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs +0 -34
- package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs +0 -34
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs +0 -214
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs +0 -53
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs +0 -83
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs +0 -132
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs +0 -94
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs +0 -434
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs +0 -59
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs +0 -45
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs +0 -42
- package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/index.mjs +0 -8
- package/node_modules/node-datachannel/dist/esm/index.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs +0 -78
- package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/lib/index.mjs +0 -64
- package/node_modules/node-datachannel/dist/esm/lib/index.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs +0 -78
- package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs +0 -43
- package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs +0 -6
- package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs +0 -82
- package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs +0 -28
- package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs +0 -30
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs +0 -210
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs +0 -49
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs +0 -79
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs +0 -128
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs +0 -89
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs +0 -430
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs +0 -55
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs +0 -41
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs +0 -27
- package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/types/lib/datachannel-stream.d.ts +0 -24
- package/node_modules/node-datachannel/dist/types/lib/index.d.ts +0 -241
- package/node_modules/node-datachannel/dist/types/lib/types.d.ts +0 -119
- package/node_modules/node-datachannel/dist/types/lib/websocket-server.d.ts +0 -13
- package/node_modules/node-datachannel/dist/types/lib/websocket.d.ts +0 -25
- package/node_modules/node-datachannel/dist/types/polyfill/Events.d.ts +0 -15
- package/node_modules/node-datachannel/dist/types/polyfill/RTCCertificate.d.ts +0 -9
- package/node_modules/node-datachannel/dist/types/polyfill/RTCDataChannel.d.ts +0 -29
- package/node_modules/node-datachannel/dist/types/polyfill/RTCDtlsTransport.d.ts +0 -15
- package/node_modules/node-datachannel/dist/types/polyfill/RTCError.d.ts +0 -17
- package/node_modules/node-datachannel/dist/types/polyfill/RTCIceCandidate.d.ts +0 -21
- package/node_modules/node-datachannel/dist/types/polyfill/RTCIceTransport.d.ts +0 -30
- package/node_modules/node-datachannel/dist/types/polyfill/RTCPeerConnection.d.ts +0 -64
- package/node_modules/node-datachannel/dist/types/polyfill/RTCSctpTransport.d.ts +0 -15
- package/node_modules/node-datachannel/dist/types/polyfill/RTCSessionDescription.d.ts +0 -10
- package/node_modules/node-datachannel/dist/types/polyfill/index.d.ts +0 -26
- package/node_modules/node-datachannel/jest.config.ts +0 -14
- package/node_modules/node-datachannel/package.json +0 -133
- package/node_modules/node-datachannel/rollup.config.mjs +0 -67
- package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.cpp +0 -530
- package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.h +0 -63
- package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.cpp +0 -172
- package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.h +0 -43
- package/node_modules/node-datachannel/src/cpp/main.cpp +0 -58
- package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.cpp +0 -457
- package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.h +0 -52
- package/node_modules/node-datachannel/src/cpp/media-av1packetization.cpp +0 -24
- package/node_modules/node-datachannel/src/cpp/media-av1packetization.h +0 -11
- package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.cpp +0 -126
- package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.h +0 -29
- package/node_modules/node-datachannel/src/cpp/media-direction.cpp +0 -43
- package/node_modules/node-datachannel/src/cpp/media-direction.h +0 -10
- package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.cpp +0 -126
- package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.h +0 -30
- package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.cpp +0 -126
- package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.h +0 -30
- package/node_modules/node-datachannel/src/cpp/media-h26xseparator.cpp +0 -32
- package/node_modules/node-datachannel/src/cpp/media-h26xseparator.h +0 -11
- package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.cpp +0 -31
- package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.h +0 -11
- package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.cpp +0 -79
- package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.h +0 -28
- package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.cpp +0 -68
- package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.h +0 -28
- package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.cpp +0 -57
- package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.h +0 -28
- package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.cpp +0 -93
- package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.h +0 -30
- package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.cpp +0 -167
- package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.h +0 -35
- package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.cpp +0 -95
- package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.h +0 -30
- package/node_modules/node-datachannel/src/cpp/media-track-wrapper.cpp +0 -458
- package/node_modules/node-datachannel/src/cpp/media-track-wrapper.h +0 -61
- package/node_modules/node-datachannel/src/cpp/media-video-wrapper.cpp +0 -526
- package/node_modules/node-datachannel/src/cpp/media-video-wrapper.h +0 -56
- package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.cpp +0 -1298
- package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.h +0 -89
- package/node_modules/node-datachannel/src/cpp/rtc-wrapper.cpp +0 -205
- package/node_modules/node-datachannel/src/cpp/rtc-wrapper.h +0 -24
- package/node_modules/node-datachannel/src/cpp/thread-safe-callback.cpp +0 -57
- package/node_modules/node-datachannel/src/cpp/thread-safe-callback.h +0 -47
- package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.cpp +0 -275
- package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.h +0 -41
- package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.cpp +0 -796
- package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.h +0 -63
- package/node_modules/node-datachannel/src/index.ts +0 -9
- package/node_modules/node-datachannel/src/lib/datachannel-stream.ts +0 -100
- package/node_modules/node-datachannel/src/lib/index.ts +0 -290
- package/node_modules/node-datachannel/src/lib/node-datachannel.ts +0 -84
- package/node_modules/node-datachannel/src/lib/types.ts +0 -169
- package/node_modules/node-datachannel/src/lib/websocket-server.ts +0 -37
- package/node_modules/node-datachannel/src/lib/websocket.ts +0 -26
- package/node_modules/node-datachannel/src/polyfill/Events.ts +0 -82
- package/node_modules/node-datachannel/src/polyfill/Exception.ts +0 -37
- package/node_modules/node-datachannel/src/polyfill/README.md +0 -41
- package/node_modules/node-datachannel/src/polyfill/RTCCertificate.ts +0 -21
- package/node_modules/node-datachannel/src/polyfill/RTCDataChannel.ts +0 -225
- package/node_modules/node-datachannel/src/polyfill/RTCDtlsTransport.ts +0 -46
- package/node_modules/node-datachannel/src/polyfill/RTCError.ts +0 -78
- package/node_modules/node-datachannel/src/polyfill/RTCIceCandidate.ts +0 -128
- package/node_modules/node-datachannel/src/polyfill/RTCIceTransport.ts +0 -90
- package/node_modules/node-datachannel/src/polyfill/RTCPeerConnection.ts +0 -527
- package/node_modules/node-datachannel/src/polyfill/RTCSctpTransport.ts +0 -51
- package/node_modules/node-datachannel/src/polyfill/RTCSessionDescription.ts +0 -41
- package/node_modules/node-datachannel/src/polyfill/index.ts +0 -38
- package/node_modules/node-datachannel/tsconfig.json +0 -21
- package/node_modules/p-limit/index.d.ts +0 -38
- package/node_modules/p-limit/index.js +0 -57
- package/node_modules/p-limit/license +0 -9
- package/node_modules/p-limit/package.json +0 -52
- package/node_modules/p-limit/readme.md +0 -101
- package/node_modules/p-locate/index.d.ts +0 -64
- package/node_modules/p-locate/index.js +0 -52
- package/node_modules/p-locate/license +0 -9
- package/node_modules/p-locate/package.json +0 -53
- package/node_modules/p-locate/readme.md +0 -90
- package/node_modules/p-try/index.d.ts +0 -39
- package/node_modules/p-try/index.js +0 -9
- package/node_modules/p-try/license +0 -9
- package/node_modules/p-try/package.json +0 -42
- package/node_modules/p-try/readme.md +0 -58
- package/node_modules/path-exists/index.d.ts +0 -28
- package/node_modules/path-exists/index.js +0 -23
- package/node_modules/path-exists/license +0 -9
- package/node_modules/path-exists/package.json +0 -39
- package/node_modules/path-exists/readme.md +0 -52
- package/node_modules/pngjs/.eslintignore +0 -2
- package/node_modules/pngjs/.eslintrc.json +0 -19
- package/node_modules/pngjs/.prettierignore +0 -3
- package/node_modules/pngjs/LICENSE +0 -20
- package/node_modules/pngjs/README.md +0 -429
- package/node_modules/pngjs/browser.js +0 -16096
- package/node_modules/pngjs/coverage/lcov-report/base.css +0 -354
- package/node_modules/pngjs/coverage/lcov-report/bitmapper.js.html +0 -881
- package/node_modules/pngjs/coverage/lcov-report/bitpacker.js.html +0 -554
- package/node_modules/pngjs/coverage/lcov-report/block-navigation.js +0 -77
- package/node_modules/pngjs/coverage/lcov-report/chunkstream.js.html +0 -647
- package/node_modules/pngjs/coverage/lcov-report/constants.js.html +0 -176
- package/node_modules/pngjs/coverage/lcov-report/crc.js.html +0 -200
- package/node_modules/pngjs/coverage/lcov-report/favicon.png +0 -0
- package/node_modules/pngjs/coverage/lcov-report/filter-pack.js.html +0 -593
- package/node_modules/pngjs/coverage/lcov-report/filter-parse-async.js.html +0 -152
- package/node_modules/pngjs/coverage/lcov-report/filter-parse-sync.js.html +0 -143
- package/node_modules/pngjs/coverage/lcov-report/filter-parse.js.html +0 -611
- package/node_modules/pngjs/coverage/lcov-report/format-normaliser.js.html +0 -359
- package/node_modules/pngjs/coverage/lcov-report/index.html +0 -426
- package/node_modules/pngjs/coverage/lcov-report/interlace.js.html +0 -365
- package/node_modules/pngjs/coverage/lcov-report/packer-async.js.html +0 -230
- package/node_modules/pngjs/coverage/lcov-report/packer-sync.js.html +0 -248
- package/node_modules/pngjs/coverage/lcov-report/packer.js.html +0 -467
- package/node_modules/pngjs/coverage/lcov-report/paeth-predictor.js.html +0 -128
- package/node_modules/pngjs/coverage/lcov-report/parser-async.js.html +0 -575
- package/node_modules/pngjs/coverage/lcov-report/parser-sync.js.html +0 -404
- package/node_modules/pngjs/coverage/lcov-report/parser.js.html +0 -950
- package/node_modules/pngjs/coverage/lcov-report/png-sync.js.html +0 -116
- package/node_modules/pngjs/coverage/lcov-report/png.js.html +0 -662
- package/node_modules/pngjs/coverage/lcov-report/prettify.css +0 -101
- package/node_modules/pngjs/coverage/lcov-report/prettify.js +0 -1007
- package/node_modules/pngjs/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/node_modules/pngjs/coverage/lcov-report/sorter.js +0 -169
- package/node_modules/pngjs/coverage/lcov-report/sync-inflate.js.html +0 -584
- package/node_modules/pngjs/coverage/lcov-report/sync-reader.js.html +0 -215
- package/node_modules/pngjs/coverage/lcov.info +0 -2177
- package/node_modules/pngjs/lib/bitmapper.js +0 -267
- package/node_modules/pngjs/lib/bitpacker.js +0 -158
- package/node_modules/pngjs/lib/chunkstream.js +0 -189
- package/node_modules/pngjs/lib/constants.js +0 -32
- package/node_modules/pngjs/lib/crc.js +0 -40
- package/node_modules/pngjs/lib/filter-pack.js +0 -171
- package/node_modules/pngjs/lib/filter-parse-async.js +0 -24
- package/node_modules/pngjs/lib/filter-parse-sync.js +0 -21
- package/node_modules/pngjs/lib/filter-parse.js +0 -177
- package/node_modules/pngjs/lib/format-normaliser.js +0 -93
- package/node_modules/pngjs/lib/interlace.js +0 -95
- package/node_modules/pngjs/lib/packer-async.js +0 -50
- package/node_modules/pngjs/lib/packer-sync.js +0 -56
- package/node_modules/pngjs/lib/packer.js +0 -129
- package/node_modules/pngjs/lib/paeth-predictor.js +0 -16
- package/node_modules/pngjs/lib/parser-async.js +0 -165
- package/node_modules/pngjs/lib/parser-sync.js +0 -108
- package/node_modules/pngjs/lib/parser.js +0 -290
- package/node_modules/pngjs/lib/png-sync.js +0 -12
- package/node_modules/pngjs/lib/png.js +0 -194
- package/node_modules/pngjs/lib/sync-inflate.js +0 -168
- package/node_modules/pngjs/lib/sync-reader.js +0 -45
- package/node_modules/pngjs/package.json +0 -73
- package/node_modules/qrcode/README.md +0 -770
- package/node_modules/qrcode/bin/qrcode +0 -159
- package/node_modules/qrcode/helper/to-sjis-browser.js +0 -2
- package/node_modules/qrcode/helper/to-sjis.js +0 -105
- package/node_modules/qrcode/lib/browser.js +0 -76
- package/node_modules/qrcode/lib/can-promise.js +0 -7
- package/node_modules/qrcode/lib/core/alignment-pattern.js +0 -83
- package/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -59
- package/node_modules/qrcode/lib/core/bit-buffer.js +0 -37
- package/node_modules/qrcode/lib/core/bit-matrix.js +0 -65
- package/node_modules/qrcode/lib/core/byte-data.js +0 -30
- package/node_modules/qrcode/lib/core/error-correction-code.js +0 -135
- package/node_modules/qrcode/lib/core/error-correction-level.js +0 -50
- package/node_modules/qrcode/lib/core/finder-pattern.js +0 -22
- package/node_modules/qrcode/lib/core/format-info.js +0 -29
- package/node_modules/qrcode/lib/core/galois-field.js +0 -69
- package/node_modules/qrcode/lib/core/kanji-data.js +0 -54
- package/node_modules/qrcode/lib/core/mask-pattern.js +0 -234
- package/node_modules/qrcode/lib/core/mode.js +0 -167
- package/node_modules/qrcode/lib/core/numeric-data.js +0 -43
- package/node_modules/qrcode/lib/core/polynomial.js +0 -62
- package/node_modules/qrcode/lib/core/qrcode.js +0 -495
- package/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -56
- package/node_modules/qrcode/lib/core/regex.js +0 -31
- package/node_modules/qrcode/lib/core/segments.js +0 -330
- package/node_modules/qrcode/lib/core/utils.js +0 -63
- package/node_modules/qrcode/lib/core/version-check.js +0 -9
- package/node_modules/qrcode/lib/core/version.js +0 -163
- package/node_modules/qrcode/lib/index.js +0 -12
- package/node_modules/qrcode/lib/renderer/canvas.js +0 -63
- package/node_modules/qrcode/lib/renderer/png.js +0 -78
- package/node_modules/qrcode/lib/renderer/svg-tag.js +0 -81
- package/node_modules/qrcode/lib/renderer/svg.js +0 -19
- package/node_modules/qrcode/lib/renderer/terminal/terminal-small.js +0 -85
- package/node_modules/qrcode/lib/renderer/terminal/terminal.js +0 -49
- package/node_modules/qrcode/lib/renderer/terminal.js +0 -9
- package/node_modules/qrcode/lib/renderer/utf8.js +0 -71
- package/node_modules/qrcode/lib/renderer/utils.js +0 -99
- package/node_modules/qrcode/lib/server.js +0 -138
- package/node_modules/qrcode/license +0 -10
- package/node_modules/qrcode/package.json +0 -77
- package/node_modules/require-directory/.jshintrc +0 -67
- package/node_modules/require-directory/.npmignore +0 -1
- package/node_modules/require-directory/.travis.yml +0 -3
- package/node_modules/require-directory/LICENSE +0 -22
- package/node_modules/require-directory/README.markdown +0 -184
- package/node_modules/require-directory/index.js +0 -86
- package/node_modules/require-directory/package.json +0 -40
- package/node_modules/require-main-filename/CHANGELOG.md +0 -26
- package/node_modules/require-main-filename/LICENSE.txt +0 -14
- package/node_modules/require-main-filename/README.md +0 -26
- package/node_modules/require-main-filename/index.js +0 -18
- package/node_modules/require-main-filename/package.json +0 -35
- package/node_modules/semver/LICENSE +0 -15
- package/node_modules/semver/README.md +0 -680
- package/node_modules/semver/bin/semver.js +0 -195
- package/node_modules/semver/classes/comparator.js +0 -143
- package/node_modules/semver/classes/index.js +0 -7
- package/node_modules/semver/classes/range.js +0 -577
- package/node_modules/semver/classes/semver.js +0 -350
- package/node_modules/semver/functions/clean.js +0 -8
- package/node_modules/semver/functions/cmp.js +0 -54
- package/node_modules/semver/functions/coerce.js +0 -62
- package/node_modules/semver/functions/compare-build.js +0 -9
- package/node_modules/semver/functions/compare-loose.js +0 -5
- package/node_modules/semver/functions/compare.js +0 -7
- package/node_modules/semver/functions/diff.js +0 -60
- package/node_modules/semver/functions/eq.js +0 -5
- package/node_modules/semver/functions/gt.js +0 -5
- package/node_modules/semver/functions/gte.js +0 -5
- package/node_modules/semver/functions/inc.js +0 -21
- package/node_modules/semver/functions/lt.js +0 -5
- package/node_modules/semver/functions/lte.js +0 -5
- package/node_modules/semver/functions/major.js +0 -5
- package/node_modules/semver/functions/minor.js +0 -5
- package/node_modules/semver/functions/neq.js +0 -5
- package/node_modules/semver/functions/parse.js +0 -18
- package/node_modules/semver/functions/patch.js +0 -5
- package/node_modules/semver/functions/prerelease.js +0 -8
- package/node_modules/semver/functions/rcompare.js +0 -5
- package/node_modules/semver/functions/rsort.js +0 -5
- package/node_modules/semver/functions/satisfies.js +0 -12
- package/node_modules/semver/functions/sort.js +0 -5
- package/node_modules/semver/functions/truncate.js +0 -48
- package/node_modules/semver/functions/valid.js +0 -8
- package/node_modules/semver/index.js +0 -93
- package/node_modules/semver/internal/constants.js +0 -37
- package/node_modules/semver/internal/debug.js +0 -11
- package/node_modules/semver/internal/identifiers.js +0 -29
- package/node_modules/semver/internal/lrucache.js +0 -42
- package/node_modules/semver/internal/parse-options.js +0 -17
- package/node_modules/semver/internal/re.js +0 -223
- package/node_modules/semver/package.json +0 -78
- package/node_modules/semver/preload.js +0 -4
- package/node_modules/semver/range.bnf +0 -17
- package/node_modules/semver/ranges/gtr.js +0 -6
- package/node_modules/semver/ranges/intersects.js +0 -9
- package/node_modules/semver/ranges/ltr.js +0 -6
- package/node_modules/semver/ranges/max-satisfying.js +0 -27
- package/node_modules/semver/ranges/min-satisfying.js +0 -26
- package/node_modules/semver/ranges/min-version.js +0 -63
- package/node_modules/semver/ranges/outside.js +0 -82
- package/node_modules/semver/ranges/simplify.js +0 -49
- package/node_modules/semver/ranges/subset.js +0 -249
- package/node_modules/semver/ranges/to-comparators.js +0 -10
- package/node_modules/semver/ranges/valid.js +0 -13
- package/node_modules/set-blocking/CHANGELOG.md +0 -26
- package/node_modules/set-blocking/LICENSE.txt +0 -14
- package/node_modules/set-blocking/README.md +0 -31
- package/node_modules/set-blocking/index.js +0 -7
- package/node_modules/set-blocking/package.json +0 -42
- package/node_modules/sharp/LICENSE +0 -191
- package/node_modules/sharp/README.md +0 -112
- package/node_modules/sharp/dist/channel.cjs +0 -177
- package/node_modules/sharp/dist/channel.mjs +0 -177
- package/node_modules/sharp/dist/colour.cjs +0 -199
- package/node_modules/sharp/dist/colour.mjs +0 -199
- package/node_modules/sharp/dist/composite.cjs +0 -213
- package/node_modules/sharp/dist/composite.mjs +0 -213
- package/node_modules/sharp/dist/constructor.cjs +0 -511
- package/node_modules/sharp/dist/constructor.mjs +0 -511
- package/node_modules/sharp/dist/index.cjs +0 -25
- package/node_modules/sharp/dist/index.d.cts +0 -1999
- package/node_modules/sharp/dist/index.d.mts +0 -2046
- package/node_modules/sharp/dist/index.mjs +0 -25
- package/node_modules/sharp/dist/input.cjs +0 -819
- package/node_modules/sharp/dist/input.mjs +0 -819
- package/node_modules/sharp/dist/is.cjs +0 -143
- package/node_modules/sharp/dist/is.mjs +0 -143
- package/node_modules/sharp/dist/libvips.cjs +0 -212
- package/node_modules/sharp/dist/libvips.mjs +0 -212
- package/node_modules/sharp/dist/operation.cjs +0 -1002
- package/node_modules/sharp/dist/operation.mjs +0 -1002
- package/node_modules/sharp/dist/output.cjs +0 -1785
- package/node_modules/sharp/dist/output.mjs +0 -1785
- package/node_modules/sharp/dist/resize.cjs +0 -617
- package/node_modules/sharp/dist/resize.mjs +0 -617
- package/node_modules/sharp/dist/sharp.cjs +0 -174
- package/node_modules/sharp/dist/sharp.mjs +0 -174
- package/node_modules/sharp/dist/utility.cjs +0 -301
- package/node_modules/sharp/dist/utility.mjs +0 -301
- package/node_modules/sharp/install/build.js +0 -38
- package/node_modules/sharp/lib/index.d.ts +0 -1999
- package/node_modules/sharp/package.json +0 -227
- package/node_modules/sharp/src/binding.gyp +0 -303
- package/node_modules/sharp/src/common.cc +0 -1186
- package/node_modules/sharp/src/common.h +0 -421
- package/node_modules/sharp/src/metadata.cc +0 -404
- package/node_modules/sharp/src/metadata.h +0 -95
- package/node_modules/sharp/src/operations.cc +0 -516
- package/node_modules/sharp/src/operations.h +0 -137
- package/node_modules/sharp/src/pipeline.cc +0 -1948
- package/node_modules/sharp/src/pipeline.h +0 -422
- package/node_modules/sharp/src/sharp.cc +0 -43
- package/node_modules/sharp/src/stats.cc +0 -186
- package/node_modules/sharp/src/stats.h +0 -62
- package/node_modules/sharp/src/utilities.cc +0 -289
- package/node_modules/sharp/src/utilities.h +0 -22
- package/node_modules/string-width/index.d.ts +0 -29
- package/node_modules/string-width/index.js +0 -47
- package/node_modules/string-width/license +0 -9
- package/node_modules/string-width/package.json +0 -56
- package/node_modules/string-width/readme.md +0 -50
- package/node_modules/strip-ansi/index.d.ts +0 -17
- package/node_modules/strip-ansi/index.js +0 -4
- package/node_modules/strip-ansi/license +0 -9
- package/node_modules/strip-ansi/package.json +0 -54
- package/node_modules/strip-ansi/readme.md +0 -46
- package/node_modules/which-module/LICENSE +0 -13
- package/node_modules/which-module/README.md +0 -58
- package/node_modules/which-module/index.js +0 -9
- package/node_modules/which-module/package.json +0 -41
- package/node_modules/wrap-ansi/index.js +0 -186
- package/node_modules/wrap-ansi/license +0 -9
- package/node_modules/wrap-ansi/package.json +0 -61
- package/node_modules/wrap-ansi/readme.md +0 -97
- package/node_modules/ws/LICENSE +0 -20
- package/node_modules/ws/README.md +0 -548
- package/node_modules/ws/browser.js +0 -8
- package/node_modules/ws/index.js +0 -22
- package/node_modules/ws/lib/buffer-util.js +0 -131
- package/node_modules/ws/lib/constants.js +0 -19
- package/node_modules/ws/lib/event-target.js +0 -292
- package/node_modules/ws/lib/extension.js +0 -203
- package/node_modules/ws/lib/limiter.js +0 -55
- package/node_modules/ws/lib/permessage-deflate.js +0 -530
- package/node_modules/ws/lib/receiver.js +0 -743
- package/node_modules/ws/lib/sender.js +0 -607
- package/node_modules/ws/lib/stream.js +0 -161
- package/node_modules/ws/lib/subprotocol.js +0 -62
- package/node_modules/ws/lib/validation.js +0 -152
- package/node_modules/ws/lib/websocket-server.js +0 -562
- package/node_modules/ws/lib/websocket.js +0 -1407
- package/node_modules/ws/package.json +0 -74
- package/node_modules/ws/wrapper.mjs +0 -21
- package/node_modules/y18n/CHANGELOG.md +0 -35
- package/node_modules/y18n/LICENSE +0 -13
- package/node_modules/y18n/README.md +0 -109
- package/node_modules/y18n/index.js +0 -188
- package/node_modules/y18n/package.json +0 -39
- package/node_modules/yargs/CHANGELOG.md +0 -420
- package/node_modules/yargs/LICENSE +0 -21
- package/node_modules/yargs/README.md +0 -140
- package/node_modules/yargs/build/lib/apply-extends.d.ts +0 -2
- package/node_modules/yargs/build/lib/apply-extends.js +0 -65
- package/node_modules/yargs/build/lib/argsert.d.ts +0 -2
- package/node_modules/yargs/build/lib/argsert.js +0 -65
- package/node_modules/yargs/build/lib/command.d.ts +0 -64
- package/node_modules/yargs/build/lib/command.js +0 -416
- package/node_modules/yargs/build/lib/common-types.d.ts +0 -36
- package/node_modules/yargs/build/lib/common-types.js +0 -25
- package/node_modules/yargs/build/lib/completion-templates.d.ts +0 -2
- package/node_modules/yargs/build/lib/completion-templates.js +0 -50
- package/node_modules/yargs/build/lib/completion.d.ts +0 -21
- package/node_modules/yargs/build/lib/completion.js +0 -135
- package/node_modules/yargs/build/lib/is-promise.d.ts +0 -1
- package/node_modules/yargs/build/lib/is-promise.js +0 -9
- package/node_modules/yargs/build/lib/levenshtein.d.ts +0 -1
- package/node_modules/yargs/build/lib/levenshtein.js +0 -58
- package/node_modules/yargs/build/lib/middleware.d.ts +0 -10
- package/node_modules/yargs/build/lib/middleware.js +0 -57
- package/node_modules/yargs/build/lib/obj-filter.d.ts +0 -1
- package/node_modules/yargs/build/lib/obj-filter.js +0 -14
- package/node_modules/yargs/build/lib/parse-command.d.ts +0 -11
- package/node_modules/yargs/build/lib/parse-command.js +0 -36
- package/node_modules/yargs/build/lib/process-argv.d.ts +0 -2
- package/node_modules/yargs/build/lib/process-argv.js +0 -31
- package/node_modules/yargs/build/lib/usage.d.ts +0 -49
- package/node_modules/yargs/build/lib/usage.js +0 -540
- package/node_modules/yargs/build/lib/validation.d.ts +0 -34
- package/node_modules/yargs/build/lib/validation.js +0 -330
- package/node_modules/yargs/build/lib/yargs.d.ts +0 -274
- package/node_modules/yargs/build/lib/yargs.js +0 -1190
- package/node_modules/yargs/build/lib/yerror.d.ts +0 -4
- package/node_modules/yargs/build/lib/yerror.js +0 -11
- package/node_modules/yargs/index.js +0 -40
- package/node_modules/yargs/locales/be.json +0 -46
- package/node_modules/yargs/locales/de.json +0 -46
- package/node_modules/yargs/locales/en.json +0 -51
- package/node_modules/yargs/locales/es.json +0 -46
- package/node_modules/yargs/locales/fi.json +0 -49
- package/node_modules/yargs/locales/fr.json +0 -53
- package/node_modules/yargs/locales/hi.json +0 -49
- package/node_modules/yargs/locales/hu.json +0 -46
- package/node_modules/yargs/locales/id.json +0 -50
- package/node_modules/yargs/locales/it.json +0 -46
- package/node_modules/yargs/locales/ja.json +0 -51
- package/node_modules/yargs/locales/ko.json +0 -49
- package/node_modules/yargs/locales/nb.json +0 -44
- package/node_modules/yargs/locales/nl.json +0 -49
- package/node_modules/yargs/locales/nn.json +0 -44
- package/node_modules/yargs/locales/pirate.json +0 -13
- package/node_modules/yargs/locales/pl.json +0 -49
- package/node_modules/yargs/locales/pt.json +0 -45
- package/node_modules/yargs/locales/pt_BR.json +0 -48
- package/node_modules/yargs/locales/ru.json +0 -46
- package/node_modules/yargs/locales/th.json +0 -46
- package/node_modules/yargs/locales/tr.json +0 -48
- package/node_modules/yargs/locales/zh_CN.json +0 -48
- package/node_modules/yargs/locales/zh_TW.json +0 -47
- package/node_modules/yargs/package.json +0 -92
- package/node_modules/yargs/yargs.js +0 -14
- package/node_modules/yargs-parser/CHANGELOG.md +0 -601
- package/node_modules/yargs-parser/LICENSE.txt +0 -14
- package/node_modules/yargs-parser/README.md +0 -449
- package/node_modules/yargs-parser/index.js +0 -1032
- package/node_modules/yargs-parser/lib/tokenize-arg-string.js +0 -40
- package/node_modules/yargs-parser/package.json +0 -46
|
@@ -1,49 +1,73 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
|
+
import { executableKey } from './platform/path-identity.mjs';
|
|
2
3
|
import net from 'node:net';
|
|
4
|
+
import { randomUUID } from 'node:crypto';
|
|
3
5
|
import path from 'node:path';
|
|
4
6
|
import { EventEmitter } from 'node:events';
|
|
5
7
|
import { setTimeout as delay } from 'node:timers/promises';
|
|
6
8
|
import { readRecord, writeRecord } from './service-lifecycle.mjs';
|
|
7
9
|
import { SharedAppServer } from './shared-app-server.mjs';
|
|
10
|
+
import { pruneRetainedDesktopRuntimes, resolveCodexRuntime, runtimeFilesAvailable } from './platform/codex-runtime.mjs';
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
|
|
12
|
+
import { defaultManagedPort, managedProcessUrl } from './managed-endpoint.mjs';
|
|
13
|
+
import { configureManagedEnvironment } from './platform/user-environment.mjs';
|
|
14
|
+
export const managedAppServerLauncherRevision = 3;
|
|
11
15
|
const retryDelays = [1_000, 2_000, 5_000, 10_000, 20_000];
|
|
12
16
|
|
|
13
|
-
export function managedPortAvailable() {
|
|
17
|
+
export function managedPortAvailable(port = defaultManagedPort) {
|
|
14
18
|
return new Promise(resolve => {
|
|
15
19
|
const server = net.createServer();
|
|
16
20
|
server.once('error', () => resolve(false));
|
|
17
|
-
server.listen(
|
|
21
|
+
server.listen(port, '127.0.0.1', () => server.close(() => resolve(true)));
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export function availableManagedPort() {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
const server = net.createServer();
|
|
27
|
+
server.once('error', reject);
|
|
28
|
+
server.listen(0, '127.0.0.1', () => {
|
|
29
|
+
const port = server.address().port;
|
|
30
|
+
server.close(error => error ? reject(error) : resolve(port));
|
|
31
|
+
});
|
|
18
32
|
});
|
|
19
33
|
}
|
|
20
34
|
|
|
21
35
|
export class ManagedAppServer extends EventEmitter {
|
|
22
36
|
constructor({ stateRoot, host, environment = process.env, available = managedPortAvailable,
|
|
23
|
-
wait = delay, timeout = 30_000, now = Date.now, client = new SharedAppServer(
|
|
37
|
+
wait = delay, timeout = 30_000, now = Date.now, client = new SharedAppServer(`ws://127.0.0.1:${defaultManagedPort}`),
|
|
38
|
+
selectPort = availableManagedPort, configureEnvironment = configureManagedEnvironment, resolveRuntime = resolveCodexRuntime }) {
|
|
24
39
|
super();
|
|
25
40
|
this.stateRoot = stateRoot;
|
|
26
41
|
this.host = host;
|
|
27
42
|
this.environment = environment;
|
|
28
43
|
this.available = available;
|
|
44
|
+
this.selectPort = selectPort;
|
|
45
|
+
this.configureEnvironment = configureEnvironment;
|
|
46
|
+
this.resolveRuntime = resolveRuntime;
|
|
29
47
|
this.wait = wait;
|
|
30
48
|
this.timeout = timeout;
|
|
31
49
|
this.now = now;
|
|
32
50
|
this.recordPath = path.join(stateRoot, 'managed-app-server.json');
|
|
33
|
-
this.
|
|
51
|
+
this.pendingPath = path.join(stateRoot, 'managed-app-server.pending.json');
|
|
52
|
+
this.lockPath = path.join(stateRoot, 'managed-app-server.lock');
|
|
34
53
|
this.client = client;
|
|
35
54
|
this.state = { state: 'absent', ready: false, error: null };
|
|
55
|
+
this.client.diagnosticIdentity = () => ({ kernelPid: this.state.pid ?? null, kernelCreated: this.state.created ?? null });
|
|
36
56
|
this.restartStatus = null;
|
|
37
57
|
this.stopped = true;
|
|
38
58
|
this.restarting = false;
|
|
39
59
|
this.retryAttempt = 0;
|
|
40
60
|
this.retryAfter = 0;
|
|
41
61
|
this.client.on('disconnected', () => {
|
|
42
|
-
if (!this.stopped && !this.restarting) this.failed('Codex 内核连接断开。');
|
|
62
|
+
if (!this.stopped && !this.restarting && !this.work) this.failed('Codex 内核连接断开。');
|
|
43
63
|
});
|
|
44
64
|
}
|
|
45
65
|
|
|
46
|
-
snapshot() {
|
|
66
|
+
snapshot() {
|
|
67
|
+
return { ...this.state,
|
|
68
|
+
version: this.state.ready && this.client.ready ? this.client.serverVersion || null : null,
|
|
69
|
+
...(this.restartStatus ? { restart: { ...this.restartStatus } } : {}) };
|
|
70
|
+
}
|
|
47
71
|
|
|
48
72
|
async start() {
|
|
49
73
|
this.stopped = false;
|
|
@@ -59,56 +83,183 @@ export class ManagedAppServer extends EventEmitter {
|
|
|
59
83
|
return this.work;
|
|
60
84
|
}
|
|
61
85
|
|
|
62
|
-
async ensureNow() {
|
|
86
|
+
async ensureNow(lockHeld = false) {
|
|
63
87
|
// Keep an already verified instance available while the periodic identity
|
|
64
88
|
// check runs; publishing "starting" every three seconds makes health flicker.
|
|
65
89
|
if (!this.state.ready) this.publish({ state: 'starting', ready: false, error: null });
|
|
66
90
|
try {
|
|
67
91
|
fs.mkdirSync(this.stateRoot, { recursive: true });
|
|
68
|
-
const
|
|
69
|
-
if (!
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
92
|
+
const release = lockHeld ? () => {} : await this.acquireLock();
|
|
93
|
+
if (!release) return false;
|
|
94
|
+
try {
|
|
95
|
+
const pending = readRecord(this.pendingPath);
|
|
96
|
+
if (pending?.phase === 'spawning') throw new Error('上次内核启动的进程交接未完成,已停止自动启动以避免重复内核;请检查内核启动日志与 managed-app-server.pending.json。');
|
|
97
|
+
let record = pending || readRecord(this.recordPath);
|
|
98
|
+
let actual = record?.pid ? await this.host.process(record.pid) : null;
|
|
99
|
+
if (actual && !sameManagedProcess(record, actual)) {
|
|
100
|
+
// Stale PID now belongs to someone else: leave it untouched and select
|
|
101
|
+
// another available endpoint rather than adopting or stopping it.
|
|
102
|
+
actual = null;
|
|
103
|
+
record = null;
|
|
104
|
+
}
|
|
105
|
+
const startedHere = !actual;
|
|
106
|
+
const savedRuntime = actual ? readRecord(path.join(this.stateRoot, 'codex-runtime.json')) : null;
|
|
107
|
+
const runtime = actual && savedRuntime?.executable && runtimeFilesAvailable(savedRuntime.executable)
|
|
108
|
+
? savedRuntime
|
|
109
|
+
: await this.resolveRuntime(this.stateRoot, { refresh: !actual, environment: this.environment });
|
|
110
|
+
if (actual && !runtimeFilesAvailable(actual.executable)) {
|
|
111
|
+
throw new Error(`运行中的 Codex 内核目录已被移除或缺少配套 code-mode-host:${actual.executable};请确认重启内核。`);
|
|
74
112
|
}
|
|
75
113
|
if (!actual) {
|
|
76
|
-
|
|
77
|
-
const childEnvironment = { ...this.environment };
|
|
114
|
+
fs.rmSync(this.pendingPath, { force: true });
|
|
115
|
+
const childEnvironment = { ...this.environment, CODEX_HOME: runtime.codexHome, RUST_LOG: 'warn' };
|
|
78
116
|
for (const key of ['CODEX_APP_SERVER_WS_URL', 'CODEX_APP_SERVER_FORCE_CLI', 'CODEX_APP_TOOLS_PIPE_PATH']) delete childEnvironment[key];
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
117
|
+
for (const key of Object.keys(childEnvironment)) {
|
|
118
|
+
if (/^npm_/iu.test(key) || key.toUpperCase() === 'INIT_CWD') delete childEnvironment[key];
|
|
119
|
+
}
|
|
120
|
+
// A probe cannot reserve a port for another process. Retry only when our
|
|
121
|
+
// previous child has definitely exited, never on a live unready kernel.
|
|
122
|
+
for (let attempt = 0; attempt < 5; attempt++) {
|
|
123
|
+
const preferred = attempt === 0 ? Number(managedProcessUrl(record)?.split(':').at(-1)) || defaultManagedPort : 0;
|
|
124
|
+
const port = preferred && await this.available(preferred) ? preferred : await this.selectPort();
|
|
125
|
+
const url = `ws://127.0.0.1:${port}`;
|
|
126
|
+
// Commit intent before spawning: if the launcher dies before it can
|
|
127
|
+
// record the child PID, a successor must fail closed, not duplicate it.
|
|
128
|
+
writeRecord(this.pendingPath, { phase: 'spawning', url, executable: runtime.executable, startedAt: new Date().toISOString() });
|
|
129
|
+
const pid = await this.host.start(runtime.executable, ['app-server', '--listen', url], childEnvironment,
|
|
130
|
+
[path.join(this.stateRoot, 'managed-app-server.stdout.log'), path.join(this.stateRoot, 'managed-app-server.stderr.log')]);
|
|
131
|
+
const started = await this.host.process(pid);
|
|
132
|
+
if (!started) {
|
|
133
|
+
fs.rmSync(this.pendingPath, { force: true });
|
|
134
|
+
if (attempt < 4) continue;
|
|
135
|
+
throw new Error('Codex 内核启动后退出,动态端口尝试已用完。');
|
|
136
|
+
}
|
|
137
|
+
record = { ...started, url, launcherRevision: managedAppServerLauncherRevision };
|
|
138
|
+
if (!sameManagedProcess(record, started) || executableKey(started.executable) !== executableKey(runtime.executable)) {
|
|
139
|
+
throw new Error('Codex 内核启动后进程身份无法确认,未启动第二个实例。');
|
|
140
|
+
}
|
|
141
|
+
// Private ownership journal is not a published endpoint. It prevents
|
|
142
|
+
// duplicate children even if the launcher crashes before readiness.
|
|
143
|
+
writeRecord(this.pendingPath, record);
|
|
144
|
+
actual = started;
|
|
145
|
+
try { await this.connectReady(record); break; }
|
|
146
|
+
catch (error) {
|
|
147
|
+
const remaining = await this.host.process(pid);
|
|
148
|
+
if (remaining || attempt === 4) throw error;
|
|
149
|
+
fs.rmSync(this.pendingPath, { force: true });
|
|
150
|
+
actual = null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
} else await this.connectReady(record);
|
|
154
|
+
const url = managedProcessUrl(record);
|
|
155
|
+
// Do not publish a guessed port or update Desktop before ownership,
|
|
156
|
+
// readiness and protocol initialization have all succeeded.
|
|
157
|
+
if (this.publishedUrl !== url) await this.configureEnvironment(this.stateRoot, url);
|
|
158
|
+
this.environment.CODEX_APP_SERVER_WS_URL = url;
|
|
159
|
+
process.env.CODEX_APP_SERVER_WS_URL = url;
|
|
160
|
+
if (this.publishedUrl !== url || readRecord(this.pendingPath)) writeRecord(this.recordPath, { ...record, url });
|
|
161
|
+
this.publishedUrl = url;
|
|
162
|
+
fs.rmSync(this.pendingPath, { force: true });
|
|
163
|
+
if (startedHere) {
|
|
164
|
+
try { await pruneRetainedDesktopRuntimes(this.stateRoot, actual.executable); }
|
|
165
|
+
catch (error) { console.error('旧版 Codex 内核文件清理失败:', error); }
|
|
87
166
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const preferredExecutable = path.resolve(info.cli);
|
|
92
|
-
const updatePending = path.resolve(actual.executable).toLowerCase() !== preferredExecutable.toLowerCase();
|
|
167
|
+
const preferredExecutable = path.resolve(runtime.executable);
|
|
168
|
+
const updatePending = executableKey(actual.executable) !== executableKey(preferredExecutable);
|
|
169
|
+
const launcherRevision = Number.isSafeInteger(record?.launcherRevision) ? record.launcherRevision : 0;
|
|
93
170
|
this.retryAttempt = 0;
|
|
94
171
|
this.retryAfter = 0;
|
|
95
172
|
this.publish({ state: 'ready', ready: true, error: null, pid: actual.pid,
|
|
96
173
|
created: actual.created, executable: actual.executable, preferredExecutable,
|
|
97
|
-
updatePending,
|
|
174
|
+
updatePending, launcherRevision, selectedVersion: runtime.version, source: runtime.source,
|
|
175
|
+
launcherRestartRequired: launcherRevision !== managedAppServerLauncherRevision,
|
|
176
|
+
url });
|
|
98
177
|
return true;
|
|
178
|
+
} finally { release(); }
|
|
99
179
|
} catch (error) {
|
|
100
180
|
this.failed(error instanceof Error ? error.message : String(error));
|
|
101
181
|
return false;
|
|
102
182
|
}
|
|
103
183
|
}
|
|
104
184
|
|
|
185
|
+
async acquireLock() {
|
|
186
|
+
const token = randomUUID();
|
|
187
|
+
const temporary = `${this.lockPath}.${token}.tmp`;
|
|
188
|
+
const owner = await this.host.process(process.pid);
|
|
189
|
+
if (!owner) throw new Error('启动器进程身份无法确认。');
|
|
190
|
+
try {
|
|
191
|
+
// Publish a fully written record atomically; a crash cannot leave an
|
|
192
|
+
// empty lock that has no identifiable owner.
|
|
193
|
+
fs.writeFileSync(temporary, JSON.stringify({ ...owner, token }), { flag: 'wx', mode: 0o600 });
|
|
194
|
+
try { fs.linkSync(temporary, this.lockPath); }
|
|
195
|
+
catch (error) {
|
|
196
|
+
if (error.code !== 'EEXIST') throw error;
|
|
197
|
+
const previous = readRecord(this.lockPath);
|
|
198
|
+
if (!previous?.token) throw new Error('内核启动锁无法识别,请检查 managed-app-server.lock。');
|
|
199
|
+
const actual = await this.host.process(previous.pid);
|
|
200
|
+
if (!actual || actual.created !== previous.created || executableKey(actual.executable) !== executableKey(previous.executable)) {
|
|
201
|
+
// One permanent tombstone per abandoned generation means two stale
|
|
202
|
+
// observers cannot delete a replacement owner's lock (ABA race).
|
|
203
|
+
if (await this.claimRecovery(previous, this.lockPath, temporary)) {
|
|
204
|
+
if (readRecord(this.lockPath)?.token === previous.token) fs.rmSync(this.lockPath, { force: true });
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
return () => { if (readRecord(this.lockPath)?.token === token) fs.rmSync(this.lockPath, { force: true }); };
|
|
210
|
+
} finally { fs.rmSync(temporary, { force: true }); }
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
async claimRecovery(previous, target, ownerFile, depth = 0) {
|
|
214
|
+
if (depth > 16) throw new Error('内核启动锁多次异常中断,请检查启动器日志。');
|
|
215
|
+
const recovered = `${this.lockPath}.${previous.token}.recovered`;
|
|
216
|
+
try { fs.linkSync(ownerFile, recovered); return true; }
|
|
217
|
+
catch (error) { if (error.code !== 'EEXIST') throw error; }
|
|
218
|
+
const claimant = readRecord(recovered);
|
|
219
|
+
if (!claimant?.token) throw new Error('内核启动锁回收记录无法识别。');
|
|
220
|
+
const actual = await this.host.process(claimant.pid);
|
|
221
|
+
if (actual && actual.created === claimant.created && executableKey(actual.executable) === executableKey(claimant.executable)) return false;
|
|
222
|
+
// A reclaimer can itself crash. Keep an append-only ownership chain so its
|
|
223
|
+
// successor can complete cleanup without allowing two live reclaimers.
|
|
224
|
+
return this.claimRecovery(claimant, recovered, ownerFile, depth + 1);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
async connectReady(expected) {
|
|
228
|
+
const url = managedProcessUrl(expected);
|
|
229
|
+
if (!url) throw new Error('Codex 内核地址无效。');
|
|
230
|
+
await this.waitUntilReady(expected);
|
|
231
|
+
if (this.client.url !== url) {
|
|
232
|
+
await this.disconnectClient();
|
|
233
|
+
this.client.url = url;
|
|
234
|
+
}
|
|
235
|
+
await this.client.connect();
|
|
236
|
+
if (!this.client.ready || !sameManagedProcess(expected, await this.host.process(expected.pid))
|
|
237
|
+
|| !await this.host.ownsListener(expected, url)) {
|
|
238
|
+
this.client.close();
|
|
239
|
+
throw new Error('Codex 内核协议初始化或监听进程验证未完成。');
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
async disconnectClient() {
|
|
244
|
+
const socket = this.client.socket;
|
|
245
|
+
this.client.close();
|
|
246
|
+
if (socket && socket.readyState !== 3) {
|
|
247
|
+
await new Promise(resolve => {
|
|
248
|
+
const timer = setTimeout(() => { socket.terminate(); }, 1000);
|
|
249
|
+
socket.once('close', () => { clearTimeout(timer); resolve(); });
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
this.client.ready = false;
|
|
253
|
+
}
|
|
254
|
+
|
|
105
255
|
async waitUntilReady(expected) {
|
|
256
|
+
const url = managedProcessUrl(expected);
|
|
106
257
|
const deadline = this.now() + this.timeout;
|
|
107
258
|
while (true) {
|
|
108
259
|
const actual = await this.host.process(expected.pid);
|
|
109
260
|
if (!sameManagedProcess(expected, actual)) throw new Error('Codex 内核在就绪前退出。');
|
|
110
|
-
if (await this.host.ready(
|
|
111
|
-
if (this.now() >= deadline) throw new Error('Codex 内核未在 30
|
|
261
|
+
if (await this.host.ownsListener(expected, url) && await this.host.ready(url.replace('ws:', 'http:') + '/readyz')) return;
|
|
262
|
+
if (this.now() >= deadline) throw new Error('Codex 内核未在 30 秒内就绪;保留已启动实例,不会另起重复内核。');
|
|
112
263
|
await this.wait(250);
|
|
113
264
|
}
|
|
114
265
|
}
|
|
@@ -130,28 +281,40 @@ export class ManagedAppServer extends EventEmitter {
|
|
|
130
281
|
|
|
131
282
|
async restartNow() {
|
|
132
283
|
this.restarting = true;
|
|
284
|
+
await this.work;
|
|
133
285
|
const previous = this.state;
|
|
286
|
+
let release;
|
|
134
287
|
this.publish({ ...previous, state: 'restarting', ready: false, error: null });
|
|
135
288
|
try {
|
|
136
|
-
|
|
289
|
+
release = await this.acquireLock();
|
|
290
|
+
if (!release) throw new Error('另一个内核启动操作正在进行,请稍后重试。');
|
|
291
|
+
const pending = readRecord(this.pendingPath);
|
|
292
|
+
if (pending?.phase === 'spawning') throw new Error('上次内核启动交接未完成,无法安全重启未知进程;请检查内核启动日志。');
|
|
293
|
+
const record = pending || readRecord(this.recordPath);
|
|
137
294
|
const actual = record?.pid ? await this.host.process(record.pid) : null;
|
|
138
295
|
if (actual && !sameManagedProcess(record, actual)) {
|
|
139
296
|
throw new Error('Codex 内核进程身份已经变化,未结束任何进程。');
|
|
140
297
|
}
|
|
141
298
|
this.restartStage('stopping');
|
|
142
|
-
|
|
299
|
+
// Resolve the replacement before stopping the current working process.
|
|
300
|
+
const runtime = await this.resolveRuntime(this.stateRoot, { refresh: true, environment: this.environment });
|
|
301
|
+
const desktop = await this.host.prepareKernelRestart?.();
|
|
302
|
+
await this.disconnectClient();
|
|
143
303
|
if (actual) {
|
|
144
|
-
await this.host.stop(actual.pid);
|
|
304
|
+
await this.host.stop(actual.pid, actual);
|
|
145
305
|
await this.waitUntilStopped(actual);
|
|
146
|
-
} else if (!await this.available()) {
|
|
147
|
-
throw new Error('45839 被未识别进程占用,未结束任何进程。');
|
|
148
306
|
}
|
|
149
|
-
fs.rmSync(this.
|
|
307
|
+
fs.rmSync(this.pendingPath, { force: true });
|
|
308
|
+
this.publishedUrl = null;
|
|
150
309
|
this.retryAttempt = 0;
|
|
151
310
|
this.retryAfter = 0;
|
|
152
311
|
this.restartStage('starting');
|
|
153
|
-
const ready = await this.ensureNow();
|
|
312
|
+
const ready = await this.ensureNow(true);
|
|
154
313
|
if (!ready) throw new Error(this.state.error || 'Codex 内核未能重新启动。');
|
|
314
|
+
const desktopEnvironment = { ...this.environment, CODEX_HOME: runtime.codexHome, CODEX_APP_SERVER_WS_URL: this.state.url };
|
|
315
|
+
delete desktopEnvironment.CODEX_APP_SERVER_FORCE_CLI;
|
|
316
|
+
delete desktopEnvironment.CODEX_APP_TOOLS_PIPE_PATH;
|
|
317
|
+
await this.host.resumeAfterKernelRestart?.(desktop, desktopEnvironment);
|
|
155
318
|
this.restartStatus = { ...this.restartStatus, status: 'completed', stage: 'ready',
|
|
156
319
|
completedAt: new Date(this.now()).toISOString() };
|
|
157
320
|
this.emit('state', this.snapshot());
|
|
@@ -162,6 +325,7 @@ export class ManagedAppServer extends EventEmitter {
|
|
|
162
325
|
completedAt: new Date(this.now()).toISOString() };
|
|
163
326
|
this.emit('state', this.snapshot());
|
|
164
327
|
} finally {
|
|
328
|
+
release?.();
|
|
165
329
|
this.restarting = false;
|
|
166
330
|
}
|
|
167
331
|
}
|
|
@@ -175,7 +339,7 @@ export class ManagedAppServer extends EventEmitter {
|
|
|
175
339
|
const deadline = this.now() + 10_000;
|
|
176
340
|
while (true) {
|
|
177
341
|
const actual = await this.host.process(expected.pid);
|
|
178
|
-
if (!sameManagedProcess(expected, actual)
|
|
342
|
+
if (!sameManagedProcess(expected, actual)) return;
|
|
179
343
|
if (this.now() >= deadline) throw new Error('Codex 内核未在 10 秒内退出;不会启动第二个实例。');
|
|
180
344
|
await this.wait(100);
|
|
181
345
|
}
|
|
@@ -201,7 +365,9 @@ export class ManagedAppServer extends EventEmitter {
|
|
|
201
365
|
|
|
202
366
|
export function sameManagedProcess(record, actual) {
|
|
203
367
|
if (!record || !actual || record.pid !== actual.pid || record.created !== actual.created) return false;
|
|
204
|
-
if (
|
|
205
|
-
const
|
|
206
|
-
|
|
368
|
+
if (!record.executable || !actual.executable || executableKey(record.executable) !== executableKey(actual.executable)) return false;
|
|
369
|
+
const url = managedProcessUrl(record);
|
|
370
|
+
if (!url || managedProcessUrl(actual) !== url) return false;
|
|
371
|
+
return Array.isArray(actual.args) ? JSON.stringify(record.args) === JSON.stringify(actual.args)
|
|
372
|
+
: record.command === actual.command;
|
|
207
373
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { readRecord } from './service-lifecycle.mjs';
|
|
3
|
+
|
|
4
|
+
export const defaultManagedPort = 45839;
|
|
5
|
+
export function managedEndpointUrl(value) {
|
|
6
|
+
if (typeof value !== 'string' || !/^ws:\/\/127\.0\.0\.1:[1-9][0-9]{0,4}$/.test(value)) return null;
|
|
7
|
+
const port = Number(value.slice(value.lastIndexOf(':') + 1));
|
|
8
|
+
return port <= 65535 ? `ws://127.0.0.1:${port}` : null;
|
|
9
|
+
}
|
|
10
|
+
export function managedProcessUrl(record) {
|
|
11
|
+
if (!record) return null;
|
|
12
|
+
let value;
|
|
13
|
+
if (Array.isArray(record.args)) {
|
|
14
|
+
if (record.args.length !== 4 || record.args[1] !== 'app-server' || record.args[2] !== '--listen') return null;
|
|
15
|
+
value = record.args[3];
|
|
16
|
+
} else {
|
|
17
|
+
const match = /^\s*(?:"[^"]+"|\S+)\s+app-server\s+--listen\s+(?:"(ws:\/\/127\.0\.0\.1:[0-9]+)"|(ws:\/\/127\.0\.0\.1:[0-9]+))\s*$/i.exec(record.command || '');
|
|
18
|
+
value = match?.[1] || match?.[2];
|
|
19
|
+
}
|
|
20
|
+
const url = managedEndpointUrl(value);
|
|
21
|
+
return url && (!record.url || record.url === url) ? url : null;
|
|
22
|
+
}
|
|
23
|
+
export function readManagedEndpoint(stateRoot) {
|
|
24
|
+
return managedProcessUrl(readRecord(path.join(stateRoot, 'managed-app-server.json')));
|
|
25
|
+
}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import fs from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import crypto from 'node:crypto';
|
|
4
|
-
import sharp from 'sharp';
|
|
5
|
-
|
|
6
1
|
export function validateInlineImage(value) {
|
|
7
2
|
const data = typeof value === 'string' ? value.slice(value.indexOf(',') + 1) : '';
|
|
8
3
|
if (typeof value !== 'string' || value.length > Math.ceil(8 * 1024 * 1024 / 3) * 4 + 64 ||
|
|
@@ -12,16 +7,3 @@ export function validateInlineImage(value) {
|
|
|
12
7
|
}
|
|
13
8
|
return value;
|
|
14
9
|
}
|
|
15
|
-
|
|
16
|
-
// Only the Desktop tool compatibility path needs a file visible to the host.
|
|
17
|
-
export async function persistLegacyImage(value, directory) {
|
|
18
|
-
validateInlineImage(value);
|
|
19
|
-
const input = Buffer.from(value.slice(value.indexOf(',') + 1), 'base64');
|
|
20
|
-
const buffer = await sharp(input, { limitInputPixels: 40_000_000 }).rotate()
|
|
21
|
-
.resize({ width: 2560, height: 2560, fit: 'inside', withoutEnlargement: true }).webp({ quality: 88 }).toBuffer();
|
|
22
|
-
const id = crypto.createHash('sha256').update(buffer).digest('hex');
|
|
23
|
-
await fs.mkdir(directory, { recursive: true });
|
|
24
|
-
const file = path.join(directory, `${id}.webp`);
|
|
25
|
-
await fs.writeFile(file, buffer);
|
|
26
|
-
return file;
|
|
27
|
-
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import crypto from 'node:crypto';
|
|
4
|
+
import sharp from 'sharp';
|
|
5
|
+
import media from '../shared/code-browser.cjs';
|
|
6
|
+
import { validateInlineImage } from './message-images.mjs';
|
|
7
|
+
import { createFileUploadSession, FILE_CHUNK_BYTES, MAX_FILE_BYTES, MAX_FILE_COUNT, MAX_TOTAL_BYTES } from './file-upload-session.mjs';
|
|
8
|
+
import { fileRevision } from './file-transfer-range.mjs';
|
|
9
|
+
|
|
10
|
+
const mimeTypes = { pdf: 'application/pdf', txt: 'text/plain', md: 'text/markdown', csv: 'text/csv',
|
|
11
|
+
json: 'application/json', zip: 'application/zip', doc: 'application/msword',
|
|
12
|
+
docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
13
|
+
xls: 'application/vnd.ms-excel', xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
14
|
+
ppt: 'application/vnd.ms-powerpoint', pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation' };
|
|
15
|
+
|
|
16
|
+
// Reuse the incoming-file contract without sending workstation bytes to the phone.
|
|
17
|
+
export async function stageWorkstationMessageFile(file, uploadsRoot) {
|
|
18
|
+
const handle = await fs.open(file.path, 'r');
|
|
19
|
+
const session = createFileUploadSession(uploadsRoot);
|
|
20
|
+
try {
|
|
21
|
+
const stat = await handle.stat();
|
|
22
|
+
if (!stat.isFile() || stat.size < 1 || stat.size > MAX_FILE_BYTES) throw new Error('附件为空或超过 20 MiB。');
|
|
23
|
+
const validate = async () => {
|
|
24
|
+
if (fileRevision(await handle.stat()) !== file.revision || fileRevision(await fs.stat(file.path)) !== file.revision) {
|
|
25
|
+
throw new Error('电脑文件已变化,请重新添加。');
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
await validate();
|
|
29
|
+
const bytes = Buffer.alloc(stat.size);
|
|
30
|
+
for (let offset = 0; offset < bytes.length;) {
|
|
31
|
+
const { bytesRead } = await handle.read(bytes, offset, bytes.length - offset, offset);
|
|
32
|
+
if (!bytesRead) throw new Error('电脑文件读取不完整,请重新添加。');
|
|
33
|
+
offset += bytesRead;
|
|
34
|
+
}
|
|
35
|
+
await validate();
|
|
36
|
+
const sha256 = crypto.createHash('sha256').update(bytes).digest('hex');
|
|
37
|
+
const started = await session.receive({ type: 'start', name: file.name, size: bytes.length, sha256 });
|
|
38
|
+
for (let offset = 0; offset < bytes.length; offset += FILE_CHUNK_BYTES) {
|
|
39
|
+
await session.receive({ type: 'chunk', id: started.id, offset, data: bytes.subarray(offset, offset + FILE_CHUNK_BYTES) });
|
|
40
|
+
}
|
|
41
|
+
await validate();
|
|
42
|
+
const result = await session.receive({ type: 'finish', id: started.id });
|
|
43
|
+
await session.receive({ type: 'commit' });
|
|
44
|
+
return { ...result, mediaKind: media.mediaKind(file),
|
|
45
|
+
mimeType: media.mediaMime(file) || mimeTypes[path.extname(file.name).slice(1).toLowerCase()] || 'application/octet-stream' };
|
|
46
|
+
} finally { await handle.close(); await session.close(); }
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async function localFile(file, directory) {
|
|
50
|
+
if (typeof file?.path !== 'string' || typeof file.name !== 'string' || !file.name || /[\r\n\0]/.test(file.name)) {
|
|
51
|
+
throw new Error('附件信息无效,请重新选择。');
|
|
52
|
+
}
|
|
53
|
+
const root = await fs.realpath(directory), resolved = await fs.realpath(file.path);
|
|
54
|
+
if (path.relative(root, path.dirname(resolved)) !== '') throw new Error('附件必须来自本次工作站上传目录。');
|
|
55
|
+
const handle = await fs.open(resolved, 'r');
|
|
56
|
+
try {
|
|
57
|
+
const stat = await handle.stat();
|
|
58
|
+
if (!stat.isFile() || stat.size < 1 || stat.size > MAX_FILE_BYTES) throw new Error('附件为空或超过 20 MiB。');
|
|
59
|
+
const bytes = await handle.readFile();
|
|
60
|
+
if (bytes.length !== stat.size) throw new Error('附件在读取时发生变化,请重新上传。');
|
|
61
|
+
const mimeType = media.mediaMime(file) || mimeTypes[path.extname(file.name).slice(1).toLowerCase()] || 'application/octet-stream';
|
|
62
|
+
if (!/^[a-z0-9.+-]+\/[a-z0-9.+-]+$/i.test(mimeType)) throw new Error('附件类型无效。');
|
|
63
|
+
return { name: file.name, mimeType, bytes };
|
|
64
|
+
} finally { await handle.close(); }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export async function readMessageUploads(body, uploadsRoot) {
|
|
68
|
+
const images = body.images ?? [], originals = body.originalImages ?? [], files = body.files ?? [];
|
|
69
|
+
if (![images, originals, files].every(Array.isArray) || images.length + originals.length > 4 || files.length + originals.length > MAX_FILE_COUNT) {
|
|
70
|
+
throw new Error('每条消息最多 4 张图片、4 个文件。');
|
|
71
|
+
}
|
|
72
|
+
const uploads = [];
|
|
73
|
+
let imageBytes = 0, fileBytes = 0;
|
|
74
|
+
for (const image of images) {
|
|
75
|
+
let file;
|
|
76
|
+
if (typeof image === 'string' && image.startsWith('data:')) {
|
|
77
|
+
validateInlineImage(image);
|
|
78
|
+
const mimeType = image.slice(5, image.indexOf(';'));
|
|
79
|
+
file = { name: `image.${mimeType.split('/')[1]}`, mimeType, bytes: Buffer.from(image.slice(image.indexOf(',') + 1), 'base64') };
|
|
80
|
+
} else {
|
|
81
|
+
if (typeof image !== 'string' || !/^[a-f0-9]{64}$/.test(image)) throw new Error('图片标识无效。');
|
|
82
|
+
let extension = 'webp';
|
|
83
|
+
try { await fs.access(path.join(uploadsRoot, `${image}.webp`)); }
|
|
84
|
+
catch (error) { if (error.code !== 'ENOENT') throw error; extension = 'png'; }
|
|
85
|
+
file = await localFile({ path: path.join(uploadsRoot, `${image}.${extension}`), name: `image.${extension}` }, uploadsRoot);
|
|
86
|
+
}
|
|
87
|
+
imageBytes += file.bytes.length;
|
|
88
|
+
if (imageBytes > 8 * 1024 * 1024) throw new Error('压缩图片合计不能超过 8 MiB。');
|
|
89
|
+
uploads.push(file);
|
|
90
|
+
}
|
|
91
|
+
for (const original of originals) {
|
|
92
|
+
if (typeof original !== 'string' || !/\.(png|jpe?g|webp|gif)$/i.test(original)) throw new Error('原图路径无效。');
|
|
93
|
+
}
|
|
94
|
+
for (const file of [...originals.map(value => ({ path: value, name: path.basename(value) })), ...files]) {
|
|
95
|
+
const uploaded = await localFile(file, path.join(uploadsRoot, 'incoming'));
|
|
96
|
+
fileBytes += uploaded.bytes.length;
|
|
97
|
+
if (fileBytes > MAX_TOTAL_BYTES) throw new Error('文件合计不能超过 40 MiB。');
|
|
98
|
+
uploads.push(uploaded);
|
|
99
|
+
}
|
|
100
|
+
for (const file of uploads) {
|
|
101
|
+
if (/^image\/(?:png|jpeg|webp|gif)$/.test(file.mimeType)) {
|
|
102
|
+
const metadata = await sharp(file.bytes).metadata();
|
|
103
|
+
file.width = metadata.width; file.height = metadata.height;
|
|
104
|
+
if (!file.width || !file.height) throw new Error('无法读取 图片尺寸。');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (uploads.filter(file => file.width).length > 4) throw new Error('每条消息最多 4 张图片。');
|
|
108
|
+
return uploads;
|
|
109
|
+
}
|
package/dist/src/onboarding.mjs
CHANGED
|
@@ -1,31 +1,12 @@
|
|
|
1
|
-
export
|
|
2
|
-
'
|
|
3
|
-
|
|
4
|
-
'• 私有中继:同一设备授权可跨网络长期重连;基础控制/完整控制能力由电脑当前 Bridge 状态决定。',
|
|
5
|
-
'• OpenAI 官方中继:在已配对电脑内使用官方账号和设备授权;认证仍直连 OpenAI。',
|
|
6
|
-
].join('\n');
|
|
7
|
-
|
|
8
|
-
export function phonePairingSteps(transportMode, paired = false) {
|
|
9
|
-
const mode = transportMode === 'lan-shared' ? '局域网 · 完整控制' : transportMode === 'lan-legacy' ? '局域网 · 基础控制' : '局域网(按电脑实际控制方式选择)';
|
|
10
|
-
return paired ? [
|
|
11
|
-
`已有移动设备授权。手机可继续使用私有中继;${mode} 会显示验证成功的当前网络和历史记录。`,
|
|
12
|
-
'添加另一台设备时执行 relax pair;每台设备只需扫码配对一次。',
|
|
13
|
-
] : [
|
|
14
|
-
'手机先安装 Code Relax。当前为鸿蒙 HarmonyOS 7 私测版,调试 HAP 需通过 DevEco/调试设备安装,尚无商店下载入口。',
|
|
15
|
-
'使用 App 扫描配对二维码;每台移动设备只需配对一次。',
|
|
16
|
-
`配对后可直接使用私有中继;${mode} 会接收并验证当前网络候选,也可手动输入 IP。`,
|
|
17
|
-
];
|
|
1
|
+
export function phonePairingSteps(_transportMode, paired = false) {
|
|
2
|
+
return paired ? ['已配对设备可直接连接。添加设备:relax pair']
|
|
3
|
+
: ['生成配对二维码:relax pair', '用 Code Relax App 扫码添加工作站。'];
|
|
18
4
|
}
|
|
19
5
|
export const desktopSetupSteps = [
|
|
20
|
-
'
|
|
21
|
-
'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
'
|
|
26
|
-
|
|
27
|
-
];
|
|
28
|
-
|
|
29
|
-
export function pairingDisplayText(nextSteps, notice) {
|
|
30
|
-
return ['Bridge 已就绪,请在手机上完成连接。', connectionModesText, ...nextSteps.map((step, index) => `${index + 1}. ${step}`), notice].join('\n\n');
|
|
31
|
-
}
|
|
6
|
+
'工作站服务和 Codex 内核已就绪,已启用登录自启。',
|
|
7
|
+
'生成配对二维码:relax pair',
|
|
8
|
+
];
|
|
9
|
+
|
|
10
|
+
export function pairingDisplayText(nextSteps) {
|
|
11
|
+
return ['Code Relax 工作站已启动。', ...nextSteps].join('\n');
|
|
12
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import http2 from 'node:http2';
|
|
2
|
+
import pricing from '../shared/plan-pricing.cjs';
|
|
3
|
+
|
|
4
|
+
export async function readPlanPricing(client) {
|
|
5
|
+
await client.connect();
|
|
6
|
+
const token = async () => (await client.request('getAuthStatus', { includeToken: true, refreshToken: false })).authToken;
|
|
7
|
+
const authToken = await token();
|
|
8
|
+
if (!authToken) return null;
|
|
9
|
+
const identity = value => {
|
|
10
|
+
const auth = JSON.parse(Buffer.from(value.split('.')[1], 'base64url'))['https://api.openai.com/auth'];
|
|
11
|
+
return JSON.stringify([auth?.chatgpt_account_id, auth?.chatgpt_user_id]);
|
|
12
|
+
};
|
|
13
|
+
const initialIdentity = identity(authToken), accountId = JSON.parse(initialIdentity)[0];
|
|
14
|
+
if (!accountId) return null;
|
|
15
|
+
const session = http2.connect('https://chatgpt.com');
|
|
16
|
+
session.on('error', () => {}); // Each stream reports its own request error.
|
|
17
|
+
try {
|
|
18
|
+
const get = route => new Promise((resolve, reject) => {
|
|
19
|
+
const request = session.request({ ':method': 'GET', ':path': '/backend-api' + route,
|
|
20
|
+
authorization: `Bearer ${authToken}`, 'chatgpt-account-id': accountId,
|
|
21
|
+
'user-agent': 'Code-Relax/0.1.0', accept: 'application/json' });
|
|
22
|
+
let body = '', status, size = 0, ended = false;
|
|
23
|
+
const timer = setTimeout(() => request.destroy(new Error('套餐费用查询超时。')), 15000);
|
|
24
|
+
request.setEncoding('utf8');
|
|
25
|
+
request.on('response', headers => { status = headers[':status']; });
|
|
26
|
+
request.on('data', chunk => {
|
|
27
|
+
size += Buffer.byteLength(chunk);
|
|
28
|
+
if (size > 1024 * 1024) request.destroy(new Error('套餐费用响应过大。'));
|
|
29
|
+
else body += chunk;
|
|
30
|
+
});
|
|
31
|
+
request.on('error', reject);
|
|
32
|
+
request.on('close', () => { clearTimeout(timer); if (!ended) reject(new Error('套餐费用连接已断开。')); });
|
|
33
|
+
request.on('end', () => {
|
|
34
|
+
ended = true;
|
|
35
|
+
try {
|
|
36
|
+
if (status !== 200) throw new Error(`套餐费用查询失败(HTTP ${status})。`);
|
|
37
|
+
resolve(JSON.parse(body));
|
|
38
|
+
} catch (error) { reject(error); }
|
|
39
|
+
});
|
|
40
|
+
request.end();
|
|
41
|
+
});
|
|
42
|
+
const value = await pricing.read(accountId, get);
|
|
43
|
+
const current = await token();
|
|
44
|
+
if (!current || identity(current) !== initialIdentity) throw new Error('套餐查询期间账号已变化。');
|
|
45
|
+
return value;
|
|
46
|
+
} finally { session.destroy(); }
|
|
47
|
+
}
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
当前只实现 Windows Codex:
|
|
4
4
|
|
|
5
5
|
- `windows/runtime-paths.mjs`:固定服务、用户状态、Codex 数据、附件和长期凭据路径。
|
|
6
|
-
- `windows/service-host.mjs
|
|
6
|
+
- `windows/service-host.mjs`:网卡、Bridge 进程环境和旧状态迁移。
|
|
7
7
|
- `windows/desktop-host.mjs`、PowerShell 脚本:普通/共享 Desktop、快捷方式和隐藏控制台启动。
|
|
8
8
|
- `windows/credential-store.mjs/.ps1`:私有中继电脑凭据的 DPAPI 与 ACL。
|
|
9
9
|
|
|
10
10
|
Windows 专有脚本兼容系统自带 PowerShell 5.1。通用生命周期使用 Node 接口;系统检测和凭据保护不扩散到业务代码。
|
|
11
11
|
|
|
12
|
-
macOS、Linux 目录仅保留规划说明,尚无路径、IPC、进程或安装实现。接入排在控制端扩展之后,并需分别验证 Codex Desktop/app-server 的可用连接方式;只有独立 app-server 时不能宣称接管 Desktop 当前任务。
|
|
12
|
+
macOS、Linux 目录仅保留规划说明,尚无路径、IPC、进程或安装实现。接入排在控制端扩展之后,并需分别验证 Codex Desktop/app-server 的可用连接方式;只有独立 app-server 时不能宣称接管 Desktop 当前任务。
|