mirror of
https://github.com/coleam00/Archon.git
synced 2025-12-30 21:49:30 -05:00
2046 lines
45 KiB
Plaintext
2046 lines
45 KiB
Plaintext
---
|
|
title: API Reference
|
|
sidebar_position: 4
|
|
---
|
|
|
|
import Tabs from '@theme/Tabs';
|
|
import TabItem from '@theme/TabItem';
|
|
import Admonition from '@theme/Admonition';
|
|
|
|
# API Reference
|
|
|
|
Archon provides a comprehensive REST API built with FastAPI for knowledge management, document processing, and project automation. This reference covers all endpoints with detailed examples, request/response schemas, and integration patterns.
|
|
|
|
## 🌐 Base URL & Authentication
|
|
|
|
**Base URL**: `http://localhost:8080`
|
|
|
|
**Interactive Documentation**:
|
|
- Swagger UI: `http://localhost:8080/docs`
|
|
- ReDoc: `http://localhost:8080/redoc`
|
|
|
|
**Authentication**: Currently API key-based through settings. Future versions will support JWT tokens.
|
|
|
|
## 🏗️ Modular API Architecture
|
|
|
|
Archon uses a modular FastAPI architecture with separate routers for different functionalities:
|
|
|
|
- **`knowledge_api.py`**: Knowledge items, web crawling, and document management
|
|
- **`mcp_api.py`**: MCP server control and Socket.IO communications
|
|
- **`settings_api.py`**: Application settings and credential management
|
|
- **`projects_api.py`**: Project and task management (refactored with service layer)
|
|
- **`agent_chat_api.py`**: AI agent chat interface
|
|
- **`tests_api.py`**: Testing endpoints with real-time streaming
|
|
|
|
All routers are mounted with the `/api` prefix and provide comprehensive OpenAPI documentation.
|
|
|
|
## Endpoint Index
|
|
- [Knowledge Management](#knowledge-management-api)
|
|
- [Document Management](#document-management-api)
|
|
- [RAG API](#rag-retrieval-augmented-generation-api)
|
|
- [MCP Server](#mcp-server-management-api)
|
|
- [Project Management](#project-management-api)
|
|
- [Task Management](#task-management-api)
|
|
- [Settings](#settings-management-api)
|
|
- [Credentials](#credentials-api)
|
|
- [Agent Chat](#agent-chat-api)
|
|
- [Testing](#testing-api)
|
|
- [System Info](#system-information-api)
|
|
|
|
|
|
## 📚 Knowledge Management API
|
|
|
|
### List Knowledge Items
|
|
|
|
**GET** `/api/knowledge-items`
|
|
|
|
Retrieve all knowledge items with optional filtering and pagination.
|
|
|
|
#### Query Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `page` | integer | ❌ | Page number (default: 1) |
|
|
| `per_page` | integer | ❌ | Items per page (default: 20, max: 100) |
|
|
| `knowledge_type` | string | ❌ | Filter by knowledge type (`technical`, `business`, `general`) |
|
|
| `tags` | string[] | ❌ | Filter by tags |
|
|
| `status` | string | ❌ | Filter by status (`active`, `archived`) |
|
|
| `source_type` | string | ❌ | Filter by source type (`url`, `file`) |
|
|
|
|
#### Example Request
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8080/api/knowledge-items?page=1&per_page=10&knowledge_type=technical" \
|
|
-H "Accept: application/json"
|
|
```
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"items": [
|
|
{
|
|
"id": 123,
|
|
"url": "https://docs.python.org/3/tutorial/",
|
|
"title": "Python Tutorial",
|
|
"content": "Python is an easy to learn, powerful programming language...",
|
|
"knowledge_type": "technical",
|
|
"tags": ["python", "tutorial", "programming"],
|
|
"metadata": {
|
|
"source_id": "docs.python.org",
|
|
"char_count": 5234,
|
|
"word_count": 1250,
|
|
"headers": ["Introduction", "Getting Started"]
|
|
},
|
|
"created_at": "2024-01-15T10:30:00Z",
|
|
"updated_at": "2024-01-15T10:30:00Z"
|
|
}
|
|
],
|
|
"pagination": {
|
|
"page": 1,
|
|
"per_page": 20,
|
|
"total": 156,
|
|
"total_pages": 8,
|
|
"has_next": true,
|
|
"has_prev": false
|
|
}
|
|
}
|
|
```
|
|
|
|
### Update Knowledge Item
|
|
|
|
**PUT** `/api/knowledge-items/{source_id}`
|
|
|
|
Update metadata for a knowledge item.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `source_id` | string | ✅ | Source identifier |
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"title": "Updated Title",
|
|
"knowledge_type": "technical",
|
|
"tags": ["python", "updated"],
|
|
"status": "active",
|
|
"update_frequency": 14
|
|
}
|
|
```
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Successfully updated knowledge item docs.python.org",
|
|
"source_id": "docs.python.org"
|
|
}
|
|
```
|
|
|
|
### Delete Knowledge Source
|
|
|
|
**DELETE** `/api/knowledge-items/{source_id}`
|
|
|
|
Delete all knowledge items from a specific source.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `source_id` | string | ✅ | Source identifier (URL domain or document name) |
|
|
|
|
#### Example Request
|
|
|
|
```bash
|
|
curl -X DELETE "http://localhost:8080/api/knowledge-items/docs.python.org" \
|
|
-H "Accept: application/json"
|
|
```
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Successfully deleted 45 items from source",
|
|
"deleted_count": 45,
|
|
"source_id": "docs.python.org"
|
|
}
|
|
```
|
|
|
|
### Smart Crawl Website
|
|
|
|
**POST** `/api/knowledge-items/crawl`
|
|
|
|
Initiate intelligent web crawling for a URL with automatic content type detection and real-time progress tracking.
|
|
|
|
Archon automatically detects the content type and applies the appropriate crawling strategy:
|
|
- **Sitemap URLs** (ending in `sitemap.xml`): Extracts and crawls all URLs from the sitemap
|
|
- **Text Files** (`.txt` files): Downloads and processes the file directly
|
|
- **Regular Webpages**: Performs recursive crawling following internal links
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"url": "https://docs.python.org/3/tutorial/",
|
|
"knowledge_type": "technical",
|
|
"tags": ["python", "tutorial"],
|
|
"update_frequency": 7,
|
|
"max_depth": 2
|
|
}
|
|
```
|
|
|
|
#### Request Schema
|
|
|
|
| Field | Type | Required | Description |
|
|
|-------|------|----------|-------------|
|
|
| `url` | string | ✅ | Target URL to crawl (webpage, sitemap.xml, or .txt file) |
|
|
| `knowledge_type` | string | ✅ | Knowledge classification (`technical`, `business`, `general`) |
|
|
| `tags` | string[] | ❌ | Tags for categorization |
|
|
| `update_frequency` | integer | ❌ | How often to refresh content (days, default: 7) |
|
|
| `max_depth` | integer | ❌ | Maximum crawl depth (1-5, default: 2) |
|
|
|
|
**Smart Crawling Behavior:**
|
|
- **Max Depth**: Configurable 1-5 levels for recursive webpage crawling
|
|
- **Max Concurrent**: 5 simultaneous crawl workers
|
|
- **Chunk Size**: 5000 characters per knowledge chunk
|
|
- **Automatic Detection**: Content type determined by URL pattern
|
|
|
|
#### Example Request
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:8080/api/knowledge-items/crawl" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"url": "https://docs.python.org/3/tutorial/",
|
|
"knowledge_type": "technical",
|
|
"tags": ["python", "tutorial"],
|
|
"update_frequency": 7
|
|
}'
|
|
```
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"progress_id": "183e2615-fca4-4a71-a051-ab5a0292f9ff",
|
|
"message": "Crawling started",
|
|
"estimated_duration": "3-5 minutes"
|
|
}
|
|
```
|
|
|
|
### Socket.IO Knowledge Stream
|
|
|
|
**Socket.IO Namespace** `/knowledge`
|
|
|
|
Real-time updates for knowledge items changes.
|
|
|
|
#### Connection Example
|
|
|
|
```javascript
|
|
import { io } from 'socket.io-client';
|
|
|
|
// Connect to knowledge namespace
|
|
const socket = io('/knowledge');
|
|
|
|
// Handle source updates
|
|
socket.on('source_added', (data) => {
|
|
console.log('New source added:', data.source_id);
|
|
});
|
|
|
|
socket.on('source_updated', (data) => {
|
|
console.log('Source updated:', data.source_id);
|
|
});
|
|
```
|
|
|
|
### Socket.IO Progress Tracking
|
|
|
|
**Socket.IO Namespace** `/crawl`
|
|
|
|
Real-time progress updates for crawling operations using Socket.IO for improved reliability and automatic reconnection.
|
|
|
|
#### Connection Example
|
|
|
|
```javascript
|
|
import { io } from 'socket.io-client';
|
|
|
|
// Connect to crawl namespace
|
|
const socket = io('/crawl');
|
|
|
|
// Subscribe to specific progress
|
|
const progressId = '183e2615-fca4-4a71-a051-ab5a0292f9ff';
|
|
socket.emit('subscribe', { progress_id: progressId });
|
|
|
|
// Handle progress updates
|
|
socket.on('progress_update', (data) => {
|
|
console.log('Progress:', data.percentage + '%');
|
|
console.log('Status:', data.status);
|
|
console.log('Logs:', data.logs);
|
|
});
|
|
|
|
// Handle completion
|
|
socket.on('progress_complete', (data) => {
|
|
console.log('Crawl completed!');
|
|
console.log('Chunks stored:', data.chunksStored);
|
|
console.log('Word count:', data.wordCount);
|
|
});
|
|
|
|
// Handle errors
|
|
socket.on('progress_error', (data) => {
|
|
console.error('Crawl failed:', data.error);
|
|
});
|
|
```
|
|
|
|
#### Progress Message Format
|
|
|
|
**New Progress Features:**
|
|
- **📊 Smooth Progress**: Linear 0-100% progression across all document batches
|
|
- **📦 Detailed Batch Info**: "Batch 3/9: Processing items 31-45..." with accurate percentages
|
|
- **🔄 Real-Time Updates**: Socket.IO broadcasts for each processing step
|
|
- **⏱️ No Progress Jumps**: Progress bar advances smoothly without resetting
|
|
|
|
```json
|
|
{
|
|
"type": "crawl_progress",
|
|
"data": {
|
|
"progressId": "183e2615-fca4-4a71-a051-ab5a0292f9ff",
|
|
"status": "document_storage",
|
|
"percentage": 35, // Smooth progression, not jumping
|
|
"start_time": "2024-01-15T10:30:00Z",
|
|
"currentUrl": "https://docs.python.org/3/tutorial/",
|
|
"totalPages": 12,
|
|
"processedPages": 5,
|
|
"log": "Batch 3/9: Processing items 31-45 of 129",
|
|
"logs": [
|
|
"Starting crawl...",
|
|
"Analyzing URL type: https://docs.python.org/3/tutorial/",
|
|
"Detected webpage, starting recursive crawl...",
|
|
"Processed 5/12 pages",
|
|
"Processing 129 pages into chunks...",
|
|
"Batch 1/9: Processing items 1-15 of 129",
|
|
"Batch 2/9: Processing items 16-30 of 129",
|
|
"Batch 3/9: Processing items 31-45 of 129"
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Progress Phases
|
|
|
|
1. **`analyzing`** (0-5%): URL type detection and strategy selection
|
|
2. **`crawling`** (5-25%): Web page retrieval and content extraction
|
|
3. **`processing`** (25-30%): Document chunking and preparation
|
|
4. **`source_creation`** (30-35%): Creating source records in database
|
|
5. **`document_storage`** (35-90%): Batch processing with contextual embeddings
|
|
- Each batch shows: "Batch X/Y: Processing items..."
|
|
- Sub-steps: Creating embeddings → Storing in database
|
|
6. **`code_storage`** (90-95%): Extracting and storing code examples
|
|
7. **`finalization`** (95-100%): Completing crawl and cleanup
|
|
|
|
## 📄 Document Management API
|
|
|
|
### Upload Document
|
|
|
|
**POST** `/api/documents/upload`
|
|
|
|
Upload and process documents (PDF, Word, Markdown, Text).
|
|
|
|
#### Request (Multipart Form)
|
|
|
|
| Field | Type | Required | Description |
|
|
|-------|------|----------|-------------|
|
|
| `file` | file | ✅ | Document file to upload |
|
|
| `knowledge_type` | string | ❌ | Knowledge classification (default: "technical") |
|
|
| `tags` | string | ❌ | JSON array of tags |
|
|
|
|
#### Supported File Types
|
|
|
|
| Extension | MIME Type | Max Size | Processing Engine |
|
|
|-----------|-----------|----------|-------------------|
|
|
| `.pdf` | `application/pdf` | 50MB | PyPDF2 + pdfplumber |
|
|
| `.docx` | `application/vnd.openxmlformats-officedocument.wordprocessingml.document` | 25MB | python-docx |
|
|
| `.doc` | `application/msword` | 25MB | python-docx |
|
|
| `.md` | `text/markdown` | 10MB | Direct processing |
|
|
| `.txt` | `text/plain` | 10MB | Direct processing |
|
|
|
|
#### Example Request
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:8080/api/documents/upload" \
|
|
-F "file=@python-guide.pdf" \
|
|
-F "knowledge_type=technical" \
|
|
-F "tags=[\"python\", \"guide\", \"programming\"]"
|
|
```
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Document uploaded and processed successfully",
|
|
"document": {
|
|
"id": 456,
|
|
"filename": "python-guide.pdf",
|
|
"knowledge_type": "technical",
|
|
"tags": ["python", "guide", "programming"],
|
|
"file_size": 2048576,
|
|
"chunks_created": 89,
|
|
"processing_time": 12.5,
|
|
"created_at": "2024-01-15T10:45:00Z"
|
|
}
|
|
}
|
|
```
|
|
|
|
## 🔍 RAG (Retrieval-Augmented Generation) API
|
|
|
|
### Query Knowledge Base
|
|
|
|
**POST** `/api/rag/query`
|
|
|
|
Perform semantic search across the knowledge base.
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"query": "How to handle exceptions in Python?",
|
|
"source": "docs.python.org",
|
|
"match_count": 10
|
|
}
|
|
```
|
|
|
|
#### Request Schema
|
|
|
|
| Field | Type | Required | Description |
|
|
|-------|------|----------|-------------|
|
|
| `query` | string | ✅ | Search query text |
|
|
| `source` | string | ❌ | Filter by specific source domain |
|
|
| `match_count` | integer | ❌ | Maximum results (default: 5, max: 50) |
|
|
|
|
#### Example Request
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:8080/api/rag/query" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"query": "How to handle exceptions in Python?",
|
|
"source": "docs.python.org",
|
|
"match_count": 5
|
|
}'
|
|
```
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"query": "How to handle exceptions in Python?",
|
|
"results": [
|
|
{
|
|
"id": 789,
|
|
"title": "Python Exception Handling",
|
|
"content": "Python uses try-except blocks to handle exceptions. When an error occurs...",
|
|
"url": "https://docs.python.org/3/tutorial/errors.html",
|
|
"similarity_score": 0.92,
|
|
"metadata": {
|
|
"source_id": "docs.python.org",
|
|
"char_count": 450,
|
|
"word_count": 89,
|
|
"headers": ["Exception Handling", "Try-Except Blocks"]
|
|
}
|
|
}
|
|
],
|
|
"total_results": 1,
|
|
"processing_time": 0.245
|
|
}
|
|
```
|
|
|
|
### Get Available Sources
|
|
|
|
**GET** `/api/rag/sources`
|
|
|
|
Retrieve all available knowledge sources for filtering.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"sources": [
|
|
{
|
|
"source_id": "docs.python.org",
|
|
"title": "Python Official Documentation",
|
|
"description": "Official Python documentation and tutorials",
|
|
"created_at": "2024-01-10T00:00:00Z",
|
|
"last_updated": "2024-01-15T10:45:00Z"
|
|
},
|
|
{
|
|
"source_id": "fastapi.tiangolo.com",
|
|
"title": "FastAPI Documentation",
|
|
"description": "FastAPI framework documentation",
|
|
"created_at": "2024-01-12T00:00:00Z",
|
|
"last_updated": "2024-01-14T08:30:00Z"
|
|
}
|
|
],
|
|
"total_count": 2
|
|
}
|
|
```
|
|
|
|
### Delete Source
|
|
|
|
**DELETE** `/api/sources/{source_id}`
|
|
|
|
Delete a source and all its associated data (crawled pages, code examples, embeddings).
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `source_id` | string | ✅ | Source identifier to delete |
|
|
|
|
#### Example Request
|
|
|
|
```bash
|
|
curl -X DELETE "http://localhost:8080/api/sources/docs.python.org" \
|
|
-H "Accept: application/json"
|
|
```
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Successfully deleted source docs.python.org",
|
|
"source_id": "docs.python.org",
|
|
"pages_deleted": 145,
|
|
"code_examples_deleted": 89,
|
|
"total_chunks_removed": 1450
|
|
}
|
|
```
|
|
|
|
#### Error Response
|
|
|
|
```json
|
|
{
|
|
"error": "Source not found"
|
|
}
|
|
```
|
|
|
|
## 🔧 MCP Server Management API
|
|
|
|
### Get MCP Server Status
|
|
|
|
**GET** `/api/mcp/status`
|
|
|
|
Retrieve current MCP Docker container status and health information.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"status": "running",
|
|
"container_id": "a1b2c3d4e5f6",
|
|
"container_name": "Archon-MCP",
|
|
"uptime": 3600,
|
|
"start_time": "2024-01-15T09:44:30Z",
|
|
"health": {
|
|
"status": "healthy",
|
|
"port": 8051,
|
|
"transport": "sse"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Start MCP Server
|
|
|
|
**POST** `/api/mcp/start`
|
|
|
|
Start the MCP Docker container.
|
|
|
|
<Admonition type="info" title="Container Management">
|
|
The MCP server runs as a Docker container named `Archon-MCP`. Ensure Docker is running and the container exists (created by docker-compose).
|
|
</Admonition>
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "MCP server started successfully",
|
|
"status": "running",
|
|
"container_id": "a1b2c3d4e5f6"
|
|
}
|
|
```
|
|
|
|
### Stop MCP Server
|
|
|
|
**POST** `/api/mcp/stop`
|
|
|
|
Stop the running MCP Docker container.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "MCP server stopped successfully",
|
|
"status": "stopped"
|
|
}
|
|
```
|
|
|
|
### Get MCP Logs
|
|
|
|
**GET** `/api/mcp/logs`
|
|
|
|
Retrieve recent MCP server logs.
|
|
|
|
#### Query Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `limit` | integer | ❌ | Number of log entries (default: 100) |
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"logs": [
|
|
{
|
|
"timestamp": "2024-01-15T10:45:30Z",
|
|
"level": "INFO",
|
|
"message": "MCP server started successfully"
|
|
},
|
|
{
|
|
"timestamp": "2024-01-15T10:45:31Z",
|
|
"level": "INFO",
|
|
"message": "Registered 14 tools"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Clear MCP Logs
|
|
|
|
**DELETE** `/api/mcp/logs`
|
|
|
|
Clear the MCP server log buffer.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Logs cleared successfully"
|
|
}
|
|
```
|
|
|
|
### Get MCP Configuration
|
|
|
|
**GET** `/api/mcp/config`
|
|
|
|
Retrieve MCP server configuration.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"host": "localhost",
|
|
"port": 8051,
|
|
"transport": "sse",
|
|
"model_choice": "gpt-4o-mini",
|
|
"use_contextual_embeddings": false,
|
|
"use_hybrid_search": false,
|
|
"use_agentic_rag": false,
|
|
"use_reranking": false
|
|
}
|
|
```
|
|
|
|
### Save MCP Configuration
|
|
|
|
**POST** `/api/mcp/config`
|
|
|
|
Save MCP server configuration.
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"transport": "sse",
|
|
"host": "localhost",
|
|
"port": 8051
|
|
}
|
|
```
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Configuration saved"
|
|
}
|
|
```
|
|
|
|
### MCP Server Logs Stream
|
|
|
|
**Socket.IO Namespace** `/logs`
|
|
|
|
Real-time MCP server log streaming using Socket.IO.
|
|
|
|
#### Connection Example
|
|
|
|
```javascript
|
|
import { io } from 'socket.io-client';
|
|
|
|
// Connect to logs namespace
|
|
const socket = io('/logs');
|
|
|
|
// Handle connection
|
|
socket.on('connect', () => {
|
|
console.log('Connected to log stream');
|
|
});
|
|
|
|
// Handle log entries
|
|
socket.on('log_entry', (data) => {
|
|
console.log(`[${data.timestamp}] ${data.level}: ${data.message}`);
|
|
});
|
|
|
|
// Handle batch logs
|
|
socket.on('log_batch', (logs) => {
|
|
logs.forEach(log => {
|
|
console.log(`[${log.timestamp}] ${log.level}: ${log.message}`);
|
|
});
|
|
});
|
|
```
|
|
|
|
### Get MCP Tools
|
|
|
|
**GET** `/api/mcp/tools`
|
|
|
|
Get list of available MCP tools.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"tools": [
|
|
{
|
|
"name": "perform_rag_query",
|
|
"description": "Search the knowledge base using semantic search",
|
|
"module": "rag",
|
|
"parameters": [
|
|
{"name": "query", "type": "string", "required": true},
|
|
{"name": "source", "type": "string", "required": false},
|
|
{"name": "match_count", "type": "integer", "required": false}
|
|
]
|
|
}
|
|
],
|
|
"count": 14,
|
|
"server_running": true,
|
|
"source": "mcp_server"
|
|
}
|
|
```
|
|
|
|
### MCP Health Check
|
|
|
|
**GET** `/api/mcp/health`
|
|
|
|
Health check for MCP API module.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"status": "healthy",
|
|
"service": "mcp"
|
|
}
|
|
```
|
|
|
|
## 📋 Project Management API
|
|
|
|
<Admonition type="info" title="Project Structure">
|
|
Projects in Archon use JSONB fields for flexible document storage:
|
|
- `prd`: Product Requirements Document
|
|
- `docs`: Array of project documents
|
|
- `features`: Array of feature specifications
|
|
- `data`: Custom project data
|
|
|
|
**Service Layer Architecture:**
|
|
- **ProjectService**: Core CRUD operations for projects
|
|
- **TaskService**: Task management with archiving
|
|
- **ProjectCreationService**: AI-assisted project creation with GitHub integration
|
|
- **ProgressService**: Real-time progress tracking for long-running operations
|
|
- **SourceLinkingService**: Manages relationships between projects and knowledge sources
|
|
</Admonition>
|
|
|
|
### List Projects
|
|
|
|
**GET** `/api/projects`
|
|
|
|
Retrieve all projects with associated knowledge sources.
|
|
|
|
#### Query Parameters
|
|
|
|
None - returns all projects.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
[
|
|
{
|
|
"id": "550e8400-e29b-41d4-a716-446655440000",
|
|
"title": "Archon Documentation",
|
|
"description": "Comprehensive API documentation project",
|
|
"github_repo": "https://github.com/user/archon",
|
|
"prd": {
|
|
"overview": "Documentation project",
|
|
"goals": ["Complete API docs", "Add examples"]
|
|
},
|
|
"features": [],
|
|
"docs": [],
|
|
"technical_sources": [
|
|
{
|
|
"source_id": "fastapi.tiangolo.com",
|
|
"title": "FastAPI Documentation"
|
|
}
|
|
],
|
|
"business_sources": [],
|
|
"pinned": false,
|
|
"created_at": "2024-01-15T10:00:00Z",
|
|
"updated_at": "2024-01-15T10:45:00Z"
|
|
}
|
|
]
|
|
```
|
|
|
|
### Create Project
|
|
|
|
**POST** `/api/projects`
|
|
|
|
Create a new project with AI-assisted setup and optional GitHub repository processing. Returns immediately with a progress ID for real-time updates via Socket.IO.
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"title": "New Documentation Project",
|
|
"description": "A comprehensive documentation project",
|
|
"github_repo": "https://github.com/user/project",
|
|
"color": "blue",
|
|
"icon": "Briefcase",
|
|
"prd": {
|
|
"overview": "Project overview",
|
|
"goals": ["Goal 1", "Goal 2"],
|
|
"requirements": ["Requirement 1", "Requirement 2"]
|
|
},
|
|
"features": [],
|
|
"technical_sources": ["fastapi.tiangolo.com"],
|
|
"business_sources": [],
|
|
"pinned": false
|
|
}
|
|
```
|
|
|
|
#### Request Schema
|
|
|
|
| Field | Type | Required | Description |
|
|
|-------|------|----------|-------------|
|
|
| `title` | string | ✅ | Project title |
|
|
| `description` | string | ❌ | Project description |
|
|
| `github_repo` | string | ❌ | GitHub repository URL for processing |
|
|
| `color` | string | ❌ | Project color (default: 'blue') |
|
|
| `icon` | string | ❌ | Project icon (default: 'Briefcase') |
|
|
| `prd` | object | ❌ | Product Requirements Document |
|
|
| `features` | array | ❌ | Feature specifications |
|
|
| `technical_sources` | array | ❌ | Technical knowledge source IDs |
|
|
| `business_sources` | array | ❌ | Business knowledge source IDs |
|
|
| `pinned` | boolean | ❌ | Pin to top of project list |
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"progress_id": "a1b2c3d4e5f6789012345678",
|
|
"status": "started",
|
|
"message": "Project creation started. Connect to Socket.IO for progress updates."
|
|
}
|
|
```
|
|
|
|
<Admonition type="tip" title="Real-time Progress">
|
|
Connect to Socket.IO to receive real-time progress updates using the returned `progress_id`. The project creation process includes GitHub repository analysis, feature generation, and task creation.
|
|
</Admonition>
|
|
|
|
### Get Project Details
|
|
|
|
**GET** `/api/projects/{project_id}`
|
|
|
|
Get detailed information about a specific project.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `project_id` | string | ✅ | Project UUID |
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"project": {
|
|
"id": "550e8400-e29b-41d4-a716-446655440000",
|
|
"title": "Archon Documentation",
|
|
"github_repo": "https://github.com/user/archon",
|
|
"prd": {
|
|
"overview": "Documentation project",
|
|
"goals": ["Complete API docs", "Add examples"]
|
|
},
|
|
"features": [
|
|
{
|
|
"id": "feat-001",
|
|
"name": "API Documentation",
|
|
"description": "Complete API reference"
|
|
}
|
|
],
|
|
"docs": [
|
|
{
|
|
"id": "doc-001",
|
|
"title": "Getting Started",
|
|
"type": "guide"
|
|
}
|
|
],
|
|
"created_at": "2024-01-15T10:00:00Z",
|
|
"updated_at": "2024-01-15T10:45:00Z"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Update Project
|
|
|
|
**PUT** `/api/projects/{project_id}`
|
|
|
|
Update project information.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `project_id` | string | ✅ | Project UUID |
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"title": "Updated Project Title",
|
|
"github_repo": "https://github.com/user/new-repo",
|
|
"prd": {
|
|
"overview": "Updated overview"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Delete Project
|
|
|
|
**DELETE** `/api/projects/{project_id}`
|
|
|
|
Delete a project and all associated tasks.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `project_id` | string | ✅ | Project UUID |
|
|
|
|
### Get Project Features
|
|
|
|
**GET** `/api/projects/{project_id}/features`
|
|
|
|
Retrieve features from a project's features JSONB field.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `project_id` | string | ✅ | Project UUID |
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"features": [
|
|
{
|
|
"id": "feat-001",
|
|
"name": "User Authentication",
|
|
"description": "JWT-based auth system",
|
|
"priority": "high",
|
|
"status": "in_progress"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Get Project Tasks
|
|
|
|
**GET** `/api/projects/{project_id}/tasks`
|
|
|
|
Get all tasks for a specific project.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `project_id` | string | ✅ | Project UUID |
|
|
|
|
### Health Check
|
|
|
|
**GET** `/api/projects/health`
|
|
|
|
Projects API health check.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"status": "healthy",
|
|
"service": "projects"
|
|
}
|
|
```
|
|
|
|
### Socket.IO Real-time Updates
|
|
|
|
**Socket.IO Connection** (Root namespace `/`)
|
|
|
|
<Admonition type="info" title="Simplified 2025 Socket.IO Pattern">
|
|
Archon uses the simplified Socket.IO pattern with direct event handlers on the root namespace. No complex namespaces or classes are used for better performance and maintainability.
|
|
</Admonition>
|
|
|
|
#### Connection Example
|
|
|
|
```javascript
|
|
import { io } from 'socket.io-client';
|
|
|
|
// Connect to root namespace
|
|
const socket = io('http://localhost:8080');
|
|
|
|
socket.on('connect', () => {
|
|
console.log('Connected to Archon Socket.IO server');
|
|
|
|
// Join project room for updates
|
|
socket.emit('join_project', { project_id: 'your-project-id' });
|
|
|
|
// Join progress room for operation tracking
|
|
socket.emit('join_progress', { progress_id: 'your-progress-id' });
|
|
});
|
|
```
|
|
|
|
#### Progress Updates (Project Creation)
|
|
|
|
```javascript
|
|
// Listen for progress updates during project creation
|
|
socket.on('progress_update', (data) => {
|
|
console.log(`Progress: ${data.percentage}% - ${data.status}`);
|
|
console.log(`Message: ${data.message}`);
|
|
});
|
|
|
|
socket.on('progress_complete', (data) => {
|
|
console.log('Operation completed:', data.result);
|
|
});
|
|
|
|
socket.on('progress_error', (data) => {
|
|
console.error('Operation failed:', data.error);
|
|
});
|
|
```
|
|
|
|
#### Project and Task Updates
|
|
|
|
```javascript
|
|
// Project-level updates (broadcasted to project room)
|
|
socket.on('project_updated', (project) => {
|
|
console.log('Project updated:', project.title);
|
|
});
|
|
|
|
socket.on('task_updated', (task) => {
|
|
console.log('Task updated:', task.title, 'Status:', task.status);
|
|
});
|
|
|
|
socket.on('projects_list_updated', () => {
|
|
console.log('Projects list has been updated, refresh your view');
|
|
});
|
|
```
|
|
|
|
#### Available Events
|
|
|
|
| Event | Direction | Description |
|
|
|-------|-----------|-------------|
|
|
| `join_project` | Client → Server | Join project room for updates |
|
|
| `join_progress` | Client → Server | Join progress tracking room |
|
|
| `progress_update` | Server → Client | Progress percentage and status |
|
|
| `progress_complete` | Server → Client | Operation completed successfully |
|
|
| `progress_error` | Server → Client | Operation failed with error |
|
|
| `project_updated` | Server → Client | Project data changed |
|
|
| `task_updated` | Server → Client | Task data changed |
|
|
| `projects_list_updated` | Server → Client | Projects list changed |
|
|
|
|
## 📝 Task Management API
|
|
|
|
### List Tasks
|
|
|
|
**GET** `/api/tasks`
|
|
|
|
Retrieve tasks with filtering options.
|
|
|
|
#### Query Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `project_id` | string | ❌ | Filter by project ID |
|
|
| `status` | string | ❌ | Filter by status (`todo`, `doing`, `review`, `done`) |
|
|
| `assignee` | string | ❌ | Filter by assignee |
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"tasks": [
|
|
{
|
|
"id": "660e8400-e29b-41d4-a716-446655440001",
|
|
"project_id": "550e8400-e29b-41d4-a716-446655440000",
|
|
"title": "Write API documentation",
|
|
"description": "Create comprehensive API reference documentation",
|
|
"sources": [
|
|
{"name": "FastAPI docs", "url": "https://fastapi.tiangolo.com"}
|
|
],
|
|
"code_examples": [
|
|
{
|
|
"language": "python",
|
|
"code": "@app.get('/api/example')\nasync def example():\n return {'message': 'Hello'}"
|
|
}
|
|
],
|
|
"status": "doing",
|
|
"created_at": "2024-01-15T10:15:00Z",
|
|
"updated_at": "2024-01-15T10:30:00Z"
|
|
}
|
|
],
|
|
"total_count": 1
|
|
}
|
|
```
|
|
|
|
### Create Task
|
|
|
|
**POST** `/api/tasks`
|
|
|
|
Create a new task under a project.
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"project_id": "550e8400-e29b-41d4-a716-446655440000",
|
|
"title": "Implement user authentication",
|
|
"description": "Add JWT-based authentication to the API",
|
|
"sources": [
|
|
{"name": "JWT Guide", "url": "https://jwt.io/introduction"}
|
|
],
|
|
"code_examples": [],
|
|
"status": "todo"
|
|
}
|
|
```
|
|
|
|
### Get Task Details
|
|
|
|
**GET** `/api/tasks/{task_id}`
|
|
|
|
Get detailed information about a specific task.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `task_id` | string | ✅ | Task UUID |
|
|
|
|
### Update Task
|
|
|
|
**PUT** `/api/tasks/{task_id}`
|
|
|
|
Update an existing task.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `task_id` | string | ✅ | Task UUID |
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"title": "Updated task title",
|
|
"description": "Updated description",
|
|
"status": "done",
|
|
"assignee": "User",
|
|
"sources": [
|
|
{"name": "New source", "url": "https://example.com"}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Delete Task
|
|
|
|
**DELETE** `/api/tasks/{task_id}`
|
|
|
|
Delete a task.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `task_id` | string | ✅ | Task UUID |
|
|
|
|
|
|
### Update Task Status (MCP)
|
|
|
|
**PUT** `/api/mcp/tasks/{task_id}/status`
|
|
|
|
Update task status (MCP compatibility endpoint).
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `task_id` | string | ✅ | Task UUID |
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"status": "doing"
|
|
}
|
|
```
|
|
|
|
## ⚙️ Settings Management API
|
|
|
|
### List All Credentials
|
|
|
|
**GET** `/api/credentials`
|
|
|
|
List all credentials and their metadata.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
[
|
|
{
|
|
"key": "OPENAI_API_KEY",
|
|
"value": "sk-proj-...",
|
|
"is_encrypted": true,
|
|
"category": "api_keys",
|
|
"description": "OpenAI API Key for embedding model"
|
|
}
|
|
]
|
|
```
|
|
|
|
### Get Specific Credential
|
|
|
|
**GET** `/api/credentials/{key}`
|
|
|
|
Get a specific credential by key.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"key": "OPENAI_API_KEY",
|
|
"value": "sk-proj-...",
|
|
"is_encrypted": true
|
|
}
|
|
```
|
|
|
|
### Settings Health Check
|
|
|
|
**GET** `/api/settings/health`
|
|
|
|
Settings API health check.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"status": "healthy",
|
|
"service": "settings"
|
|
}
|
|
```
|
|
|
|
## 🔐 Credentials API
|
|
|
|
### List All Credentials
|
|
|
|
**GET** `/api/credentials`
|
|
|
|
Retrieve all stored credentials.
|
|
|
|
#### Query Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `category` | string | ❌ | Filter by category |
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
[
|
|
{
|
|
"key": "OPENAI_API_KEY",
|
|
"value": "***masked***",
|
|
"encrypted_value": null,
|
|
"is_encrypted": false,
|
|
"category": "api_keys",
|
|
"description": "OpenAI API key for embeddings"
|
|
},
|
|
{
|
|
"key": "GITHUB_TOKEN",
|
|
"value": null,
|
|
"encrypted_value": "encrypted_base64_string",
|
|
"is_encrypted": true,
|
|
"category": "api_keys",
|
|
"description": "GitHub personal access token"
|
|
}
|
|
]
|
|
```
|
|
|
|
### Get Credentials by Category
|
|
|
|
**GET** `/api/credentials/categories/{category}`
|
|
|
|
Get all credentials for a specific category.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `category` | string | ✅ | Category name |
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"credentials": {
|
|
"OPENAI_API_KEY": "sk-proj-...",
|
|
"ANTHROPIC_API_KEY": "sk-ant-..."
|
|
}
|
|
}
|
|
```
|
|
|
|
### Create/Update Credential
|
|
|
|
**POST** `/api/credentials`
|
|
|
|
Create or update a credential.
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"key": "GITHUB_TOKEN",
|
|
"value": "ghp_...",
|
|
"is_encrypted": true,
|
|
"category": "api_keys",
|
|
"description": "GitHub personal access token"
|
|
}
|
|
```
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Credential GITHUB_TOKEN encrypted and saved successfully"
|
|
}
|
|
```
|
|
|
|
### Get Specific Credential
|
|
|
|
**GET** `/api/credentials/{key}`
|
|
|
|
Get a specific credential by key.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `key` | string | ✅ | Credential key |
|
|
|
|
#### Query Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `decrypt` | boolean | ❌ | Decrypt if encrypted (default: true) |
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"key": "GITHUB_TOKEN",
|
|
"value": "ghp_...",
|
|
"is_encrypted": true
|
|
}
|
|
```
|
|
|
|
### Update Credential
|
|
|
|
**PUT** `/api/credentials/{key}`
|
|
|
|
Update an existing credential.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `key` | string | ✅ | Credential key |
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"value": "new_value",
|
|
"is_encrypted": true,
|
|
"category": "api_keys",
|
|
"description": "Updated description"
|
|
}
|
|
```
|
|
|
|
### Delete Credential
|
|
|
|
**DELETE** `/api/credentials/{key}`
|
|
|
|
Delete a stored credential.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `key` | string | ✅ | Credential key |
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Credential GITHUB_TOKEN deleted successfully"
|
|
}
|
|
```
|
|
|
|
### Initialize Credentials
|
|
|
|
**POST** `/api/credentials/initialize`
|
|
|
|
Reload credentials from database.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Credentials reloaded from database"
|
|
}
|
|
```
|
|
|
|
### RAG Settings
|
|
|
|
**GET** `/api/credentials/categories/rag_strategy`
|
|
|
|
Retrieve all RAG configuration settings including LLM provider options.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"credentials": {
|
|
"MODEL_CHOICE": "gpt-4o-mini",
|
|
"USE_CONTEXTUAL_EMBEDDINGS": "true",
|
|
"USE_HYBRID_SEARCH": "true",
|
|
"USE_AGENTIC_RAG": "true",
|
|
"USE_RERANKING": "true",
|
|
"LLM_PROVIDER": "openai",
|
|
"LLM_BASE_URL": null,
|
|
"EMBEDDING_MODEL": null
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Available Settings
|
|
|
|
| Setting | Type | Description |
|
|
|---------|------|-------------|
|
|
| `LLM_PROVIDER` | string | Provider choice: `openai`, `ollama`, `google` |
|
|
| `LLM_BASE_URL` | string | Custom base URL (required for Ollama) |
|
|
| `EMBEDDING_MODEL` | string | Override default embedding model |
|
|
| `MODEL_CHOICE` | string | Chat model for summaries and contextual embeddings |
|
|
|
|
## 💬 Agent Chat API
|
|
|
|
<Admonition type="warning" title="Integration Note">
|
|
The Agent Chat API is currently being refactored to use HTTP calls to the separate Agents service. Some endpoints may be temporarily unavailable.
|
|
</Admonition>
|
|
|
|
### Create Chat Session
|
|
|
|
**POST** `/api/agent-chat/sessions`
|
|
|
|
Create a new chat session.
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"agent_type": "rag",
|
|
"context": {
|
|
"project_id": "550e8400-e29b-41d4-a716-446655440000"
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"session": {
|
|
"id": "chat-session-uuid",
|
|
"agent_type": "rag",
|
|
"created_at": "2024-01-15T10:45:00Z"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Get Session Details
|
|
|
|
**GET** `/api/agent-chat/sessions/{session_id}`
|
|
|
|
Get chat session details and history.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `session_id` | string | ✅ | Session UUID |
|
|
|
|
### Send Message
|
|
|
|
**POST** `/api/agent-chat/sessions/{session_id}/messages`
|
|
|
|
Send a message in a chat session.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `session_id` | string | ✅ | Session UUID |
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"message": "Help me implement authentication in my API"
|
|
}
|
|
```
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": {
|
|
"id": "msg-uuid",
|
|
"role": "assistant",
|
|
"content": "I'll help you implement authentication. Based on your project, here's what I recommend...",
|
|
"metadata": {
|
|
"sources_used": [
|
|
{
|
|
"title": "JWT Authentication Guide",
|
|
"url": "https://jwt.io/introduction",
|
|
"relevance": 0.92
|
|
}
|
|
],
|
|
"processing_time": 1.234
|
|
},
|
|
"created_at": "2024-01-15T10:45:30Z"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Socket.IO Chat
|
|
|
|
**Socket.IO Namespace** `/chat`
|
|
|
|
Real-time chat communication.
|
|
|
|
#### Connection Example
|
|
|
|
```javascript
|
|
import { io } from 'socket.io-client';
|
|
|
|
// Connect to chat namespace
|
|
const socket = io('/chat');
|
|
|
|
// Join session
|
|
const sessionId = 'session-uuid';
|
|
socket.emit('join_session', { session_id: sessionId });
|
|
|
|
ws.onmessage = function(event) {
|
|
const data = JSON.parse(event.data);
|
|
if (data.type === 'message') {
|
|
console.log('Agent:', data.content);
|
|
} else if (data.type === 'thinking') {
|
|
console.log('Agent is thinking...');
|
|
}
|
|
};
|
|
|
|
// Send message
|
|
ws.send(JSON.stringify({
|
|
type: 'message',
|
|
content: 'Help me with authentication'
|
|
}));
|
|
```
|
|
|
|
### Agent Status
|
|
|
|
**GET** `/api/agent-chat/status`
|
|
|
|
Get agent chat service status.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"status": "healthy",
|
|
"active_sessions": 3,
|
|
"available_agents": ["rag", "document", "task"],
|
|
"total_messages_processed": 1250
|
|
}
|
|
```
|
|
|
|
### Debug Token Usage
|
|
|
|
**GET** `/api/agent-chat/debug/token-usage`
|
|
|
|
Get token usage statistics for debugging.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"total_tokens_used": 125000,
|
|
"sessions": [
|
|
{
|
|
"session_id": "session-uuid",
|
|
"tokens_used": 5000,
|
|
"messages_count": 10
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## 🧪 Testing API
|
|
|
|
### Run MCP Tests
|
|
|
|
**POST** `/api/tests/mcp/run`
|
|
|
|
Run MCP integration tests.
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"test_filter": "test_rag_query",
|
|
"verbose": true
|
|
}
|
|
```
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"execution_id": "test-exec-uuid",
|
|
"message": "MCP tests started",
|
|
"test_count": 5
|
|
}
|
|
```
|
|
|
|
### Run UI Tests
|
|
|
|
**POST** `/api/tests/ui/run`
|
|
|
|
Run UI component tests.
|
|
|
|
#### Request Body
|
|
|
|
```json
|
|
{
|
|
"test_filter": "KnowledgeTable",
|
|
"coverage": true
|
|
}
|
|
```
|
|
|
|
### Get Test Status
|
|
|
|
**GET** `/api/tests/status/{execution_id}`
|
|
|
|
Get test execution status.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `execution_id` | string | ✅ | Test execution UUID |
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"execution_id": "test-exec-uuid",
|
|
"status": "completed",
|
|
"start_time": "2024-01-15T10:00:00Z",
|
|
"end_time": "2024-01-15T10:01:30Z",
|
|
"duration": 90.5,
|
|
"test_type": "mcp",
|
|
"results": {
|
|
"total": 5,
|
|
"passed": 4,
|
|
"failed": 1,
|
|
"skipped": 0
|
|
}
|
|
}
|
|
```
|
|
|
|
### Get Test History
|
|
|
|
**GET** `/api/tests/history`
|
|
|
|
Get test execution history.
|
|
|
|
#### Query Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `limit` | integer | ❌ | Maximum results (default: 20) |
|
|
| `test_type` | string | ❌ | Filter by test type (mcp/ui) |
|
|
|
|
### Delete Test Execution
|
|
|
|
**DELETE** `/api/tests/execution/{execution_id}`
|
|
|
|
Delete test execution records.
|
|
|
|
#### Path Parameters
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `execution_id` | string | ✅ | Test execution UUID |
|
|
|
|
### Socket.IO Test Stream
|
|
|
|
**Socket.IO Namespace** `/tests`
|
|
|
|
Real-time test execution output streaming.
|
|
|
|
## 🔍 System Information API
|
|
|
|
### Health Check
|
|
|
|
**GET** `/health`
|
|
|
|
System health and status check.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"status": "healthy",
|
|
"service": "archon-backend",
|
|
"timestamp": "2024-01-15T10:45:00Z"
|
|
}
|
|
```
|
|
|
|
### Database Metrics
|
|
|
|
**GET** `/api/database/metrics`
|
|
|
|
Get database statistics and health information.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"status": "healthy",
|
|
"database": "supabase",
|
|
"tables": {
|
|
"projects": 5,
|
|
"tasks": 42,
|
|
"crawled_pages": 1250,
|
|
"credentials": 8
|
|
},
|
|
"total_records": 1305,
|
|
"timestamp": "2024-01-15T10:45:00Z"
|
|
}
|
|
```
|
|
|
|
### API Health Check
|
|
|
|
**GET** `/api/health`
|
|
|
|
General API health check endpoint.
|
|
|
|
#### Example Response
|
|
|
|
```json
|
|
{
|
|
"status": "healthy",
|
|
"service": "knowledge-api",
|
|
"timestamp": "2024-01-15T10:45:00Z"
|
|
}
|
|
```
|
|
|
|
## 🚨 Error Handling
|
|
|
|
### Standard Error Response Format
|
|
|
|
All API errors follow a consistent format:
|
|
|
|
```json
|
|
{
|
|
"success": false,
|
|
"error": "Invalid request parameters",
|
|
"details": {
|
|
"field": "knowledge_type",
|
|
"message": "Must be one of: technical, business, general"
|
|
},
|
|
"timestamp": "2024-01-15T10:45:00Z"
|
|
}
|
|
```
|
|
|
|
### Common Error Codes
|
|
|
|
| HTTP Status | Error Type | Description |
|
|
|-------------|------------|-------------|
|
|
| 400 | `Bad Request` | Invalid request parameters |
|
|
| 404 | `Not Found` | Resource not found |
|
|
| 422 | `Unprocessable Entity` | Validation error |
|
|
| 500 | `Internal Server Error` | Server error |
|
|
|
|
## 📊 Rate Limiting
|
|
|
|
### Default Limits
|
|
|
|
| Endpoint Category | Rate Limit | Window |
|
|
|------------------|------------|--------|
|
|
| Document Upload | 10 requests | 1 minute |
|
|
| RAG Queries | 100 requests | 1 minute |
|
|
| Crawling | 5 requests | 5 minutes |
|
|
| General API | 1000 requests | 1 hour |
|
|
|
|
## 🔧 SDK & Integration Examples
|
|
|
|
### Python SDK Example
|
|
|
|
```python
|
|
import requests
|
|
import json
|
|
from typing import List, Dict, Any
|
|
|
|
class ArchonClient:
|
|
def __init__(self, base_url: str = "http://localhost:8080"):
|
|
self.base_url = base_url
|
|
self.session = requests.Session()
|
|
|
|
def upload_document(self, file_path: str, knowledge_type: str, tags: List[str] = None) -> Dict[str, Any]:
|
|
"""Upload a document to Archon"""
|
|
with open(file_path, 'rb') as f:
|
|
files = {'file': f}
|
|
data = {
|
|
'knowledge_type': knowledge_type,
|
|
'tags': json.dumps(tags or [])
|
|
}
|
|
response = self.session.post(f"{self.base_url}/api/documents/upload", files=files, data=data)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
def query_knowledge(self, query: str, source: str = None, match_count: int = 5) -> Dict[str, Any]:
|
|
"""Query the knowledge base"""
|
|
payload = {
|
|
"query": query,
|
|
"source": source,
|
|
"match_count": match_count
|
|
}
|
|
response = self.session.post(f"{self.base_url}/api/rag/query", json=payload)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
def start_crawl(self, url: str, knowledge_type: str, tags: List[str] = None, update_frequency: int = 7) -> Dict[str, Any]:
|
|
"""Start smart crawling a website"""
|
|
payload = {
|
|
"url": url,
|
|
"knowledge_type": knowledge_type,
|
|
"tags": tags or [],
|
|
"update_frequency": update_frequency
|
|
}
|
|
response = self.session.post(f"{self.base_url}/api/knowledge-items/crawl", json=payload)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
# Usage example
|
|
client = ArchonClient()
|
|
|
|
# Upload a document
|
|
result = client.upload_document(
|
|
file_path="./python-guide.pdf",
|
|
knowledge_type="technical",
|
|
tags=["python", "programming"]
|
|
)
|
|
print(f"Document uploaded: {result['document']['id']}")
|
|
|
|
# Start smart crawling
|
|
crawl_result = client.start_crawl(
|
|
url="https://docs.python.org/3/tutorial/",
|
|
knowledge_type="technical",
|
|
tags=["python", "tutorial"],
|
|
update_frequency=7
|
|
)
|
|
print(f"Crawling started with progress ID: {crawl_result['progress_id']}")
|
|
|
|
# Query knowledge
|
|
results = client.query_knowledge(
|
|
query="How to handle exceptions in Python?",
|
|
source="docs.python.org"
|
|
)
|
|
print(f"Found {len(results['results'])} relevant documents")
|
|
```
|
|
|
|
### JavaScript/Node.js Example
|
|
|
|
```javascript
|
|
class ArchonClient {
|
|
constructor(baseUrl = 'http://localhost:8080') {
|
|
this.baseUrl = baseUrl;
|
|
}
|
|
|
|
async uploadDocument(file, knowledgeType, tags = []) {
|
|
const formData = new FormData();
|
|
formData.append('file', file);
|
|
formData.append('knowledge_type', knowledgeType);
|
|
formData.append('tags', JSON.stringify(tags));
|
|
|
|
const response = await fetch(`${this.baseUrl}/api/documents/upload`, {
|
|
method: 'POST',
|
|
body: formData
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Upload failed: ${response.statusText}`);
|
|
}
|
|
|
|
return response.json();
|
|
}
|
|
|
|
async queryKnowledge(query, source = null, matchCount = 5) {
|
|
const payload = {
|
|
query,
|
|
source,
|
|
match_count: matchCount
|
|
};
|
|
|
|
const response = await fetch(`${this.baseUrl}/api/rag/query`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify(payload)
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Query failed: ${response.statusText}`);
|
|
}
|
|
|
|
return response.json();
|
|
}
|
|
|
|
async startCrawl(url, knowledgeType, tags = [], updateFrequency = 7) {
|
|
const payload = {
|
|
url,
|
|
knowledge_type: knowledgeType,
|
|
tags,
|
|
update_frequency: updateFrequency
|
|
};
|
|
|
|
const response = await fetch(`${this.baseUrl}/api/knowledge-items/crawl`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify(payload)
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Crawl failed: ${response.statusText}`);
|
|
}
|
|
|
|
return response.json();
|
|
}
|
|
|
|
// Socket.IO connection for real-time updates
|
|
connectToProgress(progressId, onMessage) {
|
|
import { io } from 'socket.io-client';
|
|
const socket = io('/crawl');
|
|
|
|
// Subscribe to progress updates
|
|
socket.emit('subscribe', { progress_id: progressId });
|
|
|
|
socket.on('progress_update', (data) => {
|
|
onMessage(data);
|
|
});
|
|
|
|
socket.on('crawl_completed', (data) => {
|
|
onMessage(data);
|
|
});
|
|
|
|
socket.on('connect_error', (error) => {
|
|
console.error('Socket.IO error:', error);
|
|
};
|
|
|
|
return socket;
|
|
}
|
|
}
|
|
|
|
// Usage example
|
|
const client = new ArchonClient();
|
|
|
|
// Start smart crawling
|
|
client.startCrawl('https://docs.python.org/3/tutorial/', 'technical', ['python', 'tutorial'], 7)
|
|
.then(result => {
|
|
console.log('Crawl started:', result.progress_id);
|
|
|
|
// Connect to progress updates
|
|
const ws = client.connectToProgress(result.progress_id, (progress) => {
|
|
console.log(`Progress: ${progress.percentage}% - ${progress.currentUrl}`);
|
|
console.log(`Status: ${progress.status} - ${progress.log}`);
|
|
|
|
if (progress.status === 'completed') {
|
|
console.log(`Crawl completed! Stored ${progress.chunksStored} chunks`);
|
|
ws.close();
|
|
}
|
|
});
|
|
});
|
|
```
|
|
|
|
---
|
|
|
|
**Next Steps**:
|
|
- Explore [MCP Integration](./mcp-overview) to connect AI clients
|
|
- Learn about [RAG Strategies](./rag) for optimal search performance
|
|
- Check [Socket.IO Communication](./websockets) for real-time features
|
|
- Review [Testing Guide](./testing) for API testing examples |