clay-server 2.20.1-beta.3 → 2.20.1-beta.4

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.
Files changed (3) hide show
  1. package/bin/cli.js +14 -1
  2. package/lib/daemon.js +34 -25
  3. package/package.json +1 -1
package/bin/cli.js CHANGED
@@ -2534,6 +2534,10 @@ function showSettingsMenu(config, ip) {
2534
2534
  log(sym.bar);
2535
2535
  log(sym.bar + " " + a.dim + "Then try enabling OS user isolation again." + a.reset);
2536
2536
  log(sym.bar);
2537
+ } else if (res.error) {
2538
+ log(sym.bar);
2539
+ log(sym.bar + " " + a.red + sym.warn + " Failed to enable OS users: " + res.error + a.reset);
2540
+ log(sym.bar);
2537
2541
  } else if (res.ok) {
2538
2542
  config.osUsers = true;
2539
2543
  log(sym.bar);
@@ -2558,10 +2562,19 @@ function showSettingsMenu(config, ip) {
2558
2562
  }
2559
2563
  }
2560
2564
  }
2561
- log(sym.bar + " " + a.dim + "Restart the daemon for changes to take full effect." + a.reset);
2565
+ log(sym.bar);
2566
+ } else {
2567
+ log(sym.bar);
2568
+ log(sym.bar + " " + a.red + sym.warn + " Unexpected response from daemon." + a.reset);
2569
+ log(sym.bar + " " + a.dim + JSON.stringify(res) + a.reset);
2562
2570
  log(sym.bar);
2563
2571
  }
2564
2572
  showSettingsMenu(config, ip);
2573
+ }).catch(function (err) {
2574
+ log(sym.bar);
2575
+ log(sym.bar + " " + a.red + sym.warn + " IPC error: " + (err.message || err) + a.reset);
2576
+ log(sym.bar);
2577
+ showSettingsMenu(config, ip);
2565
2578
  });
2566
2579
  } else {
2567
2580
  showSettingsMenu(config, ip);
package/lib/daemon.js CHANGED
@@ -1140,36 +1140,45 @@ var ipc = createIPCServer(socketPath(), function (msg) {
1140
1140
  console.error("[daemon] Failed to create projects dir:", e.message);
1141
1141
  }
1142
1142
  // Auto-provision Linux accounts for all existing users
1143
- var provisionResult = provisionAllUsers(usersModule);
1144
- console.log("[daemon] Provisioning result: " +
1145
- provisionResult.provisioned.length + " provisioned, " +
1146
- provisionResult.skipped.length + " skipped, " +
1147
- provisionResult.errors.length + " errors");
1143
+ var provisionResult = { provisioned: [], skipped: [], errors: [] };
1144
+ try {
1145
+ provisionResult = provisionAllUsers(usersModule);
1146
+ console.log("[daemon] Provisioning result: " +
1147
+ provisionResult.provisioned.length + " provisioned, " +
1148
+ provisionResult.skipped.length + " skipped, " +
1149
+ provisionResult.errors.length + " errors");
1150
+ } catch (provErr) {
1151
+ console.error("[daemon] Provisioning threw:", provErr.message);
1152
+ }
1148
1153
  // Set up ACLs for all existing projects
1149
- for (var pi = 0; pi < config.projects.length; pi++) {
1150
- var proj = config.projects[pi];
1151
- var projPath = proj.path;
1152
- var projVisibility = proj.visibility || "public";
1153
- // Grant ACL to project owner
1154
- if (proj.ownerId) {
1155
- var ownerUser = usersModule.findUserById(proj.ownerId);
1156
- if (ownerUser && ownerUser.linuxUser) {
1157
- grantProjectAccess(projPath, ownerUser.linuxUser);
1154
+ try {
1155
+ for (var pi = 0; pi < config.projects.length; pi++) {
1156
+ var proj = config.projects[pi];
1157
+ var projPath = proj.path;
1158
+ var projVisibility = proj.visibility || "public";
1159
+ // Grant ACL to project owner
1160
+ if (proj.ownerId) {
1161
+ var ownerUser = usersModule.findUserById(proj.ownerId);
1162
+ if (ownerUser && ownerUser.linuxUser) {
1163
+ grantProjectAccess(projPath, ownerUser.linuxUser);
1164
+ }
1158
1165
  }
1159
- }
1160
- // Public projects: grant ACL to all users
1161
- if (projVisibility === "public") {
1162
- grantAllUsersAccess(projPath, usersModule);
1163
- } else {
1164
- // Private projects: grant ACL to allowedUsers
1165
- var projAllowed = proj.allowedUsers || [];
1166
- for (var ai = 0; ai < projAllowed.length; ai++) {
1167
- var allowedUser = usersModule.findUserById(projAllowed[ai]);
1168
- if (allowedUser && allowedUser.linuxUser) {
1169
- grantProjectAccess(projPath, allowedUser.linuxUser);
1166
+ // Public projects: grant ACL to all users
1167
+ if (projVisibility === "public") {
1168
+ grantAllUsersAccess(projPath, usersModule);
1169
+ } else {
1170
+ // Private projects: grant ACL to allowedUsers
1171
+ var projAllowed = proj.allowedUsers || [];
1172
+ for (var ai = 0; ai < projAllowed.length; ai++) {
1173
+ var allowedUser = usersModule.findUserById(projAllowed[ai]);
1174
+ if (allowedUser && allowedUser.linuxUser) {
1175
+ grantProjectAccess(projPath, allowedUser.linuxUser);
1176
+ }
1170
1177
  }
1171
1178
  }
1172
1179
  }
1180
+ } catch (aclErr) {
1181
+ console.error("[daemon] ACL setup threw:", aclErr.message);
1173
1182
  }
1174
1183
  return { ok: true, provisioning: provisionResult };
1175
1184
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clay-server",
3
- "version": "2.20.1-beta.3",
3
+ "version": "2.20.1-beta.4",
4
4
  "description": "Web UI for Claude Code. Any device. Push notifications.",
5
5
  "bin": {
6
6
  "clay-server": "./bin/cli.js",