This is page 21 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
--------------------------------------------------------------------------------
/assistants/knowledge-transfer-assistant/assistant/text_includes/share_information_request_detection.txt:
--------------------------------------------------------------------------------
```
1 | You are an analyzer that determines if a recipient of shared knowledge needs additional information that is unavailable in the existing knowledge share. You are part of a knowledge sharing system where a knowledge coordinator has shared knowledge with recipients.
2 |
3 | Recipients will be able to find most answers in the shared knowledge. ONLY create information requests when the question CLEARLY can't be answered with the available knowledge. Be VERY conservative about flagging information requests.
4 |
5 | Analyze all context, including the coordinator's chat history, the knowledge brief, the attachments, the knowledge digest, and latest messages to determine:
6 |
7 | 1. If the latest message asks for information that is NOT available in the knowledge share
8 | 2. What specific information is being requested that would require the knowledge creator's input
9 | 3. A concise title for this potential information request
10 | 4. The priority level (low, medium, high, critical) of the request
11 |
12 | Respond with JSON only:
13 | {
14 | "is_information_request": boolean, // true ONLY if message requires information beyond available shared knowledge
15 | "reason": string, // detailed explanation of your determination
16 | "potential_title": string, // a short title for the request (3-8 words)
17 | "potential_description": string, // summarized description of the information needed
18 | "suggested_priority": string, // "low", "medium", "high", or "critical"
19 | "confidence": number // 0.0-1.0 how confident you are in this assessment
20 | }
21 |
22 | When determining priority:
23 |
24 | - low: information that might enhance understanding but isn't critical
25 | - medium: useful information missing from the shared knowledge
26 | - high: important information missing that affects comprehension
27 | - critical: critical information missing that's essential for understanding
28 |
29 | Be EXTREMELY conservative - only return is_information_request=true if you're HIGHLY confident that the question cannot be answered with the existing shared knowledge and truly requires additional information from the knowledge creator.
30 |
```
--------------------------------------------------------------------------------
/assistants/project-assistant/assistant/text_includes/detect_information_request_needs.md:
--------------------------------------------------------------------------------
```markdown
1 | You are an analyzer that determines if a recipient of shared knowledge needs additional information that is unavailable in the existing knowledge share. You are part of a knowledge sharing system where a knowledge coordinator has shared knowledge with recipients.
2 |
3 | Recipients will be able to find most answers in the shared knowledge. ONLY create information requests when the question CLEARLY can't be answered with the available knowledge. Be VERY conservative about flagging information requests.
4 |
5 | Analyze all context, including the coordinator's chat history, the knowledge brief, the attachments, the knowledge digest, and latest messages to determine:
6 |
7 | 1. If the latest message asks for information that is NOT available in the knowledge share
8 | 2. What specific information is being requested that would require the knowledge creator's input
9 | 3. A concise title for this potential information request
10 | 4. The priority level (low, medium, high, critical) of the request
11 |
12 | Respond with JSON only:
13 | {
14 | "is_information_request": boolean, // true ONLY if message requires information beyond available shared knowledge
15 | "reason": string, // detailed explanation of your determination
16 | "potential_title": string, // a short title for the request (3-8 words)
17 | "potential_description": string, // summarized description of the information needed
18 | "suggested_priority": string, // "low", "medium", "high", or "critical"
19 | "confidence": number // 0.0-1.0 how confident you are in this assessment
20 | }
21 |
22 | When determining priority:
23 |
24 | - low: information that might enhance understanding but isn't critical
25 | - medium: useful information missing from the shared knowledge
26 | - high: important information missing that affects comprehension
27 | - critical: critical information missing that's essential for understanding
28 |
29 | Be EXTREMELY conservative - only return is_information_request=true if you're HIGHLY confident that the question cannot be answered with the existing shared knowledge and truly requires additional information from the knowledge creator.
30 |
```
--------------------------------------------------------------------------------
/workbench-app/src/components/Conversations/InputAttachmentList.tsx:
--------------------------------------------------------------------------------
```typescript
1 | // Copyright (c) Microsoft. All rights reserved.
2 |
3 | import { Attachment, AttachmentList, AttachmentProps } from '@fluentui-copilot/react-attachments';
4 | import { makeStyles } from '@fluentui/react-components';
5 | import debug from 'debug';
6 | import React from 'react';
7 | import { Constants } from '../../Constants';
8 | import { TooltipWrapper } from '../App/TooltipWrapper';
9 | import { ConversationFileIcon } from './ConversationFileIcon';
10 |
11 | const useClasses = makeStyles({
12 | root: {
13 | display: 'flex',
14 | flexDirection: 'column',
15 | },
16 | media: {
17 | maxWidth: '20px',
18 | maxHeight: '20px',
19 | },
20 | });
21 |
22 | const log = debug(Constants.debug.root).extend('InputAttachmentList');
23 |
24 | interface InputAttachmentProps {
25 | attachments: File[];
26 | onDismissAttachment: (file: File) => void;
27 | }
28 |
29 | export const InputAttachmentList: React.FC<InputAttachmentProps> = (props) => {
30 | const { attachments, onDismissAttachment } = props;
31 | const classes = useClasses();
32 |
33 | const attachmentList: AttachmentProps[] = attachments.map((file) => ({
34 | id: file.name,
35 | media: <ConversationFileIcon file={file} className={classes.media} />,
36 | children: (
37 | <TooltipWrapper content={file.name}>
38 | <span>{file.name}</span>
39 | </TooltipWrapper>
40 | ),
41 | }));
42 |
43 | return (
44 | <AttachmentList
45 | maxVisibleAttachments={3}
46 | onAttachmentDismiss={(_event, data) => {
47 | const file = attachments.find((file) => file.name === data.id);
48 | if (file) {
49 | log('Dismissing attachment', file.name);
50 | onDismissAttachment(file);
51 | } else {
52 | log('Attachment not found while dismissing', data.id);
53 | }
54 | }}
55 | >
56 | {attachmentList.map((attachment) => (
57 | <Attachment id={attachment.id} key={attachment.id} media={attachment.media}>
58 | {attachment.children}
59 | </Attachment>
60 | ))}
61 | </AttachmentList>
62 | );
63 | };
64 |
```
--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/fabric/patterns/summarize_paper/system.md:
--------------------------------------------------------------------------------
```markdown
1 | You are an excellent academic paper reviewer. You conduct paper summarization on the full paper text provided by the user, with following instructions:
2 |
3 | REVIEW INSTRUCTION:
4 |
5 | **Summary of Academic Paper's Technical Approach**
6 |
7 | 1. **Title and authors of the Paper:**
8 | Provide the title and authors of the paper.
9 |
10 | 2. **Main Goal and Fundamental Concept:**
11 | Begin by clearly stating the primary objective of the research presented in the academic paper. Describe the core idea or hypothesis that underpins the study in simple, accessible language.
12 |
13 | 3. **Technical Approach:**
14 | Provide a detailed explanation of the methodology used in the research. Focus on describing how the study was conducted, including any specific techniques, models, or algorithms employed. Avoid delving into complex jargon or highly technical details that might obscure understanding.
15 |
16 | 4. **Distinctive Features:**
17 | Identify and elaborate on what sets this research apart from other studies in the same field. Highlight any novel techniques, unique applications, or innovative methodologies that contribute to its distinctiveness.
18 |
19 | 5. **Experimental Setup and Results:**
20 | Describe the experimental design and data collection process used in the study. Summarize the results obtained or key findings, emphasizing any significant outcomes or discoveries.
21 |
22 | 6. **Advantages and Limitations:**
23 | Concisely discuss the strengths of the proposed approach, including any benefits it offers over existing methods. Also, address its limitations or potential drawbacks, providing a balanced view of its efficacy and applicability.
24 |
25 | 7. **Conclusion:**
26 | Sum up the key points made about the paper's technical approach, its uniqueness, and its comparative advantages and limitations. Aim for clarity and succinctness in your summary.
27 |
28 | OUTPUT INSTRUCTIONS:
29 |
30 | 1. Only use the headers provided in the instructions above.
31 | 2. Format your output in clear, human-readable Markdown.
32 | 3. Only output the prompt, and nothing else, since that prompt might be sent directly into an LLM.
33 |
34 | PAPER TEXT INPUT:
35 |
```
--------------------------------------------------------------------------------
/workbench-app/src/components/Assistants/AssistantImport.tsx:
--------------------------------------------------------------------------------
```typescript
1 | // Copyright (c) Microsoft. All rights reserved.
2 |
3 | import { ArrowUpload24Regular } from '@fluentui/react-icons';
4 | import React from 'react';
5 | import { useWorkbenchService } from '../../libs/useWorkbenchService';
6 | import { CommandButton } from '../App/CommandButton';
7 |
8 | interface AssistantImportProps {
9 | disabled?: boolean;
10 | iconOnly?: boolean;
11 | label?: string;
12 | asToolbarButton?: boolean;
13 | onImport?: (result: { assistantIds: string[]; conversationIds: string[] }) => void;
14 | onError?: (error: Error) => void;
15 | }
16 |
17 | export const AssistantImport: React.FC<AssistantImportProps> = (props) => {
18 | const { disabled, iconOnly, label, asToolbarButton, onImport, onError } = props;
19 | const [uploading, setUploading] = React.useState(false);
20 | const fileInputRef = React.useRef<HTMLInputElement>(null);
21 | const workbenchService = useWorkbenchService();
22 |
23 | const onFileChange = async (event: React.ChangeEvent<HTMLInputElement>) => {
24 | if (uploading || !event.target.files) {
25 | return;
26 | }
27 | setUploading(true);
28 |
29 | try {
30 | const file = event.target.files[0];
31 | const result = await workbenchService.importConversationsAsync(file);
32 | onImport?.(result);
33 |
34 | if (fileInputRef.current) {
35 | fileInputRef.current.value = '';
36 | }
37 | } catch (error) {
38 | onError?.(error as Error);
39 | } finally {
40 | setUploading(false);
41 | }
42 | };
43 |
44 | const onUpload = async () => {
45 | fileInputRef.current?.click();
46 | };
47 |
48 | return (
49 | <div>
50 | <input hidden ref={fileInputRef} type="file" onChange={onFileChange} />
51 | <CommandButton
52 | disabled={uploading || disabled}
53 | description="Import assistant"
54 | icon={<ArrowUpload24Regular />}
55 | iconOnly={iconOnly}
56 | asToolbarButton={asToolbarButton}
57 | label={label ?? (uploading ? 'Uploading...' : 'Import')}
58 | onClick={onUpload}
59 | />
60 | </div>
61 | );
62 | };
63 |
```
--------------------------------------------------------------------------------
/libraries/python/openai-client/openai_client/chat_driver/message_history_providers/in_memory_message_history_provider.py:
--------------------------------------------------------------------------------
```python
1 | from typing import Any, Iterable
2 |
3 | from openai.types.chat import ChatCompletionMessageParam, ChatCompletionMessageToolCallParam
4 |
5 | from openai_client.messages import (
6 | MessageFormatter,
7 | create_assistant_message,
8 | create_system_message,
9 | create_user_message,
10 | format_with_dict,
11 | )
12 |
13 |
14 | class InMemoryMessageHistoryProvider:
15 | def __init__(
16 | self,
17 | messages: list[ChatCompletionMessageParam] | None = None,
18 | formatter: MessageFormatter | None = None,
19 | ) -> None:
20 | self.formatter: MessageFormatter = formatter or format_with_dict
21 | self.messages = messages or []
22 |
23 | async def get(self) -> list[ChatCompletionMessageParam]:
24 | """Get all messages. This method is required for conforming to the
25 | MessageFormatter protocol."""
26 | return self.messages
27 |
28 | async def append(self, message: ChatCompletionMessageParam) -> None:
29 | """Append a message to the history. This method is required for
30 | conforming to the MessageFormatter protocol."""
31 | self.messages.append(message)
32 |
33 | def extend(self, messages: list[ChatCompletionMessageParam]) -> None:
34 | self.messages.extend(messages)
35 |
36 | def set(self, messages: list[ChatCompletionMessageParam], vars: dict[str, Any]) -> None:
37 | self.messages = messages
38 |
39 | def delete_all(self) -> None:
40 | self.messages = []
41 |
42 | async def append_system_message(self, content: str, var: dict[str, Any] | None = None) -> None:
43 | await self.append(create_system_message(content, var, self.formatter))
44 |
45 | async def append_user_message(self, content: str, var: dict[str, Any] | None = None) -> None:
46 | await self.append(create_user_message(content, var, self.formatter))
47 |
48 | async def append_assistant_message(
49 | self,
50 | content: str,
51 | refusal: str | None = None,
52 | tool_calls: Iterable[ChatCompletionMessageToolCallParam] | None = None,
53 | var: dict[str, Any] | None = None,
54 | ) -> None:
55 | await self.append(create_assistant_message(content, refusal, tool_calls, var, self.formatter))
56 |
```
--------------------------------------------------------------------------------
/mcp-servers/mcp-server-open-deep-research/mcp_server/server.py:
--------------------------------------------------------------------------------
```python
1 | from mcp.server.fastmcp import Context, FastMCP
2 | from mcp_extensions import send_tool_call_progress
3 |
4 | from . import settings
5 | from .open_deep_research import perform_deep_research
6 |
7 | # Set the name of the MCP server
8 | server_name = "Open Deep Research MCP Server"
9 |
10 |
11 | def create_mcp_server() -> FastMCP:
12 | # Initialize FastMCP with debug logging.
13 | mcp = FastMCP(name=server_name, log_level=settings.log_level)
14 |
15 | # Define each tool and its setup.
16 |
17 | @mcp.tool()
18 | async def deep_research(context: str, request: str, ctx: Context) -> str:
19 | """
20 | A specialized team member that thoroughly researches the internet to answer your questions.
21 | Use them for anything requiring web browsing—provide as much context as possible, especially
22 | if you need to research a specific timeframe. Don’t hesitate to give complex tasks, like
23 | analyzing differences between products or spotting discrepancies between sources. Your
24 | request must be full sentences, not just search terms (e.g., “Research current trends for…”
25 | instead of a few keywords). For context, pass as much background as you can: if using this
26 | tool in a conversation, include the conversation history; if in a broader context, include
27 | any relevant documents or details. If there is no context, pass “None.” Finally, for the
28 | request itself, provide the specific question you want answered, with as much detail as
29 | possible about what you need and the desired output.
30 | """
31 |
32 | await send_tool_call_progress(ctx, "Researching...", data={"context": context, "request": request})
33 |
34 | async def on_status_update(status: str) -> None:
35 | await send_tool_call_progress(ctx, status)
36 |
37 | # Make sure to run the async version of the function to avoid blocking the event loop.
38 | deep_research_result = await perform_deep_research(
39 | model_id="o1", question=f"Context:\n{context}\n\nRequest:\n{request}", on_status_update=on_status_update
40 | )
41 | return deep_research_result
42 |
43 | return mcp
44 |
```
--------------------------------------------------------------------------------
/workbench-app/src/components/Assistants/AssistantDelete.tsx:
--------------------------------------------------------------------------------
```typescript
1 | // Copyright (c) Microsoft. All rights reserved.
2 |
3 | import { Button, DialogTrigger, Label } from '@fluentui/react-components';
4 | import { Delete24Regular } from '@fluentui/react-icons';
5 | import React from 'react';
6 | import { Assistant } from '../../models/Assistant';
7 | import { useDeleteAssistantMutation } from '../../services/workbench';
8 | import { CommandButton } from '../App/CommandButton';
9 |
10 | interface AssistantDeleteProps {
11 | assistant: Assistant;
12 | onDelete?: () => void;
13 | iconOnly?: boolean;
14 | asToolbarButton?: boolean;
15 | }
16 |
17 | export const AssistantDelete: React.FC<AssistantDeleteProps> = (props) => {
18 | const { assistant, onDelete, iconOnly, asToolbarButton } = props;
19 | const [deleteAssistant] = useDeleteAssistantMutation();
20 | const [submitted, setSubmitted] = React.useState(false);
21 |
22 | const handleDelete = React.useCallback(async () => {
23 | if (submitted) {
24 | return;
25 | }
26 | setSubmitted(true);
27 |
28 | try {
29 | await deleteAssistant(assistant.id);
30 | onDelete?.();
31 | } finally {
32 | setSubmitted(false);
33 | }
34 | }, [submitted, deleteAssistant, assistant.id, onDelete]);
35 |
36 | return (
37 | <CommandButton
38 | description="Delete assistant"
39 | icon={<Delete24Regular />}
40 | iconOnly={iconOnly}
41 | asToolbarButton={asToolbarButton}
42 | label="Delete"
43 | dialogContent={{
44 | title: 'Delete Assistant',
45 | content: (
46 | <p>
47 | <Label> Are you sure you want to delete this assistant?</Label>
48 | </p>
49 | ),
50 | closeLabel: 'Cancel',
51 | additionalActions: [
52 | <DialogTrigger key="delete" disableButtonEnhancement>
53 | <Button appearance="primary" onClick={handleDelete} disabled={submitted}>
54 | {submitted ? 'Deleting...' : 'Delete'}
55 | </Button>
56 | </DialogTrigger>,
57 | ],
58 | }}
59 | />
60 | );
61 | };
62 |
```
--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/fabric/patterns/analyze_product_feedback/system.md:
--------------------------------------------------------------------------------
```markdown
1 | # IDENTITY and PURPOSE
2 |
3 | You are an AI assistant specialized in analyzing user feedback for products. Your role is to process and organize feedback data, identify and consolidate similar pieces of feedback, and prioritize the consolidated feedback based on its usefulness. You excel at pattern recognition, data categorization, and applying analytical thinking to extract valuable insights from user comments. Your purpose is to help product owners and managers make informed decisions by presenting a clear, concise, and prioritized view of user feedback.
4 |
5 | Take a step back and think step-by-step about how to achieve the best possible results by following the steps below.
6 |
7 | # STEPS
8 |
9 | - Collect and compile all user feedback into a single dataset
10 |
11 | - Analyze each piece of feedback and identify key themes or topics
12 |
13 | - Group similar pieces of feedback together based on these themes
14 |
15 | - For each group, create a consolidated summary that captures the essence of the feedback
16 |
17 | - Assess the usefulness of each consolidated feedback group based on factors such as frequency, impact on user experience, alignment with product goals, and feasibility of implementation
18 |
19 | - Assign a priority score to each consolidated feedback group
20 |
21 | - Sort the consolidated feedback groups by priority score in descending order
22 |
23 | - Present the prioritized list of consolidated feedback with summaries and scores
24 |
25 | # OUTPUT INSTRUCTIONS
26 |
27 | - Only output Markdown.
28 |
29 | - Use a table format to present the prioritized feedback
30 |
31 | - Include columns for: Priority Rank, Consolidated Feedback Summary, Usefulness Score, and Key Themes
32 |
33 | - Sort the table by Priority Rank in descending order
34 |
35 | - Use bullet points within the Consolidated Feedback Summary column to list key points
36 |
37 | - Use a scale of 1-10 for the Usefulness Score, with 10 being the most useful
38 |
39 | - Limit the Key Themes to 3-5 words or short phrases, separated by commas
40 |
41 | - Include a brief explanation of the scoring system and prioritization method before the table
42 |
43 | - Ensure you follow ALL these instructions when creating your output.
44 |
45 | # INPUT
46 |
47 | INPUT:%
48 |
```
--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/fabric/patterns/extract_product_features/dmiessler/extract_wisdom-1.0.0/system.md:
--------------------------------------------------------------------------------
```markdown
1 | # IDENTITY and PURPOSE
2 |
3 | You are a wisdom extraction service for text content. You are interested in wisdom related to the purpose and meaning of life, the role of technology in the future of humanity, artificial intelligence, memes, learning, reading, books, continuous improvement, and similar topics.
4 |
5 | Take a step back and think step by step about how to achieve the best result possible as defined in the steps below. You have a lot of freedom to make this work well.
6 |
7 | ## OUTPUT SECTIONS
8 |
9 | 1. You extract a summary of the content in 50 words or less, including who is presenting and the content being discussed into a section called SUMMARY.
10 |
11 | 2. You extract the top 50 ideas from the input in a section called IDEAS:. If there are less than 50 then collect all of them.
12 |
13 | 3. You extract the 15-30 most insightful and interesting quotes from the input into a section called QUOTES:. Use the exact quote text from the input.
14 |
15 | 4. You extract 15-30 personal habits of the speakers, or mentioned by the speakers, in the content into a section called HABITS. Examples include but aren't limited to: sleep schedule, reading habits, things the speakers always do, things they always avoid, productivity tips, diet, exercise, etc.
16 |
17 | 5. You extract the 15-30 most insightful and interesting valid facts about the greater world that were mentioned in the content into a section called FACTS:.
18 |
19 | 6. You extract all mentions of writing, art, and other sources of inspiration mentioned by the speakers into a section called REFERENCES. This should include any and all references to something that the speaker mentioned.
20 |
21 | 7. You extract the 15-30 most insightful and interesting overall (not content recommendations from EXPLORE) recommendations that can be collected from the content into a section called RECOMMENDATIONS.
22 |
23 | ## OUTPUT INSTRUCTIONS
24 |
25 | 1. You only output Markdown.
26 | 2. Do not give warnings or notes; only output the requested sections.
27 | 3. You use numbered lists, not bullets.
28 | 4. Do not repeat ideas, quotes, facts, or resources.
29 | 5. Do not start items with the same opening words.
30 |
```
--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/fabric/patterns/extract_wisdom/dmiessler/extract_wisdom-1.0.0/system.md:
--------------------------------------------------------------------------------
```markdown
1 | # IDENTITY and PURPOSE
2 |
3 | You are a wisdom extraction service for text content. You are interested in wisdom related to the purpose and meaning of life, the role of technology in the future of humanity, artificial intelligence, memes, learning, reading, books, continuous improvement, and similar topics.
4 |
5 | Take a step back and think step by step about how to achieve the best result possible as defined in the steps below. You have a lot of freedom to make this work well.
6 |
7 | ## OUTPUT SECTIONS
8 |
9 | 1. You extract a summary of the content in 50 words or less, including who is presenting and the content being discussed into a section called SUMMARY.
10 |
11 | 2. You extract the top 50 ideas from the input in a section called IDEAS:. If there are less than 50 then collect all of them.
12 |
13 | 3. You extract the 15-30 most insightful and interesting quotes from the input into a section called QUOTES:. Use the exact quote text from the input.
14 |
15 | 4. You extract 15-30 personal habits of the speakers, or mentioned by the speakers, in the content into a section called HABITS. Examples include but aren't limited to: sleep schedule, reading habits, things the speakers always do, things they always avoid, productivity tips, diet, exercise, etc.
16 |
17 | 5. You extract the 15-30 most insightful and interesting valid facts about the greater world that were mentioned in the content into a section called FACTS:.
18 |
19 | 6. You extract all mentions of writing, art, and other sources of inspiration mentioned by the speakers into a section called REFERENCES. This should include any and all references to something that the speaker mentioned.
20 |
21 | 7. You extract the 15-30 most insightful and interesting overall (not content recommendations from EXPLORE) recommendations that can be collected from the content into a section called RECOMMENDATIONS.
22 |
23 | ## OUTPUT INSTRUCTIONS
24 |
25 | 1. You only output Markdown.
26 | 2. Do not give warnings or notes; only output the requested sections.
27 | 3. You use numbered lists, not bullets.
28 | 4. Do not repeat ideas, quotes, facts, or resources.
29 | 5. Do not start items with the same opening words.
30 |
```
--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/fabric/patterns/rate_value/system.md:
--------------------------------------------------------------------------------
```markdown
1 | # IDENTITY and PURPOSE
2 |
3 | You are an expert parser and rater of value in content. Your goal is to determine how much value a reader/listener is being provided in a given piece of content as measured by a new metric called Value Per Minute (VPM).
4 |
5 | Take a deep breath and think step-by-step about how best to achieve the best outcome using the STEPS below.
6 |
7 | # STEPS
8 |
9 | - Fully read and understand the content and what it's trying to communicate and accomplish.
10 |
11 | - Estimate the duration of the content if it were to be consumed naturally, using the algorithm below:
12 |
13 | 1. Count the total number of words in the provided transcript.
14 | 2. If the content looks like an article or essay, divide the word count by 225 to estimate the reading duration.
15 | 3. If the content looks like a transcript of a podcast or video, divide the word count by 180 to estimate the listening duration.
16 | 4. Round the calculated duration to the nearest minute.
17 | 5. Store that value as estimated-content-minutes.
18 |
19 | - Extract all Instances Of Value being provided within the content. Instances Of Value are defined as:
20 |
21 | -- Highly surprising ideas or revelations.
22 | -- A giveaway of something useful or valuable to the audience.
23 | -- Untold and interesting stories with valuable takeaways.
24 | -- Sharing of an uncommonly valuable resource.
25 | -- Sharing of secret knowledge.
26 | -- Exclusive content that's never been revealed before.
27 | -- Extremely positive and/or excited reactions to a piece of content if there are multiple speakers/presenters.
28 |
29 | - Based on the number of valid Instances Of Value and the duration of the content (both above 4/5 and also related to those topics above), calculate a metric called Value Per Minute (VPM).
30 |
31 | # OUTPUT INSTRUCTIONS
32 |
33 | - Output a valid JSON file with the following fields for the input provided.
34 |
35 | {
36 | estimated-content-minutes: "(estimated-content-minutes)";
37 | value-instances: "(list of valid value instances)",
38 | vpm: "(the calculated VPS score.)",
39 | vpm-explanation: "(A one-sentence summary of less than 20 words on how you calculated the VPM for the content.)",
40 | }
41 |
42 |
43 | # INPUT:
44 |
45 | INPUT:
46 |
```
--------------------------------------------------------------------------------
/assistants/navigator-assistant/assistant/response/utils/formatting_utils.py:
--------------------------------------------------------------------------------
```python
1 | import logging
2 | from textwrap import dedent
3 |
4 | from semantic_workbench_api_model.workbench_model import (
5 | ConversationMessage,
6 | ConversationParticipant,
7 | )
8 |
9 | logger = logging.getLogger(__name__)
10 |
11 |
12 | def format_message(message: ConversationMessage, participants: list[ConversationParticipant]) -> str:
13 | """
14 | Format a conversation message for display.
15 | """
16 | conversation_participant = next(
17 | (participant for participant in participants if participant.id == message.sender.participant_id),
18 | None,
19 | )
20 | participant_name = conversation_participant.name if conversation_participant else "unknown"
21 | message_datetime = message.timestamp.strftime("%Y-%m-%d %H:%M:%S")
22 | return f"[{participant_name} - {message_datetime}]: {message.content}"
23 |
24 |
25 | def get_response_duration_message(response_duration: float) -> str:
26 | """
27 | Generate a display friendly message for the response duration, to be added to the footer items.
28 | """
29 |
30 | return f"Response time: {response_duration:.2f} seconds"
31 |
32 |
33 | def get_formatted_token_count(tokens: int) -> str:
34 | # if less than 1k, return the number of tokens
35 | # if greater than or equal to 1k, return the number of tokens in k
36 | # use 1 decimal place for k
37 | # drop the decimal place if the number of tokens in k is a whole number
38 | if tokens < 1000:
39 | return str(tokens)
40 | else:
41 | tokens_in_k = tokens / 1000
42 | if tokens_in_k.is_integer():
43 | return f"{int(tokens_in_k)}k"
44 | else:
45 | return f"{tokens_in_k:.1f}k"
46 |
47 |
48 | def get_token_usage_message(
49 | max_tokens: int,
50 | total_tokens: int,
51 | request_tokens: int,
52 | completion_tokens: int,
53 | ) -> str:
54 | """
55 | Generate a display friendly message for the token usage, to be added to the footer items.
56 | """
57 |
58 | return dedent(f"""
59 | Tokens used: {get_formatted_token_count(total_tokens)}
60 | ({get_formatted_token_count(request_tokens)} in / {get_formatted_token_count(completion_tokens)} out)
61 | of {get_formatted_token_count(max_tokens)} ({int(total_tokens / max_tokens * 100)}%)
62 | """).strip()
63 |
```
--------------------------------------------------------------------------------
/libraries/python/content-safety/content_safety/evaluators/openai_moderations/config.py:
--------------------------------------------------------------------------------
```python
1 | # Copyright (c) Microsoft. All rights reserved.
2 |
3 | import logging
4 | from typing import Annotated, Literal
5 |
6 | from pydantic import BaseModel, ConfigDict, Field
7 | from semantic_workbench_assistant.config import ConfigSecretStr, UISchema
8 |
9 | logger = logging.getLogger(__name__)
10 |
11 |
12 | # The semantic workbench app uses react-jsonschema-form for rendering
13 | # dynamic configuration forms based on the configuration model and UI schema
14 | # See: https://rjsf-team.github.io/react-jsonschema-form/docs/
15 | # Playground / examples: https://rjsf-team.github.io/react-jsonschema-form/
16 |
17 | # The UI schema can be used to customize the appearance of the form. Use
18 | # the UISchema class to define the UI schema for specific fields in the
19 | # configuration model.
20 |
21 |
22 | #
23 | # region Evaluator Configuration
24 | #
25 |
26 |
27 | class OpenAIContentSafetyEvaluatorConfig(BaseModel):
28 | model_config = ConfigDict(
29 | title="OpenAI Content Safety Evaluator",
30 | json_schema_extra={
31 | "required": ["openai_api_key"],
32 | },
33 | )
34 |
35 | service_type: Annotated[
36 | Literal["openai-moderations"],
37 | UISchema(widget="hidden"),
38 | ] = "openai-moderations"
39 |
40 | max_item_size: Annotated[
41 | int,
42 | Field(
43 | title="Maximum Item Size",
44 | description=(
45 | "The maximum size of an item to send to the OpenAI moderations endpoint, this must be less than or"
46 | " equal to the service's maximum (2,000 characters at the time of writing)."
47 | ),
48 | ),
49 | ] = 2_000
50 |
51 | max_item_count: Annotated[
52 | int,
53 | Field(
54 | default=32,
55 | title="Maximum Item Count",
56 | description=(
57 | "The maximum number of items to send to the OpenAI moderations endpoint at a time, this must be less or"
58 | " equal to the service's maximum (32 items at the time of writing)."
59 | ),
60 | ),
61 | ]
62 |
63 | openai_api_key: Annotated[
64 | ConfigSecretStr,
65 | Field(
66 | title="OpenAI API Key",
67 | description="The API key to use for the OpenAI API.",
68 | ),
69 | ]
70 |
71 |
72 | # endregion
73 |
```
--------------------------------------------------------------------------------
/mcp-servers/mcp-server-filesystem-edit/.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": [
58 | "aoai",
59 | "blockified",
60 | "blockify",
61 | "dotenv",
62 | "Evals",
63 | "fastmcp",
64 | "miktex",
65 | "nonstopmode",
66 | "pdflatex",
67 | "toplevel",
68 | "unblockified",
69 | "unblockify",
70 | "Xworks"
71 | ],
72 | // Python testing configuration
73 | "python.testing.pytestEnabled": true,
74 | "python.testing.unittestEnabled": false,
75 | "python.testing.pytestArgs": ["tests", "-s"]
76 | }
77 |
```
--------------------------------------------------------------------------------
/.github/workflows/mcp-server-giphy.yml:
--------------------------------------------------------------------------------
```yaml
1 | name: mcp-server-giphy continuous integration
2 |
3 | permissions:
4 | contents: read
5 | pull-requests: write
6 |
7 | on:
8 | pull_request:
9 | branches: ["main"]
10 | paths:
11 | - "mcp-servers/mcp-server-giphy/**"
12 | - "libraries/python/**"
13 | - "tools/docker/**"
14 | - ".github/workflows/mcp-server-giphy.yml"
15 |
16 | push:
17 | branches: ["main"]
18 | paths:
19 | - "mcp-servers/mcp-server-giphy/**"
20 | - "libraries/python/**"
21 | - "tools/docker/**"
22 | - ".github/workflows/mcp-server-giphy.yml"
23 |
24 | workflow_dispatch:
25 |
26 | defaults:
27 | run:
28 | working-directory: mcp-servers/mcp-server-giphy
29 |
30 | jobs:
31 | test:
32 | runs-on: ubuntu-latest
33 | steps:
34 | - uses: actions/checkout@v4
35 |
36 | - name: Install uv
37 | uses: astral-sh/setup-uv@v3
38 |
39 | - name: Set up Python 3.11
40 | run: uv python install 3.11
41 |
42 | - name: test
43 | run: |
44 | make test
45 |
46 | build:
47 | runs-on: ubuntu-latest
48 | steps:
49 | - uses: actions/checkout@v4
50 |
51 | - name: docker-build
52 | run: |
53 | make docker-build
54 |
55 | deploy:
56 | runs-on: ubuntu-latest
57 | environment: production
58 | permissions:
59 | id-token: write # for OIDC login
60 | contents: read
61 | concurrency:
62 | group: ${{ github.workflow }}-${{ github.ref }}
63 | needs: [build, test]
64 | if: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main' && vars.DEPLOYMENT_ENABLED == 'true' }}
65 | env:
66 | DOCKER_IMAGE_TAG: ${{ github.sha }}
67 | DOCKER_REGISTRY_NAME: ${{ secrets.AZURE_CONTAINER_REGISTRY_NAME }}
68 | AZURE_WEBSITE_RESOURCE_GROUP: ${{ secrets.AZURE_WEBSITE_RESOURCE_GROUP }}
69 | AZURE_WEBSITE_SUBSCRIPTION: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
70 |
71 | steps:
72 | - uses: actions/checkout@v4
73 |
74 | - uses: azure/login@v2
75 | with:
76 | client-id: ${{ secrets.AZURE_CLIENT_ID }}
77 | tenant-id: ${{ secrets.AZURE_TENANT_ID }}
78 | subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
79 |
80 | - name: docker-push
81 | run: |
82 | make docker-push
83 |
84 | - name: docker-deploy
85 | run: |
86 | make docker-deploy
87 |
```
--------------------------------------------------------------------------------
/libraries/python/assistant-drive/.vscode/settings.json:
--------------------------------------------------------------------------------
```json
1 | {
2 | "editor.bracketPairColorization.enabled": true,
3 | "editor.codeActionsOnSave": {
4 | "source.fixAll": "always",
5 | "source.organizeImports": "always"
6 | },
7 | "editor.defaultFormatter": "esbenp.prettier-vscode",
8 | "editor.formatOnPaste": true,
9 | "editor.formatOnSave": true,
10 | "editor.formatOnType": true,
11 | "editor.guides.bracketPairs": "active",
12 | "files.eol": "\n",
13 | "files.trimTrailingWhitespace": true,
14 | "flake8.ignorePatterns": ["**/*.py"], // disable flake8 in favor of ruff
15 | "jupyter.debugJustMyCode": false,
16 | "python.analysis.autoFormatStrings": true,
17 | "python.analysis.autoImportCompletions": true,
18 | "python.analysis.diagnosticMode": "workspace",
19 | "python.analysis.exclude": [
20 | "**/.venv/**",
21 | "**/.data/**",
22 | "**/__pycache__/**"
23 | ],
24 | "python.analysis.fixAll": ["source.unusedImports"],
25 | "python.analysis.inlayHints.functionReturnTypes": true,
26 | "python.analysis.typeCheckingMode": "standard",
27 | "python.defaultInterpreterPath": "${workspaceFolder}/.venv",
28 | "python.testing.cwd": "${workspaceFolder}",
29 | "python.testing.pytestArgs": ["--color", "yes"],
30 | "python.testing.pytestEnabled": true,
31 | "search.exclude": {
32 | "**/.venv": true,
33 | "**/data": true
34 | },
35 | "[json]": {
36 | "editor.defaultFormatter": "esbenp.prettier-vscode",
37 | "editor.formatOnSave": true
38 | },
39 | "[jsonc]": {
40 | "editor.defaultFormatter": "esbenp.prettier-vscode",
41 | "editor.formatOnSave": true
42 | },
43 | "[python]": {
44 | "editor.defaultFormatter": "charliermarsh.ruff",
45 | "editor.formatOnSave": true,
46 | "editor.codeActionsOnSave": {
47 | "source.fixAll": "explicit",
48 | "source.unusedImports": "explicit",
49 | "source.organizeImports": "explicit",
50 | "source.formatDocument": "explicit"
51 | }
52 | },
53 | "ruff.nativeServer": "on",
54 | // For use with optional extension: "streetsidesoftware.code-spell-checker"
55 | "cSpell.ignorePaths": [
56 | ".venv",
57 | "node_modules",
58 | "package-lock.json",
59 | "settings.json",
60 | "uv.lock"
61 | ],
62 | "cSpell.words": [
63 | "dotenv",
64 | "httpx",
65 | "openai",
66 | "pydantic",
67 | "pypdf",
68 | "runtimes",
69 | "subdrive",
70 | "tiktoken"
71 | ]
72 | }
73 |
```
--------------------------------------------------------------------------------
/workbench-app/src/components/Conversations/ContentRenderers/HtmlContentRenderer.tsx:
--------------------------------------------------------------------------------
```typescript
1 | // Copyright (c) Microsoft. All rights reserved.
2 |
3 | import { makeStyles, shorthands, Text, tokens } from '@fluentui/react-components';
4 | import React from 'react';
5 | import DynamicIframe from '../../App/DynamicIframe';
6 | import { CodeContentRenderer } from './CodeContentRenderer';
7 | import { MarkdownContentRenderer } from './MarkdownContentRenderer';
8 |
9 | const useClasses = makeStyles({
10 | previewTitle: {
11 | ...shorthands.margin(tokens.spacingVerticalM, 0, 0, 0),
12 | },
13 | previewBox: {
14 | border: `1px solid ${tokens.colorNeutralStroke1}`,
15 | },
16 | });
17 |
18 | interface HtmlContentRendererProps {
19 | content: string;
20 | displayNonHtmlContent?: boolean;
21 | }
22 |
23 | export const HtmlContentRenderer: React.FC<HtmlContentRendererProps> = (props) => {
24 | const { content, displayNonHtmlContent } = props;
25 | const classes = useClasses();
26 |
27 | // replace all html content with the dynamic iframe
28 | const parts = content.split(/(```html\n[\s\S]*?\n```)/g);
29 |
30 | return (
31 | <>
32 | {parts.map((part, index) => {
33 | const htmlMatch = part.match(/```html\n([\s\S]*?)\n```/);
34 | if (htmlMatch) {
35 | return (
36 | <>
37 | {displayNonHtmlContent ? (
38 | <>
39 | <CodeContentRenderer key={index} content={htmlMatch[1]} language="html" />
40 | <Text className={classes.previewTitle} weight="semibold">
41 | Preview:
42 | </Text>
43 | </>
44 | ) : null}
45 | <div className={displayNonHtmlContent ? classes.previewBox : ''}>
46 | <DynamicIframe key={index} source={htmlMatch[1]} />
47 | </div>
48 | </>
49 | );
50 | } else {
51 | return displayNonHtmlContent ? <MarkdownContentRenderer key={index} content={part} /> : null;
52 | }
53 | })}
54 | </>
55 | );
56 | };
57 |
```
--------------------------------------------------------------------------------
/.github/workflows/assistants-skill-assistant.yml:
--------------------------------------------------------------------------------
```yaml
1 | name: skill-assistant continuous integration
2 |
3 | permissions:
4 | contents: read
5 | pull-requests: write
6 |
7 | on:
8 | pull_request:
9 | branches: ["main"]
10 | paths:
11 | - "assistants/skill-assistant/**"
12 | - "libraries/python/**"
13 | - "tools/docker/**"
14 | - ".github/workflows/assistants-skill-assistant.yml"
15 |
16 | push:
17 | branches: ["main"]
18 | paths:
19 | - "assistants/skill-assistant/**"
20 | - "libraries/python/**"
21 | - "tools/docker/**"
22 | - ".github/workflows/assistants-skill-assistant.yml"
23 |
24 | workflow_dispatch:
25 |
26 | defaults:
27 | run:
28 | working-directory: assistants/skill-assistant
29 |
30 | jobs:
31 | test:
32 | runs-on: ubuntu-latest
33 | steps:
34 | - uses: actions/checkout@v4
35 |
36 | - name: Install uv
37 | uses: astral-sh/setup-uv@v3
38 |
39 | - name: Set up Python 3.11
40 | run: uv python install 3.11
41 |
42 | - name: test
43 | run: |
44 | make test
45 |
46 | build:
47 | runs-on: ubuntu-latest
48 | steps:
49 | - uses: actions/checkout@v4
50 |
51 | - name: docker-build
52 | run: |
53 | make docker-build
54 |
55 | deploy:
56 | runs-on: ubuntu-latest
57 | environment: production
58 | permissions:
59 | id-token: write # for OIDC login
60 | contents: read
61 | concurrency:
62 | group: ${{ github.workflow }}-${{ github.ref }}
63 | needs: [build, test]
64 | if: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main' && vars.DEPLOYMENT_ENABLED == 'true' }}
65 | env:
66 | DOCKER_IMAGE_TAG: ${{ github.sha }}
67 | DOCKER_REGISTRY_NAME: ${{ secrets.AZURE_CONTAINER_REGISTRY_NAME }}
68 | AZURE_WEBSITE_RESOURCE_GROUP: ${{ secrets.AZURE_WEBSITE_RESOURCE_GROUP }}
69 | AZURE_WEBSITE_SUBSCRIPTION: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
70 |
71 | steps:
72 | - uses: actions/checkout@v4
73 |
74 | - uses: azure/login@v2
75 | with:
76 | client-id: ${{ secrets.AZURE_CLIENT_ID }}
77 | tenant-id: ${{ secrets.AZURE_TENANT_ID }}
78 | subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
79 |
80 | - name: docker-push
81 | run: |
82 | make docker-push
83 |
84 | - name: docker-deploy
85 | run: |
86 | make docker-deploy
87 |
```
--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/cli/settings.py:
--------------------------------------------------------------------------------
```python
1 | import json
2 | from pathlib import Path
3 |
4 | import yaml
5 | from skill_library.cli.skill_logger import SkillLogger
6 |
7 |
8 | class Settings:
9 | """Loads and manages configuration settings from config files."""
10 |
11 | def __init__(self, skills_home_dir: Path, logger: SkillLogger):
12 | self.config_dir = skills_home_dir / "config"
13 | # Set data_folder to be at .skills/data rather than under config
14 | self.data_folder = skills_home_dir / "data"
15 | self.azure_openai_endpoint = ""
16 | self.azure_openai_deployment = "gpt-4o"
17 | self.azure_openai_reasoning_deployment = "o3-mini"
18 | self.bing_subscription_key = ""
19 | self.bing_search_url = "https://api.bing.microsoft.com/v7.0/search"
20 | self.serpapi_api_key = ""
21 | self.huggingface_token = ""
22 | self.log_level = "INFO"
23 | self.logger = logger
24 | self._load_config()
25 |
26 | def _load_config(self):
27 | """Load configuration from YAML or JSON files."""
28 | # Try YAML config first (preferred)
29 | yaml_config = self.config_dir / "config.yml"
30 | if yaml_config.exists():
31 | try:
32 | with open(yaml_config, "r") as f:
33 | config = yaml.safe_load(f)
34 | if config:
35 | for key, value in config.items():
36 | setattr(self, key, value)
37 | self.logger.info(f"Loaded configuration from {yaml_config}")
38 | return
39 | except Exception as e:
40 | self.logger.warning(f"Failed to load YAML config: {e}")
41 |
42 | # Fall back to JSON config
43 | json_config = self.config_dir / "config.json"
44 | if json_config.exists():
45 | try:
46 | with open(json_config, "r") as f:
47 | config = json.load(f)
48 | if config:
49 | for key, value in config.items():
50 | setattr(self, key, value)
51 | self.logger.info(f"Loaded configuration from {json_config}")
52 | except Exception as e:
53 | self.logger.warning(f"Failed to load JSON config: {e}")
54 |
```
--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/fabric/patterns/provide_guidance/system.md:
--------------------------------------------------------------------------------
```markdown
1 | # IDENTITY and PURPOSE
2 |
3 | You are an all-knowing psychiatrist, psychologist, and life coach and you provide honest and concise advice to people based on the question asked combined with the context provided.
4 |
5 | # STEPS
6 |
7 | - Take the input given and think about the question being asked
8 |
9 | - Consider all the context of their past, their traumas, their goals, and ultimately what they're trying to do in life, and give them feedback in the following format:
10 |
11 | - In a section called ONE SENTENCE ANALYSIS AND RECOMMENDATION, give a single sentence that tells them how to approach their situation.
12 |
13 | - In a section called ANALYSIS, give up to 20 bullets of analysis of 16 words or less each on what you think might be going on relative to their question and their context. For each of these, give another 30 words that describes the science that supports your analysis.
14 |
15 | - In a section called RECOMMENDATIONS, give up to 5 bullets of recommendations of 16 words or less each on what you think they should do.
16 |
17 | - In a section called ESTHER'S ADVICE, give up to 3 bullets of advice that ESTHER PEREL would give them.
18 |
19 | - In a section called SELF-REFLECTION QUESTIONS, give up to 5 questions of no more than 15-words that could help them self-reflect on their situation.
20 |
21 | - In a section called POSSIBLE CLINICAL DIAGNOSIS, give up to 5 named psychological behaviors, conditions, or disorders that could be at play here. Examples: Co-dependency, Psychopathy, PTSD, Narcissism, etc.
22 |
23 | - In a section called SUMMARY, give a one sentence summary of your overall analysis and recommendations in a kind but honest tone.
24 |
25 | - After a "—" and a new line, add a NOTE: saying: "This was produced by an imperfect AI. The best thing to do with this information is to think about it and take it to an actual professional. Don't take it too seriously on its own."
26 |
27 | # OUTPUT INSTRUCTIONS
28 |
29 | - Output only in Markdown.
30 | - Don't tell me to consult a professional. Just give me your best opinion.
31 | - Do not output bold or italicized text; just basic Markdown.
32 | - Be courageous and honest in your feedback rather than cautious.
33 |
34 | # INPUT:
35 |
36 | INPUT:
37 |
```
--------------------------------------------------------------------------------
/workbench-app/src/libs/AuthHelper.ts:
--------------------------------------------------------------------------------
```typescript
1 | // Copyright (c) Microsoft. All rights reserved.
2 |
3 | import { EndSessionRequest, IPublicClientApplication, LogLevel, RedirectRequest } from '@azure/msal-browser';
4 | import debug from 'debug';
5 | import { Constants } from '../Constants';
6 |
7 | const log = debug(Constants.debug.root).extend('auth-helper');
8 |
9 | const getMsalConfig = () => ({
10 | auth: {
11 | ...Constants.msal.auth,
12 | redirectUri: window.origin,
13 | },
14 | cache: Constants.msal.cache,
15 | system: {
16 | loggerOptions: {
17 | loggerCallback: (level: any, message: any, containsPii: any) => {
18 | if (containsPii) {
19 | return;
20 | }
21 | switch (level) {
22 | case LogLevel.Error:
23 | log('error:', message);
24 | return;
25 | // case LogLevel.Info:
26 | // log('info:', message);
27 | // return;
28 | // case LogLevel.Verbose:
29 | // log('verbose:', message);
30 | // return;
31 | case LogLevel.Warning:
32 | log('warn:', message);
33 | }
34 | },
35 | },
36 | },
37 | });
38 |
39 | const loginRequest: RedirectRequest = {
40 | scopes: Constants.msal.msGraphScopes,
41 | // extraScopesToConsent: Constants.msal.skScopes,
42 | };
43 |
44 | const logoutRequest: EndSessionRequest = {
45 | postLogoutRedirectUri: window.origin,
46 | };
47 |
48 | const loginAsync = async (instance: IPublicClientApplication) => {
49 | if (Constants.msal.method === 'redirect') {
50 | await instance.loginRedirect(loginRequest);
51 | return undefined;
52 | } else {
53 | return await instance.loginPopup(loginRequest);
54 | }
55 | };
56 |
57 | const logoutAsync = async (instance: IPublicClientApplication) => {
58 | if (Constants.msal.method === 'popup') {
59 | void instance.logoutPopup(logoutRequest);
60 | }
61 | if (Constants.msal.method === 'redirect') {
62 | void instance.logoutRedirect(logoutRequest);
63 | }
64 | };
65 |
66 | export const AuthHelper = {
67 | getMsalConfig,
68 | loginRequest,
69 | logoutRequest,
70 | loginAsync,
71 | logoutAsync,
72 | };
73 |
```
--------------------------------------------------------------------------------
/.github/workflows/assistants-project-assistant.yml:
--------------------------------------------------------------------------------
```yaml
1 | name: project-assistant continuous integration
2 |
3 | permissions:
4 | contents: read
5 | pull-requests: write
6 |
7 | on:
8 | pull_request:
9 | branches: ["main"]
10 | paths:
11 | - "assistants/project-assistant/**"
12 | - "libraries/python/**"
13 | - "tools/docker/**"
14 | - ".github/workflows/assistants-project-assistant.yml"
15 |
16 | push:
17 | branches: ["main"]
18 | paths:
19 | - "assistants/project-assistant/**"
20 | - "libraries/python/**"
21 | - "tools/docker/**"
22 | - ".github/workflows/assistants-project-assistant.yml"
23 |
24 | workflow_dispatch:
25 |
26 | defaults:
27 | run:
28 | working-directory: assistants/project-assistant
29 |
30 | jobs:
31 | test:
32 | runs-on: ubuntu-latest
33 | steps:
34 | - uses: actions/checkout@v4
35 |
36 | - name: Install uv
37 | uses: astral-sh/setup-uv@v3
38 |
39 | - name: Set up Python 3.11
40 | run: uv python install 3.11
41 |
42 | - name: test
43 | run: |
44 | make test
45 |
46 | build:
47 | runs-on: ubuntu-latest
48 | steps:
49 | - uses: actions/checkout@v4
50 |
51 | - name: docker-build
52 | run: |
53 | make docker-build
54 |
55 | deploy:
56 | runs-on: ubuntu-latest
57 | environment: production
58 | permissions:
59 | id-token: write # for OIDC login
60 | contents: read
61 | concurrency:
62 | group: ${{ github.workflow }}-${{ github.ref }}
63 | needs: [build, test]
64 | if: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main' && vars.DEPLOYMENT_ENABLED == 'true' }}
65 | env:
66 | DOCKER_IMAGE_TAG: ${{ github.sha }}
67 | DOCKER_REGISTRY_NAME: ${{ secrets.AZURE_CONTAINER_REGISTRY_NAME }}
68 | AZURE_WEBSITE_RESOURCE_GROUP: ${{ secrets.AZURE_WEBSITE_RESOURCE_GROUP }}
69 | AZURE_WEBSITE_SUBSCRIPTION: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
70 |
71 | steps:
72 | - uses: actions/checkout@v4
73 |
74 | - uses: azure/login@v2
75 | with:
76 | client-id: ${{ secrets.AZURE_CLIENT_ID }}
77 | tenant-id: ${{ secrets.AZURE_TENANT_ID }}
78 | subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
79 |
80 | - name: docker-push
81 | run: |
82 | make docker-push
83 |
84 | - name: docker-deploy
85 | run: |
86 | make docker-deploy
87 |
```
--------------------------------------------------------------------------------
/assistants/codespace-assistant/assistant/whiteboard/_whiteboard.py:
--------------------------------------------------------------------------------
```python
1 | import logging
2 | from contextlib import AsyncExitStack, asynccontextmanager
3 | from typing import AsyncGenerator
4 |
5 | from assistant_extensions.mcp import (
6 | ExtendedCallToolRequestParams,
7 | MCPClientSettings,
8 | MCPServerConfig,
9 | MCPSession,
10 | establish_mcp_sessions,
11 | handle_mcp_tool_call,
12 | list_roots_callback_for,
13 | )
14 | from openai.types.chat import ChatCompletionMessageParam
15 | from semantic_workbench_assistant.assistant_app import ConversationContext
16 |
17 | logger = logging.getLogger(__name__)
18 |
19 |
20 | async def notify_whiteboard(
21 | context: ConversationContext,
22 | server_config: MCPServerConfig,
23 | attachment_messages: list[ChatCompletionMessageParam],
24 | chat_messages: list[ChatCompletionMessageParam],
25 | ) -> None:
26 | if not server_config.enabled:
27 | return
28 |
29 | async with (
30 | whiteboard_mcp_session(context, server_config=server_config) as whiteboard_session,
31 | context.state_updated_event_after("whiteboard"),
32 | ):
33 | result = await handle_mcp_tool_call(
34 | mcp_sessions=[whiteboard_session],
35 | tool_call=ExtendedCallToolRequestParams(
36 | id="whiteboard",
37 | name="notify_user_message",
38 | arguments={
39 | "attachment_messages": attachment_messages,
40 | "chat_messages": chat_messages,
41 | },
42 | ),
43 | method_metadata_key="whiteboard",
44 | )
45 | logger.debug("memory-whiteboard result: %s", result)
46 |
47 |
48 | @asynccontextmanager
49 | async def whiteboard_mcp_session(
50 | context: ConversationContext, server_config: MCPServerConfig
51 | ) -> AsyncGenerator[MCPSession, None]:
52 | async with AsyncExitStack() as stack:
53 | mcp_sessions = await establish_mcp_sessions(
54 | client_settings=[
55 | MCPClientSettings(
56 | server_config=server_config,
57 | list_roots_callback=list_roots_callback_for(
58 | context=context,
59 | server_config=server_config,
60 | ),
61 | )
62 | ],
63 | stack=stack,
64 | )
65 | yield mcp_sessions[0]
66 |
```
--------------------------------------------------------------------------------
/assistants/document-assistant/assistant/whiteboard/_whiteboard.py:
--------------------------------------------------------------------------------
```python
1 | import logging
2 | from contextlib import AsyncExitStack, asynccontextmanager
3 | from typing import AsyncGenerator
4 |
5 | from assistant_extensions.mcp import (
6 | ExtendedCallToolRequestParams,
7 | MCPClientSettings,
8 | MCPServerConfig,
9 | MCPSession,
10 | establish_mcp_sessions,
11 | handle_mcp_tool_call,
12 | list_roots_callback_for,
13 | )
14 | from openai.types.chat import ChatCompletionMessageParam
15 | from semantic_workbench_assistant.assistant_app import ConversationContext
16 |
17 | logger = logging.getLogger(__name__)
18 |
19 |
20 | async def notify_whiteboard(
21 | context: ConversationContext,
22 | server_config: MCPServerConfig,
23 | attachment_messages: list[ChatCompletionMessageParam],
24 | chat_messages: list[ChatCompletionMessageParam],
25 | ) -> None:
26 | if not server_config.enabled:
27 | return
28 |
29 | async with (
30 | whiteboard_mcp_session(context, server_config=server_config) as whiteboard_session,
31 | context.state_updated_event_after("whiteboard"),
32 | ):
33 | result = await handle_mcp_tool_call(
34 | mcp_sessions=[whiteboard_session],
35 | tool_call=ExtendedCallToolRequestParams(
36 | id="whiteboard",
37 | name="notify_user_message",
38 | arguments={
39 | "attachment_messages": attachment_messages,
40 | "chat_messages": chat_messages,
41 | },
42 | ),
43 | method_metadata_key="whiteboard",
44 | )
45 | logger.debug("memory-whiteboard result: %s", result)
46 |
47 |
48 | @asynccontextmanager
49 | async def whiteboard_mcp_session(
50 | context: ConversationContext, server_config: MCPServerConfig
51 | ) -> AsyncGenerator[MCPSession, None]:
52 | async with AsyncExitStack() as stack:
53 | mcp_sessions = await establish_mcp_sessions(
54 | client_settings=[
55 | MCPClientSettings(
56 | server_config=server_config,
57 | list_roots_callback=list_roots_callback_for(
58 | context=context,
59 | server_config=server_config,
60 | ),
61 | )
62 | ],
63 | stack=stack,
64 | )
65 | yield mcp_sessions[0]
66 |
```
--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/guided_conversation/guided_conversation_skill.py:
--------------------------------------------------------------------------------
```python
1 | from assistant_drive import Drive
2 | from skill_library import LanguageModel, Skill, SkillConfig
3 |
4 | from .guide import ConversationGuide
5 | from .logging import logger
6 |
7 | CLASS_NAME = "GuidedConversationSkill"
8 | DESCRIPTION = "Walks the user through a conversation about gathering info for the creation of an artifact."
9 | DEFAULT_MAX_RETRIES = 3
10 | INSTRUCTIONS = "You are an assistant."
11 |
12 |
13 | class NoDefinitionConfiguredError(Exception):
14 | pass
15 |
16 |
17 | class GuidedConversationSkillConfig(SkillConfig):
18 | """Configuration for the common skill"""
19 |
20 | language_model: LanguageModel
21 | drive: Drive
22 | definition: ConversationGuide | None = None
23 |
24 |
25 | class GuidedConversationSkill(Skill):
26 | config: GuidedConversationSkillConfig
27 |
28 | def __init__(self, config: GuidedConversationSkillConfig):
29 | super().__init__(config)
30 |
31 | self.language_model = config.language_model
32 | self.drive = config.drive
33 |
34 | # Configuring the definition of a conversation here makes this skill
35 | # instance for this one type (definition) of conversation.
36 | # Alternatively, you can not supply a definition and have the
37 | # conversation_init_function take in the definition as a parameter if
38 | # you wanted to use the same instance for different kinds of
39 | # conversations.
40 | if config.definition:
41 | # If a definition is supplied, we'll use this for every
42 | # conversation. Save it so we can use it when this skill is run
43 | # again in the future.
44 | self.drive.write_model(
45 | config.definition,
46 | "GCDefinition.json",
47 | )
48 | else:
49 | # As a convenience, check to see if a definition was already saved
50 | # previously in this drive.
51 | try:
52 | config.definition = self.drive.read_model(ConversationGuide, "GCDefinition.json")
53 | except FileNotFoundError:
54 | logger.warning(
55 | "No definition supplied or found in the drive. Will expect one as a var in the conversation_init_function"
56 | )
57 |
58 | self.guide = config.definition
59 |
```
--------------------------------------------------------------------------------
/examples/dotnet/dotnet-02-message-types-demo/appsettings.json:
--------------------------------------------------------------------------------
```json
1 | {
2 | // Semantic Workbench connector settings
3 | "Workbench": {
4 | // Unique ID of the service. Semantic Workbench will store this event to identify the server
5 | // so you should keep the value fixed to match the conversations tracked across service restarts.
6 | "ConnectorId": "AgentExample02",
7 | // The host where the connector receives requests sent by the workbench.
8 | // Locally, this is usually "http://127.0.0.1:<some port>"
9 | // On Azure, this will be something like "https://contoso.azurewebsites.net"
10 | // Leave this setting empty to use "127.0.0.1" and autodetect the port in use.
11 | // You can use an env var to set this value, e.g. Workbench__ConnectorHost=https://contoso.azurewebsites.net
12 | "ConnectorHost": "",
13 | // This is the prefix of all the endpoints exposed by the connector
14 | "ConnectorApiPrefix": "/myagents",
15 | // Semantic Workbench endpoint.
16 | "WorkbenchEndpoint": "http://127.0.0.1:3000",
17 | // Name of your agent service
18 | "ConnectorName": ".NET Multi Agent Service",
19 | // Description of your agent service.
20 | "ConnectorDescription": "Multi-agent service for .NET agents",
21 | // Where to store agents settings and conversations
22 | // See AgentServiceStorage class.
23 | "StoragePathLinux": "/tmp/.sw",
24 | "StoragePathWindows": "$tmp\\.sw"
25 | },
26 | // You agent settings
27 | "Agent": {
28 | "Name": "Agent2",
29 | "ReplyToAgents": false,
30 | "CommandsEnabled": true,
31 | "Behavior": "none"
32 | },
33 | // Azure Content Safety settings
34 | "AzureContentSafety": {
35 | "Endpoint": "https://....cognitiveservices.azure.com/",
36 | "AuthType": "ApiKey",
37 | "ApiKey": "..."
38 | },
39 | // .NET Logger settings
40 | "Logging": {
41 | "LogLevel": {
42 | "Default": "Information",
43 | "Microsoft.AspNetCore": "Information"
44 | },
45 | "Console": {
46 | "LogToStandardErrorThreshold": "Critical",
47 | "FormatterName": "simple",
48 | "FormatterOptions": {
49 | "TimestampFormat": "[HH:mm:ss.fff] ",
50 | "SingleLine": true,
51 | "UseUtcTimestamp": false,
52 | "IncludeScopes": false,
53 | "JsonWriterOptions": {
54 | "Indented": true
55 | }
56 | }
57 | }
58 | }
59 | }
```