When generating a project with a company name containing dots (e.g.,
'Demo.App.QoL'), the template replacement was incorrectly camelCasing
the company name as 'demo.App' instead of 'demo.app'.
This was because SolutionRenamer used ToCamelCase() on the entire string
rather than on each dot-separated segment individually. The runtime JS
proxy generator (JQueryProxyScriptGenerator.CamelCaseWithNamespace) applies
camelCase to each segment, causing a mismatch.
Added ToCamelCaseWithNamespace() helper to match runtime behavior.
Enhanced InstallLibsService to detect and handle JavaScript frameworks (React Native, React, Vue, Next.js) by parsing package.json and running yarn accordingly. Updated project discovery to include these frameworks while avoiding overlap with Angular and .NET projects.
Refactored GetOrAddMany and GetOrAddManyAsync in DistributedCache to ensure returned key-value pairs are correctly mapped by key, regardless of order from the factory. Added unit tests to verify correct mapping and concurrency behavior.
Updated ChatClientAccessor and TypedChatClient to fallback to the default chat client if a workspace-specific client is not configured. Adjusted tests to verify that the default chat client is resolved for non-configured workspaces.
Set default 'Type' property in McpToolInputSchema and pass the schema object directly instead of building a dictionary. Use camelCase JSON serialization for input schemas in McpServerService to ensure correct property naming.
Removed special-case handling for MCP commands in CommandSelector and HelpCommand to simplify logic. In McpHttpClientService, reorganized private methods and classes for better code structure and maintainability. Made ConvertProperties static in McpServerService and clarified comments regarding MCP JSON schema requirements.