@v587d/capital-generation 2.6.4 → 2.6.5

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,46 @@
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.6.5] - 2026-10-08
11
+
12
+ 上游数据源的一轮**外部巡检**:仓库里新加了一条每天早上的契约巡检,不合格自动开 GitHub Issue。
13
+ **插件本身的行为一行都没变**——工具入参、数据能力、四把密钥与凭据引用名、配置字段、会话日志格式
14
+ 与自选股存储 schema 全部与 2.6.4 相同,宿主仍要求 `0.2.0-rc.2`,装过的不必重装。按第三位(patch)
15
+ 口径:这一版发出去的内容只有版本号与下面这段说明。
16
+
17
+ ### Added
18
+
19
+ - **每天 07:00(北京时间)的数据源契约巡检**:94 颗已注册能力连同检索来源与协议端点共 113 条登记,
20
+ 日档真打 73 条、周六全量 109 条,各发一次最小请求,按**状态 / 响应时间 / 核心字段**三件事出结论。
21
+ "核心字段"不另立清单——契约就是生产代码里那颗 `output.schema`(它本来就必须在落盘前过
22
+ `validateOutput`),巡检复用同一颗,字段清单不可能与线上取数各说各话。
23
+ - **分层,按"稳不稳"而不是按"重要不重要"**:与抓取直接相关的东财 21 / 腾讯 9 / 具名来源 9 每天打;
24
+ Fuyao 只挑常用股票接口进日档(26 次/天),基金一类冷门接口排到周六全量。Wind 每天只做一次
25
+ **不计费**的协议握手(`initialize` + `tools/list`,6 台 server 各一次),取数级探针一律不做——它烧积分。
26
+ - **一天一张汇总 Issue**:只有结构 / 状态级失败(`GUARD` / `ENVELOPE` / `HTTP_STATUS`)才开单;
27
+ 网络抖动、慢、空结果写进正文但不进结论。退出码分工是**红 = 我方工具坏了,Issue = 上游坏了**,
28
+ 两个信道不许混。"连续第 N 天"与"已恢复"都从同 label 的未关闭单里数出来,不另建一份状态存储。
29
+ - **一条看门狗管"巡检自己没跑"**:cron 被 60 天不活动静默关掉、YAML 语法错、文件被误删,表现都是
30
+ "一切正常",所以另配每天 09:30 的检查——26 小时内没有巡检运行记录就单独开一张。
31
+ - **视角写进结论里**:巡检只有 GitHub 海外出口,报告固定带出口 IP/ASN 加一句「本结论仅代表上述网络
32
+ 视角」。实测两个视角能给出**相反**的结论:`push2.eastmoney.com/api/qt/clist/get` 只从国内出口被 RST,
33
+ `sseinfo.com` 只从海外出口吃 403(WAF)。后者进影子模式——照跑照记但不进结论,12 月复核;
34
+ 确属本视角抓不到的 4 条登记为 `excluded` 并逐条写明出处,默认它有效,等使用者报上来再处理。
35
+
36
+ ### Fixed
37
+
38
+ - **巡检会把自己锁死**(第一次真跑就挂在第一条探针上,不报错也不超时):为了"复用生产实现",把
39
+ `sharedEastmoneyThrottle()` 套在 `source.execute()` 外面,而 `execute()` 内部**已经**在同一条节流链上
40
+ 排队——外层占着链等内层完成,内层排在同一条链后面等外层让位。同一个单例被套两次不是复用,是自锁。
41
+ 现在东财 / 腾讯 / 具名来源由巡检**不加任何一层**,节奏归生产代码;只有本来没有节流的 Fuyao 由巡检
42
+ 自己加 400 ms 地板。
43
+ - **响应时间预算不能同时当超时用**:Wind 协议探针起初把 `budgetMs` 直接当 abort,6 台 server 里 3 台
44
+ 报"传输失败";把 abort 放宽到与生产 `WIND_REQUEST_TIMEOUT_MS` 同值 60 s 后六台全在 226–494 ms 通过。
45
+ "慢"和"坏"是两个判据、需要两个数,混成一个就会把慢服务天天误报成挂了。
46
+ - **CI 里凭据没映射进环境**:GitHub 不会把 repository secrets 自动注进 `env`,漏写的对称症状是
47
+ "CI 天天红、本地怎么跑都好"。新增两条回归直接读 workflow 正文,逐条核对凭据映射,并钉住 cron 的
48
+ UTC 偏移(日期与星期都退一天,写错的那一档永远打不到且日档照样全绿)。
49
+
10
50
  ## [2.6.4] - 2026-10-08
11
51
 
12
52
  自选股**搜索与下拉**的一轮修复加放开:**工具入参、数据能力、四把密钥与凭据引用名、配置字段、
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.6.4-9cf" alt="Version"></a>
18
+ <a href="https://github.com/v587d/capital-generation/releases"><img src="https://img.shields.io/badge/version-2.6.5-9cf" alt="Version"></a>
19
19
  </p>
20
20
 
21
21
  # Capital Generation
@@ -42,6 +42,9 @@ Linux / macOS 的 Web 或 CLI profile 在终端执行,下面两条 **任选一
42
42
 
43
43
  ```bash
44
44
  dsh plugin --profile web add @v587d/capital-generation
45
+ ```
46
+
47
+ ```bash
45
48
  dsh plugin --profile web add github:v587d/capital-generation
46
49
  ```
47
50
 
@@ -52,6 +55,9 @@ DSH 桌面端在 「添加插件」 中输入:
52
55
  `https://github.com/v587d/capital-generation` 或 `@v587d/capital-generation`
53
56
  桌面端自带 DSH 宿主,不需要单独用 npm 安装宿主。本仓库已包含构建产物,普通用户不需要克隆仓库或运行构建命令。
54
57
 
58
+ > [!NOTE]
59
+ > 本插件所有自带密钥均免费申请、免费日常使用且不影响插件核心功能,即缺哪个密钥,仅表示对应能力就不可用,其他功能照常。
60
+
55
61
  2. **选填密钥。** 打开 DSH 「插件」 → **Capital Generation** -> 「配置」。
56
62
 
57
63
  | 密钥 | 用途 |
@@ -62,10 +68,6 @@ DSH 桌面端在 「添加插件」 中输入:
62
68
  | [PaddleOCR AIStudio](https://aistudio.baidu.com/paddleocr) | 解析 PDF 和图片中的文字 |
63
69
 
64
70
  这些都是第三方服务的密钥,需分别向服务方申请;额度和条款以各服务方为准。
65
-
66
- > [!NOTE]
67
- > **本插件所有密钥均不影响插件核心功能**,即缺哪个密钥,仅表示对应能力就不可用,其他功能照常。
68
-
69
71
  保存后**新建 Capital 模式会话**即可生效,无需重启。
70
72
  也可以将密钥写入 `~/.dsh/.credentials.yaml`,名称依次为 `FUYAO_API_KEY`、`ANYSEARCH_API_KEY`、`WIND_API_KEY`、`PADDLE_OCR_TOKEN`。
71
73
  密钥由 DSH 凭据服务保存,不会显示在会话配置中。
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@v587d/capital-config",
3
- "version": "2.6.4",
3
+ "version": "2.6.5",
4
4
  "description": "Capital 模式的取数凭据与偏好配置行:卡片坐在 @v587d/capital-generation 插件主页的「配置」段,点这一行本身没有表单。",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@v587d/capital-watchlist",
3
- "version": "2.6.4",
3
+ "version": "2.6.5",
4
4
  "description": "Capital 模式的用户自选股(宿主级清单 + Fuyao 报价快照 + /capital-watchlist 路由 + 输入框菜单弹窗):由 @v587d/capital-generation 随包携带并作为 host 平面行挂载。",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@v587d/capital-charts",
3
- "version": "2.6.4",
3
+ "version": "2.6.5",
4
4
  "description": "Capital 模式的图表前端组件(浏览器半边 + 序列旁路路由):由 @v587d/capital-generation 随包携带并作为 host 平面行挂载。",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -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.6.4";
9
+ export declare const LOCAL_FETCH_CLIENT_VERSION = "2.6.5";
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.6.4';
10
+ export const LOCAL_FETCH_CLIENT_VERSION = '2.6.5';
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.6.4";
55
+ export declare const WIND_CLIENT_VERSION = "2.6.5";
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.6.4';
38
+ export const WIND_CLIENT_VERSION = '2.6.5';
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.6.4",
3
+ "version": "2.6.5",
4
4
  "description": "Capital Generation:面向中国散户的 AI 投资助手插件(Capital mode Agent Preset)",
5
5
  "icon": "assets/cg-icon.png",
6
6
  "author": "v587d",
@@ -61,6 +61,7 @@
61
61
  "smoke:fuyao": "node scripts/smoke-fuyao.mjs",
62
62
  "smoke:wind": "node scripts/smoke-wind.mjs",
63
63
  "smoke:local-fetch": "node scripts/smoke-local-fetch.mjs",
64
+ "contract:probe": "node scripts/contract-probe.mjs",
64
65
  "docs:capabilities": "npm run build && node scripts/gen-capability-table.mjs",
65
66
  "verify:sessions": "node scripts/verify-sessions.mjs",
66
67
  "audit:tool-errors": "node scripts/audit-tool-errors.mjs"