@alwaysmeticulous/cli 2.262.2 → 2.263.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.
@@ -0,0 +1,2 @@
1
+ import { CommandModule } from "yargs";
2
+ export declare const agentCommand: CommandModule;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.agentCommand = void 0;
4
+ const screenshot_dom_diff_command_1 = require("./screenshot-dom-diff.command");
5
+ const screenshot_image_command_1 = require("./screenshot-image.command");
6
+ const test_run_diffs_command_1 = require("./test-run-diffs.command");
7
+ const timeline_command_1 = require("./timeline.command");
8
+ exports.agentCommand = {
9
+ command: "agent",
10
+ describe: "Agent analysis commands for test run diffs",
11
+ builder: (yargs) => yargs
12
+ .command(test_run_diffs_command_1.testRunDiffsCommand)
13
+ .command(screenshot_dom_diff_command_1.screenshotDomDiffCommand)
14
+ .command(screenshot_image_command_1.screenshotImageCommand)
15
+ .command(timeline_command_1.timelineCommand)
16
+ .demandCommand()
17
+ .help(),
18
+ handler: () => {
19
+ // subcommand handles this
20
+ },
21
+ };
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/agent/index.ts"],"names":[],"mappings":";;;AACA,+EAAyE;AACzE,yEAAoE;AACpE,qEAA+D;AAC/D,yDAAqD;AAExC,QAAA,YAAY,GAAkB;IACzC,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,4CAA4C;IACtD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,OAAO,CAAC,4CAAmB,CAAC;SAC5B,OAAO,CAAC,sDAAwB,CAAC;SACjC,OAAO,CAAC,iDAAsB,CAAC;SAC/B,OAAO,CAAC,kCAAe,CAAC;SACxB,aAAa,EAAE;SACf,IAAI,EAAE;IACX,OAAO,EAAE,GAAG,EAAE;QACZ,0BAA0B;IAC5B,CAAC;CACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { CommandModule } from "yargs";
2
+ interface Options {
3
+ apiToken?: string | null | undefined;
4
+ replayDiffId: string;
5
+ screenshotName: string;
6
+ index: number | undefined;
7
+ }
8
+ export declare const screenshotDomDiffCommand: CommandModule<unknown, Options>;
9
+ export {};
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.screenshotDomDiffCommand = void 0;
4
+ const client_1 = require("@alwaysmeticulous/client");
5
+ const common_1 = require("@alwaysmeticulous/common");
6
+ const sentry_utils_1 = require("../../command-utils/sentry.utils");
7
+ const handler = async ({ apiToken, replayDiffId, screenshotName, index, }) => {
8
+ (0, common_1.initLogger)();
9
+ const client = (0, client_1.createClient)({ apiToken });
10
+ const result = await (0, client_1.getScreenshotDomDiff)(client, replayDiffId, screenshotName, index);
11
+ if (result.diffs.length === 0) {
12
+ if (result.totalDiffs === 0) {
13
+ console.log("No differences found");
14
+ }
15
+ else {
16
+ console.error(`Index ${index} out of range (${result.totalDiffs} diff(s) available)`);
17
+ process.exit(1);
18
+ }
19
+ return;
20
+ }
21
+ if (index != null) {
22
+ console.log(result.diffs[0].content);
23
+ }
24
+ else {
25
+ for (const diff of result.diffs) {
26
+ console.log(`[diff ${diff.index}]`);
27
+ console.log(diff.content);
28
+ }
29
+ }
30
+ };
31
+ exports.screenshotDomDiffCommand = {
32
+ command: "screenshot-dom-diff",
33
+ describe: "Get screenshot DOM diff for a replay diff screenshot",
34
+ builder: {
35
+ apiToken: { string: true, description: "Meticulous API token" },
36
+ replayDiffId: {
37
+ string: true,
38
+ description: "The replay diff ID",
39
+ demandOption: true,
40
+ },
41
+ screenshotName: {
42
+ string: true,
43
+ description: 'Screenshot name (e.g. "after-event-5" or "end-state")',
44
+ demandOption: true,
45
+ },
46
+ index: {
47
+ number: true,
48
+ description: "Show only the diff hunk at this 0-based index (omit to show all hunks with indices)",
49
+ },
50
+ },
51
+ handler: (0, sentry_utils_1.wrapHandler)(handler),
52
+ };
53
+ //# sourceMappingURL=screenshot-dom-diff.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot-dom-diff.command.js","sourceRoot":"","sources":["../../../src/commands/agent/screenshot-dom-diff.command.ts"],"names":[],"mappings":";;;AAAA,qDAA8E;AAC9E,qDAAsD;AAEtD,mEAA+D;AAS/D,MAAM,OAAO,GAAG,KAAK,EAAE,EACrB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,KAAK,GACG,EAAiB,EAAE;IAC3B,IAAA,mBAAU,GAAE,CAAC;IACb,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,MAAM,IAAA,6BAAoB,EACvC,MAAM,EACN,YAAY,EACZ,cAAc,EACd,KAAK,CACN,CAAC;IAEF,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CACX,SAAS,KAAK,kBAAkB,MAAM,CAAC,UAAU,qBAAqB,CACvE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,wBAAwB,GAAoC;IACvE,OAAO,EAAE,qBAAqB;IAC9B,QAAQ,EAAE,sDAAsD;IAChE,OAAO,EAAE;QACP,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;QAC/D,YAAY,EAAE;YACZ,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,oBAAoB;YACjC,YAAY,EAAE,IAAI;SACnB;QACD,cAAc,EAAE;YACd,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,uDAAuD;YACpE,YAAY,EAAE,IAAI;SACnB;QACD,KAAK,EAAE;YACL,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,qFAAqF;SACxF;KACF;IACD,OAAO,EAAE,IAAA,0BAAW,EAAC,OAAO,CAAC;CAC9B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { CommandModule } from "yargs";
2
+ interface Options {
3
+ apiToken?: string | null | undefined;
4
+ replayDiffId: string;
5
+ screenshotName: string;
6
+ }
7
+ export declare const screenshotImageCommand: CommandModule<unknown, Options>;
8
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.screenshotImageCommand = void 0;
4
+ const client_1 = require("@alwaysmeticulous/client");
5
+ const common_1 = require("@alwaysmeticulous/common");
6
+ const sentry_utils_1 = require("../../command-utils/sentry.utils");
7
+ const handler = async ({ apiToken, replayDiffId, screenshotName, }) => {
8
+ (0, common_1.initLogger)();
9
+ const client = (0, client_1.createClient)({ apiToken });
10
+ const urls = await (0, client_1.getScreenshotUrls)(client, replayDiffId, screenshotName);
11
+ console.log(`outcome: ${urls.outcome}`);
12
+ if (urls.screenshot) {
13
+ console.log(`screenshot: ${urls.screenshot}`);
14
+ }
15
+ if (urls.before) {
16
+ console.log(`before: ${urls.before}`);
17
+ }
18
+ if (urls.after) {
19
+ console.log(`after: ${urls.after}`);
20
+ }
21
+ if (urls.diffImage) {
22
+ console.log(`diffImage: ${urls.diffImage}`);
23
+ }
24
+ };
25
+ exports.screenshotImageCommand = {
26
+ command: "screenshot-image",
27
+ describe: "Get screenshot image URLs for a replay diff screenshot",
28
+ builder: {
29
+ apiToken: { string: true, description: "Meticulous API token" },
30
+ replayDiffId: {
31
+ string: true,
32
+ description: "The replay diff ID",
33
+ demandOption: true,
34
+ },
35
+ screenshotName: {
36
+ string: true,
37
+ description: 'Screenshot name (e.g. "after-event-5" or "end-state")',
38
+ demandOption: true,
39
+ },
40
+ },
41
+ handler: (0, sentry_utils_1.wrapHandler)(handler),
42
+ };
43
+ //# sourceMappingURL=screenshot-image.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot-image.command.js","sourceRoot":"","sources":["../../../src/commands/agent/screenshot-image.command.ts"],"names":[],"mappings":";;;AAAA,qDAA2E;AAC3E,qDAAsD;AAEtD,mEAA+D;AAQ/D,MAAM,OAAO,GAAG,KAAK,EAAE,EACrB,QAAQ,EACR,YAAY,EACZ,cAAc,GACN,EAAiB,EAAE;IAC3B,IAAA,mBAAU,GAAE,CAAC;IACb,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE1C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAiB,EAAC,MAAM,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;IAE3E,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,sBAAsB,GAAoC;IACrE,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,wDAAwD;IAClE,OAAO,EAAE;QACP,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;QAC/D,YAAY,EAAE;YACZ,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,oBAAoB;YACjC,YAAY,EAAE,IAAI;SACnB;QACD,cAAc,EAAE;YACd,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,uDAAuD;YACpE,YAAY,EAAE,IAAI;SACnB;KACF;IACD,OAAO,EAAE,IAAA,0BAAW,EAAC,OAAO,CAAC;CAC9B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { CommandModule } from "yargs";
2
+ interface Options {
3
+ apiToken?: string | null | undefined;
4
+ testRunId: string;
5
+ all: boolean;
6
+ imageDiffs: boolean;
7
+ jsCoverageGroups: boolean;
8
+ cssCoverageGroups: boolean;
9
+ verbose: boolean;
10
+ }
11
+ export declare const testRunDiffsCommand: CommandModule<unknown, Options>;
12
+ export {};
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.testRunDiffsCommand = void 0;
4
+ const client_1 = require("@alwaysmeticulous/client");
5
+ const common_1 = require("@alwaysmeticulous/common");
6
+ const sentry_utils_1 = require("../../command-utils/sentry.utils");
7
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
8
+ const fmtMismatch = (v) => v != null ? v.toFixed(5) : "";
9
+ const log = (...args) => process.stderr.write(args.join(" ") + "\n");
10
+ const handler = async ({ apiToken, testRunId, all: showAll, imageDiffs: computeImageDiffs, jsCoverageGroups: computeJsCoverage, cssCoverageGroups: computeCssCoverage, verbose, }) => {
11
+ var _a, _b, _c, _d;
12
+ (0, common_1.initLogger)();
13
+ const client = (0, client_1.createClient)({ apiToken });
14
+ const t0 = performance.now();
15
+ // Trigger the job
16
+ let response = await (0, client_1.triggerTestRunDiffsSummary)(client, testRunId, {
17
+ includeDomDiffGroups: true,
18
+ includeImageDiffHashes: computeImageDiffs,
19
+ includeJsCoverageGroups: computeJsCoverage,
20
+ includeCssCoverageGroups: computeCssCoverage,
21
+ showAll,
22
+ });
23
+ // Poll until complete
24
+ while (response.status === "pending" || response.status === "processing") {
25
+ if (verbose && response.progress) {
26
+ log(`Processing: ${response.progress}`);
27
+ }
28
+ await sleep(2000);
29
+ response = await (0, client_1.getTestRunDiffsSummaryStatus)(client, testRunId, response.jobId);
30
+ }
31
+ if (response.status === "error") {
32
+ log(`Error: ${response.error}`);
33
+ process.exit(1);
34
+ }
35
+ const data = (_a = response.data) !== null && _a !== void 0 ? _a : [];
36
+ if (data.length === 0) {
37
+ log("No replay diffs found for this test run.");
38
+ return;
39
+ }
40
+ // Print TSV header
41
+ const headerFields = [
42
+ "replayDiffId",
43
+ "screenshotName",
44
+ "index",
45
+ "total",
46
+ "outcome",
47
+ "mismatch",
48
+ "domDiffIds",
49
+ ];
50
+ if (computeImageDiffs)
51
+ headerFields.push("imageDiffId");
52
+ if (computeJsCoverage)
53
+ headerFields.push("jsCoverageGroupId");
54
+ if (computeCssCoverage)
55
+ headerFields.push("cssCoverageGroupId");
56
+ console.log(headerFields.join("\t"));
57
+ let totalDiffScreenshots = 0;
58
+ for (const rd of data) {
59
+ for (const s of rd.screenshots) {
60
+ if (s.userVisibleOutcome === "difference") {
61
+ totalDiffScreenshots++;
62
+ }
63
+ const fields = [
64
+ rd.replayDiffId,
65
+ s.screenshotName,
66
+ s.index,
67
+ s.total,
68
+ s.outcome,
69
+ fmtMismatch(s.mismatchFraction),
70
+ s.domDiffIds,
71
+ ];
72
+ if (computeImageDiffs)
73
+ fields.push((_b = s.imageDiffId) !== null && _b !== void 0 ? _b : "");
74
+ if (computeJsCoverage)
75
+ fields.push((_c = s.jsCoverageGroupId) !== null && _c !== void 0 ? _c : "");
76
+ if (computeCssCoverage)
77
+ fields.push((_d = s.cssCoverageGroupId) !== null && _d !== void 0 ? _d : "");
78
+ console.log(fields.join("\t"));
79
+ }
80
+ }
81
+ const tEnd = performance.now();
82
+ log(`${totalDiffScreenshots} screenshot diff(s), total ${((tEnd - t0) / 1000).toFixed(1)}s`);
83
+ };
84
+ exports.testRunDiffsCommand = {
85
+ command: "test-run-diffs",
86
+ describe: "List replay diffs for a test run with summary",
87
+ builder: {
88
+ apiToken: { string: true, description: "Meticulous API token" },
89
+ testRunId: {
90
+ string: true,
91
+ description: "The test run ID",
92
+ demandOption: true,
93
+ },
94
+ all: {
95
+ boolean: true,
96
+ description: "Show all screenshots, not just those with differences",
97
+ default: false,
98
+ },
99
+ imageDiffs: {
100
+ boolean: true,
101
+ description: "Compute image diff hashes for deduplication (slower)",
102
+ default: false,
103
+ },
104
+ jsCoverageGroups: {
105
+ boolean: true,
106
+ description: "Compute JS coverage-based group IDs (slower)",
107
+ default: false,
108
+ },
109
+ cssCoverageGroups: {
110
+ boolean: true,
111
+ description: "Compute CSS coverage-based group IDs (slower)",
112
+ default: false,
113
+ },
114
+ verbose: {
115
+ boolean: true,
116
+ description: "Show processing progress logs",
117
+ default: false,
118
+ },
119
+ },
120
+ handler: (0, sentry_utils_1.wrapHandler)(handler),
121
+ };
122
+ //# sourceMappingURL=test-run-diffs.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-run-diffs.command.js","sourceRoot":"","sources":["../../../src/commands/agent/test-run-diffs.command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { CommandModule } from "yargs";
2
+ interface Options {
3
+ apiToken?: string | null | undefined;
4
+ replayDiffId: string;
5
+ }
6
+ export declare const timelineCommand: CommandModule<unknown, Options>;
7
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.timelineCommand = void 0;
4
+ const client_1 = require("@alwaysmeticulous/client");
5
+ const common_1 = require("@alwaysmeticulous/common");
6
+ const sentry_utils_1 = require("../../command-utils/sentry.utils");
7
+ const STATUS_PREFIX = {
8
+ identical: " ",
9
+ removed: "-",
10
+ added: "+",
11
+ changed: "!",
12
+ };
13
+ const handler = async ({ apiToken, replayDiffId }) => {
14
+ var _a;
15
+ (0, common_1.initLogger)();
16
+ const client = (0, client_1.createClient)({ apiToken });
17
+ const { baseReplayId, headReplayId, entries } = await (0, client_1.getTimelineDiff)(client, replayDiffId);
18
+ process.stderr.write(`base: ${baseReplayId}\n`);
19
+ process.stderr.write(`head: ${headReplayId}\n`);
20
+ console.log(["diff", "timeMs", "event", "description"].join("\t"));
21
+ for (const entry of entries) {
22
+ console.log([
23
+ (_a = STATUS_PREFIX[entry.status]) !== null && _a !== void 0 ? _a : " ",
24
+ entry.timeMs,
25
+ entry.eventKind,
26
+ entry.description,
27
+ ].join("\t"));
28
+ }
29
+ };
30
+ exports.timelineCommand = {
31
+ command: "timeline",
32
+ describe: "Get timeline diff for a replay diff",
33
+ builder: {
34
+ apiToken: { string: true, description: "Meticulous API token" },
35
+ replayDiffId: {
36
+ string: true,
37
+ description: "The replay diff ID",
38
+ demandOption: true,
39
+ },
40
+ },
41
+ handler: (0, sentry_utils_1.wrapHandler)(handler),
42
+ };
43
+ //# sourceMappingURL=timeline.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.command.js","sourceRoot":"","sources":["../../../src/commands/agent/timeline.command.ts"],"names":[],"mappings":";;;AAAA,qDAAyE;AACzE,qDAAsD;AAEtD,mEAA+D;AAO/D,MAAM,aAAa,GAA2B;IAC5C,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,GAAG;CACb,CAAC;AAEF,MAAM,OAAO,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAW,EAAiB,EAAE;;IAC3E,IAAA,mBAAU,GAAE,CAAC;IACb,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE1C,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,wBAAe,EACnE,MAAM,EACN,YAAY,CACb,CAAC;IAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,YAAY,IAAI,CAAC,CAAC;IAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,YAAY,IAAI,CAAC,CAAC;IAEhD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CACT;YACE,MAAA,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAI,GAAG;YAClC,KAAK,CAAC,MAAM;YACZ,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,WAAW;SAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,eAAe,GAAoC;IAC9D,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,qCAAqC;IAC/C,OAAO,EAAE;QACP,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;QAC/D,YAAY,EAAE;YACZ,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,oBAAoB;YACjC,YAAY,EAAE,IAAI;SACnB;KACF;IACD,OAAO,EAAE,IAAA,0BAAW,EAAC,OAAO,CAAC;CAC9B,CAAC"}
package/dist/main.js CHANGED
@@ -9,14 +9,15 @@ const common_1 = require("@alwaysmeticulous/common");
9
9
  const sentry_1 = require("@alwaysmeticulous/sentry");
10
10
  const yargs_1 = __importDefault(require("yargs"));
11
11
  const sentry_utils_1 = require("./command-utils/sentry.utils");
12
- const index_1 = require("./commands/auth/index");
13
- const index_2 = require("./commands/ci/index");
14
- const index_3 = require("./commands/debug/index");
12
+ const index_1 = require("./commands/agent/index");
13
+ const index_2 = require("./commands/auth/index");
14
+ const index_3 = require("./commands/ci/index");
15
+ const index_4 = require("./commands/debug/index");
15
16
  const deprecated_aliases_1 = require("./commands/deprecated-aliases");
16
- const index_4 = require("./commands/download/index");
17
+ const index_5 = require("./commands/download/index");
17
18
  const local_1 = require("./commands/local");
18
- const index_5 = require("./commands/project/index");
19
- const index_6 = require("./commands/record/index");
19
+ const index_6 = require("./commands/project/index");
20
+ const index_7 = require("./commands/record/index");
20
21
  const replay_command_1 = require("./commands/replay.command");
21
22
  const schema_command_1 = require("./commands/schema.command");
22
23
  const handleDataDir = (dataDir) => {
@@ -32,13 +33,14 @@ const main = async () => {
32
33
  .usage(`$0 <command>
33
34
 
34
35
  Meticulous CLI`)
35
- .command(index_1.authCommand)
36
- .command(index_2.ciCommand)
37
- .command(index_3.debugCommand)
38
- .command(index_4.downloadCommand)
36
+ .command(index_1.agentCommand)
37
+ .command(index_2.authCommand)
38
+ .command(index_3.ciCommand)
39
+ .command(index_4.debugCommand)
40
+ .command(index_5.downloadCommand)
39
41
  .command(local_1.localCommand)
40
- .command(index_5.projectCommand)
41
- .command(index_6.recordCommand)
42
+ .command(index_6.projectCommand)
43
+ .command(index_7.recordCommand)
42
44
  .command(replay_command_1.replayCommand)
43
45
  .command(schema_command_1.schemaCommand);
44
46
  for (const alias of deprecated_aliases_1.deprecatedAliases) {
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;;AAAA,+BAAuC;AACvC,qDAKkC;AAClC,qDAAsD;AACtD,kDAA0B;AAC1B,+DAA0D;AAC1D,iDAAoD;AACpD,+CAAgD;AAChD,kDAAsD;AACtD,sEAAkE;AAClE,qDAA4D;AAC5D,4CAAgD;AAChD,oDAA0D;AAC1D,mDAAwD;AACxD,8DAA0D;AAC1D,8DAA0D;AAE1D,MAAM,aAAa,GAAG,CAAC,OAAkC,EAAQ,EAAE;IACjE,IAAA,kCAAyB,EAAC,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC;AAEK,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IAC5C,IAAA,mBAAU,GAAE,CAAC;IACb,MAAM,eAAe,GAAG,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACtE,MAAM,iBAAiB,GAAG,MAAM,IAAA,6BAAoB,EAAC,eAAe,CAAC,CAAC;IACtE,MAAM,IAAA,mBAAU,EAAC,iBAAiB,CAAC,CAAC;IAEpC,MAAM,GAAG,GAAG,eAAK;SACd,UAAU,CAAC,YAAY,CAAC;SACxB,KAAK,CACJ;;qBAEe,CAChB;SACA,OAAO,CAAC,mBAAW,CAAC;SACpB,OAAO,CAAC,iBAAS,CAAC;SAClB,OAAO,CAAC,oBAAY,CAAC;SACrB,OAAO,CAAC,uBAAe,CAAC;SACxB,OAAO,CAAC,oBAAY,CAAC;SACrB,OAAO,CAAC,sBAAc,CAAC;SACvB,OAAO,CAAC,qBAAa,CAAC;SACtB,OAAO,CAAC,8BAAa,CAAC;SACtB,OAAO,CAAC,8BAAa,CAAC,CAAC;IAE1B,KAAK,MAAM,KAAK,IAAI,sCAAiB,EAAE,CAAC;QACtC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,GAAG;SACN,IAAI,EAAE;SACN,MAAM,EAAE;SACR,aAAa,EAAE;SACf,MAAM,CAAC;QACN,QAAQ,EAAE;YACR,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;YAC9D,WAAW,EAAE,WAAW;SACzB;QACD,OAAO,EAAE;YACP,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,wDAAwD;SACtE;QACD,OAAO,EAAE;YACP,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,gEAAgE;SACnE;QACD,MAAM,EAAE;YACN,OAAO,EAAE,IAAI;YACb,WAAW,EACT,4DAA4D;YAC9D,OAAO,EAAE,KAAK;SACf;KACF,CAAC;SACD,UAAU,CACT;QACE,CAAC,IAAI,EAAE,EAAE;YACP,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAiB,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;KACF,EACD,IAAI,CACL;SACA,UAAU,CAAC;QACV,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,oBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC;QACpC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;QACrC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,yBAAU,EAAC,IAAI,CAAC;KAC3B,CAAC,CAAC,IAAI,CAAC;AACZ,CAAC,CAAC;AAnEW,QAAA,IAAI,QAmEf;AAEF,KAAK,IAAA,YAAI,GAAE,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;;AAAA,+BAAuC;AACvC,qDAKkC;AAClC,qDAAsD;AACtD,kDAA0B;AAC1B,+DAA0D;AAC1D,kDAAsD;AACtD,iDAAoD;AACpD,+CAAgD;AAChD,kDAAsD;AACtD,sEAAkE;AAClE,qDAA4D;AAC5D,4CAAgD;AAChD,oDAA0D;AAC1D,mDAAwD;AACxD,8DAA0D;AAC1D,8DAA0D;AAE1D,MAAM,aAAa,GAAG,CAAC,OAAkC,EAAQ,EAAE;IACjE,IAAA,kCAAyB,EAAC,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC;AAEK,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IAC5C,IAAA,mBAAU,GAAE,CAAC;IACb,MAAM,eAAe,GAAG,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACtE,MAAM,iBAAiB,GAAG,MAAM,IAAA,6BAAoB,EAAC,eAAe,CAAC,CAAC;IACtE,MAAM,IAAA,mBAAU,EAAC,iBAAiB,CAAC,CAAC;IAEpC,MAAM,GAAG,GAAG,eAAK;SACd,UAAU,CAAC,YAAY,CAAC;SACxB,KAAK,CACJ;;qBAEe,CAChB;SACA,OAAO,CAAC,oBAAY,CAAC;SACrB,OAAO,CAAC,mBAAW,CAAC;SACpB,OAAO,CAAC,iBAAS,CAAC;SAClB,OAAO,CAAC,oBAAY,CAAC;SACrB,OAAO,CAAC,uBAAe,CAAC;SACxB,OAAO,CAAC,oBAAY,CAAC;SACrB,OAAO,CAAC,sBAAc,CAAC;SACvB,OAAO,CAAC,qBAAa,CAAC;SACtB,OAAO,CAAC,8BAAa,CAAC;SACtB,OAAO,CAAC,8BAAa,CAAC,CAAC;IAE1B,KAAK,MAAM,KAAK,IAAI,sCAAiB,EAAE,CAAC;QACtC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,GAAG;SACN,IAAI,EAAE;SACN,MAAM,EAAE;SACR,aAAa,EAAE;SACf,MAAM,CAAC;QACN,QAAQ,EAAE;YACR,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;YAC9D,WAAW,EAAE,WAAW;SACzB;QACD,OAAO,EAAE;YACP,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,wDAAwD;SACtE;QACD,OAAO,EAAE;YACP,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,gEAAgE;SACnE;QACD,MAAM,EAAE;YACN,OAAO,EAAE,IAAI;YACb,WAAW,EACT,4DAA4D;YAC9D,OAAO,EAAE,KAAK;SACf;KACF,CAAC;SACD,UAAU,CACT;QACE,CAAC,IAAI,EAAE,EAAE;YACP,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAiB,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;KACF,EACD,IAAI,CACL;SACA,UAAU,CAAC;QACV,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,oBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC;QACpC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;QACrC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,yBAAU,EAAC,IAAI,CAAC;KAC3B,CAAC,CAAC,IAAI,CAAC;AACZ,CAAC,CAAC;AApEW,QAAA,IAAI,QAoEf;AAEF,KAAK,IAAA,YAAI,GAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alwaysmeticulous/cli",
3
- "version": "2.262.2",
3
+ "version": "2.263.0",
4
4
  "description": "The Meticulous CLI",
5
5
  "license": "ISC",
6
6
  "main": "dist/index.js",
@@ -30,14 +30,14 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@alwaysmeticulous/api": "2.262.0",
33
- "@alwaysmeticulous/client": "2.262.1",
33
+ "@alwaysmeticulous/client": "2.263.0",
34
34
  "@alwaysmeticulous/common": "2.262.1",
35
- "@alwaysmeticulous/debug-workspace": "2.262.2",
36
- "@alwaysmeticulous/downloading-helpers": "2.262.2",
35
+ "@alwaysmeticulous/debug-workspace": "2.263.0",
36
+ "@alwaysmeticulous/downloading-helpers": "2.263.0",
37
37
  "@alwaysmeticulous/record": "2.262.1",
38
- "@alwaysmeticulous/remote-replay-launcher": "2.262.1",
38
+ "@alwaysmeticulous/remote-replay-launcher": "2.263.0",
39
39
  "@alwaysmeticulous/replay-debugger-ui": "2.262.1",
40
- "@alwaysmeticulous/replay-orchestrator-launcher": "2.262.2",
40
+ "@alwaysmeticulous/replay-orchestrator-launcher": "2.263.0",
41
41
  "@alwaysmeticulous/sdk-bundles-api": "2.262.1",
42
42
  "@alwaysmeticulous/sentry": "2.262.1",
43
43
  "@alwaysmeticulous/tunnels-client": "2.262.1",
@@ -75,5 +75,5 @@
75
75
  "bugs": {
76
76
  "url": "https://github.com/alwaysmeticulous/meticulous-sdk/issues"
77
77
  },
78
- "gitHead": "c8124221d4f2d118221cca57c66122aaada8231f"
78
+ "gitHead": "acb4409c46ab5c65af07820a34ac9a9947a70bc0"
79
79
  }