@xoxoai/checkmate 0.6.7 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/README.md +54 -257
  2. package/dist/checkmate.js +13375 -0
  3. package/package.json +30 -94
  4. package/plugin/.claude-plugin/plugin.json +10 -0
  5. package/plugin/bin/checkmate.ts +3 -0
  6. package/plugin/contracts/finding.schema.json +78 -0
  7. package/plugin/contracts/gap.schema.json +56 -0
  8. package/plugin/contracts/plan-candidate.schema.json +103 -0
  9. package/plugin/contracts/plan-delta.schema.json +63 -0
  10. package/plugin/contracts/plan-patch.schema.json +116 -0
  11. package/plugin/contracts/plan-request.schema.json +108 -0
  12. package/plugin/contracts/plan.schema.json +313 -0
  13. package/plugin/contracts/profile.schema.json +154 -0
  14. package/plugin/contracts/response.schema.json +25 -0
  15. package/plugin/contracts/result.schema.json +410 -0
  16. package/plugin/dist/checkmate.js +13012 -0
  17. package/plugin/package.json +4 -0
  18. package/plugin/references/browser.md +35 -0
  19. package/plugin/references/http.md +30 -0
  20. package/plugin/references/workflow.md +122 -0
  21. package/plugin/skills/execute/SKILL.md +92 -0
  22. package/plugin/skills/plan/SKILL.md +94 -0
  23. package/plugin/skills/report/SKILL.md +28 -0
  24. package/plugin/skills/revise/SKILL.md +43 -0
  25. package/plugin/skills/setup/SKILL.md +82 -0
  26. package/plugin/skills/status/SKILL.md +20 -0
  27. package/plugin/skills/ui/SKILL.md +26 -0
  28. package/plugin/src/actor.ts +21 -0
  29. package/plugin/src/cli.ts +1133 -0
  30. package/plugin/src/contracts.ts +342 -0
  31. package/plugin/src/index.ts +52 -0
  32. package/plugin/src/plans.ts +1028 -0
  33. package/plugin/src/render.ts +544 -0
  34. package/plugin/src/runs.ts +868 -0
  35. package/plugin/src/store.ts +384 -0
  36. package/plugin/src/targets.ts +205 -0
  37. package/plugin/src/types.ts +319 -0
  38. package/plugin/src/ui/assets/client.js +501 -0
  39. package/plugin/src/ui/assets/favicon.svg +1 -0
  40. package/plugin/src/ui/assets/fonts/inter-OFL.txt +93 -0
  41. package/plugin/src/ui/assets/fonts/inter.woff2 +0 -0
  42. package/plugin/src/ui/assets/fonts/jetbrains-mono-OFL.txt +93 -0
  43. package/plugin/src/ui/assets/fonts/jetbrains-mono.woff2 +0 -0
  44. package/plugin/src/ui/assets/fonts/space-grotesk-OFL.txt +93 -0
  45. package/plugin/src/ui/assets/fonts/space-grotesk.woff2 +0 -0
  46. package/plugin/src/ui/assets/style.css +1926 -0
  47. package/plugin/src/ui/edit.ts +305 -0
  48. package/plugin/src/ui/forms.ts +209 -0
  49. package/plugin/src/ui/html.ts +130 -0
  50. package/plugin/src/ui/layout.ts +198 -0
  51. package/plugin/src/ui/lists.ts +645 -0
  52. package/plugin/src/ui/plan.ts +577 -0
  53. package/plugin/src/ui/run.ts +489 -0
  54. package/plugin/src/ui/server.ts +684 -0
  55. package/plugin/src/validators.d.ts +13 -0
  56. package/plugin/src/validators.js +1 -0
  57. package/plugin/src/views.ts +839 -0
  58. package/bin/checkmate.js +0 -13
  59. package/dist/ai/client.d.ts +0 -64
  60. package/dist/ai/client.d.ts.map +0 -1
  61. package/dist/ai/client.js +0 -313
  62. package/dist/ai/client.js.map +0 -1
  63. package/dist/ai/message-handler.d.ts +0 -9
  64. package/dist/ai/message-handler.d.ts.map +0 -1
  65. package/dist/ai/message-handler.js +0 -50
  66. package/dist/ai/message-handler.js.map +0 -1
  67. package/dist/ai/message-history.d.ts +0 -17
  68. package/dist/ai/message-history.d.ts.map +0 -1
  69. package/dist/ai/message-history.js +0 -45
  70. package/dist/ai/message-history.js.map +0 -1
  71. package/dist/ai/prompts.d.ts +0 -4
  72. package/dist/ai/prompts.d.ts.map +0 -1
  73. package/dist/ai/prompts.js +0 -24
  74. package/dist/ai/prompts.js.map +0 -1
  75. package/dist/ai/rate-limit-policy.d.ts +0 -9
  76. package/dist/ai/rate-limit-policy.d.ts.map +0 -1
  77. package/dist/ai/rate-limit-policy.js +0 -34
  78. package/dist/ai/rate-limit-policy.js.map +0 -1
  79. package/dist/ai/tool-response-handler.d.ts +0 -16
  80. package/dist/ai/tool-response-handler.d.ts.map +0 -1
  81. package/dist/ai/tool-response-handler.js +0 -85
  82. package/dist/ai/tool-response-handler.js.map +0 -1
  83. package/dist/ai/turn-processor.d.ts +0 -34
  84. package/dist/ai/turn-processor.d.ts.map +0 -1
  85. package/dist/ai/turn-processor.js +0 -107
  86. package/dist/ai/turn-processor.js.map +0 -1
  87. package/dist/api/allocate-run-identity.d.ts +0 -8
  88. package/dist/api/allocate-run-identity.d.ts.map +0 -1
  89. package/dist/api/allocate-run-identity.js +0 -10
  90. package/dist/api/allocate-run-identity.js.map +0 -1
  91. package/dist/api/execute-prepared-run.d.ts +0 -22
  92. package/dist/api/execute-prepared-run.d.ts.map +0 -1
  93. package/dist/api/execute-prepared-run.js +0 -184
  94. package/dist/api/execute-prepared-run.js.map +0 -1
  95. package/dist/api/index.d.ts +0 -25
  96. package/dist/api/index.d.ts.map +0 -1
  97. package/dist/api/index.js +0 -69
  98. package/dist/api/index.js.map +0 -1
  99. package/dist/api/prepare-run.d.ts +0 -44
  100. package/dist/api/prepare-run.d.ts.map +0 -1
  101. package/dist/api/prepare-run.js +0 -261
  102. package/dist/api/prepare-run.js.map +0 -1
  103. package/dist/cli/diagnostic-relay.d.ts +0 -6
  104. package/dist/cli/diagnostic-relay.d.ts.map +0 -1
  105. package/dist/cli/diagnostic-relay.js +0 -6
  106. package/dist/cli/diagnostic-relay.js.map +0 -1
  107. package/dist/cli/main.d.ts +0 -21
  108. package/dist/cli/main.d.ts.map +0 -1
  109. package/dist/cli/main.js +0 -166
  110. package/dist/cli/main.js.map +0 -1
  111. package/dist/cli/protocol.d.ts +0 -57
  112. package/dist/cli/protocol.d.ts.map +0 -1
  113. package/dist/cli/protocol.js +0 -116
  114. package/dist/cli/protocol.js.map +0 -1
  115. package/dist/cli/reconcile-result.d.ts +0 -13
  116. package/dist/cli/reconcile-result.d.ts.map +0 -1
  117. package/dist/cli/reconcile-result.js +0 -300
  118. package/dist/cli/reconcile-result.js.map +0 -1
  119. package/dist/cli/run-parent.d.ts +0 -37
  120. package/dist/cli/run-parent.d.ts.map +0 -1
  121. package/dist/cli/run-parent.js +0 -491
  122. package/dist/cli/run-parent.js.map +0 -1
  123. package/dist/cli/signals.d.ts +0 -36
  124. package/dist/cli/signals.d.ts.map +0 -1
  125. package/dist/cli/signals.js +0 -85
  126. package/dist/cli/signals.js.map +0 -1
  127. package/dist/cli/static-commands.d.ts +0 -11
  128. package/dist/cli/static-commands.d.ts.map +0 -1
  129. package/dist/cli/static-commands.js +0 -83
  130. package/dist/cli/static-commands.js.map +0 -1
  131. package/dist/cli/worker-stream-guard.d.ts +0 -20
  132. package/dist/cli/worker-stream-guard.d.ts.map +0 -1
  133. package/dist/cli/worker-stream-guard.js +0 -41
  134. package/dist/cli/worker-stream-guard.js.map +0 -1
  135. package/dist/cli/worker.d.ts +0 -3
  136. package/dist/cli/worker.d.ts.map +0 -1
  137. package/dist/cli/worker.js +0 -111
  138. package/dist/cli/worker.js.map +0 -1
  139. package/dist/config/ingestion.d.ts +0 -58
  140. package/dist/config/ingestion.d.ts.map +0 -1
  141. package/dist/config/ingestion.js +0 -283
  142. package/dist/config/ingestion.js.map +0 -1
  143. package/dist/config/manifest.d.ts +0 -20
  144. package/dist/config/manifest.d.ts.map +0 -1
  145. package/dist/config/manifest.js +0 -91
  146. package/dist/config/manifest.js.map +0 -1
  147. package/dist/config/model-egress.d.ts +0 -10
  148. package/dist/config/model-egress.d.ts.map +0 -1
  149. package/dist/config/model-egress.js +0 -62
  150. package/dist/config/model-egress.js.map +0 -1
  151. package/dist/config/package-resolution.d.ts +0 -4
  152. package/dist/config/package-resolution.d.ts.map +0 -1
  153. package/dist/config/package-resolution.js +0 -24
  154. package/dist/config/package-resolution.js.map +0 -1
  155. package/dist/config/policy.d.ts +0 -44
  156. package/dist/config/policy.d.ts.map +0 -1
  157. package/dist/config/policy.js +0 -141
  158. package/dist/config/policy.js.map +0 -1
  159. package/dist/config/record.d.ts +0 -4
  160. package/dist/config/record.d.ts.map +0 -1
  161. package/dist/config/record.js +0 -10
  162. package/dist/config/record.js.map +0 -1
  163. package/dist/config/secrets.d.ts +0 -11
  164. package/dist/config/secrets.d.ts.map +0 -1
  165. package/dist/config/secrets.js +0 -42
  166. package/dist/config/secrets.js.map +0 -1
  167. package/dist/contracts/diagnostics.d.ts +0 -4
  168. package/dist/contracts/diagnostics.d.ts.map +0 -1
  169. package/dist/contracts/diagnostics.js +0 -31
  170. package/dist/contracts/diagnostics.js.map +0 -1
  171. package/dist/contracts/serialize.d.ts +0 -2
  172. package/dist/contracts/serialize.d.ts.map +0 -1
  173. package/dist/contracts/serialize.js +0 -90
  174. package/dist/contracts/serialize.js.map +0 -1
  175. package/dist/contracts/types.d.ts +0 -316
  176. package/dist/contracts/types.d.ts.map +0 -1
  177. package/dist/contracts/types.js +0 -74
  178. package/dist/contracts/types.js.map +0 -1
  179. package/dist/contracts/validator.d.ts +0 -8
  180. package/dist/contracts/validator.d.ts.map +0 -1
  181. package/dist/contracts/validator.js +0 -71
  182. package/dist/contracts/validator.js.map +0 -1
  183. package/dist/driver.d.ts +0 -97
  184. package/dist/driver.d.ts.map +0 -1
  185. package/dist/driver.js +0 -24
  186. package/dist/driver.js.map +0 -1
  187. package/dist/drivers/descriptor.d.ts +0 -15
  188. package/dist/drivers/descriptor.d.ts.map +0 -1
  189. package/dist/drivers/descriptor.js +0 -122
  190. package/dist/drivers/descriptor.js.map +0 -1
  191. package/dist/drivers/loader.d.ts +0 -18
  192. package/dist/drivers/loader.d.ts.map +0 -1
  193. package/dist/drivers/loader.js +0 -97
  194. package/dist/drivers/loader.js.map +0 -1
  195. package/dist/drivers/web/checkmate-driver.json +0 -47
  196. package/dist/drivers/web/index.d.ts +0 -6
  197. package/dist/drivers/web/index.d.ts.map +0 -1
  198. package/dist/drivers/web/index.js +0 -27
  199. package/dist/drivers/web/index.js.map +0 -1
  200. package/dist/drivers/web/session.d.ts +0 -25
  201. package/dist/drivers/web/session.d.ts.map +0 -1
  202. package/dist/drivers/web/session.js +0 -132
  203. package/dist/drivers/web/session.js.map +0 -1
  204. package/dist/drivers/web/tools/network-request-recorder.d.ts +0 -46
  205. package/dist/drivers/web/tools/network-request-recorder.d.ts.map +0 -1
  206. package/dist/drivers/web/tools/network-request-recorder.js +0 -164
  207. package/dist/drivers/web/tools/network-request-recorder.js.map +0 -1
  208. package/dist/drivers/web/tools/screenshot-service.d.ts +0 -10
  209. package/dist/drivers/web/tools/screenshot-service.d.ts.map +0 -1
  210. package/dist/drivers/web/tools/screenshot-service.js +0 -23
  211. package/dist/drivers/web/tools/screenshot-service.js.map +0 -1
  212. package/dist/drivers/web/tools/snapshot-filter/index.d.ts +0 -4
  213. package/dist/drivers/web/tools/snapshot-filter/index.d.ts.map +0 -1
  214. package/dist/drivers/web/tools/snapshot-filter/index.js +0 -4
  215. package/dist/drivers/web/tools/snapshot-filter/index.js.map +0 -1
  216. package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.d.ts +0 -15
  217. package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.d.ts.map +0 -1
  218. package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.js +0 -99
  219. package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.js.map +0 -1
  220. package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.d.ts +0 -5
  221. package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.d.ts.map +0 -1
  222. package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.js +0 -56
  223. package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.js.map +0 -1
  224. package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.d.ts +0 -3
  225. package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.d.ts.map +0 -1
  226. package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.js +0 -85
  227. package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.js.map +0 -1
  228. package/dist/drivers/web/tools/snapshot-service.d.ts +0 -31
  229. package/dist/drivers/web/tools/snapshot-service.d.ts.map +0 -1
  230. package/dist/drivers/web/tools/snapshot-service.js +0 -96
  231. package/dist/drivers/web/tools/snapshot-service.js.map +0 -1
  232. package/dist/drivers/web/tools/tool.d.ts +0 -76
  233. package/dist/drivers/web/tools/tool.d.ts.map +0 -1
  234. package/dist/drivers/web/tools/tool.js +0 -562
  235. package/dist/drivers/web/tools/tool.js.map +0 -1
  236. package/dist/drivers/web/tools/transient-state-tracker.d.ts +0 -26
  237. package/dist/drivers/web/tools/transient-state-tracker.d.ts.map +0 -1
  238. package/dist/drivers/web/tools/transient-state-tracker.js +0 -301
  239. package/dist/drivers/web/tools/transient-state-tracker.js.map +0 -1
  240. package/dist/drivers/web/tools/types.d.ts +0 -11
  241. package/dist/drivers/web/tools/types.d.ts.map +0 -1
  242. package/dist/drivers/web/tools/types.js +0 -2
  243. package/dist/drivers/web/tools/types.js.map +0 -1
  244. package/dist/evidence/atomic-file.d.ts +0 -23
  245. package/dist/evidence/atomic-file.d.ts.map +0 -1
  246. package/dist/evidence/atomic-file.js +0 -104
  247. package/dist/evidence/atomic-file.js.map +0 -1
  248. package/dist/evidence/layout.d.ts +0 -30
  249. package/dist/evidence/layout.d.ts.map +0 -1
  250. package/dist/evidence/layout.js +0 -152
  251. package/dist/evidence/layout.js.map +0 -1
  252. package/dist/evidence/retention.d.ts +0 -5
  253. package/dist/evidence/retention.d.ts.map +0 -1
  254. package/dist/evidence/retention.js +0 -10
  255. package/dist/evidence/retention.js.map +0 -1
  256. package/dist/evidence/store.d.ts +0 -101
  257. package/dist/evidence/store.d.ts.map +0 -1
  258. package/dist/evidence/store.js +0 -375
  259. package/dist/evidence/store.js.map +0 -1
  260. package/dist/evidence/terminal-finalizer.d.ts +0 -19
  261. package/dist/evidence/terminal-finalizer.d.ts.map +0 -1
  262. package/dist/evidence/terminal-finalizer.js +0 -56
  263. package/dist/evidence/terminal-finalizer.js.map +0 -1
  264. package/dist/index.d.ts +0 -9
  265. package/dist/index.d.ts.map +0 -1
  266. package/dist/index.js +0 -12
  267. package/dist/index.js.map +0 -1
  268. package/dist/logging/invocation-logger.d.ts +0 -4
  269. package/dist/logging/invocation-logger.d.ts.map +0 -1
  270. package/dist/logging/invocation-logger.js +0 -25
  271. package/dist/logging/invocation-logger.js.map +0 -1
  272. package/dist/logging/level-logger.d.ts +0 -11
  273. package/dist/logging/level-logger.d.ts.map +0 -1
  274. package/dist/logging/level-logger.js +0 -82
  275. package/dist/logging/level-logger.js.map +0 -1
  276. package/dist/logging/types.d.ts +0 -8
  277. package/dist/logging/types.d.ts.map +0 -1
  278. package/dist/logging/types.js +0 -7
  279. package/dist/logging/types.js.map +0 -1
  280. package/dist/redaction/diagnostic-sanitizer.d.ts +0 -7
  281. package/dist/redaction/diagnostic-sanitizer.d.ts.map +0 -1
  282. package/dist/redaction/diagnostic-sanitizer.js +0 -42
  283. package/dist/redaction/diagnostic-sanitizer.js.map +0 -1
  284. package/dist/redaction/redactor.d.ts +0 -40
  285. package/dist/redaction/redactor.d.ts.map +0 -1
  286. package/dist/redaction/redactor.js +0 -176
  287. package/dist/redaction/redactor.js.map +0 -1
  288. package/dist/redaction/scrub.d.ts +0 -29
  289. package/dist/redaction/scrub.d.ts.map +0 -1
  290. package/dist/redaction/scrub.js +0 -54
  291. package/dist/redaction/scrub.js.map +0 -1
  292. package/dist/runtime/config.d.ts +0 -16
  293. package/dist/runtime/config.d.ts.map +0 -1
  294. package/dist/runtime/config.js +0 -2
  295. package/dist/runtime/config.js.map +0 -1
  296. package/dist/runtime/driver-boundary.d.ts +0 -16
  297. package/dist/runtime/driver-boundary.d.ts.map +0 -1
  298. package/dist/runtime/driver-boundary.js +0 -71
  299. package/dist/runtime/driver-boundary.js.map +0 -1
  300. package/dist/runtime/driver-session.d.ts +0 -9
  301. package/dist/runtime/driver-session.d.ts.map +0 -1
  302. package/dist/runtime/driver-session.js +0 -64
  303. package/dist/runtime/driver-session.js.map +0 -1
  304. package/dist/runtime/internal-step-evidence.d.ts +0 -30
  305. package/dist/runtime/internal-step-evidence.d.ts.map +0 -1
  306. package/dist/runtime/internal-step-evidence.js +0 -82
  307. package/dist/runtime/internal-step-evidence.js.map +0 -1
  308. package/dist/runtime/result-adapter.d.ts +0 -9
  309. package/dist/runtime/result-adapter.d.ts.map +0 -1
  310. package/dist/runtime/result-adapter.js +0 -77
  311. package/dist/runtime/result-adapter.js.map +0 -1
  312. package/dist/runtime/runner.d.ts +0 -43
  313. package/dist/runtime/runner.d.ts.map +0 -1
  314. package/dist/runtime/runner.js +0 -72
  315. package/dist/runtime/runner.js.map +0 -1
  316. package/dist/runtime/scenario-control.d.ts +0 -40
  317. package/dist/runtime/scenario-control.d.ts.map +0 -1
  318. package/dist/runtime/scenario-control.js +0 -94
  319. package/dist/runtime/scenario-control.js.map +0 -1
  320. package/dist/runtime/scenario-runner.d.ts +0 -41
  321. package/dist/runtime/scenario-runner.d.ts.map +0 -1
  322. package/dist/runtime/scenario-runner.js +0 -274
  323. package/dist/runtime/scenario-runner.js.map +0 -1
  324. package/dist/runtime/scenario-state.d.ts +0 -55
  325. package/dist/runtime/scenario-state.d.ts.map +0 -1
  326. package/dist/runtime/scenario-state.js +0 -128
  327. package/dist/runtime/scenario-state.js.map +0 -1
  328. package/dist/runtime/step-execution.d.ts +0 -27
  329. package/dist/runtime/step-execution.d.ts.map +0 -1
  330. package/dist/runtime/step-execution.js +0 -143
  331. package/dist/runtime/step-execution.js.map +0 -1
  332. package/dist/runtime/text.d.ts +0 -10
  333. package/dist/runtime/text.d.ts.map +0 -1
  334. package/dist/runtime/text.js +0 -25
  335. package/dist/runtime/text.js.map +0 -1
  336. package/dist/runtime/types.d.ts +0 -53
  337. package/dist/runtime/types.d.ts.map +0 -1
  338. package/dist/runtime/types.js +0 -2
  339. package/dist/runtime/types.js.map +0 -1
  340. package/dist/runtime/usage-tracker.d.ts +0 -37
  341. package/dist/runtime/usage-tracker.d.ts.map +0 -1
  342. package/dist/runtime/usage-tracker.js +0 -110
  343. package/dist/runtime/usage-tracker.js.map +0 -1
  344. package/dist/tools/define-agent-tool.d.ts +0 -20
  345. package/dist/tools/define-agent-tool.d.ts.map +0 -1
  346. package/dist/tools/define-agent-tool.js +0 -30
  347. package/dist/tools/define-agent-tool.js.map +0 -1
  348. package/dist/tools/dispatcher.d.ts +0 -19
  349. package/dist/tools/dispatcher.d.ts.map +0 -1
  350. package/dist/tools/dispatcher.js +0 -91
  351. package/dist/tools/dispatcher.js.map +0 -1
  352. package/dist/tools/loop-detector.d.ts +0 -27
  353. package/dist/tools/loop-detector.d.ts.map +0 -1
  354. package/dist/tools/loop-detector.js +0 -76
  355. package/dist/tools/loop-detector.js.map +0 -1
  356. package/dist/tools/registry.d.ts +0 -19
  357. package/dist/tools/registry.d.ts.map +0 -1
  358. package/dist/tools/registry.js +0 -54
  359. package/dist/tools/registry.js.map +0 -1
  360. package/dist/tools/step/result-tool.d.ts +0 -7
  361. package/dist/tools/step/result-tool.d.ts.map +0 -1
  362. package/dist/tools/step/result-tool.js +0 -34
  363. package/dist/tools/step/result-tool.js.map +0 -1
  364. package/dist/tools/tool-contract.d.ts +0 -3
  365. package/dist/tools/tool-contract.d.ts.map +0 -1
  366. package/dist/tools/tool-contract.js +0 -2
  367. package/dist/tools/tool-contract.js.map +0 -1
  368. package/dist/tools/types.d.ts +0 -210
  369. package/dist/tools/types.d.ts.map +0 -1
  370. package/dist/tools/types.js +0 -4
  371. package/dist/tools/types.js.map +0 -1
  372. package/docs/CLI.md +0 -59
  373. package/docs/CONFIGURATION.md +0 -105
  374. package/docs/DRIVERS.md +0 -79
  375. package/docs/EVIDENCE.md +0 -64
  376. package/schemas/checkmate-config.v1.json +0 -176
  377. package/schemas/describe-result.v1.json +0 -414
  378. package/schemas/driver-descriptor.v1.json +0 -66
  379. package/schemas/run-request.v1.json +0 -67
  380. package/schemas/run-result.v1.json +0 -333
  381. package/schemas/validation-result.v1.json +0 -86
@@ -1 +0,0 @@
1
- {"version":3,"file":"static-commands.d.ts","sourceRoot":"","sources":["../../src/cli/static-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC7F,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC/E,OAAO,EAAqD,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAElH,wBAAsB,qBAAqB,CAC1C,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,kBAAuB,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CAG7B;AAED,wBAAsB,oBAAoB,CACzC,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE,kBAAuB,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CAG7B;AA6BD,wBAAsB,yBAAyB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAE3G;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,kBAAkB,CAO1E;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,gBAAgB,CAOtE;AAED,wBAAgB,yBAAyB,IAAI,kBAAkB,CAa9D;AAED,wBAAgB,uBAAuB,IAAI,gBAAgB,CAa1D"}
@@ -1,83 +0,0 @@
1
- import { boundDiagnostics } from '../config/ingestion.js';
2
- import { describeEnvironment, prepareRun, prepareRunSource } from '../api/prepare-run.js';
3
- export async function validateStaticRequest(request, options = {}) {
4
- const preparation = await prepareRun(request, options);
5
- return validationResult(preparation);
6
- }
7
- export async function validateStaticSource(source, options = {}) {
8
- const preparation = await prepareRunSource(source, options);
9
- return validationResult(preparation);
10
- }
11
- function validationResult(preparation) {
12
- if (preparation.ok === false) {
13
- return {
14
- kind: 'validation-result',
15
- schemaVersion: 1,
16
- status: preparation.status,
17
- diagnostics: preparation.diagnostics,
18
- };
19
- }
20
- return {
21
- kind: 'validation-result',
22
- schemaVersion: 1,
23
- status: 'valid',
24
- scenarioId: preparation.prepared.request.scenario.id,
25
- policy: {
26
- id: preparation.prepared.policy.id,
27
- effectiveLimits: { ...preparation.prepared.effectiveLimits },
28
- },
29
- driver: {
30
- id: preparation.prepared.driver.id,
31
- contractVersion: preparation.prepared.driver.descriptor.driverContractVersion,
32
- },
33
- diagnostics: [],
34
- };
35
- }
36
- export async function describeStaticEnvironment(options = {}) {
37
- return describeEnvironment(options);
38
- }
39
- export function validationError(diagnostic) {
40
- return {
41
- kind: 'validation-result',
42
- schemaVersion: 1,
43
- status: 'invalid',
44
- diagnostics: boundDiagnostics([diagnostic]),
45
- };
46
- }
47
- export function describeError(diagnostic) {
48
- return {
49
- kind: 'describe-result',
50
- schemaVersion: 1,
51
- status: 'invalid',
52
- diagnostics: boundDiagnostics([diagnostic]),
53
- };
54
- }
55
- export function unexpectedValidationError() {
56
- return {
57
- kind: 'validation-result',
58
- schemaVersion: 1,
59
- status: 'error',
60
- diagnostics: boundDiagnostics([
61
- {
62
- code: 'internal-error',
63
- path: '',
64
- message: 'validation failed because of an unexpected operational error',
65
- },
66
- ]),
67
- };
68
- }
69
- export function unexpectedDescribeError() {
70
- return {
71
- kind: 'describe-result',
72
- schemaVersion: 1,
73
- status: 'error',
74
- diagnostics: boundDiagnostics([
75
- {
76
- code: 'internal-error',
77
- path: '',
78
- message: 'description failed because of an unexpected operational error',
79
- },
80
- ]),
81
- };
82
- }
83
- //# sourceMappingURL=static-commands.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"static-commands.js","sourceRoot":"","sources":["../../src/cli/static-commands.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import type { Readable } from 'node:stream';
2
- export declare const MAX_WORKER_STREAM_BYTES: number;
3
- export type WorkerStreamSummary = Readonly<{
4
- stream: 'stdout' | 'stderr';
5
- bytes: number;
6
- truncated: boolean;
7
- }>;
8
- export declare class WorkerStreamGuard {
9
- private readonly name;
10
- private readonly onActivity?;
11
- private bytes;
12
- private truncated;
13
- private attached;
14
- constructor(name: WorkerStreamSummary['stream'], onActivity?: (summary: WorkerStreamSummary) => void);
15
- attach(stream: Readable | null): void;
16
- dispose(stream: Readable | null): void;
17
- summary(): WorkerStreamSummary;
18
- private readonly onData;
19
- }
20
- //# sourceMappingURL=worker-stream-guard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-stream-guard.d.ts","sourceRoot":"","sources":["../../src/cli/worker-stream-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,eAAO,MAAM,uBAAuB,QAAY,CAAA;AAEhD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAC1C,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,OAAO,CAAA;CAClB,CAAC,CAAA;AAEF,qBAAa,iBAAiB;IAM5B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAN7B,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAQ;gBAGN,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EACnC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI;IAGrE,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAOrC,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAOtC,OAAO,IAAI,mBAAmB;IAI9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAStB;CACD"}
@@ -1,41 +0,0 @@
1
- export const MAX_WORKER_STREAM_BYTES = 64 * 1024;
2
- export class WorkerStreamGuard {
3
- name;
4
- onActivity;
5
- bytes = 0;
6
- truncated = false;
7
- attached = false;
8
- constructor(name, onActivity) {
9
- this.name = name;
10
- this.onActivity = onActivity;
11
- }
12
- attach(stream) {
13
- if (!stream || this.attached)
14
- return;
15
- this.attached = true;
16
- stream.on('data', this.onData);
17
- stream.resume();
18
- }
19
- dispose(stream) {
20
- if (!stream || !this.attached)
21
- return;
22
- stream.off('data', this.onData);
23
- stream.destroy();
24
- this.attached = false;
25
- }
26
- summary() {
27
- return { stream: this.name, bytes: this.bytes, truncated: this.truncated };
28
- }
29
- onData = (chunk) => {
30
- const size = typeof chunk === 'string' ? Buffer.byteLength(chunk, 'utf8') : chunk.byteLength;
31
- const previous = this.bytes;
32
- const wasTruncated = this.truncated;
33
- this.bytes = Math.min(Number.MAX_SAFE_INTEGER, this.bytes + size);
34
- if (this.bytes > MAX_WORKER_STREAM_BYTES)
35
- this.truncated = true;
36
- if (previous === 0 || (!wasTruncated && this.truncated)) {
37
- this.onActivity?.(this.summary());
38
- }
39
- };
40
- }
41
- //# sourceMappingURL=worker-stream-guard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-stream-guard.js","sourceRoot":"","sources":["../../src/cli/worker-stream-guard.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAA;AAQhD,MAAM,OAAO,iBAAiB;IAMX;IACA;IANV,KAAK,GAAG,CAAC,CAAA;IACT,SAAS,GAAG,KAAK,CAAA;IACjB,QAAQ,GAAG,KAAK,CAAA;IAExB,YACkB,IAAmC,EACnC,UAAmD;QADnD,SAAI,GAAJ,IAAI,CAA+B;QACnC,eAAU,GAAV,UAAU,CAAyC;IAClE,CAAC;IAEJ,MAAM,CAAC,MAAuB;QAC7B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAM;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9B,MAAM,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;IAED,OAAO,CAAC,MAAuB;QAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAM;QACrC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAC/B,MAAM,CAAC,OAAO,EAAE,CAAA;QAChB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,OAAO;QACN,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAA;IAC3E,CAAC;IAEgB,MAAM,GAAG,CAAC,KAAsB,EAAQ,EAAE;QAC1D,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAA;QAC5F,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAA;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAA;QACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;QACjE,IAAI,IAAI,CAAC,KAAK,GAAG,uBAAuB;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QAC/D,IAAI,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QAClC,CAAC;IACF,CAAC,CAAA;CACD"}
@@ -1,3 +0,0 @@
1
- export type WorkerProcess = Pick<NodeJS.Process, 'on' | 'send' | 'disconnect'>;
2
- export declare function runWorkerProcess(workerProcess?: WorkerProcess): void;
3
- //# sourceMappingURL=worker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/cli/worker.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,YAAY,CAAC,CAAA;AAE9E,wBAAgB,gBAAgB,CAAC,aAAa,GAAE,aAAuB,GAAG,IAAI,CA6B7E"}
@@ -1,111 +0,0 @@
1
- import { fileURLToPath } from 'node:url';
2
- import { resolve } from 'node:path';
3
- import { executePreparedRun } from '../api/execute-prepared-run.js';
4
- import { serializeJson } from '../contracts/serialize.js';
5
- import { scrub } from '../redaction/scrub.js';
6
- import { assertIpcFrameSize, diagnosticFrame, parseParentMessage, sendIpcFrame, terminalDigest, } from './protocol.js';
7
- export function runWorkerProcess(workerProcess = process) {
8
- const controller = new AbortController();
9
- let started = false;
10
- let runId;
11
- workerProcess.on('message', (raw) => {
12
- let message;
13
- try {
14
- message = parseParentMessage(raw);
15
- }
16
- catch {
17
- return;
18
- }
19
- if (message.type === 'abort') {
20
- controller.abort(message.signal);
21
- return;
22
- }
23
- if (started)
24
- return;
25
- started = true;
26
- runId = message.identity.runId;
27
- void execute(message, controller, workerProcess).catch((error) => {
28
- if (!runId)
29
- return;
30
- send(workerProcess, {
31
- type: 'fatal',
32
- runId,
33
- diagnostic: fatalDiagnostic(error),
34
- });
35
- workerProcess.disconnect?.();
36
- });
37
- });
38
- }
39
- async function execute(message, controller, workerProcess) {
40
- const runId = message.identity.runId;
41
- const logger = workerLogger(runId, workerProcess);
42
- const result = await executePreparedRun(message.prepared, message.identity, {
43
- signal: controller.signal,
44
- logger,
45
- onCleanupStarted: () => send(workerProcess, { type: 'cleanup-started', runId }),
46
- });
47
- const resultJson = serializeJson(result);
48
- const committed = result.reason !== 'result-write-failed';
49
- if (!committed) {
50
- const terminal = { type: 'terminal-inline', runId, committed: false, resultJson };
51
- try {
52
- assertIpcFrameSize(terminal);
53
- send(workerProcess, terminal);
54
- }
55
- catch {
56
- send(workerProcess, {
57
- type: 'fatal',
58
- runId,
59
- diagnostic: {
60
- code: 'worker.result-unavailable',
61
- path: '',
62
- message: 'The uncommitted terminal result exceeded the IPC frame limit',
63
- },
64
- });
65
- }
66
- workerProcess.disconnect?.();
67
- return;
68
- }
69
- const digest = terminalDigest(resultJson);
70
- const inline = { type: 'terminal-inline', runId, committed: true, resultJson, digest };
71
- try {
72
- assertIpcFrameSize(inline);
73
- send(workerProcess, inline);
74
- }
75
- catch {
76
- send(workerProcess, { type: 'terminal-file', runId, committed: true, digest });
77
- }
78
- workerProcess.disconnect?.();
79
- }
80
- function workerLogger(runId, workerProcess) {
81
- const write = (level, message) => {
82
- send(workerProcess, diagnosticFrame(runId, { code: `worker.log.${level}`, path: '', message }));
83
- };
84
- return {
85
- debug: (message) => write('debug', message),
86
- info: (message) => write('info', message),
87
- warn: (message) => write('warn', message),
88
- error: (message) => write('error', message),
89
- };
90
- }
91
- function send(workerProcess, message) {
92
- if (!workerProcess.send)
93
- return;
94
- try {
95
- sendIpcFrame((frame) => workerProcess.send(frame), message);
96
- }
97
- catch {
98
- return;
99
- }
100
- }
101
- function fatalDiagnostic(error) {
102
- return {
103
- code: 'worker.fatal',
104
- path: '',
105
- message: scrub(error instanceof Error ? error.message : String(error)),
106
- };
107
- }
108
- const entry = process.argv[1] ? resolve(process.argv[1]) : '';
109
- if (entry === resolve(fileURLToPath(import.meta.url)))
110
- runWorkerProcess();
111
- //# sourceMappingURL=worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/cli/worker.ts"],"names":[],"mappings":"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"}
@@ -1,58 +0,0 @@
1
- import type { Diagnostic } from '../contracts/types.js';
2
- export declare const INGESTION_LIMITS: Readonly<{
3
- documentBytes: number;
4
- maxDepth: 64;
5
- maxValues: 10000;
6
- maxSteps: 100;
7
- maxIdCharacters: 128;
8
- maxNameCharacters: 256;
9
- maxStepTextBytes: number;
10
- maxDiagnostics: 100;
11
- maxDiagnosticBytes: number;
12
- maxPreparedRunBytes: number;
13
- }>;
14
- export type InputFailureStatus = 'invalid' | 'error';
15
- export type InputResult<T> = {
16
- ok: true;
17
- value: T;
18
- } | {
19
- ok: false;
20
- status: InputFailureStatus;
21
- diagnostics: [Diagnostic, ...Diagnostic[]];
22
- };
23
- export type JsonInputSource = {
24
- kind: 'value';
25
- value: unknown;
26
- } | {
27
- kind: 'file';
28
- path: string;
29
- } | {
30
- kind: 'stdin';
31
- stream: AsyncIterable<string | Uint8Array>;
32
- };
33
- export declare function acquireJsonInput(source: JsonInputSource, path?: string): Promise<InputResult<unknown>>;
34
- export declare function readJsonDocument(filePath: string, path?: string): Promise<InputResult<unknown>>;
35
- export declare function readJsonStream(stream: AsyncIterable<string | Uint8Array>, path?: string): Promise<InputResult<unknown>>;
36
- export declare function parseJsonDocument(bytes: Uint8Array, path?: string): InputResult<unknown>;
37
- export declare function inspectJsonStructure(value: unknown, path?: string): InputResult<unknown>;
38
- export declare function requestLimitDiagnostics(input: {
39
- scenario: {
40
- id: string;
41
- name?: string;
42
- driver: {
43
- id: string;
44
- };
45
- policy?: string;
46
- steps: Array<{
47
- id: string;
48
- action: string;
49
- expect: string;
50
- }>;
51
- };
52
- }): Diagnostic[];
53
- export declare function rawRequestLimitDiagnostics(input: unknown): Diagnostic[];
54
- export declare function boundDiagnostics(diagnostics: readonly Diagnostic[]): [Diagnostic, ...Diagnostic[]];
55
- export declare function appendPointer(path: string, member: string): string;
56
- export declare function combineFailureStatus(...statuses: InputFailureStatus[]): InputFailureStatus;
57
- export declare function normalizeSingleLine(value: string): string;
58
- //# sourceMappingURL=ingestion.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ingestion.d.ts","sourceRoot":"","sources":["../../src/config/ingestion.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGvD,eAAO,MAAM,gBAAgB;;;;;;;;;;;EAW3B,CAAA;AAEF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAAA;AAEpD,MAAM,MAAM,WAAW,CAAC,CAAC,IACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,WAAW,EAAE,CAAC,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC,CAAA;CAAE,CAAA;AAE/G,MAAM,MAAM,eAAe,GACxB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,CAAA;CAAE,CAAA;AAEhE,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAIxG;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAsBjG;AAED,wBAAsB,cAAc,CACnC,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,EAC1C,IAAI,SAAK,GACP,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAc/B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,SAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAkBpF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,SAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAoCpF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC9C,QAAQ,EAAE;QACT,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,EAAE;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAA;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAC5D,CAAA;CACD,GAAG,UAAU,EAAE,CAWf;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,EAAE,CA8BvE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC,CA4BlG;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,QAAQ,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,CAE1F;AAcD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAezD"}
@@ -1,283 +0,0 @@
1
- import { Buffer } from 'node:buffer';
2
- import { open } from 'node:fs/promises';
3
- import { serializeJson } from '../contracts/serialize.js';
4
- import { ownValue } from './record.js';
5
- export const INGESTION_LIMITS = Object.freeze({
6
- documentBytes: 256 * 1024,
7
- maxDepth: 64,
8
- maxValues: 10_000,
9
- maxSteps: 100,
10
- maxIdCharacters: 128,
11
- maxNameCharacters: 256,
12
- maxStepTextBytes: 16 * 1024,
13
- maxDiagnostics: 100,
14
- maxDiagnosticBytes: 64 * 1024,
15
- maxPreparedRunBytes: 1024 * 1024,
16
- });
17
- export async function acquireJsonInput(source, path = '') {
18
- if (source.kind === 'value')
19
- return inspectJsonStructure(source.value, path);
20
- if (source.kind === 'file')
21
- return readJsonDocument(source.path, path);
22
- return readJsonStream(source.stream, path);
23
- }
24
- export async function readJsonDocument(filePath, path = '') {
25
- let file;
26
- try {
27
- file = await open(filePath, 'r');
28
- }
29
- catch (error) {
30
- return fileFailure(error, path);
31
- }
32
- try {
33
- const stat = await file.stat();
34
- if (!stat.isFile())
35
- return invalidFailure('input.unreadable', path, 'path must identify a regular file');
36
- if (stat.size > INGESTION_LIMITS.documentBytes)
37
- return tooLarge(path);
38
- const buffer = Buffer.alloc(INGESTION_LIMITS.documentBytes + 1);
39
- const { bytesRead } = await file.read(buffer, 0, buffer.length, 0);
40
- if (bytesRead > INGESTION_LIMITS.documentBytes)
41
- return tooLarge(path);
42
- return parseJsonDocument(buffer.subarray(0, bytesRead), path);
43
- }
44
- catch (error) {
45
- return fileFailure(error, path);
46
- }
47
- finally {
48
- await file.close().catch(() => undefined);
49
- }
50
- }
51
- export async function readJsonStream(stream, path = '') {
52
- const chunks = [];
53
- let bytes = 0;
54
- try {
55
- for await (const chunk of stream) {
56
- const buffer = typeof chunk === 'string' ? Buffer.from(chunk) : Buffer.from(chunk);
57
- bytes += buffer.byteLength;
58
- if (bytes > INGESTION_LIMITS.documentBytes)
59
- return tooLarge(path);
60
- chunks.push(buffer);
61
- }
62
- }
63
- catch {
64
- return operationalFailure('input.read-failed', path, 'input stream could not be read');
65
- }
66
- return parseJsonDocument(Buffer.concat(chunks, bytes), path);
67
- }
68
- export function parseJsonDocument(bytes, path = '') {
69
- if (bytes.byteLength > INGESTION_LIMITS.documentBytes)
70
- return tooLarge(path);
71
- let text;
72
- try {
73
- text = new TextDecoder('utf-8', { fatal: true }).decode(bytes);
74
- }
75
- catch {
76
- return invalidFailure('input.invalid-utf8', path, 'must be valid UTF-8');
77
- }
78
- let value;
79
- try {
80
- value = JSON.parse(text);
81
- }
82
- catch {
83
- return invalidFailure('input.invalid-json', path, 'must be valid JSON');
84
- }
85
- return inspectJsonStructure(value, path);
86
- }
87
- export function inspectJsonStructure(value, path = '') {
88
- const pending = [{ value, depth: 1, path }];
89
- const visited = new WeakSet();
90
- let values = 0;
91
- while (pending.length > 0) {
92
- const current = pending.pop();
93
- values++;
94
- if (values > INGESTION_LIMITS.maxValues) {
95
- return invalidFailure('input.too-many-values', path, `must contain at most ${INGESTION_LIMITS.maxValues} values`);
96
- }
97
- if (current.depth > INGESTION_LIMITS.maxDepth) {
98
- return invalidFailure('input.too-deep', current.path, `must not exceed depth ${INGESTION_LIMITS.maxDepth}`);
99
- }
100
- if (current.value === null || typeof current.value !== 'object')
101
- continue;
102
- if (visited.has(current.value))
103
- continue;
104
- visited.add(current.value);
105
- if (!Array.isArray(current.value) && Object.getPrototypeOf(current.value) !== Object.prototype) {
106
- return invalidFailure('input.non-json', current.path, 'must contain only JSON values');
107
- }
108
- const entries = Array.isArray(current.value)
109
- ? current.value.map((entry, index) => [String(index), entry])
110
- : Object.entries(current.value);
111
- for (let index = entries.length - 1; index >= 0; index--) {
112
- const [key, entry] = entries[index];
113
- pending.push({ value: entry, depth: current.depth + 1, path: appendPointer(current.path, key) });
114
- }
115
- }
116
- return { ok: true, value };
117
- }
118
- export function requestLimitDiagnostics(input) {
119
- const diagnostics = [];
120
- if (input.scenario.steps.length > INGESTION_LIMITS.maxSteps) {
121
- diagnostics.push(limitDiagnostic('/scenario/steps', `${INGESTION_LIMITS.maxSteps} steps`));
122
- }
123
- for (const [index, step] of input.scenario.steps.entries()) {
124
- const base = `/scenario/steps/${index}`;
125
- checkText(diagnostics, step.action, `${base}/action`);
126
- checkText(diagnostics, step.expect, `${base}/expect`);
127
- }
128
- return diagnostics;
129
- }
130
- export function rawRequestLimitDiagnostics(input) {
131
- if (!isRecord(input))
132
- return [];
133
- const scenario = ownValue(input, 'scenario');
134
- if (!isRecord(scenario))
135
- return [];
136
- const diagnostics = [];
137
- checkRawId(diagnostics, ownValue(scenario, 'id'), '/scenario/id');
138
- checkRawId(diagnostics, ownValue(scenario, 'policy'), '/scenario/policy');
139
- const name = ownValue(scenario, 'name');
140
- if (typeof name === 'string' && name.length > INGESTION_LIMITS.maxNameCharacters) {
141
- diagnostics.push(limitDiagnostic('/scenario/name', `${INGESTION_LIMITS.maxNameCharacters} characters`));
142
- }
143
- const driver = ownValue(scenario, 'driver');
144
- if (isRecord(driver))
145
- checkRawId(diagnostics, ownValue(driver, 'id'), '/scenario/driver/id');
146
- const steps = ownValue(scenario, 'steps');
147
- if (!Array.isArray(steps))
148
- return diagnostics;
149
- if (steps.length > INGESTION_LIMITS.maxSteps) {
150
- diagnostics.push(limitDiagnostic('/scenario/steps', `${INGESTION_LIMITS.maxSteps} steps`));
151
- }
152
- for (const [index, step] of steps.entries()) {
153
- if (!isRecord(step))
154
- continue;
155
- const base = `/scenario/steps/${index}`;
156
- checkRawId(diagnostics, ownValue(step, 'id'), `${base}/id`);
157
- const action = ownValue(step, 'action');
158
- const expectation = ownValue(step, 'expect');
159
- if (typeof action === 'string')
160
- checkText(diagnostics, action, `${base}/action`);
161
- if (typeof expectation === 'string')
162
- checkText(diagnostics, expectation, `${base}/expect`);
163
- }
164
- return diagnostics;
165
- }
166
- export function boundDiagnostics(diagnostics) {
167
- const marker = {
168
- code: 'diagnostics.truncated',
169
- path: '',
170
- message: 'additional diagnostics were omitted because the diagnostic limit was reached',
171
- };
172
- const accepted = [];
173
- for (const diagnostic of diagnostics) {
174
- const normalized = normalizeDiagnostic(diagnostic);
175
- const candidate = [...accepted, normalized];
176
- const countExceeded = candidate.length > INGESTION_LIMITS.maxDiagnostics;
177
- const bytesExceeded = diagnosticBytes(candidate) > INGESTION_LIMITS.maxDiagnosticBytes;
178
- if (countExceeded || bytesExceeded) {
179
- while (accepted.length > 0 &&
180
- (accepted.length + 1 > INGESTION_LIMITS.maxDiagnostics ||
181
- diagnosticBytes([...accepted, marker]) > INGESTION_LIMITS.maxDiagnosticBytes)) {
182
- accepted.pop();
183
- }
184
- accepted.push(marker);
185
- break;
186
- }
187
- accepted.push(normalized);
188
- }
189
- return (accepted.length > 0 ? accepted : [marker]);
190
- }
191
- export function appendPointer(path, member) {
192
- return `${path}/${member.replaceAll('~', '~0').replaceAll('/', '~1')}`;
193
- }
194
- export function combineFailureStatus(...statuses) {
195
- return statuses.includes('error') ? 'error' : 'invalid';
196
- }
197
- function normalizeDiagnostic(diagnostic) {
198
- return {
199
- code: normalizeSingleLine(diagnostic.code) || 'diagnostic.invalid',
200
- path: validPointer(diagnostic.path) ? diagnostic.path : '',
201
- message: normalizeSingleLine(diagnostic.message) || 'diagnostic message was empty',
202
- };
203
- }
204
- function diagnosticBytes(diagnostics) {
205
- return Buffer.byteLength(serializeJson(diagnostics), 'utf8');
206
- }
207
- export function normalizeSingleLine(value) {
208
- let normalized = '';
209
- let replacingControls = false;
210
- for (const character of value) {
211
- const code = character.codePointAt(0);
212
- const control = code <= 0x1f || (code >= 0x7f && code <= 0x9f);
213
- if (control) {
214
- if (!replacingControls)
215
- normalized += ' ';
216
- replacingControls = true;
217
- }
218
- else {
219
- normalized += character;
220
- replacingControls = false;
221
- }
222
- }
223
- return normalized.trim();
224
- }
225
- function validPointer(path) {
226
- if (path === '')
227
- return true;
228
- if (!path.startsWith('/'))
229
- return false;
230
- for (let index = 0; index < path.length; index++) {
231
- if (path[index] !== '~')
232
- continue;
233
- if (path[index + 1] !== '0' && path[index + 1] !== '1')
234
- return false;
235
- index++;
236
- }
237
- for (const character of path) {
238
- const code = character.codePointAt(0);
239
- if (code <= 0x1f || (code >= 0x7f && code <= 0x9f))
240
- return false;
241
- }
242
- return true;
243
- }
244
- function checkText(diagnostics, value, path) {
245
- if (Buffer.byteLength(value, 'utf8') > INGESTION_LIMITS.maxStepTextBytes) {
246
- diagnostics.push(limitDiagnostic(path, `${INGESTION_LIMITS.maxStepTextBytes} UTF-8 bytes`));
247
- }
248
- }
249
- function checkRawId(diagnostics, value, path) {
250
- if (typeof value === 'string' && value.length > INGESTION_LIMITS.maxIdCharacters) {
251
- diagnostics.push(limitDiagnostic(path, `${INGESTION_LIMITS.maxIdCharacters} characters`));
252
- }
253
- }
254
- function isRecord(value) {
255
- return value !== null && typeof value === 'object' && !Array.isArray(value);
256
- }
257
- function limitDiagnostic(path, maximum) {
258
- return { code: 'input.limit-exceeded', path, message: `must not exceed ${maximum}` };
259
- }
260
- function tooLarge(path) {
261
- return invalidFailure('input.too-large', path, `must not exceed ${INGESTION_LIMITS.documentBytes} bytes`);
262
- }
263
- function fileFailure(error, path) {
264
- const code = errorCode(error);
265
- if (code === 'ENOENT')
266
- return invalidFailure('input.unreadable', path, 'file does not exist');
267
- if (code === 'EACCES' || code === 'EPERM' || code === 'EISDIR') {
268
- return invalidFailure('input.unreadable', path, 'file could not be read');
269
- }
270
- return operationalFailure('input.read-failed', path, 'file could not be read because of an operational error');
271
- }
272
- function errorCode(error) {
273
- if (!error || typeof error !== 'object' || !Object.prototype.hasOwnProperty.call(error, 'code'))
274
- return undefined;
275
- return typeof error.code === 'string' ? error.code : undefined;
276
- }
277
- function invalidFailure(code, path, message) {
278
- return { ok: false, status: 'invalid', diagnostics: [{ code, path, message }] };
279
- }
280
- function operationalFailure(code, path, message) {
281
- return { ok: false, status: 'error', diagnostics: [{ code, path, message }] };
282
- }
283
- //# sourceMappingURL=ingestion.js.map