clawdiney 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- clawdiney-0.2.1/.env.example +38 -0
- clawdiney-0.2.1/.github/workflows/ci.yml +92 -0
- clawdiney-0.2.1/.github/workflows/publish.yml +50 -0
- clawdiney-0.2.1/.gitignore +57 -0
- clawdiney-0.2.1/AGENTS.md +150 -0
- clawdiney-0.2.1/CHANGELOG.md +46 -0
- clawdiney-0.2.1/CLAUDE.md +277 -0
- clawdiney-0.2.1/LICENSE +21 -0
- clawdiney-0.2.1/PKG-INFO +609 -0
- clawdiney-0.2.1/README.md +571 -0
- clawdiney-0.2.1/SECURITY_REVIEW.md +173 -0
- clawdiney-0.2.1/assets/clawdiney-image.jpeg +0 -0
- clawdiney-0.2.1/examples/context_manager_example.py +33 -0
- clawdiney-0.2.1/examples/read_note_example.py +46 -0
- clawdiney-0.2.1/mypy.ini +9 -0
- clawdiney-0.2.1/openspec/changes/archive/2026-07-08-sqlite-migration/.openspec.yaml +2 -0
- clawdiney-0.2.1/openspec/changes/archive/2026-07-08-sqlite-migration/design.md +133 -0
- clawdiney-0.2.1/openspec/changes/archive/2026-07-08-sqlite-migration/proposal.md +35 -0
- clawdiney-0.2.1/openspec/changes/archive/2026-07-08-sqlite-migration/specs/embedding-abstraction/spec.md +36 -0
- clawdiney-0.2.1/openspec/changes/archive/2026-07-08-sqlite-migration/specs/graph-store/spec.md +54 -0
- clawdiney-0.2.1/openspec/changes/archive/2026-07-08-sqlite-migration/specs/hybrid-search/spec.md +69 -0
- clawdiney-0.2.1/openspec/changes/archive/2026-07-08-sqlite-migration/tasks.md +63 -0
- clawdiney-0.2.1/openspec/changes/project-knowledge-graph/.openspec.yaml +2 -0
- clawdiney-0.2.1/openspec/changes/project-knowledge-graph/design.md +74 -0
- clawdiney-0.2.1/openspec/changes/project-knowledge-graph/proposal.md +31 -0
- clawdiney-0.2.1/openspec/changes/project-knowledge-graph/specs/entity-extraction/spec.md +51 -0
- clawdiney-0.2.1/openspec/changes/project-knowledge-graph/specs/graph-store/spec.md +26 -0
- clawdiney-0.2.1/openspec/changes/project-knowledge-graph/specs/project-cards/spec.md +35 -0
- clawdiney-0.2.1/openspec/changes/project-knowledge-graph/specs/project-graph-tools/spec.md +36 -0
- clawdiney-0.2.1/openspec/changes/project-knowledge-graph/tasks.md +42 -0
- clawdiney-0.2.1/openspec/config.yaml +20 -0
- clawdiney-0.2.1/openspec/specs/embedding-abstraction/spec.md +36 -0
- clawdiney-0.2.1/openspec/specs/graph-store/spec.md +54 -0
- clawdiney-0.2.1/openspec/specs/hybrid-search/spec.md +69 -0
- clawdiney-0.2.1/pyproject.toml +87 -0
- clawdiney-0.2.1/ruff.toml +7 -0
- clawdiney-0.2.1/scripts/README_WATCHER.md +195 -0
- clawdiney-0.2.1/scripts/ask_brain.sh +11 -0
- clawdiney-0.2.1/scripts/claude_hook_context.py +104 -0
- clawdiney-0.2.1/scripts/clawdiney-watcher.service +24 -0
- clawdiney-0.2.1/scripts/configure_claude_mcp.py +90 -0
- clawdiney-0.2.1/scripts/index_projects.sh +57 -0
- clawdiney-0.2.1/scripts/provision_project_vaults.sh +185 -0
- clawdiney-0.2.1/scripts/run_tests.sh +14 -0
- clawdiney-0.2.1/scripts/setup_brain.sh +120 -0
- clawdiney-0.2.1/scripts/start_watcher.sh +54 -0
- clawdiney-0.2.1/scripts/stop_brain.sh +15 -0
- clawdiney-0.2.1/scripts/stop_watcher.sh +40 -0
- clawdiney-0.2.1/setup.cfg +4 -0
- clawdiney-0.2.1/setup_vault.sh +511 -0
- clawdiney-0.2.1/src/clawdiney/__init__.py +48 -0
- clawdiney-0.2.1/src/clawdiney/_version.py +24 -0
- clawdiney-0.2.1/src/clawdiney/chunking.py +150 -0
- clawdiney-0.2.1/src/clawdiney/cli.py +93 -0
- clawdiney-0.2.1/src/clawdiney/config.py +201 -0
- clawdiney-0.2.1/src/clawdiney/constants.py +25 -0
- clawdiney-0.2.1/src/clawdiney/embedding_providers.py +156 -0
- clawdiney-0.2.1/src/clawdiney/entity_extractor.py +516 -0
- clawdiney-0.2.1/src/clawdiney/incremental_indexer.py +209 -0
- clawdiney-0.2.1/src/clawdiney/indexer.py +262 -0
- clawdiney-0.2.1/src/clawdiney/logging_config.py +63 -0
- clawdiney-0.2.1/src/clawdiney/mcp_server.py +612 -0
- clawdiney-0.2.1/src/clawdiney/project_index_config.py +171 -0
- clawdiney-0.2.1/src/clawdiney/project_indexer.py +662 -0
- clawdiney-0.2.1/src/clawdiney/py.typed +0 -0
- clawdiney-0.2.1/src/clawdiney/query_engine.py +370 -0
- clawdiney-0.2.1/src/clawdiney/rag_optimizer.py +457 -0
- clawdiney-0.2.1/src/clawdiney/reranker.py +116 -0
- clawdiney-0.2.1/src/clawdiney/scripts/__init__.py +1 -0
- clawdiney-0.2.1/src/clawdiney/scripts/index_projects.py +218 -0
- clawdiney-0.2.1/src/clawdiney/scripts/sync_vault.py +122 -0
- clawdiney-0.2.1/src/clawdiney/scripts/watch_projects.py +358 -0
- clawdiney-0.2.1/src/clawdiney/scripts/watch_vault.py +229 -0
- clawdiney-0.2.1/src/clawdiney/storage.py +943 -0
- clawdiney-0.2.1/src/clawdiney/vault_config.py +76 -0
- clawdiney-0.2.1/src/clawdiney/vault_writer.py +266 -0
- clawdiney-0.2.1/src/clawdiney.egg-info/PKG-INFO +609 -0
- clawdiney-0.2.1/src/clawdiney.egg-info/SOURCES.txt +105 -0
- clawdiney-0.2.1/src/clawdiney.egg-info/dependency_links.txt +1 -0
- clawdiney-0.2.1/src/clawdiney.egg-info/entry_points.txt +4 -0
- clawdiney-0.2.1/src/clawdiney.egg-info/requires.txt +18 -0
- clawdiney-0.2.1/src/clawdiney.egg-info/scm_file_list.json +100 -0
- clawdiney-0.2.1/src/clawdiney.egg-info/scm_version.json +8 -0
- clawdiney-0.2.1/src/clawdiney.egg-info/top_level.txt +1 -0
- clawdiney-0.2.1/tests/__init__.py +1 -0
- clawdiney-0.2.1/tests/test_cli.py +77 -0
- clawdiney-0.2.1/tests/test_config.py +203 -0
- clawdiney-0.2.1/tests/test_embedding_providers.py +61 -0
- clawdiney-0.2.1/tests/test_entity_extractor.py +299 -0
- clawdiney-0.2.1/tests/test_hybrid_search.py +141 -0
- clawdiney-0.2.1/tests/test_incremental_indexer.py +63 -0
- clawdiney-0.2.1/tests/test_indexing_pipeline.py +121 -0
- clawdiney-0.2.1/tests/test_integration.py +242 -0
- clawdiney-0.2.1/tests/test_mcp.py +15 -0
- clawdiney-0.2.1/tests/test_mcp_client.py +179 -0
- clawdiney-0.2.1/tests/test_mcp_client_async.py +137 -0
- clawdiney-0.2.1/tests/test_mcp_http.py +166 -0
- clawdiney-0.2.1/tests/test_mcp_server.py +365 -0
- clawdiney-0.2.1/tests/test_mcp_session.py +148 -0
- clawdiney-0.2.1/tests/test_project_indexer.py +279 -0
- clawdiney-0.2.1/tests/test_query_engine.py +173 -0
- clawdiney-0.2.1/tests/test_rag_optimizer.py +199 -0
- clawdiney-0.2.1/tests/test_reranker.py +70 -0
- clawdiney-0.2.1/tests/test_scripts_sync_vault.py +139 -0
- clawdiney-0.2.1/tests/test_storage.py +368 -0
- clawdiney-0.2.1/tests/test_vault_config.py +148 -0
- clawdiney-0.2.1/tests/test_vault_writer.py +100 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# --- Clawdiney Multi-Vault Configuration ---
|
|
2
|
+
|
|
3
|
+
# Lista de vaults (separados por vírgula)
|
|
4
|
+
VAULTS=general,projects,personal
|
|
5
|
+
|
|
6
|
+
# Paths para cada vault
|
|
7
|
+
VAULT_GENERAL_PATH=~/clawdiney-vaults/general
|
|
8
|
+
VAULT_PROJECTS_PATH=~/clawdiney-vaults/projects
|
|
9
|
+
VAULT_PERSONAL_PATH=~/clawdiney-vaults/personal
|
|
10
|
+
|
|
11
|
+
# Vault padrão usado pelo MCP server
|
|
12
|
+
MCP_DEFAULT_VAULT=general
|
|
13
|
+
|
|
14
|
+
# OU: Descobrir vaults automaticamente de um diretório
|
|
15
|
+
# VAULTS_DIR=~/clawdiney-vaults
|
|
16
|
+
#
|
|
17
|
+
# Cada subpasta com clawdiney.toml vira um vault automaticamente.
|
|
18
|
+
# Exemplo de estrutura:
|
|
19
|
+
# ~/clawdiney-vaults/
|
|
20
|
+
# ├── general/clawdiney.toml
|
|
21
|
+
# ├── cliente-alfa/clawdiney.toml
|
|
22
|
+
# └── cliente-beta/clawdiney.toml
|
|
23
|
+
|
|
24
|
+
# Embedded storage (SQLite) — no external services required
|
|
25
|
+
BRAIN_DB_PATH=~/.clawdiney/brain.db
|
|
26
|
+
|
|
27
|
+
# Embedding model to use via Ollama
|
|
28
|
+
MODEL_NAME=bge-m3:latest
|
|
29
|
+
EMBEDDING_PROVIDER=ollama
|
|
30
|
+
EMBEDDING_DIMENSION=1024
|
|
31
|
+
|
|
32
|
+
# Optional reranker (cross-encoder, BAAI/bge-reranker-v2-m3)
|
|
33
|
+
ENABLE_RERANK=true
|
|
34
|
+
|
|
35
|
+
# Chunking
|
|
36
|
+
CHUNKING_STRATEGY=headers
|
|
37
|
+
CHUNK_SIZE=500
|
|
38
|
+
CHUNK_OVERLAP=50
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: ["3.10", "3.11", "3.12"]
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
20
|
+
uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: ${{ matrix.python-version }}
|
|
23
|
+
|
|
24
|
+
- name: Cache pip dependencies
|
|
25
|
+
uses: actions/cache@v4
|
|
26
|
+
with:
|
|
27
|
+
path: ~/.cache/pip
|
|
28
|
+
key: ${{ runner.os }}-pip-${{ hashFiles('pyproject.toml') }}
|
|
29
|
+
restore-keys: |
|
|
30
|
+
${{ runner.os }}-pip-
|
|
31
|
+
|
|
32
|
+
- name: Install dependencies
|
|
33
|
+
run: |
|
|
34
|
+
python -m pip install --upgrade pip
|
|
35
|
+
pip install -e ".[dev]"
|
|
36
|
+
|
|
37
|
+
- name: Run tests
|
|
38
|
+
run: |
|
|
39
|
+
python -m pytest tests/ -v
|
|
40
|
+
|
|
41
|
+
- name: Run tests with coverage (only on Python 3.12)
|
|
42
|
+
if: matrix.python-version == '3.12'
|
|
43
|
+
run: |
|
|
44
|
+
python -m pytest tests/ -v --cov=clawdiney --cov-report=xml --cov-report=term-missing
|
|
45
|
+
|
|
46
|
+
- name: Upload coverage to Codecov
|
|
47
|
+
if: matrix.python-version == '3.12'
|
|
48
|
+
uses: codecov/codecov-action@v4
|
|
49
|
+
with:
|
|
50
|
+
files: ./coverage.xml
|
|
51
|
+
fail_ci_if_error: false
|
|
52
|
+
|
|
53
|
+
lint:
|
|
54
|
+
runs-on: ubuntu-latest
|
|
55
|
+
|
|
56
|
+
steps:
|
|
57
|
+
- uses: actions/checkout@v4
|
|
58
|
+
|
|
59
|
+
- name: Set up Python
|
|
60
|
+
uses: actions/setup-python@v5
|
|
61
|
+
with:
|
|
62
|
+
python-version: "3.12"
|
|
63
|
+
|
|
64
|
+
- name: Install ruff
|
|
65
|
+
run: pip install ruff
|
|
66
|
+
|
|
67
|
+
- name: Run ruff linter
|
|
68
|
+
run: ruff check src/clawdiney/ tests/
|
|
69
|
+
|
|
70
|
+
- name: Run ruff formatter
|
|
71
|
+
run: ruff format --check src/clawdiney/ tests/
|
|
72
|
+
|
|
73
|
+
type-check:
|
|
74
|
+
runs-on: ubuntu-latest
|
|
75
|
+
|
|
76
|
+
steps:
|
|
77
|
+
- uses: actions/checkout@v4
|
|
78
|
+
|
|
79
|
+
- name: Set up Python
|
|
80
|
+
uses: actions/setup-python@v5
|
|
81
|
+
with:
|
|
82
|
+
python-version: "3.12"
|
|
83
|
+
|
|
84
|
+
- name: Install dependencies
|
|
85
|
+
run: |
|
|
86
|
+
python -m pip install --upgrade pip
|
|
87
|
+
pip install -e ".[dev]"
|
|
88
|
+
|
|
89
|
+
- name: Run mypy
|
|
90
|
+
run: |
|
|
91
|
+
pip install types-requests
|
|
92
|
+
mypy src/clawdiney/ --ignore-missing-imports --no-strict-optional
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
build:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v4
|
|
13
|
+
with:
|
|
14
|
+
fetch-depth: 0 # full history + tags, required by setuptools_scm
|
|
15
|
+
|
|
16
|
+
- name: Set up Python
|
|
17
|
+
uses: actions/setup-python@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: "3.12"
|
|
20
|
+
|
|
21
|
+
- name: Install build tool
|
|
22
|
+
run: python -m pip install --upgrade build
|
|
23
|
+
|
|
24
|
+
- name: Build sdist and wheel
|
|
25
|
+
run: python -m build
|
|
26
|
+
|
|
27
|
+
- name: Upload build artifacts
|
|
28
|
+
uses: actions/upload-artifact@v4
|
|
29
|
+
with:
|
|
30
|
+
name: dist
|
|
31
|
+
path: dist/
|
|
32
|
+
|
|
33
|
+
publish:
|
|
34
|
+
needs: build
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
environment:
|
|
37
|
+
name: pypi
|
|
38
|
+
url: https://pypi.org/p/clawdiney
|
|
39
|
+
permissions:
|
|
40
|
+
id-token: write # required for Trusted Publishing (OIDC), no API token needed
|
|
41
|
+
|
|
42
|
+
steps:
|
|
43
|
+
- name: Download build artifacts
|
|
44
|
+
uses: actions/download-artifact@v4
|
|
45
|
+
with:
|
|
46
|
+
name: dist
|
|
47
|
+
path: dist/
|
|
48
|
+
|
|
49
|
+
- name: Publish to PyPI
|
|
50
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
venv/
|
|
3
|
+
__pycache__/
|
|
4
|
+
*.pyc
|
|
5
|
+
*.pyo
|
|
6
|
+
*.pyd
|
|
7
|
+
.pytest_cache/
|
|
8
|
+
.mypy_cache/
|
|
9
|
+
.ruff_cache/
|
|
10
|
+
.coverage
|
|
11
|
+
htmlcov/
|
|
12
|
+
|
|
13
|
+
# Environment Variables (SENSITIVE)
|
|
14
|
+
.env
|
|
15
|
+
|
|
16
|
+
# Database Files (regenerated on index)
|
|
17
|
+
chroma_db/
|
|
18
|
+
neo4j_data/
|
|
19
|
+
chroma_data/
|
|
20
|
+
|
|
21
|
+
# Generated by setuptools_scm
|
|
22
|
+
src/clawdiney/_version.py
|
|
23
|
+
|
|
24
|
+
# State files
|
|
25
|
+
.clawdiney_state.json
|
|
26
|
+
|
|
27
|
+
# OS Files
|
|
28
|
+
.DS_Store
|
|
29
|
+
Thumbs.db
|
|
30
|
+
|
|
31
|
+
# Logs
|
|
32
|
+
*.log
|
|
33
|
+
logs/
|
|
34
|
+
|
|
35
|
+
# Agent artifacts (planning, evidence, drafts)
|
|
36
|
+
.sisyphus/
|
|
37
|
+
|
|
38
|
+
# Backups
|
|
39
|
+
.env.backup*
|
|
40
|
+
|
|
41
|
+
# IDE
|
|
42
|
+
.vscode/
|
|
43
|
+
.idea/
|
|
44
|
+
redis_data/
|
|
45
|
+
src/clawdiney.egg-info/
|
|
46
|
+
dist/
|
|
47
|
+
build/
|
|
48
|
+
|
|
49
|
+
# Antigravity CLI
|
|
50
|
+
.antigravitycli/
|
|
51
|
+
|
|
52
|
+
# Local AI agent tool configs
|
|
53
|
+
.agent/
|
|
54
|
+
.claude/
|
|
55
|
+
.gemini/
|
|
56
|
+
.omc/
|
|
57
|
+
.opencode/
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Codex (Codex.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Repository Overview
|
|
6
|
+
|
|
7
|
+
Clawdiney is a hybrid Vector + Graph system that transforms an Obsidian Vault into a living knowledge source for AI coding agents. The system enables semantic search and knowledge graph navigation of SOPs, design systems, architectural patterns, and documentation.
|
|
8
|
+
|
|
9
|
+
## Architecture
|
|
10
|
+
|
|
11
|
+
The system is fully embedded (v0.2.0) — a single SQLite database (`brain.db`) holds everything:
|
|
12
|
+
|
|
13
|
+
1. **sqlite-vec** - Vector KNN search (embeddings via Ollama `bge-m3`)
|
|
14
|
+
2. **FTS5** - BM25 full-text search (exact terms, acronyms, identifiers)
|
|
15
|
+
3. **Graph tables** (`entities`, `relations`) - Note relationships via WikiLinks and shared tags
|
|
16
|
+
4. **MCP Server** - Provides integration with Codex via Model Context Protocol
|
|
17
|
+
|
|
18
|
+
Data flow:
|
|
19
|
+
Obsidian Vault → `src/clawdiney/indexer.py` → `brain.db` (via `storage.py`) → `src/clawdiney/mcp_server.py` → Codex
|
|
20
|
+
|
|
21
|
+
**No Docker services required.** Only Ollama must be running (embeddings). The database lives at `BRAIN_DB_PATH` (default `~/.clawdiney/brain.db`).
|
|
22
|
+
|
|
23
|
+
## Common Development Commands
|
|
24
|
+
|
|
25
|
+
### Running the System
|
|
26
|
+
|
|
27
|
+
No infrastructure to start — storage is an embedded SQLite file. Ensure Ollama is running with the `bge-m3` model pulled.
|
|
28
|
+
|
|
29
|
+
Index/re-index the Obsidian vault:
|
|
30
|
+
```bash
|
|
31
|
+
./venv/bin/python3 -m clawdiney.indexer
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Start the MCP server for Codex integration:
|
|
35
|
+
```bash
|
|
36
|
+
./venv/bin/python3 -m clawdiney.mcp_server
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Test queries from command line:
|
|
40
|
+
```bash
|
|
41
|
+
./scripts/ask_brain.sh "your query here"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Or directly with Python:
|
|
45
|
+
```bash
|
|
46
|
+
./venv/bin/python3 -m clawdiney.query_engine "your query here"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Development Environment Setup
|
|
50
|
+
|
|
51
|
+
Initial setup (installs dependencies, indexes vault):
|
|
52
|
+
```bash
|
|
53
|
+
chmod +x scripts/setup_brain.sh
|
|
54
|
+
./scripts/setup_brain.sh
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Manual dependency installation:
|
|
58
|
+
```bash
|
|
59
|
+
python3 -m venv venv
|
|
60
|
+
./venv/bin/pip install -e .
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Testing
|
|
64
|
+
|
|
65
|
+
Run a test query to verify the system is working:
|
|
66
|
+
```bash
|
|
67
|
+
./venv/bin/python3 -m clawdiney.query_engine "test query"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Run unit tests:
|
|
71
|
+
```bash
|
|
72
|
+
./scripts/run_tests.sh
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Or run tests directly with pytest:
|
|
76
|
+
```bash
|
|
77
|
+
./venv/bin/python3 -m pytest tests/ -v
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Use the MCP `health_check` tool (or open `brain.db` with any SQLite client) for troubleshooting.
|
|
81
|
+
|
|
82
|
+
## Key Files and Components
|
|
83
|
+
|
|
84
|
+
- `src/clawdiney/mcp_server.py` - Main MCP server that integrates with Codex
|
|
85
|
+
- `src/clawdiney/query_engine.py` - Hybrid retrieval (BM25 + vector + RRF) + rerank + graph expansion
|
|
86
|
+
- `src/clawdiney/storage.py` - Single gateway to `brain.db` (schema, hybrid search SQL, graph queries)
|
|
87
|
+
- `src/clawdiney/indexer.py` - Full indexing of Obsidian vault into `brain.db`
|
|
88
|
+
- `src/clawdiney/config.py` - Centralized configuration management
|
|
89
|
+
- `scripts/setup_brain.sh` - Automated setup script for new installations
|
|
90
|
+
- `.env` - Configuration file for paths and settings
|
|
91
|
+
|
|
92
|
+
## Integration with MCP Clients
|
|
93
|
+
|
|
94
|
+
The system integrates via the Model Context Protocol (MCP). When properly configured, the agent has access to **read and write** tools:
|
|
95
|
+
|
|
96
|
+
### Read Tools (Discovery)
|
|
97
|
+
|
|
98
|
+
1. `search_brain(query)` - Search for architectural patterns, SOPs, and design system components
|
|
99
|
+
2. `explore_graph(note_name)` - Find notes related to a specific topic via WikiLinks and shared tags
|
|
100
|
+
3. `resolve_note(name)` - Resolve ambiguous note names to canonical vault-relative paths
|
|
101
|
+
4. `get_note_chunks(path)` - List chunk headers for a note (structured preview)
|
|
102
|
+
5. `get_project_card(name)` - Full project card (Purpose, Stack, Architecture, Interfaces)
|
|
103
|
+
6. `how_do_projects_relate(a, b)` - Graph paths between two projects
|
|
104
|
+
7. `health_check()` - Check health status of `brain.db` and Ollama
|
|
105
|
+
|
|
106
|
+
### Write Tools (Knowledge Capture)
|
|
107
|
+
|
|
108
|
+
8. `write_note(path, content, mode)` - Create or update a note at any vault location
|
|
109
|
+
- `mode`: "create" (fail if exists), "overwrite" (replace), "append" (add to end)
|
|
110
|
+
9. `append_to_daily(content)` - Append content to today's daily note (50_Daily/YYYY-MM-DD.md)
|
|
111
|
+
10. `add_learning(topic, content, area)` - Save learnings to appropriate folder
|
|
112
|
+
- `area`: "SOPs", "Architecture", "DesignSystem", "Projects", "Areas", "Learnings"
|
|
113
|
+
11. `delete_note(path)` - Delete a note and remove from index
|
|
114
|
+
|
|
115
|
+
### Example Workflow
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
# 1. Search for existing patterns
|
|
119
|
+
search_brain("backend API deployment")
|
|
120
|
+
|
|
121
|
+
# 2. If found, update the SOP
|
|
122
|
+
write_note("30_Resources/SOPs/SOP_Deploy.md", updated_content, mode="append")
|
|
123
|
+
|
|
124
|
+
# 3. If not found, create new learning
|
|
125
|
+
add_learning("Backend_API_Deploy", "# SOP\\n\\nDeployment pattern...", area="SOPs")
|
|
126
|
+
|
|
127
|
+
# 4. Document daily learnings
|
|
128
|
+
append_to_daily("## Learnings\\n- Discovered X about the architecture")
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Configuration Example
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"projects": {
|
|
136
|
+
"/path/to/projects": {
|
|
137
|
+
"mcpServers": {
|
|
138
|
+
"clawdiney": {
|
|
139
|
+
"command": "/path/to/clawdiney/venv/bin/python3",
|
|
140
|
+
"args": ["-m", "clawdiney.mcp_server"]
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Recent Improvements
|
|
149
|
+
|
|
150
|
+
See [CLAUDE.md](CLAUDE.md) "Recent Improvements" for the full history of the embedded storage migration (v0.2.0) and project knowledge graph features.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [1.2.0] - 2026-04-20
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- `resolve_note(name)` and `get_note_chunks(path)` as the canonical MCP drill-down workflow
|
|
7
|
+
- explicit `main()` and pure indexing helpers in `brain_indexer.py`
|
|
8
|
+
- reranker fallback to preserve vector results when reranking fails
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- standardized on `BrainQueryEngine` as the active engine abstraction
|
|
12
|
+
- moved note identity toward canonical vault-relative `path`
|
|
13
|
+
- updated tests and examples to match the retrieval-first contract
|
|
14
|
+
- kept full-file reading outside the MCP surface
|
|
15
|
+
|
|
16
|
+
### Removed
|
|
17
|
+
- broken `read_full_note` MCP flow
|
|
18
|
+
- stale `BrainEngine` references from active code paths
|
|
19
|
+
|
|
20
|
+
## [1.1.0] - 2026-04-19
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
- Centralized configuration management with `config.py`
|
|
24
|
+
- Support for both HTTP and Persistent ChromaDB clients via `CHROMA_CLIENT_TYPE` environment variable
|
|
25
|
+
- Proper connection closing for BrainEngine to prevent connection leaks
|
|
26
|
+
- Enhanced error handling in BrainEngine initialization
|
|
27
|
+
- Improved file resolution in `read_note` method to handle duplicate filenames
|
|
28
|
+
- Unit tests for configuration and engine classes
|
|
29
|
+
- Test runner script (`run_tests.sh`)
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
- Fixed hardcoded path in `CHROMA_PATH` configuration
|
|
33
|
+
- Standardized ChromaDB client usage across all modules
|
|
34
|
+
- Improved error messages and handling throughout the codebase
|
|
35
|
+
- Updated `.env` file with new configuration options
|
|
36
|
+
- Updated documentation in `CLAUDE.md`
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
- Inconsistent ChromaDB client usage between modules
|
|
40
|
+
- Missing `close()` method in BrainEngine
|
|
41
|
+
- Fragile file lookup in `read_note` method
|
|
42
|
+
- Lack of error handling in BrainEngine initialization
|
|
43
|
+
- Missing unit tests
|
|
44
|
+
|
|
45
|
+
### Security
|
|
46
|
+
- Removed personal path information from default configuration
|