clay-server 2.34.0-beta.1 → 2.34.0-beta.3

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/lib/sdk-bridge.js CHANGED
@@ -1175,17 +1175,21 @@ function createSDKBridge(opts) {
1175
1175
 
1176
1176
  if (dangerouslySkipPermissions) {
1177
1177
  claudeOpts.allowDangerouslySkipPermissions = true;
1178
+ claudeOpts.permissionMode = "bypassPermissions";
1179
+ } else {
1180
+ var globalMode = sm.currentPermissionMode || "default";
1181
+ var effectiveDefault;
1182
+ if (globalMode === "bypassPermissions") effectiveDefault = "bypassPermissions";
1183
+ else if (session.acceptEditsAfterStart) effectiveDefault = "acceptEdits";
1184
+ else effectiveDefault = globalMode;
1185
+ var modeToApply = session._loopPermissionMode || effectiveDefault;
1186
+ if (modeToApply && modeToApply !== "default") {
1187
+ claudeOpts.permissionMode = modeToApply;
1188
+ }
1178
1189
  }
1179
- var globalMode = sm.currentPermissionMode || "default";
1180
- var effectiveDefault;
1181
- if (globalMode === "bypassPermissions") effectiveDefault = "bypassPermissions";
1182
- else if (session.acceptEditsAfterStart) effectiveDefault = "acceptEdits";
1183
- else effectiveDefault = globalMode;
1184
- var modeToApply = session._loopPermissionMode || effectiveDefault;
1190
+ // Clear one-shot acceptEditsAfterStart regardless of which branch ran above,
1191
+ // so the flag does not linger into subsequent turns.
1185
1192
  if (session.acceptEditsAfterStart) delete session.acceptEditsAfterStart;
1186
- if (modeToApply && modeToApply !== "default") {
1187
- claudeOpts.permissionMode = modeToApply;
1188
- }
1189
1193
  if (session.cliSessionId && session.lastRewindUuid) {
1190
1194
  claudeOpts.resumeSessionAt = session.lastRewindUuid;
1191
1195
  delete session.lastRewindUuid;
@@ -943,6 +943,7 @@ function createClaudeAdapter(opts) {
943
943
  cwd: (initOpts && initOpts.cwd) || _cwd,
944
944
  settingSources: ["user", "project", "local"],
945
945
  abortController: ac,
946
+ settings: { disableAllHooks: true },
946
947
  };
947
948
  if (_claudeBinaryPath) warmupOptions.pathToClaudeCodeExecutable = _claudeBinaryPath;
948
949
 
@@ -1102,6 +1103,7 @@ function createClaudeAdapter(opts) {
1102
1103
  if (co.permissionMode) sdkOptions.permissionMode = co.permissionMode;
1103
1104
  if (co.allowDangerouslySkipPermissions) sdkOptions.allowDangerouslySkipPermissions = true;
1104
1105
  if (co.resumeSessionAt) sdkOptions.resumeSessionAt = co.resumeSessionAt;
1106
+ if (co.settings) sdkOptions.settings = co.settings;
1105
1107
 
1106
1108
  var rawQuery = sdk.query({ prompt: mq, options: sdkOptions });
1107
1109
  return createQueryHandle(rawQuery, mq, ac);
@@ -1250,6 +1252,7 @@ function createClaudeAdapter(opts) {
1250
1252
  if (claudeOpts.betas && claudeOpts.betas.length > 0) queryOptions.betas = claudeOpts.betas;
1251
1253
  if (claudeOpts.permissionMode) queryOptions.permissionMode = claudeOpts.permissionMode;
1252
1254
  if (claudeOpts.allowDangerouslySkipPermissions) queryOptions.allowDangerouslySkipPermissions = true;
1255
+ if (claudeOpts.settings) queryOptions.settings = claudeOpts.settings;
1253
1256
 
1254
1257
  if (queryOpts.toolServers) queryOptions.mcpServers = queryOpts.toolServers;
1255
1258
  if (queryOpts.model) queryOptions.model = queryOpts.model;
@@ -1356,6 +1359,7 @@ function createClaudeAdapter(opts) {
1356
1359
  cwd: (initOpts && initOpts.cwd) || _cwd,
1357
1360
  settingSources: ["user", "project", "local"],
1358
1361
  abortController: ac,
1362
+ settings: { disableAllHooks: true },
1359
1363
  };
1360
1364
  if (_claudeBinaryPath) warmupOptions.pathToClaudeCodeExecutable = _claudeBinaryPath;
1361
1365
 
@@ -1430,7 +1434,7 @@ function createClaudeAdapter(opts) {
1430
1434
  throw new Error("Warmup worker failed to connect: " + (e.message || e));
1431
1435
  }
1432
1436
 
1433
- var warmupOptions = { cwd: workerCwd, settingSources: ["user", "project", "local"] };
1437
+ var warmupOptions = { cwd: workerCwd, settingSources: ["user", "project", "local"], settings: { disableAllHooks: true } };
1434
1438
  if (_claudeBinaryPath) warmupOptions.pathToClaudeCodeExecutable = _claudeBinaryPath;
1435
1439
  if (initOpts && initOpts.dangerouslySkipPermissions) {
1436
1440
  warmupOptions.permissionMode = "bypassPermissions";
package/lib/yoke/index.js CHANGED
@@ -4,7 +4,6 @@
4
4
  var iface = require("./interface");
5
5
  var instructions = require("./instructions");
6
6
  var createClaudeAdapter = require("./adapters/claude").createClaudeAdapter;
7
- var createGeminiAdapter = require("./adapters/gemini").createGeminiAdapter;
8
7
  var createCodexAdapter = require("./adapters/codex").createCodexAdapter;
9
8
 
10
9
  /**
@@ -48,8 +47,6 @@ function createAdapter(opts) {
48
47
  var adapter;
49
48
  if (vendor === "claude") {
50
49
  adapter = createClaudeAdapter(opts);
51
- } else if (vendor === "gemini") {
52
- adapter = createGeminiAdapter(opts);
53
50
  } else if (vendor === "codex") {
54
51
  adapter = createCodexAdapter(opts);
55
52
  } else {
@@ -113,7 +110,31 @@ function checkAuth() {
113
110
  return false;
114
111
  }
115
112
 
113
+ function hasThirdPartyProviderAuth() {
114
+ // Claude Code supports third-party providers via env vars. When these are set,
115
+ // `claude auth status` reports "not logged in" because there is no OAuth session,
116
+ // but Claude Code itself authenticates directly through the provider.
117
+ var env = process.env;
118
+ if (env.CLAUDE_CODE_USE_BEDROCK === "1"
119
+ && (env.AWS_BEARER_TOKEN_BEDROCK
120
+ || env.AWS_ACCESS_KEY_ID
121
+ || env.AWS_PROFILE
122
+ || env.AWS_SESSION_TOKEN)) {
123
+ return "bedrock";
124
+ }
125
+ if (env.CLAUDE_CODE_USE_VERTEX === "1") return "vertex";
126
+ if (env.ANTHROPIC_API_KEY) return "api_key";
127
+ if (env.ANTHROPIC_AUTH_TOKEN) return "auth_token";
128
+ return null;
129
+ }
130
+
116
131
  function checkClaude() {
132
+ var provider = hasThirdPartyProviderAuth();
133
+ if (provider) {
134
+ console.log("[yoke] Claude auth via third-party provider: " + provider);
135
+ return true;
136
+ }
137
+
117
138
  try {
118
139
  var out = execSync("claude auth status --json", { timeout: 5000, encoding: "utf8", stdio: ["pipe", "pipe", "pipe"] });
119
140
  var parsed = parseClaudeAuthStatusJson(out);
@@ -159,7 +180,7 @@ function checkAuth() {
159
180
  }
160
181
  }
161
182
 
162
- _authCache = { claude: checkClaude(), codex: checkCodex(), gemini: false };
183
+ _authCache = { claude: checkClaude(), codex: checkCodex() };
163
184
  logAuthCheck(_authCache);
164
185
  return _authCache;
165
186
  }
@@ -213,19 +234,24 @@ function createAdapters(opts) {
213
234
  return { adapters: _sharedAdapters, auth: _sharedAuth };
214
235
  }
215
236
 
216
- var auth = checkAuth();
237
+ // Gate adapter creation on binary installation, not OAuth auth status.
238
+ // Claude Code supports multiple auth modes (OAuth, Bedrock, Vertex, API key)
239
+ // that `claude auth status` does not always detect. Runtime auth failures are
240
+ // handled downstream via query-level error detection.
241
+ var installed = checkInstalled();
242
+ var auth = { claude: false, codex: false };
217
243
  var adapters = {};
218
- var vendors = Object.keys(auth);
244
+ var vendors = Object.keys(installed);
219
245
 
220
246
  for (var i = 0; i < vendors.length; i++) {
221
247
  var vendor = vendors[i];
222
- if (!auth[vendor]) continue;
248
+ if (!installed[vendor]) continue;
223
249
  try {
224
250
  adapters[vendor] = createAdapter({ vendor: vendor, cwd: opts.cwd });
251
+ auth[vendor] = true;
225
252
  console.log("[yoke] Adapter created: " + vendor);
226
253
  } catch (e) {
227
254
  console.error("[yoke] Failed to create adapter for " + vendor + ":", e.message);
228
- auth[vendor] = false;
229
255
  }
230
256
  }
231
257
 
@@ -249,8 +275,8 @@ async function lazyCreateAdapter(adapters, vendor, opts) {
249
275
  invalidateAuthCache();
250
276
  _sharedAdapters = null;
251
277
  _sharedAuth = null;
252
- var auth = checkAuth();
253
- if (!auth[vendor]) return null;
278
+ var installed = checkInstalled();
279
+ if (!installed[vendor]) return null;
254
280
 
255
281
  try {
256
282
  var ad = createAdapter({ vendor: vendor, cwd: opts.cwd });
@@ -24,7 +24,6 @@ var KNOWN_FILES = [
24
24
  var NATIVE_FILES = {
25
25
  claude: ["CLAUDE.md"],
26
26
  codex: ["AGENTS.md"],
27
- gemini: [],
28
27
  };
29
28
 
30
29
  // Scan projectDir for instruction files and return merged text.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clay-server",
3
- "version": "2.34.0-beta.1",
3
+ "version": "2.34.0-beta.3",
4
4
  "description": "Self-hosted Claude Code in your browser. Multi-session, multi-user, push notifications.",
5
5
  "bin": {
6
6
  "clay-server": "./bin/cli.js",
@@ -37,7 +37,6 @@
37
37
  "author": "Chad",
38
38
  "dependencies": {
39
39
  "@anthropic-ai/claude-agent-sdk": "^0.2.112",
40
- "@google/genai": "^1.49.0",
41
40
  "@lydell/node-pty": "^1.2.0-beta.3",
42
41
  "@openai/codex": "^0.121.0",
43
42
  "imapflow": "^1.3.1",