orbit-codex-bridge 0.1.7 → 0.1.8
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 +10 -0
- package/cli.mjs +7 -2
- package/lib/connector-service.mjs +6 -1
- package/package.json +1 -1
- package/relay-agent.mjs +9 -2
package/README.md
CHANGED
|
@@ -113,6 +113,16 @@ npx.cmd --yes --package=orbit-codex-bridge@latest orbit rebind
|
|
|
113
113
|
|
|
114
114
|
先确认电脑开机并联网,运行 `orbit status` 查看状态。短暂断网会自动恢复;电脑重启后运行 `orbit start`。仍有问题时,按状态命令显示的路径查看 `connector.log`,或使用 `orbit login --foreground` 诊断。
|
|
115
115
|
|
|
116
|
+
**云端拒绝电脑凭证**
|
|
117
|
+
|
|
118
|
+
这表示云端没有接受这台电脑保存的连接凭证,电脑尚未上线。请先确认账号没有停用或到期、电脑绑定没有被移除;重复 `orbit login` 会复用原有凭证,不会重新授权。需要重新绑定时运行:
|
|
119
|
+
|
|
120
|
+
```powershell
|
|
121
|
+
npx.cmd --yes --package=orbit-codex-bridge@latest orbit rebind
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
网页确认后会生成新的电脑凭证,原 Codex 会话不会删除。如果提示设备额度已满,在账号的电脑列表移除不再使用的旧绑定后重试。若多台电脑在云端升级后同时被拒绝,请由运维检查服务是否仍使用原来的 Relay 数据库。
|
|
125
|
+
|
|
116
126
|
**能看历史,但会话尚未连接**
|
|
117
127
|
|
|
118
128
|
在 Codex 桌面打开同一条会话,再点击网页中的“重新连接”。桌面热接管依赖 Codex 内部接口,桌面版本更新后可能需要更新 Orbit。
|
package/cli.mjs
CHANGED
|
@@ -200,13 +200,18 @@ async function runBackground(config) {
|
|
|
200
200
|
console.log('正在启动 Orbit 后台连接器…');
|
|
201
201
|
const runtime = await installConnectorRuntime(packageDirectory,configDirectory());
|
|
202
202
|
const service = await startConnector({home:configDirectory(),...runtime});
|
|
203
|
-
|
|
203
|
+
if (service.status === 'blocked') {
|
|
204
|
+
throw new Error(`电脑“${config.deviceName}”尚未上线。${service.reason || '云端拒绝了电脑连接。'}\n诊断日志:${path.join(configDirectory(),'connector.log')}`);
|
|
205
|
+
}
|
|
206
|
+
const label = service.status === 'online' ? '已连接云端' : service.status === 'reconnecting' ? '连接暂时中断,正在自动重连' : '正在等待云端确认连接';
|
|
204
207
|
console.log(`电脑“${config.deviceName}”后台运行中 · ${label}`);
|
|
205
208
|
console.log(`手机工作台:${config.publicUrl}`);
|
|
206
209
|
console.log('可以关闭此终端。断网自动重连,异常退出自动恢复;电脑休眠期间无法远程使用。');
|
|
207
210
|
console.log('停止:orbit stop;状态:orbit status;前台诊断:orbit login --foreground');
|
|
208
211
|
console.log(`诊断日志:${path.join(configDirectory(),'connector.log')}`);
|
|
209
|
-
console.log(
|
|
212
|
+
console.log(service.status === 'online'
|
|
213
|
+
? '手机登录同一 Orbit 账号,选择这台电脑即可,无需输入配对密钥。'
|
|
214
|
+
: '电脑上线后,手机登录同一 Orbit 账号并选择这台电脑。运行 orbit status 可查看连接结果。');
|
|
210
215
|
}
|
|
211
216
|
|
|
212
217
|
async function revokeComputer(config) {
|
|
@@ -113,17 +113,22 @@ export async function startConnector({home,cliPath,version}) {
|
|
|
113
113
|
});
|
|
114
114
|
} finally {await diagnostic.close();}
|
|
115
115
|
let exited = false;
|
|
116
|
+
let latestState = null;
|
|
116
117
|
child.once('exit',() => {exited = true;});
|
|
117
118
|
child.unref();
|
|
118
119
|
for (let attempt = 0; attempt < 100; attempt++) {
|
|
119
120
|
const current = await connectorStatus(home);
|
|
120
|
-
if (current?.version === version && current.workerReady)
|
|
121
|
+
if (current?.version === version && current.workerReady) {
|
|
122
|
+
latestState = current;
|
|
123
|
+
if (['online','blocked','reconnecting'].includes(current.status)) return current;
|
|
124
|
+
}
|
|
121
125
|
if (exited) {
|
|
122
126
|
const diagnostic = (await fs.readFile(startupLog,'utf8').catch(() => '')).slice(-1500);
|
|
123
127
|
throw new Error(`后台连接器启动失败。${diagnostic}\n诊断日志:${startupLog}`);
|
|
124
128
|
}
|
|
125
129
|
await pause(150);
|
|
126
130
|
}
|
|
131
|
+
if (latestState) return latestState;
|
|
127
132
|
throw new Error(`后台连接器未就绪。诊断日志:${path.join(home,'connector.log')}`);
|
|
128
133
|
}
|
|
129
134
|
|
package/package.json
CHANGED
package/relay-agent.mjs
CHANGED
|
@@ -226,8 +226,15 @@ export function createRelayAgent(options = {}) {
|
|
|
226
226
|
if (!stopped) {
|
|
227
227
|
if (code === 1008 || code === 1012 && reason.toString() === 'Replaced by a newer agent') {
|
|
228
228
|
stopped = true;
|
|
229
|
-
const
|
|
230
|
-
|
|
229
|
+
const replaced = code === 1012;
|
|
230
|
+
const authenticationFailed = code === 1008 && reason.toString() === 'Agent authentication failed';
|
|
231
|
+
const reasonCode = replaced ? 'AGENT_REPLACED' : authenticationFailed ? 'DEVICE_AUTH_REJECTED' : 'AGENT_ACCESS_DENIED';
|
|
232
|
+
const detail = replaced
|
|
233
|
+
? '连接已由另一个 Orbit 实例接管。请只保留一个连接器实例;确认后运行 orbit restart。'
|
|
234
|
+
: authenticationFailed
|
|
235
|
+
? '云端拒绝了此电脑的连接凭证。请确认账号有效、电脑绑定未撤销;需要重新绑定时运行 orbit rebind。'
|
|
236
|
+
: '云端拒绝了此电脑的访问。请检查账号状态、有效期及电脑绑定;恢复权限后运行 orbit restart。';
|
|
237
|
+
onState({status:'blocked',reason:detail,reasonCode});
|
|
231
238
|
onError(new Error(detail));
|
|
232
239
|
return;
|
|
233
240
|
}
|