@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 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.1
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:
@@ -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.1';
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
- function shouldSkip(name, isFile) {
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(元阁)多智能体安装脚本(YottaSkills)
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
- install_to() {
67
- local base="$1"
68
- local dest
69
- local item
70
- case "$base" in
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
- mkdir -p "$base"
77
- dest="$base/$SKILL_NAME"
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
- if [ -e "$dest" ] && [ ! -d "$dest" ]; then
82
- echo "安装失败:技能路径已存在且不是目录:$dest" >&2; return 1
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
- mkdir -p "$dest"
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
- # 只安装技能本体与运行时需要的 MCP/清单资产;只清副本内的固定子路径。
87
- for item in .git .github .gitignore .npmignore bin lib test package.json package-lock.json install.sh; do
88
- if [ -e "$dest/$item" ] && [ ! -L "$dest/$item" ]; then
89
- rm -rf -- "$dest/$item"
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
- for item in SKILL.md skill-manifest.json references scripts assets skills.json scan-policy.json LICENSE NOTICE README.md README.zh-CN.md CHANGELOG.md USER_GUIDE.md; do
93
- if [ -e "$SOURCE_DIR/$item" ]; then
94
- cp -RP "$SOURCE_DIR/$item" "$dest/"
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
- find "$dest" -type d -name '__pycache__' -prune -exec rm -rf {} + 2>/dev/null || true
98
- find "$dest" -type f -name '*.pyc' -delete 2>/dev/null || true
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 assume_yes=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
- --agent) shift; agent="${1:-}" ;;
128
- --dir) shift; dir="${1:-}" ;;
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 [ "$show_list" = "1" ]; then list; return; fi
138
- if [ -n "$dir" ]; then install_to "$dir"; echo "完成。"; return; fi
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。请用 --dir <路径> 指定技能目录。" >&2; exit 2
290
+ echo "未收录智能体: $agent。可用 --list 查看,或 --dir <路径> 指定。" >&2
291
+ exit 2
143
292
  fi
144
293
  first="${dirs%% *}"
145
- install_to "$(resolve_user "$first")"; echo "完成。"; return
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
- if [ "$assume_yes" != "1" ]; then
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 install_to "$(resolve_user "$rel")"; done
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 "完成。"; return
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 install_to "$d"; installed=1; fi
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> / -g 装到用户级,或 --dir 指定。"
321
+ echo "目标错误: 未检测到项目级智能体目录。可用 --agent <name> 装到用户级,或用 --dir <路径> 指定目录。" >&2
322
+ exit 4
166
323
  fi
324
+ [ "$dry" = "1" ] || echo "完成。"
167
325
  }
168
326
 
169
327
  main "$@"
@@ -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.1",
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": [
@@ -1,37 +1,37 @@
1
1
  # 全家技能清单(27 个)
2
2
 
3
3
  > 机器权威源:`skills.json`(随包分发);本文件为人工可读副本,新技能发布后须同步更新
4
- > `skills.json`(登记表为内部台账,不随包分发)。清单更新日期:2026-09-27。
4
+ > `skills.json`(登记表为内部台账,不随包分发)。清单更新日期:2026-10-01。
5
5
 
6
6
  | slug | 中文名 | npm 包 | 清单版本 | 说明 |
7
7
  |---|---|---|---|---|
8
- | `yotta-anti-shallow` | 元谨 | `@yottameta/yotta-anti-shallow` | 1.4.1 | 防 AI 敷衍规则引擎(深入分析/根因追溯时激活) |
9
- | `yotta-code-quality` | 元质 | `@yottameta/yotta-code-quality` | 0.4.1 | 结对式代码质量评审(十二类腐化风险 + 0-100 健康分) |
10
- | `yotta-workflow` | 元序 | `@yottameta/yotta-workflow` | 0.4.2 | 跨会话/跨项目通用工作流协议(状态就近存) |
11
- | `yotta-memory` | 元忆 | `@yottameta/yotta-memory` | 0.20.0 | 有权限边界的文件式智能体记忆(FACT/PREF/BOUND/COMMIT) |
12
- | `yotta-learn` | 元习 | `@yottameta/yotta-learn` | 0.2.1 | 学习沉淀 CLI:错误/纠正/洞见沉淀为 .learnings/ 条目 |
13
- | `yotta-security-audit` | 元安 | `@yottameta/yotta-security-audit` | 0.3.0 | 安全扫描引擎:13 类检测器 + 系统安全基线 + 学生数据隐私(教育版) |
14
- | `yotta-vetter` | 元审 | `@yottameta/yotta-vetter` | 0.2.6 | 安全审查协议:四阶段 review + SAFE TO INSTALL 判定 |
15
- | `yotta-recon` | 元析 | `@yottameta/yotta-recon` | 0.1.7 | 跨智能体网络侦察:零依赖端口/服务/版本指纹探测 |
16
- | `yotta-guardian` | 元盾 | `@yottameta/yotta-guardian` | 0.1.7 | 跨智能体危险调用拦截护栏:确定性规则 + 可插拔意图验证 |
17
- | `yotta-humanize` | 元真 | `@yottameta/yotta-humanize` | 0.2.1 | 去 AI 味中文写作编辑:检测器引擎 |
18
- | `yotta-logs` | 元史 | `@yottameta/yotta-logs` | 0.3.2 | 跨智能体历史会话 / 记忆日志检索 |
19
- | `yotta-security-testing` | 元测 | `@yottameta/yotta-security-testing` | 0.3.1 | 有纪律的 AI 安全测试方法论 + Scope Guard 五道防线 |
20
- | `yotta-agent-hardening` | 元安全 | `@yottameta/yotta-agent-hardening` | 0.2.6 | 防御向 AI 智能体自身安全加固(配置面静态扫描三域) |
21
- | `yotta-skill-creator` | 元造 | `@yottameta/yotta-skill-creator` | 0.1.3 | 工坊「造」:端到端造技能脚手架 |
22
- | `yotta-publish-guard` | 元守 | `@yottameta/yotta-publish-guard` | 0.4.2 | 工坊「守」:发布前守门(版本四件对齐 + 三通道查重) |
23
- | `yotta-logwatch` | 元察 | `@yottameta/yotta-logwatch` | 0.3.0 | 安全日志分析检测引擎(攻击链识别/告警聚合) |
24
- | `yotta-intel` | 元情 | `@yottameta/yotta-intel` | 0.2.1 | 威胁情报 IOC 提取与规范化引擎(STIX-lite) |
25
- | `yotta-secret` | 元钥 | `@yottameta/yotta-secret` | 0.2.1 | 密钥 / 凭据泄露源头扫描引擎 |
26
- | `yotta-chain` | 元链 | `@yottameta/yotta-chain` | 0.1.4 | 供应链依赖校验引擎 |
27
- | `yotta-triage` | 元鉴 | `@yottameta/yotta-triage` | 0.1.3 | 恶意样本静态初筛引擎(哈希/熵/字符串/PE-ELF) |
28
- | `yotta-prompt` | 元引 | `@yottameta/yotta-prompt` | 0.2.3 | 意图澄清 + 生态入口(常驻注入,map 串联元阁全家) |
29
- | `yotta-verify` | 元信 | `@yottameta/yotta-verify` | 0.3.3 | 装前安全扫描器 + audited 徽章(prompt injection + 危险模式) |
30
- | `yotta-compliance` | 元规 | `@yottameta/yotta-compliance` | 0.1.0 | 本地确定性合规条款审查(PIPL + 数据出境规则包 / 证据锚点 / 框架覆盖分级) |
31
- | `yotta-mirror` | 元镜 | `@yottameta/yotta-mirror` | 0.1.0 | 本地确定性学情分析(知识点掌握率 / 分层与临界生 / 薄弱点诊断,学生数据不出本机) |
32
- | `yotta-lesson` | 元案 | `@yottameta/yotta-lesson` | 0.1.0 | 本地确定性教案骨架与覆盖校验(课标映射 / 环节时间精确分配 / 缺口检查) |
33
- | `yotta-item` | 元题 | `@yottameta/yotta-item` | 0.1.0 | 本地确定性组卷与试卷校验(双向细目表 / 题库选题 / 缺口检查) |
34
- | `yotta-school-doc` | 元公 | `@yottameta/yotta-school-doc` | 0.1.2 | 本地确定性学校公文可信起草与校验(文种规则包 / 可复算骨架 / 12 类缺口) |
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.1",
11
- "treeHash": "sha256:81fbbb00cb39ff09f8c6a35e6099228bfadcd71394cace26e5ca61d87cba5e56",
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.4",
32
- "treeHash": "sha256:ba455f7460fc0b0b6469d57cbd13b60c7a103fb85c0619bb5f61efcd4085f5a2",
31
+ "version": "0.1.5",
32
+ "treeHash": "sha256:916313781a095d62752ab70f31c8de7f2f68a1a175cac0aae0f0efbf105254e4",
33
33
  "files": 9,
34
- "bytes": 274372,
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.7",
63
- "treeHash": "sha256:7bc0b09d06b6b6dbbb8cb29601ccdb2a41b1b9bdfd96d78af2c10ede035dce16",
62
+ "version": "0.1.8",
63
+ "treeHash": "sha256:9e88214c3f30c142f37ab031cf459f9f3a3c8899d17c2850a00a2367d1afcf58",
64
64
  "files": 13,
65
- "bytes": 267260,
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.0",
108
- "treeHash": "sha256:fbe53b95f9fb738555f2936c8285fa6857613328d0c667f73a259fb3bccfbef5",
107
+ "version": "0.3.1",
108
+ "treeHash": "sha256:cffa6e8b7cda1dd2d4846c5f545d99e67a5fa9efe02caad209c78110baa20c9f",
109
109
  "files": 13,
110
- "bytes": 267453,
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.0",
201
- "treeHash": "sha256:b105f6a7ab46da3cf538c45b3776570d9a82577510fda0864f52fb3a7911d7c3",
200
+ "version": "0.20.1",
201
+ "treeHash": "sha256:605b49cda99c787cd45c22309d65d4f935111fe4bbd8938bf3a1f0e80072db00",
202
202
  "files": 18,
203
- "bytes": 1176014,
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.7",
317
- "treeHash": "sha256:d3d04d34fe4416017b8b4304b0ce78bc1447b908f7d01747826924cde2adead2",
316
+ "version": "0.1.8",
317
+ "treeHash": "sha256:d14ec30bc41d7be925d3e6b25d5e4c3ad373d5db0f3d56da57fcfd69fdfc190e",
318
318
  "files": 11,
319
- "bytes": 275665,
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.0",
350
- "treeHash": "sha256:bffcb3573f64b11d2b78e6aa5793e6db35f1f429f9a7dc7ad2b49cd8ab25ea8c",
349
+ "version": "0.3.1",
350
+ "treeHash": "sha256:09f72de0959ff8a31e612023c2ad73b843897bb687cb353b3c3b89c3df0bf374",
351
351
  "files": 15,
352
- "bytes": 355942,
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.3",
403
- "treeHash": "sha256:f1dabde26bf05cf9b36cc28ebe5522ba3af558a6824306bd4a85ad583684df5c",
402
+ "version": "0.1.4",
403
+ "treeHash": "sha256:d52fdc61de486235b0396ccdb9fdad5adb4933f7539e6c7c3aa38b3006ea8ce8",
404
404
  "files": 10,
405
- "bytes": 233925,
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.6",
472
- "treeHash": "sha256:691ff78f9a7e1a46d1595d97b6a97d84e94bdcb5c159f9d743f7f0e875063382",
471
+ "version": "0.2.7",
472
+ "treeHash": "sha256:02935b4b9d146f09acb80a9219cc156523f56c626db5a8c9a139722a16a65564",
473
473
  "files": 11,
474
- "bytes": 222254,
474
+ "bytes": 222499,
475
475
  "mode": "strict",
476
476
  "exceptions": [
477
477
  {
@@ -27,7 +27,7 @@ import subprocess
27
27
  import sys
28
28
  from pathlib import Path
29
29
 
30
- VERSION = "0.23.1"
30
+ VERSION = "0.23.3"
31
31
  TOOL_NAME = "yotta-skills"
32
32
  CN_NAME = "元阁"
33
33
  MCP_PROTOCOL_MODERN = "2026-07-28"
@@ -3,7 +3,7 @@
3
3
  "slug": "yotta-skills",
4
4
  "name": "元阁",
5
5
  "package": "@yottameta/yotta-skills",
6
- "version": "0.23.1",
6
+ "version": "0.23.3",
7
7
  "trust": "yottameta",
8
8
  "install": {
9
9
  "idempotent": true
package/skills.json CHANGED
@@ -1,195 +1,195 @@
1
1
  {
2
2
  "manifestVersion": 1,
3
- "updated": "2026-09-30",
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.1",
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.1",
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.2",
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.0",
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.1",
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.0",
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.6",
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.7",
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.7",
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.1",
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.2",
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.1",
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.6",
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.3",
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.2",
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.0",
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.1",
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.1",
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.4",
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.3",
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.3",
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.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.0",
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.0",
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.0",
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.0",
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.2",
192
+ "version": "0.1.3",
193
193
  "desc": "本地确定性学校公文可信起草与校验(文种规则包 / 可复算骨架 / 12 类缺口)"
194
194
  }
195
195
  ]