@roj-ai/sandbox-runtime 0.1.36 → 0.2.1

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/main.js CHANGED
@@ -57,7 +57,7 @@ async function main() {
57
57
  console.error(error instanceof Error ? error.message : String(error));
58
58
  process.exit(1);
59
59
  }
60
- await startServer({ presets: userConfig.presets });
60
+ await startServer(userConfig);
61
61
  }
62
62
  main().catch((error) => {
63
63
  console.error('Fatal error:', error);
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -4,9 +4,8 @@
4
4
  * Handles: config loading, bootstrap, transport, session manager,
5
5
  * HTTP app, Bun.serve, session loading, and shutdown.
6
6
  */
7
- import type { Config, LLMMiddleware, Logger, Preset } from '@roj-ai/sdk';
8
- export interface StartServerOptions {
9
- presets: Preset[];
7
+ import type { Config, LLMMiddleware, Logger, SessionDefaults } from '@roj-ai/sdk';
8
+ export interface StartServerOptions extends SessionDefaults {
10
9
  config?: Partial<Config>;
11
10
  /** Global LLM middleware applied to all presets (prepended before preset-level middleware) */
12
11
  llmMiddleware?: LLMMiddleware[];
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAa,MAAM,aAAa,CAAA;AAanF,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IACxB,8FAA8F;IAC9F,aAAa,CAAC,EAAE,aAAa,EAAE,CAAA;IAC/B,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACvC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACjF;AAED,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAMD,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAqFpF"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,EAAa,MAAM,aAAa,CAAA;AAa5F,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IACxB,8FAA8F;IAC9F,aAAa,CAAC,EAAE,aAAa,EAAE,CAAA;IAC/B,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACvC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACjF;AAED,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAMD,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAuFpF"}
package/dist/server.js CHANGED
@@ -8,7 +8,7 @@ import { bootstrap, createSystemFromServices, loadConfig, validateConfig } from
8
8
  import { createApp } from '@roj-ai/sdk/transport/http/app';
9
9
  import { createAgentTransport, ServerAdapter } from '@roj-ai/sdk/transport/adapter';
10
10
  import { bunWebSocketFactory, createBunWebSocketHandlers } from '@roj-ai/transport/bun';
11
- import { createBunPlatform } from '@roj-ai/sdk/bun-platform';
11
+ import { createBunPlatform, createServerLifecycle, runServerStartup, shutdownFromSignal } from '@roj-ai/sdk/bun-platform';
12
12
  import { SANDBOX_RUNTIME_NAME, SANDBOX_RUNTIME_VERSION } from './info.js';
13
13
  // ============================================================================
14
14
  // startServer
@@ -29,7 +29,8 @@ export async function startServer(options) {
29
29
  llmMiddleware: [...options.llmMiddleware, ...(p.llmMiddleware ?? [])],
30
30
  }))
31
31
  : options.presets;
32
- const services = bootstrap(config, { presets }, createBunPlatform());
32
+ // Forwarded whole: bootstrap folds the SessionDefaults, so nothing is dropped here.
33
+ const services = bootstrap(config, { ...options, presets }, createBunPlatform());
33
34
  const { logger } = services;
34
35
  // Reap service processes left behind by a previous agent, before any session can load
35
36
  // and start its own. At boot this agent owns nothing, so every survivor is an orphan.
@@ -50,41 +51,44 @@ export async function startServer(options) {
50
51
  agentToken: config.agentToken,
51
52
  });
52
53
  const server = startBunServer(config, app, transport);
53
- // Load persisted sessions after HTTP server is up (health checks pass during loading)
54
- try {
55
- await sessionManager.loadAllSessions();
56
- }
57
- catch (error) {
58
- logger.error('Failed to load persisted sessions', error instanceof Error ? error : new Error(String(error)));
59
- }
60
- try {
61
- await transport.start();
62
- }
63
- catch (error) {
64
- logger.error('Transport connection failed (will retry via reconnect)', error instanceof Error ? error : new Error(String(error)));
65
- }
54
+ let transportStopPromise;
55
+ let transportStopErrorReported = false;
56
+ const stopTransportOnce = async () => {
57
+ transportStopPromise ??= Promise.resolve().then(() => transport.stop());
58
+ try {
59
+ await transportStopPromise;
60
+ }
61
+ catch (error) {
62
+ if (transportStopErrorReported)
63
+ return;
64
+ transportStopErrorReported = true;
65
+ throw error;
66
+ }
67
+ };
68
+ const lifecycle = createServerLifecycle({
69
+ stopIngress: () => server.stop(true),
70
+ cleanupSteps: [
71
+ ...options.onShutdown ? [options.onShutdown] : [],
72
+ () => sessionManager.shutdown(),
73
+ stopTransportOnce,
74
+ ],
75
+ runSignalShutdown: shutdown => {
76
+ void shutdownFromSignal(shutdown);
77
+ },
78
+ });
79
+ // Load persisted sessions after HTTP server is up (health checks pass during loading).
80
+ await runServerStartup(lifecycle, [
81
+ { run: () => sessionManager.loadAllSessions() },
82
+ // A pending connection is canceled before the remaining ordered cleanup.
83
+ { run: () => transport.start(), cancel: stopTransportOnce },
84
+ ]);
66
85
  logger.info('Agent server started', {
67
86
  host: config.host,
68
87
  port: config.port,
69
88
  persistence: config.persistence,
70
89
  mode: isWorkerMode ? 'worker' : 'standalone',
71
90
  });
72
- const shutdown = async () => {
73
- logger.info('Shutting down...');
74
- if (options.onShutdown) {
75
- await options.onShutdown();
76
- }
77
- await sessionManager.shutdown();
78
- await transport.stop();
79
- server.stop();
80
- };
81
- process.on('SIGINT', () => {
82
- void shutdown().then(() => process.exit(0));
83
- });
84
- process.on('SIGTERM', () => {
85
- void shutdown().then(() => process.exit(0));
86
- });
87
- return { config, logger, shutdown };
91
+ return { config, logger, shutdown: lifecycle.shutdown };
88
92
  }
89
93
  // ============================================================================
90
94
  // Internal helpers
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC7F,OAAO,EAAe,SAAS,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EAAE,oBAAoB,EAAwB,aAAa,EAAE,MAAM,+BAA+B,CAAA;AACzG,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAA;AAEvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AAqBzE,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC5D,2CAA2C;IAC3C,MAAM,SAAS,GAAG,UAAU,EAAE,CAAA;IAC9B,MAAM,MAAM,GAAW,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACvF,MAAM,CAAC,YAAY,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAA;IAExF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IACrC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,wFAAwF;IACxF,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM;QAC5C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3B,GAAG,CAAC;YACJ,aAAa,EAAE,CAAC,GAAG,OAAO,CAAC,aAAc,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;SACtE,CAAC,CAAC;QACH,CAAC,CAAC,OAAO,CAAC,OAAO,CAAA;IAElB,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAA;IACpE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAA;IAE3B,sFAAsF;IACtF,sFAAsF;IACtF,MAAM,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,CAAA;IAEzC,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3B,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,+BAA+B;IAC/B,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,CAAA;IAC9D,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAA;IAE/D,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE;QACjD,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;KACvD,CAAC,CAAA;IACF,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAA;IAE5C,MAAM,GAAG,GAAG,SAAS,CAAC;QACrB,GAAG,QAAQ;QACX,cAAc,EAAE,cAAc;QAC9B,UAAU,EAAE,MAAM,CAAC,UAAU;KAC7B,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAA;IAErD,sFAAsF;IACtF,IAAI,CAAC;QACJ,MAAM,cAAc,CAAC,eAAe,EAAE,CAAA;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC7G,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,wDAAwD,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAClI,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;QACnC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY;KAC5C,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC3B,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC/B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,UAAU,EAAE,CAAA;QAC3B,CAAC;QACD,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAA;QAC/B,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;QACtB,MAAM,CAAC,IAAI,EAAE,CAAA;IACd,CAAC,CAAA;IAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACzB,KAAK,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IACF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QAC1B,KAAK,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AACpC,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,SAAS,eAAe,CAAC,MAAc,EAAE,MAAc,EAAE,YAAqB;IAC7E,IAAI,YAAY,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAA;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QACzD,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,SAAU,CAAC,CAAA;QACnD,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;QACzD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;QAC5C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,UAAW,CAAC,CAAA;QAEjD,OAAO,oBAAoB,CAAC;YAC3B,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;YACnB,SAAS,EAAE,mBAAmB;YAC9B,SAAS,EAAE;gBACV,WAAW,EAAE,MAAM,CAAC,sBAAsB,IAAI,IAAI;gBAClD,UAAU,EAAE,MAAM,CAAC,qBAAqB,IAAI,KAAK;gBACjD,WAAW,EAAE,QAAQ;gBACrB,YAAY,EAAE,GAAG;aACjB;YACD,MAAM;SACN,CAAC,CAAA;IACH,CAAC;IAED,OAAO,oBAAoB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAA;AAC5D,CAAC;AASD,SAAS,YAAY,CAAC,YAA2B,IAAI;IACpD,OAAO;QACN,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE;QAC7B,UAAU,EAAE,KAAK;QACjB,SAAS;QACT,kBAAkB,EAAE,IAAI,GAAG,EAAa;KACxC,CAAA;AACF,CAAC;AAED,SAAS,cAAc,CAAC,MAAc,EAAE,GAAiB,EAAE,SAA0B;IACpF,MAAM,aAAa,GAAG,SAAS,YAAY,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;IAE3E,MAAM,UAAU,GAAG,aAAa;QAC/B,CAAC,CAAC,0BAA0B,CAAS;YACpC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;YAC5E,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC;YAC1E,SAAS,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC;YACpE,OAAO,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC;YAC5D,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI;SACxB,CAAC;QACF,CAAC,CAAC,IAAI,CAAA;IAEP,OAAO,GAAG,CAAC,KAAK,CAAS;QACxB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,IAAI;QACrB,KAAK,CAAC,GAAG,EAAE,MAAM;YAChB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,aAAa,EAAE,CAAC;gBACjD,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;gBACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;gBACvE,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;YACxF,CAAC;YACD,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;QACD,SAAS,EAAE,UAAU,IAAI,EAAE,IAAI,KAAI,CAAC,EAAE,KAAK,KAAI,CAAC,EAAE,OAAO,KAAI,CAAC,EAAE;KAChE,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"user-config-loader.d.ts","sourceRoot":"","sources":["../src/user-config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAU,SAAS,EAAE,MAAM,aAAa,CAAA;AAKpD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CA8D3E"}
1
+ {"version":3,"file":"user-config-loader.d.ts","sourceRoot":"","sources":["../src/user-config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAU,SAAS,EAAE,MAAM,aAAa,CAAA;AAKpD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CA+D3E"}
@@ -4,9 +4,9 @@
4
4
  * Uses dynamic `import()` — this is why it lives in the runtime package
5
5
  * rather than in `@roj-ai/sdk` (which stays pure and platform-agnostic).
6
6
  */
7
- import { validatePreset } from '@roj-ai/sdk';
7
+ import { parseExtraBinds, validatePreset } from '@roj-ai/sdk';
8
8
  import { existsSync } from 'node:fs';
9
- import { resolve } from 'node:path';
9
+ import { dirname, resolve } from 'node:path';
10
10
  /**
11
11
  * Load user configuration from a TypeScript file.
12
12
  *
@@ -61,6 +61,7 @@ export async function loadUserConfig(configPath) {
61
61
  presets,
62
62
  sandboxed: typedConfig.sandboxed,
63
63
  snapshotter: typedConfig.snapshotter,
64
+ extraBinds: parseExtraBinds(typedConfig.extraBinds, dirname(absolutePath), absolutePath),
64
65
  };
65
66
  }
66
67
  //# sourceMappingURL=user-config-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-config-loader.js","sourceRoot":"","sources":["../src/user-config-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-config-loader.js","sourceRoot":"","sources":["../src/user-config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACtD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAA;IAEvD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,iCAAiC,YAAY,EAAE,CAAC,CAAA;IACjE,CAAC;IAED,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACJ,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACd,sCAAsC,YAAY,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/G,CAAA;IACF,CAAC;IAED,MAAM,MAAM,GAAI,MAAgC,CAAC,OAAO,CAAA;IAExD,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,kDAAkD,YAAY,EAAE,CAAC,CAAA;IAClF,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,oCAAoC,YAAY,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,MAAM,WAAW,GAAG,MAAiC,CAAA;IAErD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,8CAA8C,YAAY,EAAE,CAAC,CAAA;IAC9E,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,OAAmB,CAAA;IAC/C,MAAM,SAAS,GAAa,EAAE,CAAA;IAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACjD,SAAS,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;YACpD,SAAQ;QACT,CAAC;QAED,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;QACrC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,SAAS,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC9D,CAAC;IACF,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC7F,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACpC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAA;IACvE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChF,CAAC;IAED,OAAO;QACN,OAAO;QACP,SAAS,EAAE,WAAW,CAAC,SAAgC;QACvD,WAAW,EAAE,WAAW,CAAC,WAAuC;QAChE,UAAU,EAAE,eAAe,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;KACxF,CAAA;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roj-ai/sandbox-runtime",
3
- "version": "0.1.36",
3
+ "version": "0.2.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "exports": {
@@ -25,7 +25,9 @@
25
25
  },
26
26
  "files": [
27
27
  "src",
28
- "dist"
28
+ "dist",
29
+ "!src/**/*.test.ts",
30
+ "!src/__tests__"
29
31
  ],
30
32
  "publishConfig": {
31
33
  "access": "public"
@@ -46,8 +48,8 @@
46
48
  "type-check": "tsc --noEmit"
47
49
  },
48
50
  "dependencies": {
49
- "@roj-ai/sdk": "^0.1.36",
50
- "@roj-ai/transport": "^0.1.36",
51
+ "@roj-ai/sdk": "^0.2.1",
52
+ "@roj-ai/transport": "^0.2.1",
51
53
  "hono": "4.13.1"
52
54
  },
53
55
  "devDependencies": {
package/src/main.ts CHANGED
@@ -63,7 +63,7 @@ async function main() {
63
63
  process.exit(1)
64
64
  }
65
65
 
66
- await startServer({ presets: userConfig.presets })
66
+ await startServer(userConfig)
67
67
  }
68
68
 
69
69
  main().catch((error) => {
package/src/server.ts CHANGED
@@ -5,21 +5,20 @@
5
5
  * HTTP app, Bun.serve, session loading, and shutdown.
6
6
  */
7
7
 
8
- import type { Config, LLMMiddleware, Logger, Preset, SessionId } from '@roj-ai/sdk'
8
+ import type { Config, LLMMiddleware, Logger, SessionDefaults, SessionId } from '@roj-ai/sdk'
9
9
  import { bootstrap, createSystemFromServices, loadConfig, validateConfig } from '@roj-ai/sdk'
10
10
  import { type AppEnv, createApp } from '@roj-ai/sdk/transport/http/app'
11
11
  import { createAgentTransport, type IAgentTransport, ServerAdapter } from '@roj-ai/sdk/transport/adapter'
12
12
  import { bunWebSocketFactory, createBunWebSocketHandlers } from '@roj-ai/transport/bun'
13
13
  import type { Hono } from 'hono'
14
- import { createBunPlatform } from '@roj-ai/sdk/bun-platform'
14
+ import { createBunPlatform, createServerLifecycle, runServerStartup, shutdownFromSignal } from '@roj-ai/sdk/bun-platform'
15
15
  import { SANDBOX_RUNTIME_NAME, SANDBOX_RUNTIME_VERSION } from './info.js'
16
16
 
17
17
  // ============================================================================
18
18
  // Public types
19
19
  // ============================================================================
20
20
 
21
- export interface StartServerOptions {
22
- presets: Preset[]
21
+ export interface StartServerOptions extends SessionDefaults {
23
22
  config?: Partial<Config>
24
23
  /** Global LLM middleware applied to all presets (prepended before preset-level middleware) */
25
24
  llmMiddleware?: LLMMiddleware[]
@@ -56,7 +55,8 @@ export async function startServer(options: StartServerOptions): Promise<ServerHa
56
55
  }))
57
56
  : options.presets
58
57
 
59
- const services = bootstrap(config, { presets }, createBunPlatform())
58
+ // Forwarded whole: bootstrap folds the SessionDefaults, so nothing is dropped here.
59
+ const services = bootstrap(config, { ...options, presets }, createBunPlatform())
60
60
  const { logger } = services
61
61
 
62
62
  // Reap service processes left behind by a previous agent, before any session can load
@@ -83,19 +83,37 @@ export async function startServer(options: StartServerOptions): Promise<ServerHa
83
83
  })
84
84
 
85
85
  const server = startBunServer(config, app, transport)
86
-
87
- // Load persisted sessions after HTTP server is up (health checks pass during loading)
88
- try {
89
- await sessionManager.loadAllSessions()
90
- } catch (error) {
91
- logger.error('Failed to load persisted sessions', error instanceof Error ? error : new Error(String(error)))
86
+ let transportStopPromise: Promise<void> | undefined
87
+ let transportStopErrorReported = false
88
+ const stopTransportOnce = async () => {
89
+ transportStopPromise ??= Promise.resolve().then(() => transport.stop())
90
+ try {
91
+ await transportStopPromise
92
+ } catch (error) {
93
+ if (transportStopErrorReported) return
94
+ transportStopErrorReported = true
95
+ throw error
96
+ }
92
97
  }
93
98
 
94
- try {
95
- await transport.start()
96
- } catch (error) {
97
- logger.error('Transport connection failed (will retry via reconnect)', error instanceof Error ? error : new Error(String(error)))
98
- }
99
+ const lifecycle = createServerLifecycle({
100
+ stopIngress: () => server.stop(true),
101
+ cleanupSteps: [
102
+ ...options.onShutdown ? [options.onShutdown] : [],
103
+ () => sessionManager.shutdown(),
104
+ stopTransportOnce,
105
+ ],
106
+ runSignalShutdown: shutdown => {
107
+ void shutdownFromSignal(shutdown)
108
+ },
109
+ })
110
+
111
+ // Load persisted sessions after HTTP server is up (health checks pass during loading).
112
+ await runServerStartup(lifecycle, [
113
+ { run: () => sessionManager.loadAllSessions() },
114
+ // A pending connection is canceled before the remaining ordered cleanup.
115
+ { run: () => transport.start(), cancel: stopTransportOnce },
116
+ ])
99
117
 
100
118
  logger.info('Agent server started', {
101
119
  host: config.host,
@@ -104,24 +122,7 @@ export async function startServer(options: StartServerOptions): Promise<ServerHa
104
122
  mode: isWorkerMode ? 'worker' : 'standalone',
105
123
  })
106
124
 
107
- const shutdown = async () => {
108
- logger.info('Shutting down...')
109
- if (options.onShutdown) {
110
- await options.onShutdown()
111
- }
112
- await sessionManager.shutdown()
113
- await transport.stop()
114
- server.stop()
115
- }
116
-
117
- process.on('SIGINT', () => {
118
- void shutdown().then(() => process.exit(0))
119
- })
120
- process.on('SIGTERM', () => {
121
- void shutdown().then(() => process.exit(0))
122
- })
123
-
124
- return { config, logger, shutdown }
125
+ return { config, logger, shutdown: lifecycle.shutdown }
125
126
  }
126
127
 
127
128
  // ============================================================================
@@ -6,9 +6,9 @@
6
6
  */
7
7
 
8
8
  import type { Preset, RojConfig } from '@roj-ai/sdk'
9
- import { validatePreset } from '@roj-ai/sdk'
9
+ import { parseExtraBinds, validatePreset } from '@roj-ai/sdk'
10
10
  import { existsSync } from 'node:fs'
11
- import { resolve } from 'node:path'
11
+ import { dirname, resolve } from 'node:path'
12
12
 
13
13
  /**
14
14
  * Load user configuration from a TypeScript file.
@@ -78,5 +78,6 @@ export async function loadUserConfig(configPath: string): Promise<RojConfig> {
78
78
  presets,
79
79
  sandboxed: typedConfig.sandboxed as boolean | undefined,
80
80
  snapshotter: typedConfig.snapshotter as RojConfig['snapshotter'],
81
+ extraBinds: parseExtraBinds(typedConfig.extraBinds, dirname(absolutePath), absolutePath),
81
82
  }
82
83
  }