Commit Graph

3354 Commits

Author SHA1 Message Date
diegosouzapw
533db63a86 merge(F9): E2E + docs + i18n consolidation 2026-05-28 13:59:27 -03:00
diegosouzapw
eab8b12171 fix(memory): align legacy cli-memory-commands test with D17 type mapping + env doc tweaks
Plan 21 / D17 — CLI now remaps legacy types (user/feedback/project/reference) to
canonical (factual/episodic/procedural/semantic). The legacy assertion in
cli-memory-commands.test.ts still expected 'user'; update to expect 'factual'.

Also includes incidental .env.example + docs/ENVIRONMENT.md + qdrant
embedding-models route tweaks captured by F10 audit pass.
2026-05-28 13:59:19 -03:00
diegosouzapw
517385e789 docs(memory): F9 — E2E specs, MEMORY.md engine arch, openapi routes, i18n sort
- Add tests/e2e/memory-engine.spec.ts (7 scenarios: 3-tab render, memories table,
  add/edit modal, playground simulate, engine status chips, reindex button)
- Add tests/e2e/memory-qdrant-routes.spec.ts (3 scenarios: Qdrant config card,
  Test Connection → sanitized error without stack, Cleanup → sanitized error)
- Update docs/frameworks/MEMORY.md: add Engine architecture (3-tier ASCII diagram),
  Embedding sources table, Hybrid RRF (k=60) section, Backfill lazy+reindex section,
  Settings extension (7 new fields D9), updated REST API table (10 new routes),
  updated Dashboard section (Studio 3 tabs), MCP D16 strategy from settings, See Also
- Update docs/reference/openapi.yaml: add Memory tag + 13 new paths
  (/api/memory, /api/memory/{id} PUT, retrieve-preview, embedding-providers,
  engine-status, summarize, reindex, /api/settings/memory GET+PUT,
  /api/settings/qdrant GET+PUT+health+search+cleanup+embedding-models)
  + MemoryEntry, MemorySettingsExtended, QdrantSettings, QdrantHealthResult schemas
- Update docs/architecture/REPOSITORY_MAP.md: add embedding/, vectorStore.ts,
  reindex.ts, memoryVec.ts, memory Studio UI entries
- Sort memory.* namespace keys alphabetically in pt-BR.json and en.json
  (no duplicate found — pure reorder, no content change)
- .env.example already has all 7 vars from §3.9 (confirmed, no change needed)
2026-05-28 13:36:43 -03:00
diegosouzapw
f78713d733 merge(F7): UI Studio (3 tabs + components + hooks + i18n) 2026-05-28 12:17:31 -03:00
diegosouzapw
22d2633773 fix(memory): replace swr with native React hooks (swr not installed)
F7 originally implemented useEngineStatus/useMemorySettings via swr, but the
package is not in package.json — would crash at runtime. Replaced with native
useState + useEffect + setInterval polling. Same public API
(status/settings/isLoading/isError/mutate/save) so the existing components
and the 8 UI tests (which mock the hooks directly) keep working unchanged.
2026-05-28 12:17:31 -03:00
diegosouzapw
f8bf164180 feat(memory): implement F7 Studio UI layer for /dashboard/memory
Converts the monolithic memory page into a 3-tab Studio layout
(Memories | Playground | Engine) with URL-driven tab state, 8 new
React components, 2 SWR hooks, 50+ i18n keys, and 8 Vitest unit tests
covering all new components (45/45 passing).
2026-05-28 11:55:18 -03:00
diegosouzapw
cc243a9d47 fix(memory): defensive markNeedsReindex + drain setImmediate in legacy tests
- store.ts: wrap markMemoryNeedsReindex in safeMarkNeedsReindex helper that swallows
  errors when the DB is no longer available (e.g. test teardown after the parent
  promise resolved). Prevents fire-and-forget vector upserts from triggering
  unhandledRejection in tests.
- memory-store.test.ts: drain setImmediate in afterEach/after hooks so pending
  vector upsert tasks settle before DATA_DIR is removed.
- memory-settings.test.ts: extend deepEqual expected shape with the 7 new fields
  introduced by plan 21 F5 (embeddingSource, embeddingProviderModel,
  transformersEnabled, staticEnabled, rerankEnabled, rerankProviderModel,
  vectorStore).
2026-05-28 11:02:25 -03:00
diegosouzapw
6435a3376d merge(F6): backend REST routes (memory + settings/qdrant) 2026-05-28 11:02:16 -03:00
diegosouzapw
7e0c58b5cb feat(memory): add F6 backend REST routes for memory engine redesign (plan 21)
New routes:
- POST /api/memory/retrieve-preview (dry-run playground)
- GET  /api/memory/embedding-providers
- GET  /api/memory/engine-status
- POST /api/memory/summarize
- POST /api/memory/reindex
- GET/PUT /api/settings/qdrant
- GET /api/settings/qdrant/health
- POST /api/settings/qdrant/search
- POST /api/settings/qdrant/cleanup

Modified:
- PUT /api/memory/[id] added (Hard Rule #12 sanitize)
- /api/memory/route.ts: Hard Rule #12 fix (sanitizeErrorMessage)
- /api/settings/memory/route.ts: MemorySettingsExtendedSchema (D9 7 new fields)

Tests: 7 integration test files (33 tests total) all passing.
Hard Rules #5, #7, #8, #12 verified.
2026-05-28 10:53:55 -03:00
diegosouzapw
6f7b051289 merge(F8): MCP strategy-from-settings + CLI canonical types 2026-05-28 10:07:04 -03:00
diegosouzapw
edaa05783d fix(memory): correct operator precedence in listEmbeddingProviders hasKey check (TS18047)
The previous expression was parsed as (A && B && C) || D, allowing D to evaluate
with creds possibly null. Wrap (apiKey || accessToken) in parens so creds-narrowing
covers the whole disjunction.
2026-05-28 10:06:47 -03:00
diegosouzapw
1974628190 fix(mcp,cli): read retrieval strategy from settings + update CLI memory types (plan 21 F8)
- memoryTools.ts: replace hardcoded retrievalStrategy:"exact" with getMemorySettings()+toMemoryRetrievalConfig(); fallback to "exact" on catch
- memory.mjs: VALID_TYPES updated to ["factual","episodic","procedural","semantic"]; default changed from "user" to "factual"; legacy types (user/feedback/project/reference) emit deprecation warning and map to "factual"
- tests: mcp-memory-tools-strategy.test.ts (7 cases) + cli-memory-types.test.mjs (12 cases)
2026-05-28 09:35:52 -03:00
diegosouzapw
f78ede0324 merge(F5): memory core rewire (retrieval+store+settings+summarization+reindex) 2026-05-28 08:29:10 -03:00
diegosouzapw
8f6651d053 feat(memory): rewire retrieval/store/settings/summarization + reindex (plan 21 F5)
- retrieval.ts — semantic/hybrid usa vectorStore quando disponível; degrada para FTS5 transparente
- retrieval.ts — adiciona retrievePreview() (dry-run para Playground) e engineStatus()
- retrieval.ts — rerank opcional via provider configurado (D13)
- store.ts — createMemory/updateMemory geram vetor best-effort; deleteMemory sincroniza vec + Qdrant (D15)
- settings.ts — 7 campos novos (embeddingSource, embeddingProviderModel, transformersEnabled, staticEnabled, rerankEnabled, rerankProviderModel, vectorStore) com defaults
- summarization.ts — summarizeMemoriesOlderThan exposta para uso manual (D19)
- reindex.ts (novo) — runReindexBatch processa fila lazy de backfill (D21)
- 9 testes unitários adicionados; testes F1-F4 sem regressão
2026-05-28 08:27:28 -03:00
diegosouzapw
bdaa045d5d merge(F4): vector store (sqlite-vec + hybrid RRF) 2026-05-28 01:26:16 -03:00
diegosouzapw
5f07341998 merge(F3): embedding layer (remote+static+transformers+cache) 2026-05-28 01:26:14 -03:00
diegosouzapw
5508dc4e3c feat(memory): add sqlite-vec vector store with hybrid RRF search (plan 21 F4)
Implements VectorStore interface contract from master plan 21 §3.4:
- sqlite-vec v0.1.9 extension loaded via createRequire (ESM compat)
- vec0 virtual table with FLOAT[N] dimensions driven by EmbeddingResolution
- Upsert via DELETE+INSERT (vec0 does not support INSERT OR REPLACE)
- BigInt rowids required by vec0 v0.1.9 for primary key insertion
- Hybrid RRF (k=60) fusing FTS5 + vector KNN via UNION ALL + GROUP BY
- FTS join on m.memory_id = fts.rowid (migration 023 bridge column)
- VECTOR_STORE_DISABLE_VEC=true test seam for null-extension path
- sanitizeErrorMessage in 3 error paths (Hard Rule #12)
- Raw SQL exception documented in header comment (Hard Rule #5 §D5)
- 27 unit tests across 5 files; all lint/typecheck/cycles checks pass
2026-05-28 01:22:38 -03:00
diegosouzapw
02bc079ef9 feat(memory): add embedding layer — remote/static/transformers/cache (plan 21 F3)
Implements the multi-source embedding layer for the Memory Engine Redesign (plan 21).
Adds 5 production modules under src/lib/memory/embedding/:
- cache.ts: LRU+TTL in-memory cache (max=1000, TTL=5min, sha256 keyed)
- remote.ts: delegates to createEmbeddingResponse(), maps HTTP 401/403→no_key, 429→rate_limited, AbortError→timeout; all errors via sanitizeErrorMessage()
- staticPotion.ts: download-once potion-base-8M (JS-only WordPiece tokenizer + mean pooling, no WASM)
- transformersLocal.ts: lazy await import('@huggingface/transformers') singleton pipeline (Xenova/all-MiniLM-L6-v2, q8)
- index.ts: resolveEmbeddingSource (pure, sync), embed (cached dispatch), listEmbeddingProviders, invalidateEmbeddingCache

Also adds @huggingface/transformers and sqlite-vec to dependencies, and registers
@huggingface/transformers in next.config.mjs serverExternalPackages (D8/D25).

6 unit test files: cache (9), resolve (14), remote (10), static-potion (13), transformers (6), list-providers (8) — all 60 tests green.
2026-05-28 00:40:56 -03:00
diegosouzapw
bb312062ea merge(F2): db migrations + memoryVec + localDb re-export 2026-05-27 23:26:22 -03:00
diegosouzapw
d12ce14168 merge(F1): shared foundation (types + schemas) 2026-05-27 23:26:20 -03:00
diegosouzapw
6ba76aa500 test(memory): add edge-case test for getMemoryVecMeta when sentinel row is absent 2026-05-27 23:22:48 -03:00
diegosouzapw
b9f93a5c07 feat(memory): add migration 073, memoryVec CRUD module, and localDb re-export (plan 21 F2)
- 073_memory_vec.sql: creates memory_vec_meta singleton table (active_dim,
  embedding_signature, last_reset_at, vec_loaded) and adds needs_reindex column
  to memories table with a partial index; idempotent via CREATE IF NOT EXISTS +
  INSERT OR IGNORE + migration runner's duplicate-column-name guard
- src/lib/db/memoryVec.ts: implements 6 CRUD functions per §3.8 contract
  (getMemoryVecMeta, setMemoryVecMeta, markMemoryNeedsReindex,
  markAllMemoriesNeedReindex, getMemoryReindexQueue, countMemoryReindexPending)
- src/lib/localDb.ts: adds re-export block for the 6 functions (Hard Rule #2)
- .env.example: documents 7 new MEMORY_* env vars per §3.9
- tests/unit/memory-vec-meta.test.ts: 7 tests (meta get/set, migration idempotency)
- tests/unit/memory-needs-reindex.test.ts: 12 tests (mark/unmark, markAll, queue)
2026-05-27 23:16:05 -03:00
diegosouzapw
6236b604ec feat(memory): add shared foundation types, Zod schemas, and roundtrip tests (plan 21 F1)
- src/lib/memory/embedding/types.ts — EmbeddingSource, EmbeddingProviderListing, EmbeddingResolution, EmbeddingResult, EmbeddingError (verbatim §3.1)
- src/shared/schemas/memory.ts — 7 Zod schemas (MemorySettingsExtended, MemoryUpdatePut, RetrievePreview, MemoryReindex, MemorySummarize, EmbeddingProviderListing, MemoryEngineStatus, RetrievePreviewResult) + z.infer types (verbatim §3.2)
- src/shared/schemas/qdrant.ts — 4 Zod schemas (QdrantSettings, QdrantSettingsUpdate, QdrantSearch, QdrantHealthResult) + z.infer types (verbatim §3.3)
- tests/unit/memory-schemas-roundtrip.test.ts — 34 assertions (≥22 required); all pass
2026-05-27 22:54:18 -03:00
diegosouzapw
722e9f41cd chore: apply unit test fixes, polyfills, and environment precedence fixes 2026-05-27 18:02:17 -03:00
JeferssonLemes
52a43d65d3 feat(modelSpecs): align opencode-go family with upstream provider limits (#2802)
Integrated into release/v3.8.6
2026-05-27 17:06:32 -03:00
Hernan Javier Ardila Sanchez
0e9aed4d03 fix(gemini): emit signaturelessToolCallMode:text for GEMINI format models (#2801)
Integrated into release/v3.8.6
2026-05-27 17:05:36 -03:00
Apostol Apostolov
87fad5d171 [codex] home: restore settings-driven home layout and quota auto-refresh (#2800)
Integrated into release/v3.8.6
2026-05-27 17:05:18 -03:00
Apostol Apostolov
f1e4c001a9 feat(logs): add clean history button (#2799)
Integrated into release/v3.8.6
2026-05-27 17:04:49 -03:00
akarray
83445a96b8 fix(oauth): repair Google loopback callback flow (#2796)
Integrated into release/v3.8.6
2026-05-27 17:04:31 -03:00
Markus Hartung
0c6c5e212e fix: Error: Unable to inspect existing database #2771 (#2795)
Integrated into release/v3.8.6
2026-05-27 17:04:13 -03:00
Paijo
aac17c01c3 fix: register missing web-cookie validators (claude-web, gemini-web, copilot-web, t3-web) (#2793)
Integrated into release/v3.8.6
2026-05-27 17:03:55 -03:00
Paijo
619463c573 fix: resolve npm install warnings — remove dead deps, relax engine constraint (#2792)
Integrated into release/v3.8.6
2026-05-27 17:03:38 -03:00
JeferssonLemes
72a46581b6 fix(opencode-go): route qwen3.x via claude messages + repair fixMissingToolResponses for Claude-shape upstreams (#2791)
Integrated into release/v3.8.6
2026-05-27 17:02:38 -03:00
diegosouzapw
722aa32939 chore: ignore .claude/settings.local.json (per-user Claude Code permissions) 2026-05-27 16:29:27 -03:00
diegosouzapw
80f8dd7863 chore: merge release/v3.8.5 into main (post-v3.8.5 hotfixes + community PRs) 2026-05-27 16:23:02 -03:00
Diego Rodrigues de Sa e Souza
3c016ce4dc Merge pull request #2790 from jeferssonlemes/feat/opencode-go-missing-models
feat(opencode-go): register 4 missing models from upstream catalog
2026-05-27 10:42:14 -03:00
diegosouzapw
7042460292 chore: merge release/v3.8.5 to resolve conflicts 2026-05-27 10:41:52 -03:00
Diego Rodrigues de Sa e Souza
10ecf693a9 Merge pull request #2789 from InkshadeWoods/main
fix(i18n): translate 162 missing zh-CN UI strings
2026-05-27 10:41:29 -03:00
diegosouzapw
d718a6cbfb chore: merge release/v3.8.5 to resolve conflicts 2026-05-27 10:41:07 -03:00
Diego Rodrigues de Sa e Souza
f32f6b841c Merge pull request #2782 from kjhq/docs/fix-readme-broken-links
docs: fix broken documentation links in README after Fumadocs migration
2026-05-27 10:31:54 -03:00
diegosouzapw
7117cea835 chore: merge release/v3.8.5 to resolve conflicts 2026-05-27 10:31:40 -03:00
Diego Rodrigues de Sa e Souza
c765a987e6 Merge pull request #2783 from JxnLexn/fix-codex
fix(codex): apply global service tiers to combo request bodies
2026-05-27 10:31:22 -03:00
diegosouzapw
a00af74279 chore: merge release/v3.8.5 to resolve conflicts 2026-05-27 10:31:09 -03:00
Diego Rodrigues de Sa e Souza
1d28fbc6f2 Merge pull request #2784 from hartmark/feature/docker-speedup
fix: speedup docker creation by reducing steps and bunch up copy operations
2026-05-27 10:30:47 -03:00
diegosouzapw
a7e1124f64 chore: merge release/v3.8.5 to resolve conflicts 2026-05-27 10:29:53 -03:00
Diego Rodrigues de Sa e Souza
4cefed33f7 Merge pull request #2785 from JxnLexn/fix-logging
fix: keep database log settings in sync with the pipeline toggle
2026-05-27 10:29:30 -03:00
diegosouzapw
02494051af chore: merge release/v3.8.5 to resolve conflicts 2026-05-27 10:29:15 -03:00
Diego Rodrigues de Sa e Souza
1f1336aa7a Merge pull request #2786 from JxnLexn/fix-combo-provider-exhaustion
Allow rate-limited provider connections after transient 429s
2026-05-27 10:28:55 -03:00
diegosouzapw
f40a20e5f8 chore: merge release/v3.8.5 to resolve conflicts 2026-05-27 10:28:40 -03:00
Diego Rodrigues de Sa e Souza
13de1c4675 Merge pull request #2787 from akarray/fix/remote-google-oauth-public-callback
fix: use public callbacks for remote Google OAuth with custom creds
2026-05-27 10:27:59 -03:00