gemcode 0.4.10__tar.gz → 0.4.12__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.10/src/gemcode.egg-info → gemcode-0.4.12}/PKG-INFO +1 -1
  2. {gemcode-0.4.10 → gemcode-0.4.12}/pyproject.toml +1 -1
  3. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/agent_habits.py +5 -0
  4. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/agent_mesh.py +15 -5
  5. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/fleet_reports.py +16 -9
  6. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/repl_slash.py +2 -2
  7. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/session_runtime.py +4 -4
  8. {gemcode-0.4.10 → gemcode-0.4.12/src/gemcode.egg-info}/PKG-INFO +1 -1
  9. {gemcode-0.4.10 → gemcode-0.4.12}/LICENSE +0 -0
  10. {gemcode-0.4.10 → gemcode-0.4.12}/MANIFEST.in +0 -0
  11. {gemcode-0.4.10 → gemcode-0.4.12}/README.md +0 -0
  12. {gemcode-0.4.10 → gemcode-0.4.12}/setup.cfg +0 -0
  13. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/__init__.py +0 -0
  14. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/__main__.py +0 -0
  15. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/a2a_bridge.py +0 -0
  16. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/agent.py +0 -0
  17. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/agent_intelligence.py +0 -0
  18. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/agent_triggers.py +0 -0
  19. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/audit.py +0 -0
  20. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/autocompact.py +0 -0
  21. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/automations.py +0 -0
  22. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/autotune.py +0 -0
  23. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/callbacks.py +0 -0
  24. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/capability_routing.py +0 -0
  25. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/checkpoints.py +0 -0
  26. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/cli.py +0 -0
  27. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/codebase_awareness.py +0 -0
  28. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/compaction.py +0 -0
  29. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/computer_use/__init__.py +0 -0
  30. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/computer_use/browser_computer.py +0 -0
  31. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/config.py +0 -0
  32. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/context_budget.py +0 -0
  33. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/context_warning.py +0 -0
  34. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/credentials.py +0 -0
  35. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/curated_memory.py +0 -0
  36. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/delegation_learning.py +0 -0
  37. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/dynamic_policy.py +0 -0
  38. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/evals/harness.py +0 -0
  39. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/event_bus.py +0 -0
  40. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/hitl_session.py +0 -0
  41. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/hooks.py +0 -0
  42. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/ide_protocol.py +0 -0
  43. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/ide_stdio.py +0 -0
  44. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/intent_classifier.py +0 -0
  45. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/interactions.py +0 -0
  46. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/invoke.py +0 -0
  47. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/kaira_client.py +0 -0
  48. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/kaira_daemon.py +0 -0
  49. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/kaira_ipc.py +0 -0
  50. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/kaira_job_store.py +0 -0
  51. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/learning.py +0 -0
  52. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/limits.py +0 -0
  53. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/live_audio_engine.py +0 -0
  54. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/logging_config.py +0 -0
  55. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/mcp_loader.py +0 -0
  56. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/memory/__init__.py +0 -0
  57. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/memory/embedding_memory_service.py +0 -0
  58. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/memory/file_memory_service.py +0 -0
  59. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/modality_tools.py +0 -0
  60. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/model_errors.py +0 -0
  61. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/model_routing.py +0 -0
  62. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/multimodal_input.py +0 -0
  63. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/openapi_loader.py +0 -0
  64. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/org.py +0 -0
  65. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/output_styles.py +0 -0
  66. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/paths.py +0 -0
  67. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/permissions.py +0 -0
  68. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/plugins/__init__.py +0 -0
  69. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/plugins/terminal_hooks_plugin.py +0 -0
  70. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/plugins/tool_recovery_plugin.py +0 -0
  71. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/policy_profile.py +0 -0
  72. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/pricing.py +0 -0
  73. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/prompt_suggestions.py +0 -0
  74. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/__init__.py +0 -0
  75. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/config.py +0 -0
  76. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/deps.py +0 -0
  77. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/engine.py +0 -0
  78. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/stop_hooks.py +0 -0
  79. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/token_budget.py +0 -0
  80. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/transitions.py +0 -0
  81. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query_sanitizer.py +0 -0
  82. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/refine.py +0 -0
  83. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/repl_commands.py +0 -0
  84. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/review_agent.py +0 -0
  85. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/rules.py +0 -0
  86. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/self_healing.py +0 -0
  87. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/session_store.py +0 -0
  88. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/session_summariser.py +0 -0
  89. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/skills.py +0 -0
  90. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/slash_commands.py +0 -0
  91. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/thinking.py +0 -0
  92. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tool_prompt_manifest.py +0 -0
  93. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tool_registry.py +0 -0
  94. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tool_result_store.py +0 -0
  95. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tool_synthesis.py +0 -0
  96. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/__init__.py +0 -0
  97. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/automations_tools.py +0 -0
  98. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/bash.py +0 -0
  99. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/browser.py +0 -0
  100. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/compress_memory.py +0 -0
  101. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/curated_memory.py +0 -0
  102. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/edit.py +0 -0
  103. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/filesystem.py +0 -0
  104. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/notebook.py +0 -0
  105. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/notes.py +0 -0
  106. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/org_tools.py +0 -0
  107. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/repo_map.py +0 -0
  108. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/search.py +0 -0
  109. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/shell.py +0 -0
  110. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/shell_gate.py +0 -0
  111. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/skills.py +0 -0
  112. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/subtask.py +0 -0
  113. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/tasks.py +0 -0
  114. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/think.py +0 -0
  115. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/todo.py +0 -0
  116. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/user_choice.py +0 -0
  117. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/veomem_tools.py +0 -0
  118. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/web.py +0 -0
  119. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/web_search.py +0 -0
  120. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools_inspector.py +0 -0
  121. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/trust.py +0 -0
  122. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tui/input_handler.py +0 -0
  123. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tui/scrollback.py +0 -0
  124. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tui/spinner.py +0 -0
  125. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tui/welcome_banner.py +0 -0
  126. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tui/welcome_rich.py +0 -0
  127. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/veomem_bridge.py +0 -0
  128. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/version.py +0 -0
  129. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/vertex.py +0 -0
  130. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/wal.py +0 -0
  131. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/web/__init__.py +0 -0
  132. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/web/sse_adapter.py +0 -0
  133. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/web/terminal_repl.py +0 -0
  134. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/web/web_sse_compat.py +0 -0
  135. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/workspace_hints.py +0 -0
  136. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode.egg-info/SOURCES.txt +0 -0
  137. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode.egg-info/dependency_links.txt +0 -0
  138. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode.egg-info/entry_points.txt +0 -0
  139. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode.egg-info/requires.txt +0 -0
  140. {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode.egg-info/top_level.txt +0 -0
  141. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_add_dir.py +0 -0
  142. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_agent_habits.py +0 -0
  143. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_agent_instruction.py +0 -0
  144. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_agent_mesh.py +0 -0
  145. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_autocompact.py +0 -0
  146. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_automations.py +0 -0
  147. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_capability_routing.py +0 -0
  148. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_checkpoint_diff_command.py +0 -0
  149. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_cli_init.py +0 -0
  150. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_compress_memory_tool.py +0 -0
  151. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_computer_use_permissions.py +0 -0
  152. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_context_budget.py +0 -0
  153. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_context_warning.py +0 -0
  154. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_credentials.py +0 -0
  155. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_eval_harness_layout.py +0 -0
  156. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_event_bus.py +0 -0
  157. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_fleet_reports.py +0 -0
  158. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_ide_stdio_attachments.py +0 -0
  159. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_interactive_permission_ask.py +0 -0
  160. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_kaira_ipc_paths.py +0 -0
  161. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_kaira_scheduler.py +0 -0
  162. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_modality_tools.py +0 -0
  163. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_model_error_retry.py +0 -0
  164. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_model_errors.py +0 -0
  165. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_model_routing.py +0 -0
  166. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_multimodal_input.py +0 -0
  167. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_output_styles_and_rules.py +0 -0
  168. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_paths.py +0 -0
  169. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_permissions.py +0 -0
  170. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_prompt_suggestions.py +0 -0
  171. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_repl_commands.py +0 -0
  172. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_repl_slash.py +0 -0
  173. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_session_runtime_cache.py +0 -0
  174. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_skills.py +0 -0
  175. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_slash_commands.py +0 -0
  176. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_slash_completion_registry.py +0 -0
  177. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_thinking_config.py +0 -0
  178. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_token_budget.py +0 -0
  179. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_tool_context_circulation.py +0 -0
  180. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_tools.py +0 -0
  181. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_tools_inspector.py +0 -0
  182. {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_web_sse_adapter.py +0 -0
  183. {gemcode-0.4.10 → gemcode-0.4.12}/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.10
3
+ Version: 0.4.12
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.10"
7
+ version = "0.4.12"
8
8
  description = "Local-first coding agent on Google Gemini + ADK"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -323,6 +323,11 @@ def make_habits_tools(cfg: GemCodeConfig) -> list:
323
323
  Habits run inside the main GemCode process — no separate daemon needed.
324
324
  They fire as long as GemCode is open (REPL/TUI session).
325
325
 
326
+ Results go to the fleet inbox (.gemcode/fleet_reports.jsonl). Fleet auto-continue
327
+ (GEMCODE_FLEET_REPORTS_AUTO_CONTINUE, default on) can inject digest turns after each assistant
328
+ reply so the main agent summarizes habit output. Set GEMCODE_FLEET_REPORTS_AUTO_CONTINUE=0 to
329
+ only drain on your next normal message.
330
+
326
331
  Args:
327
332
  name: Unique name for this habit (e.g., "test-watch", "nightly-audit").
328
333
  agent: Org member name to run this (e.g., "kaira", "verifier").
@@ -400,16 +400,21 @@ class AgentMesh:
400
400
  except Exception:
401
401
  pass
402
402
 
403
- # Persist to fleet reports
403
+ # Persist to fleet reports (include habit + member so the manager inbox reads clearly)
404
404
  try:
405
405
  from gemcode.fleet_reports import maybe_append_job_report
406
406
  fleet_root = resolve_fleet_root(self.cfg.project_root)
407
- maybe_append_job_report(fleet_root, {
407
+ pl: dict[str, Any] = {
408
408
  "job_id": job.job_id,
409
409
  "session_id": job.session_id,
410
410
  "status": "finished",
411
411
  "report": result_text[:8000],
412
- })
412
+ "member": job.member_name or "",
413
+ }
414
+ hm = job.meta.get("habit") if isinstance(job.meta, dict) else None
415
+ if isinstance(hm, dict):
416
+ pl["habit"] = hm
417
+ maybe_append_job_report(fleet_root, pl)
413
418
  except Exception:
414
419
  pass
415
420
 
@@ -434,12 +439,17 @@ class AgentMesh:
434
439
  try:
435
440
  from gemcode.fleet_reports import maybe_append_job_report
436
441
  fleet_root = resolve_fleet_root(self.cfg.project_root)
437
- maybe_append_job_report(fleet_root, {
442
+ plf: dict[str, Any] = {
438
443
  "job_id": job.job_id,
439
444
  "session_id": job.session_id,
440
445
  "status": "failed",
441
446
  "report": job.error[:8000],
442
- })
447
+ "member": job.member_name or "",
448
+ }
449
+ hm = job.meta.get("habit") if isinstance(job.meta, dict) else None
450
+ if isinstance(hm, dict):
451
+ plf["habit"] = hm
452
+ maybe_append_job_report(fleet_root, plf)
443
453
  except Exception:
444
454
  pass
445
455
 
@@ -33,12 +33,9 @@ def inject_enabled() -> bool:
33
33
 
34
34
 
35
35
  def auto_continue_enabled() -> bool:
36
- return os.environ.get("GEMCODE_FLEET_REPORTS_AUTO_CONTINUE", "").strip().lower() in (
37
- "1",
38
- "true",
39
- "yes",
40
- "on",
41
- )
36
+ """When true, queue a manager digest after each turn if fleet reports are pending (TUI/REPL). Default on; set GEMCODE_FLEET_REPORTS_AUTO_CONTINUE=0 to disable."""
37
+ v = os.environ.get("GEMCODE_FLEET_REPORTS_AUTO_CONTINUE", "1").strip().lower()
38
+ return v not in ("0", "false", "no", "off")
42
39
 
43
40
 
44
41
  def auto_continue_mode() -> str:
@@ -59,9 +56,10 @@ def max_auto_chain() -> int:
59
56
  def fleet_digest_prompt() -> str:
60
57
  return (
61
58
  f"{_DIGEST_MARKER}\n"
62
- "Background agents may have completed work; fleet reports were drained at the start of this turn if any were queued.\n"
63
- "Summarize outcomes for the user in short bullets. Do not call org_delegate, org_spawn, or spawn_subtasks "
64
- "unless you must fix a reported error."
59
+ "New background work arrived (habits, mesh jobs, or agent messages). Summarize for the user in a short, "
60
+ "conversational way—like you are relaying what the other agent just did. Call out what changed since last time "
61
+ "if the report looks like a recurring check. Do not call org_delegate, org_spawn, or spawn_subtasks unless you "
62
+ "must fix a reported error."
65
63
  )
66
64
 
67
65
 
@@ -248,6 +246,15 @@ def _format_record(rec: dict[str, Any]) -> str:
248
246
  f"[job.report] job_id={payload.get('job_id')} status={payload.get('status')} "
249
247
  f"session_id={payload.get('session_id')}"
250
248
  )
249
+ mem = str(payload.get("member") or "").strip()
250
+ if mem:
251
+ lines.append(f" member: {mem}")
252
+ hab = payload.get("habit")
253
+ if isinstance(hab, dict):
254
+ hn = str(hab.get("name") or "").strip()
255
+ ha = str(hab.get("agent") or "").strip()
256
+ if hn:
257
+ lines.append(f" habit: {hn}" + (f" (runs as agent `{ha}`)" if ha else ""))
251
258
  rpt = str(payload.get("report") or "").strip()
252
259
  if rpt:
253
260
  lines.append(f" report: {rpt[:8000]}")
@@ -1566,7 +1566,7 @@ async def process_repl_slash(
1566
1566
 
1567
1567
  if sub == "prompt":
1568
1568
  if len(parts) < 2:
1569
- out(f"GEMCODE_AFC_PROMPT: {os.environ.get('GEMCODE_AFC_PROMPT', '(unset => default on)')}")
1569
+ out(f"GEMCODE_AFC_PROMPT: {os.environ.get('GEMCODE_AFC_PROMPT', '(unset => default off, no afc> prompt)')}")
1570
1570
  out()
1571
1571
  return ReplSlashResult(skip_model_turn=True)
1572
1572
  v2 = _norm(parts[1])
@@ -1584,7 +1584,7 @@ async def process_repl_slash(
1584
1584
  return ReplSlashResult(skip_model_turn=True, force_rebuild_runner=True)
1585
1585
 
1586
1586
  out("AFC:")
1587
- out(f" GEMCODE_AFC_PROMPT : {os.environ.get('GEMCODE_AFC_PROMPT', '(unset => default on)')}")
1587
+ out(f" GEMCODE_AFC_PROMPT : {os.environ.get('GEMCODE_AFC_PROMPT', '(unset => default off)')}")
1588
1588
  out(f" GEMCODE_AFC_DEFAULT: {os.environ.get('GEMCODE_AFC_DEFAULT', '(unset)')}")
1589
1589
  out()
1590
1590
  return ReplSlashResult(skip_model_turn=True)
@@ -466,14 +466,14 @@ def create_runner(cfg: GemCodeConfig, extra_tools: list | None = None) -> Runner
466
466
  # composed of Python callables. Some ADK toolsets (MCP/OpenAPI/built-in
467
467
  # declarations) may be non-callable and cause AFC to be disabled.
468
468
  #
469
- # If we're in an interactive terminal and the user opted into prompting,
470
- # ask whether to keep "all tools" (AFC disabled) or restrict to callables
471
- # (AFC enabled).
469
+ # By default we do **not** prompt: non-callable toolsets (MCP/OpenAPI) stay
470
+ # enabled (same as choosing [Enter] "all tools"; AFC may still be disabled).
471
+ # Set GEMCODE_AFC_PROMPT=1 to restore the interactive `afc>` choice.
472
472
  try:
473
473
  import os
474
474
  import sys
475
475
 
476
- prompt_afc = os.environ.get("GEMCODE_AFC_PROMPT", "1").strip().lower() in ("1", "true", "yes", "on")
476
+ prompt_afc = os.environ.get("GEMCODE_AFC_PROMPT", "0").strip().lower() in ("1", "true", "yes", "on")
477
477
  afc_default = (os.environ.get("GEMCODE_AFC_DEFAULT") or "").strip().lower()
478
478
  if prompt_afc and hasattr(sys.stdin, "isatty") and sys.stdin.isatty():
479
479
  tools_list = list(merged_extra_tools or [])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gemcode
3
- Version: 0.4.10
3
+ Version: 0.4.12
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