<view class="chat-page {{appearanceClass}}" style="bottom: {{activeTab === 'chat' ? keyboardHeight : 0}}px">
  <!-- Segmented tab control — channel/thread management views plus agent DM tabs.
       radio-group owns mutual exclusion + emits the selected value via bindchange;
       the native radio dot is hidden and the labels are styled as a pill control. -->
  <view wx:if="{{kind === 'channel' || (kind === 'thread' && !draftThread) || (kind === 'dm' && dmPeerType === 'agent')}}" class="top-toolbar chat-segments chat-segments--{{tabLocaleClass}}">
    <radio-group class="segmented-control segmented-control--{{tabLocaleClass}} chat-segments__group" bindchange="onTabChange">
      <label class="segmented-control__item chat-segments__label {{activeTab === 'chat' ? 'segmented-control__item--active chat-segments__label--active' : ''}}">
        <radio value="chat" checked="{{activeTab === 'chat'}}" color="#ffffff" />
        <view class="icon icon--sm {{kind === 'thread' ? 'icon--messages-square' : 'icon--message-circle'}}"></view>
        <text class="segmented-control__text chat-segments__text">{{tabPrimaryLabel}}</text>
      </label>
      <label
        wx:if="{{kind === 'channel'}}"
        class="segmented-control__item chat-segments__label {{activeTab === 'threads' ? 'segmented-control__item--active chat-segments__label--active' : ''}}"
      >
        <radio value="threads" checked="{{activeTab === 'threads'}}" color="#ffffff" />
        <view class="icon icon--sm icon--messages-square"></view>
        <text class="segmented-control__text chat-segments__text">{{tabThreadsLabel}}</text>
      </label>
      <label
        wx:if="{{(kind === 'thread' && !draftThread) || (kind === 'dm' && dmPeerType === 'agent')}}"
        class="segmented-control__item chat-segments__label {{activeTab === 'activity' ? 'segmented-control__item--active chat-segments__label--active' : ''}}"
      >
        <radio value="activity" checked="{{activeTab === 'activity'}}" color="#ffffff" />
        <view class="icon icon--sm icon--activity"></view>
        <text class="segmented-control__text chat-segments__text">{{tabActivityLabel}}</text>
      </label>
      <label
        wx:if="{{kind === 'channel' || (kind === 'thread' && !draftThread)}}"
        class="segmented-control__item chat-segments__label {{activeTab === 'members' ? 'segmented-control__item--active chat-segments__label--active' : ''}}"
      >
        <radio value="members" checked="{{activeTab === 'members'}}" color="#ffffff" />
        <view class="icon icon--sm icon--users"></view>
        <text class="segmented-control__text chat-segments__text">{{tabMembersLabel}}</text>
      </label>
      <label
        wx:if="{{kind === 'channel' || (kind === 'thread' && !draftThread) || (kind === 'dm' && dmPeerType === 'agent')}}"
        class="segmented-control__item chat-segments__label {{activeTab === 'tasks' ? 'segmented-control__item--active chat-segments__label--active' : ''}}"
      >
        <radio value="tasks" checked="{{activeTab === 'tasks'}}" color="#ffffff" />
        <view class="icon icon--sm icon--list-checks"></view>
        <text class="segmented-control__text chat-segments__text">{{tabTasksLabel}}</text>
      </label>
      <label
        wx:if="{{kind === 'channel' || (kind === 'dm' && dmPeerType === 'agent')}}"
        class="segmented-control__item chat-segments__label {{activeTab === 'scheduled-messages' ? 'segmented-control__item--active chat-segments__label--active' : ''}}"
      >
        <radio value="scheduled-messages" checked="{{activeTab === 'scheduled-messages'}}" color="#ffffff" />
        <view class="icon icon--sm icon--clock"></view>
        <text class="segmented-control__text chat-segments__text">{{tabScheduledMessagesLabel}}</text>
      </label>
      <label
        wx:if="{{kind === 'thread' && !draftThread}}"
        class="segmented-control__item chat-segments__label {{activeTab === 'review' ? 'segmented-control__item--active chat-segments__label--active' : ''}}"
      >
        <radio value="review" checked="{{activeTab === 'review'}}" color="#ffffff" />
        <view class="icon icon--sm icon--review"></view>
        <text class="segmented-control__text chat-segments__text">{{tabReviewLabel}}</text>
      </label>
      <label
        wx:if="{{kind === 'dm' && dmPeerType === 'agent'}}"
        class="segmented-control__item chat-segments__label {{activeTab === 'settings' ? 'segmented-control__item--active chat-segments__label--active' : ''}}"
      >
        <radio value="settings" checked="{{activeTab === 'settings'}}" color="#ffffff" />
        <view class="icon icon--sm icon--settings"></view>
        <text class="segmented-control__text chat-segments__text">{{tabSettingsLabel}}</text>
      </label>
    </radio-group>
  </view>

  <!-- Chat / replies view (default) -->
  <block wx:if="{{activeTab === 'chat'}}">
    <message-list
      class="messages"
      messages="{{messages}}"
      conversation-kind="{{kind}}"
      initial-scroll-mode="{{initialScrollMode}}"
      unread-divider-message-id="{{unreadDividerMessageId}}"
      top-message="{{kind === 'thread' ? parentMessage : null}}"
      reply-thread-summaries="{{replyThreadSummaries}}"
      show-thread-summaries="{{kind === 'channel'}}"
      locale-version="{{localeVersion}}"
      loading="{{loading}}"
      loading-more="{{loadingMore}}"
      error="{{error}}"
      agent-working-label="{{agentWorkingLabel}}"
      bindloadmore="onLoadMore"
      bindscroll="onMessageScroll"
      bindscrollinteraction="onMessageScrollInteraction"
      bindopenthread="onOpenThread"
      bindmentiontap="onMessageMentionTap"
      bindagenttap="onAgentAvatarTap"
      bindagentlongpress="onAgentAvatarLongPress"
      bindretrymessage="onRetryMessage"
    />
    <view class="input-area">
      <composer
        wx:if="{{kind !== 'thread' || !draftThread || parentMessage}}"
        class="composer"
        sending="{{sending || imageSending}}"
        locale-version="{{localeVersion}}"
        mention-candidates="{{mentionCandidates}}"
        reserve-safe-area="{{keyboardHeight === 0 && !(kind === 'channel' || (kind === 'thread' && !draftThread))}}"
        bindsend="onSend"
        bindsendimage="onSendImage"
        bindmentionquerychange="onMentionQueryChange"
      />
      <view
        wx:if="{{kind === 'channel' || (kind === 'thread' && !draftThread)}}"
        class="notification-summary"
        bindtap="onOpenNotificationSheet"
        hover-class="notification-summary--hover"
      >
        <view class="notification-summary__icon icon icon--sm icon--bell"></view>
        <text class="notification-summary__text">{{notificationSummaryLabel}}</text>
      </view>
    </view>
  </block>

  <!-- Threads view (channel 话题 tab) — lists the channel's reply threads -->
  <block wx:elif="{{activeTab === 'threads'}}">
    <view class="chat-tab-view">
      <scroll-view scroll-y class="chat-tab-view__body" bindscrolltolower="onLoadMoreThreads" lower-threshold="200">
        <view wx:if="{{threadsViewStatus === 'loading'}}" class="threads-view__content threads-view__content--skeleton">
          <view wx:for="{{threadSkeletonRows}}" wx:key="key" class="threads-view__row threads-view__row--skeleton threads-view__row--skeleton-{{index}}">
            <view class="threads-view__body">
              <view class="threads-view__head">
                <view class="tab-skeleton tab-skeleton--text threads-view__title-skeleton" style="width: {{item.titleWidth}}"></view>
                <view class="tab-skeleton tab-skeleton--text threads-view__time-skeleton"></view>
              </view>
              <view wx:if="{{item.lineWidth}}" class="tab-skeleton tab-skeleton--text threads-view__last-reply-skeleton" style="width: {{item.lineWidth}}"></view>
              <view class="threads-view__meta threads-view__meta--skeleton">
                <view wx:if="{{item.metaWidth}}" class="threads-view__participants">
                  <view class="threads-view__participant tab-skeleton"></view>
                  <view class="threads-view__participant tab-skeleton"></view>
                  <view class="threads-view__participant tab-skeleton"></view>
                </view>
                <view class="tab-skeleton tab-skeleton--text threads-view__reply-count-skeleton"></view>
              </view>
            </view>
          </view>
        </view>
        <view wx:elif="{{threadsViewStatus === 'error'}}" class="chat-tab-view__state chat-tab-view__state--error">{{threadsViewError}}</view>
        <view wx:elif="{{threadsViewStatus === 'loaded'}}" class="threads-view__content">
          <view wx:if="{{threadsViewRows.length === 0}}" class="chat-tab-view__state chat-tab-view__state--muted">{{threadsEmptyLabel}}</view>
          <view
            wx:for="{{threadsViewVisible}}"
            wx:key="key"
            class="threads-view__row"
            data-thread-channel-id="{{item.threadChannelId}}"
            data-parent-message-id="{{item.parentMessageId}}"
            data-title="{{item.title}}"
            bindtap="onTapThreadRow"
            hover-class="threads-view__row--hover"
          >
            <view class="threads-view__body">
              <view class="threads-view__head">
                <text class="threads-view__title">{{item.title}}</text>
                <text wx:if="{{item.lastLabel}}" class="threads-view__time">{{item.lastLabel}}</text>
              </view>
              <text wx:if="{{item.lastReplyLabel}}" class="threads-view__last-reply">{{item.lastReplyLabel}}</text>
              <view class="threads-view__meta">
                <view wx:if="{{item.participants.length > 0}}" class="threads-view__participants">
                  <view wx:for="{{item.participants}}" wx:for-item="p" wx:key="key" class="threads-view__participant">
                    <text class="threads-view__participant-initials">{{p.initials}}</text>
                    <avatar-image wx:if="{{p.avatarUrl}}" class="threads-view__participant-img" source="{{p.avatarUrl}}">
                      <text class="threads-view__participant-initials">{{p.initials}}</text>
                    </avatar-image>
                  </view>
                </view>
                <text>{{item.replyCountLabel}}</text>
              </view>
            </view>
          </view>
          <view wx:if="{{threadsViewHasMore}}" class="threads-view__more">
            <loading-dots />
          </view>
        </view>
      </scroll-view>
    </view>
  </block>

  <!-- Members view — one search box doubles as the add flow -->
  <block wx:elif="{{activeTab === 'members'}}">
    <view class="chat-tab-view">
      <view class="member-sheet__search">
        <view class="member-sheet__search-icon icon icon--sm icon--search"></view>
        <input
          class="member-sheet__search-input"
          type="text"
          placeholder="{{memberSearchPlaceholder}}"
          placeholder-class="member-sheet__search-placeholder"
          value="{{memberAddQuery}}"
          bindinput="onMemberAddQueryInput"
          confirm-type="search"
        />
        <view wx:if="{{memberAddQuery}}" class="member-sheet__search-clear icon icon--sm icon--x-muted" bindtap="onClearMemberAddQuery"></view>
      </view>

      <scroll-view scroll-y class="chat-tab-view__body">
        <!-- Typing a query → surface addable candidates, plus any
             inherited collaborators matched by the query as read-only
             rows so the user understands they are already a member via
             the parent channel and cannot be re-added. Fail-closed:
             when `memberAddReady=false` (any roster source rejected),
             error renders preferentially regardless of whether the
             filtered/inherited surfaces are non-empty. -->
        <block wx:if="{{memberAddQuery}}">
          <view wx:if="{{memberAddError}}" class="chat-tab-view__state chat-tab-view__state--error">{{memberAddError}}</view>
          <view wx:if="{{memberAddInheritedMatches.length > 0}}" class="member-sheet__section">
            <view class="member-sheet__section-title">{{memberInheritedTitle}}</view>
            <view
              wx:for="{{memberAddInheritedMatches}}"
              wx:key="key"
              class="member-sheet__row member-sheet__row--readonly"
            >
              <authenticated-avatar source="{{item.avatarUrl}}" initials="{{item.initials}}" kind="{{item.kind}}" />
              <view class="member-sheet__row-body">
                <text class="member-sheet__row-title">{{item.title}}</text>
                <text wx:if="{{item.subtitle}}" class="member-sheet__row-subtitle">{{item.subtitle}}</text>
              </view>
              <text class="member-sheet__row-action member-sheet__row-action--muted">{{memberInheritedLabel}}</text>
            </view>
          </view>
          <view wx:if="{{memberAddReady}}" class="member-sheet__section">
            <view class="member-sheet__section-title">{{memberAddableTitle}}</view>
            <view wx:if="{{memberAddLoading && memberAddFilteredCandidates.length === 0 && memberAddInheritedMatches.length === 0}}" class="member-sheet__section member-sheet__section--skeleton">
              <view wx:for="{{tabSkeletonRows}}" wx:key="key" class="member-sheet__row member-sheet__row--skeleton">
                <view class="member-sheet__avatar tab-skeleton"></view>
                <view class="member-sheet__row-body">
                  <view class="tab-skeleton tab-skeleton--text member-sheet__title-skeleton" style="width: {{item.titleWidth}}"></view>
                  <view class="tab-skeleton tab-skeleton--text member-sheet__subtitle-skeleton" style="width: {{item.lineWidth}}"></view>
                </view>
                <view class="tab-skeleton tab-skeleton--text member-sheet__action-skeleton"></view>
              </view>
            </view>
            <view wx:elif="{{memberAddFilteredCandidates.length === 0 && memberAddInheritedMatches.length === 0}}" class="chat-tab-view__state chat-tab-view__state--muted">{{memberNoMatchLabel}}</view>
            <view
              wx:for="{{memberAddFilteredCandidates}}"
              wx:key="key"
              class="member-sheet__row"
              data-key="{{item.key}}"
              bindtap="onTapAddMemberCandidate"
              hover-class="member-sheet__row--hover"
            >
              <authenticated-avatar source="{{item.avatarUrl}}" initials="{{item.initials}}" kind="{{item.kind}}" />
              <view class="member-sheet__row-body">
                <text class="member-sheet__row-title">{{item.title}}</text>
                <text wx:if="{{item.subtitle}}" class="member-sheet__row-subtitle">{{item.subtitle}}</text>
              </view>
              <text class="member-sheet__row-action">{{addingMemberKey === item.key ? memberAddingLabel : memberAddLabel}}</text>
            </view>
          </view>
        </block>

        <!-- Empty query → current members. Inherited collaborators are
             rendered by `membersCollaboratorSections` below (which already
             includes the `inherited-collaborators` section from
             members-sheet.ts) — do NOT also render `inheritedCollaboratorRows`
             here or the same people appear twice. Frequent rows are hidden
             when the snapshot failed (`!memberAddReady`) so a broken CTA
             is never offered. -->
        <block wx:else>
          <view wx:if="{{memberAddError}}" class="chat-tab-view__state chat-tab-view__state--error">{{memberAddError}}</view>
          <view wx:if="{{memberAddReady && memberFrequentRows.length > 0}}" class="member-sheet__section">
            <view class="member-sheet__section-title">{{memberFrequentTitle}}</view>
            <view
              wx:for="{{memberFrequentRows}}"
              wx:key="key"
              class="member-sheet__row"
              data-key="{{item.key}}"
              bindtap="onTapAddMemberCandidate"
              hover-class="member-sheet__row--hover"
            >
              <authenticated-avatar source="{{item.avatarUrl}}" initials="{{item.initials}}" kind="{{item.kind}}" />
              <view class="member-sheet__row-body">
                <text class="member-sheet__row-title">{{item.title}}</text>
                <text wx:if="{{item.subtitle}}" class="member-sheet__row-subtitle">{{item.subtitle}}</text>
              </view>
              <text class="member-sheet__row-action">{{addingMemberKey === item.key ? memberAddingLabel : memberAddLabel}}</text>
            </view>
          </view>
          <view wx:if="{{membersSheetStatus === 'loading'}}" class="members-sheet__content members-sheet__content--skeleton">
            <view class="members-sheet__section">
              <view class="tab-skeleton tab-skeleton--text members-sheet__section-title-skeleton"></view>
              <view wx:for="{{tabSkeletonRows}}" wx:key="key" class="members-sheet__row members-sheet__row--skeleton">
                <view class="members-sheet__avatar tab-skeleton"></view>
                <view class="members-sheet__row-body">
                  <view class="tab-skeleton tab-skeleton--text members-sheet__title-skeleton" style="width: {{item.titleWidth}}"></view>
                  <view class="tab-skeleton tab-skeleton--text members-sheet__subtitle-skeleton" style="width: {{item.lineWidth}}"></view>
                </view>
              </view>
            </view>
          </view>
          <view wx:elif="{{membersSheetStatus === 'error'}}" class="chat-tab-view__state chat-tab-view__state--error">{{membersSheetError}}</view>
          <view wx:elif="{{membersSheetSections.length === 0 && memberFrequentRows.length === 0}}" class="chat-tab-view__state chat-tab-view__state--muted">{{membersEmptyLabel}}</view>
          <view class="members-overview__collaborators">
            <view wx:for="{{membersCollaboratorSections}}" wx:key="key" wx:for-item="section" class="members-sheet__section">
              <view class="members-sheet__section-title">{{section.title}}</view>
              <view wx:for="{{section.rows}}" wx:key="key" wx:for-item="row" class="members-sheet__row">
                <authenticated-avatar source="{{row.avatarUrl}}" initials="{{row.initials}}" kind="{{row.kind}}" />
                <view class="members-sheet__row-body">
                  <view class="members-sheet__row-title-line">
                    <text class="members-sheet__row-title">{{row.title}}</text>
                    <text wx:if="{{row.badgeLabel}}" class="members-sheet__row-badge">{{row.badgeLabel}}</text>
                  </view>
                  <text wx:if="{{row.subtitle}}" class="members-sheet__row-subtitle">{{row.subtitle}}</text>
                </view>
                <picker
                  wx:if="{{row.relation === 'collaborator'}}"
                  mode="selector"
                  range="{{memberExpiryOptionLabels}}"
                  disabled="{{updatingMemberExpiryKey === row.key}}"
                  data-key="{{row.key}}"
                  bindchange="onMemberExpiryChange"
                >
                  <view class="members-sheet__expiry-trigger {{updatingMemberExpiryKey === row.key ? 'members-sheet__expiry-trigger--loading' : ''}}">
                    <text class="members-sheet__expiry-label">{{updatingMemberExpiryKey === row.key ? memberExpiryUpdatingLabel : row.expiryLabel}}</text>
                    <view class="members-sheet__expiry-icon icon icon--sm icon--chevron-down"></view>
                  </view>
                </picker>
              </view>
            </view>
          </view>

          <view class="members-overview__notifications" wx:if="{{notificationSheetStatus === 'loaded'}}">
            <view class="notification-sheet__self-row">
              <text class="notification-sheet__self-label">{{notificationSelfLabel}}</text>
              <view class="notification-sheet__segmented">
                <view
                  class="notification-sheet__segment {{notificationSelf.state === 'active' ? 'notification-sheet__segment--active' : ''}} {{notificationReadOnly ? 'notification-sheet__segment--disabled' : ''}}"
                  data-state="active"
                  bindtap="onSetSelfNotificationState"
                >
                  <text>{{notificationAllLabel}}</text>
                </view>
                <view
                  class="notification-sheet__segment {{notificationSelf.state === 'quiet' ? 'notification-sheet__segment--active' : ''}} {{notificationReadOnly ? 'notification-sheet__segment--disabled' : ''}}"
                  data-state="quiet"
                  bindtap="onSetSelfNotificationState"
                >
                  <text>{{notificationMentionLabel}}</text>
                </view>
                <view
                  class="notification-sheet__segment {{notificationSelf.state === 'mute' ? 'notification-sheet__segment--active' : ''}} {{notificationReadOnly ? 'notification-sheet__segment--disabled' : ''}}"
                  data-state="mute"
                  bindtap="onSetSelfNotificationState"
                >
                  <text>{{notificationMuteLabel}}</text>
                </view>
              </view>
            </view>
          </view>

          <view class="members-overview__members">
            <view wx:for="{{membersMemberSections}}" wx:key="key" wx:for-item="section" class="members-sheet__section">
              <view class="members-sheet__section-title">{{section.title}}</view>
              <view wx:for="{{section.rows}}" wx:key="key" wx:for-item="row" class="members-sheet__row">
                <authenticated-avatar source="{{row.avatarUrl}}" initials="{{row.initials}}" kind="{{row.kind}}" />
                <view class="members-sheet__row-body">
                  <view class="members-sheet__row-title-line">
                    <text class="members-sheet__row-title">{{row.title}}</text>
                    <text wx:if="{{row.badgeLabel}}" class="members-sheet__row-badge">{{row.badgeLabel}}</text>
                  </view>
                  <text wx:if="{{row.subtitle}}" class="members-sheet__row-subtitle">{{row.subtitle}}</text>
                </view>
                <picker
                  wx:if="{{row.relation === 'collaborator'}}"
                  mode="selector"
                  range="{{memberExpiryOptionLabels}}"
                  disabled="{{updatingMemberExpiryKey === row.key}}"
                  data-key="{{row.key}}"
                  bindchange="onMemberExpiryChange"
                >
                  <view class="members-sheet__expiry-trigger {{updatingMemberExpiryKey === row.key ? 'members-sheet__expiry-trigger--loading' : ''}}">
                    <text class="members-sheet__expiry-label">{{updatingMemberExpiryKey === row.key ? memberExpiryUpdatingLabel : row.expiryLabel}}</text>
                    <view class="members-sheet__expiry-icon icon icon--sm icon--chevron-down"></view>
                  </view>
                </picker>
                <view
                  wx:if="{{row.canToggleWake}}"
                  class="members-sheet__wake-toggle {{row.autoWake ? 'members-sheet__wake-toggle--on' : ''}}"
                  data-agent-id="{{row.agentId}}"
                  bindtap="onToggleAgentWakeState"
                  hover-class="members-sheet__wake-toggle--hover"
                >
                  <view class="members-sheet__wake-icon icon icon--sm {{row.autoWake ? 'icon--bell' : 'icon--bell-off'}}"></view>
                  <text class="members-sheet__wake-label">{{row.autoWake ? notificationAutoWakeLabel : notificationMentionOnlyLabel}}</text>
                </view>
              </view>
              <view
                wx:if="{{section.key === 'humans' && membersHumansHasMore}}"
                class="members-sheet__load-more"
                bindtap="onLoadMoreMembers"
                hover-class="members-sheet__load-more--hover"
              >{{membersLoadMoreLabel}}</view>
            </view>
          </view>
        </block>
      </scroll-view>
    </view>
  </block>

  <!-- Activity view (thread only) — horizontal agent tabs above the activity feed -->
  <block wx:elif="{{activeTab === 'activity'}}">
    <view class="chat-tab-view">
      <scroll-view
        wx:if="{{referenceSheetStatus === 'loading' || activeAgents.length >= 1}}"
        scroll-x
        scroll-with-animation
        enhanced
        show-scrollbar="{{false}}"
        class="activity-agent-tabs"
        scroll-into-view="activity-agent-tab-{{activeAgentIndex}}"
      >
        <view class="activity-agent-tabs__track">
          <block wx:if="{{referenceSheetStatus === 'loading' && activeAgentTabs.length === 0}}">
            <view wx:for="{{tabSkeletonTabs}}" wx:key="key" class="activity-agent-tab activity-agent-tab--skeleton">
              <view class="activity-agent-tab__avatar tab-skeleton"></view>
              <view class="tab-skeleton tab-skeleton--text activity-agent-tab__name-skeleton" style="width: {{item.titleWidth}}"></view>
            </view>
          </block>
          <block wx:else>
            <view
              wx:for="{{activeAgentTabs}}"
              wx:key="key"
              id="activity-agent-tab-{{index}}"
              class="activity-agent-tab {{activeAgentIndex === index ? 'activity-agent-tab--active' : ''}}"
              data-index="{{index}}"
              bindtap="onTapAgentActivityTab"
              hover-class="activity-agent-tab--hover"
            >
              <view class="activity-agent-tab__avatar">
                <avatar-image wx:if="{{item.avatarUrl}}" class="activity-agent-tab__avatar-img" source="{{item.avatarUrl}}">
                  <view class="activity-agent-tab__avatar-icon icon icon--sm icon--agent"></view>
                </avatar-image>
                <view wx:else class="activity-agent-tab__avatar-icon icon icon--sm icon--agent"></view>
              </view>
              <text class="activity-agent-tab__name">{{item.displayName}}</text>
            </view>
          </block>
        </view>
      </scroll-view>

      <scroll-view scroll-y class="chat-tab-view__body">
        <view class="reference-sheet__content">
          <view wx:if="{{referenceSheetStatus === 'loading'}}" class="reference-activity reference-activity--skeleton">
            <view wx:for="{{tabSkeletonRows}}" wx:key="key" class="reference-activity__item">
              <view class="tab-skeleton tab-skeleton--text reference-activity__time-skeleton"></view>
              <view class="reference-activity__body">
                <view class="tab-skeleton tab-skeleton--text reference-activity__name-skeleton" style="width: {{item.titleWidth}}"></view>
                <view class="reference-activity__detail reference-activity__detail--skeleton">
                  <view class="tab-skeleton tab-skeleton--text reference-activity__json-skeleton" style="width: {{item.lineWidth}}"></view>
                  <view class="tab-skeleton tab-skeleton--text reference-activity__json-skeleton" style="width: {{item.metaWidth}}"></view>
                </view>
              </view>
            </view>
          </view>
          <view wx:elif="{{referenceSheetStatus === 'error'}}" class="chat-tab-view__state chat-tab-view__state--error">{{referenceSheetError}}</view>
          <view wx:elif="{{activeAgent}}" class="reference-activity">
            <view wx:if="{{activeAgentActivity.length === 0}}" class="reference-activity__state">{{activityEmptyLabel}}</view>
            <view wx:else>
              <view wx:for="{{activeAgentActivity}}" wx:key="timestamp" class="reference-activity__item">
                <text class="reference-activity__time">{{item.displayTime}}</text>
                <view class="reference-activity__body">
                  <text class="reference-activity__name">{{item.displayTitle}}</text>
                  <view wx:if="{{item.displayDetailLines.length > 0}}" class="reference-activity__detail">
                    <view
                      wx:for="{{item.displayDetailLines}}"
                      wx:for-item="line"
                      wx:key="id"
                      class="reference-activity__json-line"
                      style="padding-left: {{line.depth * 24}}rpx"
                    >
                      <text
                        wx:for="{{line.tokens}}"
                        wx:for-item="token"
                        wx:for-index="ti"
                        wx:key="ti"
                        class="reference-activity__json-token reference-activity__json-token--{{token.kind}}"
                      >{{token.text}}</text>
                    </view>
                  </view>
                </view>
              </view>
            </view>
          </view>
        </view>
      </scroll-view>
    </view>
  </block>

  <!-- Tasks view -->
  <block wx:elif="{{activeTab === 'tasks'}}">
    <view class="chat-tab-view">
      <scroll-view scroll-y class="chat-tab-view__body">
        <view wx:if="{{taskSheetStatus === 'loading'}}" class="task-sheet__content task-sheet__content--skeleton">
          <view class="task-sheet__section">
            <view class="tab-skeleton tab-skeleton--text task-sheet__section-title-skeleton"></view>
            <view wx:for="{{tabSkeletonRows}}" wx:key="key" class="task-sheet__row task-sheet__row--skeleton">
              <view class="task-sheet__row-status tab-skeleton"></view>
              <view class="task-sheet__row-body">
                <view class="task-sheet__row-header">
                  <view class="tab-skeleton tab-skeleton--text task-sheet__ref-skeleton"></view>
                  <view class="tab-skeleton tab-skeleton--text task-sheet__title-skeleton" style="width: {{item.titleWidth}}"></view>
                </view>
                <view class="tab-skeleton tab-skeleton--text task-sheet__meta-skeleton" style="width: {{item.lineWidth}}"></view>
              </view>
            </view>
          </view>
        </view>
        <view wx:elif="{{taskSheetStatus === 'error'}}" class="chat-tab-view__state chat-tab-view__state--error">{{taskSheetError}}</view>
        <view wx:elif="{{taskSheetStatus === 'loaded'}}" class="task-sheet__content">
          <view wx:if="{{taskSheetActiveRows.length === 0 && taskSheetDoneRows.length === 0}}" class="chat-tab-view__state chat-tab-view__state--muted">{{tasksEmptyLabel}}</view>

          <view wx:if="{{taskSheetActiveRows.length > 0}}" class="task-sheet__section">
            <view class="task-sheet__section-title">{{tasksActiveLabel}} · {{taskSheetActiveCount}}</view>
            <view wx:for="{{taskSheetActiveRows}}" wx:key="key" class="task-sheet__row" data-channel-id="{{item.channelId}}" data-task-number="{{item.taskNumber}}" data-title="{{item.title}}" data-status="{{item.status}}" data-assignee="{{item.assignee}}" bindtap="onOpenTaskDetail">
              <view class="task-sheet__row-status task-sheet__row-status--{{item.status}}"></view>
              <view class="task-sheet__row-body">
                <view class="task-sheet__row-header">
                  <text class="task-sheet__row-ref">#t{{item.taskNumber}}</text>
                  <text class="task-sheet__row-title">{{item.title}}</text>
                  <view wx:if="{{item.unreadCount > 0}}" class="task-sheet__row-badge">{{item.unreadCount > 99 ? '99+' : item.unreadCount}}</view>
                  <view wx:elif="{{item.unreadDot}}" class="task-sheet__row-dot"></view>
                </view>
                <view class="task-sheet__row-meta">
                  <text>{{item.statusLabel}}</text>
                  <text wx:if="{{item.assignee}}" class="task-sheet__row-sep">·</text>
                  <text wx:if="{{item.assignee}}">{{item.assignee}}</text>
                </view>
              </view>
            </view>
          </view>

          <view wx:if="{{taskSheetDoneRows.length > 0}}" class="task-sheet__section">
            <view class="task-sheet__section-title">{{tasksDoneLabel}} · {{taskSheetDoneCount}}</view>
            <view wx:for="{{taskSheetDoneRows}}" wx:key="key" class="task-sheet__row task-sheet__row--done" data-channel-id="{{item.channelId}}" data-task-number="{{item.taskNumber}}" data-title="{{item.title}}" data-status="{{item.status}}" data-assignee="{{item.assignee}}" bindtap="onOpenTaskDetail">
              <view class="task-sheet__row-status task-sheet__row-status--done"></view>
              <view class="task-sheet__row-body">
                <view class="task-sheet__row-header">
                  <text class="task-sheet__row-ref">#t{{item.taskNumber}}</text>
                  <text class="task-sheet__row-title">{{item.title}}</text>
                </view>
                <view class="task-sheet__row-meta">
                  <text>{{item.statusLabel}}</text>
                  <text wx:if="{{item.assignee}}" class="task-sheet__row-sep">·</text>
                  <text wx:if="{{item.assignee}}">{{item.assignee}}</text>
                </view>
              </view>
            </view>
          </view>
        </view>
      </scroll-view>
    </view>
  </block>

  <!-- Scheduled messages view — scoped to channel and agent DM. -->
  <block wx:elif="{{activeTab === 'scheduled-messages'}}">
    <view class="chat-tab-view">
      <scroll-view scroll-y class="chat-tab-view__body">
        <view wx:if="{{scheduleSheetStatus === 'loading'}}" class="schedule-sheet__content schedule-sheet__content--skeleton">
          <view class="schedule-sheet__section">
            <view class="tab-skeleton tab-skeleton--text schedule-sheet__section-title-skeleton"></view>
            <view wx:for="{{tabSkeletonRows}}" wx:key="key" class="schedule-sheet__row schedule-sheet__row--skeleton">
              <view class="schedule-sheet__row-status tab-skeleton"></view>
              <view class="schedule-sheet__row-body">
                <view class="tab-skeleton tab-skeleton--text schedule-sheet__title-skeleton" style="width: {{item.titleWidth}}"></view>
                <view class="tab-skeleton tab-skeleton--text schedule-sheet__meta-skeleton" style="width: {{item.lineWidth}}"></view>
              </view>
            </view>
          </view>
        </view>
        <view wx:elif="{{scheduleSheetStatus === 'error'}}" class="chat-tab-view__state chat-tab-view__state--error">{{scheduleSheetError}}</view>
        <view wx:elif="{{scheduleSheetStatus === 'loaded'}}" class="schedule-sheet__content">
          <view wx:if="{{scheduleSheetRows.length === 0}}" class="chat-tab-view__state chat-tab-view__state--muted">{{schedulesEmptyLabel}}</view>
          <view wx:if="{{scheduleSheetRows.length > 0}}" class="schedule-sheet__section">
            <view class="schedule-sheet__section-title">{{tabScheduledMessagesLabel}} · {{scheduleSheetCount}}</view>
            <view wx:for="{{scheduleSheetRows}}" wx:key="key" class="schedule-sheet__row schedule-sheet__row--{{item.status}}">
              <view class="schedule-sheet__row-status schedule-sheet__row-status--{{item.status}}"></view>
              <view class="schedule-sheet__row-body">
                <view class="schedule-sheet__row-header">
                  <text class="schedule-sheet__row-title">{{item.name}}</text>
                  <text class="schedule-sheet__row-badge schedule-sheet__row-badge--{{item.status}}">{{item.statusLabel}}</text>
                </view>
                <text class="schedule-sheet__row-message">{{item.messagePreview}}</text>
                <view class="schedule-sheet__row-meta">
                  <text>{{item.nextLabel}}</text>
                  <text wx:if="{{item.targetLabel}}" class="schedule-sheet__row-sep">·</text>
                  <text wx:if="{{item.targetLabel}}">{{item.targetLabel}}</text>
                </view>
              </view>
            </view>
          </view>
        </view>
      </scroll-view>
    </view>
  </block>

  <!-- Review view — compact mobile summary for reply threads -->
  <block wx:elif="{{activeTab === 'review'}}">
    <view class="chat-tab-view">
      <scroll-view scroll-y class="chat-tab-view__body">
        <view wx:if="{{reviewSheetStatus === 'loading'}}" class="review-sheet__content review-sheet__content--skeleton">
          <view class="review-sheet__card">
            <view wx:for="{{tabSkeletonRows}}" wx:key="key" class="review-sheet__summary-row">
              <view class="tab-skeleton tab-skeleton--text review-sheet__label-skeleton"></view>
              <view class="tab-skeleton tab-skeleton--text review-sheet__value-skeleton" style="width: {{item.lineWidth}}"></view>
            </view>
          </view>
          <view wx:for="{{tabSkeletonRows}}" wx:key="key" class="review-sheet__file-row review-sheet__file-row--skeleton">
            <view class="tab-skeleton tab-skeleton--text review-sheet__file-path-skeleton" style="width: {{item.titleWidth}}"></view>
            <view class="tab-skeleton tab-skeleton--text review-sheet__file-badge-skeleton"></view>
          </view>
        </view>
        <view wx:if="{{reviewContexts.length > 0}}" class="review-sheet__section">
          <view class="review-sheet__section-title">{{reviewContextLabel}}</view>
          <picker
            class="review-sheet__context-picker"
            mode="selector"
            range="{{reviewContextTitles}}"
            value="{{reviewSelectedContextIndex}}"
            bindchange="onChangeReviewContext"
          >
            <view class="review-sheet__context-trigger">
              <text class="review-sheet__context-trigger-title">{{reviewContexts[reviewSelectedContextIndex].title}}</text>
              <text wx:if="{{reviewContexts[reviewSelectedContextIndex].subtitle}}" class="review-sheet__context-trigger-subtitle">{{reviewContexts[reviewSelectedContextIndex].subtitle}}</text>
              <view class="review-sheet__context-trigger-icon icon icon--sm icon--chevron-down"></view>
            </view>
          </picker>
        </view>
        <view wx:if="{{reviewSheetStatus === 'error'}}" class="chat-tab-view__state chat-tab-view__state--error">{{reviewSheetError}}</view>
        <view wx:elif="{{reviewSheetStatus === 'loaded'}}" class="review-sheet__content">
          <view
            wx:if="{{reviewContexts.length === 0 && reviewSummaryRows.length === 0 && reviewBranchFiles.length === 0 && reviewWorkingFiles.length === 0}}"
            class="chat-tab-view__state chat-tab-view__state--muted"
          >{{reviewEmptyLabel}}</view>

          <view wx:if="{{reviewSummaryRows.length > 0}}" class="review-sheet__section">
            <view class="review-sheet__section-header" bindtap="onToggleReviewSummary" hover-class="review-sheet__section-header--hover">
              <text class="review-sheet__section-title">{{reviewSummaryLabel}}</text>
              <view class="review-sheet__section-toggle">
                <text wx:if="{{!reviewSummaryCollapsed}}" class="review-sheet__section-toggle-text">{{reviewCollapseLabel}}</text>
                <text wx:else class="review-sheet__section-toggle-text">{{reviewExpandLabel}}</text>
                <view class="icon icon--sm {{reviewSummaryCollapsed ? 'icon--chevron-right' : 'icon--chevron-down'}}"></view>
              </view>
            </view>
            <view wx:if="{{reviewSummaryCollapsed}}" class="review-sheet__summary-headline">
              <text wx:if="{{reviewSummaryHeadline}}">{{reviewSummaryHeadline}}</text>
              <text wx:else class="review-sheet__summary-headline--muted">{{reviewExpandLabel}}</text>
            </view>
            <view wx:else class="review-sheet__card">
              <view wx:for="{{reviewSummaryRows}}" wx:key="key" class="review-sheet__summary-row">
                <text class="review-sheet__summary-label">{{item.label}}</text>
                <text class="review-sheet__summary-value">{{item.value}}</text>
              </view>
            </view>
          </view>

          <view class="review-sheet__section">
            <view class="review-sheet__auto-expand-row">
              <text class="review-sheet__auto-expand-label">{{reviewAutoExpandLabel}}</text>
              <switch
                class="review-sheet__auto-expand-switch"
                checked="{{reviewAutoExpand}}"
                color="#3b82f6"
                bindchange="onToggleReviewAutoExpand"
              />
            </view>
          </view>

          <view class="review-sheet__section">
            <view class="review-sheet__section-title">{{reviewBranchFilesLabel}} · {{reviewBranchFileCount}}</view>
            <view wx:if="{{reviewBranchFiles.length === 0}}" class="chat-tab-view__state chat-tab-view__state--muted review-sheet__empty-section">{{reviewNoFilesLabel}}</view>
            <view
              wx:for="{{reviewBranchFiles}}"
              wx:key="key"
              class="review-sheet__file-row review-sheet__file-row--branch {{item.expanded ? 'review-sheet__file-row--expanded' : ''}}"
              data-key="{{item.key}}"
              data-scope="branch"
              bindtap="onTapReviewFile"
              hover-class="review-sheet__file-row--hover"
            >
              <view class="review-sheet__file-summary">
                <view class="review-sheet__file-body">
                  <text class="review-sheet__file-path">{{item.path}}</text>
                  <text wx:if="{{item.oldPath}}" class="review-sheet__file-old-path">{{item.oldPath}}</text>
                </view>
                <view class="review-sheet__file-stats">
                  <text wx:if="{{item.additionsLabel}}" class="review-sheet__file-additions">{{item.additionsLabel}}</text>
                  <text wx:if="{{item.deletionsLabel}}" class="review-sheet__file-deletions">{{item.deletionsLabel}}</text>
                  <text class="review-sheet__file-badge review-sheet__file-badge--{{item.changeType}}">{{item.changeTypeLabel}}</text>
                </view>
              </view>
              <view wx:if="{{item.expanded}}" class="review-sheet__file-diff">
                <view wx:if="{{item.diff.status === 'loading'}}" class="review-sheet__diff-state">{{reviewDiffLoadingLabel}}</view>
                <view wx:elif="{{item.diff.status === 'error'}}" class="review-sheet__diff-state review-sheet__diff-state--error">{{item.diff.error || reviewDiffErrorLabel}}</view>
                <view wx:elif="{{item.diff.binary}}" class="review-sheet__diff-state">{{reviewBinaryLabel}}</view>
                <view wx:elif="{{item.diff.tooLarge}}" class="review-sheet__diff-state">{{reviewTooLargeLabel}}</view>
                <view wx:elif="{{item.diff.empty}}" class="review-sheet__diff-state">{{reviewDiffEmptyLabel}}</view>
                <scroll-view
                  wx:else
                  scroll-x
                  enhanced
                  show-scrollbar="{{false}}"
                  class="review-sheet__diff-scroll"
                >
                  <view class="review-sheet__diff-content">
                    <view
                      wx:for="{{item.diff.lines}}"
                      wx:for-item="line"
                      wx:key="id"
                      class="review-sheet__diff-line review-sheet__diff-line--{{line.tokens[0].kind || 'context'}}"
                    >
                      <text class="review-sheet__diff-line-number review-sheet__diff-line-number--old">{{line.oldLineNumber}}</text>
                      <text class="review-sheet__diff-line-number review-sheet__diff-line-number--new">{{line.newLineNumber}}</text>
                      <text class="review-sheet__diff-code">{{line.tokens[0].text}}</text>
                    </view>
                  </view>
                </scroll-view>
              </view>
            </view>
          </view>

          <view class="review-sheet__section">
            <view class="review-sheet__section-title">{{reviewWorkingFilesLabel}} · {{reviewWorkingFileCount}}</view>
            <view wx:if="{{reviewWorkingFiles.length === 0}}" class="chat-tab-view__state chat-tab-view__state--muted review-sheet__empty-section">{{reviewNoFilesLabel}}</view>
            <view
              wx:for="{{reviewWorkingFiles}}"
              wx:key="key"
              class="review-sheet__file-row review-sheet__file-row--working {{item.expanded ? 'review-sheet__file-row--expanded' : ''}}"
              data-key="{{item.key}}"
              data-scope="working"
              bindtap="onTapReviewFile"
              hover-class="review-sheet__file-row--hover"
            >
              <view class="review-sheet__file-summary">
                <view class="review-sheet__file-body">
                  <text class="review-sheet__file-path">{{item.path}}</text>
                  <text wx:if="{{item.oldPath}}" class="review-sheet__file-old-path">{{item.oldPath}}</text>
                </view>
                <view class="review-sheet__file-stats">
                  <text wx:if="{{item.additionsLabel}}" class="review-sheet__file-additions">{{item.additionsLabel}}</text>
                  <text wx:if="{{item.deletionsLabel}}" class="review-sheet__file-deletions">{{item.deletionsLabel}}</text>
                  <text class="review-sheet__file-badge review-sheet__file-badge--{{item.changeType}}">{{item.changeTypeLabel}}</text>
                </view>
              </view>
              <view wx:if="{{item.expanded}}" class="review-sheet__file-diff">
                <view wx:if="{{item.diff.status === 'loading'}}" class="review-sheet__diff-state">{{reviewDiffLoadingLabel}}</view>
                <view wx:elif="{{item.diff.status === 'error'}}" class="review-sheet__diff-state review-sheet__diff-state--error">{{item.diff.error || reviewDiffErrorLabel}}</view>
                <view wx:elif="{{item.diff.binary}}" class="review-sheet__diff-state">{{reviewBinaryLabel}}</view>
                <view wx:elif="{{item.diff.tooLarge}}" class="review-sheet__diff-state">{{reviewTooLargeLabel}}</view>
                <view wx:elif="{{item.diff.empty}}" class="review-sheet__diff-state">{{reviewDiffEmptyLabel}}</view>
                <scroll-view
                  wx:else
                  scroll-x
                  enhanced
                  show-scrollbar="{{false}}"
                  class="review-sheet__diff-scroll"
                >
                  <view class="review-sheet__diff-content">
                    <view
                      wx:for="{{item.diff.lines}}"
                      wx:for-item="line"
                      wx:key="id"
                      class="review-sheet__diff-line review-sheet__diff-line--{{line.tokens[0].kind || 'context'}}"
                    >
                      <text class="review-sheet__diff-line-number review-sheet__diff-line-number--old">{{line.oldLineNumber}}</text>
                      <text class="review-sheet__diff-line-number review-sheet__diff-line-number--new">{{line.newLineNumber}}</text>
                      <text class="review-sheet__diff-code">{{line.tokens[0].text}}</text>
                    </view>
                  </view>
                </scroll-view>
              </view>
            </view>
          </view>
        </view>
      </scroll-view>
    </view>
  </block>

  <!-- Agent settings: read-only summary + skill/KB authorization -->
  <block wx:elif="{{activeTab === 'settings'}}">
    <view class="agent-settings">
      <view wx:if="{{agentSettings.settingsStatus === 'loading'}}" class="agent-settings__state">{{agentSettings.loadingLabel}}</view>
      <view wx:elif="{{agentSettings.settingsStatus === 'error'}}" class="agent-settings__state agent-settings__state--error">
        <text>{{agentSettings.settingsErrorMsg}}</text>
      </view>
      <block wx:else>
        <view class="agent-settings__summary">
          <text class="agent-settings__name">{{agentSettings.agentName}}</text>
          <view class="agent-settings__meta">
            <text wx:if="{{agentSettings.agentRuntime}}" class="agent-settings__pill">{{agentSettings.agentRuntime}}</text>
            <text wx:if="{{agentSettings.agentModel}}" class="agent-settings__model">{{agentSettings.agentModel}}</text>
          </view>
        </view>

        <!-- Basic settings edit (Gate 5B) -->
        <block wx:if="{{agentSettings.settingsCanManage}}">
          <view wx:if="{{agentSettings.basicSettingsStatus === 'loading'}}" class="agent-settings__state">{{agentSettings.loadingLabel}}</view>
          <view wx:elif="{{agentSettings.basicSettingsStatus === 'error'}}" class="agent-settings__state agent-settings__state--error">
            <text>{{agentSettings.basicSettingsErrorMsg}}</text>
            <button bindtap="onRetryAgentBasicSettings" type="default" size="mini">{{agentSettings.retryLabel}}</button>
          </view>
          <block wx:else>
            <view class="agent-settings__section-title">{{agentSettings.basicInfoLabel}}</view>
            <view class="agent-settings__row">
              <view class="agent-settings__row-body">
                <text class="agent-settings__row-sub">{{agentSettings.displayNameLabel}}</text>
                <input class="agent-settings__input" value="{{agentSettings.editDisplayName}}" bindinput="onEditDisplayNameInput" />
              </view>
            </view>
            <view class="agent-settings__row">
              <view class="agent-settings__row-body">
                <text class="agent-settings__row-sub">{{agentSettings.descriptionLabel}}</text>
                <input class="agent-settings__input" value="{{agentSettings.editDescription}}" bindinput="onEditDescriptionInput" />
              </view>
            </view>

            <view class="agent-settings__section-title">{{agentSettings.modelSettingsLabel}}</view>
            <view class="agent-settings__row">
              <view class="agent-settings__row-body">
                <text class="agent-settings__row-sub">{{agentSettings.modelLabel}}</text>
                <picker wx:if="{{agentSettings.editModelIndex >= 0 && agentSettings.editModelOptions.length > 0}}" mode="selector" range="{{agentSettings.editModelOptions}}" range-key="displayName" value="{{agentSettings.editModelIndex}}" bindchange="onEditModelPickerChange">
                  <view class="agent-settings__picker">
                    <text>{{agentSettings.editModelOptions[agentSettings.editModelIndex].displayName}}</text>
                  </view>
                </picker>
                <text wx:else class="agent-settings__row-sub">{{agentSettings.editModel || '—'}}</text>
              </view>
            </view>

            <view wx:if="{{agentSettings.basicInfoErrorMsg}}" class="agent-settings__state agent-settings__state--error">{{agentSettings.basicInfoErrorMsg}}</view>
            <button class="agent-settings__submit-btn" type="primary" size="mini" disabled="{{agentSettings.basicInfoPending}}" bindtap="onSaveAgentBasicSettings" loading="{{agentSettings.basicInfoPending}}">{{agentSettings.saveLabel}}</button>
          </block>
        </block>

        <block wx:if="{{agentSettings.skillsEnabled}}">
          <view class="agent-settings__section-title">{{agentSettings.skillsLabel}}</view>
          <view wx:if="{{!agentSettings.settingsCanManage}}" class="agent-settings__empty">{{agentSettings.notManageableLabel}}</view>
          <view wx:elif="{{agentSettings.skillStatus === 'loading'}}" class="agent-settings__state">{{agentSettings.loadingLabel}}</view>
          <view wx:elif="{{agentSettings.skillStatus === 'error'}}" class="agent-settings__state agent-settings__state--error">
            <text>{{agentSettings.skillErrorMsg}}</text>
            <button bindtap="onRetryAgentSkills" type="default" size="mini">{{agentSettings.retryLabel}}</button>
          </view>
          <block wx:else>
            <view wx:if="{{agentSettings.skillRowsEmpty}}" class="agent-settings__empty">{{agentSettings.skillsEmptyLabel}}</view>
            <view
              wx:for="{{agentSettings.skillRows}}"
              wx:key="skillId"
              class="agent-settings__row {{item.disabled ? 'agent-settings__row--disabled' : ''}}"
            >
              <view class="agent-settings__row-body">
                <text class="agent-settings__row-title">{{item.name}}</text>
                <text wx:if="{{item.description}}" class="agent-settings__row-sub">{{item.description}}</text>
              </view>
              <view
                wx:if="{{agentSettings.settingsCanManage && item.canManage}}"
                class="agent-settings__switch {{item.bound ? 'agent-settings__switch--on' : ''}} {{item.pending ? 'agent-settings__switch--pending' : ''}}"
                data-skill-id="{{item.skillId}}"
                data-enable="{{item.bound ? 'false' : 'true'}}"
                bindtap="onToggleAgentSkill"
              >
                <text>{{item.bound ? agentSettings.onLabel : agentSettings.offLabel}}</text>
              </view>
              <text wx:elif="{{item.bound}}" class="agent-settings__badge">{{agentSettings.onLabel}}</text>
            </view>
            <view wx:if="{{agentSettings.skillErrorMsg}}" class="agent-settings__state agent-settings__state--error">{{agentSettings.skillErrorMsg}}</view>
          </block>
        </block>

        <block wx:if="{{agentSettings.knowledgeBasesEnabled}}">
          <view class="agent-settings__section-title">{{agentSettings.knowledgeBasesLabel}}</view>
          <view wx:if="{{!agentSettings.settingsCanManage}}" class="agent-settings__empty">{{agentSettings.notManageableLabel}}</view>
          <view wx:elif="{{agentSettings.knowledgeBaseStatus === 'loading'}}" class="agent-settings__state">{{agentSettings.loadingLabel}}</view>
          <view wx:elif="{{agentSettings.knowledgeBaseStatus === 'error'}}" class="agent-settings__state agent-settings__state--error">
            <text>{{agentSettings.knowledgeBaseErrorMsg}}</text>
            <button bindtap="onRetryAgentKnowledgeBases" type="default" size="mini">{{agentSettings.retryLabel}}</button>
          </view>
          <block wx:else>
            <view wx:if="{{agentSettings.knowledgeBaseRowsEmpty}}" class="agent-settings__empty">{{agentSettings.knowledgeBasesEmptyLabel}}</view>
            <view
              wx:for="{{agentSettings.knowledgeBaseRows}}"
              wx:key="id"
              class="agent-settings__row {{item.disabled ? 'agent-settings__row--disabled' : ''}}"
            >
              <view class="agent-settings__row-body">
                <text class="agent-settings__row-title">{{item.name}}</text>
                <text wx:if="{{item.description}}" class="agent-settings__row-sub">{{item.description}}</text>
              </view>
              <view class="agent-settings__kb-controls">
                <view
                  class="agent-settings__seg {{item.accessLevel === 'read' ? 'agent-settings__seg--on' : ''}} {{(!item.canRead && item.accessLevel === 'none') ? 'agent-settings__seg--locked' : ''}}"
                  data-kb-id="{{item.id}}"
                  data-level="read"
                  bindtap="onChangeAgentKbAccess"
                >{{agentSettings.readLabel}}</view>
                <view
                  class="agent-settings__seg {{item.accessLevel === 'write' ? 'agent-settings__seg--on' : ''}} {{!item.canWrite ? 'agent-settings__seg--locked' : ''}}"
                  data-kb-id="{{item.id}}"
                  data-level="write"
                  bindtap="onChangeAgentKbAccess"
                >{{agentSettings.writeLabel}}</view>
                <view
                  wx:if="{{item.accessLevel !== 'none'}}"
                  class="agent-settings__seg agent-settings__seg--off"
                  data-kb-id="{{item.id}}"
                  data-level="none"
                  bindtap="onChangeAgentKbAccess"
                >{{agentSettings.noneLabel}}</view>
              </view>
            </view>
            <view wx:if="{{agentSettings.knowledgeBasePending}}" class="agent-settings__pending">{{agentSettings.savingLabel}}</view>
            <view wx:if="{{agentSettings.knowledgeBaseErrorMsg}}" class="agent-settings__state agent-settings__state--error">{{agentSettings.knowledgeBaseErrorMsg}}</view>
          </block>
        </block>

        <!-- Runtime control (Start/Stop) — owner only, not in danger zone -->
        <view wx:if="{{agentSettings.settingsCanManage}}" class="agent-settings__runtime">
          <view
            wx:if="{{agentSettings.agentActivity === 'offline'}}"
            class="agent-settings__runtime-btn agent-settings__runtime-btn--start {{agentSettings.runtimePending ? 'agent-settings__runtime-btn--pending' : ''}}"
            style="{{agentSettings.runtimePending ? 'pointer-events: none;' : ''}}"
            bindtap="onStartAgent"
            hover-class="agent-settings__runtime-btn--hover"
          >
            <text>{{agentSettings.startLabel}}</text>
          </view>
          <view
            wx:else
            class="agent-settings__runtime-btn agent-settings__runtime-btn--stop {{agentSettings.runtimePending ? 'agent-settings__runtime-btn--pending' : ''}}"
            style="{{agentSettings.runtimePending ? 'pointer-events: none;' : ''}}"
            bindtap="onStopAgent"
            hover-class="agent-settings__runtime-btn--hover"
          >
            <text>{{agentSettings.stopLabel}}</text>
          </view>
          <view wx:if="{{agentSettings.runtimeErrorMsg}}" class="agent-settings__state agent-settings__state--error">{{agentSettings.runtimeErrorMsg}}</view>
        </view>

        <!-- Danger zone — owner only -->
        <view wx:if="{{agentSettings.settingsCanManage}}" class="agent-settings__danger">
          <view class="agent-settings__section-title">{{agentSettings.dangerZoneLabel}}</view>
          <view
            class="agent-settings__danger-row"
            style="{{agentSettings.dangerPending ? 'pointer-events: none;' : ''}}"
            bindtap="onResetAgent"
            hover-class="agent-settings__danger-row--hover"
          >
            <text>{{agentSettings.resetSessionLabel}}</text>
          </view>
          <view
            wx:if="{{agentSettings.machineOnline}}"
            class="agent-settings__danger-row"
            style="{{agentSettings.dangerPending ? 'pointer-events: none;' : ''}}"
            bindtap="onResetAgentFull"
            hover-class="agent-settings__danger-row--hover"
          >
            <text>{{agentSettings.resetFullLabel}}</text>
          </view>
          <view
            class="agent-settings__danger-row agent-settings__danger-row--delete"
            style="{{agentSettings.dangerPending ? 'pointer-events: none;' : ''}}"
            bindtap="onDeleteAgent"
            hover-class="agent-settings__danger-row--hover"
          >
            <text>{{agentSettings.deleteLabel}}</text>
          </view>
          <view wx:if="{{agentSettings.dangerErrorMsg}}" class="agent-settings__state agent-settings__state--error">{{agentSettings.dangerErrorMsg}}</view>
        </view>
      </block>
    </view>
  </block>

  <view wx:if="{{notificationSheetOpen}}" class="notification-sheet" catchtouchmove="noop">
    <view class="notification-sheet__overlay" bindtap="onCloseNotificationSheet"></view>
    <view class="notification-sheet__panel">
      <view class="notification-sheet__header">
        <text class="notification-sheet__title">{{notificationSettingsTitleLabel}}</text>
        <view class="notification-sheet__close icon icon--sm icon--x-muted" bindtap="onCloseNotificationSheet"></view>
      </view>
      <scroll-view scroll-y class="notification-sheet__body">
        <view wx:if="{{notificationSheetStatus === 'loading'}}" class="notification-sheet__content notification-sheet__content--skeleton">
          <view class="notification-sheet__self-row">
            <view class="tab-skeleton tab-skeleton--text notification-sheet__self-label-skeleton"></view>
            <view class="notification-sheet__segmented notification-sheet__segmented--skeleton">
              <view class="tab-skeleton notification-sheet__segment-skeleton"></view>
              <view class="tab-skeleton notification-sheet__segment-skeleton"></view>
              <view class="tab-skeleton notification-sheet__segment-skeleton"></view>
            </view>
          </view>
          <view class="notification-sheet__section">
            <view class="tab-skeleton tab-skeleton--text notification-sheet__section-title-skeleton"></view>
            <view wx:for="{{tabSkeletonRows}}" wx:key="key" class="notification-sheet__agent-row notification-sheet__agent-row--skeleton">
              <view class="notification-sheet__agent-avatar tab-skeleton"></view>
              <view class="notification-sheet__agent-body">
                <view class="tab-skeleton tab-skeleton--text notification-sheet__agent-name-skeleton" style="width: {{item.titleWidth}}"></view>
                <view class="tab-skeleton tab-skeleton--text notification-sheet__agent-state-skeleton" style="width: {{item.lineWidth}}"></view>
              </view>
              <view class="tab-skeleton notification-sheet__switch-skeleton"></view>
            </view>
          </view>
        </view>
        <view wx:elif="{{notificationSheetStatus === 'error'}}" class="chat-tab-view__state chat-tab-view__state--error">{{notificationSheetError}}</view>
        <view wx:elif="{{notificationSheetStatus === 'loaded'}}" class="notification-sheet__content">
          <view wx:if="{{notificationReadOnly}}" class="notification-sheet__readonly">
            {{notificationReadOnlyReason === 'archived' ? notificationArchivedLabel : notificationReadonlyLabel}}
          </view>

          <view class="notification-sheet__self-row">
            <text class="notification-sheet__self-label">{{notificationSelfLabel}}</text>
            <view class="notification-sheet__segmented">
              <view
                class="notification-sheet__segment {{notificationSelf.state === 'active' ? 'notification-sheet__segment--active' : ''}} {{notificationReadOnly ? 'notification-sheet__segment--disabled' : ''}}"
                data-state="active"
                bindtap="onSetSelfNotificationState"
              >
                <text>{{notificationAllLabel}}</text>
              </view>
              <view
                class="notification-sheet__segment {{notificationSelf.state === 'quiet' ? 'notification-sheet__segment--active' : ''}} {{notificationReadOnly ? 'notification-sheet__segment--disabled' : ''}}"
                data-state="quiet"
                bindtap="onSetSelfNotificationState"
              >
                <text>{{notificationMentionLabel}}</text>
              </view>
              <view
                class="notification-sheet__segment {{notificationSelf.state === 'mute' ? 'notification-sheet__segment--active' : ''}} {{notificationReadOnly ? 'notification-sheet__segment--disabled' : ''}}"
                data-state="mute"
                bindtap="onSetSelfNotificationState"
              >
                <text>{{notificationMuteLabel}}</text>
              </view>
            </view>
          </view>

          <view class="notification-sheet__section">
            <view class="notification-sheet__section-title">{{notificationAgentsTitleLabel}}</view>
            <block wx:if="{{notificationAgents.length === 0}}">
              <view class="notification-sheet__hint">{{notificationAgentsEmptyLabel}}</view>
            </block>
            <view wx:for="{{notificationAgents}}" wx:key="key" class="notification-sheet__agent-row">
              <view class="notification-sheet__agent-avatar">
                <text>{{item.displayName[0]}}</text>
              </view>
              <view class="notification-sheet__agent-body">
                <text class="notification-sheet__agent-name">@{{item.displayName}}</text>
                <text class="notification-sheet__agent-state">{{item.autoWake ? notificationAutoWakeLabel : notificationMentionOnlyLabel}}</text>
              </view>
              <view
                class="notification-sheet__switch {{item.autoWake ? 'notification-sheet__switch--on' : ''}} {{notificationReadOnly ? 'notification-sheet__switch--disabled' : ''}}"
                data-agent-id="{{item.agentId}}"
                bindtap="onToggleAgentWakeState"
              >
                <view class="notification-sheet__switch-thumb"></view>
              </view>
            </view>
          </view>
        </view>
      </scroll-view>
    </view>
  </view>
</view>
