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/mate-datastore.js +27 -5
- package/lib/project-mate-datastore.js +16 -2
- package/lib/public/css/mates.css +68 -41
- package/lib/public/index.html +0 -28
- package/lib/public/modules/app-messages.js +1 -5
- package/lib/public/modules/app-rendering.js +0 -2
- package/lib/public/modules/mate-datastore-ui.js +108 -98
- package/lib/public/modules/tools.js +1 -1
- package/lib/sdk-bridge.js +13 -9
- package/lib/yoke/adapters/claude.js +5 -1
- package/lib/yoke/index.js +36 -10
- package/lib/yoke/instructions.js +0 -1
- package/package.json +1 -2
- package/lib/yoke/adapters/gemini.js +0 -709
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
|
-
|
|
1180
|
-
|
|
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()
|
|
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
|
-
|
|
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(
|
|
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 (!
|
|
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
|
|
253
|
-
if (!
|
|
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 });
|
package/lib/yoke/instructions.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clay-server",
|
|
3
|
-
"version": "2.34.0-beta.
|
|
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",
|