Skip to content

Commit 4b19877

Browse files
committed
feat(core): add mock data generation for MCP tooltips
- Implement MockDataGenerator to create sample input data based on JSON schema - Update McpFunctionProvider to use mock data in completion field - Modify DevInsCompiler to retrieve code content in a thread-safe manner- Enhance ToolchainCommandCompletion to format completion text with markdown
1 parent c180cc8 commit 4b19877

File tree

4 files changed

+38
-5
lines changed

4 files changed

+38
-5
lines changed

core/src/main/kotlin/cc/unitmesh/devti/mcp/client/McpFunctionProvider.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@ class McpFunctionProvider : ToolchainFunctionProvider {
1919
ProjectManager.getInstance().openProjects.firstOrNull() ?: return emptyList()
2020
)
2121
return manager.collectServerInfos().map {
22-
val encodeToString = Json.encodeToString<Input>(it.inputSchema)
22+
val schemaJson = Json.encodeToString<Input>(it.inputSchema)
23+
val mockData = Json.encodeToString(MockDataGenerator.generateMockData(it.inputSchema))
2324
AgentTool(
2425
it.name,
2526
it.description ?: "",
26-
"Here is command and JSON schema\n/${it.name}\n```json\n$encodeToString\n```",
27+
"Here is command and JSON schema\n/${it.name}\n```json\n$schemaJson\n```",
2728
isMcp = true,
28-
completion = encodeToString
29+
completion = mockData
2930
)
3031
}
3132
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package cc.unitmesh.devti.mcp.client
2+
3+
import io.modelcontextprotocol.kotlin.sdk.Tool.Input
4+
import kotlinx.serialization.json.JsonElement
5+
import kotlinx.serialization.json.JsonObject
6+
import kotlinx.serialization.json.JsonPrimitive
7+
import kotlinx.serialization.json.buildJsonObject
8+
import kotlinx.serialization.json.jsonObject
9+
import kotlinx.serialization.json.jsonPrimitive
10+
import kotlinx.serialization.json.putJsonObject
11+
12+
object MockDataGenerator {
13+
fun generateMockData(input: Input): JsonObject {
14+
val result = buildJsonObject {
15+
input.properties.forEach { (key: String, value: JsonElement) ->
16+
val type = value.jsonObject["type"]?.jsonPrimitive?.content
17+
when (type) {
18+
"string" -> put(key, JsonPrimitive("mock_$key"))
19+
"number" -> put(key, JsonPrimitive(42))
20+
"integer" -> put(key, JsonPrimitive(42))
21+
"boolean" -> put(key, JsonPrimitive(true))
22+
"array" -> put(key, JsonPrimitive("[]"))
23+
"object" -> putJsonObject(key) {
24+
put("id", JsonPrimitive(1))
25+
put("name", JsonPrimitive("mock_$key"))
26+
}
27+
}
28+
}
29+
}
30+
return result
31+
}
32+
}

exts/devins-lang/src/main/kotlin/cc/unitmesh/devti/language/compiler/DevInsCompiler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ class DevInsCompiler(
347347
prop: String,
348348
provider: ToolchainFunctionProvider
349349
): PrintInsCommand {
350-
val codeContent: String? = lookupNextCode(used)?.codeText()
350+
val codeContent: String? = runReadAction { lookupNextCode(used)?.text }
351351
val args = if (codeContent != null) {
352352
val code = CodeFence.parse(codeContent).text
353353
listOf(code)

exts/devins-lang/src/main/kotlin/cc/unitmesh/devti/language/completion/provider/ToolchainCommandCompletion.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class ToolchainCommandCompletion : CompletionProvider<CompletionParameters>() {
3333
.withTailText(tool.description)
3434
.withInsertHandler { context, _ ->
3535
context.editor.caretModel.moveToOffset(context.tailOffset)
36-
context.editor.document.insertString(context.tailOffset, tool.completion)
36+
context.editor.document.insertString(context.tailOffset, "\n````json\n${tool.completion}\n```")
3737
}
3838

3939
return PrioritizedLookupElement.withPriority(element, 97.0)

0 commit comments

Comments
 (0)