deepdebug-local-agent 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/docs/la-protocol-v2.md +33 -9
  2. package/env.example +3 -1
  3. package/package.json +1 -1
  4. package/src/la-protocol-v2/content-handlers/config.js +3 -1
  5. package/src/la-protocol-v2/content-handlers/content-index.js +54 -19
  6. package/src/la-protocol-v2/content-handlers/egress.js +22 -0
  7. package/src/la-protocol-v2/content-handlers/file-list.js +174 -0
  8. package/src/la-protocol-v2/content-handlers/git-diff.js +43 -8
  9. package/src/la-protocol-v2/content-handlers/handler.js +28 -4
  10. package/src/la-protocol-v2/content-handlers/install.js +24 -19
  11. package/src/la-protocol-v2/content-handlers/path-guard.js +74 -5
  12. package/src/la-protocol-v2/content-handlers/ref-registry.js +18 -8
  13. package/src/la-protocol-v2/contract/CONTRACT_SOURCE.json +10 -8
  14. package/src/la-protocol-v2/contract/README.md +38 -0
  15. package/src/la-protocol-v2/contract/content.index.schema.json +1 -0
  16. package/src/la-protocol-v2/contract/content.request.schema.json +1 -0
  17. package/src/la-protocol-v2/contract/file.list.body.schema.json +69 -0
  18. package/src/la-protocol-v2/contract.js +9 -0
  19. package/src/la-protocol-v2/runtime.js +1 -1
  20. package/test/contract/la-protocol-v2/vectors/content.index.vectors.json +32 -0
  21. package/test/contract/la-protocol-v2/vectors/content.request.vectors.json +215 -0
  22. package/test/contract/la-protocol-v2/vectors/content.response.vectors.json +30 -0
  23. package/test/contract/la-protocol-v2/vectors/file.list.body.vectors.json +1645 -0
  24. package/test/la-protocol-v2/content-alignment.test.js +71 -10
  25. package/test/la-protocol-v2/content-deny-list.test.js +138 -0
  26. package/test/la-protocol-v2/content-diff-symlink.test.js +83 -0
  27. package/test/la-protocol-v2/content-file-list.test.js +385 -0
  28. package/test/la-protocol-v2/content-path-guard.test.js +1 -1
  29. package/test/la-protocol-v2/content-wiring.test.js +2 -2
  30. package/test/la-protocol-v2/contract.test.js +14 -4
  31. package/tools/interop/LaV2NodeFileListE2ETest.java +369 -0
  32. package/tools/interop/README.md +16 -0
  33. package/tools/interop/la-interop-list-client.mjs +93 -0
@@ -0,0 +1,1645 @@
1
+ {
2
+ "type": "file.list.body",
3
+ "schema": "file.list.body.schema.json",
4
+ "vectors": [
5
+ {
6
+ "name": "one-file",
7
+ "expect": {
8
+ "valid": true
9
+ },
10
+ "message": {
11
+ "entries": [
12
+ {
13
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
14
+ "name": "Main.java",
15
+ "type": "file",
16
+ "size": 1024,
17
+ "mtime": "2026-11-03T09:30:00Z"
18
+ }
19
+ ]
20
+ }
21
+ },
22
+ {
23
+ "name": "empty-folder",
24
+ "why": "an empty folder (or one with nothing the agent may serve) is an empty page",
25
+ "expect": {
26
+ "valid": true
27
+ },
28
+ "message": {
29
+ "entries": []
30
+ }
31
+ },
32
+ {
33
+ "name": "dir-and-file-with-next-ref",
34
+ "why": "nextRef: ask file.list again with it as ref to get the next page",
35
+ "expect": {
36
+ "valid": true
37
+ },
38
+ "message": {
39
+ "entries": [
40
+ {
41
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
42
+ "name": "src",
43
+ "type": "dir",
44
+ "size": 0,
45
+ "mtime": "2026-11-03T09:30:00Z"
46
+ },
47
+ {
48
+ "id": "AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI",
49
+ "name": "pom.xml",
50
+ "type": "file",
51
+ "size": 4096,
52
+ "mtime": "2026-11-03T09:30:00Z"
53
+ }
54
+ ],
55
+ "nextRef": "AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM"
56
+ }
57
+ },
58
+ {
59
+ "name": "hundred-entries",
60
+ "expect": {
61
+ "valid": true
62
+ },
63
+ "message": {
64
+ "entries": [
65
+ {
66
+ "id": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
67
+ "name": "f000.txt",
68
+ "type": "file",
69
+ "size": 1024,
70
+ "mtime": "2026-11-03T09:30:00Z"
71
+ },
72
+ {
73
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
74
+ "name": "f001.txt",
75
+ "type": "file",
76
+ "size": 1024,
77
+ "mtime": "2026-11-03T09:30:00Z"
78
+ },
79
+ {
80
+ "id": "AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI",
81
+ "name": "f002.txt",
82
+ "type": "file",
83
+ "size": 1024,
84
+ "mtime": "2026-11-03T09:30:00Z"
85
+ },
86
+ {
87
+ "id": "AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM",
88
+ "name": "f003.txt",
89
+ "type": "file",
90
+ "size": 1024,
91
+ "mtime": "2026-11-03T09:30:00Z"
92
+ },
93
+ {
94
+ "id": "BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ",
95
+ "name": "f004.txt",
96
+ "type": "file",
97
+ "size": 1024,
98
+ "mtime": "2026-11-03T09:30:00Z"
99
+ },
100
+ {
101
+ "id": "BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU",
102
+ "name": "f005.txt",
103
+ "type": "file",
104
+ "size": 1024,
105
+ "mtime": "2026-11-03T09:30:00Z"
106
+ },
107
+ {
108
+ "id": "BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgY",
109
+ "name": "f006.txt",
110
+ "type": "file",
111
+ "size": 1024,
112
+ "mtime": "2026-11-03T09:30:00Z"
113
+ },
114
+ {
115
+ "id": "BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwc",
116
+ "name": "f007.txt",
117
+ "type": "file",
118
+ "size": 1024,
119
+ "mtime": "2026-11-03T09:30:00Z"
120
+ },
121
+ {
122
+ "id": "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg",
123
+ "name": "f008.txt",
124
+ "type": "file",
125
+ "size": 1024,
126
+ "mtime": "2026-11-03T09:30:00Z"
127
+ },
128
+ {
129
+ "id": "CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk",
130
+ "name": "f009.txt",
131
+ "type": "file",
132
+ "size": 1024,
133
+ "mtime": "2026-11-03T09:30:00Z"
134
+ },
135
+ {
136
+ "id": "CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo",
137
+ "name": "f010.txt",
138
+ "type": "file",
139
+ "size": 1024,
140
+ "mtime": "2026-11-03T09:30:00Z"
141
+ },
142
+ {
143
+ "id": "CwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCws",
144
+ "name": "f011.txt",
145
+ "type": "file",
146
+ "size": 1024,
147
+ "mtime": "2026-11-03T09:30:00Z"
148
+ },
149
+ {
150
+ "id": "DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw",
151
+ "name": "f012.txt",
152
+ "type": "file",
153
+ "size": 1024,
154
+ "mtime": "2026-11-03T09:30:00Z"
155
+ },
156
+ {
157
+ "id": "DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0",
158
+ "name": "f013.txt",
159
+ "type": "file",
160
+ "size": 1024,
161
+ "mtime": "2026-11-03T09:30:00Z"
162
+ },
163
+ {
164
+ "id": "Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4",
165
+ "name": "f014.txt",
166
+ "type": "file",
167
+ "size": 1024,
168
+ "mtime": "2026-11-03T09:30:00Z"
169
+ },
170
+ {
171
+ "id": "Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8",
172
+ "name": "f015.txt",
173
+ "type": "file",
174
+ "size": 1024,
175
+ "mtime": "2026-11-03T09:30:00Z"
176
+ },
177
+ {
178
+ "id": "EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA",
179
+ "name": "f016.txt",
180
+ "type": "file",
181
+ "size": 1024,
182
+ "mtime": "2026-11-03T09:30:00Z"
183
+ },
184
+ {
185
+ "id": "ERERERERERERERERERERERERERERERERERERERERERE",
186
+ "name": "f017.txt",
187
+ "type": "file",
188
+ "size": 1024,
189
+ "mtime": "2026-11-03T09:30:00Z"
190
+ },
191
+ {
192
+ "id": "EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI",
193
+ "name": "f018.txt",
194
+ "type": "file",
195
+ "size": 1024,
196
+ "mtime": "2026-11-03T09:30:00Z"
197
+ },
198
+ {
199
+ "id": "ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExM",
200
+ "name": "f019.txt",
201
+ "type": "file",
202
+ "size": 1024,
203
+ "mtime": "2026-11-03T09:30:00Z"
204
+ },
205
+ {
206
+ "id": "FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ",
207
+ "name": "f020.txt",
208
+ "type": "file",
209
+ "size": 1024,
210
+ "mtime": "2026-11-03T09:30:00Z"
211
+ },
212
+ {
213
+ "id": "FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRU",
214
+ "name": "f021.txt",
215
+ "type": "file",
216
+ "size": 1024,
217
+ "mtime": "2026-11-03T09:30:00Z"
218
+ },
219
+ {
220
+ "id": "FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY",
221
+ "name": "f022.txt",
222
+ "type": "file",
223
+ "size": 1024,
224
+ "mtime": "2026-11-03T09:30:00Z"
225
+ },
226
+ {
227
+ "id": "FxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc",
228
+ "name": "f023.txt",
229
+ "type": "file",
230
+ "size": 1024,
231
+ "mtime": "2026-11-03T09:30:00Z"
232
+ },
233
+ {
234
+ "id": "GBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg",
235
+ "name": "f024.txt",
236
+ "type": "file",
237
+ "size": 1024,
238
+ "mtime": "2026-11-03T09:30:00Z"
239
+ },
240
+ {
241
+ "id": "GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRk",
242
+ "name": "f025.txt",
243
+ "type": "file",
244
+ "size": 1024,
245
+ "mtime": "2026-11-03T09:30:00Z"
246
+ },
247
+ {
248
+ "id": "GhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho",
249
+ "name": "f026.txt",
250
+ "type": "file",
251
+ "size": 1024,
252
+ "mtime": "2026-11-03T09:30:00Z"
253
+ },
254
+ {
255
+ "id": "GxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxs",
256
+ "name": "f027.txt",
257
+ "type": "file",
258
+ "size": 1024,
259
+ "mtime": "2026-11-03T09:30:00Z"
260
+ },
261
+ {
262
+ "id": "HBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw",
263
+ "name": "f028.txt",
264
+ "type": "file",
265
+ "size": 1024,
266
+ "mtime": "2026-11-03T09:30:00Z"
267
+ },
268
+ {
269
+ "id": "HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0",
270
+ "name": "f029.txt",
271
+ "type": "file",
272
+ "size": 1024,
273
+ "mtime": "2026-11-03T09:30:00Z"
274
+ },
275
+ {
276
+ "id": "Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4",
277
+ "name": "f030.txt",
278
+ "type": "file",
279
+ "size": 1024,
280
+ "mtime": "2026-11-03T09:30:00Z"
281
+ },
282
+ {
283
+ "id": "Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8",
284
+ "name": "f031.txt",
285
+ "type": "file",
286
+ "size": 1024,
287
+ "mtime": "2026-11-03T09:30:00Z"
288
+ },
289
+ {
290
+ "id": "ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA",
291
+ "name": "f032.txt",
292
+ "type": "file",
293
+ "size": 1024,
294
+ "mtime": "2026-11-03T09:30:00Z"
295
+ },
296
+ {
297
+ "id": "ISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE",
298
+ "name": "f033.txt",
299
+ "type": "file",
300
+ "size": 1024,
301
+ "mtime": "2026-11-03T09:30:00Z"
302
+ },
303
+ {
304
+ "id": "IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI",
305
+ "name": "f034.txt",
306
+ "type": "file",
307
+ "size": 1024,
308
+ "mtime": "2026-11-03T09:30:00Z"
309
+ },
310
+ {
311
+ "id": "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM",
312
+ "name": "f035.txt",
313
+ "type": "file",
314
+ "size": 1024,
315
+ "mtime": "2026-11-03T09:30:00Z"
316
+ },
317
+ {
318
+ "id": "JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ",
319
+ "name": "f036.txt",
320
+ "type": "file",
321
+ "size": 1024,
322
+ "mtime": "2026-11-03T09:30:00Z"
323
+ },
324
+ {
325
+ "id": "JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSU",
326
+ "name": "f037.txt",
327
+ "type": "file",
328
+ "size": 1024,
329
+ "mtime": "2026-11-03T09:30:00Z"
330
+ },
331
+ {
332
+ "id": "JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiY",
333
+ "name": "f038.txt",
334
+ "type": "file",
335
+ "size": 1024,
336
+ "mtime": "2026-11-03T09:30:00Z"
337
+ },
338
+ {
339
+ "id": "JycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJyc",
340
+ "name": "f039.txt",
341
+ "type": "file",
342
+ "size": 1024,
343
+ "mtime": "2026-11-03T09:30:00Z"
344
+ },
345
+ {
346
+ "id": "KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg",
347
+ "name": "f040.txt",
348
+ "type": "file",
349
+ "size": 1024,
350
+ "mtime": "2026-11-03T09:30:00Z"
351
+ },
352
+ {
353
+ "id": "KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSk",
354
+ "name": "f041.txt",
355
+ "type": "file",
356
+ "size": 1024,
357
+ "mtime": "2026-11-03T09:30:00Z"
358
+ },
359
+ {
360
+ "id": "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio",
361
+ "name": "f042.txt",
362
+ "type": "file",
363
+ "size": 1024,
364
+ "mtime": "2026-11-03T09:30:00Z"
365
+ },
366
+ {
367
+ "id": "KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKys",
368
+ "name": "f043.txt",
369
+ "type": "file",
370
+ "size": 1024,
371
+ "mtime": "2026-11-03T09:30:00Z"
372
+ },
373
+ {
374
+ "id": "LCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCw",
375
+ "name": "f044.txt",
376
+ "type": "file",
377
+ "size": 1024,
378
+ "mtime": "2026-11-03T09:30:00Z"
379
+ },
380
+ {
381
+ "id": "LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0",
382
+ "name": "f045.txt",
383
+ "type": "file",
384
+ "size": 1024,
385
+ "mtime": "2026-11-03T09:30:00Z"
386
+ },
387
+ {
388
+ "id": "Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4",
389
+ "name": "f046.txt",
390
+ "type": "file",
391
+ "size": 1024,
392
+ "mtime": "2026-11-03T09:30:00Z"
393
+ },
394
+ {
395
+ "id": "Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8",
396
+ "name": "f047.txt",
397
+ "type": "file",
398
+ "size": 1024,
399
+ "mtime": "2026-11-03T09:30:00Z"
400
+ },
401
+ {
402
+ "id": "MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA",
403
+ "name": "f048.txt",
404
+ "type": "file",
405
+ "size": 1024,
406
+ "mtime": "2026-11-03T09:30:00Z"
407
+ },
408
+ {
409
+ "id": "MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE",
410
+ "name": "f049.txt",
411
+ "type": "file",
412
+ "size": 1024,
413
+ "mtime": "2026-11-03T09:30:00Z"
414
+ },
415
+ {
416
+ "id": "MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI",
417
+ "name": "f050.txt",
418
+ "type": "file",
419
+ "size": 1024,
420
+ "mtime": "2026-11-03T09:30:00Z"
421
+ },
422
+ {
423
+ "id": "MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM",
424
+ "name": "f051.txt",
425
+ "type": "file",
426
+ "size": 1024,
427
+ "mtime": "2026-11-03T09:30:00Z"
428
+ },
429
+ {
430
+ "id": "NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ",
431
+ "name": "f052.txt",
432
+ "type": "file",
433
+ "size": 1024,
434
+ "mtime": "2026-11-03T09:30:00Z"
435
+ },
436
+ {
437
+ "id": "NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU",
438
+ "name": "f053.txt",
439
+ "type": "file",
440
+ "size": 1024,
441
+ "mtime": "2026-11-03T09:30:00Z"
442
+ },
443
+ {
444
+ "id": "NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY",
445
+ "name": "f054.txt",
446
+ "type": "file",
447
+ "size": 1024,
448
+ "mtime": "2026-11-03T09:30:00Z"
449
+ },
450
+ {
451
+ "id": "Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc",
452
+ "name": "f055.txt",
453
+ "type": "file",
454
+ "size": 1024,
455
+ "mtime": "2026-11-03T09:30:00Z"
456
+ },
457
+ {
458
+ "id": "ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg",
459
+ "name": "f056.txt",
460
+ "type": "file",
461
+ "size": 1024,
462
+ "mtime": "2026-11-03T09:30:00Z"
463
+ },
464
+ {
465
+ "id": "OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk",
466
+ "name": "f057.txt",
467
+ "type": "file",
468
+ "size": 1024,
469
+ "mtime": "2026-11-03T09:30:00Z"
470
+ },
471
+ {
472
+ "id": "Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo",
473
+ "name": "f058.txt",
474
+ "type": "file",
475
+ "size": 1024,
476
+ "mtime": "2026-11-03T09:30:00Z"
477
+ },
478
+ {
479
+ "id": "Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs",
480
+ "name": "f059.txt",
481
+ "type": "file",
482
+ "size": 1024,
483
+ "mtime": "2026-11-03T09:30:00Z"
484
+ },
485
+ {
486
+ "id": "PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw",
487
+ "name": "f060.txt",
488
+ "type": "file",
489
+ "size": 1024,
490
+ "mtime": "2026-11-03T09:30:00Z"
491
+ },
492
+ {
493
+ "id": "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0",
494
+ "name": "f061.txt",
495
+ "type": "file",
496
+ "size": 1024,
497
+ "mtime": "2026-11-03T09:30:00Z"
498
+ },
499
+ {
500
+ "id": "Pj4-Pj4-Pj4-Pj4-Pj4-Pj4-Pj4-Pj4-Pj4-Pj4-Pj4",
501
+ "name": "f062.txt",
502
+ "type": "file",
503
+ "size": 1024,
504
+ "mtime": "2026-11-03T09:30:00Z"
505
+ },
506
+ {
507
+ "id": "Pz8_Pz8_Pz8_Pz8_Pz8_Pz8_Pz8_Pz8_Pz8_Pz8_Pz8",
508
+ "name": "f063.txt",
509
+ "type": "file",
510
+ "size": 1024,
511
+ "mtime": "2026-11-03T09:30:00Z"
512
+ },
513
+ {
514
+ "id": "QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA",
515
+ "name": "f064.txt",
516
+ "type": "file",
517
+ "size": 1024,
518
+ "mtime": "2026-11-03T09:30:00Z"
519
+ },
520
+ {
521
+ "id": "QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE",
522
+ "name": "f065.txt",
523
+ "type": "file",
524
+ "size": 1024,
525
+ "mtime": "2026-11-03T09:30:00Z"
526
+ },
527
+ {
528
+ "id": "QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkI",
529
+ "name": "f066.txt",
530
+ "type": "file",
531
+ "size": 1024,
532
+ "mtime": "2026-11-03T09:30:00Z"
533
+ },
534
+ {
535
+ "id": "Q0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M",
536
+ "name": "f067.txt",
537
+ "type": "file",
538
+ "size": 1024,
539
+ "mtime": "2026-11-03T09:30:00Z"
540
+ },
541
+ {
542
+ "id": "REREREREREREREREREREREREREREREREREREREREREQ",
543
+ "name": "f068.txt",
544
+ "type": "file",
545
+ "size": 1024,
546
+ "mtime": "2026-11-03T09:30:00Z"
547
+ },
548
+ {
549
+ "id": "RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUU",
550
+ "name": "f069.txt",
551
+ "type": "file",
552
+ "size": 1024,
553
+ "mtime": "2026-11-03T09:30:00Z"
554
+ },
555
+ {
556
+ "id": "RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY",
557
+ "name": "f070.txt",
558
+ "type": "file",
559
+ "size": 1024,
560
+ "mtime": "2026-11-03T09:30:00Z"
561
+ },
562
+ {
563
+ "id": "R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0c",
564
+ "name": "f071.txt",
565
+ "type": "file",
566
+ "size": 1024,
567
+ "mtime": "2026-11-03T09:30:00Z"
568
+ },
569
+ {
570
+ "id": "SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEg",
571
+ "name": "f072.txt",
572
+ "type": "file",
573
+ "size": 1024,
574
+ "mtime": "2026-11-03T09:30:00Z"
575
+ },
576
+ {
577
+ "id": "SUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUk",
578
+ "name": "f073.txt",
579
+ "type": "file",
580
+ "size": 1024,
581
+ "mtime": "2026-11-03T09:30:00Z"
582
+ },
583
+ {
584
+ "id": "SkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSko",
585
+ "name": "f074.txt",
586
+ "type": "file",
587
+ "size": 1024,
588
+ "mtime": "2026-11-03T09:30:00Z"
589
+ },
590
+ {
591
+ "id": "S0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0s",
592
+ "name": "f075.txt",
593
+ "type": "file",
594
+ "size": 1024,
595
+ "mtime": "2026-11-03T09:30:00Z"
596
+ },
597
+ {
598
+ "id": "TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEw",
599
+ "name": "f076.txt",
600
+ "type": "file",
601
+ "size": 1024,
602
+ "mtime": "2026-11-03T09:30:00Z"
603
+ },
604
+ {
605
+ "id": "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0",
606
+ "name": "f077.txt",
607
+ "type": "file",
608
+ "size": 1024,
609
+ "mtime": "2026-11-03T09:30:00Z"
610
+ },
611
+ {
612
+ "id": "Tk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4",
613
+ "name": "f078.txt",
614
+ "type": "file",
615
+ "size": 1024,
616
+ "mtime": "2026-11-03T09:30:00Z"
617
+ },
618
+ {
619
+ "id": "T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08",
620
+ "name": "f079.txt",
621
+ "type": "file",
622
+ "size": 1024,
623
+ "mtime": "2026-11-03T09:30:00Z"
624
+ },
625
+ {
626
+ "id": "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFA",
627
+ "name": "f080.txt",
628
+ "type": "file",
629
+ "size": 1024,
630
+ "mtime": "2026-11-03T09:30:00Z"
631
+ },
632
+ {
633
+ "id": "UVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVE",
634
+ "name": "f081.txt",
635
+ "type": "file",
636
+ "size": 1024,
637
+ "mtime": "2026-11-03T09:30:00Z"
638
+ },
639
+ {
640
+ "id": "UlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlI",
641
+ "name": "f082.txt",
642
+ "type": "file",
643
+ "size": 1024,
644
+ "mtime": "2026-11-03T09:30:00Z"
645
+ },
646
+ {
647
+ "id": "U1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1M",
648
+ "name": "f083.txt",
649
+ "type": "file",
650
+ "size": 1024,
651
+ "mtime": "2026-11-03T09:30:00Z"
652
+ },
653
+ {
654
+ "id": "VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFQ",
655
+ "name": "f084.txt",
656
+ "type": "file",
657
+ "size": 1024,
658
+ "mtime": "2026-11-03T09:30:00Z"
659
+ },
660
+ {
661
+ "id": "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU",
662
+ "name": "f085.txt",
663
+ "type": "file",
664
+ "size": 1024,
665
+ "mtime": "2026-11-03T09:30:00Z"
666
+ },
667
+ {
668
+ "id": "VlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlY",
669
+ "name": "f086.txt",
670
+ "type": "file",
671
+ "size": 1024,
672
+ "mtime": "2026-11-03T09:30:00Z"
673
+ },
674
+ {
675
+ "id": "V1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1c",
676
+ "name": "f087.txt",
677
+ "type": "file",
678
+ "size": 1024,
679
+ "mtime": "2026-11-03T09:30:00Z"
680
+ },
681
+ {
682
+ "id": "WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFg",
683
+ "name": "f088.txt",
684
+ "type": "file",
685
+ "size": 1024,
686
+ "mtime": "2026-11-03T09:30:00Z"
687
+ },
688
+ {
689
+ "id": "WVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVk",
690
+ "name": "f089.txt",
691
+ "type": "file",
692
+ "size": 1024,
693
+ "mtime": "2026-11-03T09:30:00Z"
694
+ },
695
+ {
696
+ "id": "WlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlo",
697
+ "name": "f090.txt",
698
+ "type": "file",
699
+ "size": 1024,
700
+ "mtime": "2026-11-03T09:30:00Z"
701
+ },
702
+ {
703
+ "id": "W1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1s",
704
+ "name": "f091.txt",
705
+ "type": "file",
706
+ "size": 1024,
707
+ "mtime": "2026-11-03T09:30:00Z"
708
+ },
709
+ {
710
+ "id": "XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFw",
711
+ "name": "f092.txt",
712
+ "type": "file",
713
+ "size": 1024,
714
+ "mtime": "2026-11-03T09:30:00Z"
715
+ },
716
+ {
717
+ "id": "XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0",
718
+ "name": "f093.txt",
719
+ "type": "file",
720
+ "size": 1024,
721
+ "mtime": "2026-11-03T09:30:00Z"
722
+ },
723
+ {
724
+ "id": "Xl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4",
725
+ "name": "f094.txt",
726
+ "type": "file",
727
+ "size": 1024,
728
+ "mtime": "2026-11-03T09:30:00Z"
729
+ },
730
+ {
731
+ "id": "X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18",
732
+ "name": "f095.txt",
733
+ "type": "file",
734
+ "size": 1024,
735
+ "mtime": "2026-11-03T09:30:00Z"
736
+ },
737
+ {
738
+ "id": "YGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGA",
739
+ "name": "f096.txt",
740
+ "type": "file",
741
+ "size": 1024,
742
+ "mtime": "2026-11-03T09:30:00Z"
743
+ },
744
+ {
745
+ "id": "YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE",
746
+ "name": "f097.txt",
747
+ "type": "file",
748
+ "size": 1024,
749
+ "mtime": "2026-11-03T09:30:00Z"
750
+ },
751
+ {
752
+ "id": "YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmI",
753
+ "name": "f098.txt",
754
+ "type": "file",
755
+ "size": 1024,
756
+ "mtime": "2026-11-03T09:30:00Z"
757
+ },
758
+ {
759
+ "id": "Y2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2M",
760
+ "name": "f099.txt",
761
+ "type": "file",
762
+ "size": 1024,
763
+ "mtime": "2026-11-03T09:30:00Z"
764
+ }
765
+ ]
766
+ }
767
+ },
768
+ {
769
+ "name": "name-hidden-file",
770
+ "expect": {
771
+ "valid": true
772
+ },
773
+ "message": {
774
+ "entries": [
775
+ {
776
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
777
+ "name": ".gitignore",
778
+ "type": "file",
779
+ "size": 1024,
780
+ "mtime": "2026-11-03T09:30:00Z"
781
+ }
782
+ ]
783
+ }
784
+ },
785
+ {
786
+ "name": "name-three-dots",
787
+ "why": "only `.` and `..` are refused",
788
+ "expect": {
789
+ "valid": true
790
+ },
791
+ "message": {
792
+ "entries": [
793
+ {
794
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
795
+ "name": "...",
796
+ "type": "file",
797
+ "size": 1024,
798
+ "mtime": "2026-11-03T09:30:00Z"
799
+ }
800
+ ]
801
+ }
802
+ },
803
+ {
804
+ "name": "name-code-file-with-credentials-in-it",
805
+ "why": "a name is never judged here: which files the agent lists is its deny list, not this schema",
806
+ "expect": {
807
+ "valid": true
808
+ },
809
+ "message": {
810
+ "entries": [
811
+ {
812
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
813
+ "name": "CredentialsController.java",
814
+ "type": "file",
815
+ "size": 1024,
816
+ "mtime": "2026-11-03T09:30:00Z"
817
+ }
818
+ ]
819
+ }
820
+ },
821
+ {
822
+ "name": "name-with-spaces",
823
+ "expect": {
824
+ "valid": true
825
+ },
826
+ "message": {
827
+ "entries": [
828
+ {
829
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
830
+ "name": "my file (1).txt",
831
+ "type": "file",
832
+ "size": 1024,
833
+ "mtime": "2026-11-03T09:30:00Z"
834
+ }
835
+ ]
836
+ }
837
+ },
838
+ {
839
+ "name": "name-unicode",
840
+ "expect": {
841
+ "valid": true
842
+ },
843
+ "message": {
844
+ "entries": [
845
+ {
846
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
847
+ "name": "relatório-中文.md",
848
+ "type": "file",
849
+ "size": 1024,
850
+ "mtime": "2026-11-03T09:30:00Z"
851
+ }
852
+ ]
853
+ }
854
+ },
855
+ {
856
+ "name": "name-backslash-is-a-valid-posix-name",
857
+ "expect": {
858
+ "valid": true
859
+ },
860
+ "message": {
861
+ "entries": [
862
+ {
863
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
864
+ "name": "a\\b",
865
+ "type": "file",
866
+ "size": 1024,
867
+ "mtime": "2026-11-03T09:30:00Z"
868
+ }
869
+ ]
870
+ }
871
+ },
872
+ {
873
+ "name": "name-255-chars",
874
+ "expect": {
875
+ "valid": true
876
+ },
877
+ "message": {
878
+ "entries": [
879
+ {
880
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
881
+ "name": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
882
+ "type": "file",
883
+ "size": 1024,
884
+ "mtime": "2026-11-03T09:30:00Z"
885
+ }
886
+ ]
887
+ }
888
+ },
889
+ {
890
+ "name": "name-255-code-points-outside-the-bmp",
891
+ "why": "maxLength counts code points, not UTF-16 units",
892
+ "expect": {
893
+ "valid": true
894
+ },
895
+ "message": {
896
+ "entries": [
897
+ {
898
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
899
+ "name": "😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀",
900
+ "type": "file",
901
+ "size": 1024,
902
+ "mtime": "2026-11-03T09:30:00Z"
903
+ }
904
+ ]
905
+ }
906
+ },
907
+ {
908
+ "name": "size-zero-and-ceiling",
909
+ "expect": {
910
+ "valid": true
911
+ },
912
+ "message": {
913
+ "entries": [
914
+ {
915
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
916
+ "name": "empty",
917
+ "type": "file",
918
+ "size": 0,
919
+ "mtime": "2026-11-03T09:30:00Z"
920
+ },
921
+ {
922
+ "id": "AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI",
923
+ "name": "huge",
924
+ "type": "file",
925
+ "size": 1099511627776,
926
+ "mtime": "2026-11-03T09:30:00Z"
927
+ }
928
+ ]
929
+ }
930
+ },
931
+ {
932
+ "name": "fractional-seconds-mtime",
933
+ "expect": {
934
+ "valid": true
935
+ },
936
+ "message": {
937
+ "entries": [
938
+ {
939
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
940
+ "name": "Main.java",
941
+ "type": "file",
942
+ "size": 1024,
943
+ "mtime": "2026-11-03T09:30:00.123456Z"
944
+ }
945
+ ]
946
+ }
947
+ },
948
+ {
949
+ "name": "entries-missing",
950
+ "expect": {
951
+ "valid": false,
952
+ "keyword": "required"
953
+ },
954
+ "message": {
955
+ "nextRef": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE"
956
+ }
957
+ },
958
+ {
959
+ "name": "entries-not-an-array",
960
+ "expect": {
961
+ "valid": false,
962
+ "keyword": "type"
963
+ },
964
+ "message": {
965
+ "entries": {}
966
+ }
967
+ },
968
+ {
969
+ "name": "body-is-an-array",
970
+ "expect": {
971
+ "valid": false,
972
+ "keyword": "type"
973
+ },
974
+ "message": [
975
+ {
976
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
977
+ "name": "Main.java",
978
+ "type": "file",
979
+ "size": 1024,
980
+ "mtime": "2026-11-03T09:30:00Z"
981
+ }
982
+ ]
983
+ },
984
+ {
985
+ "name": "extra-top-level-path",
986
+ "why": "the folder path is never in the body",
987
+ "expect": {
988
+ "valid": false,
989
+ "keyword": "additionalProperties"
990
+ },
991
+ "message": {
992
+ "entries": [],
993
+ "path": "src/main"
994
+ }
995
+ },
996
+ {
997
+ "name": "extra-top-level-total",
998
+ "expect": {
999
+ "valid": false,
1000
+ "keyword": "additionalProperties"
1001
+ },
1002
+ "message": {
1003
+ "entries": [],
1004
+ "total": 3
1005
+ }
1006
+ },
1007
+ {
1008
+ "name": "entry-extra-path",
1009
+ "why": "an entry has a base name, never a path",
1010
+ "expect": {
1011
+ "valid": false,
1012
+ "keyword": "additionalProperties"
1013
+ },
1014
+ "message": {
1015
+ "entries": [
1016
+ {
1017
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1018
+ "name": "Main.java",
1019
+ "type": "file",
1020
+ "size": 1024,
1021
+ "mtime": "2026-11-03T09:30:00Z",
1022
+ "path": "src/main/Main.java"
1023
+ }
1024
+ ]
1025
+ }
1026
+ },
1027
+ {
1028
+ "name": "entry-extra-abs-path",
1029
+ "expect": {
1030
+ "valid": false,
1031
+ "keyword": "additionalProperties"
1032
+ },
1033
+ "message": {
1034
+ "entries": [
1035
+ {
1036
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1037
+ "name": "Main.java",
1038
+ "type": "file",
1039
+ "size": 1024,
1040
+ "mtime": "2026-11-03T09:30:00Z",
1041
+ "absPath": "/home/u/proj/Main.java"
1042
+ }
1043
+ ]
1044
+ }
1045
+ },
1046
+ {
1047
+ "name": "entry-missing-id",
1048
+ "expect": {
1049
+ "valid": false,
1050
+ "keyword": "required"
1051
+ },
1052
+ "message": {
1053
+ "entries": [
1054
+ {
1055
+ "name": "Main.java",
1056
+ "type": "file",
1057
+ "size": 1024,
1058
+ "mtime": "2026-11-03T09:30:00Z"
1059
+ }
1060
+ ]
1061
+ }
1062
+ },
1063
+ {
1064
+ "name": "entry-missing-name",
1065
+ "expect": {
1066
+ "valid": false,
1067
+ "keyword": "required"
1068
+ },
1069
+ "message": {
1070
+ "entries": [
1071
+ {
1072
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1073
+ "type": "file",
1074
+ "size": 1024,
1075
+ "mtime": "2026-11-03T09:30:00Z"
1076
+ }
1077
+ ]
1078
+ }
1079
+ },
1080
+ {
1081
+ "name": "entry-missing-type",
1082
+ "expect": {
1083
+ "valid": false,
1084
+ "keyword": "required"
1085
+ },
1086
+ "message": {
1087
+ "entries": [
1088
+ {
1089
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1090
+ "name": "Main.java",
1091
+ "size": 1024,
1092
+ "mtime": "2026-11-03T09:30:00Z"
1093
+ }
1094
+ ]
1095
+ }
1096
+ },
1097
+ {
1098
+ "name": "entry-missing-size",
1099
+ "expect": {
1100
+ "valid": false,
1101
+ "keyword": "required"
1102
+ },
1103
+ "message": {
1104
+ "entries": [
1105
+ {
1106
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1107
+ "name": "Main.java",
1108
+ "type": "file",
1109
+ "mtime": "2026-11-03T09:30:00Z"
1110
+ }
1111
+ ]
1112
+ }
1113
+ },
1114
+ {
1115
+ "name": "entry-missing-mtime",
1116
+ "expect": {
1117
+ "valid": false,
1118
+ "keyword": "required"
1119
+ },
1120
+ "message": {
1121
+ "entries": [
1122
+ {
1123
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1124
+ "name": "Main.java",
1125
+ "type": "file",
1126
+ "size": 1024
1127
+ }
1128
+ ]
1129
+ }
1130
+ },
1131
+ {
1132
+ "name": "id-26-chars-prefixed",
1133
+ "why": "the old 26-character form is not an id",
1134
+ "expect": {
1135
+ "valid": false,
1136
+ "keyword": "minLength"
1137
+ },
1138
+ "message": {
1139
+ "entries": [
1140
+ {
1141
+ "id": "cr1_AAAAAAAAAAAAAAAAAAAAAA",
1142
+ "name": "Main.java",
1143
+ "type": "file",
1144
+ "size": 1024,
1145
+ "mtime": "2026-11-03T09:30:00Z"
1146
+ }
1147
+ ]
1148
+ }
1149
+ },
1150
+ {
1151
+ "name": "id-44-chars",
1152
+ "expect": {
1153
+ "valid": false,
1154
+ "keyword": "maxLength"
1155
+ },
1156
+ "message": {
1157
+ "entries": [
1158
+ {
1159
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA",
1160
+ "name": "Main.java",
1161
+ "type": "file",
1162
+ "size": 1024,
1163
+ "mtime": "2026-11-03T09:30:00Z"
1164
+ }
1165
+ ]
1166
+ }
1167
+ },
1168
+ {
1169
+ "name": "id-42-chars",
1170
+ "expect": {
1171
+ "valid": false,
1172
+ "keyword": "minLength"
1173
+ },
1174
+ "message": {
1175
+ "entries": [
1176
+ {
1177
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ",
1178
+ "name": "Main.java",
1179
+ "type": "file",
1180
+ "size": 1024,
1181
+ "mtime": "2026-11-03T09:30:00Z"
1182
+ }
1183
+ ]
1184
+ }
1185
+ },
1186
+ {
1187
+ "name": "id-with-slash",
1188
+ "expect": {
1189
+ "valid": false,
1190
+ "keyword": "pattern"
1191
+ },
1192
+ "message": {
1193
+ "entries": [
1194
+ {
1195
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ/",
1196
+ "name": "Main.java",
1197
+ "type": "file",
1198
+ "size": 1024,
1199
+ "mtime": "2026-11-03T09:30:00Z"
1200
+ }
1201
+ ]
1202
+ }
1203
+ },
1204
+ {
1205
+ "name": "id-with-padding",
1206
+ "expect": {
1207
+ "valid": false,
1208
+ "keyword": "pattern"
1209
+ },
1210
+ "message": {
1211
+ "entries": [
1212
+ {
1213
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ=",
1214
+ "name": "Main.java",
1215
+ "type": "file",
1216
+ "size": 1024,
1217
+ "mtime": "2026-11-03T09:30:00Z"
1218
+ }
1219
+ ]
1220
+ }
1221
+ },
1222
+ {
1223
+ "name": "id-is-a-path",
1224
+ "expect": {
1225
+ "valid": false,
1226
+ "keyword": "minLength"
1227
+ },
1228
+ "message": {
1229
+ "entries": [
1230
+ {
1231
+ "id": "src/main/java/acme/Main.java",
1232
+ "name": "Main.java",
1233
+ "type": "file",
1234
+ "size": 1024,
1235
+ "mtime": "2026-11-03T09:30:00Z"
1236
+ }
1237
+ ]
1238
+ }
1239
+ },
1240
+ {
1241
+ "name": "name-empty",
1242
+ "expect": {
1243
+ "valid": false,
1244
+ "keyword": "minLength"
1245
+ },
1246
+ "message": {
1247
+ "entries": [
1248
+ {
1249
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1250
+ "name": "",
1251
+ "type": "file",
1252
+ "size": 1024,
1253
+ "mtime": "2026-11-03T09:30:00Z"
1254
+ }
1255
+ ]
1256
+ }
1257
+ },
1258
+ {
1259
+ "name": "name-dot",
1260
+ "expect": {
1261
+ "valid": false,
1262
+ "keyword": "not"
1263
+ },
1264
+ "message": {
1265
+ "entries": [
1266
+ {
1267
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1268
+ "name": ".",
1269
+ "type": "file",
1270
+ "size": 1024,
1271
+ "mtime": "2026-11-03T09:30:00Z"
1272
+ }
1273
+ ]
1274
+ }
1275
+ },
1276
+ {
1277
+ "name": "name-dot-dot",
1278
+ "expect": {
1279
+ "valid": false,
1280
+ "keyword": "not"
1281
+ },
1282
+ "message": {
1283
+ "entries": [
1284
+ {
1285
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1286
+ "name": "..",
1287
+ "type": "file",
1288
+ "size": 1024,
1289
+ "mtime": "2026-11-03T09:30:00Z"
1290
+ }
1291
+ ]
1292
+ }
1293
+ },
1294
+ {
1295
+ "name": "name-with-slash",
1296
+ "why": "a name with a separator is a path",
1297
+ "expect": {
1298
+ "valid": false,
1299
+ "keyword": "pattern"
1300
+ },
1301
+ "message": {
1302
+ "entries": [
1303
+ {
1304
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1305
+ "name": "src/Main.java",
1306
+ "type": "file",
1307
+ "size": 1024,
1308
+ "mtime": "2026-11-03T09:30:00Z"
1309
+ }
1310
+ ]
1311
+ }
1312
+ },
1313
+ {
1314
+ "name": "name-leading-slash",
1315
+ "expect": {
1316
+ "valid": false,
1317
+ "keyword": "pattern"
1318
+ },
1319
+ "message": {
1320
+ "entries": [
1321
+ {
1322
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1323
+ "name": "/etc/passwd",
1324
+ "type": "file",
1325
+ "size": 1024,
1326
+ "mtime": "2026-11-03T09:30:00Z"
1327
+ }
1328
+ ]
1329
+ }
1330
+ },
1331
+ {
1332
+ "name": "name-with-newline",
1333
+ "expect": {
1334
+ "valid": false,
1335
+ "keyword": "pattern"
1336
+ },
1337
+ "message": {
1338
+ "entries": [
1339
+ {
1340
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1341
+ "name": "a\nb",
1342
+ "type": "file",
1343
+ "size": 1024,
1344
+ "mtime": "2026-11-03T09:30:00Z"
1345
+ }
1346
+ ]
1347
+ }
1348
+ },
1349
+ {
1350
+ "name": "name-with-nul",
1351
+ "expect": {
1352
+ "valid": false,
1353
+ "keyword": "pattern"
1354
+ },
1355
+ "message": {
1356
+ "entries": [
1357
+ {
1358
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1359
+ "name": "a\u0000b",
1360
+ "type": "file",
1361
+ "size": 1024,
1362
+ "mtime": "2026-11-03T09:30:00Z"
1363
+ }
1364
+ ]
1365
+ }
1366
+ },
1367
+ {
1368
+ "name": "name-with-del",
1369
+ "expect": {
1370
+ "valid": false,
1371
+ "keyword": "pattern"
1372
+ },
1373
+ "message": {
1374
+ "entries": [
1375
+ {
1376
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1377
+ "name": "ab",
1378
+ "type": "file",
1379
+ "size": 1024,
1380
+ "mtime": "2026-11-03T09:30:00Z"
1381
+ }
1382
+ ]
1383
+ }
1384
+ },
1385
+ {
1386
+ "name": "name-256-chars",
1387
+ "expect": {
1388
+ "valid": false,
1389
+ "keyword": "maxLength"
1390
+ },
1391
+ "message": {
1392
+ "entries": [
1393
+ {
1394
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1395
+ "name": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
1396
+ "type": "file",
1397
+ "size": 1024,
1398
+ "mtime": "2026-11-03T09:30:00Z"
1399
+ }
1400
+ ]
1401
+ }
1402
+ },
1403
+ {
1404
+ "name": "name-not-a-string",
1405
+ "expect": {
1406
+ "valid": false,
1407
+ "keyword": "type"
1408
+ },
1409
+ "message": {
1410
+ "entries": [
1411
+ {
1412
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1413
+ "name": 7,
1414
+ "type": "file",
1415
+ "size": 1024,
1416
+ "mtime": "2026-11-03T09:30:00Z"
1417
+ }
1418
+ ]
1419
+ }
1420
+ },
1421
+ {
1422
+ "name": "type-symlink",
1423
+ "why": "links are not listed: the agent serves only what it can serve",
1424
+ "expect": {
1425
+ "valid": false,
1426
+ "keyword": "enum"
1427
+ },
1428
+ "message": {
1429
+ "entries": [
1430
+ {
1431
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1432
+ "name": "Main.java",
1433
+ "type": "symlink",
1434
+ "size": 1024,
1435
+ "mtime": "2026-11-03T09:30:00Z"
1436
+ }
1437
+ ]
1438
+ }
1439
+ },
1440
+ {
1441
+ "name": "type-upper-case",
1442
+ "expect": {
1443
+ "valid": false,
1444
+ "keyword": "enum"
1445
+ },
1446
+ "message": {
1447
+ "entries": [
1448
+ {
1449
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1450
+ "name": "Main.java",
1451
+ "type": "File",
1452
+ "size": 1024,
1453
+ "mtime": "2026-11-03T09:30:00Z"
1454
+ }
1455
+ ]
1456
+ }
1457
+ },
1458
+ {
1459
+ "name": "size-negative",
1460
+ "expect": {
1461
+ "valid": false,
1462
+ "keyword": "minimum"
1463
+ },
1464
+ "message": {
1465
+ "entries": [
1466
+ {
1467
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1468
+ "name": "Main.java",
1469
+ "type": "file",
1470
+ "size": -1,
1471
+ "mtime": "2026-11-03T09:30:00Z"
1472
+ }
1473
+ ]
1474
+ }
1475
+ },
1476
+ {
1477
+ "name": "size-fractional",
1478
+ "expect": {
1479
+ "valid": false,
1480
+ "keyword": "type"
1481
+ },
1482
+ "message": {
1483
+ "entries": [
1484
+ {
1485
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1486
+ "name": "Main.java",
1487
+ "type": "file",
1488
+ "size": 1.5,
1489
+ "mtime": "2026-11-03T09:30:00Z"
1490
+ }
1491
+ ]
1492
+ }
1493
+ },
1494
+ {
1495
+ "name": "size-above-ceiling",
1496
+ "expect": {
1497
+ "valid": false,
1498
+ "keyword": "maximum"
1499
+ },
1500
+ "message": {
1501
+ "entries": [
1502
+ {
1503
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1504
+ "name": "Main.java",
1505
+ "type": "file",
1506
+ "size": 1099511627777,
1507
+ "mtime": "2026-11-03T09:30:00Z"
1508
+ }
1509
+ ]
1510
+ }
1511
+ },
1512
+ {
1513
+ "name": "mtime-not-rfc3339",
1514
+ "expect": {
1515
+ "valid": false,
1516
+ "keyword": "minLength"
1517
+ },
1518
+ "message": {
1519
+ "entries": [
1520
+ {
1521
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1522
+ "name": "Main.java",
1523
+ "type": "file",
1524
+ "size": 1024,
1525
+ "mtime": "yesterday"
1526
+ }
1527
+ ]
1528
+ }
1529
+ },
1530
+ {
1531
+ "name": "mtime-without-z",
1532
+ "expect": {
1533
+ "valid": false,
1534
+ "keyword": "pattern"
1535
+ },
1536
+ "message": {
1537
+ "entries": [
1538
+ {
1539
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1540
+ "name": "Main.java",
1541
+ "type": "file",
1542
+ "size": 1024,
1543
+ "mtime": "2026-11-03T09:30:00+01:00"
1544
+ }
1545
+ ]
1546
+ }
1547
+ },
1548
+ {
1549
+ "name": "next-ref-26-chars",
1550
+ "expect": {
1551
+ "valid": false,
1552
+ "keyword": "minLength"
1553
+ },
1554
+ "message": {
1555
+ "entries": [
1556
+ {
1557
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1558
+ "name": "Main.java",
1559
+ "type": "file",
1560
+ "size": 1024,
1561
+ "mtime": "2026-11-03T09:30:00Z"
1562
+ }
1563
+ ],
1564
+ "nextRef": "cr1_AAAAAAAAAAAAAAAAAAAAAA"
1565
+ }
1566
+ },
1567
+ {
1568
+ "name": "next-ref-with-slash",
1569
+ "expect": {
1570
+ "valid": false,
1571
+ "keyword": "pattern"
1572
+ },
1573
+ "message": {
1574
+ "entries": [
1575
+ {
1576
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1577
+ "name": "Main.java",
1578
+ "type": "file",
1579
+ "size": 1024,
1580
+ "mtime": "2026-11-03T09:30:00Z"
1581
+ }
1582
+ ],
1583
+ "nextRef": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ/"
1584
+ }
1585
+ },
1586
+ {
1587
+ "name": "next-ref-empty",
1588
+ "expect": {
1589
+ "valid": false,
1590
+ "keyword": "minLength"
1591
+ },
1592
+ "message": {
1593
+ "entries": [
1594
+ {
1595
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1596
+ "name": "Main.java",
1597
+ "type": "file",
1598
+ "size": 1024,
1599
+ "mtime": "2026-11-03T09:30:00Z"
1600
+ }
1601
+ ],
1602
+ "nextRef": ""
1603
+ }
1604
+ },
1605
+ {
1606
+ "name": "next-ref-root",
1607
+ "why": "`root` is a symbolic request ref, never a continuation",
1608
+ "expect": {
1609
+ "valid": false,
1610
+ "keyword": "minLength"
1611
+ },
1612
+ "message": {
1613
+ "entries": [
1614
+ {
1615
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1616
+ "name": "Main.java",
1617
+ "type": "file",
1618
+ "size": 1024,
1619
+ "mtime": "2026-11-03T09:30:00Z"
1620
+ }
1621
+ ],
1622
+ "nextRef": "root"
1623
+ }
1624
+ },
1625
+ {
1626
+ "name": "next-ref-null",
1627
+ "expect": {
1628
+ "valid": false,
1629
+ "keyword": "type"
1630
+ },
1631
+ "message": {
1632
+ "entries": [
1633
+ {
1634
+ "id": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE",
1635
+ "name": "Main.java",
1636
+ "type": "file",
1637
+ "size": 1024,
1638
+ "mtime": "2026-11-03T09:30:00Z"
1639
+ }
1640
+ ],
1641
+ "nextRef": null
1642
+ }
1643
+ }
1644
+ ]
1645
+ }