@ank1015/llm-extension 0.0.1

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/README.md +214 -0
  2. package/dist/chrome/background.js +244 -0
  3. package/dist/chrome/manifest.json +23 -0
  4. package/dist/index.d.ts +8 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +8 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/native/host-wrapper.sh +11 -0
  9. package/dist/native/host.d.ts +2 -0
  10. package/dist/native/host.d.ts.map +1 -0
  11. package/dist/native/host.js +21 -0
  12. package/dist/native/host.js.map +1 -0
  13. package/dist/native/server.d.ts +28 -0
  14. package/dist/native/server.d.ts.map +1 -0
  15. package/dist/native/server.js +112 -0
  16. package/dist/native/server.js.map +1 -0
  17. package/dist/native/stdio.d.ts +21 -0
  18. package/dist/native/stdio.d.ts.map +1 -0
  19. package/dist/native/stdio.js +94 -0
  20. package/dist/native/stdio.js.map +1 -0
  21. package/dist/protocol/constants.d.ts +26 -0
  22. package/dist/protocol/constants.d.ts.map +1 -0
  23. package/dist/protocol/constants.js +26 -0
  24. package/dist/protocol/constants.js.map +1 -0
  25. package/dist/protocol/types.d.ts +39 -0
  26. package/dist/protocol/types.d.ts.map +1 -0
  27. package/dist/protocol/types.js +3 -0
  28. package/dist/protocol/types.js.map +1 -0
  29. package/dist/sdk/action/diff.d.ts +7 -0
  30. package/dist/sdk/action/diff.d.ts.map +1 -0
  31. package/dist/sdk/action/diff.js +54 -0
  32. package/dist/sdk/action/diff.js.map +1 -0
  33. package/dist/sdk/action/helpers.d.ts +23 -0
  34. package/dist/sdk/action/helpers.d.ts.map +1 -0
  35. package/dist/sdk/action/helpers.js +93 -0
  36. package/dist/sdk/action/helpers.js.map +1 -0
  37. package/dist/sdk/action/index.d.ts +6 -0
  38. package/dist/sdk/action/index.d.ts.map +1 -0
  39. package/dist/sdk/action/index.js +4 -0
  40. package/dist/sdk/action/index.js.map +1 -0
  41. package/dist/sdk/action/script.d.ts +4 -0
  42. package/dist/sdk/action/script.d.ts.map +1 -0
  43. package/dist/sdk/action/script.js +359 -0
  44. package/dist/sdk/action/script.js.map +1 -0
  45. package/dist/sdk/action/types.d.ts +47 -0
  46. package/dist/sdk/action/types.d.ts.map +1 -0
  47. package/dist/sdk/action/types.js +2 -0
  48. package/dist/sdk/action/types.js.map +1 -0
  49. package/dist/sdk/client.d.ts +42 -0
  50. package/dist/sdk/client.d.ts.map +1 -0
  51. package/dist/sdk/client.js +118 -0
  52. package/dist/sdk/client.js.map +1 -0
  53. package/dist/sdk/connect.d.ts +29 -0
  54. package/dist/sdk/connect.d.ts.map +1 -0
  55. package/dist/sdk/connect.js +99 -0
  56. package/dist/sdk/connect.js.map +1 -0
  57. package/dist/sdk/index.d.ts +17 -0
  58. package/dist/sdk/index.d.ts.map +1 -0
  59. package/dist/sdk/index.js +19 -0
  60. package/dist/sdk/index.js.map +1 -0
  61. package/dist/sdk/observe/helpers.d.ts +16 -0
  62. package/dist/sdk/observe/helpers.d.ts.map +1 -0
  63. package/dist/sdk/observe/helpers.js +278 -0
  64. package/dist/sdk/observe/helpers.js.map +1 -0
  65. package/dist/sdk/observe/index.d.ts +6 -0
  66. package/dist/sdk/observe/index.d.ts.map +1 -0
  67. package/dist/sdk/observe/index.js +4 -0
  68. package/dist/sdk/observe/index.js.map +1 -0
  69. package/dist/sdk/observe/script.d.ts +7 -0
  70. package/dist/sdk/observe/script.d.ts.map +1 -0
  71. package/dist/sdk/observe/script.js +680 -0
  72. package/dist/sdk/observe/script.js.map +1 -0
  73. package/dist/sdk/observe/storage.d.ts +39 -0
  74. package/dist/sdk/observe/storage.d.ts.map +1 -0
  75. package/dist/sdk/observe/storage.js +83 -0
  76. package/dist/sdk/observe/storage.js.map +1 -0
  77. package/dist/sdk/observe/types.d.ts +140 -0
  78. package/dist/sdk/observe/types.d.ts.map +1 -0
  79. package/dist/sdk/observe/types.js +2 -0
  80. package/dist/sdk/observe/types.js.map +1 -0
  81. package/dist/sdk/window.d.ts +97 -0
  82. package/dist/sdk/window.d.ts.map +1 -0
  83. package/dist/sdk/window.js +795 -0
  84. package/dist/sdk/window.js.map +1 -0
  85. package/package.json +55 -0
@@ -0,0 +1,99 @@
1
+ import { exec } from 'node:child_process';
2
+ import { connect as tcpConnect } from 'node:net';
3
+ import { DEFAULT_PORT, MAX_TCP_MESSAGE_SIZE_BYTES } from '../protocol/constants.js';
4
+ import { ChromeClient } from './client.js';
5
+ const DEFAULT_LAUNCH_TIMEOUT = 30_000;
6
+ /**
7
+ * Connect to the Chrome RPC server over TCP.
8
+ *
9
+ * Returns a ChromeClient with the same `call()` and `subscribe()` API
10
+ * as the native host uses directly. The connection is multiplexed —
11
+ * multiple calls and subscriptions can be in-flight simultaneously.
12
+ *
13
+ * When `launch: true` is set, Chrome will be opened automatically
14
+ * if the connection fails, then retried until the native host is ready.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { connect } from '@ank1015/llm-extension';
19
+ *
20
+ * const chrome = await connect({ launch: true });
21
+ * const tabs = await chrome.call('tabs.query', { active: true });
22
+ * ```
23
+ */
24
+ export async function connect(opts) {
25
+ const port = opts?.port ?? DEFAULT_PORT;
26
+ const host = opts?.host ?? '127.0.0.1';
27
+ try {
28
+ return await tryConnect(port, host);
29
+ }
30
+ catch (error) {
31
+ if (!opts?.launch || !isConnectionRefused(error)) {
32
+ throw error;
33
+ }
34
+ await launchChrome();
35
+ const timeout = opts.launchTimeout ?? DEFAULT_LAUNCH_TIMEOUT;
36
+ const deadline = Date.now() + timeout;
37
+ let delay = 200;
38
+ while (Date.now() < deadline) {
39
+ await sleep(delay);
40
+ try {
41
+ return await tryConnect(port, host);
42
+ }
43
+ catch (retryError) {
44
+ if (!isConnectionRefused(retryError))
45
+ throw retryError;
46
+ }
47
+ delay = Math.min(delay * 2, 2000);
48
+ }
49
+ throw new Error(`Chrome did not become available on ${host}:${port} within ${timeout}ms. ` +
50
+ 'Ensure the extension is installed and the native host is registered.');
51
+ }
52
+ }
53
+ function tryConnect(port, host) {
54
+ return new Promise((resolve, reject) => {
55
+ const socket = tcpConnect({ port, host }, () => {
56
+ const client = new ChromeClient({
57
+ input: socket,
58
+ output: socket,
59
+ maxIncomingMessageSizeBytes: MAX_TCP_MESSAGE_SIZE_BYTES,
60
+ maxOutgoingMessageSizeBytes: MAX_TCP_MESSAGE_SIZE_BYTES,
61
+ });
62
+ client.run().catch(() => {
63
+ // Errors propagate to pending calls via client.closed
64
+ });
65
+ resolve(client);
66
+ });
67
+ socket.once('error', reject);
68
+ });
69
+ }
70
+ function isConnectionRefused(error) {
71
+ return (error instanceof Error &&
72
+ 'code' in error &&
73
+ error.code === 'ECONNREFUSED');
74
+ }
75
+ function launchChrome() {
76
+ const platform = process.platform;
77
+ let command;
78
+ if (platform === 'darwin') {
79
+ command = 'open -a "Google Chrome"';
80
+ }
81
+ else if (platform === 'linux') {
82
+ command = 'google-chrome --no-first-run &';
83
+ }
84
+ else {
85
+ throw new Error(`Auto-launch is not supported on ${platform}`);
86
+ }
87
+ return new Promise((resolve, reject) => {
88
+ exec(command, (error) => {
89
+ if (error)
90
+ reject(new Error(`Failed to launch Chrome: ${error.message}`));
91
+ else
92
+ resolve();
93
+ });
94
+ });
95
+ }
96
+ function sleep(ms) {
97
+ return new Promise((resolve) => setTimeout(resolve, ms));
98
+ }
99
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/sdk/connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ChromeClient } from './client.js';
2
+ import type { ChromeClientOptions } from './client.js';
3
+ export { ChromeClient } from './client.js';
4
+ export type { ChromeClientOptions } from './client.js';
5
+ export { connect } from './connect.js';
6
+ export type { ConnectOptions } from './connect.js';
7
+ export { Window } from './window.js';
8
+ export type { ObserveFilter, WindowActionOptions, WindowDownloadOptions, WindowEvaluateOptions, WindowGetPageOptions, WindowObserveOptions, WindowOpenOptions, WindowScrollBehavior, WindowScrollOptions, WindowSemanticFilter, WindowScreenshotOptions, WindowTab, WindowTypeOptions, } from './window.js';
9
+ /**
10
+ * Create a ChromeClient and start the read loop.
11
+ *
12
+ * The read loop runs in the background — the client is immediately
13
+ * usable for `call()` and `subscribe()`. The process stays alive
14
+ * as long as Chrome keeps the native messaging port open.
15
+ */
16
+ export declare function createChromeClient(opts?: ChromeClientOptions): ChromeClient;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,SAAS,EACT,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,YAAY,CAU3E"}
@@ -0,0 +1,19 @@
1
+ import { ChromeClient } from './client.js';
2
+ export { ChromeClient } from './client.js';
3
+ export { connect } from './connect.js';
4
+ export { Window } from './window.js';
5
+ /**
6
+ * Create a ChromeClient and start the read loop.
7
+ *
8
+ * The read loop runs in the background — the client is immediately
9
+ * usable for `call()` and `subscribe()`. The process stays alive
10
+ * as long as Chrome keeps the native messaging port open.
11
+ */
12
+ export function createChromeClient(opts) {
13
+ const client = new ChromeClient(opts);
14
+ client.run().catch((error) => {
15
+ process.stderr.write(`[chrome-client] fatal: ${error instanceof Error ? error.message : String(error)}\n`);
16
+ });
17
+ return client;
18
+ }
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAiBrC;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA0B;IAC3D,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IAEtC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CACrF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { NormalizedObserveOptions, ObserveSnapshot, ObserveView, WindowObserveOptions } from './types.js';
2
+ export declare function normalizeObserveOptions(input?: WindowObserveOptions): NormalizedObserveOptions;
3
+ export declare function parseObserveSnapshot(raw: unknown): ObserveSnapshot;
4
+ export declare function createObserveView(snapshot: ObserveSnapshot, options: NormalizedObserveOptions): ObserveView;
5
+ interface RenderObserveMarkdownInput {
6
+ windowId: number;
7
+ tabId: number;
8
+ snapshotId: string;
9
+ snapshotPath: string;
10
+ options: NormalizedObserveOptions;
11
+ snapshot: ObserveSnapshot;
12
+ view: ObserveView;
13
+ }
14
+ export declare function renderObserveMarkdown(input: RenderObserveMarkdownInput): string;
15
+ export {};
16
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/sdk/observe/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAGxB,eAAe,EACf,WAAW,EACX,oBAAoB,EACrB,MAAM,YAAY,CAAC;AA2EpB,wBAAgB,uBAAuB,CAAC,KAAK,CAAC,EAAE,oBAAoB,GAAG,wBAAwB,CAyB9F;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CAyClE;AAUD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,wBAAwB,GAChC,WAAW,CAyCb;AAED,UAAU,0BAA0B;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,wBAAwB,CAAC;IAClC,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,GAAG,MAAM,CAsI/E"}
@@ -0,0 +1,278 @@
1
+ const DEFAULT_MAX = 120;
2
+ const FILTERED_DEFAULT_MAX = 60;
3
+ const MIN_MAX = 10;
4
+ const MAX_MAX = 200;
5
+ const VALID_FILTERS = [
6
+ 'interactive',
7
+ 'buttons',
8
+ 'links',
9
+ 'inputs',
10
+ 'text',
11
+ 'forms',
12
+ 'media',
13
+ 'alerts',
14
+ ];
15
+ function clamp(value, min, max, fallback) {
16
+ if (typeof value !== 'number' || Number.isNaN(value)) {
17
+ return fallback;
18
+ }
19
+ return Math.min(Math.max(Math.floor(value), min), max);
20
+ }
21
+ function isObject(value) {
22
+ return typeof value === 'object' && value !== null;
23
+ }
24
+ function normalizeLine(value, max = 220) {
25
+ const compact = value.replace(/\s+/g, ' ').trim();
26
+ if (compact.length <= max)
27
+ return compact;
28
+ return `${compact.slice(0, Math.max(1, max - 3))}...`;
29
+ }
30
+ function formatSelectOptions(options) {
31
+ if (!Array.isArray(options) || options.length === 0) {
32
+ return '';
33
+ }
34
+ const normalizedValues = options
35
+ .map((option) => normalizeLine((option.value || option.label || '').trim(), 80))
36
+ .filter((value) => value.length > 0);
37
+ if (normalizedValues.length === 0) {
38
+ return '';
39
+ }
40
+ const limit = 8;
41
+ const rendered = normalizedValues
42
+ .slice(0, limit)
43
+ .map((value) => `"${value}"`)
44
+ .join(', ');
45
+ const suffix = normalizedValues.length > limit ? ` (+${normalizedValues.length - limit} more)` : '';
46
+ return ` | options=[${rendered}]${suffix}`;
47
+ }
48
+ function getLocatorText(locator) {
49
+ if (locator.testId)
50
+ return `[data-testid="${locator.testId}"]`;
51
+ if (locator.id)
52
+ return `#${locator.id}`;
53
+ if (locator.name)
54
+ return `[name="${locator.name}"]`;
55
+ if (locator.cssPath)
56
+ return locator.cssPath;
57
+ if (locator.role)
58
+ return `[role="${locator.role}"]`;
59
+ return '(none)';
60
+ }
61
+ export function normalizeObserveOptions(input) {
62
+ const dedup = new Set();
63
+ for (const filter of input?.filters ?? []) {
64
+ if (VALID_FILTERS.includes(filter)) {
65
+ dedup.add(filter);
66
+ }
67
+ }
68
+ const filters = Array.from(dedup);
69
+ const max = clamp(input?.max, MIN_MAX, MAX_MAX, DEFAULT_MAX);
70
+ const effectiveMax = filters.length > 0 && input?.max === undefined ? Math.min(max, FILTERED_DEFAULT_MAX) : max;
71
+ const semanticFilter = input?.semanticFilter?.trim() || undefined;
72
+ const normalized = {
73
+ filters,
74
+ max,
75
+ effectiveMax,
76
+ };
77
+ if (semanticFilter) {
78
+ normalized.semanticFilter = semanticFilter;
79
+ }
80
+ return normalized;
81
+ }
82
+ export function parseObserveSnapshot(raw) {
83
+ if (!isObject(raw)) {
84
+ throw new Error('Observe returned an invalid payload');
85
+ }
86
+ const page = raw.page;
87
+ const summary = raw.summary;
88
+ const interactive = raw.interactive;
89
+ const textBlocks = raw.textBlocks;
90
+ const forms = raw.forms;
91
+ const media = raw.media;
92
+ const alerts = raw.alerts;
93
+ const truncation = raw.truncation;
94
+ const warnings = raw.warnings;
95
+ if (!isObject(page) ||
96
+ !isObject(summary) ||
97
+ !Array.isArray(interactive) ||
98
+ !Array.isArray(textBlocks) ||
99
+ !Array.isArray(forms) ||
100
+ !Array.isArray(media) ||
101
+ !Array.isArray(alerts) ||
102
+ !isObject(truncation)) {
103
+ throw new Error('Observe payload is missing required fields');
104
+ }
105
+ return {
106
+ page: page,
107
+ summary: summary,
108
+ interactive: interactive,
109
+ textBlocks: textBlocks,
110
+ forms: forms,
111
+ media: media,
112
+ alerts: alerts.filter((item) => typeof item === 'string'),
113
+ truncation: truncation,
114
+ warnings: Array.isArray(warnings)
115
+ ? warnings.filter((item) => typeof item === 'string')
116
+ : [],
117
+ };
118
+ }
119
+ function getCategoryFilters(filters) {
120
+ const categories = new Set();
121
+ if (filters.includes('buttons'))
122
+ categories.add('button');
123
+ if (filters.includes('links'))
124
+ categories.add('link');
125
+ if (filters.includes('inputs'))
126
+ categories.add('input');
127
+ return Array.from(categories);
128
+ }
129
+ export function createObserveView(snapshot, options) {
130
+ const hasFilters = options.filters.length > 0;
131
+ const filterSet = new Set(options.filters);
132
+ const categoryFilters = getCategoryFilters(options.filters);
133
+ const includeAllInteractive = !hasFilters || filterSet.has('interactive');
134
+ const includeInteractive = !hasFilters ||
135
+ includeAllInteractive ||
136
+ filterSet.has('buttons') ||
137
+ filterSet.has('links') ||
138
+ filterSet.has('inputs');
139
+ const includeText = !hasFilters || filterSet.has('text');
140
+ const includeForms = !hasFilters || filterSet.has('forms');
141
+ const includeMedia = !hasFilters || filterSet.has('media');
142
+ const includeAlerts = !hasFilters || filterSet.has('alerts');
143
+ const interactiveBase = includeAllInteractive
144
+ ? snapshot.interactive
145
+ : snapshot.interactive.filter((element) => categoryFilters.includes(element.category));
146
+ const interactive = includeInteractive ? interactiveBase.slice(0, options.effectiveMax) : [];
147
+ const textBlocks = includeText ? snapshot.textBlocks.slice(0, options.effectiveMax) : [];
148
+ const forms = includeForms ? snapshot.forms.slice(0, Math.min(40, options.effectiveMax)) : [];
149
+ const media = includeMedia ? snapshot.media.slice(0, Math.min(40, options.effectiveMax)) : [];
150
+ const alerts = includeAlerts ? snapshot.alerts.slice(0, Math.min(20, options.effectiveMax)) : [];
151
+ return {
152
+ interactive,
153
+ textBlocks,
154
+ forms,
155
+ media,
156
+ alerts,
157
+ includeSections: {
158
+ interactive: includeInteractive,
159
+ text: includeText,
160
+ forms: includeForms,
161
+ media: includeMedia,
162
+ alerts: includeAlerts,
163
+ },
164
+ };
165
+ }
166
+ export function renderObserveMarkdown(input) {
167
+ const { windowId, tabId, snapshotId, snapshotPath, options, snapshot, view } = input;
168
+ const lines = [];
169
+ lines.push('# Page Observation');
170
+ lines.push('');
171
+ lines.push('## Summary');
172
+ lines.push(`- Title: ${normalizeLine(snapshot.page.title || '(untitled)', 180)}`);
173
+ lines.push(`- URL: ${snapshot.page.url || '(empty)'}`);
174
+ lines.push(`- Tab: ${tabId} (window ${windowId})`);
175
+ lines.push(`- Viewport: ${snapshot.page.viewport.width}x${snapshot.page.viewport.height}, scroll=(${snapshot.page.scroll.x}, ${snapshot.page.scroll.y}/${snapshot.page.scroll.maxY})`);
176
+ lines.push(`- Totals: interactive=${snapshot.summary.totalInteractiveCount}, text=${snapshot.summary.totalTextBlockCount}, forms=${snapshot.summary.formCount}, media=${snapshot.summary.mediaCount}, alerts=${snapshot.summary.alertCount}`);
177
+ lines.push(`- Returned: interactive=${view.interactive.length}, text=${view.textBlocks.length}, forms=${view.forms.length}, media=${view.media.length}, alerts=${view.alerts.length}`);
178
+ lines.push(`- Snapshot: ${snapshotId}`);
179
+ lines.push('');
180
+ if (view.includeSections.interactive) {
181
+ lines.push('## Interactive Elements');
182
+ if (view.interactive.length === 0) {
183
+ lines.push('- (none)');
184
+ }
185
+ else {
186
+ for (const element of view.interactive) {
187
+ const roleText = element.role ? ` role=${element.role}` : '';
188
+ const stateText = element.state.length > 0 ? element.state.join(', ') : 'none';
189
+ const groupText = element.groupId || 'G0';
190
+ const hrefText = element.href ? ` href=${normalizeLine(element.href, 120)}` : '';
191
+ const selectOptionsText = formatSelectOptions(element.selectOptions);
192
+ lines.push(`- **${element.id}** [${element.category}] \`${element.tag}${roleText}\` "${normalizeLine(element.name || '(unnamed)', 120)}" | actions=${element.actions.join(', ')} | state=${stateText} | locator=${normalizeLine(getLocatorText(element.locator), 120)} | group=${groupText} | box=(${element.bbox.x},${element.bbox.y},${element.bbox.width}x${element.bbox.height})${hrefText}${selectOptionsText}`);
193
+ }
194
+ }
195
+ lines.push('');
196
+ }
197
+ if (view.includeSections.text) {
198
+ lines.push('## Text Blocks');
199
+ if (view.textBlocks.length === 0) {
200
+ lines.push('- (none)');
201
+ }
202
+ else {
203
+ for (const block of view.textBlocks) {
204
+ const levelSuffix = block.level ? ` h${block.level}` : '';
205
+ const groupText = block.groupId || 'G0';
206
+ lines.push(`- **${block.id}** [${block.kind}${levelSuffix}] ${normalizeLine(block.text, 280)} | group=${groupText}`);
207
+ }
208
+ }
209
+ lines.push('');
210
+ }
211
+ if (view.includeSections.forms) {
212
+ lines.push('## Forms');
213
+ if (view.forms.length === 0) {
214
+ lines.push('- (none)');
215
+ }
216
+ else {
217
+ for (const form of view.forms) {
218
+ const fieldText = form.fields.length > 0 ? form.fields.join(', ') : '(none)';
219
+ const submitText = form.submitButtons.length > 0 ? form.submitButtons.join(', ') : '(none)';
220
+ lines.push(`- **${form.id}** ${normalizeLine(form.name || '(unnamed)', 120)} | fields=${normalizeLine(fieldText, 180)} | submit=${normalizeLine(submitText, 120)}`);
221
+ }
222
+ }
223
+ lines.push('');
224
+ }
225
+ if (view.includeSections.media) {
226
+ lines.push('## Media');
227
+ if (view.media.length === 0) {
228
+ lines.push('- (none)');
229
+ }
230
+ else {
231
+ for (const item of view.media) {
232
+ const stateText = item.state.length > 0 ? item.state.join(', ') : 'unknown';
233
+ lines.push(`- **${item.id}** [${item.kind}] "${normalizeLine(item.name || '(unnamed)', 120)}" | state=${stateText} | time=${item.currentTime.toFixed(1)}/${item.duration >= 0 ? item.duration.toFixed(1) : 'live/unknown'}`);
234
+ }
235
+ }
236
+ lines.push('');
237
+ }
238
+ if (view.includeSections.alerts) {
239
+ lines.push('## Alerts');
240
+ if (view.alerts.length === 0) {
241
+ lines.push('- (none)');
242
+ }
243
+ else {
244
+ for (const alert of view.alerts) {
245
+ lines.push(`- ${normalizeLine(alert, 260)}`);
246
+ }
247
+ }
248
+ lines.push('');
249
+ }
250
+ lines.push('## Notes');
251
+ if (options.filters.length > 0) {
252
+ lines.push(`- Applied filters: ${options.filters.join(', ')}`);
253
+ }
254
+ else {
255
+ lines.push('- Applied filters: none');
256
+ }
257
+ lines.push('- Items with the same group id (`group=G*`) are likely in the same visual container.');
258
+ if (snapshot.truncation.interactive) {
259
+ lines.push(`- Interactive elements truncated (${snapshot.summary.interactiveCount}/${snapshot.summary.totalInteractiveCount}).`);
260
+ }
261
+ if (snapshot.truncation.textBlocks) {
262
+ lines.push(`- Text blocks truncated (${snapshot.summary.textBlockCount}/${snapshot.summary.totalTextBlockCount}).`);
263
+ }
264
+ if (snapshot.truncation.hiddenFilteredCount > 0) {
265
+ lines.push(`- ${snapshot.truncation.hiddenFilteredCount} hidden elements were excluded.`);
266
+ }
267
+ if (snapshot.truncation.offscreenFilteredCount > 0) {
268
+ lines.push(`- ${snapshot.truncation.offscreenFilteredCount} offscreen elements were excluded.`);
269
+ }
270
+ if (snapshot.warnings.length > 0) {
271
+ for (const warning of snapshot.warnings) {
272
+ lines.push(`- ${normalizeLine(warning, 260)}`);
273
+ }
274
+ }
275
+ lines.push(`- Full snapshot file: ${snapshotPath}`);
276
+ return lines.join('\n');
277
+ }
278
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/sdk/observe/helpers.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,OAAO,GAAG,GAAG,CAAC;AAEpB,MAAM,aAAa,GAAoB;IACrC,aAAa;IACb,SAAS;IACT,OAAO;IACP,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;CACT,CAAC;AAEF,SAAS,KAAK,CAAC,KAAyB,EAAE,GAAW,EAAE,GAAW,EAAE,QAAgB;IAClF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,GAAG,GAAG,GAAG;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,OAAO,CAAC;IAC1C,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AACxD,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAA8D;IAE9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,gBAAgB,GAAG,OAAO;SAC7B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;SAC/E,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEvC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,CAAC;IAChB,MAAM,QAAQ,GAAG,gBAAgB;SAC9B,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC;SAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,MAAM,GACV,gBAAgB,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,MAAM,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,OAAO,eAAe,QAAQ,IAAI,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,cAAc,CAAC,OAMvB;IACC,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,iBAAiB,OAAO,CAAC,MAAM,IAAI,CAAC;IAC/D,IAAI,OAAO,CAAC,EAAE;QAAE,OAAO,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;IACxC,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,UAAU,OAAO,CAAC,IAAI,IAAI,CAAC;IACpD,IAAI,OAAO,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC;IAC5C,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,UAAU,OAAO,CAAC,IAAI,IAAI,CAAC;IACpD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAA4B;IAClE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;IACvC,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;QAC1C,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC7D,MAAM,YAAY,GAChB,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7F,MAAM,cAAc,GAAG,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAElE,MAAM,UAAU,GAA6B;QAC3C,OAAO;QACP,GAAG;QACH,YAAY;KACb,CAAC;IAEF,IAAI,cAAc,EAAE,CAAC;QACnB,UAAU,CAAC,cAAc,GAAG,cAAc,CAAC;IAC7C,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5B,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;IACpC,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAE9B,IACE,CAAC,QAAQ,CAAC,IAAI,CAAC;QACf,CAAC,QAAQ,CAAC,OAAO,CAAC;QAClB,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAC3B,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAC1B,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACtB,CAAC,QAAQ,CAAC,UAAU,CAAC,EACrB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,OAAO;QACL,IAAI,EAAE,IAA0C;QAChD,OAAO,EAAE,OAAgD;QACzD,WAAW,EAAE,WAAwD;QACrE,UAAU,EAAE,UAAsD;QAClE,KAAK,EAAE,KAA4C;QACnD,KAAK,EAAE,KAA4C;QACnD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;QACzE,UAAU,EAAE,UAAsD;QAClE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC/B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;YACrE,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAwB;IAClD,MAAM,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAC;IACzD,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAAyB,EACzB,OAAiC;IAEjC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3C,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,MAAM,qBAAqB,GAAG,CAAC,UAAU,IAAI,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC1E,MAAM,kBAAkB,GACtB,CAAC,UAAU;QACX,qBAAqB;QACrB,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QACxB,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;QACtB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1B,MAAM,WAAW,GAAG,CAAC,UAAU,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,CAAC,UAAU,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,CAAC,UAAU,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,CAAC,UAAU,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE7D,MAAM,eAAe,GAAG,qBAAqB;QAC3C,CAAC,CAAC,QAAQ,CAAC,WAAW;QACtB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzF,MAAM,WAAW,GAAG,kBAAkB,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7F,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjG,OAAO;QACL,WAAW;QACX,UAAU;QACV,KAAK;QACL,KAAK;QACL,MAAM;QACN,eAAe,EAAE;YACf,WAAW,EAAE,kBAAkB;YAC/B,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,aAAa;SACtB;KACF,CAAC;AACJ,CAAC;AAYD,MAAM,UAAU,qBAAqB,CAAC,KAAiC;IACrE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAErF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,YAAY,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAClF,KAAK,CAAC,IAAI,CAAC,UAAU,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,YAAY,QAAQ,GAAG,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CACR,eAAe,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,aAAa,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAC3K,CAAC;IACF,KAAK,CAAC,IAAI,CACR,yBAAyB,QAAQ,CAAC,OAAO,CAAC,qBAAqB,UAAU,QAAQ,CAAC,OAAO,CAAC,mBAAmB,WAAW,QAAQ,CAAC,OAAO,CAAC,SAAS,WAAW,QAAQ,CAAC,OAAO,CAAC,UAAU,YAAY,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,CAClO,CAAC;IACF,KAAK,CAAC,IAAI,CACR,2BAA2B,IAAI,CAAC,WAAW,CAAC,MAAM,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,WAAW,IAAI,CAAC,KAAK,CAAC,MAAM,WAAW,IAAI,CAAC,KAAK,CAAC,MAAM,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAC3K,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC/E,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;gBAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBACrE,KAAK,CAAC,IAAI,CACR,OAAO,OAAO,CAAC,EAAE,OAAO,OAAO,CAAC,QAAQ,OAAO,OAAO,CAAC,GAAG,GAAG,QAAQ,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,GAAG,CAAC,eAAe,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,SAAS,cAAc,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,YAAY,SAAS,WAAW,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,GAAG,iBAAiB,EAAE,CAC1Y,CAAC;YACJ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC;gBACxC,KAAK,CAAC,IAAI,CACR,OAAO,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,GAAG,WAAW,KAAK,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,SAAS,EAAE,CACzG,CAAC;YACJ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC5F,KAAK,CAAC,IAAI,CACR,OAAO,IAAI,CAAC,EAAE,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,GAAG,CAAC,aAAa,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,aAAa,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CACxJ,CAAC;YACJ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC5E,KAAK,CAAC,IAAI,CACR,OAAO,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC,IAAI,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,GAAG,CAAC,aAAa,SAAS,WAAW,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CACjN,CAAC;YACJ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,CAAC,IAAI,CACR,sFAAsF,CACvF,CAAC;IAEF,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CACR,qCAAqC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,IAAI,QAAQ,CAAC,OAAO,CAAC,qBAAqB,IAAI,CACrH,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CACR,4BAA4B,QAAQ,CAAC,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC,OAAO,CAAC,mBAAmB,IAAI,CACxG,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,UAAU,CAAC,mBAAmB,iCAAiC,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,CAAC,sBAAsB,GAAG,CAAC,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,UAAU,CAAC,sBAAsB,oCAAoC,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAC;IAEpD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { buildObserveScript } from './script.js';
2
+ export { createObserveView, normalizeObserveOptions, parseObserveSnapshot, renderObserveMarkdown, } from './helpers.js';
3
+ export { getObserveLatestPath, getObserveTabDir, persistObserveSnapshot, readLatestObserveSnapshot, } from './storage.js';
4
+ export type { ObserveSnapshotPointer, ObserveSnapshotRecord } from './storage.js';
5
+ export type { NormalizedObserveOptions, ObserveBBox, ObserveFilter, ObserveFormSummary, ObserveInteractiveCategory, ObserveInteractiveElement, ObserveLocator, ObserveMediaElement, ObservePageInfo, ObservePageSummary, ObserveSelectOption, ObserveSnapshot, ObserveTextBlock, ObserveTruncation, ObserveView, WindowObserveOptions, } from './types.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sdk/observe/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAClF,YAAY,EACV,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { buildObserveScript } from './script.js';
2
+ export { createObserveView, normalizeObserveOptions, parseObserveSnapshot, renderObserveMarkdown, } from './helpers.js';
3
+ export { getObserveLatestPath, getObserveTabDir, persistObserveSnapshot, readLatestObserveSnapshot, } from './storage.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sdk/observe/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,cAAc,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface ObserveScriptOptions {
2
+ maxInteractive: number;
3
+ maxTextBlocks: number;
4
+ }
5
+ export declare function buildObserveScript(options: ObserveScriptOptions): string;
6
+ export {};
7
+ //# sourceMappingURL=script.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../../src/sdk/observe/script.ts"],"names":[],"mappings":"AAAA,UAAU,oBAAoB;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAuqBxE"}