Commit b1b072e
fix(portal): recognize device agent compliance for task completion (#2152)
* fix(portal): recognize device agent compliance for task completion
The portal was only checking FleetDM data to determine if the device
agent task was complete. Device agent check results (stored in the
Device table) were being ignored, so even when all agent checks passed,
the portal still showed the task as incomplete.
Now checks both sources: Fleet device + policies OR device agent
isCompliant flag. Either one being complete marks the task as done.
Also updates Prisma in API Dockerfile from 6.13.0 to 6.18.0 to match
the version used in packages/db.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: prevent null reference crash when only agent device exists
The installed device view assumed a Fleet host always exists,
but with the new agent device support, hasInstalledAgent can be
true from agentDevice alone while host is null.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: device agent takes priority over Fleet in portal
When both Fleet and device agent exist, device agent completion
and UI now takes priority. Fleet is still fully supported as
fallback for orgs that only use Fleet.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: correct download filename and instructions for all platforms
- Add LINUX_FILENAME export and use it for Linux downloads
(was falling through to WINDOWS_FILENAME)
- Add Linux-specific install instruction for DEB packages
- Unify step 3 to show device agent login instructions for all
platforms (was showing Fleet MDM instructions for non-macOS)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: add Linux to system requirements
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: prevent unchecked device from hiding compliant device
PostgreSQL puts NULL values first in DESC ordering, so a newly
registered device (lastCheckIn=null) would be selected over an
older compliant device. Use nulls:'last' to prefer devices that
have actually checked in.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add SWR polling for agent device compliance status
Agent device status was fetched once server-side and never
refreshed, so compliance changes required a full page reload.
Now polls /api/device-agent/status every 30s and revalidates
on tab focus, matching the Fleet SWR pattern.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: sort agent devices by lastCheckIn to match server-side ordering
The status API returns devices sorted by installedAt, but page.tsx
fetches by lastCheckIn desc nulls last. Without client-side sorting,
SWR could pick a freshly registered device (null lastCheckIn) over
an older compliant one, causing the task to flash back to incomplete.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>1 parent fd648bd commit b1b072e
6 files changed
Lines changed: 112 additions & 44 deletions
File tree
- apps
- api
- portal/src/app
- (app)/(home)/[orgId]
- components
- tasks
- api/download-agent
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
92 | 92 | | |
93 | 93 | | |
94 | 94 | | |
95 | | - | |
| 95 | + | |
96 | 96 | | |
97 | 97 | | |
98 | 98 | | |
| |||
Lines changed: 41 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
| 30 | + | |
30 | 31 | | |
31 | 32 | | |
32 | 33 | | |
| |||
40 | 41 | | |
41 | 42 | | |
42 | 43 | | |
| 44 | + | |
43 | 45 | | |
44 | 46 | | |
45 | 47 | | |
| |||
64 | 66 | | |
65 | 67 | | |
66 | 68 | | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
67 | 87 | | |
68 | 88 | | |
69 | 89 | | |
70 | 90 | | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
71 | 101 | | |
72 | 102 | | |
73 | 103 | | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
79 | 113 | | |
80 | 114 | | |
81 | 115 | | |
| |||
109 | 143 | | |
110 | 144 | | |
111 | 145 | | |
| 146 | + | |
112 | 147 | | |
113 | 148 | | |
114 | 149 | | |
| |||
Lines changed: 4 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
| 26 | + | |
25 | 27 | | |
26 | 28 | | |
27 | 29 | | |
| |||
68 | 70 | | |
69 | 71 | | |
70 | 72 | | |
| 73 | + | |
71 | 74 | | |
72 | 75 | | |
73 | 76 | | |
| |||
Lines changed: 55 additions & 36 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
13 | | - | |
| 14 | + | |
14 | 15 | | |
15 | 16 | | |
16 | 17 | | |
| |||
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
| 25 | + | |
24 | 26 | | |
25 | 27 | | |
26 | 28 | | |
| |||
29 | 31 | | |
30 | 32 | | |
31 | 33 | | |
| 34 | + | |
32 | 35 | | |
33 | 36 | | |
34 | 37 | | |
| |||
41 | 44 | | |
42 | 45 | | |
43 | 46 | | |
44 | | - | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
45 | 50 | | |
46 | 51 | | |
47 | 52 | | |
48 | 53 | | |
49 | 54 | | |
50 | | - | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
51 | 61 | | |
52 | 62 | | |
53 | 63 | | |
| |||
87 | 97 | | |
88 | 98 | | |
89 | 99 | | |
| 100 | + | |
| 101 | + | |
90 | 102 | | |
91 | 103 | | |
92 | 104 | | |
| |||
149 | 161 | | |
150 | 162 | | |
151 | 163 | | |
152 | | - | |
| 164 | + | |
153 | 165 | | |
154 | 166 | | |
155 | 167 | | |
| |||
196 | 208 | | |
197 | 209 | | |
198 | 210 | | |
199 | | - | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
200 | 221 | | |
201 | 222 | | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
211 | | - | |
212 | | - | |
213 | | - | |
214 | | - | |
215 | | - | |
216 | | - | |
217 | | - | |
218 | | - | |
219 | | - | |
220 | | - | |
221 | | - | |
222 | | - | |
223 | | - | |
224 | | - | |
225 | | - | |
226 | | - | |
227 | | - | |
228 | | - | |
229 | | - | |
230 | 223 | | |
231 | 224 | | |
232 | | - | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
233 | 252 | | |
234 | 253 | | |
235 | 254 | | |
| |||
263 | 282 | | |
264 | 283 | | |
265 | 284 | | |
266 | | - | |
| 285 | + | |
267 | 286 | | |
268 | 287 | | |
269 | 288 | | |
| |||
276 | 295 | | |
277 | 296 | | |
278 | 297 | | |
279 | | - | |
| 298 | + | |
280 | 299 | | |
281 | 300 | | |
282 | 301 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
60 | 69 | | |
61 | 70 | | |
62 | 71 | | |
| |||
66 | 75 | | |
67 | 76 | | |
68 | 77 | | |
| 78 | + | |
69 | 79 | | |
70 | 80 | | |
71 | 81 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| 37 | + | |
0 commit comments