hermes-agent/tests/tools
flooryyyy f8d8f045fa feat(kanban): auto-subscribe calling session on kanban_create
When a worker calls kanban_create from inside a session that has a
persistent delivery channel, the originating session is now subscribed
to the new task's completion/block events automatically. The agent
that dispatched the task gets notified instead of having to poll.

- Gateway sessions (telegram/discord/slack): HERMES_SESSION_PLATFORM +
  HERMES_SESSION_CHAT_ID ContextVars, set by the messaging gateway.
- TUI / desktop sessions: HERMES_SESSION_KEY in the subprocess env.
  The TUI notification poller keys on platform='tui' + chat_id=<key>.
- CLI / cron / test: no persistent channel, no subscription.

Gated by kanban.auto_subscribe_on_create in config.yaml (default True).
Disable to mirror pre-feature behaviour — users who want explicit
kanban_notify-subscribe calls per task can set it to false. This
config gate addresses the design concern that got PR #19718 reverted
upstream (unconditional implicit auto-subscribe on tool-driven
kanban_create was too aggressive for orchestrator users).

HERMES_SESSION_ID is intentionally not a fallback channel — it is
set by ACP/agent subprocess telemetry for every invocation, not just
TUI, so treating it as a notification target would auto-subscribe
every CLI session and re-introduce the over-eager behaviour.

The kanban_create response now includes a 'subscribed' bool so
orchestrators can react if subscription failed (e.g. by falling
back to explicit kanban_notify-subscribe or to polling).

Includes 6 tests covering the gateway / TUI / CLI / partial-context /
gated / add_notify_sub-failure paths. All 90 tests in
test_kanban_tools.py pass; 509 broader kanban tests pass.
2026-06-18 14:10:51 -07:00
..
__init__.py
…
conftest.py
…
test_accretion_caps.py
…
test_ansi_strip.py
…
test_approval.py
…
test_approval_heartbeat.py
…
test_approval_plugin_hooks.py
…
test_async_delegation.py feat(delegation): async background subagents via delegate_task(background=true) (#40946) 2026-06-15 13:33:12 -07:00
test_base_environment.py
…
test_blueprints.py
…
test_browser_camofox.py
…
test_browser_camofox_persistence.py
…
test_browser_camofox_state.py
…
test_browser_cdp_override.py
…
test_browser_cdp_tool.py
…
test_browser_chromium_check.py
…
test_browser_cleanup.py
…
test_browser_cloud_fallback.py
…
test_browser_cloud_provider_cache.py
…
test_browser_console.py
…
test_browser_content_none_guard.py
…
test_browser_eval_supervisor_path.py
…
test_browser_hardening.py fix: harden salvaged session and browser improvements 2026-06-15 07:46:34 -07:00
test_browser_homebrew_paths.py
…
test_browser_hybrid_routing.py
…
test_browser_lightpanda.py
…
test_browser_orphan_reaper.py
…
test_browser_secret_exfil.py
…
test_browser_ssrf_local.py
…
test_browser_supervisor.py
…
test_browser_supervisor_healthcheck.py
…
test_budget_config.py
…
test_checkpoint_manager.py
…
test_clarify_gateway.py
…
test_clarify_tool.py
…
test_clipboard.py
…
test_code_execution.py perf(execute-code): stop waiting on idle RPC accept (#45948) 2026-06-13 21:57:15 -07:00
test_code_execution_modes.py
…
test_code_execution_windows_env.py
…
test_command_guards.py fix(approval): honor glob command allowlist entries (#43051) 2026-06-18 12:48:36 +10:00
test_computer_use.py fix(#37878): Address review feedback — fix trailing whitespace and add ANTHROPIC_API_KEY test 2026-06-18 08:53:31 -07:00
test_computer_use_capture_routing.py
…
test_computer_use_vision_routing.py
…
test_config_null_guard.py
…
test_credential_files.py
…
test_credential_pool_env_fallback.py
…
test_cron_approval_mode.py
…
test_cron_prompt_injection.py
…
test_cronjob_tools.py
…
test_cross_profile_guard.py
…
test_daytona_environment.py
…
test_debug_helpers.py
…
test_delegate.py feat(desktop): stream subagent activity into watch windows (#47060) 2026-06-16 14:30:11 -04:00
test_delegate_composite_toolsets.py
…
test_delegate_subagent_timeout_diagnostic.py feat(desktop): stream subagent activity into watch windows (#47060) 2026-06-16 14:30:11 -04:00
test_delegate_toolset_scope.py
…
test_discord_tool.py
…
test_docker_config_migrate.py
…
test_docker_environment.py
…
test_docker_find.py
…
test_docker_orphan_reaper_integration.py
…
test_dockerfile_immutable_install.py fix(update): scope install-method stamp to the code tree, not $HERMES_HOME (#48188) 2026-06-18 14:14:41 +10:00
test_dockerfile_node_modules_perms.py Harden hosted Docker install tree against self-modification (#47490) 2026-06-18 09:09:21 +10:00
test_dockerfile_pid1_reaping.py
…
test_env_passthrough.py
…
test_env_probe.py
…
test_execute_code_approval_cluster.py
…
test_feishu_tools.py
…
test_file_operations.py feat(search_files): headroom compression evaluation report + lossless densification (#47866) 2026-06-17 13:45:25 -07:00
test_file_operations_edge_cases.py
…
test_file_ops_cwd_tracking.py
…
test_file_read_guards.py
…
test_file_staleness.py
…
test_file_state_registry.py
…
test_file_sync.py
…
test_file_sync_back.py
…
test_file_sync_perf.py
…
test_file_tools.py
…
test_file_tools_container_config.py fix(tools): respect session cwd in file tools 2026-06-15 14:00:42 +05:30
test_file_tools_cwd_resolution.py fix(tools): respect session cwd in file tools 2026-06-15 14:00:42 +05:30
test_file_tools_live.py
…
test_file_write_safety.py
…
test_force_dangerous_override.py
…
test_fuzzy_match.py
…
test_gateway_cwd_contract.py
…
test_hardline_blocklist.py
…
test_heartbeat_stale_thresholds.py
…
test_hidden_dir_filter.py
…
test_homeassistant_tool.py
…
test_image_generation.py
…
test_image_generation_artifacts.py
…
test_image_generation_env.py
…
test_image_generation_plugin_dispatch.py
…
test_init_session_cwd_respect.py
…
test_interrupt.py
…
test_kanban_tools.py feat(kanban): auto-subscribe calling session on kanban_create 2026-06-18 14:10:51 -07:00
test_lazy_deps.py
…
test_line_ending_preservation.py
…
test_llm_content_none_guard.py
…
test_local_background_child_hang.py
…
test_local_env_blocklist.py
…
test_local_env_cwd_recovery.py
…
test_local_env_windows_msys.py
…
test_local_interrupt_cleanup.py
…
test_local_shell_init.py
…
test_local_tempdir.py
…
test_managed_browserbase_and_modal.py
…
test_managed_media_gateways.py
…
test_managed_modal_environment.py
…
test_managed_tool_gateway.py
…
test_mcp_cancelled_error_propagation.py
…
test_mcp_capability_gating.py
…
test_mcp_circuit_breaker.py
…
test_mcp_client_cert.py
…
test_mcp_dynamic_discovery.py
…
test_mcp_empty_error_message.py
…
test_mcp_image_content.py
…
test_mcp_invalid_url.py
…
test_mcp_loop_profile_override.py
…
test_mcp_oauth.py fix(mcp): fail fast for noninteractive oauth without tokens 2026-06-15 04:22:07 -07:00
test_mcp_oauth_bidirectional.py
…
test_mcp_oauth_cold_load_expiry.py
…
test_mcp_oauth_integration.py fix(mcp): fail fast for noninteractive oauth without tokens 2026-06-15 04:22:07 -07:00
test_mcp_oauth_manager.py fix(mcp): fail fast for noninteractive oauth without tokens 2026-06-15 04:22:07 -07:00
test_mcp_oauth_metadata.py
…
test_mcp_preflight_content_type.py
…
test_mcp_probe.py fix(mcp): preserve loop during probes 2026-06-14 02:09:45 -07:00
test_mcp_reconnect_signal.py
…
test_mcp_sse_transport.py
…
test_mcp_stability.py fix(mcp): preserve loop during probes 2026-06-14 02:09:45 -07:00
test_mcp_structured_content.py
…
test_mcp_tool.py refactor: remove agent-callable send_message tool (#47856) 2026-06-17 07:11:23 -07:00
test_mcp_tool_401_handling.py
…
test_mcp_tool_issue_948.py
…
test_mcp_tool_session_expired.py
…
test_mcp_utility_capability_gating.py
…
test_memory_tool.py feat(memory): batch operations for single-turn memory updates (#48507) 2026-06-18 10:19:33 -07:00
test_memory_tool_import_fallback.py
…
test_memory_tool_schema.py feat(memory): batch operations for single-turn memory updates (#48507) 2026-06-18 10:19:33 -07:00
test_microsoft_graph_auth.py
…
test_microsoft_graph_client.py
…
test_mixture_of_agents_tool.py
…
test_modal_bulk_upload.py
…
test_modal_sandbox_fixes.py
…
test_modal_snapshot_isolation.py
…
test_notify_on_complete.py fix(process): label background completion causes (#46659) 2026-06-15 07:08:24 -07:00
test_osv_check.py
…
test_parse_env_var.py
…
test_patch_failure_tracking.py
…
test_patch_parser.py
…
test_pr_6656_regressions.py
…
test_process_registry.py fix(process): label background completion causes (#46659) 2026-06-15 07:08:24 -07:00
test_read_extract.py
…
test_read_loop_detection.py feat(search_files): headroom compression evaluation report + lossless densification (#47866) 2026-06-17 13:45:25 -07:00
test_registry.py
…
test_resolve_path.py
…
test_schema_sanitizer.py
…
test_search_budget_truncation.py
…
test_search_error_guard.py
…
test_search_hidden_dirs.py
…
test_send_message_missing_platforms.py
…
test_send_message_react.py
…
test_send_message_target_parse.py fix: harden WhatsApp target alias salvage 2026-06-15 05:51:47 -07:00
test_send_message_telegram_proxy.py
…
test_send_message_tool.py fix(messaging): route WhatsApp group JIDs to the target, not the home DM 2026-06-15 05:51:47 -07:00
test_session_search.py
…
test_shared_container_task_id.py
…
test_signal_media.py
…
test_singularity_preflight.py
…
test_skill_env_passthrough.py
…
test_skill_improvements.py
…
test_skill_manager_tool.py fix(skills): guard recursive skill delete against tree-escape (#46929) 2026-06-15 17:14:59 -07:00
test_skill_provenance.py
…
test_skill_size_limits.py
…
test_skill_usage.py fix(curator): stop restore from matching unrelated skills by name prefix 2026-06-17 06:04:03 -07:00
test_skill_view_path_check.py
…
test_skill_view_traversal.py
…
test_skills_ast_audit.py
…
test_skills_guard.py
…
test_skills_hub.py
…
test_skills_hub_browse_sh.py
…
test_skills_hub_clawhub.py
…
test_skills_list_modified_diff.py test(skills): cover list-modified + diff for bundled skills 2026-06-18 12:26:20 +05:30
test_skills_sync.py fix(skills): refuse SKILLS_DIR root in rmtree guard, not just outside-tree 2026-06-18 08:53:35 -07:00
test_skills_tool.py fix(skills): ignore support docs in skill discovery 2026-06-16 13:08:34 -07:00
test_slash_confirm.py
…
test_spotify_client.py
…
test_ssh_bulk_upload.py
…
test_ssh_environment.py
…
test_stage2_hook_gateway_bootstrap_state.py
…
test_stage2_hook_immutable_install.py Harden hosted Docker install tree against self-modification (#47490) 2026-06-18 09:09:21 +10:00
test_stage2_hook_install_method_stamp.py fix(update): scope install-method stamp to the code tree, not $HERMES_HOME (#48188) 2026-06-18 14:14:41 +10:00
test_stage2_hook_log_dir_seed.py fix(s6): make profile gateway log parent writable (#46291) 2026-06-15 13:47:05 +10:00
test_stage2_hook_puid_pgid.py
…
test_stage2_hook_toplevel_chown.py
…
test_stage2_hook_unraid_uid.py
…
test_stage2_hook_user_flag_guard.py
…
test_subprocess_stdin_guard.py
…
test_symlink_prefix_confusion.py
…
test_sync_back_backends.py
…
test_terminal_compound_background.py
…
test_terminal_config_env_sync.py
…
test_terminal_exit_semantics.py
…
test_terminal_foreground_timeout_cap.py
…
test_terminal_none_command_guard.py
…
test_terminal_output_transform_hook.py
…
test_terminal_requirements.py
…
test_terminal_task_cwd.py
…
test_terminal_timeout_output.py
…
test_terminal_tool.py
…
test_terminal_tool_pty_fallback.py
…
test_terminal_tool_requirements.py
…
test_threaded_process_handle.py
…
test_threat_patterns.py
…
test_tirith_security.py
…
test_todo_tool.py
…
test_tool_backend_helpers.py
…
test_tool_output_limits.py
…
test_tool_result_storage.py
…
test_tool_search.py
…
test_transcription.py
…
test_transcription_command_providers.py
…
test_transcription_dotenv_fallback.py
…
test_transcription_plugin_dispatch.py
…
test_transcription_tools.py
…
test_tts_command_providers.py
…
test_tts_dotenv_fallback.py
…
test_tts_gemini.py
…
test_tts_kittentts.py
…
test_tts_max_text_length.py
…
test_tts_mistral.py
…
test_tts_opus_routing.py
…
test_tts_path_traversal.py
…
test_tts_piper.py
…
test_tts_plugin_dispatch.py
…
test_tts_speed.py
…
test_tts_xai_speech_tags.py
…
test_url_safety.py
…
test_video_analyze.py
…
test_video_generation_dispatch.py
…
test_video_generation_dynamic_schema.py
…
test_video_generation_tool_surface_matrix.py
…
test_vision_native_fast_path.py
…
test_vision_tools.py
…
test_voice_cli_integration.py
…
test_voice_mode.py
…
test_watch_patterns.py
…
test_web_providers.py revert(web): remove keyless Parallel search fallback (#46350) 2026-06-14 16:47:57 -07:00
test_web_providers_brave_free.py
…
test_web_providers_ddgs.py revert(web): remove keyless Parallel search fallback (#46350) 2026-06-14 16:47:57 -07:00
test_web_providers_searxng.py revert(web): remove keyless Parallel search fallback (#46350) 2026-06-14 16:47:57 -07:00
test_web_providers_xai.py
…
test_web_tools_config.py revert(web): remove keyless Parallel search fallback (#46350) 2026-06-14 16:47:57 -07:00
test_web_tools_tavily.py
…
test_website_policy.py
…
test_windows_compat.py
…
test_windows_native_support.py
…
test_write_approval.py
…
test_write_deny.py fix(file-safety): relax user-write deny policy (#45947) 2026-06-14 02:07:32 -07:00
test_x_search_tool.py
…
test_yolo_mode.py
…
test_zombie_process_cleanup.py
…