CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl-labs/typescript-project-structure

TypeScript project structure, strict tsconfig, module resolution, path aliases, shared types, and monorepo patterns

90

1.09x
Quality

84%

Does it follow best practices?

Impact

100%

1.09x

Average score across 5 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-4/

{
  "context": "Tests whether the agent correctly identifies and fixes all the issues in a poorly configured TypeScript project: enabling strict mode, fixing module resolution, adding path aliases, creating proper .gitignore, setting up scripts, and creating a migration plan.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Strict mode enabled",
      "description": "The updated tsconfig.json has \"strict\": true — the most critical fix. The agent must not leave strict: false or omit strict entirely.",
      "max_score": 12
    },
    {
      "name": "noUncheckedIndexedAccess added",
      "description": "tsconfig.json has noUncheckedIndexedAccess: true",
      "max_score": 8
    },
    {
      "name": "Module resolution modernized",
      "description": "tsconfig.json uses NodeNext/NodeNext (or another modern combination) instead of the legacy commonjs/node combination",
      "max_score": 10
    },
    {
      "name": "Path alias added",
      "description": "tsconfig.json has a paths configuration (e.g., @/* -> ./src/*) to replace deep relative imports, with baseUrl set",
      "max_score": 8
    },
    {
      "name": "src/ directory recommended",
      "description": "The migration plan or directory structure recommends moving source files into a src/ directory with rootDir: src in tsconfig",
      "max_score": 8
    },
    {
      "name": ".gitignore created",
      "description": ".gitignore is created and includes dist/ and node_modules/",
      "max_score": 8
    },
    {
      "name": "Essential scripts added",
      "description": "package.json has scripts for build (tsc), dev (tsx watch or similar), start (node dist/), and typecheck (tsc --noEmit)",
      "max_score": 10
    },
    {
      "name": "type: module added",
      "description": "If using NodeNext, package.json has \"type\": \"module\"",
      "max_score": 6
    },
    {
      "name": "ESLint configured",
      "description": "An ESLint config file is created with typescript-eslint",
      "max_score": 6
    },
    {
      "name": "Plan addresses type duplication",
      "description": "The migration plan specifically mentions consolidating duplicate type definitions into a single shared types location",
      "max_score": 8
    },
    {
      "name": "Plan addresses deep imports",
      "description": "The migration plan mentions replacing deep relative imports (../../..) with path aliases",
      "max_score": 6
    },
    {
      "name": "tsx replaces ts-node",
      "description": "The updated setup uses tsx (or a similar modern runner) instead of ts-node for development",
      "max_score": 5
    },
    {
      "name": "Target updated",
      "description": "tsconfig target is updated from ES6 to a more modern target like ES2022 or ESNext",
      "max_score": 5
    }
  ]
}

evals

tile.json