{"version":3,"file":"pi.cjs","names":["DefaultSandboxExtensionService","defineRoot","defineCliCommand","createSandboxCliCommand","BROKER_PROVIDERS_ENV","BROKER_CONTAINER_PORT","BROKER_ADDRESS_ENV","defineRoutedContribution","defineProvider","defineResource","createSandboxHelpResource","definePiExtension","rootSession","composeRootHooks","commandSandbox","providerBrokered","resourceDoompiUseSandbox"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/piRoot.ts","../../src/extensions/workspaces/sessions/(backend)/root.cli.ts","../../src/extensions/workspaces/sessions/(backend)/command/sandbox.cli.ts","../../src/services/brokerProviders/index.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/sandboxProviders.ts","../../src/extensions/workspaces/sessions/(backend)/provider/brokered.cli.ts","../../src/extensions/workspaces/sessions/(backend)/resource/doompiUseSandbox.cli.ts","../../generated/pi.ts"],"sourcesContent":["import type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport { DefaultSandboxExtensionService } from '../../../../../services/extensionService';\nimport type { SandboxExtensionDependencies } from '../../../../../types/extension';\nimport type { SandboxPiScope } from './sandboxScope';\n\nexport function createSandboxPiRoot(context: PiPluginContext<SandboxExtensionDependencies>) {\n  const value: SandboxPiScope = {\n    service: context.options?.service ?? new DefaultSandboxExtensionService(process.env),\n  };\n  return { value };\n}\n","import { defineRoot } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { createSandboxPiRoot } from './_lib/piRoot';\n\nexport default defineRoot(createSandboxPiRoot);\n","import { defineCliCommand, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport type { SandboxExtensionDependencies } from '../../../../../types/extension';\nimport { createSandboxCliCommand } from '../_lib/sandboxCommands';\nimport type { SandboxPiScope } from '../_lib/sandboxScope';\n\nexport default defineCliCommand((context: WithRoot<PiPluginContext<SandboxExtensionDependencies>, SandboxPiScope>) =>\n  createSandboxCliCommand(context.root.service),\n);\n","import { BROKER_ADDRESS_ENV, BROKER_CONTAINER_PORT, BROKER_PROVIDERS_ENV, BROKER_SOCKET_ENV } from '../sandboxBridge';\n\nexport interface BrokeredProviderOverride {\n  provider: string;\n  baseUrl: string;\n}\n\n/**\n * Points brokered providers at whichever route the launch granted.\n *\n * Pi reads base URLs from package-internal provider data, so redirecting a\n * session means overriding the provider rather than setting an environment\n * variable. The credential is left alone: the launch already replaced it with\n * the session token the broker expects.\n *\n * A broker on a host port is addressed directly. Only a mounted socket needs\n * the loopback bridge, because no SDK can dial a socket path.\n */\nexport function brokeredProviderOverrides(\n  environment: Readonly<Record<string, string | undefined>>,\n): BrokeredProviderOverride[] {\n  const configured = environment[BROKER_PROVIDERS_ENV]?.trim();\n  if (!configured) return [];\n  const authority = environment[BROKER_SOCKET_ENV]?.trim()\n    ? `127.0.0.1:${BROKER_CONTAINER_PORT}`\n    : environment[BROKER_ADDRESS_ENV]?.trim();\n  if (!authority) return [];\n  return configured\n    .split(',')\n    .map((provider) => provider.trim())\n    .filter((provider) => provider.length > 0)\n    .map((provider) => ({ provider, baseUrl: `http://${authority}/${provider}` }));\n}\n","import { brokeredProviderOverrides } from '../../../../../services/brokerProviders';\n\nexport function brokeredProviderDeclarations(environment: Readonly<Record<string, string | undefined>>) {\n  return brokeredProviderOverrides(environment).map(({ provider, baseUrl }) => [provider, { baseUrl }] as const);\n}\n","import { defineProvider, defineRoutedContribution } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport type { SandboxExtensionDependencies } from '../../../../../types/extension';\nimport { brokeredProviderDeclarations } from '../_lib/sandboxProviders';\n\nexport default defineRoutedContribution(\n  defineProvider((_context: PiPluginContext<SandboxExtensionDependencies>) =>\n    brokeredProviderDeclarations(process.env),\n  ),\n  { cardinality: 'many' },\n);\n","import { defineResource } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { createSandboxHelpResource } from '../_lib/sandboxResources';\n\nexport default defineResource(createSandboxHelpResource(import.meta.url));\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { definePiExtension, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/piExtension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport commandSandbox from '../src/extensions/workspaces/sessions/(backend)/command/sandbox.cli';\nimport providerBrokered from '../src/extensions/workspaces/sessions/(backend)/provider/brokered.cli';\nimport resourceDoompiUseSandbox from '../src/extensions/workspaces/sessions/(backend)/resource/doompiUseSandbox.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof commandSandbox> | OptionsOf<typeof providerBrokered> | OptionsOf<typeof resourceDoompiUseSandbox>, undefined>;\ntype Intersect<Union> =\n  (Union extends unknown ? (value: Union) => void : never) extends (value: infer Value) => void ? Value : never;\ntype ExtensionOptions = [InferredOptions] extends [never] ? undefined : Intersect<InferredOptions>;\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n  typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\ntype ManyFactory<T, C> = (context: C) => T | readonly T[];\nconst many = <T, C>(value: T | readonly T[] | ManyFactory<T, C>, context: C): readonly T[] => {\n  const resolved = typeof value === 'function' ? (value as ManyFactory<T, C>)(context) : value;\n  return Array.isArray(resolved) ? resolved : [resolved as T];\n};\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-sandbox', async (context) => {\n  const scopeSession = await rootSession(context);\n  const contextSession = { ...context, root: scopeSession.value };\n  return {\n    ...composeRootHooks(scopeSession),\n    get commands(): PiPluginContributions['commands'] { return [at(commandSandbox, contextSession)]; },\n    get providers(): PiPluginContributions['providers'] { return [...many(providerBrokered, contextSession)]; },\n    get resources(): PiPluginContributions['resources'] { return [at(resourceDoompiUseSandbox, contextSession)]; },\n    services: [...(scopeSession.services ?? [])],\n  };\n});\n\nexport default extension;\n"],"mappings":";;;;;;;;;;AAMA,SAAgB,oBAAoB,SAAwD;CAI1F,OAAO,EAAE,OAAA,EAFP,SAAS,QAAQ,SAAS,WAAW,IAAIA,yBAAAA,+BAA+B,QAAQ,GAAG,EAExE,EAAE;AACjB;;;ACPA,IAAA,oBAAA,GAAeC,qCAAAA,WAAAA,CAAW,mBAAmB;;;ACG7C,IAAA,uBAAA,GAAeC,qCAAAA,iBAAAA,EAAkB,YAC/BC,yBAAAA,wBAAwB,QAAQ,KAAK,OAAO,CAC9C;;;;;;;;;;;;;;ACSA,SAAgB,0BACd,aAC4B;CAC5B,MAAM,aAAa,YAAYC,sBAAAA,qBAAqB,EAAE,KAAK;CAC3D,IAAI,CAAC,YAAY,OAAO,CAAC;CACzB,MAAM,YAAY,YAAA,uBAA8B,EAAE,KAAK,IACnD,aAAaC,sBAAAA,0BACb,YAAYC,sBAAAA,mBAAmB,EAAE,KAAK;CAC1C,IAAI,CAAC,WAAW,OAAO,CAAC;CACxB,OAAO,WACJ,MAAM,GAAG,CAAC,CACV,KAAK,aAAa,SAAS,KAAK,CAAC,CAAC,CAClC,QAAQ,aAAa,SAAS,SAAS,CAAC,CAAC,CACzC,KAAK,cAAc;EAAE;EAAU,SAAS,UAAU,UAAU,GAAG;CAAW,EAAE;AACjF;;;AC9BA,SAAgB,6BAA6B,aAA2D;CACtG,OAAO,0BAA0B,WAAW,CAAC,CAAC,KAAK,EAAE,UAAU,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAU;AAC/G;;;ACEA,IAAA,wBAAA,GAAeC,qCAAAA,yBAAAA,EAAAA,GACbC,qCAAAA,eAAAA,EAAgB,aACd,6BAA6B,QAAQ,GAAG,CAC1C,GACA,EAAE,aAAa,OAAO,CACxB;;;ACPA,IAAA,gCAAA,GAAeC,qCAAAA,eAAAA,CAAeC,yBAAAA,0BAAAA,QAAAA,KAAAA,CAAAA,CAAAA,cAAAA,UAAAA,CAAAA,CAAAA,IAAyC,CAAC;;;ACYxE,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AAEpE,MAAM,QAAc,OAA6C,YAA6B;CAC5F,MAAM,WAAW,OAAO,UAAU,aAAc,MAA4B,OAAO,IAAI;CACvF,OAAO,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAa;AAC5D;AAEA,MAAa,aAAA,GAAYC,mCAAAA,kBAAAA,CAAoC,6BAA6B,OAAO,YAAY;CAC3G,MAAM,eAAe,MAAMC,iBAAY,OAAO;CAC9C,MAAM,iBAAiB;EAAE,GAAG;EAAS,MAAM,aAAa;CAAM;CAC9D,OAAO;EACL,IAAA,GAAGC,qCAAAA,iBAAAA,CAAiB,YAAY;EAChC,IAAI,WAA8C;GAAE,OAAO,CAAC,GAAGC,qBAAgB,cAAc,CAAC;EAAG;EACjG,IAAI,YAAgD;GAAE,OAAO,CAAC,GAAG,KAAKC,sBAAkB,cAAc,CAAC;EAAG;EAC1G,IAAI,YAAgD;GAAE,OAAO,CAAC,GAAGC,8BAA0B,cAAc,CAAC;EAAG;EAC7G,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;CAC7C;AACF,CAAC"}