donobu 5.3.1 → 5.4.0

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 (85) hide show
  1. package/dist/apis/FlowsFilesApi.d.ts +18 -4
  2. package/dist/apis/FlowsFilesApi.d.ts.map +1 -1
  3. package/dist/apis/FlowsFilesApi.js +41 -4
  4. package/dist/apis/FlowsFilesApi.js.map +1 -1
  5. package/dist/cli/donobu-cli.js +134 -34
  6. package/dist/cli/donobu-cli.js.map +1 -1
  7. package/dist/cli/playwright-json-to-html.js +10 -0
  8. package/dist/cli/playwright-json-to-html.js.map +1 -1
  9. package/dist/codegen/CodeGenerator.d.ts.map +1 -1
  10. package/dist/codegen/CodeGenerator.js +7 -14
  11. package/dist/codegen/CodeGenerator.js.map +1 -1
  12. package/dist/envVars.d.ts +2 -0
  13. package/dist/envVars.d.ts.map +1 -1
  14. package/dist/envVars.js +4 -0
  15. package/dist/envVars.js.map +1 -1
  16. package/dist/esm/apis/FlowsFilesApi.d.ts +18 -4
  17. package/dist/esm/apis/FlowsFilesApi.d.ts.map +1 -1
  18. package/dist/esm/apis/FlowsFilesApi.js +41 -4
  19. package/dist/esm/apis/FlowsFilesApi.js.map +1 -1
  20. package/dist/esm/cli/donobu-cli.js +134 -34
  21. package/dist/esm/cli/donobu-cli.js.map +1 -1
  22. package/dist/esm/cli/playwright-json-to-html.js +10 -0
  23. package/dist/esm/cli/playwright-json-to-html.js.map +1 -1
  24. package/dist/esm/codegen/CodeGenerator.d.ts.map +1 -1
  25. package/dist/esm/codegen/CodeGenerator.js +7 -14
  26. package/dist/esm/codegen/CodeGenerator.js.map +1 -1
  27. package/dist/esm/envVars.d.ts +2 -0
  28. package/dist/esm/envVars.d.ts.map +1 -1
  29. package/dist/esm/envVars.js +4 -0
  30. package/dist/esm/envVars.js.map +1 -1
  31. package/dist/esm/lib/ai/cache/assertCache.d.ts +58 -0
  32. package/dist/esm/lib/ai/cache/assertCache.d.ts.map +1 -0
  33. package/dist/esm/lib/ai/cache/assertCache.js +110 -0
  34. package/dist/esm/lib/ai/cache/assertCache.js.map +1 -0
  35. package/dist/esm/lib/ai/cache/cache.d.ts +16 -15
  36. package/dist/esm/lib/ai/cache/cache.d.ts.map +1 -1
  37. package/dist/esm/lib/ai/cache/cache.js +166 -71
  38. package/dist/esm/lib/ai/cache/cache.js.map +1 -1
  39. package/dist/esm/lib/page/DonobuExtendedPage.d.ts +10 -0
  40. package/dist/esm/lib/page/DonobuExtendedPage.d.ts.map +1 -1
  41. package/dist/esm/lib/page/extendPage.d.ts.map +1 -1
  42. package/dist/esm/lib/page/extendPage.js +86 -3
  43. package/dist/esm/lib/page/extendPage.js.map +1 -1
  44. package/dist/esm/managers/AdminApiController.d.ts.map +1 -1
  45. package/dist/esm/managers/AdminApiController.js +1 -0
  46. package/dist/esm/managers/AdminApiController.js.map +1 -1
  47. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.d.ts +0 -1
  48. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.d.ts.map +1 -1
  49. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.js +1 -20
  50. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.js.map +1 -1
  51. package/dist/esm/tools/AssertTool.d.ts.map +1 -1
  52. package/dist/esm/tools/AssertTool.js +62 -14
  53. package/dist/esm/tools/AssertTool.js.map +1 -1
  54. package/dist/esm/utils/MiscUtils.d.ts +4 -0
  55. package/dist/esm/utils/MiscUtils.d.ts.map +1 -1
  56. package/dist/esm/utils/MiscUtils.js +25 -0
  57. package/dist/esm/utils/MiscUtils.js.map +1 -1
  58. package/dist/lib/ai/cache/assertCache.d.ts +58 -0
  59. package/dist/lib/ai/cache/assertCache.d.ts.map +1 -0
  60. package/dist/lib/ai/cache/assertCache.js +110 -0
  61. package/dist/lib/ai/cache/assertCache.js.map +1 -0
  62. package/dist/lib/ai/cache/cache.d.ts +16 -15
  63. package/dist/lib/ai/cache/cache.d.ts.map +1 -1
  64. package/dist/lib/ai/cache/cache.js +166 -71
  65. package/dist/lib/ai/cache/cache.js.map +1 -1
  66. package/dist/lib/page/DonobuExtendedPage.d.ts +10 -0
  67. package/dist/lib/page/DonobuExtendedPage.d.ts.map +1 -1
  68. package/dist/lib/page/extendPage.d.ts.map +1 -1
  69. package/dist/lib/page/extendPage.js +86 -3
  70. package/dist/lib/page/extendPage.js.map +1 -1
  71. package/dist/managers/AdminApiController.d.ts.map +1 -1
  72. package/dist/managers/AdminApiController.js +1 -0
  73. package/dist/managers/AdminApiController.js.map +1 -1
  74. package/dist/persistence/flows/FlowsPersistenceSqlite.d.ts +0 -1
  75. package/dist/persistence/flows/FlowsPersistenceSqlite.d.ts.map +1 -1
  76. package/dist/persistence/flows/FlowsPersistenceSqlite.js +1 -20
  77. package/dist/persistence/flows/FlowsPersistenceSqlite.js.map +1 -1
  78. package/dist/tools/AssertTool.d.ts.map +1 -1
  79. package/dist/tools/AssertTool.js +62 -14
  80. package/dist/tools/AssertTool.js.map +1 -1
  81. package/dist/utils/MiscUtils.d.ts +4 -0
  82. package/dist/utils/MiscUtils.d.ts.map +1 -1
  83. package/dist/utils/MiscUtils.js +25 -0
  84. package/dist/utils/MiscUtils.js.map +1 -1
  85. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
1
  import type { DonobuExtendedPage } from '../../page/DonobuExtendedPage';
2
+ import type { AssertCacheEntry, AssertCacheEntryWithRunner, AssertCacheKey } from './assertCache';
2
3
  /**
3
4
  * Cache key used to identify a unique `page.ai.act(...)` or `device.ai(...)` invocation.
4
5
  * Keep this structure aligned with the code generator so replayed runs remain deterministic.
@@ -34,6 +35,7 @@ export type PageAiCacheEntryWithRunner = PageAiCacheEntry & {
34
35
  */
35
36
  export type PageAiCacheContents = {
36
37
  caches: PageAiCacheEntry[];
38
+ assertions?: AssertCacheEntry[];
37
39
  };
38
40
  export type PageAiCacheExecutionContext = {
39
41
  page?: DonobuExtendedPage;
@@ -50,11 +52,17 @@ export interface PageAiCache {
50
52
  put(entry: PageAiCacheEntry): Promise<void>;
51
53
  delete(key: PageAiCacheKey): Promise<boolean>;
52
54
  snapshot(): Promise<PageAiCacheContents>;
55
+ getAssert(key: AssertCacheKey): Promise<AssertCacheEntryWithRunner | null>;
56
+ putAssert(entry: AssertCacheEntry): Promise<void>;
57
+ deleteAssert(key: AssertCacheKey): Promise<boolean>;
53
58
  }
54
- export declare const renderCacheModule: (entries: PageAiCacheEntry[]) => string;
59
+ export declare const renderCacheModule: (entries: PageAiCacheEntry[], assertions?: AssertCacheEntry[]) => string;
55
60
  /**
56
61
  * File-backed implementation used by the Playwright fixture. Protects reads and
57
62
  * writes with an OS-level lock so concurrent processes do not corrupt the file.
63
+ *
64
+ * Both page.ai flow caches and assertion caches live in the same file to avoid
65
+ * a separate file and lock for assertions.
58
66
  */
59
67
  export declare class FilePageAiCache implements PageAiCache {
60
68
  private readonly cacheFilepath;
@@ -62,22 +70,11 @@ export declare class FilePageAiCache implements PageAiCache {
62
70
  get(key: PageAiCacheKey): Promise<PageAiCacheEntryWithRunner | null>;
63
71
  put(entry: PageAiCacheEntry): Promise<void>;
64
72
  delete(key: PageAiCacheKey): Promise<boolean>;
65
- /**
66
- * Returns an in-memory snapshot of the cache content in the same shape used
67
- * on disk.
68
- */
69
73
  snapshot(): Promise<PageAiCacheContents>;
70
- /**
71
- * Lazily creates an empty cache file. Using the `'wx'` flag keeps the method
72
- * idempotent even when multiple processes start simultaneously.
73
- */
74
+ getAssert(key: AssertCacheKey): Promise<AssertCacheEntryWithRunner | null>;
75
+ putAssert(entry: AssertCacheEntry): Promise<void>;
76
+ deleteAssert(key: AssertCacheKey): Promise<boolean>;
74
77
  private ensureCacheFileExists;
75
- /**
76
- * Reads and evaluates the cache file without touching Node's module cache.
77
- * We re-run the file in a fresh CommonJS wrapper on every call so parallel
78
- * writers cannot serve stale data to parallel readers (a risk when relying
79
- * on dynamic import cache-busting tokens).
80
- */
81
78
  private loadCacheModule;
82
79
  private readCacheFile;
83
80
  private writeCacheFile;
@@ -90,10 +87,14 @@ export declare class FilePageAiCache implements PageAiCache {
90
87
  */
91
88
  export declare class InMemoryPageAiCache implements PageAiCache {
92
89
  private cache;
90
+ private assertions;
93
91
  constructor(initialContents?: PageAiCacheEntry[] | PageAiCacheContents);
94
92
  get(key: PageAiCacheKey): Promise<PageAiCacheEntryWithRunner | null>;
95
93
  put(entry: PageAiCacheEntry): Promise<void>;
96
94
  delete(key: PageAiCacheKey): Promise<boolean>;
97
95
  snapshot(): Promise<PageAiCacheContents>;
96
+ getAssert(key: AssertCacheKey): Promise<AssertCacheEntryWithRunner | null>;
97
+ putAssert(entry: AssertCacheEntry): Promise<void>;
98
+ deleteAssert(key: AssertCacheKey): Promise<boolean>;
98
99
  }
99
100
  //# sourceMappingURL=cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ai/cache/cache.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,+FAA+F;IAC/F,UAAU,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,CAAC;IACvC,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;IAC5B,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG;IAC9C,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,gBAAgB,GAAG;IAC1D,GAAG,EAAE,mBAAmB,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,yFAAyF;IACzF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAChC,OAAO,EAAE,2BAA2B,KACjC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC;IACrE,GAAG,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAC1C;AAkHD,eAAO,MAAM,iBAAiB,GAAI,SAAS,gBAAgB,EAAE,KAAG,MAU/D,CAAC;AAEF;;;GAGG;AACH,qBAAa,eAAgB,YAAW,WAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,MAAM;IAE5C,GAAG,CACd,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC;IAehC,GAAG,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB3C,MAAM,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B1D;;;OAGG;IACU,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAarD;;;OAGG;YACW,qBAAqB;IAgBnC;;;;;OAKG;YACW,eAAe;YA8Bf,aAAa;YAwDb,cAAc;YAUd,aAAa;CA8B5B;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,KAAK,CAA+B;gBAG1C,eAAe,GAAE,gBAAgB,EAAE,GAAG,mBAAwB;IASnD,GAAG,CACd,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC;IAUhC,GAAG,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB3C,MAAM,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB7C,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAKtD"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ai/cache/cache.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,7 @@ const node_vm_1 = require("node:vm");
43
43
  const promises_1 = __importDefault(require("fs/promises"));
44
44
  const LockFile = __importStar(require("proper-lockfile"));
45
45
  const CodeGenerator_1 = require("../../../codegen/CodeGenerator");
46
+ const assertCache_1 = require("./assertCache");
46
47
  const areCacheCollectionsEqual = (left, right) =>
47
48
  // We serialize to JSON rather than deep-walking to keep the comparison short
48
49
  // and avoid surprises from prototype differences.
@@ -104,6 +105,20 @@ const cloneEntryWithRunner = (entry) => ({
104
105
  ...stripRunner(entry),
105
106
  run: entry.run,
106
107
  });
108
+ // ---------------------------------------------------------------------------
109
+ // Assert cache helpers
110
+ // ---------------------------------------------------------------------------
111
+ const assertCacheKeysMatch = (left, right) => left.pageUrl === right.pageUrl && left.assertion === right.assertion;
112
+ const materializeAssertEntry = (entry) => ({
113
+ ...entry,
114
+ run: (0, assertCache_1.buildAssertExecutor)(entry.steps),
115
+ });
116
+ const cloneAssertEntry = (entry) => ({
117
+ pageUrl: entry.pageUrl,
118
+ assertion: entry.assertion,
119
+ steps: entry.steps,
120
+ run: entry.run,
121
+ });
107
122
  // Serializes a cache entry into inline JS that will be emitted to disk.
108
123
  const serializeEntry = (entry) => {
109
124
  const instructionLiteral = entry.instruction === null ? 'null' : JSON.stringify(entry.instruction);
@@ -120,8 +135,11 @@ const serializeEntry = (entry) => {
120
135
  };
121
136
  // Emits the cache file as a CommonJS module matching what the runtime loader
122
137
  // expects. This keeps the on-disk format aligned between generator and reader.
123
- const renderCacheModule = (entries) => {
138
+ const renderCacheModule = (entries, assertions) => {
124
139
  const serializedEntries = entries.map(serializeEntry).join(', ');
140
+ const assertionsPart = assertions && assertions.length > 0
141
+ ? `, assertions: [${assertions.map((a) => JSON.stringify({ pageUrl: a.pageUrl, assertion: a.assertion, steps: a.steps })).join(', ')}]`
142
+ : '';
125
143
  return `/**
126
144
  * @generated
127
145
  * This file was generated by Donobu; do not edit manually.
@@ -129,84 +147,122 @@ const renderCacheModule = (entries) => {
129
147
  /* eslint-disable */
130
148
  const { expect } = require('donobu');
131
149
 
132
- module.exports = { caches: [${serializedEntries}] };`;
150
+ module.exports = { caches: [${serializedEntries}]${assertionsPart} };`;
133
151
  };
134
152
  exports.renderCacheModule = renderCacheModule;
135
153
  /**
136
154
  * File-backed implementation used by the Playwright fixture. Protects reads and
137
155
  * writes with an OS-level lock so concurrent processes do not corrupt the file.
156
+ *
157
+ * Both page.ai flow caches and assertion caches live in the same file to avoid
158
+ * a separate file and lock for assertions.
138
159
  */
139
160
  class FilePageAiCache {
140
161
  constructor(cacheFilepath) {
141
162
  this.cacheFilepath = cacheFilepath;
142
163
  }
164
+ // --- Page.ai flow cache operations ---
143
165
  async get(key) {
144
- // Reads happen under the same lock as writes to avoid observing
145
- // partially-written files on platforms without atomic replace semantics.
146
- return this.withCacheLock(async (cache) => {
147
- const matchingEntry = cache.find((entry) => pageAiCacheKeysMatch(entry, key));
166
+ return this.withCacheLock(async (state) => {
167
+ const matchingEntry = state.caches.find((entry) => pageAiCacheKeysMatch(entry, key));
148
168
  return {
149
- cache,
169
+ state,
150
170
  result: matchingEntry ? cloneEntryWithRunner(matchingEntry) : null,
151
171
  };
152
172
  });
153
173
  }
154
174
  async put(entry) {
155
- // Upsert logic is delegated into the locked section to keep the file and
156
- // in-memory view consistent for all concurrent callers.
157
- await this.withCacheLock(async (cache) => {
158
- const existingIndex = cache.findIndex((candidate) => pageAiCacheKeysMatch(candidate, entry));
175
+ await this.withCacheLock(async (state) => {
176
+ const existingIndex = state.caches.findIndex((candidate) => pageAiCacheKeysMatch(candidate, entry));
159
177
  const materializedEntry = materializeEntry(entry);
160
- const modifiedCache = existingIndex === -1 ? [...cache, materializedEntry] : [...cache];
178
+ const modifiedCaches = existingIndex === -1
179
+ ? [...state.caches, materializedEntry]
180
+ : [...state.caches];
161
181
  if (existingIndex !== -1) {
162
- modifiedCache[existingIndex] = materializedEntry;
182
+ modifiedCaches[existingIndex] = materializedEntry;
163
183
  }
164
184
  return {
165
- cache: modifiedCache,
185
+ state: { ...state, caches: modifiedCaches },
166
186
  result: undefined,
167
187
  };
168
188
  });
169
189
  }
170
190
  async delete(key) {
171
- // Deletion is also serialized via the lock to avoid interleaving with
172
- // writes from other workers.
173
- return this.withCacheLock(async (cache) => {
174
- const targetIndex = cache.findIndex((entry) => pageAiCacheKeysMatch(entry, key));
191
+ return this.withCacheLock(async (state) => {
192
+ const targetIndex = state.caches.findIndex((entry) => pageAiCacheKeysMatch(entry, key));
175
193
  if (targetIndex === -1) {
176
- return {
177
- cache,
178
- result: false,
179
- };
194
+ return { state, result: false };
180
195
  }
181
- const modifiedCache = [
182
- ...cache.slice(0, targetIndex),
183
- ...cache.slice(targetIndex + 1),
184
- ];
185
196
  return {
186
- cache: modifiedCache,
197
+ state: {
198
+ ...state,
199
+ caches: [
200
+ ...state.caches.slice(0, targetIndex),
201
+ ...state.caches.slice(targetIndex + 1),
202
+ ],
203
+ },
187
204
  result: true,
188
205
  };
189
206
  });
190
207
  }
191
- /**
192
- * Returns an in-memory snapshot of the cache content in the same shape used
193
- * on disk.
194
- */
195
208
  async snapshot() {
196
- return this.withCacheLock(async (cache) => {
197
- const serializedEntries = cache.map((entry) => stripRunner(entry));
209
+ return this.withCacheLock(async (state) => ({
210
+ state,
211
+ result: {
212
+ caches: state.caches.map((entry) => stripRunner(entry)),
213
+ assertions: state.assertions.map((a) => ({
214
+ pageUrl: a.pageUrl,
215
+ assertion: a.assertion,
216
+ steps: a.steps,
217
+ })),
218
+ },
219
+ }));
220
+ }
221
+ // --- Assert cache operations ---
222
+ async getAssert(key) {
223
+ return this.withCacheLock(async (state) => {
224
+ const match = state.assertions.find((e) => assertCacheKeysMatch(e, key));
198
225
  return {
199
- cache,
200
- result: {
201
- caches: serializedEntries,
226
+ state,
227
+ result: match ? cloneAssertEntry(match) : null,
228
+ };
229
+ });
230
+ }
231
+ async putAssert(entry) {
232
+ await this.withCacheLock(async (state) => {
233
+ const idx = state.assertions.findIndex((e) => assertCacheKeysMatch(e, entry));
234
+ const materialized = materializeAssertEntry(entry);
235
+ const modifiedAssertions = idx === -1
236
+ ? [...state.assertions, materialized]
237
+ : [...state.assertions];
238
+ if (idx !== -1) {
239
+ modifiedAssertions[idx] = materialized;
240
+ }
241
+ return {
242
+ state: { ...state, assertions: modifiedAssertions },
243
+ result: undefined,
244
+ };
245
+ });
246
+ }
247
+ async deleteAssert(key) {
248
+ return this.withCacheLock(async (state) => {
249
+ const idx = state.assertions.findIndex((e) => assertCacheKeysMatch(e, key));
250
+ if (idx === -1) {
251
+ return { state, result: false };
252
+ }
253
+ return {
254
+ state: {
255
+ ...state,
256
+ assertions: [
257
+ ...state.assertions.slice(0, idx),
258
+ ...state.assertions.slice(idx + 1),
259
+ ],
202
260
  },
261
+ result: true,
203
262
  };
204
263
  });
205
264
  }
206
- /**
207
- * Lazily creates an empty cache file. Using the `'wx'` flag keeps the method
208
- * idempotent even when multiple processes start simultaneously.
209
- */
265
+ // --- Internal file operations ---
210
266
  async ensureCacheFileExists() {
211
267
  const cacheDirectory = node_path_1.default.dirname(this.cacheFilepath);
212
268
  await promises_1.default.mkdir(cacheDirectory, { recursive: true });
@@ -222,12 +278,6 @@ class FilePageAiCache {
222
278
  }
223
279
  }
224
280
  }
225
- /**
226
- * Reads and evaluates the cache file without touching Node's module cache.
227
- * We re-run the file in a fresh CommonJS wrapper on every call so parallel
228
- * writers cannot serve stale data to parallel readers (a risk when relying
229
- * on dynamic import cache-busting tokens).
230
- */
231
281
  async loadCacheModule() {
232
282
  const source = await promises_1.default.readFile(this.cacheFilepath, 'utf-8');
233
283
  const cacheRequire = (0, node_module_1.createRequire)(this.cacheFilepath);
@@ -239,8 +289,6 @@ class FilePageAiCache {
239
289
  __filename: this.cacheFilepath,
240
290
  __dirname: node_path_1.default.dirname(this.cacheFilepath),
241
291
  });
242
- // Mirror Node's CommonJS wrapper so `module.exports` and `require` behave
243
- // exactly as they would when executed normally from disk.
244
292
  const script = new node_vm_1.Script(`(function (exports, require, module, __filename, __dirname) {${source}\n})`, { filename: this.cacheFilepath });
245
293
  const runner = script.runInContext(sandbox);
246
294
  runner(module.exports, cacheRequire, module, this.cacheFilepath, node_path_1.default.dirname(this.cacheFilepath));
@@ -251,9 +299,9 @@ class FilePageAiCache {
251
299
  const cacheModule = await this.loadCacheModule();
252
300
  const exported = (cacheModule.default ??
253
301
  cacheModule);
254
- const caches = Array.isArray(exported.caches) ? exported.caches : [];
255
- return caches.map((entry) => {
256
- // Input validation keeps bad cache writes from crashing consumers.
302
+ // Parse page.ai flow caches
303
+ const rawCaches = Array.isArray(exported.caches) ? exported.caches : [];
304
+ const caches = rawCaches.map((entry) => {
257
305
  if (typeof entry.run !== 'function') {
258
306
  throw new Error(`Invalid cache entry: run must be a function for ${entry.pageUrl ?? 'unknown page'}.`);
259
307
  }
@@ -285,25 +333,40 @@ class FilePageAiCache {
285
333
  };
286
334
  return normalized;
287
335
  });
336
+ // Parse assertion caches (pure JSON data — no functions)
337
+ const rawAssertions = Array.isArray(exported.assertions)
338
+ ? exported.assertions
339
+ : [];
340
+ const assertions = rawAssertions.map((entry) => {
341
+ const steps = Array.isArray(entry.steps)
342
+ ? entry.steps
343
+ : [];
344
+ return materializeAssertEntry({
345
+ pageUrl: String(entry.pageUrl ?? ''),
346
+ assertion: String(entry.assertion ?? ''),
347
+ steps,
348
+ });
349
+ });
350
+ return { caches, assertions };
288
351
  }
289
352
  catch (error) {
290
353
  if (error.code === 'ERR_MODULE_NOT_FOUND' || error.code === 'ENOENT') {
291
- // Cache missing is a valid cold-start scenario; treat it as empty.
292
- return [];
354
+ return { caches: [], assertions: [] };
293
355
  }
294
356
  throw error;
295
357
  }
296
358
  }
297
- async writeCacheFile(cache) {
298
- // All writes funnel through here so we can pretty-print once and keep
299
- // the on-disk schema in sync with the generator format.
300
- const serialized = cache.map((entry) => stripRunner(entry));
301
- const prettified = await (0, CodeGenerator_1.prettifyCode)((0, exports.renderCacheModule)(serialized));
359
+ async writeCacheFile(state) {
360
+ const serializedCaches = state.caches.map((entry) => stripRunner(entry));
361
+ const serializedAssertions = state.assertions.map((e) => ({
362
+ pageUrl: e.pageUrl,
363
+ assertion: e.assertion,
364
+ steps: e.steps,
365
+ }));
366
+ const prettified = await (0, CodeGenerator_1.prettifyCode)((0, exports.renderCacheModule)(serializedCaches, serializedAssertions));
302
367
  await promises_1.default.writeFile(this.cacheFilepath, prettified, 'utf-8');
303
368
  }
304
369
  async withCacheLock(operation) {
305
- // Acquire the OS-level lock around the entire read-modify-write to keep
306
- // inter-process access linearizable.
307
370
  await this.ensureCacheFileExists();
308
371
  const release = await LockFile.lock(this.cacheFilepath, {
309
372
  retries: {
@@ -313,10 +376,12 @@ class FilePageAiCache {
313
376
  },
314
377
  });
315
378
  try {
316
- const currentCache = await this.readCacheFile();
317
- const { cache, result } = await operation(currentCache);
318
- if (cache !== currentCache) {
319
- await this.writeCacheFile(cache);
379
+ const currentState = await this.readCacheFile();
380
+ const { state, result } = await operation(currentState);
381
+ // Write only if caches or assertions changed
382
+ if (state.caches !== currentState.caches ||
383
+ state.assertions !== currentState.assertions) {
384
+ await this.writeCacheFile(state);
320
385
  }
321
386
  return result;
322
387
  }
@@ -333,19 +398,18 @@ exports.FilePageAiCache = FilePageAiCache;
333
398
  */
334
399
  class InMemoryPageAiCache {
335
400
  constructor(initialContents = []) {
336
- // The constructor accepts either the raw caches array or the on-disk
337
- // module shape to make tests less picky about input format.
401
+ this.assertions = [];
338
402
  const entries = 'caches' in initialContents ? initialContents.caches : initialContents;
339
403
  this.cache = entries.map((entry) => materializeEntry(entry));
404
+ if ('assertions' in initialContents && initialContents.assertions) {
405
+ this.assertions = initialContents.assertions.map((a) => materializeAssertEntry(a));
406
+ }
340
407
  }
341
408
  async get(key) {
342
- // In-memory variant does not need locking; we still clone on return to
343
- // protect internal state from callers mutating entries.
344
409
  const matchingEntry = this.cache.find((entry) => pageAiCacheKeysMatch(entry, key));
345
410
  return matchingEntry ? cloneEntryWithRunner(matchingEntry) : null;
346
411
  }
347
412
  async put(entry) {
348
- // Upsert in memory mirrors the file-backed logic for parity.
349
413
  const materialized = materializeEntry(entry);
350
414
  const existingIndex = this.cache.findIndex((candidate) => pageAiCacheKeysMatch(candidate, entry));
351
415
  if (existingIndex === -1) {
@@ -357,8 +421,6 @@ class InMemoryPageAiCache {
357
421
  this.cache = nextCache;
358
422
  }
359
423
  async delete(key) {
360
- // Simple array removal; returns false when nothing was removed to keep
361
- // parity with the file-backed API surface.
362
424
  const targetIndex = this.cache.findIndex((entry) => pageAiCacheKeysMatch(entry, key));
363
425
  if (targetIndex === -1) {
364
426
  return false;
@@ -372,8 +434,41 @@ class InMemoryPageAiCache {
372
434
  async snapshot() {
373
435
  return {
374
436
  caches: this.cache.map((entry) => stripRunner(entry)),
437
+ assertions: this.assertions.map((a) => ({
438
+ pageUrl: a.pageUrl,
439
+ assertion: a.assertion,
440
+ steps: a.steps,
441
+ })),
375
442
  };
376
443
  }
444
+ // --- Assert cache operations ---
445
+ async getAssert(key) {
446
+ const match = this.assertions.find((e) => assertCacheKeysMatch(e, key));
447
+ return match ? cloneAssertEntry(match) : null;
448
+ }
449
+ async putAssert(entry) {
450
+ const materialized = materializeAssertEntry(entry);
451
+ const idx = this.assertions.findIndex((e) => assertCacheKeysMatch(e, entry));
452
+ if (idx === -1) {
453
+ this.assertions = [...this.assertions, materialized];
454
+ }
455
+ else {
456
+ const next = [...this.assertions];
457
+ next[idx] = materialized;
458
+ this.assertions = next;
459
+ }
460
+ }
461
+ async deleteAssert(key) {
462
+ const idx = this.assertions.findIndex((e) => assertCacheKeysMatch(e, key));
463
+ if (idx === -1) {
464
+ return false;
465
+ }
466
+ this.assertions = [
467
+ ...this.assertions.slice(0, idx),
468
+ ...this.assertions.slice(idx + 1),
469
+ ];
470
+ return true;
471
+ }
377
472
  }
378
473
  exports.InMemoryPageAiCache = InMemoryPageAiCache;
379
474
  //# sourceMappingURL=cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../../src/lib/ai/cache/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../../src/lib/ai/cache/cache.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import type { ToolCallResult } from '../../models/ToolCallResult';
10
10
  import type { FlowsPersistence } from '../../persistence/flows/FlowsPersistence';
11
11
  import type { CookieAnalyses } from '../../tools/CreateBrowserCookieReportTool';
12
12
  import type { AccessibilityResults } from '../../tools/RunAccessibilityTestTool';
13
+ import type { PageAiCache } from '../ai/cache/cache';
13
14
  import type { PageAi, PageAiNoSchemaOptions, PageAiOptions, PageAiSchemaOptions } from '../ai/PageAi';
14
15
  import type { SmartSelector } from './SmartSelector';
15
16
  export type { AccessibilityResults, CookieAnalyses, PageAiNoSchemaOptions, PageAiOptions, PageAiSchemaOptions, };
@@ -133,6 +134,14 @@ export type PageAiCallable = PageAiAct & {
133
134
  retries?: number;
134
135
  retryDelaySeconds?: number;
135
136
  gptClient?: GptClient | Exclude<LanguageModel, string>;
137
+ /**
138
+ * Enables cache lookup/storage for deterministic replays using standard
139
+ * Playwright assertions. On the first run the AI evaluates the assertion
140
+ * and generates equivalent Playwright code which is cached. Subsequent
141
+ * runs execute the cached code directly, skipping the AI call entirely.
142
+ * Defaults to `true`.
143
+ */
144
+ cache?: boolean;
136
145
  }): Promise<void>;
137
146
  /**
138
147
  * Return an object conforming to the given Zod schema. The object will be
@@ -291,6 +300,7 @@ export interface DonobuExtendedPage extends Page {
291
300
  donobuStack: DonobuStack;
292
301
  interactionVisualizer: InteractionVisualizer;
293
302
  pageAi: PageAi | undefined;
303
+ pageAiCache: PageAiCache | undefined;
294
304
  persistence: FlowsPersistence;
295
305
  initialBrowserState: BrowserStorageState;
296
306
  gptClient: GptClient | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"DonobuExtendedPage.d.ts","sourceRoot":"","sources":["../../../../src/lib/page/DonobuExtendedPage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DonobuExtendedPage.d.ts","sourceRoot":"","sources":["../../../../src/lib/page/DonobuExtendedPage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,MAAM,EACN,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,mBAAmB,GACpB,CAAC;AAEF,KAAK,0BAA0B,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,IAAI,IAAI,CAChE,mBAAmB,CAAC,MAAM,CAAC,EAC3B,WAAW,CACZ,GAAG;IACF,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;CACxD,CAAC;AAEF,KAAK,6BAA6B,GAAG,IAAI,CACvC,qBAAqB,EACrB,WAAW,CACZ,GAAG;IACF,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;CACxD,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EACzB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,0BAA0B,CAAC,MAAM,CAAC,GAC3C,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5B,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG;IACvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmDG;IACH,GAAG,EAAE,SAAS,CAAC;IACf;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CACJ,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACvD;;;;;;WAMG;QACH,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,GACA,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EAChC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;KACxD,GACA,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,eAAe,CACb,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;KACxD,GACA,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB;;;;;;;;;;OAUG;IACH,kBAAkB,CAAC,OAAO,CAAC,EAAE;QAC3B,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;KACxD,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAC7B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,kBAAmB,SAAQ,IAAI;IAC9C;;;;;;;;;;;;OAYG;IACH,EAAE,EAAE,cAAc,CAAC;IACnB;;;;;;;;;;;;;OAaG;IACH,IAAI,CACF,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,aAAa,CAAC;IACjB;;;;;;;;;;OAUG;IACH,GAAG,CACD,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,GAAG,EAChB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;KACxD,GACA,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B;;;;;;;;;;OAUG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpD;;;;;;;;;;OAUG;IACH,oBAAoB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEtD,IAAI,EAAE;QACJ,kBAAkB,EAAE,YAAY,CAAC;QACjC,WAAW,EAAE,WAAW,CAAC;QACzB,qBAAqB,EAAE,qBAAqB,CAAC;QAC7C,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;QACrC,WAAW,EAAE,gBAAgB,CAAC;QAC9B,mBAAmB,EAAE,mBAAmB,CAAC;QACzC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;QACjC,iBAAiB,CAAC,EAAE;YAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;SAC5B,CAAC;KACH,CAAC;CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"extendPage.d.ts","sourceRoot":"","sources":["../../../../src/lib/page/extendPage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AA2B9D,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,sBAAsB,CAAC;AAwB9B;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE;IACR;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,GACA,OAAO,CAAC,kBAAkB,CAAC,CAmG7B"}
1
+ {"version":3,"file":"extendPage.d.ts","sourceRoot":"","sources":["../../../../src/lib/page/extendPage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AA8B9D,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,sBAAsB,CAAC;AAwB9B;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE;IACR;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,GACA,OAAO,CAAC,kBAAkB,CAAC,CAoG7B"}