Skip to content

Commit 035c108

Browse files
authored
Merge pull request #16 from agi-inc/jacob/demo-readme
docs: add demo app link to README
2 parents b5a290f + 710a764 commit 035c108

2 files changed

Lines changed: 110 additions & 0 deletions

File tree

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,20 @@ npx tsx examples/research/competitor-analysis.ts \
514514

515515
---
516516

517+
## Demo App
518+
519+
An interactive Electron desktop GUI that showcases all SDK capabilities — sessions, SSE streaming, screenshots, pause/resume/cancel, and quick action cards.
520+
521+
**[agi-inc/demo-node-electron](https://github.com/agi-inc/demo-node-electron)**
522+
523+
```bash
524+
git clone https://github.com/agi-inc/demo-node-electron.git && cd demo-node-electron
525+
npm install
526+
AGI_API_KEY=your-key npx electron --require ts-node/register main.ts
527+
```
528+
529+
---
530+
517531
## Documentation & Resources
518532

519533
**Learn More**
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/**
2+
* Remote browser agent quickstart
3+
*
4+
* Demonstrates the full SDK workflow: create a session, send a task
5+
* with real-time event streaming, take a screenshot, pause/resume,
6+
* and clean up.
7+
*
8+
* Usage:
9+
* AGI_API_KEY=sk-... npx ts-node examples/basic/quickstart-remote.ts
10+
*/
11+
12+
import { AGIClient } from '../../src';
13+
14+
const client = new AGIClient({ apiKey: process.env.AGI_API_KEY || 'your-api-key' });
15+
16+
async function main() {
17+
// --- Low-level API (explicit lifecycle) ---
18+
19+
// 1. Create a remote browser session
20+
const session = await client.sessions.create('agi-0');
21+
console.log(`Session ID: ${session.sessionId}`);
22+
console.log(`Status: ${session.status}\n`);
23+
24+
// 2. Send a task and stream events
25+
await client.sessions.sendMessage(
26+
session.sessionId,
27+
'What is the current time? Search Google to find out.'
28+
);
29+
30+
for await (const event of client.sessions.streamEvents(session.sessionId)) {
31+
const eventType = event.event;
32+
let content = '';
33+
34+
if (event.data) {
35+
const data = event.data as Record<string, unknown>;
36+
if (typeof data === 'object') {
37+
content = String(data.content || data.message || data.text || JSON.stringify(data));
38+
} else {
39+
content = String(data);
40+
}
41+
}
42+
43+
switch (eventType) {
44+
case 'thought':
45+
console.log(` Thought: ${content.slice(0, 100)}`);
46+
break;
47+
case 'step':
48+
console.log(` Step: ${content.slice(0, 100)}`);
49+
break;
50+
case 'done':
51+
console.log(`\n Done: ${content.slice(0, 200)}`);
52+
break;
53+
case 'error':
54+
console.log(`\n Error: ${content}`);
55+
break;
56+
case 'question':
57+
console.log(` Agent asks: ${content}`);
58+
break;
59+
}
60+
61+
if (eventType === 'done' || eventType === 'error') break;
62+
}
63+
64+
// 3. Take a screenshot
65+
const screenshot = await client.sessions.screenshot(session.sessionId);
66+
const imgData = screenshot.screenshot.includes(',')
67+
? screenshot.screenshot.split(',')[1]
68+
: screenshot.screenshot;
69+
const buffer = Buffer.from(imgData, 'base64');
70+
console.log(`\nScreenshot captured (${buffer.length} bytes)`);
71+
72+
// 4. Session control
73+
await client.sessions.pause(session.sessionId);
74+
console.log('Session paused');
75+
76+
await client.sessions.resume(session.sessionId);
77+
console.log('Session resumed');
78+
79+
// 5. Cleanup
80+
await client.sessions.delete(session.sessionId);
81+
console.log('Session deleted\n');
82+
83+
// --- High-level API (recommended) ---
84+
85+
console.log('--- High-level API ---');
86+
{
87+
await using session = client.session('agi-0');
88+
const result = await session.runTask('Search for the latest Node.js LTS version');
89+
console.log(`Result: ${result.data}`);
90+
console.log(`Duration: ${result.metadata.duration}s`);
91+
console.log(`Steps: ${result.metadata.steps}`);
92+
}
93+
// Session automatically deleted when scope exits
94+
}
95+
96+
main().catch(console.error);

0 commit comments

Comments
 (0)