@zivis/mcp 0.1.0-alpha.2 → 0.1.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-client.d.ts +11 -11
- package/dist/api-client.js +41 -36
- package/dist/api-client.js.map +1 -1
- package/dist/auth/index.d.ts +9 -5
- package/dist/auth/index.js +33 -17
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/keychain.d.ts +6 -5
- package/dist/auth/keychain.js +82 -69
- package/dist/auth/keychain.js.map +1 -1
- package/dist/auth/oauth.d.ts +18 -0
- package/dist/auth/oauth.js +55 -6
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/sessions.d.ts +5 -4
- package/dist/auth/sessions.js +20 -14
- package/dist/auth/sessions.js.map +1 -1
- package/dist/auth/token-refresh.d.ts +2 -2
- package/dist/auth/token-refresh.js +42 -9
- package/dist/auth/token-refresh.js.map +1 -1
- package/dist/cli.d.ts +7 -15
- package/dist/cli.js +36 -904
- package/dist/cli.js.map +1 -1
- package/dist/lib/next-steps.d.ts +57 -0
- package/dist/lib/next-steps.js +45 -0
- package/dist/lib/next-steps.js.map +1 -0
- package/dist/project-binding.d.ts +19 -2
- package/dist/project-binding.js +57 -3
- package/dist/project-binding.js.map +1 -1
- package/dist/prompts/audit-dependencies.d.ts +10 -0
- package/dist/prompts/audit-dependencies.js +56 -0
- package/dist/prompts/audit-dependencies.js.map +1 -0
- package/dist/prompts/getting-started.d.ts +12 -0
- package/dist/prompts/getting-started.js +48 -0
- package/dist/prompts/getting-started.js.map +1 -0
- package/dist/prompts/index.d.ts +14 -0
- package/dist/prompts/index.js +25 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/prep-for-launch.d.ts +9 -0
- package/dist/prompts/prep-for-launch.js +62 -0
- package/dist/prompts/prep-for-launch.js.map +1 -0
- package/dist/prompts/secure-my-app.d.ts +9 -0
- package/dist/prompts/secure-my-app.js +70 -0
- package/dist/prompts/secure-my-app.js.map +1 -0
- package/dist/prompts/weekly-check.d.ts +9 -0
- package/dist/prompts/weekly-check.js +48 -0
- package/dist/prompts/weekly-check.js.map +1 -0
- package/dist/server.d.ts +1 -1
- package/dist/server.js +119 -43
- package/dist/server.js.map +1 -1
- package/dist/tools/check-project.d.ts +7 -7
- package/dist/tools/check-project.js +127 -95
- package/dist/tools/check-project.js.map +1 -1
- package/dist/tools/check-repo-trust.d.ts +4 -10
- package/dist/tools/check-repo-trust.js +56 -27
- package/dist/tools/check-repo-trust.js.map +1 -1
- package/dist/tools/enterprise/get-campaign.d.ts +27 -0
- package/dist/tools/enterprise/get-campaign.js +31 -0
- package/dist/tools/enterprise/get-campaign.js.map +1 -0
- package/dist/tools/enterprise/list-agents.d.ts +1 -1
- package/dist/tools/enterprise/list-attack-scenarios.d.ts +29 -0
- package/dist/tools/enterprise/list-attack-scenarios.js +69 -0
- package/dist/tools/enterprise/list-attack-scenarios.js.map +1 -0
- package/dist/tools/enterprise/list-attack-step-library-tests.d.ts +29 -0
- package/dist/tools/enterprise/list-attack-step-library-tests.js +61 -0
- package/dist/tools/enterprise/list-attack-step-library-tests.js.map +1 -0
- package/dist/tools/enterprise/list-campaigns.d.ts +37 -0
- package/dist/tools/enterprise/list-campaigns.js +60 -0
- package/dist/tools/enterprise/list-campaigns.js.map +1 -0
- package/dist/tools/enterprise/list-threat-model-review-items.d.ts +35 -0
- package/dist/tools/enterprise/list-threat-model-review-items.js +60 -0
- package/dist/tools/enterprise/list-threat-model-review-items.js.map +1 -0
- package/dist/tools/enterprise/list-threat-model-versions.d.ts +29 -0
- package/dist/tools/enterprise/list-threat-model-versions.js +60 -0
- package/dist/tools/enterprise/list-threat-model-versions.js.map +1 -0
- package/dist/tools/enterprise/manage-campaign-agent-instance.d.ts +42 -0
- package/dist/tools/enterprise/manage-campaign-agent-instance.js +68 -0
- package/dist/tools/enterprise/manage-campaign-agent-instance.js.map +1 -0
- package/dist/tools/enterprise/manage-campaign-target.d.ts +44 -0
- package/dist/tools/enterprise/manage-campaign-target.js +70 -0
- package/dist/tools/enterprise/manage-campaign-target.js.map +1 -0
- package/dist/tools/enterprise/manage-campaign.d.ts +62 -0
- package/dist/tools/enterprise/manage-campaign.js +114 -0
- package/dist/tools/enterprise/manage-campaign.js.map +1 -0
- package/dist/tools/enterprise/manage-finding.d.ts +1 -1
- package/dist/tools/enterprise/manage-threat-model-analysis.d.ts +52 -0
- package/dist/tools/enterprise/manage-threat-model-analysis.js +92 -0
- package/dist/tools/enterprise/manage-threat-model-analysis.js.map +1 -0
- package/dist/tools/enterprise/manage-threat-model-review.d.ts +47 -0
- package/dist/tools/enterprise/manage-threat-model-review.js +82 -0
- package/dist/tools/enterprise/manage-threat-model-review.js.map +1 -0
- package/dist/tools/get-application-auth-config.d.ts +27 -0
- package/dist/tools/get-application-auth-config.js +44 -0
- package/dist/tools/get-application-auth-config.js.map +1 -0
- package/dist/tools/get-finding-details.d.ts +4 -10
- package/dist/tools/get-finding-details.js +28 -10
- package/dist/tools/get-finding-details.js.map +1 -1
- package/dist/tools/get-findings.d.ts +4 -10
- package/dist/tools/get-findings.js +44 -23
- package/dist/tools/get-findings.js.map +1 -1
- package/dist/tools/get-started.d.ts +28 -0
- package/dist/tools/get-started.js +364 -0
- package/dist/tools/get-started.js.map +1 -0
- package/dist/tools/list-applications.d.ts +1 -1
- package/dist/tools/list-scans.d.ts +4 -10
- package/dist/tools/list-scans.js +55 -21
- package/dist/tools/list-scans.js.map +1 -1
- package/dist/tools/list-test-scenarios.d.ts +4 -10
- package/dist/tools/list-test-scenarios.js +41 -13
- package/dist/tools/list-test-scenarios.js.map +1 -1
- package/dist/tools/local-scan.d.ts +1 -1
- package/dist/tools/manage-application.d.ts +72 -0
- package/dist/tools/manage-application.js +138 -0
- package/dist/tools/manage-application.js.map +1 -0
- package/dist/tools/manage-endpoint-lifecycle.d.ts +90 -0
- package/dist/tools/manage-endpoint-lifecycle.js +191 -0
- package/dist/tools/manage-endpoint-lifecycle.js.map +1 -0
- package/dist/tools/open-in-ide.d.ts +1 -1
- package/dist/tools/setup-red-team-target.d.ts +6 -12
- package/dist/tools/setup-red-team-target.js +51 -20
- package/dist/tools/setup-red-team-target.js.map +1 -1
- package/dist/tools/triage-finding.d.ts +4 -10
- package/dist/tools/triage-finding.js +30 -21
- package/dist/tools/triage-finding.js.map +1 -1
- package/dist/types.d.ts +42 -2
- package/dist/types.js +29 -23
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_list_attack_scenarios — List attack scenarios for a threat model
|
|
3
|
+
*
|
|
4
|
+
* Maps to: GET /api/threat-models/:id/attack-scenarios
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { sanitizeResponse } from "../../sanitize.js";
|
|
8
|
+
export const LIST_ATTACK_SCENARIOS_NAME = "zivis_list_attack_scenarios";
|
|
9
|
+
export const LIST_ATTACK_SCENARIOS_DESCRIPTION = `List attack scenarios for a threat model, including their path steps.
|
|
10
|
+
|
|
11
|
+
Use this when you need scenario IDs or attack path step IDs for follow-up tools (for example, step-level library test mappings).
|
|
12
|
+
|
|
13
|
+
IMPORTANT: threat_model_id must be a threat model UUID (from zivis_list_threat_models), not a scan ID.`;
|
|
14
|
+
export const LIST_ATTACK_SCENARIOS_SCHEMA = {
|
|
15
|
+
threat_model_id: z
|
|
16
|
+
.string()
|
|
17
|
+
.describe("Threat model UUID (from zivis_list_threat_models, NOT a scan ID)"),
|
|
18
|
+
limit: z
|
|
19
|
+
.number()
|
|
20
|
+
.min(1)
|
|
21
|
+
.max(200)
|
|
22
|
+
.default(50)
|
|
23
|
+
.describe("Maximum scenarios to return (1-200, default 50)"),
|
|
24
|
+
};
|
|
25
|
+
export function createListAttackScenariosHandler(apiClient) {
|
|
26
|
+
return async (params) => {
|
|
27
|
+
try {
|
|
28
|
+
const data = await apiClient.get(`/api/threat-models/${params.threat_model_id}/attack-scenarios`);
|
|
29
|
+
const limit = params.limit ?? 50;
|
|
30
|
+
const scenarios = (data.attackScenarios || []).slice(0, limit).map((scenario) => ({
|
|
31
|
+
scenario_id: scenario.id,
|
|
32
|
+
display_id: scenario.displayId,
|
|
33
|
+
title: scenario.title,
|
|
34
|
+
severity: scenario.severity,
|
|
35
|
+
likelihood: scenario.likelihood,
|
|
36
|
+
status: scenario.status,
|
|
37
|
+
review_status: scenario.reviewStatus,
|
|
38
|
+
risk_score: scenario.riskScore,
|
|
39
|
+
test_case_count: scenario._count?.testCases ?? 0,
|
|
40
|
+
step_count: scenario.pathSteps?.length ?? 0,
|
|
41
|
+
path_steps: (scenario.pathSteps || []).map((step) => ({
|
|
42
|
+
step_id: step.id,
|
|
43
|
+
step_order: step.stepOrder,
|
|
44
|
+
action: step.action,
|
|
45
|
+
library_test_count: step._count?.libraryTests ?? 0,
|
|
46
|
+
})),
|
|
47
|
+
created_at: scenario.createdAt,
|
|
48
|
+
updated_at: scenario.updatedAt,
|
|
49
|
+
}));
|
|
50
|
+
const sanitized = sanitizeResponse({
|
|
51
|
+
is_analyzing: data.isAnalyzing ?? false,
|
|
52
|
+
is_fallback_version: data.isFallback ?? false,
|
|
53
|
+
total_returned: scenarios.length,
|
|
54
|
+
scenarios,
|
|
55
|
+
});
|
|
56
|
+
return {
|
|
57
|
+
content: [{ type: "text", text: JSON.stringify(sanitized, null, 2) }],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
const message = err instanceof Error ? err.message : "Failed to list attack scenarios";
|
|
62
|
+
return {
|
|
63
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
64
|
+
isError: true,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=list-attack-scenarios.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-attack-scenarios.js","sourceRoot":"","sources":["../../../src/tools/enterprise/list-attack-scenarios.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_list_attack_step_library_tests — List curated library tests for an attack path step
|
|
3
|
+
*
|
|
4
|
+
* Maps to: GET /api/threat-models/:id/attack-path-steps/:stepId/library-tests
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import type { ApiClient } from "../../api-client.js";
|
|
8
|
+
export declare const LIST_ATTACK_STEP_LIBRARY_TESTS_NAME = "zivis_list_attack_step_library_tests";
|
|
9
|
+
export declare const LIST_ATTACK_STEP_LIBRARY_TESTS_DESCRIPTION = "List the library tests currently mapped to a specific attack path step.\n\nUse zivis_list_attack_scenarios first to get attack_path_step_id values.\n\nIMPORTANT: threat_model_id must be a threat model UUID (not a scan ID).";
|
|
10
|
+
export declare const LIST_ATTACK_STEP_LIBRARY_TESTS_SCHEMA: {
|
|
11
|
+
threat_model_id: z.ZodString;
|
|
12
|
+
attack_path_step_id: z.ZodString;
|
|
13
|
+
};
|
|
14
|
+
export declare function createListAttackStepLibraryTestsHandler(apiClient: ApiClient): (params: {
|
|
15
|
+
threat_model_id: string;
|
|
16
|
+
attack_path_step_id: string;
|
|
17
|
+
}) => Promise<{
|
|
18
|
+
content: {
|
|
19
|
+
type: "text";
|
|
20
|
+
text: string;
|
|
21
|
+
}[];
|
|
22
|
+
isError?: undefined;
|
|
23
|
+
} | {
|
|
24
|
+
content: {
|
|
25
|
+
type: "text";
|
|
26
|
+
text: string;
|
|
27
|
+
}[];
|
|
28
|
+
isError: boolean;
|
|
29
|
+
}>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_list_attack_step_library_tests — List curated library tests for an attack path step
|
|
3
|
+
*
|
|
4
|
+
* Maps to: GET /api/threat-models/:id/attack-path-steps/:stepId/library-tests
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { sanitizeResponse } from "../../sanitize.js";
|
|
8
|
+
export const LIST_ATTACK_STEP_LIBRARY_TESTS_NAME = "zivis_list_attack_step_library_tests";
|
|
9
|
+
export const LIST_ATTACK_STEP_LIBRARY_TESTS_DESCRIPTION = `List the library tests currently mapped to a specific attack path step.
|
|
10
|
+
|
|
11
|
+
Use zivis_list_attack_scenarios first to get attack_path_step_id values.
|
|
12
|
+
|
|
13
|
+
IMPORTANT: threat_model_id must be a threat model UUID (not a scan ID).`;
|
|
14
|
+
export const LIST_ATTACK_STEP_LIBRARY_TESTS_SCHEMA = {
|
|
15
|
+
threat_model_id: z
|
|
16
|
+
.string()
|
|
17
|
+
.describe("Threat model UUID (from zivis_list_threat_models, NOT a scan ID)"),
|
|
18
|
+
attack_path_step_id: z
|
|
19
|
+
.string()
|
|
20
|
+
.describe("Attack path step UUID (from zivis_list_attack_scenarios path_steps)"),
|
|
21
|
+
};
|
|
22
|
+
export function createListAttackStepLibraryTestsHandler(apiClient) {
|
|
23
|
+
return async (params) => {
|
|
24
|
+
try {
|
|
25
|
+
const data = await apiClient.get(`/api/threat-models/${params.threat_model_id}/attack-path-steps/${params.attack_path_step_id}/library-tests`);
|
|
26
|
+
const result = {
|
|
27
|
+
step: data.step
|
|
28
|
+
? {
|
|
29
|
+
step_id: data.step.id,
|
|
30
|
+
step_order: data.step.stepOrder,
|
|
31
|
+
action: data.step.action,
|
|
32
|
+
}
|
|
33
|
+
: null,
|
|
34
|
+
tests: (data.libraryTests || []).map((test) => ({
|
|
35
|
+
id: test.id,
|
|
36
|
+
code: test.code,
|
|
37
|
+
name: test.name,
|
|
38
|
+
description: test.description,
|
|
39
|
+
category: test.category,
|
|
40
|
+
subcategory: test.subcategory,
|
|
41
|
+
severity: test.severity,
|
|
42
|
+
tags: test.tags || [],
|
|
43
|
+
})),
|
|
44
|
+
};
|
|
45
|
+
const sanitized = sanitizeResponse(result);
|
|
46
|
+
return {
|
|
47
|
+
content: [{ type: "text", text: JSON.stringify(sanitized, null, 2) }],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
const message = err instanceof Error
|
|
52
|
+
? err.message
|
|
53
|
+
: "Failed to list attack step library tests";
|
|
54
|
+
return {
|
|
55
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
56
|
+
isError: true,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=list-attack-step-library-tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-attack-step-library-tests.js","sourceRoot":"","sources":["../../../src/tools/enterprise/list-attack-step-library-tests.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,CAAC,MAAM,mCAAmC,GAC9C,sCAAsC,CAAC;AAEzC,MAAM,CAAC,MAAM,0CAA0C,GAAG;;;;wEAIc,CAAC;AAEzE,MAAM,CAAC,MAAM,qCAAqC,GAAG;IACnD,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,CAAC,kEAAkE,CAAC;IAC/E,mBAAmB,EAAE,CAAC;SACnB,MAAM,EAAE;SACR,QAAQ,CAAC,qEAAqE,CAAC;CACnF,CAAC;AAwBF,MAAM,UAAU,uCAAuC,CAAC,SAAoB;IAC1E,OAAO,KAAK,EAAE,MAAgE,EAAE,EAAE;QAChF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,sBAAsB,MAAM,CAAC,eAAe,sBAAsB,MAAM,CAAC,mBAAmB,gBAAgB,CAC7G,CAAC;YAEF,MAAM,MAAM,GAAG;gBACb,IAAI,EAAE,IAAI,CAAC,IAAI;oBACb,CAAC,CAAC;wBACE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;wBACrB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;wBAC/B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;qBACzB;oBACH,CAAC,CAAC,IAAI;gBACR,KAAK,EAAE,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC9C,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;iBACtB,CAAC,CAAC;aACJ,CAAC;YAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC/E,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GACX,GAAG,YAAY,KAAK;gBAClB,CAAC,CAAC,GAAG,CAAC,OAAO;gBACb,CAAC,CAAC,0CAA0C,CAAC;YACjD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_list_campaigns — List red-team campaigns
|
|
3
|
+
*
|
|
4
|
+
* Maps to: GET /api/redteam/campaigns
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import type { ApiClient } from "../../api-client.js";
|
|
8
|
+
export declare const LIST_CAMPAIGNS_NAME = "zivis_list_campaigns";
|
|
9
|
+
export declare const LIST_CAMPAIGNS_DESCRIPTION = "List red-team campaigns for the organization.\n\nUse campaign IDs with zivis_get_campaign and campaign management tools.";
|
|
10
|
+
export declare const LIST_CAMPAIGNS_SCHEMA: {
|
|
11
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
12
|
+
completed: "completed";
|
|
13
|
+
draft: "draft";
|
|
14
|
+
archived: "archived";
|
|
15
|
+
active: "active";
|
|
16
|
+
paused: "paused";
|
|
17
|
+
}>>;
|
|
18
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
19
|
+
offset: z.ZodDefault<z.ZodNumber>;
|
|
20
|
+
};
|
|
21
|
+
export declare function createListCampaignsHandler(apiClient: ApiClient): (params: {
|
|
22
|
+
status?: string;
|
|
23
|
+
limit?: number;
|
|
24
|
+
offset?: number;
|
|
25
|
+
}) => Promise<{
|
|
26
|
+
content: {
|
|
27
|
+
type: "text";
|
|
28
|
+
text: string;
|
|
29
|
+
}[];
|
|
30
|
+
isError?: undefined;
|
|
31
|
+
} | {
|
|
32
|
+
content: {
|
|
33
|
+
type: "text";
|
|
34
|
+
text: string;
|
|
35
|
+
}[];
|
|
36
|
+
isError: boolean;
|
|
37
|
+
}>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_list_campaigns — List red-team campaigns
|
|
3
|
+
*
|
|
4
|
+
* Maps to: GET /api/redteam/campaigns
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { sanitizeResponse } from "../../sanitize.js";
|
|
8
|
+
export const LIST_CAMPAIGNS_NAME = "zivis_list_campaigns";
|
|
9
|
+
export const LIST_CAMPAIGNS_DESCRIPTION = `List red-team campaigns for the organization.
|
|
10
|
+
|
|
11
|
+
Use campaign IDs with zivis_get_campaign and campaign management tools.`;
|
|
12
|
+
export const LIST_CAMPAIGNS_SCHEMA = {
|
|
13
|
+
status: z
|
|
14
|
+
.enum(["draft", "active", "paused", "completed", "archived"])
|
|
15
|
+
.optional()
|
|
16
|
+
.describe("Optional campaign status filter"),
|
|
17
|
+
limit: z
|
|
18
|
+
.number()
|
|
19
|
+
.min(1)
|
|
20
|
+
.max(100)
|
|
21
|
+
.default(25)
|
|
22
|
+
.describe("Maximum campaigns to return (1-100, default 25)"),
|
|
23
|
+
offset: z
|
|
24
|
+
.number()
|
|
25
|
+
.min(0)
|
|
26
|
+
.default(0)
|
|
27
|
+
.describe("Pagination offset (default 0)"),
|
|
28
|
+
};
|
|
29
|
+
export function createListCampaignsHandler(apiClient) {
|
|
30
|
+
return async (params) => {
|
|
31
|
+
try {
|
|
32
|
+
const query = new URLSearchParams();
|
|
33
|
+
if (params.status)
|
|
34
|
+
query.set("status", params.status);
|
|
35
|
+
if (params.limit !== undefined)
|
|
36
|
+
query.set("limit", String(params.limit));
|
|
37
|
+
if (params.offset !== undefined)
|
|
38
|
+
query.set("offset", String(params.offset));
|
|
39
|
+
const queryStr = query.toString();
|
|
40
|
+
const data = await apiClient.get(`/api/redteam/campaigns${queryStr ? `?${queryStr}` : ""}`);
|
|
41
|
+
const sanitized = sanitizeResponse({
|
|
42
|
+
total: data.total ?? 0,
|
|
43
|
+
limit: data.limit ?? params.limit ?? 25,
|
|
44
|
+
offset: data.offset ?? params.offset ?? 0,
|
|
45
|
+
campaigns: data.campaigns || [],
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
content: [{ type: "text", text: JSON.stringify(sanitized, null, 2) }],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
const message = err instanceof Error ? err.message : "Failed to list campaigns";
|
|
53
|
+
return {
|
|
54
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
55
|
+
isError: true,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=list-campaigns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-campaigns.js","sourceRoot":"","sources":["../../../src/tools/enterprise/list-campaigns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAE1D,MAAM,CAAC,MAAM,0BAA0B,GAAG;;wEAE8B,CAAC;AAEzE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;SAC5D,QAAQ,EAAE;SACV,QAAQ,CAAC,iCAAiC,CAAC;IAC9C,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,+BAA+B,CAAC;CAC7C,CAAC;AASF,MAAM,UAAU,0BAA0B,CAAC,SAAoB;IAC7D,OAAO,KAAK,EAAE,MAA4D,EAAE,EAAE;QAC5E,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;YACpC,IAAI,MAAM,CAAC,MAAM;gBAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACzE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;gBAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAE5E,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,yBAAyB,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1D,CAAC;YAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC;gBACjC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;gBACtB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE;gBACvC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;gBACzC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;aAChC,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC/E,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;YAChF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_list_threat_model_review_items — List pending AI review items
|
|
3
|
+
*
|
|
4
|
+
* Maps to: GET /api/threat-models/:id/review-items
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import type { ApiClient } from "../../api-client.js";
|
|
8
|
+
export declare const LIST_THREAT_MODEL_REVIEW_ITEMS_NAME = "zivis_list_threat_model_review_items";
|
|
9
|
+
export declare const LIST_THREAT_MODEL_REVIEW_ITEMS_DESCRIPTION = "List AI-generated threat model items that are pending review.\n\nUse this before calling zivis_manage_threat_model_review to accept/reject specific items or all pending items.";
|
|
10
|
+
export declare const LIST_THREAT_MODEL_REVIEW_ITEMS_SCHEMA: {
|
|
11
|
+
threat_model_id: z.ZodString;
|
|
12
|
+
item_type: z.ZodDefault<z.ZodEnum<{
|
|
13
|
+
all: "all";
|
|
14
|
+
finding: "finding";
|
|
15
|
+
asset: "asset";
|
|
16
|
+
scenario: "scenario";
|
|
17
|
+
component: "component";
|
|
18
|
+
}>>;
|
|
19
|
+
};
|
|
20
|
+
export declare function createListThreatModelReviewItemsHandler(apiClient: ApiClient): (params: {
|
|
21
|
+
threat_model_id: string;
|
|
22
|
+
item_type?: string;
|
|
23
|
+
}) => Promise<{
|
|
24
|
+
content: {
|
|
25
|
+
type: "text";
|
|
26
|
+
text: string;
|
|
27
|
+
}[];
|
|
28
|
+
isError?: undefined;
|
|
29
|
+
} | {
|
|
30
|
+
content: {
|
|
31
|
+
type: "text";
|
|
32
|
+
text: string;
|
|
33
|
+
}[];
|
|
34
|
+
isError: boolean;
|
|
35
|
+
}>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_list_threat_model_review_items — List pending AI review items
|
|
3
|
+
*
|
|
4
|
+
* Maps to: GET /api/threat-models/:id/review-items
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { sanitizeResponse } from "../../sanitize.js";
|
|
8
|
+
export const LIST_THREAT_MODEL_REVIEW_ITEMS_NAME = "zivis_list_threat_model_review_items";
|
|
9
|
+
export const LIST_THREAT_MODEL_REVIEW_ITEMS_DESCRIPTION = `List AI-generated threat model items that are pending review.
|
|
10
|
+
|
|
11
|
+
Use this before calling zivis_manage_threat_model_review to accept/reject specific items or all pending items.`;
|
|
12
|
+
export const LIST_THREAT_MODEL_REVIEW_ITEMS_SCHEMA = {
|
|
13
|
+
threat_model_id: z
|
|
14
|
+
.string()
|
|
15
|
+
.describe("Threat model UUID (from zivis_list_threat_models)"),
|
|
16
|
+
item_type: z
|
|
17
|
+
.enum(["all", "finding", "asset", "scenario", "component"])
|
|
18
|
+
.default("all")
|
|
19
|
+
.describe("Optional filter by pending item type"),
|
|
20
|
+
};
|
|
21
|
+
export function createListThreatModelReviewItemsHandler(apiClient) {
|
|
22
|
+
return async (params) => {
|
|
23
|
+
try {
|
|
24
|
+
const data = await apiClient.get(`/api/threat-models/${params.threat_model_id}/review-items`);
|
|
25
|
+
const itemType = params.item_type ?? "all";
|
|
26
|
+
const filtered = {
|
|
27
|
+
findings: itemType === "all" || itemType === "finding" ? data.findings || [] : [],
|
|
28
|
+
assets: itemType === "all" || itemType === "asset" ? data.assets || [] : [],
|
|
29
|
+
scenarios: itemType === "all" || itemType === "scenario" ? data.scenarios || [] : [],
|
|
30
|
+
components: itemType === "all" || itemType === "component" ? data.components || [] : [],
|
|
31
|
+
};
|
|
32
|
+
const counts = {
|
|
33
|
+
findings: filtered.findings.length,
|
|
34
|
+
assets: filtered.assets.length,
|
|
35
|
+
scenarios: filtered.scenarios.length,
|
|
36
|
+
components: filtered.components.length,
|
|
37
|
+
total: filtered.findings.length +
|
|
38
|
+
filtered.assets.length +
|
|
39
|
+
filtered.scenarios.length +
|
|
40
|
+
filtered.components.length,
|
|
41
|
+
};
|
|
42
|
+
const sanitized = sanitizeResponse({
|
|
43
|
+
item_type: itemType,
|
|
44
|
+
counts: data.counts || counts,
|
|
45
|
+
...filtered,
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
content: [{ type: "text", text: JSON.stringify(sanitized, null, 2) }],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
const message = err instanceof Error ? err.message : "Failed to list threat model review items";
|
|
53
|
+
return {
|
|
54
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
55
|
+
isError: true,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=list-threat-model-review-items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-threat-model-review-items.js","sourceRoot":"","sources":["../../../src/tools/enterprise/list-threat-model-review-items.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_list_threat_model_versions — List versions for a threat model
|
|
3
|
+
*
|
|
4
|
+
* Maps to: GET /api/threat-models/:id/versions
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import type { ApiClient } from "../../api-client.js";
|
|
8
|
+
export declare const LIST_THREAT_MODEL_VERSIONS_NAME = "zivis_list_threat_model_versions";
|
|
9
|
+
export declare const LIST_THREAT_MODEL_VERSIONS_DESCRIPTION = "List all saved versions for a threat model with analysis status and summary metrics.\n\nUse version IDs from this tool when calling version-specific workflows.";
|
|
10
|
+
export declare const LIST_THREAT_MODEL_VERSIONS_SCHEMA: {
|
|
11
|
+
threat_model_id: z.ZodString;
|
|
12
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
13
|
+
};
|
|
14
|
+
export declare function createListThreatModelVersionsHandler(apiClient: ApiClient): (params: {
|
|
15
|
+
threat_model_id: string;
|
|
16
|
+
limit?: number;
|
|
17
|
+
}) => Promise<{
|
|
18
|
+
content: {
|
|
19
|
+
type: "text";
|
|
20
|
+
text: string;
|
|
21
|
+
}[];
|
|
22
|
+
isError?: undefined;
|
|
23
|
+
} | {
|
|
24
|
+
content: {
|
|
25
|
+
type: "text";
|
|
26
|
+
text: string;
|
|
27
|
+
}[];
|
|
28
|
+
isError: boolean;
|
|
29
|
+
}>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_list_threat_model_versions — List versions for a threat model
|
|
3
|
+
*
|
|
4
|
+
* Maps to: GET /api/threat-models/:id/versions
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { sanitizeResponse } from "../../sanitize.js";
|
|
8
|
+
export const LIST_THREAT_MODEL_VERSIONS_NAME = "zivis_list_threat_model_versions";
|
|
9
|
+
export const LIST_THREAT_MODEL_VERSIONS_DESCRIPTION = `List all saved versions for a threat model with analysis status and summary metrics.
|
|
10
|
+
|
|
11
|
+
Use version IDs from this tool when calling version-specific workflows.`;
|
|
12
|
+
export const LIST_THREAT_MODEL_VERSIONS_SCHEMA = {
|
|
13
|
+
threat_model_id: z
|
|
14
|
+
.string()
|
|
15
|
+
.describe("Threat model UUID (from zivis_list_threat_models)"),
|
|
16
|
+
limit: z
|
|
17
|
+
.number()
|
|
18
|
+
.min(1)
|
|
19
|
+
.max(200)
|
|
20
|
+
.default(30)
|
|
21
|
+
.describe("Maximum versions to return (1-200, default 30)"),
|
|
22
|
+
};
|
|
23
|
+
export function createListThreatModelVersionsHandler(apiClient) {
|
|
24
|
+
return async (params) => {
|
|
25
|
+
try {
|
|
26
|
+
const versions = await apiClient.get(`/api/threat-models/${params.threat_model_id}/versions`);
|
|
27
|
+
const limit = params.limit ?? 30;
|
|
28
|
+
const result = (versions || []).slice(0, limit).map((version) => ({
|
|
29
|
+
version_id: version.id,
|
|
30
|
+
version_number: version.versionNumber,
|
|
31
|
+
analysis_status: version.analysisStatus,
|
|
32
|
+
analyzed_at: version.analyzedAt,
|
|
33
|
+
analysis_duration_seconds: version.analysisDuration,
|
|
34
|
+
analysis_error: version.analysisError,
|
|
35
|
+
total_threats: version.totalThreats,
|
|
36
|
+
critical_count: version.criticalCount,
|
|
37
|
+
high_count: version.highCount,
|
|
38
|
+
medium_count: version.mediumCount,
|
|
39
|
+
low_count: version.lowCount,
|
|
40
|
+
created_at: version.createdAt,
|
|
41
|
+
}));
|
|
42
|
+
const sanitized = sanitizeResponse({
|
|
43
|
+
threat_model_id: params.threat_model_id,
|
|
44
|
+
total_returned: result.length,
|
|
45
|
+
versions: result,
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
content: [{ type: "text", text: JSON.stringify(sanitized, null, 2) }],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
const message = err instanceof Error ? err.message : "Failed to list threat model versions";
|
|
53
|
+
return {
|
|
54
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
55
|
+
isError: true,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=list-threat-model-versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-threat-model-versions.js","sourceRoot":"","sources":["../../../src/tools/enterprise/list-threat-model-versions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,CAAC,MAAM,+BAA+B,GAAG,kCAAkC,CAAC;AAElF,MAAM,CAAC,MAAM,sCAAsC,GAAG;;wEAEkB,CAAC;AAEzE,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,CAAC,mDAAmD,CAAC;IAChE,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,gDAAgD,CAAC;CAC9D,CAAC;AAiBF,MAAM,UAAU,oCAAoC,CAAC,SAAoB;IACvE,OAAO,KAAK,EAAE,MAAmD,EAAE,EAAE;QACnE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAClC,sBAAsB,MAAM,CAAC,eAAe,WAAW,CACxD,CAAC;YAEF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAChE,UAAU,EAAE,OAAO,CAAC,EAAE;gBACtB,cAAc,EAAE,OAAO,CAAC,aAAa;gBACrC,eAAe,EAAE,OAAO,CAAC,cAAc;gBACvC,WAAW,EAAE,OAAO,CAAC,UAAU;gBAC/B,yBAAyB,EAAE,OAAO,CAAC,gBAAgB;gBACnD,cAAc,EAAE,OAAO,CAAC,aAAa;gBACrC,aAAa,EAAE,OAAO,CAAC,YAAY;gBACnC,cAAc,EAAE,OAAO,CAAC,aAAa;gBACrC,UAAU,EAAE,OAAO,CAAC,SAAS;gBAC7B,YAAY,EAAE,OAAO,CAAC,WAAW;gBACjC,SAAS,EAAE,OAAO,CAAC,QAAQ;gBAC3B,UAAU,EAAE,OAAO,CAAC,SAAS;aAC9B,CAAC,CAAC,CAAC;YAEJ,MAAM,SAAS,GAAG,gBAAgB,CAAC;gBACjC,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,cAAc,EAAE,MAAM,CAAC,MAAM;gBAC7B,QAAQ,EAAE,MAAM;aACjB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC/E,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,sCAAsC,CAAC;YAC9E,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_manage_campaign_agent_instance — Add/update/remove agent instance link on campaign
|
|
3
|
+
*
|
|
4
|
+
* Maps to:
|
|
5
|
+
* - POST /api/redteam/campaigns/:id/agent-instances
|
|
6
|
+
* - PATCH /api/redteam/campaigns/:id/agent-instances/:instanceId
|
|
7
|
+
* - DELETE /api/redteam/campaigns/:id/agent-instances/:instanceId
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import type { ApiClient } from "../../api-client.js";
|
|
11
|
+
export declare const MANAGE_CAMPAIGN_AGENT_INSTANCE_NAME = "zivis_manage_campaign_agent_instance";
|
|
12
|
+
export declare const MANAGE_CAMPAIGN_AGENT_INSTANCE_DESCRIPTION = "Manage agent instance links for a campaign.\n\nActions:\n- add: link agent instance to campaign\n- update: update link settings (enabled/priority)\n- remove: unlink agent instance from campaign";
|
|
13
|
+
export declare const MANAGE_CAMPAIGN_AGENT_INSTANCE_SCHEMA: {
|
|
14
|
+
campaign_id: z.ZodString;
|
|
15
|
+
action: z.ZodEnum<{
|
|
16
|
+
update: "update";
|
|
17
|
+
add: "add";
|
|
18
|
+
remove: "remove";
|
|
19
|
+
}>;
|
|
20
|
+
agent_instance_id: z.ZodString;
|
|
21
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
22
|
+
priority: z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
};
|
|
24
|
+
export declare function createManageCampaignAgentInstanceHandler(apiClient: ApiClient): (params: {
|
|
25
|
+
campaign_id: string;
|
|
26
|
+
action: "add" | "update" | "remove";
|
|
27
|
+
agent_instance_id: string;
|
|
28
|
+
enabled?: boolean;
|
|
29
|
+
priority?: number;
|
|
30
|
+
}) => Promise<{
|
|
31
|
+
content: {
|
|
32
|
+
type: "text";
|
|
33
|
+
text: string;
|
|
34
|
+
}[];
|
|
35
|
+
isError?: undefined;
|
|
36
|
+
} | {
|
|
37
|
+
content: {
|
|
38
|
+
type: "text";
|
|
39
|
+
text: string;
|
|
40
|
+
}[];
|
|
41
|
+
isError: boolean;
|
|
42
|
+
}>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_manage_campaign_agent_instance — Add/update/remove agent instance link on campaign
|
|
3
|
+
*
|
|
4
|
+
* Maps to:
|
|
5
|
+
* - POST /api/redteam/campaigns/:id/agent-instances
|
|
6
|
+
* - PATCH /api/redteam/campaigns/:id/agent-instances/:instanceId
|
|
7
|
+
* - DELETE /api/redteam/campaigns/:id/agent-instances/:instanceId
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { sanitizeResponse } from "../../sanitize.js";
|
|
11
|
+
export const MANAGE_CAMPAIGN_AGENT_INSTANCE_NAME = "zivis_manage_campaign_agent_instance";
|
|
12
|
+
export const MANAGE_CAMPAIGN_AGENT_INSTANCE_DESCRIPTION = `Manage agent instance links for a campaign.
|
|
13
|
+
|
|
14
|
+
Actions:
|
|
15
|
+
- add: link agent instance to campaign
|
|
16
|
+
- update: update link settings (enabled/priority)
|
|
17
|
+
- remove: unlink agent instance from campaign`;
|
|
18
|
+
export const MANAGE_CAMPAIGN_AGENT_INSTANCE_SCHEMA = {
|
|
19
|
+
campaign_id: z.string().describe("Campaign UUID"),
|
|
20
|
+
action: z.enum(["add", "update", "remove"]).describe("Agent instance link action"),
|
|
21
|
+
agent_instance_id: z.string().describe("Agent instance UUID"),
|
|
22
|
+
enabled: z.boolean().optional().describe("Enable/disable this link"),
|
|
23
|
+
priority: z.number().min(0).max(1000).optional().describe("Execution priority"),
|
|
24
|
+
};
|
|
25
|
+
export function createManageCampaignAgentInstanceHandler(apiClient) {
|
|
26
|
+
return async (params) => {
|
|
27
|
+
try {
|
|
28
|
+
const { campaign_id, action, agent_instance_id } = params;
|
|
29
|
+
let data;
|
|
30
|
+
if (action === "add") {
|
|
31
|
+
data = await apiClient.post(`/api/redteam/campaigns/${campaign_id}/agent-instances`, {
|
|
32
|
+
agentInstanceId: agent_instance_id,
|
|
33
|
+
priority: params.priority,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
else if (action === "update") {
|
|
37
|
+
const body = {};
|
|
38
|
+
if (params.enabled !== undefined)
|
|
39
|
+
body.enabled = params.enabled;
|
|
40
|
+
if (params.priority !== undefined)
|
|
41
|
+
body.priority = params.priority;
|
|
42
|
+
data = await apiClient.patch(`/api/redteam/campaigns/${campaign_id}/agent-instances/${agent_instance_id}`, body);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
data = await apiClient.del(`/api/redteam/campaigns/${campaign_id}/agent-instances/${agent_instance_id}`);
|
|
46
|
+
}
|
|
47
|
+
const sanitized = sanitizeResponse({
|
|
48
|
+
action,
|
|
49
|
+
campaign_id,
|
|
50
|
+
agent_instance_id,
|
|
51
|
+
result: data,
|
|
52
|
+
});
|
|
53
|
+
return {
|
|
54
|
+
content: [{ type: "text", text: JSON.stringify(sanitized, null, 2) }],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
const message = err instanceof Error
|
|
59
|
+
? err.message
|
|
60
|
+
: "Failed to manage campaign agent instance";
|
|
61
|
+
return {
|
|
62
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
63
|
+
isError: true,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=manage-campaign-agent-instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manage-campaign-agent-instance.js","sourceRoot":"","sources":["../../../src/tools/enterprise/manage-campaign-agent-instance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_manage_campaign_target — Add/update/remove target link on campaign
|
|
3
|
+
*
|
|
4
|
+
* Maps to:
|
|
5
|
+
* - POST /api/redteam/campaigns/:id/targets
|
|
6
|
+
* - PATCH /api/redteam/campaigns/:id/targets/:targetId
|
|
7
|
+
* - DELETE /api/redteam/campaigns/:id/targets/:targetId
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import type { ApiClient } from "../../api-client.js";
|
|
11
|
+
export declare const MANAGE_CAMPAIGN_TARGET_NAME = "zivis_manage_campaign_target";
|
|
12
|
+
export declare const MANAGE_CAMPAIGN_TARGET_DESCRIPTION = "Manage target assignments for a campaign.\n\nActions:\n- add: add a target to campaign\n- update: update target link settings (enabled/priority/custom_config)\n- remove: remove target from campaign";
|
|
13
|
+
export declare const MANAGE_CAMPAIGN_TARGET_SCHEMA: {
|
|
14
|
+
campaign_id: z.ZodString;
|
|
15
|
+
action: z.ZodEnum<{
|
|
16
|
+
update: "update";
|
|
17
|
+
add: "add";
|
|
18
|
+
remove: "remove";
|
|
19
|
+
}>;
|
|
20
|
+
target_id: z.ZodString;
|
|
21
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
22
|
+
priority: z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
custom_config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
24
|
+
};
|
|
25
|
+
export declare function createManageCampaignTargetHandler(apiClient: ApiClient): (params: {
|
|
26
|
+
campaign_id: string;
|
|
27
|
+
action: "add" | "update" | "remove";
|
|
28
|
+
target_id: string;
|
|
29
|
+
enabled?: boolean;
|
|
30
|
+
priority?: number;
|
|
31
|
+
custom_config?: Record<string, unknown>;
|
|
32
|
+
}) => Promise<{
|
|
33
|
+
content: {
|
|
34
|
+
type: "text";
|
|
35
|
+
text: string;
|
|
36
|
+
}[];
|
|
37
|
+
isError?: undefined;
|
|
38
|
+
} | {
|
|
39
|
+
content: {
|
|
40
|
+
type: "text";
|
|
41
|
+
text: string;
|
|
42
|
+
}[];
|
|
43
|
+
isError: boolean;
|
|
44
|
+
}>;
|