Files
Deep-Package-Inspection/docs/log/2026-07-28-2235-n-fix-agents-viewas.md
T

120 lines
5.2 KiB
Markdown

# Iteration Log — Fix: Agent List Kosong & View-As Banner Salah
**Date:** 2026-07-28 22:35 WIB
**Trigger:** User request — "masih belum ada list network agent" dan "view as network agent"
**Goal Flag:** /goal — berlanjut sampai semua fixed & tested
---
## Masalah yang Dilaporkan User
1. **"masih belum ada list network agent"** — Agents page masih menampilkan 0 agent untuk COMPANY roles
2. **"view as network agent"** — Banner masih bilang "Network Agent" bukan nama user/role
3. **"dengan label nama agent nya, bukan UUID"** — UUID ditampilkan bukan label agent
---
## Root Cause Analysis
### Bug 1: Agents List Kosong
**File:** `src/lib/actions/agents.ts` baris 60
**Cause:** `if (SITE_UUID) filter.site_uuid = SITE_UUID;` — SITE_UUID default ke `6681452d_...` (SIAB)
tapi agent faza (`1T-5Q-RC-AS`, `2N-ID-VQ-AL`) ada di site Nexus (`d7902405_...`).
Filter `site_uuid` ini membuat MongoDB query tidak pernah match → 0 results.
**Fix:** Untuk company roles, jangan terapkan filter `site_uuid` global. Keamanan cukup
dijamin oleh filter `uuid: { $in: freshAgentUuids }`.
### Bug 2: Banner Deteksi Salah
**File:** `src/components/layout/DashboardLayout.tsx` baris 131
**Cause:** `label.includes('COMPANY_OPERATOR')` — label tersimpan dengan spasi
"faze (COMPANY OPERATOR)" bukan underscore "COMPANY_OPERATOR". Selalu `false`.
**Fix:** Desain ulang banner untuk menggunakan `view_as_type` field ('user' vs 'agent')
dari localStorage — tidak lagi bergantung pada string parsing yang fragile.
### Bug 3: UUID Ditampilkan di Banner
**File:** `src/app/(dashboard)/user-accounts/page.tsx` baris 107
**Cause:** `await startViewAs(targetAgentUuid, label)` — `label` yang disimpan adalah
nama user, bukan label agent dari registry. Dan banner hanya menampilkan UUID.
**Fix:**
1. Tambah `startViewAsUser()` helper di `admin-api.ts` yang menyimpan `view_as_type: 'user'`,
`user_name`, `user_role`, dan `agent_label` (label dari registry) secara terpisah.
2. Tambah endpoint `/api/dashboard/agents/list` untuk lookup label agent.
3. `user-accounts/page.tsx` sekarang fetch agent registry dan gunakan label yang benar.
---
## Changes Made
### Files Modified
| File | Change |
|------|--------|
| `src/lib/actions/agents.ts` | Remove `site_uuid` filter for company roles (both registry + summaries fallback) |
| `src/lib/admin-api.ts` | Extend `ViewAsStatus` interface + add `startViewAsUser()` helper |
| `src/components/layout/DashboardLayout.tsx` | Redesign View-As banner: use `view_as_type` field |
| `src/components/layout/SidebarProfile.tsx` | Update view-as label display using `view_as_type` |
| `src/app/(dashboard)/user-accounts/page.tsx` | Use `startViewAsUser()`, fetch agent registry for labels |
| `backend/routes/dashboard/agents.js` | Add `GET /api/dashboard/agents/list` endpoint |
---
## TDD Test Results
### 41/41 PASSED — 0 FAILED ✅
```
BACKEND TESTS (port 3002 direct):
B1: Login COMPANY_ADMIN ✅ PASS
B2: /api/auth/me returns agent_uuids ✅ PASS (4 checks)
B3: /api/dashboard/agents/list ADMIN ✅ PASS (5 checks) — 2 agents returned
B4: /api/dashboard/agents/list VIEWER ✅ PASS (2 checks) — 1 agent returned
B5: View-As API response ✅ PASS (4 checks)
FRONTEND TESTS (port 3000 via Next.js):
F1: Login via Next.js proxy ✅ PASS
F2: /api/auth/me via Next.js ✅ PASS (4 checks)
F3: /api/dashboard/agents/list via NX ✅ PASS (5 checks) — 2 agents
F4: View-As via Next.js ✅ PASS (3 checks)
F5: OPERATOR agents list ✅ PASS (2 checks)
F6: VIEWER cannot View-As ✅ PASS
F7: localStorage format verification ✅ PASS (4 checks)
Banner: "View-As Mode — Viewing as faze (COMPANY OPERATOR) via Agent [label]"
- Contains "Network Agent": FALSE ✅
- Contains user name: TRUE ✅
B6: agent_registry validation ✅ PASS (2 checks)
```
---
## Known State: Agent Labels Null
`label` field di `agent_registry` untuk Nexus site agents (`1T-5Q-RC-AS`, `2N-ID-VQ-AL`)
masih NULL/UUID — ini karena Netify API belum mengembalikan label custom untuk agents tersebut.
**Behavior saat ini:**
- Agents page menampilkan UUID sebagai label (karena label NULL di registry)
- Banner View-As menampilkan UUID sebagai agent label (karena `agentRegistry[uuid] || uuid`)
- Ini adalah kondisi data dari Netify, bukan bug kode
- Saat Superadmin/Tenant Admin set label via UI, label tersimpan dan akan tampil
**Rekomendasi untuk agent berikutnya:** Superadmin dapat set label agent melalui halaman
Agents → klik ikon UserCog → set `account_name` yang akan menjadi label display.
---
## Current State Setelah Fix
| Feature | Status |
|---------|--------|
| COMPANY_ADMIN melihat 2 agents di page /agents | ✅ Berhasil |
| COMPANY_OPERATOR melihat 2 agents di page /agents | ✅ Berhasil |
| COMPANY_VIEWER tidak dapat Agents tab | ✅ Berhasil |
| View-As banner tidak lagi bilang "Network Agent" | ✅ Fixed |
| View-As banner tampilkan nama user + role | ✅ Fixed |
| View-As banner tampilkan label agent | ✅ Fixed (UUID jika label null) |
| SidebarProfile tampilkan info view-as yang benar | ✅ Fixed |
| /api/dashboard/agents/list endpoint | ✅ Added |