-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
165 lines (154 loc) · 6.89 KB
/
Copy pathpyproject.toml
File metadata and controls
165 lines (154 loc) · 6.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# NOTE: customized for agentforge-graph — deps + extras edited from the
# scaffold default. Managed-file upgrades will treat this as forked.
[project]
name = "agentforge-graph"
version = "0.6.4"
description = "Code Knowledge Graph (CKG) engine + agent toolset, built on AgentForge."
readme = "README.md"
license = "Apache-2.0"
license-files = ["LICENSE", "NOTICE"]
requires-python = ">=3.13"
keywords = [
"code-knowledge-graph",
"ckg",
"tree-sitter",
"code-search",
"static-analysis",
"agent",
"mcp",
"rag",
]
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.13",
"Topic :: Software Development :: Libraries",
"Topic :: Software Development :: Documentation",
"Operating System :: OS Independent",
"Typing :: Typed",
]
dependencies = [
# --- AgentForge framework (runtime + provider + serving) ---
# Pinned to the 0.3.x line (re-validated: full gate + MCP server construct
# green on agentforge-py 0.3.1; Tool/BudgetPolicy/MCPServer surfaces unchanged).
"agentforge-py>=0.3,<0.4", # core contracts + Agent runtime + CLI
"agentforge-anthropic[anthropic]>=0.3,<0.4", # LLM provider for enrichment (feat-010, feat-012)
"agentforge-mcp[mcp]>=0.3,<0.4", # MCP serving layer + mcp SDK (feat-008)
"python-dotenv>=1.0",
"pyyaml>=6", # read ckg.yaml engine config (feat-003+)
# --- deterministic graph engine (feat-002/003/007) ---
# REQUIRED, not optional: the package is non-functional without these — the
# top-level import chain loads the parse/store/repo-map stack. (Heavy native
# wheel: pyarrow via lancedb.) Embeddings are provider-selected (bedrock /
# openai / fake) — no embedder SDK is forced on the base install.
"tree-sitter>=0.23", # parsing core (feat-002)
"tree-sitter-language-pack>=0.9", # 100+ grammars incl. the v0.1 top-10 (feat-002)
"kuzu>=0.6", # embedded graph store, default (feat-003 / ADR-0006)
"lancedb>=0.15", # embedded vector store, default (feat-003)
"networkx>=3.3", # PageRank for the repo map (feat-007)
]
[project.optional-dependencies]
# `engine` is now part of the base install (the package can't import without
# it); the empty extra is kept so `pip install agentforge-graph[engine]` and
# `uv sync --extra engine` still resolve as a no-op (backward compatibility).
engine = []
# Optional cross-encoder reranker (ENH-009, OFF by default — pulls torch).
# `uv sync --extra rerank`; lazy-loaded, so the base install / CI stay torch-free.
rerank = ["sentence-transformers>=2.2"]
# Local watch mode (feat-014). `ckg watch` needs a cross-platform fs-watcher;
# lazy-loaded so the base install stays lean. `uv sync --extra watch`.
watch = ["watchfiles>=0.24"]
# Opt-in server graph backend: Neo4j (ENH-004 / ADR-0006). `--extra neo4j`.
neo4j = ["neo4j>=5"]
# Opt-in server vector backend: Postgres + pgvector (ENH-004). `--extra pgvector`.
pgvector = ["asyncpg>=0.30", "pgvector>=0.3"]
# Opt-in single server backend: SurrealDB — graph + vectors in one (ENH-010).
# `--extra surrealdb`. Pinned <3 (the 3.0 SDK has breaking API changes).
surrealdb = ["surrealdb>=2,<3"]
# Opt-in hosted embeddings (feat-005). `--extra voyage`.
voyage = ["agentforge-voyage"]
# AWS Bedrock embeddings + LLM enrichment (feat-005/012, Cohere + Claude). `--extra bedrock`.
bedrock = ["boto3>=1.35"]
# OpenAI (and OpenAI-compatible / local) embeddings (ENH-003). `--extra openai`.
openai = ["openai>=1.40"]
# Opt-in observability (OpenTelemetry tracing). `--extra otel`.
otel = ["agentforge-otel"]
# Test + lint toolchain.
dev = [
"pytest>=8",
"pytest-asyncio>=0.24",
"pytest-cov>=5",
"ruff>=0.7",
"mypy>=1.13",
"types-pyyaml>=6", # stubs for strict mypy over yaml
]
[project.scripts]
ckg = "agentforge_graph.main:main" # primary CLI (feat-002/008: index, serve-mcp, …)
agentforge-graph = "agentforge_graph.main:main"
[project.urls]
Homepage = "https://github.com/Scaffoldic/agentforge-graph"
Repository = "https://github.com/Scaffoldic/agentforge-graph"
Changelog = "https://github.com/Scaffoldic/agentforge-graph/blob/main/CHANGELOG.md"
Issues = "https://github.com/Scaffoldic/agentforge-graph/issues"
Documentation = "https://github.com/Scaffoldic/agentforge-graph/blob/main/docs/ARCHITECTURE.md"
[build-system]
requires = ["hatchling>=1.27"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/agentforge_graph"]
# Tree-sitter query packs (language + framework) are read at runtime via
# __file__; ship every .scm under the package.
artifacts = ["src/agentforge_graph/**/*.scm"]
[tool.ruff]
line-length = 100
target-version = "py313"
src = ["src", "tests"]
# `examples/` is illustrative sample code (intentional framework idioms like
# FastAPI's `Depends()`-in-default); it's not part of the package or test gate.
extend-exclude = ["examples"]
[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B", "SIM"]
[tool.mypy]
python_version = "3.13"
strict = true
files = ["src"]
plugins = ["pydantic.mypy"]
# Native engine deps ship no type stubs; keep our own code strict by
# ignoring only the missing third-party imports at the boundary.
[[tool.mypy.overrides]]
module = [
"kuzu.*",
"lancedb.*",
"pyarrow.*",
"boto3.*",
"botocore.*",
"networkx.*",
"openai.*", # ENH-003 openai embedder; in the `openai` extra, not the base/dev env
"anthropic.*", # ENH-003 anthropic enrichers; SDK ships with the base install
"neo4j.*", # ENH-004 Neo4j graph backend; in the `neo4j` extra
"asyncpg.*", # ENH-004 pgvector backend; in the `pgvector` extra
"pgvector.*", # ENH-004 pgvector backend; in the `pgvector` extra
"surrealdb.*", # ENH-010 SurrealDB backend; in the `surrealdb` extra
"sentence_transformers.*", # ENH-009 cross-encoder rerank; in the `rerank` extra
"watchfiles.*", # feat-014 watch mode; in the `watch` extra, lazy-loaded
"agentforge.*",
"agentforge_core.*",
"agentforge_mcp.*",
"mcp.*", # ENH-005 HTTP-auth runner; mcp SDK ships in the [mcp] extra
]
ignore_missing_imports = true
[tool.coverage.run]
omit = [
# Server-backend store adapters (ENH-004/010) are exercised by the dedicated
# `server-backends` CI job (conformance against live Neo4j/Postgres/SurrealDB),
# not the base coverage job — which has no servers — so they would otherwise
# read as uncovered here. Their behavior is proven by the conformance suite.
"src/agentforge_graph/store/neo4j_store.py",
"src/agentforge_graph/store/pgvector_store.py",
"src/agentforge_graph/store/surreal_store.py",
]
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
addopts = "--cov=agentforge_graph --cov-report=term-missing --cov-fail-under=90"