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

Function loadDirectorySnapshot

packages/opencode/src/acp/service.ts:720–775  ·  view source on GitHub ↗
(sdk: OpencodeClient, directory: string)

Source from the content-addressed store, hash-verified

718}
719
720async function loadDirectorySnapshot(sdk: OpencodeClient, directory: string) {
721 return ACPProfile.measure("acp.directory.load", async () => {
722 const [providersResponse, agentsResponse, commandsResponse, skillsResponse, configResponse] = await Promise.all([
723 ACPProfile.measure("acp.directory.provider.list", () =>
724 sdk.config.providers({ directory }, { throwOnError: true }),
725 ),
726 ACPProfile.measure("acp.directory.mode.defaultAgent.load", () =>
727 sdk.app.agents({ directory }, { throwOnError: true }),
728 ),
729 ACPProfile.measure("acp.directory.command.list", () => sdk.command.list({ directory }, { throwOnError: true })),
730 ACPProfile.measure("acp.directory.skill.list", () => sdk.app.skills({ directory }, { throwOnError: true })),
731 ACPProfile.measure("acp.directory.defaultModel.config", () =>
732 sdk.config.get({ directory }, { throwOnError: true }).catch(() => undefined),
733 ),
734 ])
735 const providersData = providersResponse.data!
736 const agents = agentsResponse.data!
737 const commandsData = commandsResponse.data!
738 const skills = skillsResponse.data!
739 const providers = Object.fromEntries(providersData.providers.map((provider) => [provider.id, provider])) as Record<
740 ProviderV2.ID,
741 Provider.Info
742 >
743 const defaultModelStarted = performance.now()
744 const defaultModel = defaultModelFromConfig(configResponse?.data?.model, providers)
745 ACPProfile.duration("acp.directory.defaultModel.resolve", defaultModelStarted, { configured: !!defaultModel })
746 const modes = agents
747 .filter((agent) => agent.mode !== "subagent" && agent.hidden !== true)
748 .map((agent) => ({
749 id: agent.name,
750 name: agent.name,
751 ...(agent.description ? { description: agent.description } : {}),
752 }))
753 const commands = [
754 ...commandsData,
755 ...skills
756 .filter((skill) => !commandsData.some((command) => command.name === skill.name))
757 .map((skill) => ({
758 name: skill.name,
759 description: skill.description,
760 source: "skill" as const,
761 template: skill.content,
762 hints: [],
763 })),
764 ] as Command.Info[]
765
766 return Directory.build({
767 directory,
768 providers,
769 modes,
770 defaultModeID: agents.find((agent) => agent.mode === "primary" && agent.hidden !== true)?.name ?? "build",
771 commands: commands.toSorted((a, b) => a.name.localeCompare(b.name)),
772 ...(defaultModel ? { defaultModel } : {}),
773 })
774 })
775}
776
777function defaultModelFromConfig(

Callers 1

makeDirectoryServiceFunction · 0.85

Calls 8

defaultModelFromConfigFunction · 0.85
skillsMethod · 0.80
listMethod · 0.65
getMethod · 0.65
findMethod · 0.65
allMethod · 0.45
providersMethod · 0.45
agentsMethod · 0.45

Tested by

no test coverage detected