{"version":3,"sources":["../../src/core/db.ts"],"names":["relaySchema","konro","toStateFile","record","fromStateFile","stateFile","normalizeGitCommitMsg","dbInstances","getDb","cwd","resolvedCwd","path","existingInstance","dbDir","getStateDirectory","adapter","newInstance"],"mappings":"6OAOO,MAAMA,CAAAA,CAAcC,WAAAA,CAAM,YAAA,CAAa,CAC5C,MAAA,CAAQ,CACN,YAAA,CAAc,CACZ,EAAA,CAAIA,WAAAA,CAAM,EAAA,EAAG,CACb,KAAMA,WAAAA,CAAM,MAAA,CAAO,CAAE,MAAA,CAAQ,IAAK,CAAC,CAAA,CACnC,SAAA,CAAWA,WAAAA,CAAM,MAAA,EAAO,CACxB,SAAA,CAAWA,WAAAA,CAAM,MAAA,GACjB,UAAA,CAAYA,WAAAA,CAAM,MAAA,CAAO,CAAE,QAAA,CAAU,IAAK,CAAC,CAAA,CAC3C,YAAA,CAAcA,WAAAA,CAAM,MAAA,CAAO,CAAE,QAAA,CAAU,IAAK,CAAC,CAAA,CAC7C,eAAA,CAAiBA,WAAAA,CAAM,MAAA,CAAO,CAAE,QAAA,CAAU,IAAK,CAAC,CAAA,CAChD,YAAA,CAAcA,WAAAA,CAAM,MAAA,CAAO,CAAE,SAAU,IAAK,CAAC,CAAA,CAC7C,cAAA,CAAgBA,WAAAA,CAAM,MAAA,CAAO,CAAE,QAAA,CAAU,IAAK,CAAC,CAAA,CAC/C,aAAA,CAAeA,WAAAA,CAAM,MAAA,CAAO,CAAE,QAAA,CAAU,IAAK,CAAC,CAAA,CAC9C,SAAA,CAAWA,WAAAA,CAAM,MAAA,EAAiB,CAClC,UAAA,CAAYA,WAAAA,CAAM,MAAA,EAAwB,CAC1C,QAAA,CAAUA,WAAAA,CAAM,QAAqB,CACrC,QAAA,CAAUA,WAAAA,CAAM,OAAA,EAAQ,CACxB,MAAA,CAAQA,WAAAA,CAAM,MAAA,EAChB,CACF,CAAA,CACA,SAAA,CAAW,KAAO,GACpB,CAAC,EASM,SAASC,CAAAA,CAAYC,CAAAA,CAAsC,CAChE,OAAOA,CACT,CAEO,SAASC,CAAAA,CAAcC,CAAAA,CAAgE,CAC5F,GAAI,CAACA,CAAAA,CAAU,IAAA,CACb,MAAM,IAAI,KAAA,CAAM,kCAAkC,CAAA,CAGpD,OAAO,CACL,GAAGA,CAAAA,CACH,IAAA,CAAMA,CAAAA,CAAU,KAChB,UAAA,CAAYA,CAAAA,CAAU,UAAA,EAAc,IAAA,CACpC,YAAA,CAAcA,CAAAA,CAAU,YAAA,EAAgB,IAAA,CACxC,eAAA,CAAiBA,CAAAA,CAAU,eAAA,EAAmB,IAAA,CAC9C,YAAA,CAAcC,mCAAAA,CAAsBD,EAAU,YAAY,CAAA,EAAK,IAAA,CAC/D,cAAA,CAAiBA,CAAAA,CAAkB,cAAA,EAAkB,IAAA,CACrD,aAAA,CAAeA,CAAAA,CAAU,aAAA,EAAiB,IAC5C,CACF,CAEA,MAAME,EAAc,IAAI,GAAA,CAEjB,SAASC,CAAAA,CAAMC,CAAAA,CAA6C,CACjE,MAAMC,CAAAA,CAAcC,kBAAAA,CAAK,OAAA,CAAQF,CAAG,CAAA,CAC9BG,CAAAA,CAAmBL,CAAAA,CAAY,IAAIG,CAAW,CAAA,CACpD,GAAIE,CAAAA,CACF,OAAOA,CAAAA,CAGT,MAAMC,CAAAA,CAAQC,wBAAAA,CAAkBJ,CAAW,CAAA,CAErCK,CAAAA,CAAUd,WAAAA,CAAM,iBAAA,CAAkB,CACtC,MAAA,CAAQ,MAAA,CACR,SAAA,CAAW,CAAE,GAAA,CAAKY,CAAM,CAAA,CACxB,IAAA,CAAM,WACR,CAAC,CAAA,CAGKG,CAAAA,CADKf,WAAAA,CAAM,cAAA,CAAe,CAAE,MAAA,CAAQD,CAAAA,CAAa,OAAA,CAAAe,CAAQ,CAAC,CAAA,CAEhE,OAAAR,CAAAA,CAAY,GAAA,CAAIG,CAAAA,CAAaM,CAAW,CAAA,CACjCA,CACT","file":"db.cjs","sourcesContent":["import { konro } from 'konro';\nimport type { FileOperation, FileSnapshot, StateFile } from 'relaycode-core';\nimport { normalizeGitCommitMsg } from 'relaycode-core';\nimport path from 'path';\nimport { getStateDirectory } from './config';\nimport type { OnDemandDbContext } from 'konro';\n\nexport const relaySchema = konro.createSchema({\n  tables: {\n    transactions: {\n      id: konro.id(),\n      uuid: konro.string({ unique: true }),\n      projectId: konro.string(),\n      createdAt: konro.string(), // store as ISO string\n      linesAdded: konro.number({ optional: true }),\n      linesRemoved: konro.number({ optional: true }),\n      linesDifference: konro.number({ optional: true }),\n      gitCommitMsg: konro.string({ optional: true }),\n      gitCommittedAt: konro.string({ optional: true }), // ISO string timestamp when included in git commit\n      promptSummary: konro.string({ optional: true }),\n      reasoning: konro.object<string[]>(),\n      operations: konro.object<FileOperation[]>(),\n      snapshot: konro.object<FileSnapshot>(),\n      approved: konro.boolean(),\n      status: konro.string(), // 'pending', 'committed', 'undone'\n    },\n  },\n  relations: () => ({}),\n});\n\nexport type RelaySchema = typeof relaySchema;\n// This is the type inferred by konro for a base record.\nexport type TransactionRecord = RelaySchema['base']['transactions'];\n\n// We need to convert between TransactionRecord and StateFile because StateFile is a Zod-validated type\n// and TransactionRecord is konro's inferred type. They should be structurally identical.\n// This function also handles type casting for complex object types.\nexport function toStateFile(record: TransactionRecord): StateFile {\n  return record as unknown as StateFile;\n}\n\nexport function fromStateFile(stateFile: StateFile): Omit<TransactionRecord, 'id' | 'status'> {\n  if (!stateFile.uuid) {\n    throw new Error('StateFile must have a valid UUID');\n  }\n  \n  return {\n    ...stateFile,\n    uuid: stateFile.uuid, // Ensure UUID is explicitly included\n    linesAdded: stateFile.linesAdded ?? null,\n    linesRemoved: stateFile.linesRemoved ?? null,\n    linesDifference: stateFile.linesDifference ?? null,\n    gitCommitMsg: normalizeGitCommitMsg(stateFile.gitCommitMsg) ?? null,\n    gitCommittedAt: (stateFile as any).gitCommittedAt ?? null,\n    promptSummary: stateFile.promptSummary ?? null,\n  };\n}\n\nconst dbInstances = new Map<string, OnDemandDbContext<RelaySchema>>();\n\nexport function getDb(cwd: string): OnDemandDbContext<RelaySchema> {\n  const resolvedCwd = path.resolve(cwd);\n  const existingInstance = dbInstances.get(resolvedCwd);\n  if (existingInstance) {\n    return existingInstance;\n  }\n\n  const dbDir = getStateDirectory(resolvedCwd);\n\n  const adapter = konro.createFileAdapter({\n    format: 'yaml',\n    perRecord: { dir: dbDir },\n    mode: 'on-demand',\n  });\n\n  const db = konro.createDatabase({ schema: relaySchema, adapter });\n  const newInstance = db as OnDemandDbContext<RelaySchema>;\n  dbInstances.set(resolvedCwd, newInstance);\n  return newInstance;\n}"]}