@mercuryo-ai/agentbrowse 0.2.57 → 0.2.61

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 (100) hide show
  1. package/README.md +76 -57
  2. package/dist/browser-session-state.d.ts +39 -0
  3. package/dist/browser-session-state.d.ts.map +1 -1
  4. package/dist/browser-session-state.js +63 -1
  5. package/dist/command-name.js +1 -1
  6. package/dist/commands/act.d.ts.map +1 -1
  7. package/dist/commands/act.js +540 -528
  8. package/dist/commands/action-executor-helpers.d.ts.map +1 -1
  9. package/dist/commands/action-executor-helpers.js +10 -8
  10. package/dist/commands/attach.d.ts.map +1 -1
  11. package/dist/commands/attach.js +5 -10
  12. package/dist/commands/browser-connection-failure.d.ts +9 -0
  13. package/dist/commands/browser-connection-failure.d.ts.map +1 -0
  14. package/dist/commands/browser-connection-failure.js +15 -0
  15. package/dist/commands/browser-status.d.ts.map +1 -1
  16. package/dist/commands/browser-status.js +26 -30
  17. package/dist/commands/click-activation-policy.d.ts.map +1 -1
  18. package/dist/commands/click-activation-policy.js +6 -2
  19. package/dist/commands/close.d.ts.map +1 -1
  20. package/dist/commands/close.js +5 -0
  21. package/dist/commands/extract.d.ts.map +1 -1
  22. package/dist/commands/extract.js +147 -144
  23. package/dist/commands/launch.d.ts +0 -1
  24. package/dist/commands/launch.d.ts.map +1 -1
  25. package/dist/commands/launch.js +13 -16
  26. package/dist/commands/navigate.d.ts.map +1 -1
  27. package/dist/commands/navigate.js +79 -73
  28. package/dist/commands/observe-inventory.d.ts +6 -1
  29. package/dist/commands/observe-inventory.d.ts.map +1 -1
  30. package/dist/commands/observe-inventory.js +331 -8
  31. package/dist/commands/observe-persistence.d.ts.map +1 -1
  32. package/dist/commands/observe-persistence.js +2 -0
  33. package/dist/commands/observe-projection.d.ts +3 -2
  34. package/dist/commands/observe-projection.d.ts.map +1 -1
  35. package/dist/commands/observe-projection.js +1 -0
  36. package/dist/commands/observe-protected.d.ts +3 -1
  37. package/dist/commands/observe-protected.d.ts.map +1 -1
  38. package/dist/commands/observe-protected.js +23 -1
  39. package/dist/commands/observe-semantics.d.ts.map +1 -1
  40. package/dist/commands/observe-semantics.js +70 -0
  41. package/dist/commands/observe.d.ts +1 -0
  42. package/dist/commands/observe.d.ts.map +1 -1
  43. package/dist/commands/observe.js +260 -270
  44. package/dist/commands/screenshot.d.ts.map +1 -1
  45. package/dist/commands/screenshot.js +50 -64
  46. package/dist/control-semantics.d.ts.map +1 -1
  47. package/dist/control-semantics.js +5 -0
  48. package/dist/date-value-normalization.d.ts +16 -0
  49. package/dist/date-value-normalization.d.ts.map +1 -0
  50. package/dist/date-value-normalization.js +117 -0
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +5 -24
  53. package/dist/library.d.ts +5 -1
  54. package/dist/library.d.ts.map +1 -1
  55. package/dist/library.js +4 -1
  56. package/dist/protected-fill.d.ts +3 -2
  57. package/dist/protected-fill.d.ts.map +1 -1
  58. package/dist/protected-fill.js +46 -7
  59. package/dist/runtime-protected-state.d.ts.map +1 -1
  60. package/dist/runtime-protected-state.js +8 -1
  61. package/dist/runtime-state.d.ts +11 -0
  62. package/dist/runtime-state.d.ts.map +1 -1
  63. package/dist/secrets/form-matcher.d.ts +1 -2
  64. package/dist/secrets/form-matcher.d.ts.map +1 -1
  65. package/dist/secrets/form-matcher.js +125 -119
  66. package/dist/secrets/matching-helpers.d.ts +13 -0
  67. package/dist/secrets/matching-helpers.d.ts.map +1 -0
  68. package/dist/secrets/matching-helpers.js +147 -0
  69. package/dist/secrets/observed-field-resolution.d.ts +43 -0
  70. package/dist/secrets/observed-field-resolution.d.ts.map +1 -0
  71. package/dist/secrets/observed-field-resolution.js +223 -0
  72. package/dist/secrets/protected-field-semantics.d.ts.map +1 -1
  73. package/dist/secrets/protected-field-semantics.js +3 -2
  74. package/dist/secrets/protected-fill.d.ts +3 -1
  75. package/dist/secrets/protected-fill.d.ts.map +1 -1
  76. package/dist/secrets/protected-fill.js +31 -0
  77. package/dist/secrets/protected-value-adapters.d.ts.map +1 -1
  78. package/dist/secrets/protected-value-adapters.js +14 -22
  79. package/dist/secrets/types.d.ts +3 -0
  80. package/dist/secrets/types.d.ts.map +1 -1
  81. package/dist/sticky-owner-host-entry.d.ts +2 -0
  82. package/dist/sticky-owner-host-entry.d.ts.map +1 -0
  83. package/dist/sticky-owner-host-entry.js +97 -0
  84. package/dist/sticky-owner.d.ts +15 -0
  85. package/dist/sticky-owner.d.ts.map +1 -0
  86. package/dist/sticky-owner.js +431 -0
  87. package/docs/README.md +15 -2
  88. package/docs/api-reference.md +13 -3
  89. package/docs/assistive-runtime.md +63 -7
  90. package/docs/configuration.md +48 -8
  91. package/docs/getting-started.md +42 -9
  92. package/docs/integration-checklist.md +8 -7
  93. package/docs/protected-fill.md +40 -7
  94. package/docs/testing.md +4 -3
  95. package/docs/troubleshooting.md +126 -36
  96. package/examples/README.md +9 -2
  97. package/package.json +8 -3
  98. package/dist/protected-fill-browser.d.ts +0 -22
  99. package/dist/protected-fill-browser.d.ts.map +0 -1
  100. package/dist/protected-fill-browser.js +0 -52
@@ -6,8 +6,10 @@ import { getProtectedExposure } from '../runtime-protected-state.js';
6
6
  import { saveSession } from '../session.js';
7
7
  import { outputFailure, outputJSON, outputContractFailure, info } from '../output.js';
8
8
  import { captureDiagnosticSnapshotBestEffort, finishDiagnosticStepBestEffort, recordCommandLifecycleEventBestEffort, startDiagnosticStep, } from '../diagnostics.js';
9
- import { connectPlaywright, disconnectPlaywright, resolveCurrentPageContext, syncSessionPage, } from '../playwright-runtime.js';
9
+ import { resolveCurrentPageContext, syncSessionPage } from '../playwright-runtime.js';
10
10
  import { buildProtectedScreenshotBlockedResult, } from '../secrets/protected-artifact-guard.js';
11
+ import { describeBrowserConnectionFailure } from './browser-connection-failure.js';
12
+ import { withStickyOwnerBrowser } from '../sticky-owner.js';
11
13
  /** Stable top-level error codes returned by `screenshot(...)`. */
12
14
  export const SCREENSHOT_ERROR_CODES = [
13
15
  'browser_connection_failed',
@@ -172,81 +174,65 @@ export async function screenshotBrowser(session, filePath) {
172
174
  protectedStep: Boolean(initialProtectedExposure),
173
175
  },
174
176
  });
175
- let browser = null;
176
- let failureMessage = null;
177
- let page = null;
178
177
  try {
179
- browser = await connectPlaywright(session.cdpUrl);
180
- }
181
- catch (err) {
182
- return buildScreenshotContractFailureResult(session, {
183
- step: screenshotStepHandle,
184
- error: 'browser_connection_failed',
185
- outcomeType: 'blocked',
186
- message: 'Screenshot capture could not start because AgentBrowse failed to connect to the browser.',
187
- reason: err instanceof Error ? err.message : String(err),
188
- runId: session.activeRunId,
189
- stepId: screenshotStep?.stepId,
178
+ return await withStickyOwnerBrowser(session, async (browser) => {
179
+ try {
180
+ const resolvedPage = await resolveCurrentPageContext(browser, session);
181
+ pageRef = resolvedPage.pageRef;
182
+ const page = resolvedPage.page;
183
+ const recoveredProtectedExposure = getProtectedExposure(session, pageRef) ?? (!page ? initialProtectedExposure : null);
184
+ if (recoveredProtectedExposure) {
185
+ if (page && pageRef !== initialPageRef) {
186
+ setCurrentPage(session, pageRef);
187
+ }
188
+ return buildScreenshotFailureResult(session, {
189
+ step: screenshotStepHandle,
190
+ ...buildProtectedScreenshotBlockedResult(recoveredProtectedExposure),
191
+ runId: session.activeRunId,
192
+ stepId: screenshotStep?.stepId,
193
+ });
194
+ }
195
+ if (!page) {
196
+ throw new Error('no_open_pages');
197
+ }
198
+ await page.screenshot({ path: outputPath });
199
+ const { url, title } = await syncSessionPage(session, pageRef, page);
200
+ setCurrentPage(session, pageRef);
201
+ return buildScreenshotSuccessResult({
202
+ session,
203
+ step: screenshotStepHandle,
204
+ runId: session.activeRunId,
205
+ stepId: screenshotStep?.stepId,
206
+ pageRef,
207
+ path: outputPath,
208
+ url,
209
+ title,
210
+ });
211
+ }
212
+ catch (error) {
213
+ throw new Error(`screenshot_failed:${error instanceof Error ? error.message : String(error)}`);
214
+ }
190
215
  });
191
216
  }
192
- try {
193
- const resolvedPage = await resolveCurrentPageContext(browser, session);
194
- pageRef = resolvedPage.pageRef;
195
- page = resolvedPage.page;
196
- }
197
217
  catch (err) {
198
- failureMessage = `Screenshot failed: ${err instanceof Error ? err.message : String(err)}`;
199
- }
200
- const recoveredProtectedExposure = getProtectedExposure(session, pageRef) ?? (!page ? initialProtectedExposure : null);
201
- if (recoveredProtectedExposure) {
202
- if (page && pageRef !== initialPageRef) {
203
- setCurrentPage(session, pageRef);
204
- }
205
- if (browser) {
206
- await disconnectPlaywright(browser);
207
- browser = null;
208
- }
209
- return buildScreenshotFailureResult(session, {
210
- step: screenshotStepHandle,
211
- ...buildProtectedScreenshotBlockedResult(recoveredProtectedExposure),
212
- runId: session.activeRunId,
213
- stepId: screenshotStep?.stepId,
218
+ const reason = err instanceof Error ? err.message : String(err);
219
+ const isCommandFailure = reason.startsWith('screenshot_failed:');
220
+ const browserConnectionFailure = describeBrowserConnectionFailure(err, {
221
+ defaultMessage: 'Screenshot capture could not start because AgentBrowse failed to connect to the browser.',
222
+ unrecoverableSessionMessage: 'Screenshot capture could not start because the previous browser session is no longer reachable.',
214
223
  });
215
- }
216
- try {
217
- if (!page) {
218
- throw new Error(failureMessage?.replace(/^Screenshot failed:\s*/, '') ?? 'no_open_pages');
219
- }
220
- await page.screenshot({ path: outputPath });
221
- const { url, title } = await syncSessionPage(session, pageRef, page);
222
- setCurrentPage(session, pageRef);
223
- return buildScreenshotSuccessResult({
224
- session,
225
- step: screenshotStepHandle,
226
- runId: session.activeRunId,
227
- stepId: screenshotStep?.stepId,
228
- pageRef,
229
- path: outputPath,
230
- url,
231
- title,
232
- });
233
- }
234
- catch (err) {
235
224
  return buildScreenshotContractFailureResult(session, {
236
225
  step: screenshotStepHandle,
237
- error: 'screenshot_failed',
226
+ error: isCommandFailure ? 'screenshot_failed' : 'browser_connection_failed',
238
227
  outcomeType: 'blocked',
239
- message: 'Screenshot capture failed.',
240
- reason: err instanceof Error ? err.message : String(err),
228
+ message: isCommandFailure ? 'Screenshot capture failed.' : browserConnectionFailure.message,
229
+ reason: isCommandFailure
230
+ ? reason.replace(/^screenshot_failed:/, '')
231
+ : browserConnectionFailure.reason,
241
232
  runId: session.activeRunId,
242
233
  stepId: screenshotStep?.stepId,
243
234
  });
244
235
  }
245
- finally {
246
- if (browser) {
247
- await disconnectPlaywright(browser);
248
- }
249
- }
250
236
  }
251
237
  /** CLI wrapper for `screenshotBrowser(...)` that persists session changes and writes JSON output. */
252
238
  export async function screenshot(session, filePath) {
@@ -1 +1 @@
1
- {"version":3,"file":"control-semantics.d.ts","sourceRoot":"","sources":["../src/control-semantics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AAEzE,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAwCtF,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,oBAAoB,GAC1B,mBAAmB,GAAG,SAAS,CAuCjC;AA6LD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAYxE;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,oBAAoB,GAAG,mBAAmB,EAAE,CA4G/F;AAED,wBAAgB,0BAA0B,CACxC,MAAM,CAAC,EAAE,gBAAgB,EACzB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE;IACP,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC1B,GACL,uBAAuB,CAyBzB;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,aAAa,CAAC,mBAAmB,CAAC,GACjD,mBAAmB,GAAG,SAAS,CA0EjC;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,aAAa,CAAC,mBAAmB,CAAC,GACjD,sBAAsB,GAAG,SAAS,CA6CpC"}
1
+ {"version":3,"file":"control-semantics.d.ts","sourceRoot":"","sources":["../src/control-semantics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AAEzE,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAwCtF,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,oBAAoB,GAC1B,mBAAmB,GAAG,SAAS,CAuCjC;AA6LD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAYxE;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,oBAAoB,GAAG,mBAAmB,EAAE,CA4G/F;AAED,wBAAgB,0BAA0B,CACxC,MAAM,CAAC,EAAE,gBAAgB,EACzB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE;IACP,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC1B,GACL,uBAAuB,CAyBzB;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,aAAa,CAAC,mBAAmB,CAAC,GACjD,mBAAmB,GAAG,SAAS,CA0EjC;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,aAAa,CAAC,mBAAmB,CAAC,GACjD,sBAAsB,GAAG,SAAS,CAqDpC"}
@@ -387,6 +387,7 @@ export function inferAcceptancePolicyFromFacts(facts, allowedActions) {
387
387
  const states = facts.states;
388
388
  const kind = normalizeText(facts.kind);
389
389
  const role = normalizeText(facts.role);
390
+ const inputType = normalizeText(facts.inputType);
390
391
  const controlFamily = inferControlFamilyFromFacts(facts, allowedActions);
391
392
  if (facts.structure?.family === 'structured-grid') {
392
393
  return facts.structure.variant === 'date-cell' ? 'date-selection' : 'selection';
@@ -409,6 +410,10 @@ export function inferAcceptancePolicyFromFacts(facts, allowedActions) {
409
410
  if (role === 'link' || kind === 'link') {
410
411
  return 'navigation';
411
412
  }
413
+ if (inputType === 'submit' &&
414
+ (kind === 'button' || role === 'button' || isButtonLikeInputFacts(facts))) {
415
+ return 'submit';
416
+ }
412
417
  if (!legacyMethod && SUBMIT_LABEL_RE.test(label)) {
413
418
  return 'submit';
414
419
  }
@@ -0,0 +1,16 @@
1
+ export type DateValueNormalizationErrorReason = 'ambiguous_date_value' | 'incomplete_date_value' | 'invalid_date_value';
2
+ export type NormalizedDateValueResult = {
3
+ kind: 'normalized';
4
+ iso: string;
5
+ year: string;
6
+ month: string;
7
+ day: string;
8
+ } | {
9
+ kind: 'error';
10
+ reason: DateValueNormalizationErrorReason;
11
+ } | {
12
+ kind: 'not_date_like';
13
+ };
14
+ export declare function isDateValueNormalizationErrorReason(value: string): value is DateValueNormalizationErrorReason;
15
+ export declare function normalizeStructuredDateValue(value: string): NormalizedDateValueResult;
16
+ //# sourceMappingURL=date-value-normalization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-value-normalization.d.ts","sourceRoot":"","sources":["../src/date-value-normalization.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iCAAiC,GACzC,sBAAsB,GACtB,uBAAuB,GACvB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,yBAAyB,GACjC;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,iCAAiC,CAAC;CAC3C,GACD;IACE,IAAI,EAAE,eAAe,CAAC;CACvB,CAAC;AAsDN,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,MAAM,GACZ,KAAK,IAAI,iCAAiC,CAM5C;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,yBAAyB,CAuFrF"}
@@ -0,0 +1,117 @@
1
+ const ISO_DATE_RE = /^(\d{4})-(\d{2})-(\d{2})$/;
2
+ const YEAR_FIRST_DATE_RE = /^(\d{4})[./-](\d{1,2})[./-](\d{1,2})$/;
3
+ const DAY_OR_MONTH_FIRST_DATE_RE = /^(\d{1,2})[./-](\d{1,2})[./-](\d{4})$/;
4
+ const PARTIAL_DATE_RE = /^(?:\d{4}[./-]\d{1,2}|\d{1,2}[./-](?:\d{2}|\d{4}))$/;
5
+ function padDatePart(value) {
6
+ return String(value).padStart(2, '0');
7
+ }
8
+ function buildNormalizedDateValue(year, month, day) {
9
+ if (!Number.isInteger(year) ||
10
+ !Number.isInteger(month) ||
11
+ !Number.isInteger(day) ||
12
+ month < 1 ||
13
+ month > 12 ||
14
+ day < 1 ||
15
+ day > 31) {
16
+ return {
17
+ kind: 'error',
18
+ reason: 'invalid_date_value',
19
+ };
20
+ }
21
+ const date = new Date(Date.UTC(year, month - 1, day));
22
+ if (date.getUTCFullYear() !== year ||
23
+ date.getUTCMonth() !== month - 1 ||
24
+ date.getUTCDate() !== day) {
25
+ return {
26
+ kind: 'error',
27
+ reason: 'invalid_date_value',
28
+ };
29
+ }
30
+ const paddedMonth = padDatePart(month);
31
+ const paddedDay = padDatePart(day);
32
+ return {
33
+ kind: 'normalized',
34
+ iso: `${String(year)}-${paddedMonth}-${paddedDay}`,
35
+ year: String(year),
36
+ month: paddedMonth,
37
+ day: paddedDay,
38
+ };
39
+ }
40
+ export function isDateValueNormalizationErrorReason(value) {
41
+ return (value === 'ambiguous_date_value' ||
42
+ value === 'incomplete_date_value' ||
43
+ value === 'invalid_date_value');
44
+ }
45
+ export function normalizeStructuredDateValue(value) {
46
+ const trimmed = value.trim();
47
+ if (trimmed.length === 0) {
48
+ return {
49
+ kind: 'not_date_like',
50
+ };
51
+ }
52
+ const isoMatch = trimmed.match(ISO_DATE_RE);
53
+ if (isoMatch) {
54
+ return buildNormalizedDateValue(Number(isoMatch[1]), Number(isoMatch[2]), Number(isoMatch[3]));
55
+ }
56
+ const yearFirstMatch = trimmed.match(YEAR_FIRST_DATE_RE);
57
+ if (yearFirstMatch) {
58
+ return buildNormalizedDateValue(Number(yearFirstMatch[1]), Number(yearFirstMatch[2]), Number(yearFirstMatch[3]));
59
+ }
60
+ const dayOrMonthFirstMatch = trimmed.match(DAY_OR_MONTH_FIRST_DATE_RE);
61
+ if (dayOrMonthFirstMatch) {
62
+ const first = Number(dayOrMonthFirstMatch[1]);
63
+ const second = Number(dayOrMonthFirstMatch[2]);
64
+ const year = Number(dayOrMonthFirstMatch[3]);
65
+ const dayFirstCandidate = first >= 1 && first <= 31 && second >= 1 && second <= 12;
66
+ const monthFirstCandidate = first >= 1 && first <= 12 && second >= 1 && second <= 31;
67
+ if (dayFirstCandidate && monthFirstCandidate) {
68
+ const dayFirst = buildNormalizedDateValue(year, second, first);
69
+ const monthFirst = buildNormalizedDateValue(year, first, second);
70
+ if (dayFirst.kind === 'normalized' && monthFirst.kind === 'normalized') {
71
+ if (dayFirst.iso === monthFirst.iso) {
72
+ return dayFirst;
73
+ }
74
+ return {
75
+ kind: 'error',
76
+ reason: 'ambiguous_date_value',
77
+ };
78
+ }
79
+ if (dayFirst.kind === 'normalized') {
80
+ return dayFirst;
81
+ }
82
+ if (monthFirst.kind === 'normalized') {
83
+ return monthFirst;
84
+ }
85
+ return {
86
+ kind: 'error',
87
+ reason: 'invalid_date_value',
88
+ };
89
+ }
90
+ if (dayFirstCandidate) {
91
+ return buildNormalizedDateValue(year, second, first);
92
+ }
93
+ if (monthFirstCandidate) {
94
+ return buildNormalizedDateValue(year, first, second);
95
+ }
96
+ return {
97
+ kind: 'error',
98
+ reason: 'invalid_date_value',
99
+ };
100
+ }
101
+ if (PARTIAL_DATE_RE.test(trimmed)) {
102
+ return {
103
+ kind: 'error',
104
+ reason: 'incomplete_date_value',
105
+ };
106
+ }
107
+ const separatorCount = trimmed.split(/[./-]/).length - 1;
108
+ if (separatorCount >= 2 && /\d/.test(trimmed)) {
109
+ return {
110
+ kind: 'error',
111
+ reason: 'invalid_date_value',
112
+ };
113
+ }
114
+ return {
115
+ kind: 'not_date_like',
116
+ };
117
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAmQA,iBAAe,IAAI,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqJhE;AAED,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAWzF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAuOA,iBAAe,IAAI,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoJhE;AAED,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAWzF"}
package/dist/index.js CHANGED
@@ -22,14 +22,9 @@ Commands:
22
22
  close Close browser and clean up
23
23
 
24
24
  Options:
25
- --compact Launch browser in compact window size (1280x900, default)
26
- --full Launch browser in full-size window
27
- --profile <name> Solver profile name for launch (default: "default")
28
25
  --proxy [url] Launch through configured proxy, or use one-off override URL
29
26
  --provider <name> Optional provider label for attach (for example "browserbase")
30
- --headful Explicit alias for visible browser mode
31
- --headless Explicit alias for headless browser mode (default)
32
- --path <file> Output path for screenshot
27
+ --headful Launch a visible browser window
33
28
  --help Show this help message`;
34
29
  }
35
30
  const KNOWN_COMMANDS = new Set([
@@ -95,33 +90,20 @@ function getPositionals(args, valueFlags = []) {
95
90
  }
96
91
  function parseLaunchArgs(args) {
97
92
  let url;
98
- let compact = true;
99
93
  let profile;
100
94
  let headless;
101
95
  let useProxy = false;
102
96
  let proxy;
103
97
  for (let i = 0; i < args.length; i++) {
104
98
  const arg = args[i];
105
- if (arg === '--headless') {
106
- headless = true;
107
- continue;
108
- }
109
99
  if (arg === '--headful') {
110
100
  headless = false;
111
101
  continue;
112
102
  }
113
- if (arg === '--compact') {
114
- compact = true;
115
- continue;
116
- }
117
- if (arg === '--full') {
118
- compact = false;
119
- continue;
120
- }
121
103
  if (arg === '--profile') {
122
104
  const value = args[i + 1];
123
105
  if (!value || value.startsWith('--')) {
124
- outputError(`Usage: ${browseCommand('launch', '[url]', '[--profile <name>]', '[--proxy [url]]', '[--headful|--headless]')}`);
106
+ outputError(`Usage: ${browseCommand('launch', '[url]', '[--proxy [url]]', '[--headful]')}`);
125
107
  }
126
108
  profile = value;
127
109
  i += 1;
@@ -130,7 +112,7 @@ function parseLaunchArgs(args) {
130
112
  if (arg.startsWith('--proxy=')) {
131
113
  const value = arg.slice('--proxy='.length).trim();
132
114
  if (!value) {
133
- outputError(`Usage: ${browseCommand('launch', '[url]', '[--profile <name>]', '[--proxy [url]]', '[--headful|--headless]')}`);
115
+ outputError(`Usage: ${browseCommand('launch', '[url]', '[--proxy [url]]', '[--headful]')}`);
134
116
  }
135
117
  useProxy = true;
136
118
  proxy = value;
@@ -150,11 +132,11 @@ function parseLaunchArgs(args) {
150
132
  outputError(`Unknown launch option: ${arg}`);
151
133
  }
152
134
  if (url) {
153
- outputError(`Usage: ${browseCommand('launch', '[url]', '[--profile <name>]', '[--proxy [url]]', '[--headful|--headless]')}`);
135
+ outputError(`Usage: ${browseCommand('launch', '[url]', '[--proxy [url]]', '[--headful]')}`);
154
136
  }
155
137
  url = arg;
156
138
  }
157
- return { url, compact, profile, headless, useProxy, proxy };
139
+ return { url, profile, headless, useProxy, proxy };
158
140
  }
159
141
  function parseAttachArgs(args) {
160
142
  let cdpUrl;
@@ -226,7 +208,6 @@ async function main(argv = process.argv) {
226
208
  await Promise.resolve(close(existingSession)).catch(() => undefined);
227
209
  deleteWorkflowContext();
228
210
  const launchResult = await launch(launchArgs.url, {
229
- compact: launchArgs.compact,
230
211
  ...(launchArgs.profile ? { profile: launchArgs.profile } : {}),
231
212
  ...(typeof launchArgs.headless === 'boolean' ? { headless: launchArgs.headless } : {}),
232
213
  useProxy: launchArgs.useProxy,
package/dist/library.d.ts CHANGED
@@ -1,15 +1,19 @@
1
- export { createBrowserSessionStore, deleteBrowserSession, getSessionPort, isAttachedSession, isOwnedSession, isSessionAlive, loadBrowserSession, resolveBrowserSessionId, saveBrowserSession, serializeBrowserSession, supportsCaptchaSolve, buildAttachedSession, buildOwnedSession, type BrowserSessionCapabilities, type BrowserSessionStore, type BrowserSessionState, type BrowseSessionIdentity, type BrowseSessionTransport, } from './browser-session-state.js';
1
+ export { createBrowserSessionStore, deleteBrowserSession, getSessionPort, isAttachedSession, isOwnedSession, isSessionAlive, loadBrowserSession, resolveBrowserSessionId, saveBrowserSession, serializeBrowserSession, supportsCaptchaSolve, buildAttachedSession, buildOwnedSession, buildStickyOwnerMetadata, canPersistStickyOwnerMetadata, type BrowserSessionCapabilities, type BrowserSessionStore, type BrowserSessionState, type BrowseSessionIdentity, type BrowseSessionTransport, type StickyOwnerInProcessTransport, type StickyOwnerMetadata, type StickyOwnerPlaywrightBindTransport, type StickyOwnerState, type StickyOwnerTransport, STICKY_OWNER_SCHEMA_VERSION, } from './browser-session-state.js';
2
2
  export { attach, ATTACH_ERROR_CODES, ATTACH_OUTCOME_TYPES, type AttachErrorCode, type AttachFailureResult, type AttachOutcomeType, type AttachOptions, type AttachResult, type AttachSuccessResult, } from './commands/attach.js';
3
3
  export { AgentbrowseAssistiveRuntimeMissingError, AssistiveStructuredOutputTruncatedError, configureAgentbrowseAssistiveRuntime, resetAgentbrowseAssistiveRuntime, type AgentbrowseAssistiveChatCompletionOptions, type AgentbrowseAssistiveChatCompletionRequest, type AgentbrowseAssistiveChatCompletionResult, type AgentbrowseAssistiveChatMessage, type AgentbrowseAssistiveImageInput, type AgentbrowseAssistiveLlmClient, type AgentbrowseAssistiveLlmUsage, type AgentbrowseAssistiveMessageContentPart, type AgentbrowseAssistiveResponseModel, type AgentbrowseAssistiveRuntime, } from './assistive-runtime.js';
4
4
  export { createAgentbrowseClient, type AgentbrowseClient, type AgentbrowseClientOptions, } from './client.js';
5
5
  export { configureAgentbrowseDiagnostics, resetAgentbrowseDiagnostics, type DiagnosticArtifactManifest, type DiagnosticArtifactManifestInput, type AgentbrowseDiagnosticsHooks, type DiagnosticChildSpanInput, type DiagnosticLifecycleEventInput, type DiagnosticSnapshotInput, type DiagnosticStepFinishInput, type DiagnosticStepHandle, type DiagnosticStepStartInput, } from './diagnostics.js';
6
6
  export { setSolverConfigStoreOverride, type SolverConfigStoreOverride, } from './solver/config.js';
7
7
  export type { BrowserCommandSession } from './browser-session-state.js';
8
+ export type { TargetDescriptor } from './runtime-state.js';
8
9
  export { browserStatus as status, BROWSER_STATUS_OUTCOME_TYPES, type BrowserStatusAliveResult, type BrowserStatusCurrentPageMismatch, type BrowserStatusNotRunningResult, type BrowserStatusOutcomeType, type BrowserStatusProtectedExposureResult, type BrowserStatusResult, type BrowserStatusRuntimeSummary, } from './commands/browser-status.js';
9
10
  export { actBrowser as act, ACT_ERROR_CODES, ACT_OUTCOME_TYPES, isBrowseAction, BROWSE_ACTIONS, type ActErrorCode, type ActExecutionFailureResult, type ActFailureResult, type ActOutcomeType, type ActPreflightFailureResult, type ActResult, type ActSuccessResult, type BrowseAction, } from './commands/act.js';
10
11
  export { extractBrowser as extract, EXTRACT_ERROR_CODES, EXTRACT_OUTCOME_TYPES, type ExtractErrorCode, type ExtractFailureResult, type ExtractOutcomeType, type ExtractResult, type ExtractSchemaDescriptor, type ExtractSchemaInput, type ExtractSchemaValue, type ExtractSuccessResult, } from './commands/extract.js';
11
12
  export { observeBrowser as observe, OBSERVE_ERROR_CODES, OBSERVE_OUTCOME_TYPES, type ObserveErrorCode, type ObserveExecutionMode, type ObserveFailureResult, type ObserveFillableForm, type ObserveOutcomeType, type ObserveResult, type ObserveScope, type ObserveSuccessResult, type ObserveSignal, type ObserveTarget, } from './commands/observe.js';
13
+ export { classifyObservePageState, shouldSuppressFillableFormsForObserve, type ObservePageState, } from './commands/observe-page-state.js';
14
+ export { resolveObservedField, type ObservedFieldCandidate, type ObservedFieldValueSource, type ObservedFieldValueType, type ResolveObservedFieldOptions, type ResolveObservedFieldResult, } from './secrets/observed-field-resolution.js';
12
15
  export { close, CLOSE_ERROR_CODES, CLOSE_OUTCOME_TYPES, type CloseErrorCode, type CloseFailureResult, type CloseOutcomeType, type CloseResult, type CloseSuccessResult, } from './commands/close.js';
16
+ export { restoreBrowserSessionOwner, type RestoreBrowserSessionOwnerResult, } from './sticky-owner.js';
13
17
  export { launch, LAUNCH_ERROR_CODES, LAUNCH_OUTCOME_TYPES, type LaunchErrorCode, type LaunchOptions, type LaunchFailureResult, type LaunchOutcomeType, type LaunchResult, type LaunchSuccessResult, } from './commands/launch.js';
14
18
  export { navigateBrowser as navigate, NAVIGATE_ERROR_CODES, NAVIGATE_OUTCOME_TYPES, type NavigateErrorCode, type NavigateFailureResult, type NavigateOutcomeType, type NavigateResult, type NavigateSuccessResult, } from './commands/navigate.js';
15
19
  export { screenshotBrowser as screenshot, SCREENSHOT_ERROR_CODES, SCREENSHOT_OUTCOME_TYPES, type ScreenshotErrorCode, type ScreenshotFailureResult, type ScreenshotOutcomeType, type ScreenshotResult, type ScreenshotSuccessResult, } from './commands/screenshot.js';
@@ -1 +1 @@
1
- {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../src/library.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../src/library.ts"],"names":[],"mappings":"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"}
package/dist/library.js CHANGED
@@ -1,4 +1,4 @@
1
- export { createBrowserSessionStore, deleteBrowserSession, getSessionPort, isAttachedSession, isOwnedSession, isSessionAlive, loadBrowserSession, resolveBrowserSessionId, saveBrowserSession, serializeBrowserSession, supportsCaptchaSolve, buildAttachedSession, buildOwnedSession, } from './browser-session-state.js';
1
+ export { createBrowserSessionStore, deleteBrowserSession, getSessionPort, isAttachedSession, isOwnedSession, isSessionAlive, loadBrowserSession, resolveBrowserSessionId, saveBrowserSession, serializeBrowserSession, supportsCaptchaSolve, buildAttachedSession, buildOwnedSession, buildStickyOwnerMetadata, canPersistStickyOwnerMetadata, STICKY_OWNER_SCHEMA_VERSION, } from './browser-session-state.js';
2
2
  export { attach, ATTACH_ERROR_CODES, ATTACH_OUTCOME_TYPES, } from './commands/attach.js';
3
3
  export { AgentbrowseAssistiveRuntimeMissingError, AssistiveStructuredOutputTruncatedError, configureAgentbrowseAssistiveRuntime, resetAgentbrowseAssistiveRuntime, } from './assistive-runtime.js';
4
4
  export { createAgentbrowseClient, } from './client.js';
@@ -8,7 +8,10 @@ export { browserStatus as status, BROWSER_STATUS_OUTCOME_TYPES, } from './comman
8
8
  export { actBrowser as act, ACT_ERROR_CODES, ACT_OUTCOME_TYPES, isBrowseAction, BROWSE_ACTIONS, } from './commands/act.js';
9
9
  export { extractBrowser as extract, EXTRACT_ERROR_CODES, EXTRACT_OUTCOME_TYPES, } from './commands/extract.js';
10
10
  export { observeBrowser as observe, OBSERVE_ERROR_CODES, OBSERVE_OUTCOME_TYPES, } from './commands/observe.js';
11
+ export { classifyObservePageState, shouldSuppressFillableFormsForObserve, } from './commands/observe-page-state.js';
12
+ export { resolveObservedField, } from './secrets/observed-field-resolution.js';
11
13
  export { close, CLOSE_ERROR_CODES, CLOSE_OUTCOME_TYPES, } from './commands/close.js';
14
+ export { restoreBrowserSessionOwner, } from './sticky-owner.js';
12
15
  export { launch, LAUNCH_ERROR_CODES, LAUNCH_OUTCOME_TYPES, } from './commands/launch.js';
13
16
  export { navigateBrowser as navigate, NAVIGATE_ERROR_CODES, NAVIGATE_OUTCOME_TYPES, } from './commands/navigate.js';
14
17
  export { screenshotBrowser as screenshot, SCREENSHOT_ERROR_CODES, SCREENSHOT_OUTCOME_TYPES, } from './commands/screenshot.js';
@@ -1,5 +1,5 @@
1
1
  import type { BrowserSessionState } from './browser-session-state.js';
2
- import type { FillableFormFieldBinding, FillableFormPresence, ProtectedBindingValueHint, ProtectedFieldPolicy, StoredSecretFieldKey, StoredSecretFieldPolicies } from './secrets/types.js';
2
+ import type { FillableFormFieldBinding, FillableFormPresence, LoginStepKind, ProtectedBindingValueHint, ProtectedFieldPolicy, StoredSecretFieldKey, StoredSecretFieldPolicies } from './secrets/types.js';
3
3
  import type { ProtectedExactValueProfile } from './runtime-state.js';
4
4
  /** Canonical stored protected field keys supported by AgentBrowse protected fill. */
5
5
  export type ProtectedFieldKey = StoredSecretFieldKey;
@@ -17,6 +17,7 @@ export interface ProtectedFillForm {
17
17
  pageRef: string;
18
18
  scopeRef?: string;
19
19
  purpose: string;
20
+ loginStep?: LoginStepKind;
20
21
  presence?: ProtectedFillPresence;
21
22
  scopeEpoch?: number;
22
23
  fields: ProtectedFillFieldBinding[];
@@ -47,7 +48,7 @@ export type ProtectedFillExecution = {
47
48
  fieldErrors: ProtectedFieldError[];
48
49
  } | {
49
50
  kind: 'unexpected_error';
50
- reason: 'missing_protected_value' | 'unsupported_protected_field_group' | 'deterministic_only_resolution_failed' | 'assisted_value_resolution_failed' | 'action_failed';
51
+ reason: 'missing_protected_value' | 'unsupported_protected_field_group' | 'deterministic_only_resolution_failed' | 'assisted_value_resolution_failed' | 'action_failed' | 'ambiguous_date_value' | 'incomplete_date_value' | 'invalid_date_value';
51
52
  };
52
53
  export type FillProtectedFormResult = {
53
54
  success: true;
@@ -1 +1 @@
1
- {"version":3,"file":"protected-fill.d.ts","sourceRoot":"","sources":["../src/protected-fill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protected-fill.d.ts","sourceRoot":"","sources":["../src/protected-fill.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,52 @@
1
- import { fillProtectedFormBrowser, } from './protected-fill-browser.js';
2
1
  import { buildProtectedExactValueProfile as buildProtectedExactValueProfileInternal } from './secrets/protected-exact-value-redaction.js';
2
+ import { executeProtectedFill } from './secrets/protected-fill.js';
3
+ import { resolvePageByRef, syncSessionPage } from './playwright-runtime.js';
4
+ import { withStickyOwnerBrowser } from './sticky-owner.js';
3
5
  /** Fills a previously observed protected form with caller-provided protected values. */
4
6
  export async function fillProtectedForm(params) {
5
- return (await fillProtectedFormBrowser({
6
- session: params.session,
7
- fillableForm: params.fillableForm,
8
- protectedValues: params.protectedValues,
9
- fieldPolicies: params.fieldPolicies,
10
- }));
7
+ try {
8
+ return await withStickyOwnerBrowser(params.session, async (browser) => {
9
+ try {
10
+ const page = await resolvePageByRef(browser, params.session, params.fillableForm.pageRef).catch((error) => {
11
+ throw new Error(error instanceof Error ? error.message : String(error));
12
+ });
13
+ const { url, title } = await syncSessionPage(params.session, params.fillableForm.pageRef, page);
14
+ const execution = await executeProtectedFill({
15
+ session: params.session,
16
+ page,
17
+ fillableForm: params.fillableForm,
18
+ protectedValues: Object.fromEntries(Object.entries(params.protectedValues).filter((entry) => {
19
+ const value = entry[1];
20
+ return typeof value === 'string' && value.length > 0;
21
+ })),
22
+ fieldPolicies: params.fieldPolicies,
23
+ });
24
+ return {
25
+ success: true,
26
+ pageRef: params.fillableForm.pageRef,
27
+ url,
28
+ title,
29
+ execution,
30
+ };
31
+ }
32
+ catch (error) {
33
+ return {
34
+ success: false,
35
+ error: 'page_resolution_failed',
36
+ message: 'Protected fill could not resolve the target page in the browser.',
37
+ reason: error instanceof Error ? error.message : String(error),
38
+ };
39
+ }
40
+ });
41
+ }
42
+ catch (error) {
43
+ return {
44
+ success: false,
45
+ error: 'browser_connection_failed',
46
+ message: 'Protected fill could not reach the browser session.',
47
+ reason: error instanceof Error ? error.message : String(error),
48
+ };
49
+ }
11
50
  }
12
51
  export function buildProtectedExposureArtifacts(params) {
13
52
  const filteredProtectedValues = Object.fromEntries(Object.entries(params.protectedValues).filter((entry) => {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-protected-state.d.ts","sourceRoot":"","sources":["../src/runtime-protected-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAwB,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEtF,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAyC5B,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,aAAa,CAAC,qBAAqB,CAAC,GAC1C,qBAAqB,EAAE,CAYzB;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,EAC5D,OAAO,GAAE;IACP,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC9B,GACL,qBAAqB,EAAE,CAgDzB;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,GACd,qBAAqB,EAAE,CAuBzB;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,GACd,qBAAqB,EAAE,CAmBzB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,GACd,qBAAqB,GAAG,IAAI,CAI9B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,sBAAsB,GAC/B,sBAAsB,CAKxB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,GACd,sBAAsB,GAAG,IAAI,CAG/B;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAS3F"}
1
+ {"version":3,"file":"runtime-protected-state.d.ts","sourceRoot":"","sources":["../src/runtime-protected-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAwB,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEtF,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAmD5B,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,aAAa,CAAC,qBAAqB,CAAC,GAC1C,qBAAqB,EAAE,CAYzB;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,EAC5D,OAAO,GAAE;IACP,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC9B,GACL,qBAAqB,EAAE,CAgDzB;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,GACd,qBAAqB,EAAE,CAuBzB;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,GACd,qBAAqB,EAAE,CAmBzB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,GACd,qBAAqB,GAAG,IAAI,CAI9B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,sBAAsB,GAC/B,sBAAsB,CAKxB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,GACd,sBAAsB,GAAG,IAAI,CAG/B;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAS3F"}
@@ -14,7 +14,14 @@ function fillableFormIdentity(form) {
14
14
  .map((field) => logicalProtectedBindingKey(field))
15
15
  .sort()
16
16
  .join('|');
17
- return [form.pageRef, form.scopeRef ?? '', form.purpose, fieldsKey].join('||');
17
+ return [
18
+ form.pageRef,
19
+ form.scopeRef ?? '',
20
+ form.pageFormSelector ?? '',
21
+ form.purpose,
22
+ form.loginStep ?? '',
23
+ fieldsKey,
24
+ ].join('||');
18
25
  }
19
26
  function normalizeFillableForm(runtime, form) {
20
27
  const pageScopeEpoch = runtime.pages[form.pageRef]?.scopeEpoch ?? 0;
@@ -62,11 +62,21 @@ export interface TargetValidationEvidence {
62
62
  message?: string;
63
63
  errorStyling?: boolean;
64
64
  }
65
+ export interface TargetSelectionItem {
66
+ label: string;
67
+ selected?: true;
68
+ removable?: boolean;
69
+ }
70
+ export interface TargetSelectionState {
71
+ mode: 'single' | 'multiple';
72
+ items: TargetSelectionItem[];
73
+ }
65
74
  export interface TargetDescriptor {
66
75
  ref: string;
67
76
  pageRef: string;
68
77
  framePath?: string[];
69
78
  frameUrl?: string;
79
+ pageFormSelector?: string;
70
80
  kind?: string;
71
81
  label?: string;
72
82
  displayLabel?: string;
@@ -78,6 +88,7 @@ export interface TargetDescriptor {
78
88
  surfaceKind?: string;
79
89
  controlsSurfaceSelector?: string;
80
90
  validation?: TargetValidationEvidence;
91
+ selection?: TargetSelectionState;
81
92
  capability: TargetCapability;
82
93
  lifecycle: TargetLifecycle;
83
94
  availability: TargetAvailabilityState;