gitextract_p24d3iig/ ├── .claude/ │ ├── commands/ │ │ ├── add-sse-event.md │ │ ├── add-tool.md │ │ ├── fix-issue.md │ │ ├── pr-shepherd.md │ │ ├── respond-pr.md │ │ ├── review-crate.md │ │ ├── review-pr.md │ │ ├── ship.md │ │ ├── trace.md │ │ ├── triage-issues.md │ │ └── triage-prs.md │ └── rules/ │ ├── database.md │ ├── review-discipline.md │ ├── safety-and-sandbox.md │ ├── skills.md │ ├── testing.md │ └── tools.md ├── .dockerignore ├── .env.example ├── .gitattributes ├── .githooks/ │ ├── pre-commit │ └── pre-push ├── .github/ │ ├── labeler.yml │ ├── pull_request_template.md │ ├── scripts/ │ │ ├── create-labels.sh │ │ ├── pr-body-utils.sh │ │ ├── pr-labeler.sh │ │ ├── update-release-plz-body.sh │ │ └── update-staging-promotion-body.sh │ └── workflows/ │ ├── claude-review.yml │ ├── code_style.yml │ ├── coverage.yml │ ├── e2e.yml │ ├── pr-label-classify.yml │ ├── pr-label-scope.yml │ ├── regression-test-check.yml │ ├── release-plz-batch-summary.yml │ ├── release-plz.yml │ ├── release.yml │ ├── staging-ci.yml │ ├── staging-promotion-metadata.yml │ └── test.yml ├── .gitignore ├── AGENTS.md ├── CHANGELOG.md ├── CLAUDE.md ├── CONTRIBUTING.md ├── COVERAGE_PLAN.md ├── Cargo.toml ├── Dockerfile ├── Dockerfile.test ├── Dockerfile.worker ├── FEATURE_PARITY.md ├── LICENSE-APACHE ├── LICENSE-MIT ├── README.ja.md ├── README.md ├── README.ru.md ├── README.zh-CN.md ├── benches/ │ ├── safety_check.rs │ └── safety_pipeline.rs ├── build.rs ├── channels-src/ │ ├── discord/ │ │ ├── Cargo.toml │ │ ├── README.md │ │ ├── build.sh │ │ ├── discord.capabilities.json │ │ └── src/ │ │ └── lib.rs │ ├── feishu/ │ │ ├── Cargo.toml │ │ ├── build.sh │ │ ├── feishu.capabilities.json │ │ └── src/ │ │ └── lib.rs │ ├── slack/ │ │ ├── Cargo.toml │ │ ├── build.sh │ │ ├── slack.capabilities.json │ │ └── src/ │ │ └── lib.rs │ ├── telegram/ │ │ ├── Cargo.toml │ │ ├── build.sh │ │ ├── src/ │ │ │ └── lib.rs │ │ └── telegram.capabilities.json │ └── whatsapp/ │ ├── Cargo.toml │ ├── build.sh │ ├── src/ │ │ └── lib.rs │ └── whatsapp.capabilities.json ├── clippy.toml ├── codecov.yml ├── crates/ │ └── ironclaw_safety/ │ ├── Cargo.toml │ ├── fuzz/ │ │ ├── Cargo.toml │ │ ├── README.md │ │ ├── corpus/ │ │ │ ├── fuzz_config_env/ │ │ │ │ ├── all_attacks │ │ │ │ ├── clean │ │ │ │ └── injection_with_secret │ │ │ ├── fuzz_credential_detect/ │ │ │ │ ├── api_key_header │ │ │ │ ├── array_headers │ │ │ │ ├── auth_header │ │ │ │ ├── bearer_value │ │ │ │ ├── empty_object │ │ │ │ ├── invalid_url │ │ │ │ ├── no_creds │ │ │ │ ├── not_json │ │ │ │ ├── safe_headers │ │ │ │ ├── url_access_token │ │ │ │ ├── url_api_key │ │ │ │ └── url_userinfo │ │ │ ├── fuzz_leak_detector/ │ │ │ │ ├── anthropic_key │ │ │ │ ├── aws_key │ │ │ │ ├── bearer_token │ │ │ │ ├── clean_text │ │ │ │ ├── github_pat │ │ │ │ ├── github_token │ │ │ │ ├── hex_64 │ │ │ │ ├── multiple_secrets │ │ │ │ ├── near_miss_short │ │ │ │ ├── openai_key │ │ │ │ ├── pem_key │ │ │ │ ├── sendgrid_key │ │ │ │ ├── slack_token │ │ │ │ ├── ssh_key │ │ │ │ └── stripe_key │ │ │ ├── fuzz_safety_sanitizer/ │ │ │ │ ├── base64_payload │ │ │ │ ├── clean_text │ │ │ │ ├── eval_exec │ │ │ │ ├── ignore_previous │ │ │ │ ├── inst_tokens │ │ │ │ ├── markdown_code │ │ │ │ ├── mixed_case │ │ │ │ ├── null_bytes │ │ │ │ ├── role_markers │ │ │ │ ├── special_tokens │ │ │ │ ├── system_injection │ │ │ │ └── unicode_mixed │ │ │ └── fuzz_safety_validator/ │ │ │ ├── empty │ │ │ ├── excessive_whitespace │ │ │ ├── json_array │ │ │ ├── json_deep │ │ │ ├── json_nested │ │ │ ├── long_input │ │ │ ├── normal_input │ │ │ ├── null_bytes │ │ │ └── repetition │ │ └── fuzz_targets/ │ │ ├── fuzz_config_env.rs │ │ ├── fuzz_credential_detect.rs │ │ ├── fuzz_leak_detector.rs │ │ ├── fuzz_safety_sanitizer.rs │ │ └── fuzz_safety_validator.rs │ └── src/ │ ├── credential_detect.rs │ ├── leak_detector.rs │ ├── lib.rs │ ├── policy.rs │ ├── sanitizer.rs │ └── validator.rs ├── deny.toml ├── deploy/ │ ├── cloud-sql-proxy.service │ ├── env.example │ ├── ironclaw.service │ └── setup.sh ├── docker/ │ └── sandbox.Dockerfile ├── docker-compose.yml ├── docs/ │ ├── BUILDING_CHANNELS.md │ ├── LLM_PROVIDERS.md │ ├── TELEGRAM_SETUP.md │ ├── plans/ │ │ ├── 2026-02-24-automated-qa.md │ │ ├── 2026-02-24-e2e-infrastructure-design.md │ │ └── 2026-02-24-e2e-infrastructure.md │ └── smart-routing-spec.md ├── fuzz/ │ ├── Cargo.toml │ ├── README.md │ ├── corpus/ │ │ └── fuzz_tool_params/ │ │ └── .gitkeep │ └── fuzz_targets/ │ └── fuzz_tool_params.rs ├── ironclaw.bash ├── ironclaw.fish ├── ironclaw.zsh ├── migrations/ │ ├── V10__wasm_versioning.sql │ ├── V11__conversation_unique_indexes.sql │ ├── V12__job_token_budget.sql │ ├── V13__owner_scope_notify_targets.sql │ ├── V1__initial.sql │ ├── V2__wasm_secure_api.sql │ ├── V3__tool_failures.sql │ ├── V4__sandbox_columns.sql │ ├── V5__claude_code.sql │ ├── V6__routines.sql │ ├── V7__rename_events.sql │ ├── V8__settings.sql │ └── V9__flexible_embedding_dimension.sql ├── providers.json ├── registry/ │ ├── _bundles.json │ ├── channels/ │ │ ├── discord.json │ │ ├── feishu.json │ │ ├── slack.json │ │ ├── telegram.json │ │ └── whatsapp.json │ ├── mcp-servers/ │ │ ├── asana.json │ │ ├── cloudflare.json │ │ ├── intercom.json │ │ ├── linear.json │ │ ├── notion.json │ │ ├── sentry.json │ │ └── stripe.json │ └── tools/ │ ├── github.json │ ├── gmail.json │ ├── google-calendar.json │ ├── google-docs.json │ ├── google-drive.json │ ├── google-sheets.json │ ├── google-slides.json │ ├── llm-context.json │ ├── slack.json │ ├── telegram.json │ └── web-search.json ├── release-plz.toml ├── scripts/ │ ├── build-all.sh │ ├── build-wasm-extensions.sh │ ├── check-boundaries.sh │ ├── check-version-bumps.sh │ ├── check_no_panics.py │ ├── ci/ │ │ ├── delta_lint.sh │ │ ├── quality_gate.sh │ │ └── quality_gate_strict.sh │ ├── commit-msg-regression.sh │ ├── coverage.sh │ ├── dev-setup.sh │ ├── pre-commit-safety.sh │ └── test-ci-artifact-naming.sh ├── skills/ │ ├── delegation/ │ │ └── SKILL.md │ ├── ironclaw-workflow-orchestrator/ │ │ ├── SKILL.md │ │ ├── agents/ │ │ │ └── openai.yaml │ │ └── references/ │ │ └── workflow-routines.md │ ├── local-test/ │ │ └── SKILL.md │ ├── review-checklist/ │ │ └── SKILL.md │ ├── routine-advisor/ │ │ └── SKILL.md │ └── web-ui-test/ │ └── SKILL.md ├── src/ │ ├── NETWORK_SECURITY.md │ ├── agent/ │ │ ├── CLAUDE.md │ │ ├── agent_loop.rs │ │ ├── agentic_loop.rs │ │ ├── attachments.rs │ │ ├── commands.rs │ │ ├── compaction.rs │ │ ├── context_monitor.rs │ │ ├── cost_guard.rs │ │ ├── dispatcher.rs │ │ ├── heartbeat.rs │ │ ├── job_monitor.rs │ │ ├── mod.rs │ │ ├── router.rs │ │ ├── routine.rs │ │ ├── routine_engine.rs │ │ ├── scheduler.rs │ │ ├── self_repair.rs │ │ ├── session.rs │ │ ├── session_manager.rs │ │ ├── submission.rs │ │ ├── task.rs │ │ ├── thread_ops.rs │ │ └── undo.rs │ ├── app.rs │ ├── boot_screen.rs │ ├── bootstrap.rs │ ├── channels/ │ │ ├── channel.rs │ │ ├── http.rs │ │ ├── manager.rs │ │ ├── mod.rs │ │ ├── relay/ │ │ │ ├── channel.rs │ │ │ ├── client.rs │ │ │ ├── mod.rs │ │ │ └── webhook.rs │ │ ├── repl.rs │ │ ├── signal.rs │ │ ├── wasm/ │ │ │ ├── bundled.rs │ │ │ ├── capabilities.rs │ │ │ ├── error.rs │ │ │ ├── host.rs │ │ │ ├── loader.rs │ │ │ ├── mod.rs │ │ │ ├── router.rs │ │ │ ├── runtime.rs │ │ │ ├── schema.rs │ │ │ ├── setup.rs │ │ │ ├── signature.rs │ │ │ ├── storage.rs │ │ │ ├── telegram_host_config.rs │ │ │ └── wrapper.rs │ │ ├── web/ │ │ │ ├── CLAUDE.md │ │ │ ├── auth.rs │ │ │ ├── handlers/ │ │ │ │ ├── chat.rs │ │ │ │ ├── extensions.rs │ │ │ │ ├── jobs.rs │ │ │ │ ├── memory.rs │ │ │ │ ├── mod.rs │ │ │ │ ├── routines.rs │ │ │ │ ├── settings.rs │ │ │ │ ├── skills.rs │ │ │ │ └── static_files.rs │ │ │ ├── log_layer.rs │ │ │ ├── mod.rs │ │ │ ├── openai_compat.rs │ │ │ ├── server.rs │ │ │ ├── sse.rs │ │ │ ├── static/ │ │ │ │ ├── app.js │ │ │ │ ├── i18n/ │ │ │ │ │ ├── en.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── zh-CN.js │ │ │ │ ├── i18n-app.js │ │ │ │ ├── index.html │ │ │ │ ├── style.css │ │ │ │ └── theme-init.js │ │ │ ├── test_helpers.rs │ │ │ ├── types.rs │ │ │ ├── util.rs │ │ │ └── ws.rs │ │ └── webhook_server.rs │ ├── cli/ │ │ ├── channels.rs │ │ ├── completion.rs │ │ ├── config.rs │ │ ├── doctor.rs │ │ ├── import.rs │ │ ├── logs.rs │ │ ├── mcp.rs │ │ ├── memory.rs │ │ ├── mod.rs │ │ ├── oauth_defaults.rs │ │ ├── pairing.rs │ │ ├── registry.rs │ │ ├── routines.rs │ │ ├── service.rs │ │ ├── skills.rs │ │ ├── snapshots/ │ │ │ ├── ironclaw__cli__tests__help_output.snap │ │ │ ├── ironclaw__cli__tests__help_output_without_import.snap │ │ │ ├── ironclaw__cli__tests__long_help_output.snap │ │ │ └── ironclaw__cli__tests__long_help_output_without_import.snap │ │ ├── status.rs │ │ └── tool.rs │ ├── config/ │ │ ├── agent.rs │ │ ├── builder.rs │ │ ├── channels.rs │ │ ├── database.rs │ │ ├── embeddings.rs │ │ ├── heartbeat.rs │ │ ├── helpers.rs │ │ ├── hygiene.rs │ │ ├── llm.rs │ │ ├── mod.rs │ │ ├── relay.rs │ │ ├── routines.rs │ │ ├── safety.rs │ │ ├── sandbox.rs │ │ ├── search.rs │ │ ├── secrets.rs │ │ ├── skills.rs │ │ ├── transcription.rs │ │ ├── tunnel.rs │ │ └── wasm.rs │ ├── context/ │ │ ├── fallback.rs │ │ ├── manager.rs │ │ ├── memory.rs │ │ ├── mod.rs │ │ └── state.rs │ ├── db/ │ │ ├── CLAUDE.md │ │ ├── libsql/ │ │ │ ├── conversations.rs │ │ │ ├── jobs.rs │ │ │ ├── mod.rs │ │ │ ├── routines.rs │ │ │ ├── sandbox.rs │ │ │ ├── settings.rs │ │ │ ├── tool_failures.rs │ │ │ └── workspace.rs │ │ ├── libsql_migrations.rs │ │ ├── mod.rs │ │ ├── postgres.rs │ │ └── tls.rs │ ├── document_extraction/ │ │ ├── extractors.rs │ │ └── mod.rs │ ├── error.rs │ ├── estimation/ │ │ ├── cost.rs │ │ ├── learner.rs │ │ ├── mod.rs │ │ ├── time.rs │ │ └── value.rs │ ├── evaluation/ │ │ ├── metrics.rs │ │ ├── mod.rs │ │ └── success.rs │ ├── extensions/ │ │ ├── discovery.rs │ │ ├── manager.rs │ │ ├── mod.rs │ │ └── registry.rs │ ├── history/ │ │ ├── analytics.rs │ │ ├── mod.rs │ │ └── store.rs │ ├── hooks/ │ │ ├── bootstrap.rs │ │ ├── bundled.rs │ │ ├── hook.rs │ │ ├── mod.rs │ │ └── registry.rs │ ├── import/ │ │ ├── mod.rs │ │ └── openclaw/ │ │ ├── credentials.rs │ │ ├── history.rs │ │ ├── memory.rs │ │ ├── mod.rs │ │ ├── reader.rs │ │ └── settings.rs │ ├── lib.rs │ ├── llm/ │ │ ├── CLAUDE.md │ │ ├── anthropic_oauth.rs │ │ ├── bedrock.rs │ │ ├── circuit_breaker.rs │ │ ├── codex_auth.rs │ │ ├── codex_chatgpt.rs │ │ ├── codex_test_helpers.rs │ │ ├── config.rs │ │ ├── costs.rs │ │ ├── error.rs │ │ ├── failover.rs │ │ ├── image_models.rs │ │ ├── mod.rs │ │ ├── models.rs │ │ ├── nearai_chat.rs │ │ ├── oauth_helpers.rs │ │ ├── openai_codex_provider.rs │ │ ├── openai_codex_session.rs │ │ ├── provider.rs │ │ ├── reasoning.rs │ │ ├── reasoning_models.rs │ │ ├── recording.rs │ │ ├── registry.rs │ │ ├── response_cache.rs │ │ ├── retry.rs │ │ ├── rig_adapter.rs │ │ ├── session.rs │ │ ├── smart_routing.rs │ │ ├── token_refreshing.rs │ │ └── vision_models.rs │ ├── main.rs │ ├── observability/ │ │ ├── log.rs │ │ ├── mod.rs │ │ ├── multi.rs │ │ ├── noop.rs │ │ └── traits.rs │ ├── orchestrator/ │ │ ├── api.rs │ │ ├── auth.rs │ │ ├── job_manager.rs │ │ ├── mod.rs │ │ └── reaper.rs │ ├── pairing/ │ │ ├── mod.rs │ │ └── store.rs │ ├── profile.rs │ ├── registry/ │ │ ├── artifacts.rs │ │ ├── catalog.rs │ │ ├── embedded.rs │ │ ├── installer.rs │ │ ├── manifest.rs │ │ └── mod.rs │ ├── safety/ │ │ └── mod.rs │ ├── sandbox/ │ │ ├── config.rs │ │ ├── container.rs │ │ ├── detect.rs │ │ ├── error.rs │ │ ├── manager.rs │ │ ├── mod.rs │ │ └── proxy/ │ │ ├── allowlist.rs │ │ ├── http.rs │ │ ├── mod.rs │ │ └── policy.rs │ ├── secrets/ │ │ ├── crypto.rs │ │ ├── keychain.rs │ │ ├── mod.rs │ │ ├── store.rs │ │ └── types.rs │ ├── service.rs │ ├── settings.rs │ ├── setup/ │ │ ├── README.md │ │ ├── channels.rs │ │ ├── mod.rs │ │ ├── profile_evolution.rs │ │ ├── prompts.rs │ │ └── wizard.rs │ ├── skills/ │ │ ├── attenuation.rs │ │ ├── catalog.rs │ │ ├── gating.rs │ │ ├── mod.rs │ │ ├── parser.rs │ │ ├── registry.rs │ │ └── selector.rs │ ├── testing/ │ │ ├── credentials.rs │ │ ├── fault_injection.rs │ │ └── mod.rs │ ├── timezone.rs │ ├── tools/ │ │ ├── README.md │ │ ├── autonomy.rs │ │ ├── builder/ │ │ │ ├── core.rs │ │ │ ├── mod.rs │ │ │ ├── templates.rs │ │ │ ├── testing.rs │ │ │ └── validation.rs │ │ ├── builtin/ │ │ │ ├── echo.rs │ │ │ ├── extension_tools.rs │ │ │ ├── file.rs │ │ │ ├── html_converter.rs │ │ │ ├── http.rs │ │ │ ├── image_analyze.rs │ │ │ ├── image_edit.rs │ │ │ ├── image_gen.rs │ │ │ ├── job.rs │ │ │ ├── json.rs │ │ │ ├── memory.rs │ │ │ ├── message.rs │ │ │ ├── mod.rs │ │ │ ├── path_utils.rs │ │ │ ├── restart.rs │ │ │ ├── routine.rs │ │ │ ├── secrets_tools.rs │ │ │ ├── shell.rs │ │ │ ├── skill_tools.rs │ │ │ ├── time.rs │ │ │ └── tool_info.rs │ │ ├── coercion.rs │ │ ├── execute.rs │ │ ├── mcp/ │ │ │ ├── auth.rs │ │ │ ├── client.rs │ │ │ ├── config.rs │ │ │ ├── factory.rs │ │ │ ├── http_transport.rs │ │ │ ├── mod.rs │ │ │ ├── process.rs │ │ │ ├── protocol.rs │ │ │ ├── session.rs │ │ │ ├── stdio_transport.rs │ │ │ ├── transport.rs │ │ │ └── unix_transport.rs │ │ ├── mod.rs │ │ ├── rate_limiter.rs │ │ ├── redaction.rs │ │ ├── registry.rs │ │ ├── schema_validator.rs │ │ ├── tool.rs │ │ └── wasm/ │ │ ├── allowlist.rs │ │ ├── capabilities.rs │ │ ├── capabilities_schema.rs │ │ ├── credential_injector.rs │ │ ├── error.rs │ │ ├── host.rs │ │ ├── limits.rs │ │ ├── loader.rs │ │ ├── mod.rs │ │ ├── rate_limiter.rs │ │ ├── runtime.rs │ │ ├── storage.rs │ │ └── wrapper.rs │ ├── tracing_fmt.rs │ ├── transcription/ │ │ ├── chat_completions.rs │ │ ├── mod.rs │ │ └── openai.rs │ ├── tunnel/ │ │ ├── cloudflare.rs │ │ ├── custom.rs │ │ ├── mod.rs │ │ ├── ngrok.rs │ │ ├── none.rs │ │ └── tailscale.rs │ ├── util.rs │ ├── webhooks/ │ │ └── mod.rs │ ├── worker/ │ │ ├── api.rs │ │ ├── claude_bridge.rs │ │ ├── container.rs │ │ ├── job.rs │ │ ├── mod.rs │ │ └── proxy_llm.rs │ └── workspace/ │ ├── README.md │ ├── chunker.rs │ ├── document.rs │ ├── embedding_cache.rs │ ├── embeddings.rs │ ├── hygiene.rs │ ├── mod.rs │ ├── repository.rs │ ├── search.rs │ └── seeds/ │ ├── AGENTS.md │ ├── BOOTSTRAP.md │ ├── GREETING.md │ ├── HEARTBEAT.md │ ├── IDENTITY.md │ ├── MEMORY.md │ ├── README.md │ ├── SOUL.md │ ├── TOOLS.md │ └── USER.md ├── tests/ │ ├── batch_query_tests.rs │ ├── config_round_trip.rs │ ├── dispatched_routine_run_tests.rs │ ├── e2e/ │ │ ├── CLAUDE.md │ │ ├── README.md │ │ ├── conftest.py │ │ ├── helpers.py │ │ ├── ironclaw_e2e.egg-info/ │ │ │ ├── PKG-INFO │ │ │ ├── SOURCES.txt │ │ │ ├── dependency_links.txt │ │ │ ├── requires.txt │ │ │ └── top_level.txt │ │ ├── mock_llm.py │ │ ├── pyproject.toml │ │ └── scenarios/ │ │ ├── __init__.py │ │ ├── test_chat.py │ │ ├── test_connection.py │ │ ├── test_csp.py │ │ ├── test_extension_oauth.py │ │ ├── test_extensions.py │ │ ├── test_html_injection.py │ │ ├── test_mcp_auth_flow.py │ │ ├── test_oauth_credential_fallback.py │ │ ├── test_owner_scope.py │ │ ├── test_pairing.py │ │ ├── test_routine_event_batch.py │ │ ├── test_routine_oauth_credential_injection.py │ │ ├── test_skills.py │ │ ├── test_sse_reconnect.py │ │ ├── test_telegram_hot_activation.py │ │ ├── test_telegram_token_validation.py │ │ ├── test_tool_approval.py │ │ ├── test_tool_execution.py │ │ ├── test_wasm_lifecycle.py │ │ └── test_webhook.py │ ├── e2e_advanced_traces.rs │ ├── e2e_attachments.rs │ ├── e2e_builtin_tool_coverage.rs │ ├── e2e_metrics_test.rs │ ├── e2e_recorded_trace.rs │ ├── e2e_routine_heartbeat.rs │ ├── e2e_safety_layer.rs │ ├── e2e_spot_checks.rs │ ├── e2e_status_events.rs │ ├── e2e_telegram_message_routing.rs │ ├── e2e_thread_id_isolation.rs │ ├── e2e_thread_scheduling.rs │ ├── e2e_tool_coverage.rs │ ├── e2e_tool_param_coercion.rs │ ├── e2e_trace_error_path.rs │ ├── e2e_trace_file_tools.rs │ ├── e2e_trace_memory.rs │ ├── e2e_worker_coverage.rs │ ├── e2e_workspace_coverage.rs │ ├── fixtures/ │ │ └── llm_traces/ │ │ ├── README.md │ │ ├── advanced/ │ │ │ ├── bootstrap_onboarding.json │ │ │ ├── iteration_limit.json │ │ │ ├── long_tool_chain.json │ │ │ ├── mcp_extension_lifecycle.json │ │ │ ├── multi_turn_memory.json │ │ │ ├── prompt_injection_resilience.json │ │ │ ├── routine_event_any_channel.json │ │ │ ├── routine_event_telegram.json │ │ │ ├── routine_news_digest.json │ │ │ ├── steering.json │ │ │ ├── tool_error_recovery.json │ │ │ ├── tool_intent_no_false_positive.json │ │ │ ├── tool_intent_nudge_cap.json │ │ │ ├── tool_intent_nudge_recovery.json │ │ │ └── workspace_search.json │ │ ├── coverage/ │ │ │ ├── apply_patch_chain.json │ │ │ ├── injection_in_echo.json │ │ │ ├── json_operations.json │ │ │ ├── list_dir.json │ │ │ ├── memory_full_cycle.json │ │ │ ├── shell_echo.json │ │ │ └── status_events_tool_chain.json │ │ ├── error_path.json │ │ ├── file_write_read.json │ │ ├── memory_write_read.json │ │ ├── recorded/ │ │ │ ├── baseball_stats.json │ │ │ ├── telegram_check.json │ │ │ └── weather_sf.json │ │ ├── simple_text.json │ │ ├── spot/ │ │ │ ├── attachment_audio_transcript.json │ │ │ ├── attachment_image.json │ │ │ ├── chain_write_read.json │ │ │ ├── memory_save_recall.json │ │ │ ├── robust_correct_tool.json │ │ │ ├── robust_no_tool.json │ │ │ ├── smoke_greeting.json │ │ │ ├── smoke_math.json │ │ │ ├── tool_echo.json │ │ │ └── tool_json.json │ │ ├── threading/ │ │ │ ├── concurrent_dispatch.json │ │ │ ├── multi_turn_state.json │ │ │ └── undo_redo.json │ │ ├── tools/ │ │ │ ├── http_get_replay.json │ │ │ ├── job_create_status.json │ │ │ ├── job_list_cancel.json │ │ │ ├── routine_create_grouped.json │ │ │ ├── routine_create_list.json │ │ │ ├── routine_history.json │ │ │ ├── routine_manual_create.json │ │ │ ├── routine_system_event_emit.json │ │ │ ├── routine_system_event_emit_grouped.json │ │ │ ├── routine_update_delete.json │ │ │ ├── skill_install_routine_webhook_sim.json │ │ │ ├── time_parse_diff.json │ │ │ ├── time_parse_invalid.json │ │ │ └── tool_info_discovery.json │ │ ├── worker/ │ │ │ ├── invalid_params.json │ │ │ ├── parallel_three_tools.json │ │ │ ├── plan_remaining_work.json │ │ │ ├── rate_limit_cascade.json │ │ │ ├── tool_error_feedback.json │ │ │ ├── unknown_tool.json │ │ │ └── worker_timeout.json │ │ └── workspace/ │ │ ├── directory_tree.json │ │ ├── doc_lifecycle.json │ │ ├── hybrid_search.json │ │ ├── identity_prompt.json │ │ ├── multi_doc_search.json │ │ └── write_chunk_search.json │ ├── gateway_workflow_integration.rs │ ├── heartbeat_integration.rs │ ├── html_to_markdown.rs │ ├── import_openclaw.rs │ ├── import_openclaw_comprehensive.rs │ ├── import_openclaw_e2e.rs │ ├── import_openclaw_errors.rs │ ├── import_openclaw_idempotency.rs │ ├── import_openclaw_integration.rs │ ├── module_init_integration.rs │ ├── openai_compat_integration.rs │ ├── pairing_integration.rs │ ├── provider_chaos.rs │ ├── relay_integration.rs │ ├── sighup_reload_integration.rs │ ├── support/ │ │ ├── assertions.rs │ │ ├── cleanup.rs │ │ ├── gateway_workflow_harness.rs │ │ ├── instrumented_llm.rs │ │ ├── metrics.rs │ │ ├── mock_mcp_server.rs │ │ ├── mock_openai_server.rs │ │ ├── mod.rs │ │ ├── test_channel.rs │ │ ├── test_rig.rs │ │ └── trace_llm.rs │ ├── support_unit_tests.rs │ ├── telegram_auth_integration.rs │ ├── test-pages/ │ │ ├── cnn/ │ │ │ ├── expected.md │ │ │ ├── metadata.json │ │ │ └── source.html │ │ ├── medium/ │ │ │ ├── expected.md │ │ │ ├── metadata.json │ │ │ └── source.html │ │ └── yahoo/ │ │ ├── expected.md │ │ ├── metadata.json │ │ └── source.html │ ├── tool_schema_validation.rs │ ├── trace_format.rs │ ├── trace_llm_tests.rs │ ├── wasm_channel_integration.rs │ ├── wit_compat.rs │ ├── workspace_integration.rs │ └── ws_gateway_integration.rs ├── tools-src/ │ ├── .gitignore │ ├── TOOLS.md │ ├── github/ │ │ ├── Cargo.toml │ │ ├── README.md │ │ ├── github-tool.capabilities.json │ │ └── src/ │ │ └── lib.rs │ ├── gmail/ │ │ ├── Cargo.toml │ │ ├── gmail-tool.capabilities.json │ │ └── src/ │ │ ├── api.rs │ │ ├── lib.rs │ │ └── types.rs │ ├── google-calendar/ │ │ ├── Cargo.toml │ │ ├── google-calendar-tool.capabilities.json │ │ └── src/ │ │ ├── api.rs │ │ ├── lib.rs │ │ └── types.rs │ ├── google-docs/ │ │ ├── Cargo.toml │ │ ├── google-docs-tool.capabilities.json │ │ └── src/ │ │ ├── api.rs │ │ ├── lib.rs │ │ └── types.rs │ ├── google-drive/ │ │ ├── Cargo.toml │ │ ├── google-drive-tool.capabilities.json │ │ └── src/ │ │ ├── api.rs │ │ ├── lib.rs │ │ └── types.rs │ ├── google-sheets/ │ │ ├── Cargo.toml │ │ ├── google-sheets-tool.capabilities.json │ │ └── src/ │ │ ├── api.rs │ │ ├── lib.rs │ │ └── types.rs │ ├── google-slides/ │ │ ├── Cargo.toml │ │ ├── google-slides-tool.capabilities.json │ │ └── src/ │ │ ├── api.rs │ │ ├── lib.rs │ │ └── types.rs │ ├── llm-context/ │ │ ├── Cargo.toml │ │ ├── llm-context-tool.capabilities.json │ │ └── src/ │ │ └── lib.rs │ ├── slack/ │ │ ├── Cargo.toml │ │ ├── README.md │ │ ├── slack-tool.capabilities.json │ │ └── src/ │ │ ├── api.rs │ │ ├── lib.rs │ │ └── types.rs │ ├── telegram/ │ │ ├── Cargo.toml │ │ ├── src/ │ │ │ ├── api.rs │ │ │ ├── auth.rs │ │ │ ├── lib.rs │ │ │ ├── session.rs │ │ │ ├── transport.rs │ │ │ └── types.rs │ │ └── telegram-tool.capabilities.json │ └── web-search/ │ ├── Cargo.toml │ ├── src/ │ │ └── lib.rs │ └── web-search-tool.capabilities.json ├── wit/ │ ├── channel.wit │ └── tool.wit └── wix/ └── main.wxs