seed-e2e.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. const dir = process.env.KILO_E2E_PROJECT_DIR ?? process.cwd()
  2. const title = process.env.KILO_E2E_SESSION_TITLE ?? "E2E Session"
  3. const text = process.env.KILO_E2E_MESSAGE ?? "Seeded for UI e2e"
  4. const model = process.env.KILO_E2E_MODEL ?? "kilo/kilo-auto/frontier"
  5. const requirePaid = process.env.KILO_E2E_REQUIRE_PAID === "true"
  6. const parts = model.split("/")
  7. const providerID = parts[0] ?? "kilo" // kilocode_change
  8. const modelID = parts.slice(1).join("/") || "kilo-auto/frontier" // kilocode_change
  9. const now = Date.now()
  10. const seed = async () => {
  11. const { Instance } = await import("../src/project/instance")
  12. const { InstanceBootstrap } = await import("../src/project/bootstrap")
  13. const { Config } = await import("../src/config/config")
  14. const { Provider } = await import("../src/provider/provider")
  15. const { Session } = await import("../src/session")
  16. const { MessageID, PartID } = await import("../src/session/schema")
  17. const { Project } = await import("../src/project/project")
  18. const { ModelID, ProviderID } = await import("../src/provider/schema")
  19. const { ToolRegistry } = await import("../src/tool/registry")
  20. try {
  21. await Instance.provide({
  22. directory: dir,
  23. init: InstanceBootstrap,
  24. fn: async () => {
  25. await Config.waitForDependencies()
  26. await ToolRegistry.ids()
  27. if (requirePaid && providerID === "kilo" && !process.env.KILO_API_KEY) {
  28. throw new Error("KILO_API_KEY is required when KILO_E2E_REQUIRE_PAID=true")
  29. }
  30. const info = await Provider.getModel(ProviderID.make(providerID), ModelID.make(modelID))
  31. if (requirePaid) {
  32. const paid =
  33. info.cost.input > 0 || info.cost.output > 0 || info.cost.cache.read > 0 || info.cost.cache.write > 0
  34. if (!paid) {
  35. throw new Error(`KILO_E2E_MODEL must resolve to a paid model: ${providerID}/${modelID}`)
  36. }
  37. }
  38. const session = await Session.create({ title })
  39. const messageID = MessageID.ascending()
  40. const partID = PartID.ascending()
  41. const message = {
  42. id: messageID,
  43. sessionID: session.id,
  44. role: "user" as const,
  45. time: { created: now },
  46. agent: "code", // kilocode_change - renamed from "build" to "code"
  47. model: {
  48. providerID: ProviderID.make(providerID),
  49. modelID: ModelID.make(modelID),
  50. },
  51. }
  52. const part = {
  53. id: partID,
  54. sessionID: session.id,
  55. messageID,
  56. type: "text" as const,
  57. text,
  58. time: { start: now },
  59. }
  60. await Session.updateMessage(message)
  61. await Session.updatePart(part)
  62. await Project.update({ projectID: Instance.project.id, name: "E2E Project" })
  63. },
  64. })
  65. } finally {
  66. await Instance.disposeAll().catch(() => {})
  67. }
  68. }
  69. await seed()