# Public Agent Management Module

A module for the Agent Framework that enables users to publish their AI agents publicly and provides a listing to view and interact with published agents.

## Features

- Publish agents to make them publicly accessible
- List all published agents
- View details of specific published agents
- Send messages to published agents
- Unpublish agents to hide them from the public listing

## API Endpoints

| Method | Endpoint               | Description                        |
| ------ | ---------------------- | ---------------------------------- |
| GET    | /api/agents/public     | Get all published agents           |
| GET    | /api/agents/public/:id | Get details of a published agent   |
| POST   | /api/agents/:id/publish| Publish an agent                   |
| POST   | /api/agents/:id/unpublish | Unpublish an agent              |
| POST   | /api/agents/:id/message| Send a message to a published agent|

## Database Schema

The module uses the following database schema:

```sql
-- Existing accounts table (referenced only)
CREATE TABLE IF NOT EXISTS "accounts" ( 
  "id" TEXT PRIMARY KEY, 
  "createdAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
  "name" TEXT, 
  "username" TEXT, 
  "email" TEXT, 
  "avatarUrl" TEXT, 
  "details" TEXT DEFAULT '{}' CHECK(json_valid("details")), 
  "character" TEXT CHECK(json_valid("character")),
  "status" TEXT DEFAULT 'active' CHECK(status IN ('active', 'inactive', 'deleted')),
  "createdBy" TEXT DEFAULT 'did:privy:cm6077sr4041241z02cdo6hpv',
  "isExportData" BOOLEAN DEFAULT 0,
  "type" TEXT DEFAULT 'user' CHECK(type IN ('user', 'agent'))
);

-- Public agents table
CREATE TABLE IF NOT EXISTS "public_agents" ( 
  "agentId" TEXT PRIMARY KEY REFERENCES accounts(id) ON DELETE CASCADE, 
  "publishedAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
  "status" TEXT DEFAULT 'published' CHECK(status IN ('published', 'unpublished'))
);
```

## Installation

```bash
pnpm add public-agent-management
```

## Usage

### Backend Setup

```typescript
import express from 'express';
import { initializeBackend } from 'public-agent-management';
import { sqliteAdapter } from '@elizaos/adapter-sqlite';

const app = express();
app.use(express.json());

// Create database adapter
const dbAdapter = sqliteAdapter.createAdapter({
  databasePath: './data/myapp.db',
});

// Initialize the public agent management module
initializeBackend(app, dbAdapter);

app.listen(3000, () => {
  console.log('Server running on port 3000');
});
```

### Environment Variables

Create a `.env` file with the following configuration:

```
AGENT_MESSAGING_ENDPOINT=http://localhost:3001/api/agent/message
```

## API Examples

### Publish an Agent

```bash
curl -X POST http://localhost:3000/api/agents/agent-123/publish
```

### Get Published Agents

```bash
curl http://localhost:3000/api/agents/public
```

### Send a Message to an Agent

```bash
curl -X POST http://localhost:3000/api/agents/agent-123/message \
  -H "Content-Type: application/json" \
  -d '{"message": "Hello, agent!", "userId": "user-456"}'
```

## Development

```bash
# Clone the repository
git clone [repository-url]

# Navigate to the module directory
cd examples/public-agent-management

# Install dependencies
pnpm install

# Start the development server
pnpm run backend
```

## License

MIT 