execbro 1.10.21 → 1.10.22
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/build/__tests__/unit/deviceResolver.test.js +87 -0
- package/build/__tests__/unit/deviceResolver.test.js.map +1 -1
- package/build/__tests__/unit/projectMemory.test.d.ts +2 -0
- package/build/__tests__/unit/projectMemory.test.d.ts.map +1 -0
- package/build/__tests__/unit/projectMemory.test.js +78 -0
- package/build/__tests__/unit/projectMemory.test.js.map +1 -0
- package/build/__tests__/unit/projectStore.test.d.ts +2 -0
- package/build/__tests__/unit/projectStore.test.d.ts.map +1 -0
- package/build/__tests__/unit/projectStore.test.js +74 -0
- package/build/__tests__/unit/projectStore.test.js.map +1 -0
- package/build/core/config.d.ts +2 -0
- package/build/core/config.d.ts.map +1 -1
- package/build/core/config.js +4 -0
- package/build/core/config.js.map +1 -1
- package/build/core/deviceResolver.d.ts +4 -9
- package/build/core/deviceResolver.d.ts.map +1 -1
- package/build/core/deviceResolver.js +56 -1
- package/build/core/deviceResolver.js.map +1 -1
- package/build/core/projectMemory.d.ts +39 -0
- package/build/core/projectMemory.d.ts.map +1 -0
- package/build/core/projectMemory.js +108 -0
- package/build/core/projectMemory.js.map +1 -0
- package/build/core/projectStore.d.ts +41 -0
- package/build/core/projectStore.d.ts.map +1 -0
- package/build/core/projectStore.js +97 -0
- package/build/core/projectStore.js.map +1 -0
- package/build/pro/tap.d.ts +2 -0
- package/build/pro/tap.d.ts.map +1 -1
- package/build/pro/tap.js +3 -0
- package/build/pro/tap.js.map +1 -1
- package/build/tools/interactionTools.d.ts.map +1 -1
- package/build/tools/interactionTools.js +1 -0
- package/build/tools/interactionTools.js.map +1 -1
- package/build/tools/screenshotTools.d.ts.map +1 -1
- package/build/tools/screenshotTools.js +27 -0
- package/build/tools/screenshotTools.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { homedir } from "os";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { isProjectMemoryEnabled } from "./config.js";
|
|
4
|
+
import { buildWriteEnvelope, computeProjectId, projectsRoot, readConcern, writeConcernAtomic, realpathOrRaw, } from "./projectStore.js";
|
|
5
|
+
const DEVICES_SCHEMA = "execbro/project-devices";
|
|
6
|
+
const META_SCHEMA = "execbro/project-meta";
|
|
7
|
+
const CURRENT_VERSION = 1;
|
|
8
|
+
const MAX_DEVICES = 20;
|
|
9
|
+
/** Union by identifier: newer lastUsedAt wins wholesale; earliest firstSeenAt and
|
|
10
|
+
* max useCount retained. Sorted desc by lastUsedAt, capped at MAX_DEVICES. */
|
|
11
|
+
export function mergeDeviceLists(a, b) {
|
|
12
|
+
const byId = new Map();
|
|
13
|
+
for (const e of [...a, ...b]) {
|
|
14
|
+
const prev = byId.get(e.identifier);
|
|
15
|
+
if (!prev) {
|
|
16
|
+
byId.set(e.identifier, e);
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const winner = e.lastUsedAt >= prev.lastUsedAt ? e : prev;
|
|
20
|
+
byId.set(e.identifier, {
|
|
21
|
+
...winner,
|
|
22
|
+
firstSeenAt: Math.min(prev.firstSeenAt, e.firstSeenAt),
|
|
23
|
+
useCount: Math.max(prev.useCount, e.useCount),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return [...byId.values()].sort((x, y) => y.lastUsedAt - x.lastUsedAt).slice(0, MAX_DEVICES);
|
|
27
|
+
}
|
|
28
|
+
/** Resolve project dir + device list, or null when disabled / degenerate cwd / foreign file. */
|
|
29
|
+
function loadDevices(opts) {
|
|
30
|
+
if (!isProjectMemoryEnabled())
|
|
31
|
+
return null;
|
|
32
|
+
const cwd = opts?.cwd ?? process.cwd();
|
|
33
|
+
const id = computeProjectId(cwd, homedir());
|
|
34
|
+
if (!id)
|
|
35
|
+
return null;
|
|
36
|
+
const dir = join(projectsRoot(opts?.baseDir), id);
|
|
37
|
+
const read = readConcern(join(dir, "devices.json"), DEVICES_SCHEMA, CURRENT_VERSION);
|
|
38
|
+
if (read.kind === "foreign")
|
|
39
|
+
return null;
|
|
40
|
+
const existing = read.kind === "ours" ? read.env : null;
|
|
41
|
+
const devices = existing?.devices ?? [];
|
|
42
|
+
return { dir, realCwd: realpathOrRaw(cwd), existing, devices };
|
|
43
|
+
}
|
|
44
|
+
function persist(dir, existing, devices, now) {
|
|
45
|
+
const env = buildWriteEnvelope(existing, DEVICES_SCHEMA, CURRENT_VERSION, now, { devices });
|
|
46
|
+
writeConcernAtomic(join(dir, "devices.json"), env);
|
|
47
|
+
}
|
|
48
|
+
function ensureMeta(dir, realCwd, now) {
|
|
49
|
+
const read = readConcern(join(dir, "meta.json"), META_SCHEMA, CURRENT_VERSION);
|
|
50
|
+
if (read.kind === "ours")
|
|
51
|
+
return; // already present (or foreign — leave it)
|
|
52
|
+
if (read.kind === "foreign")
|
|
53
|
+
return;
|
|
54
|
+
const env = buildWriteEnvelope(null, META_SCHEMA, CURRENT_VERSION, now, { path: realCwd });
|
|
55
|
+
writeConcernAtomic(join(dir, "meta.json"), env);
|
|
56
|
+
}
|
|
57
|
+
export function recordDevice(input, opts) {
|
|
58
|
+
try {
|
|
59
|
+
const ctx = loadDevices(opts);
|
|
60
|
+
if (!ctx)
|
|
61
|
+
return;
|
|
62
|
+
const now = opts?.now ?? Date.now();
|
|
63
|
+
const prior = ctx.devices.find((d) => d.identifier === input.identifier);
|
|
64
|
+
const updated = {
|
|
65
|
+
identifier: input.identifier,
|
|
66
|
+
name: input.name,
|
|
67
|
+
platform: input.platform,
|
|
68
|
+
appId: input.appId ?? prior?.appId,
|
|
69
|
+
firstSeenAt: prior?.firstSeenAt ?? now,
|
|
70
|
+
lastUsedAt: now,
|
|
71
|
+
useCount: (prior?.useCount ?? 0) + 1,
|
|
72
|
+
screenMetrics: prior?.screenMetrics,
|
|
73
|
+
};
|
|
74
|
+
persist(ctx.dir, ctx.existing, mergeDeviceLists(ctx.devices, [updated]), now);
|
|
75
|
+
ensureMeta(ctx.dir, ctx.realCwd, now);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// best-effort — never throw into a tool flow
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export function recordScreenMetrics(identifier, metrics, opts) {
|
|
82
|
+
try {
|
|
83
|
+
const ctx = loadDevices(opts);
|
|
84
|
+
if (!ctx)
|
|
85
|
+
return;
|
|
86
|
+
const prior = ctx.devices.find((d) => d.identifier === identifier);
|
|
87
|
+
if (!prior)
|
|
88
|
+
return; // enrichment only — never create an entry
|
|
89
|
+
const now = opts?.now ?? Date.now();
|
|
90
|
+
const updated = { ...prior, screenMetrics: metrics, lastUsedAt: now };
|
|
91
|
+
persist(ctx.dir, ctx.existing, mergeDeviceLists(ctx.devices, [updated]), now);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// best-effort
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export function listDevices(opts) {
|
|
98
|
+
try {
|
|
99
|
+
const ctx = loadDevices(opts);
|
|
100
|
+
if (!ctx)
|
|
101
|
+
return [];
|
|
102
|
+
return [...ctx.devices].sort((x, y) => y.lastUsedAt - x.lastUsedAt);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=projectMemory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectMemory.js","sourceRoot":"","sources":["../../src/core/projectMemory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface StoredEnvelope {
|
|
2
|
+
schema: string;
|
|
3
|
+
version: number;
|
|
4
|
+
producer: string;
|
|
5
|
+
updatedAt: number;
|
|
6
|
+
[k: string]: unknown;
|
|
7
|
+
}
|
|
8
|
+
export type ConcernRead = {
|
|
9
|
+
kind: "empty";
|
|
10
|
+
} | {
|
|
11
|
+
kind: "ours";
|
|
12
|
+
env: StoredEnvelope;
|
|
13
|
+
} | {
|
|
14
|
+
kind: "foreign";
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Stable 16-hex project id = sha256(realpath(cwd)).slice(0,16). Returns null for
|
|
18
|
+
* a degenerate launch dir (the home dir or filesystem root), where a project
|
|
19
|
+
* bucket would be meaningless — callers then behave exactly as before.
|
|
20
|
+
*/
|
|
21
|
+
export declare function computeProjectId(cwd: string, homeDir: string): string | null;
|
|
22
|
+
export declare function projectsRoot(baseDir?: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Downgrade-safe read. Only case 1 discards data:
|
|
25
|
+
* 1. missing / unparseable / no envelope shape → empty (safe to (re)create)
|
|
26
|
+
* 2. known schema → ours (migrated up if older; preserved as-is if newer)
|
|
27
|
+
* 3. schema present but not ours → foreign (leave the file untouched)
|
|
28
|
+
*/
|
|
29
|
+
export declare function readConcern(filePath: string, expectedSchema: string, currentVersion: number, migrate?: (e: StoredEnvelope) => StoredEnvelope): ConcernRead;
|
|
30
|
+
/**
|
|
31
|
+
* Preserve-unknown, never-downgrade write envelope. Starts from the existing raw
|
|
32
|
+
* object so unknown top-level keys survive, overlays the caller's payload, stamps
|
|
33
|
+
* producer/updatedAt, and keeps the greater of (existing version, currentVersion).
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildWriteEnvelope(existing: StoredEnvelope | null, schema: string, currentVersion: number, now: number, payload: Record<string, unknown>): StoredEnvelope;
|
|
36
|
+
export declare function writeConcernAtomic(filePath: string, env: StoredEnvelope): void;
|
|
37
|
+
/** execbro version that wrote a file — debug + migration signal. */
|
|
38
|
+
export declare function getProducerVersion(): string;
|
|
39
|
+
/** realpath(cwd) for display in meta.json, falling back to the raw value. */
|
|
40
|
+
export declare function realpathOrRaw(cwd: string): string;
|
|
41
|
+
//# sourceMappingURL=projectStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectStore.d.ts","sourceRoot":"","sources":["../../src/core/projectStore.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,GACjB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1B;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS5E;AAED,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACvB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,cAAc,GAChD,WAAW,CAgBb;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAC9B,QAAQ,EAAE,cAAc,GAAG,IAAI,EAC/B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,cAAc,CAWhB;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAM9E;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,IAAI,MAAM,CAQ3C;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMjD"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { createHash } from "crypto";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, writeFileSync, } from "fs";
|
|
3
|
+
import { dirname, join } from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
5
|
+
import { CONFIG_DIR } from "./paths.js";
|
|
6
|
+
/**
|
|
7
|
+
* Stable 16-hex project id = sha256(realpath(cwd)).slice(0,16). Returns null for
|
|
8
|
+
* a degenerate launch dir (the home dir or filesystem root), where a project
|
|
9
|
+
* bucket would be meaningless — callers then behave exactly as before.
|
|
10
|
+
*/
|
|
11
|
+
export function computeProjectId(cwd, homeDir) {
|
|
12
|
+
let real = cwd;
|
|
13
|
+
try {
|
|
14
|
+
real = realpathSync(cwd);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// cwd should always exist; fall back to the raw value.
|
|
18
|
+
}
|
|
19
|
+
if (real === homeDir || real === "/")
|
|
20
|
+
return null;
|
|
21
|
+
return createHash("sha256").update(real).digest("hex").slice(0, 16);
|
|
22
|
+
}
|
|
23
|
+
export function projectsRoot(baseDir) {
|
|
24
|
+
return baseDir ?? join(CONFIG_DIR, "projects");
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Downgrade-safe read. Only case 1 discards data:
|
|
28
|
+
* 1. missing / unparseable / no envelope shape → empty (safe to (re)create)
|
|
29
|
+
* 2. known schema → ours (migrated up if older; preserved as-is if newer)
|
|
30
|
+
* 3. schema present but not ours → foreign (leave the file untouched)
|
|
31
|
+
*/
|
|
32
|
+
export function readConcern(filePath, expectedSchema, currentVersion, migrate) {
|
|
33
|
+
try {
|
|
34
|
+
if (!existsSync(filePath))
|
|
35
|
+
return { kind: "empty" };
|
|
36
|
+
const parsed = JSON.parse(readFileSync(filePath, "utf-8"));
|
|
37
|
+
if (!parsed || typeof parsed !== "object" || typeof parsed.schema !== "string") {
|
|
38
|
+
return { kind: "empty" };
|
|
39
|
+
}
|
|
40
|
+
if (parsed.schema !== expectedSchema)
|
|
41
|
+
return { kind: "foreign" };
|
|
42
|
+
let env = parsed;
|
|
43
|
+
if (typeof env.version === "number" && env.version < currentVersion && migrate) {
|
|
44
|
+
env = migrate(env);
|
|
45
|
+
}
|
|
46
|
+
return { kind: "ours", env };
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return { kind: "empty" };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Preserve-unknown, never-downgrade write envelope. Starts from the existing raw
|
|
54
|
+
* object so unknown top-level keys survive, overlays the caller's payload, stamps
|
|
55
|
+
* producer/updatedAt, and keeps the greater of (existing version, currentVersion).
|
|
56
|
+
*/
|
|
57
|
+
export function buildWriteEnvelope(existing, schema, currentVersion, now, payload) {
|
|
58
|
+
const base = existing ? { ...existing } : {};
|
|
59
|
+
const version = Math.max(existing?.version ?? 0, currentVersion);
|
|
60
|
+
return {
|
|
61
|
+
...base,
|
|
62
|
+
...payload,
|
|
63
|
+
schema,
|
|
64
|
+
version,
|
|
65
|
+
producer: getProducerVersion(),
|
|
66
|
+
updatedAt: now,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export function writeConcernAtomic(filePath, env) {
|
|
70
|
+
const dir = dirname(filePath);
|
|
71
|
+
if (!existsSync(dir))
|
|
72
|
+
mkdirSync(dir, { recursive: true });
|
|
73
|
+
const tmp = `${filePath}.${process.pid}.tmp`;
|
|
74
|
+
writeFileSync(tmp, JSON.stringify(env, null, 2));
|
|
75
|
+
renameSync(tmp, filePath);
|
|
76
|
+
}
|
|
77
|
+
/** execbro version that wrote a file — debug + migration signal. */
|
|
78
|
+
export function getProducerVersion() {
|
|
79
|
+
try {
|
|
80
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
81
|
+
const pkg = JSON.parse(readFileSync(join(here, "..", "..", "package.json"), "utf-8"));
|
|
82
|
+
return pkg.version || "unknown";
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return "unknown";
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** realpath(cwd) for display in meta.json, falling back to the raw value. */
|
|
89
|
+
export function realpathOrRaw(cwd) {
|
|
90
|
+
try {
|
|
91
|
+
return realpathSync(cwd);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return cwd;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=projectStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectStore.js","sourceRoot":"","sources":["../../src/core/projectStore.ts"],"names":[],"mappings":"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"}
|
package/build/pro/tap.d.ts
CHANGED
|
@@ -111,6 +111,7 @@ export interface TapResult {
|
|
|
111
111
|
screenshot?: TapScreenshot;
|
|
112
112
|
verification?: TapVerification;
|
|
113
113
|
warning?: string;
|
|
114
|
+
deviceNote?: string;
|
|
114
115
|
artifactKey?: string;
|
|
115
116
|
ocrClosestMatch?: string;
|
|
116
117
|
fiberPressableCount?: string;
|
|
@@ -208,6 +209,7 @@ export declare function formatTapSuccess(data: {
|
|
|
208
209
|
};
|
|
209
210
|
platform?: string;
|
|
210
211
|
device?: string;
|
|
212
|
+
deviceNote?: string;
|
|
211
213
|
screenshot?: TapScreenshot;
|
|
212
214
|
verification?: TapVerification;
|
|
213
215
|
}): TapResult;
|
package/build/pro/tap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../src/pro/tap.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../src/pro/tap.ts"],"names":[],"mappings":"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"}
|
package/build/pro/tap.js
CHANGED
|
@@ -1356,6 +1356,7 @@ export async function tap(options) {
|
|
|
1356
1356
|
error: formatResolverError(resolved.error)
|
|
1357
1357
|
};
|
|
1358
1358
|
}
|
|
1359
|
+
const deviceNote = resolved.note;
|
|
1359
1360
|
const platform = resolved.target.platform;
|
|
1360
1361
|
let targetUdid = resolved.target.iosUdid;
|
|
1361
1362
|
// Pick the connected app to bias strategy selection. Prefer the registry
|
|
@@ -1605,6 +1606,7 @@ export async function tap(options) {
|
|
|
1605
1606
|
convertedTo: result.convertedTo,
|
|
1606
1607
|
platform,
|
|
1607
1608
|
device: deviceName,
|
|
1609
|
+
deviceNote,
|
|
1608
1610
|
screenshot,
|
|
1609
1611
|
verification
|
|
1610
1612
|
});
|
|
@@ -1744,6 +1746,7 @@ export async function tap(options) {
|
|
|
1744
1746
|
convertedTo: coords,
|
|
1745
1747
|
platform,
|
|
1746
1748
|
device: deviceName,
|
|
1749
|
+
deviceNote,
|
|
1747
1750
|
screenshot,
|
|
1748
1751
|
verification
|
|
1749
1752
|
});
|