@xoxoai/checkmate 0.4.28 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/README.md +259 -224
  2. package/bin/checkmate.js +1 -1
  3. package/dist/ai/client.d.ts +45 -30
  4. package/dist/ai/client.d.ts.map +1 -1
  5. package/dist/ai/client.js +198 -129
  6. package/dist/ai/client.js.map +1 -1
  7. package/dist/ai/message-handler.d.ts +5 -7
  8. package/dist/ai/message-handler.d.ts.map +1 -1
  9. package/dist/ai/message-handler.js +38 -21
  10. package/dist/ai/message-handler.js.map +1 -1
  11. package/dist/ai/message-history.d.ts +4 -6
  12. package/dist/ai/message-history.d.ts.map +1 -1
  13. package/dist/ai/message-history.js +18 -21
  14. package/dist/ai/message-history.js.map +1 -1
  15. package/dist/ai/rate-limit-policy.d.ts +5 -3
  16. package/dist/ai/rate-limit-policy.d.ts.map +1 -1
  17. package/dist/ai/rate-limit-policy.js +24 -7
  18. package/dist/ai/rate-limit-policy.js.map +1 -1
  19. package/dist/ai/tool-response-handler.d.ts +11 -16
  20. package/dist/ai/tool-response-handler.d.ts.map +1 -1
  21. package/dist/ai/tool-response-handler.js +59 -28
  22. package/dist/ai/tool-response-handler.js.map +1 -1
  23. package/dist/ai/turn-processor.d.ts +34 -0
  24. package/dist/ai/turn-processor.d.ts.map +1 -0
  25. package/dist/ai/turn-processor.js +107 -0
  26. package/dist/ai/turn-processor.js.map +1 -0
  27. package/dist/api/allocate-run-identity.d.ts +8 -0
  28. package/dist/api/allocate-run-identity.d.ts.map +1 -0
  29. package/dist/api/allocate-run-identity.js +10 -0
  30. package/dist/api/allocate-run-identity.js.map +1 -0
  31. package/dist/api/execute-prepared-run.d.ts +22 -0
  32. package/dist/api/execute-prepared-run.d.ts.map +1 -0
  33. package/dist/api/execute-prepared-run.js +160 -0
  34. package/dist/api/execute-prepared-run.js.map +1 -0
  35. package/dist/api/index.d.ts +25 -0
  36. package/dist/api/index.d.ts.map +1 -0
  37. package/dist/api/index.js +69 -0
  38. package/dist/api/index.js.map +1 -0
  39. package/dist/api/prepare-run.d.ts +44 -0
  40. package/dist/api/prepare-run.d.ts.map +1 -0
  41. package/dist/api/prepare-run.js +261 -0
  42. package/dist/api/prepare-run.js.map +1 -0
  43. package/dist/cli/diagnostic-relay.d.ts +6 -0
  44. package/dist/cli/diagnostic-relay.d.ts.map +1 -0
  45. package/dist/cli/diagnostic-relay.js +6 -0
  46. package/dist/cli/diagnostic-relay.js.map +1 -0
  47. package/dist/cli/main.d.ts +21 -0
  48. package/dist/cli/main.d.ts.map +1 -0
  49. package/dist/cli/main.js +166 -0
  50. package/dist/cli/main.js.map +1 -0
  51. package/dist/cli/protocol.d.ts +57 -0
  52. package/dist/cli/protocol.d.ts.map +1 -0
  53. package/dist/cli/protocol.js +116 -0
  54. package/dist/cli/protocol.js.map +1 -0
  55. package/dist/cli/reconcile-result.d.ts +13 -0
  56. package/dist/cli/reconcile-result.d.ts.map +1 -0
  57. package/dist/cli/reconcile-result.js +300 -0
  58. package/dist/cli/reconcile-result.js.map +1 -0
  59. package/dist/cli/run-parent.d.ts +37 -0
  60. package/dist/cli/run-parent.d.ts.map +1 -0
  61. package/dist/cli/run-parent.js +491 -0
  62. package/dist/cli/run-parent.js.map +1 -0
  63. package/dist/cli/signals.d.ts +36 -0
  64. package/dist/cli/signals.d.ts.map +1 -0
  65. package/dist/cli/signals.js +85 -0
  66. package/dist/cli/signals.js.map +1 -0
  67. package/dist/cli/static-commands.d.ts +11 -0
  68. package/dist/cli/static-commands.d.ts.map +1 -0
  69. package/dist/cli/static-commands.js +83 -0
  70. package/dist/cli/static-commands.js.map +1 -0
  71. package/dist/cli/worker-stream-guard.d.ts +20 -0
  72. package/dist/cli/worker-stream-guard.d.ts.map +1 -0
  73. package/dist/cli/worker-stream-guard.js +41 -0
  74. package/dist/cli/worker-stream-guard.js.map +1 -0
  75. package/dist/cli/worker.d.ts +3 -0
  76. package/dist/cli/worker.d.ts.map +1 -0
  77. package/dist/cli/worker.js +111 -0
  78. package/dist/cli/worker.js.map +1 -0
  79. package/dist/config/ingestion.d.ts +58 -0
  80. package/dist/config/ingestion.d.ts.map +1 -0
  81. package/dist/config/ingestion.js +283 -0
  82. package/dist/config/ingestion.js.map +1 -0
  83. package/dist/config/manifest.d.ts +20 -0
  84. package/dist/config/manifest.d.ts.map +1 -0
  85. package/dist/config/manifest.js +91 -0
  86. package/dist/config/manifest.js.map +1 -0
  87. package/dist/config/model-egress.d.ts +10 -0
  88. package/dist/config/model-egress.d.ts.map +1 -0
  89. package/dist/config/model-egress.js +62 -0
  90. package/dist/config/model-egress.js.map +1 -0
  91. package/dist/config/package-resolution.d.ts +4 -0
  92. package/dist/config/package-resolution.d.ts.map +1 -0
  93. package/dist/config/package-resolution.js +24 -0
  94. package/dist/config/package-resolution.js.map +1 -0
  95. package/dist/config/policy.d.ts +44 -0
  96. package/dist/config/policy.d.ts.map +1 -0
  97. package/dist/config/policy.js +141 -0
  98. package/dist/config/policy.js.map +1 -0
  99. package/dist/config/record.d.ts +4 -0
  100. package/dist/config/record.d.ts.map +1 -0
  101. package/dist/config/record.js +10 -0
  102. package/dist/config/record.js.map +1 -0
  103. package/dist/config/secrets.d.ts +11 -0
  104. package/dist/config/secrets.d.ts.map +1 -0
  105. package/dist/config/secrets.js +42 -0
  106. package/dist/config/secrets.js.map +1 -0
  107. package/dist/contracts/diagnostics.d.ts +4 -0
  108. package/dist/contracts/diagnostics.d.ts.map +1 -0
  109. package/dist/contracts/diagnostics.js +31 -0
  110. package/dist/contracts/diagnostics.js.map +1 -0
  111. package/dist/contracts/serialize.d.ts +2 -0
  112. package/dist/contracts/serialize.d.ts.map +1 -0
  113. package/dist/contracts/serialize.js +90 -0
  114. package/dist/contracts/serialize.js.map +1 -0
  115. package/dist/contracts/types.d.ts +316 -0
  116. package/dist/contracts/types.d.ts.map +1 -0
  117. package/dist/contracts/types.js +74 -0
  118. package/dist/contracts/types.js.map +1 -0
  119. package/dist/contracts/validator.d.ts +8 -0
  120. package/dist/contracts/validator.d.ts.map +1 -0
  121. package/dist/contracts/validator.js +71 -0
  122. package/dist/contracts/validator.js.map +1 -0
  123. package/dist/driver.d.ts +97 -0
  124. package/dist/driver.d.ts.map +1 -0
  125. package/dist/driver.js +24 -0
  126. package/dist/driver.js.map +1 -0
  127. package/dist/drivers/descriptor.d.ts +15 -0
  128. package/dist/drivers/descriptor.d.ts.map +1 -0
  129. package/dist/drivers/descriptor.js +122 -0
  130. package/dist/drivers/descriptor.js.map +1 -0
  131. package/dist/drivers/loader.d.ts +18 -0
  132. package/dist/drivers/loader.d.ts.map +1 -0
  133. package/dist/drivers/loader.js +97 -0
  134. package/dist/drivers/loader.js.map +1 -0
  135. package/dist/drivers/web/checkmate-driver.json +44 -0
  136. package/dist/drivers/web/index.d.ts +6 -0
  137. package/dist/drivers/web/index.d.ts.map +1 -0
  138. package/dist/drivers/web/index.js +27 -0
  139. package/dist/drivers/web/index.js.map +1 -0
  140. package/dist/drivers/web/session.d.ts +22 -0
  141. package/dist/drivers/web/session.d.ts.map +1 -0
  142. package/dist/drivers/web/session.js +130 -0
  143. package/dist/drivers/web/session.js.map +1 -0
  144. package/dist/drivers/web/tools/network-request-recorder.d.ts +46 -0
  145. package/dist/drivers/web/tools/network-request-recorder.d.ts.map +1 -0
  146. package/dist/drivers/web/tools/network-request-recorder.js +164 -0
  147. package/dist/drivers/web/tools/network-request-recorder.js.map +1 -0
  148. package/dist/{tools/browser → drivers/web/tools}/screenshot-service.d.ts +1 -1
  149. package/dist/drivers/web/tools/screenshot-service.d.ts.map +1 -0
  150. package/dist/drivers/web/tools/screenshot-service.js.map +1 -0
  151. package/dist/drivers/web/tools/snapshot-filter/index.d.ts.map +1 -0
  152. package/dist/drivers/web/tools/snapshot-filter/index.js.map +1 -0
  153. package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.d.ts.map +1 -0
  154. package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.js.map +1 -0
  155. package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.d.ts +5 -0
  156. package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.d.ts.map +1 -0
  157. package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.js +56 -0
  158. package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.js.map +1 -0
  159. package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.d.ts.map +1 -0
  160. package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.js.map +1 -0
  161. package/dist/drivers/web/tools/snapshot-service.d.ts +31 -0
  162. package/dist/drivers/web/tools/snapshot-service.d.ts.map +1 -0
  163. package/dist/{tools/browser → drivers/web/tools}/snapshot-service.js +36 -7
  164. package/dist/drivers/web/tools/snapshot-service.js.map +1 -0
  165. package/dist/drivers/web/tools/tool.d.ts +76 -0
  166. package/dist/drivers/web/tools/tool.d.ts.map +1 -0
  167. package/dist/drivers/web/tools/tool.js +562 -0
  168. package/dist/drivers/web/tools/tool.js.map +1 -0
  169. package/dist/drivers/web/tools/transient-state-tracker.d.ts +26 -0
  170. package/dist/drivers/web/tools/transient-state-tracker.d.ts.map +1 -0
  171. package/dist/{tools/browser → drivers/web/tools}/transient-state-tracker.js +54 -19
  172. package/dist/drivers/web/tools/transient-state-tracker.js.map +1 -0
  173. package/dist/drivers/web/tools/types.d.ts +11 -0
  174. package/dist/drivers/web/tools/types.d.ts.map +1 -0
  175. package/dist/drivers/web/tools/types.js +2 -0
  176. package/dist/drivers/web/tools/types.js.map +1 -0
  177. package/dist/evidence/atomic-file.d.ts +23 -0
  178. package/dist/evidence/atomic-file.d.ts.map +1 -0
  179. package/dist/evidence/atomic-file.js +104 -0
  180. package/dist/evidence/atomic-file.js.map +1 -0
  181. package/dist/evidence/layout.d.ts +30 -0
  182. package/dist/evidence/layout.d.ts.map +1 -0
  183. package/dist/evidence/layout.js +152 -0
  184. package/dist/evidence/layout.js.map +1 -0
  185. package/dist/evidence/retention.d.ts +5 -0
  186. package/dist/evidence/retention.d.ts.map +1 -0
  187. package/dist/evidence/retention.js +10 -0
  188. package/dist/evidence/retention.js.map +1 -0
  189. package/dist/evidence/store.d.ts +101 -0
  190. package/dist/evidence/store.d.ts.map +1 -0
  191. package/dist/evidence/store.js +375 -0
  192. package/dist/evidence/store.js.map +1 -0
  193. package/dist/evidence/terminal-finalizer.d.ts +19 -0
  194. package/dist/evidence/terminal-finalizer.d.ts.map +1 -0
  195. package/dist/evidence/terminal-finalizer.js +56 -0
  196. package/dist/evidence/terminal-finalizer.js.map +1 -0
  197. package/dist/index.d.ts +8 -1
  198. package/dist/index.d.ts.map +1 -1
  199. package/dist/index.js +11 -1
  200. package/dist/index.js.map +1 -1
  201. package/dist/logging/invocation-logger.d.ts +4 -0
  202. package/dist/logging/invocation-logger.d.ts.map +1 -0
  203. package/dist/logging/invocation-logger.js +25 -0
  204. package/dist/logging/invocation-logger.js.map +1 -0
  205. package/dist/logging/types.d.ts +8 -0
  206. package/dist/logging/types.d.ts.map +1 -0
  207. package/dist/logging/types.js +7 -0
  208. package/dist/logging/types.js.map +1 -0
  209. package/dist/redaction/diagnostic-sanitizer.d.ts +7 -0
  210. package/dist/redaction/diagnostic-sanitizer.d.ts.map +1 -0
  211. package/dist/redaction/diagnostic-sanitizer.js +42 -0
  212. package/dist/redaction/diagnostic-sanitizer.js.map +1 -0
  213. package/dist/redaction/redactor.d.ts +40 -0
  214. package/dist/redaction/redactor.d.ts.map +1 -0
  215. package/dist/redaction/redactor.js +176 -0
  216. package/dist/redaction/redactor.js.map +1 -0
  217. package/dist/redaction/scrub.d.ts +29 -0
  218. package/dist/redaction/scrub.d.ts.map +1 -0
  219. package/dist/redaction/scrub.js +54 -0
  220. package/dist/redaction/scrub.js.map +1 -0
  221. package/dist/runtime/config.d.ts +15 -0
  222. package/dist/runtime/config.d.ts.map +1 -0
  223. package/dist/runtime/config.js +2 -0
  224. package/dist/runtime/config.js.map +1 -0
  225. package/dist/runtime/driver-boundary.d.ts +16 -0
  226. package/dist/runtime/driver-boundary.d.ts.map +1 -0
  227. package/dist/runtime/driver-boundary.js +71 -0
  228. package/dist/runtime/driver-boundary.js.map +1 -0
  229. package/dist/runtime/driver-session.d.ts +9 -0
  230. package/dist/runtime/driver-session.d.ts.map +1 -0
  231. package/dist/runtime/driver-session.js +64 -0
  232. package/dist/runtime/driver-session.js.map +1 -0
  233. package/dist/runtime/internal-step-evidence.d.ts +30 -0
  234. package/dist/runtime/internal-step-evidence.d.ts.map +1 -0
  235. package/dist/runtime/internal-step-evidence.js +82 -0
  236. package/dist/runtime/internal-step-evidence.js.map +1 -0
  237. package/dist/runtime/result-adapter.d.ts +9 -0
  238. package/dist/runtime/result-adapter.d.ts.map +1 -0
  239. package/dist/runtime/result-adapter.js +77 -0
  240. package/dist/runtime/result-adapter.js.map +1 -0
  241. package/dist/runtime/runner.d.ts +35 -88
  242. package/dist/runtime/runner.d.ts.map +1 -1
  243. package/dist/runtime/runner.js +60 -74
  244. package/dist/runtime/runner.js.map +1 -1
  245. package/dist/runtime/scenario-control.d.ts +40 -0
  246. package/dist/runtime/scenario-control.d.ts.map +1 -0
  247. package/dist/runtime/scenario-control.js +94 -0
  248. package/dist/runtime/scenario-control.js.map +1 -0
  249. package/dist/runtime/scenario-runner.d.ts +39 -0
  250. package/dist/runtime/scenario-runner.d.ts.map +1 -0
  251. package/dist/runtime/scenario-runner.js +273 -0
  252. package/dist/runtime/scenario-runner.js.map +1 -0
  253. package/dist/runtime/scenario-state.d.ts +55 -0
  254. package/dist/runtime/scenario-state.d.ts.map +1 -0
  255. package/dist/runtime/scenario-state.js +128 -0
  256. package/dist/runtime/scenario-state.js.map +1 -0
  257. package/dist/runtime/step-execution.d.ts +24 -14
  258. package/dist/runtime/step-execution.d.ts.map +1 -1
  259. package/dist/runtime/step-execution.js +130 -36
  260. package/dist/runtime/step-execution.js.map +1 -1
  261. package/dist/runtime/text.d.ts +10 -0
  262. package/dist/runtime/text.d.ts.map +1 -0
  263. package/dist/runtime/text.js +25 -0
  264. package/dist/runtime/text.js.map +1 -0
  265. package/dist/runtime/types.d.ts +50 -76
  266. package/dist/runtime/types.d.ts.map +1 -1
  267. package/dist/runtime/usage-tracker.d.ts +37 -0
  268. package/dist/runtime/usage-tracker.d.ts.map +1 -0
  269. package/dist/runtime/usage-tracker.js +110 -0
  270. package/dist/runtime/usage-tracker.js.map +1 -0
  271. package/dist/tools/define-agent-tool.d.ts +3 -28
  272. package/dist/tools/define-agent-tool.d.ts.map +1 -1
  273. package/dist/tools/define-agent-tool.js +3 -28
  274. package/dist/tools/define-agent-tool.js.map +1 -1
  275. package/dist/tools/dispatcher.d.ts +11 -3
  276. package/dist/tools/dispatcher.d.ts.map +1 -1
  277. package/dist/tools/dispatcher.js +50 -8
  278. package/dist/tools/dispatcher.js.map +1 -1
  279. package/dist/tools/registry.d.ts +8 -10
  280. package/dist/tools/registry.d.ts.map +1 -1
  281. package/dist/tools/registry.js +19 -11
  282. package/dist/tools/registry.js.map +1 -1
  283. package/dist/tools/step/result-tool.d.ts.map +1 -1
  284. package/dist/tools/step/result-tool.js +8 -6
  285. package/dist/tools/step/result-tool.js.map +1 -1
  286. package/dist/tools/tool-contract.d.ts +1 -1
  287. package/dist/tools/tool-contract.d.ts.map +1 -1
  288. package/dist/tools/tool-contract.js.map +1 -1
  289. package/dist/tools/types.d.ts +77 -6
  290. package/dist/tools/types.d.ts.map +1 -1
  291. package/dist/tools/types.js.map +1 -1
  292. package/docs/CLI.md +59 -0
  293. package/docs/CONFIGURATION.md +91 -0
  294. package/docs/DRIVERS.md +75 -0
  295. package/docs/EVIDENCE.md +62 -0
  296. package/package.json +51 -59
  297. package/schemas/checkmate-config.v1.json +176 -0
  298. package/schemas/describe-result.v1.json +414 -0
  299. package/schemas/driver-descriptor.v1.json +66 -0
  300. package/schemas/run-request.v1.json +67 -0
  301. package/schemas/run-result.v1.json +333 -0
  302. package/schemas/validation-result.v1.json +86 -0
  303. package/dist/ai/response-processor.d.ts +0 -20
  304. package/dist/ai/response-processor.d.ts.map +0 -1
  305. package/dist/ai/response-processor.js +0 -62
  306. package/dist/ai/response-processor.js.map +0 -1
  307. package/dist/ai/token-pricing.d.ts +0 -13
  308. package/dist/ai/token-pricing.d.ts.map +0 -1
  309. package/dist/ai/token-pricing.js +0 -348
  310. package/dist/ai/token-pricing.js.map +0 -1
  311. package/dist/ai/token-tracker.d.ts +0 -33
  312. package/dist/ai/token-tracker.d.ts.map +0 -1
  313. package/dist/ai/token-tracker.js +0 -138
  314. package/dist/ai/token-tracker.js.map +0 -1
  315. package/dist/cli/create-examples.d.ts +0 -21
  316. package/dist/cli/create-examples.d.ts.map +0 -1
  317. package/dist/cli/create-examples.js +0 -116
  318. package/dist/cli/create-examples.js.map +0 -1
  319. package/dist/cli.d.ts +0 -15
  320. package/dist/cli.d.ts.map +0 -1
  321. package/dist/cli.js +0 -69
  322. package/dist/cli.js.map +0 -1
  323. package/dist/config/runtime-config.d.ts +0 -21
  324. package/dist/config/runtime-config.d.ts.map +0 -1
  325. package/dist/config/runtime-config.js +0 -98
  326. package/dist/config/runtime-config.js.map +0 -1
  327. package/dist/core.d.ts +0 -8
  328. package/dist/core.d.ts.map +0 -1
  329. package/dist/core.js +0 -4
  330. package/dist/core.js.map +0 -1
  331. package/dist/integrations/salesforce/authenticator.d.ts +0 -27
  332. package/dist/integrations/salesforce/authenticator.d.ts.map +0 -1
  333. package/dist/integrations/salesforce/authenticator.js +0 -27
  334. package/dist/integrations/salesforce/authenticator.js.map +0 -1
  335. package/dist/integrations/salesforce/cli-handler.d.ts +0 -14
  336. package/dist/integrations/salesforce/cli-handler.d.ts.map +0 -1
  337. package/dist/integrations/salesforce/cli-handler.js +0 -50
  338. package/dist/integrations/salesforce/cli-handler.js.map +0 -1
  339. package/dist/logging/index.d.ts +0 -2
  340. package/dist/logging/index.d.ts.map +0 -1
  341. package/dist/logging/index.js +0 -4
  342. package/dist/logging/index.js.map +0 -1
  343. package/dist/logging/logger.d.ts +0 -5
  344. package/dist/logging/logger.d.ts.map +0 -1
  345. package/dist/logging/logger.js +0 -15
  346. package/dist/logging/logger.js.map +0 -1
  347. package/dist/playwright.d.ts +0 -102
  348. package/dist/playwright.d.ts.map +0 -1
  349. package/dist/playwright.js +0 -116
  350. package/dist/playwright.js.map +0 -1
  351. package/dist/runtime/extension.d.ts +0 -274
  352. package/dist/runtime/extension.d.ts.map +0 -1
  353. package/dist/runtime/extension.js +0 -171
  354. package/dist/runtime/extension.js.map +0 -1
  355. package/dist/salesforce.d.ts +0 -71
  356. package/dist/salesforce.d.ts.map +0 -1
  357. package/dist/salesforce.js +0 -73
  358. package/dist/salesforce.js.map +0 -1
  359. package/dist/tools/browser/screenshot-service.d.ts.map +0 -1
  360. package/dist/tools/browser/screenshot-service.js.map +0 -1
  361. package/dist/tools/browser/snapshot-filter/index.d.ts.map +0 -1
  362. package/dist/tools/browser/snapshot-filter/index.js.map +0 -1
  363. package/dist/tools/browser/snapshot-filter/semantic-scorer.d.ts.map +0 -1
  364. package/dist/tools/browser/snapshot-filter/semantic-scorer.js.map +0 -1
  365. package/dist/tools/browser/snapshot-filter/snapshot-filter.d.ts +0 -4
  366. package/dist/tools/browser/snapshot-filter/snapshot-filter.d.ts.map +0 -1
  367. package/dist/tools/browser/snapshot-filter/snapshot-filter.js +0 -57
  368. package/dist/tools/browser/snapshot-filter/snapshot-filter.js.map +0 -1
  369. package/dist/tools/browser/snapshot-filter/tree-reconstructor.d.ts.map +0 -1
  370. package/dist/tools/browser/snapshot-filter/tree-reconstructor.js.map +0 -1
  371. package/dist/tools/browser/snapshot-service.d.ts +0 -19
  372. package/dist/tools/browser/snapshot-service.d.ts.map +0 -1
  373. package/dist/tools/browser/snapshot-service.js.map +0 -1
  374. package/dist/tools/browser/tool.d.ts +0 -34
  375. package/dist/tools/browser/tool.d.ts.map +0 -1
  376. package/dist/tools/browser/tool.js +0 -226
  377. package/dist/tools/browser/tool.js.map +0 -1
  378. package/dist/tools/browser/transient-state-tracker.d.ts +0 -16
  379. package/dist/tools/browser/transient-state-tracker.d.ts.map +0 -1
  380. package/dist/tools/browser/transient-state-tracker.js.map +0 -1
  381. package/dist/tools/salesforce/login-tool.d.ts +0 -7
  382. package/dist/tools/salesforce/login-tool.d.ts.map +0 -1
  383. package/dist/tools/salesforce/login-tool.js +0 -25
  384. package/dist/tools/salesforce/login-tool.js.map +0 -1
  385. package/docs/EXTENSIONS.md +0 -232
  386. package/docs/GUIDE.md +0 -465
  387. package/docs/ROADMAP.md +0 -47
  388. package/playwright.config.ts +0 -39
  389. package/test/examples/salesforce/trial-dev-org.spec.ts +0 -82
  390. package/test/examples/web/website-testing.spec.ts +0 -281
  391. /package/dist/{tools/browser → drivers/web/tools}/screenshot-service.js +0 -0
  392. /package/dist/{tools/browser → drivers/web/tools}/snapshot-filter/index.d.ts +0 -0
  393. /package/dist/{tools/browser → drivers/web/tools}/snapshot-filter/index.js +0 -0
  394. /package/dist/{tools/browser → drivers/web/tools}/snapshot-filter/semantic-scorer.d.ts +0 -0
  395. /package/dist/{tools/browser → drivers/web/tools}/snapshot-filter/semantic-scorer.js +0 -0
  396. /package/dist/{tools/browser → drivers/web/tools}/snapshot-filter/tree-reconstructor.d.ts +0 -0
  397. /package/dist/{tools/browser → drivers/web/tools}/snapshot-filter/tree-reconstructor.js +0 -0
package/README.md CHANGED
@@ -1,256 +1,291 @@
1
- # **_checkmate_**
2
-
3
- AI test automation that actually works. Write tests in plain English, without locators, and with less code.
4
-
5
- ![playwright](https://img.shields.io/badge/Playwright-1.60.0-blue.svg)
6
- ![typescript](https://img.shields.io/badge/TypeScript-5.9.3-blue.svg)
7
- ![nodejs](https://img.shields.io/badge/Node.js-LTS-green.svg)
8
- ![openai](https://img.shields.io/badge/OpenAI-API-yellow.svg)
9
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
10
-
11
- ##
12
-
13
- ```typescript
14
- await ai.run({
15
- action: `
16
- Navigate to google.com
17
- Type 'playwright test automation' in the search bar
18
- Press Enter key`,
19
- expect: `
20
- Search results contain the playwright.dev link`,
21
- })
22
- ```
23
-
24
- ##
25
-
26
- ✅ **Zero Locators** - Write tests in plain English
27
- ✅ **Any Provider** - Gemini, Claude, Groq, GPT, xAI, or local models
28
- ✅ **Web & Salesforce** - Basic support out of the box
29
- ✅ **Cost Optimized** - Built-in token management and budgeting
30
- ✅ **Playwright Test** - Native reports, traces and debugging
31
- ✅ **Fully Customizable** - Build your own [extensions](docs/EXTENSIONS.md) and tools
32
-
33
- <img src="docs/img/gpt-oss-20b-e2e-checkout.gif" alt="example-e2e-test" width="100%"/>
34
-
35
- ## Get Started in 5 Minutes
36
-
37
- ### Prerequisites
38
-
39
- - Node.js [LTS](https://nodejs.org/en/download)
40
- - OpenAI [API key](https://platform.openai.com/api-keys) or compatible provider [Groq](https://console.groq.com/keys) [Gemini](https://aistudio.google.com/app/api-keys) [xAI](https://x.ai/api) etc.
1
+ #### □ □ ■ □
41
2
 
42
- ### 1. Install
3
+ ## _Checkmate - a harness for agentic acceptance_
43
4
 
44
- ```bash
45
- npm install -D dotenv @playwright/test @xoxoai/checkmate
46
- npx playwright install
47
- ```
48
-
49
- ### 2. Configure `.env`
50
-
51
- _using [OpenAI API](https://platform.openai.com/settings/organization/api-keys) key and default settings:_
52
-
53
- ```bash
54
- OPENAI_API_KEY=#your_api_key_here
55
- ```
5
+ <!-- <img src="docs/img/onboarding.gif" alt="onboarding" width="50%" centered/> -->
6
+ <img src="https://raw.github.com/dawiddiwad/checkmate/main/docs/img/onboarding.gif" alt="onboarding" width="50%" centered/>
56
7
 
57
- _for other providers, set the base url and model:_
8
+ #
58
9
 
59
- ```bash
60
- OPENAI_BASE_URL=https://api.groq.com/openai/v1
61
- OPENAI_MODEL=openai/gpt-oss-20b
62
- ```
10
+ Think of it like QA contracts for software factories: policies define the bounds of execution, where scenarios describe the intent to verify through a domain driver. It aims to patch the gap between fully coded tests and freelance agent testing.
63
11
 
64
- ### 3. Scaffold Test Examples
12
+ ## Install
65
13
 
66
14
  ```bash
67
- npx checkmate create-examples
15
+ npm install @xoxoai/checkmate
68
16
  ```
69
17
 
70
- ### 4. Run Tests
71
-
72
- ```bash
73
- npm run test:web:example
18
+ ## Usage
19
+
20
+ #### Scenario is a JSON document:
21
+
22
+ ```json
23
+ {
24
+ "schemaVersion": 1,
25
+ "scenario": {
26
+ "id": "checkout spring promo",
27
+ "driver": {
28
+ "id": "web",
29
+ "target": {
30
+ "baseUrl": "https://staging.example.test"
31
+ }
32
+ },
33
+ "policy": "ci",
34
+ "steps": [
35
+ {
36
+ "id": "start checkout",
37
+ "action": "Add a product to the cart",
38
+ "expect": "The checkout page is displayed"
39
+ },
40
+ {
41
+ "id": "apply promo",
42
+ "action": "Apply promotion code SPRING25",
43
+ "expect": "The order total is reduced by 25%"
44
+ },
45
+ {
46
+ "id": "verify total",
47
+ "action": "Proceed to the payment step",
48
+ "expect": "The order total reflects the applied promotion"
49
+ }
50
+ ]
51
+ }
52
+ }
74
53
  ```
75
54
 
76
- ### 5. View Report
55
+ #### Run:
77
56
 
78
57
  ```bash
79
- npm run show:report
58
+ checkmate run scenario.json
80
59
  ```
81
60
 
82
- ## Writing Tests
83
-
84
- **_checkmate_** tests are written using natural language by specifying `action` and `expect`:
85
-
86
- ```typescript
87
- import { test } from '@xoxoai/checkmate/playwright'
88
-
89
- test.describe('multi-step : full AI mode', async () => {
90
- test('purchase flow', async ({ ai }) => {
91
- await test.step('Open Shop', async () => {
92
- await ai.run({
93
- action: `
94
- Navigate to https://my-shop.com`,
95
- expect: `
96
- My Shop home page is loaded`,
97
- })
98
- })
99
-
100
- await test.step('Select product', async () => {
101
- await ai.run({
102
- action: `
103
- Click 'Shop Now' on 'Men's Outerwear' category
104
- Click on the first Shell product in the list`,
105
- expect: `
106
- Product detail with title and price.`,
107
- })
108
- })
109
-
110
- await test.step('Cart and checkout', async () => {
111
- await ai.run({
112
- action: `
113
- Click 'Add to Cart'
114
- Click 'Checkout' in the 'Added to cart' dialog`,
115
- expect: `
116
- Checkout with Order Summary and totals`,
117
- })
118
- })
119
- })
120
- })
61
+ Checkmate writes one JSON result to stdout. Outcomes distinguish application, model, infrastructure, and invalid-invocation failures.
62
+
63
+ <details>
64
+ <summary>Example Results</summary>
65
+
66
+ A successful run of the scenario above:
67
+
68
+ ```json
69
+ {
70
+ "kind": "run-result",
71
+ "schemaVersion": 1,
72
+ "runId": "0123456789abcdef",
73
+ "scenarioId": "checkout spring promo",
74
+ "status": "passed",
75
+ "category": "passed",
76
+ "reason": "scenario-complete",
77
+ "targetMutation": "possibly-mutated",
78
+ "startedAt": "2026-09-04T12:00:00.000Z",
79
+ "durationMs": 12600,
80
+ "driver": { "id": "web", "contractVersion": 1 },
81
+ "policy": {
82
+ "id": "ci",
83
+ "effectiveLimits": {
84
+ "scenarioTimeoutMs": 180000,
85
+ "stepTimeoutMs": 120000,
86
+ "turnsPerStep": 20,
87
+ "requestTimeoutMs": 60000,
88
+ "maxRetries": 3,
89
+ "loopMaxRepetitions": 5,
90
+ "cleanupTimeoutMs": 10000,
91
+ "budgetTokens": 200000
92
+ }
93
+ },
94
+ "usage": {
95
+ "promptTokens": 3600,
96
+ "cachedPromptTokens": 1200,
97
+ "completionTokens": 300,
98
+ "totalTokens": 3900,
99
+ "state": "complete"
100
+ },
101
+ "steps": [
102
+ {
103
+ "id": "start checkout",
104
+ "status": "passed",
105
+ "category": "app",
106
+ "reason": "met-expectation",
107
+ "actual": "The checkout page displays one product with a $40 order total.",
108
+ "turns": 3,
109
+ "durationMs": 4000,
110
+ "usage": { "promptTokens": 1200, "cachedPromptTokens": 400, "completionTokens": 100, "totalTokens": 1300 },
111
+ "toolCalls": [
112
+ {
113
+ "turn": 1,
114
+ "driverId": "web",
115
+ "name": "browser_click_or_hover",
116
+ "arguments": { "ref": "e12", "name": "Add to cart", "hover": false, "goal": "Add a product to the cart" },
117
+ "status": "ok"
118
+ },
119
+ {
120
+ "turn": 2,
121
+ "driverId": "web",
122
+ "name": "browser_click_or_hover",
123
+ "arguments": { "ref": "e18", "name": "Checkout", "hover": false, "goal": "Open the checkout page" },
124
+ "status": "ok"
125
+ }
126
+ ]
127
+ },
128
+ {
129
+ "id": "apply promo",
130
+ "status": "passed",
131
+ "category": "app",
132
+ "reason": "met-expectation",
133
+ "actual": "SPRING25 is applied and the order total is reduced from $40 to $30.",
134
+ "turns": 3,
135
+ "durationMs": 4000,
136
+ "usage": { "promptTokens": 1200, "cachedPromptTokens": 400, "completionTokens": 100, "totalTokens": 1300 },
137
+ "toolCalls": [
138
+ {
139
+ "turn": 1,
140
+ "driverId": "web",
141
+ "name": "browser_type_or_select",
142
+ "arguments": {
143
+ "elements": [
144
+ { "ref": "e24", "name": "Promotion code", "text": "SPRING25", "clear": true, "select": false }
145
+ ],
146
+ "goal": "Enter the promotion code"
147
+ },
148
+ "status": "ok"
149
+ },
150
+ {
151
+ "turn": 2,
152
+ "driverId": "web",
153
+ "name": "browser_click_or_hover",
154
+ "arguments": { "ref": "e25", "name": "Apply", "hover": false, "goal": "Apply the promotion code" },
155
+ "status": "ok"
156
+ }
157
+ ]
158
+ },
159
+ {
160
+ "id": "verify total",
161
+ "status": "passed",
162
+ "category": "app",
163
+ "reason": "met-expectation",
164
+ "actual": "The payment step displays the discounted order total of $30.",
165
+ "turns": 2,
166
+ "durationMs": 4000,
167
+ "usage": { "promptTokens": 1200, "cachedPromptTokens": 400, "completionTokens": 100, "totalTokens": 1300 },
168
+ "toolCalls": [
169
+ {
170
+ "turn": 1,
171
+ "driverId": "web",
172
+ "name": "browser_click_or_hover",
173
+ "arguments": {
174
+ "ref": "e30",
175
+ "name": "Continue to payment",
176
+ "hover": false,
177
+ "goal": "Verify the discounted total at the payment step"
178
+ },
179
+ "status": "ok"
180
+ }
181
+ ]
182
+ }
183
+ ],
184
+ "evidence": { "state": "complete", "references": [] },
185
+ "diagnostics": []
186
+ }
121
187
  ```
122
188
 
123
- That's it. No page objects, no selectors. No locators. Peace on Earth.
124
-
125
- Tests are orchestrated by [playwright](https://playwright.dev/docs/test-configuration) [config](playwright.config.ts).
126
-
127
- ### API
128
-
129
- Compose your own **_checkmate_** using [extensions](docs/EXTENSIONS.md):
130
-
131
- ```typescript
132
- import { createRunner } from '@xoxoai/checkmate/core'
133
- import { web } from '@xoxoai/checkmate/playwright'
134
- import { notion, database, api } from 'my-custom-extensions'
135
-
136
- const ai = createRunner({
137
- extensions: [web({ page }), notion(), database(), api()],
138
- })
139
-
140
- await ai.run({
141
- action: 'Open the pricing page',
142
- expect: 'Pricing details are visible',
143
- })
189
+ </details>
190
+
191
+ ## Configuration
192
+
193
+ Execution is configured through `checkmate.config.json`.
194
+
195
+ Policies keep execution settings outside test intent. For example, a policy can define limits, evidence retention, and allowed driver tools:
196
+
197
+ <details>
198
+ <summary>Example Configuration</summary>
199
+
200
+ ```json
201
+ {
202
+ "schemaVersion": 1,
203
+ "outputDirectory": ".checkmate/runs",
204
+ "defaultPolicy": "ci",
205
+ "secretBindings": {
206
+ "openai-api-key": {
207
+ "source": "environment",
208
+ "name": "CHECKMATE_OPENAI_API_KEY"
209
+ }
210
+ },
211
+ "policies": {
212
+ "ci": {
213
+ "modelEgress": {
214
+ "provider": {
215
+ "id": "openai",
216
+ "model": "gpt-5-mini",
217
+ "apiKeyBinding": "openai-api-key"
218
+ },
219
+ "textRedaction": "on",
220
+ "allowOpaque": false,
221
+ "maxStepBytes": 1048576,
222
+ "maxMessageBytes": 262144
223
+ },
224
+ "bounds": {
225
+ "scenarioTimeoutMs": 180000,
226
+ "stepTimeoutMs": 120000,
227
+ "turnsPerStep": 20,
228
+ "requestTimeoutMs": 60000,
229
+ "maxRetries": 3,
230
+ "loopMaxRepetitions": 5,
231
+ "cleanupTimeoutMs": 10000,
232
+ "budgetTokens": 200000
233
+ },
234
+ "evidence": {
235
+ "retention": "retain-on-failure",
236
+ "redaction": "on",
237
+ "allowOpaque": false
238
+ },
239
+ "drivers": {
240
+ "web": {
241
+ "settings": {
242
+ "headless": true,
243
+ "snapshotFilter": false
244
+ },
245
+ "tools": { "allowed": ["*"] }
246
+ }
247
+ }
248
+ }
249
+ },
250
+ "drivers": {
251
+ "web": {
252
+ "package": "@xoxoai/checkmate/driver-web",
253
+ "secrets": {}
254
+ }
255
+ }
256
+ }
144
257
  ```
145
258
 
146
- ### Entry Points:
147
-
148
- `@xoxoai/checkmate/core`: compose runner, tools, and extensions.
149
- `@xoxoai/checkmate/playwright`: Web extension with Playwright `test` and `expect`.
150
- `@xoxoai/checkmate/salesforce`: Salesforce extensions with the same `ai` fixture shape.
151
-
152
- See [guide](docs/GUIDE.md#best-practices) for tips on writing effective tests.
259
+ </details>
153
260
 
154
- ## Costs
261
+ ## Drivers
155
262
 
156
- They depend on the model, provider, test complexity, and number of steps.
263
+ #### Checkmate is designed around domain-specific drivers.
157
264
 
158
- Estimates for [gpt-oss-20b hosted on groq.com](https://console.groq.com/docs/model/openai/gpt-oss-20b):
265
+ A driver defines how the model interacts with a particular system while the harness keeps scenario execution, policies, results, and evidence consistent.
159
266
 
160
- - Simple test (~5 steps): ~$0.001 - $0.01
161
- - Complex test (~20 steps): ~$0.01 - $0.05
162
- - Full E2E suite (~50 complex tests): ~$1.00 - $2.00
267
+ The included `web` driver is a simple reference implementation. Other domains can be integrated through the same public driver contract.
163
268
 
164
- **_checkmate_** includes built-in token usage [monitoring](docs/GUIDE.md#cost-management).
269
+ ## Commands
165
270
 
166
- See [guide](docs/GUIDE.md#cost-management) for cost control and monitoring options.
167
-
168
- ## Common Issues
169
-
170
- **AI makes incorrect decisions**
171
-
172
- - Provide precise descriptions in `action` and focused assertions in `expect`
173
- - Reference specific element and roles, for example: text, label, button, list, etc.
174
- - Break complex workflows into single-action steps and use a step-by-step approach
175
-
176
- **Tests loop during step execution**
177
-
178
- - Increase `OPENAI_TEMPERATURE` to encourage exploration
179
- - Use a reasoning model if possible to improve accuracy
180
-
181
- **High token costs**
182
-
183
- - Enable [snapshot filtering](docs/GUIDE.md#using-snapshot-filtering-for-token-optimization) with `CHECKMATE_SNAPSHOT_FILTERING=true` auto-filter elements
184
- - Adjust reasoning effort: `OPENAI_REASONING_EFFORT`
185
- - Consider disabling `OPENAI_INCLUDE_SCREENSHOT_IN_SNAPSHOT` if visuals are not needed
186
- - Use a cheaper model, lower-end models often perform well: `gpt-5.4-nano` or `gpt-oss-20b`
187
-
188
- See [guide](docs/GUIDE.md#openai-api-settings) for detailed configuration options and tips.
189
-
190
- ## FAQ
191
-
192
- **Which models work best?**
193
- You can use any model that was trained for tool use.
194
-
195
- Here are the best picks based on extensive testing:
196
-
197
- - Highly recommended: [`gpt-oss-20b` hosted on groq.com](https://console.groq.com/docs/model/openai/gpt-oss-20b). Groq's infrastructure is optimized for minimal latency and fast inference, making it ideal for E2E test automation.
198
- - Google's `gemini-2.5-flash` offers an excellent balance of cost and performance if you prefer major cloud providers.
199
- - OpenAI's `gpt-5-mini`, `gpt-5.4-nano` and xAI's `grok-4-1-fast-reasoning` also work well and keep costs relatively low.
200
-
201
- **Can I use local models?**
202
- Yes - **_checkmate_** works with any OpenAI‑compatible API, including local models via LM Studio, Ollama, or llama.cpp. I recommend [qwen3.5-4b](https://huggingface.co/Qwen/Qwen3.5-4B). It is fast (≈100 tokens/sec on an RTX 3060 Ti; ≈40 tokens/sec on Apple M3) and performs surprisingly well for E2E testing.
203
-
204
- **Does it work with CI/CD?**
205
- Absolutely. Use **_checkmate_** as part of your existing [Playwright Test suites in any CI/CD pipeline](https://playwright.dev/docs/best-practices#run-tests-on-ci). You can mix AI‑driven steps and traditional tests as needed.
206
-
207
- **Is this production-ready?**
208
- It depends. If you can accept some non‑deterministic behavior and leverage LLMs' randomness to help address the [pesticide paradox](https://medium.com/@suwekasansiluni/the-pesticide-paradox-what-farming-teaches-us-about-software-testing-ab5d625d4de1), **_checkmate_** can be production-ready. In many cases, the maintenance savings, faster development, and benefits of non‑linear execution outweigh occasional hiccups.
209
-
210
- If you require 100% deterministic tests at all times, traditional Playwright remains the better choice.
211
-
212
- **Best part?**
213
- You can mix both approaches within the same test suite, combining AI‑driven and traditional tests as needed:
214
-
215
- ```typescript
216
- // traditional playwright actions:
217
- await page.goto('https://www.google.com')
218
- const searchBox = page.getByRole('combobox', { name: 'Search', exact: true })
219
- await searchBox.fill('playwright test automation')
220
- await searchBox.press('Enter')
221
-
222
- // ai-driven actions and assertions:
223
- await ai.run({
224
- action: 'Click on the link that leads to playwright.dev',
225
- expect: 'The playwright.dev homepage is displayed',
226
- })
271
+ ```text
272
+ checkmate run <request.json|->
273
+ checkmate validate <request.json>
274
+ checkmate describe
275
+ checkmate --help
276
+ checkmate --version
227
277
  ```
228
278
 
229
- ## Documentation
230
-
231
- - [**_checkmate_** guide](docs/GUIDE.md)
232
- - [**_checkmate_** extensions](docs/EXTENSIONS.md)
233
- - [**playwright** official website](https://playwright.dev/)
279
+ `describe` returns the drivers, policies, and contract versions available in the current environment.
234
280
 
235
- ## Contributing
281
+ ## Docs
236
282
 
237
- I'd love your help! Key areas:
238
-
239
- - Additional tool integrations (API testing, Salesforce, etc.)
240
- - Further cost optimization techniques
241
- - Context and prompt engineering improvements
242
- - Error handling and recovery
243
-
244
- See [roadmap](docs/ROADMAP.md) for future plans and development
283
+ [Configuration](docs/CONFIGURATION.md)
284
+ [Evidence](docs/EVIDENCE.md)
285
+ [Drivers](docs/DRIVERS.md)
286
+ [CLI](docs/CLI.md)
287
+ [Dev :)](docs/DEVELOPMENT.md)
245
288
 
246
289
  ## License
247
290
 
248
- MIT [license](LICENSE)
249
-
250
- ## Why I build this?
251
-
252
- Test automation shouldn't require a PhD in XPath. This project explores how AI can make it accessible to anyone.
253
-
254
- Less coding, more testing.
255
-
256
- Built with ❤️ by [Dawid Dobrowolski](https://github.com/dawiddiwad)
291
+ [MIT](LICENSE)
package/bin/checkmate.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { runCli } from '../dist/cli.js'
3
+ import { runCli } from '../dist/cli/main.js'
4
4
 
5
5
  runCli(process.argv.slice(2)).then(
6
6
  (code) => {
@@ -1,38 +1,51 @@
1
- import { ChatCompletion, ChatCompletionMessageParam } from 'openai/resources/chat/completions';
2
- import { RuntimeConfig } from '../config/runtime-config.js';
1
+ import { ChatCompletion, ChatCompletionAssistantMessageParam, ChatCompletionMessageParam } from 'openai/resources/chat/completions';
2
+ import { RuntimeConfig } from '../runtime/config.js';
3
+ import type { ModelEgressPolicyV1 } from '../contracts/types.js';
4
+ import type { RuntimeLogger } from '../logging/types.js';
3
5
  import { ToolRegistry } from '../tools/registry.js';
4
- import { Step, ResolveStepResult } from '../runtime/types.js';
5
- import { ExtensionHost } from '../runtime/extension.js';
6
+ import { Step } from '../runtime/types.js';
6
7
  export type AiClientDependencies = {
7
- runtimeConfig: RuntimeConfig;
8
+ config: RuntimeConfig;
8
9
  toolRegistry: ToolRegistry;
9
- extensionHost: ExtensionHost;
10
+ apiKey: string;
11
+ modelEgress?: ModelEgressPolicyV1;
12
+ exactSecrets?: Iterable<string>;
13
+ logger: RuntimeLogger;
14
+ };
15
+ export type AiSendOptions = {
16
+ step?: Step;
17
+ signal?: AbortSignal;
18
+ };
19
+ export type AiResponse = {
20
+ response: ChatCompletion;
21
+ assistantMessages: ChatCompletionAssistantMessageParam[];
10
22
  };
11
23
  export declare class AiClient {
12
24
  private client;
13
- private messages;
14
- private readonly responseProcessor;
15
- private readonly retryableStatus;
16
- private step;
17
- private resolveStepResult;
18
- temperature: number;
19
- private readonly messageHistory;
20
- constructor({ runtimeConfig, toolRegistry, extensionHost }: AiClientDependencies);
21
- private readonly runtimeConfig;
25
+ private readonly config;
22
26
  private readonly toolRegistry;
23
- initialize(step: Step, resolveStepResult: ResolveStepResult): Promise<void>;
24
- getMessages(): ChatCompletionMessageParam[];
25
- getToolRegistry(): ToolRegistry;
26
- getRuntimeConfig(): RuntimeConfig;
27
- sendMessage(userMessage: string | ChatCompletionMessageParam[]): Promise<void>;
28
- addToolResponse(toolCallId: string, content: string): Promise<void>;
29
- addUserMessage(content: string): Promise<void>;
30
- addToolExecutionSummaryMessage(content: string): Promise<void>;
31
- addCurrentSnapshotMessage(snapshotContent: string): Promise<void>;
32
- addCurrentScreenshotMessage(base64Data: string, mimeType?: string): Promise<void>;
33
- sendToolResponseWithRetry(): Promise<ChatCompletion>;
34
- private createChatCompletion;
35
- private appendResponseMessages;
27
+ private readonly apiKey;
28
+ private readonly modelEgress;
29
+ private readonly exactSecrets;
30
+ private readonly runtimeLogger;
31
+ private readonly retryableStatus;
32
+ private sendsTemperature;
33
+ readonly temperature: number;
34
+ constructor({ config, toolRegistry, apiKey, modelEgress, exactSecrets, logger: runtimeLogger, }: AiClientDependencies);
35
+ send(messages: ChatCompletionMessageParam[], options?: AiSendOptions): Promise<AiResponse>;
36
+ countHistoryTokens(messages: ChatCompletionMessageParam[]): number;
37
+ private complete;
38
+ /**
39
+ * Whether the provider rejected the request because of the configured temperature.
40
+ *
41
+ * Some models — OpenAI's `gpt-5` family and its reasoning models among them — accept only
42
+ * their own default temperature and answer any other value with a 400. Detecting that from
43
+ * the response is what keeps the policy temperature working against any OpenAI-compatible
44
+ * endpoint; a hard-coded list of model families would go stale the week after it was written.
45
+ */
46
+ private rejectsTemperature;
47
+ private openai;
48
+ private retainAssistantMessages;
36
49
  private sanitizeAssistantMessage;
37
50
  private executeWithRetry;
38
51
  private getStatus;
@@ -40,10 +53,12 @@ export declare class AiClient {
40
53
  private getRetryAfterSeconds;
41
54
  private calculateBackoff;
42
55
  private sleep;
43
- countHistoryTokens(): number;
44
- replaceHistory(history: ChatCompletionMessageParam[]): void;
45
56
  private enhanceError;
46
57
  private isToolError;
58
+ private formatStepContext;
59
+ private formatRecentMessages;
60
+ private formatError;
61
+ private formatContentPreview;
47
62
  private countContentChars;
48
63
  }
49
64
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/ai/client.ts"],"names":[],"mappings":"AACA,OAAO,EACN,cAAc,EAEd,0BAA0B,EAC1B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAI3D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAEvD,MAAM,MAAM,oBAAoB,GAAG;IAClC,aAAa,EAAE,aAAa,CAAA;IAC5B,YAAY,EAAE,YAAY,CAAA;IAC1B,aAAa,EAAE,aAAa,CAAA;CAC5B,CAAA;AAED,qBAAa,QAAQ;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAS/B;IACD,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;gBAE1C,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,oBAAoB;IAOhF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAErC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjF,WAAW,IAAI,0BAA0B,EAAE;IAI3C,eAAe,IAAI,YAAY;IAI/B,gBAAgB,IAAI,aAAa;IAI3B,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,0BAA0B,EAAE;IAe9D,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,8BAA8B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9D,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9F,yBAAyB,IAAI,OAAO,CAAC,cAAc,CAAC;YAS5C,oBAAoB;IAalC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,wBAAwB;YAgClB,gBAAgB;IAmC9B,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,KAAK;IAIb,kBAAkB,IAAI,MAAM;IAK5B,cAAc,CAAC,OAAO,EAAE,0BAA0B,EAAE,GAAG,IAAI;IAI3D,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,iBAAiB;CA0BzB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/ai/client.ts"],"names":[],"mappings":"AACA,OAAO,EACN,cAAc,EACd,mCAAmC,EAEnC,0BAA0B,EAC1B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE1C,MAAM,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,aAAa,CAAA;IACrB,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,mBAAmB,CAAA;IACjC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC/B,MAAM,EAAE,aAAa,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC3B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,MAAM,CAAC,EAAE,WAAW,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACxB,QAAQ,EAAE,cAAc,CAAA;IACxB,iBAAiB,EAAE,mCAAmC,EAAE,CAAA;CACxD,CAAA;AAED,qBAAa,QAAQ;IACpB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2D;IAC3F,OAAO,CAAC,gBAAgB,CAAO;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;gBAEhB,EACX,MAAM,EACN,YAAY,EACZ,MAAM,EACN,WAAW,EACX,YAAiB,EACjB,MAAM,EAAE,aAAa,GACrB,EAAE,oBAAoB;IAUjB,IAAI,CAAC,QAAQ,EAAE,0BAA0B,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAqBpG,kBAAkB,CAAC,QAAQ,EAAE,0BAA0B,EAAE,GAAG,MAAM;YAKpD,QAAQ;IAwBtB;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,MAAM;IAed,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,wBAAwB;YAgClB,gBAAgB;IAmC9B,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,KAAK;IAgBb,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,WAAW;IA0CnB,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,iBAAiB;CA0BzB"}