feat(embedding,vision): candle embeddings with offline fallback, on-demand clipboard vision capture, and concurrency audit

This commit is contained in:
Riz Ashraf committed 2026-10-07 06:36:09 +01:00
1 parent 5bd8b1587a
commit e4a0fe72df
47 files changed
+6292 -3503

No files matched your search

+259 -17
View File
@@ -26,7 +26,7 @@ pub struct CreateEntitiesTool {
}
/// Create new relations between entities in the knowledge graph.
/// CRITICAL SCHEMA REQUIREMENT: Each relation item MUST strictly contain fields 'from' (source entity name string), 'to' (target entity name string), and 'relation_type' (snake_case string, e.g., 'depends_on', 'calls', 'implements'). Do NOT use 'source', 'target', or 'relationType'.
/// Create new relations between entities in the knowledge graph (accepts 'from' or 'source', 'to' or 'target', and 'relation_type' or 'type').
#[derive(Debug, Deserialize, Serialize, JsonSchema)]
pub struct CreateRelationsTool {
/// Array of relations to create. Each relation item MUST use 'from', 'to', and 'relation_type'.
@@ -73,13 +73,17 @@ pub struct DeleteRelationsTool {
pub relations: Vec<crate::models::Relation>,
}
/// Read the entire knowledge graph. WARNING: For large graphs, use search_nodes instead to avoid context limits.
/// Read the entire knowledge graph. WARNING: For large graphs, use search_nodes or pagination (limit, offset) to avoid context limits.
#[derive(Debug, Deserialize, Serialize, JsonSchema)]
pub struct ReadGraphTool {
/// Optional namespace to restrict the read to.
pub namespace: Option<String>,
/// Optional token budget cap. Truncates graph outputs to fit within the specified token budget.
pub max_tokens: Option<usize>,
/// Optional maximum number of entities to return (pagination).
pub limit: Option<usize>,
/// Optional entity offset for pagination.
pub offset: Option<usize>,
}
/// Search specifically for Knowledge Graph entities and nodes by name or type.
@@ -118,11 +122,40 @@ pub struct LogCodeChangeTool {
pub symbol_references: Option<Vec<String>>,
/// Optional line range (e.g. 'L123-L145') modified in the target file.
pub line_range: Option<String>,
/// Optional repository name (e.g. 'mcp-memory', 'ai-pr-review').
pub repo_name: Option<String>,
/// Optional repository remote origin URL (e.g. 'git@bitbucket.org:org/repo.git' or 'svn://...').
pub repo_url: Option<String>,
/// Optional project namespace (defaults to repo_name or 'global').
pub namespace: Option<String>,
/// Optional change kind: 'added', 'modified', 'deleted', 'renamed'. Defaults to 'modified'.
pub change_kind: Option<String>,
/// Optional author or subagent attribution (e.g. 'user', 'MemoryLibrarian', SVN author).
pub author: Option<String>,
/// Optional conversation or session ID.
pub session_id: Option<String>,
/// Optional VCS system type: 'git', 'svn', 'hg', etc. Auto-detected if omitted.
pub vcs_type: Option<String>,
/// Optional VCS revision identifier (e.g. SVN 'r14829' or Git commit SHA).
pub revision: Option<String>,
/// Optional VCS branch (e.g. SVN 'trunk', 'branches/v1.0' or Git branch).
pub branch: Option<String>,
/// Optional repository root URL or path.
pub repository_root: Option<String>,
}
/// Query recently logged code changes.
#[derive(Debug, Deserialize, Serialize, JsonSchema)]
pub struct QueryRecentChangesTool {}
pub struct QueryRecentChangesTool {
/// Optional namespace to filter changes by project/workspace.
pub namespace: Option<String>,
/// Optional repository name to filter changes.
pub repo_name: Option<String>,
/// Optional VCS type to filter changes ('git', 'svn', etc.).
pub vcs_type: Option<String>,
/// Maximum number of records to return (defaults to 50).
pub limit: Option<usize>,
}
/// Generate a visual representation of the knowledge graph.
#[derive(Debug, Deserialize, Serialize, JsonSchema)]
@@ -167,7 +200,6 @@ pub struct StickyNotesTool {
pub session_only: Option<bool>,
}
/// Condense or summarize an entity's observations to reduce size.
#[derive(Debug, Deserialize, Serialize, JsonSchema)]
pub struct CondenseEntityTool {
@@ -190,6 +222,16 @@ pub struct AddTaskTool {
pub parent_id: Option<String>,
/// Optional list of task IDs this task depends on.
pub dependencies: Option<Vec<String>>,
/// Optional namespace (defaults to 'default').
pub namespace: Option<String>,
/// Optional repository name.
pub repo_name: Option<String>,
/// Optional task priority: 'low', 'medium', 'high', 'urgent'.
pub priority: Option<String>,
/// Optional assigned subagent role or identifier.
pub assigned_agent: Option<String>,
/// Optional verification command to validate criteria completion.
pub verification_command: Option<String>,
}
/// Delete a task and all its children.
@@ -233,6 +275,14 @@ pub struct StoreSnippetTool {
pub description: String,
/// Optional classification tags (e.g. ['rust', 'async', 'mcp']).
pub tags: Option<Vec<String>>,
/// Optional project namespace.
pub namespace: Option<String>,
/// Optional repository name.
pub repo_name: Option<String>,
/// Optional origin file path where the snippet was extracted from.
pub origin_file: Option<String>,
/// Optional line range in origin file (e.g. 'L10-L45').
pub line_range: Option<String>,
}
/// Add classification tags to an existing code snippet.
@@ -362,6 +412,16 @@ pub struct LogDecisionTool {
pub consequence: String,
/// The ID of an older ADR this decision supersedes, if any.
pub supersedes: Option<String>,
/// Optional project namespace.
pub namespace: Option<String>,
/// Optional repository name.
pub repo_name: Option<String>,
/// Optional author or architect behind the decision.
pub author: Option<String>,
/// Optional affected system components or crates.
pub affected_components: Option<Vec<String>>,
/// Optional alternative designs or libraries considered.
pub alternatives_considered: Option<Vec<String>>,
}
/// Query architectural decision records.
@@ -448,6 +508,12 @@ pub struct PinFileTool {
pub file_path: String,
/// The associated git branch, if any.
pub git_branch: Option<String>,
/// Optional reason for pinning this file.
pub pin_reason: Option<String>,
/// Optional symbol focus or line range.
pub symbol_or_line: Option<String>,
/// Optional repository name.
pub repo_name: Option<String>,
}
/// Unpin a file from the context workspace.
@@ -551,6 +617,14 @@ pub struct AddMilestoneTool {
/// The namespace for the milestone.
#[serde(default = "crate::models::default_namespace")]
pub namespace: String,
/// Optional target completion date.
pub target_date: Option<String>,
/// Optional description of milestone scope.
pub description: Option<String>,
/// Optional deliverables or task checklist.
pub deliverables: Option<Vec<String>>,
/// Optional repository name.
pub repo_name: Option<String>,
}
/// Update the status of a milestone.
@@ -611,6 +685,14 @@ pub struct AddPrChecklistItemTool {
pub namespace: String,
/// The description of the checklist item.
pub description: String,
/// Optional checklist category (e.g. 'Security', 'Testing', 'Formatting').
pub category: Option<String>,
/// Optional automated verification command or script.
pub automated_check: Option<String>,
/// Optional checked state.
pub is_checked: Option<bool>,
/// Optional repository name.
pub repo_name: Option<String>,
}
/// Get the PR checklist.
@@ -647,6 +729,16 @@ pub struct LogTechDebtTool {
pub symbol_references: Option<Vec<String>>,
/// Optional line range (e.g. 'L123-L145') associated with the tech debt.
pub line_range: Option<String>,
/// Optional debt severity: 'low', 'medium', 'high', 'critical'.
pub severity: Option<String>,
/// Optional repository name.
pub repo_name: Option<String>,
/// Optional file path where debt exists.
pub file_path: Option<String>,
/// Optional workaround currently in place.
pub workaround: Option<String>,
/// Optional effort estimate to fix (e.g. '1 hour', '2 days').
pub effort_estimate: Option<String>,
}
/// Resolve a technical debt record.
@@ -682,6 +774,14 @@ pub struct SaveContextWorkspaceTool {
pub pinned_files: Vec<String>,
/// Array of active task IDs.
pub active_task_ids: Vec<String>,
/// Optional description of the context workspace purpose.
pub description: Option<String>,
/// Optional git branch associated with this workspace.
pub git_branch: Option<String>,
/// Optional repository name.
pub repo_name: Option<String>,
/// Optional VCS revision or commit hash.
pub vcs_revision: Option<String>,
}
/// Load a saved context workspace.
@@ -864,11 +964,6 @@ pub struct GetRecentLogsTool {
pub file_path: String,
}
/// Enable or disable clipboard watch mode (auto-ingesting into StickyNotes).
#[derive(Debug, Deserialize, Serialize, JsonSchema)]
pub struct ToggleClipboardWatchModeTool {
pub enable: bool,
}
/// Read a file and return only its AST skeleton (Imports, Structs, Enums, Traits, Functions)
#[derive(Debug, Deserialize, Serialize, JsonSchema)]
pub struct ReadFileSkeletonTool {
@@ -947,6 +1042,9 @@ pub struct FindSymbolReferencesTool {
pub symbol: String,
/// Optional maximum number of reference locations to return. Defaults to 10.
pub limit: Option<usize>,
/// Optional workspace or directory path to scan. If omitted, falls back to active pinned files or current working directory.
#[serde(default, alias = "directory", alias = "path")]
pub workspace_dir: Option<String>,
}
/// Find all caller functions or methods that invoke a specified target function or method name.
@@ -956,6 +1054,9 @@ pub struct GetCallersTool {
pub function_name: String,
/// Optional maximum number of callers to return. Defaults to 10.
pub limit: Option<usize>,
/// Optional workspace or directory path to scan. If omitted, falls back to active pinned files or current working directory.
#[serde(default, alias = "directory", alias = "path")]
pub workspace_dir: Option<String>,
}
/// Query git commit history, diffs, and change ledger entries using keyword or semantic search.
@@ -1079,8 +1180,11 @@ pub struct SearchSnippetsHybridTool {
#[derive(Debug, Deserialize, Serialize, JsonSchema, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum HandoffMemoAction {
#[serde(alias = "leave", alias = "LEAVE", alias = "Leave")]
Leave,
#[serde(alias = "read", alias = "READ", alias = "Read")]
Read,
#[serde(alias = "clear", alias = "CLEAR", alias = "Clear")]
Clear,
}
@@ -1105,11 +1209,22 @@ pub struct HandoffMemosTool {
#[derive(Debug, Deserialize, Serialize, JsonSchema, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TaskAction {
#[serde(alias = "add", alias = "ADD", alias = "Add")]
Add,
#[serde(alias = "update", alias = "UPDATE", alias = "Update")]
Update,
#[serde(alias = "delete", alias = "DELETE", alias = "Delete")]
Delete,
#[serde(alias = "list", alias = "LIST", alias = "List")]
List,
#[serde(
alias = "set_criteria",
alias = "setCriteria",
alias = "SET_CRITERIA",
alias = "SetCriteria"
)]
SetCriteria,
#[serde(alias = "verify", alias = "VERIFY", alias = "Verify")]
Verify,
}
@@ -1127,20 +1242,27 @@ pub struct TasksTool {
/// Action to perform: 'add', 'update', 'delete', 'list', 'set_criteria', or 'verify'.
pub action: TaskAction,
/// Task ID (required for 'update', 'delete', 'set_criteria', 'verify').
#[serde(alias = "task_id", alias = "taskId")]
pub id: Option<String>,
/// Task title (required for 'add').
#[serde(alias = "name")]
pub title: Option<String>,
/// Task description (optional for 'add').
#[serde(alias = "desc")]
pub description: Option<String>,
/// New status: 'pending', 'completed', or 'cancelled' (for 'update').
pub status: Option<String>,
/// Parent task ID (optional for 'add').
#[serde(alias = "parentId", alias = "parent")]
pub parent_id: Option<String>,
/// List of dependency task IDs (optional for 'add').
#[serde(alias = "deps")]
pub dependencies: Option<Vec<String>>,
/// Git branch filter or assignment.
#[serde(alias = "branch")]
pub git_branch: Option<String>,
/// Acceptance criteria (required for 'set_criteria').
#[serde(alias = "acceptance_criteria", alias = "acceptanceCriteria")]
pub criteria: Option<Vec<String>>,
/// Verification proof or details (optional for 'verify').
pub proof: Option<String>,
@@ -1148,13 +1270,26 @@ pub struct TasksTool {
pub summary_level: Option<String>,
/// Maximum tokens budget cap (for 'list').
pub max_tokens: Option<usize>,
/// Optional namespace filter or assignment (defaults to 'default').
pub namespace: Option<String>,
/// Optional repository name.
pub repo_name: Option<String>,
/// Optional task priority: 'low', 'medium', 'high', 'urgent'.
pub priority: Option<String>,
/// Optional assigned subagent role or identifier.
pub assigned_agent: Option<String>,
/// Optional verification command to validate criteria completion.
pub verification_command: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, JsonSchema, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum MilestoneAction {
#[serde(alias = "add", alias = "ADD", alias = "Add")]
Add,
#[serde(alias = "update", alias = "UPDATE", alias = "Update")]
Update,
#[serde(alias = "list", alias = "LIST", alias = "List")]
List,
}
@@ -1169,20 +1304,33 @@ pub struct MilestonesTool {
/// Action to perform: 'add', 'update', or 'list'.
pub action: MilestoneAction,
/// Milestone ID (required for 'update').
#[serde(alias = "milestone_id", alias = "milestoneId")]
pub id: Option<String>,
/// Milestone title (required for 'add').
#[serde(alias = "name")]
pub title: Option<String>,
/// New status (for 'update').
pub status: Option<String>,
/// Optional namespace filter or assignment.
pub namespace: Option<String>,
/// Optional target completion date.
pub target_date: Option<String>,
/// Optional description of milestone scope.
pub description: Option<String>,
/// Optional deliverables or task checklist.
pub deliverables: Option<Vec<String>>,
/// Optional repository name.
pub repo_name: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, JsonSchema, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum PinnedFileAction {
#[serde(alias = "pin", alias = "PIN", alias = "Pin")]
Pin,
#[serde(alias = "unpin", alias = "UNPIN", alias = "Unpin")]
Unpin,
#[serde(alias = "list", alias = "LIST", alias = "List")]
List,
}
@@ -1200,15 +1348,28 @@ pub struct PinnedFilesTool {
pub path: Option<String>,
/// Optional namespace.
pub namespace: Option<String>,
/// Optional reason for pinning this file.
pub pin_reason: Option<String>,
/// Optional symbol focus or line range.
pub symbol_or_line: Option<String>,
/// Optional repository name.
pub repo_name: Option<String>,
/// Optional git branch.
pub git_branch: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, JsonSchema, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum ContextWorkspaceAction {
#[serde(alias = "save", alias = "SAVE", alias = "Save")]
Save,
#[serde(alias = "load", alias = "LOAD", alias = "Load")]
Load,
#[serde(alias = "list", alias = "LIST", alias = "List")]
List,
#[serde(alias = "delete", alias = "DELETE", alias = "Delete")]
Delete,
#[serde(alias = "diff", alias = "DIFF", alias = "Diff")]
Diff,
}
@@ -1234,13 +1395,24 @@ pub struct ContextWorkspacesTool {
pub active_task_ids: Option<Vec<String>>,
/// Optional namespace.
pub namespace: Option<String>,
/// Optional description of the context workspace purpose.
pub description: Option<String>,
/// Optional git branch associated with this workspace.
pub git_branch: Option<String>,
/// Optional repository name.
pub repo_name: Option<String>,
/// Optional VCS revision or commit hash.
pub vcs_revision: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, JsonSchema, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum PrChecklistAction {
#[serde(alias = "add", alias = "ADD", alias = "Add")]
Add,
#[serde(alias = "get", alias = "GET", alias = "Get")]
Get,
#[serde(alias = "clear", alias = "CLEAR", alias = "Clear")]
Clear,
}
@@ -1258,14 +1430,26 @@ pub struct PrChecklistTool {
pub description: Option<String>,
/// Optional namespace.
pub namespace: Option<String>,
/// Optional checklist category (e.g. 'Security', 'Testing', 'Formatting').
pub category: Option<String>,
/// Optional automated verification command or script.
pub automated_check: Option<String>,
/// Optional checked state.
pub is_checked: Option<bool>,
/// Optional repository name.
pub repo_name: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, JsonSchema, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum SnippetAction {
#[serde(alias = "store", alias = "STORE", alias = "Store")]
Store,
#[serde(alias = "search", alias = "SEARCH", alias = "Search")]
Search,
#[serde(alias = "delete", alias = "DELETE", alias = "Delete")]
Delete,
#[serde(alias = "tag", alias = "TAG", alias = "Tag")]
Tag,
}
@@ -1296,13 +1480,24 @@ pub struct SnippetsTool {
pub tags: Option<Vec<String>>,
/// Enable hybrid lexical + semantic vector ranking (for 'search').
pub hybrid: Option<bool>,
/// Optional project namespace.
pub namespace: Option<String>,
/// Optional repository name.
pub repo_name: Option<String>,
/// Optional origin file path where the snippet was extracted from.
pub origin_file: Option<String>,
/// Optional line range in origin file (e.g. 'L10-L45').
pub line_range: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, JsonSchema, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum DecisionAction {
#[serde(alias = "log", alias = "LOG", alias = "Log")]
Log,
#[serde(alias = "query", alias = "QUERY", alias = "Query")]
Query,
#[serde(alias = "delete", alias = "DELETE", alias = "Delete")]
Delete,
}
@@ -1332,13 +1527,24 @@ pub struct DecisionsTool {
pub query: Option<String>,
/// Optional namespace.
pub namespace: Option<String>,
/// Optional repository name.
pub repo_name: Option<String>,
/// Optional author or architect behind the decision.
pub author: Option<String>,
/// Optional affected system components or crates.
pub affected_components: Option<Vec<String>>,
/// Optional alternative designs or libraries considered.
pub alternatives_considered: Option<Vec<String>>,
}
#[derive(Debug, Deserialize, Serialize, JsonSchema, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TechDebtAction {
#[serde(alias = "log", alias = "LOG", alias = "Log")]
Log,
#[serde(alias = "resolve", alias = "RESOLVE", alias = "Resolve")]
Resolve,
#[serde(alias = "list", alias = "LIST", alias = "List")]
List,
}
@@ -1353,16 +1559,21 @@ pub struct TechDebtTool {
/// Action to perform: 'log', 'resolve', or 'list'.
pub action: TechDebtAction,
/// Tech debt ID (required for 'resolve').
#[serde(alias = "tech_debt_id", alias = "debt_id")]
pub id: Option<String>,
/// Tech debt description (required for 'log').
#[serde(alias = "desc", alias = "title")]
pub description: Option<String>,
/// Ideal solution (optional for 'log').
#[serde(alias = "solution", alias = "fix")]
pub ideal_solution: Option<String>,
/// Include resolved tech debt items (for 'list').
pub include_resolved: Option<bool>,
/// Associated git commit hash.
#[serde(alias = "commit")]
pub git_commit: Option<String>,
/// Associated git branch.
#[serde(alias = "branch")]
pub git_branch: Option<String>,
/// Symbol references associated with the tech debt.
pub symbol_references: Option<Vec<String>>,
@@ -1370,15 +1581,50 @@ pub struct TechDebtTool {
pub line_range: Option<String>,
/// Optional namespace.
pub namespace: Option<String>,
/// Optional debt severity: 'low', 'medium', 'high', 'critical'.
pub severity: Option<String>,
/// Optional repository name.
pub repo_name: Option<String>,
/// Optional file path where debt exists.
pub file_path: Option<String>,
/// Optional workaround currently in place.
pub workaround: Option<String>,
/// Optional effort estimate to fix.
pub effort_estimate: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, JsonSchema, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum EnvAction {
#[serde(
alias = "update_fingerprint",
alias = "updateFingerprint",
alias = "UPDATE_FINGERPRINT",
alias = "UpdateFingerprint"
)]
UpdateFingerprint,
#[serde(
alias = "read_fingerprint",
alias = "readFingerprint",
alias = "READ_FINGERPRINT",
alias = "ReadFingerprint"
)]
ReadFingerprint,
#[serde(
alias = "log_requirement",
alias = "logRequirement",
alias = "LOG_REQUIREMENT",
alias = "LogRequirement"
)]
LogRequirement,
#[serde(alias = "register", alias = "REGISTER", alias = "Register")]
Register,
#[serde(
alias = "get_details",
alias = "getDetails",
alias = "GET_DETAILS",
alias = "GetDetails"
)]
GetDetails,
}
@@ -1415,20 +1661,19 @@ pub struct EnvironmentTool {
#[derive(Debug, Deserialize, Serialize, JsonSchema, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum ClipboardAction {
#[serde(alias = "read", alias = "READ", alias = "Read")]
Read,
#[serde(alias = "write", alias = "WRITE", alias = "Write")]
Write,
ToggleWatch,
}
/// OS Clipboard management (read, write, toggle_watch).
/// OS Clipboard management (read, write).
/// Actions:
/// - 'read': Read current clipboard contents.
/// - 'write': Write content to OS clipboard. Optional: text, html, files, image_path.
/// - 'toggle_watch': Enable or disable auto-clipboard ingestion. Optional: enabled (bool).
/// Next steps on error: Provide text/html/files/image_path when calling 'write'.
#[derive(Debug, Deserialize, Serialize, JsonSchema)]
pub struct ClipboardTool {
/// Action to perform: 'read', 'write', or 'toggle_watch'.
/// Action to perform: 'read' or 'write'.
pub action: ClipboardAction,
/// Plain text content (for 'write').
pub text: Option<String>,
@@ -1438,7 +1683,4 @@ pub struct ClipboardTool {
pub files: Option<Vec<String>>,
/// Image path (for 'write').
pub image_path: Option<String>,
/// Enable watch mode flag (for 'toggle_watch').
pub enabled: Option<bool>,
}