@kritchoff/agent-browser 0.9.14 → 0.9.15
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.
- package/dist/index.d.ts +15 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +168 -109
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -5,29 +5,11 @@ export interface AgentOptions {
|
|
|
5
5
|
*/
|
|
6
6
|
dist?: boolean;
|
|
7
7
|
}
|
|
8
|
-
/**
|
|
9
|
-
* WootzAgent SDK
|
|
10
|
-
*
|
|
11
|
-
* A high-level, Playwright-compatible API for controlling the WootzApp Android Agent.
|
|
12
|
-
* Handles environment lifecycle (VDI snapshots, fast resets) and browser automation.
|
|
13
|
-
*/
|
|
14
8
|
export declare class WootzAgent {
|
|
15
9
|
private options;
|
|
16
10
|
constructor(options?: AgentOptions);
|
|
17
|
-
/**
|
|
18
|
-
* Start the Agent Environment.
|
|
19
|
-
* - First run: Cold boot (~60s), creates baseline snapshot.
|
|
20
|
-
* - Subsequent runs: Warm boot (~20s) using snapshot.
|
|
21
|
-
*/
|
|
22
11
|
start(): Promise<void>;
|
|
23
|
-
/**
|
|
24
|
-
* Stop the Agent Environment (graceful shutdown).
|
|
25
|
-
*/
|
|
26
12
|
stop(): Promise<void>;
|
|
27
|
-
/**
|
|
28
|
-
* Fast Reset (~15s).
|
|
29
|
-
* Restarts the Android framework and browser to a clean state.
|
|
30
|
-
*/
|
|
31
13
|
reset(): Promise<void>;
|
|
32
14
|
navigate(url: string, waitUntil?: 'load' | 'domcontentloaded' | 'networkidle'): Promise<string>;
|
|
33
15
|
click(selector: string): Promise<string>;
|
|
@@ -40,9 +22,6 @@ export declare class WootzAgent {
|
|
|
40
22
|
focus(selector: string): Promise<string>;
|
|
41
23
|
press(key: string, selector?: string): Promise<string>;
|
|
42
24
|
selectOption(selector: string, value: string | string[]): Promise<string>;
|
|
43
|
-
/**
|
|
44
|
-
* Get an accessibility snapshot (AXTree) of the current page.
|
|
45
|
-
*/
|
|
46
25
|
snapshot(): Promise<string>;
|
|
47
26
|
innerText(selector: string): Promise<string>;
|
|
48
27
|
innerHTML(selector: string): Promise<string>;
|
|
@@ -58,22 +37,29 @@ export declare class WootzAgent {
|
|
|
58
37
|
goBack(): Promise<string>;
|
|
59
38
|
goForward(): Promise<string>;
|
|
60
39
|
getByRole(role: string, name?: string, exact?: boolean): Promise<string>;
|
|
61
|
-
getByText(text: string, exact?: boolean): Promise<string>;
|
|
62
|
-
getByPlaceholder(placeholder: string, exact?: boolean): Promise<string>;
|
|
63
|
-
getByTestId(testId: string): Promise<string>;
|
|
64
40
|
screenshot(path?: string): Promise<string>;
|
|
65
41
|
scroll(x: number, y: number): Promise<string>;
|
|
66
|
-
evaluate(script: string): Promise<
|
|
42
|
+
evaluate(script: string): Promise<any>;
|
|
67
43
|
newTab(url?: string): Promise<string>;
|
|
68
44
|
switchTab(index: number): Promise<string>;
|
|
69
45
|
closeTab(index?: number): Promise<string>;
|
|
70
|
-
listTabs(): Promise<
|
|
46
|
+
listTabs(): Promise<any[]>;
|
|
71
47
|
/**
|
|
72
48
|
* Execute an arbitrary agent command CLI-style.
|
|
73
|
-
*
|
|
49
|
+
* e.g. agent.command('open', 'https://google.com')
|
|
50
|
+
* This legacy method parses string args into a JSON command.
|
|
51
|
+
*/
|
|
52
|
+
command(action: string, ...args: string[]): Promise<string>;
|
|
53
|
+
/**
|
|
54
|
+
* Send a raw JSON command to the daemon via TCP.
|
|
55
|
+
* @param command The command object (must include 'action')
|
|
56
|
+
* @param returnData If true, return the 'data' object. If false, return a success message.
|
|
57
|
+
*/
|
|
58
|
+
private sendCommand;
|
|
59
|
+
/**
|
|
60
|
+
* Run a shell script (for start/stop/reset infrastructure)
|
|
74
61
|
*/
|
|
75
|
-
|
|
76
|
-
private runSdkCommand;
|
|
62
|
+
private runSdkScript;
|
|
77
63
|
}
|
|
78
64
|
export default WootzAgent;
|
|
79
65
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,227 +1,286 @@
|
|
|
1
1
|
import { spawn } from 'child_process';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { fileURLToPath } from 'url';
|
|
4
|
+
import * as net from 'net';
|
|
5
|
+
import { randomUUID } from 'crypto';
|
|
4
6
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
5
7
|
const SDK_SCRIPT = path.resolve(__dirname, '../sdk.sh');
|
|
6
|
-
|
|
7
|
-
* WootzAgent SDK
|
|
8
|
-
*
|
|
9
|
-
* A high-level, Playwright-compatible API for controlling the WootzApp Android Agent.
|
|
10
|
-
* Handles environment lifecycle (VDI snapshots, fast resets) and browser automation.
|
|
11
|
-
*/
|
|
8
|
+
const DAEMON_PORT = 3000;
|
|
12
9
|
export class WootzAgent {
|
|
13
10
|
options;
|
|
14
11
|
constructor(options = {}) {
|
|
15
12
|
this.options = {
|
|
16
|
-
dist: true,
|
|
13
|
+
dist: true, // Default to distribution mode for end users
|
|
17
14
|
...options,
|
|
18
15
|
};
|
|
19
16
|
}
|
|
20
|
-
// --- Lifecycle Management ---
|
|
21
|
-
/**
|
|
22
|
-
* Start the Agent Environment.
|
|
23
|
-
* - First run: Cold boot (~60s), creates baseline snapshot.
|
|
24
|
-
* - Subsequent runs: Warm boot (~20s) using snapshot.
|
|
25
|
-
*/
|
|
17
|
+
// --- Lifecycle Management (Infrastructure) ---
|
|
26
18
|
async start() {
|
|
27
19
|
const args = [];
|
|
28
20
|
if (this.options.dist) {
|
|
29
21
|
args.push('--dist');
|
|
30
22
|
}
|
|
31
23
|
args.push('start');
|
|
32
|
-
await this.
|
|
24
|
+
await this.runSdkScript(args);
|
|
33
25
|
}
|
|
34
|
-
/**
|
|
35
|
-
* Stop the Agent Environment (graceful shutdown).
|
|
36
|
-
*/
|
|
37
26
|
async stop() {
|
|
38
27
|
const args = [];
|
|
39
28
|
if (this.options.dist) {
|
|
40
29
|
args.push('--dist');
|
|
41
30
|
}
|
|
42
31
|
args.push('stop');
|
|
43
|
-
await this.
|
|
32
|
+
await this.runSdkScript(args);
|
|
44
33
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Fast Reset (~15s).
|
|
47
|
-
* Restarts the Android framework and browser to a clean state.
|
|
48
|
-
*/
|
|
49
34
|
async reset() {
|
|
50
|
-
await this.
|
|
35
|
+
await this.runSdkScript(['reset']);
|
|
51
36
|
}
|
|
52
|
-
// --- Core Browser Actions ---
|
|
37
|
+
// --- Core Browser Actions (Direct Daemon) ---
|
|
53
38
|
async navigate(url, waitUntil = 'load') {
|
|
54
|
-
return await this.
|
|
39
|
+
return await this.sendCommand({ action: 'navigate', url, waitUntil });
|
|
55
40
|
}
|
|
56
41
|
async click(selector) {
|
|
57
|
-
return await this.
|
|
42
|
+
return await this.sendCommand({ action: 'click', selector });
|
|
58
43
|
}
|
|
59
44
|
async doubleClick(selector) {
|
|
60
|
-
return await this.
|
|
45
|
+
return await this.sendCommand({ action: 'dblclick', selector });
|
|
61
46
|
}
|
|
62
47
|
async type(selector, text, delay) {
|
|
63
|
-
|
|
64
|
-
if (delay)
|
|
65
|
-
args.push(`--delay=${delay}`);
|
|
66
|
-
return await this.command(...args);
|
|
48
|
+
return await this.sendCommand({ action: 'type', selector, text, delay });
|
|
67
49
|
}
|
|
68
50
|
async fill(selector, value) {
|
|
69
|
-
return await this.
|
|
51
|
+
return await this.sendCommand({ action: 'fill', selector, value });
|
|
70
52
|
}
|
|
71
53
|
async check(selector) {
|
|
72
|
-
return await this.
|
|
54
|
+
return await this.sendCommand({ action: 'check', selector });
|
|
73
55
|
}
|
|
74
56
|
async uncheck(selector) {
|
|
75
|
-
return await this.
|
|
57
|
+
return await this.sendCommand({ action: 'uncheck', selector });
|
|
76
58
|
}
|
|
77
59
|
async hover(selector) {
|
|
78
|
-
return await this.
|
|
60
|
+
return await this.sendCommand({ action: 'hover', selector });
|
|
79
61
|
}
|
|
80
62
|
async focus(selector) {
|
|
81
|
-
return await this.
|
|
63
|
+
return await this.sendCommand({ action: 'focus', selector });
|
|
82
64
|
}
|
|
83
65
|
async press(key, selector) {
|
|
84
|
-
|
|
85
|
-
return await this.command('press', selector, key);
|
|
86
|
-
return await this.command('press', key);
|
|
66
|
+
return await this.sendCommand({ action: 'press', key, selector });
|
|
87
67
|
}
|
|
88
68
|
async selectOption(selector, value) {
|
|
89
|
-
|
|
90
|
-
return await this.command('select', selector, val);
|
|
69
|
+
return await this.sendCommand({ action: 'select', selector, values: value });
|
|
91
70
|
}
|
|
92
71
|
// --- Introspection & State ---
|
|
93
|
-
/**
|
|
94
|
-
* Get an accessibility snapshot (AXTree) of the current page.
|
|
95
|
-
*/
|
|
96
72
|
async snapshot() {
|
|
97
|
-
|
|
73
|
+
// We request the raw response data for the snapshot
|
|
74
|
+
const result = await this.sendCommand({ action: 'snapshot' }, true);
|
|
75
|
+
// The daemon returns { snapshot: "...", refs: ... }
|
|
76
|
+
return result.snapshot || '';
|
|
98
77
|
}
|
|
99
78
|
async innerText(selector) {
|
|
100
|
-
|
|
79
|
+
const res = await this.sendCommand({ action: 'innertext', selector }, true);
|
|
80
|
+
return res.text;
|
|
101
81
|
}
|
|
102
82
|
async innerHTML(selector) {
|
|
103
|
-
|
|
83
|
+
const res = await this.sendCommand({ action: 'innerhtml', selector }, true);
|
|
84
|
+
return res.html;
|
|
104
85
|
}
|
|
105
86
|
async getAttribute(selector, attribute) {
|
|
106
|
-
|
|
87
|
+
const res = await this.sendCommand({ action: 'getattribute', selector, attribute }, true);
|
|
88
|
+
return res.value;
|
|
107
89
|
}
|
|
108
90
|
async inputValue(selector) {
|
|
109
|
-
|
|
91
|
+
const res = await this.sendCommand({ action: 'inputvalue', selector }, true);
|
|
92
|
+
return res.value;
|
|
110
93
|
}
|
|
111
94
|
async isVisible(selector) {
|
|
112
|
-
const
|
|
113
|
-
return
|
|
95
|
+
const res = await this.sendCommand({ action: 'isvisible', selector }, true);
|
|
96
|
+
return res.visible;
|
|
114
97
|
}
|
|
115
98
|
async isEnabled(selector) {
|
|
116
|
-
const
|
|
117
|
-
return
|
|
99
|
+
const res = await this.sendCommand({ action: 'isenabled', selector }, true);
|
|
100
|
+
return res.enabled;
|
|
118
101
|
}
|
|
119
102
|
async isChecked(selector) {
|
|
120
|
-
const
|
|
121
|
-
return
|
|
103
|
+
const res = await this.sendCommand({ action: 'ischecked', selector }, true);
|
|
104
|
+
return res.checked;
|
|
122
105
|
}
|
|
123
106
|
// --- Waiting & Navigation ---
|
|
124
107
|
async waitForSelector(selector, state = 'visible', timeout) {
|
|
125
|
-
|
|
126
|
-
if (timeout)
|
|
127
|
-
args.push(`--timeout=${timeout}`);
|
|
128
|
-
return await this.command(...args);
|
|
108
|
+
return await this.sendCommand({ action: 'wait', selector, state, timeout });
|
|
129
109
|
}
|
|
130
110
|
async waitForTimeout(ms) {
|
|
131
|
-
return await this.
|
|
111
|
+
return await this.sendCommand({ action: 'wait', timeout: ms });
|
|
132
112
|
}
|
|
133
113
|
async waitForLoadState(state = 'load') {
|
|
134
|
-
return await this.
|
|
114
|
+
return await this.sendCommand({ action: 'waitforloadstate', state });
|
|
135
115
|
}
|
|
136
116
|
async reload() {
|
|
137
|
-
return await this.
|
|
117
|
+
return await this.sendCommand({ action: 'reload' });
|
|
138
118
|
}
|
|
139
119
|
async goBack() {
|
|
140
|
-
return await this.
|
|
120
|
+
return await this.sendCommand({ action: 'back' });
|
|
141
121
|
}
|
|
142
122
|
async goForward() {
|
|
143
|
-
return await this.
|
|
123
|
+
return await this.sendCommand({ action: 'forward' });
|
|
144
124
|
}
|
|
145
125
|
// --- Semantic Locators ---
|
|
146
126
|
async getByRole(role, name, exact = false) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
return
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
if (exact)
|
|
157
|
-
args.push('--exact');
|
|
158
|
-
return await this.command(...args);
|
|
159
|
-
}
|
|
160
|
-
async getByPlaceholder(placeholder, exact = false) {
|
|
161
|
-
const args = ['getbyplaceholder', placeholder];
|
|
162
|
-
if (exact)
|
|
163
|
-
args.push('--exact');
|
|
164
|
-
return await this.command(...args);
|
|
165
|
-
}
|
|
166
|
-
async getByTestId(testId) {
|
|
167
|
-
return await this.command('getbytestid', testId);
|
|
127
|
+
// Currently mapping to generic command, or implement specific logic if daemon supports getbyrole directly
|
|
128
|
+
// The daemon supports 'getbyrole', so we pass it through
|
|
129
|
+
// subaction is required by daemon logic for these commands to do something (click/fill etc) immediately?
|
|
130
|
+
// Wait, the daemon logic for getbyrole requires a 'subaction'. This API style is slightly different.
|
|
131
|
+
// For now, let's map to the generic command pass-through which might just return the selector?
|
|
132
|
+
// Actually, the daemon requires subaction. So "getByRole" alone isn't a stateful return like Playwright.
|
|
133
|
+
// It performs an action immediately.
|
|
134
|
+
// Let's defer strict implementation of these "Locator" builders for now and rely on selectors or direct actions.
|
|
135
|
+
throw new Error("Locator builders (getByRole) are not fully supported in stateless mode yet. Use standard selectors.");
|
|
168
136
|
}
|
|
169
137
|
// --- Utilities ---
|
|
170
138
|
async screenshot(path) {
|
|
171
|
-
|
|
139
|
+
const res = await this.sendCommand({ action: 'screenshot', path }, true);
|
|
140
|
+
return res.path;
|
|
172
141
|
}
|
|
173
142
|
async scroll(x, y) {
|
|
174
|
-
return await this.
|
|
143
|
+
return await this.sendCommand({ action: 'scroll', x, y });
|
|
175
144
|
}
|
|
176
145
|
async evaluate(script) {
|
|
177
|
-
|
|
146
|
+
const res = await this.sendCommand({ action: 'evaluate', script }, true);
|
|
147
|
+
return res.result;
|
|
178
148
|
}
|
|
179
149
|
// --- Tab Management ---
|
|
180
150
|
async newTab(url) {
|
|
181
|
-
|
|
182
|
-
if (url)
|
|
183
|
-
args.push(url);
|
|
184
|
-
return await this.command(...args);
|
|
151
|
+
return await this.sendCommand({ action: 'tab_new', url });
|
|
185
152
|
}
|
|
186
153
|
async switchTab(index) {
|
|
187
|
-
return await this.
|
|
154
|
+
return await this.sendCommand({ action: 'tab_switch', index });
|
|
188
155
|
}
|
|
189
156
|
async closeTab(index) {
|
|
190
|
-
|
|
191
|
-
if (index !== undefined)
|
|
192
|
-
args.push(index.toString());
|
|
193
|
-
return await this.command(...args);
|
|
157
|
+
return await this.sendCommand({ action: 'tab_close', index });
|
|
194
158
|
}
|
|
195
159
|
async listTabs() {
|
|
196
|
-
|
|
160
|
+
const res = await this.sendCommand({ action: 'tab_list' }, true);
|
|
161
|
+
return res.tabs;
|
|
197
162
|
}
|
|
198
163
|
// --- Generic Execution ---
|
|
199
164
|
/**
|
|
200
165
|
* Execute an arbitrary agent command CLI-style.
|
|
201
|
-
*
|
|
166
|
+
* e.g. agent.command('open', 'https://google.com')
|
|
167
|
+
* This legacy method parses string args into a JSON command.
|
|
168
|
+
*/
|
|
169
|
+
async command(action, ...args) {
|
|
170
|
+
// Map legacy CLI args to JSON command object manually for common cases
|
|
171
|
+
// Or simpler: We can keep the CLI wrapper logic if we want, OR
|
|
172
|
+
// we can try to construct the object.
|
|
173
|
+
// For robustness, let's map the most common ones.
|
|
174
|
+
const cmd = { action };
|
|
175
|
+
if (action === 'open' || action === 'navigate') {
|
|
176
|
+
cmd.action = 'navigate';
|
|
177
|
+
cmd.url = args[0];
|
|
178
|
+
}
|
|
179
|
+
else if (action === 'click') {
|
|
180
|
+
cmd.selector = args[0];
|
|
181
|
+
}
|
|
182
|
+
else if (action === 'type') {
|
|
183
|
+
cmd.selector = args[0];
|
|
184
|
+
cmd.text = args[1];
|
|
185
|
+
}
|
|
186
|
+
else if (action === 'press') {
|
|
187
|
+
cmd.key = args[0];
|
|
188
|
+
}
|
|
189
|
+
else if (action === 'scroll') {
|
|
190
|
+
cmd.x = parseInt(args[0] || '0');
|
|
191
|
+
cmd.y = parseInt(args[1] || '0');
|
|
192
|
+
}
|
|
193
|
+
else if (action === 'wait') {
|
|
194
|
+
// heuristic for selector vs number
|
|
195
|
+
if (/^\d+$/.test(args[0]))
|
|
196
|
+
cmd.timeout = parseInt(args[0]);
|
|
197
|
+
else
|
|
198
|
+
cmd.selector = args[0];
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
// Fallback for unknown commands: pass args as properties if we can guess?
|
|
202
|
+
// Actually, for arbitrary commands, it's safer to rely on specific methods.
|
|
203
|
+
// But for CLI usage, we might just pass the first arg as 'selector' or 'url' depending on action name.
|
|
204
|
+
if (args[0])
|
|
205
|
+
cmd.selector = args[0];
|
|
206
|
+
if (args[1])
|
|
207
|
+
cmd.text = args[1] || args[1]; // value/text
|
|
208
|
+
}
|
|
209
|
+
const res = await this.sendCommand(cmd, true);
|
|
210
|
+
// For CLI output, we want a string representation
|
|
211
|
+
if (typeof res === 'object') {
|
|
212
|
+
// If it has specific fields like 'text', 'url', return those
|
|
213
|
+
if (res.text)
|
|
214
|
+
return res.text;
|
|
215
|
+
if (res.url)
|
|
216
|
+
return res.url;
|
|
217
|
+
if (res.snapshot)
|
|
218
|
+
return res.snapshot;
|
|
219
|
+
return JSON.stringify(res);
|
|
220
|
+
}
|
|
221
|
+
return String(res);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Send a raw JSON command to the daemon via TCP.
|
|
225
|
+
* @param command The command object (must include 'action')
|
|
226
|
+
* @param returnData If true, return the 'data' object. If false, return a success message.
|
|
202
227
|
*/
|
|
203
|
-
|
|
204
|
-
return
|
|
228
|
+
sendCommand(command, returnData = false) {
|
|
229
|
+
return new Promise((resolve, reject) => {
|
|
230
|
+
// Ensure ID exists
|
|
231
|
+
if (!command.id)
|
|
232
|
+
command.id = randomUUID();
|
|
233
|
+
const client = new net.Socket();
|
|
234
|
+
// Connect to localhost:3000
|
|
235
|
+
client.connect(DAEMON_PORT, '127.0.0.1', () => {
|
|
236
|
+
client.write(JSON.stringify(command) + '\n');
|
|
237
|
+
});
|
|
238
|
+
let responseBuffer = '';
|
|
239
|
+
client.on('data', (data) => {
|
|
240
|
+
responseBuffer += data.toString();
|
|
241
|
+
// Check for newline (end of response)
|
|
242
|
+
if (responseBuffer.includes('\n')) {
|
|
243
|
+
client.end();
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
client.on('end', () => {
|
|
247
|
+
try {
|
|
248
|
+
const response = JSON.parse(responseBuffer.trim());
|
|
249
|
+
if (response.success) {
|
|
250
|
+
resolve(returnData ? response.data : 'OK');
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
reject(new Error(response.error || 'Unknown error'));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch (e) {
|
|
257
|
+
reject(new Error(`Invalid response from daemon: ${responseBuffer}`));
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
client.on('error', (err) => {
|
|
261
|
+
reject(new Error(`Failed to connect to agent daemon (is it running?): ${err.message}`));
|
|
262
|
+
});
|
|
263
|
+
});
|
|
205
264
|
}
|
|
206
|
-
|
|
265
|
+
/**
|
|
266
|
+
* Run a shell script (for start/stop/reset infrastructure)
|
|
267
|
+
*/
|
|
268
|
+
runSdkScript(args) {
|
|
207
269
|
return new Promise((resolve, reject) => {
|
|
270
|
+
console.log(`[WootzAgent] Running: sdk.sh ${args.join(' ')}`);
|
|
208
271
|
const child = spawn(SDK_SCRIPT, args, {
|
|
209
|
-
stdio: ['inherit', 'pipe', 'inherit'],
|
|
272
|
+
stdio: ['inherit', 'pipe', 'inherit'],
|
|
210
273
|
shell: true,
|
|
211
274
|
});
|
|
212
|
-
let output = '';
|
|
213
275
|
child.stdout?.on('data', (data) => {
|
|
214
|
-
|
|
215
|
-
output += str;
|
|
216
|
-
// Stream output to terminal for observability
|
|
217
|
-
process.stdout.write(str);
|
|
276
|
+
process.stdout.write(data);
|
|
218
277
|
});
|
|
219
278
|
child.on('error', (err) => {
|
|
220
279
|
reject(new Error(`Failed to start SDK script: ${err.message}`));
|
|
221
280
|
});
|
|
222
281
|
child.on('close', (code) => {
|
|
223
282
|
if (code === 0) {
|
|
224
|
-
resolve(
|
|
283
|
+
resolve();
|
|
225
284
|
}
|
|
226
285
|
else {
|
|
227
286
|
reject(new Error(`SDK script exited with code ${code}`));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|