engrama 0.13.0__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.
- engrama-0.13.0/.env.example +71 -0
- engrama-0.13.0/.github/CODEOWNERS +20 -0
- engrama-0.13.0/.github/ISSUE_TEMPLATE/bug.yml +84 -0
- engrama-0.13.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- engrama-0.13.0/.github/ISSUE_TEMPLATE/feature.yml +61 -0
- engrama-0.13.0/.github/dependabot.yml +92 -0
- engrama-0.13.0/.github/pull_request_template.md +37 -0
- engrama-0.13.0/.github/workflows/ci.yml +432 -0
- engrama-0.13.0/.github/workflows/docs.yml +61 -0
- engrama-0.13.0/.github/workflows/links.yml +58 -0
- engrama-0.13.0/.github/workflows/release.yml +311 -0
- engrama-0.13.0/.gitignore +49 -0
- engrama-0.13.0/.lycheeignore +8 -0
- engrama-0.13.0/LICENSE +200 -0
- engrama-0.13.0/PKG-INFO +185 -0
- engrama-0.13.0/README.md +134 -0
- engrama-0.13.0/docker-compose.yml +28 -0
- engrama-0.13.0/docs/architecture.es.md +707 -0
- engrama-0.13.0/docs/architecture.md +681 -0
- engrama-0.13.0/docs/assets/engrama.png +0 -0
- engrama-0.13.0/docs/assets/engrama.webp +0 -0
- engrama-0.13.0/docs/assets/hero_banner.webp +0 -0
- engrama-0.13.0/docs/backends.es.md +204 -0
- engrama-0.13.0/docs/backends.md +195 -0
- engrama-0.13.0/docs/changelog.md +608 -0
- engrama-0.13.0/docs/contributing.es.md +143 -0
- engrama-0.13.0/docs/contributing.md +138 -0
- engrama-0.13.0/docs/ddr-001.es.md +77 -0
- engrama-0.13.0/docs/ddr-001.md +77 -0
- engrama-0.13.0/docs/ddr-002.es.md +72 -0
- engrama-0.13.0/docs/ddr-002.md +72 -0
- engrama-0.13.0/docs/ddr-003.es.md +825 -0
- engrama-0.13.0/docs/ddr-003.md +803 -0
- engrama-0.13.0/docs/ddr-004.es.md +175 -0
- engrama-0.13.0/docs/ddr-004.md +165 -0
- engrama-0.13.0/docs/ddr-template.es.md +88 -0
- engrama-0.13.0/docs/ddr-template.md +84 -0
- engrama-0.13.0/docs/glosario.es.md +153 -0
- engrama-0.13.0/docs/glosario.md +10 -0
- engrama-0.13.0/docs/graph-schema.es.md +205 -0
- engrama-0.13.0/docs/graph-schema.md +204 -0
- engrama-0.13.0/docs/index.es.md +743 -0
- engrama-0.13.0/docs/index.md +777 -0
- engrama-0.13.0/docs/portable-storage-spec.md +431 -0
- engrama-0.13.0/docs/reference/system-prompts/v0.4.md +411 -0
- engrama-0.13.0/docs/reference/system-prompts/v0.5.md +79 -0
- engrama-0.13.0/docs/releasing.es.md +131 -0
- engrama-0.13.0/docs/releasing.md +129 -0
- engrama-0.13.0/docs/roadmap.es.md +297 -0
- engrama-0.13.0/docs/roadmap.md +298 -0
- engrama-0.13.0/docs/saas/streamable-http.es.md +249 -0
- engrama-0.13.0/docs/saas/streamable-http.md +240 -0
- engrama-0.13.0/docs/security.es.md +79 -0
- engrama-0.13.0/docs/security.md +73 -0
- engrama-0.13.0/docs/stylesheets/tokyo-night.css +66 -0
- engrama-0.13.0/docs/vision.es.md +43 -0
- engrama-0.13.0/docs/vision.md +43 -0
- engrama-0.13.0/engrama/__init__.py +17 -0
- engrama-0.13.0/engrama/adapters/__init__.py +3 -0
- engrama-0.13.0/engrama/adapters/mcp/__init__.py +172 -0
- engrama-0.13.0/engrama/adapters/mcp/http.py +179 -0
- engrama-0.13.0/engrama/adapters/mcp/server.py +3135 -0
- engrama-0.13.0/engrama/adapters/obsidian/__init__.py +7 -0
- engrama-0.13.0/engrama/adapters/obsidian/adapter.py +309 -0
- engrama-0.13.0/engrama/adapters/obsidian/parser.py +202 -0
- engrama-0.13.0/engrama/adapters/obsidian/sync.py +409 -0
- engrama-0.13.0/engrama/adapters/sdk/__init__.py +507 -0
- engrama-0.13.0/engrama/backends/__init__.py +266 -0
- engrama-0.13.0/engrama/backends/neo4j/__init__.py +6 -0
- engrama-0.13.0/engrama/backends/neo4j/async_store.py +1328 -0
- engrama-0.13.0/engrama/backends/neo4j/backend.py +1260 -0
- engrama-0.13.0/engrama/backends/neo4j/schema.cypher +112 -0
- engrama-0.13.0/engrama/backends/neo4j/vector.py +272 -0
- engrama-0.13.0/engrama/backends/null.py +139 -0
- engrama-0.13.0/engrama/backends/sqlite/__init__.py +7 -0
- engrama-0.13.0/engrama/backends/sqlite/async_store.py +550 -0
- engrama-0.13.0/engrama/backends/sqlite/schema.sql +53 -0
- engrama-0.13.0/engrama/backends/sqlite/store.py +1755 -0
- engrama-0.13.0/engrama/backends/sqlite/vector.py +277 -0
- engrama-0.13.0/engrama/bench/__init__.py +64 -0
- engrama-0.13.0/engrama/bench/core.py +127 -0
- engrama-0.13.0/engrama/bench/locomo.py +190 -0
- engrama-0.13.0/engrama/bench/longmemeval.py +168 -0
- engrama-0.13.0/engrama/bench/report.py +177 -0
- engrama-0.13.0/engrama/bench/runner.py +714 -0
- engrama-0.13.0/engrama/bench/scoring.py +163 -0
- engrama-0.13.0/engrama/cli.py +1248 -0
- engrama-0.13.0/engrama/core/__init__.py +31 -0
- engrama-0.13.0/engrama/core/client.py +145 -0
- engrama-0.13.0/engrama/core/engine.py +348 -0
- engrama-0.13.0/engrama/core/identity.py +66 -0
- engrama-0.13.0/engrama/core/protocols.py +259 -0
- engrama-0.13.0/engrama/core/schema.py +564 -0
- engrama-0.13.0/engrama/core/scope.py +241 -0
- engrama-0.13.0/engrama/core/search.py +459 -0
- engrama-0.13.0/engrama/core/security.py +237 -0
- engrama-0.13.0/engrama/core/temporal.py +153 -0
- engrama-0.13.0/engrama/core/text.py +11 -0
- engrama-0.13.0/engrama/embeddings/__init__.py +74 -0
- engrama-0.13.0/engrama/embeddings/health.py +59 -0
- engrama-0.13.0/engrama/embeddings/null.py +55 -0
- engrama-0.13.0/engrama/embeddings/ollama.py +244 -0
- engrama-0.13.0/engrama/embeddings/openai_compat.py +224 -0
- engrama-0.13.0/engrama/embeddings/text.py +59 -0
- engrama-0.13.0/engrama/ingest/__init__.py +6 -0
- engrama-0.13.0/engrama/migrate.py +721 -0
- engrama-0.13.0/engrama/skills/__init__.py +10 -0
- engrama-0.13.0/engrama/skills/associate.py +157 -0
- engrama-0.13.0/engrama/skills/forget.py +91 -0
- engrama-0.13.0/engrama/skills/onboard/SKILL.md +249 -0
- engrama-0.13.0/engrama/skills/onboard/references/example-profiles.md +395 -0
- engrama-0.13.0/engrama/skills/onboard/scripts/generate_from_profile.py +476 -0
- engrama-0.13.0/engrama/skills/proactive.py +203 -0
- engrama-0.13.0/engrama/skills/recall.py +142 -0
- engrama-0.13.0/engrama/skills/reflect.py +395 -0
- engrama-0.13.0/engrama/skills/remember.py +74 -0
- engrama-0.13.0/examples/claude_desktop/config.json +13 -0
- engrama-0.13.0/examples/claude_desktop/system-prompt.md +182 -0
- engrama-0.13.0/examples/langchain_agent/example.py +4 -0
- engrama-0.13.0/mkdocs.yml +113 -0
- engrama-0.13.0/profiles/base.yaml +82 -0
- engrama-0.13.0/profiles/developer.yaml +44 -0
- engrama-0.13.0/profiles/modules/ai.yaml +28 -0
- engrama-0.13.0/profiles/modules/hacking.yaml +44 -0
- engrama-0.13.0/profiles/modules/photography.yaml +26 -0
- engrama-0.13.0/profiles/modules/teaching.yaml +42 -0
- engrama-0.13.0/pyproject.toml +79 -0
- engrama-0.13.0/scripts/bench_search_context.py +185 -0
- engrama-0.13.0/scripts/check_scoped_queries.py +239 -0
- engrama-0.13.0/scripts/generate_from_profile.py +672 -0
- engrama-0.13.0/scripts/init-schema.cypher +187 -0
- engrama-0.13.0/tests/backends/__init__.py +0 -0
- engrama-0.13.0/tests/backends/test_degenerate_embeddings.py +197 -0
- engrama-0.13.0/tests/backends/test_sqlite.py +972 -0
- engrama-0.13.0/tests/backends/test_sqlite_async.py +303 -0
- engrama-0.13.0/tests/backends/test_sqlite_vector.py +169 -0
- engrama-0.13.0/tests/conftest.py +42 -0
- engrama-0.13.0/tests/contracts/__init__.py +0 -0
- engrama-0.13.0/tests/contracts/test_async_graphstore_contract.py +372 -0
- engrama-0.13.0/tests/contracts/test_graphstore_contract.py +277 -0
- engrama-0.13.0/tests/data/locomo_mini.json +50 -0
- engrama-0.13.0/tests/data/longmemeval_mini.json +40 -0
- engrama-0.13.0/tests/test_adapters.py +118 -0
- engrama-0.13.0/tests/test_bench.py +1120 -0
- engrama-0.13.0/tests/test_cli.py +115 -0
- engrama-0.13.0/tests/test_cold_start_embedding_repro.py +150 -0
- engrama-0.13.0/tests/test_composable.py +371 -0
- engrama-0.13.0/tests/test_core.py +220 -0
- engrama-0.13.0/tests/test_embeddings.py +495 -0
- engrama-0.13.0/tests/test_export_import.py +256 -0
- engrama-0.13.0/tests/test_export_import_cross_backend.py +114 -0
- engrama-0.13.0/tests/test_hybrid_search.py +719 -0
- engrama-0.13.0/tests/test_identity.py +42 -0
- engrama-0.13.0/tests/test_inline_relations_validation.py +92 -0
- engrama-0.13.0/tests/test_mcp_entrypoint.py +75 -0
- engrama-0.13.0/tests/test_mcp_http.py +192 -0
- engrama-0.13.0/tests/test_mcp_logging_scope.py +121 -0
- engrama-0.13.0/tests/test_mcp_remember_fixes.py +208 -0
- engrama-0.13.0/tests/test_mcp_remember_merge_key.py +299 -0
- engrama-0.13.0/tests/test_mcp_status.py +144 -0
- engrama-0.13.0/tests/test_mcp_sync_dry_run.py +203 -0
- engrama-0.13.0/tests/test_merge_key_canonical.py +142 -0
- engrama-0.13.0/tests/test_migrate_keys.py +287 -0
- engrama-0.13.0/tests/test_neo4j_schema_packaging.py +55 -0
- engrama-0.13.0/tests/test_neo4j_store.py +298 -0
- engrama-0.13.0/tests/test_no_unscoped_match.py +115 -0
- engrama-0.13.0/tests/test_obsidian_sync.py +346 -0
- engrama-0.13.0/tests/test_openai_compat_embedder.py +256 -0
- engrama-0.13.0/tests/test_phase4_skills.py +471 -0
- engrama-0.13.0/tests/test_proactive.py +292 -0
- engrama-0.13.0/tests/test_protocols.py +165 -0
- engrama-0.13.0/tests/test_provenance.py +252 -0
- engrama-0.13.0/tests/test_reindex_tool.py +125 -0
- engrama-0.13.0/tests/test_sanitiser.py +222 -0
- engrama-0.13.0/tests/test_scope.py +218 -0
- engrama-0.13.0/tests/test_scope_e2e.py +222 -0
- engrama-0.13.0/tests/test_scope_failclosed.py +115 -0
- engrama-0.13.0/tests/test_scope_reads.py +219 -0
- engrama-0.13.0/tests/test_scope_resolver.py +61 -0
- engrama-0.13.0/tests/test_sdk.py +244 -0
- engrama-0.13.0/tests/test_skills.py +253 -0
- engrama-0.13.0/tests/test_temporal.py +837 -0
- engrama-0.13.0/tests/test_tenancy_empty_scope.py +340 -0
- engrama-0.13.0/tests/test_tenancy_isolation.py +69 -0
- engrama-0.13.0/tests/test_tenancy_migration.py +260 -0
- engrama-0.13.0/tests/test_tenancy_standalone.py +65 -0
- engrama-0.13.0/tests/test_tenancy_write_identity.py +310 -0
- engrama-0.13.0/tests/test_trust_aware_search.py +204 -0
- engrama-0.13.0/tests/test_vector_store.py +494 -0
- engrama-0.13.0/uv.lock +3385 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Engrama — environment variables
|
|
2
|
+
# Copy this file to .env and edit as needed.
|
|
3
|
+
#
|
|
4
|
+
# IMPORTANT: .env is in .gitignore — never commit real credentials.
|
|
5
|
+
#
|
|
6
|
+
# The base install runs on SQLite with zero external services. Skip down
|
|
7
|
+
# to "Optional: Neo4j backend" only if you've decided you need Neo4j
|
|
8
|
+
# (see BACKENDS.md for the decision guide).
|
|
9
|
+
|
|
10
|
+
# === Default backend: SQLite + sqlite-vec (DDR-004) ===
|
|
11
|
+
# Storage lives in a single file under your home directory. Override
|
|
12
|
+
# the path if you want to keep it elsewhere.
|
|
13
|
+
GRAPH_BACKEND=sqlite
|
|
14
|
+
# ENGRAMA_DB_PATH=~/.engrama/engrama.db # default; uncomment to override
|
|
15
|
+
|
|
16
|
+
# === Profile (used by `engrama init`) ===
|
|
17
|
+
ENGRAMA_PROFILE=developer
|
|
18
|
+
|
|
19
|
+
# === Obsidian vault sync (optional) ===
|
|
20
|
+
# Required for engrama_sync_note / engrama_sync_vault /
|
|
21
|
+
# engrama_write_insight_to_vault. Leave it pointing at any directory if
|
|
22
|
+
# you don't use Obsidian; the graph tools will still work.
|
|
23
|
+
VAULT_PATH=~/Documents/vault
|
|
24
|
+
|
|
25
|
+
# === Embeddings (optional, DDR-003 Phase B + DDR-004) ===
|
|
26
|
+
# Providers:
|
|
27
|
+
# none — fulltext only (default, zero-dep).
|
|
28
|
+
# ollama — legacy convenience wrapper around Ollama's /api/embeddings.
|
|
29
|
+
# openai — OpenAI-compatible /v1/embeddings (covers OpenAI, Ollama
|
|
30
|
+
# /v1, LM Studio, vLLM, llama.cpp, Jina, etc.).
|
|
31
|
+
EMBEDDING_PROVIDER=none
|
|
32
|
+
EMBEDDING_MODEL=nomic-embed-text
|
|
33
|
+
EMBEDDING_DIMENSIONS=768
|
|
34
|
+
|
|
35
|
+
# --- ollama provider ---
|
|
36
|
+
OLLAMA_URL=http://localhost:11434
|
|
37
|
+
|
|
38
|
+
# --- openai-compatible provider ---
|
|
39
|
+
# Pick the base URL that matches your service.
|
|
40
|
+
# OpenAI proper: https://api.openai.com/v1
|
|
41
|
+
# Ollama (OpenAI mode): http://localhost:11434/v1
|
|
42
|
+
# LM Studio: http://localhost:1234/v1
|
|
43
|
+
# vLLM: http://localhost:8000/v1
|
|
44
|
+
# llama.cpp server: http://localhost:8080/v1
|
|
45
|
+
# Jina: https://api.jina.ai/v1
|
|
46
|
+
# OPENAI_BASE_URL=https://api.openai.com/v1
|
|
47
|
+
# OPENAI_API_KEY=
|
|
48
|
+
|
|
49
|
+
# === Hybrid search (DDR-003 Phase C) ===
|
|
50
|
+
# Alpha controls fulltext vs vector weight (0.0 = all fulltext, 1.0 = all vector)
|
|
51
|
+
HYBRID_ALPHA=0.6
|
|
52
|
+
# Beta is the graph topology boost weight
|
|
53
|
+
HYBRID_GRAPH_BETA=0.15
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# ============================================================
|
|
57
|
+
# Optional: Neo4j backend (opt-in via `uv sync --extra neo4j`)
|
|
58
|
+
# ============================================================
|
|
59
|
+
# Uncomment everything below to switch to Neo4j. Make sure the
|
|
60
|
+
# `neo4j` extra is installed and the database is reachable
|
|
61
|
+
# (e.g. via `docker compose up -d` against the bundled
|
|
62
|
+
# docker-compose.yml).
|
|
63
|
+
|
|
64
|
+
# GRAPH_BACKEND=neo4j
|
|
65
|
+
# NEO4J_URI=bolt://localhost:7687
|
|
66
|
+
# NEO4J_USERNAME=neo4j
|
|
67
|
+
# NEO4J_PASSWORD=CHANGE_ME_BEFORE_FIRST_RUN
|
|
68
|
+
# NEO4J_DATABASE=neo4j
|
|
69
|
+
|
|
70
|
+
# When using Neo4j with embeddings enabled, you may also want:
|
|
71
|
+
# VECTOR_BACKEND=neo4j # default for sqlite is sqlite-vec; for neo4j is none unless explicitly enabled
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Auto-assigned reviewers per path.
|
|
2
|
+
#
|
|
3
|
+
# Lines later in the file take precedence over earlier ones, so the most
|
|
4
|
+
# specific match wins. With a single maintainer today, the default rule
|
|
5
|
+
# covers everything; per-path overrides exist as anchor points for future
|
|
6
|
+
# co-maintainers without rewriting the file.
|
|
7
|
+
#
|
|
8
|
+
# Docs: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-security/customizing-your-repository/about-code-owners
|
|
9
|
+
|
|
10
|
+
# Default owner for everything in the repo.
|
|
11
|
+
* @scops
|
|
12
|
+
|
|
13
|
+
# CI, packaging and supply-chain code is load-bearing; flag it explicitly.
|
|
14
|
+
/.github/ @scops
|
|
15
|
+
/pyproject.toml @scops
|
|
16
|
+
/uv.lock @scops
|
|
17
|
+
|
|
18
|
+
# Architecture decisions and DDRs need an owner-level signoff.
|
|
19
|
+
/DDR-*.md @scops
|
|
20
|
+
/SECURITY.md @scops
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Something doesn't work the way the docs / DDRs say it should.
|
|
3
|
+
title: "bug: "
|
|
4
|
+
labels: ["bug", "triage"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Thanks for taking the time to file a bug. Please include enough
|
|
10
|
+
context that someone unfamiliar with your setup can reproduce it.
|
|
11
|
+
Security-sensitive bugs should go through [private vulnerability
|
|
12
|
+
reporting](../../security/advisories/new) instead of a public issue.
|
|
13
|
+
|
|
14
|
+
- type: input
|
|
15
|
+
id: version
|
|
16
|
+
attributes:
|
|
17
|
+
label: Engrama version
|
|
18
|
+
description: "Output of `python -c \"import engrama; print(engrama.__version__)\"`."
|
|
19
|
+
placeholder: "0.9.0"
|
|
20
|
+
validations:
|
|
21
|
+
required: true
|
|
22
|
+
|
|
23
|
+
- type: dropdown
|
|
24
|
+
id: backend
|
|
25
|
+
attributes:
|
|
26
|
+
label: Backend in use
|
|
27
|
+
description: Which storage backend was active when the bug appeared?
|
|
28
|
+
options:
|
|
29
|
+
- SQLite (default)
|
|
30
|
+
- Neo4j
|
|
31
|
+
- Both / not sure
|
|
32
|
+
validations:
|
|
33
|
+
required: true
|
|
34
|
+
|
|
35
|
+
- type: input
|
|
36
|
+
id: python
|
|
37
|
+
attributes:
|
|
38
|
+
label: Python version
|
|
39
|
+
placeholder: "3.12.4"
|
|
40
|
+
validations:
|
|
41
|
+
required: true
|
|
42
|
+
|
|
43
|
+
- type: input
|
|
44
|
+
id: os
|
|
45
|
+
attributes:
|
|
46
|
+
label: Operating system
|
|
47
|
+
placeholder: "macOS 14.5 / Ubuntu 24.04 / Windows 11"
|
|
48
|
+
validations:
|
|
49
|
+
required: true
|
|
50
|
+
|
|
51
|
+
- type: textarea
|
|
52
|
+
id: reproduce
|
|
53
|
+
attributes:
|
|
54
|
+
label: Steps to reproduce
|
|
55
|
+
description: Minimal commands or code that trigger the bug. Smaller is better.
|
|
56
|
+
placeholder: |
|
|
57
|
+
1. `engrama init`
|
|
58
|
+
2. `engrama remember "..."`
|
|
59
|
+
3. Observed: ...
|
|
60
|
+
validations:
|
|
61
|
+
required: true
|
|
62
|
+
|
|
63
|
+
- type: textarea
|
|
64
|
+
id: expected
|
|
65
|
+
attributes:
|
|
66
|
+
label: Expected behaviour
|
|
67
|
+
validations:
|
|
68
|
+
required: true
|
|
69
|
+
|
|
70
|
+
- type: textarea
|
|
71
|
+
id: actual
|
|
72
|
+
attributes:
|
|
73
|
+
label: Actual behaviour
|
|
74
|
+
description: Include the full traceback if any. Use triple backticks for code blocks.
|
|
75
|
+
validations:
|
|
76
|
+
required: true
|
|
77
|
+
|
|
78
|
+
- type: textarea
|
|
79
|
+
id: extra
|
|
80
|
+
attributes:
|
|
81
|
+
label: Anything else?
|
|
82
|
+
description: Logs, screenshots, related issues, theories about the root cause.
|
|
83
|
+
validations:
|
|
84
|
+
required: false
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: Suggest an enhancement, new skill, new backend or API change.
|
|
3
|
+
title: "feat: "
|
|
4
|
+
labels: ["enhancement", "triage"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Engrama tries to stay small and opinionated. The more concretely
|
|
10
|
+
you describe the problem you're hitting, the easier it is to land
|
|
11
|
+
on a design that fits.
|
|
12
|
+
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: problem
|
|
15
|
+
attributes:
|
|
16
|
+
label: Problem
|
|
17
|
+
description: What are you trying to do that Engrama makes hard or impossible today?
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
|
|
21
|
+
- type: textarea
|
|
22
|
+
id: proposal
|
|
23
|
+
attributes:
|
|
24
|
+
label: Proposal
|
|
25
|
+
description: Sketch the shape — API signature, CLI flag, config key, MCP tool, schema change…
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
28
|
+
|
|
29
|
+
- type: textarea
|
|
30
|
+
id: alternatives
|
|
31
|
+
attributes:
|
|
32
|
+
label: Alternatives considered
|
|
33
|
+
description: What else did you try or think about? Why isn't it enough?
|
|
34
|
+
validations:
|
|
35
|
+
required: false
|
|
36
|
+
|
|
37
|
+
- type: dropdown
|
|
38
|
+
id: scope
|
|
39
|
+
attributes:
|
|
40
|
+
label: Where does this live?
|
|
41
|
+
multiple: true
|
|
42
|
+
options:
|
|
43
|
+
- Skills / engine
|
|
44
|
+
- SQLite backend
|
|
45
|
+
- Neo4j backend
|
|
46
|
+
- Embedding provider
|
|
47
|
+
- MCP adapter
|
|
48
|
+
- SDK / CLI
|
|
49
|
+
- Profiles / schema
|
|
50
|
+
- Docs / repo hygiene
|
|
51
|
+
- Not sure
|
|
52
|
+
validations:
|
|
53
|
+
required: true
|
|
54
|
+
|
|
55
|
+
- type: textarea
|
|
56
|
+
id: extra
|
|
57
|
+
attributes:
|
|
58
|
+
label: Anything else?
|
|
59
|
+
description: Prior art in other projects, links to related issues / DDRs, screenshots.
|
|
60
|
+
validations:
|
|
61
|
+
required: false
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Dependabot configuration — see https://docs.github.com/code-security/dependabot
|
|
2
|
+
#
|
|
3
|
+
# Goals:
|
|
4
|
+
# - Catch security advisories on Python dependencies promptly.
|
|
5
|
+
# - Keep GitHub Actions pinned to current versions (security + features).
|
|
6
|
+
# - Avoid PR fatigue: group routine bumps into a single weekly PR per
|
|
7
|
+
# ecosystem; only security and major bumps come as their own PRs.
|
|
8
|
+
|
|
9
|
+
version: 2
|
|
10
|
+
|
|
11
|
+
updates:
|
|
12
|
+
# ---------------------------------------------------------------------------
|
|
13
|
+
# Python dependencies (declared in pyproject.toml; Dependabot reads uv.lock
|
|
14
|
+
# via the `pip` ecosystem, which understands PEP 621 + lockfiles).
|
|
15
|
+
# ---------------------------------------------------------------------------
|
|
16
|
+
- package-ecosystem: "pip"
|
|
17
|
+
directory: "/"
|
|
18
|
+
schedule:
|
|
19
|
+
interval: "weekly"
|
|
20
|
+
day: "monday"
|
|
21
|
+
time: "06:00"
|
|
22
|
+
timezone: "Europe/Madrid"
|
|
23
|
+
open-pull-requests-limit: 5
|
|
24
|
+
labels:
|
|
25
|
+
- "dependencies"
|
|
26
|
+
- "python"
|
|
27
|
+
commit-message:
|
|
28
|
+
prefix: "chore(deps)"
|
|
29
|
+
include: "scope"
|
|
30
|
+
groups:
|
|
31
|
+
# Routine patch + minor bumps batched into one PR to reduce noise.
|
|
32
|
+
python-minor-and-patch:
|
|
33
|
+
applies-to: version-updates
|
|
34
|
+
update-types:
|
|
35
|
+
- "patch"
|
|
36
|
+
- "minor"
|
|
37
|
+
# Security advisories always get their own PR (one per CVE) so they
|
|
38
|
+
# are visible and reviewable in isolation. Achieved by NOT including
|
|
39
|
+
# security-updates in any group.
|
|
40
|
+
ignore:
|
|
41
|
+
# fastmcp v3 introduces breaking changes that fail our MCP test
|
|
42
|
+
# suite (verified on PR #10, closed without merge). Stop Dependabot
|
|
43
|
+
# from re-proposing major bumps until we deliberately migrate.
|
|
44
|
+
# Patch and minor updates within v2 are still welcome.
|
|
45
|
+
- dependency-name: "fastmcp"
|
|
46
|
+
update-types:
|
|
47
|
+
- "version-update:semver-major"
|
|
48
|
+
|
|
49
|
+
# ---------------------------------------------------------------------------
|
|
50
|
+
# GitHub Actions used in .github/workflows/*.yml — keep them pinned to a
|
|
51
|
+
# current major and grab security fixes promptly.
|
|
52
|
+
# ---------------------------------------------------------------------------
|
|
53
|
+
- package-ecosystem: "github-actions"
|
|
54
|
+
directory: "/"
|
|
55
|
+
schedule:
|
|
56
|
+
interval: "weekly"
|
|
57
|
+
day: "monday"
|
|
58
|
+
time: "06:00"
|
|
59
|
+
timezone: "Europe/Madrid"
|
|
60
|
+
open-pull-requests-limit: 3
|
|
61
|
+
labels:
|
|
62
|
+
- "dependencies"
|
|
63
|
+
- "github-actions"
|
|
64
|
+
commit-message:
|
|
65
|
+
prefix: "chore(ci)"
|
|
66
|
+
include: "scope"
|
|
67
|
+
groups:
|
|
68
|
+
actions-minor-and-patch:
|
|
69
|
+
applies-to: version-updates
|
|
70
|
+
update-types:
|
|
71
|
+
- "patch"
|
|
72
|
+
- "minor"
|
|
73
|
+
|
|
74
|
+
# ---------------------------------------------------------------------------
|
|
75
|
+
# Docker — currently only the Neo4j image referenced from
|
|
76
|
+
# docker-compose.yml. Less frequent (monthly) since Neo4j 5.26 is LTS and
|
|
77
|
+
# we pin to a specific minor.
|
|
78
|
+
# ---------------------------------------------------------------------------
|
|
79
|
+
- package-ecosystem: "docker"
|
|
80
|
+
directory: "/"
|
|
81
|
+
schedule:
|
|
82
|
+
interval: "monthly"
|
|
83
|
+
day: "monday"
|
|
84
|
+
time: "06:00"
|
|
85
|
+
timezone: "Europe/Madrid"
|
|
86
|
+
open-pull-requests-limit: 2
|
|
87
|
+
labels:
|
|
88
|
+
- "dependencies"
|
|
89
|
+
- "docker"
|
|
90
|
+
commit-message:
|
|
91
|
+
prefix: "chore(deps)"
|
|
92
|
+
include: "scope"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Thanks for the contribution! A short, focused PR is much easier to review
|
|
3
|
+
than a long one. If this change is broad, consider splitting it.
|
|
4
|
+
-->
|
|
5
|
+
|
|
6
|
+
## Summary
|
|
7
|
+
|
|
8
|
+
<!-- One or two sentences. Lead with *why*; the diff already shows *what*. -->
|
|
9
|
+
|
|
10
|
+
## Backend impact
|
|
11
|
+
|
|
12
|
+
<!-- Tick all that apply. Drives which CI jobs reviewers should focus on. -->
|
|
13
|
+
|
|
14
|
+
- [ ] SQLite (default backend)
|
|
15
|
+
- [ ] Neo4j (opt-in extra)
|
|
16
|
+
- [ ] Both backends (contract / engine / skills / MCP)
|
|
17
|
+
- [ ] None — docs, CI, repo hygiene, or tests only
|
|
18
|
+
|
|
19
|
+
## Test plan
|
|
20
|
+
|
|
21
|
+
<!--
|
|
22
|
+
What did you actually run locally? Pre-checked the rows you executed.
|
|
23
|
+
Add more bullets for anything specific to this change (manual MCP call,
|
|
24
|
+
CLI invocation, sample script, screenshot, etc.).
|
|
25
|
+
-->
|
|
26
|
+
|
|
27
|
+
- [ ] `uv run ruff format --check . && uv run ruff check .`
|
|
28
|
+
- [ ] `uv run pytest -q tests/backends tests/contracts tests/test_protocols.py tests/test_composable.py tests/test_openai_compat_embedder.py tests/test_cli.py`
|
|
29
|
+
- [ ] Full suite with Neo4j running (only if this PR touches the Neo4j path): `uv run pytest -v`
|
|
30
|
+
- [ ] Manual verification (describe):
|
|
31
|
+
|
|
32
|
+
## Notes for reviewer
|
|
33
|
+
|
|
34
|
+
<!--
|
|
35
|
+
Open questions, follow-ups deliberately deferred, gotchas, links to
|
|
36
|
+
related issues / DDRs / PRs. Leave empty if nothing applies.
|
|
37
|
+
-->
|