@v587d/capital-generation 2.7.2 → 2.7.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 +47 -0
- package/README.md +7 -6
- package/THIRD_PARTY_NOTICES.md +65 -26
- package/capital-config/client.js +2 -2
- package/capital-config/package.json +1 -1
- package/capital-watchlist/package.json +1 -1
- package/chart-ui/package.json +1 -1
- package/lib/web-retriever/local-fetch.d.ts +1 -1
- package/lib/web-retriever/local-fetch.js +1 -1
- package/lib/web-retriever/wind-client.d.ts +1 -1
- package/lib/web-retriever/wind-client.js +1 -1
- package/package.json +2 -1
- package/selected-skills/InvestSkill/UPSTREAM.md +9 -0
- package/selected-skills/catalog.js +177 -0
- package/selected-skills/china-stock-research-skills/UPSTREAM.md +2 -1
- package/selected-skills/investment-skills/UPSTREAM.md +2 -1
- package/selected-skills/peter-lynch-skill/UPSTREAM.md +4 -3
- package/selected-skills/trading-skills/LICENSE +21 -0
- package/selected-skills/trading-skills/UPSTREAM.md +111 -0
- package/selected-skills/trading-skills/skills/catalyst-map/SKILL.md +119 -0
- package/selected-skills/trading-skills/skills/catalyst-map/references/catalyst-framework.md +68 -0
- package/selected-skills/trading-skills/skills/earnings-preview/SKILL.md +124 -0
- package/selected-skills/trading-skills/skills/earnings-preview/references/data-providers.md +26 -0
- package/selected-skills/trading-skills/skills/earnings-preview/references/providers/fmp.md +49 -0
- package/selected-skills/trading-skills/skills/earnings-preview/references/providers/polygon.md +45 -0
- package/selected-skills/trading-skills/skills/earnings-preview/references/providers/tradingeconomics.md +49 -0
- package/selected-skills/trading-skills/skills/earnings-preview/references/relevance-ranking.md +24 -0
- package/selected-skills/trading-skills/skills/earnings-trade-prep/SKILL.md +134 -0
- package/selected-skills/trading-skills/skills/earnings-trade-prep/references/workflow-framework.md +65 -0
- package/selected-skills/trading-skills/skills/evidence-gap-check/SKILL.md +120 -0
- package/selected-skills/trading-skills/skills/evidence-gap-check/references/gap-framework.md +66 -0
- package/selected-skills/trading-skills/skills/execution-plan-check/SKILL.md +121 -0
- package/selected-skills/trading-skills/skills/execution-plan-check/references/execution-checklist.md +70 -0
- package/selected-skills/trading-skills/skills/journal-pattern-analyzer/SKILL.md +120 -0
- package/selected-skills/trading-skills/skills/journal-pattern-analyzer/references/calculation-helpers.md +16 -0
- package/selected-skills/trading-skills/skills/journal-pattern-analyzer/references/pattern-framework.md +74 -0
- package/selected-skills/trading-skills/skills/macro-event-analysis/SKILL.md +122 -0
- package/selected-skills/trading-skills/skills/macro-event-analysis/references/data-providers.md +23 -0
- package/selected-skills/trading-skills/skills/macro-event-analysis/references/interpretation-guide.md +22 -0
- package/selected-skills/trading-skills/skills/macro-event-analysis/references/providers/fmp.md +28 -0
- package/selected-skills/trading-skills/skills/macro-event-analysis/references/providers/tradingeconomics.md +40 -0
- package/selected-skills/trading-skills/skills/market-regime-analysis/SKILL.md +117 -0
- package/selected-skills/trading-skills/skills/market-regime-analysis/references/data-providers.md +26 -0
- package/selected-skills/trading-skills/skills/market-regime-analysis/references/providers/fmp.md +46 -0
- package/selected-skills/trading-skills/skills/market-regime-analysis/references/providers/polygon.md +36 -0
- package/selected-skills/trading-skills/skills/market-regime-analysis/references/providers/tradingeconomics.md +46 -0
- package/selected-skills/trading-skills/skills/market-regime-analysis/references/regime-framework.md +23 -0
- package/selected-skills/trading-skills/skills/portfolio-concentration/SKILL.md +119 -0
- package/selected-skills/trading-skills/skills/portfolio-concentration/references/concentration-framework.md +72 -0
- package/selected-skills/trading-skills/skills/portfolio-risk-review/SKILL.md +126 -0
- package/selected-skills/trading-skills/skills/portfolio-risk-review/references/workflow-framework.md +57 -0
- package/selected-skills/trading-skills/skills/position-management/SKILL.md +120 -0
- package/selected-skills/trading-skills/skills/position-management/references/management-framework.md +70 -0
- package/selected-skills/trading-skills/skills/position-sizing/SKILL.md +83 -0
- package/selected-skills/trading-skills/skills/position-sizing/assets/trade-plan-template.md +15 -0
- package/selected-skills/trading-skills/skills/position-sizing/references/calculation-helpers.md +13 -0
- package/selected-skills/trading-skills/skills/position-sizing/references/methodology.md +28 -0
- package/selected-skills/trading-skills/skills/post-trade-debrief/SKILL.md +99 -0
- package/selected-skills/trading-skills/skills/post-trade-debrief/references/workflow-framework.md +51 -0
- package/selected-skills/trading-skills/skills/post-trade-review/SKILL.md +82 -0
- package/selected-skills/trading-skills/skills/post-trade-review/references/review-rubric.md +34 -0
- package/selected-skills/trading-skills/skills/pre-trade-check/SKILL.md +136 -0
- package/selected-skills/trading-skills/skills/pre-trade-check/references/workflow-framework.md +61 -0
- package/selected-skills/trading-skills/skills/risk-reward-sanity-check/SKILL.md +81 -0
- package/selected-skills/trading-skills/skills/risk-reward-sanity-check/references/calculation-helpers.md +14 -0
- package/selected-skills/trading-skills/skills/risk-reward-sanity-check/references/failure-modes.md +9 -0
- package/selected-skills/trading-skills/skills/thesis-validation/SKILL.md +123 -0
- package/selected-skills/trading-skills/skills/thesis-validation/references/thesis-checklist.md +56 -0
- package/selected-skills/trading-skills/skills/watchlist-review/SKILL.md +119 -0
- package/selected-skills/trading-skills/skills/watchlist-review/references/review-framework.md +57 -0
- package/selected-skills/InvestSkill/ADDING-NEW-SKILLS.md +0 -546
- package/selected-skills/InvestSkill/CHANGELOG.md +0 -373
- package/selected-skills/InvestSkill/CI-CD-GUIDE.md +0 -432
- package/selected-skills/InvestSkill/CLAUDE.md +0 -148
- package/selected-skills/InvestSkill/CONTRIBUTING.md +0 -291
- package/selected-skills/InvestSkill/DEPLOYMENTS.md +0 -321
- package/selected-skills/InvestSkill/FAQ.md +0 -509
- package/selected-skills/InvestSkill/GEMINI.md +0 -419
- package/selected-skills/InvestSkill/PLATFORM-COMPATIBILITY.md +0 -529
- package/selected-skills/InvestSkill/README-claude-code.md +0 -435
- package/selected-skills/InvestSkill/README-cursor.md +0 -475
- package/selected-skills/InvestSkill/README-gemini.md +0 -532
- package/selected-skills/InvestSkill/README-ollama.md +0 -106
- package/selected-skills/InvestSkill/README-zh-TW.md +0 -461
- package/selected-skills/InvestSkill/README.md +0 -311
- package/selected-skills/InvestSkill/RELEASE-QUICK-REFERENCE.md +0 -230
- package/selected-skills/InvestSkill/RELEASE_NOTES.md +0 -121
- package/selected-skills/InvestSkill/SECURITY.md +0 -232
- package/selected-skills/InvestSkill/TODO.md +0 -28
- package/selected-skills/InvestSkill/package.json +0 -64
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/README.md +0 -119
- package/selected-skills/china-stock-research-skills/.github/ISSUE_TEMPLATE/bug_report.md +0 -35
- package/selected-skills/china-stock-research-skills/.github/ISSUE_TEMPLATE/skill_request.md +0 -28
- package/selected-skills/china-stock-research-skills/.github/PULL_REQUEST_TEMPLATE.md +0 -15
- package/selected-skills/china-stock-research-skills/CHANGELOG.md +0 -59
- package/selected-skills/china-stock-research-skills/CONTRIBUTING.md +0 -121
- package/selected-skills/china-stock-research-skills/GITHUB_PUBLISHING.md +0 -259
- package/selected-skills/china-stock-research-skills/INSTALL.md +0 -151
- package/selected-skills/china-stock-research-skills/PUBLISH_CHECKLIST.md +0 -165
- package/selected-skills/china-stock-research-skills/README.en.md +0 -209
- package/selected-skills/china-stock-research-skills/README.md +0 -209
- package/selected-skills/china-stock-research-skills/RELEASE_ASSETS.md +0 -222
- package/selected-skills/china-stock-research-skills/ROADMAP.md +0 -45
- package/selected-skills/china-stock-research-skills/SKILLS.md +0 -85
- package/selected-skills/china-stock-research-skills/examples/full-report-flow.md +0 -20
- package/selected-skills/china-stock-research-skills/examples/module-select-cases.md +0 -26
- package/selected-skills/china-stock-research-skills/examples/quickstart-prompts.md +0 -25
- package/selected-skills/investment-skills/.github/workflows/validate.yml +0 -25
- package/selected-skills/investment-skills/.tbd/config.yml +0 -107
- package/selected-skills/investment-skills/README.md +0 -253
- package/selected-skills/investment-skills/docs/development.md +0 -37
- package/selected-skills/investment-skills/docs/roadmap.md +0 -25
- package/selected-skills/peter-lynch-skill/README.md +0 -305
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,53 @@
|
|
|
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.3] - 2026-10-11
|
|
11
|
+
|
|
12
|
+
社区 Skill 目录多了第五份快照(**45 条**可选),并把首页与第三方清单对外说的内容核了一遍——顺带把包里
|
|
13
|
+
不该带的上游仓库材料挡掉,整包反而比上一版**小**。既有契约完全没动:工具入参与返回、能力清单、四把密钥
|
|
14
|
+
与凭据引用名、配置字段、会话日志格式、你已有的自选股数据与**已经开启的那几项 Skill**,全部照旧;
|
|
15
|
+
宿主要求与 2.7.2 相同(DSH`@0.2.0-rc.2`),不必换版本。
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **社区 Skill 目录新增第五份快照**:`marian2js/trading-skills`(MIT,commit `f1ae7d4`)。前四份都是
|
|
20
|
+
"把这家生意研究清楚",这一份管**下单前的检查与下单后的复盘**:催化剂怎么排注意力、自选清单里哪些理由
|
|
21
|
+
已经不成立、这笔想法还缺哪些证据、一个说法能不能被检验、盈亏比结构是否自洽、计划在实际盘面上落不落得
|
|
22
|
+
了地、组合有没有压在同一批暴露上、交易日志里的重复失误、一笔已经平掉的交易怎么复盘。上游 19 个模块里
|
|
23
|
+
开放 **9 个**,整份目录从 36 条变成 **45 条**,默认仍然全部关闭。
|
|
24
|
+
- **十颗不进可选清单,逐颗有名字和理由**(写在该快照的 `UPSTREAM.md`):券商 API 执行面那颗(`etoro`:
|
|
25
|
+
让你在对话里交密钥、教助手真实下单)**连发布包都不进**;给仓位数字的(`position-sizing`)与给持仓
|
|
26
|
+
加减动作的(`position-management`)按本仓一贯口径属于明确冲突——本项目不提供投资建议,也不替你动仓;
|
|
27
|
+
四颗"把模块串成一条流程"的编排不开放(会话怎么分流由本插件自己决定,两处都在路由就会打架);三颗把
|
|
28
|
+
取数写死成"先问你用哪家付费服务商、再自己调接口"的不开放,本插件没有那些服务商的凭据,其中
|
|
29
|
+
`earnings-preview` 还与已经收录的同名模块撞车。
|
|
30
|
+
- **「精选 Skills」的筛选条多一个标签:交易纪律**(中英文各一套显示名,切到中文界面不会露出英文原词)。
|
|
31
|
+
- **首页那行现在写着总数**:5 个开源项目、共 **45 个可选模块**。这个数字不再靠人手抄——配置页每一行都是
|
|
32
|
+
按目录现算的,两处一旦不一致,回归测试会点名该改哪一边。
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- **这份快照的正文按本插件的取数与计算边界改了一遍**(10 份文件、17 处,只动"谁去取数、谁去算"这一件
|
|
37
|
+
事):这一份里没有"你自己去搜"那一句,但伸手取数换了形态——要使用者点选付费服务商、自己调它们的接口、
|
|
38
|
+
认领对话里给过的 API 凭据,以及"宿主能跑代码就去用那个共享 python 模块"。在本插件里取数和统计量都是
|
|
39
|
+
交出去的。判定档位、阈值、输入清单与分析结论**一字未改**;哪一颗完全没动(`post-trade-review` 原文
|
|
40
|
+
就过关),也记在 `UPSTREAM.md` 里。
|
|
41
|
+
- **第三方清单补全**(`THIRD_PARTY_NOTICES.md`):每份快照多一列「可选模块 / 快照内共」,一次说清
|
|
42
|
+
卡片比快照少的那些是什么;宿主提供的那一节补上 React 与两个宿主客户端库(本插件既不打进也不声明
|
|
43
|
+
它们);新增"构建期使用、不随包分发"一节。首页致谢也补齐了五份快照。
|
|
44
|
+
- **包变小了**:上游仓库自己的 README 变体、CI 与 workflow、静态文档站、路线图和贡献指南这类只有人类
|
|
45
|
+
读者会用的材料不再随包发出。排除口径写在每份快照自己的 `.npmignore` 里,回归测试逐条反查它是否真的
|
|
46
|
+
生效——**现在连文件级规则也查**(此前只查目录,文件规则写了不生效也不会报错)。整包解包
|
|
47
|
+
3.8 MB → **3.5 MB**、下载 1.3 MB → **1.15 MB**。上游自带的脚本与安装脚本作为可审查材料照旧留在
|
|
48
|
+
盘上,本插件从不执行它们;老快照里残留的四份上游 `.gitignore` 一并清掉(ignore 规则会在本仓继续
|
|
49
|
+
生效,那是过去真挡掉过文件的一族)。
|
|
50
|
+
- **社区 Skill 正文的合规检查多认六种形态**:`curl` 外部接口、"宿主能跑代码就去用脚本"、向使用者点选
|
|
51
|
+
付费服务商、在对话里认领凭据,以及把取数写成"除非使用者明确要求否则别取实时数据"那类条件分支。
|
|
52
|
+
这一族最早只有"你自己去 web search"一种写法;检查跟着上游的形态加宽,而不是跟着措辞放宽。
|
|
53
|
+
|
|
54
|
+
**开启新快照后请重启 DSH**:社区 Skill 的名单在宿主装配时算好,刷新页面不会重算(表现是卡片能勾、
|
|
55
|
+
点「详情」读不到原文、会话里也不出现)——上一版的"重启才装配"是同一件事。
|
|
56
|
+
|
|
10
57
|
## [2.7.2] - 2026-10-11
|
|
11
58
|
|
|
12
59
|
社区 Skill 目录多了第四份快照(**36 条**可选)。既有契约完全没动:工具入参与返回、能力清单、四把密钥
|
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.
|
|
18
|
+
<a href="https://github.com/v587d/capital-generation/releases"><img src="https://img.shields.io/badge/version-2.7.3-9cf" alt="Version"></a>
|
|
19
19
|
</p>
|
|
20
20
|
|
|
21
21
|
# Capital Generation
|
|
@@ -131,7 +131,7 @@ https://github.com/v587d/capital-generation
|
|
|
131
131
|
|
|
132
132
|
- **查数据和资料:** 覆盖A股、港股、美股,由 Agents 按需获取行情、财务、指数、基金与宏观行业数据,检索公告、新闻和研报。共计 **94** 个数据收集能力和 **14** 个网页检索能力,部分公开数据源无需额外密钥;具体覆盖范围见 [数据收集能力表](docs/data-collector-capabilities.md) 和 [网页检索能力表](docs/web-retriever-capabilities.md)。
|
|
133
133
|
- **数据分析:** 所有 Agents 均不直接接触原始结构数据,Agents 按需读取数据、校验数据,并写脚本挖掘数据背后含义。
|
|
134
|
-
- **可视化:**
|
|
134
|
+
- **可视化:** Agent 视情况将校验后数据交给可视化专家生成可交互图表。图表会作为本轮交付物出现在会话中,可在侧栏查看或离线打开。了解处理流程可看 [Agent 角色说明](docs/agent-roles.md)。
|
|
135
135
|
|
|
136
136
|
| 走势折线 | K 线与量价 |
|
|
137
137
|
| :---: | :---: |
|
|
@@ -143,7 +143,7 @@ https://github.com/v587d/capital-generation
|
|
|
143
143
|
| :---: | :---: |
|
|
144
144
|
| <a href="assets/watchlist-popup.png"><img src="assets/watchlist-popup.png" alt="管理自选股" width="400"></a> | <a href="assets/watchlist-more.png"><img src="assets/watchlist-more.png" alt="标记持仓" width="400"></a> |
|
|
145
145
|
|
|
146
|
-
- **精选 Skills:**
|
|
146
|
+
- **精选 Skills:** 当前收录 5 个开源项目、共 45 个可选模块(默认全部关闭,在配置页逐格打开):[The Investment Skills Lexicon](https://github.com/finterm-ai/investment-skills)(Buffett Investment Framework)、[China Stock Research Skills](https://github.com/spikeHongg/china-stock-research-skills)(六个 A 股研究模块)、[InvestSkill](https://github.com/yennanliu/InvestSkill)(28 个美股模块:逐条主张核验、空头反方、披露文件与内部人追踪、压力测试等)、[Peter Lynch Research](https://github.com/DjNero11/peter-lynch-skill)(一条完整的个股研究流程)与 [Trading Skills](https://github.com/marian2js/trading-skills)(9 个交易过程模块:催化剂排布、自选股分诊、论点压力测试、执行计划检查、交易日志复盘等,美股与境外交易口径)。
|
|
147
147
|
|
|
148
148
|
<p align="center">
|
|
149
149
|
<a href="assets/selected-skills配置.png">
|
|
@@ -162,10 +162,11 @@ https://github.com/v587d/capital-generation
|
|
|
162
162
|
|
|
163
163
|
目前 Windows 桌面端有一项[已知宿主差异](CHANGELOG.md):主 Agent 的部分工具限制可能不生效。请特别留意它实际调用了哪些工具;结构化数据的取数限制仍由工具自身执行。
|
|
164
164
|
|
|
165
|
-
## 开发与贡献
|
|
166
|
-
[](https://octocounts.com/github/v587d/capital-generation/tree/master)
|
|
165
|
+
## 开发与贡献
|
|
167
166
|
普通用户不需要执行下面的命令。修改源码时请参考 [贡献指南](CONTRIBUTING.md) 和 [开发约定](AGENTS.md):
|
|
168
167
|
|
|
168
|
+
[](https://octocounts.com/github/v587d/capital-generation/tree/master)
|
|
169
|
+
|
|
169
170
|
```bash
|
|
170
171
|
npm install
|
|
171
172
|
npm run build # 构建 lib/ 和浏览器端资源
|
|
@@ -178,7 +179,7 @@ npm run smoke:boot # 检查插件装配
|
|
|
178
179
|
|
|
179
180
|
## 致谢
|
|
180
181
|
|
|
181
|
-
- 「精选 Skills
|
|
182
|
+
- 「精选 Skills」的研究与交易过程模块按固定 commit **快照收录**自 [finterm-ai/investment-skills](https://github.com/finterm-ai/investment-skills)、[spikeHongg/china-stock-research-skills](https://github.com/spikeHongg/china-stock-research-skills)、[yennanliu/InvestSkill](https://github.com/yennanliu/InvestSkill)、[DjNero11/peter-lynch-skill](https://github.com/DjNero11/peter-lynch-skill) 与 [marian2js/trading-skills](https://github.com/marian2js/trading-skills)(均 MIT License)。
|
|
182
183
|
- 会话里的可交互图表由 [TradingView Lightweight Charts](https://github.com/tradingview/lightweight-charts)(Apache-2.0)渲染。
|
|
183
184
|
- 行情、财务、公告与网页材料来自同花顺 Fuyao、Wind Alice、AnySearch、PaddleOCR 以及东方财富、腾讯等公开或申请制接口;数据版权归各服务方,额度与条款以服务方为准,本项目不重新分发原始数据。
|
|
184
185
|
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -1,43 +1,80 @@
|
|
|
1
1
|
# 第三方组件与许可(Third-Party Notices)
|
|
2
2
|
|
|
3
|
-
本文件集中列出 Capital Generation
|
|
4
|
-
|
|
3
|
+
本文件集中列出 Capital Generation 随包分发、随包调用、或只在构建期使用的第三方组件:项目名、作者、
|
|
4
|
+
许可证、原始仓库,以及它在本插件里的位置。本文件随 npm 包一起发布;各组件的许可全文以仓库内文件为准
|
|
5
|
+
(下表"许可文本"列给出位置)。**这份清单不是手抄的**:仓库回归测试会把这里点名的仓内路径拿去问一次
|
|
6
|
+
真实打包器(写了却没发出去就红),也会按 catalog 现算核对首页的模块总数,所以它与装出去的包同步。
|
|
5
7
|
|
|
6
8
|
## 随包分发的代码与内容
|
|
7
9
|
|
|
8
|
-
| 组件 | 作者 | 许可证 | 原始仓库 | 许可文本 | 用在哪里 |
|
|
9
|
-
|
|
10
|
-
| Lightweight Charts™ 5.2.1(standalone 构建) | TradingView | Apache-2.0 | <https://github.com/tradingview/lightweight-charts> | `lib/chart/vendor/LICENSE` | 插件内所有可交互图表的渲染层;`VERSION.json` 记有该构建的 sha256,归属标识(attribution logo)保持开启 |
|
|
11
|
-
| Investment Skills Lexicon(`7235d34`,固定快照;仅改写路由段的一句前置条件与退路) | finterm.ai | MIT | <https://github.com/finterm-ai/investment-skills> | `selected-skills/investment-skills/LICENSE` | 「精选 Skills」中的 `buffett-investment-framework` |
|
|
12
|
-
| China Stock Research Skills(`d49f1f3`,未修改的固定快照) | spikeHongg | MIT | <https://github.com/spikeHongg/china-stock-research-skills> | `selected-skills/china-stock-research-skills/LICENSE` | 「精选 Skills
|
|
13
|
-
| InvestSkill(`c3f2a17`,固定快照;补 `name` 字段 + 28 颗的取数口径改写,分析正文未改) | yennanliu | MIT | <https://github.com/yennanliu/InvestSkill> | `selected-skills/InvestSkill/LICENSE` | 「精选 Skills」中的 28 个美股模块(`fact-check`、`bear-case`、`10k-digest`、`stock-valuation`、`risk-stress-test`、`tax-lens`
|
|
14
|
-
| Peter Lynch Research(`e0eaf58`,固定快照;套一层 skills 目录 + 取数口径改写,方法论、预算与输出模板未改) | Szymon Nycz(仓库账号 `DjNero11`) | MIT | <https://github.com/DjNero11/peter-lynch-skill> | `selected-skills/peter-lynch-skill/LICENSE` | 「精选 Skills」中的 `peter-lynch-skill`(个股快筛与尽调工作流,美股与境外上市口径) |
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
10
|
+
| 组件 | 作者 | 许可证 | 原始仓库 | 许可文本 | 可选模块 / 快照内共 | 用在哪里 |
|
|
11
|
+
|---|---|---|---|---|---|---|
|
|
12
|
+
| Lightweight Charts™ 5.2.1(standalone 构建) | TradingView | Apache-2.0 | <https://github.com/tradingview/lightweight-charts> | `lib/chart/vendor/LICENSE` | — | 插件内所有可交互图表的渲染层;`VERSION.json` 记有该构建的 sha256,归属标识(attribution logo)保持开启 |
|
|
13
|
+
| Investment Skills Lexicon(`7235d34`,固定快照;仅改写路由段的一句前置条件与退路) | finterm.ai | MIT | <https://github.com/finterm-ai/investment-skills> | `selected-skills/investment-skills/LICENSE` | 1 / 1 | 「精选 Skills」中的 `buffett-investment-framework` |
|
|
14
|
+
| China Stock Research Skills(`d49f1f3`,未修改的固定快照) | spikeHongg | MIT | <https://github.com/spikeHongg/china-stock-research-skills> | `selected-skills/china-stock-research-skills/LICENSE` | 6 / 7 | 「精选 Skills」中的六颗 A 股模块:`financial-health`、`risk-warning-catalysts`、`valuation-investment-strategy`、`strategy-business-transition`、`industry-competition-moat`、`business-decomposition-order-quality`;快照内的 orchestrator 不开放(与本插件的角色路由冲突) |
|
|
15
|
+
| InvestSkill(`c3f2a17`,固定快照;补 `name` 字段 + 28 颗的取数口径改写,分析正文未改) | yennanliu | MIT | <https://github.com/yennanliu/InvestSkill> | `selected-skills/InvestSkill/LICENSE` | 28 / 34 | 「精选 Skills」中的 28 个美股模块(`fact-check`、`bear-case`、`10k-digest`、`stock-valuation`、`risk-stress-test`、`tax-lens` 等);另六颗(编排、报告输出口、自带出图、三颗 alias 残片)留在快照里作为可审查材料 |
|
|
16
|
+
| Peter Lynch Research(`e0eaf58`,固定快照;套一层 skills 目录 + 取数口径改写,方法论、预算与输出模板未改) | Szymon Nycz(仓库账号 `DjNero11`) | MIT | <https://github.com/DjNero11/peter-lynch-skill> | `selected-skills/peter-lynch-skill/LICENSE` | 1 / 1 | 「精选 Skills」中的 `peter-lynch-skill`(个股快筛与尽调工作流,美股与境外上市口径) |
|
|
17
|
+
| Trading Skills(`f1ae7d4`,固定快照;平铺掉上游的主题分组 + 取数与计算口径改写,判定档位、阈值与分析结论未改) | marian2js | MIT | <https://github.com/marian2js/trading-skills> | `selected-skills/trading-skills/LICENSE` | 9 / 19 | 「精选 Skills」中的 9 颗交易过程模块(`catalyst-map`、`watchlist-review`、`evidence-gap-check`、`thesis-validation`、`risk-reward-sanity-check`、`execution-plan-check`、`portfolio-concentration`、`journal-pattern-analyzer`、`post-trade-review`);券商执行面那颗不进发布包,其余排除项留在快照里作为材料 |
|
|
18
|
+
|
|
19
|
+
五份快照合计 **45 个可选模块**(首页「精选 Skills」那句里的两个数字与此同源,由回归测试按 catalog 现算钉住)。
|
|
20
|
+
它们的收录方式、上游 commit、维护状态与逐颗排除理由记在各自的 `UPSTREAM.md` 里,并且**默认全部关闭**,
|
|
21
|
+
只在使用者于配置页显式开启后才对新建的 Capital 会话可见。
|
|
22
|
+
上游自带的编排、报告与出图 skill 不进入可选清单(InvestSkill 的六颗与 Trading Skills 的九颗仍留在快照里作为可审查材料):
|
|
23
|
+
前者与本插件既有的角色路由冲突,后两者与已删除的报告交付链路、以及"出图只走 `render_chart`"的约定冲突。
|
|
24
|
+
Trading Skills 另外排除的几类走的是同一批约定:券商 API 执行面(在对话里采集凭据、真实下单)不进可选清单、
|
|
25
|
+
也不进发布包;给仓位数字与持仓加减动作的模块按「买卖动作与仓位决策属于明确冲突」的既有口径排除;
|
|
26
|
+
把取数写死成"向用户点选付费服务商再自己调接口"的三颗不收录,本插件没有那些服务商的凭据,密钥只进凭据域。
|
|
27
|
+
|
|
28
|
+
**四处对上游正文的改写都是合规改写,不是编辑**:上游 skill 写给"什么工具都在手边"的宿主——前三份成规模地要求
|
|
29
|
+
分析角色自己去 `web search` 取实时行情,其中两份还留着"取不到就凭印象估一个"的逃生口;最新这份一次 `web search`
|
|
30
|
+
都没写,但伸手取数换了形态:`curl` 付费服务商的接口、认领对话里给过的 API 凭据,以及"能跑代码的宿主就去用共享
|
|
31
|
+
python 模块"。本插件的取数只有一个入口(交给负责取数的角色),统计量交给数据侧,凭据不进对话,
|
|
32
|
+
而"用记忆里的数字继续分析"没有任何工具会拦,所以只能改在正文里。
|
|
25
33
|
改了什么、影响几篇,逐条记在对应快照的 `UPSTREAM.md`;改写结果由仓库自带的回归测试逐条复查。
|
|
26
34
|
方法论、评分表、输出模板与分析结论一字未改。
|
|
27
35
|
|
|
36
|
+
## 随包发布的是什么
|
|
37
|
+
|
|
38
|
+
每份快照在 npm 包里只带**运行时正文与溯源**:那颗 skill 的 `SKILL.md` 与其附属文件、`LICENSE` 原件、
|
|
39
|
+
以及本仓写的 `UPSTREAM.md`。上游仓库的其他材料(README 及其变体、它自己的 CI 与 workflow、静态站与成图、
|
|
40
|
+
roadmap 与贡献指南、站点体检记录、给别的宿主用的接线配置)由该快照目录里的 `.npmignore` 挡在包外——
|
|
41
|
+
那份文件是排除口径的唯一声明处,回归测试逐颗读它并拿发布清单反查(目录规则与文件规则两类都问)。
|
|
42
|
+
全量快照完整住在 git,`github:` 安装与"当时是哪个 commit"的复核都不受影响。
|
|
43
|
+
|
|
44
|
+
上游自带的可执行面文件(`framework.py`、`install.sh`、`Makefile`、`openai.yaml`)**照旧随包保留作为可审查材料**:
|
|
45
|
+
本插件的根角色没有 shell,provider 与工具面只读取文档、从不执行它们,正文里也不许出现"跑这个脚本"的指令
|
|
46
|
+
(有方法论入口的那颗同时写明了没有 shell 时直接读哪份附属文件)。不进可选清单的 skill 同样随包保留,
|
|
47
|
+
但运行时读不到:技能注册的名单与原文旁路的文件名都是按可选清单现算的闭集。
|
|
48
|
+
|
|
28
49
|
## npm 运行时依赖
|
|
29
50
|
|
|
30
|
-
| 包 |
|
|
51
|
+
| 包 | 声明版本 | 许可证 | 用途 |
|
|
31
52
|
|---|---|---|---|
|
|
32
|
-
| `@deepseek-ai/schemastery` | 3.18.4 | MIT | 工具参数的 JSON Schema 构造 |
|
|
33
|
-
| `zod` | 4.5.4 | MIT | 配置与持久化结构的校验 |
|
|
34
|
-
| `turndown` | 7.2.4 | MIT | 网页材料 HTML → Markdown |
|
|
35
|
-
| `@joplin/turndown-plugin-gfm` | 1.0.68 | MIT | 同上,表格等 GFM 扩展 |
|
|
53
|
+
| `@deepseek-ai/schemastery` | ^3.18.4 | MIT | 工具参数的 JSON Schema 构造 |
|
|
54
|
+
| `zod` | ^4.5.4 | MIT | 配置与持久化结构的校验 |
|
|
55
|
+
| `turndown` | ^7.2.4 | MIT | 网页材料 HTML → Markdown |
|
|
56
|
+
| `@joplin/turndown-plugin-gfm` | ^1.0.68 | MIT | 同上,表格等 GFM 扩展 |
|
|
57
|
+
|
|
58
|
+
图表 UI、设置卡片与自选股这三个随包携带的嵌套包复用同一批运行时依赖(前者不带依赖,
|
|
59
|
+
后两者分别只用 schemastery 与 zod),不各带一份副本。
|
|
36
60
|
|
|
37
61
|
## 由宿主提供、不随本包分发
|
|
38
62
|
|
|
39
63
|
`@deepseek-ai/cordis`(`^4.0.2`)、`@deepseek-ai/dsh-skill` 与 `@deepseek-ai/dsh-skill-filesystem`
|
|
40
|
-
(均 `0.2.0-rc.2`)由 DSH
|
|
64
|
+
(均 `0.2.0-rc.2`)由 DSH 宿主提供,本插件只声明依赖。
|
|
65
|
+
三个客户端 bundle(图表卡片、设置卡片、自选股)在构建时把 `react`、`react-dom`、
|
|
66
|
+
`@deepseek-ai/dsh-client-store` 与 `@deepseek-ai/dsh-client-ui-primitives` 留成 external:
|
|
67
|
+
本插件既不打进去也不声明它们,运行时由宿主页面提供。宿主的许可见 <https://github.com/deepseek-ai>。
|
|
68
|
+
|
|
69
|
+
## 构建期使用、不随包分发
|
|
70
|
+
|
|
71
|
+
| 包 | 声明版本 | 许可证 | 构建期用途 |
|
|
72
|
+
|---|---|---|---|
|
|
73
|
+
| `typescript` | ^5.0.0(实测 5.9.3) | Apache-2.0 | 把仓内 TypeScript 源码编译为随包发布的 lib 产物 |
|
|
74
|
+
| `esbuild` | ^0.28.2 | MIT | 打三个客户端 bundle;上面那四个 external 就是它留出来的 |
|
|
75
|
+
| `js-yaml` | ^5.4.1 | MIT | 解析与校验 preset 的 patch 声明 |
|
|
76
|
+
| `lightweight-charts` | 5.2.1 | Apache-2.0 | 构建期把 standalone 副本 vendored 进 lib/chart/vendor 目录,随包发布的是那份副本(见上表) |
|
|
77
|
+
| `@deepseek-ai/dsh-system-prompt` | ^0.2.0-rc.2 | MIT | 只用它的类型面(一处 `import type`),编译产物里不留引用 |
|
|
41
78
|
|
|
42
79
|
## 外部数据与检索服务
|
|
43
80
|
|
|
@@ -45,9 +82,11 @@
|
|
|
45
82
|
同花顺 Fuyao 结构化数据接口、Wind Alice 金融信披文档检索、AnySearch 网页搜索与提取、
|
|
46
83
|
PaddleOCR 文档解析,以及东方财富、腾讯的公开行情接口与若干具名公开来源。
|
|
47
84
|
本插件不重新分发这些服务的原始数据,图表与结论所依据的数据集只保存在使用者本机,默认保留 7 天。
|
|
85
|
+
本插件也不接入券商接口:可选清单里没有任何下单、改单或读取账户的能力,密钥一律只进宿主的凭据域。
|
|
48
86
|
|
|
49
87
|
## 本插件自身
|
|
50
88
|
|
|
51
89
|
Capital Generation 的原创代码与文档以 MIT 许可发布,见仓库根的 `LICENSE`。
|
|
52
|
-
|
|
90
|
+
本文件不构成对任何第三方项目、数据源或其观点的背书;五份 Skill 快照里的方法论与结论属于原作者,
|
|
53
91
|
使用前请自行复核来源,尤其不要把按美股语境写的框架直接当作 A 股规则。
|
|
92
|
+
交易过程类的模块(第五份)提供的是下单前的检查与下单后的复盘方法,本插件不据它们下单、不改单,也不给仓位数字。
|
package/capital-config/client.js
CHANGED
|
@@ -5,7 +5,7 @@ window.__ModuleLoader__.load({
|
|
|
5
5
|
var module = { exports: {} }
|
|
6
6
|
var exports = module.exports
|
|
7
7
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' })
|
|
8
|
-
"use strict";var D=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var te=Object.prototype.hasOwnProperty;var ie=(t,e,i)=>()=>{if(i)throw i[0];try{return t&&(e=t(t=0)),e}catch(n){throw i=[n],n}};var ae=(t,e)=>{for(var i in e)D(t,i,{get:e[i],enumerable:!0})},se=(t,e,i,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let l of ee(e))!te.call(t,l)&&l!==i&&D(t,l,{get:()=>e[l],enumerable:!(n=Z(e,l))||n.enumerable});return t};var ne=t=>se(D({},"__esModule",{value:!0}),t);var H={};ae(H,{SELECTED_SKILL_CATALOG:()=>oe,SELECTED_SKILL_SKILL_DIRS:()=>le,SELECTED_SKILL_TAG_LABELS:()=>re});var le,oe,re,U=ie(()=>{"use strict";le=Object.freeze({"investment-skills":"skills","china-stock-research-skills":"skills",InvestSkill:"plugins/us-stock-analysis/skills","peter-lynch-skill":"skills"}),oe=Object.freeze([{key:"buffettFramework",name:"buffett-investment-framework",label:{zh:"Buffett Investment Framework",en:"Buffett Investment Framework"},description:{zh:"\u4EE5\u8BC1\u636E\u4E3A\u57FA\u7840\u7684\u5546\u4E1A\u8D28\u91CF\u3001\u8D44\u672C\u914D\u7F6E\u3001\u4F30\u503C\u548C\u98CE\u9669\u5206\u6790\u6846\u67B6\u3002\u4E3B\u8981\u6E90\u4E8E\u7F8E\u80A1\u8BED\u5883\u3002",en:"Evidence-led business quality, capital allocation, valuation, and risk analysis. Primarily US-market oriented."},owner:"finterm-ai",repository:"investment-skills",status:"experimental",lastCommit:"2026-07-22",reviewBy:"2026-11-06",tags:["business-analysis","cash-flow","perspective","risk","valuation"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u4E0D\u80FD\u76F4\u63A5\u5F53\u4F5C A \u80A1\u89C4\u5219\u6216\u6295\u8D44\u5EFA\u8BAE\u3002",en:"Experimental; do not treat it as A-share rules or investment advice."}},{key:"financialHealth",name:"financial-health",label:{zh:"\u8D22\u52A1\u5065\u5EB7",en:"Financial Health"},description:{zh:"\u68C0\u67E5\u76C8\u5229\u8D28\u91CF\u3001\u73B0\u91D1\u8F6C\u6362\u3001\u8425\u8FD0\u8D44\u672C\u3001\u6760\u6746\u548C\u8D44\u4EA7\u8D1F\u503A\u8868\u98CE\u9669\u3002",en:"Checks earnings quality, cash conversion, working capital, leverage, and balance-sheet risk."},owner:"spikeHongg",repository:"china-stock-research-skills",status:"watchlist",lastCommit:"2026-03-09",reviewBy:"2026-11-06",tags:["a-share","cash-flow","financial-health","risk"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0A\u6E38\u7EF4\u62A4\u8F83\u4E45\u672A\u66F4\u65B0\uFF0C\u542F\u7528\u524D\u8BF7\u81EA\u884C\u590D\u6838\u5185\u5BB9\u548C\u6765\u6E90\u3002",en:"Cold-start experiment; upstream has been quiet, so review content and sources before use."}},{key:"riskWarningCatalysts",name:"risk-warning-catalysts",label:{zh:"\u98CE\u9669\u4E0E\u50AC\u5316\u5242\u76D1\u63A7",en:"Risk Warning Catalysts"},description:{zh:"\u628A\u7814\u7A76\u7ED3\u8BBA\u8F6C\u6210\u5E26\u6765\u6E90\u3001\u9608\u503C\u548C\u590D\u67E5\u9891\u7387\u7684\u98CE\u9669\u4E0E\u50AC\u5316\u5242\u76D1\u63A7\u9879\u3002",en:"Turns research into source-backed risk and catalyst monitoring with thresholds and review cadence."},owner:"spikeHongg",repository:"china-stock-research-skills",status:"watchlist",lastCommit:"2026-03-09",reviewBy:"2026-11-06",tags:["a-share","monitoring","risk"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0D\u8D1F\u8D23\u4F30\u503C\u6216\u4EA4\u6613\u51B3\u7B56\u3002",en:"Cold-start experiment; it does not make valuation or trading decisions."}},{key:"valuationInvestmentStrategy",name:"valuation-investment-strategy",label:{zh:"\u4F30\u503C\u4E0E\u60C5\u666F\u5206\u6790",en:"Valuation Investment Strategy"},description:{zh:"\u5728\u4E8B\u5B9E\u57FA\u7840\u5B8C\u6210\u540E\u6784\u5EFA\u5E26\u5047\u8BBE\u3001\u60C5\u666F\u548C\u5931\u6548\u6761\u4EF6\u7684\u4F30\u503C\u6846\u67B6\u3002",en:"Builds valuation scenarios with assumptions and invalidation conditions after the factual base is ready."},owner:"spikeHongg",repository:"china-stock-research-skills",status:"watchlist",lastCommit:"2026-03-09",reviewBy:"2026-11-06",tags:["a-share","risk","valuation"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u8F93\u51FA\u4E0D\u7B49\u4E8E\u4E70\u5356\u6216\u4ED3\u4F4D\u5EFA\u8BAE\u3002",en:"Cold-start experiment; output is not a buy, sell, or position-size recommendation."}},{key:"strategyBusinessTransition",name:"strategy-business-transition",label:{zh:"\u6218\u7565\u4E0E\u4E1A\u52A1\u8F6C\u578B",en:"Strategy Business Transition"},description:{zh:"\u68C0\u9A8C\u516C\u53F8\u6218\u7565\u53D9\u4E8B\u3001\u4E1A\u52A1\u8FC1\u79FB\u3001\u8D44\u672C\u914D\u7F6E\u548C\u8F6C\u578B\u91CC\u7A0B\u7891\u3002",en:"Tests strategy narratives, business migration, capital allocation, and transition milestones."},owner:"spikeHongg",repository:"china-stock-research-skills",status:"watchlist",lastCommit:"2026-03-09",reviewBy:"2026-11-06",tags:["a-share","strategy","risk"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0D\u8D1F\u8D23\u4F30\u503C\u6216\u4EA4\u6613\u8BA1\u5212\u3002",en:"Cold-start experiment; it does not make valuation or trading plans."}},{key:"industryCompetitionMoat",name:"industry-competition-moat",label:{zh:"\u884C\u4E1A\u7ADE\u4E89\u4E0E\u62A4\u57CE\u6CB3",en:"Industry Competition Moat"},description:{zh:"\u5206\u6790\u884C\u4E1A\u7ED3\u6784\u3001\u7ADE\u4E89\u683C\u5C40\u3001\u4F9B\u9700\u548C\u516C\u53F8\u5DEE\u5F02\u5316\u662F\u5426\u53EF\u6301\u7EED\u3002",en:"Analyzes industry structure, competition, supply-demand, and sustainable differentiation."},owner:"spikeHongg",repository:"china-stock-research-skills",status:"watchlist",lastCommit:"2026-03-09",reviewBy:"2026-11-06",tags:["a-share","business-analysis","competition","risk"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u884C\u4E1A\u5224\u65AD\u4ECD\u9700\u56DE\u5230\u516C\u5F00\u8BC1\u636E\u3002",en:"Cold-start experiment; industry conclusions still require public evidence."}},{key:"businessDecompositionOrderQuality",name:"business-decomposition-order-quality",label:{zh:"\u4E1A\u52A1\u62C6\u89E3\u4E0E\u8BA2\u5355\u8D28\u91CF",en:"Business Decomposition Order Quality"},description:{zh:"\u62C6\u89E3\u4EA7\u54C1\u3001\u5BA2\u6237\u3001\u9879\u76EE\u548C\u8BA2\u5355\uFF0C\u68C0\u67E5\u589E\u957F\u80FD\u5426\u8F6C\u5316\u4E3A\u6536\u5165\u548C\u73B0\u91D1\u3002",en:"Breaks down products, customers, projects, and orders to test conversion into revenue and cash."},owner:"spikeHongg",repository:"china-stock-research-skills",status:"watchlist",lastCommit:"2026-03-09",reviewBy:"2026-11-06",tags:["a-share","business-analysis","cash-flow","orders","risk"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0D\u8D1F\u8D23\u6700\u7EC8\u4F30\u503C\u6216\u4E70\u5356\u5EFA\u8BAE\u3002",en:"Cold-start experiment; it does not make final valuation or trading recommendations."}},{key:"tenKDigest",name:"10k-digest",label:{zh:"\u5E74\u62A5\uFF0810-K\uFF09\u9010\u8282\u7CBE\u8BFB",en:"10-K Report Digest"},description:{zh:"\u9010\u8282\u7CBE\u8BFB\u7F8E\u80A1\u5E74\u62A5 10-K\uFF0C\u4EA7\u51FA\u6458\u8981\u3001\u5206\u8282\u8981\u70B9\u3001\u5173\u952E\u6307\u6807\u4E0E\u53EF\u6838\u5BF9\u7684\u51FA\u5904\u5F15\u7528\u3002",en:"Reads a 10-K section by section into an abstract, section summaries, key metrics and sourced references."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","filings","business-analysis"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u7AE0\u8282\u53E3\u5F84\u6309\u7F8E\u80A1 10-K \u5199\uFF0CA \u80A1\u5E74\u62A5\u7684\u62AB\u9732\u7ED3\u6784\u4E0D\u540C\uFF0C\u4E0D\u80FD\u76F4\u63A5\u5E73\u79FB\u3002",en:"Experimental; the section map follows US 10-K disclosure and does not transfer to A-share annual reports."}},{key:"bearCase",name:"bear-case",label:{zh:"\u7A7A\u5934\u89C6\u89D2\u7EA2\u961F\u53CD\u9A73",en:"Bear Case Red Team"},description:{zh:"\u9488\u5BF9\u4E00\u4E2A\u770B\u591A\u8BBA\u70B9\u523B\u610F\u6784\u5EFA\u6700\u5F3A\u7684\u53CD\u9762\u8BBA\u8BC1\uFF0C\u9010\u6761\u627E\u51FA\u53CD\u8BC1\u4E0E\u8106\u5F31\u5047\u8BBE\u3002",en:"Builds the strongest deliberate short-side counter-argument to a bullish thesis, with counterevidence."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","risk","perspective"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u53EA\u505A\u53CD\u9762\u8BBA\u8BC1\uFF0C\u4E0D\u6784\u6210\u5356\u51FA\u6216\u505A\u7A7A\u5EFA\u8BAE\uFF0C\u4E5F\u4E0D\u9884\u6D4B\u8DCC\u5E45\u3002",en:"Experimental; a counter-argument only, not a sell or short recommendation and no downside forecast."}},{key:"catalystCalendar",name:"catalyst-calendar",label:{zh:"90 \u5929\u50AC\u5316\u5242\u65E5\u5386",en:"Catalyst Calendar"},description:{zh:"\u5217\u51FA\u672A\u6765 90 \u5929\u7684\u4E8B\u4EF6\u50AC\u5316\u5242\u4E0E\u9884\u671F\u5F71\u54CD\uFF0C\u7528\u6765\u5B89\u6392\u590D\u67E5\u8282\u594F\u3002",en:"Lists upcoming catalysts over a 90-day window with expected impact and a review cadence."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","earnings","monitoring"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u4E8B\u4EF6\u5F71\u54CD\u662F\u5B9A\u6027\u5224\u65AD\uFF0C\u4E0D\u9884\u6D4B\u5177\u4F53\u6DA8\u8DCC\u3002",en:"Experimental; catalyst impact is qualitative and does not forecast price moves."}},{key:"competitorAnalysis",name:"competitor-analysis",label:{zh:"\u76F4\u63A5\u5BF9\u624B\u4E0E\u62A4\u57CE\u6CB3",en:"Competitor Analysis"},description:{zh:"\u56F4\u7ED5\u4E00\u5BB6\u516C\u53F8\u4E0E\u5176\u76F4\u63A5\u5BF9\u624B\u505A\u62A4\u57CE\u6CB3\u3001\u5E02\u573A\u5730\u4F4D\u4E0E\u884C\u4E1A\u683C\u5C40\u5206\u6790\u3002",en:"Moat, market position and industry dynamics for one company against its direct rivals."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","competition","business-analysis","risk"],riskNote:{zh:"\u4E0E\u300C\u884C\u4E1A\u7ADE\u4E89\u4E0E\u62A4\u57CE\u6CB3\u300D\u89C6\u89D2\u91CD\u53E0\uFF0C\u540C\u4E1A\u540D\u5355\u4E0E\u53E3\u5F84\u6309\u7F8E\u80A1\u62AB\u9732\u53D6\u6750\uFF1B\u7ED3\u8BBA\u4ECD\u8981\u56DE\u5230\u516C\u5F00\u8BC1\u636E\u3002",en:"Overlaps the industry/moat lens; peer sets follow US disclosure, so conclusions still need public evidence."}},{key:"dividendAnalysis",name:"dividend-analysis",label:{zh:"\u5206\u7EA2\u56DE\u8D2D\u4E0E\u8D44\u672C\u914D\u7F6E",en:"Dividend & Capital Allocation"},description:{zh:"\u628A\u5206\u7EA2\u3001\u56DE\u8D2D\u3001\u5E76\u8D2D\u3001\u503A\u52A1\u7BA1\u7406\u4E0E\u81EA\u7531\u73B0\u91D1\u6D41\u53BB\u5411\u5408\u8D77\u6765\u770B\u8D44\u672C\u914D\u7F6E\u7EAA\u5F8B\u3002",en:"Reviews dividends, buybacks, M&A, debt and FCF deployment as one capital-allocation discipline."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","capital-allocation","cash-flow","valuation"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u4E0D\u627F\u8BFA\u80A1\u606F\u53EF\u6301\u7EED\u6027\uFF0C\u4E5F\u4E0D\u9884\u6D4B\u6536\u76CA\u3002",en:"Experimental; it does not promise dividend sustainability or returns."}},{key:"earningsCallAnalysis",name:"earnings-call-analysis",label:{zh:"\u4E1A\u7EE9\u7535\u8BDD\u4F1A\u6587\u672C\u5206\u6790",en:"Earnings Call Analysis"},description:{zh:"\u4ECE\u4E1A\u7EE9\u7535\u8BDD\u4F1A\u7EAA\u8981\u91CC\u8BFB\u60C5\u7EEA\u3001\u4E3B\u9898\u4E0E\u7BA1\u7406\u5C42\u53E3\u5F84\u7684\u53D8\u5316\u3002",en:"Reads sentiment, themes and shifts in management tone from earnings call transcripts."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","earnings","perspective"],riskNote:{zh:"\u5FC5\u987B\u5148\u62FF\u5230\u7EAA\u8981\u539F\u6587\uFF1B\u6CA1\u6709\u539F\u6587\u65F6\u4E0D\u8BB8\u51ED\u5370\u8C61\u8865\u5199\u7BA1\u7406\u5C42\u8868\u6001\u3002",en:"Needs the actual transcript; never reconstruct management remarks from memory."}},{key:"earningsPreview",name:"earnings-preview",label:{zh:"\u8D22\u62A5\u524D\u4E09\u6863\u60C5\u666F\u63A8\u6F14",en:"Earnings Preview"},description:{zh:"\u5BF9\u6BD4\u4E00\u81F4\u9884\u671F\u4E0E\u671F\u6743\u9690\u542B\u6CE2\u52A8\uFF0C\u7ED9\u51FA\u8D85\u9884\u671F/\u7B26\u5408/\u4E0D\u53CA\u4E09\u6863\u60C5\u666F\u4E0E\u5404\u81EA\u8981\u76EF\u7684\u6307\u6807\u3002",en:"Compares consensus with the implied move and lays out beat / in-line / miss scenarios with watch KPIs."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","earnings","risk","monitoring"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u6B63\u6587\u6BCF\u6863\u60C5\u666F\u5E26\u4ED3\u4F4D\u5199\u6CD5\uFF0C\u53EA\u5F53\u63A8\u6F14\u7EC3\u4E60\uFF0C\u4E0D\u662F\u4EA4\u6613\u6307\u4EE4\u3002",en:"Experimental; each scenario carries position wording \u2014 read it as a rehearsal, not a trade instruction."}},{key:"economicsAnalysis",name:"economics-analysis",label:{zh:"\u7F8E\u56FD\u5B8F\u89C2\u6307\u6807\u89E3\u8BFB",en:"US Economics Analysis"},description:{zh:"\u89E3\u8BFB\u7F8E\u56FD\u5B8F\u89C2\u6570\u636E\u4E0E\u5229\u7387\u8DEF\u5F84\uFF0C\u5E76\u4EA4\u4EE3\u5B83\u4F20\u5BFC\u5230\u5E02\u573A\u7684\u8DEF\u5F84\u3002",en:"Interprets US macro prints and the rate path, and spells out the transmission to markets."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","macro","risk"],riskNote:{zh:"\u53E3\u5F84\u662F\u7F8E\u56FD\u5B8F\u89C2\uFF0C\u5BF9 A \u80A1\u53EA\u80FD\u5F53\u5916\u90E8\u73AF\u5883\u53D8\u91CF\uFF0C\u4E0D\u76F4\u63A5\u63A8\u653F\u7B56\u3002",en:"US macro only; for A-shares treat it as an external condition, not a policy read."}},{key:"etfAnalysis",name:"etf-analysis",label:{zh:"ETF \u5C3D\u8C03\u4E0E\u5951\u5408\u5EA6\u8BC4\u5206",en:"ETF Analysis"},description:{zh:"\u8D39\u7387\u3001\u8DDF\u8E2A\u8BEF\u5DEE\u3001\u6D41\u52A8\u6027\u3001\u6210\u5206\u96C6\u4E2D\u5EA6\u4E0E\u6301\u4ED3\u91CD\u53E0\uFF0C\u6C47\u6210\u4E00\u679A ETF \u5951\u5408\u5EA6\u8BC4\u5206\u3002",en:"Expense ratio, tracking difference, liquidity, concentration and overlap rolled into a fitness score."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","instruments","portfolio","risk"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u8BC4\u5206\u8861\u91CF\u7ED3\u6784\u7279\u5F81\uFF0C\u4E0D\u4EE3\u8868\u6536\u76CA\u9884\u671F\u3002",en:"Experimental; the score describes structure, not expected return."}},{key:"factCheck",name:"fact-check",label:{zh:"\u9010\u6761\u4E3B\u5F20\u6838\u9A8C\u4E0E\u8865\u5F15\u7528",en:"Fact Check"},description:{zh:"\u628A\u62A5\u544A\u91CC\u7684\u6BCF\u4E2A\u6570\u5B57\u4E0E\u4E8B\u5B9E\u4E3B\u5F20\u62C6\u51FA\u6765\u9010\u6761\u6BD4\u5BF9\u4E00\u624B\u6765\u6E90\uFF0C\u6807\u6CE8\u5DF2\u6838\u9A8C/\u4E0D\u7B26/\u65E0\u6CD5\u6838\u9A8C\u5E76\u56DE\u586B\u5F15\u7528\u3002",en:"Extracts every figure and claim, checks each against a primary source, and marks verified / mismatch / unverifiable."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","filings","verification"],riskNote:{zh:"\u4E00\u624B\u6765\u6E90\u6E05\u5355\u6309 SEC \u6587\u4EF6\u3001\u516C\u53F8 IR\u3001FRED \u4E0E\u4EA4\u6613\u6240\u6570\u636E\u5199\uFF1BA \u80A1\u6750\u6599\u8981\u6362\u6210\u516C\u544A\u4E0E\u5B98\u65B9\u62AB\u9732\u3002",en:"Its primary-source list is SEC / IR / FRED / exchange data; swap in announcements and official disclosure for A-shares."}},{key:"financialReportAnalyst",name:"financial-report-analyst",label:{zh:"\u8D22\u62A5\u8D28\u91CF\u4E0E\u7EA2\u65D7\u89E3\u8BFB",en:"Financial Report Analyst"},description:{zh:"\u4ECE 10-K / 10-Q \u8BFB\u62A5\u8868\u8D28\u91CF\u3001\u5F02\u5E38\u7EA2\u65D7\u4E0E\u4E00\u4E2A\u53EF\u4EA4\u4EE3\u51FA\u5904\u7684\u4FE1\u53F7\u3002",en:"Reads statement quality, red flags and one sourced signal from 10-K / 10-Q filings."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","filings","financial-health","risk"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u7EA2\u65D7\u662F\u63D0\u793A\u590D\u67E5\u7684\u7EBF\u7D22\uFF0C\u4E0D\u662F\u7ED3\u8BBA\u3002",en:"Experimental; red flags are prompts to re-check, not conclusions."}},{key:"industryMap",name:"industry-map",label:{zh:"\u4EA7\u4E1A\u94FE\u5730\u56FE\u4E0E\u54BD\u5589\u70B9",en:"Industry Map"},description:{zh:"\u628A\u4E0A\u4E0B\u6E38\u753B\u6210\u6709\u5411\u56FE\uFF0C\u5B9A\u4F4D\u516C\u53F8\u4F4D\u7F6E\u3001\u627E\u4F9B\u9700\u74F6\u9888\u4E0E\u5229\u6DA6\u6C60\uFF0C\u5E76\u6D3E\u751F\u4E8C\u7EBF\u7EBF\u7D22\u3002",en:"Maps the value chain as a directed graph to locate the company, find chokepoints and second-order ideas."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","macro","competition","business-analysis"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u4EA7\u4E1A\u94FE\u5224\u65AD\u4ECD\u9700\u9010\u6761\u56DE\u5230\u516C\u5F00\u8BC1\u636E\u3002",en:"Experimental; value-chain reads still need claim-by-claim public evidence."}},{key:"insiderTrading",name:"insider-trading",label:{zh:"\u5185\u90E8\u4EBA\u589E\u51CF\u6301\u8FFD\u8E2A",en:"Insider Trading"},description:{zh:"\u4ECE SEC Form 4 \u8FFD\u8E2A\u9AD8\u7BA1\u4E0E\u8463\u4E8B\u7684\u589E\u51CF\u53D8\u52A8\u5E76\u505A\u89E3\u8BFB\u3002",en:"Tracks executive and director buying and selling from SEC Form 4 filings."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","filings","monitoring","perspective"],riskNote:{zh:"\u4F9D\u8D56\u7F8E\u56FD\u5185\u90E8\u4EBA\u7533\u62A5\u5236\u5EA6\uFF1BA \u80A1\u8981\u6362\u6210\u5927\u80A1\u4E1C\u4E0E\u8463\u76D1\u9AD8\u53D8\u52A8\u516C\u544A\uFF0C\u53E3\u5F84\u4E0D\u53EF\u76F4\u63A5\u5E73\u79FB\u3002",en:"Assumes US insider filings; A-shares need major-holder and director-change announcements instead."}},{key:"institutionalOwnership",name:"institutional-ownership",label:{zh:"\u673A\u6784\u6301\u4ED3\u53D8\u52A8",en:"Institutional Ownership"},description:{zh:"\u4ECE 13F \u6587\u4EF6\u8BFB\u673A\u6784\u6301\u4ED3\u53D8\u5316\uFF0C\u8BC6\u522B\u673A\u6784\u8D44\u91D1\u7684\u8FC1\u79FB\u65B9\u5411\u3002",en:"Reads changes in institutional holdings from 13F filings to spot where the money is moving."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","filings","monitoring"],riskNote:{zh:"13F \u6709\u4E00\u4E2A\u5B63\u5EA6\u6EDE\u540E\u4E14\u4E0D\u542B\u7A7A\u5934\u4ED3\u4F4D\uFF1B\u8BFB\u6210\u8D8B\u52BF\u4E4B\u524D\u5148\u8BB0\u4F4F\u8FD9\u4E24\u70B9\u3002",en:"13F lags a quarter and omits shorts \u2014 remember both before reading it as a trend."}},{key:"learningCoach",name:"learning-coach",label:{zh:"\u628A\u5206\u6790\u8BB2\u6210\u8BFE\u7A0B",en:"Learning Coach"},description:{zh:"\u50CF\u5BFC\u5E08\u4E00\u6837\u9010\u6307\u6807\u89E3\u91CA\u4E00\u4EFD\u5206\u6790\u7ED3\u679C\uFF0C\u518D\u53CD\u95EE 3\u20135 \u4E2A\u68C0\u9A8C\u7406\u89E3\u7684\u95EE\u9898\u3002",en:"Explains an analysis metric by metric in plain words, then asks 3\u20135 Socratic questions."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["education","perspective"],riskNote:{zh:"\u6559\u5B66\u6027\u8D28\uFF1B\u5B83\u89E3\u91CA\u7684\u662F\u4E0A\u6E38\u5206\u6790\u7684\u53E3\u5F84\uFF0C\u4E0D\u989D\u5916\u4EA7\u751F\u6295\u8D44\u5224\u65AD\u3002",en:"Educational; it explains the analysis it is handed and forms no investment view of its own."}},{key:"optionsAnalysis",name:"options-analysis",label:{zh:"\u671F\u6743\u5E0C\u814A\u5B57\u6BCD\u4E0E\u9690\u6CE2",en:"Options Analysis"},description:{zh:"\u770B\u5E0C\u814A\u5B57\u6BCD\u3001\u9690\u542B\u6CE2\u52A8\u7387\u4E0E\u7B56\u7565\u9002\u914D\u5EA6\uFF0C\u7528\u6765\u7406\u89E3\u671F\u6743\u7684\u98CE\u9669\u5F62\u72B6\u3002",en:"Reviews Greeks, implied volatility and strategy fit to characterise an options risk shape."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","instruments","risk"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u53EA\u89E3\u91CA\u671F\u6743\u98CE\u9669\uFF0C\u4E0D\u63A8\u8350\u5177\u4F53\u5408\u7EA6\u6216\u7B56\u7565\u7EC4\u5408\u3002",en:"Experimental; it explains options risk and does not recommend contracts or spreads."}},{key:"portfolioReview",name:"portfolio-review",label:{zh:"\u7EC4\u5408\u8868\u73B0\u4E0E\u914D\u7F6E\u504F\u79BB",en:"Portfolio Review"},description:{zh:"\u590D\u76D8\u7EC4\u5408\u7684\u6536\u76CA\u6765\u6E90\u3001\u96C6\u4E2D\u5EA6\u4E0E\u914D\u7F6E\u504F\u79BB\uFF0C\u5E76\u5217\u51FA\u9700\u8981\u76EF\u7684\u89C2\u5BDF\u9879\u3002",en:"Reviews portfolio performance, concentration and allocation drift, with items to watch."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","portfolio","risk"],riskNote:{zh:"\u4E0E\u672C\u63D2\u4EF6\u81EA\u5E26\u7684\u7EC4\u5408\u590D\u76D8\u6D41\u7A0B\u91CD\u53E0\uFF1B\u8FD9\u6761\u6309\u7F8E\u80A1\u8BED\u5883\u7ED9\u89C2\u5BDF\u6E05\u5355\uFF0C\u4ED3\u4F4D\u52A8\u4F5C\u4ECD\u7531\u4F7F\u7528\u8005\u51B3\u5B9A\u3002",en:"Overlaps the built-in portfolio review; this one gives a US-context watchlist and leaves position moves to you."}},{key:"positionLadder",name:"position-ladder",label:{zh:"\u5206\u6279\u5EFA\u4ED3\u4E0E\u644A\u8584\u8282\u594F",en:"Position Ladder"},description:{zh:"\u628A\u5EFA\u4ED3\u62C6\u6210\u5206\u6279\u7684\u80A1\u6570\u4E0A\u4E0B\u9650\u4E0E\u52A0\u51CF\u4ED3\u8282\u594F\uFF0C\u5E76\u68C0\u67E5\u6279\u6B21\u8BB0\u8D26\u3001\u6D17\u552E\u7A97\u53E3\u4E0E\u603B\u6536\u76CA\u53E3\u5F84\u3002",en:"Plans a staged entry with share-count floors and ceilings, trim/re-add cadence, lot and wash-sale checks."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","portfolio","monitoring"],riskNote:{zh:"\u6B63\u6587\u91CC\u7684\u80A1\u6570\u533A\u95F4\u662F\u63A8\u6F14\u7528\u7684\u7EC3\u4E60\uFF0C\u4E0D\u662F\u4E70\u5356\u6307\u4EE4\uFF1B\u672C\u63D2\u4EF6\u4E0D\u63D0\u4F9B\u6295\u8D44\u5EFA\u8BAE\uFF0C\u4ED3\u4F4D\u51B3\u5B9A\u5728\u4F7F\u7528\u8005\u3002",en:"Its share-count ranges are rehearsal arithmetic, not orders; this plugin gives no investment advice."}},{key:"resultValidator",name:"result-validator",label:{zh:"\u5206\u6790\u7ED3\u679C\u7F6E\u4FE1\u5EA6\u8BC4\u5206",en:"Result Validator"},description:{zh:"\u4ECE\u6570\u636E\u8D28\u91CF\u3001\u65B9\u6CD5\u4E00\u81F4\u6027\u4E0E\u4FE1\u53F7\u51B2\u7A81\u4E09\u4E2A\u7EF4\u5EA6\uFF0C\u7ED9\u4E00\u4EFD\u5206\u6790\u7ED3\u679C\u6253\u7F6E\u4FE1\u5EA6\u5206\u3002",en:"Scores an analysis's confidence across data quality, methodology and signal consistency."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["verification","perspective"],riskNote:{zh:"\u6253\u7684\u662F\u6570\u636E\u4E0E\u65B9\u6CD5\u81EA\u6D3D\u5EA6\uFF0C\u4E0D\u7B49\u4E8E\u9884\u6D4B\u51C6\u786E\u7387\uFF0C\u4E5F\u4E0D\u627F\u8BFA\u8868\u73B0\u3002",en:"It grades internal data/method consistency, not forecast accuracy or future performance."}},{key:"riskStressTest",name:"risk-stress-test",label:{zh:"\u7EC4\u5408\u538B\u529B\u6D4B\u8BD5\u4E0E\u98CE\u9669\u9884\u7B97",en:"Risk Stress Test"},description:{zh:"beta \u52A0\u6743\u655E\u53E3\u3001\u5386\u53F2\u60C5\u666F\u91CD\u653E\u3001VaR / CVaR\u3001\u6700\u5927\u56DE\u64A4\u4F30\u8BA1\u4E0E\u6D41\u52A8\u6027\u9000\u51FA\u5929\u6570\u3002",en:"Beta-weighted exposure, historical scenario replay, VaR / CVaR, drawdown estimates and days to exit."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","portfolio","risk","macro"],riskNote:{zh:"\u6A21\u578B\u5316\u4F30\u8BA1\uFF0C\u5047\u8BBE\u4E00\u53D8\u7ED3\u679C\u5C31\u53D8\uFF1B\u4E0D\u6784\u6210\u98CE\u63A7\u989D\u5EA6\uFF0C\u4E5F\u4E0D\u662F\u51CF\u4ED3\u6307\u4EE4\u3002",en:"Model output moves with every assumption; this is not a risk limit or a de-risking order."}},{key:"sectorAnalysis",name:"sector-analysis",label:{zh:"\u677F\u5757\u76F8\u5BF9\u5F3A\u5F31\u4E0E\u8F6E\u52A8",en:"Sector Analysis"},description:{zh:"\u770B\u7F8E\u56FD\u5404\u677F\u5757\u7684\u76F8\u5BF9\u5F3A\u5F31\u4E0E\u8F6E\u52A8\u7EBF\u7D22\uFF0C\u5E76\u4EA4\u4EE3\u5224\u65AD\u4F9D\u636E\u3002",en:"Reviews US sector positioning and rotation clues, and states what each read rests on."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","macro","competition"],riskNote:{zh:"\u677F\u5757\u5206\u7C7B\u6309\u7F8E\u80A1\u53E3\u5F84\uFF0C\u4E0E A \u80A1\u884C\u4E1A\u5206\u7C7B\u4E0D\u53EF\u76F4\u63A5\u5BF9\u7167\u3002",en:"Sector taxonomy is US-market; it does not line up with A-share industry classification."}},{key:"shortInterest",name:"short-interest",label:{zh:"\u7A7A\u5934\u6301\u4ED3\u4E0E\u6324\u538B\u6761\u4EF6",en:"Short Interest"},description:{zh:"\u8BFB\u7A7A\u5934\u6BD4\u4F8B\u3001\u56DE\u8865\u6210\u672C\u4E0E\u6324\u538B\u6761\u4EF6\uFF0C\u5E76\u68C0\u67E5\u5229\u7A7A\u5806\u79EF\u4FE1\u53F7\u3002",en:"Analyses short ratio, cost to cover, squeeze conditions and bearish positioning signals."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","filings","monitoring","risk"],riskNote:{zh:"\u7A7A\u5934\u6570\u636E\u662F\u6EDE\u540E\u62AB\u9732\uFF1B\u5F53\u6210\u5B9E\u65F6\u7ED3\u8BBA\u4E4B\u524D\u5148\u6838\u5BF9\u53E3\u5F84\u4E0E\u622A\u6B62\u65E5\u671F\u3002",en:"Short data is reported with a lag \u2014 check basis and as-of date before reading it as live."}},{key:"stockEval",name:"stock-eval",label:{zh:"\u57FA\u672C\u9762\u4E0E\u4F30\u503C\u7EFC\u5408\u8BC4\u4F30",en:"Stock Evaluation"},description:{zh:"\u628A\u8D22\u52A1\u8D28\u91CF\u3001\u6210\u957F\u3001\u4F30\u503C\u4E0E\u98CE\u9669\u5408\u5230\u4E00\u6B21\u7EFC\u5408\u8BC4\u4F30\u91CC\uFF0C\u5E76\u8F93\u51FA\u4E00\u4E2A\u53EF\u4EA4\u4EE3\u51FA\u5904\u7684\u7ED3\u8BBA\u3002",en:"Combines quality, growth, valuation and risk into one evaluation with a sourced conclusion."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","business-analysis","financial-health","valuation","risk"],riskNote:{zh:"\u4E0A\u6E38\u5DF2\u628A fundamental-analysis \u5408\u5165\u672C\u6761\uFF1B\u7EFC\u5408\u7ED3\u8BBA\u4ECD\u662F\u7F8E\u80A1\u53E3\u5F84\uFF0C\u4E0D\u66FF\u4EE3\u672C\u63D2\u4EF6\u65E2\u6709\u7814\u7A76\u6D41\u7A0B\u3002",en:"Upstream folded fundamental-analysis in; the read is US-context and does not replace Capital's own research flow."}},{key:"stockScreener",name:"stock-screener",label:{zh:"\u591A\u6807\u7684\u6A2A\u5411\u6253\u5206\u6392\u5E8F",en:"Stock Screener"},description:{zh:"\u6309\u4F30\u503C\u3001\u8D28\u91CF\u3001\u52A8\u91CF\u3001\u60C5\u7EEA\u4E0E\u6210\u957F\u4E94\u4E2A\u7EF4\u5EA6\u7ED9\u4E00\u7BEE\u5B50\u6807\u7684\u6253\u5206\u5E76\u6392\u5E8F\u3002",en:"Screens and ranks a list of US stocks across valuation, quality, momentum, sentiment and growth."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","valuation","business-analysis","technicals"],riskNote:{zh:"\u6392\u5E8F\u53EA\u53CD\u6620\u5F53\u671F\u6253\u5206\u53E3\u5F84\uFF0C\u4E0D\u9884\u6D4B\u672A\u6765\u8868\u73B0\uFF1B\u6807\u7684\u6E05\u5355\u4E0E\u6570\u636E\u6765\u6E90\u4ECD\u8981\u8D70\u672C\u63D2\u4EF6\u7684\u53D6\u6570\u94FE\u8DEF\u3002",en:"Ranking reflects the current scoring inputs only, not future performance; data still comes via Capital's own sources."}},{key:"stockValuation",name:"stock-valuation",label:{zh:"\u56DB\u65B9\u6CD5\u4F30\u503C\u533A\u95F4",en:"Stock Valuation"},description:{zh:"DCF\u3001\u53EF\u6BD4\u516C\u53F8\u3001EV \u500D\u6570\u4E0E\u5269\u4F59\u6536\u76CA\u4E00\u8D77\u51FA\u4F30\u503C\u533A\u95F4\uFF0C\u5E76\u9010\u6761\u4EA4\u4EE3\u5047\u8BBE\u3002",en:"Values a company with DCF, comparables, EV multiples and residual income, stating every assumption."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","valuation","cash-flow"],riskNote:{zh:"\u533A\u95F4\u968F\u5047\u8BBE\u5927\u5E45\u79FB\u52A8\uFF1B\u8F93\u51FA\u4E0D\u7B49\u4E8E\u76EE\u6807\u4EF7\uFF0C\u4E5F\u4E0D\u662F\u4E70\u5356\u5EFA\u8BAE\u3002",en:"Ranges swing with assumptions; the output is not a price target or a trade call."}},{key:"taxLens",name:"tax-lens",label:{zh:"\u7F8E\u56FD\u7A0E\u52A1\u89C6\u89D2\u68C0\u89C6\u6E05\u5355",en:"Tax Lens"},description:{zh:"\u957F\u77ED\u671F\u8D44\u672C\u5229\u5F97\u3001\u6D17\u552E\u7A97\u53E3\u3001\u5408\u683C\u80A1\u606F\u6301\u6709\u671F\u3001\u6279\u6B21\u9009\u62E9\u4E0E\u5E74\u5EA6\u7A0E\u8D1F\u62D6\u7D2F\u7684\u68C0\u89C6\u6E05\u5355\u3002",en:"Checks short vs. long-term gains, wash-sale windows, qualified dividends, lot selection and estimated tax drag."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","tax","portfolio"],riskNote:{zh:"\u53EA\u8BB2\u7F8E\u56FD\u7A0E\u5236\u4E14\u6B62\u4E8E\u6559\u80B2\u53E3\u5F84\uFF1B\u4E2D\u56FD\u5927\u9646\u7684\u7A0E\u52A1\u4E0E\u8D26\u6237\u5B89\u6392\u8BF7\u54A8\u8BE2\u4E13\u4E1A\u4EBA\u58EB\u3002",en:"US tax mechanics, educational only; get professional advice for mainland-China tax and account matters."}},{key:"technicalAnalysis",name:"technical-analysis",label:{zh:"\u6280\u672F\u9762\u4E0E\u6307\u6807\u89E3\u8BFB",en:"Technical Analysis"},description:{zh:"\u7528\u5747\u7EBF\u3001\u6210\u4EA4\u91CF\u3001RSI / MACD \u7B49\u6307\u6807\u8BFB\u8D8B\u52BF\u3001\u5173\u952E\u4EF7\u4F4D\u4E0E\u590D\u67E5\u89E6\u53D1\u6761\u4EF6\u3002",en:"Reads trend and key levels with moving averages, volume, RSI and MACD, plus re-check triggers."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","technicals","monitoring"],riskNote:{zh:"\u6280\u672F\u4FE1\u53F7\u53EA\u7ED9\u590D\u67E5\u6761\u4EF6\uFF0C\u4E0D\u9884\u6D4B\u65B9\u5411\uFF1B\u4E0D\u8981\u628A\u56FE\u5F62\u7ED3\u8BBA\u5199\u6210\u4E8B\u5B9E\u3002",en:"Technical signals are re-check triggers, not direction forecasts \u2014 do not present them as facts."}},{key:"thesisTracker",name:"thesis-tracker",label:{zh:"\u6295\u8D44\u8BBA\u70B9\u5B58\u6863\u4E0E\u590D\u6838",en:"Thesis Tracker"},description:{zh:"\u5199\u4E0B\u8BBA\u70B9\u7684 KPI\u3001\u5931\u6548\u6761\u4EF6\u4E0E\u50AC\u5316\u5242\uFF0C\u4E4B\u540E\u6309\u65B0\u6570\u636E\u590D\u67E5\u5E76\u7ED9\u51FA\u7EF4\u6301 / \u8D70\u5F31 / \u5931\u6548\u3002",en:"Records KPIs, invalidation triggers and catalysts, then re-checks them as INTACT / WEAKENED / BROKEN."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","verification","monitoring","perspective"],riskNote:{zh:"\u4E0A\u6E38\u5047\u8BBE\u80FD\u628A\u8BBA\u70B9\u843D\u76D8\uFF1B\u5728\u672C\u63D2\u4EF6\u4E0B\u6587\u4EF6\u5199\u5728\u5DE5\u4F5C\u76EE\u5F55\u5E76\u670D\u4ECE\u5F53\u524D\u4F1A\u8BDD\u6743\u9650\u3002",en:"Upstream assumes it can save files; under Capital it writes into the session workspace and obeys its permissions."}},{key:"peterLynchResearch",name:"peter-lynch-skill",label:{zh:"\u5F7C\u5F97\xB7\u6797\u5947\u5F0F\u4E2A\u80A1\u7814\u7A76",en:"Peter Lynch Research"},description:{zh:"\u7ED9\u4E00\u4E2A\u4EE3\u7801\u6216\u516C\u53F8\u540D\uFF0C\u8D70\u5FEB\u7B5B\uFF08SKIP / WATCHLIST / DEEP RESEARCH\uFF09\u6216\u5B8C\u6574\u5C3D\u8C03\uFF0C\u751F\u610F\u7406\u89E3\u3001\u5206\u7C7B\u4E0E\u4F30\u503C\u653E\u5728\u540C\u4E00\u5957\u68C0\u67E5\u91CC\uFF0C\u6BCF\u6761\u4E3B\u5F20\u914D\u53EF\u70B9\u5F00\u7684\u6765\u6E90\u94FE\u63A5\u3002\u7F8E\u80A1\u4E0E\u5883\u5916\u4E0A\u5E02\u53E3\u5F84\u3002",en:"Screens a ticker or company fast (SKIP / WATCHLIST / DEEP RESEARCH) or runs full due diligence, with linked sources under every claim. US and overseas-listing conventions."},owner:"DjNero11",repository:"peter-lynch-skill",status:"watchlist",lastCommit:"2026-06-28",reviewBy:"2026-11-06",tags:["peter-lynch","us-stock","valuation","risk","verification"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0A\u6E38\u4EC5\u4E24\u6B21\u63D0\u4EA4\u3001\u81EA 2026-06-28 \u8D77\u65E0\u66F4\u65B0\uFF0C\u542F\u7528\u524D\u8BF7\u81EA\u884C\u590D\u6838\u6765\u6E90\u3002X/10 \u8861\u91CF\u7684\u662F\u8BBA\u70B9\u81EA\u6D3D\u5EA6\u4E0E\u7ED3\u6784\u7279\u5F81\uFF0C\u4E0D\u9884\u6D4B\u8868\u73B0\uFF0C\u4E5F\u4E0D\u6784\u6210\u4E70\u5356\u5EFA\u8BAE\u3002",en:"Cold-start experiment; upstream has two commits and has been quiet since 2026-06-28, so review the sources before use. The X/10 score rates thesis consistency and structure, not forecast performance, and is not investment advice."}}]),re=Object.freeze({zh:{all:"\u5168\u90E8","a-share":"A \u80A1","business-analysis":"\u4E1A\u52A1\u5206\u6790","capital-allocation":"\u8D44\u672C\u914D\u7F6E","cash-flow":"\u73B0\u91D1\u6D41",competition:"\u7ADE\u4E89\u683C\u5C40",earnings:"\u4E1A\u7EE9\u4E0E\u7535\u8BDD\u4F1A",education:"\u6559\u5B66",filings:"\u62AB\u9732\u6587\u4EF6","financial-health":"\u8D22\u52A1\u5065\u5EB7",instruments:"\u671F\u6743\u4E0E\u57FA\u91D1",macro:"\u5B8F\u89C2\u4E0E\u884C\u4E1A",monitoring:"\u76D1\u63A7",orders:"\u8BA2\u5355",perspective:"\u5206\u6790\u89C6\u89D2","peter-lynch":"\u5F7C\u5F97\xB7\u6797\u5947",portfolio:"\u7EC4\u5408\u4E0E\u4ED3\u4F4D",risk:"\u98CE\u9669",strategy:"\u6218\u7565",tax:"\u7A0E\u52A1",technicals:"\u6280\u672F\u9762","us-stock":"\u7F8E\u80A1",valuation:"\u4F30\u503C",verification:"\u8BC1\u636E\u6838\u9A8C"},en:{all:"All","a-share":"A-share","business-analysis":"Business analysis","capital-allocation":"Capital allocation","cash-flow":"Cash flow",competition:"Competition",earnings:"Earnings",education:"Education",filings:"Filings","financial-health":"Financial health",instruments:"Options & funds",macro:"Macro & industry",monitoring:"Monitoring",orders:"Orders",perspective:"Perspective","peter-lynch":"Peter Lynch",portfolio:"Portfolio",risk:"Risk",strategy:"Strategy",tax:"Tax",technicals:"Technicals","us-stock":"US equity",valuation:"Valuation",verification:"Verification"}})});var{createElement:a,useEffect:N,useRef:j,useState:b}=require("react"),{createPortal:ce}=require("react-dom"),{SettingsForm:de,SettingsSecretField:pe,SettingsFormModel:ue,SegmentedControl:he,Switch:q,Modal:me,writeClipboard:ge,IconRightUpOutlineRegular:W}=require("@deepseek-ai/dsh-client-ui-primitives"),{SELECTED_SKILL_CATALOG:v,SELECTED_SKILL_TAG_LABELS:V}=(U(),ne(H)),T="capital-config",S="@v587d/capital-generation",B="settings.capital",K="plugins.detail.badge",fe="https://github.com/v587d/capital-generation",ye=`https://www.npmjs.com/package/${S}`,ke="FUYAO_API_KEY",we="ANYSEARCH_API_KEY",ve="WIND_API_KEY",be="PADDLE_OCR_TOKEN",_="capital-config-tabs",Se="/capital-skills",E={fuyao:"https://fuyao.aicubes.cn/docs/",anysearch:"https://www.anysearch.com/docs/auth",wind:"https://market.windalice.com/",paddleocr:"https://aistudio.baidu.com/paddleocr"},f=["fuyao","anysearch","wind","paddleocr"],$=v.map(({key:t})=>t),C={fuyao:ke,anysearch:we,wind:ve,paddleocr:be},xe=()=>Object.fromEntries(f.map(t=>[t,{ref:C[t],configured:!1,writable:!0}])),Ce={tabsLabel:"\u914D\u7F6E\u5206\u533A",title:"\u6570\u636E\u6E90",titleUnsaved:"\u6570\u636E\u6E90 \u672A\u4FDD\u5B58",componentsTitle:"\u5305\u542B\u7684\u7EC4\u4EF6",componentsHint:"\u7EC4\u4EF6\u6E05\u5355\u7531 DSH \u7ED8\u5236\uFF0C\u663E\u793A\u5728\u4E0B\u65B9\u3002",fuyaoLabel:"Fuyao API Key",fuyaoHint:"\u540C\u82B1\u987A Fuyao \u7ED3\u6784\u5316\u6570\u636E\u63A5\u53E3\u3002\u4FDD\u5B58\u540E\u65B0 Capital \u6A21\u5F0F\u4F1A\u8BDD\u751F\u6548\u3002",anysearchLabel:"AnySearch API Key",anysearchHint:"AnySearch \u7F51\u9875\u641C\u7D22 / \u63D0\u53D6\u63A5\u53E3\u3002\u4FDD\u5B58\u540E\u65B0 Capital \u6A21\u5F0F\u4F1A\u8BDD\u751F\u6548\u3002",localFetchLabel:"\u5141\u8BB8\u542F\u52A8\u672C\u5730\u63D0\u53D6\u7F51\u9875\u5185\u5BB9",localFetchHint:"\u5F00\u542F\u540E\u672C\u5730\u6293\u53D6\u515C\u5E95\uFF08\u56DE\u6267\u6765\u6E90 local-http\uFF09\u3002\u4FDD\u5B58\u540E\u65B0 Capital \u6A21\u5F0F\u4F1A\u8BDD\u751F\u6548\u3002",windLabel:"Wind Alice API Key",windHint:"Wind \u91D1\u878D\u4FE1\u62AB\u7C7B\u6587\u6863\u68C0\u7D22\u63A5\u53E3\u3002\u4FDD\u5B58\u540E\u65B0 Capital \u6A21\u5F0F\u4F1A\u8BDD\u751F\u6548\u3002",paddleocrLabel:"PaddleOCR \u6587\u6863\u89E3\u6790 Token",paddleocrHint:"\u914D\u7F6E Token \u540E\u81EA\u52A8\u89E3\u6790 PDF\u3001\u56FE\u7247\u3002\u4FDD\u5B58\u540E\u65B0 Capital \u6A21\u5F0F\u4F1A\u8BDD\u751F\u6548\u3002",selectedSkillsTitle:"\u7CBE\u9009 Skills",selectedSkillsFilterLabel:"\u6309\u80FD\u529B\u7B5B\u9009",selectedSkillsEmpty:"\u6CA1\u6709\u5339\u914D\u8FD9\u4E2A\u6807\u7B7E\u7684 Skill\u3002",selectedSkillsCopyName:"\u590D\u5236\u6280\u80FD\u540D",selectedSkillsCopied:"\u5DF2\u590D\u5236",selectedSkillsDetail:"\u8BE6\u60C5",selectedSkillsDetailClose:"\u5173\u95ED",selectedSkillsDocLoading:"\u539F\u6587\u8BFB\u53D6\u4E2D\u2026",selectedSkillsDocFailed:"\u539F\u6587\u8BFB\u4E0D\u5230\uFF1A\u8FD9\u4EFD\u5FEB\u7167\u6CA1\u968F\u5305\u843D\u5730\uFF0C\u6216\u6682\u65F6\u8BFB\u4E0D\u51FA\u6765\u3002",selectedSkillsDocStale:"\u539F\u6587\u8BFB\u4E0D\u5230\uFF1A\u5BBF\u4E3B\u8FDB\u7A0B\u91CC\u8FD8\u6CA1\u6709\u8FD9\u6761\u8BFB\u539F\u6587\u7684\u901A\u9053\u3002\u5347\u7EA7\u63D2\u4EF6\u540E\u8981\u91CD\u542F DSH\uFF0C\u91CD\u542F\u524D\u5237\u65B0\u9875\u9762\u4E5F\u6CA1\u6709\u7528\u3002",selectedSkillsOpenRepo:"\u6253\u5F00\u4E0A\u6E38\u4ED3\u5E93",openDocs:"\u5B98\u65B9\u6587\u6863",configured:"\u5DF2\u914D\u7F6E\u5BC6\u94A5\u3002",notConfigured:"\u672A\u914D\u7F6E\u5BC6\u94A5\u3002",save:"\u4FDD\u5B58",saving:"\u4FDD\u5B58\u4E2D\u2026",readOnly:"\u672C\u90E8\u7F72\u7684\u8BBE\u7F6E\u4E3A\u53EA\u8BFB\u3002",saveFailed:"\u672C\u90E8\u7F72\u6CA1\u6709\u63A5\u53D7\u8FD9\u4E9B\u503C\uFF0C\u5DF2\u4FDD\u7559\u4F9B\u4F60\u4FEE\u6539\u3002",unavailable:"\u8BE5\u63D2\u4EF6\u5F53\u524D\u672A\u52A0\u8F7D\uFF0C\u6682\u65F6\u65E0\u6CD5\u914D\u7F6E\u3002",githubLabel:"GitHub \u4ED3\u5E93",npmLabel:"npm \u5305\u9875\u9762"},ze={tabsLabel:"Settings sections",title:"Data Sources",titleUnsaved:"Data Sources unsaved",componentsTitle:"Components",componentsHint:"The component list is drawn by DSH and appears below.",fuyaoLabel:"Fuyao API Key",fuyaoHint:"Tonghuashun Fuyao structured-data API. Takes effect in new Capital mode sessions.",anysearchLabel:"AnySearch API Key",anysearchHint:"AnySearch web search / extract interface. Takes effect in new Capital mode sessions.",localFetchLabel:"Allow local web page extraction",localFetchHint:"When on, a failed fetch falls back to local direct fetching (receipt via: local-http). Takes effect in new Capital mode sessions.",windLabel:"Wind Alice API Key",windHint:"Wind financial disclosure document retrieval interface. Takes effect in new Capital mode sessions.",paddleocrLabel:"PaddleOCR document token",paddleocrHint:"Configure the token to parse PDFs and images automatically. Takes effect in new Capital mode sessions.",selectedSkillsTitle:"Selected Skills",selectedSkillsFilterLabel:"Filter by capability",selectedSkillsEmpty:"No skills match this tag.",selectedSkillsCopyName:"Copy skill name",selectedSkillsCopied:"Copied",selectedSkillsDetail:"Details",selectedSkillsDetailClose:"Close",selectedSkillsDocLoading:"Loading the source\u2026",selectedSkillsDocFailed:"The source could not be read: this snapshot is not in the installed package, or it cannot be opened right now.",selectedSkillsDocStale:"The source could not be read: this host process has no route for it yet. After upgrading the plugin, restart DSH \u2014 reloading the page alone will not help.",selectedSkillsOpenRepo:"Open upstream repository",openDocs:"Official docs",configured:"A key is configured.",notConfigured:"No key is configured.",save:"Save",saving:"Saving\u2026",readOnly:"This deployment stores settings read-only.",saveFailed:"The deployment did not accept these values; they were left for you to correct.",unavailable:"This plugin is not loaded, so it cannot be configured right now.",githubLabel:"GitHub repository",npmLabel:"npm package page"};function F(t,e){return typeof t=="string"&&t.length>0?t:e}function Ee(t,e){return e==="fuyao"?F(t.value?.fuyaoCredentialRef,C.fuyao):e==="wind"?F(t.value?.retriever?.windDocs?.credentialRef,C.wind):e==="paddleocr"?F(t.value?.retriever?.paddleOcr?.credentialRef,C.paddleocr):F(t.value?.retriever?.credentialRef,C.anysearch)}function Fe(){if(typeof document>"u"||document.querySelector("style[data-capital-config]"))return()=>{};let t=document.createElement("style");return t.dataset.capitalConfig="true",t.textContent=`
|
|
8
|
+
"use strict";var T=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var te=Object.prototype.hasOwnProperty;var ie=(t,e,i)=>()=>{if(i)throw i[0];try{return t&&(e=t(t=0)),e}catch(n){throw i=[n],n}};var ae=(t,e)=>{for(var i in e)T(t,i,{get:e[i],enumerable:!0})},se=(t,e,i,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ee(e))!te.call(t,o)&&o!==i&&T(t,o,{get:()=>e[o],enumerable:!(n=Z(e,o))||n.enumerable});return t};var ne=t=>se(T({},"__esModule",{value:!0}),t);var U={};ae(U,{SELECTED_SKILL_CATALOG:()=>le,SELECTED_SKILL_SKILL_DIRS:()=>oe,SELECTED_SKILL_TAG_LABELS:()=>re});var oe,le,re,j=ie(()=>{"use strict";oe=Object.freeze({"investment-skills":"skills","china-stock-research-skills":"skills",InvestSkill:"plugins/us-stock-analysis/skills","peter-lynch-skill":"skills","trading-skills":"skills"}),le=Object.freeze([{key:"buffettFramework",name:"buffett-investment-framework",label:{zh:"Buffett Investment Framework",en:"Buffett Investment Framework"},description:{zh:"\u4EE5\u8BC1\u636E\u4E3A\u57FA\u7840\u7684\u5546\u4E1A\u8D28\u91CF\u3001\u8D44\u672C\u914D\u7F6E\u3001\u4F30\u503C\u548C\u98CE\u9669\u5206\u6790\u6846\u67B6\u3002\u4E3B\u8981\u6E90\u4E8E\u7F8E\u80A1\u8BED\u5883\u3002",en:"Evidence-led business quality, capital allocation, valuation, and risk analysis. Primarily US-market oriented."},owner:"finterm-ai",repository:"investment-skills",status:"experimental",lastCommit:"2026-07-22",reviewBy:"2026-11-06",tags:["business-analysis","cash-flow","perspective","risk","valuation"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u4E0D\u80FD\u76F4\u63A5\u5F53\u4F5C A \u80A1\u89C4\u5219\u6216\u6295\u8D44\u5EFA\u8BAE\u3002",en:"Experimental; do not treat it as A-share rules or investment advice."}},{key:"financialHealth",name:"financial-health",label:{zh:"\u8D22\u52A1\u5065\u5EB7",en:"Financial Health"},description:{zh:"\u68C0\u67E5\u76C8\u5229\u8D28\u91CF\u3001\u73B0\u91D1\u8F6C\u6362\u3001\u8425\u8FD0\u8D44\u672C\u3001\u6760\u6746\u548C\u8D44\u4EA7\u8D1F\u503A\u8868\u98CE\u9669\u3002",en:"Checks earnings quality, cash conversion, working capital, leverage, and balance-sheet risk."},owner:"spikeHongg",repository:"china-stock-research-skills",status:"watchlist",lastCommit:"2026-03-09",reviewBy:"2026-11-06",tags:["a-share","cash-flow","financial-health","risk"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0A\u6E38\u7EF4\u62A4\u8F83\u4E45\u672A\u66F4\u65B0\uFF0C\u542F\u7528\u524D\u8BF7\u81EA\u884C\u590D\u6838\u5185\u5BB9\u548C\u6765\u6E90\u3002",en:"Cold-start experiment; upstream has been quiet, so review content and sources before use."}},{key:"riskWarningCatalysts",name:"risk-warning-catalysts",label:{zh:"\u98CE\u9669\u4E0E\u50AC\u5316\u5242\u76D1\u63A7",en:"Risk Warning Catalysts"},description:{zh:"\u628A\u7814\u7A76\u7ED3\u8BBA\u8F6C\u6210\u5E26\u6765\u6E90\u3001\u9608\u503C\u548C\u590D\u67E5\u9891\u7387\u7684\u98CE\u9669\u4E0E\u50AC\u5316\u5242\u76D1\u63A7\u9879\u3002",en:"Turns research into source-backed risk and catalyst monitoring with thresholds and review cadence."},owner:"spikeHongg",repository:"china-stock-research-skills",status:"watchlist",lastCommit:"2026-03-09",reviewBy:"2026-11-06",tags:["a-share","monitoring","risk"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0D\u8D1F\u8D23\u4F30\u503C\u6216\u4EA4\u6613\u51B3\u7B56\u3002",en:"Cold-start experiment; it does not make valuation or trading decisions."}},{key:"valuationInvestmentStrategy",name:"valuation-investment-strategy",label:{zh:"\u4F30\u503C\u4E0E\u60C5\u666F\u5206\u6790",en:"Valuation Investment Strategy"},description:{zh:"\u5728\u4E8B\u5B9E\u57FA\u7840\u5B8C\u6210\u540E\u6784\u5EFA\u5E26\u5047\u8BBE\u3001\u60C5\u666F\u548C\u5931\u6548\u6761\u4EF6\u7684\u4F30\u503C\u6846\u67B6\u3002",en:"Builds valuation scenarios with assumptions and invalidation conditions after the factual base is ready."},owner:"spikeHongg",repository:"china-stock-research-skills",status:"watchlist",lastCommit:"2026-03-09",reviewBy:"2026-11-06",tags:["a-share","risk","valuation"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u8F93\u51FA\u4E0D\u7B49\u4E8E\u4E70\u5356\u6216\u4ED3\u4F4D\u5EFA\u8BAE\u3002",en:"Cold-start experiment; output is not a buy, sell, or position-size recommendation."}},{key:"strategyBusinessTransition",name:"strategy-business-transition",label:{zh:"\u6218\u7565\u4E0E\u4E1A\u52A1\u8F6C\u578B",en:"Strategy Business Transition"},description:{zh:"\u68C0\u9A8C\u516C\u53F8\u6218\u7565\u53D9\u4E8B\u3001\u4E1A\u52A1\u8FC1\u79FB\u3001\u8D44\u672C\u914D\u7F6E\u548C\u8F6C\u578B\u91CC\u7A0B\u7891\u3002",en:"Tests strategy narratives, business migration, capital allocation, and transition milestones."},owner:"spikeHongg",repository:"china-stock-research-skills",status:"watchlist",lastCommit:"2026-03-09",reviewBy:"2026-11-06",tags:["a-share","strategy","risk"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0D\u8D1F\u8D23\u4F30\u503C\u6216\u4EA4\u6613\u8BA1\u5212\u3002",en:"Cold-start experiment; it does not make valuation or trading plans."}},{key:"industryCompetitionMoat",name:"industry-competition-moat",label:{zh:"\u884C\u4E1A\u7ADE\u4E89\u4E0E\u62A4\u57CE\u6CB3",en:"Industry Competition Moat"},description:{zh:"\u5206\u6790\u884C\u4E1A\u7ED3\u6784\u3001\u7ADE\u4E89\u683C\u5C40\u3001\u4F9B\u9700\u548C\u516C\u53F8\u5DEE\u5F02\u5316\u662F\u5426\u53EF\u6301\u7EED\u3002",en:"Analyzes industry structure, competition, supply-demand, and sustainable differentiation."},owner:"spikeHongg",repository:"china-stock-research-skills",status:"watchlist",lastCommit:"2026-03-09",reviewBy:"2026-11-06",tags:["a-share","business-analysis","competition","risk"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u884C\u4E1A\u5224\u65AD\u4ECD\u9700\u56DE\u5230\u516C\u5F00\u8BC1\u636E\u3002",en:"Cold-start experiment; industry conclusions still require public evidence."}},{key:"businessDecompositionOrderQuality",name:"business-decomposition-order-quality",label:{zh:"\u4E1A\u52A1\u62C6\u89E3\u4E0E\u8BA2\u5355\u8D28\u91CF",en:"Business Decomposition Order Quality"},description:{zh:"\u62C6\u89E3\u4EA7\u54C1\u3001\u5BA2\u6237\u3001\u9879\u76EE\u548C\u8BA2\u5355\uFF0C\u68C0\u67E5\u589E\u957F\u80FD\u5426\u8F6C\u5316\u4E3A\u6536\u5165\u548C\u73B0\u91D1\u3002",en:"Breaks down products, customers, projects, and orders to test conversion into revenue and cash."},owner:"spikeHongg",repository:"china-stock-research-skills",status:"watchlist",lastCommit:"2026-03-09",reviewBy:"2026-11-06",tags:["a-share","business-analysis","cash-flow","orders","risk"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0D\u8D1F\u8D23\u6700\u7EC8\u4F30\u503C\u6216\u4E70\u5356\u5EFA\u8BAE\u3002",en:"Cold-start experiment; it does not make final valuation or trading recommendations."}},{key:"tenKDigest",name:"10k-digest",label:{zh:"\u5E74\u62A5\uFF0810-K\uFF09\u9010\u8282\u7CBE\u8BFB",en:"10-K Report Digest"},description:{zh:"\u9010\u8282\u7CBE\u8BFB\u7F8E\u80A1\u5E74\u62A5 10-K\uFF0C\u4EA7\u51FA\u6458\u8981\u3001\u5206\u8282\u8981\u70B9\u3001\u5173\u952E\u6307\u6807\u4E0E\u53EF\u6838\u5BF9\u7684\u51FA\u5904\u5F15\u7528\u3002",en:"Reads a 10-K section by section into an abstract, section summaries, key metrics and sourced references."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","filings","business-analysis"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u7AE0\u8282\u53E3\u5F84\u6309\u7F8E\u80A1 10-K \u5199\uFF0CA \u80A1\u5E74\u62A5\u7684\u62AB\u9732\u7ED3\u6784\u4E0D\u540C\uFF0C\u4E0D\u80FD\u76F4\u63A5\u5E73\u79FB\u3002",en:"Experimental; the section map follows US 10-K disclosure and does not transfer to A-share annual reports."}},{key:"bearCase",name:"bear-case",label:{zh:"\u7A7A\u5934\u89C6\u89D2\u7EA2\u961F\u53CD\u9A73",en:"Bear Case Red Team"},description:{zh:"\u9488\u5BF9\u4E00\u4E2A\u770B\u591A\u8BBA\u70B9\u523B\u610F\u6784\u5EFA\u6700\u5F3A\u7684\u53CD\u9762\u8BBA\u8BC1\uFF0C\u9010\u6761\u627E\u51FA\u53CD\u8BC1\u4E0E\u8106\u5F31\u5047\u8BBE\u3002",en:"Builds the strongest deliberate short-side counter-argument to a bullish thesis, with counterevidence."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","risk","perspective"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u53EA\u505A\u53CD\u9762\u8BBA\u8BC1\uFF0C\u4E0D\u6784\u6210\u5356\u51FA\u6216\u505A\u7A7A\u5EFA\u8BAE\uFF0C\u4E5F\u4E0D\u9884\u6D4B\u8DCC\u5E45\u3002",en:"Experimental; a counter-argument only, not a sell or short recommendation and no downside forecast."}},{key:"catalystCalendar",name:"catalyst-calendar",label:{zh:"90 \u5929\u50AC\u5316\u5242\u65E5\u5386",en:"Catalyst Calendar"},description:{zh:"\u5217\u51FA\u672A\u6765 90 \u5929\u7684\u4E8B\u4EF6\u50AC\u5316\u5242\u4E0E\u9884\u671F\u5F71\u54CD\uFF0C\u7528\u6765\u5B89\u6392\u590D\u67E5\u8282\u594F\u3002",en:"Lists upcoming catalysts over a 90-day window with expected impact and a review cadence."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","earnings","monitoring"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u4E8B\u4EF6\u5F71\u54CD\u662F\u5B9A\u6027\u5224\u65AD\uFF0C\u4E0D\u9884\u6D4B\u5177\u4F53\u6DA8\u8DCC\u3002",en:"Experimental; catalyst impact is qualitative and does not forecast price moves."}},{key:"competitorAnalysis",name:"competitor-analysis",label:{zh:"\u76F4\u63A5\u5BF9\u624B\u4E0E\u62A4\u57CE\u6CB3",en:"Competitor Analysis"},description:{zh:"\u56F4\u7ED5\u4E00\u5BB6\u516C\u53F8\u4E0E\u5176\u76F4\u63A5\u5BF9\u624B\u505A\u62A4\u57CE\u6CB3\u3001\u5E02\u573A\u5730\u4F4D\u4E0E\u884C\u4E1A\u683C\u5C40\u5206\u6790\u3002",en:"Moat, market position and industry dynamics for one company against its direct rivals."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","competition","business-analysis","risk"],riskNote:{zh:"\u4E0E\u300C\u884C\u4E1A\u7ADE\u4E89\u4E0E\u62A4\u57CE\u6CB3\u300D\u89C6\u89D2\u91CD\u53E0\uFF0C\u540C\u4E1A\u540D\u5355\u4E0E\u53E3\u5F84\u6309\u7F8E\u80A1\u62AB\u9732\u53D6\u6750\uFF1B\u7ED3\u8BBA\u4ECD\u8981\u56DE\u5230\u516C\u5F00\u8BC1\u636E\u3002",en:"Overlaps the industry/moat lens; peer sets follow US disclosure, so conclusions still need public evidence."}},{key:"dividendAnalysis",name:"dividend-analysis",label:{zh:"\u5206\u7EA2\u56DE\u8D2D\u4E0E\u8D44\u672C\u914D\u7F6E",en:"Dividend & Capital Allocation"},description:{zh:"\u628A\u5206\u7EA2\u3001\u56DE\u8D2D\u3001\u5E76\u8D2D\u3001\u503A\u52A1\u7BA1\u7406\u4E0E\u81EA\u7531\u73B0\u91D1\u6D41\u53BB\u5411\u5408\u8D77\u6765\u770B\u8D44\u672C\u914D\u7F6E\u7EAA\u5F8B\u3002",en:"Reviews dividends, buybacks, M&A, debt and FCF deployment as one capital-allocation discipline."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","capital-allocation","cash-flow","valuation"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u4E0D\u627F\u8BFA\u80A1\u606F\u53EF\u6301\u7EED\u6027\uFF0C\u4E5F\u4E0D\u9884\u6D4B\u6536\u76CA\u3002",en:"Experimental; it does not promise dividend sustainability or returns."}},{key:"earningsCallAnalysis",name:"earnings-call-analysis",label:{zh:"\u4E1A\u7EE9\u7535\u8BDD\u4F1A\u6587\u672C\u5206\u6790",en:"Earnings Call Analysis"},description:{zh:"\u4ECE\u4E1A\u7EE9\u7535\u8BDD\u4F1A\u7EAA\u8981\u91CC\u8BFB\u60C5\u7EEA\u3001\u4E3B\u9898\u4E0E\u7BA1\u7406\u5C42\u53E3\u5F84\u7684\u53D8\u5316\u3002",en:"Reads sentiment, themes and shifts in management tone from earnings call transcripts."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","earnings","perspective"],riskNote:{zh:"\u5FC5\u987B\u5148\u62FF\u5230\u7EAA\u8981\u539F\u6587\uFF1B\u6CA1\u6709\u539F\u6587\u65F6\u4E0D\u8BB8\u51ED\u5370\u8C61\u8865\u5199\u7BA1\u7406\u5C42\u8868\u6001\u3002",en:"Needs the actual transcript; never reconstruct management remarks from memory."}},{key:"earningsPreview",name:"earnings-preview",label:{zh:"\u8D22\u62A5\u524D\u4E09\u6863\u60C5\u666F\u63A8\u6F14",en:"Earnings Preview"},description:{zh:"\u5BF9\u6BD4\u4E00\u81F4\u9884\u671F\u4E0E\u671F\u6743\u9690\u542B\u6CE2\u52A8\uFF0C\u7ED9\u51FA\u8D85\u9884\u671F/\u7B26\u5408/\u4E0D\u53CA\u4E09\u6863\u60C5\u666F\u4E0E\u5404\u81EA\u8981\u76EF\u7684\u6307\u6807\u3002",en:"Compares consensus with the implied move and lays out beat / in-line / miss scenarios with watch KPIs."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","earnings","risk","monitoring"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u6B63\u6587\u6BCF\u6863\u60C5\u666F\u5E26\u4ED3\u4F4D\u5199\u6CD5\uFF0C\u53EA\u5F53\u63A8\u6F14\u7EC3\u4E60\uFF0C\u4E0D\u662F\u4EA4\u6613\u6307\u4EE4\u3002",en:"Experimental; each scenario carries position wording \u2014 read it as a rehearsal, not a trade instruction."}},{key:"economicsAnalysis",name:"economics-analysis",label:{zh:"\u7F8E\u56FD\u5B8F\u89C2\u6307\u6807\u89E3\u8BFB",en:"US Economics Analysis"},description:{zh:"\u89E3\u8BFB\u7F8E\u56FD\u5B8F\u89C2\u6570\u636E\u4E0E\u5229\u7387\u8DEF\u5F84\uFF0C\u5E76\u4EA4\u4EE3\u5B83\u4F20\u5BFC\u5230\u5E02\u573A\u7684\u8DEF\u5F84\u3002",en:"Interprets US macro prints and the rate path, and spells out the transmission to markets."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","macro","risk"],riskNote:{zh:"\u53E3\u5F84\u662F\u7F8E\u56FD\u5B8F\u89C2\uFF0C\u5BF9 A \u80A1\u53EA\u80FD\u5F53\u5916\u90E8\u73AF\u5883\u53D8\u91CF\uFF0C\u4E0D\u76F4\u63A5\u63A8\u653F\u7B56\u3002",en:"US macro only; for A-shares treat it as an external condition, not a policy read."}},{key:"etfAnalysis",name:"etf-analysis",label:{zh:"ETF \u5C3D\u8C03\u4E0E\u5951\u5408\u5EA6\u8BC4\u5206",en:"ETF Analysis"},description:{zh:"\u8D39\u7387\u3001\u8DDF\u8E2A\u8BEF\u5DEE\u3001\u6D41\u52A8\u6027\u3001\u6210\u5206\u96C6\u4E2D\u5EA6\u4E0E\u6301\u4ED3\u91CD\u53E0\uFF0C\u6C47\u6210\u4E00\u679A ETF \u5951\u5408\u5EA6\u8BC4\u5206\u3002",en:"Expense ratio, tracking difference, liquidity, concentration and overlap rolled into a fitness score."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","instruments","portfolio","risk"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u8BC4\u5206\u8861\u91CF\u7ED3\u6784\u7279\u5F81\uFF0C\u4E0D\u4EE3\u8868\u6536\u76CA\u9884\u671F\u3002",en:"Experimental; the score describes structure, not expected return."}},{key:"factCheck",name:"fact-check",label:{zh:"\u9010\u6761\u4E3B\u5F20\u6838\u9A8C\u4E0E\u8865\u5F15\u7528",en:"Fact Check"},description:{zh:"\u628A\u62A5\u544A\u91CC\u7684\u6BCF\u4E2A\u6570\u5B57\u4E0E\u4E8B\u5B9E\u4E3B\u5F20\u62C6\u51FA\u6765\u9010\u6761\u6BD4\u5BF9\u4E00\u624B\u6765\u6E90\uFF0C\u6807\u6CE8\u5DF2\u6838\u9A8C/\u4E0D\u7B26/\u65E0\u6CD5\u6838\u9A8C\u5E76\u56DE\u586B\u5F15\u7528\u3002",en:"Extracts every figure and claim, checks each against a primary source, and marks verified / mismatch / unverifiable."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","filings","verification"],riskNote:{zh:"\u4E00\u624B\u6765\u6E90\u6E05\u5355\u6309 SEC \u6587\u4EF6\u3001\u516C\u53F8 IR\u3001FRED \u4E0E\u4EA4\u6613\u6240\u6570\u636E\u5199\uFF1BA \u80A1\u6750\u6599\u8981\u6362\u6210\u516C\u544A\u4E0E\u5B98\u65B9\u62AB\u9732\u3002",en:"Its primary-source list is SEC / IR / FRED / exchange data; swap in announcements and official disclosure for A-shares."}},{key:"financialReportAnalyst",name:"financial-report-analyst",label:{zh:"\u8D22\u62A5\u8D28\u91CF\u4E0E\u7EA2\u65D7\u89E3\u8BFB",en:"Financial Report Analyst"},description:{zh:"\u4ECE 10-K / 10-Q \u8BFB\u62A5\u8868\u8D28\u91CF\u3001\u5F02\u5E38\u7EA2\u65D7\u4E0E\u4E00\u4E2A\u53EF\u4EA4\u4EE3\u51FA\u5904\u7684\u4FE1\u53F7\u3002",en:"Reads statement quality, red flags and one sourced signal from 10-K / 10-Q filings."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","filings","financial-health","risk"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u7EA2\u65D7\u662F\u63D0\u793A\u590D\u67E5\u7684\u7EBF\u7D22\uFF0C\u4E0D\u662F\u7ED3\u8BBA\u3002",en:"Experimental; red flags are prompts to re-check, not conclusions."}},{key:"industryMap",name:"industry-map",label:{zh:"\u4EA7\u4E1A\u94FE\u5730\u56FE\u4E0E\u54BD\u5589\u70B9",en:"Industry Map"},description:{zh:"\u628A\u4E0A\u4E0B\u6E38\u753B\u6210\u6709\u5411\u56FE\uFF0C\u5B9A\u4F4D\u516C\u53F8\u4F4D\u7F6E\u3001\u627E\u4F9B\u9700\u74F6\u9888\u4E0E\u5229\u6DA6\u6C60\uFF0C\u5E76\u6D3E\u751F\u4E8C\u7EBF\u7EBF\u7D22\u3002",en:"Maps the value chain as a directed graph to locate the company, find chokepoints and second-order ideas."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","macro","competition","business-analysis"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u4EA7\u4E1A\u94FE\u5224\u65AD\u4ECD\u9700\u9010\u6761\u56DE\u5230\u516C\u5F00\u8BC1\u636E\u3002",en:"Experimental; value-chain reads still need claim-by-claim public evidence."}},{key:"insiderTrading",name:"insider-trading",label:{zh:"\u5185\u90E8\u4EBA\u589E\u51CF\u6301\u8FFD\u8E2A",en:"Insider Trading"},description:{zh:"\u4ECE SEC Form 4 \u8FFD\u8E2A\u9AD8\u7BA1\u4E0E\u8463\u4E8B\u7684\u589E\u51CF\u53D8\u52A8\u5E76\u505A\u89E3\u8BFB\u3002",en:"Tracks executive and director buying and selling from SEC Form 4 filings."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","filings","monitoring","perspective"],riskNote:{zh:"\u4F9D\u8D56\u7F8E\u56FD\u5185\u90E8\u4EBA\u7533\u62A5\u5236\u5EA6\uFF1BA \u80A1\u8981\u6362\u6210\u5927\u80A1\u4E1C\u4E0E\u8463\u76D1\u9AD8\u53D8\u52A8\u516C\u544A\uFF0C\u53E3\u5F84\u4E0D\u53EF\u76F4\u63A5\u5E73\u79FB\u3002",en:"Assumes US insider filings; A-shares need major-holder and director-change announcements instead."}},{key:"institutionalOwnership",name:"institutional-ownership",label:{zh:"\u673A\u6784\u6301\u4ED3\u53D8\u52A8",en:"Institutional Ownership"},description:{zh:"\u4ECE 13F \u6587\u4EF6\u8BFB\u673A\u6784\u6301\u4ED3\u53D8\u5316\uFF0C\u8BC6\u522B\u673A\u6784\u8D44\u91D1\u7684\u8FC1\u79FB\u65B9\u5411\u3002",en:"Reads changes in institutional holdings from 13F filings to spot where the money is moving."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","filings","monitoring"],riskNote:{zh:"13F \u6709\u4E00\u4E2A\u5B63\u5EA6\u6EDE\u540E\u4E14\u4E0D\u542B\u7A7A\u5934\u4ED3\u4F4D\uFF1B\u8BFB\u6210\u8D8B\u52BF\u4E4B\u524D\u5148\u8BB0\u4F4F\u8FD9\u4E24\u70B9\u3002",en:"13F lags a quarter and omits shorts \u2014 remember both before reading it as a trend."}},{key:"learningCoach",name:"learning-coach",label:{zh:"\u628A\u5206\u6790\u8BB2\u6210\u8BFE\u7A0B",en:"Learning Coach"},description:{zh:"\u50CF\u5BFC\u5E08\u4E00\u6837\u9010\u6307\u6807\u89E3\u91CA\u4E00\u4EFD\u5206\u6790\u7ED3\u679C\uFF0C\u518D\u53CD\u95EE 3\u20135 \u4E2A\u68C0\u9A8C\u7406\u89E3\u7684\u95EE\u9898\u3002",en:"Explains an analysis metric by metric in plain words, then asks 3\u20135 Socratic questions."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["education","perspective"],riskNote:{zh:"\u6559\u5B66\u6027\u8D28\uFF1B\u5B83\u89E3\u91CA\u7684\u662F\u4E0A\u6E38\u5206\u6790\u7684\u53E3\u5F84\uFF0C\u4E0D\u989D\u5916\u4EA7\u751F\u6295\u8D44\u5224\u65AD\u3002",en:"Educational; it explains the analysis it is handed and forms no investment view of its own."}},{key:"optionsAnalysis",name:"options-analysis",label:{zh:"\u671F\u6743\u5E0C\u814A\u5B57\u6BCD\u4E0E\u9690\u6CE2",en:"Options Analysis"},description:{zh:"\u770B\u5E0C\u814A\u5B57\u6BCD\u3001\u9690\u542B\u6CE2\u52A8\u7387\u4E0E\u7B56\u7565\u9002\u914D\u5EA6\uFF0C\u7528\u6765\u7406\u89E3\u671F\u6743\u7684\u98CE\u9669\u5F62\u72B6\u3002",en:"Reviews Greeks, implied volatility and strategy fit to characterise an options risk shape."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","instruments","risk"],riskNote:{zh:"\u5B9E\u9A8C\u6027\u8D28\uFF1B\u53EA\u89E3\u91CA\u671F\u6743\u98CE\u9669\uFF0C\u4E0D\u63A8\u8350\u5177\u4F53\u5408\u7EA6\u6216\u7B56\u7565\u7EC4\u5408\u3002",en:"Experimental; it explains options risk and does not recommend contracts or spreads."}},{key:"portfolioReview",name:"portfolio-review",label:{zh:"\u7EC4\u5408\u8868\u73B0\u4E0E\u914D\u7F6E\u504F\u79BB",en:"Portfolio Review"},description:{zh:"\u590D\u76D8\u7EC4\u5408\u7684\u6536\u76CA\u6765\u6E90\u3001\u96C6\u4E2D\u5EA6\u4E0E\u914D\u7F6E\u504F\u79BB\uFF0C\u5E76\u5217\u51FA\u9700\u8981\u76EF\u7684\u89C2\u5BDF\u9879\u3002",en:"Reviews portfolio performance, concentration and allocation drift, with items to watch."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","portfolio","risk"],riskNote:{zh:"\u4E0E\u672C\u63D2\u4EF6\u81EA\u5E26\u7684\u7EC4\u5408\u590D\u76D8\u6D41\u7A0B\u91CD\u53E0\uFF1B\u8FD9\u6761\u6309\u7F8E\u80A1\u8BED\u5883\u7ED9\u89C2\u5BDF\u6E05\u5355\uFF0C\u4ED3\u4F4D\u52A8\u4F5C\u4ECD\u7531\u4F7F\u7528\u8005\u51B3\u5B9A\u3002",en:"Overlaps the built-in portfolio review; this one gives a US-context watchlist and leaves position moves to you."}},{key:"positionLadder",name:"position-ladder",label:{zh:"\u5206\u6279\u5EFA\u4ED3\u4E0E\u644A\u8584\u8282\u594F",en:"Position Ladder"},description:{zh:"\u628A\u5EFA\u4ED3\u62C6\u6210\u5206\u6279\u7684\u80A1\u6570\u4E0A\u4E0B\u9650\u4E0E\u52A0\u51CF\u4ED3\u8282\u594F\uFF0C\u5E76\u68C0\u67E5\u6279\u6B21\u8BB0\u8D26\u3001\u6D17\u552E\u7A97\u53E3\u4E0E\u603B\u6536\u76CA\u53E3\u5F84\u3002",en:"Plans a staged entry with share-count floors and ceilings, trim/re-add cadence, lot and wash-sale checks."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","portfolio","monitoring"],riskNote:{zh:"\u6B63\u6587\u91CC\u7684\u80A1\u6570\u533A\u95F4\u662F\u63A8\u6F14\u7528\u7684\u7EC3\u4E60\uFF0C\u4E0D\u662F\u4E70\u5356\u6307\u4EE4\uFF1B\u672C\u63D2\u4EF6\u4E0D\u63D0\u4F9B\u6295\u8D44\u5EFA\u8BAE\uFF0C\u4ED3\u4F4D\u51B3\u5B9A\u5728\u4F7F\u7528\u8005\u3002",en:"Its share-count ranges are rehearsal arithmetic, not orders; this plugin gives no investment advice."}},{key:"resultValidator",name:"result-validator",label:{zh:"\u5206\u6790\u7ED3\u679C\u7F6E\u4FE1\u5EA6\u8BC4\u5206",en:"Result Validator"},description:{zh:"\u4ECE\u6570\u636E\u8D28\u91CF\u3001\u65B9\u6CD5\u4E00\u81F4\u6027\u4E0E\u4FE1\u53F7\u51B2\u7A81\u4E09\u4E2A\u7EF4\u5EA6\uFF0C\u7ED9\u4E00\u4EFD\u5206\u6790\u7ED3\u679C\u6253\u7F6E\u4FE1\u5EA6\u5206\u3002",en:"Scores an analysis's confidence across data quality, methodology and signal consistency."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["verification","perspective"],riskNote:{zh:"\u6253\u7684\u662F\u6570\u636E\u4E0E\u65B9\u6CD5\u81EA\u6D3D\u5EA6\uFF0C\u4E0D\u7B49\u4E8E\u9884\u6D4B\u51C6\u786E\u7387\uFF0C\u4E5F\u4E0D\u627F\u8BFA\u8868\u73B0\u3002",en:"It grades internal data/method consistency, not forecast accuracy or future performance."}},{key:"riskStressTest",name:"risk-stress-test",label:{zh:"\u7EC4\u5408\u538B\u529B\u6D4B\u8BD5\u4E0E\u98CE\u9669\u9884\u7B97",en:"Risk Stress Test"},description:{zh:"beta \u52A0\u6743\u655E\u53E3\u3001\u5386\u53F2\u60C5\u666F\u91CD\u653E\u3001VaR / CVaR\u3001\u6700\u5927\u56DE\u64A4\u4F30\u8BA1\u4E0E\u6D41\u52A8\u6027\u9000\u51FA\u5929\u6570\u3002",en:"Beta-weighted exposure, historical scenario replay, VaR / CVaR, drawdown estimates and days to exit."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","portfolio","risk","macro"],riskNote:{zh:"\u6A21\u578B\u5316\u4F30\u8BA1\uFF0C\u5047\u8BBE\u4E00\u53D8\u7ED3\u679C\u5C31\u53D8\uFF1B\u4E0D\u6784\u6210\u98CE\u63A7\u989D\u5EA6\uFF0C\u4E5F\u4E0D\u662F\u51CF\u4ED3\u6307\u4EE4\u3002",en:"Model output moves with every assumption; this is not a risk limit or a de-risking order."}},{key:"sectorAnalysis",name:"sector-analysis",label:{zh:"\u677F\u5757\u76F8\u5BF9\u5F3A\u5F31\u4E0E\u8F6E\u52A8",en:"Sector Analysis"},description:{zh:"\u770B\u7F8E\u56FD\u5404\u677F\u5757\u7684\u76F8\u5BF9\u5F3A\u5F31\u4E0E\u8F6E\u52A8\u7EBF\u7D22\uFF0C\u5E76\u4EA4\u4EE3\u5224\u65AD\u4F9D\u636E\u3002",en:"Reviews US sector positioning and rotation clues, and states what each read rests on."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","macro","competition"],riskNote:{zh:"\u677F\u5757\u5206\u7C7B\u6309\u7F8E\u80A1\u53E3\u5F84\uFF0C\u4E0E A \u80A1\u884C\u4E1A\u5206\u7C7B\u4E0D\u53EF\u76F4\u63A5\u5BF9\u7167\u3002",en:"Sector taxonomy is US-market; it does not line up with A-share industry classification."}},{key:"shortInterest",name:"short-interest",label:{zh:"\u7A7A\u5934\u6301\u4ED3\u4E0E\u6324\u538B\u6761\u4EF6",en:"Short Interest"},description:{zh:"\u8BFB\u7A7A\u5934\u6BD4\u4F8B\u3001\u56DE\u8865\u6210\u672C\u4E0E\u6324\u538B\u6761\u4EF6\uFF0C\u5E76\u68C0\u67E5\u5229\u7A7A\u5806\u79EF\u4FE1\u53F7\u3002",en:"Analyses short ratio, cost to cover, squeeze conditions and bearish positioning signals."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","filings","monitoring","risk"],riskNote:{zh:"\u7A7A\u5934\u6570\u636E\u662F\u6EDE\u540E\u62AB\u9732\uFF1B\u5F53\u6210\u5B9E\u65F6\u7ED3\u8BBA\u4E4B\u524D\u5148\u6838\u5BF9\u53E3\u5F84\u4E0E\u622A\u6B62\u65E5\u671F\u3002",en:"Short data is reported with a lag \u2014 check basis and as-of date before reading it as live."}},{key:"stockEval",name:"stock-eval",label:{zh:"\u57FA\u672C\u9762\u4E0E\u4F30\u503C\u7EFC\u5408\u8BC4\u4F30",en:"Stock Evaluation"},description:{zh:"\u628A\u8D22\u52A1\u8D28\u91CF\u3001\u6210\u957F\u3001\u4F30\u503C\u4E0E\u98CE\u9669\u5408\u5230\u4E00\u6B21\u7EFC\u5408\u8BC4\u4F30\u91CC\uFF0C\u5E76\u8F93\u51FA\u4E00\u4E2A\u53EF\u4EA4\u4EE3\u51FA\u5904\u7684\u7ED3\u8BBA\u3002",en:"Combines quality, growth, valuation and risk into one evaluation with a sourced conclusion."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","business-analysis","financial-health","valuation","risk"],riskNote:{zh:"\u4E0A\u6E38\u5DF2\u628A fundamental-analysis \u5408\u5165\u672C\u6761\uFF1B\u7EFC\u5408\u7ED3\u8BBA\u4ECD\u662F\u7F8E\u80A1\u53E3\u5F84\uFF0C\u4E0D\u66FF\u4EE3\u672C\u63D2\u4EF6\u65E2\u6709\u7814\u7A76\u6D41\u7A0B\u3002",en:"Upstream folded fundamental-analysis in; the read is US-context and does not replace Capital's own research flow."}},{key:"stockScreener",name:"stock-screener",label:{zh:"\u591A\u6807\u7684\u6A2A\u5411\u6253\u5206\u6392\u5E8F",en:"Stock Screener"},description:{zh:"\u6309\u4F30\u503C\u3001\u8D28\u91CF\u3001\u52A8\u91CF\u3001\u60C5\u7EEA\u4E0E\u6210\u957F\u4E94\u4E2A\u7EF4\u5EA6\u7ED9\u4E00\u7BEE\u5B50\u6807\u7684\u6253\u5206\u5E76\u6392\u5E8F\u3002",en:"Screens and ranks a list of US stocks across valuation, quality, momentum, sentiment and growth."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","valuation","business-analysis","technicals"],riskNote:{zh:"\u6392\u5E8F\u53EA\u53CD\u6620\u5F53\u671F\u6253\u5206\u53E3\u5F84\uFF0C\u4E0D\u9884\u6D4B\u672A\u6765\u8868\u73B0\uFF1B\u6807\u7684\u6E05\u5355\u4E0E\u6570\u636E\u6765\u6E90\u4ECD\u8981\u8D70\u672C\u63D2\u4EF6\u7684\u53D6\u6570\u94FE\u8DEF\u3002",en:"Ranking reflects the current scoring inputs only, not future performance; data still comes via Capital's own sources."}},{key:"stockValuation",name:"stock-valuation",label:{zh:"\u56DB\u65B9\u6CD5\u4F30\u503C\u533A\u95F4",en:"Stock Valuation"},description:{zh:"DCF\u3001\u53EF\u6BD4\u516C\u53F8\u3001EV \u500D\u6570\u4E0E\u5269\u4F59\u6536\u76CA\u4E00\u8D77\u51FA\u4F30\u503C\u533A\u95F4\uFF0C\u5E76\u9010\u6761\u4EA4\u4EE3\u5047\u8BBE\u3002",en:"Values a company with DCF, comparables, EV multiples and residual income, stating every assumption."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","valuation","cash-flow"],riskNote:{zh:"\u533A\u95F4\u968F\u5047\u8BBE\u5927\u5E45\u79FB\u52A8\uFF1B\u8F93\u51FA\u4E0D\u7B49\u4E8E\u76EE\u6807\u4EF7\uFF0C\u4E5F\u4E0D\u662F\u4E70\u5356\u5EFA\u8BAE\u3002",en:"Ranges swing with assumptions; the output is not a price target or a trade call."}},{key:"taxLens",name:"tax-lens",label:{zh:"\u7F8E\u56FD\u7A0E\u52A1\u89C6\u89D2\u68C0\u89C6\u6E05\u5355",en:"Tax Lens"},description:{zh:"\u957F\u77ED\u671F\u8D44\u672C\u5229\u5F97\u3001\u6D17\u552E\u7A97\u53E3\u3001\u5408\u683C\u80A1\u606F\u6301\u6709\u671F\u3001\u6279\u6B21\u9009\u62E9\u4E0E\u5E74\u5EA6\u7A0E\u8D1F\u62D6\u7D2F\u7684\u68C0\u89C6\u6E05\u5355\u3002",en:"Checks short vs. long-term gains, wash-sale windows, qualified dividends, lot selection and estimated tax drag."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","tax","portfolio"],riskNote:{zh:"\u53EA\u8BB2\u7F8E\u56FD\u7A0E\u5236\u4E14\u6B62\u4E8E\u6559\u80B2\u53E3\u5F84\uFF1B\u4E2D\u56FD\u5927\u9646\u7684\u7A0E\u52A1\u4E0E\u8D26\u6237\u5B89\u6392\u8BF7\u54A8\u8BE2\u4E13\u4E1A\u4EBA\u58EB\u3002",en:"US tax mechanics, educational only; get professional advice for mainland-China tax and account matters."}},{key:"technicalAnalysis",name:"technical-analysis",label:{zh:"\u6280\u672F\u9762\u4E0E\u6307\u6807\u89E3\u8BFB",en:"Technical Analysis"},description:{zh:"\u7528\u5747\u7EBF\u3001\u6210\u4EA4\u91CF\u3001RSI / MACD \u7B49\u6307\u6807\u8BFB\u8D8B\u52BF\u3001\u5173\u952E\u4EF7\u4F4D\u4E0E\u590D\u67E5\u89E6\u53D1\u6761\u4EF6\u3002",en:"Reads trend and key levels with moving averages, volume, RSI and MACD, plus re-check triggers."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","technicals","monitoring"],riskNote:{zh:"\u6280\u672F\u4FE1\u53F7\u53EA\u7ED9\u590D\u67E5\u6761\u4EF6\uFF0C\u4E0D\u9884\u6D4B\u65B9\u5411\uFF1B\u4E0D\u8981\u628A\u56FE\u5F62\u7ED3\u8BBA\u5199\u6210\u4E8B\u5B9E\u3002",en:"Technical signals are re-check triggers, not direction forecasts \u2014 do not present them as facts."}},{key:"thesisTracker",name:"thesis-tracker",label:{zh:"\u6295\u8D44\u8BBA\u70B9\u5B58\u6863\u4E0E\u590D\u6838",en:"Thesis Tracker"},description:{zh:"\u5199\u4E0B\u8BBA\u70B9\u7684 KPI\u3001\u5931\u6548\u6761\u4EF6\u4E0E\u50AC\u5316\u5242\uFF0C\u4E4B\u540E\u6309\u65B0\u6570\u636E\u590D\u67E5\u5E76\u7ED9\u51FA\u7EF4\u6301 / \u8D70\u5F31 / \u5931\u6548\u3002",en:"Records KPIs, invalidation triggers and catalysts, then re-checks them as INTACT / WEAKENED / BROKEN."},owner:"yennanliu",repository:"InvestSkill",status:"experimental",lastCommit:"2026-09-25",reviewBy:"2026-11-06",tags:["us-stock","verification","monitoring","perspective"],riskNote:{zh:"\u4E0A\u6E38\u5047\u8BBE\u80FD\u628A\u8BBA\u70B9\u843D\u76D8\uFF1B\u5728\u672C\u63D2\u4EF6\u4E0B\u6587\u4EF6\u5199\u5728\u5DE5\u4F5C\u76EE\u5F55\u5E76\u670D\u4ECE\u5F53\u524D\u4F1A\u8BDD\u6743\u9650\u3002",en:"Upstream assumes it can save files; under Capital it writes into the session workspace and obeys its permissions."}},{key:"peterLynchResearch",name:"peter-lynch-skill",label:{zh:"\u5F7C\u5F97\xB7\u6797\u5947\u5F0F\u4E2A\u80A1\u7814\u7A76",en:"Peter Lynch Research"},description:{zh:"\u7ED9\u4E00\u4E2A\u4EE3\u7801\u6216\u516C\u53F8\u540D\uFF0C\u8D70\u5FEB\u7B5B\uFF08SKIP / WATCHLIST / DEEP RESEARCH\uFF09\u6216\u5B8C\u6574\u5C3D\u8C03\uFF0C\u751F\u610F\u7406\u89E3\u3001\u5206\u7C7B\u4E0E\u4F30\u503C\u653E\u5728\u540C\u4E00\u5957\u68C0\u67E5\u91CC\uFF0C\u6BCF\u6761\u4E3B\u5F20\u914D\u53EF\u70B9\u5F00\u7684\u6765\u6E90\u94FE\u63A5\u3002\u7F8E\u80A1\u4E0E\u5883\u5916\u4E0A\u5E02\u53E3\u5F84\u3002",en:"Screens a ticker or company fast (SKIP / WATCHLIST / DEEP RESEARCH) or runs full due diligence, with linked sources under every claim. US and overseas-listing conventions."},owner:"DjNero11",repository:"peter-lynch-skill",status:"watchlist",lastCommit:"2026-06-28",reviewBy:"2026-11-06",tags:["peter-lynch","us-stock","valuation","risk","verification"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0A\u6E38\u4EC5\u4E24\u6B21\u63D0\u4EA4\u3001\u81EA 2026-06-28 \u8D77\u65E0\u66F4\u65B0\uFF0C\u542F\u7528\u524D\u8BF7\u81EA\u884C\u590D\u6838\u6765\u6E90\u3002X/10 \u8861\u91CF\u7684\u662F\u8BBA\u70B9\u81EA\u6D3D\u5EA6\u4E0E\u7ED3\u6784\u7279\u5F81\uFF0C\u4E0D\u9884\u6D4B\u8868\u73B0\uFF0C\u4E5F\u4E0D\u6784\u6210\u4E70\u5356\u5EFA\u8BAE\u3002",en:"Cold-start experiment; upstream has two commits and has been quiet since 2026-06-28, so review the sources before use. The X/10 score rates thesis consistency and structure, not forecast performance, and is not investment advice."}},{key:"catalystMap",name:"catalyst-map",label:{zh:"\u50AC\u5316\u5242\u5730\u56FE",en:"Catalyst Map"},description:{zh:'\u628A\u8981\u53D1\u751F\u7684\u4E8B\u4EF6\u6309"\u5F71\u54CD\u4EC0\u4E48\u3001\u4EC0\u4E48\u65F6\u5019\u5F71\u54CD\u3001\u4F1A\u4F20\u5BFC\u5230\u8C01"\u6392\u6210\u6CE8\u610F\u529B\u4F18\u5148\u7EA7\uFF0C\u5E76\u6807\u51FA\u4F9D\u8D56\u540C\u4E00\u4E8B\u4EF6\u94FE\u7684\u6301\u4ED3\u3002\u7F8E\u80A1\u4E0E\u5883\u5916\u5B8F\u89C2\u65E5\u5386\u53E3\u5F84\u3002',en:"Ranks upcoming events by what they move, when, and how they transmit across related names, and flags positions hanging on the same event chain. US and overseas calendar conventions."},owner:"marian2js",repository:"trading-skills",status:"watchlist",lastCommit:"2026-03-16",reviewBy:"2026-11-06",tags:["trade-discipline","macro","monitoring","us-stock"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0A\u6E38\u81EA 2026-03-16 \u8D77\u65E0\u63D0\u4EA4\uFF0C\u542F\u7528\u524D\u8BF7\u81EA\u884C\u590D\u6838\u6765\u6E90\u3002\u5B83\u6392\u7684\u662F\u6CE8\u610F\u529B\u4F18\u5148\u7EA7\uFF0C\u4E0D\u9884\u6D4B\u4EF7\u683C\u8D70\u5411\uFF0C\u4E5F\u4E0D\u6784\u6210\u4E70\u5356\u5EFA\u8BAE\u3002",en:"Cold-start experiment; upstream has been quiet since 2026-03-16, so review the sources before use. The map ranks attention, not price direction, and is not investment advice."}},{key:"watchlistReview",name:"watchlist-review",label:{zh:"\u81EA\u9009\u80A1\u5206\u8BCA",en:"Watchlist Review"},description:{zh:"\u5BF9\u4F7F\u7528\u8005\u7ED9\u51FA\u7684\u81EA\u9009\u6E05\u5355\u505A\u5206\u8BCA\uFF1A\u54EA\u4E9B\u503C\u5F97\u76EF\u3001\u54EA\u4E9B\u53EA\u4F5C\u80CC\u666F\u3001\u54EA\u4E9B\u7406\u7531\u5DF2\u7ECF\u4E0D\u6210\u7ACB\uFF0C\u5E76\u8BF4\u6E05\u79FB\u51FA\u7684\u662F\u6E05\u5355\u6761\u76EE\u800C\u4E0D\u662F\u6301\u4ED3\u3002",en:"Triages the watchlist the user supplies into active focus, background monitoring, or removal, and says that what comes off is a list entry, not a position."},owner:"marian2js",repository:"trading-skills",status:"watchlist",lastCommit:"2026-03-16",reviewBy:"2026-11-06",tags:["trade-discipline","portfolio","monitoring","us-stock"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0A\u6E38\u81EA 2026-03-16 \u8D77\u65E0\u63D0\u4EA4\uFF0C\u542F\u7528\u524D\u8BF7\u81EA\u884C\u590D\u6838\u6765\u6E90\u3002\u5206\u8BCA\u53EA\u4F5C\u7528\u4E8E\u81EA\u9009\u6E05\u5355\uFF0C\u4E0D\u6784\u6210\u4E70\u5356\u52A8\u4F5C\uFF1B\u672C\u63D2\u4EF6\u8BFB\u4E0D\u5230\u5238\u5546\u8D26\u6237\u3002",en:"Cold-start experiment; upstream has been quiet since 2026-03-16, so review the sources before use. The triage acts on the watchlist only, is not a buy or sell action, and this plugin cannot read a brokerage account."}},{key:"evidenceGapCheck",name:"evidence-gap-check",label:{zh:"\u8BC1\u636E\u7F3A\u53E3\u68C0\u67E5",en:"Evidence Gap Check"},description:{zh:'\u628A\u4E00\u7B14\u60F3\u6CD5\u8FD8\u7F3A\u7684\u4E8B\u5B9E\u3001\u5047\u8BBE\u4E0E\u672A\u89E3\u95EE\u9898\u6309"\u4F1A\u4E0D\u4F1A\u6539\u53D8\u5224\u65AD"\u6392\u5E8F\uFF0C\u8BF4\u6E05\u54EA\u4E9B\u7F3A\u53E3\u5FC5\u987B\u5148\u8865\u3001\u54EA\u4E9B\u53EA\u662F\u964D\u4F4E\u7F6E\u4FE1\u5EA6\u3002',en:"Ranks the missing facts, assumptions and open questions behind an idea by whether they change the judgement, and separates blocking gaps from confidence gaps."},owner:"marian2js",repository:"trading-skills",status:"watchlist",lastCommit:"2026-03-16",reviewBy:"2026-11-06",tags:["trade-discipline","verification","risk"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0A\u6E38\u81EA 2026-03-16 \u8D77\u65E0\u63D0\u4EA4\uFF0C\u542F\u7528\u524D\u8BF7\u81EA\u884C\u590D\u6838\u6765\u6E90\u3002\u5B83\u53EA\u5217\u8BC1\u636E\u7F3A\u53E3\uFF0C\u4E0D\u7ED9\u8BC4\u7EA7\u3001\u4E0D\u66FF\u4F7F\u7528\u8005\u51B3\u5B9A\u8FD9\u7B14\u505A\u4E0D\u505A\u3002",en:"Cold-start experiment; upstream has been quiet since 2026-03-16, so review the sources before use. It lists evidence gaps only: no rating, and no decision about whether to take the trade."}},{key:"thesisValidation",name:"thesis-validation",label:{zh:"\u8BBA\u70B9\u538B\u529B\u6D4B\u8BD5",en:"Thesis Validation"},description:{zh:"\u628A\u4E00\u4E2A\u8BF4\u6CD5\u538B\u6210\u53EF\u68C0\u9A8C\u7684\u4E3B\u5F20\uFF1A\u8BBA\u70B9\u3001\u8BC1\u636E\u3001\u5931\u6548\u6761\u4EF6\u4E0E\u65F6\u95F4\u7A97\u5206\u5F00\u5199\uFF0C\u518D\u5224\u5B83\u591F\u4E0D\u591F\u683C\u8FDB\u5165\u7ED3\u6784\u68C0\u67E5\u3002",en:"Turns a claim into something testable \u2014 thesis, evidence, invalidation, timeframe \u2014 then judges whether it is ready to be built on."},owner:"marian2js",repository:"trading-skills",status:"watchlist",lastCommit:"2026-03-16",reviewBy:"2026-11-06",tags:["trade-discipline","verification","risk"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0A\u6E38\u81EA 2026-03-16 \u8D77\u65E0\u63D0\u4EA4\uFF0C\u542F\u7528\u524D\u8BF7\u81EA\u884C\u590D\u6838\u6765\u6E90\u3002\u5224\u7684\u662F\u8BBA\u70B9\u662F\u5426\u81EA\u6D3D\u53EF\u68C0\u9A8C\uFF0C\u4E0D\u9884\u6D4B\u8868\u73B0\uFF0C\u4E5F\u4E0D\u6784\u6210\u4E70\u5356\u5EFA\u8BAE\u3002",en:"Cold-start experiment; upstream has been quiet since 2026-03-16, so review the sources before use. It tests whether a thesis is coherent and falsifiable, not how it will perform, and is not investment advice."}},{key:"riskRewardSanityCheck",name:"risk-reward-sanity-check",label:{zh:"\u76C8\u4E8F\u6BD4\u81EA\u6D3D\u68C0\u67E5",en:"Risk-Reward Sanity Check"},description:{zh:"\u6309\u5165\u573A\u3001\u6B62\u635F\u4E0E\u76EE\u6807\u7B97\u51FA\u76C8\u4E8F\u6BD4\uFF0C\u518D\u68C0\u67E5\u8FD9\u4E2A\u7ED3\u6784\u662F\u5426\u81EA\u6D3D\uFF1A\u76EE\u6807\u662F\u5426\u843D\u5728\u566A\u58F0\u91CC\u3001\u6B62\u635F\u662F\u5426\u5728\u660E\u663E\u7684\u6D41\u52A8\u6027\u805A\u96C6\u5904\u3002",en:"Works out the reward-to-risk ratio from entry, stop and target, then tests whether the structure holds \u2014 targets inside noise, stops sitting in obvious liquidity pools."},owner:"marian2js",repository:"trading-skills",status:"watchlist",lastCommit:"2026-03-16",reviewBy:"2026-11-06",tags:["trade-discipline","risk","us-stock"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0A\u6E38\u81EA 2026-03-16 \u8D77\u65E0\u63D0\u4EA4\uFF0C\u542F\u7528\u524D\u8BF7\u81EA\u884C\u590D\u6838\u6765\u6E90\u3002\u6BD4\u503C\u8861\u91CF\u7684\u662F\u7ED3\u6784\u81EA\u6D3D\u4E0E\u5931\u8D25\u9762\uFF0C\u4E0D\u662F\u80DC\u7387\u6216\u6536\u76CA\u627F\u8BFA\uFF0C\u672C\u63D2\u4EF6\u4E5F\u4E0D\u636E\u5B83\u7ED9\u4ED3\u4F4D\u6570\u5B57\u3002",en:"Cold-start experiment; upstream has been quiet since 2026-03-16, so review the sources before use. The ratio measures structural coherence and failure modes, not win rate or returns, and this plugin derives no position size from it."}},{key:"executionPlanCheck",name:"execution-plan-check",label:{zh:"\u6267\u884C\u8BA1\u5212\u68C0\u67E5",en:"Execution Plan Check"},description:{zh:"\u68C0\u67E5\u4E00\u4EFD\u4EA4\u6613\u8BA1\u5212\u5728\u64CD\u4F5C\u4E0A\u662F\u5426\u771F\u7684\u80FD\u843D\u5730\uFF1A\u8BA2\u5355\u7C7B\u578B\u4E0E\u7D27\u8FEB\u5EA6\u662F\u5426\u5339\u914D\u3001\u6D41\u52A8\u6027\u4E0E\u70B9\u5DEE\u98CE\u9669\u3001\u4E8B\u4EF6\u65F6\u70B9\u3001\u6B62\u635F\u80FD\u5426\u6210\u4EA4\u3002",en:"Checks whether a plan is operationally workable: order type against urgency, liquidity and spread risk, event timing, and whether a stop would actually fill."},owner:"marian2js",repository:"trading-skills",status:"watchlist",lastCommit:"2026-03-16",reviewBy:"2026-11-06",tags:["trade-discipline","risk","monitoring","us-stock"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0A\u6E38\u81EA 2026-03-16 \u8D77\u65E0\u63D0\u4EA4\uFF0C\u542F\u7528\u524D\u8BF7\u81EA\u884C\u590D\u6838\u6765\u6E90\u3002\u68C0\u67E5\u7684\u662F\u8BA1\u5212\u7684\u53EF\u64CD\u4F5C\u6027\uFF1A\u672C\u63D2\u4EF6\u4E0D\u4E0B\u5355\u3001\u4E0D\u6539\u5355\uFF0C\u4E5F\u4E0D\u7ED9\u4ED3\u4F4D\u6570\u5B57\u3002",en:"Cold-start experiment; upstream has been quiet since 2026-03-16, so review the sources before use. It reviews whether a plan is executable: this plugin places and amends no orders and gives no position size."}},{key:"portfolioConcentration",name:"portfolio-concentration",label:{zh:"\u7EC4\u5408\u96C6\u4E2D\u5EA6\u68C0\u67E5",en:"Portfolio Concentration"},description:{zh:"\u770B\u7EC4\u5408\u662F\u5426\u8FC7\u5EA6\u538B\u5728\u540C\u4E00\u6279\u53D1\u884C\u4EBA\u3001\u884C\u4E1A\u3001\u4E3B\u9898\u6216\u76F8\u5173\u66B4\u9732\u4E0A\uFF0C\u5E76\u5199\u6E05\u8FD9\u4E2A\u5224\u65AD\u9700\u8981\u54EA\u4E9B\u6301\u4ED3\u6570\u636E\u624D\u6210\u7ACB\u3002",en:"Shows whether a book leans too hard on a few issuers, sectors, themes or correlated exposures, and what holdings data that verdict needs to stand."},owner:"marian2js",repository:"trading-skills",status:"watchlist",lastCommit:"2026-03-16",reviewBy:"2026-11-06",tags:["trade-discipline","portfolio","risk"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0A\u6E38\u81EA 2026-03-16 \u8D77\u65E0\u63D0\u4EA4\uFF0C\u542F\u7528\u524D\u8BF7\u81EA\u884C\u590D\u6838\u6765\u6E90\u3002\u6587\u4E2D\u7684 5%\uFF0F10% \u4E00\u7C7B\u662F\u7ECF\u9A8C\u53E3\u5F84\u4E0D\u662F\u666E\u9002\u89C4\u5219\uFF1B\u6301\u4ED3\u53EA\u4EE5\u4F7F\u7528\u8005\u81EA\u62A5\u7684\u6807\u8BB0\u4E3A\u51C6\uFF08\u672C\u63D2\u4EF6\u8BFB\u4E0D\u5230\u5238\u5546\u8D26\u6237\uFF09\uFF0C\u4E5F\u4E0D\u6784\u6210\u52A0\u51CF\u4ED3\u5EFA\u8BAE\u3002",en:"Cold-start experiment; upstream has been quiet since 2026-03-16, so review the sources before use. The 5% / 10% bands are practical review thresholds, not universal laws; the book comes only from positions the user marked as held (this plugin cannot read a brokerage account), and it is not advice to add or reduce."}},{key:"journalPatternAnalyzer",name:"journal-pattern-analyzer",label:{zh:"\u4EA4\u6613\u65E5\u5FD7\u6A21\u5F0F\u5206\u6790",en:"Journal Pattern Analyzer"},description:{zh:"\u4ECE\u4F7F\u7528\u8005\u81EA\u5DF1\u7684\u4EA4\u6613\u65E5\u5FD7\u91CC\u627E\u91CD\u590D\u51FA\u73B0\u7684\u4F18\u52BF\u4E0E\u5931\u8BEF\u3001\u5B83\u4EEC\u5404\u81EA\u53D1\u751F\u5728\u4EC0\u4E48\u73AF\u5883\u4E0B\uFF0C\u5E76\u4E3A\u5C0F\u6837\u672C\u8BBE\u62A4\u680F\u3002",en:"Finds the repeated strengths and mistakes in the user\u2019s own trade journal, groups them by environment, and keeps small samples from hardening into lessons."},owner:"marian2js",repository:"trading-skills",status:"watchlist",lastCommit:"2026-03-16",reviewBy:"2026-11-06",tags:["trade-discipline","education","portfolio"],riskNote:{zh:"\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0A\u6E38\u81EA 2026-03-16 \u8D77\u65E0\u63D0\u4EA4\uFF0C\u542F\u7528\u524D\u8BF7\u81EA\u884C\u590D\u6838\u6765\u6E90\u3002\u80DC\u7387\u3001\u671F\u671B\u503C\u8FD9\u7C7B\u6570\u5B57\u662F\u5BF9\u5DF2\u6709\u65E5\u5FD7\u7684\u63CF\u8FF0\uFF0C\u4E0D\u8BC1\u660E\u53EF\u6301\u7EED\u7684\u4F18\u52BF\uFF0C\u4E5F\u4E0D\u6784\u6210\u6295\u8D44\u5EFA\u8BAE\u3002",en:"Cold-start experiment; upstream has been quiet since 2026-03-16, so review the sources before use. Win rate and expectancy describe the log you already have: they prove no durable edge and are not investment advice."}},{key:"postTradeReview",name:"post-trade-review",label:{zh:"\u4EA4\u6613\u590D\u76D8",en:"Post-Trade Review"},description:{zh:"\u6309\u8BBA\u70B9\u3001setup\u3001\u6267\u884C\u3001\u5B88\u89C4\u4E0E\u7ED3\u679C\u51E0\u6761\u7EBF\u590D\u76D8\u4E00\u7B14\u5DF2\u7ECF\u5E73\u6389\u7684\u4EA4\u6613\uFF0C\u907F\u514D\u7528\u540E\u89C6\u955C\u7F16\u9020\u6559\u8BAD\u3002",en:"Reviews a closed trade across thesis, setup, execution, adherence and outcome without rewriting it with hindsight."},owner:"marian2js",repository:"trading-skills",status:"watchlist",lastCommit:"2026-03-16",reviewBy:"2026-11-06",tags:["trade-discipline","education"],riskNote:{zh:'\u51B7\u542F\u52A8\u5B9E\u9A8C\uFF1B\u4E0A\u6E38\u81EA 2026-03-16 \u8D77\u65E0\u63D0\u4EA4\uFF0C\u542F\u7528\u524D\u8BF7\u81EA\u884C\u590D\u6838\u6765\u6E90\u3002\u590D\u76D8\u5F97\u51FA\u7684"\u4E0B\u6B21\u8981\u6539\u7684\u89C4\u5219"\u5C5E\u4E8E\u8FC7\u7A0B\u63A8\u6F14\uFF0C\u672C\u63D2\u4EF6\u4E0D\u636E\u5B83\u66FF\u4F7F\u7528\u8005\u8C03\u6574\u6301\u4ED3\u6216\u4E0B\u5355\u3002',en:"Cold-start experiment; upstream has been quiet since 2026-03-16, so review the sources before use. The rule changes it suggests are process exercises: this plugin adjusts no holdings and places no orders on them."}}]),re=Object.freeze({zh:{all:"\u5168\u90E8","a-share":"A \u80A1","business-analysis":"\u4E1A\u52A1\u5206\u6790","capital-allocation":"\u8D44\u672C\u914D\u7F6E","cash-flow":"\u73B0\u91D1\u6D41",competition:"\u7ADE\u4E89\u683C\u5C40",earnings:"\u4E1A\u7EE9\u4E0E\u7535\u8BDD\u4F1A",education:"\u6559\u5B66",filings:"\u62AB\u9732\u6587\u4EF6","financial-health":"\u8D22\u52A1\u5065\u5EB7",instruments:"\u671F\u6743\u4E0E\u57FA\u91D1",macro:"\u5B8F\u89C2\u4E0E\u884C\u4E1A",monitoring:"\u76D1\u63A7",orders:"\u8BA2\u5355",perspective:"\u5206\u6790\u89C6\u89D2","peter-lynch":"\u5F7C\u5F97\xB7\u6797\u5947",portfolio:"\u7EC4\u5408\u4E0E\u4ED3\u4F4D",risk:"\u98CE\u9669",strategy:"\u6218\u7565",tax:"\u7A0E\u52A1",technicals:"\u6280\u672F\u9762","trade-discipline":"\u4EA4\u6613\u7EAA\u5F8B","us-stock":"\u7F8E\u80A1",valuation:"\u4F30\u503C",verification:"\u8BC1\u636E\u6838\u9A8C"},en:{all:"All","a-share":"A-share","business-analysis":"Business analysis","capital-allocation":"Capital allocation","cash-flow":"Cash flow",competition:"Competition",earnings:"Earnings",education:"Education",filings:"Filings","financial-health":"Financial health",instruments:"Options & funds",macro:"Macro & industry",monitoring:"Monitoring",orders:"Orders",perspective:"Perspective","peter-lynch":"Peter Lynch",portfolio:"Portfolio",risk:"Risk",strategy:"Strategy",tax:"Tax",technicals:"Technicals","trade-discipline":"Trade discipline","us-stock":"US equity",valuation:"Valuation",verification:"Verification"}})});var{createElement:a,useEffect:R,useRef:$,useState:b}=require("react"),{createPortal:ce}=require("react-dom"),{SettingsForm:de,SettingsSecretField:pe,SettingsFormModel:he,SegmentedControl:ue,Switch:M,Modal:me,writeClipboard:ge,IconRightUpOutlineRegular:W}=require("@deepseek-ai/dsh-client-ui-primitives"),{SELECTED_SKILL_CATALOG:v,SELECTED_SKILL_TAG_LABELS:V}=(j(),ne(U)),D="capital-config",S="@v587d/capital-generation",B="settings.capital",H="plugins.detail.badge",fe="https://github.com/v587d/capital-generation",ye=`https://www.npmjs.com/package/${S}`,ke="FUYAO_API_KEY",we="ANYSEARCH_API_KEY",ve="WIND_API_KEY",be="PADDLE_OCR_TOKEN",_="capital-config-tabs",Se="/capital-skills",E={fuyao:"https://fuyao.aicubes.cn/docs/",anysearch:"https://www.anysearch.com/docs/auth",wind:"https://market.windalice.com/",paddleocr:"https://aistudio.baidu.com/paddleocr"},f=["fuyao","anysearch","wind","paddleocr"],K=v.map(({key:t})=>t),C={fuyao:ke,anysearch:we,wind:ve,paddleocr:be},xe=()=>Object.fromEntries(f.map(t=>[t,{ref:C[t],configured:!1,writable:!0}])),Ce={tabsLabel:"\u914D\u7F6E\u5206\u533A",title:"\u6570\u636E\u6E90",titleUnsaved:"\u6570\u636E\u6E90 \u672A\u4FDD\u5B58",componentsTitle:"\u5305\u542B\u7684\u7EC4\u4EF6",componentsHint:"\u7EC4\u4EF6\u6E05\u5355\u7531 DSH \u7ED8\u5236\uFF0C\u663E\u793A\u5728\u4E0B\u65B9\u3002",fuyaoLabel:"Fuyao API Key",fuyaoHint:"\u540C\u82B1\u987A Fuyao \u7ED3\u6784\u5316\u6570\u636E\u63A5\u53E3\u3002\u4FDD\u5B58\u540E\u65B0 Capital \u6A21\u5F0F\u4F1A\u8BDD\u751F\u6548\u3002",anysearchLabel:"AnySearch API Key",anysearchHint:"AnySearch \u7F51\u9875\u641C\u7D22 / \u63D0\u53D6\u63A5\u53E3\u3002\u4FDD\u5B58\u540E\u65B0 Capital \u6A21\u5F0F\u4F1A\u8BDD\u751F\u6548\u3002",localFetchLabel:"\u5141\u8BB8\u542F\u52A8\u672C\u5730\u63D0\u53D6\u7F51\u9875\u5185\u5BB9",localFetchHint:"\u5F00\u542F\u540E\u672C\u5730\u6293\u53D6\u515C\u5E95\uFF08\u56DE\u6267\u6765\u6E90 local-http\uFF09\u3002\u4FDD\u5B58\u540E\u65B0 Capital \u6A21\u5F0F\u4F1A\u8BDD\u751F\u6548\u3002",windLabel:"Wind Alice API Key",windHint:"Wind \u91D1\u878D\u4FE1\u62AB\u7C7B\u6587\u6863\u68C0\u7D22\u63A5\u53E3\u3002\u4FDD\u5B58\u540E\u65B0 Capital \u6A21\u5F0F\u4F1A\u8BDD\u751F\u6548\u3002",paddleocrLabel:"PaddleOCR \u6587\u6863\u89E3\u6790 Token",paddleocrHint:"\u914D\u7F6E Token \u540E\u81EA\u52A8\u89E3\u6790 PDF\u3001\u56FE\u7247\u3002\u4FDD\u5B58\u540E\u65B0 Capital \u6A21\u5F0F\u4F1A\u8BDD\u751F\u6548\u3002",selectedSkillsTitle:"\u7CBE\u9009 Skills",selectedSkillsFilterLabel:"\u6309\u80FD\u529B\u7B5B\u9009",selectedSkillsEmpty:"\u6CA1\u6709\u5339\u914D\u8FD9\u4E2A\u6807\u7B7E\u7684 Skill\u3002",selectedSkillsCopyName:"\u590D\u5236\u6280\u80FD\u540D",selectedSkillsCopied:"\u5DF2\u590D\u5236",selectedSkillsDetail:"\u8BE6\u60C5",selectedSkillsDetailClose:"\u5173\u95ED",selectedSkillsDocLoading:"\u539F\u6587\u8BFB\u53D6\u4E2D\u2026",selectedSkillsDocFailed:"\u539F\u6587\u8BFB\u4E0D\u5230\uFF1A\u8FD9\u4EFD\u5FEB\u7167\u6CA1\u968F\u5305\u843D\u5730\uFF0C\u6216\u6682\u65F6\u8BFB\u4E0D\u51FA\u6765\u3002",selectedSkillsDocStale:"\u539F\u6587\u8BFB\u4E0D\u5230\uFF1A\u5BBF\u4E3B\u8FDB\u7A0B\u91CC\u8FD8\u6CA1\u6709\u8FD9\u6761\u8BFB\u539F\u6587\u7684\u901A\u9053\u3002\u5347\u7EA7\u63D2\u4EF6\u540E\u8981\u91CD\u542F DSH\uFF0C\u91CD\u542F\u524D\u5237\u65B0\u9875\u9762\u4E5F\u6CA1\u6709\u7528\u3002",selectedSkillsOpenRepo:"\u6253\u5F00\u4E0A\u6E38\u4ED3\u5E93",openDocs:"\u5B98\u65B9\u6587\u6863",configured:"\u5DF2\u914D\u7F6E\u5BC6\u94A5\u3002",notConfigured:"\u672A\u914D\u7F6E\u5BC6\u94A5\u3002",save:"\u4FDD\u5B58",saving:"\u4FDD\u5B58\u4E2D\u2026",readOnly:"\u672C\u90E8\u7F72\u7684\u8BBE\u7F6E\u4E3A\u53EA\u8BFB\u3002",saveFailed:"\u672C\u90E8\u7F72\u6CA1\u6709\u63A5\u53D7\u8FD9\u4E9B\u503C\uFF0C\u5DF2\u4FDD\u7559\u4F9B\u4F60\u4FEE\u6539\u3002",unavailable:"\u8BE5\u63D2\u4EF6\u5F53\u524D\u672A\u52A0\u8F7D\uFF0C\u6682\u65F6\u65E0\u6CD5\u914D\u7F6E\u3002",githubLabel:"GitHub \u4ED3\u5E93",npmLabel:"npm \u5305\u9875\u9762"},ze={tabsLabel:"Settings sections",title:"Data Sources",titleUnsaved:"Data Sources unsaved",componentsTitle:"Components",componentsHint:"The component list is drawn by DSH and appears below.",fuyaoLabel:"Fuyao API Key",fuyaoHint:"Tonghuashun Fuyao structured-data API. Takes effect in new Capital mode sessions.",anysearchLabel:"AnySearch API Key",anysearchHint:"AnySearch web search / extract interface. Takes effect in new Capital mode sessions.",localFetchLabel:"Allow local web page extraction",localFetchHint:"When on, a failed fetch falls back to local direct fetching (receipt via: local-http). Takes effect in new Capital mode sessions.",windLabel:"Wind Alice API Key",windHint:"Wind financial disclosure document retrieval interface. Takes effect in new Capital mode sessions.",paddleocrLabel:"PaddleOCR document token",paddleocrHint:"Configure the token to parse PDFs and images automatically. Takes effect in new Capital mode sessions.",selectedSkillsTitle:"Selected Skills",selectedSkillsFilterLabel:"Filter by capability",selectedSkillsEmpty:"No skills match this tag.",selectedSkillsCopyName:"Copy skill name",selectedSkillsCopied:"Copied",selectedSkillsDetail:"Details",selectedSkillsDetailClose:"Close",selectedSkillsDocLoading:"Loading the source\u2026",selectedSkillsDocFailed:"The source could not be read: this snapshot is not in the installed package, or it cannot be opened right now.",selectedSkillsDocStale:"The source could not be read: this host process has no route for it yet. After upgrading the plugin, restart DSH \u2014 reloading the page alone will not help.",selectedSkillsOpenRepo:"Open upstream repository",openDocs:"Official docs",configured:"A key is configured.",notConfigured:"No key is configured.",save:"Save",saving:"Saving\u2026",readOnly:"This deployment stores settings read-only.",saveFailed:"The deployment did not accept these values; they were left for you to correct.",unavailable:"This plugin is not loaded, so it cannot be configured right now.",githubLabel:"GitHub repository",npmLabel:"npm package page"};function F(t,e){return typeof t=="string"&&t.length>0?t:e}function Ee(t,e){return e==="fuyao"?F(t.value?.fuyaoCredentialRef,C.fuyao):e==="wind"?F(t.value?.retriever?.windDocs?.credentialRef,C.wind):e==="paddleocr"?F(t.value?.retriever?.paddleOcr?.credentialRef,C.paddleocr):F(t.value?.retriever?.credentialRef,C.anysearch)}function Fe(){if(typeof document>"u"||document.querySelector("style[data-capital-config]"))return()=>{};let t=document.createElement("style");return t.dataset.capitalConfig="true",t.textContent=`
|
|
9
9
|
.capital-config-card { display: flex; flex-direction: column; gap: 12px; }
|
|
10
10
|
.capital-config-title { margin: 0; font-size: 14px; font-weight: 500; line-height: 20px; }
|
|
11
11
|
/* \u9762\u677F\u7684 display \u53EA\u5728\u300C\u6CA1\u88AB hidden\u300D\u65F6\u58F0\u660E\uFF1AUA \u7684 [hidden]{display:none} \u4F1A\u8F93\u7ED9\u4EFB\u4F55\u4F5C\u8005
|
|
@@ -84,7 +84,7 @@ window.__ModuleLoader__.load({
|
|
|
84
84
|
.capital-config-plugin-link { border-radius: var(--dsw-radius-sm); width: 24px; height: 24px; color: var(--dsw-alias-label-tertiary); justify-content: center; align-items: center; display: inline-flex; text-decoration: none; }
|
|
85
85
|
.capital-config-plugin-link:hover { background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-primary); }
|
|
86
86
|
.capital-config-plugin-link:focus-visible { outline: var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsw-alias-brand-primary)); outline-offset: 1px; }
|
|
87
|
-
`,document.head.appendChild(t),()=>t.remove()}var P=class{constructor(e,i){this.scope=e,this.ctx=i,this.status=xe(),this.localFetchWriting=!1,this.localFetchFailed=!1,this.selectedSkillWriting=new Set,this.selectedSkillFailed=new Set,this.bundleRows=null,this.rowsRequested=!1,this.rowsInFlight=!1,this.model=new ue(e,[],f.map(n=>({field:n,write:l=>this.writeKey(n,l)}))),this.store=this.model.bind(()=>this.projection()),this.unsubscribe=e.subscribe(()=>{this.refreshRefs(),this.store.set(this.projection()),this.readCredentials()}),this.refreshRefs(),this.readCredentials()}dispose(){this.unsubscribe?.(),this.model.dispose()}projection(){let e=this.scope.getSnapshot();return{...this.model.shell(),...Object.fromEntries(f.map(i=>[i,{...this.model.field(i),configured:this.status[i].configured,writable:this.status[i].writable}])),localFetch:{on:e.value?.retriever?.localFetch?.enabled!==!1,writing:this.localFetchWriting,failed:this.localFetchFailed},selectedSkills:Object.fromEntries($.map(i=>[i,{on:e.value?.selectedSkills?.[i]===!0,writing:this.selectedSkillWriting.has(i),failed:this.selectedSkillFailed.has(i)}])),components:{count:this.bundleRows}}}refreshRefs(){let e=this.scope.getSnapshot();for(let i of f){let n=Ee(e,i);this.status[i].ref!==n&&(this.status[i]={ref:n,configured:!1,writable:!0},this.model.edit(i,""))}}async readCredentials(){let e=f.map(i=>this.status[i].ref);try{let i=await this.ctx.remote.credentials.describe(e);if(!i?.ok||f.some((l,o)=>e[o]!==this.status[l].ref))return;let n=i.value??{};for(let l of f){let o=this.status[l],r=n[o.ref];r!==void 0&&(this.status[l]={ref:o.ref,configured:r.configured===!0,writable:r.writable!==!1})}this.store.set(this.projection())}catch{}}refresh(e){f.some(i=>e===this.status[i].ref)&&this.readCredentials()}async writeKey(e,i){try{return await this.ctx.remote.credentials.set(this.status[e].ref,i.trim()),await this.readCredentials(),this.status[e].configured===!0}catch{return!1}}async toggleLocalFetch(e){if(this.localFetchWriting)return;let i=this.scope.getSnapshot();if(i.status!=="ready"||!i.writable)return;this.localFetchWriting=!0,this.localFetchFailed=!1,this.store.set(this.projection());try{await this.scope.mutate([{op:"set",path:["retriever","localFetch","enabled"],value:e}])}catch{}this.localFetchWriting=!1,this.scope.getSnapshot().value?.retriever?.localFetch?.enabled===e||(this.localFetchFailed=!0),this.store.set(this.projection())}async toggleSelectedSkill(e,i){if(!$.includes(e)||this.selectedSkillWriting.has(e))return;let n=this.scope.getSnapshot();if(n.status!=="ready"||!n.writable)return;this.selectedSkillWriting.add(e),this.selectedSkillFailed.delete(e),this.store.set(this.projection());try{await this.scope.mutate([{op:"set",path:["selectedSkills",e],value:i}])}catch{}this.selectedSkillWriting.delete(e),this.scope.getSnapshot().value?.selectedSkills?.[e]===i||this.selectedSkillFailed.add(e),this.store.set(this.projection())}async ensureBundleRows(){this.rowsRequested=!0,this.bundleRows===null&&await this.readBundleRows()}invalidateBundleRows(){this.rowsRequested&&this.readBundleRows()}async readBundleRows(){if(this.rowsInFlight)return;this.rowsInFlight=!0;let e=this.bundleRows;try{let i=await this.ctx.remote.pluginManager.listBundles(),n=i?.ok===!0?(i.value??[]).find(l=>l?.name===S):void 0;Array.isArray(n?.rows)&&(e=n.rows.length)}catch{}this.rowsInFlight=!1,e!==this.bundleRows&&(this.bundleRows=e,this.store.set(this.projection()))}inject(){return{hooks:{capitalCard:this.store},...this.model.actions(),toggleLocalFetch:e=>this.toggleLocalFetch(e),toggleSelectedSkill:(e,i)=>this.toggleSelectedSkill(e,i),ensureBundleRows:()=>this.ensureBundleRows()}}};function L({field:t,label:e,hint:i,docsUrl:n,state:l,disabled:o,onEdit:r,t:h}){let m=j(null),[g,y]=b(null);N(()=>{let c=m.current,u=c?c.querySelector("label"):null;u&&u.parentElement&&y(u.parentElement)},[]);let k=a("a",{href:n,target:"_blank",rel:"noopener noreferrer","aria-label":`${e} ${h("openDocs")}`,"data-capital-config-doc":"true",className:"capital-config-doc-link"},h("openDocs"),a(W,{size:12}));return a("div",{className:"capital-config-secret-row",key:t,ref:m},a(pe,{id:`capital-config-${t}-key`,label:e,hint:i,text:l.text,configured:l.configured,stateLabel:l.configured?h("configured"):h("notConfigured"),disabled:o,onEdit:r}),g?ce(k,g):k)}function G(){let t=typeof document<"u"?document.documentElement?.lang:"";return typeof t=="string"&&t.toLowerCase().startsWith("en")?"en":"zh"}var R=new Map,O=new Map;function Le(t){return`${Se}/${encodeURIComponent(t)}.md`}function Ne(t){let e=R.get(t);if(e!==void 0)return Promise.resolve(e);let i=O.get(t);return i===void 0&&(i=fetch(Le(t),{method:"GET",cache:"no-store",credentials:"same-origin"}).then(async n=>{if(!n.ok){let o=await n.json().catch(()=>({})),r=new Error(typeof o?.error=="string"?o.error:`http_${n.status}`);throw r.code=typeof o?.error=="string"?o.error:n.status===401||n.status===403?"unauthorized":"route_missing",r}let l=await n.text();return R.set(t,l),l}).finally(()=>O.delete(t)),O.set(t,i)),i}var Re=1600;function Ae({entry:t,state:e,disabled:i,onChange:n,t:l}){let o=G(),r=t.label[o],h=`https://github.com/${t.owner}/${t.repository}`,m=j(null),[g,y]=b(!1),[k,c]=b(!1),[u,w]=b(null);N(()=>()=>{m.current!==null&&clearTimeout(m.current)},[]);let z=async()=>{await ge(t.name)&&(y(!0),m.current!==null&&clearTimeout(m.current),m.current=setTimeout(()=>y(!1),Re))},x=()=>{if(!(u?.status==="ready"||u?.status==="loading")){if(R.has(t.name)){w({status:"ready",text:R.get(t.name)});return}w({status:"loading"}),Ne(t.name).then(d=>w({status:"ready",text:d}),d=>{globalThis.console?.warn?.(`capital-config: SKILL.md \u539F\u6587\u8BFB\u53D6\u5931\u8D25 ${t.name}: ${String(d?.code??d?.message??d)}`),w({status:"failed",code:d?.code==="route_missing"?"route_missing":"unreadable"})})}},A=u?.status==="ready"?a("pre",{className:"capital-config-skill-doc"},u.text):u?.status==="failed"?a("p",{className:"capital-config-skill-doc-state"},l(u.code==="route_missing"?"selectedSkillsDocStale":"selectedSkillsDocFailed")):a("p",{className:"capital-config-skill-doc-state"},l("selectedSkillsDocLoading"));return a("div",{className:"capital-config-field"},a("div",{className:"capital-config-switch-row"},a("div",{className:"capital-config-switch-text"},a("div",{className:"capital-config-skill-heading"},a("span",{className:"capital-config-title"},r),a("div",{className:"capital-config-skill-actions"},e?.on===!0?a("button",{type:"button",className:"capital-config-skill-action",title:`${l("selectedSkillsCopyName")}: ${t.name}`,"aria-label":`${l("selectedSkillsCopyName")}: ${t.name}`,onClick:z},l(g?"selectedSkillsCopied":"selectedSkillsCopyName")):null,a("button",{type:"button",className:"capital-config-skill-action","aria-label":`${l("selectedSkillsDetail")}: ${t.name}`,"aria-haspopup":"dialog",onPointerEnter:x,onFocus:x,onClick:()=>{x(),c(!0)}},l("selectedSkillsDetail")),a(me,{open:k,onClose:()=>c(!1),title:r,description:t.name,closeLabel:l("selectedSkillsDetailClose"),className:"capital-config-skill-modal",contentClassName:"capital-config-skill-modal-content"},A))),a("p",{className:"capital-config-skill-description"},t.description[o]),a("a",{className:"capital-config-skill-repo",href:h,target:"_blank",rel:"noopener noreferrer",title:l("selectedSkillsOpenRepo")},`${t.owner}/${t.repository}`,a(W,{size:12})),a("div",{className:"capital-config-skill-tags"},t.tags.map(d=>a("span",{key:d,className:"capital-config-skill-tag"},V[o][d]??d)))),a(q,{label:r,checked:e?.on===!0,disabled:i||e?.writing===!0,onChange:n})),e?.failed?a("p",{role:"status",className:"capital-config-write-failed"},l("saveFailed")):null)}function Ie(t){let e=t.t,i=t.useCapitalCard(s=>s),n=!i.writable,l=G(),[o,r]=b("sources"),[h,m]=b("all");N(()=>{t.ensureBundleRows()},[]);let g=()=>new Set(v.filter(s=>i.selectedSkills?.[s.key]?.on===!0).map(s=>s.key)),[y,k]=b(g);N(()=>{i.available&&k(g())},[i.available]);let c=new Map;for(let s of v)for(let p of s.tags)c.set(p,(c.get(p)??0)+1);c.set("all",v.length);let u=["all",...Array.from(c.keys()).filter(s=>s!=="all").sort((s,p)=>c.get(p)-c.get(s))],w=v.filter(s=>h==="all"||s.tags.includes(h)).sort((s,p)=>(y.has(s.key)?0:1)-(y.has(p.key)?0:1)),z=a(de,{labels:{unavailable:e("unavailable"),readOnly:e("readOnly"),saveFailed:e("saveFailed"),save:e("save"),saving:e("saving")},state:i,onSave:t.save,onDiscard:t.discard},a(L,{field:"fuyao",label:e("fuyaoLabel"),hint:e("fuyaoHint"),docsUrl:E.fuyao,state:i.fuyao,disabled:n||i.saving||!i.fuyao.writable,onEdit:s=>t.edit("fuyao",s),t:e}),a(L,{field:"anysearch",label:e("anysearchLabel"),hint:e("anysearchHint"),docsUrl:E.anysearch,state:i.anysearch,disabled:n||i.saving||!i.anysearch.writable,onEdit:s=>t.edit("anysearch",s),t:e}),a(L,{field:"wind",label:e("windLabel"),hint:e("windHint"),docsUrl:E.wind,state:i.wind,disabled:n||i.saving||!i.wind.writable,onEdit:s=>t.edit("wind",s),t:e}),a(L,{field:"paddleocr",label:e("paddleocrLabel"),hint:e("paddleocrHint"),docsUrl:E.paddleocr,state:i.paddleocr,disabled:n||i.saving||!i.paddleocr.writable,onEdit:s=>t.edit("paddleocr",s),t:e}));if(!i.available)return a("div",{className:"capital-config-card"},z);let x=a("div",{className:"capital-config-field"},a("div",{className:"capital-config-switch-row"},a("div",{className:"capital-config-switch-text"},a("span",{className:"capital-config-switch-label"},e("localFetchLabel")),a("p",{className:"capital-config-hint"},e("localFetchHint"))),a(q,{label:e("localFetchLabel"),checked:i.localFetch?.on!==!1,disabled:n||i.saving||i.localFetch?.writing===!0,onChange:t.toggleLocalFetch})),i.localFetch?.failed?a("p",{role:"status",className:"capital-config-write-failed"},e("saveFailed")):null),A=V[l],d=a("div",{className:"capital-config-selected-filter",role:"group","aria-label":e("selectedSkillsFilterLabel")},...u.map(s=>a("button",{key:s,type:"button",className:"capital-config-selected-filter-button","aria-pressed":h===s?"true":"false",onClick:()=>m(s)},A[s]??s,a("span",{className:"capital-config-selected-filter-count"},String(c.get(s)))))),Y=w.length>0?w.map(s=>a(Ae,{key:s.key,entry:s,state:i.selectedSkills?.[s.key],disabled:n||i.saving,onChange:p=>t.toggleSelectedSkill(s.key,p),t:e})):[a("p",{key:"empty",className:"capital-config-hint"},e("selectedSkillsEmpty"))],Q=v.filter(s=>i.selectedSkills?.[s.key]?.on===!0).length,X=(s,p)=>Number.isInteger(p)?`${s} ${p}`:s,J=[{value:"sources",label:i.dirty?e("titleUnsaved"):e("title")},{value:"skills",label:`${e("selectedSkillsTitle")} ${Q}/${v.length}`},{value:"components",label:X(e("componentsTitle"),i.components?.count)}],I=(s,p)=>a("section",{id:`${_}-${s}-panel`,role:"tabpanel","aria-labelledby":`${_}-${s}`,className:"capital-config-panel","data-capital-config-panel":s,hidden:o!==s},...p);return a("div",{className:"capital-config-card","data-capital-config-tab":o},a(he,{id:_,value:o,options:J,label:e("tabsLabel"),disabled:!1,onChange:s=>{r(s),s==="components"&&t.ensureBundleRows(),s==="skills"&&k(g())}}),I("sources",[z,x]),I("skills",[a("div",{className:"capital-config-selected-layout"},d,a("div",{className:"capital-config-selected-list"},...Y))]),I("components",[a("span",{className:"capital-config-sr-only"},e("componentsHint"))]))}var De={github:"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12",npm:"M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z"};function M({kind:t,href:e,label:i}){return a("a",{className:"capital-config-plugin-link",href:e,target:"_blank",rel:"noopener noreferrer","aria-label":i,title:i,"data-capital-plugin-link":t},a("svg",{viewBox:"0 0 24 24",width:16,height:16,fill:"currentColor","aria-hidden":"true",focusable:"false"},a("path",{d:De[t]})))}function Te({subject:t,t:e}){return t?.kind!=="bundle"||t.pkg?.name!==S?null:a("span",{className:"capital-config-plugin-links"},a(M,{kind:"github",href:fe,label:e("githubLabel")}),a(M,{kind:"npm",href:ye,label:e("npmLabel")}))}function Be(t){t.effect(Fe,"capital-config: styles"),t.effect(()=>t.locale.register(B,{zh:Ce,en:ze}),"capital-config: dictionaries");let e=new P(t.configForms.get(T),t);t.effect(()=>()=>e.dispose(),"capital-config: form subscription"),t.effect(()=>t.remote.$on("credentials/reference-updated",i=>e.refresh(i)),"capital-config: credential invalidations"),t.effect(()=>{let i=()=>e.invalidateBundleRows(),n=[t.remote.$on("plugin-manager/changed",i),t.on("connection/reset",i)];return()=>{for(let l of n)l()}},"capital-config: bundle row invalidations"),t.effect(()=>t.configForms.whileServed([T],()=>t.slots.inject("plugins.bundle.config",()=>t.slots.register({name:"plugins.bundle.config",key:S,locale:B,inject:()=>e.inject()},Ie))),"capital-config: page"),t.effect(()=>t.slots.inject(K,()=>t.slots.register({name:K,id:`${T}-plugin-links`,locale:B},Te)),"capital-config: plugin links"),t.logger?.info?.("capital-config: settings card + \u6807\u9898\u5916\u94FE mounted")}exports.name="capital-config";exports.inject=["slots","locale","remote","remote.credentials","remote.pluginManager","configForms"];exports.apply=Be;
|
|
87
|
+
`,document.head.appendChild(t),()=>t.remove()}var O=class{constructor(e,i){this.scope=e,this.ctx=i,this.status=xe(),this.localFetchWriting=!1,this.localFetchFailed=!1,this.selectedSkillWriting=new Set,this.selectedSkillFailed=new Set,this.bundleRows=null,this.rowsRequested=!1,this.rowsInFlight=!1,this.model=new he(e,[],f.map(n=>({field:n,write:o=>this.writeKey(n,o)}))),this.store=this.model.bind(()=>this.projection()),this.unsubscribe=e.subscribe(()=>{this.refreshRefs(),this.store.set(this.projection()),this.readCredentials()}),this.refreshRefs(),this.readCredentials()}dispose(){this.unsubscribe?.(),this.model.dispose()}projection(){let e=this.scope.getSnapshot();return{...this.model.shell(),...Object.fromEntries(f.map(i=>[i,{...this.model.field(i),configured:this.status[i].configured,writable:this.status[i].writable}])),localFetch:{on:e.value?.retriever?.localFetch?.enabled!==!1,writing:this.localFetchWriting,failed:this.localFetchFailed},selectedSkills:Object.fromEntries(K.map(i=>[i,{on:e.value?.selectedSkills?.[i]===!0,writing:this.selectedSkillWriting.has(i),failed:this.selectedSkillFailed.has(i)}])),components:{count:this.bundleRows}}}refreshRefs(){let e=this.scope.getSnapshot();for(let i of f){let n=Ee(e,i);this.status[i].ref!==n&&(this.status[i]={ref:n,configured:!1,writable:!0},this.model.edit(i,""))}}async readCredentials(){let e=f.map(i=>this.status[i].ref);try{let i=await this.ctx.remote.credentials.describe(e);if(!i?.ok||f.some((o,l)=>e[l]!==this.status[o].ref))return;let n=i.value??{};for(let o of f){let l=this.status[o],r=n[l.ref];r!==void 0&&(this.status[o]={ref:l.ref,configured:r.configured===!0,writable:r.writable!==!1})}this.store.set(this.projection())}catch{}}refresh(e){f.some(i=>e===this.status[i].ref)&&this.readCredentials()}async writeKey(e,i){try{return await this.ctx.remote.credentials.set(this.status[e].ref,i.trim()),await this.readCredentials(),this.status[e].configured===!0}catch{return!1}}async toggleLocalFetch(e){if(this.localFetchWriting)return;let i=this.scope.getSnapshot();if(i.status!=="ready"||!i.writable)return;this.localFetchWriting=!0,this.localFetchFailed=!1,this.store.set(this.projection());try{await this.scope.mutate([{op:"set",path:["retriever","localFetch","enabled"],value:e}])}catch{}this.localFetchWriting=!1,this.scope.getSnapshot().value?.retriever?.localFetch?.enabled===e||(this.localFetchFailed=!0),this.store.set(this.projection())}async toggleSelectedSkill(e,i){if(!K.includes(e)||this.selectedSkillWriting.has(e))return;let n=this.scope.getSnapshot();if(n.status!=="ready"||!n.writable)return;this.selectedSkillWriting.add(e),this.selectedSkillFailed.delete(e),this.store.set(this.projection());try{await this.scope.mutate([{op:"set",path:["selectedSkills",e],value:i}])}catch{}this.selectedSkillWriting.delete(e),this.scope.getSnapshot().value?.selectedSkills?.[e]===i||this.selectedSkillFailed.add(e),this.store.set(this.projection())}async ensureBundleRows(){this.rowsRequested=!0,this.bundleRows===null&&await this.readBundleRows()}invalidateBundleRows(){this.rowsRequested&&this.readBundleRows()}async readBundleRows(){if(this.rowsInFlight)return;this.rowsInFlight=!0;let e=this.bundleRows;try{let i=await this.ctx.remote.pluginManager.listBundles(),n=i?.ok===!0?(i.value??[]).find(o=>o?.name===S):void 0;Array.isArray(n?.rows)&&(e=n.rows.length)}catch{}this.rowsInFlight=!1,e!==this.bundleRows&&(this.bundleRows=e,this.store.set(this.projection()))}inject(){return{hooks:{capitalCard:this.store},...this.model.actions(),toggleLocalFetch:e=>this.toggleLocalFetch(e),toggleSelectedSkill:(e,i)=>this.toggleSelectedSkill(e,i),ensureBundleRows:()=>this.ensureBundleRows()}}};function N({field:t,label:e,hint:i,docsUrl:n,state:o,disabled:l,onEdit:r,t:u}){let m=$(null),[g,y]=b(null);R(()=>{let c=m.current,h=c?c.querySelector("label"):null;h&&h.parentElement&&y(h.parentElement)},[]);let k=a("a",{href:n,target:"_blank",rel:"noopener noreferrer","aria-label":`${e} ${u("openDocs")}`,"data-capital-config-doc":"true",className:"capital-config-doc-link"},u("openDocs"),a(W,{size:12}));return a("div",{className:"capital-config-secret-row",key:t,ref:m},a(pe,{id:`capital-config-${t}-key`,label:e,hint:i,text:o.text,configured:o.configured,stateLabel:o.configured?u("configured"):u("notConfigured"),disabled:l,onEdit:r}),g?ce(k,g):k)}function G(){let t=typeof document<"u"?document.documentElement?.lang:"";return typeof t=="string"&&t.toLowerCase().startsWith("en")?"en":"zh"}var L=new Map,P=new Map;function Ne(t){return`${Se}/${encodeURIComponent(t)}.md`}function Re(t){let e=L.get(t);if(e!==void 0)return Promise.resolve(e);let i=P.get(t);return i===void 0&&(i=fetch(Ne(t),{method:"GET",cache:"no-store",credentials:"same-origin"}).then(async n=>{if(!n.ok){let l=await n.json().catch(()=>({})),r=new Error(typeof l?.error=="string"?l.error:`http_${n.status}`);throw r.code=typeof l?.error=="string"?l.error:n.status===401||n.status===403?"unauthorized":"route_missing",r}let o=await n.text();return L.set(t,o),o}).finally(()=>P.delete(t)),P.set(t,i)),i}var Le=1600;function Ae({entry:t,state:e,disabled:i,onChange:n,t:o}){let l=G(),r=t.label[l],u=`https://github.com/${t.owner}/${t.repository}`,m=$(null),[g,y]=b(!1),[k,c]=b(!1),[h,w]=b(null);R(()=>()=>{m.current!==null&&clearTimeout(m.current)},[]);let z=async()=>{await ge(t.name)&&(y(!0),m.current!==null&&clearTimeout(m.current),m.current=setTimeout(()=>y(!1),Le))},x=()=>{if(!(h?.status==="ready"||h?.status==="loading")){if(L.has(t.name)){w({status:"ready",text:L.get(t.name)});return}w({status:"loading"}),Re(t.name).then(d=>w({status:"ready",text:d}),d=>{globalThis.console?.warn?.(`capital-config: SKILL.md \u539F\u6587\u8BFB\u53D6\u5931\u8D25 ${t.name}: ${String(d?.code??d?.message??d)}`),w({status:"failed",code:d?.code==="route_missing"?"route_missing":"unreadable"})})}},A=h?.status==="ready"?a("pre",{className:"capital-config-skill-doc"},h.text):h?.status==="failed"?a("p",{className:"capital-config-skill-doc-state"},o(h.code==="route_missing"?"selectedSkillsDocStale":"selectedSkillsDocFailed")):a("p",{className:"capital-config-skill-doc-state"},o("selectedSkillsDocLoading"));return a("div",{className:"capital-config-field"},a("div",{className:"capital-config-switch-row"},a("div",{className:"capital-config-switch-text"},a("div",{className:"capital-config-skill-heading"},a("span",{className:"capital-config-title"},r),a("div",{className:"capital-config-skill-actions"},e?.on===!0?a("button",{type:"button",className:"capital-config-skill-action",title:`${o("selectedSkillsCopyName")}: ${t.name}`,"aria-label":`${o("selectedSkillsCopyName")}: ${t.name}`,onClick:z},o(g?"selectedSkillsCopied":"selectedSkillsCopyName")):null,a("button",{type:"button",className:"capital-config-skill-action","aria-label":`${o("selectedSkillsDetail")}: ${t.name}`,"aria-haspopup":"dialog",onPointerEnter:x,onFocus:x,onClick:()=>{x(),c(!0)}},o("selectedSkillsDetail")),a(me,{open:k,onClose:()=>c(!1),title:r,description:t.name,closeLabel:o("selectedSkillsDetailClose"),className:"capital-config-skill-modal",contentClassName:"capital-config-skill-modal-content"},A))),a("p",{className:"capital-config-skill-description"},t.description[l]),a("a",{className:"capital-config-skill-repo",href:u,target:"_blank",rel:"noopener noreferrer",title:o("selectedSkillsOpenRepo")},`${t.owner}/${t.repository}`,a(W,{size:12})),a("div",{className:"capital-config-skill-tags"},t.tags.map(d=>a("span",{key:d,className:"capital-config-skill-tag"},V[l][d]??d)))),a(M,{label:r,checked:e?.on===!0,disabled:i||e?.writing===!0,onChange:n})),e?.failed?a("p",{role:"status",className:"capital-config-write-failed"},o("saveFailed")):null)}function Ie(t){let e=t.t,i=t.useCapitalCard(s=>s),n=!i.writable,o=G(),[l,r]=b("sources"),[u,m]=b("all");R(()=>{t.ensureBundleRows()},[]);let g=()=>new Set(v.filter(s=>i.selectedSkills?.[s.key]?.on===!0).map(s=>s.key)),[y,k]=b(g);R(()=>{i.available&&k(g())},[i.available]);let c=new Map;for(let s of v)for(let p of s.tags)c.set(p,(c.get(p)??0)+1);c.set("all",v.length);let h=["all",...Array.from(c.keys()).filter(s=>s!=="all").sort((s,p)=>c.get(p)-c.get(s))],w=v.filter(s=>u==="all"||s.tags.includes(u)).sort((s,p)=>(y.has(s.key)?0:1)-(y.has(p.key)?0:1)),z=a(de,{labels:{unavailable:e("unavailable"),readOnly:e("readOnly"),saveFailed:e("saveFailed"),save:e("save"),saving:e("saving")},state:i,onSave:t.save,onDiscard:t.discard},a(N,{field:"fuyao",label:e("fuyaoLabel"),hint:e("fuyaoHint"),docsUrl:E.fuyao,state:i.fuyao,disabled:n||i.saving||!i.fuyao.writable,onEdit:s=>t.edit("fuyao",s),t:e}),a(N,{field:"anysearch",label:e("anysearchLabel"),hint:e("anysearchHint"),docsUrl:E.anysearch,state:i.anysearch,disabled:n||i.saving||!i.anysearch.writable,onEdit:s=>t.edit("anysearch",s),t:e}),a(N,{field:"wind",label:e("windLabel"),hint:e("windHint"),docsUrl:E.wind,state:i.wind,disabled:n||i.saving||!i.wind.writable,onEdit:s=>t.edit("wind",s),t:e}),a(N,{field:"paddleocr",label:e("paddleocrLabel"),hint:e("paddleocrHint"),docsUrl:E.paddleocr,state:i.paddleocr,disabled:n||i.saving||!i.paddleocr.writable,onEdit:s=>t.edit("paddleocr",s),t:e}));if(!i.available)return a("div",{className:"capital-config-card"},z);let x=a("div",{className:"capital-config-field"},a("div",{className:"capital-config-switch-row"},a("div",{className:"capital-config-switch-text"},a("span",{className:"capital-config-switch-label"},e("localFetchLabel")),a("p",{className:"capital-config-hint"},e("localFetchHint"))),a(M,{label:e("localFetchLabel"),checked:i.localFetch?.on!==!1,disabled:n||i.saving||i.localFetch?.writing===!0,onChange:t.toggleLocalFetch})),i.localFetch?.failed?a("p",{role:"status",className:"capital-config-write-failed"},e("saveFailed")):null),A=V[o],d=a("div",{className:"capital-config-selected-filter",role:"group","aria-label":e("selectedSkillsFilterLabel")},...h.map(s=>a("button",{key:s,type:"button",className:"capital-config-selected-filter-button","aria-pressed":u===s?"true":"false",onClick:()=>m(s)},A[s]??s,a("span",{className:"capital-config-selected-filter-count"},String(c.get(s)))))),Y=w.length>0?w.map(s=>a(Ae,{key:s.key,entry:s,state:i.selectedSkills?.[s.key],disabled:n||i.saving,onChange:p=>t.toggleSelectedSkill(s.key,p),t:e})):[a("p",{key:"empty",className:"capital-config-hint"},e("selectedSkillsEmpty"))],Q=v.filter(s=>i.selectedSkills?.[s.key]?.on===!0).length,X=(s,p)=>Number.isInteger(p)?`${s} ${p}`:s,J=[{value:"sources",label:i.dirty?e("titleUnsaved"):e("title")},{value:"skills",label:`${e("selectedSkillsTitle")} ${Q}/${v.length}`},{value:"components",label:X(e("componentsTitle"),i.components?.count)}],I=(s,p)=>a("section",{id:`${_}-${s}-panel`,role:"tabpanel","aria-labelledby":`${_}-${s}`,className:"capital-config-panel","data-capital-config-panel":s,hidden:l!==s},...p);return a("div",{className:"capital-config-card","data-capital-config-tab":l},a(ue,{id:_,value:l,options:J,label:e("tabsLabel"),disabled:!1,onChange:s=>{r(s),s==="components"&&t.ensureBundleRows(),s==="skills"&&k(g())}}),I("sources",[z,x]),I("skills",[a("div",{className:"capital-config-selected-layout"},d,a("div",{className:"capital-config-selected-list"},...Y))]),I("components",[a("span",{className:"capital-config-sr-only"},e("componentsHint"))]))}var Te={github:"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12",npm:"M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z"};function q({kind:t,href:e,label:i}){return a("a",{className:"capital-config-plugin-link",href:e,target:"_blank",rel:"noopener noreferrer","aria-label":i,title:i,"data-capital-plugin-link":t},a("svg",{viewBox:"0 0 24 24",width:16,height:16,fill:"currentColor","aria-hidden":"true",focusable:"false"},a("path",{d:Te[t]})))}function De({subject:t,t:e}){return t?.kind!=="bundle"||t.pkg?.name!==S?null:a("span",{className:"capital-config-plugin-links"},a(q,{kind:"github",href:fe,label:e("githubLabel")}),a(q,{kind:"npm",href:ye,label:e("npmLabel")}))}function Be(t){t.effect(Fe,"capital-config: styles"),t.effect(()=>t.locale.register(B,{zh:Ce,en:ze}),"capital-config: dictionaries");let e=new O(t.configForms.get(D),t);t.effect(()=>()=>e.dispose(),"capital-config: form subscription"),t.effect(()=>t.remote.$on("credentials/reference-updated",i=>e.refresh(i)),"capital-config: credential invalidations"),t.effect(()=>{let i=()=>e.invalidateBundleRows(),n=[t.remote.$on("plugin-manager/changed",i),t.on("connection/reset",i)];return()=>{for(let o of n)o()}},"capital-config: bundle row invalidations"),t.effect(()=>t.configForms.whileServed([D],()=>t.slots.inject("plugins.bundle.config",()=>t.slots.register({name:"plugins.bundle.config",key:S,locale:B,inject:()=>e.inject()},Ie))),"capital-config: page"),t.effect(()=>t.slots.inject(H,()=>t.slots.register({name:H,id:`${D}-plugin-links`,locale:B},De)),"capital-config: plugin links"),t.logger?.info?.("capital-config: settings card + \u6807\u9898\u5916\u94FE mounted")}exports.name="capital-config";exports.inject=["slots","locale","remote","remote.credentials","remote.pluginManager","configForms"];exports.apply=Be;
|
|
88
88
|
return module.exports
|
|
89
89
|
},
|
|
90
90
|
})
|