@karmaniverous/jeeves-server-core 0.4.0 → 0.5.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 (60) hide show
  1. package/README.md +49 -12
  2. package/dist/openapi.json.js +4038 -0
  3. package/dist/scripts/openapiInfo.d.ts +15 -0
  4. package/dist/src/catalog/browserSafe.test.d.ts +4 -0
  5. package/dist/src/catalog/contentEntries.d.ts +468 -0
  6. package/dist/src/catalog/contentEntries.js +150 -0
  7. package/dist/src/catalog/contentSchemas.d.ts +179 -0
  8. package/dist/src/catalog/contentSchemas.js +195 -0
  9. package/dist/src/catalog/descriptions.d.ts +52 -0
  10. package/dist/src/catalog/descriptions.js +54 -0
  11. package/dist/src/catalog/eventEntries.d.ts +70 -0
  12. package/dist/src/catalog/eventEntries.js +59 -0
  13. package/dist/src/catalog/fileMutateSchema.d.ts +41 -0
  14. package/dist/src/catalog/fileMutateSchema.js +77 -0
  15. package/dist/src/catalog/index.d.ts +15 -0
  16. package/dist/src/catalog/index.js +10 -0
  17. package/dist/src/catalog/oauthEntries.d.ts +125 -0
  18. package/dist/src/catalog/oauthEntries.js +92 -0
  19. package/dist/src/catalog/route.d.ts +137 -0
  20. package/dist/src/catalog/route.js +92 -0
  21. package/dist/src/catalog/runnerEntries.d.ts +145 -0
  22. package/dist/src/catalog/runnerEntries.js +69 -0
  23. package/dist/src/catalog/schemas.test.d.ts +4 -0
  24. package/dist/src/catalog/serverCatalog.d.ts +1143 -0
  25. package/dist/src/catalog/serverCatalog.js +37 -0
  26. package/dist/src/catalog/serverCatalog.test.d.ts +4 -0
  27. package/dist/src/catalog/sharingEntries.d.ts +200 -0
  28. package/dist/src/catalog/sharingEntries.js +146 -0
  29. package/dist/src/catalog/statusSchemas.d.ts +87 -0
  30. package/dist/src/catalog/statusSchemas.js +119 -0
  31. package/dist/src/catalog/utilityEntries.d.ts +151 -0
  32. package/dist/src/catalog/utilityEntries.js +62 -0
  33. package/dist/src/catalog/utilitySchemas.d.ts +98 -0
  34. package/dist/src/catalog/utilitySchemas.js +131 -0
  35. package/dist/src/configAuthSchema.d.ts +100 -0
  36. package/dist/src/configAuthSchema.js +119 -0
  37. package/dist/src/configFeatureSchemas.d.ts +43 -0
  38. package/dist/src/configFeatureSchemas.js +53 -0
  39. package/dist/src/configPrintStyles.d.ts +63 -0
  40. package/dist/src/configPrintStyles.js +98 -0
  41. package/dist/src/configPrintStyles.test.d.ts +1 -0
  42. package/dist/src/crypto.d.ts +6 -13
  43. package/dist/src/crypto.js +7 -32
  44. package/dist/src/crypto.test.d.ts +7 -0
  45. package/dist/src/errors.d.ts +51 -0
  46. package/dist/src/errors.js +97 -0
  47. package/dist/src/errors.test.d.ts +4 -0
  48. package/dist/src/index.d.ts +4 -2
  49. package/dist/src/index.js +17 -3
  50. package/dist/src/openapi.d.ts +13 -0
  51. package/dist/src/openapi.js +17 -0
  52. package/dist/src/openapi.test.d.ts +4 -0
  53. package/dist/src/schema.d.ts +20 -122
  54. package/dist/src/schema.js +17 -153
  55. package/dist/src/types.d.ts +2 -0
  56. package/openapi.json +3934 -0
  57. package/package.json +26 -13
  58. package/dist/src/endpoints.d.ts +0 -34
  59. package/dist/src/endpoints.js +0 -248
  60. /package/dist/src/{endpoints.test.d.ts → configAuthSchema.test.d.ts} +0 -0
@@ -0,0 +1,4038 @@
1
+ var openapi = "3.1.0";
2
+ var info = {
3
+ title: "jeeves-server",
4
+ version: "0.5.0",
5
+ description: "Machine API of the jeeves-server service: the routes in its endpoint catalog (SERVER_CATALOG). Credentials: an insider, machine or share key as the k query parameter, or the jeeves_session cookie; the key-exchange routes take the raw machine seed in X-API-Key. Operations marked x-jeeves-insider-only refuse share credentials."
6
+ };
7
+ var paths = {
8
+ "/status": {
9
+ get: {
10
+ operationId: "status",
11
+ description: "Get server service health, version, and uptime.",
12
+ security: [
13
+ ],
14
+ responses: {
15
+ "200": {
16
+ description: "Success",
17
+ content: {
18
+ "application/json": {
19
+ schema: {
20
+ type: "object",
21
+ properties: {
22
+ name: {
23
+ type: "string"
24
+ },
25
+ version: {
26
+ type: "string"
27
+ },
28
+ uptime: {
29
+ type: "number"
30
+ },
31
+ status: {
32
+ anyOf: [
33
+ {
34
+ type: "string",
35
+ "const": "healthy"
36
+ },
37
+ {
38
+ type: "string",
39
+ "const": "degraded"
40
+ },
41
+ {
42
+ type: "string",
43
+ "const": "unhealthy"
44
+ }
45
+ ]
46
+ },
47
+ health: {
48
+ type: "object",
49
+ properties: {
50
+ port: {
51
+ type: "number"
52
+ },
53
+ chrome: {
54
+ type: "object",
55
+ properties: {
56
+ configured: {
57
+ type: "boolean"
58
+ },
59
+ path: {
60
+ type: "string"
61
+ }
62
+ },
63
+ required: [
64
+ "configured"
65
+ ],
66
+ additionalProperties: false
67
+ },
68
+ auth: {
69
+ type: "object",
70
+ properties: {
71
+ modes: {
72
+ type: "array",
73
+ items: {
74
+ type: "string"
75
+ }
76
+ },
77
+ insiderCount: {
78
+ type: "number"
79
+ },
80
+ keyCount: {
81
+ type: "number"
82
+ },
83
+ googleRedirectUri: {
84
+ type: "string"
85
+ },
86
+ oauthRedirectUri: {
87
+ type: "string"
88
+ }
89
+ },
90
+ required: [
91
+ "modes",
92
+ "insiderCount",
93
+ "keyCount"
94
+ ],
95
+ additionalProperties: false
96
+ },
97
+ events: {
98
+ type: "array",
99
+ items: {
100
+ type: "object",
101
+ properties: {
102
+ name: {
103
+ type: "string"
104
+ },
105
+ cmd: {
106
+ type: "string"
107
+ }
108
+ },
109
+ required: [
110
+ "name"
111
+ ],
112
+ additionalProperties: false
113
+ }
114
+ },
115
+ eventQueue: {
116
+ type: "object",
117
+ properties: {
118
+ offset: {
119
+ type: "number"
120
+ },
121
+ size: {
122
+ type: "number"
123
+ },
124
+ pendingBytes: {
125
+ type: "number"
126
+ },
127
+ parseErrors: {
128
+ type: "number"
129
+ },
130
+ lastCursorReset: {
131
+ type: "string"
132
+ },
133
+ lastRewind: {
134
+ type: "string"
135
+ }
136
+ },
137
+ required: [
138
+ "offset",
139
+ "size",
140
+ "pendingBytes",
141
+ "parseErrors"
142
+ ],
143
+ additionalProperties: false
144
+ },
145
+ exports: {
146
+ type: "object",
147
+ properties: {
148
+ documents: {
149
+ type: "array",
150
+ items: {
151
+ type: "string"
152
+ }
153
+ },
154
+ directories: {
155
+ type: "array",
156
+ items: {
157
+ type: "string"
158
+ }
159
+ },
160
+ diagrams: {
161
+ type: "array",
162
+ items: {
163
+ type: "string"
164
+ }
165
+ },
166
+ chromeAvailable: {
167
+ type: "boolean"
168
+ }
169
+ },
170
+ required: [
171
+ "documents",
172
+ "directories",
173
+ "diagrams",
174
+ "chromeAvailable"
175
+ ],
176
+ additionalProperties: false
177
+ },
178
+ diagrams: {
179
+ type: "object",
180
+ properties: {
181
+ mermaid: {
182
+ type: "boolean"
183
+ },
184
+ plantuml: {
185
+ type: "object",
186
+ properties: {
187
+ localJar: {
188
+ type: "boolean"
189
+ },
190
+ servers: {
191
+ type: "array",
192
+ items: {
193
+ type: "string"
194
+ }
195
+ }
196
+ },
197
+ required: [
198
+ "localJar",
199
+ "servers"
200
+ ],
201
+ additionalProperties: false
202
+ }
203
+ },
204
+ required: [
205
+ "mermaid",
206
+ "plantuml"
207
+ ],
208
+ additionalProperties: false
209
+ },
210
+ services: {
211
+ type: "object",
212
+ properties: {
213
+ watcher: {
214
+ type: "object",
215
+ properties: {
216
+ url: {
217
+ type: "string"
218
+ },
219
+ reachable: {
220
+ type: "boolean"
221
+ },
222
+ version: {
223
+ type: "string"
224
+ }
225
+ },
226
+ required: [
227
+ "url",
228
+ "reachable"
229
+ ],
230
+ additionalProperties: false
231
+ },
232
+ runner: {
233
+ type: "object",
234
+ properties: {
235
+ url: {
236
+ type: "string"
237
+ },
238
+ reachable: {
239
+ type: "boolean"
240
+ },
241
+ version: {
242
+ type: "string"
243
+ }
244
+ },
245
+ required: [
246
+ "url",
247
+ "reachable"
248
+ ],
249
+ additionalProperties: false
250
+ },
251
+ meta: {
252
+ type: "object",
253
+ properties: {
254
+ url: {
255
+ type: "string"
256
+ },
257
+ reachable: {
258
+ type: "boolean"
259
+ },
260
+ version: {
261
+ type: "string"
262
+ }
263
+ },
264
+ required: [
265
+ "url",
266
+ "reachable"
267
+ ],
268
+ additionalProperties: false
269
+ },
270
+ lastChecked: {
271
+ type: [
272
+ "string",
273
+ "null"
274
+ ]
275
+ }
276
+ },
277
+ required: [
278
+ "watcher",
279
+ "runner",
280
+ "meta",
281
+ "lastChecked"
282
+ ],
283
+ additionalProperties: false
284
+ },
285
+ branding: {
286
+ type: "object",
287
+ properties: {
288
+ name: {
289
+ type: "string"
290
+ },
291
+ emoji: {
292
+ type: "string"
293
+ },
294
+ theme: {
295
+ type: "object",
296
+ properties: {
297
+ light: {
298
+ type: "object",
299
+ propertyNames: {
300
+ type: "string"
301
+ },
302
+ additionalProperties: {
303
+ type: "string"
304
+ }
305
+ },
306
+ dark: {
307
+ type: "object",
308
+ propertyNames: {
309
+ type: "string"
310
+ },
311
+ additionalProperties: {
312
+ type: "string"
313
+ }
314
+ }
315
+ },
316
+ additionalProperties: false
317
+ }
318
+ },
319
+ required: [
320
+ "name"
321
+ ],
322
+ additionalProperties: false
323
+ }
324
+ },
325
+ required: [
326
+ "port",
327
+ "chrome",
328
+ "auth",
329
+ "events",
330
+ "eventQueue",
331
+ "exports",
332
+ "diagrams",
333
+ "services",
334
+ "branding"
335
+ ],
336
+ additionalProperties: false
337
+ }
338
+ },
339
+ required: [
340
+ "name",
341
+ "version",
342
+ "uptime",
343
+ "status",
344
+ "health"
345
+ ],
346
+ additionalProperties: false
347
+ }
348
+ }
349
+ }
350
+ },
351
+ "default": {
352
+ description: "Error",
353
+ content: {
354
+ "application/json": {
355
+ schema: {
356
+ $ref: "#/components/schemas/ErrorBody"
357
+ }
358
+ }
359
+ }
360
+ }
361
+ }
362
+ }
363
+ },
364
+ "/config": {
365
+ get: {
366
+ operationId: "config",
367
+ description: "Query server running configuration. Optional JSONPath filter.",
368
+ security: [
369
+ {
370
+ query_k: [
371
+ ]
372
+ },
373
+ {
374
+ cookie_jeeves_session: [
375
+ ]
376
+ }
377
+ ],
378
+ "x-jeeves-insider-only": true,
379
+ parameters: [
380
+ {
381
+ "in": "query",
382
+ name: "path",
383
+ schema: {
384
+ type: "string",
385
+ description: "JSONPath expression (optional)"
386
+ }
387
+ }
388
+ ],
389
+ responses: {
390
+ "200": {
391
+ description: "Success",
392
+ content: {
393
+ "application/json": {
394
+ schema: {
395
+ anyOf: [
396
+ {
397
+ type: "object",
398
+ properties: {
399
+ result: {
400
+ type: "array",
401
+ items: {
402
+ }
403
+ },
404
+ count: {
405
+ type: "number"
406
+ }
407
+ },
408
+ required: [
409
+ "result",
410
+ "count"
411
+ ],
412
+ additionalProperties: {
413
+ }
414
+ },
415
+ {
416
+ type: "object",
417
+ properties: {
418
+ },
419
+ additionalProperties: {
420
+ }
421
+ }
422
+ ]
423
+ }
424
+ }
425
+ }
426
+ },
427
+ "default": {
428
+ description: "Error",
429
+ content: {
430
+ "application/json": {
431
+ schema: {
432
+ $ref: "#/components/schemas/ErrorBody"
433
+ }
434
+ }
435
+ }
436
+ }
437
+ }
438
+ }
439
+ },
440
+ "/config/apply": {
441
+ post: {
442
+ operationId: "configApply",
443
+ description: "Apply a config patch to the running server service.",
444
+ security: [
445
+ {
446
+ query_k: [
447
+ ]
448
+ },
449
+ {
450
+ cookie_jeeves_session: [
451
+ ]
452
+ }
453
+ ],
454
+ "x-jeeves-insider-only": true,
455
+ requestBody: {
456
+ content: {
457
+ "application/json": {
458
+ schema: {
459
+ type: "object",
460
+ properties: {
461
+ patch: {
462
+ type: "object",
463
+ propertyNames: {
464
+ type: "string"
465
+ },
466
+ additionalProperties: {
467
+ },
468
+ description: "Config patch to apply"
469
+ },
470
+ replace: {
471
+ type: "boolean",
472
+ description: "Replace the whole config instead of merging"
473
+ }
474
+ },
475
+ required: [
476
+ "patch"
477
+ ]
478
+ }
479
+ }
480
+ }
481
+ },
482
+ responses: {
483
+ "200": {
484
+ description: "Success",
485
+ content: {
486
+ "application/json": {
487
+ schema: {
488
+ type: "object",
489
+ properties: {
490
+ applied: {
491
+ type: "boolean",
492
+ "const": true
493
+ },
494
+ config: {
495
+ type: "object",
496
+ properties: {
497
+ },
498
+ additionalProperties: {
499
+ }
500
+ },
501
+ warning: {
502
+ type: "string"
503
+ }
504
+ },
505
+ required: [
506
+ "applied",
507
+ "config"
508
+ ],
509
+ additionalProperties: false
510
+ }
511
+ }
512
+ }
513
+ },
514
+ "default": {
515
+ description: "Error",
516
+ content: {
517
+ "application/json": {
518
+ schema: {
519
+ $ref: "#/components/schemas/ErrorBody"
520
+ }
521
+ }
522
+ }
523
+ }
524
+ }
525
+ }
526
+ },
527
+ "/health": {
528
+ get: {
529
+ operationId: "health",
530
+ description: "Liveness check: returns { ok: true }, with no downstream checks.",
531
+ security: [
532
+ ],
533
+ responses: {
534
+ "200": {
535
+ description: "Success",
536
+ content: {
537
+ "application/json": {
538
+ schema: {
539
+ type: "object",
540
+ properties: {
541
+ ok: {
542
+ type: "boolean",
543
+ "const": true
544
+ }
545
+ },
546
+ required: [
547
+ "ok"
548
+ ],
549
+ additionalProperties: false
550
+ }
551
+ }
552
+ }
553
+ },
554
+ "default": {
555
+ description: "Error",
556
+ content: {
557
+ "application/json": {
558
+ schema: {
559
+ $ref: "#/components/schemas/ErrorBody"
560
+ }
561
+ }
562
+ }
563
+ }
564
+ }
565
+ }
566
+ },
567
+ "/api/auth/status": {
568
+ get: {
569
+ operationId: "authStatus",
570
+ description: "Check current authentication status. Returns whether authenticated, email, insider status, and key metadata.",
571
+ security: [
572
+ ],
573
+ parameters: [
574
+ {
575
+ "in": "query",
576
+ name: "exp",
577
+ schema: {
578
+ description: "Share link expiry (Unix milliseconds), for expiring keys.",
579
+ type: "string"
580
+ },
581
+ description: "Share link expiry (Unix milliseconds), for expiring keys."
582
+ },
583
+ {
584
+ "in": "query",
585
+ name: "d",
586
+ schema: {
587
+ description: "Deep share depth.",
588
+ type: "string"
589
+ },
590
+ description: "Deep share depth."
591
+ },
592
+ {
593
+ "in": "query",
594
+ name: "dirs",
595
+ schema: {
596
+ description: "Deep share: 1 when directories below the shared path open.",
597
+ type: "string"
598
+ },
599
+ description: "Deep share: 1 when directories below the shared path open."
600
+ },
601
+ {
602
+ "in": "query",
603
+ name: "s",
604
+ schema: {
605
+ description: "Deep share path stack.",
606
+ type: "string"
607
+ },
608
+ description: "Deep share path stack."
609
+ },
610
+ {
611
+ "in": "query",
612
+ name: "key",
613
+ schema: {
614
+ description: "Legacy name of the k parameter.",
615
+ type: "string"
616
+ },
617
+ description: "Legacy name of the k parameter."
618
+ },
619
+ {
620
+ "in": "query",
621
+ name: "path",
622
+ schema: {
623
+ description: "Path a share credential is verified against (default /).",
624
+ type: "string"
625
+ },
626
+ description: "Path a share credential is verified against (default /)."
627
+ }
628
+ ],
629
+ responses: {
630
+ "200": {
631
+ description: "Success",
632
+ content: {
633
+ "application/json": {
634
+ schema: {
635
+ type: "object",
636
+ properties: {
637
+ authenticated: {
638
+ type: "boolean"
639
+ },
640
+ email: {
641
+ type: "string"
642
+ },
643
+ picture: {
644
+ type: "string"
645
+ },
646
+ isInsider: {
647
+ type: "boolean"
648
+ },
649
+ keyCreatedAt: {
650
+ type: [
651
+ "string",
652
+ "null"
653
+ ]
654
+ },
655
+ searchEnabled: {
656
+ type: "boolean"
657
+ }
658
+ },
659
+ required: [
660
+ "authenticated",
661
+ "isInsider"
662
+ ],
663
+ additionalProperties: false
664
+ }
665
+ }
666
+ }
667
+ },
668
+ "default": {
669
+ description: "Error",
670
+ content: {
671
+ "application/json": {
672
+ schema: {
673
+ $ref: "#/components/schemas/ErrorBody"
674
+ }
675
+ }
676
+ }
677
+ }
678
+ }
679
+ }
680
+ },
681
+ "/api/auth/magic": {
682
+ post: {
683
+ operationId: "sendMagicLink",
684
+ description: "Request a sign-in link by email. Always answers with a verification URL, whether or not the email belongs to an insider.",
685
+ security: [
686
+ ],
687
+ requestBody: {
688
+ content: {
689
+ "application/json": {
690
+ schema: {
691
+ type: "object",
692
+ properties: {
693
+ email: {
694
+ description: "Email address to sign in with.",
695
+ type: "string"
696
+ },
697
+ returnTo: {
698
+ description: "Page to open after sign-in (server-relative).",
699
+ type: "string"
700
+ }
701
+ }
702
+ }
703
+ }
704
+ }
705
+ },
706
+ responses: {
707
+ "200": {
708
+ description: "Success",
709
+ content: {
710
+ "application/json": {
711
+ schema: {
712
+ type: "object",
713
+ properties: {
714
+ verifyUrl: {
715
+ type: "string"
716
+ }
717
+ },
718
+ required: [
719
+ "verifyUrl"
720
+ ],
721
+ additionalProperties: false
722
+ }
723
+ }
724
+ }
725
+ },
726
+ "default": {
727
+ description: "Error",
728
+ content: {
729
+ "application/json": {
730
+ schema: {
731
+ $ref: "#/components/schemas/ErrorBody"
732
+ }
733
+ }
734
+ }
735
+ }
736
+ }
737
+ }
738
+ },
739
+ "/key": {
740
+ get: {
741
+ operationId: "pathKey",
742
+ description: "Compute the outsider path key for a path from the machine seed sent in X-API-Key.",
743
+ security: [
744
+ {
745
+ header_X_API_Key: [
746
+ ]
747
+ }
748
+ ],
749
+ parameters: [
750
+ {
751
+ "in": "query",
752
+ name: "path",
753
+ schema: {
754
+ type: "string",
755
+ description: "Path to compute the outsider key for."
756
+ },
757
+ required: true,
758
+ description: "Path to compute the outsider key for."
759
+ }
760
+ ],
761
+ responses: {
762
+ "200": {
763
+ description: "Success",
764
+ content: {
765
+ "application/json": {
766
+ schema: {
767
+ type: "object",
768
+ properties: {
769
+ path: {
770
+ type: "string"
771
+ },
772
+ key: {
773
+ type: "string"
774
+ }
775
+ },
776
+ required: [
777
+ "path",
778
+ "key"
779
+ ],
780
+ additionalProperties: false
781
+ }
782
+ }
783
+ }
784
+ },
785
+ "default": {
786
+ description: "Error",
787
+ content: {
788
+ "application/json": {
789
+ schema: {
790
+ $ref: "#/components/schemas/ErrorBody"
791
+ }
792
+ }
793
+ }
794
+ }
795
+ }
796
+ }
797
+ },
798
+ "/insider-key": {
799
+ get: {
800
+ operationId: "insiderKey",
801
+ description: "Compute the insider key for the machine seed sent in X-API-Key.",
802
+ security: [
803
+ {
804
+ header_X_API_Key: [
805
+ ]
806
+ }
807
+ ],
808
+ responses: {
809
+ "200": {
810
+ description: "Success",
811
+ content: {
812
+ "application/json": {
813
+ schema: {
814
+ type: "object",
815
+ properties: {
816
+ key: {
817
+ type: "string"
818
+ }
819
+ },
820
+ required: [
821
+ "key"
822
+ ],
823
+ additionalProperties: false
824
+ }
825
+ }
826
+ }
827
+ },
828
+ "default": {
829
+ description: "Error",
830
+ content: {
831
+ "application/json": {
832
+ schema: {
833
+ $ref: "#/components/schemas/ErrorBody"
834
+ }
835
+ }
836
+ }
837
+ }
838
+ }
839
+ }
840
+ },
841
+ "/api/search": {
842
+ post: {
843
+ operationId: "search",
844
+ description: "Semantic search through jeeves-watcher, grouped by file and filtered to the scopes of the caller.",
845
+ security: [
846
+ {
847
+ query_k: [
848
+ ]
849
+ },
850
+ {
851
+ cookie_jeeves_session: [
852
+ ]
853
+ }
854
+ ],
855
+ "x-jeeves-insider-only": true,
856
+ requestBody: {
857
+ content: {
858
+ "application/json": {
859
+ schema: {
860
+ type: "object",
861
+ properties: {
862
+ query: {
863
+ type: "string",
864
+ description: "Search text."
865
+ },
866
+ limit: {
867
+ description: "Files to return (default 20).",
868
+ type: "integer",
869
+ exclusiveMinimum: 0,
870
+ maximum: 9007199254740991
871
+ },
872
+ filter: {
873
+ description: "Qdrant filter, passed to jeeves-watcher.",
874
+ type: "object",
875
+ propertyNames: {
876
+ type: "string"
877
+ },
878
+ additionalProperties: {
879
+ }
880
+ }
881
+ },
882
+ required: [
883
+ "query"
884
+ ]
885
+ }
886
+ }
887
+ }
888
+ },
889
+ responses: {
890
+ "200": {
891
+ description: "Success",
892
+ content: {
893
+ "application/json": {
894
+ schema: {
895
+ type: "object",
896
+ properties: {
897
+ results: {
898
+ type: "array",
899
+ items: {
900
+ type: "object",
901
+ properties: {
902
+ filePath: {
903
+ type: "string"
904
+ },
905
+ browsePath: {
906
+ type: "string"
907
+ },
908
+ fileName: {
909
+ type: "string"
910
+ },
911
+ bestScore: {
912
+ type: "number"
913
+ },
914
+ domains: {
915
+ type: "array",
916
+ items: {
917
+ }
918
+ },
919
+ title: {
920
+ },
921
+ author: {
922
+ },
923
+ participants: {
924
+ },
925
+ metadata: {
926
+ type: "object",
927
+ propertyNames: {
928
+ type: "string"
929
+ },
930
+ additionalProperties: {
931
+ }
932
+ },
933
+ chunks: {
934
+ type: "array",
935
+ items: {
936
+ type: "object",
937
+ properties: {
938
+ text: {
939
+ type: "string"
940
+ },
941
+ index: {
942
+ type: "number"
943
+ },
944
+ score: {
945
+ type: "number"
946
+ }
947
+ },
948
+ required: [
949
+ "text",
950
+ "index",
951
+ "score"
952
+ ],
953
+ additionalProperties: false
954
+ }
955
+ },
956
+ mtime: {
957
+ type: "string"
958
+ }
959
+ },
960
+ required: [
961
+ "filePath",
962
+ "browsePath",
963
+ "fileName",
964
+ "bestScore",
965
+ "domains",
966
+ "metadata",
967
+ "chunks"
968
+ ],
969
+ additionalProperties: false
970
+ }
971
+ },
972
+ metadata: {
973
+ type: "object",
974
+ properties: {
975
+ domains: {
976
+ type: "array",
977
+ items: {
978
+ }
979
+ },
980
+ authors: {
981
+ type: "array",
982
+ items: {
983
+ }
984
+ },
985
+ participants: {
986
+ type: "array",
987
+ items: {
988
+ }
989
+ }
990
+ },
991
+ required: [
992
+ "domains",
993
+ "authors",
994
+ "participants"
995
+ ],
996
+ additionalProperties: false
997
+ }
998
+ },
999
+ required: [
1000
+ "results",
1001
+ "metadata"
1002
+ ],
1003
+ additionalProperties: false
1004
+ }
1005
+ }
1006
+ }
1007
+ },
1008
+ "default": {
1009
+ description: "Error",
1010
+ content: {
1011
+ "application/json": {
1012
+ schema: {
1013
+ $ref: "#/components/schemas/ErrorBody"
1014
+ }
1015
+ }
1016
+ }
1017
+ }
1018
+ }
1019
+ }
1020
+ },
1021
+ "/api/search/facets": {
1022
+ get: {
1023
+ operationId: "searchFacets",
1024
+ description: "Search facets from jeeves-watcher, passed through unchanged.",
1025
+ security: [
1026
+ {
1027
+ query_k: [
1028
+ ]
1029
+ },
1030
+ {
1031
+ cookie_jeeves_session: [
1032
+ ]
1033
+ }
1034
+ ],
1035
+ "x-jeeves-insider-only": true,
1036
+ responses: {
1037
+ "200": {
1038
+ description: "Success",
1039
+ content: {
1040
+ "application/json": {
1041
+ schema: {
1042
+ }
1043
+ }
1044
+ }
1045
+ },
1046
+ "default": {
1047
+ description: "Error",
1048
+ content: {
1049
+ "application/json": {
1050
+ schema: {
1051
+ $ref: "#/components/schemas/ErrorBody"
1052
+ }
1053
+ }
1054
+ }
1055
+ }
1056
+ }
1057
+ }
1058
+ },
1059
+ "/api/drives": {
1060
+ get: {
1061
+ operationId: "drives",
1062
+ description: "List available root drives/labels configured on the server.",
1063
+ security: [
1064
+ {
1065
+ query_k: [
1066
+ ]
1067
+ },
1068
+ {
1069
+ cookie_jeeves_session: [
1070
+ ]
1071
+ }
1072
+ ],
1073
+ parameters: [
1074
+ {
1075
+ "in": "query",
1076
+ name: "exp",
1077
+ schema: {
1078
+ description: "Share link expiry (Unix milliseconds), for expiring keys.",
1079
+ type: "string"
1080
+ },
1081
+ description: "Share link expiry (Unix milliseconds), for expiring keys."
1082
+ },
1083
+ {
1084
+ "in": "query",
1085
+ name: "d",
1086
+ schema: {
1087
+ description: "Deep share depth.",
1088
+ type: "string"
1089
+ },
1090
+ description: "Deep share depth."
1091
+ },
1092
+ {
1093
+ "in": "query",
1094
+ name: "dirs",
1095
+ schema: {
1096
+ description: "Deep share: 1 when directories below the shared path open.",
1097
+ type: "string"
1098
+ },
1099
+ description: "Deep share: 1 when directories below the shared path open."
1100
+ },
1101
+ {
1102
+ "in": "query",
1103
+ name: "s",
1104
+ schema: {
1105
+ description: "Deep share path stack.",
1106
+ type: "string"
1107
+ },
1108
+ description: "Deep share path stack."
1109
+ },
1110
+ {
1111
+ "in": "query",
1112
+ name: "key",
1113
+ schema: {
1114
+ description: "Legacy name of the k parameter.",
1115
+ type: "string"
1116
+ },
1117
+ description: "Legacy name of the k parameter."
1118
+ }
1119
+ ],
1120
+ responses: {
1121
+ "200": {
1122
+ description: "Success",
1123
+ content: {
1124
+ "application/json": {
1125
+ schema: {
1126
+ type: "array",
1127
+ items: {
1128
+ type: "object",
1129
+ properties: {
1130
+ letter: {
1131
+ type: "string"
1132
+ },
1133
+ label: {
1134
+ type: "string"
1135
+ }
1136
+ },
1137
+ required: [
1138
+ "letter",
1139
+ "label"
1140
+ ],
1141
+ additionalProperties: false
1142
+ }
1143
+ }
1144
+ }
1145
+ }
1146
+ },
1147
+ "default": {
1148
+ description: "Error",
1149
+ content: {
1150
+ "application/json": {
1151
+ schema: {
1152
+ $ref: "#/components/schemas/ErrorBody"
1153
+ }
1154
+ }
1155
+ }
1156
+ }
1157
+ }
1158
+ }
1159
+ },
1160
+ "/api/path/{*}": {
1161
+ get: {
1162
+ operationId: "browse",
1163
+ description: "Get file or directory metadata. For files: size, mtime, content type, rendered HTML availability. For directories: listing of entries.",
1164
+ security: [
1165
+ {
1166
+ query_k: [
1167
+ ]
1168
+ },
1169
+ {
1170
+ cookie_jeeves_session: [
1171
+ ]
1172
+ }
1173
+ ],
1174
+ parameters: [
1175
+ {
1176
+ "in": "path",
1177
+ name: "*",
1178
+ schema: {
1179
+ type: "string",
1180
+ description: "Browse path (e.g. \"<drive>/path/to/dir\")"
1181
+ },
1182
+ required: true,
1183
+ description: "Browse path (e.g. \"<drive>/path/to/dir\")"
1184
+ },
1185
+ {
1186
+ "in": "query",
1187
+ name: "exp",
1188
+ schema: {
1189
+ description: "Share link expiry (Unix milliseconds), for expiring keys.",
1190
+ type: "string"
1191
+ },
1192
+ description: "Share link expiry (Unix milliseconds), for expiring keys."
1193
+ },
1194
+ {
1195
+ "in": "query",
1196
+ name: "d",
1197
+ schema: {
1198
+ description: "Deep share depth.",
1199
+ type: "string"
1200
+ },
1201
+ description: "Deep share depth."
1202
+ },
1203
+ {
1204
+ "in": "query",
1205
+ name: "dirs",
1206
+ schema: {
1207
+ description: "Deep share: 1 when directories below the shared path open.",
1208
+ type: "string"
1209
+ },
1210
+ description: "Deep share: 1 when directories below the shared path open."
1211
+ },
1212
+ {
1213
+ "in": "query",
1214
+ name: "s",
1215
+ schema: {
1216
+ description: "Deep share path stack.",
1217
+ type: "string"
1218
+ },
1219
+ description: "Deep share path stack."
1220
+ },
1221
+ {
1222
+ "in": "query",
1223
+ name: "key",
1224
+ schema: {
1225
+ description: "Legacy name of the k parameter.",
1226
+ type: "string"
1227
+ },
1228
+ description: "Legacy name of the k parameter."
1229
+ }
1230
+ ],
1231
+ responses: {
1232
+ "200": {
1233
+ description: "Success",
1234
+ content: {
1235
+ "application/json": {
1236
+ schema: {
1237
+ anyOf: [
1238
+ {
1239
+ type: "object",
1240
+ properties: {
1241
+ type: {
1242
+ type: "string",
1243
+ "const": "file"
1244
+ },
1245
+ path: {
1246
+ type: "string"
1247
+ },
1248
+ ext: {
1249
+ type: "string"
1250
+ },
1251
+ size: {
1252
+ type: "number"
1253
+ },
1254
+ mtime: {
1255
+ type: "string"
1256
+ }
1257
+ },
1258
+ required: [
1259
+ "type",
1260
+ "path",
1261
+ "ext",
1262
+ "size",
1263
+ "mtime"
1264
+ ],
1265
+ additionalProperties: false
1266
+ },
1267
+ {
1268
+ type: "object",
1269
+ properties: {
1270
+ path: {
1271
+ type: "string"
1272
+ },
1273
+ entries: {
1274
+ type: "array",
1275
+ items: {
1276
+ type: "object",
1277
+ properties: {
1278
+ name: {
1279
+ type: "string"
1280
+ },
1281
+ type: {
1282
+ type: "string",
1283
+ "enum": [
1284
+ "directory",
1285
+ "file"
1286
+ ]
1287
+ },
1288
+ ext: {
1289
+ type: "string"
1290
+ },
1291
+ size: {
1292
+ type: [
1293
+ "number",
1294
+ "null"
1295
+ ]
1296
+ },
1297
+ mtime: {
1298
+ type: [
1299
+ "string",
1300
+ "null"
1301
+ ]
1302
+ },
1303
+ itemCount: {
1304
+ type: [
1305
+ "number",
1306
+ "null"
1307
+ ]
1308
+ },
1309
+ shareUrl: {
1310
+ type: [
1311
+ "string",
1312
+ "null"
1313
+ ]
1314
+ }
1315
+ },
1316
+ required: [
1317
+ "name",
1318
+ "type",
1319
+ "ext",
1320
+ "size",
1321
+ "mtime",
1322
+ "itemCount"
1323
+ ],
1324
+ additionalProperties: false
1325
+ }
1326
+ },
1327
+ breadcrumbs: {
1328
+ type: "array",
1329
+ items: {
1330
+ type: "object",
1331
+ properties: {
1332
+ label: {
1333
+ type: "string"
1334
+ },
1335
+ path: {
1336
+ type: "string"
1337
+ }
1338
+ },
1339
+ required: [
1340
+ "label",
1341
+ "path"
1342
+ ],
1343
+ additionalProperties: false
1344
+ }
1345
+ },
1346
+ isInsider: {
1347
+ type: "boolean"
1348
+ }
1349
+ },
1350
+ required: [
1351
+ "path",
1352
+ "entries",
1353
+ "breadcrumbs",
1354
+ "isInsider"
1355
+ ],
1356
+ additionalProperties: false
1357
+ }
1358
+ ]
1359
+ }
1360
+ }
1361
+ }
1362
+ },
1363
+ "default": {
1364
+ description: "Error",
1365
+ content: {
1366
+ "application/json": {
1367
+ schema: {
1368
+ $ref: "#/components/schemas/ErrorBody"
1369
+ }
1370
+ }
1371
+ }
1372
+ }
1373
+ }
1374
+ }
1375
+ },
1376
+ "/api/file/{*}": {
1377
+ get: {
1378
+ operationId: "fileContent",
1379
+ description: "Get a file with type-specific handling: Markdown, CSV and diagrams rendered to HTML, other text as is, images and binaries by name. `raw=1` skips rendering.",
1380
+ security: [
1381
+ {
1382
+ query_k: [
1383
+ ]
1384
+ },
1385
+ {
1386
+ cookie_jeeves_session: [
1387
+ ]
1388
+ }
1389
+ ],
1390
+ parameters: [
1391
+ {
1392
+ "in": "path",
1393
+ name: "*",
1394
+ schema: {
1395
+ type: "string",
1396
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
1397
+ },
1398
+ required: true,
1399
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
1400
+ },
1401
+ {
1402
+ "in": "query",
1403
+ name: "exp",
1404
+ schema: {
1405
+ description: "Share link expiry (Unix milliseconds), for expiring keys.",
1406
+ type: "string"
1407
+ },
1408
+ description: "Share link expiry (Unix milliseconds), for expiring keys."
1409
+ },
1410
+ {
1411
+ "in": "query",
1412
+ name: "d",
1413
+ schema: {
1414
+ description: "Deep share depth.",
1415
+ type: "string"
1416
+ },
1417
+ description: "Deep share depth."
1418
+ },
1419
+ {
1420
+ "in": "query",
1421
+ name: "dirs",
1422
+ schema: {
1423
+ description: "Deep share: 1 when directories below the shared path open.",
1424
+ type: "string"
1425
+ },
1426
+ description: "Deep share: 1 when directories below the shared path open."
1427
+ },
1428
+ {
1429
+ "in": "query",
1430
+ name: "s",
1431
+ schema: {
1432
+ description: "Deep share path stack.",
1433
+ type: "string"
1434
+ },
1435
+ description: "Deep share path stack."
1436
+ },
1437
+ {
1438
+ "in": "query",
1439
+ name: "key",
1440
+ schema: {
1441
+ description: "Legacy name of the k parameter.",
1442
+ type: "string"
1443
+ },
1444
+ description: "Legacy name of the k parameter."
1445
+ },
1446
+ {
1447
+ "in": "query",
1448
+ name: "raw",
1449
+ schema: {
1450
+ description: "1: return the source without rendering it.",
1451
+ type: "string"
1452
+ },
1453
+ description: "1: return the source without rendering it."
1454
+ },
1455
+ {
1456
+ "in": "query",
1457
+ name: "render_diagrams",
1458
+ schema: {
1459
+ description: "1: render embedded diagrams into the HTML.",
1460
+ type: "string"
1461
+ },
1462
+ description: "1: render embedded diagrams into the HTML."
1463
+ }
1464
+ ],
1465
+ responses: {
1466
+ "200": {
1467
+ description: "Success",
1468
+ content: {
1469
+ "application/json": {
1470
+ schema: {
1471
+ type: "object",
1472
+ properties: {
1473
+ type: {
1474
+ type: "string",
1475
+ "enum": [
1476
+ "markdown",
1477
+ "mermaid",
1478
+ "plantuml",
1479
+ "svg",
1480
+ "csv",
1481
+ "text",
1482
+ "image",
1483
+ "binary"
1484
+ ]
1485
+ },
1486
+ content: {
1487
+ type: "string"
1488
+ },
1489
+ html: {
1490
+ type: [
1491
+ "string",
1492
+ "null"
1493
+ ]
1494
+ },
1495
+ headings: {
1496
+ type: "array",
1497
+ items: {
1498
+ type: "object",
1499
+ properties: {
1500
+ level: {
1501
+ type: "number"
1502
+ },
1503
+ text: {
1504
+ type: "string"
1505
+ },
1506
+ slug: {
1507
+ type: "string"
1508
+ }
1509
+ },
1510
+ required: [
1511
+ "level",
1512
+ "text",
1513
+ "slug"
1514
+ ],
1515
+ additionalProperties: false
1516
+ }
1517
+ },
1518
+ size: {
1519
+ type: "number"
1520
+ },
1521
+ fileName: {
1522
+ type: "string"
1523
+ },
1524
+ breadcrumbs: {
1525
+ type: "array",
1526
+ items: {
1527
+ type: "object",
1528
+ properties: {
1529
+ label: {
1530
+ type: "string"
1531
+ },
1532
+ path: {
1533
+ type: "string"
1534
+ }
1535
+ },
1536
+ required: [
1537
+ "label",
1538
+ "path"
1539
+ ],
1540
+ additionalProperties: false
1541
+ }
1542
+ },
1543
+ isInsider: {
1544
+ type: "boolean"
1545
+ },
1546
+ mtime: {
1547
+ type: "number"
1548
+ },
1549
+ renderAs: {
1550
+ type: "string"
1551
+ },
1552
+ matchedRules: {
1553
+ type: "array",
1554
+ items: {
1555
+ type: "string"
1556
+ }
1557
+ },
1558
+ title: {
1559
+ type: "string"
1560
+ }
1561
+ },
1562
+ required: [
1563
+ "type",
1564
+ "fileName",
1565
+ "breadcrumbs",
1566
+ "isInsider"
1567
+ ],
1568
+ additionalProperties: false
1569
+ }
1570
+ }
1571
+ }
1572
+ },
1573
+ "default": {
1574
+ description: "Error",
1575
+ content: {
1576
+ "application/json": {
1577
+ schema: {
1578
+ $ref: "#/components/schemas/ErrorBody"
1579
+ }
1580
+ }
1581
+ }
1582
+ }
1583
+ }
1584
+ },
1585
+ put: {
1586
+ operationId: "fileWrite",
1587
+ description: "Overwrite the content of an existing file. Insider-only; the file must already exist.",
1588
+ security: [
1589
+ {
1590
+ query_k: [
1591
+ ]
1592
+ },
1593
+ {
1594
+ cookie_jeeves_session: [
1595
+ ]
1596
+ }
1597
+ ],
1598
+ "x-jeeves-insider-only": true,
1599
+ parameters: [
1600
+ {
1601
+ "in": "path",
1602
+ name: "*",
1603
+ schema: {
1604
+ type: "string",
1605
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
1606
+ },
1607
+ required: true,
1608
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
1609
+ },
1610
+ {
1611
+ "in": "query",
1612
+ name: "exp",
1613
+ schema: {
1614
+ description: "Share link expiry (Unix milliseconds), for expiring keys.",
1615
+ type: "string"
1616
+ },
1617
+ description: "Share link expiry (Unix milliseconds), for expiring keys."
1618
+ },
1619
+ {
1620
+ "in": "query",
1621
+ name: "d",
1622
+ schema: {
1623
+ description: "Deep share depth.",
1624
+ type: "string"
1625
+ },
1626
+ description: "Deep share depth."
1627
+ },
1628
+ {
1629
+ "in": "query",
1630
+ name: "dirs",
1631
+ schema: {
1632
+ description: "Deep share: 1 when directories below the shared path open.",
1633
+ type: "string"
1634
+ },
1635
+ description: "Deep share: 1 when directories below the shared path open."
1636
+ },
1637
+ {
1638
+ "in": "query",
1639
+ name: "s",
1640
+ schema: {
1641
+ description: "Deep share path stack.",
1642
+ type: "string"
1643
+ },
1644
+ description: "Deep share path stack."
1645
+ },
1646
+ {
1647
+ "in": "query",
1648
+ name: "key",
1649
+ schema: {
1650
+ description: "Legacy name of the k parameter.",
1651
+ type: "string"
1652
+ },
1653
+ description: "Legacy name of the k parameter."
1654
+ }
1655
+ ],
1656
+ requestBody: {
1657
+ content: {
1658
+ "application/json": {
1659
+ schema: {
1660
+ type: "object",
1661
+ properties: {
1662
+ content: {
1663
+ type: "string",
1664
+ description: "New file content"
1665
+ }
1666
+ },
1667
+ required: [
1668
+ "content"
1669
+ ]
1670
+ }
1671
+ }
1672
+ }
1673
+ },
1674
+ responses: {
1675
+ "200": {
1676
+ description: "Success",
1677
+ content: {
1678
+ "application/json": {
1679
+ schema: {
1680
+ type: "object",
1681
+ properties: {
1682
+ ok: {
1683
+ type: "boolean",
1684
+ "const": true
1685
+ },
1686
+ path: {
1687
+ type: "string"
1688
+ },
1689
+ size: {
1690
+ type: "number"
1691
+ }
1692
+ },
1693
+ required: [
1694
+ "ok",
1695
+ "path",
1696
+ "size"
1697
+ ],
1698
+ additionalProperties: false
1699
+ }
1700
+ }
1701
+ }
1702
+ },
1703
+ "default": {
1704
+ description: "Error",
1705
+ content: {
1706
+ "application/json": {
1707
+ schema: {
1708
+ $ref: "#/components/schemas/ErrorBody"
1709
+ }
1710
+ }
1711
+ }
1712
+ }
1713
+ }
1714
+ },
1715
+ post: {
1716
+ operationId: "fileMutate",
1717
+ description: "Apply a structured mutation to a .md file. Insider-only. Supports: edit-block, delete-block, insert-block, edit-cell, toggle-checkbox.",
1718
+ security: [
1719
+ {
1720
+ query_k: [
1721
+ ]
1722
+ },
1723
+ {
1724
+ cookie_jeeves_session: [
1725
+ ]
1726
+ }
1727
+ ],
1728
+ "x-jeeves-insider-only": true,
1729
+ parameters: [
1730
+ {
1731
+ "in": "path",
1732
+ name: "*",
1733
+ schema: {
1734
+ type: "string",
1735
+ description: "File path (must be a .md file)"
1736
+ },
1737
+ required: true,
1738
+ description: "File path (must be a .md file)"
1739
+ },
1740
+ {
1741
+ "in": "query",
1742
+ name: "exp",
1743
+ schema: {
1744
+ description: "Share link expiry (Unix milliseconds), for expiring keys.",
1745
+ type: "string"
1746
+ },
1747
+ description: "Share link expiry (Unix milliseconds), for expiring keys."
1748
+ },
1749
+ {
1750
+ "in": "query",
1751
+ name: "d",
1752
+ schema: {
1753
+ description: "Deep share depth.",
1754
+ type: "string"
1755
+ },
1756
+ description: "Deep share depth."
1757
+ },
1758
+ {
1759
+ "in": "query",
1760
+ name: "dirs",
1761
+ schema: {
1762
+ description: "Deep share: 1 when directories below the shared path open.",
1763
+ type: "string"
1764
+ },
1765
+ description: "Deep share: 1 when directories below the shared path open."
1766
+ },
1767
+ {
1768
+ "in": "query",
1769
+ name: "s",
1770
+ schema: {
1771
+ description: "Deep share path stack.",
1772
+ type: "string"
1773
+ },
1774
+ description: "Deep share path stack."
1775
+ },
1776
+ {
1777
+ "in": "query",
1778
+ name: "key",
1779
+ schema: {
1780
+ description: "Legacy name of the k parameter.",
1781
+ type: "string"
1782
+ },
1783
+ description: "Legacy name of the k parameter."
1784
+ }
1785
+ ],
1786
+ requestBody: {
1787
+ content: {
1788
+ "application/json": {
1789
+ schema: {
1790
+ type: "object",
1791
+ properties: {
1792
+ action: {
1793
+ type: "string",
1794
+ "enum": [
1795
+ "edit-block",
1796
+ "delete-block",
1797
+ "insert-block",
1798
+ "edit-cell",
1799
+ "toggle-checkbox"
1800
+ ],
1801
+ description: "Mutation action to perform"
1802
+ },
1803
+ startLine: {
1804
+ description: "Start line (1-based) for edit-block/delete-block",
1805
+ type: "integer",
1806
+ minimum: -9007199254740991,
1807
+ maximum: 9007199254740991
1808
+ },
1809
+ endLine: {
1810
+ description: "End line (1-based) for edit-block/delete-block",
1811
+ type: "integer",
1812
+ minimum: -9007199254740991,
1813
+ maximum: 9007199254740991
1814
+ },
1815
+ content: {
1816
+ description: "Content for edit-block, insert-block, or edit-cell",
1817
+ type: "string"
1818
+ },
1819
+ atLine: {
1820
+ description: "Target line (1-based) for insert-block",
1821
+ type: "integer",
1822
+ minimum: -9007199254740991,
1823
+ maximum: 9007199254740991
1824
+ },
1825
+ position: {
1826
+ description: "Insert position for insert-block",
1827
+ type: "string",
1828
+ "enum": [
1829
+ "before",
1830
+ "after"
1831
+ ]
1832
+ },
1833
+ context: {
1834
+ description: "Optional context for insert-block (e.g. \"table-row\")",
1835
+ type: "string"
1836
+ },
1837
+ line: {
1838
+ description: "Line number (1-based) for edit-cell",
1839
+ type: "integer",
1840
+ minimum: -9007199254740991,
1841
+ maximum: 9007199254740991
1842
+ },
1843
+ col: {
1844
+ description: "Column index (0-based) for edit-cell",
1845
+ type: "integer",
1846
+ minimum: -9007199254740991,
1847
+ maximum: 9007199254740991
1848
+ },
1849
+ index: {
1850
+ description: "Checkbox index (0-based) for toggle-checkbox",
1851
+ type: "integer",
1852
+ minimum: -9007199254740991,
1853
+ maximum: 9007199254740991
1854
+ },
1855
+ checked: {
1856
+ description: "Desired checked state for toggle-checkbox",
1857
+ type: "boolean"
1858
+ }
1859
+ },
1860
+ required: [
1861
+ "action"
1862
+ ]
1863
+ }
1864
+ }
1865
+ }
1866
+ },
1867
+ responses: {
1868
+ "200": {
1869
+ description: "Success",
1870
+ content: {
1871
+ "application/json": {
1872
+ schema: {
1873
+ type: "object",
1874
+ properties: {
1875
+ ok: {
1876
+ type: "boolean",
1877
+ "const": true
1878
+ }
1879
+ },
1880
+ required: [
1881
+ "ok"
1882
+ ],
1883
+ additionalProperties: false
1884
+ }
1885
+ }
1886
+ }
1887
+ },
1888
+ "default": {
1889
+ description: "Error",
1890
+ content: {
1891
+ "application/json": {
1892
+ schema: {
1893
+ $ref: "#/components/schemas/ErrorBody"
1894
+ }
1895
+ }
1896
+ }
1897
+ }
1898
+ }
1899
+ }
1900
+ },
1901
+ "/api/raw/{*}": {
1902
+ get: {
1903
+ operationId: "raw",
1904
+ description: "Download a file as is, with its own content type. `download=1` always sends it as an attachment.",
1905
+ security: [
1906
+ {
1907
+ query_k: [
1908
+ ]
1909
+ },
1910
+ {
1911
+ cookie_jeeves_session: [
1912
+ ]
1913
+ }
1914
+ ],
1915
+ parameters: [
1916
+ {
1917
+ "in": "path",
1918
+ name: "*",
1919
+ schema: {
1920
+ type: "string",
1921
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
1922
+ },
1923
+ required: true,
1924
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
1925
+ },
1926
+ {
1927
+ "in": "query",
1928
+ name: "exp",
1929
+ schema: {
1930
+ description: "Share link expiry (Unix milliseconds), for expiring keys.",
1931
+ type: "string"
1932
+ },
1933
+ description: "Share link expiry (Unix milliseconds), for expiring keys."
1934
+ },
1935
+ {
1936
+ "in": "query",
1937
+ name: "d",
1938
+ schema: {
1939
+ description: "Deep share depth.",
1940
+ type: "string"
1941
+ },
1942
+ description: "Deep share depth."
1943
+ },
1944
+ {
1945
+ "in": "query",
1946
+ name: "dirs",
1947
+ schema: {
1948
+ description: "Deep share: 1 when directories below the shared path open.",
1949
+ type: "string"
1950
+ },
1951
+ description: "Deep share: 1 when directories below the shared path open."
1952
+ },
1953
+ {
1954
+ "in": "query",
1955
+ name: "s",
1956
+ schema: {
1957
+ description: "Deep share path stack.",
1958
+ type: "string"
1959
+ },
1960
+ description: "Deep share path stack."
1961
+ },
1962
+ {
1963
+ "in": "query",
1964
+ name: "key",
1965
+ schema: {
1966
+ description: "Legacy name of the k parameter.",
1967
+ type: "string"
1968
+ },
1969
+ description: "Legacy name of the k parameter."
1970
+ },
1971
+ {
1972
+ "in": "query",
1973
+ name: "download",
1974
+ schema: {
1975
+ description: "1 (or true): send Content-Disposition: attachment for any file type.",
1976
+ type: "string"
1977
+ },
1978
+ description: "1 (or true): send Content-Disposition: attachment for any file type."
1979
+ }
1980
+ ],
1981
+ responses: {
1982
+ "200": {
1983
+ description: "Success",
1984
+ content: {
1985
+ "application/octet-stream": {
1986
+ schema: {
1987
+ type: "string",
1988
+ format: "binary"
1989
+ }
1990
+ }
1991
+ }
1992
+ },
1993
+ "default": {
1994
+ description: "Error",
1995
+ content: {
1996
+ "application/json": {
1997
+ schema: {
1998
+ $ref: "#/components/schemas/ErrorBody"
1999
+ }
2000
+ }
2001
+ }
2002
+ }
2003
+ }
2004
+ }
2005
+ },
2006
+ "/api/export/{*}": {
2007
+ get: {
2008
+ operationId: "export",
2009
+ description: "Export a Markdown document as PDF or DOCX, or a directory as a ZIP or Tar archive (archives for insiders only).",
2010
+ security: [
2011
+ {
2012
+ query_k: [
2013
+ ]
2014
+ },
2015
+ {
2016
+ cookie_jeeves_session: [
2017
+ ]
2018
+ }
2019
+ ],
2020
+ parameters: [
2021
+ {
2022
+ "in": "path",
2023
+ name: "*",
2024
+ schema: {
2025
+ type: "string",
2026
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
2027
+ },
2028
+ required: true,
2029
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
2030
+ },
2031
+ {
2032
+ "in": "query",
2033
+ name: "exp",
2034
+ schema: {
2035
+ description: "Share link expiry (Unix milliseconds), for expiring keys.",
2036
+ type: "string"
2037
+ },
2038
+ description: "Share link expiry (Unix milliseconds), for expiring keys."
2039
+ },
2040
+ {
2041
+ "in": "query",
2042
+ name: "d",
2043
+ schema: {
2044
+ description: "Deep share depth.",
2045
+ type: "string"
2046
+ },
2047
+ description: "Deep share depth."
2048
+ },
2049
+ {
2050
+ "in": "query",
2051
+ name: "dirs",
2052
+ schema: {
2053
+ description: "Deep share: 1 when directories below the shared path open.",
2054
+ type: "string"
2055
+ },
2056
+ description: "Deep share: 1 when directories below the shared path open."
2057
+ },
2058
+ {
2059
+ "in": "query",
2060
+ name: "s",
2061
+ schema: {
2062
+ description: "Deep share path stack.",
2063
+ type: "string"
2064
+ },
2065
+ description: "Deep share path stack."
2066
+ },
2067
+ {
2068
+ "in": "query",
2069
+ name: "key",
2070
+ schema: {
2071
+ description: "Legacy name of the k parameter.",
2072
+ type: "string"
2073
+ },
2074
+ description: "Legacy name of the k parameter."
2075
+ },
2076
+ {
2077
+ "in": "query",
2078
+ name: "format",
2079
+ schema: {
2080
+ description: "pdf (default) or docx for Markdown documents; zip or tar for directories.",
2081
+ type: "string",
2082
+ "enum": [
2083
+ "pdf",
2084
+ "docx",
2085
+ "zip",
2086
+ "tar"
2087
+ ]
2088
+ },
2089
+ description: "pdf (default) or docx for Markdown documents; zip or tar for directories."
2090
+ }
2091
+ ],
2092
+ responses: {
2093
+ "200": {
2094
+ description: "Success",
2095
+ content: {
2096
+ "application/octet-stream": {
2097
+ schema: {
2098
+ type: "string",
2099
+ format: "binary"
2100
+ }
2101
+ }
2102
+ }
2103
+ },
2104
+ "default": {
2105
+ description: "Error",
2106
+ content: {
2107
+ "application/json": {
2108
+ schema: {
2109
+ $ref: "#/components/schemas/ErrorBody"
2110
+ }
2111
+ }
2112
+ }
2113
+ }
2114
+ }
2115
+ }
2116
+ },
2117
+ "/api/export-cache/{*}": {
2118
+ "delete": {
2119
+ operationId: "exportCacheClear",
2120
+ description: "Clear the export and diagram caches for a given path.",
2121
+ security: [
2122
+ {
2123
+ query_k: [
2124
+ ]
2125
+ },
2126
+ {
2127
+ cookie_jeeves_session: [
2128
+ ]
2129
+ }
2130
+ ],
2131
+ "x-jeeves-insider-only": true,
2132
+ parameters: [
2133
+ {
2134
+ "in": "path",
2135
+ name: "*",
2136
+ schema: {
2137
+ type: "string",
2138
+ description: "Browse path to clear caches for"
2139
+ },
2140
+ required: true,
2141
+ description: "Browse path to clear caches for"
2142
+ },
2143
+ {
2144
+ "in": "query",
2145
+ name: "exp",
2146
+ schema: {
2147
+ description: "Share link expiry (Unix milliseconds), for expiring keys.",
2148
+ type: "string"
2149
+ },
2150
+ description: "Share link expiry (Unix milliseconds), for expiring keys."
2151
+ },
2152
+ {
2153
+ "in": "query",
2154
+ name: "d",
2155
+ schema: {
2156
+ description: "Deep share depth.",
2157
+ type: "string"
2158
+ },
2159
+ description: "Deep share depth."
2160
+ },
2161
+ {
2162
+ "in": "query",
2163
+ name: "dirs",
2164
+ schema: {
2165
+ description: "Deep share: 1 when directories below the shared path open.",
2166
+ type: "string"
2167
+ },
2168
+ description: "Deep share: 1 when directories below the shared path open."
2169
+ },
2170
+ {
2171
+ "in": "query",
2172
+ name: "s",
2173
+ schema: {
2174
+ description: "Deep share path stack.",
2175
+ type: "string"
2176
+ },
2177
+ description: "Deep share path stack."
2178
+ },
2179
+ {
2180
+ "in": "query",
2181
+ name: "key",
2182
+ schema: {
2183
+ description: "Legacy name of the k parameter.",
2184
+ type: "string"
2185
+ },
2186
+ description: "Legacy name of the k parameter."
2187
+ }
2188
+ ],
2189
+ responses: {
2190
+ "200": {
2191
+ description: "Success",
2192
+ content: {
2193
+ "application/json": {
2194
+ schema: {
2195
+ type: "object",
2196
+ properties: {
2197
+ cleared: {
2198
+ type: "object",
2199
+ properties: {
2200
+ exports: {
2201
+ type: "number"
2202
+ },
2203
+ diagrams: {
2204
+ type: "number"
2205
+ }
2206
+ },
2207
+ required: [
2208
+ "exports",
2209
+ "diagrams"
2210
+ ],
2211
+ additionalProperties: false
2212
+ }
2213
+ },
2214
+ required: [
2215
+ "cleared"
2216
+ ],
2217
+ additionalProperties: false
2218
+ }
2219
+ }
2220
+ }
2221
+ },
2222
+ "default": {
2223
+ description: "Error",
2224
+ content: {
2225
+ "application/json": {
2226
+ schema: {
2227
+ $ref: "#/components/schemas/ErrorBody"
2228
+ }
2229
+ }
2230
+ }
2231
+ }
2232
+ }
2233
+ }
2234
+ },
2235
+ "/api/mermaid-export/{*}": {
2236
+ get: {
2237
+ operationId: "exportMermaid",
2238
+ description: "Export a Mermaid diagram file as SVG, PNG or PDF.",
2239
+ security: [
2240
+ {
2241
+ query_k: [
2242
+ ]
2243
+ },
2244
+ {
2245
+ cookie_jeeves_session: [
2246
+ ]
2247
+ }
2248
+ ],
2249
+ parameters: [
2250
+ {
2251
+ "in": "path",
2252
+ name: "*",
2253
+ schema: {
2254
+ type: "string",
2255
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
2256
+ },
2257
+ required: true,
2258
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
2259
+ },
2260
+ {
2261
+ "in": "query",
2262
+ name: "exp",
2263
+ schema: {
2264
+ description: "Share link expiry (Unix milliseconds), for expiring keys.",
2265
+ type: "string"
2266
+ },
2267
+ description: "Share link expiry (Unix milliseconds), for expiring keys."
2268
+ },
2269
+ {
2270
+ "in": "query",
2271
+ name: "d",
2272
+ schema: {
2273
+ description: "Deep share depth.",
2274
+ type: "string"
2275
+ },
2276
+ description: "Deep share depth."
2277
+ },
2278
+ {
2279
+ "in": "query",
2280
+ name: "dirs",
2281
+ schema: {
2282
+ description: "Deep share: 1 when directories below the shared path open.",
2283
+ type: "string"
2284
+ },
2285
+ description: "Deep share: 1 when directories below the shared path open."
2286
+ },
2287
+ {
2288
+ "in": "query",
2289
+ name: "s",
2290
+ schema: {
2291
+ description: "Deep share path stack.",
2292
+ type: "string"
2293
+ },
2294
+ description: "Deep share path stack."
2295
+ },
2296
+ {
2297
+ "in": "query",
2298
+ name: "key",
2299
+ schema: {
2300
+ description: "Legacy name of the k parameter.",
2301
+ type: "string"
2302
+ },
2303
+ description: "Legacy name of the k parameter."
2304
+ },
2305
+ {
2306
+ "in": "query",
2307
+ name: "format",
2308
+ schema: {
2309
+ description: "svg (default), png or pdf.",
2310
+ type: "string"
2311
+ },
2312
+ description: "svg (default), png or pdf."
2313
+ }
2314
+ ],
2315
+ responses: {
2316
+ "200": {
2317
+ description: "Success",
2318
+ content: {
2319
+ "application/octet-stream": {
2320
+ schema: {
2321
+ type: "string",
2322
+ format: "binary"
2323
+ }
2324
+ }
2325
+ }
2326
+ },
2327
+ "default": {
2328
+ description: "Error",
2329
+ content: {
2330
+ "application/json": {
2331
+ schema: {
2332
+ $ref: "#/components/schemas/ErrorBody"
2333
+ }
2334
+ }
2335
+ }
2336
+ }
2337
+ }
2338
+ }
2339
+ },
2340
+ "/api/plantuml-export/{*}": {
2341
+ get: {
2342
+ operationId: "exportPlantUml",
2343
+ description: "Export a PlantUML diagram file in one of the formats the configured renderers support (SVG, PNG, PDF, EPS).",
2344
+ security: [
2345
+ {
2346
+ query_k: [
2347
+ ]
2348
+ },
2349
+ {
2350
+ cookie_jeeves_session: [
2351
+ ]
2352
+ }
2353
+ ],
2354
+ parameters: [
2355
+ {
2356
+ "in": "path",
2357
+ name: "*",
2358
+ schema: {
2359
+ type: "string",
2360
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
2361
+ },
2362
+ required: true,
2363
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
2364
+ },
2365
+ {
2366
+ "in": "query",
2367
+ name: "exp",
2368
+ schema: {
2369
+ description: "Share link expiry (Unix milliseconds), for expiring keys.",
2370
+ type: "string"
2371
+ },
2372
+ description: "Share link expiry (Unix milliseconds), for expiring keys."
2373
+ },
2374
+ {
2375
+ "in": "query",
2376
+ name: "d",
2377
+ schema: {
2378
+ description: "Deep share depth.",
2379
+ type: "string"
2380
+ },
2381
+ description: "Deep share depth."
2382
+ },
2383
+ {
2384
+ "in": "query",
2385
+ name: "dirs",
2386
+ schema: {
2387
+ description: "Deep share: 1 when directories below the shared path open.",
2388
+ type: "string"
2389
+ },
2390
+ description: "Deep share: 1 when directories below the shared path open."
2391
+ },
2392
+ {
2393
+ "in": "query",
2394
+ name: "s",
2395
+ schema: {
2396
+ description: "Deep share path stack.",
2397
+ type: "string"
2398
+ },
2399
+ description: "Deep share path stack."
2400
+ },
2401
+ {
2402
+ "in": "query",
2403
+ name: "key",
2404
+ schema: {
2405
+ description: "Legacy name of the k parameter.",
2406
+ type: "string"
2407
+ },
2408
+ description: "Legacy name of the k parameter."
2409
+ },
2410
+ {
2411
+ "in": "query",
2412
+ name: "format",
2413
+ schema: {
2414
+ description: "svg (default), or another format the renderers support (png, pdf, eps).",
2415
+ type: "string"
2416
+ },
2417
+ description: "svg (default), or another format the renderers support (png, pdf, eps)."
2418
+ }
2419
+ ],
2420
+ responses: {
2421
+ "200": {
2422
+ description: "Success",
2423
+ content: {
2424
+ "application/octet-stream": {
2425
+ schema: {
2426
+ type: "string",
2427
+ format: "binary"
2428
+ }
2429
+ }
2430
+ }
2431
+ },
2432
+ "default": {
2433
+ description: "Error",
2434
+ content: {
2435
+ "application/json": {
2436
+ schema: {
2437
+ $ref: "#/components/schemas/ErrorBody"
2438
+ }
2439
+ }
2440
+ }
2441
+ }
2442
+ }
2443
+ }
2444
+ },
2445
+ "/api/link-info/{*}": {
2446
+ get: {
2447
+ operationId: "linkInfo",
2448
+ description: "Query available link types for a path (exists, page URL, raw URL, export links for PDF/DOCX/SVG/PNG).",
2449
+ security: [
2450
+ {
2451
+ query_k: [
2452
+ ]
2453
+ },
2454
+ {
2455
+ cookie_jeeves_session: [
2456
+ ]
2457
+ }
2458
+ ],
2459
+ parameters: [
2460
+ {
2461
+ "in": "path",
2462
+ name: "*",
2463
+ schema: {
2464
+ type: "string",
2465
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
2466
+ },
2467
+ required: true,
2468
+ description: "Browse path (e.g. \"<drive>/path/to/file.md\")"
2469
+ },
2470
+ {
2471
+ "in": "query",
2472
+ name: "exp",
2473
+ schema: {
2474
+ description: "Share link expiry (Unix milliseconds), for expiring keys.",
2475
+ type: "string"
2476
+ },
2477
+ description: "Share link expiry (Unix milliseconds), for expiring keys."
2478
+ },
2479
+ {
2480
+ "in": "query",
2481
+ name: "d",
2482
+ schema: {
2483
+ description: "Deep share depth.",
2484
+ type: "string"
2485
+ },
2486
+ description: "Deep share depth."
2487
+ },
2488
+ {
2489
+ "in": "query",
2490
+ name: "dirs",
2491
+ schema: {
2492
+ description: "Deep share: 1 when directories below the shared path open.",
2493
+ type: "string"
2494
+ },
2495
+ description: "Deep share: 1 when directories below the shared path open."
2496
+ },
2497
+ {
2498
+ "in": "query",
2499
+ name: "s",
2500
+ schema: {
2501
+ description: "Deep share path stack.",
2502
+ type: "string"
2503
+ },
2504
+ description: "Deep share path stack."
2505
+ },
2506
+ {
2507
+ "in": "query",
2508
+ name: "key",
2509
+ schema: {
2510
+ description: "Legacy name of the k parameter.",
2511
+ type: "string"
2512
+ },
2513
+ description: "Legacy name of the k parameter."
2514
+ }
2515
+ ],
2516
+ responses: {
2517
+ "200": {
2518
+ description: "Success",
2519
+ content: {
2520
+ "application/json": {
2521
+ schema: {
2522
+ type: "object",
2523
+ properties: {
2524
+ exists: {
2525
+ type: "boolean"
2526
+ },
2527
+ isDirectory: {
2528
+ type: "boolean"
2529
+ },
2530
+ pageUrl: {
2531
+ type: "string"
2532
+ },
2533
+ rawUrl: {
2534
+ type: [
2535
+ "string",
2536
+ "null"
2537
+ ]
2538
+ },
2539
+ downloadUrl: {
2540
+ type: [
2541
+ "string",
2542
+ "null"
2543
+ ]
2544
+ },
2545
+ exportLinks: {
2546
+ type: "array",
2547
+ items: {
2548
+ type: "object",
2549
+ properties: {
2550
+ format: {
2551
+ type: "string"
2552
+ },
2553
+ url: {
2554
+ type: "string"
2555
+ }
2556
+ },
2557
+ required: [
2558
+ "format",
2559
+ "url"
2560
+ ],
2561
+ additionalProperties: false
2562
+ }
2563
+ }
2564
+ },
2565
+ required: [
2566
+ "exists"
2567
+ ],
2568
+ additionalProperties: false
2569
+ }
2570
+ }
2571
+ }
2572
+ },
2573
+ "default": {
2574
+ description: "Error",
2575
+ content: {
2576
+ "application/json": {
2577
+ schema: {
2578
+ $ref: "#/components/schemas/ErrorBody"
2579
+ }
2580
+ }
2581
+ }
2582
+ }
2583
+ }
2584
+ }
2585
+ },
2586
+ "/api/diagram/{type}/{hash}": {
2587
+ get: {
2588
+ operationId: "diagram",
2589
+ description: "Get a diagram embedded in a rendered document, as SVG, by its type and content hash.",
2590
+ security: [
2591
+ ],
2592
+ parameters: [
2593
+ {
2594
+ "in": "path",
2595
+ name: "type",
2596
+ schema: {
2597
+ type: "string",
2598
+ "enum": [
2599
+ "mermaid",
2600
+ "plantuml"
2601
+ ],
2602
+ description: "Diagram type."
2603
+ },
2604
+ required: true,
2605
+ description: "Diagram type."
2606
+ },
2607
+ {
2608
+ "in": "path",
2609
+ name: "hash",
2610
+ schema: {
2611
+ type: "string",
2612
+ description: "SHA-256 of the diagram source (hex), optionally with .svg."
2613
+ },
2614
+ required: true,
2615
+ description: "SHA-256 of the diagram source (hex), optionally with .svg."
2616
+ }
2617
+ ],
2618
+ responses: {
2619
+ "200": {
2620
+ description: "Success",
2621
+ content: {
2622
+ "image/svg+xml": {
2623
+ schema: {
2624
+ type: "string",
2625
+ format: "binary"
2626
+ }
2627
+ }
2628
+ }
2629
+ },
2630
+ "default": {
2631
+ description: "Error",
2632
+ content: {
2633
+ "application/json": {
2634
+ schema: {
2635
+ $ref: "#/components/schemas/ErrorBody"
2636
+ }
2637
+ }
2638
+ }
2639
+ }
2640
+ }
2641
+ }
2642
+ },
2643
+ "/api/public-content/{slug}": {
2644
+ get: {
2645
+ operationId: "publicContent",
2646
+ description: "Get one of the public pages of the server (readme, privacy, terms) rendered as Markdown.",
2647
+ security: [
2648
+ ],
2649
+ parameters: [
2650
+ {
2651
+ "in": "path",
2652
+ name: "slug",
2653
+ schema: {
2654
+ type: "string",
2655
+ description: "Page: readme, privacy or terms."
2656
+ },
2657
+ required: true,
2658
+ description: "Page: readme, privacy or terms."
2659
+ }
2660
+ ],
2661
+ responses: {
2662
+ "200": {
2663
+ description: "Success",
2664
+ content: {
2665
+ "application/json": {
2666
+ schema: {
2667
+ type: "object",
2668
+ properties: {
2669
+ type: {
2670
+ type: "string",
2671
+ "enum": [
2672
+ "markdown",
2673
+ "mermaid",
2674
+ "plantuml",
2675
+ "svg",
2676
+ "csv",
2677
+ "text",
2678
+ "image",
2679
+ "binary"
2680
+ ]
2681
+ },
2682
+ content: {
2683
+ type: "string"
2684
+ },
2685
+ html: {
2686
+ type: [
2687
+ "string",
2688
+ "null"
2689
+ ]
2690
+ },
2691
+ headings: {
2692
+ type: "array",
2693
+ items: {
2694
+ type: "object",
2695
+ properties: {
2696
+ level: {
2697
+ type: "number"
2698
+ },
2699
+ text: {
2700
+ type: "string"
2701
+ },
2702
+ slug: {
2703
+ type: "string"
2704
+ }
2705
+ },
2706
+ required: [
2707
+ "level",
2708
+ "text",
2709
+ "slug"
2710
+ ],
2711
+ additionalProperties: false
2712
+ }
2713
+ },
2714
+ size: {
2715
+ type: "number"
2716
+ },
2717
+ fileName: {
2718
+ type: "string"
2719
+ },
2720
+ breadcrumbs: {
2721
+ type: "array",
2722
+ items: {
2723
+ type: "object",
2724
+ properties: {
2725
+ label: {
2726
+ type: "string"
2727
+ },
2728
+ path: {
2729
+ type: "string"
2730
+ }
2731
+ },
2732
+ required: [
2733
+ "label",
2734
+ "path"
2735
+ ],
2736
+ additionalProperties: false
2737
+ }
2738
+ },
2739
+ isInsider: {
2740
+ type: "boolean"
2741
+ },
2742
+ mtime: {
2743
+ type: "number"
2744
+ },
2745
+ renderAs: {
2746
+ type: "string"
2747
+ },
2748
+ matchedRules: {
2749
+ type: "array",
2750
+ items: {
2751
+ type: "string"
2752
+ }
2753
+ },
2754
+ title: {
2755
+ type: "string"
2756
+ }
2757
+ },
2758
+ required: [
2759
+ "type",
2760
+ "fileName",
2761
+ "breadcrumbs",
2762
+ "isInsider"
2763
+ ],
2764
+ additionalProperties: false
2765
+ }
2766
+ }
2767
+ }
2768
+ },
2769
+ "default": {
2770
+ description: "Error",
2771
+ content: {
2772
+ "application/json": {
2773
+ schema: {
2774
+ $ref: "#/components/schemas/ErrorBody"
2775
+ }
2776
+ }
2777
+ }
2778
+ }
2779
+ }
2780
+ }
2781
+ },
2782
+ "/api/share": {
2783
+ post: {
2784
+ operationId: "share",
2785
+ description: "Sign a share link for a path: a path key, optionally expiring, or a deep share (`depth`, `dirs`). The response reports whether the path is a directory.",
2786
+ security: [
2787
+ {
2788
+ query_k: [
2789
+ ]
2790
+ },
2791
+ {
2792
+ cookie_jeeves_session: [
2793
+ ]
2794
+ }
2795
+ ],
2796
+ "x-jeeves-insider-only": true,
2797
+ requestBody: {
2798
+ content: {
2799
+ "application/json": {
2800
+ schema: {
2801
+ type: "object",
2802
+ properties: {
2803
+ path: {
2804
+ type: "string",
2805
+ description: "Path to share (/<root>/<path>)."
2806
+ },
2807
+ expiry: {
2808
+ description: "Expiry (Unix milliseconds); omit for no expiry.",
2809
+ type: "string"
2810
+ },
2811
+ depth: {
2812
+ description: "Deep share depth.",
2813
+ type: "integer",
2814
+ minimum: -9007199254740991,
2815
+ maximum: 9007199254740991
2816
+ },
2817
+ dirs: {
2818
+ description: "Deep share: directories below the path may be opened.",
2819
+ type: "boolean"
2820
+ }
2821
+ },
2822
+ required: [
2823
+ "path"
2824
+ ]
2825
+ }
2826
+ }
2827
+ }
2828
+ },
2829
+ responses: {
2830
+ "200": {
2831
+ description: "Success",
2832
+ content: {
2833
+ "application/json": {
2834
+ schema: {
2835
+ type: "object",
2836
+ properties: {
2837
+ url: {
2838
+ type: "string"
2839
+ },
2840
+ path: {
2841
+ type: "string"
2842
+ },
2843
+ exp: {
2844
+ type: [
2845
+ "string",
2846
+ "null"
2847
+ ]
2848
+ },
2849
+ depth: {
2850
+ type: "number"
2851
+ },
2852
+ dirs: {
2853
+ type: "boolean"
2854
+ },
2855
+ isDirectory: {
2856
+ type: "boolean"
2857
+ }
2858
+ },
2859
+ required: [
2860
+ "url",
2861
+ "path",
2862
+ "exp",
2863
+ "depth",
2864
+ "dirs",
2865
+ "isDirectory"
2866
+ ],
2867
+ additionalProperties: false
2868
+ }
2869
+ }
2870
+ }
2871
+ },
2872
+ "default": {
2873
+ description: "Error",
2874
+ content: {
2875
+ "application/json": {
2876
+ schema: {
2877
+ $ref: "#/components/schemas/ErrorBody"
2878
+ }
2879
+ }
2880
+ }
2881
+ }
2882
+ }
2883
+ }
2884
+ },
2885
+ "/api/util/share-for": {
2886
+ post: {
2887
+ operationId: "shareFor",
2888
+ description: "Sign a share link for a path aimed at named insiders: an insider link when every recipient is an insider with access, else an outsider share checked against the outsider policy.",
2889
+ security: [
2890
+ {
2891
+ query_k: [
2892
+ ]
2893
+ },
2894
+ {
2895
+ cookie_jeeves_session: [
2896
+ ]
2897
+ }
2898
+ ],
2899
+ "x-jeeves-insider-only": true,
2900
+ requestBody: {
2901
+ content: {
2902
+ "application/json": {
2903
+ schema: {
2904
+ type: "object",
2905
+ properties: {
2906
+ path: {
2907
+ type: "string",
2908
+ description: "Path to share (/<root>/<path>)."
2909
+ },
2910
+ insiders: {
2911
+ type: "array",
2912
+ items: {
2913
+ type: "string"
2914
+ },
2915
+ description: "Recipients: insider emails; anyone else is an outsider."
2916
+ },
2917
+ depth: {
2918
+ description: "Deep share depth.",
2919
+ type: "integer",
2920
+ minimum: -9007199254740991,
2921
+ maximum: 9007199254740991
2922
+ },
2923
+ dirs: {
2924
+ description: "Deep share: directories below the path may be opened.",
2925
+ type: "boolean"
2926
+ },
2927
+ enforceOutsiderPolicy: {
2928
+ description: "false: sign even where the outsider policy denies.",
2929
+ type: "boolean"
2930
+ }
2931
+ },
2932
+ required: [
2933
+ "path",
2934
+ "insiders"
2935
+ ]
2936
+ }
2937
+ }
2938
+ }
2939
+ },
2940
+ responses: {
2941
+ "200": {
2942
+ description: "Success",
2943
+ content: {
2944
+ "application/json": {
2945
+ schema: {
2946
+ type: "object",
2947
+ properties: {
2948
+ url: {
2949
+ type: [
2950
+ "string",
2951
+ "null"
2952
+ ]
2953
+ },
2954
+ type: {
2955
+ type: "string",
2956
+ "enum": [
2957
+ "insider",
2958
+ "outsider-share",
2959
+ "blocked",
2960
+ "policy-denied"
2961
+ ]
2962
+ },
2963
+ reason: {
2964
+ type: "string"
2965
+ },
2966
+ blocked: {
2967
+ type: "array",
2968
+ items: {
2969
+ type: "string"
2970
+ }
2971
+ },
2972
+ warning: {
2973
+ type: "string"
2974
+ }
2975
+ },
2976
+ required: [
2977
+ "url",
2978
+ "type"
2979
+ ],
2980
+ additionalProperties: false
2981
+ }
2982
+ }
2983
+ }
2984
+ },
2985
+ "default": {
2986
+ description: "Error",
2987
+ content: {
2988
+ "application/json": {
2989
+ schema: {
2990
+ $ref: "#/components/schemas/ErrorBody"
2991
+ }
2992
+ }
2993
+ }
2994
+ }
2995
+ }
2996
+ }
2997
+ },
2998
+ "/api/content-link/{file}": {
2999
+ get: {
3000
+ operationId: "contentLink",
3001
+ description: "Pre-computed share link for one of the pinned content pages of the server (privacy, terms).",
3002
+ security: [
3003
+ ],
3004
+ parameters: [
3005
+ {
3006
+ "in": "path",
3007
+ name: "file",
3008
+ schema: {
3009
+ type: "string",
3010
+ description: "Content page: privacy or terms."
3011
+ },
3012
+ required: true,
3013
+ description: "Content page: privacy or terms."
3014
+ }
3015
+ ],
3016
+ responses: {
3017
+ "200": {
3018
+ description: "Success",
3019
+ content: {
3020
+ "application/json": {
3021
+ schema: {
3022
+ type: "object",
3023
+ properties: {
3024
+ url: {
3025
+ type: "string"
3026
+ }
3027
+ },
3028
+ required: [
3029
+ "url"
3030
+ ],
3031
+ additionalProperties: false
3032
+ }
3033
+ }
3034
+ }
3035
+ },
3036
+ "default": {
3037
+ description: "Error",
3038
+ content: {
3039
+ "application/json": {
3040
+ schema: {
3041
+ $ref: "#/components/schemas/ErrorBody"
3042
+ }
3043
+ }
3044
+ }
3045
+ }
3046
+ }
3047
+ }
3048
+ },
3049
+ "/api/readme-link": {
3050
+ get: {
3051
+ operationId: "readmeLink",
3052
+ description: "Pre-computed share link for the README of the server.",
3053
+ security: [
3054
+ ],
3055
+ responses: {
3056
+ "200": {
3057
+ description: "Success",
3058
+ content: {
3059
+ "application/json": {
3060
+ schema: {
3061
+ type: "object",
3062
+ properties: {
3063
+ url: {
3064
+ type: "string"
3065
+ }
3066
+ },
3067
+ required: [
3068
+ "url"
3069
+ ],
3070
+ additionalProperties: false
3071
+ }
3072
+ }
3073
+ }
3074
+ },
3075
+ "default": {
3076
+ description: "Error",
3077
+ content: {
3078
+ "application/json": {
3079
+ schema: {
3080
+ $ref: "#/components/schemas/ErrorBody"
3081
+ }
3082
+ }
3083
+ }
3084
+ }
3085
+ }
3086
+ }
3087
+ },
3088
+ "/api/resolve-path": {
3089
+ get: {
3090
+ operationId: "resolvePath",
3091
+ description: "Convert an absolute filesystem path to a server browse path and optional public URL.",
3092
+ security: [
3093
+ {
3094
+ query_k: [
3095
+ ]
3096
+ },
3097
+ {
3098
+ cookie_jeeves_session: [
3099
+ ]
3100
+ }
3101
+ ],
3102
+ "x-jeeves-insider-only": true,
3103
+ parameters: [
3104
+ {
3105
+ "in": "query",
3106
+ name: "fsPath",
3107
+ schema: {
3108
+ type: "string",
3109
+ description: "Absolute filesystem path to resolve"
3110
+ },
3111
+ required: true,
3112
+ description: "Absolute filesystem path to resolve"
3113
+ }
3114
+ ],
3115
+ responses: {
3116
+ "200": {
3117
+ description: "Success",
3118
+ content: {
3119
+ "application/json": {
3120
+ schema: {
3121
+ type: "object",
3122
+ properties: {
3123
+ browsePath: {
3124
+ type: "string"
3125
+ },
3126
+ browseUrl: {
3127
+ type: "string"
3128
+ },
3129
+ publicUrl: {
3130
+ type: "string"
3131
+ }
3132
+ },
3133
+ required: [
3134
+ "browsePath",
3135
+ "browseUrl"
3136
+ ],
3137
+ additionalProperties: false
3138
+ }
3139
+ }
3140
+ }
3141
+ },
3142
+ "default": {
3143
+ description: "Error",
3144
+ content: {
3145
+ "application/json": {
3146
+ schema: {
3147
+ $ref: "#/components/schemas/ErrorBody"
3148
+ }
3149
+ }
3150
+ }
3151
+ }
3152
+ }
3153
+ }
3154
+ },
3155
+ "/api/rotate-key": {
3156
+ post: {
3157
+ operationId: "rotateKey",
3158
+ description: "Rotate the key of the calling insider. The old insider key and every outsider link the insider signed stop working.",
3159
+ security: [
3160
+ {
3161
+ query_k: [
3162
+ ]
3163
+ },
3164
+ {
3165
+ cookie_jeeves_session: [
3166
+ ]
3167
+ }
3168
+ ],
3169
+ "x-jeeves-insider-only": true,
3170
+ responses: {
3171
+ "200": {
3172
+ description: "Success",
3173
+ content: {
3174
+ "application/json": {
3175
+ schema: {
3176
+ type: "object",
3177
+ properties: {
3178
+ ok: {
3179
+ type: "boolean",
3180
+ "const": true
3181
+ },
3182
+ keyCreatedAt: {
3183
+ type: "string"
3184
+ },
3185
+ invalidates: {
3186
+ type: "array",
3187
+ items: {
3188
+ type: "string",
3189
+ "enum": [
3190
+ "insiderKey",
3191
+ "outsiderLinks"
3192
+ ]
3193
+ }
3194
+ }
3195
+ },
3196
+ required: [
3197
+ "ok",
3198
+ "keyCreatedAt",
3199
+ "invalidates"
3200
+ ],
3201
+ additionalProperties: false
3202
+ }
3203
+ }
3204
+ }
3205
+ },
3206
+ "default": {
3207
+ description: "Error",
3208
+ content: {
3209
+ "application/json": {
3210
+ schema: {
3211
+ $ref: "#/components/schemas/ErrorBody"
3212
+ }
3213
+ }
3214
+ }
3215
+ }
3216
+ }
3217
+ }
3218
+ },
3219
+ "/event": {
3220
+ post: {
3221
+ operationId: "receiveEvent",
3222
+ description: "Event gateway webhook receiver: matches a JSON object against the configured event schemas and queues the matching command.",
3223
+ security: [
3224
+ {
3225
+ query_k: [
3226
+ ]
3227
+ }
3228
+ ],
3229
+ requestBody: {
3230
+ content: {
3231
+ "application/json": {
3232
+ schema: {
3233
+ type: "object",
3234
+ properties: {
3235
+ },
3236
+ additionalProperties: {
3237
+ }
3238
+ }
3239
+ }
3240
+ }
3241
+ },
3242
+ responses: {
3243
+ "200": {
3244
+ description: "Success",
3245
+ content: {
3246
+ "application/json": {
3247
+ schema: {
3248
+ type: "object",
3249
+ properties: {
3250
+ matched: {
3251
+ type: [
3252
+ "string",
3253
+ "null"
3254
+ ]
3255
+ }
3256
+ },
3257
+ required: [
3258
+ "matched"
3259
+ ],
3260
+ additionalProperties: false
3261
+ }
3262
+ }
3263
+ }
3264
+ },
3265
+ "default": {
3266
+ description: "Error",
3267
+ content: {
3268
+ "application/json": {
3269
+ schema: {
3270
+ $ref: "#/components/schemas/ErrorBody"
3271
+ }
3272
+ }
3273
+ }
3274
+ }
3275
+ }
3276
+ }
3277
+ },
3278
+ "/api/events": {
3279
+ get: {
3280
+ operationId: "listEvents",
3281
+ description: "Recent event log entries, newest last (insiders with no scopes configured; limit capped at 100).",
3282
+ security: [
3283
+ {
3284
+ query_k: [
3285
+ ]
3286
+ },
3287
+ {
3288
+ cookie_jeeves_session: [
3289
+ ]
3290
+ }
3291
+ ],
3292
+ "x-jeeves-insider-only": true,
3293
+ parameters: [
3294
+ {
3295
+ "in": "query",
3296
+ name: "limit",
3297
+ schema: {
3298
+ description: "Entries to return (default 20, at most 100).",
3299
+ type: "string"
3300
+ },
3301
+ description: "Entries to return (default 20, at most 100)."
3302
+ }
3303
+ ],
3304
+ responses: {
3305
+ "200": {
3306
+ description: "Success",
3307
+ content: {
3308
+ "application/json": {
3309
+ schema: {
3310
+ type: "array",
3311
+ items: {
3312
+ type: "object",
3313
+ properties: {
3314
+ ts: {
3315
+ type: "string"
3316
+ },
3317
+ event: {
3318
+ type: [
3319
+ "string",
3320
+ "null"
3321
+ ]
3322
+ },
3323
+ matched: {
3324
+ type: "boolean"
3325
+ },
3326
+ exitCode: {
3327
+ type: [
3328
+ "number",
3329
+ "null"
3330
+ ]
3331
+ },
3332
+ timedOut: {
3333
+ type: "boolean"
3334
+ },
3335
+ durationMs: {
3336
+ type: "number"
3337
+ },
3338
+ bodyPreview: {
3339
+ type: "string"
3340
+ },
3341
+ truncated: {
3342
+ type: "boolean"
3343
+ },
3344
+ originalBytes: {
3345
+ type: "number"
3346
+ }
3347
+ },
3348
+ required: [
3349
+ "ts",
3350
+ "event",
3351
+ "matched"
3352
+ ],
3353
+ additionalProperties: {
3354
+ }
3355
+ }
3356
+ }
3357
+ }
3358
+ }
3359
+ },
3360
+ "default": {
3361
+ description: "Error",
3362
+ content: {
3363
+ "application/json": {
3364
+ schema: {
3365
+ $ref: "#/components/schemas/ErrorBody"
3366
+ }
3367
+ }
3368
+ }
3369
+ }
3370
+ }
3371
+ }
3372
+ },
3373
+ "/api/oauth/start": {
3374
+ post: {
3375
+ operationId: "oauthStart",
3376
+ description: "Start an OAuth2 authorization code flow; returns the URL to open in a browser.",
3377
+ security: [
3378
+ {
3379
+ query_k: [
3380
+ ]
3381
+ },
3382
+ {
3383
+ cookie_jeeves_session: [
3384
+ ]
3385
+ }
3386
+ ],
3387
+ "x-jeeves-insider-only": true,
3388
+ requestBody: {
3389
+ content: {
3390
+ "application/json": {
3391
+ schema: {
3392
+ type: "object",
3393
+ properties: {
3394
+ provider: {
3395
+ type: "string",
3396
+ description: "Provider name."
3397
+ },
3398
+ account: {
3399
+ type: "string",
3400
+ description: "Account name."
3401
+ },
3402
+ authUrl: {
3403
+ description: "Authorization endpoint URL.",
3404
+ type: "string"
3405
+ },
3406
+ tokenUrl: {
3407
+ description: "Token endpoint URL.",
3408
+ type: "string"
3409
+ },
3410
+ clientId: {
3411
+ type: "string",
3412
+ description: "OAuth client id."
3413
+ },
3414
+ clientSecret: {
3415
+ type: "string",
3416
+ description: "OAuth client secret."
3417
+ },
3418
+ scopes: {
3419
+ description: "Scopes to request.",
3420
+ type: "array",
3421
+ items: {
3422
+ type: "string"
3423
+ }
3424
+ },
3425
+ pkce: {
3426
+ description: "Use PKCE.",
3427
+ type: "boolean"
3428
+ },
3429
+ origin: {
3430
+ description: "Origin for the redirect URI (default: the public URL).",
3431
+ type: "string"
3432
+ }
3433
+ },
3434
+ required: [
3435
+ "provider",
3436
+ "account",
3437
+ "clientId",
3438
+ "clientSecret"
3439
+ ]
3440
+ }
3441
+ }
3442
+ }
3443
+ },
3444
+ responses: {
3445
+ "200": {
3446
+ description: "Success",
3447
+ content: {
3448
+ "application/json": {
3449
+ schema: {
3450
+ type: "object",
3451
+ properties: {
3452
+ authUrl: {
3453
+ type: "string"
3454
+ },
3455
+ state: {
3456
+ type: "string"
3457
+ }
3458
+ },
3459
+ required: [
3460
+ "authUrl",
3461
+ "state"
3462
+ ],
3463
+ additionalProperties: false
3464
+ }
3465
+ }
3466
+ }
3467
+ },
3468
+ "default": {
3469
+ description: "Error",
3470
+ content: {
3471
+ "application/json": {
3472
+ schema: {
3473
+ $ref: "#/components/schemas/ErrorBody"
3474
+ }
3475
+ }
3476
+ }
3477
+ }
3478
+ }
3479
+ }
3480
+ },
3481
+ "/api/oauth/status": {
3482
+ get: {
3483
+ operationId: "oauthStatus",
3484
+ description: "Check whether valid OAuth2 credentials exist for a provider/account.",
3485
+ security: [
3486
+ {
3487
+ query_k: [
3488
+ ]
3489
+ },
3490
+ {
3491
+ cookie_jeeves_session: [
3492
+ ]
3493
+ }
3494
+ ],
3495
+ "x-jeeves-insider-only": true,
3496
+ parameters: [
3497
+ {
3498
+ "in": "query",
3499
+ name: "provider",
3500
+ schema: {
3501
+ type: "string",
3502
+ description: "Provider name."
3503
+ },
3504
+ required: true,
3505
+ description: "Provider name."
3506
+ },
3507
+ {
3508
+ "in": "query",
3509
+ name: "account",
3510
+ schema: {
3511
+ type: "string",
3512
+ description: "Account name."
3513
+ },
3514
+ required: true,
3515
+ description: "Account name."
3516
+ }
3517
+ ],
3518
+ responses: {
3519
+ "200": {
3520
+ description: "Success",
3521
+ content: {
3522
+ "application/json": {
3523
+ schema: {
3524
+ type: "object",
3525
+ properties: {
3526
+ exists: {
3527
+ type: "boolean"
3528
+ },
3529
+ expired: {
3530
+ type: "boolean"
3531
+ },
3532
+ provider: {
3533
+ type: "string"
3534
+ },
3535
+ account: {
3536
+ type: "string"
3537
+ }
3538
+ },
3539
+ required: [
3540
+ "exists",
3541
+ "expired",
3542
+ "provider",
3543
+ "account"
3544
+ ],
3545
+ additionalProperties: false
3546
+ }
3547
+ }
3548
+ }
3549
+ },
3550
+ "default": {
3551
+ description: "Error",
3552
+ content: {
3553
+ "application/json": {
3554
+ schema: {
3555
+ $ref: "#/components/schemas/ErrorBody"
3556
+ }
3557
+ }
3558
+ }
3559
+ }
3560
+ }
3561
+ }
3562
+ },
3563
+ "/api/oauth/token": {
3564
+ get: {
3565
+ operationId: "oauthToken",
3566
+ description: "Get a valid access token for a provider/account, refreshing it when expired.",
3567
+ security: [
3568
+ {
3569
+ query_k: [
3570
+ ]
3571
+ },
3572
+ {
3573
+ cookie_jeeves_session: [
3574
+ ]
3575
+ }
3576
+ ],
3577
+ "x-jeeves-insider-only": true,
3578
+ parameters: [
3579
+ {
3580
+ "in": "query",
3581
+ name: "provider",
3582
+ schema: {
3583
+ type: "string",
3584
+ description: "Provider name."
3585
+ },
3586
+ required: true,
3587
+ description: "Provider name."
3588
+ },
3589
+ {
3590
+ "in": "query",
3591
+ name: "account",
3592
+ schema: {
3593
+ type: "string",
3594
+ description: "Account name."
3595
+ },
3596
+ required: true,
3597
+ description: "Account name."
3598
+ }
3599
+ ],
3600
+ responses: {
3601
+ "200": {
3602
+ description: "Success",
3603
+ content: {
3604
+ "application/json": {
3605
+ schema: {
3606
+ type: "object",
3607
+ properties: {
3608
+ access_token: {
3609
+ type: "string"
3610
+ },
3611
+ token_type: {
3612
+ type: "string"
3613
+ },
3614
+ expires_in_seconds: {
3615
+ type: [
3616
+ "number",
3617
+ "null"
3618
+ ]
3619
+ }
3620
+ },
3621
+ required: [
3622
+ "access_token",
3623
+ "token_type",
3624
+ "expires_in_seconds"
3625
+ ],
3626
+ additionalProperties: false
3627
+ }
3628
+ }
3629
+ }
3630
+ },
3631
+ "default": {
3632
+ description: "Error",
3633
+ content: {
3634
+ "application/json": {
3635
+ schema: {
3636
+ $ref: "#/components/schemas/ErrorBody"
3637
+ }
3638
+ }
3639
+ }
3640
+ }
3641
+ }
3642
+ }
3643
+ },
3644
+ "/api/runner/jobs": {
3645
+ get: {
3646
+ operationId: "runnerListJobs",
3647
+ description: "List the jeeves-runner jobs (runner GET /jobs).",
3648
+ security: [
3649
+ {
3650
+ query_k: [
3651
+ ]
3652
+ },
3653
+ {
3654
+ cookie_jeeves_session: [
3655
+ ]
3656
+ }
3657
+ ],
3658
+ "x-jeeves-insider-only": true,
3659
+ responses: {
3660
+ "200": {
3661
+ description: "Success",
3662
+ content: {
3663
+ "application/json": {
3664
+ schema: {
3665
+ }
3666
+ }
3667
+ }
3668
+ },
3669
+ "default": {
3670
+ description: "Error",
3671
+ content: {
3672
+ "application/json": {
3673
+ schema: {
3674
+ $ref: "#/components/schemas/ErrorBody"
3675
+ }
3676
+ }
3677
+ }
3678
+ }
3679
+ }
3680
+ }
3681
+ },
3682
+ "/api/runner/jobs/{id}": {
3683
+ get: {
3684
+ operationId: "runnerGetJob",
3685
+ description: "One jeeves-runner job (runner GET /jobs/:id).",
3686
+ security: [
3687
+ {
3688
+ query_k: [
3689
+ ]
3690
+ },
3691
+ {
3692
+ cookie_jeeves_session: [
3693
+ ]
3694
+ }
3695
+ ],
3696
+ "x-jeeves-insider-only": true,
3697
+ parameters: [
3698
+ {
3699
+ "in": "path",
3700
+ name: "id",
3701
+ schema: {
3702
+ type: "string",
3703
+ pattern: "^(?!\\.{1,2}$)[^/\\\\\\p{Cc}]+$",
3704
+ description: "Runner job ID: not `.` or `..`, no `/` or `\\`, and no control characters."
3705
+ },
3706
+ required: true,
3707
+ description: "Runner job ID: not `.` or `..`, no `/` or `\\`, and no control characters."
3708
+ }
3709
+ ],
3710
+ responses: {
3711
+ "200": {
3712
+ description: "Success",
3713
+ content: {
3714
+ "application/json": {
3715
+ schema: {
3716
+ }
3717
+ }
3718
+ }
3719
+ },
3720
+ "default": {
3721
+ description: "Error",
3722
+ content: {
3723
+ "application/json": {
3724
+ schema: {
3725
+ $ref: "#/components/schemas/ErrorBody"
3726
+ }
3727
+ }
3728
+ }
3729
+ }
3730
+ }
3731
+ }
3732
+ },
3733
+ "/api/runner/jobs/{id}/runs": {
3734
+ get: {
3735
+ operationId: "runnerListRuns",
3736
+ description: "A jeeves-runner job's recent runs (runner GET /jobs/:id/runs).",
3737
+ security: [
3738
+ {
3739
+ query_k: [
3740
+ ]
3741
+ },
3742
+ {
3743
+ cookie_jeeves_session: [
3744
+ ]
3745
+ }
3746
+ ],
3747
+ "x-jeeves-insider-only": true,
3748
+ parameters: [
3749
+ {
3750
+ "in": "path",
3751
+ name: "id",
3752
+ schema: {
3753
+ type: "string",
3754
+ pattern: "^(?!\\.{1,2}$)[^/\\\\\\p{Cc}]+$",
3755
+ description: "Runner job ID: not `.` or `..`, no `/` or `\\`, and no control characters."
3756
+ },
3757
+ required: true,
3758
+ description: "Runner job ID: not `.` or `..`, no `/` or `\\`, and no control characters."
3759
+ },
3760
+ {
3761
+ "in": "query",
3762
+ name: "limit",
3763
+ schema: {
3764
+ description: "Maximum number of runs (default 20).",
3765
+ type: "string"
3766
+ },
3767
+ description: "Maximum number of runs (default 20)."
3768
+ }
3769
+ ],
3770
+ responses: {
3771
+ "200": {
3772
+ description: "Success",
3773
+ content: {
3774
+ "application/json": {
3775
+ schema: {
3776
+ }
3777
+ }
3778
+ }
3779
+ },
3780
+ "default": {
3781
+ description: "Error",
3782
+ content: {
3783
+ "application/json": {
3784
+ schema: {
3785
+ $ref: "#/components/schemas/ErrorBody"
3786
+ }
3787
+ }
3788
+ }
3789
+ }
3790
+ }
3791
+ }
3792
+ },
3793
+ "/api/runner/jobs/{id}/run": {
3794
+ post: {
3795
+ operationId: "runnerRunJob",
3796
+ description: "Run a jeeves-runner job now (runner POST /jobs/:id/run).",
3797
+ security: [
3798
+ {
3799
+ query_k: [
3800
+ ]
3801
+ },
3802
+ {
3803
+ cookie_jeeves_session: [
3804
+ ]
3805
+ }
3806
+ ],
3807
+ "x-jeeves-insider-only": true,
3808
+ parameters: [
3809
+ {
3810
+ "in": "path",
3811
+ name: "id",
3812
+ schema: {
3813
+ type: "string",
3814
+ pattern: "^(?!\\.{1,2}$)[^/\\\\\\p{Cc}]+$",
3815
+ description: "Runner job ID: not `.` or `..`, no `/` or `\\`, and no control characters."
3816
+ },
3817
+ required: true,
3818
+ description: "Runner job ID: not `.` or `..`, no `/` or `\\`, and no control characters."
3819
+ }
3820
+ ],
3821
+ responses: {
3822
+ "200": {
3823
+ description: "Success",
3824
+ content: {
3825
+ "application/json": {
3826
+ schema: {
3827
+ }
3828
+ }
3829
+ }
3830
+ },
3831
+ "default": {
3832
+ description: "Error",
3833
+ content: {
3834
+ "application/json": {
3835
+ schema: {
3836
+ $ref: "#/components/schemas/ErrorBody"
3837
+ }
3838
+ }
3839
+ }
3840
+ }
3841
+ }
3842
+ }
3843
+ },
3844
+ "/api/runner/jobs/{id}/enable": {
3845
+ patch: {
3846
+ operationId: "runnerEnableJob",
3847
+ description: "Enable a jeeves-runner job (runner PATCH /jobs/:id/enable).",
3848
+ security: [
3849
+ {
3850
+ query_k: [
3851
+ ]
3852
+ },
3853
+ {
3854
+ cookie_jeeves_session: [
3855
+ ]
3856
+ }
3857
+ ],
3858
+ "x-jeeves-insider-only": true,
3859
+ parameters: [
3860
+ {
3861
+ "in": "path",
3862
+ name: "id",
3863
+ schema: {
3864
+ type: "string",
3865
+ pattern: "^(?!\\.{1,2}$)[^/\\\\\\p{Cc}]+$",
3866
+ description: "Runner job ID: not `.` or `..`, no `/` or `\\`, and no control characters."
3867
+ },
3868
+ required: true,
3869
+ description: "Runner job ID: not `.` or `..`, no `/` or `\\`, and no control characters."
3870
+ }
3871
+ ],
3872
+ responses: {
3873
+ "200": {
3874
+ description: "Success",
3875
+ content: {
3876
+ "application/json": {
3877
+ schema: {
3878
+ }
3879
+ }
3880
+ }
3881
+ },
3882
+ "default": {
3883
+ description: "Error",
3884
+ content: {
3885
+ "application/json": {
3886
+ schema: {
3887
+ $ref: "#/components/schemas/ErrorBody"
3888
+ }
3889
+ }
3890
+ }
3891
+ }
3892
+ }
3893
+ }
3894
+ },
3895
+ "/api/runner/jobs/{id}/disable": {
3896
+ patch: {
3897
+ operationId: "runnerDisableJob",
3898
+ description: "Disable a jeeves-runner job (runner PATCH /jobs/:id/disable).",
3899
+ security: [
3900
+ {
3901
+ query_k: [
3902
+ ]
3903
+ },
3904
+ {
3905
+ cookie_jeeves_session: [
3906
+ ]
3907
+ }
3908
+ ],
3909
+ "x-jeeves-insider-only": true,
3910
+ parameters: [
3911
+ {
3912
+ "in": "path",
3913
+ name: "id",
3914
+ schema: {
3915
+ type: "string",
3916
+ pattern: "^(?!\\.{1,2}$)[^/\\\\\\p{Cc}]+$",
3917
+ description: "Runner job ID: not `.` or `..`, no `/` or `\\`, and no control characters."
3918
+ },
3919
+ required: true,
3920
+ description: "Runner job ID: not `.` or `..`, no `/` or `\\`, and no control characters."
3921
+ }
3922
+ ],
3923
+ responses: {
3924
+ "200": {
3925
+ description: "Success",
3926
+ content: {
3927
+ "application/json": {
3928
+ schema: {
3929
+ }
3930
+ }
3931
+ }
3932
+ },
3933
+ "default": {
3934
+ description: "Error",
3935
+ content: {
3936
+ "application/json": {
3937
+ schema: {
3938
+ $ref: "#/components/schemas/ErrorBody"
3939
+ }
3940
+ }
3941
+ }
3942
+ }
3943
+ }
3944
+ }
3945
+ },
3946
+ "/api/runner/status": {
3947
+ get: {
3948
+ operationId: "runnerStatus",
3949
+ description: "jeeves-runner status (runner GET /status).",
3950
+ security: [
3951
+ {
3952
+ query_k: [
3953
+ ]
3954
+ },
3955
+ {
3956
+ cookie_jeeves_session: [
3957
+ ]
3958
+ }
3959
+ ],
3960
+ "x-jeeves-insider-only": true,
3961
+ responses: {
3962
+ "200": {
3963
+ description: "Success",
3964
+ content: {
3965
+ "application/json": {
3966
+ schema: {
3967
+ }
3968
+ }
3969
+ }
3970
+ },
3971
+ "default": {
3972
+ description: "Error",
3973
+ content: {
3974
+ "application/json": {
3975
+ schema: {
3976
+ $ref: "#/components/schemas/ErrorBody"
3977
+ }
3978
+ }
3979
+ }
3980
+ }
3981
+ }
3982
+ }
3983
+ }
3984
+ };
3985
+ var components = {
3986
+ schemas: {
3987
+ ErrorBody: {
3988
+ type: "object",
3989
+ properties: {
3990
+ statusCode: {
3991
+ type: "integer",
3992
+ minimum: -9007199254740991,
3993
+ maximum: 9007199254740991
3994
+ },
3995
+ code: {
3996
+ type: "string"
3997
+ },
3998
+ error: {
3999
+ type: "string"
4000
+ },
4001
+ message: {
4002
+ type: "string"
4003
+ }
4004
+ },
4005
+ required: [
4006
+ "statusCode",
4007
+ "error",
4008
+ "message"
4009
+ ],
4010
+ additionalProperties: false
4011
+ }
4012
+ },
4013
+ securitySchemes: {
4014
+ query_k: {
4015
+ type: "apiKey",
4016
+ "in": "query",
4017
+ name: "k"
4018
+ },
4019
+ cookie_jeeves_session: {
4020
+ type: "apiKey",
4021
+ "in": "cookie",
4022
+ name: "jeeves_session"
4023
+ },
4024
+ header_X_API_Key: {
4025
+ type: "apiKey",
4026
+ "in": "header",
4027
+ name: "X-API-Key"
4028
+ }
4029
+ }
4030
+ };
4031
+ var document = {
4032
+ openapi: openapi,
4033
+ info: info,
4034
+ paths: paths,
4035
+ components: components
4036
+ };
4037
+
4038
+ export { components, document as default, info, openapi, paths };