{"version":3,"file":"harness.mjs","names":[],"sources":["../../src/ai/harness.ts"],"sourcesContent":["import type {\n  HarnessV1NetworkPolicy,\n  HarnessV1NetworkSandboxSession,\n  HarnessV1SandboxProvider,\n} from \"@ai-sdk/harness\";\nimport type { Experimental_SandboxSession } from \"ai\";\nimport { SandboxError } from \"../core/errors\";\nimport type {\n  ManagedSandboxSession,\n  SandboxNetworkPolicy,\n  SandboxProvider,\n} from \"../core/provider\";\nimport { toAISandboxSession } from \"./index\";\n\nexport interface CreateSandboxHarnessProviderOptions {\n  provider: SandboxProvider<unknown>;\n  ports?: ReadonlyArray<number>;\n  cwd?: string;\n  env?: Readonly<Record<string, string>>;\n}\n\n/** Create an AI SDK Harness sandbox provider backed by any managed sandbox-sdk provider. */\nexport function createSandboxHarnessProvider(\n  options: CreateSandboxHarnessProviderOptions,\n): HarnessV1SandboxProvider {\n  const managed = requireManaged(options.provider);\n  return {\n    specificationVersion: \"harness-sandbox-v1\",\n    providerId: `sandbox-sdk:${options.provider.id}`,\n    async createSession(createOptions = {}) {\n      const sessionId = createOptions.sessionId ?? crypto.randomUUID();\n      const session = await managed.create({\n        sessionId,\n        identity: createOptions.identity,\n        cwd: options.cwd,\n        env: options.env,\n        ports: options.ports,\n        signal: createOptions.abortSignal,\n        onFirstCreate: createOptions.onFirstCreate\n          ? (sandbox) =>\n              createOptions.onFirstCreate!(toAISandboxSession(sandbox), {\n                abortSignal: createOptions.abortSignal,\n              })\n          : undefined,\n      });\n      return toHarnessSession(session);\n    },\n    async resumeSession(resumeOptions) {\n      return toHarnessSession(\n        await managed.resume({\n          sessionId: resumeOptions.sessionId,\n          signal: resumeOptions.abortSignal,\n        }),\n      );\n    },\n  };\n}\n\nfunction toHarnessSession(session: ManagedSandboxSession): HarnessV1NetworkSandboxSession {\n  const restricted = toAISandboxSession(session.sandbox);\n  return {\n    ...restricted,\n    id: session.id,\n    defaultWorkingDirectory: session.defaultWorkingDirectory,\n    get ports() {\n      return session.ports;\n    },\n    getPortUrl: (options) => session.getPortUrl(options),\n    stop: () => session.stop(),\n    destroy: () => session.destroy(),\n    ...(session.setPorts\n      ? {\n          setPorts: (ports: ReadonlyArray<number>, options?: { abortSignal?: AbortSignal }) =>\n            session.setPorts!(ports, { signal: options?.abortSignal }),\n        }\n      : {}),\n    ...(session.setNetworkPolicy\n      ? {\n          setNetworkPolicy: (policy: HarnessV1NetworkPolicy) =>\n            session.setNetworkPolicy!(toCoreNetworkPolicy(policy)),\n        }\n      : {}),\n    restricted: (): Experimental_SandboxSession => restricted,\n  };\n}\n\nfunction toCoreNetworkPolicy(policy: HarnessV1NetworkPolicy): SandboxNetworkPolicy {\n  if (policy.mode !== \"custom\") return policy;\n  return {\n    mode: \"custom\",\n    allowedHosts: policy.allowedHosts,\n    allowedCIDRs: policy.allowedCIDRs,\n    deniedCIDRs: policy.deniedCIDRs,\n  };\n}\n\nfunction requireManaged(provider: SandboxProvider<unknown>) {\n  if (!provider.managed) {\n    throw new SandboxError({\n      code: \"unsupported\",\n      provider: provider.id,\n      operation: \"harness.createProvider\",\n      message: `Provider ${provider.id} does not implement managed sandbox sessions`,\n    });\n  }\n  return provider.managed;\n}\n\nexport type {\n  HarnessV1NetworkPolicy,\n  HarnessV1NetworkSandboxSession,\n  HarnessV1SandboxProvider,\n} from \"@ai-sdk/harness\";\n"],"mappings":";;;;;AAsBA,SAAgB,6BACd,SAC0B;CAC1B,MAAM,UAAU,eAAe,QAAQ,SAAS;AAChD,QAAO;EACL,sBAAsB;EACtB,YAAY,eAAe,QAAQ,SAAS;EAC5C,MAAM,cAAc,gBAAgB,EAAE,EAAE;GACtC,MAAM,YAAY,cAAc,aAAa,OAAO,YAAY;AAehE,UAAO,iBAdS,MAAM,QAAQ,OAAO;IACnC;IACA,UAAU,cAAc;IACxB,KAAK,QAAQ;IACb,KAAK,QAAQ;IACb,OAAO,QAAQ;IACf,QAAQ,cAAc;IACtB,eAAe,cAAc,iBACxB,YACC,cAAc,cAAe,mBAAmB,QAAQ,EAAE,EACxD,aAAa,cAAc,aAC5B,CAAC,GACJ;IACL,CAAC,CAC8B;;EAElC,MAAM,cAAc,eAAe;AACjC,UAAO,iBACL,MAAM,QAAQ,OAAO;IACnB,WAAW,cAAc;IACzB,QAAQ,cAAc;IACvB,CAAC,CACH;;EAEJ;;AAGH,SAAS,iBAAiB,SAAgE;CACxF,MAAM,aAAa,mBAAmB,QAAQ,QAAQ;AACtD,QAAO;EACL,GAAG;EACH,IAAI,QAAQ;EACZ,yBAAyB,QAAQ;EACjC,IAAI,QAAQ;AACV,UAAO,QAAQ;;EAEjB,aAAa,YAAY,QAAQ,WAAW,QAAQ;EACpD,YAAY,QAAQ,MAAM;EAC1B,eAAe,QAAQ,SAAS;EAChC,GAAI,QAAQ,WACR,EACE,WAAW,OAA8B,YACvC,QAAQ,SAAU,OAAO,EAAE,QAAQ,SAAS,aAAa,CAAC,EAC7D,GACD,EAAE;EACN,GAAI,QAAQ,mBACR,EACE,mBAAmB,WACjB,QAAQ,iBAAkB,oBAAoB,OAAO,CAAC,EACzD,GACD,EAAE;EACN,kBAA+C;EAChD;;AAGH,SAAS,oBAAoB,QAAsD;AACjF,KAAI,OAAO,SAAS,SAAU,QAAO;AACrC,QAAO;EACL,MAAM;EACN,cAAc,OAAO;EACrB,cAAc,OAAO;EACrB,aAAa,OAAO;EACrB;;AAGH,SAAS,eAAe,UAAoC;AAC1D,KAAI,CAAC,SAAS,QACZ,OAAM,IAAI,aAAa;EACrB,MAAM;EACN,UAAU,SAAS;EACnB,WAAW;EACX,SAAS,YAAY,SAAS,GAAG;EAClC,CAAC;AAEJ,QAAO,SAAS"}