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 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
- const label = service.status === 'online' ? '已连接云端' : service.status === 'blocked' ? service.reason : '正在自动连接云端';
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('手机登录同一 Orbit 账号,选择这台电脑即可,无需输入配对密钥。');
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) return current;
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orbit-codex-bridge",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "type": "module",
5
5
  "description": "Connect your computer and original Codex conversations to Orbit.",
6
6
  "engines": {
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 detail = code === 1008 ? '电脑凭证被拒绝,请检查账号或重新登录。' : '连接已由另一个 Orbit 实例接管。';
230
- onState({status:'blocked',reason:detail});
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
  }