seed-e2e.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. const dir = process.env.OPENCODE_E2E_PROJECT_DIR ?? process.cwd()
  2. const title = process.env.OPENCODE_E2E_SESSION_TITLE ?? "E2E Session"
  3. const text = process.env.OPENCODE_E2E_MESSAGE ?? "Seeded for UI e2e"
  4. const model = process.env.OPENCODE_E2E_MODEL ?? "opencode/gpt-5-nano"
  5. const parts = model.split("/")
  6. const providerID = parts[0] ?? "opencode"
  7. const modelID = parts[1] ?? "gpt-5-nano"
  8. const now = Date.now()
  9. const seed = async () => {
  10. const { Instance } = await import("../src/project/instance")
  11. const { InstanceBootstrap } = await import("../src/project/bootstrap")
  12. const { Config } = await import("../src/config/config")
  13. const { disposeRuntime } = await import("../src/effect/runtime")
  14. const { Session } = await import("../src/session")
  15. const { MessageID, PartID } = await import("../src/session/schema")
  16. const { Project } = await import("../src/project/project")
  17. const { ModelID, ProviderID } = await import("../src/provider/schema")
  18. const { ToolRegistry } = await import("../src/tool/registry")
  19. try {
  20. await Instance.provide({
  21. directory: dir,
  22. init: InstanceBootstrap,
  23. fn: async () => {
  24. await Config.waitForDependencies()
  25. await ToolRegistry.ids()
  26. const session = await Session.create({ title })
  27. const messageID = MessageID.ascending()
  28. const partID = PartID.ascending()
  29. const message = {
  30. id: messageID,
  31. sessionID: session.id,
  32. role: "user" as const,
  33. time: { created: now },
  34. agent: "build",
  35. model: {
  36. providerID: ProviderID.make(providerID),
  37. modelID: ModelID.make(modelID),
  38. },
  39. }
  40. const part = {
  41. id: partID,
  42. sessionID: session.id,
  43. messageID,
  44. type: "text" as const,
  45. text,
  46. time: { start: now },
  47. }
  48. await Session.updateMessage(message)
  49. await Session.updatePart(part)
  50. await Project.update({ projectID: Instance.project.id, name: "E2E Project" })
  51. },
  52. })
  53. } finally {
  54. await Instance.disposeAll().catch(() => {})
  55. await disposeRuntime().catch(() => {})
  56. }
  57. }
  58. await seed()