Files
yvgude--lean-ctx/docs/contracts/provider-framework-contract-v1.md
T
wehub-resource-sync 26382a7ac6
CI / Clippy (push) Failing after 15m13s
CI / Test (ubuntu-latest) (push) Failing after 16m1s
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Build (no embeddings / no ORT) (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / Cookbook (Node) (push) Has been cancelled
CI / Pi Extension (Node) (push) Has been cancelled
CI / Rust SDK (lean-ctx-client) (push) Has been cancelled
CI / Embed SDK (lean-ctx-sdk) (push) Has been cancelled
CI / Python SDK (leanctx) (push) Has been cancelled
CI / Hermes Plugin (Python) (push) Has been cancelled
CI / SDK Conformance Matrix (push) Has been cancelled
CI / Coverage (push) Has been cancelled
CI / cargo-deny (push) Has been cancelled
CI / Adversarial Safety (push) Has been cancelled
CI / Benchmarks (push) Has been cancelled
CI / Output-Quality Gate (eval A/B) (push) Has been cancelled
CI / Documentation (push) Has been cancelled
CI / CI Green (push) Has been cancelled
JetBrains Plugin / Actionlint (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (rust) (push) Has been cancelled
JetBrains Plugin / Validation (push) Has been cancelled
JetBrains Plugin / Build (push) Has been cancelled
JetBrains Plugin / Test (push) Has been cancelled
Security Check / Security Scan (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:35:30 +08:00

133 lines
4.4 KiB
Markdown

# Provider Framework Contract v1
**Status**: Stable
**Version**: `PROVIDER_FRAMEWORK_V1_SCHEMA_VERSION = 1`
**Runtime source**: `rust/src/core/providers/`
## Purpose
Provides structured access to external context sources through the MCP tool interface.
All provider data is a **first-class citizen**: it flows through the full consolidation pipeline
into BM25 index, Graph index, Knowledge facts, and Session cache.
## Architecture
```
ContextProvider::execute()
→ ProviderResult
→ consolidation::consolidate()
→ ConsolidationArtifacts { bm25_chunks, edges, facts, cache_entries }
→ apply_artifacts_to_stores() [background thread]
→ BM25Index::ingest() — searchable via ctx_semantic_search
→ GraphIndex::merge_edges() — cross-source hints in ctx_read
→ Knowledge::remember() — recallable via ctx_knowledge
→ SessionCache::set() — fast re-reads
```
### Built-in Providers
| Provider | Auto-activates when | Resources |
|---|---|---|
| GitHub | `GITHUB_TOKEN` set | issues, pull_requests, actions |
| GitLab | `GITLAB_TOKEN` set | issues, merge_requests, pipelines |
| Jira | `JIRA_TOKEN` set | issues, sprints, projects |
| PostgreSQL | `DATABASE_URL` set | tables, schemas, queries |
### Config-based Providers
Custom REST APIs via TOML/JSON in `~/.config/lean-ctx/providers/` or `.lean-ctx/providers/`.
Supports 6 auth methods (bearer, API key, basic, header, query param, none).
### MCP Bridge Providers
External MCP servers connected via `[providers.mcp_bridges.<name>]` config.
Each bridge registers with unique ID `mcp:<name>`. Supports:
- HTTP transport (`url = "http://..."`)
- Stdio transport (`command = "npx"`, `args = ["-y", "@mcp/server"]`)
- Actions: `resources` (list), `read_resource` (fetch single), `tools` (list)
## ctx_provider Actions
| Action | Parameters | Description |
|---|---|---|
| `gitlab_issues` | state, labels, limit | List issues (sorted by updated_at desc) |
| `gitlab_issue` | iid | Show single issue with description |
| `gitlab_mrs` | state, limit | List merge requests |
| `gitlab_pipelines` | status, limit | List pipelines |
| `mcp_resources` | — | List all resources from configured MCP bridges |
## Configuration
Token resolution order:
1. `LEAN_CTX_GITLAB_TOKEN`
2. `GITLAB_TOKEN`
3. `CI_JOB_TOKEN`
Host resolution:
1. `GITLAB_HOST`
2. `CI_SERVER_HOST`
3. Default: `gitlab.com`
Project path resolution:
1. `CI_PROJECT_PATH`
2. Auto-detect from `git remote get-url origin`
## ProviderResult Schema
```rust
struct ProviderResult {
provider: String, // "gitlab"
resource_type: String, // "issues", "merge_requests", "pipelines"
items: Vec<ProviderItem>,
total_count: Option<usize>,
truncated: bool,
}
struct ProviderItem {
id: String,
title: String,
state: Option<String>,
author: Option<String>,
created_at: Option<String>,
updated_at: Option<String>,
url: Option<String>,
labels: Vec<String>,
body: Option<String>,
}
```
## Caching & Indexing
- **Session cache**: TTL-based in-memory cache (120 seconds default). Cache key includes provider, resource type, project, filters
- **BM25 index**: External chunks indexed with `ChunkKind` metadata (Issue, PullRequest, DbSchema, etc.)
- **Graph index**: Cross-source edges link external URIs to code files (e.g. issue → `src/auth.rs`)
- **Knowledge facts**: Extracted categories: `known_bugs`, `known_features`, `recent_changes`, `data_model`, `documentation`, `file_mentions`
- **`providers.auto_index`**: Controls background indexing (default: `true`)
## Security
- All provider outputs pass through `redact_text_if_enabled`
- CI job logs pass through secret scanner before delivery
- Tokens never appear in tool output
- MCP bridges: optional `auth_env` field for token injection from env vars
## Shell Compression (`glab` / `gh` CLI)
Patterns for CLI output:
- `glab`/`gh` issue list/view, MR/PR list/view, CI/actions status
- Compression follows pattern-based structure
## Context IR Integration
Provider outputs are tracked as `ContextIrSourceKindV1::Provider` in the evidence ledger, enabling:
- Provenance tracking (which provider data informed a decision)
- Replay verification
- Token attribution
## Diagnostics
`lean-ctx doctor` validates:
- Provider env vars (GITHUB_TOKEN, GITLAB_TOKEN, etc.)
- MCP bridge URLs (reachable, configured)
- `auto_index` status (warns if `false`)