Commit Graph

465 Commits

Author SHA1 Message Date
6021ea34ac
Merge pull request #1 from ai-workspace-services/codex-feat-nvidia-embedding-remote-sync
Codex feat nvidia embedding remote sync
2026-06-12 07:34:39 +08:00
Haitao Pan
77024f7904 feat: add NVIDIA embedding API support and QMD remote sync 2026-06-12 07:32:43 +08:00
Haitao Pan
e3711767c6 fix: disable local qmd models by default 2026-05-23 11:04:48 +08:00
Haitao Pan
7c17c8bcce feat: default to NVIDIA embeddings 2026-05-09 16:50:04 +08:00
Haitao Pan
fbad5791e3 feat: support NVIDIA embedding API 2026-05-09 16:44:47 +08:00
Haitao Pan
49fc83ebe2 Default embeddings to external API 2026-05-07 16:19:18 +08:00
Tobias Lütke
e8de7cab02 fix(cli): make status device probe opt-in 2026-04-21 21:45:52 -04:00
Tobi Lütke
cfd640ed34
fix(test): resolve LLM test timeouts by disabling file parallelism
Parallel test files each cold-load their own LLM model, competing for
CPU and causing timeouts even at 120s. Sequential execution eliminates
contention — tests that timed out at 30s now complete in 1-15s.

Made-with: Cursor
2026-04-11 01:21:22 +00:00
Tobi Lütke
3023ab3c99
fix: bump transitive deps to resolve security alerts
npm: vite 7.3.1→7.3.2, hono 4.12.10→4.12.12,
@hono/node-server 1.19.12→1.19.13

pypi: add uv constraint-dependencies for authlib>=1.6.9,
aiohttp>=3.13.4, cryptography>=46.0.7

Made-with: Cursor
2026-04-11 01:07:09 +00:00
Tobias Lütke
525b9970cd
Merge pull request #546 from junmo-kim/fix/handelize-preserve-case
fix: preserve original case in handelize()
2026-04-10 20:48:24 -04:00
Tobias Lütke
3295294be3
Merge pull request #532 from kuishou68/fix-qmd-uri-index-query
fix: include custom index in qmd:// links
2026-04-10 20:47:55 -04:00
Tobias Lütke
46c4dfdaac
Merge pull request #545 from kuishou68/fix-sqlite-vec-actionable-guidance
fix(store): surface actionable sqlite-vec guidance
2026-04-10 20:47:16 -04:00
Tobias Lütke
89df31142d
Merge pull request #548 from kevinburkesegment/fix-gguf-magic-error
fix: detect and explain non-GGUF model files after download
2026-04-10 20:46:59 -04:00
Tobias Lütke
b1dc848086
Merge pull request #554 from bek91/codex/harden-embedding-overflow
fix: Harden embedding overflow handling
2026-04-10 20:46:40 -04:00
Tobias Lütke
b2ffd10cb8
Merge pull request #555 from max0n232/fix/windows-home-fallback
fix: add USERPROFILE fallback for Windows HOME resolution
2026-04-10 20:45:55 -04:00
max0n232
77e71d09f2 fix: add USERPROFILE fallback for Windows HOME resolution
On Windows, `HOME` is not a standard environment variable — the
equivalent is `USERPROFILE`. When MCP clients (e.g. Claude Code)
spawn the QMD server as a subprocess, they pass `USERPROFILE` but
not `HOME`. This causes QMD to fall back to `/tmp`, opening an
empty database instead of the user's actual index.

Fix: check `USERPROFILE` before falling back to `/tmp`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 00:20:07 +03:00
Bek
e4990e470e Harden embedding overflow handling 2026-04-10 16:02:46 -04:00
Kevin Burke
f53ee26213
fix: detect and explain non-GGUF model files after download
When a proxy or firewall intercepts HuggingFace downloads, the cached
file is an HTML page instead of a GGUF model. Previously this surfaced
as an opaque "Invalid GGUF magic" error from node-llama-cpp.

Now we validate the GGUF magic bytes right after download, detect HTML
pages specifically, delete the bad file, and show an actionable error
message with workarounds (HF_ENDPOINT mirror, manual download path).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 13:27:46 -07:00
Kim Junmo
bb5becaf81 Merge remote-tracking branch 'origin/main' into fix/handelize-preserve-case
# Conflicts:
#	CHANGELOG.md
2026-04-09 18:27:16 +09:00
kuishou68
0adbdeb337 fix(store): surface actionable sqlite-vec guidance 2026-04-09 10:13:40 +08:00
Tobias Lütke
171e9e3e65
Merge pull request #530 from kuishou68/fix-status-no-build-probe 2026-04-08 21:19:56 -04:00
Tobias Lütke
414fee520b
Merge pull request #533 from rymalia/fix/json-line-field 2026-04-08 21:19:42 -04:00
Tobias Lütke
9990ca01b4
Merge pull request #534 from erskingardner/fix-529-qmd-llama-gpu-override 2026-04-08 21:19:23 -04:00
Tobias Lütke
33bdf9a308
Merge pull request #537 from fenrire/fix/mcp-production-mode 2026-04-08 21:18:50 -04:00
Kim Junmo
fee576bf98 fix: migrate legacy lowercase paths on reindex
When qmd update runs against an index created before case-preservation,
documents may exist under lowercase paths (e.g. "skill.md" for a file
actually named "SKILL.md"). Add findOrMigrateLegacyDocument() that:

- Falls back to a lowercase lookup when the canonical path is not found
- Renames the document path in-place via UPDATE OR IGNORE
- Manually rebuilds the FTS entry (FTS5 INSERT OR REPLACE does not
  reliably update existing rows via triggers)
- Handles UNIQUE conflicts gracefully (returns null on conflict)

Embeddings are keyed by content hash, so the rename preserves all
existing vectors — no re-embedding required.

Both the CLI indexer and the library reindexer share the same helper,
eliminating the duplication that a previous review flagged.

Includes integration tests for: successful migration, already-lowercase
no-op, and UNIQUE conflict handling.
2026-04-09 08:25:00 +09:00
Kim Junmo
9fb9de4fd2 fix: preserve original case in handelize()
The blanket .toLowerCase() in handelize() drops filename casing,
which breaks path resolution on case-sensitive filesystems (Linux).
Files like README.md, CHANGELOG.md, and SKILL.md become unreachable
when the index stores them as readme.md, changelog.md, skill.md.

Since FTS5 already performs case-insensitive matching via the
unicode61 tokenizer, lowercasing the stored path provides no search
benefit — it only corrupts the metadata used to locate files on disk.

Remove .toLowerCase() and update all affected test expectations.
2026-04-09 07:59:22 +09:00
jungholee
9dd8a738f9 fix(mcp): call enableProductionMode before getDefaultDbPath
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 19:55:07 +09:00
Ryan Malia
17074eafa1 fix: include line in CLI --json search output
but that function has no callers — the CLI's outputResults() uses its
own inline JSON formatting that destructured only .snippet from
extractSnippet(), discarding .line. Extract the full SnippetResult
and spread the line field into the JSON output object.

Closes #505
2026-04-07 11:53:09 -07:00
Jeff Gardner
1ecb5c9f96
Fix QMD_LLAMA_GPU backend override handling 2026-04-07 18:49:22 +02:00
cocoon
8404cc3bb1 fix(uri): include index in custom qmd links 2026-04-07 23:26:19 +08:00
cocoon
26e3d0c077 fix(status): avoid build attempts during device probe 2026-04-07 23:18:58 +08:00
Tobi Lutke
c2f3a40372
Derive flake version from package.json 2026-04-05 19:17:15 -04:00
Tobi Lutke
986fca3564
Add homeModules.default for home-manager integration 2026-04-05 19:10:22 -04:00
Tobi Lutke
65cd1b3fd0
fix(nix): update aarch64-darwin node_modules hash 2026-04-05 18:47:44 -04:00
Tobi Lutke
a02b9fe016
fix: update nix flake hash and stabilize bun test ordering
Update x86_64-linux node_modules hash after dependency pinning.
Add _resetProductionModeForTesting to fix getDefaultDbPath test
that fails when bun runs all test files in a single process.
Remove duplicate path/handelize tests from store.test.ts.
2026-04-05 18:44:40 -04:00
Tobi Lutke
66e70c028e
fix(test): reset _productionMode in getDefaultDbPath test
Bun runs all test files in a single process, so module-level state
leaks between files. The getDefaultDbPath test now resets the
_productionMode flag before asserting it throws, fixing the flaky
failure on Bun (ubuntu-latest) in CI.
2026-04-05 18:39:51 -04:00
Tobi Lutke
32e504c883
fix(test): remove duplicate path/handelize tests from store.test.ts
These tests are already in store.helpers.unit.test.ts. The duplicates
in store.test.ts failed in CI because _productionMode module state
leaked from earlier tests in the same bun process, causing
getDefaultDbPath to return a path instead of throwing.
2026-04-05 18:31:17 -04:00
Tobias Lütke
7b3cb550fe fix(cli): resolve strict TS build errors from #470/#502/#508
- Cast loadConfig() through unknown for editor_uri template lookup
- Type cli.opts.json access and handle string[] collection in bench
2026-04-05 18:26:21 -04:00
Tobi Lutke
4383accf0f
release: v2.1.0 2026-04-05 18:18:41 -04:00
Tobi Lutke
d9863a421a
chore: sync bun.lock with pinned dependencies 2026-04-05 18:18:31 -04:00
Tobi Lutke
68d0b314f5
docs: add release highlights for 2.1.0 2026-04-05 18:18:20 -04:00
Tobi Lutke
79a53f856e
docs(release): add dependency pinning policy and update check step
Release process now checks for sqlite-vec, node-llama-cpp, and
better-sqlite3 updates before cutting a release. All deps must be
pinned to exact versions.
2026-04-05 18:17:13 -04:00
Tobi Lutke
9c0d100a09
chore: pin all dependencies to exact versions
Remove ^ ranges from all dependencies, optionalDependencies, and
devDependencies. Lockfile ensures reproducible installs.
2026-04-05 18:17:02 -04:00
Tobi Lutke
9bafd3d0e9
docs: complete changelog for all PRs merged since v2.0.1
Cover ~25 community PRs including embedding stability fixes, BM25
field weight and hyphenation fixes, reranker context sizing, launcher
reliability, XDG compliance, and the --no-rerank flag.
2026-04-05 18:15:09 -04:00
Tobi Lutke
cc32c9958d
fix: approve native build scripts and update vitest
Add pnpm.onlyBuiltDependencies to whitelist packages that need
install/postinstall scripts (better-sqlite3, esbuild, node-llama-cpp,
tree-sitter-*). Without this, pnpm silently skips native compilation
causing all tests that touch SQLite to fail.

Also bumps vitest from ^3.0.0 to ^3.2.4.
2026-04-05 18:13:31 -04:00
Tobias Lütke
54fc7b01a9 Merge pull request #502 from JohnRichardEnders/feat/yaml-model-config
feat: support model configuration in index.yml
2026-04-05 18:02:29 -04:00
Tobias Lütke
4f11517fb4 docs: add changelog entry for YAML model config 2026-04-05 18:02:26 -04:00
JohnRichardEnders
8644fa99d1 fix(store): thread embed model URI to format functions for correct prompt detection
When the embed model is configured via YAML (not env var), formatDocForEmbedding
and formatQueryForEmbedding callers in store.ts would fall back to the default
model, producing the wrong prompt format. This adds a public embedModelName
getter on LlamaCpp and threads it through all five call sites.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 18:00:34 -04:00
JohnRichardEnders
ce0cd64409 feat(mcp): pass YAML config path to createStore for model resolution
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 18:00:09 -04:00
JohnRichardEnders
c8d49d26da feat(cli): configure LlamaCpp singleton from YAML models config
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 18:00:09 -04:00