@copado/agentia-cli 0.112.0-alpha.0 → 0.113.0-alpha.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/README.md +1965 -410
- package/dist/commands/testing/build/abort.d.ts +7 -1
- package/dist/commands/testing/build/abort.js +13 -3
- package/dist/commands/testing/build/abort.js.map +1 -1
- package/dist/commands/testing/build/get.d.ts +18 -0
- package/dist/commands/testing/build/get.js +38 -0
- package/dist/commands/testing/build/get.js.map +1 -0
- package/dist/commands/testing/build/latest.d.ts +12 -0
- package/dist/commands/testing/build/latest.js +40 -0
- package/dist/commands/testing/build/latest.js.map +1 -0
- package/dist/commands/testing/build/list.d.ts +6 -1
- package/dist/commands/testing/build/list.js +23 -1
- package/dist/commands/testing/build/list.js.map +1 -1
- package/dist/commands/testing/build/logs.d.ts +6 -0
- package/dist/commands/testing/build/logs.js +8 -1
- package/dist/commands/testing/build/logs.js.map +1 -1
- package/dist/commands/testing/build/run.d.ts +27 -4
- package/dist/commands/testing/build/run.js +4 -18
- package/dist/commands/testing/build/run.js.map +1 -1
- package/dist/commands/testing/build/search.d.ts +21 -0
- package/dist/commands/testing/build/search.js +57 -0
- package/dist/commands/testing/build/search.js.map +1 -0
- package/dist/commands/testing/create.d.ts +1 -15
- package/dist/commands/testing/create.js +1 -43
- package/dist/commands/testing/create.js.map +1 -1
- package/dist/commands/testing/data-table/create.d.ts +30 -0
- package/dist/commands/testing/data-table/create.js +52 -0
- package/dist/commands/testing/data-table/create.js.map +1 -0
- package/dist/commands/testing/data-table/delete.d.ts +25 -0
- package/dist/commands/testing/data-table/delete.js +40 -0
- package/dist/commands/testing/data-table/delete.js.map +1 -0
- package/dist/commands/testing/data-table/export.d.ts +33 -0
- package/dist/commands/testing/data-table/export.js +59 -0
- package/dist/commands/testing/data-table/export.js.map +1 -0
- package/dist/commands/testing/data-table/get.d.ts +21 -0
- package/dist/commands/testing/data-table/get.js +35 -0
- package/dist/commands/testing/data-table/get.js.map +1 -0
- package/dist/commands/testing/data-table/list.d.ts +16 -0
- package/dist/commands/testing/data-table/list.js +33 -0
- package/dist/commands/testing/data-table/list.js.map +1 -0
- package/dist/commands/testing/data-table/update.d.ts +34 -0
- package/dist/commands/testing/data-table/update.js +64 -0
- package/dist/commands/testing/data-table/update.js.map +1 -0
- package/dist/commands/testing/job/create.d.ts +18 -0
- package/dist/commands/testing/job/create.js +60 -4
- package/dist/commands/testing/job/create.js.map +1 -1
- package/dist/commands/testing/job/delete.d.ts +6 -1
- package/dist/commands/testing/job/delete.js +13 -3
- package/dist/commands/testing/job/delete.js.map +1 -1
- package/dist/commands/testing/job/refs.d.ts +17 -0
- package/dist/commands/testing/job/refs.js +30 -0
- package/dist/commands/testing/job/refs.js.map +1 -0
- package/dist/commands/testing/job/schedule/get.d.ts +23 -0
- package/dist/commands/testing/job/schedule/get.js +31 -0
- package/dist/commands/testing/job/schedule/get.js.map +1 -0
- package/dist/commands/testing/job/schedule/remove.d.ts +24 -0
- package/dist/commands/testing/job/schedule/remove.js +34 -0
- package/dist/commands/testing/job/schedule/remove.js.map +1 -0
- package/dist/commands/testing/job/schedule/set.d.ts +23 -0
- package/dist/commands/testing/job/schedule/set.js +39 -0
- package/dist/commands/testing/job/schedule/set.js.map +1 -0
- package/dist/commands/testing/job/update.d.ts +2 -0
- package/dist/commands/testing/job/update.js +7 -1
- package/dist/commands/testing/job/update.js.map +1 -1
- package/dist/commands/testing/job/upload.d.ts +6 -0
- package/dist/commands/testing/job/upload.js +22 -0
- package/dist/commands/testing/job/upload.js.map +1 -1
- package/dist/commands/testing/live/continue.d.ts +20 -0
- package/dist/commands/testing/live/continue.js +21 -0
- package/dist/commands/testing/live/continue.js.map +1 -0
- package/dist/commands/testing/live/execute.d.ts +30 -0
- package/dist/commands/testing/live/execute.js +43 -0
- package/dist/commands/testing/live/execute.js.map +1 -0
- package/dist/commands/testing/live/history.d.ts +23 -0
- package/dist/commands/testing/live/history.js +35 -0
- package/dist/commands/testing/live/history.js.map +1 -0
- package/dist/commands/testing/live/inspect.d.ts +18 -0
- package/dist/commands/testing/live/inspect.js +30 -0
- package/dist/commands/testing/live/inspect.js.map +1 -0
- package/dist/commands/testing/live/interrupt.d.ts +20 -0
- package/dist/commands/testing/live/interrupt.js +21 -0
- package/dist/commands/testing/live/interrupt.js.map +1 -0
- package/dist/commands/testing/live/recorder.d.ts +23 -0
- package/dist/commands/testing/live/recorder.js +134 -0
- package/dist/commands/testing/live/recorder.js.map +1 -0
- package/dist/commands/testing/live/reports.d.ts +20 -0
- package/dist/commands/testing/live/reports.js +31 -0
- package/dist/commands/testing/live/reports.js.map +1 -0
- package/dist/commands/testing/live/screenshot.d.ts +23 -0
- package/dist/commands/testing/live/screenshot.js +25 -0
- package/dist/commands/testing/live/screenshot.js.map +1 -0
- package/dist/commands/testing/live/set-options.d.ts +27 -0
- package/dist/commands/testing/live/set-options.js +28 -0
- package/dist/commands/testing/live/set-options.js.map +1 -0
- package/dist/commands/testing/live/start.d.ts +29 -0
- package/dist/commands/testing/live/start.js +53 -0
- package/dist/commands/testing/live/start.js.map +1 -0
- package/dist/commands/testing/live/status.d.ts +19 -0
- package/dist/commands/testing/live/status.js +27 -0
- package/dist/commands/testing/live/status.js.map +1 -0
- package/dist/commands/testing/live/stop.d.ts +24 -0
- package/dist/commands/testing/live/stop.js +38 -0
- package/dist/commands/testing/live/stop.js.map +1 -0
- package/dist/commands/testing/live/view.d.ts +16 -0
- package/dist/commands/testing/live/view.js +36 -0
- package/dist/commands/testing/live/view.js.map +1 -0
- package/dist/commands/testing/logs.d.ts +6 -0
- package/dist/commands/testing/logs.js +8 -1
- package/dist/commands/testing/logs.js.map +1 -1
- package/dist/commands/testing/project/create.d.ts +3 -0
- package/dist/commands/testing/project/create.js +17 -1
- package/dist/commands/testing/project/create.js.map +1 -1
- package/dist/commands/testing/project/delete.d.ts +7 -2
- package/dist/commands/testing/project/delete.js +15 -3
- package/dist/commands/testing/project/delete.js.map +1 -1
- package/dist/commands/testing/project/get.js +1 -1
- package/dist/commands/testing/project/get.js.map +1 -1
- package/dist/commands/testing/project/permission/get.d.ts +13 -0
- package/dist/commands/testing/project/permission/get.js +21 -0
- package/dist/commands/testing/project/permission/get.js.map +1 -0
- package/dist/commands/testing/project/permission/list.d.ts +13 -0
- package/dist/commands/testing/project/permission/list.js +21 -0
- package/dist/commands/testing/project/permission/list.js.map +1 -0
- package/dist/commands/testing/project/permission/set.d.ts +19 -0
- package/dist/commands/testing/project/permission/set.js +33 -0
- package/dist/commands/testing/project/permission/set.js.map +1 -0
- package/dist/commands/testing/project/permission/update.d.ts +19 -0
- package/dist/commands/testing/project/permission/update.js +33 -0
- package/dist/commands/testing/project/permission/update.js.map +1 -0
- package/dist/commands/testing/project/update.d.ts +14 -0
- package/dist/commands/testing/project/update.js +28 -0
- package/dist/commands/testing/project/update.js.map +1 -0
- package/dist/commands/testing/robot/create.d.ts +4 -1
- package/dist/commands/testing/robot/create.js +20 -5
- package/dist/commands/testing/robot/create.js.map +1 -1
- package/dist/commands/testing/robot/delete.d.ts +6 -1
- package/dist/commands/testing/robot/delete.js +13 -3
- package/dist/commands/testing/robot/delete.js.map +1 -1
- package/dist/commands/testing/robot/update.d.ts +19 -0
- package/dist/commands/testing/robot/update.js +49 -0
- package/dist/commands/testing/robot/update.js.map +1 -0
- package/dist/commands/testing/run.d.ts +27 -4
- package/dist/commands/testing/run.js +4 -11
- package/dist/commands/testing/run.js.map +1 -1
- package/dist/commands/testing/test/run.d.ts +27 -11
- package/dist/commands/testing/test/run.js +5 -37
- package/dist/commands/testing/test/run.js.map +1 -1
- package/dist/commands/testing/update.d.ts +6 -0
- package/dist/commands/testing/update.js +10 -0
- package/dist/commands/testing/update.js.map +1 -1
- package/dist/commands/testing/user-parameter/create.d.ts +19 -0
- package/dist/commands/testing/user-parameter/create.js +45 -0
- package/dist/commands/testing/user-parameter/create.js.map +1 -0
- package/dist/commands/testing/user-parameter/delete.d.ts +21 -0
- package/dist/commands/testing/user-parameter/delete.js +33 -0
- package/dist/commands/testing/user-parameter/delete.js.map +1 -0
- package/dist/commands/testing/user-parameter/get.d.ts +13 -0
- package/dist/commands/testing/user-parameter/get.js +21 -0
- package/dist/commands/testing/user-parameter/get.js.map +1 -0
- package/dist/commands/testing/user-parameter/list.d.ts +12 -0
- package/dist/commands/testing/user-parameter/list.js +23 -0
- package/dist/commands/testing/user-parameter/list.js.map +1 -0
- package/dist/commands/testing/user-parameter/update.d.ts +23 -0
- package/dist/commands/testing/user-parameter/update.js +45 -0
- package/dist/commands/testing/user-parameter/update.js.map +1 -0
- package/dist/commands/testing/variable/create.d.ts +6 -2
- package/dist/commands/testing/variable/create.js +14 -5
- package/dist/commands/testing/variable/create.js.map +1 -1
- package/dist/commands/testing/variable/delete.d.ts +6 -1
- package/dist/commands/testing/variable/delete.js +13 -3
- package/dist/commands/testing/variable/delete.js.map +1 -1
- package/dist/commands/testing/variable/get.d.ts +13 -0
- package/dist/commands/testing/variable/get.js +25 -0
- package/dist/commands/testing/variable/get.js.map +1 -0
- package/dist/commands/testing/variable/list.d.ts +4 -0
- package/dist/commands/testing/variable/list.js +15 -3
- package/dist/commands/testing/variable/list.js.map +1 -1
- package/dist/commands/testing/variable/update.d.ts +6 -2
- package/dist/commands/testing/variable/update.js +11 -5
- package/dist/commands/testing/variable/update.js.map +1 -1
- package/dist/lib/credential-store.d.ts +3 -0
- package/dist/lib/credential-store.js +16 -0
- package/dist/lib/credential-store.js.map +1 -1
- package/dist/lib/mcp/command-id.js +3 -0
- package/dist/lib/mcp/command-id.js.map +1 -1
- package/dist/lib/mcp/testing-live-tools.d.ts +126 -0
- package/dist/lib/mcp/testing-live-tools.js +215 -0
- package/dist/lib/mcp/testing-live-tools.js.map +1 -0
- package/dist/lib/mcp/testing-tools.d.ts +455 -9
- package/dist/lib/mcp/testing-tools.js +677 -37
- package/dist/lib/mcp/testing-tools.js.map +1 -1
- package/dist/lib/mcp/tools.d.ts +551 -14
- package/dist/lib/testing-config.d.ts +3 -0
- package/dist/lib/testing-config.js +9 -0
- package/dist/lib/testing-config.js.map +1 -1
- package/dist/lib/testing-confirmation.d.ts +14 -0
- package/dist/lib/testing-confirmation.js +17 -0
- package/dist/lib/testing-confirmation.js.map +1 -0
- package/dist/lib/testing-data-command.d.ts +21 -0
- package/dist/lib/testing-data-command.js +49 -0
- package/dist/lib/testing-data-command.js.map +1 -0
- package/dist/lib/testing-data-core.d.ts +22 -0
- package/dist/lib/testing-data-core.js +208 -0
- package/dist/lib/testing-data-core.js.map +1 -0
- package/dist/lib/testing-data-export.d.ts +1 -0
- package/dist/lib/testing-data-export.js +2 -0
- package/dist/lib/testing-data-export.js.map +1 -0
- package/dist/lib/testing-data-import.d.ts +1 -0
- package/dist/lib/testing-data-import.js +2 -0
- package/dist/lib/testing-data-import.js.map +1 -0
- package/dist/lib/testing-data-io.d.ts +21 -0
- package/dist/lib/testing-data-io.js +236 -0
- package/dist/lib/testing-data-io.js.map +1 -0
- package/dist/lib/testing-data-operations.d.ts +36 -0
- package/dist/lib/testing-data-operations.js +91 -0
- package/dist/lib/testing-data-operations.js.map +1 -0
- package/dist/lib/testing-data-types.d.ts +41 -0
- package/dist/lib/testing-data-types.js +3 -0
- package/dist/lib/testing-data-types.js.map +1 -0
- package/dist/lib/testing-flags.d.ts +62 -1
- package/dist/lib/testing-flags.js +177 -1
- package/dist/lib/testing-flags.js.map +1 -1
- package/dist/lib/testing-gateway.d.ts +17 -3
- package/dist/lib/testing-gateway.js +175 -45
- package/dist/lib/testing-gateway.js.map +1 -1
- package/dist/lib/testing-live-command.d.ts +24 -0
- package/dist/lib/testing-live-command.js +56 -0
- package/dist/lib/testing-live-command.js.map +1 -0
- package/dist/lib/testing-live-endpoints.d.ts +14 -0
- package/dist/lib/testing-live-endpoints.js +34 -0
- package/dist/lib/testing-live-endpoints.js.map +1 -0
- package/dist/lib/testing-live-history.d.ts +11 -0
- package/dist/lib/testing-live-history.js +96 -0
- package/dist/lib/testing-live-history.js.map +1 -0
- package/dist/lib/testing-live-operations.d.ts +118 -0
- package/dist/lib/testing-live-operations.js +676 -0
- package/dist/lib/testing-live-operations.js.map +1 -0
- package/dist/lib/testing-live-recorder.d.ts +14 -0
- package/dist/lib/testing-live-recorder.js +122 -0
- package/dist/lib/testing-live-recorder.js.map +1 -0
- package/dist/lib/testing-live-robot.d.ts +16 -0
- package/dist/lib/testing-live-robot.js +158 -0
- package/dist/lib/testing-live-robot.js.map +1 -0
- package/dist/lib/testing-live-state.d.ts +4 -0
- package/dist/lib/testing-live-state.js +90 -0
- package/dist/lib/testing-live-state.js.map +1 -0
- package/dist/lib/testing-live-types.d.ts +92 -0
- package/dist/lib/testing-live-types.js +2 -0
- package/dist/lib/testing-live-types.js.map +1 -0
- package/dist/lib/testing-operations.d.ts +157 -5
- package/dist/lib/testing-operations.js +829 -66
- package/dist/lib/testing-operations.js.map +1 -1
- package/dist/lib/testing-run-command.d.ts +25 -0
- package/dist/lib/testing-run-command.js +94 -0
- package/dist/lib/testing-run-command.js.map +1 -0
- package/dist/lib/testing-sanitization.d.ts +11 -0
- package/dist/lib/testing-sanitization.js +135 -0
- package/dist/lib/testing-sanitization.js.map +1 -0
- package/dist/lib/testing-schedule.d.ts +23 -0
- package/dist/lib/testing-schedule.js +48 -0
- package/dist/lib/testing-schedule.js.map +1 -0
- package/dist/lib/testing-secret-input.d.ts +12 -0
- package/dist/lib/testing-secret-input.js +56 -0
- package/dist/lib/testing-secret-input.js.map +1 -0
- package/dist/lib/testing-session.d.ts +8 -0
- package/dist/lib/testing-session.js +82 -0
- package/dist/lib/testing-session.js.map +1 -0
- package/dist/lib/testing-types.d.ts +143 -13
- package/dist/lib/testing-types.js +110 -5
- package/dist/lib/testing-types.js.map +1 -1
- package/dist/lib/testing-watch.d.ts +4 -0
- package/dist/lib/testing-watch.js +45 -0
- package/dist/lib/testing-watch.js.map +1 -0
- package/oclif.manifest.json +8354 -3760
- package/package.json +12 -1
- package/templates/skills/agentia-testing/SKILL.md +9 -6
- package/templates/skills/agentia-testing/references/tests.md +70 -36
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
2
|
+
export default class TestingLiveHistory extends AgentiaCommand {
|
|
3
|
+
static args: {
|
|
4
|
+
'job-id': import("@oclif/core/interfaces").Arg<number | undefined, {
|
|
5
|
+
max?: number;
|
|
6
|
+
min?: number;
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
static description: string;
|
|
10
|
+
static examples: string[];
|
|
11
|
+
static flags: {
|
|
12
|
+
limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
status: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
project: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
'session-id': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
};
|
|
17
|
+
run(): Promise<{
|
|
18
|
+
count: number;
|
|
19
|
+
executions: import("../../../lib/testing-live-types.js").TestingLiveHistoryRecord[];
|
|
20
|
+
jobId: number;
|
|
21
|
+
projectId: number;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
3
|
+
import { testingLiveCommonFlags } from '../../../lib/testing-live-command.js';
|
|
4
|
+
import { getTestingLiveHistory } from '../../../lib/testing-live-operations.js';
|
|
5
|
+
import { readTestingLiveState } from '../../../lib/testing-live-state.js';
|
|
6
|
+
export default class TestingLiveHistory extends AgentiaCommand {
|
|
7
|
+
static args = { 'job-id': Args.integer({ description: 'CRT job/test ID; defaults to the active session.', required: false }) };
|
|
8
|
+
static description = 'Read bounded sanitized local CRT live execution history';
|
|
9
|
+
static examples = ['<%= config.bin %> <%= command.id %> <job-id> --project <project-id> --limit 20 --json'];
|
|
10
|
+
static flags = {
|
|
11
|
+
...testingLiveCommonFlags,
|
|
12
|
+
limit: Flags.integer({ default: 10, description: 'Maximum records to return.', max: 500, min: 1 }),
|
|
13
|
+
status: Flags.option({ description: 'Execution status filter.', options: ['completed', 'failed', 'recorded'] })(),
|
|
14
|
+
};
|
|
15
|
+
async run() {
|
|
16
|
+
const { args, flags } = await this.parse(TestingLiveHistory);
|
|
17
|
+
const active = args['job-id'] === undefined ? await readTestingLiveState() : undefined;
|
|
18
|
+
const jobId = args['job-id'] ?? active?.jobId;
|
|
19
|
+
if (jobId === undefined || (active !== undefined && active.projectId !== flags.project)) {
|
|
20
|
+
throw new Error('Provide a job ID or start a live session for this project.');
|
|
21
|
+
}
|
|
22
|
+
const result = getTestingLiveHistory({
|
|
23
|
+
jobId,
|
|
24
|
+
limit: flags.limit,
|
|
25
|
+
projectId: flags.project,
|
|
26
|
+
status: flags.status,
|
|
27
|
+
});
|
|
28
|
+
this.display(() => {
|
|
29
|
+
for (const execution of result.executions)
|
|
30
|
+
this.log(`${execution.startedAt} [${execution.status}] ${execution.lines.join(' | ')}`);
|
|
31
|
+
});
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../../../src/commands/testing/live/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAC,cAAc,EAAC,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAC,sBAAsB,EAAC,MAAM,sCAAsC,CAAA;AAC3E,OAAO,EAAC,qBAAqB,EAAC,MAAM,yCAAyC,CAAA;AAC7E,OAAO,EAAC,oBAAoB,EAAC,MAAM,oCAAoC,CAAA;AAEvE,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,cAAc;IAC5D,MAAM,CAAU,IAAI,GAAG,EAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAC,WAAW,EAAE,kDAAkD,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,EAAC,CAAA;IACnI,MAAM,CAAU,WAAW,GAAG,yDAAyD,CAAA;IACvF,MAAM,CAAU,QAAQ,GAAG,CAAC,uFAAuF,CAAC,CAAA;IACpH,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,sBAAsB;QACzB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAC,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,4BAA4B,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAC,CAAC;QAChG,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,0BAA0B,EAAE,OAAO,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAC,CAAC,EAAE;KAChH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;QACtF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,KAAK,CAAA;QAC7C,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACxF,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;QAC/E,CAAC;QAED,MAAM,MAAM,GAAG,qBAAqB,CAAC;YACnC,KAAK;YACL,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,KAAK,CAAC,OAAO;YACxB,MAAM,EAAE,KAAK,CAAC,MAAyD;SACxE,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAChB,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACpI,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
2
|
+
export default class TestingLiveInspect extends AgentiaCommand {
|
|
3
|
+
static args: {
|
|
4
|
+
'job-id': import("@oclif/core/interfaces").Arg<number | undefined, {
|
|
5
|
+
max?: number;
|
|
6
|
+
min?: number;
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
static description: string;
|
|
10
|
+
static examples: string[];
|
|
11
|
+
static flags: {
|
|
12
|
+
dom: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
project: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
'session-id': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
};
|
|
17
|
+
run(): Promise<Record<string, unknown>>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
3
|
+
import { testingLiveCommonFlags } from '../../../lib/testing-live-command.js';
|
|
4
|
+
import { inspectTestingLive } from '../../../lib/testing-live-operations.js';
|
|
5
|
+
export default class TestingLiveInspect extends AgentiaCommand {
|
|
6
|
+
static args = { 'job-id': Args.integer({ description: 'Optional CRT job/test ID guard.', required: false }) };
|
|
7
|
+
static description = 'Inspect bounded, sanitized page state from an active CRT live session';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> <%= command.id %> --project <project-id> --json',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> --project <project-id> --dom --output page.html',
|
|
11
|
+
];
|
|
12
|
+
static flags = {
|
|
13
|
+
...testingLiveCommonFlags,
|
|
14
|
+
dom: Flags.boolean({ default: false, description: 'Fetch raw page DOM; requires --output.' }),
|
|
15
|
+
output: Flags.string({ dependsOn: ['dom'], description: 'Explicit file path for raw DOM.' }),
|
|
16
|
+
};
|
|
17
|
+
async run() {
|
|
18
|
+
const { args, flags } = await this.parse(TestingLiveInspect);
|
|
19
|
+
const result = await this.withSpinner('Inspecting CRT live session', () => inspectTestingLive({
|
|
20
|
+
dom: flags.dom,
|
|
21
|
+
jobId: args['job-id'],
|
|
22
|
+
output: flags.output,
|
|
23
|
+
projectId: flags.project,
|
|
24
|
+
sessionId: flags['session-id'],
|
|
25
|
+
}));
|
|
26
|
+
this.display(() => this.log(flags.dom ? `DOM written to ${String(result.path)}.` : JSON.stringify(result, null, 2)));
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=inspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../../src/commands/testing/live/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAC,cAAc,EAAC,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAC,sBAAsB,EAAC,MAAM,sCAAsC,CAAA;AAC3E,OAAO,EAAC,kBAAkB,EAAC,MAAM,yCAAyC,CAAA;AAE1E,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,cAAc;IAC5D,MAAM,CAAU,IAAI,GAAG,EAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAC,WAAW,EAAE,iCAAiC,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,EAAC,CAAA;IAClH,MAAM,CAAU,WAAW,GAAG,uEAAuE,CAAA;IACrG,MAAM,CAAU,QAAQ,GAAG;QACzB,mEAAmE;QACnE,qFAAqF;KACtF,CAAA;IACD,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,sBAAsB;QACzB,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,EAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,wCAAwC,EAAC,CAAC;QAC3F,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,iCAAiC,EAAC,CAAC;KAC3F,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAC1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,6BAA6B,EAAE,GAAG,EAAE,CACxE,kBAAkB,CAAC;YACjB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;YACrB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,OAAO;YACxB,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;SAC/B,CAAC,CACH,CAAA;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACpH,OAAO,MAAM,CAAA;IACf,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
2
|
+
export default class TestingLiveInterrupt extends AgentiaCommand {
|
|
3
|
+
static args: {
|
|
4
|
+
'job-id': import("@oclif/core/interfaces").Arg<number | undefined, {
|
|
5
|
+
max?: number;
|
|
6
|
+
min?: number;
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
static description: string;
|
|
10
|
+
static examples: string[];
|
|
11
|
+
static flags: {
|
|
12
|
+
project: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
'session-id': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<{
|
|
16
|
+
action: string;
|
|
17
|
+
message: string;
|
|
18
|
+
sessionId: number;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Args } from '@oclif/core';
|
|
2
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
3
|
+
import { testingLiveCommonFlags } from '../../../lib/testing-live-command.js';
|
|
4
|
+
import { controlTestingLive } from '../../../lib/testing-live-operations.js';
|
|
5
|
+
export default class TestingLiveInterrupt extends AgentiaCommand {
|
|
6
|
+
static args = { 'job-id': Args.integer({ description: 'Optional CRT job/test ID guard.', required: false }) };
|
|
7
|
+
static description = 'Interrupt Robot execution in the active CRT live session';
|
|
8
|
+
static examples = ['<%= config.bin %> <%= command.id %> --project <project-id>'];
|
|
9
|
+
static flags = testingLiveCommonFlags;
|
|
10
|
+
async run() {
|
|
11
|
+
const { args, flags } = await this.parse(TestingLiveInterrupt);
|
|
12
|
+
const result = await controlTestingLive('interrupt', {
|
|
13
|
+
jobId: args['job-id'],
|
|
14
|
+
projectId: flags.project,
|
|
15
|
+
sessionId: flags['session-id'],
|
|
16
|
+
});
|
|
17
|
+
this.display(() => this.log(result.message));
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=interrupt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interrupt.js","sourceRoot":"","sources":["../../../../src/commands/testing/live/interrupt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAC,cAAc,EAAC,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAC,sBAAsB,EAAC,MAAM,sCAAsC,CAAA;AAC3E,OAAO,EAAC,kBAAkB,EAAC,MAAM,yCAAyC,CAAA;AAE1E,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,cAAc;IAC9D,MAAM,CAAU,IAAI,GAAG,EAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAC,WAAW,EAAE,iCAAiC,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,EAAC,CAAA;IAClH,MAAM,CAAU,WAAW,GAAG,0DAA0D,CAAA;IACxF,MAAM,CAAU,QAAQ,GAAG,CAAC,4DAA4D,CAAC,CAAA;IACzF,MAAM,CAAU,KAAK,GAAG,sBAAsB,CAAA;IAEvC,KAAK,CAAC,GAAG;QACd,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE;YACnD,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;YACrB,SAAS,EAAE,KAAK,CAAC,OAAO;YACxB,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;SAC/B,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QAC5C,OAAO,MAAM,CAAA;IACf,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
2
|
+
export default class TestingLiveRecorder extends AgentiaCommand {
|
|
3
|
+
static args: {
|
|
4
|
+
'job-id': import("@oclif/core/interfaces").Arg<number | undefined, {
|
|
5
|
+
max?: number;
|
|
6
|
+
min?: number;
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
static description: string;
|
|
10
|
+
static enableJsonFlag: boolean;
|
|
11
|
+
static examples: string[];
|
|
12
|
+
static flags: {
|
|
13
|
+
debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
'no-enable': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
project: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
'session-id': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
};
|
|
19
|
+
run(): Promise<{
|
|
20
|
+
recorded: number;
|
|
21
|
+
sessionId: number;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/* eslint-disable no-bitwise -- Node secure append flags are a bitmask. */
|
|
2
|
+
import { Args, Flags } from '@oclif/core';
|
|
3
|
+
import { randomUUID } from 'node:crypto';
|
|
4
|
+
import { closeSync, constants, mkdirSync, openSync, writeSync } from 'node:fs';
|
|
5
|
+
import { dirname, extname, resolve } from 'node:path';
|
|
6
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
7
|
+
import { resolveTestingCredentials } from '../../../lib/testing-config.js';
|
|
8
|
+
import { appendTestingLiveHistory } from '../../../lib/testing-live-history.js';
|
|
9
|
+
import { loadTestingLiveConnection, setTestingLiveOptions } from '../../../lib/testing-live-operations.js';
|
|
10
|
+
import { acquireTestingLiveRecorderLock, connectTestingLiveWebSocket, parseTestingLiveRecorderFrame, robotLinesFromRecorderEvent, } from '../../../lib/testing-live-recorder.js';
|
|
11
|
+
export default class TestingLiveRecorder extends AgentiaCommand {
|
|
12
|
+
static args = { 'job-id': Args.integer({ description: 'Optional CRT job/test ID guard.', required: false }) };
|
|
13
|
+
static description = 'Record CRT live interactions as bounded Robot Framework lines';
|
|
14
|
+
static enableJsonFlag = false;
|
|
15
|
+
static examples = [
|
|
16
|
+
'<%= config.bin %> <%= command.id %> --project <project-id> --output recorded.robot',
|
|
17
|
+
];
|
|
18
|
+
static flags = {
|
|
19
|
+
debug: Flags.boolean({ default: false, description: 'Print frame sizes and event types without frame bodies.' }),
|
|
20
|
+
'no-enable': Flags.boolean({ default: false, description: 'Do not manage the server recorder toggle.' }),
|
|
21
|
+
output: Flags.string({ char: 'o', description: 'Explicit .robot file to append recorded keywords to.' }),
|
|
22
|
+
project: Flags.integer({ char: 'p', description: 'CRT project ID.', required: true }),
|
|
23
|
+
'session-id': Flags.integer({ description: 'Guard that must match the active CRT live session.', min: 1 }),
|
|
24
|
+
};
|
|
25
|
+
async run() {
|
|
26
|
+
const { args, flags } = await this.parse(TestingLiveRecorder);
|
|
27
|
+
const connection = await loadTestingLiveConnection({
|
|
28
|
+
jobId: args['job-id'],
|
|
29
|
+
projectId: flags.project,
|
|
30
|
+
sessionId: flags['session-id'],
|
|
31
|
+
});
|
|
32
|
+
const lock = acquireTestingLiveRecorderLock(connection.metadata.sessionId);
|
|
33
|
+
const descriptor = flags.output === undefined ? undefined : openRobotOutput(flags.output);
|
|
34
|
+
let recorded = 0;
|
|
35
|
+
try {
|
|
36
|
+
if (!flags['no-enable']) {
|
|
37
|
+
await setTestingLiveOptions({
|
|
38
|
+
jobId: connection.metadata.jobId,
|
|
39
|
+
projectId: connection.metadata.projectId,
|
|
40
|
+
recorder: emptyOptions(true),
|
|
41
|
+
sessionId: connection.metadata.sessionId,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
const socket = connectTestingLiveWebSocket(connection.metadata.sessionPath, resolveTestingCredentials().domain, connection.session);
|
|
45
|
+
await new Promise((resolvePromise, reject) => {
|
|
46
|
+
const heartbeat = setInterval(() => {
|
|
47
|
+
if (socket.readyState === socket.OPEN)
|
|
48
|
+
socket.send('true');
|
|
49
|
+
}, 3000);
|
|
50
|
+
const stop = () => socket.close();
|
|
51
|
+
process.once('SIGINT', stop);
|
|
52
|
+
socket.once('error', () => reject(new Error('CRT live recorder connection failed.')));
|
|
53
|
+
socket.once('open', () => this.log('Recording CRT interactions. Press Ctrl-C to stop.'));
|
|
54
|
+
socket.on('message', (frame) => {
|
|
55
|
+
try {
|
|
56
|
+
const event = parseTestingLiveRecorderFrame(frame);
|
|
57
|
+
if (event === undefined)
|
|
58
|
+
return;
|
|
59
|
+
if (flags.debug) {
|
|
60
|
+
const type = typeof event.type === 'string' && /^[a-z-]{1,32}$/u.test(event.type)
|
|
61
|
+
? event.type
|
|
62
|
+
: 'unknown';
|
|
63
|
+
this.warn(`Recorder event ${type} (${Buffer.byteLength(frame.toString())} bytes).`);
|
|
64
|
+
}
|
|
65
|
+
const lines = robotLinesFromRecorderEvent(event);
|
|
66
|
+
if (lines.length === 0)
|
|
67
|
+
return;
|
|
68
|
+
for (const line of lines)
|
|
69
|
+
this.log(line);
|
|
70
|
+
if (descriptor !== undefined) {
|
|
71
|
+
writeSync(descriptor, `${lines.join('\n')}\n\n`, undefined, 'utf8');
|
|
72
|
+
}
|
|
73
|
+
const now = new Date().toISOString();
|
|
74
|
+
appendTestingLiveHistory({
|
|
75
|
+
completedAt: now,
|
|
76
|
+
id: randomUUID(),
|
|
77
|
+
jobId: connection.metadata.jobId,
|
|
78
|
+
lines,
|
|
79
|
+
projectId: connection.metadata.projectId,
|
|
80
|
+
startedAt: now,
|
|
81
|
+
status: 'recorded',
|
|
82
|
+
});
|
|
83
|
+
recorded += lines.length;
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
this.warn(error.message);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
socket.once('close', () => resolvePromise());
|
|
90
|
+
socket.once('error', () => resolvePromise());
|
|
91
|
+
socket.once('close', cleanup);
|
|
92
|
+
socket.once('error', cleanup);
|
|
93
|
+
function cleanup() {
|
|
94
|
+
clearInterval(heartbeat);
|
|
95
|
+
process.removeListener('SIGINT', stop);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
if (descriptor !== undefined)
|
|
101
|
+
closeSync(descriptor);
|
|
102
|
+
lock.release();
|
|
103
|
+
if (!flags['no-enable']) {
|
|
104
|
+
await setTestingLiveOptions({
|
|
105
|
+
jobId: connection.metadata.jobId,
|
|
106
|
+
projectId: connection.metadata.projectId,
|
|
107
|
+
recorder: emptyOptions(false),
|
|
108
|
+
sessionId: connection.metadata.sessionId,
|
|
109
|
+
}).catch(() => { });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return { recorded, sessionId: connection.metadata.sessionId };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function emptyOptions(enabled) {
|
|
116
|
+
return {
|
|
117
|
+
enabled,
|
|
118
|
+
enableHealingContext: false,
|
|
119
|
+
enableHoverText: false,
|
|
120
|
+
enableScrollText: false,
|
|
121
|
+
enableSystemState: false,
|
|
122
|
+
enableVerifyText: false,
|
|
123
|
+
preferTableKeywords: false,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function openRobotOutput(path) {
|
|
127
|
+
if (path.includes('\0') || extname(path).toLowerCase() !== '.robot') {
|
|
128
|
+
throw new Error('CRT recorder output must be an explicit .robot path.');
|
|
129
|
+
}
|
|
130
|
+
const target = resolve(path);
|
|
131
|
+
mkdirSync(dirname(target), { mode: 0o700, recursive: true });
|
|
132
|
+
return openSync(target, constants.O_APPEND | constants.O_CREAT | constants.O_NOFOLLOW | constants.O_WRONLY, 0o600);
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=recorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorder.js","sourceRoot":"","sources":["../../../../src/commands/testing/live/recorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
2
|
+
export default class TestingLiveReports extends AgentiaCommand {
|
|
3
|
+
static args: {
|
|
4
|
+
'job-id': import("@oclif/core/interfaces").Arg<number | undefined, {
|
|
5
|
+
max?: number;
|
|
6
|
+
min?: number;
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
static description: string;
|
|
10
|
+
static examples: string[];
|
|
11
|
+
static flags: {
|
|
12
|
+
'output-dir': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
project: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
'session-id': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
};
|
|
16
|
+
run(): Promise<{
|
|
17
|
+
files: import("../../../lib/testing-live-types.js").TestingLiveReportMetadata[];
|
|
18
|
+
sessionId: number;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
3
|
+
import { testingLiveCommonFlags } from '../../../lib/testing-live-command.js';
|
|
4
|
+
import { getTestingLiveReports } from '../../../lib/testing-live-operations.js';
|
|
5
|
+
export default class TestingLiveReports extends AgentiaCommand {
|
|
6
|
+
static args = { 'job-id': Args.integer({ description: 'Optional CRT job/test ID guard.', required: false }) };
|
|
7
|
+
static description = 'List or save bounded report artifacts from an active CRT live session';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> <%= command.id %> --project <project-id>',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> --project <project-id> --output-dir ./reports',
|
|
11
|
+
];
|
|
12
|
+
static flags = {
|
|
13
|
+
...testingLiveCommonFlags,
|
|
14
|
+
'output-dir': Flags.string({ description: 'Explicit directory for log.html, report.html, and output.xml.' }),
|
|
15
|
+
};
|
|
16
|
+
async run() {
|
|
17
|
+
const { args, flags } = await this.parse(TestingLiveReports);
|
|
18
|
+
const result = await this.withSpinner('Reading CRT live reports', () => getTestingLiveReports({
|
|
19
|
+
jobId: args['job-id'],
|
|
20
|
+
outputDir: flags['output-dir'],
|
|
21
|
+
projectId: flags.project,
|
|
22
|
+
sessionId: flags['session-id'],
|
|
23
|
+
}));
|
|
24
|
+
this.display(() => {
|
|
25
|
+
for (const file of result.files)
|
|
26
|
+
this.log(`${file.name}: ${file.bytes} bytes${file.path === undefined ? '' : ` -> ${file.path}`}`);
|
|
27
|
+
});
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=reports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reports.js","sourceRoot":"","sources":["../../../../src/commands/testing/live/reports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAC,cAAc,EAAC,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAC,sBAAsB,EAAC,MAAM,sCAAsC,CAAA;AAC3E,OAAO,EAAC,qBAAqB,EAAC,MAAM,yCAAyC,CAAA;AAE7E,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,cAAc;IAC5D,MAAM,CAAU,IAAI,GAAG,EAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAC,WAAW,EAAE,iCAAiC,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,EAAC,CAAA;IAClH,MAAM,CAAU,WAAW,GAAG,uEAAuE,CAAA;IACrG,MAAM,CAAU,QAAQ,GAAG;QACzB,4DAA4D;QAC5D,mFAAmF;KACpF,CAAA;IACD,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,sBAAsB;QACzB,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,+DAA+D,EAAC,CAAC;KAC3G,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAC1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE,GAAG,EAAE,CACrE,qBAAqB,CAAC;YACpB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;YACrB,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;YAC9B,SAAS,EAAE,KAAK,CAAC,OAAO;YACxB,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;SAC/B,CAAC,CACH,CAAA;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAChB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACpI,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
2
|
+
export default class TestingLiveScreenshot extends AgentiaCommand {
|
|
3
|
+
static args: {
|
|
4
|
+
'job-id': import("@oclif/core/interfaces").Arg<number | undefined, {
|
|
5
|
+
max?: number;
|
|
6
|
+
min?: number;
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
static description: string;
|
|
10
|
+
static examples: string[];
|
|
11
|
+
static flags: {
|
|
12
|
+
output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
project: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
'session-id': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
};
|
|
16
|
+
run(): Promise<{
|
|
17
|
+
bytes: number;
|
|
18
|
+
path: string;
|
|
19
|
+
sessionId: number;
|
|
20
|
+
timestamp?: string;
|
|
21
|
+
url?: string;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
3
|
+
import { testingLiveCommonFlags } from '../../../lib/testing-live-command.js';
|
|
4
|
+
import { saveTestingLiveScreenshot } from '../../../lib/testing-live-operations.js';
|
|
5
|
+
export default class TestingLiveScreenshot extends AgentiaCommand {
|
|
6
|
+
static args = { 'job-id': Args.integer({ description: 'Optional CRT job/test ID guard.', required: false }) };
|
|
7
|
+
static description = 'Save a bounded CRT live browser screenshot to an explicit file';
|
|
8
|
+
static examples = ['<%= config.bin %> <%= command.id %> --project <project-id> --output screenshot.png'];
|
|
9
|
+
static flags = {
|
|
10
|
+
...testingLiveCommonFlags,
|
|
11
|
+
output: Flags.string({ char: 'o', description: 'Explicit screenshot output path.', required: true }),
|
|
12
|
+
};
|
|
13
|
+
async run() {
|
|
14
|
+
const { args, flags } = await this.parse(TestingLiveScreenshot);
|
|
15
|
+
const result = await this.withSpinner('Saving CRT live screenshot', () => saveTestingLiveScreenshot({
|
|
16
|
+
jobId: args['job-id'],
|
|
17
|
+
output: flags.output,
|
|
18
|
+
projectId: flags.project,
|
|
19
|
+
sessionId: flags['session-id'],
|
|
20
|
+
}));
|
|
21
|
+
this.display(() => this.log(`Wrote ${result.bytes} bytes to ${result.path}.`));
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=screenshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../../src/commands/testing/live/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAC,cAAc,EAAC,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAC,sBAAsB,EAAC,MAAM,sCAAsC,CAAA;AAC3E,OAAO,EAAC,yBAAyB,EAAC,MAAM,yCAAyC,CAAA;AAEjF,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,cAAc;IAC/D,MAAM,CAAU,IAAI,GAAG,EAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAC,WAAW,EAAE,iCAAiC,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,EAAC,CAAA;IAClH,MAAM,CAAU,WAAW,GAAG,gEAAgE,CAAA;IAC9F,MAAM,CAAU,QAAQ,GAAG,CAAC,oFAAoF,CAAC,CAAA;IACjH,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,sBAAsB;QACzB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,kCAAkC,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;KACnG,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;QAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,4BAA4B,EAAE,GAAG,EAAE,CACvE,yBAAyB,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;YACrB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,OAAO;YACxB,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;SAC/B,CAAC,CACH,CAAA;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,KAAK,aAAa,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;QAC9E,OAAO,MAAM,CAAA;IACf,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
2
|
+
export default class TestingLiveSetOptions extends AgentiaCommand {
|
|
3
|
+
static args: {
|
|
4
|
+
'job-id': import("@oclif/core/interfaces").Arg<number | undefined, {
|
|
5
|
+
max?: number;
|
|
6
|
+
min?: number;
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
static description: string;
|
|
10
|
+
static examples: string[];
|
|
11
|
+
static flags: {
|
|
12
|
+
enable: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
'healing-context': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
'hover-text': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
'scroll-text': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
'system-state': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
'table-keywords': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
|
+
'verify-text': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
19
|
+
project: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
|
+
'session-id': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
21
|
+
};
|
|
22
|
+
run(): Promise<{
|
|
23
|
+
recorder: import("../../../lib/testing-live-types.js").TestingLiveRecorderOptions;
|
|
24
|
+
sessionId: number;
|
|
25
|
+
status: number;
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Args } from '@oclif/core';
|
|
2
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
3
|
+
import { testingLiveCommonFlags, testingLiveRecorderOptionFlags, testingLiveRecorderOptions, } from '../../../lib/testing-live-command.js';
|
|
4
|
+
import { setTestingLiveOptions } from '../../../lib/testing-live-operations.js';
|
|
5
|
+
export default class TestingLiveSetOptions extends AgentiaCommand {
|
|
6
|
+
static args = { 'job-id': Args.integer({ description: 'Optional CRT job/test ID guard.', required: false }) };
|
|
7
|
+
static description = 'Set the complete validated CRT live recorder option block';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> <%= command.id %> --project <project-id> --enable --scroll-text --table-keywords',
|
|
10
|
+
];
|
|
11
|
+
static flags = { ...testingLiveCommonFlags, ...testingLiveRecorderOptionFlags };
|
|
12
|
+
async run() {
|
|
13
|
+
const { args, flags } = await this.parse(TestingLiveSetOptions);
|
|
14
|
+
const optionNames = ['enable', 'healing-context', 'hover-text', 'scroll-text', 'system-state', 'table-keywords', 'verify-text'];
|
|
15
|
+
if (!optionNames.some((name) => flags[name] !== undefined)) {
|
|
16
|
+
throw new Error('Provide at least one recorder option; unspecified options are set to false.');
|
|
17
|
+
}
|
|
18
|
+
const result = await setTestingLiveOptions({
|
|
19
|
+
jobId: args['job-id'],
|
|
20
|
+
projectId: flags.project,
|
|
21
|
+
recorder: testingLiveRecorderOptions(flags),
|
|
22
|
+
sessionId: flags['session-id'],
|
|
23
|
+
});
|
|
24
|
+
this.display(() => this.log('CRT live recorder options updated.'));
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=set-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-options.js","sourceRoot":"","sources":["../../../../src/commands/testing/live/set-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAC,cAAc,EAAC,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAC,qBAAqB,EAAC,MAAM,yCAAyC,CAAA;AAE7E,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,cAAc;IAC/D,MAAM,CAAU,IAAI,GAAG,EAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAC,WAAW,EAAE,iCAAiC,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,EAAC,CAAA;IAClH,MAAM,CAAU,WAAW,GAAG,2DAA2D,CAAA;IACzF,MAAM,CAAU,QAAQ,GAAG;QACzB,oGAAoG;KACrG,CAAA;IACD,MAAM,CAAU,KAAK,GAAG,EAAC,GAAG,sBAAsB,EAAE,GAAG,8BAA8B,EAAC,CAAA;IAE/E,KAAK,CAAC,GAAG;QACd,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;QAC7D,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,CAAU,CAAA;QACxI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAA;QAChG,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;YACzC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;YACrB,SAAS,EAAE,KAAK,CAAC,OAAO;YACxB,QAAQ,EAAE,0BAA0B,CAAC,KAAK,CAAC;YAC3C,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;SAC/B,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAA;QAClE,OAAO,MAAM,CAAA;IACf,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
2
|
+
export default class TestingLiveStart extends AgentiaCommand {
|
|
3
|
+
static args: {
|
|
4
|
+
'job-id': import("@oclif/core/interfaces").Arg<number, {
|
|
5
|
+
max?: number;
|
|
6
|
+
min?: number;
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
static description: string;
|
|
10
|
+
static examples: string[];
|
|
11
|
+
static flags: {
|
|
12
|
+
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
file: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
'jap-ime': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
library: import("@oclif/core/interfaces").OptionFlag<"QWeb" | "QForce" | "QMobile", import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
'no-bootstrap': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
'no-browser': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
|
+
'poll-interval': import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
screen: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
|
+
section: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
21
|
+
'section-index': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
22
|
+
'session-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
23
|
+
timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
24
|
+
viewport: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
25
|
+
project: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
26
|
+
'session-id': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
27
|
+
};
|
|
28
|
+
run(): Promise<import("../../../lib/testing-live-types.js").TestingLiveMetadata>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import { AgentiaCommand } from '../../../lib/agentia-command.js';
|
|
3
|
+
import { parseTestingLiveScreen, testingLiveCommonFlags } from '../../../lib/testing-live-command.js';
|
|
4
|
+
import { startTestingLive } from '../../../lib/testing-live-operations.js';
|
|
5
|
+
import { TESTING_LIVE_LIBRARIES } from '../../../lib/testing-live-types.js';
|
|
6
|
+
export default class TestingLiveStart extends AgentiaCommand {
|
|
7
|
+
static args = {
|
|
8
|
+
'job-id': Args.integer({ description: 'CRT job/test ID.', required: true }),
|
|
9
|
+
};
|
|
10
|
+
static description = 'Start and bootstrap a bounded Copado Robotic Testing live session';
|
|
11
|
+
static examples = [
|
|
12
|
+
'<%= config.bin %> <%= command.id %> <job-id> --project <project-id>',
|
|
13
|
+
'<%= config.bin %> <%= command.id %> <job-id> --project <project-id> --file smoke.robot --section "Login"',
|
|
14
|
+
];
|
|
15
|
+
static flags = {
|
|
16
|
+
...testingLiveCommonFlags,
|
|
17
|
+
description: Flags.string({ description: 'Nonsecret session label.' }),
|
|
18
|
+
file: Flags.string({ description: 'Robot Framework file used to bootstrap a selected test/task.' }),
|
|
19
|
+
'jap-ime': Flags.boolean({ default: false, description: 'Enable Japanese IME in the live environment.' }),
|
|
20
|
+
library: Flags.option({ default: 'QWeb', description: 'Robot Framework library to bootstrap.', options: [...TESTING_LIVE_LIBRARIES] })(),
|
|
21
|
+
'no-bootstrap': Flags.boolean({ default: false, description: 'Create the host without readiness/bootstrap calls.' }),
|
|
22
|
+
'no-browser': Flags.boolean({ default: false, description: 'Do not open Chrome during QWeb/QForce bootstrap.' }),
|
|
23
|
+
'poll-interval': Flags.integer({ default: 3, description: 'Readiness polling interval in seconds.', min: 1 }),
|
|
24
|
+
screen: Flags.string({ description: 'Session screen as WIDTHxHEIGHTxDEPTH.' }),
|
|
25
|
+
section: Flags.string({ description: 'Robot test/task name to bootstrap.' }),
|
|
26
|
+
'section-index': Flags.integer({ description: 'One-based Robot test/task index to bootstrap.', min: 1 }),
|
|
27
|
+
'session-version': Flags.string({ description: 'CRT live environment version.' }),
|
|
28
|
+
timeout: Flags.integer({ default: 120, description: 'Readiness timeout in seconds.', min: 1 }),
|
|
29
|
+
viewport: Flags.string({ description: 'Session viewport as WIDTHxHEIGHT (24-bit depth).' }),
|
|
30
|
+
};
|
|
31
|
+
async run() {
|
|
32
|
+
const { args, flags } = await this.parse(TestingLiveStart);
|
|
33
|
+
const result = await this.withSpinner('Starting CRT live session', () => startTestingLive({
|
|
34
|
+
description: flags.description,
|
|
35
|
+
file: flags.file,
|
|
36
|
+
japIme: flags['jap-ime'],
|
|
37
|
+
jobId: args['job-id'],
|
|
38
|
+
library: flags.library,
|
|
39
|
+
noBootstrap: flags['no-bootstrap'],
|
|
40
|
+
noBrowser: flags['no-browser'],
|
|
41
|
+
pollIntervalMs: flags['poll-interval'] * 1000,
|
|
42
|
+
projectId: flags.project,
|
|
43
|
+
screen: parseTestingLiveScreen(flags.screen, flags.viewport),
|
|
44
|
+
section: flags.section,
|
|
45
|
+
sectionIndex: flags['section-index'],
|
|
46
|
+
sessionVersion: flags['session-version'],
|
|
47
|
+
timeoutMs: flags.timeout * 1000,
|
|
48
|
+
}));
|
|
49
|
+
this.display(() => this.log(`CRT live session ${result.sessionId} is ready for job ${result.jobId}.`));
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/commands/testing/live/start.ts"],"names":[],"mappings":"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"}
|