@crowley/rag-mcp 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/tools/memory.test.js +2 -2
- package/dist/tools/advanced.js +6 -6
- package/dist/tools/agents.js +1 -1
- package/dist/tools/analytics.js +1 -1
- package/dist/tools/architecture.js +3 -3
- package/dist/tools/ask.js +1 -1
- package/dist/tools/clustering.js +6 -6
- package/dist/tools/confluence.js +2 -2
- package/dist/tools/indexing.js +3 -3
- package/dist/tools/memory.js +6 -6
- package/dist/tools/pm.js +3 -3
- package/dist/tools/search.js +15 -15
- package/dist/tools/session.js +1 -1
- package/dist/tools/suggestions.js +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
-
import { createMemoryTools } from '../../tools/memory';
|
|
2
|
+
import { createMemoryTools } from '../../tools/memory.js';
|
|
3
3
|
function createMockCtx() {
|
|
4
4
|
return {
|
|
5
5
|
api: {
|
|
@@ -24,7 +24,7 @@ describe('Memory Tools', () => {
|
|
|
24
24
|
ctx = createMockCtx();
|
|
25
25
|
});
|
|
26
26
|
function findTool(name) {
|
|
27
|
-
return tools.find(t => t.name === name);
|
|
27
|
+
return tools.find((t) => t.name === name);
|
|
28
28
|
}
|
|
29
29
|
describe('remember', () => {
|
|
30
30
|
it('stores memory and returns formatted result', async () => {
|
package/dist/tools/advanced.js
CHANGED
|
@@ -15,9 +15,9 @@ export function createAdvancedTools(projectName) {
|
|
|
15
15
|
description: `Consolidate duplicate memories for ${projectName}. Finds similar memories and merges them using LLM to reduce clutter.`,
|
|
16
16
|
schema: z.object({
|
|
17
17
|
type: z.string().optional().describe("Filter by memory type (decision, insight, context, todo, conversation, note, or all). Default: all"),
|
|
18
|
-
threshold: z.number().optional().describe("Similarity threshold for merging (0.5-1.0, default: 0.9). Lower = more aggressive merging."),
|
|
18
|
+
threshold: z.coerce.number().optional().describe("Similarity threshold for merging (0.5-1.0, default: 0.9). Lower = more aggressive merging."),
|
|
19
19
|
dryRun: z.boolean().optional().describe("If true, preview merge candidates without making changes (default: true)."),
|
|
20
|
-
limit: z.number().optional().describe("Max clusters to process (default: 50)."),
|
|
20
|
+
limit: z.coerce.number().optional().describe("Max clusters to process (default: 50)."),
|
|
21
21
|
}),
|
|
22
22
|
annotations: TOOL_ANNOTATIONS["merge_memories"],
|
|
23
23
|
handler: async (args, ctx) => {
|
|
@@ -65,7 +65,7 @@ export function createAdvancedTools(projectName) {
|
|
|
65
65
|
currentFile: z.string().describe("Path of the file being edited"),
|
|
66
66
|
currentCode: z.string().describe("Current code snippet or file content"),
|
|
67
67
|
language: z.string().optional().describe("Programming language filter (optional)"),
|
|
68
|
-
limit: z.number().optional().describe("Max results (default: 5)"),
|
|
68
|
+
limit: z.coerce.number().optional().describe("Max results (default: 5)"),
|
|
69
69
|
}),
|
|
70
70
|
annotations: TOOL_ANNOTATIONS["get_completion_context"],
|
|
71
71
|
handler: async (args, ctx) => {
|
|
@@ -108,7 +108,7 @@ export function createAdvancedTools(projectName) {
|
|
|
108
108
|
currentFile: z.string().describe("Path of the file being edited"),
|
|
109
109
|
currentCode: z.string().describe("Current code content"),
|
|
110
110
|
language: z.string().optional().describe("Programming language filter (optional)"),
|
|
111
|
-
limit: z.number().optional().describe("Max suggestions (default: 10)"),
|
|
111
|
+
limit: z.coerce.number().optional().describe("Max suggestions (default: 10)"),
|
|
112
112
|
}),
|
|
113
113
|
annotations: TOOL_ANNOTATIONS["get_import_suggestions"],
|
|
114
114
|
handler: async (args, ctx) => {
|
|
@@ -147,7 +147,7 @@ export function createAdvancedTools(projectName) {
|
|
|
147
147
|
typeName: z.string().optional().describe("Name of the type/interface/class to look up"),
|
|
148
148
|
code: z.string().optional().describe("Code containing types to look up (alternative to typeName)"),
|
|
149
149
|
currentFile: z.string().optional().describe("Current file to exclude from results"),
|
|
150
|
-
limit: z.number().optional().describe("Max results per category (default: 5)"),
|
|
150
|
+
limit: z.coerce.number().optional().describe("Max results per category (default: 5)"),
|
|
151
151
|
}),
|
|
152
152
|
annotations: TOOL_ANNOTATIONS["get_type_context"],
|
|
153
153
|
handler: async (args, ctx) => {
|
|
@@ -187,7 +187,7 @@ export function createAdvancedTools(projectName) {
|
|
|
187
187
|
name: "get_behavior_patterns",
|
|
188
188
|
description: `Analyze user workflow patterns for ${projectName}. Shows peak hours, tool preferences, common sequences, and session statistics.`,
|
|
189
189
|
schema: z.object({
|
|
190
|
-
days: z.number().optional().describe("Number of days to analyze (default: 7)"),
|
|
190
|
+
days: z.coerce.number().optional().describe("Number of days to analyze (default: 7)"),
|
|
191
191
|
sessionId: z.string().optional().describe("Filter to a specific session (optional)"),
|
|
192
192
|
}),
|
|
193
193
|
annotations: TOOL_ANNOTATIONS["get_behavior_patterns"],
|
package/dist/tools/agents.js
CHANGED
|
@@ -15,7 +15,7 @@ export function createAgentTools(projectName) {
|
|
|
15
15
|
type: z.enum(["research", "review", "documentation", "refactor", "test"]).describe("Agent type: research, review, documentation, refactor, or test"),
|
|
16
16
|
task: z.string().describe("The task for the agent to perform"),
|
|
17
17
|
context: z.string().optional().describe("Optional additional context (code, requirements, etc.)"),
|
|
18
|
-
maxIterations: z.number().optional().describe("Maximum ReAct iterations (default: varies by agent type)"),
|
|
18
|
+
maxIterations: z.coerce.number().optional().describe("Maximum ReAct iterations (default: varies by agent type)"),
|
|
19
19
|
}),
|
|
20
20
|
annotations: TOOL_ANNOTATIONS["run_agent"],
|
|
21
21
|
handler: async (args, ctx) => {
|
package/dist/tools/analytics.js
CHANGED
|
@@ -154,7 +154,7 @@ export function createAnalyticsTools(projectName) {
|
|
|
154
154
|
description: `Enable scalar quantization on a ${projectName} collection to reduce memory usage.`,
|
|
155
155
|
schema: z.object({
|
|
156
156
|
collectionName: z.string().describe("Collection name to enable quantization on"),
|
|
157
|
-
quantile: z.number().optional().describe("Quantile for quantization (0-1, default: 0.99)"),
|
|
157
|
+
quantile: z.coerce.number().optional().describe("Quantile for quantization (0-1, default: 0.99)"),
|
|
158
158
|
}),
|
|
159
159
|
annotations: TOOL_ANNOTATIONS["enable_quantization"],
|
|
160
160
|
handler: async (args, ctx) => {
|
|
@@ -56,7 +56,7 @@ ${alternatives ? `## Alternatives Considered\n${alternatives}` : ""}`;
|
|
|
56
56
|
schema: z.object({
|
|
57
57
|
query: z.string().optional().describe("Search query (optional - returns all if empty)"),
|
|
58
58
|
status: z.enum(["proposed", "accepted", "deprecated", "superseded", "all"]).optional().describe("Filter by status"),
|
|
59
|
-
limit: z.number().optional().describe("Max results (default: 10)"),
|
|
59
|
+
limit: z.coerce.number().optional().describe("Max results (default: 10)"),
|
|
60
60
|
}),
|
|
61
61
|
annotations: TOOL_ANNOTATIONS["get_adrs"],
|
|
62
62
|
handler: async (args, ctx) => {
|
|
@@ -138,7 +138,7 @@ ${appliesTo ? `## Applies To\n${appliesTo}` : ""}`;
|
|
|
138
138
|
schema: z.object({
|
|
139
139
|
query: z.string().optional().describe("Search for patterns by name or description"),
|
|
140
140
|
appliesTo: z.string().optional().describe("Filter by what patterns apply to (e.g., 'api', 'module')"),
|
|
141
|
-
limit: z.number().optional().describe("Max results (default: 10)"),
|
|
141
|
+
limit: z.coerce.number().optional().describe("Max results (default: 10)"),
|
|
142
142
|
}),
|
|
143
143
|
annotations: TOOL_ANNOTATIONS["get_patterns"],
|
|
144
144
|
handler: async (args, ctx) => {
|
|
@@ -437,7 +437,7 @@ ${relatedAdr ? `## Related ADR\n${relatedAdr}` : ""}`;
|
|
|
437
437
|
description: `List technical debt items for ${projectName}.`,
|
|
438
438
|
schema: z.object({
|
|
439
439
|
impact: z.enum(["low", "medium", "high", "critical", "all"]).optional().describe("Filter by impact"),
|
|
440
|
-
limit: z.number().optional().describe("Max results (default: 10)"),
|
|
440
|
+
limit: z.coerce.number().optional().describe("Max results (default: 10)"),
|
|
441
441
|
}),
|
|
442
442
|
annotations: TOOL_ANNOTATIONS["get_tech_debt"],
|
|
443
443
|
handler: async (args, ctx) => {
|
package/dist/tools/ask.js
CHANGED
|
@@ -99,7 +99,7 @@ export function createAskTools(projectName) {
|
|
|
99
99
|
conversation: z.string().describe("The conversation text to analyze"),
|
|
100
100
|
context: z.string().optional().describe("Additional context about the conversation"),
|
|
101
101
|
autoSave: z.boolean().optional().describe("Automatically save extracted learnings (default: false)"),
|
|
102
|
-
minConfidence: z.number().optional().describe("Minimum confidence threshold for learnings (0-1, default: 0.7)"),
|
|
102
|
+
minConfidence: z.coerce.number().optional().describe("Minimum confidence threshold for learnings (0-1, default: 0.7)"),
|
|
103
103
|
}),
|
|
104
104
|
annotations: TOOL_ANNOTATIONS["analyze_conversation"],
|
|
105
105
|
handler: async (args, ctx) => {
|
package/dist/tools/clustering.js
CHANGED
|
@@ -15,8 +15,8 @@ export function createClusteringTools(projectName) {
|
|
|
15
15
|
description: `Cluster code in the ${projectName} codebase by similarity. Groups related files around seed points.`,
|
|
16
16
|
schema: z.object({
|
|
17
17
|
seedIds: z.array(z.string()).describe("Seed point IDs to cluster around"),
|
|
18
|
-
limit: z.number().optional().describe("Max results per cluster (default: 5)"),
|
|
19
|
-
threshold: z.number().optional().describe("Minimum similarity threshold (0-1, default: 0.7)"),
|
|
18
|
+
limit: z.coerce.number().optional().describe("Max results per cluster (default: 5)"),
|
|
19
|
+
threshold: z.coerce.number().optional().describe("Minimum similarity threshold (0-1, default: 0.7)"),
|
|
20
20
|
}),
|
|
21
21
|
annotations: TOOL_ANNOTATIONS["cluster_code"],
|
|
22
22
|
handler: async (args, ctx) => {
|
|
@@ -52,8 +52,8 @@ export function createClusteringTools(projectName) {
|
|
|
52
52
|
description: `Find duplicate or near-duplicate code in ${projectName}. Groups similar files by content.`,
|
|
53
53
|
schema: z.object({
|
|
54
54
|
collection: z.string().optional().describe("Collection to search (default: codebase)"),
|
|
55
|
-
limit: z.number().optional().describe("Max duplicate groups to return (default: 10)"),
|
|
56
|
-
threshold: z.number().optional().describe("Minimum similarity threshold (0-1, default: 0.9)"),
|
|
55
|
+
limit: z.coerce.number().optional().describe("Max duplicate groups to return (default: 10)"),
|
|
56
|
+
threshold: z.coerce.number().optional().describe("Minimum similarity threshold (0-1, default: 0.9)"),
|
|
57
57
|
}),
|
|
58
58
|
annotations: TOOL_ANNOTATIONS["find_duplicates"],
|
|
59
59
|
handler: async (args, ctx) => {
|
|
@@ -97,7 +97,7 @@ export function createClusteringTools(projectName) {
|
|
|
97
97
|
schema: z.object({
|
|
98
98
|
positiveIds: z.array(z.string()).describe("IDs of vectors to find similar code to"),
|
|
99
99
|
negativeIds: z.array(z.string()).optional().describe("IDs of vectors to avoid (dissimilar)"),
|
|
100
|
-
limit: z.number().optional().describe("Max results (default: 5)"),
|
|
100
|
+
limit: z.coerce.number().optional().describe("Max results (default: 5)"),
|
|
101
101
|
}),
|
|
102
102
|
annotations: TOOL_ANNOTATIONS["recommend_similar"],
|
|
103
103
|
handler: async (args, ctx) => {
|
|
@@ -129,7 +129,7 @@ export function createClusteringTools(projectName) {
|
|
|
129
129
|
text: z.string().describe("Text to extract learnings from"),
|
|
130
130
|
context: z.string().optional().describe("Additional context about the text"),
|
|
131
131
|
autoSave: z.boolean().optional().describe("Automatically save extracted learnings (default: false)"),
|
|
132
|
-
minConfidence: z.number().optional().describe("Minimum confidence threshold (0-1, default: 0.7)"),
|
|
132
|
+
minConfidence: z.coerce.number().optional().describe("Minimum confidence threshold (0-1, default: 0.7)"),
|
|
133
133
|
}),
|
|
134
134
|
annotations: TOOL_ANNOTATIONS["extract_learnings"],
|
|
135
135
|
handler: async (args, ctx) => {
|
package/dist/tools/confluence.js
CHANGED
|
@@ -15,7 +15,7 @@ export function createConfluenceTools(projectName) {
|
|
|
15
15
|
description: `Search indexed Confluence documentation for ${projectName}. Returns relevant pages with content snippets.`,
|
|
16
16
|
schema: z.object({
|
|
17
17
|
query: z.string().describe("Search query for Confluence content"),
|
|
18
|
-
limit: z.number().optional().describe("Max results (default: 5)"),
|
|
18
|
+
limit: z.coerce.number().optional().describe("Max results (default: 5)"),
|
|
19
19
|
spaceKey: z.string().optional().describe("Filter by Confluence space key"),
|
|
20
20
|
}),
|
|
21
21
|
annotations: TOOL_ANNOTATIONS["search_confluence"],
|
|
@@ -46,7 +46,7 @@ export function createConfluenceTools(projectName) {
|
|
|
46
46
|
schema: z.object({
|
|
47
47
|
spaceKeys: z.array(z.string()).optional().describe("Specific space keys to index (indexes all accessible if empty)"),
|
|
48
48
|
labels: z.array(z.string()).optional().describe("Filter pages by labels"),
|
|
49
|
-
maxPages: z.number().optional().describe("Maximum pages to index (default: 500)"),
|
|
49
|
+
maxPages: z.coerce.number().optional().describe("Maximum pages to index (default: 500)"),
|
|
50
50
|
force: z.boolean().optional().describe("Force re-index even if already indexed"),
|
|
51
51
|
}),
|
|
52
52
|
annotations: TOOL_ANNOTATIONS["index_confluence"],
|
package/dist/tools/indexing.js
CHANGED
|
@@ -138,10 +138,10 @@ export function createIndexingTools(projectName) {
|
|
|
138
138
|
schema: z.object({}),
|
|
139
139
|
outputSchema: z.object({
|
|
140
140
|
status: z.string(),
|
|
141
|
-
totalFiles: z.number().optional(),
|
|
142
|
-
indexedFiles: z.number().optional(),
|
|
141
|
+
totalFiles: z.coerce.number().optional(),
|
|
142
|
+
indexedFiles: z.coerce.number().optional(),
|
|
143
143
|
lastUpdated: z.string().optional(),
|
|
144
|
-
vectorCount: z.number().optional(),
|
|
144
|
+
vectorCount: z.coerce.number().optional(),
|
|
145
145
|
cached: z.boolean(),
|
|
146
146
|
}),
|
|
147
147
|
annotations: TOOL_ANNOTATIONS["get_index_status"],
|
package/dist/tools/memory.js
CHANGED
|
@@ -62,7 +62,7 @@ export function createMemoryTools(projectName) {
|
|
|
62
62
|
schema: z.object({
|
|
63
63
|
query: z.string().describe("What to recall (semantic search)"),
|
|
64
64
|
type: z.enum(["decision", "insight", "context", "todo", "conversation", "note", "all"]).optional().describe("Filter by memory type (default: all)"),
|
|
65
|
-
limit: z.number().optional().describe("Max memories to retrieve (default: 5)"),
|
|
65
|
+
limit: z.coerce.number().optional().describe("Max memories to retrieve (default: 5)"),
|
|
66
66
|
}),
|
|
67
67
|
annotations: TOOL_ANNOTATIONS["recall"],
|
|
68
68
|
handler: async (args, ctx) => {
|
|
@@ -89,8 +89,8 @@ export function createMemoryTools(projectName) {
|
|
|
89
89
|
schema: z.object({
|
|
90
90
|
type: z.enum(["decision", "insight", "context", "todo", "conversation", "note", "all"]).optional().describe("Filter by type"),
|
|
91
91
|
tag: z.string().optional().describe("Filter by tag"),
|
|
92
|
-
limit: z.number().optional().describe("Max results (default: 10)"),
|
|
93
|
-
offset: z.number().optional().describe("Pagination offset (default: 0)"),
|
|
92
|
+
limit: z.coerce.number().optional().describe("Max results (default: 10)"),
|
|
93
|
+
offset: z.coerce.number().optional().describe("Pagination offset (default: 0)"),
|
|
94
94
|
}),
|
|
95
95
|
annotations: TOOL_ANNOTATIONS["list_memories"],
|
|
96
96
|
handler: async (args, ctx) => {
|
|
@@ -129,7 +129,7 @@ export function createMemoryTools(projectName) {
|
|
|
129
129
|
schema: z.object({
|
|
130
130
|
memoryId: z.string().optional().describe("Specific memory ID to delete"),
|
|
131
131
|
type: z.enum(["decision", "insight", "context", "todo", "conversation", "note"]).optional().describe("Delete all memories of this type"),
|
|
132
|
-
olderThanDays: z.number().optional().describe("Delete memories older than N days"),
|
|
132
|
+
olderThanDays: z.coerce.number().optional().describe("Delete memories older than N days"),
|
|
133
133
|
}),
|
|
134
134
|
annotations: TOOL_ANNOTATIONS["forget"],
|
|
135
135
|
handler: async (args, ctx) => {
|
|
@@ -247,8 +247,8 @@ export function createMemoryTools(projectName) {
|
|
|
247
247
|
name: "review_memories",
|
|
248
248
|
description: `Get auto-extracted memories pending review in ${projectName}. Shows unvalidated learnings that need human confirmation.`,
|
|
249
249
|
schema: z.object({
|
|
250
|
-
limit: z.number().optional().describe("Max memories to return (default: 20)"),
|
|
251
|
-
offset: z.number().optional().describe("Pagination offset (default: 0)"),
|
|
250
|
+
limit: z.coerce.number().optional().describe("Max memories to return (default: 20)"),
|
|
251
|
+
offset: z.coerce.number().optional().describe("Pagination offset (default: 0)"),
|
|
252
252
|
}),
|
|
253
253
|
annotations: TOOL_ANNOTATIONS["review_memories"],
|
|
254
254
|
handler: async (args, ctx) => {
|
package/dist/tools/pm.js
CHANGED
|
@@ -15,7 +15,7 @@ export function createPmTools(projectName) {
|
|
|
15
15
|
description: `Search technical requirements and product documentation for ${projectName}. Finds relevant requirements, user stories, and specifications from Confluence.`,
|
|
16
16
|
schema: z.object({
|
|
17
17
|
query: z.string().describe("Search query for requirements (e.g., 'video inspection flow', 'payment integration')"),
|
|
18
|
-
limit: z.number().optional().describe("Max results (default: 5)"),
|
|
18
|
+
limit: z.coerce.number().optional().describe("Max results (default: 5)"),
|
|
19
19
|
}),
|
|
20
20
|
annotations: TOOL_ANNOTATIONS["search_requirements"],
|
|
21
21
|
handler: async (args, ctx) => {
|
|
@@ -236,8 +236,8 @@ export function createPmTools(projectName) {
|
|
|
236
236
|
description: `List all documented requirements/features for ${projectName} from Confluence. Groups by category or status.`,
|
|
237
237
|
schema: z.object({
|
|
238
238
|
category: z.string().optional().describe("Filter by category (optional)"),
|
|
239
|
-
limit: z.number().optional().describe("Max results (default: 20)"),
|
|
240
|
-
offset: z.number().optional().describe("Pagination offset (default: 0)"),
|
|
239
|
+
limit: z.coerce.number().optional().describe("Max results (default: 20)"),
|
|
240
|
+
offset: z.coerce.number().optional().describe("Pagination offset (default: 0)"),
|
|
241
241
|
}),
|
|
242
242
|
annotations: TOOL_ANNOTATIONS["list_requirements"],
|
|
243
243
|
handler: async (args, ctx) => {
|
package/dist/tools/search.js
CHANGED
|
@@ -15,7 +15,7 @@ export function createSearchTools(projectName) {
|
|
|
15
15
|
description: `Search the ${projectName} codebase. Returns file locations, symbols, and graph connections. Use Read tool to view the actual code at returned locations.`,
|
|
16
16
|
schema: z.object({
|
|
17
17
|
query: z.string().describe("Search query for finding code"),
|
|
18
|
-
limit: z.number().optional().describe("Max results to return (default: 5)"),
|
|
18
|
+
limit: z.coerce.number().optional().describe("Max results to return (default: 5)"),
|
|
19
19
|
language: z.string().optional().describe("Filter by language (typescript, python, vue, etc.)"),
|
|
20
20
|
path: z.string().optional().describe("Filter by path pattern (e.g., 'src/modules/*')"),
|
|
21
21
|
layer: z.string().optional().describe("Filter by architectural layer (api, service, util, model, middleware, test, parser, types, config, other)"),
|
|
@@ -43,7 +43,7 @@ export function createSearchTools(projectName) {
|
|
|
43
43
|
description: "Find code similar to a given snippet.",
|
|
44
44
|
schema: z.object({
|
|
45
45
|
code: z.string().describe("Code snippet to find similar code for"),
|
|
46
|
-
limit: z.number().optional().describe("Max results (default: 5)"),
|
|
46
|
+
limit: z.coerce.number().optional().describe("Max results (default: 5)"),
|
|
47
47
|
}),
|
|
48
48
|
annotations: TOOL_ANNOTATIONS["search_similar"],
|
|
49
49
|
handler: async (args, ctx) => {
|
|
@@ -66,7 +66,7 @@ export function createSearchTools(projectName) {
|
|
|
66
66
|
schema: z.object({
|
|
67
67
|
query: z.string().describe("Search query"),
|
|
68
68
|
groupBy: z.string().optional().describe("Field to group by (default: 'file')"),
|
|
69
|
-
limit: z.number().optional().describe("Max groups to return (default: 10)"),
|
|
69
|
+
limit: z.coerce.number().optional().describe("Max groups to return (default: 10)"),
|
|
70
70
|
language: z.string().optional().describe("Filter by language"),
|
|
71
71
|
layer: z.string().optional().describe("Filter by architectural layer (api, service, util, etc.)"),
|
|
72
72
|
service: z.string().optional().describe("Filter by service/class name"),
|
|
@@ -97,8 +97,8 @@ export function createSearchTools(projectName) {
|
|
|
97
97
|
description: `Hybrid search combining keyword matching and semantic similarity for ${projectName}. Returns file locations with symbols and connections. Use Read tool to view code.`,
|
|
98
98
|
schema: z.object({
|
|
99
99
|
query: z.string().describe("Search query"),
|
|
100
|
-
limit: z.number().optional().describe("Max results (default: 10)"),
|
|
101
|
-
semanticWeight: z.number().optional().describe("Weight for semantic vs keyword (0-1, default: 0.7)"),
|
|
100
|
+
limit: z.coerce.number().optional().describe("Max results (default: 10)"),
|
|
101
|
+
semanticWeight: z.coerce.number().optional().describe("Weight for semantic vs keyword (0-1, default: 0.7)"),
|
|
102
102
|
language: z.string().optional().describe("Filter by language"),
|
|
103
103
|
layer: z.string().optional().describe("Filter by architectural layer (api, service, util, etc.)"),
|
|
104
104
|
service: z.string().optional().describe("Filter by service/class name"),
|
|
@@ -128,7 +128,7 @@ export function createSearchTools(projectName) {
|
|
|
128
128
|
description: `Search documentation in the ${projectName} project.`,
|
|
129
129
|
schema: z.object({
|
|
130
130
|
query: z.string().describe("Search query"),
|
|
131
|
-
limit: z.number().optional().describe("Max results (default: 5)"),
|
|
131
|
+
limit: z.coerce.number().optional().describe("Max results (default: 5)"),
|
|
132
132
|
}),
|
|
133
133
|
annotations: TOOL_ANNOTATIONS["search_docs"],
|
|
134
134
|
handler: async (args, ctx) => {
|
|
@@ -154,11 +154,11 @@ export function createSearchTools(projectName) {
|
|
|
154
154
|
schema: z.object({}),
|
|
155
155
|
outputSchema: z.object({
|
|
156
156
|
projectName: z.string(),
|
|
157
|
-
totalFiles: z.number(),
|
|
158
|
-
totalLines: z.number().optional(),
|
|
159
|
-
vectorCount: z.number(),
|
|
157
|
+
totalFiles: z.coerce.number(),
|
|
158
|
+
totalLines: z.coerce.number().optional(),
|
|
159
|
+
vectorCount: z.coerce.number(),
|
|
160
160
|
lastIndexed: z.string().optional(),
|
|
161
|
-
languages: z.record(z.string(), z.number()).optional(),
|
|
161
|
+
languages: z.record(z.string(), z.coerce.number()).optional(),
|
|
162
162
|
}),
|
|
163
163
|
annotations: TOOL_ANNOTATIONS["get_project_stats"],
|
|
164
164
|
handler: async (_args, ctx) => {
|
|
@@ -194,15 +194,15 @@ export function createSearchTools(projectName) {
|
|
|
194
194
|
schema: z.object({
|
|
195
195
|
symbol: z.string().describe("Symbol name to find (function, class, type, etc.)"),
|
|
196
196
|
kind: z.string().optional().describe("Filter by kind: function, class, interface, type, enum, const"),
|
|
197
|
-
limit: z.number().optional().describe("Max results (default: 10)"),
|
|
197
|
+
limit: z.coerce.number().optional().describe("Max results (default: 10)"),
|
|
198
198
|
}),
|
|
199
199
|
outputSchema: z.object({
|
|
200
200
|
symbols: z.array(z.object({
|
|
201
201
|
kind: z.string(),
|
|
202
202
|
name: z.string(),
|
|
203
203
|
file: z.string(),
|
|
204
|
-
startLine: z.number(),
|
|
205
|
-
endLine: z.number(),
|
|
204
|
+
startLine: z.coerce.number(),
|
|
205
|
+
endLine: z.coerce.number(),
|
|
206
206
|
signature: z.string(),
|
|
207
207
|
exported: z.boolean(),
|
|
208
208
|
})),
|
|
@@ -246,8 +246,8 @@ export function createSearchTools(projectName) {
|
|
|
246
246
|
description: `Search ${projectName} codebase with graph expansion. Returns file locations plus connected files via import/call relationships. Use Read tool to view code.`,
|
|
247
247
|
schema: z.object({
|
|
248
248
|
query: z.string().describe("Search query"),
|
|
249
|
-
limit: z.number().optional().describe("Max direct results (default: 5)"),
|
|
250
|
-
expandHops: z.number().optional().describe("Number of graph hops to expand (default: 1)"),
|
|
249
|
+
limit: z.coerce.number().optional().describe("Max direct results (default: 5)"),
|
|
250
|
+
expandHops: z.coerce.number().optional().describe("Number of graph hops to expand (default: 1)"),
|
|
251
251
|
}),
|
|
252
252
|
annotations: TOOL_ANNOTATIONS["search_graph"],
|
|
253
253
|
handler: async (args, ctx) => {
|
package/dist/tools/session.js
CHANGED
|
@@ -102,7 +102,7 @@ export function createSessionTools(projectName, sharedCtx) {
|
|
|
102
102
|
name: "analyze_usage_patterns",
|
|
103
103
|
description: `Analyze tool usage patterns for ${projectName}. Shows common workflows, detected patterns, and recommendations for improving productivity.`,
|
|
104
104
|
schema: z.object({
|
|
105
|
-
days: z.number().optional().describe("Number of days to analyze (default: 7)."),
|
|
105
|
+
days: z.coerce.number().optional().describe("Number of days to analyze (default: 7)."),
|
|
106
106
|
}),
|
|
107
107
|
annotations: TOOL_ANNOTATIONS["analyze_usage_patterns"],
|
|
108
108
|
handler: async (args, ctx) => {
|
|
@@ -290,7 +290,7 @@ export function createSuggestionTools(projectName) {
|
|
|
290
290
|
schema: z.object({
|
|
291
291
|
file: z.string().optional().describe("File path to find related code for"),
|
|
292
292
|
code: z.string().optional().describe("Code snippet to find related code for"),
|
|
293
|
-
limit: z.number().optional().describe("Max results (default: 5)"),
|
|
293
|
+
limit: z.coerce.number().optional().describe("Max results (default: 5)"),
|
|
294
294
|
}),
|
|
295
295
|
annotations: TOOL_ANNOTATIONS["suggest_related_code"],
|
|
296
296
|
handler: async (args, ctx) => {
|