This is page 17 of 145. Use http://codebase.md/microsoft/semanticworkbench?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .devcontainer
│ ├── .vscode
│ │ └── settings.json
│ ├── devcontainer.json
│ ├── OPTIMIZING_FOR_CODESPACES.md
│ ├── POST_SETUP_README.md
│ └── README.md
├── .dockerignore
├── .gitattributes
├── .github
│ ├── policheck.yml
│ └── workflows
│ ├── assistants-codespace-assistant.yml
│ ├── assistants-document-assistant.yml
│ ├── assistants-explorer-assistant.yml
│ ├── assistants-guided-conversation-assistant.yml
│ ├── assistants-knowledge-transfer-assistant.yml
│ ├── assistants-navigator-assistant.yml
│ ├── assistants-project-assistant.yml
│ ├── assistants-prospector-assistant.yml
│ ├── assistants-skill-assistant.yml
│ ├── libraries.yml
│ ├── mcp-server-giphy.yml
│ ├── mcp-server-memory-filesystem-edit.yml
│ ├── mcp-server-memory-user-bio.yml
│ ├── mcp-server-memory-whiteboard.yml
│ ├── mcp-server-open-deep-research-clone.yml
│ ├── mcp-server-web-research.yml
│ ├── workbench-app.yml
│ └── workbench-service.yml
├── .gitignore
├── .multi-root-tools
│ ├── Makefile
│ └── README.md
├── .vscode
│ ├── extensions.json
│ ├── launch.json
│ └── settings.json
├── ai_context
│ └── generated
│ ├── ASPIRE_ORCHESTRATOR.md
│ ├── ASSISTANT_CODESPACE.md
│ ├── ASSISTANT_DOCUMENT.md
│ ├── ASSISTANT_NAVIGATOR.md
│ ├── ASSISTANT_PROJECT.md
│ ├── ASSISTANT_PROSPECTOR.md
│ ├── ASSISTANTS_OTHER.md
│ ├── ASSISTANTS_OVERVIEW.md
│ ├── CONFIGURATION.md
│ ├── DOTNET_LIBRARIES.md
│ ├── EXAMPLES.md
│ ├── MCP_SERVERS.md
│ ├── PYTHON_LIBRARIES_AI_CLIENTS.md
│ ├── PYTHON_LIBRARIES_CORE.md
│ ├── PYTHON_LIBRARIES_EXTENSIONS.md
│ ├── PYTHON_LIBRARIES_SKILLS.md
│ ├── PYTHON_LIBRARIES_SPECIALIZED.md
│ ├── TOOLS.md
│ ├── WORKBENCH_FRONTEND.md
│ └── WORKBENCH_SERVICE.md
├── aspire-orchestrator
│ ├── .editorconfig
│ ├── Aspire.AppHost
│ │ ├── .gitignore
│ │ ├── appsettings.json
│ │ ├── Aspire.AppHost.csproj
│ │ ├── Program.cs
│ │ └── Properties
│ │ └── launchSettings.json
│ ├── Aspire.Extensions
│ │ ├── Aspire.Extensions.csproj
│ │ ├── Dashboard.cs
│ │ ├── DockerFileExtensions.cs
│ │ ├── PathNormalizer.cs
│ │ ├── UvAppHostingExtensions.cs
│ │ ├── UvAppResource.cs
│ │ ├── VirtualEnvironment.cs
│ │ └── WorkbenchServiceHostingExtensions.cs
│ ├── Aspire.ServiceDefaults
│ │ ├── Aspire.ServiceDefaults.csproj
│ │ └── Extensions.cs
│ ├── README.md
│ ├── run.sh
│ ├── SemanticWorkbench.Aspire.sln
│ └── SemanticWorkbench.Aspire.sln.DotSettings
├── assistants
│ ├── codespace-assistant
│ │ ├── .claude
│ │ │ └── settings.local.json
│ │ ├── .env.example
│ │ ├── .vscode
│ │ │ ├── extensions.json
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── assistant
│ │ │ ├── __init__.py
│ │ │ ├── assets
│ │ │ │ ├── icon_context_transfer.svg
│ │ │ │ └── icon.svg
│ │ │ ├── chat.py
│ │ │ ├── config.py
│ │ │ ├── helpers.py
│ │ │ ├── response
│ │ │ │ ├── __init__.py
│ │ │ │ ├── completion_handler.py
│ │ │ │ ├── models.py
│ │ │ │ ├── request_builder.py
│ │ │ │ ├── response.py
│ │ │ │ ├── step_handler.py
│ │ │ │ └── utils
│ │ │ │ ├── __init__.py
│ │ │ │ ├── abbreviations.py
│ │ │ │ ├── formatting_utils.py
│ │ │ │ ├── message_utils.py
│ │ │ │ └── openai_utils.py
│ │ │ ├── text_includes
│ │ │ │ ├── card_content_context_transfer.md
│ │ │ │ ├── card_content.md
│ │ │ │ ├── codespace_assistant_info.md
│ │ │ │ ├── context_transfer_assistant_info.md
│ │ │ │ ├── guardrails_prompt.txt
│ │ │ │ ├── guidance_prompt_context_transfer.txt
│ │ │ │ ├── guidance_prompt.txt
│ │ │ │ ├── instruction_prompt_context_transfer.txt
│ │ │ │ └── instruction_prompt.txt
│ │ │ └── whiteboard
│ │ │ ├── __init__.py
│ │ │ ├── _inspector.py
│ │ │ └── _whiteboard.py
│ │ ├── assistant.code-workspace
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── document-assistant
│ │ ├── .env.example
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── assistant
│ │ │ ├── __init__.py
│ │ │ ├── assets
│ │ │ │ └── icon.svg
│ │ │ ├── chat.py
│ │ │ ├── config.py
│ │ │ ├── context_management
│ │ │ │ ├── __init__.py
│ │ │ │ └── inspector.py
│ │ │ ├── filesystem
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _convert.py
│ │ │ │ ├── _file_sources.py
│ │ │ │ ├── _filesystem.py
│ │ │ │ ├── _inspector.py
│ │ │ │ ├── _model.py
│ │ │ │ ├── _prompts.py
│ │ │ │ └── _tasks.py
│ │ │ ├── guidance
│ │ │ │ ├── __init__.py
│ │ │ │ ├── dynamic_ui_inspector.py
│ │ │ │ ├── guidance_config.py
│ │ │ │ ├── guidance_prompts.py
│ │ │ │ └── README.md
│ │ │ ├── response
│ │ │ │ ├── __init__.py
│ │ │ │ ├── completion_handler.py
│ │ │ │ ├── models.py
│ │ │ │ ├── prompts.py
│ │ │ │ ├── responder.py
│ │ │ │ └── utils
│ │ │ │ ├── __init__.py
│ │ │ │ ├── formatting_utils.py
│ │ │ │ ├── message_utils.py
│ │ │ │ ├── openai_utils.py
│ │ │ │ ├── tokens_tiktoken.py
│ │ │ │ └── workbench_messages.py
│ │ │ ├── text_includes
│ │ │ │ └── document_assistant_info.md
│ │ │ ├── types.py
│ │ │ └── whiteboard
│ │ │ ├── __init__.py
│ │ │ ├── _inspector.py
│ │ │ └── _whiteboard.py
│ │ ├── assistant.code-workspace
│ │ ├── CLAUDE.md
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── tests
│ │ │ ├── __init__.py
│ │ │ ├── test_convert.py
│ │ │ └── test_data
│ │ │ ├── blank_image.png
│ │ │ ├── Formatting Test.docx
│ │ │ ├── sample_data.csv
│ │ │ ├── sample_data.xlsx
│ │ │ ├── sample_page.html
│ │ │ ├── sample_presentation.pptx
│ │ │ └── simple_pdf.pdf
│ │ └── uv.lock
│ ├── explorer-assistant
│ │ ├── .env.example
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── assistant
│ │ │ ├── __init__.py
│ │ │ ├── chat.py
│ │ │ ├── config.py
│ │ │ ├── helpers.py
│ │ │ ├── response
│ │ │ │ ├── __init__.py
│ │ │ │ ├── model.py
│ │ │ │ ├── response_anthropic.py
│ │ │ │ ├── response_openai.py
│ │ │ │ └── response.py
│ │ │ └── text_includes
│ │ │ └── guardrails_prompt.txt
│ │ ├── assistant.code-workspace
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── guided-conversation-assistant
│ │ ├── .env.example
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── assistant
│ │ │ ├── __init__.py
│ │ │ ├── agents
│ │ │ │ ├── guided_conversation
│ │ │ │ │ ├── config.py
│ │ │ │ │ ├── definition.py
│ │ │ │ │ └── definitions
│ │ │ │ │ ├── er_triage.py
│ │ │ │ │ ├── interview.py
│ │ │ │ │ ├── patient_intake.py
│ │ │ │ │ └── poem_feedback.py
│ │ │ │ └── guided_conversation_agent.py
│ │ │ ├── chat.py
│ │ │ ├── config.py
│ │ │ └── text_includes
│ │ │ └── guardrails_prompt.txt
│ │ ├── assistant.code-workspace
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── knowledge-transfer-assistant
│ │ ├── .claude
│ │ │ └── settings.local.json
│ │ ├── .env.example
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── assistant
│ │ │ ├── __init__.py
│ │ │ ├── agentic
│ │ │ │ ├── __init__.py
│ │ │ │ ├── analysis.py
│ │ │ │ ├── coordinator_support.py
│ │ │ │ └── team_welcome.py
│ │ │ ├── assets
│ │ │ │ ├── icon-knowledge-transfer.svg
│ │ │ │ └── icon.svg
│ │ │ ├── assistant.py
│ │ │ ├── common.py
│ │ │ ├── config.py
│ │ │ ├── conversation_clients.py
│ │ │ ├── conversation_share_link.py
│ │ │ ├── data.py
│ │ │ ├── domain
│ │ │ │ ├── __init__.py
│ │ │ │ ├── audience_manager.py
│ │ │ │ ├── information_request_manager.py
│ │ │ │ ├── knowledge_brief_manager.py
│ │ │ │ ├── knowledge_digest_manager.py
│ │ │ │ ├── learning_objectives_manager.py
│ │ │ │ └── share_manager.py
│ │ │ ├── files.py
│ │ │ ├── logging.py
│ │ │ ├── notifications.py
│ │ │ ├── respond.py
│ │ │ ├── storage_models.py
│ │ │ ├── storage.py
│ │ │ ├── string_utils.py
│ │ │ ├── text_includes
│ │ │ │ ├── assistant_info.md
│ │ │ │ ├── card_content.md
│ │ │ │ ├── coordinator_instructions.txt
│ │ │ │ ├── coordinator_role.txt
│ │ │ │ ├── knowledge_digest_instructions.txt
│ │ │ │ ├── knowledge_digest_prompt.txt
│ │ │ │ ├── share_information_request_detection.txt
│ │ │ │ ├── team_instructions.txt
│ │ │ │ ├── team_role.txt
│ │ │ │ └── welcome_message_generation.txt
│ │ │ ├── tools
│ │ │ │ ├── __init__.py
│ │ │ │ ├── base.py
│ │ │ │ ├── information_requests.py
│ │ │ │ ├── learning_objectives.py
│ │ │ │ ├── learning_outcomes.py
│ │ │ │ ├── progress_tracking.py
│ │ │ │ └── share_setup.py
│ │ │ ├── ui_tabs
│ │ │ │ ├── __init__.py
│ │ │ │ ├── brief.py
│ │ │ │ ├── common.py
│ │ │ │ ├── debug.py
│ │ │ │ ├── learning.py
│ │ │ │ └── sharing.py
│ │ │ └── utils.py
│ │ ├── CLAUDE.md
│ │ ├── docs
│ │ │ ├── design
│ │ │ │ ├── actions.md
│ │ │ │ └── inference.md
│ │ │ ├── DEV_GUIDE.md
│ │ │ ├── how-kta-works.md
│ │ │ ├── JTBD.md
│ │ │ ├── knowledge-transfer-goals.md
│ │ │ ├── learning_assistance.md
│ │ │ ├── notable_claude_conversations
│ │ │ │ ├── clarifying_quad_modal_design.md
│ │ │ │ ├── CLAUDE_PROMPTS.md
│ │ │ │ ├── transfer_state.md
│ │ │ │ └── trying_the_context_agent.md
│ │ │ └── opportunities-of-knowledge-transfer.md
│ │ ├── knowledge-transfer-assistant.code-workspace
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── tests
│ │ │ ├── __init__.py
│ │ │ ├── test_artifact_loading.py
│ │ │ ├── test_inspector.py
│ │ │ ├── test_share_manager.py
│ │ │ ├── test_share_storage.py
│ │ │ ├── test_share_tools.py
│ │ │ └── test_team_mode.py
│ │ └── uv.lock
│ ├── Makefile
│ ├── navigator-assistant
│ │ ├── .env.example
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── assistant
│ │ │ ├── __init__.py
│ │ │ ├── assets
│ │ │ │ ├── card_content.md
│ │ │ │ └── icon.svg
│ │ │ ├── chat.py
│ │ │ ├── config.py
│ │ │ ├── helpers.py
│ │ │ ├── response
│ │ │ │ ├── __init__.py
│ │ │ │ ├── completion_handler.py
│ │ │ │ ├── completion_requestor.py
│ │ │ │ ├── local_tool
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── add_assistant_to_conversation.py
│ │ │ │ │ ├── list_assistant_services.py
│ │ │ │ │ └── model.py
│ │ │ │ ├── models.py
│ │ │ │ ├── prompt.py
│ │ │ │ ├── request_builder.py
│ │ │ │ ├── response.py
│ │ │ │ ├── step_handler.py
│ │ │ │ └── utils
│ │ │ │ ├── __init__.py
│ │ │ │ ├── formatting_utils.py
│ │ │ │ ├── message_utils.py
│ │ │ │ ├── openai_utils.py
│ │ │ │ └── tools.py
│ │ │ ├── text_includes
│ │ │ │ ├── guardrails_prompt.md
│ │ │ │ ├── guidance_prompt.md
│ │ │ │ ├── instruction_prompt.md
│ │ │ │ ├── navigator_assistant_info.md
│ │ │ │ └── semantic_workbench_features.md
│ │ │ └── whiteboard
│ │ │ ├── __init__.py
│ │ │ ├── _inspector.py
│ │ │ └── _whiteboard.py
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── project-assistant
│ │ ├── .cspell
│ │ │ └── custom-dictionary-workspace.txt
│ │ ├── .env.example
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── assistant
│ │ │ ├── __init__.py
│ │ │ ├── agentic
│ │ │ │ ├── __init__.py
│ │ │ │ ├── act.py
│ │ │ │ ├── coordinator_next_action.py
│ │ │ │ ├── create_invitation.py
│ │ │ │ ├── detect_audience_and_takeaways.py
│ │ │ │ ├── detect_coordinator_actions.py
│ │ │ │ ├── detect_information_request_needs.py
│ │ │ │ ├── detect_knowledge_package_gaps.py
│ │ │ │ ├── focus.py
│ │ │ │ ├── respond.py
│ │ │ │ ├── team_welcome.py
│ │ │ │ └── update_digest.py
│ │ │ ├── assets
│ │ │ │ ├── icon-knowledge-transfer.svg
│ │ │ │ └── icon.svg
│ │ │ ├── assistant.py
│ │ │ ├── common.py
│ │ │ ├── config.py
│ │ │ ├── conversation_clients.py
│ │ │ ├── data.py
│ │ │ ├── domain
│ │ │ │ ├── __init__.py
│ │ │ │ ├── audience_manager.py
│ │ │ │ ├── conversation_preferences_manager.py
│ │ │ │ ├── information_request_manager.py
│ │ │ │ ├── knowledge_brief_manager.py
│ │ │ │ ├── knowledge_digest_manager.py
│ │ │ │ ├── learning_objectives_manager.py
│ │ │ │ ├── share_manager.py
│ │ │ │ ├── tasks_manager.py
│ │ │ │ └── transfer_manager.py
│ │ │ ├── errors.py
│ │ │ ├── files.py
│ │ │ ├── logging.py
│ │ │ ├── notifications.py
│ │ │ ├── prompt_utils.py
│ │ │ ├── storage.py
│ │ │ ├── string_utils.py
│ │ │ ├── text_includes
│ │ │ │ ├── actor_instructions.md
│ │ │ │ ├── assistant_info.md
│ │ │ │ ├── card_content.md
│ │ │ │ ├── coordinator_instructions copy.md
│ │ │ │ ├── coordinator_instructions.md
│ │ │ │ ├── create_invitation.md
│ │ │ │ ├── detect_audience.md
│ │ │ │ ├── detect_coordinator_actions.md
│ │ │ │ ├── detect_information_request_needs.md
│ │ │ │ ├── detect_knowledge_package_gaps.md
│ │ │ │ ├── focus.md
│ │ │ │ ├── knowledge_digest_instructions.txt
│ │ │ │ ├── team_instructions.txt
│ │ │ │ ├── to_do.md
│ │ │ │ ├── update_knowledge_brief.md
│ │ │ │ ├── update_knowledge_digest.md
│ │ │ │ └── welcome_message_generation.txt
│ │ │ ├── tools
│ │ │ │ ├── __init__.py
│ │ │ │ ├── base.py
│ │ │ │ ├── conversation_preferences.py
│ │ │ │ ├── information_requests.py
│ │ │ │ ├── learning_objectives.py
│ │ │ │ ├── learning_outcomes.py
│ │ │ │ ├── progress_tracking.py
│ │ │ │ ├── share_setup.py
│ │ │ │ ├── system_reminders.py
│ │ │ │ ├── tasks.py
│ │ │ │ └── todo.py
│ │ │ ├── ui_tabs
│ │ │ │ ├── __init__.py
│ │ │ │ ├── brief.py
│ │ │ │ ├── common.py
│ │ │ │ ├── debug.py
│ │ │ │ ├── learning.py
│ │ │ │ └── sharing.py
│ │ │ └── utils.py
│ │ ├── CLAUDE.md
│ │ ├── docs
│ │ │ ├── design
│ │ │ │ ├── actions.md
│ │ │ │ ├── control_options.md
│ │ │ │ ├── design.md
│ │ │ │ ├── inference.md
│ │ │ │ └── PXL_20250814_190140267.jpg
│ │ │ ├── DEV_GUIDE.md
│ │ │ ├── how-kta-works.md
│ │ │ ├── JTBD.md
│ │ │ ├── knowledge-transfer-goals.md
│ │ │ ├── learning_assistance.md
│ │ │ ├── notable_claude_conversations
│ │ │ │ ├── clarifying_quad_modal_design.md
│ │ │ │ ├── CLAUDE_PROMPTS.md
│ │ │ │ ├── transfer_state.md
│ │ │ │ └── trying_the_context_agent.md
│ │ │ └── opportunities-of-knowledge-transfer.md
│ │ ├── knowledge-transfer-assistant.code-workspace
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── tests
│ │ │ ├── __init__.py
│ │ │ ├── test_artifact_loading.py
│ │ │ ├── test_inspector.py
│ │ │ ├── test_share_manager.py
│ │ │ ├── test_share_storage.py
│ │ │ └── test_team_mode.py
│ │ └── uv.lock
│ ├── prospector-assistant
│ │ ├── .env.example
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── assistant
│ │ │ ├── __init__.py
│ │ │ ├── agents
│ │ │ │ ├── artifact_agent.py
│ │ │ │ ├── document
│ │ │ │ │ ├── config.py
│ │ │ │ │ ├── gc_draft_content_feedback_config.py
│ │ │ │ │ ├── gc_draft_outline_feedback_config.py
│ │ │ │ │ ├── guided_conversation.py
│ │ │ │ │ └── state.py
│ │ │ │ └── document_agent.py
│ │ │ ├── artifact_creation_extension
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _llm.py
│ │ │ │ ├── config.py
│ │ │ │ ├── document.py
│ │ │ │ ├── extension.py
│ │ │ │ ├── store.py
│ │ │ │ ├── test
│ │ │ │ │ ├── conftest.py
│ │ │ │ │ ├── evaluation.py
│ │ │ │ │ ├── test_completion_with_tools.py
│ │ │ │ │ └── test_extension.py
│ │ │ │ └── tools.py
│ │ │ ├── chat.py
│ │ │ ├── config.py
│ │ │ ├── form_fill_extension
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.py
│ │ │ │ ├── extension.py
│ │ │ │ ├── inspector.py
│ │ │ │ ├── state.py
│ │ │ │ └── steps
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _guided_conversation.py
│ │ │ │ ├── _llm.py
│ │ │ │ ├── acquire_form_step.py
│ │ │ │ ├── extract_form_fields_step.py
│ │ │ │ ├── fill_form_step.py
│ │ │ │ └── types.py
│ │ │ ├── helpers.py
│ │ │ ├── legacy.py
│ │ │ └── text_includes
│ │ │ ├── artifact_agent_enabled.md
│ │ │ ├── guardrails_prompt.txt
│ │ │ ├── guided_conversation_agent_enabled.md
│ │ │ └── skills_agent_enabled.md
│ │ ├── assistant.code-workspace
│ │ ├── gc_learnings
│ │ │ ├── gc_learnings.md
│ │ │ └── images
│ │ │ ├── gc_conversation_plan_fcn.png
│ │ │ ├── gc_conversation_plan_template.png
│ │ │ ├── gc_execute_plan_callstack.png
│ │ │ ├── gc_functions.png
│ │ │ ├── gc_generate_plan_callstack.png
│ │ │ ├── gc_get_resource_instructions.png
│ │ │ ├── gc_get_termination_instructions.png
│ │ │ ├── gc_kernel_arguments.png
│ │ │ ├── gc_plan_calls.png
│ │ │ ├── gc_termination_instructions.png
│ │ │ ├── sk_get_chat_message_contents.png
│ │ │ ├── sk_inner_get_chat_message_contents.png
│ │ │ ├── sk_send_request_prep.png
│ │ │ └── sk_send_request.png
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ └── skill-assistant
│ ├── .env.example
│ ├── .vscode
│ │ ├── launch.json
│ │ └── settings.json
│ ├── assistant
│ │ ├── __init__.py
│ │ ├── config.py
│ │ ├── logging.py
│ │ ├── skill_assistant.py
│ │ ├── skill_engine_registry.py
│ │ ├── skill_event_mapper.py
│ │ ├── text_includes
│ │ │ └── guardrails_prompt.txt
│ │ └── workbench_helpers.py
│ ├── assistant.code-workspace
│ ├── Makefile
│ ├── pyproject.toml
│ ├── README.md
│ ├── tests
│ │ └── test_setup.py
│ └── uv.lock
├── CLAUDE.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── docs
│ ├── .vscode
│ │ └── settings.json
│ ├── ASSISTANT_CONFIG.md
│ ├── ASSISTANT_DEVELOPMENT_GUIDE.md
│ ├── CUSTOM_APP_REGISTRATION.md
│ ├── HOSTED_ASSISTANT_WITH_LOCAL_MCP_SERVERS.md
│ ├── images
│ │ ├── architecture-animation.gif
│ │ ├── configure_assistant.png
│ │ ├── conversation_canvas_open.png
│ │ ├── conversation_duplicate.png
│ │ ├── conversation_export.png
│ │ ├── conversation_share_dialog.png
│ │ ├── conversation_share_link.png
│ │ ├── dashboard_configured_view.png
│ │ ├── dashboard_view.png
│ │ ├── license_agreement.png
│ │ ├── message_bar.png
│ │ ├── message_inspection.png
│ │ ├── message_link.png
│ │ ├── new_prospector_assistant_dialog.png
│ │ ├── open_conversation_canvas.png
│ │ ├── prospector_example.png
│ │ ├── readme1.png
│ │ ├── readme2.png
│ │ ├── readme3.png
│ │ ├── rewind.png
│ │ ├── signin_page.png
│ │ └── splash_screen.png
│ ├── LOCAL_ASSISTANT_WITH_REMOTE_WORKBENCH.md
│ ├── SETUP_DEV_ENVIRONMENT.md
│ └── WORKBENCH_APP.md
├── examples
│ ├── dotnet
│ │ ├── .editorconfig
│ │ ├── dotnet-01-echo-bot
│ │ │ ├── appsettings.json
│ │ │ ├── dotnet-01-echo-bot.csproj
│ │ │ ├── MyAgent.cs
│ │ │ ├── MyAgentConfig.cs
│ │ │ ├── MyWorkbenchConnector.cs
│ │ │ ├── Program.cs
│ │ │ └── README.md
│ │ ├── dotnet-02-message-types-demo
│ │ │ ├── appsettings.json
│ │ │ ├── ConnectorExtensions.cs
│ │ │ ├── docs
│ │ │ │ ├── abc.png
│ │ │ │ ├── code.png
│ │ │ │ ├── config.png
│ │ │ │ ├── echo.png
│ │ │ │ ├── markdown.png
│ │ │ │ ├── mermaid.png
│ │ │ │ ├── reverse.png
│ │ │ │ └── safety-check.png
│ │ │ ├── dotnet-02-message-types-demo.csproj
│ │ │ ├── MyAgent.cs
│ │ │ ├── MyAgentConfig.cs
│ │ │ ├── MyWorkbenchConnector.cs
│ │ │ ├── Program.cs
│ │ │ └── README.md
│ │ └── dotnet-03-simple-chatbot
│ │ ├── appsettings.json
│ │ ├── ConnectorExtensions.cs
│ │ ├── dotnet-03-simple-chatbot.csproj
│ │ ├── MyAgent.cs
│ │ ├── MyAgentConfig.cs
│ │ ├── MyWorkbenchConnector.cs
│ │ ├── Program.cs
│ │ └── README.md
│ ├── Makefile
│ └── python
│ ├── python-01-echo-bot
│ │ ├── .env.example
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── assistant
│ │ │ ├── __init__.py
│ │ │ ├── chat.py
│ │ │ └── config.py
│ │ ├── assistant.code-workspace
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── python-02-simple-chatbot
│ │ ├── .env.example
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── assistant
│ │ │ ├── __init__.py
│ │ │ ├── chat.py
│ │ │ ├── config.py
│ │ │ └── text_includes
│ │ │ └── guardrails_prompt.txt
│ │ ├── assistant.code-workspace
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ └── python-03-multimodel-chatbot
│ ├── .env.example
│ ├── .vscode
│ │ ├── launch.json
│ │ └── settings.json
│ ├── assistant
│ │ ├── __init__.py
│ │ ├── chat.py
│ │ ├── config.py
│ │ ├── model_adapters.py
│ │ └── text_includes
│ │ └── guardrails_prompt.txt
│ ├── assistant.code-workspace
│ ├── Makefile
│ ├── pyproject.toml
│ ├── README.md
│ └── uv.lock
├── KNOWN_ISSUES.md
├── libraries
│ ├── dotnet
│ │ ├── .editorconfig
│ │ ├── pack.sh
│ │ ├── README.md
│ │ ├── SemanticWorkbench.sln
│ │ ├── SemanticWorkbench.sln.DotSettings
│ │ └── WorkbenchConnector
│ │ ├── AgentBase.cs
│ │ ├── AgentConfig
│ │ │ ├── AgentConfigBase.cs
│ │ │ ├── AgentConfigPropertyAttribute.cs
│ │ │ └── ConfigUtils.cs
│ │ ├── Constants.cs
│ │ ├── IAgentBase.cs
│ │ ├── icon.png
│ │ ├── Models
│ │ │ ├── Command.cs
│ │ │ ├── Conversation.cs
│ │ │ ├── ConversationEvent.cs
│ │ │ ├── DebugInfo.cs
│ │ │ ├── Insight.cs
│ │ │ ├── Message.cs
│ │ │ ├── MessageMetadata.cs
│ │ │ ├── Participant.cs
│ │ │ ├── Sender.cs
│ │ │ └── ServiceInfo.cs
│ │ ├── Storage
│ │ │ ├── AgentInfo.cs
│ │ │ ├── AgentServiceStorage.cs
│ │ │ └── IAgentServiceStorage.cs
│ │ ├── StringLoggingExtensions.cs
│ │ ├── Webservice.cs
│ │ ├── WorkbenchConfig.cs
│ │ ├── WorkbenchConnector.cs
│ │ └── WorkbenchConnector.csproj
│ ├── Makefile
│ └── python
│ ├── anthropic-client
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── anthropic_client
│ │ │ ├── __init__.py
│ │ │ ├── client.py
│ │ │ ├── config.py
│ │ │ └── messages.py
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── assistant-data-gen
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── assistant_data_gen
│ │ │ ├── __init__.py
│ │ │ ├── assistant_api.py
│ │ │ ├── config.py
│ │ │ ├── gce
│ │ │ │ ├── __init__.py
│ │ │ │ ├── gce_agent.py
│ │ │ │ └── prompts.py
│ │ │ └── pydantic_ai_utils.py
│ │ ├── configs
│ │ │ └── document_assistant_example_config.yaml
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── scripts
│ │ │ ├── gce_simulation.py
│ │ │ └── generate_scenario.py
│ │ └── uv.lock
│ ├── assistant-drive
│ │ ├── .gitignore
│ │ ├── .vscode
│ │ │ ├── extensions.json
│ │ │ └── settings.json
│ │ ├── assistant_drive
│ │ │ ├── __init__.py
│ │ │ ├── drive.py
│ │ │ └── tests
│ │ │ └── test_basic.py
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── pytest.ini
│ │ ├── README.md
│ │ ├── usage.ipynb
│ │ └── uv.lock
│ ├── assistant-extensions
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── assistant_extensions
│ │ │ ├── __init__.py
│ │ │ ├── ai_clients
│ │ │ │ └── config.py
│ │ │ ├── artifacts
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _artifacts.py
│ │ │ │ ├── _inspector.py
│ │ │ │ └── _model.py
│ │ │ ├── attachments
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _attachments.py
│ │ │ │ ├── _convert.py
│ │ │ │ ├── _model.py
│ │ │ │ ├── _shared.py
│ │ │ │ └── _summarizer.py
│ │ │ ├── chat_context_toolkit
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _config.py
│ │ │ │ ├── archive
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── _archive.py
│ │ │ │ │ └── _summarizer.py
│ │ │ │ ├── message_history
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── _history.py
│ │ │ │ │ └── _message.py
│ │ │ │ └── virtual_filesystem
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _archive_file_source.py
│ │ │ │ └── _attachments_file_source.py
│ │ │ ├── dashboard_card
│ │ │ │ ├── __init__.py
│ │ │ │ └── _dashboard_card.py
│ │ │ ├── document_editor
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _extension.py
│ │ │ │ ├── _inspector.py
│ │ │ │ └── _model.py
│ │ │ ├── mcp
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _assistant_file_resource_handler.py
│ │ │ │ ├── _client_utils.py
│ │ │ │ ├── _devtunnel.py
│ │ │ │ ├── _model.py
│ │ │ │ ├── _openai_utils.py
│ │ │ │ ├── _sampling_handler.py
│ │ │ │ ├── _tool_utils.py
│ │ │ │ └── _workbench_file_resource_handler.py
│ │ │ ├── navigator
│ │ │ │ ├── __init__.py
│ │ │ │ └── _navigator.py
│ │ │ └── workflows
│ │ │ ├── __init__.py
│ │ │ ├── _model.py
│ │ │ ├── _workflows.py
│ │ │ └── runners
│ │ │ └── _user_proxy.py
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── test
│ │ │ └── attachments
│ │ │ └── test_attachments.py
│ │ └── uv.lock
│ ├── chat-context-toolkit
│ │ ├── .claude
│ │ │ └── settings.local.json
│ │ ├── .env.sample
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── assets
│ │ │ ├── archive_v1.png
│ │ │ ├── history_v1.png
│ │ │ └── vfs_v1.png
│ │ ├── chat_context_toolkit
│ │ │ ├── __init__.py
│ │ │ ├── archive
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _archive_reader.py
│ │ │ │ ├── _archive_task_queue.py
│ │ │ │ ├── _state.py
│ │ │ │ ├── _types.py
│ │ │ │ └── summarization
│ │ │ │ ├── __init__.py
│ │ │ │ └── _summarizer.py
│ │ │ ├── history
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _budget.py
│ │ │ │ ├── _decorators.py
│ │ │ │ ├── _history.py
│ │ │ │ ├── _prioritize.py
│ │ │ │ ├── _types.py
│ │ │ │ └── tool_abbreviations
│ │ │ │ ├── __init__.py
│ │ │ │ └── _tool_abbreviations.py
│ │ │ └── virtual_filesystem
│ │ │ ├── __init__.py
│ │ │ ├── _types.py
│ │ │ ├── _virtual_filesystem.py
│ │ │ ├── README.md
│ │ │ └── tools
│ │ │ ├── __init__.py
│ │ │ ├── _ls_tool.py
│ │ │ ├── _tools.py
│ │ │ └── _view_tool.py
│ │ ├── CLAUDE.md
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── test
│ │ │ ├── archive
│ │ │ │ └── test_archive_reader.py
│ │ │ ├── history
│ │ │ │ ├── test_abbreviate_messages.py
│ │ │ │ ├── test_history.py
│ │ │ │ ├── test_pair_and_order_tool_messages.py
│ │ │ │ ├── test_prioritize.py
│ │ │ │ └── test_truncate_messages.py
│ │ │ └── virtual_filesystem
│ │ │ ├── test_virtual_filesystem.py
│ │ │ └── tools
│ │ │ ├── test_ls_tool.py
│ │ │ ├── test_tools.py
│ │ │ └── test_view_tool.py
│ │ └── uv.lock
│ ├── content-safety
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── content_safety
│ │ │ ├── __init__.py
│ │ │ ├── evaluators
│ │ │ │ ├── __init__.py
│ │ │ │ ├── azure_content_safety
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── evaluator.py
│ │ │ │ ├── config.py
│ │ │ │ ├── evaluator.py
│ │ │ │ └── openai_moderations
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.py
│ │ │ │ └── evaluator.py
│ │ │ └── README.md
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── events
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── events
│ │ │ ├── __init__.py
│ │ │ └── events.py
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── guided-conversation
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── guided_conversation
│ │ │ ├── __init__.py
│ │ │ ├── functions
│ │ │ │ ├── __init__.py
│ │ │ │ ├── conversation_plan.py
│ │ │ │ ├── execution.py
│ │ │ │ └── final_update_plan.py
│ │ │ ├── guided_conversation_agent.py
│ │ │ ├── plugins
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agenda.py
│ │ │ │ └── artifact.py
│ │ │ └── utils
│ │ │ ├── __init__.py
│ │ │ ├── base_model_llm.py
│ │ │ ├── conversation_helpers.py
│ │ │ ├── openai_tool_calling.py
│ │ │ ├── plugin_helpers.py
│ │ │ └── resources.py
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── llm-client
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── llm_client
│ │ │ ├── __init__.py
│ │ │ └── model.py
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── Makefile
│ ├── mcp-extensions
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── Makefile
│ │ ├── mcp_extensions
│ │ │ ├── __init__.py
│ │ │ ├── _client_session.py
│ │ │ ├── _model.py
│ │ │ ├── _sampling.py
│ │ │ ├── _server_extensions.py
│ │ │ ├── _tool_utils.py
│ │ │ ├── llm
│ │ │ │ ├── __init__.py
│ │ │ │ ├── chat_completion.py
│ │ │ │ ├── helpers.py
│ │ │ │ ├── llm_types.py
│ │ │ │ ├── mcp_chat_completion.py
│ │ │ │ └── openai_chat_completion.py
│ │ │ └── server
│ │ │ ├── __init__.py
│ │ │ └── storage.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── tests
│ │ │ └── test_tool_utils.py
│ │ └── uv.lock
│ ├── mcp-tunnel
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── Makefile
│ │ ├── mcp_tunnel
│ │ │ ├── __init__.py
│ │ │ ├── _devtunnel.py
│ │ │ ├── _dir.py
│ │ │ └── _main.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── openai-client
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── Makefile
│ │ ├── openai_client
│ │ │ ├── __init__.py
│ │ │ ├── chat_driver
│ │ │ │ ├── __init__.py
│ │ │ │ ├── chat_driver.ipynb
│ │ │ │ ├── chat_driver.py
│ │ │ │ ├── message_history_providers
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── in_memory_message_history_provider.py
│ │ │ │ │ ├── local_message_history_provider.py
│ │ │ │ │ ├── message_history_provider.py
│ │ │ │ │ └── tests
│ │ │ │ │ └── formatted_instructions_test.py
│ │ │ │ └── README.md
│ │ │ ├── client.py
│ │ │ ├── completion.py
│ │ │ ├── config.py
│ │ │ ├── errors.py
│ │ │ ├── logging.py
│ │ │ ├── messages.py
│ │ │ ├── tokens.py
│ │ │ └── tools.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── tests
│ │ │ ├── test_command_parsing.py
│ │ │ ├── test_formatted_messages.py
│ │ │ ├── test_messages.py
│ │ │ └── test_tokens.py
│ │ └── uv.lock
│ ├── semantic-workbench-api-model
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── semantic_workbench_api_model
│ │ │ ├── __init__.py
│ │ │ ├── assistant_model.py
│ │ │ ├── assistant_service_client.py
│ │ │ ├── workbench_model.py
│ │ │ └── workbench_service_client.py
│ │ └── uv.lock
│ ├── semantic-workbench-assistant
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── Makefile
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── semantic_workbench_assistant
│ │ │ ├── __init__.py
│ │ │ ├── assistant_app
│ │ │ │ ├── __init__.py
│ │ │ │ ├── assistant.py
│ │ │ │ ├── config.py
│ │ │ │ ├── content_safety.py
│ │ │ │ ├── context.py
│ │ │ │ ├── error.py
│ │ │ │ ├── export_import.py
│ │ │ │ ├── protocol.py
│ │ │ │ └── service.py
│ │ │ ├── assistant_service.py
│ │ │ ├── auth.py
│ │ │ ├── canonical.py
│ │ │ ├── command.py
│ │ │ ├── config.py
│ │ │ ├── logging_config.py
│ │ │ ├── settings.py
│ │ │ ├── start.py
│ │ │ └── storage.py
│ │ ├── tests
│ │ │ ├── conftest.py
│ │ │ ├── test_assistant_app.py
│ │ │ ├── test_canonical.py
│ │ │ ├── test_config.py
│ │ │ └── test_storage.py
│ │ └── uv.lock
│ └── skills
│ ├── .vscode
│ │ └── settings.json
│ ├── Makefile
│ ├── README.md
│ └── skill-library
│ ├── .vscode
│ │ └── settings.json
│ ├── docs
│ │ └── vs-recipe-tool.md
│ ├── Makefile
│ ├── pyproject.toml
│ ├── README.md
│ ├── skill_library
│ │ ├── __init__.py
│ │ ├── chat_driver_helpers.py
│ │ ├── cli
│ │ │ ├── azure_openai.py
│ │ │ ├── conversation_history.py
│ │ │ ├── README.md
│ │ │ ├── run_routine.py
│ │ │ ├── settings.py
│ │ │ └── skill_logger.py
│ │ ├── engine.py
│ │ ├── llm_info.txt
│ │ ├── logging.py
│ │ ├── README.md
│ │ ├── routine_stack.py
│ │ ├── skill.py
│ │ ├── skills
│ │ │ ├── common
│ │ │ │ ├── __init__.py
│ │ │ │ ├── common_skill.py
│ │ │ │ └── routines
│ │ │ │ ├── bing_search.py
│ │ │ │ ├── consolidate.py
│ │ │ │ ├── echo.py
│ │ │ │ ├── gather_context.py
│ │ │ │ ├── get_content_from_url.py
│ │ │ │ ├── gpt_complete.py
│ │ │ │ ├── select_user_intent.py
│ │ │ │ └── summarize.py
│ │ │ ├── eval
│ │ │ │ ├── __init__.py
│ │ │ │ ├── eval_skill.py
│ │ │ │ └── routines
│ │ │ │ └── eval.py
│ │ │ ├── fabric
│ │ │ │ ├── __init__.py
│ │ │ │ ├── fabric_skill.py
│ │ │ │ ├── patterns
│ │ │ │ │ ├── agility_story
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── ai
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_answers
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_candidates
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── analyze_cfp_submission
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_claims
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── analyze_comments
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_debate
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_email_headers
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── analyze_incident
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── analyze_interviewer_techniques
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_logs
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_malware
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_military_strategy
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_mistakes
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_paper
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── analyze_patent
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_personality
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_presentation
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_product_feedback
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_proposition
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── analyze_prose
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── analyze_prose_json
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── analyze_prose_pinker
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_risk
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_sales_call
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_spiritual_text
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── analyze_tech_impact
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── analyze_threat_report
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── analyze_threat_report_cmds
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── analyze_threat_report_trends
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── answer_interview_question
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── ask_secure_by_design_questions
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── ask_uncle_duke
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── capture_thinkers_work
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── check_agreement
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── clean_text
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── coding_master
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── compare_and_contrast
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── convert_to_markdown
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_5_sentence_summary
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_academic_paper
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_ai_jobs_analysis
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_aphorisms
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── create_art_prompt
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_better_frame
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── create_coding_project
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_command
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── create_cyber_summary
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_design_document
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_diy
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_formal_email
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_git_diff_commit
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_graph_from_input
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_hormozi_offer
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_idea_compass
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_investigation_visualization
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_keynote
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_logo
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── create_markmap_visualization
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_mermaid_visualization
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_mermaid_visualization_for_github
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_micro_summary
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_network_threat_landscape
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── create_newsletter_entry
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── create_npc
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── create_pattern
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_prd
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_prediction_block
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_quiz
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_reading_plan
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_recursive_outline
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_report_finding
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── create_rpg_summary
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_security_update
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── create_show_intro
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_sigma_rules
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_story_explanation
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_stride_threat_model
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_summary
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_tags
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_threat_scenarios
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_ttrc_graph
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_ttrc_narrative
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_upgrade_pack
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_user_story
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── create_video_chapters
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── create_visualization
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── dialog_with_socrates
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── enrich_blog_post
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── explain_code
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── explain_docs
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── explain_math
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── explain_project
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── explain_terms
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── export_data_as_csv
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_algorithm_update_recommendations
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── extract_article_wisdom
│ │ │ │ │ │ ├── dmiessler
│ │ │ │ │ │ │ └── extract_wisdom-1.0.0
│ │ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ │ └── user.md
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── extract_book_ideas
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_book_recommendations
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_business_ideas
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_controversial_ideas
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_core_message
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_ctf_writeup
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_domains
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_extraordinary_claims
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_ideas
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_insights
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_insights_dm
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_instructions
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_jokes
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_latest_video
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_main_idea
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_most_redeeming_thing
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_patterns
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_poc
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── extract_predictions
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_primary_problem
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_primary_solution
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_product_features
│ │ │ │ │ │ ├── dmiessler
│ │ │ │ │ │ │ └── extract_wisdom-1.0.0
│ │ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ │ └── user.md
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_questions
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_recipe
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_recommendations
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── extract_references
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── extract_skills
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_song_meaning
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_sponsors
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_videoid
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── extract_wisdom
│ │ │ │ │ │ ├── dmiessler
│ │ │ │ │ │ │ └── extract_wisdom-1.0.0
│ │ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ │ └── user.md
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_wisdom_agents
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_wisdom_dm
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── extract_wisdom_nometa
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── find_hidden_message
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── find_logical_fallacies
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── get_wow_per_minute
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── get_youtube_rss
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── humanize
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── identify_dsrp_distinctions
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── identify_dsrp_perspectives
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── identify_dsrp_relationships
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── identify_dsrp_systems
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── identify_job_stories
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── improve_academic_writing
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── improve_prompt
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── improve_report_finding
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── improve_writing
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── judge_output
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── label_and_rate
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── loaded
│ │ │ │ │ ├── md_callout
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── official_pattern_template
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── pattern_explanations.md
│ │ │ │ │ ├── prepare_7s_strategy
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── provide_guidance
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── rate_ai_response
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── rate_ai_result
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── rate_content
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── rate_value
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── raw_query
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── raycast
│ │ │ │ │ │ ├── capture_thinkers_work
│ │ │ │ │ │ ├── create_story_explanation
│ │ │ │ │ │ ├── extract_primary_problem
│ │ │ │ │ │ ├── extract_wisdom
│ │ │ │ │ │ └── yt
│ │ │ │ │ ├── recommend_artists
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── recommend_pipeline_upgrades
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── recommend_talkpanel_topics
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── refine_design_document
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── review_design
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── sanitize_broken_html_to_markdown
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── show_fabric_options_markmap
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── solve_with_cot
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── stringify
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── suggest_pattern
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── summarize
│ │ │ │ │ │ ├── dmiessler
│ │ │ │ │ │ │ └── summarize
│ │ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ │ └── user.md
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── summarize_debate
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── summarize_git_changes
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── summarize_git_diff
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── summarize_lecture
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── summarize_legislation
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── summarize_meeting
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── summarize_micro
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── summarize_newsletter
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── summarize_paper
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── summarize_prompt
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── summarize_pull-requests
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── summarize_rpg_session
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_analyze_challenge_handling
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_check_metrics
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_create_h3_career
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_create_opening_sentences
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_describe_life_outlook
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_extract_intro_sentences
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_extract_panel_topics
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_find_blindspots
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_find_negative_thinking
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_find_neglected_goals
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_give_encouragement
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_red_team_thinking
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_threat_model_plans
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_visualize_mission_goals_projects
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── t_year_in_review
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── to_flashcards
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── transcribe_minutes
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── translate
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── tweet
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── write_essay
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── write_hackerone_report
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── write_latex
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── write_micro_essay
│ │ │ │ │ │ └── system.md
│ │ │ │ │ ├── write_nuclei_template_rule
│ │ │ │ │ │ ├── system.md
│ │ │ │ │ │ └── user.md
│ │ │ │ │ ├── write_pull-request
│ │ │ │ │ │ └── system.md
│ │ │ │ │ └── write_semgrep_rule
│ │ │ │ │ ├── system.md
│ │ │ │ │ └── user.md
│ │ │ │ └── routines
│ │ │ │ ├── list.py
│ │ │ │ ├── run.py
│ │ │ │ └── show.py
│ │ │ ├── guided_conversation
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agenda.py
│ │ │ │ ├── artifact_helpers.py
│ │ │ │ ├── chat_completions
│ │ │ │ │ ├── fix_agenda_error.py
│ │ │ │ │ ├── fix_artifact_error.py
│ │ │ │ │ ├── generate_agenda.py
│ │ │ │ │ ├── generate_artifact_updates.py
│ │ │ │ │ ├── generate_final_artifact.py
│ │ │ │ │ └── generate_message.py
│ │ │ │ ├── conversation_guides
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── acrostic_poem.py
│ │ │ │ │ ├── er_triage.py
│ │ │ │ │ ├── interview.py
│ │ │ │ │ └── patient_intake.py
│ │ │ │ ├── guide.py
│ │ │ │ ├── guided_conversation_skill.py
│ │ │ │ ├── logging.py
│ │ │ │ ├── message.py
│ │ │ │ ├── resources.py
│ │ │ │ ├── routines
│ │ │ │ │ └── guided_conversation.py
│ │ │ │ └── tests
│ │ │ │ ├── conftest.py
│ │ │ │ ├── test_artifact_helpers.py
│ │ │ │ ├── test_generate_agenda.py
│ │ │ │ ├── test_generate_artifact_updates.py
│ │ │ │ ├── test_generate_final_artifact.py
│ │ │ │ └── test_resource.py
│ │ │ ├── meta
│ │ │ │ ├── __init__.py
│ │ │ │ ├── meta_skill.py
│ │ │ │ ├── README.md
│ │ │ │ └── routines
│ │ │ │ └── generate_routine.py
│ │ │ ├── posix
│ │ │ │ ├── __init__.py
│ │ │ │ ├── posix_skill.py
│ │ │ │ ├── routines
│ │ │ │ │ ├── append_file.py
│ │ │ │ │ ├── cd.py
│ │ │ │ │ ├── ls.py
│ │ │ │ │ ├── make_home_dir.py
│ │ │ │ │ ├── mkdir.py
│ │ │ │ │ ├── mv.py
│ │ │ │ │ ├── pwd.py
│ │ │ │ │ ├── read_file.py
│ │ │ │ │ ├── rm.py
│ │ │ │ │ ├── touch.py
│ │ │ │ │ └── write_file.py
│ │ │ │ └── sandbox_shell.py
│ │ │ ├── README.md
│ │ │ ├── research
│ │ │ │ ├── __init__.py
│ │ │ │ ├── README.md
│ │ │ │ ├── research_skill.py
│ │ │ │ └── routines
│ │ │ │ ├── answer_question_about_content.py
│ │ │ │ ├── evaluate_answer.py
│ │ │ │ ├── generate_research_plan.py
│ │ │ │ ├── generate_search_query.py
│ │ │ │ ├── update_research_plan.py
│ │ │ │ ├── web_research.py
│ │ │ │ └── web_search.py
│ │ │ ├── research2
│ │ │ │ ├── __init__.py
│ │ │ │ ├── README.md
│ │ │ │ ├── research_skill.py
│ │ │ │ └── routines
│ │ │ │ ├── facts.py
│ │ │ │ ├── make_final_report.py
│ │ │ │ ├── research.py
│ │ │ │ ├── search_plan.py
│ │ │ │ ├── search.py
│ │ │ │ └── visit_pages.py
│ │ │ └── web_research
│ │ │ ├── __init__.py
│ │ │ ├── README.md
│ │ │ ├── research_skill.py
│ │ │ └── routines
│ │ │ ├── facts.py
│ │ │ ├── make_final_report.py
│ │ │ ├── research.py
│ │ │ ├── search_plan.py
│ │ │ ├── search.py
│ │ │ └── visit_pages.py
│ │ ├── tests
│ │ │ ├── test_common_skill.py
│ │ │ ├── test_integration.py
│ │ │ ├── test_routine_stack.py
│ │ │ ├── tst_skill
│ │ │ │ ├── __init__.py
│ │ │ │ └── routines
│ │ │ │ ├── __init__.py
│ │ │ │ └── a_routine.py
│ │ │ └── utilities
│ │ │ ├── test_find_template_vars.py
│ │ │ ├── test_make_arg_set.py
│ │ │ ├── test_paramspec.py
│ │ │ ├── test_parse_command_string.py
│ │ │ └── test_to_string.py
│ │ ├── types.py
│ │ ├── usage.py
│ │ └── utilities.py
│ └── uv.lock
├── LICENSE
├── Makefile
├── mcp-servers
│ ├── ai-assist-content
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── mcp-example-brave-search.md
│ │ ├── mcp-fastmcp-typescript-README.md
│ │ ├── mcp-llms-full.txt
│ │ ├── mcp-metadata-tips.md
│ │ ├── mcp-python-sdk-README.md
│ │ ├── mcp-typescript-sdk-README.md
│ │ ├── pydanticai-documentation.md
│ │ ├── pydanticai-example-question-graph.md
│ │ ├── pydanticai-example-weather.md
│ │ ├── pydanticai-tutorial.md
│ │ └── README.md
│ ├── Makefile
│ ├── mcp-server-bing-search
│ │ ├── .env.example
│ │ ├── .gitignore
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── Makefile
│ │ ├── mcp_server_bing_search
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── prompts
│ │ │ │ ├── __init__.py
│ │ │ │ ├── clean_website.py
│ │ │ │ └── filter_links.py
│ │ │ ├── server.py
│ │ │ ├── start.py
│ │ │ ├── tools.py
│ │ │ ├── types.py
│ │ │ ├── utils.py
│ │ │ └── web
│ │ │ ├── __init__.py
│ │ │ ├── get_content.py
│ │ │ ├── llm_processing.py
│ │ │ ├── process_website.py
│ │ │ └── search_bing.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── tests
│ │ │ └── test_tools.py
│ │ └── uv.lock
│ ├── mcp-server-bundle
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── Makefile
│ │ ├── mcp_server_bundle
│ │ │ ├── __init__.py
│ │ │ └── main.py
│ │ ├── pyinstaller.spec
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── mcp-server-filesystem
│ │ ├── .env.example
│ │ ├── .github
│ │ │ └── workflows
│ │ │ └── ci.yml
│ │ ├── .gitignore
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── Makefile
│ │ ├── mcp_server_filesystem
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── server.py
│ │ │ └── start.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── tests
│ │ │ └── test_filesystem.py
│ │ └── uv.lock
│ ├── mcp-server-filesystem-edit
│ │ ├── .env.example
│ │ ├── .gitignore
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── data
│ │ │ ├── attachments
│ │ │ │ ├── Daily Game Ideas.txt
│ │ │ │ ├── Frontend Framework Proposal.txt
│ │ │ │ ├── ReDoodle.txt
│ │ │ │ └── Research Template.tex
│ │ │ ├── test_cases.yaml
│ │ │ └── transcripts
│ │ │ ├── transcript_research_simple.md
│ │ │ ├── transcript_Startup_Idea_1_202503031513.md
│ │ │ ├── transcript_Startup_Idea_2_202503031659.md
│ │ │ └── transcript_Web_Frontends_202502281551.md
│ │ ├── Makefile
│ │ ├── mcp_server_filesystem_edit
│ │ │ ├── __init__.py
│ │ │ ├── app_handling
│ │ │ │ ├── __init__.py
│ │ │ │ ├── excel.py
│ │ │ │ ├── miktex.py
│ │ │ │ ├── office_common.py
│ │ │ │ ├── powerpoint.py
│ │ │ │ └── word.py
│ │ │ ├── config.py
│ │ │ ├── evals
│ │ │ │ ├── __init__.py
│ │ │ │ ├── common.py
│ │ │ │ ├── run_comments.py
│ │ │ │ ├── run_edit.py
│ │ │ │ └── run_ppt_edit.py
│ │ │ ├── prompts
│ │ │ │ ├── __init__.py
│ │ │ │ ├── add_comments.py
│ │ │ │ ├── analyze_comments.py
│ │ │ │ ├── latex_edit.py
│ │ │ │ ├── markdown_draft.py
│ │ │ │ ├── markdown_edit.py
│ │ │ │ └── powerpoint_edit.py
│ │ │ ├── server.py
│ │ │ ├── start.py
│ │ │ ├── tools
│ │ │ │ ├── __init__.py
│ │ │ │ ├── add_comments.py
│ │ │ │ ├── edit_adapters
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── common.py
│ │ │ │ │ ├── latex.py
│ │ │ │ │ └── markdown.py
│ │ │ │ ├── edit.py
│ │ │ │ └── helpers.py
│ │ │ └── types.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── tests
│ │ │ ├── app_handling
│ │ │ │ ├── test_excel.py
│ │ │ │ ├── test_miktext.py
│ │ │ │ ├── test_office_common.py
│ │ │ │ ├── test_powerpoint.py
│ │ │ │ └── test_word.py
│ │ │ ├── conftest.py
│ │ │ └── tools
│ │ │ └── edit_adapters
│ │ │ ├── test_latex.py
│ │ │ └── test_markdown.py
│ │ └── uv.lock
│ ├── mcp-server-fusion
│ │ ├── .gitignore
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── AddInIcon.svg
│ │ ├── config.py
│ │ ├── FusionMCPServerAddIn.manifest
│ │ ├── FusionMCPServerAddIn.py
│ │ ├── mcp_server_fusion
│ │ │ ├── __init__.py
│ │ │ ├── fusion_mcp_server.py
│ │ │ ├── fusion_utils
│ │ │ │ ├── __init__.py
│ │ │ │ ├── event_utils.py
│ │ │ │ ├── general_utils.py
│ │ │ │ └── tool_utils.py
│ │ │ ├── mcp_tools
│ │ │ │ ├── __init__.py
│ │ │ │ ├── fusion_3d_operation.py
│ │ │ │ ├── fusion_geometry.py
│ │ │ │ ├── fusion_pattern.py
│ │ │ │ └── fusion_sketch.py
│ │ │ └── vendor
│ │ │ └── README.md
│ │ ├── README.md
│ │ └── requirements.txt
│ ├── mcp-server-giphy
│ │ ├── .env.example
│ │ ├── .gitignore
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── Makefile
│ │ ├── mcp_server
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── giphy_search.py
│ │ │ ├── sampling.py
│ │ │ ├── server.py
│ │ │ ├── start.py
│ │ │ └── utils.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── mcp-server-memory-user-bio
│ │ ├── .env.example
│ │ ├── .gitignore
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── Makefile
│ │ ├── mcp_server_memory_user_bio
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── server.py
│ │ │ └── start.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── mcp-server-memory-whiteboard
│ │ ├── .env.example
│ │ ├── .gitignore
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── Makefile
│ │ ├── mcp_server_memory_whiteboard
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── server.py
│ │ │ └── start.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── mcp-server-office
│ │ ├── .env.example
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── build.sh
│ │ ├── data
│ │ │ ├── attachments
│ │ │ │ ├── Daily Game Ideas.txt
│ │ │ │ ├── Frontend Framework Proposal.txt
│ │ │ │ └── ReDoodle.txt
│ │ │ └── word
│ │ │ ├── test_cases.yaml
│ │ │ └── transcripts
│ │ │ ├── transcript_Startup_Idea_1_202503031513.md
│ │ │ ├── transcript_Startup_Idea_2_202503031659.md
│ │ │ └── transcript_Web_Frontends_202502281551.md
│ │ ├── Makefile
│ │ ├── mcp_server
│ │ │ ├── __init__.py
│ │ │ ├── app_interaction
│ │ │ │ ├── __init__.py
│ │ │ │ ├── excel_editor.py
│ │ │ │ ├── powerpoint_editor.py
│ │ │ │ └── word_editor.py
│ │ │ ├── config.py
│ │ │ ├── constants.py
│ │ │ ├── evals
│ │ │ │ ├── __init__.py
│ │ │ │ ├── common.py
│ │ │ │ ├── run_comment_analysis.py
│ │ │ │ ├── run_feedback.py
│ │ │ │ └── run_markdown_edit.py
│ │ │ ├── helpers.py
│ │ │ ├── markdown_edit
│ │ │ │ ├── __init__.py
│ │ │ │ ├── comment_analysis.py
│ │ │ │ ├── feedback_step.py
│ │ │ │ ├── markdown_edit.py
│ │ │ │ └── utils.py
│ │ │ ├── prompts
│ │ │ │ ├── __init__.py
│ │ │ │ ├── comment_analysis.py
│ │ │ │ ├── feedback.py
│ │ │ │ ├── markdown_draft.py
│ │ │ │ └── markdown_edit.py
│ │ │ ├── server.py
│ │ │ ├── start.py
│ │ │ └── types.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── tests
│ │ │ └── test_word_editor.py
│ │ └── uv.lock
│ ├── mcp-server-open-deep-research
│ │ ├── .env.example
│ │ ├── .gitignore
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── Makefile
│ │ ├── mcp_server
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── libs
│ │ │ │ └── open_deep_research
│ │ │ │ ├── cookies.py
│ │ │ │ ├── mdconvert.py
│ │ │ │ ├── run_agents.py
│ │ │ │ ├── text_inspector_tool.py
│ │ │ │ ├── text_web_browser.py
│ │ │ │ └── visual_qa.py
│ │ │ ├── open_deep_research.py
│ │ │ ├── server.py
│ │ │ └── start.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── uv.lock
│ ├── mcp-server-open-deep-research-clone
│ │ ├── .env.example
│ │ ├── .gitignore
│ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── settings.json
│ │ ├── Makefile
│ │ ├── mcp_server_open_deep_research_clone
│ │ │ ├── __init__.py
│ │ │ ├── azure_openai.py
│ │ │ ├── config.py
│ │ │ ├── logging.py
│ │ │ ├── sampling.py
│ │ │ ├── server.py
│ │ │ ├── start.py
│ │ │ ├── utils.py
│ │ │ └── web_research.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ ├── test
│ │ │ └── test_open_deep_research_clone.py
│ │ └── uv.lock
│ ├── mcp-server-template
│ │ ├── .taplo.toml
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── copier.yml
│ │ ├── README.md
│ │ └── template
│ │ └── {{ project_slug }}
│ │ ├── .env.example.jinja
│ │ ├── .gitignore
│ │ ├── .vscode
│ │ │ ├── launch.json.jinja
│ │ │ └── settings.json
│ │ ├── {{ module_name }}
│ │ │ ├── __init__.py
│ │ │ ├── config.py.jinja
│ │ │ ├── server.py.jinja
│ │ │ └── start.py.jinja
│ │ ├── Makefile.jinja
│ │ ├── pyproject.toml.jinja
│ │ └── README.md.jinja
│ ├── mcp-server-vscode
│ │ ├── .eslintrc.cjs
│ │ ├── .gitignore
│ │ ├── .npmrc
│ │ ├── .vscode
│ │ │ ├── extensions.json
│ │ │ ├── launch.json
│ │ │ ├── settings.json
│ │ │ └── tasks.json
│ │ ├── .vscode-test.mjs
│ │ ├── .vscodeignore
│ │ ├── ASSISTANT_BOOTSTRAP.md
│ │ ├── eslint.config.mjs
│ │ ├── images
│ │ │ └── icon.png
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── out
│ │ │ ├── extension.d.ts
│ │ │ ├── extension.js
│ │ │ ├── test
│ │ │ │ ├── extension.test.d.ts
│ │ │ │ └── extension.test.js
│ │ │ ├── tools
│ │ │ │ ├── code_checker.d.ts
│ │ │ │ ├── code_checker.js
│ │ │ │ ├── debug_tools.d.ts
│ │ │ │ ├── debug_tools.js
│ │ │ │ ├── focus_editor.d.ts
│ │ │ │ ├── focus_editor.js
│ │ │ │ ├── search_symbol.d.ts
│ │ │ │ └── search_symbol.js
│ │ │ └── utils
│ │ │ ├── port.d.ts
│ │ │ └── port.js
│ │ ├── package.json
│ │ ├── pnpm-lock.yaml
│ │ ├── prettier.config.cjs
│ │ ├── README.md
│ │ ├── src
│ │ │ ├── extension.d.ts
│ │ │ ├── extension.ts
│ │ │ ├── test
│ │ │ │ ├── extension.test.d.ts
│ │ │ │ └── extension.test.ts
│ │ │ ├── tools
│ │ │ │ ├── code_checker.d.ts
│ │ │ │ ├── code_checker.ts
│ │ │ │ ├── debug_tools.d.ts
│ │ │ │ ├── debug_tools.ts
│ │ │ │ ├── focus_editor.d.ts
│ │ │ │ ├── focus_editor.ts
│ │ │ │ ├── search_symbol.d.ts
│ │ │ │ └── search_symbol.ts
│ │ │ └── utils
│ │ │ ├── port.d.ts
│ │ │ └── port.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.tsbuildinfo
│ │ ├── vsc-extension-quickstart.md
│ │ └── webpack.config.js
│ └── mcp-server-web-research
│ ├── .env.example
│ ├── .gitignore
│ ├── .vscode
│ │ ├── launch.json
│ │ └── settings.json
│ ├── Makefile
│ ├── mcp_server_web_research
│ │ ├── __init__.py
│ │ ├── azure_openai.py
│ │ ├── config.py
│ │ ├── logging.py
│ │ ├── sampling.py
│ │ ├── server.py
│ │ ├── start.py
│ │ ├── utils.py
│ │ └── web_research.py
│ ├── pyproject.toml
│ ├── README.md
│ ├── test
│ │ └── test_web_research.py
│ └── uv.lock
├── README.md
├── RESPONSIBLE_AI_FAQ.md
├── ruff.toml
├── SECURITY.md
├── semantic-workbench.code-workspace
├── SUPPORT.md
├── tools
│ ├── build_ai_context_files.py
│ ├── collect_files.py
│ ├── docker
│ │ ├── azure_website_sshd.conf
│ │ ├── docker-entrypoint.sh
│ │ ├── Dockerfile.assistant
│ │ └── Dockerfile.mcp-server
│ ├── makefiles
│ │ ├── docker-assistant.mk
│ │ ├── docker-mcp-server.mk
│ │ ├── docker.mk
│ │ ├── python.mk
│ │ ├── recursive.mk
│ │ └── shell.mk
│ ├── reset-service-data.ps1
│ ├── reset-service-data.sh
│ ├── run-app.ps1
│ ├── run-app.sh
│ ├── run-canonical-agent.ps1
│ ├── run-canonical-agent.sh
│ ├── run-dotnet-examples-with-aspire.sh
│ ├── run-python-example1.sh
│ ├── run-python-example2.ps1
│ ├── run-python-example2.sh
│ ├── run-service.ps1
│ ├── run-service.sh
│ ├── run-workbench-chatbot.ps1
│ └── run-workbench-chatbot.sh
├── workbench-app
│ ├── .dockerignore
│ ├── .env.example
│ ├── .eslintrc.cjs
│ ├── .gitignore
│ ├── .vscode
│ │ ├── launch.json
│ │ └── settings.json
│ ├── docker-entrypoint.sh
│ ├── Dockerfile
│ ├── docs
│ │ ├── APP_DEV_GUIDE.md
│ │ ├── MESSAGE_METADATA.md
│ │ ├── MESSAGE_TYPES.md
│ │ ├── README.md
│ │ └── STATE_INSPECTORS.md
│ ├── index.html
│ ├── Makefile
│ ├── nginx.conf
│ ├── package.json
│ ├── pnpm-lock.yaml
│ ├── prettier.config.cjs
│ ├── public
│ │ └── assets
│ │ ├── background-1-upscaled.jpg
│ │ ├── background-1-upscaled.png
│ │ ├── background-1.jpg
│ │ ├── background-1.png
│ │ ├── background-2.jpg
│ │ ├── background-2.png
│ │ ├── experimental-feature.jpg
│ │ ├── favicon.svg
│ │ ├── workflow-designer-1.jpg
│ │ ├── workflow-designer-outlets.jpg
│ │ ├── workflow-designer-states.jpg
│ │ └── workflow-designer-transitions.jpg
│ ├── README.md
│ ├── run.sh
│ ├── src
│ │ ├── components
│ │ │ ├── App
│ │ │ │ ├── AppFooter.tsx
│ │ │ │ ├── AppHeader.tsx
│ │ │ │ ├── AppMenu.tsx
│ │ │ │ ├── AppView.tsx
│ │ │ │ ├── CodeLabel.tsx
│ │ │ │ ├── CommandButton.tsx
│ │ │ │ ├── ConfirmLeave.tsx
│ │ │ │ ├── ContentExport.tsx
│ │ │ │ ├── ContentImport.tsx
│ │ │ │ ├── CopyButton.tsx
│ │ │ │ ├── DialogControl.tsx
│ │ │ │ ├── DynamicIframe.tsx
│ │ │ │ ├── ErrorListFromAppState.tsx
│ │ │ │ ├── ErrorMessageBar.tsx
│ │ │ │ ├── ExperimentalNotice.tsx
│ │ │ │ ├── FormWidgets
│ │ │ │ │ ├── BaseModelEditorWidget.tsx
│ │ │ │ │ ├── CustomizedArrayFieldTemplate.tsx
│ │ │ │ │ ├── CustomizedFieldTemplate.tsx
│ │ │ │ │ ├── CustomizedObjectFieldTemplate.tsx
│ │ │ │ │ └── InspectableWidget.tsx
│ │ │ │ ├── LabelWithDescription.tsx
│ │ │ │ ├── Loading.tsx
│ │ │ │ ├── MenuItemControl.tsx
│ │ │ │ ├── MiniControl.tsx
│ │ │ │ ├── MyAssistantServiceRegistrations.tsx
│ │ │ │ ├── MyItemsManager.tsx
│ │ │ │ ├── OverflowMenu.tsx
│ │ │ │ ├── PresenceMotionList.tsx
│ │ │ │ ├── ProfileSettings.tsx
│ │ │ │ └── TooltipWrapper.tsx
│ │ │ ├── Assistants
│ │ │ │ ├── ApplyConfigButton.tsx
│ │ │ │ ├── AssistantAdd.tsx
│ │ │ │ ├── AssistantConfigExportButton.tsx
│ │ │ │ ├── AssistantConfigImportButton.tsx
│ │ │ │ ├── AssistantConfiguration.tsx
│ │ │ │ ├── AssistantConfigure.tsx
│ │ │ │ ├── AssistantCreate.tsx
│ │ │ │ ├── AssistantDelete.tsx
│ │ │ │ ├── AssistantDuplicate.tsx
│ │ │ │ ├── AssistantExport.tsx
│ │ │ │ ├── AssistantImport.tsx
│ │ │ │ ├── AssistantRemove.tsx
│ │ │ │ ├── AssistantRename.tsx
│ │ │ │ ├── AssistantServiceInfo.tsx
│ │ │ │ ├── AssistantServiceMetadata.tsx
│ │ │ │ └── MyAssistants.tsx
│ │ │ ├── AssistantServiceRegistrations
│ │ │ │ ├── AssistantServiceRegistrationApiKey.tsx
│ │ │ │ ├── AssistantServiceRegistrationApiKeyReset.tsx
│ │ │ │ ├── AssistantServiceRegistrationCreate.tsx
│ │ │ │ └── AssistantServiceRegistrationRemove.tsx
│ │ │ ├── Conversations
│ │ │ │ ├── Canvas
│ │ │ │ │ ├── AssistantCanvas.tsx
│ │ │ │ │ ├── AssistantCanvasList.tsx
│ │ │ │ │ ├── AssistantInspector.tsx
│ │ │ │ │ ├── AssistantInspectorList.tsx
│ │ │ │ │ └── ConversationCanvas.tsx
│ │ │ │ ├── ChatInputPlugins
│ │ │ │ │ ├── ClearEditorPlugin.tsx
│ │ │ │ │ ├── LexicalMenu.ts
│ │ │ │ │ ├── ParticipantMentionsPlugin.tsx
│ │ │ │ │ ├── TypeaheadMenuPlugin.css
│ │ │ │ │ └── TypeaheadMenuPlugin.tsx
│ │ │ │ ├── ContentRenderers
│ │ │ │ │ ├── CodeContentRenderer.tsx
│ │ │ │ │ ├── ContentListRenderer.tsx
│ │ │ │ │ ├── ContentRenderer.tsx
│ │ │ │ │ ├── DiffRenderer.tsx
│ │ │ │ │ ├── HtmlContentRenderer.tsx
│ │ │ │ │ ├── JsonSchemaContentRenderer.tsx
│ │ │ │ │ ├── MarkdownContentRenderer.tsx
│ │ │ │ │ ├── MarkdownEditorRenderer.tsx
│ │ │ │ │ ├── MermaidContentRenderer.tsx
│ │ │ │ │ ├── MusicABCContentRenderer.css
│ │ │ │ │ └── MusicABCContentRenderer.tsx
│ │ │ │ ├── ContextWindow.tsx
│ │ │ │ ├── ConversationCreate.tsx
│ │ │ │ ├── ConversationDuplicate.tsx
│ │ │ │ ├── ConversationExport.tsx
│ │ │ │ ├── ConversationFileIcon.tsx
│ │ │ │ ├── ConversationRemove.tsx
│ │ │ │ ├── ConversationRename.tsx
│ │ │ │ ├── ConversationShare.tsx
│ │ │ │ ├── ConversationShareCreate.tsx
│ │ │ │ ├── ConversationShareList.tsx
│ │ │ │ ├── ConversationShareView.tsx
│ │ │ │ ├── ConversationsImport.tsx
│ │ │ │ ├── ConversationTranscript.tsx
│ │ │ │ ├── DebugInspector.tsx
│ │ │ │ ├── FileItem.tsx
│ │ │ │ ├── FileList.tsx
│ │ │ │ ├── InputAttachmentList.tsx
│ │ │ │ ├── InputOptionsControl.tsx
│ │ │ │ ├── InteractHistory.tsx
│ │ │ │ ├── InteractInput.tsx
│ │ │ │ ├── Message
│ │ │ │ │ ├── AttachmentSection.tsx
│ │ │ │ │ ├── ContentRenderer.tsx
│ │ │ │ │ ├── ContentSafetyNotice.tsx
│ │ │ │ │ ├── InteractMessage.tsx
│ │ │ │ │ ├── MessageActions.tsx
│ │ │ │ │ ├── MessageBase.tsx
│ │ │ │ │ ├── MessageBody.tsx
│ │ │ │ │ ├── MessageContent.tsx
│ │ │ │ │ ├── MessageFooter.tsx
│ │ │ │ │ ├── MessageHeader.tsx
│ │ │ │ │ ├── NotificationAccordion.tsx
│ │ │ │ │ └── ToolResultMessage.tsx
│ │ │ │ ├── MessageDelete.tsx
│ │ │ │ ├── MessageLink.tsx
│ │ │ │ ├── MyConversations.tsx
│ │ │ │ ├── MyShares.tsx
│ │ │ │ ├── ParticipantAvatar.tsx
│ │ │ │ ├── ParticipantAvatarGroup.tsx
│ │ │ │ ├── ParticipantItem.tsx
│ │ │ │ ├── ParticipantList.tsx
│ │ │ │ ├── ParticipantStatus.tsx
│ │ │ │ ├── RewindConversation.tsx
│ │ │ │ ├── ShareRemove.tsx
│ │ │ │ ├── SpeechButton.tsx
│ │ │ │ └── ToolCalls.tsx
│ │ │ └── FrontDoor
│ │ │ ├── Chat
│ │ │ │ ├── AssistantDrawer.tsx
│ │ │ │ ├── CanvasDrawer.tsx
│ │ │ │ ├── Chat.tsx
│ │ │ │ ├── ChatCanvas.tsx
│ │ │ │ ├── ChatControls.tsx
│ │ │ │ └── ConversationDrawer.tsx
│ │ │ ├── Controls
│ │ │ │ ├── AssistantCard.tsx
│ │ │ │ ├── AssistantSelector.tsx
│ │ │ │ ├── AssistantServiceSelector.tsx
│ │ │ │ ├── ConversationItem.tsx
│ │ │ │ ├── ConversationList.tsx
│ │ │ │ ├── ConversationListOptions.tsx
│ │ │ │ ├── NewConversationButton.tsx
│ │ │ │ ├── NewConversationForm.tsx
│ │ │ │ └── SiteMenuButton.tsx
│ │ │ ├── GlobalContent.tsx
│ │ │ └── MainContent.tsx
│ │ ├── Constants.ts
│ │ ├── global.d.ts
│ │ ├── index.css
│ │ ├── libs
│ │ │ ├── AppStorage.ts
│ │ │ ├── AuthHelper.ts
│ │ │ ├── EventSubscriptionManager.ts
│ │ │ ├── Theme.ts
│ │ │ ├── useAssistantCapabilities.ts
│ │ │ ├── useChatCanvasController.ts
│ │ │ ├── useConversationEvents.ts
│ │ │ ├── useConversationUtility.ts
│ │ │ ├── useCreateConversation.ts
│ │ │ ├── useDebugComponentLifecycle.ts
│ │ │ ├── useDragAndDrop.ts
│ │ │ ├── useEnvironment.ts
│ │ │ ├── useExportUtility.ts
│ │ │ ├── useHistoryUtility.ts
│ │ │ ├── useKeySequence.ts
│ │ │ ├── useMediaQuery.ts
│ │ │ ├── useMicrosoftGraph.ts
│ │ │ ├── useNotify.tsx
│ │ │ ├── useParticipantUtility.tsx
│ │ │ ├── useSiteUtility.ts
│ │ │ ├── useWorkbenchEventSource.ts
│ │ │ ├── useWorkbenchService.ts
│ │ │ └── Utility.ts
│ │ ├── main.tsx
│ │ ├── models
│ │ │ ├── Assistant.ts
│ │ │ ├── AssistantCapability.ts
│ │ │ ├── AssistantServiceInfo.ts
│ │ │ ├── AssistantServiceRegistration.ts
│ │ │ ├── Config.ts
│ │ │ ├── Conversation.ts
│ │ │ ├── ConversationFile.ts
│ │ │ ├── ConversationMessage.ts
│ │ │ ├── ConversationMessageDebug.ts
│ │ │ ├── ConversationParticipant.ts
│ │ │ ├── ConversationShare.ts
│ │ │ ├── ConversationShareRedemption.ts
│ │ │ ├── ConversationState.ts
│ │ │ ├── ConversationStateDescription.ts
│ │ │ ├── ServiceEnvironment.ts
│ │ │ └── User.ts
│ │ ├── redux
│ │ │ ├── app
│ │ │ │ ├── hooks.ts
│ │ │ │ ├── rtkQueryErrorLogger.ts
│ │ │ │ └── store.ts
│ │ │ └── features
│ │ │ ├── app
│ │ │ │ ├── appSlice.ts
│ │ │ │ └── AppState.ts
│ │ │ ├── chatCanvas
│ │ │ │ ├── chatCanvasSlice.ts
│ │ │ │ └── ChatCanvasState.ts
│ │ │ ├── localUser
│ │ │ │ ├── localUserSlice.ts
│ │ │ │ └── LocalUserState.ts
│ │ │ └── settings
│ │ │ ├── settingsSlice.ts
│ │ │ └── SettingsState.ts
│ │ ├── Root.tsx
│ │ ├── routes
│ │ │ ├── AcceptTerms.tsx
│ │ │ ├── AssistantEditor.tsx
│ │ │ ├── AssistantServiceRegistrationEditor.tsx
│ │ │ ├── Dashboard.tsx
│ │ │ ├── ErrorPage.tsx
│ │ │ ├── FrontDoor.tsx
│ │ │ ├── Login.tsx
│ │ │ ├── Settings.tsx
│ │ │ ├── ShareRedeem.tsx
│ │ │ └── Shares.tsx
│ │ ├── services
│ │ │ └── workbench
│ │ │ ├── assistant.ts
│ │ │ ├── assistantService.ts
│ │ │ ├── conversation.ts
│ │ │ ├── file.ts
│ │ │ ├── index.ts
│ │ │ ├── participant.ts
│ │ │ ├── share.ts
│ │ │ ├── state.ts
│ │ │ └── workbench.ts
│ │ └── vite-env.d.ts
│ ├── tools
│ │ └── filtered-ts-prune.cjs
│ ├── tsconfig.json
│ └── vite.config.ts
└── workbench-service
├── .env.example
├── .vscode
│ ├── extensions.json
│ ├── launch.json
│ └── settings.json
├── alembic.ini
├── devdb
│ ├── docker-compose.yaml
│ └── postgresql-init.sh
├── Dockerfile
├── Makefile
├── migrations
│ ├── env.py
│ ├── README
│ ├── script.py.mako
│ └── versions
│ ├── 2024_09_19_000000_69dcda481c14_init.py
│ ├── 2024_09_19_190029_dffb1d7e219a_file_version_filename.py
│ ├── 2024_09_20_204130_b29524775484_share.py
│ ├── 2024_10_30_231536_039bec8edc33_index_message_type.py
│ ├── 2024_11_04_204029_5149c7fb5a32_conversationmessagedebug.py
│ ├── 2024_11_05_015124_245baf258e11_double_check_debugs.py
│ ├── 2024_11_25_191056_a106de176394_drop_workflow.py
│ ├── 2025_03_19_140136_aaaf792d4d72_set_user_title_set.py
│ ├── 2025_03_21_153250_3763629295ad_add_assistant_template_id.py
│ ├── 2025_05_19_163613_b2f86e981885_delete_context_transfer_assistants.py
│ └── 2025_06_18_174328_503c739152f3_delete_knowlege_transfer_assistants.py
├── pyproject.toml
├── README.md
├── semantic_workbench_service
│ ├── __init__.py
│ ├── api.py
│ ├── assistant_api_key.py
│ ├── auth.py
│ ├── azure_speech.py
│ ├── config.py
│ ├── controller
│ │ ├── __init__.py
│ │ ├── assistant_service_client_pool.py
│ │ ├── assistant_service_registration.py
│ │ ├── assistant.py
│ │ ├── conversation_share.py
│ │ ├── conversation.py
│ │ ├── convert.py
│ │ ├── exceptions.py
│ │ ├── export_import.py
│ │ ├── file.py
│ │ ├── participant.py
│ │ └── user.py
│ ├── db.py
│ ├── event.py
│ ├── files.py
│ ├── logging_config.py
│ ├── middleware.py
│ ├── query.py
│ ├── service_user_principals.py
│ ├── service.py
│ └── start.py
├── tests
│ ├── __init__.py
│ ├── conftest.py
│ ├── docker-compose.yaml
│ ├── test_assistant_api_key.py
│ ├── test_files.py
│ ├── test_integration.py
│ ├── test_middleware.py
│ ├── test_migrations.py
│ ├── test_workbench_service.py
│ └── types.py
└── uv.lock
```
# Files
--------------------------------------------------------------------------------
/workbench-service/migrations/versions/2025_03_19_140136_aaaf792d4d72_set_user_title_set.py:
--------------------------------------------------------------------------------
```python
1 | """set user_title_set
2 |
3 | Revision ID: aaaf792d4d72
4 | Revises: a106de176394
5 | Create Date: 2025-03-19 14:01:36.127350
6 |
7 | """
8 |
9 | from typing import Sequence, Union
10 |
11 | import sqlmodel as sm
12 | from alembic import op
13 | from semantic_workbench_service import db
14 |
15 | # revision identifiers, used by Alembic.
16 | revision: str = "aaaf792d4d72"
17 | down_revision: Union[str, None] = "a106de176394"
18 | branch_labels: Union[str, Sequence[str], None] = None
19 | depends_on: Union[str, Sequence[str], None] = None
20 |
21 |
22 | def upgrade() -> None:
23 | bind = op.get_bind()
24 |
25 | # Add the __user_title_set key to the meta_data of all conversations to prevent
26 | # auto-retitling for existing conversations
27 | for conversation_id, meta_data in bind.execute(
28 | sm.select(db.Conversation.conversation_id, db.Conversation.meta_data)
29 | ).yield_per(1):
30 | meta_data = meta_data or {}
31 | meta_data["__user_title_set"] = True
32 |
33 | bind.execute(
34 | sm.update(db.Conversation)
35 | .where(sm.col(db.Conversation.conversation_id) == conversation_id)
36 | .values(meta_data=meta_data)
37 | )
38 |
39 |
40 | def downgrade() -> None:
41 | bind = op.get_bind()
42 |
43 | # Drop the __user_title_set key
44 | for conversation_id, meta_data in bind.execute(
45 | sm.select(db.Conversation.conversation_id, db.Conversation.meta_data)
46 | ).yield_per(1):
47 | meta_data = meta_data or {}
48 | if not meta_data.pop("__user_title_set", None):
49 | continue
50 |
51 | bind.execute(
52 | sm.update(db.Conversation)
53 | .where(sm.col(db.Conversation.conversation_id) == conversation_id)
54 | .values(meta_data=meta_data)
55 | )
56 |
```
--------------------------------------------------------------------------------
/workbench-app/src/components/App/AppFooter.tsx:
--------------------------------------------------------------------------------
```typescript
1 | // Copyright (c) Microsoft. All rights reserved.
2 |
3 | import { Caption1, Link, makeStyles, shorthands, tokens } from '@fluentui/react-components';
4 | import React from 'react';
5 |
6 | const useClasses = makeStyles({
7 | root: {
8 | display: 'flex',
9 | flexDirection: 'row',
10 | backgroundColor: tokens.colorNeutralBackgroundAlpha,
11 | alignItems: 'center',
12 | justifyContent: 'center',
13 | gap: tokens.spacingVerticalM,
14 | ...shorthands.padding(tokens.spacingVerticalS, tokens.spacingHorizontalM),
15 | },
16 | });
17 |
18 | export const AppFooter: React.FC = () => {
19 | const classes = useClasses();
20 |
21 | return (
22 | <div className={classes.root}>
23 | <Link href="https://go.microsoft.com/fwlink/?LinkId=521839" target="_blank">
24 | Privacy & Cookies
25 | </Link>{' '}
26 | |{' '}
27 | <Link href="https://go.microsoft.com/fwlink/?linkid=2259814" target="_blank">
28 | Consumer Health Privacy
29 | </Link>{' '}
30 | |{' '}
31 | <Link href="https://go.microsoft.com/fwlink/?LinkID=246338" target="_blank">
32 | Terms of Use
33 | </Link>{' '}
34 | |{' '}
35 | <Link
36 | href="https://www.microsoft.com/en-us/legal/intellectualproperty/Trademarks/EN-US.aspx"
37 | target="_blank"
38 | >
39 | Trademarks
40 | </Link>{' '}
41 | |{' '}
42 | <Link href="https://github.com/microsoft/semanticworkbench" target="_blank">
43 | @GitHub
44 | </Link>{' '}
45 | | <Caption1>© Microsoft 2024</Caption1>
46 | </div>
47 | );
48 | };
49 |
```
--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/guided_conversation/logging.py:
--------------------------------------------------------------------------------
```python
1 | import json
2 | import logging
3 | from datetime import datetime
4 | from typing import Any
5 | from uuid import UUID
6 |
7 | from pydantic import BaseModel
8 |
9 | logger = logging.getLogger("guided-conversation-skill")
10 | logger.addHandler(logging.NullHandler())
11 | logger.setLevel(logging.DEBUG)
12 |
13 |
14 | def convert_to_serializable(data: Any) -> Any:
15 | """
16 | Recursively convert Pydantic BaseModel instances to dictionaries.
17 | """
18 | if isinstance(data, BaseModel):
19 | return data.model_dump()
20 | elif isinstance(data, dict):
21 | return {key: convert_to_serializable(value) for key, value in data.items()}
22 | elif isinstance(data, list):
23 | return [convert_to_serializable(item) for item in data]
24 | elif isinstance(data, tuple):
25 | return tuple(convert_to_serializable(item) for item in data)
26 | elif isinstance(data, set):
27 | return {convert_to_serializable(item) for item in data}
28 | return data
29 |
30 |
31 | class CustomEncoder(json.JSONEncoder):
32 | def default(self, o):
33 | if isinstance(o, UUID):
34 | return str(o)
35 | if isinstance(o, datetime):
36 | return o.isoformat()
37 | return super().default(o)
38 |
39 |
40 | def add_serializable_data(data: Any) -> dict[str, Any]:
41 | """
42 | Helper function to use when adding extra data to log messages.
43 | """
44 | extra = {}
45 |
46 | # Convert to serializable.
47 | data = convert_to_serializable(data)
48 |
49 | # Ensure data is a JSON-serializable object.
50 | try:
51 | data = json.loads(json.dumps(data, cls=CustomEncoder))
52 | except Exception as e:
53 | data = str(e)
54 |
55 | if data:
56 | extra["data"] = data
57 |
58 | return extra
59 |
60 |
61 | extra_data = add_serializable_data
62 |
```
--------------------------------------------------------------------------------
/workbench-app/src/components/Conversations/ChatInputPlugins/ClearEditorPlugin.tsx:
--------------------------------------------------------------------------------
```typescript
1 | // Copyright (c) Microsoft. All rights reserved.
2 | // based on code from: https://github.com/facebook/lexical/blob/main/packages/lexical-react/src/LexicalClearEditorPlugin.ts
3 |
4 | import { useLexicalComposerContext } from '@fluentui-copilot/react-copilot';
5 | import {
6 | $createParagraphNode,
7 | $getRoot,
8 | $getSelection,
9 | $isRangeSelection,
10 | CLEAR_EDITOR_COMMAND,
11 | COMMAND_PRIORITY_EDITOR,
12 | } from 'lexical';
13 | import React from 'react';
14 |
15 | interface ClearEditorPluginProps {
16 | onClear?: () => void;
17 | }
18 |
19 | export const ClearEditorPlugin = ({ onClear }: ClearEditorPluginProps): JSX.Element | null => {
20 | const [editor] = useLexicalComposerContext();
21 |
22 | React.useLayoutEffect(() => {
23 | return editor.registerCommand(
24 | CLEAR_EDITOR_COMMAND,
25 | () => {
26 | editor.update(() => {
27 | if (onClear == null) {
28 | const root = $getRoot();
29 | const selection = $getSelection();
30 | const paragraph = $createParagraphNode();
31 | root.clear();
32 | root.append(paragraph);
33 |
34 | if (selection !== null) {
35 | paragraph.select();
36 | }
37 | if ($isRangeSelection(selection)) {
38 | selection.format = 0;
39 | }
40 | } else {
41 | onClear();
42 | }
43 | });
44 | return true;
45 | },
46 | COMMAND_PRIORITY_EDITOR,
47 | );
48 | }, [editor, onClear]);
49 |
50 | return null;
51 | };
52 |
```
--------------------------------------------------------------------------------
/assistants/project-assistant/assistant/domain/tasks_manager.py:
--------------------------------------------------------------------------------
```python
1 | from semantic_workbench_assistant.assistant_app import ConversationContext
2 |
3 | from assistant.data import NewTaskInfo, TaskInfo
4 | from assistant.domain.share_manager import ShareManager
5 | from assistant.storage import ShareStorage
6 |
7 |
8 | class TasksManager:
9 | @staticmethod
10 | async def get_tasks(
11 | context: ConversationContext,
12 | ) -> list[TaskInfo]:
13 | share_id = await ShareManager.get_share_id(context)
14 | if not share_id:
15 | return []
16 | return ShareStorage.read_tasks(share_id)
17 |
18 | @staticmethod
19 | async def add_tasks(
20 | context: ConversationContext,
21 | tasks: list[NewTaskInfo],
22 | ) -> None:
23 | share_id = await ShareManager.get_share_id(context)
24 | if not share_id:
25 | return
26 | ShareStorage.add_tasks(share_id, tasks)
27 |
28 | @staticmethod
29 | async def update_task(
30 | context: ConversationContext,
31 | task: TaskInfo,
32 | ) -> None:
33 | share_id = await ShareManager.get_share_id(context)
34 | if not share_id:
35 | return
36 | ShareStorage.update_task(share_id, task)
37 |
38 | @staticmethod
39 | async def remove_task(
40 | context: ConversationContext,
41 | task_id: str,
42 | ) -> None:
43 | share_id = await ShareManager.get_share_id(context)
44 | if not share_id:
45 | return
46 | ShareStorage.remove_task(share_id, task_id)
47 |
48 | @staticmethod
49 | async def set_task_list(
50 | context: ConversationContext,
51 | tasks: list[TaskInfo],
52 | ) -> None:
53 | share_id = await ShareManager.get_share_id(context)
54 | if not share_id:
55 | return
56 | ShareStorage.set_all_tasks(share_id, tasks)
57 |
```
--------------------------------------------------------------------------------
/libraries/dotnet/WorkbenchConnector/WorkbenchConfig.cs:
--------------------------------------------------------------------------------
```csharp
1 | // Copyright (c) Microsoft. All rights reserved.
2 |
3 | using System;
4 |
5 | namespace Microsoft.SemanticWorkbench.Connector;
6 |
7 | public class WorkbenchConfig
8 | {
9 | /// <summary>
10 | /// Semantic Workbench endpoint.
11 | /// </summary>
12 | public string WorkbenchEndpoint { get; set; } = "http://127.0.0.1:3000";
13 |
14 | /// <summary>
15 | /// The host where the connector receives requests sent by the workbench.
16 | /// Locally, this is usually "http://127.0.0.1:[some port]"
17 | /// On Azure, this will be something like "https://contoso.azurewebsites.net"
18 | /// Leave this setting empty to use "127.0.0.1" and autodetect the port in use.
19 | /// You can use an env var to set this value, e.g. Workbench__ConnectorHost=https://contoso.azurewebsites.net
20 | /// </summary>
21 | public string ConnectorHost { get; set; } = string.Empty;
22 |
23 | /// <summary>
24 | /// This is the prefix of all the endpoints exposed by the connector
25 | /// </summary>
26 | public string ConnectorApiPrefix { get; set; } = "/myagents";
27 |
28 | /// <summary>
29 | /// Unique ID of the service. Semantic Workbench will store this event to identify the server
30 | /// so you should keep the value fixed to match the conversations tracked across service restarts.
31 | /// </summary>
32 | public string ConnectorId { get; set; } = Guid.NewGuid().ToString("D");
33 |
34 | /// <summary>
35 | /// Name of your agent service
36 | /// </summary>
37 | public string ConnectorName { get; set; } = ".NET Multi Agent Service";
38 |
39 | /// <summary>
40 | /// Description of your agent service.
41 | /// </summary>
42 | public string ConnectorDescription { get; set; } = "Multi-agent service for .NET agents";
43 | }
44 |
```
--------------------------------------------------------------------------------
/workbench-app/src/components/App/MyItemsManager.tsx:
--------------------------------------------------------------------------------
```typescript
1 | // Copyright (c) Microsoft. All rights reserved.
2 |
3 | import { Card, Text, Title3, makeStyles, tokens } from '@fluentui/react-components';
4 | import React from 'react';
5 | import { PresenceMotionList } from '../App/PresenceMotionList';
6 |
7 | const useClasses = makeStyles({
8 | root: {
9 | backgroundImage: `linear-gradient(to right, ${tokens.colorNeutralBackground1}, ${tokens.colorBrandBackground2})`,
10 | },
11 | actions: {
12 | display: 'flex',
13 | justifyContent: 'space-between',
14 | alignItems: 'center',
15 | gap: tokens.spacingVerticalS,
16 | },
17 | });
18 |
19 | interface MyItemsManagerProps {
20 | items?: JSX.Element[];
21 | title: string;
22 | itemLabel: string;
23 | hideInstruction?: boolean;
24 | actions: JSX.Element;
25 | }
26 |
27 | export const MyItemsManager: React.FC<MyItemsManagerProps> = (props) => {
28 | const { items, title, itemLabel, hideInstruction, actions } = props;
29 | const classes = useClasses();
30 |
31 | return (
32 | <Card className={classes.root}>
33 | <Text size={400} weight="semibold">
34 | {title}
35 | </Text>
36 | <div className={classes.actions}>{actions}</div>
37 | {items?.length === 0 && (
38 | <>
39 | <Title3>No {itemLabel.toLowerCase()}s found.</Title3>
40 | {!hideInstruction && (
41 | <Text>
42 | Create a new {itemLabel.toLowerCase()} by clicking the <strong>New {itemLabel}</strong>{' '}
43 | button above.
44 | </Text>
45 | )}
46 | </>
47 | )}
48 | <PresenceMotionList items={items} />
49 | </Card>
50 | );
51 | };
52 |
```
--------------------------------------------------------------------------------
/mcp-servers/mcp-server-filesystem-edit/mcp_server_filesystem_edit/config.py:
--------------------------------------------------------------------------------
```python
1 | # Copyright (c) Microsoft. All rights reserved.
2 |
3 | import os
4 | import sys
5 | from typing import Annotated
6 |
7 | import pendulum
8 | from pydantic import Field
9 | from pydantic_settings import BaseSettings
10 |
11 | log_level = os.environ.get("LOG_LEVEL", "INFO")
12 |
13 |
14 | def load_required_env_var(env_var_name: str) -> str:
15 | value = os.environ.get(env_var_name, "")
16 | if not value:
17 | raise ValueError(f"Missing required environment variable: {env_var_name}")
18 | return value
19 |
20 |
21 | class Settings(BaseSettings):
22 | log_level: str = log_level
23 | allowed_directories: list[str] = []
24 | include_hidden_paths: bool = False
25 | pdflatex_enabled: bool = False
26 | office_support_enabled: Annotated[bool, Field(default_factory=lambda: sys.platform == "win32")] = False
27 |
28 | # LLM and prompt related settings
29 | comment_author: str = "Feedback Tool"
30 | doc_editor_prefix: str = "[Document Editor]: "
31 | feedback_tool_prefix: str = "[Feedback Tool]: "
32 | file_tool_prefix: str = "[File Tool]: "
33 | rewrite_threshold: int = 250 # Tokens above this will trigger document edits instead of a rewrite
34 |
35 | # Model choices. NOTE: When using MCP sampling, the value here != what might actually be used.
36 | draft_path_model: str = "gpt-4.1"
37 | edit_model: str = "o4-mini"
38 | convert_tool_calls_model: str = "gpt-4.1"
39 | summarization_model: str = "gpt-4.1"
40 | comment_model: str = "o4-mini"
41 | comment_analysis_model: str = "gpt-4.1"
42 | knowledge_cutoff: str = "2024-05"
43 |
44 | def current_date_func(self) -> str:
45 | """Return the current date in Eastern US timezone formatted as YYYY-MM-DD."""
46 | return pendulum.now(tz="America/Los_Angeles").format("YYYY-MM-DD")
47 |
```
--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/fabric/patterns/convert_to_markdown/system.md:
--------------------------------------------------------------------------------
```markdown
1 | <identity>
2 |
3 | You are an expert format converter specializing in converting content to clean Markdown. Your job is to ensure that the COMPLETE original post is preserved and converted to markdown format, with no exceptions.
4 |
5 | </identity>
6 |
7 | <steps>
8 |
9 | 1. Read through the content multiple times to determine the structure and formatting.
10 | 2. Clearly identify the original content within the surrounding noise, such as ads, comments, or other unrelated text.
11 | 3. Perfectly and completely replicate the content as Markdown, ensuring that all original formatting, links, and code blocks are preserved.
12 | 4. Output the COMPLETE original content in Markdown format.
13 |
14 | </steps>
15 |
16 | <instructions>
17 |
18 | - DO NOT abridge, truncate, or otherwise alter the original content in any way. Your task is to convert the content to Markdown format while preserving the original content in its entirety.
19 |
20 | - DO NOT insert placeholders such as "content continues below" or any other similar text. ALWAYS output the COMPLETE original content.
21 |
22 | - When you're done outputting the content in Markdown format, check the original content and ensure that you have not truncated or altered any part of it.
23 |
24 | </instructions>
25 |
26 |
27 | <notes>
28 |
29 | - Keep all original content wording exactly as it was
30 | - Keep all original punctuation exactly as it is
31 | - Keep all original links
32 | - Keep all original quotes and code blocks
33 | - ONLY convert the content to markdown format
34 | - CRITICAL: Your output will be compared against the work of an expert human performing the same exact task. Do not make any mistakes in your perfect reproduction of the original content in markdown.
35 |
36 | </notes>
37 |
38 | <content>
39 |
40 | INPUT
41 |
42 | </content>
43 |
44 |
```
--------------------------------------------------------------------------------
/workbench-service/migrations/versions/2024_09_19_190029_dffb1d7e219a_file_version_filename.py:
--------------------------------------------------------------------------------
```python
1 | """upgrades file version storage filename
2 |
3 | Revision ID: dffb1d7e219a
4 | Revises: 69dcda481c14
5 | Create Date: 2024-09-19 19:00:29.233114
6 |
7 | """
8 |
9 | from typing import Sequence, Union
10 |
11 | import sqlalchemy as sa
12 | import sqlmodel
13 | from alembic import op
14 | from semantic_workbench_service import db
15 | from sqlalchemy.ext.asyncio import AsyncConnection
16 | from sqlmodel import select
17 |
18 | # revision identifiers, used by Alembic.
19 | revision: str = "dffb1d7e219a"
20 | down_revision: Union[str, None] = "69dcda481c14"
21 | branch_labels: Union[str, Sequence[str], None] = None
22 | depends_on: Union[str, Sequence[str], None] = None
23 |
24 |
25 | async def upgrade_file_versions(conn: AsyncConnection) -> None:
26 | file_version_details = []
27 | for row in await conn.execute(
28 | select(db.File.file_id, db.File.filename, db.FileVersion.version).join(db.FileVersion)
29 | ):
30 | file_version_details.append((row[0], row[1], row[2]))
31 |
32 | for file_id, filename, version in file_version_details:
33 | await conn.execute(
34 | sa.update(db.FileVersion)
35 | .where(db.FileVersion.file_id == file_id)
36 | .where(db.FileVersion.version == version)
37 | .values(storage_filename=f"{file_id.hex}:{filename}:{str(version).zfill(7)}")
38 | )
39 |
40 |
41 | def upgrade() -> None:
42 | op.add_column("fileversion", sa.Column("storage_filename", sqlmodel.AutoString(), nullable=True))
43 | op.execute("UPDATE fileversion SET storage_filename = ''")
44 | op.run_async(upgrade_file_versions)
45 | with op.batch_alter_table("fileversion") as batch_op:
46 | batch_op.alter_column("storage_filename", nullable=False)
47 |
48 |
49 | def downgrade() -> None:
50 | op.drop_column("fileversion", "storage_filename")
51 |
```
--------------------------------------------------------------------------------
/libraries/python/assistant-extensions/.vscode/settings.json:
--------------------------------------------------------------------------------
```json
1 | {
2 | "editor.bracketPairColorization.enabled": true,
3 | "editor.codeActionsOnSave": {
4 | "source.organizeImports": "explicit",
5 | "source.fixAll": "explicit"
6 | },
7 | "editor.guides.bracketPairs": "active",
8 | "editor.formatOnPaste": true,
9 | "editor.formatOnType": true,
10 | "editor.formatOnSave": true,
11 | "files.eol": "\n",
12 | "files.trimTrailingWhitespace": true,
13 | "python.analysis.autoFormatStrings": true,
14 | "python.analysis.autoImportCompletions": true,
15 | "python.analysis.diagnosticMode": "workspace",
16 | "python.analysis.fixAll": ["source.unusedImports"],
17 | "python.analysis.inlayHints.functionReturnTypes": true,
18 | "python.analysis.typeCheckingMode": "standard",
19 | "python.defaultInterpreterPath": "${workspaceFolder}/.venv",
20 | "python.testing.pytestEnabled": true,
21 | "[python]": {
22 | "editor.defaultFormatter": "charliermarsh.ruff",
23 | "editor.formatOnSave": true,
24 | "editor.codeActionsOnSave": {
25 | "source.fixAll": "explicit",
26 | "source.unusedImports": "explicit",
27 | "source.organizeImports": "explicit",
28 | "source.formatDocument": "explicit"
29 | }
30 | },
31 | "ruff.nativeServer": "on",
32 | "search.exclude": {
33 | "**/.venv": true,
34 | "**/.data": true,
35 | "**/__pycache__": true
36 | },
37 | // For use with optional extension: "streetsidesoftware.code-spell-checker"
38 | "cSpell.ignorePaths": [
39 | ".venv",
40 | "node_modules",
41 | "package-lock.json",
42 | "settings.json",
43 | "uv.lock"
44 | ],
45 | "cSpell.words": [
46 | "asyncio",
47 | "deepmerge",
48 | "DMAIC",
49 | "endregion",
50 | "Excalidraw",
51 | "giphy",
52 | "modelcontextprotocol",
53 | "openai",
54 | "pdfplumber",
55 | "pydantic",
56 | "pyright",
57 | "pytest",
58 | "semanticworkbench"
59 | ]
60 | }
61 |
```
--------------------------------------------------------------------------------
/workbench-app/src/components/App/MiniControl.tsx:
--------------------------------------------------------------------------------
```typescript
1 | // Copyright (c) Microsoft. All rights reserved.
2 |
3 | import { Card, Label, makeStyles, shorthands, tokens } from '@fluentui/react-components';
4 | import React from 'react';
5 | import { Link } from 'react-router-dom';
6 | import { TooltipWrapper } from './TooltipWrapper';
7 |
8 | const useClasses = makeStyles({
9 | header: {
10 | display: 'flex',
11 | flexDirection: 'row',
12 | alignItems: 'center',
13 | color: 'inherit',
14 | gap: tokens.spacingHorizontalS,
15 | ...shorthands.textDecoration('none'),
16 | },
17 | link: {
18 | cursor: 'pointer',
19 | },
20 | body: {
21 | display: 'flex',
22 | flexDirection: 'row',
23 | alignItems: 'center',
24 | justifyContent: 'space-between',
25 | gap: tokens.spacingVerticalM,
26 | },
27 | actions: {
28 | display: 'flex',
29 | flexDirection: 'row',
30 | gap: tokens.spacingHorizontalS,
31 | },
32 | });
33 |
34 | interface MiniControlProps {
35 | icon: JSX.Element;
36 | label: string;
37 | linkUrl: string;
38 | actions?: JSX.Element;
39 | tooltip?: string;
40 | }
41 |
42 | export const MiniControl: React.FC<MiniControlProps> = (props) => {
43 | const { icon, label, linkUrl, actions, tooltip } = props;
44 | const classes = useClasses();
45 |
46 | const link = (
47 | <Link className={classes.header} to={linkUrl}>
48 | {icon}
49 | <Label className={classes.link} size="large">
50 | {label}
51 | </Label>
52 | </Link>
53 | );
54 |
55 | return (
56 | <Card>
57 | <div className={classes.body}>
58 | {tooltip ? <TooltipWrapper content={tooltip}>{link}</TooltipWrapper> : link}
59 | <div className={classes.actions}>{actions}</div>
60 | </div>
61 | </Card>
62 | );
63 | };
64 |
```
--------------------------------------------------------------------------------
/assistants/skill-assistant/assistant/logging.py:
--------------------------------------------------------------------------------
```python
1 | import json
2 | import logging
3 | from datetime import datetime
4 | from typing import Any
5 | from uuid import UUID
6 |
7 | from pydantic import BaseModel
8 |
9 | logger = logging.getLogger("skill-assistant")
10 | logger.setLevel(logging.DEBUG)
11 | # logger.addHandler(NullHandler())
12 |
13 |
14 | def convert_to_serializable(data: Any) -> Any:
15 | """
16 | Recursively convert Pydantic BaseModel instances to dictionaries.
17 | """
18 | if isinstance(data, BaseModel):
19 | return data.model_dump()
20 | elif isinstance(data, dict):
21 | return {key: convert_to_serializable(value) for key, value in data.items()}
22 | elif isinstance(data, list):
23 | return [convert_to_serializable(item) for item in data]
24 | elif isinstance(data, tuple):
25 | return tuple(convert_to_serializable(item) for item in data)
26 | elif isinstance(data, set):
27 | return {convert_to_serializable(item) for item in data}
28 | return data
29 |
30 |
31 | class CustomEncoder(json.JSONEncoder):
32 | def default(self, o):
33 | if isinstance(o, UUID):
34 | return str(o)
35 | if isinstance(o, datetime):
36 | return o.isoformat()
37 | return super().default(o)
38 |
39 |
40 | def add_serializable_data(data: Any) -> dict[str, Any]:
41 | """
42 | Helper function to use when adding extra data to log messages. Data will
43 | attempt to be put into a serializable format.
44 | """
45 | extra = {}
46 |
47 | # Convert to serializable.
48 | data = convert_to_serializable(data)
49 |
50 | # Ensure data is a JSON-serializable object.
51 | try:
52 | data = json.loads(json.dumps(data, cls=CustomEncoder))
53 | except Exception as e:
54 | data = str(e)
55 |
56 | if data:
57 | extra["data"] = data
58 |
59 | return extra
60 |
61 |
62 | extra_data = add_serializable_data
63 |
```
--------------------------------------------------------------------------------
/mcp-servers/mcp-server-giphy/.vscode/settings.json:
--------------------------------------------------------------------------------
```json
1 | {
2 | "editor.bracketPairColorization.enabled": true,
3 | "editor.codeActionsOnSave": {
4 | "source.organizeImports": "explicit",
5 | "source.fixAll": "explicit"
6 | },
7 | "editor.guides.bracketPairs": "active",
8 | "editor.formatOnPaste": true,
9 | "editor.formatOnType": true,
10 | "editor.formatOnSave": true,
11 | "files.eol": "\n",
12 | "files.trimTrailingWhitespace": true,
13 | "[json]": {
14 | "editor.defaultFormatter": "esbenp.prettier-vscode",
15 | "editor.formatOnSave": true
16 | },
17 | "[jsonc]": {
18 | "editor.defaultFormatter": "esbenp.prettier-vscode",
19 | "editor.formatOnSave": true
20 | },
21 | "python.analysis.autoFormatStrings": true,
22 | "python.analysis.autoImportCompletions": true,
23 | "python.analysis.diagnosticMode": "workspace",
24 | "python.analysis.fixAll": ["source.unusedImports"],
25 | "python.analysis.inlayHints.functionReturnTypes": true,
26 | "python.analysis.typeCheckingMode": "standard",
27 | "python.defaultInterpreterPath": "${workspaceFolder}/.venv",
28 | "[python]": {
29 | "editor.defaultFormatter": "charliermarsh.ruff",
30 | "editor.formatOnSave": true,
31 | "editor.codeActionsOnSave": {
32 | "source.fixAll": "explicit",
33 | "source.unusedImports": "explicit",
34 | "source.organizeImports": "explicit",
35 | "source.formatDocument": "explicit"
36 | }
37 | },
38 | "ruff.nativeServer": "on",
39 | "search.exclude": {
40 | "**/.venv": true,
41 | "**/.data": true
42 | },
43 | // For use with optional extension: "streetsidesoftware.code-spell-checker"
44 | "cSpell.ignorePaths": [
45 | ".venv",
46 | "node_modules",
47 | "package-lock.json",
48 | "settings.json",
49 | "uv.lock"
50 | ],
51 | "cSpell.words": [
52 | "debugpy",
53 | "dotenv",
54 | "fastmcp",
55 | "GIPHY",
56 | "pyright",
57 | "toplevel"
58 | ]
59 | }
60 |
```
--------------------------------------------------------------------------------
/workbench-app/src/redux/features/localUser/localUserSlice.ts:
--------------------------------------------------------------------------------
```typescript
1 | // Copyright (c) Microsoft. All rights reserved.
2 |
3 | import { PayloadAction, createSlice } from '@reduxjs/toolkit';
4 | import { AppStorage } from '../../../libs/AppStorage';
5 | import { LocalUserState } from './LocalUserState';
6 |
7 | const storageKeys = {
8 | id: 'local-user.id',
9 | name: 'local-user.name',
10 | email: 'local-user.email',
11 | avatarName: 'local-user.avatar.name',
12 | avatarImage: 'local-user.avatar.image',
13 | };
14 |
15 | const initialState: LocalUserState = {
16 | id: AppStorage.getInstance().loadObject<string>(storageKeys.id),
17 | name: AppStorage.getInstance().loadObject<string>(storageKeys.name),
18 | email: AppStorage.getInstance().loadObject<string>(storageKeys.email),
19 | avatar: {
20 | name: AppStorage.getInstance().loadObject<string>(storageKeys.avatarName),
21 | image: AppStorage.getInstance().loadObject<{
22 | src: string;
23 | }>(storageKeys.avatarImage),
24 | },
25 | };
26 |
27 | export const localUserSlice = createSlice({
28 | name: 'localUser',
29 | initialState,
30 | reducers: {
31 | setLocalUser: (state: LocalUserState, action: PayloadAction<LocalUserState>) => {
32 | Object.assign(state, action.payload);
33 | AppStorage.getInstance().saveObject(storageKeys.id, state.id);
34 | AppStorage.getInstance().saveObject(storageKeys.name, state.name);
35 | AppStorage.getInstance().saveObject(storageKeys.email, state.email);
36 | AppStorage.getInstance().saveObject(storageKeys.avatarName, state.avatar.name);
37 | AppStorage.getInstance().saveObject(storageKeys.avatarImage, state.avatar.image);
38 | },
39 | },
40 | });
41 |
42 | export const { setLocalUser } = localUserSlice.actions;
43 |
44 | export default localUserSlice.reducer;
45 |
```
--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/tests/utilities/test_make_arg_set.py:
--------------------------------------------------------------------------------
```python
1 | from skill_library.utilities import make_arg_set
2 |
3 |
4 | def test_make_arg_set():
5 | expected_variables = ["a", "b", "c"]
6 | args = (1, 2)
7 | kwargs = {"c": 3}
8 |
9 | arg_set = make_arg_set(expected_variables, args, kwargs)
10 | assert arg_set == {"a": 1, "b": 2, "c": 3}
11 |
12 |
13 | def test_make_arg_set_no_args():
14 | expected_variables = ["a", "b", "c"]
15 | args = ()
16 | kwargs = {"a": 1, "b": 2, "c": 3}
17 |
18 | arg_set = make_arg_set(expected_variables, args, kwargs)
19 | assert arg_set == {"a": 1, "b": 2, "c": 3}
20 |
21 |
22 | def test_make_arg_set_no_kwargs():
23 | expected_variables = ["a", "b", "c"]
24 | args = (1, 2, 3)
25 | kwargs = {}
26 |
27 | arg_set = make_arg_set(expected_variables, args, kwargs)
28 | assert arg_set == {"a": 1, "b": 2, "c": 3}
29 |
30 |
31 | def test_make_arg_set_no_args_or_kwargs():
32 | expected_variables = ["a", "b", "c"]
33 | args = ()
34 | kwargs = {}
35 |
36 | arg_set = make_arg_set(expected_variables, args, kwargs)
37 | assert arg_set == {}
38 |
39 |
40 | def test_make_arg_set_extra_args():
41 | expected_variables = ["a", "b", "c"]
42 | args = (1, 2, 3, 4)
43 | kwargs = {}
44 |
45 | arg_set = make_arg_set(expected_variables, args, kwargs)
46 | assert arg_set == {"a": 1, "b": 2, "c": 3}
47 |
48 |
49 | def test_make_arg_set_extra_kwargs():
50 | expected_variables = ["a", "b", "c"]
51 | args = ()
52 | kwargs = {"a": 1, "b": 2, "c": 3, "d": 4}
53 |
54 | arg_set = make_arg_set(expected_variables, args, kwargs)
55 | assert arg_set == {"a": 1, "b": 2, "c": 3}
56 |
57 |
58 | def test_make_arg_set_extra_args_and_kwargs():
59 | expected_variables = ["a", "b", "c"]
60 | args = (1, 2, 3, 4)
61 | kwargs = {"a": "m", "b": "n", "c": "o", "d": "p"}
62 |
63 | arg_set = make_arg_set(expected_variables, args, kwargs)
64 | assert arg_set == {"a": "m", "b": "n", "c": "o"}
65 |
```
--------------------------------------------------------------------------------
/aspire-orchestrator/Aspire.Extensions/VirtualEnvironment.cs:
--------------------------------------------------------------------------------
```csharp
1 | // Copyright (c) Microsoft. All rights reserved.
2 |
3 | namespace Aspire.Hosting.ComponentModel;
4 |
5 | internal sealed class VirtualEnvironment(string virtualEnvironmentPath)
6 | {
7 | /// <summary>
8 | /// Locates an executable in the virtual environment.
9 | /// </summary>
10 | /// <param name="name">The name of the executable.</param>
11 | /// <returns>Returns the path to the executable if it exists in the virtual environment.</returns>
12 | public string? GetExecutable(string name)
13 | {
14 | if (OperatingSystem.IsWindows())
15 | {
16 | string[] allowedExtensions = [".exe", ".cmd", ".bat"];
17 |
18 | return allowedExtensions
19 | .Select(allowedExtension => Path.Join(virtualEnvironmentPath, "Scripts", name + allowedExtension))
20 | .FirstOrDefault(File.Exists);
21 | }
22 |
23 | var executablePath = Path.Join(virtualEnvironmentPath, "bin", name);
24 | return File.Exists(executablePath) ? executablePath : null;
25 | }
26 |
27 | /// <summary>
28 | /// Locates a required executable in the virtual environment.
29 | /// </summary>
30 | /// <param name="name">The name of the executable.</param>
31 | /// <returns>The path to the executable in the virtual environment.</returns>
32 | /// <exception cref="DistributedApplicationException">Gets thrown when the executable couldn't be located.</exception>
33 | public string GetRequiredExecutable(string name)
34 | {
35 | return this.GetExecutable(name) ?? throw new DistributedApplicationException(
36 | $"The executable {name} could not be found in the virtual environment at '{virtualEnvironmentPath}' . " +
37 | "Make sure the virtual environment is initialized and the executable is installed.");
38 | }
39 | }
40 |
```
--------------------------------------------------------------------------------
/workbench-app/src/redux/features/settings/settingsSlice.ts:
--------------------------------------------------------------------------------
```typescript
1 | // Copyright (c) Microsoft. All rights reserved.
2 |
3 | import { createSlice, PayloadAction } from '@reduxjs/toolkit';
4 | import { Constants } from '../../../Constants';
5 | import { AppStorage } from '../../../libs/AppStorage';
6 | import { SettingsState } from './SettingsState';
7 |
8 | const storageKeys = {
9 | theme: 'settings.theme',
10 | environmentId: 'settings.environment-id',
11 | };
12 |
13 | const initialState: SettingsState = {
14 | theme: AppStorage.getInstance().loadObject<string>(storageKeys.theme) ?? Constants.app.defaultTheme,
15 | environmentId:
16 | AppStorage.getInstance().loadObject<string>(storageKeys.environmentId) ??
17 | Constants.service.defaultEnvironmentId,
18 | };
19 |
20 | export const settingsSlice = createSlice({
21 | name: 'settings',
22 | initialState,
23 | reducers: {
24 | setTheme: (state: SettingsState, action: PayloadAction<string>) => {
25 | AppStorage.getInstance().saveObject(storageKeys.theme, action.payload);
26 | state.theme = action.payload;
27 | },
28 | setEnvironmentId: (state: SettingsState, action: PayloadAction<string>) => {
29 | const needsReload = state.environmentId !== action.payload;
30 | if (action.payload === Constants.service.defaultEnvironmentId) {
31 | AppStorage.getInstance().saveObject(storageKeys.environmentId, undefined);
32 | } else {
33 | AppStorage.getInstance().saveObject(storageKeys.environmentId, action.payload);
34 | }
35 | state.environmentId = action.payload;
36 | if (needsReload) {
37 | window.location.reload();
38 | }
39 | },
40 | },
41 | });
42 |
43 | export const { setTheme, setEnvironmentId } = settingsSlice.actions;
44 |
45 | export default settingsSlice.reducer;
46 |
```
--------------------------------------------------------------------------------
/libraries/python/assistant-extensions/pyproject.toml:
--------------------------------------------------------------------------------
```toml
1 | [project]
2 | name = "assistant-extensions"
3 | version = "0.1.0"
4 | description = "Extensions for the Semantic Workbench OpenAI assistant."
5 | authors = [{ name = "Semantic Workbench Team" }]
6 | readme = "README.md"
7 | requires-python = ">=3.11"
8 | dependencies = [
9 | "anthropic>=0.40.0",
10 | "anthropic-client>=0.1.0",
11 | "assistant-drive>=0.1.0",
12 | "deepmerge>=2.0",
13 | "chat-context-toolkit>=0.1.0",
14 | "openai>=1.61.0",
15 | "openai-client>=0.1.0",
16 | "requests-sse>=0.3.2",
17 | "semantic-workbench-assistant>=0.1.0",
18 | ]
19 |
20 | [project.optional-dependencies]
21 | # For any of the above dependencies that are specific to a single extension, it'd be good
22 | # to consider moving them to the optional-dependencies section. This way, the dependencies
23 | # are only installed when the specific extension is installed, to reduce the overall size
24 | # of the package installation, especially when bundling larger dependencies.
25 | attachments = ["docx2txt>=0.8", "pdfplumber>=0.11.2"]
26 | mcp = ["mcp-extensions[openai]>=0.1.0"]
27 |
28 | [dependency-groups]
29 | dev = ["pyright>=1.1.389", "pytest>=8.3.1", "pytest-asyncio>=0.23.8"]
30 |
31 | [tool.uv.sources]
32 | anthropic-client = { path = "../anthropic-client", editable = true }
33 | assistant-drive = { path = "../assistant-drive", editable = true }
34 | mcp-extensions = { path = "../mcp-extensions", editable = true }
35 | openai-client = { path = "../openai-client", editable = true }
36 | semantic-workbench-assistant = { path = "../semantic-workbench-assistant", editable = true }
37 | chat-context-toolkit = { path = "../chat-context-toolkit", editable = true }
38 |
39 | [build-system]
40 | requires = ["hatchling"]
41 | build-backend = "hatchling.build"
42 |
43 |
44 | [tool.pytest.ini_options]
45 | asyncio_default_fixture_loop_scope = "function"
46 | asyncio_mode = "auto"
47 |
```
--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/guided_conversation/tests/test_generate_agenda.py:
--------------------------------------------------------------------------------
```python
1 | import pytest
2 | from skill_library.skills.guided_conversation.agenda import Agenda
3 | from skill_library.skills.guided_conversation.chat_completions.generate_agenda import generate_agenda, resource_phrase
4 | from skill_library.skills.guided_conversation.conversation_guides import acrostic_poem
5 | from skill_library.skills.guided_conversation.message import Conversation
6 | from skill_library.skills.guided_conversation.resources import ConversationResource, ResourceConstraintUnit
7 | from skill_library.types import LanguageModel
8 |
9 |
10 | @pytest.mark.skip("For manual testing.")
11 | async def test_generate_agenda(client: LanguageModel) -> None:
12 | conversation = Conversation().add_user_message("Hi!")
13 | agenda = Agenda()
14 | artifact = {}
15 | definition = acrostic_poem.definition
16 | resource = ConversationResource(resource_constraint=definition.resource_constraint)
17 | agenda, is_done = await generate_agenda(
18 | client,
19 | definition,
20 | conversation,
21 | agenda,
22 | artifact,
23 | resource,
24 | )
25 | assert agenda is not None
26 | assert not is_done
27 |
28 |
29 | def test_format_resource():
30 | assert resource_phrase(1, ResourceConstraintUnit.TURNS) == "1 turn"
31 | assert resource_phrase(1, ResourceConstraintUnit.SECONDS) == "1 second"
32 | assert resource_phrase(1, ResourceConstraintUnit.MINUTES) == "1 minute"
33 | assert resource_phrase(2, ResourceConstraintUnit.TURNS) == "2 turns"
34 | assert resource_phrase(2, ResourceConstraintUnit.SECONDS) == "2 seconds"
35 | assert resource_phrase(2, ResourceConstraintUnit.MINUTES) == "2 minutes"
36 | assert resource_phrase(1.5, ResourceConstraintUnit.SECONDS) == "2 seconds"
37 | assert resource_phrase(1.5, ResourceConstraintUnit.MINUTES) == "2 minutes"
38 |
```
--------------------------------------------------------------------------------
/mcp-servers/mcp-server-open-deep-research-clone/mcp_server_open_deep_research_clone/logging.py:
--------------------------------------------------------------------------------
```python
1 | import json
2 | import logging
3 | from datetime import datetime
4 | from typing import Any
5 | from uuid import UUID
6 | from .config import settings
7 |
8 | from pydantic import BaseModel
9 |
10 |
11 | logging.root.setLevel(logging.getLevelNamesMapping()[settings.log_level.upper()])
12 |
13 | logger = logging.getLogger("skill-assistant")
14 |
15 |
16 | def convert_to_serializable(data: Any) -> Any:
17 | """
18 | Recursively convert Pydantic BaseModel instances to dictionaries.
19 | """
20 | if isinstance(data, BaseModel):
21 | return data.model_dump()
22 | elif isinstance(data, dict):
23 | return {key: convert_to_serializable(value) for key, value in data.items()}
24 | elif isinstance(data, list):
25 | return [convert_to_serializable(item) for item in data]
26 | elif isinstance(data, tuple):
27 | return tuple(convert_to_serializable(item) for item in data)
28 | elif isinstance(data, set):
29 | return {convert_to_serializable(item) for item in data}
30 | return data
31 |
32 |
33 | class CustomEncoder(json.JSONEncoder):
34 | def default(self, o):
35 | if isinstance(o, UUID):
36 | return str(o)
37 | if isinstance(o, datetime):
38 | return o.isoformat()
39 | return super().default(o)
40 |
41 |
42 | def add_serializable_data(data: Any) -> dict[str, Any]:
43 | """
44 | Helper function to use when adding extra data to log messages. Data will
45 | attempt to be put into a serializable format.
46 | """
47 | extra = {}
48 |
49 | # Convert to serializable.
50 | data = convert_to_serializable(data)
51 |
52 | # Ensure data is a JSON-serializable object.
53 | try:
54 | data = json.loads(json.dumps(data, cls=CustomEncoder))
55 | except Exception as e:
56 | data = str(e)
57 |
58 | if data:
59 | extra["data"] = data
60 |
61 | return extra
62 |
63 |
64 | extra_data = add_serializable_data
65 |
```
--------------------------------------------------------------------------------
/mcp-servers/mcp-server-web-research/mcp_server_web_research/logging.py:
--------------------------------------------------------------------------------
```python
1 | import json
2 | import logging
3 | from datetime import datetime
4 | from typing import Any
5 | from uuid import UUID
6 | from .config import settings
7 |
8 | from pydantic import BaseModel
9 |
10 |
11 | logging.root.setLevel(logging.getLevelNamesMapping()[settings.log_level.upper()])
12 |
13 | logger = logging.getLogger("skill-assistant")
14 |
15 |
16 | def convert_to_serializable(data: Any) -> Any:
17 | """
18 | Recursively convert Pydantic BaseModel instances to dictionaries.
19 | """
20 | if isinstance(data, BaseModel):
21 | return data.model_dump()
22 | elif isinstance(data, dict):
23 | return {key: convert_to_serializable(value) for key, value in data.items()}
24 | elif isinstance(data, list):
25 | return [convert_to_serializable(item) for item in data]
26 | elif isinstance(data, tuple):
27 | return tuple(convert_to_serializable(item) for item in data)
28 | elif isinstance(data, set):
29 | return {convert_to_serializable(item) for item in data}
30 | return data
31 |
32 |
33 | class CustomEncoder(json.JSONEncoder):
34 | def default(self, o):
35 | if isinstance(o, UUID):
36 | return str(o)
37 | if isinstance(o, datetime):
38 | return o.isoformat()
39 | return super().default(o)
40 |
41 |
42 | def add_serializable_data(data: Any) -> dict[str, Any]:
43 | """
44 | Helper function to use when adding extra data to log messages. Data will
45 | attempt to be put into a serializable format.
46 | """
47 | extra = {}
48 |
49 | # Convert to serializable.
50 | data = convert_to_serializable(data)
51 |
52 | # Ensure data is a JSON-serializable object.
53 | try:
54 | data = json.loads(json.dumps(data, cls=CustomEncoder))
55 | except Exception as e:
56 | data = str(e)
57 |
58 | if data:
59 | extra["data"] = data
60 |
61 | return extra
62 |
63 |
64 | extra_data = add_serializable_data
65 |
```
--------------------------------------------------------------------------------
/assistants/project-assistant/assistant/text_includes/detect_audience.md:
--------------------------------------------------------------------------------
```markdown
1 | You are an AI assistant helping a user assemble a knowledge package for an audience. Your job right now is to ensure the audience is well defined.
2 |
3 | It is important that the audience and the intended takeaways for the audience are well defined so that we can make sure all the information required for knowledge transfer has been captured.
4 |
5 | The audience is defined from messages in the COORDINATOR_CONVERSATION and its associated attachments.
6 |
7 | Add a task to your task list on these conditions:
8 |
9 | - If the audience has not been clearly defined, add a task to define it.
10 | - If the audience has been defined but no specific intended takeaways for that audience have been defined, add a task to define the intended takeaways.
11 | - If the audience or takeaways have been defined but are too general, add a task to make them more specific and concrete.
12 | - If recent messages give additional information about the intended audience, add a task to update the audience with additional information (provide the specific information that needs to be added in the task).
13 | - If recent messages give additional information about the intended audience takeaways, add a task to update the audience takeaways (provide the specific takeaway information to be updated in the task)
14 |
15 | UNDER ALL OTHER CIRCUMSTANCES, you should not add tasks. Just reply with an empty list. Oftentimes there will be nothing related to the audience or takeaways in new messages. This is quite common in a conversation. Return with an empty list in this case.
16 |
17 | IMPORTANT! If there are already tasks related to audience or audience takeaway definition, you don't need to add another task.
18 |
19 | Respond with a list of new tasks for audience or audience takeaways in JSON.
20 |
```
--------------------------------------------------------------------------------
/examples/dotnet/dotnet-01-echo-bot/Program.cs:
--------------------------------------------------------------------------------
```csharp
1 | // Copyright (c) Microsoft. All rights reserved.
2 |
3 | using Microsoft.SemanticWorkbench.Connector;
4 |
5 | namespace AgentExample;
6 |
7 | internal static class Program
8 | {
9 | private const string CORSPolicyName = "MY-CORS";
10 |
11 | internal static async Task Main(string[] args)
12 | {
13 | // Setup
14 | var appBuilder = WebApplication.CreateBuilder(args);
15 |
16 | // Load settings from files and env vars
17 | appBuilder.Configuration
18 | .AddJsonFile("appsettings.json")
19 | .AddJsonFile("appsettings.Development.json", optional: true)
20 | .AddJsonFile("appsettings.development.json", optional: true)
21 | .AddEnvironmentVariables();
22 |
23 | // Storage layer to persist agents configuration and conversations
24 | appBuilder.Services.AddSingleton<IAgentServiceStorage, AgentServiceStorage>();
25 |
26 | // Agent service to support multiple agent instances
27 | appBuilder.Services.AddSingleton<WorkbenchConnector<MyAgentConfig>, MyWorkbenchConnector>();
28 |
29 | // Misc
30 | appBuilder.Services.AddLogging()
31 | .AddCors(opt => opt.AddPolicy(CORSPolicyName, pol => pol.WithMethods("GET", "POST", "PUT", "DELETE")));
32 |
33 | // Build
34 | WebApplication app = appBuilder.Build();
35 | app.UseCors(CORSPolicyName);
36 |
37 | // Connect to workbench backend, keep alive, and accept incoming requests
38 | var connectorApiPrefix = app.Configuration.GetSection("Workbench").Get<WorkbenchConfig>()!.ConnectorApiPrefix;
39 | using var agentService = app.UseAgentWebservice<MyAgentConfig>(connectorApiPrefix, true);
40 | await agentService.ConnectAsync().ConfigureAwait(false);
41 |
42 | // Start app and webservice
43 | await app.RunAsync().ConfigureAwait(false);
44 | }
45 | }
46 |
```
--------------------------------------------------------------------------------
/libraries/python/events/events/events.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | Chat drivers integrate with other systems primarily by emitting events. The
3 | driver consumer is responsible for handling all events emitted by the driver.
4 |
5 | When integrating a driver with the the Semantic Workbench, you may find it
6 | helpful to handle all Information, or Error, or Status events in particular
7 | Semantic Workbench ways by default. For that reason, the driver should generally
8 | prefer to emit events (from its functions) that inherit from one of these
9 | events.
10 | """
11 |
12 | from datetime import datetime
13 | from typing import Any, Callable, Optional, Protocol, TypeVar
14 | from uuid import UUID, uuid4
15 |
16 | from pydantic import BaseModel, Field
17 |
18 |
19 | class EventProtocol(Protocol):
20 | id: UUID
21 | session_id: Optional[str]
22 | timestamp: datetime
23 | message: Optional[str]
24 | metadata: dict[str, Any]
25 | to_json: Callable[[], str]
26 |
27 |
28 | TEvent = TypeVar("TEvent", covariant=True, bound=EventProtocol)
29 |
30 |
31 | class BaseEvent(BaseModel):
32 | """
33 | All events inherit from the `BaseEvent` class. The `BaseEvent` class defines
34 | the common fields that, by convention, all events must have.
35 | """
36 |
37 | id: UUID = Field(default_factory=uuid4)
38 | session_id: str | None = Field(default=None)
39 | timestamp: datetime = Field(default_factory=datetime.now)
40 | message: str | None = Field(default=None)
41 | metadata: dict[str, Any] = Field(default_factory=dict)
42 |
43 | def __str__(self) -> str:
44 | return f"{self.__class__.__name__}: {self.message}"
45 |
46 | def to_json(self) -> str:
47 | return self.model_dump_json(indent=2)
48 |
49 |
50 | class InformationEvent(BaseEvent):
51 | pass
52 |
53 |
54 | class ErrorEvent(BaseEvent):
55 | pass
56 |
57 |
58 | class StatusUpdatedEvent(BaseEvent):
59 | pass
60 |
61 |
62 | class MessageEvent(BaseEvent):
63 | pass
64 |
65 |
66 | class NoticeEvent(BaseEvent):
67 | pass
68 |
```
--------------------------------------------------------------------------------
/examples/python/python-01-echo-bot/.vscode/settings.json:
--------------------------------------------------------------------------------
```json
1 | {
2 | "editor.bracketPairColorization.enabled": true,
3 | "editor.codeActionsOnSave": {
4 | "source.organizeImports": "explicit",
5 | "source.fixAll": "explicit"
6 | },
7 | "editor.guides.bracketPairs": "active",
8 | "editor.formatOnPaste": true,
9 | "editor.formatOnType": true,
10 | "editor.formatOnSave": true,
11 | "files.eol": "\n",
12 | "files.trimTrailingWhitespace": true,
13 | "[json]": {
14 | "editor.defaultFormatter": "esbenp.prettier-vscode",
15 | "editor.formatOnSave": true
16 | },
17 | "[jsonc]": {
18 | "editor.defaultFormatter": "esbenp.prettier-vscode",
19 | "editor.formatOnSave": true
20 | },
21 | "python.analysis.autoFormatStrings": true,
22 | "python.analysis.autoImportCompletions": true,
23 | "python.analysis.diagnosticMode": "workspace",
24 | "python.analysis.fixAll": ["source.unusedImports"],
25 | "python.analysis.inlayHints.functionReturnTypes": true,
26 | "python.analysis.typeCheckingMode": "standard",
27 | "python.defaultInterpreterPath": "${workspaceFolder}/.venv",
28 | "[python]": {
29 | "editor.defaultFormatter": "charliermarsh.ruff",
30 | "editor.formatOnSave": true,
31 | "editor.codeActionsOnSave": {
32 | "source.fixAll": "explicit",
33 | "source.unusedImports": "explicit",
34 | "source.organizeImports": "explicit",
35 | "source.formatDocument": "explicit"
36 | }
37 | },
38 | "ruff.nativeServer": "on",
39 | "search.exclude": {
40 | "**/.venv": true,
41 | "**/.data": true,
42 | "**/__pycache__": true
43 | },
44 | "cSpell.ignorePaths": [
45 | ".venv",
46 | "node_modules",
47 | "package-lock.json",
48 | "settings.json",
49 | "uv.lock"
50 | ],
51 | "cSpell.words": [
52 | "Codespaces",
53 | "deepmerge",
54 | "devcontainer",
55 | "dyanmic",
56 | "endregion",
57 | "fastapi",
58 | "jsonschema",
59 | "Langchain",
60 | "pydantic",
61 | "pyproject",
62 | "tiktoken",
63 | "virtualenvs"
64 | ]
65 | }
66 |
```
--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/fabric/patterns/create_investigation_visualization/system.md:
--------------------------------------------------------------------------------
```markdown
1 | # IDENTITY AND GOAL
2 |
3 | You are an expert in intelligence investigations and data visualization using GraphViz. You create full, detailed graphviz visualizations of the input you're given that show the most interesting, surprising, and useful aspects of the input.
4 |
5 | # STEPS
6 |
7 | - Fully understand the input you were given.
8 |
9 | - Spend 3,503 virtual hours taking notes on and organizing your understanding of the input.
10 |
11 | - Capture all your understanding of the input on a virtual whiteboard in your mind.
12 |
13 | - Think about how you would graph your deep understanding of the concepts in the input into a Graphviz output.
14 |
15 | # OUTPUT
16 |
17 | - Create a full Graphviz output of all the most interesting aspects of the input.
18 |
19 | - Use different shapes and colors to represent different types of nodes.
20 |
21 | - Label all nodes, connections, and edges with the most relevant information.
22 |
23 | - In the diagram and labels, make the verbs and subjects are clear, e.g., "called on phone, met in person, accessed the database."
24 |
25 | - Ensure all the activities in the investigation are represented, including research, data sources, interviews, conversations, timelines, and conclusions.
26 |
27 | - Ensure the final diagram is so clear and well annotated that even a journalist new to the story can follow it, and that it could be used to explain the situation to a jury.
28 |
29 | - In a section called ANALYSIS, write up to 10 bullet points of 16 words each giving the most important information from the input and what you learned.
30 |
31 | - In a section called CONCLUSION, give a single 25-word statement about your assessment of what happened, who did it, whether the proposition was true or not, or whatever is most relevant. In the final sentence give the CIA rating of certainty for your conclusion.
32 |
```
--------------------------------------------------------------------------------
/workbench-app/src/libs/useParticipantUtility.tsx:
--------------------------------------------------------------------------------
```typescript
1 | import { AvatarProps } from '@fluentui/react-components';
2 | import { AppGenericRegular, BotRegular, PersonRegular } from '@fluentui/react-icons';
3 | import React from 'react';
4 | import { ConversationParticipant } from '../models/ConversationParticipant';
5 | import { useAppSelector } from '../redux/app/hooks';
6 |
7 | export const useParticipantUtility = () => {
8 | const localUserState = useAppSelector((state) => state.localUser);
9 |
10 | const getAvatarData = React.useCallback(
11 | (participant: ConversationParticipant | 'localUser') => {
12 | if (participant === 'localUser') {
13 | return localUserState.avatar;
14 | }
15 |
16 | const { id, name, image, role } = participant;
17 |
18 | if (id === localUserState.id) {
19 | return localUserState.avatar;
20 | }
21 |
22 | let avatar: AvatarProps = {
23 | name: role === 'user' ? name : '',
24 | color: role !== 'user' ? 'neutral' : undefined,
25 | icon: {
26 | user: <PersonRegular />,
27 | assistant: <BotRegular />,
28 | service: <AppGenericRegular />,
29 | }[role],
30 | };
31 |
32 | if (image) {
33 | avatar = { ...avatar, image: { src: image } };
34 | }
35 |
36 | return avatar;
37 | },
38 | [localUserState.avatar, localUserState.id],
39 | );
40 |
41 | const sortParticipants = React.useCallback((participants: ConversationParticipant[], includeInactive?: boolean) => {
42 | return participants
43 | .filter((participant) => includeInactive || participant.active)
44 | .sort((a, b) => a.name.localeCompare(b.name));
45 | }, []);
46 |
47 | return {
48 | getAvatarData,
49 | sortParticipants,
50 | };
51 | };
52 |
```
--------------------------------------------------------------------------------
/libraries/python/assistant-extensions/assistant_extensions/mcp/__init__.py:
--------------------------------------------------------------------------------
```python
1 | from ._assistant_file_resource_handler import AssistantFileResourceHandler
2 | from ._client_utils import (
3 | MCPServerConnectionError,
4 | establish_mcp_sessions,
5 | get_enabled_mcp_server_configs,
6 | get_mcp_server_prompts,
7 | list_roots_callback_for,
8 | refresh_mcp_sessions,
9 | )
10 | from ._model import (
11 | ExtendedCallToolRequestParams,
12 | ExtendedCallToolResult,
13 | HostedMCPServerConfig,
14 | MCPClientRoot,
15 | MCPClientSettings,
16 | MCPErrorHandler,
17 | MCPSamplingMessageHandler,
18 | MCPServerConfig,
19 | MCPServerEnvConfig,
20 | MCPSession,
21 | )
22 | from ._openai_utils import (
23 | OpenAISamplingHandler,
24 | SamplingChatMessageProvider,
25 | sampling_message_to_chat_completion_message,
26 | )
27 | from ._tool_utils import (
28 | execute_tool,
29 | handle_mcp_tool_call,
30 | retrieve_mcp_tools_and_sessions_from_sessions,
31 | retrieve_mcp_tools_from_sessions,
32 | )
33 | from ._workbench_file_resource_handler import WorkbenchFileClientResourceHandler
34 |
35 | __all__ = [
36 | "ExtendedCallToolRequestParams",
37 | "ExtendedCallToolResult",
38 | "MCPErrorHandler",
39 | "MCPSamplingMessageHandler",
40 | "MCPServerConfig",
41 | "MCPClientSettings",
42 | "HostedMCPServerConfig",
43 | "list_roots_callback_for",
44 | "MCPSession",
45 | "MCPClientRoot",
46 | "MCPServerConnectionError",
47 | "MCPServerEnvConfig",
48 | "OpenAISamplingHandler",
49 | "establish_mcp_sessions",
50 | "get_mcp_server_prompts",
51 | "get_enabled_mcp_server_configs",
52 | "handle_mcp_tool_call",
53 | "refresh_mcp_sessions",
54 | "retrieve_mcp_tools_from_sessions",
55 | "sampling_message_to_chat_completion_message",
56 | "AssistantFileResourceHandler",
57 | "WorkbenchFileClientResourceHandler",
58 | "execute_tool",
59 | "retrieve_mcp_tools_and_sessions_from_sessions",
60 | "SamplingChatMessageProvider",
61 | ]
62 |
```
--------------------------------------------------------------------------------
/mcp-servers/mcp-server-memory-user-bio/.vscode/settings.json:
--------------------------------------------------------------------------------
```json
1 | {
2 | "editor.bracketPairColorization.enabled": true,
3 | "editor.codeActionsOnSave": {
4 | "source.organizeImports": "explicit",
5 | "source.fixAll": "explicit"
6 | },
7 | "editor.guides.bracketPairs": "active",
8 | "editor.formatOnPaste": true,
9 | "editor.formatOnType": true,
10 | "editor.formatOnSave": true,
11 | "files.eol": "\n",
12 | "files.trimTrailingWhitespace": true,
13 | "[json]": {
14 | "editor.defaultFormatter": "esbenp.prettier-vscode",
15 | "editor.formatOnSave": true
16 | },
17 | "[jsonc]": {
18 | "editor.defaultFormatter": "esbenp.prettier-vscode",
19 | "editor.formatOnSave": true
20 | },
21 | "python.analysis.autoFormatStrings": true,
22 | "python.analysis.autoImportCompletions": true,
23 | "python.analysis.diagnosticMode": "workspace",
24 | "python.analysis.fixAll": ["source.unusedImports"],
25 | // Project specific paths
26 | "python.analysis.ignore": ["libs"],
27 | "python.analysis.inlayHints.functionReturnTypes": true,
28 | "python.analysis.typeCheckingMode": "standard",
29 | "python.defaultInterpreterPath": "${workspaceFolder}/.venv",
30 | "[python]": {
31 | "editor.defaultFormatter": "charliermarsh.ruff",
32 | "editor.formatOnSave": true,
33 | "editor.codeActionsOnSave": {
34 | "source.fixAll": "explicit",
35 | "source.unusedImports": "explicit",
36 | "source.organizeImports": "explicit",
37 | "source.formatDocument": "explicit"
38 | }
39 | },
40 | "ruff.nativeServer": "on",
41 | "search.exclude": {
42 | "**/.venv": true,
43 | "**/.data": true
44 | },
45 | // For use with optional extension: "streetsidesoftware.code-spell-checker"
46 | "cSpell.ignorePaths": [
47 | ".git",
48 | ".gitignore",
49 | ".vscode",
50 | ".venv",
51 | "node_modules",
52 | "package-lock.json",
53 | "pyproject.toml",
54 | "settings.json",
55 | "uv.lock"
56 | ],
57 | "cSpell.words": ["dotenv", "fastmcp", "toplevel"]
58 | }
59 |
```
--------------------------------------------------------------------------------
/mcp-servers/mcp-server-memory-whiteboard/.vscode/settings.json:
--------------------------------------------------------------------------------
```json
1 | {
2 | "editor.bracketPairColorization.enabled": true,
3 | "editor.codeActionsOnSave": {
4 | "source.organizeImports": "explicit",
5 | "source.fixAll": "explicit"
6 | },
7 | "editor.guides.bracketPairs": "active",
8 | "editor.formatOnPaste": true,
9 | "editor.formatOnType": true,
10 | "editor.formatOnSave": true,
11 | "files.eol": "\n",
12 | "files.trimTrailingWhitespace": true,
13 | "[json]": {
14 | "editor.defaultFormatter": "esbenp.prettier-vscode",
15 | "editor.formatOnSave": true
16 | },
17 | "[jsonc]": {
18 | "editor.defaultFormatter": "esbenp.prettier-vscode",
19 | "editor.formatOnSave": true
20 | },
21 | "python.analysis.autoFormatStrings": true,
22 | "python.analysis.autoImportCompletions": true,
23 | "python.analysis.diagnosticMode": "workspace",
24 | "python.analysis.fixAll": ["source.unusedImports"],
25 | // Project specific paths
26 | "python.analysis.ignore": ["libs"],
27 | "python.analysis.inlayHints.functionReturnTypes": true,
28 | "python.analysis.typeCheckingMode": "standard",
29 | "python.defaultInterpreterPath": "${workspaceFolder}/.venv",
30 | "[python]": {
31 | "editor.defaultFormatter": "charliermarsh.ruff",
32 | "editor.formatOnSave": true,
33 | "editor.codeActionsOnSave": {
34 | "source.fixAll": "explicit",
35 | "source.unusedImports": "explicit",
36 | "source.organizeImports": "explicit",
37 | "source.formatDocument": "explicit"
38 | }
39 | },
40 | "ruff.nativeServer": "on",
41 | "search.exclude": {
42 | "**/.venv": true,
43 | "**/.data": true
44 | },
45 | // For use with optional extension: "streetsidesoftware.code-spell-checker"
46 | "cSpell.ignorePaths": [
47 | ".git",
48 | ".gitignore",
49 | ".vscode",
50 | ".venv",
51 | "node_modules",
52 | "package-lock.json",
53 | "pyproject.toml",
54 | "settings.json",
55 | "uv.lock"
56 | ],
57 | "cSpell.words": ["dotenv", "fastmcp", "toplevel"]
58 | }
59 |
```