Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
f6f578b
fix: add Dim field and output_dimension to Voyage embedding client
Jul 11, 2026
5acc024
feat: add QueryEmbedder interface to provider.go and wire into all pr…
Jul 11, 2026
c91e43d
feat: add metadata versioning with content_hash, chunk_version, and e…
Jul 11, 2026
614ff93
feat: extract pkg/core service layer with SearchOpts, EventBus, and M…
Jul 11, 2026
543e0a2
feat: add pkg/config for YAML config file with env var priority
Jul 11, 2026
22989b3
test: add TestIndexProject to verify Service.IndexProject delegates t…
Jul 11, 2026
161f19e
feat: add VoyageReranker with rerank-2.5 and wire into core.Service.S…
Jul 11, 2026
f210e35
feat: add hybrid search to pgvector with RRF (k=60) and GIN index (VA…
Jul 11, 2026
484bb6f
feat: add HTTP API server with chi router, REST handlers, SSE, and SP…
Jul 11, 2026
fd71bd5
fix: change pgvector id column from UUID to TEXT for string ID support
Jul 11, 2026
665bbd3
feat: add setup wizard endpoints (VAL-API-019..021)
Jul 11, 2026
220b059
fix: change pgvector PRIMARY KEY to composite (project_id, id) to pre…
Jul 11, 2026
0b331de
fix: return 404 for POST /api/search with non-existent project_id (VA…
Jul 11, 2026
ed7ce4f
feat: scaffold React SPA with Overview dashboard (VAL-UI-001..021,034)
Jul 11, 2026
20a9599
feat: build Playground and Chunks pages with SSE activity (VAL-UI-022…
Jul 11, 2026
6a53cba
feat: add onboarding wizard mockup (VAL-WIZ-031, VAL-WIZ-032)
Jul 11, 2026
57c71fb
feat: implement onboarding wizard in React (VAL-WIZ-001..035)
Jul 11, 2026
652acaf
fix: persist wizard step position to localStorage (VAL-WIZ-033)
Jul 11, 2026
3410d78
feat: add Makefile with build pipeline targets (VAL-CROSS-005..008,01…
Jul 11, 2026
bf866a8
feat: add README serve mode docs, Docker all-in-one, admin token auth…
Jul 11, 2026
944a0f1
fix: share query state between Overview and Playground, refresh stats…
Jul 11, 2026
f163511
fix: docker-compose command conflicts with ENTRYPOINT, add auth healt…
Jul 11, 2026
5409409
fix: harden rerank topK clamp and gate SSE CORS behind RAG_CORS_ORIGIN
Jul 12, 2026
48aa2cb
docs: add PLANNING, HANDOFF, and dashboard mockup
Jul 12, 2026
7bfcd9b
chore: add OSS foundation — license, governance, CI, and release notes
Jul 12, 2026
97419bd
feat: real query metrics + compress, honest dashboard, CLI setup
Jul 12, 2026
071681b
fix: provider parity, MCP search options, setup auth, real composition
Jul 12, 2026
3b0ea7d
perf: efficient project chunk counts via ProjectCounter
Jul 13, 2026
63794ff
feat: durable query metrics (SQLite) + document Chroma as experimental
Jul 13, 2026
e10c783
feat(web): add adaptive monochrome brand icon + favicon
Jul 13, 2026
92c2bd4
fix(web): fixed-height layout with internal scroll + theme-aware scro…
Jul 13, 2026
dc66cc5
feat: onboarding step to install MCP into clients + skill guide
Jul 13, 2026
23f73cf
fix(web): "Local Backend" step shows only services that truly need Do…
Jul 13, 2026
00630d7
feat: OpenAI-compatible embedder (+ any local model via TEI)
Jul 13, 2026
9e8bebf
feat: migration engine — export + re-embed across dimension/model/store
Jul 14, 2026
1cef24d
feat(web): Migration page — re-embed / move / change dimension via UI
Jul 14, 2026
c8184a2
feat: cloud import connectors for migration (Qdrant verified, rest ex…
Jul 14, 2026
e996818
feat: agent-driven setup — docs + probe + idempotent AGENTS.md merge
Jul 15, 2026
c9507d9
feat(web): Docs page — rendered setup guide + copy-paste agent prompt
Jul 15, 2026
c223ca4
feat: comprehensive docs — multi-section guide (API + agent readable)
Jul 15, 2026
33ec016
feat: MCP over HTTP — run enowx-rag as a remote daemon
Jul 15, 2026
7811561
feat: MCP install/snippet support remote daemon (url + headers)
Jul 15, 2026
6748941
feat: 5 more MCP tools — list/inspect/manage RAG memory
Jul 15, 2026
4a4d8c0
feat: Settings page — manage API keys + admin token from the dashboard
Jul 15, 2026
60df030
fix(web): Settings shows only keys for the active embedder/vector store
Jul 15, 2026
ecf97dd
test(httpapi): isolate tests from host config and env
Jul 16, 2026
37a8ed5
feat(release): one-line install + prebuilt binaries (4 methods)
Jul 16, 2026
8c3d07a
test(httpapi): mock TCP listener for pgvector reachability test
Jul 16, 2026
886abb9
docs: add dashboard screenshots + "Why enowx-rag?" section
Jul 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Bug report
description: Report a problem with enowx-rag
labels: ["bug"]
body:
- type: markdown
attributes:
value: Thanks for taking the time to file a bug report!
- type: textarea
id: what-happened
attributes:
label: What happened?
description: A clear description of the bug, and what you expected instead.
placeholder: When I run ... I expected ... but got ...
validations:
required: true
- type: textarea
id: repro
attributes:
label: Steps to reproduce
placeholder: |
1. Configure with ...
2. Run `rag_index` / `--serve` ...
3. See error ...
validations:
required: true
- type: dropdown
id: vector-store
attributes:
label: Vector store
options:
- qdrant
- chroma
- pgvector
- other / not sure
validations:
required: true
- type: dropdown
id: embedder
attributes:
label: Embedder
options:
- voyage
- tei
- other / not sure
validations:
required: true
- type: textarea
id: environment
attributes:
label: Environment
description: OS, Go version, how you run the server (MCP stdio vs `--serve`), and relevant logs.
placeholder: macOS 15, Go 1.26, run via MCP stdio ...
validations:
required: false
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Security vulnerability
url: https://github.com/enowdev/enowx-rag/security/advisories/new
about: Please report security issues privately, not as public issues (see SECURITY.md).
- name: Question / discussion
url: https://github.com/enowdev/enowx-rag/discussions
about: Ask questions and discuss ideas with the community.
24 changes: 24 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Feature request
description: Suggest an idea or improvement for enowx-rag
labels: ["enhancement"]
body:
- type: textarea
id: problem
attributes:
label: What problem does this solve?
description: Describe the use case or pain point before the proposed solution.
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposed solution
description: What would you like to happen? Include API/config shape if relevant.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
validations:
required: false
23 changes: 23 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
## Summary

<!-- What does this PR do and why? Link any related issue: Closes #123 -->

## Changes

<!-- Bullet the notable changes -->

-

## Testing

<!-- How did you verify this works? -->

- [ ] `go build ./...` passes (under `mcp-server/`)
- [ ] `go test ./...` passes
- [ ] `go vet ./...` passes
- [ ] `npm run build` passes (if the SPA was touched)
- [ ] Added/updated tests for the new behavior

## Notes for reviewers

<!-- Anything that needs special attention, trade-offs, follow-ups -->
64 changes: 64 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: CI

on:
push:
branches: [main]
pull_request:
branches: [main]

permissions:
contents: read

jobs:
go:
name: Go build & test
runs-on: ubuntu-latest
defaults:
run:
working-directory: mcp-server
steps:
- uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.26"
cache-dependency-path: mcp-server/go.sum

# The Go binary embeds web/dist via embed.FS, so a placeholder must
# exist for `go build`/`go test` to compile without a full SPA build.
- name: Create web/dist placeholder
run: |
mkdir -p web/dist
echo '<!doctype html><title>enowx-rag</title>' > web/dist/index.html

- name: go vet
run: go vet ./...

- name: go build
run: go build ./...

- name: go test
run: go test ./... -count=1

web:
name: Frontend build
runs-on: ubuntu-latest
defaults:
run:
working-directory: mcp-server/web
steps:
- uses: actions/checkout@v4

- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
cache-dependency-path: mcp-server/web/package-lock.json

- name: Install dependencies
run: npm ci

- name: Build SPA
run: npm run build
59 changes: 59 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Release

on:
push:
tags:
- "v*"

permissions:
contents: write # create the GitHub Release and upload assets

jobs:
goreleaser:
name: Build & publish binaries
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # GoReleaser needs full history + tags

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.26"
cache-dependency-path: mcp-server/go.sum

- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v6
with:
version: "~> v2"
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Set this secret to publish the Homebrew formula to enowdev/homebrew-tap.
# If it's absent the brew step fails; remove the `brews:` block in
# .goreleaser.yaml (or add the secret) to make the release green.
HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.HOMEBREW_TAP_GITHUB_TOKEN }}

npm:
name: Publish npm wrapper
runs-on: ubuntu-latest
needs: goreleaser # binaries must exist on the Release before npm postinstall can fetch them
steps:
- uses: actions/checkout@v4

- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: "20"
registry-url: "https://registry.npmjs.org"

- name: Sync package version to the tag
working-directory: npm
run: npm version "${GITHUB_REF_NAME#v}" --no-git-tag-version --allow-same-version

- name: Publish to npm
working-directory: npm
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
# Binaries
mcp-server/mcp-server
mcp-server/enowx-rag
enowx-rag
mcp-server/*.exe

# GoReleaser output
/dist/

# npm wrapper: the native binary is downloaded on postinstall, never committed
npm/bin/enowx-rag
npm/bin/enowx-rag.exe
npm/node_modules/

# Go
*.log
*.test
Expand Down
101 changes: 101 additions & 0 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# GoReleaser config for enowx-rag.
# Docs: https://goreleaser.com
#
# The Go module lives in ./mcp-server (its go.mod is there), and the web
# dashboard is embedded from mcp-server/web/dist (committed to the repo), so no
# npm build is needed here — GoReleaser just cross-compiles the CGO-free binary.
#
# Release: git tag v0.1.0 && git push origin v0.1.0
# The .github/workflows/release.yml workflow runs `goreleaser release` on tags.
version: 2

project_name: enowx-rag

before:
hooks:
# Ensure modules are tidy/available before the build.
- go -C mcp-server mod download

builds:
- id: enowx-rag
binary: enowx-rag
dir: mcp-server
main: ./cmd/mcp-server
env:
- CGO_ENABLED=0
flags:
- -trimpath
ldflags:
- -s -w -X main.version={{ .Version }}
goos:
- linux
- darwin
- windows
goarch:
- amd64
- arm64
ignore:
# Windows on ARM64 is uncommon for a server daemon; skip it.
- goos: windows
goarch: arm64

archives:
- id: default
ids:
- enowx-rag
# v0.1.0_darwin_arm64.tar.gz etc. install.sh depends on this name format.
name_template: >-
{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}
formats:
- tar.gz
format_overrides:
- goos: windows
formats:
- zip
files:
- README.md
- LICENSE
- CHANGELOG.md

checksum:
name_template: "checksums.txt"

snapshot:
version_template: "{{ incpatch .Version }}-dev"

changelog:
# We maintain CHANGELOG.md by hand; keep the release notes from the tag/body.
disable: true

release:
github:
owner: enowdev
name: enowx-rag
# Draft the release so you can review binaries before publishing.
draft: false
prerelease: auto
name_template: "{{ .Tag }}"

# --- Homebrew tap -----------------------------------------------------------
# Requires a repo github.com/enowdev/homebrew-tap and a token in the
# HOMEBREW_TAP_GITHUB_TOKEN secret (a PAT with `repo` scope, or a fine-grained
# token with contents:write on homebrew-tap). Then: brew install enowdev/tap/enowx-rag
brews:
- name: enowx-rag
ids:
- default
repository:
owner: enowdev
name: homebrew-tap
token: "{{ .Env.HOMEBREW_TAP_GITHUB_TOKEN }}"
homepage: "https://github.com/enowdev/enowx-rag"
description: "Per-project RAG memory MCP server for AI coding agents"
license: "Apache-2.0"
commit_author:
name: goreleaser-bot
email: goreleaser@enowx-rag.local
directory: Formula
test: |
system "#{bin}/enowx-rag", "version"
install: |
bin.install "enowx-rag"
Loading
Loading