git: 3e51fdeccc07 - main - devel/codebase-memory-mcp: update to 0.11.0

From: Olivier Cochard <olivier_at_FreeBSD.org>
Date: Thu, 17 Sep 2026 12:12:41 UTC
The branch main has been updated by olivier:

URL: https://cgit.FreeBSD.org/ports/commit/?id=3e51fdeccc0700f95383d00ac8cbac890c5a9005

commit 3e51fdeccc0700f95383d00ac8cbac890c5a9005
Author:     Olivier Cochard <olivier@FreeBSD.org>
AuthorDate: 2026-09-17 12:08:22 +0000
Commit:     Olivier Cochard <olivier@FreeBSD.org>
CommitDate: 2026-09-17 12:09:29 +0000

    devel/codebase-memory-mcp: update to 0.11.0
---
 devel/codebase-memory-mcp/Makefile                 |  2 +-
 devel/codebase-memory-mcp/distinfo                 |  6 ++--
 devel/codebase-memory-mcp/files/extract_sysctl.c   | 12 ++++----
 devel/codebase-memory-mcp/files/patch-Makefile.cbm | 10 +++----
 .../files/patch-internal_cbm_cbm.c                 |  6 ++--
 .../files/patch-internal_cbm_cbm.h                 | 12 ++++----
 .../codebase-memory-mcp/files/patch-src_cli_cli.c  | 32 ++--------------------
 .../files/patch-src_daemon_ipc.c                   |  8 +++---
 .../files/patch-src_pipeline_pass__definitions.c   |  6 ++--
 .../files/patch-src_pipeline_pass__parallel.c      |  8 +++---
 .../files/patch-src_pipeline_pipeline.c            | 27 ++++++++----------
 11 files changed, 50 insertions(+), 79 deletions(-)

diff --git a/devel/codebase-memory-mcp/Makefile b/devel/codebase-memory-mcp/Makefile
index d9b4025023fa..10f0fdaed90c 100644
--- a/devel/codebase-memory-mcp/Makefile
+++ b/devel/codebase-memory-mcp/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	codebase-memory-mcp
 DISTVERSIONPREFIX=v
-DISTVERSION=	0.10.8
+DISTVERSION=	0.11.0
 CATEGORIES=	devel
 
 MAINTAINER=	olivier@FreeBSD.org
diff --git a/devel/codebase-memory-mcp/distinfo b/devel/codebase-memory-mcp/distinfo
index 4357e62557e2..e19f19c211cf 100644
--- a/devel/codebase-memory-mcp/distinfo
+++ b/devel/codebase-memory-mcp/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1787154654
-SHA256 (DeusData-codebase-memory-mcp-v0.10.8_GH0.tar.gz) = bbb40b0af7860e518d5f11e1d7316634bfebaa0928a05928792a890e0222cbeb
-SIZE (DeusData-codebase-memory-mcp-v0.10.8_GH0.tar.gz) = 94894604
+TIMESTAMP = 1789587997
+SHA256 (DeusData-codebase-memory-mcp-v0.11.0_GH0.tar.gz) = 7a292eb925640c1d254863733dd260911c94a5f3d1846b228ada685c2770b7ae
+SIZE (DeusData-codebase-memory-mcp-v0.11.0_GH0.tar.gz) = 97846612
diff --git a/devel/codebase-memory-mcp/files/extract_sysctl.c b/devel/codebase-memory-mcp/files/extract_sysctl.c
index 9502782fbedf..f6661ce3b928 100644
--- a/devel/codebase-memory-mcp/files/extract_sysctl.c
+++ b/devel/codebase-memory-mcp/files/extract_sysctl.c
@@ -504,8 +504,8 @@ static const char *assign_lhs_of(CBMExtractCtx *ctx, TSNode call) {
  * before the def. We therefore seed every alias first, then emit. */
 static void collect_aliases(CBMExtractCtx *ctx, sysctl_alias_table_t *aliases, TSNode root) {
     TSNodeStack stack;
-    ts_nstack_init(&stack, ctx->arena, SYSCTL_STACK_CAP);
-    ts_nstack_push(&stack, ctx->arena, root);
+    ts_nstack_init(&stack, ctx, SYSCTL_STACK_CAP);
+    ts_nstack_push(&stack, root);
     while (stack.count > 0) {
         TSNode node = ts_nstack_pop(&stack);
         if (strcmp(ts_node_type(node), "call_expression") == 0) {
@@ -528,7 +528,7 @@ static void collect_aliases(CBMExtractCtx *ctx, sysctl_alias_table_t *aliases, T
                 }
             }
         }
-        ts_nstack_push_children(&stack, ctx->arena, node);
+        ts_nstack_push_children(&stack, node);
     }
 }
 
@@ -544,8 +544,8 @@ static void extract_sysctl_c(CBMExtractCtx *ctx) {
     collect_aliases(ctx, &aliases, ctx->root);
 
     TSNodeStack stack;
-    ts_nstack_init(&stack, ctx->arena, SYSCTL_STACK_CAP);
-    ts_nstack_push(&stack, ctx->arena, ctx->root);
+    ts_nstack_init(&stack, ctx, SYSCTL_STACK_CAP);
+    ts_nstack_push(&stack, ctx->root);
 
     while (stack.count > 0) {
         TSNode node = ts_nstack_pop(&stack);
@@ -586,7 +586,7 @@ static void extract_sysctl_c(CBMExtractCtx *ctx) {
                 break; /* one macro per node */
             }
         }
-        ts_nstack_push_children(&stack, ctx->arena, node);
+        ts_nstack_push_children(&stack, node);
     }
 }
 
diff --git a/devel/codebase-memory-mcp/files/patch-Makefile.cbm b/devel/codebase-memory-mcp/files/patch-Makefile.cbm
index dd40510a7e68..d243e69e4a42 100644
--- a/devel/codebase-memory-mcp/files/patch-Makefile.cbm
+++ b/devel/codebase-memory-mcp/files/patch-Makefile.cbm
@@ -1,17 +1,17 @@
---- Makefile.cbm.orig	2026-08-18 20:39:59 UTC
+--- Makefile.cbm.orig	2026-09-15 17:16:24 UTC
 +++ Makefile.cbm
-@@ -244,6 +244,7 @@ EXTRACTION_SRCS = \
+@@ -273,6 +273,7 @@ EXTRACTION_SRCS = \
      $(CBM_DIR)/extract_type_assigns.c \
      $(CBM_DIR)/extract_env_accesses.c \
      $(CBM_DIR)/extract_channels.c \
 +    $(CBM_DIR)/extract_sysctl.c \
      $(CBM_DIR)/extract_k8s.c \
+     $(CBM_DIR)/extract_dbt.c \
      $(CBM_DIR)/helpers.c \
-     $(CBM_DIR)/lang_specs.c \
-@@ -355,6 +356,7 @@ PIPELINE_SRCS = \
-     src/pipeline/pass_complexity.c \
+@@ -389,6 +390,7 @@ PIPELINE_SRCS = \
      src/pipeline/pass_cross_repo.c \
      src/pipeline/artifact.c \
+     src/pipeline/pass_ensemble_routing.c \
 +    src/pipeline/pass_sysctl.c \
      src/pipeline/pass_pkgmap.c
  
diff --git a/devel/codebase-memory-mcp/files/patch-internal_cbm_cbm.c b/devel/codebase-memory-mcp/files/patch-internal_cbm_cbm.c
index 8911e9114198..da9a588dfb5a 100644
--- a/devel/codebase-memory-mcp/files/patch-internal_cbm_cbm.c
+++ b/devel/codebase-memory-mcp/files/patch-internal_cbm_cbm.c
@@ -1,6 +1,6 @@
---- internal/cbm/cbm.c.orig	2026-08-18 20:39:59 UTC
+--- internal/cbm/cbm.c.orig	2026-09-15 17:16:24 UTC
 +++ internal/cbm/cbm.c
-@@ -188,6 +188,11 @@ void cbm_channels_push(CBMChannelArray *arr, CBMArena 
+@@ -194,6 +194,11 @@ void cbm_channels_push(CBMChannelArray *arr, CBMArena 
      arr->items[arr->count++] = ch;
  }
  
@@ -12,7 +12,7 @@
  // --- String input reader (for parse_with_options) ---
  
  typedef struct {
-@@ -1297,6 +1302,9 @@ CBMFileResult *cbm_extract_file_ex(const char *source,
+@@ -1834,6 +1839,9 @@ static CBMFileResult *extract_file_ex_body(const char 
  
      // Channel detection (Socket.IO / EventEmitter) — JS/TS only.
      cbm_extract_channels(&ctx);
diff --git a/devel/codebase-memory-mcp/files/patch-internal_cbm_cbm.h b/devel/codebase-memory-mcp/files/patch-internal_cbm_cbm.h
index 73f007c586bf..f26022fac7e4 100644
--- a/devel/codebase-memory-mcp/files/patch-internal_cbm_cbm.h
+++ b/devel/codebase-memory-mcp/files/patch-internal_cbm_cbm.h
@@ -1,6 +1,6 @@
---- internal/cbm/cbm.h.orig	2026-08-18 20:39:59 UTC
+--- internal/cbm/cbm.h.orig	2026-09-15 17:16:24 UTC
 +++ internal/cbm/cbm.h
-@@ -355,6 +355,21 @@ typedef struct {
+@@ -380,6 +380,21 @@ typedef struct {
      CBMChannelDirection direction;
  } CBMChannel;
  
@@ -22,7 +22,7 @@
  // Rust: impl Trait for Struct
  typedef struct {
      const char *trait_name;  // trait name (raw text)
-@@ -468,6 +483,12 @@ typedef struct {
+@@ -493,6 +508,12 @@ typedef struct {
      int cap;
  } CBMChannelArray;
  
@@ -35,7 +35,7 @@
  // Full extraction result for one file.
  typedef struct CBMFileResult {
      CBMArena arena; // owns local memory; composites may also retain child arenas below
-@@ -486,6 +507,7 @@ typedef struct CBMFileResult {
+@@ -511,6 +532,7 @@ typedef struct CBMFileResult {
      CBMStringRefArray string_refs;       // URL/config string literals from AST
      CBMInfraBindingArray infra_bindings; // topic→URL pairs from IaC configs
      CBMChannelArray channels;            // Socket.IO / EventEmitter pub/sub participation
@@ -43,7 +43,7 @@
  
      const char *module_qn;      // module qualified name
      const char *namespace_name; // declared namespace/package (Java/Kotlin/C#/PHP), NULL if none
-@@ -722,6 +744,7 @@ void cbm_channels_push(CBMChannelArray *arr, CBMArena 
+@@ -824,6 +846,7 @@ void cbm_channels_push(CBMChannelArray *arr, CBMArena 
  void cbm_impltrait_push(CBMImplTraitArray *arr, CBMArena *a, CBMImplTrait it);
  void cbm_resolvedcall_push(CBMResolvedCallArray *arr, CBMArena *a, CBMResolvedCall rc);
  void cbm_channels_push(CBMChannelArray *arr, CBMArena *a, CBMChannel ch);
@@ -51,7 +51,7 @@
  
  // --- Sub-extractor entry points ---
  
-@@ -733,6 +756,7 @@ void cbm_extract_channels(CBMExtractCtx *ctx);
+@@ -842,6 +865,7 @@ void cbm_extract_channels(CBMExtractCtx *ctx);
  void cbm_extract_env_accesses(CBMExtractCtx *ctx);
  void cbm_extract_type_assigns(CBMExtractCtx *ctx);
  void cbm_extract_channels(CBMExtractCtx *ctx);
diff --git a/devel/codebase-memory-mcp/files/patch-src_cli_cli.c b/devel/codebase-memory-mcp/files/patch-src_cli_cli.c
index 3edabd31ea2d..98532a5cd2bd 100644
--- a/devel/codebase-memory-mcp/files/patch-src_cli_cli.c
+++ b/devel/codebase-memory-mcp/files/patch-src_cli_cli.c
@@ -1,6 +1,6 @@
---- src/cli/cli.c.orig	2026-08-18 20:39:59 UTC
+--- src/cli/cli.c.orig	2026-09-16 19:47:37 UTC
 +++ src/cli/cli.c
-@@ -8178,7 +8178,12 @@ static void cbm_agent_installed_binary_path(const char
+@@ -9003,7 +9003,12 @@ static void cbm_agent_installed_binary_path(const char
  
  static void cbm_agent_installed_binary_path(const char *home, char *binary_path,
                                              size_t binary_path_size) {
@@ -14,24 +14,7 @@
      snprintf(binary_path, binary_path_size, "%s/.local/bin/codebase-memory-mcp.exe", home);
  #else
      snprintf(binary_path, binary_path_size, "%s/.local/bin/codebase-memory-mcp", home);
-@@ -9699,6 +9704,16 @@ static const char *cli_external_manager_name(const cha
-     if (strstr(self_path, "/.cargo/bin/")) {
-         return "cargo";
-     }
-+#if defined(__FreeBSD__) && defined(CBM_PKG_PREFIX)
-+    /* FreeBSD ports/pkg install the binary under ${PREFIX}/bin (CBM_PKG_PREFIX
-+     * is the port's PREFIX, default /usr/local). pkg owns that file, so install
-+     * must not copy it into ~/.local/bin or edit PATH, and update must refuse
-+     * and defer to pkg(8). Match only ${PREFIX}/bin/ so a manual --dir install
-+     * elsewhere is still treated as ours. */
-+    if (strstr(self_path, CBM_PKG_PREFIX "/bin/") == self_path) {
-+        return "FreeBSD pkg";
-+    }
-+#endif
-     return NULL;
- }
- 
-@@ -10117,6 +10132,13 @@ int cbm_cmd_install(int argc, char **argv) {
+@@ -11147,6 +11152,13 @@ int cbm_cmd_install(int argc, char **argv) {
                     manager ? " by " : "", manager ? manager : "", self_path, bin_dir);
          }
          skip_binary = true;
@@ -45,12 +28,3 @@
      }
  
      /* NOT stat(): on Windows it goes through the ANSI code page, so an
-@@ -12227,6 +12249,8 @@ int cbm_cmd_update(int argc, char **argv) {
-                 (void)fprintf(stderr, "  update it with: mise upgrade codebase-memory-mcp\n");
-             } else if (manager && strcmp(manager, "Homebrew") == 0) {
-                 (void)fprintf(stderr, "  update it with: brew upgrade codebase-memory-mcp\n");
-+            } else if (manager && strcmp(manager, "FreeBSD pkg") == 0) {
-+                (void)fprintf(stderr, "  update it with: pkg upgrade codebase-memory-mcp\n");
-             } else {
-                 (void)fprintf(stderr, "  update it through whichever tool installed it.\n");
-             }
diff --git a/devel/codebase-memory-mcp/files/patch-src_daemon_ipc.c b/devel/codebase-memory-mcp/files/patch-src_daemon_ipc.c
index d79b2027ee5f..576b8763c2b0 100644
--- a/devel/codebase-memory-mcp/files/patch-src_daemon_ipc.c
+++ b/devel/codebase-memory-mcp/files/patch-src_daemon_ipc.c
@@ -1,6 +1,6 @@
---- src/daemon/ipc.c.orig	2026-08-18 20:39:59 UTC
+--- src/daemon/ipc.c.orig	2026-09-16 19:49:25 UTC
 +++ src/daemon/ipc.c
-@@ -313,6 +313,9 @@ int cbm_daemon_ipc_wait_pending(const cbm_ipc_pending_
+@@ -381,6 +381,9 @@ int cbm_daemon_ipc_wait_pending(const cbm_ipc_pending_
  #include <sys/stat.h>
  #include <sys/types.h>
  #include <sys/un.h>
@@ -10,10 +10,10 @@
  #include <time.h>
  #include <unistd.h>
  
-@@ -3078,6 +3081,19 @@ uint64_t cbm_daemon_ipc_connection_peer_pid(const cbm_
+@@ -3467,6 +3470,19 @@ uint64_t cbm_daemon_ipc_connection_peer_pid(const cbm_
          return 0;
      }
-     return (uint64_t)peer_pid;
+     return (uint64_t)peer_id.unp_pid;
 +#elif defined(__FreeBSD__) && defined(LOCAL_PEERCRED)
 +    /* FreeBSD has neither SO_PEERCRED nor LOCAL_PEERPID; LOCAL_PEERCRED returns
 +     * a struct xucred whose cr_pid (FreeBSD 13+) is the connecting peer's pid.
diff --git a/devel/codebase-memory-mcp/files/patch-src_pipeline_pass__definitions.c b/devel/codebase-memory-mcp/files/patch-src_pipeline_pass__definitions.c
index f4849773da7f..de7eccb915c0 100644
--- a/devel/codebase-memory-mcp/files/patch-src_pipeline_pass__definitions.c
+++ b/devel/codebase-memory-mcp/files/patch-src_pipeline_pass__definitions.c
@@ -1,6 +1,6 @@
---- src/pipeline/pass_definitions.c.orig	2026-08-18 20:39:59 UTC
+--- src/pipeline/pass_definitions.c.orig	2026-09-15 17:16:24 UTC
 +++ src/pipeline/pass_definitions.c
-@@ -812,6 +812,7 @@ int cbm_pipeline_pass_definitions(cbm_pipeline_ctx_t *
+@@ -876,6 +876,7 @@ int cbm_pipeline_pass_definitions(cbm_pipeline_ctx_t *
               * map is available without the cache (single-file scope). */
              total_imports += create_import_edges_for_file(ctx, result, rel, NULL);
              create_channel_edges_for_file(ctx, result, rel);
@@ -8,7 +8,7 @@
              cbm_pipeline_create_env_configures_for_file(ctx, result, rel);
              cbm_free_result(result);
          }
-@@ -845,6 +846,7 @@ int cbm_pipeline_pass_definitions(cbm_pipeline_ctx_t *
+@@ -909,6 +910,7 @@ int cbm_pipeline_pass_definitions(cbm_pipeline_ctx_t *
              total_imports +=
                  create_import_edges_for_file(ctx, result, files[i].rel_path, namespace_map);
              create_channel_edges_for_file(ctx, result, files[i].rel_path);
diff --git a/devel/codebase-memory-mcp/files/patch-src_pipeline_pass__parallel.c b/devel/codebase-memory-mcp/files/patch-src_pipeline_pass__parallel.c
index 0a5c72c9e6c5..d4285d239b3d 100644
--- a/devel/codebase-memory-mcp/files/patch-src_pipeline_pass__parallel.c
+++ b/devel/codebase-memory-mcp/files/patch-src_pipeline_pass__parallel.c
@@ -1,10 +1,10 @@
---- src/pipeline/pass_parallel.c.orig	2026-08-18 20:39:59 UTC
+--- src/pipeline/pass_parallel.c.orig	2026-09-15 17:16:24 UTC
 +++ src/pipeline/pass_parallel.c
-@@ -1343,6 +1343,7 @@ int cbm_build_registry_from_cache(cbm_pipeline_ctx_t *
+@@ -1681,6 +1681,7 @@ int cbm_build_registry_from_cache(cbm_pipeline_ctx_t *
  
          imports_edges += create_imports_edges(ctx, result, rel, namespace_map);
          create_channel_edges(ctx, result, rel);
 +        cbm_sysctl_emit_raw_for_file(ctx, result, rel);
          cbm_pipeline_create_env_configures_for_file(ctx, result, rel);
-     }
- 
+         if (loaded) {
+             cbm_free_result(result);
diff --git a/devel/codebase-memory-mcp/files/patch-src_pipeline_pipeline.c b/devel/codebase-memory-mcp/files/patch-src_pipeline_pipeline.c
index f8518624c9e0..33c6a0cd55c7 100644
--- a/devel/codebase-memory-mcp/files/patch-src_pipeline_pipeline.c
+++ b/devel/codebase-memory-mcp/files/patch-src_pipeline_pipeline.c
@@ -1,23 +1,20 @@
---- src/pipeline/pipeline.c.orig	2026-08-18 20:39:59 UTC
+--- src/pipeline/pipeline.c.orig	2026-09-16 19:50:09 UTC
 +++ src/pipeline/pipeline.c
-@@ -934,6 +934,9 @@ static void predump_complexity(cbm_pipeline_ctx_t *ctx
+@@ -1032,6 +1032,9 @@ static void predump_complexity(cbm_pipeline_ctx_t *ctx
  static void predump_complexity(cbm_pipeline_ctx_t *ctx) {
      cbm_pipeline_pass_complexity(ctx);
  }
 +static void predump_sysctl(cbm_pipeline_ctx_t *ctx) {
 +    cbm_pipeline_resolve_sysctl(ctx->gbuf);
 +}
- static void run_predump_passes(cbm_pipeline_t *p, cbm_pipeline_ctx_t *ctx) {
-     static const struct {
-         predump_pass_fn fn;
-@@ -943,8 +946,9 @@ static void run_predump_passes(cbm_pipeline_t *p, cbm_
-         {predump_deco, "decorator_tags", false}, {predump_cfg, "configlink", false},
-         {predump_route, "route_match", false},   {predump_sim, "similarity", true},
-         {predump_sem, "semantic_edges", true},   {predump_complexity, "complexity", false},
+ static void predump_ensemble(cbm_pipeline_ctx_t *ctx) {
+     cbm_pipeline_pass_ensemble_routing(ctx);
+ }
+@@ -1268,6 +1271,7 @@ static void run_predump_passes(cbm_pipeline_t *p, cbm_
+         {predump_sim, "similarity", true},
+         {predump_sem, "semantic_edges", true},
+         {predump_complexity, "complexity", false},
 +        {predump_sysctl, "sysctl_resolve", false},
-     };
--    enum { PREDUMP_PASS_COUNT = 6 };
-+    enum { PREDUMP_PASS_COUNT = 7 };
-     struct timespec t;
-     for (int i = 0; i < PREDUMP_PASS_COUNT && !check_cancel(p); i++) {
-         /* "moderate_only" passes (similarity/semantic edges) run in FULL,
+         /* Importance runs LAST: it reads CALLS/USAGE (extraction) and TESTS
+          * (pass_tests, which run_post_extraction runs before this loop), so
+          * every edge type its score depends on already exists here. */