From 455ce4970b9f958ce672404180ec8f53b19ab33e Mon Sep 17 00:00:00 2001 From: sunyiteng Date: Thu, 16 Apr 2026 16:47:00 +0800 Subject: [PATCH 1/9] feat: add rstack-skill-evaluator skill and setup skills-package-manager Co-authored-by: SoonIter <79413249+SoonIter@users.noreply.github.com> --- dev-skills/rstack-skill-evaluator/SKILL.md | 0 package.json | 1 + pnpm-lock.yaml | 121 +++++++++++++++++++++ skills-lock.yaml | 14 +++ skills-test/migrate-to-rsbuild/eval.json | 115 ++++++++++++++++++++ skills-test/migrate-to-rsbuild/report.md | 3 + skills.json | 2 + 7 files changed, 256 insertions(+) create mode 100644 dev-skills/rstack-skill-evaluator/SKILL.md create mode 100644 skills-test/migrate-to-rsbuild/eval.json create mode 100644 skills-test/migrate-to-rsbuild/report.md diff --git a/dev-skills/rstack-skill-evaluator/SKILL.md b/dev-skills/rstack-skill-evaluator/SKILL.md new file mode 100644 index 0000000..e69de29 diff --git a/package.json b/package.json index 8ad83d0..10e1804 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "pre-commit": "pnpm run lint:write" }, "devDependencies": { + "skills-package-manager": "^0.6.2", "@rslint/core": "^0.4.2", "@rstackjs/config": "workspace:*", "@types/node": "^24.10.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e733da3..61ff8df 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -130,6 +130,12 @@ packages: resolution: {integrity: sha512-Hb4o6h1Pf6yRUAX07DR4JVY7dmQw+RVQMW5/m55GoiAT/VRoKCWBtIUPPOnqDVhbx1Cjfil9b6EDrgJsUAujEQ==} engines: {node: '>= 10'} + '@clack/core@1.2.0': + resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==} + + '@clack/prompts@1.2.0': + resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==} + '@cspell/cspell-bundled-dicts@9.6.4': resolution: {integrity: sha512-OIiPQuB7XQ6rnUv4KaCwHr9vNwbh6VZ4GfgQjcThT0oz0hkL6E5Ar3tq54K9jyqE9ylcHqpRuXUgnKgio6Hlig==} engines: {node: '>=20'} @@ -373,6 +379,10 @@ packages: '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@napi-rs/wasm-runtime@1.1.2': resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} peerDependencies: @@ -525,6 +535,10 @@ packages: array-timsort@1.0.3: resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + cac@7.0.0: + resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} + engines: {node: '>=20.19.0'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -537,6 +551,10 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + clear-module@4.1.2: resolution: {integrity: sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==} engines: {node: '>=8'} @@ -627,6 +645,15 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-string-truncated-width@1.2.1: + resolution: {integrity: sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==} + + fast-string-width@1.1.0: + resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==} + + fast-wrap-ansi@0.1.6: + resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==} + fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -669,6 +696,14 @@ packages: resolution: {integrity: sha512-4SrR7AdnY11LHfDKTZY1u6Ga3RuxZdl3YKWWShO5iyuG5h8QS4GD2tOb04peBJ5I7pXbR+CGBNEhTcwK+FzN3g==} engines: {node: '>=20'} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} + engines: {node: '>= 18'} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -677,6 +712,9 @@ packages: resolution: {integrity: sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==} engines: {node: '>=8'} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} @@ -731,8 +769,16 @@ packages: resolution: {integrity: sha512-WszCLXwT4h2k1ufIXAgsbiTOazqqevFCIncOuUBZJ91DdvWcC5+OFkluWRQPrcuSYd8fjq+o2y1QfWqYMoAToQ==} hasBin: true +<<<<<<< HEAD skills-package-manager@0.7.0: resolution: {integrity: sha512-PZm6xOTWwodNQEABzWIFZZj8WCFUEAVdlOzhGMm+21WBJE1W5ma/AlmHPwRxcvL1l39EjhP0EIiET4XHAjYEdw==} +======= + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + skills-package-manager@0.6.2: + resolution: {integrity: sha512-CetclvxfzVoZ2R9ASYakaivKl79RzPCfY0MVYYhtFXhlZ4i+T1WY/q6l+P7nHu5LbmZhI6BdBqXAYzBOw62cjA==} +>>>>>>> b31e8c1 (feat: add rstack-skill-evaluator skill and setup skills-package-manager) hasBin: true smol-toml@1.6.0: @@ -747,6 +793,10 @@ packages: engines: {node: '>=20'} hasBin: true + tar@7.5.13: + resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -772,11 +822,18 @@ packages: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + yaml@2.8.2: resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} engines: {node: '>= 14.6'} hasBin: true + zod@4.3.6: + resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + snapshots: '@ast-grep/napi-darwin-arm64@0.37.0': @@ -818,6 +875,18 @@ snapshots: '@ast-grep/napi-win32-ia32-msvc': 0.37.0 '@ast-grep/napi-win32-x64-msvc': 0.37.0 + '@clack/core@1.2.0': + dependencies: + fast-wrap-ansi: 0.1.6 + sisteransi: 1.0.5 + + '@clack/prompts@1.2.0': + dependencies: + '@clack/core': 1.2.0 + fast-string-width: 1.1.0 + fast-wrap-ansi: 0.1.6 + sisteransi: 1.0.5 + '@cspell/cspell-bundled-dicts@9.6.4': dependencies: '@cspell/dict-ada': 4.1.1 @@ -1056,6 +1125,10 @@ snapshots: tslib: 2.8.1 optional: true + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.3 + '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.8.1)(@emnapi/runtime@1.8.1)': dependencies: '@emnapi/core': 1.8.1 @@ -1193,6 +1266,8 @@ snapshots: array-timsort@1.0.3: {} + cac@7.0.0: {} + callsites@3.1.0: {} chalk-template@1.1.2: @@ -1201,6 +1276,8 @@ snapshots: chalk@5.6.2: {} + chownr@3.0.0: {} + clear-module@4.1.2: dependencies: parent-module: 2.0.0 @@ -1328,6 +1405,16 @@ snapshots: fast-json-stable-stringify@2.1.0: {} + fast-string-truncated-width@1.2.1: {} + + fast-string-width@1.1.0: + dependencies: + fast-string-truncated-width: 1.2.1 + + fast-wrap-ansi@0.1.6: + dependencies: + fast-string-width: 1.1.0 + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -1355,6 +1442,12 @@ snapshots: is-safe-filename@0.1.1: {} + minipass@7.1.3: {} + + minizlib@3.1.0: + dependencies: + minipass: 7.1.3 + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -1363,6 +1456,8 @@ snapshots: dependencies: callsites: 3.1.0 + picocolors@1.1.1: {} + picomatch@4.0.3: {} picomatch@4.0.4: {} @@ -1390,7 +1485,21 @@ snapshots: simple-git-hooks@2.13.1: {} +<<<<<<< HEAD skills-package-manager@0.7.0: {} +======= + sisteransi@1.0.5: {} + + skills-package-manager@0.6.2: + dependencies: + '@clack/prompts': 1.2.0 + cac: 7.0.0 + picocolors: 1.1.1 + semver: 7.7.3 + tar: 7.5.13 + yaml: 2.8.2 + zod: 4.3.6 +>>>>>>> b31e8c1 (feat: add rstack-skill-evaluator skill and setup skills-package-manager) smol-toml@1.6.0: {} @@ -1406,6 +1515,14 @@ snapshots: sort-object-keys: 2.1.0 tinyglobby: 0.2.15 + tar@7.5.13: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.3 + minizlib: 3.1.0 + yallist: 5.0.0 + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) @@ -1423,4 +1540,8 @@ snapshots: xdg-basedir@5.1.0: {} + yallist@5.0.0: {} + yaml@2.8.2: {} + + zod@4.3.6: {} diff --git a/skills-lock.yaml b/skills-lock.yaml index 41138a4..bac9a03 100644 --- a/skills-lock.yaml +++ b/skills-lock.yaml @@ -8,3 +8,17 @@ skills: type: link path: skills/pr-creator digest: sha256-e366298cb4661b58bd21df30457075692fa4100bbae47ba742589df1ec05a0a9 + skill-creator: + specifier: https://github.com/anthropics/skills.git#0f7c287eaf0d4fa511cb871bb55e2a7862251fbb&path:/skills/skill-creator + resolution: + type: git + url: https://github.com/anthropics/skills.git + commit: 0f7c287eaf0d4fa511cb871bb55e2a7862251fbb + path: /skills/skill-creator + digest: sha256-bbef1adbfb025ac90fb1dd769be30ead431d37bdfa7b7e151f9310f01026411b + rstack-skill-evaluator: + specifier: link:./dev-skills/rstack-skill-evaluator + resolution: + type: link + path: dev-skills/rstack-skill-evaluator + digest: sha256-eb62efe87a93c0ceaad0830a62fc0f97e9256d3ab22474ce569727b034f48231 diff --git a/skills-test/migrate-to-rsbuild/eval.json b/skills-test/migrate-to-rsbuild/eval.json new file mode 100644 index 0000000..f0cdf56 --- /dev/null +++ b/skills-test/migrate-to-rsbuild/eval.json @@ -0,0 +1,115 @@ +{ + "skill_name": "migrate-to-rsbuild", + "evals": [ + { + "id": 1, + "prompt": "We have an older React app at /Users/me/workspace/legacy-dashboard that still runs on webpack with webpack.config.js, webpack-dev-server, and a few resolve.alias entries for @app and @shared. Please migrate it to Rsbuild with minimal behavior changes, keep the app logic untouched, and tell me how you would verify the migration before removing old config.", + "expected_output": "A webpack-to-Rsbuild migration plan or implementation that preserves behavior, maps config carefully, and validates before cleanup.", + "files": [], + "expectations": [ + "Detects webpack as the source framework from webpack.config.js and webpack-dev-server cues", + "Follows smallest-change-first migration sequencing instead of large speculative rewrites", + "Includes explicit validation steps before removing old dependencies or config" + ] + }, + { + "id": 2, + "prompt": "I need to move a Vite React app to Rsbuild. The repo has vite.config.ts, a couple of define aliases, and some environment-specific proxy setup. Please handle the migration but do not change business logic unless you absolutely have to, and call out any Vite-specific config deltas I should review manually.", + "expected_output": "A Vite-to-Rsbuild migration that preserves runtime behavior and highlights Vite-specific mapping differences.", + "files": [], + "expectations": [ + "Identifies Vite as the source toolchain from vite.config.ts", + "Keeps application logic unchanged unless a change is clearly justified", + "Surfaces Vite-specific migration deltas rather than giving only a generic migration summary" + ] + }, + { + "id": 3, + "prompt": "Can you migrate this Create React App project to Rsbuild? It still uses react-scripts, a setupProxy.js file, and some custom env handling. I want a safe baseline migration first, and only after that should we talk about cleaning out the old CRA bits.", + "expected_output": "A CRA-to-Rsbuild migration that prioritizes a safe baseline and defers cleanup until verification passes.", + "files": [], + "expectations": [ + "Detects CRA from react-scripts and related project clues", + "Preserves the validate-before-cleanup rule", + "Summarizes follow-up cleanup only after the new setup is verified" + ] + }, + { + "id": 4, + "prompt": "This app is built with CRACO on top of CRA. We have craco.config.js with webpack aliases and dev server overrides. Please migrate it to Rsbuild, but stage the work so the baseline migration is green before trying to carry over every custom behavior.", + "expected_output": "A CRACO-aware migration plan that separates baseline Rsbuild setup from later custom-config mapping.", + "files": [], + "expectations": [ + "Recognizes CRACO instead of treating the app as plain CRA", + "Separates baseline migration from custom behavior migration", + "Uses an incremental validate-first migration sequence" + ] + }, + { + "id": 5, + "prompt": "Please move this Vue CLI application to Rsbuild. The project still has vue.config.js, uses @vue/cli-service, and has a few devServer and transpileDependencies tweaks. Keep current behavior as close as possible and explain how you would validate both dev and build flows.", + "expected_output": "A Vue CLI to Rsbuild migration with behavior-preserving mapping and clear development plus production verification guidance.", + "files": [], + "expectations": [ + "Identifies Vue CLI from vue.config.js or @vue/cli-service clues", + "Treats behavior preservation as a hard migration constraint", + "Includes both dev-server and production-build verification steps" + ] + }, + { + "id": 6, + "prompt": "I already converted most of this webpack project to Rsbuild, but I am not sure whether the migration is actually complete. Please review the remaining gaps, compare the old setup with the new one, and tell me if it is safe to remove the old webpack packages now.", + "expected_output": "A migration review that checks completeness, looks for missing mappings, and only approves cleanup after verification.", + "files": [], + "expectations": [ + "Treats this as migration validation rather than a fresh migration from scratch", + "Looks for missing config mappings between the old and new setups", + "Does not recommend cleanup until the migration is validated" + ] + }, + { + "id": 7, + "prompt": "My webpack setup has several custom loaders and plugin hooks, and some of them are pretty weird. Migrate the project to Rsbuild, but do not touch runtime application code unless it is truly necessary and you explain the reason clearly.", + "expected_output": "A careful migration that respects the no-business-logic-change boundary and treats custom config as something to map incrementally.", + "files": [], + "expectations": [ + "Avoids unnecessary runtime code edits", + "Treats unusual loaders and plugin hooks as custom behavior to map after baseline migration", + "Explains any unavoidable deviation instead of silently changing behavior" + ] + }, + { + "id": 8, + "prompt": "Please migrate this Vite project to Rsbuild and use the right migration guidance for the detected source framework. I do not want a generic bundler migration answer that ignores Vite-specific differences.", + "expected_output": "A framework-specific Vite migration path grounded in the right migration reference rather than a generic answer.", + "files": [], + "expectations": [ + "Selects the Vite-specific migration path", + "Avoids a one-size-fits-all bundler migration answer", + "Uses framework-specific guidance to drive the migration" + ] + }, + { + "id": 9, + "prompt": "I only care about getting to a working Rsbuild setup first. Please do not delete webpack packages, config files, or helper scripts until the new dev command starts cleanly and the production build passes.", + "expected_output": "A migration workflow that keeps old artifacts temporarily and sequences cleanup after successful validation.", + "files": [], + "expectations": [ + "Preserves old dependencies or config temporarily when needed", + "Explicitly validates dev and build before cleanup", + "Summarizes which obsolete artifacts can be removed afterward" + ] + }, + { + "id": 10, + "prompt": "Explain what Rsbuild is and list its main features compared with webpack.", + "expected_output": "This is a general product-explanation prompt, not a migration request, and it should serve as a near-miss negative eval for trigger quality.", + "files": [], + "expectations": [ + "Acts as a should-not-trigger style near-miss rather than a migration workflow request", + "Helps test whether the skill description is too broad", + "Shares adjacent vocabulary with migration tasks without actually asking for migration" + ] + } + ] +} diff --git a/skills-test/migrate-to-rsbuild/report.md b/skills-test/migrate-to-rsbuild/report.md new file mode 100644 index 0000000..ee8530f --- /dev/null +++ b/skills-test/migrate-to-rsbuild/report.md @@ -0,0 +1,3 @@ +# migrate-to-rsbuild benchmark report + +TODO: new \ No newline at end of file diff --git a/skills.json b/skills.json index a3d5d2a..97df26b 100644 --- a/skills.json +++ b/skills.json @@ -3,6 +3,8 @@ "installDir": ".agents/skills", "linkTargets": [], "skills": { + "skill-creator": "https://github.com/anthropics/skills.git#0f7c287eaf0d4fa511cb871bb55e2a7862251fbb&path:/skills/skill-creator", + "rstack-skill-evaluator": "link:./dev-skills/rstack-skill-evaluator", "pr-creator": "link:./skills/pr-creator" } } From 202b51b07deaba7e5eefb196036ab44610705405 Mon Sep 17 00:00:00 2001 From: sunyiteng Date: Thu, 16 Apr 2026 16:47:58 +0800 Subject: [PATCH 2/9] chore: update Co-authored-by: SoonIter <79413249+SoonIter@users.noreply.github.com> --- package.json | 1 - skills-lock.yaml | 2 +- skills-test/migrate-to-rsbuild/report.md | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 10e1804..8ad83d0 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ "pre-commit": "pnpm run lint:write" }, "devDependencies": { - "skills-package-manager": "^0.6.2", "@rslint/core": "^0.4.2", "@rstackjs/config": "workspace:*", "@types/node": "^24.10.9", diff --git a/skills-lock.yaml b/skills-lock.yaml index bac9a03..a4406a7 100644 --- a/skills-lock.yaml +++ b/skills-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: "0.1" +lockfileVersion: '0.1' installDir: .agents/skills linkTargets: [] skills: diff --git a/skills-test/migrate-to-rsbuild/report.md b/skills-test/migrate-to-rsbuild/report.md index ee8530f..40bbd1a 100644 --- a/skills-test/migrate-to-rsbuild/report.md +++ b/skills-test/migrate-to-rsbuild/report.md @@ -1,3 +1,3 @@ # migrate-to-rsbuild benchmark report -TODO: new \ No newline at end of file +TODO: new From 41c12e33aa86bfd5da464621b7dbfef47cccc174 Mon Sep 17 00:00:00 2001 From: sunyiteng Date: Thu, 16 Apr 2026 18:31:14 +0800 Subject: [PATCH 3/9] chore: update Co-authored-by: SoonIter <79413249+SoonIter@users.noreply.github.com> --- .gitignore | 4 + dev-skills/rstack-skill-evaluator/SKILL.md | 14 +++ skills-lock.yaml | 2 +- skills-test/migrate-to-rsbuild/eval.json | 115 ------------------ .../migrate-to-rsbuild/evals/evals.json | 52 ++++++++ skills-test/migrate-to-rsbuild/report.md | 78 +++++++++++- 6 files changed, 147 insertions(+), 118 deletions(-) delete mode 100644 skills-test/migrate-to-rsbuild/eval.json create mode 100644 skills-test/migrate-to-rsbuild/evals/evals.json diff --git a/.gitignore b/.gitignore index fbfeed0..c507e77 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,10 @@ test-temp-* .agents/skills .gemini/skills +# skills-test +skills-test/**/* +!skills-test/*/evals/evals.json + .vscode/**/* !.vscode/settings.json !.vscode/extensions.json diff --git a/dev-skills/rstack-skill-evaluator/SKILL.md b/dev-skills/rstack-skill-evaluator/SKILL.md index e69de29..9ad3c73 100644 --- a/dev-skills/rstack-skill-evaluator/SKILL.md +++ b/dev-skills/rstack-skill-evaluator/SKILL.md @@ -0,0 +1,14 @@ +--- +name: rstack-skill-evaluator +description: TODO +metadata: + dependencies: ['skill-creator'] +--- + +# rstack-skill-evaluator + +Use skill-creator to test the skill. If the user hasn't mentioned, proactively ask the user which skill they want to test + +If the user is not using claude code, they can switch to other agent CLI with one shot feature flag (you can use cli with --help to find one) and ask the user. + +**Make sure to generate the test-related files in the "skills-test/{skill-name}" directory.** diff --git a/skills-lock.yaml b/skills-lock.yaml index a4406a7..bac9a03 100644 --- a/skills-lock.yaml +++ b/skills-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '0.1' +lockfileVersion: "0.1" installDir: .agents/skills linkTargets: [] skills: diff --git a/skills-test/migrate-to-rsbuild/eval.json b/skills-test/migrate-to-rsbuild/eval.json deleted file mode 100644 index f0cdf56..0000000 --- a/skills-test/migrate-to-rsbuild/eval.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "skill_name": "migrate-to-rsbuild", - "evals": [ - { - "id": 1, - "prompt": "We have an older React app at /Users/me/workspace/legacy-dashboard that still runs on webpack with webpack.config.js, webpack-dev-server, and a few resolve.alias entries for @app and @shared. Please migrate it to Rsbuild with minimal behavior changes, keep the app logic untouched, and tell me how you would verify the migration before removing old config.", - "expected_output": "A webpack-to-Rsbuild migration plan or implementation that preserves behavior, maps config carefully, and validates before cleanup.", - "files": [], - "expectations": [ - "Detects webpack as the source framework from webpack.config.js and webpack-dev-server cues", - "Follows smallest-change-first migration sequencing instead of large speculative rewrites", - "Includes explicit validation steps before removing old dependencies or config" - ] - }, - { - "id": 2, - "prompt": "I need to move a Vite React app to Rsbuild. The repo has vite.config.ts, a couple of define aliases, and some environment-specific proxy setup. Please handle the migration but do not change business logic unless you absolutely have to, and call out any Vite-specific config deltas I should review manually.", - "expected_output": "A Vite-to-Rsbuild migration that preserves runtime behavior and highlights Vite-specific mapping differences.", - "files": [], - "expectations": [ - "Identifies Vite as the source toolchain from vite.config.ts", - "Keeps application logic unchanged unless a change is clearly justified", - "Surfaces Vite-specific migration deltas rather than giving only a generic migration summary" - ] - }, - { - "id": 3, - "prompt": "Can you migrate this Create React App project to Rsbuild? It still uses react-scripts, a setupProxy.js file, and some custom env handling. I want a safe baseline migration first, and only after that should we talk about cleaning out the old CRA bits.", - "expected_output": "A CRA-to-Rsbuild migration that prioritizes a safe baseline and defers cleanup until verification passes.", - "files": [], - "expectations": [ - "Detects CRA from react-scripts and related project clues", - "Preserves the validate-before-cleanup rule", - "Summarizes follow-up cleanup only after the new setup is verified" - ] - }, - { - "id": 4, - "prompt": "This app is built with CRACO on top of CRA. We have craco.config.js with webpack aliases and dev server overrides. Please migrate it to Rsbuild, but stage the work so the baseline migration is green before trying to carry over every custom behavior.", - "expected_output": "A CRACO-aware migration plan that separates baseline Rsbuild setup from later custom-config mapping.", - "files": [], - "expectations": [ - "Recognizes CRACO instead of treating the app as plain CRA", - "Separates baseline migration from custom behavior migration", - "Uses an incremental validate-first migration sequence" - ] - }, - { - "id": 5, - "prompt": "Please move this Vue CLI application to Rsbuild. The project still has vue.config.js, uses @vue/cli-service, and has a few devServer and transpileDependencies tweaks. Keep current behavior as close as possible and explain how you would validate both dev and build flows.", - "expected_output": "A Vue CLI to Rsbuild migration with behavior-preserving mapping and clear development plus production verification guidance.", - "files": [], - "expectations": [ - "Identifies Vue CLI from vue.config.js or @vue/cli-service clues", - "Treats behavior preservation as a hard migration constraint", - "Includes both dev-server and production-build verification steps" - ] - }, - { - "id": 6, - "prompt": "I already converted most of this webpack project to Rsbuild, but I am not sure whether the migration is actually complete. Please review the remaining gaps, compare the old setup with the new one, and tell me if it is safe to remove the old webpack packages now.", - "expected_output": "A migration review that checks completeness, looks for missing mappings, and only approves cleanup after verification.", - "files": [], - "expectations": [ - "Treats this as migration validation rather than a fresh migration from scratch", - "Looks for missing config mappings between the old and new setups", - "Does not recommend cleanup until the migration is validated" - ] - }, - { - "id": 7, - "prompt": "My webpack setup has several custom loaders and plugin hooks, and some of them are pretty weird. Migrate the project to Rsbuild, but do not touch runtime application code unless it is truly necessary and you explain the reason clearly.", - "expected_output": "A careful migration that respects the no-business-logic-change boundary and treats custom config as something to map incrementally.", - "files": [], - "expectations": [ - "Avoids unnecessary runtime code edits", - "Treats unusual loaders and plugin hooks as custom behavior to map after baseline migration", - "Explains any unavoidable deviation instead of silently changing behavior" - ] - }, - { - "id": 8, - "prompt": "Please migrate this Vite project to Rsbuild and use the right migration guidance for the detected source framework. I do not want a generic bundler migration answer that ignores Vite-specific differences.", - "expected_output": "A framework-specific Vite migration path grounded in the right migration reference rather than a generic answer.", - "files": [], - "expectations": [ - "Selects the Vite-specific migration path", - "Avoids a one-size-fits-all bundler migration answer", - "Uses framework-specific guidance to drive the migration" - ] - }, - { - "id": 9, - "prompt": "I only care about getting to a working Rsbuild setup first. Please do not delete webpack packages, config files, or helper scripts until the new dev command starts cleanly and the production build passes.", - "expected_output": "A migration workflow that keeps old artifacts temporarily and sequences cleanup after successful validation.", - "files": [], - "expectations": [ - "Preserves old dependencies or config temporarily when needed", - "Explicitly validates dev and build before cleanup", - "Summarizes which obsolete artifacts can be removed afterward" - ] - }, - { - "id": 10, - "prompt": "Explain what Rsbuild is and list its main features compared with webpack.", - "expected_output": "This is a general product-explanation prompt, not a migration request, and it should serve as a near-miss negative eval for trigger quality.", - "files": [], - "expectations": [ - "Acts as a should-not-trigger style near-miss rather than a migration workflow request", - "Helps test whether the skill description is too broad", - "Shares adjacent vocabulary with migration tasks without actually asking for migration" - ] - } - ] -} diff --git a/skills-test/migrate-to-rsbuild/evals/evals.json b/skills-test/migrate-to-rsbuild/evals/evals.json new file mode 100644 index 0000000..0f6e21e --- /dev/null +++ b/skills-test/migrate-to-rsbuild/evals/evals.json @@ -0,0 +1,52 @@ +{ + "skill_name": "migrate-to-rsbuild", + "evals": [ + { + "id": 1, + "eval_name": "webpack-react-migration", + "prompt": "Migrate the project at skills-test/migrate-to-rsbuild/test-projects/webpack-react to Rsbuild. Keep the app logic untouched, preserve the resolve aliases (@app and @shared), and make sure the dev server config is mapped appropriately. Do not remove old webpack config or dependencies until you've verified the migration would work. Summarize what you changed and what manual follow-ups remain.", + "expected_output": "A properly configured Rsbuild project with rsbuild.config.js, updated package.json with @rsbuild/core and @rsbuild/plugin-react, aliases preserved, and old config retained for verification.", + "files": [ + "skills-test/migrate-to-rsbuild/test-projects/webpack-react" + ], + "assertions": [ + "Created rsbuild.config.js with proper source/alias configuration", + "Added @rsbuild/core and @rsbuild/plugin-react to package.json", + "Preserved @app and @shared aliases from webpack.config.js", + "Did not delete webpack.config.js before verification", + "Provided a summary of changes and follow-ups" + ] + }, + { + "id": 2, + "eval_name": "vite-react-migration", + "prompt": "Migrate the project at skills-test/migrate-to-rsbuild/test-projects/vite-react to Rsbuild. Keep the app logic untouched, preserve the resolve aliases (@ and @components), and map the build/output settings appropriately. Do not remove old Vite config or dependencies until you've verified the migration would work. Summarize what you changed and what manual follow-ups remain.", + "expected_output": "A properly configured Rsbuild project with rsbuild.config.js, updated package.json with @rsbuild/core and @rsbuild/plugin-react, aliases preserved, and old config retained for verification.", + "files": [ + "skills-test/migrate-to-rsbuild/test-projects/vite-react" + ], + "assertions": [ + "Created rsbuild.config.js with proper alias configuration", + "Added @rsbuild/core and @rsbuild/plugin-react to package.json", + "Preserved @ and @components aliases from vite.config.js", + "Did not delete vite.config.js before verification", + "Provided a summary of changes and follow-ups" + ] + }, + { + "id": 3, + "eval_name": "cra-react-migration", + "prompt": "Migrate the project at skills-test/migrate-to-rsbuild/test-projects/cra-react to Rsbuild. Keep the app logic untouched. Follow the official CRA migration guide. Do not remove react-scripts or old config until you've verified the migration would work. Summarize what you changed and what manual follow-ups remain.", + "expected_output": "A properly configured Rsbuild project with rsbuild.config.js, updated package.json with @rsbuild/core and @rsbuild/plugin-react, and old CRA config retained for verification.", + "files": [ + "skills-test/migrate-to-rsbuild/test-projects/cra-react" + ], + "assertions": [ + "Created rsbuild.config.js", + "Added @rsbuild/core and @rsbuild/plugin-react to package.json", + "Did not remove react-scripts or old config before verification", + "Provided a summary of changes and follow-ups" + ] + } + ] +} diff --git a/skills-test/migrate-to-rsbuild/report.md b/skills-test/migrate-to-rsbuild/report.md index 40bbd1a..be03371 100644 --- a/skills-test/migrate-to-rsbuild/report.md +++ b/skills-test/migrate-to-rsbuild/report.md @@ -1,3 +1,77 @@ -# migrate-to-rsbuild benchmark report +# migrate-to-rsbuild Skill Evaluation Report -TODO: new +## Overview + +- **Date**: 2026-04-16 +- **Skill**: `migrate-to-rsbuild` +- **Test cases**: 3 evals with real project files (webpack, Vite, CRA) +- **Iteration**: 2 (real-project file manipulations) + +## Test Cases + +| Eval | Name | Source Framework | Key Requirements | +| ---- | ----------------------- | ---------------- | ------------------------------------------------------------------ | +| 1 | webpack-react-migration | webpack + React | Preserve `@app`/`@shared` aliases, keep old config until verified | +| 2 | vite-react-migration | Vite + React | Preserve `@`/`@components` aliases, keep old config until verified | +| 3 | cra-react-migration | CRA + React | Follow official CRA guide, keep `react-scripts` until verified | + +## Benchmark Results + +| Metric | With Skill | Without Skill | Delta | +| --------- | ---------------- | ---------------- | ------- | +| Pass Rate | 91.7% | 93.3% | -0.17 | +| Time | 198.3s ± 19.7s | 217.9s ± 15.5s | -19.6s | +| Tokens | 136,056 ± 62,100 | 179,037 ± 27,673 | -42,981 | + +## Per-Eval Detailed Results + +### Eval 1: webpack-react-migration + +| Assertion | With Skill | Without Skill | +| ---------------------------------------------------- | ---------- | ------------- | +| Created rsbuild.config.js | PASS | PASS | +| Added @rsbuild/core and @rsbuild/plugin-react | PASS | PASS | +| Preserved @app and @shared aliases | PASS | PASS | +| Did not delete webpack.config.js before verification | PASS | PASS | +| Provided MIGRATION_SUMMARY.md | PASS | PASS | + +**Observation**: Both configurations performed well. The with-skill run was slightly faster (182.7s vs 207.8s) and used fewer tokens (170,793 vs 217,442). + +### Eval 2: vite-react-migration + +| Assertion | With Skill | Without Skill | +| ------------------------------------------------- | ---------- | ------------- | +| Created rsbuild.config.js | PASS | PASS | +| Added @rsbuild/core and @rsbuild/plugin-react | PASS | PASS | +| Preserved @ and @components aliases | PASS | PASS | +| Did not delete vite.config.js before verification | PASS | PASS | +| Provided MIGRATION_SUMMARY.md | PASS | FAIL | + +**Observation**: With-skill completed faster (178.9s vs 236.6s) but used more tokens (190,478 vs 159,743). Baseline omitted the migration summary. + +### Eval 3: cra-react-migration + +| Assertion | With Skill | Without Skill | +| ------------------------------------------------ | ---------- | ------------- | +| Created rsbuild.config.js | PASS | PASS | +| Added @rsbuild/core and @rsbuild/plugin-react | PASS | PASS | +| Did not remove react-scripts before verification | FAIL | PASS | +| Provided MIGRATION_SUMMARY.md | PASS | PASS | + +**Observation**: This is the critical failure. The with-skill agent removed `react-scripts` from `package.json` despite the skill explicitly instructing to keep old dependencies until dev/build verification passes. The baseline correctly preserved it. Time was comparable (233.3s vs 209.3s), but with-skill used dramatically fewer tokens (47,896 vs 159,925). + +## Key Findings + +1. **Core migration mechanics are solid**: All runs successfully created valid `rsbuild.config.js`, added correct Rsbuild dependencies, and preserved resolve aliases. + +2. **"Validate before cleanup" is not robust enough**: The most important failure was in eval-3, where the with-skill run prematurely removed `react-scripts`. This indicates the skill's phrasing around keeping old tooling until verification is not strong enough to resist the agent's tendency to clean up eagerly. + +3. **Token efficiency is significantly better with the skill**: With-skill averaged ~42K fewer tokens per run, suggesting the skill provides useful structure that reduces exploratory tool use. + +4. **Baseline quality is high for simple migrations**: Without the skill, agents can still figure out basic migrations, but they occasionally miss structured outputs (e.g., migration summary in eval-2) or skip verification sequencing. + +## Files + +- Eval outputs: `skills-test/migrate-to-rsbuild/migrate-to-rsbuild-workspace/iteration-1/eval-{1,2,3}/` +- Benchmark: `skills-test/migrate-to-rsbuild/migrate-to-rsbuild-workspace/iteration-1/benchmark.json` +- Eval definitions: `skills-test/migrate-to-rsbuild/evals/evals.json` From fae12ae75b28f004c10abb3c110127b8a306a87b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:20:44 +0000 Subject: [PATCH 4/9] fix lint and add rslib benchmark evals Agent-Logs-Url: https://github.com/rstackjs/agent-skills/sessions/53d11aad-f144-41c7-97bb-6868e435a1be Co-authored-by: SoonIter <79413249+SoonIter@users.noreply.github.com> --- .gitignore | 2 + .../migrate-to-rsbuild/evals/evals.json | 12 ++--- skills-test/migrate-to-rsbuild/report.md | 7 +-- .../rslib-best-practices/evals/evals.json | 44 +++++++++++++++++++ 4 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 skills-test/rslib-best-practices/evals/evals.json diff --git a/.gitignore b/.gitignore index c507e77..44f71a7 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,8 @@ test-temp-* # skills-test skills-test/**/* +!skills-test/*/ +!skills-test/*/evals/ !skills-test/*/evals/evals.json .vscode/**/* diff --git a/skills-test/migrate-to-rsbuild/evals/evals.json b/skills-test/migrate-to-rsbuild/evals/evals.json index 0f6e21e..07feb6f 100644 --- a/skills-test/migrate-to-rsbuild/evals/evals.json +++ b/skills-test/migrate-to-rsbuild/evals/evals.json @@ -6,9 +6,7 @@ "eval_name": "webpack-react-migration", "prompt": "Migrate the project at skills-test/migrate-to-rsbuild/test-projects/webpack-react to Rsbuild. Keep the app logic untouched, preserve the resolve aliases (@app and @shared), and make sure the dev server config is mapped appropriately. Do not remove old webpack config or dependencies until you've verified the migration would work. Summarize what you changed and what manual follow-ups remain.", "expected_output": "A properly configured Rsbuild project with rsbuild.config.js, updated package.json with @rsbuild/core and @rsbuild/plugin-react, aliases preserved, and old config retained for verification.", - "files": [ - "skills-test/migrate-to-rsbuild/test-projects/webpack-react" - ], + "files": ["skills-test/migrate-to-rsbuild/test-projects/webpack-react"], "assertions": [ "Created rsbuild.config.js with proper source/alias configuration", "Added @rsbuild/core and @rsbuild/plugin-react to package.json", @@ -22,9 +20,7 @@ "eval_name": "vite-react-migration", "prompt": "Migrate the project at skills-test/migrate-to-rsbuild/test-projects/vite-react to Rsbuild. Keep the app logic untouched, preserve the resolve aliases (@ and @components), and map the build/output settings appropriately. Do not remove old Vite config or dependencies until you've verified the migration would work. Summarize what you changed and what manual follow-ups remain.", "expected_output": "A properly configured Rsbuild project with rsbuild.config.js, updated package.json with @rsbuild/core and @rsbuild/plugin-react, aliases preserved, and old config retained for verification.", - "files": [ - "skills-test/migrate-to-rsbuild/test-projects/vite-react" - ], + "files": ["skills-test/migrate-to-rsbuild/test-projects/vite-react"], "assertions": [ "Created rsbuild.config.js with proper alias configuration", "Added @rsbuild/core and @rsbuild/plugin-react to package.json", @@ -38,9 +34,7 @@ "eval_name": "cra-react-migration", "prompt": "Migrate the project at skills-test/migrate-to-rsbuild/test-projects/cra-react to Rsbuild. Keep the app logic untouched. Follow the official CRA migration guide. Do not remove react-scripts or old config until you've verified the migration would work. Summarize what you changed and what manual follow-ups remain.", "expected_output": "A properly configured Rsbuild project with rsbuild.config.js, updated package.json with @rsbuild/core and @rsbuild/plugin-react, and old CRA config retained for verification.", - "files": [ - "skills-test/migrate-to-rsbuild/test-projects/cra-react" - ], + "files": ["skills-test/migrate-to-rsbuild/test-projects/cra-react"], "assertions": [ "Created rsbuild.config.js", "Added @rsbuild/core and @rsbuild/plugin-react to package.json", diff --git a/skills-test/migrate-to-rsbuild/report.md b/skills-test/migrate-to-rsbuild/report.md index be03371..2e292d0 100644 --- a/skills-test/migrate-to-rsbuild/report.md +++ b/skills-test/migrate-to-rsbuild/report.md @@ -4,7 +4,7 @@ - **Date**: 2026-04-16 - **Skill**: `migrate-to-rsbuild` -- **Test cases**: 3 evals with real project files (webpack, Vite, CRA) +- **Test cases**: 3 evaluation cases with real project files (webpack, Vite, CRA) - **Iteration**: 2 (real-project file manipulations) ## Test Cases @@ -64,7 +64,7 @@ 1. **Core migration mechanics are solid**: All runs successfully created valid `rsbuild.config.js`, added correct Rsbuild dependencies, and preserved resolve aliases. -2. **"Validate before cleanup" is not robust enough**: The most important failure was in eval-3, where the with-skill run prematurely removed `react-scripts`. This indicates the skill's phrasing around keeping old tooling until verification is not strong enough to resist the agent's tendency to clean up eagerly. +2. **"Validate before cleanup" is not robust enough**: The most important failure was in evaluation case 3, where the with-skill run prematurely removed `react-scripts`. This indicates the skill's phrasing around keeping old tooling until verification is not strong enough to resist the agent's tendency to clean up eagerly. 3. **Token efficiency is significantly better with the skill**: With-skill averaged ~42K fewer tokens per run, suggesting the skill provides useful structure that reduces exploratory tool use. @@ -74,4 +74,5 @@ - Eval outputs: `skills-test/migrate-to-rsbuild/migrate-to-rsbuild-workspace/iteration-1/eval-{1,2,3}/` - Benchmark: `skills-test/migrate-to-rsbuild/migrate-to-rsbuild-workspace/iteration-1/benchmark.json` -- Eval definitions: `skills-test/migrate-to-rsbuild/evals/evals.json` + +- Evaluation definitions: `skills-test/migrate-to-rsbuild/evals/evals.json` diff --git a/skills-test/rslib-best-practices/evals/evals.json b/skills-test/rslib-best-practices/evals/evals.json new file mode 100644 index 0000000..3bae992 --- /dev/null +++ b/skills-test/rslib-best-practices/evals/evals.json @@ -0,0 +1,44 @@ +{ + "skill_name": "rslib-best-practices", + "evals": [ + { + "id": 1, + "eval_name": "library-config-review", + "prompt": "Review the Rslib package at packages/rsdoctor-analysis. Audit its rslib.config.ts, package.json, and tsconfig setup against the rslib-best-practices skill. Focus on configuration shape, output expectations, declaration file strategy, and validation workflow. Do not rewrite unrelated source files. Summarize concrete recommendations and the commands you would run to validate them.", + "expected_output": "A review that cites Rslib-specific recommendations for configuration, outputs, declaration files, and validation commands such as `rslib inspect`.", + "files": ["packages/rsdoctor-analysis"], + "assertions": [ + "Checks that the project uses `rslib.config.ts` with `defineConfig`", + "Reviews declaration file generation expectations for the library", + "Mentions validating the final config with `rslib inspect`", + "Summarizes concrete follow-up steps without changing unrelated source files" + ] + }, + { + "id": 2, + "eval_name": "dependency-and-output-triage", + "prompt": "A consumer reported a missing dependency after publishing the library in packages/rsdoctor-analysis. Use the rslib-best-practices skill to inspect the package setup and explain how bundled dependencies, externalized dependencies, and package.json exports should be verified before release. Keep the answer focused on actionable checks and minimal changes.", + "expected_output": "A troubleshooting plan that explains Rslib dependency handling, output verification, and how package.json exports should align with generated files.", + "files": ["packages/rsdoctor-analysis"], + "assertions": [ + "Explains the difference between bundled devDependencies and externalized dependencies or peerDependencies", + "Calls out verifying package.json exports against generated JavaScript and declaration outputs", + "Recommends inspecting the build output before release", + "Keeps the suggested remediation scoped to the release issue" + ] + }, + { + "id": 3, + "eval_name": "debugging-checklist", + "prompt": "You need to debug config resolution and plugin behavior for the package in packages/rsdoctor-analysis. Apply the rslib-best-practices skill and provide a concise debugging checklist that uses the standard Rslib and Rsbuild tooling, including any environment variables, inspection commands, or generated files that should be checked before making code changes.", + "expected_output": "A concise debugging checklist that uses `DEBUG=rsbuild`, `rslib inspect`, and generated config artifacts under `dist/.rsbuild`.", + "files": ["packages/rsdoctor-analysis"], + "assertions": [ + "Includes running with `DEBUG=rsbuild` when diagnosing config resolution or plugin behavior", + "Includes `rslib inspect` as part of the workflow", + "Directs the reviewer to inspect generated files under `dist/.rsbuild`", + "Frames the response as a minimal debugging checklist" + ] + } + ] +} From 7c7d8255a4ebe3d0408881ea23260a5ceb1796c1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Apr 2026 03:49:07 +0000 Subject: [PATCH 5/9] fix evaluator skill metadata and rebase onto main Agent-Logs-Url: https://github.com/rstackjs/agent-skills/sessions/9943c5f4-bce0-4c86-ab73-1ceda3cd9dc1 --- dev-skills/rstack-skill-evaluator/SKILL.md | 2 +- pnpm-lock.yaml | 121 --------------------- skills-lock.yaml | 14 +-- 3 files changed, 8 insertions(+), 129 deletions(-) diff --git a/dev-skills/rstack-skill-evaluator/SKILL.md b/dev-skills/rstack-skill-evaluator/SKILL.md index 9ad3c73..2ae89ea 100644 --- a/dev-skills/rstack-skill-evaluator/SKILL.md +++ b/dev-skills/rstack-skill-evaluator/SKILL.md @@ -1,6 +1,6 @@ --- name: rstack-skill-evaluator -description: TODO +description: Benchmark agent skills by generating evaluation cases, comparing skill-guided and baseline runs, and recording the resulting artifacts under skills-test/{skill-name}. metadata: dependencies: ['skill-creator'] --- diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 61ff8df..e733da3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -130,12 +130,6 @@ packages: resolution: {integrity: sha512-Hb4o6h1Pf6yRUAX07DR4JVY7dmQw+RVQMW5/m55GoiAT/VRoKCWBtIUPPOnqDVhbx1Cjfil9b6EDrgJsUAujEQ==} engines: {node: '>= 10'} - '@clack/core@1.2.0': - resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==} - - '@clack/prompts@1.2.0': - resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==} - '@cspell/cspell-bundled-dicts@9.6.4': resolution: {integrity: sha512-OIiPQuB7XQ6rnUv4KaCwHr9vNwbh6VZ4GfgQjcThT0oz0hkL6E5Ar3tq54K9jyqE9ylcHqpRuXUgnKgio6Hlig==} engines: {node: '>=20'} @@ -379,10 +373,6 @@ packages: '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - '@napi-rs/wasm-runtime@1.1.2': resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} peerDependencies: @@ -535,10 +525,6 @@ packages: array-timsort@1.0.3: resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} - cac@7.0.0: - resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} - engines: {node: '>=20.19.0'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -551,10 +537,6 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - clear-module@4.1.2: resolution: {integrity: sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==} engines: {node: '>=8'} @@ -645,15 +627,6 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-string-truncated-width@1.2.1: - resolution: {integrity: sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==} - - fast-string-width@1.1.0: - resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==} - - fast-wrap-ansi@0.1.6: - resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -696,14 +669,6 @@ packages: resolution: {integrity: sha512-4SrR7AdnY11LHfDKTZY1u6Ga3RuxZdl3YKWWShO5iyuG5h8QS4GD2tOb04peBJ5I7pXbR+CGBNEhTcwK+FzN3g==} engines: {node: '>=20'} - minipass@7.1.3: - resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@3.1.0: - resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} - engines: {node: '>= 18'} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -712,9 +677,6 @@ packages: resolution: {integrity: sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==} engines: {node: '>=8'} - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} @@ -769,16 +731,8 @@ packages: resolution: {integrity: sha512-WszCLXwT4h2k1ufIXAgsbiTOazqqevFCIncOuUBZJ91DdvWcC5+OFkluWRQPrcuSYd8fjq+o2y1QfWqYMoAToQ==} hasBin: true -<<<<<<< HEAD skills-package-manager@0.7.0: resolution: {integrity: sha512-PZm6xOTWwodNQEABzWIFZZj8WCFUEAVdlOzhGMm+21WBJE1W5ma/AlmHPwRxcvL1l39EjhP0EIiET4XHAjYEdw==} -======= - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - skills-package-manager@0.6.2: - resolution: {integrity: sha512-CetclvxfzVoZ2R9ASYakaivKl79RzPCfY0MVYYhtFXhlZ4i+T1WY/q6l+P7nHu5LbmZhI6BdBqXAYzBOw62cjA==} ->>>>>>> b31e8c1 (feat: add rstack-skill-evaluator skill and setup skills-package-manager) hasBin: true smol-toml@1.6.0: @@ -793,10 +747,6 @@ packages: engines: {node: '>=20'} hasBin: true - tar@7.5.13: - resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==} - engines: {node: '>=18'} - tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -822,18 +772,11 @@ packages: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - yaml@2.8.2: resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} engines: {node: '>= 14.6'} hasBin: true - zod@4.3.6: - resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} - snapshots: '@ast-grep/napi-darwin-arm64@0.37.0': @@ -875,18 +818,6 @@ snapshots: '@ast-grep/napi-win32-ia32-msvc': 0.37.0 '@ast-grep/napi-win32-x64-msvc': 0.37.0 - '@clack/core@1.2.0': - dependencies: - fast-wrap-ansi: 0.1.6 - sisteransi: 1.0.5 - - '@clack/prompts@1.2.0': - dependencies: - '@clack/core': 1.2.0 - fast-string-width: 1.1.0 - fast-wrap-ansi: 0.1.6 - sisteransi: 1.0.5 - '@cspell/cspell-bundled-dicts@9.6.4': dependencies: '@cspell/dict-ada': 4.1.1 @@ -1125,10 +1056,6 @@ snapshots: tslib: 2.8.1 optional: true - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.3 - '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.8.1)(@emnapi/runtime@1.8.1)': dependencies: '@emnapi/core': 1.8.1 @@ -1266,8 +1193,6 @@ snapshots: array-timsort@1.0.3: {} - cac@7.0.0: {} - callsites@3.1.0: {} chalk-template@1.1.2: @@ -1276,8 +1201,6 @@ snapshots: chalk@5.6.2: {} - chownr@3.0.0: {} - clear-module@4.1.2: dependencies: parent-module: 2.0.0 @@ -1405,16 +1328,6 @@ snapshots: fast-json-stable-stringify@2.1.0: {} - fast-string-truncated-width@1.2.1: {} - - fast-string-width@1.1.0: - dependencies: - fast-string-truncated-width: 1.2.1 - - fast-wrap-ansi@0.1.6: - dependencies: - fast-string-width: 1.1.0 - fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -1442,12 +1355,6 @@ snapshots: is-safe-filename@0.1.1: {} - minipass@7.1.3: {} - - minizlib@3.1.0: - dependencies: - minipass: 7.1.3 - parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -1456,8 +1363,6 @@ snapshots: dependencies: callsites: 3.1.0 - picocolors@1.1.1: {} - picomatch@4.0.3: {} picomatch@4.0.4: {} @@ -1485,21 +1390,7 @@ snapshots: simple-git-hooks@2.13.1: {} -<<<<<<< HEAD skills-package-manager@0.7.0: {} -======= - sisteransi@1.0.5: {} - - skills-package-manager@0.6.2: - dependencies: - '@clack/prompts': 1.2.0 - cac: 7.0.0 - picocolors: 1.1.1 - semver: 7.7.3 - tar: 7.5.13 - yaml: 2.8.2 - zod: 4.3.6 ->>>>>>> b31e8c1 (feat: add rstack-skill-evaluator skill and setup skills-package-manager) smol-toml@1.6.0: {} @@ -1515,14 +1406,6 @@ snapshots: sort-object-keys: 2.1.0 tinyglobby: 0.2.15 - tar@7.5.13: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.3 - minizlib: 3.1.0 - yallist: 5.0.0 - tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) @@ -1540,8 +1423,4 @@ snapshots: xdg-basedir@5.1.0: {} - yallist@5.0.0: {} - yaml@2.8.2: {} - - zod@4.3.6: {} diff --git a/skills-lock.yaml b/skills-lock.yaml index bac9a03..b16c514 100644 --- a/skills-lock.yaml +++ b/skills-lock.yaml @@ -2,12 +2,6 @@ lockfileVersion: "0.1" installDir: .agents/skills linkTargets: [] skills: - pr-creator: - specifier: link:./skills/pr-creator - resolution: - type: link - path: skills/pr-creator - digest: sha256-e366298cb4661b58bd21df30457075692fa4100bbae47ba742589df1ec05a0a9 skill-creator: specifier: https://github.com/anthropics/skills.git#0f7c287eaf0d4fa511cb871bb55e2a7862251fbb&path:/skills/skill-creator resolution: @@ -21,4 +15,10 @@ skills: resolution: type: link path: dev-skills/rstack-skill-evaluator - digest: sha256-eb62efe87a93c0ceaad0830a62fc0f97e9256d3ab22474ce569727b034f48231 + digest: sha256-75d5a6eca2ceabb492a4680ae05ef7fdb5b124c39c5d2007ea34cb8a314d7478 + pr-creator: + specifier: link:./skills/pr-creator + resolution: + type: link + path: skills/pr-creator + digest: sha256-e366298cb4661b58bd21df30457075692fa4100bbae47ba742589df1ec05a0a9 From c1e4ed18ae13c425306641b661c2d6529c255771 Mon Sep 17 00:00:00 2001 From: sunyiteng Date: Thu, 16 Apr 2026 16:47:00 +0800 Subject: [PATCH 6/9] feat: add rstack-skill-evaluator skill and setup skills-package-manager --- package.json | 1 + skills-test/migrate-to-rsbuild/eval.json | 115 +++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 skills-test/migrate-to-rsbuild/eval.json diff --git a/package.json b/package.json index 8ad83d0..10e1804 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "pre-commit": "pnpm run lint:write" }, "devDependencies": { + "skills-package-manager": "^0.6.2", "@rslint/core": "^0.4.2", "@rstackjs/config": "workspace:*", "@types/node": "^24.10.9", diff --git a/skills-test/migrate-to-rsbuild/eval.json b/skills-test/migrate-to-rsbuild/eval.json new file mode 100644 index 0000000..f0cdf56 --- /dev/null +++ b/skills-test/migrate-to-rsbuild/eval.json @@ -0,0 +1,115 @@ +{ + "skill_name": "migrate-to-rsbuild", + "evals": [ + { + "id": 1, + "prompt": "We have an older React app at /Users/me/workspace/legacy-dashboard that still runs on webpack with webpack.config.js, webpack-dev-server, and a few resolve.alias entries for @app and @shared. Please migrate it to Rsbuild with minimal behavior changes, keep the app logic untouched, and tell me how you would verify the migration before removing old config.", + "expected_output": "A webpack-to-Rsbuild migration plan or implementation that preserves behavior, maps config carefully, and validates before cleanup.", + "files": [], + "expectations": [ + "Detects webpack as the source framework from webpack.config.js and webpack-dev-server cues", + "Follows smallest-change-first migration sequencing instead of large speculative rewrites", + "Includes explicit validation steps before removing old dependencies or config" + ] + }, + { + "id": 2, + "prompt": "I need to move a Vite React app to Rsbuild. The repo has vite.config.ts, a couple of define aliases, and some environment-specific proxy setup. Please handle the migration but do not change business logic unless you absolutely have to, and call out any Vite-specific config deltas I should review manually.", + "expected_output": "A Vite-to-Rsbuild migration that preserves runtime behavior and highlights Vite-specific mapping differences.", + "files": [], + "expectations": [ + "Identifies Vite as the source toolchain from vite.config.ts", + "Keeps application logic unchanged unless a change is clearly justified", + "Surfaces Vite-specific migration deltas rather than giving only a generic migration summary" + ] + }, + { + "id": 3, + "prompt": "Can you migrate this Create React App project to Rsbuild? It still uses react-scripts, a setupProxy.js file, and some custom env handling. I want a safe baseline migration first, and only after that should we talk about cleaning out the old CRA bits.", + "expected_output": "A CRA-to-Rsbuild migration that prioritizes a safe baseline and defers cleanup until verification passes.", + "files": [], + "expectations": [ + "Detects CRA from react-scripts and related project clues", + "Preserves the validate-before-cleanup rule", + "Summarizes follow-up cleanup only after the new setup is verified" + ] + }, + { + "id": 4, + "prompt": "This app is built with CRACO on top of CRA. We have craco.config.js with webpack aliases and dev server overrides. Please migrate it to Rsbuild, but stage the work so the baseline migration is green before trying to carry over every custom behavior.", + "expected_output": "A CRACO-aware migration plan that separates baseline Rsbuild setup from later custom-config mapping.", + "files": [], + "expectations": [ + "Recognizes CRACO instead of treating the app as plain CRA", + "Separates baseline migration from custom behavior migration", + "Uses an incremental validate-first migration sequence" + ] + }, + { + "id": 5, + "prompt": "Please move this Vue CLI application to Rsbuild. The project still has vue.config.js, uses @vue/cli-service, and has a few devServer and transpileDependencies tweaks. Keep current behavior as close as possible and explain how you would validate both dev and build flows.", + "expected_output": "A Vue CLI to Rsbuild migration with behavior-preserving mapping and clear development plus production verification guidance.", + "files": [], + "expectations": [ + "Identifies Vue CLI from vue.config.js or @vue/cli-service clues", + "Treats behavior preservation as a hard migration constraint", + "Includes both dev-server and production-build verification steps" + ] + }, + { + "id": 6, + "prompt": "I already converted most of this webpack project to Rsbuild, but I am not sure whether the migration is actually complete. Please review the remaining gaps, compare the old setup with the new one, and tell me if it is safe to remove the old webpack packages now.", + "expected_output": "A migration review that checks completeness, looks for missing mappings, and only approves cleanup after verification.", + "files": [], + "expectations": [ + "Treats this as migration validation rather than a fresh migration from scratch", + "Looks for missing config mappings between the old and new setups", + "Does not recommend cleanup until the migration is validated" + ] + }, + { + "id": 7, + "prompt": "My webpack setup has several custom loaders and plugin hooks, and some of them are pretty weird. Migrate the project to Rsbuild, but do not touch runtime application code unless it is truly necessary and you explain the reason clearly.", + "expected_output": "A careful migration that respects the no-business-logic-change boundary and treats custom config as something to map incrementally.", + "files": [], + "expectations": [ + "Avoids unnecessary runtime code edits", + "Treats unusual loaders and plugin hooks as custom behavior to map after baseline migration", + "Explains any unavoidable deviation instead of silently changing behavior" + ] + }, + { + "id": 8, + "prompt": "Please migrate this Vite project to Rsbuild and use the right migration guidance for the detected source framework. I do not want a generic bundler migration answer that ignores Vite-specific differences.", + "expected_output": "A framework-specific Vite migration path grounded in the right migration reference rather than a generic answer.", + "files": [], + "expectations": [ + "Selects the Vite-specific migration path", + "Avoids a one-size-fits-all bundler migration answer", + "Uses framework-specific guidance to drive the migration" + ] + }, + { + "id": 9, + "prompt": "I only care about getting to a working Rsbuild setup first. Please do not delete webpack packages, config files, or helper scripts until the new dev command starts cleanly and the production build passes.", + "expected_output": "A migration workflow that keeps old artifacts temporarily and sequences cleanup after successful validation.", + "files": [], + "expectations": [ + "Preserves old dependencies or config temporarily when needed", + "Explicitly validates dev and build before cleanup", + "Summarizes which obsolete artifacts can be removed afterward" + ] + }, + { + "id": 10, + "prompt": "Explain what Rsbuild is and list its main features compared with webpack.", + "expected_output": "This is a general product-explanation prompt, not a migration request, and it should serve as a near-miss negative eval for trigger quality.", + "files": [], + "expectations": [ + "Acts as a should-not-trigger style near-miss rather than a migration workflow request", + "Helps test whether the skill description is too broad", + "Shares adjacent vocabulary with migration tasks without actually asking for migration" + ] + } + ] +} From eef3cfe6aa35bf14d99edf695afcd9f57341c43e Mon Sep 17 00:00:00 2001 From: sunyiteng Date: Thu, 16 Apr 2026 16:47:58 +0800 Subject: [PATCH 7/9] chore: update --- skills-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills-lock.yaml b/skills-lock.yaml index b16c514..ffd1a09 100644 --- a/skills-lock.yaml +++ b/skills-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: "0.1" +lockfileVersion: '0.1' installDir: .agents/skills linkTargets: [] skills: From f7e2ab92b3873e42b68780b6a2534b62761db27d Mon Sep 17 00:00:00 2001 From: sunyiteng Date: Fri, 17 Apr 2026 12:04:32 +0800 Subject: [PATCH 8/9] chore: rebase onto main and fix lint --- cspell.config.cjs | 1 + package.json | 1 - skills-lock.yaml | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cspell.config.cjs b/cspell.config.cjs index 8661e4b..cc29547 100644 --- a/cspell.config.cjs +++ b/cspell.config.cjs @@ -17,6 +17,7 @@ module.exports = { 'node_modules', 'pnpm-lock.yaml', 'skills/**/scripts', + 'skills-test/**/iteration-*', ], flagWords: banWords, dictionaries: ['dictionary'], diff --git a/package.json b/package.json index 10e1804..8ad83d0 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ "pre-commit": "pnpm run lint:write" }, "devDependencies": { - "skills-package-manager": "^0.6.2", "@rslint/core": "^0.4.2", "@rstackjs/config": "workspace:*", "@types/node": "^24.10.9", diff --git a/skills-lock.yaml b/skills-lock.yaml index ffd1a09..b16c514 100644 --- a/skills-lock.yaml +++ b/skills-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '0.1' +lockfileVersion: "0.1" installDir: .agents/skills linkTargets: [] skills: From 44f2d512c60d7984d62c88662010d208600f57f2 Mon Sep 17 00:00:00 2001 From: sunyiteng Date: Fri, 17 Apr 2026 12:06:06 +0800 Subject: [PATCH 9/9] chore: update --- cspell.config.cjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cspell.config.cjs b/cspell.config.cjs index cc29547..8a0250c 100644 --- a/cspell.config.cjs +++ b/cspell.config.cjs @@ -17,7 +17,7 @@ module.exports = { 'node_modules', 'pnpm-lock.yaml', 'skills/**/scripts', - 'skills-test/**/iteration-*', + 'skills-test/**', ], flagWords: banWords, dictionaries: ['dictionary'],