replicas-engine 0.1.261 → 0.1.262

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/src/index.js CHANGED
@@ -286,7 +286,7 @@ var WORKSPACE_SIZES = ["small", "large"];
286
286
  var INVALID_WORKSPACE_SIZE_ERROR = `Invalid size: must be one of ${WORKSPACE_SIZES.join(", ")}`;
287
287
 
288
288
  // ../shared/src/e2b.ts
289
- var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-06-04-v3";
289
+ var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-06-04-v4";
290
290
 
291
291
  // ../shared/src/runtime-env.ts
292
292
  function parsePosixEnvFile(content) {
@@ -6373,7 +6373,7 @@ var AspClient = class {
6373
6373
  // src/managers/codex-asp/app-server-process.ts
6374
6374
  var DEFAULT_CODEX_BINARY = "codex";
6375
6375
  var DEFAULT_CODEX_ARGS = ["app-server", "--listen", "stdio://"];
6376
- var ENGINE_PACKAGE_VERSION = "0.1.261";
6376
+ var ENGINE_PACKAGE_VERSION = "0.1.262";
6377
6377
  var INITIALIZE_METHOD = "initialize";
6378
6378
  var INITIALIZED_NOTIFICATION = "initialized";
6379
6379
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-engine",
3
- "version": "0.1.261",
3
+ "version": "0.1.262",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -10,7 +10,8 @@
10
10
  },
11
11
  "files": [
12
12
  "dist",
13
- "scripts/engine-watchdog.sh"
13
+ "scripts/engine-watchdog.sh",
14
+ "scripts/lockmem.c"
14
15
  ],
15
16
  "scripts": {
16
17
  "dev": "tsx watch src/index.ts",
@@ -32,6 +32,22 @@ cleanup() {
32
32
 
33
33
  trap cleanup SIGTERM SIGINT
34
34
 
35
+ # Default RLIMIT_MEMLOCK is 8 MB; engine needs ~120 MB. Cap at 512 MB so a
36
+ # runaway can't lock the whole sandbox.
37
+ sudo prlimit --memlock=536870912:536870912 --pid $$ 2>/dev/null || true
38
+
39
+ LOCKMEM_SO=/usr/local/lib/replicas-lockmem.so
40
+ if [ -r "$LOCKMEM_SO" ]; then
41
+ # Prepend (don't replace) so any inherited LD_PRELOAD still loads.
42
+ if [ -n "${LD_PRELOAD:-}" ]; then
43
+ ENGINE_LD_PRELOAD="$LOCKMEM_SO:$LD_PRELOAD"
44
+ else
45
+ ENGINE_LD_PRELOAD="$LOCKMEM_SO"
46
+ fi
47
+ else
48
+ ENGINE_LD_PRELOAD=""
49
+ fi
50
+
35
51
  while true; do
36
52
  if [ "$RESTART_COUNT" -ge "$MAX_RESTARTS" ]; then
37
53
  log "Exceeded max restarts ($MAX_RESTARTS). Giving up."
@@ -42,7 +58,11 @@ while true; do
42
58
  log "Starting replicas-engine (attempt $((RESTART_COUNT + 1)))${WARMING_FLAG:+ [warming mode]}"
43
59
 
44
60
  START_TIME=$(date +%s)
45
- replicas-engine $WARMING_FLAG >> "$BOOTSTRAP_LOG" 2>&1 &
61
+ if [ -n "$ENGINE_LD_PRELOAD" ]; then
62
+ LD_PRELOAD="$ENGINE_LD_PRELOAD" replicas-engine $WARMING_FLAG >> "$BOOTSTRAP_LOG" 2>&1 &
63
+ else
64
+ replicas-engine $WARMING_FLAG >> "$BOOTSTRAP_LOG" 2>&1 &
65
+ fi
46
66
  ENGINE_PID=$!
47
67
  echo "$ENGINE_PID" > "$PIDFILE"
48
68
 
@@ -0,0 +1,19 @@
1
+ // MCL_FUTURE is incompatible with V8 (crashes Isolate::Initialize because V8
2
+ // remaps heap regions); MCL_CURRENT is enough since the sandbox has no swap so
3
+ // anonymous heap pages are already pinned.
4
+ #define _GNU_SOURCE
5
+ #include <sys/mman.h>
6
+ #include <stdio.h>
7
+ #include <errno.h>
8
+ #include <string.h>
9
+ #include <unistd.h>
10
+
11
+ __attribute__((constructor))
12
+ static void replicas_lockmem_init(void) {
13
+ if (mlockall(MCL_CURRENT) != 0) {
14
+ fprintf(stderr, "[lockmem] mlockall(MCL_CURRENT) failed: %s (errno=%d); engine running unprotected\n",
15
+ strerror(errno), errno);
16
+ return;
17
+ }
18
+ fprintf(stderr, "[lockmem] engine pages locked (pid=%d)\n", getpid());
19
+ }