@zivis/mcp 0.1.0-alpha.18 → 0.1.0-alpha.2
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 +0 -8
- package/dist/api-client.js +3 -35
- package/dist/api-client.js.map +1 -1
- package/dist/auth/index.d.ts +5 -8
- package/dist/auth/index.js +17 -32
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/keychain.d.ts +5 -6
- package/dist/auth/keychain.js +45 -50
- package/dist/auth/keychain.js.map +1 -1
- package/dist/auth/oauth.d.ts +0 -18
- package/dist/auth/oauth.js +6 -55
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/sessions.d.ts +4 -5
- package/dist/auth/sessions.js +14 -20
- package/dist/auth/sessions.js.map +1 -1
- package/dist/auth/token-refresh.d.ts +2 -2
- package/dist/auth/token-refresh.js +9 -42
- package/dist/auth/token-refresh.js.map +1 -1
- package/dist/cli.js +20 -32
- package/dist/cli.js.map +1 -1
- package/dist/project-binding.d.ts +0 -6
- package/dist/project-binding.js +0 -21
- package/dist/project-binding.js.map +1 -1
- package/dist/server.js +6 -62
- package/dist/server.js.map +1 -1
- package/dist/tools/check-project.d.ts +4 -4
- package/dist/tools/check-project.js +63 -109
- package/dist/tools/check-project.js.map +1 -1
- package/dist/tools/check-repo-trust.d.ts +10 -4
- package/dist/tools/check-repo-trust.js +27 -56
- package/dist/tools/check-repo-trust.js.map +1 -1
- package/dist/tools/enterprise/list-agents.d.ts +1 -1
- package/dist/tools/enterprise/manage-finding.d.ts +1 -1
- package/dist/tools/get-finding-details.d.ts +10 -4
- package/dist/tools/get-finding-details.js +10 -28
- package/dist/tools/get-finding-details.js.map +1 -1
- package/dist/tools/get-findings.d.ts +10 -4
- package/dist/tools/get-findings.js +23 -44
- package/dist/tools/get-findings.js.map +1 -1
- package/dist/tools/list-applications.d.ts +1 -1
- package/dist/tools/list-scans.d.ts +10 -4
- package/dist/tools/list-scans.js +21 -55
- package/dist/tools/list-scans.js.map +1 -1
- package/dist/tools/list-test-scenarios.d.ts +10 -4
- package/dist/tools/list-test-scenarios.js +13 -41
- package/dist/tools/list-test-scenarios.js.map +1 -1
- package/dist/tools/local-scan.d.ts +1 -1
- package/dist/tools/open-in-ide.d.ts +1 -1
- package/dist/tools/setup-red-team-target.d.ts +12 -6
- package/dist/tools/setup-red-team-target.js +20 -51
- package/dist/tools/setup-red-team-target.js.map +1 -1
- package/dist/tools/triage-finding.d.ts +10 -4
- package/dist/tools/triage-finding.js +21 -30
- package/dist/tools/triage-finding.js.map +1 -1
- package/dist/types.d.ts +2 -42
- package/dist/types.js +23 -29
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/lib/next-steps.d.ts +0 -57
- package/dist/lib/next-steps.js +0 -45
- package/dist/lib/next-steps.js.map +0 -1
- package/dist/prompts/audit-dependencies.d.ts +0 -10
- package/dist/prompts/audit-dependencies.js +0 -56
- package/dist/prompts/audit-dependencies.js.map +0 -1
- package/dist/prompts/getting-started.d.ts +0 -12
- package/dist/prompts/getting-started.js +0 -48
- package/dist/prompts/getting-started.js.map +0 -1
- package/dist/prompts/index.d.ts +0 -14
- package/dist/prompts/index.js +0 -25
- package/dist/prompts/index.js.map +0 -1
- package/dist/prompts/prep-for-launch.d.ts +0 -9
- package/dist/prompts/prep-for-launch.js +0 -62
- package/dist/prompts/prep-for-launch.js.map +0 -1
- package/dist/prompts/secure-my-app.d.ts +0 -9
- package/dist/prompts/secure-my-app.js +0 -70
- package/dist/prompts/secure-my-app.js.map +0 -1
- package/dist/prompts/weekly-check.d.ts +0 -9
- package/dist/prompts/weekly-check.js +0 -48
- package/dist/prompts/weekly-check.js.map +0 -1
- package/dist/tools/enterprise/get-campaign.d.ts +0 -27
- package/dist/tools/enterprise/get-campaign.js +0 -31
- package/dist/tools/enterprise/get-campaign.js.map +0 -1
- package/dist/tools/enterprise/list-attack-scenarios.d.ts +0 -29
- package/dist/tools/enterprise/list-attack-scenarios.js +0 -69
- package/dist/tools/enterprise/list-attack-scenarios.js.map +0 -1
- package/dist/tools/enterprise/list-attack-step-library-tests.d.ts +0 -29
- package/dist/tools/enterprise/list-attack-step-library-tests.js +0 -61
- package/dist/tools/enterprise/list-attack-step-library-tests.js.map +0 -1
- package/dist/tools/enterprise/list-campaigns.d.ts +0 -37
- package/dist/tools/enterprise/list-campaigns.js +0 -60
- package/dist/tools/enterprise/list-campaigns.js.map +0 -1
- package/dist/tools/enterprise/list-threat-model-review-items.d.ts +0 -35
- package/dist/tools/enterprise/list-threat-model-review-items.js +0 -60
- package/dist/tools/enterprise/list-threat-model-review-items.js.map +0 -1
- package/dist/tools/enterprise/list-threat-model-versions.d.ts +0 -29
- package/dist/tools/enterprise/list-threat-model-versions.js +0 -60
- package/dist/tools/enterprise/list-threat-model-versions.js.map +0 -1
- package/dist/tools/enterprise/manage-campaign-agent-instance.d.ts +0 -42
- package/dist/tools/enterprise/manage-campaign-agent-instance.js +0 -68
- package/dist/tools/enterprise/manage-campaign-agent-instance.js.map +0 -1
- package/dist/tools/enterprise/manage-campaign-target.d.ts +0 -44
- package/dist/tools/enterprise/manage-campaign-target.js +0 -70
- package/dist/tools/enterprise/manage-campaign-target.js.map +0 -1
- package/dist/tools/enterprise/manage-campaign.d.ts +0 -62
- package/dist/tools/enterprise/manage-campaign.js +0 -114
- package/dist/tools/enterprise/manage-campaign.js.map +0 -1
- package/dist/tools/enterprise/manage-threat-model-analysis.d.ts +0 -52
- package/dist/tools/enterprise/manage-threat-model-analysis.js +0 -92
- package/dist/tools/enterprise/manage-threat-model-analysis.js.map +0 -1
- package/dist/tools/enterprise/manage-threat-model-review.d.ts +0 -47
- package/dist/tools/enterprise/manage-threat-model-review.js +0 -82
- package/dist/tools/enterprise/manage-threat-model-review.js.map +0 -1
- package/dist/tools/get-application-auth-config.d.ts +0 -27
- package/dist/tools/get-application-auth-config.js +0 -44
- package/dist/tools/get-application-auth-config.js.map +0 -1
- package/dist/tools/get-started.d.ts +0 -28
- package/dist/tools/get-started.js +0 -364
- package/dist/tools/get-started.js.map +0 -1
- package/dist/tools/manage-application.d.ts +0 -72
- package/dist/tools/manage-application.js +0 -138
- package/dist/tools/manage-application.js.map +0 -1
- package/dist/tools/manage-endpoint-lifecycle.d.ts +0 -90
- package/dist/tools/manage-endpoint-lifecycle.js +0 -191
- package/dist/tools/manage-endpoint-lifecycle.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prep-for-launch.js","sourceRoot":"","sources":["../../src/prompts/prep-for-launch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,cAAc,CACnB,iBAAiB,EACjB;QACE,WAAW,EACT,qIAAqI;QACvI,UAAU,EAAE,EAAE;KACf,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kEAsCgD;iBACvD;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* secure-my-app prompt
|
|
3
|
-
*
|
|
4
|
-
* For developers who know they have an app and want to test it.
|
|
5
|
-
* Skips the intro tour and goes straight to red team setup.
|
|
6
|
-
* In Cursor: /zivis-secure-my-app
|
|
7
|
-
*/
|
|
8
|
-
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
9
|
-
export declare function registerSecureMyAppPrompt(server: McpServer): void;
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* secure-my-app prompt
|
|
3
|
-
*
|
|
4
|
-
* For developers who know they have an app and want to test it.
|
|
5
|
-
* Skips the intro tour and goes straight to red team setup.
|
|
6
|
-
* In Cursor: /zivis-secure-my-app
|
|
7
|
-
*/
|
|
8
|
-
import { z } from "zod";
|
|
9
|
-
export function registerSecureMyAppPrompt(server) {
|
|
10
|
-
server.registerPrompt("secure-my-app", {
|
|
11
|
-
description: "Set up security testing for an app I'm building. Walks through registering the target and picking a test to run.",
|
|
12
|
-
argsSchema: {
|
|
13
|
-
app_kind: z
|
|
14
|
-
.enum(["chatbot", "web_app", "api", "unknown"])
|
|
15
|
-
.optional()
|
|
16
|
-
.describe("What kind of app are you testing? chatbot = LLM/AI assistant, web_app = browser app, api = REST/GraphQL API, unknown = I'll describe it."),
|
|
17
|
-
target_url: z
|
|
18
|
-
.string()
|
|
19
|
-
.optional()
|
|
20
|
-
.describe("URL of the running app (e.g. https://chat.example.com/api/chat). Provide this if you have it."),
|
|
21
|
-
},
|
|
22
|
-
}, async (args) => {
|
|
23
|
-
const kindHint = args.app_kind && args.app_kind !== "unknown"
|
|
24
|
-
? `The user says their app is a ${args.app_kind}.`
|
|
25
|
-
: "The user hasn't specified what kind of app they have yet — ask them.";
|
|
26
|
-
const urlHint = args.target_url
|
|
27
|
-
? `The user provided this URL: ${args.target_url}`
|
|
28
|
-
: "No URL was provided yet — you'll need to ask.";
|
|
29
|
-
return {
|
|
30
|
-
messages: [
|
|
31
|
-
{
|
|
32
|
-
role: "user",
|
|
33
|
-
content: {
|
|
34
|
-
type: "text",
|
|
35
|
-
text: `I want to set up security testing for an app I'm building.
|
|
36
|
-
|
|
37
|
-
Context:
|
|
38
|
-
- ${kindHint}
|
|
39
|
-
- ${urlHint}
|
|
40
|
-
|
|
41
|
-
Please follow these steps:
|
|
42
|
-
|
|
43
|
-
1. If you don't already know what kind of app it is, ask: "Is this a chatbot/AI assistant, a website, or a REST/GraphQL API?"
|
|
44
|
-
|
|
45
|
-
2. If you don't have a URL yet, ask: "What's the URL of your running app? (e.g. https://myapp.com)"
|
|
46
|
-
|
|
47
|
-
3. Once you have the app kind and URL, call \`zivis_setup_red_team_target\` with:
|
|
48
|
-
- target_url = the URL they gave you
|
|
49
|
-
- target_type = "ai_chat" for chatbots, "web_app" for websites, "api" for APIs
|
|
50
|
-
- auto_scan = false (ask before running a scan)
|
|
51
|
-
|
|
52
|
-
4. After the target is set up, call \`zivis_list_test_scenarios\` and show the user the top 3 relevant scenarios as a numbered list. Use plain names — not IDs.
|
|
53
|
-
|
|
54
|
-
5. Ask: "Which of these do you want to run? I'll start with a quick scan (5-10 minutes) unless you want a thorough one."
|
|
55
|
-
|
|
56
|
-
6. When the user picks one, call \`zivis_run_test_scenario\` with:
|
|
57
|
-
- scenario_id = the ID of their chosen scenario
|
|
58
|
-
- intensity = 1 (quick) unless they explicitly ask for thorough (3)
|
|
59
|
-
|
|
60
|
-
Ground rules:
|
|
61
|
-
- Speak in plain English. No security jargon unless the user uses it first.
|
|
62
|
-
- Never run a paid scan without confirming with the user first.
|
|
63
|
-
- Never assume you know the URL — always confirm.`,
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
],
|
|
67
|
-
};
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=secure-my-app.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"secure-my-app.js","sourceRoot":"","sources":["../../src/prompts/secure-my-app.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,cAAc,CACnB,eAAe,EACf;QACE,WAAW,EACT,kHAAkH;QACpH,UAAU,EAAE;YACV,QAAQ,EAAE,CAAC;iBACR,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;iBAC9C,QAAQ,EAAE;iBACV,QAAQ,CACP,0IAA0I,CAC3I;YACH,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,+FAA+F,CAChG;SACJ;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAC3D,CAAC,CAAC,gCAAgC,IAAI,CAAC,QAAQ,GAAG;YAClD,CAAC,CAAC,sEAAsE,CAAC;QAE3E,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU;YAC7B,CAAC,CAAC,+BAA+B,IAAI,CAAC,UAAU,EAAE;YAClD,CAAC,CAAC,+CAA+C,CAAC;QAEpD,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE;;;IAGhB,QAAQ;IACR,OAAO;;;;;;;;;;;;;;;;;;;;;;;;kDAwBuC;qBACrC;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* weekly-check prompt
|
|
3
|
-
*
|
|
4
|
-
* Re-runs the security pulse for this project. Designed to be triggered
|
|
5
|
-
* every Monday (or whenever the user wants a status update).
|
|
6
|
-
* In Cursor: /zivis-weekly-check
|
|
7
|
-
*/
|
|
8
|
-
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
9
|
-
export declare function registerWeeklyCheckPrompt(server: McpServer): void;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* weekly-check prompt
|
|
3
|
-
*
|
|
4
|
-
* Re-runs the security pulse for this project. Designed to be triggered
|
|
5
|
-
* every Monday (or whenever the user wants a status update).
|
|
6
|
-
* In Cursor: /zivis-weekly-check
|
|
7
|
-
*/
|
|
8
|
-
export function registerWeeklyCheckPrompt(server) {
|
|
9
|
-
server.registerPrompt("weekly-check", {
|
|
10
|
-
description: "Get a quick security status update for this week. Shows new findings, scan activity, and what to focus on.",
|
|
11
|
-
argsSchema: {},
|
|
12
|
-
}, async () => ({
|
|
13
|
-
messages: [
|
|
14
|
-
{
|
|
15
|
-
role: "user",
|
|
16
|
-
content: {
|
|
17
|
-
type: "text",
|
|
18
|
-
text: `Give me a quick security status update for this project — what's changed or needs attention this week.
|
|
19
|
-
|
|
20
|
-
Please do the following:
|
|
21
|
-
|
|
22
|
-
**1. Open findings pulse**
|
|
23
|
-
Call \`zivis_get_findings\` with status="open".
|
|
24
|
-
- How many open issues are there total?
|
|
25
|
-
- List any critical or high findings by title (one line each).
|
|
26
|
-
- How does this compare to last week? (If you don't know, just show the current state.)
|
|
27
|
-
|
|
28
|
-
**2. Recent scan activity**
|
|
29
|
-
Call \`zivis_list_scans\` with limit=5.
|
|
30
|
-
- What scans ran this week?
|
|
31
|
-
- Did any complete with new findings?
|
|
32
|
-
- Are any still running?
|
|
33
|
-
|
|
34
|
-
**3. Top priority action**
|
|
35
|
-
Based on the above, what is the single most important security action to take this week?
|
|
36
|
-
- If there are critical findings: "Fix [finding title] — it's a critical issue."
|
|
37
|
-
- If a scan is overdue: "Run a scan — the last one was X days ago."
|
|
38
|
-
- If everything looks good: "Keep the streak going — schedule a scan for next week."
|
|
39
|
-
|
|
40
|
-
Format the response as a brief weekly digest, not a full security report. Bullet points are better than paragraphs. Keep it under 300 words.
|
|
41
|
-
|
|
42
|
-
If I want to dig into a specific issue, I'll ask — don't pre-load all the details.`,
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
],
|
|
46
|
-
}));
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=weekly-check.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"weekly-check.js","sourceRoot":"","sources":["../../src/prompts/weekly-check.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,cAAc,CACnB,cAAc,EACd;QACE,WAAW,EACT,4GAA4G;QAC9G,UAAU,EAAE,EAAE;KACf,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;mFAwBiE;iBACxE;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* zivis_get_campaign — Get campaign details
|
|
3
|
-
*
|
|
4
|
-
* Maps to: GET /api/redteam/campaigns/:id
|
|
5
|
-
*/
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
import type { ApiClient } from "../../api-client.js";
|
|
8
|
-
export declare const GET_CAMPAIGN_NAME = "zivis_get_campaign";
|
|
9
|
-
export declare const GET_CAMPAIGN_DESCRIPTION = "Get full details for one red-team campaign including linked agents, targets, and recent scans.";
|
|
10
|
-
export declare const GET_CAMPAIGN_SCHEMA: {
|
|
11
|
-
campaign_id: z.ZodString;
|
|
12
|
-
};
|
|
13
|
-
export declare function createGetCampaignHandler(apiClient: ApiClient): (params: {
|
|
14
|
-
campaign_id: string;
|
|
15
|
-
}) => Promise<{
|
|
16
|
-
content: {
|
|
17
|
-
type: "text";
|
|
18
|
-
text: string;
|
|
19
|
-
}[];
|
|
20
|
-
isError?: undefined;
|
|
21
|
-
} | {
|
|
22
|
-
content: {
|
|
23
|
-
type: "text";
|
|
24
|
-
text: string;
|
|
25
|
-
}[];
|
|
26
|
-
isError: boolean;
|
|
27
|
-
}>;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* zivis_get_campaign — Get campaign details
|
|
3
|
-
*
|
|
4
|
-
* Maps to: GET /api/redteam/campaigns/:id
|
|
5
|
-
*/
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
import { sanitizeResponse } from "../../sanitize.js";
|
|
8
|
-
export const GET_CAMPAIGN_NAME = "zivis_get_campaign";
|
|
9
|
-
export const GET_CAMPAIGN_DESCRIPTION = `Get full details for one red-team campaign including linked agents, targets, and recent scans.`;
|
|
10
|
-
export const GET_CAMPAIGN_SCHEMA = {
|
|
11
|
-
campaign_id: z.string().describe("Campaign UUID (from zivis_list_campaigns)"),
|
|
12
|
-
};
|
|
13
|
-
export function createGetCampaignHandler(apiClient) {
|
|
14
|
-
return async (params) => {
|
|
15
|
-
try {
|
|
16
|
-
const data = await apiClient.get(`/api/redteam/campaigns/${params.campaign_id}`);
|
|
17
|
-
const sanitized = sanitizeResponse(data);
|
|
18
|
-
return {
|
|
19
|
-
content: [{ type: "text", text: JSON.stringify(sanitized, null, 2) }],
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
catch (err) {
|
|
23
|
-
const message = err instanceof Error ? err.message : "Failed to get campaign";
|
|
24
|
-
return {
|
|
25
|
-
content: [{ type: "text", text: `Error: ${message}` }],
|
|
26
|
-
isError: true,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=get-campaign.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-campaign.js","sourceRoot":"","sources":["../../../src/tools/enterprise/get-campaign.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,iBAAiB,GAAG,oBAAoB,CAAC;AAEtD,MAAM,CAAC,MAAM,wBAAwB,GAAG,gGAAgG,CAAC;AAEzI,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CAC9E,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,SAAoB;IAC3D,OAAO,KAAK,EAAE,MAA+B,EAAE,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,0BAA0B,MAAM,CAAC,WAAW,EAAE,CAC/C,CAAC;YAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACzC,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,wBAAwB,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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
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 type { ApiClient } from "../../api-client.js";
|
|
8
|
-
export declare const LIST_ATTACK_SCENARIOS_NAME = "zivis_list_attack_scenarios";
|
|
9
|
-
export declare const LIST_ATTACK_SCENARIOS_DESCRIPTION = "List attack scenarios for a threat model, including their path steps.\n\nUse this when you need scenario IDs or attack path step IDs for follow-up tools (for example, step-level library test mappings).\n\nIMPORTANT: threat_model_id must be a threat model UUID (from zivis_list_threat_models), not a scan ID.";
|
|
10
|
-
export declare const LIST_ATTACK_SCENARIOS_SCHEMA: {
|
|
11
|
-
threat_model_id: z.ZodString;
|
|
12
|
-
limit: z.ZodDefault<z.ZodNumber>;
|
|
13
|
-
};
|
|
14
|
-
export declare function createListAttackScenariosHandler(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
|
-
}>;
|
|
@@ -1,69 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-attack-scenarios.js","sourceRoot":"","sources":["../../../src/tools/enterprise/list-attack-scenarios.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,0BAA0B,GAAG,6BAA6B,CAAC;AAExE,MAAM,CAAC,MAAM,iCAAiC,GAAG;;;;uGAIsD,CAAC;AAExG,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,CAAC,kEAAkE,CAAC;IAC/E,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;CAC/D,CAAC;AA8BF,MAAM,UAAU,gCAAgC,CAAC,SAAoB;IACnE,OAAO,KAAK,EAAE,MAAmD,EAAE,EAAE;QACnE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,sBAAsB,MAAM,CAAC,eAAe,mBAAmB,CAChE,CAAC;YAEF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAChF,WAAW,EAAE,QAAQ,CAAC,EAAE;gBACxB,UAAU,EAAE,QAAQ,CAAC,SAAS;gBAC9B,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,aAAa,EAAE,QAAQ,CAAC,YAAY;gBACpC,UAAU,EAAE,QAAQ,CAAC,SAAS;gBAC9B,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC;gBAChD,UAAU,EAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;gBAC3C,UAAU,EAAE,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACpD,OAAO,EAAE,IAAI,CAAC,EAAE;oBAChB,UAAU,EAAE,IAAI,CAAC,SAAS;oBAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,IAAI,CAAC;iBACnD,CAAC,CAAC;gBACH,UAAU,EAAE,QAAQ,CAAC,SAAS;gBAC9B,UAAU,EAAE,QAAQ,CAAC,SAAS;aAC/B,CAAC,CAAC,CAAC;YAEJ,MAAM,SAAS,GAAG,gBAAgB,CAAC;gBACjC,YAAY,EAAE,IAAI,CAAC,WAAW,IAAI,KAAK;gBACvC,mBAAmB,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK;gBAC7C,cAAc,EAAE,SAAS,CAAC,MAAM;gBAChC,SAAS;aACV,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,iCAAiC,CAAC;YACzE,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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
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
|
-
}>;
|
|
@@ -1,61 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
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
|
-
}>;
|
|
@@ -1,60 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,35 +0,0 @@
|
|
|
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
|
-
}>;
|
|
@@ -1,60 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-threat-model-review-items.js","sourceRoot":"","sources":["../../../src/tools/enterprise/list-threat-model-review-items.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;;+GAEqD,CAAC;AAEhH,MAAM,CAAC,MAAM,qCAAqC,GAAG;IACnD,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,CAAC,mDAAmD,CAAC;IAChE,SAAS,EAAE,CAAC;SACT,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;SAC1D,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,sCAAsC,CAAC;CACpD,CAAC;AAUF,MAAM,UAAU,uCAAuC,CAAC,SAAoB;IAC1E,OAAO,KAAK,EAAE,MAAuD,EAAE,EAAE;QACvE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,sBAAsB,MAAM,CAAC,eAAe,eAAe,CAC5D,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;YAC3C,MAAM,QAAQ,GAAG;gBACf,QAAQ,EACN,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;gBACzE,MAAM,EAAE,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;gBAC3E,SAAS,EACP,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;gBAC3E,UAAU,EACR,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;aAC9E,CAAC;YAEF,MAAM,MAAM,GAAG;gBACb,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM;gBAClC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;gBAC9B,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM;gBACpC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM;gBACtC,KAAK,EACH,QAAQ,CAAC,QAAQ,CAAC,MAAM;oBACxB,QAAQ,CAAC,MAAM,CAAC,MAAM;oBACtB,QAAQ,CAAC,SAAS,CAAC,MAAM;oBACzB,QAAQ,CAAC,UAAU,CAAC,MAAM;aAC7B,CAAC;YAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC;gBACjC,SAAS,EAAE,QAAQ;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM;gBAC7B,GAAG,QAAQ;aACZ,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,0CAA0C,CAAC;YAClF,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"}
|