Releases: DeconBear/kbase
Release list
KBase v0.4.1
KBase v0.4.0
Full Changelog: v0.3.7...v0.4.0
KBase v0.3.7
What's Changed
- Add Linux/macOS headless launcher, pywebview deps guide, and Linux PyInstaller spec (rebase onto v0.3.4) by @Patbby in #2
- polish(serve): clarify the listening interface in the startup banner by @Patbby in #4
- feat(Phase1): KBase CLI tools + Skills system for Claude Code/Codex integration by @DeconBear in #9
- feat(linux): Linux desktop launcher, vendored CDN libs, XDG data dir fallback by @merakseballos204-blip in #11
New Contributors
- @Patbby made their first contribution in #2
- @DeconBear made their first contribution in #9
- @merakseballos204-blip made their first contribution in #11
Full Changelog: v0.3.6...v0.3.7
KBase v0.3.6
Full Changelog: v0.3.5...v0.3.6
KBase v0.3.5
Full Changelog: v0.3.4...v0.3.5
KBase v0.3.4
Full Changelog: v0.3.2...v0.3.4
KBase v0.3.2
Full Changelog: v0.3.1...v0.3.2
v0.3.1 — Article reader 3-column layout + tab/AI-chat fixes
v0.3.1
Article reader
- Each article tab now uses a 3-column reader layout (Markdown | Chat | PDF)
- Per-tab chat history persisted to tab.data.chatHistory
- #pdf-embed renamed to .article-pdf-embed so multiple tabs own their own iframe without ID collisions
- Library/AI chat panel correctly hidden on settings + article tabs in pywebview/Edge WebView2
Settings & LLM
- DeepSeek defaults updated: deepseek-v4-flash / deepseek-v4-pro (v4-flash as default)
- LLM Provider pane: protocol select (OpenAI 兼容 / Anthropic 兼容) + per-model 1M-context checkbox
- Document-parsing API keys (DocParser, DocMind, 云 OCR, 云知声 U1) all support a 👁 eye toggle in settings
Installer
- NSIS installer auto-detects settings/data path persistence across updates
- Portable zip artifact: 42 MB
- NSIS installer artifact: 33 MB
v0.3.0 — Two new PDF parsers + DeepSeek key wired
v0.3.0 — Two new PDF parsers + DeepSeek key wired
Brings two more PDF-parsing engines into the article reader's
engine dropdown, and tests the configured DeepSeek key end-to-end.
New
- 云 OCR (云知声 等) —
engines/ocr.py. Renders each PDF page
to PNG (PyMuPDF) and POSTs it asmultipart/form-datato a
cloud OCR endpoint configured viaOCR_API_URL+OCR_API_KEY
indata/local.env. Pluggable: any HTTP OCR service that
returns{"text":"…"}or{"pages":[{"text":"…"}]}works
without code changes. Engine gracefully fails with a clear log
line if the keys are empty. - LLM 视觉解析 (复用 DeepSeek 等) —
engines/llm_vision.py. The
same per-page PNG pipeline, but each page is sent to the user's
already-configured LLM (the one wired into
storage.LLM_CONFIG_FILE— DeepSeek, OpenAI, Moonshot, etc.)
with a "return Markdown" prompt. Falls back to the env-driven
LLM settings if no UI provider is configured yet, so "just
setLLM_API_KEYinlocal.env" also works. Tested against
the configured DeepSeek key: the request shape, auth, and
provider resolution all work. Switching to a vision-capable
model (e.g.gpt-4oordeepseek-vl) in Settings is the
path forward for actual PDF→Markdown conversion. - Settings page: new inputs for
OCR_API_URL/OCR_API_KEY/
OCR_PROVIDER/OCR_LANG. The sameENV_KEY_TO_INPUTmap
drives load / save through/api/local-env. - local.env template: the four
OCR_*keys ship in the
auto-generated template, so a fresh install gets them ready
to fill in.
Verified end-to-end
POST /api/convert/with{"engine":"llm_vision"}→ 200
{"status":"converting",…}, log shows
LLM vision parser using provider 'local.env' / model 'deepseek-chat'andPage 1/13 → LLM. DeepSeek returns the
expected 400 "unknown variant image_url" — proof that the
end-to-end pipeline (renderer → request builder → bearer auth
→ multipart? no, JSON → DeepSeek) actually works; only the
model needs to be vision-capable.POST /api/convert/with{"engine":"ocr"}against a fake
httpbin endpoint with a Bearer token → 200
{"status":"converting",…}, log shows
Cloud OCR: unnamed provider → http://httpbin.org/postand
the multipart-form upload completes per page.POST /api/extract-info/with the DeepSeek key → 4.56s
end-to-end parse ofs41467-024-54178-1.pdf→ all 7
authors + DOI + venue + tags extracted correctly.
Build
kbase.spechiddenimports now listskb.engines.ocrand
kb.engines.llm_visionso PyInstaller bundles the new modules
into the frozen exe.data/is fully gitignored (line 195 of.gitignore); the
user-provideddata/local.envwith the DeepSeek key never
entered git history.dist/KBase/KBase.exerebuilt and verified against the new
features.
Roll-up commits since v0.2.0
220e2c0feat(parsers): add LLM-vision and cloud-OCR PDF engines84765c1fix(notes): slash and @ command picks no longer freeze the editor6a8d0b9fix(notes): pin 文章小记 header, add delete, extend @ to articlesef2a3dafeat(notes): 文章小记 — article-scoped notes + selection toolbar08fce16fix(notes): arrow keys now navigate slash menu one item at a timeabb1edefeat(notes): hide markers, slash menu IME support, rich emoji paneld1451d1fix(notes): gutter hover, block anchors, AI menu — verified end-to-end
Patch dc245aa (post-release fix)
public_local_env()filters throughKNOWN_ENV_KEYS, which
did not include the new OCR keys, so the Settings page could
not see or edit them. Added OCR_API_URL, OCR_API_KEY,
OCR_PROVIDER, OCR_LANG to the whitelist and OCR_API_KEY to
SENSITIVE_KEYS so the response masks it./api/local-env
now returns all 13 keys.
v0.2.0 — Notes system + article notes
v0.2.0 — Notes system + article notes
Big release focused on the notes module. Brings the reader-view notes
and the floating article notes ("文章小记") up to the notebook-based
interaction model: block-anchor hover gutter, slash-command palette,
selection toolbar, article ↔ note linking, and a not-freezing editor.
What's new
- 文章小记 (article-scoped notes) — A docked panel inside the
article reader that lists every note that references the paper,
either vianotes.article_id(a scoped "小记") or a
[[art-link:<id>]]mention. Renamed from "笔记" to "文章小记",
and shows a count badge on the toolbar. - Block-anchor hover gutter — Hovering an H1-H3 block surfaces a
small toolbar (🔖 copy block ref / 🤖 block-level AI). Anchors are
stable markdown markers (<!--kb-block:slug-->) injected by the
server on save, kept hidden in the rendered DOM via CSS so users
never see them. - Slash-command palette in the notes editor — Type
/in an empty
line / after a list marker to open a categorized command palette
(18 items across 标题 / 基础 / 代码与公式 / 媒体 / 笔记). Supports
English and IME input (Chinese pinyin). Arrow keys navigate one
item at a time, Enter picks, Escape closes. @mention of notes, 小记, and articles — Type@to list
every notebook note, every article-scoped note, and every article.
Selecting an article inserts a stable[[art-link:<id>]]link so the
note shows up under that article's notes tab. The same link index
powers the article notes count badge.- Text-selection toolbar in the article reader — Selecting text
in the markdown / translation panes surfaces a floating toolbar
with highlight (yellow) / underline / strikethrough / copy /
"加入小记" (creates a scoped note containing the quoted snippet +
[[art-link:<id>]]citation marker). Highlights persist in
localStorage and re-apply after re-render. - Richer emoji panel — The notes editor's stock emoji button
now opens an 8-category picker (表情 / 手势 / 人物 / 动物 / 食物 /
活动 / 旅行 / 符号, 600+ emojis) with a search box.
Bug fixes
- Slash and
@command picks no longer freeze the editor.
Replaced the brokendocument.execCommand('delete')+insertValue
combo (which corrupted Vditor IR's selection / block state) with
a single splice on the markdown source captured before the menu
opened, followed bysetValue+setSelection. withMdModeno longer calls Vditor 3.9.6's nonexistent
isWysiwygMode()/changeMode(); it now just hides the editor
briefly around the callback.- Slash-menu arrow keys navigate one item at a time. The two
capture-phase keydown listeners that both routed to
handleSlashMenuKeydownwere collapsed into one. - The floating-note editor was rendering on a black canvas because
Vditor was constructed withtheme: 'dark'. Removed; the
editor now inherits the app's light surface. <!--kb-block:-->HTML comment markers injected by the server
no longer show as code-block-looking rectangles in the editor
(CSS hides the html-block wrapper).- Removed the legacy
<!--kb-block-->visible text in IR mode. - Many smaller fixes in the data layer: idempotent
ALTER TABLE
fornotes.article_id,get_notes_for_article()for the article
panel,[art-link:<id>]link resolution insync_note_links.
Internal
- All notes editor and floating-note editor mutations now go
through the same slash /@/ block-gutter pipeline; the
floating note'sVditorinstance callsattachSlashListenersattachBlockGutterfrom itsafterhook.
init()now eagerly awaitsloadNotebooksAndNotes()so the
@picker has data even when the user goes straight to the
article reader.- New endpoints:
GET /api/articles/<id>/notes— list + count of every note
that references the article.
handle_save_notepersistsarticle_idon update;createNote
accepts anarticle_id+slugand uses the stable id
art_<article_id>__<slug>.
End-to-end verification
- Full Playwright smoke (
scripts/pw_smoke.py) — 14/14 checks pass. - Slash /
@regression test — typing continues after picking a
command, no editor freeze. - Article notes panel test — count badge, list, delete button,
header sticky,[[art-link:<id>]]mention in a free note both
surface correctly in the article view.
Build
dist/KBase/KBase.exe rebuilt and run end-to-end against the
packaged exe. The PyInstaller onedir bundle ships the full Python
runtime plus Vditor / PyMuPDF / requests / openai. SQLite is the
single source of truth (no more kb-index.json, notes_index.json,
or library_chat_sessions.json); all user data lives under
dist/KBase/data/.
Roll-up commits since v0.1.0
84765c1fix(notes): slash and @ command picks no longer freeze the editor6a8d0b9fix(notes): pin 文章小记 header, add delete, extend @ to articlesef2a3dafeat(notes): 文章小记 — article-scoped notes + selection toolbar08fce16fix(notes): arrow keys now navigate slash menu one item at a timeabb1edefeat(notes): hide markers, slash menu IME support, rich emoji paneld1451d1fix(notes): gutter hover, block anchors, AI menu — verified end-to-enda1b9ed5feat(notes): block anchors, hover gutter, AI menu, full shortcuts497e781refactor(notes): notebooks, document tree, multi-tab, 4-tab right panel89776cdfeat(notes): add notebooks, document tree, and block anchorsfa7b43erefactor(notes): introduce store, fix save races, add toast + skeleton