@yottameta/yotta-skills-plugin 0.29.0 → 0.29.2
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/.agents/plugins/marketplace.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/yotta-skills/SKILL.md +28 -3
- package/skills/yotta-skills/assets/view.html +130 -5
- package/skills/yotta-skills/bin/yotta-skills.js +465 -37
- package/skills/yotta-skills/lib/agent-dirs.js +17 -3
- package/skills/yotta-skills/lib/agent-discovery.js +109 -11
- package/skills/yotta-skills/lib/cli-help.js +17 -3
- package/skills/yotta-skills/lib/hosts-registry.js +143 -1
- package/skills/yotta-skills/lib/hub-adopt.js +1 -1
- package/skills/yotta-skills/lib/hub-migrate.js +183 -0
- package/skills/yotta-skills/lib/hub-scan.js +37 -3
- package/skills/yotta-skills/lib/hub-view-server.js +131 -1
- package/skills/yotta-skills/lib/hub.js +8 -4
- package/skills/yotta-skills/lib/install-pipeline.js +39 -2
- package/skills/yotta-skills/lib/self-install.js +5 -1
- package/skills/yotta-skills/lib/skills-config.js +170 -0
- package/skills/yotta-skills/lib/skills-scan.js +25 -0
- package/skills/yotta-skills/references/hub.md +48 -1
- package/skills/yotta-skills/references/install-flow.md +5 -2
- package/skills/yotta-skills/references/skill-list.md +2 -2
- package/skills/yotta-skills/scan-policy.json +3 -3
- package/skills/yotta-skills/scripts/yotta-skills-mcp.py +1 -1
- package/skills/yotta-skills/skills.json +2 -2
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
/**
|
|
3
|
+
* 用户级配置(0.29.2 U4)—— <root>/config.json。
|
|
4
|
+
*
|
|
5
|
+
* root = YOTTA_SKILLS_HOME 或 ~/.yottaskills(与 hosts.json / self.json 同根,
|
|
6
|
+
* 独立于 Hub 目录本身)。schema v1:{ version, hub: "<path>" | null }。
|
|
7
|
+
*
|
|
8
|
+
* Hub 解析优先级:--hub flag > YOTTA_SKILLS_HUB env > config.hub > 默认 <root>/hub。
|
|
9
|
+
* set 为 fail-closed 校验:不能是文件、不能与配置根 / 独立安装目录重叠、
|
|
10
|
+
* 不能是锁 / 数据桥接目录;路径不存在时允许(首次使用时创建)。
|
|
11
|
+
*/
|
|
12
|
+
const fs = require('fs');
|
|
13
|
+
const os = require('os');
|
|
14
|
+
const path = require('path');
|
|
15
|
+
const agentDirsLib = require('./agent-dirs');
|
|
16
|
+
|
|
17
|
+
const CONFIG_VERSION = 1;
|
|
18
|
+
|
|
19
|
+
function resolveSkillsRoot(opts) {
|
|
20
|
+
const options = opts || {};
|
|
21
|
+
const env = options.env || process.env;
|
|
22
|
+
const explicit = options.skillsRoot || env.YOTTA_SKILLS_HOME;
|
|
23
|
+
if (explicit) return path.resolve(explicit);
|
|
24
|
+
return path.join(options.homeDir || os.homedir(), '.yottaskills');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function configPath(opts) {
|
|
28
|
+
return path.join(resolveSkillsRoot(opts), 'config.json');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function defaultHubDir(opts) {
|
|
32
|
+
return path.join(resolveSkillsRoot(opts), 'hub');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function readConfig(opts) {
|
|
36
|
+
try {
|
|
37
|
+
const value = JSON.parse(fs.readFileSync(configPath(opts), 'utf8'));
|
|
38
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
39
|
+
return {
|
|
40
|
+
version: CONFIG_VERSION,
|
|
41
|
+
hub: typeof value.hub === 'string' && value.hub.trim() ? value.hub : null,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
} catch (_) { /* missing or corrupt config falls back to empty */ }
|
|
45
|
+
return { version: CONFIG_VERSION, hub: null };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function writeConfig(opts, config) {
|
|
49
|
+
const file = configPath(opts);
|
|
50
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
51
|
+
const tmp = file + '.tmp-' + process.pid;
|
|
52
|
+
fs.writeFileSync(tmp, JSON.stringify({
|
|
53
|
+
version: CONFIG_VERSION,
|
|
54
|
+
hub: config && config.hub ? config.hub : null,
|
|
55
|
+
}, null, 2) + '\n', 'utf8');
|
|
56
|
+
fs.renameSync(tmp, file);
|
|
57
|
+
return file;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** 解析生效 Hub:返回 { dir, source, configured, configFile, defaultDir }。 */
|
|
61
|
+
function resolveHub(opts) {
|
|
62
|
+
const options = opts || {};
|
|
63
|
+
const env = options.env || process.env;
|
|
64
|
+
const config = readConfig(options);
|
|
65
|
+
const base = {
|
|
66
|
+
configured: config.hub,
|
|
67
|
+
configFile: configPath(options),
|
|
68
|
+
defaultDir: defaultHubDir(options),
|
|
69
|
+
};
|
|
70
|
+
if (options.hub) return { dir: path.resolve(options.hub), source: 'flag', ...base };
|
|
71
|
+
if (env.YOTTA_SKILLS_HUB) return { dir: path.resolve(env.YOTTA_SKILLS_HUB), source: 'env', ...base };
|
|
72
|
+
if (config.hub) return { dir: path.resolve(config.hub), source: 'config', ...base };
|
|
73
|
+
return { dir: base.defaultDir, source: 'default', ...base };
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function sourceLabel(source) {
|
|
77
|
+
if (source === 'flag') return '--hub 参数';
|
|
78
|
+
if (source === 'env') return 'YOTTA_SKILLS_HUB 环境变量';
|
|
79
|
+
if (source === 'config') return 'config.json 配置';
|
|
80
|
+
return '默认位置';
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function safeRealpath(target) {
|
|
84
|
+
try {
|
|
85
|
+
return fs.realpathSync.native(target);
|
|
86
|
+
} catch (_) {
|
|
87
|
+
try {
|
|
88
|
+
return fs.realpathSync(target);
|
|
89
|
+
} catch (_) {
|
|
90
|
+
return path.resolve(target);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function samePath(left, right) {
|
|
96
|
+
const a = safeRealpath(left);
|
|
97
|
+
const b = safeRealpath(right);
|
|
98
|
+
if (process.platform === 'win32') return a.toLowerCase() === b.toLowerCase();
|
|
99
|
+
return a === b;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function isInside(root, target) {
|
|
103
|
+
const relative = path.relative(path.resolve(root), path.resolve(target));
|
|
104
|
+
return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** fail-closed 校验 Hub 路径;返回 { ok:true, dir } 或 { ok:false, error }。 */
|
|
108
|
+
function validateHubPath(input, opts) {
|
|
109
|
+
const options = opts || {};
|
|
110
|
+
const raw = String(input == null ? '' : input).trim();
|
|
111
|
+
if (!raw) return { ok: false, error: '缺少路径:hub config set --hub <path>' };
|
|
112
|
+
const dir = path.resolve(raw);
|
|
113
|
+
let stat = null;
|
|
114
|
+
try {
|
|
115
|
+
stat = fs.statSync(dir);
|
|
116
|
+
} catch (_) { /* 不存在允许:首次使用时创建 */ }
|
|
117
|
+
if (stat && !stat.isDirectory()) return { ok: false, error: '不是目录:' + dir };
|
|
118
|
+
const root = resolveSkillsRoot(options);
|
|
119
|
+
if (isInside(dir, root)) {
|
|
120
|
+
return {
|
|
121
|
+
ok: false,
|
|
122
|
+
error: 'Hub 不能与配置根相同或包含配置根(' + root + '):config.json / hosts.json / self.json 需保持独立',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const selfDir = path.join(root, 'yotta-skills');
|
|
126
|
+
if (samePath(dir, selfDir) || isInside(selfDir, dir) || isInside(dir, selfDir)) {
|
|
127
|
+
return { ok: false, error: 'Hub 不能与独立安装目录重叠(' + selfDir + ')' };
|
|
128
|
+
}
|
|
129
|
+
if (agentDirsLib.isBridgeOnlyDir(dir, options)) {
|
|
130
|
+
return { ok: false, error: '锁 / 数据桥接目录不能作为 Hub:' + dir };
|
|
131
|
+
}
|
|
132
|
+
return { ok: true, dir };
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** 写入持久 Hub 覆盖;返回 { ok, hub, configFile, previous }。 */
|
|
136
|
+
function setHub(opts, input) {
|
|
137
|
+
const options = opts || {};
|
|
138
|
+
const guard = validateHubPath(input && input.hub, options);
|
|
139
|
+
if (!guard.ok) return guard;
|
|
140
|
+
const config = readConfig(options);
|
|
141
|
+
const previous = config.hub;
|
|
142
|
+
config.hub = guard.dir;
|
|
143
|
+
const file = writeConfig(options, config);
|
|
144
|
+
return { ok: true, hub: guard.dir, configFile: file, previous };
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** 清除持久 Hub 覆盖(恢复 flag > env > 默认)。 */
|
|
148
|
+
function clearHub(opts) {
|
|
149
|
+
const options = opts || {};
|
|
150
|
+
const config = readConfig(options);
|
|
151
|
+
if (!config.hub) return { ok: false, error: '没有可清除的 Hub 配置覆盖(当前来源不是 config.json)' };
|
|
152
|
+
const removed = config.hub;
|
|
153
|
+
config.hub = null;
|
|
154
|
+
const file = writeConfig(options, config);
|
|
155
|
+
return { ok: true, removed, configFile: file };
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
module.exports = {
|
|
159
|
+
CONFIG_VERSION,
|
|
160
|
+
resolveSkillsRoot,
|
|
161
|
+
configPath,
|
|
162
|
+
defaultHubDir,
|
|
163
|
+
readConfig,
|
|
164
|
+
writeConfig,
|
|
165
|
+
resolveHub,
|
|
166
|
+
sourceLabel,
|
|
167
|
+
validateHubPath,
|
|
168
|
+
setHub,
|
|
169
|
+
clearHub,
|
|
170
|
+
};
|
|
@@ -113,6 +113,30 @@ function compareSemver(left, right) {
|
|
|
113
113
|
return comparePrerelease(a.prerelease, b.prerelease);
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
+
/**
|
|
117
|
+
* 版本关系判定(元阁 update「只升不降」统一口径,0.29.1 U1)。
|
|
118
|
+
*
|
|
119
|
+
* installed:本地已装版本(null = 未装);target:目标版本(精确 semver 或 'latest')。
|
|
120
|
+
* 返回:
|
|
121
|
+
* - install:本地未装(含 target = latest,解析后照常安装)
|
|
122
|
+
* - upgrade:本地低于目标(唯一应安装的关系)
|
|
123
|
+
* - equal:本地与目标相等
|
|
124
|
+
* - local-ahead:本地高于目标(保留,不降级)
|
|
125
|
+
* - unknown:任一侧无法解析(fail-safe 保留)
|
|
126
|
+
* - resolve-needed:目标为 latest(需先解析出精确版本再复判)
|
|
127
|
+
*
|
|
128
|
+
* 注意:compareSemver 对不可解析输入返回 0,必须先 parseSemver 校验,
|
|
129
|
+
* 不能直接拿 compare === 0 当相等。
|
|
130
|
+
*/
|
|
131
|
+
function versionRelation(installed, target) {
|
|
132
|
+
if (!installed) return 'install';
|
|
133
|
+
if (target === 'latest') return 'resolve-needed';
|
|
134
|
+
if (!parseSemver(installed) || !parseSemver(target)) return 'unknown';
|
|
135
|
+
const diff = compareSemver(installed, target);
|
|
136
|
+
if (diff === 0) return 'equal';
|
|
137
|
+
return diff > 0 ? 'local-ahead' : 'upgrade';
|
|
138
|
+
}
|
|
139
|
+
|
|
116
140
|
/** 从多个安装副本中选择代表版本:优先合法版本中的最高 semver。 */
|
|
117
141
|
function selectRepresentativeVariant(variants) {
|
|
118
142
|
let selected = null;
|
|
@@ -436,6 +460,7 @@ module.exports = {
|
|
|
436
460
|
parseFrontmatter,
|
|
437
461
|
parseSemver,
|
|
438
462
|
compareSemver,
|
|
463
|
+
versionRelation,
|
|
439
464
|
strictFrontmatterWarnings,
|
|
440
465
|
scanSkillDir,
|
|
441
466
|
defaultRoots,
|
|
@@ -12,7 +12,24 @@ symlink),升级只改真源,已链接宿主即时生效。
|
|
|
12
12
|
- 技能台账:`<hub>/.yotta-hub.json`
|
|
13
13
|
- 链接台账:`<hub>/.yotta-links.json`
|
|
14
14
|
- 收敛回收站:`~/.yottaskills/trash/<时间戳>/<宿主>/<技能>/`(保留 7 天,可用 `YOTTA_SKILLS_TRASH` 覆盖)
|
|
15
|
-
-
|
|
15
|
+
- 覆盖方式(优先级):`--hub <dir>` > `YOTTA_SKILLS_HUB` > `config.json`(`hub config set`)> 默认
|
|
16
|
+
|
|
17
|
+
## Hub 位置持久化(0.29.2 起)
|
|
18
|
+
|
|
19
|
+
`hub config` 把 Hub 位置写进用户级配置(与 hosts.json / self.json 同根):
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx -y @yottameta/yotta-skills hub config get # 生效位置 + 来源 + 配置文件
|
|
23
|
+
npx -y @yottameta/yotta-skills hub config set --hub "D:\my-hub" # 只换指针(旧 Hub 保留)
|
|
24
|
+
npx -y @yottameta/yotta-skills hub config set --hub "D:\my-hub" --move # 迁移:复制校验 → 重链 → 旧 Hub 入回收站
|
|
25
|
+
npx -y @yottameta/yotta-skills hub config clear # 清除覆盖,回到 flag > env > 默认
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- 配置文件:`<YOTTA_SKILLS_HOME>/config.json`(默认 `~/.yottaskills/config.json`;schema v1,原子写)。
|
|
29
|
+
- 校验(fail-closed):路径不能是文件、不能与配置根 / 独立安装目录重叠、不能是锁 / 数据桥接目录;路径不存在允许(首次使用时创建)。
|
|
30
|
+
- `--move` 语义:旧 Hub 复制到新位置 → 逐技能 treeHash 校验 → 切换配置 → `hub link` 以新 Hub 为源 `--force` 重链 → 旧 Hub 入回收站(保留 7 天)。校验失败不切配置;重链未全部完成时旧 Hub 保留供重试(新旧内容一致,混合链接均可用)。
|
|
31
|
+
- 面板「Hub 位置」区显示来源 / 配置覆盖 / 重启提示,并提供「设置新位置 / 清除覆盖」(写操作需页面令牌 + `hub-config` 确认串);已在运行的 `view` 需重启后生效。
|
|
32
|
+
- 误用防护:`--hub` 只允许与 `hub` / `view` / `where` 一起使用;其它命令(含裸 `--hub`)fail-closed 报错,不再静默忽略。
|
|
16
33
|
|
|
17
34
|
## 元技能唯一性收敛(`hub link` 执行时)
|
|
18
35
|
|
|
@@ -87,6 +104,36 @@ npx -y @yottameta/yotta-skills hub hosts remove ~/my-agent/skills --purge --yes
|
|
|
87
104
|
注册表 = `<root>/hosts.json`(root = `YOTTA_SKILLS_HOME` 或 `~/.yottaskills`,schema v1,
|
|
88
105
|
可 diff);面板「宿主矩阵 → 添加自定义目录」等价可用,写操作需页面令牌与确认串。
|
|
89
106
|
|
|
107
|
+
## 不接管与目录覆盖(0.29.1 起)
|
|
108
|
+
|
|
109
|
+
**不接管**(excluded):把某个智能体或目录从发现、显示、链接三层全部跳过
|
|
110
|
+
(`--include-discovered` 也不纳入);已建立的链接不受影响,可用 `hub unlink` 清理:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
npx -y @yottameta/yotta-skills hub hosts exclude box # 按 agentId
|
|
114
|
+
npx -y @yottameta/yotta-skills hub hosts exclude "D:\my-agent\skills" # 按目录
|
|
115
|
+
npx -y @yottameta/yotta-skills hub hosts include box # 恢复接管
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**目录覆盖**(override):用户级覆盖某个已收录 agentId 的内置映射目录
|
|
119
|
+
(不改宿主配置;被覆盖的旧目录不再进入默认发现 / 链接):
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
npx -y @yottameta/yotta-skills hub hosts set box --dir "D:\box-agent\skills"
|
|
123
|
+
npx -y @yottameta/yotta-skills hub hosts set box --clear # 恢复内置映射
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
面板「宿主矩阵」提供等价动作:行内「不接管 / 编辑目录 / 标记可用 / 忽略」,
|
|
127
|
+
底部「不接管名单」区可「恢复接管」;写操作均写 Hub 审计。
|
|
128
|
+
|
|
129
|
+
**YottaCode 不纳入接管**:YottaCode 自带三层技能管理(skill-inventory / skill /
|
|
130
|
+
user-skills),元阁对其 `.yottacode` 路径与 `YOTTACODE_HOME` 子树在映射、扫描、
|
|
131
|
+
注册、标记、链接全部 fail-closed 排除,避免重复管理。
|
|
132
|
+
|
|
133
|
+
**未核实映射 ≠ 自动发现**:内置映射里尚未逐机核实的条目显示「映射·未核实」;
|
|
134
|
+
「自动发现」只用于文件系统扫描结果。`installed` 配对按「用户注册 / 已核实映射 > env >
|
|
135
|
+
未核实映射 > 自动发现」确定性优选(同级按技能数 + 路径稳定排序)。
|
|
136
|
+
|
|
90
137
|
## 命令
|
|
91
138
|
|
|
92
139
|
```bash
|
|
@@ -77,14 +77,17 @@
|
|
|
77
77
|
|
|
78
78
|
- 读取目标 `<dest>/<slug>/SKILL.md` 的 frontmatter `version`;
|
|
79
79
|
- 与清单 `version` 一致 → 跳过(幂等:第二次安装 27 个全部跳过);
|
|
80
|
-
-
|
|
80
|
+
- **只升不降(0.29.1 起)**:本地版本高于目标(清单 pin / npm latest)→ 保留并标注「本地领先」,
|
|
81
|
+
`update` / `hub update` 跳过、`update --check` 不计更新(退出码 0)、`update --auto` 不动作;
|
|
82
|
+
`latest` / `--range` 目标在解析出精确版本后、任何写入之前复判;
|
|
83
|
+
- `--force` 强制重装 / 显式降级;`rollback` 恢复快照;`update` 对「缺失 / 需要升级」的技能安装。
|
|
81
84
|
|
|
82
85
|
## 范围控制(接多少管多少)
|
|
83
86
|
|
|
84
87
|
| 用法 | 范围 |
|
|
85
88
|
|---|---|
|
|
86
89
|
| `install`(无旗标) | 全量清单全部安装 |
|
|
87
|
-
| `update`(无旗标) | 补齐缺失 +
|
|
90
|
+
| `update`(无旗标) | 补齐缺失 + 升级已装(只升不降:本地更高保留不降级) |
|
|
88
91
|
| `update --installed-only` | 只维护目标目录已安装的家族技能(不补装缺失;无匹配时退出码 0) |
|
|
89
92
|
| `--only <a,b>` / `--domain <name>` | 只处理指定技能 / 家族;与 `--installed-only` 取交集 |
|
|
90
93
|
| `update --check` / `--auto` | 只检查 / 维护已装技能,不补装缺失 |
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# 全家技能清单(27 个)
|
|
2
2
|
|
|
3
3
|
> 机器权威源:`skills.json`(随包分发);本文件为人工可读副本,新技能发布后须同步更新
|
|
4
|
-
> `skills.json`(登记表为内部台账,不随包分发)。清单更新日期:2026-10-
|
|
4
|
+
> `skills.json`(登记表为内部台账,不随包分发)。清单更新日期:2026-10-05。
|
|
5
5
|
|
|
6
6
|
| slug | 中文名 | npm 包 | 清单版本 | 家族 | 说明 |
|
|
7
7
|
|---|---|---|---|---|
|
|
8
8
|
| `yotta-anti-shallow` | 元谨 | `@yottameta/yotta-anti-shallow` | 1.4.2 | quality | 防 AI 敷衍规则引擎(深入分析/根因追溯时激活) |
|
|
9
9
|
| `yotta-code-quality` | 元质 | `@yottameta/yotta-code-quality` | 0.4.3 | quality | 结对式代码质量评审(十二类腐化风险 + 0-100 健康分) |
|
|
10
10
|
| `yotta-workflow` | 元序 | `@yottameta/yotta-workflow` | 0.4.3 | workflow | 跨会话/跨项目通用工作流协议(状态就近存) |
|
|
11
|
-
| `yotta-memory` | 元忆 | `@yottameta/yotta-memory` | 0.22.
|
|
11
|
+
| `yotta-memory` | 元忆 | `@yottameta/yotta-memory` | 0.22.3 | memory | 有权限边界的文件式智能体记忆(FACT/PREF/BOUND/COMMIT) |
|
|
12
12
|
| `yotta-learn` | 元习 | `@yottameta/yotta-learn` | 0.2.2 | memory | 学习沉淀 CLI:错误/纠正/洞见沉淀为 .learnings/ 条目 |
|
|
13
13
|
| `yotta-security-audit` | 元安 | `@yottameta/yotta-security-audit` | 0.3.1 | security | 安全扫描引擎:13 类检测器 + 系统安全基线 + 学生数据隐私(教育版) |
|
|
14
14
|
| `yotta-vetter` | 元审 | `@yottameta/yotta-vetter` | 0.2.7 | security | 安全审查协议:四阶段 review + SAFE TO INSTALL 判定 |
|
|
@@ -197,10 +197,10 @@
|
|
|
197
197
|
]
|
|
198
198
|
},
|
|
199
199
|
"yotta-memory": {
|
|
200
|
-
"version": "0.22.
|
|
201
|
-
"treeHash": "sha256:
|
|
200
|
+
"version": "0.22.3",
|
|
201
|
+
"treeHash": "sha256:4f499e0d61ec567d76a22ca6cb43fb2488129d3043a880b4d40b2c96de377ef0",
|
|
202
202
|
"files": 18,
|
|
203
|
-
"bytes":
|
|
203
|
+
"bytes": 1303762,
|
|
204
204
|
"mode": "strict",
|
|
205
205
|
"exceptions": [
|
|
206
206
|
{
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifestVersion": 1,
|
|
3
|
-
"updated": "2026-10-
|
|
3
|
+
"updated": "2026-10-05",
|
|
4
4
|
"note": "清单同步要求:每次技能发布新版本后,按 YottaSkills 技能登记表更新本文件(登记表为内部台账,不随包分发)。",
|
|
5
5
|
"skills": [
|
|
6
6
|
{
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"slug": "yotta-memory",
|
|
32
32
|
"name": "元忆",
|
|
33
33
|
"pkg": "@yottameta/yotta-memory",
|
|
34
|
-
"version": "0.22.
|
|
34
|
+
"version": "0.22.3",
|
|
35
35
|
"domain": "memory",
|
|
36
36
|
"runtimePayload": ["bin"],
|
|
37
37
|
"desc": "有权限边界的文件式智能体记忆(FACT/PREF/BOUND/COMMIT)"
|