@switch (section()) { @case ('Middleware1') {
{{ 'XP.Xpert.SelectMiddlewares' | translate : { Default: 'Choose the middlewares to preload for the primary agent. Detailed configuration stays in Studio.' } }}
{{ 'XP.Xpert.MiddlewareFeaturesAutoEnabled' | translate : { Default: 'If a middleware requires Xpert features such as sandbox, they will be enabled automatically for this Xpert.' } }}
{{ 'XP.Xpert.MiddlewareRequiredModeHelp' | translate : { Default: 'Selected middlewares default to Always load. Turn it off to create the node without forcing runtime loading; you can continue adjusting it in Studio.' } }}
@for (middleware of vm().filteredMiddlewareProviderOptions(); track middleware.meta.name) {
{{ middleware.meta.label ? (middleware.meta.label | i18n) : middleware.meta.name }} @if (middleware.meta.deprecated) { } @if (middleware.unavailable) { {{ 'XP.Xpert.TemplateMiddlewareUnavailable' | translate: { Default: 'Unavailable in current runtime' } }} }
{{ middleware.meta.description ? (middleware.meta.description | i18n) : middleware.meta.name }}
@if (vm().selectedMiddlewares().includes(middleware.meta.name)) {
@if (vm().isMiddlewareRequired(middleware.meta.name)) { {{ 'XP.Xpert.MiddlewareRequiredBadge' | translate: { Default: 'Always load' } }} } @else { {{ 'XP.Xpert.MiddlewareOptionalBadge' | translate: { Default: 'Manual load' } }} }
}
} @empty { @if (vm().middlewareProviderOptions().length) {
{{ 'XP.Xpert.NoMatchingMiddlewares' | translate: { Default: 'No matching middlewares found' } }}
} @else {
{{ 'XP.Workflow.NoMiddlewaresAvailable' | translate: { Default: 'No middleware providers available' } }}
} }
} @case ('Skill1') {
{{ 'XP.Xpert.AddWorkspaceSkillsHelp' | translate : { Default: vm().usesWorkspaceSkillDefaults() ? 'All workspace skills shown here are enabled by default for ClawXpert. Uncheck any skill to exclude it.' : 'The first time you open this step, we sync the built-in public skill repository into the workspace and enable it by default. Unchecked public skills become this Xpert’s blacklist, while other workspace skills stay opt-in.' } }}
@if (vm().installingSkillPackage()) { {{ 'XP.Xpert.InstallingSkill' | translate: { Default: 'Installing…' } }} }
@if (!vm().workspaceId()) {
{{ 'XP.Xpert.WorkspaceRequiredForSkillInstall' | translate : { Default: 'Select a workspace first before installing or selecting skills for this Xpert via Skills Middleware.' } }}
} @else if (vm().templatePluginSkillInstallError()) {
{{ 'XP.Xpert.TemplatePluginSkillsInstallFailed' | translate: { Default: 'Failed to initialize template skills' } }}
{{ vm().templatePluginSkillInstallError() }}
} @else if (vm().skillState().loading) {
{{ 'XP.Xpert.LoadingWorkspaceSkills' | translate: { Default: 'Loading workspace skills…' } }}
} @else { @if (vm().skillState().errorMessage) {
{{ 'XP.Xpert.WorkspaceSkillsLoadFailed' | translate: { Default: 'Failed to load workspace skills' } }}
{{ vm().skillState().errorMessage }}
} @else if (!vm().skillState().skills.length) {
{{ 'XP.Xpert.NoWorkspaceSkillsAvailableDesc' | translate : { Default: 'No workspace skills installed yet. Use the install dialog to add a skill, then enable it here through Skills Middleware.' } }}
} @else {
@for (skill of vm().skillState().skills; track skill.id) { }
} } @if (vm().selectedSkillItems().length) {
{{ vm().selectedSkillItems().length }} {{ 'XP.KEY_WORDS.Selected' | translate: { Default: 'selected' } }}
@for (skill of vm().selectedSkillItems(); track skill.id) { }
} @else {
{{ 'XP.Workflow.NoSkillsAdded' | translate: { Default: 'No skills added yet' } }}
}
} @case ('Toolsets1') {
{{ 'XP.Xpert.TemplateToolsetsHelp' | translate : { Default: 'Select the configured workspace toolsets required by this assistant template. Missing built-in toolsets can be configured here before creating.' } }}
@if (!vm().workspaceId()) {
{{ 'XP.Xpert.WorkspaceRequiredForToolsets' | translate : { Default: 'Select a workspace first before choosing the built-in toolsets for this template.' } }}
} @else { @if (vm().templateToolsetInstallError()) {
{{ 'XP.Xpert.TemplateToolsetsInstallFailed' | translate: { Default: 'Failed to initialize template toolsets' } }}
{{ vm().templateToolsetInstallError() }}
}
@for (state of vm().templateToolsetSelectionStates(); track state.key) {
{{ state.dependency.provider }}
@if (state.loading) { {{ 'XP.Xpert.TemplateToolsetStatusLoading' | translate: { Default: 'Loading' } }} } @else if (state.selectedToolsetId) { {{ 'XP.Xpert.TemplateToolsetStatusReady' | translate: { Default: 'Ready' } }} } @else if (state.toolsets.length) { {{ 'XP.Xpert.SelectionRequired' | translate: { Default: 'Selection required' } }} } @else { {{ 'XP.Xpert.TemplateToolsetStatusMissing' | translate: { Default: 'Missing' } }} }
{{ 'XP.Xpert.TemplateToolsetPlugin' | translate: { Default: 'Plugin' } }} {{ state.dependency.pluginName }}
{{ 'XP.Xpert.TemplateToolsetAgent' | translate: { Default: 'Agent' } }} {{ state.dependency.targetAgentKey || '-' }}
{{ 'XP.Xpert.TemplateToolsetNode' | translate: { Default: 'Node' } }} {{ state.dependency.templateNodeKey }}
{{ 'XP.Xpert.TemplateToolsetDefaultInstance' | translate: { Default: 'Default' } }} {{ state.dependency.instanceName || '-' }}
@if (state.loading) {
{{ 'XP.Xpert.LoadingWorkspaceToolsets' | translate: { Default: 'Loading workspace toolsets…' } }}
} @else if (state.toolsets.length) {
@for (toolset of state.toolsets; track toolset.id) { {{ toolset.name || toolset.id }} }
@if (vm().getSelectedTemplateToolset(state); as selectedToolset) {
{{ selectedToolset.description || selectedToolset.name || selectedToolset.id }} @if (selectedToolset.tools?.length) { {{ selectedToolset.tools.length }} {{ 'XP.Xpert.TemplateToolsetToolsCount' | translate: { Default: 'tools' } }} }
} } @else {
{{ 'XP.Xpert.NoMatchingToolsetConfigured' | translate : { Default: 'No matching built-in toolset is configured in this workspace. Configure one to continue.' } }}
} @if (state.errorMessage) {
{{ state.errorMessage }}
}
} @empty {
{{ 'XP.Xpert.NoTemplateToolsetsRequired' | translate: { Default: 'No toolsets required' } }}
}
}
} @case ('WorkflowActionNodes1') {
{{ 'XP.Xpert.WorkflowActionNodesHelp' | translate : { Default: 'Choose the starter action nodes to place after the default Chat Trigger. We will connect them in a left-to-right workflow for you.' } }}
{{ 'XP.Workflow.Chat' | translate: { Default: 'Chat' } }}
{{ 'XP.Xpert.WorkflowChatTriggerIncluded' | translate: { Default: 'Always included as the first node in this starter workflow.' } }}
{{ 'XP.KEY_WORDS.Default' | translate: { Default: 'Default' } }}
@for (node of vm().workflowActionNodeOptions; track node.key) { }
} @case ('WorkflowTransformResponse1') {
{{ 'XP.Xpert.WorkflowTransformNodesHelp' | translate : { Default: 'Choose the transform and response nodes to append after the action stage. The selected nodes will keep the fixed starter order.' } }}
@for (node of vm().workflowTransformNodeOptions; track node.key) { }
} @case ('DataSource1') {
{{ 'XP.Xpert.SelectDataSources' | translate : { Default: 'Choose the data source providers to seed this knowledge pipeline. You can adjust their configuration later in Studio.' } }}
@for (provider of vm().dataSourceProviderOptions(); track provider.meta.name) { } @empty {
{{ 'XP.Xpert.NoDataSourcesAvailable' | translate: { Default: 'No data source providers available' } }}
}
} @case ('Processor1') {
{{ 'XP.Xpert.SelectProcessors' | translate : { Default: 'Choose the processors to run after the data source step. Detailed configuration stays in Studio.' } }}
@for (provider of vm().processorProviderOptions(); track provider.meta.name) { } @empty {
{{ 'XP.Xpert.NoProcessorsAvailable' | translate: { Default: 'No processor providers available' } }}
}
} @case ('Chunker1') {
{{ 'XP.Xpert.SelectChunkers' | translate : { Default: 'Choose the chunkers to split processed content before it reaches the knowledge base.' } }}
@for (provider of vm().chunkerProviderOptions(); track provider.name) { } @empty {
{{ 'XP.Xpert.NoChunkersAvailable' | translate: { Default: 'No chunker providers available' } }}
}
} @case ('ImageUnderstanding1') {
{{ 'XP.Xpert.SelectImageUnderstandings' | translate : { Default: 'Choose the image understanding providers needed for OCR or visual extraction. You can skip this step.' } }}
@for (provider of vm().understandingProviderOptions(); track provider.meta.name) { } @empty {
{{ 'XP.Xpert.NoImageUnderstandingsAvailable' | translate: { Default: 'No image understanding providers available' } }}
}
} }