CmdForge/olddocs/COLLECTIONS.md

224 lines
5.9 KiB
Markdown

# CmdForge Collections
> **Document Status (January 2026)**: Collections are fully implemented:
> - ✅ API endpoints (`/api/v1/collections`, `/api/v1/admin/collections`)
> - ✅ Web UI pages (`/collections`, `/collections/:name`)
> - ✅ Admin management UI (`/dashboard/admin/collections`)
> - ✅ Database schema
> - ✅ CLI commands (`cmdforge collections list/info/install`)
> - ❌ Registry repo sync - Not implemented (collections managed via admin UI)
Collections are curated groups of tools that can be installed together with a single command.
## Use Cases
1. **Thematic bundles**: "writing-toolkit" with grammar, tone, simplify tools
2. **Application stacks**: "data-science" with json-extract, csv-insights, etc.
3. **Source bundles**: "fabric-text" with all Fabric text processing patterns
4. **Workflow packages**: Tools that work well together for a specific task
## CLI Usage
```bash
# List available collections
cmdforge collections list
# List in JSON format
cmdforge collections list --json
# View collection details
cmdforge collections info writing-toolkit
# View details in JSON format
cmdforge collections info writing-toolkit --json
# Install all tools in a collection
cmdforge collections install writing-toolkit
# Install with pinned versions from collection
cmdforge collections install writing-toolkit --pinned
```
### Example Output
```
$ cmdforge collections list
Available collections (1):
development-hub
Development-Hub
Collection of tools for the development-hub application.
Tools: 2
Install a collection with: cmdforge collections install <name>
```
```
$ cmdforge collections info development-hub
Development-Hub
==================================================
Collection of tools for the development-hub application.
Maintainer: official
Tags: Development, Coding, Programming
Tools (2):
- rob/audit-goals
- rob/realign-goals
Install all: cmdforge collections install development-hub
```
## Admin Management
Collections are managed via the admin dashboard at `/dashboard/admin/collections`.
### Admin UI Features
- **List collections**: View all collections with tool counts and tags
- **Create collection**: Add new collection with name, display name, description, tools
- **Edit collection**: Update existing collection details and tool list
- **Delete collection**: Remove a collection (does not uninstall tools)
### Admin API Endpoints
```
GET /api/v1/admin/collections # List all collections (admin)
POST /api/v1/admin/collections # Create collection (admin)
PUT /api/v1/admin/collections/:name # Update collection (admin)
DELETE /api/v1/admin/collections/:name # Delete collection (admin)
```
### Creating a Collection via API
```bash
curl -X POST https://cmdforge.brrd.tech/api/v1/admin/collections \
-H "Authorization: Bearer <admin-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "writing-toolkit",
"display_name": "Writing Toolkit",
"description": "Essential tools for writers",
"maintainer": "official",
"tools": ["official/fix-grammar", "official/simplify"],
"pinned": {"official/fix-grammar": "1.0.0"},
"tags": ["writing", "editing"]
}'
```
## Public API Endpoints
```
GET /api/v1/collections # List all collections (summary)
GET /api/v1/collections/:name # Get collection details with tool info
```
### List Response
```json
{
"data": [
{
"name": "writing-toolkit",
"display_name": "Writing Toolkit",
"description": "Essential tools for writers",
"maintainer": "official",
"icon": "pencil",
"tags": ["writing", "editing"],
"tool_count": 5
}
]
}
```
### Detail Response
```json
{
"data": {
"name": "writing-toolkit",
"display_name": "Writing Toolkit",
"description": "Essential tools for writers",
"maintainer": "official",
"icon": "pencil",
"tags": ["writing", "editing"],
"tools": [
{
"owner": "official",
"name": "fix-grammar",
"version": "1.0.0",
"description": "Fix grammar issues in text",
"category": "Writing",
"downloads": 150,
"pinned_version": "1.0.0"
}
]
}
}
```
## Database Schema
```sql
CREATE TABLE collections (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE NOT NULL,
display_name TEXT NOT NULL,
description TEXT,
icon TEXT,
maintainer TEXT NOT NULL,
tools TEXT NOT NULL, -- JSON array of tool refs (e.g., ["owner/name"])
pinned TEXT, -- JSON object of version constraints
tags TEXT, -- JSON array
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_collections_name ON collections(name);
CREATE INDEX idx_collections_maintainer ON collections(maintainer);
```
## Collection Manifest Format
For reference, collections can be defined in YAML format:
```yaml
# collections/writing-toolkit.yaml
name: writing-toolkit
display_name: Writing Toolkit
description: Essential tools for writers and editors
icon: pencil # Optional icon identifier
maintainer: official # Publisher who maintains this collection
tools:
- official/fix-grammar
- official/simplify
- official/tone-shift
- official/expand
- official/proofread
# Optional: version constraints
pinned:
official/fix-grammar: "1.0.0"
tags:
- writing
- editing
- grammar
```
## Web UI
- `/collections` - Browse all collections
- `/collections/:name` - Collection detail page with tool grid
- Install button that shows CLI command
- Filter by tag, maintainer
## Implementation Files
- **CLI**: `src/cmdforge/cli/collections_commands.py`
- **Registry Client**: `src/cmdforge/registry_client.py` (`get_collections`, `get_collection`)
- **API**: `src/cmdforge/registry/app.py` (public and admin endpoints)
- **Admin Templates**: `src/cmdforge/web/templates/admin/collections.html`, `collection_form.html`