@xoxoai/checkmate 0.4.27 → 0.5.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 (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
@@ -1,102 +0,0 @@
1
- import { expect, Page } from '@playwright/test';
2
- import { CheckmateRunner } from './runtime/runner.js';
3
- import { CheckmateExtension } from './runtime/extension.js';
4
- /**
5
- * Capability names published by the Playwright web extension.
6
- *
7
- * Use these in custom extensions that need access to the active Playwright page
8
- * or the browser tool runtime.
9
- *
10
- * @example
11
- * ```ts
12
- * const extension = defineExtension({
13
- * name: 'custom-web-policy',
14
- * setup(api) {
15
- * const page = api.getCapability<Page>(PlaywrightCapability.PAGE)
16
- * api.addInstruction(`Current page url is ${page.url()}`)
17
- * },
18
- * })
19
- * ```
20
- */
21
- export declare const PlaywrightCapability: {
22
- readonly PAGE: "checkmate.playwright.page";
23
- readonly BROWSER_RUNTIME: "checkmate.playwright.browser-runtime";
24
- };
25
- /**
26
- * Fixture type exported by `@xoxoai/checkmate/playwright`.
27
- *
28
- * @example
29
- * ```ts
30
- * test('checkout flow', async ({ ai }) => {
31
- * await ai.run({ action: 'Open checkout', expect: 'Checkout page is visible' })
32
- * })
33
- * ```
34
- */
35
- export type CheckmateFixtures = {
36
- /**
37
- * Runner composed with the built-in web extension.
38
- */
39
- ai: CheckmateRunner;
40
- };
41
- /**
42
- * Options for the built-in web extension.
43
- *
44
- * @example
45
- * ```ts
46
- * const extension = web({ page })
47
- * ```
48
- */
49
- export type WebExtensionOptions = {
50
- /**
51
- * Active Playwright page used for browser automation.
52
- */
53
- page: Page;
54
- };
55
- /**
56
- * Creates the built-in web extension.
57
- *
58
- * This extension adds browser tools, initial snapshots, and post-tool screenshot handling.
59
- *
60
- * @example
61
- * ```ts
62
- * import { createRunner } from '@xoxoai/checkmate/core'
63
- * import { web } from '@xoxoai/checkmate/playwright'
64
- *
65
- * const ai = createRunner({
66
- * extensions: [web({ page })],
67
- * })
68
- * ```
69
- */
70
- export declare function web({ page }: WebExtensionOptions): CheckmateExtension;
71
- /**
72
- * Creates a runner composed with the built-in web extension.
73
- *
74
- * @example
75
- * ```ts
76
- * import { createPlaywrightRunner } from '@xoxoai/checkmate/playwright'
77
- *
78
- * const ai = createPlaywrightRunner(page)
79
- * ```
80
- */
81
- export declare function createPlaywrightRunner(page: Page): CheckmateRunner;
82
- /**
83
- * Playwright Test fixture with the `ai` runner.
84
- *
85
- * @example
86
- * ```ts
87
- * import { test } from '@xoxoai/checkmate/playwright'
88
- *
89
- * test('search flow', async ({ ai }) => {
90
- * await ai.run({
91
- * action: 'Search for playwright docs',
92
- * expect: 'Search results are displayed',
93
- * })
94
- * })
95
- * ```
96
- */
97
- export declare const test: import("@playwright/test").TestType<import("@playwright/test").PlaywrightTestArgs & import("@playwright/test").PlaywrightTestOptions & CheckmateFixtures, import("@playwright/test").PlaywrightWorkerArgs & import("@playwright/test").PlaywrightWorkerOptions>;
98
- /**
99
- * Re-export of Playwright's `expect` for convenience.
100
- */
101
- export { expect };
102
- //# sourceMappingURL=playwright.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAgB,MAAM,kBAAkB,CAAA;AAE7D,OAAO,EAAgB,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAE,kBAAkB,EAAmB,MAAM,wBAAwB,CAAA;AAK5E;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB;;;CAGvB,CAAA;AAEV;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC/B;;OAEG;IACH,EAAE,EAAE,eAAe,CAAA;CACnB,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG;IACjC;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;CACV,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,mBAAmB,GAAG,kBAAkB,CAmCrE;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,eAAe,CAElE;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,IAAI,iQAMf,CAAA;AAEF;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -1,116 +0,0 @@
1
- import { expect, test as base } from '@playwright/test';
2
- import { MessageHistory } from './ai/message-history.js';
3
- import { createRunner } from './runtime/runner.js';
4
- import { defineExtension } from './runtime/extension.js';
5
- import { BrowserScreenshotService } from './tools/browser/screenshot-service.js';
6
- import { BrowserTool, BrowserToolRuntime, createBrowserTools } from './tools/browser/tool.js';
7
- import { SnapshotService } from './tools/browser/snapshot-service.js';
8
- /**
9
- * Capability names published by the Playwright web extension.
10
- *
11
- * Use these in custom extensions that need access to the active Playwright page
12
- * or the browser tool runtime.
13
- *
14
- * @example
15
- * ```ts
16
- * const extension = defineExtension({
17
- * name: 'custom-web-policy',
18
- * setup(api) {
19
- * const page = api.getCapability<Page>(PlaywrightCapability.PAGE)
20
- * api.addInstruction(`Current page url is ${page.url()}`)
21
- * },
22
- * })
23
- * ```
24
- */
25
- export const PlaywrightCapability = {
26
- PAGE: 'checkmate.playwright.page',
27
- BROWSER_RUNTIME: 'checkmate.playwright.browser-runtime',
28
- };
29
- /**
30
- * Creates the built-in web extension.
31
- *
32
- * This extension adds browser tools, initial snapshots, and post-tool screenshot handling.
33
- *
34
- * @example
35
- * ```ts
36
- * import { createRunner } from '@xoxoai/checkmate/core'
37
- * import { web } from '@xoxoai/checkmate/playwright'
38
- *
39
- * const ai = createRunner({
40
- * extensions: [web({ page })],
41
- * })
42
- * ```
43
- */
44
- export function web({ page }) {
45
- return defineExtension({
46
- name: 'web',
47
- instructions: [
48
- `If you cannot find elements, call '${BrowserTool.TOOL_SNAPSHOT}' to fetch the latest full snapshot of the page.`,
49
- ],
50
- setup(api) {
51
- const browserRuntime = new BrowserToolRuntime(page);
52
- api.setCapability(PlaywrightCapability.PAGE, page);
53
- api.setCapability(PlaywrightCapability.BROWSER_RUNTIME, browserRuntime);
54
- api.addTool(createBrowserTools(browserRuntime));
55
- },
56
- buildInitialMessages: async ({ step }) => {
57
- const snapshot = await new SnapshotService(page, step).get();
58
- return [new MessageHistory().createSnapshotMessage(snapshot)];
59
- },
60
- handleToolResponses: async ({ aiClient, toolResponses }) => {
61
- let latestSnapshot = null;
62
- for (const { toolResponse } of toolResponses) {
63
- if (toolResponse.snapshot) {
64
- latestSnapshot = toolResponse.snapshot;
65
- }
66
- }
67
- if (latestSnapshot) {
68
- await aiClient.addCurrentSnapshotMessage(latestSnapshot);
69
- }
70
- if (aiClient.getRuntimeConfig().includeScreenshotInSnapshot()) {
71
- const screenshot = await new BrowserScreenshotService(page).getCompressedScreenshot();
72
- await aiClient.addCurrentScreenshotMessage(screenshot.data, screenshot.mimeType ?? 'image/png');
73
- }
74
- },
75
- });
76
- }
77
- /**
78
- * Creates a runner composed with the built-in web extension.
79
- *
80
- * @example
81
- * ```ts
82
- * import { createPlaywrightRunner } from '@xoxoai/checkmate/playwright'
83
- *
84
- * const ai = createPlaywrightRunner(page)
85
- * ```
86
- */
87
- export function createPlaywrightRunner(page) {
88
- return createRunner({ extensions: [web({ page })] });
89
- }
90
- /**
91
- * Playwright Test fixture with the `ai` runner.
92
- *
93
- * @example
94
- * ```ts
95
- * import { test } from '@xoxoai/checkmate/playwright'
96
- *
97
- * test('search flow', async ({ ai }) => {
98
- * await ai.run({
99
- * action: 'Search for playwright docs',
100
- * expect: 'Search results are displayed',
101
- * })
102
- * })
103
- * ```
104
- */
105
- export const test = base.extend({
106
- ai: async ({ page }, use) => {
107
- const ai = createPlaywrightRunner(page);
108
- await use(ai);
109
- await ai.teardown();
110
- },
111
- });
112
- /**
113
- * Re-export of Playwright's `expect` for convenience.
114
- */
115
- export { expect };
116
- //# sourceMappingURL=playwright.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"playwright.js","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAQ,IAAI,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAmB,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAsB,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAA;AAChF,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAErE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IACnC,IAAI,EAAE,2BAA2B;IACjC,eAAe,EAAE,sCAAsC;CAC9C,CAAA;AAkCV;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAuB;IAChD,OAAO,eAAe,CAAC;QACtB,IAAI,EAAE,KAAK;QACX,YAAY,EAAE;YACb,sCAAsC,WAAW,CAAC,aAAa,kDAAkD;SACjH;QACD,KAAK,CAAC,GAAG;YACR,MAAM,cAAc,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACnD,GAAG,CAAC,aAAa,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAClD,GAAG,CAAC,aAAa,CAAC,oBAAoB,CAAC,eAAe,EAAE,cAAc,CAAC,CAAA;YACvE,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAA;QAChD,CAAC;QACD,oBAAoB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAA;YAC5D,OAAO,CAAC,IAAI,cAAc,EAAE,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC9D,CAAC;QACD,mBAAmB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE;YAC1D,IAAI,cAAc,GAAkB,IAAI,CAAA;YAExC,KAAK,MAAM,EAAE,YAAY,EAAE,IAAI,aAAa,EAAE,CAAC;gBAC9C,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;oBAC3B,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAA;gBACvC,CAAC;YACF,CAAC;YAED,IAAI,cAAc,EAAE,CAAC;gBACpB,MAAM,QAAQ,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAA;YACzD,CAAC;YAED,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC,2BAA2B,EAAE,EAAE,CAAC;gBAC/D,MAAM,UAAU,GAAG,MAAM,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,uBAAuB,EAAE,CAAA;gBACrF,MAAM,QAAQ,CAAC,2BAA2B,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAA;YAChG,CAAC;QACF,CAAC;KACD,CAAC,CAAA;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAU;IAChD,OAAO,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;AACrD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAoB;IAClD,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAA;QACb,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAA;IACpB,CAAC;CACD,CAAC,CAAA;AAEF;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -1,274 +0,0 @@
1
- import type { ChatCompletionMessageParam } from 'openai/resources/chat/completions';
2
- import { RuntimeConfig } from '../config/runtime-config.js';
3
- import { ToolRegistry, ToolResponse } from '../tools/registry.js';
4
- import { AgentTool, ToolCall } from '../tools/types.js';
5
- import { ResolveStepResult, Step } from './types.js';
6
- import type { AiClient } from '../ai/client.js';
7
- /**
8
- * One tool execution observed during the runner loop.
9
- *
10
- * Extensions receive these objects in post-tool hooks.
11
- *
12
- * @example
13
- * ```ts
14
- * const execution: ToolExecution = {
15
- * toolCallId: 'call_1',
16
- * toolCall: { name: 'browser_navigate', arguments: { url: 'https://example.com' } },
17
- * toolResponse: { response: 'Navigated to example.com', status: 'success' },
18
- * }
19
- * ```
20
- */
21
- export type ToolExecution = {
22
- /**
23
- * Provider-issued id for the tool call.
24
- */
25
- toolCallId: string;
26
- /**
27
- * Normalized tool call request.
28
- */
29
- toolCall: ToolCall;
30
- /**
31
- * Normalized tool response returned by Checkmate.
32
- */
33
- toolResponse: ToolResponse;
34
- };
35
- /**
36
- * Builds additional initial messages for a step.
37
- *
38
- * Use this to inject snapshots, screenshots, or custom context before the first model request.
39
- *
40
- * @example
41
- * ```ts
42
- * const buildInitialMessages: ExtensionInitialMessagesBuilder = async ({ step }) => [
43
- * { role: 'user', content: `Current business area: checkout for ${step.action}` },
44
- * ]
45
- * ```
46
- */
47
- export type ExtensionInitialMessagesBuilder = (context: {
48
- /**
49
- * Step being executed.
50
- */
51
- step: Step;
52
- }) => Promise<ChatCompletionMessageParam[]> | ChatCompletionMessageParam[];
53
- /**
54
- * Runs after one or more tools finish.
55
- *
56
- * Use this to append fresh snapshots, screenshots, or any other ephemeral follow-up context.
57
- *
58
- * @example
59
- * ```ts
60
- * const handleToolResponses: ExtensionToolResponsesHook = async ({ aiClient, toolResponses }) => {
61
- * const snapshot = toolResponses.at(-1)?.toolResponse.snapshot
62
- * if (snapshot) {
63
- * await aiClient.addCurrentSnapshotMessage(snapshot)
64
- * }
65
- * }
66
- * ```
67
- */
68
- export type ExtensionToolResponsesHook = (context: {
69
- /**
70
- * Active AI client for the current step.
71
- */
72
- aiClient: AiClient;
73
- /**
74
- * Step being executed.
75
- */
76
- step: Step;
77
- /**
78
- * Callback used to finish the step.
79
- */
80
- resolveStepResult: ResolveStepResult;
81
- /**
82
- * Tool executions that just completed.
83
- */
84
- toolResponses: ToolExecution[];
85
- }) => Promise<void> | void;
86
- /**
87
- * Cleans up resources created by an extension.
88
- *
89
- * @example
90
- * ```ts
91
- * const teardown: ExtensionTeardown = async () => {
92
- * await browser.close()
93
- * }
94
- * ```
95
- */
96
- export type ExtensionTeardown = () => Promise<void> | void;
97
- /**
98
- * API exposed to an extension during setup.
99
- *
100
- * @example
101
- * ```ts
102
- * const extension = defineExtension({
103
- * name: 'custom',
104
- * setup(api) {
105
- * api.addInstruction('Prefer visible labels over generated ids.')
106
- * },
107
- * })
108
- * ```
109
- */
110
- export type ExtensionSetupApi = {
111
- /**
112
- * Runtime config used by the current runner.
113
- */
114
- runtimeConfig: RuntimeConfig;
115
- /**
116
- * Registers one or more tools.
117
- */
118
- addTool: (tool: AgentTool | AgentTool[]) => void;
119
- /**
120
- * Appends a system-level instruction for the model.
121
- */
122
- addInstruction: (instruction: string) => void;
123
- /**
124
- * Adds a builder for extra initial messages.
125
- */
126
- addInitialMessages: (builder: ExtensionInitialMessagesBuilder) => void;
127
- /**
128
- * Adds a hook that runs after tool execution.
129
- */
130
- addToolResponsesHook: (hook: ExtensionToolResponsesHook) => void;
131
- /**
132
- * Publishes a capability for other extensions to consume.
133
- */
134
- setCapability: (name: string, value: unknown) => void;
135
- /**
136
- * Reads a capability published by another extension.
137
- */
138
- getCapability: <T>(name: string) => T;
139
- /**
140
- * Registers teardown work for the runner lifecycle.
141
- */
142
- onTeardown: (teardown: ExtensionTeardown) => void;
143
- };
144
- /**
145
- * Shape used to define a Checkmate extension.
146
- *
147
- * @example
148
- * ```ts
149
- * const extension = defineExtension({
150
- * name: 'api-health',
151
- * instructions: ['Check API health before asserting UI state.'],
152
- * tools: [apiHealthTool],
153
- * })
154
- * ```
155
- */
156
- export type ExtensionDefinition = {
157
- /**
158
- * Stable extension name.
159
- */
160
- name: string;
161
- /**
162
- * Tools contributed by this extension.
163
- */
164
- tools?: AgentTool | AgentTool[];
165
- /**
166
- * Additional system instructions for the model.
167
- */
168
- instructions?: string[];
169
- /**
170
- * Setup hook used to register capabilities, tools, and hooks.
171
- */
172
- setup?: (api: ExtensionSetupApi) => void;
173
- /**
174
- * Optional builder for initial step messages.
175
- */
176
- buildInitialMessages?: ExtensionInitialMessagesBuilder;
177
- /**
178
- * Optional hook that runs after tool execution.
179
- */
180
- handleToolResponses?: ExtensionToolResponsesHook;
181
- /**
182
- * Optional teardown hook.
183
- */
184
- teardown?: ExtensionTeardown;
185
- };
186
- /**
187
- * Additional behavior layered on top of an existing extension.
188
- *
189
- * @example
190
- * ```ts
191
- * const customWeb = web({ page }).extend({
192
- * instructions: ['Prefer visible labels over generated ids.'],
193
- * })
194
- * ```
195
- */
196
- export type ExtensionOverride = Omit<ExtensionDefinition, 'name'> & {
197
- /**
198
- * Optional replacement name for the derived extension.
199
- */
200
- name?: string;
201
- };
202
- /**
203
- * A composable Checkmate extension.
204
- *
205
- * Use `defineExtension()` to create one, then pass it to `createRunner()`.
206
- *
207
- * @example
208
- * ```ts
209
- * const extension = defineExtension({
210
- * name: 'custom',
211
- * instructions: ['Prefer visible labels over generated ids.'],
212
- * })
213
- * ```
214
- */
215
- export type CheckmateExtension = {
216
- /**
217
- * Stable extension name.
218
- */
219
- name: string;
220
- /**
221
- * Applies the extension to the runner host.
222
- */
223
- apply: (api: ExtensionSetupApi) => void;
224
- /**
225
- * Derives a new extension by layering more behavior on top.
226
- *
227
- * @example
228
- * ```ts
229
- * const customWeb = web({ page }).extend({
230
- * instructions: ['Use customer-specific naming where available.'],
231
- * })
232
- * ```
233
- */
234
- extend: (override: ExtensionOverride) => CheckmateExtension;
235
- };
236
- /**
237
- * Creates a composable Checkmate extension.
238
- *
239
- * @example
240
- * ```ts
241
- * import { createRunner, defineExtension } from '@xoxoai/checkmate/core'
242
- * import { web } from '@xoxoai/checkmate/playwright'
243
- *
244
- * const extension = defineExtension({
245
- * name: 'checkout-policy',
246
- * instructions: ['Prefer visible checkout totals over inferred values.'],
247
- * })
248
- *
249
- * const ai = createRunner({
250
- * extensions: [web({ page }), extension],
251
- * })
252
- * ```
253
- */
254
- export declare function defineExtension(definition: ExtensionDefinition): CheckmateExtension;
255
- export declare class ExtensionHost {
256
- private readonly runtimeConfig;
257
- private readonly toolRegistry;
258
- private readonly instructions;
259
- private readonly initialMessagesBuilders;
260
- private readonly toolResponsesHooks;
261
- private readonly teardowns;
262
- private readonly capabilities;
263
- constructor(runtimeConfig: RuntimeConfig, toolRegistry: ToolRegistry, extensions: CheckmateExtension[]);
264
- getInstructions(): string[];
265
- buildInitialMessages(step: Step): Promise<ChatCompletionMessageParam[]>;
266
- handleToolResponses(context: {
267
- aiClient: AiClient;
268
- step: Step;
269
- resolveStepResult: ResolveStepResult;
270
- toolResponses: ToolExecution[];
271
- }): Promise<void>;
272
- teardown(): Promise<void>;
273
- }
274
- //# sourceMappingURL=extension.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/runtime/extension.ts"],"names":[],"mappings":"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"}
@@ -1,171 +0,0 @@
1
- /**
2
- * Creates a composable Checkmate extension.
3
- *
4
- * @example
5
- * ```ts
6
- * import { createRunner, defineExtension } from '@xoxoai/checkmate/core'
7
- * import { web } from '@xoxoai/checkmate/playwright'
8
- *
9
- * const extension = defineExtension({
10
- * name: 'checkout-policy',
11
- * instructions: ['Prefer visible checkout totals over inferred values.'],
12
- * })
13
- *
14
- * const ai = createRunner({
15
- * extensions: [web({ page }), extension],
16
- * })
17
- * ```
18
- */
19
- export function defineExtension(definition) {
20
- return {
21
- name: definition.name,
22
- apply(api) {
23
- registerExtension(api, definition);
24
- },
25
- extend(override) {
26
- return defineExtension(mergeExtensionDefinition(definition, override));
27
- },
28
- };
29
- }
30
- export class ExtensionHost {
31
- runtimeConfig;
32
- toolRegistry;
33
- instructions = [];
34
- initialMessagesBuilders = [];
35
- toolResponsesHooks = [];
36
- teardowns = [];
37
- capabilities = new Map();
38
- constructor(runtimeConfig, toolRegistry, extensions) {
39
- this.runtimeConfig = runtimeConfig;
40
- this.toolRegistry = toolRegistry;
41
- const api = {
42
- runtimeConfig,
43
- addTool: (tool) => this.toolRegistry.register(tool),
44
- addInstruction: (instruction) => {
45
- if (instruction.trim().length > 0) {
46
- this.instructions.push(instruction);
47
- }
48
- },
49
- addInitialMessages: (builder) => {
50
- this.initialMessagesBuilders.push(builder);
51
- },
52
- addToolResponsesHook: (hook) => {
53
- this.toolResponsesHooks.push(hook);
54
- },
55
- setCapability: (name, value) => {
56
- this.capabilities.set(name, value);
57
- },
58
- getCapability: (name) => {
59
- if (!this.capabilities.has(name)) {
60
- throw new Error(`Extension capability '${name}' is not available`);
61
- }
62
- return this.capabilities.get(name);
63
- },
64
- onTeardown: (teardown) => {
65
- this.teardowns.push(teardown);
66
- },
67
- };
68
- for (const extension of extensions) {
69
- extension.apply(api);
70
- }
71
- }
72
- getInstructions() {
73
- return [...this.instructions];
74
- }
75
- async buildInitialMessages(step) {
76
- const messages = [];
77
- for (const buildInitialMessages of this.initialMessagesBuilders) {
78
- messages.push(...(await buildInitialMessages({ step })));
79
- }
80
- return messages;
81
- }
82
- async handleToolResponses(context) {
83
- for (const handleToolResponses of this.toolResponsesHooks) {
84
- await handleToolResponses(context);
85
- }
86
- }
87
- async teardown() {
88
- for (const teardown of [...this.teardowns].reverse()) {
89
- await teardown();
90
- }
91
- }
92
- }
93
- function registerExtension(api, definition) {
94
- for (const tool of asArray(definition.tools)) {
95
- api.addTool(tool);
96
- }
97
- for (const instruction of definition.instructions ?? []) {
98
- api.addInstruction(instruction);
99
- }
100
- if (definition.buildInitialMessages) {
101
- api.addInitialMessages(definition.buildInitialMessages);
102
- }
103
- if (definition.handleToolResponses) {
104
- api.addToolResponsesHook(definition.handleToolResponses);
105
- }
106
- if (definition.teardown) {
107
- api.onTeardown(definition.teardown);
108
- }
109
- definition.setup?.(api);
110
- }
111
- function mergeExtensionDefinition(base, override) {
112
- return {
113
- name: override.name ?? base.name,
114
- tools: [...asArray(base.tools), ...asArray(override.tools)],
115
- instructions: [...(base.instructions ?? []), ...(override.instructions ?? [])],
116
- setup: chainSync(base.setup, override.setup),
117
- buildInitialMessages: combineInitialMessages(base.buildInitialMessages, override.buildInitialMessages),
118
- handleToolResponses: chainAsync(base.handleToolResponses, override.handleToolResponses),
119
- teardown: chainAsync(base.teardown, override.teardown),
120
- };
121
- }
122
- function chainSync(first, second) {
123
- if (!first) {
124
- return second;
125
- }
126
- if (!second) {
127
- return (...args) => {
128
- first(...args);
129
- };
130
- }
131
- return (...args) => {
132
- first(...args);
133
- second(...args);
134
- };
135
- }
136
- function chainAsync(first, second) {
137
- if (!first) {
138
- return second
139
- ? async (...args) => {
140
- await second(...args);
141
- }
142
- : undefined;
143
- }
144
- if (!second) {
145
- return async (...args) => {
146
- await first(...args);
147
- };
148
- }
149
- return async (...args) => {
150
- await first(...args);
151
- await second(...args);
152
- };
153
- }
154
- function combineInitialMessages(first, second) {
155
- if (!first) {
156
- return second;
157
- }
158
- if (!second) {
159
- return first;
160
- }
161
- return async (context) => {
162
- return [...(await first(context)), ...(await second(context))];
163
- };
164
- }
165
- function asArray(value) {
166
- if (!value) {
167
- return [];
168
- }
169
- return Array.isArray(value) ? value : [value];
170
- }
171
- //# sourceMappingURL=extension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../src/runtime/extension.ts"],"names":[],"mappings":"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"}