@supermodeltools/sdk 0.9.3 → 0.9.5

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 (257) hide show
  1. package/dist/apis/DefaultApi.d.ts +46 -2
  2. package/dist/apis/DefaultApi.js +183 -1
  3. package/dist/esm/apis/DefaultApi.d.ts +46 -2
  4. package/dist/esm/apis/DefaultApi.js +184 -2
  5. package/dist/esm/models/AffectedEntryPoint.d.ts +53 -0
  6. package/dist/esm/models/AffectedEntryPoint.js +57 -0
  7. package/dist/esm/models/AffectedFile.d.ts +43 -0
  8. package/dist/esm/models/AffectedFile.js +48 -0
  9. package/dist/esm/models/AffectedFunction.d.ts +78 -0
  10. package/dist/esm/models/AffectedFunction.js +73 -0
  11. package/dist/esm/models/AliveCodeItem.d.ts +1 -1
  12. package/dist/esm/models/AliveCodeItem.js +1 -1
  13. package/dist/esm/models/BlastRadius.d.ts +71 -0
  14. package/dist/esm/models/BlastRadius.js +65 -0
  15. package/dist/esm/models/CircularDependencyCycle.d.ts +65 -0
  16. package/dist/esm/models/CircularDependencyCycle.js +63 -0
  17. package/dist/esm/models/CircularDependencyMetadata.d.ts +61 -0
  18. package/dist/esm/models/CircularDependencyMetadata.js +56 -0
  19. package/dist/esm/models/CircularDependencyResponse.d.ts +46 -0
  20. package/dist/esm/models/CircularDependencyResponse.js +51 -0
  21. package/dist/esm/models/CircularDependencyResponseAsync.d.ts +66 -0
  22. package/dist/esm/models/CircularDependencyResponseAsync.js +60 -0
  23. package/dist/esm/models/CircularDependencySummary.d.ts +55 -0
  24. package/dist/esm/models/CircularDependencySummary.js +56 -0
  25. package/dist/esm/models/ClassificationStats.d.ts +1 -1
  26. package/dist/esm/models/ClassificationStats.js +1 -1
  27. package/dist/esm/models/CodeGraphEnvelope.d.ts +1 -1
  28. package/dist/esm/models/CodeGraphEnvelope.js +1 -1
  29. package/dist/esm/models/CodeGraphEnvelopeAsync.d.ts +1 -1
  30. package/dist/esm/models/CodeGraphEnvelopeAsync.js +1 -1
  31. package/dist/esm/models/CodeGraphEnvelopeGraph.d.ts +1 -1
  32. package/dist/esm/models/CodeGraphEnvelopeGraph.js +1 -1
  33. package/dist/esm/models/CodeGraphEnvelopeMetadata.d.ts +1 -1
  34. package/dist/esm/models/CodeGraphEnvelopeMetadata.js +1 -1
  35. package/dist/esm/models/CodeGraphNode.d.ts +1 -1
  36. package/dist/esm/models/CodeGraphNode.js +1 -1
  37. package/dist/esm/models/CodeGraphRelationship.d.ts +1 -1
  38. package/dist/esm/models/CodeGraphRelationship.js +1 -1
  39. package/dist/esm/models/CodeGraphStats.d.ts +1 -1
  40. package/dist/esm/models/CodeGraphStats.js +1 -1
  41. package/dist/esm/models/CoverageByDomain.d.ts +49 -0
  42. package/dist/esm/models/CoverageByDomain.js +52 -0
  43. package/dist/esm/models/CoverageByFile.d.ts +55 -0
  44. package/dist/esm/models/CoverageByFile.js +56 -0
  45. package/dist/esm/models/CriticalFile.d.ts +53 -0
  46. package/dist/esm/models/CriticalFile.js +57 -0
  47. package/dist/esm/models/CrossDomainDependency.d.ts +43 -0
  48. package/dist/esm/models/CrossDomainDependency.js +48 -0
  49. package/dist/esm/models/CycleEdge.d.ts +43 -0
  50. package/dist/esm/models/CycleEdge.js +48 -0
  51. package/dist/esm/models/DeadCodeAnalysisMetadata.d.ts +1 -1
  52. package/dist/esm/models/DeadCodeAnalysisMetadata.js +1 -1
  53. package/dist/esm/models/DeadCodeAnalysisResponse.d.ts +1 -1
  54. package/dist/esm/models/DeadCodeAnalysisResponse.js +1 -1
  55. package/dist/esm/models/DeadCodeAnalysisResponseAsync.d.ts +1 -1
  56. package/dist/esm/models/DeadCodeAnalysisResponseAsync.js +1 -1
  57. package/dist/esm/models/DeadCodeCandidate.d.ts +1 -1
  58. package/dist/esm/models/DeadCodeCandidate.js +1 -1
  59. package/dist/esm/models/DomainClassAssignment.d.ts +1 -1
  60. package/dist/esm/models/DomainClassAssignment.js +1 -1
  61. package/dist/esm/models/DomainClassificationResponse.d.ts +1 -1
  62. package/dist/esm/models/DomainClassificationResponse.js +1 -1
  63. package/dist/esm/models/DomainClassificationResponseAsync.d.ts +1 -1
  64. package/dist/esm/models/DomainClassificationResponseAsync.js +1 -1
  65. package/dist/esm/models/DomainClassificationResponseGraph.d.ts +1 -1
  66. package/dist/esm/models/DomainClassificationResponseGraph.js +1 -1
  67. package/dist/esm/models/DomainFileAssignment.d.ts +1 -1
  68. package/dist/esm/models/DomainFileAssignment.js +1 -1
  69. package/dist/esm/models/DomainFunctionAssignment.d.ts +1 -1
  70. package/dist/esm/models/DomainFunctionAssignment.js +1 -1
  71. package/dist/esm/models/DomainRelationship.d.ts +1 -1
  72. package/dist/esm/models/DomainRelationship.js +1 -1
  73. package/dist/esm/models/DomainSummary.d.ts +1 -1
  74. package/dist/esm/models/DomainSummary.js +1 -1
  75. package/dist/esm/models/EntryPoint.d.ts +1 -1
  76. package/dist/esm/models/EntryPoint.js +1 -1
  77. package/dist/esm/models/ErrorDetailsInner.d.ts +1 -1
  78. package/dist/esm/models/ErrorDetailsInner.js +1 -1
  79. package/dist/esm/models/FunctionDescription.d.ts +1 -1
  80. package/dist/esm/models/FunctionDescription.js +1 -1
  81. package/dist/esm/models/ImpactAnalysisMetadata.d.ts +61 -0
  82. package/dist/esm/models/ImpactAnalysisMetadata.js +56 -0
  83. package/dist/esm/models/ImpactAnalysisResponse.d.ts +46 -0
  84. package/dist/esm/models/ImpactAnalysisResponse.js +51 -0
  85. package/dist/esm/models/ImpactAnalysisResponseAsync.d.ts +66 -0
  86. package/dist/esm/models/ImpactAnalysisResponseAsync.js +60 -0
  87. package/dist/esm/models/ImpactGlobalMetrics.d.ts +39 -0
  88. package/dist/esm/models/ImpactGlobalMetrics.js +42 -0
  89. package/dist/esm/models/ImpactResult.d.ts +60 -0
  90. package/dist/esm/models/ImpactResult.js +61 -0
  91. package/dist/esm/models/ImpactTarget.d.ts +59 -0
  92. package/dist/esm/models/ImpactTarget.js +57 -0
  93. package/dist/esm/models/JobStatus.d.ts +1 -1
  94. package/dist/esm/models/JobStatus.js +1 -1
  95. package/dist/esm/models/ModelError.d.ts +1 -1
  96. package/dist/esm/models/ModelError.js +1 -1
  97. package/dist/esm/models/NearestTestedCaller.d.ts +43 -0
  98. package/dist/esm/models/NearestTestedCaller.js +48 -0
  99. package/dist/esm/models/SubdomainSummary.d.ts +1 -1
  100. package/dist/esm/models/SubdomainSummary.js +1 -1
  101. package/dist/esm/models/SupermodelArtifact.d.ts +1 -1
  102. package/dist/esm/models/SupermodelArtifact.js +1 -1
  103. package/dist/esm/models/SupermodelIR.d.ts +1 -1
  104. package/dist/esm/models/SupermodelIR.js +1 -1
  105. package/dist/esm/models/SupermodelIRAsync.d.ts +1 -1
  106. package/dist/esm/models/SupermodelIRAsync.js +1 -1
  107. package/dist/esm/models/SupermodelIRGraph.d.ts +1 -1
  108. package/dist/esm/models/SupermodelIRGraph.js +1 -1
  109. package/dist/esm/models/SupermodelIRStats.d.ts +1 -1
  110. package/dist/esm/models/SupermodelIRStats.js +1 -1
  111. package/dist/esm/models/TestCoverageMapMetadata.d.ts +85 -0
  112. package/dist/esm/models/TestCoverageMapMetadata.js +72 -0
  113. package/dist/esm/models/TestCoverageMapResponse.d.ts +67 -0
  114. package/dist/esm/models/TestCoverageMapResponse.js +64 -0
  115. package/dist/esm/models/TestCoverageMapResponseAsync.d.ts +66 -0
  116. package/dist/esm/models/TestCoverageMapResponseAsync.js +60 -0
  117. package/dist/esm/models/TestFileInfo.d.ts +49 -0
  118. package/dist/esm/models/TestFileInfo.js +52 -0
  119. package/dist/esm/models/TestedFunction.d.ts +80 -0
  120. package/dist/esm/models/TestedFunction.js +76 -0
  121. package/dist/esm/models/TestedSibling.d.ts +43 -0
  122. package/dist/esm/models/TestedSibling.js +48 -0
  123. package/dist/esm/models/UnassignedFunction.d.ts +1 -1
  124. package/dist/esm/models/UnassignedFunction.js +1 -1
  125. package/dist/esm/models/UntestedFunction.d.ts +103 -0
  126. package/dist/esm/models/UntestedFunction.js +88 -0
  127. package/dist/esm/models/index.d.ts +28 -0
  128. package/dist/esm/models/index.js +28 -0
  129. package/dist/esm/runtime.d.ts +1 -1
  130. package/dist/esm/runtime.js +1 -1
  131. package/dist/models/AffectedEntryPoint.d.ts +53 -0
  132. package/dist/models/AffectedEntryPoint.js +64 -0
  133. package/dist/models/AffectedFile.d.ts +43 -0
  134. package/dist/models/AffectedFile.js +54 -0
  135. package/dist/models/AffectedFunction.d.ts +78 -0
  136. package/dist/models/AffectedFunction.js +80 -0
  137. package/dist/models/AliveCodeItem.d.ts +1 -1
  138. package/dist/models/AliveCodeItem.js +1 -1
  139. package/dist/models/BlastRadius.d.ts +71 -0
  140. package/dist/models/BlastRadius.js +72 -0
  141. package/dist/models/CircularDependencyCycle.d.ts +65 -0
  142. package/dist/models/CircularDependencyCycle.js +70 -0
  143. package/dist/models/CircularDependencyMetadata.d.ts +61 -0
  144. package/dist/models/CircularDependencyMetadata.js +62 -0
  145. package/dist/models/CircularDependencyResponse.d.ts +46 -0
  146. package/dist/models/CircularDependencyResponse.js +57 -0
  147. package/dist/models/CircularDependencyResponseAsync.d.ts +66 -0
  148. package/dist/models/CircularDependencyResponseAsync.js +67 -0
  149. package/dist/models/CircularDependencySummary.d.ts +55 -0
  150. package/dist/models/CircularDependencySummary.js +62 -0
  151. package/dist/models/ClassificationStats.d.ts +1 -1
  152. package/dist/models/ClassificationStats.js +1 -1
  153. package/dist/models/CodeGraphEnvelope.d.ts +1 -1
  154. package/dist/models/CodeGraphEnvelope.js +1 -1
  155. package/dist/models/CodeGraphEnvelopeAsync.d.ts +1 -1
  156. package/dist/models/CodeGraphEnvelopeAsync.js +1 -1
  157. package/dist/models/CodeGraphEnvelopeGraph.d.ts +1 -1
  158. package/dist/models/CodeGraphEnvelopeGraph.js +1 -1
  159. package/dist/models/CodeGraphEnvelopeMetadata.d.ts +1 -1
  160. package/dist/models/CodeGraphEnvelopeMetadata.js +1 -1
  161. package/dist/models/CodeGraphNode.d.ts +1 -1
  162. package/dist/models/CodeGraphNode.js +1 -1
  163. package/dist/models/CodeGraphRelationship.d.ts +1 -1
  164. package/dist/models/CodeGraphRelationship.js +1 -1
  165. package/dist/models/CodeGraphStats.d.ts +1 -1
  166. package/dist/models/CodeGraphStats.js +1 -1
  167. package/dist/models/CoverageByDomain.d.ts +49 -0
  168. package/dist/models/CoverageByDomain.js +58 -0
  169. package/dist/models/CoverageByFile.d.ts +55 -0
  170. package/dist/models/CoverageByFile.js +62 -0
  171. package/dist/models/CriticalFile.d.ts +53 -0
  172. package/dist/models/CriticalFile.js +64 -0
  173. package/dist/models/CrossDomainDependency.d.ts +43 -0
  174. package/dist/models/CrossDomainDependency.js +54 -0
  175. package/dist/models/CycleEdge.d.ts +43 -0
  176. package/dist/models/CycleEdge.js +54 -0
  177. package/dist/models/DeadCodeAnalysisMetadata.d.ts +1 -1
  178. package/dist/models/DeadCodeAnalysisMetadata.js +1 -1
  179. package/dist/models/DeadCodeAnalysisResponse.d.ts +1 -1
  180. package/dist/models/DeadCodeAnalysisResponse.js +1 -1
  181. package/dist/models/DeadCodeAnalysisResponseAsync.d.ts +1 -1
  182. package/dist/models/DeadCodeAnalysisResponseAsync.js +1 -1
  183. package/dist/models/DeadCodeCandidate.d.ts +1 -1
  184. package/dist/models/DeadCodeCandidate.js +1 -1
  185. package/dist/models/DomainClassAssignment.d.ts +1 -1
  186. package/dist/models/DomainClassAssignment.js +1 -1
  187. package/dist/models/DomainClassificationResponse.d.ts +1 -1
  188. package/dist/models/DomainClassificationResponse.js +1 -1
  189. package/dist/models/DomainClassificationResponseAsync.d.ts +1 -1
  190. package/dist/models/DomainClassificationResponseAsync.js +1 -1
  191. package/dist/models/DomainClassificationResponseGraph.d.ts +1 -1
  192. package/dist/models/DomainClassificationResponseGraph.js +1 -1
  193. package/dist/models/DomainFileAssignment.d.ts +1 -1
  194. package/dist/models/DomainFileAssignment.js +1 -1
  195. package/dist/models/DomainFunctionAssignment.d.ts +1 -1
  196. package/dist/models/DomainFunctionAssignment.js +1 -1
  197. package/dist/models/DomainRelationship.d.ts +1 -1
  198. package/dist/models/DomainRelationship.js +1 -1
  199. package/dist/models/DomainSummary.d.ts +1 -1
  200. package/dist/models/DomainSummary.js +1 -1
  201. package/dist/models/EntryPoint.d.ts +1 -1
  202. package/dist/models/EntryPoint.js +1 -1
  203. package/dist/models/ErrorDetailsInner.d.ts +1 -1
  204. package/dist/models/ErrorDetailsInner.js +1 -1
  205. package/dist/models/FunctionDescription.d.ts +1 -1
  206. package/dist/models/FunctionDescription.js +1 -1
  207. package/dist/models/ImpactAnalysisMetadata.d.ts +61 -0
  208. package/dist/models/ImpactAnalysisMetadata.js +62 -0
  209. package/dist/models/ImpactAnalysisResponse.d.ts +46 -0
  210. package/dist/models/ImpactAnalysisResponse.js +57 -0
  211. package/dist/models/ImpactAnalysisResponseAsync.d.ts +66 -0
  212. package/dist/models/ImpactAnalysisResponseAsync.js +67 -0
  213. package/dist/models/ImpactGlobalMetrics.d.ts +39 -0
  214. package/dist/models/ImpactGlobalMetrics.js +48 -0
  215. package/dist/models/ImpactResult.d.ts +60 -0
  216. package/dist/models/ImpactResult.js +67 -0
  217. package/dist/models/ImpactTarget.d.ts +59 -0
  218. package/dist/models/ImpactTarget.js +64 -0
  219. package/dist/models/JobStatus.d.ts +1 -1
  220. package/dist/models/JobStatus.js +1 -1
  221. package/dist/models/ModelError.d.ts +1 -1
  222. package/dist/models/ModelError.js +1 -1
  223. package/dist/models/NearestTestedCaller.d.ts +43 -0
  224. package/dist/models/NearestTestedCaller.js +54 -0
  225. package/dist/models/SubdomainSummary.d.ts +1 -1
  226. package/dist/models/SubdomainSummary.js +1 -1
  227. package/dist/models/SupermodelArtifact.d.ts +1 -1
  228. package/dist/models/SupermodelArtifact.js +1 -1
  229. package/dist/models/SupermodelIR.d.ts +1 -1
  230. package/dist/models/SupermodelIR.js +1 -1
  231. package/dist/models/SupermodelIRAsync.d.ts +1 -1
  232. package/dist/models/SupermodelIRAsync.js +1 -1
  233. package/dist/models/SupermodelIRGraph.d.ts +1 -1
  234. package/dist/models/SupermodelIRGraph.js +1 -1
  235. package/dist/models/SupermodelIRStats.d.ts +1 -1
  236. package/dist/models/SupermodelIRStats.js +1 -1
  237. package/dist/models/TestCoverageMapMetadata.d.ts +85 -0
  238. package/dist/models/TestCoverageMapMetadata.js +78 -0
  239. package/dist/models/TestCoverageMapResponse.d.ts +67 -0
  240. package/dist/models/TestCoverageMapResponse.js +70 -0
  241. package/dist/models/TestCoverageMapResponseAsync.d.ts +66 -0
  242. package/dist/models/TestCoverageMapResponseAsync.js +67 -0
  243. package/dist/models/TestFileInfo.d.ts +49 -0
  244. package/dist/models/TestFileInfo.js +58 -0
  245. package/dist/models/TestedFunction.d.ts +80 -0
  246. package/dist/models/TestedFunction.js +83 -0
  247. package/dist/models/TestedSibling.d.ts +43 -0
  248. package/dist/models/TestedSibling.js +54 -0
  249. package/dist/models/UnassignedFunction.d.ts +1 -1
  250. package/dist/models/UnassignedFunction.js +1 -1
  251. package/dist/models/UntestedFunction.d.ts +103 -0
  252. package/dist/models/UntestedFunction.js +95 -0
  253. package/dist/models/index.d.ts +28 -0
  254. package/dist/models/index.js +28 -0
  255. package/dist/runtime.d.ts +1 -1
  256. package/dist/runtime.js +1 -1
  257. package/package.json +1 -1
@@ -2,7 +2,7 @@
2
2
  * Supermodel
3
3
  * Code Graphing & Analysis API
4
4
  *
5
- * The version of the OpenAPI document: 0.9.3
5
+ * The version of the OpenAPI document: 0.9.5
6
6
  *
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -10,11 +10,15 @@
10
10
  * Do not edit the class manually.
11
11
  */
12
12
  import * as runtime from '../runtime';
13
- import type { CodeGraphEnvelopeAsync, DeadCodeAnalysisResponseAsync, DomainClassificationResponseAsync, SupermodelIRAsync } from '../models/index';
13
+ import type { CircularDependencyResponseAsync, CodeGraphEnvelopeAsync, DeadCodeAnalysisResponseAsync, DomainClassificationResponseAsync, ImpactAnalysisResponseAsync, SupermodelIRAsync, TestCoverageMapResponseAsync } from '../models/index';
14
14
  export interface GenerateCallGraphRequest {
15
15
  idempotencyKey: string;
16
16
  file: Blob;
17
17
  }
18
+ export interface GenerateCircularDependencyAnalysisRequest {
19
+ idempotencyKey: string;
20
+ file: Blob;
21
+ }
18
22
  export interface GenerateDeadCodeAnalysisRequest {
19
23
  idempotencyKey: string;
20
24
  file: Blob;
@@ -27,6 +31,12 @@ export interface GenerateDomainGraphRequest {
27
31
  idempotencyKey: string;
28
32
  file: Blob;
29
33
  }
34
+ export interface GenerateImpactAnalysisRequest {
35
+ idempotencyKey: string;
36
+ file: Blob;
37
+ targets?: string;
38
+ diff?: Blob;
39
+ }
30
40
  export interface GenerateParseGraphRequest {
31
41
  idempotencyKey: string;
32
42
  file: Blob;
@@ -35,6 +45,10 @@ export interface GenerateSupermodelGraphRequest {
35
45
  idempotencyKey: string;
36
46
  file: Blob;
37
47
  }
48
+ export interface GenerateTestCoverageMapRequest {
49
+ idempotencyKey: string;
50
+ file: Blob;
51
+ }
38
52
  /**
39
53
  *
40
54
  */
@@ -49,6 +63,16 @@ export declare class DefaultApi extends runtime.BaseAPI {
49
63
  * Call graph
50
64
  */
51
65
  generateCallGraph(requestParameters: GenerateCallGraphRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<CodeGraphEnvelopeAsync>;
66
+ /**
67
+ * Upload a zipped repository snapshot to detect circular dependencies (dependency cycles) at the file level using Tarjan\'s strongly connected components algorithm.
68
+ * Circular dependency detection
69
+ */
70
+ generateCircularDependencyAnalysisRaw(requestParameters: GenerateCircularDependencyAnalysisRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<CircularDependencyResponseAsync>>;
71
+ /**
72
+ * Upload a zipped repository snapshot to detect circular dependencies (dependency cycles) at the file level using Tarjan\'s strongly connected components algorithm.
73
+ * Circular dependency detection
74
+ */
75
+ generateCircularDependencyAnalysis(requestParameters: GenerateCircularDependencyAnalysisRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<CircularDependencyResponseAsync>;
52
76
  /**
53
77
  * Upload a zipped repository snapshot to identify dead (unreachable) code candidates by combining parse graph declarations with call graph relationships.
54
78
  * Dead code analysis
@@ -79,6 +103,16 @@ export declare class DefaultApi extends runtime.BaseAPI {
79
103
  * Domain graph
80
104
  */
81
105
  generateDomainGraph(requestParameters: GenerateDomainGraphRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<DomainClassificationResponseAsync>;
106
+ /**
107
+ * Compute blast radius — what breaks if a given file or function changes. Uses reverse-reachability BFS on call graph and dependency graph, enriched with LLM-powered domain classification to detect cross-domain impact. **Three usage modes:** 1. **With diff** — upload a unified diff (`git diff` output) alongside the repo zip. Changed files are automatically extracted as targets. Best for CI/CD pipelines. 2. **With targets** — specify files or file:function pairs via query parameter. Best for ad-hoc analysis of specific functions. 3. **Neither** — analyzes the entire codebase and returns a global coupling/risk map with the most critical files ranked by dependent count. **CI Integration (GitHub Actions):** ```yaml - name: Impact Analysis run: | git diff origin/main...HEAD > changes.diff git archive --format=zip HEAD -o repo.zip curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" \\ -H \"Idempotency-Key: ${{ github.run_id }}-impact\" \\ -H \"X-Api-Key: ${{ secrets.SUPERMODEL_API_KEY }}\" \\ -F \"file=@repo.zip;type=application/zip\" \\ -F \"diff=@changes.diff;type=text/plain\" \\ -o impact.json ``` **CI Integration (GitLab CI):** ```yaml impact_analysis: script: - git diff origin/main...HEAD > changes.diff - git archive --format=zip HEAD -o repo.zip - >- curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" -H \"Idempotency-Key: $CI_PIPELINE_IID-impact\" -H \"X-Api-Key: $SUPERMODEL_API_KEY\" -F \"file=@repo.zip;type=application/zip\" -F \"diff=@changes.diff;type=text/plain\" -o impact.json ``` **Standalone usage (no CI):** ```bash # Analyze specific targets curl -X POST \'.../v1/analysis/impact?targets=src/services/billing.ts:calculateTotal\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' # Analyze from a diff git diff main > changes.diff && git archive --format=zip HEAD -o repo.zip curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' \\ -F \'diff=@changes.diff;type=text/plain\' # Global coupling map (no targets, no diff) curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' ```
108
+ * Impact analysis
109
+ */
110
+ generateImpactAnalysisRaw(requestParameters: GenerateImpactAnalysisRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ImpactAnalysisResponseAsync>>;
111
+ /**
112
+ * Compute blast radius — what breaks if a given file or function changes. Uses reverse-reachability BFS on call graph and dependency graph, enriched with LLM-powered domain classification to detect cross-domain impact. **Three usage modes:** 1. **With diff** — upload a unified diff (`git diff` output) alongside the repo zip. Changed files are automatically extracted as targets. Best for CI/CD pipelines. 2. **With targets** — specify files or file:function pairs via query parameter. Best for ad-hoc analysis of specific functions. 3. **Neither** — analyzes the entire codebase and returns a global coupling/risk map with the most critical files ranked by dependent count. **CI Integration (GitHub Actions):** ```yaml - name: Impact Analysis run: | git diff origin/main...HEAD > changes.diff git archive --format=zip HEAD -o repo.zip curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" \\ -H \"Idempotency-Key: ${{ github.run_id }}-impact\" \\ -H \"X-Api-Key: ${{ secrets.SUPERMODEL_API_KEY }}\" \\ -F \"file=@repo.zip;type=application/zip\" \\ -F \"diff=@changes.diff;type=text/plain\" \\ -o impact.json ``` **CI Integration (GitLab CI):** ```yaml impact_analysis: script: - git diff origin/main...HEAD > changes.diff - git archive --format=zip HEAD -o repo.zip - >- curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" -H \"Idempotency-Key: $CI_PIPELINE_IID-impact\" -H \"X-Api-Key: $SUPERMODEL_API_KEY\" -F \"file=@repo.zip;type=application/zip\" -F \"diff=@changes.diff;type=text/plain\" -o impact.json ``` **Standalone usage (no CI):** ```bash # Analyze specific targets curl -X POST \'.../v1/analysis/impact?targets=src/services/billing.ts:calculateTotal\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' # Analyze from a diff git diff main > changes.diff && git archive --format=zip HEAD -o repo.zip curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' \\ -F \'diff=@changes.diff;type=text/plain\' # Global coupling map (no targets, no diff) curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' ```
113
+ * Impact analysis
114
+ */
115
+ generateImpactAnalysis(requestParameters: GenerateImpactAnalysisRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ImpactAnalysisResponseAsync>;
82
116
  /**
83
117
  * Upload a zipped repository snapshot to generate parse tree relationships.
84
118
  * Parse graph
@@ -99,4 +133,14 @@ export declare class DefaultApi extends runtime.BaseAPI {
99
133
  * Supermodel graph
100
134
  */
101
135
  generateSupermodelGraph(requestParameters: GenerateSupermodelGraphRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<SupermodelIRAsync>;
136
+ /**
137
+ * Upload a zipped repository snapshot to identify functions with zero test coverage by tracing call graph reachability from test files to production code. This is static analysis — no test execution or instrumentation required.
138
+ * Test coverage map
139
+ */
140
+ generateTestCoverageMapRaw(requestParameters: GenerateTestCoverageMapRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<TestCoverageMapResponseAsync>>;
141
+ /**
142
+ * Upload a zipped repository snapshot to identify functions with zero test coverage by tracing call graph reachability from test files to production code. This is static analysis — no test execution or instrumentation required.
143
+ * Test coverage map
144
+ */
145
+ generateTestCoverageMap(requestParameters: GenerateTestCoverageMapRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<TestCoverageMapResponseAsync>;
102
146
  }
@@ -5,7 +5,7 @@
5
5
  * Supermodel
6
6
  * Code Graphing & Analysis API
7
7
  *
8
- * The version of the OpenAPI document: 0.9.3
8
+ * The version of the OpenAPI document: 0.9.5
9
9
  *
10
10
  *
11
11
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -87,6 +87,64 @@ class DefaultApi extends runtime.BaseAPI {
87
87
  return yield response.value();
88
88
  });
89
89
  }
90
+ /**
91
+ * Upload a zipped repository snapshot to detect circular dependencies (dependency cycles) at the file level using Tarjan\'s strongly connected components algorithm.
92
+ * Circular dependency detection
93
+ */
94
+ generateCircularDependencyAnalysisRaw(requestParameters, initOverrides) {
95
+ return __awaiter(this, void 0, void 0, function* () {
96
+ if (requestParameters['idempotencyKey'] == null) {
97
+ throw new runtime.RequiredError('idempotencyKey', 'Required parameter "idempotencyKey" was null or undefined when calling generateCircularDependencyAnalysis().');
98
+ }
99
+ if (requestParameters['file'] == null) {
100
+ throw new runtime.RequiredError('file', 'Required parameter "file" was null or undefined when calling generateCircularDependencyAnalysis().');
101
+ }
102
+ const queryParameters = {};
103
+ const headerParameters = {};
104
+ if (requestParameters['idempotencyKey'] != null) {
105
+ headerParameters['Idempotency-Key'] = String(requestParameters['idempotencyKey']);
106
+ }
107
+ if (this.configuration && this.configuration.apiKey) {
108
+ headerParameters["X-Api-Key"] = yield this.configuration.apiKey("X-Api-Key"); // ApiKeyAuth authentication
109
+ }
110
+ const consumes = [
111
+ { contentType: 'multipart/form-data' },
112
+ ];
113
+ // @ts-ignore: canConsumeForm may be unused
114
+ const canConsumeForm = runtime.canConsumeForm(consumes);
115
+ let formParams;
116
+ let useForm = false;
117
+ // use FormData to transmit files using content-type "multipart/form-data"
118
+ useForm = canConsumeForm;
119
+ if (useForm) {
120
+ formParams = new FormData();
121
+ }
122
+ else {
123
+ formParams = new URLSearchParams();
124
+ }
125
+ if (requestParameters['file'] != null) {
126
+ formParams.append('file', requestParameters['file']);
127
+ }
128
+ const response = yield this.request({
129
+ path: `/v1/analysis/circular-dependencies`,
130
+ method: 'POST',
131
+ headers: headerParameters,
132
+ query: queryParameters,
133
+ body: formParams,
134
+ }, initOverrides);
135
+ return new runtime.JSONApiResponse(response, (jsonValue) => (0, index_1.CircularDependencyResponseAsyncFromJSON)(jsonValue));
136
+ });
137
+ }
138
+ /**
139
+ * Upload a zipped repository snapshot to detect circular dependencies (dependency cycles) at the file level using Tarjan\'s strongly connected components algorithm.
140
+ * Circular dependency detection
141
+ */
142
+ generateCircularDependencyAnalysis(requestParameters, initOverrides) {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ const response = yield this.generateCircularDependencyAnalysisRaw(requestParameters, initOverrides);
145
+ return yield response.value();
146
+ });
147
+ }
90
148
  /**
91
149
  * Upload a zipped repository snapshot to identify dead (unreachable) code candidates by combining parse graph declarations with call graph relationships.
92
150
  * Dead code analysis
@@ -261,6 +319,72 @@ class DefaultApi extends runtime.BaseAPI {
261
319
  return yield response.value();
262
320
  });
263
321
  }
322
+ /**
323
+ * Compute blast radius — what breaks if a given file or function changes. Uses reverse-reachability BFS on call graph and dependency graph, enriched with LLM-powered domain classification to detect cross-domain impact. **Three usage modes:** 1. **With diff** — upload a unified diff (`git diff` output) alongside the repo zip. Changed files are automatically extracted as targets. Best for CI/CD pipelines. 2. **With targets** — specify files or file:function pairs via query parameter. Best for ad-hoc analysis of specific functions. 3. **Neither** — analyzes the entire codebase and returns a global coupling/risk map with the most critical files ranked by dependent count. **CI Integration (GitHub Actions):** ```yaml - name: Impact Analysis run: | git diff origin/main...HEAD > changes.diff git archive --format=zip HEAD -o repo.zip curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" \\ -H \"Idempotency-Key: ${{ github.run_id }}-impact\" \\ -H \"X-Api-Key: ${{ secrets.SUPERMODEL_API_KEY }}\" \\ -F \"file=@repo.zip;type=application/zip\" \\ -F \"diff=@changes.diff;type=text/plain\" \\ -o impact.json ``` **CI Integration (GitLab CI):** ```yaml impact_analysis: script: - git diff origin/main...HEAD > changes.diff - git archive --format=zip HEAD -o repo.zip - >- curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" -H \"Idempotency-Key: $CI_PIPELINE_IID-impact\" -H \"X-Api-Key: $SUPERMODEL_API_KEY\" -F \"file=@repo.zip;type=application/zip\" -F \"diff=@changes.diff;type=text/plain\" -o impact.json ``` **Standalone usage (no CI):** ```bash # Analyze specific targets curl -X POST \'.../v1/analysis/impact?targets=src/services/billing.ts:calculateTotal\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' # Analyze from a diff git diff main > changes.diff && git archive --format=zip HEAD -o repo.zip curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' \\ -F \'diff=@changes.diff;type=text/plain\' # Global coupling map (no targets, no diff) curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' ```
324
+ * Impact analysis
325
+ */
326
+ generateImpactAnalysisRaw(requestParameters, initOverrides) {
327
+ return __awaiter(this, void 0, void 0, function* () {
328
+ if (requestParameters['idempotencyKey'] == null) {
329
+ throw new runtime.RequiredError('idempotencyKey', 'Required parameter "idempotencyKey" was null or undefined when calling generateImpactAnalysis().');
330
+ }
331
+ if (requestParameters['file'] == null) {
332
+ throw new runtime.RequiredError('file', 'Required parameter "file" was null or undefined when calling generateImpactAnalysis().');
333
+ }
334
+ const queryParameters = {};
335
+ if (requestParameters['targets'] != null) {
336
+ queryParameters['targets'] = requestParameters['targets'];
337
+ }
338
+ const headerParameters = {};
339
+ if (requestParameters['idempotencyKey'] != null) {
340
+ headerParameters['Idempotency-Key'] = String(requestParameters['idempotencyKey']);
341
+ }
342
+ if (this.configuration && this.configuration.apiKey) {
343
+ headerParameters["X-Api-Key"] = yield this.configuration.apiKey("X-Api-Key"); // ApiKeyAuth authentication
344
+ }
345
+ const consumes = [
346
+ { contentType: 'multipart/form-data' },
347
+ ];
348
+ // @ts-ignore: canConsumeForm may be unused
349
+ const canConsumeForm = runtime.canConsumeForm(consumes);
350
+ let formParams;
351
+ let useForm = false;
352
+ // use FormData to transmit files using content-type "multipart/form-data"
353
+ useForm = canConsumeForm;
354
+ // use FormData to transmit files using content-type "multipart/form-data"
355
+ useForm = canConsumeForm;
356
+ if (useForm) {
357
+ formParams = new FormData();
358
+ }
359
+ else {
360
+ formParams = new URLSearchParams();
361
+ }
362
+ if (requestParameters['file'] != null) {
363
+ formParams.append('file', requestParameters['file']);
364
+ }
365
+ if (requestParameters['diff'] != null) {
366
+ formParams.append('diff', requestParameters['diff']);
367
+ }
368
+ const response = yield this.request({
369
+ path: `/v1/analysis/impact`,
370
+ method: 'POST',
371
+ headers: headerParameters,
372
+ query: queryParameters,
373
+ body: formParams,
374
+ }, initOverrides);
375
+ return new runtime.JSONApiResponse(response, (jsonValue) => (0, index_1.ImpactAnalysisResponseAsyncFromJSON)(jsonValue));
376
+ });
377
+ }
378
+ /**
379
+ * Compute blast radius — what breaks if a given file or function changes. Uses reverse-reachability BFS on call graph and dependency graph, enriched with LLM-powered domain classification to detect cross-domain impact. **Three usage modes:** 1. **With diff** — upload a unified diff (`git diff` output) alongside the repo zip. Changed files are automatically extracted as targets. Best for CI/CD pipelines. 2. **With targets** — specify files or file:function pairs via query parameter. Best for ad-hoc analysis of specific functions. 3. **Neither** — analyzes the entire codebase and returns a global coupling/risk map with the most critical files ranked by dependent count. **CI Integration (GitHub Actions):** ```yaml - name: Impact Analysis run: | git diff origin/main...HEAD > changes.diff git archive --format=zip HEAD -o repo.zip curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" \\ -H \"Idempotency-Key: ${{ github.run_id }}-impact\" \\ -H \"X-Api-Key: ${{ secrets.SUPERMODEL_API_KEY }}\" \\ -F \"file=@repo.zip;type=application/zip\" \\ -F \"diff=@changes.diff;type=text/plain\" \\ -o impact.json ``` **CI Integration (GitLab CI):** ```yaml impact_analysis: script: - git diff origin/main...HEAD > changes.diff - git archive --format=zip HEAD -o repo.zip - >- curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" -H \"Idempotency-Key: $CI_PIPELINE_IID-impact\" -H \"X-Api-Key: $SUPERMODEL_API_KEY\" -F \"file=@repo.zip;type=application/zip\" -F \"diff=@changes.diff;type=text/plain\" -o impact.json ``` **Standalone usage (no CI):** ```bash # Analyze specific targets curl -X POST \'.../v1/analysis/impact?targets=src/services/billing.ts:calculateTotal\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' # Analyze from a diff git diff main > changes.diff && git archive --format=zip HEAD -o repo.zip curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' \\ -F \'diff=@changes.diff;type=text/plain\' # Global coupling map (no targets, no diff) curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' ```
380
+ * Impact analysis
381
+ */
382
+ generateImpactAnalysis(requestParameters, initOverrides) {
383
+ return __awaiter(this, void 0, void 0, function* () {
384
+ const response = yield this.generateImpactAnalysisRaw(requestParameters, initOverrides);
385
+ return yield response.value();
386
+ });
387
+ }
264
388
  /**
265
389
  * Upload a zipped repository snapshot to generate parse tree relationships.
266
390
  * Parse graph
@@ -377,5 +501,63 @@ class DefaultApi extends runtime.BaseAPI {
377
501
  return yield response.value();
378
502
  });
379
503
  }
504
+ /**
505
+ * Upload a zipped repository snapshot to identify functions with zero test coverage by tracing call graph reachability from test files to production code. This is static analysis — no test execution or instrumentation required.
506
+ * Test coverage map
507
+ */
508
+ generateTestCoverageMapRaw(requestParameters, initOverrides) {
509
+ return __awaiter(this, void 0, void 0, function* () {
510
+ if (requestParameters['idempotencyKey'] == null) {
511
+ throw new runtime.RequiredError('idempotencyKey', 'Required parameter "idempotencyKey" was null or undefined when calling generateTestCoverageMap().');
512
+ }
513
+ if (requestParameters['file'] == null) {
514
+ throw new runtime.RequiredError('file', 'Required parameter "file" was null or undefined when calling generateTestCoverageMap().');
515
+ }
516
+ const queryParameters = {};
517
+ const headerParameters = {};
518
+ if (requestParameters['idempotencyKey'] != null) {
519
+ headerParameters['Idempotency-Key'] = String(requestParameters['idempotencyKey']);
520
+ }
521
+ if (this.configuration && this.configuration.apiKey) {
522
+ headerParameters["X-Api-Key"] = yield this.configuration.apiKey("X-Api-Key"); // ApiKeyAuth authentication
523
+ }
524
+ const consumes = [
525
+ { contentType: 'multipart/form-data' },
526
+ ];
527
+ // @ts-ignore: canConsumeForm may be unused
528
+ const canConsumeForm = runtime.canConsumeForm(consumes);
529
+ let formParams;
530
+ let useForm = false;
531
+ // use FormData to transmit files using content-type "multipart/form-data"
532
+ useForm = canConsumeForm;
533
+ if (useForm) {
534
+ formParams = new FormData();
535
+ }
536
+ else {
537
+ formParams = new URLSearchParams();
538
+ }
539
+ if (requestParameters['file'] != null) {
540
+ formParams.append('file', requestParameters['file']);
541
+ }
542
+ const response = yield this.request({
543
+ path: `/v1/analysis/test-coverage-map`,
544
+ method: 'POST',
545
+ headers: headerParameters,
546
+ query: queryParameters,
547
+ body: formParams,
548
+ }, initOverrides);
549
+ return new runtime.JSONApiResponse(response, (jsonValue) => (0, index_1.TestCoverageMapResponseAsyncFromJSON)(jsonValue));
550
+ });
551
+ }
552
+ /**
553
+ * Upload a zipped repository snapshot to identify functions with zero test coverage by tracing call graph reachability from test files to production code. This is static analysis — no test execution or instrumentation required.
554
+ * Test coverage map
555
+ */
556
+ generateTestCoverageMap(requestParameters, initOverrides) {
557
+ return __awaiter(this, void 0, void 0, function* () {
558
+ const response = yield this.generateTestCoverageMapRaw(requestParameters, initOverrides);
559
+ return yield response.value();
560
+ });
561
+ }
380
562
  }
381
563
  exports.DefaultApi = DefaultApi;
@@ -2,7 +2,7 @@
2
2
  * Supermodel
3
3
  * Code Graphing & Analysis API
4
4
  *
5
- * The version of the OpenAPI document: 0.9.3
5
+ * The version of the OpenAPI document: 0.9.5
6
6
  *
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -10,11 +10,15 @@
10
10
  * Do not edit the class manually.
11
11
  */
12
12
  import * as runtime from '../runtime';
13
- import type { CodeGraphEnvelopeAsync, DeadCodeAnalysisResponseAsync, DomainClassificationResponseAsync, SupermodelIRAsync } from '../models/index';
13
+ import type { CircularDependencyResponseAsync, CodeGraphEnvelopeAsync, DeadCodeAnalysisResponseAsync, DomainClassificationResponseAsync, ImpactAnalysisResponseAsync, SupermodelIRAsync, TestCoverageMapResponseAsync } from '../models/index';
14
14
  export interface GenerateCallGraphRequest {
15
15
  idempotencyKey: string;
16
16
  file: Blob;
17
17
  }
18
+ export interface GenerateCircularDependencyAnalysisRequest {
19
+ idempotencyKey: string;
20
+ file: Blob;
21
+ }
18
22
  export interface GenerateDeadCodeAnalysisRequest {
19
23
  idempotencyKey: string;
20
24
  file: Blob;
@@ -27,6 +31,12 @@ export interface GenerateDomainGraphRequest {
27
31
  idempotencyKey: string;
28
32
  file: Blob;
29
33
  }
34
+ export interface GenerateImpactAnalysisRequest {
35
+ idempotencyKey: string;
36
+ file: Blob;
37
+ targets?: string;
38
+ diff?: Blob;
39
+ }
30
40
  export interface GenerateParseGraphRequest {
31
41
  idempotencyKey: string;
32
42
  file: Blob;
@@ -35,6 +45,10 @@ export interface GenerateSupermodelGraphRequest {
35
45
  idempotencyKey: string;
36
46
  file: Blob;
37
47
  }
48
+ export interface GenerateTestCoverageMapRequest {
49
+ idempotencyKey: string;
50
+ file: Blob;
51
+ }
38
52
  /**
39
53
  *
40
54
  */
@@ -49,6 +63,16 @@ export declare class DefaultApi extends runtime.BaseAPI {
49
63
  * Call graph
50
64
  */
51
65
  generateCallGraph(requestParameters: GenerateCallGraphRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<CodeGraphEnvelopeAsync>;
66
+ /**
67
+ * Upload a zipped repository snapshot to detect circular dependencies (dependency cycles) at the file level using Tarjan\'s strongly connected components algorithm.
68
+ * Circular dependency detection
69
+ */
70
+ generateCircularDependencyAnalysisRaw(requestParameters: GenerateCircularDependencyAnalysisRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<CircularDependencyResponseAsync>>;
71
+ /**
72
+ * Upload a zipped repository snapshot to detect circular dependencies (dependency cycles) at the file level using Tarjan\'s strongly connected components algorithm.
73
+ * Circular dependency detection
74
+ */
75
+ generateCircularDependencyAnalysis(requestParameters: GenerateCircularDependencyAnalysisRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<CircularDependencyResponseAsync>;
52
76
  /**
53
77
  * Upload a zipped repository snapshot to identify dead (unreachable) code candidates by combining parse graph declarations with call graph relationships.
54
78
  * Dead code analysis
@@ -79,6 +103,16 @@ export declare class DefaultApi extends runtime.BaseAPI {
79
103
  * Domain graph
80
104
  */
81
105
  generateDomainGraph(requestParameters: GenerateDomainGraphRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<DomainClassificationResponseAsync>;
106
+ /**
107
+ * Compute blast radius — what breaks if a given file or function changes. Uses reverse-reachability BFS on call graph and dependency graph, enriched with LLM-powered domain classification to detect cross-domain impact. **Three usage modes:** 1. **With diff** — upload a unified diff (`git diff` output) alongside the repo zip. Changed files are automatically extracted as targets. Best for CI/CD pipelines. 2. **With targets** — specify files or file:function pairs via query parameter. Best for ad-hoc analysis of specific functions. 3. **Neither** — analyzes the entire codebase and returns a global coupling/risk map with the most critical files ranked by dependent count. **CI Integration (GitHub Actions):** ```yaml - name: Impact Analysis run: | git diff origin/main...HEAD > changes.diff git archive --format=zip HEAD -o repo.zip curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" \\ -H \"Idempotency-Key: ${{ github.run_id }}-impact\" \\ -H \"X-Api-Key: ${{ secrets.SUPERMODEL_API_KEY }}\" \\ -F \"file=@repo.zip;type=application/zip\" \\ -F \"diff=@changes.diff;type=text/plain\" \\ -o impact.json ``` **CI Integration (GitLab CI):** ```yaml impact_analysis: script: - git diff origin/main...HEAD > changes.diff - git archive --format=zip HEAD -o repo.zip - >- curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" -H \"Idempotency-Key: $CI_PIPELINE_IID-impact\" -H \"X-Api-Key: $SUPERMODEL_API_KEY\" -F \"file=@repo.zip;type=application/zip\" -F \"diff=@changes.diff;type=text/plain\" -o impact.json ``` **Standalone usage (no CI):** ```bash # Analyze specific targets curl -X POST \'.../v1/analysis/impact?targets=src/services/billing.ts:calculateTotal\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' # Analyze from a diff git diff main > changes.diff && git archive --format=zip HEAD -o repo.zip curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' \\ -F \'diff=@changes.diff;type=text/plain\' # Global coupling map (no targets, no diff) curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' ```
108
+ * Impact analysis
109
+ */
110
+ generateImpactAnalysisRaw(requestParameters: GenerateImpactAnalysisRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ImpactAnalysisResponseAsync>>;
111
+ /**
112
+ * Compute blast radius — what breaks if a given file or function changes. Uses reverse-reachability BFS on call graph and dependency graph, enriched with LLM-powered domain classification to detect cross-domain impact. **Three usage modes:** 1. **With diff** — upload a unified diff (`git diff` output) alongside the repo zip. Changed files are automatically extracted as targets. Best for CI/CD pipelines. 2. **With targets** — specify files or file:function pairs via query parameter. Best for ad-hoc analysis of specific functions. 3. **Neither** — analyzes the entire codebase and returns a global coupling/risk map with the most critical files ranked by dependent count. **CI Integration (GitHub Actions):** ```yaml - name: Impact Analysis run: | git diff origin/main...HEAD > changes.diff git archive --format=zip HEAD -o repo.zip curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" \\ -H \"Idempotency-Key: ${{ github.run_id }}-impact\" \\ -H \"X-Api-Key: ${{ secrets.SUPERMODEL_API_KEY }}\" \\ -F \"file=@repo.zip;type=application/zip\" \\ -F \"diff=@changes.diff;type=text/plain\" \\ -o impact.json ``` **CI Integration (GitLab CI):** ```yaml impact_analysis: script: - git diff origin/main...HEAD > changes.diff - git archive --format=zip HEAD -o repo.zip - >- curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" -H \"Idempotency-Key: $CI_PIPELINE_IID-impact\" -H \"X-Api-Key: $SUPERMODEL_API_KEY\" -F \"file=@repo.zip;type=application/zip\" -F \"diff=@changes.diff;type=text/plain\" -o impact.json ``` **Standalone usage (no CI):** ```bash # Analyze specific targets curl -X POST \'.../v1/analysis/impact?targets=src/services/billing.ts:calculateTotal\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' # Analyze from a diff git diff main > changes.diff && git archive --format=zip HEAD -o repo.zip curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' \\ -F \'diff=@changes.diff;type=text/plain\' # Global coupling map (no targets, no diff) curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' ```
113
+ * Impact analysis
114
+ */
115
+ generateImpactAnalysis(requestParameters: GenerateImpactAnalysisRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ImpactAnalysisResponseAsync>;
82
116
  /**
83
117
  * Upload a zipped repository snapshot to generate parse tree relationships.
84
118
  * Parse graph
@@ -99,4 +133,14 @@ export declare class DefaultApi extends runtime.BaseAPI {
99
133
  * Supermodel graph
100
134
  */
101
135
  generateSupermodelGraph(requestParameters: GenerateSupermodelGraphRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<SupermodelIRAsync>;
136
+ /**
137
+ * Upload a zipped repository snapshot to identify functions with zero test coverage by tracing call graph reachability from test files to production code. This is static analysis — no test execution or instrumentation required.
138
+ * Test coverage map
139
+ */
140
+ generateTestCoverageMapRaw(requestParameters: GenerateTestCoverageMapRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<TestCoverageMapResponseAsync>>;
141
+ /**
142
+ * Upload a zipped repository snapshot to identify functions with zero test coverage by tracing call graph reachability from test files to production code. This is static analysis — no test execution or instrumentation required.
143
+ * Test coverage map
144
+ */
145
+ generateTestCoverageMap(requestParameters: GenerateTestCoverageMapRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<TestCoverageMapResponseAsync>;
102
146
  }
@@ -4,7 +4,7 @@
4
4
  * Supermodel
5
5
  * Code Graphing & Analysis API
6
6
  *
7
- * The version of the OpenAPI document: 0.9.3
7
+ * The version of the OpenAPI document: 0.9.5
8
8
  *
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -21,7 +21,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
21
21
  });
22
22
  };
23
23
  import * as runtime from '../runtime';
24
- import { CodeGraphEnvelopeAsyncFromJSON, DeadCodeAnalysisResponseAsyncFromJSON, DomainClassificationResponseAsyncFromJSON, SupermodelIRAsyncFromJSON, } from '../models/index';
24
+ import { CircularDependencyResponseAsyncFromJSON, CodeGraphEnvelopeAsyncFromJSON, DeadCodeAnalysisResponseAsyncFromJSON, DomainClassificationResponseAsyncFromJSON, ImpactAnalysisResponseAsyncFromJSON, SupermodelIRAsyncFromJSON, TestCoverageMapResponseAsyncFromJSON, } from '../models/index';
25
25
  /**
26
26
  *
27
27
  */
@@ -84,6 +84,64 @@ export class DefaultApi extends runtime.BaseAPI {
84
84
  return yield response.value();
85
85
  });
86
86
  }
87
+ /**
88
+ * Upload a zipped repository snapshot to detect circular dependencies (dependency cycles) at the file level using Tarjan\'s strongly connected components algorithm.
89
+ * Circular dependency detection
90
+ */
91
+ generateCircularDependencyAnalysisRaw(requestParameters, initOverrides) {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ if (requestParameters['idempotencyKey'] == null) {
94
+ throw new runtime.RequiredError('idempotencyKey', 'Required parameter "idempotencyKey" was null or undefined when calling generateCircularDependencyAnalysis().');
95
+ }
96
+ if (requestParameters['file'] == null) {
97
+ throw new runtime.RequiredError('file', 'Required parameter "file" was null or undefined when calling generateCircularDependencyAnalysis().');
98
+ }
99
+ const queryParameters = {};
100
+ const headerParameters = {};
101
+ if (requestParameters['idempotencyKey'] != null) {
102
+ headerParameters['Idempotency-Key'] = String(requestParameters['idempotencyKey']);
103
+ }
104
+ if (this.configuration && this.configuration.apiKey) {
105
+ headerParameters["X-Api-Key"] = yield this.configuration.apiKey("X-Api-Key"); // ApiKeyAuth authentication
106
+ }
107
+ const consumes = [
108
+ { contentType: 'multipart/form-data' },
109
+ ];
110
+ // @ts-ignore: canConsumeForm may be unused
111
+ const canConsumeForm = runtime.canConsumeForm(consumes);
112
+ let formParams;
113
+ let useForm = false;
114
+ // use FormData to transmit files using content-type "multipart/form-data"
115
+ useForm = canConsumeForm;
116
+ if (useForm) {
117
+ formParams = new FormData();
118
+ }
119
+ else {
120
+ formParams = new URLSearchParams();
121
+ }
122
+ if (requestParameters['file'] != null) {
123
+ formParams.append('file', requestParameters['file']);
124
+ }
125
+ const response = yield this.request({
126
+ path: `/v1/analysis/circular-dependencies`,
127
+ method: 'POST',
128
+ headers: headerParameters,
129
+ query: queryParameters,
130
+ body: formParams,
131
+ }, initOverrides);
132
+ return new runtime.JSONApiResponse(response, (jsonValue) => CircularDependencyResponseAsyncFromJSON(jsonValue));
133
+ });
134
+ }
135
+ /**
136
+ * Upload a zipped repository snapshot to detect circular dependencies (dependency cycles) at the file level using Tarjan\'s strongly connected components algorithm.
137
+ * Circular dependency detection
138
+ */
139
+ generateCircularDependencyAnalysis(requestParameters, initOverrides) {
140
+ return __awaiter(this, void 0, void 0, function* () {
141
+ const response = yield this.generateCircularDependencyAnalysisRaw(requestParameters, initOverrides);
142
+ return yield response.value();
143
+ });
144
+ }
87
145
  /**
88
146
  * Upload a zipped repository snapshot to identify dead (unreachable) code candidates by combining parse graph declarations with call graph relationships.
89
147
  * Dead code analysis
@@ -258,6 +316,72 @@ export class DefaultApi extends runtime.BaseAPI {
258
316
  return yield response.value();
259
317
  });
260
318
  }
319
+ /**
320
+ * Compute blast radius — what breaks if a given file or function changes. Uses reverse-reachability BFS on call graph and dependency graph, enriched with LLM-powered domain classification to detect cross-domain impact. **Three usage modes:** 1. **With diff** — upload a unified diff (`git diff` output) alongside the repo zip. Changed files are automatically extracted as targets. Best for CI/CD pipelines. 2. **With targets** — specify files or file:function pairs via query parameter. Best for ad-hoc analysis of specific functions. 3. **Neither** — analyzes the entire codebase and returns a global coupling/risk map with the most critical files ranked by dependent count. **CI Integration (GitHub Actions):** ```yaml - name: Impact Analysis run: | git diff origin/main...HEAD > changes.diff git archive --format=zip HEAD -o repo.zip curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" \\ -H \"Idempotency-Key: ${{ github.run_id }}-impact\" \\ -H \"X-Api-Key: ${{ secrets.SUPERMODEL_API_KEY }}\" \\ -F \"file=@repo.zip;type=application/zip\" \\ -F \"diff=@changes.diff;type=text/plain\" \\ -o impact.json ``` **CI Integration (GitLab CI):** ```yaml impact_analysis: script: - git diff origin/main...HEAD > changes.diff - git archive --format=zip HEAD -o repo.zip - >- curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" -H \"Idempotency-Key: $CI_PIPELINE_IID-impact\" -H \"X-Api-Key: $SUPERMODEL_API_KEY\" -F \"file=@repo.zip;type=application/zip\" -F \"diff=@changes.diff;type=text/plain\" -o impact.json ``` **Standalone usage (no CI):** ```bash # Analyze specific targets curl -X POST \'.../v1/analysis/impact?targets=src/services/billing.ts:calculateTotal\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' # Analyze from a diff git diff main > changes.diff && git archive --format=zip HEAD -o repo.zip curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' \\ -F \'diff=@changes.diff;type=text/plain\' # Global coupling map (no targets, no diff) curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' ```
321
+ * Impact analysis
322
+ */
323
+ generateImpactAnalysisRaw(requestParameters, initOverrides) {
324
+ return __awaiter(this, void 0, void 0, function* () {
325
+ if (requestParameters['idempotencyKey'] == null) {
326
+ throw new runtime.RequiredError('idempotencyKey', 'Required parameter "idempotencyKey" was null or undefined when calling generateImpactAnalysis().');
327
+ }
328
+ if (requestParameters['file'] == null) {
329
+ throw new runtime.RequiredError('file', 'Required parameter "file" was null or undefined when calling generateImpactAnalysis().');
330
+ }
331
+ const queryParameters = {};
332
+ if (requestParameters['targets'] != null) {
333
+ queryParameters['targets'] = requestParameters['targets'];
334
+ }
335
+ const headerParameters = {};
336
+ if (requestParameters['idempotencyKey'] != null) {
337
+ headerParameters['Idempotency-Key'] = String(requestParameters['idempotencyKey']);
338
+ }
339
+ if (this.configuration && this.configuration.apiKey) {
340
+ headerParameters["X-Api-Key"] = yield this.configuration.apiKey("X-Api-Key"); // ApiKeyAuth authentication
341
+ }
342
+ const consumes = [
343
+ { contentType: 'multipart/form-data' },
344
+ ];
345
+ // @ts-ignore: canConsumeForm may be unused
346
+ const canConsumeForm = runtime.canConsumeForm(consumes);
347
+ let formParams;
348
+ let useForm = false;
349
+ // use FormData to transmit files using content-type "multipart/form-data"
350
+ useForm = canConsumeForm;
351
+ // use FormData to transmit files using content-type "multipart/form-data"
352
+ useForm = canConsumeForm;
353
+ if (useForm) {
354
+ formParams = new FormData();
355
+ }
356
+ else {
357
+ formParams = new URLSearchParams();
358
+ }
359
+ if (requestParameters['file'] != null) {
360
+ formParams.append('file', requestParameters['file']);
361
+ }
362
+ if (requestParameters['diff'] != null) {
363
+ formParams.append('diff', requestParameters['diff']);
364
+ }
365
+ const response = yield this.request({
366
+ path: `/v1/analysis/impact`,
367
+ method: 'POST',
368
+ headers: headerParameters,
369
+ query: queryParameters,
370
+ body: formParams,
371
+ }, initOverrides);
372
+ return new runtime.JSONApiResponse(response, (jsonValue) => ImpactAnalysisResponseAsyncFromJSON(jsonValue));
373
+ });
374
+ }
375
+ /**
376
+ * Compute blast radius — what breaks if a given file or function changes. Uses reverse-reachability BFS on call graph and dependency graph, enriched with LLM-powered domain classification to detect cross-domain impact. **Three usage modes:** 1. **With diff** — upload a unified diff (`git diff` output) alongside the repo zip. Changed files are automatically extracted as targets. Best for CI/CD pipelines. 2. **With targets** — specify files or file:function pairs via query parameter. Best for ad-hoc analysis of specific functions. 3. **Neither** — analyzes the entire codebase and returns a global coupling/risk map with the most critical files ranked by dependent count. **CI Integration (GitHub Actions):** ```yaml - name: Impact Analysis run: | git diff origin/main...HEAD > changes.diff git archive --format=zip HEAD -o repo.zip curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" \\ -H \"Idempotency-Key: ${{ github.run_id }}-impact\" \\ -H \"X-Api-Key: ${{ secrets.SUPERMODEL_API_KEY }}\" \\ -F \"file=@repo.zip;type=application/zip\" \\ -F \"diff=@changes.diff;type=text/plain\" \\ -o impact.json ``` **CI Integration (GitLab CI):** ```yaml impact_analysis: script: - git diff origin/main...HEAD > changes.diff - git archive --format=zip HEAD -o repo.zip - >- curl -s -X POST \"$SUPERMODEL_API_URL/v1/analysis/impact\" -H \"Idempotency-Key: $CI_PIPELINE_IID-impact\" -H \"X-Api-Key: $SUPERMODEL_API_KEY\" -F \"file=@repo.zip;type=application/zip\" -F \"diff=@changes.diff;type=text/plain\" -o impact.json ``` **Standalone usage (no CI):** ```bash # Analyze specific targets curl -X POST \'.../v1/analysis/impact?targets=src/services/billing.ts:calculateTotal\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' # Analyze from a diff git diff main > changes.diff && git archive --format=zip HEAD -o repo.zip curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' \\ -F \'diff=@changes.diff;type=text/plain\' # Global coupling map (no targets, no diff) curl -X POST \'.../v1/analysis/impact\' \\ -H \'Idempotency-Key: my-key\' -H \'X-Api-Key: ...\' \\ -F \'file=@repo.zip;type=application/zip\' ```
377
+ * Impact analysis
378
+ */
379
+ generateImpactAnalysis(requestParameters, initOverrides) {
380
+ return __awaiter(this, void 0, void 0, function* () {
381
+ const response = yield this.generateImpactAnalysisRaw(requestParameters, initOverrides);
382
+ return yield response.value();
383
+ });
384
+ }
261
385
  /**
262
386
  * Upload a zipped repository snapshot to generate parse tree relationships.
263
387
  * Parse graph
@@ -374,4 +498,62 @@ export class DefaultApi extends runtime.BaseAPI {
374
498
  return yield response.value();
375
499
  });
376
500
  }
501
+ /**
502
+ * Upload a zipped repository snapshot to identify functions with zero test coverage by tracing call graph reachability from test files to production code. This is static analysis — no test execution or instrumentation required.
503
+ * Test coverage map
504
+ */
505
+ generateTestCoverageMapRaw(requestParameters, initOverrides) {
506
+ return __awaiter(this, void 0, void 0, function* () {
507
+ if (requestParameters['idempotencyKey'] == null) {
508
+ throw new runtime.RequiredError('idempotencyKey', 'Required parameter "idempotencyKey" was null or undefined when calling generateTestCoverageMap().');
509
+ }
510
+ if (requestParameters['file'] == null) {
511
+ throw new runtime.RequiredError('file', 'Required parameter "file" was null or undefined when calling generateTestCoverageMap().');
512
+ }
513
+ const queryParameters = {};
514
+ const headerParameters = {};
515
+ if (requestParameters['idempotencyKey'] != null) {
516
+ headerParameters['Idempotency-Key'] = String(requestParameters['idempotencyKey']);
517
+ }
518
+ if (this.configuration && this.configuration.apiKey) {
519
+ headerParameters["X-Api-Key"] = yield this.configuration.apiKey("X-Api-Key"); // ApiKeyAuth authentication
520
+ }
521
+ const consumes = [
522
+ { contentType: 'multipart/form-data' },
523
+ ];
524
+ // @ts-ignore: canConsumeForm may be unused
525
+ const canConsumeForm = runtime.canConsumeForm(consumes);
526
+ let formParams;
527
+ let useForm = false;
528
+ // use FormData to transmit files using content-type "multipart/form-data"
529
+ useForm = canConsumeForm;
530
+ if (useForm) {
531
+ formParams = new FormData();
532
+ }
533
+ else {
534
+ formParams = new URLSearchParams();
535
+ }
536
+ if (requestParameters['file'] != null) {
537
+ formParams.append('file', requestParameters['file']);
538
+ }
539
+ const response = yield this.request({
540
+ path: `/v1/analysis/test-coverage-map`,
541
+ method: 'POST',
542
+ headers: headerParameters,
543
+ query: queryParameters,
544
+ body: formParams,
545
+ }, initOverrides);
546
+ return new runtime.JSONApiResponse(response, (jsonValue) => TestCoverageMapResponseAsyncFromJSON(jsonValue));
547
+ });
548
+ }
549
+ /**
550
+ * Upload a zipped repository snapshot to identify functions with zero test coverage by tracing call graph reachability from test files to production code. This is static analysis — no test execution or instrumentation required.
551
+ * Test coverage map
552
+ */
553
+ generateTestCoverageMap(requestParameters, initOverrides) {
554
+ return __awaiter(this, void 0, void 0, function* () {
555
+ const response = yield this.generateTestCoverageMapRaw(requestParameters, initOverrides);
556
+ return yield response.value();
557
+ });
558
+ }
377
559
  }