autokap 1.8.6 → 1.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/action-verifier.d.ts +6 -0
- package/dist/action-verifier.js +30 -17
- package/dist/browser.d.ts +59 -0
- package/dist/browser.js +259 -0
- package/dist/cli-contract.d.ts +5 -0
- package/dist/cli-runner.d.ts +0 -1
- package/dist/cli-runner.js +74 -59
- package/dist/clip-capture-loop.d.ts +28 -7
- package/dist/clip-capture-loop.js +102 -19
- package/dist/engine-version.d.ts +24 -0
- package/dist/engine-version.js +25 -0
- package/dist/execution-schema.d.ts +22 -0
- package/dist/execution-schema.js +59 -8
- package/dist/execution-types.d.ts +116 -0
- package/dist/opcode-runner.d.ts +8 -1
- package/dist/opcode-runner.js +120 -29
- package/dist/postcondition.d.ts +18 -3
- package/dist/postcondition.js +75 -27
- package/dist/program-hash.d.ts +11 -0
- package/dist/program-hash.js +28 -0
- package/dist/program-migrations.d.ts +31 -0
- package/dist/program-migrations.js +93 -0
- package/dist/program-signing.d.ts +11 -0
- package/dist/program-signing.js +1 -0
- package/dist/recovery-chain.js +8 -11
- package/dist/scenario-cookie.d.ts +36 -0
- package/dist/scenario-cookie.js +62 -0
- package/dist/security.d.ts +21 -0
- package/dist/security.js +46 -8
- package/dist/version.d.ts +1 -0
- package/dist/version.js +1 -0
- package/dist/video-narration-schema.d.ts +3 -0
- package/dist/video-narration-schema.js +3 -0
- package/dist/wait-contract.d.ts +104 -0
- package/dist/wait-contract.js +144 -0
- package/dist/web-playwright-local.d.ts +9 -1
- package/dist/web-playwright-local.js +0 -0
- package/package.json +2 -2
package/dist/version.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
2
|
const require = createRequire(import.meta.url);
|
|
3
3
|
const pkg = require('../package.json');
|
|
4
|
+
/** npm package version of the CLI, transmitted as the `x-autokap-cli-version` header. */
|
|
4
5
|
export const APP_VERSION = pkg.version;
|
|
5
6
|
//# sourceMappingURL=version.js.map
|
|
@@ -57,6 +57,8 @@ export declare const VideoIngestPayloadSchema: z.ZodObject<{
|
|
|
57
57
|
program: z.ZodObject<{
|
|
58
58
|
presetId: z.ZodString;
|
|
59
59
|
programVersion: z.ZodNumber;
|
|
60
|
+
programSchemaVersion: z.ZodOptional<z.ZodNumber>;
|
|
61
|
+
engineVersion: z.ZodOptional<z.ZodNumber>;
|
|
60
62
|
mediaMode: z.ZodEnum<{
|
|
61
63
|
video: "video";
|
|
62
64
|
clip: "clip";
|
|
@@ -167,6 +169,7 @@ export declare const VideoIngestPayloadSchema: z.ZodObject<{
|
|
|
167
169
|
domain: z.ZodString;
|
|
168
170
|
path: z.ZodOptional<z.ZodString>;
|
|
169
171
|
}, z.core.$strict>>>;
|
|
172
|
+
scenario: z.ZodOptional<z.ZodString>;
|
|
170
173
|
}, z.core.$strict>;
|
|
171
174
|
steps: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
172
175
|
url: z.ZodString;
|
|
@@ -83,6 +83,9 @@ export const VideoNarrationOverlaySchema = z.object({
|
|
|
83
83
|
* match a `program.steps[*].stepId`.
|
|
84
84
|
*/
|
|
85
85
|
export const VideoIngestPayloadSchema = z.object({
|
|
86
|
+
// Strict by design: this is a legacy compatibility-test ingest schema with no
|
|
87
|
+
// live consumer (test-only + barrel re-export), so it validates the raw form
|
|
88
|
+
// without migrate-on-read. Live program validation goes through parseProgram.
|
|
86
89
|
program: ExecutionProgramSchema,
|
|
87
90
|
narration: VideoNarrationOverlaySchema.optional(),
|
|
88
91
|
}).strict().superRefine((value, ctx) => {
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capture Agent — Wait Contract (AUT-240)
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for the engine's adaptive waiting behaviour. Zero user
|
|
5
|
+
* configuration: every budget/deadline below is an internal constant. Versioned
|
|
6
|
+
* (`WAIT_CONTRACT_VERSION`) so runs can be debugged and future migrations
|
|
7
|
+
* reasoned about; the global engine-versioning infrastructure is a separate
|
|
8
|
+
* effort.
|
|
9
|
+
*
|
|
10
|
+
* The model has three layers (see the AUT-240 issue):
|
|
11
|
+
* - Layer A — actionability & semantic postconditions.
|
|
12
|
+
* - Layer B — `waitForVisuallyStable` (screenshot stabilization).
|
|
13
|
+
* - Layer C — dynamic budgets: a wait extends while the page is making progress
|
|
14
|
+
* (network / DOM) and is cut once it is genuinely stuck, up to a hard
|
|
15
|
+
* per-media global deadline. This is the real cure for the engine's #1 pain —
|
|
16
|
+
* a slow-but-progressing page no longer trips a fixed timeout.
|
|
17
|
+
*/
|
|
18
|
+
import type { MediaMode, ProgressSnapshot } from './execution-types.js';
|
|
19
|
+
/** Bump when the wait semantics change in a way worth tracing on a run. */
|
|
20
|
+
export declare const WAIT_CONTRACT_VERSION = 1;
|
|
21
|
+
/**
|
|
22
|
+
* Hard ceiling on adaptive waiting, per media mode. Applied as a FLOOR via
|
|
23
|
+
* `max()` with the compiled opcode timeout (see `resolveGlobalWaitDeadlineMs`)
|
|
24
|
+
* so it never shortens an intentionally-long opcode (`SLEEP`, `END_CLIP`).
|
|
25
|
+
*/
|
|
26
|
+
export declare const GLOBAL_WAIT_CAP_MS: Record<MediaMode, number>;
|
|
27
|
+
/** No observed progress for this long ⇒ the wait is "stuck" and gets cut. */
|
|
28
|
+
export declare const STUCK_WINDOW_MS = 4000;
|
|
29
|
+
/** Watchdog poll cadence while a wait is in flight. */
|
|
30
|
+
export declare const PROGRESS_POLL_INTERVAL_MS = 250;
|
|
31
|
+
/**
|
|
32
|
+
* A timed-out wait cannot be cancelled through the adapter API. Before recovery
|
|
33
|
+
* or the next opcode starts, give the orphaned operation this long to settle so
|
|
34
|
+
* it does not mutate the page concurrently. Mirrors the runner's drain.
|
|
35
|
+
*/
|
|
36
|
+
export declare const ORPHAN_DRAIN_MS = 2000;
|
|
37
|
+
/** DOM-quiet settle window for visual stabilization (Layer B). */
|
|
38
|
+
export declare const DOM_QUIET_WINDOW_MS = 250;
|
|
39
|
+
/** Bounded pixel-convergence fallback (Layer B). */
|
|
40
|
+
export declare const PIXEL_FALLBACK_MAX_PASSES = 3;
|
|
41
|
+
export declare const PIXEL_FALLBACK_DIFF_THRESHOLD = 0.01;
|
|
42
|
+
/**
|
|
43
|
+
* Resolve the per-opcode global wait deadline (absolute ms timestamp).
|
|
44
|
+
* `compiledTimeoutMs` is the opcode's compiled `timeoutMs` — treated as a FLOOR,
|
|
45
|
+
* never a ceiling, so the deadline can only ever be extended past the compiled
|
|
46
|
+
* value, never shortened below it.
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveGlobalWaitDeadlineMs(startedAtMs: number, compiledTimeoutMs: number, mediaMode: MediaMode): number;
|
|
49
|
+
/**
|
|
50
|
+
* Did the page make observable progress between two snapshots? Any of: a
|
|
51
|
+
* navigation in flight, new network events, in-flight count change, network
|
|
52
|
+
* activity advancing, readyState change, or DOM node-count change. A null
|
|
53
|
+
* current reading is treated conservatively as "no progress"; the first real
|
|
54
|
+
* reading (null `prev`) counts as progress to seed the watchdog window.
|
|
55
|
+
*
|
|
56
|
+
* The network fields are first-party-scoped at the source (see
|
|
57
|
+
* `getProgressSnapshot` / `isFirstPartyUrl`): background third-party telemetry
|
|
58
|
+
* (analytics beacons, ad pixels, polling to other origins) is excluded, so it
|
|
59
|
+
* cannot keep this `true` forever and starve the stuck-cut.
|
|
60
|
+
*/
|
|
61
|
+
export declare function hasProgress(prev: ProgressSnapshot | null | undefined, cur: ProgressSnapshot | null | undefined): boolean;
|
|
62
|
+
export type ProgressBudgetCut = 'stuck' | 'deadline';
|
|
63
|
+
export interface ProgressBudgetOptions {
|
|
64
|
+
/** `Date.now()` when the surrounding opcode started (for elapsed/min-budget). */
|
|
65
|
+
startedAtMs: number;
|
|
66
|
+
/** Absolute hard deadline — the wait never runs past this. */
|
|
67
|
+
globalDeadlineMs: number;
|
|
68
|
+
/**
|
|
69
|
+
* Minimum patience (the compiled `timeoutMs` floor) before the stuck-cut may
|
|
70
|
+
* fire. A slow page that produces no early signal still gets at least this
|
|
71
|
+
* long before being judged stuck.
|
|
72
|
+
*/
|
|
73
|
+
minBudgetMs: number;
|
|
74
|
+
/** No-progress window before cutting "stuck". Defaults to `STUCK_WINDOW_MS`. */
|
|
75
|
+
stuckWindowMs?: number;
|
|
76
|
+
/** Watchdog cadence. Defaults to `PROGRESS_POLL_INTERVAL_MS`. */
|
|
77
|
+
pollIntervalMs?: number;
|
|
78
|
+
/**
|
|
79
|
+
* Progress probe. When omitted, the stuck-cut is disabled and the operation
|
|
80
|
+
* simply runs with its compiled floor budget (legacy fixed-timeout behaviour)
|
|
81
|
+
* — graceful degradation for adapters with no progress signal.
|
|
82
|
+
*/
|
|
83
|
+
getProgress?: () => Promise<ProgressSnapshot | null>;
|
|
84
|
+
}
|
|
85
|
+
export interface ProgressBudgetResult<T> {
|
|
86
|
+
/** Present when the wrapped operation resolved before any cut. */
|
|
87
|
+
result?: T;
|
|
88
|
+
/** Present when the watchdog cut the wait early. */
|
|
89
|
+
cut?: ProgressBudgetCut;
|
|
90
|
+
/** Total time spent (ms). */
|
|
91
|
+
waitedMs: number;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Run an adaptive wait that extends while the page is making progress and is cut
|
|
95
|
+
* once it is genuinely stuck or the global deadline is reached.
|
|
96
|
+
*
|
|
97
|
+
* `run(budgetMs)` is given a generous budget (up to the global deadline) and is
|
|
98
|
+
* expected to resolve as soon as its condition is met (or to time out at the
|
|
99
|
+
* budget). A concurrent watchdog races it: while `run` is still pending, the
|
|
100
|
+
* watchdog cuts the wait if no progress is observed for `stuckWindowMs` (after
|
|
101
|
+
* `minBudgetMs` has elapsed) or once the global deadline passes. If `run`
|
|
102
|
+
* resolves first, its result is returned and the watchdog is moot.
|
|
103
|
+
*/
|
|
104
|
+
export declare function runWithProgressBudget<T>(run: (budgetMs: number) => Promise<T>, options: ProgressBudgetOptions): Promise<ProgressBudgetResult<T>>;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capture Agent — Wait Contract (AUT-240)
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for the engine's adaptive waiting behaviour. Zero user
|
|
5
|
+
* configuration: every budget/deadline below is an internal constant. Versioned
|
|
6
|
+
* (`WAIT_CONTRACT_VERSION`) so runs can be debugged and future migrations
|
|
7
|
+
* reasoned about; the global engine-versioning infrastructure is a separate
|
|
8
|
+
* effort.
|
|
9
|
+
*
|
|
10
|
+
* The model has three layers (see the AUT-240 issue):
|
|
11
|
+
* - Layer A — actionability & semantic postconditions.
|
|
12
|
+
* - Layer B — `waitForVisuallyStable` (screenshot stabilization).
|
|
13
|
+
* - Layer C — dynamic budgets: a wait extends while the page is making progress
|
|
14
|
+
* (network / DOM) and is cut once it is genuinely stuck, up to a hard
|
|
15
|
+
* per-media global deadline. This is the real cure for the engine's #1 pain —
|
|
16
|
+
* a slow-but-progressing page no longer trips a fixed timeout.
|
|
17
|
+
*/
|
|
18
|
+
/** Bump when the wait semantics change in a way worth tracing on a run. */
|
|
19
|
+
export const WAIT_CONTRACT_VERSION = 1;
|
|
20
|
+
/**
|
|
21
|
+
* Hard ceiling on adaptive waiting, per media mode. Applied as a FLOOR via
|
|
22
|
+
* `max()` with the compiled opcode timeout (see `resolveGlobalWaitDeadlineMs`)
|
|
23
|
+
* so it never shortens an intentionally-long opcode (`SLEEP`, `END_CLIP`).
|
|
24
|
+
*/
|
|
25
|
+
export const GLOBAL_WAIT_CAP_MS = {
|
|
26
|
+
screenshot: 30_000,
|
|
27
|
+
clip: 45_000,
|
|
28
|
+
video: 60_000,
|
|
29
|
+
};
|
|
30
|
+
/** No observed progress for this long ⇒ the wait is "stuck" and gets cut. */
|
|
31
|
+
export const STUCK_WINDOW_MS = 4_000;
|
|
32
|
+
/** Watchdog poll cadence while a wait is in flight. */
|
|
33
|
+
export const PROGRESS_POLL_INTERVAL_MS = 250;
|
|
34
|
+
/**
|
|
35
|
+
* A timed-out wait cannot be cancelled through the adapter API. Before recovery
|
|
36
|
+
* or the next opcode starts, give the orphaned operation this long to settle so
|
|
37
|
+
* it does not mutate the page concurrently. Mirrors the runner's drain.
|
|
38
|
+
*/
|
|
39
|
+
export const ORPHAN_DRAIN_MS = 2_000;
|
|
40
|
+
/** DOM-quiet settle window for visual stabilization (Layer B). */
|
|
41
|
+
export const DOM_QUIET_WINDOW_MS = 250;
|
|
42
|
+
/** Bounded pixel-convergence fallback (Layer B). */
|
|
43
|
+
export const PIXEL_FALLBACK_MAX_PASSES = 3;
|
|
44
|
+
export const PIXEL_FALLBACK_DIFF_THRESHOLD = 0.01;
|
|
45
|
+
/**
|
|
46
|
+
* Resolve the per-opcode global wait deadline (absolute ms timestamp).
|
|
47
|
+
* `compiledTimeoutMs` is the opcode's compiled `timeoutMs` — treated as a FLOOR,
|
|
48
|
+
* never a ceiling, so the deadline can only ever be extended past the compiled
|
|
49
|
+
* value, never shortened below it.
|
|
50
|
+
*/
|
|
51
|
+
export function resolveGlobalWaitDeadlineMs(startedAtMs, compiledTimeoutMs, mediaMode) {
|
|
52
|
+
const cap = GLOBAL_WAIT_CAP_MS[mediaMode] ?? GLOBAL_WAIT_CAP_MS.screenshot;
|
|
53
|
+
return startedAtMs + Math.max(compiledTimeoutMs, cap);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Did the page make observable progress between two snapshots? Any of: a
|
|
57
|
+
* navigation in flight, new network events, in-flight count change, network
|
|
58
|
+
* activity advancing, readyState change, or DOM node-count change. A null
|
|
59
|
+
* current reading is treated conservatively as "no progress"; the first real
|
|
60
|
+
* reading (null `prev`) counts as progress to seed the watchdog window.
|
|
61
|
+
*
|
|
62
|
+
* The network fields are first-party-scoped at the source (see
|
|
63
|
+
* `getProgressSnapshot` / `isFirstPartyUrl`): background third-party telemetry
|
|
64
|
+
* (analytics beacons, ad pixels, polling to other origins) is excluded, so it
|
|
65
|
+
* cannot keep this `true` forever and starve the stuck-cut.
|
|
66
|
+
*/
|
|
67
|
+
export function hasProgress(prev, cur) {
|
|
68
|
+
if (!cur)
|
|
69
|
+
return false;
|
|
70
|
+
if (cur.navigating)
|
|
71
|
+
return true;
|
|
72
|
+
if (!prev)
|
|
73
|
+
return true;
|
|
74
|
+
return (cur.networkEventCount !== prev.networkEventCount
|
|
75
|
+
|| cur.inflightRequests !== prev.inflightRequests
|
|
76
|
+
|| cur.lastNetworkActivityAtMs !== prev.lastNetworkActivityAtMs
|
|
77
|
+
|| cur.readyState !== prev.readyState
|
|
78
|
+
|| cur.domNodeCount !== prev.domNodeCount);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Run an adaptive wait that extends while the page is making progress and is cut
|
|
82
|
+
* once it is genuinely stuck or the global deadline is reached.
|
|
83
|
+
*
|
|
84
|
+
* `run(budgetMs)` is given a generous budget (up to the global deadline) and is
|
|
85
|
+
* expected to resolve as soon as its condition is met (or to time out at the
|
|
86
|
+
* budget). A concurrent watchdog races it: while `run` is still pending, the
|
|
87
|
+
* watchdog cuts the wait if no progress is observed for `stuckWindowMs` (after
|
|
88
|
+
* `minBudgetMs` has elapsed) or once the global deadline passes. If `run`
|
|
89
|
+
* resolves first, its result is returned and the watchdog is moot.
|
|
90
|
+
*/
|
|
91
|
+
export async function runWithProgressBudget(run, options) {
|
|
92
|
+
const { startedAtMs, globalDeadlineMs, minBudgetMs, stuckWindowMs = STUCK_WINDOW_MS, pollIntervalMs = PROGRESS_POLL_INTERVAL_MS, getProgress, } = options;
|
|
93
|
+
// No progress signal ⇒ behave like a plain bounded wait (legacy behaviour):
|
|
94
|
+
// give the operation its compiled floor budget, no extension, no stuck-cut.
|
|
95
|
+
if (!getProgress) {
|
|
96
|
+
const budget = Math.max(1, minBudgetMs);
|
|
97
|
+
const result = await run(budget);
|
|
98
|
+
return { result, waitedMs: Date.now() - startedAtMs };
|
|
99
|
+
}
|
|
100
|
+
const budget = Math.max(1, globalDeadlineMs - Date.now());
|
|
101
|
+
const runPromise = Promise.resolve().then(() => run(budget));
|
|
102
|
+
let cut = null;
|
|
103
|
+
let stop = false;
|
|
104
|
+
const watchdog = (async () => {
|
|
105
|
+
let prev = await getProgress().catch(() => null);
|
|
106
|
+
let lastProgressAt = Date.now();
|
|
107
|
+
while (!stop) {
|
|
108
|
+
await sleep(pollIntervalMs);
|
|
109
|
+
if (stop)
|
|
110
|
+
return;
|
|
111
|
+
const now = Date.now();
|
|
112
|
+
if (now >= globalDeadlineMs) {
|
|
113
|
+
cut = 'deadline';
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const cur = await getProgress().catch(() => prev);
|
|
117
|
+
if (hasProgress(prev, cur)) {
|
|
118
|
+
lastProgressAt = now;
|
|
119
|
+
prev = cur;
|
|
120
|
+
}
|
|
121
|
+
const elapsed = now - startedAtMs;
|
|
122
|
+
if (elapsed >= minBudgetMs && now - lastProgressAt >= stuckWindowMs) {
|
|
123
|
+
cut = 'stuck';
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
})();
|
|
128
|
+
const settled = await Promise.race([
|
|
129
|
+
runPromise.then((value) => ({ kind: 'run', value })),
|
|
130
|
+
watchdog.then(() => ({ kind: 'watchdog' })),
|
|
131
|
+
]);
|
|
132
|
+
stop = true;
|
|
133
|
+
if (settled.kind === 'run') {
|
|
134
|
+
return { result: settled.value, waitedMs: Date.now() - startedAtMs };
|
|
135
|
+
}
|
|
136
|
+
// Watchdog cut the wait early: drain the orphan so it does not mutate the page
|
|
137
|
+
// concurrently with recovery or the next opcode.
|
|
138
|
+
await Promise.race([runPromise.catch(() => undefined), sleep(ORPHAN_DRAIN_MS)]);
|
|
139
|
+
return { cut: cut ?? 'stuck', waitedMs: Date.now() - startedAtMs };
|
|
140
|
+
}
|
|
141
|
+
function sleep(ms) {
|
|
142
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=wait-contract.js.map
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { Browser } from './browser.js';
|
|
8
8
|
import type { AKTree, OutscaleConfig, VideoPageSignals } from './types.js';
|
|
9
|
-
import type { RuntimeAdapter, ClickOptions, WaitCondition, RecordingOptions, RecordingResult, SemanticTarget } from './execution-types.js';
|
|
9
|
+
import type { RuntimeAdapter, ClickOptions, WaitCondition, RecordingOptions, RecordingResult, SemanticTarget, ProgressSnapshot, VisualStabilityResult } from './execution-types.js';
|
|
10
10
|
import { type ResolveOptions } from './semantic-resolver.js';
|
|
11
11
|
export declare class WebPlaywrightLocal implements RuntimeAdapter {
|
|
12
12
|
private browser;
|
|
@@ -28,6 +28,8 @@ export declare class WebPlaywrightLocal implements RuntimeAdapter {
|
|
|
28
28
|
navigate(url: string): Promise<void>;
|
|
29
29
|
getCurrentUrl(): Promise<string>;
|
|
30
30
|
getPageTitle(): Promise<string | null>;
|
|
31
|
+
/** AUT-240 (Layer A): live text of the first match, for text_contains. */
|
|
32
|
+
getTextContent(selector: string): Promise<string | null>;
|
|
31
33
|
detectAppVersion(): Promise<string | null>;
|
|
32
34
|
getAKTree(): Promise<AKTree>;
|
|
33
35
|
getPageSignals(): Promise<VideoPageSignals>;
|
|
@@ -60,6 +62,12 @@ export declare class WebPlaywrightLocal implements RuntimeAdapter {
|
|
|
60
62
|
scroll(direction: 'up' | 'down' | 'left' | 'right', amount?: number): Promise<void>;
|
|
61
63
|
scrollIntoView(selector: string): Promise<void>;
|
|
62
64
|
waitFor(condition: WaitCondition): Promise<boolean>;
|
|
65
|
+
/** AUT-240 (Layer C): cheap page-activity snapshot for the progress watchdog. */
|
|
66
|
+
getProgressSnapshot(): Promise<ProgressSnapshot>;
|
|
67
|
+
/** AUT-240 (Layer B): wait for the page to be visually stable before capture. */
|
|
68
|
+
waitForVisuallyStable(options?: {
|
|
69
|
+
maxWaitMs?: number;
|
|
70
|
+
}): Promise<VisualStabilityResult>;
|
|
63
71
|
dismissOverlays(): Promise<{
|
|
64
72
|
dismissed: boolean;
|
|
65
73
|
method: string | null;
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "autokap",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.7",
|
|
4
4
|
"description": "AI-powered CLI tool for capturing clean screenshots of websites",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -224,7 +224,7 @@
|
|
|
224
224
|
"commander": "^14.0.3",
|
|
225
225
|
"dotenv": "^17.3.1",
|
|
226
226
|
"openai": "^6.25.0",
|
|
227
|
-
"playwright": "^1.
|
|
227
|
+
"playwright": "^1.61.0",
|
|
228
228
|
"posthog-node": "^5.26.2",
|
|
229
229
|
"sharp": "^0.34.5",
|
|
230
230
|
"@resvg/resvg-js": "^2.6.2",
|