gemcode 0.4.3__tar.gz → 0.4.4__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.3/src/gemcode.egg-info → gemcode-0.4.4}/PKG-INFO +1 -1
- {gemcode-0.4.3 → gemcode-0.4.4}/pyproject.toml +1 -1
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/agent_habits.py +11 -11
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/agent_triggers.py +2 -4
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/checkpoints.py +1 -1
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/__init__.py +2 -2
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/automations_tools.py +3 -3
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/filesystem.py +3 -3
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/skills.py +1 -1
- {gemcode-0.4.3 → gemcode-0.4.4/src/gemcode.egg-info}/PKG-INFO +1 -1
- {gemcode-0.4.3 → gemcode-0.4.4}/LICENSE +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/MANIFEST.in +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/README.md +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/setup.cfg +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/__init__.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/__main__.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/a2a_bridge.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/agent.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/agent_intelligence.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/agent_mesh.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/audit.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/autocompact.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/automations.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/autotune.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/callbacks.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/capability_routing.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/cli.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/codebase_awareness.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/compaction.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/computer_use/__init__.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/computer_use/browser_computer.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/config.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/context_budget.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/context_warning.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/credentials.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/curated_memory.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/delegation_learning.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/dynamic_policy.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/evals/harness.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/event_bus.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/fleet_reports.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/hitl_session.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/hooks.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/ide_protocol.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/ide_stdio.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/intent_classifier.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/interactions.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/invoke.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/kaira_client.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/kaira_daemon.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/kaira_ipc.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/kaira_job_store.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/learning.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/limits.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/live_audio_engine.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/logging_config.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/mcp_loader.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/memory/__init__.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/memory/embedding_memory_service.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/memory/file_memory_service.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/modality_tools.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/model_errors.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/model_routing.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/multimodal_input.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/openapi_loader.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/org.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/output_styles.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/paths.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/permissions.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/plugins/__init__.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/plugins/terminal_hooks_plugin.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/plugins/tool_recovery_plugin.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/policy_profile.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/pricing.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/prompt_suggestions.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/query/__init__.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/query/config.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/query/deps.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/query/engine.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/query/stop_hooks.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/query/token_budget.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/query/transitions.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/query_sanitizer.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/refine.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/repl_commands.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/repl_slash.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/review_agent.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/rules.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/self_healing.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/session_runtime.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/session_store.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/session_summariser.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/skills.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/slash_commands.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/thinking.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tool_prompt_manifest.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tool_registry.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tool_result_store.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tool_synthesis.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/bash.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/browser.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/compress_memory.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/curated_memory.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/edit.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/notebook.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/notes.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/org_tools.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/repo_map.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/search.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/shell.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/shell_gate.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/subtask.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/tasks.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/think.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/todo.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/user_choice.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/veomem_tools.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/web.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools/web_search.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tools_inspector.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/trust.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tui/input_handler.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tui/scrollback.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tui/spinner.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tui/welcome_banner.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/tui/welcome_rich.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/veomem_bridge.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/version.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/vertex.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/wal.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/web/__init__.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/web/sse_adapter.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/web/terminal_repl.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/web/web_sse_compat.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode/workspace_hints.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode.egg-info/SOURCES.txt +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode.egg-info/dependency_links.txt +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode.egg-info/entry_points.txt +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode.egg-info/requires.txt +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/src/gemcode.egg-info/top_level.txt +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_add_dir.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_agent_habits.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_agent_instruction.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_agent_mesh.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_autocompact.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_automations.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_capability_routing.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_checkpoint_diff_command.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_cli_init.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_compress_memory_tool.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_computer_use_permissions.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_context_budget.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_context_warning.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_credentials.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_eval_harness_layout.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_event_bus.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_fleet_reports.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_ide_stdio_attachments.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_interactive_permission_ask.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_kaira_ipc_paths.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_kaira_scheduler.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_modality_tools.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_model_error_retry.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_model_errors.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_model_routing.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_multimodal_input.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_output_styles_and_rules.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_paths.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_permissions.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_prompt_suggestions.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_repl_commands.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_repl_slash.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_session_runtime_cache.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_skills.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_slash_commands.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_slash_completion_registry.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_thinking_config.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_token_budget.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_tool_context_circulation.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_tools.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_tools_inspector.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_web_sse_adapter.py +0 -0
- {gemcode-0.4.3 → gemcode-0.4.4}/tests/test_workspace_hints.py +0 -0
|
@@ -308,12 +308,12 @@ def make_habits_tools(cfg: GemCodeConfig) -> list:
|
|
|
308
308
|
name: str,
|
|
309
309
|
agent: str,
|
|
310
310
|
prompt: str,
|
|
311
|
-
every_minutes: int
|
|
312
|
-
every_seconds: int
|
|
313
|
-
daily_at: str
|
|
314
|
-
cron: str
|
|
311
|
+
every_minutes: int = 0,
|
|
312
|
+
every_seconds: int = 0,
|
|
313
|
+
daily_at: str = "",
|
|
314
|
+
cron: str = "",
|
|
315
315
|
priority: int = 0,
|
|
316
|
-
max_runs: int
|
|
316
|
+
max_runs: int = 0,
|
|
317
317
|
) -> dict:
|
|
318
318
|
"""
|
|
319
319
|
Add a recurring habit for an agent.
|
|
@@ -351,12 +351,12 @@ def make_habits_tools(cfg: GemCodeConfig) -> list:
|
|
|
351
351
|
|
|
352
352
|
# Determine schedule
|
|
353
353
|
secs = None
|
|
354
|
-
if every_minutes:
|
|
354
|
+
if every_minutes and every_minutes > 0:
|
|
355
355
|
secs = int(every_minutes) * 60
|
|
356
|
-
elif every_seconds:
|
|
356
|
+
elif every_seconds and every_seconds > 0:
|
|
357
357
|
secs = int(every_seconds)
|
|
358
358
|
|
|
359
|
-
if not secs and not daily_at and not cron:
|
|
359
|
+
if not secs and not daily_at.strip() and not cron.strip():
|
|
360
360
|
return {"ok": False, "error": "must specify one of: every_minutes, every_seconds, daily_at, or cron"}
|
|
361
361
|
|
|
362
362
|
habits = load_habits(cfg.project_root)
|
|
@@ -368,10 +368,10 @@ def make_habits_tools(cfg: GemCodeConfig) -> list:
|
|
|
368
368
|
prompt=prompt.strip(),
|
|
369
369
|
enabled=True,
|
|
370
370
|
every_seconds=secs,
|
|
371
|
-
daily_at=daily_at,
|
|
372
|
-
cron=cron,
|
|
371
|
+
daily_at=daily_at.strip() or None,
|
|
372
|
+
cron=cron.strip() or None,
|
|
373
373
|
priority=priority,
|
|
374
|
-
max_runs=max_runs,
|
|
374
|
+
max_runs=max_runs if max_runs > 0 else None,
|
|
375
375
|
))
|
|
376
376
|
save_habits(cfg.project_root, habits)
|
|
377
377
|
return {"ok": True, "name": nm, "agent": agent, "schedule": daily_at or cron or f"every {secs}s"}
|
|
@@ -286,27 +286,25 @@ def make_trigger_tools(cfg: GemCodeConfig) -> list:
|
|
|
286
286
|
agent: str,
|
|
287
287
|
on_topic: str,
|
|
288
288
|
action: str,
|
|
289
|
-
when: dict | None = None,
|
|
290
289
|
cooldown_s: float = 60,
|
|
291
290
|
) -> dict:
|
|
292
291
|
"""
|
|
293
292
|
Add a new self-trigger rule for an agent.
|
|
294
293
|
|
|
295
|
-
When a bus event matching `on_topic`
|
|
294
|
+
When a bus event matching `on_topic` arrives,
|
|
296
295
|
the specified agent will automatically activate with the given `action` prompt.
|
|
297
296
|
|
|
298
297
|
Args:
|
|
299
298
|
agent: Org member name to activate.
|
|
300
299
|
on_topic: Bus topic to watch (e.g., "job.report", "org.report").
|
|
301
300
|
action: Prompt to send to the agent when triggered.
|
|
302
|
-
when: Optional payload conditions (e.g., {"status": "failed"}).
|
|
303
301
|
cooldown_s: Minimum seconds between activations (default 60).
|
|
304
302
|
"""
|
|
305
303
|
triggers = load_triggers(cfg.project_root)
|
|
306
304
|
triggers.append(AgentTrigger(
|
|
307
305
|
agent=agent.strip(),
|
|
308
306
|
on_topic=on_topic.strip(),
|
|
309
|
-
when=
|
|
307
|
+
when={},
|
|
310
308
|
action=action.strip(),
|
|
311
309
|
cooldown_s=float(cooldown_s),
|
|
312
310
|
enabled=True,
|
|
@@ -119,7 +119,7 @@ def list_checkpoints(project_root: Path, limit: int = 20) -> list[dict[str, Any]
|
|
|
119
119
|
return cps
|
|
120
120
|
|
|
121
121
|
|
|
122
|
-
def undo_checkpoint(project_root: Path, checkpoint_id: str
|
|
122
|
+
def undo_checkpoint(project_root: Path, checkpoint_id: str = "") -> dict[str, Any]:
|
|
123
123
|
d = _checkpoints_dir(project_root)
|
|
124
124
|
if not d.is_dir():
|
|
125
125
|
return {"error": "no_checkpoints"}
|
|
@@ -123,9 +123,9 @@ def build_function_tools(cfg: GemCodeConfig, *, include_subtask: bool = True) ->
|
|
|
123
123
|
"""List recent checkpoints created by mutating tools."""
|
|
124
124
|
return {"checkpoints": _list_checkpoints(cfg.project_root, limit=limit)}
|
|
125
125
|
|
|
126
|
-
def checkpoint_undo(checkpoint_id: str
|
|
126
|
+
def checkpoint_undo(checkpoint_id: str = "") -> dict:
|
|
127
127
|
"""Undo the most recent checkpoint (or a specific checkpoint_id)."""
|
|
128
|
-
return _undo_checkpoint(cfg.project_root, checkpoint_id=checkpoint_id)
|
|
128
|
+
return _undo_checkpoint(cfg.project_root, checkpoint_id=checkpoint_id or None)
|
|
129
129
|
|
|
130
130
|
checkpoints_list.__name__ = "checkpoints_list"
|
|
131
131
|
checkpoint_undo.__name__ = "checkpoint_undo"
|
|
@@ -47,9 +47,9 @@ def make_automations_tools(cfg: GemCodeConfig) -> list:
|
|
|
47
47
|
priority: int = 0,
|
|
48
48
|
trigger_kind: str = "nightly",
|
|
49
49
|
at_hhmm: str = "02:00",
|
|
50
|
-
every_seconds: int
|
|
51
|
-
cron: str
|
|
52
|
-
session_id: str
|
|
50
|
+
every_seconds: int = 0,
|
|
51
|
+
cron: str = "",
|
|
52
|
+
session_id: str = "",
|
|
53
53
|
overwrite: bool = False,
|
|
54
54
|
) -> dict[str, Any]:
|
|
55
55
|
"""
|
|
@@ -39,7 +39,7 @@ def make_filesystem_tools(cfg: GemCodeConfig):
|
|
|
39
39
|
path: str,
|
|
40
40
|
max_bytes: int = 80_000,
|
|
41
41
|
start_line: int = 1,
|
|
42
|
-
end_line: int
|
|
42
|
+
end_line: int = 0,
|
|
43
43
|
) -> dict:
|
|
44
44
|
"""
|
|
45
45
|
Read a text file relative to the project root.
|
|
@@ -79,11 +79,11 @@ def make_filesystem_tools(cfg: GemCodeConfig):
|
|
|
79
79
|
text_full = data.decode("utf-8", errors="replace")
|
|
80
80
|
|
|
81
81
|
# Apply line range filter when requested
|
|
82
|
-
if start_line != 1 or end_line
|
|
82
|
+
if start_line != 1 or end_line > 0:
|
|
83
83
|
lines = text_full.splitlines(keepends=True)
|
|
84
84
|
total_lines = len(lines)
|
|
85
85
|
s = max(1, start_line) - 1 # convert to 0-indexed
|
|
86
|
-
e = end_line if end_line
|
|
86
|
+
e = end_line if end_line > 0 else total_lines
|
|
87
87
|
e = min(e, total_lines)
|
|
88
88
|
sliced = lines[s:e]
|
|
89
89
|
text_full = "".join(sliced)
|
|
@@ -30,7 +30,7 @@ def make_skill_tools(cfg: GemCodeConfig) -> list:
|
|
|
30
30
|
]
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
def load_skill_tool(name: str, arguments: str = "", session_id: str
|
|
33
|
+
def load_skill_tool(name: str, arguments: str = "", session_id: str = "") -> dict[str, Any]:
|
|
34
34
|
"""
|
|
35
35
|
Load and expand a GemSkill's instructions for the given arguments.
|
|
36
36
|
|
|
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
|