Commit Graph

149 Commits

Author SHA1 Message Date
gramps 75202735e1 docs: collapse event types to three categories (cluster/model/application) 2026-07-06 19:01:20 -07:00
gramps f0819175f8 docs: simplify Task 11 — register/deregister drive status transitions; events are side effects 2026-07-06 18:59:33 -07:00
gramps 649f37e2b6 docs: expand Task 11 with full cluster protocol (7 message types, event log, coordinator auto-promotion) 2026-07-06 18:56:36 -07:00
gramps 8bbc836c3e docs: remove snark from README 2026-07-06 09:00:03 -07:00
gramps fcee454a32 docs: update README for v0.13.0 — RAG eviction, RabbitMQ, AMQP layer 2026-07-06 08:55:47 -07:00
gramps 975e7579cf feat: Task 10 — AMQP connection layer with aio-pika
amqp.py: connect/disconnect/get_channel/publish with auto-reconnect
  - Graceful degradation when aio-pika not installed
  - Lazy secret file reader via config.get_amqp_url()
  - Fire-and-forget publish (logs error, never raises)
  - Connection errors caught and logged (non-fatal)

config.py: AMQP_RECONNECT_DELAY, exchanges, get_amqp_url() helper

app.py: connect in lifespan after assess_hardware, disconnect on shutdown

requirements.txt: aio-pika>=9.0.0

tests/test_amqp.py: 3 mocked tests (publish success, publish disconnected
no-raise, get_channel reconnect)

135 tests pass (132 existing + 3 new)
Fixes: AGENTS.md test/run commands (venv was incomplete)
2026-07-06 08:51:36 -07:00
gramps 659339cb1f docs: document broker-mediated cluster architecture, coordinator vs worker node types
Developer-Architecture.md (§6):
  - Broker-mediated design model as preferred architecture
  - Coordinator vs Worker node type table with full service requirements
  - Service distribution ASCII diagram
  - Workers connect as AMQP clients only (no local broker needed)
  - Contrasted with service-mesh alternative

docker.md (§9):
  - New Worker Node Deployment Model section
  - Worker requirements: llama-server binary + node_agent.py + aio-pika
  - Explicit table of what workers do NOT run
  - Architecture note: broker-mediated vs service-mesh
  - Ref: AMQP-0-9-1 client-server protocol since 2006
2026-07-06 08:44:25 -07:00
gramps d1676ea73a docs: sync wiki with current architecture and roadmap
Developer-Architecture.md:
  - Module layout table (eviction.py, amqp.py, routers/)
  - External services table with ports + purposes
  - Config discovery / env var mapping
  - Chat pipeline includes upload_context injection + logprobs/perplexity
  - RAG eviction engine design (score formula, hysteresis, pinned sources)
  - AMQP cluster architecture overview (jc.admin / jc.system exchanges)
  - SSE protocol reference
  - Full test coverage table (132 tests across 18 files)
  - Hardware self-assessment section

current-wip.md:
  - Replace stale backlog with active Roadmap N table (Tasks 8-15)
  - Add post-Roadmap-N backlog (B1-B3)
2026-07-06 08:21:44 -07:00
gramps 775ad5d06e docs: mark Task 9 complete — RabbitMQ installed on ultron 2026-07-06 08:19:54 -07:00
gramps 2417659097 docs: mark Task 8 complete in TASKS.md 2026-07-06 08:10:59 -07:00
gramps 191ac2603f docs: add docker.md — full Docker distribution architecture plan
Covers all six services (jarvisChat, SearXNG, Qdrant, RabbitMQ,
llama-server, Ollama) with images, ports, volumes, healthchecks,
env mapping, secrets management, setup wizard spec, and back-out
procedure. Includes pre-v1.0 gate checklist and open decisions.

Also add .env, secrets/, searxng/ to .gitignore (these are
generated by setup.sh and contain secrets).
2026-07-06 08:09:40 -07:00
gramps 1dcd79ef96 test: add maybe_evict all-pinned break test and stats admin check
- test_maybe_evict_all_pinned_breaks: above high water but only
  pinned points → eviction breaks with 0 deleted, no EVICTION_LOG entry
- test_rag_stats_requires_admin: guest gets 403 on /api/rag/stats
2026-07-06 08:06:06 -07:00
gramps cb7a6c5cb5 fix: address three gaps in Task 8 spec compliance
- get_rag_operational_stats() now returns at_risk_count,
  pinned_count, avg_retrieval_count via scroll-based computation
- GET /api/rag/stats requires admin role (was guest-accessible)
- test_rag_stats_endpoint asserts full shape per spec
- Add test_rag_stats_requires_admin (guest → 403)
2026-07-06 08:05:14 -07:00
gramps 36e310e646 fix: add boot-time RAG eviction config validation
Log warnings during startup when high_water <= low_water,
batch <= 0, or max_vectors <= 0.
2026-07-06 08:02:41 -07:00
gramps bb16cd6927 refactor: extract eviction engine into eviction.py (rag.py 303→109 lines)
- Move all eviction logic (evict_batch, maybe_evict, EVICTION_LOG,
  get_collection_count/stats, get_rag_operational_stats) into eviction.py
- Move QDRANT_URL, RAG_COLLECTION into config.py to break circular dep
- rag.py re-exports eviction symbols for backward compatibility
- Router imports updated to use eviction module directly
- All 130 tests pass
2026-07-06 08:00:26 -07:00
gramps 8072fb3dd0 feat: Roadmap K — RAG corpus management with score-based eviction (v0.13.0)
- Config: RAG_MAX_VECTORS, high/low water marks, grace period, weights
- rag.py: get_collection_count, evict_batch, maybe_evict (asyncio.Lock),
  get_rag_operational_stats, EVICTION_LOG, retrieval_count tracking
- routers/rag_admin.py: GET /api/rag/stats, POST /api/rag/flush (admin)
- Wire maybe_evict() into upload.py and ingest.py after Qdrant upsert
- 16 tests: collection stats, eviction scoring, pinned/grace/batch guards,
  endpoint auth, race lock, flush, operational stats shape
- Bump to v0.13.0
2026-07-06 07:56:09 -07:00
gramps 133cca2551 docs: note RAG_MAX_VECTORS auto-calc in B3 setup wizard 2026-07-06 07:49:30 -07:00
gramps 1333963edc docs: add B3 Docker distribution task (v1.0 gate) 2026-07-05 15:28:46 -07:00
gramps 3f043d7bdf docs: note Docker-optional in README opener 2026-07-05 15:28:14 -07:00
gramps f14875a3a0 docs: remove anti-Docker sentiment, add v1.0 Docker distribution plan 2026-07-05 15:27:31 -07:00
gramps 7d2f392231 docs: strikethrough completed Tasks 1-7 in TASKS.md 2026-07-05 15:23:31 -07:00
gramps eb86cbd039 docs: expand Task 8 spec — score-based eviction, hysteresis, operational stats, flush, edge cases 2026-07-05 15:21:35 -07:00
gramps c1031ecd3e docs: mark Tasks 1,3,7 as done in TASKS.md 2026-07-05 15:01:04 -07:00
gramps be8ce3bd86 docs: add B1 (context loss) and B2 (bang search) to backlog 2026-07-05 09:01:01 -07:00
gramps 43cb60a8f5 v0.12.0: chat reply tool bar (copy, print, save, rate)
- Adds .msg-toolbar to each assistant reply after streaming completes
- Copy: copies full response text to clipboard
- Print: opens print-friendly window with formatted response
- Save: downloads response as .md file
- Rate: thumbs up/down toggle (local only, no backend)
- Toolbar fades in on message hover
- Also wired into search-result replies and loaded history
2026-07-04 13:20:04 -07:00
gramps 3a557ee081 chore: gitignore hardware_state.json (runtime artifact) 2026-07-03 12:53:49 -07:00
gramps 7291b8fc42 v0.11.0 -> v0.12.0: startup hardware self-assessment (Roadmap J)
- hardware.py: assess_hardware() probes RAM, CPU, GPU VRAM (rocm-smi),
  llama-server, Qdrant, SearXNG reachability — writes hardware_state.json
- routers/hardware.py: GET /api/hardware (no auth) returns snapshot
- app.py: calls assess_hardware() in lifespan after init_db()
- 4 new tests: all services reachable, rocm-smi absent, llama unreachable,
  HTTP endpoint
2026-07-03 12:53:34 -07:00
gramps 779d606923 chore: re-version to v0.11.0 (pre-release until public release) 2026-07-03 12:49:31 -07:00
gramps 45363e8bd6 docs: liven up README opener 2026-07-03 12:46:59 -07:00
gramps 3f75dc30d6 docs: sync README version and feature list with v1.11.0 2026-07-03 12:39:55 -07:00
gramps 3fd8b01353 docs: update AGENTS.md, CLAUDE.md, TASKS.md for Tasks 4-6 completion 2026-07-03 12:38:48 -07:00
gramps 1ac21ad13f v1.10.0 -> v1.11.0: terminal command RAG hook (Roadmap I)
- POST /api/ingest with Bearer token auth, chunk_text, embed, Qdrant upsert
- docs/jc-ingest.sh — shell script for PROMPT_COMMAND hook on jarvis
- /api/ingest exempted from session middleware (self-authenticating)
- 5 tests: missing/wrong key, empty/missing content, success path
2026-07-03 12:35:21 -07:00
gramps 04fbe90f08 add python-multipart dependency for UploadFile support 2026-07-03 12:20:08 -07:00
gramps 81238c0d7f v1.9.0 -> v1.10.0: file upload UI + attachment management
- Paperclip icon left of text input, file preview pill (image thumb or file icon)
- Conversation list shows attachment icon right of trash, opens gallery overlay
- Gallery overlay: scrollable, close (X), delete attachment per item
- DELETE /api/upload/{id} removes from SQLite + Qdrant
- PATCH /api/upload/{id}/link ties upload to conversation
- GET /api/upload/by-conversation/{id} lists attachments
- Chat accepts upload_context_id, injects [ATTACHED DOCUMENT] into system prompt
- Conversation list includes attachment_count field
- 8 new tests: upload context injection, delete, link, by-conversation, image type, attachment count

Still missing (P3): drag-and-drop upload, global attachments page, file download, batch upload
2026-07-03 12:18:06 -07:00
gramps 4a891c8435 v1.8.9 -> v1.9.0: file upload backend (PDF/text, Qdrant ingest, SQLite context) 2026-07-01 18:15:23 -07:00
gramps 239a0d5fa9 add pypdf dependency for PDF upload support 2026-07-01 18:10:12 -07:00
gramps 1d1cb61264 add P2 item #17: bidirectional image I/O to backlog 2026-07-01 18:08:25 -07:00
gramps 8393497df5 add P2 item: HTTPS via Let's Encrypt to backlog 2026-07-01 18:02:41 -07:00
gramps 7651ea620c v1.8.8 -> v1.8.9: fix copy button with execCommand fallback for insecure context 2026-07-01 18:01:42 -07:00
gramps 04d885e9eb v1.8.7 -> v1.8.8: add TTR badge (time-to-respond) next to PPL 2026-07-01 17:56:28 -07:00
gramps 9ef306e133 v1.8.6 -> v1.8.7: add image paste guard with toast notification 2026-07-01 17:35:12 -07:00
gramps 6451f674bb v1.8.5 -> v1.8.6: bump patch for trash icon fix, model dropdown removal, preset default 2026-07-01 17:30:35 -07:00
gramps b52e120ba1 fix: restore trash icon, remove vestigial model dropdown, default preset to General Assistant 2026-07-01 17:28:38 -07:00
gramps cb8ceccbe0 docs: mark Task 2 dependency resolved — llama-server-coder.service created and verified on ultron 2026-07-01 17:13:37 -07:00
gramps cacb04b3de docs: clean up node references and branding consistency 2026-07-01 09:26:33 -07:00
gramps 2b7f51cdca docs: clarify Task 2 as dependency resolved — real model swap delivered by Roadmap N (Tasks 9-15) 2026-07-01 09:24:58 -07:00
gramps d2cc246e51 first commit - defining tasks file as a living doc for opencode 2026-07-01 09:04:06 -07:00
gramps b8405b8d76 fix: increase trash icon visibility (remove 0.5 opacity, bump to 15px) 2026-06-27 16:09:05 -07:00
gramps e3b1780292 feat: add trash-can icon to left of each conversation in sidebar
Replace the hover-reveal × on the right with an always-visible 🗑 icon
positioned to the left of the conversation title. Clicking it triggers
the existing deleteConversation() which shows a confirm dialog and
enforces admin-only access.
2026-06-27 16:07:18 -07:00
gramps 66b086c3f3 fix: restore EMBED_URL pointing to ollama on 192.168.50.210:11434 2026-06-27 16:03:19 -07:00