index.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/usr/bin/env bun
  2. import { NodeRuntime, NodeServices } from "@effect/platform-node"
  3. import { Effect } from "effect"
  4. import { Commands } from "./commands/commands"
  5. import { Runtime } from "./framework/runtime"
  6. import { Observability } from "@opencode-ai/core/observability"
  7. import { Updater } from "./services/updater"
  8. import { InstallationChannel, InstallationVersion, InstallationLocal } from "@opencode-ai/core/installation/version"
  9. import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder"
  10. import { LayerNode } from "@opencode-ai/core/effect/layer-node"
  11. import { Global } from "@opencode-ai/core/global"
  12. import { AppProcess } from "@opencode-ai/core/process"
  13. import { Config } from "./config"
  14. import { Npm } from "@opencode-ai/core/npm"
  15. const Handlers = Runtime.handlers(Commands, {
  16. $: () => import("./commands/handlers/default"),
  17. api: () => import("./commands/handlers/api"),
  18. auth: {
  19. connect: () => import("./commands/handlers/auth/connect"),
  20. },
  21. debug: {
  22. agents: () => import("./commands/handlers/debug/agents"),
  23. },
  24. console: {
  25. login: () => import("./commands/handlers/console/login"),
  26. },
  27. mcp: {
  28. list: () => import("./commands/handlers/mcp/list"),
  29. add: () => import("./commands/handlers/mcp/add"),
  30. auth: () => import("./commands/handlers/mcp/auth"),
  31. logout: () => import("./commands/handlers/mcp/logout"),
  32. },
  33. migrate: () => import("./commands/handlers/migrate"),
  34. mini: () => import("./commands/handlers/mini"),
  35. run: () => import("./commands/handlers/run"),
  36. pair: () => import("./commands/handlers/pair"),
  37. service: {
  38. start: () => import("./commands/handlers/service/start"),
  39. restart: () => import("./commands/handlers/service/restart"),
  40. status: () => import("./commands/handlers/service/status"),
  41. stop: () => import("./commands/handlers/service/stop"),
  42. get: () => import("./commands/handlers/service/get"),
  43. set: () => import("./commands/handlers/service/set"),
  44. unset: () => import("./commands/handlers/service/unset"),
  45. },
  46. serve: () => import("./commands/handlers/serve"),
  47. })
  48. Effect.logInfo("cli starting", {
  49. version: InstallationVersion,
  50. channel: InstallationChannel,
  51. local: InstallationLocal,
  52. args: process.argv.slice(2),
  53. }).pipe(
  54. Effect.flatMap(() => Runtime.run(Commands, Handlers, { version: InstallationVersion })),
  55. Effect.annotateLogs({ role: "cli" }),
  56. Effect.provide(Config.layer),
  57. Effect.provide(Updater.layer),
  58. Effect.provide(AppNodeBuilder.build(LayerNode.group([Global.node, AppProcess.node, Npm.node]))),
  59. Effect.provide(Observability.layer),
  60. Effect.provide(NodeServices.layer),
  61. Effect.scoped,
  62. Effect.tap(() => Effect.sync(() => process.exit(process.exitCode ?? 0))),
  63. NodeRuntime.runMain,
  64. )