flakelab 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/README.md +225 -38
  2. package/dist/analysis/blob-report.d.ts +15 -0
  3. package/dist/analysis/blob-report.js +137 -0
  4. package/dist/analysis/blob-report.js.map +1 -0
  5. package/dist/analysis/cli.d.ts +7 -0
  6. package/dist/analysis/cli.js +28 -0
  7. package/dist/analysis/cli.js.map +1 -0
  8. package/dist/analysis/schema.d.ts +175 -0
  9. package/dist/analysis/schema.js +34 -0
  10. package/dist/analysis/schema.js.map +1 -0
  11. package/dist/analysis/zip-archive.d.ts +6 -0
  12. package/dist/analysis/zip-archive.js +193 -0
  13. package/dist/analysis/zip-archive.js.map +1 -0
  14. package/dist/artifacts/paths.d.ts +3 -0
  15. package/dist/artifacts/paths.js +34 -0
  16. package/dist/artifacts/paths.js.map +1 -0
  17. package/dist/artifacts/retention.d.ts +1 -0
  18. package/dist/artifacts/retention.js +80 -0
  19. package/dist/artifacts/retention.js.map +1 -0
  20. package/dist/bisect/engine.js +0 -1
  21. package/dist/bisect/engine.js.map +1 -1
  22. package/dist/bisect/schema.d.ts +5 -6
  23. package/dist/bisect/schema.js +1 -2
  24. package/dist/bisect/schema.js.map +1 -1
  25. package/dist/bisect/solari-evaluator.js +9 -1
  26. package/dist/bisect/solari-evaluator.js.map +1 -1
  27. package/dist/ci/job-summary.d.ts +2 -0
  28. package/dist/ci/job-summary.js +120 -2
  29. package/dist/ci/job-summary.js.map +1 -1
  30. package/dist/ci/select-command.js +1 -1
  31. package/dist/ci/select-command.js.map +1 -1
  32. package/dist/ci/summary-command.js +12 -7
  33. package/dist/ci/summary-command.js.map +1 -1
  34. package/dist/cli-arguments.d.ts +44 -0
  35. package/dist/cli-arguments.js +356 -0
  36. package/dist/cli-arguments.js.map +1 -0
  37. package/dist/cli-command-help.d.ts +11 -0
  38. package/dist/cli-command-help.js +211 -0
  39. package/dist/cli-command-help.js.map +1 -0
  40. package/dist/cli-help.d.ts +5 -2
  41. package/dist/cli-help.js +122 -45
  42. package/dist/cli-help.js.map +1 -1
  43. package/dist/cli-option-definitions.d.ts +202 -0
  44. package/dist/cli-option-definitions.js +59 -0
  45. package/dist/cli-option-definitions.js.map +1 -0
  46. package/dist/cli.js +100 -100
  47. package/dist/cli.js.map +1 -1
  48. package/dist/commands/analyze-summary.d.ts +5 -0
  49. package/dist/commands/analyze-summary.js +89 -0
  50. package/dist/commands/analyze-summary.js.map +1 -0
  51. package/dist/commands/analyze.d.ts +6 -0
  52. package/dist/commands/analyze.js +128 -0
  53. package/dist/commands/analyze.js.map +1 -0
  54. package/dist/commands/bisect.d.ts +2 -2
  55. package/dist/commands/bisect.js +32 -3
  56. package/dist/commands/bisect.js.map +1 -1
  57. package/dist/commands/diagnose.d.ts +3 -2
  58. package/dist/commands/diagnose.js +355 -23
  59. package/dist/commands/diagnose.js.map +1 -1
  60. package/dist/commands/discover.d.ts +18 -2
  61. package/dist/commands/discover.js +215 -25
  62. package/dist/commands/discover.js.map +1 -1
  63. package/dist/commands/doctor.d.ts +2 -0
  64. package/dist/commands/doctor.js +66 -25
  65. package/dist/commands/doctor.js.map +1 -1
  66. package/dist/commands/investigate.d.ts +3 -2
  67. package/dist/commands/investigate.js +22 -3
  68. package/dist/commands/investigate.js.map +1 -1
  69. package/dist/commands/options.d.ts +123 -16
  70. package/dist/commands/options.js +24 -2
  71. package/dist/commands/options.js.map +1 -1
  72. package/dist/commands/prove.d.ts +2 -2
  73. package/dist/commands/prove.js +38 -1
  74. package/dist/commands/prove.js.map +1 -1
  75. package/dist/commands/repair.d.ts +8 -2
  76. package/dist/commands/repair.js +32 -9
  77. package/dist/commands/repair.js.map +1 -1
  78. package/dist/commands/replay.d.ts +2 -2
  79. package/dist/commands/replay.js +15 -2
  80. package/dist/commands/replay.js.map +1 -1
  81. package/dist/commands/report.d.ts +2 -2
  82. package/dist/commands/report.js +35 -10
  83. package/dist/commands/report.js.map +1 -1
  84. package/dist/commands/scan-summary.d.ts +7 -0
  85. package/dist/commands/scan-summary.js +175 -0
  86. package/dist/commands/scan-summary.js.map +1 -0
  87. package/dist/commands/scan.d.ts +9 -12
  88. package/dist/commands/scan.js +66 -62
  89. package/dist/commands/scan.js.map +1 -1
  90. package/dist/core/plan.js +1 -1
  91. package/dist/core/plan.js.map +1 -1
  92. package/dist/diagnosis/checkpoint.d.ts +6 -0
  93. package/dist/diagnosis/checkpoint.js +46 -0
  94. package/dist/diagnosis/checkpoint.js.map +1 -0
  95. package/dist/diagnosis/cli.d.ts +7 -0
  96. package/dist/diagnosis/cli.js +84 -0
  97. package/dist/diagnosis/cli.js.map +1 -0
  98. package/dist/diagnosis/recommendation.d.ts +13 -0
  99. package/dist/diagnosis/recommendation.js +95 -0
  100. package/dist/diagnosis/recommendation.js.map +1 -0
  101. package/dist/diagnosis/run-state.d.ts +52 -0
  102. package/dist/diagnosis/run-state.js +173 -0
  103. package/dist/diagnosis/run-state.js.map +1 -0
  104. package/dist/diagnosis/schema.d.ts +207 -0
  105. package/dist/diagnosis/schema.js +108 -0
  106. package/dist/diagnosis/schema.js.map +1 -0
  107. package/dist/diagnosis/solari-handoff.d.ts +9 -0
  108. package/dist/diagnosis/solari-handoff.js +40 -0
  109. package/dist/diagnosis/solari-handoff.js.map +1 -0
  110. package/dist/diagnosis/summary.d.ts +3 -0
  111. package/dist/diagnosis/summary.js +115 -0
  112. package/dist/diagnosis/summary.js.map +1 -0
  113. package/dist/discovery/auth-cookie.d.ts +19 -0
  114. package/dist/discovery/auth-cookie.js +26 -0
  115. package/dist/discovery/auth-cookie.js.map +1 -0
  116. package/dist/discovery/evaluate.d.ts +35 -2
  117. package/dist/discovery/evaluate.js +136 -30
  118. package/dist/discovery/evaluate.js.map +1 -1
  119. package/dist/discovery/event-loop.d.ts +25 -0
  120. package/dist/discovery/event-loop.js +84 -0
  121. package/dist/discovery/event-loop.js.map +1 -0
  122. package/dist/discovery/minimize.d.ts +61 -1
  123. package/dist/discovery/minimize.js +179 -7
  124. package/dist/discovery/minimize.js.map +1 -1
  125. package/dist/discovery/resource-loading.d.ts +25 -0
  126. package/dist/discovery/resource-loading.js +84 -0
  127. package/dist/discovery/resource-loading.js.map +1 -0
  128. package/dist/discovery/runner-environment.d.ts +26 -0
  129. package/dist/discovery/runner-environment.js +68 -0
  130. package/dist/discovery/runner-environment.js.map +1 -0
  131. package/dist/discovery/startup-event.d.ts +25 -0
  132. package/dist/discovery/startup-event.js +84 -0
  133. package/dist/discovery/startup-event.js.map +1 -0
  134. package/dist/discovery/storage-state.d.ts +26 -0
  135. package/dist/discovery/storage-state.js +86 -0
  136. package/dist/discovery/storage-state.js.map +1 -0
  137. package/dist/discovery/temporal-environment.d.ts +31 -0
  138. package/dist/discovery/temporal-environment.js +43 -0
  139. package/dist/discovery/temporal-environment.js.map +1 -0
  140. package/dist/discovery/visual-environment.d.ts +28 -0
  141. package/dist/discovery/visual-environment.js +42 -0
  142. package/dist/discovery/visual-environment.js.map +1 -0
  143. package/dist/domain/schema.d.ts +840 -20
  144. package/dist/domain/schema.js +216 -6
  145. package/dist/domain/schema.js.map +1 -1
  146. package/dist/faults/browser-context.d.ts +16 -0
  147. package/dist/faults/browser-context.js +60 -0
  148. package/dist/faults/browser-context.js.map +1 -0
  149. package/dist/faults/cookie-header.d.ts +5 -0
  150. package/dist/faults/cookie-header.js +25 -0
  151. package/dist/faults/cookie-header.js.map +1 -0
  152. package/dist/faults/document-bootstrap.d.ts +5 -0
  153. package/dist/faults/document-bootstrap.js +141 -0
  154. package/dist/faults/document-bootstrap.js.map +1 -0
  155. package/dist/faults/install.d.ts +1 -1
  156. package/dist/faults/install.js +199 -6
  157. package/dist/faults/install.js.map +1 -1
  158. package/dist/faults/pattern.d.ts +1 -0
  159. package/dist/faults/pattern.js +24 -0
  160. package/dist/faults/pattern.js.map +1 -0
  161. package/dist/investigator/agent.js +39 -17
  162. package/dist/investigator/agent.js.map +1 -1
  163. package/dist/investigator/ledger.d.ts +1 -1
  164. package/dist/investigator/ledger.js +2 -2
  165. package/dist/investigator/ledger.js.map +1 -1
  166. package/dist/investigator/safe-source.d.ts +1 -0
  167. package/dist/investigator/safe-source.js +12 -3
  168. package/dist/investigator/safe-source.js.map +1 -1
  169. package/dist/investigator/schema.d.ts +293 -2
  170. package/dist/investigator/schema.js +100 -2
  171. package/dist/investigator/schema.js.map +1 -1
  172. package/dist/proof/cli.d.ts +7 -0
  173. package/dist/proof/cli.js +108 -0
  174. package/dist/proof/cli.js.map +1 -0
  175. package/dist/proof/preflight.d.ts +4 -0
  176. package/dist/proof/preflight.js +9 -0
  177. package/dist/proof/preflight.js.map +1 -0
  178. package/dist/repair/generator.d.ts +12 -1
  179. package/dist/repair/generator.js +30 -6
  180. package/dist/repair/generator.js.map +1 -1
  181. package/dist/repair/remote-proof-runner.js +6 -10
  182. package/dist/repair/remote-proof-runner.js.map +1 -1
  183. package/dist/repair/schema.d.ts +77 -2
  184. package/dist/repair/schema.js +23 -2
  185. package/dist/repair/schema.js.map +1 -1
  186. package/dist/repair/solari-validator.d.ts +2 -0
  187. package/dist/repair/solari-validator.js +4 -6
  188. package/dist/repair/solari-validator.js.map +1 -1
  189. package/dist/repair/summary.d.ts +10 -0
  190. package/dist/repair/summary.js +58 -0
  191. package/dist/repair/summary.js.map +1 -0
  192. package/dist/repair/validator.d.ts +1 -0
  193. package/dist/repair/validator.js +53 -12
  194. package/dist/repair/validator.js.map +1 -1
  195. package/dist/report/bundle.js +16 -37
  196. package/dist/report/bundle.js.map +1 -1
  197. package/dist/report/model.js +131 -12
  198. package/dist/report/model.js.map +1 -1
  199. package/dist/report/open.d.ts +9 -0
  200. package/dist/report/open.js +23 -0
  201. package/dist/report/open.js.map +1 -1
  202. package/dist/report/report-client.css +2 -0
  203. package/dist/report/report-client.js +58 -0
  204. package/dist/report/schema.d.ts +115 -5
  205. package/dist/report/schema.js +24 -5
  206. package/dist/report/schema.js.map +1 -1
  207. package/dist/reproducer/schema.d.ts +89 -4
  208. package/dist/reproducer/schema.js +3 -4
  209. package/dist/reproducer/schema.js.map +1 -1
  210. package/dist/runner/execution-fault.d.ts +10 -0
  211. package/dist/runner/execution-fault.js +24 -0
  212. package/dist/runner/execution-fault.js.map +1 -0
  213. package/dist/runner/fault-proxy.d.ts +7 -0
  214. package/dist/runner/fault-proxy.js +366 -0
  215. package/dist/runner/fault-proxy.js.map +1 -0
  216. package/dist/runner/local.js +2 -2
  217. package/dist/runner/local.js.map +1 -1
  218. package/dist/runner/native-scan.d.ts +25 -0
  219. package/dist/runner/native-scan.js +306 -0
  220. package/dist/runner/native-scan.js.map +1 -0
  221. package/dist/runner/playwright-executor.d.ts +3 -0
  222. package/dist/runner/playwright-executor.js +125 -66
  223. package/dist/runner/playwright-executor.js.map +1 -1
  224. package/dist/runner/process-tree.d.ts +7 -0
  225. package/dist/runner/process-tree.js +62 -0
  226. package/dist/runner/process-tree.js.map +1 -0
  227. package/dist/runner/project-bridge.d.ts +7 -0
  228. package/dist/runner/project-bridge.js +83 -0
  229. package/dist/runner/project-bridge.js.map +1 -0
  230. package/dist/runner/trial-reporter.d.ts +7 -0
  231. package/dist/runner/trial-reporter.js +47 -0
  232. package/dist/runner/trial-reporter.js.map +1 -0
  233. package/dist/scan/failure-clusters.d.ts +24 -0
  234. package/dist/scan/failure-clusters.js +74 -0
  235. package/dist/scan/failure-clusters.js.map +1 -0
  236. package/dist/scan/schema.d.ts +170 -0
  237. package/dist/scan/schema.js +71 -0
  238. package/dist/scan/schema.js.map +1 -0
  239. package/dist/solari/executor.d.ts +5 -1
  240. package/dist/solari/executor.js +25 -17
  241. package/dist/solari/executor.js.map +1 -1
  242. package/dist/solari/run-demo.d.ts +13 -1
  243. package/dist/solari/run-demo.js +35 -16
  244. package/dist/solari/run-demo.js.map +1 -1
  245. package/dist/solari/usage.d.ts +8 -2
  246. package/dist/solari/usage.js +14 -4
  247. package/dist/solari/usage.js.map +1 -1
  248. package/dist/ui/boundary.d.ts +17 -0
  249. package/dist/ui/boundary.js +18 -0
  250. package/dist/ui/boundary.js.map +1 -0
  251. package/dist/ui/console.d.ts +4 -0
  252. package/dist/ui/console.js +11 -0
  253. package/dist/ui/console.js.map +1 -0
  254. package/dist/ui/document.d.ts +40 -0
  255. package/dist/ui/document.js +120 -0
  256. package/dist/ui/document.js.map +1 -0
  257. package/dist/ui/format.d.ts +8 -0
  258. package/dist/ui/format.js +32 -0
  259. package/dist/ui/format.js.map +1 -0
  260. package/dist/ui/progress.d.ts +17 -1
  261. package/dist/ui/progress.js +51 -8
  262. package/dist/ui/progress.js.map +1 -1
  263. package/dist/ui/status.d.ts +7 -0
  264. package/dist/ui/status.js +36 -0
  265. package/dist/ui/status.js.map +1 -0
  266. package/dist/ui/style.d.ts +8 -0
  267. package/dist/ui/style.js +22 -0
  268. package/dist/ui/style.js.map +1 -0
  269. package/dist/ui/text.d.ts +17 -0
  270. package/dist/ui/text.js +123 -0
  271. package/dist/ui/text.js.map +1 -0
  272. package/dist/ui/theme.d.ts +23 -0
  273. package/dist/ui/theme.js +77 -0
  274. package/dist/ui/theme.js.map +1 -0
  275. package/dist/ui/trial-progress.d.ts +13 -0
  276. package/dist/ui/trial-progress.js +42 -0
  277. package/dist/ui/trial-progress.js.map +1 -0
  278. package/package.json +14 -19
  279. package/dist/faults/network-delay.d.ts +0 -5
  280. package/dist/faults/network-delay.js +0 -34
  281. package/dist/faults/network-delay.js.map +0 -1
  282. package/dist/faults/request-failure.d.ts +0 -5
  283. package/dist/faults/request-failure.js +0 -24
  284. package/dist/faults/request-failure.js.map +0 -1
  285. package/dist/playwright.d.ts +0 -3
  286. package/dist/playwright.js +0 -21
  287. package/dist/playwright.js.map +0 -1
  288. package/dist/report/browser-entry.d.ts +0 -2
  289. package/dist/report/browser-entry.js +0 -15
  290. package/dist/report/browser-entry.js.map +0 -1
  291. package/dist/report/components/artifacts.d.ts +0 -4
  292. package/dist/report/components/artifacts.js +0 -6
  293. package/dist/report/components/artifacts.js.map +0 -1
  294. package/dist/report/components/experiments.d.ts +0 -4
  295. package/dist/report/components/experiments.js +0 -7
  296. package/dist/report/components/experiments.js.map +0 -1
  297. package/dist/report/components/hypotheses.d.ts +0 -4
  298. package/dist/report/components/hypotheses.js +0 -26
  299. package/dist/report/components/hypotheses.js.map +0 -1
  300. package/dist/report/components/indicators.d.ts +0 -32
  301. package/dist/report/components/indicators.js +0 -42
  302. package/dist/report/components/indicators.js.map +0 -1
  303. package/dist/report/components/layout.d.ts +0 -29
  304. package/dist/report/components/layout.js +0 -20
  305. package/dist/report/components/layout.js.map +0 -1
  306. package/dist/report/components/proof.d.ts +0 -4
  307. package/dist/report/components/proof.js +0 -34
  308. package/dist/report/components/proof.js.map +0 -1
  309. package/dist/report/components/reproduction.d.ts +0 -4
  310. package/dist/report/components/reproduction.js +0 -19
  311. package/dist/report/components/reproduction.js.map +0 -1
  312. package/dist/report/components/summary.d.ts +0 -4
  313. package/dist/report/components/summary.js +0 -12
  314. package/dist/report/components/summary.js.map +0 -1
  315. package/dist/report/components/verdict.d.ts +0 -4
  316. package/dist/report/components/verdict.js +0 -27
  317. package/dist/report/components/verdict.js.map +0 -1
  318. package/dist/report/report-app.d.ts +0 -6
  319. package/dist/report/report-app.js +0 -16
  320. package/dist/report/report-app.js.map +0 -1
  321. package/dist/report/report-details.css +0 -182
  322. package/dist/report/report.css +0 -404
@@ -0,0 +1,95 @@
1
+ import { integerOption, positiveNumberOption } from "../commands/options.js";
2
+ function quoted(value) {
3
+ return JSON.stringify(value);
4
+ }
5
+ function discoveryTrialBound(values) {
6
+ const trials = integerOption(values.trials, "trials");
7
+ const maximumDelay = integerOption(values["max-delay"], "max-delay");
8
+ const interventionBatches = 1 + Math.ceil(Math.log2(Math.max(1, maximumDelay)));
9
+ return 2 * (trials * interventionBatches + Math.max(trials, 12));
10
+ }
11
+ function formattedDuration(seconds) {
12
+ if (seconds < 60) {
13
+ return `about ${Math.max(1, seconds)} second(s)`;
14
+ }
15
+ return `about ${Math.ceil(seconds / 60)} minute(s)`;
16
+ }
17
+ function expectedDuration(elapsedMilliseconds, observedRuns, plannedTrials, concurrency) {
18
+ if (elapsedMilliseconds === 0 || observedRuns === 0) {
19
+ return `${plannedTrials} normal target run(s); no runtime sample is available yet`;
20
+ }
21
+ const millisecondsPerRun = elapsedMilliseconds / observedRuns;
22
+ const seconds = Math.ceil(millisecondsPerRun * plannedTrials / concurrency / 1_000);
23
+ return formattedDuration(seconds);
24
+ }
25
+ function localRecommendation(input, plannedTrials, command, rationale) {
26
+ return {
27
+ aiCostLimitUsd: null,
28
+ command,
29
+ credentials: [],
30
+ expectedDuration: expectedDuration(input.elapsedMilliseconds, input.observedRuns, plannedTrials, integerOption(input.values.concurrency, "concurrency")),
31
+ plannedTrials,
32
+ rationale,
33
+ solariCostEstimateUsd: 0,
34
+ solariCostNote: "No Solari operation is planned; estimated Solari cost is $0.",
35
+ };
36
+ }
37
+ function observedRecommendation(input) {
38
+ const target = input.target ?? "<test-target>";
39
+ if (input.status === "no-failure-observed") {
40
+ const plannedTrials = discoveryTrialBound(input.values);
41
+ return localRecommendation(input, plannedTrials, `flakelab diagnose ${quoted(target)} --discover`, "The bounded control was clean; minimize one deterministic network-delay trigger next.");
42
+ }
43
+ if (input.status === "mixed-outcomes") {
44
+ const plannedTrials = discoveryTrialBound(input.values);
45
+ return localRecommendation(input, plannedTrials, `flakelab diagnose ${quoted(target)} --discover`, "The uncontrolled failure already reproduces; interleave controls and interventions to test whether a fault significantly amplifies the same signature.");
46
+ }
47
+ if (input.status === "failed-every-run") {
48
+ return localRecommendation(input, 0, null, "This is currently a consistent failure; fix the ordinary failure before flake experiments.");
49
+ }
50
+ return localRecommendation(input, 0, null, "Repair the Playwright or test infrastructure error before collecting causal evidence.");
51
+ }
52
+ export function buildDiagnosisRecommendation(input) {
53
+ if (input.stage === "observed") {
54
+ return observedRecommendation(input);
55
+ }
56
+ if (input.stage === "reproducer-created") {
57
+ return {
58
+ aiCostLimitUsd: positiveNumberOption(input.values["max-cost"], "max-cost"),
59
+ command: input.target
60
+ ? `flakelab diagnose ${quoted(input.target)} --investigate`
61
+ : null,
62
+ credentials: ["GROQ_API_KEY"],
63
+ expectedDuration: `bounded to ${input.values["max-seconds"]} second(s) of investigator time`,
64
+ plannedTrials: integerOption(input.values["max-trials"], "max-trials"),
65
+ rationale: "The minimized trigger is ready for evidence-bounded hypothesis testing.",
66
+ solariCostEstimateUsd: 0,
67
+ solariCostNote: "Investigation does not use Solari; estimated Solari cost is $0.",
68
+ };
69
+ }
70
+ if (input.stage === "investigated") {
71
+ return {
72
+ aiCostLimitUsd: null,
73
+ command: input.target ? `flakelab diagnose ${quoted(input.target)} --repair` : null,
74
+ credentials: ["GROQ_API_KEY", "SOLARI_API_KEY"],
75
+ expectedDuration: "candidate generation plus one bounded Solari proof matrix",
76
+ plannedTrials: integerOption(input.values["max-trials"], "max-trials"),
77
+ rationale: "The causal evidence is ready for an optional candidate repair and proof.",
78
+ solariCostEstimateUsd: null,
79
+ solariCostNote: "No reliable Solari cost estimate is available before the proof run.",
80
+ };
81
+ }
82
+ return {
83
+ aiCostLimitUsd: null,
84
+ command: null,
85
+ credentials: [],
86
+ expectedDuration: "complete",
87
+ plannedTrials: 0,
88
+ rationale: input.stage === "repair-proven"
89
+ ? "The candidate passed the isolated proof matrix."
90
+ : "The candidate was rejected; use the retained evidence to revise the repair.",
91
+ solariCostEstimateUsd: null,
92
+ solariCostNote: "Actual provider usage is retained with the completed evidence.",
93
+ };
94
+ }
95
+ //# sourceMappingURL=recommendation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendation.js","sourceRoot":"","sources":["../../src/diagnosis/recommendation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { AnalysisArtifact } from "../analysis/schema.js";
2
+ import type { DiagnoseOptions } from "../commands/options.js";
3
+ import type { ScanArtifact, ScanStatus } from "../scan/schema.js";
4
+ import type { DiagnosisArtifact, DiagnosisStage } from "./schema.js";
5
+ export interface Observation {
6
+ elapsedMilliseconds: number;
7
+ executions: number;
8
+ failures: number;
9
+ status: ScanStatus;
10
+ tests: number;
11
+ }
12
+ export interface DiagnosisPaths {
13
+ analysis: string | null;
14
+ evidence: string | null;
15
+ html: string | null;
16
+ patch: string | null;
17
+ proof: string | null;
18
+ reproducer: string | null;
19
+ scan: string | null;
20
+ }
21
+ export interface DiagnosisContext {
22
+ artifactPath: string;
23
+ checkpoint: DiagnosisArtifact;
24
+ projectRoot: string;
25
+ target?: string;
26
+ values: DiagnoseOptions;
27
+ }
28
+ export declare function scanObservation(scan: ScanArtifact, elapsedMilliseconds: number): Observation;
29
+ export declare function analysisObservation(analysis: AnalysisArtifact, elapsedMilliseconds: number): Observation;
30
+ export declare function emptyPaths(): DiagnosisPaths;
31
+ export declare function emptyObservation(): Observation;
32
+ export declare function restoreDiagnosisOptions(checkpoint: DiagnosisArtifact): DiagnoseOptions;
33
+ export declare function createDiagnosisContext(options: {
34
+ artifactPath: string;
35
+ observation: Observation;
36
+ paths: DiagnosisPaths;
37
+ projectRoot: string;
38
+ target?: string;
39
+ values: DiagnoseOptions;
40
+ }): DiagnosisContext;
41
+ export declare function restoreDiagnosisContext(artifactPath: string, checkpoint: DiagnosisArtifact, projectRoot: string): DiagnosisContext;
42
+ export declare function addDiagnosisUsage(context: DiagnosisContext, usage: {
43
+ aiEstimatedCostUsd?: number;
44
+ aiInputTokens?: number;
45
+ aiOutputTokens?: number;
46
+ elapsedMilliseconds: number;
47
+ executions: number;
48
+ solariSandboxesCreated?: number;
49
+ solariSandboxesKilled?: number;
50
+ solariCostUsd?: number | null;
51
+ }): void;
52
+ export declare function saveDiagnosis(context: DiagnosisContext, stage: DiagnosisStage, status: DiagnosisArtifact["status"], lastError?: string | null): Promise<DiagnosisArtifact>;
@@ -0,0 +1,173 @@
1
+ import { resolve } from "node:path";
2
+ import { portableProjectPath } from "../artifacts/paths.js";
3
+ import { diagnosisInputHash, writeDiagnosisCheckpoint, } from "./checkpoint.js";
4
+ import { buildDiagnosisRecommendation } from "./recommendation.js";
5
+ export function scanObservation(scan, elapsedMilliseconds) {
6
+ return {
7
+ elapsedMilliseconds,
8
+ executions: scan.totals.executions,
9
+ failures: scan.totals.failed,
10
+ status: scan.status,
11
+ tests: scan.tests.length,
12
+ };
13
+ }
14
+ export function analysisObservation(analysis, elapsedMilliseconds) {
15
+ return {
16
+ elapsedMilliseconds,
17
+ executions: analysis.totals.executions,
18
+ failures: analysis.totals.failed,
19
+ status: analysis.status,
20
+ tests: analysis.tests.length,
21
+ };
22
+ }
23
+ export function emptyPaths() {
24
+ return {
25
+ analysis: null,
26
+ evidence: null,
27
+ html: null,
28
+ patch: null,
29
+ proof: null,
30
+ reproducer: null,
31
+ scan: null,
32
+ };
33
+ }
34
+ export function emptyObservation() {
35
+ return {
36
+ elapsedMilliseconds: 0,
37
+ executions: 0,
38
+ failures: 0,
39
+ status: "inconclusive",
40
+ tests: 0,
41
+ };
42
+ }
43
+ function portableOptionPath(projectRoot, path) {
44
+ return portableProjectPath(projectRoot, resolve(projectRoot, path));
45
+ }
46
+ function checkpointOptions(projectRoot, values) {
47
+ return {
48
+ ...values,
49
+ artifacts: portableOptionPath(projectRoot, values.artifacts),
50
+ baseline: values.baseline ? portableOptionPath(projectRoot, values.baseline) : null,
51
+ evidence: portableOptionPath(projectRoot, values.evidence),
52
+ html: portableOptionPath(projectRoot, values.html),
53
+ patch: portableOptionPath(projectRoot, values.patch),
54
+ proof: portableOptionPath(projectRoot, values.proof),
55
+ report: values.report ? portableOptionPath(projectRoot, values.report) : null,
56
+ reproducer: portableOptionPath(projectRoot, values.reproducer),
57
+ };
58
+ }
59
+ export function restoreDiagnosisOptions(checkpoint) {
60
+ const { baseline, report, ...options } = checkpoint.input.options;
61
+ return {
62
+ ...options,
63
+ ...(baseline ? { baseline } : {}),
64
+ ...(report ? { report } : {}),
65
+ };
66
+ }
67
+ export function createDiagnosisContext(options) {
68
+ const createdAt = new Date().toISOString();
69
+ const input = {
70
+ options: checkpointOptions(options.projectRoot, options.values),
71
+ report: options.values.report
72
+ ? portableOptionPath(options.projectRoot, options.values.report)
73
+ : null,
74
+ target: options.target ? portableOptionPath(options.projectRoot, options.target) : null,
75
+ };
76
+ const recommendation = buildDiagnosisRecommendation({
77
+ elapsedMilliseconds: options.observation.elapsedMilliseconds,
78
+ observedRuns: options.paths.scan ? Number(options.values.runs) : 0,
79
+ stage: "observed",
80
+ status: options.observation.status,
81
+ target: options.target,
82
+ values: options.values,
83
+ });
84
+ const checkpoint = {
85
+ artifacts: options.paths,
86
+ cache: {
87
+ key: null,
88
+ reason: "No Solari operation has run in this diagnosis.",
89
+ status: "not-used",
90
+ },
91
+ cleanup: { liveResources: 0, status: "not-required" },
92
+ createdAt,
93
+ input,
94
+ inputHash: diagnosisInputHash(input),
95
+ lastError: null,
96
+ observation: options.observation,
97
+ recommendation,
98
+ stage: "observed",
99
+ status: "running",
100
+ updatedAt: createdAt,
101
+ usage: {
102
+ actual: {
103
+ aiEstimatedCostUsd: 0,
104
+ aiInputTokens: 0,
105
+ aiOutputTokens: 0,
106
+ elapsedMilliseconds: options.observation.elapsedMilliseconds,
107
+ executions: options.observation.executions,
108
+ solariCostUsd: 0,
109
+ solariSandboxesCreated: 0,
110
+ solariSandboxesKilled: 0,
111
+ },
112
+ planned: {
113
+ aiCostLimitUsd: recommendation.aiCostLimitUsd,
114
+ solariCostEstimateUsd: recommendation.solariCostEstimateUsd,
115
+ trials: recommendation.plannedTrials,
116
+ },
117
+ },
118
+ };
119
+ return {
120
+ artifactPath: options.artifactPath,
121
+ checkpoint,
122
+ projectRoot: options.projectRoot,
123
+ ...(options.target ? { target: options.target } : {}),
124
+ values: options.values,
125
+ };
126
+ }
127
+ export function restoreDiagnosisContext(artifactPath, checkpoint, projectRoot) {
128
+ const target = checkpoint.input.target ?? undefined;
129
+ return {
130
+ artifactPath,
131
+ checkpoint,
132
+ projectRoot,
133
+ ...(target ? { target } : {}),
134
+ values: restoreDiagnosisOptions(checkpoint),
135
+ };
136
+ }
137
+ export function addDiagnosisUsage(context, usage) {
138
+ const actual = context.checkpoint.usage.actual;
139
+ actual.aiEstimatedCostUsd += usage.aiEstimatedCostUsd ?? 0;
140
+ actual.aiInputTokens += usage.aiInputTokens ?? 0;
141
+ actual.aiOutputTokens += usage.aiOutputTokens ?? 0;
142
+ actual.elapsedMilliseconds += usage.elapsedMilliseconds;
143
+ actual.executions += usage.executions;
144
+ actual.solariSandboxesCreated += usage.solariSandboxesCreated ?? 0;
145
+ actual.solariSandboxesKilled += usage.solariSandboxesKilled ?? 0;
146
+ if (usage.solariCostUsd !== undefined) {
147
+ actual.solariCostUsd = usage.solariCostUsd;
148
+ }
149
+ }
150
+ export async function saveDiagnosis(context, stage, status, lastError = null) {
151
+ const { checkpoint, target, values } = context;
152
+ const recommendation = buildDiagnosisRecommendation({
153
+ elapsedMilliseconds: checkpoint.observation.elapsedMilliseconds,
154
+ observedRuns: checkpoint.artifacts.scan ? Number(values.runs) : 0,
155
+ stage,
156
+ status: checkpoint.observation.status,
157
+ target,
158
+ values,
159
+ });
160
+ checkpoint.lastError = lastError;
161
+ checkpoint.recommendation = recommendation;
162
+ checkpoint.stage = stage;
163
+ checkpoint.status = status;
164
+ checkpoint.updatedAt = new Date().toISOString();
165
+ checkpoint.usage.planned = {
166
+ aiCostLimitUsd: recommendation.aiCostLimitUsd,
167
+ solariCostEstimateUsd: recommendation.solariCostEstimateUsd,
168
+ trials: recommendation.plannedTrials,
169
+ };
170
+ await writeDiagnosisCheckpoint(context.artifactPath, checkpoint);
171
+ return checkpoint;
172
+ }
173
+ //# sourceMappingURL=run-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-state.js","sourceRoot":"","sources":["../../src/diagnosis/run-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,207 @@
1
+ import { z } from "zod";
2
+ export declare const diagnosisStageSchema: z.ZodEnum<{
3
+ observed: "observed";
4
+ "reproducer-created": "reproducer-created";
5
+ investigated: "investigated";
6
+ "repair-rejected": "repair-rejected";
7
+ "repair-proven": "repair-proven";
8
+ }>;
9
+ export declare const diagnosisRecommendationSchema: z.ZodObject<{
10
+ aiCostLimitUsd: z.ZodNullable<z.ZodNumber>;
11
+ command: z.ZodNullable<z.ZodString>;
12
+ credentials: z.ZodArray<z.ZodEnum<{
13
+ GROQ_API_KEY: "GROQ_API_KEY";
14
+ SOLARI_API_KEY: "SOLARI_API_KEY";
15
+ }>>;
16
+ expectedDuration: z.ZodString;
17
+ plannedTrials: z.ZodNumber;
18
+ rationale: z.ZodString;
19
+ solariCostEstimateUsd: z.ZodNullable<z.ZodNumber>;
20
+ solariCostNote: z.ZodString;
21
+ }, z.core.$strip>;
22
+ export declare const diagnosisOptionsSchema: z.ZodObject<{
23
+ artifacts: z.ZodString;
24
+ baseline: z.ZodNullable<z.ZodString>;
25
+ concurrency: z.ZodString;
26
+ discover: z.ZodBoolean;
27
+ evidence: z.ZodString;
28
+ html: z.ZodString;
29
+ investigate: z.ZodBoolean;
30
+ "max-cost": z.ZodString;
31
+ "max-delay": z.ZodString;
32
+ "max-experiments": z.ZodString;
33
+ "max-seconds": z.ZodString;
34
+ "max-steps": z.ZodString;
35
+ "max-trials": z.ZodString;
36
+ "min-rate": z.ZodString;
37
+ model: z.ZodString;
38
+ open: z.ZodBoolean;
39
+ patch: z.ZodString;
40
+ pattern: z.ZodString;
41
+ proof: z.ZodString;
42
+ "prompt-credentials": z.ZodBoolean;
43
+ repair: z.ZodBoolean;
44
+ report: z.ZodNullable<z.ZodString>;
45
+ reproducer: z.ZodString;
46
+ runs: z.ZodString;
47
+ seed: z.ZodString;
48
+ source: z.ZodArray<z.ZodString>;
49
+ trials: z.ZodString;
50
+ }, z.core.$strict>;
51
+ export declare const diagnosisInputSchema: z.ZodObject<{
52
+ options: z.ZodObject<{
53
+ artifacts: z.ZodString;
54
+ baseline: z.ZodNullable<z.ZodString>;
55
+ concurrency: z.ZodString;
56
+ discover: z.ZodBoolean;
57
+ evidence: z.ZodString;
58
+ html: z.ZodString;
59
+ investigate: z.ZodBoolean;
60
+ "max-cost": z.ZodString;
61
+ "max-delay": z.ZodString;
62
+ "max-experiments": z.ZodString;
63
+ "max-seconds": z.ZodString;
64
+ "max-steps": z.ZodString;
65
+ "max-trials": z.ZodString;
66
+ "min-rate": z.ZodString;
67
+ model: z.ZodString;
68
+ open: z.ZodBoolean;
69
+ patch: z.ZodString;
70
+ pattern: z.ZodString;
71
+ proof: z.ZodString;
72
+ "prompt-credentials": z.ZodBoolean;
73
+ repair: z.ZodBoolean;
74
+ report: z.ZodNullable<z.ZodString>;
75
+ reproducer: z.ZodString;
76
+ runs: z.ZodString;
77
+ seed: z.ZodString;
78
+ source: z.ZodArray<z.ZodString>;
79
+ trials: z.ZodString;
80
+ }, z.core.$strict>;
81
+ report: z.ZodNullable<z.ZodString>;
82
+ target: z.ZodNullable<z.ZodString>;
83
+ }, z.core.$strip>;
84
+ export declare const diagnosisArtifactSchema: z.ZodObject<{
85
+ artifacts: z.ZodObject<{
86
+ analysis: z.ZodNullable<z.ZodString>;
87
+ evidence: z.ZodNullable<z.ZodString>;
88
+ html: z.ZodNullable<z.ZodString>;
89
+ patch: z.ZodNullable<z.ZodString>;
90
+ proof: z.ZodNullable<z.ZodString>;
91
+ reproducer: z.ZodNullable<z.ZodString>;
92
+ scan: z.ZodNullable<z.ZodString>;
93
+ }, z.core.$strip>;
94
+ cache: z.ZodObject<{
95
+ key: z.ZodNullable<z.ZodString>;
96
+ reason: z.ZodString;
97
+ status: z.ZodEnum<{
98
+ "not-used": "not-used";
99
+ hit: "hit";
100
+ miss: "miss";
101
+ }>;
102
+ }, z.core.$strip>;
103
+ cleanup: z.ZodObject<{
104
+ liveResources: z.ZodNullable<z.ZodNumber>;
105
+ status: z.ZodEnum<{
106
+ confirmed: "confirmed";
107
+ "not-required": "not-required";
108
+ unconfirmed: "unconfirmed";
109
+ }>;
110
+ }, z.core.$strip>;
111
+ createdAt: z.ZodISODateTime;
112
+ input: z.ZodObject<{
113
+ options: z.ZodObject<{
114
+ artifacts: z.ZodString;
115
+ baseline: z.ZodNullable<z.ZodString>;
116
+ concurrency: z.ZodString;
117
+ discover: z.ZodBoolean;
118
+ evidence: z.ZodString;
119
+ html: z.ZodString;
120
+ investigate: z.ZodBoolean;
121
+ "max-cost": z.ZodString;
122
+ "max-delay": z.ZodString;
123
+ "max-experiments": z.ZodString;
124
+ "max-seconds": z.ZodString;
125
+ "max-steps": z.ZodString;
126
+ "max-trials": z.ZodString;
127
+ "min-rate": z.ZodString;
128
+ model: z.ZodString;
129
+ open: z.ZodBoolean;
130
+ patch: z.ZodString;
131
+ pattern: z.ZodString;
132
+ proof: z.ZodString;
133
+ "prompt-credentials": z.ZodBoolean;
134
+ repair: z.ZodBoolean;
135
+ report: z.ZodNullable<z.ZodString>;
136
+ reproducer: z.ZodString;
137
+ runs: z.ZodString;
138
+ seed: z.ZodString;
139
+ source: z.ZodArray<z.ZodString>;
140
+ trials: z.ZodString;
141
+ }, z.core.$strict>;
142
+ report: z.ZodNullable<z.ZodString>;
143
+ target: z.ZodNullable<z.ZodString>;
144
+ }, z.core.$strip>;
145
+ inputHash: z.ZodString;
146
+ lastError: z.ZodNullable<z.ZodString>;
147
+ observation: z.ZodObject<{
148
+ elapsedMilliseconds: z.ZodNumber;
149
+ executions: z.ZodNumber;
150
+ failures: z.ZodNumber;
151
+ status: z.ZodEnum<{
152
+ inconclusive: "inconclusive";
153
+ "failed-every-run": "failed-every-run";
154
+ "mixed-outcomes": "mixed-outcomes";
155
+ "no-failure-observed": "no-failure-observed";
156
+ }>;
157
+ tests: z.ZodNumber;
158
+ }, z.core.$strip>;
159
+ recommendation: z.ZodObject<{
160
+ aiCostLimitUsd: z.ZodNullable<z.ZodNumber>;
161
+ command: z.ZodNullable<z.ZodString>;
162
+ credentials: z.ZodArray<z.ZodEnum<{
163
+ GROQ_API_KEY: "GROQ_API_KEY";
164
+ SOLARI_API_KEY: "SOLARI_API_KEY";
165
+ }>>;
166
+ expectedDuration: z.ZodString;
167
+ plannedTrials: z.ZodNumber;
168
+ rationale: z.ZodString;
169
+ solariCostEstimateUsd: z.ZodNullable<z.ZodNumber>;
170
+ solariCostNote: z.ZodString;
171
+ }, z.core.$strip>;
172
+ stage: z.ZodEnum<{
173
+ observed: "observed";
174
+ "reproducer-created": "reproducer-created";
175
+ investigated: "investigated";
176
+ "repair-rejected": "repair-rejected";
177
+ "repair-proven": "repair-proven";
178
+ }>;
179
+ status: z.ZodEnum<{
180
+ running: "running";
181
+ failed: "failed";
182
+ complete: "complete";
183
+ interrupted: "interrupted";
184
+ }>;
185
+ updatedAt: z.ZodISODateTime;
186
+ usage: z.ZodObject<{
187
+ actual: z.ZodObject<{
188
+ aiEstimatedCostUsd: z.ZodNumber;
189
+ aiInputTokens: z.ZodNumber;
190
+ aiOutputTokens: z.ZodNumber;
191
+ elapsedMilliseconds: z.ZodNumber;
192
+ executions: z.ZodNumber;
193
+ solariCostUsd: z.ZodNullable<z.ZodNumber>;
194
+ solariSandboxesCreated: z.ZodNumber;
195
+ solariSandboxesKilled: z.ZodNumber;
196
+ }, z.core.$strip>;
197
+ planned: z.ZodObject<{
198
+ aiCostLimitUsd: z.ZodNullable<z.ZodNumber>;
199
+ solariCostEstimateUsd: z.ZodNullable<z.ZodNumber>;
200
+ trials: z.ZodNumber;
201
+ }, z.core.$strip>;
202
+ }, z.core.$strip>;
203
+ }, z.core.$strip>;
204
+ export type DiagnosisArtifact = z.infer<typeof diagnosisArtifactSchema>;
205
+ export type DiagnosisCheckpointOptions = z.infer<typeof diagnosisOptionsSchema>;
206
+ export type DiagnosisRecommendation = z.infer<typeof diagnosisRecommendationSchema>;
207
+ export type DiagnosisStage = z.infer<typeof diagnosisStageSchema>;
@@ -0,0 +1,108 @@
1
+ import { z } from "zod";
2
+ import { scanStatusSchema } from "../scan/schema.js";
3
+ export const diagnosisStageSchema = z.enum([
4
+ "observed",
5
+ "reproducer-created",
6
+ "investigated",
7
+ "repair-rejected",
8
+ "repair-proven",
9
+ ]);
10
+ export const diagnosisRecommendationSchema = z.object({
11
+ aiCostLimitUsd: z.number().positive().nullable(),
12
+ command: z.string().min(1).nullable(),
13
+ credentials: z.array(z.enum(["GROQ_API_KEY", "SOLARI_API_KEY"])),
14
+ expectedDuration: z.string().min(1),
15
+ plannedTrials: z.number().int().nonnegative(),
16
+ rationale: z.string().min(1),
17
+ solariCostEstimateUsd: z.number().nonnegative().nullable(),
18
+ solariCostNote: z.string().min(1),
19
+ });
20
+ export const diagnosisOptionsSchema = z.object({
21
+ artifacts: z.string().min(1),
22
+ baseline: z.string().min(1).nullable(),
23
+ concurrency: z.string().min(1),
24
+ discover: z.boolean(),
25
+ evidence: z.string().min(1),
26
+ html: z.string().min(1),
27
+ investigate: z.boolean(),
28
+ "max-cost": z.string().min(1),
29
+ "max-delay": z.string().min(1),
30
+ "max-experiments": z.string().min(1),
31
+ "max-seconds": z.string().min(1),
32
+ "max-steps": z.string().min(1),
33
+ "max-trials": z.string().min(1),
34
+ "min-rate": z.string().min(1),
35
+ model: z.string().min(1),
36
+ open: z.boolean(),
37
+ patch: z.string().min(1),
38
+ pattern: z.string().min(1),
39
+ proof: z.string().min(1),
40
+ "prompt-credentials": z.boolean(),
41
+ repair: z.boolean(),
42
+ report: z.string().min(1).nullable(),
43
+ reproducer: z.string().min(1),
44
+ runs: z.string().min(1),
45
+ seed: z.string().min(1),
46
+ source: z.array(z.string().min(1).max(500)).max(7),
47
+ trials: z.string().min(1),
48
+ }).strict();
49
+ const snapshotCacheSchema = z.object({
50
+ key: z.string().min(1).nullable(),
51
+ reason: z.string().min(1),
52
+ status: z.enum(["not-used", "hit", "miss"]),
53
+ });
54
+ const diagnosisUsageSchema = z.object({
55
+ actual: z.object({
56
+ aiEstimatedCostUsd: z.number().nonnegative(),
57
+ aiInputTokens: z.number().int().nonnegative(),
58
+ aiOutputTokens: z.number().int().nonnegative(),
59
+ elapsedMilliseconds: z.number().int().nonnegative(),
60
+ executions: z.number().int().nonnegative(),
61
+ solariCostUsd: z.number().nonnegative().nullable(),
62
+ solariSandboxesCreated: z.number().int().nonnegative(),
63
+ solariSandboxesKilled: z.number().int().nonnegative(),
64
+ }),
65
+ planned: z.object({
66
+ aiCostLimitUsd: z.number().positive().nullable(),
67
+ solariCostEstimateUsd: z.number().nonnegative().nullable(),
68
+ trials: z.number().int().nonnegative(),
69
+ }),
70
+ });
71
+ export const diagnosisInputSchema = z.object({
72
+ options: diagnosisOptionsSchema,
73
+ report: z.string().min(1).nullable(),
74
+ target: z.string().min(1).nullable(),
75
+ });
76
+ export const diagnosisArtifactSchema = z.object({
77
+ artifacts: z.object({
78
+ analysis: z.string().min(1).nullable(),
79
+ evidence: z.string().min(1).nullable(),
80
+ html: z.string().min(1).nullable(),
81
+ patch: z.string().min(1).nullable(),
82
+ proof: z.string().min(1).nullable(),
83
+ reproducer: z.string().min(1).nullable(),
84
+ scan: z.string().min(1).nullable(),
85
+ }),
86
+ cache: snapshotCacheSchema,
87
+ cleanup: z.object({
88
+ liveResources: z.number().int().nonnegative().nullable(),
89
+ status: z.enum(["confirmed", "not-required", "unconfirmed"]),
90
+ }),
91
+ createdAt: z.iso.datetime(),
92
+ input: diagnosisInputSchema,
93
+ inputHash: z.string().regex(/^[a-f0-9]{64}$/u),
94
+ lastError: z.string().min(1).max(2_000).nullable(),
95
+ observation: z.object({
96
+ elapsedMilliseconds: z.number().int().nonnegative(),
97
+ executions: z.number().int().nonnegative(),
98
+ failures: z.number().int().nonnegative(),
99
+ status: scanStatusSchema,
100
+ tests: z.number().int().nonnegative(),
101
+ }),
102
+ recommendation: diagnosisRecommendationSchema,
103
+ stage: diagnosisStageSchema,
104
+ status: z.enum(["complete", "failed", "interrupted", "running"]),
105
+ updatedAt: z.iso.datetime(),
106
+ usage: diagnosisUsageSchema,
107
+ });
108
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/diagnosis/schema.ts"],"names":[],"mappings":"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"}