@farazirfan/costar-server-executor 1.7.54 → 1.7.56

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 (46) hide show
  1. package/dist/cron/local-run-log.d.ts +35 -0
  2. package/dist/cron/local-run-log.d.ts.map +1 -0
  3. package/dist/cron/local-run-log.js +153 -0
  4. package/dist/cron/local-run-log.js.map +1 -0
  5. package/dist/cron/local-store.d.ts +86 -0
  6. package/dist/cron/local-store.d.ts.map +1 -0
  7. package/dist/cron/local-store.js +199 -0
  8. package/dist/cron/local-store.js.map +1 -0
  9. package/dist/db/local-database.d.ts +134 -0
  10. package/dist/db/local-database.d.ts.map +1 -0
  11. package/dist/db/local-database.js +419 -0
  12. package/dist/db/local-database.js.map +1 -0
  13. package/dist/middleware/auth.d.ts +13 -0
  14. package/dist/middleware/auth.d.ts.map +1 -0
  15. package/dist/middleware/auth.js +67 -0
  16. package/dist/middleware/auth.js.map +1 -0
  17. package/dist/routes/db-ops.d.ts +11 -0
  18. package/dist/routes/db-ops.d.ts.map +1 -0
  19. package/dist/routes/db-ops.js +266 -0
  20. package/dist/routes/db-ops.js.map +1 -0
  21. package/dist/routes/sandbox-ops.d.ts +15 -0
  22. package/dist/routes/sandbox-ops.d.ts.map +1 -0
  23. package/dist/routes/sandbox-ops.js +306 -0
  24. package/dist/routes/sandbox-ops.js.map +1 -0
  25. package/dist/server.d.ts +2 -0
  26. package/dist/server.d.ts.map +1 -1
  27. package/dist/server.js +61 -1
  28. package/dist/server.js.map +1 -1
  29. package/dist/services/backup-service.d.ts +49 -0
  30. package/dist/services/backup-service.d.ts.map +1 -0
  31. package/dist/services/backup-service.js +113 -0
  32. package/dist/services/backup-service.js.map +1 -0
  33. package/dist/services/s3-file-watcher.d.ts +79 -0
  34. package/dist/services/s3-file-watcher.d.ts.map +1 -0
  35. package/dist/services/s3-file-watcher.js +191 -0
  36. package/dist/services/s3-file-watcher.js.map +1 -0
  37. package/dist/startup/migrate.d.ts +32 -0
  38. package/dist/startup/migrate.d.ts.map +1 -0
  39. package/dist/startup/migrate.js +180 -0
  40. package/dist/startup/migrate.js.map +1 -0
  41. package/dist/web-server.d.ts +7 -0
  42. package/dist/web-server.d.ts.map +1 -1
  43. package/dist/web-server.js +59 -18
  44. package/dist/web-server.js.map +1 -1
  45. package/package.json +2 -1
  46. package/public/index.html +607 -2
package/dist/server.js CHANGED
@@ -19,6 +19,9 @@ import { createSkillsManager } from "./skills/index.js";
19
19
  import { syncBundledSkillsToWorkspace } from "./skills/sync.js";
20
20
  import { startWebServer } from "./web-server.js";
21
21
  import { interceptConsoleLogs } from "./utils/log-buffer.js";
22
+ import { S3FileWatcher } from "./services/s3-file-watcher.js";
23
+ import { initDatabase, closeDatabase } from "./db/local-database.js";
24
+ import { runStartupMigrations } from "./startup/migrate.js";
22
25
  /**
23
26
  * Validate server configuration
24
27
  */
@@ -98,6 +101,7 @@ async function initializeServer(config) {
98
101
  cronScheduler: null,
99
102
  heartbeatRunner: null,
100
103
  skillsManager: null,
104
+ s3FileWatcher: null,
101
105
  webServer: null,
102
106
  shuttingDown: false,
103
107
  };
@@ -112,6 +116,18 @@ async function initializeServer(config) {
112
116
  });
113
117
  }
114
118
  console.log("[SERVER] Supabase initialized");
119
+ // 1b. Initialize local SQLite database (Phase 4)
120
+ console.log("[SERVER] Initializing local database...");
121
+ try {
122
+ await initDatabase();
123
+ console.log("[SERVER] Local database initialized");
124
+ }
125
+ catch (err) {
126
+ console.warn("[SERVER] Local database init failed (non-fatal, better-sqlite3 may not be installed):", err);
127
+ }
128
+ // 1c. Run startup migrations (cron Supabase → local, auto-generate CLIENT_API_TOKEN)
129
+ // OpenClaw pattern: detect on load, migrate if needed, idempotent
130
+ await runStartupMigrations(config.userId);
115
131
  // 2. Ensure workspace directory and create template files
116
132
  console.log("[SERVER] Setting up workspace...");
117
133
  const workspaceDir = config.workspaceDir || getDefaultWorkspaceDir();
@@ -251,7 +267,28 @@ async function initializeServer(config) {
251
267
  });
252
268
  console.log(`[SERVER] Update checks scheduled (auto-update: ${config.enableAutoUpdate !== false ? "enabled" : "disabled"})`);
253
269
  }
254
- // 10. Start web dashboard (if enabled)
270
+ // 10. Start S3 file watcher (decoupled sync — Phase 1C)
271
+ const sandboxId = process.env.SANDBOX_ID || "";
272
+ const awsBucket = process.env.AWS_BUCKET_NAME || "";
273
+ const awsRegion = process.env.AWS_REGION || "us-east-1";
274
+ const watchDir = "/home/user/task";
275
+ if (sandboxId && awsBucket && fs.existsSync(watchDir)) {
276
+ console.log("[SERVER] Starting S3 file watcher...");
277
+ state.s3FileWatcher = new S3FileWatcher({
278
+ watchDir,
279
+ bucketName: awsBucket,
280
+ region: awsRegion,
281
+ sandboxId,
282
+ debounceMs: 5000,
283
+ });
284
+ await state.s3FileWatcher.start();
285
+ console.log(`[SERVER] S3 file watcher active: ${watchDir} → s3://${awsBucket}/${sandboxId}/`);
286
+ }
287
+ else {
288
+ console.log(`[SERVER] S3 file watcher skipped (SANDBOX_ID=${sandboxId ? "set" : "unset"}, AWS_BUCKET_NAME=${awsBucket ? "set" : "unset"}, watchDir=${fs.existsSync(watchDir) ? "exists" : "missing"})`);
289
+ }
290
+ // 11. Start web dashboard (if enabled)
291
+ const clientApiToken = process.env.CLIENT_API_TOKEN || "";
255
292
  if (config.enableWeb !== false) {
256
293
  const webPort = config.webPort || 3000;
257
294
  const webDeps = {
@@ -263,9 +300,18 @@ async function initializeServer(config) {
263
300
  userId: config.userId,
264
301
  triggerUpdate,
265
302
  packageVersion,
303
+ clientApiToken,
304
+ sandboxId: sandboxId || undefined,
305
+ s3FileWatcher: state.s3FileWatcher,
266
306
  };
267
307
  state.webServer = startWebServer(webDeps, webPort);
268
308
  console.log(`[SERVER] Web dashboard available at http://localhost:${webPort}`);
309
+ if (clientApiToken) {
310
+ console.log("[SERVER] Auth middleware active (CLIENT_API_TOKEN set)");
311
+ }
312
+ else {
313
+ console.log("[SERVER] WARNING: No CLIENT_API_TOKEN set — API endpoints unprotected");
314
+ }
269
315
  }
270
316
  console.log("[SERVER] Server initialization complete");
271
317
  return state;
@@ -282,6 +328,12 @@ async function cleanupServer(state) {
282
328
  state.heartbeatRunner.stop();
283
329
  state.heartbeatRunner = null;
284
330
  }
331
+ // Stop S3 file watcher
332
+ if (state.s3FileWatcher) {
333
+ console.log("[SERVER] Stopping S3 file watcher...");
334
+ await state.s3FileWatcher.stop();
335
+ state.s3FileWatcher = null;
336
+ }
285
337
  // Stop cron scheduler
286
338
  if (state.cronScheduler) {
287
339
  console.log("[SERVER] Stopping cron scheduler...");
@@ -294,6 +346,14 @@ async function cleanupServer(state) {
294
346
  state.webServer.server.close();
295
347
  state.webServer = null;
296
348
  }
349
+ // Close local database
350
+ try {
351
+ closeDatabase();
352
+ console.log("[SERVER] Local database closed");
353
+ }
354
+ catch {
355
+ // Ignore
356
+ }
297
357
  // Clear agent reference
298
358
  state.agent = null;
299
359
  state.skillsManager = null;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EACL,mBAAmB,EACnB,+BAA+B,EAC/B,eAAe,EACf,iBAAiB,GAElB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAsB,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AA6B7D;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,qCAAqC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,wBAAwB,CAAC,KAAyB;IACzD,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;IAChD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,UAAU,CAAC;IAE/C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,uFAAuF;IACvF,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QAClC,8DAA8D;QAC9D,IAAI,GAAG,IAAI,MAAM;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,6BAA6B;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE;QACjC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE;QACnD,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpD,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;QACvC,aAAa,EAAG,OAAO,CAAC,GAAG,CAAC,cAAgC,IAAI,QAAQ;QACxE,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,OAAO;QAC9D,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,OAAO;QAC5D,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,OAAO;QACzD,mBAAmB,EAAE,wBAAwB,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC7E,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B;QACjE,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB;QAC7D,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC;QACrD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,OAAO;KAC9C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAAC,MAAoB;IAClD,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAE/D,8FAA8F;IAC9F,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAE,gCAAgC;IACpF,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAE1D,MAAM,KAAK,GAAgB;QACzB,KAAK,EAAE,IAAI;QACX,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,IAAI;QACnB,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,KAAK;KACpB,CAAC;IAEF,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;QAC7B,kBAAkB,CAAC;YACjB,QAAQ,EAAE;gBACR,GAAG,EAAE,MAAM,CAAC,WAAW;gBACvB,UAAU,EAAE,MAAM,CAAC,WAAW;aAC/B;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAE7C,0DAA0D;IAC1D,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,sBAAsB,EAAE,CAAC;IACrE,MAAM,eAAe,CAAC;QACpB,GAAG,EAAE,YAAY;QACjB,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAAC;IAE5D,wGAAwG;IACxG,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,4BAA4B,CAAC;QAC9C,UAAU,EAAE,gBAAgB;QAC5B,YAAY;KACb,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,8BAA8B,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,kCAAkC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,kCAAkC,UAAU,CAAC,MAAM,CAAC,MAAM,SAAS,UAAU,CAAC,OAAO,CAAC,MAAM,aAAa,UAAU,CAAC,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;IAE7J,iEAAiE;IACjE,oEAAoE;IACpE,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG;QAClB,KAAK,EAAE;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB;QACD,OAAO,EAAE;YACP,SAAS,EAAE,MAAM,CAAC,eAAe;SAClC;QACD,SAAS,EAAE;YACT,OAAO,EAAE,YAAY;SACtB;KACF,CAAC;IAEF,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,KAAK,CAAC,eAAe,GAAG,IAAI,eAAe,CACzC,IAAW,EAAE,gCAAgC;QAC7C,WAAW,EACX;YACE,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,MAAM,CAAC,mBAAmB,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;YACxD,eAAe,EAAE,MAAM,CAAC,wBAAwB;YAChD,aAAa,EAAE,MAAM,CAAC,sBAAsB;SAC7C,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC5E,CAAC;IAED,gEAAgE;IAChE,6DAA6D;IAC7D,uEAAuE;IACvE,kFAAkF;IAClF,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAiB;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,kBAAkB,EAAE,GAAG,EAAE;YACvB,OAAO,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI;gBACzC,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,KAAK;gBAClB,WAAW,EAAE,IAAI;gBACjB,YAAY,EAAE,CAAC;aAChB,CAAC;QACJ,CAAC;QACD,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC1B,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC/B,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACxB,MAAM,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC;KACF,CAAC;IAEF,mEAAmE;IACnE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,mBAAmB,CAAC;QACxC,YAAY;QACZ,UAAU,EAAE,gBAAgB;QAC5B,MAAM,EAAE,EAAE;KACX,CAAC,CAAC;IACH,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,cAAc,GAAG,aAAa,CAAC,iBAAiB,EAAE,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,YAAY,cAAc,CAAC,MAAM,yBAAyB,CAAC,CAAC;IAExE,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC;IACpC,KAAK,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChF,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,+BAA+B,cAAc,CAAC,MAAM,qCAAqC,CAAC,CAAC;IAEvG,mDAAmD;IACnD,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,2CAA2C;QAC1C,KAAK,CAAC,eAAuB,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACnD,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAED,0DAA0D;IAC1D,wEAAwE;IACxE,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,KAAK,CAAC,aAAa,GAAG,IAAI,aAAa,CACrC,WAAW,EACX,KAAK,CAAC,eAAe,IAAI,SAAS,EAClC,KAAK,CAAC,KAAK,IAAI,SAAS,CACzB,CAAC;IACF,0EAA0E;IAC1E,KAAK,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAE/C,mDAAmD;IACnD,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAEjD,wEAAwE;IACxE,MAAM,YAAY,GAAG,GAAY,EAAE;QACjC,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,WAAW,CAAC;QAChE,OAAO,SAAS,IAAI,QAAQ,CAAC;IAC/B,CAAC,CAAC;IAEF,2EAA2E;IAC3E,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,KAAK,KAAK;QACrD,CAAC,CAAC,KAAK,EAAE,IAA2C,EAAE,EAAE;YACpD,OAAO,eAAe,CAAC;gBACrB,aAAa,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ;gBACvC,OAAO,EAAE,MAAM,CAAC,aAAa;gBAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,cAAc,EAAE,cAAc;gBAC9B,YAAY;gBACZ,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,wCAAwC;IACxC,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,mBAAmB,CAAC;YAClB,OAAO,EAAE,MAAM,CAAC,aAAa;YAC7B,OAAO,EAAE,IAAI;YACb,iBAAiB,EAAE,+BAA+B,CAAC,MAAM,CAAC,MAAM,CAAC;YACjE,UAAU,EAAE,MAAM,CAAC,gBAAgB,KAAK,KAAK;YAC7C,YAAY,EAAE,aAAa;gBACzB,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE;oBACT,KAAK,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,aAAa,IAAI,QAAQ,EAAE,CAAC,CAAC;gBACpE,CAAC;gBACH,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,kDAAkD,MAAM,CAAC,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;IAC/H,CAAC;IAED,uCAAuC;IACvC,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;QACvC,MAAM,OAAO,GAAkB;YAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,YAAY;YACZ,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa;YACb,cAAc;SACf,CAAC;QACF,KAAK,CAAC,SAAS,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,wDAAwD,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,aAAa,CAAC,KAAkB;IAC7C,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAEpD,wBAAwB;IACxB,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAC7B,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED,sBAAsB;IACtB,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC3B,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,wBAAwB;IACxB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;IAE3B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAoB;IAClD,yBAAyB;IACzB,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,+BAA+B;IAC/B,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE7C,+CAA+C;IAC/C,MAAM,cAAc,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QAC9C,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,4BAA4B,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QAED,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,oBAAoB,CAAC,CAAC;QAE7D,4DAA4D;QAC5D,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACrC,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3B,YAAY,CAAC,cAAc,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;YAC/C,YAAY,CAAC,cAAc,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IAEF,8CAA8C;IAC9C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IAErD,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IAEjE,qBAAqB;IACrB,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE;QACrB,yCAAyC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,UAAU,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,IAAI,CAAC;QACH,mEAAmE;QACnE,oBAAoB,EAAE,CAAC;QAEvB,sCAAsC;QACtC,aAAa,EAAE,CAAC;QAEhB,oEAAoE;QACpE,mFAAmF;QACnF,MAAM,gBAAgB,EAAE,CAAC;QAEzB,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QAEnC,wCAAwC;QACxC,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAElC,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAC5C,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,2BAA2B;AAC3B,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,KAAK,IAAI,EAAE,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * S3 Backup Service — Disaster Recovery for Sandbox Data
3
+ * Periodically backs up ~/.costar/ to S3.
4
+ * Part of Phase 6: Direct Client → Sandbox Architecture.
5
+ *
6
+ * Uses `aws s3 sync` for incremental backups.
7
+ * Excludes secrets (.env) and temp files.
8
+ */
9
+ export type BackupServiceConfig = {
10
+ /** S3 bucket name */
11
+ bucketName: string;
12
+ /** AWS region */
13
+ region: string;
14
+ /** Sandbox ID for S3 path prefix */
15
+ sandboxId: string;
16
+ /** Backup interval in ms (default: 30 minutes) */
17
+ intervalMs?: number;
18
+ };
19
+ export declare class BackupService {
20
+ private config;
21
+ private timer;
22
+ private isRunning;
23
+ private stats;
24
+ constructor(config: BackupServiceConfig);
25
+ /**
26
+ * Start periodic backups.
27
+ */
28
+ start(): void;
29
+ /**
30
+ * Stop periodic backups.
31
+ */
32
+ stop(): void;
33
+ /**
34
+ * Run a single backup.
35
+ */
36
+ runBackup(): Promise<void>;
37
+ /**
38
+ * Get backup status for API.
39
+ */
40
+ getStatus(): {
41
+ isRunning: boolean;
42
+ totalBackups: number;
43
+ totalErrors: number;
44
+ lastBackupAt: number;
45
+ lastDurationMs: number;
46
+ intervalMs: number;
47
+ };
48
+ }
49
+ //# sourceMappingURL=backup-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup-service.d.ts","sourceRoot":"","sources":["../../src/services/backup-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,MAAM,mBAAmB,GAAG;IAChC,qBAAqB;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAKX;gBAEU,MAAM,EAAE,mBAAmB;IAOvC;;OAEG;IACH,KAAK,IAAI,IAAI;IAgBb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDhC;;OAEG;IACH,SAAS,IAAI;QACX,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;KACpB;CAOF"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * S3 Backup Service — Disaster Recovery for Sandbox Data
3
+ * Periodically backs up ~/.costar/ to S3.
4
+ * Part of Phase 6: Direct Client → Sandbox Architecture.
5
+ *
6
+ * Uses `aws s3 sync` for incremental backups.
7
+ * Excludes secrets (.env) and temp files.
8
+ */
9
+ import { exec } from "node:child_process";
10
+ import { resolveCoStarDir } from "../cli/paths.js";
11
+ export class BackupService {
12
+ config;
13
+ timer = null;
14
+ isRunning = false;
15
+ stats = {
16
+ totalBackups: 0,
17
+ totalErrors: 0,
18
+ lastBackupAt: 0,
19
+ lastDurationMs: 0,
20
+ };
21
+ constructor(config) {
22
+ this.config = {
23
+ ...config,
24
+ intervalMs: config.intervalMs ?? 30 * 60 * 1000, // 30 min default
25
+ };
26
+ }
27
+ /**
28
+ * Start periodic backups.
29
+ */
30
+ start() {
31
+ if (this.timer)
32
+ return;
33
+ // Run first backup after 5 minutes (let server settle)
34
+ setTimeout(() => {
35
+ void this.runBackup();
36
+ }, 5 * 60 * 1000);
37
+ // Then every intervalMs
38
+ this.timer = setInterval(() => {
39
+ void this.runBackup();
40
+ }, this.config.intervalMs);
41
+ console.log(`[BACKUP] Started — every ${Math.round(this.config.intervalMs / 60000)} minutes`);
42
+ }
43
+ /**
44
+ * Stop periodic backups.
45
+ */
46
+ stop() {
47
+ if (this.timer) {
48
+ clearInterval(this.timer);
49
+ this.timer = null;
50
+ }
51
+ console.log("[BACKUP] Stopped");
52
+ }
53
+ /**
54
+ * Run a single backup.
55
+ */
56
+ async runBackup() {
57
+ if (this.isRunning) {
58
+ console.log("[BACKUP] Skipping — previous backup still running");
59
+ return;
60
+ }
61
+ this.isRunning = true;
62
+ const startTime = Date.now();
63
+ const costarDir = resolveCoStarDir();
64
+ const s3Dest = `s3://${this.config.bucketName}/backups/${this.config.sandboxId}/`;
65
+ // Exclude patterns
66
+ const excludes = [
67
+ "--exclude '.env'",
68
+ "--exclude '*.tmp.*'",
69
+ "--exclude 'node_modules/*'",
70
+ "--exclude '.cache/*'",
71
+ "--exclude '*.lock'",
72
+ ].join(" ");
73
+ const command = `aws s3 sync "${costarDir}" "${s3Dest}" ${excludes} --region ${this.config.region} --delete`;
74
+ try {
75
+ await new Promise((resolve, reject) => {
76
+ exec(command, { timeout: 5 * 60 * 1000 }, (error, stdout, stderr) => {
77
+ if (error) {
78
+ console.error(`[BACKUP] Error: ${error.message}`);
79
+ if (stderr)
80
+ console.error(`[BACKUP] stderr: ${stderr}`);
81
+ reject(error);
82
+ return;
83
+ }
84
+ if (stdout.trim()) {
85
+ console.log(`[BACKUP] Synced: ${stdout.trim().split("\n").length} files`);
86
+ }
87
+ resolve();
88
+ });
89
+ });
90
+ this.stats.totalBackups++;
91
+ this.stats.lastBackupAt = Date.now();
92
+ this.stats.lastDurationMs = Date.now() - startTime;
93
+ console.log(`[BACKUP] Completed in ${this.stats.lastDurationMs}ms`);
94
+ }
95
+ catch {
96
+ this.stats.totalErrors++;
97
+ }
98
+ finally {
99
+ this.isRunning = false;
100
+ }
101
+ }
102
+ /**
103
+ * Get backup status for API.
104
+ */
105
+ getStatus() {
106
+ return {
107
+ isRunning: this.isRunning,
108
+ ...this.stats,
109
+ intervalMs: this.config.intervalMs,
110
+ };
111
+ }
112
+ }
113
+ //# sourceMappingURL=backup-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup-service.js","sourceRoot":"","sources":["../../src/services/backup-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * S3 File Watcher — Decoupled S3 Sync via chokidar
3
+ * Watches /home/user/task/ for file changes and uploads individually.
4
+ * Part of Phase 1C: Direct Client → Sandbox Architecture.
5
+ *
6
+ * Replaces the old approach of running `aws s3 sync` on every command.
7
+ * Instead, uses chokidar to detect file changes and uploads them individually
8
+ * via `aws s3 cp`, debounced and batched for efficiency.
9
+ */
10
+ export type S3FileWatcherConfig = {
11
+ /** Directory to watch (default: /home/user/task/) */
12
+ watchDir: string;
13
+ /** S3 bucket name */
14
+ bucketName: string;
15
+ /** AWS region */
16
+ region: string;
17
+ /** Sandbox ID for S3 path prefix */
18
+ sandboxId: string;
19
+ /** Debounce interval in ms (default: 5000) */
20
+ debounceMs?: number;
21
+ };
22
+ export type UploadRecord = {
23
+ path: string;
24
+ s3Url: string;
25
+ uploadedAt: number;
26
+ };
27
+ /**
28
+ * S3 File Watcher — watches a directory and uploads changed files to S3.
29
+ *
30
+ * Uses dynamic import for chokidar (ESM-only since v4).
31
+ */
32
+ export declare class S3FileWatcher {
33
+ private config;
34
+ private watcher;
35
+ private pendingUploads;
36
+ private debounceTimer;
37
+ private recentUploads;
38
+ private maxRecentUploads;
39
+ private isUploading;
40
+ private stats;
41
+ constructor(config: S3FileWatcherConfig);
42
+ /**
43
+ * Start watching for file changes.
44
+ */
45
+ start(): Promise<void>;
46
+ /**
47
+ * Stop watching.
48
+ */
49
+ stop(): Promise<void>;
50
+ /**
51
+ * Queue a file for upload (debounced).
52
+ */
53
+ private queueUpload;
54
+ /**
55
+ * Upload all pending files to S3.
56
+ */
57
+ private flushUploads;
58
+ /**
59
+ * Upload a single file to S3 via aws cli.
60
+ */
61
+ private uploadFile;
62
+ /**
63
+ * Get recent uploads since a timestamp.
64
+ * Used by sandbox-ops to report changed_files in execute response.
65
+ */
66
+ getRecentUploads(since: number): UploadRecord[];
67
+ /**
68
+ * Get watcher status for API.
69
+ */
70
+ getStatus(): {
71
+ watching: boolean;
72
+ watchDir: string;
73
+ pendingUploads: number;
74
+ totalUploads: number;
75
+ totalErrors: number;
76
+ lastUploadAt: number;
77
+ };
78
+ }
79
+ //# sourceMappingURL=s3-file-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-file-watcher.d.ts","sourceRoot":"","sources":["../../src/services/s3-file-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,MAAM,mBAAmB,GAAG;IAChC,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAmBF;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgC;IAE9C,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,gBAAgB,CAAO;IAC/B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAIX;gBAEU,MAAM,EAAE,mBAAmB;IAOvC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqC5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAanB;;OAEG;YACW,YAAY;IAoB1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAwClB;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;IAI/C;;OAEG;IACH,SAAS,IAAI;QACX,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB;CAUF"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * S3 File Watcher — Decoupled S3 Sync via chokidar
3
+ * Watches /home/user/task/ for file changes and uploads individually.
4
+ * Part of Phase 1C: Direct Client → Sandbox Architecture.
5
+ *
6
+ * Replaces the old approach of running `aws s3 sync` on every command.
7
+ * Instead, uses chokidar to detect file changes and uploads them individually
8
+ * via `aws s3 cp`, debounced and batched for efficiency.
9
+ */
10
+ import { exec } from "node:child_process";
11
+ import path from "node:path";
12
+ import fs from "node:fs";
13
+ /** Ignore patterns — directories/files to skip */
14
+ const IGNORE_PATTERNS = [
15
+ "**/node_modules/**",
16
+ "**/.git/**",
17
+ "**/__pycache__/**",
18
+ "**/dist/**",
19
+ "**/.next/**",
20
+ "**/.cache/**",
21
+ "**/.venv/**",
22
+ "**/venv/**",
23
+ "**/*.pyc",
24
+ "**/.DS_Store",
25
+ "**/package-lock.json",
26
+ "**/yarn.lock",
27
+ "**/pnpm-lock.yaml",
28
+ ];
29
+ /**
30
+ * S3 File Watcher — watches a directory and uploads changed files to S3.
31
+ *
32
+ * Uses dynamic import for chokidar (ESM-only since v4).
33
+ */
34
+ export class S3FileWatcher {
35
+ config;
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ watcher = null;
38
+ pendingUploads = new Set();
39
+ debounceTimer = null;
40
+ recentUploads = [];
41
+ maxRecentUploads = 100;
42
+ isUploading = false;
43
+ stats = {
44
+ totalUploads: 0,
45
+ totalErrors: 0,
46
+ lastUploadAt: 0,
47
+ };
48
+ constructor(config) {
49
+ this.config = {
50
+ ...config,
51
+ debounceMs: config.debounceMs ?? 5000,
52
+ };
53
+ }
54
+ /**
55
+ * Start watching for file changes.
56
+ */
57
+ async start() {
58
+ const { watchDir } = this.config;
59
+ if (!fs.existsSync(watchDir)) {
60
+ console.log(`[S3-WATCHER] Watch directory does not exist: ${watchDir}`);
61
+ return;
62
+ }
63
+ try {
64
+ // Dynamic import for chokidar (ESM)
65
+ const { watch } = await import("chokidar");
66
+ this.watcher = watch(watchDir, {
67
+ ignored: IGNORE_PATTERNS,
68
+ persistent: true,
69
+ ignoreInitial: true, // Don't upload everything on startup
70
+ followSymlinks: false,
71
+ awaitWriteFinish: {
72
+ stabilityThreshold: 1000,
73
+ pollInterval: 200,
74
+ },
75
+ });
76
+ this.watcher.on("add", (filePath) => this.queueUpload(filePath));
77
+ this.watcher.on("change", (filePath) => this.queueUpload(filePath));
78
+ // No "unlink" handler — we never delete from S3 (safe from data loss)
79
+ this.watcher.on("error", (error) => {
80
+ console.error("[S3-WATCHER] Watcher error:", error.message);
81
+ });
82
+ console.log(`[S3-WATCHER] Watching ${watchDir} for changes`);
83
+ }
84
+ catch (error) {
85
+ console.error("[S3-WATCHER] Failed to start file watcher:", error);
86
+ }
87
+ }
88
+ /**
89
+ * Stop watching.
90
+ */
91
+ async stop() {
92
+ if (this.debounceTimer) {
93
+ clearTimeout(this.debounceTimer);
94
+ this.debounceTimer = null;
95
+ }
96
+ if (this.watcher) {
97
+ await this.watcher.close();
98
+ this.watcher = null;
99
+ }
100
+ console.log("[S3-WATCHER] Stopped");
101
+ }
102
+ /**
103
+ * Queue a file for upload (debounced).
104
+ */
105
+ queueUpload(filePath) {
106
+ this.pendingUploads.add(filePath);
107
+ // Reset debounce timer
108
+ if (this.debounceTimer) {
109
+ clearTimeout(this.debounceTimer);
110
+ }
111
+ this.debounceTimer = setTimeout(() => {
112
+ void this.flushUploads();
113
+ }, this.config.debounceMs);
114
+ }
115
+ /**
116
+ * Upload all pending files to S3.
117
+ */
118
+ async flushUploads() {
119
+ if (this.isUploading || this.pendingUploads.size === 0)
120
+ return;
121
+ this.isUploading = true;
122
+ const filesToUpload = [...this.pendingUploads];
123
+ this.pendingUploads.clear();
124
+ console.log(`[S3-WATCHER] Uploading ${filesToUpload.length} file(s) to S3...`);
125
+ const uploadPromises = filesToUpload.map((filePath) => this.uploadFile(filePath));
126
+ await Promise.allSettled(uploadPromises);
127
+ this.isUploading = false;
128
+ // If more files queued during upload, flush again
129
+ if (this.pendingUploads.size > 0) {
130
+ void this.flushUploads();
131
+ }
132
+ }
133
+ /**
134
+ * Upload a single file to S3 via aws cli.
135
+ */
136
+ uploadFile(filePath) {
137
+ return new Promise((resolve) => {
138
+ // Skip if file no longer exists
139
+ if (!fs.existsSync(filePath)) {
140
+ resolve();
141
+ return;
142
+ }
143
+ const relativePath = path.relative(this.config.watchDir, filePath);
144
+ const s3Key = `${this.config.sandboxId}/${relativePath}`;
145
+ const s3Url = `https://${this.config.bucketName}.s3.${this.config.region}.amazonaws.com/${s3Key}`;
146
+ const command = `aws s3 cp "${filePath}" "s3://${this.config.bucketName}/${s3Key}" --region ${this.config.region}`;
147
+ exec(command, { timeout: 30_000 }, (error) => {
148
+ if (error) {
149
+ console.error(`[S3-WATCHER] Upload failed: ${relativePath} — ${error.message}`);
150
+ this.stats.totalErrors++;
151
+ }
152
+ else {
153
+ this.stats.totalUploads++;
154
+ this.stats.lastUploadAt = Date.now();
155
+ // Track in ring buffer
156
+ this.recentUploads.push({
157
+ path: filePath,
158
+ s3Url,
159
+ uploadedAt: Date.now(),
160
+ });
161
+ // Prune ring buffer
162
+ if (this.recentUploads.length > this.maxRecentUploads) {
163
+ this.recentUploads = this.recentUploads.slice(-this.maxRecentUploads);
164
+ }
165
+ }
166
+ resolve();
167
+ });
168
+ });
169
+ }
170
+ /**
171
+ * Get recent uploads since a timestamp.
172
+ * Used by sandbox-ops to report changed_files in execute response.
173
+ */
174
+ getRecentUploads(since) {
175
+ return this.recentUploads.filter((u) => u.uploadedAt >= since);
176
+ }
177
+ /**
178
+ * Get watcher status for API.
179
+ */
180
+ getStatus() {
181
+ return {
182
+ watching: this.watcher !== null,
183
+ watchDir: this.config.watchDir,
184
+ pendingUploads: this.pendingUploads.size,
185
+ totalUploads: this.stats.totalUploads,
186
+ totalErrors: this.stats.totalErrors,
187
+ lastUploadAt: this.stats.lastUploadAt,
188
+ };
189
+ }
190
+ }
191
+ //# sourceMappingURL=s3-file-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-file-watcher.js","sourceRoot":"","sources":["../../src/services/s3-file-watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Startup Migrations — One-time data migration on server start
3
+ *
4
+ * Follows OpenClaw's "detect on load, migrate if needed, idempotent" pattern.
5
+ * Each migration checks its own precondition (e.g., local store empty)
6
+ * so it's safe to run every startup without a version tracker.
7
+ */
8
+ /**
9
+ * Migrate cron jobs from Supabase to local JSON store.
10
+ *
11
+ * Precondition: local store has zero jobs for this user.
12
+ * If Supabase has jobs, copies them to the local store.
13
+ * Naturally idempotent — once local store has jobs, this is a no-op.
14
+ */
15
+ export declare function migrateCronJobsFromSupabase(userId: string): Promise<void>;
16
+ /**
17
+ * Ensure CLIENT_API_TOKEN exists.
18
+ *
19
+ * If missing from env, generates a random 48-char hex token (192 bits),
20
+ * writes it to ~/.costar/.env, and sets it in process.env for this run.
21
+ * Also updates user_sandboxes metadata in Supabase so Flutter client can read it.
22
+ *
23
+ * Follows OpenClaw's ensureGatewayStartupAuth pattern.
24
+ */
25
+ export declare function ensureClientApiToken(userId: string): Promise<string>;
26
+ /**
27
+ * Run all startup migrations.
28
+ * Called once during server initialization, after Supabase is ready.
29
+ * All migrations are idempotent and non-fatal.
30
+ */
31
+ export declare function runStartupMigrations(userId: string): Promise<void>;
32
+ //# sourceMappingURL=migrate.d.ts.map