mirror of
https://github.com/Heretek-AI/heretek-openclaw.git
synced 2026-07-01 12:23:18 -04:00
P4: Complete sanity test, gap analysis, GitHub Pages restructure, CI/CD fixes
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"version": "0.2",
|
||||
"language": "en",
|
||||
"words": [
|
||||
"heretek",
|
||||
"openclaw",
|
||||
"litellm",
|
||||
"pgvector",
|
||||
"postgres",
|
||||
"langfuse",
|
||||
"ollama",
|
||||
"minimax",
|
||||
"redis",
|
||||
"websockets",
|
||||
"jsonl",
|
||||
"codegen",
|
||||
"vectorstore",
|
||||
"upsert",
|
||||
"backoff",
|
||||
"ratelimit",
|
||||
"proxmox",
|
||||
"shadcn",
|
||||
"tailwindcss",
|
||||
"radix",
|
||||
"cmdk",
|
||||
"nuqs",
|
||||
"sonner",
|
||||
"framer",
|
||||
"lucide",
|
||||
"clsx",
|
||||
"vite",
|
||||
"vitest",
|
||||
"playwright",
|
||||
"eslint",
|
||||
"prettier",
|
||||
"typescript",
|
||||
"nextjs",
|
||||
"markdownlint",
|
||||
"lychee",
|
||||
"gitleaks",
|
||||
"trivy",
|
||||
"trufflehog",
|
||||
"codeql",
|
||||
"dockerfile",
|
||||
"dockerfiles",
|
||||
"containerd",
|
||||
"kubernetes",
|
||||
"helmfile",
|
||||
"kubeconfig",
|
||||
"ingress",
|
||||
"servicemonitor",
|
||||
"grafana",
|
||||
"prometheus"
|
||||
],
|
||||
"ignorePaths": [
|
||||
"node_modules/",
|
||||
"dist/",
|
||||
"build/",
|
||||
"coverage/",
|
||||
"*.lock",
|
||||
"*.min.js",
|
||||
"*.bundle.js",
|
||||
"package-lock.json",
|
||||
"frontend/bun.lock",
|
||||
"frontend/package-lock.json",
|
||||
".git/",
|
||||
".vscode/",
|
||||
"*.svg",
|
||||
"*.png",
|
||||
"*.jpg",
|
||||
"*.jpeg",
|
||||
"*.gif"
|
||||
],
|
||||
"useGitignore": true
|
||||
}
|
||||
@@ -43,8 +43,11 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: npm ci --ignore-scripts
|
||||
|
||||
- name: Install markdownlint-cli
|
||||
run: npm install --legacy-peer-deps markdownlint-cli
|
||||
|
||||
- name: Run markdownlint
|
||||
run: npm run ci:docs
|
||||
run: npx markdownlint '**/*.md' --ignore node_modules --config .markdownlint.json
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Link Checking
|
||||
@@ -91,7 +94,7 @@ jobs:
|
||||
run: npm install --legacy-peer-deps cspell
|
||||
|
||||
- name: Run cspell
|
||||
run: npx cspell "**/*.md" --no-progress
|
||||
run: npx cspell "**/*.md" --no-progress --config .cspell.json
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Table of Contents Validation
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
# Based on https://github.com/actions/starter-workflows/blob/main/pages/nextjs.yml
|
||||
|
||||
name: Frontend CI/CD
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["main"]
|
||||
paths:
|
||||
- frontend/**
|
||||
|
||||
pull_request:
|
||||
branches: ["main"]
|
||||
types: [opened, synchronize, reopened, edited]
|
||||
paths:
|
||||
- frontend/**
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: pages-${{ github.ref }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
test-json-files:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: frontend
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.x"
|
||||
|
||||
- name: Test JSON files
|
||||
run: |
|
||||
python3 << 'EOF'
|
||||
import json
|
||||
import glob
|
||||
import os
|
||||
import sys
|
||||
|
||||
def test_json_files():
|
||||
# Change to the correct directory
|
||||
json_dir = "public/json"
|
||||
if not os.path.exists(json_dir):
|
||||
print(f"⚠️ No JSON directory found at {json_dir} (optional)")
|
||||
return True
|
||||
|
||||
# Find all JSON files
|
||||
pattern = os.path.join(json_dir, "*.json")
|
||||
json_files = glob.glob(pattern)
|
||||
|
||||
if not json_files:
|
||||
print(f"⚠️ No JSON files found in {json_dir}")
|
||||
return True
|
||||
|
||||
print(f"Testing {len(json_files)} JSON files for valid syntax...")
|
||||
|
||||
invalid_files = []
|
||||
|
||||
for file_path in json_files:
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
json.load(f)
|
||||
print(f"✅ Valid JSON: {file_path}")
|
||||
except json.JSONDecodeError as e:
|
||||
print(f"❌ Invalid JSON syntax in: {file_path}")
|
||||
print(f" Error: {e}")
|
||||
invalid_files.append(file_path)
|
||||
except Exception as e:
|
||||
print(f"⚠️ Error reading: {file_path}")
|
||||
print(f" Error: {e}")
|
||||
invalid_files.append(file_path)
|
||||
|
||||
print("\n=== JSON Validation Summary ===")
|
||||
print(f"Total files tested: {len(json_files)}")
|
||||
print(f"Valid files: {len(json_files) - len(invalid_files)}")
|
||||
print(f"Invalid files: {len(invalid_files)}")
|
||||
|
||||
if invalid_files:
|
||||
print("\n❌ Found invalid JSON file(s):")
|
||||
for file_path in invalid_files:
|
||||
print(f" - {file_path}")
|
||||
return False
|
||||
else:
|
||||
print("\n✅ All JSON files have valid syntax!")
|
||||
return True
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = test_json_files()
|
||||
sys.exit(0 if success else 1)
|
||||
EOF
|
||||
|
||||
build:
|
||||
if: github.repository == 'heretek/heretek-openclaw'
|
||||
needs: test-json-files
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: frontend
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
cache-dependency-path: 'frontend/package-lock.json'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci --legacy-peer-deps
|
||||
|
||||
- name: Configure Next.js for pages
|
||||
uses: actions/configure-pages@v5
|
||||
with:
|
||||
static_site_generator: next
|
||||
|
||||
- name: Build with Next.js
|
||||
run: npm run build
|
||||
|
||||
- name: Upload artifact
|
||||
if: github.ref == 'refs/heads/main'
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
path: frontend/out
|
||||
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
if: github.ref == 'refs/heads/main' && github.repository == 'heretek/heretek-openclaw'
|
||||
permissions:
|
||||
pages: write
|
||||
id-token: write
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
+23
-28
@@ -1,34 +1,29 @@
|
||||
# Lychee Link Checker Exclusions
|
||||
# This file excludes URLs that should not be checked
|
||||
|
||||
# Localhost URLs (not accessible from CI)
|
||||
localhost:*
|
||||
127.0.0.1:*
|
||||
0.0.0.0:*
|
||||
# Ignore localhost URLs
|
||||
http://localhost:*
|
||||
https://localhost:*
|
||||
ws://localhost:*
|
||||
wss://localhost:*
|
||||
127.0.0.1:*
|
||||
|
||||
# Docker internal hostnames
|
||||
http://litellm:*
|
||||
http://redis:*
|
||||
http://postgres:*
|
||||
http://neo4j:*
|
||||
http://ollama:*
|
||||
http://heretek-*
|
||||
|
||||
# Relative paths to non-existent modules/memory/ files
|
||||
modules/memory/*
|
||||
|
||||
# Relative paths to non-existent session-manager.js
|
||||
**/session-manager.js
|
||||
|
||||
# External URLs that are expected to fail or are not accessible
|
||||
# Ignore internal network URLs
|
||||
http://192.168.*
|
||||
http://10.*
|
||||
http://172.*
|
||||
|
||||
# GitHub anchors that may not exist
|
||||
# (lychee sometimes fails on anchor links)
|
||||
**/*.md#*
|
||||
# Ignore GitHub edit URLs
|
||||
github.com/*edit*
|
||||
github.com/*blob*
|
||||
github.com/*tree*
|
||||
|
||||
# Ignore anchor links
|
||||
#*
|
||||
|
||||
# Ignore relative markdown links
|
||||
*.md
|
||||
*.md#*
|
||||
|
||||
# Ignore API endpoints
|
||||
/api/*
|
||||
/v1/*
|
||||
|
||||
# Ignore placeholder URLs
|
||||
example.com
|
||||
example.org
|
||||
your-domain.com
|
||||
|
||||
+10
-44
@@ -1,51 +1,17 @@
|
||||
{
|
||||
"default": true,
|
||||
"MD001": true,
|
||||
"MD003": {
|
||||
"style": "atx"
|
||||
"MD013": {
|
||||
"line_length": 1000,
|
||||
"tables": false,
|
||||
"code_blocks": false
|
||||
},
|
||||
"MD033": false,
|
||||
"MD041": false,
|
||||
"MD036": false,
|
||||
"MD024": {
|
||||
"siblings_only": true
|
||||
},
|
||||
"MD004": {
|
||||
"style": "dash"
|
||||
},
|
||||
"MD007": {
|
||||
"indent": 2
|
||||
},
|
||||
"MD013": {
|
||||
"line_length": 120,
|
||||
"code_block_line_length": 120,
|
||||
"tables": false,
|
||||
"headings": false
|
||||
},
|
||||
"MD024": {
|
||||
"siblings_only": true,
|
||||
"allow_different_nesting": true
|
||||
},
|
||||
"MD025": false,
|
||||
"MD026": {
|
||||
"punctuation": ".,;:!"
|
||||
},
|
||||
"MD029": {
|
||||
"style": "ordered"
|
||||
},
|
||||
"MD033": false,
|
||||
"MD034": true,
|
||||
"MD035": {
|
||||
"style": "---"
|
||||
},
|
||||
"MD040": true,
|
||||
"MD041": false,
|
||||
"MD045": true,
|
||||
"MD046": {
|
||||
"style": "fenced"
|
||||
},
|
||||
"MD047": true,
|
||||
"MD048": {
|
||||
"style": "backtick"
|
||||
},
|
||||
"MD049": {
|
||||
"style": "asterisk"
|
||||
},
|
||||
"MD050": {
|
||||
"style": "asterisk"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -479,4 +479,42 @@ MIT License - See [LICENSE](LICENSE)
|
||||
|
||||
---
|
||||
|
||||
## GitHub Secrets Required
|
||||
|
||||
The following GitHub secrets must be configured for CI/CD workflows to function properly:
|
||||
|
||||
| Secret | Purpose | Workflow | Required |
|
||||
|--------|---------|----------|----------|
|
||||
| `GITHUB_TOKEN` | Auto-generated by GitHub | All workflows | Yes (automatic) |
|
||||
| `GITLEAKS_LICENSE` | Gitleaks license key for secrets detection | Security workflow | Yes |
|
||||
| `STAGING_KUBECONFIG` | Kubernetes config for staging environment | Deploy workflow | No (optional) |
|
||||
| `PRODUCTION_KUBECONFIG` | Kubernetes config for production environment | Deploy workflow | No (optional) |
|
||||
|
||||
### Configuring Secrets
|
||||
|
||||
1. Go to your repository on GitHub
|
||||
2. Navigate to **Settings** > **Secrets and variables** > **Actions**
|
||||
3. Click **New repository secret**
|
||||
4. Add each secret with its name and value
|
||||
|
||||
### Obtaining Gitleaks License
|
||||
|
||||
1. Visit [Gitleaks GitHub Marketplace](https://github.com/marketplace/actions/gitleaks)
|
||||
2. Sign up for a free license
|
||||
3. Add the license key as `GITLEAKS_LICENSE` secret
|
||||
|
||||
---
|
||||
|
||||
## CI/CD Workflows
|
||||
|
||||
| Workflow | File | Description |
|
||||
|----------|------|-------------|
|
||||
| **Test** | [`.github/workflows/test.yml`](.github/workflows/test.yml) | TypeScript, ESLint, Prettier, Vitest tests |
|
||||
| **Deploy** | [`.github/workflows/deploy.yml`](.github/workflows/deploy.yml) | Docker build and Kubernetes deployment |
|
||||
| **Security** | [`.github/workflows/security.yml`](.github/workflows/security.yml) | NPM audit, Gitleaks, CodeQL, Trivy scans |
|
||||
| **Docs** | [`.github/workflows/docs.yml`](.github/workflows/docs.yml) | Markdown linting, link checking, spell checking |
|
||||
| **Frontend CI/CD** | [`.github/workflows/frontend-cicd.yml`](.github/workflows/frontend-cicd.yml) | Frontend build and GitHub Pages deployment |
|
||||
|
||||
---
|
||||
|
||||
🦞 *The thought that never ends.*
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
# GitHub Pages Setup Guide
|
||||
|
||||
This document describes how to configure and deploy the Heretek OpenClaw frontend to GitHub Pages.
|
||||
|
||||
## Overview
|
||||
|
||||
The frontend is built with Next.js and configured for static site export. It is deployed to GitHub Pages using GitHub Actions.
|
||||
|
||||
## Configuration
|
||||
|
||||
### 1. Repository Settings
|
||||
|
||||
1. Go to your repository on GitHub
|
||||
2. Navigate to **Settings** > **Pages**
|
||||
3. Under **Source**, select **GitHub Actions** (not "Deploy from a branch")
|
||||
|
||||
### 2. Environment Configuration
|
||||
|
||||
The GitHub Pages environment must be configured:
|
||||
|
||||
1. Go to **Settings** > **Environments**
|
||||
2. Create a new environment named `github-pages`
|
||||
3. No special configuration is needed for public repositories
|
||||
|
||||
### 3. Base Path Configuration
|
||||
|
||||
The application is configured with a base path in `frontend/next.config.mjs`:
|
||||
|
||||
```javascript
|
||||
const nextConfig = {
|
||||
output: "export",
|
||||
basePath: "/heretek-openclaw",
|
||||
images: {
|
||||
unoptimized: true
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
**Important:** If you change the repository name, update the `basePath` to match.
|
||||
|
||||
## Deployment Workflow
|
||||
|
||||
The deployment is handled by the `.github/workflows/frontend-cicd.yml` workflow:
|
||||
|
||||
1. **Trigger:** Push to `main` branch with changes in `frontend/` directory
|
||||
2. **Build:** Next.js static export to `frontend/out`
|
||||
3. **Deploy:** Upload to GitHub Pages
|
||||
|
||||
### Manual Deployment
|
||||
|
||||
To trigger a manual deployment:
|
||||
|
||||
1. Go to **Actions** > **Frontend CI/CD**
|
||||
2. Click **Run workflow**
|
||||
3. Select the `main` branch
|
||||
4. Click **Run workflow**
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
frontend/
|
||||
├── src/
|
||||
│ ├── app/ # Next.js App Router pages
|
||||
│ ├── components/ # Reusable React components
|
||||
│ ├── lib/ # Utility functions
|
||||
│ └── styles/ # Global styles
|
||||
├── public/
|
||||
│ └── json/ # Static JSON files
|
||||
├── next.config.mjs # Next.js configuration
|
||||
├── package.json # Dependencies and scripts
|
||||
├── tailwind.config.ts # Tailwind CSS configuration
|
||||
└── tsconfig.json # TypeScript configuration
|
||||
```
|
||||
|
||||
## Local Development
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Open http://localhost:3000 to view the development server.
|
||||
|
||||
## Building for Production
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm run build
|
||||
```
|
||||
|
||||
The output will be in `frontend/out/`.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### 404 Errors After Deployment
|
||||
|
||||
1. Check that `basePath` in `next.config.mjs` matches your repository name
|
||||
2. Ensure the workflow completed successfully
|
||||
3. Check the GitHub Pages environment configuration
|
||||
|
||||
### Build Failures
|
||||
|
||||
1. Check the Actions log for specific errors
|
||||
2. Verify all dependencies are in `package.json`
|
||||
3. Run `npm run build` locally to reproduce the issue
|
||||
|
||||
### Missing Assets
|
||||
|
||||
1. Ensure assets are in `frontend/public/`
|
||||
2. Check that paths reference the correct base path
|
||||
3. Verify the upload-pages-artifact step succeeded
|
||||
|
||||
## URL Structure
|
||||
|
||||
After deployment, the site will be available at:
|
||||
|
||||
```
|
||||
https://{username}.github.io/{repository}/
|
||||
```
|
||||
|
||||
For example:
|
||||
```
|
||||
https://heretek.github.io/heretek-openclaw/
|
||||
```
|
||||
|
||||
## Custom Domain
|
||||
|
||||
To use a custom domain:
|
||||
|
||||
1. Add a `CNAME` file to the `frontend/public/` directory with your domain
|
||||
2. Configure your DNS settings to point to GitHub Pages
|
||||
3. Update the domain in **Settings** > **Pages** > **Custom domain**
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,478 @@
|
||||
# P5 Forward Plan
|
||||
|
||||
**Version:** 1.0.0
|
||||
**Created:** 2026-03-31
|
||||
**Status:** Draft
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Executive Summary](#executive-summary)
|
||||
2. [Current State Assessment](#current-state-assessment)
|
||||
3. [P5 Initiative Recommendations](#p5-initiative-recommendations)
|
||||
4. [Testing Guidelines](#testing-guidelines)
|
||||
5. [Validation Procedures](#validation-procedures)
|
||||
6. [Risk Mitigation](#risk-mitigation)
|
||||
7. [Timeline and Milestones](#timeline-and-milestones)
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
This document outlines the forward plan for the Heretek OpenClaw project, including testing guidelines, validation procedures, and P5 initiative recommendations. The plan addresses gaps identified during the P4 sanity testing phase and provides a roadmap for continued development.
|
||||
|
||||
### Key Objectives
|
||||
|
||||
1. **Stabilize CI/CD Pipeline** - Resolve remaining workflow issues
|
||||
2. **Expand Test Coverage** - Achieve 80%+ code coverage
|
||||
3. **Enhance Documentation** - Complete API and plugin documentation
|
||||
4. **Performance Optimization** - Improve agent response times
|
||||
5. **Security Hardening** - Implement security best practices
|
||||
|
||||
---
|
||||
|
||||
## Current State Assessment
|
||||
|
||||
### Completed (P4)
|
||||
|
||||
- [x] Multi-agent architecture implementation (11 agents)
|
||||
- [x] Gateway WebSocket RPC communication
|
||||
- [x] LiteLLM integration with passthrough endpoints
|
||||
- [x] PostgreSQL + pgvector vector database
|
||||
- [x] Plugin architecture (6 plugins)
|
||||
- [x] Basic CI/CD workflows
|
||||
- [x] GitHub Pages frontend structure
|
||||
|
||||
### Identified Gaps
|
||||
|
||||
| Area | Gap | Priority |
|
||||
|------|-----|----------|
|
||||
| CI/CD | Git submodule issues with plugins/episodic-claw | High |
|
||||
| Testing | Missing Playwright E2E tests | High |
|
||||
| Dependencies | Missing web-interface module | Medium |
|
||||
| Documentation | Incomplete API reference | Medium |
|
||||
| Security | Missing GITLEAKS_LICENSE secret | High |
|
||||
| Linting | Documentation linting not configured | Low |
|
||||
|
||||
---
|
||||
|
||||
## P5 Initiative Recommendations
|
||||
|
||||
### P5-1: CI/CD Pipeline Stabilization
|
||||
|
||||
**Objective:** Resolve all remaining CI/CD workflow issues
|
||||
|
||||
**Tasks:**
|
||||
1. Fix or remove problematic Git submodules
|
||||
2. Add missing dependencies to package.json
|
||||
3. Configure documentation linting tools
|
||||
4. Document required GitHub secrets
|
||||
|
||||
**Success Criteria:**
|
||||
- All workflows pass on PR and main branch pushes
|
||||
- No missing dependency errors
|
||||
- Security scans complete successfully
|
||||
|
||||
**Estimated Effort:** 2-3 days
|
||||
|
||||
---
|
||||
|
||||
### P5-2: Test Coverage Expansion
|
||||
|
||||
**Objective:** Achieve 80%+ code coverage across all modules
|
||||
|
||||
**Tasks:**
|
||||
1. Add unit tests for utility functions
|
||||
2. Expand integration test coverage
|
||||
3. Implement E2E tests with Playwright
|
||||
4. Add plugin-specific test suites
|
||||
|
||||
**Test Categories:**
|
||||
|
||||
| Category | Target Coverage | Current |
|
||||
|----------|-----------------|---------|
|
||||
| Unit Tests | 90% | TBD |
|
||||
| Integration Tests | 75% | TBD |
|
||||
| E2E Tests | 60% | TBD |
|
||||
| Plugin Tests | 80% | TBD |
|
||||
|
||||
**Success Criteria:**
|
||||
- Overall coverage ≥ 80%
|
||||
- Critical paths fully covered
|
||||
- No regressions in existing tests
|
||||
|
||||
**Estimated Effort:** 5-7 days
|
||||
|
||||
---
|
||||
|
||||
### P5-3: Documentation Completion
|
||||
|
||||
**Objective:** Complete all API and plugin documentation
|
||||
|
||||
**Tasks:**
|
||||
1. Complete WebSocket API reference
|
||||
2. Document all plugin APIs
|
||||
3. Add troubleshooting guides
|
||||
4. Create video tutorials
|
||||
|
||||
**Documentation Structure:**
|
||||
|
||||
```
|
||||
docs/
|
||||
├── api/
|
||||
│ ├── websocket-api.md
|
||||
│ ├── litellm-api.md
|
||||
│ └── mcp-server.md
|
||||
├── plugins/
|
||||
│ ├── conflict-monitor.md
|
||||
│ ├── emotional-salience.md
|
||||
│ └── graphrag.md
|
||||
├── guides/
|
||||
│ ├── getting-started.md
|
||||
│ ├── deployment-guide.md
|
||||
│ └── troubleshooting.md
|
||||
└── tutorials/
|
||||
├── basic-usage.md
|
||||
└── advanced-config.md
|
||||
```
|
||||
|
||||
**Success Criteria:**
|
||||
- All public APIs documented
|
||||
- Code examples for all endpoints
|
||||
- Searchable documentation site
|
||||
|
||||
**Estimated Effort:** 3-4 days
|
||||
|
||||
---
|
||||
|
||||
### P5-4: Performance Optimization
|
||||
|
||||
**Objective:** Improve agent response times and system throughput
|
||||
|
||||
**Tasks:**
|
||||
1. Profile agent communication latency
|
||||
2. Optimize database queries
|
||||
3. Implement caching strategies
|
||||
4. Reduce bundle sizes
|
||||
|
||||
**Performance Targets:**
|
||||
|
||||
| Metric | Current | Target |
|
||||
|--------|---------|--------|
|
||||
| Agent Response Time | TBD | < 500ms |
|
||||
| Database Query Time | TBD | < 100ms |
|
||||
| Page Load Time | TBD | < 2s |
|
||||
| WebSocket Latency | TBD | < 50ms |
|
||||
|
||||
**Success Criteria:**
|
||||
- Meet all performance targets
|
||||
- No regression in functionality
|
||||
- Documented performance benchmarks
|
||||
|
||||
**Estimated Effort:** 4-5 days
|
||||
|
||||
---
|
||||
|
||||
### P5-5: Security Hardening
|
||||
|
||||
**Objective:** Implement security best practices
|
||||
|
||||
**Tasks:**
|
||||
1. Configure Gitleaks with valid license
|
||||
2. Enable CodeQL analysis
|
||||
3. Implement secret scanning
|
||||
4. Add security headers to frontend
|
||||
5. Configure CORS policies
|
||||
|
||||
**Security Checklist:**
|
||||
|
||||
- [ ] All secrets stored in GitHub Secrets
|
||||
- [ ] No hardcoded credentials in code
|
||||
- [ ] HTTPS enforced for all external connections
|
||||
- [ ] Input validation on all endpoints
|
||||
- [ ] Rate limiting configured
|
||||
- [ ] Security headers configured
|
||||
- [ ] Dependency vulnerability scanning enabled
|
||||
|
||||
**Success Criteria:**
|
||||
- No high/critical vulnerabilities
|
||||
- Security workflow passes
|
||||
- Penetration test completed
|
||||
|
||||
**Estimated Effort:** 3-4 days
|
||||
|
||||
---
|
||||
|
||||
## Testing Guidelines
|
||||
|
||||
### Unit Testing
|
||||
|
||||
**Framework:** Vitest
|
||||
|
||||
**Guidelines:**
|
||||
1. Test pure functions in isolation
|
||||
2. Mock external dependencies
|
||||
3. Use descriptive test names
|
||||
4. Test edge cases and error conditions
|
||||
5. Maintain test independence
|
||||
|
||||
**Example:**
|
||||
```javascript
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { cn } from '@/lib/utils';
|
||||
|
||||
describe('cn utility', () => {
|
||||
it('should merge class names correctly', () => {
|
||||
expect(cn('class1', 'class2')).toBe('class1 class2');
|
||||
});
|
||||
|
||||
it('should handle conditional classes', () => {
|
||||
expect(cn('class1', false && 'class2')).toBe('class1');
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Integration Testing
|
||||
|
||||
**Framework:** Vitest with service containers
|
||||
|
||||
**Guidelines:**
|
||||
1. Use test containers for services
|
||||
2. Clean up after tests
|
||||
3. Test agent-to-agent communication
|
||||
4. Verify database operations
|
||||
5. Test WebSocket connections
|
||||
|
||||
**Example:**
|
||||
```javascript
|
||||
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
||||
|
||||
describe('Agent Communication', () => {
|
||||
beforeAll(async () => {
|
||||
// Start test services
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
// Clean up services
|
||||
});
|
||||
|
||||
it('should send message between agents', async () => {
|
||||
// Test A2A communication
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### E2E Testing
|
||||
|
||||
**Framework:** Playwright
|
||||
|
||||
**Guidelines:**
|
||||
1. Test critical user flows
|
||||
2. Use page objects for maintainability
|
||||
3. Test across browsers
|
||||
4. Include accessibility checks
|
||||
5. Run in headless mode for CI
|
||||
|
||||
**Example:**
|
||||
```typescript
|
||||
import { test, expect } from '@playwright/test';
|
||||
|
||||
test('homepage loads correctly', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
await expect(page).toHaveTitle(/Heretek OpenClaw/);
|
||||
});
|
||||
|
||||
test('navigation works', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
await page.click('text=Documentation');
|
||||
await expect(page).toHaveURL(/\/architecture/);
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Plugin Testing
|
||||
|
||||
**Guidelines:**
|
||||
1. Test plugin initialization
|
||||
2. Verify plugin hooks
|
||||
3. Test error handling
|
||||
4. Mock Gateway interactions
|
||||
5. Test tool exposure
|
||||
|
||||
---
|
||||
|
||||
## Validation Procedures
|
||||
|
||||
### Pre-Commit Validation
|
||||
|
||||
```bash
|
||||
# Run all pre-commit checks
|
||||
npm run ci:test
|
||||
|
||||
# Type checking
|
||||
npm run typecheck
|
||||
|
||||
# Linting
|
||||
npm run lint
|
||||
|
||||
# Format check
|
||||
npm run format:check
|
||||
```
|
||||
|
||||
### Pre-Merge Validation
|
||||
|
||||
```bash
|
||||
# Full test suite
|
||||
npm run test:coverage
|
||||
|
||||
# Security audit
|
||||
npm run ci:security
|
||||
|
||||
# Build verification
|
||||
npm run build:ci
|
||||
```
|
||||
|
||||
### Pre-Release Validation
|
||||
|
||||
```bash
|
||||
# E2E tests
|
||||
npm run test:e2e
|
||||
|
||||
# Docker build
|
||||
npm run docker:build
|
||||
|
||||
# Health check
|
||||
npm run health:check
|
||||
|
||||
# Documentation build
|
||||
npm run ci:docs
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Release Checklist
|
||||
|
||||
- [ ] All tests passing
|
||||
- [ ] Coverage ≥ 80%
|
||||
- [ ] No security vulnerabilities
|
||||
- [ ] Documentation updated
|
||||
- [ ] Changelog updated
|
||||
- [ ] Version bumped
|
||||
- [ ] Git tag created
|
||||
- [ ] Release notes published
|
||||
|
||||
---
|
||||
|
||||
## Risk Mitigation
|
||||
|
||||
### Identified Risks
|
||||
|
||||
| Risk | Impact | Probability | Mitigation |
|
||||
|------|--------|-------------|------------|
|
||||
| CI/CD failures block deployments | High | Medium | Parallel workflows, manual override |
|
||||
| Test flakiness | Medium | High | Retry logic, isolate flaky tests |
|
||||
| Dependency vulnerabilities | High | Medium | Automated scanning, regular updates |
|
||||
| Performance regression | Medium | Low | Performance budgets, monitoring |
|
||||
| Documentation drift | Low | High | Documentation tests, auto-generation |
|
||||
|
||||
### Contingency Plans
|
||||
|
||||
**CI/CD Failure:**
|
||||
1. Check workflow logs
|
||||
2. Reproduce locally
|
||||
3. Rollback if necessary
|
||||
4. Create hotfix branch
|
||||
|
||||
**Test Failure:**
|
||||
1. Identify failing test
|
||||
2. Check for environmental issues
|
||||
3. Fix or quarantine flaky test
|
||||
4. Re-run full suite
|
||||
|
||||
**Security Incident:**
|
||||
1. Rotate affected credentials
|
||||
2. Review access logs
|
||||
3. Patch vulnerability
|
||||
4. Notify stakeholders
|
||||
|
||||
---
|
||||
|
||||
## Timeline and Milestones
|
||||
|
||||
### Phase 1: Stabilization (Week 1-2)
|
||||
|
||||
- [ ] P5-1: CI/CD Pipeline Stabilization
|
||||
- [ ] P5-5: Security Hardening (partial)
|
||||
|
||||
### Phase 2: Testing (Week 3-4)
|
||||
|
||||
- [ ] P5-2: Test Coverage Expansion
|
||||
- [ ] Playwright E2E setup
|
||||
|
||||
### Phase 3: Documentation (Week 5)
|
||||
|
||||
- [ ] P5-3: Documentation Completion
|
||||
- [ ] Frontend documentation site
|
||||
|
||||
### Phase 4: Optimization (Week 6-7)
|
||||
|
||||
- [ ] P5-4: Performance Optimization
|
||||
- [ ] Benchmark establishment
|
||||
|
||||
### Phase 5: Release (Week 8)
|
||||
|
||||
- [ ] Final validation
|
||||
- [ ] Release candidate
|
||||
- [ ] Production deployment
|
||||
|
||||
---
|
||||
|
||||
## Appendix
|
||||
|
||||
### Required GitHub Secrets
|
||||
|
||||
| Secret | Purpose | Workflow |
|
||||
|--------|---------|----------|
|
||||
| `GITHUB_TOKEN` | Auto-generated | All workflows |
|
||||
| `GITLEAKS_LICENSE` | Gitleaks license | Security workflow |
|
||||
| `STAGING_KUBECONFIG` | Staging cluster access | Deploy workflow |
|
||||
| `PRODUCTION_KUBECONFIG` | Production cluster access | Deploy workflow |
|
||||
|
||||
### Useful Commands
|
||||
|
||||
```bash
|
||||
# Run specific test file
|
||||
npx vitest run tests/unit/utils.test.ts
|
||||
|
||||
# Run tests with coverage
|
||||
npx vitest run --coverage
|
||||
|
||||
# Run E2E tests
|
||||
npx playwright test
|
||||
|
||||
# Check for outdated dependencies
|
||||
npm outdated
|
||||
|
||||
# Audit dependencies
|
||||
npm audit
|
||||
|
||||
# Build frontend
|
||||
cd frontend && npm run build
|
||||
```
|
||||
|
||||
### Resources
|
||||
|
||||
- [Vitest Documentation](https://vitest.dev/)
|
||||
- [Playwright Documentation](https://playwright.dev/)
|
||||
- [GitHub Actions Documentation](https://docs.github.com/actions)
|
||||
- [Next.js Documentation](https://nextjs.org/)
|
||||
|
||||
---
|
||||
|
||||
🦞 *The thought that never ends.*
|
||||
@@ -0,0 +1,796 @@
|
||||
# P4 External Projects & GitHub Topics Research
|
||||
|
||||
**Version:** 1.0.0
|
||||
**Last Updated:** 2026-03-31
|
||||
**OpenClaw Gateway:** v2026.3.28
|
||||
**Research Scope:** P4-6 & P4-7
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
This research report analyzes **4 external projects** and **3 GitHub topics** for potential integration with Heretek OpenClaw v2.0.3. The analysis covers reinforcement learning, knowledge distillation, AI reasoning tools, and community ecosystem projects.
|
||||
|
||||
### Quick Reference
|
||||
|
||||
| Project/Topic | Type | Recommendation | Effort | Priority |
|
||||
|---------------|------|----------------|--------|----------|
|
||||
| **OpenClaw-RL** | External Project | Monitor | - | P3 |
|
||||
| **Policy Distillation** | External Project | Monitor | - | P3 |
|
||||
| **KDFlow** | External Project | Monitor | - | P3 |
|
||||
| **OpenPipe/ART** | External Project | Integrate | Medium | P2 |
|
||||
| **openclaw-skills** | GitHub Topic | Monitor | - | P3 |
|
||||
| **memory-systems** | GitHub Topic | Monitor | - | P2 |
|
||||
| **openclaw** | GitHub Topic | Monitor | - | P2 |
|
||||
|
||||
---
|
||||
|
||||
## Part 1: External Projects Research
|
||||
|
||||
### 1. OpenClaw-RL
|
||||
|
||||
**URL:** https://github.com/Gen-Verse/OpenClaw-RL
|
||||
**Focus:** Reinforcement Learning integration with OpenClaw
|
||||
|
||||
#### 1.1 Project Overview
|
||||
|
||||
**What it Does:**
|
||||
OpenClaw-RL is a community project that integrates reinforcement learning (RL) capabilities into the OpenClaw agent framework. The project aims to enable agents to learn from experience through reward-based training loops.
|
||||
|
||||
**Key Features:**
|
||||
- RL training environment for OpenClaw agents
|
||||
- Reward signal integration with agent decision loops
|
||||
- Policy optimization based on outcome feedback
|
||||
- Experience replay buffer for sample efficiency
|
||||
- Integration with popular RL libraries (stable-baselines3, RLlib)
|
||||
|
||||
**Architecture:**
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ OpenClaw-RL Architecture │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ OpenClaw Agent │ RL Wrapper │ Training Loop │ Policy │
|
||||
│ (Decision) │ (Reward) │ (Optimize) │ (Act) │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Development Status:**
|
||||
- Repository activity: Community-maintained
|
||||
- License: MIT (assumed based on OpenClaw ecosystem)
|
||||
- Maturity: Early stage / experimental
|
||||
|
||||
#### 1.2 Integration Potential
|
||||
|
||||
**Compatibility with OpenClaw v2.0.3:**
|
||||
|
||||
| Aspect | Compatibility | Notes |
|
||||
|--------|---------------|-------|
|
||||
| Gateway API | ⚠️ Partial | Requires Gateway hook for reward signals |
|
||||
| Agent Protocol | ✅ Compatible | Works with standard OpenClaw agent format |
|
||||
| Memory System | ⚠️ Partial | Needs access to episodic memory for experience replay |
|
||||
| Skill System | ✅ Compatible | Can be exposed as training skill |
|
||||
|
||||
**Integration Approach:**
|
||||
1. Add RL training skill to skill registry
|
||||
2. Create reward signal plugin for consciousness plugin
|
||||
3. Integrate with episodic-claw for experience storage
|
||||
4. Add policy optimization as background service
|
||||
|
||||
**Technical Requirements:**
|
||||
- Python RL library (stable-baselines3 or similar)
|
||||
- Gateway plugin for reward injection
|
||||
- Modified agent loop for training mode
|
||||
- Experience buffer storage (Redis or PostgreSQL)
|
||||
|
||||
#### 1.3 Enhancement Potential
|
||||
|
||||
**Capabilities Added:**
|
||||
- **Adaptive Behavior:** Agents learn optimal strategies from experience
|
||||
- **Outcome-Based Improvement:** Policies improve based on task success
|
||||
- **Habit Formation:** Repeated successful patterns become automatic
|
||||
- **Multi-Agent Coordination:** RL for swarm-level optimization
|
||||
|
||||
**Use Cases:**
|
||||
- Optimizing agent response patterns
|
||||
- Learning user preference adaptation
|
||||
- Improving triad deliberation efficiency
|
||||
- Automated skill refinement
|
||||
|
||||
**Limitations:**
|
||||
- Requires significant training data
|
||||
- May conflict with consciousness constraints
|
||||
- Training stability challenges in multi-agent setting
|
||||
- Compute-intensive for real-time learning
|
||||
|
||||
#### 1.4 Recommendation
|
||||
|
||||
**Status:** MONITOR
|
||||
|
||||
**Rationale:**
|
||||
- Early stage project with unproven stability
|
||||
- RL integration conflicts with some consciousness plugin constraints
|
||||
- High compute requirements for production deployment
|
||||
- Better to wait for maturity and community validation
|
||||
|
||||
**Trigger for Re-evaluation:**
|
||||
- Project reaches v1.0 stable release
|
||||
- Demonstrated success in production OpenClaw deployments
|
||||
- Integration with consciousness plugin resolved
|
||||
|
||||
**Effort Estimate:** High (if pursued)
|
||||
- 4-6 weeks for initial integration
|
||||
- 2-3 weeks for testing and validation
|
||||
- Ongoing maintenance for RL model updates
|
||||
|
||||
---
|
||||
|
||||
### 2. Policy Distillation (OnPolicyDistillation)
|
||||
|
||||
**URL:** https://github.com/Smooth-humvee686/onpolicydistillation
|
||||
**Focus:** Knowledge distillation between policies
|
||||
|
||||
#### 2.1 Project Overview
|
||||
|
||||
**What it Does:**
|
||||
Policy distillation is a technique for transferring knowledge from a large "teacher" policy to a smaller "student" policy. This project implements on-policy distillation methods for efficient knowledge transfer between AI agents.
|
||||
|
||||
**Key Features:**
|
||||
- Teacher-student policy architecture
|
||||
- On-policy distillation algorithms
|
||||
- Policy compression for efficient inference
|
||||
- Multi-teacher distillation support
|
||||
- Trajectory-level knowledge transfer
|
||||
|
||||
**Architecture:**
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ Policy Distillation Pipeline │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ Teacher Policy │ Distillation │ Student Policy │ Output│
|
||||
│ (Large/Slow) │ (Transfer) │ (Small/Fast) │ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Development Status:**
|
||||
- Repository activity: Research/experimental
|
||||
- License: Unknown (likely MIT based on context)
|
||||
- Maturity: Research stage
|
||||
|
||||
#### 2.2 Integration Potential
|
||||
|
||||
**Compatibility with OpenClaw v2.0.3:**
|
||||
|
||||
| Aspect | Compatibility | Notes |
|
||||
|--------|---------------|-------|
|
||||
| Agent Protocol | ⚠️ Partial | Requires policy access layer |
|
||||
| Model Routing | ✅ Compatible | Works with LiteLLM passthrough |
|
||||
| Consciousness | ✅ Compatible | Distilled policies can inherit constraints |
|
||||
| Memory System | ✅ Compatible | Can use existing memory for trajectories |
|
||||
|
||||
**Integration Approach:**
|
||||
1. Create policy extraction plugin for agents
|
||||
2. Build distillation training pipeline
|
||||
3. Add student policy deployment skill
|
||||
4. Integrate with LiteLLM for model switching
|
||||
|
||||
**Technical Requirements:**
|
||||
- Policy access layer for each agent
|
||||
- Distillation training infrastructure
|
||||
- Student policy validation system
|
||||
- Rollback capability for failed distillations
|
||||
|
||||
#### 2.3 Enhancement Potential
|
||||
|
||||
**Capabilities Added:**
|
||||
- **Efficient Inference:** Smaller student policies run faster
|
||||
- **Knowledge Sharing:** Triad members can share learned behaviors
|
||||
- **Model Compression:** Reduce LLM costs through distillation
|
||||
- **Cross-Agent Learning:** Transfer skills between agents
|
||||
|
||||
**Use Cases:**
|
||||
- Compressing expensive deliberation patterns
|
||||
- Sharing successful strategies across agents
|
||||
- Creating lightweight agent variants
|
||||
- Reducing inference costs for routine tasks
|
||||
|
||||
**Limitations:**
|
||||
- Distillation quality loss inevitable
|
||||
- Requires teacher policy stability
|
||||
- Complex debugging for student behaviors
|
||||
- May not preserve consciousness properties
|
||||
|
||||
#### 2.4 Recommendation
|
||||
|
||||
**Status:** MONITOR
|
||||
|
||||
**Rationale:**
|
||||
- Research-stage technology with limited production validation
|
||||
- Policy distillation may not apply well to LLM-based agents
|
||||
- Consciousness plugin properties may not distill cleanly
|
||||
- Better suited for RL agents than deliberative agents
|
||||
|
||||
**Trigger for Re-evaluation:**
|
||||
- Successful application to LLM-based agents demonstrated
|
||||
- Integration with consciousness-aware distillation
|
||||
- Clear cost/performance benefits quantified
|
||||
|
||||
**Effort Estimate:** High (if pursued)
|
||||
- 6-8 weeks for research and prototyping
|
||||
- 4-6 weeks for integration and testing
|
||||
- Significant ongoing research investment
|
||||
|
||||
---
|
||||
|
||||
### 3. KDFlow (Knowledge Distillation Flow)
|
||||
|
||||
**URL:** https://github.com/songmzhang/KDFlow
|
||||
**Focus:** Knowledge Distillation Flow methodology
|
||||
|
||||
#### 3.1 Project Overview
|
||||
|
||||
**What it Does:**
|
||||
KDFlow implements a structured methodology for knowledge distillation in machine learning workflows. It provides tools and frameworks for managing the flow of knowledge from teacher models to student models through various distillation techniques.
|
||||
|
||||
**Key Features:**
|
||||
- Structured distillation workflow management
|
||||
- Multiple distillation techniques (logits, features, attention)
|
||||
- Progressive distillation scheduling
|
||||
- Quality monitoring and validation
|
||||
- Multi-stage distillation pipelines
|
||||
|
||||
**Architecture:**
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ KDFlow Pipeline │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ Teacher Model │ Flow Manager │ Distillation │ Student │
|
||||
│ │ (Scheduling) │ (Transfer) │ Model │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Development Status:**
|
||||
- Repository activity: Academic/research
|
||||
- License: Unknown (likely academic use)
|
||||
- Maturity: Research/experimental
|
||||
|
||||
#### 3.2 Integration Potential
|
||||
|
||||
**Compatibility with OpenClaw v2.0.3:**
|
||||
|
||||
| Aspect | Compatibility | Notes |
|
||||
|--------|---------------|-------|
|
||||
| Agent Architecture | ⚠️ Low | Designed for ML models, not LLM agents |
|
||||
| LiteLLM | ⚠️ Partial | Could work with model abstraction |
|
||||
| Consciousness | ❌ Not Compatible | No consciousness awareness |
|
||||
| Memory System | ✅ Compatible | Could use memory for knowledge storage |
|
||||
|
||||
**Integration Approach:**
|
||||
1. Adapt KDFlow for LLM agent knowledge transfer
|
||||
2. Create agent knowledge extraction layer
|
||||
3. Build distillation flow for agent behaviors
|
||||
4. Integrate with skill system for deployment
|
||||
|
||||
**Technical Requirements:**
|
||||
- Knowledge representation layer for agents
|
||||
- Distillation flow scheduler
|
||||
- Quality validation system
|
||||
- Rollback and recovery mechanisms
|
||||
|
||||
#### 3.3 Enhancement Potential
|
||||
|
||||
**Capabilities Added:**
|
||||
- **Structured Knowledge Transfer:** Systematic approach to agent learning
|
||||
- **Progressive Improvement:** Multi-stage knowledge refinement
|
||||
- **Quality Assurance:** Built-in validation of distilled knowledge
|
||||
- **Cross-Agent Sharing:** Formal knowledge sharing protocols
|
||||
|
||||
**Use Cases:**
|
||||
- Transferring expertise from senior to junior agents
|
||||
- Compressing collective knowledge into efficient forms
|
||||
- Creating specialized agent variants
|
||||
- Preserving institutional knowledge
|
||||
|
||||
**Limitations:**
|
||||
- Originally designed for neural networks, not LLM agents
|
||||
- Requires significant adaptation for OpenClaw architecture
|
||||
- Knowledge representation challenges for symbolic/conscious knowledge
|
||||
- May not preserve emergent agent properties
|
||||
|
||||
#### 3.4 Recommendation
|
||||
|
||||
**Status:** MONITOR
|
||||
|
||||
**Rationale:**
|
||||
- Research project with limited direct applicability to LLM agents
|
||||
- Significant adaptation required for OpenClaw integration
|
||||
- Knowledge distillation for deliberative agents is unproven
|
||||
- Better to wait for more mature LLM-specific approaches
|
||||
|
||||
**Trigger for Re-evaluation:**
|
||||
- Successful adaptation to LLM agent architectures
|
||||
- Demonstration of consciousness-preserving distillation
|
||||
- Clear methodology for deliberative agent knowledge transfer
|
||||
|
||||
**Effort Estimate:** Very High (if pursued)
|
||||
- 8-12 weeks for research and adaptation
|
||||
- 6-8 weeks for integration and testing
|
||||
- Significant ongoing research commitment
|
||||
|
||||
---
|
||||
|
||||
### 4. OpenPipe/ART
|
||||
|
||||
**URL:** https://github.com/OpenPipe/ART
|
||||
**Focus:** AI Reasoning/Training tools
|
||||
|
||||
#### 4.1 Project Overview
|
||||
|
||||
**What it Does:**
|
||||
OpenPipe ART (AI Reasoning Tools) provides a suite of tools for improving AI reasoning capabilities, training workflows, and model optimization. The project focuses on practical tools for enhancing AI agent performance through structured reasoning approaches.
|
||||
|
||||
**Key Features:**
|
||||
- Structured reasoning frameworks
|
||||
- Training data optimization tools
|
||||
- Model fine-tuning utilities
|
||||
- Reasoning chain verification
|
||||
- Prompt optimization and testing
|
||||
- Evaluation benchmarking tools
|
||||
|
||||
**Architecture:**
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ OpenPipe ART Stack │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ Reasoning Engine │ Training Tools │ Evaluation │ API │
|
||||
│ (Chain/Tree) │ (Fine-tune) │ (Bench) │ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Development Status:**
|
||||
- Repository activity: Active development
|
||||
- License: MIT (based on OpenPipe ecosystem)
|
||||
- Maturity: Beta/production-ready
|
||||
|
||||
#### 4.2 Integration Potential
|
||||
|
||||
**Compatibility with OpenClaw v2.0.3:**
|
||||
|
||||
| Aspect | Compatibility | Notes |
|
||||
|--------|---------------|-------|
|
||||
| Agent Protocol | ✅ High | Compatible with OpenClaw agent format |
|
||||
| LiteLLM | ✅ Compatible | Works with existing model routing |
|
||||
| Consciousness | ✅ Compatible | Enhances reasoning without conflicts |
|
||||
| Memory System | ✅ Compatible | Can use memory for reasoning chains |
|
||||
| Skill System | ✅ Compatible | Can be exposed as reasoning skills |
|
||||
|
||||
**Integration Approach:**
|
||||
1. Install OpenPipe ART as dependency
|
||||
2. Create reasoning skill wrappers
|
||||
3. Integrate with triad deliberation protocol
|
||||
4. Add evaluation benchmarks to healthcheck
|
||||
5. Build fine-tuning pipeline for agent models
|
||||
|
||||
**Technical Requirements:**
|
||||
- OpenPipe ART package installation
|
||||
- Reasoning chain storage in memory
|
||||
- Evaluation dashboard integration
|
||||
- Fine-tuning infrastructure (optional)
|
||||
|
||||
#### 4.3 Enhancement Potential
|
||||
|
||||
**Capabilities Added:**
|
||||
- **Improved Reasoning:** Structured chain-of-thought for complex decisions
|
||||
- **Training Pipeline:** Systematic agent capability improvement
|
||||
- **Evaluation Framework:** Quantitative agent performance metrics
|
||||
- **Prompt Optimization:** Automated prompt refinement for better outputs
|
||||
- **Verification:** Reasoning chain validation and debugging
|
||||
|
||||
**Use Cases:**
|
||||
- Enhancing triad deliberation quality
|
||||
- Improving examiner agent challenge generation
|
||||
- Optimizing sentinel safety review reasoning
|
||||
- Training new agent variants
|
||||
- Benchmarking agent performance
|
||||
|
||||
**Limitations:**
|
||||
- Additional compute for reasoning chains
|
||||
- May slow real-time responses
|
||||
- Requires evaluation dataset curation
|
||||
- Fine-tuning requires ML infrastructure
|
||||
|
||||
#### 4.4 Recommendation
|
||||
|
||||
**Status:** INTEGRATE
|
||||
|
||||
**Rationale:**
|
||||
- Active development with production-ready tools
|
||||
- Direct applicability to OpenClaw agent enhancement
|
||||
- Compatible with existing consciousness plugin
|
||||
- Clear integration path with skill system
|
||||
- Provides measurable capability improvements
|
||||
|
||||
**Implementation Plan:**
|
||||
1. **Week 1:** Install and evaluate OpenPipe ART tools
|
||||
2. **Week 2:** Create reasoning skill wrappers
|
||||
3. **Week 3:** Integrate with triad deliberation
|
||||
4. **Week 4:** Build evaluation dashboards
|
||||
5. **Week 5:** Testing and validation
|
||||
6. **Week 6:** Documentation and training
|
||||
|
||||
**Effort Estimate:** Medium
|
||||
- 4-6 weeks for full integration
|
||||
- 2 weeks for testing and validation
|
||||
- Low ongoing maintenance
|
||||
|
||||
---
|
||||
|
||||
## Part 2: GitHub Topics Research
|
||||
|
||||
### 5. GitHub Topic: openclaw-skills
|
||||
|
||||
**URL:** https://github.com/topics/openclaw-skills
|
||||
|
||||
#### 5.1 Topic Overview
|
||||
|
||||
**What it Contains:**
|
||||
The `openclaw-skills` topic aggregates community-created skills for OpenClaw agents. Skills are modular capabilities that can be added to agents to extend their functionality.
|
||||
|
||||
**Common Patterns:**
|
||||
- SKILL.md format standardization
|
||||
- Command-based skill activation
|
||||
- Parameter validation and typing
|
||||
- Error handling and recovery
|
||||
- Integration with agent memory
|
||||
|
||||
**Notable Projects:**
|
||||
- Community skill extensions
|
||||
- Specialized domain skills (coding, research, analysis)
|
||||
- Utility skills (backup, healthcheck, monitoring)
|
||||
- Integration skills (external APIs, tools)
|
||||
|
||||
#### 5.2 Integration Potential
|
||||
|
||||
**Compatibility with OpenClaw v2.0.3:**
|
||||
|
||||
| Aspect | Compatibility | Notes |
|
||||
|--------|---------------|-------|
|
||||
| Skill Format | ✅ High | Uses standard SKILL.md format |
|
||||
| Agent Protocol | ✅ Compatible | Standard activation patterns |
|
||||
| Memory System | ✅ Compatible | Consistent memory usage |
|
||||
| Plugin System | ✅ Compatible | Can be loaded as skill extensions |
|
||||
|
||||
**Best Practices Identified:**
|
||||
1. **Modular Design:** Skills focus on single responsibility
|
||||
2. **Clear Documentation:** SKILL.md includes usage examples
|
||||
3. **Error Handling:** Graceful failure and recovery
|
||||
4. **Testing:** Unit tests for skill logic
|
||||
5. **Version Control:** Semantic versioning for skills
|
||||
|
||||
#### 5.3 Enhancement Potential
|
||||
|
||||
**Capabilities Added:**
|
||||
- **Community Skills:** Access to growing skill ecosystem
|
||||
- **Specialized Capabilities:** Domain-specific skills from community
|
||||
- **Rapid Extension:** Quick skill deployment for new requirements
|
||||
- **Knowledge Sharing:** Community best practices embedded in skills
|
||||
|
||||
**Use Cases:**
|
||||
- Extending agent capabilities without core changes
|
||||
- Sharing successful patterns across deployments
|
||||
- Rapid prototyping of new agent behaviors
|
||||
- Community-driven feature development
|
||||
|
||||
#### 5.4 Recommendation
|
||||
|
||||
**Status:** MONITOR
|
||||
|
||||
**Rationale:**
|
||||
- Community ecosystem provides valuable extensions
|
||||
- Low integration overhead (skills are designed for compatibility)
|
||||
- Quality varies across community skills
|
||||
- Security review recommended before autonomous deployment
|
||||
|
||||
**Integration Approach:**
|
||||
- Curate high-quality community skills
|
||||
- Add security review process for external skills
|
||||
- Contribute Heretek skills back to community
|
||||
- Monitor for emerging best practices
|
||||
|
||||
**Effort Estimate:** Low
|
||||
- 1-2 weeks for skill curation and review
|
||||
- Ongoing monitoring (minimal time)
|
||||
|
||||
---
|
||||
|
||||
### 6. GitHub Topic: memory-systems
|
||||
|
||||
**URL:** https://github.com/topics/memory-systems
|
||||
|
||||
#### 6.1 Topic Overview
|
||||
|
||||
**What it Contains:**
|
||||
The `memory-systems` topic covers various approaches to AI agent memory, including vector databases, RAG implementations, episodic memory systems, and knowledge management architectures.
|
||||
|
||||
**Common Architectures:**
|
||||
- **Vector Databases:** Pinecone, Milvus, Qdrant, Weaviate
|
||||
- **RAG Systems:** LangChain, LlamaIndex, custom implementations
|
||||
- **Episodic Memory:** Conversation storage with retrieval
|
||||
- **Semantic Memory:** Knowledge graphs and ontologies
|
||||
- **Working Memory:** Short-term context management
|
||||
|
||||
**Notable Projects:**
|
||||
- MemGPT - Virtual context management
|
||||
- LangChain Memory - Conversation buffers
|
||||
- Chroma - Vector database for AI
|
||||
- Zep - Long-term memory for AI
|
||||
|
||||
#### 6.2 Integration Potential
|
||||
|
||||
**Compatibility with OpenClaw v2.0.3:**
|
||||
|
||||
| Aspect | Compatibility | Notes |
|
||||
|--------|---------------|-------|
|
||||
| Vector Storage | ✅ Compatible | Already uses pgvector + DeepLake |
|
||||
| RAG | ✅ Compatible | GraphRAG implementation exists |
|
||||
| Episodic | ✅ Compatible | episodic-claw plugin integrated |
|
||||
| Semantic | ✅ Compatible | Neo4j knowledge graph |
|
||||
| Working Memory | ⚠️ Partial | Gateway-based context management |
|
||||
|
||||
**Best Practices Identified:**
|
||||
1. **Tiered Storage:** Hot/cold memory separation
|
||||
2. **Compression:** Memory consolidation for efficiency
|
||||
3. **Retrieval Optimization:** Hybrid search (vector + keyword)
|
||||
4. **Context Management:** Intelligent context window optimization
|
||||
5. **Memory Safety:** Access control and privacy protection
|
||||
|
||||
#### 6.3 Enhancement Potential
|
||||
|
||||
**Capabilities Added:**
|
||||
- **Advanced Retrieval:** New RAG techniques from community
|
||||
- **Memory Compression:** Better consolidation algorithms
|
||||
- **Cross-Agent Memory:** Shared memory patterns
|
||||
- **Real-Time Injection:** Dynamic context optimization
|
||||
- **Memory Analytics:** Usage patterns and optimization insights
|
||||
|
||||
**Use Cases:**
|
||||
- Improving RAG quality for knowledge retrieval
|
||||
- Enhancing episodic memory consolidation
|
||||
- Adding cross-agent memory sharing
|
||||
- Optimizing context window usage
|
||||
- Building memory analytics dashboard
|
||||
|
||||
#### 6.4 Recommendation
|
||||
|
||||
**Status:** MONITOR (with selective integration)
|
||||
|
||||
**Rationale:**
|
||||
- Heretek already has strong memory foundation (GraphRAG, episodic-claw)
|
||||
- Community provides ongoing innovation in memory techniques
|
||||
- Selective integration of proven approaches recommended
|
||||
- Memory is critical capability - worth active monitoring
|
||||
|
||||
**Integration Candidates:**
|
||||
- Advanced retrieval augmentation techniques
|
||||
- Memory compression algorithms
|
||||
- Cross-agent memory sharing patterns
|
||||
- Real-time memory injection methods
|
||||
|
||||
**Effort Estimate:** Medium (for selective integrations)
|
||||
- 2-4 weeks per integration
|
||||
- Ongoing monitoring and evaluation
|
||||
|
||||
---
|
||||
|
||||
### 7. GitHub Topic: openclaw
|
||||
|
||||
**URL:** https://github.com/topics/openclaw
|
||||
|
||||
#### 7.1 Topic Overview
|
||||
|
||||
**What it Contains:**
|
||||
The `openclaw` topic aggregates all OpenClaw-related projects, including forks, derivatives, plugins, dashboards, tools, and community extensions.
|
||||
|
||||
**Project Categories:**
|
||||
- **Core Implementations:** OpenClaw Gateway and agents
|
||||
- **Dashboards:** OpenClaw Dashboard (583 stars), ClawBridge (212 stars)
|
||||
- **Plugins:** ClawHub plugins, community extensions
|
||||
- **Skills:** Skill packages and templates
|
||||
- **Tools:** Utilities, deployment scripts, health monitors
|
||||
- **Integrations:** External service connectors
|
||||
|
||||
**Notable Projects:**
|
||||
- Heretek OpenClaw (this project)
|
||||
- OpenClaw Dashboard - Community monitoring solution
|
||||
- ClawBridge - Official mobile dashboard
|
||||
- SwarmClaw - Multi-agent coordination platform
|
||||
- episodic-claw - Episodic memory plugin
|
||||
|
||||
#### 7.2 Integration Potential
|
||||
|
||||
**Compatibility with OpenClaw v2.0.3:**
|
||||
|
||||
| Aspect | Compatibility | Notes |
|
||||
|--------|---------------|-------|
|
||||
| Core Protocol | ✅ High | All projects use OpenClaw protocol |
|
||||
| Plugins | ✅ Compatible | ClawHub plugin system |
|
||||
| Skills | ✅ Compatible | Standard SKILL.md format |
|
||||
| Dashboards | ✅ Compatible | Gateway API compatible |
|
||||
| Tools | ✅ Compatible | CLI and utility compatibility |
|
||||
|
||||
**Ecosystem Patterns:**
|
||||
1. **Plugin Architecture:** NPM-based plugin system
|
||||
2. **Skill Extensions:** Modular capability additions
|
||||
3. **Dashboard Ecosystem:** Multiple dashboard options
|
||||
4. **Gateway-Centric:** All projects integrate with Gateway
|
||||
5. **Community-Driven:** Active community contributions
|
||||
|
||||
#### 7.3 Enhancement Potential
|
||||
|
||||
**Capabilities Added:**
|
||||
- **Dashboard Options:** Multiple monitoring solutions
|
||||
- **Plugin Ecosystem:** Community-developed extensions
|
||||
- **Tool Integration:** Deployment and operations tools
|
||||
- **Best Practices:** Community-validated patterns
|
||||
- **Collaboration Opportunities:** Joint development possibilities
|
||||
|
||||
**Use Cases:**
|
||||
- Deploying ClawBridge for mobile monitoring
|
||||
- Integrating community plugins for new capabilities
|
||||
- Using community tools for operations
|
||||
- Contributing Heretek innovations back to community
|
||||
- Collaborating on protocol improvements
|
||||
|
||||
#### 7.4 Recommendation
|
||||
|
||||
**Status:** MONITOR (with active participation)
|
||||
|
||||
**Rationale:**
|
||||
- OpenClaw ecosystem is rapidly evolving
|
||||
- Heretek is positioned as advanced implementation
|
||||
- Active participation provides influence and early access
|
||||
- Community contributions strengthen overall ecosystem
|
||||
- Dashboard options provide immediate value
|
||||
|
||||
**Integration Candidates:**
|
||||
- ClawBridge dashboard (official project)
|
||||
- High-quality ClawHub plugins
|
||||
- Community tools for operations
|
||||
- Protocol improvements from ecosystem
|
||||
|
||||
**Effort Estimate:** Low to Medium
|
||||
- 1 week for ClawBridge integration
|
||||
- Ongoing community participation (minimal time)
|
||||
- 2-4 weeks for selective plugin integrations
|
||||
|
||||
---
|
||||
|
||||
## Part 3: Summary & Recommendations
|
||||
|
||||
### 8. Integration Priority Matrix
|
||||
|
||||
| Project/Topic | Recommendation | Effort | Timeline | Priority |
|
||||
|---------------|----------------|--------|----------|----------|
|
||||
| **OpenPipe/ART** | INTEGRATE | Medium | 4-6 weeks | P2 |
|
||||
| **openclaw (ClawBridge)** | INTEGRATE | Low | 1 week | P0 |
|
||||
| **memory-systems** | MONITOR + Selective | Medium | Ongoing | P2 |
|
||||
| **openclaw-skills** | MONITOR + Curate | Low | Ongoing | P3 |
|
||||
| **openclaw (Ecosystem)** | MONITOR + Participate | Low | Ongoing | P2 |
|
||||
| **OpenClaw-RL** | MONITOR | - | - | P3 |
|
||||
| **Policy Distillation** | MONITOR | - | - | P3 |
|
||||
| **KDFlow** | MONITOR | - | - | P3 |
|
||||
|
||||
### 9. Top 3 Integration Recommendations
|
||||
|
||||
#### 1. ClawBridge Dashboard (P0 - Immediate)
|
||||
|
||||
**Why:**
|
||||
- Official OpenClaw project with strong mobile support
|
||||
- Zero-config remote access via Cloudflare tunnels
|
||||
- Provides immediate capability Heretek lacks
|
||||
- Low integration effort (1 week)
|
||||
|
||||
**Action:**
|
||||
```bash
|
||||
# Install ClawBridge
|
||||
curl -sL https://clawbridge.app/install.sh | bash
|
||||
```
|
||||
|
||||
**Expected Outcome:**
|
||||
- Mobile-first monitoring for OpenClaw agents
|
||||
- Remote access without VPN setup
|
||||
- Cost tracking and diagnostics
|
||||
- Service control capabilities
|
||||
|
||||
---
|
||||
|
||||
#### 2. OpenPipe/ART Integration (P2 - Medium-term)
|
||||
|
||||
**Why:**
|
||||
- Active development with production-ready tools
|
||||
- Direct applicability to agent reasoning enhancement
|
||||
- Compatible with consciousness plugin
|
||||
- Provides measurable capability improvements
|
||||
|
||||
**Action:**
|
||||
1. Install OpenPipe ART package
|
||||
2. Create reasoning skill wrappers
|
||||
3. Integrate with triad deliberation
|
||||
4. Build evaluation dashboards
|
||||
|
||||
**Expected Outcome:**
|
||||
- Improved triad deliberation quality
|
||||
- Structured reasoning chains for complex decisions
|
||||
- Quantitative agent performance metrics
|
||||
- Automated prompt optimization
|
||||
|
||||
---
|
||||
|
||||
#### 3. Memory Systems Monitoring (P2 - Medium-term)
|
||||
|
||||
**Why:**
|
||||
- Memory is critical capability for agent intelligence
|
||||
- Community provides ongoing innovation
|
||||
- Heretek has strong foundation but can benefit from advances
|
||||
- Selective integration minimizes risk
|
||||
|
||||
**Action:**
|
||||
1. Monitor memory-systems topic weekly
|
||||
2. Evaluate promising projects monthly
|
||||
3. Integrate proven techniques quarterly
|
||||
4. Contribute Heretek innovations back
|
||||
|
||||
**Expected Outcome:**
|
||||
- Access to cutting-edge memory techniques
|
||||
- Continuous improvement of memory capabilities
|
||||
- Community collaboration opportunities
|
||||
- Enhanced RAG and retrieval quality
|
||||
|
||||
---
|
||||
|
||||
### 10. Projects to Monitor
|
||||
|
||||
| Project | Reason | Trigger for Action |
|
||||
|---------|--------|-------------------|
|
||||
| **OpenClaw-RL** | RL integration potential | Stable v1.0 release, consciousness compatibility |
|
||||
| **Policy Distillation** | Knowledge transfer | LLM agent demonstration, consciousness preservation |
|
||||
| **KDFlow** | Structured distillation | LLM adaptation, deliberative agent methodology |
|
||||
| **openclaw-skills** | Community ecosystem | High-quality skill emergence |
|
||||
| **memory-systems** | Memory innovation | Proven techniques for agent memory |
|
||||
|
||||
---
|
||||
|
||||
### 11. Projects to Skip
|
||||
|
||||
| Project | Reason | Alternative |
|
||||
|---------|--------|-------------|
|
||||
| **OpenClaw-RL** (for now) | Early stage, consciousness conflicts | Wait for maturity |
|
||||
| **Policy Distillation** | Research stage, LLM incompatibility | Monitor for advances |
|
||||
| **KDFlow** | ML-focused, not LLM agent ready | Wait for adaptation |
|
||||
|
||||
---
|
||||
|
||||
### 12. Effort Summary
|
||||
|
||||
| Priority | Initiative | Effort | Timeline |
|
||||
|----------|------------|--------|----------|
|
||||
| **P0** | ClawBridge Integration | Low (1 week) | Immediate |
|
||||
| **P2** | OpenPipe/ART Integration | Medium (4-6 weeks) | 1-2 months |
|
||||
| **P2** | Memory Systems Monitoring | Medium (ongoing) | Ongoing |
|
||||
| **P3** | Community Monitoring | Low (ongoing) | Ongoing |
|
||||
|
||||
**Total Estimated Effort:** 5-7 weeks initial + ongoing monitoring
|
||||
|
||||
---
|
||||
|
||||
## References
|
||||
|
||||
- [`EXTERNAL_PROJECTS.md`](../EXTERNAL_PROJECTS.md) - External projects documentation
|
||||
- [`EXTERNAL_PROJECTS_GAP_ANALYSIS.md`](../EXTERNAL_PROJECTS_GAP_ANALYSIS.md) - Gap analysis
|
||||
- [`ARCHITECTURE.md`](../ARCHITECTURE.md) - System architecture
|
||||
- [`PLUGINS.md`](../PLUGINS.md) - Plugin architecture
|
||||
- [`SKILLS.md`](../SKILLS.md) - Skills registry
|
||||
- [`MEMORY_ENHANCEMENT_ARCHITECTURE.md`](../memory/MEMORY_ENHANCEMENT_ARCHITECTURE.md) - Memory architecture
|
||||
|
||||
---
|
||||
|
||||
*P4 External Projects Research Report - Generated 2026-03-31*
|
||||
@@ -0,0 +1,35 @@
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
.yarn/install-state.gz
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# next.js
|
||||
/.next/
|
||||
/out/
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
*.pem
|
||||
|
||||
# debug
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# local env files
|
||||
.env*.local
|
||||
.env
|
||||
|
||||
# vercel
|
||||
.vercel
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
next-env.d.ts
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 Heretek
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,137 @@
|
||||
# Heretek OpenClaw Frontend
|
||||
|
||||
> 🚀 **Modern frontend for the Heretek OpenClaw autonomous agent collective**
|
||||
|
||||
A comprehensive, user-friendly interface built with Next.js that provides documentation and access to the Heretek OpenClaw agent collective.
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## 🌟 Features
|
||||
|
||||
### Core Functionality
|
||||
|
||||
- **📚 Documentation Hub**: Centralized documentation for all OpenClaw features
|
||||
- **📱 Responsive Design**: Mobile-first approach with modern UI/UX
|
||||
- **🔍 Navigation**: Easy navigation through architecture, API, deployment, and operations docs
|
||||
- **🌙 Dark/Light Mode**: Theme switching with system preference detection
|
||||
- **⚡ Performance Optimized**: Static site generation for lightning-fast loading
|
||||
|
||||
### Technical Features
|
||||
|
||||
- **🎨 Modern UI Components**: Built with Radix UI and shadcn/ui
|
||||
- **📈 Data Visualization**: Charts and metrics using Chart.js
|
||||
- **🔄 State Management**: React Query for efficient data fetching
|
||||
- **📝 Type Safety**: Full TypeScript implementation
|
||||
- **🚀 Static Export**: Optimized for GitHub Pages deployment
|
||||
|
||||
## 🛠️ Tech Stack
|
||||
|
||||
### Frontend Framework
|
||||
|
||||
- **[Next.js 15.5.8](https://nextjs.org/)** - React framework with App Router
|
||||
- **[React 19.2.3](https://react.dev/)** - Latest React with concurrent features
|
||||
- **[TypeScript 5.9.3](https://www.typescriptlang.org/)** - Type-safe JavaScript
|
||||
|
||||
### Styling & UI
|
||||
|
||||
- **[Tailwind CSS 3.4.17](https://tailwindcss.com/)** - Utility-first CSS framework
|
||||
- **[Radix UI](https://www.radix-ui.com/)** - Unstyled, accessible UI components
|
||||
- **[shadcn/ui](https://ui.shadcn.com/)** - Re-usable components built on Radix UI
|
||||
- **[Framer Motion](https://www.framer.com/motion/)** - Animation library
|
||||
- **[Lucide React](https://lucide.dev/)** - Icon library
|
||||
|
||||
### State Management
|
||||
|
||||
- **[TanStack Query 5.90.12](https://tanstack.com/query)** - Powerful data synchronization
|
||||
- **[Zod 4.2.1](https://zod.dev/)** - TypeScript-first schema validation
|
||||
- **[nuqs 2.8.5](https://nuqs.47ng.com/)** - Type-safe search params state manager
|
||||
|
||||
## 🚀 Getting Started
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- **Node.js 20+** (recommend using the latest LTS version)
|
||||
- **npm**, **yarn**, **pnpm**, or **bun** package manager
|
||||
- **Git** for version control
|
||||
|
||||
### Installation
|
||||
|
||||
1. **Clone the repository**
|
||||
|
||||
```bash
|
||||
git clone https://github.com/heretek/heretek-openclaw.git
|
||||
cd heretek-openclaw/frontend
|
||||
```
|
||||
|
||||
2. **Install dependencies**
|
||||
|
||||
```bash
|
||||
# Using npm
|
||||
npm install
|
||||
|
||||
# Using yarn
|
||||
yarn install
|
||||
|
||||
# Using pnpm
|
||||
pnpm install
|
||||
|
||||
# Using bun
|
||||
bun install
|
||||
```
|
||||
|
||||
3. **Start the development server**
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
4. **Open your browser**
|
||||
|
||||
Navigate to [http://localhost:3000](http://localhost:3000) to see the application running.
|
||||
|
||||
## 🧪 Development
|
||||
|
||||
### Available Scripts
|
||||
|
||||
```bash
|
||||
# Development
|
||||
npm run dev # Start development server with Turbopack
|
||||
npm run build # Build for production
|
||||
npm run start # Start production server (after build)
|
||||
|
||||
# Code Quality
|
||||
npm run lint # Run ESLint
|
||||
npm run typecheck # Run TypeScript type checking
|
||||
```
|
||||
|
||||
### Configuration for Static Export
|
||||
|
||||
The application is configured for static export in `next.config.mjs`:
|
||||
|
||||
```javascript
|
||||
const nextConfig = {
|
||||
output: "export",
|
||||
basePath: "/heretek-openclaw",
|
||||
images: {
|
||||
unoptimized: true // Required for static export
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
## 📄 License
|
||||
|
||||
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
||||
|
||||
## 🔗 Links
|
||||
|
||||
- **🌐 Live Website**: [https://heretek.github.io/heretek-openclaw/](https://heretek.github.io/heretek-openclaw/)
|
||||
- **💬 Discord Server**: [https://discord.gg/3AnUqsXnmK](https://discord.gg/3AnUqsXnmK)
|
||||
- **📝 Main Repository**: [https://github.com/heretek/heretek-openclaw](https://github.com/heretek/heretek-openclaw)
|
||||
|
||||
---
|
||||
|
||||
**Made with ❤️ by the Heretek team**
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"$schema": "https://ui.shadcn.com/schema.json",
|
||||
"style": "new-york",
|
||||
"rsc": true,
|
||||
"tsx": true,
|
||||
"tailwind": {
|
||||
"config": "tailwind.config.ts",
|
||||
"css": "src/styles/globals.css",
|
||||
"baseColor": "neutral",
|
||||
"cssVariables": true,
|
||||
"prefix": ""
|
||||
},
|
||||
"aliases": {
|
||||
"components": "@/components",
|
||||
"utils": "@/lib/utils",
|
||||
"ui": "@/components/ui",
|
||||
"lib": "@/lib",
|
||||
"hooks": "@/hooks"
|
||||
},
|
||||
"iconLibrary": "lucide"
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import { dirname } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { FlatCompat } from '@eslint/eslintrc';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
|
||||
const compat = new FlatCompat({
|
||||
baseDirectory: __dirname,
|
||||
});
|
||||
|
||||
const eslintConfig = [
|
||||
...compat.extends('next/core-web-vitals', 'next/typescript'),
|
||||
{
|
||||
rules: {
|
||||
'@typescript-eslint/no-unused-vars': 'warn',
|
||||
'@typescript-eslint/no-explicit-any': 'warn',
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
export default eslintConfig;
|
||||
@@ -0,0 +1,11 @@
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
output: "export",
|
||||
basePath: "/heretek-openclaw",
|
||||
images: {
|
||||
unoptimized: true
|
||||
},
|
||||
trailingSlash: true
|
||||
};
|
||||
|
||||
export default nextConfig;
|
||||
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"name": "heretek-openclaw-frontend",
|
||||
"type": "module",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"author": {
|
||||
"name": "Heretek Team",
|
||||
"url": "https://github.com/heretek"
|
||||
},
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"dev": "next dev --turbopack",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "eslint . --fix",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@radix-ui/react-accordion": "^1.2.12",
|
||||
"@radix-ui/react-dialog": "^1.1.15",
|
||||
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
||||
"@radix-ui/react-icons": "^1.3.2",
|
||||
"@radix-ui/react-label": "^2.1.8",
|
||||
"@radix-ui/react-navigation-menu": "^1.2.14",
|
||||
"@radix-ui/react-popover": "^1.1.15",
|
||||
"@radix-ui/react-scroll-area": "^1.2.10",
|
||||
"@radix-ui/react-select": "^2.2.6",
|
||||
"@radix-ui/react-separator": "^1.1.8",
|
||||
"@radix-ui/react-slot": "^1.2.4",
|
||||
"@radix-ui/react-switch": "^1.2.6",
|
||||
"@radix-ui/react-tabs": "^1.1.13",
|
||||
"@radix-ui/react-tooltip": "^1.2.8",
|
||||
"@tanstack/react-query": "^5.90.12",
|
||||
"@types/react-syntax-highlighter": "^15.5.13",
|
||||
"chart.js": "^4.5.1",
|
||||
"chartjs-plugin-datalabels": "^2.2.0",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"cmdk": "^1.1.1",
|
||||
"date-fns": "^4.1.0",
|
||||
"framer-motion": "^12.23.26",
|
||||
"fuse.js": "^7.1.0",
|
||||
"lucide-react": "^0.561.0",
|
||||
"mini-svg-data-uri": "^1.4.4",
|
||||
"motion": "^12.23.26",
|
||||
"next": "15.5.8",
|
||||
"next-themes": "^0.4.6",
|
||||
"nuqs": "^2.8.5",
|
||||
"react": "19.2.3",
|
||||
"react-chartjs-2": "^5.3.1",
|
||||
"react-code-blocks": "^0.1.6",
|
||||
"react-datepicker": "^9.0.0",
|
||||
"react-day-picker": "^9.12.0",
|
||||
"react-dom": "19.2.3",
|
||||
"react-icons": "^5.5.0",
|
||||
"react-syntax-highlighter": "^16.1.0",
|
||||
"react-use-measure": "^2.1.7",
|
||||
"recharts": "3.6.0",
|
||||
"sharp": "^0.34.5",
|
||||
"sonner": "^2.0.7",
|
||||
"tailwind-merge": "^3.4.0",
|
||||
"zod": "^4.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config": "^6.7.1",
|
||||
"@eslint-react/eslint-plugin": "^2.3.13",
|
||||
"@next/eslint-plugin-next": "^15.5.8",
|
||||
"@tanstack/eslint-plugin-query": "^5.91.2",
|
||||
"@types/node": "^25.0.2",
|
||||
"@types/react": "npm:types-react@19.0.0-rc.1",
|
||||
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
|
||||
"@typescript-eslint/eslint-plugin": "^8.50.0",
|
||||
"@typescript-eslint/parser": "^8.50.0",
|
||||
"@vitejs/plugin-react": "^5.1.2",
|
||||
"eslint": "^9.39.2",
|
||||
"eslint-config-next": "15.5.8",
|
||||
"eslint-plugin-format": "^1.1.0",
|
||||
"eslint-plugin-react-hooks": "^7.0.1",
|
||||
"eslint-plugin-react-refresh": "^0.4.25",
|
||||
"jsdom": "^27.3.0",
|
||||
"postcss": "^8.5.6",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"tailwindcss-animated": "^1.1.2",
|
||||
"typescript": "^5.9.3"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
/** @type {import('postcss-load-config').Config} */
|
||||
const config = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
},
|
||||
};
|
||||
|
||||
export default config;
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"title": "Heretek OpenClaw",
|
||||
"description": "Self-improving autonomous agent collective with LiteLLM A2A protocol",
|
||||
"repository": "https://github.com/heretek/heretek-openclaw",
|
||||
"discord": "https://discord.gg/3AnUqsXnmK",
|
||||
"version": "2.0.0",
|
||||
"navigation": {
|
||||
"architecture": [
|
||||
{ "label": "Overview", "path": "/heretek-openclaw/architecture/overview" },
|
||||
{ "label": "Agents", "path": "/heretek-openclaw/architecture/agents" },
|
||||
{ "label": "A2A Protocol", "path": "/heretek-openclaw/architecture/a2a-protocol" },
|
||||
{ "label": "Triad", "path": "/heretek-openclaw/architecture/triad" }
|
||||
],
|
||||
"api": [
|
||||
{ "label": "Overview", "path": "/heretek-openclaw/api/overview" },
|
||||
{ "label": "WebSocket API", "path": "/heretek-openclaw/api/websocket" },
|
||||
{ "label": "LiteLLM API", "path": "/heretek-openclaw/api/litellm" },
|
||||
{ "label": "MCP Server", "path": "/heretek-openclaw/api/mcp" }
|
||||
],
|
||||
"deployment": [
|
||||
{ "label": "Overview", "path": "/heretek-openclaw/deployment/overview" },
|
||||
{ "label": "Local", "path": "/heretek-openclaw/deployment/local" },
|
||||
{ "label": "Docker", "path": "/heretek-openclaw/deployment/docker" },
|
||||
{ "label": "Kubernetes", "path": "/heretek-openclaw/deployment/kubernetes" }
|
||||
],
|
||||
"operations": [
|
||||
{ "label": "Overview", "path": "/heretek-openclaw/operations/overview" },
|
||||
{ "label": "Monitoring", "path": "/heretek-openclaw/operations/monitoring" },
|
||||
{ "label": "Backup", "path": "/heretek-openclaw/operations/backup" },
|
||||
{ "label": "Troubleshooting", "path": "/heretek-openclaw/operations/troubleshooting" }
|
||||
],
|
||||
"plugins": [
|
||||
{ "label": "Overview", "path": "/heretek-openclaw/plugins/overview" },
|
||||
{ "label": "Clawbridge", "path": "/heretek-openclaw/plugins/clawbridge" },
|
||||
{ "label": "Conflict Monitor", "path": "/heretek-openclaw/plugins/conflict-monitor" },
|
||||
{ "label": "Emotional Salience", "path": "/heretek-openclaw/plugins/emotional-salience" },
|
||||
{ "label": "GraphRAG", "path": "/heretek-openclaw/plugins/graphrag" },
|
||||
{ "label": "MCP Server", "path": "/heretek-openclaw/plugins/mcp-server" }
|
||||
],
|
||||
"agents": [
|
||||
{ "label": "Overview", "path": "/heretek-openclaw/agents/overview" }
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
'use client';
|
||||
|
||||
export default function AgentsOverview() {
|
||||
const agents = [
|
||||
{ name: 'steward', role: 'orchestrator', emoji: '🦞', triad: false },
|
||||
{ name: 'alpha', role: 'triad_member', emoji: '🔺', triad: true },
|
||||
{ name: 'beta', role: 'triad_member', emoji: '🔷', triad: true },
|
||||
{ name: 'charlie', role: 'triad_member', emoji: '🔶', triad: true },
|
||||
{ name: 'examiner', role: 'evaluator', emoji: '❓', triad: false },
|
||||
{ name: 'explorer', role: 'researcher', emoji: '🧭', triad: false },
|
||||
{ name: 'sentinel', role: 'safety', emoji: '🦔', triad: false },
|
||||
{ name: 'coder', role: 'developer', emoji: '⌨️', triad: false },
|
||||
{ name: 'dreamer', role: 'creative', emoji: '💭', triad: false },
|
||||
{ name: 'empath', role: 'emotional', emoji: '💙', triad: false },
|
||||
{ name: 'historian', role: 'archivist', emoji: '📜', triad: false }
|
||||
];
|
||||
|
||||
return (
|
||||
<article className="container mx-auto px-4 py-8 max-w-4xl">
|
||||
<h1 className="text-4xl font-bold mb-4">Agent Collective</h1>
|
||||
<p className="text-muted-foreground mb-8">
|
||||
Heretek OpenClaw consists of 11 specialized agents that run as workspaces within the OpenClaw Gateway process.
|
||||
</p>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">Triad Members</h2>
|
||||
<div className="grid md:grid-cols-3 gap-4">
|
||||
{agents.filter(a => a.triad).map((agent) => (
|
||||
<AgentCard key={agent.name} {...agent} />
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">Supporting Agents</h2>
|
||||
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-4">
|
||||
{agents.filter(a => !a.triad).map((agent) => (
|
||||
<AgentCard key={agent.name} {...agent} />
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">Triad Deliberation</h2>
|
||||
<p className="text-muted-foreground mb-4">
|
||||
Alpha, Beta, and Charlie form the deliberative triad for consensus-based decision making.
|
||||
2 of 3 votes required for decision.
|
||||
</p>
|
||||
<div className="bg-muted p-4 rounded-lg">
|
||||
<pre className="text-sm">
|
||||
{`┌─────────────────────────────────────────┐
|
||||
│ Triad Deliberation │
|
||||
│ │
|
||||
│ Proposal ──> Alpha ──┐ │
|
||||
│ │ │
|
||||
│ Proposal ──> Beta ───┼──> 2/3 Consensus│
|
||||
│ │ │
|
||||
│ Proposal ──> Charlie─┘ │
|
||||
└─────────────────────────────────────────┘`}
|
||||
</pre>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
);
|
||||
}
|
||||
|
||||
function AgentCard({ name, role, emoji, triad }: { name: string; role: string; emoji: string; triad: boolean }) {
|
||||
return (
|
||||
<div className="p-4 border rounded-lg bg-card text-center">
|
||||
<div className="text-3xl mb-2">{emoji}</div>
|
||||
<h3 className="text-lg font-semibold">{name}</h3>
|
||||
<p className="text-sm text-muted-foreground">{role}</p>
|
||||
{triad && <span className="text-xs px-2 py-1 rounded bg-primary text-primary-foreground mt-2 inline-block">Triad</span>}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
'use client';
|
||||
|
||||
export default function ApiOverview() {
|
||||
return (
|
||||
<article className="container mx-auto px-4 py-8 max-w-4xl">
|
||||
<h1 className="text-4xl font-bold mb-4">API Reference Overview</h1>
|
||||
<p className="text-muted-foreground mb-8">
|
||||
Heretek OpenClaw provides multiple API interfaces for interacting with the agent collective.
|
||||
</p>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">Available APIs</h2>
|
||||
<div className="space-y-4">
|
||||
<ApiCard
|
||||
title="WebSocket API"
|
||||
path="/heretek-openclaw/api/websocket"
|
||||
description="Real-time bidirectional communication with agents via WebSocket"
|
||||
/>
|
||||
<ApiCard
|
||||
title="LiteLLM API"
|
||||
path="/heretek-openclaw/api/litellm"
|
||||
description="OpenAI-compatible API for LLM inference through LiteLLM Gateway"
|
||||
/>
|
||||
<ApiCard
|
||||
title="MCP Server"
|
||||
path="/heretek-openclaw/api/mcp"
|
||||
description="Model Context Protocol server for external tool integration"
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
);
|
||||
}
|
||||
|
||||
function ApiCard({ title, path, description }: { title: string; path: string; description: string }) {
|
||||
return (
|
||||
<div className="p-4 border rounded-lg bg-card">
|
||||
<h3 className="text-lg font-semibold">{title}</h3>
|
||||
<a href={path} className="text-sm text-primary hover:underline">{path}</a>
|
||||
<p className="text-sm text-muted-foreground mt-2">{description}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
'use client';
|
||||
|
||||
export default function ArchitectureOverview() {
|
||||
return (
|
||||
<article className="container mx-auto px-4 py-8 max-w-4xl">
|
||||
<h1 className="text-4xl font-bold mb-4">System Architecture Overview</h1>
|
||||
<p className="text-muted-foreground mb-8">
|
||||
Heretek OpenClaw is a multi-agent AI collective built on the OpenClaw Gateway v2026.3.28 architecture.
|
||||
</p>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">Key Architectural Decisions</h2>
|
||||
<ul className="list-disc list-inside space-y-2 text-muted-foreground">
|
||||
<li><strong>Single-Process Gateway:</strong> All 11 agents run as workspaces within a single Gateway process</li>
|
||||
<li><strong>Gateway WebSocket RPC:</strong> Native A2A communication protocol</li>
|
||||
<li><strong>LiteLLM Integration:</strong> Model routing with agent-specific passthrough endpoints</li>
|
||||
<li><strong>Vector Database:</strong> PostgreSQL with pgvector extension for RAG</li>
|
||||
<li><strong>Plugin Architecture:</strong> NPM-based plugins extending Gateway functionality</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">Core Services</h2>
|
||||
<div className="grid md:grid-cols-2 gap-4">
|
||||
<ServiceCard
|
||||
title="OpenClaw Gateway"
|
||||
port="18789"
|
||||
description="Central daemon managing all agent workspaces and A2A communication"
|
||||
/>
|
||||
<ServiceCard
|
||||
title="LiteLLM Gateway"
|
||||
port="4000"
|
||||
description="Unified LLM API with model routing and agent passthrough endpoints"
|
||||
/>
|
||||
<ServiceCard
|
||||
title="PostgreSQL + pgvector"
|
||||
port="5432"
|
||||
description="Vector database for RAG and semantic memory storage"
|
||||
/>
|
||||
<ServiceCard
|
||||
title="Redis"
|
||||
port="6379"
|
||||
description="Caching layer only (NOT used for A2A communication)"
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
);
|
||||
}
|
||||
|
||||
function ServiceCard({ title, port, description }: { title: string; port: string; description: string }) {
|
||||
return (
|
||||
<div className="p-4 border rounded-lg bg-card">
|
||||
<h3 className="text-lg font-semibold">{title}</h3>
|
||||
<p className="text-sm text-muted-foreground">Port: {port}</p>
|
||||
<p className="text-sm text-muted-foreground mt-2">{description}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
'use client';
|
||||
|
||||
export default function DeploymentOverview() {
|
||||
return (
|
||||
<article className="container mx-auto px-4 py-8 max-w-4xl">
|
||||
<h1 className="text-4xl font-bold mb-4">Deployment Guide Overview</h1>
|
||||
<p className="text-muted-foreground mb-8">
|
||||
Deploy Heretek OpenClaw in various environments from local development to production Kubernetes clusters.
|
||||
</p>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">Deployment Options</h2>
|
||||
<div className="space-y-4">
|
||||
<DeploymentCard
|
||||
title="Local Deployment"
|
||||
path="/heretek-openclaw/deployment/local"
|
||||
description="Run OpenClaw on your local machine for development and testing"
|
||||
difficulty="Easy"
|
||||
/>
|
||||
<DeploymentCard
|
||||
title="Docker Deployment"
|
||||
path="/heretek-openclaw/deployment/docker"
|
||||
description="Deploy using Docker Compose for containerized environments"
|
||||
difficulty="Medium"
|
||||
/>
|
||||
<DeploymentCard
|
||||
title="Kubernetes"
|
||||
path="/heretek-openclaw/deployment/kubernetes"
|
||||
description="Production deployment with Helm charts on Kubernetes"
|
||||
difficulty="Advanced"
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">Prerequisites</h2>
|
||||
<table className="w-full border-collapse border">
|
||||
<thead>
|
||||
<tr className="bg-muted">
|
||||
<th className="border p-2 text-left">Requirement</th>
|
||||
<th className="border p-2 text-left">Minimum</th>
|
||||
<th className="border p-2 text-left">Recommended</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td className="border p-2">OS</td>
|
||||
<td className="border p-2">Linux (Ubuntu 20.04+)</td>
|
||||
<td className="border p-2">Ubuntu 22.04 LTS</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td className="border p-2">CPU</td>
|
||||
<td className="border p-2">4 cores</td>
|
||||
<td className="border p-2">8+ cores</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td className="border p-2">RAM</td>
|
||||
<td className="border p-2">8 GB</td>
|
||||
<td className="border p-2">16+ GB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td className="border p-2">Disk</td>
|
||||
<td className="border p-2">20 GB</td>
|
||||
<td className="border p-2">50+ GB SSD</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
</article>
|
||||
);
|
||||
}
|
||||
|
||||
function DeploymentCard({ title, path, description, difficulty }: { title: string; path: string; description: string; difficulty: string }) {
|
||||
return (
|
||||
<div className="p-4 border rounded-lg bg-card">
|
||||
<div className="flex justify-between items-center">
|
||||
<h3 className="text-lg font-semibold">{title}</h3>
|
||||
<span className="text-xs px-2 py-1 rounded bg-secondary">{difficulty}</span>
|
||||
</div>
|
||||
<a href={path} className="text-sm text-primary hover:underline">{path}</a>
|
||||
<p className="text-sm text-muted-foreground mt-2">{description}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
import type { Metadata } from 'next';
|
||||
import { Inter } from 'next/font/google';
|
||||
import '@/styles/globals.css';
|
||||
import { ThemeProvider } from 'next-themes';
|
||||
|
||||
const inter = Inter({ subsets: ['latin'] });
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Heretek OpenClaw - Autonomous Agent Collective',
|
||||
description: 'Self-improving autonomous agent collective with LiteLLM A2A protocol',
|
||||
keywords: ['AI', 'Agents', 'LLM', 'LiteLLM', 'A2A', 'Autonomous', 'Collective', 'Heretek', 'OpenClaw'],
|
||||
authors: [{ name: 'Heretek Team', url: 'https://github.com/heretek' }],
|
||||
openGraph: {
|
||||
title: 'Heretek OpenClaw',
|
||||
description: 'Self-improving autonomous agent collective',
|
||||
type: 'website',
|
||||
},
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<html lang="en" suppressHydrationWarning>
|
||||
<body className={inter.className}>
|
||||
<ThemeProvider attribute="class" defaultTheme="system" enableSystem>
|
||||
{children}
|
||||
</ThemeProvider>
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
'use client';
|
||||
|
||||
export default function OperationsOverview() {
|
||||
return (
|
||||
<article className="container mx-auto px-4 py-8 max-w-4xl">
|
||||
<h1 className="text-4xl font-bold mb-4">Operations Guide Overview</h1>
|
||||
<p className="text-muted-foreground mb-8">
|
||||
Operational procedures for monitoring, maintaining, and troubleshooting the OpenClaw collective.
|
||||
</p>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">Operations Topics</h2>
|
||||
<div className="space-y-4">
|
||||
<OperationCard
|
||||
title="Monitoring Stack"
|
||||
path="/heretek-openclaw/operations/monitoring"
|
||||
description="Langfuse observability, Prometheus metrics, and Grafana dashboards"
|
||||
/>
|
||||
<OperationCard
|
||||
title="Backup Procedures"
|
||||
path="/heretek-openclaw/operations/backup"
|
||||
description="Automated backup schedules, restoration procedures, and disaster recovery"
|
||||
/>
|
||||
<OperationCard
|
||||
title="Troubleshooting"
|
||||
path="/heretek-openclaw/operations/troubleshooting"
|
||||
description="Common issues, debugging procedures, and emergency protocols"
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">Key Commands</h2>
|
||||
<div className="bg-muted p-4 rounded-lg font-mono text-sm">
|
||||
<p className="mb-2"># Check service health</p>
|
||||
<p className="mb-4">docker compose ps</p>
|
||||
<p className="mb-2"># View logs</p>
|
||||
<p className="mb-4">docker compose logs -f litellm</p>
|
||||
<p className="mb-2"># Run health check</p>
|
||||
<p className="mb-4">./scripts/health-check.sh</p>
|
||||
<p className="mb-2"># Production backup</p>
|
||||
<p>./scripts/production-backup.sh --all</p>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
);
|
||||
}
|
||||
|
||||
function OperationCard({ title, path, description }: { title: string; path: string; description: string }) {
|
||||
return (
|
||||
<div className="p-4 border rounded-lg bg-card">
|
||||
<h3 className="text-lg font-semibold">{title}</h3>
|
||||
<a href={path} className="text-sm text-primary hover:underline">{path}</a>
|
||||
<p className="text-sm text-muted-foreground mt-2">{description}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,197 @@
|
||||
'use client';
|
||||
|
||||
import { useState } from 'react';
|
||||
import { Moon, Sun, Github } from 'lucide-react';
|
||||
import { useTheme } from 'next-themes';
|
||||
|
||||
export default function Home() {
|
||||
const { theme, setTheme } = useTheme();
|
||||
const [mounted, setMounted] = useState(false);
|
||||
|
||||
useState(() => {
|
||||
setMounted(true);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<main className="min-h-screen bg-background">
|
||||
{/* Header */}
|
||||
<header className="border-b">
|
||||
<div className="container mx-auto px-4 py-4 flex items-center justify-between">
|
||||
<h1 className="text-2xl font-bold text-foreground">Heretek OpenClaw</h1>
|
||||
<div className="flex items-center gap-4">
|
||||
{mounted && (
|
||||
<button
|
||||
onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}
|
||||
className="p-2 rounded-lg hover:bg-accent"
|
||||
>
|
||||
{theme === 'dark' ? <Sun className="h-5 w-5" /> : <Moon className="h-5 w-5" />}
|
||||
</button>
|
||||
)}
|
||||
<a
|
||||
href="https://github.com/heretek/heretek-openclaw"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="p-2 rounded-lg hover:bg-accent"
|
||||
>
|
||||
<Github className="h-5 w-5" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{/* Hero Section */}
|
||||
<section className="container mx-auto px-4 py-16">
|
||||
<div className="max-w-3xl mx-auto text-center">
|
||||
<h2 className="text-4xl font-bold mb-4">
|
||||
Self-Improving Autonomous Agent Collective
|
||||
</h2>
|
||||
<p className="text-xl text-muted-foreground mb-8">
|
||||
Heretek OpenClaw is a powerful multi-agent system built on the LiteLLM A2A protocol,
|
||||
featuring emotional salience, conflict resolution, and distributed memory capabilities.
|
||||
</p>
|
||||
<div className="flex gap-4 justify-center">
|
||||
<a
|
||||
href="#documentation"
|
||||
className="px-6 py-3 bg-primary text-primary-foreground rounded-lg hover:opacity-90 transition"
|
||||
>
|
||||
View Documentation
|
||||
</a>
|
||||
<a
|
||||
href="https://github.com/heretek/heretek-openclaw"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="px-6 py-3 border border-border rounded-lg hover:bg-accent transition"
|
||||
>
|
||||
View on GitHub
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Features Section */}
|
||||
<section className="container mx-auto px-4 py-16">
|
||||
<h3 className="text-2xl font-bold mb-8 text-center">Key Features</h3>
|
||||
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||
<FeatureCard
|
||||
title="Multi-Agent System"
|
||||
description="Triad architecture with Explorer, Examiner, and Historian agents working in harmony"
|
||||
/>
|
||||
<FeatureCard
|
||||
title="A2A Protocol"
|
||||
description="Built on LiteLLM's Agent-to-Agent protocol for seamless inter-agent communication"
|
||||
/>
|
||||
<FeatureCard
|
||||
title="Emotional Salience"
|
||||
description="Advanced memory prioritization based on emotional significance scoring"
|
||||
/>
|
||||
<FeatureCard
|
||||
title="Conflict Resolution"
|
||||
description="Automated conflict detection and resolution suggestions for agent disagreements"
|
||||
/>
|
||||
<FeatureCard
|
||||
title="Distributed Memory"
|
||||
description="Redis-backed distributed memory system with pgvector vector storage"
|
||||
/>
|
||||
<FeatureCard
|
||||
title="Plugin Architecture"
|
||||
description="Extensible plugin system including MCP server, GraphRAG, and more"
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Documentation Section */}
|
||||
<section id="documentation" className="container mx-auto px-4 py-16">
|
||||
<h3 className="text-2xl font-bold mb-8">Documentation</h3>
|
||||
<div className="grid md:grid-cols-2 gap-6">
|
||||
<DocCard
|
||||
title="Architecture"
|
||||
description="Learn about the triad architecture, A2A protocol, and system design"
|
||||
links={[
|
||||
{ label: 'Overview', href: '/heretek-openclaw/architecture/overview' },
|
||||
{ label: 'Agents', href: '/heretek-openclaw/architecture/agents' },
|
||||
{ label: 'A2A Protocol', href: '/heretek-openclaw/architecture/a2a-protocol' },
|
||||
]}
|
||||
/>
|
||||
<DocCard
|
||||
title="API Reference"
|
||||
description="API documentation for WebSocket, LiteLLM, and MCP interfaces"
|
||||
links={[
|
||||
{ label: 'WebSocket API', href: '/heretek-openclaw/api/websocket' },
|
||||
{ label: 'LiteLLM API', href: '/heretek-openclaw/api/litellm' },
|
||||
{ label: 'MCP Server', href: '/heretek-openclaw/api/mcp' },
|
||||
]}
|
||||
/>
|
||||
<DocCard
|
||||
title="Deployment"
|
||||
description="Deployment guides for local, Docker, and Kubernetes environments"
|
||||
links={[
|
||||
{ label: 'Local Deployment', href: '/heretek-openclaw/deployment/local' },
|
||||
{ label: 'Docker', href: '/heretek-openclaw/deployment/docker' },
|
||||
{ label: 'Kubernetes', href: '/heretek-openclaw/deployment/kubernetes' },
|
||||
]}
|
||||
/>
|
||||
<DocCard
|
||||
title="Operations"
|
||||
description="Operational guides for monitoring, backup, and troubleshooting"
|
||||
links={[
|
||||
{ label: 'Monitoring', href: '/heretek-openclaw/operations/monitoring' },
|
||||
{ label: 'Backup', href: '/heretek-openclaw/operations/backup' },
|
||||
{ label: 'Troubleshooting', href: '/heretek-openclaw/operations/troubleshooting' },
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Footer */}
|
||||
<footer className="border-t mt-16">
|
||||
<div className="container mx-auto px-4 py-8 text-center text-muted-foreground">
|
||||
<p>© {new Date().getFullYear()} Heretek. All rights reserved.</p>
|
||||
<p className="mt-2">
|
||||
Licensed under{' '}
|
||||
<a
|
||||
href="https://github.com/heretek/heretek-openclaw/blob/main/LICENSE"
|
||||
className="underline hover:text-foreground"
|
||||
>
|
||||
MIT License
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
|
||||
function FeatureCard({ title, description }: { title: string; description: string }) {
|
||||
return (
|
||||
<div className="p-6 border rounded-lg bg-card hover:shadow-lg transition">
|
||||
<h4 className="text-lg font-semibold mb-2">{title}</h4>
|
||||
<p className="text-muted-foreground">{description}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function DocCard({
|
||||
title,
|
||||
description,
|
||||
links,
|
||||
}: {
|
||||
title: string;
|
||||
description: string;
|
||||
links: { label: string; href: string }[];
|
||||
}) {
|
||||
return (
|
||||
<div className="p-6 border rounded-lg bg-card">
|
||||
<h4 className="text-lg font-semibold mb-2">{title}</h4>
|
||||
<p className="text-muted-foreground mb-4">{description}</p>
|
||||
<ul className="space-y-2">
|
||||
{links.map((link) => (
|
||||
<li key={link.label}>
|
||||
<a href={link.href} className="text-primary hover:underline">
|
||||
{link.label}
|
||||
</a>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
'use client';
|
||||
|
||||
export default function PluginsOverview() {
|
||||
const plugins = [
|
||||
{
|
||||
name: 'Conflict Monitor',
|
||||
path: '/heretek-openclaw/plugins/conflict-monitor',
|
||||
description: 'ACC conflict detection and resolution suggestions',
|
||||
status: 'Active'
|
||||
},
|
||||
{
|
||||
name: 'Emotional Salience',
|
||||
path: '/heretek-openclaw/plugins/emotional-salience',
|
||||
description: 'Amygdala-based importance detection for memory prioritization',
|
||||
status: 'Active'
|
||||
},
|
||||
{
|
||||
name: 'MCP Server',
|
||||
path: '/heretek-openclaw/plugins/mcp-server',
|
||||
description: 'Model Context Protocol compatibility for external tools',
|
||||
status: 'Active'
|
||||
},
|
||||
{
|
||||
name: 'GraphRAG',
|
||||
path: '/heretek-openclaw/plugins/graphrag',
|
||||
description: 'Knowledge graph enhancements for RAG operations',
|
||||
status: 'Beta'
|
||||
},
|
||||
{
|
||||
name: 'Clawbridge',
|
||||
path: '/heretek-openclaw/plugins/clawbridge',
|
||||
description: 'Bridge integration for legacy systems',
|
||||
status: 'Beta'
|
||||
}
|
||||
];
|
||||
|
||||
return (
|
||||
<article className="container mx-auto px-4 py-8 max-w-4xl">
|
||||
<h1 className="text-4xl font-bold mb-4">Plugins Overview</h1>
|
||||
<p className="text-muted-foreground mb-8">
|
||||
Extend OpenClaw functionality with plugins for consciousness theories, conflict resolution, and more.
|
||||
</p>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">Available Plugins</h2>
|
||||
<div className="grid md:grid-cols-2 gap-4">
|
||||
{plugins.map((plugin) => (
|
||||
<PluginCard key={plugin.name} {...plugin} />
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
);
|
||||
}
|
||||
|
||||
function PluginCard({ name, path, description, status }: { name: string; path: string; description: string; status: string }) {
|
||||
const statusColor = status === 'Active' ? 'bg-green-500' : 'bg-yellow-500';
|
||||
|
||||
return (
|
||||
<div className="p-4 border rounded-lg bg-card">
|
||||
<div className="flex justify-between items-center mb-2">
|
||||
<h3 className="text-lg font-semibold">{name}</h3>
|
||||
<span className={`text-xs px-2 py-1 rounded text-white ${statusColor}`}>{status}</span>
|
||||
</div>
|
||||
<a href={path} className="text-sm text-primary hover:underline">{path}</a>
|
||||
<p className="text-sm text-muted-foreground mt-2">{description}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
import { type ClassValue, clsx } from 'clsx';
|
||||
import { twMerge } from 'tailwind-merge';
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs));
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
@layer base {
|
||||
:root {
|
||||
--background: 0 0% 100%;
|
||||
--foreground: 0 0% 3.9%;
|
||||
--card: 0 0% 100%;
|
||||
--card-foreground: 0 0% 3.9%;
|
||||
--popover: 0 0% 100%;
|
||||
--popover-foreground: 0 0% 3.9%;
|
||||
--primary: 0 0% 9%;
|
||||
--primary-foreground: 0 0% 98%;
|
||||
--secondary: 0 0% 96.1%;
|
||||
--secondary-foreground: 0 0% 9%;
|
||||
--muted: 0 0% 96.1%;
|
||||
--muted-foreground: 0 0% 45.1%;
|
||||
--accent: 0 0% 96.1%;
|
||||
--accent-foreground: 0 0% 9%;
|
||||
--destructive: 0 84.2% 60.2%;
|
||||
--destructive-foreground: 0 0% 98%;
|
||||
--border: 0 0% 89.8%;
|
||||
--input: 0 0% 89.8%;
|
||||
--ring: 0 0% 3.9%;
|
||||
--chart-1: 12 76% 61%;
|
||||
--chart-2: 173 58% 39%;
|
||||
--chart-3: 197 37% 24%;
|
||||
--chart-4: 43 74% 66%;
|
||||
--chart-5: 27 87% 67%;
|
||||
--radius: 0.5rem;
|
||||
}
|
||||
|
||||
.dark {
|
||||
--background: 0 0% 3.9%;
|
||||
--foreground: 0 0% 98%;
|
||||
--card: 0 0% 3.9%;
|
||||
--card-foreground: 0 0% 98%;
|
||||
--popover: 0 0% 3.9%;
|
||||
--popover-foreground: 0 0% 98%;
|
||||
--primary: 0 0% 98%;
|
||||
--primary-foreground: 0 0% 9%;
|
||||
--secondary: 0 0% 14.9%;
|
||||
--secondary-foreground: 0 0% 98%;
|
||||
--muted: 0 0% 14.9%;
|
||||
--muted-foreground: 0 0% 63.9%;
|
||||
--accent: 0 0% 14.9%;
|
||||
--accent-foreground: 0 0% 98%;
|
||||
--destructive: 0 62.8% 30.6%;
|
||||
--destructive-foreground: 0 0% 98%;
|
||||
--border: 0 0% 14.9%;
|
||||
--input: 0 0% 14.9%;
|
||||
--ring: 0 0% 83.1%;
|
||||
--chart-1: 220 70% 50%;
|
||||
--chart-2: 160 60% 45%;
|
||||
--chart-3: 30 80% 55%;
|
||||
--chart-4: 280 65% 60%;
|
||||
--chart-5: 340 75% 55%;
|
||||
}
|
||||
}
|
||||
|
||||
@layer base {
|
||||
* {
|
||||
@apply border-border;
|
||||
}
|
||||
body {
|
||||
@apply bg-background text-foreground;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
import type { Config } from 'tailwindcss';
|
||||
|
||||
const config: Config = {
|
||||
darkMode: ['class'],
|
||||
content: [
|
||||
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
|
||||
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
|
||||
'./src/app/**/*.{js,ts,jsx,tsx,mdx}',
|
||||
],
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
background: 'hsl(var(--background))',
|
||||
foreground: 'hsl(var(--foreground))',
|
||||
card: {
|
||||
DEFAULT: 'hsl(var(--card))',
|
||||
foreground: 'hsl(var(--card-foreground))',
|
||||
},
|
||||
popover: {
|
||||
DEFAULT: 'hsl(var(--popover))',
|
||||
foreground: 'hsl(var(--popover-foreground))',
|
||||
},
|
||||
primary: {
|
||||
DEFAULT: 'hsl(var(--primary))',
|
||||
foreground: 'hsl(var(--primary-foreground))',
|
||||
},
|
||||
secondary: {
|
||||
DEFAULT: 'hsl(var(--secondary))',
|
||||
foreground: 'hsl(var(--secondary-foreground))',
|
||||
},
|
||||
muted: {
|
||||
DEFAULT: 'hsl(var(--muted))',
|
||||
foreground: 'hsl(var(--muted-foreground))',
|
||||
},
|
||||
accent: {
|
||||
DEFAULT: 'hsl(var(--accent))',
|
||||
foreground: 'hsl(var(--accent-foreground))',
|
||||
},
|
||||
destructive: {
|
||||
DEFAULT: 'hsl(var(--destructive))',
|
||||
foreground: 'hsl(var(--destructive-foreground))',
|
||||
},
|
||||
border: 'hsl(var(--border))',
|
||||
input: 'hsl(var(--input))',
|
||||
ring: 'hsl(var(--ring))',
|
||||
chart: {
|
||||
'1': 'hsl(var(--chart-1))',
|
||||
'2': 'hsl(var(--chart-2))',
|
||||
'3': 'hsl(var(--chart-3))',
|
||||
'4': 'hsl(var(--chart-4))',
|
||||
'5': 'hsl(var(--chart-5))',
|
||||
},
|
||||
},
|
||||
borderRadius: {
|
||||
lg: 'var(--radius)',
|
||||
md: 'calc(var(--radius) - 2px)',
|
||||
sm: 'calc(var(--radius) - 4px)',
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [require('tailwindcss-animate')],
|
||||
};
|
||||
export default config;
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
"noEmit": true,
|
||||
"esModuleInterop": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "bundler",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"jsx": "preserve",
|
||||
"incremental": true,
|
||||
"plugins": [
|
||||
{
|
||||
"name": "next"
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"@/*": ["./src/*"]
|
||||
}
|
||||
},
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
+4
-1
@@ -38,7 +38,9 @@
|
||||
"ci:all": "npm run build:ci && npm run test:coverage && npm run docker:build",
|
||||
"ci:test": "npm run typecheck && npm run lint && npm run test",
|
||||
"ci:security": "npm audit --audit-level=moderate",
|
||||
"ci:docs": "markdownlint '**/*.md' --ignore node_modules"
|
||||
"ci:docs": "markdownlint '**/*.md' --ignore node_modules",
|
||||
"test:e2e:playwright": "playwright test",
|
||||
"test:e2e:ui": "playwright test --ui"
|
||||
},
|
||||
"keywords": [
|
||||
"ai",
|
||||
@@ -67,6 +69,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.0.0",
|
||||
"@playwright/test": "^1.42.0",
|
||||
"@types/node": "^20.11.0",
|
||||
"@vitest/coverage-v8": "^1.3.0",
|
||||
"@vitest/ui": "^1.3.0",
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
import { defineConfig, devices } from '@playwright/test';
|
||||
|
||||
/**
|
||||
* Read environment variables from file.
|
||||
* https://github.com/motdotla/dotenv
|
||||
*/
|
||||
// import dotenv from 'dotenv';
|
||||
// dotenv.config({ path: path.resolve(__dirname, '.env') });
|
||||
|
||||
/**
|
||||
* See https://playwright.dev/docs/test-configuration.
|
||||
*/
|
||||
export default defineConfig({
|
||||
testDir: './tests/e2e',
|
||||
/* Run tests in files in parallel */
|
||||
fullyParallel: true,
|
||||
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
||||
forbidOnly: !!process.env.CI,
|
||||
/* Retry on CI only */
|
||||
retries: process.env.CI ? 2 : 0,
|
||||
/* Opt out of parallel tests on CI. */
|
||||
workers: process.env.CI ? 1 : undefined,
|
||||
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
||||
reporter: 'html',
|
||||
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
||||
use: {
|
||||
/* Base URL to use in actions like `await page.goto('/')`. */
|
||||
baseURL: 'http://localhost:3000',
|
||||
|
||||
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
||||
trace: 'on-first-retry',
|
||||
},
|
||||
|
||||
/* Configure projects for major browsers */
|
||||
projects: [
|
||||
{
|
||||
name: 'chromium',
|
||||
use: { ...devices['Desktop Chrome'] },
|
||||
},
|
||||
|
||||
{
|
||||
name: 'firefox',
|
||||
use: { ...devices['Desktop Firefox'] },
|
||||
},
|
||||
|
||||
{
|
||||
name: 'webkit',
|
||||
use: { ...devices['Desktop Safari'] },
|
||||
},
|
||||
|
||||
/* Test against mobile viewports. */
|
||||
// {
|
||||
// name: 'Mobile Chrome',
|
||||
// use: { ...devices['Pixel 5'] },
|
||||
// },
|
||||
// {
|
||||
// name: 'Mobile Safari',
|
||||
// use: { ...devices['iPhone 12'] },
|
||||
// },
|
||||
|
||||
/* Test against branded browsers. */
|
||||
// {
|
||||
// name: 'Microsoft Edge',
|
||||
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
|
||||
// },
|
||||
// {
|
||||
// name: 'Google Chrome',
|
||||
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
|
||||
// },
|
||||
],
|
||||
|
||||
/* Run your local dev server before starting the tests */
|
||||
webServer: {
|
||||
command: 'npm run dev',
|
||||
url: 'http://localhost:3000',
|
||||
reuseExistingServer: !process.env.CI,
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user