From 1146f2630fb3eb1b845b34132de93de40b721508 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 11 Jun 2026 17:49:47 +0000 Subject: [PATCH 01/12] chore: sync versions to v4.0.0 [skip ci] --- package.json | 4 ++-- packages/cli/package.json | 2 +- packages/codemod/package.json | 2 +- packages/compat/package.json | 2 +- packages/context/package.json | 2 +- packages/core/package.json | 2 +- packages/core/src/spec.ts | 2 +- packages/evolve/package.json | 2 +- packages/express/package.json | 2 +- packages/go/package.json | 2 +- packages/mcp-server/package.json | 2 +- packages/mcp/package.json | 2 +- packages/metrics/package.json | 2 +- packages/native/package.json | 2 +- packages/playground/package.json | 2 +- packages/protocol/package.json | 2 +- packages/python/package.json | 2 +- packages/react/package.json | 2 +- packages/review-mcp/package.json | 2 +- packages/review-python/package.json | 2 +- packages/review/package.json | 2 +- packages/terminal/package.json | 2 +- packages/test/package.json | 2 +- packages/vue/package.json | 2 +- 24 files changed, 25 insertions(+), 25 deletions(-) diff --git a/package.json b/package.json index 1952fa1a7..01abead73 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { "name": "kern-monorepo", - "version": "3.5.8", + "version": "4.0.0", "private": true, "type": "module", "packageManager": "pnpm@10.32.1", - "description": "KERN \u2014 backend structure and portable route logic for TypeScript/Express and Python/FastAPI parity.", + "description": "KERN — backend structure and portable route logic for TypeScript/Express and Python/FastAPI parity.", "author": "cukas", "repository": { "type": "git", diff --git a/packages/cli/package.json b/packages/cli/package.json index 6f6c24e15..26c22fecc 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/cli", - "version": "3.5.8", + "version": "4.0.0", "description": "KERN CLI — transpile, compile, minify, and analyze .kern files", "type": "module", "main": "./dist/index.js", diff --git a/packages/codemod/package.json b/packages/codemod/package.json index 159a7f985..931a1090b 100644 --- a/packages/codemod/package.json +++ b/packages/codemod/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/codemod", - "version": "3.5.8", + "version": "4.0.0", "description": "Kern Codemod — apply kern-review TemplateMatch results to rewrite TS into KERN-template-backed TS", "type": "module", "main": "./dist/index.js", diff --git a/packages/compat/package.json b/packages/compat/package.json index 12df1f452..1164e7fc4 100644 --- a/packages/compat/package.json +++ b/packages/compat/package.json @@ -1,6 +1,6 @@ { "name": "kern-lang", - "version": "3.5.8", + "version": "4.0.0", "description": "The language LLMs think in. Write one .kern file, ship 7 targets. 70% fewer tokens.", "type": "module", "main": "./dist/index.js", diff --git a/packages/context/package.json b/packages/context/package.json index df9ae3967..05d19afe5 100644 --- a/packages/context/package.json +++ b/packages/context/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/context", - "version": "3.5.8", + "version": "4.0.0", "description": "Kern Project Context Graph — compact, deterministic whole-project map for LLM context", "type": "module", "main": "./dist/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index ea8eec4ff..efde15a57 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/core", - "version": "3.5.8", + "version": "4.0.0", "description": "Kern core — parser, types, spec, config, style engines, codegen", "type": "module", "main": "./dist/index.js", diff --git a/packages/core/src/spec.ts b/packages/core/src/spec.ts index 5bdaf48da..2712c26a6 100644 --- a/packages/core/src/spec.ts +++ b/packages/core/src/spec.ts @@ -10,7 +10,7 @@ * Targets: Next.js, React+Tailwind, React Native, Express */ -export const KERN_VERSION = '3.5.8'; +export const KERN_VERSION = '4.0.0'; // ── Grammar ───────────────────────────────────────────────────────────── export const IR_GRAMMAR = ` diff --git a/packages/evolve/package.json b/packages/evolve/package.json index 6d7fcc296..5a7da34b0 100644 --- a/packages/evolve/package.json +++ b/packages/evolve/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/evolve", - "version": "3.5.8", + "version": "4.0.0", "description": "Kern Evolve — self-extending template system: detect gaps, propose templates, validate, stage", "type": "module", "main": "./dist/index.js", diff --git a/packages/express/package.json b/packages/express/package.json index 63b33ca14..927d9eb97 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/express", - "version": "3.5.8", + "version": "4.0.0", "description": "Kern Express TypeScript backend transpiler", "type": "module", "main": "./dist/index.js", diff --git a/packages/go/package.json b/packages/go/package.json index 3b451f1e7..4be3450db 100644 --- a/packages/go/package.json +++ b/packages/go/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/go", - "version": "3.5.8", + "version": "4.0.0", "description": "KERN Go net/http backend codegen", "type": "module", "main": "./dist/index.js", diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index 63e619f87..c996c4238 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/mcp-server", - "version": "3.5.8", + "version": "4.0.0", "description": "KERN MCP server — compile, review, and analyze .kern files via MCP", "type": "module", "main": "./dist/index.js", diff --git a/packages/mcp/package.json b/packages/mcp/package.json index bcdd5776f..3c8616a72 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/mcp", - "version": "3.5.8", + "version": "4.0.0", "description": "Kern MCP server transpiler — compile .kern to secure MCP servers", "type": "module", "main": "./dist/index.js", diff --git a/packages/metrics/package.json b/packages/metrics/package.json index b650f5d27..2be1fd94d 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/metrics", - "version": "3.5.8", + "version": "4.0.0", "description": "Kern language metrics and project context export", "type": "module", "main": "./dist/index.js", diff --git a/packages/native/package.json b/packages/native/package.json index bbcab38f8..acbf28084 100644 --- a/packages/native/package.json +++ b/packages/native/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/native", - "version": "3.5.8", + "version": "4.0.0", "description": "Kern React Native transpiler", "type": "module", "main": "./dist/index.js", diff --git a/packages/playground/package.json b/packages/playground/package.json index 8226570c1..6640fa34b 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/playground", - "version": "3.5.8", + "version": "4.0.0", "private": true, "description": "KERN Playground — interactive compiler UI", "type": "module", diff --git a/packages/protocol/package.json b/packages/protocol/package.json index f7087f044..5faf3865e 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/protocol", - "version": "3.5.8", + "version": "4.0.0", "description": "Kern draft protocol — structured AI communication format", "type": "module", "main": "./dist/index.js", diff --git a/packages/python/package.json b/packages/python/package.json index 61cbb51a6..906420067 100644 --- a/packages/python/package.json +++ b/packages/python/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/python", - "version": "3.5.8", + "version": "4.0.0", "description": "KERN Python backend codegen (FastAPI router target included)", "type": "module", "main": "./dist/index.js", diff --git a/packages/react/package.json b/packages/react/package.json index 18297426a..369e0234b 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/react", - "version": "3.5.8", + "version": "4.0.0", "description": "Kern React transpilers — Tailwind, Next.js, Web", "type": "module", "main": "./dist/index.js", diff --git a/packages/review-mcp/package.json b/packages/review-mcp/package.json index d8f5fdc42..311d9bfae 100644 --- a/packages/review-mcp/package.json +++ b/packages/review-mcp/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/review-mcp", - "version": "3.5.8", + "version": "4.0.0", "repository": { "type": "git", "url": "git+https://github.com/KERNlang/kern.git", diff --git a/packages/review-python/package.json b/packages/review-python/package.json index b72946c7a..76dfd6816 100644 --- a/packages/review-python/package.json +++ b/packages/review-python/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/review-python", - "version": "3.5.8", + "version": "4.0.0", "description": "Python concept mapper for kern review — tree-sitter based", "type": "module", "main": "dist/index.js", diff --git a/packages/review/package.json b/packages/review/package.json index 05aa5d7d7..00126e54e 100644 --- a/packages/review/package.json +++ b/packages/review/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/review", - "version": "3.5.8", + "version": "4.0.0", "description": "Kern Review — scan TS, infer .kern IR, roundtrip diff, report", "type": "module", "main": "./dist/index.js", diff --git a/packages/terminal/package.json b/packages/terminal/package.json index 8e312eafd..f1b03086c 100644 --- a/packages/terminal/package.json +++ b/packages/terminal/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/terminal", - "version": "3.5.8", + "version": "4.0.0", "description": "Kern ANSI terminal rendering transpiler", "type": "module", "main": "./dist/index.js", diff --git a/packages/test/package.json b/packages/test/package.json index 0c8e3dfa8..b3dc3e73e 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/test", - "version": "3.5.8", + "version": "4.0.0", "description": "Native KERN structural test runner", "type": "module", "main": "./dist/index.js", diff --git a/packages/vue/package.json b/packages/vue/package.json index ff5f087d1..882fd7331 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/vue", - "version": "3.5.8", + "version": "4.0.0", "description": "Kern Vue/Nuxt transpilers — Vue 3 SFC + Nuxt 3 output", "type": "module", "main": "./dist/index.js", From f06f1a51b35934fa6fabcea0becef6649bf87118 Mon Sep 17 00:00:00 2001 From: cukas Date: Fri, 12 Jun 2026 07:49:32 +0200 Subject: [PATCH 02/12] chore(check): sync @kernlang/check version to 4.0.0 The dev version-sync commit predates packages/check (landed on main in the v4 wave), so the merge brought it in at 3.5.8 and check:repo failed. Co-Authored-By: kern-agon --- packages/check/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/check/package.json b/packages/check/package.json index 68b6b9671..d5bce66b7 100644 --- a/packages/check/package.json +++ b/packages/check/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/check", - "version": "3.5.8", + "version": "4.0.0", "description": "KERN nominal assignability core \u2014 lifted Liskov subtype and override-variance checks", "type": "module", "main": "./dist/index.js", From c1da90fd86c5a75d94c06e203edbeb6c781d8bda Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jun 2026 09:09:33 +0200 Subject: [PATCH 03/12] Chore(deps): bump the minor-and-patch group with 4 updates (#430) Bumps the minor-and-patch group with 4 updates: [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome), [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [next](https://github.com/vercel/next.js) and [ink](https://github.com/vadimdemedes/ink). Updates `@biomejs/biome` from 2.4.16 to 2.5.0 - [Release notes](https://github.com/biomejs/biome/releases) - [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md) - [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.0/packages/@biomejs/biome) Updates `@types/node` from 25.9.2 to 25.9.3 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `next` from 16.2.7 to 16.2.9 - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v16.2.7...v16.2.9) Updates `ink` from 7.0.5 to 7.0.6 - [Release notes](https://github.com/vadimdemedes/ink/releases) - [Commits](https://github.com/vadimdemedes/ink/compare/v7.0.5...v7.0.6) --- updated-dependencies: - dependency-name: "@biomejs/biome" dependency-version: 2.5.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: "@types/node" dependency-version: 25.9.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: next dependency-version: 16.2.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: ink dependency-version: 7.0.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor-and-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 4 +- packages/playground/package.json | 4 +- packages/terminal/package.json | 2 +- pnpm-lock.yaml | 246 +++++++++++++++---------------- 4 files changed, 128 insertions(+), 128 deletions(-) diff --git a/package.json b/package.json index 25e421352..ceef5f307 100644 --- a/package.json +++ b/package.json @@ -55,8 +55,8 @@ } }, "devDependencies": { - "@biomejs/biome": "^2.4.16", - "@types/node": "^25.9.2", + "@biomejs/biome": "^2.5.0", + "@types/node": "^25.9.3", "typescript": "^6.0.3" } } diff --git a/packages/playground/package.json b/packages/playground/package.json index 6640fa34b..5c7fe0ecf 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -20,12 +20,12 @@ "@kernlang/vue": "workspace:*", "@monaco-editor/react": "^4.6.0", "monaco-editor": "^0.55.1", - "next": "^16.2.7", + "next": "^16.2.9", "react": "^19.2.7", "react-dom": "^19.2.7" }, "devDependencies": { - "@types/node": "^25.9.2", + "@types/node": "^25.9.3", "@types/react": "^19.2.17", "@types/react-dom": "^19.0.0", "typescript": "^6.0.3" diff --git a/packages/terminal/package.json b/packages/terminal/package.json index f1b03086c..7f20c9e45 100644 --- a/packages/terminal/package.json +++ b/packages/terminal/package.json @@ -48,7 +48,7 @@ "devDependencies": { "@types/react": "19.2.17", "@inkjs/ui": "2.0.0", - "ink": "7.0.5", + "ink": "7.0.6", "react": "19.2.7" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cecc32ea7..37052868b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,11 +20,11 @@ importers: .: devDependencies: '@biomejs/biome': - specifier: ^2.4.16 - version: 2.4.16 + specifier: ^2.5.0 + version: 2.5.0 '@types/node': - specifier: ^25.9.2 - version: 25.9.2 + specifier: ^25.9.3 + version: 25.9.3 typescript: specifier: ^6.0.3 version: 6.0.3 @@ -266,8 +266,8 @@ importers: specifier: ^0.55.1 version: 0.55.1 next: - specifier: ^16.2.7 - version: 16.2.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + specifier: ^16.2.9 + version: 16.2.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: specifier: ^19.2.7 version: 19.2.7 @@ -276,8 +276,8 @@ importers: version: 19.2.7(react@19.2.7) devDependencies: '@types/node': - specifier: ^25.9.2 - version: 25.9.2 + specifier: ^25.9.3 + version: 25.9.3 '@types/react': specifier: ^19.2.17 version: 19.2.17 @@ -359,13 +359,13 @@ importers: devDependencies: '@inkjs/ui': specifier: 2.0.0 - version: 2.0.0(ink@7.0.5(@types/react@19.2.17)(react@19.2.7)) + version: 2.0.0(ink@7.0.6(@types/react@19.2.17)(react@19.2.7)) '@types/react': specifier: 19.2.17 version: 19.2.17 ink: - specifier: 7.0.5 - version: 7.0.5(@types/react@19.2.17)(react@19.2.7) + specifier: 7.0.6 + version: 7.0.6(@types/react@19.2.17)(react@19.2.7) react: specifier: 19.2.7 version: 19.2.7 @@ -392,65 +392,65 @@ packages: resolution: {integrity: sha512-p+CMKJ93HFmLkjXKlXiVGlMQEuRb6H0MokBSwUsX+S6BRX8eV5naFZpQJFfJHjRZY0Hmnqy1/r6UWl3x+19zYA==} engines: {node: '>=18'} - '@biomejs/biome@2.4.16': - resolution: {integrity: sha512-x9ajFh1zChVybCiM3TN6OD4phAqLgtPZjFrZF+aTMYCPjwBO+k529TX7PPsAqtGNLeV4UgzwQnowEgS7bGmzcA==} + '@biomejs/biome@2.5.0': + resolution: {integrity: sha512-4kURkd9hAPrdDM3C9n82ycYgx8hvQcW6MjKTEejruj8rK0N8P3OPpdy8BvI8kt3KWY4ycF5XtDOrktetEfhfuw==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.4.16': - resolution: {integrity: sha512-wxPvu4XOA85YJk9ixSWUmq/QBHbid85BISbOAqqBM/5xQpPk9ayjk5375tOlSC0BeCwNSbPFafQBm+vBumXq0A==} + '@biomejs/cli-darwin-arm64@2.5.0': + resolution: {integrity: sha512-Mn3Fwi3SA5fgmfCPqmzpWF2DLZnms3BVAhM088nTnGrTZmHS3wwIjcoZPqpXeNgd3DrrLH6xp8vTLIBuJoZiXw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.4.16': - resolution: {integrity: sha512-xFCqGPwYusQJp4N4NJLi1XJiZqjwFdjhT+KqtNy+Ug3qgfczqnTa6MSDvxJF6TkuDLoYJItMapz6tAf7kCekFw==} + '@biomejs/cli-darwin-x64@2.5.0': + resolution: {integrity: sha512-rg3VPL5P8mYro6pqlXYXuJWph21slVp3SZtAqWSrkZs40d2gTzYmHF8E/X1iTID25btmNKltNDJ926sqVBp7DQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.4.16': - resolution: {integrity: sha512-oYxnW0ARfJkr72ezzF2OR8N/rtkgLUQeYtF8cFhVswbknHxtTcmzSsanVJP8yQKnGpGpc2ck6c5zLvHahL6Cbg==} + '@biomejs/cli-linux-arm64-musl@2.5.0': + resolution: {integrity: sha512-vQdM4oSGaf7ZNeGO9w5+Y8SBtyser9M6znxYbm7Ec8wInxJu1WiKxFYZW5Auj2d80bcVvefuGGRxoFOE0eee8g==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.4.16': - resolution: {integrity: sha512-2kFb4//jxfZaP6D+Rj5VkHkxgyD9EoRAVBEQb8PKRv+s4NO2zYNJKXFaJmK1CmhufJOWEfpHKaRbOja7qjmdhQ==} + '@biomejs/cli-linux-arm64@2.5.0': + resolution: {integrity: sha512-tl+LW8fdD96/xdeWtWwc82LIOc5CoY7N2AsogLTp5R4ECErYt+8Jl/N68ezN9vzSiqPTxw6vjcihoLPYKZHrlw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.4.16': - resolution: {integrity: sha512-iHDS+MCM65DPqWGu+ECC3uoALyj2H7F4nVUPxIPjz/PIl94EUu+EDfGZDzFP+NY1EOPVt9NQvwFqq7HdMmowdg==} + '@biomejs/cli-linux-x64-musl@2.5.0': + resolution: {integrity: sha512-+9hIcMngJ+yGUahXqZuZ8CoWKJE9SAZsFsM3QDvXpNsLbXZ9lqVzgBhOk/jTSYkOA0GLP9eu3teukqpLUojHMg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.4.16': - resolution: {integrity: sha512-NbcBbi/nJqn5baae6wqRXdS7Gadf2uRpehSh6vMSYpG8OhkXl/Xg8aorWrJ+9VWqAT5ml90alLvorkpMW0nBwQ==} + '@biomejs/cli-linux-x64@2.5.0': + resolution: {integrity: sha512-zpEGf4RQbFEh8Vt7OmavLyyOzRbtcE9osCqrS1kfvt8jDvxwhKXLSf7n0ebr/ov0RJ9ssP+lhs6C8a9WwFvrQA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.4.16': - resolution: {integrity: sha512-0rgImMsNb5v/chhkIFe3wu7PEFClS6RBAYUijGL9UsYN3PanSaoK24HSSuSJb1pYbYYVjzAyZTl3gtjJ84BM8A==} + '@biomejs/cli-win32-arm64@2.5.0': + resolution: {integrity: sha512-jB0wAvTLI4itx5VidqVUejPQFhRUxiZ9l9FvZ26D5fl6t3qme+ZB4PD3bTSeL1vZ8NI2Rx/zj6H9zcESuGHKGw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.4.16': - resolution: {integrity: sha512-Kp85jgoBHa05gix6UIRjfCDiUV3w/8VIdZ247VyyO2gEjaw12WEVhdIjlxp/AMzXxqxQwbxNTDVZ3Mwd2RG5rw==} + '@biomejs/cli-win32-x64@2.5.0': + resolution: {integrity: sha512-VT/lF+GId+67j8aDfLkxdxNoVApsPSTbyAtB3jJq0IWTrY77WXfbPfpngxq0bA6JCEv/7k8C9qWjDRKRznDlyw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] - '@emnapi/runtime@1.10.0': - resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} '@hono/node-server@1.19.14': resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==} @@ -637,57 +637,57 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@next/env@16.2.7': - resolution: {integrity: sha512-tMJizPlj6ZYpBMMdK8S0LJufrP4QTdR6pcv9KQ/bVETPAmg0j1mlHE9G2c38UyGHxoBapgwuj7XjbGJ2RcDFOg==} + '@next/env@16.2.9': + resolution: {integrity: sha512-ki5VxxXfzD/9TDe13wyeTKIjQTAwBVpnr8KhRDUr8ltMUq1/NBpWNT5tiPoxiGl+PHM4X2ahSOiPk6iAimIzPg==} - '@next/swc-darwin-arm64@16.2.7': - resolution: {integrity: sha512-vm1EDI/pVaBNNiychmxk3fft+OhQPVD9cIM/tReLZIQ3TfQ4kqI9DwKk00dzuS1ulC7icbrzCFrmRRlk9PfNdw==} + '@next/swc-darwin-arm64@16.2.9': + resolution: {integrity: sha512-HkfxNYUCmcct0Xsqib5KxqMSHV4AHJq857BNRchyBDs4YS19aHzVfn1kDuBYKqLLQBjXgnkIsjV2Kd4d2wzYhw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.2.7': - resolution: {integrity: sha512-O3IRSv1ZBL1zs0WrIgefTEcTKFVn+ryxBNe54erJ6KsD+2f/Mmt7g2jOYh8PSBdUwPtKQJuCsTMlZ7tIu2AcsQ==} + '@next/swc-darwin-x64@16.2.9': + resolution: {integrity: sha512-7IAtK4MeybpqRV9GRABWEhJ62mOS+rzWOzOTFie4cSEtm12xsoOMJRcECoZx3FHPzFAqN/IJtHqWAFOLfl152w==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.2.7': - resolution: {integrity: sha512-Re6PZtjBDd0aMU+VcZcC/PrIvj4WhrjDYtMhhCVQamWN4L90EVP0pcEOBQD25prSlw7OzNw5QpHLWMilRLsRNw==} + '@next/swc-linux-arm64-gnu@16.2.9': + resolution: {integrity: sha512-hBD75iWpUtkL9SmQmcRhmLomn9jgkPzCEkbOcLgHymPEKzv+6ONy13RRiIEz/iEObjkS2Jlb5gYS2XGoS3X4rw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@next/swc-linux-arm64-musl@16.2.7': - resolution: {integrity: sha512-qyogG9QtBzWxgJfeGBvOEHI3851gTfCF3wLZ5RDLTBJGAmE9p1qDwKCOdrBrvBzRvYDT+gUDp72pzlSEfAXgNA==} + '@next/swc-linux-arm64-musl@16.2.9': + resolution: {integrity: sha512-qZTI3pf9SGc/obr8NkQAekBxmp1QK+kVm+VAf3BALLfFAj+1kUhkTxmrWpVos9R/UYIA8AWX2p6cGI5WdwzVUA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@next/swc-linux-x64-gnu@16.2.7': - resolution: {integrity: sha512-Vhe4ZDuBpmMogrGi5D4R2Kq4JAQlj6+wvgaFYy31zfES0zPmt6TLA+cuYpM/OLrPZjo2MYQTHVqNUSCR6+fDZQ==} + '@next/swc-linux-x64-gnu@16.2.9': + resolution: {integrity: sha512-xm0HfRNX+UkH4R3c18ynswjj5o5uEj/7iI9p9omdtTSIsRCzQqkGMA+10nzJ4EHnYC3as65IMhbbl5fWRUWHYg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@next/swc-linux-x64-musl@16.2.7': - resolution: {integrity: sha512-srvian89JahFLw1YLBEuhvPJ0DO5lpUeJQMXy4xYo7g628ZlNgXdNkqoxSAv9OYrBfByh6vxISMwW/mRbzCY+g==} + '@next/swc-linux-x64-musl@16.2.9': + resolution: {integrity: sha512-QumimHkGEG6vM3PfEDWKyKen03NcqLOkeKB1EfcPe7VxzmEiCa4jNnMyBn/US5zcd/VE1CI+O8Ovb3lfjVHfGw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@next/swc-win32-arm64-msvc@16.2.7': - resolution: {integrity: sha512-GX3wvLpULFuRFJzwHaKfm7QZJ18F4ZSuxlPJ96BoBglCzBmdSjyeBKF+ZhWhvL/ckxNfLnNa7bsObO2ipYpszw==} + '@next/swc-win32-arm64-msvc@16.2.9': + resolution: {integrity: sha512-hzQpKZvw8rAwI6A2uQh6SacCSvNAXaIkPNsWwzqqfRiIMiXMfH936skDhz1OO6KpvdKkJrgHHtqQOq5PIXOvdQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.2.7': - resolution: {integrity: sha512-J4WlM72NMk076Qsg0jTdK3SNXatlSdnjW7L7oNGLst1tAGjHrJh/FYi+pw9wyIjEtGRKDNzD0zuiY16oWYWVaw==} + '@next/swc-win32-x64-msvc@16.2.9': + resolution: {integrity: sha512-qr2VL3Ce5QrwgO2yh1ujSBawrimjVKX8FGF/cOynmdYKJY0BdHpGVNIRK1tqONB10Vkm25Ub1BD2bkjWs4+96w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -713,8 +713,8 @@ packages: '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} - '@types/node@25.9.2': - resolution: {integrity: sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw==} + '@types/node@25.9.3': + resolution: {integrity: sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==} '@types/qs@6.15.0': resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} @@ -774,8 +774,8 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.34: - resolution: {integrity: sha512-IMDedajPifLnHNY0X9n8hKxRTQ6/eTHwr5bDo04WnuqxyKw6LYtQywCuuqPZwhl3aBXMvQpJov42GLCwRRdQzw==} + baseline-browser-mapping@2.10.37: + resolution: {integrity: sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==} engines: {node: '>=6.0.0'} hasBin: true @@ -799,8 +799,8 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} - caniuse-lite@1.0.30001797: - resolution: {integrity: sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w==} + caniuse-lite@1.0.30001799: + resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} chalk@5.6.2: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} @@ -918,8 +918,8 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - es-toolkit@1.47.0: - resolution: {integrity: sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==} + es-toolkit@1.47.1: + resolution: {integrity: sha512-5RAqEwf4P4E17p+W75KLOWw/nOvKZzSQpxM32IpI2KZLaVonjTrZ0Ai5ghMaVI9eKC2p8eoQgcBdkEDgzFk6+Q==} escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -1027,8 +1027,8 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ink@7.0.5: - resolution: {integrity: sha512-zWNjGHQPxSeiSAmDUOq+QPQ6CfmMhmNi85vrJIuy4prafKKUSoZlXEy4wbM7LuLuF1pDURk7qvF4fxrQlLxv3w==} + ink@7.0.6: + resolution: {integrity: sha512-/KG651f+LHln9gumb5ltieFqzNGJdhX1b/WwsCUd2Py7Htuk9KUzyFrk25ugmzjXyDneXSoXD3cm4ql4dWFGsQ==} engines: {node: '>=22'} peerDependencies: '@types/react': '>=19.2.0' @@ -1131,8 +1131,8 @@ packages: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} - next@16.2.7: - resolution: {integrity: sha512-eMJxgjRzBaj3olkP4cBamHDXL79A8FC6u1GcsO1D1Tsx8bw/LLXUJCaoajVxtnhD3A1IJqIT8IcRJjgBIPJq4w==} + next@16.2.9: + resolution: {integrity: sha512-MEOJiq/UvuezAdqVSceHbqDgZt1kDw2tpGVOlsdIoJsQdbN2JY2hpVG4xnXGkbdJUOEWhnRfiu/O4Hpc9Juwww==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -1265,8 +1265,8 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - semver@7.8.2: - resolution: {integrity: sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==} + semver@7.8.4: + resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} engines: {node: '>=10'} hasBin: true @@ -1385,8 +1385,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - type-fest@5.6.0: - resolution: {integrity: sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==} + type-fest@5.7.0: + resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==} engines: {node: '>=20'} type-is@2.0.1: @@ -1455,42 +1455,42 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - '@biomejs/biome@2.4.16': + '@biomejs/biome@2.5.0': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.4.16 - '@biomejs/cli-darwin-x64': 2.4.16 - '@biomejs/cli-linux-arm64': 2.4.16 - '@biomejs/cli-linux-arm64-musl': 2.4.16 - '@biomejs/cli-linux-x64': 2.4.16 - '@biomejs/cli-linux-x64-musl': 2.4.16 - '@biomejs/cli-win32-arm64': 2.4.16 - '@biomejs/cli-win32-x64': 2.4.16 - - '@biomejs/cli-darwin-arm64@2.4.16': + '@biomejs/cli-darwin-arm64': 2.5.0 + '@biomejs/cli-darwin-x64': 2.5.0 + '@biomejs/cli-linux-arm64': 2.5.0 + '@biomejs/cli-linux-arm64-musl': 2.5.0 + '@biomejs/cli-linux-x64': 2.5.0 + '@biomejs/cli-linux-x64-musl': 2.5.0 + '@biomejs/cli-win32-arm64': 2.5.0 + '@biomejs/cli-win32-x64': 2.5.0 + + '@biomejs/cli-darwin-arm64@2.5.0': optional: true - '@biomejs/cli-darwin-x64@2.4.16': + '@biomejs/cli-darwin-x64@2.5.0': optional: true - '@biomejs/cli-linux-arm64-musl@2.4.16': + '@biomejs/cli-linux-arm64-musl@2.5.0': optional: true - '@biomejs/cli-linux-arm64@2.4.16': + '@biomejs/cli-linux-arm64@2.5.0': optional: true - '@biomejs/cli-linux-x64-musl@2.4.16': + '@biomejs/cli-linux-x64-musl@2.5.0': optional: true - '@biomejs/cli-linux-x64@2.4.16': + '@biomejs/cli-linux-x64@2.5.0': optional: true - '@biomejs/cli-win32-arm64@2.4.16': + '@biomejs/cli-win32-arm64@2.5.0': optional: true - '@biomejs/cli-win32-x64@2.4.16': + '@biomejs/cli-win32-x64@2.5.0': optional: true - '@emnapi/runtime@1.10.0': + '@emnapi/runtime@1.11.1': dependencies: tslib: 2.8.1 optional: true @@ -1584,7 +1584,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.10.0 + '@emnapi/runtime': 1.11.1 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -1596,13 +1596,13 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@inkjs/ui@2.0.0(ink@7.0.5(@types/react@19.2.17)(react@19.2.7))': + '@inkjs/ui@2.0.0(ink@7.0.6(@types/react@19.2.17)(react@19.2.7))': dependencies: chalk: 5.6.2 cli-spinners: 3.4.0 deepmerge: 4.3.1 figures: 6.1.0 - ink: 7.0.5(@types/react@19.2.17)(react@19.2.7) + ink: 7.0.6(@types/react@19.2.17)(react@19.2.7) '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': dependencies: @@ -1637,30 +1637,30 @@ snapshots: react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - '@next/env@16.2.7': {} + '@next/env@16.2.9': {} - '@next/swc-darwin-arm64@16.2.7': + '@next/swc-darwin-arm64@16.2.9': optional: true - '@next/swc-darwin-x64@16.2.7': + '@next/swc-darwin-x64@16.2.9': optional: true - '@next/swc-linux-arm64-gnu@16.2.7': + '@next/swc-linux-arm64-gnu@16.2.9': optional: true - '@next/swc-linux-arm64-musl@16.2.7': + '@next/swc-linux-arm64-musl@16.2.9': optional: true - '@next/swc-linux-x64-gnu@16.2.7': + '@next/swc-linux-x64-gnu@16.2.9': optional: true - '@next/swc-linux-x64-musl@16.2.7': + '@next/swc-linux-x64-musl@16.2.9': optional: true - '@next/swc-win32-arm64-msvc@16.2.7': + '@next/swc-win32-arm64-msvc@16.2.9': optional: true - '@next/swc-win32-x64-msvc@16.2.7': + '@next/swc-win32-x64-msvc@16.2.9': optional: true '@swc/helpers@0.5.15': @@ -1676,15 +1676,15 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 25.9.2 + '@types/node': 25.9.3 '@types/connect@3.4.38': dependencies: - '@types/node': 25.9.2 + '@types/node': 25.9.3 '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 25.9.2 + '@types/node': 25.9.3 '@types/qs': 6.15.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -1697,7 +1697,7 @@ snapshots: '@types/http-errors@2.0.5': {} - '@types/node@25.9.2': + '@types/node@25.9.3': dependencies: undici-types: 7.24.6 @@ -1715,12 +1715,12 @@ snapshots: '@types/send@1.2.1': dependencies: - '@types/node': 25.9.2 + '@types/node': 25.9.3 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 25.9.2 + '@types/node': 25.9.3 '@types/trusted-types@2.0.7': optional: true @@ -1753,7 +1753,7 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.10.34: {} + baseline-browser-mapping@2.10.37: {} body-parser@2.2.2: dependencies: @@ -1785,7 +1785,7 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - caniuse-lite@1.0.30001797: {} + caniuse-lite@1.0.30001799: {} chalk@5.6.2: {} @@ -1872,7 +1872,7 @@ snapshots: dependencies: es-errors: 1.3.0 - es-toolkit@1.47.0: {} + es-toolkit@1.47.1: {} escape-html@1.0.3: {} @@ -1999,7 +1999,7 @@ snapshots: inherits@2.0.4: {} - ink@7.0.5(@types/react@19.2.17)(react@19.2.7): + ink@7.0.6(@types/react@19.2.17)(react@19.2.7): dependencies: '@alcalzone/ansi-tokenize': 0.3.0 ansi-escapes: 7.3.0 @@ -2010,7 +2010,7 @@ snapshots: cli-cursor: 4.0.0 cli-truncate: 6.0.0 code-excerpt: 4.0.0 - es-toolkit: 1.47.0 + es-toolkit: 1.47.1 indent-string: 5.0.0 is-in-ci: 2.0.0 patch-console: 2.0.0 @@ -2022,7 +2022,7 @@ snapshots: stack-utils: 2.0.6 string-width: 8.2.1 terminal-size: 4.0.1 - type-fest: 5.6.0 + type-fest: 5.7.0 widest-line: 6.0.0 wrap-ansi: 10.0.0 ws: 8.21.0 @@ -2090,25 +2090,25 @@ snapshots: negotiator@1.0.0: {} - next@16.2.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + next@16.2.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - '@next/env': 16.2.7 + '@next/env': 16.2.9 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.10.34 - caniuse-lite: 1.0.30001797 + baseline-browser-mapping: 2.10.37 + caniuse-lite: 1.0.30001799 postcss: 8.5.15 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) styled-jsx: 5.1.6(react@19.2.7) optionalDependencies: - '@next/swc-darwin-arm64': 16.2.7 - '@next/swc-darwin-x64': 16.2.7 - '@next/swc-linux-arm64-gnu': 16.2.7 - '@next/swc-linux-arm64-musl': 16.2.7 - '@next/swc-linux-x64-gnu': 16.2.7 - '@next/swc-linux-x64-musl': 16.2.7 - '@next/swc-win32-arm64-msvc': 16.2.7 - '@next/swc-win32-x64-msvc': 16.2.7 + '@next/swc-darwin-arm64': 16.2.9 + '@next/swc-darwin-x64': 16.2.9 + '@next/swc-linux-arm64-gnu': 16.2.9 + '@next/swc-linux-arm64-musl': 16.2.9 + '@next/swc-linux-x64-gnu': 16.2.9 + '@next/swc-linux-x64-musl': 16.2.9 + '@next/swc-win32-arm64-msvc': 16.2.9 + '@next/swc-win32-x64-msvc': 16.2.9 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -2209,7 +2209,7 @@ snapshots: scheduler@0.27.0: {} - semver@7.8.2: + semver@7.8.4: optional: true send@1.2.1: @@ -2243,7 +2243,7 @@ snapshots: dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.8.2 + semver: 7.8.4 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 @@ -2366,7 +2366,7 @@ snapshots: tslib@2.8.1: {} - type-fest@5.6.0: + type-fest@5.7.0: dependencies: tagged-tag: 1.0.0 From 16da90c81455b0b575474f1b92ff17bf3611b364 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 09:53:16 +0200 Subject: [PATCH 04/12] Chore(deps): bump actions/checkout from 6 to 7 (#457) Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/canary-publish.yml | 2 +- .github/workflows/ci.yml | 2 +- .github/workflows/mcp-security.yml | 2 +- .github/workflows/release-pipeline.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/repo-consistency.yml | 2 +- .github/workflows/sync-action-repo.yml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/canary-publish.yml b/.github/workflows/canary-publish.yml index 16f7bf386..3366d777a 100644 --- a/.github/workflows/canary-publish.yml +++ b/.github/workflows/canary-publish.yml @@ -48,7 +48,7 @@ jobs: BUILD_SHA: ${{ github.event.workflow_run.head_sha || github.sha }} steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: # Check out the exact commit CI validated, not the default-branch HEAD # (github.sha lies on workflow_run events). diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f6e3e9573..9abbb3c51 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - uses: actions/setup-node@v6 with: diff --git a/.github/workflows/mcp-security.yml b/.github/workflows/mcp-security.yml index 814ec0321..3fa754707 100644 --- a/.github/workflows/mcp-security.yml +++ b/.github/workflows/mcp-security.yml @@ -19,7 +19,7 @@ jobs: scan: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - uses: actions/setup-node@v6 with: diff --git a/.github/workflows/release-pipeline.yml b/.github/workflows/release-pipeline.yml index 76ec10d95..d4a60cbcd 100644 --- a/.github/workflows/release-pipeline.yml +++ b/.github/workflows/release-pipeline.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 609b0bf0a..072e84e43 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,7 +20,7 @@ jobs: version: ${{ steps.version.outputs.VERSION }} steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/repo-consistency.yml b/.github/workflows/repo-consistency.yml index be4807c1c..756c275a1 100644 --- a/.github/workflows/repo-consistency.yml +++ b/.github/workflows/repo-consistency.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - uses: actions/setup-node@v6 with: diff --git a/.github/workflows/sync-action-repo.yml b/.github/workflows/sync-action-repo.yml index 5a1d8df65..1dcc74392 100644 --- a/.github/workflows/sync-action-repo.yml +++ b/.github/workflows/sync-action-repo.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout monorepo - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 From 3174f74244cdb0cb9cf2c855708e34f627f6dc4b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 09:53:36 +0200 Subject: [PATCH 05/12] Chore(deps-dev): bump ink in the minor-and-patch group (#458) Bumps the minor-and-patch group with 1 update: [ink](https://github.com/vadimdemedes/ink). Updates `ink` from 7.0.6 to 7.1.0 - [Release notes](https://github.com/vadimdemedes/ink/releases) - [Commits](https://github.com/vadimdemedes/ink/compare/v7.0.6...v7.1.0) --- updated-dependencies: - dependency-name: ink dependency-version: 7.1.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: minor-and-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/terminal/package.json | 2 +- pnpm-lock.yaml | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/terminal/package.json b/packages/terminal/package.json index 7f20c9e45..db88f8ab7 100644 --- a/packages/terminal/package.json +++ b/packages/terminal/package.json @@ -48,7 +48,7 @@ "devDependencies": { "@types/react": "19.2.17", "@inkjs/ui": "2.0.0", - "ink": "7.0.6", + "ink": "7.1.0", "react": "19.2.7" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 37052868b..8e4eeea93 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -359,13 +359,13 @@ importers: devDependencies: '@inkjs/ui': specifier: 2.0.0 - version: 2.0.0(ink@7.0.6(@types/react@19.2.17)(react@19.2.7)) + version: 2.0.0(ink@7.1.0(@types/react@19.2.17)(react@19.2.7)) '@types/react': specifier: 19.2.17 version: 19.2.17 ink: - specifier: 7.0.6 - version: 7.0.6(@types/react@19.2.17)(react@19.2.7) + specifier: 7.1.0 + version: 7.1.0(@types/react@19.2.17)(react@19.2.7) react: specifier: 19.2.7 version: 19.2.7 @@ -1027,8 +1027,8 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ink@7.0.6: - resolution: {integrity: sha512-/KG651f+LHln9gumb5ltieFqzNGJdhX1b/WwsCUd2Py7Htuk9KUzyFrk25ugmzjXyDneXSoXD3cm4ql4dWFGsQ==} + ink@7.1.0: + resolution: {integrity: sha512-VWE6/yeLtFCJBNLflyI2OSylyXK1Rc24LuXup8Qt+icwkmmycFNdbn8IkSp6Frc0h1iA0NOvvi1ajW44U/w3Qg==} engines: {node: '>=22'} peerDependencies: '@types/react': '>=19.2.0' @@ -1596,13 +1596,13 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@inkjs/ui@2.0.0(ink@7.0.6(@types/react@19.2.17)(react@19.2.7))': + '@inkjs/ui@2.0.0(ink@7.1.0(@types/react@19.2.17)(react@19.2.7))': dependencies: chalk: 5.6.2 cli-spinners: 3.4.0 deepmerge: 4.3.1 figures: 6.1.0 - ink: 7.0.6(@types/react@19.2.17)(react@19.2.7) + ink: 7.1.0(@types/react@19.2.17)(react@19.2.7) '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': dependencies: @@ -1999,7 +1999,7 @@ snapshots: inherits@2.0.4: {} - ink@7.0.6(@types/react@19.2.17)(react@19.2.7): + ink@7.1.0(@types/react@19.2.17)(react@19.2.7): dependencies: '@alcalzone/ansi-tokenize': 0.3.0 ansi-escapes: 7.3.0 From f2885d46e05676096e4aac0b45e0ea945d2cb2e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 09:53:57 +0200 Subject: [PATCH 06/12] Chore(deps-dev): bump @types/node from 25.9.3 to 26.0.0 (#459) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 25.9.3 to 26.0.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 26.0.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- packages/playground/package.json | 2 +- pnpm-lock.yaml | 32 ++++++++++++++++---------------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index ceef5f307..be3bf746d 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ }, "devDependencies": { "@biomejs/biome": "^2.5.0", - "@types/node": "^25.9.3", + "@types/node": "^26.0.0", "typescript": "^6.0.3" } } diff --git a/packages/playground/package.json b/packages/playground/package.json index 5c7fe0ecf..2504b3173 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -25,7 +25,7 @@ "react-dom": "^19.2.7" }, "devDependencies": { - "@types/node": "^25.9.3", + "@types/node": "^26.0.0", "@types/react": "^19.2.17", "@types/react-dom": "^19.0.0", "typescript": "^6.0.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e4eeea93..a052638cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,8 +23,8 @@ importers: specifier: ^2.5.0 version: 2.5.0 '@types/node': - specifier: ^25.9.3 - version: 25.9.3 + specifier: ^26.0.0 + version: 26.0.0 typescript: specifier: ^6.0.3 version: 6.0.3 @@ -276,8 +276,8 @@ importers: version: 19.2.7(react@19.2.7) devDependencies: '@types/node': - specifier: ^25.9.3 - version: 25.9.3 + specifier: ^26.0.0 + version: 26.0.0 '@types/react': specifier: ^19.2.17 version: 19.2.17 @@ -713,8 +713,8 @@ packages: '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} - '@types/node@25.9.3': - resolution: {integrity: sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==} + '@types/node@26.0.0': + resolution: {integrity: sha512-vf2YFi1iY9lHGwNJMs01biZFbKJkrZR1T6/MlzjhJLPdntOHLhTrDSnSVcdtvjihi4VQNlrFRIxLsDBlQpAipA==} '@types/qs@6.15.0': resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} @@ -1398,8 +1398,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - undici-types@7.24.6: - resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + undici-types@8.3.0: + resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} @@ -1676,15 +1676,15 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 25.9.3 + '@types/node': 26.0.0 '@types/connect@3.4.38': dependencies: - '@types/node': 25.9.3 + '@types/node': 26.0.0 '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 25.9.3 + '@types/node': 26.0.0 '@types/qs': 6.15.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -1697,9 +1697,9 @@ snapshots: '@types/http-errors@2.0.5': {} - '@types/node@25.9.3': + '@types/node@26.0.0': dependencies: - undici-types: 7.24.6 + undici-types: 8.3.0 '@types/qs@6.15.0': {} @@ -1715,12 +1715,12 @@ snapshots: '@types/send@1.2.1': dependencies: - '@types/node': 25.9.3 + '@types/node': 26.0.0 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 25.9.3 + '@types/node': 26.0.0 '@types/trusted-types@2.0.7': optional: true @@ -2378,7 +2378,7 @@ snapshots: typescript@6.0.3: {} - undici-types@7.24.6: {} + undici-types@8.3.0: {} unpipe@1.0.0: {} From 0456d33d28f02069c2018a12ee15fbffbe935cde Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 23 Jun 2026 14:37:15 +0000 Subject: [PATCH 07/12] chore: sync versions to v4.1.0 [skip ci] --- package.json | 2 +- packages/check/package.json | 4 ++-- packages/cli/package.json | 2 +- packages/codemod/package.json | 2 +- packages/compat/package.json | 2 +- packages/context/package.json | 2 +- packages/core/package.json | 2 +- packages/core/src/spec.ts | 2 +- packages/evolve/package.json | 2 +- packages/express/package.json | 2 +- packages/go/package.json | 2 +- packages/mcp-server/package.json | 2 +- packages/mcp/package.json | 2 +- packages/metrics/package.json | 2 +- packages/native/package.json | 2 +- packages/playground/package.json | 2 +- packages/protocol/package.json | 2 +- packages/python/package.json | 2 +- packages/react/package.json | 2 +- packages/review-mcp/package.json | 2 +- packages/review-python/package.json | 2 +- packages/review/package.json | 2 +- packages/terminal/package.json | 2 +- packages/test/package.json | 2 +- packages/vue/package.json | 2 +- 25 files changed, 26 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index be3bf746d..3e0776bf0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kern-monorepo", - "version": "4.0.0", + "version": "4.1.0", "private": true, "type": "module", "packageManager": "pnpm@10.32.1", diff --git a/packages/check/package.json b/packages/check/package.json index d5bce66b7..c3f7926b2 100644 --- a/packages/check/package.json +++ b/packages/check/package.json @@ -1,7 +1,7 @@ { "name": "@kernlang/check", - "version": "4.0.0", - "description": "KERN nominal assignability core \u2014 lifted Liskov subtype and override-variance checks", + "version": "4.1.0", + "description": "KERN nominal assignability core — lifted Liskov subtype and override-variance checks", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/cli/package.json b/packages/cli/package.json index c94fe4b5d..7fd2040cf 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/cli", - "version": "4.0.0", + "version": "4.1.0", "description": "KERN CLI — transpile, compile, minify, and analyze .kern files", "type": "module", "main": "./dist/index.js", diff --git a/packages/codemod/package.json b/packages/codemod/package.json index 931a1090b..936101e7a 100644 --- a/packages/codemod/package.json +++ b/packages/codemod/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/codemod", - "version": "4.0.0", + "version": "4.1.0", "description": "Kern Codemod — apply kern-review TemplateMatch results to rewrite TS into KERN-template-backed TS", "type": "module", "main": "./dist/index.js", diff --git a/packages/compat/package.json b/packages/compat/package.json index 1164e7fc4..479f932c4 100644 --- a/packages/compat/package.json +++ b/packages/compat/package.json @@ -1,6 +1,6 @@ { "name": "kern-lang", - "version": "4.0.0", + "version": "4.1.0", "description": "The language LLMs think in. Write one .kern file, ship 7 targets. 70% fewer tokens.", "type": "module", "main": "./dist/index.js", diff --git a/packages/context/package.json b/packages/context/package.json index 05d19afe5..3808b2549 100644 --- a/packages/context/package.json +++ b/packages/context/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/context", - "version": "4.0.0", + "version": "4.1.0", "description": "Kern Project Context Graph — compact, deterministic whole-project map for LLM context", "type": "module", "main": "./dist/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 0e93883c0..5f7adcdd9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/core", - "version": "4.0.0", + "version": "4.1.0", "description": "Kern core — parser, types, spec, config, style engines, codegen", "type": "module", "main": "./dist/index.js", diff --git a/packages/core/src/spec.ts b/packages/core/src/spec.ts index 87affbb67..e1830038e 100644 --- a/packages/core/src/spec.ts +++ b/packages/core/src/spec.ts @@ -10,7 +10,7 @@ * Targets: Next.js, React+Tailwind, React Native, Express */ -export const KERN_VERSION = '4.0.0'; +export const KERN_VERSION = '4.1.0'; // ── Grammar ───────────────────────────────────────────────────────────── export const IR_GRAMMAR = ` diff --git a/packages/evolve/package.json b/packages/evolve/package.json index 5a7da34b0..0636a392e 100644 --- a/packages/evolve/package.json +++ b/packages/evolve/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/evolve", - "version": "4.0.0", + "version": "4.1.0", "description": "Kern Evolve — self-extending template system: detect gaps, propose templates, validate, stage", "type": "module", "main": "./dist/index.js", diff --git a/packages/express/package.json b/packages/express/package.json index 927d9eb97..d33e9ec1b 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/express", - "version": "4.0.0", + "version": "4.1.0", "description": "Kern Express TypeScript backend transpiler", "type": "module", "main": "./dist/index.js", diff --git a/packages/go/package.json b/packages/go/package.json index 4be3450db..4f5b5f984 100644 --- a/packages/go/package.json +++ b/packages/go/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/go", - "version": "4.0.0", + "version": "4.1.0", "description": "KERN Go net/http backend codegen", "type": "module", "main": "./dist/index.js", diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index c996c4238..46ca382f4 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/mcp-server", - "version": "4.0.0", + "version": "4.1.0", "description": "KERN MCP server — compile, review, and analyze .kern files via MCP", "type": "module", "main": "./dist/index.js", diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 3c8616a72..c546d8f26 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/mcp", - "version": "4.0.0", + "version": "4.1.0", "description": "Kern MCP server transpiler — compile .kern to secure MCP servers", "type": "module", "main": "./dist/index.js", diff --git a/packages/metrics/package.json b/packages/metrics/package.json index 2be1fd94d..4b1d8cfb8 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/metrics", - "version": "4.0.0", + "version": "4.1.0", "description": "Kern language metrics and project context export", "type": "module", "main": "./dist/index.js", diff --git a/packages/native/package.json b/packages/native/package.json index acbf28084..e62854d5d 100644 --- a/packages/native/package.json +++ b/packages/native/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/native", - "version": "4.0.0", + "version": "4.1.0", "description": "Kern React Native transpiler", "type": "module", "main": "./dist/index.js", diff --git a/packages/playground/package.json b/packages/playground/package.json index 2504b3173..ffb346efb 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/playground", - "version": "4.0.0", + "version": "4.1.0", "private": true, "description": "KERN Playground — interactive compiler UI", "type": "module", diff --git a/packages/protocol/package.json b/packages/protocol/package.json index 5faf3865e..91e2c7581 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/protocol", - "version": "4.0.0", + "version": "4.1.0", "description": "Kern draft protocol — structured AI communication format", "type": "module", "main": "./dist/index.js", diff --git a/packages/python/package.json b/packages/python/package.json index 85a8f0b9f..08a559ef1 100644 --- a/packages/python/package.json +++ b/packages/python/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/python", - "version": "4.0.0", + "version": "4.1.0", "description": "KERN Python backend codegen (FastAPI router target included)", "type": "module", "main": "./dist/index.js", diff --git a/packages/react/package.json b/packages/react/package.json index 369e0234b..c84b348c6 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/react", - "version": "4.0.0", + "version": "4.1.0", "description": "Kern React transpilers — Tailwind, Next.js, Web", "type": "module", "main": "./dist/index.js", diff --git a/packages/review-mcp/package.json b/packages/review-mcp/package.json index 311d9bfae..4df87fafd 100644 --- a/packages/review-mcp/package.json +++ b/packages/review-mcp/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/review-mcp", - "version": "4.0.0", + "version": "4.1.0", "repository": { "type": "git", "url": "git+https://github.com/KERNlang/kern.git", diff --git a/packages/review-python/package.json b/packages/review-python/package.json index 76dfd6816..1dbf4bbfe 100644 --- a/packages/review-python/package.json +++ b/packages/review-python/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/review-python", - "version": "4.0.0", + "version": "4.1.0", "description": "Python concept mapper for kern review — tree-sitter based", "type": "module", "main": "dist/index.js", diff --git a/packages/review/package.json b/packages/review/package.json index 00126e54e..be0141d2e 100644 --- a/packages/review/package.json +++ b/packages/review/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/review", - "version": "4.0.0", + "version": "4.1.0", "description": "Kern Review — scan TS, infer .kern IR, roundtrip diff, report", "type": "module", "main": "./dist/index.js", diff --git a/packages/terminal/package.json b/packages/terminal/package.json index db88f8ab7..70270ef40 100644 --- a/packages/terminal/package.json +++ b/packages/terminal/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/terminal", - "version": "4.0.0", + "version": "4.1.0", "description": "Kern ANSI terminal rendering transpiler", "type": "module", "main": "./dist/index.js", diff --git a/packages/test/package.json b/packages/test/package.json index b3dc3e73e..7f6a23f38 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/test", - "version": "4.0.0", + "version": "4.1.0", "description": "Native KERN structural test runner", "type": "module", "main": "./dist/index.js", diff --git a/packages/vue/package.json b/packages/vue/package.json index 882fd7331..2716ff042 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/vue", - "version": "4.0.0", + "version": "4.1.0", "description": "Kern Vue/Nuxt transpilers — Vue 3 SFC + Nuxt 3 output", "type": "module", "main": "./dist/index.js", From dcaa3f782929bd0a0ae1a5894d8ee65fb6f44984 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 28 Jun 2026 14:37:03 +0200 Subject: [PATCH 08/12] Build(deps-dev): bump the minor-and-patch group with 2 updates (#478) Bumps the minor-and-patch group with 2 updates: [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) and [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node). Updates `@biomejs/biome` from 2.5.0 to 2.5.1 - [Release notes](https://github.com/biomejs/biome/releases) - [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md) - [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.1/packages/@biomejs/biome) Updates `@types/node` from 26.0.0 to 26.0.1 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@biomejs/biome" dependency-version: 2.5.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: "@types/node" dependency-version: 26.0.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor-and-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 4 +- packages/playground/package.json | 2 +- pnpm-lock.yaml | 100 +++++++++++++++---------------- 3 files changed, 53 insertions(+), 53 deletions(-) diff --git a/package.json b/package.json index 3e0776bf0..b12bc57e2 100644 --- a/package.json +++ b/package.json @@ -55,8 +55,8 @@ } }, "devDependencies": { - "@biomejs/biome": "^2.5.0", - "@types/node": "^26.0.0", + "@biomejs/biome": "^2.5.1", + "@types/node": "^26.0.1", "typescript": "^6.0.3" } } diff --git a/packages/playground/package.json b/packages/playground/package.json index ffb346efb..792592594 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -25,7 +25,7 @@ "react-dom": "^19.2.7" }, "devDependencies": { - "@types/node": "^26.0.0", + "@types/node": "^26.0.1", "@types/react": "^19.2.17", "@types/react-dom": "^19.0.0", "typescript": "^6.0.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 92ab48bac..b03c46aac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,11 +20,11 @@ importers: .: devDependencies: '@biomejs/biome': - specifier: ^2.5.0 - version: 2.5.0 + specifier: ^2.5.1 + version: 2.5.1 '@types/node': - specifier: ^26.0.0 - version: 26.0.0 + specifier: ^26.0.1 + version: 26.0.1 typescript: specifier: ^6.0.3 version: 6.0.3 @@ -279,8 +279,8 @@ importers: version: 19.2.7(react@19.2.7) devDependencies: '@types/node': - specifier: ^26.0.0 - version: 26.0.0 + specifier: ^26.0.1 + version: 26.0.1 '@types/react': specifier: ^19.2.17 version: 19.2.17 @@ -399,59 +399,59 @@ packages: resolution: {integrity: sha512-p+CMKJ93HFmLkjXKlXiVGlMQEuRb6H0MokBSwUsX+S6BRX8eV5naFZpQJFfJHjRZY0Hmnqy1/r6UWl3x+19zYA==} engines: {node: '>=18'} - '@biomejs/biome@2.5.0': - resolution: {integrity: sha512-4kURkd9hAPrdDM3C9n82ycYgx8hvQcW6MjKTEejruj8rK0N8P3OPpdy8BvI8kt3KWY4ycF5XtDOrktetEfhfuw==} + '@biomejs/biome@2.5.1': + resolution: {integrity: sha512-IXWLCxKmae+rI7LOHS1B3EbVisQ6GRAWbhN9msa6KjNCyFWrvKZWR4oUdinaNssrV852OrSHuSPa95h1GPJc7Q==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.5.0': - resolution: {integrity: sha512-Mn3Fwi3SA5fgmfCPqmzpWF2DLZnms3BVAhM088nTnGrTZmHS3wwIjcoZPqpXeNgd3DrrLH6xp8vTLIBuJoZiXw==} + '@biomejs/cli-darwin-arm64@2.5.1': + resolution: {integrity: sha512-npqDzvqv7vFaWRiNN1Te71siRgPaqS9MpqgYCdP/CrUbkJ7ApezaeaKjueKHRN/JH/6lRjJQAHi8acQDCAz22w==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.5.0': - resolution: {integrity: sha512-rg3VPL5P8mYro6pqlXYXuJWph21slVp3SZtAqWSrkZs40d2gTzYmHF8E/X1iTID25btmNKltNDJ926sqVBp7DQ==} + '@biomejs/cli-darwin-x64@2.5.1': + resolution: {integrity: sha512-RgwTqPAM8g2tn1j+b5oRjF/DbSBX8a4gwojtuG9XuhfK7GgomvZ9+T+tqjXiVbjLEeGJOoL6VEk8mvRTVeSybw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.5.0': - resolution: {integrity: sha512-vQdM4oSGaf7ZNeGO9w5+Y8SBtyser9M6znxYbm7Ec8wInxJu1WiKxFYZW5Auj2d80bcVvefuGGRxoFOE0eee8g==} + '@biomejs/cli-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-WMcvMLgByyTqVxGlq918NBBYliq9FRR9GAQVETHb+VjGVqXCZFfHlZHC1FX4ibuYY/Hg6TJE3rHU0xVrdJXNRw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.5.0': - resolution: {integrity: sha512-tl+LW8fdD96/xdeWtWwc82LIOc5CoY7N2AsogLTp5R4ECErYt+8Jl/N68ezN9vzSiqPTxw6vjcihoLPYKZHrlw==} + '@biomejs/cli-linux-arm64@2.5.1': + resolution: {integrity: sha512-yhV35CzZh38VyMvTEXi3JTjxZBs++oCKK9KG8vB6VI5+uvQvZNR3BFWEKKzuOmx9DJJj7sQpZ4LQJcmbGTs3+Q==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.5.0': - resolution: {integrity: sha512-+9hIcMngJ+yGUahXqZuZ8CoWKJE9SAZsFsM3QDvXpNsLbXZ9lqVzgBhOk/jTSYkOA0GLP9eu3teukqpLUojHMg==} + '@biomejs/cli-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-ANTowtlLmPYm5yeMckWY8Xzb9Ix+JJP3tgHR/n6xRj1VWyIzzWtfRfih9hv9VmClwadpBvZduISZIbBsIlYG3A==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.5.0': - resolution: {integrity: sha512-zpEGf4RQbFEh8Vt7OmavLyyOzRbtcE9osCqrS1kfvt8jDvxwhKXLSf7n0ebr/ov0RJ9ssP+lhs6C8a9WwFvrQA==} + '@biomejs/cli-linux-x64@2.5.1': + resolution: {integrity: sha512-J/7uHSX7NfoYDI7HijAkd8lnQIOrRb2W7j3X+tw4R+N5ExvXGsyXFiGdQcfcxfOmNQmZVSQOCDk757fwpzqQcg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.5.0': - resolution: {integrity: sha512-jB0wAvTLI4itx5VidqVUejPQFhRUxiZ9l9FvZ26D5fl6t3qme+ZB4PD3bTSeL1vZ8NI2Rx/zj6H9zcESuGHKGw==} + '@biomejs/cli-win32-arm64@2.5.1': + resolution: {integrity: sha512-zgXnKNgWPC4iPF7Y1lR3STUeCUuZRpD6IiOrC7TZTlh0Lx6FiVUT05myuMQHQ9D+1cc7uyMldi4forE6lp0ivQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.5.0': - resolution: {integrity: sha512-VT/lF+GId+67j8aDfLkxdxNoVApsPSTbyAtB3jJq0IWTrY77WXfbPfpngxq0bA6JCEv/7k8C9qWjDRKRznDlyw==} + '@biomejs/cli-win32-x64@2.5.1': + resolution: {integrity: sha512-6uxpR9hvaglANkZemeSiN/FhYgkGasrEGn267eXIWvjrjJ2LhDlk251IhjVJq6MXzkV2/bcXwLwSroLyPtqRZg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -720,8 +720,8 @@ packages: '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} - '@types/node@26.0.0': - resolution: {integrity: sha512-vf2YFi1iY9lHGwNJMs01biZFbKJkrZR1T6/MlzjhJLPdntOHLhTrDSnSVcdtvjihi4VQNlrFRIxLsDBlQpAipA==} + '@types/node@26.0.1': + resolution: {integrity: sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==} '@types/qs@6.15.0': resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} @@ -1465,39 +1465,39 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - '@biomejs/biome@2.5.0': + '@biomejs/biome@2.5.1': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.5.0 - '@biomejs/cli-darwin-x64': 2.5.0 - '@biomejs/cli-linux-arm64': 2.5.0 - '@biomejs/cli-linux-arm64-musl': 2.5.0 - '@biomejs/cli-linux-x64': 2.5.0 - '@biomejs/cli-linux-x64-musl': 2.5.0 - '@biomejs/cli-win32-arm64': 2.5.0 - '@biomejs/cli-win32-x64': 2.5.0 - - '@biomejs/cli-darwin-arm64@2.5.0': + '@biomejs/cli-darwin-arm64': 2.5.1 + '@biomejs/cli-darwin-x64': 2.5.1 + '@biomejs/cli-linux-arm64': 2.5.1 + '@biomejs/cli-linux-arm64-musl': 2.5.1 + '@biomejs/cli-linux-x64': 2.5.1 + '@biomejs/cli-linux-x64-musl': 2.5.1 + '@biomejs/cli-win32-arm64': 2.5.1 + '@biomejs/cli-win32-x64': 2.5.1 + + '@biomejs/cli-darwin-arm64@2.5.1': optional: true - '@biomejs/cli-darwin-x64@2.5.0': + '@biomejs/cli-darwin-x64@2.5.1': optional: true - '@biomejs/cli-linux-arm64-musl@2.5.0': + '@biomejs/cli-linux-arm64-musl@2.5.1': optional: true - '@biomejs/cli-linux-arm64@2.5.0': + '@biomejs/cli-linux-arm64@2.5.1': optional: true - '@biomejs/cli-linux-x64-musl@2.5.0': + '@biomejs/cli-linux-x64-musl@2.5.1': optional: true - '@biomejs/cli-linux-x64@2.5.0': + '@biomejs/cli-linux-x64@2.5.1': optional: true - '@biomejs/cli-win32-arm64@2.5.0': + '@biomejs/cli-win32-arm64@2.5.1': optional: true - '@biomejs/cli-win32-x64@2.5.0': + '@biomejs/cli-win32-x64@2.5.1': optional: true '@emnapi/runtime@1.11.1': @@ -1686,15 +1686,15 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 26.0.0 + '@types/node': 26.0.1 '@types/connect@3.4.38': dependencies: - '@types/node': 26.0.0 + '@types/node': 26.0.1 '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 26.0.0 + '@types/node': 26.0.1 '@types/qs': 6.15.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -1707,7 +1707,7 @@ snapshots: '@types/http-errors@2.0.5': {} - '@types/node@26.0.0': + '@types/node@26.0.1': dependencies: undici-types: 8.3.0 @@ -1725,12 +1725,12 @@ snapshots: '@types/send@1.2.1': dependencies: - '@types/node': 26.0.0 + '@types/node': 26.0.1 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 26.0.0 + '@types/node': 26.0.1 '@types/trusted-types@2.0.7': optional: true From f8290f3842dd4df8257ffbb09748a6963e5ef37a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Jul 2026 10:59:01 +0200 Subject: [PATCH 09/12] Build(deps): bump the minor-and-patch group with 3 updates (#485) Bumps the minor-and-patch group with 3 updates: [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome), [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) and [next](https://github.com/vercel/next.js). Updates `@biomejs/biome` from 2.5.1 to 2.5.2 - [Release notes](https://github.com/biomejs/biome/releases) - [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md) - [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.2/packages/@biomejs/biome) Updates `@types/node` from 26.0.1 to 26.1.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `next` from 16.2.9 to 16.2.10 - [Release notes](https://github.com/vercel/next.js/releases) - [Commits](https://github.com/vercel/next.js/compare/v16.2.9...v16.2.10) --- updated-dependencies: - dependency-name: "@biomejs/biome" dependency-version: 2.5.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: "@types/node" dependency-version: 26.1.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: next dependency-version: 16.2.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 4 +- packages/playground/package.json | 4 +- pnpm-lock.yaml | 222 +++++++++++++++---------------- 3 files changed, 115 insertions(+), 115 deletions(-) diff --git a/package.json b/package.json index b12bc57e2..d4e35606c 100644 --- a/package.json +++ b/package.json @@ -55,8 +55,8 @@ } }, "devDependencies": { - "@biomejs/biome": "^2.5.1", - "@types/node": "^26.0.1", + "@biomejs/biome": "^2.5.2", + "@types/node": "^26.1.0", "typescript": "^6.0.3" } } diff --git a/packages/playground/package.json b/packages/playground/package.json index 792592594..43b4d7951 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -20,12 +20,12 @@ "@kernlang/vue": "workspace:*", "@monaco-editor/react": "^4.6.0", "monaco-editor": "^0.55.1", - "next": "^16.2.9", + "next": "^16.2.10", "react": "^19.2.7", "react-dom": "^19.2.7" }, "devDependencies": { - "@types/node": "^26.0.1", + "@types/node": "^26.1.0", "@types/react": "^19.2.17", "@types/react-dom": "^19.0.0", "typescript": "^6.0.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b03c46aac..c13a9132f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,11 +20,11 @@ importers: .: devDependencies: '@biomejs/biome': - specifier: ^2.5.1 - version: 2.5.1 + specifier: ^2.5.2 + version: 2.5.2 '@types/node': - specifier: ^26.0.1 - version: 26.0.1 + specifier: ^26.1.0 + version: 26.1.0 typescript: specifier: ^6.0.3 version: 6.0.3 @@ -269,8 +269,8 @@ importers: specifier: ^0.55.1 version: 0.55.1 next: - specifier: ^16.2.9 - version: 16.2.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + specifier: ^16.2.10 + version: 16.2.10(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: specifier: ^19.2.7 version: 19.2.7 @@ -279,8 +279,8 @@ importers: version: 19.2.7(react@19.2.7) devDependencies: '@types/node': - specifier: ^26.0.1 - version: 26.0.1 + specifier: ^26.1.0 + version: 26.1.0 '@types/react': specifier: ^19.2.17 version: 19.2.17 @@ -399,65 +399,65 @@ packages: resolution: {integrity: sha512-p+CMKJ93HFmLkjXKlXiVGlMQEuRb6H0MokBSwUsX+S6BRX8eV5naFZpQJFfJHjRZY0Hmnqy1/r6UWl3x+19zYA==} engines: {node: '>=18'} - '@biomejs/biome@2.5.1': - resolution: {integrity: sha512-IXWLCxKmae+rI7LOHS1B3EbVisQ6GRAWbhN9msa6KjNCyFWrvKZWR4oUdinaNssrV852OrSHuSPa95h1GPJc7Q==} + '@biomejs/biome@2.5.2': + resolution: {integrity: sha512-VQ3RCqr7JmDIX+w6stWYl+g/3bYofN3q2wDBHUKKc/c7i5QWrFKFBZYCYPWTE6agsUPMIZZe6/CMmVUfUAhkKA==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.5.1': - resolution: {integrity: sha512-npqDzvqv7vFaWRiNN1Te71siRgPaqS9MpqgYCdP/CrUbkJ7ApezaeaKjueKHRN/JH/6lRjJQAHi8acQDCAz22w==} + '@biomejs/cli-darwin-arm64@2.5.2': + resolution: {integrity: sha512-e7P3P7EkwFc/KiX2AHw4YDLIBOMfG9CPCAwy52k5Bp0dfhkozx9hf6wCmIr2QeXy2XeccJ3V/Sg+hDmzYEqxSg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.5.1': - resolution: {integrity: sha512-RgwTqPAM8g2tn1j+b5oRjF/DbSBX8a4gwojtuG9XuhfK7GgomvZ9+T+tqjXiVbjLEeGJOoL6VEk8mvRTVeSybw==} + '@biomejs/cli-darwin-x64@2.5.2': + resolution: {integrity: sha512-ymzMvjC1Jg0b9K0D26ZdARqFQXs7MocfLC5FOCGfkC0Ss+ACUJkX5364ZM5nT4NLZanHRZNVrZEy+Ibwcvux/g==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.5.1': - resolution: {integrity: sha512-WMcvMLgByyTqVxGlq918NBBYliq9FRR9GAQVETHb+VjGVqXCZFfHlZHC1FX4ibuYY/Hg6TJE3rHU0xVrdJXNRw==} + '@biomejs/cli-linux-arm64-musl@2.5.2': + resolution: {integrity: sha512-w+ANG0ZvTu9IeEg9QnstoOnk6L0fpwJifW6aHR18+cb5Z39bkANItYjAfMrnvce5tmMK+IQ6nPX7/kQFdam5iw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.5.1': - resolution: {integrity: sha512-yhV35CzZh38VyMvTEXi3JTjxZBs++oCKK9KG8vB6VI5+uvQvZNR3BFWEKKzuOmx9DJJj7sQpZ4LQJcmbGTs3+Q==} + '@biomejs/cli-linux-arm64@2.5.2': + resolution: {integrity: sha512-t7sseOmqND57uUWTwlawU6BYj+J06T/9EkydzBhkrgw/FK3QVhjU2wsJR0frljrKZ0/I8A/rYw7284QgqjQfIQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.5.1': - resolution: {integrity: sha512-ANTowtlLmPYm5yeMckWY8Xzb9Ix+JJP3tgHR/n6xRj1VWyIzzWtfRfih9hv9VmClwadpBvZduISZIbBsIlYG3A==} + '@biomejs/cli-linux-x64-musl@2.5.2': + resolution: {integrity: sha512-VArNLAzND063tF+XY0yPyM+DyahpzOMzOAvb7qs259nhjJWRjvjZdssuA+Rfl+l07+NOesKZ0Xu2yFrXyBMtzw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.5.1': - resolution: {integrity: sha512-J/7uHSX7NfoYDI7HijAkd8lnQIOrRb2W7j3X+tw4R+N5ExvXGsyXFiGdQcfcxfOmNQmZVSQOCDk757fwpzqQcg==} + '@biomejs/cli-linux-x64@2.5.2': + resolution: {integrity: sha512-M/lOZrewzTCRDINbjhQ1gYYru37KlD3kJBQwwKCG0ckz5E9IZwIoJ3X0wBwRXA+yBDIwWUuPBHS67HzJY4dTfA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.5.1': - resolution: {integrity: sha512-zgXnKNgWPC4iPF7Y1lR3STUeCUuZRpD6IiOrC7TZTlh0Lx6FiVUT05myuMQHQ9D+1cc7uyMldi4forE6lp0ivQ==} + '@biomejs/cli-win32-arm64@2.5.2': + resolution: {integrity: sha512-kbjFFKyZlzYnAuw7sRy5qDoFG6zrP40UK08oPQsWK0ct3NMnGSt+Bs1iviEEyEIP57N5MrykGXdO/wRiaR4lww==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.5.1': - resolution: {integrity: sha512-6uxpR9hvaglANkZemeSiN/FhYgkGasrEGn267eXIWvjrjJ2LhDlk251IhjVJq6MXzkV2/bcXwLwSroLyPtqRZg==} + '@biomejs/cli-win32-x64@2.5.2': + resolution: {integrity: sha512-4InchVpdVmdkkkgjQqKpgvyu+VPnoF/7RPSw5YATgEVpt2j72wcCAeV5TwaE9ZGJUZWZn7v2CwSAj6CrMJEx8A==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] - '@emnapi/runtime@1.11.1': - resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} '@hono/node-server@1.19.14': resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==} @@ -644,57 +644,57 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@next/env@16.2.9': - resolution: {integrity: sha512-ki5VxxXfzD/9TDe13wyeTKIjQTAwBVpnr8KhRDUr8ltMUq1/NBpWNT5tiPoxiGl+PHM4X2ahSOiPk6iAimIzPg==} + '@next/env@16.2.10': + resolution: {integrity: sha512-zLPxg9M0MEHmygpj5OuxjQ+vHMiy/K7cSp74G8ecYolmgUWw0RwN02tF56npup/+qaI8JB97hQgS/r2Hb6QwVA==} - '@next/swc-darwin-arm64@16.2.9': - resolution: {integrity: sha512-HkfxNYUCmcct0Xsqib5KxqMSHV4AHJq857BNRchyBDs4YS19aHzVfn1kDuBYKqLLQBjXgnkIsjV2Kd4d2wzYhw==} + '@next/swc-darwin-arm64@16.2.10': + resolution: {integrity: sha512-v9IdJCa0H0mbo+8z5zwUpOk1Vj7RjkcI5uNYf5Ws1y6szf/p3Mzl9hLaST8SCt6L9h8NGnruZcd2+o0NTNwDhA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.2.9': - resolution: {integrity: sha512-7IAtK4MeybpqRV9GRABWEhJ62mOS+rzWOzOTFie4cSEtm12xsoOMJRcECoZx3FHPzFAqN/IJtHqWAFOLfl152w==} + '@next/swc-darwin-x64@16.2.10': + resolution: {integrity: sha512-17IS0jJRViROGmA9uGdNR8VPJpfbnaVG7E9qhso5jDLkmyd0lSDORWxbcKINzcFqzZqGwGtMSnrFRxBpuUYjLQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.2.9': - resolution: {integrity: sha512-hBD75iWpUtkL9SmQmcRhmLomn9jgkPzCEkbOcLgHymPEKzv+6ONy13RRiIEz/iEObjkS2Jlb5gYS2XGoS3X4rw==} + '@next/swc-linux-arm64-gnu@16.2.10': + resolution: {integrity: sha512-GRQRsRtuciNJvB54AvvuQTiq0oZtFwa1owQqtZD8wwnGpM2L39MV22kpI72YSXLKIyY40LC66EiLFv4PiicXxg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@next/swc-linux-arm64-musl@16.2.9': - resolution: {integrity: sha512-qZTI3pf9SGc/obr8NkQAekBxmp1QK+kVm+VAf3BALLfFAj+1kUhkTxmrWpVos9R/UYIA8AWX2p6cGI5WdwzVUA==} + '@next/swc-linux-arm64-musl@16.2.10': + resolution: {integrity: sha512-zkN9MQYS7UQBro+FnISUq1itaQjXI9xqISzuQ+2bc921NcJ1x4yPCqrn77tVN6/dOOXaaWVX3k6/bR07pPwK+A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@next/swc-linux-x64-gnu@16.2.9': - resolution: {integrity: sha512-xm0HfRNX+UkH4R3c18ynswjj5o5uEj/7iI9p9omdtTSIsRCzQqkGMA+10nzJ4EHnYC3as65IMhbbl5fWRUWHYg==} + '@next/swc-linux-x64-gnu@16.2.10': + resolution: {integrity: sha512-iCVJnwvrPYECvA6WM/7+oo+OiTvedIKLxtCLAZP4xZR3nXa1zmzZyLPbYCmWvpd4CvMYF1EMTafd0ii3DygLvA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@next/swc-linux-x64-musl@16.2.9': - resolution: {integrity: sha512-QumimHkGEG6vM3PfEDWKyKen03NcqLOkeKB1EfcPe7VxzmEiCa4jNnMyBn/US5zcd/VE1CI+O8Ovb3lfjVHfGw==} + '@next/swc-linux-x64-musl@16.2.10': + resolution: {integrity: sha512-ov2g4H0dHY9bPoOU83m91hWT7Iq5qy13bUnyyshLU3HGR1Ownn0X9QpmDPc5iIUaahTp7f7LeGAhV4DSFtackw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@next/swc-win32-arm64-msvc@16.2.9': - resolution: {integrity: sha512-hzQpKZvw8rAwI6A2uQh6SacCSvNAXaIkPNsWwzqqfRiIMiXMfH936skDhz1OO6KpvdKkJrgHHtqQOq5PIXOvdQ==} + '@next/swc-win32-arm64-msvc@16.2.10': + resolution: {integrity: sha512-DwAnhLX76HQiFFQNgWlcK+JzlnD1rZ+UK/WY0ZMI/deXpvgnesjNYrqcfo1JzBuz4Kf7o3brIBL0glI1junatA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.2.9': - resolution: {integrity: sha512-qr2VL3Ce5QrwgO2yh1ujSBawrimjVKX8FGF/cOynmdYKJY0BdHpGVNIRK1tqONB10Vkm25Ub1BD2bkjWs4+96w==} + '@next/swc-win32-x64-msvc@16.2.10': + resolution: {integrity: sha512-0JXq3b85Jk9Jg4ntLUbXSPvoDw3gpZou7twuKdoFG2jOw635v7+IiXfTaa0TxVMyx78pUjnrVYwLgjKfX4e6/A==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -720,8 +720,8 @@ packages: '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} - '@types/node@26.0.1': - resolution: {integrity: sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==} + '@types/node@26.1.0': + resolution: {integrity: sha512-O0A1G3xPGy4w7AgQdAQYUlQ+BKk2Oovw8eRpofyp5KdBZULnbe+WqaOVNrm705SHphCiG4XHsACrSmPu1f+Kgw==} '@types/qs@6.15.0': resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} @@ -781,8 +781,8 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.37: - resolution: {integrity: sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==} + baseline-browser-mapping@2.10.42: + resolution: {integrity: sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==} engines: {node: '>=6.0.0'} hasBin: true @@ -806,8 +806,8 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} - caniuse-lite@1.0.30001799: - resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} + caniuse-lite@1.0.30001800: + resolution: {integrity: sha512-MMHtuAz9Ys840zAY5F4k6fV5GaivZ9sPk+nz0mY+GYVzRBnYkN0mpqkSR92oWRQ19yQWo4HvBV/FnC16AJX8MA==} chalk@5.6.2: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} @@ -1132,8 +1132,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.12: - resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + nanoid@3.3.15: + resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -1141,8 +1141,8 @@ packages: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} - next@16.2.9: - resolution: {integrity: sha512-MEOJiq/UvuezAdqVSceHbqDgZt1kDw2tpGVOlsdIoJsQdbN2JY2hpVG4xnXGkbdJUOEWhnRfiu/O4Hpc9Juwww==} + next@16.2.10: + resolution: {integrity: sha512-2som5AVXb3kE6Yjine3/mNbBayYF58eguBWIVVUdr1y/L426xyVEgYxgBG+1QC34P2x5E+tcDup6XkuOAX3dCA==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -1275,8 +1275,8 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - semver@7.8.4: - resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true @@ -1465,42 +1465,42 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - '@biomejs/biome@2.5.1': + '@biomejs/biome@2.5.2': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.5.1 - '@biomejs/cli-darwin-x64': 2.5.1 - '@biomejs/cli-linux-arm64': 2.5.1 - '@biomejs/cli-linux-arm64-musl': 2.5.1 - '@biomejs/cli-linux-x64': 2.5.1 - '@biomejs/cli-linux-x64-musl': 2.5.1 - '@biomejs/cli-win32-arm64': 2.5.1 - '@biomejs/cli-win32-x64': 2.5.1 - - '@biomejs/cli-darwin-arm64@2.5.1': + '@biomejs/cli-darwin-arm64': 2.5.2 + '@biomejs/cli-darwin-x64': 2.5.2 + '@biomejs/cli-linux-arm64': 2.5.2 + '@biomejs/cli-linux-arm64-musl': 2.5.2 + '@biomejs/cli-linux-x64': 2.5.2 + '@biomejs/cli-linux-x64-musl': 2.5.2 + '@biomejs/cli-win32-arm64': 2.5.2 + '@biomejs/cli-win32-x64': 2.5.2 + + '@biomejs/cli-darwin-arm64@2.5.2': optional: true - '@biomejs/cli-darwin-x64@2.5.1': + '@biomejs/cli-darwin-x64@2.5.2': optional: true - '@biomejs/cli-linux-arm64-musl@2.5.1': + '@biomejs/cli-linux-arm64-musl@2.5.2': optional: true - '@biomejs/cli-linux-arm64@2.5.1': + '@biomejs/cli-linux-arm64@2.5.2': optional: true - '@biomejs/cli-linux-x64-musl@2.5.1': + '@biomejs/cli-linux-x64-musl@2.5.2': optional: true - '@biomejs/cli-linux-x64@2.5.1': + '@biomejs/cli-linux-x64@2.5.2': optional: true - '@biomejs/cli-win32-arm64@2.5.1': + '@biomejs/cli-win32-arm64@2.5.2': optional: true - '@biomejs/cli-win32-x64@2.5.1': + '@biomejs/cli-win32-x64@2.5.2': optional: true - '@emnapi/runtime@1.11.1': + '@emnapi/runtime@1.11.2': dependencies: tslib: 2.8.1 optional: true @@ -1594,7 +1594,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.11.1 + '@emnapi/runtime': 1.11.2 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -1647,30 +1647,30 @@ snapshots: react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - '@next/env@16.2.9': {} + '@next/env@16.2.10': {} - '@next/swc-darwin-arm64@16.2.9': + '@next/swc-darwin-arm64@16.2.10': optional: true - '@next/swc-darwin-x64@16.2.9': + '@next/swc-darwin-x64@16.2.10': optional: true - '@next/swc-linux-arm64-gnu@16.2.9': + '@next/swc-linux-arm64-gnu@16.2.10': optional: true - '@next/swc-linux-arm64-musl@16.2.9': + '@next/swc-linux-arm64-musl@16.2.10': optional: true - '@next/swc-linux-x64-gnu@16.2.9': + '@next/swc-linux-x64-gnu@16.2.10': optional: true - '@next/swc-linux-x64-musl@16.2.9': + '@next/swc-linux-x64-musl@16.2.10': optional: true - '@next/swc-win32-arm64-msvc@16.2.9': + '@next/swc-win32-arm64-msvc@16.2.10': optional: true - '@next/swc-win32-x64-msvc@16.2.9': + '@next/swc-win32-x64-msvc@16.2.10': optional: true '@swc/helpers@0.5.15': @@ -1686,15 +1686,15 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 26.0.1 + '@types/node': 26.1.0 '@types/connect@3.4.38': dependencies: - '@types/node': 26.0.1 + '@types/node': 26.1.0 '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 26.0.1 + '@types/node': 26.1.0 '@types/qs': 6.15.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -1707,7 +1707,7 @@ snapshots: '@types/http-errors@2.0.5': {} - '@types/node@26.0.1': + '@types/node@26.1.0': dependencies: undici-types: 8.3.0 @@ -1725,12 +1725,12 @@ snapshots: '@types/send@1.2.1': dependencies: - '@types/node': 26.0.1 + '@types/node': 26.1.0 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 26.0.1 + '@types/node': 26.1.0 '@types/trusted-types@2.0.7': optional: true @@ -1763,7 +1763,7 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.10.37: {} + baseline-browser-mapping@2.10.42: {} body-parser@2.2.2: dependencies: @@ -1795,7 +1795,7 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - caniuse-lite@1.0.30001799: {} + caniuse-lite@1.0.30001800: {} chalk@5.6.2: {} @@ -2098,29 +2098,29 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.12: {} + nanoid@3.3.15: {} negotiator@1.0.0: {} - next@16.2.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + next@16.2.10(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - '@next/env': 16.2.9 + '@next/env': 16.2.10 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.10.37 - caniuse-lite: 1.0.30001799 + baseline-browser-mapping: 2.10.42 + caniuse-lite: 1.0.30001800 postcss: 8.5.15 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) styled-jsx: 5.1.6(react@19.2.7) optionalDependencies: - '@next/swc-darwin-arm64': 16.2.9 - '@next/swc-darwin-x64': 16.2.9 - '@next/swc-linux-arm64-gnu': 16.2.9 - '@next/swc-linux-arm64-musl': 16.2.9 - '@next/swc-linux-x64-gnu': 16.2.9 - '@next/swc-linux-x64-musl': 16.2.9 - '@next/swc-win32-arm64-msvc': 16.2.9 - '@next/swc-win32-x64-msvc': 16.2.9 + '@next/swc-darwin-arm64': 16.2.10 + '@next/swc-darwin-x64': 16.2.10 + '@next/swc-linux-arm64-gnu': 16.2.10 + '@next/swc-linux-arm64-musl': 16.2.10 + '@next/swc-linux-x64-gnu': 16.2.10 + '@next/swc-linux-x64-musl': 16.2.10 + '@next/swc-win32-arm64-msvc': 16.2.10 + '@next/swc-win32-x64-msvc': 16.2.10 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -2164,7 +2164,7 @@ snapshots: postcss@8.5.15: dependencies: - nanoid: 3.3.12 + nanoid: 3.3.15 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -2221,7 +2221,7 @@ snapshots: scheduler@0.27.0: {} - semver@7.8.4: + semver@7.8.5: optional: true send@1.2.1: @@ -2255,7 +2255,7 @@ snapshots: dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.8.4 + semver: 7.8.5 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 From 5b82754885f6dd4600a1fe0e288062c343a947cd Mon Sep 17 00:00:00 2001 From: nicolascukas Date: Mon, 6 Jul 2026 13:09:08 +0200 Subject: [PATCH 10/12] Harden RAG runtime readiness --- .gitignore | 1 + docs/kern-5-support-matrix.md | 3 +- docs/runtime-roadmap.md | 8 +- examples/kern-5-preview-app/README.md | 4 +- examples/kern-5-preview-app/answer-route.kern | 2 +- examples/rag-starter/README.md | 6 +- ...runtime-answer-async-retrieve-preview.kern | 2 +- .../runtime-answer-capability-preview.kern | 2 + .../rag-starter/runtime-answer-preview.kern | 2 +- packages/cli/src/commands/run-async-host.ts | 16 ++ packages/cli/tests/run.test.ts | 13 +- packages/core/src/rag-answer-synthesis.ts | 1 + packages/core/src/rag-retrieve-runner.ts | 72 +++++- packages/core/src/rag-runtime.ts | 2 + .../core/tests/rag-retrieve-runner.test.ts | 39 ++- packages/core/tests/rag-runtime.test.ts | 13 +- .../review/src/rules/confidence-baseline.ts | 2 + packages/review/src/rules/index.ts | 12 + packages/review/src/rules/kern-source.ts | 229 ++++++++++++++++++ .../review/tests/rules-kern-source.test.ts | 136 +++++++++++ 20 files changed, 543 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index c80615b69..4e92f6c47 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ node_modules/ dist/ packages/*/dist/ +cache/ examples/src/generated/ examples/drift-showcase/generated/ examples/rag-starter/index/ diff --git a/docs/kern-5-support-matrix.md b/docs/kern-5-support-matrix.md index 2579210ec..d90221268 100644 --- a/docs/kern-5-support-matrix.md +++ b/docs/kern-5-support-matrix.md @@ -81,7 +81,8 @@ provider call is bounded by a host-configurable per-call timeout provider fails closed), retrieved-chunk citation provenance uses one normalized wire shape across `rag.retrieve`/`rag.retrieveAsync` emission and `rag.promptContext`/`rag.checkAnswer`/`rag.answer` parsing (disagreeing -duplicate encodings fail closed), and `rag.promptContext` returns `safeText` — +duplicate encodings fail closed), retrieved-chunk metadata is preserved across +that wire shape when present, and `rag.promptContext` returns `safeText` — the assembled context wrapped in instruction-boundary markers with boundary-marker lookalikes in retrieved data neutralized — which `rag.answer` uses for its default prompt. diff --git a/docs/runtime-roadmap.md b/docs/runtime-roadmap.md index ef50a944c..94c965064 100644 --- a/docs/runtime-roadmap.md +++ b/docs/runtime-roadmap.md @@ -142,7 +142,7 @@ The preview surface is the documented, tested subset used by the smoke gate: OpenAI-compatible `llm.complete` provider (prompting through the instruction-boundary-marked `safeText` context), then fails closed through the same inline-citation-derived grounding contract before returning an - answer result + answer result with grounding coverage, cited chunks, and span evidence - in the Node CLI default async path, `rag.ingest` indexes declared local-persistent RAG stores through the existing async indexing workflow and returns a portable index lifecycle report without changing the shipped sync @@ -330,9 +330,9 @@ providers remain explicit host-adapter work. | `crypto.randomUUID` / `crypto.randomBytes` / `crypto.randomHex` | Shipped | Sync | Browser-safe provider with explicit host crypto source | | `rag.retrieve` | Shipped | Sync | Node CLI local RAG adapter over declared local sources | | `rag.retrieveAsync` | Shipped (async) | Async | Runs by default without `--async-preview`; Node CLI async RAG adapter over declared local sources through `retrieveRagDocumentAsync`; explicit host/provider boundary that preserves the normalized retrieval provenance shape | -| `rag.promptContext` | Shipped | Sync | Node CLI local prompt-context assembly over retrieved RAG chunks | -| `rag.checkAnswer` | Shipped | Sync | Node CLI local deterministic answer grounding/citation check over retrieved RAG chunks | -| `rag.answer` | Shipped (async) | Async | Runs by default without `--async-preview`; answer synthesis over already-retrieved chunks through deterministic or OpenAI-compatible `llm.complete`, prompt assembled with instruction-boundary marking, fail-closed by grounding/citation checks | +| `rag.promptContext` | Shipped | Sync | Node CLI local prompt-context assembly over retrieved RAG chunks; preserves chunk metadata in the returned chunk records | +| `rag.checkAnswer` | Shipped | Sync | Node CLI local deterministic answer grounding/citation check over retrieved chunks; fails closed if chunks do not match a prior retrieval for the same query | +| `rag.answer` | Shipped (async) | Async | Runs by default without `--async-preview`; answer synthesis over already-retrieved chunks through deterministic or OpenAI-compatible `llm.complete`, prompt assembled with instruction-boundary marking, fail-closed by grounding/citation checks, returns grounding coverage and span evidence | | `rag.ingest` | Shipped (async) | Async | Runs by default without `--async-preview`; indexes declared local-persistent stores through `indexRagDocumentAsync` and returns a portable lifecycle report; provider-backed embedders can be supplied by Node hosts | | `fs.readText` / `fs.writeText` / `fs.list` | Planned | Async planned | Must be host-injected; preview-runnable in `executeKernSourceAsync` straight-line / matched `if` arm / selected `branch` path / structured `try` / `catch` / `finally` / sequential `while`, `for`, and `each` loop bodies / same-file portable-scalar helper calls; Node CLI preview provides root-scoped `fs.list` / `fs.readText` and opt-in `fs.writeText` | | `net.fetch` | Planned | Async planned | Must be host-injected; preview-runnable in `executeKernSourceAsync` straight-line / matched `if` arm / selected `branch` path / structured `try` / `catch` / `finally` / sequential `while`, `for`, and `each` loop bodies / same-file portable-scalar helper calls; Node CLI preview requires explicit `--allow-net ` or `--allow-net data:` and denies redirects | diff --git a/examples/kern-5-preview-app/README.md b/examples/kern-5-preview-app/README.md index 17ed1474c..a9b716f1b 100644 --- a/examples/kern-5-preview-app/README.md +++ b/examples/kern-5-preview-app/README.md @@ -61,7 +61,7 @@ ui.kern -> server.mjs exposes request input through app-http.queryParam -> answer-route.kern runs through executeKernSourceAsync -> rag.retrieveAsync finds local corpus chunks - -> rag.promptContext builds prompt context + -> rag.promptContext builds prompt context with safeText instruction boundaries -> llm.complete host adapter returns deterministic preview text -> rag.checkAnswer enforces citation and grounding policy -> server.mjs returns structured JSON @@ -71,7 +71,7 @@ ui.kern | Area | Demo status | | --- | --- | -| KERN-authored | App manifest in `app.kern`; browser markup in `ui.kern`; backend route flow in `answer-route.kern`; RAG declaration, retrieval selection, answer check, and printed route result sections. | +| KERN-authored | App manifest in `app.kern`; browser markup in `ui.kern`; backend route flow in `answer-route.kern`; RAG declaration, retrieval selection, safe prompt-context handoff, answer check, and printed route result sections. | | Runtime capability | `app.kern` declares `app-http.queryParam`, `rag.retrieveAsync`, `rag.promptContext`, `llm.complete`, and `rag.checkAnswer`; `answer-route.kern` calls those explicit named operations. Missing, undeclared, or failed capabilities fail closed. | | Thin host adapter | `server.mjs` owns HTTP, filesystem reads for `.kern` sources, request query parameter injection, local corpus/vector adapter wiring, deterministic LLM preview output, and JSON shaping. It must honor the route, view, policy, response, and capability contract declared in `app.kern`. | | Outside the 5.0 matrix | The browser script is still host bootstrap JavaScript, the LLM is deterministic unless a host swaps in a provider, broad async KERN semantics remain outside the supported matrix, and linked multi-file KERN app packages are minimal manifest wiring rather than a full package system. | diff --git a/examples/kern-5-preview-app/answer-route.kern b/examples/kern-5-preview-app/answer-route.kern index 12ecf6f1c..0318a2eb9 100644 --- a/examples/kern-5-preview-app/answer-route.kern +++ b/examples/kern-5-preview-app/answer-route.kern @@ -52,7 +52,7 @@ fn name=answerQuestion returns=void let name=markers value="answerMarkers()" capability namespace=rag operation=retrieveAsync name=chunks input="{ question: query.question, retrieval: query.retrieval }" capability namespace=rag operation=promptContext name=context input="{ chunks: chunks, maxChars: query.maxChars }" - capability namespace=llm operation=complete name=answer input="{ prompt: context.text, question: query.question }" + capability namespace=llm operation=complete name=answer input="{ prompt: context.safeText, question: query.question }" capability namespace=rag operation=checkAnswer name=check input="{ query: query.question, answer: answer, chunks: chunks, requireCitations: true, minCitedChunks: 1, minGroundingCoverage: 0.85 }" let name=result value="new GroundedAnswer(answer, check.status)" print value="markers[0]" diff --git a/examples/rag-starter/README.md b/examples/rag-starter/README.md index c35009b6f..6bff09406 100644 --- a/examples/rag-starter/README.md +++ b/examples/rag-starter/README.md @@ -36,7 +36,7 @@ kern run --llm-response "Refunds are available within thirty days [1]" examples/ ``` The answer preview retrieves local support chunks, assembles them with -`rag.promptContext`, passes the resulting `context.text` to `llm.complete`, and +`rag.promptContext`, passes the resulting `context.safeText` to `llm.complete`, and checks the deterministic cited answer with `rag.checkAnswer` before printing it. Run the same retrieval with the dedicated answer-synthesis capability: @@ -47,8 +47,8 @@ kern run --llm-response "Refunds are available within thirty days [1]" examples/ The answer-capability preview keeps `rag.retrieve` explicit, then calls `rag.answer` to assemble prompt context, invoke the configured `llm.complete` -provider, infer inline citation spans, and fail closed unless the grounding -contract passes. +provider, infer inline citation spans, and return a grounded report with +coverage and span evidence. It fails closed unless the grounding contract passes. Use an OpenAI-compatible chat-completions provider instead of the deterministic response by supplying a provider, model, and API key: diff --git a/examples/rag-starter/runtime-answer-async-retrieve-preview.kern b/examples/rag-starter/runtime-answer-async-retrieve-preview.kern index 450ae1ab0..b1ce6e90d 100644 --- a/examples/rag-starter/runtime-answer-async-retrieve-preview.kern +++ b/examples/rag-starter/runtime-answer-async-retrieve-preview.kern @@ -17,6 +17,6 @@ fn name=main returns=void capability namespace=rag operation=promptContext name=context input="{ chunks: chunks, maxChars: 6000 }" print value="context.includedCount" print value="context.text" - capability namespace=llm operation=complete name=answer input="{ prompt: context.text }" + capability namespace=llm operation=complete name=answer input="{ prompt: context.safeText }" capability namespace=rag operation=checkAnswer name=check input="{ query: \"refund policy receipt\", answer: answer, chunks: chunks, requireCitations: true, minCitedChunks: 1, minGroundingCoverage: 0.85 }" print value="answer" diff --git a/examples/rag-starter/runtime-answer-capability-preview.kern b/examples/rag-starter/runtime-answer-capability-preview.kern index 82a1fad23..35cc0df6f 100644 --- a/examples/rag-starter/runtime-answer-capability-preview.kern +++ b/examples/rag-starter/runtime-answer-capability-preview.kern @@ -17,4 +17,6 @@ fn name=main returns=void print value="chunks.length" print value="result.passed" print value="result.status" + print value="result.groundedChars" + print value="result.answerChars" print value="result.answer" diff --git a/examples/rag-starter/runtime-answer-preview.kern b/examples/rag-starter/runtime-answer-preview.kern index dc489982d..b16a433b5 100644 --- a/examples/rag-starter/runtime-answer-preview.kern +++ b/examples/rag-starter/runtime-answer-preview.kern @@ -17,6 +17,6 @@ fn name=main returns=void capability namespace=rag operation=promptContext name=context input="{ chunks: chunks, maxChars: 6000 }" print value="context.includedCount" print value="context.text" - capability namespace=llm operation=complete name=answer input="{ prompt: context.text }" + capability namespace=llm operation=complete name=answer input="{ prompt: context.safeText }" capability namespace=rag operation=checkAnswer name=check input="{ query: \"refund policy receipt\", answer: answer, chunks: chunks, requireCitations: true, minCitedChunks: 1, minGroundingCoverage: 0.85 }" print value="answer" diff --git a/packages/cli/src/commands/run-async-host.ts b/packages/cli/src/commands/run-async-host.ts index 77e5b648c..834eae00b 100644 --- a/packages/cli/src/commands/run-async-host.ts +++ b/packages/cli/src/commands/run-async-host.ts @@ -259,8 +259,24 @@ export function createCliAsyncRagAnswerCapability( passed: result.passed, status: result.status, groundingCoverage: result.groundingCoverage, + groundedChars: result.groundedChars, + answerChars: result.answerChars, + evidenceSufficient: result.evidenceSufficient, + abstained: result.abstained, citedChunkIds: result.citedChunkIds, sources: result.sources, + groundingSpans: result.groundingSpans.map((span) => ({ + start: span.start, + end: span.end, + chunkIds: span.chunkIds, + required: span.required ?? null, + })), + diagnostics: result.diagnostics.map((diagnostic) => ({ + code: diagnostic.code, + message: diagnostic.message, + spanIndex: diagnostic.spanIndex ?? null, + chunkId: diagnostic.chunkId ?? null, + })), }, 'rag.answer result', ); diff --git a/packages/cli/tests/run.test.ts b/packages/cli/tests/run.test.ts index 3e927edda..e001cd8c9 100644 --- a/packages/cli/tests/run.test.ts +++ b/packages/cli/tests/run.test.ts @@ -811,7 +811,9 @@ describe('kern run — executes a void main and replays stdout (exit 0)', () => expect(r.status).toBe(0); expect(r.stderr).toBe(''); - expect(r.stdout).toBe(['1', 'true', 'grounded', 'Refunds are available within thirty days [1]', ''].join('\n')); + expect(r.stdout).toBe( + ['1', 'true', 'grounded', '35', '38', 'Refunds are available within thirty days [1]', ''].join('\n'), + ); }); test('RAG CAPABILITY: rag.answer preview fails closed when generated output is ungrounded', () => { @@ -878,7 +880,7 @@ describe('kern run — executes a void main and replays stdout (exit 0)', () => expect(ragAnswerCapability.status).toBe(0); expect(ragAnswerCapability.stderr).toBe(''); expect(ragAnswerCapability.stdout).toBe( - ['1', 'true', 'grounded', 'Refunds are available within thirty days [1]', ''].join('\n'), + ['1', 'true', 'grounded', '35', '38', 'Refunds are available within thirty days [1]', ''].join('\n'), ); const fixtureDir = join(dir, `rag-ingest-promoted-${counter++}`); @@ -2236,8 +2238,15 @@ describe('kern run --async-preview — executes CLI-owned async adapters', () => answer: 'Refunds are available within thirty days [1]', passed: true, status: 'grounded', + groundingCoverage: 0.9210526315789473, + groundedChars: 35, + answerChars: 38, + evidenceSufficient: true, + abstained: false, citedChunkIds: ['refunds'], sources: ['corpus/refunds.md'], + groundingSpans: [{ start: 0, end: 40, chunkIds: ['refunds'], required: true }], + diagnostics: [], }), ); expect(Object.hasOwn(result as Record, 'prompt')).toBe(false); diff --git a/packages/core/src/rag-answer-synthesis.ts b/packages/core/src/rag-answer-synthesis.ts index d9b6275cf..6c179ddb3 100644 --- a/packages/core/src/rag-answer-synthesis.ts +++ b/packages/core/src/rag-answer-synthesis.ts @@ -122,5 +122,6 @@ function contextChunksToRetrievedChunks(context: RagPromptContext): readonly Ret score: chunk.score, source: chunk.source, citation: chunk.citation, + ...(chunk.metadata ? { metadata: chunk.metadata } : {}), })); } diff --git a/packages/core/src/rag-retrieve-runner.ts b/packages/core/src/rag-retrieve-runner.ts index 96af05fc6..b10d59226 100644 --- a/packages/core/src/rag-retrieve-runner.ts +++ b/packages/core/src/rag-retrieve-runner.ts @@ -44,7 +44,11 @@ import { registeredExternalRagVectorStoreAdapter, unsafeSetRegisteredExternalRagVectorStoreAdapter, } from './rag-vector-store-registry.js'; -import type { RuntimeCapabilityProvider, RuntimeCapabilityValue } from './runner-capabilities.js'; +import { + assertRuntimeCapabilityValue, + type RuntimeCapabilityProvider, + type RuntimeCapabilityValue, +} from './runner-capabilities.js'; import { collectRagSemanticFacts, type RagSemanticFacts, @@ -163,7 +167,8 @@ interface LocalRagCapabilityInput { * for the citation fields specifically, which also accept the nested * `citation: { uri, locator }` form for chunks authored directly in `.kern` * source). `citationUri`/`citationLocator` are `string | null` — never - * `undefined` — so every surface can round-trip a chunk without reshaping it. + * `undefined` — and `metadata` is a portable record or `null`, so every surface + * can round-trip a retrieved chunk without silently shedding provenance. */ export interface RetrievedChunkCapabilityValue { readonly [key: string]: RuntimeCapabilityValue; @@ -173,6 +178,7 @@ export interface RetrievedChunkCapabilityValue { readonly source: string; readonly citationUri: string | null; readonly citationLocator: string | null; + readonly metadata: Readonly> | null; } type RagCapabilityChunkValue = RetrievedChunkCapabilityValue; @@ -698,6 +704,56 @@ function isPlainRecordInput( return value !== undefined && isPlainRecord(value); } +function isPlainRecordLike(value: unknown): value is Readonly> { + if (value === null || typeof value !== 'object' || Array.isArray(value)) return false; + const proto = Object.getPrototypeOf(value); + return proto === Object.prototype || proto === null; +} + +function ragMetadataCapabilityField( + value: unknown, + label: string, +): { readonly metadata: Readonly> | null } { + return { metadata: ragMetadataCapabilityValue(value, label) }; +} + +function ragMetadataRetrievedChunkField( + value: unknown, + label: string, +): { readonly metadata?: Record } { + const metadata = ragMetadataCapabilityValue(value, label); + return metadata === null ? {} : { metadata: cloneRuntimeCapabilityRecord(metadata) }; +} + +function ragMetadataCapabilityValue( + value: unknown, + label: string, +): Readonly> | null { + if (value === undefined || value === null) return null; + if (!isPlainRecordLike(value)) { + throw new Error(`${label} must be a record.`); + } + const portable = assertRuntimeCapabilityValue(value, label); + if (!isPlainRecord(portable) || Array.isArray(portable)) { + throw new Error(`${label} must be a record.`); + } + return cloneRuntimeCapabilityRecord(portable); +} + +function cloneRuntimeCapabilityRecord( + value: Readonly>, +): Record { + const out: Record = {}; + for (const [key, item] of Object.entries(value)) out[key] = cloneRuntimeCapabilityValue(item); + return out; +} + +function cloneRuntimeCapabilityValue(value: RuntimeCapabilityValue): RuntimeCapabilityValue { + if (Array.isArray(value)) return value.map((item) => cloneRuntimeCapabilityValue(item)); + if (isPlainRecord(value)) return cloneRuntimeCapabilityRecord(value); + return value; +} + export function toRetrievedChunkCapabilityValue( chunk: RetrieveResult['chunks'][number], ): RetrievedChunkCapabilityValue { @@ -708,6 +764,7 @@ export function toRetrievedChunkCapabilityValue( source: chunk.source, citationUri: chunk.citation?.uri ?? null, citationLocator: chunk.citation?.locator ?? null, + ...ragMetadataCapabilityField(chunk.metadata, 'RAG retrieved chunk metadata'), }; } @@ -721,6 +778,10 @@ function ragCapabilityValueChunk(value: RuntimeCapabilityValue, index: number): score: requiredScoreField(value, index), source: requiredStringField(value, 'source', index), citation: ragCapabilityValueCitation(value, index), + ...ragMetadataRetrievedChunkField( + value.metadata, + `RAG capability promptContext input field 'chunks[${index}].metadata'`, + ), }; } @@ -835,6 +896,7 @@ function ragPromptContextCapabilityValue(context: RagPromptContext): RagPromptCo score: chunk.score, citationUri: chunk.citation.uri ?? null, citationLocator: chunk.citation.locator ?? null, + ...ragMetadataCapabilityField(chunk.metadata, `RAG prompt context chunk '${chunk.id}' metadata`), text: chunk.text, renderedText: chunk.renderedText, truncated: chunk.truncated, @@ -909,11 +971,15 @@ function retrievedChunkFingerprint(chunk: RetrievedChunk): string { source: chunk.source, citationUri: chunk.citation?.uri ?? null, citationLocator: chunk.citation?.locator ?? null, + metadata: ragMetadataCapabilityValue(chunk.metadata, `RAG retrieved chunk '${chunk.id}' metadata`), }); } function cloneRagCapabilityChunks(chunks: readonly RagCapabilityChunkValue[]): RagCapabilityChunkValue[] { - return chunks.map((chunk) => ({ ...chunk })); + return chunks.map((chunk) => ({ + ...chunk, + ...ragMetadataCapabilityField(chunk.metadata, `RAG cached chunk '${chunk.id}' metadata`), + })); } function stableCapabilityJson(value: unknown): string { diff --git a/packages/core/src/rag-runtime.ts b/packages/core/src/rag-runtime.ts index 19f026700..9137fe91a 100644 --- a/packages/core/src/rag-runtime.ts +++ b/packages/core/src/rag-runtime.ts @@ -78,6 +78,7 @@ export interface RagPromptContextChunk { readonly source: string; readonly score: number; readonly citation: RagCitation; + readonly metadata?: Record; readonly text: string; readonly renderedText: string; readonly truncated: boolean; @@ -905,6 +906,7 @@ function ragPromptContextChunk( source: chunk.source, score: chunk.score, citation: ragPromptContextCitation(chunk.citation) ?? {}, + ...(chunk.metadata ? { metadata: cloneMetadata(chunk.metadata) } : {}), text: chunk.text, renderedText, truncated, diff --git a/packages/core/tests/rag-retrieve-runner.test.ts b/packages/core/tests/rag-retrieve-runner.test.ts index 7089a3a65..8a4fed2ca 100644 --- a/packages/core/tests/rag-retrieve-runner.test.ts +++ b/packages/core/tests/rag-retrieve-runner.test.ts @@ -259,6 +259,13 @@ describe('retrieveRagDocument', () => { expect(chunk.source).toBe('docs/refunds.md'); expect(chunk.citationUri).toBe('docs/refunds.md'); expect(typeof chunk.citationLocator).toBe('string'); + expect(chunk.metadata).toEqual( + expect.objectContaining({ + corpusName: 'Docs', + sourceName: 'manuals', + relativePath: 'docs/refunds.md', + }), + ); }); test('PROVENANCE NORMALIZATION: rag.retrieve and rag.retrieveAsync emit byte-identical chunk provenance for the same query', async () => { @@ -279,9 +286,18 @@ describe('retrieveRagDocument', () => { expect(Array.isArray(syncResult)).toBe(true); expect(asyncResult).toEqual(syncResult); const [chunk] = syncResult as Array>; - // The one normalized wire shape: exactly these six fields, citation - // provenance as `string | null` — never `undefined` — on both paths. - expect(Object.keys(chunk).sort()).toEqual(['citationLocator', 'citationUri', 'id', 'score', 'source', 'text']); + // The one normalized wire shape: citation provenance as `string | null` + // and metadata preserved on both sync and async paths. + expect(Object.keys(chunk).sort()).toEqual([ + 'citationLocator', + 'citationUri', + 'id', + 'metadata', + 'score', + 'source', + 'text', + ]); + expect(chunk.metadata).toEqual(expect.objectContaining({ relativePath: 'docs/refunds.md' })); }); test('creates local prompt context from rag.retrieve capability chunks', () => { @@ -316,6 +332,7 @@ describe('retrieveRagDocument', () => { expect.objectContaining({ index: 0, source: 'docs/refunds.md', + metadata: expect.objectContaining({ relativePath: 'docs/refunds.md', sourceName: 'manuals' }), renderedText: 'refund policy money back within thirty days', }), ]); @@ -566,6 +583,22 @@ describe('retrieveRagDocument', () => { }), ).toThrow(/previously returned by rag\.retrieve/u); + const droppedMetadataChunks = (chunks as Array>).map( + ({ metadata: _metadata, ...chunk }) => chunk, + ); + expect(() => + capability.checkAnswer({ + namespace: 'rag', + operation: 'checkAnswer', + input: { + query: 'refund policy money back', + answer: 'refund policy money back', + chunks: droppedMetadataChunks, + groundingSpans: [{ start: 0, end: 24, chunkIndexes: [0], required: true }], + }, + }), + ).toThrow(/previously returned by rag\.retrieve/u); + expect(() => capability.checkAnswer({ namespace: 'rag', diff --git a/packages/core/tests/rag-runtime.test.ts b/packages/core/tests/rag-runtime.test.ts index 076fc2a92..2e760cc3c 100644 --- a/packages/core/tests/rag-runtime.test.ts +++ b/packages/core/tests/rag-runtime.test.ts @@ -410,6 +410,7 @@ describe('RAG prompt context assembly', () => { test('preserves retrieved chunk body text when it fits', () => { const body = ' indented\ntrailing '; + const metadata = { section: 'policy', nested: { owner: 'support' } }; const context = assembleRagPromptContext([ { id: 'body', @@ -417,13 +418,23 @@ describe('RAG prompt context assembly', () => { score: 0.5, source: 'docs/body.md', citation: { uri: 'docs/body.md' }, + metadata, }, ]); expect(context.text).toBe( `[1] id="body" source="docs/body.md" score=0.5 citation={"uri":"docs/body.md"}\ntext=" indented\\ntrailing "`, ); - expect(context.chunks[0]).toEqual(expect.objectContaining({ text: body, renderedText: body, truncated: false })); + expect(context.chunks[0]).toEqual( + expect.objectContaining({ + text: body, + renderedText: body, + truncated: false, + metadata: { section: 'policy', nested: { owner: 'support' } }, + }), + ); + (context.chunks[0]?.metadata as Record).section = 'mutated'; + expect(metadata).toEqual({ section: 'policy', nested: { owner: 'support' } }); }); test('escapes line and paragraph separators in rendered prompt fields', () => { diff --git a/packages/review/src/rules/confidence-baseline.ts b/packages/review/src/rules/confidence-baseline.ts index de04fec47..2256b4c16 100644 --- a/packages/review/src/rules/confidence-baseline.ts +++ b/packages/review/src/rules/confidence-baseline.ts @@ -59,6 +59,8 @@ const RULE_CONFIDENCE_BASELINE: Record = { 'postmessage-missing-target-origin': 90, 'postmessage-wildcard-target': 90, 'props-array-mutated-in-render': 90, + 'rag-llm-missing-grounding-check': 88, + 'rag-prompt-context-unsafe-text': 92, 'react-legacy-unsafe-lifecycle': 90, 'redux-dispatch-in-render': 90, 'redux-selector-unstable-return': 90, diff --git a/packages/review/src/rules/index.ts b/packages/review/src/rules/index.ts index 038975e0d..cd7adc862 100644 --- a/packages/review/src/rules/index.ts +++ b/packages/review/src/rules/index.ts @@ -1322,6 +1322,18 @@ const REGISTRY: RuleInfo[] = [ severity: 'info', description: 'No confidence annotations found on external or uncertain logic', }, + { + id: 'rag-prompt-context-unsafe-text', + layer: 'kern-source', + severity: 'warning', + description: 'rag.promptContext text passed to llm.complete instead of safeText instruction boundary', + }, + { + id: 'rag-llm-missing-grounding-check', + layer: 'kern-source', + severity: 'warning', + description: 'RAG prompt-context llm.complete result is not checked by rag.checkAnswer', + }, { id: 'kern-duplicate-symbol', layer: 'kern-source', diff --git a/packages/review/src/rules/kern-source.ts b/packages/review/src/rules/kern-source.ts index c3b7438a1..5969d303f 100644 --- a/packages/review/src/rules/kern-source.ts +++ b/packages/review/src/rules/kern-source.ts @@ -1256,6 +1256,229 @@ export const missingConfidence: KernSourceRule = (nodes: IRNode[], filePath: str ]; }; +function capabilityScope(node: IRNode, parentMap: Map): IRNode | undefined { + let current = parentMap.get(node); + while (current) { + if (current.type === 'handler' || isScopeNode(current)) return current; + current = parentMap.get(current); + } + return undefined; +} + +function inputUsesPromptContextText(input: string, contextName: string): boolean { + const escapedName = escapeRegexLiteral(contextName); + const promptKey = String.raw`(?:^|[,{]\s*)["']?prompt["']?\s*:\s*`; + const unsafeAccess = String.raw`${escapedName}\s*(?:\.\s*text|\[\s*["']text["']\s*\])\b`; + return new RegExp(`${promptKey}${unsafeAccess}`).test(input); +} + +function inputUsesPromptContextPrompt(input: string, contextName: string): boolean { + const escapedName = escapeRegexLiteral(contextName); + const promptKey = String.raw`(?:^|[,{]\s*)["']?prompt["']?\s*:\s*`; + const promptAccess = String.raw`${escapedName}\s*(?:\.\s*(?:safeText|text)|\[\s*["'](?:safeText|text)["']\s*\])\b`; + return new RegExp(`${promptKey}${promptAccess}`).test(input); +} + +function inputUsesIdentifierField(input: string, fieldName: string, identifier: string): boolean { + const escapedField = escapeRegexLiteral(fieldName); + const escapedIdentifier = escapeRegexLiteral(identifier); + const fieldKey = String.raw`(?:^|[,{]\s*)["']?${escapedField}["']?\s*:\s*`; + return new RegExp(`${fieldKey}${escapedIdentifier}${String.raw`\b`}`).test(input); +} + +function exactIdentifierInput(input: string): string | undefined { + const trimmed = input.trim(); + if (/^[A-Za-z_$][\w$]*$/.test(trimmed)) return trimmed; + return undefined; +} + +function ragPromptUnsafeTextFinding( + filePath: string, + node: IRNode, + contextName: string, + payloadName?: string, +): ReviewFinding { + const subject = payloadName + ? `RAG prompt payload '${payloadName}' uses '${contextName}.text' and is passed to llm.complete` + : `rag.promptContext result '${contextName}.text' is passed to llm.complete as the prompt`; + return finding( + 'rag-prompt-context-unsafe-text', + 'warning', + 'bug', + `${subject}; use '${contextName}.safeText' so retrieved content stays inside KERN's instruction-boundary wrapper.`, + filePath, + node, + { + suggestion: `Change the llm.complete input to use prompt: ${contextName}.safeText.`, + }, + ); +} + +export const ragPromptContextUnsafeText: KernSourceRule = (nodes: IRNode[], filePath: string): ReviewFinding[] => { + const parentMap = buildParentMap(nodes); + const promptContextNamesByScope = new Map>(); + + for (const node of parentMap.keys()) { + if (node.type !== 'capability') continue; + const p = props(node); + if (p.namespace !== 'rag' || p.operation !== 'promptContext') continue; + if (typeof p.name !== 'string' || !p.name) continue; + const scope = capabilityScope(node, parentMap); + const names = promptContextNamesByScope.get(scope) ?? new Set(); + names.add(p.name); + promptContextNamesByScope.set(scope, names); + } + + if (promptContextNamesByScope.size === 0) return []; + + const unsafePayloadsByScope = new Map>(); + for (const node of parentMap.keys()) { + if (node.type !== 'let' && node.type !== 'const') continue; + const name = readStringPropFlat(node, 'name'); + if (!name) continue; + const value = readStringPropFlat(node, 'value') ?? readStringPropFlat(node, 'expr'); + if (!value) continue; + const scope = capabilityScope(node, parentMap); + const promptContextNames = promptContextNamesByScope.get(scope); + if (!promptContextNames) continue; + + for (const contextName of promptContextNames) { + if (!inputUsesPromptContextText(value, contextName)) continue; + const payloads = unsafePayloadsByScope.get(scope) ?? new Map(); + payloads.set(name, contextName); + unsafePayloadsByScope.set(scope, payloads); + break; + } + } + + const findings: ReviewFinding[] = []; + for (const node of parentMap.keys()) { + if (node.type !== 'capability') continue; + const p = props(node); + if (p.namespace !== 'llm' || p.operation !== 'complete') continue; + const input = readStringPropFlat(node, 'input'); + if (!input) continue; + const promptContextNames = promptContextNamesByScope.get(capabilityScope(node, parentMap)); + if (!promptContextNames) continue; + + let directUnsafePrompt = false; + for (const contextName of promptContextNames) { + if (!inputUsesPromptContextText(input, contextName)) continue; + findings.push(ragPromptUnsafeTextFinding(filePath, node, contextName)); + directUnsafePrompt = true; + break; + } + if (directUnsafePrompt) continue; + + const payloadName = exactIdentifierInput(input); + if (!payloadName) continue; + const indirectContextName = unsafePayloadsByScope.get(capabilityScope(node, parentMap))?.get(payloadName); + if (!indirectContextName) continue; + findings.push(ragPromptUnsafeTextFinding(filePath, node, indirectContextName, payloadName)); + } + + return findings; +}; + +export const ragLlmMissingGroundingCheck: KernSourceRule = (nodes: IRNode[], filePath: string): ReviewFinding[] => { + const parentMap = buildParentMap(nodes); + const promptContextNamesByScope = new Map>(); + + for (const node of parentMap.keys()) { + if (node.type !== 'capability') continue; + const p = props(node); + if (p.namespace !== 'rag' || p.operation !== 'promptContext') continue; + if (typeof p.name !== 'string' || !p.name) continue; + const scope = capabilityScope(node, parentMap); + const names = promptContextNamesByScope.get(scope) ?? new Set(); + names.add(p.name); + promptContextNamesByScope.set(scope, names); + } + + if (promptContextNamesByScope.size === 0) return []; + + const promptPayloadsByScope = new Map>(); + for (const node of parentMap.keys()) { + if (node.type !== 'let' && node.type !== 'const') continue; + const scope = capabilityScope(node, parentMap); + const promptContextNames = promptContextNamesByScope.get(scope); + if (!promptContextNames) continue; + const name = readStringPropFlat(node, 'name'); + const value = readStringPropFlat(node, 'value') ?? readStringPropFlat(node, 'expr'); + if (!name || !value) continue; + if (![...promptContextNames].some((contextName) => inputUsesPromptContextPrompt(value, contextName))) continue; + const payloads = promptPayloadsByScope.get(scope) ?? new Set(); + payloads.add(name); + promptPayloadsByScope.set(scope, payloads); + } + + const ragPromptCompletions: Array<{ node: IRNode; scope: IRNode | undefined; name: string }> = []; + for (const node of parentMap.keys()) { + if (node.type !== 'capability') continue; + const p = props(node); + if (p.namespace !== 'llm' || p.operation !== 'complete') continue; + if (typeof p.name !== 'string' || !p.name) continue; + const input = readStringPropFlat(node, 'input'); + if (!input) continue; + const scope = capabilityScope(node, parentMap); + const promptContextNames = promptContextNamesByScope.get(scope); + if (!promptContextNames) continue; + const directPrompt = [...promptContextNames].some((contextName) => + inputUsesPromptContextPrompt(input, contextName), + ); + const payloadName = exactIdentifierInput(input); + const indirectPrompt = payloadName ? promptPayloadsByScope.get(scope)?.has(payloadName) === true : false; + if (!directPrompt && !indirectPrompt) continue; + ragPromptCompletions.push({ node, scope, name: p.name }); + } + + if (ragPromptCompletions.length === 0) return []; + + const completionsByScope = new Map(); + for (const completion of ragPromptCompletions) { + const names = completionsByScope.get(completion.scope) ?? []; + names.push(completion.name); + completionsByScope.set(completion.scope, names); + } + + const checkedAnswerNamesByScope = new Map>(); + for (const node of parentMap.keys()) { + if (node.type !== 'capability') continue; + const p = props(node); + if (p.namespace !== 'rag' || p.operation !== 'checkAnswer') continue; + const input = readStringPropFlat(node, 'input'); + if (!input) continue; + const scope = capabilityScope(node, parentMap); + const completionNames = completionsByScope.get(scope); + if (!completionNames) continue; + for (const answerName of completionNames) { + if (!inputUsesIdentifierField(input, 'answer', answerName)) continue; + const checked = checkedAnswerNamesByScope.get(scope) ?? new Set(); + checked.add(answerName); + checkedAnswerNamesByScope.set(scope, checked); + } + } + + const findings: ReviewFinding[] = []; + for (const completion of ragPromptCompletions) { + if (checkedAnswerNamesByScope.get(completion.scope)?.has(completion.name)) continue; + findings.push( + finding( + 'rag-llm-missing-grounding-check', + 'warning', + 'bug', + `llm.complete result '${completion.name}' is generated from retrieved RAG prompt context but is not checked by rag.checkAnswer in the same scope.`, + filePath, + completion.node, + { + suggestion: `Add a rag.checkAnswer capability for answer: ${completion.name}, or replace the manual prompt/complete/check sequence with rag.answer.`, + }, + ), + ); + } + return findings; +}; + function readBooleanProp(node: IRNode, key: string): boolean { const v = props(node)[key]; if (typeof v === 'boolean') return v; @@ -1275,6 +1498,10 @@ function readStringPropFlat(node: IRNode, key: string): string | undefined { return undefined; } +function escapeRegexLiteral(value: string): string { + return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} + const PREDICATE_METHODS = ['filter', 'find', 'some', 'every', 'findIndex', 'findLast', 'findLastIndex']; export const asyncPredicateReturn: KernSourceRule = (nodes: IRNode[], filePath: string): ReviewFinding[] => { @@ -1469,6 +1696,8 @@ export const KERN_SOURCE_RULES: KernSourceRule[] = [ unusedState, handlerHeavy, missingConfidence, + ragPromptContextUnsafeText, + ragLlmMissingGroundingCheck, setSetterCollision, asyncPredicateReturn, thisIsOutsideClass, diff --git a/packages/review/tests/rules-kern-source.test.ts b/packages/review/tests/rules-kern-source.test.ts index 265fa1583..34e1fcbc7 100644 --- a/packages/review/tests/rules-kern-source.test.ts +++ b/packages/review/tests/rules-kern-source.test.ts @@ -613,6 +613,142 @@ screen name=External expect(requiredReport.findings.some((f) => f.ruleId === 'missing-confidence')).toBe(true); }); + describe('rag-prompt-context-unsafe-text', () => { + it('flags rag.promptContext text passed as an llm.complete prompt', () => { + const source = ` +fn name=answer returns=void + handler lang="kern" + capability namespace=rag operation=promptContext name=context input="{ chunks: chunks, maxChars: 6000 }" + capability namespace=llm operation=complete name=answer input="{ prompt: context.text }" +`; + const report = reviewKernSource(source, 'rag-answer.kern'); + const finding = report.findings.find((f) => f.ruleId === 'rag-prompt-context-unsafe-text'); + + expect(finding).toBeDefined(); + expect(finding?.severity).toBe('warning'); + expect(finding?.message).toContain('context.safeText'); + expect(finding?.suggestion).toContain('prompt: context.safeText'); + }); + + it('does not flag llm.complete prompts that use safeText', () => { + const source = ` +fn name=answer returns=void + handler lang="kern" + capability namespace=rag operation=promptContext name=context input="{ chunks: chunks, maxChars: 6000 }" + capability namespace=llm operation=complete name=answer input="{ prompt: context.safeText }" +`; + const report = reviewKernSource(source, 'rag-answer-safe.kern'); + expect(report.findings.some((f) => f.ruleId === 'rag-prompt-context-unsafe-text')).toBe(false); + }); + + it('flags prompt payload bindings that pass prompt-context text to llm.complete', () => { + const source = ` +fn name=answer returns=void + handler lang="kern" + capability namespace=rag operation=promptContext name=context input="{ chunks: chunks, maxChars: 6000 }" + let name=payload value="{ prompt: context.text, question: query.question }" + capability namespace=llm operation=complete name=answer input="payload" +`; + const report = reviewKernSource(source, 'rag-answer-payload.kern'); + const finding = report.findings.find((f) => f.ruleId === 'rag-prompt-context-unsafe-text'); + + expect(finding).toBeDefined(); + expect(finding?.message).toContain('payload'); + expect(finding?.message).toContain('context.safeText'); + }); + + it('does not flag prompt payload bindings that use safeText', () => { + const source = ` +fn name=answer returns=void + handler lang="kern" + capability namespace=rag operation=promptContext name=context input="{ chunks: chunks, maxChars: 6000 }" + let name=payload value="{ prompt: context.safeText, question: query.question }" + capability namespace=llm operation=complete name=answer input="payload" +`; + const report = reviewKernSource(source, 'rag-answer-safe-payload.kern'); + expect(report.findings.some((f) => f.ruleId === 'rag-prompt-context-unsafe-text')).toBe(false); + }); + + it('does not flag prompt payload bindings from another handler scope', () => { + const source = ` +fn name=buildPayload returns=void + handler lang="kern" + capability namespace=rag operation=promptContext name=context input="{ chunks: chunks, maxChars: 6000 }" + let name=payload value="{ prompt: context.text }" + +fn name=answer returns=void + handler lang="kern" + capability namespace=llm operation=complete name=answer input="payload" +`; + const report = reviewKernSource(source, 'rag-answer-other-scope.kern'); + expect(report.findings.some((f) => f.ruleId === 'rag-prompt-context-unsafe-text')).toBe(false); + }); + + it('does not flag printing prompt-context text for diagnostics', () => { + const source = ` +fn name=answer returns=void + handler lang="kern" + capability namespace=rag operation=promptContext name=context input="{ chunks: chunks, maxChars: 6000 }" + print value="context.text" +`; + const report = reviewKernSource(source, 'rag-answer-debug.kern'); + expect(report.findings.some((f) => f.ruleId === 'rag-prompt-context-unsafe-text')).toBe(false); + }); + }); + + describe('rag-llm-missing-grounding-check', () => { + it('flags RAG prompt-context completions that are not checked', () => { + const source = ` +fn name=answer returns=void + handler lang="kern" + capability namespace=rag operation=promptContext name=context input="{ chunks: chunks, maxChars: 6000 }" + capability namespace=llm operation=complete name=answer input="{ prompt: context.safeText }" + print value="answer" +`; + const report = reviewKernSource(source, 'rag-answer-unchecked.kern'); + const finding = report.findings.find((f) => f.ruleId === 'rag-llm-missing-grounding-check'); + + expect(finding).toBeDefined(); + expect(finding?.severity).toBe('warning'); + expect(finding?.message).toContain('rag.checkAnswer'); + expect(finding?.suggestion).toContain('rag.answer'); + }); + + it('does not flag RAG prompt-context completions checked by rag.checkAnswer', () => { + const source = ` +fn name=answer returns=void + handler lang="kern" + capability namespace=rag operation=promptContext name=context input="{ chunks: chunks, maxChars: 6000 }" + capability namespace=llm operation=complete name=answer input="{ prompt: context.safeText }" + capability namespace=rag operation=checkAnswer name=check input="{ query: query.question, answer: answer, chunks: chunks }" +`; + const report = reviewKernSource(source, 'rag-answer-checked.kern'); + expect(report.findings.some((f) => f.ruleId === 'rag-llm-missing-grounding-check')).toBe(false); + }); + + it('detects unchecked RAG prompt payload bindings passed to llm.complete', () => { + const source = ` +fn name=answer returns=void + handler lang="kern" + capability namespace=rag operation=promptContext name=context input="{ chunks: chunks, maxChars: 6000 }" + let name=payload value="{ prompt: context.safeText, question: query.question }" + capability namespace=llm operation=complete name=answer input="payload" +`; + const report = reviewKernSource(source, 'rag-answer-unchecked-payload.kern'); + expect(report.findings.some((f) => f.ruleId === 'rag-llm-missing-grounding-check')).toBe(true); + }); + + it('does not flag non-RAG LLM completions', () => { + const source = ` +fn name=answer returns=void + handler lang="kern" + capability namespace=llm operation=complete name=answer input="{ prompt: question }" +`; + const report = reviewKernSource(source, 'plain-llm.kern'); + expect(report.findings.some((f) => f.ruleId === 'rag-llm-missing-grounding-check')).toBe(false); + }); + }); + describe('async-predicate-return', () => { it('flags async fn passed directly to .filter()', () => { const source = ` From e748ed0de27fd8c87279aa8e74995d585503d71c Mon Sep 17 00:00:00 2001 From: nicolascukas Date: Mon, 6 Jul 2026 13:13:15 +0200 Subject: [PATCH 11/12] Sync review rule count docs --- CONTRIBUTING.md | 2 +- README.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3ad9258c9..a5d6877c7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -57,7 +57,7 @@ KERN is a pnpm monorepo. Key packages: |---------|---------| | `packages/core` | Parser, codegen, types, spec | | `packages/cli` | CLI commands (compile, review, evolve, dev) | -| `packages/review` | Static analysis engine (240 rules, taint tracking) | +| `packages/review` | Static analysis engine (242 rules, taint tracking) | | `packages/review-mcp` | MCP server security scanner | | `packages/react` | Next.js / React / Tailwind transpilers | | `packages/vue` | Vue 3 / Nuxt 3 transpilers | diff --git a/README.md b/README.md index c332ab0d3..7bb90df2e 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@
- **One backend spec. Real TypeScript and Python output.** 240 review rules.
+ **One backend spec. Real TypeScript and Python output.** 242 review rules.
A .kern spec is ~70% fewer tokens than the TypeScript it generates — ~81% fewer than maintaining both backends (measured, GPT-class tokenizer, example corpus).
@@ -32,7 +32,7 @@ npm install -g @kernlang/cli kern compile api.kern --target=express # Generate an Express backend kern compile api.kern --target=fastapi # Generate a FastAPI backend kern check # Nominal type checker (zero false positives) -kern review src/ --recursive # Static analysis (240 rules, taint tracking) +kern review src/ --recursive # Static analysis (242 rules, taint tracking) kern context src/ --stdout # Whole-project context map for an LLM/agent kern rag eval examples/rag-starter/eval-ci.kern --json # CI-safe RAG retrieval contract eval kern init --template=fullstack my-app # Scaffold fullstack app (Next.js + Express + MCP) @@ -49,7 +49,7 @@ kern schema --json # Full schema for Define routes, schemas, handlers, API shape, validation, and small portable logic once, then emit real TypeScript/Express and Python/FastAPI code. Keep complex business logic in TypeScript or Python; move shared structure and parity-safe operations into KERN. -KERN also includes four supporting capabilities: **Review**, **Infer**, **MCP Security**, and **Evolve**. You can skip `.kern` entirely and run `kern review` against existing TypeScript and Python for security bugs, unguarded effects, flaky tests, and prompt injection — 240 AST-based rules that catch what ESLint misses. +KERN also includes four supporting capabilities: **Review**, **Infer**, **MCP Security**, and **Evolve**. You can skip `.kern` entirely and run `kern review` against existing TypeScript and Python for security bugs, unguarded effects, flaky tests, and prompt injection — 242 AST-based rules that catch what ESLint misses. ### Backend Parity First @@ -210,7 +210,7 @@ kern review src/ --lint # KERN + ESLint + tsc unified kern review src/ --llm # AI review (see below) ``` -**240 rules** across base, security, framework, performance, test-quality, null-safety, dead-logic, concept, and taint-aware analysis layers. +**242 rules** across base, security, framework, performance, test-quality, null-safety, dead-logic, concept, and taint-aware analysis layers. Recent coverage includes broadly reusable Next.js, React, Storybook, and Playwright checks: App Router body parsing, cache and header hazards, client-boundary env exposure, cookie hardening, SWR invalidation drift, browser storage parsing, client-side redirect sinks, wildcard `postMessage`, legacy React lifecycles, effect cleanup mistakes, timer cleanup drift, stale `.length`/`.size` hook deps, props-array mutation in render, focused tests, fixed Playwright sleeps, brittle `networkidle` waits, non-deterministic stories, and unmocked Storybook network calls. @@ -530,7 +530,7 @@ Contributor architecture guide: [docs/architecture.md](docs/architecture.md) | **[@kernlang/cli](https://www.npmjs.com/package/@kernlang/cli)** | CLI — compile, review, context, evolve, dev | | **[@kernlang/core](https://www.npmjs.com/package/@kernlang/core)** | Parser, codegen, types — the compiler engine | | **[@kernlang/test](https://www.npmjs.com/package/@kernlang/test)** | Native KERN structural test runner | -| **[@kernlang/review](https://www.npmjs.com/package/@kernlang/review)** | 240 rules, taint tracking, OWASP LLM01, concept model | +| **[@kernlang/review](https://www.npmjs.com/package/@kernlang/review)** | 242 rules, taint tracking, OWASP LLM01, concept model | | **[@kernlang/review-mcp](https://www.npmjs.com/package/@kernlang/review-mcp)** | MCP security scanner (12 rules, OWASP MCP Top 10) | | @kernlang/react | Next.js, Tailwind, Web transpilers | | @kernlang/vue | Vue 3 SFC, Nuxt 3 transpilers | From ca9729214d73853de1a5950439d07d3eb9962243 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 8 Jul 2026 12:35:23 +0000 Subject: [PATCH 12/12] chore: sync versions to v4.5.0 [skip ci] --- package.json | 2 +- packages/check/package.json | 2 +- packages/cli/package.json | 2 +- packages/codemod/package.json | 2 +- packages/compat/package.json | 2 +- packages/context/package.json | 2 +- packages/core/package.json | 2 +- packages/core/src/spec.ts | 2 +- packages/evolve/package.json | 2 +- packages/express/package.json | 2 +- packages/go/package.json | 2 +- packages/mcp-server/package.json | 2 +- packages/mcp/package.json | 2 +- packages/metrics/package.json | 2 +- packages/native/package.json | 2 +- packages/playground/package.json | 2 +- packages/protocol/package.json | 2 +- packages/python/package.json | 2 +- packages/react/package.json | 2 +- packages/review-mcp/package.json | 2 +- packages/review-python/package.json | 2 +- packages/review/package.json | 2 +- packages/terminal/package.json | 2 +- packages/test/package.json | 2 +- packages/vue/package.json | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/package.json b/package.json index ffb9a9504..96e2fcc6d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kern-monorepo", - "version": "4.1.0", + "version": "4.5.0", "private": true, "type": "module", "packageManager": "pnpm@10.32.1", diff --git a/packages/check/package.json b/packages/check/package.json index c3f7926b2..fb11877d2 100644 --- a/packages/check/package.json +++ b/packages/check/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/check", - "version": "4.1.0", + "version": "4.5.0", "description": "KERN nominal assignability core — lifted Liskov subtype and override-variance checks", "type": "module", "main": "./dist/index.js", diff --git a/packages/cli/package.json b/packages/cli/package.json index 7fd2040cf..0547e8224 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/cli", - "version": "4.1.0", + "version": "4.5.0", "description": "KERN CLI — transpile, compile, minify, and analyze .kern files", "type": "module", "main": "./dist/index.js", diff --git a/packages/codemod/package.json b/packages/codemod/package.json index 936101e7a..6ef925e4e 100644 --- a/packages/codemod/package.json +++ b/packages/codemod/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/codemod", - "version": "4.1.0", + "version": "4.5.0", "description": "Kern Codemod — apply kern-review TemplateMatch results to rewrite TS into KERN-template-backed TS", "type": "module", "main": "./dist/index.js", diff --git a/packages/compat/package.json b/packages/compat/package.json index 479f932c4..74f8b073b 100644 --- a/packages/compat/package.json +++ b/packages/compat/package.json @@ -1,6 +1,6 @@ { "name": "kern-lang", - "version": "4.1.0", + "version": "4.5.0", "description": "The language LLMs think in. Write one .kern file, ship 7 targets. 70% fewer tokens.", "type": "module", "main": "./dist/index.js", diff --git a/packages/context/package.json b/packages/context/package.json index 3808b2549..3d06a3bf5 100644 --- a/packages/context/package.json +++ b/packages/context/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/context", - "version": "4.1.0", + "version": "4.5.0", "description": "Kern Project Context Graph — compact, deterministic whole-project map for LLM context", "type": "module", "main": "./dist/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 27f270eca..77a8c2d1f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/core", - "version": "4.1.0", + "version": "4.5.0", "description": "Kern core — parser, types, spec, config, style engines, codegen", "type": "module", "main": "./dist/index.js", diff --git a/packages/core/src/spec.ts b/packages/core/src/spec.ts index 20eda5efc..91345a6cd 100644 --- a/packages/core/src/spec.ts +++ b/packages/core/src/spec.ts @@ -10,7 +10,7 @@ * Targets: Next.js, React+Tailwind, React Native, Express */ -export const KERN_VERSION = '4.1.0'; +export const KERN_VERSION = '4.5.0'; // ── Grammar ───────────────────────────────────────────────────────────── export const IR_GRAMMAR = ` diff --git a/packages/evolve/package.json b/packages/evolve/package.json index 0636a392e..3141177b7 100644 --- a/packages/evolve/package.json +++ b/packages/evolve/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/evolve", - "version": "4.1.0", + "version": "4.5.0", "description": "Kern Evolve — self-extending template system: detect gaps, propose templates, validate, stage", "type": "module", "main": "./dist/index.js", diff --git a/packages/express/package.json b/packages/express/package.json index d33e9ec1b..31637ef64 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/express", - "version": "4.1.0", + "version": "4.5.0", "description": "Kern Express TypeScript backend transpiler", "type": "module", "main": "./dist/index.js", diff --git a/packages/go/package.json b/packages/go/package.json index 4f5b5f984..356984f43 100644 --- a/packages/go/package.json +++ b/packages/go/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/go", - "version": "4.1.0", + "version": "4.5.0", "description": "KERN Go net/http backend codegen", "type": "module", "main": "./dist/index.js", diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index 46ca382f4..e63b5b0dd 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/mcp-server", - "version": "4.1.0", + "version": "4.5.0", "description": "KERN MCP server — compile, review, and analyze .kern files via MCP", "type": "module", "main": "./dist/index.js", diff --git a/packages/mcp/package.json b/packages/mcp/package.json index c546d8f26..54b8ecb8e 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/mcp", - "version": "4.1.0", + "version": "4.5.0", "description": "Kern MCP server transpiler — compile .kern to secure MCP servers", "type": "module", "main": "./dist/index.js", diff --git a/packages/metrics/package.json b/packages/metrics/package.json index 4b1d8cfb8..fc7ed0078 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/metrics", - "version": "4.1.0", + "version": "4.5.0", "description": "Kern language metrics and project context export", "type": "module", "main": "./dist/index.js", diff --git a/packages/native/package.json b/packages/native/package.json index e62854d5d..b5b93af39 100644 --- a/packages/native/package.json +++ b/packages/native/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/native", - "version": "4.1.0", + "version": "4.5.0", "description": "Kern React Native transpiler", "type": "module", "main": "./dist/index.js", diff --git a/packages/playground/package.json b/packages/playground/package.json index 43b4d7951..2659247f3 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/playground", - "version": "4.1.0", + "version": "4.5.0", "private": true, "description": "KERN Playground — interactive compiler UI", "type": "module", diff --git a/packages/protocol/package.json b/packages/protocol/package.json index 91e2c7581..e9122e0c7 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/protocol", - "version": "4.1.0", + "version": "4.5.0", "description": "Kern draft protocol — structured AI communication format", "type": "module", "main": "./dist/index.js", diff --git a/packages/python/package.json b/packages/python/package.json index 08a559ef1..3234ecddf 100644 --- a/packages/python/package.json +++ b/packages/python/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/python", - "version": "4.1.0", + "version": "4.5.0", "description": "KERN Python backend codegen (FastAPI router target included)", "type": "module", "main": "./dist/index.js", diff --git a/packages/react/package.json b/packages/react/package.json index c84b348c6..dfb28e101 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/react", - "version": "4.1.0", + "version": "4.5.0", "description": "Kern React transpilers — Tailwind, Next.js, Web", "type": "module", "main": "./dist/index.js", diff --git a/packages/review-mcp/package.json b/packages/review-mcp/package.json index 4df87fafd..03fae6766 100644 --- a/packages/review-mcp/package.json +++ b/packages/review-mcp/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/review-mcp", - "version": "4.1.0", + "version": "4.5.0", "repository": { "type": "git", "url": "git+https://github.com/KERNlang/kern.git", diff --git a/packages/review-python/package.json b/packages/review-python/package.json index 1dbf4bbfe..8563262b4 100644 --- a/packages/review-python/package.json +++ b/packages/review-python/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/review-python", - "version": "4.1.0", + "version": "4.5.0", "description": "Python concept mapper for kern review — tree-sitter based", "type": "module", "main": "dist/index.js", diff --git a/packages/review/package.json b/packages/review/package.json index be0141d2e..4031fe1c8 100644 --- a/packages/review/package.json +++ b/packages/review/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/review", - "version": "4.1.0", + "version": "4.5.0", "description": "Kern Review — scan TS, infer .kern IR, roundtrip diff, report", "type": "module", "main": "./dist/index.js", diff --git a/packages/terminal/package.json b/packages/terminal/package.json index 70270ef40..665fde525 100644 --- a/packages/terminal/package.json +++ b/packages/terminal/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/terminal", - "version": "4.1.0", + "version": "4.5.0", "description": "Kern ANSI terminal rendering transpiler", "type": "module", "main": "./dist/index.js", diff --git a/packages/test/package.json b/packages/test/package.json index 7f6a23f38..490c49eae 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/test", - "version": "4.1.0", + "version": "4.5.0", "description": "Native KERN structural test runner", "type": "module", "main": "./dist/index.js", diff --git a/packages/vue/package.json b/packages/vue/package.json index 2716ff042..5085d655a 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@kernlang/vue", - "version": "4.1.0", + "version": "4.5.0", "description": "Kern Vue/Nuxt transpilers — Vue 3 SFC + Nuxt 3 output", "type": "module", "main": "./dist/index.js",