@nuanu-ai/agentbrowse 0.2.47 → 0.2.49

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 (198) hide show
  1. package/README.md +81 -10
  2. package/dist/agentpay-gateway.d.ts +9 -0
  3. package/dist/agentpay-gateway.d.ts.map +1 -1
  4. package/dist/agentpay-gateway.js +31 -1
  5. package/dist/agentpay-stagehand-llm.d.ts.map +1 -1
  6. package/dist/agentpay-stagehand-llm.js +9 -1
  7. package/dist/command-api-tracing.d.ts +19 -0
  8. package/dist/command-api-tracing.d.ts.map +1 -0
  9. package/dist/command-api-tracing.js +137 -0
  10. package/dist/commands/act.d.ts.map +1 -1
  11. package/dist/commands/act.js +822 -670
  12. package/dist/commands/act.test-harness.d.ts +6 -0
  13. package/dist/commands/act.test-harness.d.ts.map +1 -1
  14. package/dist/commands/act.test-harness.js +44 -1
  15. package/dist/commands/action-acceptance.d.ts.map +1 -1
  16. package/dist/commands/action-acceptance.js +115 -0
  17. package/dist/commands/captcha-solve.d.ts.map +1 -1
  18. package/dist/commands/captcha-solve.js +83 -16
  19. package/dist/commands/click-action-executor.d.ts +0 -1
  20. package/dist/commands/click-action-executor.d.ts.map +1 -1
  21. package/dist/commands/click-action-executor.js +31 -77
  22. package/dist/commands/close.d.ts +3 -3
  23. package/dist/commands/close.d.ts.map +1 -1
  24. package/dist/commands/close.js +178 -0
  25. package/dist/commands/descriptor-validation.d.ts.map +1 -1
  26. package/dist/commands/descriptor-validation.js +75 -57
  27. package/dist/commands/end-session.d.ts +25 -0
  28. package/dist/commands/end-session.d.ts.map +1 -0
  29. package/dist/commands/end-session.js +161 -0
  30. package/dist/commands/extract-stagehand-executor.js +1 -1
  31. package/dist/commands/extract.d.ts.map +1 -1
  32. package/dist/commands/extract.js +339 -202
  33. package/dist/commands/fill-secret.d.ts +3 -3
  34. package/dist/commands/fill-secret.d.ts.map +1 -1
  35. package/dist/commands/fill-secret.js +419 -234
  36. package/dist/commands/get-secrets-catalog.d.ts.map +1 -1
  37. package/dist/commands/get-secrets-catalog.js +66 -5
  38. package/dist/commands/init.d.ts.map +1 -1
  39. package/dist/commands/init.js +6 -3
  40. package/dist/commands/interaction-kernel.d.ts +46 -0
  41. package/dist/commands/interaction-kernel.d.ts.map +1 -0
  42. package/dist/commands/interaction-kernel.js +215 -0
  43. package/dist/commands/launch.d.ts +1 -3
  44. package/dist/commands/launch.d.ts.map +1 -1
  45. package/dist/commands/launch.js +115 -27
  46. package/dist/commands/navigate.d.ts.map +1 -1
  47. package/dist/commands/navigate.js +188 -45
  48. package/dist/commands/observe-accessibility.d.ts.map +1 -1
  49. package/dist/commands/observe-accessibility.js +46 -39
  50. package/dist/commands/observe-dom-label-contract.d.ts.map +1 -1
  51. package/dist/commands/observe-dom-label-contract.js +5 -0
  52. package/dist/commands/observe-inventory.d.ts +13 -0
  53. package/dist/commands/observe-inventory.d.ts.map +1 -1
  54. package/dist/commands/observe-inventory.js +320 -65
  55. package/dist/commands/observe-persistence.d.ts.map +1 -1
  56. package/dist/commands/observe-persistence.js +3 -0
  57. package/dist/commands/observe-projection.d.ts +1 -0
  58. package/dist/commands/observe-projection.d.ts.map +1 -1
  59. package/dist/commands/observe-projection.js +7 -2
  60. package/dist/commands/observe-protected.d.ts +1 -0
  61. package/dist/commands/observe-protected.d.ts.map +1 -1
  62. package/dist/commands/observe-protected.js +9 -4
  63. package/dist/commands/observe-semantics.d.ts.map +1 -1
  64. package/dist/commands/observe-semantics.js +5 -2
  65. package/dist/commands/observe-stagehand.d.ts +1 -0
  66. package/dist/commands/observe-stagehand.d.ts.map +1 -1
  67. package/dist/commands/observe-stagehand.js +2 -0
  68. package/dist/commands/observe.d.ts +2 -0
  69. package/dist/commands/observe.d.ts.map +1 -1
  70. package/dist/commands/observe.js +387 -203
  71. package/dist/commands/observe.test-harness.d.ts +8 -0
  72. package/dist/commands/observe.test-harness.d.ts.map +1 -1
  73. package/dist/commands/observe.test-harness.js +48 -1
  74. package/dist/commands/poll-secret.d.ts +6 -0
  75. package/dist/commands/poll-secret.d.ts.map +1 -0
  76. package/dist/commands/poll-secret.js +159 -0
  77. package/dist/commands/request-secret.d.ts +6 -0
  78. package/dist/commands/request-secret.d.ts.map +1 -0
  79. package/dist/commands/request-secret.js +284 -0
  80. package/dist/commands/screenshot.d.ts.map +1 -1
  81. package/dist/commands/screenshot.js +172 -7
  82. package/dist/commands/select-action-executor.d.ts.map +1 -1
  83. package/dist/commands/semantic-observe.d.ts +4 -0
  84. package/dist/commands/semantic-observe.d.ts.map +1 -1
  85. package/dist/commands/semantic-observe.js +388 -17
  86. package/dist/commands/start-session.d.ts +31 -0
  87. package/dist/commands/start-session.d.ts.map +1 -0
  88. package/dist/commands/start-session.js +347 -0
  89. package/dist/commands/status.d.ts +2 -1
  90. package/dist/commands/status.d.ts.map +1 -1
  91. package/dist/commands/status.js +166 -144
  92. package/dist/control-semantics.d.ts +1 -0
  93. package/dist/control-semantics.d.ts.map +1 -1
  94. package/dist/control-semantics.js +51 -9
  95. package/dist/generated/build-config.d.ts +2 -0
  96. package/dist/generated/build-config.d.ts.map +1 -0
  97. package/dist/generated/build-config.js +2 -0
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +163 -63
  100. package/dist/otel-exporter.d.ts +58 -0
  101. package/dist/otel-exporter.d.ts.map +1 -0
  102. package/dist/otel-exporter.js +263 -0
  103. package/dist/otel-projector.d.ts +75 -0
  104. package/dist/otel-projector.d.ts.map +1 -0
  105. package/dist/otel-projector.js +409 -0
  106. package/dist/owned-browser.d.ts +1 -1
  107. package/dist/owned-browser.d.ts.map +1 -1
  108. package/dist/owned-browser.js +13 -1
  109. package/dist/owned-process.d.ts +2 -0
  110. package/dist/owned-process.d.ts.map +1 -1
  111. package/dist/owned-process.js +7 -3
  112. package/dist/playwright-runtime.d.ts +1 -1
  113. package/dist/playwright-runtime.d.ts.map +1 -1
  114. package/dist/playwright-runtime.js +8 -8
  115. package/dist/run-observability.d.ts +25 -0
  116. package/dist/run-observability.d.ts.map +1 -0
  117. package/dist/run-observability.js +115 -0
  118. package/dist/run-store.d.ts +274 -0
  119. package/dist/run-store.d.ts.map +1 -0
  120. package/dist/run-store.js +631 -0
  121. package/dist/runtime-metrics.d.ts +27 -0
  122. package/dist/runtime-metrics.d.ts.map +1 -0
  123. package/dist/runtime-metrics.js +66 -0
  124. package/dist/runtime-page-state.d.ts +11 -0
  125. package/dist/runtime-page-state.d.ts.map +1 -0
  126. package/dist/runtime-page-state.js +62 -0
  127. package/dist/runtime-protected-state.d.ts +16 -0
  128. package/dist/runtime-protected-state.d.ts.map +1 -0
  129. package/dist/runtime-protected-state.js +157 -0
  130. package/dist/runtime-state.d.ts +10 -44
  131. package/dist/runtime-state.d.ts.map +1 -1
  132. package/dist/runtime-state.js +57 -222
  133. package/dist/secrets/backend.d.ts +65 -16
  134. package/dist/secrets/backend.d.ts.map +1 -1
  135. package/dist/secrets/backend.js +135 -95
  136. package/dist/secrets/catalog-sync.d.ts.map +1 -1
  137. package/dist/secrets/catalog-sync.js +4 -1
  138. package/dist/secrets/form-matcher.d.ts +5 -5
  139. package/dist/secrets/form-matcher.d.ts.map +1 -1
  140. package/dist/secrets/form-matcher.js +292 -164
  141. package/dist/secrets/intent-output.d.ts +6 -10
  142. package/dist/secrets/intent-output.d.ts.map +1 -1
  143. package/dist/secrets/intent-output.js +4 -58
  144. package/dist/secrets/mock-agentpay-cabinet.d.ts +38 -27
  145. package/dist/secrets/mock-agentpay-cabinet.d.ts.map +1 -1
  146. package/dist/secrets/mock-agentpay-cabinet.js +177 -111
  147. package/dist/secrets/protected-artifact-guard.d.ts +2 -2
  148. package/dist/secrets/protected-artifact-guard.d.ts.map +1 -1
  149. package/dist/secrets/protected-artifact-guard.js +2 -2
  150. package/dist/secrets/protected-bindings.d.ts +1 -1
  151. package/dist/secrets/protected-bindings.d.ts.map +1 -1
  152. package/dist/secrets/protected-bindings.js +6 -0
  153. package/dist/secrets/protected-field-semantics.d.ts +9 -0
  154. package/dist/secrets/protected-field-semantics.d.ts.map +1 -0
  155. package/dist/secrets/protected-field-semantics.js +154 -0
  156. package/dist/secrets/protected-field-values.d.ts.map +1 -1
  157. package/dist/secrets/protected-field-values.js +3 -3
  158. package/dist/secrets/protected-fill.d.ts +1 -1
  159. package/dist/secrets/protected-fill.d.ts.map +1 -1
  160. package/dist/secrets/protected-fill.js +45 -149
  161. package/dist/secrets/protected-value-adapters.d.ts +2 -1
  162. package/dist/secrets/protected-value-adapters.d.ts.map +1 -1
  163. package/dist/secrets/protected-value-adapters.js +80 -1
  164. package/dist/secrets/request-output.d.ts +11 -0
  165. package/dist/secrets/request-output.d.ts.map +1 -0
  166. package/dist/secrets/request-output.js +75 -0
  167. package/dist/secrets/types.d.ts +15 -9
  168. package/dist/secrets/types.d.ts.map +1 -1
  169. package/dist/secrets/types.js +3 -0
  170. package/dist/session-event-exporter.d.ts +36 -0
  171. package/dist/session-event-exporter.d.ts.map +1 -0
  172. package/dist/session-event-exporter.js +428 -0
  173. package/dist/session.d.ts +16 -7
  174. package/dist/session.d.ts.map +1 -1
  175. package/dist/session.js +150 -23
  176. package/dist/sessions-backend.d.ts +354 -0
  177. package/dist/sessions-backend.d.ts.map +1 -0
  178. package/dist/sessions-backend.js +126 -0
  179. package/dist/solver/browser-launcher.d.ts +1 -1
  180. package/dist/solver/browser-launcher.d.ts.map +1 -1
  181. package/dist/solver/browser-launcher.js +39 -13
  182. package/dist/solver/captcha-solver.d.ts.map +1 -1
  183. package/dist/solver/captcha-solver.js +8 -1
  184. package/dist/solver/config.d.ts +0 -1
  185. package/dist/solver/config.d.ts.map +1 -1
  186. package/dist/solver/config.js +0 -22
  187. package/dist/solver/types.d.ts +1 -0
  188. package/dist/solver/types.d.ts.map +1 -1
  189. package/dist/workflow-session-completion.d.ts +33 -0
  190. package/dist/workflow-session-completion.d.ts.map +1 -0
  191. package/dist/workflow-session-completion.js +156 -0
  192. package/package.json +11 -1
  193. package/dist/commands/create-intent.d.ts +0 -6
  194. package/dist/commands/create-intent.d.ts.map +0 -1
  195. package/dist/commands/create-intent.js +0 -75
  196. package/dist/commands/poll-intent.d.ts +0 -6
  197. package/dist/commands/poll-intent.d.ts.map +0 -1
  198. package/dist/commands/poll-intent.js +0 -57
package/README.md CHANGED
@@ -60,6 +60,26 @@ agentbrowse launch https://example.com
60
60
  agentbrowse launch https://example.com --headless
61
61
  ```
62
62
 
63
+ When the starting page is already known, prefer `launch <url>` directly to
64
+ that page. Avoid `launch` on a blank tab followed immediately by
65
+ `start-session` and `navigate`, because the first workflow session and timeline
66
+ will otherwise begin on the current page state, often `about:blank`.
67
+
68
+ `launch` is direct/proxyless by default. Add `--proxy` only when you want to
69
+ use a proxy for the current run:
70
+
71
+ ```bash
72
+ agentbrowse launch https://example.com --proxy
73
+ agentbrowse launch https://example.com --proxy http://proxy.example:8080
74
+ agentbrowse launch https://example.com --proxy=http://proxy.example:8080
75
+ ```
76
+
77
+ Bare `--proxy` uses `defaults.proxy` from the config. Passing a URL after
78
+ `--proxy` (or via `--proxy=...`) is a one-off override and does not persist it.
79
+
80
+ If an older workflow session is still open in the persisted browser context,
81
+ `launch` cancels that session first before replacing the browser record.
82
+
63
83
  By default, `launch` runs in headful mode. Use `--headless` only when you
64
84
  intentionally want a hidden browser:
65
85
 
@@ -70,7 +90,30 @@ agentbrowse launch https://example.com --headless
70
90
  If you want to state the default mode explicitly in scripts, use
71
91
  `--headful`.
72
92
 
73
- Navigate current session:
93
+ Start workflow session on the current browser, optionally with an explicit
94
+ operator-facing name:
95
+
96
+ ```bash
97
+ agentbrowse start-session
98
+ agentbrowse start-session "Acme checkout smoke"
99
+ agentbrowse start-session "Acme checkout smoke" --merchant-name "Acme"
100
+ ```
101
+
102
+ If a previous workflow session is still active in the persisted browser
103
+ context, re-running `start-session` cancels that older session first and then
104
+ binds a fresh one.
105
+
106
+ Complete the active workflow session without closing the browser:
107
+
108
+ ```bash
109
+ agentbrowse end-session
110
+ ```
111
+
112
+ Use `end-session` for the normal successful workflow close-out. Do not rely on
113
+ `close` to mark a run successful.
114
+
115
+ Navigate current session when you intentionally change URL after the workflow
116
+ already started:
74
117
 
75
118
  ```bash
76
119
  agentbrowse navigate https://example.com/checkout
@@ -112,22 +155,26 @@ Inspect or close the current session:
112
155
 
113
156
  ```bash
114
157
  agentbrowse status
158
+ agentbrowse end-session
115
159
  agentbrowse close
116
160
  ```
117
161
 
118
- Refresh stored-secret metadata for the current page or a specific URL:
162
+ Refresh stored-secret metadata for the current page or a specific URL after
163
+ `start-session`:
119
164
 
120
165
  ```bash
121
166
  agentbrowse get-secrets-catalog
122
167
  agentbrowse get-secrets-catalog https://example.com/checkout
123
168
  ```
124
169
 
125
- Create and complete a protected stored-secret fill:
170
+ Create and complete a protected stored-secret fill after `start-session` and
171
+ `observe`:
126
172
 
127
173
  ```bash
128
- agentbrowse create-intent f12 ss_card_visa
129
- agentbrowse poll-intent intent_123
130
- agentbrowse fill-secret f12 intent_123
174
+ agentbrowse request-secret f12 ss_card_visa --merchant-name "Acme"
175
+ agentbrowse poll-secret sr_123
176
+ agentbrowse fill-secret f12 sr_123
177
+ agentbrowse end-session
131
178
  ```
132
179
 
133
180
  Solve captcha when the active session supports it:
@@ -151,6 +198,8 @@ overrides.
151
198
  ## Runtime model
152
199
 
153
200
  - `agentbrowse` persists the active browser session under `~/.agentpay`
201
+ - browser bootstrap lives in `~/.agentpay/browse-session.json`
202
+ - workflow/run context lives in `~/.agentpay/browse-workflow.json`
154
203
  - `agentbrowse init` persists AgentPay gateway configuration for future runs
155
204
  - mock stored secrets for live/manual runs come from one canonical file:
156
205
  `~/.agentpay/mock-stored-secrets.json`
@@ -158,14 +207,35 @@ overrides.
158
207
  not an additional runtime config source
159
208
  - all commands require AgentPay gateway configuration; prefer `agentbrowse init`
160
209
  and use env vars only as runtime overrides
210
+ - `launch` is technical browser bootstrap only; it does not start workflow telemetry, but when the first working page is already known, prefer `launch <url>` so the workflow starts on the real page instead of `about:blank`
211
+ - `launch` fail-closes an older active workflow session before replacing the persisted browser context
212
+ - `start-session` starts the active workflow/run context on top of the current browser session
213
+ - `start-session` creates the backend product session through `POST /api/sessions`
214
+ - `start-session` may optionally attach `merchant_name` when the vendor is already known from the visible page or task context
215
+ - re-running `start-session` fail-closes the older active workflow session through `POST /api/sessions/:id/complete` before creating a new one
216
+ - page/runtime commands such as `navigate`, `observe`, `act`, `extract`, `screenshot`, `status`, `solve-captcha`, `request-secret`, `poll-secret`, and `fill-secret` require that active product session; `launch` alone is not enough
217
+ - use `navigate` for explicit later URL transitions inside an active workflow session, not as a mandatory first step when the initial page is already known
218
+ - `end-session` completes the active workflow session through `POST /api/sessions/:id/complete` and keeps the browser session alive
219
+ - normal successful workflow close-out should use `end-session`; `close` is browser teardown and cancels any still-active workflow session instead of completing it successfully
220
+ - `POST /api/sessions/:id/complete` is the only terminal session transition; ordinary `POST /api/sessions/:id/events` exports are non-terminal by contract
221
+ - the same `start-session` request also carries the current telemetry envelope in the same OTLP structure that browse-cli already exports today
222
+ - backend fan-out forwards that telemetry envelope through the existing telemetry ingest/index/forward path instead of inventing a new telemetry schema from product session fields
223
+ - after `start-session`, ordinary workflow-relevant command step exports go through `POST /api/sessions/:id/events`
224
+ - `status` stays local to the CLI as a diagnostic probe and does not emit workflow session events
225
+ - `close` auto-cancels an active workflow session through `POST /api/sessions/:id/complete` before deleting the local browser session record
226
+ - protected requests are session-bound:
227
+ - `get-secrets-catalog(url?)` reads host-filtered catalog metadata through `GET /api/sessions/:id/secrets/catalog`
228
+ - `request-secret` creates or reuses one request through `POST /api/sessions/:id/secret-requests` and must send `--merchant-name "<vendor>"`
229
+ - `poll-secret` reads request state through `GET /api/sessions/:id/secret-requests/:requestId`
230
+ - `fill-secret` claims the approved one-time payload through `POST /api/sessions/:id/secret-requests/:requestId/claim-secret`
161
231
  - the external AI agent remains the orchestration owner
162
232
  - `agentbrowse` is a single-step browser toolset, not an internal reactive form loop
163
233
  - runtime may enrich `observe` output with semantic hints and validation evidence, but it should not silently auto-submit, auto-retry, or maintain hidden durable field-state machines on behalf of the agent
164
- - protected fills use an explicit intent flow:
234
+ - protected fills use an explicit session-first request flow:
165
235
  - `get-secrets-catalog(url?)`
166
- - `create-intent(fillRef, storedSecretRef)`
167
- - `poll-intent(intentId)`
168
- - `fill-secret(fillRef, intentId)`
236
+ - `request-secret(fillRef, storedSecretRef, --merchant-name name)`
237
+ - `poll-secret(requestId)`
238
+ - `fill-secret(fillRef, requestId)`
169
239
  - main workflow is:
170
240
  - `observe(goal?)`
171
241
  - `act(targetRef, action, value?)`
@@ -203,5 +273,6 @@ See package docs:
203
273
 
204
274
  - [Package docs index](https://github.com/nuanu-ai/mercuryo-agent-pay/tree/main/packages/browse-cli/docs)
205
275
  - [CLI usage guide](https://github.com/nuanu-ai/mercuryo-agent-pay/blob/main/packages/browse-cli/docs/testing/cli-usage-guide.md)
276
+ - [Tracked PoCs](https://github.com/nuanu-ai/mercuryo-agent-pay/tree/main/packages/browse-cli/poc)
206
277
 
207
278
  Releases are published automatically from `main` after checks pass. `@nuanu-ai/agentbrowse` is the only CLI package published by the current npm release workflow.
@@ -5,5 +5,14 @@ export interface AgentpayGatewayConfig {
5
5
  export declare function tryResolveAgentpayGatewayConfig(): AgentpayGatewayConfig | null;
6
6
  export declare function resolveAgentpayGatewayConfig(): AgentpayGatewayConfig;
7
7
  export declare function applyAgentpayGatewayEnv(gateway: AgentpayGatewayConfig): void;
8
+ export declare function buildAgentpayTelemetryTracesUrl(apiUrl: string): string;
9
+ export declare function buildAgentpaySessionsUrl(apiUrl: string): string;
10
+ export declare function buildAgentpaySessionUrl(apiUrl: string, sessionId: string): string;
11
+ export declare function buildAgentpaySessionSecretsCatalogUrl(apiUrl: string, sessionId: string): string;
12
+ export declare function buildAgentpaySessionEventsUrl(apiUrl: string, sessionId: string): string;
13
+ export declare function buildAgentpayCompleteSessionUrl(apiUrl: string, sessionId: string): string;
14
+ export declare function buildAgentpaySessionSecretRequestsUrl(apiUrl: string, sessionId: string): string;
15
+ export declare function buildAgentpaySessionSecretRequestUrl(apiUrl: string, sessionId: string, requestId: string): string;
16
+ export declare function buildAgentpayClaimSecretUrl(apiUrl: string, sessionId: string, requestId: string): string;
8
17
  export declare function preflightAgentpayGateway(): Promise<AgentpayGatewayConfig>;
9
18
  //# sourceMappingURL=agentpay-gateway.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agentpay-gateway.d.ts","sourceRoot":"","sources":["../src/agentpay-gateway.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAYD,wBAAgB,+BAA+B,IAAI,qBAAqB,GAAG,IAAI,CAgB9E;AAED,wBAAgB,4BAA4B,IAAI,qBAAqB,CAMpE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAG5E;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAI/E"}
1
+ {"version":3,"file":"agentpay-gateway.d.ts","sourceRoot":"","sources":["../src/agentpay-gateway.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAgBD,wBAAgB,+BAA+B,IAAI,qBAAqB,GAAG,IAAI,CAgB9E;AAED,wBAAgB,4BAA4B,IAAI,qBAAqB,CAMpE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAG5E;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED,wBAAgB,qCAAqC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/F;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzF;AAED,wBAAgB,qCAAqC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/F;AAED,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAI/E"}
@@ -1,5 +1,5 @@
1
1
  import { readConfig } from './solver/config.js';
2
- const DEFAULT_AGENTPAY_API_URL = 'https://durcottggsiesxxqzvbb.supabase.co/functions/v1/api';
2
+ import { DEFAULT_AGENTPAY_API_URL } from './generated/build-config.js';
3
3
  function trimOrUndefined(value) {
4
4
  if (!value)
5
5
  return undefined;
@@ -9,6 +9,9 @@ function trimOrUndefined(value) {
9
9
  function normalizeApiUrl(value) {
10
10
  return value.replace(/\/$/, '');
11
11
  }
12
+ function appendApiPath(apiUrl, suffix) {
13
+ return `${normalizeApiUrl(apiUrl)}${suffix.startsWith('/') ? suffix : `/${suffix}`}`;
14
+ }
12
15
  export function tryResolveAgentpayGatewayConfig() {
13
16
  const solverConfig = readConfig();
14
17
  const apiKey = trimOrUndefined(process.env.AGENTPAY_API_KEY) || trimOrUndefined(solverConfig.agentpay?.apiKey);
@@ -34,6 +37,33 @@ export function applyAgentpayGatewayEnv(gateway) {
34
37
  process.env.AGENTPAY_API_KEY = gateway.apiKey;
35
38
  process.env.AGENTPAY_API_URL = gateway.apiUrl;
36
39
  }
40
+ export function buildAgentpayTelemetryTracesUrl(apiUrl) {
41
+ return appendApiPath(apiUrl, '/telemetry/traces');
42
+ }
43
+ export function buildAgentpaySessionsUrl(apiUrl) {
44
+ return appendApiPath(apiUrl, '/sessions');
45
+ }
46
+ export function buildAgentpaySessionUrl(apiUrl, sessionId) {
47
+ return appendApiPath(apiUrl, `/sessions/${sessionId}`);
48
+ }
49
+ export function buildAgentpaySessionSecretsCatalogUrl(apiUrl, sessionId) {
50
+ return appendApiPath(apiUrl, `/sessions/${sessionId}/secrets/catalog`);
51
+ }
52
+ export function buildAgentpaySessionEventsUrl(apiUrl, sessionId) {
53
+ return appendApiPath(apiUrl, `/sessions/${sessionId}/events`);
54
+ }
55
+ export function buildAgentpayCompleteSessionUrl(apiUrl, sessionId) {
56
+ return appendApiPath(apiUrl, `/sessions/${sessionId}/complete`);
57
+ }
58
+ export function buildAgentpaySessionSecretRequestsUrl(apiUrl, sessionId) {
59
+ return appendApiPath(apiUrl, `/sessions/${sessionId}/secret-requests`);
60
+ }
61
+ export function buildAgentpaySessionSecretRequestUrl(apiUrl, sessionId, requestId) {
62
+ return appendApiPath(apiUrl, `/sessions/${sessionId}/secret-requests/${requestId}`);
63
+ }
64
+ export function buildAgentpayClaimSecretUrl(apiUrl, sessionId, requestId) {
65
+ return appendApiPath(apiUrl, `/sessions/${sessionId}/secret-requests/${requestId}/claim-secret`);
66
+ }
37
67
  export async function preflightAgentpayGateway() {
38
68
  const gateway = resolveAgentpayGatewayConfig();
39
69
  applyAgentpayGatewayEnv(gateway);
@@ -1 +1 @@
1
- {"version":3,"file":"agentpay-stagehand-llm.d.ts","sourceRoot":"","sources":["../src/agentpay-stagehand-llm.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,YAAY,EACZ,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAmBnE,qBAAa,sCAAuC,SAAQ,KAAK;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;gBAGjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;CAWJ;AAsDD,qBAAa,0BAA2B,SAAQ,SAAS;IAI3C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,IAAI,EAAG,UAAU,CAAU;IAC3B,aAAa,KAAM;gBAEU,OAAO,EAAE,qBAAqB;IAKrD,oBAAoB,CAAC,CAAC,EAC1B,IAAI,EAAE,2BAA2B,GAAG;QAClC,OAAO,EAAE;YACP,cAAc,EAAE;gBACd,IAAI,EAAE,MAAM,CAAC;gBACb,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5C,CAAC;SACH,CAAC;KACH,GACA,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC1B,oBAAoB,CAAC,CAAC,GAAG,WAAW,EAAE,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,CAAC,CAAC;CA8F3F;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,qBAAqB,GAC7B,0BAA0B,CAE5B"}
1
+ {"version":3,"file":"agentpay-stagehand-llm.d.ts","sourceRoot":"","sources":["../src/agentpay-stagehand-llm.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,YAAY,EACZ,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAoBnE,qBAAa,sCAAuC,SAAQ,KAAK;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;gBAGjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;CAWJ;AAsDD,qBAAa,0BAA2B,SAAQ,SAAS;IAI3C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,IAAI,EAAG,UAAU,CAAU;IAC3B,aAAa,KAAM;gBAEU,OAAO,EAAE,qBAAqB;IAKrD,oBAAoB,CAAC,CAAC,EAC1B,IAAI,EAAE,2BAA2B,GAAG;QAClC,OAAO,EAAE;YACP,cAAc,EAAE;gBACd,IAAI,EAAE,MAAM,CAAC;gBACb,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5C,CAAC;SACH,CAAC;KACH,GACA,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC1B,oBAAoB,CAAC,CAAC,GAAG,WAAW,EAAE,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,CAAC,CAAC;CAyG3F;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,qBAAqB,GAC7B,0BAA0B,CAE5B"}
@@ -1,4 +1,5 @@
1
1
  import { LLMClient, toJsonSchema, } from '@browserbasehq/stagehand';
2
+ import { tracedFetch } from './command-api-tracing.js';
2
3
  export class AgentpayStructuredOutputTruncatedError extends Error {
3
4
  status;
4
5
  provider;
@@ -102,7 +103,7 @@ export class AgentpayStagehandLlmClient extends LLMClient {
102
103
  const result = await withRetry(async () => {
103
104
  let response;
104
105
  try {
105
- response = await fetch(url, {
106
+ response = await tracedFetch(url, {
106
107
  method: 'POST',
107
108
  headers: {
108
109
  Authorization: `Bearer ${this.gateway.apiKey}`,
@@ -111,6 +112,13 @@ export class AgentpayStagehandLlmClient extends LLMClient {
111
112
  },
112
113
  body: JSON.stringify(body),
113
114
  signal: AbortSignal.timeout(45_000),
115
+ }, {
116
+ spanName: 'agentpay.llm.structured_chat',
117
+ attributes: {
118
+ 'agentbrowse.api.system': 'agentpay',
119
+ 'agentbrowse.api.purpose': body.purpose,
120
+ 'agentbrowse.api.route': '/tools/llm/structured-chat',
121
+ },
114
122
  });
115
123
  }
116
124
  catch (err) {
@@ -0,0 +1,19 @@
1
+ type ApiTraceContext = {
2
+ runId?: string;
3
+ stepId?: string;
4
+ command: string;
5
+ };
6
+ type TracedFetchOptions = {
7
+ spanName: string;
8
+ attributes?: Record<string, unknown>;
9
+ fetchImpl?: typeof fetch;
10
+ };
11
+ type TracedStepOperationOptions = {
12
+ spanName: string;
13
+ attributes?: Record<string, unknown>;
14
+ };
15
+ export declare function withApiTraceContext<T>(context: ApiTraceContext, run: () => Promise<T>): Promise<T>;
16
+ export declare function tracedStepOperation<T>(run: () => Promise<T> | T, options?: TracedStepOperationOptions): Promise<T>;
17
+ export declare function tracedFetch(input: RequestInfo | URL, init?: RequestInit, options?: TracedFetchOptions): Promise<Response>;
18
+ export {};
19
+ //# sourceMappingURL=command-api-tracing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-api-tracing.d.ts","sourceRoot":"","sources":["../src/command-api-tracing.ts"],"names":[],"mappings":"AAGA,KAAK,eAAe,GAAG;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC,CAAC;AAoEF,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,OAAO,EAAE,eAAe,EACxB,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACpB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACzB,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,CAAC,CAAC,CAqCZ;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAuCnB"}
@@ -0,0 +1,137 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { appendStepChildSpan } from './run-store.js';
3
+ const apiTraceContextStorage = new AsyncLocalStorage();
4
+ function sanitizeTraceUrl(value) {
5
+ try {
6
+ const parsed = new URL(value);
7
+ parsed.username = '';
8
+ parsed.password = '';
9
+ parsed.search = '';
10
+ parsed.hash = '';
11
+ return parsed.toString();
12
+ }
13
+ catch {
14
+ return value;
15
+ }
16
+ }
17
+ function resolveMethod(input, init) {
18
+ const initMethod = init?.method?.trim();
19
+ if (initMethod) {
20
+ return initMethod.toUpperCase();
21
+ }
22
+ if (typeof Request !== 'undefined' && input instanceof Request) {
23
+ return input.method.toUpperCase();
24
+ }
25
+ return 'GET';
26
+ }
27
+ function resolveUrl(input) {
28
+ if (input instanceof URL) {
29
+ return input.toString();
30
+ }
31
+ if (typeof input === 'string') {
32
+ return input;
33
+ }
34
+ if (typeof Request !== 'undefined' && input instanceof Request) {
35
+ return input.url;
36
+ }
37
+ return String(input);
38
+ }
39
+ function buildTraceAttributes(context, input, init, extraAttributes) {
40
+ const url = resolveUrl(input);
41
+ const method = resolveMethod(input, init);
42
+ let hostname;
43
+ let pathname;
44
+ try {
45
+ const parsed = new URL(url);
46
+ hostname = parsed.host;
47
+ pathname = parsed.pathname;
48
+ }
49
+ catch { }
50
+ return {
51
+ 'agentbrowse.api.command': context.command,
52
+ 'http.request.method': method,
53
+ 'url.full': sanitizeTraceUrl(url),
54
+ ...(hostname ? { 'server.address': hostname } : {}),
55
+ ...(pathname ? { 'url.path': pathname } : {}),
56
+ ...(extraAttributes ?? {}),
57
+ };
58
+ }
59
+ export async function withApiTraceContext(context, run) {
60
+ return apiTraceContextStorage.run(context, run);
61
+ }
62
+ export async function tracedStepOperation(run, options) {
63
+ const context = apiTraceContextStorage.getStore();
64
+ if (!context?.runId || !context.stepId || !options?.spanName) {
65
+ return run();
66
+ }
67
+ const startedAt = new Date().toISOString();
68
+ const attributes = {
69
+ 'agentbrowse.api.command': context.command,
70
+ ...(options.attributes ?? {}),
71
+ };
72
+ try {
73
+ const result = await run();
74
+ appendStepChildSpan({
75
+ runId: context.runId,
76
+ stepId: context.stepId,
77
+ name: options.spanName,
78
+ startedAt,
79
+ endedAt: new Date().toISOString(),
80
+ statusCode: 'ok',
81
+ attributes,
82
+ });
83
+ return result;
84
+ }
85
+ catch (error) {
86
+ appendStepChildSpan({
87
+ runId: context.runId,
88
+ stepId: context.stepId,
89
+ name: options.spanName,
90
+ startedAt,
91
+ endedAt: new Date().toISOString(),
92
+ statusCode: 'error',
93
+ statusMessage: error instanceof Error ? error.message : String(error),
94
+ attributes,
95
+ });
96
+ throw error;
97
+ }
98
+ }
99
+ export async function tracedFetch(input, init, options) {
100
+ const fetchImpl = options?.fetchImpl ?? fetch;
101
+ const context = apiTraceContextStorage.getStore();
102
+ if (!context?.runId || !context.stepId || !options?.spanName) {
103
+ return fetchImpl(input, init);
104
+ }
105
+ const startedAt = new Date().toISOString();
106
+ const attributes = buildTraceAttributes(context, input, init, options.attributes);
107
+ try {
108
+ const response = await fetchImpl(input, init);
109
+ appendStepChildSpan({
110
+ runId: context.runId,
111
+ stepId: context.stepId,
112
+ name: options.spanName,
113
+ startedAt,
114
+ endedAt: new Date().toISOString(),
115
+ statusCode: response.ok ? 'ok' : 'error',
116
+ ...(response.ok ? {} : { statusMessage: `http_${response.status}` }),
117
+ attributes: {
118
+ ...attributes,
119
+ 'http.response.status_code': response.status,
120
+ },
121
+ });
122
+ return response;
123
+ }
124
+ catch (error) {
125
+ appendStepChildSpan({
126
+ runId: context.runId,
127
+ stepId: context.stepId,
128
+ name: options.spanName,
129
+ startedAt,
130
+ endedAt: new Date().toISOString(),
131
+ statusCode: 'error',
132
+ statusMessage: error instanceof Error ? error.message : String(error),
133
+ attributes,
134
+ });
135
+ throw error;
136
+ }
137
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"act.d.ts","sourceRoot":"","sources":["../../src/commands/act.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAuCnD,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA2HxF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,CAAC;AA4V7B,wBAAsB,GAAG,CACvB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,EACpB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAstBf"}
1
+ {"version":3,"file":"act.d.ts","sourceRoot":"","sources":["../../src/commands/act.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAiCnD,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAiNxF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,CAAC;AAkR7B,wBAAsB,GAAG,CACvB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,EACpB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA01Bf"}