MCPcopy Create free account
hub / github.com/anomalyco/opencode / build

Function build

packages/opencode/src/acp/directory.ts:62–105  ·  view source on GitHub ↗
(input: {
  readonly directory: string
  readonly providers: Record<ProviderV2.ID, Provider.Info>
  readonly modes: readonly ModeOption[]
  readonly defaultModeID: string
  readonly commands: readonly Command.Info[]
  readonly defaultModel?: DefaultModel
})

Source from the content-addressed store, hash-verified

60export const variants = (snapshot: Snapshot, model: DefaultModel) => snapshot.variantsByModel[modelKey(model)]
61
62export const build = (input: {
63 readonly directory: string
64 readonly providers: Record<ProviderV2.ID, Provider.Info>
65 readonly modes: readonly ModeOption[]
66 readonly defaultModeID: string
67 readonly commands: readonly Command.Info[]
68 readonly defaultModel?: DefaultModel
69}): Snapshot => {
70 const modelOptions = Provider.sort(
71 Object.values(input.providers).flatMap((provider) =>
72 Object.values(provider.models).map((model) => ({
73 id: model.id,
74 providerID: provider.id,
75 providerName: provider.name,
76 modelID: model.id,
77 modelName: model.name,
78 })),
79 ),
80 ).map((model) => ({
81 providerID: model.providerID,
82 providerName: model.providerName,
83 modelID: model.modelID,
84 modelName: model.modelName,
85 }))
86
87 return {
88 directory: input.directory,
89 providers: input.providers,
90 modelOptions,
91 variantsByModel: Object.fromEntries(
92 Object.values(input.providers).flatMap((provider) =>
93 Object.values(provider.models).flatMap((model) =>
94 model.variants ? [[modelKey({ providerID: provider.id, modelID: model.id }), model.variants]] : [],
95 ),
96 ),
97 ),
98 availableModes: input.modes,
99 defaultModeID: input.modes.some((mode) => mode.id === input.defaultModeID)
100 ? input.defaultModeID
101 : (input.modes[0]?.id ?? input.defaultModeID),
102 availableCommands: input.commands,
103 ...(input.defaultModel ? { defaultModel: input.defaultModel } : {}),
104 }
105}
106
107export const loaderLayer = Layer.effect(
108 Loader,

Callers 1

directory.tsFile · 0.70

Calls 2

modelKeyFunction · 0.70
valuesMethod · 0.45

Tested by

no test coverage detected