lumina-wiki 1.0.0 → 1.2.0

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.
Files changed (38) hide show
  1. package/CHANGELOG.md +86 -1
  2. package/README.md +32 -12
  3. package/README.vi.md +33 -13
  4. package/README.zh.md +35 -13
  5. package/bin/lumina.js +7 -1
  6. package/package.json +12 -3
  7. package/src/installer/banner.js +3 -0
  8. package/src/installer/commands.js +234 -61
  9. package/src/installer/locales/en.mjs +97 -0
  10. package/src/installer/locales/vi.mjs +96 -0
  11. package/src/installer/locales/zh.mjs +102 -0
  12. package/src/installer/locales.js +67 -0
  13. package/src/installer/manifest.js +5 -1
  14. package/src/installer/prompts.js +152 -44
  15. package/src/scripts/build-source.mjs +31 -0
  16. package/src/scripts/external-ids.mjs +217 -0
  17. package/src/scripts/lint.mjs +151 -8
  18. package/src/scripts/merge-ids.mjs +77 -0
  19. package/src/scripts/parse-ids.mjs +33 -0
  20. package/src/scripts/schemas.mjs +13 -1
  21. package/src/scripts/wiki.mjs +83 -20
  22. package/src/skills/core/ingest/references/step-01-draft.md +19 -1
  23. package/src/skills/core/migrate-legacy/SKILL.md +20 -3
  24. package/src/skills/core/migrate-legacy/references/backfill-ids.md +81 -0
  25. package/src/skills/packs/research/discover/SKILL.md +10 -6
  26. package/src/skills/packs/research/topic/SKILL.md +191 -0
  27. package/src/templates/README.md +2 -2
  28. package/src/templates/README.vi.md +232 -0
  29. package/src/templates/README.zh.md +233 -0
  30. package/src/templates/_lumina/schema/page-templates.md +2 -0
  31. package/src/tools/_cache.py +314 -0
  32. package/src/tools/fetch_arxiv.py +21 -1
  33. package/src/tools/fetch_deepxiv.py +3 -1
  34. package/src/tools/fetch_pdf.py +4 -0
  35. package/src/tools/fetch_s2.py +56 -6
  36. package/src/tools/fetch_wikipedia.py +7 -2
  37. package/src/tools/id_utils.py +262 -0
  38. package/src/tools/init_discovery.py +89 -18
package/CHANGELOG.md CHANGED
@@ -3,7 +3,92 @@
3
3
  All notable changes to Lumina-Wiki are documented here.
4
4
  Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
5
5
 
6
- ## [Unreleased]
6
+ ## [1.2.0] - 2026-05-07
7
+
8
+ ### Added
9
+
10
+ - **Multilingual installer (PR #7).** Interactive installer prompts and
11
+ rendered banners now ship in English, Vietnamese, and Simplified Chinese.
12
+ Language is selected at install time and persisted; upgrades read the
13
+ prior choice from manifest config. Localization covers prompts, summary
14
+ output, and post-install banner — workspace template content is unchanged.
15
+ - **Persistent HTTP GET cache for fetchers (PR #5).** New
16
+ `_lumina/tools/http_cache.py` provides a content-addressed, file-backed
17
+ cache layer for arxiv / DOI / Semantic Scholar / web GET requests, shared
18
+ across `discover` and `ingest` runs. TTL is configurable via env
19
+ (validated at load time) and a cache schema version pins the on-disk
20
+ format so future shape changes self-invalidate. List-of-tuples query
21
+ params bypass caching by design.
22
+ - **Bun smoke job in CI (PR #3).** GitHub Actions now runs a Bun
23
+ compatibility job alongside Node, catching runtime divergences early
24
+ (path resolution, module loading, child-process spawn) without making
25
+ Bun a supported runtime contract.
26
+ - **Claude Code GitHub Actions workflows (PR #8).** Two opt-in workflows —
27
+ Claude PR Assistant (mention-triggered) and Claude Code Review (auto on
28
+ PR open/sync) — are shipped under `.github/workflows/`. Both are
29
+ restricted to repository maintainers on this public repo to prevent
30
+ unsolicited token usage from forks.
31
+ - Source pages gain an optional `external_ids` frontmatter object holding
32
+ validated cross-source identifiers across four namespaces: `doi`, `arxiv`,
33
+ `s2`, and `url` (canonical form). The namespace registry is locked to
34
+ these four — `openalex`, `isbn`, and `s2_corpus` are reserved but not yet
35
+ implemented.
36
+ - New module `_lumina/scripts/external-ids.mjs` and its Python mirror
37
+ `_lumina/tools/id_utils.py` provide pure helpers (`normalizeExternalId`,
38
+ `parseUrlToExternalIds`, `canonicalizeUrl`, `externalIdMatchKey`,
39
+ `expandExternalIds`, `safeIdToken`, `sanitizeExternalIdsObject`). Parity is
40
+ gated by a shared JSON fixture.
41
+ - New CLI wrapper `_lumina/scripts/parse-ids.mjs` reads a URL from `argv` and
42
+ emits a validated `external_ids` JSON map. Skill prompts call this instead
43
+ of inline `node -e` interpolation, eliminating shell-injection risk.
44
+ - Producers (`/lumi-ingest`, `/lumi-discover`, all fetchers) populate
45
+ `external_ids` automatically. `init_discovery.py --exclude-keys` filters
46
+ candidates by expanded external_ids set so a DOI excludes its arxiv form.
47
+ - Three new lint checks on source pages: **L13** (warn — namespace coverage
48
+ derivable from `urls[]`), **L14** (error — invalid identifier value),
49
+ **L16** (warn — `urls[]` ↔ `external_ids` mismatch). L13's remediation
50
+ message points users at `/lumi-migrate-legacy --backfill-ids`.
51
+ - Opt-in `/lumi-migrate-legacy --backfill-ids` flag populates `external_ids`
52
+ on legacy source pages from existing `urls[]`. Non-destructive (existing
53
+ keys win) and idempotent. No `--dry-run` — review with `git diff`.
54
+ - Source pages gain an optional `sources` frontmatter array recording fetch
55
+ provenance: `[{provider, fetched_at, url?}]`. Each ingest run appends one
56
+ entry — multi-fetch keeps history rather than replacing.
57
+ - New CLI wrapper `_lumina/scripts/build-source.mjs` (and the underlying
58
+ `buildSourceEntry` / `build_source_entry` helpers in `external-ids.mjs` /
59
+ `id_utils.py`) constructs one validated entry per fetcher run. Provider
60
+ must be a kebab/snake slug (max 32 chars). `/lumi-ingest` Phase 3 calls
61
+ it after writing `external_ids`.
62
+
63
+ ### Changed
64
+
65
+ - `init_discovery.py` flag renamed in place: `--exclude-ids` →
66
+ `--exclude-keys`. No deprecation alias (LLM-driven, no human contract).
67
+ - `wiki.mjs` `parseFrontmatter` / `stringifyFrontmatter` now round-trip
68
+ top-level YAML object values (block-mapping form). `set-meta external_ids`
69
+ runs `sanitizeExternalIdsObject` automatically — `__proto__` and unknown
70
+ namespaces are stripped before persisting.
71
+ - `EXTERNAL_ID_NAMESPACES` source of truth moved from `external-ids.mjs` to
72
+ `schemas.mjs` (where pure-data lives). `external-ids.mjs` now imports and
73
+ re-exports it for back-compat with downstream consumers.
74
+
75
+ ### Migration
76
+
77
+ - Legacy wikis with no `external_ids` populated will see L13 warnings on
78
+ source pages whose `urls[]` contain an arxiv/doi/s2 URL. Run
79
+ `/lumi-migrate-legacy --backfill-ids` to populate them. The standard
80
+ migration flow (`/lumi-migrate-legacy` without the flag) is unchanged.
81
+
82
+ ## [1.1.0] - 2026-05-06
83
+
84
+ ### Added
85
+
86
+ - `/lumi-research-topic` skill (research pack) — cluster existing concepts and sources into a thematic topic page under `wiki/topics/`. AI proposes the cluster from the graph; you confirm before anything is written.
87
+
88
+ ### Changed
89
+
90
+ - READMEs (en/vi/zh) and section titles drop the `(v0.1)` qualifier; skill count badge is now `Skills-Many` so it does not need bumping per release.
91
+ - User guides (en/vi/zh) align the `/lumi-ingest` "What you get back" section across languages.
7
92
 
8
93
  ## [1.0.0] - 2026-05-06
9
94
 
package/README.md CHANGED
@@ -12,7 +12,7 @@
12
12
  <img alt="License" src="https://img.shields.io/badge/License-MIT-blue.svg"/>
13
13
  <img alt="Node.js" src="https://img.shields.io/badge/Node.js-%3E%3D20-blue.svg"/>
14
14
  <img alt="Python" src="https://img.shields.io/badge/Python-3.9+-yellow.svg"/>
15
- <img alt="Skills" src="https://img.shields.io/badge/Skills-14-purple.svg"/>
15
+ <img alt="Skills" src="https://img.shields.io/badge/Skills-Many-purple.svg"/>
16
16
  <br>
17
17
  <img alt="Powered by" src="https://img.shields.io/badge/Powered%20by-grey?style=flat"/>
18
18
  <img alt="Claude" src="https://img.shields.io/badge/-Claude%20Code-orange?style=flat"/>
@@ -56,6 +56,10 @@ Lumina-Wiki works from one simple principle: keep your raw materials separate fr
56
56
  +-------------------------+ +---------------------------+
57
57
  ```
58
58
 
59
+ <p align="center">
60
+ <img src="assets/lumina-architecture-en.png" alt="Lumina-Wiki Architecture" width="720">
61
+ </p>
62
+
59
63
  1. **You Provide:** Place your documents (PDFs, notes) in the `raw/` directory.
60
64
  2. **The Agent Builds:** Use commands in your AI chat, such as `/lumi-ingest`, to make the agent read from `raw/` and build a structured, interlinked wiki in `wiki/`.
61
65
  3. **You Query:** Ask questions with `/lumi-ask` against the agent's "brain" in `wiki/` for faster, more context-aware answers.
@@ -121,6 +125,10 @@ Interact with your wiki using these commands in your AI chat interface, such as
121
125
 
122
126
  Lumina creates a workspace where each folder has a clear purpose.
123
127
 
128
+ <p align="center">
129
+ <img src="assets/lumina-env-en.png" alt="Lumina-Wiki Workspace Environment" width="720">
130
+ </p>
131
+
124
132
  | Path | Purpose | Managed By |
125
133
  | :--- | :--- | :--- |
126
134
  | **`raw/`** | **Your immutable input library.** The agent **only reads** from here. | **You** |
@@ -152,9 +160,11 @@ As your wiki grows, you can use [qmd](https://github.com/tobi/qmd) for faster lo
152
160
  npx skills add https://github.com/tobi/qmd --skill qmd
153
161
  ```
154
162
 
163
+ See the [Advanced Guide](docs/user-guide/advanced-qmd.en.md) for detailed installation and configuration.
164
+
155
165
  ---
156
166
 
157
- ## 5. Available Skills (v0.1)
167
+ ## 5. Available Skills
158
168
 
159
169
  These are the commands you can use when chatting with your AI agent.
160
170
 
@@ -171,6 +181,7 @@ These are the commands you can use when chatting with your AI agent.
171
181
  | | `/lumi-research-watchlist` | Choose research topics for scheduled discovery with AI help. |
172
182
  | | `/lumi-research-survey` | Create a survey or summary from existing knowledge. |
173
183
  | | `/lumi-research-prefill` | Seed foundational concepts to avoid duplicates. |
184
+ | | `/lumi-research-topic` | Create a topic page at `wiki/topics/<slug>.md` by gathering related concepts and sources already in your wiki. The AI proposes what to include and you confirm before anything is written. Use this after several `/lumi-ingest` runs when you want to give a theme its own page. |
174
185
  | | `/lumi-research-setup` | Help configure API keys for research tools. |
175
186
  | **Reading** | `/lumi-reading-chapter-ingest` | Ingest a book chapter by chapter. |
176
187
  | | `/lumi-reading-character-track` | Track characters and their relationships in a story. |
@@ -183,19 +194,28 @@ The scripts behind these skills live in `_lumina/scripts/` and `_lumina/tools/`;
183
194
 
184
195
  ## 6. What's Coming Next
185
196
 
186
- The current release is **v0.2** (preview). The full plan is in [`ROADMAP.md`](./ROADMAP.md). Headline items:
197
+ Lumina-Wiki is evolving rapidly. Here is our user-facing roadmap:
187
198
 
188
- **v1.0.0 - First Stable**
189
- - **Scheduled discovery** - saved research topics can be checked on a schedule you choose.
190
- - New `/lumi-research-watchlist` skill to help you choose and update the topics to follow.
191
- - Stability lock for the v0.1 surface: CLI flags, exit codes, and schema field names.
192
- - Cross-platform CI matrix: macOS, Linux, and Windows on Node 20 and 22.
199
+ **Near-term (Stability & New Ingestion)**
200
+ - [ ] **`/lumi-help` Skill:** A smart assistant to help you learn and use Lumina-Wiki instantly.
201
+ - [x] **Multilingual setup:** Choose English, Vietnamese, or Chinese as your primary language during install. *(shipped in v1.2)*
202
+ - [ ] **Native DOCX & Image OCR:** Ingest Word files and screenshots directly into your wiki.
203
+ - [ ] **Advanced Paper Ranking:** See influence scores and quality signals for your research papers.
204
+ - [x] **Improved CI/CD:** Native support for Bun and Node 22 environments. *(shipped in v1.2)*
193
205
 
194
- **v2.0.0 - Research Pack Source Expansion**
195
- - **New paper sources:** OpenAlex, Unpaywall, CORE (Priority 1) -> OpenReview, Hugging Face Papers, Papers With Code (Priority 2) -> Crossref, DOAJ, research lab RSS feeds (Priority 3).
196
- - **Paper ranking:** new `/lumi-rank` skill adding influential-citation count, field-normalized citation rank, Scite support/contrast signals, and Altmetric attention to a `ranking:` frontmatter block.
206
+ **Long-term (Deep Research & Integration)**
207
+ - [ ] **Global Source Expansion:** Direct integration with OpenAlex, CORE, and Unpaywall.
208
+ - [ ] **RSS & Blog Monitoring:** Automatically identify new papers from your favorite lab blogs.
209
+ - [ ] **Google Workspace:** Ingest Google Docs and Sheets directly into your graph.
210
+ - [ ] **Multimedia Support:** Process YouTube videos and Audio recordings via transcripts.
211
+ - [ ] **Knowledge Graph Auditing:** Automated checks for contradictions and structural drift.
197
212
 
198
- **Want to contribute?** Pick any unchecked item in `ROADMAP.md`, open an issue to claim it, then send a PR. Source fetchers follow the same pattern in `src/tools/` (CLI + JSON, no async, exit codes `0/2/3`), so they are a good first contribution. See the local development steps below.
213
+ **Proposed**
214
+ - [ ] **Desktop Application:** A dedicated visual environment for easier wiki management.
215
+ - [ ] **Specialized Science Packs:** Deep integration for bio-medical and physics researchers.
216
+
217
+ ---
218
+ *Full technical details are available in [`ROADMAP.md`](./ROADMAP.md). Want to contribute? Join us on GitHub!*
199
219
 
200
220
  ---
201
221
 
package/README.vi.md CHANGED
@@ -12,7 +12,7 @@
12
12
  <img alt="License" src="https://img.shields.io/badge/License-MIT-blue.svg"/>
13
13
  <img alt="Node.js" src="https://img.shields.io/badge/Node.js-%3E%3D20-blue.svg"/>
14
14
  <img alt="Python" src="https://img.shields.io/badge/Python-3.9+-yellow.svg"/>
15
- <img alt="Skills" src="https://img.shields.io/badge/Skills-14-purple.svg"/>
15
+ <img alt="Skills" src="https://img.shields.io/badge/Skills-Many-purple.svg"/>
16
16
  <br>
17
17
  <img alt="Powered by" src="https://img.shields.io/badge/Powered%20by-grey?style=flat"/>
18
18
  <img alt="Claude" src="https://img.shields.io/badge/-Claude%20Code-orange?style=flat"/>
@@ -56,6 +56,10 @@ Lumina-Wiki hoạt động dựa trên một nguyên tắc đơn giản: tách b
56
56
  +-------------------------+ +---------------------------+
57
57
  ```
58
58
 
59
+ <p align="center">
60
+ <img src="assets/lumina-architecture-vi.png" alt="Kiến trúc Lumina-Wiki" width="720">
61
+ </p>
62
+
59
63
  1. **Bạn Cung cấp:** Đặt các tài liệu (PDF, ghi chú) của bạn vào thư mục `raw/`.
60
64
  2. **Agent Xây dựng:** Sử dụng các lệnh trong cuộc hội thoại với AI (như `/lumi-ingest`) để yêu cầu agent đọc từ `raw/` và xây dựng một wiki có cấu trúc, liên kết chặt chẽ trong thư mục `wiki/`.
61
65
  3. **Bạn Khai thác:** Đặt câu hỏi (sử dụng `/lumi-ask`) trực tiếp vào "bộ não" của agent trong `wiki/` để nhận được câu trả lời nhanh và phù hợp với ngữ cảnh hơn.
@@ -121,6 +125,10 @@ Tương tác với wiki của bạn bằng cách sử dụng các lệnh này tr
121
125
 
122
126
  Lumina tạo ra một không gian làm việc với mục đích rõ ràng cho từng thư mục.
123
127
 
128
+ <p align="center">
129
+ <img src="assets/lumina-env-vi.png" alt="Môi trường làm việc Lumina-Wiki" width="720">
130
+ </p>
131
+
124
132
  | Đường dẫn | Mục đích | Quản lý bởi |
125
133
  | :--- | :--- | :--- |
126
134
  | **`raw/`** | **Thư viện đầu vào bất biến của bạn.** Agent **chỉ đọc** từ đây. | **Bạn** |
@@ -152,9 +160,11 @@ Khi wiki lớn dần, bạn có thể dùng [qmd](https://github.com/tobi/qmd)
152
160
  npx skills add https://github.com/tobi/qmd --skill qmd
153
161
  ```
154
162
 
163
+ Xem [Hướng dẫn Nâng cao](docs/user-guide/advanced-qmd.vi.md) để biết chi tiết cài đặt và cấu hình.
164
+
155
165
  ---
156
166
 
157
- ## 5. Các kỹ năng có sẵn (v0.1)
167
+ ## 5. Các kỹ năng có sẵn
158
168
 
159
169
  Đây là những lệnh bạn có thể sử dụng khi trò chuyện với AI.
160
170
 
@@ -171,6 +181,7 @@ npx skills add https://github.com/tobi/qmd --skill qmd
171
181
  | | `/lumi-research-watchlist` | Giúp bạn chọn các chủ đề nghiên cứu để AI tìm định kỳ. |
172
182
  | | `/lumi-research-survey` | Tạo một bài tổng quan/khảo sát từ kiến thức hiện có. |
173
183
  | | `/lumi-research-prefill` | Tạo trước các khái niệm nền tảng để tránh trùng lặp. |
184
+ | | `/lumi-research-topic` | Gom các khái niệm và nguồn liên quan trong wiki thành một trang chủ đề tại `wiki/topics/<slug>.md`. AI đề xuất danh sách để bạn xem và xác nhận trước khi trang được tạo. Dùng sau khi đã nạp nhiều tài liệu và muốn tổng hợp một nhóm ý tưởng thành trang riêng. |
174
185
  | | `/lumi-research-setup` | Giúp cấu hình API key cho các công cụ nghiên cứu. |
175
186
  | **Reading** | `/lumi-reading-chapter-ingest`| Nạp kiến thức sách theo từng chương. |
176
187
  | | `/lumi-reading-character-track`| Theo dõi các nhân vật và mối quan hệ của họ trong truyện. |
@@ -183,25 +194,34 @@ Các script chạy nền nằm trong `_lumina/scripts/` và `_lumina/tools/`; th
183
194
 
184
195
  ## 6. Lộ trình sắp tới
185
196
 
186
- Phiên bản hiện tại **v0.2** (preview). Kế hoạch đầy đủ [`ROADMAP.md`](./ROADMAP.md). Những hạng mục chính:
197
+ Lumina-Wiki đang phát triển nhanh chóng. Dưới đây lộ trình hướng tới người dùng của chúng tôi:
187
198
 
188
- **v1.0.0 Bản ổn định đầu tiên**
189
- - **Tìm tài liệu định kỳ** các chủ đề nghiên cứu đã lưu thể được kiểm tra lại theo lịch bạn chọn.
190
- - Skill mới `/lumi-research-watchlist` để giúp bạn chọn cập nhật các chủ đề muốn theo dõi.
191
- - Khoá ổn định bề mặt v0.1 (CLI flags, exit codes, tên trường schema).
192
- - CI matrix đa nền tảng (macOS + Linux + Windows, Node 20 + 22).
199
+ **Sắp tới (Ổn định & Mở rộng nạp tài liệu)**
200
+ - [ ] **Kỹ năng `/lumi-help`:** Trợ thông minh giúp bạn học sử dụng Lumina-Wiki tức thì.
201
+ - [x] **Cài đặt đa ngôn ngữ:** Chọn Tiếng Anh, Tiếng Việt hoặc Tiếng Trung làm ngôn ngữ chính khi cài đặt. *(đã phát hành trong v1.2)*
202
+ - [ ] **Ingest DOCX & OCR Ảnh:** Nạp trực tiếp file Word và ảnh chụp màn hình vào wiki.
203
+ - [ ] **Xếp hạng bài báo nâng cao:** Xem điểm số ảnh hưởng và tín hiệu chất lượng cho các nghiên cứu của bạn.
204
+ - [x] **Cải thiện CI/CD:** Hỗ trợ chính thức cho môi trường Bun và Node 22. *(đã phát hành trong v1.2)*
193
205
 
194
- **v2.0.0 Mở rộng nguồn bài báo nghiên cứu cho Research Pack**
195
- - **Nguồn bài báo mới:** OpenAlex, Unpaywall, CORE (Ưu tiên 1) OpenReview, Hugging Face Papers, Papers With Code (Ưu tiên 2) → Crossref, DOAJ, RSS từ các blog research lab (Ưu tiên 3).
196
- - **Đánh giá bài báo:** skill mới `/lumi-rank` đưa các chỉ số influential-citation count, xếp hạng theo lĩnh vực, Scite support/contrast, và Altmetric vào block `ranking:` trong frontmatter.
206
+ **Dài hạn (Nghiên cứu sâu & Tích hợp)**
207
+ - [ ] **Mở rộng nguồn dữ liệu toàn cầu:** Tích hợp trực tiếp với OpenAlex, CORE Unpaywall.
208
+ - [ ] **Theo dõi RSS & Blog:** Tự động tìm bài báo mới từ các blog phòng thí nghiệm yêu thích.
209
+ - [ ] **Google Workspace:** Nạp trực tiếp Google Docs và Sheets vào đồ thị tri thức.
210
+ - [ ] **Hỗ trợ đa phương tiện:** Xử lý video YouTube và ghi âm Audio thông qua transcript.
211
+ - [ ] **Kiểm định đồ thị tri thức:** Tự động phát hiện mâu thuẫn và sai lệch cấu trúc.
197
212
 
198
- **Muốn đóng góp?** Chọn bất kỳ hạng mục chưa tick trong `ROADMAP.md`, mở issue để nhận, rồi gửi PR. Các fetcher nguồn bài báo đều tuân theo cùng pattern trong `src/tools/` (CLI + JSON, no async, exit codes `0/2/3`) nên rất phù hợp cho lần contribute đầu tiên. Xem hướng dẫn dev cục bộ bên dưới.
213
+ **Dự kiến**
214
+ - [ ] **Ứng dụng Desktop:** Môi trường giao diện chuyên dụng để quản lý wiki dễ dàng hơn.
215
+ - [ ] **Gói Khoa học Chuyên dụng:** Tích hợp sâu cho các nhà nghiên cứu sinh học, y tế và vật lý.
216
+
217
+ ---
218
+ *Chi tiết kỹ thuật đầy đủ có tại [`ROADMAP.md`](./ROADMAP.md). Bạn muốn đóng góp? Hãy tham gia cùng chúng tôi trên GitHub!*
199
219
 
200
220
  ---
201
221
 
202
222
  ## 7. Đóng góp & Giấy phép
203
223
 
204
- ### 🛠️ Phát triển cục bộ (dành cho người đóng góp)
224
+ ### Phát triển cục bộ (dành cho người đóng góp)
205
225
 
206
226
  Nếu bạn muốn đóng góp cho trình cài đặt `lumina-wiki`:
207
227
  ```bash
package/README.zh.md CHANGED
@@ -12,7 +12,7 @@
12
12
  <img alt="License" src="https://img.shields.io/badge/License-MIT-blue.svg"/>
13
13
  <img alt="Node.js" src="https://img.shields.io/badge/Node.js-%3E%3D20-blue.svg"/>
14
14
  <img alt="Python" src="https://img.shields.io/badge/Python-3.9+-yellow.svg"/>
15
- <img alt="Skills" src="https://img.shields.io/badge/Skills-14-purple.svg"/>
15
+ <img alt="Skills" src="https://img.shields.io/badge/Skills-Many-purple.svg"/>
16
16
  <br>
17
17
  <img alt="Powered by" src="https://img.shields.io/badge/Powered%20by-grey?style=flat"/>
18
18
  <img alt="Claude" src="https://img.shields.io/badge/-Claude%20Code-orange?style=flat"/>
@@ -56,6 +56,10 @@ Lumina-Wiki 遵循一个简单原则:将您的原始资料与 AI 的结构化
56
56
  +-------------------------+ +---------------------------+
57
57
  ```
58
58
 
59
+ <p align="center">
60
+ <img src="assets/lumina-architecture-en.png" alt="Lumina-Wiki 架构" width="720">
61
+ </p>
62
+
59
63
  1. **您提供:** 将文档(PDF、笔记)放入 `raw/` 目录。
60
64
  2. **Agent 构建:** 在 AI 对话中使用指令(如 `/lumi-ingest`),让 Agent 从 `raw/` 读取内容,并在 `wiki/` 中构建结构化、互相关联的维基。
61
65
  3. **您使用:** 通过 `/lumi-ask` 直接向 `wiki/` 中的 Agent“大脑”提问,获得更快、更贴合上下文的回答。
@@ -121,6 +125,10 @@ node _lumina/scripts/wiki.mjs migrate --add-defaults
121
125
 
122
126
  Lumina 会创建一个工作区,每个目录都有明确用途。
123
127
 
128
+ <p align="center">
129
+ <img src="assets/lumina-env-en.png" alt="Lumina-Wiki 工作区环境" width="720">
130
+ </p>
131
+
124
132
  | 路径 | 用途 | 管理方 |
125
133
  | :--- | :--- | :--- |
126
134
  | **`raw/`** | **您的不可变输入库。** Agent **只从这里读取**。 | **您** |
@@ -146,15 +154,18 @@ Lumina 会创建一个工作区,每个目录都有明确用途。
146
154
 
147
155
  ### **使用 qmd 进行本地搜索(高级,可选)**
148
156
 
149
- wiki 逐渐变大时,您可以使用 [qmd](https://github.com/tobi/qmd) 获得更快的本地 Markdown 搜索。如果您的 IDE 支持 skill 格式,可以通过以下命令安装官方 qmd skill:
157
+ 随着 Wiki 的增长,您可以使用 [qmd](https://github.com/tobi/qmd) 实现更快的本地 Markdown 搜索。如果您的 IDE 支持 Skill 格式,请安装官方 qmd skill:
150
158
 
151
159
  ```bash
152
160
  npx skills add https://github.com/tobi/qmd --skill qmd
153
161
  ```
154
162
 
163
+ 有关详细的安装和配置,请参阅[高级指南](docs/user-guide/advanced-qmd.zh.md)。
164
+
165
+
155
166
  ---
156
167
 
157
- ## 5. 可用技能(v0.1)
168
+ ## 5. 可用技能
158
169
 
159
170
  这些是您在与 AI 对话时可以使用的指令。
160
171
 
@@ -171,6 +182,7 @@ npx skills add https://github.com/tobi/qmd --skill qmd
171
182
  | | `/lumi-research-watchlist` | 帮你选择要定期查找的研究主题。 |
172
183
  | | `/lumi-research-survey` | 从现有知识创建综述/调研。 |
173
184
  | | `/lumi-research-prefill` | 预先生成基础概念,避免重复。 |
185
+ | | `/lumi-research-topic` | 把 wiki 中已有的相关概念和来源汇聚成一个主题页,保存在 `wiki/topics/<slug>.md`。AI 会提议收录哪些内容,由你确认后再生成页面。多次 `/lumi-ingest` 之后,用它把一组相关想法整理成独立的主题页。 |
174
186
  | | `/lumi-research-setup` | 帮助配置研究工具的 API key。 |
175
187
  | **Reading** | `/lumi-reading-chapter-ingest`| 按章节导入书籍知识。 |
176
188
  | | `/lumi-reading-character-track`| 追踪故事中的角色及其关系。 |
@@ -183,19 +195,29 @@ npx skills add https://github.com/tobi/qmd --skill qmd
183
195
 
184
196
  ## 6. 未来规划
185
197
 
186
- 当前版本是 **v0.2**(预览版)。完整计划见 [`ROADMAP.md`](./ROADMAP.md)。主要项目:
198
+ Lumina-Wiki 正在快速演进。这是我们的用户路线图:
199
+
200
+ **近期计划(稳定性与新导入支持)**
201
+ - [ ] **`/lumi-help` 技能:** 智能助手,帮您即时学习和使用 Lumina-Wiki。
202
+ - [x] **多语言安装:** 安装时可选英文、越南文或中文作为主语言。*(v1.2 已发布)*
203
+ - [ ] **原生 DOCX 与图片 OCR:** 直接将 Word 文件和截图导入您的维基。
204
+ - [ ] **高级论文排名:** 查看研究论文的影响力评分和质量信号。
205
+ - [x] **改进的 CI/CD:** 正式支持 Bun 和 Node 22 环境。*(v1.2 已发布)*
187
206
 
188
- **v1.0.0 — 首个稳定版**
189
- - **定期查找新资料** 已保存的研究主题可以按你选择的频率再次检查。
190
- - 新技能 `/lumi-research-watchlist`,帮助你选择和更新要跟踪的研究主题。
191
- - 锁定 v0.1 的稳定接口(CLI flags、退出码、schema 字段名)。
192
- - 跨平台 CI 矩阵(macOS + Linux + Windows,Node 20 + 22)。
207
+ **长期计划(深度研究与集成)**
208
+ - [ ] **全球数据源扩展:** 直接集成 OpenAlex、CORE 和 Unpaywall。
209
+ - [ ] **RSS 与博客监控:** 自动从您喜爱的实验室博客中发现新论文。
210
+ - [ ] **Google Workspace:** 直接将 Google Docs 和 Sheets 导入知识图谱。
211
+ - [ ] **多媒体支持:** 通过转录处理 YouTube 视频和音频录音。
212
+ - [ ] **知识图谱审计:** 自动检测矛盾和结构偏移。
193
213
 
194
- **v2.0.0 — 扩展 Research Pack 的论文来源**
195
- - **新论文来源:** OpenAlex、Unpaywall、CORE(优先级 1)→ OpenReview、Hugging Face Papers、Papers With Code(优先级 2)→ Crossref、DOAJ、研究实验室博客 RSS(优先级 3)。
196
- - **论文评估:** 新技能 `/lumi-rank`,将 influential-citation count、领域归一化排名、Scite support/contrast 和 Altmetric 添加到 frontmatter 的 `ranking:` 区块。
214
+ **计划中**
215
+ - [ ] **桌面端应用:** 专用的图形界面环境,方便管理维基。
216
+ - [ ] **专业科学包:** 为生物医学和物理研究人员提供深度集成。
217
+
218
+ ---
219
+ *完整的技术细节请见 [`ROADMAP.md`](./ROADMAP.md)。想要贡献?欢迎在 GitHub 上加入我们!*
197
220
 
198
- **想贡献?** 选择 `ROADMAP.md` 中任何未勾选的项目,开 issue 认领,然后提交 PR。所有论文来源 fetcher 都遵循 `src/tools/` 中相同模式(CLI + JSON、no async、退出码 `0/2/3`),很适合作为第一次贡献。请参考下面的本地开发步骤。
199
221
 
200
222
  ---
201
223
 
package/bin/lumina.js CHANGED
@@ -95,7 +95,7 @@ Flags applicable to all commands:
95
95
  --packs <list> install packs: core,research,reading
96
96
  --ide-targets <list> target CLIs: claude_code,codex,gemini_cli,qwen,iflow,cursor,generic
97
97
  codex covers all AGENTS.md-compatible CLIs
98
- (Codex, Amp, Crush, Goose, Auggie, OpenCode, etc.)
98
+ (OpenAI CodexApp (ChatGPT), Amp, Crush, Goose, Auggie, OpenCode, etc.)
99
99
 
100
100
  Examples:
101
101
  npx lumina-wiki install
@@ -140,6 +140,8 @@ program
140
140
  .addOption(new Option('--project-name <name>', 'override auto-derived project name').hideHelp())
141
141
  .option('--communication-language <language>', 'language agents use when talking to the user')
142
142
  .option('--document-output-language <language>', 'language used for wiki documents')
143
+ .option('--lang <code>', 'installer UI locale: en, vi, zh')
144
+ .option('--force-locale-switch', 'allow switching installer locale during upgrade')
143
145
  .action(async (cmdOpts) => {
144
146
  const globalOpts = program.opts();
145
147
  const mergedDir = cmdOpts.directory ?? cmdOpts.cwd ?? globalOpts.directory ?? globalOpts.cwd ?? process.cwd();
@@ -161,8 +163,12 @@ program
161
163
  projectName: cmdOpts.projectName,
162
164
  communicationLang: cmdOpts.communicationLanguage,
163
165
  documentOutputLang: cmdOpts.documentOutputLanguage,
166
+ lang: cmdOpts.lang,
167
+ forceLocaleSwitch: Boolean(cmdOpts.forceLocaleSwitch),
164
168
  });
165
169
  } catch (err) {
170
+ // Top-level catch: locale may not be resolved yet (pre-loadLocale path).
171
+ // Error strings kept as EN literals — machine-readable, intentionally exempt.
166
172
  const isPermError = err.code === 'EACCES' || err.code === 'EPERM';
167
173
  const isRangeError = err instanceof RangeError;
168
174
  console.error(`[error] ${err.message}`);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "lumina-wiki",
4
- "version": "1.0.0",
4
+ "version": "1.2.0",
5
5
  "description": "Domain-agnostic, multi-IDE wiki scaffolder — Karpathy's LLM-Wiki vision, cross-platform and pack-based.",
6
6
  "keywords": [
7
7
  "llm-wiki",
@@ -35,6 +35,8 @@
35
35
  "src/installer/banner.js",
36
36
  "src/installer/commands.js",
37
37
  "src/installer/fs.js",
38
+ "src/installer/locales.js",
39
+ "src/installer/locales/*.mjs",
38
40
  "src/installer/manifest.js",
39
41
  "src/installer/prompts.js",
40
42
  "src/installer/template-engine.js",
@@ -45,8 +47,13 @@
45
47
  "src/scripts/reset.mjs",
46
48
  "src/scripts/schemas.mjs",
47
49
  "src/scripts/discover-runner.mjs",
50
+ "src/scripts/external-ids.mjs",
51
+ "src/scripts/parse-ids.mjs",
52
+ "src/scripts/merge-ids.mjs",
53
+ "src/scripts/build-source.mjs",
48
54
  "src/scripts/lib/*.mjs",
49
55
  "src/skills/**/*.md",
56
+ "src/tools/_cache.py",
50
57
  "src/tools/_env.py",
51
58
  "src/tools/extract_pdf.py",
52
59
  "src/tools/discover.py",
@@ -57,6 +64,7 @@
57
64
  "src/tools/fetch_wikipedia.py",
58
65
  "src/tools/fetch_s2.py",
59
66
  "src/tools/fetch_deepxiv.py",
67
+ "src/tools/id_utils.py",
60
68
  "src/tools/requirements.txt",
61
69
  "CHANGELOG.md",
62
70
  "README.md",
@@ -75,8 +83,8 @@
75
83
  "devDependencies": {},
76
84
  "scripts": {
77
85
  "test": "npm run test:installer",
78
- "test:installer": "node --test src/installer/commands.test.js src/installer/fs.test.js src/installer/manifest.test.js src/installer/template-engine.test.js src/installer/update-check.test.js",
79
- "test:scripts": "node --test src/scripts/lint.test.mjs src/scripts/reset.test.mjs src/scripts/wiki.test.mjs src/scripts/discover-runner.test.mjs",
86
+ "test:installer": "node --test src/installer/commands.test.js src/installer/fs.test.js src/installer/locales.test.js src/installer/manifest.test.js src/installer/prompts.test.js src/installer/readme-templates.test.js src/installer/template-engine.test.js src/installer/update-check.test.js",
87
+ "test:scripts": "node --test src/scripts/lint.test.mjs src/scripts/reset.test.mjs src/scripts/wiki.test.mjs src/scripts/discover-runner.test.mjs src/scripts/external-ids.test.mjs src/scripts/parse-ids.test.mjs src/scripts/merge-ids.test.mjs src/scripts/build-source.test.mjs src/scripts/wiki-yaml-object.test.mjs",
80
88
  "test:python": "python3 -m pytest src/tools/tests -q",
81
89
  "test:all": "npm run test:installer && npm run test:scripts && npm run test:python",
82
90
  "test:fs": "node --test src/installer/fs.test.js",
@@ -84,6 +92,7 @@
84
92
  "test:template": "node --test src/installer/template-engine.test.js",
85
93
  "test:update": "node --test src/installer/update-check.test.js",
86
94
  "ci:idempotency": "node scripts/ci-idempotency.mjs",
95
+ "ci:cold-start": "node scripts/measure-cold-start.mjs",
87
96
  "ci:package": "node scripts/ci-package.mjs",
88
97
  "pack:check": "npm run ci:package",
89
98
  "dev:install": "node bin/lumina.js install",
@@ -7,6 +7,9 @@
7
7
  * subshells. Respects NO_COLOR by emitting plain text.
8
8
  *
9
9
  * Narrow terminals (<80 cols) get a compact fallback so lines do not wrap.
10
+ *
11
+ * Banner runs before locale selection; literal EN by design.
12
+ * ASCII art is locale-agnostic; only tagline+footer use hardcoded EN strings.
10
13
  */
11
14
 
12
15
  const NO_COLOR = Boolean(process.env.NO_COLOR);