{"version":3,"file":"mcpSession.mjs","names":[],"sources":["../../src/schemas/mcpSession.ts"],"sourcesContent":["import { type Static, Type } from 'typebox';\nimport { Check, Errors } from 'typebox/value';\nimport { type DoomMcpProjectionSource, DoomMcpProjectionSourceSchema } from './mcpProjection.ts';\n\n/** Environment variable carrying the neutral MCP session wire document. */\nexport const DOOM_MCP_SESSION_ENV_VAR = 'DOOM_MCP_SESSION';\n\nexport const DoomMcpSessionAllowlistSchema = Type.Object(\n  {\n    servers: Type.Optional(Type.Array(Type.String({ minLength: 1 }))),\n    proxy: Type.Optional(Type.Array(Type.String({ minLength: 1 }))),\n  },\n  { additionalProperties: false },\n);\nexport type DoomMcpSessionAllowlist = Static<typeof DoomMcpSessionAllowlistSchema>;\n\nexport interface DoomMcpSessionConfig {\n  enabled?: boolean;\n  repoRoot: string;\n  stagingDirectory: string;\n  generatedConfigPath?: string;\n  pluginConfigPaths?: string[];\n  sources?: readonly DoomMcpProjectionSource[];\n  allowlist?: DoomMcpSessionAllowlist;\n}\n\nexport const DoomMcpSessionConfigSchema = Type.Object(\n  {\n    enabled: Type.Optional(Type.Boolean()),\n    repoRoot: Type.String({ minLength: 1 }),\n    stagingDirectory: Type.String({ minLength: 1 }),\n    generatedConfigPath: Type.Optional(Type.String({ minLength: 1 })),\n    pluginConfigPaths: Type.Optional(Type.Array(Type.String({ minLength: 1 }))),\n    sources: Type.Optional(Type.Array(DoomMcpProjectionSourceSchema)),\n    allowlist: Type.Optional(DoomMcpSessionAllowlistSchema),\n  },\n  { additionalProperties: false },\n);\n\nfunction sessionConfigError(value: unknown): Error {\n  const [first] = Errors(DoomMcpSessionConfigSchema, value);\n  return new Error(\n    `Invalid Doom MCP session config${first ? ` at ${first.instancePath || '/'}: ${first.message}` : ''}`,\n  );\n}\n\n/** Serializes one validated session document for a child process boundary. */\nexport function serializeDoomMcpSessionConfig(config: DoomMcpSessionConfig): string {\n  if (!Check(DoomMcpSessionConfigSchema, config)) throw sessionConfigError(config);\n  return JSON.stringify(config);\n}\n\n/** Parses a session wire document. Invalid input resolves to the fail-closed absence state. */\nexport function parseDoomMcpSessionConfig(value: string): DoomMcpSessionConfig | undefined {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(value);\n  } catch {\n    return undefined;\n  }\n  return Check(DoomMcpSessionConfigSchema, parsed) ? parsed : undefined;\n}\n\n/** Reads a session document without adding feature-specific fallback policy. */\nexport function readDoomMcpSessionConfig(\n  environment: Readonly<Record<string, string | undefined>>,\n): DoomMcpSessionConfig | undefined {\n  const value = environment[DOOM_MCP_SESSION_ENV_VAR];\n  return value === undefined ? undefined : parseDoomMcpSessionConfig(value);\n}\n\n/** Builds the environment fragment inherited by an MCP-enabled child process. */\nexport function doomMcpSessionEnvironment(config: DoomMcpSessionConfig): Record<string, string> {\n  return { [DOOM_MCP_SESSION_ENV_VAR]: serializeDoomMcpSessionConfig(config) };\n}\n"],"mappings":"qJAKA,MAAa,EAA2B,mBAE3B,EAAgC,EAAK,OAChD,CACE,QAAS,EAAK,SAAS,EAAK,MAAM,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,CAAC,CAAC,EAChE,MAAO,EAAK,SAAS,EAAK,MAAM,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,CAAC,CAAC,CAChE,EACA,CAAE,qBAAsB,EAAM,CAChC,EAaa,EAA6B,EAAK,OAC7C,CACE,QAAS,EAAK,SAAS,EAAK,QAAQ,CAAC,EACrC,SAAU,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EACtC,iBAAkB,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAC9C,oBAAqB,EAAK,SAAS,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,CAAC,EAChE,kBAAmB,EAAK,SAAS,EAAK,MAAM,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,CAAC,CAAC,EAC1E,QAAS,EAAK,SAAS,EAAK,MAAM,CAA6B,CAAC,EAChE,UAAW,EAAK,SAAS,CAA6B,CACxD,EACA,CAAE,qBAAsB,EAAM,CAChC,EAEA,SAAS,EAAmB,EAAuB,CACjD,GAAM,CAAC,GAAS,EAAO,EAA4B,CAAK,EACxD,OAAW,MACT,kCAAkC,EAAQ,OAAO,EAAM,cAAgB,IAAI,IAAI,EAAM,UAAY,IACnG,CACF,CAGA,SAAgB,EAA8B,EAAsC,CAClF,GAAI,CAAC,EAAM,EAA4B,CAAM,EAAG,MAAM,EAAmB,CAAM,EAC/E,OAAO,KAAK,UAAU,CAAM,CAC9B,CAGA,SAAgB,EAA0B,EAAiD,CACzF,IAAI,EACJ,GAAI,CACF,EAAS,KAAK,MAAM,CAAK,CAC3B,MAAQ,CACN,MACF,CACA,OAAO,EAAM,EAA4B,CAAM,EAAI,EAAS,IAAA,EAC9D,CAGA,SAAgB,EACd,EACkC,CAClC,IAAM,EAAQ,EAAY,GAC1B,OAAO,IAAU,IAAA,GAAY,IAAA,GAAY,EAA0B,CAAK,CAC1E,CAGA,SAAgB,EAA0B,EAAsD,CAC9F,MAAO,EAAG,GAA2B,EAA8B,CAAM,CAAE,CAC7E"}