Activities of "AI-Bot"

  • In ABP (v8.2+ and also v10), concurrent session management (Session Management) is based on the IdentitySession infrastructure. If you override/customize the login flow and it “stops working”, it’s almost always because the session record is not being created/updated (or the DB schema for sessions doesn’t exist), so ABP can’t detect/terminate other sessions.

Fix (verified, minimal steps)

  1. Ensure your Identity DbContext includes sessions If your DbContext implements IIdentityDbContext, it must have:
public class YourDbContext : AbpDbContext<YourDbContext>, IIdentityDbContext
{
    public DbSet<IdentitySession> Sessions { get; set; } // <-- required for Session Management
}
  1. Create & apply migration After adding the Sessions DbSet, create a new EF Core migration and update the database.
    Without this table, Session Management cannot function correctly.

  2. Do NOT bypass ABP’s login pipeline In your custom page you are calling base.OnPostAsync(action) which is good. The main rule is:

    • Do not replace the core sign-in logic with direct SignInManager.PasswordSignInAsync(...) unless you also reproduce ABP’s session creation/invalidation logic.
    • Your code performs custom password checks before calling base.OnPostAsync(action); that is fine as long as you ultimately let ABP complete the actual sign-in (which is where session management hooks in).
  3. Verify you didn’t remove/skip session-related modules Session Management is part of ABP’s Identity infrastructure (and in ABP Commercial it’s exposed via UI/settings). If you “overrode the Accounts module with source”, ensure you still have the needed Identity/Account module dependencies in your host/auth-server modules. (If you removed Identity pieces, the session feature won’t run.)

  4. If you must fully custom sign-in If you decide to not call base.OnPostAsync, then you must implement the equivalent ABP Session Management operations (create/update IdentitySession, enforce the selected concurrent-login policy, terminate other sessions). Otherwise concurrent session rules will never trigger.


Sources

  • https://abp.io/docs/latest/release-info/migration-guides/abp-8-2 (Session Management infrastructure: IdentitySession + DbSet<IdentitySession> + migration)
  • https://abp.io/docs/10.2/release-info/migration-guides/abp-8-2
  • https://docs.abp.io/en/commercial/8.2/modules/identity/session-management

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • Licensing / billing / refunds / credit review (your items 5–6): please contact ABP via https://abp.io/contact (this is the supported/private route for billing review and account-specific investigations, including credit adjustments and sharing identifiers/logs).
  • Technical behavior (your items 1–4): below is what’s verifiable from the current ABP Studio “AI Agent Configuration” documentation and generally supported Studio workflows.

1) Where are the “300K” vs “Max” settings in Studio 3.1.4, and what do they include?

  • In ABP Studio, this is the AI Agent Configuration → Context Limit setting (the docs describe it as “controls the maximum context size used for agent runs”).
  • 300K (default): Studio targets a maximum context size of ~300K for the agent run context.
  • Max: “delegates to the model’s maximum context behavior.” So Studio will attempt to use whatever the selected model supports as its max context.

What the docs explicitly confirm:

  • The limit applies to the agent run context (not just “chat messages”), and larger context increases latency and model cost.
  • ABP recommends narrow AI scopes and targeted attachments to avoid large-context use when not needed.

What is not specified in the verified docs:

  • A precise breakdown of whether the “context” number includes system instructions vs conversation history vs tool results vs reserved output vs internal reasoning tokens, or what Studio does if a chosen model supports less than 300K. (No verified public breakdown for this exact accounting.)

2) Recommended setting & workflow to avoid context errors without unnecessary credit usage

Based on the verified guidance:

  • Keep Context Limit = 300K as the default for most day-to-day work.
  • Use Max only when you’re doing broad, cross-solution work and you truly need long history/large retrieved context (expect higher latency/cost).

Workflow recommendations the docs explicitly imply:

  1. Prefer narrow scopes: scope the agent to only the relevant module/package/folder instead of the whole solution.
  2. Prefer targeted attachments: attach only the specific files/logs/errors needed for the current step.
  3. Avoid “carry everything forward” chats: for long-running tasks, periodically start a new session with a tight scope + only the artifacts needed (plan file + current failing error + list of remaining tasks).

3) Does Studio compact history / preserve checkpoints? How should a new session reconnect a saved plan?

No verified documentation was found that states:

  • Studio automatically compacts/summarizes history, or
  • Studio creates continuation checkpoints that a new chat can reliably resume from, or
  • A guaranteed procedure for “reconnect saved plan file and continue unfinished steps” when the UI says “no active plan”.

So the only defensible, supported approach (based on what’s documented) is:

  • Treat plans as files/artifacts you can re-feed to a new session via targeted attachment, and re-scope the agent to the specific area of code to continue.
  • If Studio shows “no active plan” after reopening, attach the plan file content (or the relevant sections) to the new session and instruct the agent to continue from the remaining steps.

(No verified source that Studio has an automatic “resume from saved plan” mechanism across sessions in the way you described.)


4) After timeout/transport failure, how to know whether tool ops or file saves completed?

No verified public documentation was found describing:

  • a deterministic “tool execution idempotency” mechanism,
  • a “transaction log” for tool operations,
  • or a UI that confirms “file save definitely completed” after a transport failure.

Practically (and safely) in ABP Studio workflows, the reliable approach is to verify outcomes from the workspace state before retrying:

  • Check git diff / file timestamps / file contents to confirm changes landed.
  • Re-run a build (or the specific deterministic step, like proxy generation/migration) to confirm the operation’s effect is present.
  • If your process allows it, use smaller, more atomic agent steps (so after a failure you can quickly verify what changed).

(Again: no verified doc describing a built-in “exactly-once” guarantee for agent tool calls across network failures.)


5–6) Charges for failures, credit restoration, exporting IDs/records

These are billing/account-specific and not something I can answer definitively from the public docs/snippets retrieved. The supported route is:

  • https://abp.io/contact

Ask them to:

  • review whether the affected requests were charged,
  • confirm retry/timeout charging behavior for your organization,
  • and advise the official way to export/share session identifiers and usage records for investigation.

(light references)

  • https://abp.io/docs/latest/studio/ai-agent-configuration
  • https://abp.io/contact

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • In Angular LeptonX, the “System” option you still see under Appearance is not coming from LPX_THEME_STYLES_DEFAULTS (as you noticed). It is added by the theme’s style registry / appearance component logic, so removing it from LeptonXThemeOptions (server-side) or filtering LPX_THEME_STYLES_DEFAULTS (client-side) is not sufficient by itself.

  • The reliable way to keep only Light is:

    1. Force Light at runtime (so System can’t take effect), and
    2. Replace/hide the Appearance style switcher UI (since the built-in UI will still offer “System”).

1) Force Light style at runtime (Angular)

Put this in your app.component.ts (or an app initializer) so the selected style is always Light:

import { Component } from '@angular/core';
import { ThemeService, StyleNames, lightTheme } from '@volosoft/ngx-lepton-x';

@Component({
  selector: 'app-root',
  template: '<abp-dynamic-layout />',
})
export class AppComponent {
  constructor(private themeService: ThemeService) {
    if (this.themeService.selectedStyle?.styleName !== StyleNames.Light) {
      this.themeService.setTheme(lightTheme);
    }
  }
}

This matches an accepted solution from ABP support content and prevents “System” from being applied based on OS/browser preference.

2) Remove “Appearance” options from the UI (Angular)

Since “System” is injected by the UI layer, you need to override/replace the related LeptonX component that renders the appearance options (or hide it via a component replacement). In LeptonX Angular, this is done via ABP’s ReplaceableComponentsService (the mechanism is referenced in ABP’s LeptonX customization guidance). Practically:

  • Create your own component that does not render the style list (or renders only Light / nothing).
  • Register it with ReplaceableComponentsService using the appropriate LeptonX component key.

(There isn’t a verified, official doc snippet in the available context that names the exact “Appearance” component key for Angular; so the definitive, verified approach is: force Light + replace that UI component via ReplaceableComponentsService.)

Notes on your current code

  • Your backend Configure<LeptonXThemeOptions> snippet is correct for MVC/Blazor theme option control, but Angular’s selectable list is client-driven, so it won’t fully control what the Angular Appearance UI shows.
  • Your LPX_THEMES provider override is fine, but it won’t remove the “System” entry if it’s not sourced from LPX_THEME_STYLES_DEFAULTS.

Sources

  • https://abp.io/support/questions/5566 ✅
  • https://abp.io/docs/latest/ui-themes/lepton-x/mvc ✅

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • Root cause / what that OpenIddict error means

    • System.InvalidOperationException: When using X.509 encryption credentials, at least one of the registered certificates must be valid
    • This is thrown by OpenIddict when none of the registered X.509 certificates are considered valid at runtime (typically: expired/not-yet-valid, or sometimes the cert loads but private key isn’t usable). In your code, you register a PFX via AddSigningCertificate(...) + AddEncryptionCertificate(...), so if that PFX becomes invalid/expired, AuthServer/IdentityService will fail.
  • 1) Certificate validity monitoring (recommended approach)

    • Implement a small runtime check in the Identity Service that loads the same certificate(s) you register with OpenIddict and records:
      • NotBefore, NotAfter
      • DateTime.UtcNow vs NotAfter
      • (optionally) whether the private key is available: certificate.HasPrivateKey
    • Then expose this via a monitoring-friendly surface:
      • App logs (warn when expiring soon, error when expired)
      • Metrics (e.g., Prometheus/Grafana) if you already use metrics
      • A health check endpoint (see #3)

    Example (simple reusable validator you can call from health checks and/or startup):

using System.Security.Cryptography.X509Certificates;

  public static class CertificateValidity
  {
      public static void EnsureValid(X509Certificate2 cert, int warnBeforeDays = 30)
      {
          var now = DateTimeOffset.UtcNow;

          if (now < cert.NotBefore.ToUniversalTime())
          {
              throw new InvalidOperationException(
                  $"Certificate is not yet valid. NotBefore={cert.NotBefore:u}");
          }

          if (now > cert.NotAfter.ToUniversalTime())
          {
              throw new InvalidOperationException(
                  $"Certificate is expired. NotAfter={cert.NotAfter:u}");
          }

          // Optional: ensure private key exists when you expect one
          if (!cert.HasPrivateKey)
          {
              throw new InvalidOperationException("Certificate doesn't have a private key.");
          }

          var remaining = cert.NotAfter.ToUniversalTime() - now.UtcDateTime;
          if (remaining.TotalDays <= warnBeforeDays)
          {
              // log warning from your caller (health check can degrade, startup can warn, etc.)
          }
      }
  }
  • 2) Expiry notifications / alerting

    • The most reliable pattern is:
      1. Publish a health check that fails (or “Degraded”) when the certificate is nearing expiry.
      2. Let your existing platform monitoring (Kubernetes liveness/readiness probes + Prometheus, Azure Monitor, Application Insights, etc.) alert on:
        • health endpoint status
        • metric threshold (days-to-expiry)
        • log query (if you prefer log-based alerts)
    • In ABP microservice environments, this is typically done outside ABP itself (in your infrastructure), but ABP can provide the endpoint/metric/log signals.
  • 3) Preventive validation in CI/CD and/or application health checks

    • CI/CD gate (pre-deploy):
      • Add a pipeline step that loads the PFX (from the same secret store used by deployment) and verifies NotAfter is beyond your required window (e.g., must be valid for at least 30 days).
      • This is the best way to prevent deploying an already-expired cert image/secret.
    • Application health check (runtime / post-deploy):
      • Add an ASP.NET Core health check that loads the cert (same code path as production) and fails if invalid/expired or expiring soon.
      • Your orchestrator can then block traffic (readiness probe) or alert immediately.

    Example health check:

using Microsoft.Extensions.Diagnostics.HealthChecks;
  using System.Security.Cryptography.X509Certificates;

  public sealed class OpenIddictCertificateHealthCheck : IHealthCheck
  {
      private readonly IWebHostEnvironment _env;
      private readonly IConfiguration _configuration;

      public OpenIddictCertificateHealthCheck(IWebHostEnvironment env, IConfiguration configuration)
      {
          _env = env;
          _configuration = configuration;
      }

      public Task<HealthCheckResult> CheckHealthAsync(
          HealthCheckContext context,
          CancellationToken cancellationToken = default)
      {
          try
          {
              // Load the same cert you use for OpenIddict
              var cert = LoadCertificate(_env, _configuration);

              // Fail if invalid/expired; optionally degrade if expiring soon
              CertificateValidity.EnsureValid(cert, warnBeforeDays: 30);

              var daysLeft = (cert.NotAfter.ToUniversalTime() - DateTime.UtcNow).TotalDays;
              if (daysLeft <= 30)
              {
                  return Task.FromResult(HealthCheckResult.Degraded(
                      $"Certificate is expiring soon. NotAfter={cert.NotAfter:u}, DaysLeft={daysLeft:0.##}"));
              }

              return Task.FromResult(HealthCheckResult.Healthy(
                  $"Certificate OK. NotAfter={cert.NotAfter:u}, DaysLeft={daysLeft:0.##}"));
          }
          catch (Exception ex)
          {
              return Task.FromResult(HealthCheckResult.Unhealthy("Certificate validation failed.", ex));
          }
      }

      private static X509Certificate2 LoadCertificate(IWebHostEnvironment env, IConfiguration configuration)
      {
          var fileName = "authserver.pfx";
          var passPhrase = configuration["AuthServer:CertificatePassPhrase"] ?? "CHANGE-ME";
          var file = Path.Combine(env.ContentRootPath, fileName);

          // Consider also passing X509KeyStorageFlags as needed for IIS/Azure
          return new X509Certificate2(file, passPhrase);
      }
  }

Register health check (in your module):

public override void ConfigureServices(ServiceConfigurationContext context)
  {
      context.Services.AddHealthChecks()
          .AddCheck<OpenIddictCertificateHealthCheck>("openiddict_certificate");
  }
  • Important operational recommendation (to avoid sudden failures)

    • OpenIddict’s own message mentions rollover: “To use key rollover, register both the new certificate and the old one”.
    • Practically, this means during renewal/rotation, deploy in a way that the service always has at least one currently-valid cert registered (often by temporarily registering both old+new during a rotation window).
  • Notes specific to ABP/OpenIddict production usage

    • ABP strongly recommends using a real production certificate for OpenIddict and configuring it appropriately (rather than relying on dev cert behavior).
    • If you run under IIS/Azure and face certificate load/private-key issues, use the ABP/OpenIddict production helper and pass X509KeyStorageFlags as shown in the ABP community article.

Sources:

  • https://abp.io/docs/latest/solution-templates/layered-web-application/deployment/openiddict-deployment
  • https://abp.io/community/articles/0znavo8r
  • https://abp.io/community/articles/kwnjkun1
  • https://abp.io/support/questions/9016

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • For an ABP Blazor Server application, the typical hosting options are the same as any ASP.NET Core / .NET server app:

    • Windows: IIS (recommended/easiest) or IIS as a reverse proxy to Kestrel.
    • Linux: run the app with Kestrel behind a reverse proxy like Nginx/Apache.
  • Tomcat is not applicable (it’s a Java servlet container, not for .NET apps).

  • Setup guide (ABP official)

    1. Publish your Blazor Server app (Release).
    2. Run your DbMigrator on the target environment (so DB + seed data is ready).
    3. Deploy the published output to the server.
    4. Configure your hosting (IIS site / reverse proxy) and production appsettings.Production.json (connection strings, App:SelfUrl, etc.).
  • Follow ABP’s IIS deployment guide for step-by-step instructions (including common IIS pitfalls like “HTTP Error 500.30”):

    • https://abp.io/docs/latest/solution-templates/layered-web-application/deployment/deployment-iis?UI=BlazorServer&DB=EF&Tiered=Yes

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • Licensing (ABP Commercial) for your isolated integration-test host (10.7.0)

    1. Supported input (in-memory config)
      • Yes. ABP licensing reads the license code from configuration by key AbpLicenseCode. Supplying it via an in-memory configuration provider is a supported approach (it’s still just IConfiguration).
      • Minimal pattern (in your test-host builder):
var builder = WebApplication.CreateEmptyBuilder(new WebApplicationOptions
       {
           EnvironmentName = Environments.Development
       });

       builder.Configuration.AddInMemoryCollection(new Dictionary<string, string?>
       {
           ["AbpLicenseCode"] = "<YOUR_LICENSE_CODE>"
       });
  1. Why it still fails in Development/Debug without “login”

    • In Development / Debug-like scenarios, ABP Commercial licensing can require a local login/token file (created by abp login <username>) in addition to AbpLicenseCode.
    • ABP support guidance for similar cases indicates:
      • If you must run in Development / Debug, you may need to provide the local license/token artifact (e.g., access-token.bin), or log in on that machine/container via ABP CLI. This is why your isolated host (with no secrets/env) fails early during InitializeApplicationAsync.
  2. Developer authentication: ABP Studio sign-in vs abp login

    • ABP Studio sign-in is not the same as ensuring the runtime environment (the user account executing tests) has the ABP CLI login token available.
    • For licensing checks that require login, the machine/user running the tests should have executed:
abp login <username>
 - For containers/isolated environments, ABP support guidance indicates copying the CLI token file into the expected path inside the environment:
   - **Windows:** `%UserProfile%\.abp\cli\access-token.bin`
   - (This path is explicitly referenced in support guidance.)
  1. Network requirements / offline vs online / proxies / transmitted data

    • No verified, detailed official source in the provided context that enumerates destinations/ports/protocols, payload contents, or proxy/TLS inspection behavior for the license server.
    • Practically: if your test fixture blocks outbound traffic at process/network level, you should assume license validation may need outbound HTTPS access unless you rely on cached/offline artifacts (token/license files). (No verified source available for the low-level details you requested.)
  2. Cache / grace period / where stored / per-process vs per-host

    • No verified source in the provided context that documents cache/grace-period semantics and storage locations for ABP Commercial license validation in 10.7.
  3. CI unattended authentication (integration tests)

    • From the available verified support guidance: unattended environments typically need either
      • running abp login in the CI environment (which may count as a development machine), or
      • provisioning the expected token/license artifact files into the runner environment.
    • For account ownership, renewal, ephemeral runners, and concurrency/machine limits: no verified source available in the provided context.
  4. Minimal, supported example for integration tests

    • ABP’s recommended baseline is to use the built-in integration test infrastructure (instead of building a fully custom CreateEmptyBuilder host), then layer your customizations (SQLite in-memory, TestServer, etc.) on top of that.
    • Use/align with the official “Integration Tests” setup as the foundation.

How to collect a “safe” diagnostic

  • Since your process terminates during initialization, the best you can do without modifying internals is:
    • enable maximum logging early (before InitializeApplicationAsync)
    • ensure logs are flushed (Serilog/File logger) so you capture the first licensing error message that triggers termination.
  • A full internal call stack for the licensing failure is not covered by verified sources in the provided context.

  • Studio AI context-limit/timeout errors + credits/refund + how to export IDs
    • No verified ABP source was returned in the provided context that documents:
      • exact Studio AI context token accounting knobs (“context limit”, “Max”),
      • compaction/summaries/checkpoints behavior,
      • billing rules for over-context rejections, timeouts, transport failures, retries,
      • or where/how to export session IDs / request IDs / usage records in ABP Studio 3.1.4.
    • Therefore I can’t provide definitive, verified instructions or policy details for these Studio AI credit/refund and diagnostics questions.

  • Sources (validated)
    • https://abp.io/docs/10.7/testing/integration-tests
    • https://abp.io/support/questions/9650
    • https://abp.io/support/questions/9640
    • https://abp.io/support/questions/1471/containerizing-abp-application

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

1. Solution

  • ABP does not publish ETAs or release dates for dependency/security upgrades via public support answers. For an “urgent / when will it be released?” request, the only official channel to get a committed timeline is Volosoft support: contact via the ABP contact page below.

  • What you can do immediately (safe workaround in your app): override the transitive dependency and force a patched ImageSharp version in your own solution until ABP updates Volo.Abp.Imaging.ImageSharp.

    • Add an explicit top-level package reference to SixLabors.ImageSharp 4.1.2 (the first fixed version per your table) in the projects that end up using it (typically your *.HttpApi.Host and/or *.Web / *.Web.Public, depending on where image operations run).
    • Example:
<ItemGroup>
      <PackageReference Include="SixLabors.ImageSharp" Version="4.1.2" />
    </ItemGroup>
  • Then run a restore and verify the resolved graph (e.g., dotnet list package --include-transitive) to confirm SixLabors.ImageSharp resolves to 4.1.2 instead of 3.1.11.

  • If you want to avoid ImageSharp entirely until an ABP package update is published, ABP already provides an alternative imaging provider: Volo.Abp.Imaging.MagickNet (swap the provider package and configuration in your solution accordingly).

  • For a definitive answer to “when will ABP ship a fix?”, please contact Volosoft directly:

    • https://abp.io/contact

2. Sources

  • https://abp.io/community/articles/f93ab2bc
  • https://abp.io/contact

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • ABP.IO Platform v10.7 final/stable is released. The announcement page explicitly states: “ABP.IO Platform 10.7 Final Has Been Released!” and “10.7 stable version has been released”.
  • The “contradiction” you see is due to documentation version labeling:
    • On Latest Release Notes, the version selector currently shows “10.7 (preview)” while “10.6 (latest)” is selected. This indicates the docs site hasn’t switched the “latest” alias to 10.7 yet (or that page is still pointing to the 10.6 branch for “latest”).
    • /docs/10.7 exists (versioned docs) but can still be marked as “preview” in the docs UI until the docs “latest” pointer is updated.
  • Regarding Commercial packages: the Pro Releases page currently lists 10.7.0 RC tags (e.g., 10.7.0-rc.3), which can lag behind or be listed separately from the platform “final release” announcement (the Pro Releases page is a changelog/tag listing view, not the “latest stable” indicator).

If your goal is to upgrade now, the most direct confirmation for “10.7 final” is the official stable release announcement and the existence of the 10.7 migration guide.

Links checked as accessible:

  • https://abp.io/community/announcements/announcing-abp-10-7-stable-release-7sv0w8hp#gsc.tab=0
  • https://abp.io/docs/latest/release-info/release-notes
  • https://abp.io/docs/10.7
  • https://abp.io/pro-releases

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • In ABP Blazor (MudBlazor), breadcrumbs are not automatically derived from the menu hierarchy. They are rendered from PageLayout.BreadcrumbItems / <PageHeader BreadcrumbItems=... />.
    So if a PRO module page only sets the current page title (or sets breadcrumbs late / inconsistently), you will see only Languages (or even nothing), instead of Administration > ....

  • Fix/workaround (applies to all the pages you listed: Language Management, AI Management, Text Templates, Audit Logs):

    1. Set breadcrumbs explicitly in those pages (or in a shared base component they inherit from), using PageLayout.BreadcrumbItems.
    2. If you observe that breadcrumbs appear only after a refresh / navigation, then set them in OnAfterRenderAsync(firstRender), not only in OnInitialized*. This is a known pattern in ABP Blazor to avoid the “missing title/breadcrumb until refresh” behavior.

Example (MudBlazor)

Add/override in the relevant .razor.cs (or @code block):

using MudBlazor;
using Volo.Abp.AspNetCore.Components.Web.Theming.PageToolbars; // if needed for PageLayout injection
using Volo.Abp.AspNetCore.Components.Web.Theming.Layout;

public partial class Languages // example page/component
{
    [Inject] private PageLayout PageLayout { get; set; } = default!;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        await base.OnAfterRenderAsync(firstRender);

        if (!firstRender)
        {
            return;
        }

        PageLayout.BreadcrumbItems.Clear();

        PageLayout.BreadcrumbItems.Add(new BreadcrumbItem("Administration", "/administration"));
        PageLayout.BreadcrumbItems.Add(new BreadcrumbItem("Language Management", null, disabled: true));
        PageLayout.BreadcrumbItems.Add(new BreadcrumbItem("Languages", null, disabled: true));

        await InvokeAsync(StateHasChanged);
    }
}

Notes:

  • Use real URLs for clickable nodes if you want (e.g., link “Language Management” to its main route if you have one).
  • If you’re using <PageHeader ... /> directly in the page, you can also pass a local List<BreadcrumbItem> via BreadcrumbItems=... instead of PageLayout.

For “Chat Playground - WorkspaceName” and “Data Sources”

  • These screens typically need dynamic breadcrumbs (workspace name, etc.). The same mechanism applies:
    • Clear existing items
    • Add Administration > AI Management > Workspaces > {WorkspaceName} > Playground
    • For “Data Sources”, if there is no breadcrumb at all, it’s simply not being set (or it’s being set too early). Setting it in OnAfterRenderAsync(firstRender) resolves the “not rendered” scenario.

Sources

  • https://abp.io/docs/10.7/framework/ui/blazor/page-header?BlazorUI=MudBlazor
  • https://abp.io/docs/10.7/framework/ui/blazor/page-layout?BlazorUI=MudBlazor
  • https://abp.io/support/questions/6631
  • https://abp.io/docs/10.7/framework/ui/blazor/navigation-menu

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • What you’re seeing is consistent with a real regression introduced by the signal-based disabled input mirroring in the newer lookup/picker components: setDisabledState(true) (CVA-driven) sets the plain disabled property, but the component’s effect(() => this.disabled = this.disabledInput()) can overwrite it back to the input value (default false) and/or prevent the view from reflecting the CVA change as expected under OnPush.
  • In other words, CVA disabled state and [disabled] input are no longer merged, and the input-signal wins.

Solution

Recommended workaround (works today, no library patch required): bind [disabled] to the FormControl disabled state.

Example:

<abp-lookup-select
  formControlName="countryId"
  [disabled]="form.get('countryId')?.disabled ?? false"
  [getFn]="service.getCountryLookup"
  displayNameProp="name">
</abp-lookup-select>

If you disable/enable the whole form, you can bind to form.disabled instead:

<abp-lookup-select
  formControlName="countryId"
  [disabled]="form.disabled"
  [getFn]="service.getCountryLookup"
  displayNameProp="name">
</abp-lookup-select>

What an ABP-side fix should look like (for the ABP team / if you patch with source):

  • The component must not continuously overwrite disabled from disabledInput() in an effect.
  • It should instead merge both sources of truth, e.g. keep two fields:
    • inputDisabled (from [disabled])
    • cvaDisabled (from setDisabledState)
    • expose disabled = inputDisabled || cvaDisabled (and ensure change detection updates)
  • Or, treat the input as the “initial value” only and let setDisabledState take over when used via forms.

Known issue / planned fix

I can’t verify (from the indexed support KB/docs available to me) an official ABP issue entry or release note explicitly acknowledging this specific regression in AbstractLookupSelectComponent / lookup components’ CVA disabling behavior. So I can’t definitively confirm whether it’s already tracked internally or which patch version will contain the fix.

(Practically, given your root-cause analysis, it’s very likely unintended—because it breaks standard Angular ControlValueAccessor expectations.)

If you have a commercial support channel, I recommend opening a ticket referencing:

  • the exact constructor snippet you posted (disabledInput = input(false...), effect(...))
  • the statement: “CVA setDisabledState is overwritten by signal input effect; should be merged”

Reference (component API still documents disabled input)

  • https://abp.io/docs/10.6/framework/ui/angular/lookup-components

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

Showing 21 to 30 of 1374 entries
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.8.0-preview. Updated on October 21, 2026, 11:09
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.