#
tokens: 49725/50000 25/1784 files (page 22/145)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 22 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

--------------------------------------------------------------------------------
/.github/workflows/assistants-document-assistant.yml:
--------------------------------------------------------------------------------

```yaml
 1 | name: document-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/document-assistant/**"
12 |       - "libraries/python/**"
13 |       - "tools/docker/**"
14 |       - ".github/workflows/assistants-document-assistant.yml"
15 | 
16 |   push:
17 |     branches: ["main"]
18 |     paths:
19 |       - "assistants/document-assistant/**"
20 |       - "libraries/python/**"
21 |       - "tools/docker/**"
22 |       - ".github/workflows/assistants-document-assistant.yml"
23 | 
24 |   workflow_dispatch:
25 | 
26 | defaults:
27 |   run:
28 |     working-directory: assistants/document-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 | 
```

--------------------------------------------------------------------------------
/.github/workflows/assistants-explorer-assistant.yml:
--------------------------------------------------------------------------------

```yaml
 1 | name: explorer-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/explorer-assistant/**"
12 |       - "libraries/python/**"
13 |       - "tools/docker/**"
14 |       - ".github/workflows/assistants-explorer-assistant.yml"
15 | 
16 |   push:
17 |     branches: ["main"]
18 |     paths:
19 |       - "assistants/explorer-assistant/**"
20 |       - "libraries/python/**"
21 |       - "tools/docker/**"
22 |       - ".github/workflows/assistants-explorer-assistant.yml"
23 | 
24 |   workflow_dispatch:
25 | 
26 | defaults:
27 |   run:
28 |     working-directory: assistants/explorer-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/project-assistant/assistant/text_includes/update_knowledge_digest.md:
--------------------------------------------------------------------------------

```markdown
 1 | You, the assistant, maintain a "knowledge digest". Based on the last chat message, it is time to consider updating your knowledge digest.
 2 | 
 3 | ## What the knowledge digest is
 4 | 
 5 | - The knowledge digest contains an outline of the knowledge contained within a knowledge share. It is not a summary, but an organized projection of all knowledge added to the packet from the coordinator's conversation and attachments.
 6 | - The digest has a high information density. The digest contains no filler words or unnecessary content.
 7 | - The digest includes all relevant information from the chat history: questions and answers, key concepts, decisions made during the knowledge transfer process, links, codes, and specific facts.
 8 | - This digest is the primary resource of information for the audience and should help satisfy all audience takeaways.
 9 | 
10 | ## What the knowledge digest is NOT
11 | 
12 | - The knowledge digest is NOT a place for planning.
13 | - The knowledge digest is NOT a place to keep track of the audience.
14 | - The knowledge digest is NOT a place to keep track of learning objectives.
15 | 
16 | ## Knowledge digest instructions
17 | 
18 | - If the knowledge digest does not need to be updated, just return <OK_AS_IS/>
19 | - Provide updated content based upon information extracted from the last message in the chat history.
20 | - Maintain an accessible knowledge reference that helps others understand the shared information.
21 | - Organize facts and concepts.
22 | - Maintain an outline of the content at all times. If the latest message suggests a new or expanded outline, update the existing outline to reflect the new content.
23 | - Do NOT supplement the digest with your own information.
24 | - Use brief, clear explanations of complex topics.
25 | - Remove information that is no longer relevant.
26 | - Do not use the digest for keeping track of tasks.
27 | - Do not include objectives and outcomes in the knowledge digest. They are maintained separately.
28 | - It's OK to leave the knowledge digest blank if there's nothing important to capture.
29 | - Your output format must be: <KNOWLEDGE_DIGEST>{content}</KNOWLEDGE_DIGEST> if you have updated content, or <OK_AS_IS/> if no changes need to be made.
30 | 
```

--------------------------------------------------------------------------------
/.github/workflows/assistants-codespace-assistant.yml:
--------------------------------------------------------------------------------

```yaml
 1 | name: codespace-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/codespace-assistant/**"
12 |       - "libraries/python/**"
13 |       - "tools/docker/**"
14 |       - ".github/workflows/assistants-codespace-assistant.yml"
15 | 
16 |   push:
17 |     branches: ["main"]
18 |     paths:
19 |       - "assistants/codespace-assistant/**"
20 |       - "libraries/python/**"
21 |       - "tools/docker/**"
22 |       - ".github/workflows/assistants-codespace-assistant.yml"
23 | 
24 |   workflow_dispatch:
25 | 
26 | defaults:
27 |   run:
28 |     working-directory: assistants/codespace-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 | 
```

--------------------------------------------------------------------------------
/.github/workflows/assistants-navigator-assistant.yml:
--------------------------------------------------------------------------------

```yaml
 1 | name: navigator-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/navigator-assistant/**"
12 |       - "libraries/python/**"
13 |       - "tools/docker/**"
14 |       - ".github/workflows/assistants-navigator-assistant.yml"
15 | 
16 |   push:
17 |     branches: ["main"]
18 |     paths:
19 |       - "assistants/navigator-assistant/**"
20 |       - "libraries/python/**"
21 |       - "tools/docker/**"
22 |       - ".github/workflows/assistants-navigator-assistant.yml"
23 | 
24 |   workflow_dispatch:
25 | 
26 | defaults:
27 |   run:
28 |     working-directory: assistants/navigator-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 | 
```

--------------------------------------------------------------------------------
/examples/dotnet/dotnet-03-simple-chatbot/MyWorkbenchConnector.cs:
--------------------------------------------------------------------------------

```csharp
 1 | // Copyright (c) Microsoft. All rights reserved.
 2 | 
 3 | using System.Text.Json;
 4 | using Microsoft.AspNetCore.Hosting.Server;
 5 | using Microsoft.Extensions.Logging.Abstractions;
 6 | using Microsoft.SemanticWorkbench.Connector;
 7 | 
 8 | namespace AgentExample;
 9 | 
10 | internal sealed class MyWorkbenchConnector : WorkbenchConnector<MyAgentConfig>
11 | {
12 |     private readonly IServiceProvider _sp;
13 |     private readonly IConfiguration _appConfig;
14 | 
15 |     public MyWorkbenchConnector(
16 |         IServiceProvider sp,
17 |         IConfiguration appConfig,
18 |         IAgentServiceStorage storage,
19 |         IServer httpServer,
20 |         ILoggerFactory? loggerFactory = null)
21 |         : base(
22 |             workbenchConfig: appConfig.GetSection("Workbench").Get<WorkbenchConfig>(),
23 |             defaultAgentConfig: appConfig.GetSection("Agent").Get<MyAgentConfig>(),
24 |             storage: storage,
25 |             httpServer: httpServer,
26 |             logger: loggerFactory?.CreateLogger<MyWorkbenchConnector>() ?? new NullLogger<MyWorkbenchConnector>())
27 |     {
28 |         this._sp = sp;
29 |         this._appConfig = appConfig;
30 |     }
31 | 
32 |     /// <inheritdoc />
33 |     public override async Task CreateAgentAsync(
34 |         string agentId,
35 |         string? name,
36 |         object? configData,
37 |         CancellationToken cancellationToken = default)
38 |     {
39 |         if (this.GetAgent(agentId) != null) { return; }
40 | 
41 |         this.Log.LogDebug("Creating agent '{0}'", agentId);
42 | 
43 |         MyAgentConfig config = this.DefaultAgentConfig;
44 |         if (configData != null)
45 |         {
46 |             var newCfg = JsonSerializer.Deserialize<MyAgentConfig>(JsonSerializer.Serialize(configData));
47 |             if (newCfg != null) { config = newCfg; }
48 |         }
49 | 
50 |         // Instantiate using .NET Service Provider so that dependencies are automatically injected
51 |         var agent = ActivatorUtilities.CreateInstance<MyAgent>(
52 |             this._sp,
53 |             agentId, // agentId
54 |             name ?? agentId, // agentName
55 |             config, // agentConfig
56 |             this._appConfig // appConfig
57 |         );
58 | 
59 |         await agent.StartAsync(cancellationToken).ConfigureAwait(false);
60 |         this.Agents.TryAdd(agentId, agent);
61 |     }
62 | }
63 | 
```

--------------------------------------------------------------------------------
/.github/workflows/mcp-server-web-research.yml:
--------------------------------------------------------------------------------

```yaml
 1 | name: mcp-server-web-research 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-web-research/**"
12 |       - "libraries/python/**"
13 |       - "tools/docker/**"
14 |       - ".github/workflows/mcp-server-web-research.yml"
15 | 
16 |   push:
17 |     branches: ["main"]
18 |     paths:
19 |       - "mcp-servers/mcp-server-web-research/**"
20 |       - "libraries/python/**"
21 |       - "tools/docker/**"
22 |       - ".github/workflows/mcp-server-web-research.yml"
23 | 
24 |   workflow_dispatch:
25 | 
26 | defaults:
27 |   run:
28 |     working-directory: mcp-servers/mcp-server-web-research
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 | 
```

--------------------------------------------------------------------------------
/.github/workflows/assistants-prospector-assistant.yml:
--------------------------------------------------------------------------------

```yaml
 1 | name: prospector-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/prospector-assistant/**"
12 |       - "libraries/python/**"
13 |       - "tools/docker/**"
14 |       - ".github/workflows/assistants-prospector-assistant.yml"
15 | 
16 |   push:
17 |     branches: ["main"]
18 |     paths:
19 |       - "assistants/prospector-assistant/**"
20 |       - "libraries/python/**"
21 |       - "tools/docker/**"
22 |       - ".github/workflows/assistants-prospector-assistant.yml"
23 | 
24 |   workflow_dispatch:
25 | 
26 | defaults:
27 |   run:
28 |     working-directory: assistants/prospector-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/document-assistant/assistant/response/utils/tokens_tiktoken.py:
--------------------------------------------------------------------------------

```python
 1 | # Copyright (c) Microsoft. All rights reserved.
 2 | 
 3 | from collections.abc import Collection
 4 | from typing import AbstractSet, Literal
 5 | 
 6 | import tiktoken
 7 | 
 8 | 
 9 | class TokenizerOpenAI:
10 |     def __init__(
11 |         self,
12 |         model: str,
13 |         allowed_special: Literal["all"] | AbstractSet[str] | None = None,
14 |         disallowed_special: Literal["all"] | Collection[str] | None = None,
15 |     ) -> None:
16 |         self.model = model
17 |         self.allowed_special = allowed_special
18 |         self.disallowed_special = disallowed_special
19 | 
20 |         self._init_tokenizer(model, allowed_special, disallowed_special)
21 | 
22 |     def _init_tokenizer(
23 |         self,
24 |         model: str,
25 |         allowed_special: Literal["all"] | AbstractSet[str] | None = None,
26 |         disallowed_special: Literal["all"] | Collection[str] | None = None,
27 |     ) -> None:
28 |         try:
29 |             self.encoding = tiktoken.encoding_for_model(model)
30 |         except KeyError:
31 |             default_encoding = "o200k_base"
32 |             self.encoding = tiktoken.get_encoding(default_encoding)
33 | 
34 |         # Set defaults if not provided
35 |         if not allowed_special:
36 |             self.allowed_special = set()
37 |         if not disallowed_special:
38 |             self.disallowed_special = ()
39 | 
40 |     def num_tokens_in_str(self, text: str) -> int:
41 |         return len(
42 |             self.encoding.encode(
43 |                 text,
44 |                 allowed_special=self.allowed_special if self.allowed_special is not None else set(),  # type: ignore
45 |                 disallowed_special=self.disallowed_special if self.disallowed_special is not None else (),
46 |             )
47 |         )
48 | 
49 |     def truncate_str(self, text: str, max_len: int) -> str:
50 |         tokens = self.encoding.encode(
51 |             text,
52 |             allowed_special=self.allowed_special if self.allowed_special is not None else set(),  # type: ignore
53 |             disallowed_special=self.disallowed_special if self.disallowed_special is not None else (),
54 |         )
55 |         if len(tokens) > max_len:
56 |             tokens = tokens[:max_len]
57 |             truncated_text = self.encoding.decode(tokens)
58 |             return truncated_text
59 |         else:
60 |             return text
61 | 
```

--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/fabric/patterns/transcribe_minutes/system.md:
--------------------------------------------------------------------------------

```markdown
 1 | # IDENTITY and PURPOSE
 2 | 
 3 | You extract minutes from a transcribed meeting. You must identify all actionables mentioned in the meeting. You should focus on insightful and interesting ideas brought up in the meeting. 
 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 | - Fully digest the content provided.
10 | 
11 | - Extract all actionables agreed upon within the meeting.
12 | 
13 | - Extract any interesting ideas brought up in the meeting. 
14 | 
15 | - In a section called TITLE, write a 1 to 5 word title for the meeting.
16 | 
17 | - In a section called MAIN IDEA, write a 15-word sentence that captures the main idea.
18 | 
19 | - In a section called MINUTES, write 20 to 50 bullet points, highlighting of the most surprising, insightful, and/or interesting ideas that come up in the conversation. If there are less than 50 then collect all of them. Make sure you extract at least 20.
20 | 
21 | - In a section called ACTIONABLES, write bullet points for ALL agreed actionable details. This includes cases where a speaker agrees to do or look into something. If there is a deadline mentioned, include it here.
22 | 
23 | - In a section called DECISIONS, include all decisions made during the meeting, including the rationale behind each decision. Present them as bullet points.
24 | 
25 | - In a section called CHALLENGES, identify and document any challenges or issues discussed during the meeting. Note any potential solutions or strategies proposed to address these challenges.
26 | 
27 | - In a section called NEXT STEPS, outline the next steps and actions to be taken after the meeting.
28 | 
29 | # OUTPUT INSTRUCTIONS
30 | 
31 | - Only output Markdown.
32 | - Write MINUTES as exactly 16 words.
33 | - Write ACTIONABLES as exactly 16 words.
34 | - Write DECISIONS as exactly 16 words.
35 | - Write CHALLENGES as 2-3 sentences.
36 | - Write NEXT STEPS as 2-3 sentences.
37 | - Do not give warnings or notes; only output the requested sections.
38 | - Do not repeat ideas, quotes, facts, or resources.
39 | - You use bulleted lists for output, not numbered lists.
40 | - Do not start items with the same opening words.
41 | - Ensure you follow ALL these instructions when creating your output.
42 | 
43 | # INPUT
44 | 
45 | INPUT:
46 | 
```

--------------------------------------------------------------------------------
/.github/workflows/mcp-server-memory-filesystem-edit.yml:
--------------------------------------------------------------------------------

```yaml
 1 | name: mcp-server-filesystem-edit 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-filesystem-edit/**"
12 |       - "libraries/python/**"
13 |       - "tools/docker/**"
14 |       - ".github/workflows/mcp-server-filesystem-edit.yml"
15 | 
16 |   push:
17 |     branches: ["main"]
18 |     paths:
19 |       - "mcp-servers/mcp-server-filesystem-edit/**"
20 |       - "libraries/python/**"
21 |       - "tools/docker/**"
22 |       - ".github/workflows/mcp-server-filesystem-edit.yml"
23 | 
24 |   workflow_dispatch:
25 | 
26 | defaults:
27 |   run:
28 |     working-directory: mcp-servers/mcp-server-filesystem-edit
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 | 
```

--------------------------------------------------------------------------------
/.github/workflows/mcp-server-memory-user-bio.yml:
--------------------------------------------------------------------------------

```yaml
 1 | name: mcp-server-memory-user-bio 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-memory-user-bio/**"
12 |       - "libraries/python/**"
13 |       - "tools/docker/**"
14 |       - ".github/workflows/mcp-server-memory-user-bio.yml"
15 | 
16 |   push:
17 |     branches: ["main"]
18 |     paths:
19 |       - "mcp-servers/mcp-server-memory-user-bio/**"
20 |       - "libraries/python/**"
21 |       - "tools/docker/**"
22 |       - ".github/workflows/mcp-server-memory-user-bio.yml"
23 | 
24 |   workflow_dispatch:
25 | 
26 | defaults:
27 |   run:
28 |     working-directory: mcp-servers/mcp-server-memory-user-bio
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 | 
```

--------------------------------------------------------------------------------
/mcp-servers/mcp-server-office/.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.organizeImports": "explicit",
36 |       "source.formatDocument": "explicit"
37 |     }
38 |   },
39 |   "ruff.nativeServer": "on",
40 |   "search.exclude": {
41 |     "**/.venv": true,
42 |     "**/.data": true
43 |   },
44 |   // For use with optional extension: "streetsidesoftware.code-spell-checker"
45 |   "cSpell.ignorePaths": [
46 |     ".git",
47 |     ".gitignore",
48 |     ".vscode",
49 |     ".venv",
50 |     "node_modules",
51 |     "package-lock.json",
52 |     "pyproject.toml",
53 |     "settings.json",
54 |     "uv.lock"
55 |   ],
56 |   "cSpell.words": [
57 |     "aoai",
58 |     "AUTHTOKEN",
59 |     "blockified",
60 |     "blockify",
61 |     "devtunnel",
62 |     "distpath",
63 |     "dotenv",
64 |     "ERRORLEVEL",
65 |     "evals",
66 |     "fastmcp",
67 |     "hiddenimports",
68 |     "ngrok",
69 |     "onefile",
70 |     "pyinstaller",
71 |     "pyngrok",
72 |     "taskkill",
73 |     "toplevel",
74 |     "unblockified",
75 |     "unblockify"
76 |   ],
77 |   // Python testing configuration
78 |   "python.testing.pytestEnabled": true,
79 |   "python.testing.unittestEnabled": false,
80 |   "python.testing.pytestArgs": ["tests", "-s"]
81 | }
82 | 
```

--------------------------------------------------------------------------------
/workbench-app/src/components/Conversations/Message/MessageFooter.tsx:
--------------------------------------------------------------------------------

```typescript
 1 | // Copyright (c) Microsoft. All rights reserved.
 2 | 
 3 | import { AiGeneratedDisclaimer } from '@fluentui-copilot/react-copilot';
 4 | import { makeStyles, tokens } from '@fluentui/react-components';
 5 | import React from 'react';
 6 | 
 7 | import { ConversationMessage } from '../../../models/ConversationMessage';
 8 | 
 9 | import { AttachmentSection } from './AttachmentSection';
10 | 
11 | const useClasses = makeStyles({
12 |     alignForUser: {
13 |         justifyContent: 'flex-end',
14 |         alignItems: 'flex-end',
15 |     },
16 |     footer: {
17 |         display: 'flex',
18 |         color: tokens.colorNeutralForeground3,
19 |         flexDirection: 'row',
20 |         gap: tokens.spacingHorizontalS,
21 |         alignItems: 'center',
22 |     },
23 |     generated: {
24 |         width: 'fit-content',
25 |         marginTop: tokens.spacingVerticalS,
26 |     },
27 | });
28 | 
29 | interface MessageFooterProps {
30 |     message: ConversationMessage;
31 | }
32 | 
33 | export const MessageFooter: React.FC<MessageFooterProps> = (props) => {
34 |     const { message } = props;
35 |     const classes = useClasses();
36 | 
37 |     const attachments = React.useMemo(() => {
38 |         if (message.filenames && message.filenames.length > 0) {
39 |             return <AttachmentSection filenames={message.filenames} className={classes.alignForUser} />;
40 |         }
41 |         return null;
42 |     }, [message.filenames, classes.alignForUser]);
43 | 
44 |     const footerContent = React.useMemo(() => {
45 |         if (message.metadata?.['footer_items']) {
46 |             const footerItemsArray = Array.isArray(message.metadata['footer_items'])
47 |                 ? message.metadata['footer_items']
48 |                 : [message.metadata['footer_items']];
49 |             return (
50 |                 <div className={classes.footer}>
51 |                     {footerItemsArray.map((item) => (
52 |                         <AiGeneratedDisclaimer key={item} className={classes.generated}>
53 |                             {item}
54 |                         </AiGeneratedDisclaimer>
55 |                     ))}
56 |                 </div>
57 |             );
58 |         }
59 |         return null;
60 |     }, [message.metadata, classes.footer, classes.generated]);
61 | 
62 |     const footer = (
63 |         <>
64 |             {attachments}
65 |             {footerContent}
66 |         </>
67 |     );
68 | 
69 |     return footer;
70 | };
71 | 
```

--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/fabric/patterns/recommend_talkpanel_topics/system.md:
--------------------------------------------------------------------------------

```markdown
 1 | # IDENTITY
 2 | 
 3 | You read a full input of a person and their goals and their interests and ideas, and you produce a clean set of proposed talks or panel talking points that they can send to a conference organizer. 
 4 | 
 5 | # GOALS
 6 | 
 7 | - Create a clean output that can be sent directly to a conference organizer to book them for a talk or panel.
 8 | 
 9 | # STEPS
10 | 
11 | - Fully understand the context that you were given.
12 | 
13 | - Brainstorm on everything that person is interested in and good at for 319 hours.
14 | 
15 | - Come up with a list of talks or panel talking points that they could give at a conference.
16 | 
17 | # OUTPUT
18 | 
19 | - In a section called TALKS, output 3 bullets giving a talk title and abstract for each talk.
20 | 
21 | EXAMPLE:
22 | 
23 | - The Future of AI & Security: In this talk $name of person$ will discuss the future of AI and security from both an AI prediction standpoint, but also in terms of technical implementation for various platforms. Attendees will leave with a better understanding of how AI and security are deeply intertwined and how _________ sees them integrating.
24 | 
25 | END EXAMPLE:
26 | 
27 | - In a section called PANELS, output 3 bullets giving ideas for a panel topic, combined with the points they would want to bring up.
28 | 
29 | EXAMPLE:
30 | 
31 | - PANEL: How AI Will Empower Our Adversaries: In this panel, $names of the people$ will discuss how AI is being used by adversaries to gain an edge in various areas. They will discuss the implications of this and how we can better prepare for the future.
32 | 
33 | Topics Daniel Miessler can speak on in this panel:
34 | 
35 | - Attacker top talent is usually only 100 to 1000 people total
36 | - AI will soon be able to replicate much of their talent
37 | - This means we could be facing adversaries with thousands or tens of thousands of elite members
38 | - Now imagine that for propaganda campaigns, etc.
39 | 
40 | Proposed Panel Questions:
41 | 
42 | - What are some of the ways you're worried about attackers using AI?
43 | - What do you think will have the most impact for attackers, and why?
44 | - How will defenders respond? Is there a solution?
45 | - What do we see happening, world-wide, as a result of this change?
46 | 
47 | END EXAMPLE:
48 | 
49 | # OUTPUT INSTRUCTIONS
50 | 
51 | - Output in valid Markdown, but don't use any asterisks.
52 | 
```

--------------------------------------------------------------------------------
/assistants/project-assistant/assistant/domain/knowledge_brief_manager.py:
--------------------------------------------------------------------------------

```python
 1 | from semantic_workbench_assistant.assistant_app import ConversationContext
 2 | 
 3 | from assistant.data import InspectorTab, KnowledgeBrief, LogEntryType
 4 | from assistant.notifications import Notifications
 5 | from assistant.storage import ShareStorage
 6 | from assistant.utils import get_current_user_id
 7 | 
 8 | from .share_manager import ShareManager
 9 | 
10 | 
11 | class KnowledgeBriefManager:
12 |     """Manages knowledge brief operations."""
13 | 
14 |     @staticmethod
15 |     async def get_knowledge_brief(
16 |         context: ConversationContext,
17 |     ) -> KnowledgeBrief | None:
18 |         share_id = await ShareManager.get_share_id(context)
19 |         return ShareStorage.read_knowledge_brief(share_id)
20 | 
21 |     @staticmethod
22 |     async def update_knowledge_brief(
23 |         context: ConversationContext,
24 |         title: str,
25 |         content: str,
26 |         timeline: str | None = None,
27 |     ) -> KnowledgeBrief:
28 |         share_id = await ShareManager.get_share_id(context)
29 |         current_user_id = await get_current_user_id(context)
30 | 
31 |         brief = KnowledgeBrief(
32 |             title=title,
33 |             content=content,
34 |             timeline=timeline,
35 |             created_by=current_user_id,
36 |             updated_by=current_user_id,
37 |             conversation_id=str(context.id),
38 |         )
39 | 
40 |         ShareStorage.write_knowledge_brief(share_id, brief)
41 | 
42 |         # Check if this is a creation or an update
43 |         existing_brief = ShareStorage.read_knowledge_brief(share_id)
44 |         if existing_brief:
45 |             # This is an update
46 |             await ShareManager.log_share_event(
47 |                 context=context,
48 |                 entry_type=LogEntryType.BRIEFING_UPDATED.value,
49 |                 message=f"Updated brief: {title}",
50 |             )
51 |         else:
52 |             # This is a creation
53 |             await ShareManager.log_share_event(
54 |                 context=context,
55 |                 entry_type=LogEntryType.BRIEFING_CREATED.value,
56 |                 message=f"Created brief: {title}",
57 |             )
58 | 
59 |         await Notifications.notify_all(context, share_id, "Knowledge brief has been updated", {"content": content})
60 |         await Notifications.notify_all_state_update(context, [InspectorTab.BRIEF])
61 | 
62 |         return brief
63 | 
```

--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/.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.fixAll": ["source.unusedImports"],
20 |   "python.analysis.inlayHints.functionReturnTypes": true,
21 |   "python.analysis.typeCheckingMode": "standard",
22 |   "python.defaultInterpreterPath": "${workspaceFolder}/.venv",
23 |   "python.testing.pytestEnabled": true,
24 |   "search.exclude": {
25 |     "**/.venv": true,
26 |     "**/data": true
27 |   },
28 |   "[json]": {
29 |     "editor.defaultFormatter": "esbenp.prettier-vscode",
30 |     "editor.formatOnSave": true
31 |   },
32 |   "[jsonc]": {
33 |     "editor.defaultFormatter": "esbenp.prettier-vscode",
34 |     "editor.formatOnSave": true
35 |   },
36 |   "[python]": {
37 |     "editor.defaultFormatter": "charliermarsh.ruff",
38 |     "editor.formatOnSave": true,
39 |     "editor.codeActionsOnSave": {
40 |       "source.fixAll": "explicit",
41 |       "source.unusedImports": "explicit",
42 |       "source.organizeImports": "explicit",
43 |       "source.formatDocument": "explicit"
44 |     }
45 |   },
46 |   "ruff.nativeServer": "on",
47 |   // For use with optional extension: "streetsidesoftware.code-spell-checker"
48 |   "cSpell.ignorePaths": [
49 |     ".venv",
50 |     "node_modules",
51 |     "package-lock.json",
52 |     "settings.json",
53 |     "uv.lock"
54 |   ],
55 |   "cSpell.words": [
56 |     "addopts",
57 |     "asctime",
58 |     "asyncio",
59 |     "dotenv",
60 |     "httpx",
61 |     "jsonschema",
62 |     "levelname",
63 |     "metadrive",
64 |     "norecursedirs",
65 |     "openai",
66 |     "pydantic",
67 |     "pypdf",
68 |     "pyright",
69 |     "pytest",
70 |     "runtimes",
71 |     "subdrive",
72 |     "testpaths",
73 |     "tiktoken"
74 |   ],
75 |   "python.testing.pytestArgs": ["skill_library"],
76 |   "python.testing.unittestEnabled": false
77 | }
78 | 
```

--------------------------------------------------------------------------------
/.github/workflows/mcp-server-memory-whiteboard.yml:
--------------------------------------------------------------------------------

```yaml
 1 | name: mcp-server-memory-whiteboard 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-memory-whiteboard/**"
12 |       - "libraries/python/**"
13 |       - "tools/docker/**"
14 |       - ".github/workflows/mcp-server-memory-whiteboard.yml"
15 | 
16 |   push:
17 |     branches: ["main"]
18 |     paths:
19 |       - "mcp-servers/mcp-server-memory-whiteboard/**"
20 |       - "libraries/python/**"
21 |       - "tools/docker/**"
22 |       - ".github/workflows/mcp-server-memory-whiteboard.yml"
23 | 
24 |   workflow_dispatch:
25 | 
26 | defaults:
27 |   run:
28 |     working-directory: mcp-servers/mcp-server-memory-whiteboard
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/skills/common/routines/gpt_complete.py:
--------------------------------------------------------------------------------

```python
 1 | from typing import Any, cast
 2 | 
 3 | from openai_client import (
 4 |     CompletionError,
 5 |     create_system_message,
 6 |     extra_data,
 7 |     make_completion_args_serializable,
 8 |     message_content_from_completion,
 9 |     validate_completion,
10 | )
11 | from skill_library import AskUserFn, EmitFn, RunContext, RunRoutineFn
12 | from skill_library.logging import logger
13 | from skill_library.skills.common import CommonSkill
14 | 
15 | 
16 | async def main(
17 |     context: RunContext,
18 |     routine_state: dict[str, Any],
19 |     emit: EmitFn,
20 |     run: RunRoutineFn,
21 |     ask_user: AskUserFn,
22 |     prompt: str,
23 | ) -> str:
24 |     """Use the vast knowledge of GPT-4 completion using any prompt you provide. All information needed for the prompt should be in the prompt. No other context or content is available from anywhere other than this prompt. Don't refer to content outside the prompt. The prompt can be big. Returns the completion."""
25 | 
26 |     common_skill = cast(CommonSkill, context.skills["common"])
27 |     language_model = common_skill.config.language_model
28 | 
29 |     completion_args = {
30 |         "model": "gpt-4o",
31 |         "messages": [
32 |             create_system_message(
33 |                 prompt,
34 |             ),
35 |         ],
36 |     }
37 | 
38 |     metadata = {}
39 |     logger.debug("Completion call.", extra=extra_data(make_completion_args_serializable(completion_args)))
40 |     metadata["completion_args"] = make_completion_args_serializable(completion_args)
41 |     try:
42 |         completion = await language_model.beta.chat.completions.parse(
43 |             **completion_args,
44 |         )
45 |         validate_completion(completion)
46 |         logger.debug("Completion response.", extra=extra_data({"completion": completion.model_dump()}))
47 |         metadata["completion"] = completion.model_dump()
48 |     except Exception as e:
49 |         completion_error = CompletionError(e)
50 |         metadata["completion_error"] = completion_error.message
51 |         logger.error(
52 |             completion_error.message,
53 |             extra=extra_data({"completion_error": completion_error.body, "metadata": metadata}),
54 |         )
55 |         raise completion_error from e
56 |     else:
57 |         context.log("gpt_complete", metadata=metadata)
58 |         return message_content_from_completion(completion)
59 | 
```

--------------------------------------------------------------------------------
/assistants/codespace-assistant/assistant/response/utils/message_utils.py:
--------------------------------------------------------------------------------

```python
 1 | import logging
 2 | from textwrap import dedent
 3 | 
 4 | from semantic_workbench_api_model.workbench_model import (
 5 |     ConversationParticipant,
 6 | )
 7 | from semantic_workbench_assistant.assistant_app import ConversationContext
 8 | 
 9 | from ...config import PromptsConfigModel
10 | 
11 | logger = logging.getLogger(__name__)
12 | 
13 | 
14 | def build_system_message_content(
15 |     prompts_config: PromptsConfigModel,
16 |     context: ConversationContext,
17 |     participants: list[ConversationParticipant],
18 |     silence_token: str,
19 |     additional_content: list[tuple[str, str]] | None = None,
20 | ) -> str:
21 |     """
22 |     Construct the system message content with tool descriptions and instructions.
23 |     """
24 | 
25 |     system_message_content = f'{prompts_config.instruction_prompt}\n\nYour name is "{context.assistant.name}".'
26 | 
27 |     if len(participants) > 2:
28 |         participant_names = ", ".join([
29 |             f'"{participant.name}"' for participant in participants if participant.id != context.assistant.id
30 |         ])
31 |         system_message_content += dedent(f"""
32 |             \n\n
33 |             There are {len(participants)} participants in the conversation,
34 |             including you as the assistant and the following users: {participant_names}.
35 |             \n\n
36 |             You do not need to respond to every message. Do not respond if the last thing said was a closing
37 |             statement such as "bye" or "goodbye", or just a general acknowledgement like "ok" or "thanks". Do not
38 |             respond as another user in the conversation, only as "{context.assistant.name}".
39 |             Sometimes the other users need to talk amongst themselves and that is okay. If the conversation seems to
40 |             be directed at you or the general audience, go ahead and respond.
41 |             \n\n
42 |             Say "{silence_token}" to skip your turn.
43 |         """).strip()
44 | 
45 |     system_message_content += f"\n\n# Workflow Guidance:\n{prompts_config.guidance_prompt}"
46 |     system_message_content += f"\n\n# Safety Guardrails:\n{prompts_config.guardrails_prompt}"
47 | 
48 |     if additional_content:
49 |         for section in additional_content:
50 |             system_message_content += f"\n\n# {section[0]}:\n{section[1]}"
51 | 
52 |     return system_message_content
53 | 
```

--------------------------------------------------------------------------------
/libraries/python/assistant-extensions/assistant_extensions/artifacts/_inspector.py:
--------------------------------------------------------------------------------

```python
 1 | #
 2 | # region Inspector
 3 | #
 4 | 
 5 | from typing import TYPE_CHECKING, Awaitable, Callable
 6 | 
 7 | from semantic_workbench_assistant.assistant_app import (
 8 |     AssistantContext,
 9 |     AssistantConversationInspectorStateDataModel,
10 |     ConversationContext,
11 | )
12 | 
13 | if TYPE_CHECKING:
14 |     from ._artifacts import ArtifactsExtension
15 | 
16 | from ._model import ArtifactsConfigModel
17 | 
18 | 
19 | class ArtifactConversationInspectorStateProvider:
20 |     display_name = "Artifacts"
21 |     description = "Artifacts that have been co-created by the participants in the conversation. NOTE: This feature is experimental and disabled by default."
22 | 
23 |     def __init__(
24 |         self,
25 |         config_provider: Callable[[AssistantContext], Awaitable[ArtifactsConfigModel]],
26 |         artifacts_extension: "ArtifactsExtension",
27 |     ) -> None:
28 |         self.config_provider = config_provider
29 |         self.artifacts_extension = artifacts_extension
30 | 
31 |     async def is_enabled(self, context: ConversationContext) -> bool:
32 |         """
33 |         Check if the artifacts extension is enabled in the assistant configuration.
34 |         """
35 |         config = await self.config_provider(context.assistant)
36 |         return config.enabled
37 | 
38 |     async def get(self, context: ConversationContext) -> AssistantConversationInspectorStateDataModel:
39 |         """
40 |         Get the artifacts for the conversation.
41 |         """
42 | 
43 |         # get the configuration for the artifacts extension
44 |         config = await self.config_provider(context.assistant)
45 |         if not config.enabled:
46 |             return AssistantConversationInspectorStateDataModel(
47 |                 data={"content": "Artifacts are disabled in assistant configuration."}
48 |             )
49 | 
50 |         # get the artifacts for the conversation
51 |         artifacts = self.artifacts_extension.get_all_artifacts(context)
52 | 
53 |         if not artifacts:
54 |             return AssistantConversationInspectorStateDataModel(data={"content": "No artifacts available."})
55 | 
56 |         # create the data model for the artifacts
57 |         data_model = AssistantConversationInspectorStateDataModel(
58 |             data={"artifacts": [artifact.model_dump(mode="json") for artifact in artifacts]}
59 |         )
60 | 
61 |         return data_model
62 | 
63 | 
64 | # endregion
65 | 
```

--------------------------------------------------------------------------------
/assistants/prospector-assistant/assistant/agents/document/config.py:
--------------------------------------------------------------------------------

```python
 1 | from typing import Annotated
 2 | 
 3 | from guided_conversation.utils.resources import ResourceConstraint, ResourceConstraintMode, ResourceConstraintUnit
 4 | from pydantic import BaseModel, Field
 5 | from semantic_workbench_assistant.config import UISchema
 6 | 
 7 | #
 8 | # region Models
 9 | #
10 | 
11 | 
12 | class ResourceConstraintConfigModel(ResourceConstraint):
13 |     mode: Annotated[
14 |         ResourceConstraintMode,
15 |         Field(
16 |             title="Resource Mode",
17 |             description=(
18 |                 'If "exact", the agents will try to pace the conversation to use exactly the resource quantity. If'
19 |                 ' "maximum", the agents will try to pace the conversation to use at most the resource quantity.'
20 |             ),
21 |         ),
22 |     ]
23 | 
24 |     unit: Annotated[
25 |         ResourceConstraintUnit,
26 |         Field(
27 |             title="Resource Unit",
28 |             description="The unit for the resource constraint.",
29 |         ),
30 |     ]
31 | 
32 |     quantity: Annotated[
33 |         float,
34 |         Field(
35 |             title="Resource Quantity",
36 |             description="The quantity for the resource constraint. If <=0, the resource constraint is disabled.",
37 |         ),
38 |     ]
39 | 
40 | 
41 | class GuidedConversationConfigModel(BaseModel):
42 |     rules: Annotated[
43 |         list[str],
44 |         Field(title="Rules", description="Do's and don'ts that the agent should attempt to follow"),
45 |         UISchema(items=UISchema(widget="textarea", rows=2)),
46 |     ]
47 | 
48 |     conversation_flow: Annotated[
49 |         str,
50 |         Field(
51 |             title="Conversation Flow",
52 |             description="A loose natural language description of the steps of the conversation",
53 |         ),
54 |         UISchema(widget="textarea", schema={"ui:options": {"rows": 10}}, placeholder="[optional]"),
55 |     ]
56 | 
57 |     context: Annotated[
58 |         str,
59 |         Field(
60 |             title="Context",
61 |             description="General background context for the conversation.",
62 |         ),
63 |         UISchema(widget="textarea", placeholder="[optional]"),
64 |     ]
65 | 
66 |     resource_constraint: Annotated[
67 |         ResourceConstraintConfigModel,
68 |         Field(
69 |             title="Resource Constraint",
70 |         ),
71 |         UISchema(schema={"quantity": {"ui:widget": "updown"}}),
72 |     ]
73 | 
74 | 
75 | # endregion
76 | 
```

--------------------------------------------------------------------------------
/assistants/knowledge-transfer-assistant/tests/test_inspector.py:
--------------------------------------------------------------------------------

```python
 1 | """
 2 | Test script to verify state inspector functionality.
 3 | """
 4 | 
 5 | import asyncio
 6 | import logging
 7 | from unittest.mock import AsyncMock, MagicMock
 8 | 
 9 | from assistant.assistant import assistant
10 | from semantic_workbench_api_model.workbench_model import AssistantStateEvent
11 | from semantic_workbench_assistant.assistant_app import ConversationContext
12 | 
13 | # Set up logging
14 | logging.basicConfig(level=logging.INFO)
15 | logger = logging.getLogger(__name__)
16 | 
17 | 
18 | async def test_inspector():
19 |     """Test the state inspector provider."""
20 |     # Create mock context
21 |     context = AsyncMock(spec=ConversationContext)
22 |     context.id = "test-conversation-id"
23 |     context.assistant = MagicMock()
24 |     context.assistant.id = "test-assistant-id"
25 | 
26 |     # Mock conversation
27 |     conversation = MagicMock()
28 |     conversation.metadata = {"setup_complete": True, "assistant_mode": "coordinator", "share_role": "coordinator"}
29 |     context.get_conversation.return_value = conversation
30 | 
31 |     # Test all four tabbed inspectors
32 |     inspector_ids = ["brief", "objectives", "requests", "debug"]  # Note: "requests" tab now shows as "Sharing"
33 | 
34 |     for inspector_id in inspector_ids:
35 |         logger.info(f"Testing {inspector_id} inspector...")
36 | 
37 |         # Create state event
38 |         state_event = AssistantStateEvent(state_id=inspector_id, event="focus", state=None)
39 | 
40 |         # Send event
41 |         logger.info("Sending state event...")
42 |         await context.send_conversation_state_event(state_event)
43 | 
44 |         # Get inspector provider
45 |         inspector_provider = assistant.inspector_state_providers.get(inspector_id)
46 |         if not inspector_provider:
47 |             logger.error(f"No {inspector_id} inspector provider found!")
48 |             continue
49 | 
50 |         logger.info(f"Inspector provider found: {inspector_provider.display_name}")
51 | 
52 |         # Get state data
53 |         try:
54 |             state_data = await inspector_provider.get(context)
55 |             logger.info(f"State data: {state_data}")
56 |         except Exception as e:
57 |             logger.error(f"Error getting state data: {e}")
58 | 
59 |         logger.info(f"--- {inspector_id} inspector test completed ---")
60 | 
61 | 
62 | # Run the test
63 | if __name__ == "__main__":
64 |     asyncio.run(test_inspector())
65 | 
```

--------------------------------------------------------------------------------
/assistants/prospector-assistant/assistant/form_fill_extension/inspector.py:
--------------------------------------------------------------------------------

```python
 1 | import contextlib
 2 | import json
 3 | from hashlib import md5
 4 | from pathlib import Path
 5 | from typing import Callable
 6 | 
 7 | import yaml
 8 | from semantic_workbench_assistant.assistant_app.context import ConversationContext
 9 | from semantic_workbench_assistant.assistant_app.protocol import (
10 |     AssistantConversationInspectorStateDataModel,
11 |     ReadOnlyAssistantConversationInspectorStateProvider,
12 | )
13 | 
14 | 
15 | def project_to_yaml(state: dict) -> str:
16 |     """
17 |     Project the state to a yaml code block.
18 |     """
19 |     state_as_yaml = yaml.dump(state, sort_keys=False)
20 |     return f"```yaml\n{state_as_yaml}\n```"
21 | 
22 | 
23 | class FileStateInspector(ReadOnlyAssistantConversationInspectorStateProvider):
24 |     """
25 |     A conversation inspector state provider that reads the state from a file and displays it as a yaml code block.
26 |     """
27 | 
28 |     def __init__(
29 |         self,
30 |         display_name: str,
31 |         file_path_source: Callable[[ConversationContext], Path],
32 |         description: str = "",
33 |         projector: Callable[[dict], str | dict] = project_to_yaml,
34 |     ) -> None:
35 |         self._state_id = md5(
36 |             (type(self).__name__ + "_" + display_name).encode("utf-8"), usedforsecurity=False
37 |         ).hexdigest()
38 |         self._display_name = display_name
39 |         self._file_path_source = file_path_source
40 |         self._description = description
41 |         self._projector = projector
42 | 
43 |     @property
44 |     def state_id(self) -> str:
45 |         return self._state_id
46 | 
47 |     @property
48 |     def display_name(self) -> str:
49 |         return self._display_name
50 | 
51 |     @property
52 |     def description(self) -> str:
53 |         return self._description
54 | 
55 |     async def is_enabled(self, context: ConversationContext) -> bool:
56 |         return True
57 | 
58 |     async def get(self, context: ConversationContext) -> AssistantConversationInspectorStateDataModel:
59 |         def read_state(path: Path) -> dict:
60 |             with contextlib.suppress(FileNotFoundError):
61 |                 return json.loads(path.read_text(encoding="utf-8"))
62 |             return {}
63 | 
64 |         state = read_state(self._file_path_source(context))
65 | 
66 |         projected = self._projector(state)
67 | 
68 |         return AssistantConversationInspectorStateDataModel(data={"content": projected})
69 | 
```

--------------------------------------------------------------------------------
/workbench-service/semantic_workbench_service/files.py:
--------------------------------------------------------------------------------

```python
 1 | import hashlib
 2 | import logging
 3 | import pathlib
 4 | from contextlib import contextmanager
 5 | from typing import BinaryIO, Iterator
 6 | 
 7 | from pydantic_settings import BaseSettings
 8 | 
 9 | logger = logging.getLogger(__name__)
10 | 
11 | 
12 | class StorageSettings(BaseSettings):
13 |     root: str = ".data/files"
14 | 
15 | 
16 | class Storage:
17 |     def __init__(self, settings: StorageSettings):
18 |         self.root = pathlib.Path(settings.root)
19 |         self._initialized = False
20 | 
21 |     def _ensure_initialized(self):
22 |         if self._initialized:
23 |             return
24 |         self.root.mkdir(parents=True, exist_ok=True)
25 |         self._initialized = True
26 |         logger.info("initialized file storage; root: %s", self.root.absolute())
27 | 
28 |     def _file_path(self, namespace: str, filename: str, mkdir=False) -> pathlib.Path:
29 |         self._ensure_initialized()
30 |         namespace_path = self.root / namespace
31 |         if mkdir:
32 |             namespace_path.mkdir(exist_ok=True)
33 |         filename_hash = hashlib.sha256(filename.encode("utf-8")).hexdigest()
34 |         return namespace_path / filename_hash
35 | 
36 |     def path_for(self, namespace: str, filename: str) -> pathlib.Path:
37 |         namespace_path = self.root / namespace
38 |         if not filename:
39 |             return namespace_path
40 | 
41 |         filename_hash = hashlib.sha256(filename.encode("utf-8")).hexdigest()
42 |         return namespace_path / filename_hash
43 | 
44 |     def file_exists(self, namespace: str, filename: str) -> bool:
45 |         file_path = self._file_path(namespace, filename)
46 |         return file_path.exists()
47 | 
48 |     def write_file(self, namespace: str, filename: str, content: BinaryIO) -> None:
49 |         file_path = self._file_path(namespace, filename, mkdir=True)
50 |         with open(file_path, "wb") as f:
51 |             for chunk in iter(lambda: content.read(100 * 1_024), b""):
52 |                 f.write(chunk)
53 | 
54 |     def delete_file(self, namespace: str, filename: str) -> None:
55 |         file_path = self._file_path(namespace, filename)
56 |         file_path.unlink(missing_ok=True)
57 | 
58 |     @contextmanager
59 |     def read_file(self, namespace: str, filename: str) -> Iterator[BinaryIO]:
60 |         file_path = self._file_path(namespace, filename)
61 |         with open(file_path, "rb") as f:
62 |             yield f
63 | 
```
Page 22/145FirstPrevNextLast