Commit Graph

23 Commits

Author SHA1 Message Date
74b8d43032 refactor!: move LLM configuration from in-app settings to CLI/env vars
- Remove `api_endpoint` from Settings model and settings UI
- Add `--llm-endpoint` / `AETHERA_LLM_ENDPOINT` and `--llm-key` /
  `AETHERA_LLM_KEY` CLI flags (endpoint is required)
- Update client constructor to accept API key parameter
- Update tests and documentation to reflect new configuration approach

BREAKING CHANGE: LLM endpoint and key must now be provided via
`AETHERA_LLM_ENDPOINT` and `AETHERA_LLM_KEY` environment variables or
CLI flags instead of the Settings page.
2026-05-01 23:30:34 -04:00
54e24cb304 test(client): update model and enable live SendMessage test
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-01 21:55:57 -04:00
0dd9521419 fix: improve chat UI streaming feedback and fix test image path
All checks were successful
continuous-integration/drone/push Build is passing
- Add loading spinner with 'Thinking...' text during streaming when
  content is not yet available
- Fix :key binding to use message.id instead of message.content
- Remove unnecessary TypeScript cast in file reader handler
- Move test image into testdata/ directory for proper test organization
- Remove t.Skip and simplify TestSummarizeChat test message
2026-05-01 21:04:26 -04:00
2154a9f203 fix(client_test): unskip vision test with embedded test image
- Remove t.Skip for TestSendMessageWithImage (qwen3-8b-vision works with base64)
- Add test_image.jpg (400x300) to test directory alongside test file
- Load image at runtime, convert to base64 data URL for API
- Collect full response in bytes.Buffer and verify non-empty output
2026-05-01 20:41:18 -04:00
0007250e5e fix(client_test): use embedded test image and skip unstable vision backend
- Remove dependency on /tmp/dog.jpg, embed small PNG as base64 data URL
- Add t.Skip for qwen3-8b-vision tests (LlamaSwap returns 502 for vision)
- Remove unused encoding/base64 and os imports
- Use model constant for consistency across tests
2026-05-01 19:35:08 -04:00
e60b1ea8d5 feat(chat): add optional photo upload support
Add vision/multimodal support to chat, allowing users to send images
alongside or instead of text prompts. Images are transmitted and persisted
as base64 data URLs.

Backend:
- Add Images []string to Message struct for persistence
- Add Images []string to GenerateTextRequest with relaxed validation
- Build multimodal user messages using OpenAI SDK content parts
- Pass images through from handlers to client
- Deep-copy Images slice in message cloning

Frontend:
- Add images?: string[] to Message and GenerateTextRequest types
- Add image selection state and file input handler
- Add camera icon button, hidden file input, and image preview strip
- Render images in user message bubbles
- Pass images through to GenerateTextRequest

Tests:
- Add TestSendMessageWithImage for vision model testing
2026-05-01 18:27:09 -04:00
c51c0ab070 fix(client): support vLLM "reasoning" field for thinking blocks
All checks were successful
continuous-integration/drone/push Build is passing
vLLM sends thinking content in a "reasoning" delta field, unlike
DeepSeek which uses "reasoning_content". Check both field names so
thinking blocks render for vLLM-hosted models like qwen3.6-27b-thinking.

Also update client tests to exercise thinking output and skip by default
so they don't run in Drone CI (require live LLM API).
2026-04-30 21:55:05 -04:00
5d5f10b2d8 fix(chat): preserve messages array during chat update
All checks were successful
continuous-integration/drone/push Build is passing
Object.assign was overwriting the existing messages array before the
ternary fallback could reference it. Capture the reference beforehand.
2026-04-28 23:34:46 -04:00
91d4202874 docs: update AGENTS.md and README.md with accurate project details
All checks were successful
continuous-integration/drone/push Build is passing
- Root AGENTS.md: add build pipeline, Makefile targets, full directory listing
- Backend AGENTS.md: add architecture layout, API routes table, streaming/store
  patterns, missing deps (jsonschema-go, values pkg, types pkg)
- Frontend AGENTS.md: add architecture layout, missing deps (marked, highlight.js),
  Alpine component pattern, build pipeline details
- README.md: add env var config table, Docker/Make workflows, dev setup,
  thinking support, token stats, structured output, llama.cpp timings
2026-04-28 23:27:08 -04:00
ce496d1caf fix(api): prevent browser from coalescing concurrent stream requests
All checks were successful
continuous-integration/drone/push Build is passing
Add cache-busting query parameter to the stream fetch URL so each
tab gets a unique request and the browser cannot reuse an in-flight
response. Remove redundant Transfer-Encoding header that Go sets
automatically.
2026-04-28 23:22:48 -04:00
eb66801f58 feat: stream persistent 2026-04-28 22:41:03 -04:00
fad8ed865a fix: streaming
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-28 22:30:37 -04:00
4c1523d81b fix: build 2026-04-28 22:09:19 -04:00
fcfa43cca3 fix(frontend): correct build output path for Docker compatibility
All checks were successful
continuous-integration/drone/push Build is passing
Change build script to output to public/dist instead of ../backend/web/static/dist.
The Dockerfile copies from frontend/public/, so the previous path caused builds
to output to a non-existent directory, resulting in stale files being deployed.

Also add mkdir -p to dev script for robustness.
2026-02-22 20:48:39 -05:00
eaa8a58d4f fix(build): add placeholder for embed static directory
All checks were successful
continuous-integration/drone/push Build is passing
Add .gitkeep to backend/web/static/ to ensure directory exists
for Go embed directive. The static/* pattern requires at least
one file to exist at build time, otherwise compilation fails.

Update .gitignore to allow .gitkeep while ignoring other contents.
2026-02-22 20:38:07 -05:00
59de41f827 feat(build): embed static assets into Go binary
Some checks failed
continuous-integration/drone/push Build is failing
Embed frontend build output directly into Go binary using //go:embed.
This removes runtime dependency on ../frontend/public/ path and
simplifies Docker builds by serving assets from embedded filesystem.

- Add backend/web/embed.go with embed.FS directive
- Update server to serve from embedded static assets
- Update Makefile to copy frontend build to web/static/
- Update Dockerfile for simplified multi-stage build
- Update frontend package.json output paths
- Remove custom 'oc' command from flake.nix dev shell
2026-02-22 20:36:03 -05:00
93b5c3f110 refactor(docker): use environment variables instead of hardcoded CMD args
All checks were successful
continuous-integration/drone/push Build is passing
Replace hardcoded CMD arguments with ENV directives:
- AETHERA_LISTEN=0.0.0.0
- AETHERA_PORT=8080
- AETHERA_DATA_DIR=/app/data

This allows runtime configuration via docker run -e or compose files.
2026-02-20 22:36:23 -05:00
0dc3add8ff feat(backend): add environment variable configuration support
Add AETHERA_ prefixed env vars for server configuration:
- AETHERA_DATA_DIR: data directory path
- AETHERA_LISTEN: listen address
- AETHERA_PORT: listen port

Env vars take precedence over defaults but CLI flags override both.
2026-02-20 22:35:13 -05:00
a5cb82d3fa build: add docker support
All checks were successful
continuous-integration/drone/push Build is passing
- Add Dockerfile for containerized deployment
- Add .drone.yml for CI/CD pipeline configuration
- Add docker and docker-run targets to Makefile
- Configure port 8080 binding and persistent volume mount
2026-02-20 22:12:30 -05:00
e67abb343c build(frontend): upgrade to tailwindcss v4
- Upgrade to Tailwind CSS v4.2.0 with explicit CLI dependency
- Add @tailwindcss/cli and tailwindcss as devDependencies
- Update build scripts to use bunx @tailwindcss/cli
- Include new transitive dependencies for enhanced CSS processing
2026-02-20 21:53:46 -05:00
627fcbafe1 tests: add backend tests 2026-01-19 12:46:07 -05:00
5e8ac5e4b6 fix: multi arch flake 2026-01-17 13:59:41 -05:00
89f2114b06 initial commit 2026-01-17 10:09:11 -05:00