@nuanu-ai/agentbrowse 0.2.46 → 0.2.48

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 (190) hide show
  1. package/README.md +69 -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 +30 -0
  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/interaction-kernel.d.ts +46 -0
  39. package/dist/commands/interaction-kernel.d.ts.map +1 -0
  40. package/dist/commands/interaction-kernel.js +215 -0
  41. package/dist/commands/launch.d.ts +0 -2
  42. package/dist/commands/launch.d.ts.map +1 -1
  43. package/dist/commands/launch.js +109 -17
  44. package/dist/commands/navigate.d.ts.map +1 -1
  45. package/dist/commands/navigate.js +188 -45
  46. package/dist/commands/observe-accessibility.d.ts.map +1 -1
  47. package/dist/commands/observe-accessibility.js +50 -39
  48. package/dist/commands/observe-dom-label-contract.d.ts.map +1 -1
  49. package/dist/commands/observe-dom-label-contract.js +5 -0
  50. package/dist/commands/observe-inventory.d.ts +13 -0
  51. package/dist/commands/observe-inventory.d.ts.map +1 -1
  52. package/dist/commands/observe-inventory.js +320 -65
  53. package/dist/commands/observe-persistence.d.ts.map +1 -1
  54. package/dist/commands/observe-persistence.js +3 -0
  55. package/dist/commands/observe-projection.d.ts +1 -0
  56. package/dist/commands/observe-projection.d.ts.map +1 -1
  57. package/dist/commands/observe-projection.js +7 -2
  58. package/dist/commands/observe-protected.d.ts +1 -0
  59. package/dist/commands/observe-protected.d.ts.map +1 -1
  60. package/dist/commands/observe-protected.js +9 -4
  61. package/dist/commands/observe-semantics.d.ts.map +1 -1
  62. package/dist/commands/observe-semantics.js +5 -2
  63. package/dist/commands/observe-stagehand.d.ts +1 -0
  64. package/dist/commands/observe-stagehand.d.ts.map +1 -1
  65. package/dist/commands/observe-stagehand.js +2 -0
  66. package/dist/commands/observe.d.ts +2 -0
  67. package/dist/commands/observe.d.ts.map +1 -1
  68. package/dist/commands/observe.js +387 -203
  69. package/dist/commands/observe.test-harness.d.ts +8 -0
  70. package/dist/commands/observe.test-harness.d.ts.map +1 -1
  71. package/dist/commands/observe.test-harness.js +48 -1
  72. package/dist/commands/poll-secret.d.ts +6 -0
  73. package/dist/commands/poll-secret.d.ts.map +1 -0
  74. package/dist/commands/poll-secret.js +159 -0
  75. package/dist/commands/request-secret.d.ts +6 -0
  76. package/dist/commands/request-secret.d.ts.map +1 -0
  77. package/dist/commands/request-secret.js +284 -0
  78. package/dist/commands/screenshot.d.ts.map +1 -1
  79. package/dist/commands/screenshot.js +172 -7
  80. package/dist/commands/select-action-executor.d.ts.map +1 -1
  81. package/dist/commands/semantic-observe.d.ts +4 -0
  82. package/dist/commands/semantic-observe.d.ts.map +1 -1
  83. package/dist/commands/semantic-observe.js +388 -17
  84. package/dist/commands/start-session.d.ts +31 -0
  85. package/dist/commands/start-session.d.ts.map +1 -0
  86. package/dist/commands/start-session.js +347 -0
  87. package/dist/commands/status.d.ts +2 -1
  88. package/dist/commands/status.d.ts.map +1 -1
  89. package/dist/commands/status.js +166 -144
  90. package/dist/control-semantics.d.ts +1 -0
  91. package/dist/control-semantics.d.ts.map +1 -1
  92. package/dist/control-semantics.js +51 -9
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +144 -45
  95. package/dist/otel-exporter.d.ts +58 -0
  96. package/dist/otel-exporter.d.ts.map +1 -0
  97. package/dist/otel-exporter.js +263 -0
  98. package/dist/otel-projector.d.ts +75 -0
  99. package/dist/otel-projector.d.ts.map +1 -0
  100. package/dist/otel-projector.js +409 -0
  101. package/dist/owned-browser.d.ts +1 -1
  102. package/dist/owned-browser.d.ts.map +1 -1
  103. package/dist/owned-browser.js +13 -1
  104. package/dist/owned-process.d.ts +2 -0
  105. package/dist/owned-process.d.ts.map +1 -1
  106. package/dist/owned-process.js +7 -3
  107. package/dist/playwright-runtime.d.ts +1 -1
  108. package/dist/playwright-runtime.d.ts.map +1 -1
  109. package/dist/playwright-runtime.js +8 -8
  110. package/dist/run-observability.d.ts +25 -0
  111. package/dist/run-observability.d.ts.map +1 -0
  112. package/dist/run-observability.js +115 -0
  113. package/dist/run-store.d.ts +274 -0
  114. package/dist/run-store.d.ts.map +1 -0
  115. package/dist/run-store.js +631 -0
  116. package/dist/runtime-metrics.d.ts +27 -0
  117. package/dist/runtime-metrics.d.ts.map +1 -0
  118. package/dist/runtime-metrics.js +66 -0
  119. package/dist/runtime-page-state.d.ts +11 -0
  120. package/dist/runtime-page-state.d.ts.map +1 -0
  121. package/dist/runtime-page-state.js +62 -0
  122. package/dist/runtime-protected-state.d.ts +16 -0
  123. package/dist/runtime-protected-state.d.ts.map +1 -0
  124. package/dist/runtime-protected-state.js +157 -0
  125. package/dist/runtime-state.d.ts +10 -44
  126. package/dist/runtime-state.d.ts.map +1 -1
  127. package/dist/runtime-state.js +57 -222
  128. package/dist/secrets/backend.d.ts +65 -16
  129. package/dist/secrets/backend.d.ts.map +1 -1
  130. package/dist/secrets/backend.js +135 -95
  131. package/dist/secrets/catalog-sync.d.ts.map +1 -1
  132. package/dist/secrets/catalog-sync.js +4 -1
  133. package/dist/secrets/form-matcher.d.ts +5 -5
  134. package/dist/secrets/form-matcher.d.ts.map +1 -1
  135. package/dist/secrets/form-matcher.js +292 -164
  136. package/dist/secrets/intent-output.d.ts +6 -10
  137. package/dist/secrets/intent-output.d.ts.map +1 -1
  138. package/dist/secrets/intent-output.js +4 -58
  139. package/dist/secrets/mock-agentpay-cabinet.d.ts +38 -27
  140. package/dist/secrets/mock-agentpay-cabinet.d.ts.map +1 -1
  141. package/dist/secrets/mock-agentpay-cabinet.js +177 -111
  142. package/dist/secrets/protected-artifact-guard.d.ts +2 -2
  143. package/dist/secrets/protected-artifact-guard.d.ts.map +1 -1
  144. package/dist/secrets/protected-artifact-guard.js +2 -2
  145. package/dist/secrets/protected-bindings.d.ts +1 -1
  146. package/dist/secrets/protected-bindings.d.ts.map +1 -1
  147. package/dist/secrets/protected-bindings.js +6 -0
  148. package/dist/secrets/protected-field-semantics.d.ts +9 -0
  149. package/dist/secrets/protected-field-semantics.d.ts.map +1 -0
  150. package/dist/secrets/protected-field-semantics.js +154 -0
  151. package/dist/secrets/protected-field-values.d.ts.map +1 -1
  152. package/dist/secrets/protected-field-values.js +3 -3
  153. package/dist/secrets/protected-fill.d.ts +1 -1
  154. package/dist/secrets/protected-fill.d.ts.map +1 -1
  155. package/dist/secrets/protected-fill.js +45 -149
  156. package/dist/secrets/protected-value-adapters.d.ts +2 -1
  157. package/dist/secrets/protected-value-adapters.d.ts.map +1 -1
  158. package/dist/secrets/protected-value-adapters.js +80 -1
  159. package/dist/secrets/request-output.d.ts +11 -0
  160. package/dist/secrets/request-output.d.ts.map +1 -0
  161. package/dist/secrets/request-output.js +75 -0
  162. package/dist/secrets/types.d.ts +15 -9
  163. package/dist/secrets/types.d.ts.map +1 -1
  164. package/dist/secrets/types.js +3 -0
  165. package/dist/session-event-exporter.d.ts +36 -0
  166. package/dist/session-event-exporter.d.ts.map +1 -0
  167. package/dist/session-event-exporter.js +428 -0
  168. package/dist/session.d.ts +16 -7
  169. package/dist/session.d.ts.map +1 -1
  170. package/dist/session.js +150 -23
  171. package/dist/sessions-backend.d.ts +354 -0
  172. package/dist/sessions-backend.d.ts.map +1 -0
  173. package/dist/sessions-backend.js +126 -0
  174. package/dist/solver/browser-launcher.d.ts +1 -1
  175. package/dist/solver/browser-launcher.d.ts.map +1 -1
  176. package/dist/solver/browser-launcher.js +39 -13
  177. package/dist/solver/captcha-solver.d.ts.map +1 -1
  178. package/dist/solver/captcha-solver.js +8 -1
  179. package/dist/solver/types.d.ts +1 -0
  180. package/dist/solver/types.d.ts.map +1 -1
  181. package/dist/workflow-session-completion.d.ts +33 -0
  182. package/dist/workflow-session-completion.d.ts.map +1 -0
  183. package/dist/workflow-session-completion.js +156 -0
  184. package/package.json +9 -1
  185. package/dist/commands/create-intent.d.ts +0 -6
  186. package/dist/commands/create-intent.d.ts.map +0 -1
  187. package/dist/commands/create-intent.js +0 -75
  188. package/dist/commands/poll-intent.d.ts +0 -6
  189. package/dist/commands/poll-intent.d.ts.map +0 -1
  190. package/dist/commands/poll-intent.js +0 -57
@@ -13,7 +13,7 @@ export type PaymentCardFieldKey = (typeof PAYMENT_CARD_FIELD_KEYS)[number];
13
13
  export type StoredSecretFieldKey = LoginFieldKey | IdentityFieldKey | PaymentCardFieldKey;
14
14
  export type StoredSecretScope = 'site' | 'global';
15
15
  export type ProtectedFieldPolicy = 'deterministic_only' | 'llm_assisted';
16
- export declare const PROTECTED_BINDING_VALUE_HINTS: readonly ["direct", "full_name.given", "full_name.family"];
16
+ export declare const PROTECTED_BINDING_VALUE_HINTS: readonly ["direct", "full_name.given", "full_name.family", "date_of_birth.day", "date_of_birth.month", "date_of_birth.year"];
17
17
  export type ProtectedBindingValueHint = (typeof PROTECTED_BINDING_VALUE_HINTS)[number];
18
18
  export type StoredSecretApplicabilityTarget = 'host' | 'site' | 'global';
19
19
  export interface StoredSecretApplicability {
@@ -38,6 +38,8 @@ export interface SecretCatalogSnapshot {
38
38
  syncedAt: string;
39
39
  storedSecrets: StoredSecretMetadata[];
40
40
  }
41
+ export type SecretRequestType = 'secret_read' | 'secret_write';
42
+ export type SecretRequestStatus = 'pending' | 'fulfilled' | 'denied' | 'expired' | 'failed' | 'canceled';
41
43
  export interface FillableFormFieldBinding {
42
44
  fieldKey: StoredSecretFieldKey;
43
45
  targetRef: string;
@@ -55,28 +57,32 @@ export interface FillableFormStoredSecretCandidate {
55
57
  fieldKeys?: StoredSecretFieldKey[];
56
58
  fieldPolicies?: StoredSecretFieldPolicies;
57
59
  }
60
+ export type FillableFormPresence = 'present' | 'unknown' | 'absent';
58
61
  export interface PersistedFillableForm {
59
62
  fillRef: string;
60
63
  pageRef: string;
61
64
  scopeRef?: string;
62
65
  purpose: string;
66
+ presence?: FillableFormPresence;
67
+ scopeEpoch?: number;
63
68
  fields: FillableFormFieldBinding[];
64
69
  storedSecretCandidates: FillableFormStoredSecretCandidate[];
65
70
  observedAt: string;
66
71
  }
67
- export type SecretIntentStatus = 'pending' | 'checking' | 'notify' | 'confirmation' | 'approved' | 'denied' | 'timed_out' | 'completed';
68
- export interface SecretIntentSnapshot {
69
- intentId: string;
72
+ export interface SecretRequestSnapshot {
73
+ requestId: string;
70
74
  fillRef: string;
71
- storedSecretRef: string;
72
- status: SecretIntentStatus;
73
- approvalChannel?: 'agentpay-cabinet';
75
+ requestType: SecretRequestType;
76
+ status: SecretRequestStatus;
77
+ storedSecretRef?: string;
78
+ kind?: StoredSecretKind;
74
79
  host?: string;
75
80
  pageRef?: string;
76
81
  scopeRef?: string;
77
82
  createdAt: string;
83
+ updatedAt: string;
78
84
  expiresAt?: string;
79
- approvedAt?: string;
80
- completedAt?: string;
85
+ resolvedAt?: string;
86
+ claimedAt?: string;
81
87
  }
82
88
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/secrets/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/secrets/types.ts"],"names":[],"mappings":"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"}
@@ -24,4 +24,7 @@ export const PROTECTED_BINDING_VALUE_HINTS = [
24
24
  'direct',
25
25
  'full_name.given',
26
26
  'full_name.family',
27
+ 'date_of_birth.day',
28
+ 'date_of_birth.month',
29
+ 'date_of_birth.year',
27
30
  ];
@@ -0,0 +1,36 @@
1
+ import { type OtlpTraceRequest } from './otel-projector.js';
2
+ import { type RunEventRecord, type StepRecord } from './run-store.js';
3
+ import { type CreateRemoteSessionEventInput } from './sessions-backend.js';
4
+ type SessionEventExportResult = {
5
+ attempted: false;
6
+ reason: 'workflow_session_missing' | 'run_mismatch' | 'unsupported_command' | 'run_missing' | 'step_missing' | 'payload_missing';
7
+ } | {
8
+ attempted: true;
9
+ success: true;
10
+ status: number;
11
+ duplicate: boolean;
12
+ } | {
13
+ attempted: true;
14
+ success: false;
15
+ status?: number;
16
+ reason: string;
17
+ };
18
+ export declare function deriveSessionEventSummary(params: {
19
+ step: StepRecord;
20
+ status: CreateRemoteSessionEventInput['status'];
21
+ page: ReturnType<typeof buildPageSummary>;
22
+ lifecycleEvent: RunEventRecord | null;
23
+ }): string;
24
+ declare function buildPageSummary(step: StepRecord, runId: string): {
25
+ title?: string | undefined;
26
+ url?: string | undefined;
27
+ ref?: string | undefined;
28
+ } | undefined;
29
+ export declare function exportRunStepViaSessionEvent(params: {
30
+ runId: string;
31
+ stepId: string;
32
+ telemetryPayload: OtlpTraceRequest | null;
33
+ fetchImpl?: typeof fetch;
34
+ }): Promise<SessionEventExportResult>;
35
+ export {};
36
+ //# sourceMappingURL=session-event-exporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-event-exporter.d.ts","sourceRoot":"","sources":["../src/session-event-exporter.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAOL,KAAK,cAAc,EAGnB,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAIL,KAAK,6BAA6B,EAGnC,MAAM,uBAAuB,CAAC;AAgB/B,KAAK,wBAAwB,GACzB;IACE,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EACF,0BAA0B,GAC1B,cAAc,GACd,qBAAqB,GACrB,aAAa,GACb,cAAc,GACd,iBAAiB,CAAC;CACvB,GACD;IACE,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACpB,GACD;IACE,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAqJN,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAC1C,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC,GAAG,MAAM,CAmBT;AA6ED,iBAAS,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM;;;;cAQxD;AAsGD,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAgIpC"}
@@ -0,0 +1,428 @@
1
+ import { basename } from 'node:path';
2
+ import { sanitizeUrlForTelemetry } from './otel-projector.js';
3
+ import { listRunEventRecordsForStep, loadBrowserStateSnapshot, loadRunRecord, loadStepRecord, setRunIngestState, } from './run-store.js';
4
+ import { loadSession, resolveBrowserSessionId, saveSession } from './session.js';
5
+ import { AgentpayRequestError, createRemoteSessionEvent, getRemoteSession, } from './sessions-backend.js';
6
+ const SESSION_EVENT_COMMANDS = new Set([
7
+ 'navigate',
8
+ 'observe',
9
+ 'act',
10
+ 'extract',
11
+ 'screenshot',
12
+ 'get-secrets-catalog',
13
+ 'solve-captcha',
14
+ 'close',
15
+ ]);
16
+ const BLOCKED_OUTCOME_TYPES = new Set(['blocked', 'unsupported', 'binding_stale']);
17
+ const MAX_EVENT_SUMMARY_LENGTH = 180;
18
+ function asJsonRecord(value) {
19
+ return value && typeof value === 'object' && !Array.isArray(value)
20
+ ? { ...value }
21
+ : {};
22
+ }
23
+ function normalizeSummaryText(value) {
24
+ if (typeof value !== 'string') {
25
+ return null;
26
+ }
27
+ const normalized = value.replace(/\s+/gu, ' ').trim();
28
+ return normalized.length > 0 ? normalized : null;
29
+ }
30
+ function truncateSummary(value, maxLength = MAX_EVENT_SUMMARY_LENGTH) {
31
+ return value.length <= maxLength ? value : `${value.slice(0, maxLength - 3)}...`;
32
+ }
33
+ function joinSummaryParts(parts) {
34
+ const filtered = parts.filter((part) => typeof part === 'string' && part.length > 0);
35
+ if (filtered.length === 0) {
36
+ return null;
37
+ }
38
+ return truncateSummary(filtered.join(' · '));
39
+ }
40
+ function pickFirstString(record, keys) {
41
+ for (const key of keys) {
42
+ const value = normalizeSummaryText(record[key]);
43
+ if (value) {
44
+ return value;
45
+ }
46
+ }
47
+ return null;
48
+ }
49
+ function pickFirstNumber(record, keys) {
50
+ for (const key of keys) {
51
+ const value = record[key];
52
+ if (typeof value === 'number' && Number.isFinite(value)) {
53
+ return value;
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ function sanitizeSummaryUrl(url) {
59
+ return truncateSummary(sanitizeUrlForTelemetry(url));
60
+ }
61
+ function summarizePage(page) {
62
+ if (!page) {
63
+ return null;
64
+ }
65
+ if (typeof page.url === 'string' && page.url.trim().length > 0) {
66
+ return sanitizeSummaryUrl(page.url);
67
+ }
68
+ return normalizeSummaryText(page.title);
69
+ }
70
+ function summarizeSchemaFields(schemaJson) {
71
+ if (typeof schemaJson !== 'string' || schemaJson.trim().length === 0) {
72
+ return null;
73
+ }
74
+ try {
75
+ const parsed = JSON.parse(schemaJson);
76
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
77
+ return null;
78
+ }
79
+ const keys = Object.keys(parsed).filter((key) => key.trim().length > 0);
80
+ if (keys.length === 0) {
81
+ return null;
82
+ }
83
+ const preview = keys.slice(0, 4).join(', ');
84
+ const suffix = keys.length > 4 ? ', ...' : '';
85
+ return truncateSummary(`fields: ${preview}${suffix}`);
86
+ }
87
+ catch {
88
+ return null;
89
+ }
90
+ }
91
+ function commandContextSummary(params) {
92
+ const input = asJsonRecord(params.step.input);
93
+ const lifecycleAttributes = asJsonRecord(params.lifecycleEvent?.attributes);
94
+ const pageSummary = summarizePage(params.page);
95
+ switch (params.step.command) {
96
+ case 'navigate': {
97
+ const targetUrl = pickFirstString(input, ['targetUrl']);
98
+ return pageSummary ?? (targetUrl ? sanitizeSummaryUrl(targetUrl) : null);
99
+ }
100
+ case 'observe': {
101
+ return pickFirstString(input, ['instruction']) ?? pageSummary;
102
+ }
103
+ case 'act': {
104
+ const action = pickFirstString(input, ['action']);
105
+ const targetRef = normalizeSummaryText(params.step.refs?.targetRef) ?? pickFirstString(input, ['targetRef']);
106
+ return joinSummaryParts([action && targetRef ? `${action} ${targetRef}` : action ?? targetRef, pageSummary]);
107
+ }
108
+ case 'extract': {
109
+ const scopeRef = pickFirstString(input, ['scopeRef']);
110
+ const schemaFields = summarizeSchemaFields(input.schemaJson);
111
+ return joinSummaryParts([scopeRef ? `scope ${scopeRef}` : null, schemaFields, pageSummary]);
112
+ }
113
+ case 'screenshot': {
114
+ const outputPath = pickFirstString(lifecycleAttributes, ['outputPath']) ?? pickFirstString(input, ['outputPath']);
115
+ return joinSummaryParts([outputPath ? basename(outputPath) : null, pageSummary]);
116
+ }
117
+ case 'get-secrets-catalog': {
118
+ const host = pickFirstString(lifecycleAttributes, ['host']) ?? pickFirstString(input, ['urlOrHost']);
119
+ const storedSecretCount = pickFirstNumber(lifecycleAttributes, ['storedSecretCount']);
120
+ return joinSummaryParts([
121
+ host,
122
+ storedSecretCount === null ? null : `${storedSecretCount} stored secrets`,
123
+ pageSummary,
124
+ ]);
125
+ }
126
+ case 'solve-captcha': {
127
+ const timeoutSeconds = pickFirstNumber(input, ['timeoutSeconds']);
128
+ const detected = pickFirstNumber(lifecycleAttributes, ['detected']);
129
+ return joinSummaryParts([
130
+ pageSummary,
131
+ detected === null ? null : `${detected} detected`,
132
+ timeoutSeconds === null ? null : `timeout ${timeoutSeconds}s`,
133
+ ]);
134
+ }
135
+ case 'close':
136
+ return pageSummary;
137
+ default:
138
+ return pageSummary;
139
+ }
140
+ }
141
+ export function deriveSessionEventSummary(params) {
142
+ const reason = normalizeSummaryText(params.step.outputSummary?.reason) ??
143
+ pickFirstString(asJsonRecord(params.lifecycleEvent?.attributes), ['reason']);
144
+ if ((params.status === 'blocked' || params.status === 'failed') && reason) {
145
+ return truncateSummary(reason);
146
+ }
147
+ const message = normalizeSummaryText(params.step.outputSummary?.message);
148
+ const contextSummary = commandContextSummary(params);
149
+ if (contextSummary) {
150
+ return contextSummary;
151
+ }
152
+ if (message) {
153
+ return truncateSummary(message);
154
+ }
155
+ return defaultSummary(params.step.command, params.status);
156
+ }
157
+ function latestLifecycleEvent(events) {
158
+ return ([...events]
159
+ .reverse()
160
+ .find((event) => event.source === 'runtime' &&
161
+ (event.name === 'command.started' ||
162
+ event.name === 'command.completed' ||
163
+ event.name === 'command.failed')) ?? null);
164
+ }
165
+ function deriveEventStatus(step, lifecycleEvent) {
166
+ if (step.outputSummary?.success) {
167
+ return 'completed';
168
+ }
169
+ const lifecycleOutcomeType = lifecycleEvent?.attributes && typeof lifecycleEvent.attributes.outcomeType === 'string'
170
+ ? lifecycleEvent.attributes.outcomeType
171
+ : null;
172
+ const outcomeType = step.outputSummary?.outcomeType ?? lifecycleOutcomeType;
173
+ if (outcomeType && BLOCKED_OUTCOME_TYPES.has(outcomeType)) {
174
+ return 'blocked';
175
+ }
176
+ if (lifecycleEvent?.name === 'command.started') {
177
+ return 'started';
178
+ }
179
+ return 'failed';
180
+ }
181
+ function mapEventType(command, status) {
182
+ if (status === 'failed') {
183
+ return 'error';
184
+ }
185
+ switch (command) {
186
+ case 'observe':
187
+ case 'extract':
188
+ case 'screenshot':
189
+ return 'observe';
190
+ default:
191
+ return 'action';
192
+ }
193
+ }
194
+ function defaultSummary(command, status) {
195
+ switch (status) {
196
+ case 'started':
197
+ return `${command} started.`;
198
+ case 'completed':
199
+ return `${command} completed.`;
200
+ case 'blocked':
201
+ return `${command} blocked.`;
202
+ case 'failed':
203
+ return `${command} failed.`;
204
+ }
205
+ }
206
+ function snapshotToPage(snapshot) {
207
+ if (!snapshot) {
208
+ return undefined;
209
+ }
210
+ return {
211
+ ...(snapshot.pageRef ? { ref: snapshot.pageRef } : {}),
212
+ ...(snapshot.url ? { url: snapshot.url } : {}),
213
+ ...(snapshot.title ? { title: snapshot.title } : {}),
214
+ };
215
+ }
216
+ function buildPageSummary(step, runId) {
217
+ const afterSnapshot = step.afterSnapshotId
218
+ ? loadBrowserStateSnapshot(runId, step.afterSnapshotId)
219
+ : null;
220
+ const beforeSnapshot = step.beforeSnapshotId
221
+ ? loadBrowserStateSnapshot(runId, step.beforeSnapshotId)
222
+ : null;
223
+ return snapshotToPage(afterSnapshot) ?? snapshotToPage(beforeSnapshot);
224
+ }
225
+ function buildEventDetails(step, lifecycleEvent) {
226
+ return {
227
+ ...(Object.keys(step.input).length > 0 ? { input: asJsonRecord(step.input) } : {}),
228
+ ...(step.refs ? { refs: { ...step.refs } } : {}),
229
+ ...(step.outputSummary?.outcomeType ? { outcome_type: step.outputSummary.outcomeType } : {}),
230
+ ...(step.outputSummary?.reason ? { reason: step.outputSummary.reason } : {}),
231
+ ...(step.artifactManifestId ? { artifact_manifest_id: step.artifactManifestId } : {}),
232
+ event_count: step.eventIds.length,
233
+ child_span_count: step.childSpans?.length ?? 0,
234
+ linked_span_count: step.otel.linkedSpanIds?.length ?? 0,
235
+ protected_step: step.protectedStep,
236
+ ...(lifecycleEvent
237
+ ? {
238
+ lifecycle_event: {
239
+ name: lifecycleEvent.name,
240
+ emitted_at: lifecycleEvent.emittedAt,
241
+ attributes: asJsonRecord(lifecycleEvent.attributes),
242
+ },
243
+ }
244
+ : {}),
245
+ };
246
+ }
247
+ function buildRunPayload(run) {
248
+ return {
249
+ id: run.runId,
250
+ trace_id: run.traceContext.traceId,
251
+ started_at: run.startedAt,
252
+ ...(run.endedAt ? { ended_at: run.endedAt } : {}),
253
+ source: run.source,
254
+ status: run.status,
255
+ ...(run.profile ? { profile: run.profile } : {}),
256
+ ...(run.hostHints?.[0] ? { site_host: run.hostHints[0] } : {}),
257
+ protected_run: run.protectedRun,
258
+ };
259
+ }
260
+ function buildStepPayload(step, page) {
261
+ return {
262
+ id: step.stepId,
263
+ ordinal: step.ordinal,
264
+ command: step.command,
265
+ started_at: step.startedAt,
266
+ ...(step.endedAt ? { ended_at: step.endedAt } : {}),
267
+ span_id: step.otel.spanId,
268
+ ...(step.outputSummary ? { success: step.outputSummary.success } : {}),
269
+ ...(step.outputSummary?.outcomeType ? { outcome_type: step.outputSummary.outcomeType } : {}),
270
+ ...(step.outputSummary?.message ? { message: step.outputSummary.message } : {}),
271
+ ...(step.outputSummary?.reason ? { reason: step.outputSummary.reason } : {}),
272
+ ...(step.refs?.pageRef
273
+ ? { page_ref: step.refs.pageRef }
274
+ : page?.ref
275
+ ? { page_ref: page.ref }
276
+ : {}),
277
+ ...(step.refs?.targetRef ? { target_ref: step.refs.targetRef } : {}),
278
+ ...(step.refs?.surfaceRef ? { surface_ref: step.refs.surfaceRef } : {}),
279
+ ...(step.refs?.fillRef ? { fill_ref: step.refs.fillRef } : {}),
280
+ ...(step.beforeSnapshotId ? { before_snapshot_id: step.beforeSnapshotId } : {}),
281
+ ...(step.afterSnapshotId ? { after_snapshot_id: step.afterSnapshotId } : {}),
282
+ event_count: step.eventIds.length,
283
+ child_span_count: step.childSpans?.length ?? 0,
284
+ protected_step: step.protectedStep,
285
+ };
286
+ }
287
+ function extractServerLastEventSeq(payload) {
288
+ if (!payload || typeof payload !== 'object') {
289
+ return null;
290
+ }
291
+ const value = payload.current_last_event_seq;
292
+ return typeof value === 'number' && Number.isFinite(value) ? value : null;
293
+ }
294
+ function applyRemoteSessionEnvelope(session, envelope) {
295
+ session.browserSessionId =
296
+ envelope.browser_session_id ?? session.browserSessionId ?? resolveBrowserSessionId(session);
297
+ session.intentSessionId = envelope.session.id;
298
+ session.currentRequestId = envelope.current_request?.id ?? undefined;
299
+ session.lastKnownStatus = envelope.session.status;
300
+ session.lastEventSeq = envelope.session.last_event_seq;
301
+ saveSession(session);
302
+ }
303
+ async function postSessionEventOnce(params) {
304
+ return createRemoteSessionEvent(params.sessionId, params.input, {
305
+ fetchImpl: params.fetchImpl,
306
+ });
307
+ }
308
+ export async function exportRunStepViaSessionEvent(params) {
309
+ const session = loadSession();
310
+ if (!session?.intentSessionId) {
311
+ return { attempted: false, reason: 'workflow_session_missing' };
312
+ }
313
+ if (session.activeRunId !== params.runId) {
314
+ return { attempted: false, reason: 'run_mismatch' };
315
+ }
316
+ const run = loadRunRecord(params.runId);
317
+ if (!run) {
318
+ return { attempted: false, reason: 'run_missing' };
319
+ }
320
+ const step = loadStepRecord(params.runId, params.stepId);
321
+ if (!step) {
322
+ return { attempted: false, reason: 'step_missing' };
323
+ }
324
+ if (!SESSION_EVENT_COMMANDS.has(step.command)) {
325
+ return { attempted: false, reason: 'unsupported_command' };
326
+ }
327
+ if (!params.telemetryPayload) {
328
+ return { attempted: false, reason: 'payload_missing' };
329
+ }
330
+ const lifecycleEvent = latestLifecycleEvent(listRunEventRecordsForStep(params.runId, params.stepId));
331
+ const status = deriveEventStatus(step, lifecycleEvent);
332
+ const page = buildPageSummary(step, params.runId);
333
+ const input = {
334
+ clientEventId: step.stepId,
335
+ sequenceNo: Math.max(session.lastEventSeq ?? 0, 0) + 1,
336
+ type: mapEventType(step.command, status),
337
+ command: step.command,
338
+ status,
339
+ summary: deriveSessionEventSummary({
340
+ step,
341
+ status,
342
+ page,
343
+ lifecycleEvent,
344
+ }),
345
+ timestamp: step.endedAt ?? step.startedAt,
346
+ ...(page ? { page } : {}),
347
+ details: buildEventDetails(step, lifecycleEvent),
348
+ telemetry: {
349
+ step_trace: params.telemetryPayload,
350
+ },
351
+ run: buildRunPayload(run),
352
+ step: buildStepPayload(step, page),
353
+ };
354
+ try {
355
+ const envelope = await postSessionEventOnce({
356
+ sessionId: session.intentSessionId,
357
+ input,
358
+ fetchImpl: params.fetchImpl,
359
+ });
360
+ applyRemoteSessionEnvelope(session, envelope);
361
+ setRunIngestState(params.runId, 'exported');
362
+ return {
363
+ attempted: true,
364
+ success: true,
365
+ status: 200,
366
+ duplicate: envelope.duplicate,
367
+ };
368
+ }
369
+ catch (error) {
370
+ if (error instanceof AgentpayRequestError) {
371
+ const serverLastEventSeq = extractServerLastEventSeq(error.payload);
372
+ if (error.status === 400 && typeof serverLastEventSeq === 'number') {
373
+ try {
374
+ session.lastEventSeq = serverLastEventSeq;
375
+ saveSession(session);
376
+ const envelope = await postSessionEventOnce({
377
+ sessionId: session.intentSessionId,
378
+ input: {
379
+ ...input,
380
+ sequenceNo: serverLastEventSeq + 1,
381
+ },
382
+ fetchImpl: params.fetchImpl,
383
+ });
384
+ applyRemoteSessionEnvelope(session, envelope);
385
+ setRunIngestState(params.runId, 'exported');
386
+ return {
387
+ attempted: true,
388
+ success: true,
389
+ status: 200,
390
+ duplicate: envelope.duplicate,
391
+ };
392
+ }
393
+ catch (retryError) {
394
+ if (retryError instanceof AgentpayRequestError && retryError.status === 404) {
395
+ try {
396
+ const remoteSession = await getRemoteSession(session.intentSessionId, {
397
+ fetchImpl: params.fetchImpl,
398
+ });
399
+ applyRemoteSessionEnvelope(session, remoteSession);
400
+ }
401
+ catch {
402
+ }
403
+ }
404
+ setRunIngestState(params.runId, 'export_failed');
405
+ return {
406
+ attempted: true,
407
+ success: false,
408
+ status: retryError instanceof AgentpayRequestError ? retryError.status : undefined,
409
+ reason: retryError instanceof Error ? retryError.message : String(retryError),
410
+ };
411
+ }
412
+ }
413
+ setRunIngestState(params.runId, 'export_failed');
414
+ return {
415
+ attempted: true,
416
+ success: false,
417
+ status: error.status,
418
+ reason: error.message,
419
+ };
420
+ }
421
+ setRunIngestState(params.runId, 'export_failed');
422
+ return {
423
+ attempted: true,
424
+ success: false,
425
+ reason: error instanceof Error ? error.message : String(error),
426
+ };
427
+ }
428
+ }
package/dist/session.d.ts CHANGED
@@ -6,7 +6,7 @@ import type { BrowseRuntimeState } from './runtime-state.js';
6
6
  import type { StoredSecretFieldKey } from './secrets/types.js';
7
7
  import type { ProxyConfig } from './solver/types.js';
8
8
  export interface CachedTransientSecretEntry {
9
- intentId: string;
9
+ requestId: string;
10
10
  fillRef: string;
11
11
  storedSecretRef: string;
12
12
  cachedAt: string;
@@ -14,7 +14,16 @@ export interface CachedTransientSecretEntry {
14
14
  expiresAt?: string;
15
15
  values: Partial<Record<StoredSecretFieldKey, string>>;
16
16
  }
17
- export interface BrowseSession {
17
+ export interface BrowseWorkflowContext {
18
+ browserSessionId?: string;
19
+ activeRunId?: string;
20
+ intentSessionId?: string;
21
+ currentRequestId?: string;
22
+ lastKnownStatus?: string;
23
+ lastEventSeq?: number;
24
+ transientSecretCache?: Record<string, CachedTransientSecretEntry>;
25
+ }
26
+ export interface BrowseSession extends BrowseWorkflowContext {
18
27
  cdpUrl: string;
19
28
  pid: number;
20
29
  launchedAt: string;
@@ -26,7 +35,6 @@ export interface BrowseSession {
26
35
  captchaSolve?: boolean;
27
36
  };
28
37
  runtime?: BrowseRuntimeState;
29
- transientSecretCache?: Record<string, CachedTransientSecretEntry>;
30
38
  }
31
39
  export interface BrowseSessionIdentity {
32
40
  browserInstanceRef: string;
@@ -40,14 +48,15 @@ export interface BrowseSessionTransport {
40
48
  proxyMode: 'direct' | 'proxy';
41
49
  proxy?: ProxyConfig;
42
50
  }
51
+ export declare function resolveBrowserSessionId(session: Pick<BrowseSession, 'identity' | 'pid'>): string;
43
52
  export declare function cleanupTransientSecretCache(session: BrowseSession, options?: {
44
53
  now?: string;
45
54
  }): boolean;
46
55
  export declare function cacheTransientSecret(session: BrowseSession, entry: CachedTransientSecretEntry): CachedTransientSecretEntry;
47
- export declare function getCachedTransientSecret(session: BrowseSession, intentId: string, options?: {
56
+ export declare function getCachedTransientSecret(session: BrowseSession, requestId: string, options?: {
48
57
  now?: string;
49
58
  }): CachedTransientSecretEntry | null;
50
- export declare function deleteCachedTransientSecret(session: BrowseSession, intentId: string): boolean;
59
+ export declare function deleteCachedTransientSecret(session: BrowseSession, requestId: string): boolean;
51
60
  export declare function serializeSession(session: BrowseSession): string;
52
61
  export declare function buildOwnedSession(session: Omit<BrowseSession, 'port' | 'identity'>): BrowseSession;
53
62
  export declare function saveSession(session: BrowseSession): void;
@@ -58,6 +67,6 @@ export declare function supportsCaptchaSolve(session: BrowseSession | null): boo
58
67
  export declare function isOwnedSession(session: BrowseSession | null | undefined): session is BrowseSession & {
59
68
  identity: BrowseSessionIdentity;
60
69
  };
61
- /** Check if the Chrome process from the session is still alive. */
62
- export declare function isSessionAlive(session: BrowseSession): boolean;
70
+ /** Check if the persisted session still points at the same live browser. */
71
+ export declare function isSessionAlive(session: BrowseSession): Promise<boolean>;
63
72
  //# sourceMappingURL=session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}