computer-agents 0.7.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +170 -399
  2. package/dist/ComputerAgentsClient.d.ts +357 -0
  3. package/dist/ComputerAgentsClient.js +359 -0
  4. package/dist/ComputerAgentsClient.js.map +1 -0
  5. package/dist/cloud/ApiClient.d.ts +62 -0
  6. package/dist/cloud/ApiClient.js +150 -0
  7. package/dist/cloud/ApiClient.js.map +1 -0
  8. package/dist/cloud/resources/AgentsResource.d.ts +39 -0
  9. package/dist/cloud/resources/AgentsResource.js +58 -0
  10. package/dist/cloud/resources/AgentsResource.js.map +1 -0
  11. package/dist/cloud/resources/BudgetResource.d.ts +167 -0
  12. package/dist/cloud/resources/BudgetResource.js +179 -0
  13. package/dist/cloud/resources/BudgetResource.js.map +1 -0
  14. package/dist/cloud/resources/EnvironmentsResource.d.ts +78 -0
  15. package/dist/cloud/resources/EnvironmentsResource.js +118 -0
  16. package/dist/cloud/resources/EnvironmentsResource.js.map +1 -0
  17. package/dist/cloud/resources/FilesResource.d.ts +177 -0
  18. package/dist/cloud/resources/FilesResource.js +180 -0
  19. package/dist/cloud/resources/FilesResource.js.map +1 -0
  20. package/dist/cloud/resources/GitResource.d.ts +28 -0
  21. package/dist/cloud/resources/GitResource.js +45 -0
  22. package/dist/cloud/resources/GitResource.js.map +1 -0
  23. package/dist/cloud/resources/ProjectsResource.d.ts +78 -0
  24. package/dist/cloud/resources/ProjectsResource.js +117 -0
  25. package/dist/cloud/resources/ProjectsResource.js.map +1 -0
  26. package/dist/cloud/resources/RunsResource.d.ts +61 -0
  27. package/dist/cloud/resources/RunsResource.js +84 -0
  28. package/dist/cloud/resources/RunsResource.js.map +1 -0
  29. package/dist/cloud/resources/SchedulesResource.d.ts +58 -0
  30. package/dist/cloud/resources/SchedulesResource.js +82 -0
  31. package/dist/cloud/resources/SchedulesResource.js.map +1 -0
  32. package/dist/cloud/resources/ThreadsResource.d.ts +124 -0
  33. package/dist/cloud/resources/ThreadsResource.js +178 -0
  34. package/dist/cloud/resources/ThreadsResource.js.map +1 -0
  35. package/dist/cloud/resources/index.d.ts +16 -0
  36. package/dist/cloud/resources/index.js +28 -0
  37. package/dist/cloud/resources/index.js.map +1 -0
  38. package/dist/cloud/types.d.ts +573 -0
  39. package/dist/cloud/types.js +9 -0
  40. package/dist/cloud/types.js.map +1 -0
  41. package/dist/index.d.ts +28 -5
  42. package/dist/index.js +51 -194
  43. package/dist/index.js.map +1 -1
  44. package/package.json +23 -25
  45. package/dist/metadata.d.ts +0 -8
  46. package/dist/metadata.js +0 -13
  47. package/dist/metadata.js.map +0 -1
package/README.md CHANGED
@@ -1,511 +1,282 @@
1
1
  # Computer Agents SDK
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/computer-agents.svg)](https://www.npmjs.com/package/computer-agents)
4
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
-
6
- Build agents that write code, run tests, and modify files. Orchestrate unlimited agents in parallel with seamless local and cloud execution.
7
-
8
- ## Why Computer Agents?
9
-
10
- Traditional agent frameworks limit you to single-agent workflows or rigid orchestration patterns. Computer Agents is designed for programmatic multi-agent orchestration at scale.
11
-
12
- **Unlimited Parallel Orchestration**
13
- Compose and run unlimited agents concurrently. Build custom multi-agent workflows programmatically—you control execution flow and agent communication. No framework constraints, just code.
14
-
15
- **Seamless Local ↔ Cloud Execution**
16
- Develop locally, scale to cloud by changing workspace configuration. Runtime abstraction handles the complexity while your code remains identical. Switch execution environments without rewriting workflows.
17
-
18
- **Two Powerful Agent Types**
19
- - **LLM agents** (OpenAI API) for planning, reasoning, and code review
20
- - **Computer agents** (Codex SDK) for code generation and file operations
21
-
22
- Mix agent types to build sophisticated workflows. Computer agents bypass LLM for tool selection, providing faster execution and lower costs.
23
-
24
- **Production-Ready Infrastructure**
25
- - Automatic session continuity across runs
26
- - Efficient workspace synchronization
27
- - Built on OpenAI Codex SDK
28
- - Type-safe TypeScript with comprehensive documentation
29
-
30
- **Use cases:** Parallel test generation, distributed code review, large-scale refactoring, automated debugging workflows, multi-repository updates.
3
+ Official TypeScript/JavaScript SDK for the [Computer Agents Cloud API](https://api.computer-agents.com).
31
4
 
32
5
  ## Installation
33
6
 
34
7
  ```bash
35
8
  npm install computer-agents
9
+ # or
10
+ pnpm add computer-agents
11
+ # or
12
+ yarn add computer-agents
36
13
  ```
37
14
 
38
15
  ## Quick Start
39
16
 
40
- ### Local Computer Agent
41
-
42
17
  ```typescript
43
- import { Agent, run } from 'computer-agents';
18
+ import { ComputerAgentsClient } from 'computer-agents';
44
19
 
45
- const agent = new Agent({
46
- agentType: "computer",
47
- workspace: "./my-project",
48
- instructions: "You are an expert developer."
20
+ const client = new ComputerAgentsClient({
21
+ apiKey: process.env.COMPUTER_AGENTS_API_KEY
49
22
  });
50
23
 
51
- const result = await run(agent, "Create a Python script that calculates fibonacci numbers");
52
- console.log(result.finalOutput);
53
- ```
54
-
55
- ### LLM Agent
56
-
57
- ```typescript
58
- import { Agent, run } from 'computer-agents';
59
-
60
- const agent = new Agent({
61
- agentType: "llm",
62
- model: "gpt-4o",
63
- instructions: "You create detailed implementation plans."
24
+ // Execute a task
25
+ const result = await client.run('Create a REST API with Flask', {
26
+ environmentId: 'env_xxx',
27
+ onEvent: (event) => console.log(event.type)
64
28
  });
65
29
 
66
- const result = await run(agent, "Plan how to add user authentication");
67
- console.log(result.finalOutput);
30
+ console.log(result.content);
68
31
  ```
69
32
 
70
- ## Agent Types
71
-
72
- The SDK supports two agent types:
73
-
74
- | Type | Execution | Use Cases |
75
- |------|-----------|-----------|
76
- | `computer` | Codex SDK | Code generation, file operations, terminal commands |
77
- | `llm` | OpenAI API | Planning, reasoning, text generation |
78
-
79
- ### Computer Agents
33
+ ## Features
80
34
 
81
- Computer agents execute code changes using the Codex SDK. They can create files, run commands, and modify codebases.
82
-
83
- ```typescript
84
- const agent = new Agent({
85
- agentType: "computer",
86
- workspace: "./my-project",
87
- instructions: "You are a Python developer."
88
- });
89
-
90
- await run(agent, "Add unit tests for the fibonacci module");
91
- ```
35
+ - Full TypeScript support with complete type definitions
36
+ - SSE streaming for real-time execution progress
37
+ - Simple, intuitive API that mirrors the REST API structure
38
+ - Zero dependencies - uses native `fetch`
92
39
 
93
- ### LLM Agents
40
+ ## API Reference
94
41
 
95
- LLM agents use the OpenAI API for text generation and reasoning tasks.
42
+ ### Creating a Client
96
43
 
97
44
  ```typescript
98
- const agent = new Agent({
99
- agentType: "llm",
100
- model: "gpt-4o",
101
- instructions: "You review code for quality and security."
45
+ const client = new ComputerAgentsClient({
46
+ apiKey: 'tb_xxx', // Required
47
+ baseUrl: 'https://api.computer-agents.com', // Optional
48
+ timeout: 60000, // Optional (default: 60s)
49
+ debug: false // Optional
102
50
  });
103
-
104
- await run(agent, "Review the authentication implementation");
105
51
  ```
106
52
 
107
- ## Multi-Agent Workflows
53
+ ### Running Tasks
108
54
 
109
- Compose multiple agents for complex tasks:
55
+ The simplest way to execute a task:
110
56
 
111
57
  ```typescript
112
- import { Agent, run } from 'computer-agents';
113
-
114
- // LLM creates plan
115
- const planner = new Agent({
116
- agentType: 'llm',
117
- model: 'gpt-4o',
118
- instructions: 'Create implementation plans.'
58
+ // One-shot execution
59
+ const result = await client.run('Fix the TypeScript errors', {
60
+ environmentId: 'env_xxx'
119
61
  });
120
62
 
121
- // Computer agent executes
122
- const executor = new Agent({
123
- agentType: 'computer',
124
- workspace: './my-project',
125
- instructions: 'Execute implementation plans.'
63
+ // With streaming progress
64
+ const result = await client.run('Build a REST API', {
65
+ environmentId: 'env_xxx',
66
+ onEvent: (event) => {
67
+ if (event.type === 'response.item.completed') {
68
+ console.log(event.item);
69
+ }
70
+ }
126
71
  });
127
72
 
128
- // LLM reviews result
129
- const reviewer = new Agent({
130
- agentType: 'llm',
131
- model: 'gpt-4o',
132
- instructions: 'Review code quality.'
73
+ // Continue a conversation
74
+ const followUp = await client.run('Add authentication', {
75
+ environmentId: 'env_xxx',
76
+ threadId: result.threadId
133
77
  });
134
-
135
- const task = "Add user authentication";
136
- const plan = await run(planner, `Plan: ${task}`);
137
- const code = await run(executor, plan.finalOutput);
138
- const review = await run(reviewer, `Review: ${code.finalOutput}`);
139
78
  ```
140
79
 
141
- ## Streaming Events
80
+ ### Threads
142
81
 
143
- Monitor agent execution in real-time:
82
+ For multi-turn conversations:
144
83
 
145
84
  ```typescript
146
- import { Agent, runStreamed } from 'computer-agents';
85
+ // Create a thread
86
+ const thread = await client.threads.create({
87
+ environmentId: 'env_xxx'
88
+ });
147
89
 
148
- const agent = new Agent({
149
- agentType: "computer",
150
- workspace: "./my-project"
90
+ // Send a message
91
+ const result = await client.threads.sendMessage(thread.id, {
92
+ content: 'Create a REST API',
93
+ onEvent: (event) => console.log(event)
151
94
  });
152
95
 
153
- for await (const event of runStreamed(agent, 'Create a web scraper')) {
154
- switch (event.type) {
155
- case 'thread.started':
156
- console.log(`Thread: ${event.thread_id}`);
157
- break;
158
- case 'item.completed':
159
- if (event.item.type === 'file_change') {
160
- const files = event.item.changes.map(c => `${c.kind} ${c.path}`).join(', ');
161
- console.log(`Files: ${files}`);
162
- }
163
- break;
164
- case 'turn.completed':
165
- console.log(`Completed (${event.usage.input_tokens + event.usage.output_tokens} tokens)`);
166
- break;
167
- }
168
- }
169
- ```
96
+ // List threads
97
+ const threads = await client.threads.list();
170
98
 
171
- ## Task Control
99
+ // Get a specific thread
100
+ const thread = await client.threads.get('thread_xxx');
172
101
 
173
- Control running agents with pause, resume, abort, and messaging capabilities:
102
+ // Delete a thread
103
+ await client.threads.delete('thread_xxx');
104
+ ```
174
105
 
175
- ### Local Control
106
+ ### Environments
176
107
 
177
- Control agents running in the same process:
108
+ Manage isolated execution environments:
178
109
 
179
110
  ```typescript
180
- import { Agent, run } from 'computer-agents';
181
-
182
- const agent = new Agent({
183
- agentType: 'computer',
184
- workspace: './my-project'
111
+ // Create an environment
112
+ const env = await client.environments.create({
113
+ name: 'production',
114
+ internetAccess: true
185
115
  });
186
116
 
187
- // Start a long-running task
188
- const taskPromise = run(agent, 'Analyze all TypeScript files');
189
-
190
- // Pause after 5 seconds
191
- setTimeout(async () => {
192
- await agent.pause();
193
- console.log('Agent paused');
194
-
195
- // Resume later
196
- await agent.resume();
197
- await run(agent, 'Continue analysis');
198
- }, 5000);
117
+ // List environments
118
+ const environments = await client.environments.list();
199
119
 
200
- // Check status
201
- const status = agent.getStatus();
202
- console.log(status);
203
- // { status: 'running', threadId: 'thread-123', queuedMessages: 0 }
204
-
205
- // Send messages
206
- await agent.sendMessage('Focus on performance issues');
207
-
208
- // Abort permanently
209
- await agent.abort();
210
- ```
120
+ // Get an environment
121
+ const env = await client.environments.get('env_xxx');
211
122
 
212
- ### Cloud Control API
213
-
214
- Control cloud agents remotely via HTTP endpoints:
123
+ // Update an environment
124
+ await client.environments.update('env_xxx', {
125
+ internetAccess: false
126
+ });
215
127
 
216
- ```bash
217
- # Get execution status
218
- curl -X GET https://api.testbase.ai/control/status/thread-abc-123 \
219
- -H "X-API-Key: your-api-key"
220
-
221
- # Pause execution
222
- curl -X POST https://api.testbase.ai/control/pause/thread-abc-123 \
223
- -H "X-API-Key: your-api-key"
224
-
225
- # Resume execution
226
- curl -X POST https://api.testbase.ai/control/resume/thread-abc-123 \
227
- -H "X-API-Key: your-api-key"
228
-
229
- # Abort execution
230
- curl -X POST https://api.testbase.ai/control/abort/thread-abc-123 \
231
- -H "X-API-Key: your-api-key"
232
-
233
- # Send message
234
- curl -X POST https://api.testbase.ai/control/message/thread-abc-123 \
235
- -H "X-API-Key: your-api-key" \
236
- -H "Content-Type: application/json" \
237
- -d '{"message": "Focus on critical files only"}'
238
-
239
- # List all running executions
240
- curl -X GET https://api.testbase.ai/control/executions \
241
- -H "X-API-Key: your-api-key"
128
+ // Delete an environment
129
+ await client.environments.delete('env_xxx');
242
130
  ```
243
131
 
244
- ### Control Methods
245
-
246
- | Method | Description | Returns |
247
- |--------|-------------|---------|
248
- | `agent.pause()` | Pause execution (can be resumed) | `Promise<void>` |
249
- | `agent.resume()` | Resume paused execution | `Promise<void>` |
250
- | `agent.abort()` | Stop permanently (cannot resume) | `Promise<void>` |
251
- | `agent.sendMessage(msg)` | Queue message for agent | `Promise<void>` |
252
- | `agent.getStatus()` | Get current status | `{ status, threadId, queuedMessages }` |
253
-
254
- ### Use Cases
132
+ ### Agents
255
133
 
256
- - **Long-running tasks**: Pause agents that exceed time limits
257
- - **User intervention**: Send messages to guide agent behavior
258
- - **Error recovery**: Abort stuck or misbehaving agents
259
- - **Resource management**: Control multiple cloud executions
260
- - **Interactive workflows**: Pause for user review, then resume
261
-
262
- ## Session Continuity
263
-
264
- Agents automatically maintain context across multiple runs:
134
+ Configure agent behavior:
265
135
 
266
136
  ```typescript
267
- const agent = new Agent({
268
- agentType: 'computer',
269
- workspace: './my-project'
137
+ // Create an agent
138
+ const agent = await client.agents.create({
139
+ name: 'Code Assistant',
140
+ model: 'gpt-4o',
141
+ instructions: 'You are a helpful coding assistant.'
270
142
  });
271
143
 
272
- await run(agent, 'Create app.py');
273
- await run(agent, 'Add error handling'); // Continues same session
274
- await run(agent, 'Add tests'); // Still same session
144
+ // List agents
145
+ const agents = await client.agents.list();
275
146
 
276
- console.log(agent.currentThreadId); // Thread ID maintained
277
-
278
- agent.resetSession(); // Start fresh
279
- await run(agent, 'New project'); // New session
147
+ // Update an agent
148
+ await client.agents.update('agent_xxx', {
149
+ instructions: 'Updated instructions'
150
+ });
280
151
  ```
281
152
 
282
- ## Cloud Execution (Coming Soon)
283
-
284
- > **Note**: Cloud execution with `CloudClient` and `Project` management is currently in private beta. Public access coming soon.
285
- >
286
- > Interested in early access? [Join the waitlist →](https://testbase.ai)
153
+ ### Files
287
154
 
288
- Cloud execution will enable:
289
- - Run agents in isolated cloud environments
290
- - Project-based workspace management with bidirectional sync
291
- - Seamless transition from local to cloud with workspace configuration
292
- - Parallel execution at scale without local resource constraints
293
-
294
- Example (available in private beta):
155
+ Manage files in environment workspaces:
295
156
 
296
157
  ```typescript
297
- import { Agent, run, CloudClient } from 'computer-agents';
298
-
299
- const client = new CloudClient({
300
- apiKey: process.env.TESTBASE_API_KEY
158
+ // List files in an environment
159
+ const files = await client.files.listFiles('env_xxx');
160
+
161
+ // Upload a file
162
+ await client.files.uploadFile({
163
+ environmentId: 'env_xxx',
164
+ filename: 'app.py',
165
+ path: 'src', // optional subdirectory
166
+ content: 'print("hello")'
301
167
  });
302
168
 
303
- // Create a cloud project
304
- const project = await client.createProject({ name: 'my-app' });
169
+ // Download file content
170
+ const content = await client.files.getFile('env_xxx', 'src/app.py');
171
+
172
+ // Download as Buffer
173
+ const buffer = await client.files.downloadFile('env_xxx', 'src/app.py');
305
174
 
306
- // Cloud agent
307
- const agent = new Agent({
308
- agentType: "computer",
309
- workspace: project, // Use cloud project as workspace
310
- instructions: "You are an expert developer."
175
+ // Move/rename a file
176
+ await client.files.moveFile({
177
+ environmentId: 'env_xxx',
178
+ sourcePath: 'old-name.py',
179
+ destPath: 'new-name.py'
311
180
  });
312
181
 
313
- const result = await run(agent, "Add error handling to the API");
314
- console.log(result.finalOutput);
182
+ // Delete a file
183
+ await client.files.deleteFile('env_xxx', 'src/app.py');
315
184
  ```
316
185
 
317
- ## Configuration
186
+ ### Schedules
318
187
 
319
- ### Agent Configuration
188
+ Automate task execution:
320
189
 
321
190
  ```typescript
322
- const agent = new Agent({
323
- name: "My Agent", // Optional, auto-generated if omitted
324
- agentType: 'computer', // 'llm' | 'computer'
325
- workspace: './my-project', // Required for computer agents
326
- model: 'gpt-4o', // Required for LLM agents
327
- instructions: "You are helpful.", // System prompt
328
- debug: false, // Show detailed logs
329
- timeout: 600000, // 10 minutes (default)
330
- mcpServers: [], // MCP server configurations
191
+ // Create a schedule
192
+ const schedule = await client.schedules.create({
193
+ name: 'Daily Report',
194
+ agentId: 'agent_xxx',
195
+ agentName: 'Reporter',
196
+ task: 'Generate daily report',
197
+ scheduleType: 'recurring',
198
+ cronExpression: '0 9 * * *'
331
199
  });
332
- ```
333
-
334
- ### Environment Variables
335
200
 
336
- ```bash
337
- # Required for all agents
338
- OPENAI_API_KEY=your-openai-key
201
+ // List schedules
202
+ const schedules = await client.schedules.list();
339
203
 
340
- # Required for CloudClient (private beta)
341
- TESTBASE_API_KEY=your-testbase-key
204
+ // Trigger a schedule manually
205
+ await client.schedules.trigger('schedule_xxx');
342
206
  ```
343
207
 
344
- ## MCP Server Integration
208
+ ### Billing
345
209
 
346
- Use Model Context Protocol servers with your agents:
210
+ Track usage and manage budgets:
347
211
 
348
212
  ```typescript
349
- import type { McpServerConfig } from 'computer-agents';
350
-
351
- const mcpServers: McpServerConfig[] = [
352
- {
353
- type: 'stdio',
354
- name: 'filesystem',
355
- command: 'npx',
356
- args: ['@modelcontextprotocol/server-filesystem', '/workspace']
357
- },
358
- {
359
- type: 'http',
360
- name: 'notion',
361
- url: 'https://notion-mcp.example.com/mcp',
362
- bearerToken: process.env.NOTION_TOKEN
363
- }
364
- ];
365
-
366
- const agent = new Agent({
367
- agentType: 'computer',
368
- workspace: './my-project',
369
- mcpServers
370
- });
371
- ```
213
+ // Get budget status
214
+ const status = await client.budget.getStatus();
372
215
 
373
- ## API Reference
216
+ // Check if can execute
217
+ const canRun = await client.budget.canExecute();
374
218
 
375
- ### Agent
219
+ // Get billing records
220
+ const records = await client.billing.listRecords({ limit: 10 });
376
221
 
377
- ```typescript
378
- class Agent {
379
- constructor(config: AgentConfiguration);
380
-
381
- currentThreadId: string | undefined;
382
- resetSession(): void;
383
- workspace: string;
384
- agentType: 'llm' | 'computer';
385
-
386
- // Task control
387
- async pause(): Promise<void>;
388
- async resume(): Promise<void>;
389
- async abort(): Promise<void>;
390
- async sendMessage(message: string): Promise<void>;
391
- getStatus(): { status: 'idle' | 'running' | 'paused' | 'aborted', threadId?: string, queuedMessages: number };
392
- }
222
+ // Get usage stats
223
+ const stats = await client.billing.getStats({ period: 'month' });
393
224
  ```
394
225
 
395
- ### run()
226
+ ### Git Operations
396
227
 
397
- ```typescript
398
- function run(
399
- agent: Agent,
400
- task: string,
401
- options?: RunOptions
402
- ): Promise<RunResult>;
403
- ```
404
-
405
- ### runStreamed()
228
+ Manage version control:
406
229
 
407
230
  ```typescript
408
- function runStreamed(
409
- agent: Agent,
410
- task: string,
411
- options?: RunOptions
412
- ): AsyncGenerator<Event>;
413
- ```
231
+ // Get diff
232
+ const diff = await client.git.diff('env_xxx');
414
233
 
415
- ### CloudClient (Coming Soon)
416
-
417
- ```typescript
418
- class CloudClient {
419
- constructor(config?: CloudClientConfig);
234
+ // Commit changes
235
+ await client.git.commit('env_xxx', {
236
+ message: 'Add new feature'
237
+ });
420
238
 
421
- async createProject(config: CreateProjectConfig): Promise<Project>;
422
- async listProjects(): Promise<Project[]>;
423
- async getProject(id: string): Promise<Project>;
424
- async deleteProject(id: string, hard?: boolean): Promise<void>;
425
- }
239
+ // Push to remote
240
+ await client.git.push('env_xxx');
426
241
  ```
427
242
 
428
- ### Project (Coming Soon)
243
+ ## Error Handling
429
244
 
430
245
  ```typescript
431
- class Project {
432
- readonly id: string;
433
- readonly name: string;
434
- readonly localPath: string | undefined;
435
- readonly cloudPath: string;
436
-
437
- async sync(options?: SyncOptions): Promise<SyncResult>;
438
- async listFiles(pattern?: string): Promise<ProjectFile[]>;
439
- async readFile(path: string): Promise<string>;
440
- async writeFile(path: string, content: string): Promise<void>;
441
- async upload(files: string[]): Promise<void>;
442
- async download(files: string[]): Promise<void>;
443
- async delete(hard?: boolean): Promise<void>;
444
- async getStats(): Promise<ProjectStats>;
445
- async getSyncStats(): Promise<SyncStats>;
446
-
447
- getWorkspacePath(): string;
246
+ import { ComputerAgentsClient, ApiClientError } from 'computer-agents';
247
+
248
+ try {
249
+ await client.run('Task', { environmentId: 'env_xxx' });
250
+ } catch (error) {
251
+ if (error instanceof ApiClientError) {
252
+ console.error(`API Error: ${error.message}`);
253
+ console.error(`Status: ${error.status}`);
254
+ console.error(`Code: ${error.code}`);
255
+ }
448
256
  }
449
257
  ```
450
258
 
451
- ## Examples
452
-
453
- ```bash
454
- # Clone the repository
455
- git clone https://github.com/TestBase-ai/computer-agents.git
456
- cd computer-agents
457
- npm install
458
- npm run build
459
-
460
- # Run examples
461
- node examples/testbase/hello-world.mjs
462
- node examples/testbase/multi-agent-workflow.mjs
463
- node examples/testbase/streaming-progress.cjs
464
- ```
465
-
466
- [View all examples →](https://github.com/TestBase-ai/computer-agents/tree/main/examples/testbase)
259
+ ## Environment Variables
467
260
 
468
- ## Troubleshooting
261
+ | Variable | Description |
262
+ |----------|-------------|
263
+ | `COMPUTER_AGENTS_API_KEY` | API key for authentication |
469
264
 
470
- ### "OPENAI_API_KEY not set"
471
-
472
- ```bash
473
- export OPENAI_API_KEY=sk-...
474
- ```
265
+ ## TypeScript
475
266
 
476
- ### "Computer agents require a workspace"
477
-
478
- Computer agents need a workspace parameter:
267
+ Full type definitions are included:
479
268
 
480
269
  ```typescript
481
- // Correct
482
- new Agent({ agentType: 'computer', workspace: './my-project' })
483
-
484
- // Missing workspace - Error
485
- new Agent({ agentType: 'computer' })
486
- ```
487
-
488
- ### Session continuity not working
489
-
490
- Use the same agent instance across runs:
491
-
492
- ```typescript
493
- const agent = new Agent({ agentType: 'computer', workspace: './project' });
494
- await run(agent, 'Task 1');
495
- await run(agent, 'Task 2'); // Same instance = session continues
270
+ import type {
271
+ Thread,
272
+ Environment,
273
+ CloudAgent,
274
+ Schedule,
275
+ BudgetStatus,
276
+ MessageStreamEvent,
277
+ } from 'computer-agents';
496
278
  ```
497
279
 
498
280
  ## License
499
281
 
500
282
  MIT
501
-
502
- ## Links
503
-
504
- - **GitHub**: [https://github.com/TestBase-ai/computer-agents](https://github.com/TestBase-ai/computer-agents)
505
- - **npm**: [https://www.npmjs.com/package/computer-agents](https://www.npmjs.com/package/computer-agents)
506
- - **Documentation**: [https://github.com/TestBase-ai/computer-agents/tree/main/examples/testbase](https://github.com/TestBase-ai/computer-agents/tree/main/examples/testbase)
507
-
508
- ## Support
509
-
510
- - **Issues**: [GitHub Issues](https://github.com/TestBase-ai/computer-agents/issues)
511
- - **Website**: [testbase.ai](https://testbase.ai)