app-runtime.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import { Layer, ManagedRuntime } from "effect"
  2. import { attach } from "./run-service"
  3. import * as Observability from "@kirincode-ai/core/observability"
  4. import { FSUtil } from "@kirincode-ai/core/fs-util"
  5. import { Database } from "@kirincode-ai/core/database/database"
  6. import { Auth } from "@/auth"
  7. import { Account } from "@/account/account"
  8. import { Config } from "@/config/config"
  9. import { Git } from "@/git"
  10. import { Ripgrep } from "@kirincode-ai/core/ripgrep"
  11. import { Storage } from "@/storage/storage"
  12. import { Snapshot } from "@/snapshot"
  13. import { Plugin } from "@/plugin"
  14. import { ModelsDev } from "@kirincode-ai/core/models-dev"
  15. import { Provider } from "@/provider/provider"
  16. import { ProviderAuth } from "@/provider/auth"
  17. import { Agent } from "@/agent/agent"
  18. import { Skill } from "@/skill"
  19. import { Discovery } from "@/skill/discovery"
  20. import { Question } from "@/question"
  21. import { Permission } from "@/permission"
  22. import { Todo } from "@/session/todo"
  23. import { Session } from "@/session/session"
  24. import { SessionStatus } from "@/session/status"
  25. import { SessionRunState } from "@/session/run-state"
  26. import { SessionProcessor } from "@/session/processor"
  27. import { SessionCompaction } from "@/session/compaction"
  28. import { SessionRevert } from "@/session/revert"
  29. import { SessionSummary } from "@/session/summary"
  30. import { SessionPrompt } from "@/session/prompt"
  31. import { Instruction } from "@/session/instruction"
  32. import { LLM } from "@/session/llm"
  33. import { LSP } from "@/lsp/lsp"
  34. import { MCP } from "@/mcp"
  35. import { McpAuth } from "@/mcp/auth"
  36. import { Command } from "@/command"
  37. import { Truncate } from "@/tool/truncate"
  38. import { ToolRegistry } from "@/tool/registry"
  39. import { Format } from "@/format"
  40. import { InstanceStore } from "@/project/instance-store"
  41. import { Project } from "@/project/project"
  42. import { Vcs } from "@/project/vcs"
  43. import { Workspace } from "@/control-plane/workspace"
  44. import { Worktree } from "@/worktree"
  45. import { Installation } from "@/installation"
  46. import { ShareNext } from "@/share/share-next"
  47. import { SessionShare } from "@/share/session"
  48. import { Npm } from "@kirincode-ai/core/npm"
  49. import { memoMap } from "@kirincode-ai/core/effect/memo-map"
  50. import { BackgroundJob } from "@/background/job"
  51. import { RuntimeFlags } from "@/effect/runtime-flags"
  52. import { EventV2Bridge } from "@/event-v2-bridge"
  53. import { LayerNode } from "@kirincode-ai/core/effect/layer-node"
  54. import { AppNodeBuilderV1 } from "./app-node-builder-v1"
  55. import { SessionProjector } from "@kirincode-ai/core/session/projector"
  56. export const AppLayer = AppNodeBuilderV1.build(
  57. LayerNode.group([
  58. Npm.node,
  59. FSUtil.node,
  60. Database.node,
  61. Auth.node,
  62. Account.node,
  63. Config.node,
  64. Git.node,
  65. Storage.node,
  66. Snapshot.node,
  67. Plugin.node,
  68. ModelsDev.node,
  69. Provider.node,
  70. ProviderAuth.node,
  71. Agent.node,
  72. Skill.node,
  73. Discovery.node,
  74. Question.node,
  75. Permission.node,
  76. Todo.node,
  77. Session.node,
  78. SessionProjector.node,
  79. SessionStatus.node,
  80. BackgroundJob.node,
  81. RuntimeFlags.node,
  82. EventV2Bridge.node,
  83. SessionRunState.node,
  84. SessionProcessor.node,
  85. SessionCompaction.node,
  86. SessionRevert.node,
  87. SessionSummary.node,
  88. SessionPrompt.node,
  89. Instruction.node,
  90. LLM.node,
  91. LSP.node,
  92. MCP.node,
  93. McpAuth.node,
  94. Command.node,
  95. Truncate.node,
  96. ToolRegistry.node,
  97. Format.node,
  98. InstanceStore.node,
  99. Project.node,
  100. Vcs.node,
  101. Workspace.node,
  102. Worktree.node,
  103. Installation.node,
  104. ShareNext.node,
  105. SessionShare.node,
  106. ]),
  107. ).pipe(Layer.provideMerge(AppNodeBuilderV1.build(Ripgrep.node)), Layer.provideMerge(Observability.layer))
  108. const rt = ManagedRuntime.make(AppLayer, { memoMap })
  109. type Runtime = Pick<typeof rt, "runSync" | "runPromise" | "runPromiseExit" | "runFork" | "runCallback" | "dispose">
  110. /** Services provided by AppRuntime — i.e. what an Effect run via AppRuntime.runPromise can yield. */
  111. export type AppServices = ManagedRuntime.ManagedRuntime.Services<typeof rt>
  112. const wrap = (effect: Parameters<typeof rt.runSync>[0]) => attach(effect as never) as never
  113. export const AppRuntime: Runtime = {
  114. runSync(effect) {
  115. return rt.runSync(wrap(effect))
  116. },
  117. runPromise(effect, options) {
  118. return rt.runPromise(wrap(effect), options)
  119. },
  120. runPromiseExit(effect, options) {
  121. return rt.runPromiseExit(wrap(effect), options)
  122. },
  123. runFork(effect) {
  124. return rt.runFork(wrap(effect))
  125. },
  126. runCallback(effect) {
  127. return rt.runCallback(wrap(effect))
  128. },
  129. dispose: () => rt.dispose(),
  130. }