donobu 2.46.0 → 2.46.3

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 (121) hide show
  1. package/dist/assets/generated/version +1 -1
  2. package/dist/esm/assets/generated/version +1 -1
  3. package/dist/esm/lib/DonobuExtendedPage.d.ts +12 -10
  4. package/dist/esm/lib/DonobuExtendedPage.d.ts.map +1 -1
  5. package/dist/esm/lib/PageAi.d.ts +103 -77
  6. package/dist/esm/lib/PageAi.d.ts.map +1 -1
  7. package/dist/esm/lib/PageAi.js +152 -272
  8. package/dist/esm/lib/PageAi.js.map +1 -1
  9. package/dist/esm/lib/originalGotoRegistry.d.ts +5 -0
  10. package/dist/esm/lib/originalGotoRegistry.d.ts.map +1 -0
  11. package/dist/esm/lib/originalGotoRegistry.js +30 -0
  12. package/dist/esm/lib/originalGotoRegistry.js.map +1 -0
  13. package/dist/esm/lib/pageAi/cache.d.ts +84 -0
  14. package/dist/esm/lib/pageAi/cache.d.ts.map +1 -0
  15. package/dist/esm/lib/pageAi/cache.js +207 -0
  16. package/dist/esm/lib/pageAi/cache.js.map +1 -0
  17. package/dist/esm/lib/pageAi/cacheEntryBuilder.d.ts +17 -0
  18. package/dist/esm/lib/pageAi/cacheEntryBuilder.d.ts.map +1 -0
  19. package/dist/esm/lib/pageAi/cacheEntryBuilder.js +25 -0
  20. package/dist/esm/lib/pageAi/cacheEntryBuilder.js.map +1 -0
  21. package/dist/esm/lib/testExtension.d.ts.map +1 -1
  22. package/dist/esm/lib/testExtension.js +284 -282
  23. package/dist/esm/lib/testExtension.js.map +1 -1
  24. package/dist/esm/lib/utils/selfHealing.js +2 -2
  25. package/dist/esm/lib/utils/selfHealing.js.map +1 -1
  26. package/dist/esm/managers/CodeGenerator.d.ts +8 -0
  27. package/dist/esm/managers/CodeGenerator.d.ts.map +1 -1
  28. package/dist/esm/managers/CodeGenerator.js +104 -1
  29. package/dist/esm/managers/CodeGenerator.js.map +1 -1
  30. package/dist/esm/managers/PageInspector.d.ts +5 -11
  31. package/dist/esm/managers/PageInspector.d.ts.map +1 -1
  32. package/dist/esm/managers/PageInspector.js +4 -25
  33. package/dist/esm/managers/PageInspector.js.map +1 -1
  34. package/dist/esm/tools/ChooseSelectOptionTool.d.ts +2 -2
  35. package/dist/esm/tools/ChooseSelectOptionTool.d.ts.map +1 -1
  36. package/dist/esm/tools/ChooseSelectOptionTool.js.map +1 -1
  37. package/dist/esm/tools/ClickTool.d.ts +2 -2
  38. package/dist/esm/tools/ClickTool.d.ts.map +1 -1
  39. package/dist/esm/tools/ClickTool.js.map +1 -1
  40. package/dist/esm/tools/HoverOverElementTool.d.ts +2 -2
  41. package/dist/esm/tools/HoverOverElementTool.d.ts.map +1 -1
  42. package/dist/esm/tools/HoverOverElementTool.js.map +1 -1
  43. package/dist/esm/tools/InputRandomizedEmailAddressTool.d.ts +2 -2
  44. package/dist/esm/tools/InputRandomizedEmailAddressTool.d.ts.map +1 -1
  45. package/dist/esm/tools/InputRandomizedEmailAddressTool.js.map +1 -1
  46. package/dist/esm/tools/InputTextTool.d.ts +2 -2
  47. package/dist/esm/tools/InputTextTool.d.ts.map +1 -1
  48. package/dist/esm/tools/InputTextTool.js.map +1 -1
  49. package/dist/esm/tools/PressKeyTool.d.ts +2 -2
  50. package/dist/esm/tools/PressKeyTool.d.ts.map +1 -1
  51. package/dist/esm/tools/PressKeyTool.js.map +1 -1
  52. package/dist/esm/tools/ReplayableInteraction.d.ts +5 -4
  53. package/dist/esm/tools/ReplayableInteraction.d.ts.map +1 -1
  54. package/dist/esm/tools/ReplayableInteraction.js +11 -10
  55. package/dist/esm/tools/ReplayableInteraction.js.map +1 -1
  56. package/dist/esm/tools/ScrollPageTool.d.ts +2 -2
  57. package/dist/esm/tools/ScrollPageTool.d.ts.map +1 -1
  58. package/dist/esm/tools/ScrollPageTool.js.map +1 -1
  59. package/dist/esm/tools/SolveMfaChallenge.d.ts +2 -2
  60. package/dist/esm/tools/SolveMfaChallenge.d.ts.map +1 -1
  61. package/dist/esm/tools/SolveMfaChallenge.js.map +1 -1
  62. package/dist/lib/DonobuExtendedPage.d.ts +12 -10
  63. package/dist/lib/DonobuExtendedPage.d.ts.map +1 -1
  64. package/dist/lib/PageAi.d.ts +103 -77
  65. package/dist/lib/PageAi.d.ts.map +1 -1
  66. package/dist/lib/PageAi.js +152 -272
  67. package/dist/lib/PageAi.js.map +1 -1
  68. package/dist/lib/originalGotoRegistry.d.ts +5 -0
  69. package/dist/lib/originalGotoRegistry.d.ts.map +1 -0
  70. package/dist/lib/originalGotoRegistry.js +30 -0
  71. package/dist/lib/originalGotoRegistry.js.map +1 -0
  72. package/dist/lib/pageAi/cache.d.ts +84 -0
  73. package/dist/lib/pageAi/cache.d.ts.map +1 -0
  74. package/dist/lib/pageAi/cache.js +207 -0
  75. package/dist/lib/pageAi/cache.js.map +1 -0
  76. package/dist/lib/pageAi/cacheEntryBuilder.d.ts +17 -0
  77. package/dist/lib/pageAi/cacheEntryBuilder.d.ts.map +1 -0
  78. package/dist/lib/pageAi/cacheEntryBuilder.js +25 -0
  79. package/dist/lib/pageAi/cacheEntryBuilder.js.map +1 -0
  80. package/dist/lib/testExtension.d.ts.map +1 -1
  81. package/dist/lib/testExtension.js +284 -282
  82. package/dist/lib/testExtension.js.map +1 -1
  83. package/dist/lib/utils/selfHealing.js +2 -2
  84. package/dist/lib/utils/selfHealing.js.map +1 -1
  85. package/dist/managers/CodeGenerator.d.ts +8 -0
  86. package/dist/managers/CodeGenerator.d.ts.map +1 -1
  87. package/dist/managers/CodeGenerator.js +104 -1
  88. package/dist/managers/CodeGenerator.js.map +1 -1
  89. package/dist/managers/PageInspector.d.ts +5 -11
  90. package/dist/managers/PageInspector.d.ts.map +1 -1
  91. package/dist/managers/PageInspector.js +4 -25
  92. package/dist/managers/PageInspector.js.map +1 -1
  93. package/dist/tools/ChooseSelectOptionTool.d.ts +2 -2
  94. package/dist/tools/ChooseSelectOptionTool.d.ts.map +1 -1
  95. package/dist/tools/ChooseSelectOptionTool.js.map +1 -1
  96. package/dist/tools/ClickTool.d.ts +2 -2
  97. package/dist/tools/ClickTool.d.ts.map +1 -1
  98. package/dist/tools/ClickTool.js.map +1 -1
  99. package/dist/tools/HoverOverElementTool.d.ts +2 -2
  100. package/dist/tools/HoverOverElementTool.d.ts.map +1 -1
  101. package/dist/tools/HoverOverElementTool.js.map +1 -1
  102. package/dist/tools/InputRandomizedEmailAddressTool.d.ts +2 -2
  103. package/dist/tools/InputRandomizedEmailAddressTool.d.ts.map +1 -1
  104. package/dist/tools/InputRandomizedEmailAddressTool.js.map +1 -1
  105. package/dist/tools/InputTextTool.d.ts +2 -2
  106. package/dist/tools/InputTextTool.d.ts.map +1 -1
  107. package/dist/tools/InputTextTool.js.map +1 -1
  108. package/dist/tools/PressKeyTool.d.ts +2 -2
  109. package/dist/tools/PressKeyTool.d.ts.map +1 -1
  110. package/dist/tools/PressKeyTool.js.map +1 -1
  111. package/dist/tools/ReplayableInteraction.d.ts +5 -4
  112. package/dist/tools/ReplayableInteraction.d.ts.map +1 -1
  113. package/dist/tools/ReplayableInteraction.js +11 -10
  114. package/dist/tools/ReplayableInteraction.js.map +1 -1
  115. package/dist/tools/ScrollPageTool.d.ts +2 -2
  116. package/dist/tools/ScrollPageTool.d.ts.map +1 -1
  117. package/dist/tools/ScrollPageTool.js.map +1 -1
  118. package/dist/tools/SolveMfaChallenge.d.ts +2 -2
  119. package/dist/tools/SolveMfaChallenge.d.ts.map +1 -1
  120. package/dist/tools/SolveMfaChallenge.js.map +1 -1
  121. package/package.json +1 -1
@@ -1 +1 @@
1
- 1398
1
+ 1406
@@ -1 +1 @@
1
- 1398
1
+ 1406
@@ -15,7 +15,9 @@ import { SelectorBasedSchema } from '../tools/ReplayableInteraction';
15
15
  import { z } from 'zod/v4';
16
16
  import { BrowserStorageState } from '../models/BrowserStorageState';
17
17
  import { SmartSelector } from './SmartSelector';
18
- import { PageAiOptions } from './PageAi';
18
+ import { PageAi, PageAiOptions } from './PageAi';
19
+ import { DonobuStack } from '../managers/DonobuStack';
20
+ import { FlowsPersistence } from '../persistence/flows/FlowsPersistence';
19
21
  export { PageAiOptions };
20
22
  /**
21
23
  * Extends the Page object with additional test-related methods.
@@ -57,7 +59,7 @@ export interface DonobuExtendedPage extends Page {
57
59
  * Checks all of the pages in the current browser context and returns the one
58
60
  * matching the given URL.
59
61
  */
60
- changeTab(url: string): Promise<Page>;
62
+ changeTab(url: string): Promise<DonobuExtendedPage>;
61
63
  /**
62
64
  * Choose <option> values for a particular <select> HTML element.
63
65
  */
@@ -125,13 +127,13 @@ export interface DonobuExtendedPage extends Page {
125
127
  * the current webpage.
126
128
  */
127
129
  visuallyAssert(params: z.infer<typeof AssertCoreSchema>, gptClientOverride?: GptClient | LanguageModel): Promise<ToolCallResult>;
128
- _donobuFlowMetadata: FlowMetadata;
129
- _originalGoto: Page['goto'];
130
- /**
131
- * The state of the browser storage when a test first starts. This is saved so
132
- * that if a test has to self-heal, we can restore the browser state to its
133
- * original state before starting the self-healing process.
134
- */
135
- _initialBrowserState: BrowserStorageState;
130
+ _dnb: {
131
+ donobuFlowMetadata: FlowMetadata;
132
+ donobuStack: DonobuStack;
133
+ pageAi: PageAi | undefined;
134
+ persistence: FlowsPersistence;
135
+ initialBrowserState: BrowserStorageState;
136
+ gptClient: GptClient | undefined;
137
+ };
136
138
  }
137
139
  //# sourceMappingURL=DonobuExtendedPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DonobuExtendedPage.d.ts","sourceRoot":"","sources":["../../../src/lib/DonobuExtendedPage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DonobuExtendedPage.d.ts","sourceRoot":"","sources":["../../../src/lib/DonobuExtendedPage.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,30 @@
1
1
  import { z } from 'zod/v4';
2
2
  import { DonobuStack } from '../managers/DonobuStack';
3
3
  import { DonobuExtendedPage } from './DonobuExtendedPage';
4
+ import { FlowMetadata } from '../models/FlowMetadata';
5
+ import { DonobuFlow } from '../managers/DonobuFlow';
4
6
  import { GptClient } from '../clients/GptClient';
5
7
  import { FlowsPersistence } from '../persistence/flows/FlowsPersistence';
6
8
  import { ProposedToolCall } from '../models/ProposedToolCall';
9
+ import { PageAiCache } from './pageAi/cache';
10
+ /**
11
+ * Page AI orchestration entry point.
12
+ *
13
+ * Historically, `PageAi` owned everything from cache storage to Donobu flow
14
+ * execution. That made the class hard to test and even harder to modify. The
15
+ * refactor splits responsibilities into smaller pieces that are easier to
16
+ * reason about:
17
+ *
18
+ * - {@link PageAiRunner} sets up the `DonobuFlow` and keeps the persistence
19
+ * layer in sync. It knows nothing about caches.
20
+ * - {@link PageAi} glues together the runner with a pluggable cache so that
21
+ * consumers (e.g., Playwright fixtures) keep their simple `page.ai(...)`
22
+ * API while gaining better separation of concerns.
23
+ *
24
+ * The documentation in this file attempts to guide new contributors through
25
+ * the lifecycle of a single `page.ai` call: resolve cache → run flow →
26
+ * persist metadata → update cache.
27
+ */
7
28
  type PageAiBaseOptions = {
8
29
  cache?: boolean;
9
30
  allowedTools?: string[];
@@ -18,96 +39,101 @@ type PageAiNoSchemaOptions = PageAiBaseOptions & {
18
39
  };
19
40
  export type PageAiOptions<Schema extends z.ZodObject | undefined = undefined> = Schema extends z.ZodObject ? PageAiSchemaOptions<Schema> : PageAiNoSchemaOptions;
20
41
  type AiResult<Schema extends z.ZodObject | undefined> = Schema extends z.ZodObject ? z.infer<Schema> : void;
21
- export type CacheKey = {
22
- pageUrl: string;
23
- instruction: string | null;
24
- schema: Record<string, unknown> | null;
42
+ type PageAiRunConfiguration<Schema extends z.ZodObject | undefined> = {
43
+ page: DonobuExtendedPage;
44
+ instruction: string;
45
+ schema: Schema;
46
+ jsonSchema: Record<string, unknown> | null;
25
47
  allowedTools: string[];
26
- maxToolCalls: number | null;
48
+ maxToolCalls: number;
49
+ envVarNames: string[];
50
+ cachedToolCalls: ProposedToolCall[] | null;
51
+ runMode: FlowMetadata['runMode'];
27
52
  };
28
- export type CacheEntry = CacheKey & {
29
- toolCallCache: ProposedToolCall[];
53
+ type PageAiRunResult<Schema extends z.ZodObject | undefined> = {
54
+ donobuFlow: DonobuFlow;
55
+ parsedResult: AiResult<Schema>;
30
56
  };
31
- export declare class PageAi {
57
+ /**
58
+ * Prepares and executes a Donobu autonomous flow.
59
+ *
60
+ * Responsibilities:
61
+ * - Gather environment data based on allowed env vars.
62
+ * - Seed `DonobuFlow` with deterministic metadata (run mode, allowed tools, etc.).
63
+ * - Run the flow, updating persisted metadata regardless of outcome.
64
+ *
65
+ * The runner does **not** perform cache lookups or updates. That is deferred to
66
+ * the higher-level {@link PageAi} facade so that the runner can stay focused on
67
+ * “how do we execute a flow safely?” rather than “should we execute a flow at
68
+ * all?”.
69
+ */
70
+ export declare class PageAiRunner {
32
71
  private readonly donobu;
33
72
  private readonly persistence;
34
73
  private readonly gptClient;
35
- private readonly cacheFilepath;
36
- constructor(donobu: DonobuStack, persistence: FlowsPersistence, gptClient: GptClient, cacheFilepath: string);
74
+ constructor(donobu: DonobuStack, persistence: FlowsPersistence, gptClient: GptClient);
37
75
  /**
38
- * Executes an AI-driven autonomous flow to accomplish a natural language instruction
39
- * on a web page. The AI agent can interact with the page using Donobu tools and will
40
- * attempt to satisfy the given objective.
41
- *
42
- * This method supports intelligent caching: successful flows are cached and can be
43
- * replayed deterministically on subsequent runs with identical parameters, significantly
44
- * reducing AI token usage and execution time. When a cache hit occurs, the flow runs
45
- * in INSTRUCT mode using the cached tool calls; otherwise, it runs in AUTONOMOUS mode
46
- * where the AI determines the necessary actions.
47
- *
48
- * @template T The Zod object schema describing the expected shape of the AI result.
49
- * @param page The Donobu page instance to use as the starting point of the flow.
50
- * @param instruction A high-level, natural language description of what the flow should
51
- * accomplish (e.g., "Fill out the login form and submit it").
52
- * @param options Optional configuration for the flow execution:
53
- * - `cache`: Set to false to bypass cache lookup and population (default: true)
54
- * - `allowedTools`: Restrict the AI to only use specified tools by name
55
- * - `maxToolCalls`: Maximum number of tool invocations allowed (default: 25)
56
- * @returns A promise that resolves to the parsed result payload if a schema is provided,
57
- * or void if no schema is specified.
58
- * @throws {PageAiException} If the autonomous flow fails, reaches a terminal non-success
59
- * state, or the result fails schema validation.
60
- *
61
- * @example
62
- * // Simple flow without structured output
63
- * await pageAi.ai(page, "Click the 'Get Started' button");
64
- *
65
- * @example
66
- * // Flow with structured output and schema validation
67
- * const userSchema = z.object({
68
- * name: z.string(),
69
- * email: z.string().email(),
70
- * isPremium: z.boolean(),
71
- * });
72
- * const user = await pageAi.ai(
73
- * page,
74
- * "Extract the user profile information from the page",
75
- * { schema: userSchema }
76
- * );
76
+ * Executes a flow using the provided configuration.
77
77
  *
78
- * @example
79
- * // Flow with custom options
80
- * await pageAi.ai(
81
- * page,
82
- * "Navigate to the settings page",
83
- * {
84
- * cache: false,
85
- * allowedTools: ['goto', 'click'],
86
- * maxToolCalls: 10,
87
- * }
88
- * );
78
+ * @param config Runtime information prepared by the higher-level facade.
79
+ * @returns Parsed result (if a schema was provided) along with the executed flow.
80
+ * @throws PageAiException when the underlying flow fails.
81
+ */
82
+ run<Schema extends z.ZodObject | undefined>(config: PageAiRunConfiguration<Schema>): Promise<PageAiRunResult<Schema>>;
83
+ /**
84
+ * Builds a `ToolManager` constrained to the tools the flow is allowed to use.
85
+ * We always allow the objective bookkeeping tools even if the caller supplied
86
+ * a narrower list.
87
+ */
88
+ private buildToolManager;
89
+ }
90
+ /**
91
+ * High-level API used by Playwright tests. It resolves caching policy,
92
+ * delegates execution to {@link PageAiRunner}, and records successful runs back
93
+ * into the configured cache.
94
+ */
95
+ export declare class PageAi {
96
+ private readonly cache;
97
+ private readonly runner;
98
+ /**
99
+ * @param donobu Donobu stack providing flow managers and shared services.
100
+ * @param persistence Persistence layer used to store flow metadata.
101
+ * @param gptClient GPT client used for autonomous reasoning.
102
+ * @param cache Pluggable cache implementation the facade should consult.
103
+ */
104
+ constructor(donobu: DonobuStack, persistence: FlowsPersistence, gptClient: GptClient, cache: PageAiCache);
105
+ /**
106
+ * Builds a `PageAi` instance configured to use the file-backed cache stored
107
+ * alongside the current test file. This mirrors the behaviour relied upon by
108
+ * the Playwright fixture.
109
+ */
110
+ static withFileCache(donobu: DonobuStack, persistence: FlowsPersistence, gptClient: GptClient, cacheFilepath: string): PageAi;
111
+ /**
112
+ * Public entry point invoked by `page.ai`. Handles cache lookup, delegates to
113
+ * the runner, and stores the result back into the cache when appropriate.
89
114
  */
90
115
  ai<Schema extends z.ZodObject | undefined = undefined>(page: DonobuExtendedPage, instruction: string, options?: PageAiOptions<Schema>): Promise<AiResult<Schema>>;
91
- private ensureCacheFileExists;
92
116
  /**
93
- * Executes a cache operation within an exclusive file lock to prevent race conditions
94
- * across multiple processes. This method handles cache file initialization, locking,
95
- * reading, executing the provided operation, and conditionally writing back changes.
117
+ * Invalidates cache entries matching the provided invocation parameters.
96
118
  *
97
- * @template T The type of result returned by the cache operation.
98
- * @param operation A function that receives the current cache and returns both the
99
- * modified cache (or the same cache if no modifications) and a result
100
- * value. If the returned cache reference is different from the input,
101
- * the cache file will be updated.
102
- * @returns A promise that resolves to the result value from the operation.
103
- * @throws Any error from the operation or file system operations (except expected ENOENT
104
- * and EEXIST errors which are handled internally).
119
+ * Returns `true` when a matching record existed and was removed.
120
+ */
121
+ invalidate<Schema extends z.ZodObject | undefined>(page: DonobuExtendedPage, instruction: string, options?: PageAiOptions<Schema>): Promise<boolean>;
122
+ /**
123
+ * Backwards-compatible alias for callers still using the older API.
124
+ */
125
+ deleteCachedFlow<Schema extends z.ZodObject | undefined>(page: DonobuExtendedPage, instruction: string, options?: PageAiOptions<Schema>): Promise<boolean>;
126
+ /**
127
+ * Normalises user-provided options into a single structure that can be reused
128
+ * across cache operations and flow execution.
129
+ */
130
+ private buildDescriptor;
131
+ /**
132
+ * Computes the cache key that uniquely identifies a `page.ai` invocation.
133
+ * Keep this logic in sync with any external cache generators (e.g. the code
134
+ * generator) so that hits and invalidations behave the same everywhere.
105
135
  */
106
- private withCacheLock;
107
- private getCacheKey;
108
- private getCachedFlow;
109
- deleteCachedFlow(page: DonobuExtendedPage, instruction: string, options?: PageAiOptions<any>): Promise<boolean>;
110
- private cacheFlow;
136
+ private buildCacheKey;
111
137
  }
112
138
  export {};
113
139
  //# sourceMappingURL=PageAi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PageAi.d.ts","sourceRoot":"","sources":["../../../src/lib/PageAi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAS1D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAIzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAI9D,KAAK,iBAAiB,GAAG;IAEvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,YAAY,CAAC,EAAE,MAAM,CAAC;IAKtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,KAAK,mBAAmB,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,IAAI,iBAAiB,GAAG;IAGzE,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,qBAAqB,GAAG,iBAAiB,GAAG;IAC/C,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS,IAC1E,MAAM,SAAS,CAAC,CAAC,SAAS,GACtB,mBAAmB,CAAC,MAAM,CAAC,GAC3B,qBAAqB,CAAC;AAE5B,KAAK,QAAQ,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,GAAG,SAAS,IAClD,MAAM,SAAS,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAEtD,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG;IAClC,aAAa,EAAE,gBAAgB,EAAE,CAAC;CACnC,CAAC;AAMF,qBAAa,MAAM;IAEf,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAHb,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,gBAAgB,EAC7B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,MAAM;IAGxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoDG;IACU,EAAE,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS,EAChE,IAAI,EAAE,kBAAkB,EACxB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAiGd,qBAAqB;IAiBnC;;;;;;;;;;;;;OAaG;YACW,aAAa;IA+D3B,OAAO,CAAC,WAAW;YAmBL,aAAa;IAwBd,gBAAgB,CAC3B,IAAI,EAAE,kBAAkB,EACxB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,GAC3B,OAAO,CAAC,OAAO,CAAC;YAgCL,SAAS;CA0CxB"}
1
+ {"version":3,"file":"PageAi.d.ts","sourceRoot":"","sources":["../../../src/lib/PageAi.ts"],"names":[],"mappings":"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"}