@xoxoai/checkmate 0.6.7 → 0.7.0

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 (382) hide show
  1. package/dist/checkmate.js +13375 -0
  2. package/package.json +14 -100
  3. package/plugin/.claude-plugin/plugin.json +10 -0
  4. package/plugin/bin/checkmate.ts +3 -0
  5. package/plugin/contracts/finding.schema.json +78 -0
  6. package/plugin/contracts/gap.schema.json +56 -0
  7. package/plugin/contracts/plan-candidate.schema.json +103 -0
  8. package/plugin/contracts/plan-delta.schema.json +63 -0
  9. package/plugin/contracts/plan-patch.schema.json +116 -0
  10. package/plugin/contracts/plan-request.schema.json +108 -0
  11. package/plugin/contracts/plan.schema.json +313 -0
  12. package/plugin/contracts/profile.schema.json +154 -0
  13. package/plugin/contracts/response.schema.json +25 -0
  14. package/plugin/contracts/result.schema.json +410 -0
  15. package/plugin/dist/checkmate.js +13012 -0
  16. package/plugin/package.json +4 -0
  17. package/plugin/references/browser.md +35 -0
  18. package/plugin/references/http.md +30 -0
  19. package/plugin/references/workflow.md +122 -0
  20. package/plugin/skills/execute/SKILL.md +92 -0
  21. package/plugin/skills/plan/SKILL.md +94 -0
  22. package/plugin/skills/report/SKILL.md +28 -0
  23. package/plugin/skills/revise/SKILL.md +43 -0
  24. package/plugin/skills/setup/SKILL.md +82 -0
  25. package/plugin/skills/status/SKILL.md +20 -0
  26. package/plugin/skills/ui/SKILL.md +26 -0
  27. package/plugin/src/actor.ts +21 -0
  28. package/plugin/src/cli.ts +1133 -0
  29. package/plugin/src/contracts.ts +342 -0
  30. package/plugin/src/index.ts +52 -0
  31. package/plugin/src/plans.ts +1028 -0
  32. package/plugin/src/render.ts +544 -0
  33. package/plugin/src/runs.ts +868 -0
  34. package/plugin/src/store.ts +384 -0
  35. package/plugin/src/targets.ts +205 -0
  36. package/plugin/src/types.ts +319 -0
  37. package/plugin/src/ui/assets/client.js +501 -0
  38. package/plugin/src/ui/assets/favicon.svg +1 -0
  39. package/plugin/src/ui/assets/fonts/inter-OFL.txt +93 -0
  40. package/plugin/src/ui/assets/fonts/inter.woff2 +0 -0
  41. package/plugin/src/ui/assets/fonts/jetbrains-mono-OFL.txt +93 -0
  42. package/plugin/src/ui/assets/fonts/jetbrains-mono.woff2 +0 -0
  43. package/plugin/src/ui/assets/fonts/space-grotesk-OFL.txt +93 -0
  44. package/plugin/src/ui/assets/fonts/space-grotesk.woff2 +0 -0
  45. package/plugin/src/ui/assets/style.css +1926 -0
  46. package/plugin/src/ui/edit.ts +305 -0
  47. package/plugin/src/ui/forms.ts +209 -0
  48. package/plugin/src/ui/html.ts +130 -0
  49. package/plugin/src/ui/layout.ts +198 -0
  50. package/plugin/src/ui/lists.ts +645 -0
  51. package/plugin/src/ui/plan.ts +577 -0
  52. package/plugin/src/ui/run.ts +489 -0
  53. package/plugin/src/ui/server.ts +684 -0
  54. package/plugin/src/validators.d.ts +13 -0
  55. package/plugin/src/validators.js +1 -0
  56. package/plugin/src/views.ts +839 -0
  57. package/LICENSE +0 -21
  58. package/README.md +0 -294
  59. package/bin/checkmate.js +0 -13
  60. package/dist/ai/client.d.ts +0 -64
  61. package/dist/ai/client.d.ts.map +0 -1
  62. package/dist/ai/client.js +0 -313
  63. package/dist/ai/client.js.map +0 -1
  64. package/dist/ai/message-handler.d.ts +0 -9
  65. package/dist/ai/message-handler.d.ts.map +0 -1
  66. package/dist/ai/message-handler.js +0 -50
  67. package/dist/ai/message-handler.js.map +0 -1
  68. package/dist/ai/message-history.d.ts +0 -17
  69. package/dist/ai/message-history.d.ts.map +0 -1
  70. package/dist/ai/message-history.js +0 -45
  71. package/dist/ai/message-history.js.map +0 -1
  72. package/dist/ai/prompts.d.ts +0 -4
  73. package/dist/ai/prompts.d.ts.map +0 -1
  74. package/dist/ai/prompts.js +0 -24
  75. package/dist/ai/prompts.js.map +0 -1
  76. package/dist/ai/rate-limit-policy.d.ts +0 -9
  77. package/dist/ai/rate-limit-policy.d.ts.map +0 -1
  78. package/dist/ai/rate-limit-policy.js +0 -34
  79. package/dist/ai/rate-limit-policy.js.map +0 -1
  80. package/dist/ai/tool-response-handler.d.ts +0 -16
  81. package/dist/ai/tool-response-handler.d.ts.map +0 -1
  82. package/dist/ai/tool-response-handler.js +0 -85
  83. package/dist/ai/tool-response-handler.js.map +0 -1
  84. package/dist/ai/turn-processor.d.ts +0 -34
  85. package/dist/ai/turn-processor.d.ts.map +0 -1
  86. package/dist/ai/turn-processor.js +0 -107
  87. package/dist/ai/turn-processor.js.map +0 -1
  88. package/dist/api/allocate-run-identity.d.ts +0 -8
  89. package/dist/api/allocate-run-identity.d.ts.map +0 -1
  90. package/dist/api/allocate-run-identity.js +0 -10
  91. package/dist/api/allocate-run-identity.js.map +0 -1
  92. package/dist/api/execute-prepared-run.d.ts +0 -22
  93. package/dist/api/execute-prepared-run.d.ts.map +0 -1
  94. package/dist/api/execute-prepared-run.js +0 -184
  95. package/dist/api/execute-prepared-run.js.map +0 -1
  96. package/dist/api/index.d.ts +0 -25
  97. package/dist/api/index.d.ts.map +0 -1
  98. package/dist/api/index.js +0 -69
  99. package/dist/api/index.js.map +0 -1
  100. package/dist/api/prepare-run.d.ts +0 -44
  101. package/dist/api/prepare-run.d.ts.map +0 -1
  102. package/dist/api/prepare-run.js +0 -261
  103. package/dist/api/prepare-run.js.map +0 -1
  104. package/dist/cli/diagnostic-relay.d.ts +0 -6
  105. package/dist/cli/diagnostic-relay.d.ts.map +0 -1
  106. package/dist/cli/diagnostic-relay.js +0 -6
  107. package/dist/cli/diagnostic-relay.js.map +0 -1
  108. package/dist/cli/main.d.ts +0 -21
  109. package/dist/cli/main.d.ts.map +0 -1
  110. package/dist/cli/main.js +0 -166
  111. package/dist/cli/main.js.map +0 -1
  112. package/dist/cli/protocol.d.ts +0 -57
  113. package/dist/cli/protocol.d.ts.map +0 -1
  114. package/dist/cli/protocol.js +0 -116
  115. package/dist/cli/protocol.js.map +0 -1
  116. package/dist/cli/reconcile-result.d.ts +0 -13
  117. package/dist/cli/reconcile-result.d.ts.map +0 -1
  118. package/dist/cli/reconcile-result.js +0 -300
  119. package/dist/cli/reconcile-result.js.map +0 -1
  120. package/dist/cli/run-parent.d.ts +0 -37
  121. package/dist/cli/run-parent.d.ts.map +0 -1
  122. package/dist/cli/run-parent.js +0 -491
  123. package/dist/cli/run-parent.js.map +0 -1
  124. package/dist/cli/signals.d.ts +0 -36
  125. package/dist/cli/signals.d.ts.map +0 -1
  126. package/dist/cli/signals.js +0 -85
  127. package/dist/cli/signals.js.map +0 -1
  128. package/dist/cli/static-commands.d.ts +0 -11
  129. package/dist/cli/static-commands.d.ts.map +0 -1
  130. package/dist/cli/static-commands.js +0 -83
  131. package/dist/cli/static-commands.js.map +0 -1
  132. package/dist/cli/worker-stream-guard.d.ts +0 -20
  133. package/dist/cli/worker-stream-guard.d.ts.map +0 -1
  134. package/dist/cli/worker-stream-guard.js +0 -41
  135. package/dist/cli/worker-stream-guard.js.map +0 -1
  136. package/dist/cli/worker.d.ts +0 -3
  137. package/dist/cli/worker.d.ts.map +0 -1
  138. package/dist/cli/worker.js +0 -111
  139. package/dist/cli/worker.js.map +0 -1
  140. package/dist/config/ingestion.d.ts +0 -58
  141. package/dist/config/ingestion.d.ts.map +0 -1
  142. package/dist/config/ingestion.js +0 -283
  143. package/dist/config/ingestion.js.map +0 -1
  144. package/dist/config/manifest.d.ts +0 -20
  145. package/dist/config/manifest.d.ts.map +0 -1
  146. package/dist/config/manifest.js +0 -91
  147. package/dist/config/manifest.js.map +0 -1
  148. package/dist/config/model-egress.d.ts +0 -10
  149. package/dist/config/model-egress.d.ts.map +0 -1
  150. package/dist/config/model-egress.js +0 -62
  151. package/dist/config/model-egress.js.map +0 -1
  152. package/dist/config/package-resolution.d.ts +0 -4
  153. package/dist/config/package-resolution.d.ts.map +0 -1
  154. package/dist/config/package-resolution.js +0 -24
  155. package/dist/config/package-resolution.js.map +0 -1
  156. package/dist/config/policy.d.ts +0 -44
  157. package/dist/config/policy.d.ts.map +0 -1
  158. package/dist/config/policy.js +0 -141
  159. package/dist/config/policy.js.map +0 -1
  160. package/dist/config/record.d.ts +0 -4
  161. package/dist/config/record.d.ts.map +0 -1
  162. package/dist/config/record.js +0 -10
  163. package/dist/config/record.js.map +0 -1
  164. package/dist/config/secrets.d.ts +0 -11
  165. package/dist/config/secrets.d.ts.map +0 -1
  166. package/dist/config/secrets.js +0 -42
  167. package/dist/config/secrets.js.map +0 -1
  168. package/dist/contracts/diagnostics.d.ts +0 -4
  169. package/dist/contracts/diagnostics.d.ts.map +0 -1
  170. package/dist/contracts/diagnostics.js +0 -31
  171. package/dist/contracts/diagnostics.js.map +0 -1
  172. package/dist/contracts/serialize.d.ts +0 -2
  173. package/dist/contracts/serialize.d.ts.map +0 -1
  174. package/dist/contracts/serialize.js +0 -90
  175. package/dist/contracts/serialize.js.map +0 -1
  176. package/dist/contracts/types.d.ts +0 -316
  177. package/dist/contracts/types.d.ts.map +0 -1
  178. package/dist/contracts/types.js +0 -74
  179. package/dist/contracts/types.js.map +0 -1
  180. package/dist/contracts/validator.d.ts +0 -8
  181. package/dist/contracts/validator.d.ts.map +0 -1
  182. package/dist/contracts/validator.js +0 -71
  183. package/dist/contracts/validator.js.map +0 -1
  184. package/dist/driver.d.ts +0 -97
  185. package/dist/driver.d.ts.map +0 -1
  186. package/dist/driver.js +0 -24
  187. package/dist/driver.js.map +0 -1
  188. package/dist/drivers/descriptor.d.ts +0 -15
  189. package/dist/drivers/descriptor.d.ts.map +0 -1
  190. package/dist/drivers/descriptor.js +0 -122
  191. package/dist/drivers/descriptor.js.map +0 -1
  192. package/dist/drivers/loader.d.ts +0 -18
  193. package/dist/drivers/loader.d.ts.map +0 -1
  194. package/dist/drivers/loader.js +0 -97
  195. package/dist/drivers/loader.js.map +0 -1
  196. package/dist/drivers/web/checkmate-driver.json +0 -47
  197. package/dist/drivers/web/index.d.ts +0 -6
  198. package/dist/drivers/web/index.d.ts.map +0 -1
  199. package/dist/drivers/web/index.js +0 -27
  200. package/dist/drivers/web/index.js.map +0 -1
  201. package/dist/drivers/web/session.d.ts +0 -25
  202. package/dist/drivers/web/session.d.ts.map +0 -1
  203. package/dist/drivers/web/session.js +0 -132
  204. package/dist/drivers/web/session.js.map +0 -1
  205. package/dist/drivers/web/tools/network-request-recorder.d.ts +0 -46
  206. package/dist/drivers/web/tools/network-request-recorder.d.ts.map +0 -1
  207. package/dist/drivers/web/tools/network-request-recorder.js +0 -164
  208. package/dist/drivers/web/tools/network-request-recorder.js.map +0 -1
  209. package/dist/drivers/web/tools/screenshot-service.d.ts +0 -10
  210. package/dist/drivers/web/tools/screenshot-service.d.ts.map +0 -1
  211. package/dist/drivers/web/tools/screenshot-service.js +0 -23
  212. package/dist/drivers/web/tools/screenshot-service.js.map +0 -1
  213. package/dist/drivers/web/tools/snapshot-filter/index.d.ts +0 -4
  214. package/dist/drivers/web/tools/snapshot-filter/index.d.ts.map +0 -1
  215. package/dist/drivers/web/tools/snapshot-filter/index.js +0 -4
  216. package/dist/drivers/web/tools/snapshot-filter/index.js.map +0 -1
  217. package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.d.ts +0 -15
  218. package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.d.ts.map +0 -1
  219. package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.js +0 -99
  220. package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.js.map +0 -1
  221. package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.d.ts +0 -5
  222. package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.d.ts.map +0 -1
  223. package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.js +0 -56
  224. package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.js.map +0 -1
  225. package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.d.ts +0 -3
  226. package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.d.ts.map +0 -1
  227. package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.js +0 -85
  228. package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.js.map +0 -1
  229. package/dist/drivers/web/tools/snapshot-service.d.ts +0 -31
  230. package/dist/drivers/web/tools/snapshot-service.d.ts.map +0 -1
  231. package/dist/drivers/web/tools/snapshot-service.js +0 -96
  232. package/dist/drivers/web/tools/snapshot-service.js.map +0 -1
  233. package/dist/drivers/web/tools/tool.d.ts +0 -76
  234. package/dist/drivers/web/tools/tool.d.ts.map +0 -1
  235. package/dist/drivers/web/tools/tool.js +0 -562
  236. package/dist/drivers/web/tools/tool.js.map +0 -1
  237. package/dist/drivers/web/tools/transient-state-tracker.d.ts +0 -26
  238. package/dist/drivers/web/tools/transient-state-tracker.d.ts.map +0 -1
  239. package/dist/drivers/web/tools/transient-state-tracker.js +0 -301
  240. package/dist/drivers/web/tools/transient-state-tracker.js.map +0 -1
  241. package/dist/drivers/web/tools/types.d.ts +0 -11
  242. package/dist/drivers/web/tools/types.d.ts.map +0 -1
  243. package/dist/drivers/web/tools/types.js +0 -2
  244. package/dist/drivers/web/tools/types.js.map +0 -1
  245. package/dist/evidence/atomic-file.d.ts +0 -23
  246. package/dist/evidence/atomic-file.d.ts.map +0 -1
  247. package/dist/evidence/atomic-file.js +0 -104
  248. package/dist/evidence/atomic-file.js.map +0 -1
  249. package/dist/evidence/layout.d.ts +0 -30
  250. package/dist/evidence/layout.d.ts.map +0 -1
  251. package/dist/evidence/layout.js +0 -152
  252. package/dist/evidence/layout.js.map +0 -1
  253. package/dist/evidence/retention.d.ts +0 -5
  254. package/dist/evidence/retention.d.ts.map +0 -1
  255. package/dist/evidence/retention.js +0 -10
  256. package/dist/evidence/retention.js.map +0 -1
  257. package/dist/evidence/store.d.ts +0 -101
  258. package/dist/evidence/store.d.ts.map +0 -1
  259. package/dist/evidence/store.js +0 -375
  260. package/dist/evidence/store.js.map +0 -1
  261. package/dist/evidence/terminal-finalizer.d.ts +0 -19
  262. package/dist/evidence/terminal-finalizer.d.ts.map +0 -1
  263. package/dist/evidence/terminal-finalizer.js +0 -56
  264. package/dist/evidence/terminal-finalizer.js.map +0 -1
  265. package/dist/index.d.ts +0 -9
  266. package/dist/index.d.ts.map +0 -1
  267. package/dist/index.js +0 -12
  268. package/dist/index.js.map +0 -1
  269. package/dist/logging/invocation-logger.d.ts +0 -4
  270. package/dist/logging/invocation-logger.d.ts.map +0 -1
  271. package/dist/logging/invocation-logger.js +0 -25
  272. package/dist/logging/invocation-logger.js.map +0 -1
  273. package/dist/logging/level-logger.d.ts +0 -11
  274. package/dist/logging/level-logger.d.ts.map +0 -1
  275. package/dist/logging/level-logger.js +0 -82
  276. package/dist/logging/level-logger.js.map +0 -1
  277. package/dist/logging/types.d.ts +0 -8
  278. package/dist/logging/types.d.ts.map +0 -1
  279. package/dist/logging/types.js +0 -7
  280. package/dist/logging/types.js.map +0 -1
  281. package/dist/redaction/diagnostic-sanitizer.d.ts +0 -7
  282. package/dist/redaction/diagnostic-sanitizer.d.ts.map +0 -1
  283. package/dist/redaction/diagnostic-sanitizer.js +0 -42
  284. package/dist/redaction/diagnostic-sanitizer.js.map +0 -1
  285. package/dist/redaction/redactor.d.ts +0 -40
  286. package/dist/redaction/redactor.d.ts.map +0 -1
  287. package/dist/redaction/redactor.js +0 -176
  288. package/dist/redaction/redactor.js.map +0 -1
  289. package/dist/redaction/scrub.d.ts +0 -29
  290. package/dist/redaction/scrub.d.ts.map +0 -1
  291. package/dist/redaction/scrub.js +0 -54
  292. package/dist/redaction/scrub.js.map +0 -1
  293. package/dist/runtime/config.d.ts +0 -16
  294. package/dist/runtime/config.d.ts.map +0 -1
  295. package/dist/runtime/config.js +0 -2
  296. package/dist/runtime/config.js.map +0 -1
  297. package/dist/runtime/driver-boundary.d.ts +0 -16
  298. package/dist/runtime/driver-boundary.d.ts.map +0 -1
  299. package/dist/runtime/driver-boundary.js +0 -71
  300. package/dist/runtime/driver-boundary.js.map +0 -1
  301. package/dist/runtime/driver-session.d.ts +0 -9
  302. package/dist/runtime/driver-session.d.ts.map +0 -1
  303. package/dist/runtime/driver-session.js +0 -64
  304. package/dist/runtime/driver-session.js.map +0 -1
  305. package/dist/runtime/internal-step-evidence.d.ts +0 -30
  306. package/dist/runtime/internal-step-evidence.d.ts.map +0 -1
  307. package/dist/runtime/internal-step-evidence.js +0 -82
  308. package/dist/runtime/internal-step-evidence.js.map +0 -1
  309. package/dist/runtime/result-adapter.d.ts +0 -9
  310. package/dist/runtime/result-adapter.d.ts.map +0 -1
  311. package/dist/runtime/result-adapter.js +0 -77
  312. package/dist/runtime/result-adapter.js.map +0 -1
  313. package/dist/runtime/runner.d.ts +0 -43
  314. package/dist/runtime/runner.d.ts.map +0 -1
  315. package/dist/runtime/runner.js +0 -72
  316. package/dist/runtime/runner.js.map +0 -1
  317. package/dist/runtime/scenario-control.d.ts +0 -40
  318. package/dist/runtime/scenario-control.d.ts.map +0 -1
  319. package/dist/runtime/scenario-control.js +0 -94
  320. package/dist/runtime/scenario-control.js.map +0 -1
  321. package/dist/runtime/scenario-runner.d.ts +0 -41
  322. package/dist/runtime/scenario-runner.d.ts.map +0 -1
  323. package/dist/runtime/scenario-runner.js +0 -274
  324. package/dist/runtime/scenario-runner.js.map +0 -1
  325. package/dist/runtime/scenario-state.d.ts +0 -55
  326. package/dist/runtime/scenario-state.d.ts.map +0 -1
  327. package/dist/runtime/scenario-state.js +0 -128
  328. package/dist/runtime/scenario-state.js.map +0 -1
  329. package/dist/runtime/step-execution.d.ts +0 -27
  330. package/dist/runtime/step-execution.d.ts.map +0 -1
  331. package/dist/runtime/step-execution.js +0 -143
  332. package/dist/runtime/step-execution.js.map +0 -1
  333. package/dist/runtime/text.d.ts +0 -10
  334. package/dist/runtime/text.d.ts.map +0 -1
  335. package/dist/runtime/text.js +0 -25
  336. package/dist/runtime/text.js.map +0 -1
  337. package/dist/runtime/types.d.ts +0 -53
  338. package/dist/runtime/types.d.ts.map +0 -1
  339. package/dist/runtime/types.js +0 -2
  340. package/dist/runtime/types.js.map +0 -1
  341. package/dist/runtime/usage-tracker.d.ts +0 -37
  342. package/dist/runtime/usage-tracker.d.ts.map +0 -1
  343. package/dist/runtime/usage-tracker.js +0 -110
  344. package/dist/runtime/usage-tracker.js.map +0 -1
  345. package/dist/tools/define-agent-tool.d.ts +0 -20
  346. package/dist/tools/define-agent-tool.d.ts.map +0 -1
  347. package/dist/tools/define-agent-tool.js +0 -30
  348. package/dist/tools/define-agent-tool.js.map +0 -1
  349. package/dist/tools/dispatcher.d.ts +0 -19
  350. package/dist/tools/dispatcher.d.ts.map +0 -1
  351. package/dist/tools/dispatcher.js +0 -91
  352. package/dist/tools/dispatcher.js.map +0 -1
  353. package/dist/tools/loop-detector.d.ts +0 -27
  354. package/dist/tools/loop-detector.d.ts.map +0 -1
  355. package/dist/tools/loop-detector.js +0 -76
  356. package/dist/tools/loop-detector.js.map +0 -1
  357. package/dist/tools/registry.d.ts +0 -19
  358. package/dist/tools/registry.d.ts.map +0 -1
  359. package/dist/tools/registry.js +0 -54
  360. package/dist/tools/registry.js.map +0 -1
  361. package/dist/tools/step/result-tool.d.ts +0 -7
  362. package/dist/tools/step/result-tool.d.ts.map +0 -1
  363. package/dist/tools/step/result-tool.js +0 -34
  364. package/dist/tools/step/result-tool.js.map +0 -1
  365. package/dist/tools/tool-contract.d.ts +0 -3
  366. package/dist/tools/tool-contract.d.ts.map +0 -1
  367. package/dist/tools/tool-contract.js +0 -2
  368. package/dist/tools/tool-contract.js.map +0 -1
  369. package/dist/tools/types.d.ts +0 -210
  370. package/dist/tools/types.d.ts.map +0 -1
  371. package/dist/tools/types.js +0 -4
  372. package/dist/tools/types.js.map +0 -1
  373. package/docs/CLI.md +0 -59
  374. package/docs/CONFIGURATION.md +0 -105
  375. package/docs/DRIVERS.md +0 -79
  376. package/docs/EVIDENCE.md +0 -64
  377. package/schemas/checkmate-config.v1.json +0 -176
  378. package/schemas/describe-result.v1.json +0 -414
  379. package/schemas/driver-descriptor.v1.json +0 -66
  380. package/schemas/run-request.v1.json +0 -67
  381. package/schemas/run-result.v1.json +0 -333
  382. 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