From 01297208b185fe046380a8ff378f2bdca0cbc72f Mon Sep 17 00:00:00 2001 From: Adam Wright Date: Mon, 14 Sep 2026 15:46:55 +0000 Subject: [PATCH 1/2] Hold TypeScript 7 in dependabot, and record today's work in the changelog Two pieces of cleanup left over from the four PRs that just landed. **Stop relitigating TypeScript 7 weekly.** #19 was closed with its TypeScript half deliberately unmerged: typescript-eslint does not support TS 7, and taking it would mean dropping the type-aware linting that found two real bugs the week it was added. Without an ignore rule dependabot reopens the same PR every Monday, and a standing red PR nobody intends to merge is indistinguishable from one nobody has got to yet. The rule points at #29, which records the decision and how to check whether it is time to revisit. Verified still true before writing it down: typescript-eslint 8.70.0 is current and https://github.com/typescript-eslint/typescript-eslint/issues/10940 is open. **Record the work.** The changelog had no Unreleased section, so ten fixed formatter bugs, the Spec Kit and tooling additions, and four major dependency upgrades were nowhere a user of this package could see them. It also owed a credit: @adidev001 was told on #5 that the harvest would be recorded in the changelog, and it was not yet. Co-Authored-By: Claude Opus 5 --- .github/dependabot.yml | 10 ++++++++++ CHANGELOG.md | 24 ++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 1d4cd6d..218496c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -8,6 +8,16 @@ updates: open-pull-requests-limit: 5 labels: - dependencies + ignore: + # TypeScript is held at 5.x: typescript-eslint does not support TS 7, and + # taking it would mean dropping the type-aware linting that found two real + # bugs the week it was added. Without this rule dependabot reopens the + # same PR every Monday and the decision gets relitigated weekly. + # + # Remove this when reactome/reactome-mcp#29 closes. + - dependency-name: typescript + update-types: + - version-update:semver-major groups: # Batch dev-dependency bumps (vitest, typescript, @types/*) into a # single PR — they churn often and aren't worth separate reviews. diff --git a/CHANGELOG.md b/CHANGELOG.md index 4aa6517..a0edc8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,30 @@ All notable changes to this project are documented here. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +### Fixed +- **Ten tools read field paths the Reactome services never return.** Each called the right endpoint and reported success, so nothing flagged them: `contentClient.get` asserts `T`, it does not verify it, and 51 of 56 tools had no test. `search_suggest` and `search_spellcheck` expected `{suggestions: []}` where the API returns a bare array; `entity_component_of` expected `Complex` objects where the API returns one entry per relationship type with parallel `names`/`stIds`/`schemaClasses` arrays; `participants` expected `stId` where the API returns `peDbId`; the four interactor tools read `score` one level above where it lives, throwing on `.toFixed`; `analysis_found_entities` read `mapsTo[].identifier` where the API returns `ids[]`. **`search_diagram` had never returned an answer** — it shared the grouped-results helper, but that endpoint returns a flat `entries` array, so every call threw `result.results is not iterable`. +- **Two tools dropped data silently, with no `undefined` to give it away.** `participants` never rendered external identifiers at all — the endpoint returns `refEntities` (an array), never a singular `referenceEntity`, so UniProt accessions were simply absent. `search_facets` returned nothing but its heading: each facet is an object with an `available` list, so `.length` on it was `undefined` and every section was skipped as falsy. +- **`events_hierarchy` failed every call that did not name a species.** Its default was `"Homo sapiens"`, which that endpoint answers with HTTP 500; `"9606"` returns 200. +- A failed Neo4j driver close rejected with nobody listening — `process.once` was handed an `async` function. +- `fetchWithRetry` rethrew `lastError`, typed `unknown`, so a non-`Error` rejection reached callers as something they could not read `.message` off. + +### Added +- **Spec Kit.** `.specify/` with a constitution written from failures this repository actually had, and `specs/` for design decisions. Spec 001 records what was found about response shapes; spec 002 states the transport and hosting question rather than answering it. The Spec Kit skills under `.claude/skills/` are tracked deliberately — people clone this repository and point an agent at it. +- **A live sweep.** `npm run sweep` calls all 53 tools against the live services. It checks for `undefined`, `[object Object]` and empty bodies, and — because marker-grepping cannot see a field that was dropped cleanly — asserts expected content for 16 tools whose arguments are known to return data. Runs weekly and on demand, not in CI, since a red run there can mean Reactome changed rather than this repository did. +- **ESLint with type-aware rules, and Prettier.** Plus coverage reporting with a ratchet threshold, and a `tsconfig.eslint.json` that finally includes `tests/` — which had been in no TypeScript project at all. +- **`createServer()`** (`src/server.ts`) builds a fully-registered server with no transport attached, so construction no longer happens at module scope and a hosted deployment can serve a second transport per session. **Harvested from #5 by [@adidev001](https://github.com/adidev001).** +- **`nonEmptyString`** (`src/schemas.ts`), shared by 83 argument schemas. Blank and whitespace-only arguments are rejected at the schema instead of reaching the service as a confusing 404 or a request for everything. Keeps the 2048-character cap added in 1.3.0. **Also from #5 by [@adidev001](https://github.com/adidev001).** + +### Changed +- **zod 4**, **neo4j-driver 6**, **vitest 5**, **@types/node 26**. `z.record(v)` now requires an explicit key type; that was the only breaking change reaching this code. +- CI now runs lint, format check, typecheck, **build** and coverage. The build had never run in CI. +- Test suite: 41 → 64 tests. + +### Held +- **TypeScript 7.** typescript-eslint does not support it, and taking it would mean dropping the type-aware linting that found two of the bugs above. Tracked in #29; dependabot is configured to ignore TypeScript major bumps until that closes. + ## [1.4.0] — 2026-04-24 ### Changed From 55794e80b6093996f21aa090508c2d03e7c7cf48 Mon Sep 17 00:00:00 2001 From: Adam Wright Date: Mon, 14 Sep 2026 15:56:52 +0000 Subject: [PATCH 2/2] Build with TypeScript 7, keeping TypeScript 6 for typescript-eslint Adam asked why TypeScript is not being bumped. The earlier answer -- "held, typescript-eslint does not support 7" -- treated it as a choice between 5.9 and 7, which it is not. Two things were missed. **TypeScript 6 was never considered.** typescript-eslint declares `typescript: ">=4.8.4 <6.1.0"`, so 6.0.3 is supported. Sitting on 5.9 was pointless. **TypeScript 7 does not actually require giving up linting.** The TypeScript team documents running it side by side with 6, which is what the error message typescript-eslint prints links to. So: - the build, typecheck and watch run TypeScript 7, installed as the alias `typescript-7` - the package named `typescript` is 6.0.3, which is the copy typescript-eslint loads Builds go from ~2.6s to ~0.38s. TypeScript 7's typecheck agrees with 6 across src and tests. Two things found while doing it, both worth the change on their own: - TypeScript 6 no longer auto-includes every `@types/*` package, so the build config has to name what it needs. `tsconfig.json` now sets `"types": ["node"]`; the lint config already did. Without it the build fails on `Buffer` and `process` while the typecheck passes, because only one of the two configs declared them. - **`node_modules/.bin/tsc` is not deterministic.** Both packages ship a `tsc` binary, and on the same tree it resolved to 7.0.2 after an incremental install and 6.0.3 after a clean `npm ci`. A bare `tsc` in a script would silently compile with a different compiler depending on how the tree was installed. Every script now names the compiler by path. `npm run check` and CI typecheck with **both** compilers, so a disagreement between them fails a check rather than showing up as lint and build quietly diverging. Verified: clean `npm ci`, full check green, 64 tests, and the live sweep runs all 53 tools against the TypeScript 7 build with no suspicious output. Issue #29 and the dependabot ignore now say what is actually held -- moving the `typescript` package to 7, which would disable linting while changing nothing about the build. Co-Authored-By: Claude Opus 5 --- .github/dependabot.yml | 15 +- .github/workflows/ci.yml | 5 + CHANGELOG.md | 6 +- README.md | 30 +++ package-lock.json | 385 ++++++++++++++++++++++++++++++++++++++- package.json | 12 +- tsconfig.json | 3 +- 7 files changed, 440 insertions(+), 16 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 218496c..251b32a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,12 +9,17 @@ updates: labels: - dependencies ignore: - # TypeScript is held at 5.x: typescript-eslint does not support TS 7, and - # taking it would mean dropping the type-aware linting that found two real - # bugs the week it was added. Without this rule dependabot reopens the - # same PR every Monday and the decision gets relitigated weekly. + # `typescript` is held at 6.x on purpose. It is not the compiler that + # builds this project -- that is TypeScript 7, installed as the alias + # `typescript-7` -- it is the copy typescript-eslint loads, and + # typescript-eslint throws on TS >= 7. Bumping this package to 7 would + # disable linting entirely while changing nothing about the build. # - # Remove this when reactome/reactome-mcp#29 closes. + # Without this rule dependabot reopens the same PR every Monday and the + # decision gets relitigated weekly. + # + # Remove this when reactome/reactome-mcp#29 closes, at which point + # `typescript` moves to 7 and the `typescript-7` alias goes away. - dependency-name: typescript update-types: - version-update:semver-major diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f8fe325..46ddce2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,7 +25,12 @@ jobs: - run: npm ci - run: npm run lint - run: npm run format:check + # Typechecks with TypeScript 7, the compiler the build uses. - run: npm run typecheck + # And again with TypeScript 6, the compiler typescript-eslint uses. Two + # compilers are in the tree by necessity; this is what stops them + # disagreeing silently. + - run: npm run typecheck:lint-compiler # The build was never run in CI, so nothing caught a broken emit until # someone published. - run: npm run build diff --git a/CHANGELOG.md b/CHANGELOG.md index a0edc8e..e44351c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,8 +23,12 @@ All notable changes to this project are documented here. This project adheres to - CI now runs lint, format check, typecheck, **build** and coverage. The build had never run in CI. - Test suite: 41 → 64 tests. +- **TypeScript 5.9 → 7**, via the side-by-side arrangement the TypeScript team documents. The build and typecheck run TypeScript 7 (installed as the alias `typescript-7`); the package named `typescript` stays at 6.0.3 because that is the newest typescript-eslint supports. Builds go from ~2.6s to ~0.38s, and `npm run check` typechecks with both compilers so they cannot diverge silently. TypeScript 6 stopped auto-including `@types/*`, so `tsconfig.json` now names `"types": ["node"]` — the lint config already did. + + Scripts invoke the compiler **by path** rather than calling `tsc`: both packages ship a `tsc` binary, and `node_modules/.bin/tsc` was observed pointing at 7.0.2 after an incremental install and 6.0.3 after a clean `npm ci` on the same tree. A bare `tsc` would compile with a different compiler depending on how the tree was installed. + ### Held -- **TypeScript 7.** typescript-eslint does not support it, and taking it would mean dropping the type-aware linting that found two of the bugs above. Tracked in #29; dependabot is configured to ignore TypeScript major bumps until that closes. +- **Moving the `typescript` package itself to 7.** typescript-eslint throws on TS >= 7, so bumping it would disable linting while changing nothing about the build, which already uses 7. Tracked in #29; dependabot ignores TypeScript major bumps until it closes, at which point the alias goes away. ## [1.4.0] — 2026-04-24 diff --git a/README.md b/README.md index c06e2d4..6bb34dc 100644 --- a/README.md +++ b/README.md @@ -262,11 +262,41 @@ Only registered when `NEO4J_URI` is set. Designed for curators running the [`rea ## Development ```bash +npm run check # lint, format, typecheck (both compilers), build, test npm run dev # watch mode — recompiles on changes +npm test # unit tests +npm run sweep # call all 53 tools against the live Reactome services npm run inspect # interactive MCP Inspector npm run demo # web demo with MCP bridge ``` +`npm run sweep` needs the network and hits production Reactome. It is not part +of `npm test`; run it before a release and after touching any formatter. Unit +tests pin shapes we already know about — only the sweep finds a tool that has +never worked. + +### Two TypeScript versions, on purpose + +The build and typecheck run **TypeScript 7**; the package named `typescript` is +pinned to **6.0.3** because that is what typescript-eslint supports +([typescript-eslint#10940](https://github.com/typescript-eslint/typescript-eslint/issues/10940)). +TypeScript 7 is installed under the alias `typescript-7`. This is the +[side-by-side arrangement](https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/#running-side-by-side-with-typescript-6.0) +the TypeScript team documents. + +**Scripts name the compiler by path rather than calling `tsc`.** Both packages +ship a `tsc` binary, so `node_modules/.bin/tsc` points at whichever npm linked +last — observed as 7.0.2 after an incremental install and 6.0.3 after a clean +`npm ci` on the same tree. A bare `tsc` would silently compile with a different +compiler depending on how the tree was installed. + +`npm run check` typechecks with **both**, so a disagreement between them shows +up as a failed check rather than as lint and build quietly diverging. + +When typescript-eslint supports TypeScript 7, drop the alias, move `typescript` +to 7, and point the scripts back at `tsc`. Tracked in +[#29](https://github.com/reactome/reactome-mcp/issues/29). + ## License This project is licensed under the Apache License 2.0 — see [LICENSE](LICENSE) for details. diff --git a/package-lock.json b/package-lock.json index 0921e0a..006eb20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,8 @@ "eslint": "^10.10.0", "eslint-config-prettier": "^10.1.8", "prettier": "^3.9.6", - "typescript": "^5.9.3", + "typescript": "^6.0.3", + "typescript-7": "npm:typescript@^7.0.2", "typescript-eslint": "^8.70.0", "vitest": "^5.0.0" }, @@ -819,6 +820,346 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript/typescript-aix-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", + "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", + "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", + "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", + "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", + "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", + "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", + "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-loong64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", + "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-mips64el": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", + "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", + "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-riscv64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", + "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-s390x": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", + "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", + "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", + "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", + "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", + "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", + "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-sunos-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", + "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", + "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", + "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/@vitest/coverage-v8": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-5.0.0.tgz", @@ -3375,9 +3716,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3388,6 +3729,42 @@ "node": ">=14.17" } }, + "node_modules/typescript-7": { + "name": "typescript", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", + "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc" + }, + "engines": { + "node": ">=16.20.0" + }, + "optionalDependencies": { + "@typescript/typescript-aix-ppc64": "7.0.2", + "@typescript/typescript-darwin-arm64": "7.0.2", + "@typescript/typescript-darwin-x64": "7.0.2", + "@typescript/typescript-freebsd-arm64": "7.0.2", + "@typescript/typescript-freebsd-x64": "7.0.2", + "@typescript/typescript-linux-arm": "7.0.2", + "@typescript/typescript-linux-arm64": "7.0.2", + "@typescript/typescript-linux-loong64": "7.0.2", + "@typescript/typescript-linux-mips64el": "7.0.2", + "@typescript/typescript-linux-ppc64": "7.0.2", + "@typescript/typescript-linux-riscv64": "7.0.2", + "@typescript/typescript-linux-s390x": "7.0.2", + "@typescript/typescript-linux-x64": "7.0.2", + "@typescript/typescript-netbsd-arm64": "7.0.2", + "@typescript/typescript-netbsd-x64": "7.0.2", + "@typescript/typescript-openbsd-arm64": "7.0.2", + "@typescript/typescript-openbsd-x64": "7.0.2", + "@typescript/typescript-sunos-x64": "7.0.2", + "@typescript/typescript-win32-arm64": "7.0.2", + "@typescript/typescript-win32-x64": "7.0.2" + } + }, "node_modules/typescript-eslint": { "version": "8.70.0", "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.70.0.tgz", diff --git a/package.json b/package.json index 2936802..7cdea6c 100644 --- a/package.json +++ b/package.json @@ -13,11 +13,11 @@ "LICENSE" ], "scripts": { - "build": "tsc", + "build": "node node_modules/typescript-7/bin/tsc", "prepare": "npm run build", "start": "node dist/index.js", - "dev": "tsc --watch", - "typecheck": "tsc --noEmit -p tsconfig.eslint.json", + "dev": "node node_modules/typescript-7/bin/tsc --watch", + "typecheck": "node node_modules/typescript-7/bin/tsc --noEmit -p tsconfig.eslint.json", "test": "vitest run", "test:watch": "vitest", "inspect": "npx @modelcontextprotocol/inspector node dist/index.js", @@ -29,7 +29,8 @@ "format:check": "prettier --check .", "test:coverage": "vitest run --coverage", "sweep": "node scripts/sweep-live.mjs", - "check": "npm run lint && npm run format:check && npm run typecheck && npm run build && npm test" + "check": "npm run lint && npm run format:check && npm run typecheck && npm run typecheck:lint-compiler && npm run build && npm test", + "typecheck:lint-compiler": "node node_modules/typescript/bin/tsc --noEmit -p tsconfig.eslint.json" }, "keywords": [ "mcp", @@ -52,7 +53,8 @@ "eslint": "^10.10.0", "eslint-config-prettier": "^10.1.8", "prettier": "^3.9.6", - "typescript": "^5.9.3", + "typescript": "^6.0.3", + "typescript-7": "npm:typescript@^7.0.2", "typescript-eslint": "^8.70.0", "vitest": "^5.0.0" }, diff --git a/tsconfig.json b/tsconfig.json index 1b7cea4..1b6c939 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,7 +16,8 @@ "noUnusedLocals": true, "noUnusedParameters": true, "noImplicitOverride": true, - "noUncheckedIndexedAccess": true + "noUncheckedIndexedAccess": true, + "types": ["node"] }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"]