diff --git a/.changeset/README.md b/.changeset/README.md deleted file mode 100644 index 12460a9..0000000 --- a/.changeset/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Changesets - -Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works -with multi-package repos, or single-package repos to help you version and publish your code. You can -find the full documentation for it [in the repository](https://github.com/changesets/changesets) - -We have a quick list of common questions to get you started engaging with this project in -[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json deleted file mode 100644 index e5d3ca6..0000000 --- a/.changeset/config.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json", - "changelog": ["@changesets/changelog-github", { "repo": "nymeria-ai/sensei" }], - "commit": false, - "fixed": [], - "linked": [], - "access": "public", - "baseBranch": "main", - "updateInternalDependencies": "patch", - "ignore": [] -} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index 2b147f1..0000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Publish to npm - -on: - release: - types: [published] - -jobs: - publish: - runs-on: ubuntu-latest - - permissions: - contents: read - - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-node@v4 - with: - node-version: 20 - cache: npm - registry-url: https://registry.npmjs.org - - - run: npm install - - run: npm run build - - - name: Publish @sensei/engine - run: npm publish --workspace packages/engine --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Publish @sensei/sdk - run: npm publish --workspace packages/sdk --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Publish @sensei/cli - run: npm publish --workspace packages/cli --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 21a53d6..17ab48a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,38 +1,219 @@ name: Release on: - push: - branches: [main] + workflow_dispatch: + inputs: + bump: + description: "patch: bug fixes (0.1.0→0.1.1) | minor: new features (0.1.0→0.2.0) | major: breaking changes (0.1.0→1.0.0)" + type: choice + default: "patch" + options: + - patch + - minor + - major + release_engine: + description: "Release @mondaycom/sensei-engine" + type: boolean + default: true + release_sdk: + description: "Release @mondaycom/sensei-sdk" + type: boolean + default: true + release_cli: + description: "Release @mondaycom/sensei-cli" + type: boolean + default: true -concurrency: ${{ github.workflow }}-${{ github.ref }} +permissions: + contents: write + id-token: write + +concurrency: + group: release + cancel-in-progress: false jobs: release: - name: Release runs-on: ubuntu-latest - - permissions: - contents: write - pull-requests: write - steps: - uses: actions/checkout@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} - uses: actions/setup-node@v4 with: node-version: 20 cache: npm + registry-url: "https://registry.npmjs.org" - run: npm install - - run: npm run build - - name: Create Release Pull Request or Publish to npm - id: changesets - uses: changesets/action@v1 - with: - title: "chore: version packages" - commit: "chore: version packages" - publish: npx changeset publish + - name: Validate selection + env: + RELEASE_ENGINE: ${{ inputs.release_engine }} + RELEASE_SDK: ${{ inputs.release_sdk }} + RELEASE_CLI: ${{ inputs.release_cli }} + run: | + if [[ "$RELEASE_ENGINE" != "true" && \ + "$RELEASE_SDK" != "true" && \ + "$RELEASE_CLI" != "true" ]]; then + echo "::error::No packages selected for release" + exit 1 + fi + if [[ "$RELEASE_ENGINE" != "true" ]]; then + if [[ "$RELEASE_SDK" == "true" || "$RELEASE_CLI" == "true" ]]; then + echo "::error::Cannot release sdk/cli without engine. Engine must be included to ensure dependency versions are correct." + exit 1 + fi + fi + + - name: Bump versions + id: versions + env: + BUMP: ${{ inputs.bump }} + RELEASE_ENGINE: ${{ inputs.release_engine }} + RELEASE_SDK: ${{ inputs.release_sdk }} + RELEASE_CLI: ${{ inputs.release_cli }} + run: | + if [[ "$RELEASE_ENGINE" == "true" ]]; then + cd packages/engine + NEW_VERSION=$(npm version "$BUMP" --no-git-tag-version | sed 's/^v//') + echo "engine_version=${NEW_VERSION}" >> "$GITHUB_OUTPUT" + echo "Engine bumped to ${NEW_VERSION}" + cd ../.. + fi + + if [[ "$RELEASE_SDK" == "true" ]]; then + cd packages/sdk + NEW_VERSION=$(npm version "$BUMP" --no-git-tag-version | sed 's/^v//') + echo "sdk_version=${NEW_VERSION}" >> "$GITHUB_OUTPUT" + echo "SDK bumped to ${NEW_VERSION}" + cd ../.. + fi + + if [[ "$RELEASE_CLI" == "true" ]]; then + cd packages/cli + NEW_VERSION=$(npm version "$BUMP" --no-git-tag-version | sed 's/^v//') + echo "cli_version=${NEW_VERSION}" >> "$GITHUB_OUTPUT" + echo "CLI bumped to ${NEW_VERSION}" + cd ../.. + fi + + - name: Update lockfile + run: npm install + + - name: Build + run: npm run build + + - name: Test + run: npx vitest run + + - name: Publish engine + if: inputs.release_engine == true + run: npm publish --workspace packages/engine --access public --provenance + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Publish sdk + if: inputs.release_sdk == true + run: npm publish --workspace packages/sdk --access public --provenance + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Publish cli + if: inputs.release_cli == true + run: npm publish --workspace packages/cli --access public --provenance + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Commit and tag + env: + ENGINE_VERSION: ${{ steps.versions.outputs.engine_version }} + SDK_VERSION: ${{ steps.versions.outputs.sdk_version }} + CLI_VERSION: ${{ steps.versions.outputs.cli_version }} + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + git add packages/*/package.json package-lock.json + + MSG="release [skip ci]:" + TAGS=() + + if [[ -n "$ENGINE_VERSION" ]]; then + MSG="${MSG} engine@${ENGINE_VERSION}" + TAGS+=("@mondaycom/sensei-engine@${ENGINE_VERSION}") + fi + if [[ -n "$SDK_VERSION" ]]; then + MSG="${MSG} sdk@${SDK_VERSION}" + TAGS+=("@mondaycom/sensei-sdk@${SDK_VERSION}") + fi + if [[ -n "$CLI_VERSION" ]]; then + MSG="${MSG} cli@${CLI_VERSION}" + TAGS+=("@mondaycom/sensei-cli@${CLI_VERSION}") + fi + + git commit -m "${MSG}" + + for TAG in "${TAGS[@]}"; do + git tag "${TAG}" + done + + git push origin HEAD:main --tags --atomic + + - name: Create GitHub Releases + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ENGINE_VERSION: ${{ steps.versions.outputs.engine_version }} + SDK_VERSION: ${{ steps.versions.outputs.sdk_version }} + CLI_VERSION: ${{ steps.versions.outputs.cli_version }} + run: | + LAST_TAG="" + + if [[ -n "$ENGINE_VERSION" ]]; then + LAST_TAG="@mondaycom/sensei-engine@${ENGINE_VERSION}" + gh release create "$LAST_TAG" \ + --title "sensei-engine ${ENGINE_VERSION}" \ + --generate-notes \ + --latest=false + fi + if [[ -n "$SDK_VERSION" ]]; then + LAST_TAG="@mondaycom/sensei-sdk@${SDK_VERSION}" + gh release create "$LAST_TAG" \ + --title "sensei-sdk ${SDK_VERSION}" \ + --generate-notes \ + --latest=false + fi + if [[ -n "$CLI_VERSION" ]]; then + LAST_TAG="@mondaycom/sensei-cli@${CLI_VERSION}" + gh release create "$LAST_TAG" \ + --title "sensei-cli ${CLI_VERSION}" \ + --generate-notes \ + --latest=false + fi + + # Mark the last release as "Latest" + if [[ -n "$LAST_TAG" ]]; then + gh release edit "$LAST_TAG" --latest + fi + + - name: Summary + if: always() env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + ENGINE_VERSION: ${{ steps.versions.outputs.engine_version }} + SDK_VERSION: ${{ steps.versions.outputs.sdk_version }} + CLI_VERSION: ${{ steps.versions.outputs.cli_version }} + run: | + echo "## Release Summary" >> "$GITHUB_STEP_SUMMARY" + echo "" >> "$GITHUB_STEP_SUMMARY" + echo "| Package | Version |" >> "$GITHUB_STEP_SUMMARY" + echo "|---------|---------|" >> "$GITHUB_STEP_SUMMARY" + if [[ -n "$ENGINE_VERSION" ]]; then + echo "| @mondaycom/sensei-engine | ${ENGINE_VERSION} |" >> "$GITHUB_STEP_SUMMARY" + fi + if [[ -n "$SDK_VERSION" ]]; then + echo "| @mondaycom/sensei-sdk | ${SDK_VERSION} |" >> "$GITHUB_STEP_SUMMARY" + fi + if [[ -n "$CLI_VERSION" ]]; then + echo "| @mondaycom/sensei-cli | ${CLI_VERSION} |" >> "$GITHUB_STEP_SUMMARY" + fi diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index ec4aed1..13e9413 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -16,7 +16,7 @@ Sensei is a standalone, open-source agent qualification engine. It runs test sui ## Tech Stack - **Language:** TypeScript (Node.js) -- **Package manager:** npm (published as `@sensei/cli`, `@sensei/engine`, `@sensei/sdk`) +- **Package manager:** npm (published as `@mondaycom/sensei-cli`, `@mondaycom/sensei-engine`, `@mondaycom/sensei-sdk`) - **Test definition:** YAML (declarative) + TypeScript SDK (programmatic) - **LLM Judge:** OpenAI / any OpenAI-compatible API (Anthropic via proxy) - **Output:** JSON reports, HTML reports, terminal output @@ -24,7 +24,7 @@ Sensei is a standalone, open-source agent qualification engine. It runs test sui ## Core Components -### 1. Engine (`@sensei/engine`) +### 1. Engine (`@mondaycom/sensei-engine`) The core library. No CLI, no HTTP — pure evaluation logic. @@ -254,7 +254,7 @@ Response: { output: "..." } or { output: { content: "..." } } Features: Supports both string and object output formats, health check via `/input_schema`, retry with backoff. -### 6. CLI (`@sensei/cli`) +### 6. CLI (`@mondaycom/sensei-cli`) ``` sensei run [options] @@ -273,7 +273,7 @@ sensei report Render a report from a previous JSON result --input Path to JSON result file ``` -### 7. SDK (`@sensei/sdk`) +### 7. SDK (`@mondaycom/sensei-sdk`) Programmatic suite building and utilities. @@ -385,8 +385,8 @@ scenarios: AgentTalent uses Sensei as a library dependency: ```typescript -import { SuiteLoader, Runner, Judge, Comparator, createAdapter } from '@sensei/engine'; -import type { KPIResult } from '@sensei/engine'; +import { SuiteLoader, Runner, Judge, Comparator, createAdapter } from '@mondaycom/sensei-engine'; +import type { KPIResult } from '@mondaycom/sensei-engine'; async function evaluateCandidate(agentUrl: string, suiteFile: string) { // Load the suite @@ -444,7 +444,7 @@ async function evaluateCandidate(agentUrl: string, suiteFile: string) { ``` sensei/ ├── packages/ -│ ├── engine/ # @sensei/engine +│ ├── engine/ # @mondaycom/sensei-engine │ │ ├── src/ │ │ │ ├── types.ts # Core types + LAYER_WEIGHTS + BADGE_THRESHOLDS │ │ │ ├── schema.ts # Zod schemas (SuiteDefinitionSchema, etc.) @@ -464,7 +464,7 @@ sensei/ │ │ ├── tests/ # 100+ engine tests │ │ ├── package.json │ │ └── tsconfig.json -│ ├── cli/ # @sensei/cli +│ ├── cli/ # @mondaycom/sensei-cli │ │ ├── src/ │ │ │ ├── index.ts # Entry point (commander) │ │ │ ├── loader.ts # Suite loader (YAML + JSON with Zod validation) @@ -478,7 +478,7 @@ sensei/ │ │ │ └── report.ts # sensei report │ │ ├── tests/ # CLI + E2E tests │ │ └── package.json -│ └── sdk/ # @sensei/sdk +│ └── sdk/ # @mondaycom/sensei-sdk │ ├── src/ │ │ ├── index.ts # Public API exports │ │ ├── builder.ts # SuiteBuilder + scenario() + kpi() helpers diff --git a/CHANGELOG.md b/CHANGELOG.md index f0840d3..c968521 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,7 +44,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- **Engine Core** (`@sensei/engine`) +- **Engine Core** (`@mondaycom/sensei-engine`) - Zod schema for runtime validation of YAML suite definitions - Suite loader with YAML parsing, fixture resolution, and descriptive error messages - Automated KPI scorer: `contains`, `regex`, `json-schema`, `json-parse`, `numeric-range`, `word-count`, `function` @@ -56,19 +56,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Reporter with JSON and ANSI terminal output formats - Adapters: HTTP (with retry), Stdio (JSON-line protocol), OpenClaw (native) - Shared LLM client factory (`llm-client.ts`) supporting OpenAI + OpenAI-compatible providers -- **CLI** (`@sensei/cli`) +- **CLI** (`@mondaycom/sensei-cli`) - `sensei run` — execute suite against agent with configurable adapter/judge/timeout - `sensei validate` — validate suite YAML/JSON against Zod schema - `sensei init` — scaffold new suite template (interactive + non-interactive) - `sensei report` — render reports from previous JSON results - HTML report generator (self-contained dark theme) -- **SDK** (`@sensei/sdk`) +- **SDK** (`@mondaycom/sensei-sdk`) - `SuiteBuilder` fluent API for programmatic suite construction - `scenario()` and `kpi()` helper factories - `defineSuite()` passthrough helper - Custom KPI function registry (`registerKPI`, `getCustomKPI`, `listCustomKPIs`, `clearCustomKPIs`, `invokeKPI`) - Result utilities: `filterByLayer`, `compareResults`, `formatSummary` -- **Monorepo** with npm workspaces: `@sensei/engine`, `@sensei/cli`, `@sensei/sdk` +- **Monorepo** with npm workspaces: `@mondaycom/sensei-engine`, `@mondaycom/sensei-cli`, `@mondaycom/sensei-sdk` - **Test suites** — SDR qualification suite with fixtures (prospects, products, transcripts) - **173 tests** covering engine, CLI, SDK, and E2E flows - **CI/CD** — GitHub Actions workflows for CI (build + test) and npm publishing diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 71a4a29..ce8715a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -31,7 +31,7 @@ The most impactful contribution. Create a new suite for a professional role: ## Development Setup ```bash -git clone https://github.com/nymeria-ai/sensei.git +git clone https://github.com/mondaycom/sensei.git cd sensei npm install npm run build @@ -57,29 +57,18 @@ npm test # runs vitest across all packages - Comments for complex logic only - All new code should have corresponding tests -## Changesets +## Releases -We use [changesets](https://github.com/changesets/changesets) to manage versioning and changelogs. - -When you make a user-facing change, add a changeset before opening your PR: - -```bash -npx changeset -``` - -This will prompt you to select which packages are affected, the semver bump type, and a summary of the change. The generated markdown file in `.changeset/` should be committed with your PR. - -When your PR is merged to `main`, the Release workflow will automatically open a "Version Packages" PR that bumps versions and updates changelogs. Merging that PR publishes to npm and creates GitHub Releases. +Releases are triggered manually by maintainers via **Actions → Release → Run workflow**. Select the bump type (`patch` / `minor` / `major`) and which packages to release. You don't need to do anything special in your PR to trigger a release. ## Pull Request Process 1. Fork the repo 2. Create a feature branch 3. Make your changes -4. Add a changeset: `npx changeset` -5. Run tests: `npm test` -6. Run build: `npm run build` -7. Submit PR with clear description +4. Run tests: `npm test` +5. Run build: `npm run build` +6. Submit PR with clear description ## License diff --git a/LICENSE b/LICENSE index ad3d8f1..df333d5 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2026 AgentTalent.ai +Copyright (c) 2026 monday.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index f467274..d851ba9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Sensei -![CI](https://github.com/nymeria-ai/sensei/actions/workflows/ci.yml/badge.svg) -[![npm](https://img.shields.io/npm/v/@sensei/engine)](https://www.npmjs.com/package/@sensei/engine) +![CI](https://github.com/mondaycom/sensei/actions/workflows/ci.yml/badge.svg) +[![npm](https://img.shields.io/npm/v/@mondaycom/sensei-engine)](https://www.npmjs.com/package/@mondaycom/sensei-engine) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) **Open-source AI agent qualification engine.** @@ -28,16 +28,16 @@ Sensei is an open-source framework for evaluating AI agents on real-world profes ```bash # Install -npm install @sensei/engine +npm install @mondaycom/sensei-engine # Or use the CLI -npm install -g @sensei/cli +npm install -g @mondaycom/sensei-cli ``` ### Programmatic Usage ```typescript -import { SuiteLoader, Runner, Judge, Comparator, createAdapter } from '@sensei/engine'; +import { SuiteLoader, Runner, Judge, Comparator, createAdapter } from '@mondaycom/sensei-engine'; // Load a test suite const loader = new SuiteLoader(); @@ -67,7 +67,7 @@ const runner = new Runner(adapter, { const result = await runner.run(suite); // Output results -import { Reporter } from '@sensei/engine'; +import { Reporter } from '@mondaycom/sensei-engine'; const reporter = new Reporter(); console.log(reporter.toTerminal(result)); // Pretty terminal output console.log(reporter.toJSON(result)); // Machine-readable JSON @@ -76,7 +76,7 @@ console.log(reporter.toJSON(result)); // Machine-readable JSON ### SDK Usage (Programmatic Suite Building) ```typescript -import { SuiteBuilder, scenario, kpi } from '@sensei/sdk'; +import { SuiteBuilder, scenario, kpi } from '@mondaycom/sensei-sdk'; const suite = new SuiteBuilder() .id('my-eval') @@ -257,9 +257,9 @@ scenarios: | Package | Description | |---------|-------------| -| `@sensei/engine` | Core evaluation engine — loader, runner, scorer, judge, comparator, reporter, adapters | -| `@sensei/cli` | Command-line interface — `run`, `validate`, `init`, `report` | -| `@sensei/sdk` | SDK for building custom suites programmatically + custom KPI functions | +| `@mondaycom/sensei-engine` | Core evaluation engine — loader, runner, scorer, judge, comparator, reporter, adapters | +| `@mondaycom/sensei-cli` | Command-line interface — `run`, `validate`, `init`, `report` | +| `@mondaycom/sensei-sdk` | SDK for building custom suites programmatically + custom KPI functions | ## Architecture diff --git a/docs/flow-diagram.md b/docs/flow-diagram.md index 46fddb7..43f0a76 100644 --- a/docs/flow-diagram.md +++ b/docs/flow-diagram.md @@ -123,8 +123,8 @@ ## Integration Code (AgentTalent) ```typescript -import { SuiteLoader, Runner, Judge, Comparator, createAdapter } from '@sensei/engine'; -import type { KPIResult } from '@sensei/engine'; +import { SuiteLoader, Runner, Judge, Comparator, createAdapter } from '@mondaycom/sensei-engine'; +import type { KPIResult } from '@mondaycom/sensei-engine'; async function onAgentApply(application: Application) { // 1. Load the relevant suite diff --git a/package-lock.json b/package-lock.json index 8c5a5fb..4951558 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1208,6 +1208,18 @@ "node": ">=6 <7 || >=8" } }, + "node_modules/@mondaycom/sensei-cli": { + "resolved": "packages/cli", + "link": true + }, + "node_modules/@mondaycom/sensei-engine": { + "resolved": "packages/engine", + "link": true + }, + "node_modules/@mondaycom/sensei-sdk": { + "resolved": "packages/sdk", + "link": true + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1596,18 +1608,6 @@ "win32" ] }, - "node_modules/@sensei/cli": { - "resolved": "packages/cli", - "link": true - }, - "node_modules/@sensei/engine": { - "resolved": "packages/engine", - "link": true - }, - "node_modules/@sensei/sdk": { - "resolved": "packages/sdk", - "link": true - }, "node_modules/@types/chai": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", @@ -5350,11 +5350,11 @@ } }, "packages/cli": { - "name": "@sensei/cli", - "version": "0.1.0", + "name": "@mondaycom/sensei-cli", + "version": "0.0.1", "license": "MIT", "dependencies": { - "@sensei/engine": "*", + "@mondaycom/sensei-engine": "*", "chalk": "^5.4.0", "commander": "^13.0.0", "ora": "^8.0.0", @@ -5377,8 +5377,8 @@ } }, "packages/engine": { - "name": "@sensei/engine", - "version": "0.1.0", + "name": "@mondaycom/sensei-engine", + "version": "0.0.1", "license": "MIT", "dependencies": { "ajv": "^8.18.0", @@ -5438,11 +5438,11 @@ } }, "packages/sdk": { - "name": "@sensei/sdk", - "version": "0.1.0", + "name": "@mondaycom/sensei-sdk", + "version": "0.0.1", "license": "MIT", "dependencies": { - "@sensei/engine": "*" + "@mondaycom/sensei-engine": "*" } } } diff --git a/package.json b/package.json index 27eeb82..34aa2e7 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/nymeria-ai/sensei.git" + "url": "https://github.com/mondaycom/sensei.git" }, "license": "MIT" } diff --git a/packages/cli/package.json b/packages/cli/package.json index c4b1cba..015fe5a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { - "name": "@sensei/cli", - "version": "0.1.0", + "name": "@mondaycom/sensei-cli", + "version": "0.0.1", "description": "CLI for Sensei agent qualification engine", "type": "module", "bin": { @@ -11,11 +11,14 @@ "dev": "tsup src/index.ts --format esm --dts --watch" }, "dependencies": { - "@sensei/engine": "*", + "@mondaycom/sensei-engine": "*", "commander": "^13.0.0", "chalk": "^5.4.0", "ora": "^8.0.0", "yaml": "^2.7.0" }, - "license": "MIT" + "license": "MIT", + "publishConfig": { + "access": "public" + } } diff --git a/packages/cli/src/commands/report.ts b/packages/cli/src/commands/report.ts index 1b34dd9..c328bdc 100644 --- a/packages/cli/src/commands/report.ts +++ b/packages/cli/src/commands/report.ts @@ -3,7 +3,7 @@ */ import { Command } from 'commander'; import { readFile } from 'node:fs/promises'; -import type { SuiteResult } from '@sensei/engine'; +import type { SuiteResult } from '@mondaycom/sensei-engine'; import { formatTerminalReport, formatHtmlReport } from '../format.js'; import { writeOutput } from '../output.js'; diff --git a/packages/cli/src/commands/run.ts b/packages/cli/src/commands/run.ts index ab1f9ff..ffc01bd 100644 --- a/packages/cli/src/commands/run.ts +++ b/packages/cli/src/commands/run.ts @@ -2,10 +2,10 @@ * sensei run — Execute a suite against an agent */ import { Command } from 'commander'; -import type { SuiteDefinition, JudgeConfig, AgentConfig, SuiteResult, KPIResult } from '@sensei/engine'; +import type { SuiteDefinition, JudgeConfig, AgentConfig, SuiteResult, KPIResult } from '@mondaycom/sensei-engine'; // Note: HttpAdapter, StdioAdapter, OpenAICompatAdapter, LangServeAdapter are registered via side-effect // imports in the engine's index.ts — no need to import them directly here. -import { Runner, Judge, Comparator, createAdapter } from '@sensei/engine'; +import { Runner, Judge, Comparator, createAdapter } from '@mondaycom/sensei-engine'; import { formatTerminalReport, formatHtmlReport } from '../format.js'; import { loadSuiteFile } from '../loader.js'; import { writeOutput } from '../output.js'; diff --git a/packages/cli/src/format.ts b/packages/cli/src/format.ts index d187c22..ef720e0 100644 --- a/packages/cli/src/format.ts +++ b/packages/cli/src/format.ts @@ -1,7 +1,7 @@ /** * Report formatters — terminal and HTML output */ -import type { SuiteResult, Badge } from '@sensei/engine'; +import type { SuiteResult, Badge } from '@mondaycom/sensei-engine'; import { generateHtmlReport } from './html-report.js'; // ─── Badge display ────────────────────────────────────────────────── diff --git a/packages/cli/src/html-report.ts b/packages/cli/src/html-report.ts index 3a95988..d36b357 100644 --- a/packages/cli/src/html-report.ts +++ b/packages/cli/src/html-report.ts @@ -1,7 +1,7 @@ /** * Self-contained HTML report generator — dark theme */ -import type { SuiteResult, ScenarioResult, KPIResult, Badge } from '@sensei/engine'; +import type { SuiteResult, ScenarioResult, KPIResult, Badge } from '@mondaycom/sensei-engine'; function esc(text: string): string { return text diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 5485768..190f163 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node /** - * @sensei/cli — CLI for Sensei agent qualification engine + * @mondaycom/sensei-cli — CLI for Sensei agent qualification engine */ import { Command } from 'commander'; import { createRequire } from 'node:module'; diff --git a/packages/cli/src/loader.ts b/packages/cli/src/loader.ts index 0b0aa63..56d20fa 100644 --- a/packages/cli/src/loader.ts +++ b/packages/cli/src/loader.ts @@ -6,9 +6,9 @@ */ import { readFile } from 'node:fs/promises'; import { extname } from 'node:path'; -import { SuiteLoader } from '@sensei/engine'; -import { SuiteDefinitionSchema } from '@sensei/engine'; -import type { SuiteDefinition } from '@sensei/engine'; +import { SuiteLoader } from '@mondaycom/sensei-engine'; +import { SuiteDefinitionSchema } from '@mondaycom/sensei-engine'; +import type { SuiteDefinition } from '@mondaycom/sensei-engine'; const loader = new SuiteLoader(); diff --git a/packages/cli/tests/cli.test.ts b/packages/cli/tests/cli.test.ts index f3d767f..6d2f9f6 100644 --- a/packages/cli/tests/cli.test.ts +++ b/packages/cli/tests/cli.test.ts @@ -43,7 +43,7 @@ describe('CLI command parsing', () => { it('shows version with --version', () => { const { stdout, exitCode } = runCli(['--version']); expect(exitCode).toBe(0); - expect(stdout.trim()).toBe('0.1.0'); + expect(stdout.trim()).toBe('0.0.1'); }); it('shows run command help', () => { diff --git a/packages/cli/tests/html-report.test.ts b/packages/cli/tests/html-report.test.ts index 4e0ac07..23a6cd8 100644 --- a/packages/cli/tests/html-report.test.ts +++ b/packages/cli/tests/html-report.test.ts @@ -3,7 +3,7 @@ */ import { describe, it, expect } from 'vitest'; import { generateHtmlReport } from '../src/html-report.js'; -import type { SuiteResult } from '@sensei/engine'; +import type { SuiteResult } from '@mondaycom/sensei-engine'; const mockResult: SuiteResult = { suite_id: 'sdr-qualification', diff --git a/packages/engine/package.json b/packages/engine/package.json index 740abd3..6236246 100644 --- a/packages/engine/package.json +++ b/packages/engine/package.json @@ -1,6 +1,6 @@ { - "name": "@sensei/engine", - "version": "0.1.0", + "name": "@mondaycom/sensei-engine", + "version": "0.0.1", "description": "Core evaluation engine for Sensei agent qualification", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -16,5 +16,8 @@ "yaml": "^2.7.0", "zod": "^3.24.0" }, - "license": "MIT" + "license": "MIT", + "publishConfig": { + "access": "public" + } } diff --git a/packages/engine/src/scorer.ts b/packages/engine/src/scorer.ts index 5f848b3..415dee6 100644 --- a/packages/engine/src/scorer.ts +++ b/packages/engine/src/scorer.ts @@ -165,7 +165,7 @@ export function scoreAutomatedKPI( // In the synchronous scoreAutomatedKPI path, we return 0 with guidance. rawScore = 0; evidence = `Function scorer type requires a registered custom KPI function. ` + - `Use @sensei/sdk registerKPI() to register a function for KPI "${kpi.id}", ` + + `Use @mondaycom/sensei-sdk registerKPI() to register a function for KPI "${kpi.id}", ` + `then use the Runner's judgeScorer callback to invoke it.`; break; } diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 27b607f..e3552d6 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { - "name": "@sensei/sdk", - "version": "0.1.0", + "name": "@mondaycom/sensei-sdk", + "version": "0.0.1", "description": "SDK for building Sensei evaluation suites programmatically", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -10,7 +10,10 @@ "dev": "tsup src/index.ts --format esm,cjs --dts --watch" }, "dependencies": { - "@sensei/engine": "*" + "@mondaycom/sensei-engine": "*" }, - "license": "MIT" + "license": "MIT", + "publishConfig": { + "access": "public" + } } diff --git a/packages/sdk/src/builder.ts b/packages/sdk/src/builder.ts index dcce8fc..4b0fada 100644 --- a/packages/sdk/src/builder.ts +++ b/packages/sdk/src/builder.ts @@ -11,7 +11,7 @@ import type { AgentConfig, JudgeConfig, ScenarioInput, -} from '@sensei/engine'; +} from '@mondaycom/sensei-engine'; // ─── Helper factories ─────────────────────────────────────────────── diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts index e4e4460..06ee4bd 100644 --- a/packages/sdk/src/index.ts +++ b/packages/sdk/src/index.ts @@ -1,5 +1,5 @@ /** - * @sensei/sdk — Programmatic API for building Sensei suites + * @mondaycom/sensei-sdk — Programmatic API for building Sensei suites */ // Re-export core types consumers need @@ -17,9 +17,9 @@ export type { KPIResult, LayerScores, Badge, -} from '@sensei/engine'; +} from '@mondaycom/sensei-engine'; -export { determineBadge, LAYER_WEIGHTS, BADGE_THRESHOLDS } from '@sensei/engine'; +export { determineBadge, LAYER_WEIGHTS, BADGE_THRESHOLDS } from '@mondaycom/sensei-engine'; // SDK builders and utilities export { SuiteBuilder, defineSuite, scenario, kpi } from './builder.js'; diff --git a/packages/sdk/src/result-utils.ts b/packages/sdk/src/result-utils.ts index 9715f22..255553d 100644 --- a/packages/sdk/src/result-utils.ts +++ b/packages/sdk/src/result-utils.ts @@ -1,8 +1,8 @@ /** * Result utilities — filter, compare, and summarize suite results */ -import type { SuiteResult, ScenarioResult, EvaluationLayer, Badge } from '@sensei/engine'; -import { determineBadge } from '@sensei/engine'; +import type { SuiteResult, ScenarioResult, EvaluationLayer, Badge } from '@mondaycom/sensei-engine'; +import { determineBadge } from '@mondaycom/sensei-engine'; /** * Filter scenarios by evaluation layer diff --git a/packages/sdk/tests/sdk.test.ts b/packages/sdk/tests/sdk.test.ts index 1f1f5f8..f077d93 100644 --- a/packages/sdk/tests/sdk.test.ts +++ b/packages/sdk/tests/sdk.test.ts @@ -19,7 +19,7 @@ import { compareResults, formatSummary, } from '../src/result-utils.js'; -import type { SuiteResult } from '@sensei/engine'; +import type { SuiteResult } from '@mondaycom/sensei-engine'; // ─── SuiteBuilder ───────────────────────────────────────────────────