computer-agents 0.7.1 → 1.0.0

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 +159 -401
  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,269 @@
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
33
+ ## Features
71
34
 
72
- The SDK supports two agent types:
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`
73
39
 
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
40
+ ## API Reference
80
41
 
81
- Computer agents execute code changes using the Codex SDK. They can create files, run commands, and modify codebases.
42
+ ### Creating a Client
82
43
 
83
44
  ```typescript
84
- const agent = new Agent({
85
- agentType: "computer",
86
- workspace: "./my-project",
87
- instructions: "You are a Python developer."
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
88
50
  });
89
-
90
- await run(agent, "Add unit tests for the fibonacci module");
91
51
  ```
92
52
 
93
- ### LLM Agents
53
+ ### Running Tasks
94
54
 
95
- LLM agents use the OpenAI API for text generation and reasoning tasks.
55
+ The simplest way to execute a task:
96
56
 
97
57
  ```typescript
98
- const agent = new Agent({
99
- agentType: "llm",
100
- model: "gpt-4o",
101
- instructions: "You review code for quality and security."
58
+ // One-shot execution
59
+ const result = await client.run('Fix the TypeScript errors', {
60
+ environmentId: 'env_xxx'
102
61
  });
103
62
 
104
- await run(agent, "Review the authentication implementation");
105
- ```
106
-
107
- ## Multi-Agent Workflows
108
-
109
- Compose multiple agents for complex tasks:
110
-
111
- ```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.'
119
- });
120
-
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';
147
-
148
- const agent = new Agent({
149
- agentType: "computer",
150
- workspace: "./my-project"
85
+ // Create a thread
86
+ const thread = await client.threads.create({
87
+ environmentId: 'env_xxx'
151
88
  });
152
89
 
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
- ```
170
-
171
- ## Task Control
172
-
173
- Control running agents with pause, resume, abort, and messaging capabilities:
174
-
175
- ### Local Control
176
-
177
- Control agents running in the same process:
178
-
179
- ```typescript
180
- import { Agent, run } from 'computer-agents';
181
-
182
- const agent = new Agent({
183
- agentType: 'computer',
184
- 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)
185
94
  });
186
95
 
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');
96
+ // List threads
97
+ const threads = await client.threads.list();
194
98
 
195
- // Resume later
196
- await agent.resume();
197
- await run(agent, 'Continue analysis');
198
- }, 5000);
99
+ // Get a specific thread
100
+ const thread = await client.threads.get('thread_xxx');
199
101
 
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();
102
+ // Delete a thread
103
+ await client.threads.delete('thread_xxx');
210
104
  ```
211
105
 
212
- ### Cloud Control API
213
-
214
- Control cloud agents remotely via HTTP endpoints:
106
+ ### Environments
215
107
 
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"
242
- ```
243
-
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
255
-
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:
108
+ Manage isolated execution environments:
265
109
 
266
110
  ```typescript
267
- const agent = new Agent({
268
- agentType: 'computer',
269
- workspace: './my-project'
111
+ // Create an environment
112
+ const env = await client.environments.create({
113
+ name: 'production',
114
+ internetAccess: true
270
115
  });
271
116
 
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
117
+ // List environments
118
+ const environments = await client.environments.list();
275
119
 
276
- console.log(agent.currentThreadId); // Thread ID maintained
120
+ // Get environment status
121
+ const status = await client.environments.getStatus('env_xxx');
277
122
 
278
- agent.resetSession(); // Start fresh
279
- await run(agent, 'New project'); // New session
123
+ // Start/stop environment
124
+ await client.environments.start('env_xxx');
125
+ await client.environments.stop('env_xxx');
280
126
  ```
281
127
 
282
- ## Cloud Execution (Coming Soon)
128
+ ### Agents
283
129
 
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)
287
-
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):
130
+ Configure agent behavior:
295
131
 
296
132
  ```typescript
297
- import { Agent, run, CloudClient } from 'computer-agents';
298
-
299
- const client = new CloudClient({
300
- apiKey: process.env.TESTBASE_API_KEY
133
+ // Create an agent
134
+ const agent = await client.agents.create({
135
+ name: 'Code Assistant',
136
+ model: 'gpt-4o',
137
+ instructions: 'You are a helpful coding assistant.'
301
138
  });
302
139
 
303
- // Create a cloud project
304
- const project = await client.createProject({ name: 'my-app' });
140
+ // List agents
141
+ const agents = await client.agents.list();
305
142
 
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."
143
+ // Update an agent
144
+ await client.agents.update('agent_xxx', {
145
+ instructions: 'Updated instructions'
311
146
  });
312
-
313
- const result = await run(agent, "Add error handling to the API");
314
- console.log(result.finalOutput);
315
147
  ```
316
148
 
317
- ## Configuration
149
+ ### Files
318
150
 
319
- ### Agent Configuration
151
+ Manage files in environments:
320
152
 
321
153
  ```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
154
+ // List files
155
+ const files = await client.files.listFiles({
156
+ environmentId: 'env_xxx'
331
157
  });
332
- ```
333
158
 
334
- ### Environment Variables
159
+ // Upload a file
160
+ await client.files.uploadFile({
161
+ path: '/src/app.py',
162
+ content: 'print("hello")',
163
+ environmentId: 'env_xxx'
164
+ });
335
165
 
336
- ```bash
337
- # Required for all agents
338
- OPENAI_API_KEY=your-openai-key
166
+ // Get file content
167
+ const content = await client.files.getFile('/src/app.py', 'env_xxx');
339
168
 
340
- # Required for CloudClient (private beta)
341
- TESTBASE_API_KEY=your-testbase-key
169
+ // Delete a file
170
+ await client.files.deleteFile('/src/app.py');
342
171
  ```
343
172
 
344
- ## MCP Server Integration
173
+ ### Schedules
345
174
 
346
- Use Model Context Protocol servers with your agents:
175
+ Automate task execution:
347
176
 
348
177
  ```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
178
+ // Create a schedule
179
+ const schedule = await client.schedules.create({
180
+ name: 'Daily Report',
181
+ agentId: 'agent_xxx',
182
+ agentName: 'Reporter',
183
+ task: 'Generate daily report',
184
+ scheduleType: 'recurring',
185
+ cronExpression: '0 9 * * *'
370
186
  });
371
- ```
372
187
 
373
- ## API Reference
188
+ // List schedules
189
+ const schedules = await client.schedules.list();
374
190
 
375
- ### Agent
376
-
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
- }
191
+ // Trigger a schedule manually
192
+ await client.schedules.trigger('schedule_xxx');
393
193
  ```
394
194
 
395
- ### run()
396
-
397
- ```typescript
398
- function run(
399
- agent: Agent,
400
- task: string,
401
- options?: RunOptions
402
- ): Promise<RunResult>;
403
- ```
195
+ ### Billing
404
196
 
405
- ### runStreamed()
197
+ Track usage and manage budgets:
406
198
 
407
199
  ```typescript
408
- function runStreamed(
409
- agent: Agent,
410
- task: string,
411
- options?: RunOptions
412
- ): AsyncGenerator<Event>;
413
- ```
200
+ // Get budget status
201
+ const status = await client.budget.getStatus();
414
202
 
415
- ### CloudClient (Coming Soon)
203
+ // Check if can execute
204
+ const canRun = await client.budget.canExecute();
416
205
 
417
- ```typescript
418
- class CloudClient {
419
- constructor(config?: CloudClientConfig);
206
+ // Get billing records
207
+ const records = await client.billing.listRecords({ limit: 10 });
420
208
 
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
- }
209
+ // Get usage stats
210
+ const stats = await client.billing.getStats({ period: 'month' });
426
211
  ```
427
212
 
428
- ### Project (Coming Soon)
213
+ ### Git Operations
214
+
215
+ Manage version control:
429
216
 
430
217
  ```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;
448
- }
449
- ```
218
+ // Get diff
219
+ const diff = await client.git.diff('env_xxx');
450
220
 
451
- ## Examples
221
+ // Commit changes
222
+ await client.git.commit('env_xxx', {
223
+ message: 'Add new feature'
224
+ });
452
225
 
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
226
+ // Push to remote
227
+ await client.git.push('env_xxx');
464
228
  ```
465
229
 
466
- [View all examples →](https://github.com/TestBase-ai/computer-agents/tree/main/examples/testbase)
230
+ ## Error Handling
467
231
 
468
- ## Troubleshooting
469
-
470
- ### "OPENAI_API_KEY not set"
471
-
472
- ```bash
473
- export OPENAI_API_KEY=sk-...
232
+ ```typescript
233
+ import { ComputerAgentsClient, ApiClientError } from 'computer-agents';
234
+
235
+ try {
236
+ await client.run('Task', { environmentId: 'env_xxx' });
237
+ } catch (error) {
238
+ if (error instanceof ApiClientError) {
239
+ console.error(`API Error: ${error.message}`);
240
+ console.error(`Status: ${error.status}`);
241
+ console.error(`Code: ${error.code}`);
242
+ }
243
+ }
474
244
  ```
475
245
 
476
- ### "Computer agents require a workspace"
246
+ ## Environment Variables
477
247
 
478
- Computer agents need a workspace parameter:
248
+ | Variable | Description |
249
+ |----------|-------------|
250
+ | `COMPUTER_AGENTS_API_KEY` | API key for authentication |
479
251
 
480
- ```typescript
481
- // Correct
482
- new Agent({ agentType: 'computer', workspace: './my-project' })
483
-
484
- // Missing workspace - Error
485
- new Agent({ agentType: 'computer' })
486
- ```
252
+ ## TypeScript
487
253
 
488
- ### Session continuity not working
489
-
490
- Use the same agent instance across runs:
254
+ Full type definitions are included:
491
255
 
492
256
  ```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
257
+ import type {
258
+ Thread,
259
+ Environment,
260
+ CloudAgent,
261
+ Schedule,
262
+ BudgetStatus,
263
+ MessageStreamEvent,
264
+ } from 'computer-agents';
496
265
  ```
497
266
 
498
267
  ## License
499
268
 
500
269
  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)