From 4b109c20c38c2b56a5d8e61afdc70b9b7452f1eb Mon Sep 17 00:00:00 2001 From: "Puliuvarthi.Mahesh" Date: Mon, 26 Oct 2026 20:26:54 +0530 Subject: [PATCH] fix(portal-clis): pin @types/node in the four @bunli/core CLIs so typecheck passes on a clean install (closes #765) (#768) * fix(portal-clis): pin @types/node in the @bunli/core CLIs image-q pins @types/node 16.9.1 exactly, and with bun 1.4.4 a clean install hoists it, so fetch/Response/URL/Headers vanish from typecheck. Declare @types/node 26.6.5 as a devDependency in jobbank-search, jobdanmark-search, jobindex-search and jobnet-search, and add a guard test that checks every @bunli/core CLI does so. Closes #765 Generated by NightShift * docs(changelog): note the @types/node pin for the @bunli/core CLIs (#768) Co-Authored-By: Claude Fable 5.1 --------- Co-authored-by: Mads Lorentzen Co-authored-by: Claude Fable 5.1 --- .../skills/jobbank-search/cli/package.json | 1 + .../skills/jobdanmark-search/cli/package.json | 5 +-- .../skills/jobindex-search/cli/package.json | 5 +-- .agents/skills/jobnet-search/cli/package.json | 5 +-- CHANGELOG.md | 11 ++++++ tests/test_portal_cli_types.py | 35 +++++++++++++++++++ 6 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 tests/test_portal_cli_types.py diff --git a/.agents/skills/jobbank-search/cli/package.json b/.agents/skills/jobbank-search/cli/package.json index 6c1128ae..4c166742 100644 --- a/.agents/skills/jobbank-search/cli/package.json +++ b/.agents/skills/jobbank-search/cli/package.json @@ -20,6 +20,7 @@ }, "devDependencies": { "@types/bun": "1.3.14", + "@types/node": "26.6.5", "typescript": "^5.4.0" } } diff --git a/.agents/skills/jobdanmark-search/cli/package.json b/.agents/skills/jobdanmark-search/cli/package.json index 28b48d00..7dd811f5 100644 --- a/.agents/skills/jobdanmark-search/cli/package.json +++ b/.agents/skills/jobdanmark-search/cli/package.json @@ -19,7 +19,8 @@ "zod": "^3.23.0" }, "devDependencies": { - "typescript": "^5.4.0", - "@types/bun": "1.3.14" + "@types/bun": "1.3.14", + "@types/node": "26.6.5", + "typescript": "^5.4.0" } } diff --git a/.agents/skills/jobindex-search/cli/package.json b/.agents/skills/jobindex-search/cli/package.json index 834773e4..fc79b698 100644 --- a/.agents/skills/jobindex-search/cli/package.json +++ b/.agents/skills/jobindex-search/cli/package.json @@ -19,7 +19,8 @@ "zod": "^3.23.0" }, "devDependencies": { - "typescript": "^5.4.0", - "@types/bun": "1.3.14" + "@types/bun": "1.3.14", + "@types/node": "26.6.5", + "typescript": "^5.4.0" } } diff --git a/.agents/skills/jobnet-search/cli/package.json b/.agents/skills/jobnet-search/cli/package.json index 8e1c9e93..eb5e61b1 100644 --- a/.agents/skills/jobnet-search/cli/package.json +++ b/.agents/skills/jobnet-search/cli/package.json @@ -18,7 +18,8 @@ "zod": "^3.23.0" }, "devDependencies": { - "typescript": "^5.4.0", - "@types/bun": "1.3.14" + "@types/bun": "1.3.14", + "@types/node": "26.6.5", + "typescript": "^5.4.0" } } diff --git a/CHANGELOG.md b/CHANGELOG.md index 79104a6c..da2ddb8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,17 @@ per-file diff commands. ### Fixed +- **The four `@bunli/core` portal CLIs typecheck on a clean install again** (#768, closes #765, + `.agents/skills/{jobbank,jobdanmark,jobindex,jobnet}-search/cli/package.json`, + `tests/test_portal_cli_types.py`) - `bun-types` accepts any `@types/node`, while `@bunli/core` + reaches `image-q`, which pins `@types/node` 16.9.1 exactly. bun 1.4.4 satisfies the open range + with that hoisted 16.9.1, whose globals have no `fetch`, `Response`, `URL` or `Headers`, so + `bun run typecheck` failed with TS2339/TS2749 errors in CI (which installs the latest bun and has + no committed lockfile) where bun 1.4.3 had hoisted a current `@types/node`. Each of the four CLIs + now declares `@types/node` 26.6.5 directly, so the top-level version no longer depends on the + resolver's placement, and a Python test fails if a CLI depending on `@bunli/core` drops the pin. + `freehire-search` and `linkedin-search` never pull `image-q` and are untouched. + - **`freehire-search detail` no longer asks the API for a slug cut out of a URL on another host** (#623, fixes #622, `.agents/skills/freehire-search/cli/src/helpers.ts`, `tests/parsing.test.ts`, `tests/commands.test.ts`, `SKILL.md`) - `normalizeSlug` took the segment after `/jobs/` from diff --git a/tests/test_portal_cli_types.py b/tests/test_portal_cli_types.py new file mode 100644 index 00000000..c7361290 --- /dev/null +++ b/tests/test_portal_cli_types.py @@ -0,0 +1,35 @@ +"""Portal CLIs using @bunli/core must pin @types/node directly. + +@bunli/core pulls in image-q, which pins @types/node 16.9.1 exactly. Without +a direct devDependency, bun 1.4.4 hoists that version and the web globals +(fetch, Response, URL, Headers) vanish from typecheck. +""" + +import json +import re +import unittest +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent + + +class PortalCliTypesTests(unittest.TestCase): + def test_bunli_clis_pin_types_node(self): + manifests = sorted((ROOT / ".agents" / "skills").glob("*/cli/package.json")) + checked = 0 + for path in manifests: + data = json.loads(path.read_text(encoding="utf-8")) + if "@bunli/core" not in data.get("dependencies", {}): + continue + checked += 1 + version = data.get("devDependencies", {}).get("@types/node") + with self.subTest(cli=path.parent.parent.name): + self.assertIsNotNone(version, "missing @types/node devDependency") + self.assertRegex(version, r"^\d+(\.\d+)*$") + # image-q pins 16.9.1, which lacks fetch/Response/URL/Headers. + self.assertGreaterEqual(int(version.split(".")[0]), 18) + self.assertGreater(checked, 0) + + +if __name__ == "__main__": + unittest.main()