argusai-mcp 0.1.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.
Files changed (53) hide show
  1. package/dist/formatters/result-formatter.d.ts +44 -0
  2. package/dist/formatters/result-formatter.d.ts.map +1 -0
  3. package/dist/formatters/result-formatter.js +162 -0
  4. package/dist/formatters/result-formatter.js.map +1 -0
  5. package/dist/index.d.ts +27 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +90 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/server.d.ts +34 -0
  10. package/dist/server.d.ts.map +1 -0
  11. package/dist/server.js +184 -0
  12. package/dist/server.js.map +1 -0
  13. package/dist/session.d.ts +93 -0
  14. package/dist/session.d.ts.map +1 -0
  15. package/dist/session.js +220 -0
  16. package/dist/session.js.map +1 -0
  17. package/dist/tools/build.d.ts +31 -0
  18. package/dist/tools/build.d.ts.map +1 -0
  19. package/dist/tools/build.js +110 -0
  20. package/dist/tools/build.js.map +1 -0
  21. package/dist/tools/clean.d.ts +40 -0
  22. package/dist/tools/clean.d.ts.map +1 -0
  23. package/dist/tools/clean.js +111 -0
  24. package/dist/tools/clean.js.map +1 -0
  25. package/dist/tools/init.d.ts +41 -0
  26. package/dist/tools/init.d.ts.map +1 -0
  27. package/dist/tools/init.js +96 -0
  28. package/dist/tools/init.js.map +1 -0
  29. package/dist/tools/logs.d.ts +28 -0
  30. package/dist/tools/logs.d.ts.map +1 -0
  31. package/dist/tools/logs.js +35 -0
  32. package/dist/tools/logs.js.map +1 -0
  33. package/dist/tools/mock-requests.d.ts +36 -0
  34. package/dist/tools/mock-requests.d.ts.map +1 -0
  35. package/dist/tools/mock-requests.js +62 -0
  36. package/dist/tools/mock-requests.js.map +1 -0
  37. package/dist/tools/run.d.ts +58 -0
  38. package/dist/tools/run.d.ts.map +1 -0
  39. package/dist/tools/run.js +190 -0
  40. package/dist/tools/run.js.map +1 -0
  41. package/dist/tools/setup.d.ts +47 -0
  42. package/dist/tools/setup.d.ts.map +1 -0
  43. package/dist/tools/setup.js +162 -0
  44. package/dist/tools/setup.js.map +1 -0
  45. package/dist/tools/status.d.ts +44 -0
  46. package/dist/tools/status.d.ts.map +1 -0
  47. package/dist/tools/status.js +79 -0
  48. package/dist/tools/status.js.map +1 -0
  49. package/dist/transports/http-transport.d.ts +41 -0
  50. package/dist/transports/http-transport.d.ts.map +1 -0
  51. package/dist/transports/http-transport.js +107 -0
  52. package/dist/transports/http-transport.js.map +1 -0
  53. package/package.json +51 -0
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @module tools/init
3
+ * argus_init — Initialize a project session by loading e2e.yaml.
4
+ */
5
+ import { SessionManager } from '../session.js';
6
+ export interface InitResult {
7
+ projectName: string;
8
+ configPath: string;
9
+ services: Array<{
10
+ name: string;
11
+ image: string;
12
+ ports: string[];
13
+ hasHealthcheck: boolean;
14
+ }>;
15
+ mocks: Array<{
16
+ name: string;
17
+ port: number;
18
+ routeCount: number;
19
+ }>;
20
+ suites: Array<{
21
+ id: string;
22
+ name: string;
23
+ runner: string;
24
+ file?: string;
25
+ }>;
26
+ schemaVersion: string;
27
+ }
28
+ /**
29
+ * Handle the argus_init MCP tool call.
30
+ * Loads the project e2e.yaml config and creates a new session.
31
+ *
32
+ * @param params - Tool input with projectPath and optional configFile override
33
+ * @param sessionManager - Session store for tracking project state
34
+ * @returns Structured init result with project info, services, mocks, and suites
35
+ * @throws {SessionError} SESSION_EXISTS if already initialized, CONFIG_NOT_FOUND/CONFIG_INVALID on bad config
36
+ */
37
+ export declare function handleInit(params: {
38
+ projectPath: string;
39
+ configFile?: string;
40
+ }, sessionManager: SessionManager): Promise<InitResult>;
41
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/tools/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,cAAc,EAAgB,MAAM,eAAe,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC,CAAC;IACH,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAyBD;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,UAAU,CAAC,CAkErB"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @module tools/init
3
+ * argus_init — Initialize a project session by loading e2e.yaml.
4
+ */
5
+ import path from 'node:path';
6
+ import { loadConfig } from 'argusai-core';
7
+ import { SessionError } from '../session.js';
8
+ function extractServices(config) {
9
+ if (config.services && config.services.length > 0) {
10
+ return config.services.map((svc) => ({
11
+ name: svc.name,
12
+ image: svc.build.image,
13
+ ports: svc.container.ports,
14
+ hasHealthcheck: !!svc.container.healthcheck,
15
+ }));
16
+ }
17
+ if (config.service) {
18
+ const svc = config.service;
19
+ return [{
20
+ name: svc.container.name,
21
+ image: svc.build.image,
22
+ ports: svc.container.ports,
23
+ hasHealthcheck: !!svc.container.healthcheck,
24
+ }];
25
+ }
26
+ return [];
27
+ }
28
+ /**
29
+ * Handle the argus_init MCP tool call.
30
+ * Loads the project e2e.yaml config and creates a new session.
31
+ *
32
+ * @param params - Tool input with projectPath and optional configFile override
33
+ * @param sessionManager - Session store for tracking project state
34
+ * @returns Structured init result with project info, services, mocks, and suites
35
+ * @throws {SessionError} SESSION_EXISTS if already initialized, CONFIG_NOT_FOUND/CONFIG_INVALID on bad config
36
+ */
37
+ export async function handleInit(params, sessionManager) {
38
+ const { projectPath, configFile } = params;
39
+ if (sessionManager.has(projectPath)) {
40
+ throw new SessionError('SESSION_EXISTS', `Session already initialized for project: ${projectPath}`);
41
+ }
42
+ const configFileName = configFile ?? 'e2e.yaml';
43
+ const configPath = path.resolve(projectPath, configFileName);
44
+ let config;
45
+ try {
46
+ config = await loadConfig(configPath);
47
+ }
48
+ catch (err) {
49
+ const message = err.message;
50
+ if (message.includes('not found')) {
51
+ throw new SessionError('CONFIG_NOT_FOUND', `Configuration file not found: ${configPath}`);
52
+ }
53
+ if (message.includes('validation failed')) {
54
+ throw new SessionError('CONFIG_INVALID', message);
55
+ }
56
+ throw err;
57
+ }
58
+ sessionManager.create(projectPath, config, configPath);
59
+ sessionManager.eventBus?.emit('activity', {
60
+ event: 'activity_start',
61
+ data: { id: `init-${Date.now()}`, source: 'ai', operation: 'init', project: config.project.name, status: 'success', startTime: Date.now(), endTime: Date.now() },
62
+ });
63
+ const services = extractServices(config);
64
+ const mocks = [];
65
+ if (config.mocks) {
66
+ for (const [name, mockConfig] of Object.entries(config.mocks)) {
67
+ const mc = mockConfig;
68
+ mocks.push({
69
+ name,
70
+ port: mc.port,
71
+ routeCount: mc.routes?.length ?? 0,
72
+ });
73
+ }
74
+ }
75
+ const suites = [];
76
+ if (config.tests?.suites) {
77
+ for (const suite of config.tests.suites) {
78
+ const s = suite;
79
+ suites.push({
80
+ id: s.id,
81
+ name: s.name,
82
+ runner: s.runner ?? 'yaml',
83
+ file: s.file,
84
+ });
85
+ }
86
+ }
87
+ return {
88
+ projectName: config.project.name,
89
+ configPath,
90
+ services,
91
+ mocks,
92
+ suites,
93
+ schemaVersion: config.version,
94
+ };
95
+ }
96
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/tools/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @module tools/logs
3
+ * argus_logs — Get recent logs from a container.
4
+ */
5
+ import { type ContainerStatus } from 'argusai-core';
6
+ import { SessionManager } from '../session.js';
7
+ export interface LogsResult {
8
+ container: string;
9
+ lines: string[];
10
+ lineCount: number;
11
+ containerStatus: ContainerStatus;
12
+ }
13
+ /**
14
+ * Handle the argus_logs MCP tool call.
15
+ * Retrieves recent log output from a specific container.
16
+ *
17
+ * @param params - Tool input with projectPath, container name, and optional line count / since filter
18
+ * @param sessionManager - Session store for tracking project state
19
+ * @returns Container logs split into lines with container status
20
+ * @throws {SessionError} CONTAINER_NOT_FOUND if container not in session, CONTAINER_NOT_RUNNING if stopped
21
+ */
22
+ export declare function handleLogs(params: {
23
+ projectPath: string;
24
+ container: string;
25
+ lines?: number;
26
+ since?: string;
27
+ }, sessionManager: SessionManager): Promise<LogsResult>;
28
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/tools/logs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAgB,MAAM,eAAe,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,eAAe,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAClF,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,UAAU,CAAC,CAuBrB"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @module tools/logs
3
+ * argus_logs — Get recent logs from a container.
4
+ */
5
+ import { getContainerLogs, getContainerStatus, } from 'argusai-core';
6
+ import { SessionError } from '../session.js';
7
+ /**
8
+ * Handle the argus_logs MCP tool call.
9
+ * Retrieves recent log output from a specific container.
10
+ *
11
+ * @param params - Tool input with projectPath, container name, and optional line count / since filter
12
+ * @param sessionManager - Session store for tracking project state
13
+ * @returns Container logs split into lines with container status
14
+ * @throws {SessionError} CONTAINER_NOT_FOUND if container not in session, CONTAINER_NOT_RUNNING if stopped
15
+ */
16
+ export async function handleLogs(params, sessionManager) {
17
+ const session = sessionManager.getOrThrow(params.projectPath);
18
+ if (!session.containerIds.has(params.container)) {
19
+ throw new SessionError('CONTAINER_NOT_FOUND', `Container "${params.container}" not found in session`);
20
+ }
21
+ const containerStatus = await getContainerStatus(params.container);
22
+ if (containerStatus !== 'running' && containerStatus !== 'exited') {
23
+ throw new SessionError('CONTAINER_NOT_RUNNING', `Container "${params.container}" is not running (status: ${containerStatus})`);
24
+ }
25
+ const lineCount = params.lines ?? 100;
26
+ const rawLogs = await getContainerLogs(params.container, lineCount);
27
+ const lines = rawLogs.split('\n').filter(Boolean);
28
+ return {
29
+ container: params.container,
30
+ lines,
31
+ lineCount: lines.length,
32
+ containerStatus,
33
+ };
34
+ }
35
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/tools/logs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,GAEnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAC;AAS7D;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAkF,EAClF,cAA8B;IAE9B,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAE9D,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,YAAY,CAAC,qBAAqB,EAAE,cAAc,MAAM,CAAC,SAAS,wBAAwB,CAAC,CAAC;IACxG,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEnE,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;QAClE,MAAM,IAAI,YAAY,CAAC,uBAAuB,EAAE,cAAc,MAAM,CAAC,SAAS,6BAA6B,eAAe,GAAG,CAAC,CAAC;IACjI,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAElD,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK;QACL,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,eAAe;KAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @module tools/mock-requests
3
+ * argus_mock_requests — Get recorded requests from mock services.
4
+ */
5
+ import { SessionManager } from '../session.js';
6
+ export interface MockRequestsResult {
7
+ mocks: Array<{
8
+ name: string;
9
+ port: number;
10
+ totalRequests: number;
11
+ requests: Array<{
12
+ method: string;
13
+ url: string;
14
+ body: unknown;
15
+ headers: Record<string, string | string[] | undefined>;
16
+ timestamp: string;
17
+ }>;
18
+ }>;
19
+ }
20
+ /**
21
+ * Handle the argus_mock_requests MCP tool call.
22
+ * Fetches recorded HTTP requests from mock service endpoints.
23
+ * Optionally filters by mock name, time range, and clears request logs.
24
+ *
25
+ * @param params - Tool input with projectPath, optional mockName filter, since timestamp, and clear flag
26
+ * @param sessionManager - Session store for tracking project state
27
+ * @returns Recorded requests per mock service
28
+ * @throws {SessionError} MOCKS_NOT_RUNNING if no mocks active, MOCK_NOT_FOUND if filter matches nothing
29
+ */
30
+ export declare function handleMockRequests(params: {
31
+ projectPath: string;
32
+ mockName?: string;
33
+ since?: string;
34
+ clear?: boolean;
35
+ }, sessionManager: SessionManager): Promise<MockRequestsResult>;
36
+ //# sourceMappingURL=mock-requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-requests.d.ts","sourceRoot":"","sources":["../../src/tools/mock-requests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAgB,MAAM,eAAe,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,KAAK,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,GAAG,EAAE,MAAM,CAAC;YACZ,IAAI,EAAE,OAAO,CAAC;YACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;YACvD,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ;AAaD;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACnF,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,kBAAkB,CAAC,CAsD7B"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @module tools/mock-requests
3
+ * argus_mock_requests — Get recorded requests from mock services.
4
+ */
5
+ import { SessionError } from '../session.js';
6
+ /**
7
+ * Handle the argus_mock_requests MCP tool call.
8
+ * Fetches recorded HTTP requests from mock service endpoints.
9
+ * Optionally filters by mock name, time range, and clears request logs.
10
+ *
11
+ * @param params - Tool input with projectPath, optional mockName filter, since timestamp, and clear flag
12
+ * @param sessionManager - Session store for tracking project state
13
+ * @returns Recorded requests per mock service
14
+ * @throws {SessionError} MOCKS_NOT_RUNNING if no mocks active, MOCK_NOT_FOUND if filter matches nothing
15
+ */
16
+ export async function handleMockRequests(params, sessionManager) {
17
+ const session = sessionManager.getOrThrow(params.projectPath);
18
+ if (session.mockServers.size === 0) {
19
+ throw new SessionError('MOCKS_NOT_RUNNING', 'No mock services are running');
20
+ }
21
+ if (params.mockName && !session.mockServers.has(params.mockName)) {
22
+ throw new SessionError('MOCK_NOT_FOUND', `Mock service "${params.mockName}" not found`);
23
+ }
24
+ const result = { mocks: [] };
25
+ const targets = params.mockName
26
+ ? [[params.mockName, session.mockServers.get(params.mockName)]]
27
+ : Array.from(session.mockServers.entries());
28
+ for (const [name, mockInfo] of targets) {
29
+ try {
30
+ const resp = await fetch(`http://localhost:${mockInfo.port}/_mock/requests`, {
31
+ signal: AbortSignal.timeout(5000),
32
+ });
33
+ if (!resp.ok) {
34
+ result.mocks.push({ name, port: mockInfo.port, totalRequests: 0, requests: [] });
35
+ continue;
36
+ }
37
+ const data = await resp.json();
38
+ let requests = data.requests;
39
+ if (params.since) {
40
+ const sinceTime = new Date(params.since).getTime();
41
+ requests = requests.filter(r => new Date(r.timestamp).getTime() >= sinceTime);
42
+ }
43
+ result.mocks.push({
44
+ name,
45
+ port: mockInfo.port,
46
+ totalRequests: requests.length,
47
+ requests,
48
+ });
49
+ if (params.clear) {
50
+ await fetch(`http://localhost:${mockInfo.port}/_mock/requests`, {
51
+ method: 'DELETE',
52
+ signal: AbortSignal.timeout(2000),
53
+ });
54
+ }
55
+ }
56
+ catch {
57
+ result.mocks.push({ name, port: mockInfo.port, totalRequests: 0, requests: [] });
58
+ }
59
+ }
60
+ return result;
61
+ }
62
+ //# sourceMappingURL=mock-requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-requests.js","sourceRoot":"","sources":["../../src/tools/mock-requests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @module tools/run
3
+ * argus_run + argus_run_suite — Execute test suites.
4
+ */
5
+ import { type AIFriendlyTestResult } from 'argusai-core';
6
+ import { SessionManager } from '../session.js';
7
+ import type { ResultFormatter } from '../formatters/result-formatter.js';
8
+ import type { PlatformServices } from '../server.js';
9
+ export interface RunResult {
10
+ status: 'passed' | 'failed';
11
+ totals: {
12
+ passed: number;
13
+ failed: number;
14
+ skipped: number;
15
+ total: number;
16
+ };
17
+ duration: number;
18
+ suites: Array<{
19
+ id: string;
20
+ name: string;
21
+ status: 'passed' | 'failed';
22
+ duration: number;
23
+ passed: number;
24
+ failed: number;
25
+ skipped: number;
26
+ cases: AIFriendlyTestResult[];
27
+ }>;
28
+ }
29
+ /**
30
+ * Handle the argus_run MCP tool call.
31
+ * Executes all (or filtered) test suites and returns AI-friendly results.
32
+ *
33
+ * @param params - Tool input with projectPath, optional suite filter and parallel override
34
+ * @param sessionManager - Session store for tracking project state
35
+ * @param formatter - Converts raw TestEvents into AIFriendlyTestResult format
36
+ * @returns Structured run result with per-suite/per-case outcomes and diagnostics
37
+ * @throws {SessionError} NOT_RUNNING if setup not done, SUITE_NOT_FOUND if filter matches nothing
38
+ */
39
+ export declare function handleRun(params: {
40
+ projectPath: string;
41
+ filter?: string;
42
+ parallel?: boolean;
43
+ }, sessionManager: SessionManager, formatter: ResultFormatter, platform?: PlatformServices): Promise<RunResult>;
44
+ /**
45
+ * Handle the argus_run_suite MCP tool call.
46
+ * Executes a single test suite by ID and returns AI-friendly results.
47
+ *
48
+ * @param params - Tool input with projectPath and suiteId
49
+ * @param sessionManager - Session store for tracking project state
50
+ * @param formatter - Converts raw TestEvents into AIFriendlyTestResult format
51
+ * @returns Structured run result for the single suite
52
+ * @throws {SessionError} NOT_RUNNING if setup not done, SUITE_NOT_FOUND if suiteId not found
53
+ */
54
+ export declare function handleRunSuite(params: {
55
+ projectPath: string;
56
+ suiteId: string;
57
+ }, sessionManager: SessionManager, formatter: ResultFormatter, platform?: PlatformServices): Promise<RunResult>;
58
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAML,KAAK,oBAAoB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAgB,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,oBAAoB,EAAE,CAAC;KAC/B,CAAC,CAAC;CACJ;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EACpE,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,eAAe,EAC1B,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,SAAS,CAAC,CA4BpB;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAChD,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,eAAe,EAC1B,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,SAAS,CAAC,CAiBpB"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * @module tools/run
3
+ * argus_run + argus_run_suite — Execute test suites.
4
+ */
5
+ import path from 'node:path';
6
+ import { loadYAMLTests, executeYAMLSuite, createDefaultRegistry, } from 'argusai-core';
7
+ import { SessionError } from '../session.js';
8
+ /**
9
+ * Handle the argus_run MCP tool call.
10
+ * Executes all (or filtered) test suites and returns AI-friendly results.
11
+ *
12
+ * @param params - Tool input with projectPath, optional suite filter and parallel override
13
+ * @param sessionManager - Session store for tracking project state
14
+ * @param formatter - Converts raw TestEvents into AIFriendlyTestResult format
15
+ * @returns Structured run result with per-suite/per-case outcomes and diagnostics
16
+ * @throws {SessionError} NOT_RUNNING if setup not done, SUITE_NOT_FOUND if filter matches nothing
17
+ */
18
+ export async function handleRun(params, sessionManager, formatter, platform) {
19
+ const session = sessionManager.getOrThrow(params.projectPath);
20
+ if (session.state !== 'running') {
21
+ throw new SessionError('NOT_RUNNING', 'Environment not set up. Call argus_setup first.');
22
+ }
23
+ const config = session.config;
24
+ if (!config.tests?.suites || config.tests.suites.length === 0) {
25
+ return {
26
+ status: 'passed',
27
+ totals: { passed: 0, failed: 0, skipped: 0, total: 0 },
28
+ duration: 0,
29
+ suites: [],
30
+ };
31
+ }
32
+ let suites = config.tests.suites;
33
+ if (params.filter) {
34
+ const filterIds = params.filter.split(',').map(s => s.trim());
35
+ suites = suites.filter((s) => filterIds.includes(s.id));
36
+ if (suites.length === 0) {
37
+ throw new SessionError('SUITE_NOT_FOUND', `No suites found matching filter: ${params.filter}`);
38
+ }
39
+ }
40
+ return executeSuites(suites, session, formatter, sessionManager.eventBus, platform);
41
+ }
42
+ /**
43
+ * Handle the argus_run_suite MCP tool call.
44
+ * Executes a single test suite by ID and returns AI-friendly results.
45
+ *
46
+ * @param params - Tool input with projectPath and suiteId
47
+ * @param sessionManager - Session store for tracking project state
48
+ * @param formatter - Converts raw TestEvents into AIFriendlyTestResult format
49
+ * @returns Structured run result for the single suite
50
+ * @throws {SessionError} NOT_RUNNING if setup not done, SUITE_NOT_FOUND if suiteId not found
51
+ */
52
+ export async function handleRunSuite(params, sessionManager, formatter, platform) {
53
+ const session = sessionManager.getOrThrow(params.projectPath);
54
+ if (session.state !== 'running') {
55
+ throw new SessionError('NOT_RUNNING', 'Environment not set up. Call argus_setup first.');
56
+ }
57
+ const config = session.config;
58
+ const suites = (config.tests?.suites ?? []).filter((s) => s.id === params.suiteId);
59
+ if (suites.length === 0) {
60
+ throw new SessionError('SUITE_NOT_FOUND', `Suite "${params.suiteId}" not found in configuration`);
61
+ }
62
+ return executeSuites(suites, session, formatter, sessionManager.eventBus, platform);
63
+ }
64
+ async function executeSuites(suites, session, formatter, bus, platform) {
65
+ const totalStart = Date.now();
66
+ const suiteResults = [];
67
+ let totalPassed = 0;
68
+ let totalFailed = 0;
69
+ let totalSkipped = 0;
70
+ bus?.emit('activity', {
71
+ event: 'activity_start',
72
+ data: { id: `run-${totalStart}`, source: 'ai', operation: 'run', project: session.config.project.name, status: 'running', startTime: totalStart },
73
+ });
74
+ const containerName = getContainerName(session.config);
75
+ const baseUrl = getBaseUrl(session.config);
76
+ for (const suiteConfig of suites) {
77
+ const events = [];
78
+ const suiteStart = Date.now();
79
+ if (suiteConfig.runner === 'yaml' || !suiteConfig.runner) {
80
+ if (suiteConfig.file) {
81
+ const filePath = path.resolve(session.projectPath, suiteConfig.file);
82
+ const yamlSuite = await loadYAMLTests(filePath);
83
+ for await (const event of executeYAMLSuite(yamlSuite, {
84
+ baseUrl,
85
+ variables: { config: {}, runtime: {}, env: { ...process.env } },
86
+ containerName,
87
+ })) {
88
+ events.push(event);
89
+ bus?.emit('test', { event: event.type, data: event });
90
+ }
91
+ }
92
+ }
93
+ else {
94
+ const registry = await createDefaultRegistry();
95
+ const runner = registry.get(suiteConfig.runner);
96
+ if (runner) {
97
+ const cwd = session.projectPath;
98
+ const target = suiteConfig.file ?? suiteConfig.command ?? '';
99
+ for await (const event of runner.run({
100
+ cwd,
101
+ target,
102
+ env: process.env,
103
+ timeout: 300_000,
104
+ })) {
105
+ events.push(event);
106
+ bus?.emit('test', { event: event.type, data: event });
107
+ }
108
+ }
109
+ }
110
+ const cases = formatter.formatEvents(events, suiteConfig.name);
111
+ let suitePassed = 0;
112
+ let suiteFailed = 0;
113
+ let suiteSkipped = 0;
114
+ for (const c of cases) {
115
+ if (c.status === 'passed')
116
+ suitePassed++;
117
+ else if (c.status === 'failed')
118
+ suiteFailed++;
119
+ else
120
+ suiteSkipped++;
121
+ }
122
+ totalPassed += suitePassed;
123
+ totalFailed += suiteFailed;
124
+ totalSkipped += suiteSkipped;
125
+ suiteResults.push({
126
+ id: suiteConfig.id,
127
+ name: suiteConfig.name,
128
+ status: suiteFailed > 0 ? 'failed' : 'passed',
129
+ duration: Date.now() - suiteStart,
130
+ passed: suitePassed,
131
+ failed: suiteFailed,
132
+ skipped: suiteSkipped,
133
+ cases,
134
+ });
135
+ }
136
+ const total = totalPassed + totalFailed + totalSkipped;
137
+ const totalDuration = Date.now() - totalStart;
138
+ bus?.emit('activity', {
139
+ event: 'activity_update',
140
+ data: { id: `run-${totalStart}`, source: 'ai', operation: 'run', project: session.config.project.name, status: totalFailed > 0 ? 'failed' : 'success', startTime: totalStart, endTime: Date.now() },
141
+ });
142
+ const runResult = {
143
+ status: totalFailed > 0 ? 'failed' : 'passed',
144
+ totals: { passed: totalPassed, failed: totalFailed, skipped: totalSkipped, total },
145
+ duration: totalDuration,
146
+ suites: suiteResults,
147
+ };
148
+ // Persist test records
149
+ if (platform?.store) {
150
+ for (const sr of suiteResults) {
151
+ platform.store.saveTestRecord({
152
+ id: `test-${totalStart}-${sr.id}`,
153
+ project: session.projectPath,
154
+ suite: sr.name,
155
+ status: sr.failed > 0 ? 'failed' : sr.skipped === (sr.passed + sr.failed + sr.skipped) ? 'skipped' : 'passed',
156
+ passed: sr.passed,
157
+ failed: sr.failed,
158
+ skipped: sr.skipped,
159
+ duration: sr.duration,
160
+ timestamp: totalStart,
161
+ source: 'ai',
162
+ error: sr.cases.find(c => c.status === 'failed')?.failure?.error,
163
+ }).catch(() => { });
164
+ }
165
+ }
166
+ // Notify on failure
167
+ if (totalFailed > 0 && platform?.notifier) {
168
+ const failedSuites = suiteResults.filter(s => s.status === 'failed').map(s => s.name);
169
+ platform.notifier.notifyTestFailure(session.projectPath, failedSuites.join(', '), `${totalFailed} test(s) failed in: ${failedSuites.join(', ')}`).catch(() => { });
170
+ }
171
+ return runResult;
172
+ }
173
+ function getContainerName(config) {
174
+ if (config.services && config.services.length > 0) {
175
+ return config.services[0].container.name;
176
+ }
177
+ return config.service?.container.name;
178
+ }
179
+ function getBaseUrl(config) {
180
+ const svc = config.services?.[0] ?? config.service;
181
+ if (!svc)
182
+ return 'http://localhost:3000';
183
+ const ports = svc.container.ports;
184
+ if (ports.length > 0) {
185
+ const hostPort = ports[0].split(':')[0];
186
+ return `http://localhost:${hostPort}`;
187
+ }
188
+ return 'http://localhost:3000';
189
+ }
190
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @module tools/setup
3
+ * argus_setup — Start the test environment.
4
+ *
5
+ * Uses MultiServiceOrchestrator for config normalization and dependency
6
+ * ordering, while keeping Docker calls at this level for testability.
7
+ */
8
+ import { SessionManager } from '../session.js';
9
+ export interface SetupResult {
10
+ network: {
11
+ name: string;
12
+ created: boolean;
13
+ };
14
+ services: Array<{
15
+ name: string;
16
+ containerId: string;
17
+ status: 'running' | 'healthy' | 'unhealthy' | 'failed';
18
+ ports: Array<{
19
+ host: number;
20
+ container: number;
21
+ }>;
22
+ healthCheckDuration?: number;
23
+ error?: string;
24
+ }>;
25
+ mocks: Array<{
26
+ name: string;
27
+ port: number;
28
+ status: 'running' | 'failed';
29
+ routeCount: number;
30
+ }>;
31
+ totalDuration: number;
32
+ }
33
+ /**
34
+ * Handle the argus_setup MCP tool call.
35
+ * Creates Docker network, starts mock services and service containers,
36
+ * and waits for health checks in dependency order.
37
+ *
38
+ * @param params - Tool input with projectPath and optional health-check timeout override
39
+ * @param sessionManager - Session store for tracking project state
40
+ * @returns Setup results including network, service, and mock status
41
+ * @throws {SessionError} SESSION_NOT_FOUND if not initialized, PORT_CONFLICT on occupied ports
42
+ */
43
+ export declare function handleSetup(params: {
44
+ projectPath: string;
45
+ timeout?: string;
46
+ }, sessionManager: SessionManager): Promise<SetupResult>;
47
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/tools/setup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,OAAO,EAAE,cAAc,EAAgB,MAAM,eAAe,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5C,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;QACvD,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAClD,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;QAC7B,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAuBD;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EACjD,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,WAAW,CAAC,CAuItB"}