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.
- package/dist/assets/generated/version +1 -1
- package/dist/esm/assets/generated/version +1 -1
- package/dist/esm/lib/DonobuExtendedPage.d.ts +12 -10
- package/dist/esm/lib/DonobuExtendedPage.d.ts.map +1 -1
- package/dist/esm/lib/PageAi.d.ts +103 -77
- package/dist/esm/lib/PageAi.d.ts.map +1 -1
- package/dist/esm/lib/PageAi.js +152 -272
- package/dist/esm/lib/PageAi.js.map +1 -1
- package/dist/esm/lib/originalGotoRegistry.d.ts +5 -0
- package/dist/esm/lib/originalGotoRegistry.d.ts.map +1 -0
- package/dist/esm/lib/originalGotoRegistry.js +30 -0
- package/dist/esm/lib/originalGotoRegistry.js.map +1 -0
- package/dist/esm/lib/pageAi/cache.d.ts +84 -0
- package/dist/esm/lib/pageAi/cache.d.ts.map +1 -0
- package/dist/esm/lib/pageAi/cache.js +207 -0
- package/dist/esm/lib/pageAi/cache.js.map +1 -0
- package/dist/esm/lib/pageAi/cacheEntryBuilder.d.ts +17 -0
- package/dist/esm/lib/pageAi/cacheEntryBuilder.d.ts.map +1 -0
- package/dist/esm/lib/pageAi/cacheEntryBuilder.js +25 -0
- package/dist/esm/lib/pageAi/cacheEntryBuilder.js.map +1 -0
- package/dist/esm/lib/testExtension.d.ts.map +1 -1
- package/dist/esm/lib/testExtension.js +284 -282
- package/dist/esm/lib/testExtension.js.map +1 -1
- package/dist/esm/lib/utils/selfHealing.js +2 -2
- package/dist/esm/lib/utils/selfHealing.js.map +1 -1
- package/dist/esm/managers/CodeGenerator.d.ts +8 -0
- package/dist/esm/managers/CodeGenerator.d.ts.map +1 -1
- package/dist/esm/managers/CodeGenerator.js +104 -1
- package/dist/esm/managers/CodeGenerator.js.map +1 -1
- package/dist/esm/managers/PageInspector.d.ts +5 -11
- package/dist/esm/managers/PageInspector.d.ts.map +1 -1
- package/dist/esm/managers/PageInspector.js +4 -25
- package/dist/esm/managers/PageInspector.js.map +1 -1
- package/dist/esm/tools/ChooseSelectOptionTool.d.ts +2 -2
- package/dist/esm/tools/ChooseSelectOptionTool.d.ts.map +1 -1
- package/dist/esm/tools/ChooseSelectOptionTool.js.map +1 -1
- package/dist/esm/tools/ClickTool.d.ts +2 -2
- package/dist/esm/tools/ClickTool.d.ts.map +1 -1
- package/dist/esm/tools/ClickTool.js.map +1 -1
- package/dist/esm/tools/HoverOverElementTool.d.ts +2 -2
- package/dist/esm/tools/HoverOverElementTool.d.ts.map +1 -1
- package/dist/esm/tools/HoverOverElementTool.js.map +1 -1
- package/dist/esm/tools/InputRandomizedEmailAddressTool.d.ts +2 -2
- package/dist/esm/tools/InputRandomizedEmailAddressTool.d.ts.map +1 -1
- package/dist/esm/tools/InputRandomizedEmailAddressTool.js.map +1 -1
- package/dist/esm/tools/InputTextTool.d.ts +2 -2
- package/dist/esm/tools/InputTextTool.d.ts.map +1 -1
- package/dist/esm/tools/InputTextTool.js.map +1 -1
- package/dist/esm/tools/PressKeyTool.d.ts +2 -2
- package/dist/esm/tools/PressKeyTool.d.ts.map +1 -1
- package/dist/esm/tools/PressKeyTool.js.map +1 -1
- package/dist/esm/tools/ReplayableInteraction.d.ts +5 -4
- package/dist/esm/tools/ReplayableInteraction.d.ts.map +1 -1
- package/dist/esm/tools/ReplayableInteraction.js +11 -10
- package/dist/esm/tools/ReplayableInteraction.js.map +1 -1
- package/dist/esm/tools/ScrollPageTool.d.ts +2 -2
- package/dist/esm/tools/ScrollPageTool.d.ts.map +1 -1
- package/dist/esm/tools/ScrollPageTool.js.map +1 -1
- package/dist/esm/tools/SolveMfaChallenge.d.ts +2 -2
- package/dist/esm/tools/SolveMfaChallenge.d.ts.map +1 -1
- package/dist/esm/tools/SolveMfaChallenge.js.map +1 -1
- package/dist/lib/DonobuExtendedPage.d.ts +12 -10
- package/dist/lib/DonobuExtendedPage.d.ts.map +1 -1
- package/dist/lib/PageAi.d.ts +103 -77
- package/dist/lib/PageAi.d.ts.map +1 -1
- package/dist/lib/PageAi.js +152 -272
- package/dist/lib/PageAi.js.map +1 -1
- package/dist/lib/originalGotoRegistry.d.ts +5 -0
- package/dist/lib/originalGotoRegistry.d.ts.map +1 -0
- package/dist/lib/originalGotoRegistry.js +30 -0
- package/dist/lib/originalGotoRegistry.js.map +1 -0
- package/dist/lib/pageAi/cache.d.ts +84 -0
- package/dist/lib/pageAi/cache.d.ts.map +1 -0
- package/dist/lib/pageAi/cache.js +207 -0
- package/dist/lib/pageAi/cache.js.map +1 -0
- package/dist/lib/pageAi/cacheEntryBuilder.d.ts +17 -0
- package/dist/lib/pageAi/cacheEntryBuilder.d.ts.map +1 -0
- package/dist/lib/pageAi/cacheEntryBuilder.js +25 -0
- package/dist/lib/pageAi/cacheEntryBuilder.js.map +1 -0
- package/dist/lib/testExtension.d.ts.map +1 -1
- package/dist/lib/testExtension.js +284 -282
- package/dist/lib/testExtension.js.map +1 -1
- package/dist/lib/utils/selfHealing.js +2 -2
- package/dist/lib/utils/selfHealing.js.map +1 -1
- package/dist/managers/CodeGenerator.d.ts +8 -0
- package/dist/managers/CodeGenerator.d.ts.map +1 -1
- package/dist/managers/CodeGenerator.js +104 -1
- package/dist/managers/CodeGenerator.js.map +1 -1
- package/dist/managers/PageInspector.d.ts +5 -11
- package/dist/managers/PageInspector.d.ts.map +1 -1
- package/dist/managers/PageInspector.js +4 -25
- package/dist/managers/PageInspector.js.map +1 -1
- package/dist/tools/ChooseSelectOptionTool.d.ts +2 -2
- package/dist/tools/ChooseSelectOptionTool.d.ts.map +1 -1
- package/dist/tools/ChooseSelectOptionTool.js.map +1 -1
- package/dist/tools/ClickTool.d.ts +2 -2
- package/dist/tools/ClickTool.d.ts.map +1 -1
- package/dist/tools/ClickTool.js.map +1 -1
- package/dist/tools/HoverOverElementTool.d.ts +2 -2
- package/dist/tools/HoverOverElementTool.d.ts.map +1 -1
- package/dist/tools/HoverOverElementTool.js.map +1 -1
- package/dist/tools/InputRandomizedEmailAddressTool.d.ts +2 -2
- package/dist/tools/InputRandomizedEmailAddressTool.d.ts.map +1 -1
- package/dist/tools/InputRandomizedEmailAddressTool.js.map +1 -1
- package/dist/tools/InputTextTool.d.ts +2 -2
- package/dist/tools/InputTextTool.d.ts.map +1 -1
- package/dist/tools/InputTextTool.js.map +1 -1
- package/dist/tools/PressKeyTool.d.ts +2 -2
- package/dist/tools/PressKeyTool.d.ts.map +1 -1
- package/dist/tools/PressKeyTool.js.map +1 -1
- package/dist/tools/ReplayableInteraction.d.ts +5 -4
- package/dist/tools/ReplayableInteraction.d.ts.map +1 -1
- package/dist/tools/ReplayableInteraction.js +11 -10
- package/dist/tools/ReplayableInteraction.js.map +1 -1
- package/dist/tools/ScrollPageTool.d.ts +2 -2
- package/dist/tools/ScrollPageTool.d.ts.map +1 -1
- package/dist/tools/ScrollPageTool.js.map +1 -1
- package/dist/tools/SolveMfaChallenge.d.ts +2 -2
- package/dist/tools/SolveMfaChallenge.d.ts.map +1 -1
- package/dist/tools/SolveMfaChallenge.js.map +1 -1
- package/package.json +1 -1
package/dist/lib/PageAi.d.ts
CHANGED
|
@@ -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
|
-
|
|
22
|
-
|
|
23
|
-
instruction: string
|
|
24
|
-
schema:
|
|
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
|
|
48
|
+
maxToolCalls: number;
|
|
49
|
+
envVarNames: string[];
|
|
50
|
+
cachedToolCalls: ProposedToolCall[] | null;
|
|
51
|
+
runMode: FlowMetadata['runMode'];
|
|
27
52
|
};
|
|
28
|
-
|
|
29
|
-
|
|
53
|
+
type PageAiRunResult<Schema extends z.ZodObject | undefined> = {
|
|
54
|
+
donobuFlow: DonobuFlow;
|
|
55
|
+
parsedResult: AiResult<Schema>;
|
|
30
56
|
};
|
|
31
|
-
|
|
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
|
-
|
|
36
|
-
constructor(donobu: DonobuStack, persistence: FlowsPersistence, gptClient: GptClient, cacheFilepath: string);
|
|
74
|
+
constructor(donobu: DonobuStack, persistence: FlowsPersistence, gptClient: GptClient);
|
|
37
75
|
/**
|
|
38
|
-
* Executes
|
|
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
|
-
* @
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
*
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
|
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
|
package/dist/lib/PageAi.d.ts.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"PageAi.d.ts","sourceRoot":"","sources":["../../src/lib/PageAi.ts"],"names":[],"mappings":"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"}
|