@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.
- package/README.md +259 -224
- package/bin/checkmate.js +1 -1
- package/dist/ai/client.d.ts +45 -30
- package/dist/ai/client.d.ts.map +1 -1
- package/dist/ai/client.js +198 -129
- package/dist/ai/client.js.map +1 -1
- package/dist/ai/message-handler.d.ts +5 -7
- package/dist/ai/message-handler.d.ts.map +1 -1
- package/dist/ai/message-handler.js +38 -21
- package/dist/ai/message-handler.js.map +1 -1
- package/dist/ai/message-history.d.ts +4 -6
- package/dist/ai/message-history.d.ts.map +1 -1
- package/dist/ai/message-history.js +18 -21
- package/dist/ai/message-history.js.map +1 -1
- package/dist/ai/rate-limit-policy.d.ts +5 -3
- package/dist/ai/rate-limit-policy.d.ts.map +1 -1
- package/dist/ai/rate-limit-policy.js +24 -7
- package/dist/ai/rate-limit-policy.js.map +1 -1
- package/dist/ai/tool-response-handler.d.ts +11 -16
- package/dist/ai/tool-response-handler.d.ts.map +1 -1
- package/dist/ai/tool-response-handler.js +59 -28
- package/dist/ai/tool-response-handler.js.map +1 -1
- package/dist/ai/turn-processor.d.ts +34 -0
- package/dist/ai/turn-processor.d.ts.map +1 -0
- package/dist/ai/turn-processor.js +107 -0
- package/dist/ai/turn-processor.js.map +1 -0
- package/dist/api/allocate-run-identity.d.ts +8 -0
- package/dist/api/allocate-run-identity.d.ts.map +1 -0
- package/dist/api/allocate-run-identity.js +10 -0
- package/dist/api/allocate-run-identity.js.map +1 -0
- package/dist/api/execute-prepared-run.d.ts +22 -0
- package/dist/api/execute-prepared-run.d.ts.map +1 -0
- package/dist/api/execute-prepared-run.js +160 -0
- package/dist/api/execute-prepared-run.js.map +1 -0
- package/dist/api/index.d.ts +25 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +69 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/prepare-run.d.ts +44 -0
- package/dist/api/prepare-run.d.ts.map +1 -0
- package/dist/api/prepare-run.js +261 -0
- package/dist/api/prepare-run.js.map +1 -0
- package/dist/cli/diagnostic-relay.d.ts +6 -0
- package/dist/cli/diagnostic-relay.d.ts.map +1 -0
- package/dist/cli/diagnostic-relay.js +6 -0
- package/dist/cli/diagnostic-relay.js.map +1 -0
- package/dist/cli/main.d.ts +21 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +166 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/protocol.d.ts +57 -0
- package/dist/cli/protocol.d.ts.map +1 -0
- package/dist/cli/protocol.js +116 -0
- package/dist/cli/protocol.js.map +1 -0
- package/dist/cli/reconcile-result.d.ts +13 -0
- package/dist/cli/reconcile-result.d.ts.map +1 -0
- package/dist/cli/reconcile-result.js +300 -0
- package/dist/cli/reconcile-result.js.map +1 -0
- package/dist/cli/run-parent.d.ts +37 -0
- package/dist/cli/run-parent.d.ts.map +1 -0
- package/dist/cli/run-parent.js +491 -0
- package/dist/cli/run-parent.js.map +1 -0
- package/dist/cli/signals.d.ts +36 -0
- package/dist/cli/signals.d.ts.map +1 -0
- package/dist/cli/signals.js +85 -0
- package/dist/cli/signals.js.map +1 -0
- package/dist/cli/static-commands.d.ts +11 -0
- package/dist/cli/static-commands.d.ts.map +1 -0
- package/dist/cli/static-commands.js +83 -0
- package/dist/cli/static-commands.js.map +1 -0
- package/dist/cli/worker-stream-guard.d.ts +20 -0
- package/dist/cli/worker-stream-guard.d.ts.map +1 -0
- package/dist/cli/worker-stream-guard.js +41 -0
- package/dist/cli/worker-stream-guard.js.map +1 -0
- package/dist/cli/worker.d.ts +3 -0
- package/dist/cli/worker.d.ts.map +1 -0
- package/dist/cli/worker.js +111 -0
- package/dist/cli/worker.js.map +1 -0
- package/dist/config/ingestion.d.ts +58 -0
- package/dist/config/ingestion.d.ts.map +1 -0
- package/dist/config/ingestion.js +283 -0
- package/dist/config/ingestion.js.map +1 -0
- package/dist/config/manifest.d.ts +20 -0
- package/dist/config/manifest.d.ts.map +1 -0
- package/dist/config/manifest.js +91 -0
- package/dist/config/manifest.js.map +1 -0
- package/dist/config/model-egress.d.ts +10 -0
- package/dist/config/model-egress.d.ts.map +1 -0
- package/dist/config/model-egress.js +62 -0
- package/dist/config/model-egress.js.map +1 -0
- package/dist/config/package-resolution.d.ts +4 -0
- package/dist/config/package-resolution.d.ts.map +1 -0
- package/dist/config/package-resolution.js +24 -0
- package/dist/config/package-resolution.js.map +1 -0
- package/dist/config/policy.d.ts +44 -0
- package/dist/config/policy.d.ts.map +1 -0
- package/dist/config/policy.js +141 -0
- package/dist/config/policy.js.map +1 -0
- package/dist/config/record.d.ts +4 -0
- package/dist/config/record.d.ts.map +1 -0
- package/dist/config/record.js +10 -0
- package/dist/config/record.js.map +1 -0
- package/dist/config/secrets.d.ts +11 -0
- package/dist/config/secrets.d.ts.map +1 -0
- package/dist/config/secrets.js +42 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/contracts/diagnostics.d.ts +4 -0
- package/dist/contracts/diagnostics.d.ts.map +1 -0
- package/dist/contracts/diagnostics.js +31 -0
- package/dist/contracts/diagnostics.js.map +1 -0
- package/dist/contracts/serialize.d.ts +2 -0
- package/dist/contracts/serialize.d.ts.map +1 -0
- package/dist/contracts/serialize.js +90 -0
- package/dist/contracts/serialize.js.map +1 -0
- package/dist/contracts/types.d.ts +316 -0
- package/dist/contracts/types.d.ts.map +1 -0
- package/dist/contracts/types.js +74 -0
- package/dist/contracts/types.js.map +1 -0
- package/dist/contracts/validator.d.ts +8 -0
- package/dist/contracts/validator.d.ts.map +1 -0
- package/dist/contracts/validator.js +71 -0
- package/dist/contracts/validator.js.map +1 -0
- package/dist/driver.d.ts +97 -0
- package/dist/driver.d.ts.map +1 -0
- package/dist/driver.js +24 -0
- package/dist/driver.js.map +1 -0
- package/dist/drivers/descriptor.d.ts +15 -0
- package/dist/drivers/descriptor.d.ts.map +1 -0
- package/dist/drivers/descriptor.js +122 -0
- package/dist/drivers/descriptor.js.map +1 -0
- package/dist/drivers/loader.d.ts +18 -0
- package/dist/drivers/loader.d.ts.map +1 -0
- package/dist/drivers/loader.js +97 -0
- package/dist/drivers/loader.js.map +1 -0
- package/dist/drivers/web/checkmate-driver.json +44 -0
- package/dist/drivers/web/index.d.ts +6 -0
- package/dist/drivers/web/index.d.ts.map +1 -0
- package/dist/drivers/web/index.js +27 -0
- package/dist/drivers/web/index.js.map +1 -0
- package/dist/drivers/web/session.d.ts +22 -0
- package/dist/drivers/web/session.d.ts.map +1 -0
- package/dist/drivers/web/session.js +130 -0
- package/dist/drivers/web/session.js.map +1 -0
- package/dist/drivers/web/tools/network-request-recorder.d.ts +46 -0
- package/dist/drivers/web/tools/network-request-recorder.d.ts.map +1 -0
- package/dist/drivers/web/tools/network-request-recorder.js +164 -0
- package/dist/drivers/web/tools/network-request-recorder.js.map +1 -0
- package/dist/{tools/browser → drivers/web/tools}/screenshot-service.d.ts +1 -1
- package/dist/drivers/web/tools/screenshot-service.d.ts.map +1 -0
- package/dist/drivers/web/tools/screenshot-service.js.map +1 -0
- package/dist/drivers/web/tools/snapshot-filter/index.d.ts.map +1 -0
- package/dist/drivers/web/tools/snapshot-filter/index.js.map +1 -0
- package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.d.ts.map +1 -0
- package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.js.map +1 -0
- package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.d.ts +5 -0
- package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.d.ts.map +1 -0
- package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.js +56 -0
- package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.js.map +1 -0
- package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.d.ts.map +1 -0
- package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.js.map +1 -0
- package/dist/drivers/web/tools/snapshot-service.d.ts +31 -0
- package/dist/drivers/web/tools/snapshot-service.d.ts.map +1 -0
- package/dist/{tools/browser → drivers/web/tools}/snapshot-service.js +36 -7
- package/dist/drivers/web/tools/snapshot-service.js.map +1 -0
- package/dist/drivers/web/tools/tool.d.ts +76 -0
- package/dist/drivers/web/tools/tool.d.ts.map +1 -0
- package/dist/drivers/web/tools/tool.js +562 -0
- package/dist/drivers/web/tools/tool.js.map +1 -0
- package/dist/drivers/web/tools/transient-state-tracker.d.ts +26 -0
- package/dist/drivers/web/tools/transient-state-tracker.d.ts.map +1 -0
- package/dist/{tools/browser → drivers/web/tools}/transient-state-tracker.js +54 -19
- package/dist/drivers/web/tools/transient-state-tracker.js.map +1 -0
- package/dist/drivers/web/tools/types.d.ts +11 -0
- package/dist/drivers/web/tools/types.d.ts.map +1 -0
- package/dist/drivers/web/tools/types.js +2 -0
- package/dist/drivers/web/tools/types.js.map +1 -0
- package/dist/evidence/atomic-file.d.ts +23 -0
- package/dist/evidence/atomic-file.d.ts.map +1 -0
- package/dist/evidence/atomic-file.js +104 -0
- package/dist/evidence/atomic-file.js.map +1 -0
- package/dist/evidence/layout.d.ts +30 -0
- package/dist/evidence/layout.d.ts.map +1 -0
- package/dist/evidence/layout.js +152 -0
- package/dist/evidence/layout.js.map +1 -0
- package/dist/evidence/retention.d.ts +5 -0
- package/dist/evidence/retention.d.ts.map +1 -0
- package/dist/evidence/retention.js +10 -0
- package/dist/evidence/retention.js.map +1 -0
- package/dist/evidence/store.d.ts +101 -0
- package/dist/evidence/store.d.ts.map +1 -0
- package/dist/evidence/store.js +375 -0
- package/dist/evidence/store.js.map +1 -0
- package/dist/evidence/terminal-finalizer.d.ts +19 -0
- package/dist/evidence/terminal-finalizer.d.ts.map +1 -0
- package/dist/evidence/terminal-finalizer.js +56 -0
- package/dist/evidence/terminal-finalizer.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/logging/invocation-logger.d.ts +4 -0
- package/dist/logging/invocation-logger.d.ts.map +1 -0
- package/dist/logging/invocation-logger.js +25 -0
- package/dist/logging/invocation-logger.js.map +1 -0
- package/dist/logging/types.d.ts +8 -0
- package/dist/logging/types.d.ts.map +1 -0
- package/dist/logging/types.js +7 -0
- package/dist/logging/types.js.map +1 -0
- package/dist/redaction/diagnostic-sanitizer.d.ts +7 -0
- package/dist/redaction/diagnostic-sanitizer.d.ts.map +1 -0
- package/dist/redaction/diagnostic-sanitizer.js +42 -0
- package/dist/redaction/diagnostic-sanitizer.js.map +1 -0
- package/dist/redaction/redactor.d.ts +40 -0
- package/dist/redaction/redactor.d.ts.map +1 -0
- package/dist/redaction/redactor.js +176 -0
- package/dist/redaction/redactor.js.map +1 -0
- package/dist/redaction/scrub.d.ts +29 -0
- package/dist/redaction/scrub.d.ts.map +1 -0
- package/dist/redaction/scrub.js +54 -0
- package/dist/redaction/scrub.js.map +1 -0
- package/dist/runtime/config.d.ts +15 -0
- package/dist/runtime/config.d.ts.map +1 -0
- package/dist/runtime/config.js +2 -0
- package/dist/runtime/config.js.map +1 -0
- package/dist/runtime/driver-boundary.d.ts +16 -0
- package/dist/runtime/driver-boundary.d.ts.map +1 -0
- package/dist/runtime/driver-boundary.js +71 -0
- package/dist/runtime/driver-boundary.js.map +1 -0
- package/dist/runtime/driver-session.d.ts +9 -0
- package/dist/runtime/driver-session.d.ts.map +1 -0
- package/dist/runtime/driver-session.js +64 -0
- package/dist/runtime/driver-session.js.map +1 -0
- package/dist/runtime/internal-step-evidence.d.ts +30 -0
- package/dist/runtime/internal-step-evidence.d.ts.map +1 -0
- package/dist/runtime/internal-step-evidence.js +82 -0
- package/dist/runtime/internal-step-evidence.js.map +1 -0
- package/dist/runtime/result-adapter.d.ts +9 -0
- package/dist/runtime/result-adapter.d.ts.map +1 -0
- package/dist/runtime/result-adapter.js +77 -0
- package/dist/runtime/result-adapter.js.map +1 -0
- package/dist/runtime/runner.d.ts +35 -88
- package/dist/runtime/runner.d.ts.map +1 -1
- package/dist/runtime/runner.js +60 -74
- package/dist/runtime/runner.js.map +1 -1
- package/dist/runtime/scenario-control.d.ts +40 -0
- package/dist/runtime/scenario-control.d.ts.map +1 -0
- package/dist/runtime/scenario-control.js +94 -0
- package/dist/runtime/scenario-control.js.map +1 -0
- package/dist/runtime/scenario-runner.d.ts +39 -0
- package/dist/runtime/scenario-runner.d.ts.map +1 -0
- package/dist/runtime/scenario-runner.js +273 -0
- package/dist/runtime/scenario-runner.js.map +1 -0
- package/dist/runtime/scenario-state.d.ts +55 -0
- package/dist/runtime/scenario-state.d.ts.map +1 -0
- package/dist/runtime/scenario-state.js +128 -0
- package/dist/runtime/scenario-state.js.map +1 -0
- package/dist/runtime/step-execution.d.ts +24 -14
- package/dist/runtime/step-execution.d.ts.map +1 -1
- package/dist/runtime/step-execution.js +130 -36
- package/dist/runtime/step-execution.js.map +1 -1
- package/dist/runtime/text.d.ts +10 -0
- package/dist/runtime/text.d.ts.map +1 -0
- package/dist/runtime/text.js +25 -0
- package/dist/runtime/text.js.map +1 -0
- package/dist/runtime/types.d.ts +50 -76
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/usage-tracker.d.ts +37 -0
- package/dist/runtime/usage-tracker.d.ts.map +1 -0
- package/dist/runtime/usage-tracker.js +110 -0
- package/dist/runtime/usage-tracker.js.map +1 -0
- package/dist/tools/define-agent-tool.d.ts +3 -28
- package/dist/tools/define-agent-tool.d.ts.map +1 -1
- package/dist/tools/define-agent-tool.js +3 -28
- package/dist/tools/define-agent-tool.js.map +1 -1
- package/dist/tools/dispatcher.d.ts +11 -3
- package/dist/tools/dispatcher.d.ts.map +1 -1
- package/dist/tools/dispatcher.js +50 -8
- package/dist/tools/dispatcher.js.map +1 -1
- package/dist/tools/registry.d.ts +8 -10
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +19 -11
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/step/result-tool.d.ts.map +1 -1
- package/dist/tools/step/result-tool.js +8 -6
- package/dist/tools/step/result-tool.js.map +1 -1
- package/dist/tools/tool-contract.d.ts +1 -1
- package/dist/tools/tool-contract.d.ts.map +1 -1
- package/dist/tools/tool-contract.js.map +1 -1
- package/dist/tools/types.d.ts +77 -6
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/docs/CLI.md +59 -0
- package/docs/CONFIGURATION.md +91 -0
- package/docs/DRIVERS.md +75 -0
- package/docs/EVIDENCE.md +62 -0
- package/package.json +51 -59
- package/schemas/checkmate-config.v1.json +176 -0
- package/schemas/describe-result.v1.json +414 -0
- package/schemas/driver-descriptor.v1.json +66 -0
- package/schemas/run-request.v1.json +67 -0
- package/schemas/run-result.v1.json +333 -0
- package/schemas/validation-result.v1.json +86 -0
- package/dist/ai/response-processor.d.ts +0 -20
- package/dist/ai/response-processor.d.ts.map +0 -1
- package/dist/ai/response-processor.js +0 -62
- package/dist/ai/response-processor.js.map +0 -1
- package/dist/ai/token-pricing.d.ts +0 -13
- package/dist/ai/token-pricing.d.ts.map +0 -1
- package/dist/ai/token-pricing.js +0 -348
- package/dist/ai/token-pricing.js.map +0 -1
- package/dist/ai/token-tracker.d.ts +0 -33
- package/dist/ai/token-tracker.d.ts.map +0 -1
- package/dist/ai/token-tracker.js +0 -138
- package/dist/ai/token-tracker.js.map +0 -1
- package/dist/cli/create-examples.d.ts +0 -21
- package/dist/cli/create-examples.d.ts.map +0 -1
- package/dist/cli/create-examples.js +0 -116
- package/dist/cli/create-examples.js.map +0 -1
- package/dist/cli.d.ts +0 -15
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -69
- package/dist/cli.js.map +0 -1
- package/dist/config/runtime-config.d.ts +0 -21
- package/dist/config/runtime-config.d.ts.map +0 -1
- package/dist/config/runtime-config.js +0 -98
- package/dist/config/runtime-config.js.map +0 -1
- package/dist/core.d.ts +0 -8
- package/dist/core.d.ts.map +0 -1
- package/dist/core.js +0 -4
- package/dist/core.js.map +0 -1
- package/dist/integrations/salesforce/authenticator.d.ts +0 -27
- package/dist/integrations/salesforce/authenticator.d.ts.map +0 -1
- package/dist/integrations/salesforce/authenticator.js +0 -27
- package/dist/integrations/salesforce/authenticator.js.map +0 -1
- package/dist/integrations/salesforce/cli-handler.d.ts +0 -14
- package/dist/integrations/salesforce/cli-handler.d.ts.map +0 -1
- package/dist/integrations/salesforce/cli-handler.js +0 -50
- package/dist/integrations/salesforce/cli-handler.js.map +0 -1
- package/dist/logging/index.d.ts +0 -2
- package/dist/logging/index.d.ts.map +0 -1
- package/dist/logging/index.js +0 -4
- package/dist/logging/index.js.map +0 -1
- package/dist/logging/logger.d.ts +0 -5
- package/dist/logging/logger.d.ts.map +0 -1
- package/dist/logging/logger.js +0 -15
- package/dist/logging/logger.js.map +0 -1
- package/dist/playwright.d.ts +0 -102
- package/dist/playwright.d.ts.map +0 -1
- package/dist/playwright.js +0 -116
- package/dist/playwright.js.map +0 -1
- package/dist/runtime/extension.d.ts +0 -274
- package/dist/runtime/extension.d.ts.map +0 -1
- package/dist/runtime/extension.js +0 -171
- package/dist/runtime/extension.js.map +0 -1
- package/dist/salesforce.d.ts +0 -71
- package/dist/salesforce.d.ts.map +0 -1
- package/dist/salesforce.js +0 -73
- package/dist/salesforce.js.map +0 -1
- package/dist/tools/browser/screenshot-service.d.ts.map +0 -1
- package/dist/tools/browser/screenshot-service.js.map +0 -1
- package/dist/tools/browser/snapshot-filter/index.d.ts.map +0 -1
- package/dist/tools/browser/snapshot-filter/index.js.map +0 -1
- package/dist/tools/browser/snapshot-filter/semantic-scorer.d.ts.map +0 -1
- package/dist/tools/browser/snapshot-filter/semantic-scorer.js.map +0 -1
- package/dist/tools/browser/snapshot-filter/snapshot-filter.d.ts +0 -4
- package/dist/tools/browser/snapshot-filter/snapshot-filter.d.ts.map +0 -1
- package/dist/tools/browser/snapshot-filter/snapshot-filter.js +0 -57
- package/dist/tools/browser/snapshot-filter/snapshot-filter.js.map +0 -1
- package/dist/tools/browser/snapshot-filter/tree-reconstructor.d.ts.map +0 -1
- package/dist/tools/browser/snapshot-filter/tree-reconstructor.js.map +0 -1
- package/dist/tools/browser/snapshot-service.d.ts +0 -19
- package/dist/tools/browser/snapshot-service.d.ts.map +0 -1
- package/dist/tools/browser/snapshot-service.js.map +0 -1
- package/dist/tools/browser/tool.d.ts +0 -34
- package/dist/tools/browser/tool.d.ts.map +0 -1
- package/dist/tools/browser/tool.js +0 -226
- package/dist/tools/browser/tool.js.map +0 -1
- package/dist/tools/browser/transient-state-tracker.d.ts +0 -16
- package/dist/tools/browser/transient-state-tracker.d.ts.map +0 -1
- package/dist/tools/browser/transient-state-tracker.js.map +0 -1
- package/dist/tools/salesforce/login-tool.d.ts +0 -7
- package/dist/tools/salesforce/login-tool.d.ts.map +0 -1
- package/dist/tools/salesforce/login-tool.js +0 -25
- package/dist/tools/salesforce/login-tool.js.map +0 -1
- package/docs/EXTENSIONS.md +0 -232
- package/docs/GUIDE.md +0 -465
- package/docs/ROADMAP.md +0 -47
- package/playwright.config.ts +0 -39
- package/test/examples/salesforce/trial-dev-org.spec.ts +0 -82
- package/test/examples/web/website-testing.spec.ts +0 -281
- /package/dist/{tools/browser → drivers/web/tools}/screenshot-service.js +0 -0
- /package/dist/{tools/browser → drivers/web/tools}/snapshot-filter/index.d.ts +0 -0
- /package/dist/{tools/browser → drivers/web/tools}/snapshot-filter/index.js +0 -0
- /package/dist/{tools/browser → drivers/web/tools}/snapshot-filter/semantic-scorer.d.ts +0 -0
- /package/dist/{tools/browser → drivers/web/tools}/snapshot-filter/semantic-scorer.js +0 -0
- /package/dist/{tools/browser → drivers/web/tools}/snapshot-filter/tree-reconstructor.d.ts +0 -0
- /package/dist/{tools/browser → drivers/web/tools}/snapshot-filter/tree-reconstructor.js +0 -0
package/README.md
CHANGED
|
@@ -1,256 +1,291 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
AI test automation that actually works. Write tests in plain English, without locators, and with less code.
|
|
4
|
-
|
|
5
|
-

|
|
6
|
-

|
|
7
|
-

|
|
8
|
-

|
|
9
|
-
[](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
|
-
|
|
3
|
+
## _Checkmate - a harness for agentic acceptance_
|
|
43
4
|
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
8
|
+
#
|
|
58
9
|
|
|
59
|
-
|
|
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
|
-
|
|
12
|
+
## Install
|
|
65
13
|
|
|
66
14
|
```bash
|
|
67
|
-
|
|
15
|
+
npm install @xoxoai/checkmate
|
|
68
16
|
```
|
|
69
17
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
-
|
|
55
|
+
#### Run:
|
|
77
56
|
|
|
78
57
|
```bash
|
|
79
|
-
|
|
58
|
+
checkmate run scenario.json
|
|
80
59
|
```
|
|
81
60
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
261
|
+
## Drivers
|
|
155
262
|
|
|
156
|
-
|
|
263
|
+
#### Checkmate is designed around domain-specific drivers.
|
|
157
264
|
|
|
158
|
-
|
|
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
|
-
|
|
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
|
-
|
|
269
|
+
## Commands
|
|
165
270
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
281
|
+
## Docs
|
|
236
282
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
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
|
|
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
package/dist/ai/client.d.ts
CHANGED
|
@@ -1,38 +1,51 @@
|
|
|
1
|
-
import { ChatCompletion, ChatCompletionMessageParam } from 'openai/resources/chat/completions';
|
|
2
|
-
import { RuntimeConfig } from '../
|
|
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
|
|
5
|
-
import { ExtensionHost } from '../runtime/extension.js';
|
|
6
|
+
import { Step } from '../runtime/types.js';
|
|
6
7
|
export type AiClientDependencies = {
|
|
7
|
-
|
|
8
|
+
config: RuntimeConfig;
|
|
8
9
|
toolRegistry: ToolRegistry;
|
|
9
|
-
|
|
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
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
package/dist/ai/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/ai/client.ts"],"names":[],"mappings":"AACA,OAAO,EACN,cAAc,
|
|
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"}
|