Skip to content

Develop#392

Closed
ucswift wants to merge 8 commits into
masterfrom
develop
Closed

Develop#392
ucswift wants to merge 8 commits into
masterfrom
develop

Conversation

@ucswift
Copy link
Copy Markdown
Member

@ucswift ucswift commented May 31, 2026

No description provided.

@request-info
Copy link
Copy Markdown

request-info Bot commented May 31, 2026

Thanks for opening this, but we'd appreciate a little more information. Could you update it with more details?

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 31, 2026

Important

Review skipped

Too many files!

This PR contains 167 files, which is 17 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 7d1c9b02-87b3-4297-9654-2c1344c42485

📥 Commits

Reviewing files that changed from the base of the PR and between c439d23 and 5b2faf9.

⛔ Files ignored due to path filters (10)
  • Core/Resgrid.Localization/Areas/User/Department/Department.ar.resx is excluded by !**/*.resx
  • Core/Resgrid.Localization/Areas/User/Department/Department.de.resx is excluded by !**/*.resx
  • Core/Resgrid.Localization/Areas/User/Department/Department.en.resx is excluded by !**/*.resx
  • Core/Resgrid.Localization/Areas/User/Department/Department.es.resx is excluded by !**/*.resx
  • Core/Resgrid.Localization/Areas/User/Department/Department.fr.resx is excluded by !**/*.resx
  • Core/Resgrid.Localization/Areas/User/Department/Department.it.resx is excluded by !**/*.resx
  • Core/Resgrid.Localization/Areas/User/Department/Department.pl.resx is excluded by !**/*.resx
  • Core/Resgrid.Localization/Areas/User/Department/Department.sv.resx is excluded by !**/*.resx
  • Core/Resgrid.Localization/Areas/User/Department/Department.uk.resx is excluded by !**/*.resx
  • Web/Resgrid.Web/Areas/User/Apps/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (167)
  • .claude/settings.local.json
  • .coderabbit.yaml
  • .gitignore
  • CONTEXT.md
  • Core/Resgrid.Chatbot.NLU/NLUModule.cs
  • Core/Resgrid.Chatbot.NLU/Providers/KeywordIntentClassifier.cs
  • Core/Resgrid.Chatbot.NLU/Providers/MLNetNluProvider.cs
  • Core/Resgrid.Chatbot.NLU/Providers/OpenAiCompatibleNluProvider.cs
  • Core/Resgrid.Chatbot.NLU/Resgrid.Chatbot.NLU.csproj
  • Core/Resgrid.Chatbot.NLU/Services/EntityExtractor.cs
  • Core/Resgrid.Chatbot/ChatbotModule.cs
  • Core/Resgrid.Chatbot/Config/ChatbotConfig.cs
  • Core/Resgrid.Chatbot/Handlers/CalendarActionHandler.cs
  • Core/Resgrid.Chatbot/Handlers/CalendarRsvpHandler.cs
  • Core/Resgrid.Chatbot/Handlers/CallDetailActionHandler.cs
  • Core/Resgrid.Chatbot/Handlers/CallsActionHandler.cs
  • Core/Resgrid.Chatbot/Handlers/CloseCallHandler.cs
  • Core/Resgrid.Chatbot/Handlers/DepartmentActionHandler.cs
  • Core/Resgrid.Chatbot/Handlers/DispatchCallHandler.cs
  • Core/Resgrid.Chatbot/Handlers/HelpActionHandler.cs
  • Core/Resgrid.Chatbot/Handlers/MessageDeleteHandler.cs
  • Core/Resgrid.Chatbot/Handlers/MessageReadHandler.cs
  • Core/Resgrid.Chatbot/Handlers/MessageRespondHandler.cs
  • Core/Resgrid.Chatbot/Handlers/MessageSendHandler.cs
  • Core/Resgrid.Chatbot/Handlers/MessagesActionHandler.cs
  • Core/Resgrid.Chatbot/Handlers/MyStatusActionHandler.cs
  • Core/Resgrid.Chatbot/Handlers/PersonnelActionHandler.cs
  • Core/Resgrid.Chatbot/Handlers/RespondToCallHandler.cs
  • Core/Resgrid.Chatbot/Handlers/SetUnitStatusHandler.cs
  • Core/Resgrid.Chatbot/Handlers/ShiftDropHandler.cs
  • Core/Resgrid.Chatbot/Handlers/ShiftSignupHandler.cs
  • Core/Resgrid.Chatbot/Handlers/StaffingActionHandler.cs
  • Core/Resgrid.Chatbot/Handlers/StatusActionHandler.cs
  • Core/Resgrid.Chatbot/Handlers/UnitsActionHandler.cs
  • Core/Resgrid.Chatbot/Handlers/WeatherAlertHandler.cs
  • Core/Resgrid.Chatbot/Interfaces/IChatbotActionHandler.cs
  • Core/Resgrid.Chatbot/Interfaces/IChatbotDepartmentConfigService.cs
  • Core/Resgrid.Chatbot/Interfaces/IChatbotIngressService.cs
  • Core/Resgrid.Chatbot/Interfaces/IChatbotIntentRouter.cs
  • Core/Resgrid.Chatbot/Interfaces/IChatbotRateLimiter.cs
  • Core/Resgrid.Chatbot/Interfaces/IChatbotSessionManager.cs
  • Core/Resgrid.Chatbot/Interfaces/IChatbotSessionStore.cs
  • Core/Resgrid.Chatbot/Interfaces/IChatbotTemplateRenderer.cs
  • Core/Resgrid.Chatbot/Interfaces/IChatbotUserIdentityService.cs
  • Core/Resgrid.Chatbot/Interfaces/IChatbotUserSearchService.cs
  • Core/Resgrid.Chatbot/Interfaces/IChatbotWebChatNotifier.cs
  • Core/Resgrid.Chatbot/Interfaces/IConversationEngine.cs
  • Core/Resgrid.Chatbot/Interfaces/IEntityExtractor.cs
  • Core/Resgrid.Chatbot/Interfaces/IIntentMapper.cs
  • Core/Resgrid.Chatbot/Interfaces/INLUProvider.cs
  • Core/Resgrid.Chatbot/Localization/ChatbotResources.cs
  • Core/Resgrid.Chatbot/Models/ChatbotEntity.cs
  • Core/Resgrid.Chatbot/Models/ChatbotIntent.cs
  • Core/Resgrid.Chatbot/Models/ChatbotMessage.cs
  • Core/Resgrid.Chatbot/Models/ChatbotMessageLog.cs
  • Core/Resgrid.Chatbot/Models/ChatbotPlatform.cs
  • Core/Resgrid.Chatbot/Models/ChatbotPlatformCapabilities.cs
  • Core/Resgrid.Chatbot/Models/ChatbotResponse.cs
  • Core/Resgrid.Chatbot/Models/ChatbotSession.cs
  • Core/Resgrid.Chatbot/Models/ChatbotUserIdentity.cs
  • Core/Resgrid.Chatbot/Models/ChatbotUserMatch.cs
  • Core/Resgrid.Chatbot/Models/DepartmentLlmOverride.cs
  • Core/Resgrid.Chatbot/Models/NLUResult.cs
  • Core/Resgrid.Chatbot/Resgrid.Chatbot.csproj
  • Core/Resgrid.Chatbot/Services/ChatbotDepartmentConfigService.cs
  • Core/Resgrid.Chatbot/Services/ChatbotIngressService.cs
  • Core/Resgrid.Chatbot/Services/ChatbotIntentRouter.cs
  • Core/Resgrid.Chatbot/Services/ChatbotRateLimiter.cs
  • Core/Resgrid.Chatbot/Services/ChatbotSessionManager.cs
  • Core/Resgrid.Chatbot/Services/ChatbotTemplateRenderer.cs
  • Core/Resgrid.Chatbot/Services/ChatbotUserIdentityService.cs
  • Core/Resgrid.Chatbot/Services/ChatbotUserSearchService.cs
  • Core/Resgrid.Chatbot/Services/CodeLinkingService.cs
  • Core/Resgrid.Chatbot/Services/ConversationEngine.cs
  • Core/Resgrid.Chatbot/Services/IntentMapper.cs
  • Core/Resgrid.Chatbot/Services/NullChatbotWebChatNotifier.cs
  • Core/Resgrid.Chatbot/Services/OAuthLinkingService.cs
  • Core/Resgrid.Chatbot/Services/RedisSessionStore.cs
  • Core/Resgrid.Config/FeatureFlagsConfig.cs
  • Core/Resgrid.Model/AuditLogTypes.cs
  • Core/Resgrid.Model/ChatbotDepartmentConfig.cs
  • Core/Resgrid.Model/ChatbotIdentity.cs
  • Core/Resgrid.Model/ChatbotLinkingCode.cs
  • Core/Resgrid.Model/ChatbotOutbound.cs
  • Core/Resgrid.Model/FeatureToggles/FeatureFlag.cs
  • Core/Resgrid.Model/FeatureToggles/FeatureFlagAttributeTypes.cs
  • Core/Resgrid.Model/FeatureToggles/FeatureFlagEvaluation.cs
  • Core/Resgrid.Model/FeatureToggles/FeatureFlagEvaluationSource.cs
  • Core/Resgrid.Model/FeatureToggles/FeatureFlagOperatorTypes.cs
  • Core/Resgrid.Model/FeatureToggles/FeatureFlagOverride.cs
  • Core/Resgrid.Model/FeatureToggles/FeatureFlagPrerequisite.cs
  • Core/Resgrid.Model/FeatureToggles/FeatureFlagTargetingRule.cs
  • Core/Resgrid.Model/FeatureToggles/FeatureFlagUsage.cs
  • Core/Resgrid.Model/FeatureToggles/FeatureFlagValueTypes.cs
  • Core/Resgrid.Model/Providers/ICacheProvider.cs
  • Core/Resgrid.Model/Repositories/IChatbotDepartmentConfigRepository.cs
  • Core/Resgrid.Model/Repositories/IChatbotIdentityRepository.cs
  • Core/Resgrid.Model/Repositories/IChatbotLinkingCodeRepository.cs
  • Core/Resgrid.Model/Repositories/IFeatureFlagOverrideRepository.cs
  • Core/Resgrid.Model/Repositories/IFeatureFlagPrerequisiteRepository.cs
  • Core/Resgrid.Model/Repositories/IFeatureFlagRepository.cs
  • Core/Resgrid.Model/Repositories/IFeatureFlagTargetingRuleRepository.cs
  • Core/Resgrid.Model/Repositories/IFeatureFlagUsageRepository.cs
  • Core/Resgrid.Model/Services/IChatbotOutboundService.cs
  • Core/Resgrid.Model/Services/IFeatureToggleService.cs
  • Core/Resgrid.Services/CommunicationService.cs
  • Core/Resgrid.Services/FeatureToggleService.cs
  • Core/Resgrid.Services/NullChatbotOutboundService.cs
  • Core/Resgrid.Services/ServicesModule.cs
  • Providers/Resgrid.Providers.Cache/AzureRedisCacheProvider.cs
  • Providers/Resgrid.Providers.Chatbot/Adapters/DiscordBotAdapter.cs
  • Providers/Resgrid.Providers.Chatbot/Adapters/SignalWireSmsAdapter.cs
  • Providers/Resgrid.Providers.Chatbot/Adapters/SlackBotAdapter.cs
  • Providers/Resgrid.Providers.Chatbot/Adapters/TelegramBotAdapter.cs
  • Providers/Resgrid.Providers.Chatbot/Adapters/TwilioSmsAdapter.cs
  • Providers/Resgrid.Providers.Chatbot/Adapters/WebChatAdapter.cs
  • Providers/Resgrid.Providers.Chatbot/Adapters/WhatsAppAdapter.cs
  • Providers/Resgrid.Providers.Chatbot/ChatbotProviderModule.cs
  • Providers/Resgrid.Providers.Chatbot/Interfaces/IChatbotAdapterRegistry.cs
  • Providers/Resgrid.Providers.Chatbot/Interfaces/IChatbotPlatformAdapter.cs
  • Providers/Resgrid.Providers.Chatbot/Resgrid.Providers.Chatbot.csproj
  • Providers/Resgrid.Providers.Chatbot/Services/ChatbotAdapterRegistry.cs
  • Providers/Resgrid.Providers.Chatbot/Services/ChatbotOutboundService.cs
  • Providers/Resgrid.Providers.Migrations/Migrations/M0068_ChatbotTables.cs
  • Providers/Resgrid.Providers.Migrations/Migrations/M0069_ChatbotLinkingCodes.cs
  • Providers/Resgrid.Providers.Migrations/Migrations/M0070_ChatbotDepartmentConfigColumns.cs
  • Providers/Resgrid.Providers.Migrations/Migrations/M0071_AddingFeatureToggles.cs
  • Providers/Resgrid.Providers.MigrationsPg/Migrations/M0068_ChatbotTablesPg.cs
  • Providers/Resgrid.Providers.MigrationsPg/Migrations/M0069_ChatbotLinkingCodesPg.cs
  • Providers/Resgrid.Providers.MigrationsPg/Migrations/M0070_ChatbotDepartmentConfigColumnsPg.cs
  • Providers/Resgrid.Providers.MigrationsPg/Migrations/M0071_AddingFeatureTogglesPg.cs
  • Repositories/Resgrid.Repositories.DataRepository/ChatbotDepartmentConfigRepository.cs
  • Repositories/Resgrid.Repositories.DataRepository/ChatbotIdentityRepository.cs
  • Repositories/Resgrid.Repositories.DataRepository/ChatbotLinkingCodeRepository.cs
  • Repositories/Resgrid.Repositories.DataRepository/FeatureFlagOverrideRepository.cs
  • Repositories/Resgrid.Repositories.DataRepository/FeatureFlagPrerequisiteRepository.cs
  • Repositories/Resgrid.Repositories.DataRepository/FeatureFlagRepository.cs
  • Repositories/Resgrid.Repositories.DataRepository/FeatureFlagTargetingRuleRepository.cs
  • Repositories/Resgrid.Repositories.DataRepository/FeatureFlagUsageRepository.cs
  • Repositories/Resgrid.Repositories.DataRepository/Modules/DataModule.cs
  • Resgrid.sln
  • Tests/Resgrid.Tests/Chatbot/ChatbotDeptConfigAndSessionTests.cs
  • Tests/Resgrid.Tests/Chatbot/ChatbotHandlerTests.cs
  • Tests/Resgrid.Tests/Chatbot/ChatbotLocalizationTests.cs
  • Tests/Resgrid.Tests/Chatbot/ChatbotOutboundTests.cs
  • Tests/Resgrid.Tests/Chatbot/ChatbotSecurityTests.cs
  • Tests/Resgrid.Tests/Chatbot/WebChatAdapterTests.cs
  • Tests/Resgrid.Tests/Services/CommunicationServiceTests.cs
  • Tests/Resgrid.Tests/Web/Services/TwilioControllerVoiceVerificationTests.cs
  • Web/Resgrid.Web.Services/Controllers/ChatbotTelegramController.cs
  • Web/Resgrid.Web.Services/Controllers/SignalWireController.cs
  • Web/Resgrid.Web.Services/Controllers/TwilioController.cs
  • Web/Resgrid.Web.Services/Controllers/v4/ChatbotController.cs
  • Web/Resgrid.Web.Services/Controllers/v4/FeatureTogglesController.cs
  • Web/Resgrid.Web.Services/Models/v4/FeatureToggles/FeatureToggleInputs.cs
  • Web/Resgrid.Web.Services/Models/v4/FeatureToggles/FeatureToggleResults.cs
  • Web/Resgrid.Web.Services/Resgrid.Web.Services.csproj
  • Web/Resgrid.Web.Services/Resgrid.Web.Services.xml
  • Web/Resgrid.Web.Services/Startup.cs
  • Web/Resgrid.Web/Areas/User/Controllers/ChatbotSettingsController.cs
  • Web/Resgrid.Web/Areas/User/Models/ChatbotSettingsModel.cs
  • Web/Resgrid.Web/Areas/User/Views/ChatbotSettings/Index.cshtml
  • Web/Resgrid.Web/Areas/User/Views/Department/Settings.cshtml
  • Web/Resgrid.Web/Resgrid.Web.csproj
  • Web/Resgrid.Web/Startup.cs
  • Web/Resgrid.Web/wwwroot/js/ng/react-elements.css
  • Workers/Resgrid.Workers.Framework/Logic/FeatureToggleUsageProcessor.cs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch develop

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

[HttpPost("Webhook")]
[Consumes("application/json")]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> Webhook()
/// </summary>
[HttpPost("GenerateLinkingCode")]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> GenerateLinkingCode()
/// </summary>
[HttpPost("UnlinkAccount")]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> UnlinkAccount([FromBody] UnlinkRequest request)
/// </summary>
[HttpPost("OAuthComplete")]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> OAuthComplete([FromBody] OAuthCompleteRequest request)
{
try
{
if (request == null)
[HttpPost("SetRollout")]
[ProducesResponseType(StatusCodes.Status200OK)]
[Authorize(Policy = ResgridResources.SystemAdmin)]
public async Task<ActionResult<FeatureFlagResult>> SetRollout([FromBody] SetRolloutInput input)
[HttpPost("SaveTargetingRule")]
[ProducesResponseType(StatusCodes.Status200OK)]
[Authorize(Policy = ResgridResources.SystemAdmin)]
public async Task<ActionResult<FeatureFlagTargetingRulesResult>> SaveTargetingRule([FromBody] SaveTargetingRuleInput input)
[HttpPost("AddPrerequisite")]
[ProducesResponseType(StatusCodes.Status200OK)]
[Authorize(Policy = ResgridResources.SystemAdmin)]
public async Task<ActionResult<FeatureFlagPrerequisitesResult>> AddPrerequisite([FromBody] AddPrerequisiteInput input)
[HttpPost("SetOverride")]
[ProducesResponseType(StatusCodes.Status200OK)]
[Authorize]
public async Task<ActionResult<FeatureFlagOverrideResult>> SetOverride([FromBody] SetFeatureFlagOverrideInput input)
[Authorize]
public async Task<ActionResult<FeatureFlagOverrideResult>> SetOverride([FromBody] SetFeatureFlagOverrideInput input)
{
if (input == null || string.IsNullOrWhiteSpace(input.Key))
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a sizable new chatbot subsystem and a built-in feature-toggle subsystem into the Resgrid codebase, alongside a number of supporting changes. The chatbot work adds platform adapters (SMS, Discord, Slack, Telegram, WhatsApp, WebChat), per-department configuration with optional encrypted LLM provider override, identity/linking persistence, an outbound chat channel wired into CommunicationService, localization, rate limiting, and a new "Chatbot Settings" admin UI. The feature-toggle work introduces flag/override/targeting/prerequisite/usage entities, repositories, an IFeatureToggleService interface, a usage-flush worker, and a new FeatureFlagsConfig. Several pieces are also wired into existing DI modules and project files.

Changes:

  • New Resgrid.Chatbot / Resgrid.Chatbot.NLU / Resgrid.Providers.Chatbot projects with adapters, handlers, services, models, and DI modules, plus a per-department config UI, migrations (M0069/M0070), and IChatbotOutboundService integration into CommunicationService.
  • New feature-toggle model/repository/service surface with global config (FeatureFlagsConfig), DI registrations in DataModule/ServicesModule, a FeatureToggleUsageProcessor worker, and a new ICacheProvider.IncrementAsync for atomic counters.
  • Supporting infrastructure: SQL/Postgres migrations for chatbot/linking-code tables and LLM override columns, English/Spanish localization additions, audit-log enum entries, and updated test mocks for the new IChatbotOutboundService/IChatbotIngressService constructor parameters.

Reviewed changes

Copilot reviewed 174 out of 177 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
Workers/Resgrid.Workers.Framework/Logic/FeatureToggleUsageProcessor.cs New worker that flushes feature-flag evaluation counters.
Web/Resgrid.Web/Startup.cs Registers ChatbotDepartmentConfigService in the web container.
Web/Resgrid.Web/Resgrid.Web.csproj Adds Resgrid.Chatbot project reference.
Web/Resgrid.Web/Areas/User/Views/Department/Settings.cshtml Adds Chatbot Settings nav link.
Web/Resgrid.Web/Areas/User/Models/ChatbotSettingsModel.cs View model for chatbot settings page.
Web/Resgrid.Web/Areas/User/Controllers/ChatbotSettingsController.cs New controller for per-department chatbot config.
Web/Resgrid.Web/Areas/User/Apps/package-lock.json Adjusts peer flags on transitive dev deps.
Web/Resgrid.Web.Services/Startup.cs Registers ChatbotModule, NLUModule, and chatbot provider module.
Web/Resgrid.Web.Services/Resgrid.Web.Services.csproj Adds chatbot/NLU project references.
Web/Resgrid.Web.Services/Models/v4/FeatureToggles/FeatureToggleInputs.cs DTOs for feature-toggle API endpoints.
Tests/Resgrid.Tests/Web/Services/TwilioControllerVoiceVerificationTests.cs Adds chatbot ingress mock to controller construction.
Tests/Resgrid.Tests/Services/CommunicationServiceTests.cs Adds chatbot outbound mock to CommunicationService ctor.
Tests/Resgrid.Tests/Chatbot/WebChatAdapterTests.cs New tests for WebChatAdapter.
Tests/Resgrid.Tests/Chatbot/ChatbotLocalizationTests.cs New tests for chatbot localization and handler culture flow.
Repositories/Resgrid.Repositories.DataRepository/Modules/DataModule.cs Registers new feature-flag and chatbot repositories.
Repositories/Resgrid.Repositories.DataRepository/FeatureFlag*Repository.cs (5 files) Dapper repos for FeatureFlag/Override/TargetingRule/Prerequisite/Usage.
Repositories/Resgrid.Repositories.DataRepository/ChatbotLinkingCodeRepository.cs Lookup by code (returns newest unused, falls back to newest).
Repositories/Resgrid.Repositories.DataRepository/ChatbotIdentityRepository.cs Lookup of chat identities by platform/platform-user-id.
Repositories/Resgrid.Repositories.DataRepository/ChatbotDepartmentConfigRepository.cs Lookup of per-dept chatbot config.
Providers/Resgrid.Providers.MigrationsPg/Migrations/M0069/M0070*.cs Postgres migrations for chatbot linking codes & config columns.
Providers/Resgrid.Providers.Migrations/Migrations/M0069/M0070*.cs SQL Server migrations for the same tables/columns.
Providers/Resgrid.Providers.Chatbot/* New chatbot provider project: adapters, outbound service, registry, DI module.
Providers/Resgrid.Providers.Cache/AzureRedisCacheProvider.cs Adds IncrementAsync for atomic counter w/ TTL on first set.
Core/Resgrid.Services/ServicesModule.cs Registers NullChatbotOutboundService default and FeatureToggleService.
Core/Resgrid.Services/NullChatbotOutboundService.cs No-op fallback for hosts without chatbot module.
Core/Resgrid.Services/CommunicationService.cs Adds chatbot outbound delivery to message/call paths.
Core/Resgrid.Model/Services/IFeatureToggleService.cs New feature-toggle service interface.
Core/Resgrid.Model/Services/IChatbotOutboundService.cs Interface for outbound chat delivery.
Core/Resgrid.Model/Repositories/IFeatureFlag*Repository.cs (5) Repository interfaces for feature toggle entities.
Core/Resgrid.Model/Repositories/IChatbot*Repository.cs (3) Repository interfaces for chatbot entities.
Core/Resgrid.Model/Providers/ICacheProvider.cs Adds IncrementAsync to cache abstraction.
Core/Resgrid.Model/FeatureToggles/*.cs (8 files) New entity/enum/eval-result classes.
Core/Resgrid.Model/Chatbot*.cs (3 files) Persistence entities + outbound message types.
Core/Resgrid.Model/AuditLogTypes.cs Adds feature-flag audit log enum values.
Core/Resgrid.Localization/Areas/User/Department/Department.{en,es}.resx Adds chatbot settings UI strings.
Core/Resgrid.Config/FeatureFlagsConfig.cs Global config for feature-toggle subsystem.
Core/Resgrid.Chatbot/* New core chatbot project: models, interfaces, handlers, session/rate-limit/config services, localization.
Core/Resgrid.Chatbot.NLU/* NLU project: keyword/ML.NET/cloud providers, entity extractor, Autofac module.
CONTEXT.md New repo-level context notes for the chatbot work.
.gitignore Cleans up duplicate entries; adds .dual-graph-pro/.
.claude/settings.local.json Local Claude settings/hooks updates.
Files not reviewed (1)
  • Web/Resgrid.Web/Areas/User/Apps/package-lock.json: Language not supported

Comment on lines +75 to +77
// A blank key means "keep the existing one"; a value is encrypted and stored by the service.
var newPlaintextKey = string.IsNullOrWhiteSpace(model.LlmApiKey) ? null : model.LlmApiKey;
await _chatbotConfigService.SaveConfigAsync(config, newPlaintextKey);
Comment on lines +62 to +65
// Prefer the newest unused code if duplicates ever exist for the same value.
return results
.OrderByDescending(r => r.CreatedAt)
.FirstOrDefault(r => !r.IsUsed) ?? results.OrderByDescending(r => r.CreatedAt).FirstOrDefault();
Comment on lines +27 to +47
public async Task<bool> TryAcquireAsync(string userId, int departmentId, int perUserPerMinute, int perDepartmentPerMinute)
{
if (UseRedis())
{
// Check the user limit first; only consume the department slot if the user is allowed.
if (!await CheckAndConsumeRedisAsync($"u:{departmentId}:{userId}", perUserPerMinute))
return false;

if (!await CheckAndConsumeRedisAsync($"d:{departmentId}", perDepartmentPerMinute))
return false;

return true;
}

if (!CheckAndConsumeMemory($"u:{departmentId}:{userId}", perUserPerMinute))
return false;

if (!CheckAndConsumeMemory($"d:{departmentId}", perDepartmentPerMinute))
return false;

return true;
@ucswift ucswift closed this Jun 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants