@tabstack/sdk 1.0.0 → 1.0.5

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 (101) hide show
  1. package/LICENSE +22 -11
  2. package/README.md +17 -44
  3. package/dist/cjs/{automate.d.ts → agent.d.ts} +10 -10
  4. package/dist/cjs/agent.d.ts.map +1 -0
  5. package/dist/cjs/{automate.js → agent.js} +11 -11
  6. package/dist/cjs/agent.js.map +1 -0
  7. package/dist/cjs/agent.test.d.ts +5 -0
  8. package/dist/cjs/agent.test.d.ts.map +1 -0
  9. package/dist/cjs/{automate.test.js → agent.test.js} +32 -32
  10. package/dist/cjs/agent.test.js.map +1 -0
  11. package/dist/cjs/client.d.ts +13 -13
  12. package/dist/cjs/client.d.ts.map +1 -1
  13. package/dist/cjs/client.js +12 -12
  14. package/dist/cjs/client.js.map +1 -1
  15. package/dist/cjs/client.test.d.ts +1 -1
  16. package/dist/cjs/client.test.js +50 -51
  17. package/dist/cjs/client.test.js.map +1 -1
  18. package/dist/cjs/exceptions.d.ts +9 -9
  19. package/dist/cjs/exceptions.js +13 -13
  20. package/dist/cjs/exceptions.test.js +30 -30
  21. package/dist/cjs/extract.d.ts +2 -57
  22. package/dist/cjs/extract.d.ts.map +1 -1
  23. package/dist/cjs/extract.js +2 -60
  24. package/dist/cjs/extract.js.map +1 -1
  25. package/dist/cjs/extract.test.js +0 -114
  26. package/dist/cjs/extract.test.js.map +1 -1
  27. package/dist/cjs/generate.d.ts +1 -1
  28. package/dist/cjs/generate.js +1 -1
  29. package/dist/cjs/index.d.ts +9 -9
  30. package/dist/cjs/index.d.ts.map +1 -1
  31. package/dist/cjs/index.js +9 -9
  32. package/dist/cjs/index.js.map +1 -1
  33. package/dist/cjs/types.d.ts +1 -1
  34. package/dist/cjs/types.js +1 -1
  35. package/dist/cjs/util/http.d.ts +1 -1
  36. package/dist/cjs/util/http.js +4 -4
  37. package/dist/cjs/util/http.test.js +5 -5
  38. package/dist/esm/{automate.d.ts → agent.d.ts} +10 -10
  39. package/dist/esm/agent.d.ts.map +1 -0
  40. package/dist/esm/{automate.js → agent.js} +9 -9
  41. package/dist/esm/agent.js.map +1 -0
  42. package/dist/esm/agent.test.d.ts +5 -0
  43. package/dist/esm/agent.test.d.ts.map +1 -0
  44. package/dist/esm/{automate.test.js → agent.test.js} +32 -32
  45. package/dist/esm/agent.test.js.map +1 -0
  46. package/dist/esm/client.d.ts +13 -13
  47. package/dist/esm/client.d.ts.map +1 -1
  48. package/dist/esm/client.js +10 -10
  49. package/dist/esm/client.js.map +1 -1
  50. package/dist/esm/client.test.d.ts +1 -1
  51. package/dist/esm/client.test.js +51 -52
  52. package/dist/esm/client.test.js.map +1 -1
  53. package/dist/esm/exceptions.d.ts +9 -9
  54. package/dist/esm/exceptions.js +11 -11
  55. package/dist/esm/exceptions.test.js +31 -31
  56. package/dist/esm/extract.d.ts +2 -57
  57. package/dist/esm/extract.d.ts.map +1 -1
  58. package/dist/esm/extract.js +2 -60
  59. package/dist/esm/extract.js.map +1 -1
  60. package/dist/esm/extract.test.js +0 -114
  61. package/dist/esm/extract.test.js.map +1 -1
  62. package/dist/esm/generate.d.ts +1 -1
  63. package/dist/esm/generate.js +1 -1
  64. package/dist/esm/index.d.ts +9 -9
  65. package/dist/esm/index.d.ts.map +1 -1
  66. package/dist/esm/index.js +7 -7
  67. package/dist/esm/index.js.map +1 -1
  68. package/dist/esm/types.d.ts +1 -1
  69. package/dist/esm/types.js +1 -1
  70. package/dist/esm/util/http.d.ts +1 -1
  71. package/dist/esm/util/http.js +5 -5
  72. package/dist/esm/util/http.test.js +6 -6
  73. package/dist/types/{automate.d.ts → agent.d.ts} +10 -10
  74. package/dist/types/agent.d.ts.map +1 -0
  75. package/dist/types/agent.test.d.ts +5 -0
  76. package/dist/types/agent.test.d.ts.map +1 -0
  77. package/dist/types/client.d.ts +13 -13
  78. package/dist/types/client.d.ts.map +1 -1
  79. package/dist/types/client.test.d.ts +1 -1
  80. package/dist/types/exceptions.d.ts +9 -9
  81. package/dist/types/extract.d.ts +2 -57
  82. package/dist/types/extract.d.ts.map +1 -1
  83. package/dist/types/generate.d.ts +1 -1
  84. package/dist/types/index.d.ts +9 -9
  85. package/dist/types/index.d.ts.map +1 -1
  86. package/dist/types/types.d.ts +1 -1
  87. package/dist/types/util/http.d.ts +1 -1
  88. package/package.json +5 -5
  89. package/dist/cjs/automate.d.ts.map +0 -1
  90. package/dist/cjs/automate.js.map +0 -1
  91. package/dist/cjs/automate.test.d.ts +0 -5
  92. package/dist/cjs/automate.test.d.ts.map +0 -1
  93. package/dist/cjs/automate.test.js.map +0 -1
  94. package/dist/esm/automate.d.ts.map +0 -1
  95. package/dist/esm/automate.js.map +0 -1
  96. package/dist/esm/automate.test.d.ts +0 -5
  97. package/dist/esm/automate.test.d.ts.map +0 -1
  98. package/dist/esm/automate.test.js.map +0 -1
  99. package/dist/types/automate.d.ts.map +0 -1
  100. package/dist/types/automate.test.d.ts +0 -5
  101. package/dist/types/automate.test.d.ts.map +0 -1
package/LICENSE CHANGED
@@ -162,20 +162,31 @@
162
162
  other commercial damages or losses), even if such Contributor
163
163
  has been advised of the possibility of such damages.
164
164
 
165
- 9. Accepting Warranty or Support. While redistributing the Work or
166
- Derivative Works thereof, You may choose to offer, and charge a fee
167
- for, acceptance of support, warranty, indemnity, or other liability
168
- obligations and/or rights consistent with this License. However, in
169
- accepting such obligations, You may act only on Your own behalf and
170
- on Your sole responsibility, not on behalf of any other Contributor,
171
- and only if You agree to indemnify, defend, and hold each Contributor
172
- harmless for any liability incurred by, or claims asserted against,
173
- such Contributor by reason of your accepting any such warranty or
174
- additional liability.
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
175
 
176
176
  END OF TERMS AND CONDITIONS
177
177
 
178
- Copyright 2025 TABStack
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright 2025 Mozilla
179
190
 
180
191
  Licensed under the Apache License, Version 2.0 (the "License");
181
192
  you may not use this file except in compliance with the License.
package/README.md CHANGED
@@ -1,12 +1,15 @@
1
- # TABStack AI TypeScript SDK
1
+ # Tabstack TypeScript SDK
2
2
 
3
- TypeScript/JavaScript SDK for [TABStack AI](https://tabstack.ai) - Extract, Generate, and Automate web content with AI.
3
+ > [!WARNING]
4
+ > **Early Release**: This SDK is in early development. The API may change in future releases as we refine and improve the library based on user feedback.
5
+
6
+ TypeScript/JavaScript SDK for [Tabstack](https://tabstack.ai) - Extract, Generate, and Automate web content with AI.
4
7
 
5
8
  ## Features
6
9
 
7
- - **Extract**: Convert web pages to Markdown, generate schemas, and extract structured JSON data
10
+ - **Extract**: Convert web pages to Markdown and extract structured JSON data
8
11
  - **Generate**: Transform web content using AI with custom instructions
9
- - **Automate**: Execute complex browser automation tasks with natural language
12
+ - **Agent**: Execute complex browser automation tasks with natural language
10
13
  - **Type-Safe**: Full TypeScript support with comprehensive type definitions
11
14
  - **Zero Dependencies**: Uses only Node.js standard library
12
15
  - **Universal Module Support**: Works with CommonJS, ESM, and all TypeScript configurations
@@ -72,9 +75,9 @@ Sign up at [tabstack.ai](https://tabstack.ai) to get your API key.
72
75
 
73
76
  #### ES Modules (ESM)
74
77
  ```typescript
75
- import { TABStack } from '@tabstack/sdk';
78
+ import { Tabstack } from '@tabstack/sdk';
76
79
 
77
- const tabs = new TABStack({
80
+ const tabs = new Tabstack({
78
81
  apiKey: process.env.TABSTACK_API_KEY!
79
82
  });
80
83
 
@@ -108,9 +111,9 @@ console.log(data.data);
108
111
 
109
112
  #### CommonJS
110
113
  ```javascript
111
- const { TABStack } = require('@tabstack/sdk');
114
+ const { Tabstack } = require('@tabstack/sdk');
112
115
 
113
- const tabs = new TABStack({
116
+ const tabs = new Tabstack({
114
117
  apiKey: process.env.TABSTACK_API_KEY
115
118
  });
116
119
 
@@ -168,20 +171,6 @@ const result = await tabs.extract.json('https://example.com/products', schema);
168
171
  console.log(result.data);
169
172
  ```
170
173
 
171
- ### Generate Schema
172
-
173
- Generate a JSON schema from web content:
174
-
175
- ```typescript
176
- const schema = await tabs.extract.schema('https://news.ycombinator.com', {
177
- instructions: 'extract top stories with title, points, and author'
178
- });
179
-
180
- // Use the generated schema for extraction
181
- const result = await tabs.extract.json('https://news.ycombinator.com', schema);
182
- console.log(result.data);
183
- ```
184
-
185
174
  ### Generate Content
186
175
 
187
176
  Transform web content using AI:
@@ -220,7 +209,7 @@ console.log(result.data);
220
209
  Execute browser automation tasks with streaming updates:
221
210
 
222
211
  ```typescript
223
- for await (const event of tabs.automate.execute(
212
+ for await (const event of tabs.agent.automate(
224
213
  'Find the top 3 trending repositories and extract their details',
225
214
  {
226
215
  url: 'https://github.com/trending',
@@ -240,9 +229,7 @@ for await (const event of tabs.automate.execute(
240
229
 
241
230
  ## Working with JSON Schemas
242
231
 
243
- The SDK uses standard [JSON Schema](https://json-schema.org/) format for defining data structures. You can define schemas manually or generate them automatically:
244
-
245
- ### Manual Schema Definition
232
+ The SDK uses standard [JSON Schema](https://json-schema.org/) format for defining data structures:
246
233
 
247
234
  ```typescript
248
235
  const schema = {
@@ -280,27 +267,13 @@ const schema = {
280
267
  };
281
268
  ```
282
269
 
283
- ### Automatic Schema Generation
284
-
285
- Let the AI generate a schema from any webpage:
286
-
287
- ```typescript
288
- // Generate schema from content
289
- const schema = await tabs.extract.schema('https://news.ycombinator.com', {
290
- instructions: 'extract stories with title, points, and author'
291
- });
292
-
293
- // Use it immediately
294
- const data = await tabs.extract.json('https://news.ycombinator.com', schema);
295
- ```
296
-
297
270
  ## Error Handling
298
271
 
299
272
  Handle errors with specific error classes:
300
273
 
301
274
  ```typescript
302
275
  import {
303
- TABStackError,
276
+ TabstackError,
304
277
  UnauthorizedError,
305
278
  InvalidURLError,
306
279
  BadRequestError,
@@ -314,7 +287,7 @@ try {
314
287
  console.error('Invalid API key');
315
288
  } else if (error instanceof InvalidURLError) {
316
289
  console.error('Invalid or inaccessible URL');
317
- } else if (error instanceof TABStackError) {
290
+ } else if (error instanceof TabstackError) {
318
291
  console.error(`API error: ${error.message}`);
319
292
  }
320
293
  }
@@ -322,7 +295,7 @@ try {
322
295
 
323
296
  ### Error Classes
324
297
 
325
- - `TABStackError` - Base error class
298
+ - `TabstackError` - Base error class
326
299
  - `BadRequestError` - 400: Malformed request
327
300
  - `UnauthorizedError` - 401: Invalid API key
328
301
  - `InvalidURLError` - 422: Invalid or inaccessible URL
@@ -333,7 +306,7 @@ try {
333
306
  ## Requirements
334
307
 
335
308
  - Node.js >= 20.0.0
336
- - TABStack API key ([get one here](https://tabstack.ai))
309
+ - Tabstack API key ([get one here](https://tabstack.ai))
337
310
 
338
311
  ## Development & Testing
339
312
 
@@ -1,9 +1,9 @@
1
1
  /**
2
- * Automate operator for TABStack AI SDK
2
+ * Agent client for Tabstack SDK
3
3
  */
4
4
  import { HTTPClient } from './util/http';
5
5
  import { AutomateEvent } from './types';
6
- export interface AutomateExecuteOptions {
6
+ export interface AutomateOptions {
7
7
  url?: string;
8
8
  data?: Record<string, unknown>;
9
9
  guardrails?: string;
@@ -11,13 +11,13 @@ export interface AutomateExecuteOptions {
11
11
  maxValidationAttempts?: number;
12
12
  }
13
13
  /**
14
- * Automate operator for AI-powered web automation
14
+ * Agent client for AI-powered web automation
15
15
  *
16
16
  * This class provides methods for executing complex web automation tasks using
17
17
  * natural language instructions. The automation runs in a browser and streams
18
18
  * real-time progress updates.
19
19
  */
20
- export declare class Automate {
20
+ export declare class Agent {
21
21
  private httpClient;
22
22
  constructor(httpClient: HTTPClient);
23
23
  /**
@@ -53,7 +53,7 @@ export declare class Automate {
53
53
  * @example
54
54
  * Extract GitHub trending repositories:
55
55
  * ```typescript
56
- * for await (const event of tabs.automate.execute(
56
+ * for await (const event of tabs.agent.automate(
57
57
  * 'Find the top 3 trending repositories and extract their names, descriptions, and star counts',
58
58
  * {
59
59
  * url: 'https://github.com/trending',
@@ -75,7 +75,7 @@ export declare class Automate {
75
75
  * @example
76
76
  * Scrape product information:
77
77
  * ```typescript
78
- * for await (const event of tabs.automate.execute(
78
+ * for await (const event of tabs.agent.automate(
79
79
  * 'Find the product name, price, and availability status',
80
80
  * {
81
81
  * url: 'https://example-store.com/product/wireless-headphones',
@@ -95,7 +95,7 @@ export declare class Automate {
95
95
  * @example
96
96
  * Fill out contact form:
97
97
  * ```typescript
98
- * for await (const event of tabs.automate.execute(
98
+ * for await (const event of tabs.agent.automate(
99
99
  * 'Submit the contact form with my information',
100
100
  * {
101
101
  * url: 'https://company.com/contact',
@@ -119,7 +119,7 @@ export declare class Automate {
119
119
  * @example
120
120
  * Handle all event types:
121
121
  * ```typescript
122
- * for await (const event of tabs.automate.execute(
122
+ * for await (const event of tabs.agent.automate(
123
123
  * 'Research TypeScript frameworks and compare them',
124
124
  * { url: 'https://www.npmjs.com' }
125
125
  * )) {
@@ -147,10 +147,10 @@ export declare class Automate {
147
147
  * }
148
148
  * ```
149
149
  */
150
- execute(task: string, options?: AutomateExecuteOptions): AsyncGenerator<AutomateEvent, void, undefined>;
150
+ automate(task: string, options?: AutomateOptions): AsyncGenerator<AutomateEvent, void, undefined>;
151
151
  /**
152
152
  * Parse SSE event data
153
153
  */
154
154
  private parseEvent;
155
155
  }
156
- //# sourceMappingURL=automate.d.ts.map
156
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;GAMG;AACH,qBAAa,KAAK;IACJ,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8HG;IACI,QAAQ,CACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,eAAe,GACxB,cAAc,CAAC,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC;IAkDjD;;OAEG;IACH,OAAO,CAAC,UAAU;CASnB"}
@@ -1,18 +1,18 @@
1
1
  "use strict";
2
2
  /**
3
- * Automate operator for TABStack AI SDK
3
+ * Agent client for Tabstack SDK
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Automate = void 0;
6
+ exports.Agent = void 0;
7
7
  const types_1 = require("./types");
8
8
  /**
9
- * Automate operator for AI-powered web automation
9
+ * Agent client for AI-powered web automation
10
10
  *
11
11
  * This class provides methods for executing complex web automation tasks using
12
12
  * natural language instructions. The automation runs in a browser and streams
13
13
  * real-time progress updates.
14
14
  */
15
- class Automate {
15
+ class Agent {
16
16
  constructor(httpClient) {
17
17
  this.httpClient = httpClient;
18
18
  }
@@ -49,7 +49,7 @@ class Automate {
49
49
  * @example
50
50
  * Extract GitHub trending repositories:
51
51
  * ```typescript
52
- * for await (const event of tabs.automate.execute(
52
+ * for await (const event of tabs.agent.automate(
53
53
  * 'Find the top 3 trending repositories and extract their names, descriptions, and star counts',
54
54
  * {
55
55
  * url: 'https://github.com/trending',
@@ -71,7 +71,7 @@ class Automate {
71
71
  * @example
72
72
  * Scrape product information:
73
73
  * ```typescript
74
- * for await (const event of tabs.automate.execute(
74
+ * for await (const event of tabs.agent.automate(
75
75
  * 'Find the product name, price, and availability status',
76
76
  * {
77
77
  * url: 'https://example-store.com/product/wireless-headphones',
@@ -91,7 +91,7 @@ class Automate {
91
91
  * @example
92
92
  * Fill out contact form:
93
93
  * ```typescript
94
- * for await (const event of tabs.automate.execute(
94
+ * for await (const event of tabs.agent.automate(
95
95
  * 'Submit the contact form with my information',
96
96
  * {
97
97
  * url: 'https://company.com/contact',
@@ -115,7 +115,7 @@ class Automate {
115
115
  * @example
116
116
  * Handle all event types:
117
117
  * ```typescript
118
- * for await (const event of tabs.automate.execute(
118
+ * for await (const event of tabs.agent.automate(
119
119
  * 'Research TypeScript frameworks and compare them',
120
120
  * { url: 'https://www.npmjs.com' }
121
121
  * )) {
@@ -143,7 +143,7 @@ class Automate {
143
143
  * }
144
144
  * ```
145
145
  */
146
- async *execute(task, options) {
146
+ async *automate(task, options) {
147
147
  const requestData = {
148
148
  task,
149
149
  maxIterations: options?.maxIterations ?? 50,
@@ -207,5 +207,5 @@ class Automate {
207
207
  }
208
208
  }
209
209
  }
210
- exports.Automate = Automate;
211
- //# sourceMappingURL=automate.js.map
210
+ exports.Agent = Agent;
211
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for Agent
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=agent.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.test.d.ts","sourceRoot":"","sources":["../../src/agent.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,19 +1,19 @@
1
1
  "use strict";
2
2
  /**
3
- * Tests for Automate operator
3
+ * Tests for Agent
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  // @ts-nocheck
7
- const automate_1 = require("./automate");
7
+ const agent_1 = require("./agent");
8
8
  const http_1 = require("./util/http");
9
9
  // Mock HTTPClient
10
10
  jest.mock('./util/http');
11
- describe('Automate', () => {
12
- let automate;
11
+ describe('Agent', () => {
12
+ let agent;
13
13
  let mockHttpClient;
14
14
  beforeEach(() => {
15
15
  mockHttpClient = new http_1.HTTPClient({ apiKey: 'test-key' });
16
- automate = new automate_1.Automate(mockHttpClient);
16
+ agent = new agent_1.Agent(mockHttpClient);
17
17
  });
18
18
  afterEach(() => {
19
19
  jest.clearAllMocks();
@@ -24,7 +24,7 @@ describe('Automate', () => {
24
24
  yield line;
25
25
  }
26
26
  }
27
- describe('execute', () => {
27
+ describe('automate', () => {
28
28
  it('should execute task with minimal options', async () => {
29
29
  const sseLines = [
30
30
  'event: start',
@@ -36,7 +36,7 @@ describe('Automate', () => {
36
36
  ];
37
37
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
38
38
  const events = [];
39
- for await (const event of automate.execute('Test task')) {
39
+ for await (const event of agent.automate('Test task')) {
40
40
  events.push(event);
41
41
  }
42
42
  expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
@@ -52,7 +52,7 @@ describe('Automate', () => {
52
52
  const sseLines = ['event: start', 'data: {}', ''];
53
53
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
54
54
  const events = [];
55
- for await (const event of automate.execute('Test task', {
55
+ for await (const event of agent.automate('Test task', {
56
56
  url: 'https://example.com',
57
57
  })) {
58
58
  events.push(event);
@@ -69,7 +69,7 @@ describe('Automate', () => {
69
69
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
70
70
  const data = { name: 'John', email: 'john@example.com' };
71
71
  const events = [];
72
- for await (const event of automate.execute('Fill form', { data })) {
72
+ for await (const event of agent.automate('Fill form', { data })) {
73
73
  events.push(event);
74
74
  }
75
75
  expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
@@ -83,7 +83,7 @@ describe('Automate', () => {
83
83
  const sseLines = ['event: start', 'data: {}', ''];
84
84
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
85
85
  const events = [];
86
- for await (const event of automate.execute('Browse site', {
86
+ for await (const event of agent.automate('Browse site', {
87
87
  guardrails: 'read only, no modifications',
88
88
  })) {
89
89
  events.push(event);
@@ -99,7 +99,7 @@ describe('Automate', () => {
99
99
  const sseLines = ['event: start', 'data: {}', ''];
100
100
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
101
101
  const events = [];
102
- for await (const event of automate.execute('Test task', { maxIterations: 100 })) {
102
+ for await (const event of agent.automate('Test task', { maxIterations: 100 })) {
103
103
  events.push(event);
104
104
  }
105
105
  expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
@@ -112,7 +112,7 @@ describe('Automate', () => {
112
112
  const sseLines = ['event: start', 'data: {}', ''];
113
113
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
114
114
  const events = [];
115
- for await (const event of automate.execute('Test task', { maxValidationAttempts: 5 })) {
115
+ for await (const event of agent.automate('Test task', { maxValidationAttempts: 5 })) {
116
116
  events.push(event);
117
117
  }
118
118
  expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
@@ -125,7 +125,7 @@ describe('Automate', () => {
125
125
  const sseLines = ['event: start', 'data: {}', ''];
126
126
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
127
127
  const events = [];
128
- for await (const event of automate.execute('Complete task', {
128
+ for await (const event of agent.automate('Complete task', {
129
129
  url: 'https://example.com',
130
130
  data: { key: 'value' },
131
131
  guardrails: 'safe mode',
@@ -149,7 +149,7 @@ describe('Automate', () => {
149
149
  const sseLines = ['event: start', 'data: {"message":"Started"}', ''];
150
150
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
151
151
  const events = [];
152
- for await (const event of automate.execute('Task')) {
152
+ for await (const event of agent.automate('Task')) {
153
153
  events.push(event);
154
154
  }
155
155
  expect(events).toHaveLength(1);
@@ -170,7 +170,7 @@ describe('Automate', () => {
170
170
  ];
171
171
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
172
172
  const events = [];
173
- for await (const event of automate.execute('Task')) {
173
+ for await (const event of agent.automate('Task')) {
174
174
  events.push(event);
175
175
  }
176
176
  expect(events).toHaveLength(3);
@@ -189,7 +189,7 @@ describe('Automate', () => {
189
189
  ];
190
190
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
191
191
  const events = [];
192
- for await (const event of automate.execute('Task')) {
192
+ for await (const event of agent.automate('Task')) {
193
193
  events.push(event);
194
194
  }
195
195
  expect(events).toHaveLength(1);
@@ -202,7 +202,7 @@ describe('Automate', () => {
202
202
  const sseLines = ['event: start', 'data: {"message":"Started"}'];
203
203
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
204
204
  const events = [];
205
- for await (const event of automate.execute('Task')) {
205
+ for await (const event of agent.automate('Task')) {
206
206
  events.push(event);
207
207
  }
208
208
  // Should still yield the last event even without trailing empty line
@@ -213,7 +213,7 @@ describe('Automate', () => {
213
213
  const sseLines = ['event: start ', 'data: {"message":"Test"} ', ''];
214
214
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
215
215
  const events = [];
216
- for await (const event of automate.execute('Task')) {
216
+ for await (const event of agent.automate('Task')) {
217
217
  events.push(event);
218
218
  }
219
219
  expect(events).toHaveLength(1);
@@ -224,7 +224,7 @@ describe('Automate', () => {
224
224
  const sseLines = ['event: start', '', 'data: {"message":"Test"}', '', ''];
225
225
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
226
226
  const events = [];
227
- for await (const event of automate.execute('Task')) {
227
+ for await (const event of agent.automate('Task')) {
228
228
  events.push(event);
229
229
  }
230
230
  expect(events).toHaveLength(1);
@@ -253,7 +253,7 @@ describe('Automate', () => {
253
253
  });
254
254
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
255
255
  const events = [];
256
- for await (const event of automate.execute('Task')) {
256
+ for await (const event of agent.automate('Task')) {
257
257
  events.push(event);
258
258
  }
259
259
  expect(events).toHaveLength(eventTypes.length);
@@ -271,7 +271,7 @@ describe('Automate', () => {
271
271
  ];
272
272
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
273
273
  const events = [];
274
- for await (const event of automate.execute('Task')) {
274
+ for await (const event of agent.automate('Task')) {
275
275
  events.push(event);
276
276
  }
277
277
  expect(events[0].data.get('extractedData')).toEqual({ title: 'Test', count: 42 });
@@ -280,7 +280,7 @@ describe('Automate', () => {
280
280
  const sseLines = ['event: error', 'data: Invalid JSON {{{', ''];
281
281
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
282
282
  const events = [];
283
- for await (const event of automate.execute('Task')) {
283
+ for await (const event of agent.automate('Task')) {
284
284
  events.push(event);
285
285
  }
286
286
  expect(events[0].type).toBe('error');
@@ -290,7 +290,7 @@ describe('Automate', () => {
290
290
  const sseLines = ['event: start', 'data: ', ''];
291
291
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
292
292
  const events = [];
293
- for await (const event of automate.execute('Task')) {
293
+ for await (const event of agent.automate('Task')) {
294
294
  events.push(event);
295
295
  }
296
296
  expect(events).toHaveLength(1);
@@ -309,7 +309,7 @@ describe('Automate', () => {
309
309
  const sseLines = ['event: agent:extracted', `data: ${JSON.stringify(complexData)}`, ''];
310
310
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
311
311
  const events = [];
312
- for await (const event of automate.execute('Task')) {
312
+ for await (const event of agent.automate('Task')) {
313
313
  events.push(event);
314
314
  }
315
315
  expect(events[0].data.get('result')).toEqual(complexData.result);
@@ -324,7 +324,7 @@ describe('Automate', () => {
324
324
  ];
325
325
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
326
326
  const events = [];
327
- for await (const event of automate.execute('Task')) {
327
+ for await (const event of agent.automate('Task')) {
328
328
  events.push(event);
329
329
  }
330
330
  expect(events[0].data.get('url')).toBe('https://example.com');
@@ -334,7 +334,7 @@ describe('Automate', () => {
334
334
  const sseLines = ['event: start', 'data: {"message":"Test"}', ''];
335
335
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
336
336
  const events = [];
337
- for await (const event of automate.execute('Task')) {
337
+ for await (const event of agent.automate('Task')) {
338
338
  events.push(event);
339
339
  }
340
340
  expect(events[0].data.get('nonexistent')).toBeUndefined();
@@ -348,7 +348,7 @@ describe('Automate', () => {
348
348
  ];
349
349
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
350
350
  const events = [];
351
- for await (const event of automate.execute('Task')) {
351
+ for await (const event of agent.automate('Task')) {
352
352
  events.push(event);
353
353
  }
354
354
  const raw = events[0].data.getRaw();
@@ -383,7 +383,7 @@ describe('Automate', () => {
383
383
  ];
384
384
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
385
385
  const events = [];
386
- for await (const event of automate.execute('Extract data', {
386
+ for await (const event of agent.automate('Extract data', {
387
387
  url: 'https://example.com',
388
388
  })) {
389
389
  events.push(event);
@@ -404,7 +404,7 @@ describe('Automate', () => {
404
404
  ];
405
405
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
406
406
  const events = [];
407
- for await (const event of automate.execute('Task')) {
407
+ for await (const event of agent.automate('Task')) {
408
408
  events.push(event);
409
409
  }
410
410
  expect(events).toHaveLength(2);
@@ -422,7 +422,7 @@ describe('Automate', () => {
422
422
  ];
423
423
  mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
424
424
  const events = [];
425
- for await (const event of automate.execute('Task', { maxIterations: 10 })) {
425
+ for await (const event of agent.automate('Task', { maxIterations: 10 })) {
426
426
  events.push(event);
427
427
  }
428
428
  expect(events).toHaveLength(2);
@@ -433,9 +433,9 @@ describe('Automate', () => {
433
433
  mockHttpClient.postStream = jest.fn().mockImplementation(async function* () {
434
434
  throw error;
435
435
  });
436
- const generator = automate.execute('Task');
436
+ const generator = agent.automate('Task');
437
437
  await expect(generator.next()).rejects.toThrow('Stream error');
438
438
  });
439
439
  });
440
440
  });
441
- //# sourceMappingURL=automate.test.js.map
441
+ //# sourceMappingURL=agent.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.test.js","sourceRoot":"","sources":["../../src/agent.test.ts"],"names":[],"mappings":"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"}