725 lines
22 KiB
Markdown
725 lines
22 KiB
Markdown
---
|
|
name: Generate Marketplace
|
|
description: Generate marketplace catalog files from Betty Framework registries
|
|
---
|
|
|
|
# generate.marketplace
|
|
|
|
## Overview
|
|
|
|
**generate.marketplace** generates the RiskExec Claude Marketplace catalogs by filtering certified skills, agents, commands, and hooks from the Betty Framework registries. It transforms registry entries into marketplace-ready JSON files optimized for discovery and distribution.
|
|
|
|
## Purpose
|
|
|
|
Automates the generation of marketplace catalogs to maintain consistency between:
|
|
- **Skill Registry** (`registry/skills.json`) - All registered skills
|
|
- **Agent Registry** (`registry/agents.json`) - All registered agents
|
|
- **Command Registry** (`registry/commands.json`) - All registered commands
|
|
- **Hook Registry** (`registry/hooks.json`) - All registered hooks
|
|
- **Skills Marketplace** (`marketplace/skills.json`) - Certified skills for distribution
|
|
- **Agents Marketplace** (`marketplace/agents.json`) - Certified agents for distribution
|
|
- **Commands Marketplace** (`marketplace/commands.json`) - Certified commands for distribution
|
|
- **Hooks Marketplace** (`marketplace/hooks.json`) - Certified hooks for distribution
|
|
|
|
This eliminates manual curation of marketplace catalogs and ensures only production-ready, certified components are published.
|
|
|
|
## What It Does
|
|
|
|
1. **Reads Registries**: Loads `registry/skills.json`, `registry/agents.json`, `registry/commands.json`, and `registry/hooks.json`
|
|
2. **Filters Active Items**: Processes only entries with `status: active`
|
|
3. **Filters Certified Items**: Includes only entries with `certified: true` (if field exists)
|
|
4. **Transforms Format**: Converts registry entries to marketplace format
|
|
5. **Enriches Metadata**: Adds maintainer, usage examples, documentation URLs, and last_updated timestamps
|
|
6. **Generates Catalogs**: Outputs `marketplace/skills.json`, `marketplace/agents.json`, `marketplace/commands.json`, and `marketplace/hooks.json`
|
|
7. **Reports Statistics**: Shows certification counts and totals
|
|
|
|
## Usage
|
|
|
|
### Basic Usage
|
|
|
|
```bash
|
|
python skills/generate.marketplace/generate_marketplace.py
|
|
```
|
|
|
|
No arguments required - reads from standard registry locations.
|
|
|
|
### Via Betty CLI
|
|
|
|
```bash
|
|
/marketplace/generate
|
|
```
|
|
|
|
### Expected Directory Structure
|
|
|
|
```
|
|
betty/
|
|
├── registry/
|
|
│ ├── skills.json # Source: All registered skills
|
|
│ ├── agents.json # Source: All registered agents
|
|
│ ├── commands.json # Source: All registered commands
|
|
│ └── hooks.json # Source: All registered hooks
|
|
└── marketplace/
|
|
├── skills.json # Output: Certified skills only
|
|
├── agents.json # Output: Certified agents only
|
|
├── commands.json # Output: Certified commands only
|
|
└── hooks.json # Output: Certified hooks only
|
|
```
|
|
|
|
## Filtering Logic
|
|
|
|
### Certification Criteria
|
|
|
|
A skill, agent, command, or hook is included in the marketplace if:
|
|
|
|
1. **Status is Active**: `status: "active"`
|
|
2. **Certified Flag** (if present): `certified: true`
|
|
|
|
If the `certified` field is not present, active items are considered certified by default.
|
|
|
|
### Status Values
|
|
|
|
| Status | Included in Marketplace | Purpose |
|
|
|--------|------------------------|---------|
|
|
| `active` | Yes | Production-ready, certified items |
|
|
| `draft` | No | Work in progress, not ready for distribution |
|
|
| `deprecated` | No | Outdated, should not be used |
|
|
| `experimental` | No | Testing phase, unstable |
|
|
|
|
## Output Format
|
|
|
|
### Skills Marketplace Structure
|
|
|
|
```json
|
|
{
|
|
"marketplace_version": "1.0.0",
|
|
"generated_at": "2025-10-23T17:51:58.579847+00:00",
|
|
"last_updated": "2025-10-23T17:51:58.579847+00:00",
|
|
"description": "Betty Framework Certified Skills Marketplace",
|
|
"total_skills": 20,
|
|
"certified_count": 16,
|
|
"draft_count": 4,
|
|
"catalog": [
|
|
{
|
|
"name": "api.validate",
|
|
"version": "0.1.0",
|
|
"description": "Validate OpenAPI and AsyncAPI specifications",
|
|
"status": "certified",
|
|
"tags": ["api", "validation", "openapi"],
|
|
"maintainer": "Betty Core Team",
|
|
"usage_examples": [
|
|
"Validate OpenAPI spec: /skill/api/validate --spec_path api.yaml"
|
|
],
|
|
"documentation_url": "https://betty-framework.dev/docs/skills/api.validate",
|
|
"dependencies": ["context.schema"],
|
|
"entrypoints": [...],
|
|
"inputs": [...],
|
|
"outputs": [...]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Agents Marketplace Structure
|
|
|
|
```json
|
|
{
|
|
"marketplace_version": "1.0.0",
|
|
"generated_at": "2025-10-23T17:03:16.154165+00:00",
|
|
"last_updated": "2025-10-23T17:03:16.154165+00:00",
|
|
"description": "Betty Framework Certified Agents Marketplace",
|
|
"total_agents": 5,
|
|
"certified_count": 3,
|
|
"draft_count": 2,
|
|
"catalog": [
|
|
{
|
|
"name": "api.designer",
|
|
"version": "0.1.0",
|
|
"description": "Design RESTful APIs following enterprise guidelines",
|
|
"status": "certified",
|
|
"reasoning_mode": "iterative",
|
|
"skills_available": ["api.define", "api.validate"],
|
|
"capabilities": [
|
|
"Design RESTful APIs from natural language requirements"
|
|
],
|
|
"tags": ["api", "design", "openapi"],
|
|
"maintainer": "Betty Core Team",
|
|
"documentation_url": "https://betty-framework.dev/docs/agents/api.designer",
|
|
"dependencies": ["context.schema"]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Commands Marketplace Structure
|
|
|
|
```json
|
|
{
|
|
"marketplace_version": "1.0.0",
|
|
"generated_at": "2025-10-23T17:51:58.579847+00:00",
|
|
"last_updated": "2025-10-23T17:51:58.579847+00:00",
|
|
"description": "Betty Framework Certified Commands Marketplace",
|
|
"total_commands": 4,
|
|
"certified_count": 1,
|
|
"draft_count": 3,
|
|
"catalog": [
|
|
{
|
|
"name": "/test-workflow-command",
|
|
"version": "1.0.0",
|
|
"description": "Test complete workflow",
|
|
"status": "certified",
|
|
"tags": ["test", "workflow"],
|
|
"execution": {
|
|
"type": "skill",
|
|
"target": "api.validate"
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "input",
|
|
"type": "string",
|
|
"required": true,
|
|
"description": "Input parameter"
|
|
}
|
|
],
|
|
"maintainer": "Betty Core Team"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Hooks Marketplace Structure
|
|
|
|
```json
|
|
{
|
|
"marketplace_version": "1.0.0",
|
|
"generated_at": "2025-10-23T17:51:58.579847+00:00",
|
|
"last_updated": "2025-10-23T17:51:58.579847+00:00",
|
|
"description": "Betty Framework Certified Hooks Marketplace",
|
|
"total_hooks": 4,
|
|
"certified_count": 1,
|
|
"draft_count": 3,
|
|
"catalog": [
|
|
{
|
|
"name": "test-workflow-hook",
|
|
"version": "1.0.0",
|
|
"description": "Test complete workflow",
|
|
"status": "certified",
|
|
"tags": ["test", "workflow", "openapi"],
|
|
"event": "on_file_edit",
|
|
"command": "python validate.py {file_path}",
|
|
"blocking": true,
|
|
"when": {
|
|
"pattern": "*.openapi.yaml"
|
|
},
|
|
"timeout": 30000,
|
|
"on_failure": "show_errors",
|
|
"maintainer": "Betty Core Team"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Marketplace Transformations
|
|
|
|
### From Registry to Marketplace
|
|
|
|
The skill transforms registry entries to marketplace format:
|
|
|
|
#### Skills and Agents
|
|
|
|
| Registry Field | Marketplace Field | Transformation |
|
|
|----------------|-------------------|----------------|
|
|
| `status: "active"` | `status: "certified"` | Renamed for marketplace context |
|
|
| `name` | `name` | Preserved |
|
|
| `version` | `version` | Preserved |
|
|
| `description` | `description` | Preserved |
|
|
| `tags` | `tags` | Preserved (default: `[]`) |
|
|
| `dependencies` | `dependencies` | Preserved (default: `[]`) |
|
|
| `entrypoints` | `entrypoints` | Preserved (skills only) |
|
|
| `inputs` | `inputs` | Preserved (skills only) |
|
|
| `outputs` | `outputs` | Preserved (skills only) |
|
|
| `skills_available` | `skills_available` | Preserved (agents only) |
|
|
| `capabilities` | `capabilities` | Preserved (agents only) |
|
|
| `reasoning_mode` | `reasoning_mode` | Preserved (agents only) |
|
|
| N/A | `maintainer` | Added (default: "Betty Core Team") |
|
|
| N/A | `usage_examples` | Generated from entrypoints or provided |
|
|
| N/A | `documentation_url` | Generated: `https://betty-framework.dev/docs/{type}/{name}` |
|
|
| N/A | `last_updated` | Added: ISO timestamp |
|
|
|
|
#### Commands
|
|
|
|
| Registry Field | Marketplace Field | Transformation |
|
|
|----------------|-------------------|----------------|
|
|
| `status: "active"` | `status: "certified"` | Renamed for marketplace context |
|
|
| `name` | `name` | Preserved |
|
|
| `version` | `version` | Preserved |
|
|
| `description` | `description` | Preserved |
|
|
| `tags` | `tags` | Preserved (default: `[]`) |
|
|
| `execution` | `execution` | Preserved |
|
|
| `parameters` | `parameters` | Preserved (default: `[]`) |
|
|
| N/A | `maintainer` | Added (default: "Betty Core Team") |
|
|
| N/A | `last_updated` | Added: ISO timestamp |
|
|
|
|
#### Hooks
|
|
|
|
| Registry Field | Marketplace Field | Transformation |
|
|
|----------------|-------------------|----------------|
|
|
| `status: "active"` | `status: "certified"` | Renamed for marketplace context |
|
|
| `name` | `name` | Preserved |
|
|
| `version` | `version` | Preserved |
|
|
| `description` | `description` | Preserved |
|
|
| `tags` | `tags` | Preserved (default: `[]`) |
|
|
| `event` | `event` | Preserved |
|
|
| `command` | `command` | Preserved |
|
|
| `blocking` | `blocking` | Preserved (default: `false`) |
|
|
| `when` | `when` | Preserved (default: `{}`) |
|
|
| `timeout` | `timeout` | Preserved |
|
|
| `on_failure` | `on_failure` | Preserved |
|
|
| N/A | `maintainer` | Added (default: "Betty Core Team") |
|
|
| N/A | `last_updated` | Added: ISO timestamp |
|
|
|
|
### Metadata Enrichment
|
|
|
|
The skill adds marketplace-specific metadata:
|
|
|
|
1. **Maintainer**: Defaults to "Betty Core Team" if not specified
|
|
2. **Usage Examples**: Auto-generated from entrypoint commands if missing (skills only)
|
|
3. **Documentation URL**: Generated following the pattern `https://betty-framework.dev/docs/{skills|agents}/{name}` (skills and agents only)
|
|
4. **Last Updated**: ISO timestamp added to all marketplace files
|
|
5. **Statistics**: Adds total counts, certified counts, and draft counts
|
|
|
|
## Behavior
|
|
|
|
### 1. Registry Loading
|
|
|
|
Reads JSON files from:
|
|
- `registry/skills.json`
|
|
- `registry/agents.json`
|
|
- `registry/commands.json`
|
|
- `registry/hooks.json`
|
|
|
|
If a registry file is missing, the skill fails with an error.
|
|
|
|
### 2. Filtering
|
|
|
|
For each skill/agent/command/hook in the registry:
|
|
- Checks `status` field - must be `"active"`
|
|
- Checks `certified` field (if present) - must be `true`
|
|
- Skips items that don't meet criteria
|
|
- Logs which items are included/excluded
|
|
|
|
### 3. Transformation
|
|
|
|
Converts each certified entry:
|
|
- Copies core fields (name, version, description, tags)
|
|
- Transforms `status: "active"` → `status: "certified"`
|
|
- Adds marketplace metadata (maintainer, last_updated timestamp)
|
|
- For skills: Adds docs URL and generates usage examples if not provided
|
|
- For agents: Adds docs URL
|
|
- Preserves all technical details (entrypoints, inputs, outputs, execution, parameters, event, command, etc.)
|
|
|
|
### 4. Statistics Calculation
|
|
|
|
Tracks:
|
|
- **Total items**: All items in registry
|
|
- **Certified count**: Items included in marketplace
|
|
- **Draft count**: Items excluded (total - certified)
|
|
|
|
### 5. File Writing
|
|
|
|
Writes marketplace catalogs:
|
|
- Creates `marketplace/` directory if needed
|
|
- Formats JSON with 2-space indentation
|
|
- Preserves Unicode characters (no ASCII escaping)
|
|
- Adds generation timestamp
|
|
|
|
## Outputs
|
|
|
|
### Success Response
|
|
|
|
```json
|
|
{
|
|
"ok": true,
|
|
"status": "success",
|
|
"skills_output": "/home/user/betty/marketplace/skills.json",
|
|
"agents_output": "/home/user/betty/marketplace/agents.json",
|
|
"commands_output": "/home/user/betty/marketplace/commands.json",
|
|
"hooks_output": "/home/user/betty/marketplace/hooks.json",
|
|
"skills_certified": 16,
|
|
"skills_total": 20,
|
|
"agents_certified": 3,
|
|
"agents_total": 5,
|
|
"commands_certified": 1,
|
|
"commands_total": 4,
|
|
"hooks_certified": 1,
|
|
"hooks_total": 4
|
|
}
|
|
```
|
|
|
|
### Failure Response
|
|
|
|
```json
|
|
{
|
|
"ok": false,
|
|
"status": "failed",
|
|
"error": "Registry file not found: /home/user/betty/registry/skills.json"
|
|
}
|
|
```
|
|
|
|
## Examples
|
|
|
|
### Example 1: Basic Marketplace Generation
|
|
|
|
**Scenario**: Generate marketplace catalogs after adding new certified skills
|
|
|
|
```bash
|
|
# Register new skills
|
|
/skill/define skills/data.transform/skill.yaml
|
|
/skill/define skills/api.monitor/skill.yaml
|
|
|
|
# Update registry
|
|
/registry/update
|
|
|
|
# Generate marketplace
|
|
/marketplace/generate
|
|
```
|
|
|
|
**Output**:
|
|
```
|
|
INFO: Starting marketplace catalog generation from registries...
|
|
INFO: Loading registry files...
|
|
INFO: Generating marketplace catalogs...
|
|
INFO: Added certified skill: api.validate
|
|
INFO: Added certified skill: api.define
|
|
INFO: Skipped non-certified skill: test.hello (status: draft)
|
|
INFO: Added certified agent: api.designer
|
|
INFO: Added certified command: /test-workflow-command
|
|
INFO: Skipped non-certified command: /test-command (status: draft)
|
|
INFO: Added certified hook: test-workflow-hook
|
|
INFO: Skipped non-certified hook: test-validation-hook (status: draft)
|
|
INFO: Writing marketplace files...
|
|
INFO: ✅ Written marketplace file to /home/user/betty/marketplace/skills.json
|
|
INFO: ✅ Written marketplace file to /home/user/betty/marketplace/agents.json
|
|
INFO: ✅ Written marketplace file to /home/user/betty/marketplace/commands.json
|
|
INFO: ✅ Written marketplace file to /home/user/betty/marketplace/hooks.json
|
|
INFO: ✅ Generated marketplace catalogs:
|
|
INFO: Skills: 16/20 certified
|
|
INFO: Agents: 3/5 certified
|
|
INFO: Commands: 1/4 certified
|
|
INFO: Hooks: 1/4 certified
|
|
```
|
|
|
|
### Example 2: After Promoting Skills to Active
|
|
|
|
**Scenario**: Skills were marked as active and should now appear in marketplace
|
|
|
|
```bash
|
|
# Edit registry to mark skills as active
|
|
# (Normally done via skill.define)
|
|
|
|
# Regenerate marketplace
|
|
/marketplace/generate
|
|
```
|
|
|
|
**Before** (registry):
|
|
```json
|
|
{
|
|
"name": "my.skill",
|
|
"status": "draft"
|
|
}
|
|
```
|
|
|
|
**After** (registry updated):
|
|
```json
|
|
{
|
|
"name": "my.skill",
|
|
"status": "active"
|
|
}
|
|
```
|
|
|
|
**Marketplace** (now includes):
|
|
```json
|
|
{
|
|
"name": "my.skill",
|
|
"status": "certified"
|
|
}
|
|
```
|
|
|
|
### Example 3: Publishing to GitHub Pages
|
|
|
|
**Scenario**: Deploy marketplace catalogs to public API endpoint
|
|
|
|
```bash
|
|
# Generate marketplace
|
|
/marketplace/generate
|
|
|
|
# Copy to GitHub Pages directory
|
|
cp marketplace/*.json docs/api/v1/
|
|
|
|
# Commit and push
|
|
git add marketplace/ docs/api/v1/
|
|
git commit -m "Update marketplace catalog"
|
|
git push
|
|
```
|
|
|
|
Now accessible at:
|
|
- `https://riskexec.github.io/betty/api/v1/skills.json`
|
|
- `https://riskexec.github.io/betty/api/v1/agents.json`
|
|
- `https://riskexec.github.io/betty/api/v1/commands.json`
|
|
- `https://riskexec.github.io/betty/api/v1/hooks.json`
|
|
|
|
### Example 4: CI/CD Integration
|
|
|
|
**Scenario**: Auto-generate marketplace on every registry change
|
|
|
|
```yaml
|
|
# .github/workflows/marketplace.yml
|
|
name: Update Marketplace
|
|
on:
|
|
push:
|
|
paths:
|
|
- 'registry/*.json'
|
|
|
|
jobs:
|
|
generate:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Generate Marketplace
|
|
run: python skills/generate.marketplace/generate_marketplace.py
|
|
- name: Commit Changes
|
|
run: |
|
|
git config user.name "Betty Bot"
|
|
git config user.email "bot@riskexec.com"
|
|
git add marketplace/
|
|
git commit -m "chore: update marketplace catalog"
|
|
git push
|
|
```
|
|
|
|
## Integration
|
|
|
|
### With skill.define Workflow
|
|
|
|
After registering skills, regenerate marketplace:
|
|
|
|
```bash
|
|
/skill/define skills/new.skill/skill.yaml
|
|
/registry/update
|
|
/marketplace/generate
|
|
```
|
|
|
|
### With Workflows
|
|
|
|
Include marketplace generation as a workflow step:
|
|
|
|
```yaml
|
|
# workflows/skill_lifecycle.yaml
|
|
steps:
|
|
- skill: skill.create
|
|
args: ["new.skill", "Description"]
|
|
|
|
- skill: skill.define
|
|
args: ["skills/new.skill/skill.yaml"]
|
|
|
|
- skill: registry.update
|
|
args: ["skills/new.skill/skill.yaml"]
|
|
|
|
- skill: generate.marketplace
|
|
args: []
|
|
```
|
|
|
|
### With Hooks
|
|
|
|
Auto-regenerate marketplace when registries change:
|
|
|
|
```yaml
|
|
# .claude/hooks.yaml
|
|
- event: on_file_save
|
|
pattern: "registry/*.json"
|
|
command: python skills/generate.marketplace/generate_marketplace.py
|
|
blocking: false
|
|
description: Auto-regenerate marketplace when registry changes
|
|
```
|
|
|
|
## What Gets Included
|
|
|
|
### Included in Marketplace
|
|
|
|
- Skills/agents/commands/hooks with `status: "active"`
|
|
- Skills/agents/commands/hooks with `certified: true` (if field exists)
|
|
- All technical metadata (entrypoints, inputs, outputs, execution, parameters, event, command, etc.)
|
|
- All semantic metadata (tags, dependencies)
|
|
- Last updated timestamp for all entries
|
|
|
|
### Not Included
|
|
|
|
- Skills/agents/commands/hooks with `status: "draft"`
|
|
- Skills/agents/commands/hooks with `status: "deprecated"`
|
|
- Skills/agents/commands/hooks with `certified: false`
|
|
- Internal-only items
|
|
- Test/experimental items (unless marked active)
|
|
|
|
## Common Errors
|
|
|
|
| Error | Cause | Solution |
|
|
|-------|-------|----------|
|
|
| "Registry file not found" | Missing registry file | Ensure `registry/skills.json` and `registry/agents.json` exist |
|
|
| "Failed to parse JSON" | Invalid JSON syntax | Fix JSON syntax in registry files |
|
|
| "Permission denied" | Cannot write marketplace files | Check write permissions on `marketplace/` directory |
|
|
| Empty marketplace | No active skills | Mark skills as `status: "active"` in registry |
|
|
|
|
## Files Read
|
|
|
|
- `registry/skills.json` - Skill registry (source)
|
|
- `registry/agents.json` - Agent registry (source)
|
|
- `registry/commands.json` - Command registry (source)
|
|
- `registry/hooks.json` - Hook registry (source)
|
|
|
|
## Files Modified
|
|
|
|
- `marketplace/skills.json` - Skills marketplace catalog (output)
|
|
- `marketplace/agents.json` - Agents marketplace catalog (output)
|
|
- `marketplace/commands.json` - Commands marketplace catalog (output)
|
|
- `marketplace/hooks.json` - Hooks marketplace catalog (output)
|
|
|
|
## Exit Codes
|
|
|
|
- **0**: Success (marketplace catalogs generated successfully)
|
|
- **1**: Failure (error during generation)
|
|
|
|
## Logging
|
|
|
|
Logs generation progress:
|
|
|
|
```
|
|
INFO: Starting marketplace catalog generation from registries...
|
|
INFO: Loading registry files...
|
|
INFO: Generating marketplace catalogs...
|
|
INFO: Added certified skill: api.validate
|
|
INFO: Added certified skill: hook.define
|
|
DEBUG: Skipped non-certified skill: test.hello (status: draft)
|
|
INFO: Added certified agent: api.designer
|
|
INFO: Added certified command: /test-workflow-command
|
|
DEBUG: Skipped non-certified command: /test-command (status: draft)
|
|
INFO: Added certified hook: test-workflow-hook
|
|
DEBUG: Skipped non-certified hook: test-validation-hook (status: draft)
|
|
INFO: Writing marketplace files...
|
|
INFO: ✅ Written marketplace file to marketplace/skills.json
|
|
INFO: ✅ Written marketplace file to marketplace/agents.json
|
|
INFO: ✅ Written marketplace file to marketplace/commands.json
|
|
INFO: ✅ Written marketplace file to marketplace/hooks.json
|
|
INFO: ✅ Generated marketplace catalogs:
|
|
INFO: Skills: 16/20 certified
|
|
INFO: Agents: 3/5 certified
|
|
INFO: Commands: 1/4 certified
|
|
INFO: Hooks: 1/4 certified
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Run After Registry Updates**: Regenerate marketplace after adding/updating skills
|
|
2. **Automate with CI/CD**: Set up automated marketplace generation in pipelines
|
|
3. **Review Before Publishing**: Check generated catalogs before deploying
|
|
4. **Version Control**: Commit marketplace files with registry changes
|
|
5. **Keep Registries Clean**: Remove deprecated skills to keep marketplace focused
|
|
6. **Document Thoroughly**: Ensure skills have good descriptions and examples
|
|
|
|
## Troubleshooting
|
|
|
|
### Marketplace Files Not Updating
|
|
|
|
**Problem**: Changes to registry don't appear in marketplace
|
|
|
|
**Solutions**:
|
|
- Ensure skill status is `"active"` in registry
|
|
- Check that `certified` field is `true` (if present)
|
|
- Run `/registry/update` before `/marketplace/generate`
|
|
- Verify registry JSON syntax is valid
|
|
|
|
### Skills Missing from Marketplace
|
|
|
|
**Problem**: Active skills not appearing in marketplace
|
|
|
|
**Solutions**:
|
|
- Check skill status in `registry/skills.json`
|
|
- Verify no `certified: false` field
|
|
- Ensure skill.yaml has been validated with `/skill/define`
|
|
- Check logs for filtering messages
|
|
|
|
### Empty Marketplace Catalogs
|
|
|
|
**Problem**: Marketplace has 0 certified items
|
|
|
|
**Solutions**:
|
|
- Mark skills as `status: "active"` in registry
|
|
- Remove `certified: false` from skill entries
|
|
- Ensure registry files are not empty
|
|
- Run `/skill/define` to register skills first
|
|
|
|
## Version Diff (Optional)
|
|
|
|
To add version diff vs. last release:
|
|
|
|
```python
|
|
# Future enhancement
|
|
def get_version_diff(old_marketplace, new_marketplace):
|
|
"""Compare two marketplace versions and return diff."""
|
|
added = [s for s in new if s not in old]
|
|
removed = [s for s in old if s not in new]
|
|
updated = [s for s in new if s in old and version_changed(s)]
|
|
return {"added": added, "removed": removed, "updated": updated}
|
|
```
|
|
|
|
## Upload to API (Optional)
|
|
|
|
To upload generated catalogs to an API:
|
|
|
|
```python
|
|
# Future enhancement
|
|
import requests
|
|
|
|
def upload_to_api(marketplace_data, api_endpoint, api_key):
|
|
"""Upload marketplace catalog to internal API."""
|
|
response = requests.post(
|
|
api_endpoint,
|
|
json=marketplace_data,
|
|
headers={"Authorization": f"Bearer {api_key}"}
|
|
)
|
|
return response.status_code == 200
|
|
```
|
|
|
|
## Architecture
|
|
|
|
### Skill Categories
|
|
|
|
**Infrastructure** - generate.marketplace maintains the marketplace layer by transforming registry state into certified catalogs.
|
|
|
|
### Design Principles
|
|
|
|
- **Single Source of Truth**: Registry files are the source
|
|
- **Idempotent**: Can be run multiple times safely
|
|
- **Certification Filter**: Only production-ready items included
|
|
- **Metadata Enrichment**: Adds marketplace-specific fields
|
|
- **Clear Statistics**: Reports certification rates
|
|
|
|
## See Also
|
|
|
|
- **plugin.sync** - Generate plugin.yaml from registries ([SKILL.md](../plugin.sync/SKILL.md))
|
|
- **registry.update** - Update skill registry ([SKILL.md](../registry.update/SKILL.md))
|
|
- **skill.define** - Validate and register skills ([SKILL.md](../skill.define/SKILL.md))
|
|
- **Betty Architecture** - Framework overview ([betty-architecture.md](../../docs/betty-architecture.md))
|
|
|
|
## Dependencies
|
|
|
|
- **registry.update**: Registry management
|
|
- **betty.config**: Configuration constants and paths
|
|
- **betty.logging_utils**: Logging infrastructure
|
|
|
|
## Status
|
|
|
|
**Active** - Production-ready infrastructure skill
|
|
|
|
## Version History
|
|
|
|
- **0.2.0** (Oct 2025) - Added support for commands and hooks, added last_updated timestamps
|
|
- **0.1.0** (Oct 2025) - Initial implementation with filtering and marketplace generation for skills and agents
|