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
133 lines
4.4 KiB
Markdown
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`)
|