scorpio d6df056687 feat: Part 模型 + 文件版本追踪 + 写手团队工作流 v2
- 数据层:messages 表增加 part_type 字段,新建 file_versions 表支持版本追踪
- 后端:saveWorkspace 版本追踪、saveAgentOutput 源头分离、generateBriefMessage 成员简报
- 后端:applyDocumentEdit 增量编辑、buildWorkflowStep phase-aware 工作流引擎
- API:文件版本查询/回退接口
- 前端:part_type 驱动渲染,产物面板版本历史
- 新增写手团队(主编/搜索员/策划编辑/合规审查员)配置
- store 模块、scheduler 模块、web-search skill

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 18:44:34 +08:00

340 lines
8.5 KiB
Markdown

# Web Search Skill
Real-time web search capability for LobsterAI using Playwright-controlled browser automation.
## Overview
The Web Search Skill enables LobsterAI to perform live web searches using Google and Bing, with automatic fallback when one provider is unavailable. The skill uses Playwright to control a local Chrome browser instance, making all operations transparent and observable.
## Features
-**Real-time Search** - Access current web information via Google with Bing fallback
-**Transparent Operations** - Visible browser window shows all actions
-**Playwright-Powered** - Robust browser automation using playwright-core
-**Simple CLI** - Easy-to-use command-line interface for Claude
-**HTTP API** - RESTful Bridge Server for advanced integrations
-**Auto-Managed** - Electron automatically starts/stops the service
-**Connection Caching** - Reuses browser connections for performance
-**Localhost Only** - Secure by design, no external exposure
## Architecture
```
Claude → Bash Tool → CLI Scripts → Bridge Server (localhost:8923) → Playwright → CDP → Chrome
```
**Components:**
1. **Bridge Server** - Express HTTP API for browser control
2. **Playwright Manager** - Connection and session management
3. **Browser Launcher** - Chrome lifecycle management
4. **Search Engines** - Google primary and Bing fallback
5. **CLI Scripts** - Simplified command-line interface
6. **Electron Integration** - Automatic service management
## Quick Start
### 1. Install Dependencies
```bash
cd SKILLs/web-search
npm install
```
### 2. Build
```bash
npm run build
```
### 3. Start Server
```bash
bash scripts/start-server.sh
```
### 4. Perform Search
```bash
bash scripts/search.sh "TypeScript tutorial" 5
```
### 5. Stop Server
```bash
bash scripts/stop-server.sh
```
## Usage
### Simple Search
```bash
bash SKILLs/web-search/scripts/search.sh "search query" [max_results]
```
**Examples:**
```bash
# Search for React 19 features (default 10 results)
bash scripts/search.sh "React 19 new features"
# Search for TypeScript tutorials (limit to 5 results)
bash scripts/search.sh "TypeScript tutorial" 5
# Search for current news
bash scripts/search.sh "AI news 2026" 10
```
### API Usage
See [examples/basic-search.md](examples/basic-search.md) for complete API documentation.
**Health Check:**
```bash
curl http://127.0.0.1:8923/api/health
```
**Search:**
```bash
curl -X POST http://127.0.0.1:8923/api/search \
-H "Content-Type: application/json" \
-d '{"connectionId": "...", "query": "...", "maxResults": 5}'
```
## Configuration
Default configuration in `server/config.ts`:
```typescript
{
browser: {
cdpPort: 9222,
headless: false, // Always visible
chromeFlags: [/* ... */]
},
server: {
port: 8923,
host: '127.0.0.1' // Localhost only
},
search: {
defaultEngine: 'auto',
fallbackOrder: ['google', 'bing'],
defaultMaxResults: 10,
searchTimeout: 30000,
navigationTimeout: 15000
}
}
```
## How Claude Uses This Skill
When Claude needs real-time information, it will:
1. **Recognize the need** - Questions about current events, latest docs, etc.
2. **Check server** - Verify Bridge Server is running
3. **Execute search** - Run `bash scripts/search.sh "query" N`
4. **Parse results** - Extract relevant information from Markdown output
5. **Answer user** - Provide response based on search results
**Example Interaction:**
```
User: What are the new features in Next.js 14?
Claude: [Calls: bash SKILLs/web-search/scripts/search.sh "Next.js 14 features" 5]
Based on the latest search results, Next.js 14 introduces:
1. Turbopack - 5000x faster than Webpack
2. Server Actions (stable) - Simplified data mutations
3. Partial Prerendering - Faster page loads
...
```
## API Endpoints
### Browser Management
- `POST /api/browser/launch` - Launch Chrome
- `POST /api/browser/connect` - Connect to browser
- `POST /api/browser/disconnect` - Disconnect
- `GET /api/browser/status` - Get status
### Search Operations
- `POST /api/search` - Execute search
- `POST /api/search/content` - Get URL content
### Page Operations
- `POST /api/page/navigate` - Navigate to URL
- `POST /api/page/screenshot` - Take screenshot
- `POST /api/page/content` - Get HTML content
- `POST /api/page/text` - Get text content
### Utility
- `GET /api/health` - Health check
- `GET /api/connections` - List connections
## Project Structure
```
SKILLs/web-search/
├── README.md # This file
├── SKILL.md # Skill documentation (for Claude)
├── LICENSE.txt # MIT License
├── package.json # Dependencies
├── tsconfig.json # TypeScript config
├── server/ # Bridge Server source
│ ├── index.ts # Express server
│ ├── config.ts # Configuration
│ ├── playwright/
│ │ ├── manager.ts # Playwright connection manager
│ │ ├── browser.ts # Browser lifecycle
│ │ └── operations.ts # Page operations
│ └── search/
│ ├── types.ts # Type definitions
│ ├── google.ts # Google search engine
│ └── bing.ts # Bing fallback engine
├── scripts/ # CLI tools
│ ├── start-server.sh # Start Bridge Server
│ ├── stop-server.sh # Stop Bridge Server
│ ├── search.sh # Search CLI
│ ├── test-basic.js # Basic functionality test
│ └── test-search.js # Integration test
├── examples/ # Usage examples
│ └── basic-search.md # Complete usage guide
└── dist/ # Compiled output (auto-generated)
```
## Testing
### Basic Functionality Test
```bash
node scripts/test-basic.js
```
Tests:
- Browser launch and connection
- Playwright connection management
- Page navigation
- Title and content extraction
- Screenshot capture
- Resource cleanup
### Search Integration Test
```bash
node scripts/test-search.js
```
Tests:
- Bridge Server startup
- Browser launch via API
- Playwright connection
- Bing search execution
- Result parsing
- Screenshot and text extraction
- Full cleanup
## Troubleshooting
### Server Won't Start
```bash
# Check logs
cat .server.log
# Check if port is in use
lsof -i :8923
# Rebuild
npm run build
```
### Chrome Not Found
Install Chrome:
- macOS: https://www.google.com/chrome/
- Linux: `sudo apt install chromium-browser`
- Windows: https://www.google.com/chrome/
### Connection Issues
```bash
# Clean up
bash scripts/stop-server.sh
rm .connection .server.pid
# Restart
bash scripts/start-server.sh
```
## Security
- **Localhost only** - Server binds to 127.0.0.1
- **No external access** - Not exposed to network
- **Isolated profile** - Separate Chrome user-data-dir
- **Visible operations** - All actions shown in browser window
- **No credentials** - No sensitive operations performed
## Performance
- **Server startup**: < 2 seconds
- **Browser launch**: < 3 seconds
- **Search latency**: < 1 second (network dependent)
- **Connection reuse**: Cached for multiple searches
- **Memory usage**: ~80MB (Bridge Server) + Chrome
## Requirements
- Node.js 18+
- Google Chrome or Chromium
- macOS, Windows, or Linux
- Internet connection for searches
## Dependencies
- `express` - HTTP server
- `playwright-core` - Browser automation
- `uuid` - Connection ID generation
## License
MIT License - See LICENSE.txt
## Future Enhancements
### Phase 2 (Optional)
- Advanced search options (date range, language, region)
- Result caching
- Deep content extraction
### Phase 3 (Optional)
- Native Cowork tool integration
- Form filling and multi-step automation
- CAPTCHA handling
- Network interception with Playwright
## Contributing
This skill is part of the LobsterAI project. For issues or suggestions:
1. Check existing issues
2. Create detailed bug reports
3. Include logs from `.server.log`
4. Test with latest version
## Credits
Built with:
- [Playwright](https://playwright.dev/) - Browser automation
- [Express](https://expressjs.com/) - HTTP server
- [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) - Browser control
## Support
For help:
1. Read [examples/basic-search.md](examples/basic-search.md)
2. Check troubleshooting section
3. Review `.server.log` for errors
4. Test with `node scripts/test-basic.js`