gemcode 0.4.4__tar.gz → 0.4.6__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.4/src/gemcode.egg-info → gemcode-0.4.6}/PKG-INFO +1 -1
  2. {gemcode-0.4.4 → gemcode-0.4.6}/pyproject.toml +1 -1
  3. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/agent.py +5 -0
  4. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/org.py +19 -0
  5. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/repl_slash.py +21 -1
  6. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tool_synthesis.py +1 -1
  7. {gemcode-0.4.4 → gemcode-0.4.6/src/gemcode.egg-info}/PKG-INFO +1 -1
  8. {gemcode-0.4.4 → gemcode-0.4.6}/LICENSE +0 -0
  9. {gemcode-0.4.4 → gemcode-0.4.6}/MANIFEST.in +0 -0
  10. {gemcode-0.4.4 → gemcode-0.4.6}/README.md +0 -0
  11. {gemcode-0.4.4 → gemcode-0.4.6}/setup.cfg +0 -0
  12. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/__init__.py +0 -0
  13. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/__main__.py +0 -0
  14. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/a2a_bridge.py +0 -0
  15. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/agent_habits.py +0 -0
  16. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/agent_intelligence.py +0 -0
  17. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/agent_mesh.py +0 -0
  18. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/agent_triggers.py +0 -0
  19. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/audit.py +0 -0
  20. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/autocompact.py +0 -0
  21. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/automations.py +0 -0
  22. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/autotune.py +0 -0
  23. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/callbacks.py +0 -0
  24. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/capability_routing.py +0 -0
  25. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/checkpoints.py +0 -0
  26. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/cli.py +0 -0
  27. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/codebase_awareness.py +0 -0
  28. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/compaction.py +0 -0
  29. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/computer_use/__init__.py +0 -0
  30. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/computer_use/browser_computer.py +0 -0
  31. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/config.py +0 -0
  32. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/context_budget.py +0 -0
  33. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/context_warning.py +0 -0
  34. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/credentials.py +0 -0
  35. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/curated_memory.py +0 -0
  36. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/delegation_learning.py +0 -0
  37. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/dynamic_policy.py +0 -0
  38. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/evals/harness.py +0 -0
  39. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/event_bus.py +0 -0
  40. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/fleet_reports.py +0 -0
  41. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/hitl_session.py +0 -0
  42. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/hooks.py +0 -0
  43. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/ide_protocol.py +0 -0
  44. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/ide_stdio.py +0 -0
  45. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/intent_classifier.py +0 -0
  46. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/interactions.py +0 -0
  47. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/invoke.py +0 -0
  48. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/kaira_client.py +0 -0
  49. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/kaira_daemon.py +0 -0
  50. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/kaira_ipc.py +0 -0
  51. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/kaira_job_store.py +0 -0
  52. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/learning.py +0 -0
  53. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/limits.py +0 -0
  54. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/live_audio_engine.py +0 -0
  55. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/logging_config.py +0 -0
  56. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/mcp_loader.py +0 -0
  57. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/memory/__init__.py +0 -0
  58. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/memory/embedding_memory_service.py +0 -0
  59. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/memory/file_memory_service.py +0 -0
  60. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/modality_tools.py +0 -0
  61. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/model_errors.py +0 -0
  62. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/model_routing.py +0 -0
  63. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/multimodal_input.py +0 -0
  64. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/openapi_loader.py +0 -0
  65. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/output_styles.py +0 -0
  66. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/paths.py +0 -0
  67. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/permissions.py +0 -0
  68. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/plugins/__init__.py +0 -0
  69. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/plugins/terminal_hooks_plugin.py +0 -0
  70. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/plugins/tool_recovery_plugin.py +0 -0
  71. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/policy_profile.py +0 -0
  72. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/pricing.py +0 -0
  73. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/prompt_suggestions.py +0 -0
  74. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/query/__init__.py +0 -0
  75. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/query/config.py +0 -0
  76. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/query/deps.py +0 -0
  77. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/query/engine.py +0 -0
  78. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/query/stop_hooks.py +0 -0
  79. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/query/token_budget.py +0 -0
  80. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/query/transitions.py +0 -0
  81. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/query_sanitizer.py +0 -0
  82. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/refine.py +0 -0
  83. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/repl_commands.py +0 -0
  84. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/review_agent.py +0 -0
  85. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/rules.py +0 -0
  86. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/self_healing.py +0 -0
  87. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/session_runtime.py +0 -0
  88. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/session_store.py +0 -0
  89. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/session_summariser.py +0 -0
  90. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/skills.py +0 -0
  91. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/slash_commands.py +0 -0
  92. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/thinking.py +0 -0
  93. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tool_prompt_manifest.py +0 -0
  94. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tool_registry.py +0 -0
  95. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tool_result_store.py +0 -0
  96. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/__init__.py +0 -0
  97. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/automations_tools.py +0 -0
  98. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/bash.py +0 -0
  99. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/browser.py +0 -0
  100. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/compress_memory.py +0 -0
  101. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/curated_memory.py +0 -0
  102. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/edit.py +0 -0
  103. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/filesystem.py +0 -0
  104. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/notebook.py +0 -0
  105. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/notes.py +0 -0
  106. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/org_tools.py +0 -0
  107. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/repo_map.py +0 -0
  108. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/search.py +0 -0
  109. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/shell.py +0 -0
  110. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/shell_gate.py +0 -0
  111. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/skills.py +0 -0
  112. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/subtask.py +0 -0
  113. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/tasks.py +0 -0
  114. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/think.py +0 -0
  115. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/todo.py +0 -0
  116. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/user_choice.py +0 -0
  117. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/veomem_tools.py +0 -0
  118. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/web.py +0 -0
  119. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools/web_search.py +0 -0
  120. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tools_inspector.py +0 -0
  121. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/trust.py +0 -0
  122. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tui/input_handler.py +0 -0
  123. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tui/scrollback.py +0 -0
  124. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tui/spinner.py +0 -0
  125. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tui/welcome_banner.py +0 -0
  126. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/tui/welcome_rich.py +0 -0
  127. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/veomem_bridge.py +0 -0
  128. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/version.py +0 -0
  129. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/vertex.py +0 -0
  130. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/wal.py +0 -0
  131. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/web/__init__.py +0 -0
  132. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/web/sse_adapter.py +0 -0
  133. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/web/terminal_repl.py +0 -0
  134. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/web/web_sse_compat.py +0 -0
  135. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode/workspace_hints.py +0 -0
  136. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode.egg-info/SOURCES.txt +0 -0
  137. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode.egg-info/dependency_links.txt +0 -0
  138. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode.egg-info/entry_points.txt +0 -0
  139. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode.egg-info/requires.txt +0 -0
  140. {gemcode-0.4.4 → gemcode-0.4.6}/src/gemcode.egg-info/top_level.txt +0 -0
  141. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_add_dir.py +0 -0
  142. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_agent_habits.py +0 -0
  143. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_agent_instruction.py +0 -0
  144. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_agent_mesh.py +0 -0
  145. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_autocompact.py +0 -0
  146. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_automations.py +0 -0
  147. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_capability_routing.py +0 -0
  148. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_checkpoint_diff_command.py +0 -0
  149. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_cli_init.py +0 -0
  150. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_compress_memory_tool.py +0 -0
  151. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_computer_use_permissions.py +0 -0
  152. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_context_budget.py +0 -0
  153. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_context_warning.py +0 -0
  154. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_credentials.py +0 -0
  155. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_eval_harness_layout.py +0 -0
  156. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_event_bus.py +0 -0
  157. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_fleet_reports.py +0 -0
  158. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_ide_stdio_attachments.py +0 -0
  159. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_interactive_permission_ask.py +0 -0
  160. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_kaira_ipc_paths.py +0 -0
  161. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_kaira_scheduler.py +0 -0
  162. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_modality_tools.py +0 -0
  163. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_model_error_retry.py +0 -0
  164. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_model_errors.py +0 -0
  165. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_model_routing.py +0 -0
  166. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_multimodal_input.py +0 -0
  167. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_output_styles_and_rules.py +0 -0
  168. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_paths.py +0 -0
  169. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_permissions.py +0 -0
  170. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_prompt_suggestions.py +0 -0
  171. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_repl_commands.py +0 -0
  172. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_repl_slash.py +0 -0
  173. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_session_runtime_cache.py +0 -0
  174. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_skills.py +0 -0
  175. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_slash_commands.py +0 -0
  176. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_slash_completion_registry.py +0 -0
  177. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_thinking_config.py +0 -0
  178. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_token_budget.py +0 -0
  179. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_tool_context_circulation.py +0 -0
  180. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_tools.py +0 -0
  181. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_tools_inspector.py +0 -0
  182. {gemcode-0.4.4 → gemcode-0.4.6}/tests/test_web_sse_adapter.py +0 -0
  183. {gemcode-0.4.4 → gemcode-0.4.6}/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.4
3
+ Version: 0.4.6
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.4"
7
+ version = "0.4.6"
8
8
  description = "Local-first coding agent on Google Gemini + ADK"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1292,7 +1292,12 @@ def build_root_agent(
1292
1292
  fleet_root = resolve_fleet_root(cfg.project_root)
1293
1293
  members = list_members(fleet_root)
1294
1294
 
1295
+ # Deduplicate by name — ADK requires unique sub-agent names
1296
+ seen_names: set[str] = set()
1295
1297
  for m in members:
1298
+ if m.name in seen_names:
1299
+ continue
1300
+ seen_names.add(m.name)
1296
1301
  # Build a specialized sub-agent for each org member
1297
1302
  member_tools = build_function_tools(cfg, include_subtask=False)
1298
1303
 
@@ -336,6 +336,25 @@ def hire_member(
336
336
  root = resolve_fleet_root(project_root)
337
337
  org = load_org(root)
338
338
  members = list(org.get("members") or [])
339
+
340
+ # Prevent duplicate names — ADK sub_agents require unique names
341
+ clean_name = name.strip().lower()
342
+ for existing in members:
343
+ if str(existing.get("name", "")).strip().lower() == clean_name:
344
+ # Return the existing member instead of creating a duplicate
345
+ return OrgMember(
346
+ id=str(existing.get("id") or ""),
347
+ name=str(existing.get("name") or ""),
348
+ title=str(existing.get("title") or title),
349
+ kind=str(existing.get("kind") or kind),
350
+ address=str(existing.get("address") or ""),
351
+ workspace_rel=str(existing.get("workspace_rel") or ""),
352
+ reports_to=str(existing.get("reports_to") or ""),
353
+ skill_name=str(existing.get("skill_name") or ""),
354
+ description=str(existing.get("description") or description),
355
+ created_ms=int(existing.get("created_ms") or 0),
356
+ )
357
+
339
358
  now = _now_ms()
340
359
  mid = f"m_{uuid.uuid4().hex[:10]}"
341
360
  m = OrgMember(
@@ -2964,7 +2964,27 @@ async def process_repl_slash(
2964
2964
  out()
2965
2965
  return ReplSlashResult(skip_model_turn=True)
2966
2966
  except Exception as e:
2967
- out(f"[agent] agent runtime not reachable at {sock}: {type(e).__name__}: {e}")
2967
+ # Fallback: use the mesh to run the prompt for this agent
2968
+ out(f"[agent] runtime not reachable, using mesh fallback")
2969
+ try:
2970
+ from gemcode.tools.org_tools import make_org_tools
2971
+ org_delegate = None
2972
+ for t in make_org_tools(cfg):
2973
+ if getattr(t, "__name__", "") == "org_delegate":
2974
+ org_delegate = t
2975
+ break
2976
+ if org_delegate is not None:
2977
+ d = await org_delegate(member=m.name, task=prompt, context="")
2978
+ if isinstance(d, dict) and d.get("ok"):
2979
+ out(f"[agent] delegated via mesh: member={m.name}")
2980
+ if d.get("result"):
2981
+ out(str(d.get("result"))[:2000])
2982
+ else:
2983
+ out(f"[agent] mesh delegation failed: {d.get('error') if isinstance(d, dict) else d}")
2984
+ else:
2985
+ out("[agent] org_delegate tool not available")
2986
+ except Exception as e2:
2987
+ out(f"[agent] fallback failed: {type(e2).__name__}: {e2}")
2968
2988
  out()
2969
2989
  return ReplSlashResult(skip_model_turn=True)
2970
2990
 
@@ -118,7 +118,7 @@ def run_synthesized_tool(
118
118
  project_root: Path,
119
119
  name: str,
120
120
  args: list[str] | None = None,
121
- timeout: int = 60,
121
+ timeout: int = 300,
122
122
  ) -> dict[str, Any]:
123
123
  """Run a synthesized tool and return its output."""
124
124
  import subprocess
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gemcode
3
- Version: 0.4.4
3
+ Version: 0.4.6
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes