| | const ImportedPlugin = require("../utils/agents/imported"); |
| |
|
| | |
| | |
| | |
| | const CommunityHub = { |
| | importPrefix: "allm-community-id", |
| | apiBase: |
| | process.env.NODE_ENV === "development" |
| | ? "http://127.0.0.1:5001/anythingllm-hub/us-central1/external/v1" |
| | : "https://hub.external.anythingllm.com/v1", |
| | supportedStaticItemTypes: ["system-prompt", "agent-flow", "slash-command"], |
| |
|
| | |
| | |
| | |
| | |
| | |
| | validateImportId: function (importId) { |
| | if ( |
| | !importId || |
| | !importId.startsWith(this.importPrefix) || |
| | importId.split(":").length !== 3 |
| | ) |
| | return { entityType: null, entityId: null }; |
| | const [_, entityType, entityId] = importId.split(":"); |
| | if (!entityType || !entityId) return { entityType: null, entityId: null }; |
| | return { |
| | entityType: String(entityType).trim(), |
| | entityId: String(entityId).trim(), |
| | }; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | fetchExploreItems: async function () { |
| | return await fetch(`${this.apiBase}/explore`, { |
| | method: "GET", |
| | }) |
| | .then((response) => response.json()) |
| | .catch((error) => { |
| | console.error("Error fetching explore items:", error); |
| | return { |
| | agentSkills: { |
| | items: [], |
| | hasMore: false, |
| | totalCount: 0, |
| | }, |
| | systemPrompts: { |
| | items: [], |
| | hasMore: false, |
| | totalCount: 0, |
| | }, |
| | slashCommands: { |
| | items: [], |
| | hasMore: false, |
| | totalCount: 0, |
| | }, |
| | }; |
| | }); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | getBundleItem: async function (importId) { |
| | const { entityType, entityId } = this.validateImportId(importId); |
| | if (!entityType || !entityId) |
| | return { item: null, error: "Invalid import ID" }; |
| |
|
| | const { SystemSettings } = require("./systemSettings"); |
| | const { connectionKey } = await SystemSettings.hubSettings(); |
| | const { url, item, error } = await fetch( |
| | `${this.apiBase}/${entityType}/${entityId}/pull`, |
| | { |
| | method: "GET", |
| | headers: { |
| | "Content-Type": "application/json", |
| | ...(connectionKey |
| | ? { Authorization: `Bearer ${connectionKey}` } |
| | : {}), |
| | }, |
| | } |
| | ) |
| | .then((response) => response.json()) |
| | .catch((error) => { |
| | console.error( |
| | `Error fetching bundle item for import ID ${importId}:`, |
| | error |
| | ); |
| | return { url: null, item: null, error: error.message }; |
| | }); |
| | return { url, item, error }; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | applyItem: async function (item, options = {}) { |
| | if (!item) return { success: false, error: "Item is required" }; |
| |
|
| | if (item.itemType === "system-prompt") { |
| | if (!options?.workspaceSlug) |
| | return { success: false, error: "Workspace slug is required" }; |
| |
|
| | const { Workspace } = require("./workspace"); |
| | const workspace = await Workspace.get({ |
| | slug: String(options.workspaceSlug), |
| | }); |
| | if (!workspace) return { success: false, error: "Workspace not found" }; |
| | await Workspace.update(workspace.id, { openAiPrompt: item.prompt }); |
| | return { success: true, error: null }; |
| | } |
| |
|
| | if (item.itemType === "slash-command") { |
| | const { SlashCommandPresets } = require("./slashCommandsPresets"); |
| | await SlashCommandPresets.create(options?.currentUser?.id, { |
| | command: SlashCommandPresets.formatCommand(String(item.command)), |
| | prompt: String(item.prompt), |
| | description: String(item.description), |
| | }); |
| | return { success: true, error: null }; |
| | } |
| |
|
| | return { |
| | success: false, |
| | error: "Unsupported item type. Nothing to apply.", |
| | }; |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | importBundleItem: async function ({ url, item }) { |
| | if (item.itemType === "agent-skill") { |
| | const { success, error } = |
| | await ImportedPlugin.importCommunityItemFromUrl(url, item); |
| | return { success, error }; |
| | } |
| |
|
| | return { |
| | success: false, |
| | error: "Unsupported item type. Nothing to import.", |
| | }; |
| | }, |
| |
|
| | fetchUserItems: async function (connectionKey) { |
| | if (!connectionKey) return { createdByMe: {}, teamItems: [] }; |
| |
|
| | return await fetch(`${this.apiBase}/items`, { |
| | method: "GET", |
| | headers: { |
| | "Content-Type": "application/json", |
| | Authorization: `Bearer ${connectionKey}`, |
| | }, |
| | }) |
| | .then((response) => response.json()) |
| | .catch((error) => { |
| | console.error("Error fetching user items:", error); |
| | return { createdByMe: {}, teamItems: [] }; |
| | }); |
| | }, |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | createStaticItem: async function (itemType, data, connectionKey) { |
| | if (!connectionKey) |
| | return { success: false, error: "Connection key is required" }; |
| | if (!this.supportedStaticItemTypes.includes(itemType)) |
| | return { success: false, error: "Unsupported item type" }; |
| |
|
| | |
| | |
| |
|
| | return await fetch(`${this.apiBase}/${itemType}/create`, { |
| | method: "POST", |
| | headers: { |
| | "Content-Type": "application/json", |
| | Authorization: `Bearer ${connectionKey}`, |
| | }, |
| | body: JSON.stringify(data), |
| | }) |
| | .then((response) => response.json()) |
| | .then((result) => { |
| | if (!!result.error) throw new Error(result.error || "Unknown error"); |
| | return { success: true, error: null, itemId: result.item.id }; |
| | }) |
| | .catch((error) => { |
| | console.error(`Error creating ${itemType}:`, error); |
| | return { success: false, error: error.message }; |
| | }); |
| | }, |
| | }; |
| |
|
| | module.exports = { CommunityHub }; |
| |
|