@zivis/mcp 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/dist/api-client.d.ts +42 -0
  2. package/dist/api-client.js +145 -0
  3. package/dist/api-client.js.map +1 -0
  4. package/dist/auth/index.d.ts +29 -0
  5. package/dist/auth/index.js +73 -0
  6. package/dist/auth/index.js.map +1 -0
  7. package/dist/auth/jwt.d.ts +24 -0
  8. package/dist/auth/jwt.js +25 -0
  9. package/dist/auth/jwt.js.map +1 -0
  10. package/dist/auth/keychain.d.ts +34 -0
  11. package/dist/auth/keychain.js +272 -0
  12. package/dist/auth/keychain.js.map +1 -0
  13. package/dist/auth/oauth.d.ts +38 -0
  14. package/dist/auth/oauth.js +241 -0
  15. package/dist/auth/oauth.js.map +1 -0
  16. package/dist/auth/sessions.d.ts +28 -0
  17. package/dist/auth/sessions.js +69 -0
  18. package/dist/auth/sessions.js.map +1 -0
  19. package/dist/auth/token-refresh.d.ts +24 -0
  20. package/dist/auth/token-refresh.js +91 -0
  21. package/dist/auth/token-refresh.js.map +1 -0
  22. package/dist/cli.d.ts +23 -0
  23. package/dist/cli.js +962 -0
  24. package/dist/cli.js.map +1 -0
  25. package/dist/index.d.ts +8 -0
  26. package/dist/index.js +15 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/project-binding.d.ts +25 -0
  29. package/dist/project-binding.js +67 -0
  30. package/dist/project-binding.js.map +1 -0
  31. package/dist/resolve-application-id.d.ts +12 -0
  32. package/dist/resolve-application-id.js +21 -0
  33. package/dist/resolve-application-id.js.map +1 -0
  34. package/dist/sanitize.d.ts +23 -0
  35. package/dist/sanitize.js +125 -0
  36. package/dist/sanitize.js.map +1 -0
  37. package/dist/server.d.ts +14 -0
  38. package/dist/server.js +447 -0
  39. package/dist/server.js.map +1 -0
  40. package/dist/tools/check-project.d.ts +32 -0
  41. package/dist/tools/check-project.js +180 -0
  42. package/dist/tools/check-project.js.map +1 -0
  43. package/dist/tools/check-repo-trust.d.ts +33 -0
  44. package/dist/tools/check-repo-trust.js +212 -0
  45. package/dist/tools/check-repo-trust.js.map +1 -0
  46. package/dist/tools/create-diagram.d.ts +114 -0
  47. package/dist/tools/create-diagram.js +176 -0
  48. package/dist/tools/create-diagram.js.map +1 -0
  49. package/dist/tools/create-document.d.ts +28 -0
  50. package/dist/tools/create-document.js +53 -0
  51. package/dist/tools/create-document.js.map +1 -0
  52. package/dist/tools/discover-local-infra.d.ts +24 -0
  53. package/dist/tools/discover-local-infra.js +763 -0
  54. package/dist/tools/discover-local-infra.js.map +1 -0
  55. package/dist/tools/enterprise/capture-evidence.d.ts +54 -0
  56. package/dist/tools/enterprise/capture-evidence.js +72 -0
  57. package/dist/tools/enterprise/capture-evidence.js.map +1 -0
  58. package/dist/tools/enterprise/create-report-ticket.d.ts +34 -0
  59. package/dist/tools/enterprise/create-report-ticket.js +44 -0
  60. package/dist/tools/enterprise/create-report-ticket.js.map +1 -0
  61. package/dist/tools/enterprise/end-pentest-session.d.ts +33 -0
  62. package/dist/tools/enterprise/end-pentest-session.js +42 -0
  63. package/dist/tools/enterprise/end-pentest-session.js.map +1 -0
  64. package/dist/tools/enterprise/generate-report.d.ts +55 -0
  65. package/dist/tools/enterprise/generate-report.js +111 -0
  66. package/dist/tools/enterprise/generate-report.js.map +1 -0
  67. package/dist/tools/enterprise/get-org-zat.d.ts +27 -0
  68. package/dist/tools/enterprise/get-org-zat.js +62 -0
  69. package/dist/tools/enterprise/get-org-zat.js.map +1 -0
  70. package/dist/tools/enterprise/get-report-status.d.ts +27 -0
  71. package/dist/tools/enterprise/get-report-status.js +38 -0
  72. package/dist/tools/enterprise/get-report-status.js.map +1 -0
  73. package/dist/tools/enterprise/get-threat-model.d.ts +29 -0
  74. package/dist/tools/enterprise/get-threat-model.js +83 -0
  75. package/dist/tools/enterprise/get-threat-model.js.map +1 -0
  76. package/dist/tools/enterprise/list-agents.d.ts +42 -0
  77. package/dist/tools/enterprise/list-agents.js +95 -0
  78. package/dist/tools/enterprise/list-agents.js.map +1 -0
  79. package/dist/tools/enterprise/list-report-issues.d.ts +36 -0
  80. package/dist/tools/enterprise/list-report-issues.js +50 -0
  81. package/dist/tools/enterprise/list-report-issues.js.map +1 -0
  82. package/dist/tools/enterprise/list-threat-models.d.ts +36 -0
  83. package/dist/tools/enterprise/list-threat-models.js +82 -0
  84. package/dist/tools/enterprise/list-threat-models.js.map +1 -0
  85. package/dist/tools/enterprise/manage-actor.d.ts +58 -0
  86. package/dist/tools/enterprise/manage-actor.js +99 -0
  87. package/dist/tools/enterprise/manage-actor.js.map +1 -0
  88. package/dist/tools/enterprise/manage-attack-scenario.d.ts +70 -0
  89. package/dist/tools/enterprise/manage-attack-scenario.js +89 -0
  90. package/dist/tools/enterprise/manage-attack-scenario.js.map +1 -0
  91. package/dist/tools/enterprise/manage-component.d.ts +58 -0
  92. package/dist/tools/enterprise/manage-component.js +90 -0
  93. package/dist/tools/enterprise/manage-component.js.map +1 -0
  94. package/dist/tools/enterprise/manage-data-asset.d.ts +53 -0
  95. package/dist/tools/enterprise/manage-data-asset.js +90 -0
  96. package/dist/tools/enterprise/manage-data-asset.js.map +1 -0
  97. package/dist/tools/enterprise/manage-data-flow.d.ts +57 -0
  98. package/dist/tools/enterprise/manage-data-flow.js +98 -0
  99. package/dist/tools/enterprise/manage-data-flow.js.map +1 -0
  100. package/dist/tools/enterprise/manage-finding.d.ts +69 -0
  101. package/dist/tools/enterprise/manage-finding.js +106 -0
  102. package/dist/tools/enterprise/manage-finding.js.map +1 -0
  103. package/dist/tools/enterprise/manage-security-control.d.ts +59 -0
  104. package/dist/tools/enterprise/manage-security-control.js +96 -0
  105. package/dist/tools/enterprise/manage-security-control.js.map +1 -0
  106. package/dist/tools/enterprise/manage-test-case.d.ts +88 -0
  107. package/dist/tools/enterprise/manage-test-case.js +119 -0
  108. package/dist/tools/enterprise/manage-test-case.js.map +1 -0
  109. package/dist/tools/enterprise/promote-finding-to-issue.d.ts +36 -0
  110. package/dist/tools/enterprise/promote-finding-to-issue.js +65 -0
  111. package/dist/tools/enterprise/promote-finding-to-issue.js.map +1 -0
  112. package/dist/tools/enterprise/publish-report-version.d.ts +34 -0
  113. package/dist/tools/enterprise/publish-report-version.js +75 -0
  114. package/dist/tools/enterprise/publish-report-version.js.map +1 -0
  115. package/dist/tools/enterprise/publish-test-to-library.d.ts +31 -0
  116. package/dist/tools/enterprise/publish-test-to-library.js +40 -0
  117. package/dist/tools/enterprise/publish-test-to-library.js.map +1 -0
  118. package/dist/tools/enterprise/record-test-result.d.ts +67 -0
  119. package/dist/tools/enterprise/record-test-result.js +75 -0
  120. package/dist/tools/enterprise/record-test-result.js.map +1 -0
  121. package/dist/tools/enterprise/start-pentest-session.d.ts +35 -0
  122. package/dist/tools/enterprise/start-pentest-session.js +50 -0
  123. package/dist/tools/enterprise/start-pentest-session.js.map +1 -0
  124. package/dist/tools/enterprise/sync-report-section.d.ts +41 -0
  125. package/dist/tools/enterprise/sync-report-section.js +79 -0
  126. package/dist/tools/enterprise/sync-report-section.js.map +1 -0
  127. package/dist/tools/enterprise/update-report-issue.d.ts +55 -0
  128. package/dist/tools/enterprise/update-report-issue.js +69 -0
  129. package/dist/tools/enterprise/update-report-issue.js.map +1 -0
  130. package/dist/tools/generate-diagram.d.ts +36 -0
  131. package/dist/tools/generate-diagram.js +153 -0
  132. package/dist/tools/generate-diagram.js.map +1 -0
  133. package/dist/tools/get-agent-test-results.d.ts +41 -0
  134. package/dist/tools/get-agent-test-results.js +86 -0
  135. package/dist/tools/get-agent-test-results.js.map +1 -0
  136. package/dist/tools/get-application-overview.d.ts +27 -0
  137. package/dist/tools/get-application-overview.js +143 -0
  138. package/dist/tools/get-application-overview.js.map +1 -0
  139. package/dist/tools/get-application.d.ts +27 -0
  140. package/dist/tools/get-application.js +83 -0
  141. package/dist/tools/get-application.js.map +1 -0
  142. package/dist/tools/get-artifact-content.d.ts +29 -0
  143. package/dist/tools/get-artifact-content.js +86 -0
  144. package/dist/tools/get-artifact-content.js.map +1 -0
  145. package/dist/tools/get-diagram.d.ts +27 -0
  146. package/dist/tools/get-diagram.js +109 -0
  147. package/dist/tools/get-diagram.js.map +1 -0
  148. package/dist/tools/get-document.d.ts +22 -0
  149. package/dist/tools/get-document.js +43 -0
  150. package/dist/tools/get-document.js.map +1 -0
  151. package/dist/tools/get-finding-details.d.ts +28 -0
  152. package/dist/tools/get-finding-details.js +43 -0
  153. package/dist/tools/get-finding-details.js.map +1 -0
  154. package/dist/tools/get-findings.d.ts +57 -0
  155. package/dist/tools/get-findings.js +103 -0
  156. package/dist/tools/get-findings.js.map +1 -0
  157. package/dist/tools/get-oss-zat.d.ts +27 -0
  158. package/dist/tools/get-oss-zat.js +105 -0
  159. package/dist/tools/get-oss-zat.js.map +1 -0
  160. package/dist/tools/get-recon-scan.d.ts +27 -0
  161. package/dist/tools/get-recon-scan.js +46 -0
  162. package/dist/tools/get-recon-scan.js.map +1 -0
  163. package/dist/tools/get-scan-output.d.ts +27 -0
  164. package/dist/tools/get-scan-output.js +64 -0
  165. package/dist/tools/get-scan-output.js.map +1 -0
  166. package/dist/tools/get-scenario-details.d.ts +27 -0
  167. package/dist/tools/get-scenario-details.js +46 -0
  168. package/dist/tools/get-scenario-details.js.map +1 -0
  169. package/dist/tools/get-test-case-results.d.ts +37 -0
  170. package/dist/tools/get-test-case-results.js +66 -0
  171. package/dist/tools/get-test-case-results.js.map +1 -0
  172. package/dist/tools/get-test-details.d.ts +29 -0
  173. package/dist/tools/get-test-details.js +49 -0
  174. package/dist/tools/get-test-details.js.map +1 -0
  175. package/dist/tools/get-trust-keys.d.ts +22 -0
  176. package/dist/tools/get-trust-keys.js +67 -0
  177. package/dist/tools/get-trust-keys.js.map +1 -0
  178. package/dist/tools/import-openapi-endpoints.d.ts +33 -0
  179. package/dist/tools/import-openapi-endpoints.js +93 -0
  180. package/dist/tools/import-openapi-endpoints.js.map +1 -0
  181. package/dist/tools/inspect-zat.d.ts +26 -0
  182. package/dist/tools/inspect-zat.js +247 -0
  183. package/dist/tools/inspect-zat.js.map +1 -0
  184. package/dist/tools/list-agent-test-cases.d.ts +41 -0
  185. package/dist/tools/list-agent-test-cases.js +73 -0
  186. package/dist/tools/list-agent-test-cases.js.map +1 -0
  187. package/dist/tools/list-applications.d.ts +34 -0
  188. package/dist/tools/list-applications.js +74 -0
  189. package/dist/tools/list-applications.js.map +1 -0
  190. package/dist/tools/list-diagrams.d.ts +42 -0
  191. package/dist/tools/list-diagrams.js +81 -0
  192. package/dist/tools/list-diagrams.js.map +1 -0
  193. package/dist/tools/list-documents.d.ts +24 -0
  194. package/dist/tools/list-documents.js +50 -0
  195. package/dist/tools/list-documents.js.map +1 -0
  196. package/dist/tools/list-endpoints.d.ts +47 -0
  197. package/dist/tools/list-endpoints.js +98 -0
  198. package/dist/tools/list-endpoints.js.map +1 -0
  199. package/dist/tools/list-recon-scans.d.ts +36 -0
  200. package/dist/tools/list-recon-scans.js +74 -0
  201. package/dist/tools/list-recon-scans.js.map +1 -0
  202. package/dist/tools/list-scan-artifacts.d.ts +41 -0
  203. package/dist/tools/list-scan-artifacts.js +63 -0
  204. package/dist/tools/list-scan-artifacts.js.map +1 -0
  205. package/dist/tools/list-scans.d.ts +44 -0
  206. package/dist/tools/list-scans.js +91 -0
  207. package/dist/tools/list-scans.js.map +1 -0
  208. package/dist/tools/list-test-library.d.ts +44 -0
  209. package/dist/tools/list-test-library.js +83 -0
  210. package/dist/tools/list-test-library.js.map +1 -0
  211. package/dist/tools/list-test-scenarios.d.ts +31 -0
  212. package/dist/tools/list-test-scenarios.js +66 -0
  213. package/dist/tools/list-test-scenarios.js.map +1 -0
  214. package/dist/tools/local-scan.d.ts +40 -0
  215. package/dist/tools/local-scan.js +261 -0
  216. package/dist/tools/local-scan.js.map +1 -0
  217. package/dist/tools/manage-diagram.d.ts +109 -0
  218. package/dist/tools/manage-diagram.js +316 -0
  219. package/dist/tools/manage-diagram.js.map +1 -0
  220. package/dist/tools/open-in-ide.d.ts +39 -0
  221. package/dist/tools/open-in-ide.js +61 -0
  222. package/dist/tools/open-in-ide.js.map +1 -0
  223. package/dist/tools/run-test-scenario.d.ts +37 -0
  224. package/dist/tools/run-test-scenario.js +70 -0
  225. package/dist/tools/run-test-scenario.js.map +1 -0
  226. package/dist/tools/scan-pr.d.ts +27 -0
  227. package/dist/tools/scan-pr.js +51 -0
  228. package/dist/tools/scan-pr.js.map +1 -0
  229. package/dist/tools/security-review.d.ts +65 -0
  230. package/dist/tools/security-review.js +378 -0
  231. package/dist/tools/security-review.js.map +1 -0
  232. package/dist/tools/setup-red-team-target.d.ts +79 -0
  233. package/dist/tools/setup-red-team-target.js +430 -0
  234. package/dist/tools/setup-red-team-target.js.map +1 -0
  235. package/dist/tools/triage-finding.d.ts +47 -0
  236. package/dist/tools/triage-finding.js +116 -0
  237. package/dist/tools/triage-finding.js.map +1 -0
  238. package/dist/tools/update-document.d.ts +28 -0
  239. package/dist/tools/update-document.js +63 -0
  240. package/dist/tools/update-document.js.map +1 -0
  241. package/dist/tools/update-endpoint.d.ts +65 -0
  242. package/dist/tools/update-endpoint.js +145 -0
  243. package/dist/tools/update-endpoint.js.map +1 -0
  244. package/dist/tools/update-mermaid-source.d.ts +34 -0
  245. package/dist/tools/update-mermaid-source.js +76 -0
  246. package/dist/tools/update-mermaid-source.js.map +1 -0
  247. package/dist/tools/verify-trust-mark.d.ts +29 -0
  248. package/dist/tools/verify-trust-mark.js +108 -0
  249. package/dist/tools/verify-trust-mark.js.map +1 -0
  250. package/dist/types.d.ts +220 -0
  251. package/dist/types.js +33 -0
  252. package/dist/types.js.map +1 -0
  253. package/package.json +50 -0
@@ -0,0 +1,180 @@
1
+ /**
2
+ * zivis_check_project — Three-way org alignment check
3
+ *
4
+ * Answers: "am I safe to do tenant-scoped work in this project right now?"
5
+ *
6
+ * Verifies all three sources of truth agree on the org:
7
+ * 1. BINDING — .zivis/project.json's workosOrgId (what the project expects)
8
+ * 2. LOCAL JWT — the stored access token's org_id claim (what the token says)
9
+ * 3. API — GET /api/mcp/session (what the server resolves from the JWT)
10
+ *
11
+ * If any mismatch: returns isError=true with a concrete fix action.
12
+ * If no binding exists: isError=true (refuses to operate without cross-org safety).
13
+ */
14
+ import { z } from "zod";
15
+ import { detectProjectBinding } from "../project-binding.js";
16
+ import { loadTokens } from "../auth/token-refresh.js";
17
+ import { decodeJwtPayload } from "../auth/jwt.js";
18
+ export const CHECK_PROJECT_NAME = "zivis_check_project";
19
+ export const CHECK_PROJECT_DESCRIPTION = `Pre-flight: verify the project, the stored JWT, and the API ALL agree on the org.
20
+
21
+ This is a defense-in-depth check that must pass before any tenant-scoped MCP
22
+ operation (triage, create scan, manage threat model, etc.). It compares three
23
+ independent sources of truth:
24
+
25
+ 1. Project binding (.zivis/project.json workosOrgId)
26
+ 2. Local JWT org_id claim
27
+ 3. API's resolved org (round-trip to /api/mcp/session)
28
+
29
+ Returns isError=true on ANY mismatch or missing binding. Call this at the
30
+ start of any workflow where polluting another tenant with data would be bad.
31
+
32
+ Set local_only=true to skip the API round-trip (faster, but weaker guarantee).`;
33
+ export const CHECK_PROJECT_SCHEMA = {
34
+ cwd: z
35
+ .string()
36
+ .optional()
37
+ .describe("Working directory to check (defaults to server's working directory)"),
38
+ local_only: z
39
+ .boolean()
40
+ .optional()
41
+ .describe("Skip the API round-trip. Default false — the API check is the strongest guarantee."),
42
+ };
43
+ export function createCheckProjectHandler(apiClient, config) {
44
+ return async (params) => {
45
+ const cwd = params.cwd || process.cwd();
46
+ const currentSession = config.session || "default";
47
+ const skipApi = params.local_only === true;
48
+ const detected = detectProjectBinding(cwd);
49
+ if (!detected) {
50
+ return {
51
+ content: [
52
+ {
53
+ type: "text",
54
+ text: JSON.stringify({
55
+ ok: false,
56
+ bound: false,
57
+ currentSession,
58
+ message: "No .zivis/project.json found for this directory. " +
59
+ "Without a binding there is no cross-org safety — refusing to proceed. " +
60
+ "Run: zivis auth login (auto-binds) or zivis auth init",
61
+ }, null, 2),
62
+ },
63
+ ],
64
+ isError: true,
65
+ };
66
+ }
67
+ const { binding, filePath } = detected;
68
+ const sessionMatches = currentSession === binding.session;
69
+ // Source 2: local JWT
70
+ const tokens = await loadTokens(config.session);
71
+ const accessClaims = tokens ? decodeJwtPayload(tokens.access_token) : null;
72
+ const idClaims = tokens?.id_token ? decodeJwtPayload(tokens.id_token) : null;
73
+ const localJwtOrgId = accessClaims?.org_id;
74
+ const localEmail = idClaims?.email || accessClaims?.email;
75
+ // Source 3: API session (skip if local_only)
76
+ let apiSession = null;
77
+ let apiError = null;
78
+ if (!skipApi) {
79
+ if (!tokens) {
80
+ apiError = `No stored credentials for session "${currentSession}" — cannot contact API.`;
81
+ }
82
+ else {
83
+ try {
84
+ apiSession = await apiClient.request("GET", "/api/mcp/session");
85
+ }
86
+ catch (err) {
87
+ apiError = err instanceof Error ? err.message : String(err);
88
+ }
89
+ }
90
+ }
91
+ const problems = [];
92
+ // Session name
93
+ if (!sessionMatches) {
94
+ problems.push(`Session mismatch: project expects "${binding.session}", current is "${currentSession}". ` +
95
+ `Set ZIVIS_SESSION=${binding.session} in your MCP config or run: zivis mcp install --for <ide> --session ${binding.session}`);
96
+ }
97
+ // Binding vs local JWT
98
+ if (!binding.workosOrgId) {
99
+ problems.push("Binding has no workosOrgId — upgrade with: zivis auth login");
100
+ }
101
+ else if (!tokens) {
102
+ problems.push(`No stored credentials for session "${currentSession}". Run: zivis auth login --session ${binding.session}`);
103
+ }
104
+ else if (!localJwtOrgId) {
105
+ problems.push("Stored JWT has no org_id claim — re-login to refresh: zivis auth login --session " + binding.session);
106
+ }
107
+ else if (localJwtOrgId !== binding.workosOrgId) {
108
+ problems.push(`CROSS-ORG RISK: local JWT org_id "${localJwtOrgId}" != binding workosOrgId "${binding.workosOrgId}"` +
109
+ `${binding.orgName ? ` (${binding.orgName})` : ""}. ` +
110
+ `Fix: zivis auth login --session ${binding.session}`);
111
+ }
112
+ // API agreement
113
+ if (!skipApi) {
114
+ if (apiError) {
115
+ problems.push(`API session check failed: ${apiError}`);
116
+ }
117
+ else if (apiSession) {
118
+ if (binding.workosOrgId && apiSession.org.workosOrgId !== binding.workosOrgId) {
119
+ problems.push(`CROSS-ORG RISK: API resolved org "${apiSession.org.workosOrgId}" (${apiSession.org.name}) ` +
120
+ `!= binding workosOrgId "${binding.workosOrgId}"${binding.orgName ? ` (${binding.orgName})` : ""}. ` +
121
+ `The API thinks you are in a different tenant than this project. ` +
122
+ `Fix: zivis auth login --session ${binding.session}`);
123
+ }
124
+ if (binding.orgId && apiSession.org.id !== binding.orgId) {
125
+ problems.push(`Zivis orgId mismatch: API returned "${apiSession.org.id}", binding expects "${binding.orgId}".`);
126
+ }
127
+ if (localJwtOrgId && apiSession.jwtOrgId && localJwtOrgId !== apiSession.jwtOrgId) {
128
+ problems.push(`JWT org_id drift: local token has "${localJwtOrgId}", API saw "${apiSession.jwtOrgId}". ` +
129
+ "Token may have been swapped mid-flight — re-login.");
130
+ }
131
+ }
132
+ }
133
+ const ok = problems.length === 0;
134
+ return {
135
+ content: [
136
+ {
137
+ type: "text",
138
+ text: JSON.stringify({
139
+ ok,
140
+ bound: true,
141
+ bindingFile: filePath,
142
+ currentSession,
143
+ expectedSession: binding.session,
144
+ sessionMatches,
145
+ binding: {
146
+ workosOrgId: binding.workosOrgId || null,
147
+ orgId: binding.orgId || null,
148
+ orgName: binding.orgName || null,
149
+ applicationId: binding.applicationId || null,
150
+ applicationName: binding.applicationName || null,
151
+ },
152
+ localJwt: {
153
+ orgId: localJwtOrgId || null,
154
+ email: localEmail || null,
155
+ },
156
+ apiSession: skipApi
157
+ ? { skipped: true }
158
+ : apiSession
159
+ ? {
160
+ userEmail: apiSession.user.email,
161
+ orgWorkosOrgId: apiSession.org.workosOrgId,
162
+ orgId: apiSession.org.id,
163
+ orgName: apiSession.org.name,
164
+ jwtOrgId: apiSession.jwtOrgId,
165
+ }
166
+ : { error: apiError },
167
+ problems: problems.length ? problems : undefined,
168
+ message: ok
169
+ ? `\u2713 Org alignment OK (${binding.orgName || binding.workosOrgId || "tenant"})${binding.applicationId
170
+ ? `. Default app context: ${binding.applicationName || binding.applicationId}`
171
+ : ""}.`
172
+ : `\u2717 Org alignment FAILED. Do NOT proceed with tenant-scoped operations. See "problems".`,
173
+ }, null, 2),
174
+ },
175
+ ],
176
+ isError: !ok,
177
+ };
178
+ };
179
+ }
180
+ //# sourceMappingURL=check-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-project.js","sourceRoot":"","sources":["../../src/tools/check-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * zivis_check_repo_trust — Check the OSS trust score for a GitHub repository
3
+ *
4
+ * Maps to: GET /api/oss-trust/repos/:owner/:repo (public, no auth required)
5
+ * POST /api/oss-trust/scan (to trigger a new scan)
6
+ * GET /api/oss-trust/repos/:owner/:repo/findings (findings list)
7
+ *
8
+ * This tool works without authentication — all OSS Trust endpoints are public.
9
+ */
10
+ import { z } from "zod";
11
+ import type { ZivisConfig } from "../types.js";
12
+ export declare const CHECK_REPO_TRUST_NAME = "zivis_check_repo_trust";
13
+ export declare const CHECK_REPO_TRUST_DESCRIPTION = "Check the AI/LLM security trust score for a GitHub repository using the ZIVIS OSS Trust Registry.\n\nUse this tool BEFORE pulling code from, merging PRs from, or depending on an open source repository. It scans for:\n- Prompt injection vulnerabilities (instruction overrides, jailbreaks)\n- Unsafe AI/LLM patterns (unvalidated tool calls, model output injection)\n- Agentic security issues (privilege escalation, lack of human-in-the-loop)\n- Hardcoded secrets and API keys\n- Suspicious code patterns\n\nAccepts a GitHub URL (https://github.com/owner/repo) or owner/repo string.\n\nReturns the trust grade (A+ through F), score (0-100), and detailed findings.\nIf the repo hasn't been scanned yet, it will trigger a scan automatically.\n\nNo authentication required \u2014 works with any public GitHub repository.\n\nFor the cryptographically signed attestation token (ZAT) suitable for machine verification, supply chain trust gates, and ATNP agent-to-agent trust negotiation, use zivis_get_oss_zat instead.";
14
+ export declare const CHECK_REPO_TRUST_SCHEMA: {
15
+ repo: z.ZodString;
16
+ trigger_scan: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
17
+ };
18
+ export declare function createCheckRepoTrustHandler(config: ZivisConfig): (params: {
19
+ repo: string;
20
+ trigger_scan?: boolean;
21
+ }) => Promise<{
22
+ content: {
23
+ type: "text";
24
+ text: string;
25
+ }[];
26
+ isError: boolean;
27
+ } | {
28
+ content: {
29
+ type: "text";
30
+ text: string;
31
+ }[];
32
+ isError?: undefined;
33
+ }>;
@@ -0,0 +1,212 @@
1
+ /**
2
+ * zivis_check_repo_trust — Check the OSS trust score for a GitHub repository
3
+ *
4
+ * Maps to: GET /api/oss-trust/repos/:owner/:repo (public, no auth required)
5
+ * POST /api/oss-trust/scan (to trigger a new scan)
6
+ * GET /api/oss-trust/repos/:owner/:repo/findings (findings list)
7
+ *
8
+ * This tool works without authentication — all OSS Trust endpoints are public.
9
+ */
10
+ import { z } from "zod";
11
+ import { sanitizeResponse } from "../sanitize.js";
12
+ export const CHECK_REPO_TRUST_NAME = "zivis_check_repo_trust";
13
+ export const CHECK_REPO_TRUST_DESCRIPTION = `Check the AI/LLM security trust score for a GitHub repository using the ZIVIS OSS Trust Registry.
14
+
15
+ Use this tool BEFORE pulling code from, merging PRs from, or depending on an open source repository. It scans for:
16
+ - Prompt injection vulnerabilities (instruction overrides, jailbreaks)
17
+ - Unsafe AI/LLM patterns (unvalidated tool calls, model output injection)
18
+ - Agentic security issues (privilege escalation, lack of human-in-the-loop)
19
+ - Hardcoded secrets and API keys
20
+ - Suspicious code patterns
21
+
22
+ Accepts a GitHub URL (https://github.com/owner/repo) or owner/repo string.
23
+
24
+ Returns the trust grade (A+ through F), score (0-100), and detailed findings.
25
+ If the repo hasn't been scanned yet, it will trigger a scan automatically.
26
+
27
+ No authentication required — works with any public GitHub repository.
28
+
29
+ For the cryptographically signed attestation token (ZAT) suitable for machine verification, supply chain trust gates, and ATNP agent-to-agent trust negotiation, use zivis_get_oss_zat instead.`;
30
+ export const CHECK_REPO_TRUST_SCHEMA = {
31
+ repo: z
32
+ .string()
33
+ .describe("GitHub repo URL (https://github.com/owner/repo) or owner/repo string"),
34
+ trigger_scan: z
35
+ .boolean()
36
+ .optional()
37
+ .default(true)
38
+ .describe("If true (default), trigger a scan when no results exist yet"),
39
+ };
40
+ /** Parse GitHub URL or owner/repo into components */
41
+ function parseRepo(input) {
42
+ const trimmed = input.trim();
43
+ // URL: https://github.com/owner/repo[.git][/...]
44
+ const urlMatch = trimmed.match(/^https?:\/\/(?:www\.)?github\.com\/([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+)/);
45
+ if (urlMatch) {
46
+ return { owner: urlMatch[1], repo: urlMatch[2].replace(/\.git$/, "") };
47
+ }
48
+ // owner/repo
49
+ const slashMatch = trimmed.match(/^([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+)$/);
50
+ if (slashMatch) {
51
+ return { owner: slashMatch[1], repo: slashMatch[2] };
52
+ }
53
+ return null;
54
+ }
55
+ export function createCheckRepoTrustHandler(config) {
56
+ return async (params) => {
57
+ try {
58
+ const parsed = parseRepo(params.repo);
59
+ if (!parsed) {
60
+ return {
61
+ content: [
62
+ {
63
+ type: "text",
64
+ text: `Error: Invalid repo format "${params.repo}". Use "owner/repo" or a GitHub URL.`,
65
+ },
66
+ ],
67
+ isError: true,
68
+ };
69
+ }
70
+ const { owner, repo } = parsed;
71
+ const baseUrl = config.apiBaseUrl;
72
+ // Step 1: Check if repo has existing trust data
73
+ const repoRes = await fetch(`${baseUrl}/api/oss-trust/repos/${owner}/${repo}`);
74
+ if (repoRes.status === 404 || (repoRes.ok && (await repoRes.clone().json()).trustScore == null)) {
75
+ // No scan results yet
76
+ if (params.trigger_scan !== false) {
77
+ // Trigger a scan
78
+ const scanRes = await fetch(`${baseUrl}/api/oss-trust/scan`, {
79
+ method: "POST",
80
+ headers: { "Content-Type": "application/json" },
81
+ body: JSON.stringify({ owner, repo }),
82
+ });
83
+ if (scanRes.ok) {
84
+ const scanData = await scanRes.json();
85
+ if (scanData.deduplicated && scanData.status === "completed") {
86
+ // There's a completed scan but the entry wasn't found? Rare edge case.
87
+ // Re-fetch the entry
88
+ }
89
+ else {
90
+ return {
91
+ content: [
92
+ {
93
+ type: "text",
94
+ text: formatScanPending(owner, repo, scanData, baseUrl),
95
+ },
96
+ ],
97
+ };
98
+ }
99
+ }
100
+ else {
101
+ return {
102
+ content: [
103
+ {
104
+ type: "text",
105
+ text: `No trust data found for ${owner}/${repo} and failed to trigger scan.`,
106
+ },
107
+ ],
108
+ isError: true,
109
+ };
110
+ }
111
+ }
112
+ else {
113
+ return {
114
+ content: [
115
+ {
116
+ type: "text",
117
+ text: `No trust data found for ${owner}/${repo}. Set trigger_scan=true to request a scan.`,
118
+ },
119
+ ],
120
+ };
121
+ }
122
+ }
123
+ // Step 2: Fetch trust entry data
124
+ const entryRes = await fetch(`${baseUrl}/api/oss-trust/repos/${owner}/${repo}`);
125
+ if (!entryRes.ok) {
126
+ return {
127
+ content: [
128
+ {
129
+ type: "text",
130
+ text: `Error fetching trust data: HTTP ${entryRes.status}`,
131
+ },
132
+ ],
133
+ isError: true,
134
+ };
135
+ }
136
+ const entry = await entryRes.json();
137
+ // Step 3: Fetch findings if scan is complete
138
+ let findings = [];
139
+ if (entry.trustScore != null) {
140
+ const findingsRes = await fetch(`${baseUrl}/api/oss-trust/repos/${owner}/${repo}/findings?limit=25`);
141
+ if (findingsRes.ok) {
142
+ const findingsData = await findingsRes.json();
143
+ findings = findingsData.findings || [];
144
+ }
145
+ }
146
+ const result = sanitizeResponse({
147
+ repository: `${owner}/${repo}`,
148
+ trustGrade: entry.trustGrade,
149
+ trustScore: entry.trustScore,
150
+ lastScannedAt: entry.lastScannedAt,
151
+ lastCommitSha: entry.lastCommitSha,
152
+ findings: {
153
+ critical: entry.findingsCritical ?? 0,
154
+ high: entry.findingsHigh ?? 0,
155
+ medium: entry.findingsMedium ?? 0,
156
+ low: entry.findingsLow ?? 0,
157
+ total: (entry.findingsCritical ?? 0) +
158
+ (entry.findingsHigh ?? 0) +
159
+ (entry.findingsMedium ?? 0) +
160
+ (entry.findingsLow ?? 0),
161
+ },
162
+ verdict: getVerdict(entry.trustScore, entry.trustGrade),
163
+ details: findings,
164
+ viewUrl: `${baseUrl}/oss-trust/${owner}/${repo}`,
165
+ });
166
+ return {
167
+ content: [
168
+ {
169
+ type: "text",
170
+ text: JSON.stringify(result, null, 2),
171
+ },
172
+ ],
173
+ };
174
+ }
175
+ catch (err) {
176
+ const message = err instanceof Error ? err.message : "Failed to check repo trust";
177
+ return {
178
+ content: [{ type: "text", text: `Error: ${message}` }],
179
+ isError: true,
180
+ };
181
+ }
182
+ };
183
+ }
184
+ function getVerdict(score, grade) {
185
+ if (score == null || grade == null)
186
+ return "No scan data available";
187
+ if (score >= 90)
188
+ return "SAFE — No significant AI/LLM security issues detected";
189
+ if (score >= 75)
190
+ return "LOW RISK — Minor issues found, generally safe to use";
191
+ if (score >= 60)
192
+ return "MODERATE RISK — Review findings before depending on this code";
193
+ if (score >= 40)
194
+ return "HIGH RISK — Significant security issues found, proceed with caution";
195
+ return "CRITICAL RISK — Major security vulnerabilities detected, avoid using without remediation";
196
+ }
197
+ function formatScanPending(owner, repo, scanData, baseUrl) {
198
+ const lines = [
199
+ `## Scan Requested: ${owner}/${repo}`,
200
+ "",
201
+ `A security scan has been queued for this repository.`,
202
+ `- **Scan ID:** ${scanData.scanId}`,
203
+ `- **Status:** ${scanData.status}`,
204
+ "",
205
+ `The scan typically takes 1-3 minutes. You can check results at:`,
206
+ `${baseUrl}/oss-trust/${owner}/${repo}`,
207
+ "",
208
+ `Run this tool again in a few minutes to see the results.`,
209
+ ];
210
+ return lines.join("\n");
211
+ }
212
+ //# sourceMappingURL=check-repo-trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-repo-trust.js","sourceRoot":"","sources":["../../src/tools/check-repo-trust.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * zivis_create_diagram — Create a new diagram with nodes, connections, and boundaries
3
+ *
4
+ * Maps to: POST /api/diagrams + optional POST /api/diagrams/:id/link
5
+ */
6
+ import { z } from "zod";
7
+ import type { ApiClient } from "../api-client.js";
8
+ export declare const CREATE_DIAGRAM_NAME = "zivis_create_diagram";
9
+ export declare const CREATE_DIAGRAM_DESCRIPTION = "Create a new canvas diagram with nodes, connections, and boundaries in a single call.\n\nUse this to build system architecture diagrams, data flow diagrams, attack chains, etc. from code analysis.\n\n**Temp IDs:** When creating nodes and connections together, assign each node a temp_id (e.g., \"node_0\", \"node_1\") and reference them in connections via source_temp_id / target_temp_id. Similarly, assign boundaries a temp_id and reference them in nodes via boundary_temp_id.\n\n**Positioning:** Nodes default to (0,0). For readable layouts, space nodes apart (e.g., 250px horizontal, 150px vertical gaps). Default node size is 200x100px. Boundaries should be sized to contain their child nodes with padding.\n\n**Tags:** Use tags to annotate nodes with metadata (e.g., [\"database\", \"postgres\", \"port:5432\", \"pii\"]). These are searchable and displayed in the UI.\n\n**Colors:** Use hex colors (e.g., \"#336791\" for databases, \"#DC382D\" for caches, \"#009639\" for proxies).";
10
+ export declare const CREATE_DIAGRAM_SCHEMA: {
11
+ name: z.ZodString;
12
+ description: z.ZodOptional<z.ZodString>;
13
+ diagram_type: z.ZodEnum<{
14
+ custom: "custom";
15
+ deployment: "deployment";
16
+ architecture: "architecture";
17
+ data_flow: "data_flow";
18
+ attack_chain: "attack_chain";
19
+ sequence: "sequence";
20
+ trust_boundary: "trust_boundary";
21
+ network: "network";
22
+ }>;
23
+ nodes: z.ZodOptional<z.ZodArray<z.ZodObject<{
24
+ temp_id: z.ZodOptional<z.ZodString>;
25
+ name: z.ZodString;
26
+ description: z.ZodOptional<z.ZodString>;
27
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
28
+ icon: z.ZodOptional<z.ZodString>;
29
+ color: z.ZodOptional<z.ZodString>;
30
+ position_x: z.ZodOptional<z.ZodNumber>;
31
+ position_y: z.ZodOptional<z.ZodNumber>;
32
+ width: z.ZodOptional<z.ZodNumber>;
33
+ height: z.ZodOptional<z.ZodNumber>;
34
+ step_order: z.ZodOptional<z.ZodNumber>;
35
+ boundary_temp_id: z.ZodOptional<z.ZodString>;
36
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
37
+ }, z.core.$strip>>>;
38
+ connections: z.ZodOptional<z.ZodArray<z.ZodObject<{
39
+ source_temp_id: z.ZodOptional<z.ZodString>;
40
+ target_temp_id: z.ZodOptional<z.ZodString>;
41
+ source_node_id: z.ZodOptional<z.ZodString>;
42
+ target_node_id: z.ZodOptional<z.ZodString>;
43
+ label: z.ZodOptional<z.ZodString>;
44
+ description: z.ZodOptional<z.ZodString>;
45
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
46
+ bidirectional: z.ZodOptional<z.ZodBoolean>;
47
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
48
+ }, z.core.$strip>>>;
49
+ boundaries: z.ZodOptional<z.ZodArray<z.ZodObject<{
50
+ temp_id: z.ZodOptional<z.ZodString>;
51
+ label: z.ZodString;
52
+ description: z.ZodOptional<z.ZodString>;
53
+ color: z.ZodOptional<z.ZodString>;
54
+ position_x: z.ZodOptional<z.ZodNumber>;
55
+ position_y: z.ZodOptional<z.ZodNumber>;
56
+ width: z.ZodOptional<z.ZodNumber>;
57
+ height: z.ZodOptional<z.ZodNumber>;
58
+ }, z.core.$strip>>>;
59
+ linked_threat_model_id: z.ZodOptional<z.ZodString>;
60
+ };
61
+ export declare function createCreateDiagramHandler(apiClient: ApiClient): (params: {
62
+ name: string;
63
+ description?: string;
64
+ diagram_type: string;
65
+ nodes?: Array<{
66
+ temp_id?: string;
67
+ name: string;
68
+ description?: string;
69
+ tags?: string[];
70
+ icon?: string;
71
+ color?: string;
72
+ position_x?: number;
73
+ position_y?: number;
74
+ width?: number;
75
+ height?: number;
76
+ step_order?: number;
77
+ boundary_temp_id?: string;
78
+ metadata?: Record<string, unknown>;
79
+ }>;
80
+ connections?: Array<{
81
+ source_temp_id?: string;
82
+ target_temp_id?: string;
83
+ source_node_id?: string;
84
+ target_node_id?: string;
85
+ label?: string;
86
+ description?: string;
87
+ tags?: string[];
88
+ bidirectional?: boolean;
89
+ metadata?: Record<string, unknown>;
90
+ }>;
91
+ boundaries?: Array<{
92
+ temp_id?: string;
93
+ label: string;
94
+ description?: string;
95
+ color?: string;
96
+ position_x?: number;
97
+ position_y?: number;
98
+ width?: number;
99
+ height?: number;
100
+ }>;
101
+ linked_threat_model_id?: string;
102
+ }) => Promise<{
103
+ content: {
104
+ type: "text";
105
+ text: string;
106
+ }[];
107
+ isError?: undefined;
108
+ } | {
109
+ content: {
110
+ type: "text";
111
+ text: string;
112
+ }[];
113
+ isError: boolean;
114
+ }>;