49 lines
1.8 KiB
TypeScript
Executable file
49 lines
1.8 KiB
TypeScript
Executable file
#!/usr/bin/env bun
|
|
|
|
import * as NodeRuntime from "@effect/platform-node/NodeRuntime"
|
|
import * as NodeServices from "@effect/platform-node/NodeServices"
|
|
import { AccountV2 } from "@opencode-ai/core/account"
|
|
import { AgentV2 } from "@opencode-ai/core/agent"
|
|
import { Catalog } from "@opencode-ai/core/catalog"
|
|
import { Config } from "@opencode-ai/core/config"
|
|
import { EventV2 } from "@opencode-ai/core/event"
|
|
import { Location } from "@opencode-ai/core/location"
|
|
import { Npm } from "@opencode-ai/core/npm"
|
|
import { PluginV2 } from "@opencode-ai/core/plugin"
|
|
import { PluginBoot } from "@opencode-ai/core/plugin/boot"
|
|
import { Policy } from "@opencode-ai/core/policy"
|
|
import { AbsolutePath } from "@opencode-ai/core/schema"
|
|
import * as Effect from "effect/Effect"
|
|
import * as Layer from "effect/Layer"
|
|
import * as Command from "effect/unstable/cli/Command"
|
|
import { DebugCommand } from "./debug"
|
|
|
|
const cli = Command.make("opencode", {}, () => Effect.void).pipe(
|
|
Command.withDescription("OpenCode command line interface"),
|
|
Command.withSubcommands([DebugCommand]),
|
|
)
|
|
|
|
const locationLayer = Location.defaultLayer({
|
|
directory: AbsolutePath.make(process.cwd()),
|
|
})
|
|
|
|
const policyLayer = Policy.defaultLayer.pipe(Layer.provideMerge(locationLayer))
|
|
const pluginLayer = PluginV2.defaultLayer
|
|
const eventLayer = EventV2.defaultLayer
|
|
|
|
const layer = PluginBoot.layer.pipe(
|
|
Layer.provideMerge(
|
|
Layer.mergeAll(
|
|
NodeServices.layer,
|
|
Catalog.layer.pipe(Layer.provideMerge(Layer.mergeAll(eventLayer, pluginLayer, policyLayer))),
|
|
eventLayer,
|
|
pluginLayer,
|
|
AccountV2.defaultLayer,
|
|
AgentV2.defaultLayer,
|
|
Config.defaultLayer.pipe(Layer.provideMerge(policyLayer)),
|
|
Npm.defaultLayer,
|
|
),
|
|
),
|
|
)
|
|
|
|
Command.run(cli, { version: "local" }).pipe(Effect.provide(layer), Effect.scoped, NodeRuntime.runMain)
|