clay-server 2.20.1-beta.7 → 2.20.1-beta.9
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/config.js +5 -1
- package/lib/daemon.js +37 -25
- package/package.json +1 -1
package/lib/config.js
CHANGED
|
@@ -35,7 +35,11 @@ function getRealHome() {
|
|
|
35
35
|
var REAL_HOME = getRealHome();
|
|
36
36
|
|
|
37
37
|
// v3: ~/.clay/ (v2 was ~/.claude-relay/, v1 was {cwd}/.claude-relay/)
|
|
38
|
-
|
|
38
|
+
// If CLAY_CONFIG is set (daemon mode), derive CLAY_HOME from it so that
|
|
39
|
+
// daemon.json, users.json, sessions/, etc. all live in the same directory.
|
|
40
|
+
var CLAY_HOME = process.env.CLAY_HOME
|
|
41
|
+
|| (process.env.CLAY_CONFIG ? path.dirname(process.env.CLAY_CONFIG) : null)
|
|
42
|
+
|| path.join(REAL_HOME, ".clay");
|
|
39
43
|
var LEGACY_HOME = path.join(REAL_HOME, ".claude-relay");
|
|
40
44
|
|
|
41
45
|
// Auto-migrate v2 -> v3: rename ~/.claude-relay/ to ~/.clay/ (once, before anything reads)
|
package/lib/daemon.js
CHANGED
|
@@ -1263,37 +1263,49 @@ function startListening() {
|
|
|
1263
1263
|
config.pid = process.pid;
|
|
1264
1264
|
saveConfig(config);
|
|
1265
1265
|
|
|
1266
|
-
// Auto-provision Linux accounts on startup if OS users mode is enabled
|
|
1266
|
+
// Auto-provision Linux accounts on startup if OS users mode is enabled.
|
|
1267
|
+
// Run in setTimeout so the event loop stays free for IPC during startup.
|
|
1267
1268
|
if (config.osUsers) {
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
for (var pi = 0; pi < config.projects.length; pi++) {
|
|
1278
|
-
var proj = config.projects[pi];
|
|
1279
|
-
if (proj.ownerId) {
|
|
1280
|
-
var ownerUser = usersModule.findUserById(proj.ownerId);
|
|
1281
|
-
if (ownerUser && ownerUser.linuxUser) {
|
|
1282
|
-
grantProjectAccess(proj.path, ownerUser.linuxUser);
|
|
1269
|
+
setTimeout(function () {
|
|
1270
|
+
try { ensureProjectsDir(); } catch (e) {}
|
|
1271
|
+
try {
|
|
1272
|
+
var provResult = provisionAllUsers(usersModule);
|
|
1273
|
+
if (provResult.provisioned.length > 0) {
|
|
1274
|
+
console.log("[daemon] Auto-provisioned " + provResult.provisioned.length + " Linux account(s) on startup");
|
|
1275
|
+
}
|
|
1276
|
+
if (provResult.errors.length > 0) {
|
|
1277
|
+
console.error("[daemon] Failed to provision " + provResult.errors.length + " account(s)");
|
|
1283
1278
|
}
|
|
1279
|
+
} catch (provErr) {
|
|
1280
|
+
console.error("[daemon] Startup provisioning error:", provErr.message);
|
|
1284
1281
|
}
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1282
|
+
// Set up ACLs for all existing projects on startup
|
|
1283
|
+
for (var pi = 0; pi < config.projects.length; pi++) {
|
|
1284
|
+
var proj = config.projects[pi];
|
|
1285
|
+
try {
|
|
1286
|
+
if (proj.ownerId) {
|
|
1287
|
+
var ownerUser = usersModule.findUserById(proj.ownerId);
|
|
1288
|
+
if (ownerUser && ownerUser.linuxUser) {
|
|
1289
|
+
grantProjectAccess(proj.path, ownerUser.linuxUser);
|
|
1290
|
+
}
|
|
1293
1291
|
}
|
|
1292
|
+
if ((proj.visibility || "public") === "public") {
|
|
1293
|
+
grantAllUsersAccess(proj.path, usersModule);
|
|
1294
|
+
} else {
|
|
1295
|
+
var projAllowed = proj.allowedUsers || [];
|
|
1296
|
+
for (var ai = 0; ai < projAllowed.length; ai++) {
|
|
1297
|
+
var allowedUser = usersModule.findUserById(projAllowed[ai]);
|
|
1298
|
+
if (allowedUser && allowedUser.linuxUser) {
|
|
1299
|
+
grantProjectAccess(proj.path, allowedUser.linuxUser);
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
} catch (aclErr) {
|
|
1304
|
+
console.error("[daemon] Startup ACL error for " + proj.path + ":", aclErr.message);
|
|
1294
1305
|
}
|
|
1295
1306
|
}
|
|
1296
|
-
|
|
1307
|
+
console.log("[daemon] Startup OS users provisioning complete.");
|
|
1308
|
+
}, 100);
|
|
1297
1309
|
}
|
|
1298
1310
|
|
|
1299
1311
|
// Check for crash info from a previous crash and notify clients
|