@alwaysmeticulous/cli 2.327.0 → 2.328.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.
- package/dist/commands/ci/agent-test.command.d.ts +2 -0
- package/dist/commands/ci/agent-test.command.d.ts.map +1 -1
- package/dist/commands/ci/agent-test.command.js +28 -3
- package/dist/commands/ci/agent-test.command.js.map +1 -1
- package/dist/commands/ci/agent-test.command.spec.d.ts +2 -0
- package/dist/commands/ci/agent-test.command.spec.d.ts.map +1 -0
- package/dist/commands/ci/agent-test.command.spec.js +133 -0
- package/dist/commands/ci/agent-test.command.spec.js.map +1 -0
- package/dist/commands/onboard/templates/docs/reference/cli-commands.ts +1 -1
- package/package.json +9 -9
|
@@ -9,6 +9,8 @@ interface Options {
|
|
|
9
9
|
assetsUploadId?: string | undefined;
|
|
10
10
|
backendUrl?: string | undefined;
|
|
11
11
|
backendProxyPaths?: string[] | undefined;
|
|
12
|
+
trustedOrigins?: string[] | undefined;
|
|
13
|
+
appPort?: number | undefined;
|
|
12
14
|
instructionsFile?: string | undefined;
|
|
13
15
|
enableLocalMocks?: boolean | undefined;
|
|
14
16
|
containerPort?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-test.command.d.ts","sourceRoot":"","sources":["../../../src/commands/ci/agent-test.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAKrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAU3C,UAAU,OAAO;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,CAAC,EAAE,oBAAoB,EAAE,GAAG,SAAS,CAAC;IAClD,4BAA4B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"agent-test.command.d.ts","sourceRoot":"","sources":["../../../src/commands/ci/agent-test.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAKrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAU3C,UAAU,OAAO;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,CAAC,EAAE,oBAAoB,EAAE,GAAG,SAAS,CAAC;IAClD,4BAA4B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAkHD,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CA+F9D,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ca9a7cd5-2c80-5e16-a846-6eb9e6b2ab80")}catch(e){}}();
|
|
3
3
|
|
|
4
4
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
5
|
if (k2 === undefined) k2 = k;
|
|
@@ -45,7 +45,7 @@ const sentry_utils_1 = require("../../command-utils/sentry.utils");
|
|
|
45
45
|
const out_of_date_client_error_1 = require("../../utils/out-of-date-client-error");
|
|
46
46
|
const resolve_project_identifier_1 = require("../../utils/resolve-project-identifier");
|
|
47
47
|
const resolve_git_options_1 = require("./resolve-git-options");
|
|
48
|
-
const handler = async ({ apiToken, commitSha: commitSha_, repoDirectory, localImageTag, assetsDir, assetsUploadId, backendUrl, backendProxyPaths, instructionsFile, enableLocalMocks, containerPort, containerEnv, containerHealthCheckEndpoint, dryRun, }) => {
|
|
48
|
+
const handler = async ({ apiToken, commitSha: commitSha_, repoDirectory, localImageTag, assetsDir, assetsUploadId, backendUrl, backendProxyPaths, trustedOrigins, appPort, instructionsFile, enableLocalMocks, containerPort, containerEnv, containerHealthCheckEndpoint, dryRun, }) => {
|
|
49
49
|
const logger = (0, common_1.initLogger)();
|
|
50
50
|
const { commitSha } = await (0, resolve_git_options_1.resolveGitOptions)({
|
|
51
51
|
commitSha: commitSha_,
|
|
@@ -60,6 +60,12 @@ const handler = async ({ apiToken, commitSha: commitSha_, repoDirectory, localIm
|
|
|
60
60
|
if (enableLocalMocks && backendUrl) {
|
|
61
61
|
throw new Error("--enableLocalMocks cannot be combined with --backendUrl.");
|
|
62
62
|
}
|
|
63
|
+
if (trustedOrigins?.length && localImageTag) {
|
|
64
|
+
throw new Error("--trustedOrigins is only supported with uploaded assets.");
|
|
65
|
+
}
|
|
66
|
+
if (appPort != null && localImageTag) {
|
|
67
|
+
throw new Error("--appPort is only supported with uploaded assets.");
|
|
68
|
+
}
|
|
63
69
|
const target = localImageTag ?? assetsDir ?? `uploaded assets ${assetsUploadId ?? ""}`;
|
|
64
70
|
logger.info(`Launching agentic PR testing with ${target} for commit ${commitSha}`);
|
|
65
71
|
if (dryRun) {
|
|
@@ -74,6 +80,8 @@ const handler = async ({ apiToken, commitSha: commitSha_, repoDirectory, localIm
|
|
|
74
80
|
assetsDir,
|
|
75
81
|
assetsUploadId,
|
|
76
82
|
backendUrl,
|
|
83
|
+
trustedOrigins,
|
|
84
|
+
appPort,
|
|
77
85
|
enableLocalMocks,
|
|
78
86
|
},
|
|
79
87
|
});
|
|
@@ -105,6 +113,8 @@ const handler = async ({ apiToken, commitSha: commitSha_, repoDirectory, localIm
|
|
|
105
113
|
},
|
|
106
114
|
}
|
|
107
115
|
: {}),
|
|
116
|
+
...(trustedOrigins?.length ? { trustedOrigins } : {}),
|
|
117
|
+
...(appPort != null ? { appPort } : {}),
|
|
108
118
|
...projectIdentifier,
|
|
109
119
|
});
|
|
110
120
|
}
|
|
@@ -151,6 +161,21 @@ exports.ciAgentTestCommand = {
|
|
|
151
161
|
default: ["/api"],
|
|
152
162
|
description: "Same-origin path prefixes to reverse proxy to the staging backend.",
|
|
153
163
|
},
|
|
164
|
+
trustedOrigins: {
|
|
165
|
+
array: true,
|
|
166
|
+
string: true,
|
|
167
|
+
description: "HTTPS origins the agent's browser may call besides the app origin, " +
|
|
168
|
+
"e.g. --trustedOrigins https://auth.example.com --trustedOrigins https://api.example.com. " +
|
|
169
|
+
"Use when the uploaded frontend makes absolute cross-origin requests. " +
|
|
170
|
+
"Each value must be an https origin (no path, query, or credentials). " +
|
|
171
|
+
"Only supported with uploaded assets.",
|
|
172
|
+
},
|
|
173
|
+
appPort: {
|
|
174
|
+
number: true,
|
|
175
|
+
description: "Port to serve uploaded frontend assets on. Defaults to 8000 on the worker. " +
|
|
176
|
+
"The run fails if the port is unavailable — there is no fallback — so staging " +
|
|
177
|
+
"CORS allowlists can pin http://localhost:<port>. Only supported with uploaded assets.",
|
|
178
|
+
},
|
|
154
179
|
instructionsFile: {
|
|
155
180
|
string: true,
|
|
156
181
|
description: "Path to a markdown file with instructions for the agent (e.g. how to log in, which accounts to use).",
|
|
@@ -187,4 +212,4 @@ exports.ciAgentTestCommand = {
|
|
|
187
212
|
handler: (0, sentry_utils_1.wrapHandler)(handler),
|
|
188
213
|
};
|
|
189
214
|
//# sourceMappingURL=agent-test.command.js.map
|
|
190
|
-
//# debugId=
|
|
215
|
+
//# debugId=ca9a7cd5-2c80-5e16-a846-6eb9e6b2ab80
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-test.command.js","sources":["../../../src/commands/ci/agent-test.command.ts"],"sourceRoot":"","names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,qDAAoE;AACpE,qDAAsD;AACtD,qFAA4E;AAC5E,qDAAuC;AAEvC,uEAA6D;AAC7D,mEAA+D;AAC/D,mFAG8C;AAC9C,uFAAkF;AAClF,+DAA0D;
|
|
1
|
+
{"version":3,"file":"agent-test.command.js","sources":["../../../src/commands/ci/agent-test.command.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"ca9a7cd5-2c80-5e16-a846-6eb9e6b2ab80"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-test.command.spec.d.ts","sourceRoot":"","sources":["../../../src/commands/ci/agent-test.command.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="38e069a1-2c5e-54d1-af82-12afd7cc8dfe")}catch(e){}}();
|
|
3
|
+
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
const vitest_1 = require("vitest");
|
|
9
|
+
const yargs_1 = __importDefault(require("yargs"));
|
|
10
|
+
const agent_test_command_1 = require("./agent-test.command");
|
|
11
|
+
const loggerMock = {
|
|
12
|
+
info: vitest_1.vi.fn(),
|
|
13
|
+
warn: vitest_1.vi.fn(),
|
|
14
|
+
error: vitest_1.vi.fn(),
|
|
15
|
+
debug: vitest_1.vi.fn(),
|
|
16
|
+
};
|
|
17
|
+
const mocks = vitest_1.vi.hoisted(() => ({
|
|
18
|
+
generateSessions: vitest_1.vi.fn(() => Promise.resolve({ uploadId: "upload" })),
|
|
19
|
+
resolveGitOptions: vitest_1.vi.fn(() => Promise.resolve({ commitSha: "abc123" })),
|
|
20
|
+
resolveApiTokenWithOAuth: vitest_1.vi.fn(() => Promise.resolve("token")),
|
|
21
|
+
resolveProjectIdentifier: vitest_1.vi.fn(() => Promise.resolve({ projectId: "project" })),
|
|
22
|
+
}));
|
|
23
|
+
vitest_1.vi.mock("../../command-utils/sentry.utils", () => ({
|
|
24
|
+
wrapHandler: (fn) => fn,
|
|
25
|
+
}));
|
|
26
|
+
vitest_1.vi.mock("@alwaysmeticulous/common", async (importOriginal) => {
|
|
27
|
+
const actual = await importOriginal();
|
|
28
|
+
return {
|
|
29
|
+
...actual,
|
|
30
|
+
initLogger: () => loggerMock,
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
vitest_1.vi.mock("@alwaysmeticulous/remote-replay-launcher", () => ({
|
|
34
|
+
generateSessions: mocks.generateSessions,
|
|
35
|
+
}));
|
|
36
|
+
vitest_1.vi.mock("./resolve-git-options", () => ({
|
|
37
|
+
resolveGitOptions: mocks.resolveGitOptions,
|
|
38
|
+
}));
|
|
39
|
+
vitest_1.vi.mock("@alwaysmeticulous/client", async (importOriginal) => {
|
|
40
|
+
const actual = await importOriginal();
|
|
41
|
+
return {
|
|
42
|
+
...actual,
|
|
43
|
+
resolveApiTokenWithOAuth: mocks.resolveApiTokenWithOAuth,
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
vitest_1.vi.mock("../../utils/resolve-project-identifier", () => ({
|
|
47
|
+
resolveProjectIdentifier: mocks.resolveProjectIdentifier,
|
|
48
|
+
}));
|
|
49
|
+
const parseAgentTest = async (args) => {
|
|
50
|
+
let parsed;
|
|
51
|
+
await (0, yargs_1.default)()
|
|
52
|
+
.exitProcess(false)
|
|
53
|
+
.command({
|
|
54
|
+
...agent_test_command_1.ciAgentTestCommand,
|
|
55
|
+
handler: (argv) => {
|
|
56
|
+
parsed = argv;
|
|
57
|
+
},
|
|
58
|
+
})
|
|
59
|
+
.parseAsync(["agent-test", ...args]);
|
|
60
|
+
return parsed;
|
|
61
|
+
};
|
|
62
|
+
const runHandler = (args) => agent_test_command_1.ciAgentTestCommand.handler(args);
|
|
63
|
+
(0, vitest_1.describe)("ci agent-test --trustedOrigins", () => {
|
|
64
|
+
(0, vitest_1.beforeEach)(() => {
|
|
65
|
+
vitest_1.vi.clearAllMocks();
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.it)("parses repeated --trustedOrigins into a string array", async () => {
|
|
68
|
+
const parsed = await parseAgentTest([
|
|
69
|
+
"--assetsDir",
|
|
70
|
+
"dist",
|
|
71
|
+
"--trustedOrigins",
|
|
72
|
+
"https://auth.example.com",
|
|
73
|
+
"--trustedOrigins",
|
|
74
|
+
"https://api.example.com",
|
|
75
|
+
"--dryRun",
|
|
76
|
+
]);
|
|
77
|
+
(0, vitest_1.expect)(parsed?.["trustedOrigins"]).toEqual([
|
|
78
|
+
"https://auth.example.com",
|
|
79
|
+
"https://api.example.com",
|
|
80
|
+
]);
|
|
81
|
+
});
|
|
82
|
+
(0, vitest_1.it)("passes trustedOrigins through to generateSessions", async () => {
|
|
83
|
+
await runHandler({
|
|
84
|
+
assetsDir: "dist",
|
|
85
|
+
trustedOrigins: ["https://auth.example.com", "https://api.example.com"],
|
|
86
|
+
});
|
|
87
|
+
(0, vitest_1.expect)(mocks.generateSessions).toHaveBeenCalledTimes(1);
|
|
88
|
+
(0, vitest_1.expect)(mocks.generateSessions).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
|
|
89
|
+
trustedOrigins: ["https://auth.example.com", "https://api.example.com"],
|
|
90
|
+
}));
|
|
91
|
+
});
|
|
92
|
+
(0, vitest_1.it)("rejects --trustedOrigins with --localImageTag", async () => {
|
|
93
|
+
await (0, vitest_1.expect)(runHandler({
|
|
94
|
+
localImageTag: "app:latest",
|
|
95
|
+
trustedOrigins: ["https://auth.example.com"],
|
|
96
|
+
})).rejects.toThrow(/only supported with uploaded assets/);
|
|
97
|
+
(0, vitest_1.expect)(mocks.generateSessions).not.toHaveBeenCalled();
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
(0, vitest_1.describe)("ci agent-test --appPort", () => {
|
|
101
|
+
(0, vitest_1.beforeEach)(() => {
|
|
102
|
+
vitest_1.vi.clearAllMocks();
|
|
103
|
+
});
|
|
104
|
+
(0, vitest_1.it)("parses --appPort as a number", async () => {
|
|
105
|
+
const parsed = await parseAgentTest([
|
|
106
|
+
"--assetsDir",
|
|
107
|
+
"dist",
|
|
108
|
+
"--appPort",
|
|
109
|
+
"8001",
|
|
110
|
+
"--dryRun",
|
|
111
|
+
]);
|
|
112
|
+
(0, vitest_1.expect)(parsed?.["appPort"]).toBe(8001);
|
|
113
|
+
});
|
|
114
|
+
(0, vitest_1.it)("passes appPort through to generateSessions", async () => {
|
|
115
|
+
await runHandler({
|
|
116
|
+
assetsDir: "dist",
|
|
117
|
+
appPort: 8001,
|
|
118
|
+
});
|
|
119
|
+
(0, vitest_1.expect)(mocks.generateSessions).toHaveBeenCalledTimes(1);
|
|
120
|
+
(0, vitest_1.expect)(mocks.generateSessions).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
|
|
121
|
+
appPort: 8001,
|
|
122
|
+
}));
|
|
123
|
+
});
|
|
124
|
+
(0, vitest_1.it)("rejects --appPort with --localImageTag", async () => {
|
|
125
|
+
await (0, vitest_1.expect)(runHandler({
|
|
126
|
+
localImageTag: "app:latest",
|
|
127
|
+
appPort: 8001,
|
|
128
|
+
})).rejects.toThrow(/only supported with uploaded assets/);
|
|
129
|
+
(0, vitest_1.expect)(mocks.generateSessions).not.toHaveBeenCalled();
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=agent-test.command.spec.js.map
|
|
133
|
+
//# debugId=38e069a1-2c5e-54d1-af82-12afd7cc8dfe
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-test.command.spec.js","sources":["../../../src/commands/ci/agent-test.command.spec.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"38e069a1-2c5e-54d1-af82-12afd7cc8dfe"}
|
|
@@ -285,7 +285,7 @@ Provide exactly one target:
|
|
|
285
285
|
- \`--assetsUploadId\` — an existing uploaded-assets build.
|
|
286
286
|
- \`--localImageTag\` — a locally built Docker image.
|
|
287
287
|
|
|
288
|
-
Use \`--instructionsFile\` to give the agent routes and flows to exercise. With an uploaded frontend, \`--backendUrl\` proxies configured relative paths (\`--backendProxyPaths\`, default \`/api\`) to a public HTTPS staging backend. It cannot be combined with \`--enableLocalMocks\`.
|
|
288
|
+
Use \`--instructionsFile\` to give the agent routes and flows to exercise. With an uploaded frontend, \`--backendUrl\` proxies configured relative paths (\`--backendProxyPaths\`, default \`/api\`) to a public HTTPS staging backend. It cannot be combined with \`--enableLocalMocks\`. If the frontend calls other hosts with absolute URLs, pass them as repeatable \`--trustedOrigins https://…\` values (HTTPS origins only; uploaded assets only). Those hosts must allow CORS from the app origin (\`http://localhost:8000\` by default, overridable with \`--appPort\`); cookie sessions need \`SameSite=None; Secure\`.
|
|
289
289
|
|
|
290
290
|
For a pull request workflow, pass \`github.event.pull_request.head.sha || github.sha\` as \`--commitSha\`, rather than only \`github.sha\`. Use \`--dryRun\` to validate options without launching an agent.
|
|
291
291
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alwaysmeticulous/cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.328.0",
|
|
4
4
|
"description": "The Meticulous CLI",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,19 +24,19 @@
|
|
|
24
24
|
"puppeteer-core": "24.42.0",
|
|
25
25
|
"tar": "^7.5.22",
|
|
26
26
|
"yargs": "^17.5.1",
|
|
27
|
-
"@alwaysmeticulous/
|
|
28
|
-
"@alwaysmeticulous/client": "2.327.0",
|
|
27
|
+
"@alwaysmeticulous/client": "2.328.0",
|
|
29
28
|
"@alwaysmeticulous/common": "2.326.0",
|
|
30
|
-
"@alwaysmeticulous/
|
|
31
|
-
"@alwaysmeticulous/
|
|
29
|
+
"@alwaysmeticulous/api": "2.327.0",
|
|
30
|
+
"@alwaysmeticulous/debug-workspace": "2.328.0",
|
|
32
31
|
"@alwaysmeticulous/record": "2.327.0",
|
|
33
|
-
"@alwaysmeticulous/
|
|
34
|
-
"@alwaysmeticulous/replay-
|
|
35
|
-
"@alwaysmeticulous/replay-orchestrator-launcher": "2.327.0",
|
|
32
|
+
"@alwaysmeticulous/downloading-helpers": "2.328.0",
|
|
33
|
+
"@alwaysmeticulous/remote-replay-launcher": "2.328.0",
|
|
36
34
|
"@alwaysmeticulous/sdk-bundles-api": "2.327.0",
|
|
37
35
|
"@alwaysmeticulous/sentry": "2.326.0",
|
|
38
36
|
"@alwaysmeticulous/session-filters": "2.327.0",
|
|
39
|
-
"@alwaysmeticulous/tunnels-client": "2.326.0"
|
|
37
|
+
"@alwaysmeticulous/tunnels-client": "2.326.0",
|
|
38
|
+
"@alwaysmeticulous/replay-orchestrator-launcher": "2.328.0",
|
|
39
|
+
"@alwaysmeticulous/replay-debugger-ui": "2.283.1"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/cli-progress": "^3.11.5",
|