@yottameta/yotta-skills 0.23.1 → 0.23.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/SKILL.md +1 -1
- package/bin/yotta-skills.js +4 -22
- package/install.sh +215 -57
- package/lib/copy-tree.js +38 -0
- package/package.json +1 -1
- package/references/skill-list.md +28 -28
- package/scan-policy.json +26 -26
- package/scripts/yotta-skills-mcp.py +1 -1
- package/skill-manifest.json +1 -1
- package/skills.json +28 -28
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
## v0.23.3 (2026-10-01)
|
|
2
|
+
|
|
3
|
+
- 安装器卫生批次:`install.sh` 统一(未知参数报错 exit 2、`--help` / `--version`、残留清理白名单);`skills.json` 清单 pin 同步 27 项。
|
|
4
|
+
|
|
5
|
+
## v0.23.2 (2026-10-01)
|
|
6
|
+
|
|
7
|
+
- 修复家族安装管线嵌套载荷丢失:复制原语的顶层跳过名单(`package.json` / `bin` / `node_modules` / `.git`)此前按条目名逐层生效,会把技能包内嵌套的同名载荷(如元造 `template/package.json`、`template/bin/install.js`)一并跳过——家族安装 / 更新元造后,其脚手架自检会失败(缺必需文件)。现改为仅顶层生效,与元造 0.1.3 的安装器修复对齐。
|
|
8
|
+
- 新增 `lib/copy-tree.js`(单一复制原语)与回归测试:顶层同名跳过、嵌套同名保留、缓存类(`__pycache__` / `.pytest_cache` / `.mypy_cache` / `*.pyc` / `*.pyo`)任意层级清理;家族管线集成回归同步补齐。
|
|
9
|
+
- 清单同步:`skills.json` / `references/skill-list.md` 更新元造 0.1.4、元案 0.1.1。
|
|
10
|
+
|
|
1
11
|
## v0.23.1 (2026-10-01)
|
|
2
12
|
|
|
3
13
|
- 文档:环境变量表补齐 `YOTTA_SKILLS_REGISTRY_FILE` / `YOTTA_SKILLS_USAGE_FILE` / `YOTTA_PROVIDER_HOME` 三项,并新增「隔离环境:三个状态文件成组导出」小节(bash / PowerShell 示例)——测试、CI 与多 agent 场景需三件成组导出,避免读写宿主真实状态。
|
package/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yotta-skills
|
|
3
|
-
version: 0.23.
|
|
3
|
+
version: 0.23.3
|
|
4
4
|
description: 元阁 -- 元阁全家技能的总编排策划 + 编排路由 + 一键安装器 + 技能盘点 + 运行时 hook 适配。路由层:--route / route_request 按需求摘要给出候选组合、调用顺序、角色、置信度、依据、已装/缺失状态与安装命令,只建议不自动安装;非元阁家族已装技能按 frontmatter description 机械匹配作并列候选(标注来源与未扫描状态,只读不自动调用);M1 记忆裁决层:usage enable/mark 本地结构化记录 + decide-memory / MCP decide_memory 输出 promote / hold / demote 只读建议(需授权 provider;只建议不删除、不自动写元忆);策划层:按场景给出「该组合哪几个元技能、组合强在哪、怎么组合使用(安装与调用均由用户确认后执行)」;安装层:一条命令把 YottaMeta 已发布的全部 yotta-* 技能装进指定智能体或目录(默认 --pin 锁死清单精确版本);盘点层:--inventory / --reindex 扫描本机已装技能生成/更新注册表,新装技能自动被发现(install/update 后自动 re-index,会话开工只建议跑本地 --reindex;更新检查走手动 --check 或后台 --check --scheduled);运行时适配层:hook capabilities / evaluate / bind / unbind 按宿主能力矩阵执行六个统一事件并留证降级,元信 before_install 已接入安装管线;自包含零依赖,不依赖任何元技能;MCP 按需加载且需用户确认后写入配置(可选:list_installed_skills/describe_skill/reindex/route_request/decide_memory,不常驻,未加载降级 CLI)。支持 --list 清单 / --route 路由 / usage 使用记录 / decide-memory 记忆裁决 / install / update / update --check(只读检查)/ update --check --scheduled(后台周检)/ update --auto(家族自动更新)/ hook 适配 / --inventory / --reindex / --dry-run 预览 / --pin(默认)/ --range。触发:需要批量安装或更新元阁全家技能、按场景组合多个元技能、路由或判断该用哪些技能、判断哪些技能值得长期记忆、查看或记录技能使用信号、盘点或查看本机已装技能、重扫技能注册表、给某个智能体或目录一次性铺齐 yotta-* 技能、评估宿主 hook 能力、预览安装清单、锁版本安装、或用户说 元阁/装全家/一次装齐/yotta-skills/install-all/更新全家/检查更新/自动更新/hook 适配/该用哪个技能/路由技能/记忆裁决/技能该不该记住/盘点技能/查看已装技能 等。边界(Do NOT trigger):只做「组合策划 + 静态路由建议 + M1 记忆裁决只读建议 + 清单 + 下载 + 落位 + 汇总 + 盘点 + re-index + hook 适配」,不含技能本体、不做技能内容开发、不 -g 污染全局、不自动安装缺失技能、不静默写宿主配置或全局记忆、不自动删除技能或记忆;家族安装先自举或调用元信装前门禁,DO NOT INSTALL 阻断,非元阁家族包不自动安装。
|
|
5
5
|
license: MIT
|
|
6
6
|
metadata:
|
package/bin/yotta-skills.js
CHANGED
|
@@ -42,9 +42,10 @@ const m1FeaturesLib = require('../lib/m1-features');
|
|
|
42
42
|
const routeFeaturesLib = require('../lib/route-features');
|
|
43
43
|
const routeDynamicLib = require('../lib/route-dynamic');
|
|
44
44
|
const { createInstaller, isSafeTarEntry } = require('../lib/install-pipeline');
|
|
45
|
+
const { COPY_SKIP, copyDir } = require('../lib/copy-tree');
|
|
45
46
|
|
|
46
47
|
const PKG_ROOT = path.join(__dirname, '..');
|
|
47
|
-
let VERSION = '0.23.
|
|
48
|
+
let VERSION = '0.23.3';
|
|
48
49
|
try { VERSION = require(path.join(PKG_ROOT, 'package.json')).version; } catch (_) { /* keep fallback */ }
|
|
49
50
|
|
|
50
51
|
function loadManifest() {
|
|
@@ -513,24 +514,7 @@ async function runUpdateAuto(opts, dest) {
|
|
|
513
514
|
return { code: failed2 > 0 ? autoExitCode : 0 };
|
|
514
515
|
}
|
|
515
516
|
|
|
516
|
-
|
|
517
|
-
if (name === '__pycache__' || name === '.pytest_cache' || name === '.mypy_cache') return true;
|
|
518
|
-
if (isFile && (name.endsWith('.pyc') || name.endsWith('.pyo'))) return true;
|
|
519
|
-
return false;
|
|
520
|
-
}
|
|
521
|
-
function copyDir(src, dst, skip) {
|
|
522
|
-
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
523
|
-
if (skip.has(entry.name) || shouldSkip(entry.name, entry.isFile())) continue;
|
|
524
|
-
const s = path.join(src, entry.name);
|
|
525
|
-
const d = path.join(dst, entry.name);
|
|
526
|
-
if (entry.isDirectory()) {
|
|
527
|
-
fs.mkdirSync(d, { recursive: true });
|
|
528
|
-
copyDir(s, d, skip);
|
|
529
|
-
} else if (entry.isFile()) {
|
|
530
|
-
fs.copyFileSync(s, d);
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
}
|
|
517
|
+
// 复制原语(顶层跳过口径 / 缓存清理)统一在 lib/copy-tree.js,此处不再保留第二份实现。
|
|
534
518
|
|
|
535
519
|
function resolveTargetDir(opts) {
|
|
536
520
|
if (opts.dir) return path.resolve(opts.dir);
|
|
@@ -659,8 +643,6 @@ function extractTarball(tarball, extractDir) {
|
|
|
659
643
|
return { pkgDir };
|
|
660
644
|
}
|
|
661
645
|
|
|
662
|
-
const COPY_SKIP = new Set(['package.json', 'bin', 'node_modules', '.git', '__pycache__']);
|
|
663
|
-
|
|
664
646
|
function ensureGate(context) {
|
|
665
647
|
const { skill, extracted, dest, opts } = context;
|
|
666
648
|
const current = findVerifyEngine(dest, opts);
|
|
@@ -716,7 +698,7 @@ function ensureGate(context) {
|
|
|
716
698
|
const installOne = createInstaller({
|
|
717
699
|
runNpmPack,
|
|
718
700
|
extractTarball,
|
|
719
|
-
copyDir: (src, dst) => copyDir(src, dst, COPY_SKIP),
|
|
701
|
+
copyDir: (src, dst) => copyDir(src, dst, COPY_SKIP, true),
|
|
720
702
|
readInstalledVersion,
|
|
721
703
|
ensureGate,
|
|
722
704
|
scanTarget,
|
package/install.sh
CHANGED
|
@@ -1,31 +1,30 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# yotta-skills
|
|
3
|
-
# 用途:把「元阁安装器技能」本身装进智能体/目录(它自带 SKILL.md,让代理能调用元阁)。
|
|
4
|
-
# 注意:这**不是**把 27 个 yotta-* 技能一并装齐——装全家需再跑
|
|
5
|
-
# `node bin/yotta-skills.js install --agent <name>`(或 --dir <path>)。
|
|
2
|
+
# yotta-skills 多智能体安装脚本(YottaSkills)
|
|
6
3
|
# 用法:
|
|
7
|
-
# bash install.sh --agent <name> #
|
|
4
|
+
# bash install.sh --agent <name> # 按智能体默认用户级目录安装
|
|
8
5
|
# bash install.sh --dir <path> # 装到指定目录(用户改过目录的智能体)
|
|
9
6
|
# bash install.sh -g # 装到全部已知智能体用户级目录
|
|
10
|
-
# bash install.sh
|
|
7
|
+
# bash install.sh # 检测并安装到已存在的项目级目录
|
|
11
8
|
# bash install.sh --list # 列出智能体 -> 默认目录
|
|
9
|
+
# bash install.sh --dry-run # 只显示将写入的目标,不写文件
|
|
10
|
+
# bash install.sh --version # 显示版本
|
|
11
|
+
# bash install.sh --help # 显示帮助
|
|
12
|
+
# 退出码: 0 成功 / 1 安装失败 / 2 用法错误 / 4 目标错误
|
|
12
13
|
set -euo pipefail
|
|
13
14
|
|
|
14
15
|
SKILL_NAME="yotta-skills"
|
|
15
16
|
SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
17
|
+
_IS_WINDOWS=0
|
|
16
18
|
case "$(uname -s)" in
|
|
17
19
|
MINGW*|MSYS*)
|
|
18
20
|
SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -W)"
|
|
21
|
+
_IS_WINDOWS=1
|
|
19
22
|
;;
|
|
23
|
+
CYGWIN*) _IS_WINDOWS=1 ;;
|
|
20
24
|
esac
|
|
21
25
|
|
|
22
26
|
# 智能体 -> 用户级默认目录(--agent 装到第一个)
|
|
23
27
|
# .agents/skills 并非通用目录:OpenCode / Cursor / Cline / Amp / Kimi / Gemini CLI / GitHub Copilot 读取。
|
|
24
|
-
# 判断当前环境:Windows Git Bash 用 %USERPROFILE%,Unix 用 ~
|
|
25
|
-
_IS_WINDOWS=0
|
|
26
|
-
case "$(uname -s)" in
|
|
27
|
-
MINGW*|MSYS*|CYGWIN*) _IS_WINDOWS=1 ;;
|
|
28
|
-
esac
|
|
29
28
|
dirs_for() {
|
|
30
29
|
case "$1" in
|
|
31
30
|
claude) echo ".claude/skills" ;;
|
|
@@ -63,46 +62,153 @@ resolve_user() {
|
|
|
63
62
|
esac
|
|
64
63
|
}
|
|
65
64
|
|
|
66
|
-
|
|
67
|
-
local
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
""|"/") echo "安装失败:拒绝不安全的目标目录:'$base'" >&2; return 1 ;;
|
|
72
|
-
esac
|
|
73
|
-
if [ -L "$base" ]; then
|
|
74
|
-
echo "安装失败:目标目录是符号链接,拒绝跟随:$base" >&2; return 1
|
|
65
|
+
skill_version() {
|
|
66
|
+
local pkg="$SOURCE_DIR/package.json" v=""
|
|
67
|
+
[ -f "$pkg" ] || return 0
|
|
68
|
+
if command -v awk >/dev/null 2>&1; then
|
|
69
|
+
v="$(awk -F'"' '{for (i=1;i<=NF;i++) if ($i=="version") {print $(i+2); exit}}' "$pkg" 2>/dev/null || true)"
|
|
75
70
|
fi
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if [ -L "$dest" ]; then
|
|
79
|
-
echo "安装失败:技能目录是符号链接,拒绝跟随:$dest" >&2; return 1
|
|
71
|
+
if [ -z "$v" ]; then
|
|
72
|
+
v="$(sed -n 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$pkg" 2>/dev/null | head -n 1 || true)"
|
|
80
73
|
fi
|
|
81
|
-
|
|
82
|
-
|
|
74
|
+
printf '%s' "$v"
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
usage() {
|
|
78
|
+
echo "$SKILL_NAME 安装脚本(YottaSkills)"
|
|
79
|
+
echo ""
|
|
80
|
+
echo "用法:"
|
|
81
|
+
echo " bash install.sh --agent <name> 按智能体默认用户级目录安装(推荐)"
|
|
82
|
+
echo " bash install.sh --dir <path> 装到指定目录(用户改了目录的智能体)"
|
|
83
|
+
echo " bash install.sh -g 安装到全部已知智能体用户级目录"
|
|
84
|
+
echo " bash install.sh 安装到检测到的项目级目录"
|
|
85
|
+
echo ""
|
|
86
|
+
echo "参数:"
|
|
87
|
+
echo " --agent <name> 智能体键名,见 --list"
|
|
88
|
+
echo " --dir <path> 自定义技能目录"
|
|
89
|
+
echo " -g, --global 安装到全部已知用户级目录"
|
|
90
|
+
echo " --list, -l 列出支持的智能体目录"
|
|
91
|
+
echo " --dry-run 只显示将写入的目标,不写文件"
|
|
92
|
+
echo " --version, -v 显示版本"
|
|
93
|
+
echo " --help, -h 显示帮助"
|
|
94
|
+
echo " --yes, -y 兼容参数(-g 不再强制要求)"
|
|
95
|
+
echo ""
|
|
96
|
+
echo "退出码: 0 成功 / 1 安装失败 / 2 用法错误 / 4 目标错误"
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
resolve_path() {
|
|
100
|
+
# 与 SOURCE_DIR 同一风格(Windows Git Bash 用 pwd -W),供路径包含判断使用
|
|
101
|
+
local p="$1"
|
|
102
|
+
if [ "$_IS_WINDOWS" = "1" ]; then
|
|
103
|
+
(cd "$p" 2>/dev/null && pwd -W)
|
|
104
|
+
else
|
|
105
|
+
(cd "$p" 2>/dev/null && pwd -P)
|
|
106
|
+
fi
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
assert_safe_target() {
|
|
110
|
+
local dest="$1" src_real dest_real parent
|
|
111
|
+
src_real="$(resolve_path "$SOURCE_DIR")" || return 0
|
|
112
|
+
if [ -d "$dest" ]; then
|
|
113
|
+
dest_real="$(resolve_path "$dest")" || return 0
|
|
114
|
+
else
|
|
115
|
+
parent="$(dirname "$dest")"
|
|
116
|
+
dest_real="$(resolve_path "$parent")" || return 0
|
|
117
|
+
dest_real="$dest_real/$(basename "$dest")"
|
|
83
118
|
fi
|
|
84
|
-
|
|
119
|
+
case "$dest_real" in
|
|
120
|
+
"$src_real"|"$src_real"/*)
|
|
121
|
+
echo "安装失败:目标目录不能在技能源目录内(防止自装自毁)" >&2
|
|
122
|
+
return 1
|
|
123
|
+
;;
|
|
124
|
+
esac
|
|
125
|
+
return 0
|
|
126
|
+
}
|
|
85
127
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
128
|
+
# 清理旧版安装残留(fail-closed 白名单):仅在目标目录已存在且含 SKILL.md 时触发;
|
|
129
|
+
# 只删顶层开发项 + 任意层级缓存;不整目录删除、不跟随符号链接。
|
|
130
|
+
DEV_SKIP="package.json package-lock.json bin lib test .github .git .gitignore .npmignore .gitattributes .yotta .tmp install.sh node_modules"
|
|
131
|
+
clean_residue() {
|
|
132
|
+
local dest="$1" name p
|
|
133
|
+
[ -d "$dest" ] || return 0
|
|
134
|
+
[ -f "$dest/SKILL.md" ] || return 0
|
|
135
|
+
for name in $DEV_SKIP; do
|
|
136
|
+
p="$dest/$name"
|
|
137
|
+
[ -L "$p" ] && continue
|
|
138
|
+
if [ -e "$p" ]; then
|
|
139
|
+
rm -rf -- "$p"
|
|
140
|
+
echo "已清理残留: $name"
|
|
90
141
|
fi
|
|
91
142
|
done
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
143
|
+
find "$dest" -type d \( -name '__pycache__' -o -name '.pytest_cache' -o -name '.mypy_cache' \) -prune -exec rm -rf -- {} + 2>/dev/null || true
|
|
144
|
+
find "$dest" -type f \( -name '*.pyc' -o -name '*.pyo' \) -delete 2>/dev/null || true
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
# 复制技能本体:顶层跳过开发件与运行时不相关目录(嵌套同名保留);
|
|
148
|
+
# 任意层级跳过缓存(__pycache__ / .pytest_cache / .mypy_cache / *.pyc / *.pyo)。
|
|
149
|
+
copy_tree() {
|
|
150
|
+
local src="$1" dst="$2" top="$3" entry base
|
|
151
|
+
mkdir -p "$dst"
|
|
152
|
+
for entry in "$src"/* "$src"/.[!.]* "$src"/..?*; do
|
|
153
|
+
[ -e "$entry" ] || [ -L "$entry" ] || continue
|
|
154
|
+
base="$(basename "$entry")"
|
|
155
|
+
case "$base" in
|
|
156
|
+
__pycache__|.pytest_cache|.mypy_cache) continue ;;
|
|
157
|
+
esac
|
|
158
|
+
if [ "$top" = "1" ]; then
|
|
159
|
+
case " $DEV_SKIP " in
|
|
160
|
+
*" $base "*) continue ;;
|
|
161
|
+
esac
|
|
162
|
+
fi
|
|
163
|
+
if [ -d "$entry" ] && [ ! -L "$entry" ]; then
|
|
164
|
+
copy_tree "$entry" "$dst/$base" 0 || return 1
|
|
165
|
+
else
|
|
166
|
+
case "$base" in
|
|
167
|
+
*.pyc|*.pyo) continue ;;
|
|
168
|
+
esac
|
|
169
|
+
cp -RP "$entry" "$dst/$base" || return 1
|
|
95
170
|
fi
|
|
96
171
|
done
|
|
97
|
-
|
|
98
|
-
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
install_to() {
|
|
175
|
+
local base="$1" dry="$2" dest
|
|
176
|
+
dest="$base/$SKILL_NAME"
|
|
177
|
+
if [ -L "$base" ]; then
|
|
178
|
+
echo "安装失败:目标目录是符号链接,拒绝跟随:$base" >&2
|
|
179
|
+
return 1
|
|
180
|
+
fi
|
|
181
|
+
if [ -e "$base" ] && [ ! -d "$base" ]; then
|
|
182
|
+
echo "安装失败:目标路径已存在且不是目录:$base" >&2
|
|
183
|
+
return 1
|
|
184
|
+
fi
|
|
185
|
+
if [ -L "$dest" ]; then
|
|
186
|
+
echo "安装失败:技能目录是符号链接,拒绝跟随:$dest" >&2
|
|
187
|
+
return 1
|
|
188
|
+
fi
|
|
189
|
+
if [ -e "$dest" ] && [ ! -d "$dest" ]; then
|
|
190
|
+
echo "安装失败:技能路径已存在且不是目录:$dest" >&2
|
|
191
|
+
return 1
|
|
192
|
+
fi
|
|
193
|
+
assert_safe_target "$dest" || return 1
|
|
194
|
+
if [ "$dry" = "1" ]; then
|
|
195
|
+
echo "[dry-run] 将安装到 -> $dest"
|
|
196
|
+
return 0
|
|
197
|
+
fi
|
|
198
|
+
clean_residue "$dest"
|
|
199
|
+
mkdir -p "$dest" || return 1
|
|
200
|
+
copy_tree "$SOURCE_DIR" "$dest" 1 || return 1
|
|
201
|
+
if [ ! -f "$dest/SKILL.md" ]; then
|
|
202
|
+
echo "安装失败:结果缺少 SKILL.md" >&2
|
|
203
|
+
return 1
|
|
204
|
+
fi
|
|
99
205
|
echo "installed -> $dest"
|
|
100
206
|
}
|
|
101
207
|
|
|
102
208
|
list() {
|
|
103
209
|
echo "智能体 -> 默认技能目录(--agent <name> 装到第一个,用户级):"
|
|
210
|
+
local a dirs first
|
|
104
211
|
for a in claude cursor codex gemini goose amp opencode windsurf workbuddy kiro trae trae-cn qwen comate codebuddy kimi agents; do
|
|
105
|
-
local dirs first
|
|
106
212
|
dirs="$(dirs_for "$a")"
|
|
107
213
|
first="${dirs%% *}"
|
|
108
214
|
case "$first" in
|
|
@@ -121,49 +227,101 @@ list() {
|
|
|
121
227
|
}
|
|
122
228
|
|
|
123
229
|
main() {
|
|
124
|
-
local agent="" dir="" global=0 show_list=0
|
|
230
|
+
local agent="" dir="" global=0 show_list=0 show_help=0 show_version=0 dry=0
|
|
125
231
|
while [ $# -gt 0 ]; do
|
|
126
232
|
case "$1" in
|
|
127
|
-
--
|
|
128
|
-
--
|
|
129
|
-
-g|--global) global=1 ;;
|
|
130
|
-
-y|--yes) assume_yes=1 ;;
|
|
233
|
+
--help|-h) show_help=1 ;;
|
|
234
|
+
--version|-v) show_version=1 ;;
|
|
131
235
|
--list|-l) show_list=1 ;;
|
|
236
|
+
-g|--global) global=1 ;;
|
|
237
|
+
--dry-run) dry=1 ;;
|
|
238
|
+
--yes|-y) : ;;
|
|
239
|
+
--agent)
|
|
240
|
+
shift
|
|
241
|
+
if [ $# -eq 0 ] || [ -z "${1:-}" ]; then
|
|
242
|
+
echo "用法错误: --agent 需要一个非空名称" >&2
|
|
243
|
+
exit 2
|
|
244
|
+
fi
|
|
245
|
+
agent="$1"
|
|
246
|
+
;;
|
|
247
|
+
--dir)
|
|
248
|
+
shift
|
|
249
|
+
if [ $# -eq 0 ] || [ -z "${1:-}" ]; then
|
|
250
|
+
echo "用法错误: --dir 需要一个非空路径" >&2
|
|
251
|
+
exit 2
|
|
252
|
+
fi
|
|
253
|
+
dir="$1"
|
|
254
|
+
;;
|
|
132
255
|
*) echo "未知参数: $1" >&2; exit 2 ;;
|
|
133
256
|
esac
|
|
134
257
|
shift
|
|
135
258
|
done
|
|
136
259
|
|
|
137
|
-
if [ "$
|
|
138
|
-
if [
|
|
260
|
+
if [ "$show_help" = "1" ]; then usage; return 0; fi
|
|
261
|
+
if [ "$show_version" = "1" ]; then
|
|
262
|
+
local v
|
|
263
|
+
v="$(skill_version)"
|
|
264
|
+
if [ -z "$v" ]; then
|
|
265
|
+
echo "$SKILL_NAME 版本未知(未找到 package.json)" >&2
|
|
266
|
+
exit 1
|
|
267
|
+
fi
|
|
268
|
+
echo "$SKILL_NAME v$v"
|
|
269
|
+
return 0
|
|
270
|
+
fi
|
|
271
|
+
if [ "$show_list" = "1" ]; then list; return 0; fi
|
|
272
|
+
|
|
273
|
+
local selected=0
|
|
274
|
+
[ -n "$dir" ] && selected=$((selected + 1))
|
|
275
|
+
[ -n "$agent" ] && selected=$((selected + 1))
|
|
276
|
+
[ "$global" = "1" ] && selected=$((selected + 1))
|
|
277
|
+
if [ "$selected" -gt 1 ]; then
|
|
278
|
+
echo "用法错误: --dir / --agent / -g 只能选一个" >&2
|
|
279
|
+
exit 2
|
|
280
|
+
fi
|
|
281
|
+
|
|
282
|
+
if [ -n "$dir" ]; then
|
|
283
|
+
install_to "$dir" "$dry" || exit 1
|
|
284
|
+
[ "$dry" = "1" ] || echo "完成。"
|
|
285
|
+
return 0
|
|
286
|
+
fi
|
|
139
287
|
if [ -n "$agent" ]; then
|
|
140
288
|
local dirs first
|
|
141
289
|
if ! dirs="$(dirs_for "$agent")"; then
|
|
142
|
-
echo "未收录智能体: $agent
|
|
290
|
+
echo "未收录智能体: $agent。可用 --list 查看,或 --dir <路径> 指定。" >&2
|
|
291
|
+
exit 2
|
|
143
292
|
fi
|
|
144
293
|
first="${dirs%% *}"
|
|
145
|
-
install_to "$(resolve_user "$first")"
|
|
294
|
+
install_to "$(resolve_user "$first")" "$dry" || exit 1
|
|
295
|
+
[ "$dry" = "1" ] || echo "完成。"
|
|
296
|
+
return 0
|
|
146
297
|
fi
|
|
147
298
|
if [ "$global" = "1" ]; then
|
|
148
|
-
|
|
149
|
-
echo "批量安装到全部已知智能体目录会写入多个宿主目录,需要显式确认:请加 --yes(或用 --agent / --dir 指定单一目标)。" >&2
|
|
150
|
-
exit 2
|
|
151
|
-
fi
|
|
152
|
-
echo "安装到全部已知智能体用户级目录..."
|
|
153
|
-
local dirs rel
|
|
299
|
+
local a dirs rel seen=" "
|
|
154
300
|
for a in claude cursor codex gemini goose amp opencode windsurf workbuddy kiro trae trae-cn qwen comate codebuddy kimi agents; do
|
|
155
|
-
dirs="$(dirs_for "$a")"
|
|
156
|
-
for rel in $dirs; do
|
|
301
|
+
dirs="$(dirs_for "$a")" || continue
|
|
302
|
+
for rel in $dirs; do
|
|
303
|
+
case "$seen" in
|
|
304
|
+
*" $rel "*) continue ;;
|
|
305
|
+
esac
|
|
306
|
+
seen="$seen$rel "
|
|
307
|
+
install_to "$(resolve_user "$rel")" "$dry" || exit 1
|
|
308
|
+
done
|
|
157
309
|
done
|
|
158
|
-
echo "完成。"
|
|
310
|
+
[ "$dry" = "1" ] || echo "完成。"
|
|
311
|
+
return 0
|
|
159
312
|
fi
|
|
160
313
|
local installed=0 d
|
|
161
314
|
for d in .claude/skills .cursor/skills .codex/skills .config/goose/skills .config/agents/skills .opencode/skills .codeium/windsurf/skills .workbuddy/skills .kiro/skills .traecli/skills .gemini/skills .trae-cn/skills .qwen/skills .comate/skills .codebuddy/skills .kimi/skills .agents/skills; do
|
|
162
|
-
if [ -d "$d" ]; then
|
|
315
|
+
if [ -d "$d" ]; then
|
|
316
|
+
install_to "$d" "$dry" || exit 1
|
|
317
|
+
installed=1
|
|
318
|
+
fi
|
|
163
319
|
done
|
|
164
320
|
if [ "$installed" = "0" ]; then
|
|
165
|
-
echo "未检测到项目级智能体目录。可用 --agent <name>
|
|
321
|
+
echo "目标错误: 未检测到项目级智能体目录。可用 --agent <name> 装到用户级,或用 --dir <路径> 指定目录。" >&2
|
|
322
|
+
exit 4
|
|
166
323
|
fi
|
|
324
|
+
[ "$dry" = "1" ] || echo "完成。"
|
|
167
325
|
}
|
|
168
326
|
|
|
169
327
|
main "$@"
|
package/lib/copy-tree.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 安装落位的复制原语(单一真源)。
|
|
5
|
+
*
|
|
6
|
+
* 口径(2026-10-01,与元造 0.1.3 的安装器修复对齐):
|
|
7
|
+
* - 顶层开发文件 / 目录(package.json / bin / node_modules / .git)只在**安装包顶层**跳过;
|
|
8
|
+
* 技能包内嵌套的同名载荷(如 template/package.json、template/bin/install.js)必须保留。
|
|
9
|
+
* - 缓存 / 编译产物(__pycache__ / .pytest_cache / .mypy_cache / *.pyc / *.pyo)任意层级都跳过。
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const fs = require('fs');
|
|
13
|
+
const path = require('path');
|
|
14
|
+
|
|
15
|
+
const COPY_SKIP = new Set(['package.json', 'bin', 'node_modules', '.git']);
|
|
16
|
+
|
|
17
|
+
function shouldSkipCache(name, isFile) {
|
|
18
|
+
if (name === '__pycache__' || name === '.pytest_cache' || name === '.mypy_cache') return true;
|
|
19
|
+
if (isFile && (name.endsWith('.pyc') || name.endsWith('.pyo'))) return true;
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function copyDir(src, dst, skip, topLevel) {
|
|
24
|
+
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
25
|
+
if (topLevel && skip.has(entry.name)) continue;
|
|
26
|
+
if (shouldSkipCache(entry.name, entry.isFile())) continue;
|
|
27
|
+
const s = path.join(src, entry.name);
|
|
28
|
+
const d = path.join(dst, entry.name);
|
|
29
|
+
if (entry.isDirectory()) {
|
|
30
|
+
fs.mkdirSync(d, { recursive: true });
|
|
31
|
+
copyDir(s, d, skip, false);
|
|
32
|
+
} else if (entry.isFile()) {
|
|
33
|
+
fs.copyFileSync(s, d);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
module.exports = { COPY_SKIP, shouldSkipCache, copyDir };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yottameta/yotta-skills",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.3",
|
|
4
4
|
"description": "YuanGe (元阁) - orchestration routing, inventory, and one-command installer for the YottaMeta skill family (zero dependencies, Node.js only).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
package/references/skill-list.md
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
# 全家技能清单(27 个)
|
|
2
2
|
|
|
3
3
|
> 机器权威源:`skills.json`(随包分发);本文件为人工可读副本,新技能发布后须同步更新
|
|
4
|
-
> `skills.json`(登记表为内部台账,不随包分发)。清单更新日期:2026-
|
|
4
|
+
> `skills.json`(登记表为内部台账,不随包分发)。清单更新日期:2026-10-01。
|
|
5
5
|
|
|
6
6
|
| slug | 中文名 | npm 包 | 清单版本 | 说明 |
|
|
7
7
|
|---|---|---|---|---|
|
|
8
|
-
| `yotta-anti-shallow` | 元谨 | `@yottameta/yotta-anti-shallow` | 1.4.
|
|
9
|
-
| `yotta-code-quality` | 元质 | `@yottameta/yotta-code-quality` | 0.4.
|
|
10
|
-
| `yotta-workflow` | 元序 | `@yottameta/yotta-workflow` | 0.4.
|
|
11
|
-
| `yotta-memory` | 元忆 | `@yottameta/yotta-memory` | 0.20.
|
|
12
|
-
| `yotta-learn` | 元习 | `@yottameta/yotta-learn` | 0.2.
|
|
13
|
-
| `yotta-security-audit` | 元安 | `@yottameta/yotta-security-audit` | 0.3.
|
|
14
|
-
| `yotta-vetter` | 元审 | `@yottameta/yotta-vetter` | 0.2.
|
|
15
|
-
| `yotta-recon` | 元析 | `@yottameta/yotta-recon` | 0.1.
|
|
16
|
-
| `yotta-guardian` | 元盾 | `@yottameta/yotta-guardian` | 0.1.
|
|
17
|
-
| `yotta-humanize` | 元真 | `@yottameta/yotta-humanize` | 0.2.
|
|
18
|
-
| `yotta-logs` | 元史 | `@yottameta/yotta-logs` | 0.3.
|
|
19
|
-
| `yotta-security-testing` | 元测 | `@yottameta/yotta-security-testing` | 0.3.
|
|
20
|
-
| `yotta-agent-hardening` | 元安全 | `@yottameta/yotta-agent-hardening` | 0.2.
|
|
21
|
-
| `yotta-skill-creator` | 元造 | `@yottameta/yotta-skill-creator` | 0.1.
|
|
22
|
-
| `yotta-publish-guard` | 元守 | `@yottameta/yotta-publish-guard` | 0.4.
|
|
23
|
-
| `yotta-logwatch` | 元察 | `@yottameta/yotta-logwatch` | 0.3.
|
|
24
|
-
| `yotta-intel` | 元情 | `@yottameta/yotta-intel` | 0.2.
|
|
25
|
-
| `yotta-secret` | 元钥 | `@yottameta/yotta-secret` | 0.2.
|
|
26
|
-
| `yotta-chain` | 元链 | `@yottameta/yotta-chain` | 0.1.
|
|
27
|
-
| `yotta-triage` | 元鉴 | `@yottameta/yotta-triage` | 0.1.
|
|
28
|
-
| `yotta-prompt` | 元引 | `@yottameta/yotta-prompt` | 0.2.
|
|
29
|
-
| `yotta-verify` | 元信 | `@yottameta/yotta-verify` | 0.3.
|
|
30
|
-
| `yotta-compliance` | 元规 | `@yottameta/yotta-compliance` | 0.1.
|
|
31
|
-
| `yotta-mirror` | 元镜 | `@yottameta/yotta-mirror` | 0.1.
|
|
32
|
-
| `yotta-lesson` | 元案 | `@yottameta/yotta-lesson` | 0.1.
|
|
33
|
-
| `yotta-item` | 元题 | `@yottameta/yotta-item` | 0.1.
|
|
34
|
-
| `yotta-school-doc` | 元公 | `@yottameta/yotta-school-doc` | 0.1.
|
|
8
|
+
| `yotta-anti-shallow` | 元谨 | `@yottameta/yotta-anti-shallow` | 1.4.2 | 防 AI 敷衍规则引擎(深入分析/根因追溯时激活) |
|
|
9
|
+
| `yotta-code-quality` | 元质 | `@yottameta/yotta-code-quality` | 0.4.2 | 结对式代码质量评审(十二类腐化风险 + 0-100 健康分) |
|
|
10
|
+
| `yotta-workflow` | 元序 | `@yottameta/yotta-workflow` | 0.4.3 | 跨会话/跨项目通用工作流协议(状态就近存) |
|
|
11
|
+
| `yotta-memory` | 元忆 | `@yottameta/yotta-memory` | 0.20.1 | 有权限边界的文件式智能体记忆(FACT/PREF/BOUND/COMMIT) |
|
|
12
|
+
| `yotta-learn` | 元习 | `@yottameta/yotta-learn` | 0.2.2 | 学习沉淀 CLI:错误/纠正/洞见沉淀为 .learnings/ 条目 |
|
|
13
|
+
| `yotta-security-audit` | 元安 | `@yottameta/yotta-security-audit` | 0.3.1 | 安全扫描引擎:13 类检测器 + 系统安全基线 + 学生数据隐私(教育版) |
|
|
14
|
+
| `yotta-vetter` | 元审 | `@yottameta/yotta-vetter` | 0.2.7 | 安全审查协议:四阶段 review + SAFE TO INSTALL 判定 |
|
|
15
|
+
| `yotta-recon` | 元析 | `@yottameta/yotta-recon` | 0.1.8 | 跨智能体网络侦察:零依赖端口/服务/版本指纹探测 |
|
|
16
|
+
| `yotta-guardian` | 元盾 | `@yottameta/yotta-guardian` | 0.1.8 | 跨智能体危险调用拦截护栏:确定性规则 + 可插拔意图验证 |
|
|
17
|
+
| `yotta-humanize` | 元真 | `@yottameta/yotta-humanize` | 0.2.2 | 去 AI 味中文写作编辑:检测器引擎 |
|
|
18
|
+
| `yotta-logs` | 元史 | `@yottameta/yotta-logs` | 0.3.3 | 跨智能体历史会话 / 记忆日志检索 |
|
|
19
|
+
| `yotta-security-testing` | 元测 | `@yottameta/yotta-security-testing` | 0.3.2 | 有纪律的 AI 安全测试方法论 + Scope Guard 五道防线 |
|
|
20
|
+
| `yotta-agent-hardening` | 元安全 | `@yottameta/yotta-agent-hardening` | 0.2.7 | 防御向 AI 智能体自身安全加固(配置面静态扫描三域) |
|
|
21
|
+
| `yotta-skill-creator` | 元造 | `@yottameta/yotta-skill-creator` | 0.1.5 | 工坊「造」:端到端造技能脚手架 |
|
|
22
|
+
| `yotta-publish-guard` | 元守 | `@yottameta/yotta-publish-guard` | 0.4.3 | 工坊「守」:发布前守门(版本四件对齐 + 三通道查重) |
|
|
23
|
+
| `yotta-logwatch` | 元察 | `@yottameta/yotta-logwatch` | 0.3.1 | 安全日志分析检测引擎(攻击链识别/告警聚合) |
|
|
24
|
+
| `yotta-intel` | 元情 | `@yottameta/yotta-intel` | 0.2.2 | 威胁情报 IOC 提取与规范化引擎(STIX-lite) |
|
|
25
|
+
| `yotta-secret` | 元钥 | `@yottameta/yotta-secret` | 0.2.2 | 密钥 / 凭据泄露源头扫描引擎 |
|
|
26
|
+
| `yotta-chain` | 元链 | `@yottameta/yotta-chain` | 0.1.5 | 供应链依赖校验引擎 |
|
|
27
|
+
| `yotta-triage` | 元鉴 | `@yottameta/yotta-triage` | 0.1.4 | 恶意样本静态初筛引擎(哈希/熵/字符串/PE-ELF) |
|
|
28
|
+
| `yotta-prompt` | 元引 | `@yottameta/yotta-prompt` | 0.2.4 | 意图澄清 + 生态入口(常驻注入,map 串联元阁全家) |
|
|
29
|
+
| `yotta-verify` | 元信 | `@yottameta/yotta-verify` | 0.3.4 | 装前安全扫描器 + audited 徽章(prompt injection + 危险模式) |
|
|
30
|
+
| `yotta-compliance` | 元规 | `@yottameta/yotta-compliance` | 0.1.1 | 本地确定性合规条款审查(PIPL + 数据出境规则包 / 证据锚点 / 框架覆盖分级) |
|
|
31
|
+
| `yotta-mirror` | 元镜 | `@yottameta/yotta-mirror` | 0.1.1 | 本地确定性学情分析(知识点掌握率 / 分层与临界生 / 薄弱点诊断,学生数据不出本机) |
|
|
32
|
+
| `yotta-lesson` | 元案 | `@yottameta/yotta-lesson` | 0.1.2 | 本地确定性教案骨架与覆盖校验(课标映射 / 环节时间精确分配 / 缺口检查) |
|
|
33
|
+
| `yotta-item` | 元题 | `@yottameta/yotta-item` | 0.1.1 | 本地确定性组卷与试卷校验(双向细目表 / 题库选题 / 缺口检查) |
|
|
34
|
+
| `yotta-school-doc` | 元公 | `@yottameta/yotta-school-doc` | 0.1.3 | 本地确定性学校公文可信起草与校验(文种规则包 / 可复算骨架 / 12 类缺口) |
|
|
35
35
|
|
|
36
36
|
## 家族分布
|
|
37
37
|
|
package/scan-policy.json
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
],
|
|
8
8
|
"skills": {
|
|
9
9
|
"yotta-anti-shallow": {
|
|
10
|
-
"version": "1.4.
|
|
11
|
-
"treeHash": "sha256:
|
|
10
|
+
"version": "1.4.2",
|
|
11
|
+
"treeHash": "sha256:f27ea5f8171bb340b4b4e9bdf18ddd9f0f02e480b2d1c7f521b87e17fde6005b",
|
|
12
12
|
"files": 7,
|
|
13
13
|
"bytes": 220568,
|
|
14
14
|
"mode": "strict",
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
]
|
|
29
29
|
},
|
|
30
30
|
"yotta-chain": {
|
|
31
|
-
"version": "0.1.
|
|
32
|
-
"treeHash": "sha256:
|
|
31
|
+
"version": "0.1.5",
|
|
32
|
+
"treeHash": "sha256:916313781a095d62752ab70f31c8de7f2f68a1a175cac0aae0f0efbf105254e4",
|
|
33
33
|
"files": 9,
|
|
34
|
-
"bytes":
|
|
34
|
+
"bytes": 274617,
|
|
35
35
|
"mode": "strict",
|
|
36
36
|
"exceptions": [
|
|
37
37
|
{
|
|
@@ -59,10 +59,10 @@
|
|
|
59
59
|
]
|
|
60
60
|
},
|
|
61
61
|
"yotta-guardian": {
|
|
62
|
-
"version": "0.1.
|
|
63
|
-
"treeHash": "sha256:
|
|
62
|
+
"version": "0.1.8",
|
|
63
|
+
"treeHash": "sha256:9e88214c3f30c142f37ab031cf459f9f3a3c8899d17c2850a00a2367d1afcf58",
|
|
64
64
|
"files": 13,
|
|
65
|
-
"bytes":
|
|
65
|
+
"bytes": 267505,
|
|
66
66
|
"mode": "detection",
|
|
67
67
|
"exceptions": [
|
|
68
68
|
{
|
|
@@ -104,10 +104,10 @@
|
|
|
104
104
|
]
|
|
105
105
|
},
|
|
106
106
|
"yotta-logwatch": {
|
|
107
|
-
"version": "0.3.
|
|
108
|
-
"treeHash": "sha256:
|
|
107
|
+
"version": "0.3.1",
|
|
108
|
+
"treeHash": "sha256:cffa6e8b7cda1dd2d4846c5f545d99e67a5fa9efe02caad209c78110baa20c9f",
|
|
109
109
|
"files": 13,
|
|
110
|
-
"bytes":
|
|
110
|
+
"bytes": 267698,
|
|
111
111
|
"mode": "detection",
|
|
112
112
|
"exceptions": [
|
|
113
113
|
{
|
|
@@ -197,10 +197,10 @@
|
|
|
197
197
|
]
|
|
198
198
|
},
|
|
199
199
|
"yotta-memory": {
|
|
200
|
-
"version": "0.20.
|
|
201
|
-
"treeHash": "sha256:
|
|
200
|
+
"version": "0.20.1",
|
|
201
|
+
"treeHash": "sha256:605b49cda99c787cd45c22309d65d4f935111fe4bbd8938bf3a1f0e80072db00",
|
|
202
202
|
"files": 18,
|
|
203
|
-
"bytes":
|
|
203
|
+
"bytes": 1183380,
|
|
204
204
|
"mode": "strict",
|
|
205
205
|
"exceptions": [
|
|
206
206
|
{
|
|
@@ -313,10 +313,10 @@
|
|
|
313
313
|
]
|
|
314
314
|
},
|
|
315
315
|
"yotta-recon": {
|
|
316
|
-
"version": "0.1.
|
|
317
|
-
"treeHash": "sha256:
|
|
316
|
+
"version": "0.1.8",
|
|
317
|
+
"treeHash": "sha256:d14ec30bc41d7be925d3e6b25d5e4c3ad373d5db0f3d56da57fcfd69fdfc190e",
|
|
318
318
|
"files": 11,
|
|
319
|
-
"bytes":
|
|
319
|
+
"bytes": 275910,
|
|
320
320
|
"mode": "detection",
|
|
321
321
|
"exceptions": [
|
|
322
322
|
{
|
|
@@ -346,10 +346,10 @@
|
|
|
346
346
|
]
|
|
347
347
|
},
|
|
348
348
|
"yotta-security-audit": {
|
|
349
|
-
"version": "0.3.
|
|
350
|
-
"treeHash": "sha256:
|
|
349
|
+
"version": "0.3.1",
|
|
350
|
+
"treeHash": "sha256:09f72de0959ff8a31e612023c2ad73b843897bb687cb353b3c3b89c3df0bf374",
|
|
351
351
|
"files": 15,
|
|
352
|
-
"bytes":
|
|
352
|
+
"bytes": 356187,
|
|
353
353
|
"mode": "detection",
|
|
354
354
|
"exceptions": [
|
|
355
355
|
{
|
|
@@ -399,10 +399,10 @@
|
|
|
399
399
|
]
|
|
400
400
|
},
|
|
401
401
|
"yotta-triage": {
|
|
402
|
-
"version": "0.1.
|
|
403
|
-
"treeHash": "sha256:
|
|
402
|
+
"version": "0.1.4",
|
|
403
|
+
"treeHash": "sha256:d52fdc61de486235b0396ccdb9fdad5adb4933f7539e6c7c3aa38b3006ea8ce8",
|
|
404
404
|
"files": 10,
|
|
405
|
-
"bytes":
|
|
405
|
+
"bytes": 234170,
|
|
406
406
|
"mode": "detection",
|
|
407
407
|
"exceptions": [
|
|
408
408
|
{
|
|
@@ -468,10 +468,10 @@
|
|
|
468
468
|
]
|
|
469
469
|
},
|
|
470
470
|
"yotta-vetter": {
|
|
471
|
-
"version": "0.2.
|
|
472
|
-
"treeHash": "sha256:
|
|
471
|
+
"version": "0.2.7",
|
|
472
|
+
"treeHash": "sha256:02935b4b9d146f09acb80a9219cc156523f56c626db5a8c9a139722a16a65564",
|
|
473
473
|
"files": 11,
|
|
474
|
-
"bytes":
|
|
474
|
+
"bytes": 222499,
|
|
475
475
|
"mode": "strict",
|
|
476
476
|
"exceptions": [
|
|
477
477
|
{
|
package/skill-manifest.json
CHANGED
package/skills.json
CHANGED
|
@@ -1,195 +1,195 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifestVersion": 1,
|
|
3
|
-
"updated": "2026-
|
|
3
|
+
"updated": "2026-10-01",
|
|
4
4
|
"note": "清单同步要求:每次技能发布新版本后,按 YottaSkills 技能登记表更新本文件(登记表为内部台账,不随包分发)。",
|
|
5
5
|
"skills": [
|
|
6
6
|
{
|
|
7
7
|
"slug": "yotta-anti-shallow",
|
|
8
8
|
"name": "元谨",
|
|
9
9
|
"pkg": "@yottameta/yotta-anti-shallow",
|
|
10
|
-
"version": "1.4.
|
|
10
|
+
"version": "1.4.2",
|
|
11
11
|
"desc": "防 AI 敷衍规则引擎(深入分析/根因追溯时激活)"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
"slug": "yotta-code-quality",
|
|
15
15
|
"name": "元质",
|
|
16
16
|
"pkg": "@yottameta/yotta-code-quality",
|
|
17
|
-
"version": "0.4.
|
|
17
|
+
"version": "0.4.2",
|
|
18
18
|
"desc": "结对式代码质量评审(十二类腐化风险 + 0-100 健康分)"
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
"slug": "yotta-workflow",
|
|
22
22
|
"name": "元序",
|
|
23
23
|
"pkg": "@yottameta/yotta-workflow",
|
|
24
|
-
"version": "0.4.
|
|
24
|
+
"version": "0.4.3",
|
|
25
25
|
"desc": "跨会话/跨项目通用工作流协议(状态就近存)"
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
"slug": "yotta-memory",
|
|
29
29
|
"name": "元忆",
|
|
30
30
|
"pkg": "@yottameta/yotta-memory",
|
|
31
|
-
"version": "0.20.
|
|
31
|
+
"version": "0.20.1",
|
|
32
32
|
"desc": "有权限边界的文件式智能体记忆(FACT/PREF/BOUND/COMMIT)"
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"slug": "yotta-learn",
|
|
36
36
|
"name": "元习",
|
|
37
37
|
"pkg": "@yottameta/yotta-learn",
|
|
38
|
-
"version": "0.2.
|
|
38
|
+
"version": "0.2.2",
|
|
39
39
|
"desc": "学习沉淀 CLI:错误/纠正/洞见沉淀为 .learnings/ 条目"
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
"slug": "yotta-security-audit",
|
|
43
43
|
"name": "元安",
|
|
44
44
|
"pkg": "@yottameta/yotta-security-audit",
|
|
45
|
-
"version": "0.3.
|
|
45
|
+
"version": "0.3.1",
|
|
46
46
|
"desc": "安全扫描引擎:13 类检测器 + 系统安全基线 + 学生数据隐私(教育版)"
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
49
|
"slug": "yotta-vetter",
|
|
50
50
|
"name": "元审",
|
|
51
51
|
"pkg": "@yottameta/yotta-vetter",
|
|
52
|
-
"version": "0.2.
|
|
52
|
+
"version": "0.2.7",
|
|
53
53
|
"desc": "安全审查协议:四阶段 review + SAFE TO INSTALL 判定"
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
56
|
"slug": "yotta-recon",
|
|
57
57
|
"name": "元析",
|
|
58
58
|
"pkg": "@yottameta/yotta-recon",
|
|
59
|
-
"version": "0.1.
|
|
59
|
+
"version": "0.1.8",
|
|
60
60
|
"desc": "跨智能体网络侦察:零依赖端口/服务/版本指纹探测"
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
63
|
"slug": "yotta-guardian",
|
|
64
64
|
"name": "元盾",
|
|
65
65
|
"pkg": "@yottameta/yotta-guardian",
|
|
66
|
-
"version": "0.1.
|
|
66
|
+
"version": "0.1.8",
|
|
67
67
|
"desc": "跨智能体危险调用拦截护栏:确定性规则 + 可插拔意图验证"
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
70
|
"slug": "yotta-humanize",
|
|
71
71
|
"name": "元真",
|
|
72
72
|
"pkg": "@yottameta/yotta-humanize",
|
|
73
|
-
"version": "0.2.
|
|
73
|
+
"version": "0.2.2",
|
|
74
74
|
"desc": "去 AI 味中文写作编辑:检测器引擎"
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
77
|
"slug": "yotta-logs",
|
|
78
78
|
"name": "元史",
|
|
79
79
|
"pkg": "@yottameta/yotta-logs",
|
|
80
|
-
"version": "0.3.
|
|
80
|
+
"version": "0.3.3",
|
|
81
81
|
"desc": "跨智能体历史会话 / 记忆日志检索"
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
84
|
"slug": "yotta-security-testing",
|
|
85
85
|
"name": "元测",
|
|
86
86
|
"pkg": "@yottameta/yotta-security-testing",
|
|
87
|
-
"version": "0.3.
|
|
87
|
+
"version": "0.3.2",
|
|
88
88
|
"desc": "有纪律的 AI 安全测试方法论 + Scope Guard 五道防线"
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
91
|
"slug": "yotta-agent-hardening",
|
|
92
92
|
"name": "元安全",
|
|
93
93
|
"pkg": "@yottameta/yotta-agent-hardening",
|
|
94
|
-
"version": "0.2.
|
|
94
|
+
"version": "0.2.7",
|
|
95
95
|
"desc": "防御向 AI 智能体自身安全加固(配置面静态扫描三域)"
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
"slug": "yotta-skill-creator",
|
|
99
99
|
"name": "元造",
|
|
100
100
|
"pkg": "@yottameta/yotta-skill-creator",
|
|
101
|
-
"version": "0.1.
|
|
101
|
+
"version": "0.1.5",
|
|
102
102
|
"desc": "工坊「造」:端到端造技能脚手架"
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
105
|
"slug": "yotta-publish-guard",
|
|
106
106
|
"name": "元守",
|
|
107
107
|
"pkg": "@yottameta/yotta-publish-guard",
|
|
108
|
-
"version": "0.4.
|
|
108
|
+
"version": "0.4.3",
|
|
109
109
|
"desc": "工坊「守」:发布前守门(版本四件对齐 + 三通道查重)"
|
|
110
110
|
},
|
|
111
111
|
{
|
|
112
112
|
"slug": "yotta-logwatch",
|
|
113
113
|
"name": "元察",
|
|
114
114
|
"pkg": "@yottameta/yotta-logwatch",
|
|
115
|
-
"version": "0.3.
|
|
115
|
+
"version": "0.3.1",
|
|
116
116
|
"desc": "安全日志分析检测引擎(攻击链识别/告警聚合)"
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
"slug": "yotta-intel",
|
|
120
120
|
"name": "元情",
|
|
121
121
|
"pkg": "@yottameta/yotta-intel",
|
|
122
|
-
"version": "0.2.
|
|
122
|
+
"version": "0.2.2",
|
|
123
123
|
"desc": "威胁情报 IOC 提取与规范化引擎(STIX-lite)"
|
|
124
124
|
},
|
|
125
125
|
{
|
|
126
126
|
"slug": "yotta-secret",
|
|
127
127
|
"name": "元钥",
|
|
128
128
|
"pkg": "@yottameta/yotta-secret",
|
|
129
|
-
"version": "0.2.
|
|
129
|
+
"version": "0.2.2",
|
|
130
130
|
"desc": "密钥 / 凭据泄露源头扫描引擎"
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
133
|
"slug": "yotta-chain",
|
|
134
134
|
"name": "元链",
|
|
135
135
|
"pkg": "@yottameta/yotta-chain",
|
|
136
|
-
"version": "0.1.
|
|
136
|
+
"version": "0.1.5",
|
|
137
137
|
"desc": "供应链依赖校验引擎"
|
|
138
138
|
},
|
|
139
139
|
{
|
|
140
140
|
"slug": "yotta-triage",
|
|
141
141
|
"name": "元鉴",
|
|
142
142
|
"pkg": "@yottameta/yotta-triage",
|
|
143
|
-
"version": "0.1.
|
|
143
|
+
"version": "0.1.4",
|
|
144
144
|
"desc": "恶意样本静态初筛引擎(哈希/熵/字符串/PE-ELF)"
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
147
|
"slug": "yotta-prompt",
|
|
148
148
|
"name": "元引",
|
|
149
149
|
"pkg": "@yottameta/yotta-prompt",
|
|
150
|
-
"version": "0.2.
|
|
150
|
+
"version": "0.2.4",
|
|
151
151
|
"desc": "意图澄清 + 生态入口(常驻注入,map 串联元阁全家)"
|
|
152
152
|
},
|
|
153
153
|
{
|
|
154
154
|
"slug": "yotta-verify",
|
|
155
155
|
"name": "元信",
|
|
156
156
|
"pkg": "@yottameta/yotta-verify",
|
|
157
|
-
"version": "0.3.
|
|
157
|
+
"version": "0.3.4",
|
|
158
158
|
"desc": "装前安全扫描器 + audited 徽章(prompt injection + 危险模式)"
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
"slug": "yotta-compliance",
|
|
162
162
|
"name": "元规",
|
|
163
163
|
"pkg": "@yottameta/yotta-compliance",
|
|
164
|
-
"version": "0.1.
|
|
164
|
+
"version": "0.1.1",
|
|
165
165
|
"desc": "本地确定性合规条款审查(PIPL + 数据出境规则包 / 证据锚点 / 框架覆盖分级)"
|
|
166
166
|
},
|
|
167
167
|
{
|
|
168
168
|
"slug": "yotta-mirror",
|
|
169
169
|
"name": "元镜",
|
|
170
170
|
"pkg": "@yottameta/yotta-mirror",
|
|
171
|
-
"version": "0.1.
|
|
171
|
+
"version": "0.1.1",
|
|
172
172
|
"desc": "本地确定性学情分析(知识点掌握率 / 分层与临界生 / 薄弱点诊断,学生数据不出本机)"
|
|
173
173
|
},
|
|
174
174
|
{
|
|
175
175
|
"slug": "yotta-lesson",
|
|
176
176
|
"name": "元案",
|
|
177
177
|
"pkg": "@yottameta/yotta-lesson",
|
|
178
|
-
"version": "0.1.
|
|
178
|
+
"version": "0.1.2",
|
|
179
179
|
"desc": "本地确定性教案骨架与覆盖校验(课标映射 / 环节时间精确分配 / 缺口检查)"
|
|
180
180
|
},
|
|
181
181
|
{
|
|
182
182
|
"slug": "yotta-item",
|
|
183
183
|
"name": "元题",
|
|
184
184
|
"pkg": "@yottameta/yotta-item",
|
|
185
|
-
"version": "0.1.
|
|
185
|
+
"version": "0.1.1",
|
|
186
186
|
"desc": "本地确定性组卷与试卷校验(双向细目表 / 题库选题 / 缺口检查)"
|
|
187
187
|
},
|
|
188
188
|
{
|
|
189
189
|
"slug": "yotta-school-doc",
|
|
190
190
|
"name": "元公",
|
|
191
191
|
"pkg": "@yottameta/yotta-school-doc",
|
|
192
|
-
"version": "0.1.
|
|
192
|
+
"version": "0.1.3",
|
|
193
193
|
"desc": "本地确定性学校公文可信起草与校验(文种规则包 / 可复算骨架 / 12 类缺口)"
|
|
194
194
|
}
|
|
195
195
|
]
|