Files
yvgude--lean-ctx/integrations/hermes-lean-ctx/schemas.py
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

150 lines
5.2 KiB
Python

"""Engine tool schemas injected into the Hermes agent tool list.
Each schema is ``{"name", "description", "parameters"}`` per the Context Engine
plugin guide. Parameters mirror the daemon's real ``/v1`` tool argument schemas
so calls dispatched through :mod:`tools` are accepted as-is. These are
lean-ctx's recall / code-intelligence surface — the agent pulls exactly the
context it needs instead of holding it in the window.
"""
from __future__ import annotations
from typing import Any, Dict, List
CTX_SEARCH: Dict[str, Any] = {
"name": "ctx_search",
"description": (
"Regex code/content search across the project (compact, .gitignore-aware). "
"Use to locate code instead of keeping files in context."
),
"parameters": {
"type": "object",
"properties": {
"pattern": {"type": "string", "description": "Regex pattern"},
"path": {"type": "string", "description": "Directory to search"},
"include": {"type": "string", "description": "Glob filter, e.g. *.ts, src/**/*.rs"},
"max_results": {"type": "integer", "description": "Default 20"},
},
"required": ["pattern"],
},
}
CTX_SEMANTIC_SEARCH: Dict[str, Any] = {
"name": "ctx_semantic_search",
"description": (
"Concept/semantic search (hybrid BM25 + embeddings) over the codebase. "
"Use when keyword search is insufficient."
),
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "Natural-language or symbol query"},
"path": {"type": "string", "description": "Project root (default: .)"},
"mode": {
"type": "string",
"enum": ["bm25", "dense", "hybrid"],
"description": "Default hybrid",
},
"top_k": {"type": "integer", "description": "Result count (default 10)"},
},
"required": ["query"],
},
}
CTX_READ: Dict[str, Any] = {
"name": "ctx_read",
"description": (
"Read a file (cached + compressed). Prefer over loading whole files into "
"context; use mode/line ranges to read only what is needed."
),
"parameters": {
"type": "object",
"properties": {
"path": {"type": "string", "description": "Absolute file path"},
"mode": {
"type": "string",
"description": "auto (default)|full|map|signatures|lines:N-M|...",
},
"start_line": {"type": "integer", "description": "First line, 1-based"},
"limit": {"type": "integer", "description": "Max lines to read"},
},
"required": ["path"],
},
}
CTX_EXPAND: Dict[str, Any] = {
"name": "ctx_expand",
"description": (
"Retrieve archived/firewalled tool output (zero-loss) by id or handle "
"(@F1). Use to recover full detail that was compacted away."
),
"parameters": {
"type": "object",
"properties": {
"action": {"type": "string", "description": "retrieve (default)|list|search_all"},
"id": {"type": "string", "description": "Archive id or handle ref (@F1)"},
"query": {"type": "string", "description": "search_all query"},
"head": {"type": "integer", "description": "First N lines"},
"tail": {"type": "integer", "description": "Last N lines"},
},
"required": [],
},
}
CTX_KNOWLEDGE: Dict[str, Any] = {
"name": "ctx_knowledge",
"description": (
"Persistent cross-session project knowledge: remember/recall facts, "
"patterns and gotchas with temporal validity."
),
"parameters": {
"type": "object",
"properties": {
"action": {
"type": "string",
"description": "remember|recall|search|pattern|gotcha|status|timeline|remove",
},
"query": {"type": "string", "description": "For recall/search"},
"key": {"type": "string"},
"value": {"type": "string"},
"category": {"type": "string", "description": "Fact category"},
"mode": {"type": "string", "description": "Recall: auto|exact|semantic|hybrid"},
},
"required": ["action"],
},
}
CTX_SUMMARY: Dict[str, Any] = {
"name": "ctx_summary",
"description": (
"Recall or record AI session summaries across sessions. Use recall with a "
"query to retrieve what earlier sessions did."
),
"parameters": {
"type": "object",
"properties": {
"action": {"type": "string", "description": "recall (default)|record|list"},
"query": {"type": "string", "description": "Recall query"},
"top_k": {"type": "integer", "description": "Result count (default 5)"},
},
"required": [],
},
}
# Order is stable for deterministic tool-list injection.
ALL_SCHEMAS: List[Dict[str, Any]] = [
CTX_SEARCH,
CTX_SEMANTIC_SEARCH,
CTX_READ,
CTX_EXPAND,
CTX_KNOWLEDGE,
CTX_SUMMARY,
]
TOOL_NAMES: List[str] = [s["name"] for s in ALL_SCHEMAS]
def recall_hint() -> str:
"""One-line hint appended to compaction summaries listing recovery tools."""
return "Recover detail with: " + ", ".join(f"{n}()" for n in TOOL_NAMES) + "."