#
tokens: 48853/50000 10/1784 files (page 5/145)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 5 of 145. Use http://codebase.md/microsoft/semanticworkbench?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .devcontainer
│   ├── .vscode
│   │   └── settings.json
│   ├── devcontainer.json
│   ├── OPTIMIZING_FOR_CODESPACES.md
│   ├── POST_SETUP_README.md
│   └── README.md
├── .dockerignore
├── .gitattributes
├── .github
│   ├── policheck.yml
│   └── workflows
│       ├── assistants-codespace-assistant.yml
│       ├── assistants-document-assistant.yml
│       ├── assistants-explorer-assistant.yml
│       ├── assistants-guided-conversation-assistant.yml
│       ├── assistants-knowledge-transfer-assistant.yml
│       ├── assistants-navigator-assistant.yml
│       ├── assistants-project-assistant.yml
│       ├── assistants-prospector-assistant.yml
│       ├── assistants-skill-assistant.yml
│       ├── libraries.yml
│       ├── mcp-server-giphy.yml
│       ├── mcp-server-memory-filesystem-edit.yml
│       ├── mcp-server-memory-user-bio.yml
│       ├── mcp-server-memory-whiteboard.yml
│       ├── mcp-server-open-deep-research-clone.yml
│       ├── mcp-server-web-research.yml
│       ├── workbench-app.yml
│       └── workbench-service.yml
├── .gitignore
├── .multi-root-tools
│   ├── Makefile
│   └── README.md
├── .vscode
│   ├── extensions.json
│   ├── launch.json
│   └── settings.json
├── ai_context
│   └── generated
│       ├── ASPIRE_ORCHESTRATOR.md
│       ├── ASSISTANT_CODESPACE.md
│       ├── ASSISTANT_DOCUMENT.md
│       ├── ASSISTANT_NAVIGATOR.md
│       ├── ASSISTANT_PROJECT.md
│       ├── ASSISTANT_PROSPECTOR.md
│       ├── ASSISTANTS_OTHER.md
│       ├── ASSISTANTS_OVERVIEW.md
│       ├── CONFIGURATION.md
│       ├── DOTNET_LIBRARIES.md
│       ├── EXAMPLES.md
│       ├── MCP_SERVERS.md
│       ├── PYTHON_LIBRARIES_AI_CLIENTS.md
│       ├── PYTHON_LIBRARIES_CORE.md
│       ├── PYTHON_LIBRARIES_EXTENSIONS.md
│       ├── PYTHON_LIBRARIES_SKILLS.md
│       ├── PYTHON_LIBRARIES_SPECIALIZED.md
│       ├── TOOLS.md
│       ├── WORKBENCH_FRONTEND.md
│       └── WORKBENCH_SERVICE.md
├── aspire-orchestrator
│   ├── .editorconfig
│   ├── Aspire.AppHost
│   │   ├── .gitignore
│   │   ├── appsettings.json
│   │   ├── Aspire.AppHost.csproj
│   │   ├── Program.cs
│   │   └── Properties
│   │       └── launchSettings.json
│   ├── Aspire.Extensions
│   │   ├── Aspire.Extensions.csproj
│   │   ├── Dashboard.cs
│   │   ├── DockerFileExtensions.cs
│   │   ├── PathNormalizer.cs
│   │   ├── UvAppHostingExtensions.cs
│   │   ├── UvAppResource.cs
│   │   ├── VirtualEnvironment.cs
│   │   └── WorkbenchServiceHostingExtensions.cs
│   ├── Aspire.ServiceDefaults
│   │   ├── Aspire.ServiceDefaults.csproj
│   │   └── Extensions.cs
│   ├── README.md
│   ├── run.sh
│   ├── SemanticWorkbench.Aspire.sln
│   └── SemanticWorkbench.Aspire.sln.DotSettings
├── assistants
│   ├── codespace-assistant
│   │   ├── .claude
│   │   │   └── settings.local.json
│   │   ├── .env.example
│   │   ├── .vscode
│   │   │   ├── extensions.json
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── assistant
│   │   │   ├── __init__.py
│   │   │   ├── assets
│   │   │   │   ├── icon_context_transfer.svg
│   │   │   │   └── icon.svg
│   │   │   ├── chat.py
│   │   │   ├── config.py
│   │   │   ├── helpers.py
│   │   │   ├── response
│   │   │   │   ├── __init__.py
│   │   │   │   ├── completion_handler.py
│   │   │   │   ├── models.py
│   │   │   │   ├── request_builder.py
│   │   │   │   ├── response.py
│   │   │   │   ├── step_handler.py
│   │   │   │   └── utils
│   │   │   │       ├── __init__.py
│   │   │   │       ├── abbreviations.py
│   │   │   │       ├── formatting_utils.py
│   │   │   │       ├── message_utils.py
│   │   │   │       └── openai_utils.py
│   │   │   ├── text_includes
│   │   │   │   ├── card_content_context_transfer.md
│   │   │   │   ├── card_content.md
│   │   │   │   ├── codespace_assistant_info.md
│   │   │   │   ├── context_transfer_assistant_info.md
│   │   │   │   ├── guardrails_prompt.txt
│   │   │   │   ├── guidance_prompt_context_transfer.txt
│   │   │   │   ├── guidance_prompt.txt
│   │   │   │   ├── instruction_prompt_context_transfer.txt
│   │   │   │   └── instruction_prompt.txt
│   │   │   └── whiteboard
│   │   │       ├── __init__.py
│   │   │       ├── _inspector.py
│   │   │       └── _whiteboard.py
│   │   ├── assistant.code-workspace
│   │   ├── Makefile
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   └── uv.lock
│   ├── document-assistant
│   │   ├── .env.example
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── assistant
│   │   │   ├── __init__.py
│   │   │   ├── assets
│   │   │   │   └── icon.svg
│   │   │   ├── chat.py
│   │   │   ├── config.py
│   │   │   ├── context_management
│   │   │   │   ├── __init__.py
│   │   │   │   └── inspector.py
│   │   │   ├── filesystem
│   │   │   │   ├── __init__.py
│   │   │   │   ├── _convert.py
│   │   │   │   ├── _file_sources.py
│   │   │   │   ├── _filesystem.py
│   │   │   │   ├── _inspector.py
│   │   │   │   ├── _model.py
│   │   │   │   ├── _prompts.py
│   │   │   │   └── _tasks.py
│   │   │   ├── guidance
│   │   │   │   ├── __init__.py
│   │   │   │   ├── dynamic_ui_inspector.py
│   │   │   │   ├── guidance_config.py
│   │   │   │   ├── guidance_prompts.py
│   │   │   │   └── README.md
│   │   │   ├── response
│   │   │   │   ├── __init__.py
│   │   │   │   ├── completion_handler.py
│   │   │   │   ├── models.py
│   │   │   │   ├── prompts.py
│   │   │   │   ├── responder.py
│   │   │   │   └── utils
│   │   │   │       ├── __init__.py
│   │   │   │       ├── formatting_utils.py
│   │   │   │       ├── message_utils.py
│   │   │   │       ├── openai_utils.py
│   │   │   │       ├── tokens_tiktoken.py
│   │   │   │       └── workbench_messages.py
│   │   │   ├── text_includes
│   │   │   │   └── document_assistant_info.md
│   │   │   ├── types.py
│   │   │   └── whiteboard
│   │   │       ├── __init__.py
│   │   │       ├── _inspector.py
│   │   │       └── _whiteboard.py
│   │   ├── assistant.code-workspace
│   │   ├── CLAUDE.md
│   │   ├── Makefile
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── test_convert.py
│   │   │   └── test_data
│   │   │       ├── blank_image.png
│   │   │       ├── Formatting Test.docx
│   │   │       ├── sample_data.csv
│   │   │       ├── sample_data.xlsx
│   │   │       ├── sample_page.html
│   │   │       ├── sample_presentation.pptx
│   │   │       └── simple_pdf.pdf
│   │   └── uv.lock
│   ├── explorer-assistant
│   │   ├── .env.example
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── assistant
│   │   │   ├── __init__.py
│   │   │   ├── chat.py
│   │   │   ├── config.py
│   │   │   ├── helpers.py
│   │   │   ├── response
│   │   │   │   ├── __init__.py
│   │   │   │   ├── model.py
│   │   │   │   ├── response_anthropic.py
│   │   │   │   ├── response_openai.py
│   │   │   │   └── response.py
│   │   │   └── text_includes
│   │   │       └── guardrails_prompt.txt
│   │   ├── assistant.code-workspace
│   │   ├── Makefile
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   └── uv.lock
│   ├── guided-conversation-assistant
│   │   ├── .env.example
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── assistant
│   │   │   ├── __init__.py
│   │   │   ├── agents
│   │   │   │   ├── guided_conversation
│   │   │   │   │   ├── config.py
│   │   │   │   │   ├── definition.py
│   │   │   │   │   └── definitions
│   │   │   │   │       ├── er_triage.py
│   │   │   │   │       ├── interview.py
│   │   │   │   │       ├── patient_intake.py
│   │   │   │   │       └── poem_feedback.py
│   │   │   │   └── guided_conversation_agent.py
│   │   │   ├── chat.py
│   │   │   ├── config.py
│   │   │   └── text_includes
│   │   │       └── guardrails_prompt.txt
│   │   ├── assistant.code-workspace
│   │   ├── Makefile
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   └── uv.lock
│   ├── knowledge-transfer-assistant
│   │   ├── .claude
│   │   │   └── settings.local.json
│   │   ├── .env.example
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── assistant
│   │   │   ├── __init__.py
│   │   │   ├── agentic
│   │   │   │   ├── __init__.py
│   │   │   │   ├── analysis.py
│   │   │   │   ├── coordinator_support.py
│   │   │   │   └── team_welcome.py
│   │   │   ├── assets
│   │   │   │   ├── icon-knowledge-transfer.svg
│   │   │   │   └── icon.svg
│   │   │   ├── assistant.py
│   │   │   ├── common.py
│   │   │   ├── config.py
│   │   │   ├── conversation_clients.py
│   │   │   ├── conversation_share_link.py
│   │   │   ├── data.py
│   │   │   ├── domain
│   │   │   │   ├── __init__.py
│   │   │   │   ├── audience_manager.py
│   │   │   │   ├── information_request_manager.py
│   │   │   │   ├── knowledge_brief_manager.py
│   │   │   │   ├── knowledge_digest_manager.py
│   │   │   │   ├── learning_objectives_manager.py
│   │   │   │   └── share_manager.py
│   │   │   ├── files.py
│   │   │   ├── logging.py
│   │   │   ├── notifications.py
│   │   │   ├── respond.py
│   │   │   ├── storage_models.py
│   │   │   ├── storage.py
│   │   │   ├── string_utils.py
│   │   │   ├── text_includes
│   │   │   │   ├── assistant_info.md
│   │   │   │   ├── card_content.md
│   │   │   │   ├── coordinator_instructions.txt
│   │   │   │   ├── coordinator_role.txt
│   │   │   │   ├── knowledge_digest_instructions.txt
│   │   │   │   ├── knowledge_digest_prompt.txt
│   │   │   │   ├── share_information_request_detection.txt
│   │   │   │   ├── team_instructions.txt
│   │   │   │   ├── team_role.txt
│   │   │   │   └── welcome_message_generation.txt
│   │   │   ├── tools
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base.py
│   │   │   │   ├── information_requests.py
│   │   │   │   ├── learning_objectives.py
│   │   │   │   ├── learning_outcomes.py
│   │   │   │   ├── progress_tracking.py
│   │   │   │   └── share_setup.py
│   │   │   ├── ui_tabs
│   │   │   │   ├── __init__.py
│   │   │   │   ├── brief.py
│   │   │   │   ├── common.py
│   │   │   │   ├── debug.py
│   │   │   │   ├── learning.py
│   │   │   │   └── sharing.py
│   │   │   └── utils.py
│   │   ├── CLAUDE.md
│   │   ├── docs
│   │   │   ├── design
│   │   │   │   ├── actions.md
│   │   │   │   └── inference.md
│   │   │   ├── DEV_GUIDE.md
│   │   │   ├── how-kta-works.md
│   │   │   ├── JTBD.md
│   │   │   ├── knowledge-transfer-goals.md
│   │   │   ├── learning_assistance.md
│   │   │   ├── notable_claude_conversations
│   │   │   │   ├── clarifying_quad_modal_design.md
│   │   │   │   ├── CLAUDE_PROMPTS.md
│   │   │   │   ├── transfer_state.md
│   │   │   │   └── trying_the_context_agent.md
│   │   │   └── opportunities-of-knowledge-transfer.md
│   │   ├── knowledge-transfer-assistant.code-workspace
│   │   ├── Makefile
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── test_artifact_loading.py
│   │   │   ├── test_inspector.py
│   │   │   ├── test_share_manager.py
│   │   │   ├── test_share_storage.py
│   │   │   ├── test_share_tools.py
│   │   │   └── test_team_mode.py
│   │   └── uv.lock
│   ├── Makefile
│   ├── navigator-assistant
│   │   ├── .env.example
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── assistant
│   │   │   ├── __init__.py
│   │   │   ├── assets
│   │   │   │   ├── card_content.md
│   │   │   │   └── icon.svg
│   │   │   ├── chat.py
│   │   │   ├── config.py
│   │   │   ├── helpers.py
│   │   │   ├── response
│   │   │   │   ├── __init__.py
│   │   │   │   ├── completion_handler.py
│   │   │   │   ├── completion_requestor.py
│   │   │   │   ├── local_tool
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── add_assistant_to_conversation.py
│   │   │   │   │   ├── list_assistant_services.py
│   │   │   │   │   └── model.py
│   │   │   │   ├── models.py
│   │   │   │   ├── prompt.py
│   │   │   │   ├── request_builder.py
│   │   │   │   ├── response.py
│   │   │   │   ├── step_handler.py
│   │   │   │   └── utils
│   │   │   │       ├── __init__.py
│   │   │   │       ├── formatting_utils.py
│   │   │   │       ├── message_utils.py
│   │   │   │       ├── openai_utils.py
│   │   │   │       └── tools.py
│   │   │   ├── text_includes
│   │   │   │   ├── guardrails_prompt.md
│   │   │   │   ├── guidance_prompt.md
│   │   │   │   ├── instruction_prompt.md
│   │   │   │   ├── navigator_assistant_info.md
│   │   │   │   └── semantic_workbench_features.md
│   │   │   └── whiteboard
│   │   │       ├── __init__.py
│   │   │       ├── _inspector.py
│   │   │       └── _whiteboard.py
│   │   ├── Makefile
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   └── uv.lock
│   ├── project-assistant
│   │   ├── .cspell
│   │   │   └── custom-dictionary-workspace.txt
│   │   ├── .env.example
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── assistant
│   │   │   ├── __init__.py
│   │   │   ├── agentic
│   │   │   │   ├── __init__.py
│   │   │   │   ├── act.py
│   │   │   │   ├── coordinator_next_action.py
│   │   │   │   ├── create_invitation.py
│   │   │   │   ├── detect_audience_and_takeaways.py
│   │   │   │   ├── detect_coordinator_actions.py
│   │   │   │   ├── detect_information_request_needs.py
│   │   │   │   ├── detect_knowledge_package_gaps.py
│   │   │   │   ├── focus.py
│   │   │   │   ├── respond.py
│   │   │   │   ├── team_welcome.py
│   │   │   │   └── update_digest.py
│   │   │   ├── assets
│   │   │   │   ├── icon-knowledge-transfer.svg
│   │   │   │   └── icon.svg
│   │   │   ├── assistant.py
│   │   │   ├── common.py
│   │   │   ├── config.py
│   │   │   ├── conversation_clients.py
│   │   │   ├── data.py
│   │   │   ├── domain
│   │   │   │   ├── __init__.py
│   │   │   │   ├── audience_manager.py
│   │   │   │   ├── conversation_preferences_manager.py
│   │   │   │   ├── information_request_manager.py
│   │   │   │   ├── knowledge_brief_manager.py
│   │   │   │   ├── knowledge_digest_manager.py
│   │   │   │   ├── learning_objectives_manager.py
│   │   │   │   ├── share_manager.py
│   │   │   │   ├── tasks_manager.py
│   │   │   │   └── transfer_manager.py
│   │   │   ├── errors.py
│   │   │   ├── files.py
│   │   │   ├── logging.py
│   │   │   ├── notifications.py
│   │   │   ├── prompt_utils.py
│   │   │   ├── storage.py
│   │   │   ├── string_utils.py
│   │   │   ├── text_includes
│   │   │   │   ├── actor_instructions.md
│   │   │   │   ├── assistant_info.md
│   │   │   │   ├── card_content.md
│   │   │   │   ├── coordinator_instructions copy.md
│   │   │   │   ├── coordinator_instructions.md
│   │   │   │   ├── create_invitation.md
│   │   │   │   ├── detect_audience.md
│   │   │   │   ├── detect_coordinator_actions.md
│   │   │   │   ├── detect_information_request_needs.md
│   │   │   │   ├── detect_knowledge_package_gaps.md
│   │   │   │   ├── focus.md
│   │   │   │   ├── knowledge_digest_instructions.txt
│   │   │   │   ├── team_instructions.txt
│   │   │   │   ├── to_do.md
│   │   │   │   ├── update_knowledge_brief.md
│   │   │   │   ├── update_knowledge_digest.md
│   │   │   │   └── welcome_message_generation.txt
│   │   │   ├── tools
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base.py
│   │   │   │   ├── conversation_preferences.py
│   │   │   │   ├── information_requests.py
│   │   │   │   ├── learning_objectives.py
│   │   │   │   ├── learning_outcomes.py
│   │   │   │   ├── progress_tracking.py
│   │   │   │   ├── share_setup.py
│   │   │   │   ├── system_reminders.py
│   │   │   │   ├── tasks.py
│   │   │   │   └── todo.py
│   │   │   ├── ui_tabs
│   │   │   │   ├── __init__.py
│   │   │   │   ├── brief.py
│   │   │   │   ├── common.py
│   │   │   │   ├── debug.py
│   │   │   │   ├── learning.py
│   │   │   │   └── sharing.py
│   │   │   └── utils.py
│   │   ├── CLAUDE.md
│   │   ├── docs
│   │   │   ├── design
│   │   │   │   ├── actions.md
│   │   │   │   ├── control_options.md
│   │   │   │   ├── design.md
│   │   │   │   ├── inference.md
│   │   │   │   └── PXL_20250814_190140267.jpg
│   │   │   ├── DEV_GUIDE.md
│   │   │   ├── how-kta-works.md
│   │   │   ├── JTBD.md
│   │   │   ├── knowledge-transfer-goals.md
│   │   │   ├── learning_assistance.md
│   │   │   ├── notable_claude_conversations
│   │   │   │   ├── clarifying_quad_modal_design.md
│   │   │   │   ├── CLAUDE_PROMPTS.md
│   │   │   │   ├── transfer_state.md
│   │   │   │   └── trying_the_context_agent.md
│   │   │   └── opportunities-of-knowledge-transfer.md
│   │   ├── knowledge-transfer-assistant.code-workspace
│   │   ├── Makefile
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── test_artifact_loading.py
│   │   │   ├── test_inspector.py
│   │   │   ├── test_share_manager.py
│   │   │   ├── test_share_storage.py
│   │   │   └── test_team_mode.py
│   │   └── uv.lock
│   ├── prospector-assistant
│   │   ├── .env.example
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── assistant
│   │   │   ├── __init__.py
│   │   │   ├── agents
│   │   │   │   ├── artifact_agent.py
│   │   │   │   ├── document
│   │   │   │   │   ├── config.py
│   │   │   │   │   ├── gc_draft_content_feedback_config.py
│   │   │   │   │   ├── gc_draft_outline_feedback_config.py
│   │   │   │   │   ├── guided_conversation.py
│   │   │   │   │   └── state.py
│   │   │   │   └── document_agent.py
│   │   │   ├── artifact_creation_extension
│   │   │   │   ├── __init__.py
│   │   │   │   ├── _llm.py
│   │   │   │   ├── config.py
│   │   │   │   ├── document.py
│   │   │   │   ├── extension.py
│   │   │   │   ├── store.py
│   │   │   │   ├── test
│   │   │   │   │   ├── conftest.py
│   │   │   │   │   ├── evaluation.py
│   │   │   │   │   ├── test_completion_with_tools.py
│   │   │   │   │   └── test_extension.py
│   │   │   │   └── tools.py
│   │   │   ├── chat.py
│   │   │   ├── config.py
│   │   │   ├── form_fill_extension
│   │   │   │   ├── __init__.py
│   │   │   │   ├── config.py
│   │   │   │   ├── extension.py
│   │   │   │   ├── inspector.py
│   │   │   │   ├── state.py
│   │   │   │   └── steps
│   │   │   │       ├── __init__.py
│   │   │   │       ├── _guided_conversation.py
│   │   │   │       ├── _llm.py
│   │   │   │       ├── acquire_form_step.py
│   │   │   │       ├── extract_form_fields_step.py
│   │   │   │       ├── fill_form_step.py
│   │   │   │       └── types.py
│   │   │   ├── helpers.py
│   │   │   ├── legacy.py
│   │   │   └── text_includes
│   │   │       ├── artifact_agent_enabled.md
│   │   │       ├── guardrails_prompt.txt
│   │   │       ├── guided_conversation_agent_enabled.md
│   │   │       └── skills_agent_enabled.md
│   │   ├── assistant.code-workspace
│   │   ├── gc_learnings
│   │   │   ├── gc_learnings.md
│   │   │   └── images
│   │   │       ├── gc_conversation_plan_fcn.png
│   │   │       ├── gc_conversation_plan_template.png
│   │   │       ├── gc_execute_plan_callstack.png
│   │   │       ├── gc_functions.png
│   │   │       ├── gc_generate_plan_callstack.png
│   │   │       ├── gc_get_resource_instructions.png
│   │   │       ├── gc_get_termination_instructions.png
│   │   │       ├── gc_kernel_arguments.png
│   │   │       ├── gc_plan_calls.png
│   │   │       ├── gc_termination_instructions.png
│   │   │       ├── sk_get_chat_message_contents.png
│   │   │       ├── sk_inner_get_chat_message_contents.png
│   │   │       ├── sk_send_request_prep.png
│   │   │       └── sk_send_request.png
│   │   ├── Makefile
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   └── uv.lock
│   └── skill-assistant
│       ├── .env.example
│       ├── .vscode
│       │   ├── launch.json
│       │   └── settings.json
│       ├── assistant
│       │   ├── __init__.py
│       │   ├── config.py
│       │   ├── logging.py
│       │   ├── skill_assistant.py
│       │   ├── skill_engine_registry.py
│       │   ├── skill_event_mapper.py
│       │   ├── text_includes
│       │   │   └── guardrails_prompt.txt
│       │   └── workbench_helpers.py
│       ├── assistant.code-workspace
│       ├── Makefile
│       ├── pyproject.toml
│       ├── README.md
│       ├── tests
│       │   └── test_setup.py
│       └── uv.lock
├── CLAUDE.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── docs
│   ├── .vscode
│   │   └── settings.json
│   ├── ASSISTANT_CONFIG.md
│   ├── ASSISTANT_DEVELOPMENT_GUIDE.md
│   ├── CUSTOM_APP_REGISTRATION.md
│   ├── HOSTED_ASSISTANT_WITH_LOCAL_MCP_SERVERS.md
│   ├── images
│   │   ├── architecture-animation.gif
│   │   ├── configure_assistant.png
│   │   ├── conversation_canvas_open.png
│   │   ├── conversation_duplicate.png
│   │   ├── conversation_export.png
│   │   ├── conversation_share_dialog.png
│   │   ├── conversation_share_link.png
│   │   ├── dashboard_configured_view.png
│   │   ├── dashboard_view.png
│   │   ├── license_agreement.png
│   │   ├── message_bar.png
│   │   ├── message_inspection.png
│   │   ├── message_link.png
│   │   ├── new_prospector_assistant_dialog.png
│   │   ├── open_conversation_canvas.png
│   │   ├── prospector_example.png
│   │   ├── readme1.png
│   │   ├── readme2.png
│   │   ├── readme3.png
│   │   ├── rewind.png
│   │   ├── signin_page.png
│   │   └── splash_screen.png
│   ├── LOCAL_ASSISTANT_WITH_REMOTE_WORKBENCH.md
│   ├── SETUP_DEV_ENVIRONMENT.md
│   └── WORKBENCH_APP.md
├── examples
│   ├── dotnet
│   │   ├── .editorconfig
│   │   ├── dotnet-01-echo-bot
│   │   │   ├── appsettings.json
│   │   │   ├── dotnet-01-echo-bot.csproj
│   │   │   ├── MyAgent.cs
│   │   │   ├── MyAgentConfig.cs
│   │   │   ├── MyWorkbenchConnector.cs
│   │   │   ├── Program.cs
│   │   │   └── README.md
│   │   ├── dotnet-02-message-types-demo
│   │   │   ├── appsettings.json
│   │   │   ├── ConnectorExtensions.cs
│   │   │   ├── docs
│   │   │   │   ├── abc.png
│   │   │   │   ├── code.png
│   │   │   │   ├── config.png
│   │   │   │   ├── echo.png
│   │   │   │   ├── markdown.png
│   │   │   │   ├── mermaid.png
│   │   │   │   ├── reverse.png
│   │   │   │   └── safety-check.png
│   │   │   ├── dotnet-02-message-types-demo.csproj
│   │   │   ├── MyAgent.cs
│   │   │   ├── MyAgentConfig.cs
│   │   │   ├── MyWorkbenchConnector.cs
│   │   │   ├── Program.cs
│   │   │   └── README.md
│   │   └── dotnet-03-simple-chatbot
│   │       ├── appsettings.json
│   │       ├── ConnectorExtensions.cs
│   │       ├── dotnet-03-simple-chatbot.csproj
│   │       ├── MyAgent.cs
│   │       ├── MyAgentConfig.cs
│   │       ├── MyWorkbenchConnector.cs
│   │       ├── Program.cs
│   │       └── README.md
│   ├── Makefile
│   └── python
│       ├── python-01-echo-bot
│       │   ├── .env.example
│       │   ├── .vscode
│       │   │   ├── launch.json
│       │   │   └── settings.json
│       │   ├── assistant
│       │   │   ├── __init__.py
│       │   │   ├── chat.py
│       │   │   └── config.py
│       │   ├── assistant.code-workspace
│       │   ├── Makefile
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   └── uv.lock
│       ├── python-02-simple-chatbot
│       │   ├── .env.example
│       │   ├── .vscode
│       │   │   ├── launch.json
│       │   │   └── settings.json
│       │   ├── assistant
│       │   │   ├── __init__.py
│       │   │   ├── chat.py
│       │   │   ├── config.py
│       │   │   └── text_includes
│       │   │       └── guardrails_prompt.txt
│       │   ├── assistant.code-workspace
│       │   ├── Makefile
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   └── uv.lock
│       └── python-03-multimodel-chatbot
│           ├── .env.example
│           ├── .vscode
│           │   ├── launch.json
│           │   └── settings.json
│           ├── assistant
│           │   ├── __init__.py
│           │   ├── chat.py
│           │   ├── config.py
│           │   ├── model_adapters.py
│           │   └── text_includes
│           │       └── guardrails_prompt.txt
│           ├── assistant.code-workspace
│           ├── Makefile
│           ├── pyproject.toml
│           ├── README.md
│           └── uv.lock
├── KNOWN_ISSUES.md
├── libraries
│   ├── dotnet
│   │   ├── .editorconfig
│   │   ├── pack.sh
│   │   ├── README.md
│   │   ├── SemanticWorkbench.sln
│   │   ├── SemanticWorkbench.sln.DotSettings
│   │   └── WorkbenchConnector
│   │       ├── AgentBase.cs
│   │       ├── AgentConfig
│   │       │   ├── AgentConfigBase.cs
│   │       │   ├── AgentConfigPropertyAttribute.cs
│   │       │   └── ConfigUtils.cs
│   │       ├── Constants.cs
│   │       ├── IAgentBase.cs
│   │       ├── icon.png
│   │       ├── Models
│   │       │   ├── Command.cs
│   │       │   ├── Conversation.cs
│   │       │   ├── ConversationEvent.cs
│   │       │   ├── DebugInfo.cs
│   │       │   ├── Insight.cs
│   │       │   ├── Message.cs
│   │       │   ├── MessageMetadata.cs
│   │       │   ├── Participant.cs
│   │       │   ├── Sender.cs
│   │       │   └── ServiceInfo.cs
│   │       ├── Storage
│   │       │   ├── AgentInfo.cs
│   │       │   ├── AgentServiceStorage.cs
│   │       │   └── IAgentServiceStorage.cs
│   │       ├── StringLoggingExtensions.cs
│   │       ├── Webservice.cs
│   │       ├── WorkbenchConfig.cs
│   │       ├── WorkbenchConnector.cs
│   │       └── WorkbenchConnector.csproj
│   ├── Makefile
│   └── python
│       ├── anthropic-client
│       │   ├── .vscode
│       │   │   └── settings.json
│       │   ├── anthropic_client
│       │   │   ├── __init__.py
│       │   │   ├── client.py
│       │   │   ├── config.py
│       │   │   └── messages.py
│       │   ├── Makefile
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   └── uv.lock
│       ├── assistant-data-gen
│       │   ├── .vscode
│       │   │   ├── launch.json
│       │   │   └── settings.json
│       │   ├── assistant_data_gen
│       │   │   ├── __init__.py
│       │   │   ├── assistant_api.py
│       │   │   ├── config.py
│       │   │   ├── gce
│       │   │   │   ├── __init__.py
│       │   │   │   ├── gce_agent.py
│       │   │   │   └── prompts.py
│       │   │   └── pydantic_ai_utils.py
│       │   ├── configs
│       │   │   └── document_assistant_example_config.yaml
│       │   ├── Makefile
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   ├── scripts
│       │   │   ├── gce_simulation.py
│       │   │   └── generate_scenario.py
│       │   └── uv.lock
│       ├── assistant-drive
│       │   ├── .gitignore
│       │   ├── .vscode
│       │   │   ├── extensions.json
│       │   │   └── settings.json
│       │   ├── assistant_drive
│       │   │   ├── __init__.py
│       │   │   ├── drive.py
│       │   │   └── tests
│       │   │       └── test_basic.py
│       │   ├── Makefile
│       │   ├── pyproject.toml
│       │   ├── pytest.ini
│       │   ├── README.md
│       │   ├── usage.ipynb
│       │   └── uv.lock
│       ├── assistant-extensions
│       │   ├── .vscode
│       │   │   └── settings.json
│       │   ├── assistant_extensions
│       │   │   ├── __init__.py
│       │   │   ├── ai_clients
│       │   │   │   └── config.py
│       │   │   ├── artifacts
│       │   │   │   ├── __init__.py
│       │   │   │   ├── _artifacts.py
│       │   │   │   ├── _inspector.py
│       │   │   │   └── _model.py
│       │   │   ├── attachments
│       │   │   │   ├── __init__.py
│       │   │   │   ├── _attachments.py
│       │   │   │   ├── _convert.py
│       │   │   │   ├── _model.py
│       │   │   │   ├── _shared.py
│       │   │   │   └── _summarizer.py
│       │   │   ├── chat_context_toolkit
│       │   │   │   ├── __init__.py
│       │   │   │   ├── _config.py
│       │   │   │   ├── archive
│       │   │   │   │   ├── __init__.py
│       │   │   │   │   ├── _archive.py
│       │   │   │   │   └── _summarizer.py
│       │   │   │   ├── message_history
│       │   │   │   │   ├── __init__.py
│       │   │   │   │   ├── _history.py
│       │   │   │   │   └── _message.py
│       │   │   │   └── virtual_filesystem
│       │   │   │       ├── __init__.py
│       │   │   │       ├── _archive_file_source.py
│       │   │   │       └── _attachments_file_source.py
│       │   │   ├── dashboard_card
│       │   │   │   ├── __init__.py
│       │   │   │   └── _dashboard_card.py
│       │   │   ├── document_editor
│       │   │   │   ├── __init__.py
│       │   │   │   ├── _extension.py
│       │   │   │   ├── _inspector.py
│       │   │   │   └── _model.py
│       │   │   ├── mcp
│       │   │   │   ├── __init__.py
│       │   │   │   ├── _assistant_file_resource_handler.py
│       │   │   │   ├── _client_utils.py
│       │   │   │   ├── _devtunnel.py
│       │   │   │   ├── _model.py
│       │   │   │   ├── _openai_utils.py
│       │   │   │   ├── _sampling_handler.py
│       │   │   │   ├── _tool_utils.py
│       │   │   │   └── _workbench_file_resource_handler.py
│       │   │   ├── navigator
│       │   │   │   ├── __init__.py
│       │   │   │   └── _navigator.py
│       │   │   └── workflows
│       │   │       ├── __init__.py
│       │   │       ├── _model.py
│       │   │       ├── _workflows.py
│       │   │       └── runners
│       │   │           └── _user_proxy.py
│       │   ├── Makefile
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   ├── test
│       │   │   └── attachments
│       │   │       └── test_attachments.py
│       │   └── uv.lock
│       ├── chat-context-toolkit
│       │   ├── .claude
│       │   │   └── settings.local.json
│       │   ├── .env.sample
│       │   ├── .vscode
│       │   │   └── settings.json
│       │   ├── assets
│       │   │   ├── archive_v1.png
│       │   │   ├── history_v1.png
│       │   │   └── vfs_v1.png
│       │   ├── chat_context_toolkit
│       │   │   ├── __init__.py
│       │   │   ├── archive
│       │   │   │   ├── __init__.py
│       │   │   │   ├── _archive_reader.py
│       │   │   │   ├── _archive_task_queue.py
│       │   │   │   ├── _state.py
│       │   │   │   ├── _types.py
│       │   │   │   └── summarization
│       │   │   │       ├── __init__.py
│       │   │   │       └── _summarizer.py
│       │   │   ├── history
│       │   │   │   ├── __init__.py
│       │   │   │   ├── _budget.py
│       │   │   │   ├── _decorators.py
│       │   │   │   ├── _history.py
│       │   │   │   ├── _prioritize.py
│       │   │   │   ├── _types.py
│       │   │   │   └── tool_abbreviations
│       │   │   │       ├── __init__.py
│       │   │   │       └── _tool_abbreviations.py
│       │   │   └── virtual_filesystem
│       │   │       ├── __init__.py
│       │   │       ├── _types.py
│       │   │       ├── _virtual_filesystem.py
│       │   │       ├── README.md
│       │   │       └── tools
│       │   │           ├── __init__.py
│       │   │           ├── _ls_tool.py
│       │   │           ├── _tools.py
│       │   │           └── _view_tool.py
│       │   ├── CLAUDE.md
│       │   ├── Makefile
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   ├── test
│       │   │   ├── archive
│       │   │   │   └── test_archive_reader.py
│       │   │   ├── history
│       │   │   │   ├── test_abbreviate_messages.py
│       │   │   │   ├── test_history.py
│       │   │   │   ├── test_pair_and_order_tool_messages.py
│       │   │   │   ├── test_prioritize.py
│       │   │   │   └── test_truncate_messages.py
│       │   │   └── virtual_filesystem
│       │   │       ├── test_virtual_filesystem.py
│       │   │       └── tools
│       │   │           ├── test_ls_tool.py
│       │   │           ├── test_tools.py
│       │   │           └── test_view_tool.py
│       │   └── uv.lock
│       ├── content-safety
│       │   ├── .vscode
│       │   │   └── settings.json
│       │   ├── content_safety
│       │   │   ├── __init__.py
│       │   │   ├── evaluators
│       │   │   │   ├── __init__.py
│       │   │   │   ├── azure_content_safety
│       │   │   │   │   ├── __init__.py
│       │   │   │   │   ├── config.py
│       │   │   │   │   └── evaluator.py
│       │   │   │   ├── config.py
│       │   │   │   ├── evaluator.py
│       │   │   │   └── openai_moderations
│       │   │   │       ├── __init__.py
│       │   │   │       ├── config.py
│       │   │   │       └── evaluator.py
│       │   │   └── README.md
│       │   ├── Makefile
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   └── uv.lock
│       ├── events
│       │   ├── .vscode
│       │   │   └── settings.json
│       │   ├── events
│       │   │   ├── __init__.py
│       │   │   └── events.py
│       │   ├── Makefile
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   └── uv.lock
│       ├── guided-conversation
│       │   ├── .vscode
│       │   │   └── settings.json
│       │   ├── guided_conversation
│       │   │   ├── __init__.py
│       │   │   ├── functions
│       │   │   │   ├── __init__.py
│       │   │   │   ├── conversation_plan.py
│       │   │   │   ├── execution.py
│       │   │   │   └── final_update_plan.py
│       │   │   ├── guided_conversation_agent.py
│       │   │   ├── plugins
│       │   │   │   ├── __init__.py
│       │   │   │   ├── agenda.py
│       │   │   │   └── artifact.py
│       │   │   └── utils
│       │   │       ├── __init__.py
│       │   │       ├── base_model_llm.py
│       │   │       ├── conversation_helpers.py
│       │   │       ├── openai_tool_calling.py
│       │   │       ├── plugin_helpers.py
│       │   │       └── resources.py
│       │   ├── Makefile
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   └── uv.lock
│       ├── llm-client
│       │   ├── .vscode
│       │   │   └── settings.json
│       │   ├── llm_client
│       │   │   ├── __init__.py
│       │   │   └── model.py
│       │   ├── Makefile
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   └── uv.lock
│       ├── Makefile
│       ├── mcp-extensions
│       │   ├── .vscode
│       │   │   └── settings.json
│       │   ├── Makefile
│       │   ├── mcp_extensions
│       │   │   ├── __init__.py
│       │   │   ├── _client_session.py
│       │   │   ├── _model.py
│       │   │   ├── _sampling.py
│       │   │   ├── _server_extensions.py
│       │   │   ├── _tool_utils.py
│       │   │   ├── llm
│       │   │   │   ├── __init__.py
│       │   │   │   ├── chat_completion.py
│       │   │   │   ├── helpers.py
│       │   │   │   ├── llm_types.py
│       │   │   │   ├── mcp_chat_completion.py
│       │   │   │   └── openai_chat_completion.py
│       │   │   └── server
│       │   │       ├── __init__.py
│       │   │       └── storage.py
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   ├── tests
│       │   │   └── test_tool_utils.py
│       │   └── uv.lock
│       ├── mcp-tunnel
│       │   ├── .vscode
│       │   │   └── settings.json
│       │   ├── Makefile
│       │   ├── mcp_tunnel
│       │   │   ├── __init__.py
│       │   │   ├── _devtunnel.py
│       │   │   ├── _dir.py
│       │   │   └── _main.py
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   └── uv.lock
│       ├── openai-client
│       │   ├── .vscode
│       │   │   └── settings.json
│       │   ├── Makefile
│       │   ├── openai_client
│       │   │   ├── __init__.py
│       │   │   ├── chat_driver
│       │   │   │   ├── __init__.py
│       │   │   │   ├── chat_driver.ipynb
│       │   │   │   ├── chat_driver.py
│       │   │   │   ├── message_history_providers
│       │   │   │   │   ├── __init__.py
│       │   │   │   │   ├── in_memory_message_history_provider.py
│       │   │   │   │   ├── local_message_history_provider.py
│       │   │   │   │   ├── message_history_provider.py
│       │   │   │   │   └── tests
│       │   │   │   │       └── formatted_instructions_test.py
│       │   │   │   └── README.md
│       │   │   ├── client.py
│       │   │   ├── completion.py
│       │   │   ├── config.py
│       │   │   ├── errors.py
│       │   │   ├── logging.py
│       │   │   ├── messages.py
│       │   │   ├── tokens.py
│       │   │   └── tools.py
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   ├── tests
│       │   │   ├── test_command_parsing.py
│       │   │   ├── test_formatted_messages.py
│       │   │   ├── test_messages.py
│       │   │   └── test_tokens.py
│       │   └── uv.lock
│       ├── semantic-workbench-api-model
│       │   ├── .vscode
│       │   │   └── settings.json
│       │   ├── Makefile
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   ├── semantic_workbench_api_model
│       │   │   ├── __init__.py
│       │   │   ├── assistant_model.py
│       │   │   ├── assistant_service_client.py
│       │   │   ├── workbench_model.py
│       │   │   └── workbench_service_client.py
│       │   └── uv.lock
│       ├── semantic-workbench-assistant
│       │   ├── .vscode
│       │   │   ├── launch.json
│       │   │   └── settings.json
│       │   ├── Makefile
│       │   ├── pyproject.toml
│       │   ├── README.md
│       │   ├── semantic_workbench_assistant
│       │   │   ├── __init__.py
│       │   │   ├── assistant_app
│       │   │   │   ├── __init__.py
│       │   │   │   ├── assistant.py
│       │   │   │   ├── config.py
│       │   │   │   ├── content_safety.py
│       │   │   │   ├── context.py
│       │   │   │   ├── error.py
│       │   │   │   ├── export_import.py
│       │   │   │   ├── protocol.py
│       │   │   │   └── service.py
│       │   │   ├── assistant_service.py
│       │   │   ├── auth.py
│       │   │   ├── canonical.py
│       │   │   ├── command.py
│       │   │   ├── config.py
│       │   │   ├── logging_config.py
│       │   │   ├── settings.py
│       │   │   ├── start.py
│       │   │   └── storage.py
│       │   ├── tests
│       │   │   ├── conftest.py
│       │   │   ├── test_assistant_app.py
│       │   │   ├── test_canonical.py
│       │   │   ├── test_config.py
│       │   │   └── test_storage.py
│       │   └── uv.lock
│       └── skills
│           ├── .vscode
│           │   └── settings.json
│           ├── Makefile
│           ├── README.md
│           └── skill-library
│               ├── .vscode
│               │   └── settings.json
│               ├── docs
│               │   └── vs-recipe-tool.md
│               ├── Makefile
│               ├── pyproject.toml
│               ├── README.md
│               ├── skill_library
│               │   ├── __init__.py
│               │   ├── chat_driver_helpers.py
│               │   ├── cli
│               │   │   ├── azure_openai.py
│               │   │   ├── conversation_history.py
│               │   │   ├── README.md
│               │   │   ├── run_routine.py
│               │   │   ├── settings.py
│               │   │   └── skill_logger.py
│               │   ├── engine.py
│               │   ├── llm_info.txt
│               │   ├── logging.py
│               │   ├── README.md
│               │   ├── routine_stack.py
│               │   ├── skill.py
│               │   ├── skills
│               │   │   ├── common
│               │   │   │   ├── __init__.py
│               │   │   │   ├── common_skill.py
│               │   │   │   └── routines
│               │   │   │       ├── bing_search.py
│               │   │   │       ├── consolidate.py
│               │   │   │       ├── echo.py
│               │   │   │       ├── gather_context.py
│               │   │   │       ├── get_content_from_url.py
│               │   │   │       ├── gpt_complete.py
│               │   │   │       ├── select_user_intent.py
│               │   │   │       └── summarize.py
│               │   │   ├── eval
│               │   │   │   ├── __init__.py
│               │   │   │   ├── eval_skill.py
│               │   │   │   └── routines
│               │   │   │       └── eval.py
│               │   │   ├── fabric
│               │   │   │   ├── __init__.py
│               │   │   │   ├── fabric_skill.py
│               │   │   │   ├── patterns
│               │   │   │   │   ├── agility_story
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── ai
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_answers
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_candidates
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── analyze_cfp_submission
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_claims
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── analyze_comments
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_debate
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_email_headers
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── analyze_incident
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── analyze_interviewer_techniques
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_logs
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_malware
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_military_strategy
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_mistakes
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_paper
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── analyze_patent
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_personality
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_presentation
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_product_feedback
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_proposition
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── analyze_prose
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── analyze_prose_json
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── analyze_prose_pinker
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_risk
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_sales_call
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_spiritual_text
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── analyze_tech_impact
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── analyze_threat_report
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── analyze_threat_report_cmds
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── analyze_threat_report_trends
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── answer_interview_question
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── ask_secure_by_design_questions
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── ask_uncle_duke
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── capture_thinkers_work
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── check_agreement
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── clean_text
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── coding_master
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── compare_and_contrast
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── convert_to_markdown
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_5_sentence_summary
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_academic_paper
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_ai_jobs_analysis
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_aphorisms
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── create_art_prompt
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_better_frame
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── create_coding_project
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_command
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── create_cyber_summary
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_design_document
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_diy
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_formal_email
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_git_diff_commit
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_graph_from_input
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_hormozi_offer
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_idea_compass
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_investigation_visualization
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_keynote
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_logo
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── create_markmap_visualization
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_mermaid_visualization
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_mermaid_visualization_for_github
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_micro_summary
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_network_threat_landscape
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── create_newsletter_entry
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── create_npc
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── create_pattern
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_prd
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_prediction_block
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_quiz
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_reading_plan
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_recursive_outline
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_report_finding
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── create_rpg_summary
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_security_update
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── create_show_intro
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_sigma_rules
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_story_explanation
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_stride_threat_model
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_summary
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_tags
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_threat_scenarios
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_ttrc_graph
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_ttrc_narrative
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_upgrade_pack
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_user_story
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── create_video_chapters
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── create_visualization
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── dialog_with_socrates
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── enrich_blog_post
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── explain_code
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── explain_docs
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── explain_math
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── explain_project
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── explain_terms
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── export_data_as_csv
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_algorithm_update_recommendations
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── extract_article_wisdom
│               │   │   │   │   │   ├── dmiessler
│               │   │   │   │   │   │   └── extract_wisdom-1.0.0
│               │   │   │   │   │   │       ├── system.md
│               │   │   │   │   │   │       └── user.md
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── extract_book_ideas
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_book_recommendations
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_business_ideas
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_controversial_ideas
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_core_message
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_ctf_writeup
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_domains
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_extraordinary_claims
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_ideas
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_insights
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_insights_dm
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_instructions
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_jokes
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_latest_video
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_main_idea
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_most_redeeming_thing
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_patterns
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_poc
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── extract_predictions
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_primary_problem
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_primary_solution
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_product_features
│               │   │   │   │   │   ├── dmiessler
│               │   │   │   │   │   │   └── extract_wisdom-1.0.0
│               │   │   │   │   │   │       ├── system.md
│               │   │   │   │   │   │       └── user.md
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_questions
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_recipe
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_recommendations
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── extract_references
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── extract_skills
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_song_meaning
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_sponsors
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_videoid
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── extract_wisdom
│               │   │   │   │   │   ├── dmiessler
│               │   │   │   │   │   │   └── extract_wisdom-1.0.0
│               │   │   │   │   │   │       ├── system.md
│               │   │   │   │   │   │       └── user.md
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_wisdom_agents
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_wisdom_dm
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── extract_wisdom_nometa
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── find_hidden_message
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── find_logical_fallacies
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── get_wow_per_minute
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── get_youtube_rss
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── humanize
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── identify_dsrp_distinctions
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── identify_dsrp_perspectives
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── identify_dsrp_relationships
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── identify_dsrp_systems
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── identify_job_stories
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── improve_academic_writing
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── improve_prompt
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── improve_report_finding
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── improve_writing
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── judge_output
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── label_and_rate
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── loaded
│               │   │   │   │   ├── md_callout
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── official_pattern_template
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── pattern_explanations.md
│               │   │   │   │   ├── prepare_7s_strategy
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── provide_guidance
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── rate_ai_response
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── rate_ai_result
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── rate_content
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── rate_value
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── raw_query
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── raycast
│               │   │   │   │   │   ├── capture_thinkers_work
│               │   │   │   │   │   ├── create_story_explanation
│               │   │   │   │   │   ├── extract_primary_problem
│               │   │   │   │   │   ├── extract_wisdom
│               │   │   │   │   │   └── yt
│               │   │   │   │   ├── recommend_artists
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── recommend_pipeline_upgrades
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── recommend_talkpanel_topics
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── refine_design_document
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── review_design
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── sanitize_broken_html_to_markdown
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── show_fabric_options_markmap
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── solve_with_cot
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── stringify
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── suggest_pattern
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── summarize
│               │   │   │   │   │   ├── dmiessler
│               │   │   │   │   │   │   └── summarize
│               │   │   │   │   │   │       ├── system.md
│               │   │   │   │   │   │       └── user.md
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── summarize_debate
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── summarize_git_changes
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── summarize_git_diff
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── summarize_lecture
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── summarize_legislation
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── summarize_meeting
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── summarize_micro
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── summarize_newsletter
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── summarize_paper
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── summarize_prompt
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── summarize_pull-requests
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── summarize_rpg_session
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_analyze_challenge_handling
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_check_metrics
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_create_h3_career
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_create_opening_sentences
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_describe_life_outlook
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_extract_intro_sentences
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_extract_panel_topics
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_find_blindspots
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_find_negative_thinking
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_find_neglected_goals
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_give_encouragement
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_red_team_thinking
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_threat_model_plans
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_visualize_mission_goals_projects
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── t_year_in_review
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── to_flashcards
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── transcribe_minutes
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── translate
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── tweet
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── write_essay
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── write_hackerone_report
│               │   │   │   │   │   ├── README.md
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── write_latex
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── write_micro_essay
│               │   │   │   │   │   └── system.md
│               │   │   │   │   ├── write_nuclei_template_rule
│               │   │   │   │   │   ├── system.md
│               │   │   │   │   │   └── user.md
│               │   │   │   │   ├── write_pull-request
│               │   │   │   │   │   └── system.md
│               │   │   │   │   └── write_semgrep_rule
│               │   │   │   │       ├── system.md
│               │   │   │   │       └── user.md
│               │   │   │   └── routines
│               │   │   │       ├── list.py
│               │   │   │       ├── run.py
│               │   │   │       └── show.py
│               │   │   ├── guided_conversation
│               │   │   │   ├── __init__.py
│               │   │   │   ├── agenda.py
│               │   │   │   ├── artifact_helpers.py
│               │   │   │   ├── chat_completions
│               │   │   │   │   ├── fix_agenda_error.py
│               │   │   │   │   ├── fix_artifact_error.py
│               │   │   │   │   ├── generate_agenda.py
│               │   │   │   │   ├── generate_artifact_updates.py
│               │   │   │   │   ├── generate_final_artifact.py
│               │   │   │   │   └── generate_message.py
│               │   │   │   ├── conversation_guides
│               │   │   │   │   ├── __init__.py
│               │   │   │   │   ├── acrostic_poem.py
│               │   │   │   │   ├── er_triage.py
│               │   │   │   │   ├── interview.py
│               │   │   │   │   └── patient_intake.py
│               │   │   │   ├── guide.py
│               │   │   │   ├── guided_conversation_skill.py
│               │   │   │   ├── logging.py
│               │   │   │   ├── message.py
│               │   │   │   ├── resources.py
│               │   │   │   ├── routines
│               │   │   │   │   └── guided_conversation.py
│               │   │   │   └── tests
│               │   │   │       ├── conftest.py
│               │   │   │       ├── test_artifact_helpers.py
│               │   │   │       ├── test_generate_agenda.py
│               │   │   │       ├── test_generate_artifact_updates.py
│               │   │   │       ├── test_generate_final_artifact.py
│               │   │   │       └── test_resource.py
│               │   │   ├── meta
│               │   │   │   ├── __init__.py
│               │   │   │   ├── meta_skill.py
│               │   │   │   ├── README.md
│               │   │   │   └── routines
│               │   │   │       └── generate_routine.py
│               │   │   ├── posix
│               │   │   │   ├── __init__.py
│               │   │   │   ├── posix_skill.py
│               │   │   │   ├── routines
│               │   │   │   │   ├── append_file.py
│               │   │   │   │   ├── cd.py
│               │   │   │   │   ├── ls.py
│               │   │   │   │   ├── make_home_dir.py
│               │   │   │   │   ├── mkdir.py
│               │   │   │   │   ├── mv.py
│               │   │   │   │   ├── pwd.py
│               │   │   │   │   ├── read_file.py
│               │   │   │   │   ├── rm.py
│               │   │   │   │   ├── touch.py
│               │   │   │   │   └── write_file.py
│               │   │   │   └── sandbox_shell.py
│               │   │   ├── README.md
│               │   │   ├── research
│               │   │   │   ├── __init__.py
│               │   │   │   ├── README.md
│               │   │   │   ├── research_skill.py
│               │   │   │   └── routines
│               │   │   │       ├── answer_question_about_content.py
│               │   │   │       ├── evaluate_answer.py
│               │   │   │       ├── generate_research_plan.py
│               │   │   │       ├── generate_search_query.py
│               │   │   │       ├── update_research_plan.py
│               │   │   │       ├── web_research.py
│               │   │   │       └── web_search.py
│               │   │   ├── research2
│               │   │   │   ├── __init__.py
│               │   │   │   ├── README.md
│               │   │   │   ├── research_skill.py
│               │   │   │   └── routines
│               │   │   │       ├── facts.py
│               │   │   │       ├── make_final_report.py
│               │   │   │       ├── research.py
│               │   │   │       ├── search_plan.py
│               │   │   │       ├── search.py
│               │   │   │       └── visit_pages.py
│               │   │   └── web_research
│               │   │       ├── __init__.py
│               │   │       ├── README.md
│               │   │       ├── research_skill.py
│               │   │       └── routines
│               │   │           ├── facts.py
│               │   │           ├── make_final_report.py
│               │   │           ├── research.py
│               │   │           ├── search_plan.py
│               │   │           ├── search.py
│               │   │           └── visit_pages.py
│               │   ├── tests
│               │   │   ├── test_common_skill.py
│               │   │   ├── test_integration.py
│               │   │   ├── test_routine_stack.py
│               │   │   ├── tst_skill
│               │   │   │   ├── __init__.py
│               │   │   │   └── routines
│               │   │   │       ├── __init__.py
│               │   │   │       └── a_routine.py
│               │   │   └── utilities
│               │   │       ├── test_find_template_vars.py
│               │   │       ├── test_make_arg_set.py
│               │   │       ├── test_paramspec.py
│               │   │       ├── test_parse_command_string.py
│               │   │       └── test_to_string.py
│               │   ├── types.py
│               │   ├── usage.py
│               │   └── utilities.py
│               └── uv.lock
├── LICENSE
├── Makefile
├── mcp-servers
│   ├── ai-assist-content
│   │   ├── .vscode
│   │   │   └── settings.json
│   │   ├── mcp-example-brave-search.md
│   │   ├── mcp-fastmcp-typescript-README.md
│   │   ├── mcp-llms-full.txt
│   │   ├── mcp-metadata-tips.md
│   │   ├── mcp-python-sdk-README.md
│   │   ├── mcp-typescript-sdk-README.md
│   │   ├── pydanticai-documentation.md
│   │   ├── pydanticai-example-question-graph.md
│   │   ├── pydanticai-example-weather.md
│   │   ├── pydanticai-tutorial.md
│   │   └── README.md
│   ├── Makefile
│   ├── mcp-server-bing-search
│   │   ├── .env.example
│   │   ├── .gitignore
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── Makefile
│   │   ├── mcp_server_bing_search
│   │   │   ├── __init__.py
│   │   │   ├── config.py
│   │   │   ├── prompts
│   │   │   │   ├── __init__.py
│   │   │   │   ├── clean_website.py
│   │   │   │   └── filter_links.py
│   │   │   ├── server.py
│   │   │   ├── start.py
│   │   │   ├── tools.py
│   │   │   ├── types.py
│   │   │   ├── utils.py
│   │   │   └── web
│   │   │       ├── __init__.py
│   │   │       ├── get_content.py
│   │   │       ├── llm_processing.py
│   │   │       ├── process_website.py
│   │   │       └── search_bing.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   └── test_tools.py
│   │   └── uv.lock
│   ├── mcp-server-bundle
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── Makefile
│   │   ├── mcp_server_bundle
│   │   │   ├── __init__.py
│   │   │   └── main.py
│   │   ├── pyinstaller.spec
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   └── uv.lock
│   ├── mcp-server-filesystem
│   │   ├── .env.example
│   │   ├── .github
│   │   │   └── workflows
│   │   │       └── ci.yml
│   │   ├── .gitignore
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── Makefile
│   │   ├── mcp_server_filesystem
│   │   │   ├── __init__.py
│   │   │   ├── config.py
│   │   │   ├── server.py
│   │   │   └── start.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   └── test_filesystem.py
│   │   └── uv.lock
│   ├── mcp-server-filesystem-edit
│   │   ├── .env.example
│   │   ├── .gitignore
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── data
│   │   │   ├── attachments
│   │   │   │   ├── Daily Game Ideas.txt
│   │   │   │   ├── Frontend Framework Proposal.txt
│   │   │   │   ├── ReDoodle.txt
│   │   │   │   └── Research Template.tex
│   │   │   ├── test_cases.yaml
│   │   │   └── transcripts
│   │   │       ├── transcript_research_simple.md
│   │   │       ├── transcript_Startup_Idea_1_202503031513.md
│   │   │       ├── transcript_Startup_Idea_2_202503031659.md
│   │   │       └── transcript_Web_Frontends_202502281551.md
│   │   ├── Makefile
│   │   ├── mcp_server_filesystem_edit
│   │   │   ├── __init__.py
│   │   │   ├── app_handling
│   │   │   │   ├── __init__.py
│   │   │   │   ├── excel.py
│   │   │   │   ├── miktex.py
│   │   │   │   ├── office_common.py
│   │   │   │   ├── powerpoint.py
│   │   │   │   └── word.py
│   │   │   ├── config.py
│   │   │   ├── evals
│   │   │   │   ├── __init__.py
│   │   │   │   ├── common.py
│   │   │   │   ├── run_comments.py
│   │   │   │   ├── run_edit.py
│   │   │   │   └── run_ppt_edit.py
│   │   │   ├── prompts
│   │   │   │   ├── __init__.py
│   │   │   │   ├── add_comments.py
│   │   │   │   ├── analyze_comments.py
│   │   │   │   ├── latex_edit.py
│   │   │   │   ├── markdown_draft.py
│   │   │   │   ├── markdown_edit.py
│   │   │   │   └── powerpoint_edit.py
│   │   │   ├── server.py
│   │   │   ├── start.py
│   │   │   ├── tools
│   │   │   │   ├── __init__.py
│   │   │   │   ├── add_comments.py
│   │   │   │   ├── edit_adapters
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── common.py
│   │   │   │   │   ├── latex.py
│   │   │   │   │   └── markdown.py
│   │   │   │   ├── edit.py
│   │   │   │   └── helpers.py
│   │   │   └── types.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── app_handling
│   │   │   │   ├── test_excel.py
│   │   │   │   ├── test_miktext.py
│   │   │   │   ├── test_office_common.py
│   │   │   │   ├── test_powerpoint.py
│   │   │   │   └── test_word.py
│   │   │   ├── conftest.py
│   │   │   └── tools
│   │   │       └── edit_adapters
│   │   │           ├── test_latex.py
│   │   │           └── test_markdown.py
│   │   └── uv.lock
│   ├── mcp-server-fusion
│   │   ├── .gitignore
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── AddInIcon.svg
│   │   ├── config.py
│   │   ├── FusionMCPServerAddIn.manifest
│   │   ├── FusionMCPServerAddIn.py
│   │   ├── mcp_server_fusion
│   │   │   ├── __init__.py
│   │   │   ├── fusion_mcp_server.py
│   │   │   ├── fusion_utils
│   │   │   │   ├── __init__.py
│   │   │   │   ├── event_utils.py
│   │   │   │   ├── general_utils.py
│   │   │   │   └── tool_utils.py
│   │   │   ├── mcp_tools
│   │   │   │   ├── __init__.py
│   │   │   │   ├── fusion_3d_operation.py
│   │   │   │   ├── fusion_geometry.py
│   │   │   │   ├── fusion_pattern.py
│   │   │   │   └── fusion_sketch.py
│   │   │   └── vendor
│   │   │       └── README.md
│   │   ├── README.md
│   │   └── requirements.txt
│   ├── mcp-server-giphy
│   │   ├── .env.example
│   │   ├── .gitignore
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── Makefile
│   │   ├── mcp_server
│   │   │   ├── __init__.py
│   │   │   ├── config.py
│   │   │   ├── giphy_search.py
│   │   │   ├── sampling.py
│   │   │   ├── server.py
│   │   │   ├── start.py
│   │   │   └── utils.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   └── uv.lock
│   ├── mcp-server-memory-user-bio
│   │   ├── .env.example
│   │   ├── .gitignore
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── Makefile
│   │   ├── mcp_server_memory_user_bio
│   │   │   ├── __init__.py
│   │   │   ├── config.py
│   │   │   ├── server.py
│   │   │   └── start.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   └── uv.lock
│   ├── mcp-server-memory-whiteboard
│   │   ├── .env.example
│   │   ├── .gitignore
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── Makefile
│   │   ├── mcp_server_memory_whiteboard
│   │   │   ├── __init__.py
│   │   │   ├── config.py
│   │   │   ├── server.py
│   │   │   └── start.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   └── uv.lock
│   ├── mcp-server-office
│   │   ├── .env.example
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── build.sh
│   │   ├── data
│   │   │   ├── attachments
│   │   │   │   ├── Daily Game Ideas.txt
│   │   │   │   ├── Frontend Framework Proposal.txt
│   │   │   │   └── ReDoodle.txt
│   │   │   └── word
│   │   │       ├── test_cases.yaml
│   │   │       └── transcripts
│   │   │           ├── transcript_Startup_Idea_1_202503031513.md
│   │   │           ├── transcript_Startup_Idea_2_202503031659.md
│   │   │           └── transcript_Web_Frontends_202502281551.md
│   │   ├── Makefile
│   │   ├── mcp_server
│   │   │   ├── __init__.py
│   │   │   ├── app_interaction
│   │   │   │   ├── __init__.py
│   │   │   │   ├── excel_editor.py
│   │   │   │   ├── powerpoint_editor.py
│   │   │   │   └── word_editor.py
│   │   │   ├── config.py
│   │   │   ├── constants.py
│   │   │   ├── evals
│   │   │   │   ├── __init__.py
│   │   │   │   ├── common.py
│   │   │   │   ├── run_comment_analysis.py
│   │   │   │   ├── run_feedback.py
│   │   │   │   └── run_markdown_edit.py
│   │   │   ├── helpers.py
│   │   │   ├── markdown_edit
│   │   │   │   ├── __init__.py
│   │   │   │   ├── comment_analysis.py
│   │   │   │   ├── feedback_step.py
│   │   │   │   ├── markdown_edit.py
│   │   │   │   └── utils.py
│   │   │   ├── prompts
│   │   │   │   ├── __init__.py
│   │   │   │   ├── comment_analysis.py
│   │   │   │   ├── feedback.py
│   │   │   │   ├── markdown_draft.py
│   │   │   │   └── markdown_edit.py
│   │   │   ├── server.py
│   │   │   ├── start.py
│   │   │   └── types.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   └── test_word_editor.py
│   │   └── uv.lock
│   ├── mcp-server-open-deep-research
│   │   ├── .env.example
│   │   ├── .gitignore
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── Makefile
│   │   ├── mcp_server
│   │   │   ├── __init__.py
│   │   │   ├── config.py
│   │   │   ├── libs
│   │   │   │   └── open_deep_research
│   │   │   │       ├── cookies.py
│   │   │   │       ├── mdconvert.py
│   │   │   │       ├── run_agents.py
│   │   │   │       ├── text_inspector_tool.py
│   │   │   │       ├── text_web_browser.py
│   │   │   │       └── visual_qa.py
│   │   │   ├── open_deep_research.py
│   │   │   ├── server.py
│   │   │   └── start.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   └── uv.lock
│   ├── mcp-server-open-deep-research-clone
│   │   ├── .env.example
│   │   ├── .gitignore
│   │   ├── .vscode
│   │   │   ├── launch.json
│   │   │   └── settings.json
│   │   ├── Makefile
│   │   ├── mcp_server_open_deep_research_clone
│   │   │   ├── __init__.py
│   │   │   ├── azure_openai.py
│   │   │   ├── config.py
│   │   │   ├── logging.py
│   │   │   ├── sampling.py
│   │   │   ├── server.py
│   │   │   ├── start.py
│   │   │   ├── utils.py
│   │   │   └── web_research.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── test
│   │   │   └── test_open_deep_research_clone.py
│   │   └── uv.lock
│   ├── mcp-server-template
│   │   ├── .taplo.toml
│   │   ├── .vscode
│   │   │   └── settings.json
│   │   ├── copier.yml
│   │   ├── README.md
│   │   └── template
│   │       └── {{ project_slug }}
│   │           ├── .env.example.jinja
│   │           ├── .gitignore
│   │           ├── .vscode
│   │           │   ├── launch.json.jinja
│   │           │   └── settings.json
│   │           ├── {{ module_name }}
│   │           │   ├── __init__.py
│   │           │   ├── config.py.jinja
│   │           │   ├── server.py.jinja
│   │           │   └── start.py.jinja
│   │           ├── Makefile.jinja
│   │           ├── pyproject.toml.jinja
│   │           └── README.md.jinja
│   ├── mcp-server-vscode
│   │   ├── .eslintrc.cjs
│   │   ├── .gitignore
│   │   ├── .npmrc
│   │   ├── .vscode
│   │   │   ├── extensions.json
│   │   │   ├── launch.json
│   │   │   ├── settings.json
│   │   │   └── tasks.json
│   │   ├── .vscode-test.mjs
│   │   ├── .vscodeignore
│   │   ├── ASSISTANT_BOOTSTRAP.md
│   │   ├── eslint.config.mjs
│   │   ├── images
│   │   │   └── icon.png
│   │   ├── LICENSE
│   │   ├── Makefile
│   │   ├── out
│   │   │   ├── extension.d.ts
│   │   │   ├── extension.js
│   │   │   ├── test
│   │   │   │   ├── extension.test.d.ts
│   │   │   │   └── extension.test.js
│   │   │   ├── tools
│   │   │   │   ├── code_checker.d.ts
│   │   │   │   ├── code_checker.js
│   │   │   │   ├── debug_tools.d.ts
│   │   │   │   ├── debug_tools.js
│   │   │   │   ├── focus_editor.d.ts
│   │   │   │   ├── focus_editor.js
│   │   │   │   ├── search_symbol.d.ts
│   │   │   │   └── search_symbol.js
│   │   │   └── utils
│   │   │       ├── port.d.ts
│   │   │       └── port.js
│   │   ├── package.json
│   │   ├── pnpm-lock.yaml
│   │   ├── prettier.config.cjs
│   │   ├── README.md
│   │   ├── src
│   │   │   ├── extension.d.ts
│   │   │   ├── extension.ts
│   │   │   ├── test
│   │   │   │   ├── extension.test.d.ts
│   │   │   │   └── extension.test.ts
│   │   │   ├── tools
│   │   │   │   ├── code_checker.d.ts
│   │   │   │   ├── code_checker.ts
│   │   │   │   ├── debug_tools.d.ts
│   │   │   │   ├── debug_tools.ts
│   │   │   │   ├── focus_editor.d.ts
│   │   │   │   ├── focus_editor.ts
│   │   │   │   ├── search_symbol.d.ts
│   │   │   │   └── search_symbol.ts
│   │   │   └── utils
│   │   │       ├── port.d.ts
│   │   │       └── port.ts
│   │   ├── tsconfig.json
│   │   ├── tsconfig.tsbuildinfo
│   │   ├── vsc-extension-quickstart.md
│   │   └── webpack.config.js
│   └── mcp-server-web-research
│       ├── .env.example
│       ├── .gitignore
│       ├── .vscode
│       │   ├── launch.json
│       │   └── settings.json
│       ├── Makefile
│       ├── mcp_server_web_research
│       │   ├── __init__.py
│       │   ├── azure_openai.py
│       │   ├── config.py
│       │   ├── logging.py
│       │   ├── sampling.py
│       │   ├── server.py
│       │   ├── start.py
│       │   ├── utils.py
│       │   └── web_research.py
│       ├── pyproject.toml
│       ├── README.md
│       ├── test
│       │   └── test_web_research.py
│       └── uv.lock
├── README.md
├── RESPONSIBLE_AI_FAQ.md
├── ruff.toml
├── SECURITY.md
├── semantic-workbench.code-workspace
├── SUPPORT.md
├── tools
│   ├── build_ai_context_files.py
│   ├── collect_files.py
│   ├── docker
│   │   ├── azure_website_sshd.conf
│   │   ├── docker-entrypoint.sh
│   │   ├── Dockerfile.assistant
│   │   └── Dockerfile.mcp-server
│   ├── makefiles
│   │   ├── docker-assistant.mk
│   │   ├── docker-mcp-server.mk
│   │   ├── docker.mk
│   │   ├── python.mk
│   │   ├── recursive.mk
│   │   └── shell.mk
│   ├── reset-service-data.ps1
│   ├── reset-service-data.sh
│   ├── run-app.ps1
│   ├── run-app.sh
│   ├── run-canonical-agent.ps1
│   ├── run-canonical-agent.sh
│   ├── run-dotnet-examples-with-aspire.sh
│   ├── run-python-example1.sh
│   ├── run-python-example2.ps1
│   ├── run-python-example2.sh
│   ├── run-service.ps1
│   ├── run-service.sh
│   ├── run-workbench-chatbot.ps1
│   └── run-workbench-chatbot.sh
├── workbench-app
│   ├── .dockerignore
│   ├── .env.example
│   ├── .eslintrc.cjs
│   ├── .gitignore
│   ├── .vscode
│   │   ├── launch.json
│   │   └── settings.json
│   ├── docker-entrypoint.sh
│   ├── Dockerfile
│   ├── docs
│   │   ├── APP_DEV_GUIDE.md
│   │   ├── MESSAGE_METADATA.md
│   │   ├── MESSAGE_TYPES.md
│   │   ├── README.md
│   │   └── STATE_INSPECTORS.md
│   ├── index.html
│   ├── Makefile
│   ├── nginx.conf
│   ├── package.json
│   ├── pnpm-lock.yaml
│   ├── prettier.config.cjs
│   ├── public
│   │   └── assets
│   │       ├── background-1-upscaled.jpg
│   │       ├── background-1-upscaled.png
│   │       ├── background-1.jpg
│   │       ├── background-1.png
│   │       ├── background-2.jpg
│   │       ├── background-2.png
│   │       ├── experimental-feature.jpg
│   │       ├── favicon.svg
│   │       ├── workflow-designer-1.jpg
│   │       ├── workflow-designer-outlets.jpg
│   │       ├── workflow-designer-states.jpg
│   │       └── workflow-designer-transitions.jpg
│   ├── README.md
│   ├── run.sh
│   ├── src
│   │   ├── components
│   │   │   ├── App
│   │   │   │   ├── AppFooter.tsx
│   │   │   │   ├── AppHeader.tsx
│   │   │   │   ├── AppMenu.tsx
│   │   │   │   ├── AppView.tsx
│   │   │   │   ├── CodeLabel.tsx
│   │   │   │   ├── CommandButton.tsx
│   │   │   │   ├── ConfirmLeave.tsx
│   │   │   │   ├── ContentExport.tsx
│   │   │   │   ├── ContentImport.tsx
│   │   │   │   ├── CopyButton.tsx
│   │   │   │   ├── DialogControl.tsx
│   │   │   │   ├── DynamicIframe.tsx
│   │   │   │   ├── ErrorListFromAppState.tsx
│   │   │   │   ├── ErrorMessageBar.tsx
│   │   │   │   ├── ExperimentalNotice.tsx
│   │   │   │   ├── FormWidgets
│   │   │   │   │   ├── BaseModelEditorWidget.tsx
│   │   │   │   │   ├── CustomizedArrayFieldTemplate.tsx
│   │   │   │   │   ├── CustomizedFieldTemplate.tsx
│   │   │   │   │   ├── CustomizedObjectFieldTemplate.tsx
│   │   │   │   │   └── InspectableWidget.tsx
│   │   │   │   ├── LabelWithDescription.tsx
│   │   │   │   ├── Loading.tsx
│   │   │   │   ├── MenuItemControl.tsx
│   │   │   │   ├── MiniControl.tsx
│   │   │   │   ├── MyAssistantServiceRegistrations.tsx
│   │   │   │   ├── MyItemsManager.tsx
│   │   │   │   ├── OverflowMenu.tsx
│   │   │   │   ├── PresenceMotionList.tsx
│   │   │   │   ├── ProfileSettings.tsx
│   │   │   │   └── TooltipWrapper.tsx
│   │   │   ├── Assistants
│   │   │   │   ├── ApplyConfigButton.tsx
│   │   │   │   ├── AssistantAdd.tsx
│   │   │   │   ├── AssistantConfigExportButton.tsx
│   │   │   │   ├── AssistantConfigImportButton.tsx
│   │   │   │   ├── AssistantConfiguration.tsx
│   │   │   │   ├── AssistantConfigure.tsx
│   │   │   │   ├── AssistantCreate.tsx
│   │   │   │   ├── AssistantDelete.tsx
│   │   │   │   ├── AssistantDuplicate.tsx
│   │   │   │   ├── AssistantExport.tsx
│   │   │   │   ├── AssistantImport.tsx
│   │   │   │   ├── AssistantRemove.tsx
│   │   │   │   ├── AssistantRename.tsx
│   │   │   │   ├── AssistantServiceInfo.tsx
│   │   │   │   ├── AssistantServiceMetadata.tsx
│   │   │   │   └── MyAssistants.tsx
│   │   │   ├── AssistantServiceRegistrations
│   │   │   │   ├── AssistantServiceRegistrationApiKey.tsx
│   │   │   │   ├── AssistantServiceRegistrationApiKeyReset.tsx
│   │   │   │   ├── AssistantServiceRegistrationCreate.tsx
│   │   │   │   └── AssistantServiceRegistrationRemove.tsx
│   │   │   ├── Conversations
│   │   │   │   ├── Canvas
│   │   │   │   │   ├── AssistantCanvas.tsx
│   │   │   │   │   ├── AssistantCanvasList.tsx
│   │   │   │   │   ├── AssistantInspector.tsx
│   │   │   │   │   ├── AssistantInspectorList.tsx
│   │   │   │   │   └── ConversationCanvas.tsx
│   │   │   │   ├── ChatInputPlugins
│   │   │   │   │   ├── ClearEditorPlugin.tsx
│   │   │   │   │   ├── LexicalMenu.ts
│   │   │   │   │   ├── ParticipantMentionsPlugin.tsx
│   │   │   │   │   ├── TypeaheadMenuPlugin.css
│   │   │   │   │   └── TypeaheadMenuPlugin.tsx
│   │   │   │   ├── ContentRenderers
│   │   │   │   │   ├── CodeContentRenderer.tsx
│   │   │   │   │   ├── ContentListRenderer.tsx
│   │   │   │   │   ├── ContentRenderer.tsx
│   │   │   │   │   ├── DiffRenderer.tsx
│   │   │   │   │   ├── HtmlContentRenderer.tsx
│   │   │   │   │   ├── JsonSchemaContentRenderer.tsx
│   │   │   │   │   ├── MarkdownContentRenderer.tsx
│   │   │   │   │   ├── MarkdownEditorRenderer.tsx
│   │   │   │   │   ├── MermaidContentRenderer.tsx
│   │   │   │   │   ├── MusicABCContentRenderer.css
│   │   │   │   │   └── MusicABCContentRenderer.tsx
│   │   │   │   ├── ContextWindow.tsx
│   │   │   │   ├── ConversationCreate.tsx
│   │   │   │   ├── ConversationDuplicate.tsx
│   │   │   │   ├── ConversationExport.tsx
│   │   │   │   ├── ConversationFileIcon.tsx
│   │   │   │   ├── ConversationRemove.tsx
│   │   │   │   ├── ConversationRename.tsx
│   │   │   │   ├── ConversationShare.tsx
│   │   │   │   ├── ConversationShareCreate.tsx
│   │   │   │   ├── ConversationShareList.tsx
│   │   │   │   ├── ConversationShareView.tsx
│   │   │   │   ├── ConversationsImport.tsx
│   │   │   │   ├── ConversationTranscript.tsx
│   │   │   │   ├── DebugInspector.tsx
│   │   │   │   ├── FileItem.tsx
│   │   │   │   ├── FileList.tsx
│   │   │   │   ├── InputAttachmentList.tsx
│   │   │   │   ├── InputOptionsControl.tsx
│   │   │   │   ├── InteractHistory.tsx
│   │   │   │   ├── InteractInput.tsx
│   │   │   │   ├── Message
│   │   │   │   │   ├── AttachmentSection.tsx
│   │   │   │   │   ├── ContentRenderer.tsx
│   │   │   │   │   ├── ContentSafetyNotice.tsx
│   │   │   │   │   ├── InteractMessage.tsx
│   │   │   │   │   ├── MessageActions.tsx
│   │   │   │   │   ├── MessageBase.tsx
│   │   │   │   │   ├── MessageBody.tsx
│   │   │   │   │   ├── MessageContent.tsx
│   │   │   │   │   ├── MessageFooter.tsx
│   │   │   │   │   ├── MessageHeader.tsx
│   │   │   │   │   ├── NotificationAccordion.tsx
│   │   │   │   │   └── ToolResultMessage.tsx
│   │   │   │   ├── MessageDelete.tsx
│   │   │   │   ├── MessageLink.tsx
│   │   │   │   ├── MyConversations.tsx
│   │   │   │   ├── MyShares.tsx
│   │   │   │   ├── ParticipantAvatar.tsx
│   │   │   │   ├── ParticipantAvatarGroup.tsx
│   │   │   │   ├── ParticipantItem.tsx
│   │   │   │   ├── ParticipantList.tsx
│   │   │   │   ├── ParticipantStatus.tsx
│   │   │   │   ├── RewindConversation.tsx
│   │   │   │   ├── ShareRemove.tsx
│   │   │   │   ├── SpeechButton.tsx
│   │   │   │   └── ToolCalls.tsx
│   │   │   └── FrontDoor
│   │   │       ├── Chat
│   │   │       │   ├── AssistantDrawer.tsx
│   │   │       │   ├── CanvasDrawer.tsx
│   │   │       │   ├── Chat.tsx
│   │   │       │   ├── ChatCanvas.tsx
│   │   │       │   ├── ChatControls.tsx
│   │   │       │   └── ConversationDrawer.tsx
│   │   │       ├── Controls
│   │   │       │   ├── AssistantCard.tsx
│   │   │       │   ├── AssistantSelector.tsx
│   │   │       │   ├── AssistantServiceSelector.tsx
│   │   │       │   ├── ConversationItem.tsx
│   │   │       │   ├── ConversationList.tsx
│   │   │       │   ├── ConversationListOptions.tsx
│   │   │       │   ├── NewConversationButton.tsx
│   │   │       │   ├── NewConversationForm.tsx
│   │   │       │   └── SiteMenuButton.tsx
│   │   │       ├── GlobalContent.tsx
│   │   │       └── MainContent.tsx
│   │   ├── Constants.ts
│   │   ├── global.d.ts
│   │   ├── index.css
│   │   ├── libs
│   │   │   ├── AppStorage.ts
│   │   │   ├── AuthHelper.ts
│   │   │   ├── EventSubscriptionManager.ts
│   │   │   ├── Theme.ts
│   │   │   ├── useAssistantCapabilities.ts
│   │   │   ├── useChatCanvasController.ts
│   │   │   ├── useConversationEvents.ts
│   │   │   ├── useConversationUtility.ts
│   │   │   ├── useCreateConversation.ts
│   │   │   ├── useDebugComponentLifecycle.ts
│   │   │   ├── useDragAndDrop.ts
│   │   │   ├── useEnvironment.ts
│   │   │   ├── useExportUtility.ts
│   │   │   ├── useHistoryUtility.ts
│   │   │   ├── useKeySequence.ts
│   │   │   ├── useMediaQuery.ts
│   │   │   ├── useMicrosoftGraph.ts
│   │   │   ├── useNotify.tsx
│   │   │   ├── useParticipantUtility.tsx
│   │   │   ├── useSiteUtility.ts
│   │   │   ├── useWorkbenchEventSource.ts
│   │   │   ├── useWorkbenchService.ts
│   │   │   └── Utility.ts
│   │   ├── main.tsx
│   │   ├── models
│   │   │   ├── Assistant.ts
│   │   │   ├── AssistantCapability.ts
│   │   │   ├── AssistantServiceInfo.ts
│   │   │   ├── AssistantServiceRegistration.ts
│   │   │   ├── Config.ts
│   │   │   ├── Conversation.ts
│   │   │   ├── ConversationFile.ts
│   │   │   ├── ConversationMessage.ts
│   │   │   ├── ConversationMessageDebug.ts
│   │   │   ├── ConversationParticipant.ts
│   │   │   ├── ConversationShare.ts
│   │   │   ├── ConversationShareRedemption.ts
│   │   │   ├── ConversationState.ts
│   │   │   ├── ConversationStateDescription.ts
│   │   │   ├── ServiceEnvironment.ts
│   │   │   └── User.ts
│   │   ├── redux
│   │   │   ├── app
│   │   │   │   ├── hooks.ts
│   │   │   │   ├── rtkQueryErrorLogger.ts
│   │   │   │   └── store.ts
│   │   │   └── features
│   │   │       ├── app
│   │   │       │   ├── appSlice.ts
│   │   │       │   └── AppState.ts
│   │   │       ├── chatCanvas
│   │   │       │   ├── chatCanvasSlice.ts
│   │   │       │   └── ChatCanvasState.ts
│   │   │       ├── localUser
│   │   │       │   ├── localUserSlice.ts
│   │   │       │   └── LocalUserState.ts
│   │   │       └── settings
│   │   │           ├── settingsSlice.ts
│   │   │           └── SettingsState.ts
│   │   ├── Root.tsx
│   │   ├── routes
│   │   │   ├── AcceptTerms.tsx
│   │   │   ├── AssistantEditor.tsx
│   │   │   ├── AssistantServiceRegistrationEditor.tsx
│   │   │   ├── Dashboard.tsx
│   │   │   ├── ErrorPage.tsx
│   │   │   ├── FrontDoor.tsx
│   │   │   ├── Login.tsx
│   │   │   ├── Settings.tsx
│   │   │   ├── ShareRedeem.tsx
│   │   │   └── Shares.tsx
│   │   ├── services
│   │   │   └── workbench
│   │   │       ├── assistant.ts
│   │   │       ├── assistantService.ts
│   │   │       ├── conversation.ts
│   │   │       ├── file.ts
│   │   │       ├── index.ts
│   │   │       ├── participant.ts
│   │   │       ├── share.ts
│   │   │       ├── state.ts
│   │   │       └── workbench.ts
│   │   └── vite-env.d.ts
│   ├── tools
│   │   └── filtered-ts-prune.cjs
│   ├── tsconfig.json
│   └── vite.config.ts
└── workbench-service
    ├── .env.example
    ├── .vscode
    │   ├── extensions.json
    │   ├── launch.json
    │   └── settings.json
    ├── alembic.ini
    ├── devdb
    │   ├── docker-compose.yaml
    │   └── postgresql-init.sh
    ├── Dockerfile
    ├── Makefile
    ├── migrations
    │   ├── env.py
    │   ├── README
    │   ├── script.py.mako
    │   └── versions
    │       ├── 2024_09_19_000000_69dcda481c14_init.py
    │       ├── 2024_09_19_190029_dffb1d7e219a_file_version_filename.py
    │       ├── 2024_09_20_204130_b29524775484_share.py
    │       ├── 2024_10_30_231536_039bec8edc33_index_message_type.py
    │       ├── 2024_11_04_204029_5149c7fb5a32_conversationmessagedebug.py
    │       ├── 2024_11_05_015124_245baf258e11_double_check_debugs.py
    │       ├── 2024_11_25_191056_a106de176394_drop_workflow.py
    │       ├── 2025_03_19_140136_aaaf792d4d72_set_user_title_set.py
    │       ├── 2025_03_21_153250_3763629295ad_add_assistant_template_id.py
    │       ├── 2025_05_19_163613_b2f86e981885_delete_context_transfer_assistants.py
    │       └── 2025_06_18_174328_503c739152f3_delete_knowlege_transfer_assistants.py
    ├── pyproject.toml
    ├── README.md
    ├── semantic_workbench_service
    │   ├── __init__.py
    │   ├── api.py
    │   ├── assistant_api_key.py
    │   ├── auth.py
    │   ├── azure_speech.py
    │   ├── config.py
    │   ├── controller
    │   │   ├── __init__.py
    │   │   ├── assistant_service_client_pool.py
    │   │   ├── assistant_service_registration.py
    │   │   ├── assistant.py
    │   │   ├── conversation_share.py
    │   │   ├── conversation.py
    │   │   ├── convert.py
    │   │   ├── exceptions.py
    │   │   ├── export_import.py
    │   │   ├── file.py
    │   │   ├── participant.py
    │   │   └── user.py
    │   ├── db.py
    │   ├── event.py
    │   ├── files.py
    │   ├── logging_config.py
    │   ├── middleware.py
    │   ├── query.py
    │   ├── service_user_principals.py
    │   ├── service.py
    │   └── start.py
    ├── tests
    │   ├── __init__.py
    │   ├── conftest.py
    │   ├── docker-compose.yaml
    │   ├── test_assistant_api_key.py
    │   ├── test_files.py
    │   ├── test_integration.py
    │   ├── test_middleware.py
    │   ├── test_migrations.py
    │   ├── test_workbench_service.py
    │   └── types.py
    └── uv.lock
```

# Files

--------------------------------------------------------------------------------
/assistants/guided-conversation-assistant/README.md:
--------------------------------------------------------------------------------

```markdown
 1 | # Using Semantic Workbench with python assistants
 2 | 
 3 | This project provides an assistant to demonstrate how to guide a user towards a goal, leveraging the [guided-conversation library](../../libraries/python/guided-conversation/), which is a modified copy of the [guided-conversation](https://github.com/microsoft/semantic-kernel/tree/main/python/samples/demos/guided_conversations) library from the [Semantic Kernel](https://github.com/microsoft/semantic-kernel) repository.
 4 | 
 5 | ## Responsible AI
 6 | 
 7 | The chatbot includes some important best practices for AI development, such as:
 8 | 
 9 | - **System prompt safety**, ie a set of LLM guardrails to protect users. As a developer you should understand how these
10 |   guardrails work in your scenarios, and how to change them if needed. The system prompt and the prompt safety
11 |   guardrails are split in two to help with testing. When talking to LLM models, prompt safety is injected before the
12 |   system prompt.
13 |   - See https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message for more details
14 |     about protecting application and users in different scenarios.
15 | - **Content moderation**, via [Azure AI Content Safety](https://azure.microsoft.com/products/ai-services/ai-content-safety)
16 |   or [OpenAI Content Moderation](https://platform.openai.com/docs/guides/moderation).
17 | 
18 | See the [Responsible AI FAQ](../../RESPONSIBLE_AI_FAQ.md) for more information.
19 | 
20 | # Suggested Development Environment
21 | 
22 | - Use GitHub Codespaces for a quick, turn-key dev environment: [/.devcontainer/README.md](../../.devcontainer/README.md)
23 | - VS Code is recommended for development
24 | 
25 | ## Pre-requisites
26 | 
27 | - Set up your dev environment
28 |   - SUGGESTED: Use GitHub Codespaces for a quick, easy, and consistent dev
29 |     environment: [/.devcontainer/README.md](../../.devcontainer/README.md)
30 |   - ALTERNATIVE: Local setup following the [main README](../../README.md#local-development-environment)
31 | - Set up and verify that the workbench app and service are running using the [semantic-workbench.code-workspace](../../semantic-workbench.code-workspace)
32 | - If using Azure OpenAI, set up an Azure account and create a Content Safety resource
33 |   - See [Azure AI Content Safety](https://azure.microsoft.com/products/ai-services/ai-content-safety) for more information
34 |   - Copy the `.env.example` to `.env` and update the `ASSISTANT__AZURE_CONTENT_SAFETY_ENDPOINT` value with the endpoint of your Azure Content Safety resource
35 |   - From VS Code > `Terminal`, run `az login` to authenticate with Azure prior to starting the assistant
36 | 
37 | ## Steps
38 | 
39 | - Use VS Code > `Run and Debug` (ctrl/cmd+shift+d) > `semantic-workbench` to start the app and service from this workspace
40 | - Use VS Code > `Run and Debug` (ctrl/cmd+shift+d) > `launch assistant` to start the assistant.
41 | - If running in a devcontainer, follow the instructions in [.devcontainer/POST_SETUP_README.md](../../.devcontainer/POST_SETUP_README.md#start-the-app-and-service) for any additional steps.
42 | - Return to the workbench app to interact with the assistant
43 | - Add a new assistant from the main menu of the app, choose the assistant name as defined by the `service_name` in [chat.py](./assistant/chat.py)
44 | - Click the newly created assistant to configure and interact with it
45 | 
46 | ## Starting the example from CLI
47 | 
48 | If you're not using VS Code and/or Codespaces, you can also work from the
49 | command line, using `uv`:
50 | 
51 | ```
52 | cd <PATH TO THIS FOLDER>
53 | 
54 | uv run start-assistant
55 | ```
56 | 
57 | ## Create your own assistant
58 | 
59 | Copy the contents of this folder to your project.
60 | 
61 | - The paths are already set if you put in the same repo root and relative path of `/<your_projects>/<your_assistant_name>`
62 | - If placed in a different location, update the references in the `pyproject.toml` to point to the appropriate locations for the `semantic-workbench-*` packages
63 | 
64 | ## From Development to Production
65 | 
66 | It's important to highlight how Semantic Workbench is a development tool, and it's not designed to host agents in
67 | a production environment. The workbench helps with testing and debugging, in a development and isolated environment, usually your localhost.
68 | 
69 | The core of your assistant/AI application, e.g. how it reacts to users, how it invokes tools, how it stores data, can be
70 | developed with any framework, such as Semantic Kernel, Langchain, OpenAI assistants, etc. That is typically the code
71 | you will add to `chat.py`.
72 | 
73 | **Semantic Workbench is not a framework**. Dependencies on `semantic-workbench-assistant` package are used only to test and debug your code in Semantic Workbench. **When an assistant is fully developed and ready for production, configurable settings should be hard coded, dependencies on `semantic-workbench-assistant` and similar should be removed**.
74 | 
```

--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/fabric/patterns/humanize/README.md:
--------------------------------------------------------------------------------

```markdown
 1 | # Humanize: Turn stiff AI text 🤖 into human-sounding gold 🪙
 2 | 
 3 | **Humanize** aims to help make AI writing sound more like a real person wrote it. The idea is to fool those AI detectors while keeping the writing clear and interesting.
 4 | 
 5 | This project focuses on fixing those signs of AI writing – the stuff that makes it sound stiff or too perfect.
 6 | 
 7 | We tried it out on a long and tricky example: a story about "why dogs spin before they sit" 😀, written by Gemini.  Here's how the output did on some AI checkers:
 8 | 
 9 | * Quillbot: 59% AI
10 | * ZeroGPT: 54% AI
11 | * GPTZero: 87% AI
12 | * Writer.com: 15% AI
13 | 
14 | Other example give 0% score, so it reall depends on the input text, which AI and which scanner you use.
15 | 
16 | Like any Fabric pattern, use the power of piping from other patterns or even from **Humanize** itself. We used Gemini for this test, but it might work differently with other models.  So play around and see what you find... and yes, this text have been Humanized (and revised) 😉
17 | 
18 | Have fun using **Humanize**!
19 | 
20 | ## Input AI text example:
21 | ```
22 | The Mystery of the Spinning Dog
23 | 
24 | In the world of canine behavior, one of the most curious rituals is the practice of spinning before settling down. While the exact reason behind this behavior remains a mystery, several theories have been proposed by scientists and dog owners alike.
25 | 
26 | The Ancient Instinct
27 | 
28 | Some believe that this spinning behavior is a remnant of the dogs' wild ancestors. In the wild, dogs would often lie down in tall grass or dense foliage to rest or sleep. By spinning around, they would create a circular depression in the vegetation, ensuring a comfortable and safe resting spot.
29 | 
30 | The Comfort Seeker
31 | 
32 | Another theory suggests that dogs spin to create a sense of comfort and security. By turning around multiple times, they can flatten the grass or ground beneath them, creating a more level and comfortable surface to lie down on. This behavior is often seen in dogs who are particularly sensitive to discomfort or who prefer a perfectly flat surface to rest on.
33 | 
34 | The Scent Marker
35 | 
36 | A third theory proposes that dogs spin to leave their scent on the ground. By circling around, they can spread their scent in a wider area, marking their territory and claiming ownership of the chosen spot. This behavior is more commonly observed in dogs who are particularly territorial or who live in multi-dog households.
37 | 
38 | The Playful Spirit
39 | 
40 | Finally, some dog owners believe that spinning is simply a playful behavior. Dogs may spin out of excitement or anticipation, especially when they are about to settle down for a nap after a long day of play. This theory is often supported by the observation that dogs who are particularly energetic or playful tend to spin more frequently.
41 | 
42 | A Combination of Factors
43 | 
44 | While the exact reason behind dog spinning remains unknown, it is likely a combination of these factors. Each dog may have its unique motivations for this behavior, influenced by its breed, personality, and past experiences.
45 | 
46 | Observing Your Dog
47 | 
48 | If you have a dog that spins before settling down, you can try to observe its behavior to gain a better understanding of its motivations. Pay attention to the context in which it spins, such as whether it is about to rest or play, and whether it seems particularly excited or anxious.
49 | 
50 | By observing your dog's behavior, you may be able to uncover the unique reasons behind its spinning ritual.
51 | ```
52 | ## Humanize output:
53 | ```
54 | Ever seen your dog spin in circles before settling down for a nap?  It's a pretty common thing, but why do they do it?  Nobody's entirely sure, but there are a few good guesses.
55 | 
56 | One idea is that it's an instinct from their wolf ancestors.  Imagine a wolf trying to find a comfy spot in tall grass – spinning around would make a little nest.
57 | 
58 | Another thought is that it's all about comfort.  Spinning flattens things out, making a nice, even spot for a nap. You see this a lot in dogs who are picky about where they sleep.
59 | 
60 | Some people think it's about marking their territory.  Spinning spreads their scent, kind of like saying, "This is mine!"  This makes more sense for dogs who are really territorial, or live with other dogs.
61 | 
62 | And then there's the "it's just fun" theory.  Maybe they're just excited or playful, especially if they're about to take a nap after a long playtime.
63 | 
64 | It's probably a mix of all these things.  Every dog is different, so their reasons might be a little different too.  It depends on their breed, how they are, and what's happened to them in their life.
65 | 
66 | If your dog does this, try watching them.  What are they doing right before they start spinning? Are they tired, or excited?  Paying attention might give you a clue about why *your* dog does it.  It's a fun little mystery to solve together!
67 | ```
68 | 
```

--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/fabric/patterns/explain_math/README.md:
--------------------------------------------------------------------------------

```markdown
  1 | # explain_math
  2 | explain_math is a prompt designed to help you understand mathematical concepts in a clear and engaging way.
  3 | 
  4 | ## Example:
  5 | This example was run on llama3:latest (8B), even with the 8B limitation, the example is still clear and engaging.
  6 | 
  7 | <details open>
  8 |     <summary>Raw</summary>
  9 |     
 10 | ```markdown
 11 | **Pythagorean Theorem: Understanding the Relationship Between Triangles and Squares**
 12 | 
 13 | The Pythagorean theorem, named after ancient Greek philosopher and mathematician Pythagoras, is a fundamental concept in geometry that helps us calculate the length of the hypotenuse (the longest side) of a right-angled triangle. This theorem has far-reaching applications in various fields, including mathematics, physics, engineering, and architecture.
 14 | 
 15 | **The Formula:**
 16 | 
 17 | a^2 + b^2 = c^2
 18 | 
 19 | where:
 20 | 
 21 | * `c` is the length of the hypotenuse (the longest side)
 22 | * `a` and `b` are the lengths of the other two sides (the legs)
 23 | 
 24 | **Step-by-Step Explanation:**
 25 | 
 26 | Let's consider a right-angled triangle with one angle that is 90 degrees (a square corner). We can use this theorem to find the length of the hypotenuse (`c`) when we know the lengths of the other two sides (`a` and `b`).
 27 | 
 28 | 1. Square both legs (`a` and `b`) by multiplying them by themselves.
 29 | 2. Add the squared values of the legs together: a^2 + b^2
 30 | 3. The result is equal to the square of the hypotenuse (`c`): c^2
 31 | 
 32 | **Example:**
 33 | 
 34 | Suppose we have a right-angled triangle with one leg that is 3 inches long and the other leg is 4 inches long. We want to find the length of the hypotenuse.
 35 | 
 36 | 1. Square both legs: 3^2 = 9, 4^2 = 16
 37 | 2. Add the squared values together: 9 + 16 = 25
 38 | 3. The result is equal to the square of the hypotenuse: c^2 = 25
 39 | 
 40 | Now, take the square root of both sides:
 41 | 
 42 | c = √25 ≈ 5 inches
 43 | 
 44 | **Real-World Applications:**
 45 | 
 46 | The Pythagorean theorem has numerous practical applications in various fields, including:
 47 | 
 48 | * Construction and architecture: Finding the length of diagonals, beams, or pillars.
 49 | * Physics: Calculating distances, velocities, and accelerations in problems involving right triangles.
 50 | * Engineering: Designing bridges, buildings, or other structures that rely on triangular shapes.
 51 | 
 52 | **Visual Aids:**
 53 | 
 54 | For a better understanding, you can use online tools or software to create interactive diagrams that demonstrate the Pythagorean theorem. Some popular options include:
 55 | 
 56 | * GeoGebra
 57 | * Desmos
 58 | * Khan Academy's math exercises
 59 | 
 60 | Remember, this theorem is not just a mathematical concept; it has many practical applications in various fields.
 61 | ```
 62 | 
 63 | </details>
 64 | 
 65 | <details>
 66 |     <summary>Rendered</summary>
 67 | 
 68 | **Pythagorean Theorem: Understanding the Relationship Between Triangles and Squares**
 69 | 
 70 | The Pythagorean theorem, named after ancient Greek philosopher and mathematician Pythagoras, is a fundamental concept in geometry that helps us calculate the length of the hypotenuse (the longest side) of a right-angled triangle. This theorem has far-reaching applications in various fields, including mathematics, physics, engineering, and architecture.
 71 | 
 72 | **The Formula:**
 73 | 
 74 | a^2 + b^2 = c^2
 75 | 
 76 | where:
 77 | 
 78 | * `c` is the length of the hypotenuse (the longest side)
 79 | * `a` and `b` are the lengths of the other two sides (the legs)
 80 | 
 81 | **Step-by-Step Explanation:**
 82 | 
 83 | Let's consider a right-angled triangle with one angle that is 90 degrees (a square corner). We can use this theorem to find the length of the hypotenuse (`c`) when we know the lengths of the other two sides (`a` and `b`).
 84 | 
 85 | 1. Square both legs (`a` and `b`) by multiplying them by themselves.
 86 | 2. Add the squared values of the legs together: a^2 + b^2
 87 | 3. The result is equal to the square of the hypotenuse (`c`): c^2
 88 | 
 89 | **Example:**
 90 | 
 91 | Suppose we have a right-angled triangle with one leg that is 3 inches long and the other leg is 4 inches long. We want to find the length of the hypotenuse.
 92 | 
 93 | 1. Square both legs: 3^2 = 9, 4^2 = 16
 94 | 2. Add the squared values together: 9 + 16 = 25
 95 | 3. The result is equal to the square of the hypotenuse: c^2 = 25
 96 | 
 97 | Now, take the square root of both sides:
 98 | 
 99 | c = √25 ≈ 5 inches
100 | 
101 | **Real-World Applications:**
102 | 
103 | The Pythagorean theorem has numerous practical applications in various fields, including:
104 | 
105 | * Construction and architecture: Finding the length of diagonals, beams, or pillars.
106 | * Physics: Calculating distances, velocities, and accelerations in problems involving right triangles.
107 | * Engineering: Designing bridges, buildings, or other structures that rely on triangular shapes.
108 | 
109 | **Visual Aids:**
110 | 
111 | For a better understanding, you can use online tools or software to create interactive diagrams that demonstrate the Pythagorean theorem. Some popular options include:
112 | 
113 | * GeoGebra
114 | * Desmos
115 | * Khan Academy's math exercises
116 | 
117 | Remember, this theorem is not just a mathematical concept; it has many practical applications in various fields.
118 | 
119 | </details>
120 | 
121 | 
122 | 
```

--------------------------------------------------------------------------------
/libraries/python/skills/skill-library/skill_library/skills/research/README.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Research skill
  2 | 
  3 | ## Web Research [web_researcy.py](./routines/web_research.py)
  4 | 
  5 | This routine conducts thorough research on a given topic, interacts with the
  6 | user to refine the research plan, gathers information from web searches,
  7 | evaluates answers, and generates a structured research report. Here's how it
  8 | works:
  9 | 
 10 | 1. **Generate a Research Plan:**
 11 |    - The program starts by running a routine (`research.generate_research_plan`)
 12 |      to create a research plan based on the given topic.
 13 |    - The plan is then saved to a file (`plan_name.txt`).
 14 | 
 15 | 2. **User Review & Refinement:**
 16 |    - The user is asked if the plan looks good or needs modifications.
 17 |    - If the user wants updates, the plan is read from the file and refined
 18 |      (`research.update_research_plan`).
 19 |    - This loop continues until the user confirms the plan or chooses to exit.
 20 | 
 21 | 3. **Execute the Research Plan:**
 22 |    - If the user exits, the temporary research plan file is deleted.
 23 |    - Otherwise, the research begins, and a results file
 24 |      (`plan_name_research_answers.md`) is created with a header.
 25 | 
 26 | 4. **Web Search & Answer Collection:**
 27 |    - For each research question in the plan:
 28 |      - The system searches the web for relevant information
 29 |        (`research.web_search`).
 30 |      - It generates an answer using the retrieved content
 31 |        (`research.answer_question_about_content`).
 32 |      - The answer is evaluated for accuracy (`research.evaluate_answer`).
 33 |      - If the answer is good, it is appended to the results file.
 34 |      - If the answer is not satisfactory, the system refines its search based on
 35 |        previous attempts.
 36 | 
 37 | 5. **Summarize & Report Generation:**
 38 |    - After answering all research questions, the collected information is read
 39 |      from the file.
 40 |    - A summary of the research is generated (`common.summarize`).
 41 |    - The final research report is saved as `plan_name_research_report.txt`.
 42 |    - The program prints a completion message and returns the report.
 43 | 
 44 | ### Key Features
 45 | 
 46 | - **Iterative refinement** with user feedback before executing research.
 47 | - **Automated web searching** to gather relevant information.
 48 | - **Evaluation of answers** to ensure quality before adding them to the report.
 49 | - **Final summarization** for a concise, structured research report.
 50 | 
 51 | This routine is designed to **automate and streamline** the process of
 52 | conducting detailed web-based research, reducing manual effort while maintaining
 53 | quality through user interaction and validation steps.
 54 | 
 55 | ## Future improvements
 56 | 
 57 | ### User interaction
 58 | 
 59 | "one thing that I really like about the OpenAI deep research is that it always comes back with exactly 1 round of clarifying questions before running, which I believe significantly improves the result for the desired context" -- brkrabach
 60 | 
 61 | Or when running in an MCP, maybe make the tool description:
 62 | 
 63 | "If you feel it is appropriate to use this tool, express this intent and then make exactly one request of the user for specific details that may make this research request more on target with their ask. Include 4-6 clarifying questions. If you have already done this step, please make sure to include the user's answers in your request for this tool"
 64 | 
 65 | ### Routine improvements
 66 | 
 67 | "Based on my analysis of the current Web Research routine and the feedback received, here are several structural changes I would recommend:
 68 | Recommended Structural Changes to the Research Routine" -- Claude 3.7 Sonnet
 69 | 
 70 | Add a Source Evaluation Step
 71 | 
 72 | Create a new routine (research2.evaluate_sources) that runs after visiting pages
 73 | This would assess the reliability and relevance of each source, flagging potential biases or SEO-optimized content
 74 | Could assign confidence ratings to different sources
 75 | 
 76 | Implement Iterative Fact Verification
 77 | 
 78 | Add a dedicated verification step (research2.verify_facts) that cross-checks facts across multiple sources
 79 | This would help identify and flag contradictions or unverified claims
 80 | Could implement a consensus mechanism for conflicting information
 81 | 
 82 | Create a Progressive Summary
 83 | 
 84 | Instead of waiting until the end, maintain a running summary (research2.progressive_summary)
 85 | Update this summary after each research iteration
 86 | This would help identify gaps more clearly as the research progresses
 87 | 
 88 | Add Information Classification
 89 | 
 90 | Create a routine to classify information by type (e.g., research2.classify_info)
 91 | Categories could include: technical specs, expert opinions, user experiences, statistical data
 92 | This would help organize the final report and highlight the diversity of information types
 93 | 
 94 | Implement a Counterpoint Search
 95 | 
 96 | Add a dedicated step (research2.find_counterpoints) to search specifically for contradictory information
 97 | This would deliberately look for opposing viewpoints or contradictions to current findings
 98 | Could help address confirmation bias in the research process
 99 | 
100 | Create a Confidence Scoring System
101 | 
102 | Implement a numerical confidence score for each fact (research2.score_confidence)
103 | Based on source reliability, number of corroborating sources, and consistency
104 | Would make uncertainty more transparent in the final report
105 | 
106 | Add Early Termination Criteria
107 | 
108 | Implement more sophisticated criteria for when research is complete
109 | Consider both coverage of topics and confidence levels in determining completion
110 | Could prevent unnecessary searches when sufficient reliable information has been found
111 | 
```

--------------------------------------------------------------------------------
/workbench-app/README.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Semantic Workbench App
  2 | 
  3 | ## Architecture
  4 | 
  5 | The Semantic Workbench app is designed as a client-side, single-page application (SPA) using React and TypeScript. It runs entirely in the user's browser and interacts with the backend Semantic Workbench service for state and conversation management.
  6 | 
  7 | ### Key Components
  8 | 
  9 | **React/TypeScript**: The app is built using the React library and TypeScript for static typing.
 10 | 
 11 | **Vite**: Build system and development server that provides fast HMR (Hot Module Replacement).
 12 | 
 13 | **Fluent UI & Fluent Copilot**: Microsoft design system components that provide a consistent look and feel.
 14 | 
 15 | **Redux & Redux Toolkit**: Centralized state management with middleware for side effects.
 16 | 
 17 | **React Router**: Handles navigation and URL management within the SPA.
 18 | 
 19 | **Client-Server Interaction**: The app communicates with the Workbench backend service via RESTful APIs and SSE (Server-Sent Events) for real-time updates.
 20 | 
 21 | **Content Rendering**: Support for rich content types including Markdown, code syntax highlighting, Mermaid diagrams, ABC notation for music, and more.
 22 | 
 23 | ### Initialization and Authentication
 24 | 
 25 | The application requires user authentication, typically via Microsoft AAD or MSA accounts. The app uses Microsoft Authentication Library (MSAL) for authentication flows. Instructions for setting up the development environment are in the repo readme. To deploy in your own environment see [app registration documentation](../docs/CUSTOM_APP_REGISTRATION.md).
 26 | 
 27 | ### Connecting to the Backend Service
 28 | 
 29 | The Semantic Workbench app connects to the backend service using RESTful API calls. Here's how the interaction works:
 30 | 
 31 | 1. **Initial Setup**: On application startup, the app establishes a connection to the backend service located at a specified endpoint. This connection requires SSL certificates, which are automatically generated by vite-plugin-mkcert during development.
 32 | 2. **User Authentication**: Users must authenticate via Microsoft AAD or MSA accounts. This enables secure access and interaction between the app and the backend.
 33 | 3. **Data Fetching & State Management**: The app uses Redux Toolkit Query to manage API requests and caching of conversation data, messages, and participant information.
 34 | 4. **Event Handling**: User actions within the app (e.g., sending a message) trigger RESTful API calls to the backend, which processes the actions and returns the appropriate responses.
 35 | 5. **Real-time Updates**: The app uses Server-Sent Events (SSE) to receive real-time updates from the backend service, enabling live updates of conversation state.
 36 | 
 37 | ### Error Handling
 38 | 
 39 | The app includes error handling mechanisms that notify users of any issues with the backend connection, such as authentication failures or network issues.
 40 | 
 41 | ## Setup Guide
 42 | 
 43 | The Semantic Workbench app is a React/TypeScript app integrated with the [Semantic Workbench](../workbench-service/README.md) backend service.
 44 | 
 45 | ### Prerequisites
 46 | 
 47 | - **Node.js**: Version 20.x is required (enforced by the run script)
 48 | - **pnpm**: Used for package management
 49 | - **SSL certificates**: Automatically generated during development for HTTPS
 50 | 
 51 | Follow the [setup guide](../docs/SETUP_DEV_ENVIRONMENT.md) to install all required development tools.
 52 | 
 53 | ## Installing dependencies
 54 | 
 55 | In the [workbench-app](./) directory:
 56 | 
 57 | ```sh
 58 | make
 59 | ```
 60 | 
 61 | This command runs `pnpm install` to install all required dependencies.
 62 | 
 63 | ## Running from VS Code
 64 | 
 65 | To run and/or debug in VS Code:
 66 | 1. Open the workspace file `semantic-workbench.code-workspace`
 67 | 2. View -> Run
 68 | 3. Select "app: semantic-workbench-app"
 69 | 
 70 | ## Running from the command line
 71 | 
 72 | In the [workbench-app](./) directory:
 73 | 
 74 | ```sh
 75 | pnpm dev
 76 | ```
 77 | or
 78 | ```sh
 79 | pnpm start
 80 | ```
 81 | 
 82 | Then open https://127.0.0.1:4000 in your browser.
 83 | 
 84 | Note: The first time you run the app, your browser may warn about the self-signed SSL certificate.
 85 | 
 86 | ## Development Tools
 87 | 
 88 | ### Available Scripts
 89 | 
 90 | - `pnpm dev` / `pnpm start` - Start development server
 91 | - `pnpm build` - Build for production
 92 | - `pnpm preview` - Locally preview production build
 93 | - `pnpm lint` - Run ESLint to check code quality
 94 | - `pnpm format` / `pnpm prettify` - Format code with Prettier
 95 | - `pnpm type-check` - Run TypeScript type checking
 96 | - `pnpm find-deadcode` - Identify unused code
 97 | - `pnpm depcheck` - Check for dependency issues
 98 | 
 99 | ## Documentation
100 | 
101 | ### Application Documentation
102 | 
103 | - [App Development Guide](./docs/APP_DEV_GUIDE.md) - Guide for developing the app
104 | - [Message Metadata](./docs/MESSAGE_METADATA.md) - Details about message metadata structure
105 | - [Message Types](./docs/MESSAGE_TYPES.md) - Different types of messages supported
106 | - [State Inspectors](./docs/STATE_INSPECTORS.md) - Information about state inspection tools
107 | 
108 | ### Related Documentation
109 | 
110 | - [Workbench App Overview](../docs/WORKBENCH_APP.md) - Complete overview of the application
111 | - [Custom App Registration](../docs/CUSTOM_APP_REGISTRATION.md) - Setting up authentication
112 | 
113 | ## Project Structure
114 | 
115 | Key directories in the project:
116 | 
117 | ```
118 | workbench-app/
119 | ├── src/
120 | │   ├── components/     # Reusable UI components
121 | │   ├── models/         # TypeScript interfaces and types
122 | │   ├── redux/          # State management
123 | │   ├── routes/         # Application routes
124 | │   ├── services/       # API services
125 | │   └── libs/           # Utility functions and hooks
126 | ├── public/             # Static assets
127 | ├── docs/               # Documentation
128 | └── certs/              # SSL certificates for development
129 | ```
```

--------------------------------------------------------------------------------
/workbench-service/README.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Semantic Workbench Service
  2 | 
  3 | ## Architecture
  4 | 
  5 | The Semantic Workbench service consists of several key components that interact to provide a seamless user experience:
  6 | 
  7 | **Workbench Service**: A backend Python service that handles state management, user interactions, conversation history, file storage, and real-time event distribution.
  8 | 
  9 | [**Workbench App**](../workbench-app): A single-page web application written in TypeScript and React that provides the user interface for interacting with assistants.
 10 | 
 11 | **FastAPI Framework**: Powers the HTTP API and Server-Sent Events (SSE) for real-time updates between clients and assistants.
 12 | 
 13 | **Database Layer**: Uses SQLModel (SQLAlchemy) with support for both SQLite (development) and PostgreSQL (production) for persistent storage.
 14 | 
 15 | **Authentication**: Integrated Azure AD/Microsoft authentication with JWT token validation.
 16 | 
 17 | **Assistants**: Independently developed services that connect to the Workbench through a RESTful API, enabling AI capabilities.
 18 | 
 19 | ![Architecture Diagram](../docs/images/architecture-animation.gif)
 20 | 
 21 | ### Core Components
 22 | 
 23 | - **Controller Layer**: Implements business logic for conversations, assistants, files, and users
 24 | - **Database Models**: SQLModel-based entities for storing application state
 25 | - **Authentication**: Azure AD integration with JWT validation
 26 | - **File Storage**: Versioned file system for conversation attachments and artifacts
 27 | - **Event System**: Real-time event distribution using Server-Sent Events (SSE)
 28 | - **API Layer**: RESTful endpoints for all service operations
 29 | 
 30 | ### Communication
 31 | 
 32 | The communication between the Workbench and Assistants is managed through multiple channels:
 33 | 
 34 | 1. **HTTP API**: RESTful endpoints for CRUD operations and state management
 35 | 2. **Server-Sent Events (SSE)**: Real-time event streaming for immediate updates
 36 | 3. **Event System**: Structured event types (e.g., `message.created`, `conversation.updated`) for real-time state synchronization
 37 | 4. **Webhook Callbacks**: Assistant registration with callback URLs for event delivery
 38 | 
 39 | ### Database Structure
 40 | 
 41 | The service uses SQLModel to manage structured data:
 42 | 
 43 | - **Users**: Authentication and profile information
 44 | - **Conversations**: Messaging history and metadata
 45 | - **Messages**: Different message types with content and metadata
 46 | - **Participants**: Users and assistants in conversations
 47 | - **Files**: Versioned attachments for conversations
 48 | - **Assistants**: Registered assistants and their configurations
 49 | - **Shares**: Conversation sharing capabilities
 50 | 
 51 | ## Features
 52 | 
 53 | ### Conversation Management
 54 | - Create, update, and delete conversations
 55 | - Add and remove participants
 56 | - Different message types (chat, note, notice, command)
 57 | - Message metadata and debug information
 58 | 
 59 | ### File Management
 60 | - File attachment support
 61 | - Versioned file storage
 62 | - Multiple content types
 63 | 
 64 | ### Sharing
 65 | - Share conversations with other users
 66 | - Public/private share links
 67 | - Share redemption
 68 | 
 69 | ### Integration with Assistants
 70 | - Assistant registration and discovery
 71 | - API key management for secure communication
 72 | - Event-based communication
 73 | 
 74 | ### Speech Services
 75 | - Azure Speech integration for text-to-speech
 76 | 
 77 | ## Configuration
 78 | 
 79 | The service is configured through environment variables:
 80 | 
 81 | ```
 82 | # Basic configuration
 83 | WORKBENCH_SERVICE_HOST=127.0.0.1
 84 | WORKBENCH_SERVICE_PORT=5000
 85 | 
 86 | # Database settings
 87 | WORKBENCH_SERVICE_DB_CONNECTION=sqlite+aiosqlite:///./workbench-service.db
 88 | # Or for PostgreSQL:
 89 | # WORKBENCH_SERVICE_DB_CONNECTION=postgresql+asyncpg://user:pass@host:port/dbname
 90 | 
 91 | # Authentication
 92 | WORKBENCH_SERVICE_TENANT_ID=your-azure-tenant-id
 93 | WORKBENCH_SERVICE_CLIENT_ID=your-client-id
 94 | 
 95 | # File storage
 96 | WORKBENCH_SERVICE_FILES_DIR=./.data/files
 97 | ```
 98 | 
 99 | See the [environment setup guide](../docs/SETUP_DEV_ENVIRONMENT.md) for complete configuration options.
100 | 
101 | ## Setup Guide
102 | 
103 | ### Prerequisites
104 | 
105 | - Python 3.11+
106 | - Access to database (SQLite for development, PostgreSQL for production)
107 | - Azure AD application registration (for authentication)
108 | 
109 | ### Installing Dependencies
110 | 
111 | In the [workbench-service](./) directory:
112 | 
113 | ```sh
114 | make
115 | ```
116 | 
117 | This will use [uv](https://github.com/astral-sh/uv) to install all Python dependencies.
118 | 
119 | If this fails in Windows, try running a vanilla instance of `cmd` or `powershell` and not within `Cmder` or another shell that may have modified the environment.
120 | 
121 | ### Database Migration
122 | 
123 | The service uses Alembic for database migrations:
124 | 
125 | ```sh
126 | # Initialize the database
127 | uv run alembic upgrade head
128 | ```
129 | 
130 | ### Running from VS Code
131 | 
132 | To run and/or debug in VS Code:
133 | 1. Open the workspace file `semantic-workbench.code-workspace`
134 | 2. View->Run
135 | 3. Select "service: semantic-workbench-service"
136 | 
137 | ### Running from the Command Line
138 | 
139 | In the [workbench-service](./) directory:
140 | 
141 | ```sh
142 | uv run start-service [--host HOST] [--port PORT]
143 | ```
144 | 
145 | ### Running Tests
146 | 
147 | ```sh
148 | uv run pytest
149 | ```
150 | 
151 | ## API Documentation
152 | 
153 | When running the service, access the FastAPI auto-generated documentation at:
154 | 
155 | - Swagger UI: `http://localhost:5000/docs`
156 | - ReDoc: `http://localhost:5000/redoc`
157 | 
158 | ## Troubleshooting
159 | 
160 | ### Common Issues
161 | 
162 | - **Database connection errors**: Verify your connection string and database permissions
163 | - **Authentication failures**: Check your Azure AD configuration and client IDs
164 | - **File storage permissions**: Ensure the service has write access to the files directory
165 | 
166 | ### Debug Mode
167 | 
168 | Enable debug logging for more detailed information:
169 | 
170 | ```sh
171 | WORKBENCH_SERVICE_LOG_LEVEL=DEBUG uv run start-service
172 | ```
```

--------------------------------------------------------------------------------
/libraries/python/assistant-extensions/README.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Assistant Extensions
  2 | 
  3 | Extensions that enhance Semantic Workbench assistants with additional capabilities beyond the core functionality.
  4 | 
  5 | ## Overview
  6 | 
  7 | The `assistant-extensions` library provides several modules that can be integrated with your Semantic Workbench assistants:
  8 | 
  9 | - **Artifacts**: Create and manage file artifacts during conversations (markdown, code, mermaid diagrams, etc.)
 10 | - **Attachments**: Process and extract content from file attachments added to conversations
 11 | - **AI Clients**: Configure and manage different AI service providers (OpenAI, Azure OpenAI, Anthropic)
 12 | - **MCP (Model Context Protocol)**: Connect to and utilize MCP tool servers for extended functionality
 13 | - **Workflows**: Define and execute multi-step automated workflows
 14 | 
 15 | These extensions are designed to work with the `semantic-workbench-assistant` framework and can be added to your assistant implementation to enhance its capabilities.
 16 | 
 17 | ## Module Details
 18 | 
 19 | ### Artifacts
 20 | 
 21 | The Artifacts extension enables assistants to create and manage rich content artifacts within conversations.
 22 | 
 23 | ```python
 24 | from assistant_extensions.artifacts import ArtifactsExtension, ArtifactsConfigModel
 25 | from semantic_workbench_assistant import AssistantApp
 26 | 
 27 | async def get_artifacts_config(context):
 28 |     return ArtifactsConfigModel(enabled=True)
 29 | 
 30 | # Create and add the extension to your assistant
 31 | assistant = AssistantApp(name="My Assistant")
 32 | artifacts_extension = ArtifactsExtension(
 33 |     assistant=assistant,
 34 |     config_provider=get_artifacts_config
 35 | )
 36 | 
 37 | # The extension is now ready to create and manage artifacts
 38 | ```
 39 | 
 40 | Supports content types including Markdown, code (with syntax highlighting), Mermaid diagrams, ABC notation for music, and more.
 41 | 
 42 | ### Attachments
 43 | 
 44 | Process files uploaded during conversations, extracting and providing content to the AI model.
 45 | 
 46 | ```python
 47 | from assistant_extensions.attachments import AttachmentsExtension, AttachmentsConfigModel
 48 | from semantic_workbench_assistant import AssistantApp
 49 | 
 50 | assistant = AssistantApp(name="My Assistant")
 51 | attachments_extension = AttachmentsExtension(assistant=assistant)
 52 | 
 53 | @assistant.events.conversation.message.chat.on_created
 54 | async def handle_message(context, event, message):
 55 |     config = AttachmentsConfigModel(
 56 |         context_description="Files attached to this conversation"
 57 |     )
 58 |     # Get attachment content to include in AI prompt
 59 |     messages = await attachments_extension.get_completion_messages_for_attachments(context, config)
 60 |     # Use messages in your AI completion request
 61 | ```
 62 | 
 63 | Supports text files, PDFs, Word documents, and images with OCR capabilities.
 64 | 
 65 | ### AI Clients
 66 | 
 67 | Configuration models for different AI service providers to simplify client setup.
 68 | 
 69 | ```python
 70 | from assistant_extensions.ai_clients.config import OpenAIClientConfigModel, AIServiceType
 71 | from openai_client import OpenAIServiceConfig, OpenAIRequestConfig
 72 | 
 73 | # Configure an OpenAI client
 74 | config = OpenAIClientConfigModel(
 75 |     ai_service_type=AIServiceType.OpenAI,
 76 |     service_config=OpenAIServiceConfig(
 77 |         api_key=os.environ.get("OPENAI_API_KEY")
 78 |     ),
 79 |     request_config=OpenAIRequestConfig(
 80 |         model="gpt-4o",
 81 |         temperature=0.7
 82 |     )
 83 | )
 84 | 
 85 | # Use this config with openai_client or anthropic_client libraries
 86 | ```
 87 | 
 88 | ### MCP (Model Context Protocol)
 89 | 
 90 | Connect to and utilize MCP tool servers to extend your assistant with external capabilities.
 91 | 
 92 | ```python
 93 | from assistant_extensions.mcp import establish_mcp_sessions, retrieve_mcp_tools_from_sessions
 94 | from contextlib import AsyncExitStack
 95 | 
 96 | async def setup_mcp_tools(config):
 97 |     async with AsyncExitStack() as stack:
 98 |         # Connect to MCP servers and get available tools
 99 |         sessions = await establish_mcp_sessions(config, stack)
100 |         tools = retrieve_mcp_tools_from_sessions(sessions, config)
101 |         
102 |         # Use tools with your AI model
103 |         return sessions, tools
104 | ```
105 | 
106 | ### Workflows
107 | 
108 | Define and execute multi-step workflows within conversations, such as automated sequences.
109 | 
110 | ```python
111 | from assistant_extensions.workflows import WorkflowsExtension, WorkflowsConfigModel
112 | from semantic_workbench_assistant import AssistantApp
113 | 
114 | async def get_workflows_config(context):
115 |     return WorkflowsConfigModel(
116 |         enabled=True,
117 |         workflow_definitions=[
118 |             {
119 |                 "workflow_type": "user_proxy",
120 |                 "command": "analyze_document",
121 |                 "name": "Document Analysis",
122 |                 "description": "Analyze a document for quality and completeness",
123 |                 "user_messages": [
124 |                     {"message": "Please analyze this document for accuracy"},
125 |                     {"message": "What improvements would you suggest?"}
126 |                 ]
127 |             }
128 |         ]
129 |     )
130 | 
131 | assistant = AssistantApp(name="My Assistant")
132 | workflows_extension = WorkflowsExtension(
133 |     assistant=assistant,
134 |     config_provider=get_workflows_config
135 | )
136 | ```
137 | 
138 | ## Integration
139 | 
140 | These extensions are designed to enhance Semantic Workbench assistants. To use them:
141 | 
142 | 1. Configure your assistant using the `semantic-workbench-assistant` framework
143 | 2. Add the desired extensions to your assistant
144 | 3. Implement event handlers for extension functionality 
145 | 4. Configure extension behavior through their respective config models
146 | 
147 | For detailed examples, see the [Assistant Development Guide](../../docs/ASSISTANT_DEVELOPMENT_GUIDE.md) and explore the existing assistant implementations in the repository.
148 | 
149 | ## Optional Dependencies
150 | 
151 | Some extensions require additional packages:
152 | 
153 | ```
154 | # For attachments support (PDF, Word docs)
155 | pip install "assistant-extensions[attachments]"
156 | 
157 | # For MCP tool support
158 | pip install "assistant-extensions[mcp]"
159 | ```
160 | 
161 | This library is part of the Semantic Workbench project, which provides a complete framework for building and deploying intelligent assistants.
```

--------------------------------------------------------------------------------
/assistants/skill-assistant/README.md:
--------------------------------------------------------------------------------

```markdown
 1 | # Skill Assistant
 2 | 
 3 | The Skill Assistant serves as a demonstration of integrating the Skill Library within an Assistant in the Semantic Workbench. Specifically, this assistant showcases the Posix skill and the chat driver. The [Posix skill](../../libraries/python/skills/skills/posix-skill/README.md) demonstrates file system management by allowing the assistant to perform posix-style actions. The [chat driver](../../libraries/python/openai-client/openai_client/chat_driver/README.md) handles conversations and interacts with underlying AI models like OpenAI and Azure OpenAI.
 4 | 
 5 | ## Overview
 6 | 
 7 | [skill_controller.py](assistant/skill_controller.py) file is responsible for managing the assistants. It includes functionality to create and retrieve assistants, configure chat drivers, and map skill events to the Semantic Workbench.
 8 | 
 9 | - AssistantRegistry: Manages multiple assistants, each associated with a unique conversation.
10 | - \_event_mapper: Maps skill events to message types understood by the Semantic Workbench.
11 | - create_assistant: Defines how to create and configure a new assistant.
12 | 
13 | [skill_assistant.py](assistant/skill_assistant.py) file defines the main Skill Assistant class that integrates with the Semantic Workbench. It handles workbench events and coordinates the assistant's responses based on the conversation state.
14 | 
15 | - SkillAssistant Class: The main class that integrates with the Semantic Workbench.
16 | - on_workbench_event: Handles various workbench events to drive the assistant's behavior.
17 | 
18 | [config.py](assistant/config.py) file defines the configuration model for the Skill Assistant. It includes settings for both Azure OpenAI and OpenAI services, along with request-specific settings such as max_tokens and response_tokens.
19 | 
20 | - RequestConfig: Defines parameters for generating responses, including tokens settings.
21 | 
22 | ## Responsible AI
23 | 
24 | The assistant includes some important best practices for AI development, such as:
25 | 
26 | - **System prompt safety**, ie a set of LLM guardrails to protect users. As a developer you should understand how these
27 |   guardrails work in your scenarios, and how to change them if needed. The system prompt and the prompt safety
28 |   guardrails are split in two to help with testing. When talking to LLM models, prompt safety is injected before the
29 |   system prompt.
30 |   - See https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message for more details
31 |     about protecting application and users in different scenarios.
32 | - **Content moderation**, via [Azure AI Content Safety](https://azure.microsoft.com/products/ai-services/ai-content-safety)
33 |   or [OpenAI Content Moderation](https://platform.openai.com/docs/guides/moderation).
34 | 
35 | See the [Responsible AI FAQ](../../RESPONSIBLE_AI_FAQ.md) for more information.
36 | 
37 | # Suggested Development Environment
38 | 
39 | - Use GitHub Codespaces for a quick, turn-key dev environment: [/.devcontainer/README.md](../../.devcontainer/README.md)
40 | - VS Code is recommended for development
41 | 
42 | ## Pre-requisites
43 | 
44 | - Set up your dev environment
45 |   - SUGGESTED: Use GitHub Codespaces for a quick, easy, and consistent dev
46 |     environment: [/.devcontainer/README.md](../../.devcontainer/README.md)
47 |   - ALTERNATIVE: Local setup following the [main README](../../README.md#local-development-environment)
48 | - Set up and verify that the workbench app and service are running using the [semantic-workbench.code-workspace](../../semantic-workbench.code-workspace)
49 | - If using Azure OpenAI, set up an Azure account and create a Content Safety resource
50 |   - See [Azure AI Content Safety](https://azure.microsoft.com/products/ai-services/ai-content-safety) for more information
51 |   - Copy the `.env.example` to `.env` and update the `ASSISTANT__AZURE_CONTENT_SAFETY_ENDPOINT` value with the endpoint of your Azure Content Safety resource
52 |   - From VS Code > `Terminal`, run `az login` to authenticate with Azure prior to starting the assistant
53 | 
54 | ## Steps
55 | 
56 | - Use VS Code > `Run and Debug` (ctrl/cmd+shift+d) > `semantic-workbench` to start the app and service from this workspace
57 | - Use VS Code > `Run and Debug` (ctrl/cmd+shift+d) > `launch assistant` to start the assistant.
58 | - If running in a devcontainer, follow the instructions in [.devcontainer/POST_SETUP_README.md](../../.devcontainer/POST_SETUP_README.md#start-the-app-and-service) for any additional steps.
59 | - Return to the workbench app to interact with the assistant
60 | - Add a new assistant from the main menu of the app, choose the assistant name as defined by the `service_name` in [chat.py](./assistant/skill_assistant.py)
61 | - Click the newly created assistant to configure and interact with it
62 | 
63 | ## Starting the example from CLI
64 | 
65 | If you're not using VS Code and/or Codespaces, you can also work from the
66 | command line, using `uv`:
67 | 
68 | ```
69 | cd <PATH TO THIS FOLDER>
70 | 
71 | uv run start-assistant
72 | ```
73 | 
74 | ## Create your own assistant
75 | 
76 | Copy the contents of this folder to your project.
77 | 
78 | - The paths are already set if you put in the same repo root and relative path of `/<your_projects>/<your_assistant_name>`
79 | - If placed in a different location, update the references in the `pyproject.toml` to point to the appropriate locations for the `semantic-workbench-*` packages
80 | 
81 | ## From Development to Production
82 | 
83 | It's important to highlight how Semantic Workbench is a development tool, and it's not designed to host agents in
84 | a production environment. The workbench helps with testing and debugging, in a development and isolated environment, usually your localhost.
85 | 
86 | The core of your assistant/AI application, e.g. how it reacts to users, how it invokes tools, how it stores data, can be
87 | developed with any framework, such as Semantic Kernel, Langchain, OpenAI assistants, etc. That is typically the code
88 | you will add to `chat.py`.
89 | 
90 | **Semantic Workbench is not a framework**. Dependencies on `semantic-workbench-assistant` package are used only to test and debug your code in Semantic Workbench. **When an assistant is fully developed and ready for production, configurable settings should be hard coded, dependencies on `semantic-workbench-assistant` and similar should be removed**.
91 | 
```

--------------------------------------------------------------------------------
/assistants/document-assistant/README.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Document Assistant
  2 | 
  3 | NOTE: DO NOT DEPLOY THIS ASSISTANT OUTSIDE OF CODESPACES (OR LOCAL, BUT THIS HAS NOT BEEN TESTED)
  4 | 
  5 | This assistant is designed to help with development within the Semantic Workbench repo in Codespaces, and is not intended for deployment to production environments.
  6 | 
  7 | The Document Assistant is an AI assistant focused on being easy to use for everyone with a core feature being
  8 | reliable document creation and editing, grounded in all of your context across files and the conversation.
  9 | 
 10 | ---
 11 | 
 12 | ## Key Features
 13 | 
 14 | - **MCP Server Integration**:
 15 |   - Provides access to tools like the MCP filesystem and VS Code servers by default.
 16 |   - Additional tools (e.g., Bing Search, OpenAI integrations) can be enabled via configuration.
 17 | - **Content Safety and Guardrails**:
 18 |   - Integrated with Azure OpenAI and OpenAI APIs for responsible AI usage.
 19 |   - Includes prompts for instruction, guidance, and guardrails.
 20 | - **Codespaces Optimization**:
 21 |   - Ready to run directly within Codespaces for a streamlined developer experience.
 22 |   - Also supports local setups, but **Windows users must use WSL** due to Linux dependencies.
 23 | 
 24 | ---
 25 | 
 26 | ## Prerequisites
 27 | 
 28 | ### Codespaces Development
 29 | 
 30 | - Follow the guide in [Optimizing for Codespaces](../../.devcontainer/OPTIMIZING_FOR_CODESPACES.md) to set up your environment.
 31 | - **Using VS Code Desktop**:
 32 |   - Open the workspace: `/workspaces/semanticworkbench/semantic-workbench.code-workspace`.
 33 | 
 34 | ### Local Development
 35 | 
 36 | - Refer to [Setup Developer Environment](../../docs/SETUP_DEV_ENVIRONMENT.md) for full instructions.
 37 | - **Windows Users**:
 38 |   - Must host the repository in **WSL (Windows Subsystem for Linux)** due to Linux library dependencies.
 39 | 
 40 | ### Authentication
 41 | 
 42 | - You must authenticate with the Semantic Workbench using a **Microsoft or organizational account**. See [Workbench App Overview](../../docs/WORKBENCH_APP.md) for details.
 43 | 
 44 | ---
 45 | 
 46 | ## Setup Instructions
 47 | 
 48 | ### Creating a Codespace
 49 | 
 50 | 1. Go to the **Semantic Workbench** repository in GitHub.
 51 | 2. Create a new Codespace.
 52 | 3. Open the Codespace in **VS Code Desktop**.
 53 |    - Open the workspace file: `/workspaces/semanticworkbench/semantic-workbench.code-workspace`.
 54 | 
 55 | ### Configure `.env` Variables
 56 | 
 57 | 1. Navigate to the folder: `/assistants/codespace-assistant`.
 58 | 2. Copy `.env.example` to `.env`.
 59 | 3. Replace default values with your resource details for **Azure OpenAI** and **OpenAI** APIs.
 60 |    - **Azure**:
 61 |      - `ASSISTANT__AZURE_OPENAI_ENDPOINT`: Azure OpenAI endpoint.
 62 |      - `ASSISTANT__AZURE_OPENAI_API_KEY`: Azure API key (use managed identities if possible).
 63 |      - `ASSISTANT__AZURE_CONTENT_SAFETY_ENDPOINT`: Azure Content Safety endpoint.
 64 |    - **OpenAI**:
 65 |      - `ASSISTANT__OPENAI_API_KEY`: API key for OpenAI.
 66 |      - `ASSISTANT__OPENAI_ORGANIZATION_ID`: Organization ID (optional).
 67 | 
 68 | ### First Launch
 69 | 
 70 | 1. Go to the **Debug** pane in VS Code.
 71 | 2. Select `assistants: codespace-assistant (demo)`.
 72 | 3. Start the assistant.
 73 |    - For more MCP servers, select `assistants: codespace-assistant (for dev)` (requires custom API keys).
 74 | 4. Open your browser: [https://127.0.0.1:4000/](https://127.0.0.1:4000/).
 75 |    - Click "Advanced" > "Proceed to localhost" to bypass security warnings.
 76 | 5. Create a conversation and add the assistant:
 77 |    - Provide a title.
 78 |    - Create a new assistant and select the Codespace Assistant service.
 79 |    - Start interacting with the assistant (e.g., ask questions about the repo).
 80 | 
 81 | ---
 82 | 
 83 | ## Extending Functionality
 84 | 
 85 | ### Add Your Own Code
 86 | 
 87 | 1. Open a terminal in VS Code.
 88 | 2. Navigate to the `/workspaces` directory (default MCP filesystem server location).
 89 | 3. Clone your repository or create a new folder.
 90 |    - Optionally, add it to the workspace using **File > Add Folder to Workspace**.
 91 | 
 92 | The assistant can now read, write, and edit your custom code.
 93 | 
 94 | ---
 95 | 
 96 | ## Additional MCP Servers (Advanced)
 97 | 
 98 | The `assistants: codespace-assistant (for dev)` debug configuration enables additional MCP servers not active by default. These servers can extend the assistant's functionality, but they require custom API keys to activate.
 99 | 
100 | ### Available MCP Servers
101 | 
102 | 1. **Bing Search**:
103 | 
104 |    - **Command**: `http://127.0.0.1:6030/sse`
105 |    - **Purpose**: Enables search capabilities via Bing.
106 | 
107 | 2. **Open Deep Research**:
108 | 
109 |    - **Command**: `http://127.0.0.1:6020/sse`
110 |    - **Purpose**: Facilitates deeper research workflows.
111 | 
112 | 3. **Giphy**:
113 | 
114 |    - **Command**: `http://127.0.0.1:6000/sse`
115 |    - **Purpose**: Fetches GIFs for use in conversations.
116 | 
117 | 4. **Memory**:
118 | 
119 |    - **Command**: `npx @modelcontextprotocol/server-memory`
120 |    - **Purpose**: Integrates a memory or knowledge graph system.
121 | 
122 | 5. **Sequential Thinking**:
123 |    - **Command**: `npx @modelcontextprotocol/server-sequential-thinking`
124 |    - **Purpose**: Enables tools for sequential reasoning tasks.
125 | 
126 | ### How to Enable Additional MCP Servers
127 | 
128 | 1. Use the assistant configuration interface to enable these MCP servers directly. In the Semantic Workbench, navigate to the assistant's configuration panel, locate the MCP server settings, and toggle the desired servers on.
129 | 2. Check the `.env.example` file for each server's required API keys and configuration.
130 | 3. To enable a server, update the `.env` file with the necessary values and restart the assistant.
131 | 
132 | ---
133 | 
134 | ## Frequently Asked Questions (FAQs)
135 | 
136 | ### Authentication and Access
137 | 
138 | - **Q**: How do I log into the Semantic Workbench?
139 |   - **A**: Log in using your Microsoft or organizational account. See [Workbench App Overview](../../docs/WORKBENCH_APP.md).
140 | 
141 | ### Common Errors
142 | 
143 | 1. **Azure Content Safety Error**:
144 |    - Issue: `Bearer token authentication is not permitted for non-HTTPS URLs.`
145 |    - Solution: Configure the endpoint properly.
146 | 2. **Blank Screen on Startup**:
147 |    - Check if pop-up blockers are preventing access.
148 | 3. **Connection Issues on 127.0.0.1**:
149 |    - Ensure you're navigating to `https://127.0.0.1:4000/`.
150 | 
151 | ### Enabling MCP Servers
152 | 
153 | - Navigate to the assistant configuration panel and enable or configure servers as needed.
154 | - By default, the filesystem and VS Code servers are active. Others, like Bing Search or Giphy, can be enabled manually.
155 | 
156 | ### Limits and Customization
157 | 
158 | 1. **Maximum Steps Reached**:
159 |    - Expand the assistant's steps by updating the `Maximum Steps` setting in the assistant configuration.
160 | 2. **Folder Not Found**:
161 |    - Verify the path is under `/workspaces`. Adjust permissions if needed.
162 | 
163 | ---
164 | 
165 | ## Additional Resources
166 | 
167 | - [Optimizing for Codespaces](../../.devcontainer/OPTIMIZING_FOR_CODESPACES.md)
168 | - [Workbench App Overview](../../docs/WORKBENCH_APP.md)
169 | - [Setup Developer Environment](../../docs/SETUP_DEV_ENVIRONMENT.md)
170 | - [Assistant Development Guide](../../docs/ASSISTANT_DEVELOPMENT_GUIDE.md)
171 | 
172 | For issues, see the [Semantic Workbench README](../../README.md) or raise a question in the repository.
173 | 
```

--------------------------------------------------------------------------------
/assistants/codespace-assistant/README.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Codespace Assistant
  2 | 
  3 | NOTE: DO NOT DEPLOY THIS ASSISTANT OUTSIDE OF CODESPACES (OR LOCAL, BUT THIS HAS NOT BEEN TESTED)
  4 | 
  5 | This assistant is designed to help with development within the Semantic Workbench repo in Codespaces, and is not intended for deployment to production environments.
  6 | 
  7 | The Codespace Assistant is designed to help developers work within the **Semantic Workbench** repository, particularly in **GitHub Codespaces** and **VS Code**. It provides tools, guidance, and integrations to simplify coding, debugging, and interacting with your projects. While optimized for Codespaces, it can also be used in local environments with some caveats.
  8 | 
  9 | ---
 10 | 
 11 | ## Key Features
 12 | 
 13 | - **MCP Server Integration**:
 14 |   - Provides access to tools like the MCP filesystem and VS Code servers by default.
 15 |   - Additional tools (e.g., Bing Search, OpenAI integrations) can be enabled via configuration.
 16 | - **Content Safety and Guardrails**:
 17 |   - Integrated with Azure OpenAI and OpenAI APIs for responsible AI usage.
 18 |   - Includes prompts for instruction, guidance, and guardrails.
 19 | - **Codespaces Optimization**:
 20 |   - Ready to run directly within Codespaces for a streamlined developer experience.
 21 |   - Also supports local setups, but **Windows users must use WSL** due to Linux dependencies.
 22 | 
 23 | ---
 24 | 
 25 | ## Prerequisites
 26 | 
 27 | ### Codespaces Development
 28 | - Follow the guide in [Optimizing for Codespaces](../../.devcontainer/OPTIMIZING_FOR_CODESPACES.md) to set up your environment.
 29 | - **Using VS Code Desktop**:
 30 |   - Open the workspace: `/workspaces/semanticworkbench/semantic-workbench.code-workspace`.
 31 | 
 32 | ### Local Development
 33 | - Refer to [Setup Developer Environment](../../docs/SETUP_DEV_ENVIRONMENT.md) for full instructions.
 34 | - **Windows Users**:
 35 |   - Must host the repository in **WSL (Windows Subsystem for Linux)** due to Linux library dependencies.
 36 | 
 37 | ### Authentication
 38 | - You must authenticate with the Semantic Workbench using a **Microsoft or organizational account**. See [Workbench App Overview](../../docs/WORKBENCH_APP.md) for details.
 39 | 
 40 | ---
 41 | 
 42 | ## Setup Instructions
 43 | 
 44 | ### Creating a Codespace
 45 | 1. Go to the **Semantic Workbench** repository in GitHub.
 46 | 2. Create a new Codespace.
 47 | 3. Open the Codespace in **VS Code Desktop**.
 48 |    - Open the workspace file: `/workspaces/semanticworkbench/semantic-workbench.code-workspace`.
 49 | 
 50 | ### Configure `.env` Variables
 51 | 1. Navigate to the folder: `/assistants/codespace-assistant`.
 52 | 2. Copy `.env.example` to `.env`.
 53 | 3. Replace default values with your resource details for **Azure OpenAI** and **OpenAI** APIs.
 54 |    - **Azure**:
 55 |      - `ASSISTANT__AZURE_OPENAI_ENDPOINT`: Azure OpenAI endpoint.
 56 |      - `ASSISTANT__AZURE_OPENAI_API_KEY`: Azure API key (use managed identities if possible).
 57 |      - `ASSISTANT__AZURE_CONTENT_SAFETY_ENDPOINT`: Azure Content Safety endpoint.
 58 |    - **OpenAI**:
 59 |      - `ASSISTANT__OPENAI_API_KEY`: API key for OpenAI.
 60 |      - `ASSISTANT__OPENAI_ORGANIZATION_ID`: Organization ID (optional).
 61 | 
 62 | ### First Launch
 63 | 1. Go to the **Debug** pane in VS Code.
 64 | 2. Select `assistants: codespace-assistant (demo)`.
 65 | 3. Start the assistant.
 66 |    - For more MCP servers, select `assistants: codespace-assistant (for dev)` (requires custom API keys).
 67 | 4. Open your browser: [https://127.0.0.1:4000/](https://127.0.0.1:4000/).
 68 |    - Click "Advanced" > "Proceed to localhost" to bypass security warnings.
 69 | 5. Create a conversation and add the assistant:
 70 |    - Provide a title.
 71 |    - Create a new assistant and select the Codespace Assistant service.
 72 |    - Start interacting with the assistant (e.g., ask questions about the repo).
 73 | 
 74 | ---
 75 | 
 76 | ## Extending Functionality
 77 | 
 78 | ### Add Your Own Code
 79 | 1. Open a terminal in VS Code.
 80 | 2. Navigate to the `/workspaces` directory (default MCP filesystem server location).
 81 | 3. Clone your repository or create a new folder.
 82 |    - Optionally, add it to the workspace using **File > Add Folder to Workspace**.
 83 | 
 84 | The assistant can now read, write, and edit your custom code.
 85 | 
 86 | ---
 87 | 
 88 | ## Additional MCP Servers (Advanced)
 89 | 
 90 | The `assistants: codespace-assistant (for dev)` debug configuration enables additional MCP servers not active by default. These servers can extend the assistant's functionality, but they require custom API keys to activate.
 91 | 
 92 | ### Available MCP Servers
 93 | 
 94 | 1. **Bing Search**:
 95 |    - **Command**: `http://127.0.0.1:6030/sse`
 96 |    - **Purpose**: Enables search capabilities via Bing.
 97 | 
 98 | 2. **Open Deep Research**:
 99 |    - **Command**: `http://127.0.0.1:6020/sse`
100 |    - **Purpose**: Facilitates deeper research workflows.
101 | 
102 | 3. **Giphy**:
103 |    - **Command**: `http://127.0.0.1:6000/sse`
104 |    - **Purpose**: Fetches GIFs for use in conversations.
105 | 
106 | 4. **Memory**:
107 |    - **Command**: `npx @modelcontextprotocol/server-memory`
108 |    - **Purpose**: Integrates a memory or knowledge graph system.
109 | 
110 | 5. **Sequential Thinking**:
111 |    - **Command**: `npx @modelcontextprotocol/server-sequential-thinking`
112 |    - **Purpose**: Enables tools for sequential reasoning tasks.
113 | 
114 | ### How to Enable Additional MCP Servers
115 | 
116 | 1. Use the assistant configuration interface to enable these MCP servers directly. In the Semantic Workbench, navigate to the assistant's configuration panel, locate the MCP server settings, and toggle the desired servers on.
117 | 3. Check the `.env.example` file for each server's required API keys and configuration.
118 | 4. To enable a server, update the `.env` file with the necessary values and restart the assistant.
119 | 
120 | ---
121 | 
122 | ## Frequently Asked Questions (FAQs)
123 | 
124 | ### Authentication and Access
125 | - **Q**: How do I log into the Semantic Workbench?
126 |   - **A**: Log in using your Microsoft or organizational account. See [Workbench App Overview](../../docs/WORKBENCH_APP.md).
127 | 
128 | ### Common Errors
129 | 1. **Azure Content Safety Error**:
130 |    - Issue: `Bearer token authentication is not permitted for non-HTTPS URLs.`
131 |    - Solution: Configure the endpoint properly.
132 | 2. **Blank Screen on Startup**:
133 |    - Check if pop-up blockers are preventing access.
134 | 3. **Connection Issues on 127.0.0.1**:
135 |    - Ensure you're navigating to `https://127.0.0.1:4000/`.
136 | 
137 | ### Enabling MCP Servers
138 | - Navigate to the assistant configuration panel and enable or configure servers as needed.
139 | - By default, the filesystem and VS Code servers are active. Others, like Bing Search or Giphy, can be enabled manually.
140 | 
141 | ### Limits and Customization
142 | 1. **Maximum Steps Reached**:
143 |    - Expand the assistant's steps by updating the `Maximum Steps` setting in the assistant configuration.
144 | 2. **Folder Not Found**:
145 |    - Verify the path is under `/workspaces`. Adjust permissions if needed.
146 | 
147 | ---
148 | 
149 | ## Additional Resources
150 | 
151 | - [Optimizing for Codespaces](../../.devcontainer/OPTIMIZING_FOR_CODESPACES.md)
152 | - [Workbench App Overview](../../docs/WORKBENCH_APP.md)
153 | - [Setup Developer Environment](../../docs/SETUP_DEV_ENVIRONMENT.md)
154 | - [Assistant Development Guide](../../docs/ASSISTANT_DEVELOPMENT_GUIDE.md)
155 | 
156 | For issues, see the [Semantic Workbench README](../../README.md) or raise a question in the repository.
```
Page 5/145FirstPrevNextLast