You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+21-1Lines changed: 21 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,26 @@ All notable changes to this project will be documented in this file.
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
+
## [0.2.5] - 2026-06-19
9
+
10
+
### Added
11
+
- Added an authoritative chat slash-command whitelist and persistent `balanced`, `buffett`, `munger`, `graham`, and `dalio` analysis styles.
12
+
- Added A-share session detection for closed, pre-market, morning, midday, intraday, and after-hours report routing.
13
+
- Added safe clickable HTTP(S) news links to Markdown and PDF reports.
14
+
15
+
### Changed
16
+
-`young daily --llm` now generates or reuses matching Markdown and PDF artifacts; `--refresh` forces a rebuild.
17
+
-`young replay`, `/replay`, and `/daily-llm` remain compatibility aliases but now direct users to `young daily --llm`.
18
+
-`young report` remains a Markdown-to-PDF exporter and defaults to the latest available trading-date report.
19
+
- Public reports now use one concise disclosure under the title and natural missing-data language instead of mechanical placeholder paragraphs.
20
+
- Updated README guidance to match the current command surface: `young daily` is the deterministic watchlist report, `young daily --llm` is the deep after-hours replay with shared identity and `--refresh` rebuilds, `young replay`/`/daily-llm`/`/replay` are deprecated aliases, and chat documents its curated authoritative whitelist plus the `/style` framework.
21
+
- Updated install and export guidance to emphasize `young init` as an initialization/verification step, `young report` as the Markdown-to-PDF export path, and the PDF/report hygiene rules that keep links clickable and remove mechanical placeholder wording.
22
+
23
+
### Fixed
24
+
- Prevented chat from recommending nonexistent commands or invoking blocked configuration, delivery, update, uninstall, and other mutating command paths.
25
+
- Made PDF export select an explicit report identity instead of relying on modification-time ordering when multiple same-day reports exist.
26
+
- Kept missing LLM configuration recoverable through deterministic daily output while preserving authentication and network failures as errors.
27
+
8
28
## [0.2.4] - 2026-06-19
9
29
10
30
### Added
@@ -58,7 +78,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
58
78
### Added
59
79
- Added versioned LLM and delivery-channel configuration in `~/.young_stock/config.json`, including masked display and environment-based API key lookup.
60
80
- Added OpenAI-compatible providers (OpenAI, DeepSeek, Qwen, Ollama) plus Anthropic message support with timeouts, retries, and safe errors.
61
-
- Added `young chat`, a Rich interactive REPL whose slash commands reuse the existing Click command tree.
81
+
- Added `young chat`, a Rich interactive REPL whose curated authoritative whitelist routes selected safe/read-only commands through Click.
62
82
- Added evidence-driven `young replay`, `young daily --llm`, and `young analyze <symbol>` workflows based on the stock-analysis M1-M6 methodology and quality-score degradation.
63
83
- Added persistent report/evidence artifacts under `~/.young_stock/reports/YYYYMMDD/`.
64
84
- Added `young report` with automatic deterministic-report fallback and optional WeasyPrint PDF export using a Kami-compatible Equity Report layout.
@@ -228,9 +243,9 @@ The report follows the six-module method from
228
243
Before each LLM replay, young checks the remote `stock-analysis` version. It installs a text-only update only when
229
244
the remote semantic version is greater than the locally cached/bundled version. `SKILL.md`, output discipline,
230
245
data-source strategy, M1-M6 methodology files, and report templates are downloaded together, SHA-256 recorded in
231
-
`~/.young_stock/methodologies/stock-analysis/manifest.json`, and verified when read. Remote code is never executed.
232
-
If checking, downloading, or validation fails, young keeps the last verified local specification or bundled 4.2.0
233
-
guidance.
246
+
`~/.young_stock/methodologies/stock-analysis/manifest.json`, and verified when read. Remote code is never executed,
247
+
and the browser or external repo is not a chat runtime dependency. If checking, downloading, or validation fails,
248
+
young keeps the last verified local specification or bundled guidance.
234
249
235
250
Each module has an evidence score. Missing fields remain missing rather than being rendered as zero. Low-quality
236
251
evidence automatically produces a shorter report limited to verified indices, holdings, risks, and next-session
@@ -246,9 +261,12 @@ report-writing context. The returned Markdown is reviewed again before it can be
246
261
use only these source phrases:
247
262
248
263
- normal data: `据公开市场数据`, `据交易所及财经终端披露`
249
-
- missing data: `该指标当日未披露`, `历史数据不可得`, `本模块证据暂缺`
264
+
- missing data: `该指标当日未披露`, `历史数据不可得`
250
265
- historical lookback: `按惯例回溯至该日`, `历史口径回溯`
251
266
267
+
The mechanical placeholder `本模块证据暂缺` is cleaned from the final publication text and should not be treated as a
268
+
recommended output phrase.
269
+
252
270
Report artifacts include the date, market session, and topic:
253
271
254
272
```text
@@ -266,7 +284,7 @@ is retained.
266
284
The standard install already includes PDF support. If you upgraded from an older environment, refresh the tool once:
267
285
268
286
```bash
269
-
uv tool install --force 'young-stock-cli'
287
+
uv tool install --upgrade young-stock-cli
270
288
```
271
289
272
290
If `young` was installed into the active Python environment instead:
@@ -275,16 +293,20 @@ If `young` was installed into the active Python environment instead:
275
293
python3 -m pip install --upgrade young-stock-cli
276
294
```
277
295
278
-
Then export the latest report:
296
+
Then export the latest Markdown report to PDF:
279
297
280
298
```bash
281
299
young report
282
300
young report --date 20260618
283
301
```
284
302
285
303
If no Markdown report exists for the selected date, `young report` first reuses a saved diary entry when available,
286
-
otherwise it automatically generates a deterministic full daily report. Run `young init` first if you want a quick
287
-
readiness check for PDF rendering, config, and local storage paths.
304
+
otherwise it automatically generates the latest available deterministic daily report. It is a Markdown-to-PDF export
305
+
command, not a stdout time-slice report. Run `young init` first if you want a quick readiness check for PDF
306
+
rendering, config, and local storage paths.
307
+
308
+
The PDF header is intentionally short, news links stay clickable, and the final report keeps the publication text
309
+
clean rather than echoing mechanical placeholders.
288
310
289
311
The bundled Equity Report layout follows the
290
312
[`tw93/Kami`](https://github.com/tw93/Kami) editorial language: parchment `#f5f4ed`, ink blue `#1B365D`,
@@ -315,7 +337,7 @@ young config channel remove feishu work
315
337
One-click workflow:
316
338
317
339
```bash
318
-
young replay
340
+
young daily --llm
319
341
young report
320
342
young send
321
343
@@ -355,8 +377,10 @@ The internals are being split into focused modules: `young_stock.calendar` handl
355
377
-**Multiple public quote sources** — Sina Finance and Tencent Finance are the default stable quote path; market-specific public interfaces stay behind the CLI fallback layer when no better source is available.
356
378
-**Single-stock lookup** — `young stock 600519`, `young stock 0700.HK`, or `young stock AAPL` prints a compact quote snapshot with source, trade date, price, change, volume, turnover, market cap, PE/PB, 52-week range when available, and optional news.
357
379
-**Fund holding lookup** — `young fund 161725` prints the fund's same-day estimated change, latest NAV date, top holdings, holding-stock quotes, rough contribution estimate, and same-day holding-stock news. Official fund NAVs usually update at night, so intraday/close values are clearly labeled as estimates.
358
-
-**Personal daily report** — `young daily` reads your local investment memory from `~/.young_stock/profile.json`, then prints saved stock/ETF trends, fund estimates, only the markets relevant to your stocks and fund top holdings, and portfolio-style suggestions grounded in your funds, stocks, holding dates, quantities, and available news. First use requires a verified symbol plus `--buy-date` and `--quantity`, for example `young profile add-stock 600519 --buy-date 2026-01-15 --quantity 100` or `young profile add-fund 161725 --buy-date 2026-01-10 --quantity 1000`.
380
+
-**Personal daily report** — `young daily` is the deterministic watchlist report from your local investment memory in `~/.young_stock/profile.json`; it prints saved stock/ETF trends, fund estimates, only the markets relevant to your symbols and fund top holdings, and portfolio-style suggestions grounded in your funds, stocks, holding dates, quantities, and available news. First use requires a verified symbol plus `--buy-date` and `--quantity`, for example `young profile add-stock 600519 --buy-date 2026-01-15 --quantity 100` or `young profile add-fund 161725 --buy-date 2026-01-10 --quantity 1000`.
381
+
-**LLM replay** — `young daily --llm` performs the deep after-hours / latest-trading-day replay, then writes the matching Markdown and PDF under the same report identity; `--refresh` forces a rebuild of that identity. `young replay`, `/replay`, and `/daily-llm` are compatibility aliases only.
359
382
-**Short report modes** — `young daily --format summary` keeps terminal output compact; `--format key-points` adds a few trend/risk bullets; `--only`, `--order`, and `--quick` trim slower or irrelevant sections.
383
+
-**Chat style control** — `/style list|set|show|clear` persists a framework-only style choice. `balanced`, `buffett`, `munger`, `graham`, and `dalio` are analysis frames, not personas.
360
384
-**Investment memory management** — list, remove, clear, and group saved stocks/funds with `young profile list`, `remove-stock`, `remove-fund`, `clear`, `clear-stocks`, `clear-funds`, and `profile group create/add`.
361
385
-**Local workflow helpers** — lightweight `portfolio`, `alert`, `note`, and `diary` commands store local records for portfolio experiments, reminder rules, investment notes, and saved daily-report text.
362
386
-**Diagnostics** — `young diagnose` summarizes recent source health and suggests cache/quick-mode fallbacks when public APIs are unstable; `young diagnose --json` prints read-only, machine-readable support info with Python/version/path/source-health details.
@@ -375,7 +399,7 @@ The internals are being split into focused modules: `young_stock.calendar` handl
375
399
-**Same-day news discipline** — news sections only show items published on the requested trading date, up to five items, with a clear empty-state message when nothing valid is available.
376
400
-**Readable news links** — linked news items are checked for obvious empty/404/no-content pages and replaced by other same-day news when possible.
377
401
-**Sector boards via browser fallback** — when Eastmoney's board API rate-limits, falls back to rendering the public web page (optional, requires a local browser engine).
378
-
-**Local updater/uninstaller** — `young update` runs `python -m pip install --upgrade young-stock-cli`; `young uninstall` runs `python -m pip uninstall -y young-stock-cli` with the same interpreter that launched the CLI.
402
+
-**Local updater/uninstaller** — `young update` runs `python -m pip install --upgrade young-stock-cli`; `young uninstall` runs `python -m pip uninstall -y young-stock-cli` with the same interpreter that launched the CLI. For fresh setups, prefer `uv tool install young-stock-cli && young init`, or `python3 -m pip install --upgrade young-stock-cli && young init` in an active interpreter.
0 commit comments