@dependfix/skills 0.1.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 CaoMeiYouRen <https://github.com/CaoMeiYouRen>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # @dependfix/skills
2
+
3
+ dependfix 产品 Agent Skill 权威源(`dependfix-remediator`),随 npm 发布。
4
+
5
+ ## 这是什么
6
+
7
+ `dependfix-remediator` 是面向最终用户的 Agent Skill:把 dependfix 的安全告警修复能力封装为 AI 助手可直接执行的编排指令(拉告警 → 研判 → 修复 → 报告),支持 Claude Code / GitHub Copilot / Cursor / OpenCode 等主流 agent 工具加载。
8
+
9
+ ## 安装方式
10
+
11
+ 主通道(npx skills 生态,推荐):
12
+
13
+ ```bash
14
+ npx skills add dependfix/dependfix -s dependfix-remediator -g -a claude-code -a opencode -a cursor
15
+ ```
16
+
17
+ 离线兜底(依赖 dependfix CLI,无 npx skills 环境):
18
+
19
+ ```bash
20
+ npx dependfix skills install
21
+ ```
22
+
23
+ ## 内容
24
+
25
+ - `dependfix-remediator/SKILL.md` — 编排主体(能力契约 + 执行后端探测 + 决策树 + 场景编排)
26
+ - `dependfix-remediator/REFERENCES.md` — CLI 命令参考与 MCP 双后端衔接(一致性断言清单)
27
+
28
+ 仓库根 `skills/dependfix-remediator/` 为 npx skills 生态分发副本,由 `scripts/sync-skills.mjs` 镜像同步(禁止直接编辑,一致性由测试保证)。
29
+
30
+ ## 开发
31
+
32
+ ```bash
33
+ pnpm sync:skills # 同步权威源到仓库根分发目录(scripts/sync-skills.mjs)
34
+ pnpm test # 一致性 / frontmatter 规范 / MCP 契约测试(packages/skills/test/)
35
+ ```
@@ -0,0 +1,142 @@
1
+ # dependfix CLI 命令参考
2
+
3
+ > 本文件是 dependfix-remediator skill 的详细参考,由 SKILL.md 按需引用。
4
+ > 完整参数以 `npx dependfix --help` 输出为准。
5
+
6
+ ## 运行模式(positional)
7
+
8
+ | 模式 | 说明 |
9
+ |------|------|
10
+ | `report-only` | 只读扫描,输出报告,不修改文件(默认) |
11
+ | `fix` | 修复 + 本地验证,不提交不推送 |
12
+ | `fix-and-pr` | 修复 + 创建修复分支与 PR |
13
+ | `cleanup-branches` | 列出 / 清理已合并的 dependfix 修复分支 |
14
+
15
+ ## 完整参数表
16
+
17
+ ### 仓库与范围
18
+
19
+ | 参数 | 说明 |
20
+ |------|------|
21
+ | `--repo, -r` | 目标仓库 `owner/repo`,逗号分隔多个 |
22
+ | `--repos-file` | 从文件读取仓库列表(每行一个 owner/repo) |
23
+ | `--owner` | owner / org 自动发现(逗号分隔多个或多次传入) |
24
+ | `--repo-topics` | 发现结果 topic 白名单(逗号分隔,AND 语义) |
25
+ | `--repo-include` | 仓库白名单 glob(如 `owner/*`、`owner/pkg-*`) |
26
+ | `--repo-exclude` | 仓库黑名单 glob(与 include 冲突时胜出) |
27
+ | `--repo-topics-exclude` | 发现结果 topic 黑名单 |
28
+
29
+ ### 凭据与数据源
30
+
31
+ | 参数 | 说明 |
32
+ |------|------|
33
+ | `--github-token` | GitHub PAT(多仓库 / PR / Code Scanning 均可用) |
34
+ | `--alerts-token` | Dependabot alerts 专用最小权限 PAT(缺省回退 `--github-token`) |
35
+ | `--alerts-source` | `github-dependabot`(默认)或 `pnpm-audit`(本地无 token 回退) |
36
+ | `--code-scanning` | 并行拉取 Code Scanning 告警(需 `security-events: read`) |
37
+
38
+ 环境变量:`GITHUB_TOKEN` / `DEPENDFIX_GITHUB_TOKEN`、`ALERTS_TOKEN` / `DEPENDFIX_ALERTS_TOKEN`、`DEPENDFIX_AI_API_KEY`。
39
+
40
+ ### 修复行为
41
+
42
+ | 参数 | 说明 |
43
+ |------|------|
44
+ | `--severity-threshold` | critical / high / medium / all,默认 high |
45
+ | `--dry-run` | 预演模式,不写文件 |
46
+ | `--commit` | 修复后本地当前分支直接提交(不推送、不创建 PR) |
47
+ | `--create-pr` | 创建 Pull Request |
48
+ | `--allow-major-upgrade` | 跨线告警显式授权自动升级(仅 CLI;workspace 成员独占声明 / 多版本共存维持人工) |
49
+ | `--upgrade-groups` | 显式分组,格式 `name1:pkg1,pkg2;name2:pkg3` |
50
+ | `--max-alerts-per-repository` | 每仓库最多处理告警数,默认 20 |
51
+ | `--commands` | 自定义验证命令(逗号分隔),覆盖默认 install/lint/build |
52
+ | `--toolchain-pnpm-version` | lockfile 修复用的 pnpm 版本 |
53
+
54
+ ### 多仓库并发
55
+
56
+ | 参数 | 说明 |
57
+ |------|------|
58
+ | `--max-concurrency` | 并发窗口 1-16,默认 1(保守串行,>1 可能触发 GitHub 限流) |
59
+ | `--max-retries` | 限流重试次数 0-10,默认 3 |
60
+ | `--max-backoff-ms` | 退避单次等待上限毫秒,默认 30000 |
61
+
62
+ ### AI breaking change 研判
63
+
64
+ | 参数 | 说明 |
65
+ |------|------|
66
+ | `--ai` | 开启 AI 研判(默认关闭;dry-run 不触发、不产生费用) |
67
+ | `--ai-provider` | `openai-compatible`(默认)或 `anthropic` |
68
+ | `--ai-model` | 模型名(默认 deepseek-v4-flash) |
69
+ | `--ai-base-url` | OpenAI 兼容端点基地址(默认 https://api.deepseek.com) |
70
+ | `--ai-api-url` | Anthropic 兼容端点(仅 anthropic 生效) |
71
+ | `--ai-api-key` | API Key(优先 `DEPENDFIX_AI_API_KEY` env) |
72
+ | `--ai-trigger` | 触发范围:failure / major / both(默认 both) |
73
+
74
+ ### 其他
75
+
76
+ | 参数 | 说明 |
77
+ |------|------|
78
+ | `--history` | 查询仓库历史运行摘要(读 `dependfix-reports/index.json`,不执行扫描) |
79
+ | `--verbose` | 输出详细日志 |
80
+
81
+ ## 数据源说明
82
+
83
+ - **github-dependabot**:从 GitHub Dependabot alerts API 拉取。需要 PAT(`Dependabot alerts: read` / `security_events`)或 GitHub App token;`GITHUB_TOKEN`(secrets 默认 token)无法读取。
84
+ - **code-scanning**:从 GitHub Code Scanning alerts API 拉取,与 Dependabot 并行(追加 `--code-scanning`)。`GITHUB_TOKEN` 默认具备 `security-events: read`,可直接使用。
85
+ - **pnpm-audit**:本地无 token 场景,扫描当前工作区 lockfile;repository 优先 `--repo` → git remote → 本地目录兜底。
86
+
87
+ ## 报告产物
88
+
89
+ - 每次运行生成 Markdown 报告,落盘于 `dependfix-reports/` 目录。
90
+ - `dependfix-reports/index.json` 维护历史摘要(供 `--history` 查询与趋势统计)。
91
+ - 报告包含:扫描范围、告警明细、修复/未修复清单、验证结果、AI 研判用量(如开启)。
92
+
93
+ ## 常见问题
94
+
95
+ | 现象 | 处置 |
96
+ |------|------|
97
+ | `Missing GitHub token` | 设置 `GITHUB_TOKEN` / `DEPENDFIX_GITHUB_TOKEN`,或改用 `--alerts-source pnpm-audit` |
98
+ | Dependabot alerts 拉取 404 / 403 | token 缺少 `Dependabot alerts: read` / `security_events` 权限 |
99
+ | 升级验证失败 | 自动回滚该依赖并记为未修复(人工处理) |
100
+ | 429 / rate limit | 默认指数退避重试 3 次;可调 `--max-retries` / `--max-backoff-ms` |
101
+ | AI 研判开启但缺 Key | 设置 `DEPENDFIX_AI_API_KEY` 或 `--ai-api-key` |
102
+
103
+ ## MCP 双后端衔接(后续 MCP 交付扩展点)
104
+
105
+ > 本文档定义 SKILL.md"执行后端探测"的细节与双后端一致性验证基准。
106
+ > 当前 MCP Server 未发布(规划于后续里程碑),本 skill 全部走 CLI;MCP 发布后无需改版即可双后端工作。
107
+
108
+ ### 探测方法明细
109
+
110
+ | 环境 | 检测方式 |
111
+ |------|---------|
112
+ | Claude Code | `claude mcp list`;或项目根 `.mcp.json` 的 `mcpServers` 字段含 dependfix server |
113
+ | OpenCode | `opencode.json` / `~/.config/opencode/opencode.json` 的 `mcp` 配置含 dependfix server |
114
+ | 通用 | 当前会话工具列表中存在以下 4 个 tool 即视为 MCP 后端可用 |
115
+
116
+ ### MCP tool 映射明细
117
+
118
+ | 能力 | MCP tool | 入参要点 | CLI 对应 |
119
+ |------|----------|---------|---------|
120
+ | 拉取告警 | `fetch_alerts` | `owner`、`repo`(或多仓库列表)、`severityThreshold`、`includeCodeScanning` | `dependfix report-only` |
121
+ | 扫描并修复 | `run_scan` | `repo`、`mode`(fix / fix-and-pr)、`severityThreshold`、`dryRun` | `dependfix fix` / `fix-and-pr` |
122
+ | 修复指定依赖 | `fix_dependency` | `repo`、`dependency`、`createPr`、`allowMajorUpgrade` | `dependfix fix`(分组指定) |
123
+ | 查询历史报告 | `get_last_report` | `repo`(缺省取最近一次) | `dependfix --history <owner/repo>` |
124
+
125
+ > 说明:MCP tool 的最终入参 schema 以 MCP Server 实际交付为准;本表为能力契约映射的基准约定,MCP 实现不得改变各能力语义。MCP Server 交付时须与本表逐项核对(tool 名与入参 schema),确保"skill 无需改版"承诺闭环。
126
+
127
+ ### 双后端一致性断言清单(MCP 交付验证基准)
128
+
129
+ 以 `@dependfix/core` 报告契约为基准(RunResult JSON;`dependfix-reports/index.json` 历史条目为 CLI archiver 的派生格式),MCP tool 输出必须与 CLI 报告同源一致:
130
+
131
+ | 能力 | CLI 侧契约基准(字段) | MCP 一致性断言 |
132
+ |------|------------------------|---------------|
133
+ | 拉取告警 | RunResult:`summary.alertsFound` / `summary.alertsFixable` / `repositories[].alertsCount` / `alerts[]` | `fetch_alerts` 返回的告警数与严重级别分布与 CLI 报告一致;`alerts[]` 明细字段(package/severity/manifest)与 RunResult 对齐 |
134
+ | 扫描并修复 | RunResult:`summary.alertsFixed` / `alertsFailed` / `alertsSkipped` / `actions[]`(type=dependency-upgrade) | `run_scan` 返回的 fixed/failed/skipped 计数与 CLI 报告一致;`actions[]` 的 target/fromVersion/toVersion 对齐 |
135
+ | 修复指定依赖 | RunResult:`actions[]` + `summary`(单仓库维度) | `fix_dependency` 返回的修复结果与 CLI 对同一依赖的修复记录一致(含 PR 链接如创建) |
136
+ | 查询历史报告 | ArchiveRunEntry:`repoStats[]`(alertsCount/fixed/failed/durationMs)+ `runId` | `get_last_report` 返回与 `dependfix-reports/index.json` 对应条目同源(字段值一致) |
137
+
138
+ ### 降级路径规则
139
+
140
+ 1. 探测不到 MCP → 直接 CLI,不提示安装。
141
+ 2. MCP tool 调用失败(不存在 / 超时 / 服务端错误)→ 改用 CLI 完成同能力调用,并向用户说明降级原因。
142
+ 3. MCP 输出与 CLI 报告不一致(怀疑 MCP 缺陷)→ 以 CLI 报告为准,记录差异供后续修复。
@@ -0,0 +1,155 @@
1
+ ---
2
+ name: dependfix-remediator
3
+ description: 自动拉取并修复 GitHub Dependabot / Code Scanning 安全告警:扫描仓库依赖漏洞、按严重级别研判、升级有漏洞的依赖、创建修复 PR、生成可审计报告。Use when 用户提到安全告警、dependabot、依赖漏洞、依赖升级、code scanning、pnpm audit、安全扫描、自动修复安全问题时使用。
4
+ ---
5
+
6
+ # dependfix-remediator
7
+
8
+ 自动处理 GitHub 安全告警(Dependabot alerts / Code Scanning alerts)的修复工作流:拉取告警 → 研判 → 修复 → 报告,全链路闭环。
9
+
10
+ ## 能力契约与执行后端
11
+
12
+ 本 skill 只依赖以下能力契约,不绑定具体实现:
13
+
14
+ | 能力 | 当前后端(dependfix CLI) | MCP 预留位 |
15
+ |------|--------------------------|-----------|
16
+ | 拉取告警 | `npx dependfix report-only` | fetch_alerts |
17
+ | 修复依赖 | `npx dependfix fix` | run_scan / fix_dependency |
18
+ | 修复并创建 PR | `npx dependfix fix-and-pr` | fix_dependency |
19
+ | 查询历史报告 | `npx dependfix --history <owner/repo>` | get_last_report |
20
+ | 清理已合并分支 | `npx dependfix cleanup-branches` | — |
21
+
22
+ 未配置 MCP 时全部走 CLI;MCP 接入后(后续版本)探测到 MCP 工具则优先调用,两条后端输出保持一致。本 skill 当前不依赖 MCP,CLI 后端开箱即用。
23
+
24
+ ## 执行后端探测
25
+
26
+ 开始编排前先确定执行后端(只需一次):
27
+
28
+ 1. **检查当前会话是否已加载 dependfix MCP 工具**:工具列表中是否存在 `fetch_alerts` / `run_scan` / `fix_dependency` / `get_last_report`(server 前缀可能为 `dependfix` 或 `@dependfix/mcp`)。不确定时用命令确认:
29
+ - Claude Code:`claude mcp list`(或检查项目根 `.mcp.json` 的 `mcpServers`)
30
+ - OpenCode:检查 `opencode.json` / `~/.config/opencode/opencode.json` 的 `mcp` 配置
31
+ 2. **决策规则**:
32
+ - 4 个 MCP tool 均可用 → **MCP tool 优先**(按能力契约映射表调用,详见 [REFERENCES.md](REFERENCES.md))
33
+ - 未配置 MCP 或探测不到 → **CLI 后端**(本 skill 默认路径)
34
+ - MCP 调用失败(tool 不存在 / 超时 / 报错)→ **降级 CLI 并告知用户**,不中断流程
35
+ 3. 两条后端的输出以同一份能力契约(报告结构见 [REFERENCES.md](REFERENCES.md) 一致性断言清单)为准,MCP 与 CLI 结果应一致;发现不一致时以 CLI 报告为准并记录。
36
+
37
+ ## 前置条件
38
+
39
+ 1. Node.js >= 20(检查:`node --version`)。
40
+ 2. 工作目录为 git 仓库(检查:`git rev-parse --is-inside-work-tree`)。
41
+ 3. 凭据(按场景):
42
+ - GitHub 仓库:设置 `GITHUB_TOKEN` 或 `DEPENDFIX_GITHUB_TOKEN` 环境变量。注意 Dependabot alerts 需要 PAT 且具备 `Dependabot alerts: read` / `security_events` 权限,普通 `GITHUB_TOKEN` 无法读取 Dependabot alerts(Code Scanning 可用)。
43
+ - 本地无 token:使用 `--alerts-source pnpm-audit` 走本地 lockfile 扫描,无需 GitHub 凭据。
44
+
45
+ ## 工作流编排
46
+
47
+ ### 决策树
48
+
49
+ 收到用户请求后,先判断场景:
50
+
51
+ - 只看告警,不修改 → **场景 A:只读扫描**
52
+ - 自动修复(本地验证,不推送)→ **场景 B:自动修复**
53
+ - 修复并创建 PR → **场景 C:修复 + PR**
54
+ - 修复整个 owner / 仓库列表 → **场景 D:多仓库**
55
+ - 本地仓库且无 GitHub token → **场景 E:pnpm audit**
56
+ - 查看历史运行结果 → **场景 F:历史查询**
57
+ - 清理已合并的修复分支 → **场景 G:分支清理**
58
+
59
+ ### 场景 A:只读扫描(报告)
60
+
61
+ ```bash
62
+ npx dependfix report-only --repo <owner/repo> --severity-threshold high
63
+ ```
64
+
65
+ - 拉取 Dependabot 告警并按严重级别过滤,输出 Markdown 报告到 `dependfix-reports/`,不修改任何文件。
66
+ - 需要同时扫 Code Scanning:追加 `--code-scanning`。
67
+ - 汇报:告警总数、严重级别分布、修复建议摘要、报告路径。
68
+
69
+ ### 场景 B:自动修复(默认路径)
70
+
71
+ ```bash
72
+ npx dependfix fix --repo <owner/repo> --severity-threshold high
73
+ ```
74
+
75
+ - 自动升级可修复依赖 → 强制验证(install + lint + build)→ 生成报告。默认不提交不推送。
76
+ - 需要本地提交时追加 `--commit`;需要预演时先加 `--dry-run`(只输出将要做的修改,不写文件)。
77
+ - 汇报:修复的告警、验证结果、未修复(需人工处理)清单、报告路径。
78
+
79
+ ### 场景 C:修复 + 创建 PR
80
+
81
+ ```bash
82
+ npx dependfix fix-and-pr --repo <owner/repo>
83
+ ```
84
+
85
+ - 修复 + 自动创建修复分支与 PR(PR 去重、分组升级)。
86
+ - 汇报:PR 链接 / 编号列表、报告路径。
87
+
88
+ ### 场景 D:多仓库治理
89
+
90
+ ```bash
91
+ npx dependfix fix --owner <org> --severity-threshold high
92
+ # 或从文件读取仓库列表(每行一个 owner/repo):
93
+ npx dependfix fix --repos-file repos.txt
94
+ ```
95
+
96
+ - 自动发现 owner 下全部仓库(可用 `--repo-include` / `--repo-exclude` glob 过滤)。
97
+ - 汇报:每个仓库的结果摘要与失败隔离情况。
98
+
99
+ ### 场景 E:本地无 token(pnpm audit)
100
+
101
+ ```bash
102
+ npx dependfix fix --alerts-source pnpm-audit
103
+ ```
104
+
105
+ - 在目标仓库内运行,基于本地 lockfile 扫描;目标仓库优先取 `--repo`,其次 git remote,最后当前目录。
106
+ - 汇报:audit 告警数与修复结果。
107
+
108
+ ### 场景 F:历史报告查询
109
+
110
+ ```bash
111
+ npx dependfix --history <owner/repo>
112
+ ```
113
+
114
+ - 读取 `dependfix-reports/index.json` 摘要,不执行扫描。
115
+ - 汇报:历史运行时间线及每次结果摘要。
116
+
117
+ ### 场景 G:清理已合并分支
118
+
119
+ ```bash
120
+ npx dependfix cleanup-branches --repo <owner/repo>
121
+ ```
122
+
123
+ - 列出已合并 / 已关闭的 dependfix 修复分支,交互确认后删除(非 TTY 环境默认拒绝删除);`--dry-run` 仅列清单。
124
+ - fix-and-pr 模式中追加 `--cleanup-branches-auto` 可在结束后非交互自动删除已合并 / 已关闭分支(CI 可用,不删有 open PR 的分支)。
125
+
126
+ ## 关键参数速查
127
+
128
+ | 参数 | 说明 | 默认 |
129
+ |------|------|------|
130
+ | `--severity-threshold` | 严重级别阈值:critical / high / medium / all | high |
131
+ | `--code-scanning` | 并行拉取 Code Scanning 告警 | 关闭 |
132
+ | `--allow-major-upgrade` | 显式授权跨大版本自动升级(仅 CLI) | 关闭 |
133
+ | `--max-alerts-per-repository` | 每个仓库最多处理告警数 | 20 |
134
+ | `--ai` | 开启 AI breaking change 研判(需配置 API Key) | 关闭 |
135
+ | `--dry-run` | 预演模式,不写文件不触发 AI | 关闭 |
136
+ | `--alerts-source` | github-dependabot(默认)或 pnpm-audit | github-dependabot |
137
+
138
+ 完整参数与说明见 [REFERENCES.md](REFERENCES.md)。
139
+
140
+ ## 安全与执行纪律
141
+
142
+ - Token 优先用环境变量(`GITHUB_TOKEN` / `DEPENDFIX_GITHUB_TOKEN` / `DEPENDFIX_AI_API_KEY`),避免命令行参数泄露到进程列表与 shell history。
143
+ - 修复类操作前先确认仓库工作区干净(`git status`);存在未提交改动时先与用户确认。
144
+ - AI 研判默认关闭,开启会产生 API 费用,先与用户确认。
145
+ - 跨线升级(`--allow-major-upgrade`)风险高,仅在用户明确要求时使用;升级失败会自动回滚。
146
+ - 报告落盘在 `dependfix-reports/`,可归档、可审计,勿删除。
147
+
148
+ ## 完成汇报模板
149
+
150
+ 每次执行完向用户汇报:
151
+
152
+ 1. 扫描范围:仓库 / 数据源 / 严重级别阈值。
153
+ 2. 结果:修复 N 个告警,未修复 M 个(含原因与建议)。
154
+ 3. 验证状态:install / lint / build 是否通过。
155
+ 4. 产物:报告路径、PR 链接(如有)。
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@dependfix/skills",
3
+ "version": "0.1.0",
4
+ "description": "dependfix 产品 Agent Skills 权威源(dependfix-remediator),随 npm 发布",
5
+ "author": "CaoMeiYouRen",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "keywords": [
9
+ "skills",
10
+ "agent-skills",
11
+ "dependabot",
12
+ "security",
13
+ "dependfix"
14
+ ],
15
+ "homepage": "https://github.com/dependfix/dependfix#readme",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/dependfix/dependfix.git"
19
+ },
20
+ "bugs": {
21
+ "url": "https://github.com/dependfix/dependfix/issues"
22
+ },
23
+ "files": [
24
+ "dependfix-remediator",
25
+ "README.md"
26
+ ],
27
+ "engines": {
28
+ "node": ">=20"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ }
33
+ }