From c7dff2c5e59ec4d716189069e6027580c59f0fa6 Mon Sep 17 00:00:00 2001 From: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:16:54 +0100 Subject: [PATCH] chore: improve tests --- .github/workflows/ci.yml | 168 ++++++- apps/cli/src/commands/loop.command.spec.ts | 1 + package-lock.json | 425 +++++++++++++++++- package.json | 4 +- .../runtime-state-manager.service.spec.ts | 2 +- 5 files changed, 590 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eee2a41a..52ce396f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -173,12 +173,48 @@ jobs: path: dist/ retention-days: 1 - test: - name: Test - timeout-minutes: 15 + # Detect which packages changed (with dependency awareness) + detect-changes: + name: Detect Changes runs-on: ubuntu-latest - needs: [format-check, typecheck, build, changeset-validation] - if: always() && !cancelled() && !contains(needs.*.result, 'failure') + outputs: + core: ${{ steps.filter.outputs.core }} + cli: ${{ steps.filter.outputs.cli }} + mcp: ${{ steps.filter.outputs.mcp }} + root: ${{ steps.filter.outputs.root }} + steps: + - uses: actions/checkout@v4 + + - uses: dorny/paths-filter@v3 + id: filter + with: + filters: | + core: + - 'packages/tm-core/**' + - 'package-lock.json' + - 'tsconfig.json' + - 'vitest.workspace.ts' + cli: + - 'apps/cli/**' + - 'packages/tm-core/**' + - 'package-lock.json' + mcp: + - 'apps/mcp/**' + - 'packages/tm-core/**' + - 'package-lock.json' + root: + - 'src/**' + - 'tests/**' + - 'package-lock.json' + - 'jest.config.*' + + # Test @tm/core (unit + integration) + test-core: + name: Test @tm/core + timeout-minutes: 10 + runs-on: ubuntu-latest + needs: [install, detect-changes, build] + if: needs.detect-changes.outputs.core == 'true' steps: - uses: actions/checkout@v4 @@ -194,8 +230,128 @@ jobs: key: node-modules-${{ runner.os }}-node${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }} - name: Install dependencies - if: steps.cache-node-modules.outputs.cache-hit != 'true' run: npm ci + if: steps.cache-node-modules.outputs.cache-hit != 'true' + timeout-minutes: 5 + + - name: Unit Tests + run: npm run test:unit -w @tm/core + env: + NODE_ENV: test + CI: true + FORCE_COLOR: 1 + + - name: Integration Tests + run: npm run test:integration -w @tm/core + env: + NODE_ENV: test + CI: true + FORCE_COLOR: 1 + + # Test @tm/cli (unit + integration) + test-cli: + name: Test @tm/cli + timeout-minutes: 10 + runs-on: ubuntu-latest + needs: [install, detect-changes, build] + if: needs.detect-changes.outputs.cli == 'true' + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Restore node_modules cache + id: cache-node-modules + uses: actions/cache@v4 + with: + path: node_modules + key: node-modules-${{ runner.os }}-node${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }} + + - name: Install dependencies + run: npm ci + if: steps.cache-node-modules.outputs.cache-hit != 'true' + timeout-minutes: 5 + + - name: Unit Tests + run: npm run test:unit -w @tm/cli + env: + NODE_ENV: test + CI: true + FORCE_COLOR: 1 + + - name: Integration Tests + run: npm run test:integration -w @tm/cli + env: + NODE_ENV: test + CI: true + FORCE_COLOR: 1 + + # Test @tm/mcp (unit + integration) + test-mcp: + name: Test @tm/mcp + timeout-minutes: 10 + runs-on: ubuntu-latest + needs: [install, detect-changes, build] + if: needs.detect-changes.outputs.mcp == 'true' + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Restore node_modules cache + id: cache-node-modules + uses: actions/cache@v4 + with: + path: node_modules + key: node-modules-${{ runner.os }}-node${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }} + + - name: Install dependencies + run: npm ci + if: steps.cache-node-modules.outputs.cache-hit != 'true' + timeout-minutes: 5 + + - name: Unit Tests + run: npm run test:unit -w @tm/mcp + env: + NODE_ENV: test + CI: true + FORCE_COLOR: 1 + + - name: Integration Tests + run: npm run test:integration -w @tm/mcp + env: + NODE_ENV: test + CI: true + FORCE_COLOR: 1 + + # Test root package (legacy Jest tests) + test-root: + name: Test Root + timeout-minutes: 15 + runs-on: ubuntu-latest + needs: [format-check, typecheck, build, changeset-validation, detect-changes] + if: always() && !cancelled() && !contains(needs.*.result, 'failure') && needs.detect-changes.outputs.root == 'true' + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Restore node_modules cache + id: cache-node-modules + uses: actions/cache@v4 + with: + path: node_modules + key: node-modules-${{ runner.os }}-node${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }} + + - name: Install dependencies + run: npm ci + if: steps.cache-node-modules.outputs.cache-hit != 'true' timeout-minutes: 5 - name: Download build artifacts diff --git a/apps/cli/src/commands/loop.command.spec.ts b/apps/cli/src/commands/loop.command.spec.ts index adb0d905..45702506 100644 --- a/apps/cli/src/commands/loop.command.spec.ts +++ b/apps/cli/src/commands/loop.command.spec.ts @@ -412,6 +412,7 @@ describe('LoopCommand', () => { it('should run interactive auth when sandbox not ready', async () => { mockTmCore.loop.checkSandboxAuth.mockReturnValue({ ready: false }); + mockTmCore.loop.runInteractiveAuth.mockReturnValue({ success: true }); const result = createMockResult(); mockLoopRun.mockResolvedValue(result); diff --git a/package-lock.json b/package-lock.json index 12fdde1b..b983cb6c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1851,7 +1851,7 @@ "react-dom": "^19.0.0", "tailwind-merge": "^3.3.1", "tailwindcss": "4.1.11", - "task-master-ai": "*", + "task-master-ai": "0.42.0-rc.0", "typescript": "^5.9.2" }, "engines": { @@ -1950,6 +1950,429 @@ "url": "https://opencollective.com/express" } }, + "apps/extension/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "apps/extension/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "apps/extension/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "apps/extension/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "apps/extension/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "apps/extension/node_modules/task-master-ai": { + "version": "0.42.0-rc.0", + "resolved": "https://registry.npmjs.org/task-master-ai/-/task-master-ai-0.42.0-rc.0.tgz", + "integrity": "sha512-CYHRFumTfCnFkmYPLjwp9V2+wTDmk/fSTEexbOIu4FBFgRxzeqMICVQYsaDukw1tYwBXh7MO1VTwD8Dp1Lnpvg==", + "dev": true, + "license": "MIT WITH Commons-Clause", + "workspaces": [ + "apps/*", + "packages/*", + "." + ], + "dependencies": { + "@ai-sdk/amazon-bedrock": "^3.0.23", + "@ai-sdk/anthropic": "^2.0.18", + "@ai-sdk/azure": "^2.0.89", + "@ai-sdk/google": "^2.0.16", + "@ai-sdk/google-vertex": "^3.0.86", + "@ai-sdk/groq": "^2.0.21", + "@ai-sdk/mistral": "^2.0.16", + "@ai-sdk/openai": "^2.0.34", + "@ai-sdk/openai-compatible": "^1.0.25", + "@ai-sdk/perplexity": "^2.0.10", + "@ai-sdk/provider": "^2.0.0", + "@ai-sdk/provider-utils": "^3.0.10", + "@ai-sdk/xai": "^2.0.22", + "@aws-sdk/credential-providers": "^3.895.0", + "@inquirer/search": "^3.0.15", + "@openrouter/ai-sdk-provider": "^1.2.0", + "@sentry/node": "^10.27.0", + "@streamparser/json": "^0.0.22", + "@supabase/supabase-js": "^2.57.4", + "@types/turndown": "^5.0.6", + "ai": "^5.0.51", + "ai-sdk-provider-claude-code": "^2.2.4", + "ai-sdk-provider-codex-cli": "^0.7.0", + "ai-sdk-provider-gemini-cli": "^1.4.0", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "boxen": "^8.0.1", + "chalk": "5.6.2", + "cli-highlight": "^2.1.11", + "cli-progress": "^3.12.0", + "cli-table3": "^0.6.5", + "commander": "^12.1.0", + "cors": "^2.8.5", + "date-fns": "^4.1.0", + "dotenv": "^16.6.1", + "express": "^4.21.2", + "fastmcp": "^3.23.1", + "figlet": "^1.8.0", + "fs-extra": "^11.3.0", + "fuse.js": "^7.1.0", + "gpt-tokens": "^1.3.14", + "gradient-string": "^3.0.0", + "helmet": "^8.1.0", + "inquirer": "^12.5.0", + "jsonc-parser": "^3.3.1", + "jsonrepair": "^3.13.0", + "jsonwebtoken": "^9.0.2", + "lru-cache": "^10.2.0", + "marked": "^15.0.12", + "marked-terminal": "^7.3.0", + "ollama-ai-provider-v2": "^1.3.1", + "open": "^10.2.0", + "ora": "^8.2.0", + "proper-lockfile": "^4.1.2", + "simple-git": "^3.28.0", + "steno": "^4.0.2", + "terminal-link": "^5.0.0", + "turndown": "^7.2.2", + "undici": "^7.16.0", + "uuid": "^11.1.0", + "zod": "^4.1.12" + }, + "bin": { + "task-master": "dist/task-master.js", + "task-master-ai": "dist/mcp-server.js", + "task-master-mcp": "dist/mcp-server.js" + }, + "engines": { + "node": ">=20.0.0" + }, + "optionalDependencies": { + "@anthropic-ai/claude-code": "^2.0.59", + "@biomejs/cli-linux-x64": "^1.9.4" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true, + "license": "MIT" + }, + "apps/extension/node_modules/task-master-ai/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "apps/extension/node_modules/task-master-ai/node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "apps/extension/node_modules/task-master-ai/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "apps/extension/node_modules/task-master-ai/node_modules/zod": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", + "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "apps/extension/node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", diff --git a/package.json b/package.json index 0e827f1c..b6802f30 100644 --- a/package.json +++ b/package.json @@ -20,9 +20,9 @@ "turbo:dev": "turbo dev", "turbo:build": "turbo build", "turbo:typecheck": "turbo typecheck", - "turbo:test": "turbo test", + "turbo:test": "turbo test:unit && turbo test:integration --concurrency=1", "turbo:test:unit": "turbo test:unit", - "turbo:test:integration": "turbo test:integration", + "turbo:test:integration": "turbo test:integration --concurrency=1", "build:build-config": "npm run build -w @tm/build-config", "test": "cross-env NODE_ENV=test node --experimental-vm-modules node_modules/.bin/jest", "test:unit": "node --experimental-vm-modules node_modules/.bin/jest --testPathPattern=unit", diff --git a/packages/tm-core/src/modules/config/services/runtime-state-manager.service.spec.ts b/packages/tm-core/src/modules/config/services/runtime-state-manager.service.spec.ts index 20d105d6..ab10baec 100644 --- a/packages/tm-core/src/modules/config/services/runtime-state-manager.service.spec.ts +++ b/packages/tm-core/src/modules/config/services/runtime-state-manager.service.spec.ts @@ -142,7 +142,7 @@ describe('RuntimeStateManager', () => { const jsonContent = writeCall[1] as string; // Check for 2-space indentation - expect(jsonContent).toMatch(/\n {2}/); + expect(jsonContent).toMatch(/\n /); }); });