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-5/

{
  "context": "Tests whether the agent correctly sets up a TypeScript monorepo with workspaces, project references, composite tsconfigs, and shared types across packages. This is the most advanced project structure scenario.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Workspace configuration",
      "description": "Root package.json has a workspaces field listing the package directories (e.g., \"workspaces\": [\"packages/*\"])",
      "max_score": 10
    },
    {
      "name": "Root tsconfig with references",
      "description": "Root tsconfig.json uses the references field to list all packages, enabling tsc --build to compile in dependency order",
      "max_score": 10
    },
    {
      "name": "Shared package is composite",
      "description": "packages/shared/tsconfig.json has \"composite\": true, which is required for project references",
      "max_score": 10
    },
    {
      "name": "Shared package has declaration: true",
      "description": "packages/shared/tsconfig.json has \"declaration\": true so other packages can consume its types",
      "max_score": 8
    },
    {
      "name": "Server references shared",
      "description": "packages/server/tsconfig.json has a references array including { \"path\": \"../shared\" }",
      "max_score": 10
    },
    {
      "name": "Client references shared",
      "description": "packages/client/tsconfig.json has a references array including { \"path\": \"../shared\" }",
      "max_score": 8
    },
    {
      "name": "All tsconfigs have strict: true",
      "description": "Every tsconfig.json in the monorepo has \"strict\": true (either directly or inherited via extends)",
      "max_score": 10
    },
    {
      "name": "Shared types defined once",
      "description": "Types (User, ApiResponse, etc.) are defined only in packages/shared/ and imported by both server and client — not duplicated",
      "max_score": 8
    },
    {
      "name": "Union types not enum",
      "description": "Categorical types (Permission, status types) use union types rather than TypeScript enum",
      "max_score": 6
    },
    {
      "name": "Package dependencies correct",
      "description": "packages/server/package.json and packages/client/package.json declare @app/shared as a dependency (using workspace: protocol or *)",
      "max_score": 8
    },
    {
      "name": "Server uses NodeNext",
      "description": "The server package tsconfig uses module/moduleResolution NodeNext for Node.js ESM",
      "max_score": 6
    },
    {
      "name": "Client uses bundler resolution",
      "description": "The client package tsconfig uses moduleResolution: bundler for the React/Vite frontend",
      "max_score": 6
    }
  ]
}

evals

tile.json