@ccpocket/bridge 1.12.0 → 1.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/usage.js CHANGED
@@ -147,6 +147,134 @@ export async function getValidClaudeAccessToken() {
147
147
  }
148
148
  return { accessToken: refreshed.accessToken, refreshToken: updatedCreds.refreshToken };
149
149
  }
150
+ async function probeClaudeAccessToken(token) {
151
+ const res = await fetch("https://api.anthropic.com/api/oauth/usage", {
152
+ headers: {
153
+ Authorization: `Bearer ${token}`,
154
+ "anthropic-beta": "oauth-2025-04-20",
155
+ },
156
+ });
157
+ if (res.ok) {
158
+ return { ok: true };
159
+ }
160
+ return {
161
+ ok: false,
162
+ status: res.status,
163
+ detail: `API Error: ${res.status} ${res.statusText}`,
164
+ };
165
+ }
166
+ /**
167
+ * Verify that the stored Claude OAuth access token is still accepted upstream.
168
+ * This catches revoked/invalid sessions that have not yet reached expiresAt.
169
+ *
170
+ * Returns ok=false only for confirmed auth failures (401/403) or refresh errors.
171
+ * Transient upstream/network failures are tolerated so normal query startup can
172
+ * decide how to surface them.
173
+ */
174
+ export async function validateClaudeAccessToken() {
175
+ const creds = await getClaudeOAuthCredentials();
176
+ if (!creds.accessToken) {
177
+ return { ok: false, detail: "No OAuth access token in Claude Code credentials" };
178
+ }
179
+ const initial = await probeClaudeAccessToken(creds.accessToken);
180
+ if (initial.ok) {
181
+ return initial;
182
+ }
183
+ if (initial.status !== 401 && initial.status !== 403) {
184
+ return { ok: true };
185
+ }
186
+ if (!creds.refreshToken) {
187
+ return initial;
188
+ }
189
+ const refreshed = await refreshClaudeAccessToken(creds.refreshToken);
190
+ const updatedCreds = {
191
+ accessToken: refreshed.accessToken,
192
+ refreshToken: refreshed.refreshToken ?? creds.refreshToken,
193
+ expiresAt: refreshed.expiresAt ?? creds.expiresAt,
194
+ };
195
+ try {
196
+ await saveClaudeOAuthCredentials(updatedCreds);
197
+ }
198
+ catch {
199
+ // Continue even if we cannot persist; the refreshed token is still valid
200
+ // for this process.
201
+ }
202
+ return probeClaudeAccessToken(refreshed.accessToken);
203
+ }
204
+ /**
205
+ * Check Claude authentication status using **local credentials only**.
206
+ *
207
+ * This intentionally does NOT probe the upstream API to avoid redundant
208
+ * requests — the usage endpoint (`fetchClaudeUsage`) already contacts the
209
+ * same API, and firing both simultaneously causes 429 rate-limit errors.
210
+ *
211
+ * For OAuth credentials we verify:
212
+ * 1. An access token exists.
213
+ * 2. The token has not yet expired (with a small skew margin).
214
+ *
215
+ * Actual API reachability is implicitly validated by the usage fetch that
216
+ * runs in parallel on the Flutter settings screen.
217
+ */
218
+ export async function getClaudeAuthStatus() {
219
+ if (process.env.ANTHROPIC_API_KEY) {
220
+ return {
221
+ authenticated: true,
222
+ source: "api_key",
223
+ message: "Authenticated with ANTHROPIC_API_KEY.",
224
+ };
225
+ }
226
+ try {
227
+ const creds = await getClaudeOAuthCredentials();
228
+ if (!creds.accessToken) {
229
+ return {
230
+ authenticated: false,
231
+ source: "none",
232
+ message: "Claude Code credentials exist, but no access token was found.",
233
+ errorCode: "auth_login_required",
234
+ };
235
+ }
236
+ // Local expiry check — avoids an API round-trip.
237
+ if (creds.expiresAt && Date.now() > creds.expiresAt - TOKEN_EXPIRY_SKEW_MS) {
238
+ // Token expired or about to expire. If we have a refresh token the
239
+ // usage fetch will attempt a refresh anyway, so just flag it here.
240
+ if (creds.refreshToken) {
241
+ return {
242
+ authenticated: true,
243
+ source: "oauth",
244
+ message: "Claude Code is authenticated (token will be refreshed).",
245
+ };
246
+ }
247
+ return {
248
+ authenticated: false,
249
+ source: "none",
250
+ message: "Claude Code access token has expired.",
251
+ errorCode: "auth_login_required",
252
+ };
253
+ }
254
+ return {
255
+ authenticated: true,
256
+ source: "oauth",
257
+ message: "Claude Code is authenticated.",
258
+ };
259
+ }
260
+ catch (err) {
261
+ const detail = err instanceof Error ? err.message : String(err);
262
+ if (detail.includes("not found")) {
263
+ return {
264
+ authenticated: false,
265
+ source: "none",
266
+ message: "Claude Code is not logged in on this machine.",
267
+ errorCode: "auth_login_required",
268
+ };
269
+ }
270
+ return {
271
+ authenticated: false,
272
+ source: "none",
273
+ message: detail,
274
+ errorCode: "auth_api_error",
275
+ };
276
+ }
277
+ }
150
278
  export async function fetchClaudeUsage() {
151
279
  try {
152
280
  const auth = await getValidClaudeAccessToken();
@@ -157,7 +285,9 @@ export async function fetchClaudeUsage() {
157
285
  "anthropic-beta": "oauth-2025-04-20",
158
286
  },
159
287
  });
160
- if (res.status === 401 && auth.refreshToken) {
288
+ // 401 = expired/invalid token, 429 = token-level rate limit.
289
+ // In both cases a fresh token resolves the issue.
290
+ if ((res.status === 401 || res.status === 429) && auth.refreshToken) {
161
291
  const refreshed = await refreshClaudeAccessToken(auth.refreshToken);
162
292
  token = refreshed.accessToken;
163
293
  res = await fetch("https://api.anthropic.com/api/oauth/usage", {
package/dist/usage.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,7 @@ export declare class BridgeWebSocketServer {
33
33
  private worktreeStore;
34
34
  private pushRelay;
35
35
  private promptHistoryBackup;
36
+ private claudeAuthLogin;
36
37
  private recentSessionsRequestId;
37
38
  private debugEvents;
38
39
  private notifiedPermissionToolUses;
package/dist/websocket.js CHANGED
@@ -17,6 +17,7 @@ import { RecordingStore } from "./recording-store.js";
17
17
  import { PushRelayClient } from "./push-relay.js";
18
18
  import { normalizePushLocale, t } from "./push-i18n.js";
19
19
  import { fetchAllUsage } from "./usage.js";
20
+ import { ClaudeAuthLoginManager } from "./claude-auth-login.js";
20
21
  // ---- Available model lists (delivered to clients via session_list) ----
21
22
  const CLAUDE_MODELS = [
22
23
  "claude-opus-4-6",
@@ -58,6 +59,7 @@ export class BridgeWebSocketServer {
58
59
  worktreeStore;
59
60
  pushRelay;
60
61
  promptHistoryBackup;
62
+ claudeAuthLogin;
61
63
  recentSessionsRequestId = 0;
62
64
  debugEvents = new Map();
63
65
  notifiedPermissionToolUses = new Map();
@@ -77,6 +79,7 @@ export class BridgeWebSocketServer {
77
79
  this.worktreeStore = new WorktreeStore();
78
80
  this.pushRelay = new PushRelayClient({ firebaseAuth });
79
81
  this.promptHistoryBackup = promptHistoryBackup ?? null;
82
+ this.claudeAuthLogin = new ClaudeAuthLoginManager();
80
83
  this.archiveStore = new ArchiveStore();
81
84
  void this.debugTraceStore.init().catch((err) => {
82
85
  console.error("[ws] Failed to initialize debug trace store:", err);
@@ -93,6 +96,12 @@ export class BridgeWebSocketServer {
93
96
  else {
94
97
  console.log("[ws] Push relay enabled (Firebase Anonymous Auth)");
95
98
  }
99
+ this.claudeAuthLogin.on("update", (snapshot) => {
100
+ this.broadcast({
101
+ type: "claude_auth_status",
102
+ ...snapshot,
103
+ });
104
+ });
96
105
  this.wss = new WebSocketServer({ server });
97
106
  this.sessionManager = new SessionManager((sessionId, msg) => {
98
107
  this.broadcastSessionMessage(sessionId, msg);
@@ -239,6 +248,7 @@ export class BridgeWebSocketServer {
239
248
  provider,
240
249
  projectPath: msg.projectPath,
241
250
  ...(provider === "claude" && msg.permissionMode ? { permissionMode: msg.permissionMode } : {}),
251
+ ...(provider === "codex" && msg.permissionMode ? { permissionMode: msg.permissionMode } : {}),
242
252
  ...(provider === "codex" && msg.sandboxMode ? { sandboxMode: msg.sandboxMode } : {}),
243
253
  ...(cached ? { slashCommands: cached.slashCommands, skills: cached.skills } : {}),
244
254
  ...(createdSession?.worktreePath ? {
@@ -452,12 +462,113 @@ export class BridgeWebSocketServer {
452
462
  return;
453
463
  }
454
464
  if (session.provider === "codex") {
455
- const codexProcess = session.process;
456
- const approval = permissionModeToApprovalPolicy(msg.mode);
457
- const collaboration = msg.mode === "plan" ? "plan" : "default";
458
- console.log(`[ws] set_permission_mode(codex): mode=${msg.mode} → approval=${approval}, collaboration=${collaboration}`);
459
- codexProcess.setApprovalPolicy(approval);
460
- codexProcess.setCollaborationMode(collaboration);
465
+ // Permission mode for Codex requires a session restart (like sandbox mode).
466
+ // approvalPolicy and collaborationMode are thread-level settings that
467
+ // only take effect reliably at thread/start or thread/resume time.
468
+ const newApproval = permissionModeToApprovalPolicy(msg.mode);
469
+ const newCollaboration = msg.mode === "plan" ? "plan" : "default";
470
+ const currentApproval = session.process.approvalPolicy;
471
+ const currentCollaboration = session.process.collaborationMode;
472
+ if (newApproval === currentApproval && newCollaboration === currentCollaboration) {
473
+ break; // No change needed
474
+ }
475
+ console.log(`[ws] set_permission_mode(codex): mode=${msg.mode} → approval=${newApproval}, collaboration=${newCollaboration} (restart)`);
476
+ const oldSessionId = session.id;
477
+ const threadId = session.claudeSessionId;
478
+ const projectPath = session.projectPath;
479
+ const oldSettings = session.codexSettings ?? {};
480
+ const worktreePath = session.worktreePath;
481
+ const worktreeBranch = session.worktreeBranch;
482
+ const sessionName = session.name;
483
+ this.sessionManager.destroy(oldSessionId);
484
+ console.log(`[ws] Permission mode change: destroyed session ${oldSessionId}`);
485
+ const hasUserMessages = session.history?.some((m) => m.type === "user_input" || m.type === "assistant") || (session.pastMessages && session.pastMessages.length > 0);
486
+ if (!threadId || !hasUserMessages) {
487
+ const newId = this.sessionManager.create(projectPath, undefined, undefined, worktreePath ? { existingWorktreePath: worktreePath, worktreeBranch } : undefined, "codex", {
488
+ approvalPolicy: newApproval,
489
+ sandboxMode: oldSettings.sandboxMode,
490
+ model: oldSettings.model,
491
+ modelReasoningEffort: oldSettings.modelReasoningEffort,
492
+ networkAccessEnabled: oldSettings.networkAccessEnabled,
493
+ webSearchMode: oldSettings.webSearchMode,
494
+ collaborationMode: newCollaboration,
495
+ });
496
+ const newSession = this.sessionManager.get(newId);
497
+ if (newSession && sessionName)
498
+ newSession.name = sessionName;
499
+ this.broadcast({
500
+ type: "system",
501
+ subtype: "session_created",
502
+ sessionId: newId,
503
+ provider: "codex",
504
+ projectPath,
505
+ permissionMode: msg.mode,
506
+ ...(oldSettings.sandboxMode ? { sandboxMode: sandboxModeToExternal(oldSettings.sandboxMode) } : {}),
507
+ sourceSessionId: oldSessionId,
508
+ ...(newSession?.worktreePath ? { worktreePath: newSession.worktreePath, worktreeBranch: newSession.worktreeBranch } : {}),
509
+ });
510
+ this.broadcastSessionList();
511
+ console.log(`[ws] Permission mode change (no thread): created new session ${newId} (mode=${msg.mode})`);
512
+ break;
513
+ }
514
+ // Worktree resolution
515
+ const wtMapping = this.worktreeStore.get(threadId);
516
+ const effectiveProjectPath = wtMapping?.projectPath ?? projectPath;
517
+ let worktreeOpts;
518
+ if (wtMapping) {
519
+ if (worktreeExists(wtMapping.worktreePath)) {
520
+ worktreeOpts = { existingWorktreePath: wtMapping.worktreePath, worktreeBranch: wtMapping.worktreeBranch };
521
+ }
522
+ else {
523
+ worktreeOpts = { useWorktree: true, worktreeBranch: wtMapping.worktreeBranch };
524
+ }
525
+ }
526
+ else if (worktreePath) {
527
+ worktreeOpts = { existingWorktreePath: worktreePath, worktreeBranch };
528
+ }
529
+ getCodexSessionHistory(threadId).then((pastMessages) => {
530
+ const newId = this.sessionManager.create(effectiveProjectPath, undefined, pastMessages, worktreeOpts, "codex", {
531
+ threadId,
532
+ approvalPolicy: newApproval,
533
+ sandboxMode: oldSettings.sandboxMode,
534
+ model: oldSettings.model,
535
+ modelReasoningEffort: oldSettings.modelReasoningEffort,
536
+ networkAccessEnabled: oldSettings.networkAccessEnabled,
537
+ webSearchMode: oldSettings.webSearchMode,
538
+ collaborationMode: newCollaboration,
539
+ });
540
+ const newSession = this.sessionManager.get(newId);
541
+ if (newSession && sessionName) {
542
+ newSession.name = sessionName;
543
+ }
544
+ void this.loadAndSetSessionName(newSession, "codex", effectiveProjectPath, threadId).then(() => {
545
+ this.broadcast({
546
+ type: "system",
547
+ subtype: "session_created",
548
+ sessionId: newId,
549
+ provider: "codex",
550
+ projectPath: effectiveProjectPath,
551
+ permissionMode: msg.mode,
552
+ ...(oldSettings.sandboxMode ? { sandboxMode: sandboxModeToExternal(oldSettings.sandboxMode) } : {}),
553
+ sourceSessionId: oldSessionId,
554
+ ...(newSession?.worktreePath ? {
555
+ worktreePath: newSession.worktreePath,
556
+ worktreeBranch: newSession.worktreeBranch,
557
+ } : {}),
558
+ });
559
+ this.broadcastSessionList();
560
+ });
561
+ this.debugEvents.set(newId, []);
562
+ this.recordDebugEvent(newId, {
563
+ direction: "internal",
564
+ channel: "bridge",
565
+ type: "permission_mode_changed",
566
+ detail: `mode=${msg.mode} approval=${newApproval} collaboration=${newCollaboration} thread=${threadId} oldSession=${oldSessionId}`,
567
+ });
568
+ console.log(`[ws] Permission mode change: created new session ${newId} (thread=${threadId}, mode=${msg.mode})`);
569
+ }).catch((err) => {
570
+ this.send(ws, { type: "error", message: `Failed to restart session for permission mode change: ${err}` });
571
+ });
461
572
  break;
462
573
  }
463
574
  session.process.setPermissionMode(msg.mode).catch((err) => {
@@ -818,6 +929,60 @@ export class BridgeWebSocketServer {
818
929
  });
819
930
  break;
820
931
  }
932
+ case "get_claude_auth_status": {
933
+ this.claudeAuthLogin.getStatus().then((snapshot) => {
934
+ this.send(ws, {
935
+ type: "claude_auth_status",
936
+ ...snapshot,
937
+ });
938
+ }).catch((err) => {
939
+ this.send(ws, {
940
+ type: "claude_auth_status",
941
+ authenticated: false,
942
+ source: "none",
943
+ loginInProgress: false,
944
+ state: "error",
945
+ message: err instanceof Error ? err.message : String(err),
946
+ errorCode: "auth_api_error",
947
+ });
948
+ });
949
+ break;
950
+ }
951
+ case "start_claude_auth_login": {
952
+ this.claudeAuthLogin.start().then((snapshot) => {
953
+ this.send(ws, {
954
+ type: "claude_auth_status",
955
+ ...snapshot,
956
+ });
957
+ }).catch((err) => {
958
+ this.send(ws, {
959
+ type: "claude_auth_status",
960
+ authenticated: false,
961
+ source: "none",
962
+ loginInProgress: false,
963
+ state: "error",
964
+ message: err instanceof Error ? err.message : String(err),
965
+ errorCode: "auth_api_error",
966
+ });
967
+ });
968
+ break;
969
+ }
970
+ case "submit_claude_auth_code": {
971
+ const snapshot = this.claudeAuthLogin.submitCode(msg.code);
972
+ this.send(ws, {
973
+ type: "claude_auth_status",
974
+ ...snapshot,
975
+ });
976
+ break;
977
+ }
978
+ case "cancel_claude_auth_login": {
979
+ const snapshot = this.claudeAuthLogin.cancel();
980
+ this.send(ws, {
981
+ type: "claude_auth_status",
982
+ ...snapshot,
983
+ });
984
+ break;
985
+ }
821
986
  case "list_recent_sessions": {
822
987
  const requestId = ++this.recentSessionsRequestId;
823
988
  getAllRecentSessions({
@@ -919,6 +1084,7 @@ export class BridgeWebSocketServer {
919
1084
  provider: "codex",
920
1085
  projectPath: effectiveProjectPath,
921
1086
  ...(createdSession?.codexSettings?.sandboxMode ? { sandboxMode: sandboxModeToExternal(createdSession.codexSettings.sandboxMode) } : {}),
1087
+ ...(msg.permissionMode ? { permissionMode: msg.permissionMode } : {}),
922
1088
  ...(createdSession?.worktreePath ? {
923
1089
  worktreePath: createdSession.worktreePath,
924
1090
  worktreeBranch: createdSession.worktreeBranch,
@@ -1275,6 +1441,7 @@ export class BridgeWebSocketServer {
1275
1441
  provider: newSession?.provider ?? "claude",
1276
1442
  projectPath: newSession?.projectPath ?? "",
1277
1443
  ...(rewindPermMode ? { permissionMode: rewindPermMode } : {}),
1444
+ sourceSessionId: msg.sessionId,
1278
1445
  });
1279
1446
  this.sendSessionList(ws);
1280
1447
  });
@@ -1302,6 +1469,7 @@ export class BridgeWebSocketServer {
1302
1469
  provider: newSession?.provider ?? "claude",
1303
1470
  projectPath: newSession?.projectPath ?? "",
1304
1471
  ...(rewindPermMode2 ? { permissionMode: rewindPermMode2 } : {}),
1472
+ sourceSessionId: msg.sessionId,
1305
1473
  });
1306
1474
  this.sendSessionList(ws);
1307
1475
  });