gemcode 0.3.116__tar.gz → 0.3.118__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 (167) hide show
  1. {gemcode-0.3.116/src/gemcode.egg-info → gemcode-0.3.118}/PKG-INFO +1 -1
  2. {gemcode-0.3.116 → gemcode-0.3.118}/pyproject.toml +1 -1
  3. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/repl_slash.py +36 -11
  4. {gemcode-0.3.116 → gemcode-0.3.118/src/gemcode.egg-info}/PKG-INFO +1 -1
  5. {gemcode-0.3.116 → gemcode-0.3.118}/LICENSE +0 -0
  6. {gemcode-0.3.116 → gemcode-0.3.118}/MANIFEST.in +0 -0
  7. {gemcode-0.3.116 → gemcode-0.3.118}/README.md +0 -0
  8. {gemcode-0.3.116 → gemcode-0.3.118}/setup.cfg +0 -0
  9. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/__init__.py +0 -0
  10. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/__main__.py +0 -0
  11. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/agent.py +0 -0
  12. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/audit.py +0 -0
  13. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/autocompact.py +0 -0
  14. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/automations.py +0 -0
  15. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/autotune.py +0 -0
  16. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/callbacks.py +0 -0
  17. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/capability_routing.py +0 -0
  18. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/checkpoints.py +0 -0
  19. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/cli.py +0 -0
  20. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/compaction.py +0 -0
  21. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/computer_use/__init__.py +0 -0
  22. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/computer_use/browser_computer.py +0 -0
  23. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/config.py +0 -0
  24. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/context_budget.py +0 -0
  25. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/context_warning.py +0 -0
  26. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/credentials.py +0 -0
  27. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/curated_memory.py +0 -0
  28. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/dynamic_policy.py +0 -0
  29. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/evals/harness.py +0 -0
  30. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/hitl_session.py +0 -0
  31. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/hooks.py +0 -0
  32. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/ide_protocol.py +0 -0
  33. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/ide_stdio.py +0 -0
  34. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/intent_classifier.py +0 -0
  35. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/interactions.py +0 -0
  36. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/invoke.py +0 -0
  37. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/kaira_client.py +0 -0
  38. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/kaira_daemon.py +0 -0
  39. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/kaira_ipc.py +0 -0
  40. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/kaira_job_store.py +0 -0
  41. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/learning.py +0 -0
  42. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/limits.py +0 -0
  43. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/live_audio_engine.py +0 -0
  44. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/logging_config.py +0 -0
  45. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/mcp_loader.py +0 -0
  46. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/memory/__init__.py +0 -0
  47. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/memory/embedding_memory_service.py +0 -0
  48. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/memory/file_memory_service.py +0 -0
  49. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/modality_tools.py +0 -0
  50. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/model_errors.py +0 -0
  51. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/model_routing.py +0 -0
  52. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/multimodal_input.py +0 -0
  53. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/openapi_loader.py +0 -0
  54. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/org.py +0 -0
  55. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/output_styles.py +0 -0
  56. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/paths.py +0 -0
  57. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/permissions.py +0 -0
  58. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/plugins/__init__.py +0 -0
  59. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/plugins/terminal_hooks_plugin.py +0 -0
  60. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/plugins/tool_recovery_plugin.py +0 -0
  61. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/policy_profile.py +0 -0
  62. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/pricing.py +0 -0
  63. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/prompt_suggestions.py +0 -0
  64. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/query/__init__.py +0 -0
  65. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/query/config.py +0 -0
  66. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/query/deps.py +0 -0
  67. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/query/engine.py +0 -0
  68. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/query/stop_hooks.py +0 -0
  69. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/query/token_budget.py +0 -0
  70. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/query/transitions.py +0 -0
  71. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/query_sanitizer.py +0 -0
  72. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/refine.py +0 -0
  73. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/repl_commands.py +0 -0
  74. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/review_agent.py +0 -0
  75. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/rules.py +0 -0
  76. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/session_runtime.py +0 -0
  77. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/session_store.py +0 -0
  78. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/session_summariser.py +0 -0
  79. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/skills.py +0 -0
  80. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/slash_commands.py +0 -0
  81. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/thinking.py +0 -0
  82. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tool_prompt_manifest.py +0 -0
  83. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tool_registry.py +0 -0
  84. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tool_result_store.py +0 -0
  85. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/__init__.py +0 -0
  86. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/automations_tools.py +0 -0
  87. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/bash.py +0 -0
  88. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/browser.py +0 -0
  89. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/compress_memory.py +0 -0
  90. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/curated_memory.py +0 -0
  91. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/edit.py +0 -0
  92. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/filesystem.py +0 -0
  93. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/notebook.py +0 -0
  94. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/notes.py +0 -0
  95. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/org_tools.py +0 -0
  96. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/repo_map.py +0 -0
  97. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/search.py +0 -0
  98. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/shell.py +0 -0
  99. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/shell_gate.py +0 -0
  100. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/skills.py +0 -0
  101. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/subtask.py +0 -0
  102. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/tasks.py +0 -0
  103. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/think.py +0 -0
  104. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/todo.py +0 -0
  105. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/user_choice.py +0 -0
  106. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/veomem_tools.py +0 -0
  107. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/web.py +0 -0
  108. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools/web_search.py +0 -0
  109. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tools_inspector.py +0 -0
  110. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/trust.py +0 -0
  111. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tui/input_handler.py +0 -0
  112. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tui/scrollback.py +0 -0
  113. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tui/spinner.py +0 -0
  114. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tui/welcome_banner.py +0 -0
  115. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/tui/welcome_rich.py +0 -0
  116. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/veomem_bridge.py +0 -0
  117. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/version.py +0 -0
  118. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/vertex.py +0 -0
  119. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/wal.py +0 -0
  120. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/web/__init__.py +0 -0
  121. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/web/sse_adapter.py +0 -0
  122. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/web/terminal_repl.py +0 -0
  123. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/web/web_sse_compat.py +0 -0
  124. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode/workspace_hints.py +0 -0
  125. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode.egg-info/SOURCES.txt +0 -0
  126. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode.egg-info/dependency_links.txt +0 -0
  127. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode.egg-info/entry_points.txt +0 -0
  128. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode.egg-info/requires.txt +0 -0
  129. {gemcode-0.3.116 → gemcode-0.3.118}/src/gemcode.egg-info/top_level.txt +0 -0
  130. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_add_dir.py +0 -0
  131. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_agent_instruction.py +0 -0
  132. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_autocompact.py +0 -0
  133. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_automations.py +0 -0
  134. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_capability_routing.py +0 -0
  135. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_checkpoint_diff_command.py +0 -0
  136. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_cli_init.py +0 -0
  137. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_compress_memory_tool.py +0 -0
  138. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_computer_use_permissions.py +0 -0
  139. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_context_budget.py +0 -0
  140. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_context_warning.py +0 -0
  141. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_credentials.py +0 -0
  142. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_eval_harness_layout.py +0 -0
  143. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_ide_stdio_attachments.py +0 -0
  144. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_interactive_permission_ask.py +0 -0
  145. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_kaira_scheduler.py +0 -0
  146. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_modality_tools.py +0 -0
  147. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_model_error_retry.py +0 -0
  148. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_model_errors.py +0 -0
  149. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_model_routing.py +0 -0
  150. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_multimodal_input.py +0 -0
  151. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_output_styles_and_rules.py +0 -0
  152. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_paths.py +0 -0
  153. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_permissions.py +0 -0
  154. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_prompt_suggestions.py +0 -0
  155. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_repl_commands.py +0 -0
  156. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_repl_slash.py +0 -0
  157. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_session_runtime_cache.py +0 -0
  158. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_skills.py +0 -0
  159. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_slash_commands.py +0 -0
  160. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_slash_completion_registry.py +0 -0
  161. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_thinking_config.py +0 -0
  162. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_token_budget.py +0 -0
  163. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_tool_context_circulation.py +0 -0
  164. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_tools.py +0 -0
  165. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_tools_inspector.py +0 -0
  166. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_web_sse_adapter.py +0 -0
  167. {gemcode-0.3.116 → gemcode-0.3.118}/tests/test_workspace_hints.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gemcode
3
- Version: 0.3.116
3
+ Version: 0.3.118
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.3.116"
7
+ version = "0.3.118"
8
8
  description = "Local-first coding agent on Google Gemini + ADK"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -2734,8 +2734,10 @@ async def process_repl_slash(
2734
2734
  member = parts[0].strip()
2735
2735
  task = parts[1].strip()
2736
2736
  try:
2737
+ from gemcode.org import resolve_fleet_root
2737
2738
  from gemcode.kaira_client import KairaIpcClient
2738
- sock = os.environ.get("GEMCODE_KAIRA_SOCKET") or str(cfg.project_root / ".gemcode" / "ipc.sock")
2739
+ fleet_root = resolve_fleet_root(cfg.project_root)
2740
+ sock = os.environ.get("GEMCODE_KAIRA_SOCKET") or str(fleet_root / ".gemcode" / "ipc.sock")
2739
2741
  client = await KairaIpcClient.connect(socket_path=sock)
2740
2742
  try:
2741
2743
  res = await client.publish(
@@ -2753,15 +2755,36 @@ async def process_repl_slash(
2753
2755
  out()
2754
2756
  return ReplSlashResult(skip_model_turn=True)
2755
2757
  except Exception as e:
2756
- prompt = (
2757
- "Delegate this task using org_delegate(member, task). "
2758
- "If delegation returns a job_id, tell the user it's running in background.\n\n"
2759
- f"member={member}\n"
2760
- f"task={task}\n"
2761
- )
2762
- out(f"[agent] runtime unavailable ({type(e).__name__}); falling back to in-turn delegation")
2763
- out()
2764
- return ReplSlashResult(model_prompt=prompt)
2758
+ # Runtime is unavailable; do in-turn delegation deterministically (no model mediation).
2759
+ out(f"[agent] runtime unavailable ({type(e).__name__}); delegating in-turn")
2760
+ try:
2761
+ from gemcode.tools.org_tools import make_org_tools
2762
+
2763
+ org_delegate = None
2764
+ for t in make_org_tools(cfg):
2765
+ if getattr(t, "__name__", "") == "org_delegate":
2766
+ org_delegate = t
2767
+ break
2768
+ if org_delegate is None:
2769
+ out("[agent] org_delegate tool not available")
2770
+ out()
2771
+ return ReplSlashResult(skip_model_turn=True)
2772
+ d = await org_delegate(member=member, task=task, context="") # type: ignore[misc]
2773
+ if isinstance(d, dict) and d.get("ok"):
2774
+ if d.get("job_id"):
2775
+ out(f"[agent] delegated (background): member={member} job_id={str(d.get('job_id'))[:10]}")
2776
+ else:
2777
+ out(f"[agent] delegated (in-process): member={member}")
2778
+ if d.get("result"):
2779
+ out(str(d.get("result")))
2780
+ else:
2781
+ out(f"[agent] delegation failed: {d.get('error') if isinstance(d, dict) else d}")
2782
+ out()
2783
+ return ReplSlashResult(skip_model_turn=True)
2784
+ except Exception as e2:
2785
+ out(f"[agent] in-turn delegation failed: {type(e2).__name__}: {e2}")
2786
+ out()
2787
+ return ReplSlashResult(skip_model_turn=True)
2765
2788
 
2766
2789
  if sub == "spawn":
2767
2790
  # /agent spawn <name> <title> <kaira_worker|subagent> <task...>
@@ -2826,8 +2849,10 @@ async def process_repl_slash(
2826
2849
  member = parts[0].strip()
2827
2850
  task = parts[1].strip()
2828
2851
  try:
2852
+ from gemcode.org import resolve_fleet_root
2829
2853
  from gemcode.kaira_client import KairaIpcClient
2830
- sock = os.environ.get("GEMCODE_KAIRA_SOCKET") or str(cfg.project_root / ".gemcode" / "ipc.sock")
2854
+ fleet_root = resolve_fleet_root(cfg.project_root)
2855
+ sock = os.environ.get("GEMCODE_KAIRA_SOCKET") or str(fleet_root / ".gemcode" / "ipc.sock")
2831
2856
  client = await KairaIpcClient.connect(socket_path=sock)
2832
2857
  try:
2833
2858
  res = await client.publish(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gemcode
3
- Version: 0.3.116
3
+ Version: 0.3.118
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