From b557a289fe8e0e3c8e481412a1c4691ae596b2fa Mon Sep 17 00:00:00 2001
From: Timothy Carambat <rambat1010@gmail.com>
Date: Fri, 13 Sep 2024 14:35:10 -0700
Subject: [PATCH] Support `@agent` custom skills (#2280)

* Support `@agent` custom skills

* move import
---
 server/utils/agents/ephemeral.js | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/server/utils/agents/ephemeral.js b/server/utils/agents/ephemeral.js
index a523780b4..7b05b4adc 100644
--- a/server/utils/agents/ephemeral.js
+++ b/server/utils/agents/ephemeral.js
@@ -1,5 +1,6 @@
 const AIbitat = require("./aibitat");
 const AgentPlugins = require("./aibitat/plugins");
+const ImportedPlugin = require("./imported");
 const { httpSocket } = require("./aibitat/plugins/http-socket.js");
 const { WorkspaceChats } = require("../../models/workspaceChats");
 const { safeJsonParse } = require("../http");
@@ -160,6 +161,27 @@ class EphemeralAgentHandler extends AgentHandler {
         continue;
       }
 
+      // Load imported plugin. This is marked by `@@` in the array of functions to load.
+      // and is the @@hubID of the plugin.
+      if (name.startsWith("@@")) {
+        const hubId = name.replace("@@", "");
+        const valid = ImportedPlugin.validateImportedPluginHandler(hubId);
+        if (!valid) {
+          this.log(
+            `Imported plugin by hubId ${hubId} not found in plugin directory. Skipping inclusion to agent cluster.`
+          );
+          continue;
+        }
+
+        const plugin = ImportedPlugin.loadPluginByHubId(hubId);
+        const callOpts = plugin.parseCallOptions();
+        this.aibitat.use(plugin.plugin(callOpts));
+        this.log(
+          `Attached ${plugin.name} (${hubId}) imported plugin to Agent cluster`
+        );
+        continue;
+      }
+
       // Load single-stage plugin.
       if (!AgentPlugins.hasOwnProperty(name)) {
         this.log(
@@ -192,6 +214,7 @@ class EphemeralAgentHandler extends AgentHandler {
       AgentPlugins.docSummarizer.name,
       AgentPlugins.webScraping.name,
       ...(await agentSkillsFromSystemSettings()),
+      ...(await ImportedPlugin.activeImportedPlugins()),
     ];
   }
 
-- 
GitLab