Commit 9a13622
fix(chatbot): read the agent catalog in the declared envelope too (objectstack#4053) (#2992)
`GET /api/v1/ai/agents` is served by two producers — the framework dispatcher's
degraded fallback when no AI service is registered, and cloud's service-ai — and
it is one of the last SDK-addressable routes still answering outside the declared
`{ success: true, data }` envelope. useAgents read only `{ agents }` and a bare
array, so the day either producer converts, the parse misses.
That miss is unusually dangerous here, which is why it is worth getting ahead of
rather than fixing after. The catalog is not just data: useAiSurfaceEnabled gates
the ENTIRE AI surface on `agents.length > 0`, because the route is access-filtered
per caller and is therefore the only signal that is both edition- and user-aware
(ADR-0068). An empty list is the correct answer for a seat-less user or a
Community-Edition deployment with no service-ai — so a parse miss and the
legitimate hidden state are indistinguishable: no error, no 403, no log, just the
FAB, the top-bar link and the designer's "Ask AI" quietly gone for every user.
Nothing downstream would catch it.
extractAgentList now folds all four shapes to the same list — bare array,
`{ agents }`, `{ success: true, data: [...] }`, `{ success: true, data: { agents } }`
— detecting the envelope the way ObjectStackClient.unwrapResponse does (a BOOLEAN
`success`), so the two readers cannot disagree about what counts as one. It is
exported and pure so the shapes are testable without standing up the hook.
No behaviour change against any server shipping today: the shapes that worked
before parse identically. This only removes the lockstep requirement, so the
server side can convert on its own schedule instead of having to land with a
console release — the same consumer-first ordering used for SharedRecordPage in
objectstack#3983.
Nine tests; reverting to the previous two-shape read fails five of them.
Claude-Session: https://claude.ai/code/session_01CYbS3kS8xzsHNXFTzp4e2z
Co-authored-by: Claude <noreply@anthropic.com>1 parent 02aef0c commit 9a13622
3 files changed
Lines changed: 168 additions & 3 deletions
File tree
- .changeset
- packages/plugin-chatbot/src
- __tests__
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
Lines changed: 96 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
149 | 149 | | |
150 | 150 | | |
151 | 151 | | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
152 | 189 | | |
153 | 190 | | |
154 | 191 | | |
| |||
196 | 233 | | |
197 | 234 | | |
198 | 235 | | |
199 | | - | |
200 | | - | |
201 | | - | |
| 236 | + | |
| 237 | + | |
202 | 238 | | |
203 | 239 | | |
204 | 240 | | |
| |||
0 commit comments