From 96bb487a87af80f85edc844759dc14d105272d38 Mon Sep 17 00:00:00 2001 From: riad Date: Sat, 22 Aug 2026 16:11:17 -0400 Subject: [PATCH] Require Node 24 and update jsdom --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/workflows/ci.yml | 8 +- CHANGELOG.md | 4 +- CONTRIBUTING.md | 2 +- README.md | 4 +- SECURITY.md | 2 +- package-lock.json | 103 +++++++++++++------------- package.json | 6 +- src/shared/version.ts | 2 +- tests/unit/daemon.test.ts | 7 +- 10 files changed, 70 insertions(+), 70 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9364175..46a02fc 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -17,7 +17,7 @@ body: id: environment attributes: label: Environment - placeholder: Node 22, Ubuntu 24.04, Codex CLI + placeholder: Node 24, Ubuntu 24.04, Codex CLI validations: required: true - type: textarea diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b928f2a..a20846f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: strategy: fail-fast: false matrix: - node: [20.19.0, 22.x] + node: [24.15.0, 26.x] steps: - name: Check out repository @@ -45,13 +45,13 @@ jobs: run: npm run build - name: Install Chromium - if: matrix.node == '22.x' + if: matrix.node == '26.x' run: npx playwright install --with-deps chromium - name: Run production browser test - if: matrix.node == '22.x' + if: matrix.node == '26.x' run: npm run test:e2e - name: Verify package contents - if: matrix.node == '22.x' + if: matrix.node == '26.x' run: npm pack --dry-run diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e3ad1f..ddbc18a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,12 @@ All notable changes to Agent HTML Render are documented here. -## Unreleased +## 0.4.0 — 2026-08-22 - Tightened the README, bundled skill, contribution guide, security policy, issue templates, package summary, and review status copy. - Updated stale `0.2.x` references. +- Raised the minimum runtime to Node.js 24.15 LTS and moved CI coverage to Node 24 and Node 26. +- Updated jsdom from 29.1.1 to 30.0.1 for the test suite. ## 0.3.1 — 2026-08-22 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7d26778..5990ad3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,7 +4,7 @@ Keep changes local-first, vendor-neutral, and small enough to review. ## Development setup -Agent HTML Render requires Node.js 20.19 or newer. +Agent HTML Render requires Node.js 24.15 or newer. ```bash npm ci diff --git a/README.md b/README.md index 1ba6b2a..82ad33c 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ It works with Codex, Claude Code, OpenCode, and any other agent that can run a C ## Install the project skill -Agent HTML Render requires Node.js 20.19 or newer. Run this once in each repository: +Agent HTML Render requires Node.js 24.15 or newer. Run this once in each repository: ```bash npx --yes --prefer-online agent-html-render@latest install-skill @@ -104,7 +104,7 @@ Reviewer instructions and artifact excerpts stay separate. The output labels art - Runtime messages and feedback payloads are validated and bounded. - Session files are written under `.agent-html-render/` with private permissions and are ignored by Git. -Agent HTML Render v0.3 supports one reviewer on the local machine. Accounts, cloud sync, hosted sharing, and multiplayer review are out of scope. +Agent HTML Render v0.4 supports one reviewer on the local machine. Accounts, cloud sync, hosted sharing, and multiplayer review are out of scope. ## Migrating from AgentLens or the AgentRender preview diff --git a/SECURITY.md b/SECURITY.md index e063366..65d8666 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,7 +2,7 @@ ## Supported versions -Agent HTML Render is currently in its `0.3.x` development line. Security fixes go to the latest release only. +Agent HTML Render is currently in its `0.4.x` development line. Security fixes go to the latest release only. ## Reporting a vulnerability diff --git a/package-lock.json b/package-lock.json index 773f0ed..dbc3a7f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "agent-html-render", - "version": "0.3.1", + "version": "0.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "agent-html-render", - "version": "0.3.1", + "version": "0.4.0", "license": "MIT", "dependencies": { "chokidar": "^5.0.0", @@ -26,67 +26,49 @@ "@types/react": "^19.2.18", "@types/react-dom": "^19.2.4", "@vitejs/plugin-react": "^6.1.0", - "jsdom": "^29.0.0", + "jsdom": "^30.0.1", "tsx": "^4.23.12", "typescript": "^7.0.2", "vite": "^8.2.2", "vitest": "^4.1.11" }, "engines": { - "node": ">=20.19.0" + "node": "^24.15.0 || >=26.0.0" } }, "node_modules/@asamuzakjp/css-color": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", - "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-6.0.7.tgz", + "integrity": "sha512-vC/bk1Lz7Tn/EfU9/apOTBk80/8dyGyWMowPoV1tJ52muDGsDqt2HPT2klrFUiY60MQmQv9q8yIht15JnBgDGw==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/generational-cache": "^1.0.1", - "@csstools/css-calc": "^3.2.0", - "@csstools/css-color-parser": "^4.1.0", + "@csstools/css-calc": "^3.3.0", + "@csstools/css-color-parser": "^4.1.10", "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-tokenizer": "^4.0.0" + "@csstools/css-tokenizer": "^4.0.0", + "lru-cache": "^11.5.2" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": "^22.13.0 || >=24.0.0" } }, "node_modules/@asamuzakjp/dom-selector": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.1.1.tgz", - "integrity": "sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-8.3.2.tgz", + "integrity": "sha512-93Z1N+BQNXysodoicpOIyNh2drHfz/CTf9nnT0FEx72GJcIiwgydD7tGAr78j41LsYn3hlRn+LdGPuBLn1Bl8Q==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/generational-cache": "^1.0.1", - "@asamuzakjp/nwsapi": "^2.3.9", "bidi-js": "^1.0.3", "css-tree": "^3.2.1", - "is-potential-custom-element-name": "^1.0.1" + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.5.2" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - } - }, - "node_modules/@asamuzakjp/generational-cache": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz", - "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": "^22.13.0 || >=24.0.0" } }, - "node_modules/@asamuzakjp/nwsapi": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", - "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", - "dev": true, - "license": "MIT" - }, "node_modules/@bramus/specificity": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", @@ -2450,39 +2432,39 @@ } }, "node_modules/jsdom": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz", - "integrity": "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==", + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-30.0.1.tgz", + "integrity": "sha512-52v7mUVUfNQVYYqE1lcdaymWL0njO7lTLUog6ZvW2U5KsbiLk/GnZlVJ+qx0xfNJZ6Gn+KSpPNE52vurbxZwrA==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^5.1.11", - "@asamuzakjp/dom-selector": "^7.1.1", + "@asamuzakjp/css-color": "^6.0.5", + "@asamuzakjp/dom-selector": "^8.3.0", "@bramus/specificity": "^2.4.2", - "@csstools/css-syntax-patches-for-csstree": "^1.1.3", - "@exodus/bytes": "^1.15.0", + "@csstools/css-syntax-patches-for-csstree": "^1.1.7", + "@exodus/bytes": "^1.15.1", "css-tree": "^3.2.1", "data-urls": "^7.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.3.5", + "lru-cache": "^11.5.2", "parse5": "^8.0.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^6.0.1", - "undici": "^7.25.0", + "tough-cookie": "^6.0.2", + "undici": "^8.9.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^8.0.1", "whatwg-mimetype": "^5.0.0", - "whatwg-url": "^16.0.1", + "whatwg-url": "^17.1.0", "xml-name-validator": "^5.0.0" }, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24.0.0" + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "canvas": "^3.0.0" + "canvas": "^3.2.3" }, "peerDependenciesMeta": { "canvas": { @@ -2490,6 +2472,21 @@ } } }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-17.1.0.tgz", + "integrity": "sha512-3GeworPmc2ZfEEHP7lEbUfBX/L75wdEsi0rLNhXcXxnoN5jyq0SL5gCy06SGW2cyTIZdTvWIDQNQoza++vKeaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.15.1", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" + }, + "engines": { + "node": "^22.14.0 || >=24.0.0" + } + }, "node_modules/lightningcss": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", @@ -3670,13 +3667,13 @@ } }, "node_modules/undici": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", - "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.10.0.tgz", + "integrity": "sha512-HvltHd7avK13QIw/oLe4qoOLyoVSoafqJ2jYOrtMRBkbYT31eiBQ8O0ehRKZiEZCMEyLFQNIADpgCWC5fALvYQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=20.18.1" + "node": ">=22.19.0" } }, "node_modules/undici-types": { diff --git a/package.json b/package.json index df59ee6..aaaac3a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "agent-html-render", - "version": "0.3.1", + "version": "0.4.0", "description": "Review agent-written HTML locally and send element-level feedback to the agent.", "type": "module", "bin": { @@ -28,7 +28,7 @@ "prepack": "npm run build" }, "engines": { - "node": ">=20.19.0" + "node": "^24.15.0 || >=26.0.0" }, "keywords": [ "agents", @@ -72,7 +72,7 @@ "@types/react": "^19.2.18", "@types/react-dom": "^19.2.4", "@vitejs/plugin-react": "^6.1.0", - "jsdom": "^29.0.0", + "jsdom": "^30.0.1", "tsx": "^4.23.12", "typescript": "^7.0.2", "vite": "^8.2.2", diff --git a/src/shared/version.ts b/src/shared/version.ts index 8fe6e98..60d5e6c 100644 --- a/src/shared/version.ts +++ b/src/shared/version.ts @@ -1 +1 @@ -export const PACKAGE_VERSION = "0.3.1" as const; +export const PACKAGE_VERSION = "0.4.0" as const; diff --git a/tests/unit/daemon.test.ts b/tests/unit/daemon.test.ts index b4520a5..a7487f5 100644 --- a/tests/unit/daemon.test.ts +++ b/tests/unit/daemon.test.ts @@ -2,10 +2,11 @@ import { expect, test } from "vitest"; import { inspectDaemonHealth, type DaemonMetadata } from "../../src/node/daemon.js"; import type { RuntimeBuildIdentity } from "../../src/node/build.js"; import { EXPLICIT_FEEDBACK_ACK_CAPABILITY } from "../../src/shared/protocol.js"; +import { PACKAGE_VERSION } from "../../src/shared/version.js"; const metadata: DaemonMetadata = { protocolVersion: "1", - packageVersion: "0.3.1", + packageVersion: PACKAGE_VERSION, buildId: "sha256:current", pid: 4321, rootPath: "/tmp/example-project", @@ -15,7 +16,7 @@ const metadata: DaemonMetadata = { }; const expectedBuild: RuntimeBuildIdentity = { - packageVersion: "0.3.1", + packageVersion: PACKAGE_VERSION, buildId: "sha256:current", }; @@ -35,7 +36,7 @@ test("accepts only the exact running package build", () => { }); expect( - inspectDaemonHealth(metadata, { ...compatibleHealth, packageVersion: "0.3.0" }, expectedBuild), + inspectDaemonHealth(metadata, { ...compatibleHealth, packageVersion: "0.3.1" }, expectedBuild), ).toEqual({ healthy: true, compatible: false }); expect(