openAgent
gitlabThe open source UNIVERSAL agent.
clone
https://gitlab.com/bitzzdev/openAgent.gitAIagentautomationopen-sourceuniversal-agent
export * as PluginInternal from "./internal"import { makeLocationNode } from "../effect/app-node"import { httpClient } from "../effect/app-node-platform"import type { PluginContext } from "@opencode-ai/plugin/v2/effect"import { Effect, Layer, Scope } from "effect"import { AgentV2 } from "../agent"import { Catalog } from "../catalog"import { CommandV2 } from "../command"import { Config } from "../config"import { ConfigAgentPlugin } from "../config/plugin/agent"import { ConfigCommandPlugin } from "../config/plugin/command"import { ConfigExternalPlugin } from "../config/plugin/external"import { ConfigProviderPlugin } from "../config/plugin/provider"import { ConfigReferencePlugin } from "../config/plugin/reference"import { ConfigSkillPlugin } from "../config/plugin/skill"import { EventV2 } from "../event"import { FileSystem } from "../filesystem"import { FSUtil } from "../fs-util"import { Global } from "../global"import { Integration } from "../integration"import { Location } from "../location"import { ModelsDev } from "../models-dev"import { Npm } from "../npm"import { PluginV2 } from "../plugin"import { Reference } from "../reference"import { SkillV2 } from "../skill"import { State } from "../state"import { FetchHttpClient, HttpClient } from "effect/unstable/http"import { AgentPlugin } from "./agent"import { CommandPlugin } from "./command"import { ModelsDevPlugin } from "./models-dev"import { ProviderPlugins } from "./provider"import { SkillPlugin } from "./skill"import { VariantPlugin } from "./variant"export type Requirements =| AgentV2.Service| Catalog.Service| CommandV2.Service| Config.Service| EventV2.Service| FileSystem.Service| FSUtil.Service| Global.Service| HttpClient.HttpClient| Integration.Service| Location.Service| ModelsDev.Service| Npm.Service| Reference.Service| SkillV2.Serviceexport interface Plugin<R = never> {readonly id: stringreadonly effect: (context: PluginContext) => Effect.Effect<void, never, R | Scope.Scope>}export function define<R>(plugin: Plugin<R>) {return plugin}const layer = Layer.effectDiscard(Effect.gen(function* () {const catalog = yield* Catalog.Serviceconst commands = yield* CommandV2.Serviceconst plugin = yield* PluginV2.Serviceconst integration = yield* Integration.Serviceconst agents = yield* AgentV2.Serviceconst config = yield* Config.Serviceconst location = yield* Location.Serviceconst modelsDev = yield* ModelsDev.Serviceconst npm = yield* Npm.Serviceconst events = yield* EventV2.Serviceconst fs = yield* FSUtil.Serviceconst filesystem = yield* FileSystem.Serviceconst global = yield* Global.Serviceconst http = yield* HttpClient.HttpClientconst skill = yield* SkillV2.Serviceconst reference = yield* Reference.Serviceconst add = <R>(input: Plugin<R>) => {const loaded = {id: input.id,effect: (context: PluginContext) =>input.effect(context).pipe(Effect.provideService(Catalog.Service, catalog),Effect.provideService(CommandV2.Service, commands),Effect.provideService(Integration.Service, integration),Effect.provideService(AgentV2.Service, agents),Effect.provideService(Config.Service, config),Effect.provideService(Location.Service, location),Effect.provideService(ModelsDev.Service, modelsDev),Effect.provideService(Npm.Service, npm),Effect.provideService(EventV2.Service, events),Effect.provideService(FSUtil.Service, fs),Effect.provideService(FileSystem.Service, filesystem),Effect.provideService(Global.Service, global),Effect.provideService(HttpClient.HttpClient, http),Effect.provideService(SkillV2.Service, skill),Effect.provideService(Reference.Service, reference),),}return plugin.add(PluginV2.ID.make(loaded.id), loaded.effect)}yield* State.batch(Effect.gen(function* () {yield* add(ConfigReferencePlugin.Plugin)yield* add(AgentPlugin.Plugin)yield* add(CommandPlugin.Plugin)yield* add(SkillPlugin.Plugin)yield* add(ModelsDevPlugin)yield* add(ConfigAgentPlugin.Plugin)yield* add(ConfigCommandPlugin.Plugin)yield* add(ConfigSkillPlugin.Plugin)for (const item of ProviderPlugins) yield* add(item)yield* add(ConfigExternalPlugin.Plugin)yield* add(ConfigProviderPlugin.Plugin)yield* add(VariantPlugin.Plugin)}),).pipe(Effect.withSpan("PluginInternal.boot"), Effect.forkScoped({ startImmediately: true }))}),)export const locationLayer = layer.pipe(Layer.provideMerge(Config.locationLayer),Layer.provideMerge(FetchHttpClient.layer),)export const node = makeLocationNode({name: "plugin-internal",layer,deps: [Catalog.node,CommandV2.node,PluginV2.node,Integration.node,AgentV2.node,Config.node,Location.node,ModelsDev.node,Npm.node,EventV2.node,FSUtil.node,FileSystem.node,Global.node,httpClient,SkillV2.node,Reference.node,],})