@v587d/capital-generation 2.7.10 → 2.7.11

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
@@ -7,6 +7,29 @@
7
7
  - **第三位(patch)**:不破坏既有工具 / 配置 / 会话的新增与修复(如 2.1.1、2.1.2)。
8
8
  - **第二位(minor)**:有需要用户知晓的行为变更,且段内附迁移说明(如 2.1.0 的图表呈现通道重做、2.2.0 的数据源与检索来源扩容、2.4.0 的**必须换宿主版本**——本插件自己的工具与数据契约没变,所以只抬第二位)。
9
9
 
10
+ ## [2.7.11] - 2026-10-14
11
+
12
+ 内部整理:插件包里两颗 host 平面组件的目录与包名收短了——`capital-config/` → `config/`(`@v587d/config`)、
13
+ `capital-watchlist/` → `watchlist/`(`@v587d/watchlist`)。**没有一项你看得见的东西跟着变**:设置卡片
14
+ 还在老位置(「插件」→ Capital Generation → 顶部三格),「包含的组件」里那四行的名字仍是
15
+ `capital-config` / `capital-charts` / `capital-watchlist` / `preset-capital-generation`,已保存的凭据引用名、
16
+ 已勾选的精选 Skills、自选股清单与你自己标的持仓比例**全部原样读得到**——那两行的身份、配置的命名空间、
17
+ 自选股的存储域名和 `/capital-watchlist` 路由都刻意没改,就是为了升级不产生迁移。
18
+
19
+ 宿主要求与 2.7.10 相同(DSH`@0.2.0-rc.2`),升级无需迁移。唯一要自己动手的情形:如果你手改过 profile
20
+ 文件、在里面写了 `./capital-config/index.js` 这类路径,改成 `./config/index.js`(自选股那颗同理);
21
+ 由宿主自己生成的那份会在重装时重写,不用管。
22
+
23
+ ### Changed
24
+
25
+ - **两颗嵌套包的目录与包名**(研发侧可见):`config/` = `@v587d/config`、`watchlist/` = `@v587d/watchlist`;
26
+ 生成两份客户端 bundle 的脚本一并改名 `scripts/build-config-client.mjs` / `scripts/build-watchlist-client.mjs`。
27
+ - **`npm run smoke:boot` 的 bundle 检查改成现读包名**。它原先在首页 HTML 里 grep `capital-config` 这一串
28
+ 来确认客户端 bundle 进了启动图,而那串实际是**包名**(宿主按最近的 `package.json` 归属 bundle 身份)、
29
+ 不是行 id——改名之后这条会一直报 ⚠️ 且非零退出。现在三颗嵌套包的身份都从各自 `package.json` 现读,
30
+ 下次再改名不必修探针。真机复核:三颗 bundle 均报告送达,四行组件、`capital-config` 命名空间与两条
31
+ 路由围栏照常通过。
32
+
10
33
  ## [2.7.10] - 2026-10-13
11
34
 
12
35
  精选 Skill 从"会话目录里的一行摘要"升级为**任务级索引**:主 Agent 加载单一标的投研 / 事件影响 /
package/README.md CHANGED
@@ -15,7 +15,7 @@
15
15
  <p align="center">
16
16
  <a href="https://awesome-dsh-plugin.com"><img src="https://awesome-dsh-plugin.com/badge.svg" alt="awesome · DSH plugin"></a>
17
17
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-green" alt="License"></a>
18
- <a href="https://github.com/v587d/capital-generation/releases"><img src="https://img.shields.io/badge/version-2.7.10-9cf" alt="Version"></a>
18
+ <a href="https://github.com/v587d/capital-generation/releases"><img src="https://img.shields.io/badge/version-2.7.11-9cf" alt="Version"></a>
19
19
  <a href="https://www.npmjs.com/package/@v587d/capital-generation"><img src="https://img.shields.io/npm/v/%40v587d%2Fcapital-generation" alt="npm version"></a>
20
20
  </p>
21
21
 
@@ -167,7 +167,7 @@ https://github.com/v587d/capital-generation
167
167
 
168
168
  - **安装后找不到 Capital 模式?** 确认插件出现在「插件」→ 已安装列表;Web / CLI profile 安装后要重启该 profile,并在新会话选择模式。
169
169
  - **配置在哪?** 打开「插件」→ 已安装的 **Capital Generation**,页面顶部就是「数据源 / 精选 Skills / 包含的组件」三格,四把密钥都在第一格;不在 DSH 的普通「设置」页面,也不用点进任何一行组件。保存密钥后新建会话再试。
170
- - **桌面端升级后仍是旧版?** 桌面端安装时会固定所解析的版本,不会自动升级。卸载后重新安装,再到插件详情查看版本号;如需指定版本,可在地址末尾加 `#v2.7.10` 或 `@2.7.10`。
170
+ - **桌面端升级后仍是旧版?** 桌面端安装时会固定所解析的版本,不会自动升级。卸载后重新安装,再到插件详情查看版本号;如需指定版本,可在地址末尾加 `#v2.7.11` 或 `@2.7.11`。
171
171
  - **刚发布的新版本装不到?** 桌面端取包时会跳过**刚发布不久**的版本(宿主侧包管理器的发布冷却策略,实测会静默装成上一个版本),国内镜像的同步也可能滞后一段时间。急着用最新代码,改用仓库地址安装最直接。
172
172
  - **网页抓取失败?** 配置卡片中的「允许启动本地提取网页内容」默认开启:AnySearch 提取失败时可尝试本机直连。关闭后,本机直连的具名来源查询也不可用;请检查该开关和网络连接。
173
173
  - **Wind 那部分会消耗积分?** 会。公告与新闻检索、宏观 / 行业 / 汇率指标、按日期区间取的历史 K 线都按次消耗你在 Wind 侧的额度;额度与条款以 Wind 为准,插件不做用量封顶。没配 `WIND_API_KEY` 时这几类不可用,其余功能照常。
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@v587d/capital-charts",
3
- "version": "2.7.10",
3
+ "version": "2.7.11",
4
4
  "description": "Capital 模式的图表前端组件(浏览器半边 + 序列旁路路由):由 @v587d/capital-generation 随包携带并作为 host 平面行挂载。",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
- // 由 scripts/build-capital-config-client.mjs 生成,请勿手改;源码见 capital-config/client.src.cjs。
1
+ // 由 scripts/build-config-client.mjs 生成,请勿手改;源码见 config/client.src.cjs。
2
2
  window.__ModuleLoader__.load({
3
- id: '@v587d/capital-config',
3
+ id: '@v587d/config',
4
4
  factory: (require) => {
5
5
  var module = { exports: {} }
6
6
  var exports = module.exports
@@ -17,7 +17,7 @@ const { SELECTED_SKILL_CATALOG, SELECTED_SKILL_TAG_LABELS, SELECTED_SKILLS_MAX_E
17
17
  * 卡片读的是**配置条目 id**,坐的是**组合包自己的页面**——两个不同的字符串,各自钉在不同地方:
18
18
  *
19
19
  * - `ENTRY_ID` 是 settings 命名空间(0.1.7 起命名空间恒等于 profile 条目 id),四处必须同字:
20
- * `cordis.patch.yml` 的行 id、`capital-config/index.js` 的 `SETTINGS_ENTRY_ID`、主插件
20
+ * `cordis.patch.yml` 的行 id、`config/index.js` 的 `SETTINGS_ENTRY_ID`、主插件
21
21
  * `src/index.ts` 的 `CAPITAL_CONFIG_ENTRY_ID`、这里。
22
22
  * - `BUNDLE_NAME` 是槽 `plugins.bundle.config` 的 key:页面按**组合包的包名**取该包的配置段
23
23
  * (`renderSlot(..., { entryKey: pkg.name })`),所以它必须逐字等于根 `package.json` 的 `name`。
@@ -60,7 +60,7 @@ const PADDLE_OCR_DEFAULT_REF = 'PADDLE_OCR_TOKEN'
60
60
  */
61
61
  const TABS_ID = 'capital-config-tabs'
62
62
  /**
63
- * 「详情」悬浮里那份 `SKILL.md` 原文的来路:host 半边(`capital-config/index.js`)注册的
63
+ * 「详情」悬浮里那份 `SKILL.md` 原文的来路:host 半边(`config/index.js`)注册的
64
64
  * 只读旁路,按 catalog 的 skill 名寻址——闭集在服务器那侧,这里只拼地址。
65
65
  * 这条字符串与 host 的 `SKILL_DOC_ROUTE` 同字(客户端 import 不到那一层,所以由测试对着
66
66
  * 两侧产物比):漂移的表现是「详情」永远读不到,且不报错。
@@ -1,6 +1,6 @@
1
1
  {
2
- "name": "@v587d/capital-config",
3
- "version": "2.7.10",
2
+ "name": "@v587d/config",
3
+ "version": "2.7.11",
4
4
  "description": "Capital 模式的取数凭据与偏好配置行:卡片坐在 @v587d/capital-generation 插件主页的「配置」段,点这一行本身没有表单。",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/cordis.patch.yml CHANGED
@@ -33,9 +33,13 @@
33
33
  # locatePkgJson 随后按"最近的 package.json"归属,正好是 chart-ui/package.json,
34
34
  # 包身份为 @v587d/capital-charts,与主包不撞名。
35
35
  # 回归断言见 test/chart-composition.test.mjs(name 必须是字面量且 path-like,并真的解析一次)。
36
+ #
37
+ # ⚠ 目录名 / 包名与**行 id 是两条独立的链**(AGENTS.md §5.1):下面两颗行住在 `config/` 与
38
+ # `watchlist/`,行 id 却仍是 `capital-config` / `capital-watchlist`——后者是 settings 命名空间与
39
+ # 「包含的组件」里那两行的身份,改了就会吃掉用户已保存的配置。不许"顺手对齐"。
36
40
  - insert:
37
41
  - id: capital-config
38
- name: './capital-config/index.js'
42
+ name: './config/index.js'
39
43
  config:
40
44
  customPersona: ''
41
45
  fuyaoCredentialRef: FUYAO_API_KEY
@@ -64,9 +68,9 @@
64
68
  # `test/watchlist-quote.test.mjs` 的**模块同一性探针**钉住:两处 import 必须拿到同一实例,
65
69
  # 探针不过就重新设计,而不是先上线再说。
66
70
  #
67
- # `id` 与 `./capital-watchlist/index.js` 的 path-like 字面量规则同上(!!js / subpath 两个坑
71
+ # `id` 与 `./watchlist/index.js` 的 path-like 字面量规则同上(!!js / subpath 两个坑
68
72
  # 对这颗行同样成立)。
69
73
  - insert:
70
74
  - id: capital-watchlist
71
- name: './capital-watchlist/index.js'
75
+ name: './watchlist/index.js'
72
76
 
package/lib/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export declare const name = "capital-generation";
7
7
  * 取数配置所在的 **profile 条目 id**(随包的 `capital-config` 行)。0.1.7 的 settings 面
8
8
  * 以条目 id 为命名空间,本插件经 `settings.describe()` 按它读回用户配的引用名与开关。
9
9
  *
10
- * 这个字符串有三处必须一致:`cordis.patch.yml` 的行 id、`capital-config/index.js` 的
10
+ * 这个字符串有三处必须一致:`cordis.patch.yml` 的行 id、`config/index.js` 的
11
11
  * `SETTINGS_ENTRY_ID`、以及浏览器半边 `client.src.cjs` 的 `ENTRY_ID`;由
12
12
  * `test/capital-config.test.mjs` 逐一对齐(漂移的表现为卡片静默消失)。
13
13
  */
package/lib/index.js CHANGED
@@ -28,7 +28,7 @@ export const name = 'capital-generation';
28
28
  * 取数配置所在的 **profile 条目 id**(随包的 `capital-config` 行)。0.1.7 的 settings 面
29
29
  * 以条目 id 为命名空间,本插件经 `settings.describe()` 按它读回用户配的引用名与开关。
30
30
  *
31
- * 这个字符串有三处必须一致:`cordis.patch.yml` 的行 id、`capital-config/index.js` 的
31
+ * 这个字符串有三处必须一致:`cordis.patch.yml` 的行 id、`config/index.js` 的
32
32
  * `SETTINGS_ENTRY_ID`、以及浏览器半边 `client.src.cjs` 的 `ENTRY_ID`;由
33
33
  * `test/capital-config.test.mjs` 逐一对齐(漂移的表现为卡片静默消失)。
34
34
  */
@@ -131,7 +131,7 @@ const RetrieverSchema = z.object({
131
131
  paddleOcr: PaddleOcrSchema.default({ ...PADDLE_OCR_DEFAULTS })
132
132
  .description('PaddleOCR 文档解析(ocr 工具)配置;Token 走 credentials 引用 PADDLE_OCR_TOKEN'),
133
133
  });
134
- // 开关清单只有一处来源:selected-skills 的 catalog。卡片那侧(capital-config/index.js)一直按
134
+ // 开关清单只有一处来源:selected-skills 的 catalog。卡片那侧(config/index.js)一直按
135
135
  // catalog 现算,主插件 Config 却手抄过一份 key 列表——接第三颗快照时这两处就漂了(默认值在
136
136
  // 条目→主插件 边界被静默丢弃,表现是卡片能拨、运行期读不到)。新增快照因此不必再动 src/。
137
137
  const SelectedSkillsSchema = z.object(Object.fromEntries(SELECTED_SKILL_CATALOG.map(({ key, name }) => [
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Fuyao REST 的最小请求内核:**零 import 的叶子模块**。
3
3
  *
4
- * 为什么单独一份:host 平面的嵌套包(`capital-watchlist/index.js`)与插件侧的数据能力
4
+ * 为什么单独一份:host 平面的嵌套包(`watchlist/index.js`)与插件侧的数据能力
5
5
  * (`fuyao-rest.ts`)必须共用同一套 base URL、鉴权头、信封 `code` 判定与错误文案——
6
6
  * "同一知识只有一份实现"(AGENTS.md §9.7)。这一层一旦被别的模块拖进来,host 半边
7
7
  * 就会顺带加载整棵插件依赖树,所以这里不放校验器、能力定义、也不放任何类型依赖。
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Fuyao REST 的最小请求内核:**零 import 的叶子模块**。
3
3
  *
4
- * 为什么单独一份:host 平面的嵌套包(`capital-watchlist/index.js`)与插件侧的数据能力
4
+ * 为什么单独一份:host 平面的嵌套包(`watchlist/index.js`)与插件侧的数据能力
5
5
  * (`fuyao-rest.ts`)必须共用同一套 base URL、鉴权头、信封 `code` 判定与错误文案——
6
6
  * "同一知识只有一份实现"(AGENTS.md §9.7)。这一层一旦被别的模块拖进来,host 半边
7
7
  * 就会顺带加载整棵插件依赖树,所以这里不放校验器、能力定义、也不放任何类型依赖。
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * 腾讯公开接口的最小内核:**零 import 的叶子模块**(只依赖 `net/throttle.js`,它自己也是叶子)。
3
3
  *
4
- * 为什么单独一份:host 平面的自选股(`capital-watchlist/index.js`)与插件侧的行情能力
4
+ * 为什么单独一份:host 平面的自选股(`watchlist/index.js`)与插件侧的行情能力
5
5
  * (`tencent-http.ts`)必须共用三样东西——同一条出口节流链、同一份港美股字段位序表、同一套守卫。
6
6
  * 两条独立节流等于没有限流(东财那次的教训),两份位序表迟早只会修好一份(AGENTS.md §9.7)。
7
7
  * 这一层一旦被别的模块拖进来,host 半边就会顺带加载整棵插件依赖树,所以这里不放能力定义、
@@ -6,7 +6,7 @@
6
6
  * between validation and connect. Closing that window would require a custom
7
7
  * dispatcher; this module keeps the same explicit trade-off as dsh-search-first.
8
8
  */
9
- export declare const LOCAL_FETCH_CLIENT_VERSION = "2.7.10";
9
+ export declare const LOCAL_FETCH_CLIENT_VERSION = "2.7.11";
10
10
  export declare const LOCAL_FETCH_MAX_URL_LENGTH = 2048;
11
11
  export type LocalFetchErrorCode = 'ABORTED' | 'TIMEOUT' | 'INVALID_URL' | 'BLOCKED_URL' | 'DNS' | 'REDIRECT' | 'HTTP' | 'TOO_LARGE' | 'UNSUPPORTED_CONTENT_TYPE';
12
12
  export declare class LocalFetchError extends Error {
@@ -7,7 +7,7 @@
7
7
  * dispatcher; this module keeps the same explicit trade-off as dsh-search-first.
8
8
  */
9
9
  import { htmlToMarkdown, stripInvisibleText } from './html-markdown.js';
10
- export const LOCAL_FETCH_CLIENT_VERSION = '2.7.10';
10
+ export const LOCAL_FETCH_CLIENT_VERSION = '2.7.11';
11
11
  export const LOCAL_FETCH_MAX_URL_LENGTH = 2048;
12
12
  export class LocalFetchError extends Error {
13
13
  code;
@@ -52,7 +52,7 @@ export interface WindCallResult {
52
52
  * `test/chart-composition.test.mjs` 守着(会因漂移而失败),这里原本是写死的第二处,
53
53
  * 一次发版就得记得改两遍。所以本常量由测试一并核对(见 `test/wind-client.test.mjs`)。
54
54
  */
55
- export declare const WIND_CLIENT_VERSION = "2.7.10";
55
+ export declare const WIND_CLIENT_VERSION = "2.7.11";
56
56
  export interface WindClient {
57
57
  callTool(toolName: string, args: Record<string, unknown>, signal?: AbortSignal): Promise<WindCallResult>;
58
58
  }
@@ -35,7 +35,7 @@ export const WIND_SERVER_ENDPOINTS = {
35
35
  * `test/chart-composition.test.mjs` 守着(会因漂移而失败),这里原本是写死的第二处,
36
36
  * 一次发版就得记得改两遍。所以本常量由测试一并核对(见 `test/wind-client.test.mjs`)。
37
37
  */
38
- export const WIND_CLIENT_VERSION = '2.7.10';
38
+ export const WIND_CLIENT_VERSION = '2.7.11';
39
39
  function errorText(error) {
40
40
  return error instanceof Error ? error.message : String(error);
41
41
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@v587d/capital-generation",
3
- "version": "2.7.10",
3
+ "version": "2.7.11",
4
4
  "description": "Capital Generation:面向中国散户的 AI 投资助手插件(Capital mode Agent Preset)",
5
5
  "icon": "assets/cg-icon.png",
6
6
  "author": "v587d",
@@ -29,8 +29,8 @@
29
29
  "lib",
30
30
  "locale",
31
31
  "chart-ui",
32
- "capital-config",
33
- "capital-watchlist",
32
+ "config",
33
+ "watchlist",
34
34
  "preset",
35
35
  "selected-skills/catalog.js",
36
36
  "selected-skills/README.md",
@@ -60,8 +60,8 @@
60
60
  "clean": "node -e \"import('node:fs').then(({ rmSync }) => rmSync('lib', { recursive: true, force: true }))\"",
61
61
  "build": "npm run clean && tsc && node scripts/copy-assets.mjs && npm run build:client && npm run build:config-client && npm run build:watchlist-client",
62
62
  "build:client": "node scripts/build-client.mjs",
63
- "build:config-client": "node scripts/build-capital-config-client.mjs",
64
- "build:watchlist-client": "node scripts/build-capital-watchlist-client.mjs",
63
+ "build:config-client": "node scripts/build-config-client.mjs",
64
+ "build:watchlist-client": "node scripts/build-watchlist-client.mjs",
65
65
  "dev": "tsc -w",
66
66
  "vendor:charts": "node scripts/vendor-lightweight-charts.mjs",
67
67
  "check:dsh": "node scripts/check-dsh-compat.mjs",
@@ -17,7 +17,7 @@
17
17
  `LICENSE` 的版权行是 **`Copyright (c) 2026 KOMVIA`**;`marketplace.json` 的 `publisher` 也是 `KOMVIA`,
18
18
  上游 `AGENTS.md:11` 自述 `**Creator**: KOMVIA`;而仓库 owner 与 `README.md:5` 的 "Built by" 都是
19
19
  **Ayotunde Oso(账号 `GAJETOso`)**。catalog 的 `owner` 用仓库账号 `GAJETOso`——设置卡片那条
20
- 上游链接是按 `https://github.com/${owner}/${repository}` 拼的(`capital-config/client.src.cjs:576`),
20
+ 上游链接是按 `https://github.com/${owner}/${repository}` 拼的(`config/client.src.cjs:576`),
21
21
  换成品牌名就是死链。MIT 与 Apache-2.0 的差别在本仓有实际后果,见下面"许可义务"一节。
22
22
  - Imported content: 只带 `skills/` 这一棵树(48 颗,337 个文件 / 2.4 MB)与 `LICENSE` 原件,
23
23
  与所钉 commit 逐字节相同(除下面列出的 10 份)。**上游仓库根其余材料整个不复制进本仓**,
@@ -1,6 +1,6 @@
1
- // 由 scripts/build-capital-watchlist-client.mjs 生成,请勿手改;源码见 capital-watchlist/client.src.cjs。
1
+ // 由 scripts/build-watchlist-client.mjs 生成,请勿手改;源码见 watchlist/client.src.cjs。
2
2
  window.__ModuleLoader__.load({
3
- id: '@v587d/capital-watchlist',
3
+ id: '@v587d/watchlist',
4
4
  factory: (require) => {
5
5
  var module = { exports: {} }
6
6
  var exports = module.exports
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `@v587d/capital-watchlist` 的浏览器半边。
2
+ * `@v587d/watchlist` 的浏览器半边。
3
3
  *
4
4
  * 两个 surface,缺一都不成立:
5
5
  * 1. `ctx.commandUi` 的一条 **contribution**(不是 decoration——我们没有同名宿主命令),
@@ -65,7 +65,7 @@ const { createSnapshotStore } = require('@deepseek-ai/dsh-client-store')
65
65
  // 组件与文本减号。⛔ 也不用 `IconCheckCircle*`:那两支圆心里都画着东西,未勾选挂着它就像已经被
66
66
  // 选中(2026-10-09 实机点名的正是这个错觉)。
67
67
  const { IconChecklistOutlineRegular, IconCloseOutlineRegular, IconDatabaseOutlineRegular, IconEllipsisOutlineRegular, IconGoalOutlineRegular, IconListPenOutlineRegular, IconPinOutlineRegular, IconRefreshOutlineRegular, IconSearchOutlineRegular, IconTrashOutlineRegular, Menu, MenuItemButton, Modal, Switch } = require('@deepseek-ai/dsh-client-ui-primitives')
68
- // 「哪些标的可以是一个仓位」与「占比合计封顶多少」都来自 `capital-watchlist/holding-rules.js`
68
+ // 「哪些标的可以是一个仓位」与「占比合计封顶多少」都来自 `watchlist/holding-rules.js`
69
69
  // (构建期由 esbuild 内联进来):面板画不画那一行、`+` 什么时候置灰,与 `/holding` 收不收这一格
70
70
  // 不许各说一套。
71
71
  const { isHoldable, weightCeiling } = require('./holding-rules.js')
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `@v587d/capital-watchlist` 的 host half。
2
+ * `@v587d/watchlist` 的 host half。
3
3
  *
4
4
  * 用户自选股是**宿主级(跨 workspace)的用户侧资产**:清单与报价快照住在官方
5
5
  * `storage-domain` 域 `capital_watchlist`(`~/.dsh/storages/capital_watchlist.json`),
@@ -1,6 +1,6 @@
1
1
  {
2
- "name": "@v587d/capital-watchlist",
3
- "version": "2.7.10",
2
+ "name": "@v587d/watchlist",
3
+ "version": "2.7.11",
4
4
  "description": "Capital 模式的用户自选股(宿主级清单 + Fuyao 报价快照 + /capital-watchlist 路由 + 输入框菜单弹窗):由 @v587d/capital-generation 随包携带并作为 host 平面行挂载。",
5
5
  "license": "MIT",
6
6
  "type": "module",
File without changes