@zivis/mcp 0.1.0-alpha.13 → 0.1.0-alpha.14
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/server.js +38 -1
- package/dist/server.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-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/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/package.json +1 -1
|
@@ -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":"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"}
|
|
@@ -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
|
+
}>;
|
|
@@ -0,0 +1,70 @@
|
|
|
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 { sanitizeResponse } from "../../sanitize.js";
|
|
11
|
+
export const MANAGE_CAMPAIGN_TARGET_NAME = "zivis_manage_campaign_target";
|
|
12
|
+
export const MANAGE_CAMPAIGN_TARGET_DESCRIPTION = `Manage target assignments for a campaign.
|
|
13
|
+
|
|
14
|
+
Actions:
|
|
15
|
+
- add: add a target to campaign
|
|
16
|
+
- update: update target link settings (enabled/priority/custom_config)
|
|
17
|
+
- remove: remove target from campaign`;
|
|
18
|
+
export const MANAGE_CAMPAIGN_TARGET_SCHEMA = {
|
|
19
|
+
campaign_id: z.string().describe("Campaign UUID"),
|
|
20
|
+
action: z.enum(["add", "update", "remove"]).describe("Target link action"),
|
|
21
|
+
target_id: z.string().describe("Target UUID"),
|
|
22
|
+
enabled: z.boolean().optional().describe("Enable/disable target within campaign"),
|
|
23
|
+
priority: z.number().min(0).max(1000).optional().describe("Execution priority"),
|
|
24
|
+
custom_config: z.record(z.string(), z.unknown()).optional().describe("Per-target config"),
|
|
25
|
+
};
|
|
26
|
+
export function createManageCampaignTargetHandler(apiClient) {
|
|
27
|
+
return async (params) => {
|
|
28
|
+
try {
|
|
29
|
+
const { campaign_id, action, target_id } = params;
|
|
30
|
+
let data;
|
|
31
|
+
if (action === "add") {
|
|
32
|
+
data = await apiClient.post(`/api/redteam/campaigns/${campaign_id}/targets`, {
|
|
33
|
+
targetId: target_id,
|
|
34
|
+
priority: params.priority,
|
|
35
|
+
customConfig: params.custom_config,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
else if (action === "update") {
|
|
39
|
+
const body = {};
|
|
40
|
+
if (params.enabled !== undefined)
|
|
41
|
+
body.enabled = params.enabled;
|
|
42
|
+
if (params.priority !== undefined)
|
|
43
|
+
body.priority = params.priority;
|
|
44
|
+
if (params.custom_config !== undefined)
|
|
45
|
+
body.customConfig = params.custom_config;
|
|
46
|
+
data = await apiClient.patch(`/api/redteam/campaigns/${campaign_id}/targets/${target_id}`, body);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
data = await apiClient.del(`/api/redteam/campaigns/${campaign_id}/targets/${target_id}`);
|
|
50
|
+
}
|
|
51
|
+
const sanitized = sanitizeResponse({
|
|
52
|
+
action,
|
|
53
|
+
campaign_id,
|
|
54
|
+
target_id,
|
|
55
|
+
result: data,
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
content: [{ type: "text", text: JSON.stringify(sanitized, null, 2) }],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
const message = err instanceof Error ? err.message : "Failed to manage campaign target";
|
|
63
|
+
return {
|
|
64
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
65
|
+
isError: true,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=manage-campaign-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manage-campaign-target.js","sourceRoot":"","sources":["../../../src/tools/enterprise/manage-campaign-target.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_manage_campaign — Create/update/delete campaign
|
|
3
|
+
*
|
|
4
|
+
* Maps to:
|
|
5
|
+
* - POST /api/redteam/campaigns
|
|
6
|
+
* - PATCH /api/redteam/campaigns/:id
|
|
7
|
+
* - DELETE /api/redteam/campaigns/:id
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import type { ApiClient } from "../../api-client.js";
|
|
11
|
+
export declare const MANAGE_CAMPAIGN_NAME = "zivis_manage_campaign";
|
|
12
|
+
export declare const MANAGE_CAMPAIGN_DESCRIPTION = "Create, update, or delete a red-team campaign.\n\nActions:\n- create: create a new campaign (requires name)\n- update: patch campaign fields (requires campaign_id)\n- delete: remove campaign (requires campaign_id)";
|
|
13
|
+
export declare const MANAGE_CAMPAIGN_SCHEMA: {
|
|
14
|
+
action: z.ZodEnum<{
|
|
15
|
+
create: "create";
|
|
16
|
+
update: "update";
|
|
17
|
+
delete: "delete";
|
|
18
|
+
}>;
|
|
19
|
+
campaign_id: z.ZodOptional<z.ZodString>;
|
|
20
|
+
name: z.ZodOptional<z.ZodString>;
|
|
21
|
+
description: z.ZodOptional<z.ZodString>;
|
|
22
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
23
|
+
completed: "completed";
|
|
24
|
+
draft: "draft";
|
|
25
|
+
archived: "archived";
|
|
26
|
+
active: "active";
|
|
27
|
+
paused: "paused";
|
|
28
|
+
}>>;
|
|
29
|
+
objective: z.ZodOptional<z.ZodString>;
|
|
30
|
+
methodology: z.ZodOptional<z.ZodString>;
|
|
31
|
+
assessment_context_id: z.ZodOptional<z.ZodString>;
|
|
32
|
+
categories: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
33
|
+
target_endpoint: z.ZodOptional<z.ZodString>;
|
|
34
|
+
target_model: z.ZodOptional<z.ZodString>;
|
|
35
|
+
target_provider: z.ZodOptional<z.ZodString>;
|
|
36
|
+
};
|
|
37
|
+
export declare function createManageCampaignHandler(apiClient: ApiClient): (params: {
|
|
38
|
+
action: "create" | "update" | "delete";
|
|
39
|
+
campaign_id?: string;
|
|
40
|
+
name?: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
status?: "draft" | "active" | "paused" | "completed" | "archived";
|
|
43
|
+
objective?: string;
|
|
44
|
+
methodology?: string;
|
|
45
|
+
assessment_context_id?: string;
|
|
46
|
+
categories?: string[];
|
|
47
|
+
target_endpoint?: string;
|
|
48
|
+
target_model?: string;
|
|
49
|
+
target_provider?: string;
|
|
50
|
+
}) => Promise<{
|
|
51
|
+
content: {
|
|
52
|
+
type: "text";
|
|
53
|
+
text: string;
|
|
54
|
+
}[];
|
|
55
|
+
isError: boolean;
|
|
56
|
+
} | {
|
|
57
|
+
content: {
|
|
58
|
+
type: "text";
|
|
59
|
+
text: string;
|
|
60
|
+
}[];
|
|
61
|
+
isError?: undefined;
|
|
62
|
+
}>;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_manage_campaign — Create/update/delete campaign
|
|
3
|
+
*
|
|
4
|
+
* Maps to:
|
|
5
|
+
* - POST /api/redteam/campaigns
|
|
6
|
+
* - PATCH /api/redteam/campaigns/:id
|
|
7
|
+
* - DELETE /api/redteam/campaigns/:id
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { sanitizeResponse } from "../../sanitize.js";
|
|
11
|
+
export const MANAGE_CAMPAIGN_NAME = "zivis_manage_campaign";
|
|
12
|
+
export const MANAGE_CAMPAIGN_DESCRIPTION = `Create, update, or delete a red-team campaign.
|
|
13
|
+
|
|
14
|
+
Actions:
|
|
15
|
+
- create: create a new campaign (requires name)
|
|
16
|
+
- update: patch campaign fields (requires campaign_id)
|
|
17
|
+
- delete: remove campaign (requires campaign_id)`;
|
|
18
|
+
export const MANAGE_CAMPAIGN_SCHEMA = {
|
|
19
|
+
action: z.enum(["create", "update", "delete"]).describe("CRUD action"),
|
|
20
|
+
campaign_id: z.string().optional().describe("Required for update/delete"),
|
|
21
|
+
name: z.string().optional().describe("Campaign name (required for create)"),
|
|
22
|
+
description: z.string().optional().describe("Campaign description"),
|
|
23
|
+
status: z
|
|
24
|
+
.enum(["draft", "active", "paused", "completed", "archived"])
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Campaign status (for update)"),
|
|
27
|
+
objective: z.string().optional().describe("Campaign objective"),
|
|
28
|
+
methodology: z.string().optional().describe("Methodology (e.g., stride, owasp)"),
|
|
29
|
+
assessment_context_id: z.string().optional().describe("Assessment context UUID"),
|
|
30
|
+
categories: z.array(z.string()).optional().describe("Category tags"),
|
|
31
|
+
target_endpoint: z.string().optional().describe("Legacy single-target endpoint"),
|
|
32
|
+
target_model: z.string().optional().describe("Legacy single-target model name"),
|
|
33
|
+
target_provider: z.string().optional().describe("Legacy single-target provider"),
|
|
34
|
+
};
|
|
35
|
+
export function createManageCampaignHandler(apiClient) {
|
|
36
|
+
return async (params) => {
|
|
37
|
+
try {
|
|
38
|
+
const { action, campaign_id } = params;
|
|
39
|
+
let data;
|
|
40
|
+
if ((action === "update" || action === "delete") && !campaign_id) {
|
|
41
|
+
return {
|
|
42
|
+
content: [
|
|
43
|
+
{ type: "text", text: "Error: campaign_id is required for update/delete" },
|
|
44
|
+
],
|
|
45
|
+
isError: true,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (action === "create" && !params.name) {
|
|
49
|
+
return {
|
|
50
|
+
content: [{ type: "text", text: "Error: name is required for create" }],
|
|
51
|
+
isError: true,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if (action === "create") {
|
|
55
|
+
data = await apiClient.post("/api/redteam/campaigns", {
|
|
56
|
+
name: params.name,
|
|
57
|
+
description: params.description,
|
|
58
|
+
status: params.status,
|
|
59
|
+
objective: params.objective,
|
|
60
|
+
methodology: params.methodology,
|
|
61
|
+
assessmentContextId: params.assessment_context_id,
|
|
62
|
+
categories: params.categories,
|
|
63
|
+
targetEndpoint: params.target_endpoint,
|
|
64
|
+
targetModel: params.target_model,
|
|
65
|
+
targetProvider: params.target_provider,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else if (action === "update") {
|
|
69
|
+
const body = {};
|
|
70
|
+
if (params.name !== undefined)
|
|
71
|
+
body.name = params.name;
|
|
72
|
+
if (params.description !== undefined)
|
|
73
|
+
body.description = params.description;
|
|
74
|
+
if (params.status !== undefined)
|
|
75
|
+
body.status = params.status;
|
|
76
|
+
if (params.objective !== undefined)
|
|
77
|
+
body.objective = params.objective;
|
|
78
|
+
if (params.methodology !== undefined)
|
|
79
|
+
body.methodology = params.methodology;
|
|
80
|
+
if (params.assessment_context_id !== undefined) {
|
|
81
|
+
body.assessmentContextId = params.assessment_context_id;
|
|
82
|
+
}
|
|
83
|
+
if (params.categories !== undefined)
|
|
84
|
+
body.categories = params.categories;
|
|
85
|
+
if (params.target_endpoint !== undefined)
|
|
86
|
+
body.targetEndpoint = params.target_endpoint;
|
|
87
|
+
if (params.target_model !== undefined)
|
|
88
|
+
body.targetModel = params.target_model;
|
|
89
|
+
if (params.target_provider !== undefined)
|
|
90
|
+
body.targetProvider = params.target_provider;
|
|
91
|
+
data = await apiClient.patch(`/api/redteam/campaigns/${campaign_id}`, body);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
data = await apiClient.del(`/api/redteam/campaigns/${campaign_id}`);
|
|
95
|
+
}
|
|
96
|
+
const sanitized = sanitizeResponse({
|
|
97
|
+
action,
|
|
98
|
+
campaign_id,
|
|
99
|
+
result: data,
|
|
100
|
+
});
|
|
101
|
+
return {
|
|
102
|
+
content: [{ type: "text", text: JSON.stringify(sanitized, null, 2) }],
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
const message = err instanceof Error ? err.message : "Failed to manage campaign";
|
|
107
|
+
return {
|
|
108
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
109
|
+
isError: true,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=manage-campaign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manage-campaign.js","sourceRoot":"","sources":["../../../src/tools/enterprise/manage-campaign.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zivis_manage_threat_model_analysis — Start/status/regenerate analysis
|
|
3
|
+
*
|
|
4
|
+
* Maps to:
|
|
5
|
+
* - POST /api/threat-models/:id/analyze
|
|
6
|
+
* - GET /api/threat-models/:id/analyze/status
|
|
7
|
+
* - POST /api/threat-models/:id/regenerate
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import type { ApiClient } from "../../api-client.js";
|
|
11
|
+
export declare const MANAGE_THREAT_MODEL_ANALYSIS_NAME = "zivis_manage_threat_model_analysis";
|
|
12
|
+
export declare const MANAGE_THREAT_MODEL_ANALYSIS_DESCRIPTION = "Manage threat model analysis lifecycle.\n\nActions:\n- status: get current analysis status\n- start: trigger a new analysis run\n- regenerate: queue regeneration for stale scopes\n\nUse threat_model_id from zivis_list_threat_models.";
|
|
13
|
+
export declare const MANAGE_THREAT_MODEL_ANALYSIS_SCHEMA: {
|
|
14
|
+
threat_model_id: z.ZodString;
|
|
15
|
+
action: z.ZodEnum<{
|
|
16
|
+
status: "status";
|
|
17
|
+
start: "start";
|
|
18
|
+
regenerate: "regenerate";
|
|
19
|
+
}>;
|
|
20
|
+
analysis_config: z.ZodOptional<z.ZodObject<{
|
|
21
|
+
generate_dfd: z.ZodOptional<z.ZodBoolean>;
|
|
22
|
+
map_to_mitre: z.ZodOptional<z.ZodBoolean>;
|
|
23
|
+
include_dread: z.ZodOptional<z.ZodBoolean>;
|
|
24
|
+
include_compliance: z.ZodOptional<z.ZodBoolean>;
|
|
25
|
+
}, z.core.$strip>>;
|
|
26
|
+
scope_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
27
|
+
regenerate_all: z.ZodOptional<z.ZodBoolean>;
|
|
28
|
+
};
|
|
29
|
+
export declare function createManageThreatModelAnalysisHandler(apiClient: ApiClient): (params: {
|
|
30
|
+
threat_model_id: string;
|
|
31
|
+
action: "status" | "start" | "regenerate";
|
|
32
|
+
analysis_config?: {
|
|
33
|
+
generate_dfd?: boolean;
|
|
34
|
+
map_to_mitre?: boolean;
|
|
35
|
+
include_dread?: boolean;
|
|
36
|
+
include_compliance?: boolean;
|
|
37
|
+
};
|
|
38
|
+
scope_ids?: string[];
|
|
39
|
+
regenerate_all?: boolean;
|
|
40
|
+
}) => Promise<{
|
|
41
|
+
content: {
|
|
42
|
+
type: "text";
|
|
43
|
+
text: string;
|
|
44
|
+
}[];
|
|
45
|
+
isError?: undefined;
|
|
46
|
+
} | {
|
|
47
|
+
content: {
|
|
48
|
+
type: "text";
|
|
49
|
+
text: string;
|
|
50
|
+
}[];
|
|
51
|
+
isError: boolean;
|
|
52
|
+
}>;
|