@v587d/capital-generation 2.7.0 → 2.7.1
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 +44 -1
- package/LICENSE +1 -1
- package/README.md +7 -7
- package/THIRD_PARTY_NOTICES.md +12 -4
- package/capital-config/client.js +50 -10
- package/capital-config/client.src.cjs +376 -62
- package/capital-config/index.js +168 -5
- package/capital-config/package.json +1 -1
- package/capital-watchlist/package.json +1 -1
- package/chart-ui/package.json +1 -1
- package/lib/agents/selected-skills-provider.js +5 -5
- package/lib/index.d.ts +4 -28
- package/lib/index.js +8 -18
- 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/ADDING-NEW-SKILLS.md +546 -0
- package/selected-skills/InvestSkill/CHANGELOG.md +373 -0
- package/selected-skills/InvestSkill/CI-CD-GUIDE.md +432 -0
- package/selected-skills/InvestSkill/CLAUDE.md +148 -0
- package/selected-skills/InvestSkill/CONTRIBUTING.md +291 -0
- package/selected-skills/InvestSkill/DEPLOYMENTS.md +321 -0
- package/selected-skills/InvestSkill/FAQ.md +509 -0
- package/selected-skills/InvestSkill/GEMINI.md +419 -0
- package/selected-skills/InvestSkill/LICENSE +21 -0
- package/selected-skills/InvestSkill/PLATFORM-COMPATIBILITY.md +529 -0
- package/selected-skills/InvestSkill/README-claude-code.md +435 -0
- package/selected-skills/InvestSkill/README-cursor.md +475 -0
- package/selected-skills/InvestSkill/README-gemini.md +532 -0
- package/selected-skills/InvestSkill/README-ollama.md +106 -0
- package/selected-skills/InvestSkill/README-zh-TW.md +461 -0
- package/selected-skills/InvestSkill/README.md +311 -0
- package/selected-skills/InvestSkill/RELEASE-QUICK-REFERENCE.md +230 -0
- package/selected-skills/InvestSkill/RELEASE_NOTES.md +121 -0
- package/selected-skills/InvestSkill/SECURITY.md +232 -0
- package/selected-skills/InvestSkill/TODO.md +28 -0
- package/selected-skills/InvestSkill/UPSTREAM.md +62 -0
- package/selected-skills/InvestSkill/install.sh +212 -0
- package/selected-skills/InvestSkill/package.json +64 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/README.md +119 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/10k-digest/SKILL.md +338 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/bear-case/SKILL.md +233 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/catalyst-calendar/SKILL.md +327 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/chart-master/SKILL.md +648 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/competitor-analysis/SKILL.md +478 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/dcf-valuation/SKILL.md +109 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/dividend-analysis/SKILL.md +684 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-call-analysis/SKILL.md +456 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-preview/SKILL.md +277 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/economics-analysis/SKILL.md +349 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/etf-analysis/SKILL.md +279 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/fact-check/SKILL.md +288 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/financial-report-analyst/SKILL.md +544 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/full-report/SKILL.md +301 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/fundamental-analysis/SKILL.md +67 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/industry-map/SKILL.md +336 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/insider-trading/SKILL.md +502 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/institutional-ownership/SKILL.md +548 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/learning-coach/SKILL.md +311 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/options-analysis/SKILL.md +495 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/portfolio-review/SKILL.md +465 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/position-ladder/SKILL.md +429 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/report-generator/SKILL.md +857 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/research-bundle/SKILL.md +94 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/result-validator/SKILL.md +174 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/risk-stress-test/SKILL.md +293 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/sector-analysis/SKILL.md +426 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/short-interest/SKILL.md +397 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-eval/SKILL.md +645 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-screener/SKILL.md +244 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-valuation/SKILL.md +640 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/tax-lens/SKILL.md +351 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/technical-analysis/SKILL.md +654 -0
- package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/thesis-tracker/SKILL.md +317 -0
- package/selected-skills/README.md +15 -5
- package/selected-skills/catalog.js +566 -14
- package/selected-skills/investment-skills/UPSTREAM.md +1 -1
- package/selected-skills/investment-skills/skills/buffett-investment-framework/SKILL.md +1 -1
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
InvestSkill takes security seriously. This document outlines our security practices and how to report vulnerabilities responsibly.
|
|
4
|
+
|
|
5
|
+
## Security Practices
|
|
6
|
+
|
|
7
|
+
### What We Protect
|
|
8
|
+
|
|
9
|
+
- **User data**: None collected. InvestSkill runs locally/client-side only.
|
|
10
|
+
- **Code**: Open source, regularly reviewed, well-tested
|
|
11
|
+
- **Dependencies**: Minimal (Node.js standard library only)
|
|
12
|
+
- **Secrets**: No API keys stored in repository
|
|
13
|
+
|
|
14
|
+
### What to Know
|
|
15
|
+
|
|
16
|
+
> ⚠️ **Important**: InvestSkill provides analysis frameworks, not trading signals. Use analysis independently and consult financial advisors before trading.
|
|
17
|
+
|
|
18
|
+
### No Data Collection
|
|
19
|
+
|
|
20
|
+
InvestSkill:
|
|
21
|
+
- ✅ Runs completely locally (all processing client-side)
|
|
22
|
+
- ✅ Stores nothing on remote servers
|
|
23
|
+
- ✅ Does not track users
|
|
24
|
+
- ✅ Does not send data externally
|
|
25
|
+
- ✅ Works offline (except Claude Code API calls)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Reporting a Vulnerability
|
|
30
|
+
|
|
31
|
+
### Security Issues
|
|
32
|
+
|
|
33
|
+
If you discover a security vulnerability, **do NOT open a public issue**.
|
|
34
|
+
|
|
35
|
+
**Instead, email**: security@example.com (or contact repo maintainer privately)
|
|
36
|
+
|
|
37
|
+
Include:
|
|
38
|
+
- Vulnerability type (e.g., injection, credential exposure)
|
|
39
|
+
- Location in code (file, line number)
|
|
40
|
+
- Steps to reproduce
|
|
41
|
+
- Potential impact
|
|
42
|
+
- Suggested fix (if available)
|
|
43
|
+
|
|
44
|
+
**Response timeline**: We aim to respond within 48 hours.
|
|
45
|
+
|
|
46
|
+
### Privacy Issues
|
|
47
|
+
|
|
48
|
+
If you have privacy concerns about how InvestSkill processes data:
|
|
49
|
+
1. Review [Privacy](#privacy) section
|
|
50
|
+
2. Check [Data practices](#what-we-protect)
|
|
51
|
+
3. Contact maintainer if concerned
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Code Security
|
|
56
|
+
|
|
57
|
+
### Dependency Policy
|
|
58
|
+
|
|
59
|
+
- **Minimal dependencies**: We use only Node.js built-ins
|
|
60
|
+
- **No npm packages**: Reduces attack surface
|
|
61
|
+
- **Version pinning**: All versions locked to specific releases
|
|
62
|
+
- **Regular audits**: Code reviewed before each release
|
|
63
|
+
|
|
64
|
+
### Code Review
|
|
65
|
+
|
|
66
|
+
All commits:
|
|
67
|
+
- Reviewed before merge
|
|
68
|
+
- Tested with full test suite
|
|
69
|
+
- Validated across all platforms
|
|
70
|
+
- Follow security best practices
|
|
71
|
+
|
|
72
|
+
### Input Validation
|
|
73
|
+
|
|
74
|
+
InvestSkill:
|
|
75
|
+
- Doesn't accept or validate user credentials
|
|
76
|
+
- Doesn't process payment information
|
|
77
|
+
- Validates file formats (JSON, markdown)
|
|
78
|
+
- Escapes output to prevent injection
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Supported Versions
|
|
83
|
+
|
|
84
|
+
| Version | Status | Support |
|
|
85
|
+
|---------|--------|---------|
|
|
86
|
+
| 1.4.0 | ✅ Current | Full support |
|
|
87
|
+
| 1.3.0 | ⚠️ Legacy | Critical fixes only |
|
|
88
|
+
| 1.2.0 & earlier | ❌ Unsupported | No support |
|
|
89
|
+
|
|
90
|
+
**Note**: Update to latest version for security patches and improvements.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Security Checklist for Users
|
|
95
|
+
|
|
96
|
+
Before using InvestSkill:
|
|
97
|
+
|
|
98
|
+
- [ ] Running latest version (v1.4.0+)
|
|
99
|
+
- [ ] Using trusted Claude Code/Cursor/platform version
|
|
100
|
+
- [ ] No credentials or API keys stored in repository
|
|
101
|
+
- [ ] Not sharing analysis with untrusted parties
|
|
102
|
+
- [ ] Understand: Framework = Analysis tool, not trading advice
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Compliance & Standards
|
|
107
|
+
|
|
108
|
+
### What We Follow
|
|
109
|
+
|
|
110
|
+
- ✅ MIT License (open source, permissive)
|
|
111
|
+
- ✅ OWASP Top 10 (security standards)
|
|
112
|
+
- ✅ No GDPR concerns (no user data)
|
|
113
|
+
- ✅ No HIPAA (not medical/healthcare)
|
|
114
|
+
- ✅ No PCI-DSS (no payment processing)
|
|
115
|
+
|
|
116
|
+
### What We Don't Do
|
|
117
|
+
|
|
118
|
+
- ❌ Store personally identifiable information (PII)
|
|
119
|
+
- ❌ Process payment information
|
|
120
|
+
- ❌ Track user behavior
|
|
121
|
+
- ❌ Require authentication
|
|
122
|
+
- ❌ Connect to external APIs without user knowledge
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Incident Response
|
|
127
|
+
|
|
128
|
+
If a security issue is discovered:
|
|
129
|
+
|
|
130
|
+
1. **Report privately** (don't disclose publicly)
|
|
131
|
+
2. **Assessment** (we evaluate severity)
|
|
132
|
+
3. **Fix** (we develop and test a patch)
|
|
133
|
+
4. **Release** (security patch published)
|
|
134
|
+
5. **Announce** (security advisory posted)
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Responsible Disclosure
|
|
139
|
+
|
|
140
|
+
We appreciate researchers and security professionals who discover issues.
|
|
141
|
+
|
|
142
|
+
**Responsible disclosure means:**
|
|
143
|
+
- ✅ Report privately first
|
|
144
|
+
- ✅ Give us time to patch (typically 90 days)
|
|
145
|
+
- ✅ Not sharing vulnerability publicly before patch
|
|
146
|
+
- ✅ Not accessing systems/data you're not authorized to access
|
|
147
|
+
|
|
148
|
+
**What NOT to do:**
|
|
149
|
+
- ❌ Public disclosure before patch available
|
|
150
|
+
- ❌ Unauthorized access or testing
|
|
151
|
+
- ❌ Data extraction or exfiltration
|
|
152
|
+
- ❌ Ransom or extortion
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## FAQ
|
|
157
|
+
|
|
158
|
+
### Is my data safe?
|
|
159
|
+
|
|
160
|
+
**Yes.** InvestSkill:
|
|
161
|
+
- Doesn't store any user data
|
|
162
|
+
- Doesn't send data to external servers
|
|
163
|
+
- Runs completely locally
|
|
164
|
+
- Doesn't track usage
|
|
165
|
+
|
|
166
|
+
### Do you sell my data?
|
|
167
|
+
|
|
168
|
+
**No.** We don't collect data. There's nothing to sell.
|
|
169
|
+
|
|
170
|
+
### Is the code trustworthy?
|
|
171
|
+
|
|
172
|
+
**Open source** means the code is publicly auditable:
|
|
173
|
+
- Anyone can review the code
|
|
174
|
+
- Vulnerabilities are visible
|
|
175
|
+
- Community can report issues
|
|
176
|
+
- All changes tracked in git history
|
|
177
|
+
|
|
178
|
+
### What platforms are safe to use?
|
|
179
|
+
|
|
180
|
+
All InvestSkill platforms are equally safe:
|
|
181
|
+
- Claude Code (official plugin)
|
|
182
|
+
- Cursor IDE (uses local rules)
|
|
183
|
+
- Gemini CLI (local prompts)
|
|
184
|
+
- GitHub Copilot (VS Code, JetBrains)
|
|
185
|
+
- Universal (copy-paste into any LLM)
|
|
186
|
+
|
|
187
|
+
### What if I find a vulnerability?
|
|
188
|
+
|
|
189
|
+
1. Email maintainer privately (don't post publicly)
|
|
190
|
+
2. Include: type, location, steps to reproduce
|
|
191
|
+
3. Wait for patch before public disclosure
|
|
192
|
+
4. We'll issue security advisory and credit you
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Security Contact
|
|
197
|
+
|
|
198
|
+
**Email**: yennanliu (at) gmail (dot) com or open private security discussion
|
|
199
|
+
|
|
200
|
+
**Response time**: Within 48 hours
|
|
201
|
+
|
|
202
|
+
**Please do NOT**:
|
|
203
|
+
- Open public GitHub issues for vulnerabilities
|
|
204
|
+
- Tweet/post vulnerability details publicly
|
|
205
|
+
- Attempt unauthorized access
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Resources
|
|
210
|
+
|
|
211
|
+
- [OWASP Top 10](https://owasp.org/www-project-top-ten/) — Security standards
|
|
212
|
+
- [Responsible Disclosure](https://en.wikipedia.org/wiki/Responsible_disclosure) — Best practices
|
|
213
|
+
- [GitHub Security](https://github.blog/2021-12-01-how-github-keeps-your-data-safe/) — Platform security
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Changelog
|
|
218
|
+
|
|
219
|
+
### Security Updates
|
|
220
|
+
|
|
221
|
+
- **v1.4.0** (2026-02-27): Initial security policy
|
|
222
|
+
- Future updates tracked here
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
<div align="center">
|
|
227
|
+
|
|
228
|
+
### Security is Everyone's Responsibility
|
|
229
|
+
|
|
230
|
+
Thank you for helping keep InvestSkill safe! 🔒
|
|
231
|
+
|
|
232
|
+
</div>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# TODO — InvestSkill
|
|
2
|
+
|
|
3
|
+
The curated top five. Everything else — with rationale, effort estimates, and release mapping — lives in the bilingual roadmap: [doc/IMPROVEMENT-ROADMAP.md](doc/IMPROVEMENT-ROADMAP.md) · [繁體中文](doc/IMPROVEMENT-ROADMAP-zh-TW.md). Progress against the roadmap's ten headline items is tracked in its §0 table.
|
|
4
|
+
|
|
5
|
+
The previous long-form backlog (last updated 2026-02-24) is archived at [doc/archive/TODO-2026-02.md](doc/archive/TODO-2026-02.md).
|
|
6
|
+
|
|
7
|
+
## Top 5
|
|
8
|
+
|
|
9
|
+
1. **`full-report --depth comprehensive` runs every framework** — add the frameworks missing since v1.8 (`bear-case` above all) plus the new Tier 1 skills where they fit, swap the alias modules for their targets, add `--skip <skill>`. → roadmap §4.3
|
|
10
|
+
2. **`--lang zh-TW` on every skill + a machine-readable JSON footer** — the remaining two items of the skill contract (§4.1); the footer is what lets `eval-skills.js` and `result-validator` parse results without regex on box-drawing characters.
|
|
11
|
+
3. **Learning lessons: Macro & the Fed Cycle, Options for Stock Investors** — the two §5.1 lessons still open (Lesson 5 has the material); plus self-check quizzes for Lessons 1–8 and the printable cheat sheet (§5.4). → roadmap §5.1, §5.4
|
|
12
|
+
4. **Non-US Investor Guide page** — Lesson 11's non-US section is the core; the page adds brokers, FX, and account opening (§5.4). Glossary: the ~16 filing / technical terms still missing (§5.3).
|
|
13
|
+
5. **Tier 2 skills as demand shows** — `forensic-accounting`, `proxy-governance`, `trade-postmortem` (closed `thesis-tracker` files are its input), `investment-policy`. → roadmap §3.2
|
|
14
|
+
|
|
15
|
+
## Recently shipped from the roadmap
|
|
16
|
+
|
|
17
|
+
- Stale counts fixed and historical docs archived (§7)
|
|
18
|
+
- Skill contract enforced on every analysis skill — `Data & Sources` header, Data Verification gate, Thesis Invalidation — with `scripts/check-skill-contract.js` in `npm test` (§4.1, §6.3)
|
|
19
|
+
- The three redirect skills reclassified as aliases; honest count of 24 frameworks (§4.2)
|
|
20
|
+
- `thesis-tracker` (§3.1)
|
|
21
|
+
- The rest of Tier 1 — `etf-analysis`, `earnings-preview`, `tax-lens` (with `--non-us`), `risk-stress-test`, `learning-coach` (§3.1)
|
|
22
|
+
- Learning track Part II — Lessons 9–13 (Before Your First Trade · ETFs · Taxes & Accounts incl. non-US · Earnings Season · Psychology & Process), the "When the Answer Is No" case study, self-check quizzes, glossary 44 → 76 (§5.1–5.3; see `doc/LEARNING-GAP-REVIEW.md`)
|
|
23
|
+
- `fact-check` — claim-level verification against primary sources, recomputation, corrected report with inline citations and References; Verification Score feeds `result-validator` Data Quality (not on the roadmap; added on request)
|
|
24
|
+
- `scripts/sync-prompts.js`, `scripts/new-skill.js`, `scripts/eval-skills.js`, `scripts/lib/signal-block.js` (§6.1, §6.2, §6.4, §6.11)
|
|
25
|
+
|
|
26
|
+
## Deliberately not planned
|
|
27
|
+
|
|
28
|
+
Live-data / broker APIs, crypto and forex, ML price prediction, and changes to the signal block — see roadmap §9 for why.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Upstream Record
|
|
2
|
+
|
|
3
|
+
- Project: InvestSkill(上游以 Claude Code plugin `us-stock-analysis` 的形式发布)
|
|
4
|
+
- Repository: https://github.com/yennanliu/InvestSkill
|
|
5
|
+
- Upstream commit: `c3f2a17cd2b6ac9731beb3b5739592446ad6f556`(main,2026-10-09)
|
|
6
|
+
- 这颗 HEAD 是上游机器人的 daily site review 提交;最后一次**内容**提交是
|
|
7
|
+
`113527fc7e44a723513dc2840becca7ab6eba823`(2026-09-25,PR #32 prompt-audit),同日打 `v1.12.0`。
|
|
8
|
+
catalog 的 `lastCommit` 记的是后者。
|
|
9
|
+
- License: MIT;`LICENSE` 为上游原件(`Copyright (c) 2026 yennanliu`),未改写。
|
|
10
|
+
- Imported content: 该 commit 的完整仓库快照,只移除上游自己的 `.gitignore`(见下)。
|
|
11
|
+
34 颗 skill 在 `plugins/us-stock-analysis/skills/<name>/SKILL.md`;`scripts/`、`prompts/`、
|
|
12
|
+
`site/`、`qa/`、`doc/`、`data/`、`.github/` 作为可审查材料保留,intake 与 activation 都不执行它们。
|
|
13
|
+
- Local modifications(三类,逐条可复核;口径与理由见 `docs/dev/selected-skills.md` §8.6 的接入必查清单):
|
|
14
|
+
1. **34 颗 `SKILL.md` 的 frontmatter 第一键补 `name: <目录名>`。** DSH filesystem provider 要求
|
|
15
|
+
frontmatter 同时有 `name` 与 `description`,缺 `name` 的文件是**静默跳过**(只 warn)——原样收录
|
|
16
|
+
时 34 颗一颗都不会被发现。上游依赖 Claude Code 从目录名推导,所以它自己不需要这一行。
|
|
17
|
+
2. **删除上游的 `.gitignore`。** 它在宿主仓库里会静默挡掉 `site/build/`:上游用 `build/` 这条目录
|
|
18
|
+
规则配上 `!site/build/*.js` 的反向白名单,而 git 在被排除的父目录之下无法再 include——留着一个
|
|
19
|
+
不完整、且与所钉 commit 不一致的快照,比少三个文件更糟。vendored 快照不把 ignore 规则带进宿主仓库。
|
|
20
|
+
3. **28 颗 catalog skill 的取数口径改写**(168 行删 / 161 行增,全部落在下面五类句子上;
|
|
21
|
+
不进 catalog 的 6 颗原文未动)。上游正文写给"什么工具都在手边"的宿主,与本插件的取数边界冲突:
|
|
22
|
+
- `1. **Fetch …** — use web search or ask the user for …` → 改为"走宿主自己的取数通道;
|
|
23
|
+
角色分流的宿主里把标的、字段、as-of 日期写进委派 brief 交出去"(24 处,含 economics / etf /
|
|
24
|
+
sector / risk-stress 的变体与 fact-check 的"只在主张需要时才取现价")。
|
|
25
|
+
- `4. **Flag stale data explicitly** … display this warning before proceeding` 与
|
|
26
|
+
`> ⚠️ **Live data unavailable.** … training-data estimates …` → 改成 `**Stop on missing data**`:
|
|
27
|
+
点名缺哪些字段、该字段下的分析停止,不回填(23 + 25 处)。
|
|
28
|
+
- 收尾句 `Never silently substitute training-data estimates … ask the user to paste …` → 改成
|
|
29
|
+
"取数是宿主数据通道的职责(委派);只有宿主完全没有检索路径时才谈用户粘贴"(24 处)。
|
|
30
|
+
- 出处块 `Retrieval: <pasted by user | web/tool retrieval | model memory>` → 去掉 `model memory`
|
|
31
|
+
这一档、加 `delegated retrieval`(27 处);配套那条"`model memory` 配 `Confidence: LOW`"改成
|
|
32
|
+
"记忆不是取数途径:没取到的数字报缺,不写进这一栏"(27 处)。`result-validator` 的评分口径同步改,
|
|
33
|
+
`learning-coach` 检测的"没有检索路径"随之改名。
|
|
34
|
+
- 无密钥 EDGAR 取数阶梯(`10k-digest` / `financial-report-analyst` / `fact-check`):A 档从
|
|
35
|
+
"宿主能抓就自己抓"改成"走宿主检索通道=委派";B 档只在"宿主完全没有检索路径"时谈用户粘贴;
|
|
36
|
+
C 档从"设成 model memory + LOW 继续"改成"缺的就缺着"。**删掉两处 `node scripts/fetch-*.js`
|
|
37
|
+
指令**——`scripts/` 不进发布包,根角色也没有 shell(AGENTS.md §1.6)。
|
|
38
|
+
分析结论、方法论、评分表、输出模板与其余正文**一字未改**。
|
|
39
|
+
复核方法:`git clone` 所钉 commit 后 `diff -r`,差异只应包含以上三类;
|
|
40
|
+
`test/selected-skills-content.test.mjs` 扫正文**结果**、本文件记**理由**,两边任一漂回去都会红。
|
|
41
|
+
- Catalog scope: 28 颗进入 `selected-skills/catalog.js`,六颗留在快照里但不进可选清单:
|
|
42
|
+
- `fundamental-analysis`、`dcf-valuation`、`research-bundle`:上游自己标注的 alias 残片
|
|
43
|
+
(`scripts/lib/skill-registry.js` 的 `ALIAS_SKILLS`),正文已声明分别并入 `stock-eval` /
|
|
44
|
+
`stock-valuation` / `full-report`,勾到它们只会拿到一份速查表而不是在维护的完整模块。
|
|
45
|
+
- `full-report`:上游编排 skill(跑多个模块再合成总分),与 `china-stock-research-orchestrator`
|
|
46
|
+
被排除是同一条理由——本插件的角色路由是单点决策。
|
|
47
|
+
- `report-generator`:上游的输出口(把别的 skill 结果渲染成 HTML/PDF 存进 `output/`),与已删除并
|
|
48
|
+
禁止恢复的报告交付链路冲突(`AGENTS.md` §7)。
|
|
49
|
+
- `chart-master`:教 Agent 自己产出 HTML/Chart.js 与 Mermaid 图形,出图一律走 `render_chart`
|
|
50
|
+
且只有 `visualization_specialist` 持有(`AGENTS.md` §6.1)。
|
|
51
|
+
- Maintenance snapshot(checked 2026-10-10):251 次提交;近 90 天 47 次非机器人提交、近 180 天 111 次;
|
|
52
|
+
最新 release `v1.12.0`(2026-09-25)。维护活跃,因此标 `experimental`。
|
|
53
|
+
See [GitHub commit history](https://github.com/yennanliu/InvestSkill/commits/main/).
|
|
54
|
+
- Runtime status: `experimental` / 显式实验。默认全关,只在使用者于「插件」→ Capital Generation →「配置」
|
|
55
|
+
逐格打开后,对**之后新建**的 Capital 根 Agent 可见;子 Agent 不继承。
|
|
56
|
+
- Financial boundary: 正文口径天生是美股(SEC EDGAR / Form 4 / 13F、FRED、美国税制),并且多模块给出
|
|
57
|
+
0–10 打分与分批仓位的写法。本插件不提供投资建议:每条 catalog 的 `riskNote` 写明打分是自洽度信号、
|
|
58
|
+
股数区间是推演练习,不是订单,也不承诺表现。
|
|
59
|
+
- Data-fetch assumption: 每颗 skill 开篇都要求 Agent 先用网页搜索取实时报价。**这不授予新权限**——
|
|
60
|
+
取数仍受本插件的角色与工具边界约束(主 Agent 委派、原始 rows 不出工具层),skill 正文只是方法论材料。
|
|
61
|
+
- Review status: 收录供使用者自行实验,不构成对任何金融方法的背书。复核前先读上面的 Catalog scope,
|
|
62
|
+
确认排除项没有被人顺手加回。
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# InvestSkill installer — wires the InvestSkill analysis frameworks into your AI coding agent.
|
|
4
|
+
#
|
|
5
|
+
# curl -fsSL https://raw.githubusercontent.com/yennanliu/InvestSkill/main/install.sh | bash -s -- -a claude
|
|
6
|
+
#
|
|
7
|
+
# There is no runtime and nothing is compiled: the script copies markdown prompts
|
|
8
|
+
# into your project and adds a small pointer block to your agent's config file.
|
|
9
|
+
#
|
|
10
|
+
set -euo pipefail
|
|
11
|
+
|
|
12
|
+
REPO="yennanliu/InvestSkill"
|
|
13
|
+
REF="main"
|
|
14
|
+
AGENT="claude"
|
|
15
|
+
DIR="$PWD"
|
|
16
|
+
GLOBAL=0
|
|
17
|
+
|
|
18
|
+
MARK_BEGIN="<!-- InvestSkill:begin -->"
|
|
19
|
+
MARK_END="<!-- InvestSkill:end -->"
|
|
20
|
+
|
|
21
|
+
AGENTS="claude cursor copilot gemini codex opencode any"
|
|
22
|
+
|
|
23
|
+
# ── output helpers ───────────────────────────────────────────────────────────
|
|
24
|
+
if [ -t 1 ]; then
|
|
25
|
+
B=$'\033[1m'; DIM=$'\033[2m'; GRN=$'\033[32m'; RED=$'\033[31m'; RST=$'\033[0m'
|
|
26
|
+
else
|
|
27
|
+
B=''; DIM=''; GRN=''; RED=''; RST=''
|
|
28
|
+
fi
|
|
29
|
+
say() { printf '%s\n' "$*"; }
|
|
30
|
+
ok() { printf '%s✓%s %s\n' "$GRN" "$RST" "$*"; }
|
|
31
|
+
info() { printf '%s·%s %s\n' "$DIM" "$RST" "$*"; }
|
|
32
|
+
die() { printf '%s✗%s %s\n' "$RED" "$RST" "$*" >&2; exit 1; }
|
|
33
|
+
|
|
34
|
+
usage() {
|
|
35
|
+
cat <<EOF
|
|
36
|
+
${B}InvestSkill installer${RST}
|
|
37
|
+
|
|
38
|
+
curl -fsSL https://raw.githubusercontent.com/$REPO/main/install.sh | bash -s -- -a AGENT
|
|
39
|
+
|
|
40
|
+
${B}Options${RST}
|
|
41
|
+
-a AGENT Target agent: $AGENTS (default: claude)
|
|
42
|
+
-d DIR Install into DIR (default: current directory)
|
|
43
|
+
-g Install for the user, not one project (\$HOME instead of DIR)
|
|
44
|
+
-r REF Branch or tag to install from (default: main)
|
|
45
|
+
-l List supported agents and where each one is wired
|
|
46
|
+
-h Show this help
|
|
47
|
+
|
|
48
|
+
${B}What it installs${RST}
|
|
49
|
+
.investskill/prompts/*.md every framework (and alias), as plain markdown
|
|
50
|
+
plus one agent-native entry point (a skill, a rule, or an instructions block)
|
|
51
|
+
EOF
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
list_agents() {
|
|
55
|
+
cat <<EOF
|
|
56
|
+
${B}Agent Installs to${RST}
|
|
57
|
+
claude .claude/skills/<skill>/SKILL.md (slash commands)
|
|
58
|
+
cursor .cursor/rules/investskill.mdc
|
|
59
|
+
copilot .github/copilot-instructions.md
|
|
60
|
+
gemini GEMINI.md
|
|
61
|
+
codex AGENTS.md
|
|
62
|
+
opencode AGENTS.md
|
|
63
|
+
any .investskill/prompts/ only (paste into any LLM)
|
|
64
|
+
EOF
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
while getopts ":a:d:r:glh" opt; do
|
|
68
|
+
case "$opt" in
|
|
69
|
+
a) AGENT="$OPTARG" ;;
|
|
70
|
+
d) DIR="$OPTARG" ;;
|
|
71
|
+
r) REF="$OPTARG" ;;
|
|
72
|
+
g) GLOBAL=1 ;;
|
|
73
|
+
l) list_agents; exit 0 ;;
|
|
74
|
+
h) usage; exit 0 ;;
|
|
75
|
+
:) die "Option -$OPTARG needs a value. Try -h." ;;
|
|
76
|
+
\?) die "Unknown option -$OPTARG. Try -h." ;;
|
|
77
|
+
esac
|
|
78
|
+
done
|
|
79
|
+
|
|
80
|
+
AGENT=$(printf '%s' "$AGENT" | tr '[:upper:]' '[:lower:]')
|
|
81
|
+
case " $AGENTS " in
|
|
82
|
+
*" $AGENT "*) ;;
|
|
83
|
+
*) die "Unsupported agent '$AGENT'. Supported: $AGENTS" ;;
|
|
84
|
+
esac
|
|
85
|
+
|
|
86
|
+
[ "$GLOBAL" -eq 1 ] && DIR="$HOME"
|
|
87
|
+
command -v curl >/dev/null 2>&1 || die "curl is required."
|
|
88
|
+
command -v tar >/dev/null 2>&1 || die "tar is required."
|
|
89
|
+
mkdir -p "$DIR" || die "Cannot write to $DIR"
|
|
90
|
+
|
|
91
|
+
# ── fetch ────────────────────────────────────────────────────────────────────
|
|
92
|
+
TMP=$(mktemp -d)
|
|
93
|
+
trap 'rm -rf "$TMP"' EXIT
|
|
94
|
+
|
|
95
|
+
say ""
|
|
96
|
+
say "${B}InvestSkill${RST} → $AGENT ${DIM}($DIR)${RST}"
|
|
97
|
+
info "Downloading ${REPO}@${REF} …"
|
|
98
|
+
curl -fsSL "https://codeload.github.com/$REPO/tar.gz/$REF" \
|
|
99
|
+
| tar -xzf - -C "$TMP" --strip-components=1 \
|
|
100
|
+
|| die "Download failed. Check the network, or the -r ref '$REF'."
|
|
101
|
+
[ -d "$TMP/prompts" ] || die "Archive has no prompts/ directory — wrong ref?"
|
|
102
|
+
|
|
103
|
+
# ── always: the frameworks themselves ────────────────────────────────────────
|
|
104
|
+
PROMPTS_REL=".investskill/prompts"
|
|
105
|
+
mkdir -p "$DIR/$PROMPTS_REL"
|
|
106
|
+
cp "$TMP/prompts/"*.md "$DIR/$PROMPTS_REL/"
|
|
107
|
+
# report-generator is an output tool and fundamental-analysis / dcf-valuation /
|
|
108
|
+
# research-bundle are alias stubs that redirect to the skill that absorbed them
|
|
109
|
+
# — all are installed, none is counted as an analysis framework. Keep this list
|
|
110
|
+
# in sync with ALIAS_SKILLS in scripts/lib/skill-registry.js (tests check it).
|
|
111
|
+
COUNT=0
|
|
112
|
+
ALIASES=0
|
|
113
|
+
for f in "$DIR/$PROMPTS_REL"/*.md; do
|
|
114
|
+
# Bash leaves an unmatched glob literal — skip it rather than counting it.
|
|
115
|
+
[ -e "$f" ] || continue
|
|
116
|
+
case "$(basename "$f" .md)" in
|
|
117
|
+
report-generator) ;;
|
|
118
|
+
fundamental-analysis|dcf-valuation|research-bundle) ALIASES=$((ALIASES + 1)) ;;
|
|
119
|
+
*) COUNT=$((COUNT + 1)) ;;
|
|
120
|
+
esac
|
|
121
|
+
done
|
|
122
|
+
ok "$COUNT analysis frameworks (+ $ALIASES aliases + report-generator) → $PROMPTS_REL/"
|
|
123
|
+
|
|
124
|
+
skill_names() { ls -1 "$TMP/prompts" | sed 's/\.md$//' | sort; }
|
|
125
|
+
|
|
126
|
+
# A compact, agent-native pointer block. Kept short on purpose: the detail
|
|
127
|
+
# lives in the prompt files, which the agent reads on demand.
|
|
128
|
+
pointer_block() {
|
|
129
|
+
say "$MARK_BEGIN"
|
|
130
|
+
say "## InvestSkill — investment analysis frameworks"
|
|
131
|
+
say ""
|
|
132
|
+
say "This project includes $COUNT structured US-stock analysis frameworks in \`$PROMPTS_REL/\`."
|
|
133
|
+
say "When the user asks for investment analysis, read the matching framework file and"
|
|
134
|
+
say "follow it exactly — its output contract, tables, and Investment Signal Block."
|
|
135
|
+
say ""
|
|
136
|
+
say "Available frameworks:"
|
|
137
|
+
skill_names | sed 's|^|- `'"$PROMPTS_REL"'/|; s|$|.md`|'
|
|
138
|
+
say ""
|
|
139
|
+
say "Example: *\"Evaluate AAPL\"* → read \`$PROMPTS_REL/stock-eval.md\` and apply it to AAPL."
|
|
140
|
+
say "Educational frameworks only — not financial advice."
|
|
141
|
+
say "$MARK_END"
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
# Append the block once; re-running replaces nothing and duplicates nothing.
|
|
145
|
+
wire_into() {
|
|
146
|
+
target="$DIR/$1"
|
|
147
|
+
mkdir -p "$(dirname "$target")"
|
|
148
|
+
if [ -f "$target" ] && grep -qF "$MARK_BEGIN" "$target"; then
|
|
149
|
+
info "$1 already wired — left untouched"
|
|
150
|
+
return
|
|
151
|
+
fi
|
|
152
|
+
if [ -f "$target" ]; then
|
|
153
|
+
{ printf '\n'; pointer_block; } >>"$target"
|
|
154
|
+
ok "Appended InvestSkill block → $1"
|
|
155
|
+
else
|
|
156
|
+
pointer_block >"$target"
|
|
157
|
+
ok "Created $1"
|
|
158
|
+
fi
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
# ── per-agent wiring ─────────────────────────────────────────────────────────
|
|
162
|
+
case "$AGENT" in
|
|
163
|
+
claude)
|
|
164
|
+
src="$TMP/plugins/us-stock-analysis/skills"
|
|
165
|
+
[ -d "$src" ] || die "Archive has no skills/ directory — wrong ref?"
|
|
166
|
+
mkdir -p "$DIR/.claude/skills"
|
|
167
|
+
cp -R "$src/." "$DIR/.claude/skills/"
|
|
168
|
+
ok "$(ls -1 "$src" | wc -l | tr -d ' ') skills → .claude/skills/"
|
|
169
|
+
say ""
|
|
170
|
+
say "Next: run ${B}claude${RST} → ${B}\"Evaluate AAPL with the stock-eval skill\"${RST}"
|
|
171
|
+
info "Prefer the marketplace? /plugin marketplace add $REPO"
|
|
172
|
+
;;
|
|
173
|
+
cursor)
|
|
174
|
+
mkdir -p "$DIR/.cursor/rules"
|
|
175
|
+
{
|
|
176
|
+
say "---"
|
|
177
|
+
say "description: InvestSkill — US stock analysis frameworks"
|
|
178
|
+
say "globs: [\"**/*.md\"]"
|
|
179
|
+
say "alwaysApply: false"
|
|
180
|
+
say "---"
|
|
181
|
+
say ""
|
|
182
|
+
pointer_block
|
|
183
|
+
} >"$DIR/.cursor/rules/investskill.mdc"
|
|
184
|
+
ok "Created .cursor/rules/investskill.mdc"
|
|
185
|
+
say ""
|
|
186
|
+
say "Next: open the project in Cursor → ${B}@$PROMPTS_REL/stock-eval.md Evaluate Apple${RST}"
|
|
187
|
+
;;
|
|
188
|
+
copilot)
|
|
189
|
+
wire_into ".github/copilot-instructions.md"
|
|
190
|
+
say ""
|
|
191
|
+
say "Next: in Copilot Chat → ${B}#file:$PROMPTS_REL/stock-eval.md Evaluate Apple${RST}"
|
|
192
|
+
;;
|
|
193
|
+
gemini)
|
|
194
|
+
wire_into "GEMINI.md"
|
|
195
|
+
say ""
|
|
196
|
+
say "Next: run ${B}gemini${RST} → ${B}@$PROMPTS_REL/stock-eval.md Evaluate Apple${RST}"
|
|
197
|
+
;;
|
|
198
|
+
codex|opencode)
|
|
199
|
+
wire_into "AGENTS.md"
|
|
200
|
+
say ""
|
|
201
|
+
say "Next: start $AGENT in this directory → ${B}Evaluate AAPL using the stock-eval framework${RST}"
|
|
202
|
+
;;
|
|
203
|
+
any)
|
|
204
|
+
say ""
|
|
205
|
+
say "Next: paste a framework into any LLM →"
|
|
206
|
+
say " ${B}cat $PROMPTS_REL/stock-eval.md${RST}"
|
|
207
|
+
;;
|
|
208
|
+
esac
|
|
209
|
+
|
|
210
|
+
say ""
|
|
211
|
+
info "Docs: https://yennj12.js.org/InvestSkill/ · Uninstall: rm -rf $PROMPTS_REL"
|
|
212
|
+
say ""
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "investskill",
|
|
3
|
+
"version": "1.12.0",
|
|
4
|
+
"description": "Professional investment analysis frameworks for US stock markets — works with Claude Code, Cursor, Gemini CLI, GitHub Copilot, and any AI assistant",
|
|
5
|
+
"main": "scripts/test-skills.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "node scripts/test-skills.js && node scripts/check-skill-contract.js --quiet && node scripts/sync-prompts.js --check && node scripts/test-edgar.js && node scripts/test-install.js",
|
|
8
|
+
"test:contract": "node scripts/check-skill-contract.js",
|
|
9
|
+
"sync:prompts": "node scripts/sync-prompts.js",
|
|
10
|
+
"sync:prompts:check": "node scripts/sync-prompts.js --check",
|
|
11
|
+
"new:skill": "node scripts/new-skill.js",
|
|
12
|
+
"eval:skills": "node scripts/eval-skills.js",
|
|
13
|
+
"fetch:edgar": "node scripts/fetch-edgar.js",
|
|
14
|
+
"fetch:fundamentals": "node scripts/fetch-fundamentals.js",
|
|
15
|
+
"test:skills": "node scripts/test-skills.js",
|
|
16
|
+
"test:install": "node scripts/test-install.js",
|
|
17
|
+
"test:edgar": "node scripts/test-edgar.js",
|
|
18
|
+
"validate": "node scripts/validate-prompts.js",
|
|
19
|
+
"validate:prompts": "node scripts/validate-prompts.js",
|
|
20
|
+
"build:site": "node site/build/build-site.js",
|
|
21
|
+
"check:links": "node site/build/build-site.js && node scripts/check-links.js",
|
|
22
|
+
"review": "node scripts/site-review.js",
|
|
23
|
+
"verify": "node scripts/setup-verify.js",
|
|
24
|
+
"verify:setup": "node scripts/setup-verify.js",
|
|
25
|
+
"pre-release-check": "node scripts/pre-release-check.js",
|
|
26
|
+
"pre-release": "node scripts/pre-release-check.js && node scripts/validate-prompts.js && npm test",
|
|
27
|
+
"release": "node scripts/release-interactive.js",
|
|
28
|
+
"release:dry-run": "node scripts/release-dry-run.js",
|
|
29
|
+
"publish:cursor": "node scripts/publish-cursor-rules.js",
|
|
30
|
+
"publish:gemini": "node scripts/publish-gemini.js",
|
|
31
|
+
"publish:release-notes": "node scripts/generate-platform-release-notes.js",
|
|
32
|
+
"record:deploy": "node scripts/record-deploy.js",
|
|
33
|
+
"integration-tests": "node scripts/integration-tests.js",
|
|
34
|
+
"integration-tests:verbose": "node scripts/integration-tests.js --verbose",
|
|
35
|
+
"notify:release": "node scripts/notify-release.js"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"investment",
|
|
39
|
+
"stock-analysis",
|
|
40
|
+
"valuation",
|
|
41
|
+
"fundamental-analysis",
|
|
42
|
+
"technical-analysis",
|
|
43
|
+
"portfolio",
|
|
44
|
+
"finance",
|
|
45
|
+
"claude-code",
|
|
46
|
+
"cursor",
|
|
47
|
+
"gemini-cli",
|
|
48
|
+
"github-copilot",
|
|
49
|
+
"prompts"
|
|
50
|
+
],
|
|
51
|
+
"author": "yennanliu",
|
|
52
|
+
"license": "MIT",
|
|
53
|
+
"repository": {
|
|
54
|
+
"type": "git",
|
|
55
|
+
"url": "https://github.com/yennanliu/InvestSkill"
|
|
56
|
+
},
|
|
57
|
+
"homepage": "https://github.com/yennanliu/InvestSkill",
|
|
58
|
+
"bugs": {
|
|
59
|
+
"url": "https://github.com/yennanliu/InvestSkill/issues"
|
|
60
|
+
},
|
|
61
|
+
"engines": {
|
|
62
|
+
"node": ">=18.0.0"
|
|
63
|
+
}
|
|
64
|
+
}
|