@copado/agentia-cli 1.1.0 → 1.2.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/CHANGELOG.md +40 -0
- package/README.md +2370 -1850
- package/dist/commands/ai/agent/ask.js +4 -4
- package/dist/commands/ai/agent/chat.js +4 -4
- package/dist/commands/cicd/credential/auth/status.js +38 -0
- package/dist/commands/cicd/credential/auth/web/login.js +54 -0
- package/dist/commands/cicd/credential/list.js +13 -17
- package/dist/commands/cicd/credential/open.js +30 -0
- package/dist/commands/cicd/credential/update.js +9 -12
- package/dist/commands/cicd/environment/auth/status.js +34 -13
- package/dist/commands/cicd/environment/auth/web/login.js +20 -4
- package/dist/commands/cicd/environment/open.js +6 -22
- package/dist/commands/cicd/extension-configuration/get.js +24 -0
- package/dist/commands/cicd/extension-configuration/list.js +49 -0
- package/dist/commands/cicd/extension-configuration/open.js +38 -0
- package/dist/commands/cicd/metadata/content/get.js +1 -1
- package/dist/commands/cicd/metadata/dependency/list.js +2 -2
- package/dist/commands/cicd/metadata/explore.js +81 -0
- package/dist/commands/cicd/metadata/list.js +3 -3
- package/dist/commands/cicd/metadata/refresh/deleted.js +1 -1
- package/dist/commands/cicd/metadata/refresh/run.js +2 -2
- package/dist/commands/cicd/metadata/refresh/status.js +2 -2
- package/dist/commands/cicd/pipeline/automation/activate.js +39 -0
- package/dist/commands/cicd/pipeline/automation/create.js +33 -0
- package/dist/commands/cicd/pipeline/automation/deactivate.js +39 -0
- package/dist/commands/cicd/pipeline/automation/delete.js +45 -0
- package/dist/commands/cicd/pipeline/automation/get.js +32 -0
- package/dist/commands/cicd/pipeline/automation/list.js +38 -0
- package/dist/commands/cicd/pipeline/automation/open.js +38 -0
- package/dist/commands/cicd/pipeline/automation/update.js +38 -0
- package/dist/commands/cicd/pipeline/quality-gate/activate.js +39 -0
- package/dist/commands/cicd/pipeline/quality-gate/create.js +34 -0
- package/dist/commands/cicd/pipeline/quality-gate/deactivate.js +39 -0
- package/dist/commands/cicd/pipeline/quality-gate/delete.js +45 -0
- package/dist/commands/cicd/pipeline/quality-gate/get.js +32 -0
- package/dist/commands/cicd/pipeline/quality-gate/list.js +34 -0
- package/dist/commands/cicd/pipeline/quality-gate/open.js +38 -0
- package/dist/commands/cicd/pipeline/quality-gate/update.js +38 -0
- package/dist/commands/cicd/work/create.js +1 -0
- package/dist/commands/cicd/work/environment-sync.js +8 -7
- package/dist/commands/cicd/work/set.js +6 -4
- package/dist/commands/cicd/work/submit.js +3 -2
- package/dist/commands/cicd/work/update.js +1 -0
- package/dist/commands/plugins/install.js +2 -5
- package/dist/commands/setup/skills/create.js +28 -2
- package/dist/commands/setup/skills/list.js +55 -0
- package/dist/commands/setup/skills/update.js +36 -3
- package/dist/commands/setup.js +3 -3
- package/dist/commands/testing/data-table/create.js +1 -2
- package/dist/commands/testing/data-table/delete.js +1 -2
- package/dist/commands/testing/data-table/export.js +2 -6
- package/dist/commands/testing/data-table/get.js +2 -4
- package/dist/commands/testing/data-table/list.js +1 -2
- package/dist/commands/testing/data-table/update.js +3 -4
- package/dist/commands/testing/job/create.js +26 -22
- package/dist/commands/testing/job/delete.js +2 -2
- package/dist/commands/testing/job/files/download.js +73 -0
- package/dist/commands/testing/job/files/list.js +43 -0
- package/dist/commands/testing/job/{upload.js → files/upload.js} +13 -9
- package/dist/commands/testing/job/get.js +2 -2
- package/dist/commands/testing/job/list.js +1 -1
- package/dist/commands/testing/job/refs.js +4 -4
- package/dist/commands/testing/job/run.js +134 -1
- package/dist/commands/testing/{build → job/runs}/abort.js +10 -8
- package/dist/commands/testing/job/runs/get.js +42 -0
- package/dist/commands/testing/{build → job/runs}/list.js +19 -10
- package/dist/commands/testing/{logs.js → job/runs/logs.js} +9 -6
- package/dist/commands/testing/{build → job/runs}/search.js +9 -7
- package/dist/commands/testing/job/schedule/get.js +5 -11
- package/dist/commands/testing/job/schedule/remove.js +3 -3
- package/dist/commands/testing/job/schedule/set.js +3 -3
- package/dist/commands/testing/job/update.js +22 -65
- package/dist/commands/testing/live/continue.js +5 -10
- package/dist/commands/testing/live/execute.js +3 -3
- package/dist/commands/testing/live/history.js +7 -2
- package/dist/commands/testing/live/inspect.js +5 -4
- package/dist/commands/testing/live/interrupt.js +5 -10
- package/dist/commands/testing/live/recorder.js +23 -115
- package/dist/commands/testing/live/reports.js +3 -3
- package/dist/commands/testing/live/screenshot.js +3 -3
- package/dist/commands/testing/live/set-options.js +11 -4
- package/dist/commands/testing/live/start.js +9 -4
- package/dist/commands/testing/live/status.js +2 -5
- package/dist/commands/testing/live/stop.js +3 -5
- package/dist/commands/testing/live/view.js +2 -2
- package/dist/commands/testing/project/create.js +1 -17
- package/dist/commands/testing/project/get.js +0 -1
- package/dist/commands/testing/project/list.js +2 -2
- package/dist/commands/testing/project/permission/set.js +3 -7
- package/dist/commands/testing/project/permission/update.js +2 -2
- package/dist/commands/testing/robot/create.js +22 -25
- package/dist/commands/testing/robot/get.js +1 -1
- package/dist/commands/testing/robot/list.js +3 -3
- package/dist/commands/testing/robot/update.js +3 -3
- package/dist/commands/testing/user-parameter/create.js +3 -9
- package/dist/commands/testing/user-parameter/update.js +1 -7
- package/dist/commands/testing/variable/create.js +4 -9
- package/dist/commands/testing/variable/list.js +3 -3
- package/dist/commands/testing/variable/update.js +5 -12
- package/dist/help.js +17 -0
- package/dist/lib/ai-types.js +2 -1
- package/dist/lib/claude-mcp-config.js +15 -0
- package/dist/lib/credential-sync.js +1 -2
- package/dist/lib/defaults-store.js +4 -1
- package/dist/lib/environment-auth-status.js +2 -1
- package/dist/lib/environment-auth.js +2 -1
- package/dist/lib/environment-credential-flags.js +3 -1
- package/dist/lib/environment-credential-operations.js +8 -2
- package/dist/lib/environment-types.js +3 -1
- package/dist/lib/extension-configuration-ops.js +4 -0
- package/dist/lib/extension-configuration-sanitize.js +7 -0
- package/dist/lib/extension-configuration-types.js +8 -0
- package/dist/lib/http-proxy.js +13 -0
- package/dist/lib/mcp/ai-tools.js +3 -3
- package/dist/lib/mcp/command-id.js +2 -0
- package/dist/lib/mcp/pipeline-automation-quality-tools.js +452 -0
- package/dist/lib/mcp/server.js +70 -1
- package/dist/lib/mcp/testing-live-tools.js +24 -13
- package/dist/lib/mcp/testing-tools.js +239 -550
- package/dist/lib/mcp/tool-annotations.js +27 -18
- package/dist/lib/mcp/tools.js +117 -32
- package/dist/lib/mcp/work-tools.js +18 -4
- package/dist/lib/metadata-explore.js +8 -0
- package/dist/lib/network-error.js +8 -0
- package/dist/lib/pipeline-automation-flags.js +12 -0
- package/dist/lib/pipeline-automation-ops.js +9 -0
- package/dist/lib/pipeline-automation-types.js +18 -0
- package/dist/lib/pipeline-lifecycle-id.js +3 -0
- package/dist/lib/pipeline-quality-gate-flags.js +12 -0
- package/dist/lib/pipeline-quality-gate-ops.js +9 -0
- package/dist/lib/pipeline-quality-gate-types.js +17 -0
- package/dist/lib/plugin-host/ai.js +2 -1
- package/dist/lib/plugin-skills.js +22 -0
- package/dist/lib/plugin-trust/gate.js +1 -2
- package/dist/lib/project-root.js +3 -1
- package/dist/lib/runtime.js +1 -1
- package/dist/lib/salesforce-tooling-check.js +6 -0
- package/dist/lib/skill-packs.js +7 -0
- package/dist/lib/testing-archive.js +9 -0
- package/dist/lib/testing-data-table.js +39 -0
- package/dist/lib/testing-execution.js +22 -0
- package/dist/lib/testing-flags.js +6 -2
- package/dist/lib/testing-gateway.js +4 -1
- package/dist/lib/testing-live-command.js +3 -1
- package/dist/lib/testing-live-operations.js +7 -1
- package/dist/lib/testing-live-recorder.js +3 -1
- package/dist/lib/testing-live-state.js +8 -1
- package/dist/lib/testing-operations.js +6 -21
- package/dist/lib/testing-sanitization.js +2 -1
- package/dist/lib/testing-secret-input.js +2 -1
- package/dist/lib/testing-types.js +24 -3
- package/dist/lib/work-environment-sync.js +3 -1
- package/dist/lib/work-flags.js +6 -1
- package/dist/lib/work-local-development-flow.js +4 -0
- package/dist/lib/work-submit-wait.js +3 -1
- package/oclif.manifest.json +6609 -6895
- package/package.json +35 -2
- package/templates/skills/agentia-ai/SKILL.md +3 -4
- package/templates/skills/agentia-ai/references/ai-agents.md +2 -2
- package/templates/skills/agentia-cicd/SKILL.md +7 -4
- package/templates/skills/agentia-cicd/references/environments-and-credentials.md +19 -13
- package/templates/skills/agentia-cicd/references/extensions.md +3 -0
- package/templates/skills/agentia-cicd/references/pipelines.md +36 -2
- package/templates/skills/agentia-cicd/references/work.md +20 -5
- package/templates/skills/agentia-metadata/SKILL.md +140 -0
- package/templates/skills/agentia-metadata/references/metadata-explore.md +142 -0
- package/templates/skills/agentia-testing/SKILL.md +3 -3
- package/templates/skills/agentia-testing/references/tests.md +14 -14
- package/dist/commands/testing/build/get.js +0 -38
- package/dist/commands/testing/build/latest.js +0 -40
- package/dist/commands/testing/build/logs.js +0 -47
- package/dist/commands/testing/build/run.js +0 -26
- package/dist/commands/testing/create.js +0 -2
- package/dist/commands/testing/job/download.js +0 -54
- package/dist/commands/testing/job/files.js +0 -34
- package/dist/commands/testing/run.js +0 -26
- package/dist/commands/testing/status.js +0 -45
- package/dist/commands/testing/test/create.js +0 -2
- package/dist/commands/testing/test/logs.js +0 -2
- package/dist/commands/testing/test/run.js +0 -26
- package/dist/commands/testing/test/status.js +0 -2
- package/dist/commands/testing/test/update.js +0 -2
- package/dist/commands/testing/update.js +0 -65
- package/dist/lib/testing-data-command.js +0 -8
- package/dist/lib/testing-data-core.js +0 -20
- package/dist/lib/testing-data-export.js +0 -6
- package/dist/lib/testing-data-import.js +0 -6
- package/dist/lib/testing-data-io.js +0 -12
- package/dist/lib/testing-data-operations.js +0 -10
- package/dist/lib/testing-data-types.js +0 -4
- package/dist/lib/testing-live-endpoints.js +0 -6
- package/dist/lib/testing-live-history.js +0 -7
- package/dist/lib/testing-run-command.js +0 -3
- package/dist/lib/testing-schedule.js +0 -5
- package/dist/lib/testing-session.js +0 -5
- package/dist/lib/testing-watch.js +0 -4
package/dist/lib/mcp/server.js
CHANGED
|
@@ -2,6 +2,8 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
2
2
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
3
|
import { createRequire } from 'node:module';
|
|
4
4
|
import process from 'node:process';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { logVerboseDebug } from '../debug.js';
|
|
5
7
|
import { migrateUserSettingsFromProjectConfig } from '../defaults-store.js';
|
|
6
8
|
import { applyProjectRoot, hasExplicitProjectRoot } from '../project-root.js';
|
|
7
9
|
import { runWithMcpRequestSignal } from './request-context.js';
|
|
@@ -10,15 +12,71 @@ import { withToolAnnotations } from './tool-annotations.js';
|
|
|
10
12
|
import { registerAgentiaMcpTools } from './tools.js';
|
|
11
13
|
const require = createRequire(import.meta.url);
|
|
12
14
|
const packageJson = require('../../../package.json');
|
|
15
|
+
/**
|
|
16
|
+
* SDK ListRootsResultSchema requires every uri to start with file://.
|
|
17
|
+
* Some clients send empty or non-file URIs; accept them here and filter below.
|
|
18
|
+
*/
|
|
19
|
+
const LenientListRootsResultSchema = z
|
|
20
|
+
.object({
|
|
21
|
+
roots: z.array(z.unknown()).optional().default([]),
|
|
22
|
+
})
|
|
23
|
+
.passthrough();
|
|
24
|
+
/** Keep only usable local file roots; empty / non-file:// entries are ignored. */
|
|
25
|
+
export function collectMcpFileRootUris(roots) {
|
|
26
|
+
const uris = [];
|
|
27
|
+
for (const root of roots) {
|
|
28
|
+
if (root === null || typeof root !== 'object')
|
|
29
|
+
continue;
|
|
30
|
+
const { uri } = root;
|
|
31
|
+
if (typeof uri !== 'string')
|
|
32
|
+
continue;
|
|
33
|
+
const trimmed = uri.trim();
|
|
34
|
+
if (trimmed.startsWith('file://'))
|
|
35
|
+
uris.push(trimmed);
|
|
36
|
+
}
|
|
37
|
+
return uris;
|
|
38
|
+
}
|
|
13
39
|
export function createAgentiaMcpServer(lifecycleSignal, projectContextReady = Promise.resolve()) {
|
|
14
40
|
const server = new McpServer({
|
|
15
41
|
name: packageJson.name ?? 'agentia-cli',
|
|
16
42
|
version: packageJson.version,
|
|
17
43
|
});
|
|
44
|
+
installMcpClientCallDebugLogging(server.server);
|
|
18
45
|
wrapMcpToolRegistration(server, lifecycleSignal, projectContextReady);
|
|
19
46
|
registerAgentiaMcpTools(server);
|
|
20
47
|
return server;
|
|
21
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Log every server→client MCP request/notification when DEBUG=verbose.
|
|
51
|
+
* Covers roots/list and any future client calls made through the protocol.
|
|
52
|
+
*/
|
|
53
|
+
export function installMcpClientCallDebugLogging(protocol) {
|
|
54
|
+
const target = protocol;
|
|
55
|
+
const originalRequest = target.request.bind(target);
|
|
56
|
+
target.request = async (request, resultSchema, options) => {
|
|
57
|
+
logVerboseDebug('MCP client request', request);
|
|
58
|
+
try {
|
|
59
|
+
const result = await originalRequest(request, resultSchema, options);
|
|
60
|
+
logVerboseDebug('MCP client response', {
|
|
61
|
+
method: typeof request?.method === 'string' ? request.method : undefined,
|
|
62
|
+
result,
|
|
63
|
+
});
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
logVerboseDebug('MCP client error', {
|
|
68
|
+
error: error instanceof Error ? error.message : String(error),
|
|
69
|
+
method: typeof request?.method === 'string' ? request.method : undefined,
|
|
70
|
+
});
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const originalNotification = target.notification.bind(target);
|
|
75
|
+
target.notification = async (notification, options) => {
|
|
76
|
+
logVerboseDebug('MCP client notification', notification);
|
|
77
|
+
await originalNotification(notification, options);
|
|
78
|
+
};
|
|
79
|
+
}
|
|
22
80
|
function combineSignals(requestSignal, lifecycleSignal) {
|
|
23
81
|
if (requestSignal === undefined || lifecycleSignal === undefined) {
|
|
24
82
|
return { dispose() { }, signal: requestSignal ?? lifecycleSignal };
|
|
@@ -61,8 +119,19 @@ function wrapMcpToolRegistration(server, lifecycleSignal, projectContextReady =
|
|
|
61
119
|
function clientSupportsRoots(server) {
|
|
62
120
|
return (server.server._clientCapabilities?.roots !== undefined);
|
|
63
121
|
}
|
|
122
|
+
async function listMcpFileRootUris(server) {
|
|
123
|
+
try {
|
|
124
|
+
const result = await server.server.request({ method: 'roots/list' }, LenientListRootsResultSchema);
|
|
125
|
+
return collectMcpFileRootUris(result.roots);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
129
|
+
process.stderr.write(`[agentia-mcp] ignoring invalid MCP roots/list response: ${message}\n`);
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
64
133
|
async function applyMcpProjectRoot(server, includeMcpRoots) {
|
|
65
|
-
const rootUris = includeMcpRoots ?
|
|
134
|
+
const rootUris = includeMcpRoots ? await listMcpFileRootUris(server) : undefined;
|
|
66
135
|
applyProjectRoot(undefined, rootUris);
|
|
67
136
|
await migrateUserSettingsFromProjectConfig().catch(() => {
|
|
68
137
|
// Best-effort; MCP tools still fall back to reading legacy project keys.
|
|
@@ -2,15 +2,22 @@ import { mkdtemp } from 'node:fs/promises';
|
|
|
2
2
|
import { tmpdir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { controlTestingLive, executeTestingLive, getTestingLiveHistory, getTestingLiveReports, getTestingLiveStatus, inspectTestingLive, saveTestingLiveScreenshot, setTestingLiveOptions, startTestingLive, stopTestingLive, } from '../testing-live-operations.js';
|
|
5
|
+
import { controlTestingLive, executeTestingLive, getTestingLiveHistory, getTestingLiveReports, getTestingLiveStatus, inspectTestingLive, parseTestingLiveScreen, saveTestingLiveScreenshot, setTestingLiveOptions, startTestingLive, stopTestingLive, } from '../testing-live-operations.js';
|
|
6
6
|
import { TESTING_LIVE_LIBRARIES } from '../testing-live-types.js';
|
|
7
7
|
import { safelyHandleTool } from './result.js';
|
|
8
8
|
async function testingLiveStart(args) {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
throw new Error('Provide screenWidth, screenHeight, and screenDepth together.');
|
|
9
|
+
const hasScreenParts = args.screenDepth !== undefined || args.screenHeight !== undefined || args.screenWidth !== undefined;
|
|
10
|
+
if (hasScreenParts && (args.screen !== undefined || args.viewport !== undefined)) {
|
|
11
|
+
throw new Error('Use either screen/viewport or screenWidth/screenHeight/screenDepth, not both.');
|
|
13
12
|
}
|
|
13
|
+
let screenInput = args.screen;
|
|
14
|
+
if (hasScreenParts) {
|
|
15
|
+
if (args.screenDepth === undefined || args.screenHeight === undefined || args.screenWidth === undefined) {
|
|
16
|
+
throw new Error('Provide screenWidth, screenHeight, and screenDepth together.');
|
|
17
|
+
}
|
|
18
|
+
screenInput = { depth: args.screenDepth, height: args.screenHeight, width: args.screenWidth };
|
|
19
|
+
}
|
|
20
|
+
const screen = parseTestingLiveScreen(screenInput, args.viewport);
|
|
14
21
|
return {
|
|
15
22
|
result: await startTestingLive({
|
|
16
23
|
description: args.description,
|
|
@@ -21,9 +28,7 @@ async function testingLiveStart(args) {
|
|
|
21
28
|
noBrowser: args.noBrowser,
|
|
22
29
|
pollIntervalMs: args.pollIntervalSeconds === undefined ? undefined : args.pollIntervalSeconds * 1000,
|
|
23
30
|
projectId: args.project,
|
|
24
|
-
screen
|
|
25
|
-
? undefined
|
|
26
|
-
: { depth: args.screenDepth, height: args.screenHeight, width: args.screenWidth },
|
|
31
|
+
screen,
|
|
27
32
|
section: args.section,
|
|
28
33
|
sectionIndex: args.sectionIndex,
|
|
29
34
|
sessionVersion: args.sessionVersion,
|
|
@@ -58,7 +63,9 @@ async function testingLiveExecute(args) {
|
|
|
58
63
|
};
|
|
59
64
|
}
|
|
60
65
|
async function testingLiveControl(action, args) {
|
|
61
|
-
return {
|
|
66
|
+
return {
|
|
67
|
+
result: await controlTestingLive(action, { jobId: args.job, projectId: args.project, sessionId: args.sessionId }),
|
|
68
|
+
};
|
|
62
69
|
}
|
|
63
70
|
async function testingLiveInspect(args) {
|
|
64
71
|
return {
|
|
@@ -100,7 +107,9 @@ async function testingLiveSetOptions(args) {
|
|
|
100
107
|
};
|
|
101
108
|
}
|
|
102
109
|
async function testingLiveHistory(args) {
|
|
103
|
-
return {
|
|
110
|
+
return {
|
|
111
|
+
result: getTestingLiveHistory({ jobId: args.job, limit: args.limit, projectId: args.project, status: args.status }),
|
|
112
|
+
};
|
|
104
113
|
}
|
|
105
114
|
export const testingLiveMcpHandlers = {
|
|
106
115
|
testingLiveContinue: (args) => testingLiveControl('continue', args),
|
|
@@ -116,7 +125,7 @@ export const testingLiveMcpHandlers = {
|
|
|
116
125
|
testingLiveStop,
|
|
117
126
|
};
|
|
118
127
|
const liveSessionSchema = {
|
|
119
|
-
job: z.number().int().positive().optional().describe('Optional CRT job
|
|
128
|
+
job: z.number().int().positive().optional().describe('Optional CRT job ID guard.'),
|
|
120
129
|
project: z.number().int().positive().describe('CRT project ID.'),
|
|
121
130
|
sessionId: z.number().int().positive().optional().describe('Optional active live session ID guard.'),
|
|
122
131
|
};
|
|
@@ -135,12 +144,13 @@ export function registerTestingLiveMcpTools(server) {
|
|
|
135
144
|
inputSchema: {
|
|
136
145
|
description: z.string().max(500).optional(),
|
|
137
146
|
japIme: z.boolean().optional(),
|
|
138
|
-
job: z.number().int().positive().describe('CRT job
|
|
147
|
+
job: z.number().int().positive().describe('CRT job ID.'),
|
|
139
148
|
library: z.enum(TESTING_LIVE_LIBRARIES).optional(),
|
|
140
149
|
noBootstrap: z.boolean().optional(),
|
|
141
150
|
noBrowser: z.boolean().optional(),
|
|
142
151
|
pollIntervalSeconds: z.number().int().min(1).max(30).optional(),
|
|
143
152
|
project: z.number().int().positive().describe('CRT project ID.'),
|
|
153
|
+
screen: z.string().max(100).optional(),
|
|
144
154
|
screenDepth: z.number().int().min(8).max(32).optional(),
|
|
145
155
|
screenHeight: z.number().int().min(240).max(4320).optional(),
|
|
146
156
|
screenWidth: z.number().int().min(320).max(7680).optional(),
|
|
@@ -148,6 +158,7 @@ export function registerTestingLiveMcpTools(server) {
|
|
|
148
158
|
sectionIndex: z.number().int().positive().optional(),
|
|
149
159
|
sessionVersion: z.string().max(100).optional(),
|
|
150
160
|
timeoutSeconds: z.number().int().min(1).max(600).optional(),
|
|
161
|
+
viewport: z.string().max(100).optional(),
|
|
151
162
|
},
|
|
152
163
|
title: 'Agentia Testing Live Start',
|
|
153
164
|
}, (args) => safelyHandleTool(() => testingLiveStart(args)));
|
|
@@ -204,7 +215,7 @@ export function registerTestingLiveMcpTools(server) {
|
|
|
204
215
|
server.registerTool('agentia_testing_live_history', {
|
|
205
216
|
description: 'Read bounded sanitized local CRT live execution history.',
|
|
206
217
|
inputSchema: {
|
|
207
|
-
job: z.number().int().positive().describe('CRT job
|
|
218
|
+
job: z.number().int().positive().describe('CRT job ID.'),
|
|
208
219
|
limit: z.number().int().min(1).max(500).optional(),
|
|
209
220
|
project: z.number().int().positive().describe('CRT project ID.'),
|
|
210
221
|
status: z.enum(['completed', 'failed', 'recorded']).optional(),
|