Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dc9053fa1d | |||
| 5f917f4121 | |||
| 09b62adb93 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+74
-32
@@ -1,10 +1,10 @@
|
||||
"""Stage 8: Publisher — Create branch, commit, open PR on Gitea."""
|
||||
import json
|
||||
import subprocess
|
||||
import os
|
||||
import tempfile
|
||||
import shutil
|
||||
import datetime
|
||||
import requests
|
||||
|
||||
|
||||
def publish_skill(review_result, config):
|
||||
"""
|
||||
@@ -33,23 +33,20 @@ def publish_skill(review_result, config):
|
||||
branch_name = f"skill/{skill_name}-{ts}"
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
# Clone repo
|
||||
repo_dir = os.path.join(tmpdir, "agent-skills")
|
||||
|
||||
# Clone repo
|
||||
result = subprocess.run(
|
||||
["git", "clone", "--branch", "main", "--single-branch", clone_url, repo_dir],
|
||||
["git", "clone", "--branch", "main", "--depth", "1", clone_url, repo_dir],
|
||||
capture_output=True, text=True, timeout=30
|
||||
)
|
||||
if result.returncode != 0:
|
||||
# Try without --branch (might not exist yet)
|
||||
result = subprocess.run(
|
||||
["git", "clone", clone_url, repo_dir],
|
||||
["git", "clone", "--depth", "1", clone_url, repo_dir],
|
||||
capture_output=True, text=True, timeout=30
|
||||
)
|
||||
if result.returncode != 0:
|
||||
return {
|
||||
"status": "CLONE_ERROR",
|
||||
"error": result.stderr[:500],
|
||||
}
|
||||
return {"status": "CLONE_ERROR", "error": result.stderr[:500]}
|
||||
|
||||
# Configure git
|
||||
subprocess.run(["git", "config", "user.email", "hermes@agent.local"], cwd=repo_dir)
|
||||
@@ -59,32 +56,78 @@ def publish_skill(review_result, config):
|
||||
skill_dir = os.path.join(repo_dir, "skills", skill_name)
|
||||
os.makedirs(skill_dir, exist_ok=True)
|
||||
|
||||
# Write files
|
||||
# Write skill files
|
||||
for filename, content in files.items():
|
||||
filepath = os.path.join(skill_dir, filename)
|
||||
with open(filepath, 'w') as f:
|
||||
with open(filepath, "w") as f:
|
||||
f.write(content)
|
||||
|
||||
# Add and commit
|
||||
subprocess.run(["git", "add", "."], cwd=repo_dir, capture_output=True)
|
||||
subprocess.run(
|
||||
["git", "commit", "-m", f"Add Skill: {skill_name}\n\nExtracted from: {gen.get('metadata', {}).get('source_repo', 'unknown')}\nScore: {gen.get('metadata', {}).get('score', 0)}"],
|
||||
cwd=repo_dir, capture_output=True
|
||||
# Verify files were written
|
||||
written_files = []
|
||||
for root, dirs, fnames in os.walk(skill_dir):
|
||||
for fn in fnames:
|
||||
written_files.append(os.path.join(root, fn))
|
||||
|
||||
if not written_files:
|
||||
return {"status": "EMPTY_SKILL", "reason": "No files written to skill directory"}
|
||||
|
||||
# Stage and commit
|
||||
add_result = subprocess.run(
|
||||
["git", "add", "skills/"], cwd=repo_dir, capture_output=True, text=True
|
||||
)
|
||||
|
||||
# Check if there are actually staged changes
|
||||
status_result = subprocess.run(
|
||||
["git", "diff", "--cached", "--name-only"],
|
||||
cwd=repo_dir, capture_output=True, text=True
|
||||
)
|
||||
staged_files = status_result.stdout.strip().split("\n") if status_result.stdout.strip() else []
|
||||
|
||||
if not staged_files:
|
||||
# Nothing to commit — files might already exist. Force add.
|
||||
subprocess.run(["git", "add", "-f", "skills/"], cwd=repo_dir, capture_output=True, text=True)
|
||||
status_result = subprocess.run(
|
||||
["git", "diff", "--cached", "--name-only"],
|
||||
cwd=repo_dir, capture_output=True, text=True
|
||||
)
|
||||
staged_files = status_result.stdout.strip().split("\n") if status_result.stdout.strip() else []
|
||||
|
||||
if not staged_files:
|
||||
return {
|
||||
"status": "NO_CHANGES",
|
||||
"reason": f"No new files to commit for {skill_name}. Files already exist in repo.",
|
||||
}
|
||||
|
||||
commit_result = subprocess.run(
|
||||
[
|
||||
"git", "commit", "-m",
|
||||
f"Add Skill: {skill_name}\n\nExtracted from: {gen.get('metadata', {}).get('source_repo', 'unknown')}\nScore: {gen.get('metadata', {}).get('score', 0)}"
|
||||
],
|
||||
cwd=repo_dir, capture_output=True, text=True
|
||||
)
|
||||
|
||||
if commit_result.returncode != 0:
|
||||
return {
|
||||
"status": "COMMIT_ERROR",
|
||||
"error": commit_result.stderr[:500],
|
||||
}
|
||||
|
||||
# Checkout new branch
|
||||
checkout_result = subprocess.run(
|
||||
["git", "checkout", "-b", branch_name],
|
||||
cwd=repo_dir, capture_output=True, text=True
|
||||
)
|
||||
if checkout_result.returncode != 0:
|
||||
return {
|
||||
"status": "CHECKOUT_ERROR",
|
||||
"error": checkout_result.stderr[:500],
|
||||
}
|
||||
|
||||
# Push branch
|
||||
auth_url = clone_url.replace("http://", f"http://tonyjbala:{token}@")
|
||||
push_result = subprocess.run(
|
||||
["git", "push", "-u", auth_url, f"main:{branch_name}"],
|
||||
capture_output=True, text=True, timeout=30
|
||||
)
|
||||
|
||||
if push_result.returncode != 0:
|
||||
# Try creating from current branch
|
||||
subprocess.run(["git", "checkout", "-b", branch_name], cwd=repo_dir, capture_output=True)
|
||||
push_result = subprocess.run(
|
||||
["git", "push", "-u", auth_url, branch_name],
|
||||
capture_output=True, text=True, timeout=30
|
||||
cwd=repo_dir, capture_output=True, text=True, timeout=30
|
||||
)
|
||||
|
||||
if push_result.returncode != 0:
|
||||
@@ -97,19 +140,19 @@ def publish_skill(review_result, config):
|
||||
pr_url = f"{base_url}/api/v1/repos/{owner}/{repo_name}/pulls"
|
||||
pr_payload = {
|
||||
"title": f"Add Skill: {skill_name}",
|
||||
"body": f"## Skill: {skill_name}\n\n"
|
||||
"body": (
|
||||
f"## Skill: {skill_name}\n\n"
|
||||
f"**Goal:** {gen.get('metadata', {}).get('goal', '')}\n"
|
||||
f"**Source:** {gen.get('metadata', {}).get('source_repo', '')}\n"
|
||||
f"**Score:** {gen.get('metadata', {}).get('score', 0)}\n"
|
||||
f"**Confidence:** {gen.get('metadata', {}).get('confidence', 0)}\n"
|
||||
f"**Review:** {review_result.get('reason', '')}\n\n"
|
||||
f"**Confidence:** {gen.get('metadata', {}).get('confidence', 0)}\n\n"
|
||||
f"### Files\n"
|
||||
+ "".join(f"- `{f}`\n" for f in files.keys()),
|
||||
+ "".join(f"- `{f}`\n" for f in files.keys())
|
||||
),
|
||||
"head": branch_name,
|
||||
"base": "main",
|
||||
}
|
||||
|
||||
import requests
|
||||
headers = {
|
||||
"Authorization": f"token {token}",
|
||||
"Content-Type": "application/json",
|
||||
@@ -127,7 +170,6 @@ def publish_skill(review_result, config):
|
||||
"message": f"PR opened: {pr_data.get('html_url', '')}",
|
||||
}
|
||||
elif resp.status_code == 409:
|
||||
# PR already exists for this branch
|
||||
return {
|
||||
"status": "PUBLISHED",
|
||||
"skill_name": skill_name,
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"run_id": "20260805-053642",
|
||||
"started_at": "2026-08-05T05:36:42.627714",
|
||||
"stages": {
|
||||
"scout": {
|
||||
"count": 2
|
||||
},
|
||||
"filter": {
|
||||
"kept": 2,
|
||||
"rejected": 0
|
||||
}
|
||||
},
|
||||
"results": {
|
||||
"extracted": 0,
|
||||
"scored": 0,
|
||||
"generated": 0,
|
||||
"reviewed": 0,
|
||||
"published": 0
|
||||
},
|
||||
"ended_at": "2026-08-05T05:36:49.213968"
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"run_id": "20260805-053718",
|
||||
"started_at": "2026-08-05T05:37:18.169016",
|
||||
"stages": {
|
||||
"scout": {
|
||||
"count": 2
|
||||
},
|
||||
"filter": {
|
||||
"kept": 2,
|
||||
"rejected": 0
|
||||
}
|
||||
},
|
||||
"results": {
|
||||
"extracted": 0,
|
||||
"scored": 0,
|
||||
"generated": 0,
|
||||
"reviewed": 0,
|
||||
"published": 0
|
||||
},
|
||||
"ended_at": "2026-08-05T05:38:25.179277"
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"run_id": "20260805-054839",
|
||||
"started_at": "2026-08-05T05:48:39.344784",
|
||||
"stages": {
|
||||
"scout": {
|
||||
"count": 5
|
||||
},
|
||||
"filter": {
|
||||
"kept": 5,
|
||||
"rejected": 0
|
||||
}
|
||||
},
|
||||
"results": {
|
||||
"extracted": 0,
|
||||
"scored": 0,
|
||||
"generated": 0,
|
||||
"reviewed": 0,
|
||||
"published": 0
|
||||
},
|
||||
"ended_at": "2026-08-05T05:48:50.960254"
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"run_id": "20260805-054930",
|
||||
"started_at": "2026-08-05T05:49:30.857560",
|
||||
"stages": {
|
||||
"scout": {
|
||||
"count": 5
|
||||
},
|
||||
"filter": {
|
||||
"kept": 5,
|
||||
"rejected": 0
|
||||
}
|
||||
},
|
||||
"results": {
|
||||
"extracted": 0,
|
||||
"scored": 0,
|
||||
"generated": 0,
|
||||
"reviewed": 0,
|
||||
"published": 0
|
||||
},
|
||||
"ended_at": "2026-08-05T05:49:45.411491"
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"run_id": "20260805-055041",
|
||||
"started_at": "2026-08-05T05:50:41.871225",
|
||||
"stages": {
|
||||
"scout": {
|
||||
"count": 5
|
||||
},
|
||||
"filter": {
|
||||
"kept": 5,
|
||||
"rejected": 0
|
||||
}
|
||||
},
|
||||
"results": {
|
||||
"extracted": 0,
|
||||
"scored": 0,
|
||||
"generated": 0,
|
||||
"reviewed": 0,
|
||||
"published": 0
|
||||
},
|
||||
"ended_at": "2026-08-05T05:50:57.051862"
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
name: code-review-agent-workflow
|
||||
version: 1.0.0
|
||||
description: Automate the code review process using a multi-step workflow with human-in-the-loop
|
||||
approval.
|
||||
inputs:
|
||||
- Sample diff of code changes (str)
|
||||
- Repo context (dict)
|
||||
steps:
|
||||
- 'Step 1: Build the graph for the code review agent using `build_graph()` from `agentkit.workflow.code_review.graph`'
|
||||
- 'Step 2: Invoke the graph with initial parameters including sample diff, repo context,
|
||||
user ID, and other metadata'
|
||||
- 'Step 3: The graph processes the input through a series of steps, generating messages
|
||||
and issues as it progresses'
|
||||
outputs:
|
||||
- Final result containing processed messages and issues (dict)
|
||||
tags: []
|
||||
metadata:
|
||||
source_repo: https://github.com/itszhaoziyan-n/AgentKit.git
|
||||
extracted_at: ''
|
||||
confidence: 0.95
|
||||
---
|
||||
|
||||
# code-review-agent-workflow
|
||||
|
||||
Automate the code review process using a multi-step workflow with human-in-the-loop approval.
|
||||
|
||||
## Setup
|
||||
|
||||
**Dependencies:**
|
||||
|
||||
```text
|
||||
pip install langgraph>=0.3 langchain-core>=0.3 langchain-anthropic>=0.3 langfuse>=2.0 mcp[server]>=1.24,<2.0 langchain-mcp-adapters>=0.1 tenacity>=9.0 fastapi>=0.115 uvicorn[standard]>=0.32 psycopg[binary]>=3.1 langgraph-checkpoint-postgres>=2.0 httpx>=0.27 python-dotenv>=1.0 redis>=5.0
|
||||
```
|
||||
|
||||
**Setup steps:**
|
||||
|
||||
1. cp .env.example .env
|
||||
1. docker compose up -d
|
||||
1. pip install -e '.[dev]'
|
||||
|
||||
## Key Files
|
||||
|
||||
- `agentkit/workflow/code_review/graph.py - Contains the `build_graph` function and graph invocation logic.`
|
||||
- `examples/run_code_review.py - Example script demonstrating how to run the code review agent.`
|
||||
|
||||
## Steps
|
||||
|
||||
1. Step 1: Build the graph for the code review agent using `build_graph()` from `agentkit.workflow.code_review.graph`
|
||||
2. Step 2: Invoke the graph with initial parameters including sample diff, repo context, user ID, and other metadata
|
||||
3. Step 3: The graph processes the input through a series of steps, generating messages and issues as it progresses
|
||||
|
||||
## Implementation Details
|
||||
|
||||
```python
|
||||
graph = build_graph()
|
||||
thread_id = str(uuid.uuid4())
|
||||
result = graph.invoke(...)
|
||||
```
|
||||
|
||||
## Inputs
|
||||
|
||||
- Sample diff of code changes (str)
|
||||
- Repo context (dict)
|
||||
|
||||
## Outputs
|
||||
|
||||
- Final result containing processed messages and issues (dict)
|
||||
|
||||
## Failure Modes
|
||||
|
||||
- Specific failure scenario with mitigation: If the `build_graph()` function fails to initialize properly, ensure all required dependencies are correctly installed.
|
||||
|
||||
## Source
|
||||
|
||||
Extracted from: [https://github.com/itszhaoziyan-n/AgentKit.git](https://github.com/itszhaoziyan-n/AgentKit.git)
|
||||
Confidence: 0.95
|
||||
@@ -0,0 +1,6 @@
|
||||
# Commands: code-review-agent-workflow
|
||||
|
||||
## Available Commands
|
||||
|
||||
- `/skill code-review-agent-workflow` — Load this skill
|
||||
- `/run code-review-agent-workflow` — Execute workflow
|
||||
@@ -0,0 +1,10 @@
|
||||
# Examples: code-review-agent-workflow
|
||||
|
||||
## Usage Example
|
||||
|
||||
```python
|
||||
# How to use this skill
|
||||
# Inputs: Sample diff of code changes (str), Repo context (dict)
|
||||
# Process: Step 1: Build the graph for the code review agent using `build_graph()` from `agentkit.workflow.code_review.graph` → Step 2: Invoke the graph with initial parameters including sample diff, repo context, user ID, and other metadata → Step 3: The graph processes the input through a series of steps, generating messages and issues as it progresses
|
||||
# Outputs: Final result containing processed messages and issues (dict)
|
||||
```
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "code-review-agent-workflow",
|
||||
"version": "1.0.0",
|
||||
"goal": "Automate the code review process using a multi-step workflow with human-in-the-loop approval.",
|
||||
"inputs": [
|
||||
"Sample diff of code changes (str)",
|
||||
"Repo context (dict)"
|
||||
],
|
||||
"steps": [
|
||||
"Step 1: Build the graph for the code review agent using `build_graph()` from `agentkit.workflow.code_review.graph`",
|
||||
"Step 2: Invoke the graph with initial parameters including sample diff, repo context, user ID, and other metadata",
|
||||
"Step 3: The graph processes the input through a series of steps, generating messages and issues as it progresses"
|
||||
],
|
||||
"outputs": [
|
||||
"Final result containing processed messages and issues (dict)"
|
||||
],
|
||||
"failure_modes": [
|
||||
"Specific failure scenario with mitigation: If the `build_graph()` function fails to initialize properly, ensure all required dependencies are correctly installed."
|
||||
],
|
||||
"confidence": 0.95,
|
||||
"explanation": "This workflow is reusable for any code review process that requires a multi-step analysis and human approval.",
|
||||
"source_repo": "https://github.com/itszhaoziyan-n/AgentKit.git",
|
||||
"score": 1.0
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
# Tests: code-review-agent-workflow
|
||||
|
||||
## Test Checklist
|
||||
|
||||
- [ ] Workflow has at least 3 steps
|
||||
- [ ] All inputs are defined
|
||||
- [ ] All outputs are defined
|
||||
- [ ] Failure modes are documented
|
||||
- [ ] Skill can be loaded without errors
|
||||
@@ -0,0 +1,98 @@
|
||||
---
|
||||
name: mcp-server-setup
|
||||
version: 1.0.0
|
||||
description: Set up an MCP server to integrate PipesHub with any MCP-compatible client.
|
||||
inputs:
|
||||
- MCP server configuration details
|
||||
- PipesHub credentials
|
||||
steps:
|
||||
- 'Step 1: Clone the `pipeshub-ai/mcp-server` repository using `git clone https://github.com/pipeshub-ai/mcp-server.git`'
|
||||
- 'Step 2: Navigate to the cloned directory with `cd mcp-server`'
|
||||
- 'Step 3: Run the interactive installer by executing `./install.sh`'
|
||||
- 'Step 4: Follow the prompts in the installer to configure the server, including
|
||||
setting up graph DB, message broker, and KV store'
|
||||
- 'Step 5: The installer will generate a `.env` file with necessary environment variables.
|
||||
Ensure these are correctly set'
|
||||
- 'Step 6: Start the MCP server by running `docker-compose up -d`'
|
||||
outputs:
|
||||
- Running MCP server
|
||||
- .env file generated
|
||||
tags: []
|
||||
metadata:
|
||||
source_repo: https://github.com/pipeshub-ai/pipeshub-ai.git
|
||||
extracted_at: ''
|
||||
confidence: 0.95
|
||||
---
|
||||
|
||||
# mcp-server-setup
|
||||
|
||||
Set up an MCP server to integrate PipesHub with any MCP-compatible client.
|
||||
|
||||
## Setup
|
||||
|
||||
**Dependencies:**
|
||||
|
||||
```text
|
||||
pip install docker docker-compose
|
||||
```
|
||||
|
||||
**Setup steps:**
|
||||
|
||||
1. Ensure Docker and Docker Compose are installed on your system.
|
||||
1. Clone the `pipeshub-ai/mcp-server` repository using `git clone https://github.com/pipeshub-ai/mcp-server.git`
|
||||
|
||||
## Key Files
|
||||
|
||||
- `path/to/install.sh - Script to run the interactive installer`
|
||||
- `path/to/docker-compose.yml - Configuration for Docker services`
|
||||
|
||||
## Steps
|
||||
|
||||
1. Step 1: Clone the `pipeshub-ai/mcp-server` repository using `git clone https://github.com/pipeshub-ai/mcp-server.git`
|
||||
2. Step 2: Navigate to the cloned directory with `cd mcp-server`
|
||||
3. Step 3: Run the interactive installer by executing `./install.sh`
|
||||
4. Step 4: Follow the prompts in the installer to configure the server, including setting up graph DB, message broker, and KV store
|
||||
5. Step 5: The installer will generate a `.env` file with necessary environment variables. Ensure these are correctly set
|
||||
6. Step 6: Start the MCP server by running `docker-compose up -d`
|
||||
|
||||
## Implementation Details
|
||||
|
||||
```python
|
||||
```bash
|
||||
./install.sh
|
||||
```
|
||||
Run this script to start the installation process.
|
||||
```
|
||||
|
||||
```python
|
||||
```yaml
|
||||
docker-compose:
|
||||
version: '3.9'
|
||||
services:
|
||||
mcp-server:
|
||||
image: pipeshubai/mcp-server:latest
|
||||
environment:
|
||||
- PIPESHUB_API_KEY=your_api_key_here
|
||||
```
|
||||
This snippet shows how to configure the Docker Compose file.
|
||||
```
|
||||
|
||||
## Inputs
|
||||
|
||||
- MCP server configuration details
|
||||
- PipesHub credentials
|
||||
|
||||
## Outputs
|
||||
|
||||
- Running MCP server
|
||||
- .env file generated
|
||||
|
||||
## Failure Modes
|
||||
|
||||
- Installer fails to run due to missing dependencies or incorrect configuration
|
||||
- Docker Compose setup issues preventing server from starting
|
||||
|
||||
## Source
|
||||
|
||||
Extracted from: [https://github.com/pipeshub-ai/pipeshub-ai.git](https://github.com/pipeshub-ai/pipeshub-ai.git)
|
||||
Confidence: 0.95
|
||||
@@ -0,0 +1,6 @@
|
||||
# Commands: mcp-server-setup
|
||||
|
||||
## Available Commands
|
||||
|
||||
- `/skill mcp-server-setup` — Load this skill
|
||||
- `/run mcp-server-setup` — Execute workflow
|
||||
@@ -0,0 +1,10 @@
|
||||
# Examples: mcp-server-setup
|
||||
|
||||
## Usage Example
|
||||
|
||||
```python
|
||||
# How to use this skill
|
||||
# Inputs: MCP server configuration details, PipesHub credentials
|
||||
# Process: Step 1: Clone the `pipeshub-ai/mcp-server` repository using `git clone https://github.com/pipeshub-ai/mcp-server.git` → Step 2: Navigate to the cloned directory with `cd mcp-server` → Step 3: Run the interactive installer by executing `./install.sh`
|
||||
# Outputs: Running MCP server, .env file generated
|
||||
```
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"name": "mcp-server-setup",
|
||||
"version": "1.0.0",
|
||||
"goal": "Set up an MCP server to integrate PipesHub with any MCP-compatible client.",
|
||||
"inputs": [
|
||||
"MCP server configuration details",
|
||||
"PipesHub credentials"
|
||||
],
|
||||
"steps": [
|
||||
"Step 1: Clone the `pipeshub-ai/mcp-server` repository using `git clone https://github.com/pipeshub-ai/mcp-server.git`",
|
||||
"Step 2: Navigate to the cloned directory with `cd mcp-server`",
|
||||
"Step 3: Run the interactive installer by executing `./install.sh`",
|
||||
"Step 4: Follow the prompts in the installer to configure the server, including setting up graph DB, message broker, and KV store",
|
||||
"Step 5: The installer will generate a `.env` file with necessary environment variables. Ensure these are correctly set",
|
||||
"Step 6: Start the MCP server by running `docker-compose up -d`"
|
||||
],
|
||||
"outputs": [
|
||||
"Running MCP server",
|
||||
".env file generated"
|
||||
],
|
||||
"failure_modes": [
|
||||
"Installer fails to run due to missing dependencies or incorrect configuration",
|
||||
"Docker Compose setup issues preventing server from starting"
|
||||
],
|
||||
"confidence": 0.95,
|
||||
"explanation": "This workflow is specific but can be adapted for different deployment environments and configurations.",
|
||||
"source_repo": "https://github.com/pipeshub-ai/pipeshub-ai.git",
|
||||
"score": 1.0
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
# Tests: mcp-server-setup
|
||||
|
||||
## Test Checklist
|
||||
|
||||
- [ ] Workflow has at least 3 steps
|
||||
- [ ] All inputs are defined
|
||||
- [ ] All outputs are defined
|
||||
- [ ] Failure modes are documented
|
||||
- [ ] Skill can be loaded without errors
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
name: multi-agent-sequential-workflow
|
||||
version: 1.0.0
|
||||
description: Gather and process information from multiple agents to generate a comprehensive
|
||||
travel guide.
|
||||
inputs:
|
||||
- User query with location
|
||||
steps:
|
||||
- 'Step 1: Researcher agent (agent.py) uses LangGraph create_react_agent with BedrockModel
|
||||
to gather raw facts about the destination.'
|
||||
- 'Step 2: Travel Guide Generator agent (agent.py) synthesizes the gathered data into
|
||||
a structured travel guide based on the user''s request and the raw information provided
|
||||
by the researcher.'
|
||||
- 'Step 3: Writer agent (agent.py) formats the final response, including the structured
|
||||
travel guide content and prominently featuring the ''Suggested Web Pages'' section.'
|
||||
outputs:
|
||||
- Structured travel guide with key sections
|
||||
- Final client response
|
||||
tags: []
|
||||
metadata:
|
||||
source_repo: https://github.com/omerbsezer/Fast-LLM-Agent-MCP.git
|
||||
extracted_at: ''
|
||||
confidence: 0.95
|
||||
---
|
||||
|
||||
# multi-agent-sequential-workflow
|
||||
|
||||
Gather and process information from multiple agents to generate a comprehensive travel guide.
|
||||
|
||||
## Setup
|
||||
|
||||
**Dependencies:**
|
||||
|
||||
```text
|
||||
pip install python langchain strands
|
||||
```
|
||||
|
||||
**Setup steps:**
|
||||
|
||||
1. Install required dependencies using pip and ensure the BedrockModel is properly configured.
|
||||
|
||||
## Key Files
|
||||
|
||||
- `agents/aws_strands/05-agent-strands-multiagent-workflow-sequential/agent.py - Contains the sequential workflow logic for gathering and processing information.`
|
||||
- `agents/aws_strands/05-agent-strands-multiagent-workflow-sequential/app.py - Provides a FastAPI endpoint to interact with the multi-agent system.`
|
||||
|
||||
## Steps
|
||||
|
||||
1. Step 1: Researcher agent (agent.py) uses LangGraph create_react_agent with BedrockModel to gather raw facts about the destination.
|
||||
2. Step 2: Travel Guide Generator agent (agent.py) synthesizes the gathered data into a structured travel guide based on the user's request and the raw information provided by the researcher.
|
||||
3. Step 3: Writer agent (agent.py) formats the final response, including the structured travel guide content and prominently featuring the 'Suggested Web Pages' section.
|
||||
|
||||
## Implementation Details
|
||||
|
||||
```python
|
||||
research_output = researcher_agent(query, stream=False)
|
||||
```
|
||||
|
||||
```python
|
||||
guide_output = travel_guide_agent(planner_prompt, stream=False)
|
||||
```
|
||||
|
||||
```python
|
||||
final_response = writer_agent(writer_prompt, stream=False)
|
||||
```
|
||||
|
||||
## Inputs
|
||||
|
||||
- User query with location
|
||||
|
||||
## Outputs
|
||||
|
||||
- Structured travel guide with key sections
|
||||
- Final client response
|
||||
|
||||
## Failure Modes
|
||||
|
||||
- Specific failure scenario with mitigation: If any of the agents fail to process their tasks (e.g., network issues, model errors), the workflow will fail. Mitigation involves robust error handling and fallback mechanisms.
|
||||
|
||||
## Source
|
||||
|
||||
Extracted from: [https://github.com/omerbsezer/Fast-LLM-Agent-MCP.git](https://github.com/omerbsezer/Fast-LLM-Agent-MCP.git)
|
||||
Confidence: 0.95
|
||||
@@ -0,0 +1,6 @@
|
||||
# Commands: multi-agent-sequential-workflow
|
||||
|
||||
## Available Commands
|
||||
|
||||
- `/skill multi-agent-sequential-workflow` — Load this skill
|
||||
- `/run multi-agent-sequential-workflow` — Execute workflow
|
||||
@@ -0,0 +1,10 @@
|
||||
# Examples: multi-agent-sequential-workflow
|
||||
|
||||
## Usage Example
|
||||
|
||||
```python
|
||||
# How to use this skill
|
||||
# Inputs: User query with location
|
||||
# Process: Step 1: Researcher agent (agent.py) uses LangGraph create_react_agent with BedrockModel to gather raw facts about the destination. → Step 2: Travel Guide Generator agent (agent.py) synthesizes the gathered data into a structured travel guide based on the user's request and the raw information provided by the researcher. → Step 3: Writer agent (agent.py) formats the final response, including the structured travel guide content and prominently featuring the 'Suggested Web Pages' section.
|
||||
# Outputs: Structured travel guide with key sections, Final client response
|
||||
```
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "multi-agent-sequential-workflow",
|
||||
"version": "1.0.0",
|
||||
"goal": "Gather and process information from multiple agents to generate a comprehensive travel guide.",
|
||||
"inputs": [
|
||||
"User query with location"
|
||||
],
|
||||
"steps": [
|
||||
"Step 1: Researcher agent (agent.py) uses LangGraph create_react_agent with BedrockModel to gather raw facts about the destination.",
|
||||
"Step 2: Travel Guide Generator agent (agent.py) synthesizes the gathered data into a structured travel guide based on the user's request and the raw information provided by the researcher.",
|
||||
"Step 3: Writer agent (agent.py) formats the final response, including the structured travel guide content and prominently featuring the 'Suggested Web Pages' section."
|
||||
],
|
||||
"outputs": [
|
||||
"Structured travel guide with key sections",
|
||||
"Final client response"
|
||||
],
|
||||
"failure_modes": [
|
||||
"Specific failure scenario with mitigation: If any of the agents fail to process their tasks (e.g., network issues, model errors), the workflow will fail. Mitigation involves robust error handling and fallback mechanisms."
|
||||
],
|
||||
"confidence": 0.95,
|
||||
"explanation": "This workflow is specific to generating travel guides but can be adapted for other types of structured content creation.",
|
||||
"source_repo": "https://github.com/omerbsezer/Fast-LLM-Agent-MCP.git",
|
||||
"score": 1.0
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
# Tests: multi-agent-sequential-workflow
|
||||
|
||||
## Test Checklist
|
||||
|
||||
- [ ] Workflow has at least 3 steps
|
||||
- [ ] All inputs are defined
|
||||
- [ ] All outputs are defined
|
||||
- [ ] Failure modes are documented
|
||||
- [ ] Skill can be loaded without errors
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
name: unifai-workflow-execution
|
||||
version: 1.0.0
|
||||
description: Execute a multi-agent workflow on the UnifAI platform using a specified
|
||||
blueprint and user prompt.
|
||||
inputs:
|
||||
- blueprint_id or blueprint_name
|
||||
- user_shortcut
|
||||
- user_question
|
||||
steps:
|
||||
- 'Step 1: Resolve the blueprint ID from either direct ID or name lookup (resolve_blueprint_id
|
||||
method)'
|
||||
- 'Step 2: Create a new session from the blueprint (create_session method)'
|
||||
- 'Step 3: Submit the session for background execution with the user prompt (submit_session
|
||||
method)'
|
||||
- 'Step 4: Poll session status until execution completes (poll_session_status method)'
|
||||
outputs:
|
||||
- session_id
|
||||
- workflow_id
|
||||
tags: []
|
||||
metadata:
|
||||
source_repo: https://github.com/redhat-community-ai-tools/UnifAI.git
|
||||
extracted_at: ''
|
||||
confidence: 0.95
|
||||
---
|
||||
|
||||
# unifai-workflow-execution
|
||||
|
||||
Execute a multi-agent workflow on the UnifAI platform using a specified blueprint and user prompt.
|
||||
|
||||
## Setup
|
||||
|
||||
**Dependencies:**
|
||||
|
||||
```text
|
||||
pip install requests urllib3
|
||||
```
|
||||
|
||||
**Setup steps:**
|
||||
|
||||
1. Install required dependencies using pip install requests urllib3
|
||||
1. Ensure the environment variables are set correctly (BLUEPRINT_ID, BLUEPRINT_NAME, USER_SHORTCUT, POLLING_INTERVAL, UNIFAI_BASE_URL)
|
||||
|
||||
## Key Files
|
||||
|
||||
- `scripts/execution_workflow.py - Main script for workflow execution`
|
||||
|
||||
## Steps
|
||||
|
||||
1. Step 1: Resolve the blueprint ID from either direct ID or name lookup (resolve_blueprint_id method)
|
||||
2. Step 2: Create a new session from the blueprint (create_session method)
|
||||
3. Step 3: Submit the session for background execution with the user prompt (submit_session method)
|
||||
4. Step 4: Poll session status until execution completes (poll_session_status method)
|
||||
|
||||
## Implementation Details
|
||||
|
||||
```python
|
||||
resolve_blueprint_id(client: UnifAIClient) -> str
|
||||
{...}
|
||||
# Resolve the blueprint ID from either direct ID or name lookup.
|
||||
```
|
||||
|
||||
```python
|
||||
create_session(client: UnifAIClient, blueprint_id: str) -> str
|
||||
{...}
|
||||
# Create a new session from the blueprint.
|
||||
```
|
||||
|
||||
```python
|
||||
submit_session(client: UnifAIClient, session_id: str) -> dict
|
||||
{...}
|
||||
# Submit the session for background execution with the user prompt.
|
||||
```
|
||||
|
||||
## Inputs
|
||||
|
||||
- blueprint_id or blueprint_name
|
||||
- user_shortcut
|
||||
- user_question
|
||||
|
||||
## Outputs
|
||||
|
||||
- session_id
|
||||
- workflow_id
|
||||
|
||||
## Failure Modes
|
||||
|
||||
- Blueprint name not found or not unique - error during blueprint resolution
|
||||
- Session creation fails - error from API response
|
||||
- Session submission fails - error from API response
|
||||
- Polling session status fails - error from API response
|
||||
|
||||
## Source
|
||||
|
||||
Extracted from: [https://github.com/redhat-community-ai-tools/UnifAI.git](https://github.com/redhat-community-ai-tools/UnifAI.git)
|
||||
Confidence: 0.95
|
||||
@@ -0,0 +1,6 @@
|
||||
# Commands: unifai-workflow-execution
|
||||
|
||||
## Available Commands
|
||||
|
||||
- `/skill unifai-workflow-execution` — Load this skill
|
||||
- `/run unifai-workflow-execution` — Execute workflow
|
||||
@@ -0,0 +1,10 @@
|
||||
# Examples: unifai-workflow-execution
|
||||
|
||||
## Usage Example
|
||||
|
||||
```python
|
||||
# How to use this skill
|
||||
# Inputs: blueprint_id or blueprint_name, user_shortcut, user_question
|
||||
# Process: Step 1: Resolve the blueprint ID from either direct ID or name lookup (resolve_blueprint_id method) → Step 2: Create a new session from the blueprint (create_session method) → Step 3: Submit the session for background execution with the user prompt (submit_session method)
|
||||
# Outputs: session_id, workflow_id
|
||||
```
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"name": "unifai-workflow-execution",
|
||||
"version": "1.0.0",
|
||||
"goal": "Execute a multi-agent workflow on the UnifAI platform using a specified blueprint and user prompt.",
|
||||
"inputs": [
|
||||
"blueprint_id or blueprint_name",
|
||||
"user_shortcut",
|
||||
"user_question"
|
||||
],
|
||||
"steps": [
|
||||
"Step 1: Resolve the blueprint ID from either direct ID or name lookup (resolve_blueprint_id method)",
|
||||
"Step 2: Create a new session from the blueprint (create_session method)",
|
||||
"Step 3: Submit the session for background execution with the user prompt (submit_session method)",
|
||||
"Step 4: Poll session status until execution completes (poll_session_status method)"
|
||||
],
|
||||
"outputs": [
|
||||
"session_id",
|
||||
"workflow_id"
|
||||
],
|
||||
"failure_modes": [
|
||||
"Blueprint name not found or not unique - error during blueprint resolution",
|
||||
"Session creation fails - error from API response",
|
||||
"Session submission fails - error from API response",
|
||||
"Polling session status fails - error from API response"
|
||||
],
|
||||
"confidence": 0.95,
|
||||
"explanation": "This workflow is specific to the UnifAI platform and its multi-agent system, but can be adapted for similar systems with a similar architecture.",
|
||||
"source_repo": "https://github.com/redhat-community-ai-tools/UnifAI.git",
|
||||
"score": 1.0
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
# Tests: unifai-workflow-execution
|
||||
|
||||
## Test Checklist
|
||||
|
||||
- [ ] Workflow has at least 3 steps
|
||||
- [ ] All inputs are defined
|
||||
- [ ] All outputs are defined
|
||||
- [ ] Failure modes are documented
|
||||
- [ ] Skill can be loaded without errors
|
||||
Reference in New Issue
Block a user