app-runtime.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import { Layer, ManagedRuntime } from "effect"
  2. import { attach, memoMap } from "./run-service"
  3. import * as Observability from "./observability"
  4. import { AppFileSystem } from "@opencode-ai/shared/filesystem"
  5. import { Bus } from "@/bus"
  6. import { Auth } from "@/auth"
  7. import { Account } from "@/account"
  8. import { Config } from "@/config"
  9. import { Git } from "@/git"
  10. import { Ripgrep } from "@/file/ripgrep"
  11. import { FileTime } from "@/file/time"
  12. import { File } from "@/file"
  13. import { FileWatcher } from "@/file/watcher"
  14. import { Storage } from "@/storage"
  15. import { Snapshot } from "@/snapshot"
  16. import { Plugin } from "@/plugin"
  17. import { Provider } from "@/provider"
  18. import { ProviderAuth } from "@/provider"
  19. import { Agent } from "@/agent/agent"
  20. import { Skill } from "@/skill/skill"
  21. import { Discovery } from "@/skill/discovery"
  22. import { Question } from "@/question"
  23. import { Permission } from "@/permission"
  24. import { Todo } from "@/session/todo"
  25. import { Session } from "@/session"
  26. import { SessionStatus } from "@/session/status"
  27. import { SessionRunState } from "@/session/run-state"
  28. import { SessionProcessor } from "@/session/processor"
  29. import { SessionCompaction } from "@/session/compaction"
  30. import { SessionRevert } from "@/session/revert"
  31. import { SessionSummary } from "@/session/summary"
  32. import { SessionPrompt } from "@/session/prompt"
  33. import { Instruction } from "@/session/instruction"
  34. import { LLM } from "@/session/llm"
  35. import { LSP } from "@/lsp"
  36. import { MCP } from "@/mcp"
  37. import { McpAuth } from "@/mcp/auth"
  38. import { Command } from "@/command"
  39. import { Truncate } from "@/tool"
  40. import { ToolRegistry } from "@/tool"
  41. import { Format } from "@/format"
  42. import { Project } from "@/project"
  43. import { Vcs } from "@/project"
  44. import { Worktree } from "@/worktree"
  45. import { Pty } from "@/pty"
  46. import { Installation } from "@/installation"
  47. import { ShareNext } from "@/share"
  48. import { SessionShare } from "@/share"
  49. import { Npm } from "@opencode-ai/shared/npm"
  50. export const AppLayer = Layer.mergeAll(
  51. Npm.defaultLayer,
  52. AppFileSystem.defaultLayer,
  53. Bus.defaultLayer,
  54. Auth.defaultLayer,
  55. Account.defaultLayer,
  56. Config.defaultLayer,
  57. Git.defaultLayer,
  58. Ripgrep.defaultLayer,
  59. FileTime.defaultLayer,
  60. File.defaultLayer,
  61. FileWatcher.defaultLayer,
  62. Storage.defaultLayer,
  63. Snapshot.defaultLayer,
  64. Plugin.defaultLayer,
  65. Provider.defaultLayer,
  66. ProviderAuth.defaultLayer,
  67. Agent.defaultLayer,
  68. Skill.defaultLayer,
  69. Discovery.defaultLayer,
  70. Question.defaultLayer,
  71. Permission.defaultLayer,
  72. Todo.defaultLayer,
  73. Session.defaultLayer,
  74. SessionStatus.defaultLayer,
  75. SessionRunState.defaultLayer,
  76. SessionProcessor.defaultLayer,
  77. SessionCompaction.defaultLayer,
  78. SessionRevert.defaultLayer,
  79. SessionSummary.defaultLayer,
  80. SessionPrompt.defaultLayer,
  81. Instruction.defaultLayer,
  82. LLM.defaultLayer,
  83. LSP.defaultLayer,
  84. MCP.defaultLayer,
  85. McpAuth.defaultLayer,
  86. Command.defaultLayer,
  87. Truncate.defaultLayer,
  88. ToolRegistry.defaultLayer,
  89. Format.defaultLayer,
  90. Project.defaultLayer,
  91. Vcs.defaultLayer,
  92. Worktree.defaultLayer,
  93. Pty.defaultLayer,
  94. Installation.defaultLayer,
  95. ShareNext.defaultLayer,
  96. SessionShare.defaultLayer,
  97. ).pipe(Layer.provideMerge(Observability.layer))
  98. const rt = ManagedRuntime.make(AppLayer, { memoMap })
  99. type Runtime = Pick<typeof rt, "runSync" | "runPromise" | "runPromiseExit" | "runFork" | "runCallback" | "dispose">
  100. const wrap = (effect: Parameters<typeof rt.runSync>[0]) => attach(effect as never) as never
  101. export const AppRuntime: Runtime = {
  102. runSync(effect) {
  103. return rt.runSync(wrap(effect))
  104. },
  105. runPromise(effect, options) {
  106. return rt.runPromise(wrap(effect), options)
  107. },
  108. runPromiseExit(effect, options) {
  109. return rt.runPromiseExit(wrap(effect), options)
  110. },
  111. runFork(effect) {
  112. return rt.runFork(wrap(effect))
  113. },
  114. runCallback(effect) {
  115. return rt.runCallback(wrap(effect))
  116. },
  117. dispose: () => rt.dispose(),
  118. }