diff --git a/apps/rowboat/app/lib/agent-tools.ts b/apps/rowboat/app/lib/agent-tools.ts index b4b82ac0..05f8d31e 100644 --- a/apps/rowboat/app/lib/agent-tools.ts +++ b/apps/rowboat/app/lib/agent-tools.ts @@ -541,9 +541,12 @@ export function createTools( } else if (config.isComposio) { tools[toolName] = createComposioTool(logger, usageTracker, config, projectId); toolLogger.log(`✓ created composio tool: ${toolName}`); - } else { + } else if (config.isWebhook) { tools[toolName] = createWebhookTool(logger, usageTracker, config, projectId); toolLogger.log(`✓ created webhook tool: ${toolName} (fallback)`); + } else { // this is for placeholder tools + tools[toolName] = createMockTool(logger, usageTracker, config); + toolLogger.log(`✓ created mock tool: ${toolName}`); } } diff --git a/apps/rowboat/app/lib/feature_flags.ts b/apps/rowboat/app/lib/feature_flags.ts index 5ca8d502..bd3fa6a0 100644 --- a/apps/rowboat/app/lib/feature_flags.ts +++ b/apps/rowboat/app/lib/feature_flags.ts @@ -5,7 +5,7 @@ export const USE_CHAT_WIDGET = process.env.USE_CHAT_WIDGET === 'true'; export const USE_AUTH = process.env.USE_AUTH === 'true'; export const USE_RAG_S3_UPLOADS = process.env.USE_RAG_S3_UPLOADS === 'true'; export const USE_GEMINI_FILE_PARSING = process.env.USE_GEMINI_FILE_PARSING === 'true'; -export const USE_BILLING = process.env.USE_BILLING === 'true'; +export const USE_BILLING = process.env.NEXT_PUBLIC_USE_BILLING === 'true' || process.env.USE_BILLING === 'true'; export const USE_COMPOSIO_TOOLS = process.env.USE_COMPOSIO_TOOLS === 'true'; export const USE_KLAVIS_TOOLS = process.env.USE_KLAVIS_TOOLS === 'true'; diff --git a/apps/rowboat/app/lib/types/workflow_types.ts b/apps/rowboat/app/lib/types/workflow_types.ts index 4432b426..9c75e4c1 100644 --- a/apps/rowboat/app/lib/types/workflow_types.ts +++ b/apps/rowboat/app/lib/types/workflow_types.ts @@ -76,6 +76,7 @@ export const WorkflowTool = z.object({ mcpServerName: z.string().optional(), isComposio: z.boolean().optional(), // whether this is a Composio tool isLibrary: z.boolean().default(false).optional(), // whether this is a library tool + isWebhook: z.boolean().optional(), // whether this is a webhook tool composioData: z.object({ slug: z.string(), // the slug for the Composio tool e.g. "GITHUB_CREATE_AN_ISSUE" noAuth: z.boolean(), // whether the tool requires no authentication diff --git a/apps/rowboat/app/projects/[projectId]/entities/tool_config.tsx b/apps/rowboat/app/projects/[projectId]/entities/tool_config.tsx index a3822d93..dbc7685d 100644 --- a/apps/rowboat/app/projects/[projectId]/entities/tool_config.tsx +++ b/apps/rowboat/app/projects/[projectId]/entities/tool_config.tsx @@ -175,7 +175,6 @@ export function ToolConfig({ const projectId = params.projectId as string; const [selectedParams, setSelectedParams] = useState(new Set([])); const isReadOnly = tool.isMcp || tool.isComposio; - const isWebhookTool = !tool.isMcp && !tool.isComposio; const [nameError, setNameError] = useState(null); const [showSavedBanner, setShowSavedBanner] = useState(false); const [localToolName, setLocalToolName] = useState(tool.name); @@ -366,7 +365,7 @@ export function ToolConfig({ )} {/* Tool Type Section */} -
+ {!tool.isLibrary &&
{tool.isMcp ? ( @@ -381,40 +380,39 @@ export function ToolConfig({

How this tool runs

- {tool.isMcp ? ( -
-

This tool is powered by the {tool.mcpServerName} MCP server.

-

- MCP (Model Context Protocol) tools are external services that provide additional capabilities to your agent. -

+ {tool.isMcp &&
+

This tool is powered by the {tool.mcpServerName} MCP server.

+

+ MCP (Model Context Protocol) tools are external services that provide additional capabilities to your agent. +

+
} + { tool.isComposio &&
+
+

This tool is powered by Composio

+ {tool.composioData?.toolkitName && ( + + {tool.composioData.toolkitName} + + )}
- ) : tool.isComposio ? ( -
-
-

This tool is powered by Composio

- {tool.composioData?.toolkitName && ( - - {tool.composioData.toolkitName} - - )} -
-

- Composio provides pre-built integrations with popular services and APIs. -

+

+ Composio provides pre-built integrations with popular services and APIs. +

+
} + { tool.isWebhook &&
+
+

This tool is invoked using the webhook configured in project settings

- ) : ( -
-
-

This tool is invoked using the webhook configured in project settings

-
-

- Webhook tools make HTTP requests to your configured endpoint when called by the agent. -

-
- )} +

+ Webhook tools make HTTP requests to your configured endpoint when called by the agent. +

+
} + { !tool.isMcp && !tool.isComposio && !tool.isWebhook &&
+

This is a placeholder tool that should be mocked.

+
}
-
+
} {/* Identity Section */} (null); const [isToolsPanelOpen, setIsToolsPanelOpen] = useState(false); + const useBilling = process.env.NEXT_PUBLIC_USE_BILLING === "true"; const handleTabChange = (key: Key) => { setActiveTab(key.toString()); @@ -84,14 +85,14 @@ export function ToolsConfig({ />
- + {!useBilling &&
-
+
} {/* Tools Panel */}