@hachej/boring-agent 0.1.89 → 0.1.90

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 (28) hide show
  1. package/dist/{chunk-GOM3VJOJ.js → chunk-4PKGVPJA.js} +8 -0
  2. package/dist/{chunk-I7UEASPG.js → chunk-5CYVBVP3.js} +4315 -9647
  3. package/dist/{chunk-M32FXCIN.js → chunk-BEFJNMKQ.js} +1 -1
  4. package/dist/{chunk-XPQEF32D.js → chunk-CFQQXJKK.js} +1 -1
  5. package/dist/{chunk-WZCTVT57.js → chunk-F7ZS27HE.js} +2 -94
  6. package/dist/{chunk-BDYXKHWY.js → chunk-JEDRQAR5.js} +1 -1
  7. package/dist/core/index.d.ts +5 -5
  8. package/dist/core/index.js +2 -2
  9. package/dist/{createHarness-CCQLHKUF.js → createHarness-UCCGMVQJ.js} +2 -2
  10. package/dist/front/index.d.ts +12 -3
  11. package/dist/front/index.js +62 -4
  12. package/dist/{harness-VvP0l5Mj.d.ts → harness-Rbkdpvse.d.ts} +2 -2
  13. package/dist/{piChatEvent-nmOBSNU9.d.ts → piChatEvent-CHgln6yx.d.ts} +13 -13
  14. package/dist/{piChatSessionService-DPjJ0g71.d.ts → piChatSessionService-DDKPOj4x.d.ts} +1 -1
  15. package/dist/{protocol-B_OQKfbI.d.ts → protocol-CDA4bcP9.d.ts} +2 -18
  16. package/dist/{sandbox-DthfJaOB.d.ts → sandbox-OEG_l9GE.d.ts} +1 -1
  17. package/dist/server/index.d.ts +164 -288
  18. package/dist/server/index.js +20 -51
  19. package/dist/server/worker/index.d.ts +9 -7
  20. package/dist/server/worker/index.js +18 -27
  21. package/dist/shared/index.d.ts +51 -27
  22. package/dist/shared/index.js +3 -3
  23. package/dist/{workspaceAgentDispatcher-CKEeNPjW.d.ts → workspaceAgentDispatcher-50Uzuxhs.d.ts} +4 -18
  24. package/docs/ERROR_CODES.md +8 -0
  25. package/docs/RISKS-MULTI-TAB.md +1 -1
  26. package/docs/runtime-provisioning.md +1 -1
  27. package/docs/runtime.md +9 -6
  28. package/package.json +5 -5
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AgentDirectoryCompilerError,
3
- FileHandleStore,
3
+ AuthoredAgentMaterializationError,
4
4
  MANAGED_AGENT_MCP_DELIVERY_RULE,
5
5
  MANAGED_AGENT_MCP_ORIGIN_SURFACE,
6
6
  ManagedAgentMcpDelegateController,
@@ -10,73 +10,58 @@ import {
10
10
  RemoteWorkerClient,
11
11
  RemoteWorkerClientError,
12
12
  UV_SETUP_COMMANDS,
13
- VERCEL_PROVISIONING_CACHE_ROOT,
14
- VERCEL_SANDBOX_WORKSPACE_ROOT,
15
13
  WORKER_INTERNAL_TOKEN_HEADER,
16
14
  WORKER_REQUEST_ID_HEADER,
17
15
  WORKER_WORKSPACE_ID_HEADER,
18
16
  applyCspHeaders,
19
- assertRealPathWithinWorkspace,
20
17
  autoDetectMode,
21
- bakeSnapshotIfNeeded,
22
18
  buildDeploymentSnapshotRecipe,
23
- buildPackageHash,
24
- buildSnapshotRecipeHash,
25
19
  compileAgentDirectory,
26
20
  constantTimeTokenEqual,
27
21
  createAgent,
28
22
  createAgentApp,
29
- createBwrapSandbox,
30
- createDirectSandbox,
23
+ createDirectModeAdapter,
24
+ createLocalModeAdapter,
31
25
  createManagedAgentMcpDelegateController,
32
26
  createManagedAgentMcpHttpHandler,
33
27
  createManagedAgentMcpServer,
34
- createNodeWorkspace,
28
+ createProviderRuntimeModeAdapter,
35
29
  createRemoteWorkerModeAdapter,
36
30
  createRemoteWorkerSandbox,
37
31
  createRemoteWorkerWorkspace,
38
32
  createResolvedAgentDigest,
39
- createVercelDeploymentSnapshotProvider,
40
- createVercelProvisioningAdapter,
41
- createVercelSandboxWorkspace,
33
+ createVercelSandboxModeAdapter,
42
34
  decodeBytesFromWorker,
43
35
  encodeBytesForWorker,
44
- fileRoutes,
45
- getBoringAgentPathEntries,
46
- getBoringAgentRuntimeEnv,
47
- getBoringAgentRuntimePaths,
48
36
  hasBwrap,
37
+ materializeAgentDirectory,
49
38
  normalizeMeteringUsage,
50
39
  prepareDeploymentSnapshot,
51
- prepareVercelDeploymentSnapshot,
52
40
  provisionRuntimeWorkspace,
53
41
  provisionWorkspaceRuntime,
54
42
  registerAgentRoutes,
55
43
  registerShareEntryResources,
56
44
  resolveAgentDeployment,
57
45
  resolveMode,
58
- resolveSandboxHandle,
59
46
  resolveWorkspaceRoot,
60
- shareResourceUri,
61
- validatePath
62
- } from "../chunk-I7UEASPG.js";
63
- import "../chunk-XPQEF32D.js";
64
- import "../chunk-M32FXCIN.js";
47
+ shareResourceUri
48
+ } from "../chunk-5CYVBVP3.js";
49
+ import "../chunk-CFQQXJKK.js";
50
+ import "../chunk-BEFJNMKQ.js";
65
51
  import "../chunk-WSQ5QNIY.js";
66
- import "../chunk-BDYXKHWY.js";
52
+ import "../chunk-JEDRQAR5.js";
67
53
  import {
68
54
  PI_PACKAGE_RESOURCE_FILTERS,
69
55
  compactPiPackages,
70
- createLogger,
71
56
  createResourceSettingsManager,
72
57
  mergePiPackageSources,
73
58
  piPackageSourceKey
74
- } from "../chunk-WZCTVT57.js";
59
+ } from "../chunk-F7ZS27HE.js";
75
60
  import "../chunk-AQBXNPMD.js";
76
- import "../chunk-GOM3VJOJ.js";
61
+ import "../chunk-4PKGVPJA.js";
77
62
  export {
78
63
  AgentDirectoryCompilerError,
79
- FileHandleStore,
64
+ AuthoredAgentMaterializationError,
80
65
  MANAGED_AGENT_MCP_DELIVERY_RULE,
81
66
  MANAGED_AGENT_MCP_ORIGIN_SURFACE,
82
67
  ManagedAgentMcpDelegateController,
@@ -87,59 +72,43 @@ export {
87
72
  RemoteWorkerClient,
88
73
  RemoteWorkerClientError,
89
74
  UV_SETUP_COMMANDS,
90
- VERCEL_PROVISIONING_CACHE_ROOT,
91
- VERCEL_SANDBOX_WORKSPACE_ROOT,
92
- UV_SETUP_COMMANDS as VERCEL_UV_SETUP_COMMANDS,
93
75
  WORKER_INTERNAL_TOKEN_HEADER,
94
76
  WORKER_REQUEST_ID_HEADER,
95
77
  WORKER_WORKSPACE_ID_HEADER,
96
78
  applyCspHeaders,
97
- assertRealPathWithinWorkspace,
98
79
  autoDetectMode,
99
- bakeSnapshotIfNeeded,
100
80
  buildDeploymentSnapshotRecipe,
101
- buildPackageHash,
102
- buildSnapshotRecipeHash,
103
81
  compactPiPackages,
104
82
  compileAgentDirectory,
105
83
  constantTimeTokenEqual,
106
84
  createAgent,
107
85
  createAgentApp,
108
- createBwrapSandbox,
109
- createDirectSandbox,
110
- createLogger,
86
+ createDirectModeAdapter,
87
+ createLocalModeAdapter,
111
88
  createManagedAgentMcpDelegateController,
112
89
  createManagedAgentMcpHttpHandler,
113
90
  createManagedAgentMcpServer,
114
- createNodeWorkspace,
91
+ createProviderRuntimeModeAdapter,
115
92
  createRemoteWorkerModeAdapter,
116
93
  createRemoteWorkerSandbox,
117
94
  createRemoteWorkerWorkspace,
118
95
  createResolvedAgentDigest,
119
96
  createResourceSettingsManager,
120
- createVercelDeploymentSnapshotProvider,
121
- createVercelProvisioningAdapter,
122
- createVercelSandboxWorkspace,
97
+ createVercelSandboxModeAdapter,
123
98
  decodeBytesFromWorker,
124
99
  encodeBytesForWorker,
125
- fileRoutes,
126
- getBoringAgentPathEntries,
127
- getBoringAgentRuntimeEnv,
128
- getBoringAgentRuntimePaths,
129
100
  hasBwrap,
101
+ materializeAgentDirectory,
130
102
  mergePiPackageSources,
131
103
  normalizeMeteringUsage,
132
104
  piPackageSourceKey,
133
105
  prepareDeploymentSnapshot,
134
- prepareVercelDeploymentSnapshot,
135
106
  provisionRuntimeWorkspace,
136
107
  provisionWorkspaceRuntime,
137
108
  registerAgentRoutes,
138
109
  registerShareEntryResources,
139
110
  resolveAgentDeployment,
140
111
  resolveMode,
141
- resolveSandboxHandle,
142
112
  resolveWorkspaceRoot,
143
- shareResourceUri,
144
- validatePath
113
+ shareResourceUri
145
114
  };
@@ -1,6 +1,8 @@
1
1
  import { FastifyInstance, FastifyRequest, FastifyReply, FastifyServerOptions } from 'fastify';
2
- import { B as BwrapResourceLimits, R as RemoteWorkerWorkspaceOp, a as RemoteWorkerWorkspaceResult } from '../../protocol-B_OQKfbI.js';
3
- import { a as Workspace, S as Sandbox } from '../../sandbox-DthfJaOB.js';
2
+ import { BwrapResourceLimits } from '@hachej/boring-sandbox/providers/bwrap';
3
+ import { SandboxProviderV1 } from '@hachej/boring-sandbox/shared';
4
+ import { W as Workspace, S as Sandbox } from '../../sandbox-OEG_l9GE.js';
5
+ import { R as RemoteWorkerWorkspaceOp, a as RemoteWorkerWorkspaceResult } from '../../protocol-CDA4bcP9.js';
4
6
 
5
7
  interface WorkerConfig {
6
8
  workspaceRoot: string;
@@ -13,7 +15,7 @@ interface WorkerConfig {
13
15
  }
14
16
  declare function loadWorkerConfig(): WorkerConfig;
15
17
 
16
- declare function registerWorkerRoutes(app: FastifyInstance, config: WorkerConfig): Promise<void>;
18
+ declare function registerWorkerRoutes(app: FastifyInstance, config: WorkerConfig, runtimeProvider?: SandboxProviderV1): Promise<void>;
17
19
 
18
20
  declare const WORKER_ERROR_CODES: {
19
21
  readonly AUTH_INVALID: "auth_invalid";
@@ -28,12 +30,10 @@ type WorkerErrorCode = (typeof WORKER_ERROR_CODES)[keyof typeof WORKER_ERROR_COD
28
30
  interface WorkerRuntime {
29
31
  workspace: Workspace;
30
32
  sandbox: Sandbox;
33
+ dispose(): Promise<void>;
31
34
  }
32
35
  declare function assertSafeWorkspaceId(workspaceId: string): string;
33
- declare function createWorkerRuntime(root: string, workspaceId: string, options: {
34
- bwrapNetwork: 'isolated' | 'shared';
35
- resourceLimits?: BwrapResourceLimits;
36
- }): Promise<WorkerRuntime>;
36
+ declare function createWorkerRuntime(root: string, workspaceId: string, provider: SandboxProviderV1): Promise<WorkerRuntime>;
37
37
  declare function runWorkspaceOp(workspace: Workspace, op: RemoteWorkerWorkspaceOp): Promise<RemoteWorkerWorkspaceResult>;
38
38
 
39
39
  declare class ExecSemaphore {
@@ -51,6 +51,8 @@ interface CreateWorkerServerOptions {
51
51
  config?: WorkerConfig;
52
52
  /** Extra Fastify server options merged over the worker defaults. */
53
53
  fastify?: FastifyServerOptions;
54
+ /** Host-owned worker provider (normally bwrap). */
55
+ runtimeProvider?: SandboxProviderV1;
54
56
  }
55
57
  interface WorkerServer {
56
58
  app: FastifyInstance;
@@ -1,17 +1,14 @@
1
1
  import {
2
- REMOTE_WORKER_RUNTIME_CWD,
3
2
  WORKER_INTERNAL_TOKEN_HEADER,
4
- constantTimeTokenEqual,
5
- createBwrapSandbox,
6
- createNodeWorkspace
7
- } from "../../chunk-I7UEASPG.js";
8
- import "../../chunk-XPQEF32D.js";
9
- import "../../chunk-M32FXCIN.js";
3
+ constantTimeTokenEqual
4
+ } from "../../chunk-5CYVBVP3.js";
5
+ import "../../chunk-CFQQXJKK.js";
6
+ import "../../chunk-BEFJNMKQ.js";
10
7
  import "../../chunk-WSQ5QNIY.js";
11
- import "../../chunk-BDYXKHWY.js";
12
- import "../../chunk-WZCTVT57.js";
8
+ import "../../chunk-JEDRQAR5.js";
9
+ import "../../chunk-F7ZS27HE.js";
13
10
  import "../../chunk-AQBXNPMD.js";
14
- import "../../chunk-GOM3VJOJ.js";
11
+ import "../../chunk-4PKGVPJA.js";
15
12
 
16
13
  // src/server/worker/index.ts
17
14
  import Fastify from "fastify";
@@ -132,20 +129,16 @@ function assertSafeWorkspaceId(workspaceId) {
132
129
  }
133
130
  return normalized;
134
131
  }
135
- async function createWorkerRuntime(root, workspaceId, options) {
132
+ async function createWorkerRuntime(root, workspaceId, provider) {
136
133
  const safeId = assertSafeWorkspaceId(workspaceId);
137
134
  const hostRoot = join(root, safeId);
138
135
  await mkdir(hostRoot, { recursive: true });
139
- const workspace = createNodeWorkspace(hostRoot, { runtimeContext: { runtimeCwd: REMOTE_WORKER_RUNTIME_CWD } });
140
- const sandbox = createBwrapSandbox({
141
- hostWorkspaceRoot: hostRoot,
142
- runtimeContext: { runtimeCwd: REMOTE_WORKER_RUNTIME_CWD },
143
- network: options.bwrapNetwork,
144
- dropAllCapabilities: true,
145
- resourceLimits: options.resourceLimits
136
+ const pair = await provider.create({
137
+ workspaceRoot: hostRoot,
138
+ workspaceId: safeId,
139
+ sessionId: safeId
146
140
  });
147
- await sandbox.init?.({ workspace, sessionId: safeId });
148
- return { workspace, sandbox };
141
+ return { workspace: pair.workspace, sandbox: pair.sandbox, dispose: () => pair.dispose() };
149
142
  }
150
143
  async function runWorkspaceOp(workspace, op) {
151
144
  switch (op.op) {
@@ -231,17 +224,15 @@ function resultToResponse(result) {
231
224
  stderrEncoding: result.stderrEncoding
232
225
  };
233
226
  }
234
- async function registerWorkerRoutes(app, config) {
227
+ async function registerWorkerRoutes(app, config, runtimeProvider) {
235
228
  const semaphore = new ExecSemaphore(config.execConcurrency);
236
229
  const runtimes = /* @__PURE__ */ new Map();
237
230
  const getRuntime = (workspaceId) => {
238
231
  const safeId = assertSafeWorkspaceId(workspaceId);
239
232
  let runtime = runtimes.get(safeId);
240
233
  if (!runtime) {
241
- runtime = createWorkerRuntime(config.workspaceRoot, safeId, {
242
- bwrapNetwork: config.bwrapNetwork,
243
- resourceLimits: config.resourceLimits
244
- });
234
+ if (!runtimeProvider) throw new Error("worker runtime provider must be injected by the host");
235
+ runtime = createWorkerRuntime(config.workspaceRoot, safeId, runtimeProvider);
245
236
  runtimes.set(safeId, runtime);
246
237
  }
247
238
  return runtime;
@@ -250,7 +241,7 @@ async function registerWorkerRoutes(app, config) {
250
241
  for (const runtimePromise of runtimes.values()) {
251
242
  try {
252
243
  const runtime = await runtimePromise;
253
- runtime.workspace.watch?.().close();
244
+ await runtime.dispose();
254
245
  } catch {
255
246
  }
256
247
  }
@@ -350,7 +341,7 @@ var DEFAULT_BODY_LIMIT = 20 * 1024 * 1024;
350
341
  async function createWorkerServer(options = {}) {
351
342
  const config = options.config ?? loadWorkerConfig();
352
343
  const app = Fastify({ logger: true, bodyLimit: DEFAULT_BODY_LIMIT, ...options.fastify });
353
- await registerWorkerRoutes(app, config);
344
+ await registerWorkerRoutes(app, config, options.runtimeProvider);
354
345
  return { app, config };
355
346
  }
356
347
  export {