gemcode 0.4.15__tar.gz → 0.4.16__tar.gz

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.
Files changed (183) hide show
  1. {gemcode-0.4.15/src/gemcode.egg-info → gemcode-0.4.16}/PKG-INFO +1 -1
  2. {gemcode-0.4.15 → gemcode-0.4.16}/pyproject.toml +1 -1
  3. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/agent_mesh.py +35 -1
  4. {gemcode-0.4.15 → gemcode-0.4.16/src/gemcode.egg-info}/PKG-INFO +1 -1
  5. {gemcode-0.4.15 → gemcode-0.4.16}/LICENSE +0 -0
  6. {gemcode-0.4.15 → gemcode-0.4.16}/MANIFEST.in +0 -0
  7. {gemcode-0.4.15 → gemcode-0.4.16}/README.md +0 -0
  8. {gemcode-0.4.15 → gemcode-0.4.16}/setup.cfg +0 -0
  9. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/__init__.py +0 -0
  10. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/__main__.py +0 -0
  11. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/a2a_bridge.py +0 -0
  12. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/agent.py +0 -0
  13. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/agent_habits.py +0 -0
  14. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/agent_intelligence.py +0 -0
  15. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/agent_triggers.py +0 -0
  16. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/audit.py +0 -0
  17. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/autocompact.py +0 -0
  18. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/automations.py +0 -0
  19. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/autotune.py +0 -0
  20. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/callbacks.py +0 -0
  21. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/capability_routing.py +0 -0
  22. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/checkpoints.py +0 -0
  23. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/cli.py +0 -0
  24. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/codebase_awareness.py +0 -0
  25. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/compaction.py +0 -0
  26. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/computer_use/__init__.py +0 -0
  27. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/computer_use/browser_computer.py +0 -0
  28. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/config.py +0 -0
  29. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/context_budget.py +0 -0
  30. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/context_warning.py +0 -0
  31. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/credentials.py +0 -0
  32. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/curated_memory.py +0 -0
  33. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/delegation_learning.py +0 -0
  34. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/dynamic_policy.py +0 -0
  35. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/evals/harness.py +0 -0
  36. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/event_bus.py +0 -0
  37. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/fleet_reports.py +0 -0
  38. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/hitl_session.py +0 -0
  39. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/hooks.py +0 -0
  40. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/ide_protocol.py +0 -0
  41. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/ide_stdio.py +0 -0
  42. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/intent_classifier.py +0 -0
  43. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/interactions.py +0 -0
  44. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/invoke.py +0 -0
  45. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/kaira_client.py +0 -0
  46. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/kaira_daemon.py +0 -0
  47. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/kaira_ipc.py +0 -0
  48. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/kaira_job_store.py +0 -0
  49. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/learning.py +0 -0
  50. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/limits.py +0 -0
  51. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/live_audio_engine.py +0 -0
  52. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/logging_config.py +0 -0
  53. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/mcp_loader.py +0 -0
  54. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/memory/__init__.py +0 -0
  55. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/memory/embedding_memory_service.py +0 -0
  56. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/memory/file_memory_service.py +0 -0
  57. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/modality_tools.py +0 -0
  58. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/model_errors.py +0 -0
  59. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/model_routing.py +0 -0
  60. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/multimodal_input.py +0 -0
  61. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/openapi_loader.py +0 -0
  62. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/org.py +0 -0
  63. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/output_styles.py +0 -0
  64. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/paths.py +0 -0
  65. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/permissions.py +0 -0
  66. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/plugins/__init__.py +0 -0
  67. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/plugins/terminal_hooks_plugin.py +0 -0
  68. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/plugins/tool_recovery_plugin.py +0 -0
  69. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/policy_profile.py +0 -0
  70. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/pricing.py +0 -0
  71. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/prompt_suggestions.py +0 -0
  72. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/query/__init__.py +0 -0
  73. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/query/config.py +0 -0
  74. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/query/deps.py +0 -0
  75. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/query/engine.py +0 -0
  76. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/query/stop_hooks.py +0 -0
  77. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/query/token_budget.py +0 -0
  78. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/query/transitions.py +0 -0
  79. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/query_sanitizer.py +0 -0
  80. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/refine.py +0 -0
  81. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/repl_commands.py +0 -0
  82. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/repl_slash.py +0 -0
  83. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/review_agent.py +0 -0
  84. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/rules.py +0 -0
  85. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/self_healing.py +0 -0
  86. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/session_runtime.py +0 -0
  87. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/session_store.py +0 -0
  88. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/session_summariser.py +0 -0
  89. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/skills.py +0 -0
  90. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/slash_commands.py +0 -0
  91. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/thinking.py +0 -0
  92. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tool_prompt_manifest.py +0 -0
  93. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tool_registry.py +0 -0
  94. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tool_result_store.py +0 -0
  95. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tool_synthesis.py +0 -0
  96. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/__init__.py +0 -0
  97. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/automations_tools.py +0 -0
  98. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/bash.py +0 -0
  99. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/browser.py +0 -0
  100. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/compress_memory.py +0 -0
  101. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/curated_memory.py +0 -0
  102. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/edit.py +0 -0
  103. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/filesystem.py +0 -0
  104. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/notebook.py +0 -0
  105. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/notes.py +0 -0
  106. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/org_tools.py +0 -0
  107. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/repo_map.py +0 -0
  108. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/search.py +0 -0
  109. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/shell.py +0 -0
  110. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/shell_gate.py +0 -0
  111. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/skills.py +0 -0
  112. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/subtask.py +0 -0
  113. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/tasks.py +0 -0
  114. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/think.py +0 -0
  115. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/todo.py +0 -0
  116. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/user_choice.py +0 -0
  117. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/veomem_tools.py +0 -0
  118. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/web.py +0 -0
  119. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools/web_search.py +0 -0
  120. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tools_inspector.py +0 -0
  121. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/trust.py +0 -0
  122. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tui/input_handler.py +0 -0
  123. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tui/scrollback.py +0 -0
  124. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tui/spinner.py +0 -0
  125. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tui/welcome_banner.py +0 -0
  126. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/tui/welcome_rich.py +0 -0
  127. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/veomem_bridge.py +0 -0
  128. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/version.py +0 -0
  129. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/vertex.py +0 -0
  130. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/wal.py +0 -0
  131. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/web/__init__.py +0 -0
  132. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/web/sse_adapter.py +0 -0
  133. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/web/terminal_repl.py +0 -0
  134. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/web/web_sse_compat.py +0 -0
  135. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode/workspace_hints.py +0 -0
  136. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode.egg-info/SOURCES.txt +0 -0
  137. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode.egg-info/dependency_links.txt +0 -0
  138. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode.egg-info/entry_points.txt +0 -0
  139. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode.egg-info/requires.txt +0 -0
  140. {gemcode-0.4.15 → gemcode-0.4.16}/src/gemcode.egg-info/top_level.txt +0 -0
  141. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_add_dir.py +0 -0
  142. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_agent_habits.py +0 -0
  143. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_agent_instruction.py +0 -0
  144. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_agent_mesh.py +0 -0
  145. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_autocompact.py +0 -0
  146. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_automations.py +0 -0
  147. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_capability_routing.py +0 -0
  148. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_checkpoint_diff_command.py +0 -0
  149. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_cli_init.py +0 -0
  150. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_compress_memory_tool.py +0 -0
  151. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_computer_use_permissions.py +0 -0
  152. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_context_budget.py +0 -0
  153. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_context_warning.py +0 -0
  154. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_credentials.py +0 -0
  155. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_eval_harness_layout.py +0 -0
  156. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_event_bus.py +0 -0
  157. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_fleet_reports.py +0 -0
  158. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_ide_stdio_attachments.py +0 -0
  159. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_interactive_permission_ask.py +0 -0
  160. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_kaira_ipc_paths.py +0 -0
  161. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_kaira_scheduler.py +0 -0
  162. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_modality_tools.py +0 -0
  163. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_model_error_retry.py +0 -0
  164. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_model_errors.py +0 -0
  165. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_model_routing.py +0 -0
  166. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_multimodal_input.py +0 -0
  167. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_output_styles_and_rules.py +0 -0
  168. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_paths.py +0 -0
  169. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_permissions.py +0 -0
  170. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_prompt_suggestions.py +0 -0
  171. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_repl_commands.py +0 -0
  172. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_repl_slash.py +0 -0
  173. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_session_runtime_cache.py +0 -0
  174. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_skills.py +0 -0
  175. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_slash_commands.py +0 -0
  176. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_slash_completion_registry.py +0 -0
  177. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_thinking_config.py +0 -0
  178. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_token_budget.py +0 -0
  179. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_tool_context_circulation.py +0 -0
  180. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_tools.py +0 -0
  181. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_tools_inspector.py +0 -0
  182. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_web_sse_adapter.py +0 -0
  183. {gemcode-0.4.15 → gemcode-0.4.16}/tests/test_workspace_hints.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gemcode
3
- Version: 0.4.15
3
+ Version: 0.4.16
4
4
  Summary: Local-first coding agent on Google Gemini + ADK
5
5
  Author: GemCode Contributors
6
6
  License: Apache License
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "gemcode"
7
- version = "0.4.15"
7
+ version = "0.4.16"
8
8
  description = "Local-first coding agent on Google Gemini + ADK"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -395,7 +395,10 @@ class AgentMesh:
395
395
 
396
396
  # Nested wait=True from inside a running mesh job would deadlock the scheduler
397
397
  # (parent holds a concurrency slot while the child waits for another slot).
398
- if self._mesh_job_depth > 0:
398
+ # Only use the inline path on the mesh thread: the manager runs on a different
399
+ # event loop; _mesh_job_depth can be >0 while a habit runs, but inline
400
+ # _run_job_inner must not run there (asyncio locks / ADK are mesh-loop-local).
401
+ if self._is_on_mesh_thread() and self._mesh_job_depth > 0:
399
402
  job_id = f"mesh_{uuid.uuid4().hex[:10]}"
400
403
  with self._enqueue_lock:
401
404
  self._seq += 1
@@ -868,12 +871,41 @@ class AgentMesh:
868
871
  _global_mesh: AgentMesh | None = None
869
872
 
870
873
 
874
+ def _sync_mesh_cfg_project_root(mesh: AgentMesh, cfg: GemCodeConfig) -> None:
875
+ """
876
+ Keep the singleton aligned with the active manager ``cfg.project_root``.
877
+
878
+ If the mesh was created from a different cwd than a later ``ensure_mesh`` /
879
+ ``get_mesh`` (e.g. ``-C``), habits/triggers/fleet would otherwise read the
880
+ wrong ``.gemcode/`` tree while the UI used another.
881
+ """
882
+ try:
883
+ cur = Path(mesh.cfg.project_root).resolve()
884
+ nxt = Path(cfg.project_root).resolve()
885
+ if cur == nxt:
886
+ return
887
+ mesh.cfg.project_root = cfg.project_root
888
+ if mesh._trigger_engine is not None:
889
+ mesh._trigger_engine.cfg = mesh.cfg
890
+ mesh._trigger_engine.reload()
891
+ if mesh._habit_scheduler is not None:
892
+ mesh._habit_scheduler.cfg = mesh.cfg
893
+ if mesh._learner is not None:
894
+ mesh._learner.cfg = mesh.cfg
895
+ if mesh._self_healing is not None:
896
+ mesh._self_healing.cfg = mesh.cfg
897
+ except Exception:
898
+ pass
899
+
900
+
871
901
  def get_mesh(cfg: GemCodeConfig | None = None) -> AgentMesh | None:
872
902
  """Get or create the global agent mesh."""
873
903
  global _global_mesh
874
904
  if _global_mesh is None and cfg is not None:
875
905
  concurrency = int(os.environ.get("GEMCODE_MESH_CONCURRENCY", "3"))
876
906
  _global_mesh = AgentMesh(cfg, max_concurrency=concurrency)
907
+ elif _global_mesh is not None and cfg is not None:
908
+ _sync_mesh_cfg_project_root(_global_mesh, cfg)
877
909
  return _global_mesh
878
910
 
879
911
 
@@ -883,6 +915,8 @@ def ensure_mesh(cfg: GemCodeConfig) -> AgentMesh:
883
915
  if _global_mesh is None:
884
916
  concurrency = int(os.environ.get("GEMCODE_MESH_CONCURRENCY", "3"))
885
917
  _global_mesh = AgentMesh(cfg, max_concurrency=concurrency)
918
+ else:
919
+ _sync_mesh_cfg_project_root(_global_mesh, cfg)
886
920
  return _global_mesh
887
921
 
888
922
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gemcode
3
- Version: 0.4.15
3
+ Version: 0.4.16
4
4
  Summary: Local-first coding agent on Google Gemini + ADK
5
5
  Author: GemCode Contributors
6
6
  License: Apache License
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes