serve.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { Provider } from "../../provider/provider"
  2. import { Server } from "../../server/server"
  3. import { Share } from "../../share/share"
  4. import { bootstrap } from "../bootstrap"
  5. import { cmd } from "./cmd"
  6. export const ServeCommand = cmd({
  7. command: "serve",
  8. builder: (yargs) =>
  9. yargs
  10. .option("port", {
  11. alias: ["p"],
  12. type: "number",
  13. describe: "port to listen on",
  14. default: 4096,
  15. })
  16. .option("hostname", {
  17. alias: ["h"],
  18. type: "string",
  19. describe: "hostname to listen on",
  20. default: "127.0.0.1",
  21. }),
  22. describe: "starts a headless opencode server",
  23. handler: async (args) => {
  24. const cwd = process.cwd()
  25. await bootstrap({ cwd }, async () => {
  26. const providers = await Provider.list()
  27. if (Object.keys(providers).length === 0) {
  28. return "needs_provider"
  29. }
  30. const hostname = args.hostname
  31. const port = args.port
  32. await Share.init()
  33. const server = Server.listen({
  34. port,
  35. hostname,
  36. })
  37. console.log(
  38. `opencode server listening on http://${server.hostname}:${server.port}`,
  39. )
  40. await new Promise(() => {})
  41. server.stop()
  42. })
  43. },
  44. })