655 lines
19 KiB
Markdown
655 lines
19 KiB
Markdown
# ai.log
|
|
|
|
AI-powered static blog generator with ATProto integration, part of the ai.ai ecosystem.
|
|
|
|
## 🚀 Quick Start
|
|
|
|
### Development Setup
|
|
|
|
```bash
|
|
# 1. Clone and setup
|
|
git clone https://git.syui.ai/ai/log
|
|
cd log
|
|
|
|
# 2. Start development services
|
|
./run.zsh serve # Blog development server
|
|
./run.zsh c # Cloudflare tunnel (example.com)
|
|
./run.zsh o # OAuth web server
|
|
./run.zsh co # Comment system monitor
|
|
|
|
# 3. Start Ollama (for Ask AI)
|
|
brew install ollama
|
|
ollama pull gemma2:2b
|
|
OLLAMA_ORIGINS="https://example.com" ollama serve
|
|
```
|
|
|
|
### Production Deployment
|
|
|
|
```bash
|
|
# 1. Build static site
|
|
hugo
|
|
|
|
# 2. Deploy to GitHub Pages
|
|
git add .
|
|
git commit -m "Update blog"
|
|
git push origin main
|
|
|
|
# 3. Automatic deployment via GitHub Actions
|
|
# Site available at: https://yourusername.github.io/repo-name
|
|
```
|
|
|
|
### ATProto Integration
|
|
|
|
```bash
|
|
# 1. OAuth Client Setup (oauth/client-metadata.json)
|
|
{
|
|
"client_id": "https://example.com/client-metadata.json",
|
|
"client_name": "ai.log Blog System",
|
|
"redirect_uris": ["https://example.com/oauth/callback"],
|
|
"scope": "atproto",
|
|
"grant_types": ["authorization_code", "refresh_token"],
|
|
"response_types": ["code"],
|
|
"application_type": "web",
|
|
"dpop_bound_access_tokens": true
|
|
}
|
|
|
|
# 2. Comment System Configuration
|
|
# Collection: ai.syui.log (comments)
|
|
# User Management: ai.syui.log.user (registered users)
|
|
|
|
# 3. Services
|
|
./run.zsh o # OAuth authentication server
|
|
./run.zsh co # ATProto Jetstream comment monitor
|
|
```
|
|
|
|
### Development with run.zsh
|
|
|
|
```bash
|
|
# Development
|
|
./run.zsh serve
|
|
|
|
# Production (with Cloudflare Tunnel)
|
|
./run.zsh tunnel
|
|
|
|
# OAuth app development
|
|
./run.zsh o
|
|
|
|
# Comment system monitoring
|
|
./run.zsh co
|
|
```
|
|
|
|
## 📋 Commands
|
|
|
|
| Command | Description |
|
|
|---------|-------------|
|
|
| `./run.zsh c` | Enable Cloudflare tunnel (example.com) for OAuth |
|
|
| `./run.zsh o` | Start OAuth web server (port:4173 = example.com) |
|
|
| `./run.zsh co` | Start comment system (ATProto stream monitor) |
|
|
|
|
## 🏗️ Architecture (Pure Rust + HTML + JS)
|
|
|
|
```
|
|
ai.log/
|
|
├── oauth/ # 🎯 OAuth files (protected)
|
|
│ ├── oauth-widget-simple.js # Self-contained OAuth widget
|
|
│ ├── oauth-simple.html # OAuth authentication page
|
|
│ ├── client-metadata.json # ATProto configuration
|
|
│ └── README.md # Usage guide
|
|
├── my-blog/ # Blog content and templates
|
|
│ ├── content/posts/ # Markdown blog posts
|
|
│ ├── templates/ # Tera templates
|
|
│ ├── static/ # Static assets (OAuth copied here)
|
|
│ └── public/ # Generated site (build output)
|
|
├── src/ # Rust blog generator
|
|
├── scripts/ # Build and deployment scripts
|
|
└── run.zsh # 🎯 Main build script
|
|
```
|
|
|
|
### ✅ Node.js Dependencies Eliminated
|
|
- ❌ `package.json` - Removed
|
|
- ❌ `node_modules/` - Removed
|
|
- ❌ `npm run build` - Not needed
|
|
- ✅ Pure JavaScript OAuth implementation
|
|
- ✅ CDN-free, self-contained code
|
|
- ✅ Rust-only build process
|
|
|
|
---
|
|
|
|
## 📖 Original Features
|
|
|
|
[](https://www.rust-lang.org/)
|
|
[](https://opensource.org/licenses/MIT)
|
|
|
|
## 概要
|
|
|
|
ai.logは、[Anthropic Docs](https://docs.anthropic.com/)にインスパイアされたモダンなインターフェースを持つ、次世代静的ブログジェネレーターです。ai.gptとの深い統合、ローカルAI機能、atproto OAuth連携により、従来のブログシステムを超えた体験を提供します。
|
|
|
|
## 主な特徴
|
|
|
|
### 🎨 モダンインターフェース
|
|
- **Anthropic Docs風デザイン**: プロフェッショナルで読みやすい
|
|
- **Timeline形式**: BlueskyライクなタイムラインUI
|
|
- **自動TOC**: 右サイドバーに目次を自動生成
|
|
- **レスポンシブ**: モバイル・デスクトップ対応
|
|
|
|
### 🤖 Ask AI機能 ✅
|
|
- **ローカルAI**: Ollama(gemma2:2b)による質問応答
|
|
- **認証必須**: ATProto OAuth認証でアクセス制御
|
|
- **トップページ限定**: ブログコンテンツに特化した回答
|
|
- **CORS解決済み**: OLLAMA_ORIGINS設定でクロスオリジン問題解消
|
|
- **プロフィール連携**: AIアバターとしてATProtoプロフィール画像表示
|
|
- **レスポンス最適化**: 80文字制限+高いtemperatureで多様な回答
|
|
- **ローディング表示**: Font Awesomeアイコンによる一行ローディング
|
|
|
|
### 🔧 Ask AI設定方法
|
|
```bash
|
|
# 1. Ollama設定
|
|
brew install ollama
|
|
ollama pull gemma2:2b
|
|
|
|
# 2. CORS設定で起動
|
|
OLLAMA_ORIGINS="https://example.com" ollama serve
|
|
|
|
# 3. AI DID設定 (my-blog/templates/base.html)
|
|
const aiConfig = {
|
|
systemPrompt: 'You are a helpful AI assistant.',
|
|
aiDid: 'did:plc:your-ai-bot-did'
|
|
};
|
|
```
|
|
|
|
### 🌐 分散SNS連携
|
|
- **atproto OAuth**: Blueskyアカウントでログイン
|
|
- **コメントシステム**: 分散SNSコメント
|
|
- **データ主権**: ユーザーがデータを所有
|
|
|
|
### 🔗 エコシステム統合
|
|
- **ai.gpt**: ドキュメント同期・AI機能連携
|
|
- **MCP Server**: ai.gptからの操作をサポート
|
|
- **ai.wiki**: 自動ドキュメント同期
|
|
|
|
## Architecture
|
|
|
|
### Dual MCP Integration
|
|
|
|
**ai.log MCP Server (API Layer)**
|
|
- **Role**: Independent blog API
|
|
- **Port**: 8002
|
|
- **Location**: `./src/mcp/`
|
|
- **Function**: Core blog generation and management
|
|
|
|
**ai.gpt Integration (Server Layer)**
|
|
- **Role**: AI integration gateway
|
|
- **Port**: 8001 (within ai.gpt)
|
|
- **Location**: `../src/aigpt/mcp_server.py`
|
|
- **Function**: AI memory system + HTTP proxy to ai.log
|
|
|
|
### Data Flow
|
|
```
|
|
Claude Code → ai.gpt (Server/AI) → ai.log (API/Blog) → Static Site
|
|
↑ ↑
|
|
Memory System File Operations
|
|
Relationship AI Markdown Processing
|
|
Context Analysis Template Rendering
|
|
```
|
|
|
|
## Features
|
|
|
|
- **Static Blog Generation**: Inspired by Zola, built with Rust
|
|
- **AI-Powered Content**: Memory-driven article generation via ai.gpt
|
|
- **🌍 Ollama Translation**: Multi-language markdown translation with structure preservation
|
|
- **atproto Integration**: OAuth authentication and comment system (planned)
|
|
- **MCP Integration**: Seamless Claude Code workflow
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
cargo install ailog
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Standalone Mode
|
|
|
|
```bash
|
|
# Initialize a new blog
|
|
ailog init myblog
|
|
|
|
# Create a new post
|
|
ailog new "My First Post"
|
|
|
|
# Build the blog
|
|
ailog build
|
|
|
|
# Serve locally
|
|
ailog serve
|
|
|
|
# Start MCP server
|
|
ailog mcp --port 8002
|
|
|
|
# Generate documentation
|
|
ailog doc readme --with-ai
|
|
ailog doc api --output ./docs
|
|
ailog doc structure --include-deps
|
|
|
|
# Translate documents (requires Ollama)
|
|
ailog doc translate --input README.md --target-lang en
|
|
ailog doc translate --input docs/api.md --target-lang ja --model qwen2.5:latest
|
|
|
|
# Clean build files
|
|
ailog clean
|
|
```
|
|
|
|
### AI Ecosystem Integration
|
|
|
|
When integrated with ai.gpt, use natural language:
|
|
- "ブログ記事を書いて" → Triggers `log_ai_content`
|
|
- "記事一覧を見せて" → Triggers `log_list_posts`
|
|
- "ブログをビルドして" → Triggers `log_build_blog`
|
|
|
|
### Documentation & Translation
|
|
|
|
Generate comprehensive documentation and translate content:
|
|
- "READMEを生成して" → Triggers `log_generate_docs`
|
|
- "APIドキュメントを作成して" → Generates API documentation
|
|
- "プロジェクト構造を解析して" → Creates structure documentation
|
|
- "このファイルを英語に翻訳して" → Triggers `log_translate_document`
|
|
- "マークダウンを日本語に変換して" → Uses Ollama for translation
|
|
|
|
## MCP Tools
|
|
|
|
### ai.log Server (Port 8002)
|
|
- `create_blog_post` - Create new blog post
|
|
- `list_blog_posts` - List existing posts
|
|
- `build_blog` - Build static site
|
|
- `get_post_content` - Get post by slug
|
|
- `translate_document` ⭐ - Ollama-powered markdown translation
|
|
- `generate_documentation` ⭐ - Code analysis and documentation generation
|
|
|
|
### ai.gpt Integration (Port 8001)
|
|
- `log_create_post` - Proxy to ai.log + error handling
|
|
- `log_list_posts` - Proxy to ai.log + formatting
|
|
- `log_build_blog` - Proxy to ai.log + AI features
|
|
- `log_get_post` - Proxy to ai.log + context
|
|
- `log_system_status` - Health check for ai.log
|
|
- `log_ai_content` ⭐ - AI memory → blog content generation
|
|
- `log_translate_document` 🌍 - Document translation via Ollama
|
|
- `log_generate_docs` 📚 - Documentation generation
|
|
|
|
### Documentation Generation Tools
|
|
- `doc readme` - Generate README.md from project analysis
|
|
- `doc api` - Generate API documentation
|
|
- `doc structure` - Analyze and document project structure
|
|
- `doc changelog` - Generate changelog from git history
|
|
- `doc translate` 🌍 - Multi-language document translation
|
|
|
|
### Translation Features
|
|
- **Language Support**: English, Japanese, Chinese, Korean, Spanish
|
|
- **Markdown Preservation**: Code blocks, links, images, tables maintained
|
|
- **Auto-Detection**: Automatically detects Japanese content
|
|
- **Ollama Integration**: Uses local AI models for privacy and cost-efficiency
|
|
- **Smart Processing**: Section-by-section translation with structure awareness
|
|
|
|
## Configuration
|
|
|
|
### ai.log Configuration
|
|
- Location: `~/.config/syui/ai/log/`
|
|
- Format: TOML configuration
|
|
|
|
### ai.gpt Integration
|
|
- Configuration: `../config.json`
|
|
- Auto-detection: ai.log tools enabled when `./log/` directory exists
|
|
- System prompt: Automatically triggers blog tools for related queries
|
|
|
|
## AI Integration Features
|
|
|
|
### Memory-Driven Content Generation
|
|
- **Source**: ai.gpt memory system
|
|
- **Process**: Contextual memories → AI analysis → Blog content
|
|
- **Output**: Structured markdown with personal insights
|
|
|
|
### Automatic Workflows
|
|
- Daily blog posts from accumulated memories
|
|
- Content enhancement and suggestions
|
|
- Related article recommendations
|
|
- Multi-language content generation
|
|
|
|
## atproto Integration (Planned)
|
|
|
|
### OAuth 2.0 Authentication
|
|
- Client metadata: `public/client-metadata.json`
|
|
- Comment system integration
|
|
- Data sovereignty: Users own their comments
|
|
- Collection storage in atproto
|
|
|
|
### Comment System
|
|
- **ATProto Stream Monitoring**: Real-time Jetstream connection monitoring
|
|
- **Collection Tracking**: Monitors `ai.syui.log` collection for new comments
|
|
- **User Management**: Automatically adds commenting users to `ai.syui.log.user` collection
|
|
- **Comment Display**: Fetches and displays comments from registered users
|
|
- **OAuth Integration**: atproto account login via Cloudflare tunnel
|
|
- **Distributed Storage**: Comments stored in user-owned atproto collections
|
|
|
|
## Build & Deploy
|
|
|
|
### GitHub Actions
|
|
```yaml
|
|
# .github/workflows/gh-pages.yml
|
|
- name: Build ai.log
|
|
run: |
|
|
cd log
|
|
cargo build --release
|
|
./target/release/ailog build
|
|
```
|
|
|
|
### Cloudflare Pages
|
|
- Static output: `./public/`
|
|
- Automatic deployment on main branch push
|
|
- AI content generation during build process
|
|
|
|
## Development Status
|
|
|
|
### ✅ Completed Features
|
|
- Project structure and Cargo.toml setup
|
|
- CLI interface (init, new, build, serve, clean, mcp, doc)
|
|
- Configuration system with TOML support
|
|
- Markdown parsing with frontmatter support
|
|
- Template system with Handlebars
|
|
- Static site generation with posts and pages
|
|
- Development server with hot reload
|
|
- **MCP server integration (both layers)**
|
|
- **ai.gpt integration with 6 tools**
|
|
- **AI memory system connection**
|
|
- **📚 Documentation generation from code**
|
|
- **🔍 Rust project analysis and API extraction**
|
|
- **📝 README, API docs, and structure analysis**
|
|
- **🌍 Ollama-powered translation system**
|
|
- **🚀 Complete MCP integration with ai.gpt**
|
|
- **📄 Markdown-aware translation preserving structure**
|
|
- **💬 ATProto comment system with Jetstream monitoring**
|
|
- **🔄 Real-time comment collection and user management**
|
|
- **🔐 OAuth 2.1 integration with Cloudflare tunnel**
|
|
- **🤖 Ask AI feature with Ollama integration**
|
|
- **⚡ CORS resolution via OLLAMA_ORIGINS**
|
|
- **🔒 Authentication-gated AI chat**
|
|
- **📱 Top-page-only AI access pattern**
|
|
- Test blog with sample content and styling
|
|
|
|
### 🚧 In Progress
|
|
- AI-powered content enhancement pipeline
|
|
- Advanced comment moderation system
|
|
|
|
### 📋 Planned Features
|
|
- Advanced template customization
|
|
- Plugin system for extensibility
|
|
- Real-time comment system
|
|
- Multi-blog management
|
|
- VTuber integration (ai.verse connection)
|
|
|
|
## Integration with ai Ecosystem
|
|
|
|
### System Dependencies
|
|
- **ai.gpt**: Memory system, relationship tracking, AI provider
|
|
- **ai.card**: Future cross-system content sharing
|
|
- **ai.bot**: atproto posting and mention handling
|
|
- **ai.verse**: 3D world blog representation (future)
|
|
|
|
### yui System Compliance
|
|
- **Uniqueness**: Each blog post tied to individual identity
|
|
- **Reality Reflection**: Personal memories → digital content
|
|
- **Irreversibility**: Published content maintains historical integrity
|
|
|
|
## Getting Started
|
|
|
|
### 1. Standalone Usage
|
|
```bash
|
|
git clone [repository]
|
|
cd log
|
|
cargo run -- init my-blog
|
|
cargo run -- new "First Post"
|
|
cargo run -- build
|
|
cargo run -- serve
|
|
```
|
|
|
|
### 2. AI Ecosystem Integration
|
|
```bash
|
|
# Start ai.log MCP server
|
|
cargo run -- mcp --port 8002
|
|
|
|
# In another terminal, start ai.gpt
|
|
cd ../
|
|
# ai.gpt startup commands
|
|
|
|
# Use Claude Code with natural language blog commands
|
|
```
|
|
|
|
## Documentation Generation Features
|
|
|
|
### 📚 Automatic README Generation
|
|
```bash
|
|
# Generate README from project analysis
|
|
ailog doc readme --source ./src --with-ai
|
|
|
|
# Output: Enhanced README.md with:
|
|
# - Project overview and metrics
|
|
# - Dependency analysis
|
|
# - Module structure
|
|
# - AI-generated insights
|
|
```
|
|
|
|
### 📖 API Documentation
|
|
```bash
|
|
# Generate comprehensive API docs
|
|
ailog doc api --source ./src --format markdown --output ./docs
|
|
|
|
# Creates:
|
|
# - docs/api.md (main API overview)
|
|
# - docs/module_name.md (per-module documentation)
|
|
# - Function signatures and documentation
|
|
# - Struct/enum definitions
|
|
```
|
|
|
|
### 🏗️ Project Structure Analysis
|
|
```bash
|
|
# Analyze and document project structure
|
|
ailog doc structure --source . --include-deps
|
|
|
|
# Generates:
|
|
# - Directory tree visualization
|
|
# - File distribution by language
|
|
# - Dependency graph analysis
|
|
# - Code metrics and statistics
|
|
```
|
|
|
|
### 📝 Git Changelog Generation
|
|
```bash
|
|
# Generate changelog from git history
|
|
ailog doc changelog --from v1.0.0 --explain-changes
|
|
|
|
# Creates:
|
|
# - Structured changelog
|
|
# - Commit categorization
|
|
# - AI-enhanced change explanations
|
|
```
|
|
|
|
### 🤖 AI-Enhanced Documentation
|
|
When `--with-ai` is enabled:
|
|
- **Content Enhancement**: AI improves readability and adds insights
|
|
- **Context Awareness**: Leverages ai.gpt memory system
|
|
- **Smart Categorization**: Automatic organization of content
|
|
- **Technical Writing**: Professional documentation style
|
|
|
|
## 🌍 Translation System
|
|
|
|
### Ollama-Powered Translation
|
|
|
|
ai.log includes a comprehensive translation system powered by Ollama AI models:
|
|
|
|
```bash
|
|
# Basic translation
|
|
ailog doc translate --input README.md --target-lang en
|
|
|
|
# Advanced translation with custom settings
|
|
ailog doc translate \
|
|
--input docs/technical-guide.ja.md \
|
|
--target-lang en \
|
|
--source-lang ja \
|
|
--output docs/technical-guide.en.md \
|
|
--model qwen2.5:latest \
|
|
--ollama-endpoint http://localhost:11434
|
|
```
|
|
|
|
### Translation Features
|
|
|
|
#### 📄 Markdown-Aware Processing
|
|
- **Code Block Preservation**: All code snippets remain untranslated
|
|
- **Link Maintenance**: URLs and link structures preserved
|
|
- **Image Handling**: Alt text can be translated while preserving image paths
|
|
- **Table Translation**: Table content translated while maintaining structure
|
|
- **Header Preservation**: Markdown headers translated with level maintenance
|
|
|
|
#### 🎯 Smart Language Detection
|
|
- **Auto-Detection**: Automatically detects Japanese content using Unicode ranges
|
|
- **Manual Override**: Specify source language for precise control
|
|
- **Mixed Content**: Handles documents with multiple languages
|
|
|
|
#### 🔧 Flexible Configuration
|
|
- **Model Selection**: Choose from available Ollama models
|
|
- **Custom Endpoints**: Use different Ollama instances
|
|
- **Output Control**: Auto-generate or specify output paths
|
|
- **Batch Processing**: Process multiple files efficiently
|
|
|
|
### Supported Languages
|
|
|
|
| Language | Code | Direction | Model Optimized |
|
|
|----------|------|-----------|-----------------|
|
|
| English | `en` | ↔️ | ✅ qwen2.5 |
|
|
| Japanese | `ja` | ↔️ | ✅ qwen2.5 |
|
|
| Chinese | `zh` | ↔️ | ✅ qwen2.5 |
|
|
| Korean | `ko` | ↔️ | ⚠️ Basic |
|
|
| Spanish | `es` | ↔️ | ⚠️ Basic |
|
|
|
|
### Translation Workflow
|
|
|
|
1. **Parse Document**: Analyze markdown structure and identify sections
|
|
2. **Preserve Code**: Isolate code blocks and technical content
|
|
3. **Translate Content**: Process text sections with Ollama AI
|
|
4. **Reconstruct**: Rebuild document maintaining original formatting
|
|
5. **Validate**: Ensure structural integrity and completeness
|
|
|
|
### Integration with ai.gpt
|
|
|
|
```python
|
|
# Via ai.gpt MCP tools
|
|
await log_translate_document(
|
|
input_file="README.ja.md",
|
|
target_lang="en",
|
|
model="qwen2.5:latest"
|
|
)
|
|
```
|
|
|
|
### Requirements
|
|
|
|
- **Ollama**: Install and run Ollama locally
|
|
- **Models**: Download supported models (qwen2.5:latest recommended)
|
|
- **Memory**: Sufficient RAM for model inference
|
|
- **Network**: For initial model download only
|
|
|
|
## Configuration Examples
|
|
|
|
### Basic Blog Config
|
|
```toml
|
|
[blog]
|
|
title = "My AI Blog"
|
|
description = "Personal thoughts and AI insights"
|
|
base_url = "https://myblog.example.com"
|
|
|
|
[ai]
|
|
provider = "openai"
|
|
model = "gpt-4"
|
|
translation = true
|
|
```
|
|
|
|
### Advanced Integration
|
|
```json
|
|
// ../config.json (ai.gpt)
|
|
{
|
|
"mcp": {
|
|
"servers": {
|
|
"ai_gpt": {
|
|
"endpoints": {
|
|
"log_ai_content": "/log_ai_content",
|
|
"log_create_post": "/log_create_post"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### MCP Connection Issues
|
|
- Ensure ai.log server is running: `cargo run -- mcp --port 8002`
|
|
- Check ai.gpt config includes log endpoints
|
|
- Verify `./log/` directory exists relative to ai.gpt
|
|
|
|
### Build Failures
|
|
- Check Rust version: `rustc --version`
|
|
- Update dependencies: `cargo update`
|
|
- Clear cache: `cargo clean`
|
|
|
|
### AI Integration Problems
|
|
- Verify ai.gpt memory system is initialized
|
|
- Check AI provider configuration
|
|
- Ensure sufficient context in memory system
|
|
|
|
## systemd
|
|
|
|
```sh
|
|
$ sudo vim /usr/lib/systemd/system/ollama.service
|
|
[Service]
|
|
Environment="OLLAMA_ORIGINS=https://example.com"
|
|
```
|
|
|
|
```sh
|
|
# ファイルをsystemdディレクトリにコピー
|
|
sudo cp ./systemd/system/ailog-stream.service /etc/systemd/system/
|
|
sudo cp ./systemd/system/cloudflared-log.service /etc/systemd/system/
|
|
|
|
# 権限設定
|
|
sudo chmod 644 /etc/systemd/system/ailog-stream.service
|
|
sudo chmod 644 /etc/systemd/system/cloudflared-log.service
|
|
|
|
# systemd設定reload
|
|
sudo systemctl daemon-reload
|
|
|
|
# サービス有効化・開始
|
|
sudo systemctl enable ailog-stream.service
|
|
sudo systemctl enable cloudflared-log.service
|
|
|
|
sudo systemctl start ailog-stream.service
|
|
sudo systemctl start cloudflared-log.service
|
|
|
|
# 状態確認
|
|
sudo systemctl status ailog-stream.service
|
|
sudo systemctl status cloudflared-log.service
|
|
|
|
# ログ確認
|
|
journalctl -u ailog-stream.service -f
|
|
journalctl -u cloudflared-log.service -f
|
|
|
|
設定のポイント:
|
|
- User=syui でユーザー権限で実行
|
|
- Restart=always で異常終了時自動再起動
|
|
- After=network.target でネットワーク起動後に実行
|
|
- StandardOutput=journal でログをjournalctlで確認可能
|
|
```
|
|
|
|
## License
|
|
|
|
© syui
|
|
|
|
---
|
|
|
|
**Part of the ai ecosystem**: ai.gpt, ai.card, ai.log, ai.bot, ai.verse, ai.shell
|