donobu 5.3.0 → 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 (93) 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 +19 -1
  8. package/dist/cli/playwright-json-to-html.js.map +1 -1
  9. package/dist/cli/playwright-json-to-markdown.js +11 -2
  10. package/dist/cli/playwright-json-to-markdown.js.map +1 -1
  11. package/dist/cli/playwright-json-to-slack-json.js +9 -1
  12. package/dist/cli/playwright-json-to-slack-json.js.map +1 -1
  13. package/dist/codegen/CodeGenerator.d.ts.map +1 -1
  14. package/dist/codegen/CodeGenerator.js +7 -14
  15. package/dist/codegen/CodeGenerator.js.map +1 -1
  16. package/dist/envVars.d.ts +2 -0
  17. package/dist/envVars.d.ts.map +1 -1
  18. package/dist/envVars.js +4 -0
  19. package/dist/envVars.js.map +1 -1
  20. package/dist/esm/apis/FlowsFilesApi.d.ts +18 -4
  21. package/dist/esm/apis/FlowsFilesApi.d.ts.map +1 -1
  22. package/dist/esm/apis/FlowsFilesApi.js +41 -4
  23. package/dist/esm/apis/FlowsFilesApi.js.map +1 -1
  24. package/dist/esm/cli/donobu-cli.js +134 -34
  25. package/dist/esm/cli/donobu-cli.js.map +1 -1
  26. package/dist/esm/cli/playwright-json-to-html.js +19 -1
  27. package/dist/esm/cli/playwright-json-to-html.js.map +1 -1
  28. package/dist/esm/cli/playwright-json-to-markdown.js +11 -2
  29. package/dist/esm/cli/playwright-json-to-markdown.js.map +1 -1
  30. package/dist/esm/cli/playwright-json-to-slack-json.js +9 -1
  31. package/dist/esm/cli/playwright-json-to-slack-json.js.map +1 -1
  32. package/dist/esm/codegen/CodeGenerator.d.ts.map +1 -1
  33. package/dist/esm/codegen/CodeGenerator.js +7 -14
  34. package/dist/esm/codegen/CodeGenerator.js.map +1 -1
  35. package/dist/esm/envVars.d.ts +2 -0
  36. package/dist/esm/envVars.d.ts.map +1 -1
  37. package/dist/esm/envVars.js +4 -0
  38. package/dist/esm/envVars.js.map +1 -1
  39. package/dist/esm/lib/ai/cache/assertCache.d.ts +58 -0
  40. package/dist/esm/lib/ai/cache/assertCache.d.ts.map +1 -0
  41. package/dist/esm/lib/ai/cache/assertCache.js +110 -0
  42. package/dist/esm/lib/ai/cache/assertCache.js.map +1 -0
  43. package/dist/esm/lib/ai/cache/cache.d.ts +16 -15
  44. package/dist/esm/lib/ai/cache/cache.d.ts.map +1 -1
  45. package/dist/esm/lib/ai/cache/cache.js +166 -71
  46. package/dist/esm/lib/ai/cache/cache.js.map +1 -1
  47. package/dist/esm/lib/page/DonobuExtendedPage.d.ts +10 -0
  48. package/dist/esm/lib/page/DonobuExtendedPage.d.ts.map +1 -1
  49. package/dist/esm/lib/page/extendPage.d.ts.map +1 -1
  50. package/dist/esm/lib/page/extendPage.js +86 -3
  51. package/dist/esm/lib/page/extendPage.js.map +1 -1
  52. package/dist/esm/managers/AdminApiController.d.ts.map +1 -1
  53. package/dist/esm/managers/AdminApiController.js +1 -0
  54. package/dist/esm/managers/AdminApiController.js.map +1 -1
  55. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.d.ts +0 -1
  56. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.d.ts.map +1 -1
  57. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.js +1 -20
  58. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.js.map +1 -1
  59. package/dist/esm/tools/AssertTool.d.ts.map +1 -1
  60. package/dist/esm/tools/AssertTool.js +62 -14
  61. package/dist/esm/tools/AssertTool.js.map +1 -1
  62. package/dist/esm/utils/MiscUtils.d.ts +4 -0
  63. package/dist/esm/utils/MiscUtils.d.ts.map +1 -1
  64. package/dist/esm/utils/MiscUtils.js +25 -0
  65. package/dist/esm/utils/MiscUtils.js.map +1 -1
  66. package/dist/lib/ai/cache/assertCache.d.ts +58 -0
  67. package/dist/lib/ai/cache/assertCache.d.ts.map +1 -0
  68. package/dist/lib/ai/cache/assertCache.js +110 -0
  69. package/dist/lib/ai/cache/assertCache.js.map +1 -0
  70. package/dist/lib/ai/cache/cache.d.ts +16 -15
  71. package/dist/lib/ai/cache/cache.d.ts.map +1 -1
  72. package/dist/lib/ai/cache/cache.js +166 -71
  73. package/dist/lib/ai/cache/cache.js.map +1 -1
  74. package/dist/lib/page/DonobuExtendedPage.d.ts +10 -0
  75. package/dist/lib/page/DonobuExtendedPage.d.ts.map +1 -1
  76. package/dist/lib/page/extendPage.d.ts.map +1 -1
  77. package/dist/lib/page/extendPage.js +86 -3
  78. package/dist/lib/page/extendPage.js.map +1 -1
  79. package/dist/managers/AdminApiController.d.ts.map +1 -1
  80. package/dist/managers/AdminApiController.js +1 -0
  81. package/dist/managers/AdminApiController.js.map +1 -1
  82. package/dist/persistence/flows/FlowsPersistenceSqlite.d.ts +0 -1
  83. package/dist/persistence/flows/FlowsPersistenceSqlite.d.ts.map +1 -1
  84. package/dist/persistence/flows/FlowsPersistenceSqlite.js +1 -20
  85. package/dist/persistence/flows/FlowsPersistenceSqlite.js.map +1 -1
  86. package/dist/tools/AssertTool.d.ts.map +1 -1
  87. package/dist/tools/AssertTool.js +62 -14
  88. package/dist/tools/AssertTool.js.map +1 -1
  89. package/dist/utils/MiscUtils.d.ts +4 -0
  90. package/dist/utils/MiscUtils.d.ts.map +1 -1
  91. package/dist/utils/MiscUtils.js +25 -0
  92. package/dist/utils/MiscUtils.js.map +1 -1
  93. package/package.json +1 -1
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaywrightAssertionStepSchema = void 0;
4
+ exports.buildAssertExecutor = buildAssertExecutor;
5
+ const test_1 = require("@playwright/test");
6
+ const v4_1 = require("zod/v4");
7
+ // ---------------------------------------------------------------------------
8
+ // Structured assertion step schema
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * A single structured assertion step returned by the AI. Each step maps
12
+ * deterministically to one Playwright `expect` call — no free-form code
13
+ * generation, no VM evaluation.
14
+ */
15
+ exports.PlaywrightAssertionStepSchema = v4_1.z.object({
16
+ /** How to locate the element. Set to `null` for page-level assertions (title, url). */
17
+ locator: v4_1.z
18
+ .enum(['role', 'text'])
19
+ .nullable()
20
+ .describe(`How to locate the target element on the page.
21
+ - 'role': Use page.getByRole(role, { name: value }) — best for semantic elements (headings, buttons, links, tabs, etc.)
22
+ - 'text': Use page.getByText(value) — best for checking text content visibility
23
+ - null: For page-level assertions (toHaveTitle, toHaveURL) where no element locator is needed`),
24
+ /** ARIA role name. Required when locator is 'role', otherwise null. */
25
+ role: v4_1.z
26
+ .string()
27
+ .nullable()
28
+ .describe(`The ARIA role to pass to page.getByRole(). Required when locator is 'role', null otherwise.
29
+ Common roles: 'heading', 'button', 'link', 'tab', 'tabpanel', 'dialog', 'navigation', 'textbox', 'checkbox', 'radio', 'combobox', 'menuitem'.`),
30
+ /** The text, name, title, URL, or regex pattern to match. */
31
+ value: v4_1.z.string().describe(`The value to match against. Its meaning depends on the locator and assertion:
32
+ - For locator='role': the accessible name passed to { name: value }
33
+ - For locator='text': the text content to find via page.getByText()
34
+ - For assertion='toHaveTitle': the expected page title
35
+ - For assertion='toHaveURL': the expected page URL or URL pattern`),
36
+ /** Whether 'value' should be interpreted as a regex pattern. */
37
+ valueIsRegex: v4_1.z
38
+ .boolean()
39
+ .describe('Set to true when value is a regex pattern (e.g. "Page \\d+ of \\d+"). The value will be passed to new RegExp().'),
40
+ /** The Playwright assertion to apply. */
41
+ assertion: v4_1.z
42
+ .enum([
43
+ 'toBeVisible',
44
+ 'toBeHidden',
45
+ 'toBeEnabled',
46
+ 'toBeDisabled',
47
+ 'toHaveTitle',
48
+ 'toHaveURL',
49
+ ])
50
+ .describe(`The Playwright assertion to apply:
51
+ - 'toBeVisible': expect(locator).toBeVisible() — element is present and visible
52
+ - 'toBeHidden': expect(locator).not.toBeVisible() — element is not visible (or absent)
53
+ - 'toBeEnabled': expect(locator).toBeEnabled() — interactive element is enabled
54
+ - 'toBeDisabled': expect(locator).toBeDisabled() — interactive element is disabled
55
+ - 'toHaveTitle': expect(page).toHaveTitle(value) — page title matches (set locator to null)
56
+ - 'toHaveURL': expect(page).toHaveURL(value) — page URL matches (set locator to null)`),
57
+ /** Whether to narrow to the first match via .first() when the locator might match multiple elements. */
58
+ useFirst: v4_1.z
59
+ .boolean()
60
+ .describe('Set to true to call .first() on the locator when the selector might match multiple elements.'),
61
+ });
62
+ /**
63
+ * Builds an executor function from structured assertion steps.
64
+ * Each step maps to exactly one Playwright `expect` call — no string
65
+ * evaluation, no VM contexts.
66
+ */
67
+ function buildAssertExecutor(steps) {
68
+ return async ({ page }) => {
69
+ for (const step of steps) {
70
+ const matcher = step.valueIsRegex
71
+ ? new RegExp(step.value)
72
+ : step.value;
73
+ // Page-level assertions (no element locator needed)
74
+ if (step.assertion === 'toHaveTitle') {
75
+ await (0, test_1.expect)(page).toHaveTitle(matcher);
76
+ continue;
77
+ }
78
+ if (step.assertion === 'toHaveURL') {
79
+ await (0, test_1.expect)(page).toHaveURL(matcher);
80
+ continue;
81
+ }
82
+ // Element-level assertions
83
+ let locator;
84
+ if (step.locator === 'role' && step.role) {
85
+ locator = page.getByRole(step.role, { name: matcher });
86
+ }
87
+ else {
88
+ locator = page.getByText(matcher);
89
+ }
90
+ if (step.useFirst) {
91
+ locator = locator.first();
92
+ }
93
+ switch (step.assertion) {
94
+ case 'toBeVisible':
95
+ await (0, test_1.expect)(locator).toBeVisible();
96
+ break;
97
+ case 'toBeHidden':
98
+ await (0, test_1.expect)(locator).not.toBeVisible();
99
+ break;
100
+ case 'toBeEnabled':
101
+ await (0, test_1.expect)(locator).toBeEnabled();
102
+ break;
103
+ case 'toBeDisabled':
104
+ await (0, test_1.expect)(locator).toBeDisabled();
105
+ break;
106
+ }
107
+ }
108
+ };
109
+ }
110
+ //# sourceMappingURL=assertCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertCache.js","sourceRoot":"","sources":["../../../../../src/lib/ai/cache/assertCache.ts"],"names":[],"mappings":"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"}
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA4C;AAC5C,0DAA6B;AAC7B,qCAAgD;AAEhD,2DAA6B;AAC7B,0DAA4C;AAE5C,kEAA8D;AAgE9D,MAAM,wBAAwB,GAAG,CAC/B,IAA4C,EAC5C,KAA6C,EACpC,EAAE;AACX,6EAA6E;AAC7E,kDAAkD;AAClD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAEjD,8EAA8E;AAC9E,sEAAsE;AACtE,MAAM,oBAAoB,GAAG,CAC3B,IAAoB,EACpB,KAAqB,EACZ,EAAE,CACX,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC;IAC1D,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;IAC9B,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;IACtC,wBAAwB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IACnD,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;IAC/D,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,CAAC;AAE3C;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAuB,EAAE;IAClE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAA,uBAAa,EAAC,EAAE,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,MAA6B,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,eAAe,GAAG,IAAI,KAAK,CAC/B,8CAA8C,SAAS,EAAE,CAC1D,CAAC;QACF,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC1B,eAA6C,CAAC,KAAK,GAAG,KAAK,CAAC;QAC/D,CAAC;QACD,MAAM,eAAe,CAAC;IACxB,CAAC;AACH,CAAC,CAAC;AAEF,wDAAwD;AACxD,MAAM,gBAAgB,GAAG,CACvB,KAAuB,EACK,EAAE,CAAC,CAAC;IAChC,GAAG,KAAK;IACR,GAAG,EAAE,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC;CACvC,CAAC,CAAC;AAEH,gFAAgF;AAChF,MAAM,WAAW,GAAG,CAAC,KAAiC,EAAoB,EAAE,CAAC,CAAC;IAC5E,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK;QAChD,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;QAClC,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,WAAW,EAAE,KAAK,CAAC,WAAW;IAC9B,MAAM,EACJ,KAAK,CAAC,MAAM,KAAK,IAAI;QACnB,CAAC,CAAC,IAAI;QACN,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAA6B;IAC3E,YAAY,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;IACrC,YAAY,EAAE,KAAK,CAAC,YAAY;IAChC,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,SAAS,EAAE,KAAK,CAAC,SAAS;CAC3B,CAAC,CAAC;AAEH,4EAA4E;AAC5E,2CAA2C;AAC3C,MAAM,oBAAoB,GAAG,CAC3B,KAAiC,EACL,EAAE,CAAC,CAAC;IAChC,GAAG,WAAW,CAAC,KAAK,CAAC;IACrB,GAAG,EAAE,KAAK,CAAC,GAAG;CACf,CAAC,CAAC;AAOH,wEAAwE;AACxE,MAAM,cAAc,GAAG,CAAC,KAAuB,EAAU,EAAE;IACzD,MAAM,kBAAkB,GACtB,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC1E,MAAM,aAAa,GACjB,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,mBAAmB,GACvB,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,+DAA+D;IAC/D,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,KAAK,CAAC,IAAI,CACR,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAC3C,gBAAgB,kBAAkB,EAAE,EACpC,WAAW,aAAa,EAAE,EAC1B,iBAAiB,mBAAmB,EAAE,EACtC,iBAAiB,mBAAmB,EAAE,EACtC,QAAQ,KAAK,CAAC,SAAS,EAAE,CAC1B,CAAC;IACF,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,CAAC,CAAC;AAEF,6EAA6E;AAC7E,+EAA+E;AACxE,MAAM,iBAAiB,GAAG,CAAC,OAA2B,EAAU,EAAE;IACvE,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,OAAO;;;;;;;8BAOqB,iBAAiB,MAAM,CAAC;AACtD,CAAC,CAAC;AAVW,QAAA,iBAAiB,qBAU5B;AAEF;;;GAGG;AACH,MAAa,eAAe;IAC1B,YAAoC,aAAqB;QAArB,kBAAa,GAAb,aAAa,CAAQ;IAAG,CAAC;IAEtD,KAAK,CAAC,GAAG,CACd,GAAmB;QAEnB,gEAAgE;QAChE,yEAAyE;QACzE,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxC,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACzC,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CACjC,CAAC;YAEF,OAAO;gBACL,KAAK;gBACL,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI;aACnE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,KAAuB;QACtC,yEAAyE;QACzE,wDAAwD;QACxD,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACvC,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAClD,oBAAoB,CAAC,SAAS,EAAE,KAAK,CAAC,CACvC,CAAC;YACF,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,aAAa,GACjB,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YAEpE,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzB,aAAa,CAAC,aAAa,CAAC,GAAG,iBAAiB,CAAC;YACnD,CAAC;YAED,OAAO;gBACL,KAAK,EAAE,aAAa;gBACpB,MAAM,EAAE,SAAS;aAClB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAmB;QACrC,sEAAsE;QACtE,6BAA6B;QAC7B,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxC,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5C,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CACjC,CAAC;YAEF,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;gBACvB,OAAO;oBACL,KAAK;oBACL,MAAM,EAAE,KAAK;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,aAAa,GAAG;gBACpB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;gBAC9B,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;aAChC,CAAC;YAEF,OAAO;gBACL,KAAK,EAAE,aAAa;gBACpB,MAAM,EAAE,IAAI;aACb,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxC,MAAM,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAEnE,OAAO;gBACL,KAAK;gBACL,MAAM,EAAE;oBACN,MAAM,EAAE,iBAAiB;iBAC1B;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,qBAAqB;QACjC,MAAM,cAAc,GAAG,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpD,IAAI,CAAC;YACH,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,IAAA,yBAAiB,EAAC,EAAE,CAAC,EAAE;gBAC5D,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,eAAe;QAC3B,MAAM,MAAM,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,IAAA,2BAAa,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,EAAa,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAA,uBAAa,EAAC;YAC5B,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,YAAY;YACrB,UAAU,EAAE,IAAI,CAAC,aAAa;YAC9B,SAAS,EAAE,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;SAC5C,CAAC,CAAC;QAEH,0EAA0E;QAC1E,0DAA0D;QAC1D,MAAM,MAAM,GAAG,IAAI,gBAAM,CACvB,gEAAgE,MAAM,MAAM,EAC5E,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,CACjC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,CACJ,MAAM,CAAC,OAAO,EACd,YAAY,EACZ,MAAM,EACN,IAAI,CAAC,aAAa,EAClB,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CACjC,CAAC;QAEF,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YACjD,MAAM,QAAQ,GAAG,CAAE,WAAqC,CAAC,OAAO;gBAC9D,WAAW,CAEZ,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC1B,mEAAmE;gBACnE,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CACb,mDAAmD,KAAK,CAAC,OAAO,IAAI,cAAc,GAAG,CACtF,CAAC;gBACJ,CAAC;gBACD,MAAM,UAAU,GAA+B;oBAC7C,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS;wBAChC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAkB,EAAE;wBACpC,CAAC,CAAC,KAAK,CAAC,UAAU,KAAK,KAAK;4BAC1B,CAAC,CAAC,EAAE,UAAU,EAAE,KAAc,EAAE;4BAChC,CAAC,CAAC,EAAE,CAAC;oBACT,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;oBACpC,WAAW,EACT,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;wBAC3D,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;oBAC/B,MAAM,EACJ,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;wBACjD,CAAC,CAAC,IAAI;wBACN,CAAC,CAAE,KAAK,CAAC,MAAkC;oBAC/C,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;wBAC7C,CAAC,CAAE,KAAK,CAAC,YAAyB;wBAClC,CAAC,CAAC,EAAE;oBACN,YAAY,EACV,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ;wBACtC,KAAK,CAAC,YAAY,KAAK,IAAI;wBACzB,CAAC,CAAC,KAAK,CAAC,YAAY;wBACpB,CAAC,CAAC,IAAI;oBACV,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;wBACnC,CAAC,CAAE,KAAK,CAAC,OAAoB;wBAC7B,CAAC,CAAC,IAAI;oBACR,GAAG,EAAE,KAAK,CAAC,GAA0B;oBACrC,SAAS,EAAG,KAAK,CAAC,GAA2B,CAAC,QAAQ,EAAE;iBACzD,CAAC;gBACF,OAAO,UAAU,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrE,mEAAmE;gBACnE,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,KAAmC;QAEnC,sEAAsE;QACtE,wDAAwD;QACxD,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,MAAM,IAAA,4BAAY,EAAC,IAAA,yBAAiB,EAAC,UAAU,CAAC,CAAC,CAAC;QACrE,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,SAEqC;QAErC,wEAAwE;QACxE,qCAAqC;QACrC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAEnC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACtD,OAAO,EAAE;gBACP,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,GAAG;gBACf,UAAU,EAAE,IAAI;aACjB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAChD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,CAAC;YAExD,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;gBAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;CACF;AA9OD,0CA8OC;AAED;;;;GAIG;AACH,MAAa,mBAAmB;IAG9B,YACE,kBAA4D,EAAE;QAE9D,qEAAqE;QACrE,4DAA4D;QAC5D,MAAM,OAAO,GACX,QAAQ,IAAI,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEM,KAAK,CAAC,GAAG,CACd,GAAmB;QAEnB,uEAAuE;QACvE,wDAAwD;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9C,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CACjC,CAAC;QAEF,OAAO,aAAa,CAAC,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,KAAuB;QACtC,6DAA6D;QAC7D,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CACvD,oBAAoB,CAAC,SAAS,EAAE,KAAK,CAAC,CACvC,CAAC;QAEF,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,SAAS,CAAC,aAAa,CAAC,GAAG,YAAY,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAmB;QACrC,uEAAuE;QACvE,2CAA2C;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CACjD,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CACjC,CAAC;QAEF,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,KAAK,GAAG;YACX,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;YACnC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;SACrC,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACtD,CAAC;IACJ,CAAC;CACF;AAlED,kDAkEC"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../../src/lib/ai/cache/cache.ts"],"names":[],"mappings":"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"}