@tangle-network/browser-agent-driver 0.6.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 (208) hide show
  1. package/LICENSE +196 -0
  2. package/README.md +149 -0
  3. package/dist/artifacts/composite-sink.d.ts +15 -0
  4. package/dist/artifacts/composite-sink.d.ts.map +1 -0
  5. package/dist/artifacts/composite-sink.js +27 -0
  6. package/dist/artifacts/composite-sink.js.map +1 -0
  7. package/dist/artifacts/filesystem-sink.d.ts +26 -0
  8. package/dist/artifacts/filesystem-sink.d.ts.map +1 -0
  9. package/dist/artifacts/filesystem-sink.js +81 -0
  10. package/dist/artifacts/filesystem-sink.js.map +1 -0
  11. package/dist/artifacts/types.d.ts +97 -0
  12. package/dist/artifacts/types.d.ts.map +1 -0
  13. package/dist/artifacts/types.js +9 -0
  14. package/dist/artifacts/types.js.map +1 -0
  15. package/dist/artifacts/webhook-sink.d.ts +71 -0
  16. package/dist/artifacts/webhook-sink.d.ts.map +1 -0
  17. package/dist/artifacts/webhook-sink.js +117 -0
  18. package/dist/artifacts/webhook-sink.js.map +1 -0
  19. package/dist/brain/index.d.ts +149 -0
  20. package/dist/brain/index.d.ts.map +1 -0
  21. package/dist/brain/index.js +1030 -0
  22. package/dist/brain/index.js.map +1 -0
  23. package/dist/browser-launch.d.ts +27 -0
  24. package/dist/browser-launch.d.ts.map +1 -0
  25. package/dist/browser-launch.js +92 -0
  26. package/dist/browser-launch.js.map +1 -0
  27. package/dist/cli.d.ts +14 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +1035 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/config.d.ts +143 -0
  32. package/dist/config.d.ts.map +1 -0
  33. package/dist/config.js +205 -0
  34. package/dist/config.js.map +1 -0
  35. package/dist/context-budget.d.ts +14 -0
  36. package/dist/context-budget.d.ts.map +1 -0
  37. package/dist/context-budget.js +39 -0
  38. package/dist/context-budget.js.map +1 -0
  39. package/dist/design-audit.d.ts +48 -0
  40. package/dist/design-audit.d.ts.map +1 -0
  41. package/dist/design-audit.js +172 -0
  42. package/dist/design-audit.js.map +1 -0
  43. package/dist/domain-policy.d.ts +4 -0
  44. package/dist/domain-policy.d.ts.map +1 -0
  45. package/dist/domain-policy.js +69 -0
  46. package/dist/domain-policy.js.map +1 -0
  47. package/dist/drivers/block-patterns.d.ts +11 -0
  48. package/dist/drivers/block-patterns.d.ts.map +1 -0
  49. package/dist/drivers/block-patterns.js +123 -0
  50. package/dist/drivers/block-patterns.js.map +1 -0
  51. package/dist/drivers/cdp-page-state.d.ts +22 -0
  52. package/dist/drivers/cdp-page-state.d.ts.map +1 -0
  53. package/dist/drivers/cdp-page-state.js +38 -0
  54. package/dist/drivers/cdp-page-state.js.map +1 -0
  55. package/dist/drivers/cdp-snapshot.d.ts +32 -0
  56. package/dist/drivers/cdp-snapshot.d.ts.map +1 -0
  57. package/dist/drivers/cdp-snapshot.js +120 -0
  58. package/dist/drivers/cdp-snapshot.js.map +1 -0
  59. package/dist/drivers/playwright.d.ts +84 -0
  60. package/dist/drivers/playwright.d.ts.map +1 -0
  61. package/dist/drivers/playwright.js +385 -0
  62. package/dist/drivers/playwright.js.map +1 -0
  63. package/dist/drivers/snapshot.d.ts +134 -0
  64. package/dist/drivers/snapshot.d.ts.map +1 -0
  65. package/dist/drivers/snapshot.js +354 -0
  66. package/dist/drivers/snapshot.js.map +1 -0
  67. package/dist/drivers/types.d.ts +37 -0
  68. package/dist/drivers/types.d.ts.map +1 -0
  69. package/dist/drivers/types.js +5 -0
  70. package/dist/drivers/types.js.map +1 -0
  71. package/dist/env-loader.d.ts +2 -0
  72. package/dist/env-loader.d.ts.map +1 -0
  73. package/dist/env-loader.js +35 -0
  74. package/dist/env-loader.js.map +1 -0
  75. package/dist/formatters/slack.d.ts +37 -0
  76. package/dist/formatters/slack.d.ts.map +1 -0
  77. package/dist/formatters/slack.js +97 -0
  78. package/dist/formatters/slack.js.map +1 -0
  79. package/dist/index.d.ts +60 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +53 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/memory/analyzer.d.ts +67 -0
  84. package/dist/memory/analyzer.d.ts.map +1 -0
  85. package/dist/memory/analyzer.js +265 -0
  86. package/dist/memory/analyzer.js.map +1 -0
  87. package/dist/memory/knowledge.d.ts +55 -0
  88. package/dist/memory/knowledge.d.ts.map +1 -0
  89. package/dist/memory/knowledge.js +115 -0
  90. package/dist/memory/knowledge.js.map +1 -0
  91. package/dist/memory/project-store.d.ts +43 -0
  92. package/dist/memory/project-store.d.ts.map +1 -0
  93. package/dist/memory/project-store.js +119 -0
  94. package/dist/memory/project-store.js.map +1 -0
  95. package/dist/memory/selectors.d.ts +46 -0
  96. package/dist/memory/selectors.d.ts.map +1 -0
  97. package/dist/memory/selectors.js +89 -0
  98. package/dist/memory/selectors.js.map +1 -0
  99. package/dist/memory/store.d.ts +39 -0
  100. package/dist/memory/store.d.ts.map +1 -0
  101. package/dist/memory/store.js +193 -0
  102. package/dist/memory/store.js.map +1 -0
  103. package/dist/model-pricing.d.ts +41 -0
  104. package/dist/model-pricing.d.ts.map +1 -0
  105. package/dist/model-pricing.js +197 -0
  106. package/dist/model-pricing.js.map +1 -0
  107. package/dist/multi-actor.d.ts +108 -0
  108. package/dist/multi-actor.d.ts.map +1 -0
  109. package/dist/multi-actor.js +192 -0
  110. package/dist/multi-actor.js.map +1 -0
  111. package/dist/override-pipeline.d.ts +57 -0
  112. package/dist/override-pipeline.d.ts.map +1 -0
  113. package/dist/override-pipeline.js +26 -0
  114. package/dist/override-pipeline.js.map +1 -0
  115. package/dist/personas.d.ts +19 -0
  116. package/dist/personas.d.ts.map +1 -0
  117. package/dist/personas.js +86 -0
  118. package/dist/personas.js.map +1 -0
  119. package/dist/preview.d.ts +32 -0
  120. package/dist/preview.d.ts.map +1 -0
  121. package/dist/preview.js +138 -0
  122. package/dist/preview.js.map +1 -0
  123. package/dist/provider-defaults.d.ts +6 -0
  124. package/dist/provider-defaults.d.ts.map +1 -0
  125. package/dist/provider-defaults.js +40 -0
  126. package/dist/provider-defaults.js.map +1 -0
  127. package/dist/providers/sandbox-backend.d.ts +22 -0
  128. package/dist/providers/sandbox-backend.d.ts.map +1 -0
  129. package/dist/providers/sandbox-backend.js +259 -0
  130. package/dist/providers/sandbox-backend.js.map +1 -0
  131. package/dist/recovery.d.ts +91 -0
  132. package/dist/recovery.d.ts.map +1 -0
  133. package/dist/recovery.js +500 -0
  134. package/dist/recovery.js.map +1 -0
  135. package/dist/reporters/junit.d.ts +8 -0
  136. package/dist/reporters/junit.d.ts.map +1 -0
  137. package/dist/reporters/junit.js +99 -0
  138. package/dist/reporters/junit.js.map +1 -0
  139. package/dist/run-metrics.d.ts +4 -0
  140. package/dist/run-metrics.d.ts.map +1 -0
  141. package/dist/run-metrics.js +48 -0
  142. package/dist/run-metrics.js.map +1 -0
  143. package/dist/run-state.d.ts +22 -0
  144. package/dist/run-state.d.ts.map +1 -0
  145. package/dist/run-state.js +33 -0
  146. package/dist/run-state.js.map +1 -0
  147. package/dist/runner/goal-verification.d.ts +13 -0
  148. package/dist/runner/goal-verification.d.ts.map +1 -0
  149. package/dist/runner/goal-verification.js +152 -0
  150. package/dist/runner/goal-verification.js.map +1 -0
  151. package/dist/runner/index.d.ts +12 -0
  152. package/dist/runner/index.d.ts.map +1 -0
  153. package/dist/runner/index.js +18 -0
  154. package/dist/runner/index.js.map +1 -0
  155. package/dist/runner/overrides.d.ts +75 -0
  156. package/dist/runner/overrides.d.ts.map +1 -0
  157. package/dist/runner/overrides.js +385 -0
  158. package/dist/runner/overrides.js.map +1 -0
  159. package/dist/runner/page-analysis.d.ts +23 -0
  160. package/dist/runner/page-analysis.d.ts.map +1 -0
  161. package/dist/runner/page-analysis.js +91 -0
  162. package/dist/runner/page-analysis.js.map +1 -0
  163. package/dist/runner/runner.d.ts +66 -0
  164. package/dist/runner/runner.d.ts.map +1 -0
  165. package/dist/runner/runner.js +1314 -0
  166. package/dist/runner/runner.js.map +1 -0
  167. package/dist/runner/scout.d.ts +29 -0
  168. package/dist/runner/scout.d.ts.map +1 -0
  169. package/dist/runner/scout.js +81 -0
  170. package/dist/runner/scout.js.map +1 -0
  171. package/dist/runner/search-guidance.d.ts +31 -0
  172. package/dist/runner/search-guidance.d.ts.map +1 -0
  173. package/dist/runner/search-guidance.js +210 -0
  174. package/dist/runner/search-guidance.js.map +1 -0
  175. package/dist/runner/utils.d.ts +28 -0
  176. package/dist/runner/utils.d.ts.map +1 -0
  177. package/dist/runner/utils.js +119 -0
  178. package/dist/runner/utils.js.map +1 -0
  179. package/dist/runner.d.ts +8 -0
  180. package/dist/runner.d.ts.map +1 -0
  181. package/dist/runner.js +21 -0
  182. package/dist/runner.js.map +1 -0
  183. package/dist/supervisor/critic.d.ts +29 -0
  184. package/dist/supervisor/critic.d.ts.map +1 -0
  185. package/dist/supervisor/critic.js +320 -0
  186. package/dist/supervisor/critic.js.map +1 -0
  187. package/dist/supervisor/policy.d.ts +11 -0
  188. package/dist/supervisor/policy.d.ts.map +1 -0
  189. package/dist/supervisor/policy.js +118 -0
  190. package/dist/supervisor/policy.js.map +1 -0
  191. package/dist/test-report.d.ts +15 -0
  192. package/dist/test-report.d.ts.map +1 -0
  193. package/dist/test-report.js +241 -0
  194. package/dist/test-report.js.map +1 -0
  195. package/dist/test-runner.d.ts +99 -0
  196. package/dist/test-runner.d.ts.map +1 -0
  197. package/dist/test-runner.js +1075 -0
  198. package/dist/test-runner.js.map +1 -0
  199. package/dist/types.d.ts +493 -0
  200. package/dist/types.d.ts.map +1 -0
  201. package/dist/types.js +5 -0
  202. package/dist/types.js.map +1 -0
  203. package/dist/wallet/automation.d.ts +52 -0
  204. package/dist/wallet/automation.d.ts.map +1 -0
  205. package/dist/wallet/automation.js +507 -0
  206. package/dist/wallet/automation.js.map +1 -0
  207. package/package.json +101 -0
  208. package/scripts/postinstall-provider-patches.mjs +52 -0
@@ -0,0 +1,22 @@
1
+ import type { ModelMessage } from 'ai';
2
+ export interface SandboxBackendPromptOptions {
3
+ sidecarUrl?: string;
4
+ authToken?: string;
5
+ backendType?: string;
6
+ /** Named sandbox profile/preset identifier */
7
+ backendProfile?: string;
8
+ /** @deprecated Legacy alias for backendProfile */
9
+ backendProfileId?: string;
10
+ backendModelProvider?: string;
11
+ model: string;
12
+ system?: string;
13
+ messages: ModelMessage[];
14
+ timeoutMs?: number;
15
+ debug?: boolean;
16
+ }
17
+ export interface SandboxBackendPromptResult {
18
+ text: string;
19
+ warnings: string[];
20
+ }
21
+ export declare function generateWithSandboxBackend(options: SandboxBackendPromptOptions): Promise<SandboxBackendPromptResult>;
22
+ //# sourceMappingURL=sandbox-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-backend.d.ts","sourceRoot":"","sources":["../../src/providers/sandbox-backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAiCvC,MAAM,WAAW,2BAA2B;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAqND,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,0BAA0B,CAAC,CA6ErC"}
@@ -0,0 +1,259 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ function normalizeSidecarUrl(input) {
3
+ const envUrl = process.env.SANDBOX_SIDECAR_URL || process.env.SIDECAR_URL;
4
+ const raw = input?.trim() || envUrl?.trim() || `http://127.0.0.1:${process.env.SIDECAR_PORT || '8080'}`;
5
+ return raw.replace(/\/$/, '');
6
+ }
7
+ function resolveAuthToken(input) {
8
+ if (input?.trim())
9
+ return input.trim();
10
+ if (process.env.SANDBOX_SIDECAR_AUTH_TOKEN?.trim())
11
+ return process.env.SANDBOX_SIDECAR_AUTH_TOKEN.trim();
12
+ if (process.env.SIDECAR_AUTH_TOKEN?.trim())
13
+ return process.env.SIDECAR_AUTH_TOKEN.trim();
14
+ const tokens = (process.env.SIDECAR_AUTH_TOKENS || '')
15
+ .split(/[,\s]+/g)
16
+ .map((value) => value.trim())
17
+ .filter(Boolean);
18
+ return tokens[0];
19
+ }
20
+ function resolveBackendType(model, explicitType) {
21
+ const candidate = explicitType?.trim() || process.env.SANDBOX_BACKEND_TYPE?.trim();
22
+ if (candidate)
23
+ return candidate;
24
+ if (/^(claude|sonnet|opus|haiku)([-: ]|$)/i.test(model))
25
+ return 'claude-code';
26
+ if (/^(gpt|o[134]|codex)([-: ]|$)/i.test(model))
27
+ return 'codex';
28
+ throw new Error('sandbox-backend requires SANDBOX_BACKEND_TYPE or --sandbox-backend-type when the backend cannot be inferred from the model.');
29
+ }
30
+ function buildHeaders(authToken) {
31
+ return {
32
+ 'Content-Type': 'application/json',
33
+ Accept: 'application/json',
34
+ ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),
35
+ };
36
+ }
37
+ function modelMessageToText(message) {
38
+ if (typeof message.content === 'string')
39
+ return message.content;
40
+ if (!Array.isArray(message.content))
41
+ return '';
42
+ return message.content
43
+ .map((part) => {
44
+ if (part.type === 'text')
45
+ return part.text;
46
+ if (part.type === 'image')
47
+ return `[Image attachment: ${part.mediaType}]`;
48
+ return '';
49
+ })
50
+ .filter(Boolean)
51
+ .join('\n');
52
+ }
53
+ function buildTranscript(messages) {
54
+ const lines = [];
55
+ for (const message of messages) {
56
+ const content = modelMessageToText(message).trim();
57
+ if (!content)
58
+ continue;
59
+ lines.push(`${message.role.toUpperCase()}:`);
60
+ lines.push(content);
61
+ lines.push('');
62
+ }
63
+ return lines.join('\n').trim();
64
+ }
65
+ function getLatestUserAttachments(messages) {
66
+ const latestUser = [...messages].reverse().find((message) => message.role === 'user');
67
+ if (!latestUser || !Array.isArray(latestUser.content))
68
+ return [];
69
+ const attachments = [];
70
+ let imageIndex = 0;
71
+ for (const part of latestUser.content) {
72
+ if (part.type !== 'image' || !part.image)
73
+ continue;
74
+ imageIndex += 1;
75
+ const mediaType = part.mediaType || 'image/jpeg';
76
+ const imageValue = typeof part.image === 'string'
77
+ ? part.image
78
+ : part.image instanceof URL
79
+ ? part.image.toString()
80
+ : null;
81
+ if (!imageValue)
82
+ continue;
83
+ const url = imageValue.startsWith('data:')
84
+ ? imageValue
85
+ : `data:${mediaType};base64,${imageValue}`;
86
+ const ext = mediaType.includes('png') ? 'png' : 'jpg';
87
+ attachments.push({
88
+ type: 'file',
89
+ filename: `browser-screenshot-${imageIndex}.${ext}`,
90
+ mediaType,
91
+ url,
92
+ });
93
+ }
94
+ return attachments;
95
+ }
96
+ async function requestJson(sidecarUrl, path, init) {
97
+ const response = await fetch(`${sidecarUrl}${path}`, init);
98
+ const text = await response.text();
99
+ if (!response.ok) {
100
+ throw new Error(text || `${response.status} ${response.statusText}`);
101
+ }
102
+ return text ? JSON.parse(text) : {};
103
+ }
104
+ async function collectAssistantText(sidecarUrl, authToken, sessionId, assistantMessageId, timeoutMs, debug) {
105
+ const response = await fetch(`${sidecarUrl}/agents/events?sessionId=${encodeURIComponent(sessionId)}`, {
106
+ method: 'GET',
107
+ headers: {
108
+ Accept: 'text/event-stream',
109
+ ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),
110
+ },
111
+ signal: AbortSignal.timeout(timeoutMs),
112
+ });
113
+ if (!response.ok || !response.body) {
114
+ throw new Error(`Failed to open sidecar event stream: ${response.status} ${response.statusText}`);
115
+ }
116
+ const reader = response.body.getReader();
117
+ const decoder = new TextDecoder();
118
+ let buffer = '';
119
+ let text = '';
120
+ let errorMessage;
121
+ const warnings = [];
122
+ const handleEvent = (rawData) => {
123
+ const event = JSON.parse(rawData);
124
+ if (debug) {
125
+ console.log('[sandbox-backend:event]', JSON.stringify(event));
126
+ }
127
+ if (event.type === 'warning') {
128
+ const message = typeof event.properties?.message === 'string' ? event.properties.message : '';
129
+ if (message)
130
+ warnings.push(message);
131
+ return;
132
+ }
133
+ if (event.type === 'session.error') {
134
+ errorMessage = event.properties?.error?.message || 'Sidecar backend session failed';
135
+ return;
136
+ }
137
+ if (event.type === 'message.part.updated') {
138
+ const part = event.properties?.part;
139
+ const messageId = typeof part?.messageID === 'string' ? part.messageID : undefined;
140
+ if (assistantMessageId && messageId && messageId !== assistantMessageId) {
141
+ return;
142
+ }
143
+ const delta = typeof event.properties?.delta === 'string' ? event.properties.delta : undefined;
144
+ if (delta) {
145
+ text += delta;
146
+ return;
147
+ }
148
+ if (part?.type === 'text' && typeof part.text === 'string') {
149
+ text = part.text;
150
+ }
151
+ return;
152
+ }
153
+ if (event.type === 'raw') {
154
+ const rawEvent = event.properties?.event;
155
+ const rawItem = rawEvent?.item;
156
+ if (rawEvent?.type === 'item.completed' && rawItem?.type === 'agent_message' && typeof rawItem.text === 'string') {
157
+ text = rawItem.text;
158
+ }
159
+ return;
160
+ }
161
+ if (event.type === 'message.complete' || event.type === 'session.idle' || event.type === 'done') {
162
+ throw new Error('__SANDBOX_DONE__');
163
+ }
164
+ };
165
+ try {
166
+ while (true) {
167
+ const { value, done } = await reader.read();
168
+ if (done)
169
+ break;
170
+ buffer += decoder.decode(value, { stream: true });
171
+ while (true) {
172
+ const boundary = buffer.indexOf('\n\n');
173
+ if (boundary === -1)
174
+ break;
175
+ const chunk = buffer.slice(0, boundary);
176
+ buffer = buffer.slice(boundary + 2);
177
+ const dataLines = chunk
178
+ .split('\n')
179
+ .filter((line) => line.startsWith('data:'))
180
+ .map((line) => line.slice(5).trimStart());
181
+ if (dataLines.length === 0)
182
+ continue;
183
+ handleEvent(dataLines.join('\n'));
184
+ }
185
+ }
186
+ }
187
+ catch (error) {
188
+ if (!(error instanceof Error && error.message === '__SANDBOX_DONE__')) {
189
+ throw error;
190
+ }
191
+ }
192
+ finally {
193
+ try {
194
+ await reader.cancel();
195
+ }
196
+ catch { }
197
+ }
198
+ if (errorMessage) {
199
+ throw new Error(errorMessage);
200
+ }
201
+ return { text: text.trim(), warnings };
202
+ }
203
+ export async function generateWithSandboxBackend(options) {
204
+ const timeoutMs = options.timeoutMs ?? 60_000;
205
+ const sidecarUrl = normalizeSidecarUrl(options.sidecarUrl);
206
+ const authToken = resolveAuthToken(options.authToken);
207
+ const backendType = resolveBackendType(options.model, options.backendType);
208
+ const backendProfile = options.backendProfile?.trim() ||
209
+ options.backendProfileId?.trim() ||
210
+ process.env.SANDBOX_BACKEND_PROFILE?.trim() ||
211
+ process.env.SANDBOX_BACKEND_PROFILE_ID?.trim();
212
+ const backendModelProvider = options.backendModelProvider?.trim() || process.env.SANDBOX_BACKEND_MODEL_PROVIDER?.trim();
213
+ const session = await requestJson(sidecarUrl, '/agents/sessions', {
214
+ method: 'POST',
215
+ headers: buildHeaders(authToken),
216
+ body: JSON.stringify({
217
+ title: `abd-${randomUUID()}`,
218
+ backend: {
219
+ type: backendType,
220
+ ...(backendProfile ? { profile: backendProfile } : {}),
221
+ model: {
222
+ model: options.model,
223
+ ...(backendModelProvider ? { provider: backendModelProvider } : {}),
224
+ },
225
+ },
226
+ }),
227
+ signal: AbortSignal.timeout(timeoutMs),
228
+ });
229
+ try {
230
+ const transcript = buildTranscript(options.messages);
231
+ const parts = [
232
+ {
233
+ type: 'text',
234
+ text: transcript,
235
+ },
236
+ ...getLatestUserAttachments(options.messages),
237
+ ];
238
+ const started = await requestJson(sidecarUrl, `/agents/sessions/${encodeURIComponent(session.id)}/messages`, {
239
+ method: 'POST',
240
+ headers: buildHeaders(authToken),
241
+ body: JSON.stringify({
242
+ system: options.system,
243
+ parts,
244
+ }),
245
+ signal: AbortSignal.timeout(timeoutMs),
246
+ });
247
+ return await collectAssistantText(sidecarUrl, authToken, session.id, started.info?.id, timeoutMs, options.debug === true);
248
+ }
249
+ finally {
250
+ await fetch(`${sidecarUrl}/agents/sessions/${encodeURIComponent(session.id)}`, {
251
+ method: 'DELETE',
252
+ headers: {
253
+ Accept: 'application/json',
254
+ ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),
255
+ },
256
+ }).catch(() => { });
257
+ }
258
+ }
259
+ //# sourceMappingURL=sandbox-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-backend.js","sourceRoot":"","sources":["../../src/providers/sandbox-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Recovery strategies for common failure modes.
3
+ *
4
+ * Automatically triggered by the Runner when it detects patterns like:
5
+ * - Stuck (same URL + snapshot for multiple turns)
6
+ * - Consecutive selector failures
7
+ * - Loading states
8
+ * - Blocking overlays
9
+ */
10
+ import type { Action, PageState, Turn } from './types.js';
11
+ export interface RecoveryContext {
12
+ /** Recent turns for pattern analysis */
13
+ recentTurns: Turn[];
14
+ /** Current page state */
15
+ currentState: PageState;
16
+ /** Number of consecutive errors */
17
+ consecutiveErrors: number;
18
+ }
19
+ export interface RecoveryAction {
20
+ /** What strategy was triggered */
21
+ strategy: string;
22
+ /** Feedback to inject into the brain's conversation */
23
+ feedback: string;
24
+ /** Milliseconds to wait before continuing */
25
+ waitMs?: number;
26
+ /** Concrete action for the runner to execute before continuing */
27
+ forceAction?: 'reload' | 'escape' | 'scrollTop';
28
+ /** Optional direct browser action to execute before continuing */
29
+ forceBrowserAction?: Action;
30
+ }
31
+ export interface SnapshotElement {
32
+ role: string;
33
+ name: string;
34
+ ref: string;
35
+ }
36
+ /**
37
+ * Compute a simple hash of a snapshot string for change detection.
38
+ * Uses a fast DJB2-like hash — not cryptographic, just for equality checks.
39
+ */
40
+ export declare function snapshotHash(snapshot: string): number;
41
+ /**
42
+ * Detect if the agent is stuck (same URL + similar snapshot for N turns).
43
+ */
44
+ export declare function detectStuck(turns: Turn[], threshold?: number): boolean;
45
+ /**
46
+ * Detect consecutive action failures (selector not found, click intercepted, etc.)
47
+ */
48
+ export declare function detectSelectorFailures(turns: Turn[], threshold?: number): boolean;
49
+ /**
50
+ * Detect loading states in the snapshot.
51
+ * Patterns are anchored to avoid false-positives on words like "downloading" or
52
+ * "loading" appearing in regular page content (e.g., "Loading dock", "Processing fees").
53
+ */
54
+ export declare function detectLoadingState(snapshot: string): boolean;
55
+ /** Parse interactive elements from a snapshot into role/name/ref triples. */
56
+ export declare function parseSnapshotElements(snapshot: string): SnapshotElement[];
57
+ export interface BlockingModalDetection {
58
+ kind: 'quota-limit' | 'blocking-modal' | 'verification-override';
59
+ strategy: string;
60
+ feedback: string;
61
+ action?: Action;
62
+ forceAction?: 'escape';
63
+ }
64
+ export interface TerminalBlockerDetection {
65
+ kind: 'network-unreachable' | 'bot-challenge' | 'dev-environment-unavailable';
66
+ strategy: 'terminal-network-error' | 'terminal-bot-challenge' | 'terminal-dev-environment-unavailable';
67
+ reason: string;
68
+ evidence: string[];
69
+ }
70
+ /**
71
+ * Detect blocking dialogs/modals and suggest an immediate remediation action.
72
+ * This is intentionally deterministic so common blockers are handled without
73
+ * waiting for the LLM to rediscover basic escape hatches every run.
74
+ */
75
+ export declare function detectBlockingModal(snapshot: string): BlockingModalDetection | null;
76
+ /**
77
+ * Detect blockers that should terminate the run immediately.
78
+ * These are conditions the agent cannot reliably resolve by trying more actions.
79
+ */
80
+ export declare function detectTerminalBlocker(state: PageState): TerminalBlockerDetection | null;
81
+ /**
82
+ * Detect persistent app-native environment blockers that are unlikely to be fixed
83
+ * by more navigation attempts inside the same run.
84
+ */
85
+ export declare function detectPersistentTerminalBlocker(recentTurns: Turn[], currentState: PageState): TerminalBlockerDetection | null;
86
+ /**
87
+ * Analyze the current state and return a recovery action if needed.
88
+ * Returns null if no recovery is warranted.
89
+ */
90
+ export declare function analyzeRecovery(ctx: RecoveryContext): RecoveryAction | null;
91
+ //# sourceMappingURL=recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,WAAW,EAAE,IAAI,EAAE,CAAC;IACpB,yBAAyB;IACzB,YAAY,EAAE,SAAS,CAAC;IACxB,mCAAmC;IACnC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IAChD,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,SAAI,GAAG,OAAO,CAyCjE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,SAAI,GAAG,OAAO,CAI5E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAW5D;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAYzE;AA2BD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,aAAa,GAAG,gBAAgB,GAAG,uBAAuB,CAAC;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,QAAQ,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,qBAAqB,GAAG,eAAe,GAAG,6BAA6B,CAAC;IAC9E,QAAQ,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,sCAAsC,CAAC;IACvG,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CA4MnF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,GAAG,wBAAwB,GAAG,IAAI,CAkDvF;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,IAAI,EAAE,EACnB,YAAY,EAAE,SAAS,GACtB,wBAAwB,GAAG,IAAI,CA0CjC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,cAAc,GAAG,IAAI,CAuG3E"}