Skip to content

Releases: DeconBear/kbase

KBase v0.4.1

Choose a tag to compare

@github-actions github-actions released this 10 Jul 05:20
242976a

What's Changed

Full Changelog: v0.4.0...v0.4.1

KBase v0.4.0

Choose a tag to compare

@github-actions github-actions released this 07 Jul 14:51

Full Changelog: v0.3.7...v0.4.0

KBase v0.3.7

Choose a tag to compare

@github-actions github-actions released this 24 Jun 14:48

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

Full Changelog: v0.3.6...v0.3.7

KBase v0.3.6

Choose a tag to compare

@github-actions github-actions released this 14 Jun 18:04

Full Changelog: v0.3.5...v0.3.6

KBase v0.3.5

Choose a tag to compare

@github-actions github-actions released this 14 Jun 15:21

Full Changelog: v0.3.4...v0.3.5

KBase v0.3.4

Choose a tag to compare

@github-actions github-actions released this 14 Jun 14:00

Full Changelog: v0.3.2...v0.3.4

KBase v0.3.2

Choose a tag to compare

@github-actions github-actions released this 14 Jun 11:20

Full Changelog: v0.3.1...v0.3.2

v0.3.1 — Article reader 3-column layout + tab/AI-chat fixes

Choose a tag to compare

@DeconBear DeconBear released this 14 Jun 09:17

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

Choose a tag to compare

@DeconBear DeconBear released this 13 Jun 12:33

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 as multipart/form-data to a
    cloud OCR endpoint configured via OCR_API_URL + OCR_API_KEY
    in data/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
    set LLM_API_KEY in local.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-4o or deepseek-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 same ENV_KEY_TO_INPUT map
    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' and Page 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/post and
    the multipart-form upload completes per page.
  • POST /api/extract-info/ with the DeepSeek key → 4.56s
    end-to-end parse of s41467-024-54178-1.pdf → all 7
    authors + DOI + venue + tags extracted correctly.

Build

  • kbase.spec hiddenimports now lists kb.engines.ocr and
    kb.engines.llm_vision so PyInstaller bundles the new modules
    into the frozen exe.
  • data/ is fully gitignored (line 195 of .gitignore); the
    user-provided data/local.env with the DeepSeek key never
    entered git history.
  • dist/KBase/KBase.exe rebuilt and verified against the new
    features.

Roll-up commits since v0.2.0

  • 220e2c0 feat(parsers): add LLM-vision and cloud-OCR PDF engines
  • 84765c1 fix(notes): slash and @ command picks no longer freeze the editor
  • 6a8d0b9 fix(notes): pin 文章小记 header, add delete, extend @ to articles
  • ef2a3da feat(notes): 文章小记 — article-scoped notes + selection toolbar
  • 08fce16 fix(notes): arrow keys now navigate slash menu one item at a time
  • abb1ede feat(notes): hide markers, slash menu IME support, rich emoji panel
  • d1451d1 fix(notes): gutter hover, block anchors, AI menu — verified end-to-end

Patch dc245aa (post-release fix)

  • public_local_env() filters through KNOWN_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

Choose a tag to compare

@DeconBear DeconBear released this 13 Jun 11:04

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 via notes.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 broken document.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 by setValue + setSelection.
  • withMdMode no 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
    handleSlashMenuKeydown were collapsed into one.
  • The floating-note editor was rendering on a black canvas because
    Vditor was constructed with theme: '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
    for notes.article_id, get_notes_for_article() for the article
    panel, [art-link:<id>] link resolution in sync_note_links.

Internal

  • All notes editor and floating-note editor mutations now go
    through the same slash / @ / block-gutter pipeline; the
    floating note's Vditor instance calls attachSlashListeners
    • attachBlockGutter from its after hook.
  • init() now eagerly awaits loadNotebooksAndNotes() 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_note persists article_id on update; createNote
    accepts an article_id + slug and 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

  • 84765c1 fix(notes): slash and @ command picks no longer freeze the editor
  • 6a8d0b9 fix(notes): pin 文章小记 header, add delete, extend @ to articles
  • ef2a3da feat(notes): 文章小记 — article-scoped notes + selection toolbar
  • 08fce16 fix(notes): arrow keys now navigate slash menu one item at a time
  • abb1ede feat(notes): hide markers, slash menu IME support, rich emoji panel
  • d1451d1 fix(notes): gutter hover, block anchors, AI menu — verified end-to-end
  • a1b9ed5 feat(notes): block anchors, hover gutter, AI menu, full shortcuts
  • 497e781 refactor(notes): notebooks, document tree, multi-tab, 4-tab right panel
  • 89776cd feat(notes): add notebooks, document tree, and block anchors
  • fa7b43e refactor(notes): introduce store, fix save races, add toast + skeleton