replicas-engine 0.1.162 → 0.1.164

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
@@ -285,7 +285,7 @@ function parseReplicasConfigString(content, filename) {
285
285
  }
286
286
 
287
287
  // ../shared/src/engine/environment.ts
288
- var DAYTONA_SNAPSHOT_ID = "13-05-2026-royal-york-v8";
288
+ var DAYTONA_SNAPSHOT_ID = "13-05-2026-royal-york-v10";
289
289
 
290
290
  // ../shared/src/engine/types.ts
291
291
  var DEFAULT_CHAT_TITLES = {
package/package.json CHANGED
@@ -1,14 +1,16 @@
1
1
  {
2
2
  "name": "replicas-engine",
3
- "version": "0.1.162",
3
+ "version": "0.1.164",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
7
7
  "bin": {
8
- "replicas-engine": "./dist/src/index.js"
8
+ "replicas-engine": "./dist/src/index.js",
9
+ "replicas-engine-watchdog": "./scripts/engine-watchdog.sh"
9
10
  },
10
11
  "files": [
11
- "dist"
12
+ "dist",
13
+ "scripts/engine-watchdog.sh"
12
14
  ],
13
15
  "scripts": {
14
16
  "dev": "tsx watch src/index.ts",
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env bash
2
+ # Watchdog for replicas-engine: monitors the process and restarts on crash.
3
+ # Uses exponential backoff to avoid tight restart loops on persistent failures.
4
+ # Resets backoff after the engine runs stably for STABLE_THRESHOLD seconds.
5
+ set -u
6
+
7
+ WARMING_FLAG="${1:-}"
8
+ PIDFILE="/tmp/replicas-engine.pid"
9
+ MAX_BACKOFF=60
10
+ BACKOFF=1
11
+ RESTART_COUNT=0
12
+ MAX_RESTARTS=20
13
+ STABLE_THRESHOLD=300
14
+
15
+ log() {
16
+ echo "[$(date -Iseconds)] [engine-watchdog] $*"
17
+ }
18
+
19
+ cleanup() {
20
+ log "Watchdog shutting down"
21
+ if [ -f "$PIDFILE" ]; then
22
+ local pid
23
+ pid=$(cat "$PIDFILE")
24
+ if kill -0 "$pid" 2>/dev/null; then
25
+ kill "$pid" 2>/dev/null
26
+ wait "$pid" 2>/dev/null
27
+ fi
28
+ fi
29
+ rm -f "$PIDFILE"
30
+ exit 0
31
+ }
32
+
33
+ trap cleanup SIGTERM SIGINT
34
+
35
+ while true; do
36
+ if [ "$RESTART_COUNT" -ge "$MAX_RESTARTS" ]; then
37
+ log "Exceeded max restarts ($MAX_RESTARTS). Giving up."
38
+ exit 1
39
+ fi
40
+
41
+ BOOTSTRAP_LOG="/tmp/replicas-engine-bootstrap-$(date +%Y%m%d-%H%M%S).log"
42
+ log "Starting replicas-engine (attempt $((RESTART_COUNT + 1)))${WARMING_FLAG:+ [warming mode]}"
43
+
44
+ START_TIME=$(date +%s)
45
+ replicas-engine $WARMING_FLAG >> "$BOOTSTRAP_LOG" 2>&1 &
46
+ ENGINE_PID=$!
47
+ echo "$ENGINE_PID" > "$PIDFILE"
48
+
49
+ wait "$ENGINE_PID"
50
+ EXIT_CODE=$?
51
+ END_TIME=$(date +%s)
52
+ UPTIME=$((END_TIME - START_TIME))
53
+
54
+ rm -f "$PIDFILE"
55
+
56
+ # Exit code 0 = clean shutdown, 143 = SIGTERM (sandbox stopping)
57
+ if [ $EXIT_CODE -eq 0 ] || [ $EXIT_CODE -eq 143 ]; then
58
+ log "Engine exited (code $EXIT_CODE). Not restarting."
59
+ exit 0
60
+ fi
61
+
62
+ RESTART_COUNT=$((RESTART_COUNT + 1))
63
+
64
+ if [ "$UPTIME" -ge "$STABLE_THRESHOLD" ]; then
65
+ BACKOFF=1
66
+ RESTART_COUNT=1
67
+ log "Engine crashed (exit code $EXIT_CODE, uptime ${UPTIME}s) after stable run. Resetting backoff."
68
+ else
69
+ log "Engine crashed (exit code $EXIT_CODE, uptime ${UPTIME}s). Restart #$RESTART_COUNT in ${BACKOFF}s..."
70
+ sleep "$BACKOFF"
71
+ if [ "$BACKOFF" -lt "$MAX_BACKOFF" ]; then
72
+ BACKOFF=$((BACKOFF * 2))
73
+ if [ "$BACKOFF" -gt "$MAX_BACKOFF" ]; then
74
+ BACKOFF=$MAX_BACKOFF
75
+ fi
76
+ fi
77
+ fi
78
+ done