{"version":3,"sources":["../src/cli/types.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport type PromptDependency =\n  | string\n  | {\n      version?: string;\n      file?: string;\n    };\n\nexport type PromptsConfig = {\n  prompts: Record<string, PromptDependency>;\n};\n\nexport type RuntimeParameters = Record<string, unknown>;\n\n// Zod schema for local prompt config with permissive validation\nexport const localPromptConfigSchema = z\n  .object({\n    model: z.string().min(1, \"Model is required\"),\n    modelParameters: z\n      .object({\n        temperature: z.number().optional(),\n        max_tokens: z.number().optional(),\n      })\n      .loose()\n      .optional(),\n    messages: z\n      .array(\n        z\n          .object({\n            role: z.enum([\"system\", \"user\", \"assistant\"]),\n            content: z.string().min(1, \"Message content cannot be empty\"),\n          })\n          .loose(),\n      )\n      .min(1, \"At least one message is required\"),\n    parameters: z.record(z.string(), z.unknown()).optional().default({}),\n  })\n  .loose();\n\nexport type LocalPromptConfig = z.infer<typeof localPromptConfigSchema>;\n\nexport type MaterializedPrompt = {\n  id: string;\n  name: string;\n  version: number;\n  versionId: string;\n  model: string;\n  messages: Array<{\n    role: \"system\" | \"user\" | \"assistant\";\n    content: string;\n  }>;\n  prompt: string;\n  temperature?: number;\n  maxTokens?: number;\n  inputs?: any;\n  outputs?: any;\n  parameters: RuntimeParameters;\n  updatedAt: string;\n};\n\nexport type SyncResult = {\n  fetched: Array<{ name: string; version: number; versionSpec: string }>;\n  pushed: Array<{ name: string; version: number }>;\n  unchanged: string[];\n  cleaned: string[];\n  errors: Array<{ name: string; error: string }>;\n};\n\nexport type PromptsLockEntry = {\n  version: number;\n  versionId: string;\n  materialized: string;\n};\n\nexport type PromptsLock = {\n  lockfileVersion: number;\n  prompts: Record<string, PromptsLockEntry>;\n};\n\n// Parse npm-style version specifications like \"foo@latest\" or \"bar@5\"\nexport const parsePromptSpec = (\n  spec: string,\n): { name: string; version: string } => {\n  const atIndex = spec.lastIndexOf(\"@\");\n  if (atIndex === -1) {\n    return { name: spec, version: \"latest\" };\n  }\n\n  const name = spec.slice(0, atIndex);\n  const version = spec.slice(atIndex + 1);\n\n  if (!name || !version) {\n    throw new Error(\n      `Invalid prompt specification: ${spec}. Use format 'name@version' or just 'name'`,\n    );\n  }\n\n  return { name, version };\n};\n"],"mappings":";AAAA,SAAS,SAAS;AAgBX,IAAM,0BAA0B,EACpC,OAAO;AAAA,EACN,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,mBAAmB;AAAA,EAC5C,iBAAiB,EACd,OAAO;AAAA,IACN,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,IACjC,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,CAAC,EACA,MAAM,EACN,SAAS;AAAA,EACZ,UAAU,EACP;AAAA,IACC,EACG,OAAO;AAAA,MACN,MAAM,EAAE,KAAK,CAAC,UAAU,QAAQ,WAAW,CAAC;AAAA,MAC5C,SAAS,EAAE,OAAO,EAAE,IAAI,GAAG,iCAAiC;AAAA,IAC9D,CAAC,EACA,MAAM;AAAA,EACX,EACC,IAAI,GAAG,kCAAkC;AAAA,EAC5C,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACrE,CAAC,EACA,MAAM;AA2CF,IAAM,kBAAkB,CAC7B,SACsC;AACtC,QAAM,UAAU,KAAK,YAAY,GAAG;AACpC,MAAI,YAAY,IAAI;AAClB,WAAO,EAAE,MAAM,MAAM,SAAS,SAAS;AAAA,EACzC;AAEA,QAAM,OAAO,KAAK,MAAM,GAAG,OAAO;AAClC,QAAM,UAAU,KAAK,MAAM,UAAU,CAAC;AAEtC,MAAI,CAAC,QAAQ,CAAC,SAAS;AACrB,UAAM,IAAI;AAAA,MACR,iCAAiC,IAAI;AAAA,IACvC;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,QAAQ;AACzB;","names":[]}