mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-11-10 09:13:53 +08:00
fix(mcp): preserve coverage scope labels
Signed-off-by: Anand Aiyer <anand@aiyer.com>
This commit is contained in:
+1
-1
@@ -3511,7 +3511,7 @@ static char *handle_check_index_coverage(cbm_mcp_server_t *srv, const char *args
|
||||
yyjson_mut_arr_add_val(scope_results, item);
|
||||
continue;
|
||||
}
|
||||
yyjson_mut_obj_add_str(doc, item, "scope", scope[0] ? scope : ".");
|
||||
yyjson_mut_obj_add_strcpy(doc, item, "scope", scope[0] ? scope : ".");
|
||||
cbm_coverage_row_t *rows = NULL;
|
||||
int row_count = 0;
|
||||
int cov_rc = cbm_store_coverage_get_scope(store, project, scope, &rows, &row_count);
|
||||
|
||||
@@ -1458,6 +1458,40 @@ TEST(tool_check_index_coverage_reports_paths_scopes_and_ranges) {
|
||||
PASS();
|
||||
}
|
||||
|
||||
TEST(tool_check_index_coverage_preserves_multiple_scope_labels) {
|
||||
char tmp[256];
|
||||
cbm_mcp_server_t *srv = setup_snippet_server(tmp, sizeof(tmp));
|
||||
ASSERT_NOT_NULL(srv);
|
||||
|
||||
char *coverage = cbm_mcp_handle_tool(srv, "check_index_coverage",
|
||||
"{\"project\":\"test-project\","
|
||||
"\"scopes\":[\"alpha/one\",\"bravo/two\",\"charl/tri\"]}");
|
||||
ASSERT_NOT_NULL(coverage);
|
||||
char *inner = extract_text_content(coverage);
|
||||
ASSERT_NOT_NULL(inner);
|
||||
yyjson_doc *doc = yyjson_read(inner, strlen(inner), 0);
|
||||
ASSERT_NOT_NULL(doc);
|
||||
yyjson_val *scopes = yyjson_obj_get(yyjson_doc_get_root(doc), "scopes");
|
||||
ASSERT_NOT_NULL(scopes);
|
||||
ASSERT_TRUE(yyjson_is_arr(scopes));
|
||||
ASSERT_EQ(yyjson_arr_size(scopes), 3);
|
||||
|
||||
const char *expected[] = {"alpha/one", "bravo/two", "charl/tri"};
|
||||
for (size_t i = 0; i < 3; i++) {
|
||||
yyjson_val *scope = yyjson_obj_get(yyjson_arr_get(scopes, i), "scope");
|
||||
ASSERT_NOT_NULL(scope);
|
||||
ASSERT_TRUE(yyjson_is_str(scope));
|
||||
ASSERT_STR_EQ(yyjson_get_str(scope), expected[i]);
|
||||
}
|
||||
|
||||
yyjson_doc_free(doc);
|
||||
free(inner);
|
||||
free(coverage);
|
||||
cbm_mcp_server_free(srv);
|
||||
cleanup_snippet_dir(tmp);
|
||||
PASS();
|
||||
}
|
||||
|
||||
static int write_coverage_meta(cbm_store_t *store, const char *generation,
|
||||
const char *recording_status) {
|
||||
cbm_coverage_meta_t meta = {
|
||||
@@ -6411,6 +6445,7 @@ SUITE(mcp) {
|
||||
RUN_TEST(tool_index_status_no_project);
|
||||
RUN_TEST(tool_check_index_coverage_finds_path_beyond_status_cap);
|
||||
RUN_TEST(tool_check_index_coverage_reports_paths_scopes_and_ranges);
|
||||
RUN_TEST(tool_check_index_coverage_preserves_multiple_scope_labels);
|
||||
RUN_TEST(tool_check_index_coverage_rejects_stale_generation);
|
||||
RUN_TEST(tool_check_index_coverage_requires_source_when_file_metadata_changed);
|
||||
RUN_TEST(tool_check_index_coverage_surfaces_lookup_errors);
|
||||
|
||||
Reference in New Issue
Block a user