atlas-chat 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- atlas/__init__.py +40 -0
- atlas/application/__init__.py +7 -0
- atlas/application/chat/__init__.py +7 -0
- atlas/application/chat/agent/__init__.py +10 -0
- atlas/application/chat/agent/act_loop.py +179 -0
- atlas/application/chat/agent/factory.py +142 -0
- atlas/application/chat/agent/protocols.py +46 -0
- atlas/application/chat/agent/react_loop.py +338 -0
- atlas/application/chat/agent/think_act_loop.py +171 -0
- atlas/application/chat/approval_manager.py +151 -0
- atlas/application/chat/elicitation_manager.py +191 -0
- atlas/application/chat/events/__init__.py +1 -0
- atlas/application/chat/events/agent_event_relay.py +112 -0
- atlas/application/chat/modes/__init__.py +1 -0
- atlas/application/chat/modes/agent.py +125 -0
- atlas/application/chat/modes/plain.py +74 -0
- atlas/application/chat/modes/rag.py +81 -0
- atlas/application/chat/modes/tools.py +179 -0
- atlas/application/chat/orchestrator.py +213 -0
- atlas/application/chat/policies/__init__.py +1 -0
- atlas/application/chat/policies/tool_authorization.py +99 -0
- atlas/application/chat/preprocessors/__init__.py +1 -0
- atlas/application/chat/preprocessors/message_builder.py +92 -0
- atlas/application/chat/preprocessors/prompt_override_service.py +104 -0
- atlas/application/chat/service.py +454 -0
- atlas/application/chat/utilities/__init__.py +6 -0
- atlas/application/chat/utilities/error_handler.py +367 -0
- atlas/application/chat/utilities/event_notifier.py +546 -0
- atlas/application/chat/utilities/file_processor.py +613 -0
- atlas/application/chat/utilities/tool_executor.py +789 -0
- atlas/atlas_chat_cli.py +347 -0
- atlas/atlas_client.py +238 -0
- atlas/core/__init__.py +0 -0
- atlas/core/auth.py +205 -0
- atlas/core/authorization_manager.py +27 -0
- atlas/core/capabilities.py +123 -0
- atlas/core/compliance.py +215 -0
- atlas/core/domain_whitelist.py +147 -0
- atlas/core/domain_whitelist_middleware.py +82 -0
- atlas/core/http_client.py +28 -0
- atlas/core/log_sanitizer.py +102 -0
- atlas/core/metrics_logger.py +59 -0
- atlas/core/middleware.py +131 -0
- atlas/core/otel_config.py +242 -0
- atlas/core/prompt_risk.py +200 -0
- atlas/core/rate_limit.py +0 -0
- atlas/core/rate_limit_middleware.py +64 -0
- atlas/core/security_headers_middleware.py +51 -0
- atlas/domain/__init__.py +37 -0
- atlas/domain/chat/__init__.py +1 -0
- atlas/domain/chat/dtos.py +85 -0
- atlas/domain/errors.py +96 -0
- atlas/domain/messages/__init__.py +12 -0
- atlas/domain/messages/models.py +160 -0
- atlas/domain/rag_mcp_service.py +664 -0
- atlas/domain/sessions/__init__.py +7 -0
- atlas/domain/sessions/models.py +36 -0
- atlas/domain/unified_rag_service.py +371 -0
- atlas/infrastructure/__init__.py +10 -0
- atlas/infrastructure/app_factory.py +135 -0
- atlas/infrastructure/events/__init__.py +1 -0
- atlas/infrastructure/events/cli_event_publisher.py +140 -0
- atlas/infrastructure/events/websocket_publisher.py +140 -0
- atlas/infrastructure/sessions/in_memory_repository.py +56 -0
- atlas/infrastructure/transport/__init__.py +7 -0
- atlas/infrastructure/transport/websocket_connection_adapter.py +33 -0
- atlas/init_cli.py +226 -0
- atlas/interfaces/__init__.py +15 -0
- atlas/interfaces/events.py +134 -0
- atlas/interfaces/llm.py +54 -0
- atlas/interfaces/rag.py +40 -0
- atlas/interfaces/sessions.py +75 -0
- atlas/interfaces/tools.py +57 -0
- atlas/interfaces/transport.py +24 -0
- atlas/main.py +564 -0
- atlas/mcp/api_key_demo/README.md +76 -0
- atlas/mcp/api_key_demo/main.py +172 -0
- atlas/mcp/api_key_demo/run.sh +56 -0
- atlas/mcp/basictable/main.py +147 -0
- atlas/mcp/calculator/main.py +149 -0
- atlas/mcp/code-executor/execution_engine.py +98 -0
- atlas/mcp/code-executor/execution_environment.py +95 -0
- atlas/mcp/code-executor/main.py +528 -0
- atlas/mcp/code-executor/result_processing.py +276 -0
- atlas/mcp/code-executor/script_generation.py +195 -0
- atlas/mcp/code-executor/security_checker.py +140 -0
- atlas/mcp/corporate_cars/main.py +437 -0
- atlas/mcp/csv_reporter/main.py +545 -0
- atlas/mcp/duckduckgo/main.py +182 -0
- atlas/mcp/elicitation_demo/README.md +171 -0
- atlas/mcp/elicitation_demo/main.py +262 -0
- atlas/mcp/env-demo/README.md +158 -0
- atlas/mcp/env-demo/main.py +199 -0
- atlas/mcp/file_size_test/main.py +284 -0
- atlas/mcp/filesystem/main.py +348 -0
- atlas/mcp/image_demo/main.py +113 -0
- atlas/mcp/image_demo/requirements.txt +4 -0
- atlas/mcp/logging_demo/README.md +72 -0
- atlas/mcp/logging_demo/main.py +103 -0
- atlas/mcp/many_tools_demo/main.py +50 -0
- atlas/mcp/order_database/__init__.py +0 -0
- atlas/mcp/order_database/main.py +369 -0
- atlas/mcp/order_database/signal_data.csv +1001 -0
- atlas/mcp/pdfbasic/main.py +394 -0
- atlas/mcp/pptx_generator/main.py +760 -0
- atlas/mcp/pptx_generator/requirements.txt +13 -0
- atlas/mcp/pptx_generator/run_test.sh +1 -0
- atlas/mcp/pptx_generator/test_pptx_generator_security.py +169 -0
- atlas/mcp/progress_demo/main.py +167 -0
- atlas/mcp/progress_updates_demo/QUICKSTART.md +273 -0
- atlas/mcp/progress_updates_demo/README.md +120 -0
- atlas/mcp/progress_updates_demo/main.py +497 -0
- atlas/mcp/prompts/main.py +222 -0
- atlas/mcp/public_demo/main.py +189 -0
- atlas/mcp/sampling_demo/README.md +169 -0
- atlas/mcp/sampling_demo/main.py +234 -0
- atlas/mcp/thinking/main.py +77 -0
- atlas/mcp/tool_planner/main.py +240 -0
- atlas/mcp/ui-demo/badmesh.png +0 -0
- atlas/mcp/ui-demo/main.py +383 -0
- atlas/mcp/ui-demo/templates/button_demo.html +32 -0
- atlas/mcp/ui-demo/templates/data_visualization.html +32 -0
- atlas/mcp/ui-demo/templates/form_demo.html +28 -0
- atlas/mcp/username-override-demo/README.md +320 -0
- atlas/mcp/username-override-demo/main.py +308 -0
- atlas/modules/__init__.py +0 -0
- atlas/modules/config/__init__.py +34 -0
- atlas/modules/config/cli.py +231 -0
- atlas/modules/config/config_manager.py +1096 -0
- atlas/modules/file_storage/__init__.py +22 -0
- atlas/modules/file_storage/cli.py +330 -0
- atlas/modules/file_storage/content_extractor.py +290 -0
- atlas/modules/file_storage/manager.py +295 -0
- atlas/modules/file_storage/mock_s3_client.py +402 -0
- atlas/modules/file_storage/s3_client.py +417 -0
- atlas/modules/llm/__init__.py +19 -0
- atlas/modules/llm/caller.py +287 -0
- atlas/modules/llm/litellm_caller.py +675 -0
- atlas/modules/llm/models.py +19 -0
- atlas/modules/mcp_tools/__init__.py +17 -0
- atlas/modules/mcp_tools/client.py +2123 -0
- atlas/modules/mcp_tools/token_storage.py +556 -0
- atlas/modules/prompts/prompt_provider.py +130 -0
- atlas/modules/rag/__init__.py +24 -0
- atlas/modules/rag/atlas_rag_client.py +336 -0
- atlas/modules/rag/client.py +129 -0
- atlas/routes/admin_routes.py +865 -0
- atlas/routes/config_routes.py +484 -0
- atlas/routes/feedback_routes.py +361 -0
- atlas/routes/files_routes.py +274 -0
- atlas/routes/health_routes.py +40 -0
- atlas/routes/mcp_auth_routes.py +223 -0
- atlas/server_cli.py +164 -0
- atlas/tests/conftest.py +20 -0
- atlas/tests/integration/test_mcp_auth_integration.py +152 -0
- atlas/tests/manual_test_sampling.py +87 -0
- atlas/tests/modules/mcp_tools/test_client_auth.py +226 -0
- atlas/tests/modules/mcp_tools/test_client_env.py +191 -0
- atlas/tests/test_admin_mcp_server_management_routes.py +141 -0
- atlas/tests/test_agent_roa.py +135 -0
- atlas/tests/test_app_factory_smoke.py +47 -0
- atlas/tests/test_approval_manager.py +439 -0
- atlas/tests/test_atlas_client.py +188 -0
- atlas/tests/test_atlas_rag_client.py +447 -0
- atlas/tests/test_atlas_rag_integration.py +224 -0
- atlas/tests/test_attach_file_flow.py +287 -0
- atlas/tests/test_auth_utils.py +165 -0
- atlas/tests/test_backend_public_url.py +185 -0
- atlas/tests/test_banner_logging.py +287 -0
- atlas/tests/test_capability_tokens_and_injection.py +203 -0
- atlas/tests/test_compliance_level.py +54 -0
- atlas/tests/test_compliance_manager.py +253 -0
- atlas/tests/test_config_manager.py +617 -0
- atlas/tests/test_config_manager_paths.py +12 -0
- atlas/tests/test_core_auth.py +18 -0
- atlas/tests/test_core_utils.py +190 -0
- atlas/tests/test_docker_env_sync.py +202 -0
- atlas/tests/test_domain_errors.py +329 -0
- atlas/tests/test_domain_whitelist.py +359 -0
- atlas/tests/test_elicitation_manager.py +408 -0
- atlas/tests/test_elicitation_routing.py +296 -0
- atlas/tests/test_env_demo_server.py +88 -0
- atlas/tests/test_error_classification.py +113 -0
- atlas/tests/test_error_flow_integration.py +116 -0
- atlas/tests/test_feedback_routes.py +333 -0
- atlas/tests/test_file_content_extraction.py +1134 -0
- atlas/tests/test_file_extraction_routes.py +158 -0
- atlas/tests/test_file_library.py +107 -0
- atlas/tests/test_file_manager_unit.py +18 -0
- atlas/tests/test_health_route.py +49 -0
- atlas/tests/test_http_client_stub.py +8 -0
- atlas/tests/test_imports_smoke.py +30 -0
- atlas/tests/test_interfaces_llm_response.py +9 -0
- atlas/tests/test_issue_access_denied_fix.py +136 -0
- atlas/tests/test_llm_env_expansion.py +836 -0
- atlas/tests/test_log_level_sensitive_data.py +285 -0
- atlas/tests/test_mcp_auth_routes.py +341 -0
- atlas/tests/test_mcp_client_auth.py +331 -0
- atlas/tests/test_mcp_data_injection.py +270 -0
- atlas/tests/test_mcp_get_authorized_servers.py +95 -0
- atlas/tests/test_mcp_hot_reload.py +512 -0
- atlas/tests/test_mcp_image_content.py +424 -0
- atlas/tests/test_mcp_logging.py +172 -0
- atlas/tests/test_mcp_progress_updates.py +313 -0
- atlas/tests/test_mcp_prompt_override_system_prompt.py +102 -0
- atlas/tests/test_mcp_prompts_server.py +39 -0
- atlas/tests/test_mcp_tool_result_parsing.py +296 -0
- atlas/tests/test_metrics_logger.py +56 -0
- atlas/tests/test_middleware_auth.py +379 -0
- atlas/tests/test_prompt_risk_and_acl.py +141 -0
- atlas/tests/test_rag_mcp_aggregator.py +204 -0
- atlas/tests/test_rag_mcp_service.py +224 -0
- atlas/tests/test_rate_limit_middleware.py +45 -0
- atlas/tests/test_routes_config_smoke.py +60 -0
- atlas/tests/test_routes_files_download_token.py +41 -0
- atlas/tests/test_routes_files_health.py +18 -0
- atlas/tests/test_runtime_imports.py +53 -0
- atlas/tests/test_sampling_integration.py +482 -0
- atlas/tests/test_security_admin_routes.py +61 -0
- atlas/tests/test_security_capability_tokens.py +65 -0
- atlas/tests/test_security_file_stats_scope.py +21 -0
- atlas/tests/test_security_header_injection.py +191 -0
- atlas/tests/test_security_headers_and_filename.py +63 -0
- atlas/tests/test_shared_session_repository.py +101 -0
- atlas/tests/test_system_prompt_loading.py +181 -0
- atlas/tests/test_token_storage.py +505 -0
- atlas/tests/test_tool_approval_config.py +93 -0
- atlas/tests/test_tool_approval_utils.py +356 -0
- atlas/tests/test_tool_authorization_group_filtering.py +223 -0
- atlas/tests/test_tool_details_in_config.py +108 -0
- atlas/tests/test_tool_planner.py +300 -0
- atlas/tests/test_unified_rag_service.py +398 -0
- atlas/tests/test_username_override_in_approval.py +258 -0
- atlas/tests/test_websocket_auth_header.py +168 -0
- atlas/version.py +6 -0
- atlas_chat-0.1.0.data/data/.env.example +253 -0
- atlas_chat-0.1.0.data/data/config/defaults/compliance-levels.json +44 -0
- atlas_chat-0.1.0.data/data/config/defaults/domain-whitelist.json +123 -0
- atlas_chat-0.1.0.data/data/config/defaults/file-extractors.json +74 -0
- atlas_chat-0.1.0.data/data/config/defaults/help-config.json +198 -0
- atlas_chat-0.1.0.data/data/config/defaults/llmconfig-buggy.yml +11 -0
- atlas_chat-0.1.0.data/data/config/defaults/llmconfig.yml +19 -0
- atlas_chat-0.1.0.data/data/config/defaults/mcp.json +138 -0
- atlas_chat-0.1.0.data/data/config/defaults/rag-sources.json +17 -0
- atlas_chat-0.1.0.data/data/config/defaults/splash-config.json +16 -0
- atlas_chat-0.1.0.dist-info/METADATA +236 -0
- atlas_chat-0.1.0.dist-info/RECORD +250 -0
- atlas_chat-0.1.0.dist-info/WHEEL +5 -0
- atlas_chat-0.1.0.dist-info/entry_points.txt +4 -0
- atlas_chat-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Help & Documentation",
|
|
3
|
+
"sections": [
|
|
4
|
+
{
|
|
5
|
+
"id": "quick-start",
|
|
6
|
+
"type": "section",
|
|
7
|
+
"title": "Quick Start",
|
|
8
|
+
"icon": "zap",
|
|
9
|
+
"iconColor": "blue-400",
|
|
10
|
+
"description": "Welcome to the Chat UI! This application provides an advanced chat interface with AI models, enhanced by powerful tools and data sources.",
|
|
11
|
+
"layout": "cards-grid",
|
|
12
|
+
"cards": [
|
|
13
|
+
{
|
|
14
|
+
"title": "Start a New Chat",
|
|
15
|
+
"content": "Click \"New Chat\" button or press Ctrl+Alt+N",
|
|
16
|
+
"hasKeyboard": true,
|
|
17
|
+
"keyboardShortcut": "Ctrl+Alt+N"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"title": "Access Tools",
|
|
21
|
+
"content": "Click the Settings icon in the header to open the tools panel",
|
|
22
|
+
"hasIcon": true,
|
|
23
|
+
"iconName": "settings"
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "core-features",
|
|
29
|
+
"type": "section",
|
|
30
|
+
"title": "Core Features",
|
|
31
|
+
"icon": "message-square",
|
|
32
|
+
"iconColor": "green-400",
|
|
33
|
+
"layout": "feature-list",
|
|
34
|
+
"features": [
|
|
35
|
+
{
|
|
36
|
+
"title": "RAG (Retrieval-Augmented Generation)",
|
|
37
|
+
"icon": "database",
|
|
38
|
+
"iconColor": "blue-400",
|
|
39
|
+
"borderColor": "blue-400",
|
|
40
|
+
"description": "Connect your chats to external data sources for enhanced, context-aware responses.",
|
|
41
|
+
"bullets": [
|
|
42
|
+
"Click the menu icon to open data sources panel",
|
|
43
|
+
"Select which documents/databases to include in your conversation",
|
|
44
|
+
"Toggle \"RAG Only\" mode to query only your documents without LLM processing",
|
|
45
|
+
"View source attribution to see which documents informed the response"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"title": "Tools & MCP Servers",
|
|
50
|
+
"icon": "settings",
|
|
51
|
+
"iconColor": "green-400",
|
|
52
|
+
"borderColor": "green-400",
|
|
53
|
+
"description": "Extend AI capabilities with specialized tools through Model Context Protocol (MCP) servers.",
|
|
54
|
+
"bullets": [
|
|
55
|
+
"Click the Settings icon to view available tools",
|
|
56
|
+
"Built-in tools include file operations, calculations, and UI demos",
|
|
57
|
+
"Tools can create interactive content in the Canvas panel",
|
|
58
|
+
"Select specific tools in the marketplace for personalized experience"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"title": "MCP Store/Marketplace",
|
|
63
|
+
"icon": "store",
|
|
64
|
+
"iconColor": "purple-400",
|
|
65
|
+
"borderColor": "purple-400",
|
|
66
|
+
"description": "Browse and select MCP servers that provide different capabilities.",
|
|
67
|
+
"bullets": [
|
|
68
|
+
"Navigate to /marketplace to browse available servers",
|
|
69
|
+
"Select which MCP servers you want to use in your chats",
|
|
70
|
+
"Each server provides specific tools and functionalities",
|
|
71
|
+
"Your selections are saved and persist across sessions"
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "tips-best-practices",
|
|
78
|
+
"type": "section",
|
|
79
|
+
"title": "Tips & Best Practices",
|
|
80
|
+
"icon": "alert-triangle",
|
|
81
|
+
"iconColor": "yellow-400",
|
|
82
|
+
"layout": "tip-cards",
|
|
83
|
+
"tips": [
|
|
84
|
+
{
|
|
85
|
+
"title": "Starting Fresh Conversations",
|
|
86
|
+
"content": "For best results, start a new chat session when switching to a completely different topic. This prevents context confusion and ensures cleaner responses."
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"title": "Handling Errors",
|
|
90
|
+
"content": "If you encounter errors or unexpected behavior, restart your chat session using the \"New Chat\" button. This clears the conversation history and resets the context."
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"title": "Keyboard Shortcuts",
|
|
94
|
+
"content": "Learn these helpful shortcuts to improve your workflow.",
|
|
95
|
+
"shortcuts": [
|
|
96
|
+
{"key": "Ctrl+Alt+N", "description": "Start new chat"},
|
|
97
|
+
{"key": "Enter", "description": "Send message"},
|
|
98
|
+
{"key": "Shift+Enter", "description": "New line in message"}
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"id": "technical-docs",
|
|
105
|
+
"type": "section",
|
|
106
|
+
"title": "Technical Documentation",
|
|
107
|
+
"icon": "code",
|
|
108
|
+
"iconColor": "orange-400",
|
|
109
|
+
"layout": "technical",
|
|
110
|
+
"subsections": [
|
|
111
|
+
{
|
|
112
|
+
"title": "Building Your Own MCP Server",
|
|
113
|
+
"borderColor": "orange-400",
|
|
114
|
+
"description": "Create custom tools and functionality by developing your own MCP servers.",
|
|
115
|
+
"content": [
|
|
116
|
+
{
|
|
117
|
+
"type": "subsection",
|
|
118
|
+
"title": "Special Return Types",
|
|
119
|
+
"bullets": [
|
|
120
|
+
{"code": "returned_files", "description": "Return files for Canvas rendering (HTML, images, PDFs, text)"},
|
|
121
|
+
{"code": "file_path", "description": "Reference files for download/display"},
|
|
122
|
+
{"code": "content", "description": "Standard text response"},
|
|
123
|
+
{"code": "success", "description": "Boolean indicating operation success"}
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"type": "code-example",
|
|
128
|
+
"title": "Returned Files Example",
|
|
129
|
+
"language": "json",
|
|
130
|
+
"code": "{\n \"content\": \"Created interactive chart\",\n \"returned_files\": [{\n \"filename\": \"chart.html\",\n \"content_base64\": \"PGRpdj5Zb3VyIEhUTUwgaGVyZTwvZGl2Pg==\"\n }],\n \"success\": true\n}"
|
|
131
|
+
}
|
|
132
|
+
]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"title": "UI Modification & Custom Prompts",
|
|
136
|
+
"borderColor": "cyan-400",
|
|
137
|
+
"description": "Advanced customization options for developers.",
|
|
138
|
+
"bullets": [
|
|
139
|
+
"MCP servers can return files (HTML, images, PDFs, text) that render in the Canvas panel",
|
|
140
|
+
"All HTML is sanitized for security using DOMPurify",
|
|
141
|
+
"JavaScript is supported for interactive elements",
|
|
142
|
+
"Use custom prompts to modify AI behavior",
|
|
143
|
+
"Create specialized tools for domain-specific tasks"
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"title": "Development Resources",
|
|
148
|
+
"type": "resource-card",
|
|
149
|
+
"resources": [
|
|
150
|
+
{"file": "docs/mcp-development.md", "description": "Comprehensive MCP development guide"},
|
|
151
|
+
{"file": "docs/advanced-features.md", "description": "Advanced features and examples"},
|
|
152
|
+
{"file": "docs/configuration.md", "description": "Configuration options"},
|
|
153
|
+
{"file": "backend/mcp/", "description": "Example MCP server implementations"}
|
|
154
|
+
]
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "agent-mode",
|
|
160
|
+
"type": "section",
|
|
161
|
+
"title": "Agent Mode",
|
|
162
|
+
"icon": "bot",
|
|
163
|
+
"iconColor": "gradient",
|
|
164
|
+
"gradientFrom": "blue-400",
|
|
165
|
+
"gradientTo": "purple-600",
|
|
166
|
+
"layout": "simple",
|
|
167
|
+
"description": "Agent mode enables multi-step reasoning where the AI breaks down complex tasks into manageable steps.",
|
|
168
|
+
"features": [
|
|
169
|
+
"Step-by-step task breakdown and execution",
|
|
170
|
+
"Visual progress tracking",
|
|
171
|
+
"Integration with MCP tools during reasoning",
|
|
172
|
+
"Ability to interrupt the reasoning process"
|
|
173
|
+
],
|
|
174
|
+
"note": "Agent mode availability depends on your configuration. Check with your administrator if this feature is not visible."
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"id": "support",
|
|
178
|
+
"type": "section",
|
|
179
|
+
"title": "Need More Help?",
|
|
180
|
+
"icon": "file-text",
|
|
181
|
+
"iconColor": "gray-400",
|
|
182
|
+
"layout": "support-cards",
|
|
183
|
+
"description": "For additional information and detailed guides:",
|
|
184
|
+
"cards": [
|
|
185
|
+
{
|
|
186
|
+
"title": "Documentation",
|
|
187
|
+
"content": "Check the docs/ folder for comprehensive guides on setup, configuration, and development.",
|
|
188
|
+
"code": "docs/"
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"title": "Configuration",
|
|
192
|
+
"content": "Refer to .env.example and configuration documentation for customization options.",
|
|
193
|
+
"code": ".env.example"
|
|
194
|
+
}
|
|
195
|
+
]
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
models:
|
|
2
|
+
mock-llm-rate-limited:
|
|
3
|
+
model_url: "http://127.0.0.1:8002/v1"
|
|
4
|
+
model_name: "openai/mock-model"
|
|
5
|
+
api_key: "dummy-key" # Not used by mock server
|
|
6
|
+
description: "Mock LLM server with rate limiting and error simulation for testing"
|
|
7
|
+
compliance_level: "Internal"
|
|
8
|
+
# Extra configuration for this mock server
|
|
9
|
+
max_retries: 3
|
|
10
|
+
retry_delay: 1.0
|
|
11
|
+
timeout_seconds: 30
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
models:
|
|
2
|
+
gpt-4.1:
|
|
3
|
+
model_url: "https://api.openai.com/v1/chat/completions"
|
|
4
|
+
model_name: "gpt-4.1"
|
|
5
|
+
api_key: "${OPENAI_API_KEY}"
|
|
6
|
+
compliance_level: "External"
|
|
7
|
+
gpt-4.1-nano:
|
|
8
|
+
model_url: "https://api.openai.com/v1/chat/completions"
|
|
9
|
+
model_name: "gpt-4.1-nano"
|
|
10
|
+
api_key: "${OPENAI_API_KEY}"
|
|
11
|
+
compliance_level: "External"
|
|
12
|
+
openrouter-gpt-4o:
|
|
13
|
+
model_url: "https://openrouter.ai/api/v1/chat/completions"
|
|
14
|
+
model_name: "openai/gpt-oss-120b"
|
|
15
|
+
api_key: "${OPENROUTER_API_KEY}"
|
|
16
|
+
description: "OpenRouter openai oss-120b"
|
|
17
|
+
compliance_level: "External"
|
|
18
|
+
extra_headers:
|
|
19
|
+
X-Title: "chat-11"
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
{
|
|
2
|
+
"calculator": {
|
|
3
|
+
"command": [
|
|
4
|
+
"python",
|
|
5
|
+
"mcp/calculator/main.py"
|
|
6
|
+
],
|
|
7
|
+
"cwd": "atlas",
|
|
8
|
+
"groups": [
|
|
9
|
+
"users"
|
|
10
|
+
],
|
|
11
|
+
"description": "Evaluate mathematical expressions, perform calculations with basic arithmetic, trigonometry, and logarithms",
|
|
12
|
+
"author": "Chat UI Team",
|
|
13
|
+
"short_description": "Mathematical calculator",
|
|
14
|
+
"help_email": "support@chatui.example.com",
|
|
15
|
+
"compliance_level": "Public"
|
|
16
|
+
},
|
|
17
|
+
"thinking": {
|
|
18
|
+
"command": [
|
|
19
|
+
"python",
|
|
20
|
+
"mcp/thinking/main.py"
|
|
21
|
+
],
|
|
22
|
+
"cwd": "atlas",
|
|
23
|
+
"groups": [
|
|
24
|
+
"users"
|
|
25
|
+
],
|
|
26
|
+
"description": "Structured thinking and problem analysis tool",
|
|
27
|
+
"author": "Chat UI Team",
|
|
28
|
+
"short_description": "Structured problem analysis",
|
|
29
|
+
"help_email": "support@chatui.example.com",
|
|
30
|
+
"compliance_level": "Public"
|
|
31
|
+
},
|
|
32
|
+
"pdfbasic": {
|
|
33
|
+
"command": [
|
|
34
|
+
"python",
|
|
35
|
+
"mcp/pdfbasic/main.py"
|
|
36
|
+
],
|
|
37
|
+
"cwd": "atlas",
|
|
38
|
+
"groups": [
|
|
39
|
+
"users"
|
|
40
|
+
],
|
|
41
|
+
"description": "Extract and analyze text content from PDF documents, search within PDFs, and summarize content",
|
|
42
|
+
"author": "Chat UI Team",
|
|
43
|
+
"short_description": "PDF text extraction and analysis",
|
|
44
|
+
"help_email": "support@chatui.example.com",
|
|
45
|
+
"compliance_level": "SOC2"
|
|
46
|
+
},
|
|
47
|
+
"ui-demo": {
|
|
48
|
+
"command": [
|
|
49
|
+
"python",
|
|
50
|
+
"mcp/ui-demo/main.py"
|
|
51
|
+
],
|
|
52
|
+
"cwd": "atlas",
|
|
53
|
+
"groups": [
|
|
54
|
+
"users"
|
|
55
|
+
],
|
|
56
|
+
"description": "Demo server showcasing custom UI modification capabilities",
|
|
57
|
+
"author": "Chat UI Team",
|
|
58
|
+
"short_description": "UI customization demo",
|
|
59
|
+
"help_email": "support@chatui.example.com",
|
|
60
|
+
"compliance_level": "Public"
|
|
61
|
+
},
|
|
62
|
+
"code-executor": {
|
|
63
|
+
"command": [
|
|
64
|
+
"python",
|
|
65
|
+
"mcp/code-executor/main.py"
|
|
66
|
+
],
|
|
67
|
+
"cwd": "atlas",
|
|
68
|
+
"groups": [
|
|
69
|
+
"users"
|
|
70
|
+
],
|
|
71
|
+
"description": "Execute Python, JavaScript, and other code snippets in a secure sandboxed environment with safety validation",
|
|
72
|
+
"author": "Chat UI Team",
|
|
73
|
+
"short_description": "Secure code execution sandbox",
|
|
74
|
+
"help_email": "support@chatui.example.com",
|
|
75
|
+
"compliance_level": "SOC2"
|
|
76
|
+
},
|
|
77
|
+
"prompts": {
|
|
78
|
+
"command": [
|
|
79
|
+
"python",
|
|
80
|
+
"mcp/prompts/main.py"
|
|
81
|
+
],
|
|
82
|
+
"cwd": "atlas",
|
|
83
|
+
"groups": [
|
|
84
|
+
"users"
|
|
85
|
+
],
|
|
86
|
+
"description": "Specialized system prompts for AI behavior modification",
|
|
87
|
+
"author": "Chat UI Team",
|
|
88
|
+
"short_description": "AI behavior prompts",
|
|
89
|
+
"help_email": "support@chatui.example.com",
|
|
90
|
+
"compliance_level": "Public"
|
|
91
|
+
},
|
|
92
|
+
"env-demo": {
|
|
93
|
+
"command": [
|
|
94
|
+
"python",
|
|
95
|
+
"mcp/env-demo/main.py"
|
|
96
|
+
],
|
|
97
|
+
"cwd": "atlas",
|
|
98
|
+
"env": {
|
|
99
|
+
"CLOUD_PROFILE": "demo-profile",
|
|
100
|
+
"CLOUD_REGION": "us-west-2",
|
|
101
|
+
"DEBUG_MODE": "true",
|
|
102
|
+
"ENVIRONMENT": "development",
|
|
103
|
+
"API_KEY": "${DEMO_API_KEY}"
|
|
104
|
+
},
|
|
105
|
+
"groups": [
|
|
106
|
+
"users"
|
|
107
|
+
],
|
|
108
|
+
"description": "Demonstrates environment variable passing to MCP servers. Shows how to configure servers with env vars in mcp.json using both literal values and ${VAR} substitution.",
|
|
109
|
+
"author": "Chat UI Team",
|
|
110
|
+
"short_description": "Environment variable demonstration",
|
|
111
|
+
"help_email": "support@chatui.example.com",
|
|
112
|
+
"compliance_level": "Public"
|
|
113
|
+
},
|
|
114
|
+
"external-api-example": {
|
|
115
|
+
"url": "http://127.0.0.1:8005/mcp",
|
|
116
|
+
"transport": "http",
|
|
117
|
+
"groups": [
|
|
118
|
+
"users"
|
|
119
|
+
],
|
|
120
|
+
"description": "Mock HTTP MCP server for testing authentication",
|
|
121
|
+
"auth_token": "${MCP_EXTERNAL_API_TOKEN}"
|
|
122
|
+
},
|
|
123
|
+
"many_tools_demo": {
|
|
124
|
+
"command": [
|
|
125
|
+
"python",
|
|
126
|
+
"mcp/many_tools_demo/main.py"
|
|
127
|
+
],
|
|
128
|
+
"cwd": "atlas",
|
|
129
|
+
"groups": [
|
|
130
|
+
"users"
|
|
131
|
+
],
|
|
132
|
+
"description": "Demo server with 64 tools to test UI scalability with large numbers of tools. Includes operations for data, analytics, files, network, system, database, security, and reporting.",
|
|
133
|
+
"author": "Chat UI Team",
|
|
134
|
+
"short_description": "Large tool set demo (64 tools)",
|
|
135
|
+
"help_email": "support@chatui.example.com",
|
|
136
|
+
"compliance_level": "Public"
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"corporate_cars": {
|
|
3
|
+
"type": "mcp",
|
|
4
|
+
"display_name": "Corporate Cars",
|
|
5
|
+
"description": "Fleet RAG server: discover resources and retrieve locations/meta-data for corporate cars in use by employees.",
|
|
6
|
+
"icon": "car",
|
|
7
|
+
"command": [
|
|
8
|
+
"python",
|
|
9
|
+
"mcp/corporate_cars/main.py"
|
|
10
|
+
],
|
|
11
|
+
"cwd": "atlas",
|
|
12
|
+
"groups": [
|
|
13
|
+
"users"
|
|
14
|
+
],
|
|
15
|
+
"compliance_level": "SOC2"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"enabled": false,
|
|
3
|
+
"title": "Welcome to Chat UI",
|
|
4
|
+
"messages": [
|
|
5
|
+
{
|
|
6
|
+
"type": "text",
|
|
7
|
+
"content": "Welcome! Please review our policies before continuing."
|
|
8
|
+
}
|
|
9
|
+
],
|
|
10
|
+
"dismissible": true,
|
|
11
|
+
"require_accept": false,
|
|
12
|
+
"dismiss_duration_days": 30,
|
|
13
|
+
"accept_button_text": "Accept",
|
|
14
|
+
"dismiss_button_text": "Dismiss",
|
|
15
|
+
"show_on_every_visit": false
|
|
16
|
+
}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: atlas-chat
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Full-stack LLM chat interface with Model Context Protocol (MCP) integration
|
|
5
|
+
Author: Sandia National Laboratories
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/sandialabs/atlas
|
|
8
|
+
Project-URL: Documentation, https://github.com/sandialabs/atlas/tree/main/docs
|
|
9
|
+
Project-URL: Repository, https://github.com/sandialabs/atlas
|
|
10
|
+
Project-URL: Issues, https://github.com/sandialabs/atlas/issues
|
|
11
|
+
Keywords: llm,chat,mcp,ai,anthropic,openai,gemini
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
Requires-Dist: beautifulsoup4
|
|
23
|
+
Requires-Dist: boto3>=1.34.0
|
|
24
|
+
Requires-Dist: bs4
|
|
25
|
+
Requires-Dist: cryptography
|
|
26
|
+
Requires-Dist: duckduckgo-search
|
|
27
|
+
Requires-Dist: fastapi
|
|
28
|
+
Requires-Dist: fastmcp>=2.10.0
|
|
29
|
+
Requires-Dist: httpx
|
|
30
|
+
Requires-Dist: litellm
|
|
31
|
+
Requires-Dist: matplotlib
|
|
32
|
+
Requires-Dist: numpy
|
|
33
|
+
Requires-Dist: openpyxl
|
|
34
|
+
Requires-Dist: opentelemetry-api
|
|
35
|
+
Requires-Dist: opentelemetry-exporter-otlp
|
|
36
|
+
Requires-Dist: opentelemetry-instrumentation-fastapi
|
|
37
|
+
Requires-Dist: opentelemetry-instrumentation-httpx
|
|
38
|
+
Requires-Dist: opentelemetry-instrumentation-logging
|
|
39
|
+
Requires-Dist: opentelemetry-sdk
|
|
40
|
+
Requires-Dist: pandas
|
|
41
|
+
Requires-Dist: pydantic
|
|
42
|
+
Requires-Dist: PyJWT
|
|
43
|
+
Requires-Dist: PyPDF2
|
|
44
|
+
Requires-Dist: python-dotenv
|
|
45
|
+
Requires-Dist: python-multipart
|
|
46
|
+
Requires-Dist: python-pptx
|
|
47
|
+
Requires-Dist: pyyaml
|
|
48
|
+
Requires-Dist: reportlab
|
|
49
|
+
Requires-Dist: requests
|
|
50
|
+
Requires-Dist: scikit-learn
|
|
51
|
+
Requires-Dist: scipy
|
|
52
|
+
Requires-Dist: seaborn
|
|
53
|
+
Requires-Dist: uvicorn[standard]
|
|
54
|
+
Requires-Dist: websockets
|
|
55
|
+
Provides-Extra: dev
|
|
56
|
+
Requires-Dist: pytest; extra == "dev"
|
|
57
|
+
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
58
|
+
Requires-Dist: pytest-mock; extra == "dev"
|
|
59
|
+
Requires-Dist: ruff; extra == "dev"
|
|
60
|
+
|
|
61
|
+
# Atlas UI 3
|
|
62
|
+
|
|
63
|
+
[](https://github.com/sandialabs/atlas-ui-3/actions/workflows/ci.yml)
|
|
64
|
+
[](https://github.com/sandialabs/atlas-ui-3/actions/workflows/security.yml)
|
|
65
|
+
[](https://github.com/sandialabs/atlas-ui-3/pkgs/container/atlas-ui-3)
|
|
66
|
+
[](https://badge.fury.io/py/atlas-chat)
|
|
67
|
+

|
|
68
|
+

|
|
69
|
+

|
|
70
|
+
|
|
71
|
+
Atlas UI 3 is a secure chat application with MCP (Model Context Protocol) integration, developed by Sandia National Laboratories -- a U.S. Department of Energy national laboratory -- to support U.S. Government customers.
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+

|
|
76
|
+
|
|
77
|
+
## About the Project
|
|
78
|
+
|
|
79
|
+
**Atlas UI 3** is a full-stack LLM chat interface that supports multiple AI models, including those from OpenAI, Anthropic, and Google. Its core feature is the integration with the Model Context Protocol (MCP), which allows the AI assistant to connect to external tools and data sources, enabling complex, real-time workflows.
|
|
80
|
+
|
|
81
|
+
### Features
|
|
82
|
+
|
|
83
|
+
* **Multi-LLM Support**: Connect to various LLM providers.
|
|
84
|
+
* **MCP Integration**: Extend the AI's capabilities with custom tools.
|
|
85
|
+
* **RAG Support**: Enhance responses with Retrieval-Augmented Generation.
|
|
86
|
+
* **Secure and Configurable**: Features group-based access control, compliance levels, and a tool approval system.
|
|
87
|
+
* **Modern Stack**: Built with React 19, FastAPI, and WebSockets.
|
|
88
|
+
* **Python Package**: Install and use as a library or CLI tool.
|
|
89
|
+
|
|
90
|
+
## Installation
|
|
91
|
+
|
|
92
|
+
### Install from PyPI (Recommended for Users)
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# Install the package
|
|
96
|
+
pip install atlas-chat
|
|
97
|
+
|
|
98
|
+
# Or with uv (faster)
|
|
99
|
+
uv pip install atlas-chat
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### CLI Usage
|
|
103
|
+
|
|
104
|
+
After installation, three CLI tools are available:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Set up configuration (run this first!)
|
|
108
|
+
atlas-init # Creates .env and config/ in current directory
|
|
109
|
+
atlas-init --minimal # Creates just a minimal .env file
|
|
110
|
+
|
|
111
|
+
# Chat with an LLM
|
|
112
|
+
atlas-chat "Hello, how are you?" --model gpt-4o
|
|
113
|
+
atlas-chat "Use the search tool" --tools server_tool1
|
|
114
|
+
atlas-chat --list-tools
|
|
115
|
+
|
|
116
|
+
# Start the server
|
|
117
|
+
atlas-server --port 8000
|
|
118
|
+
atlas-server --env /path/to/.env --config-folder /path/to/config
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Python API Usage
|
|
122
|
+
|
|
123
|
+
```python
|
|
124
|
+
from atlas import AtlasClient, ChatResult
|
|
125
|
+
|
|
126
|
+
# Async usage
|
|
127
|
+
client = AtlasClient()
|
|
128
|
+
result = await client.chat("Hello, how are you?")
|
|
129
|
+
print(result.message)
|
|
130
|
+
|
|
131
|
+
# With options
|
|
132
|
+
result = await client.chat(
|
|
133
|
+
"Analyze this data",
|
|
134
|
+
model="gpt-4o",
|
|
135
|
+
selected_tools=["calculator", "search"],
|
|
136
|
+
agent_mode=True
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
# Sync wrapper
|
|
140
|
+
result = client.chat_sync("Hello!")
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Quick Start (Development)
|
|
144
|
+
|
|
145
|
+
### Prerequisites
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# Install uv package manager (one-time)
|
|
149
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
150
|
+
|
|
151
|
+
# Create virtual environment and install dependencies
|
|
152
|
+
uv venv && source .venv/bin/activate
|
|
153
|
+
uv pip install -r requirements.txt
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Development Installation (Editable Mode)
|
|
157
|
+
|
|
158
|
+
For development, install the package in **editable mode**. This creates a link from your Python environment to your local source code, so any changes you make to the code are immediately available without reinstalling.
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Install in editable mode with uv (recommended)
|
|
162
|
+
uv pip install -e .
|
|
163
|
+
|
|
164
|
+
# Or with pip
|
|
165
|
+
pip install -e .
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**What editable mode gives you:**
|
|
169
|
+
- Edit any Python file in `atlas/` and changes take effect immediately
|
|
170
|
+
- CLI commands (`atlas-chat`, `atlas-server`) use your local code
|
|
171
|
+
- Import `from atlas import AtlasClient` in scripts and get your local version
|
|
172
|
+
- No need to reinstall after making changes
|
|
173
|
+
|
|
174
|
+
**Example workflow:**
|
|
175
|
+
```bash
|
|
176
|
+
# Install once in editable mode
|
|
177
|
+
uv pip install -e .
|
|
178
|
+
|
|
179
|
+
# Edit code
|
|
180
|
+
vim atlas/atlas_client.py
|
|
181
|
+
|
|
182
|
+
# Run immediately with your changes - no reinstall needed
|
|
183
|
+
atlas-chat "test my changes"
|
|
184
|
+
python my_script.py # uses updated AtlasClient
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Alternative: PYTHONPATH (if you can't use editable install)**
|
|
188
|
+
```bash
|
|
189
|
+
# Set PYTHONPATH manually when running
|
|
190
|
+
PYTHONPATH=/path/to/atlas-ui-3 python atlas/main.py
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Running the Application
|
|
194
|
+
|
|
195
|
+
**Linux/macOS:**
|
|
196
|
+
```bash
|
|
197
|
+
bash agent_start.sh
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Windows:**
|
|
201
|
+
```powershell
|
|
202
|
+
.\ps_agent_start.ps1
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Note for Windows users**: If you encounter frontend build errors related to Rollup dependencies, delete `frontend/package-lock.json` and `frontend/node_modules`, then run the script again.
|
|
206
|
+
|
|
207
|
+
Both scripts automatically detect and work with Docker or Podman. The `agent_start.sh` script builds the frontend, starts necessary services, and launches the backend server.
|
|
208
|
+
|
|
209
|
+
## Documentation
|
|
210
|
+
|
|
211
|
+
We have created a set of comprehensive guides to help you get the most out of Atlas UI 3.
|
|
212
|
+
|
|
213
|
+
* **[Getting Started](./docs/getting-started/installation.md)**: The perfect starting point for all users. This guide covers how to get the application running with Docker or on your local machine.
|
|
214
|
+
|
|
215
|
+
* **[Administrator's Guide](./docs/admin/README.md)**: For those who will deploy and manage the application. This guide details configuration, security settings, access control, and other operational topics.
|
|
216
|
+
|
|
217
|
+
* **[Developer's Guide](./docs/developer/README.md)**: For developers who want to contribute to the project. It provides an overview of the architecture and instructions for creating new MCP servers.
|
|
218
|
+
|
|
219
|
+
## Container Images
|
|
220
|
+
|
|
221
|
+
Pre-built container images are available at `quay.io/agarlan-snl/atlas-ui-3:latest` (pushes automatically from main branch).
|
|
222
|
+
|
|
223
|
+
## For AI Agent Contributors
|
|
224
|
+
|
|
225
|
+
If you are an AI agent working on this repository, please refer to the following documents for the most current and concise guidance:
|
|
226
|
+
|
|
227
|
+
* **[CLAUDE.md](./CLAUDE.md)**: Detailed architecture, workflows, and conventions.
|
|
228
|
+
* **[GEMINI.md](./GEMINI.md)**: Gemini-specific instructions.
|
|
229
|
+
* **[.github/copilot-instructions.md](./.github/copilot-instructions.md)**: A compact guide for getting productive quickly.
|
|
230
|
+
|
|
231
|
+
## License
|
|
232
|
+
|
|
233
|
+
Copyright 2025 National Technology & Engineering Solutions of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the U.S. Government retains certain rights in this software
|
|
234
|
+
|
|
235
|
+
MIT License
|
|
236
|
+
|