1
0
mirror of synced 2026-05-20 09:16:31 +08:00

feat: add pack-skill script and update cook skill docs

This commit is contained in:
YunYouJun
2026-04-13 02:16:41 +08:00
parent 6459561957
commit 9ef712d6df
5 changed files with 175 additions and 64 deletions

View File

@@ -35,7 +35,8 @@
"sync": "cap sync",
"test": "vitest",
"test:coverage": "vitest run --coverage",
"typecheck": "nuxt typecheck"
"typecheck": "nuxt typecheck",
"pack:skill": "tsx scripts/pack-skill.ts"
},
"dependencies": {
"@capacitor/app": "7.1.0",

39
pnpm-lock.yaml generated
View File

@@ -126,7 +126,7 @@ importers:
version: 14.2.1(vue@3.5.32(typescript@5.9.3))
'@vueuse/nuxt':
specifier: ^14.2.1
version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(vue@3.5.32(typescript@5.9.3))
version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(vue@3.5.32(typescript@5.9.3))
'@yunlefun/vue':
specifier: ^0.1.1
version: 0.1.1
@@ -159,7 +159,7 @@ importers:
version: 16.4.0
nuxt:
specifier: ^4.4.2
version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2)
version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2)
pinia:
specifier: ^3.0.4
version: 3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3))
@@ -5787,6 +5787,7 @@ packages:
glob@10.5.0:
resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
hasBin: true
glob@11.1.0:
@@ -5801,7 +5802,7 @@ packages:
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
global-directory@4.0.1:
resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
@@ -6818,9 +6819,6 @@ packages:
resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==}
engines: {node: 18 || 20 || >=22}
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
minimatch@3.1.5:
resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
@@ -11462,7 +11460,7 @@ snapshots:
transitivePeerDependencies:
- magicast
'@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.29.0))(db0@0.3.4)(ioredis@5.10.0)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(rolldown@1.0.0-rc.15)(typescript@5.9.3)(xml2js@0.6.2)':
'@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(db0@0.3.4)(ioredis@5.10.0)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(rolldown@1.0.0-rc.15)(typescript@5.9.3)(xml2js@0.6.2)':
dependencies:
'@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
'@nuxt/devalue': 2.0.2
@@ -11481,7 +11479,7 @@ snapshots:
klona: 2.0.6
mocked-exports: 0.1.1
nitropack: 2.13.1(rolldown@1.0.0-rc.15)(xml2js@0.6.2)
nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2)
nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2)
nypm: 0.6.5
ohash: 2.0.11
pathe: 2.0.3
@@ -11494,8 +11492,6 @@ snapshots:
vue: 3.5.30(typescript@5.9.3)
vue-bundle-renderer: 2.2.0
vue-devtools-stub: 0.1.0
optionalDependencies:
'@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.29.0)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -11633,7 +11629,7 @@ snapshots:
- typescript
- vite
'@nuxt/vite-builder@4.4.2(ed8f69f4bc397461c3eb777376d258db)':
'@nuxt/vite-builder@4.4.2(4f877e3075e08f87d4bc5d371fcc3721)':
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@rollup/plugin-replace': 6.0.3(rollup@4.59.0)
@@ -11651,7 +11647,7 @@ snapshots:
magic-string: 0.30.21
mlly: 1.8.2
mocked-exports: 0.1.1
nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2)
nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2)
nypm: 0.6.5
pathe: 2.0.3
pkg-types: 2.3.0
@@ -11666,7 +11662,6 @@ snapshots:
vue: 3.5.30(typescript@5.9.3)
vue-bundle-renderer: 2.2.0
optionalDependencies:
'@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.29.0)
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0)
rolldown: 1.0.0-rc.15
rollup-plugin-visualizer: 6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0)
@@ -13655,13 +13650,13 @@ snapshots:
'@vueuse/metadata@14.2.1': {}
'@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(vue@3.5.32(typescript@5.9.3))':
'@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(vue@3.5.32(typescript@5.9.3))':
dependencies:
'@nuxt/kit': 4.3.1(magicast@0.5.2)
'@vueuse/core': 14.2.1(vue@3.5.32(typescript@5.9.3))
'@vueuse/metadata': 14.2.1
local-pkg: 1.1.2
nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2)
nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2)
vue: 3.5.32(typescript@5.9.3)
transitivePeerDependencies:
- magicast
@@ -15537,7 +15532,7 @@ snapshots:
dependencies:
foreground-child: 3.3.1
jackspeak: 4.1.1
minimatch: 10.1.1
minimatch: 10.2.4
minipass: 7.1.2
package-json-from-dist: 1.0.1
path-scurry: 2.0.1
@@ -15553,7 +15548,7 @@ snapshots:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.1.2
minimatch: 3.1.5
once: 1.4.0
path-is-absolute: 1.0.1
@@ -16781,10 +16776,6 @@ snapshots:
dependencies:
brace-expansion: 5.0.4
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.12
minimatch@3.1.5:
dependencies:
brace-expansion: 1.1.12
@@ -17056,16 +17047,16 @@ snapshots:
dependencies:
boolbase: 1.0.0
nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2):
nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2):
dependencies:
'@dxup/nuxt': 0.4.0(magicast@0.5.2)(typescript@5.9.3)
'@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2)
'@nuxt/devtools': 3.2.4(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.29.0))(db0@0.3.4)(ioredis@5.10.0)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(rolldown@1.0.0-rc.15)(typescript@5.9.3)(xml2js@0.6.2)
'@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(db0@0.3.4)(ioredis@5.10.0)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@parcel/watcher@2.5.1)(@types/node@25.5.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.3)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.15)(rollup@4.59.0))(rollup@4.59.0)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.99.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))(rolldown@1.0.0-rc.15)(typescript@5.9.3)(xml2js@0.6.2)
'@nuxt/schema': 4.4.2
'@nuxt/telemetry': 2.7.0(@nuxt/kit@4.4.2(magicast@0.5.2))
'@nuxt/vite-builder': 4.4.2(ed8f69f4bc397461c3eb777376d258db)
'@nuxt/vite-builder': 4.4.2(4f877e3075e08f87d4bc5d371fcc3721)
'@unhead/vue': 2.1.13(vue@3.5.30(typescript@5.9.3))
'@vue/shared': 3.5.30
c12: 3.3.3(magicast@0.5.2)

34
scripts/pack-skill.ts Normal file
View File

@@ -0,0 +1,34 @@
import { execSync } from 'node:child_process'
import { copyFileSync, mkdirSync, rmSync, statSync } from 'node:fs'
import { resolve } from 'node:path'
const root = resolve(import.meta.dirname, '..')
const skillName = 'cook'
const skillDir = resolve(root, 'skills', skillName)
const outputDir = resolve(root, 'dist')
const outputPath = resolve(outputDir, `${skillName}.zip`)
// 需要打包的数据文件(供 Fallback 使用CLI 不可用时 AI 直接读取)
const dataFiles = [
'recipe.csv',
'incompatible-foods.csv',
]
const dataSourceDir = resolve(root, 'app/data')
const dataTargetDir = resolve(skillDir, 'data')
// 1. 复制数据文件到 skills/cook/data/
mkdirSync(dataTargetDir, { recursive: true })
for (const file of dataFiles) {
copyFileSync(resolve(dataSourceDir, file), resolve(dataTargetDir, file))
}
// 2. 打包保留目录结构data/ 作为子目录)
mkdirSync(outputDir, { recursive: true })
execSync(`zip -r "${outputPath}" .`, { cwd: skillDir, stdio: 'ignore' })
// 3. 清理临时复制的数据目录
rmSync(dataTargetDir, { recursive: true, force: true })
const size = (statSync(outputPath).size / 1024).toFixed(1)
console.log(`✅ Packed skills/${skillName}/ → dist/${skillName}.zip (${size} KB)`)

View File

@@ -2,62 +2,142 @@
> 围绕「今天吃什么」的生活灵感助手,内置数百道中文家常菜谱数据库。
## 功能
## 功能介绍
- **食材找菜谱** —— 告诉 AI 你有什么食材,推荐能做的菜(附 B站视频教程
- **饮食规划** —— 一周菜单安排,荤素搭配,买一次菜用一周
- **食材知识** —— 食物相克查询、保存方法、食材替代方案
- **烹饪技巧** —— 新手友好的调味比例、翻车避坑指南
### 🥘 食材找菜谱
告诉 AI 你冰箱里有什么食材,它会从内置的菜谱数据库中检索匹配的菜谱,并附上 B 站视频教程链接。
- 支持模糊匹配和食材别名(如「西红柿 → 番茄」「泡面 → 方便面」)
- 标注匹配程度:「你有其中 X 样,还需要 XX」
- 可按厨具、难度、做法、标签进一步筛选
- 数据库匹配不足时,会补充通用家常菜建议
### 📅 饮食规划
帮你做一周菜单安排:
- 荤素搭配,主食轮换,不重样
- 食材复用——买一次菜用一周
- 工作日要快,周末可以花点时间
- 兼顾口味变化,不会连着几天吃同一类
### 🧠 食材知识
- **食物相克查询**:基于内置数据,理性说明影响程度,不传播谣言
- **保存方法**:什么该放冰箱、保鲜期多久、剩菜怎么处理
- **食材替代**:没有某个食材时的替代方案及口味差异
### 🍜 烹饪技巧
新手友好的实用指南:
- 调味基本比例
- 肉类腌制技巧
- 蔬菜炒制不出水
- 常见翻车避坑
### 🎯 适用场景
| 场景 | 关注点 |
| -------------- | -------------------------------- |
| 冰箱清理日 | 不浪费,用有限食材做出好吃的 |
| 新手第一次做饭 | 失败率低、步骤少、不需复杂调料 |
| 给家人朋友做饭 | 有面子但不难做 |
| 减脂/健康饮食 | 低油低盐、高蛋白,附热量参考 |
| 一人食 | 份量小、不浪费、做起来快 |
| 带便当 | 适合加热、不易变味、方便携带 |
| 宝宝辅食 | 新鲜安全、口味清淡、注意过敏风险 |
## 数据源
菜谱数据来自 [Cook食用手册](https://github.com/YunYouJun/cook) 项目,包含:
菜谱数据来自 [Cook食用手册](https://github.com/YunYouJun/cook) 开源项目,包含:
- 数百道家常菜谱含食材、难度、厨具、做法、B站视频链接
- 食物相克数据
- 食材/厨具分类
- **数百道家常菜谱**(含食材、难度、厨具、做法标签、B 站视频链接)
- **食物相克数据**(食物 A/B + 不宜同食原因)
- **食材/厨具分类**
数据通过 GitHub Raw URL 在线获取,无需本地项目
Skill 自带菜谱数据(`data/` 目录),离线即可使用;数据也可通过 GitHub Raw URL 在线获取最新版本
## 系统要求
- **支持工具**[CodeBuddy](https://www.codebuddy.ai)IDE 插件 / CLI、[Claude Code](https://docs.anthropic.com/en/docs/claude-code)
- **操作系统**macOS / Linux / Windows任何支持上述工具的系统
- **网络**可选——Skill 内置菜谱数据,离线可用;联网时可获取最新数据
- **本地依赖**无——Skill 本身是 Markdown 提示词 + CSV 数据,不需要安装任何运行时
## 安装
`cook/` 文件夹(包含 `SKILL.md`)放入你的 Skills 目录:
### 方式一:让 AI 帮你装
### CodeBuddy IDE
把下面这句话直接发给你的 AI 助手CodeBuddy / Claude Code它会自动完成下载、解压和安装
**方式一:手动复制**
> 帮我安装 cook skill从 https://github.com/YunYouJun/cook/releases/latest/download/cook.zip 下载并解压到用户级 skills 目录
```bash
# 项目级(仅当前项目生效)
cp -r cook/ <your-project>/.codebuddy/skills/cook/
### 方式二:手动安装
# 用户级(所有项目生效)
cp -r cook/ ~/.codebuddy/skills/cook/
1. 下载 [cook.zip](https://github.com/YunYouJun/cook/releases/latest/download/cook.zip)
2. 解压到对应工具的 Skills 目录:
| 工具 | 用户级 Skills 目录 |
| --------------------- | --------------------------- |
| CodeBuddy (IDE / CLI) | `~/.codebuddy/skills/cook/` |
| Claude Code | `~/.claude/skills/cook/` |
3. 确认目录下包含 `SKILL.md` 文件即安装成功
> **项目级安装**:也可将文件解压到项目根目录下的 `.codebuddy/skills/cook/`(或 `.claude/skills/cook/`),仅对当前项目生效。
### 验证安装
安装完成后,随便跟 AI 说一句:
> 冰箱里有鸡蛋和番茄,能做什么菜?
如果 AI 开始检索菜谱数据库并给出带视频链接的推荐,说明 Skill 已生效。
## 使用方法
安装后无需任何配置,直接用自然语言对话即可。以下是一些使用示例:
### 食材找菜谱
```
家里有土豆、鸡蛋和米,能做什么?
只有电饭煲,有什么简单的菜?
冰箱里有猪肉和白菜,想做个汤
```
**方式二IDE 导入**
### 饮食规划
设置页 → Skills → 点击「导入 Skill」 → 选择 `cook/` 文件夹
### Claude Code
```bash
# 项目级
cp -r cook/ <your-project>/.claude/skills/cook/
# 用户级
cp -r cook/ ~/.claude/skills/cook/
```
帮我安排下周的晚餐菜单,两个人吃
做个减脂餐一周计划
工作日的快手晚餐有什么推荐?
```
安装后可通过 `/cook` 斜杠命令手动调用,或由 AI 根据对话内容自动触发。
### 食材知识
## 兼容性
```
虾和柠檬能一起吃吗?
牛肉怎么保存比较好?
没有料酒可以用什么代替?
```
| 工具 | Skills 路径 | 状态 |
| -------------------- | -------------------- | ---- |
| CodeBuddy IDE | `.codebuddy/skills/` | ✅ |
| CodeBuddy Code (CLI) | `.codebuddy/skills/` | ✅ |
| Claude Code | `.claude/skills/` | ✅ |
### 烹饪技巧
```
怎么炒青菜不出水?
排骨怎么焯水?
第一次用空气炸锅,有什么注意事项?
```
## 注意事项
- **不替代专业建议**:涉及婴幼儿、孕妇、过敏体质等特殊人群时,请咨询专业医师或营养师
- **食物相克信息**:基于公开数据整理,会理性说明影响程度,不过度恐慌
- **网络可选**Skill 内置菜谱数据,离线即可使用;联网时 CLI 或 Fallback 可获取最新数据
- **数据更新**:重新下载安装 Skill 即可获取最新菜谱数据
## 许可

View File

@@ -32,8 +32,9 @@ metadata:
| 食物相克 | `https://raw.githubusercontent.com/YunYouJun/cook/main/app/data/incompatible-foods.csv` | CSV |
| 食材/厨具分类 | `https://raw.githubusercontent.com/YunYouJun/cook/main/app/data/food.ts` | TypeScript |
> **本地优先**:如果在 Cook 项目本地使用,直接读取 `app/data/` 目录下的文件,无需网络请求
> **独立使用**:通过上述 URL 在线获取数据即可,不依赖本地项目
> **Skill 内置数据**:本 Skill 自带 `data/recipe.csv` 和 `data/incompatible-foods.csv`Fallback 时优先读取,无需网络。
> **Cook 项目本地**:如果在 Cook 项目内使用,直接读取 `app/data/` 目录下的文件
> **在线获取**:以上均不可用时,通过 GitHub Raw URL 获取。
### CSV 字段说明
@@ -77,7 +78,11 @@ npx @yunyoujun/cook search --stuff "鸡蛋,番茄" --json
#### 方式三FallbackCLI 不可用时)
直接读取 `app/data/recipe.csv` 或通过 GitHub Raw URL 获取,手动筛选
按以下优先级读取数据,手动筛选
1. **Skill 内置数据**(推荐):读取本 Skill 目录下的 `data/recipe.csv``data/incompatible-foods.csv`
2. **Cook 项目本地数据**:读取 `app/data/recipe.csv`(仅在 Cook 项目内有效)
3. **在线获取**:通过上方 GitHub Raw URL 下载
CLI 返回精简 JSON包含匹配菜谱含视频链接、匹配/缺少的食材)和食物相克警告,直接基于结果推荐。支持食材别名(如 西红柿→番茄、泡面→方便面)。