@e2edev/e2e 0.2.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 (399) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +104 -0
  3. package/dist/agent/act-validation.d.ts +27 -0
  4. package/dist/agent/act-validation.d.ts.map +1 -0
  5. package/dist/agent/act-validation.js +121 -0
  6. package/dist/agent/act-validation.js.map +1 -0
  7. package/dist/agent/act.d.ts +27 -0
  8. package/dist/agent/act.d.ts.map +1 -0
  9. package/dist/agent/act.js +775 -0
  10. package/dist/agent/act.js.map +1 -0
  11. package/dist/agent/actions.d.ts +66 -0
  12. package/dist/agent/actions.d.ts.map +1 -0
  13. package/dist/agent/actions.js +82 -0
  14. package/dist/agent/actions.js.map +1 -0
  15. package/dist/agent/ai-sdk.d.ts +16 -0
  16. package/dist/agent/ai-sdk.d.ts.map +1 -0
  17. package/dist/agent/ai-sdk.js +59 -0
  18. package/dist/agent/ai-sdk.js.map +1 -0
  19. package/dist/agent/call-options.d.ts +10 -0
  20. package/dist/agent/call-options.d.ts.map +1 -0
  21. package/dist/agent/call-options.js +28 -0
  22. package/dist/agent/call-options.js.map +1 -0
  23. package/dist/agent/default-agent.d.ts +22 -0
  24. package/dist/agent/default-agent.d.ts.map +1 -0
  25. package/dist/agent/default-agent.js +354 -0
  26. package/dist/agent/default-agent.js.map +1 -0
  27. package/dist/agent/error.d.ts +53 -0
  28. package/dist/agent/error.d.ts.map +1 -0
  29. package/dist/agent/error.js +94 -0
  30. package/dist/agent/error.js.map +1 -0
  31. package/dist/agent/executor.d.ts +238 -0
  32. package/dist/agent/executor.d.ts.map +1 -0
  33. package/dist/agent/executor.js +56 -0
  34. package/dist/agent/executor.js.map +1 -0
  35. package/dist/agent/index.d.ts +15 -0
  36. package/dist/agent/index.d.ts.map +1 -0
  37. package/dist/agent/index.js +304 -0
  38. package/dist/agent/index.js.map +1 -0
  39. package/dist/agent/invocation.d.ts +194 -0
  40. package/dist/agent/invocation.d.ts.map +1 -0
  41. package/dist/agent/invocation.js +389 -0
  42. package/dist/agent/invocation.js.map +1 -0
  43. package/dist/agent/ledger.d.ts +24 -0
  44. package/dist/agent/ledger.d.ts.map +1 -0
  45. package/dist/agent/ledger.js +48 -0
  46. package/dist/agent/ledger.js.map +1 -0
  47. package/dist/agent/loop-guards.d.ts +35 -0
  48. package/dist/agent/loop-guards.d.ts.map +1 -0
  49. package/dist/agent/loop-guards.js +110 -0
  50. package/dist/agent/loop-guards.js.map +1 -0
  51. package/dist/agent/model/adapter.d.ts +97 -0
  52. package/dist/agent/model/adapter.d.ts.map +1 -0
  53. package/dist/agent/model/adapter.js +40 -0
  54. package/dist/agent/model/adapter.js.map +1 -0
  55. package/dist/agent/model/router.d.ts +36 -0
  56. package/dist/agent/model/router.d.ts.map +1 -0
  57. package/dist/agent/model/router.js +45 -0
  58. package/dist/agent/model/router.js.map +1 -0
  59. package/dist/agent/model/schema.d.ts +16 -0
  60. package/dist/agent/model/schema.d.ts.map +1 -0
  61. package/dist/agent/model/schema.js +37 -0
  62. package/dist/agent/model/schema.js.map +1 -0
  63. package/dist/agent/model/sdk.d.ts +28 -0
  64. package/dist/agent/model/sdk.d.ts.map +1 -0
  65. package/dist/agent/model/sdk.js +258 -0
  66. package/dist/agent/model/sdk.js.map +1 -0
  67. package/dist/agent/observation.d.ts +70 -0
  68. package/dist/agent/observation.d.ts.map +1 -0
  69. package/dist/agent/observation.js +174 -0
  70. package/dist/agent/observation.js.map +1 -0
  71. package/dist/agent/phases.d.ts +71 -0
  72. package/dist/agent/phases.d.ts.map +1 -0
  73. package/dist/agent/phases.js +124 -0
  74. package/dist/agent/phases.js.map +1 -0
  75. package/dist/agent/prompts.d.ts +40 -0
  76. package/dist/agent/prompts.d.ts.map +1 -0
  77. package/dist/agent/prompts.js +104 -0
  78. package/dist/agent/prompts.js.map +1 -0
  79. package/dist/agent/protocol.d.ts +31 -0
  80. package/dist/agent/protocol.d.ts.map +1 -0
  81. package/dist/agent/protocol.js +67 -0
  82. package/dist/agent/protocol.js.map +1 -0
  83. package/dist/agent/public.d.ts +12 -0
  84. package/dist/agent/public.d.ts.map +1 -0
  85. package/dist/agent/public.js +12 -0
  86. package/dist/agent/public.js.map +1 -0
  87. package/dist/agent/replay.d.ts +61 -0
  88. package/dist/agent/replay.d.ts.map +1 -0
  89. package/dist/agent/replay.js +185 -0
  90. package/dist/agent/replay.js.map +1 -0
  91. package/dist/agent/secrets.d.ts +22 -0
  92. package/dist/agent/secrets.d.ts.map +1 -0
  93. package/dist/agent/secrets.js +63 -0
  94. package/dist/agent/secrets.js.map +1 -0
  95. package/dist/agent/step-cache.d.ts +156 -0
  96. package/dist/agent/step-cache.d.ts.map +1 -0
  97. package/dist/agent/step-cache.js +301 -0
  98. package/dist/agent/step-cache.js.map +1 -0
  99. package/dist/agent/tool-loop.d.ts +51 -0
  100. package/dist/agent/tool-loop.d.ts.map +1 -0
  101. package/dist/agent/tool-loop.js +331 -0
  102. package/dist/agent/tool-loop.js.map +1 -0
  103. package/dist/agent/tool.d.ts +39 -0
  104. package/dist/agent/tool.d.ts.map +1 -0
  105. package/dist/agent/tool.js +52 -0
  106. package/dist/agent/tool.js.map +1 -0
  107. package/dist/backend/contract.d.ts +186 -0
  108. package/dist/backend/contract.d.ts.map +1 -0
  109. package/dist/backend/contract.js +65 -0
  110. package/dist/backend/contract.js.map +1 -0
  111. package/dist/backend/index.d.ts +316 -0
  112. package/dist/backend/index.d.ts.map +1 -0
  113. package/dist/backend/index.js +219 -0
  114. package/dist/backend/index.js.map +1 -0
  115. package/dist/backend/session.d.ts +23 -0
  116. package/dist/backend/session.d.ts.map +1 -0
  117. package/dist/backend/session.js +213 -0
  118. package/dist/backend/session.js.map +1 -0
  119. package/dist/backend/surface.d.ts +83 -0
  120. package/dist/backend/surface.d.ts.map +1 -0
  121. package/dist/backend/surface.js +11 -0
  122. package/dist/backend/surface.js.map +1 -0
  123. package/dist/cache/anchors.d.ts +37 -0
  124. package/dist/cache/anchors.d.ts.map +1 -0
  125. package/dist/cache/anchors.js +89 -0
  126. package/dist/cache/anchors.js.map +1 -0
  127. package/dist/cache/context.d.ts +74 -0
  128. package/dist/cache/context.d.ts.map +1 -0
  129. package/dist/cache/context.js +82 -0
  130. package/dist/cache/context.js.map +1 -0
  131. package/dist/cache/decide.d.ts +42 -0
  132. package/dist/cache/decide.d.ts.map +1 -0
  133. package/dist/cache/decide.js +47 -0
  134. package/dist/cache/decide.js.map +1 -0
  135. package/dist/cache/identity.d.ts +113 -0
  136. package/dist/cache/identity.d.ts.map +1 -0
  137. package/dist/cache/identity.js +109 -0
  138. package/dist/cache/identity.js.map +1 -0
  139. package/dist/cache/recorder.d.ts +76 -0
  140. package/dist/cache/recorder.d.ts.map +1 -0
  141. package/dist/cache/recorder.js +143 -0
  142. package/dist/cache/recorder.js.map +1 -0
  143. package/dist/cache/relocate.d.ts +69 -0
  144. package/dist/cache/relocate.d.ts.map +1 -0
  145. package/dist/cache/relocate.js +125 -0
  146. package/dist/cache/relocate.js.map +1 -0
  147. package/dist/cache/store.d.ts +68 -0
  148. package/dist/cache/store.d.ts.map +1 -0
  149. package/dist/cache/store.js +106 -0
  150. package/dist/cache/store.js.map +1 -0
  151. package/dist/cache/trace.d.ts +146 -0
  152. package/dist/cache/trace.d.ts.map +1 -0
  153. package/dist/cache/trace.js +249 -0
  154. package/dist/cache/trace.js.map +1 -0
  155. package/dist/cli/bin.d.ts +3 -0
  156. package/dist/cli/bin.d.ts.map +1 -0
  157. package/dist/cli/bin.js +4 -0
  158. package/dist/cli/bin.js.map +1 -0
  159. package/dist/cli/index.d.ts +4 -0
  160. package/dist/cli/index.d.ts.map +1 -0
  161. package/dist/cli/index.js +108 -0
  162. package/dist/cli/index.js.map +1 -0
  163. package/dist/cli/init.d.ts +6 -0
  164. package/dist/cli/init.d.ts.map +1 -0
  165. package/dist/cli/init.js +101 -0
  166. package/dist/cli/init.js.map +1 -0
  167. package/dist/collect/collect.d.ts +44 -0
  168. package/dist/collect/collect.d.ts.map +1 -0
  169. package/dist/collect/collect.js +89 -0
  170. package/dist/collect/collect.js.map +1 -0
  171. package/dist/collect/registry.d.ts +47 -0
  172. package/dist/collect/registry.d.ts.map +1 -0
  173. package/dist/collect/registry.js +262 -0
  174. package/dist/collect/registry.js.map +1 -0
  175. package/dist/collect/select.d.ts +54 -0
  176. package/dist/collect/select.d.ts.map +1 -0
  177. package/dist/collect/select.js +230 -0
  178. package/dist/collect/select.js.map +1 -0
  179. package/dist/config/agent.d.ts +91 -0
  180. package/dist/config/agent.d.ts.map +1 -0
  181. package/dist/config/agent.js +232 -0
  182. package/dist/config/agent.js.map +1 -0
  183. package/dist/config/load.d.ts +23 -0
  184. package/dist/config/load.d.ts.map +1 -0
  185. package/dist/config/load.js +75 -0
  186. package/dist/config/load.js.map +1 -0
  187. package/dist/config/resolve.d.ts +94 -0
  188. package/dist/config/resolve.d.ts.map +1 -0
  189. package/dist/config/resolve.js +500 -0
  190. package/dist/config/resolve.js.map +1 -0
  191. package/dist/config/validate.d.ts +6 -0
  192. package/dist/config/validate.d.ts.map +1 -0
  193. package/dist/config/validate.js +21 -0
  194. package/dist/config/validate.js.map +1 -0
  195. package/dist/credentials.d.ts +7 -0
  196. package/dist/credentials.d.ts.map +1 -0
  197. package/dist/credentials.js +42 -0
  198. package/dist/credentials.js.map +1 -0
  199. package/dist/expect/async.d.ts +5 -0
  200. package/dist/expect/async.d.ts.map +1 -0
  201. package/dist/expect/async.js +186 -0
  202. package/dist/expect/async.js.map +1 -0
  203. package/dist/expect/index.d.ts +7 -0
  204. package/dist/expect/index.d.ts.map +1 -0
  205. package/dist/expect/index.js +23 -0
  206. package/dist/expect/index.js.map +1 -0
  207. package/dist/expect/values.d.ts +4 -0
  208. package/dist/expect/values.d.ts.map +1 -0
  209. package/dist/expect/values.js +108 -0
  210. package/dist/expect/values.js.map +1 -0
  211. package/dist/index.d.ts +13 -0
  212. package/dist/index.d.ts.map +1 -0
  213. package/dist/index.js +15 -0
  214. package/dist/index.js.map +1 -0
  215. package/dist/internal/ai-trace.d.ts +151 -0
  216. package/dist/internal/ai-trace.d.ts.map +1 -0
  217. package/dist/internal/ai-trace.js +360 -0
  218. package/dist/internal/ai-trace.js.map +1 -0
  219. package/dist/internal/brands.d.ts +9 -0
  220. package/dist/internal/brands.d.ts.map +1 -0
  221. package/dist/internal/brands.js +9 -0
  222. package/dist/internal/brands.js.map +1 -0
  223. package/dist/internal/debug.d.ts +43 -0
  224. package/dist/internal/debug.d.ts.map +1 -0
  225. package/dist/internal/debug.js +102 -0
  226. package/dist/internal/debug.js.map +1 -0
  227. package/dist/internal/errors.d.ts +98 -0
  228. package/dist/internal/errors.d.ts.map +1 -0
  229. package/dist/internal/errors.js +212 -0
  230. package/dist/internal/errors.js.map +1 -0
  231. package/dist/internal/globs.d.ts +29 -0
  232. package/dist/internal/globs.d.ts.map +1 -0
  233. package/dist/internal/globs.js +126 -0
  234. package/dist/internal/globs.js.map +1 -0
  235. package/dist/internal/ids.d.ts +32 -0
  236. package/dist/internal/ids.d.ts.map +1 -0
  237. package/dist/internal/ids.js +124 -0
  238. package/dist/internal/ids.js.map +1 -0
  239. package/dist/internal/json-value.d.ts +15 -0
  240. package/dist/internal/json-value.d.ts.map +1 -0
  241. package/dist/internal/json-value.js +61 -0
  242. package/dist/internal/json-value.js.map +1 -0
  243. package/dist/internal/package-version.d.ts +6 -0
  244. package/dist/internal/package-version.d.ts.map +1 -0
  245. package/dist/internal/package-version.js +14 -0
  246. package/dist/internal/package-version.js.map +1 -0
  247. package/dist/internal/realm-slot.d.ts +13 -0
  248. package/dist/internal/realm-slot.d.ts.map +1 -0
  249. package/dist/internal/realm-slot.js +23 -0
  250. package/dist/internal/realm-slot.js.map +1 -0
  251. package/dist/internal/redact.d.ts +33 -0
  252. package/dist/internal/redact.d.ts.map +1 -0
  253. package/dist/internal/redact.js +56 -0
  254. package/dist/internal/redact.js.map +1 -0
  255. package/dist/internal/regexp.d.ts +10 -0
  256. package/dist/internal/regexp.d.ts.map +1 -0
  257. package/dist/internal/regexp.js +27 -0
  258. package/dist/internal/regexp.js.map +1 -0
  259. package/dist/internal/text.d.ts +39 -0
  260. package/dist/internal/text.d.ts.map +1 -0
  261. package/dist/internal/text.js +66 -0
  262. package/dist/internal/text.js.map +1 -0
  263. package/dist/internal/time.d.ts +37 -0
  264. package/dist/internal/time.d.ts.map +1 -0
  265. package/dist/internal/time.js +91 -0
  266. package/dist/internal/time.js.map +1 -0
  267. package/dist/internal/trace.d.ts +18 -0
  268. package/dist/internal/trace.d.ts.map +1 -0
  269. package/dist/internal/trace.js +46 -0
  270. package/dist/internal/trace.js.map +1 -0
  271. package/dist/internal/urls.d.ts +31 -0
  272. package/dist/internal/urls.d.ts.map +1 -0
  273. package/dist/internal/urls.js +95 -0
  274. package/dist/internal/urls.js.map +1 -0
  275. package/dist/locator/engine.d.ts +65 -0
  276. package/dist/locator/engine.d.ts.map +1 -0
  277. package/dist/locator/engine.js +164 -0
  278. package/dist/locator/engine.js.map +1 -0
  279. package/dist/locator/expression.d.ts +19 -0
  280. package/dist/locator/expression.d.ts.map +1 -0
  281. package/dist/locator/expression.js +85 -0
  282. package/dist/locator/expression.js.map +1 -0
  283. package/dist/locator/screen.d.ts +36 -0
  284. package/dist/locator/screen.d.ts.map +1 -0
  285. package/dist/locator/screen.js +281 -0
  286. package/dist/locator/screen.js.map +1 -0
  287. package/dist/report/build.d.ts +214 -0
  288. package/dist/report/build.d.ts.map +1 -0
  289. package/dist/report/build.js +346 -0
  290. package/dist/report/build.js.map +1 -0
  291. package/dist/report/code-frame.d.ts +20 -0
  292. package/dist/report/code-frame.d.ts.map +1 -0
  293. package/dist/report/code-frame.js +73 -0
  294. package/dist/report/code-frame.js.map +1 -0
  295. package/dist/report/debug-steps.d.ts +14 -0
  296. package/dist/report/debug-steps.d.ts.map +1 -0
  297. package/dist/report/debug-steps.js +85 -0
  298. package/dist/report/debug-steps.js.map +1 -0
  299. package/dist/report/list.d.ts +80 -0
  300. package/dist/report/list.d.ts.map +1 -0
  301. package/dist/report/list.js +372 -0
  302. package/dist/report/list.js.map +1 -0
  303. package/dist/report/live-status.d.ts +51 -0
  304. package/dist/report/live-status.d.ts.map +1 -0
  305. package/dist/report/live-status.js +162 -0
  306. package/dist/report/live-status.js.map +1 -0
  307. package/dist/report/write.d.ts +4 -0
  308. package/dist/report/write.d.ts.map +1 -0
  309. package/dist/report/write.js +13 -0
  310. package/dist/report/write.js.map +1 -0
  311. package/dist/run/app-process.d.ts +18 -0
  312. package/dist/run/app-process.d.ts.map +1 -0
  313. package/dist/run/app-process.js +112 -0
  314. package/dist/run/app-process.js.map +1 -0
  315. package/dist/run/artifacts.d.ts +51 -0
  316. package/dist/run/artifacts.d.ts.map +1 -0
  317. package/dist/run/artifacts.js +114 -0
  318. package/dist/run/artifacts.js.map +1 -0
  319. package/dist/run/events.d.ts +100 -0
  320. package/dist/run/events.d.ts.map +1 -0
  321. package/dist/run/events.js +59 -0
  322. package/dist/run/events.js.map +1 -0
  323. package/dist/run/execute.d.ts +119 -0
  324. package/dist/run/execute.d.ts.map +1 -0
  325. package/dist/run/execute.js +555 -0
  326. package/dist/run/execute.js.map +1 -0
  327. package/dist/run/fixtures.d.ts +40 -0
  328. package/dist/run/fixtures.d.ts.map +1 -0
  329. package/dist/run/fixtures.js +408 -0
  330. package/dist/run/fixtures.js.map +1 -0
  331. package/dist/run/in-process.d.ts +24 -0
  332. package/dist/run/in-process.d.ts.map +1 -0
  333. package/dist/run/in-process.js +120 -0
  334. package/dist/run/in-process.js.map +1 -0
  335. package/dist/run/public.d.ts +19 -0
  336. package/dist/run/public.d.ts.map +1 -0
  337. package/dist/run/public.js +11 -0
  338. package/dist/run/public.js.map +1 -0
  339. package/dist/run/realm.d.ts +52 -0
  340. package/dist/run/realm.d.ts.map +1 -0
  341. package/dist/run/realm.js +101 -0
  342. package/dist/run/realm.js.map +1 -0
  343. package/dist/run/records.d.ts +87 -0
  344. package/dist/run/records.d.ts.map +1 -0
  345. package/dist/run/records.js +3 -0
  346. package/dist/run/records.js.map +1 -0
  347. package/dist/run/retry.d.ts +18 -0
  348. package/dist/run/retry.d.ts.map +1 -0
  349. package/dist/run/retry.js +33 -0
  350. package/dist/run/retry.js.map +1 -0
  351. package/dist/run/runner.d.ts +49 -0
  352. package/dist/run/runner.d.ts.map +1 -0
  353. package/dist/run/runner.js +375 -0
  354. package/dist/run/runner.js.map +1 -0
  355. package/dist/run/scheduler.d.ts +45 -0
  356. package/dist/run/scheduler.d.ts.map +1 -0
  357. package/dist/run/scheduler.js +512 -0
  358. package/dist/run/scheduler.js.map +1 -0
  359. package/dist/run/serial.d.ts +52 -0
  360. package/dist/run/serial.d.ts.map +1 -0
  361. package/dist/run/serial.js +247 -0
  362. package/dist/run/serial.js.map +1 -0
  363. package/dist/run/sessions.d.ts +54 -0
  364. package/dist/run/sessions.d.ts.map +1 -0
  365. package/dist/run/sessions.js +221 -0
  366. package/dist/run/sessions.js.map +1 -0
  367. package/dist/run/steps.d.ts +196 -0
  368. package/dist/run/steps.d.ts.map +1 -0
  369. package/dist/run/steps.js +151 -0
  370. package/dist/run/steps.js.map +1 -0
  371. package/dist/run/unit-runner.d.ts +30 -0
  372. package/dist/run/unit-runner.d.ts.map +1 -0
  373. package/dist/run/unit-runner.js +11 -0
  374. package/dist/run/unit-runner.js.map +1 -0
  375. package/dist/run/units.d.ts +50 -0
  376. package/dist/run/units.d.ts.map +1 -0
  377. package/dist/run/units.js +103 -0
  378. package/dist/run/units.js.map +1 -0
  379. package/dist/run/worker/entry.d.ts +8 -0
  380. package/dist/run/worker/entry.d.ts.map +1 -0
  381. package/dist/run/worker/entry.js +137 -0
  382. package/dist/run/worker/entry.js.map +1 -0
  383. package/dist/run/worker/handle.d.ts +10 -0
  384. package/dist/run/worker/handle.d.ts.map +1 -0
  385. package/dist/run/worker/handle.js +74 -0
  386. package/dist/run/worker/handle.js.map +1 -0
  387. package/dist/run/worker/protocol.d.ts +129 -0
  388. package/dist/run/worker/protocol.d.ts.map +1 -0
  389. package/dist/run/worker/protocol.js +18 -0
  390. package/dist/run/worker/protocol.js.map +1 -0
  391. package/dist/run/worker/session.d.ts +69 -0
  392. package/dist/run/worker/session.d.ts.map +1 -0
  393. package/dist/run/worker/session.js +123 -0
  394. package/dist/run/worker/session.js.map +1 -0
  395. package/dist/types.d.ts +630 -0
  396. package/dist/types.d.ts.map +1 -0
  397. package/dist/types.js +6 -0
  398. package/dist/types.js.map +1 -0
  399. package/package.json +91 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/internal/ids.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The one JSON-safety walker. Anything crossing a boundary that demands plain
3
+ * JSON — fixture evaluation arguments and results, `agent.act` params — validates
4
+ * here, so cycle detection, plain-prototype checks, and secret rejection
5
+ * cannot drift between call sites.
6
+ */
7
+ export interface JsonValueRules {
8
+ /** Raised on a Secret value; the default denies with POLICY_DENIED. */
9
+ readonly onSecret?: (label: string) => never;
10
+ /** Maximum object/array nesting depth; unlimited when omitted. */
11
+ readonly maxDepth?: number;
12
+ }
13
+ /** Validates that a value is JSON-safe, throwing a labeled TestError otherwise. */
14
+ export declare function validateJsonValue(value: unknown, label: string, rules?: JsonValueRules): void;
15
+ //# sourceMappingURL=json-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-value.d.ts","sourceRoot":"","sources":["../../src/internal/json-value.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC;IAC7C,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,cAAmB,GAAG,IAAI,CAqDjG"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * The one JSON-safety walker. Anything crossing a boundary that demands plain
3
+ * JSON — fixture evaluation arguments and results, `agent.act` params — validates
4
+ * here, so cycle detection, plain-prototype checks, and secret rejection
5
+ * cannot drift between call sites.
6
+ */
7
+ import { isSecret } from '../locator/screen.js';
8
+ import { ConfigurationError, TestError } from './errors.js';
9
+ /** Validates that a value is JSON-safe, throwing a labeled TestError otherwise. */
10
+ export function validateJsonValue(value, label, rules = {}) {
11
+ if (value === undefined)
12
+ return;
13
+ const onSecret = rules.onSecret ??
14
+ ((at) => {
15
+ throw new ConfigurationError('POLICY_DENIED', `${at} must not contain a Secret`);
16
+ });
17
+ // The ancestor path of the value being visited. Only an object that
18
+ // contains itself is a cycle; the same object reachable twice by different
19
+ // paths is an ordinary, serializable DAG.
20
+ const ancestors = new Set();
21
+ const visit = (item, depth = 0) => {
22
+ if (rules.maxDepth !== undefined && depth > rules.maxDepth) {
23
+ throw new TestError('INVALID_ARGUMENT', `${label} exceeds ${rules.maxDepth} levels of nesting`);
24
+ }
25
+ if (item === null)
26
+ return;
27
+ switch (typeof item) {
28
+ case 'string':
29
+ case 'boolean':
30
+ return;
31
+ case 'number':
32
+ if (!Number.isFinite(item)) {
33
+ throw new TestError('INVALID_ARGUMENT', `${label} contains a non-finite number`);
34
+ }
35
+ return;
36
+ case 'object': {
37
+ if (isSecret(item)) {
38
+ onSecret(label);
39
+ }
40
+ if (ancestors.has(item)) {
41
+ throw new TestError('INVALID_ARGUMENT', `${label} contains a cycle`);
42
+ }
43
+ if (!Array.isArray(item) &&
44
+ Object.getPrototypeOf(item) !== Object.prototype &&
45
+ Object.getPrototypeOf(item) !== null) {
46
+ throw new TestError('INVALID_ARGUMENT', `${label} must be JSON-safe`);
47
+ }
48
+ ancestors.add(item);
49
+ const entries = Array.isArray(item) ? item : Object.values(item);
50
+ for (const entry of entries)
51
+ visit(entry, depth + 1);
52
+ ancestors.delete(item);
53
+ return;
54
+ }
55
+ default:
56
+ throw new TestError('INVALID_ARGUMENT', `${label} must be JSON-safe, found ${typeof item}`);
57
+ }
58
+ };
59
+ visit(value);
60
+ }
61
+ //# sourceMappingURL=json-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-value.js","sourceRoot":"","sources":["../../src/internal/json-value.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS5D,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,KAAa,EAAE,KAAK,GAAmB,EAAE;IACzF,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAChC,MAAM,QAAQ,GACZ,KAAK,CAAC,QAAQ;QACd,CAAC,CAAC,EAAU,EAAS,EAAE;YACrB,MAAM,IAAI,kBAAkB,CAAC,eAAe,EAAE,GAAG,EAAE,4BAA4B,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACL,oEAAoE;IACpE,2EAA2E;IAC3E,0CAA0C;IAC1C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAW,CAAC;IACrC,MAAM,KAAK,GAAG,CAAC,IAAa,EAAE,KAAK,GAAG,CAAC,EAAQ,EAAE;QAC/C,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3D,MAAM,IAAI,SAAS,CACjB,kBAAkB,EAClB,GAAG,KAAK,YAAY,KAAK,CAAC,QAAQ,oBAAoB,CACvD,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO;QAC1B,QAAQ,OAAO,IAAI,EAAE,CAAC;YACpB,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACZ,OAAO;YACT,KAAK,QAAQ;gBACX,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,GAAG,KAAK,+BAA+B,CAAC,CAAC;gBACnF,CAAC;gBACD,OAAO;YACT,KAAK,QAAQ,EAAE,CAAC;gBACd,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnB,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC;gBACD,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxB,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,GAAG,KAAK,mBAAmB,CAAC,CAAC;gBACvE,CAAC;gBACD,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBACpB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,SAAS;oBAChD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,IAAI,EACpC,CAAC;oBACD,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,GAAG,KAAK,oBAAoB,CAAC,CAAC;gBACxE,CAAC;gBACD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACjE,KAAK,MAAM,KAAK,IAAI,OAAO;oBAAE,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBACrD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO;YACT,CAAC;YACD;gBACE,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,GAAG,KAAK,6BAA6B,OAAO,IAAI,EAAE,CAAC,CAAC;QAChG,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,KAAK,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Reads a package.json version through require resolution relative to the
3
+ * caller's module URL, falling back when the package cannot be resolved.
4
+ */
5
+ export declare function packageVersion(fromUrl: string, specifier: string, fallback: string): string;
6
+ //# sourceMappingURL=package-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-version.d.ts","sourceRoot":"","sources":["../../src/internal/package-version.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM3F"}
@@ -0,0 +1,14 @@
1
+ import { createRequire } from 'node:module';
2
+ /**
3
+ * Reads a package.json version through require resolution relative to the
4
+ * caller's module URL, falling back when the package cannot be resolved.
5
+ */
6
+ export function packageVersion(fromUrl, specifier, fallback) {
7
+ try {
8
+ return createRequire(fromUrl)(specifier).version;
9
+ }
10
+ catch {
11
+ return fallback;
12
+ }
13
+ }
14
+ //# sourceMappingURL=package-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-version.js","sourceRoot":"","sources":["../../src/internal/package-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,SAAiB,EAAE,QAAgB;IACjF,IAAI,CAAC;QACH,OAAQ,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,CAAyB,CAAC,OAAO,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Typed accessor for a `Symbol.for` slot on a host object. Test modules load
3
+ * in isolated module realms (tsx), so runner-owned instances are shared
4
+ * through registry symbols instead of module state. All unsafe reads live
5
+ * here; call sites stay fully typed.
6
+ */
7
+ export interface RealmSlot<T> {
8
+ set(host: object, value: T): void;
9
+ get(host: unknown): T | undefined;
10
+ delete(host: object): void;
11
+ }
12
+ export declare function realmSlot<T>(key: string | symbol): RealmSlot<T>;
13
+ //# sourceMappingURL=realm-slot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realm-slot.d.ts","sourceRoot":"","sources":["../../src/internal/realm-slot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAClC,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC;IAClC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAqB/D"}
@@ -0,0 +1,23 @@
1
+ export function realmSlot(key) {
2
+ const symbol = typeof key === 'symbol' ? key : Symbol.for(key);
3
+ return {
4
+ set(host, value) {
5
+ Object.defineProperty(host, symbol, {
6
+ value,
7
+ enumerable: false,
8
+ configurable: true,
9
+ writable: false,
10
+ });
11
+ },
12
+ get(host) {
13
+ if ((typeof host !== 'object' || host === null) && typeof host !== 'function') {
14
+ return undefined;
15
+ }
16
+ return host[symbol];
17
+ },
18
+ delete(host) {
19
+ delete host[symbol];
20
+ },
21
+ };
22
+ }
23
+ //# sourceMappingURL=realm-slot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realm-slot.js","sourceRoot":"","sources":["../../src/internal/realm-slot.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,SAAS,CAAI,GAAoB;IAC/C,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO;QACL,GAAG,CAAC,IAAI,EAAE,KAAK;YACb,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE;gBAClC,KAAK;gBACL,UAAU,EAAE,KAAK;gBACjB,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC;QACD,GAAG,CAAC,IAAI;YACN,IAAI,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC9E,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAQ,IAAqC,CAAC,MAAM,CAAkB,CAAC;QACzE,CAAC;QACD,MAAM,CAAC,IAAI;YACT,OAAQ,IAAqC,CAAC,MAAM,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ /** Runner-side secret redaction (spec 14-security.md). */
2
+ /**
3
+ * Builds a redactor replacing every exact registered secret value with its
4
+ * stable secret name.
5
+ *
6
+ * Longer values are substituted first, so a secret that contains another secret
7
+ * is not left half-rewritten.
8
+ */
9
+ export declare function createRedactor(secrets: Iterable<readonly [string, string]>): (text: string) => string;
10
+ /**
11
+ * The attempt's registered secret values and their redactor, in one owner.
12
+ *
13
+ * Static credential passwords are known up front; a provider-backed value
14
+ * exists only once the resolver produces it at fill time. Registration
15
+ * invalidates the memoized redactor, so every consumer holding `redact` sees
16
+ * a value the moment it exists — liveness is structural, not a comment on a
17
+ * shared map.
18
+ */
19
+ export declare class SecretLedger {
20
+ /**
21
+ * Every value ever registered, not just the newest per name: a rotating
22
+ * secret (a fresh TOTP per fill) leaves its earlier codes on screen and in
23
+ * captures, and an earlier value that stopped redacting would leak there.
24
+ */
25
+ private readonly values;
26
+ private redactor;
27
+ constructor(initial?: Iterable<readonly [string, string]>);
28
+ /** Registers one resolved value; earlier values for the name keep redacting. */
29
+ register(name: string, value: string): void;
30
+ /** Bound so it can be handed out as a plain function. */
31
+ readonly redact: (text: string) => string;
32
+ }
33
+ //# sourceMappingURL=redact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/internal/redact.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC3C,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAU1B;AAED;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACvB;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAyC;IAEzD,YAAY,OAAO,GAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,EAE5D;IAED,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI1C;IAED,yDAAyD;IACzD,QAAQ,CAAC,MAAM,SAAU,MAAM,KAAG,MAAM,CAGtC;CACH"}
@@ -0,0 +1,56 @@
1
+ /** Runner-side secret redaction (spec 14-security.md). */
2
+ /**
3
+ * Builds a redactor replacing every exact registered secret value with its
4
+ * stable secret name.
5
+ *
6
+ * Longer values are substituted first, so a secret that contains another secret
7
+ * is not left half-rewritten.
8
+ */
9
+ export function createRedactor(secrets) {
10
+ const entries = [...secrets]
11
+ .filter(([, value]) => value.length > 0)
12
+ .toSorted((a, b) => b[1].length - a[1].length);
13
+ if (entries.length === 0)
14
+ return (text) => text;
15
+ return (text) => {
16
+ let out = text;
17
+ for (const [name, value] of entries)
18
+ out = out.split(value).join(`<secret:${name}>`);
19
+ return out;
20
+ };
21
+ }
22
+ /**
23
+ * The attempt's registered secret values and their redactor, in one owner.
24
+ *
25
+ * Static credential passwords are known up front; a provider-backed value
26
+ * exists only once the resolver produces it at fill time. Registration
27
+ * invalidates the memoized redactor, so every consumer holding `redact` sees
28
+ * a value the moment it exists — liveness is structural, not a comment on a
29
+ * shared map.
30
+ */
31
+ export class SecretLedger {
32
+ /**
33
+ * Every value ever registered, not just the newest per name: a rotating
34
+ * secret (a fresh TOTP per fill) leaves its earlier codes on screen and in
35
+ * captures, and an earlier value that stopped redacting would leak there.
36
+ */
37
+ values = [];
38
+ redactor;
39
+ constructor(initial = []) {
40
+ for (const [name, value] of initial)
41
+ this.register(name, value);
42
+ }
43
+ /** Registers one resolved value; earlier values for the name keep redacting. */
44
+ register(name, value) {
45
+ if (this.values.some(([n, v]) => n === name && v === value))
46
+ return;
47
+ this.values.push([name, value]);
48
+ this.redactor = undefined;
49
+ }
50
+ /** Bound so it can be handed out as a plain function. */
51
+ redact = (text) => {
52
+ this.redactor ??= createRedactor(this.values);
53
+ return this.redactor(text);
54
+ };
55
+ }
56
+ //# sourceMappingURL=redact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/internal/redact.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,OAA4C;IAE5C,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;SACvC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IAChD,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO;YAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;QACrF,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAY;IACvB;;;;OAIG;IACc,MAAM,GAAuB,EAAE,CAAC;IACzC,QAAQ,CAAyC;IAEzD,YAAY,OAAO,GAAwC,EAAE;QAC3D,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;IAED,gFAAgF;IAChF,QAAQ,CAAC,IAAY,EAAE,KAAa;QAClC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;YAAE,OAAO;QACpE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,yDAAyD;IAChD,MAAM,GAAG,CAAC,IAAY,EAAU,EAAE;QACzC,IAAI,CAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC;CACH"}
@@ -0,0 +1,10 @@
1
+ /** Shared regular-expression plumbing for the glob, text, and URL matchers. */
2
+ /** Escapes one character for literal use inside a regexp source. */
3
+ export declare function escapeRegexpChar(ch: string): string;
4
+ /**
5
+ * Tests input against a wire regexp (source + flags). Compiled patterns are
6
+ * cached by source and flags; `lastIndex` is reset before every test, so
7
+ * sticky/global state can never leak between matches.
8
+ */
9
+ export declare function testPattern(source: string, flags: string, input: string): boolean;
10
+ //# sourceMappingURL=regexp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regexp.d.ts","sourceRoot":"","sources":["../../src/internal/regexp.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;AAMD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAYjF"}
@@ -0,0 +1,27 @@
1
+ /** Shared regular-expression plumbing for the glob, text, and URL matchers. */
2
+ /** Escapes one character for literal use inside a regexp source. */
3
+ export function escapeRegexpChar(ch) {
4
+ return /[a-zA-Z0-9_-]/.test(ch) ? ch : `\\${ch}`;
5
+ }
6
+ /** Compiled wire patterns, bounded; assertion polls test the same pattern many times a second. */
7
+ const MAX_CACHED_PATTERNS = 256;
8
+ const compiled = new Map();
9
+ /**
10
+ * Tests input against a wire regexp (source + flags). Compiled patterns are
11
+ * cached by source and flags; `lastIndex` is reset before every test, so
12
+ * sticky/global state can never leak between matches.
13
+ */
14
+ export function testPattern(source, flags, input) {
15
+ const key = `${flags}\n${source}`;
16
+ let pattern = compiled.get(key);
17
+ if (pattern === undefined) {
18
+ pattern = new RegExp(source, flags);
19
+ if (compiled.size >= MAX_CACHED_PATTERNS) {
20
+ compiled.delete(compiled.keys().next().value);
21
+ }
22
+ compiled.set(key, pattern);
23
+ }
24
+ pattern.lastIndex = 0;
25
+ return pattern.test(input);
26
+ }
27
+ //# sourceMappingURL=regexp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regexp.js","sourceRoot":"","sources":["../../src/internal/regexp.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,oEAAoE;AACpE,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,OAAO,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;AACnD,CAAC;AAED,kGAAkG;AAClG,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,KAAa,EAAE,KAAa;IACtE,MAAM,GAAG,GAAG,GAAG,KAAK,KAAK,MAAM,EAAE,CAAC;IAClC,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,QAAQ,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;YACzC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC,CAAC;QAC1D,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;IACtB,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,39 @@
1
+ /** Text normalization and matching rules (spec 03-assertions.md, 08-platforms.md). */
2
+ import type { TextMatch } from '../types.ts';
3
+ export type TextPattern = {
4
+ readonly kind: 'string';
5
+ readonly value: string;
6
+ readonly exact: boolean;
7
+ } | {
8
+ readonly kind: 'regexp';
9
+ readonly source: string;
10
+ readonly flags: string;
11
+ };
12
+ /**
13
+ * Normalizes text by trimming leading/trailing whitespace and replacing every
14
+ * nonempty run of Unicode whitespace with one ASCII space.
15
+ */
16
+ export declare function normalizeText(text: string): string;
17
+ /**
18
+ * Normalizes text that may carry control characters: sanitized first, then
19
+ * whitespace-collapsed. The one-line form of screen text that reaches models,
20
+ * trace descriptors, and terminals.
21
+ */
22
+ export declare function collapseText(text: string): string;
23
+ /** Converts a public TextMatch plus options into the wire TextPattern form. */
24
+ export declare function toTextPattern(match: TextMatch, options?: {
25
+ exact?: boolean;
26
+ }): TextPattern;
27
+ /** Sorts and de-duplicates regexp flags into canonical d,g,i,m,s,u,v,y order. */
28
+ export declare function normalizeRegexpFlags(flags: string): string;
29
+ /**
30
+ * Matches normalized text against a pattern. String matching is exact by
31
+ * default; `exact: false` is case-insensitive substring matching. Regular
32
+ * expressions use ECMAScript semantics with lastIndex reset before every match.
33
+ */
34
+ export declare function matchesText(actual: string, pattern: TextPattern): boolean;
35
+ /** Substring/regexp containment matching used by toContainText. */
36
+ export declare function containsText(actual: string, pattern: TextPattern): boolean;
37
+ /** Renders a pattern for diagnostics. */
38
+ export declare function describePattern(pattern: TextPattern): string;
39
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/internal/text.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC5E;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAGjF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,WAAW,CAK1F;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAEzE;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAE1E;AAkBD,yCAAyC;AACzC,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAG5D"}
@@ -0,0 +1,66 @@
1
+ /** Text normalization and matching rules (spec 03-assertions.md, 08-platforms.md). */
2
+ import { sanitizeText } from './errors.js';
3
+ import { testPattern } from './regexp.js';
4
+ /**
5
+ * Normalizes text by trimming leading/trailing whitespace and replacing every
6
+ * nonempty run of Unicode whitespace with one ASCII space.
7
+ */
8
+ export function normalizeText(text) {
9
+ return text.replace(/\s+/gu, ' ').trim();
10
+ }
11
+ /**
12
+ * Normalizes text that may carry control characters: sanitized first, then
13
+ * whitespace-collapsed. The one-line form of screen text that reaches models,
14
+ * trace descriptors, and terminals.
15
+ */
16
+ export function collapseText(text) {
17
+ return normalizeText(sanitizeText(text));
18
+ }
19
+ /** Converts a public TextMatch plus options into the wire TextPattern form. */
20
+ export function toTextPattern(match, options) {
21
+ if (typeof match === 'string') {
22
+ return { kind: 'string', value: match, exact: options?.exact ?? true };
23
+ }
24
+ return { kind: 'regexp', source: match.source, flags: normalizeRegexpFlags(match.flags) };
25
+ }
26
+ /** Sorts and de-duplicates regexp flags into canonical d,g,i,m,s,u,v,y order. */
27
+ export function normalizeRegexpFlags(flags) {
28
+ const order = ['d', 'g', 'i', 'm', 's', 'u', 'v', 'y'];
29
+ const present = new Set(flags.split(''));
30
+ return order.filter((flag) => present.has(flag)).join('');
31
+ }
32
+ /**
33
+ * Matches normalized text against a pattern. String matching is exact by
34
+ * default; `exact: false` is case-insensitive substring matching. Regular
35
+ * expressions use ECMAScript semantics with lastIndex reset before every match.
36
+ */
37
+ export function matchesText(actual, pattern) {
38
+ return matchText(actual, pattern, 'equals');
39
+ }
40
+ /** Substring/regexp containment matching used by toContainText. */
41
+ export function containsText(actual, pattern) {
42
+ return matchText(actual, pattern, 'contains');
43
+ }
44
+ /**
45
+ * The one text-matching rule. `mode` applies only to exact string patterns:
46
+ * regexps and case-insensitive substrings read the same way in both matchers.
47
+ */
48
+ function matchText(actual, pattern, mode) {
49
+ const normalizedActual = normalizeText(actual);
50
+ if (pattern.kind === 'regexp')
51
+ return testPattern(pattern.source, pattern.flags, normalizedActual);
52
+ const normalizedExpected = normalizeText(pattern.value);
53
+ if (!pattern.exact) {
54
+ return normalizedActual.toLowerCase().includes(normalizedExpected.toLowerCase());
55
+ }
56
+ return mode === 'equals'
57
+ ? normalizedActual === normalizedExpected
58
+ : normalizedActual.includes(normalizedExpected);
59
+ }
60
+ /** Renders a pattern for diagnostics. */
61
+ export function describePattern(pattern) {
62
+ if (pattern.kind === 'string')
63
+ return JSON.stringify(pattern.value);
64
+ return `/${pattern.source}/${pattern.flags}`;
65
+ }
66
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/internal/text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /** Deadline and cancellation helpers. */
2
+ export declare class Deadline {
3
+ readonly endsAt: number;
4
+ constructor(timeoutMs: number, now?: number);
5
+ /** Remaining budget in ms, never negative. */
6
+ remaining(now?: number): number;
7
+ expired(now?: number): boolean;
8
+ /** Returns a deadline capped by another deadline. */
9
+ static min(a: Deadline, b: Deadline): Deadline;
10
+ }
11
+ /** Sleeps for ms, rejecting early if the signal aborts. */
12
+ export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
13
+ /** Canonical polling cadence for locator and assertion loops. */
14
+ export declare const POLL_INTERVAL_MS = 100;
15
+ /** How long a negated assertion must hold before it passes. */
16
+ export declare const NEGATION_GRACE_MS = 1000;
17
+ export interface PollConditionOptions {
18
+ readonly deadline: Deadline;
19
+ readonly signal: AbortSignal;
20
+ readonly negated: boolean;
21
+ /**
22
+ * Evaluates the positive condition once. Returns undefined when the
23
+ * condition cannot be evaluated yet: the positive poll keeps waiting and
24
+ * the negation grace window resets.
25
+ */
26
+ evaluate(): Promise<boolean | undefined>;
27
+ onTimeout(): Error | Promise<Error>;
28
+ }
29
+ /**
30
+ * Polls a condition until it holds (or, when negated, until its negation has
31
+ * held continuously for the negation grace window), throwing the caller's
32
+ * error at the deadline.
33
+ */
34
+ export declare function pollCondition(options: PollConditionOptions): Promise<void>;
35
+ /** Races a promise against a timeout; on timeout invokes onTimeout to build the error. */
36
+ export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, onTimeout: () => Error): Promise<T>;
37
+ //# sourceMappingURL=time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/internal/time.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAIzC,qBAAa,QAAQ;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,YAAY,SAAS,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,EAEtD;IAED,8CAA8C;IAC9C,SAAS,CAAC,GAAG,GAAE,MAAmB,GAAG,MAAM,CAE1C;IAED,OAAO,CAAC,GAAG,GAAE,MAAmB,GAAG,OAAO,CAEzC;IAED,qDAAqD;IACrD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAE7C;CACF;AAED,2DAA2D;AAC3D,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBrE;AAED,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,IAAI,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACzC,SAAS,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;CACrC;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBhF;AAED,0FAA0F;AAC1F,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,KAAK,GACrB,OAAO,CAAC,CAAC,CAAC,CAYZ"}
@@ -0,0 +1,91 @@
1
+ /** Deadline and cancellation helpers. */
2
+ import { E2EError } from './errors.js';
3
+ export class Deadline {
4
+ endsAt;
5
+ constructor(timeoutMs, now = Date.now()) {
6
+ this.endsAt = now + timeoutMs;
7
+ }
8
+ /** Remaining budget in ms, never negative. */
9
+ remaining(now = Date.now()) {
10
+ return Math.max(0, this.endsAt - now);
11
+ }
12
+ expired(now = Date.now()) {
13
+ return now >= this.endsAt;
14
+ }
15
+ /** Returns a deadline capped by another deadline. */
16
+ static min(a, b) {
17
+ return a.endsAt <= b.endsAt ? a : b;
18
+ }
19
+ }
20
+ /** Sleeps for ms, rejecting early if the signal aborts. */
21
+ export function sleep(ms, signal) {
22
+ return new Promise((resolve, reject) => {
23
+ if (signal?.aborted) {
24
+ reject(new E2EError('infrastructure', 'CANCELLED', 'operation cancelled'));
25
+ return;
26
+ }
27
+ const timer = setTimeout(() => {
28
+ cleanup();
29
+ resolve();
30
+ }, ms);
31
+ const onAbort = () => {
32
+ cleanup();
33
+ reject(new E2EError('infrastructure', 'CANCELLED', 'operation cancelled'));
34
+ };
35
+ const cleanup = () => {
36
+ clearTimeout(timer);
37
+ signal?.removeEventListener('abort', onAbort);
38
+ };
39
+ signal?.addEventListener('abort', onAbort, { once: true });
40
+ });
41
+ }
42
+ /** Canonical polling cadence for locator and assertion loops. */
43
+ export const POLL_INTERVAL_MS = 100;
44
+ /** How long a negated assertion must hold before it passes. */
45
+ export const NEGATION_GRACE_MS = 1000;
46
+ /**
47
+ * Polls a condition until it holds (or, when negated, until its negation has
48
+ * held continuously for the negation grace window), throwing the caller's
49
+ * error at the deadline.
50
+ */
51
+ export async function pollCondition(options) {
52
+ // A budget shorter than the grace window still has to be satisfiable: the
53
+ // negation then only needs to hold for the budget itself.
54
+ const grace = Math.min(NEGATION_GRACE_MS, Math.max(0, options.deadline.remaining()));
55
+ let negatedTrueSince;
56
+ for (;;) {
57
+ const value = await options.evaluate();
58
+ if (!options.negated) {
59
+ if (value === true)
60
+ return;
61
+ }
62
+ else if (value === false) {
63
+ negatedTrueSince ??= Date.now();
64
+ if (Date.now() - negatedTrueSince >= grace)
65
+ return;
66
+ }
67
+ else {
68
+ negatedTrueSince = undefined;
69
+ }
70
+ if (options.deadline.expired())
71
+ throw await options.onTimeout();
72
+ await sleep(POLL_INTERVAL_MS, options.signal);
73
+ }
74
+ }
75
+ /** Races a promise against a timeout; on timeout invokes onTimeout to build the error. */
76
+ export async function withTimeout(promise, timeoutMs, onTimeout) {
77
+ let timer;
78
+ try {
79
+ return await Promise.race([
80
+ promise,
81
+ new Promise((_, reject) => {
82
+ timer = setTimeout(() => reject(onTimeout()), timeoutMs);
83
+ }),
84
+ ]);
85
+ }
86
+ finally {
87
+ if (timer !== undefined)
88
+ clearTimeout(timer);
89
+ }
90
+ }
91
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/internal/time.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Live agent tracing for iterating on agentic tests: `E2E_DEBUG=agent` streams
3
+ * every invocation phase, model selection, and locate-candidate outcome to
4
+ * stderr as it happens, from whichever process runs the attempt. This is a
5
+ * debugging aid, not telemetry: the report stays the canonical record.
6
+ */
7
+ /**
8
+ * Writes one bounded, sanitized trace line when agent tracing is on. Takes a
9
+ * thunk so call sites in polling loops pay nothing while tracing is off.
10
+ */
11
+ export declare function agentTrace(message: () => string): void;
12
+ /**
13
+ * Dumps one full observation as the model will receive it. The text is
14
+ * already redacted and size-bounded by the observation pipeline, so the dump
15
+ * needs no further truncation to stay safe.
16
+ */
17
+ export declare function observationTrace(header: () => string, text: string): void;
18
+ //# sourceMappingURL=trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/internal/trace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6BH;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,MAAM,GAAG,IAAI,CAGtD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAGzE"}