Files
log/README.md
2025-06-15 15:23:32 +09:00

559 lines
14 KiB
Markdown

# ai.log
AI-powered static blog generator with ATProto integration, part of the ai.ai ecosystem.
## 🚀 Quick Start
### Installation & Setup
```bash
# 1. Clone repository
git clone https://git.syui.ai/ai/log
cd log
# 2. Build ailog
cargo build --release
# 3. Initialize blog
./target/release/ailog init my-blog
# 4. Create your first post
./target/release/ailog new "My First Post"
# 5. Build static site
./target/release/ailog build
# 6. Serve locally
./target/release/ailog serve
```
### Install via Cargo
```bash
cargo install --path .
# Now you can use `ailog` command globally
```
## 📖 Core Commands
### Blog Management
```bash
# Project setup
ailog init <project-name> # Initialize new blog project
ailog new <title> # Create new blog post
ailog build # Generate static site with JSON index
ailog serve # Start development server
ailog clean # Clean build artifacts
# ATProto authentication
ailog auth init # Setup ATProto credentials
ailog auth status # Check authentication status
ailog auth logout # Clear credentials
# OAuth app build
ailog oauth build <project-dir> # Build OAuth comment system
```
### Stream & AI Features
```bash
# Start monitoring & AI generation
ailog stream start --ai-generate # Monitor blog + auto-generate AI content
ailog stream start --daemon # Run as background daemon
ailog stream status # Check stream status
ailog stream stop # Stop monitoring
ailog stream test # Test ATProto API access
```
### Documentation & Translation
```bash
# Generate documentation
ailog doc readme --with-ai # Generate enhanced README
ailog doc api --output ./docs # Generate API documentation
ailog doc structure --include-deps # Analyze project structure
# AI-powered translation
ailog doc translate --input README.md --target-lang en
ailog doc translate --input docs/guide.ja.md --target-lang en --model qwen2.5:latest
```
## 🏗️ Architecture
### Project Structure
```
ai.log/
├── src/ # Rust static blog generator
│ ├── commands/ # CLI command implementations
│ ├── generator.rs # Core blog generation + JSON index
│ ├── mcp/ # MCP server integration
│ └── main.rs # CLI entry point
├── my-blog/ # Your blog content
│ ├── content/posts/ # Markdown blog posts
│ ├── templates/ # Tera templates
│ ├── static/ # Static assets
│ └── public/ # Generated site output
├── oauth/ # ATProto comment system
│ ├── src/ # TypeScript OAuth app
│ ├── dist/ # Built OAuth assets
│ └── package.json # Node.js dependencies
└── target/ # Rust build output
```
### Data Flow
```
Blog Posts (Markdown) → ailog build → public/
├── Static HTML pages
└── index.json (API)
ailog stream start --ai-generate → Monitor index.json
New posts detected → Ollama AI → ATProto records
├── ai.syui.log.chat.lang (translations)
└── ai.syui.log.chat.comment (AI comments)
OAuth app → Display AI-generated content
```
## 🤖 AI Integration
### AI Content Generation
The `--ai-generate` flag enables automatic AI content generation:
1. **Blog Monitoring**: Monitors `index.json` every 5 minutes
2. **Duplicate Prevention**: Checks existing ATProto collections
3. **AI Generation**: Uses Ollama (gemma3:4b) for translations & comments
4. **ATProto Storage**: Saves to derived collections (`base.chat.lang`, `base.chat.comment`)
```bash
# Start AI generation monitor
ailog stream start --ai-generate
# Output:
# 🤖 Starting AI content generation monitor...
# 📡 Blog host: https://syui.ai
# 🧠 Ollama host: https://ollama.syui.ai
# 🔍 Checking for new blog posts...
# ✅ Generated translation for: 静的サイトジェネレータを作った
# ✅ Generated comment for: 静的サイトジェネレータを作った
```
### Collection Management
ailog uses a **simplified collection structure** based on a single base collection name:
```bash
# Single environment variable controls all collections (unified naming)
export VITE_OAUTH_COLLECTION="ai.syui.log"
# Automatically derives:
# - ai.syui.log (comments)
# - ai.syui.log.user (user management)
# - ai.syui.log.chat.lang (AI translations)
# - ai.syui.log.chat.comment (AI comments)
```
**Benefits:**
-**Simple**: One variable instead of 5+
-**Consistent**: All collections follow the same pattern
-**Manageable**: Easy systemd/production configuration
### Ask AI Feature
Interactive AI chat integrated into blog pages:
```bash
# 1. Setup Ollama
brew install ollama
ollama pull gemma2:2b
# 2. Start with CORS support
OLLAMA_ORIGINS="https://example.com" ollama serve
# 3. Configure AI DID in templates/base.html
const aiConfig = {
systemPrompt: 'You are a helpful AI assistant.',
aiDid: 'did:plc:your-ai-bot-did'
};
```
## 🌐 ATProto Integration
### OAuth Comment System
The OAuth app provides ATProto-authenticated commenting:
```bash
# 1. Build OAuth app
cd oauth
npm install
npm run build
# 2. Configure for production
ailog oauth build my-blog # Auto-generates .env.production
# 3. Deploy OAuth assets
# Assets are automatically copied to public/ during ailog build
```
### Authentication Setup
```bash
# Initialize ATProto authentication
ailog auth init
# Input required:
# - Handle (e.g., your.handle.bsky.social)
# - Access JWT
# - Refresh JWT
# Check status
ailog auth status
```
### Collection Structure
All ATProto collections are **automatically derived** from a single base name:
```
Base Collection: "ai.syui.log"
├── ai.syui.log (user comments)
├── ai.syui.log.user (registered commenters)
└── ai.syui.log.chat/
├── ai.syui.log.chat.lang (AI translations)
└── ai.syui.log.chat.comment (AI comments)
```
**Configuration Priority:**
1. Environment variable: `VITE_OAUTH_COLLECTION` (unified)
2. config.toml: `[oauth] collection = "..."`
3. Auto-generated from domain (e.g., `log.syui.ai``ai.syui.log`)
4. Default: `ai.syui.log`
### Stream Monitoring
```bash
# Monitor ATProto streams for comments
ailog stream start
# Enable AI generation alongside monitoring
ailog stream start --ai-generate --daemon
```
## 📱 OAuth App Features
The OAuth TypeScript app provides:
### Comment System
- **Real-time Comments**: ATProto-authenticated commenting
- **User Management**: Automatic user registration
- **Mobile Responsive**: Optimized for all devices
- **JSON View**: Technical record inspection
### AI Content Display
- **Lang: EN Tab**: AI-generated English translations
- **AI Comment Tab**: AI-generated blog insights
- **Admin Records**: Fetches from admin DID collections
- **Real-time Updates**: Live content refresh
### Setup & Configuration
```bash
cd oauth
# Development
npm run dev
# Production build
npm run build
# Preview production
npm run preview
```
**Environment Variables:**
```bash
# Production (.env.production - auto-generated by ailog oauth build)
VITE_APP_HOST=https://syui.ai
VITE_OAUTH_CLIENT_ID=https://syui.ai/client-metadata.json
VITE_OAUTH_REDIRECT_URI=https://syui.ai/oauth/callback
VITE_ADMIN_DID=did:plc:uqzpqmrjnptsxezjx4xuh2mn
# Simplified collection configuration (single base collection)
VITE_OAUTH_COLLECTION=ai.syui.log
# AI Configuration
VITE_AI_ENABLED=true
VITE_AI_ASK_AI=true
VITE_AI_PROVIDER=ollama
# ... (other AI settings)
```
## 🔧 Advanced Features
### JSON Index Generation
Every `ailog build` generates `/public/index.json`:
```json
[
{
"title": "静的サイトジェネレータを作った",
"href": "https://syui.ai/posts/2025-06-06-ailog.html",
"formated_time": "Thu Jun 12, 2025",
"utc_time": "2025-06-12T00:00:00Z",
"tags": ["blog", "rust", "mcp", "atp"],
"contents": "Plain text content...",
"description": "Excerpt...",
"categories": []
}
]
```
This enables:
- **API Access**: Programmatic blog content access
- **Stream Monitoring**: AI generation triggers
- **Search Integration**: Full-text search capabilities
### Translation System
AI-powered document translation with Ollama:
```bash
# Basic translation
ailog doc translate --input README.md --target-lang en
# Advanced options
ailog doc translate \
--input docs/guide.ja.md \
--target-lang en \
--source-lang ja \
--model qwen2.5:latest \
--output docs/guide.en.md
```
**Features:**
- **Markdown-aware**: Preserves code blocks, links, tables
- **Multiple models**: qwen2.5, gemma3, etc.
- **Auto-detection**: Detects Japanese content automatically
- **Structure preservation**: Maintains document formatting
### MCP Server Integration
```bash
# Start MCP server for ai.gpt integration
ailog mcp --port 8002
# Available tools:
# - create_blog_post
# - list_blog_posts
# - build_blog
# - get_post_content
# - translate_document
# - generate_documentation
```
## 🚀 Deployment
### GitHub Actions
```yaml
name: Deploy ai.log Blog
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Build ailog
run: cargo build --release
- name: Build blog
run: |
cd my-blog
../target/release/ailog build
- name: Deploy to Cloudflare Pages
uses: cloudflare/pages-action@v1
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
projectName: my-blog
directory: my-blog/public
```
### Production Setup
```bash
# 1. Build for production
cargo build --release
# 2. Setup systemd services
sudo cp systemd/system/ailog-stream.service /etc/systemd/system/
sudo systemctl enable ailog-stream.service
sudo systemctl start ailog-stream.service
# 3. Configure Ollama with CORS
sudo vim /usr/lib/systemd/system/ollama.service
# Add: Environment="OLLAMA_ORIGINS=https://yourdomain.com"
# 4. Monitor services
journalctl -u ailog-stream.service -f
```
## 🌍 Translation Support
### Supported Languages
| Language | Code | Status | Model |
|----------|------|--------|-------|
| English | `en` | ✅ Full | qwen2.5 |
| Japanese | `ja` | ✅ Full | qwen2.5 |
| Chinese | `zh` | ✅ Full | qwen2.5 |
| Korean | `ko` | ⚠️ Basic | qwen2.5 |
| Spanish | `es` | ⚠️ Basic | qwen2.5 |
### Translation Workflow
1. **Parse**: Analyze markdown structure
2. **Preserve**: Isolate code blocks and technical content
3. **Translate**: Process with Ollama AI
4. **Reconstruct**: Rebuild with original formatting
5. **Validate**: Ensure structural integrity
## 🎯 Use Cases
### Personal Blog
- **AI-Enhanced**: Automatic translations and AI insights
- **Distributed Comments**: ATProto-based social interaction
- **Mobile-First**: Responsive OAuth comment system
### Technical Documentation
- **Code Analysis**: Automatic API documentation
- **Multi-language**: AI-powered translation
- **Structure Analysis**: Project overview generation
### AI Ecosystem Integration
- **ai.gpt Connection**: Memory-driven content generation
- **MCP Integration**: Claude Code workflow support
- **Distributed Identity**: ATProto authentication
## 🔍 Troubleshooting
### Build Issues
```bash
# Check Rust version
rustc --version
# Update dependencies
cargo update
# Clean build
cargo clean && cargo build --release
```
### Authentication Problems
```bash
# Reset authentication
ailog auth logout
ailog auth init
# Test API access
ailog stream test
```
### AI Generation Issues
```bash
# Check Ollama status
curl http://localhost:11434/api/tags
# Test with manual request
curl -X POST http://localhost:11434/api/generate \
-d '{"model":"gemma3:4b","prompt":"Test","stream":false}'
# Check CORS settings
# Ensure OLLAMA_ORIGINS includes your domain
```
### OAuth App Issues
```bash
# Rebuild OAuth assets
cd oauth
rm -rf dist/
npm run build
# Check environment variables
cat .env.production
# Verify client-metadata.json
curl https://yourdomain.com/client-metadata.json
```
## 📚 Documentation
### Core Concepts
- **Static Generation**: Rust-powered site building
- **JSON Index**: API-compatible blog data
- **ATProto Integration**: Distributed social features
- **AI Enhancement**: Automatic content generation
### File Structure
- `config.toml`: Blog configuration (simplified collection setup)
- `content/posts/*.md`: Blog post sources
- `templates/*.html`: Tera template files
- `public/`: Generated static site + API (index.json)
- `oauth/dist/`: Built OAuth assets
### Example config.toml
```toml
[site]
title = "My Blog"
base_url = "https://myblog.com"
[oauth]
admin = "did:plc:your-admin-did"
collection = "ai.myblog.log" # Single base collection
[ai]
enabled = true
auto_translate = true
comment_moderation = true
model = "gemma3:4b"
host = "https://ollama.syui.ai"
```
## 🔗 ai.ai Ecosystem
ai.log is part of the broader ai.ai ecosystem:
- **ai.gpt**: Memory system and AI integration
- **ai.card**: ATProto-based card game system
- **ai.bot**: Social media automation
- **ai.verse**: 3D virtual world integration
- **ai.shell**: AI-powered shell interface
### yui System Compliance
- **Uniqueness**: Each blog tied to individual identity
- **Reality Reflection**: Personal memories → digital content
- **Irreversibility**: Published content maintains integrity
## 📝 License
© syui
---
**Part of the ai ecosystem**: ai.gpt, ai.card, ai.log, ai.bot, ai.verse, ai.shell