Repository files navigation

@smooai/testing — Report test results to Smoo AI

npmSmoo AIlicense

downloadsTypeScript

Features · Install · Usage · CLI · Platform


Report test results to Smoo AI and manage your test program from the command line or in code. Pipe CTRF reports straight from CI, or drive runs, cases, environments, and deployments programmatically.

✨ Features

  • Report CTRF test results from any test runner, straight from CI
  • Manage test runs, cases, environments, and deployments
  • Use it as a CLI or as a typed TypeScript library
  • --json output on every command (auto-enabled when piped)
  • M2M auth via login or environment variables for CI/CD

📦 Install

npm install @smooai/testing
# or
pnpm add @smooai/testing

🚀 Usage

CLI: report test results

# Authenticate
npx @smooai/testing login \
--client-id <M2M_CLIENT_ID> \
--client-secret <M2M_CLIENT_SECRET> \
--org-id <ORG_ID># Report CTRF test results
npx @smooai/testing runs report ctrf-report.json \
--environment production \
--name "PR #42 Tests"

Library: programmatic usage

import{SmooTestingClient}from'@smooai/testing';constclient=newSmooTestingClient({clientId: process.env.SMOOAI_CLIENT_ID,clientSecret: process.env.SMOOAI_CLIENT_SECRET,orgId: process.env.SMOOAI_ORG_ID,});// High-level: report CTRF fileconstrun=awaitclient.report('ctrf-report.json',{name: 'My Test Run',environment: 'production',});// Or use individual methodsconstruns=awaitclient.listRuns({status: 'failed'});constenvs=awaitclient.listEnvironments();

📖 CLI commands

Authentication

smooai-testing login --client-id <id> --client-secret <secret> --org-id <id>
smooai-testing logout
smooai-testing status

Test runs

smooai-testing runs create --name "Run Name" [--environment prod] [--tool vitest]
smooai-testing runs list [--status passed] [--limit 10]
smooai-testing runs get <run-id>
smooai-testing runs update <run-id> --status completed
smooai-testing runs report <ctrf-file> [--name "Run"] [--environment prod]

Test cases

smooai-testing cases create --title "Test login flow" [--priority high] [--tags "auth,e2e"]
smooai-testing cases list [--tags auth] [--priority high]
smooai-testing cases get <case-id>
smooai-testing cases update <case-id> --title "Updated title"
smooai-testing cases delete <case-id>

Environments

smooai-testing envs create --name "production" [--base-url https://app.example.com]
smooai-testing envs list
smooai-testing envs get <env-id>
smooai-testing envs update <env-id> --name "staging"

Deployments

smooai-testing deployments create --name "v1.2.3" [--source github] [--ref main]
smooai-testing deployments list [--status success]
smooai-testing deployments get <deployment-id>
smooai-testing deployments update <deployment-id> --status success
smooai-testing deployments delete <deployment-id>

JSON output

All commands support --json for machine-readable output:

smooai-testing runs list --json | jq '.data[].id'

JSON mode is auto-enabled when output is piped (no TTY).

🤖 CI/CD usage

Set environment variables instead of using login:

export SMOOAI_CLIENT_ID=...
export SMOOAI_CLIENT_SECRET=...
export SMOOAI_ORG_ID=...
export SMOOAI_API_URL=https://api.production.smoo.ai
export SMOOAI_AUTH_URL=https://auth.production.smoo.ai/token

GitHub Actions example:

- name: Report test resultsrun: npx @smooai/testing runs report ctrf-report.json --environment ci --name "${{ github.workflow }}"env:
SMOOAI_CLIENT_ID: ${{ secrets.SMOOAI_CLIENT_ID }}SMOOAI_CLIENT_SECRET: ${{ secrets.SMOOAI_CLIENT_SECRET }}SMOOAI_ORG_ID: ${{ secrets.SMOOAI_ORG_ID }}

🔧 Development

pnpm install
pnpm build # Build lib + CLI
pnpm test# Run unit tests
pnpm typecheck # TypeScript checks
pnpm lint # Lint
pnpm format # Format code
pnpm check-all # All checks (CI parity)

🧩 Part of Smoo AI

@smooai/testing is built and open-sourced by Smoo AI — the AI-powered business platform with AI built into every product: CRM, customer support, campaigns, field service, observability, and developer tools.

📄 License

MIT


Built by Smoo AI — AI built into every product.

About

@smooai/testing — CLI and TypeScript library for the Smoo AI Testing API. Report CTRF test results, manage test runs, cases, environments, and deployments.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

@smooai/testing — Report test results to Smoo AI

npmSmoo AIlicense

downloadsTypeScript

Features · Install · Usage · CLI · Platform


Report test results to Smoo AI and manage your test program from the command line or in code. Pipe CTRF reports straight from CI, or drive runs, cases, environments, and deployments programmatically.

✨ Features

  • Report CTRF test results from any test runner, straight from CI
  • Manage test runs, cases, environments, and deployments
  • Use it as a CLI or as a typed TypeScript library
  • --json output on every command (auto-enabled when piped)
  • M2M auth via login or environment variables for CI/CD

📦 Install

npm install @smooai/testing
# or
pnpm add @smooai/testing

🚀 Usage

CLI: report test results

# Authenticate
npx @smooai/testing login \
--client-id <M2M_CLIENT_ID> \
--client-secret <M2M_CLIENT_SECRET> \
--org-id <ORG_ID># Report CTRF test results
npx @smooai/testing runs report ctrf-report.json \
--environment production \
--name "PR #42 Tests"

Library: programmatic usage

import{SmooTestingClient}from'@smooai/testing';constclient=newSmooTestingClient({clientId: process.env.SMOOAI_CLIENT_ID,clientSecret: process.env.SMOOAI_CLIENT_SECRET,orgId: process.env.SMOOAI_ORG_ID,});// High-level: report CTRF fileconstrun=awaitclient.report('ctrf-report.json',{name: 'My Test Run',environment: 'production',});// Or use individual methodsconstruns=awaitclient.listRuns({status: 'failed'});constenvs=awaitclient.listEnvironments();

📖 CLI commands

Authentication

smooai-testing login --client-id <id> --client-secret <secret> --org-id <id>
smooai-testing logout
smooai-testing status

Test runs

smooai-testing runs create --name "Run Name" [--environment prod] [--tool vitest]
smooai-testing runs list [--status passed] [--limit 10]
smooai-testing runs get <run-id>
smooai-testing runs update <run-id> --status completed
smooai-testing runs report <ctrf-file> [--name "Run"] [--environment prod]

Test cases

smooai-testing cases create --title "Test login flow" [--priority high] [--tags "auth,e2e"]
smooai-testing cases list [--tags auth] [--priority high]
smooai-testing cases get <case-id>
smooai-testing cases update <case-id> --title "Updated title"
smooai-testing cases delete <case-id>

Environments

smooai-testing envs create --name "production" [--base-url https://app.example.com]
smooai-testing envs list
smooai-testing envs get <env-id>
smooai-testing envs update <env-id> --name "staging"

Deployments

smooai-testing deployments create --name "v1.2.3" [--source github] [--ref main]
smooai-testing deployments list [--status success]
smooai-testing deployments get <deployment-id>
smooai-testing deployments update <deployment-id> --status success
smooai-testing deployments delete <deployment-id>

JSON output

All commands support --json for machine-readable output:

smooai-testing runs list --json | jq '.data[].id'

JSON mode is auto-enabled when output is piped (no TTY).

🤖 CI/CD usage

Set environment variables instead of using login:

export SMOOAI_CLIENT_ID=...
export SMOOAI_CLIENT_SECRET=...
export SMOOAI_ORG_ID=...
export SMOOAI_API_URL=https://api.production.smoo.ai
export SMOOAI_AUTH_URL=https://auth.production.smoo.ai/token

GitHub Actions example:

- name: Report test resultsrun: npx @smooai/testing runs report ctrf-report.json --environment ci --name "${{ github.workflow }}"env:
SMOOAI_CLIENT_ID: ${{ secrets.SMOOAI_CLIENT_ID }}SMOOAI_CLIENT_SECRET: ${{ secrets.SMOOAI_CLIENT_SECRET }}SMOOAI_ORG_ID: ${{ secrets.SMOOAI_ORG_ID }}

🔧 Development

pnpm install
pnpm build # Build lib + CLI
pnpm test# Run unit tests
pnpm typecheck # TypeScript checks
pnpm lint # Lint
pnpm format # Format code
pnpm check-all # All checks (CI parity)

🧩 Part of Smoo AI

@smooai/testing is built and open-sourced by Smoo AI — the AI-powered business platform with AI built into every product: CRM, customer support, campaigns, field service, observability, and developer tools.

📄 License

MIT


Built by Smoo AI — AI built into every product.

About

@smooai/testing — CLI and TypeScript library for the Smoo AI Testing API. Report CTRF test results, manage test runs, cases, environments, and deployments.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

@smooai/testing — Report test results to Smoo AI

npmSmoo AIlicense

downloadsTypeScript

Features · Install · Usage · CLI · Platform


Report test results to Smoo AI and manage your test program from the command line or in code. Pipe CTRF reports straight from CI, or drive runs, cases, environments, and deployments programmatically.

✨ Features

  • Report CTRF test results from any test runner, straight from CI
  • Manage test runs, cases, environments, and deployments
  • Use it as a CLI or as a typed TypeScript library
  • --json output on every command (auto-enabled when piped)
  • M2M auth via login or environment variables for CI/CD

📦 Install

npm install @smooai/testing
# or
pnpm add @smooai/testing

🚀 Usage

CLI: report test results

# Authenticate
npx @smooai/testing login \
--client-id <M2M_CLIENT_ID> \
--client-secret <M2M_CLIENT_SECRET> \
--org-id <ORG_ID># Report CTRF test results
npx @smooai/testing runs report ctrf-report.json \
--environment production \
--name "PR #42 Tests"

Library: programmatic usage

import{SmooTestingClient}from'@smooai/testing';constclient=newSmooTestingClient({clientId: process.env.SMOOAI_CLIENT_ID,clientSecret: process.env.SMOOAI_CLIENT_SECRET,orgId: process.env.SMOOAI_ORG_ID,});// High-level: report CTRF fileconstrun=awaitclient.report('ctrf-report.json',{name: 'My Test Run',environment: 'production',});// Or use individual methodsconstruns=awaitclient.listRuns({status: 'failed'});constenvs=awaitclient.listEnvironments();

📖 CLI commands

Authentication

smooai-testing login --client-id <id> --client-secret <secret> --org-id <id>
smooai-testing logout
smooai-testing status

Test runs

smooai-testing runs create --name "Run Name" [--environment prod] [--tool vitest]
smooai-testing runs list [--status passed] [--limit 10]
smooai-testing runs get <run-id>
smooai-testing runs update <run-id> --status completed
smooai-testing runs report <ctrf-file> [--name "Run"] [--environment prod]

Test cases

smooai-testing cases create --title "Test login flow" [--priority high] [--tags "auth,e2e"]
smooai-testing cases list [--tags auth] [--priority high]
smooai-testing cases get <case-id>
smooai-testing cases update <case-id> --title "Updated title"
smooai-testing cases delete <case-id>

Environments

smooai-testing envs create --name "production" [--base-url https://app.example.com]
smooai-testing envs list
smooai-testing envs get <env-id>
smooai-testing envs update <env-id> --name "staging"

Deployments

smooai-testing deployments create --name "v1.2.3" [--source github] [--ref main]
smooai-testing deployments list [--status success]
smooai-testing deployments get <deployment-id>
smooai-testing deployments update <deployment-id> --status success
smooai-testing deployments delete <deployment-id>

JSON output

All commands support --json for machine-readable output:

smooai-testing runs list --json | jq '.data[].id'

JSON mode is auto-enabled when output is piped (no TTY).

🤖 CI/CD usage

Set environment variables instead of using login:

export SMOOAI_CLIENT_ID=...
export SMOOAI_CLIENT_SECRET=...
export SMOOAI_ORG_ID=...
export SMOOAI_API_URL=https://api.production.smoo.ai
export SMOOAI_AUTH_URL=https://auth.production.smoo.ai/token

GitHub Actions example:

- name: Report test resultsrun: npx @smooai/testing runs report ctrf-report.json --environment ci --name "${{ github.workflow }}"env:
SMOOAI_CLIENT_ID: ${{ secrets.SMOOAI_CLIENT_ID }}SMOOAI_CLIENT_SECRET: ${{ secrets.SMOOAI_CLIENT_SECRET }}SMOOAI_ORG_ID: ${{ secrets.SMOOAI_ORG_ID }}

🔧 Development

pnpm install
pnpm build # Build lib + CLI
pnpm test# Run unit tests
pnpm typecheck # TypeScript checks
pnpm lint # Lint
pnpm format # Format code
pnpm check-all # All checks (CI parity)

🧩 Part of Smoo AI

@smooai/testing is built and open-sourced by Smoo AI — the AI-powered business platform with AI built into every product: CRM, customer support, campaigns, field service, observability, and developer tools.

📄 License

MIT


Built by Smoo AI — AI built into every product.

About

@smooai/testing — CLI and TypeScript library for the Smoo AI Testing API. Report CTRF test results, manage test runs, cases, environments, and deployments.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

@smooai/testing — Report test results to Smoo AI

npmSmoo AIlicense

downloadsTypeScript

Features · Install · Usage · CLI · Platform


Report test results to Smoo AI and manage your test program from the command line or in code. Pipe CTRF reports straight from CI, or drive runs, cases, environments, and deployments programmatically.

✨ Features

  • Report CTRF test results from any test runner, straight from CI
  • Manage test runs, cases, environments, and deployments
  • Use it as a CLI or as a typed TypeScript library
  • --json output on every command (auto-enabled when piped)
  • M2M auth via login or environment variables for CI/CD

📦 Install

npm install @smooai/testing
# or
pnpm add @smooai/testing

🚀 Usage

CLI: report test results

# Authenticate
npx @smooai/testing login \
--client-id <M2M_CLIENT_ID> \
--client-secret <M2M_CLIENT_SECRET> \
--org-id <ORG_ID># Report CTRF test results
npx @smooai/testing runs report ctrf-report.json \
--environment production \
--name "PR #42 Tests"

Library: programmatic usage

import{SmooTestingClient}from'@smooai/testing';constclient=newSmooTestingClient({clientId: process.env.SMOOAI_CLIENT_ID,clientSecret: process.env.SMOOAI_CLIENT_SECRET,orgId: process.env.SMOOAI_ORG_ID,});// High-level: report CTRF fileconstrun=awaitclient.report('ctrf-report.json',{name: 'My Test Run',environment: 'production',});// Or use individual methodsconstruns=awaitclient.listRuns({status: 'failed'});constenvs=awaitclient.listEnvironments();

📖 CLI commands

Authentication

smooai-testing login --client-id <id> --client-secret <secret> --org-id <id>
smooai-testing logout
smooai-testing status

Test runs

smooai-testing runs create --name "Run Name" [--environment prod] [--tool vitest]
smooai-testing runs list [--status passed] [--limit 10]
smooai-testing runs get <run-id>
smooai-testing runs update <run-id> --status completed
smooai-testing runs report <ctrf-file> [--name "Run"] [--environment prod]

Test cases

smooai-testing cases create --title "Test login flow" [--priority high] [--tags "auth,e2e"]
smooai-testing cases list [--tags auth] [--priority high]
smooai-testing cases get <case-id>
smooai-testing cases update <case-id> --title "Updated title"
smooai-testing cases delete <case-id>

Environments

smooai-testing envs create --name "production" [--base-url https://app.example.com]
smooai-testing envs list
smooai-testing envs get <env-id>
smooai-testing envs update <env-id> --name "staging"

Deployments

smooai-testing deployments create --name "v1.2.3" [--source github] [--ref main]
smooai-testing deployments list [--status success]
smooai-testing deployments get <deployment-id>
smooai-testing deployments update <deployment-id> --status success
smooai-testing deployments delete <deployment-id>

JSON output

All commands support --json for machine-readable output:

smooai-testing runs list --json | jq '.data[].id'

JSON mode is auto-enabled when output is piped (no TTY).

🤖 CI/CD usage

Set environment variables instead of using login:

export SMOOAI_CLIENT_ID=...
export SMOOAI_CLIENT_SECRET=...
export SMOOAI_ORG_ID=...
export SMOOAI_API_URL=https://api.production.smoo.ai
export SMOOAI_AUTH_URL=https://auth.production.smoo.ai/token

GitHub Actions example:

- name: Report test resultsrun: npx @smooai/testing runs report ctrf-report.json --environment ci --name "${{ github.workflow }}"env:
SMOOAI_CLIENT_ID: ${{ secrets.SMOOAI_CLIENT_ID }}SMOOAI_CLIENT_SECRET: ${{ secrets.SMOOAI_CLIENT_SECRET }}SMOOAI_ORG_ID: ${{ secrets.SMOOAI_ORG_ID }}

🔧 Development

pnpm install
pnpm build # Build lib + CLI
pnpm test# Run unit tests
pnpm typecheck # TypeScript checks
pnpm lint # Lint
pnpm format # Format code
pnpm check-all # All checks (CI parity)

🧩 Part of Smoo AI

@smooai/testing is built and open-sourced by Smoo AI — the AI-powered business platform with AI built into every product: CRM, customer support, campaigns, field service, observability, and developer tools.

📄 License

MIT


Built by Smoo AI — AI built into every product.

About

@smooai/testing — CLI and TypeScript library for the Smoo AI Testing API. Report CTRF test results, manage test runs, cases, environments, and deployments.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

@smooai/testing — Report test results to Smoo AI

npmSmoo AIlicense

downloadsTypeScript

Features · Install · Usage · CLI · Platform


Report test results to Smoo AI and manage your test program from the command line or in code. Pipe CTRF reports straight from CI, or drive runs, cases, environments, and deployments programmatically.

✨ Features

  • Report CTRF test results from any test runner, straight from CI
  • Manage test runs, cases, environments, and deployments
  • Use it as a CLI or as a typed TypeScript library
  • --json output on every command (auto-enabled when piped)
  • M2M auth via login or environment variables for CI/CD

📦 Install

npm install @smooai/testing
# or
pnpm add @smooai/testing

🚀 Usage

CLI: report test results

# Authenticate
npx @smooai/testing login \
--client-id <M2M_CLIENT_ID> \
--client-secret <M2M_CLIENT_SECRET> \
--org-id <ORG_ID># Report CTRF test results
npx @smooai/testing runs report ctrf-report.json \
--environment production \
--name "PR #42 Tests"

Library: programmatic usage

import{SmooTestingClient}from'@smooai/testing';constclient=newSmooTestingClient({clientId: process.env.SMOOAI_CLIENT_ID,clientSecret: process.env.SMOOAI_CLIENT_SECRET,orgId: process.env.SMOOAI_ORG_ID,});// High-level: report CTRF fileconstrun=awaitclient.report('ctrf-report.json',{name: 'My Test Run',environment: 'production',});// Or use individual methodsconstruns=awaitclient.listRuns({status: 'failed'});constenvs=awaitclient.listEnvironments();

📖 CLI commands

Authentication

smooai-testing login --client-id <id> --client-secret <secret> --org-id <id>
smooai-testing logout
smooai-testing status

Test runs

smooai-testing runs create --name "Run Name" [--environment prod] [--tool vitest]
smooai-testing runs list [--status passed] [--limit 10]
smooai-testing runs get <run-id>
smooai-testing runs update <run-id> --status completed
smooai-testing runs report <ctrf-file> [--name "Run"] [--environment prod]

Test cases

smooai-testing cases create --title "Test login flow" [--priority high] [--tags "auth,e2e"]
smooai-testing cases list [--tags auth] [--priority high]
smooai-testing cases get <case-id>
smooai-testing cases update <case-id> --title "Updated title"
smooai-testing cases delete <case-id>

Environments

smooai-testing envs create --name "production" [--base-url https://app.example.com]
smooai-testing envs list
smooai-testing envs get <env-id>
smooai-testing envs update <env-id> --name "staging"

Deployments

smooai-testing deployments create --name "v1.2.3" [--source github] [--ref main]
smooai-testing deployments list [--status success]
smooai-testing deployments get <deployment-id>
smooai-testing deployments update <deployment-id> --status success
smooai-testing deployments delete <deployment-id>

JSON output

All commands support --json for machine-readable output:

smooai-testing runs list --json | jq '.data[].id'

JSON mode is auto-enabled when output is piped (no TTY).

🤖 CI/CD usage

Set environment variables instead of using login:

export SMOOAI_CLIENT_ID=...
export SMOOAI_CLIENT_SECRET=...
export SMOOAI_ORG_ID=...
export SMOOAI_API_URL=https://api.production.smoo.ai
export SMOOAI_AUTH_URL=https://auth.production.smoo.ai/token

GitHub Actions example:

- name: Report test resultsrun: npx @smooai/testing runs report ctrf-report.json --environment ci --name "${{ github.workflow }}"env:
SMOOAI_CLIENT_ID: ${{ secrets.SMOOAI_CLIENT_ID }}SMOOAI_CLIENT_SECRET: ${{ secrets.SMOOAI_CLIENT_SECRET }}SMOOAI_ORG_ID: ${{ secrets.SMOOAI_ORG_ID }}

🔧 Development

pnpm install
pnpm build # Build lib + CLI
pnpm test# Run unit tests
pnpm typecheck # TypeScript checks
pnpm lint # Lint
pnpm format # Format code
pnpm check-all # All checks (CI parity)

🧩 Part of Smoo AI

@smooai/testing is built and open-sourced by Smoo AI — the AI-powered business platform with AI built into every product: CRM, customer support, campaigns, field service, observability, and developer tools.

📄 License

MIT


Built by Smoo AI — AI built into every product.

About

@smooai/testing — CLI and TypeScript library for the Smoo AI Testing API. Report CTRF test results, manage test runs, cases, environments, and deployments.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

@smooai/testing — Report test results to Smoo AI

npmSmoo AIlicense

downloadsTypeScript

Features · Install · Usage · CLI · Platform


Report test results to Smoo AI and manage your test program from the command line or in code. Pipe CTRF reports straight from CI, or drive runs, cases, environments, and deployments programmatically.

✨ Features

  • Report CTRF test results from any test runner, straight from CI
  • Manage test runs, cases, environments, and deployments
  • Use it as a CLI or as a typed TypeScript library
  • --json output on every command (auto-enabled when piped)
  • M2M auth via login or environment variables for CI/CD

📦 Install

npm install @smooai/testing
# or
pnpm add @smooai/testing

🚀 Usage

CLI: report test results

# Authenticate
npx @smooai/testing login \
--client-id <M2M_CLIENT_ID> \
--client-secret <M2M_CLIENT_SECRET> \
--org-id <ORG_ID># Report CTRF test results
npx @smooai/testing runs report ctrf-report.json \
--environment production \
--name "PR #42 Tests"

Library: programmatic usage

import{SmooTestingClient}from'@smooai/testing';constclient=newSmooTestingClient({clientId: process.env.SMOOAI_CLIENT_ID,clientSecret: process.env.SMOOAI_CLIENT_SECRET,orgId: process.env.SMOOAI_ORG_ID,});// High-level: report CTRF fileconstrun=awaitclient.report('ctrf-report.json',{name: 'My Test Run',environment: 'production',});// Or use individual methodsconstruns=awaitclient.listRuns({status: 'failed'});constenvs=awaitclient.listEnvironments();

📖 CLI commands

Authentication

smooai-testing login --client-id <id> --client-secret <secret> --org-id <id>
smooai-testing logout
smooai-testing status

Test runs

smooai-testing runs create --name "Run Name" [--environment prod] [--tool vitest]
smooai-testing runs list [--status passed] [--limit 10]
smooai-testing runs get <run-id>
smooai-testing runs update <run-id> --status completed
smooai-testing runs report <ctrf-file> [--name "Run"] [--environment prod]

Test cases

smooai-testing cases create --title "Test login flow" [--priority high] [--tags "auth,e2e"]
smooai-testing cases list [--tags auth] [--priority high]
smooai-testing cases get <case-id>
smooai-testing cases update <case-id> --title "Updated title"
smooai-testing cases delete <case-id>

Environments

smooai-testing envs create --name "production" [--base-url https://app.example.com]
smooai-testing envs list
smooai-testing envs get <env-id>
smooai-testing envs update <env-id> --name "staging"

Deployments

smooai-testing deployments create --name "v1.2.3" [--source github] [--ref main]
smooai-testing deployments list [--status success]
smooai-testing deployments get <deployment-id>
smooai-testing deployments update <deployment-id> --status success
smooai-testing deployments delete <deployment-id>

JSON output

All commands support --json for machine-readable output:

smooai-testing runs list --json | jq '.data[].id'

JSON mode is auto-enabled when output is piped (no TTY).

🤖 CI/CD usage

Set environment variables instead of using login:

export SMOOAI_CLIENT_ID=...
export SMOOAI_CLIENT_SECRET=...
export SMOOAI_ORG_ID=...
export SMOOAI_API_URL=https://api.production.smoo.ai
export SMOOAI_AUTH_URL=https://auth.production.smoo.ai/token

GitHub Actions example:

- name: Report test resultsrun: npx @smooai/testing runs report ctrf-report.json --environment ci --name "${{ github.workflow }}"env:
SMOOAI_CLIENT_ID: ${{ secrets.SMOOAI_CLIENT_ID }}SMOOAI_CLIENT_SECRET: ${{ secrets.SMOOAI_CLIENT_SECRET }}SMOOAI_ORG_ID: ${{ secrets.SMOOAI_ORG_ID }}

🔧 Development

pnpm install
pnpm build # Build lib + CLI
pnpm test# Run unit tests
pnpm typecheck # TypeScript checks
pnpm lint # Lint
pnpm format # Format code
pnpm check-all # All checks (CI parity)

🧩 Part of Smoo AI

@smooai/testing is built and open-sourced by Smoo AI — the AI-powered business platform with AI built into every product: CRM, customer support, campaigns, field service, observability, and developer tools.

📄 License

MIT


Built by Smoo AI — AI built into every product.

About

@smooai/testing — CLI and TypeScript library for the Smoo AI Testing API. Report CTRF test results, manage test runs, cases, environments, and deployments.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

@smooai/testing — Report test results to Smoo AI

npmSmoo AIlicense

downloadsTypeScript

Features · Install · Usage · CLI · Platform


Report test results to Smoo AI and manage your test program from the command line or in code. Pipe CTRF reports straight from CI, or drive runs, cases, environments, and deployments programmatically.

✨ Features

  • Report CTRF test results from any test runner, straight from CI
  • Manage test runs, cases, environments, and deployments
  • Use it as a CLI or as a typed TypeScript library
  • --json output on every command (auto-enabled when piped)
  • M2M auth via login or environment variables for CI/CD

📦 Install

npm install @smooai/testing
# or
pnpm add @smooai/testing

🚀 Usage

CLI: report test results

# Authenticate
npx @smooai/testing login \
--client-id <M2M_CLIENT_ID> \
--client-secret <M2M_CLIENT_SECRET> \
--org-id <ORG_ID># Report CTRF test results
npx @smooai/testing runs report ctrf-report.json \
--environment production \
--name "PR #42 Tests"

Library: programmatic usage

import{SmooTestingClient}from'@smooai/testing';constclient=newSmooTestingClient({clientId: process.env.SMOOAI_CLIENT_ID,clientSecret: process.env.SMOOAI_CLIENT_SECRET,orgId: process.env.SMOOAI_ORG_ID,});// High-level: report CTRF fileconstrun=awaitclient.report('ctrf-report.json',{name: 'My Test Run',environment: 'production',});// Or use individual methodsconstruns=awaitclient.listRuns({status: 'failed'});constenvs=awaitclient.listEnvironments();

📖 CLI commands

Authentication

smooai-testing login --client-id <id> --client-secret <secret> --org-id <id>
smooai-testing logout
smooai-testing status

Test runs

smooai-testing runs create --name "Run Name" [--environment prod] [--tool vitest]
smooai-testing runs list [--status passed] [--limit 10]
smooai-testing runs get <run-id>
smooai-testing runs update <run-id> --status completed
smooai-testing runs report <ctrf-file> [--name "Run"] [--environment prod]

Test cases

smooai-testing cases create --title "Test login flow" [--priority high] [--tags "auth,e2e"]
smooai-testing cases list [--tags auth] [--priority high]
smooai-testing cases get <case-id>
smooai-testing cases update <case-id> --title "Updated title"
smooai-testing cases delete <case-id>

Environments

smooai-testing envs create --name "production" [--base-url https://app.example.com]
smooai-testing envs list
smooai-testing envs get <env-id>
smooai-testing envs update <env-id> --name "staging"

Deployments

smooai-testing deployments create --name "v1.2.3" [--source github] [--ref main]
smooai-testing deployments list [--status success]
smooai-testing deployments get <deployment-id>
smooai-testing deployments update <deployment-id> --status success
smooai-testing deployments delete <deployment-id>

JSON output

All commands support --json for machine-readable output:

smooai-testing runs list --json | jq '.data[].id'

JSON mode is auto-enabled when output is piped (no TTY).

🤖 CI/CD usage

Set environment variables instead of using login:

export SMOOAI_CLIENT_ID=...
export SMOOAI_CLIENT_SECRET=...
export SMOOAI_ORG_ID=...
export SMOOAI_API_URL=https://api.production.smoo.ai
export SMOOAI_AUTH_URL=https://auth.production.smoo.ai/token

GitHub Actions example:

- name: Report test resultsrun: npx @smooai/testing runs report ctrf-report.json --environment ci --name "${{ github.workflow }}"env:
SMOOAI_CLIENT_ID: ${{ secrets.SMOOAI_CLIENT_ID }}SMOOAI_CLIENT_SECRET: ${{ secrets.SMOOAI_CLIENT_SECRET }}SMOOAI_ORG_ID: ${{ secrets.SMOOAI_ORG_ID }}

🔧 Development

pnpm install
pnpm build # Build lib + CLI
pnpm test# Run unit tests
pnpm typecheck # TypeScript checks
pnpm lint # Lint
pnpm format # Format code
pnpm check-all # All checks (CI parity)

🧩 Part of Smoo AI

@smooai/testing is built and open-sourced by Smoo AI — the AI-powered business platform with AI built into every product: CRM, customer support, campaigns, field service, observability, and developer tools.

📄 License

MIT


Built by Smoo AI — AI built into every product.

About

@smooai/testing — CLI and TypeScript library for the Smoo AI Testing API. Report CTRF test results, manage test runs, cases, environments, and deployments.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

@smooai/testing — Report test results to Smoo AI

npmSmoo AIlicense

downloadsTypeScript

Features · Install · Usage · CLI · Platform


Report test results to Smoo AI and manage your test program from the command line or in code. Pipe CTRF reports straight from CI, or drive runs, cases, environments, and deployments programmatically.

✨ Features

  • Report CTRF test results from any test runner, straight from CI
  • Manage test runs, cases, environments, and deployments
  • Use it as a CLI or as a typed TypeScript library
  • --json output on every command (auto-enabled when piped)
  • M2M auth via login or environment variables for CI/CD

📦 Install

npm install @smooai/testing
# or
pnpm add @smooai/testing

🚀 Usage

CLI: report test results

# Authenticate
npx @smooai/testing login \
--client-id <M2M_CLIENT_ID> \
--client-secret <M2M_CLIENT_SECRET> \
--org-id <ORG_ID># Report CTRF test results
npx @smooai/testing runs report ctrf-report.json \
--environment production \
--name "PR #42 Tests"

Library: programmatic usage

import{SmooTestingClient}from'@smooai/testing';constclient=newSmooTestingClient({clientId: process.env.SMOOAI_CLIENT_ID,clientSecret: process.env.SMOOAI_CLIENT_SECRET,orgId: process.env.SMOOAI_ORG_ID,});// High-level: report CTRF fileconstrun=awaitclient.report('ctrf-report.json',{name: 'My Test Run',environment: 'production',});// Or use individual methodsconstruns=awaitclient.listRuns({status: 'failed'});constenvs=awaitclient.listEnvironments();

📖 CLI commands

Authentication

smooai-testing login --client-id <id> --client-secret <secret> --org-id <id>
smooai-testing logout
smooai-testing status

Test runs

smooai-testing runs create --name "Run Name" [--environment prod] [--tool vitest]
smooai-testing runs list [--status passed] [--limit 10]
smooai-testing runs get <run-id>
smooai-testing runs update <run-id> --status completed
smooai-testing runs report <ctrf-file> [--name "Run"] [--environment prod]

Test cases

smooai-testing cases create --title "Test login flow" [--priority high] [--tags "auth,e2e"]
smooai-testing cases list [--tags auth] [--priority high]
smooai-testing cases get <case-id>
smooai-testing cases update <case-id> --title "Updated title"
smooai-testing cases delete <case-id>

Environments

smooai-testing envs create --name "production" [--base-url https://app.example.com]
smooai-testing envs list
smooai-testing envs get <env-id>
smooai-testing envs update <env-id> --name "staging"

Deployments

smooai-testing deployments create --name "v1.2.3" [--source github] [--ref main]
smooai-testing deployments list [--status success]
smooai-testing deployments get <deployment-id>
smooai-testing deployments update <deployment-id> --status success
smooai-testing deployments delete <deployment-id>

JSON output

All commands support --json for machine-readable output:

smooai-testing runs list --json | jq '.data[].id'

JSON mode is auto-enabled when output is piped (no TTY).

🤖 CI/CD usage

Set environment variables instead of using login:

export SMOOAI_CLIENT_ID=...
export SMOOAI_CLIENT_SECRET=...
export SMOOAI_ORG_ID=...
export SMOOAI_API_URL=https://api.production.smoo.ai
export SMOOAI_AUTH_URL=https://auth.production.smoo.ai/token

GitHub Actions example:

- name: Report test resultsrun: npx @smooai/testing runs report ctrf-report.json --environment ci --name "${{ github.workflow }}"env:
SMOOAI_CLIENT_ID: ${{ secrets.SMOOAI_CLIENT_ID }}SMOOAI_CLIENT_SECRET: ${{ secrets.SMOOAI_CLIENT_SECRET }}SMOOAI_ORG_ID: ${{ secrets.SMOOAI_ORG_ID }}

🔧 Development

pnpm install
pnpm build # Build lib + CLI
pnpm test# Run unit tests
pnpm typecheck # TypeScript checks
pnpm lint # Lint
pnpm format # Format code
pnpm check-all # All checks (CI parity)

🧩 Part of Smoo AI

@smooai/testing is built and open-sourced by Smoo AI — the AI-powered business platform with AI built into every product: CRM, customer support, campaigns, field service, observability, and developer tools.

📄 License

MIT


Built by Smoo AI — AI built into every product.

About

@smooai/testing — CLI and TypeScript library for the Smoo AI Testing API. Report CTRF test results, manage test runs, cases, environments, and deployments.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages