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.
- {gemcode-0.4.10/src/gemcode.egg-info → gemcode-0.4.12}/PKG-INFO +1 -1
- {gemcode-0.4.10 → gemcode-0.4.12}/pyproject.toml +1 -1
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/agent_habits.py +5 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/agent_mesh.py +15 -5
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/fleet_reports.py +16 -9
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/repl_slash.py +2 -2
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/session_runtime.py +4 -4
- {gemcode-0.4.10 → gemcode-0.4.12/src/gemcode.egg-info}/PKG-INFO +1 -1
- {gemcode-0.4.10 → gemcode-0.4.12}/LICENSE +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/MANIFEST.in +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/README.md +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/setup.cfg +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/__init__.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/__main__.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/a2a_bridge.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/agent.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/agent_intelligence.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/agent_triggers.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/audit.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/autocompact.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/automations.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/autotune.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/callbacks.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/capability_routing.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/checkpoints.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/cli.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/codebase_awareness.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/compaction.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/computer_use/__init__.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/computer_use/browser_computer.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/config.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/context_budget.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/context_warning.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/credentials.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/curated_memory.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/delegation_learning.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/dynamic_policy.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/evals/harness.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/event_bus.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/hitl_session.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/hooks.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/ide_protocol.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/ide_stdio.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/intent_classifier.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/interactions.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/invoke.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/kaira_client.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/kaira_daemon.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/kaira_ipc.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/kaira_job_store.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/learning.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/limits.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/live_audio_engine.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/logging_config.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/mcp_loader.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/memory/__init__.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/memory/embedding_memory_service.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/memory/file_memory_service.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/modality_tools.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/model_errors.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/model_routing.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/multimodal_input.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/openapi_loader.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/org.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/output_styles.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/paths.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/permissions.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/plugins/__init__.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/plugins/terminal_hooks_plugin.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/plugins/tool_recovery_plugin.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/policy_profile.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/pricing.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/prompt_suggestions.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/__init__.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/config.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/deps.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/engine.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/stop_hooks.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/token_budget.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query/transitions.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/query_sanitizer.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/refine.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/repl_commands.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/review_agent.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/rules.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/self_healing.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/session_store.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/session_summariser.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/skills.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/slash_commands.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/thinking.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tool_prompt_manifest.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tool_registry.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tool_result_store.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tool_synthesis.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/__init__.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/automations_tools.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/bash.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/browser.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/compress_memory.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/curated_memory.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/edit.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/filesystem.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/notebook.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/notes.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/org_tools.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/repo_map.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/search.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/shell.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/shell_gate.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/skills.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/subtask.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/tasks.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/think.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/todo.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/user_choice.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/veomem_tools.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/web.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools/web_search.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tools_inspector.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/trust.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tui/input_handler.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tui/scrollback.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tui/spinner.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tui/welcome_banner.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/tui/welcome_rich.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/veomem_bridge.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/version.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/vertex.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/wal.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/web/__init__.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/web/sse_adapter.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/web/terminal_repl.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/web/web_sse_compat.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode/workspace_hints.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode.egg-info/SOURCES.txt +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode.egg-info/dependency_links.txt +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode.egg-info/entry_points.txt +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode.egg-info/requires.txt +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/src/gemcode.egg-info/top_level.txt +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_add_dir.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_agent_habits.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_agent_instruction.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_agent_mesh.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_autocompact.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_automations.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_capability_routing.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_checkpoint_diff_command.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_cli_init.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_compress_memory_tool.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_computer_use_permissions.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_context_budget.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_context_warning.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_credentials.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_eval_harness_layout.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_event_bus.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_fleet_reports.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_ide_stdio_attachments.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_interactive_permission_ask.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_kaira_ipc_paths.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_kaira_scheduler.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_modality_tools.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_model_error_retry.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_model_errors.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_model_routing.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_multimodal_input.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_output_styles_and_rules.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_paths.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_permissions.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_prompt_suggestions.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_repl_commands.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_repl_slash.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_session_runtime_cache.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_skills.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_slash_commands.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_slash_completion_registry.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_thinking_config.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_token_budget.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_tool_context_circulation.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_tools.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_tools_inspector.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_web_sse_adapter.py +0 -0
- {gemcode-0.4.10 → gemcode-0.4.12}/tests/test_workspace_hints.py +0 -0
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
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
|
|
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
|
|
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
|
-
#
|
|
470
|
-
#
|
|
471
|
-
#
|
|
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", "
|
|
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 [])
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|