gitextract_xohivnil/ ├── .devcontainer/ │ └── devcontainer.json ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── actions/ │ │ └── setup-copilot/ │ │ └── action.yml │ ├── agents/ │ │ ├── agentic-workflows.agent.md │ │ └── docs-maintenance.agent.md │ ├── aw/ │ │ ├── actions-lock.json │ │ └── logs/ │ │ └── .gitignore │ ├── commands/ │ │ └── triage_feedback.yml │ ├── copilot-instructions.md │ ├── dependabot.yaml │ ├── lsp.json │ └── workflows/ │ ├── codegen-check.yml │ ├── collect-corrections.yml │ ├── copilot-setup-steps.yml │ ├── corrections-tests.yml │ ├── cross-repo-issue-analysis.lock.yml │ ├── cross-repo-issue-analysis.md │ ├── docs-validation.yml │ ├── dotnet-sdk-tests.yml │ ├── go-sdk-tests.yml │ ├── handle-bug.lock.yml │ ├── handle-bug.md │ ├── handle-documentation.lock.yml │ ├── handle-documentation.md │ ├── handle-enhancement.lock.yml │ ├── handle-enhancement.md │ ├── handle-question.lock.yml │ ├── handle-question.md │ ├── issue-classification.lock.yml │ ├── issue-classification.md │ ├── issue-triage.lock.yml │ ├── issue-triage.md │ ├── nodejs-sdk-tests.yml │ ├── publish.yml │ ├── python-sdk-tests.yml │ ├── release-changelog.lock.yml │ ├── release-changelog.md │ ├── scenario-builds.yml │ ├── sdk-consistency-review.lock.yml │ ├── sdk-consistency-review.md │ ├── update-copilot-dependency.yml │ └── verify-compiled.yml ├── .gitignore ├── .vscode/ │ ├── launch.json │ └── settings.json ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── SECURITY.md ├── SUPPORT.md ├── docs/ │ ├── auth/ │ │ ├── byok.md │ │ └── index.md │ ├── features/ │ │ ├── agent-loop.md │ │ ├── custom-agents.md │ │ ├── hooks.md │ │ ├── image-input.md │ │ ├── index.md │ │ ├── mcp.md │ │ ├── session-persistence.md │ │ ├── skills.md │ │ ├── steering-and-queueing.md │ │ └── streaming-events.md │ ├── getting-started.md │ ├── hooks/ │ │ ├── error-handling.md │ │ ├── index.md │ │ ├── post-tool-use.md │ │ ├── pre-tool-use.md │ │ ├── session-lifecycle.md │ │ └── user-prompt-submitted.md │ ├── index.md │ ├── integrations/ │ │ └── microsoft-agent-framework.md │ ├── observability/ │ │ └── opentelemetry.md │ ├── setup/ │ │ ├── azure-managed-identity.md │ │ ├── backend-services.md │ │ ├── bundled-cli.md │ │ ├── github-oauth.md │ │ ├── index.md │ │ ├── local-cli.md │ │ └── scaling.md │ └── troubleshooting/ │ ├── compatibility.md │ ├── debugging.md │ └── mcp-debugging.md ├── dotnet/ │ ├── .config/ │ │ └── dotnet-tools.json │ ├── .gitignore │ ├── Directory.Build.props │ ├── Directory.Packages.props │ ├── GitHub.Copilot.SDK.slnx │ ├── README.md │ ├── global.json │ ├── nuget.config │ ├── samples/ │ │ ├── Chat.cs │ │ └── Chat.csproj │ ├── src/ │ │ ├── ActionDisposable.cs │ │ ├── Client.cs │ │ ├── Generated/ │ │ │ ├── Rpc.cs │ │ │ └── SessionEvents.cs │ │ ├── GitHub.Copilot.SDK.csproj │ │ ├── JsonRpc.cs │ │ ├── MillisecondsTimeSpanConverter.cs │ │ ├── PermissionHandlers.cs │ │ ├── SdkProtocolVersion.cs │ │ ├── Session.cs │ │ ├── SessionFsProvider.cs │ │ ├── Telemetry.cs │ │ ├── Types.cs │ │ └── build/ │ │ └── GitHub.Copilot.SDK.targets │ └── test/ │ ├── AssemblyInfo.cs │ ├── E2E/ │ │ ├── AskUserE2ETests.cs │ │ ├── BuiltinToolsE2ETests.cs │ │ ├── ClientE2ETests.cs │ │ ├── ClientLifecycleE2ETests.cs │ │ ├── ClientOptionsE2ETests.cs │ │ ├── ClientSessionManagementE2ETests.cs │ │ ├── CommandsE2ETests.cs │ │ ├── CompactionE2ETests.cs │ │ ├── ElicitationE2ETests.cs │ │ ├── ErrorResilienceE2ETests.cs │ │ ├── EventFidelityE2ETests.cs │ │ ├── HookLifecycleAndOutputE2ETests.cs │ │ ├── HooksE2ETests.cs │ │ ├── MultiClientCommandsElicitationE2ETests.cs │ │ ├── MultiClientE2ETests.cs │ │ ├── MultiTurnE2ETests.cs │ │ ├── PendingWorkResumeE2ETests.cs │ │ ├── PerSessionAuthE2ETests.cs │ │ ├── PermissionE2ETests.cs │ │ ├── RpcAgentE2ETests.cs │ │ ├── RpcMcpAndSkillsE2ETests.cs │ │ ├── RpcMcpConfigE2ETests.cs │ │ ├── RpcServerE2ETests.cs │ │ ├── RpcSessionStateE2ETests.cs │ │ ├── RpcShellAndFleetE2ETests.cs │ │ ├── RpcTasksAndHandlersE2ETests.cs │ │ ├── SessionConfigE2ETests.cs │ │ ├── SessionE2ETests.cs │ │ ├── SessionFsE2ETests.cs │ │ ├── SessionLifecycleE2ETests.cs │ │ ├── SessionMcpAndAgentConfigE2ETests.cs │ │ ├── SkillsE2ETests.cs │ │ ├── StreamingFidelityE2ETests.cs │ │ ├── SuspendE2ETests.cs │ │ ├── SystemMessageTransformE2ETests.cs │ │ ├── TelemetryExportE2ETests.cs │ │ ├── ToolResultsE2ETests.cs │ │ └── ToolsE2ETests.cs │ ├── GitHub.Copilot.SDK.Test.csproj │ ├── Harness/ │ │ ├── CapiProxy.cs │ │ ├── E2ETestBase.cs │ │ ├── E2ETestContext.cs │ │ ├── E2ETestFixture.cs │ │ └── TestHelper.cs │ └── Unit/ │ ├── CloneTests.cs │ ├── ForwardCompatibilityTests.cs │ ├── JsonRpcTests.cs │ ├── PermissionRequestResultKindTests.cs │ ├── PublicDtoTests.cs │ ├── SerializationTests.cs │ ├── SessionEventSerializationTests.cs │ └── TelemetryTests.cs ├── go/ │ ├── .gitignore │ ├── .golangci.yml │ ├── README.md │ ├── client.go │ ├── client_test.go │ ├── cmd/ │ │ └── bundler/ │ │ └── main.go │ ├── definetool.go │ ├── definetool_test.go │ ├── embeddedcli/ │ │ └── installer.go │ ├── generated_session_events.go │ ├── go.mod │ ├── go.sum │ ├── internal/ │ │ ├── e2e/ │ │ │ ├── agent_and_compact_rpc_e2e_test.go │ │ │ ├── ask_user_e2e_test.go │ │ │ ├── builtin_tools_e2e_test.go │ │ │ ├── client_api_e2e_test.go │ │ │ ├── client_e2e_test.go │ │ │ ├── client_lifecycle_e2e_test.go │ │ │ ├── client_options_e2e_test.go │ │ │ ├── commands_and_elicitation_e2e_test.go │ │ │ ├── compaction_e2e_test.go │ │ │ ├── error_resilience_e2e_test.go │ │ │ ├── event_fidelity_e2e_test.go │ │ │ ├── hooks_e2e_test.go │ │ │ ├── hooks_extended_e2e_test.go │ │ │ ├── mcp_and_agents_e2e_test.go │ │ │ ├── multi_client_e2e_test.go │ │ │ ├── multi_turn_e2e_test.go │ │ │ ├── pending_work_resume_e2e_test.go │ │ │ ├── per_session_auth_e2e_test.go │ │ │ ├── permissions_e2e_test.go │ │ │ ├── rpc_e2e_test.go │ │ │ ├── rpc_mcp_and_skills_e2e_test.go │ │ │ ├── rpc_mcp_config_e2e_test.go │ │ │ ├── rpc_server_e2e_test.go │ │ │ ├── rpc_session_state_e2e_test.go │ │ │ ├── rpc_shell_and_fleet_e2e_test.go │ │ │ ├── rpc_tasks_and_handlers_e2e_test.go │ │ │ ├── session_config_e2e_test.go │ │ │ ├── session_e2e_test.go │ │ │ ├── session_fs_e2e_test.go │ │ │ ├── skills_e2e_test.go │ │ │ ├── streaming_fidelity_e2e_test.go │ │ │ ├── suspend_e2e_test.go │ │ │ ├── system_message_transform_e2e_test.go │ │ │ ├── telemetry_e2e_test.go │ │ │ ├── testharness/ │ │ │ │ ├── context.go │ │ │ │ ├── helper.go │ │ │ │ └── proxy.go │ │ │ ├── tool_results_e2e_test.go │ │ │ └── tools_e2e_test.go │ │ ├── embeddedcli/ │ │ │ ├── embeddedcli.go │ │ │ └── embeddedcli_test.go │ │ ├── flock/ │ │ │ ├── flock.go │ │ │ ├── flock_other.go │ │ │ ├── flock_test.go │ │ │ ├── flock_unix.go │ │ │ └── flock_windows.go │ │ └── jsonrpc2/ │ │ ├── frame.go │ │ ├── jsonrpc2.go │ │ └── jsonrpc2_test.go │ ├── permissions.go │ ├── process_other.go │ ├── process_windows.go │ ├── rpc/ │ │ ├── generated_rpc.go │ │ └── result_union.go │ ├── samples/ │ │ ├── chat.go │ │ ├── go.mod │ │ └── go.sum │ ├── sdk_protocol_version.go │ ├── session.go │ ├── session_event_serialization_test.go │ ├── session_fs_provider.go │ ├── session_test.go │ ├── telemetry.go │ ├── telemetry_test.go │ ├── test.sh │ ├── types.go │ └── types_test.go ├── java/ │ └── README.md ├── justfile ├── nodejs/ │ ├── .gitignore │ ├── .npmignore │ ├── .prettierignore │ ├── .prettierrc.json │ ├── README.md │ ├── docs/ │ │ ├── agent-author.md │ │ ├── examples.md │ │ └── extensions.md │ ├── esbuild-copilotsdk-nodejs.ts │ ├── eslint.config.js │ ├── examples/ │ │ └── basic-example.ts │ ├── package.json │ ├── samples/ │ │ ├── chat.ts │ │ └── package.json │ ├── scripts/ │ │ ├── get-version.js │ │ ├── set-version.js │ │ └── update-protocol-version.ts │ ├── src/ │ │ ├── client.ts │ │ ├── extension.ts │ │ ├── generated/ │ │ │ ├── rpc.ts │ │ │ └── session-events.ts │ │ ├── index.ts │ │ ├── sdkProtocolVersion.ts │ │ ├── session.ts │ │ ├── sessionFsProvider.ts │ │ ├── telemetry.ts │ │ └── types.ts │ ├── test/ │ │ ├── call-tool-result.test.ts │ │ ├── cjs-compat.test.ts │ │ ├── client.test.ts │ │ ├── e2e/ │ │ │ ├── agent_and_compact_rpc.e2e.test.ts │ │ │ ├── ask_user.e2e.test.ts │ │ │ ├── builtin_tools.e2e.test.ts │ │ │ ├── client.e2e.test.ts │ │ │ ├── client_api.e2e.test.ts │ │ │ ├── client_lifecycle.e2e.test.ts │ │ │ ├── client_options.e2e.test.ts │ │ │ ├── commands.e2e.test.ts │ │ │ ├── compaction.e2e.test.ts │ │ │ ├── error_resilience.e2e.test.ts │ │ │ ├── event_fidelity.e2e.test.ts │ │ │ ├── harness/ │ │ │ │ ├── CapiProxy.ts │ │ │ │ ├── sdkTestContext.ts │ │ │ │ └── sdkTestHelper.ts │ │ │ ├── hooks.e2e.test.ts │ │ │ ├── hooks_extended.e2e.test.ts │ │ │ ├── mcp_and_agents.e2e.test.ts │ │ │ ├── multi-client.e2e.test.ts │ │ │ ├── multi_turn.e2e.test.ts │ │ │ ├── pending_work_resume.e2e.test.ts │ │ │ ├── per_session_auth.e2e.test.ts │ │ │ ├── permissions.e2e.test.ts │ │ │ ├── rpc.e2e.test.ts │ │ │ ├── rpc_mcp_and_skills.e2e.test.ts │ │ │ ├── rpc_mcp_config.e2e.test.ts │ │ │ ├── rpc_server.e2e.test.ts │ │ │ ├── rpc_session_state.e2e.test.ts │ │ │ ├── rpc_shell_and_fleet.e2e.test.ts │ │ │ ├── rpc_tasks_and_handlers.e2e.test.ts │ │ │ ├── session.e2e.test.ts │ │ │ ├── session_config.e2e.test.ts │ │ │ ├── session_fs.e2e.test.ts │ │ │ ├── session_lifecycle.e2e.test.ts │ │ │ ├── skills.e2e.test.ts │ │ │ ├── streaming_fidelity.e2e.test.ts │ │ │ ├── suspend.e2e.test.ts │ │ │ ├── system_message_transform.e2e.test.ts │ │ │ ├── telemetry.e2e.test.ts │ │ │ ├── tool_results.e2e.test.ts │ │ │ ├── tools.e2e.test.ts │ │ │ └── ui_elicitation.e2e.test.ts │ │ ├── extension.test.ts │ │ ├── python-codegen.test.ts │ │ ├── session_fs_adapter.test.ts │ │ └── telemetry.test.ts │ ├── tsconfig.json │ └── vitest.config.ts ├── python/ │ ├── .gitignore │ ├── README.md │ ├── copilot/ │ │ ├── __init__.py │ │ ├── _jsonrpc.py │ │ ├── _sdk_protocol_version.py │ │ ├── _telemetry.py │ │ ├── client.py │ │ ├── generated/ │ │ │ ├── __init__.py │ │ │ ├── rpc.py │ │ │ └── session_events.py │ │ ├── py.typed │ │ ├── session.py │ │ ├── session_fs_provider.py │ │ └── tools.py │ ├── e2e/ │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── test_agent_and_compact_rpc_e2e.py │ │ ├── test_ask_user_e2e.py │ │ ├── test_builtin_tools_e2e.py │ │ ├── test_client_api_e2e.py │ │ ├── test_client_e2e.py │ │ ├── test_client_lifecycle_e2e.py │ │ ├── test_client_options_e2e.py │ │ ├── test_commands_e2e.py │ │ ├── test_compaction_e2e.py │ │ ├── test_error_resilience_e2e.py │ │ ├── test_event_fidelity_e2e.py │ │ ├── test_hooks_e2e.py │ │ ├── test_hooks_extended_e2e.py │ │ ├── test_mcp_and_agents_e2e.py │ │ ├── test_multi_client_e2e.py │ │ ├── test_multi_turn_e2e.py │ │ ├── test_pending_work_resume_e2e.py │ │ ├── test_per_session_auth_e2e.py │ │ ├── test_permissions_e2e.py │ │ ├── test_rpc_e2e.py │ │ ├── test_rpc_mcp_and_skills_e2e.py │ │ ├── test_rpc_mcp_config_e2e.py │ │ ├── test_rpc_server_e2e.py │ │ ├── test_rpc_session_state_e2e.py │ │ ├── test_rpc_shell_and_fleet_e2e.py │ │ ├── test_rpc_tasks_and_handlers_e2e.py │ │ ├── test_session_config_e2e.py │ │ ├── test_session_e2e.py │ │ ├── test_session_fs_e2e.py │ │ ├── test_skills_e2e.py │ │ ├── test_streaming_fidelity_e2e.py │ │ ├── test_suspend_e2e.py │ │ ├── test_system_message_transform_e2e.py │ │ ├── test_telemetry_e2e.py │ │ ├── test_tool_results_e2e.py │ │ ├── test_tools_e2e.py │ │ ├── test_ui_elicitation_e2e.py │ │ ├── test_ui_elicitation_multi_client_e2e.py │ │ └── testharness/ │ │ ├── __init__.py │ │ ├── context.py │ │ ├── helper.py │ │ └── proxy.py │ ├── pyproject.toml │ ├── samples/ │ │ └── chat.py │ ├── scripts/ │ │ └── build-wheels.mjs │ ├── test_client.py │ ├── test_commands_and_elicitation.py │ ├── test_event_forward_compatibility.py │ ├── test_jsonrpc.py │ ├── test_rpc_timeout.py │ ├── test_telemetry.py │ └── test_tools.py ├── scripts/ │ ├── codegen/ │ │ ├── .gitignore │ │ ├── csharp.ts │ │ ├── go.ts │ │ ├── package.json │ │ ├── python.ts │ │ ├── typescript.ts │ │ └── utils.ts │ ├── corrections/ │ │ ├── .gitignore │ │ ├── collect-corrections.js │ │ ├── package.json │ │ ├── test/ │ │ │ └── collect-corrections.test.ts │ │ └── tsconfig.json │ └── docs-validation/ │ ├── .gitignore │ ├── extract.ts │ ├── package.json │ └── validate.ts ├── sdk-protocol-version.json └── test/ ├── harness/ │ ├── .gitignore │ ├── capturingHttpProxy.test.ts │ ├── capturingHttpProxy.ts │ ├── package.json │ ├── replayingCapiProxy.test.ts │ ├── replayingCapiProxy.ts │ ├── server.ts │ ├── test-mcp-server.mjs │ ├── tsconfig.json │ ├── util.ts │ └── vitest.config.ts ├── scenarios/ │ ├── .gitignore │ ├── README.md │ ├── auth/ │ │ ├── byok-anthropic/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── byok-azure/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── byok-ollama/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── byok-openai/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ └── gh-app/ │ │ ├── README.md │ │ ├── csharp/ │ │ │ ├── Program.cs │ │ │ └── csharp.csproj │ │ ├── go/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── python/ │ │ │ ├── main.py │ │ │ └── requirements.txt │ │ ├── typescript/ │ │ │ ├── package.json │ │ │ └── src/ │ │ │ └── index.ts │ │ └── verify.sh │ ├── bundling/ │ │ ├── app-backend-to-server/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── app-direct-server/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ └── index.ts │ │ │ │ └── tsconfig.json │ │ │ └── verify.sh │ │ ├── container-proxy/ │ │ │ ├── .dockerignore │ │ │ ├── Dockerfile │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── docker-compose.yml │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── proxy.py │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ └── index.ts │ │ │ │ └── tsconfig.json │ │ │ └── verify.sh │ │ └── fully-bundled/ │ │ ├── README.md │ │ ├── csharp/ │ │ │ ├── Program.cs │ │ │ └── csharp.csproj │ │ ├── go/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── python/ │ │ │ ├── main.py │ │ │ └── requirements.txt │ │ ├── typescript/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ └── verify.sh │ ├── callbacks/ │ │ ├── hooks/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── permissions/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ └── user-input/ │ │ ├── README.md │ │ ├── csharp/ │ │ │ ├── Program.cs │ │ │ └── csharp.csproj │ │ ├── go/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── python/ │ │ │ ├── main.py │ │ │ └── requirements.txt │ │ ├── typescript/ │ │ │ ├── package.json │ │ │ └── src/ │ │ │ └── index.ts │ │ └── verify.sh │ ├── modes/ │ │ ├── default/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ └── minimal/ │ │ ├── README.md │ │ ├── csharp/ │ │ │ ├── Program.cs │ │ │ └── csharp.csproj │ │ ├── go/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── python/ │ │ │ ├── main.py │ │ │ └── requirements.txt │ │ ├── typescript/ │ │ │ ├── package.json │ │ │ └── src/ │ │ │ └── index.ts │ │ └── verify.sh │ ├── prompts/ │ │ ├── attachments/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── sample-data.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── reasoning-effort/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ └── system-message/ │ │ ├── README.md │ │ ├── csharp/ │ │ │ ├── Program.cs │ │ │ └── csharp.csproj │ │ ├── go/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── python/ │ │ │ ├── main.py │ │ │ └── requirements.txt │ │ ├── typescript/ │ │ │ ├── package.json │ │ │ └── src/ │ │ │ └── index.ts │ │ └── verify.sh │ ├── sessions/ │ │ ├── concurrent-sessions/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── infinite-sessions/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── multi-user-long-lived/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── multi-user-short-lived/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── session-resume/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ └── streaming/ │ │ ├── README.md │ │ ├── csharp/ │ │ │ ├── Program.cs │ │ │ └── csharp.csproj │ │ ├── go/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── python/ │ │ │ ├── main.py │ │ │ └── requirements.txt │ │ ├── typescript/ │ │ │ ├── package.json │ │ │ └── src/ │ │ │ └── index.ts │ │ └── verify.sh │ ├── tools/ │ │ ├── custom-agents/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── mcp-servers/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── no-tools/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── skills/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── sample-skills/ │ │ │ │ └── greeting/ │ │ │ │ └── SKILL.md │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── tool-filtering/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── tool-overrides/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ └── virtual-filesystem/ │ │ ├── README.md │ │ ├── csharp/ │ │ │ ├── Program.cs │ │ │ └── csharp.csproj │ │ ├── go/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── python/ │ │ │ ├── main.py │ │ │ └── requirements.txt │ │ ├── typescript/ │ │ │ ├── package.json │ │ │ └── src/ │ │ │ └── index.ts │ │ └── verify.sh │ ├── transport/ │ │ ├── README.md │ │ ├── reconnect/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ ├── stdio/ │ │ │ ├── README.md │ │ │ ├── csharp/ │ │ │ │ ├── Program.cs │ │ │ │ └── csharp.csproj │ │ │ ├── go/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── main.go │ │ │ ├── python/ │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── typescript/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── verify.sh │ │ └── tcp/ │ │ ├── README.md │ │ ├── csharp/ │ │ │ ├── Program.cs │ │ │ └── csharp.csproj │ │ ├── go/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── python/ │ │ │ ├── main.py │ │ │ └── requirements.txt │ │ ├── typescript/ │ │ │ ├── package.json │ │ │ └── src/ │ │ │ └── index.ts │ │ └── verify.sh │ └── verify.sh └── snapshots/ ├── agent_and_compact_rpc/ │ └── should_compact_session_history_after_messages.yaml ├── ask-user/ │ ├── should_handle_freeform_user_input_response.yaml │ ├── should_invoke_user_input_handler_when_model_uses_ask_user_tool.yaml │ └── should_receive_choices_in_user_input_request.yaml ├── ask_user/ │ ├── handle_freeform_user_input_response.yaml │ ├── invoke_user_input_handler_when_model_uses_ask_user_tool.yaml │ ├── receive_choices_in_user_input_request.yaml │ ├── should_handle_freeform_user_input_response.yaml │ ├── should_invoke_user_input_handler_when_model_uses_ask_user_tool.yaml │ └── should_receive_choices_in_user_input_request.yaml ├── askuser/ │ ├── should_handle_freeform_user_input_response.yaml │ ├── should_invoke_user_input_handler_when_model_uses_ask_user_tool.yaml │ └── should_receive_choices_in_user_input_request.yaml ├── builtin_tools/ │ ├── should_capture_exit_code_in_output.yaml │ ├── should_capture_stderr_output.yaml │ ├── should_create_a_new_file.yaml │ ├── should_edit_a_file_successfully.yaml │ ├── should_find_files_by_pattern.yaml │ ├── should_handle_nonexistent_file_gracefully.yaml │ ├── should_read_file_with_line_range.yaml │ └── should_search_for_patterns_in_files.yaml ├── client_api/ │ ├── should_delete_session_by_id.yaml │ └── should_track_last_session_id_after_session_created.yaml ├── client_lifecycle/ │ ├── should_emit_session_lifecycle_events.yaml │ └── should_return_last_session_id_after_sending_a_message.yaml ├── client_options/ │ └── should_use_client_cwd_for_default_workingdirectory.yaml ├── combinedconfiguration/ │ └── accept_mcp_servers_and_custom_agents.yaml ├── compaction/ │ ├── should_not_emit_compaction_events_when_infinite_sessions_disabled.yaml │ └── should_trigger_compaction_with_low_threshold_and_emit_events.yaml ├── customagents/ │ ├── accept_custom_agent_config_on_create.yaml │ └── accept_custom_agent_config_on_resume.yaml ├── event_fidelity/ │ ├── should_emit_assistant_message_with_messageid.yaml │ ├── should_emit_events_in_correct_order_for_tool_using_conversation.yaml │ ├── should_emit_tool_execution_events_with_correct_fields.yaml │ └── should_include_valid_fields_on_all_events.yaml ├── hooks/ │ ├── deny_tool_execution_when_pre_tool_use_returns_deny.yaml │ ├── invoke_both_hooks_for_single_tool_call.yaml │ ├── invoke_post_tool_use_hook_after_model_runs_a_tool.yaml │ ├── invoke_pre_tool_use_hook_when_model_runs_a_tool.yaml │ ├── should_deny_tool_execution_when_pretooluse_returns_deny.yaml │ ├── should_invoke_both_pretooluse_and_posttooluse_hooks_for_a_single_tool_call.yaml │ ├── should_invoke_both_pretooluse_and_posttooluse_hooks_for_single_tool_call.yaml │ ├── should_invoke_posttooluse_hook_after_model_runs_a_tool.yaml │ └── should_invoke_pretooluse_hook_when_model_runs_a_tool.yaml ├── hooks_extended/ │ ├── should_allow_posttooluse_to_return_modifiedresult.yaml │ ├── should_allow_pretooluse_to_return_modifiedargs_and_suppressoutput.yaml │ ├── should_invoke_onerroroccurred_hook_when_error_occurs.yaml │ ├── should_invoke_onsessionend_hook_when_session_is_disconnected.yaml │ ├── should_invoke_onsessionstart_hook_on_new_session.yaml │ ├── should_invoke_onuserpromptsubmitted_hook_when_sending_a_message.yaml │ ├── should_invoke_sessionend_hook.yaml │ ├── should_invoke_sessionstart_hook.yaml │ ├── should_invoke_userpromptsubmitted_hook_and_modify_prompt.yaml │ └── should_register_erroroccurred_hook.yaml ├── mcp-and-agents/ │ ├── should_accept_both_mcp_servers_and_custom_agents.yaml │ ├── should_accept_custom_agent_configuration_on_session_create.yaml │ ├── should_accept_custom_agent_configuration_on_session_resume.yaml │ ├── should_accept_mcp_server_configuration_on_session_create.yaml │ └── should_accept_mcp_server_configuration_on_session_resume.yaml ├── mcp_and_agents/ │ ├── accept_custom_agent_config_on_create.yaml │ ├── accept_custom_agent_config_on_resume.yaml │ ├── accept_mcp_server_config_on_create.yaml │ ├── accept_mcp_server_config_on_resume.yaml │ ├── accept_mcp_servers_and_custom_agents.yaml │ ├── should_accept_both_mcp_servers_and_custom_agents.yaml │ ├── should_accept_custom_agent_configuration_on_session_create.yaml │ ├── should_accept_custom_agent_configuration_on_session_resume.yaml │ ├── should_accept_defaultagent_configuration_on_session_resume.yaml │ ├── should_accept_mcp_server_configuration_on_session_create.yaml │ ├── should_accept_mcp_server_configuration_on_session_resume.yaml │ ├── should_hide_excluded_tools_from_default_agent.yaml │ └── should_pass_literal_env_values_to_mcp_server_subprocess.yaml ├── mcpservers/ │ ├── accept_mcp_server_config_on_create.yaml │ └── accept_mcp_server_config_on_resume.yaml ├── multi_client/ │ ├── both_clients_see_tool_request_and_completion_events.yaml │ ├── disconnecting_client_removes_its_tools.yaml │ ├── one_client_approves_permission_and_both_see_the_result.yaml │ ├── one_client_rejects_permission_and_both_see_the_result.yaml │ └── two_clients_register_different_tools_and_agent_uses_both.yaml ├── multi_turn/ │ ├── should_handle_file_creation_then_reading_across_turns.yaml │ └── should_use_tool_results_from_previous_turns.yaml ├── pending_work_resume/ │ ├── should_continue_parallel_pending_external_tool_requests_after_resume.yaml │ ├── should_continue_pending_external_tool_request_after_resume.yaml │ ├── should_continue_pending_permission_request_after_resume.yaml │ └── should_resume_successfully_when_no_pending_work_exists.yaml ├── permissions/ │ ├── async_permission_handler.yaml │ ├── deny_permission.yaml │ ├── permission_handler_errors.yaml │ ├── permission_handler_for_shell_commands.yaml │ ├── permission_handler_for_write_operations.yaml │ ├── resume_session_with_permission_handler.yaml │ ├── should_deny_permission_when_handler_returns_denied.yaml │ ├── should_deny_tool_operations_when_handler_explicitly_denies.yaml │ ├── should_deny_tool_operations_when_handler_explicitly_denies_after_resume.yaml │ ├── should_handle_async_permission_handler.yaml │ ├── should_handle_permission_handler_errors_gracefully.yaml │ ├── should_invoke_permission_handler_for_write_operations.yaml │ ├── should_receive_toolcallid_in_permission_requests.yaml │ ├── should_resume_session_with_permission_handler.yaml │ ├── should_work_with_approve_all_permission_handler.yaml │ └── tool_call_id_in_permission_requests.yaml ├── rpc_session_state/ │ ├── should_compact_session_history_after_messages.yaml │ └── should_fork_session_with_persisted_messages.yaml ├── rpc_shell_and_fleet/ │ └── should_start_fleet_and_complete_custom_tool_task.yaml ├── session/ │ ├── disposeasync_from_handler_does_not_deadlock.yaml │ ├── handler_exception_does_not_halt_event_delivery.yaml │ ├── send_returns_immediately_while_events_stream_in_background.yaml │ ├── sendandwait_blocks_until_session_idle_and_returns_final_assistant_message.yaml │ ├── sendandwait_throws_on_timeout.yaml │ ├── sendandwait_throws_operationcanceledexception_when_token_cancelled.yaml │ ├── should_abort_a_session.yaml │ ├── should_accept_blob_attachments.yaml │ ├── should_create_a_session_with_appended_systemmessage_config.yaml │ ├── should_create_a_session_with_availabletools.yaml │ ├── should_create_a_session_with_customized_systemmessage_config.yaml │ ├── should_create_a_session_with_defaultagent_excludedtools.yaml │ ├── should_create_a_session_with_excludedtools.yaml │ ├── should_create_a_session_with_replaced_systemmessage_config.yaml │ ├── should_create_session_with_custom_config_dir.yaml │ ├── should_create_session_with_custom_tool.yaml │ ├── should_delete_session.yaml │ ├── should_get_last_session_id.yaml │ ├── should_get_session_metadata.yaml │ ├── should_get_session_metadata_by_id.yaml │ ├── should_have_stateful_conversation.yaml │ ├── should_list_sessions.yaml │ ├── should_list_sessions_with_context.yaml │ ├── should_receive_session_events.yaml │ ├── should_resume_a_session_using_a_new_client.yaml │ ├── should_resume_a_session_using_the_same_client.yaml │ ├── should_send_with_custom_requestheaders.yaml │ ├── should_send_with_directory_attachment.yaml │ ├── should_send_with_file_attachment.yaml │ ├── should_send_with_github_reference_attachment.yaml │ ├── should_send_with_mode_property.yaml │ ├── should_send_with_selection_attachment.yaml │ ├── should_set_model_on_existing_session.yaml │ └── should_set_model_with_reasoningeffort.yaml ├── session_config/ │ ├── should_accept_blob_attachments.yaml │ ├── should_accept_message_attachments.yaml │ ├── should_apply_availabletools_on_session_resume.yaml │ ├── should_apply_systemmessage_on_session_resume.yaml │ ├── should_apply_workingdirectory_on_session_resume.yaml │ ├── should_forward_clientname_in_user_agent.yaml │ ├── should_forward_clientname_in_useragent.yaml │ ├── should_forward_custom_provider_headers_on_create.yaml │ ├── should_forward_custom_provider_headers_on_resume.yaml │ ├── should_use_workingdirectory_for_tool_execution.yaml │ ├── vision_disabled_then_enabled_via_setmodel.yaml │ └── vision_enabled_then_disabled_via_setmodel.yaml ├── session_fs/ │ ├── should_load_session_data_from_fs_provider_on_resume.yaml │ ├── should_map_large_output_handling_into_sessionfs.yaml │ ├── should_persist_plan_md_via_sessionfs.yaml │ ├── should_reject_setprovider_when_sessions_already_exist.yaml │ ├── should_route_file_operations_through_the_session_fs_provider.yaml │ ├── should_succeed_with_compaction_while_using_sessionfs.yaml │ └── should_write_workspace_metadata_via_sessionfs.yaml ├── session_lifecycle/ │ ├── should_delete_session_permanently.yaml │ ├── should_list_created_sessions_after_sending_a_message.yaml │ ├── should_return_events_via_getmessages_after_conversation.yaml │ └── should_support_multiple_concurrent_sessions.yaml ├── skills/ │ ├── should_allow_agent_with_skills_to_invoke_skill.yaml │ ├── should_load_and_apply_skill_from_skilldirectories.yaml │ ├── should_not_apply_skill_when_disabled_via_disabledskills.yaml │ └── should_not_provide_skills_to_agent_without_skills_field.yaml ├── streaming_fidelity/ │ ├── should_emit_assistantmessagestart_before_deltas_with_matching_messageid.yaml │ ├── should_not_produce_deltas_when_streaming_is_disabled.yaml │ ├── should_produce_delta_events_when_streaming_is_enabled.yaml │ └── should_produce_deltas_after_session_resume.yaml ├── suspend/ │ ├── should_allow_resume_and_continue_conversation_after_suspend.yaml │ ├── should_cancel_pending_permission_request_when_suspending.yaml │ ├── should_reject_pending_external_tool_when_suspending.yaml │ └── should_suspend_idle_session_without_throwing.yaml ├── system_message_transform/ │ ├── should_apply_transform_modifications_to_section_content.yaml │ ├── should_invoke_transform_callbacks_with_section_content.yaml │ └── should_work_with_static_overrides_and_transforms_together.yaml ├── telemetry/ │ └── should_export_file_telemetry_for_sdk_interactions.yaml ├── tool_results/ │ ├── should_handle_structured_toolresultobject_from_custom_tool.yaml │ ├── should_handle_tool_result_with_failure_resulttype.yaml │ ├── should_pass_validated_zod_parameters_to_tool_handler.yaml │ └── should_preserve_tooltelemetry_and_not_stringify_structured_results_for_llm.yaml └── tools/ ├── can_receive_and_return_complex_types.yaml ├── denies_custom_tool_when_permission_denied.yaml ├── handles_tool_calling_errors.yaml ├── invokes_built_in_tools.yaml ├── invokes_custom_tool.yaml ├── invokes_custom_tool_with_permission_handler.yaml ├── overrides_built_in_tool_with_custom_tool.yaml └── skippermission_sent_in_tool_definition.yaml