Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:43:37 +08:00
commit 22c15fd73f
12 changed files with 1478 additions and 0 deletions

191
commands/steel-debug.md Normal file
View File

@@ -0,0 +1,191 @@
---
description: Debug Steel automation issues and provide solutions
---
# Steel Debugging Assistant
Help the user debug Steel automation issues using live sessions and error analysis.
## Debugging Approach
1. **Ask to see the error** - Get the full error message and stack trace
2. **Check the live session** - Ask if they're using `sessionViewerUrl` to see what's happening
3. **Identify the issue** - Match error patterns to common Steel issues
4. **Provide specific fix** - Give working code that solves the problem
## Steel CLI for Debugging
If user has Steel CLI (`@steel-dev/cli`), suggest:
- `steel config` - Verify API key and configuration
- `steel run <template> --view` - Run working example to compare
- `steel browser start --verbose` - Start local browser with detailed logs
Install if needed: `npm install -g @steel-dev/cli`
## Common Steel Issues & Fixes
### Issue: Session Creation Timeout
**Symptoms**: `Session creation timed out` or similar errors
**Solution**:
```typescript
const session = await client.sessions.create({
sessionTimeout: 60000, // Increase timeout to 60s
});
```
### Issue: Selector Not Found
**Symptoms**: `TimeoutError: waiting for selector failed`
**Solution**:
```typescript
// Wait for page to fully load
await page.waitForLoadState('networkidle');
// Try multiple selectors
const selectors = [
'[data-testid="submit"]',
'#submit-button',
'button:has-text("Submit")'
];
for (const selector of selectors) {
try {
await page.waitForSelector(selector, { timeout: 5000 });
break;
} catch (e) {
continue;
}
}
```
### Issue: WebSocket Connection Failed
**Symptoms**: `WebSocket connection failed` or `CDP connection error`
**Check**:
```typescript
// Ensure API key is passed correctly
const wsUrl = `${session.websocketUrl}?apiKey=${process.env.STEEL_API_KEY}`;
const browser = await chromium.connectOverCDP(wsUrl);
```
### Issue: Session Not Releasing
**Symptoms**: Running out of concurrent sessions
**Solution**:
```typescript
// Always use try-finally
const session = await client.sessions.create();
try {
// Your automation code
} finally {
await client.sessions.release(session.id);
}
```
### Issue: Page Loading Too Slowly
**Symptoms**: Timeouts during page navigation
**Solution**:
```typescript
const session = await client.sessions.create({
blockAds: true, // Block ads for faster loading
dimensions: { width: 1280, height: 800 }
});
await page.goto(url, {
waitUntil: 'domcontentloaded' // Don't wait for everything
});
```
### Issue: CAPTCHA Blocking Automation
**Symptoms**: Automation stops at CAPTCHA pages
**Solution**:
```typescript
const session = await client.sessions.create({
solveCaptcha: true, // Enable CAPTCHA solving
useProxy: true // Use residential proxies
});
```
### Issue: Cannot Find Elements in Iframe
**Symptoms**: Elements exist but selector fails
**Solution**:
```typescript
// Wait for iframe
const frameElement = await page.waitForSelector('iframe');
const frame = await frameElement.contentFrame();
// Search inside iframe
await frame.waitForSelector('[data-testid="target"]');
```
### Issue: Dynamic Content Not Loading
**Symptoms**: Elements appear later but selector times out
**Solution**:
```typescript
// Wait for network to be idle
await page.waitForLoadState('networkidle');
// Or wait for specific element
await page.waitForSelector('[data-testid="loaded-content"]', {
state: 'visible',
timeout: 15000
});
```
## Debugging Workflow
When user reports an issue:
1. **Get context**:
- What are they trying to do?
- What error message do they see?
- Can they share the code?
2. **Use live session**:
```typescript
const session = await client.sessions.create();
console.log('Debug at:', session.sessionViewerUrl);
// User can watch what's happening in real-time
```
3. **Add debugging output**:
```typescript
console.log('Step 1: Creating session');
const session = await client.sessions.create();
console.log('Session ID:', session.id);
console.log('Step 2: Connecting browser');
const browser = await chromium.connectOverCDP(/*...*/);
console.log('Step 3: Navigating to page');
await page.goto(url);
console.log('Current URL:', page.url());
```
4. **Test selectors**:
```typescript
// Check if element exists
const element = await page.$('[data-testid="target"]');
if (element) {
console.log('Element found!');
} else {
console.log('Element not found, trying alternatives...');
}
```
5. **Provide working solution** with explanation
## When to Check Steel Status
If issues persist, suggest checking:
- Steel Cloud status: https://status.steel.dev
- API key validity: Check in Steel dashboard
- Session limits: Check concurrent session limits
- Network issues: Test from different network
Always focus on practical, immediate solutions over theoretical debugging approaches.