@superdoc-dev/sdk 1.17.0 → 1.18.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.
@@ -19,6 +19,10 @@
19
19
  ],
20
20
  "description": "The action to perform. One of: blocks, extract, html, info, markdown, text."
21
21
  },
22
+ "in": {
23
+ "$ref": "#/$defs/StoryLocator",
24
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
25
+ },
22
26
  "unflattenLists": {
23
27
  "type": "boolean",
24
28
  "description": "When true, flattens nested list structures in output. Default: false. Only for action 'html'. Omit for other actions."
@@ -146,6 +150,174 @@
146
150
  },
147
151
  "offset": {
148
152
  "type": "number"
153
+ },
154
+ "story": {
155
+ "oneOf": [
156
+ {
157
+ "type": "object",
158
+ "properties": {
159
+ "kind": {
160
+ "const": "story",
161
+ "type": "string"
162
+ },
163
+ "storyType": {
164
+ "const": "body",
165
+ "type": "string"
166
+ }
167
+ },
168
+ "required": [
169
+ "kind",
170
+ "storyType"
171
+ ]
172
+ },
173
+ {
174
+ "type": "object",
175
+ "properties": {
176
+ "kind": {
177
+ "const": "story",
178
+ "type": "string"
179
+ },
180
+ "storyType": {
181
+ "const": "headerFooterSlot",
182
+ "type": "string"
183
+ },
184
+ "section": {
185
+ "type": "object",
186
+ "properties": {
187
+ "kind": {
188
+ "const": "section",
189
+ "type": "string"
190
+ },
191
+ "sectionId": {
192
+ "type": "string"
193
+ }
194
+ },
195
+ "required": [
196
+ "kind",
197
+ "sectionId"
198
+ ]
199
+ },
200
+ "headerFooterKind": {
201
+ "enum": [
202
+ "header",
203
+ "footer"
204
+ ]
205
+ },
206
+ "variant": {
207
+ "enum": [
208
+ "default",
209
+ "first",
210
+ "even"
211
+ ]
212
+ },
213
+ "resolution": {
214
+ "enum": [
215
+ "effective",
216
+ "explicit"
217
+ ]
218
+ },
219
+ "onWrite": {
220
+ "enum": [
221
+ "materializeIfInherited",
222
+ "editResolvedPart",
223
+ "error"
224
+ ]
225
+ }
226
+ },
227
+ "required": [
228
+ "kind",
229
+ "storyType",
230
+ "section",
231
+ "headerFooterKind",
232
+ "variant"
233
+ ]
234
+ },
235
+ {
236
+ "type": "object",
237
+ "properties": {
238
+ "kind": {
239
+ "const": "story",
240
+ "type": "string"
241
+ },
242
+ "storyType": {
243
+ "const": "headerFooterPart",
244
+ "type": "string"
245
+ },
246
+ "refId": {
247
+ "type": "string"
248
+ }
249
+ },
250
+ "required": [
251
+ "kind",
252
+ "storyType",
253
+ "refId"
254
+ ]
255
+ },
256
+ {
257
+ "type": "object",
258
+ "properties": {
259
+ "kind": {
260
+ "const": "story",
261
+ "type": "string"
262
+ },
263
+ "storyType": {
264
+ "const": "footnote",
265
+ "type": "string"
266
+ },
267
+ "noteId": {
268
+ "type": "string"
269
+ }
270
+ },
271
+ "required": [
272
+ "kind",
273
+ "storyType",
274
+ "noteId"
275
+ ]
276
+ },
277
+ {
278
+ "type": "object",
279
+ "properties": {
280
+ "kind": {
281
+ "const": "story",
282
+ "type": "string"
283
+ },
284
+ "storyType": {
285
+ "const": "endnote",
286
+ "type": "string"
287
+ },
288
+ "noteId": {
289
+ "type": "string"
290
+ }
291
+ },
292
+ "required": [
293
+ "kind",
294
+ "storyType",
295
+ "noteId"
296
+ ]
297
+ },
298
+ {
299
+ "type": "object",
300
+ "properties": {
301
+ "kind": {
302
+ "const": "story",
303
+ "type": "string"
304
+ },
305
+ "storyType": {
306
+ "const": "textbox",
307
+ "type": "string"
308
+ },
309
+ "textboxId": {
310
+ "type": "string"
311
+ }
312
+ },
313
+ "required": [
314
+ "kind",
315
+ "storyType",
316
+ "textboxId"
317
+ ]
318
+ }
319
+ ],
320
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
149
321
  }
150
322
  },
151
323
  "required": [
@@ -180,6 +352,174 @@
180
352
  },
181
353
  "nodeId": {
182
354
  "type": "string"
355
+ },
356
+ "story": {
357
+ "oneOf": [
358
+ {
359
+ "type": "object",
360
+ "properties": {
361
+ "kind": {
362
+ "const": "story",
363
+ "type": "string"
364
+ },
365
+ "storyType": {
366
+ "const": "body",
367
+ "type": "string"
368
+ }
369
+ },
370
+ "required": [
371
+ "kind",
372
+ "storyType"
373
+ ]
374
+ },
375
+ {
376
+ "type": "object",
377
+ "properties": {
378
+ "kind": {
379
+ "const": "story",
380
+ "type": "string"
381
+ },
382
+ "storyType": {
383
+ "const": "headerFooterSlot",
384
+ "type": "string"
385
+ },
386
+ "section": {
387
+ "type": "object",
388
+ "properties": {
389
+ "kind": {
390
+ "const": "section",
391
+ "type": "string"
392
+ },
393
+ "sectionId": {
394
+ "type": "string"
395
+ }
396
+ },
397
+ "required": [
398
+ "kind",
399
+ "sectionId"
400
+ ]
401
+ },
402
+ "headerFooterKind": {
403
+ "enum": [
404
+ "header",
405
+ "footer"
406
+ ]
407
+ },
408
+ "variant": {
409
+ "enum": [
410
+ "default",
411
+ "first",
412
+ "even"
413
+ ]
414
+ },
415
+ "resolution": {
416
+ "enum": [
417
+ "effective",
418
+ "explicit"
419
+ ]
420
+ },
421
+ "onWrite": {
422
+ "enum": [
423
+ "materializeIfInherited",
424
+ "editResolvedPart",
425
+ "error"
426
+ ]
427
+ }
428
+ },
429
+ "required": [
430
+ "kind",
431
+ "storyType",
432
+ "section",
433
+ "headerFooterKind",
434
+ "variant"
435
+ ]
436
+ },
437
+ {
438
+ "type": "object",
439
+ "properties": {
440
+ "kind": {
441
+ "const": "story",
442
+ "type": "string"
443
+ },
444
+ "storyType": {
445
+ "const": "headerFooterPart",
446
+ "type": "string"
447
+ },
448
+ "refId": {
449
+ "type": "string"
450
+ }
451
+ },
452
+ "required": [
453
+ "kind",
454
+ "storyType",
455
+ "refId"
456
+ ]
457
+ },
458
+ {
459
+ "type": "object",
460
+ "properties": {
461
+ "kind": {
462
+ "const": "story",
463
+ "type": "string"
464
+ },
465
+ "storyType": {
466
+ "const": "footnote",
467
+ "type": "string"
468
+ },
469
+ "noteId": {
470
+ "type": "string"
471
+ }
472
+ },
473
+ "required": [
474
+ "kind",
475
+ "storyType",
476
+ "noteId"
477
+ ]
478
+ },
479
+ {
480
+ "type": "object",
481
+ "properties": {
482
+ "kind": {
483
+ "const": "story",
484
+ "type": "string"
485
+ },
486
+ "storyType": {
487
+ "const": "endnote",
488
+ "type": "string"
489
+ },
490
+ "noteId": {
491
+ "type": "string"
492
+ }
493
+ },
494
+ "required": [
495
+ "kind",
496
+ "storyType",
497
+ "noteId"
498
+ ]
499
+ },
500
+ {
501
+ "type": "object",
502
+ "properties": {
503
+ "kind": {
504
+ "const": "story",
505
+ "type": "string"
506
+ },
507
+ "storyType": {
508
+ "const": "textbox",
509
+ "type": "string"
510
+ },
511
+ "textboxId": {
512
+ "type": "string"
513
+ }
514
+ },
515
+ "required": [
516
+ "kind",
517
+ "storyType",
518
+ "textboxId"
519
+ ]
520
+ }
521
+ ],
522
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
183
523
  }
184
524
  },
185
525
  "required": [
@@ -218,6 +558,174 @@
218
558
  },
219
559
  "offset": {
220
560
  "type": "number"
561
+ },
562
+ "story": {
563
+ "oneOf": [
564
+ {
565
+ "type": "object",
566
+ "properties": {
567
+ "kind": {
568
+ "const": "story",
569
+ "type": "string"
570
+ },
571
+ "storyType": {
572
+ "const": "body",
573
+ "type": "string"
574
+ }
575
+ },
576
+ "required": [
577
+ "kind",
578
+ "storyType"
579
+ ]
580
+ },
581
+ {
582
+ "type": "object",
583
+ "properties": {
584
+ "kind": {
585
+ "const": "story",
586
+ "type": "string"
587
+ },
588
+ "storyType": {
589
+ "const": "headerFooterSlot",
590
+ "type": "string"
591
+ },
592
+ "section": {
593
+ "type": "object",
594
+ "properties": {
595
+ "kind": {
596
+ "const": "section",
597
+ "type": "string"
598
+ },
599
+ "sectionId": {
600
+ "type": "string"
601
+ }
602
+ },
603
+ "required": [
604
+ "kind",
605
+ "sectionId"
606
+ ]
607
+ },
608
+ "headerFooterKind": {
609
+ "enum": [
610
+ "header",
611
+ "footer"
612
+ ]
613
+ },
614
+ "variant": {
615
+ "enum": [
616
+ "default",
617
+ "first",
618
+ "even"
619
+ ]
620
+ },
621
+ "resolution": {
622
+ "enum": [
623
+ "effective",
624
+ "explicit"
625
+ ]
626
+ },
627
+ "onWrite": {
628
+ "enum": [
629
+ "materializeIfInherited",
630
+ "editResolvedPart",
631
+ "error"
632
+ ]
633
+ }
634
+ },
635
+ "required": [
636
+ "kind",
637
+ "storyType",
638
+ "section",
639
+ "headerFooterKind",
640
+ "variant"
641
+ ]
642
+ },
643
+ {
644
+ "type": "object",
645
+ "properties": {
646
+ "kind": {
647
+ "const": "story",
648
+ "type": "string"
649
+ },
650
+ "storyType": {
651
+ "const": "headerFooterPart",
652
+ "type": "string"
653
+ },
654
+ "refId": {
655
+ "type": "string"
656
+ }
657
+ },
658
+ "required": [
659
+ "kind",
660
+ "storyType",
661
+ "refId"
662
+ ]
663
+ },
664
+ {
665
+ "type": "object",
666
+ "properties": {
667
+ "kind": {
668
+ "const": "story",
669
+ "type": "string"
670
+ },
671
+ "storyType": {
672
+ "const": "footnote",
673
+ "type": "string"
674
+ },
675
+ "noteId": {
676
+ "type": "string"
677
+ }
678
+ },
679
+ "required": [
680
+ "kind",
681
+ "storyType",
682
+ "noteId"
683
+ ]
684
+ },
685
+ {
686
+ "type": "object",
687
+ "properties": {
688
+ "kind": {
689
+ "const": "story",
690
+ "type": "string"
691
+ },
692
+ "storyType": {
693
+ "const": "endnote",
694
+ "type": "string"
695
+ },
696
+ "noteId": {
697
+ "type": "string"
698
+ }
699
+ },
700
+ "required": [
701
+ "kind",
702
+ "storyType",
703
+ "noteId"
704
+ ]
705
+ },
706
+ {
707
+ "type": "object",
708
+ "properties": {
709
+ "kind": {
710
+ "const": "story",
711
+ "type": "string"
712
+ },
713
+ "storyType": {
714
+ "const": "textbox",
715
+ "type": "string"
716
+ },
717
+ "textboxId": {
718
+ "type": "string"
719
+ }
720
+ },
721
+ "required": [
722
+ "kind",
723
+ "storyType",
724
+ "textboxId"
725
+ ]
726
+ }
727
+ ],
728
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
221
729
  }
222
730
  },
223
731
  "required": [
@@ -252,6 +760,174 @@
252
760
  },
253
761
  "nodeId": {
254
762
  "type": "string"
763
+ },
764
+ "story": {
765
+ "oneOf": [
766
+ {
767
+ "type": "object",
768
+ "properties": {
769
+ "kind": {
770
+ "const": "story",
771
+ "type": "string"
772
+ },
773
+ "storyType": {
774
+ "const": "body",
775
+ "type": "string"
776
+ }
777
+ },
778
+ "required": [
779
+ "kind",
780
+ "storyType"
781
+ ]
782
+ },
783
+ {
784
+ "type": "object",
785
+ "properties": {
786
+ "kind": {
787
+ "const": "story",
788
+ "type": "string"
789
+ },
790
+ "storyType": {
791
+ "const": "headerFooterSlot",
792
+ "type": "string"
793
+ },
794
+ "section": {
795
+ "type": "object",
796
+ "properties": {
797
+ "kind": {
798
+ "const": "section",
799
+ "type": "string"
800
+ },
801
+ "sectionId": {
802
+ "type": "string"
803
+ }
804
+ },
805
+ "required": [
806
+ "kind",
807
+ "sectionId"
808
+ ]
809
+ },
810
+ "headerFooterKind": {
811
+ "enum": [
812
+ "header",
813
+ "footer"
814
+ ]
815
+ },
816
+ "variant": {
817
+ "enum": [
818
+ "default",
819
+ "first",
820
+ "even"
821
+ ]
822
+ },
823
+ "resolution": {
824
+ "enum": [
825
+ "effective",
826
+ "explicit"
827
+ ]
828
+ },
829
+ "onWrite": {
830
+ "enum": [
831
+ "materializeIfInherited",
832
+ "editResolvedPart",
833
+ "error"
834
+ ]
835
+ }
836
+ },
837
+ "required": [
838
+ "kind",
839
+ "storyType",
840
+ "section",
841
+ "headerFooterKind",
842
+ "variant"
843
+ ]
844
+ },
845
+ {
846
+ "type": "object",
847
+ "properties": {
848
+ "kind": {
849
+ "const": "story",
850
+ "type": "string"
851
+ },
852
+ "storyType": {
853
+ "const": "headerFooterPart",
854
+ "type": "string"
855
+ },
856
+ "refId": {
857
+ "type": "string"
858
+ }
859
+ },
860
+ "required": [
861
+ "kind",
862
+ "storyType",
863
+ "refId"
864
+ ]
865
+ },
866
+ {
867
+ "type": "object",
868
+ "properties": {
869
+ "kind": {
870
+ "const": "story",
871
+ "type": "string"
872
+ },
873
+ "storyType": {
874
+ "const": "footnote",
875
+ "type": "string"
876
+ },
877
+ "noteId": {
878
+ "type": "string"
879
+ }
880
+ },
881
+ "required": [
882
+ "kind",
883
+ "storyType",
884
+ "noteId"
885
+ ]
886
+ },
887
+ {
888
+ "type": "object",
889
+ "properties": {
890
+ "kind": {
891
+ "const": "story",
892
+ "type": "string"
893
+ },
894
+ "storyType": {
895
+ "const": "endnote",
896
+ "type": "string"
897
+ },
898
+ "noteId": {
899
+ "type": "string"
900
+ }
901
+ },
902
+ "required": [
903
+ "kind",
904
+ "storyType",
905
+ "noteId"
906
+ ]
907
+ },
908
+ {
909
+ "type": "object",
910
+ "properties": {
911
+ "kind": {
912
+ "const": "story",
913
+ "type": "string"
914
+ },
915
+ "storyType": {
916
+ "const": "textbox",
917
+ "type": "string"
918
+ },
919
+ "textboxId": {
920
+ "type": "string"
921
+ }
922
+ },
923
+ "required": [
924
+ "kind",
925
+ "storyType",
926
+ "textboxId"
927
+ ]
928
+ }
929
+ ],
930
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
255
931
  }
256
932
  },
257
933
  "required": [
@@ -275,65 +951,977 @@
275
951
  }
276
952
  ],
277
953
  "description": "A point in the document. Use {kind:'text', blockId, offset} for character positions or {kind:'nodeEdge', node:{kind:'block', nodeType, nodeId}, edge:'before'|'after'} for block boundaries."
278
- }
279
- },
280
- "required": [
281
- "kind",
282
- "start",
283
- "end"
284
- ]
285
- },
286
- {
287
- "type": "object",
288
- "properties": {
289
- "kind": {
290
- "const": "block",
291
- "type": "string"
292
- },
293
- "nodeType": {
294
- "enum": [
295
- "paragraph",
296
- "heading",
297
- "listItem",
298
- "table",
299
- "tableRow",
300
- "tableCell",
301
- "tableOfContents",
302
- "image",
303
- "sdt"
304
- ]
305
- },
306
- "nodeId": {
307
- "type": "string"
308
- }
309
- },
310
- "required": [
311
- "kind",
312
- "nodeType",
313
- "nodeId"
314
- ]
315
- },
316
- {
317
- "type": "object",
318
- "properties": {
319
- "kind": {
320
- "const": "selection",
321
- "type": "string"
322
954
  },
323
- "start": {
955
+ "story": {
324
956
  "oneOf": [
325
957
  {
326
958
  "type": "object",
327
959
  "properties": {
328
960
  "kind": {
329
- "const": "text",
961
+ "const": "story",
330
962
  "type": "string"
331
963
  },
332
- "blockId": {
964
+ "storyType": {
965
+ "const": "body",
966
+ "type": "string"
967
+ }
968
+ },
969
+ "required": [
970
+ "kind",
971
+ "storyType"
972
+ ]
973
+ },
974
+ {
975
+ "type": "object",
976
+ "properties": {
977
+ "kind": {
978
+ "const": "story",
979
+ "type": "string"
980
+ },
981
+ "storyType": {
982
+ "const": "headerFooterSlot",
983
+ "type": "string"
984
+ },
985
+ "section": {
986
+ "type": "object",
987
+ "properties": {
988
+ "kind": {
989
+ "const": "section",
990
+ "type": "string"
991
+ },
992
+ "sectionId": {
993
+ "type": "string"
994
+ }
995
+ },
996
+ "required": [
997
+ "kind",
998
+ "sectionId"
999
+ ]
1000
+ },
1001
+ "headerFooterKind": {
1002
+ "enum": [
1003
+ "header",
1004
+ "footer"
1005
+ ]
1006
+ },
1007
+ "variant": {
1008
+ "enum": [
1009
+ "default",
1010
+ "first",
1011
+ "even"
1012
+ ]
1013
+ },
1014
+ "resolution": {
1015
+ "enum": [
1016
+ "effective",
1017
+ "explicit"
1018
+ ]
1019
+ },
1020
+ "onWrite": {
1021
+ "enum": [
1022
+ "materializeIfInherited",
1023
+ "editResolvedPart",
1024
+ "error"
1025
+ ]
1026
+ }
1027
+ },
1028
+ "required": [
1029
+ "kind",
1030
+ "storyType",
1031
+ "section",
1032
+ "headerFooterKind",
1033
+ "variant"
1034
+ ]
1035
+ },
1036
+ {
1037
+ "type": "object",
1038
+ "properties": {
1039
+ "kind": {
1040
+ "const": "story",
1041
+ "type": "string"
1042
+ },
1043
+ "storyType": {
1044
+ "const": "headerFooterPart",
1045
+ "type": "string"
1046
+ },
1047
+ "refId": {
1048
+ "type": "string"
1049
+ }
1050
+ },
1051
+ "required": [
1052
+ "kind",
1053
+ "storyType",
1054
+ "refId"
1055
+ ]
1056
+ },
1057
+ {
1058
+ "type": "object",
1059
+ "properties": {
1060
+ "kind": {
1061
+ "const": "story",
1062
+ "type": "string"
1063
+ },
1064
+ "storyType": {
1065
+ "const": "footnote",
1066
+ "type": "string"
1067
+ },
1068
+ "noteId": {
1069
+ "type": "string"
1070
+ }
1071
+ },
1072
+ "required": [
1073
+ "kind",
1074
+ "storyType",
1075
+ "noteId"
1076
+ ]
1077
+ },
1078
+ {
1079
+ "type": "object",
1080
+ "properties": {
1081
+ "kind": {
1082
+ "const": "story",
1083
+ "type": "string"
1084
+ },
1085
+ "storyType": {
1086
+ "const": "endnote",
1087
+ "type": "string"
1088
+ },
1089
+ "noteId": {
1090
+ "type": "string"
1091
+ }
1092
+ },
1093
+ "required": [
1094
+ "kind",
1095
+ "storyType",
1096
+ "noteId"
1097
+ ]
1098
+ },
1099
+ {
1100
+ "type": "object",
1101
+ "properties": {
1102
+ "kind": {
1103
+ "const": "story",
1104
+ "type": "string"
1105
+ },
1106
+ "storyType": {
1107
+ "const": "textbox",
1108
+ "type": "string"
1109
+ },
1110
+ "textboxId": {
1111
+ "type": "string"
1112
+ }
1113
+ },
1114
+ "required": [
1115
+ "kind",
1116
+ "storyType",
1117
+ "textboxId"
1118
+ ]
1119
+ }
1120
+ ],
1121
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
1122
+ }
1123
+ },
1124
+ "required": [
1125
+ "kind",
1126
+ "start",
1127
+ "end"
1128
+ ]
1129
+ },
1130
+ {
1131
+ "type": "object",
1132
+ "properties": {
1133
+ "kind": {
1134
+ "const": "block",
1135
+ "type": "string"
1136
+ },
1137
+ "nodeType": {
1138
+ "enum": [
1139
+ "paragraph",
1140
+ "heading",
1141
+ "listItem",
1142
+ "table",
1143
+ "tableRow",
1144
+ "tableCell",
1145
+ "tableOfContents",
1146
+ "image",
1147
+ "sdt"
1148
+ ]
1149
+ },
1150
+ "nodeId": {
1151
+ "type": "string"
1152
+ },
1153
+ "story": {
1154
+ "oneOf": [
1155
+ {
1156
+ "type": "object",
1157
+ "properties": {
1158
+ "kind": {
1159
+ "const": "story",
1160
+ "type": "string"
1161
+ },
1162
+ "storyType": {
1163
+ "const": "body",
1164
+ "type": "string"
1165
+ }
1166
+ },
1167
+ "required": [
1168
+ "kind",
1169
+ "storyType"
1170
+ ]
1171
+ },
1172
+ {
1173
+ "type": "object",
1174
+ "properties": {
1175
+ "kind": {
1176
+ "const": "story",
1177
+ "type": "string"
1178
+ },
1179
+ "storyType": {
1180
+ "const": "headerFooterSlot",
1181
+ "type": "string"
1182
+ },
1183
+ "section": {
1184
+ "type": "object",
1185
+ "properties": {
1186
+ "kind": {
1187
+ "const": "section",
1188
+ "type": "string"
1189
+ },
1190
+ "sectionId": {
1191
+ "type": "string"
1192
+ }
1193
+ },
1194
+ "required": [
1195
+ "kind",
1196
+ "sectionId"
1197
+ ]
1198
+ },
1199
+ "headerFooterKind": {
1200
+ "enum": [
1201
+ "header",
1202
+ "footer"
1203
+ ]
1204
+ },
1205
+ "variant": {
1206
+ "enum": [
1207
+ "default",
1208
+ "first",
1209
+ "even"
1210
+ ]
1211
+ },
1212
+ "resolution": {
1213
+ "enum": [
1214
+ "effective",
1215
+ "explicit"
1216
+ ]
1217
+ },
1218
+ "onWrite": {
1219
+ "enum": [
1220
+ "materializeIfInherited",
1221
+ "editResolvedPart",
1222
+ "error"
1223
+ ]
1224
+ }
1225
+ },
1226
+ "required": [
1227
+ "kind",
1228
+ "storyType",
1229
+ "section",
1230
+ "headerFooterKind",
1231
+ "variant"
1232
+ ]
1233
+ },
1234
+ {
1235
+ "type": "object",
1236
+ "properties": {
1237
+ "kind": {
1238
+ "const": "story",
1239
+ "type": "string"
1240
+ },
1241
+ "storyType": {
1242
+ "const": "headerFooterPart",
1243
+ "type": "string"
1244
+ },
1245
+ "refId": {
1246
+ "type": "string"
1247
+ }
1248
+ },
1249
+ "required": [
1250
+ "kind",
1251
+ "storyType",
1252
+ "refId"
1253
+ ]
1254
+ },
1255
+ {
1256
+ "type": "object",
1257
+ "properties": {
1258
+ "kind": {
1259
+ "const": "story",
1260
+ "type": "string"
1261
+ },
1262
+ "storyType": {
1263
+ "const": "footnote",
1264
+ "type": "string"
1265
+ },
1266
+ "noteId": {
1267
+ "type": "string"
1268
+ }
1269
+ },
1270
+ "required": [
1271
+ "kind",
1272
+ "storyType",
1273
+ "noteId"
1274
+ ]
1275
+ },
1276
+ {
1277
+ "type": "object",
1278
+ "properties": {
1279
+ "kind": {
1280
+ "const": "story",
1281
+ "type": "string"
1282
+ },
1283
+ "storyType": {
1284
+ "const": "endnote",
1285
+ "type": "string"
1286
+ },
1287
+ "noteId": {
1288
+ "type": "string"
1289
+ }
1290
+ },
1291
+ "required": [
1292
+ "kind",
1293
+ "storyType",
1294
+ "noteId"
1295
+ ]
1296
+ },
1297
+ {
1298
+ "type": "object",
1299
+ "properties": {
1300
+ "kind": {
1301
+ "const": "story",
1302
+ "type": "string"
1303
+ },
1304
+ "storyType": {
1305
+ "const": "textbox",
1306
+ "type": "string"
1307
+ },
1308
+ "textboxId": {
1309
+ "type": "string"
1310
+ }
1311
+ },
1312
+ "required": [
1313
+ "kind",
1314
+ "storyType",
1315
+ "textboxId"
1316
+ ]
1317
+ }
1318
+ ],
1319
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
1320
+ }
1321
+ },
1322
+ "required": [
1323
+ "kind",
1324
+ "nodeType",
1325
+ "nodeId"
1326
+ ]
1327
+ },
1328
+ {
1329
+ "type": "object",
1330
+ "properties": {
1331
+ "kind": {
1332
+ "const": "selection",
1333
+ "type": "string"
1334
+ },
1335
+ "start": {
1336
+ "oneOf": [
1337
+ {
1338
+ "type": "object",
1339
+ "properties": {
1340
+ "kind": {
1341
+ "const": "text",
1342
+ "type": "string"
1343
+ },
1344
+ "blockId": {
1345
+ "type": "string"
1346
+ },
1347
+ "offset": {
1348
+ "type": "number"
1349
+ },
1350
+ "story": {
1351
+ "oneOf": [
1352
+ {
1353
+ "type": "object",
1354
+ "properties": {
1355
+ "kind": {
1356
+ "const": "story",
1357
+ "type": "string"
1358
+ },
1359
+ "storyType": {
1360
+ "const": "body",
1361
+ "type": "string"
1362
+ }
1363
+ },
1364
+ "required": [
1365
+ "kind",
1366
+ "storyType"
1367
+ ]
1368
+ },
1369
+ {
1370
+ "type": "object",
1371
+ "properties": {
1372
+ "kind": {
1373
+ "const": "story",
1374
+ "type": "string"
1375
+ },
1376
+ "storyType": {
1377
+ "const": "headerFooterSlot",
1378
+ "type": "string"
1379
+ },
1380
+ "section": {
1381
+ "type": "object",
1382
+ "properties": {
1383
+ "kind": {
1384
+ "const": "section",
1385
+ "type": "string"
1386
+ },
1387
+ "sectionId": {
1388
+ "type": "string"
1389
+ }
1390
+ },
1391
+ "required": [
1392
+ "kind",
1393
+ "sectionId"
1394
+ ]
1395
+ },
1396
+ "headerFooterKind": {
1397
+ "enum": [
1398
+ "header",
1399
+ "footer"
1400
+ ]
1401
+ },
1402
+ "variant": {
1403
+ "enum": [
1404
+ "default",
1405
+ "first",
1406
+ "even"
1407
+ ]
1408
+ },
1409
+ "resolution": {
1410
+ "enum": [
1411
+ "effective",
1412
+ "explicit"
1413
+ ]
1414
+ },
1415
+ "onWrite": {
1416
+ "enum": [
1417
+ "materializeIfInherited",
1418
+ "editResolvedPart",
1419
+ "error"
1420
+ ]
1421
+ }
1422
+ },
1423
+ "required": [
1424
+ "kind",
1425
+ "storyType",
1426
+ "section",
1427
+ "headerFooterKind",
1428
+ "variant"
1429
+ ]
1430
+ },
1431
+ {
1432
+ "type": "object",
1433
+ "properties": {
1434
+ "kind": {
1435
+ "const": "story",
1436
+ "type": "string"
1437
+ },
1438
+ "storyType": {
1439
+ "const": "headerFooterPart",
1440
+ "type": "string"
1441
+ },
1442
+ "refId": {
1443
+ "type": "string"
1444
+ }
1445
+ },
1446
+ "required": [
1447
+ "kind",
1448
+ "storyType",
1449
+ "refId"
1450
+ ]
1451
+ },
1452
+ {
1453
+ "type": "object",
1454
+ "properties": {
1455
+ "kind": {
1456
+ "const": "story",
1457
+ "type": "string"
1458
+ },
1459
+ "storyType": {
1460
+ "const": "footnote",
1461
+ "type": "string"
1462
+ },
1463
+ "noteId": {
1464
+ "type": "string"
1465
+ }
1466
+ },
1467
+ "required": [
1468
+ "kind",
1469
+ "storyType",
1470
+ "noteId"
1471
+ ]
1472
+ },
1473
+ {
1474
+ "type": "object",
1475
+ "properties": {
1476
+ "kind": {
1477
+ "const": "story",
1478
+ "type": "string"
1479
+ },
1480
+ "storyType": {
1481
+ "const": "endnote",
1482
+ "type": "string"
1483
+ },
1484
+ "noteId": {
1485
+ "type": "string"
1486
+ }
1487
+ },
1488
+ "required": [
1489
+ "kind",
1490
+ "storyType",
1491
+ "noteId"
1492
+ ]
1493
+ },
1494
+ {
1495
+ "type": "object",
1496
+ "properties": {
1497
+ "kind": {
1498
+ "const": "story",
1499
+ "type": "string"
1500
+ },
1501
+ "storyType": {
1502
+ "const": "textbox",
1503
+ "type": "string"
1504
+ },
1505
+ "textboxId": {
1506
+ "type": "string"
1507
+ }
1508
+ },
1509
+ "required": [
1510
+ "kind",
1511
+ "storyType",
1512
+ "textboxId"
1513
+ ]
1514
+ }
1515
+ ],
1516
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
1517
+ }
1518
+ },
1519
+ "required": [
1520
+ "kind",
1521
+ "blockId",
1522
+ "offset"
1523
+ ]
1524
+ },
1525
+ {
1526
+ "type": "object",
1527
+ "properties": {
1528
+ "kind": {
1529
+ "const": "nodeEdge",
1530
+ "type": "string"
1531
+ },
1532
+ "node": {
1533
+ "type": "object",
1534
+ "properties": {
1535
+ "kind": {
1536
+ "const": "block",
1537
+ "type": "string"
1538
+ },
1539
+ "nodeType": {
1540
+ "enum": [
1541
+ "paragraph",
1542
+ "heading",
1543
+ "table",
1544
+ "tableOfContents",
1545
+ "sdt",
1546
+ "image"
1547
+ ]
1548
+ },
1549
+ "nodeId": {
1550
+ "type": "string"
1551
+ },
1552
+ "story": {
1553
+ "oneOf": [
1554
+ {
1555
+ "type": "object",
1556
+ "properties": {
1557
+ "kind": {
1558
+ "const": "story",
1559
+ "type": "string"
1560
+ },
1561
+ "storyType": {
1562
+ "const": "body",
1563
+ "type": "string"
1564
+ }
1565
+ },
1566
+ "required": [
1567
+ "kind",
1568
+ "storyType"
1569
+ ]
1570
+ },
1571
+ {
1572
+ "type": "object",
1573
+ "properties": {
1574
+ "kind": {
1575
+ "const": "story",
1576
+ "type": "string"
1577
+ },
1578
+ "storyType": {
1579
+ "const": "headerFooterSlot",
1580
+ "type": "string"
1581
+ },
1582
+ "section": {
1583
+ "type": "object",
1584
+ "properties": {
1585
+ "kind": {
1586
+ "const": "section",
1587
+ "type": "string"
1588
+ },
1589
+ "sectionId": {
1590
+ "type": "string"
1591
+ }
1592
+ },
1593
+ "required": [
1594
+ "kind",
1595
+ "sectionId"
1596
+ ]
1597
+ },
1598
+ "headerFooterKind": {
1599
+ "enum": [
1600
+ "header",
1601
+ "footer"
1602
+ ]
1603
+ },
1604
+ "variant": {
1605
+ "enum": [
1606
+ "default",
1607
+ "first",
1608
+ "even"
1609
+ ]
1610
+ },
1611
+ "resolution": {
1612
+ "enum": [
1613
+ "effective",
1614
+ "explicit"
1615
+ ]
1616
+ },
1617
+ "onWrite": {
1618
+ "enum": [
1619
+ "materializeIfInherited",
1620
+ "editResolvedPart",
1621
+ "error"
1622
+ ]
1623
+ }
1624
+ },
1625
+ "required": [
1626
+ "kind",
1627
+ "storyType",
1628
+ "section",
1629
+ "headerFooterKind",
1630
+ "variant"
1631
+ ]
1632
+ },
1633
+ {
1634
+ "type": "object",
1635
+ "properties": {
1636
+ "kind": {
1637
+ "const": "story",
1638
+ "type": "string"
1639
+ },
1640
+ "storyType": {
1641
+ "const": "headerFooterPart",
1642
+ "type": "string"
1643
+ },
1644
+ "refId": {
1645
+ "type": "string"
1646
+ }
1647
+ },
1648
+ "required": [
1649
+ "kind",
1650
+ "storyType",
1651
+ "refId"
1652
+ ]
1653
+ },
1654
+ {
1655
+ "type": "object",
1656
+ "properties": {
1657
+ "kind": {
1658
+ "const": "story",
1659
+ "type": "string"
1660
+ },
1661
+ "storyType": {
1662
+ "const": "footnote",
1663
+ "type": "string"
1664
+ },
1665
+ "noteId": {
1666
+ "type": "string"
1667
+ }
1668
+ },
1669
+ "required": [
1670
+ "kind",
1671
+ "storyType",
1672
+ "noteId"
1673
+ ]
1674
+ },
1675
+ {
1676
+ "type": "object",
1677
+ "properties": {
1678
+ "kind": {
1679
+ "const": "story",
1680
+ "type": "string"
1681
+ },
1682
+ "storyType": {
1683
+ "const": "endnote",
1684
+ "type": "string"
1685
+ },
1686
+ "noteId": {
1687
+ "type": "string"
1688
+ }
1689
+ },
1690
+ "required": [
1691
+ "kind",
1692
+ "storyType",
1693
+ "noteId"
1694
+ ]
1695
+ },
1696
+ {
1697
+ "type": "object",
1698
+ "properties": {
1699
+ "kind": {
1700
+ "const": "story",
1701
+ "type": "string"
1702
+ },
1703
+ "storyType": {
1704
+ "const": "textbox",
1705
+ "type": "string"
1706
+ },
1707
+ "textboxId": {
1708
+ "type": "string"
1709
+ }
1710
+ },
1711
+ "required": [
1712
+ "kind",
1713
+ "storyType",
1714
+ "textboxId"
1715
+ ]
1716
+ }
1717
+ ],
1718
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
1719
+ }
1720
+ },
1721
+ "required": [
1722
+ "kind",
1723
+ "nodeType",
1724
+ "nodeId"
1725
+ ]
1726
+ },
1727
+ "edge": {
1728
+ "enum": [
1729
+ "before",
1730
+ "after"
1731
+ ]
1732
+ }
1733
+ },
1734
+ "required": [
1735
+ "kind",
1736
+ "node",
1737
+ "edge"
1738
+ ]
1739
+ }
1740
+ ],
1741
+ "description": "A point in the document. Use {kind:'text', blockId, offset} for character positions or {kind:'nodeEdge', node:{kind:'block', nodeType, nodeId}, edge:'before'|'after'} for block boundaries."
1742
+ },
1743
+ "end": {
1744
+ "oneOf": [
1745
+ {
1746
+ "type": "object",
1747
+ "properties": {
1748
+ "kind": {
1749
+ "const": "text",
1750
+ "type": "string"
1751
+ },
1752
+ "blockId": {
333
1753
  "type": "string"
334
1754
  },
335
1755
  "offset": {
336
1756
  "type": "number"
1757
+ },
1758
+ "story": {
1759
+ "oneOf": [
1760
+ {
1761
+ "type": "object",
1762
+ "properties": {
1763
+ "kind": {
1764
+ "const": "story",
1765
+ "type": "string"
1766
+ },
1767
+ "storyType": {
1768
+ "const": "body",
1769
+ "type": "string"
1770
+ }
1771
+ },
1772
+ "required": [
1773
+ "kind",
1774
+ "storyType"
1775
+ ]
1776
+ },
1777
+ {
1778
+ "type": "object",
1779
+ "properties": {
1780
+ "kind": {
1781
+ "const": "story",
1782
+ "type": "string"
1783
+ },
1784
+ "storyType": {
1785
+ "const": "headerFooterSlot",
1786
+ "type": "string"
1787
+ },
1788
+ "section": {
1789
+ "type": "object",
1790
+ "properties": {
1791
+ "kind": {
1792
+ "const": "section",
1793
+ "type": "string"
1794
+ },
1795
+ "sectionId": {
1796
+ "type": "string"
1797
+ }
1798
+ },
1799
+ "required": [
1800
+ "kind",
1801
+ "sectionId"
1802
+ ]
1803
+ },
1804
+ "headerFooterKind": {
1805
+ "enum": [
1806
+ "header",
1807
+ "footer"
1808
+ ]
1809
+ },
1810
+ "variant": {
1811
+ "enum": [
1812
+ "default",
1813
+ "first",
1814
+ "even"
1815
+ ]
1816
+ },
1817
+ "resolution": {
1818
+ "enum": [
1819
+ "effective",
1820
+ "explicit"
1821
+ ]
1822
+ },
1823
+ "onWrite": {
1824
+ "enum": [
1825
+ "materializeIfInherited",
1826
+ "editResolvedPart",
1827
+ "error"
1828
+ ]
1829
+ }
1830
+ },
1831
+ "required": [
1832
+ "kind",
1833
+ "storyType",
1834
+ "section",
1835
+ "headerFooterKind",
1836
+ "variant"
1837
+ ]
1838
+ },
1839
+ {
1840
+ "type": "object",
1841
+ "properties": {
1842
+ "kind": {
1843
+ "const": "story",
1844
+ "type": "string"
1845
+ },
1846
+ "storyType": {
1847
+ "const": "headerFooterPart",
1848
+ "type": "string"
1849
+ },
1850
+ "refId": {
1851
+ "type": "string"
1852
+ }
1853
+ },
1854
+ "required": [
1855
+ "kind",
1856
+ "storyType",
1857
+ "refId"
1858
+ ]
1859
+ },
1860
+ {
1861
+ "type": "object",
1862
+ "properties": {
1863
+ "kind": {
1864
+ "const": "story",
1865
+ "type": "string"
1866
+ },
1867
+ "storyType": {
1868
+ "const": "footnote",
1869
+ "type": "string"
1870
+ },
1871
+ "noteId": {
1872
+ "type": "string"
1873
+ }
1874
+ },
1875
+ "required": [
1876
+ "kind",
1877
+ "storyType",
1878
+ "noteId"
1879
+ ]
1880
+ },
1881
+ {
1882
+ "type": "object",
1883
+ "properties": {
1884
+ "kind": {
1885
+ "const": "story",
1886
+ "type": "string"
1887
+ },
1888
+ "storyType": {
1889
+ "const": "endnote",
1890
+ "type": "string"
1891
+ },
1892
+ "noteId": {
1893
+ "type": "string"
1894
+ }
1895
+ },
1896
+ "required": [
1897
+ "kind",
1898
+ "storyType",
1899
+ "noteId"
1900
+ ]
1901
+ },
1902
+ {
1903
+ "type": "object",
1904
+ "properties": {
1905
+ "kind": {
1906
+ "const": "story",
1907
+ "type": "string"
1908
+ },
1909
+ "storyType": {
1910
+ "const": "textbox",
1911
+ "type": "string"
1912
+ },
1913
+ "textboxId": {
1914
+ "type": "string"
1915
+ }
1916
+ },
1917
+ "required": [
1918
+ "kind",
1919
+ "storyType",
1920
+ "textboxId"
1921
+ ]
1922
+ }
1923
+ ],
1924
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
337
1925
  }
338
1926
  },
339
1927
  "required": [
@@ -368,6 +1956,174 @@
368
1956
  },
369
1957
  "nodeId": {
370
1958
  "type": "string"
1959
+ },
1960
+ "story": {
1961
+ "oneOf": [
1962
+ {
1963
+ "type": "object",
1964
+ "properties": {
1965
+ "kind": {
1966
+ "const": "story",
1967
+ "type": "string"
1968
+ },
1969
+ "storyType": {
1970
+ "const": "body",
1971
+ "type": "string"
1972
+ }
1973
+ },
1974
+ "required": [
1975
+ "kind",
1976
+ "storyType"
1977
+ ]
1978
+ },
1979
+ {
1980
+ "type": "object",
1981
+ "properties": {
1982
+ "kind": {
1983
+ "const": "story",
1984
+ "type": "string"
1985
+ },
1986
+ "storyType": {
1987
+ "const": "headerFooterSlot",
1988
+ "type": "string"
1989
+ },
1990
+ "section": {
1991
+ "type": "object",
1992
+ "properties": {
1993
+ "kind": {
1994
+ "const": "section",
1995
+ "type": "string"
1996
+ },
1997
+ "sectionId": {
1998
+ "type": "string"
1999
+ }
2000
+ },
2001
+ "required": [
2002
+ "kind",
2003
+ "sectionId"
2004
+ ]
2005
+ },
2006
+ "headerFooterKind": {
2007
+ "enum": [
2008
+ "header",
2009
+ "footer"
2010
+ ]
2011
+ },
2012
+ "variant": {
2013
+ "enum": [
2014
+ "default",
2015
+ "first",
2016
+ "even"
2017
+ ]
2018
+ },
2019
+ "resolution": {
2020
+ "enum": [
2021
+ "effective",
2022
+ "explicit"
2023
+ ]
2024
+ },
2025
+ "onWrite": {
2026
+ "enum": [
2027
+ "materializeIfInherited",
2028
+ "editResolvedPart",
2029
+ "error"
2030
+ ]
2031
+ }
2032
+ },
2033
+ "required": [
2034
+ "kind",
2035
+ "storyType",
2036
+ "section",
2037
+ "headerFooterKind",
2038
+ "variant"
2039
+ ]
2040
+ },
2041
+ {
2042
+ "type": "object",
2043
+ "properties": {
2044
+ "kind": {
2045
+ "const": "story",
2046
+ "type": "string"
2047
+ },
2048
+ "storyType": {
2049
+ "const": "headerFooterPart",
2050
+ "type": "string"
2051
+ },
2052
+ "refId": {
2053
+ "type": "string"
2054
+ }
2055
+ },
2056
+ "required": [
2057
+ "kind",
2058
+ "storyType",
2059
+ "refId"
2060
+ ]
2061
+ },
2062
+ {
2063
+ "type": "object",
2064
+ "properties": {
2065
+ "kind": {
2066
+ "const": "story",
2067
+ "type": "string"
2068
+ },
2069
+ "storyType": {
2070
+ "const": "footnote",
2071
+ "type": "string"
2072
+ },
2073
+ "noteId": {
2074
+ "type": "string"
2075
+ }
2076
+ },
2077
+ "required": [
2078
+ "kind",
2079
+ "storyType",
2080
+ "noteId"
2081
+ ]
2082
+ },
2083
+ {
2084
+ "type": "object",
2085
+ "properties": {
2086
+ "kind": {
2087
+ "const": "story",
2088
+ "type": "string"
2089
+ },
2090
+ "storyType": {
2091
+ "const": "endnote",
2092
+ "type": "string"
2093
+ },
2094
+ "noteId": {
2095
+ "type": "string"
2096
+ }
2097
+ },
2098
+ "required": [
2099
+ "kind",
2100
+ "storyType",
2101
+ "noteId"
2102
+ ]
2103
+ },
2104
+ {
2105
+ "type": "object",
2106
+ "properties": {
2107
+ "kind": {
2108
+ "const": "story",
2109
+ "type": "string"
2110
+ },
2111
+ "storyType": {
2112
+ "const": "textbox",
2113
+ "type": "string"
2114
+ },
2115
+ "textboxId": {
2116
+ "type": "string"
2117
+ }
2118
+ },
2119
+ "required": [
2120
+ "kind",
2121
+ "storyType",
2122
+ "textboxId"
2123
+ ]
2124
+ }
2125
+ ],
2126
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
371
2127
  }
372
2128
  },
373
2129
  "required": [
@@ -392,96 +2148,378 @@
392
2148
  ],
393
2149
  "description": "A point in the document. Use {kind:'text', blockId, offset} for character positions or {kind:'nodeEdge', node:{kind:'block', nodeType, nodeId}, edge:'before'|'after'} for block boundaries."
394
2150
  },
395
- "end": {
2151
+ "story": {
396
2152
  "oneOf": [
397
2153
  {
398
2154
  "type": "object",
399
2155
  "properties": {
400
2156
  "kind": {
401
- "const": "text",
2157
+ "const": "story",
402
2158
  "type": "string"
403
2159
  },
404
- "blockId": {
2160
+ "storyType": {
2161
+ "const": "body",
405
2162
  "type": "string"
406
- },
407
- "offset": {
408
- "type": "number"
409
2163
  }
410
2164
  },
411
2165
  "required": [
412
2166
  "kind",
413
- "blockId",
414
- "offset"
2167
+ "storyType"
415
2168
  ]
416
2169
  },
417
2170
  {
418
2171
  "type": "object",
419
2172
  "properties": {
420
2173
  "kind": {
421
- "const": "nodeEdge",
2174
+ "const": "story",
422
2175
  "type": "string"
423
2176
  },
424
- "node": {
2177
+ "storyType": {
2178
+ "const": "headerFooterSlot",
2179
+ "type": "string"
2180
+ },
2181
+ "section": {
425
2182
  "type": "object",
426
2183
  "properties": {
427
2184
  "kind": {
428
- "const": "block",
2185
+ "const": "section",
429
2186
  "type": "string"
430
2187
  },
431
- "nodeType": {
432
- "enum": [
433
- "paragraph",
434
- "heading",
435
- "table",
436
- "tableOfContents",
437
- "sdt",
438
- "image"
439
- ]
440
- },
441
- "nodeId": {
2188
+ "sectionId": {
442
2189
  "type": "string"
443
2190
  }
444
2191
  },
445
2192
  "required": [
446
2193
  "kind",
447
- "nodeType",
448
- "nodeId"
2194
+ "sectionId"
449
2195
  ]
450
2196
  },
451
- "edge": {
2197
+ "headerFooterKind": {
452
2198
  "enum": [
453
- "before",
454
- "after"
2199
+ "header",
2200
+ "footer"
2201
+ ]
2202
+ },
2203
+ "variant": {
2204
+ "enum": [
2205
+ "default",
2206
+ "first",
2207
+ "even"
2208
+ ]
2209
+ },
2210
+ "resolution": {
2211
+ "enum": [
2212
+ "effective",
2213
+ "explicit"
2214
+ ]
2215
+ },
2216
+ "onWrite": {
2217
+ "enum": [
2218
+ "materializeIfInherited",
2219
+ "editResolvedPart",
2220
+ "error"
455
2221
  ]
456
2222
  }
457
2223
  },
458
2224
  "required": [
459
2225
  "kind",
460
- "node",
461
- "edge"
2226
+ "storyType",
2227
+ "section",
2228
+ "headerFooterKind",
2229
+ "variant"
2230
+ ]
2231
+ },
2232
+ {
2233
+ "type": "object",
2234
+ "properties": {
2235
+ "kind": {
2236
+ "const": "story",
2237
+ "type": "string"
2238
+ },
2239
+ "storyType": {
2240
+ "const": "headerFooterPart",
2241
+ "type": "string"
2242
+ },
2243
+ "refId": {
2244
+ "type": "string"
2245
+ }
2246
+ },
2247
+ "required": [
2248
+ "kind",
2249
+ "storyType",
2250
+ "refId"
2251
+ ]
2252
+ },
2253
+ {
2254
+ "type": "object",
2255
+ "properties": {
2256
+ "kind": {
2257
+ "const": "story",
2258
+ "type": "string"
2259
+ },
2260
+ "storyType": {
2261
+ "const": "footnote",
2262
+ "type": "string"
2263
+ },
2264
+ "noteId": {
2265
+ "type": "string"
2266
+ }
2267
+ },
2268
+ "required": [
2269
+ "kind",
2270
+ "storyType",
2271
+ "noteId"
2272
+ ]
2273
+ },
2274
+ {
2275
+ "type": "object",
2276
+ "properties": {
2277
+ "kind": {
2278
+ "const": "story",
2279
+ "type": "string"
2280
+ },
2281
+ "storyType": {
2282
+ "const": "endnote",
2283
+ "type": "string"
2284
+ },
2285
+ "noteId": {
2286
+ "type": "string"
2287
+ }
2288
+ },
2289
+ "required": [
2290
+ "kind",
2291
+ "storyType",
2292
+ "noteId"
2293
+ ]
2294
+ },
2295
+ {
2296
+ "type": "object",
2297
+ "properties": {
2298
+ "kind": {
2299
+ "const": "story",
2300
+ "type": "string"
2301
+ },
2302
+ "storyType": {
2303
+ "const": "textbox",
2304
+ "type": "string"
2305
+ },
2306
+ "textboxId": {
2307
+ "type": "string"
2308
+ }
2309
+ },
2310
+ "required": [
2311
+ "kind",
2312
+ "storyType",
2313
+ "textboxId"
462
2314
  ]
463
2315
  }
464
- ],
465
- "description": "A point in the document. Use {kind:'text', blockId, offset} for character positions or {kind:'nodeEdge', node:{kind:'block', nodeType, nodeId}, edge:'before'|'after'} for block boundaries."
2316
+ ],
2317
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
2318
+ }
2319
+ },
2320
+ "required": [
2321
+ "kind",
2322
+ "start",
2323
+ "end"
2324
+ ]
2325
+ }
2326
+ ]
2327
+ }
2328
+ ],
2329
+ "description": "Block address for structural insertion: {kind:'block', nodeType:'...', nodeId:'...'}."
2330
+ },
2331
+ {
2332
+ "$ref": "#/$defs/SelectionTarget",
2333
+ "description": "Selection target: {kind:'selection', start:{kind:'text', blockId, offset}, end:{kind:'text', blockId, offset}}. Use 'ref' instead when you have a search result handle."
2334
+ }
2335
+ ],
2336
+ "description": "Block address for structural insertion: {kind:'block', nodeType:'...', nodeId:'...'}."
2337
+ },
2338
+ "in": {
2339
+ "oneOf": [
2340
+ {
2341
+ "oneOf": [
2342
+ {
2343
+ "$ref": "#/$defs/StoryLocator",
2344
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
2345
+ },
2346
+ {
2347
+ "oneOf": [
2348
+ {
2349
+ "type": "object",
2350
+ "properties": {
2351
+ "kind": {
2352
+ "const": "story",
2353
+ "type": "string"
2354
+ },
2355
+ "storyType": {
2356
+ "const": "body",
2357
+ "type": "string"
2358
+ }
2359
+ },
2360
+ "required": [
2361
+ "kind",
2362
+ "storyType"
2363
+ ]
2364
+ },
2365
+ {
2366
+ "type": "object",
2367
+ "properties": {
2368
+ "kind": {
2369
+ "const": "story",
2370
+ "type": "string"
2371
+ },
2372
+ "storyType": {
2373
+ "const": "headerFooterSlot",
2374
+ "type": "string"
2375
+ },
2376
+ "section": {
2377
+ "type": "object",
2378
+ "properties": {
2379
+ "kind": {
2380
+ "const": "section",
2381
+ "type": "string"
2382
+ },
2383
+ "sectionId": {
2384
+ "type": "string"
2385
+ }
2386
+ },
2387
+ "required": [
2388
+ "kind",
2389
+ "sectionId"
2390
+ ]
2391
+ },
2392
+ "headerFooterKind": {
2393
+ "enum": [
2394
+ "header",
2395
+ "footer"
2396
+ ]
2397
+ },
2398
+ "variant": {
2399
+ "enum": [
2400
+ "default",
2401
+ "first",
2402
+ "even"
2403
+ ]
2404
+ },
2405
+ "resolution": {
2406
+ "enum": [
2407
+ "effective",
2408
+ "explicit"
2409
+ ]
2410
+ },
2411
+ "onWrite": {
2412
+ "enum": [
2413
+ "materializeIfInherited",
2414
+ "editResolvedPart",
2415
+ "error"
2416
+ ]
466
2417
  }
467
2418
  },
468
2419
  "required": [
469
2420
  "kind",
470
- "start",
471
- "end"
2421
+ "storyType",
2422
+ "section",
2423
+ "headerFooterKind",
2424
+ "variant"
2425
+ ]
2426
+ },
2427
+ {
2428
+ "type": "object",
2429
+ "properties": {
2430
+ "kind": {
2431
+ "const": "story",
2432
+ "type": "string"
2433
+ },
2434
+ "storyType": {
2435
+ "const": "headerFooterPart",
2436
+ "type": "string"
2437
+ },
2438
+ "refId": {
2439
+ "type": "string"
2440
+ }
2441
+ },
2442
+ "required": [
2443
+ "kind",
2444
+ "storyType",
2445
+ "refId"
2446
+ ]
2447
+ },
2448
+ {
2449
+ "type": "object",
2450
+ "properties": {
2451
+ "kind": {
2452
+ "const": "story",
2453
+ "type": "string"
2454
+ },
2455
+ "storyType": {
2456
+ "const": "footnote",
2457
+ "type": "string"
2458
+ },
2459
+ "noteId": {
2460
+ "type": "string"
2461
+ }
2462
+ },
2463
+ "required": [
2464
+ "kind",
2465
+ "storyType",
2466
+ "noteId"
2467
+ ]
2468
+ },
2469
+ {
2470
+ "type": "object",
2471
+ "properties": {
2472
+ "kind": {
2473
+ "const": "story",
2474
+ "type": "string"
2475
+ },
2476
+ "storyType": {
2477
+ "const": "endnote",
2478
+ "type": "string"
2479
+ },
2480
+ "noteId": {
2481
+ "type": "string"
2482
+ }
2483
+ },
2484
+ "required": [
2485
+ "kind",
2486
+ "storyType",
2487
+ "noteId"
2488
+ ]
2489
+ },
2490
+ {
2491
+ "type": "object",
2492
+ "properties": {
2493
+ "kind": {
2494
+ "const": "story",
2495
+ "type": "string"
2496
+ },
2497
+ "storyType": {
2498
+ "const": "textbox",
2499
+ "type": "string"
2500
+ },
2501
+ "textboxId": {
2502
+ "type": "string"
2503
+ }
2504
+ },
2505
+ "required": [
2506
+ "kind",
2507
+ "storyType",
2508
+ "textboxId"
472
2509
  ]
473
2510
  }
474
- ]
2511
+ ],
2512
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
475
2513
  }
476
2514
  ],
477
- "description": "Block address for structural insertion: {kind:'block', nodeType:'...', nodeId:'...'}."
2515
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
478
2516
  },
479
2517
  {
480
- "$ref": "#/$defs/SelectionTarget",
481
- "description": "Selection target: {kind:'selection', start:{kind:'text', blockId, offset}, end:{kind:'text', blockId, offset}}. Use 'ref' instead when you have a search result handle."
2518
+ "$ref": "#/$defs/StoryLocator",
2519
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
482
2520
  }
483
2521
  ],
484
- "description": "Block address for structural insertion: {kind:'block', nodeType:'...', nodeId:'...'}."
2522
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
485
2523
  },
486
2524
  "value": {
487
2525
  "type": "string",
@@ -774,6 +2812,10 @@
774
2812
  ],
775
2813
  "description": "Selection target: {kind:'selection', start:{kind:'text', blockId, offset}, end:{kind:'text', blockId, offset}}. Use 'ref' instead when you have a search result handle. Required for actions 'set_style', 'set_alignment', 'set_indentation', 'set_spacing', 'set_flow_options', 'set_direction'."
776
2814
  },
2815
+ "in": {
2816
+ "$ref": "#/$defs/StoryLocator",
2817
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes. Only for action 'inline'. Omit for other actions."
2818
+ },
777
2819
  "inline": {
778
2820
  "type": "object",
779
2821
  "properties": {
@@ -1604,12 +3646,10 @@
1604
3646
  },
1605
3647
  "left": {
1606
3648
  "type": "integer",
1607
- "minimum": 0,
1608
3649
  "description": "Left indentation in twips (1440 = 1 inch). Only for action 'set_indentation'. Omit for other actions."
1609
3650
  },
1610
3651
  "right": {
1611
3652
  "type": "integer",
1612
- "minimum": 0,
1613
3653
  "description": "Right indentation in twips (1440 = 1 inch). Only for action 'set_indentation'. Omit for other actions."
1614
3654
  },
1615
3655
  "firstLine": {
@@ -1657,6 +3697,22 @@
1657
3697
  "type": "boolean",
1658
3698
  "description": "Only for action 'set_flow_options'. Omit for other actions."
1659
3699
  },
3700
+ "autoSpaceDE": {
3701
+ "type": "boolean",
3702
+ "description": "Only for action 'set_flow_options'. Omit for other actions."
3703
+ },
3704
+ "autoSpaceDN": {
3705
+ "type": "boolean",
3706
+ "description": "Only for action 'set_flow_options'. Omit for other actions."
3707
+ },
3708
+ "adjustRightInd": {
3709
+ "type": "boolean",
3710
+ "description": "Only for action 'set_flow_options'. Omit for other actions."
3711
+ },
3712
+ "snapToGrid": {
3713
+ "type": "boolean",
3714
+ "description": "Only for action 'set_flow_options'. Omit for other actions."
3715
+ },
1660
3716
  "direction": {
1661
3717
  "type": "string",
1662
3718
  "enum": [
@@ -1733,6 +3789,10 @@
1733
3789
  "type": "boolean",
1734
3790
  "description": "Preview the result without applying changes."
1735
3791
  },
3792
+ "in": {
3793
+ "$ref": "#/$defs/StoryLocator",
3794
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
3795
+ },
1736
3796
  "at": {
1737
3797
  "oneOf": [
1738
3798
  {
@@ -2371,7 +4431,7 @@
2371
4431
  },
2372
4432
  {
2373
4433
  "name": "superdoc_comment",
2374
- "description": "Manage document comment threads: create, read, update, and delete. To create a comment, first use superdoc_search to find the target text, then pass action \"create\" with the comment text and a target built from items[0].blocks. For a single-block match use {kind:\"text\", blockId: items[0].blocks[0].blockId, range: items[0].blocks[0].range}. For a cross-block match use {kind:\"text\", segments: items[0].blocks.map(b => ({blockId: b.blockId, range: b.range}))}. Do NOT use items[0].highlightRange (snippet-relative, not block-relative) or items[0].target (a SelectionTarget, not accepted by comments.create). For threaded replies, pass \"parentId\" with the parent comment ID. Action \"list\" returns all comments with optional pagination (limit, offset) and filtering (includeResolved:true to include resolved). Action \"get\" retrieves a single comment by ID. Action \"update\" changes status to \"resolved\" or marks as internal. Action \"delete\" removes a comment or reply by ID. Do NOT pass \"ref\", \"id\", or \"parentId\" when creating a new top-level comment; only \"action\", \"text\", and \"target\" are needed.\n\nEXAMPLES:\n 1. {\"action\":\"create\",\"text\":\"Please review this section.\",\"target\":{\"kind\":\"text\",\"blockId\":\"<blockId>\",\"range\":{\"start\":5,\"end\":25}}}\n 2. {\"action\":\"list\",\"limit\":20,\"offset\":0}\n 3. {\"action\":\"update\",\"id\":\"<commentId>\",\"status\":\"resolved\"}\n 4. {\"action\":\"delete\",\"id\":\"<commentId>\"}",
4434
+ "description": "Manage document comment threads: create, read, update, and delete. To create a comment, first use superdoc_search to find the target text, then pass action \"create\" with the comment text and a target built from items[0].blocks. For a single-block match use {kind:\"text\", blockId: items[0].blocks[0].blockId, range: items[0].blocks[0].range}. For a cross-block match use {kind:\"text\", segments: items[0].blocks.map(b => ({blockId: b.blockId, range: b.range}))}. Do NOT use items[0].highlightRange (snippet-relative, not block-relative) or items[0].target (a SelectionTarget, not accepted by comments.create). For threaded replies, pass \"parentId\" with the parent comment ID. Action \"list\" returns all comments with optional pagination (limit, offset) and filtering (includeResolved:true to include resolved). Action \"get\" retrieves a single comment by ID. Action \"update\" changes comment text, re-anchors the thread, or changes status to \"resolved\". The legacy `isInternal` field remains in schema for v1 compatibility but the v2 surface rejects it with `CAPABILITY_UNAVAILABLE`. Action \"delete\" removes a comment or reply by ID. Do NOT pass \"ref\", \"id\", or \"parentId\" when creating a new top-level comment; only \"action\", \"text\", and \"target\" are needed.\n\nEXAMPLES:\n 1. {\"action\":\"create\",\"text\":\"Please review this section.\",\"target\":{\"kind\":\"text\",\"blockId\":\"<blockId>\",\"range\":{\"start\":5,\"end\":25}}}\n 2. {\"action\":\"list\",\"limit\":20,\"offset\":0}\n 3. {\"action\":\"update\",\"id\":\"<commentId>\",\"status\":\"resolved\"}\n 4. {\"action\":\"delete\",\"id\":\"<commentId>\"}",
2375
4435
  "parameters": {
2376
4436
  "type": "object",
2377
4437
  "properties": {
@@ -2414,6 +4474,7 @@
2414
4474
  "target": {
2415
4475
  "oneOf": [
2416
4476
  {
4477
+ "description": "Text range to anchor the comment. Accepts either a single-block TextAddress {kind:'text', blockId, range}, a multi-segment TextTarget {kind:'text', segments:[{blockId, range}, ...]} for selections that span blocks, a SelectionTarget {kind:'selection', start, end} returned by query.match, a TextSearchCommentTarget {text, story?}, or a TrackedChangeCommentTarget ({kind:'trackedChange', trackedChangeId, side?} or {trackedChangeId, side?}) that names a logical tracked-change id as a convenience anchor .",
2417
4478
  "oneOf": [
2418
4479
  {
2419
4480
  "$ref": "#/$defs/TextAddress"
@@ -2426,28 +4487,74 @@
2426
4487
  },
2427
4488
  {
2428
4489
  "$ref": "#/$defs/CommentTrackedChangeTarget"
4490
+ },
4491
+ {
4492
+ "type": "object",
4493
+ "properties": {
4494
+ "text": {
4495
+ "type": "string",
4496
+ "description": "Text to find and anchor the comment to. The adapter resolves the first body/story match."
4497
+ },
4498
+ "story": {
4499
+ "$ref": "#/$defs/StoryLocator"
4500
+ }
4501
+ },
4502
+ "additionalProperties": false,
4503
+ "required": [
4504
+ "text"
4505
+ ]
2429
4506
  }
2430
- ],
2431
- "description": "Comment target. Accepts a TextAddress, TextTarget, SelectionTarget, or {trackedChangeId, kind?:'trackedChange'} to anchor directly on tracked content."
4507
+ ]
2432
4508
  },
2433
4509
  {
2434
4510
  "oneOf": [
2435
4511
  {
2436
4512
  "$ref": "#/$defs/TextAddress"
2437
4513
  },
2438
- {
2439
- "$ref": "#/$defs/TextTarget"
2440
- },
2441
4514
  {
2442
4515
  "$ref": "#/$defs/SelectionTarget"
2443
4516
  },
2444
4517
  {
2445
4518
  "$ref": "#/$defs/CommentTrackedChangeTarget"
4519
+ },
4520
+ {
4521
+ "type": "object",
4522
+ "properties": {
4523
+ "text": {
4524
+ "type": "string",
4525
+ "description": "Text to find and anchor the comment to. The adapter resolves the first body/story match."
4526
+ },
4527
+ "story": {
4528
+ "$ref": "#/$defs/StoryLocator"
4529
+ }
4530
+ },
4531
+ "additionalProperties": false,
4532
+ "required": [
4533
+ "text"
4534
+ ]
2446
4535
  }
2447
- ]
4536
+ ],
4537
+ "description": "New anchor for the comment. Accepts a plain TextAddress, a SelectionTarget {kind:'selection', start, end}, a TextSearchCommentTarget {text, story?}, or a TrackedChangeCommentTarget, with or without kind, that names a logical tracked-change id as a convenience re-anchor target ."
2448
4538
  }
2449
4539
  ],
2450
- "description": "Comment target. Accepts a TextAddress, TextTarget, SelectionTarget, or {trackedChangeId, kind?:'trackedChange'} to anchor directly on tracked content. Only for actions 'create', 'update'. Omit for other actions."
4540
+ "description": "Text range to anchor the comment. Accepts either a single-block TextAddress {kind:'text', blockId, range}, a multi-segment TextTarget {kind:'text', segments:[{blockId, range}, ...]} for selections that span blocks, a SelectionTarget {kind:'selection', start, end} returned by query.match, a TextSearchCommentTarget {text, story?}, or a TrackedChangeCommentTarget ({kind:'trackedChange', trackedChangeId, side?} or {trackedChangeId, side?}) that names a logical tracked-change id as a convenience anchor . Only for actions 'create', 'update'. Omit for other actions."
4541
+ },
4542
+ "trackedChangeId": {
4543
+ "type": "string",
4544
+ "description": "Compatibility shorthand for target: { trackedChangeId }. Used only when target is omitted. Only for action 'create'. Omit for other actions."
4545
+ },
4546
+ "side": {
4547
+ "enum": [
4548
+ "inserted",
4549
+ "deleted",
4550
+ "source",
4551
+ "destination"
4552
+ ],
4553
+ "description": "Optional side for the top-level trackedChangeId shorthand. Only for action 'create'. Omit for other actions."
4554
+ },
4555
+ "story": {
4556
+ "$ref": "#/$defs/StoryLocator",
4557
+ "description": "Optional story for the top-level trackedChangeId shorthand. Only for action 'create'. Omit for other actions."
2451
4558
  },
2452
4559
  "parentId": {
2453
4560
  "type": "string",
@@ -2466,7 +4573,7 @@
2466
4573
  },
2467
4574
  "isInternal": {
2468
4575
  "type": "boolean",
2469
- "description": "When true, marks the comment as internal (hidden from external collaborators). Only for action 'update'. Omit for other actions."
4576
+ "description": "Legacy v1/document-api compatibility field. Not a supported v2 behavior. V2 adapters MUST reject a `comments.patch` request containing `isInternal` with `CAPABILITY_UNAVAILABLE` (kernel reason `internal-comments-unsupported`). The field is preserved in the schema only so v1 callers keep their input shape (`comments-spec.md` §7, §14.6). Only for action 'update'. Omit for other actions."
2470
4577
  },
2471
4578
  "includeResolved": {
2472
4579
  "type": "boolean",
@@ -2509,7 +4616,7 @@
2509
4616
  },
2510
4617
  {
2511
4618
  "name": "superdoc_track_changes",
2512
- "description": "Review and resolve tracked changes (insertions, deletions, replacements, format changes) in the document. Action \"list\" returns all tracked changes with optional filtering by type (insert, delete, replacement, format) and pagination (limit, offset). Each change includes an ID, type, author, timestamp, and content preview. Action \"decide\" accepts or rejects changes. Pass decision:\"accept\" to apply the change permanently, or decision:\"reject\" to discard it. Target a single change with {id:\"<changeId>\"}, a partial selection with {kind:\"range\", range:{...}}, or all changes at once with {scope:\"all\"} (optionally plus story). Do NOT use this tool unless the document has tracked changes. Use superdoc_get_content info to check the tracked change count first.\n\nEXAMPLES:\n 1. {\"action\":\"list\"}\n 2. {\"action\":\"list\",\"type\":\"replacement\",\"limit\":10}\n 3. {\"action\":\"decide\",\"decision\":\"accept\",\"target\":{\"id\":\"<changeId>\"}}\n 4. {\"action\":\"decide\",\"decision\":\"reject\",\"target\":{\"kind\":\"range\",\"range\":{\"kind\":\"text\",\"segments\":[{\"blockId\":\"<blockId>\",\"range\":{\"start\":0,\"end\":5}}]}}}\n 5. {\"action\":\"decide\",\"decision\":\"reject\",\"target\":{\"scope\":\"all\"}}",
4619
+ "description": "Review and resolve tracked changes (insertions, deletions, replacements, format changes) in the document. Action \"list\" returns all tracked changes with optional filtering by type (insert, delete, replacement, format) and pagination (limit, offset). Each change includes an ID, type, author, timestamp, and content preview. Action \"decide\" accepts or rejects changes. Pass decision:\"accept\" to apply the change permanently, or decision:\"reject\" to discard it. Target a single change with {id:\"<changeId>\"}, a partial selection with {kind:\"range\", range:{...}}, or all changes at once with {scope:\"all\"} (optionally plus story). Do NOT use this tool unless the document has tracked changes. Use superdoc_get_content info to check the tracked change count first.\n\nEXAMPLES:\n 1. {\"action\":\"list\"}\n 2. {\"action\":\"list\",\"type\":\"insertion\",\"limit\":10}\n 3. {\"action\":\"list\",\"type\":\"replacement\",\"limit\":10}\n 4. {\"action\":\"decide\",\"decision\":\"accept\",\"target\":{\"id\":\"<changeId>\"}}\n 5. {\"action\":\"decide\",\"decision\":\"reject\",\"target\":{\"kind\":\"range\",\"range\":{\"kind\":\"text\",\"segments\":[{\"blockId\":\"<blockId>\",\"range\":{\"start\":0,\"end\":5}}]}}}\n 6. {\"action\":\"decide\",\"decision\":\"reject\",\"target\":{\"scope\":\"all\"}}",
2513
4620
  "parameters": {
2514
4621
  "type": "object",
2515
4622
  "properties": {
@@ -2531,12 +4638,29 @@
2531
4638
  },
2532
4639
  "type": {
2533
4640
  "enum": [
4641
+ "insertion",
4642
+ "deletion",
4643
+ "replacement",
4644
+ "formatting",
4645
+ "move",
4646
+ "structural",
2534
4647
  "insert",
2535
4648
  "delete",
2536
- "replacement",
2537
4649
  "format"
2538
4650
  ],
2539
- "description": "Filter by change type: 'insert', 'delete', 'replacement', or 'format'. Only for action 'list'. Omit for other actions."
4651
+ "description": "Filter by change type. Canonical values: 'insertion', 'deletion', 'replacement', 'formatting', 'move', 'structural'. Legacy aliases 'insert', 'delete', and 'format' remain accepted during migration. Only for action 'list'. Omit for other actions."
4652
+ },
4653
+ "in": {
4654
+ "oneOf": [
4655
+ {
4656
+ "$ref": "#/$defs/StoryLocator"
4657
+ },
4658
+ {
4659
+ "const": "all",
4660
+ "type": "string"
4661
+ }
4662
+ ],
4663
+ "description": "Story scope. Omit for body only, pass a StoryLocator for a single story, or 'all' for body + every revision-capable non-body story. Only for action 'list'. Omit for other actions."
2540
4664
  },
2541
4665
  "force": {
2542
4666
  "type": "boolean",
@@ -2557,8 +4681,215 @@
2557
4681
  ],
2558
4682
  "description": "Required for action 'decide'."
2559
4683
  },
4684
+ "expectedRevision": {
4685
+ "type": "string",
4686
+ "description": "Backward-compatible alias for options.expectedRevision. Explicit mutation options take precedence when both are supplied. Only for action 'decide'. Omit for other actions."
4687
+ },
2560
4688
  "target": {
4689
+ "description": "Decision target. Canonical shapes: { kind: 'id', id, story? } (whole logical tracked change), { kind: 'range', range: TextTarget, overlap?, side?, story?, part? } or { kind: 'range', range: { anchor, relativeStart, relativeEnd }, overlap?, side?, story?, part? } (resolves only the selected overlap; may split fragments), { kind: 'all' } (every active tracked change). Legacy { id, story? } / { id, range: { kind: 'partial', start, end } } / { scope: 'all' } shapes are accepted and transparently promoted to canonical targets. Required for action 'decide'.",
2561
4690
  "oneOf": [
4691
+ {
4692
+ "type": "object",
4693
+ "properties": {
4694
+ "kind": {
4695
+ "const": "id",
4696
+ "type": "string"
4697
+ },
4698
+ "id": {
4699
+ "type": "string"
4700
+ },
4701
+ "story": {
4702
+ "$ref": "#/$defs/StoryLocator"
4703
+ },
4704
+ "moveRole": {
4705
+ "enum": [
4706
+ "pair",
4707
+ "source",
4708
+ "destination"
4709
+ ],
4710
+ "description": "Optional move pairing assertion. 'pair' requires the resolved tracked change to be a paired move; 'source' / 'destination' further narrow to a specific half. When the assertion does not hold the decide adapter fails closed."
4711
+ }
4712
+ },
4713
+ "additionalProperties": false,
4714
+ "required": [
4715
+ "kind",
4716
+ "id"
4717
+ ]
4718
+ },
4719
+ {
4720
+ "type": "object",
4721
+ "properties": {
4722
+ "kind": {
4723
+ "const": "range",
4724
+ "type": "string"
4725
+ },
4726
+ "range": {
4727
+ "$ref": "#/$defs/TextTarget"
4728
+ },
4729
+ "overlap": {
4730
+ "type": "string",
4731
+ "description": "Optional logical overlap selector for callers that already resolved an ambiguous overlap surface. Adapter-owned interpretation."
4732
+ },
4733
+ "side": {
4734
+ "enum": [
4735
+ "insert",
4736
+ "inserted",
4737
+ "delete",
4738
+ "deleted",
4739
+ "source",
4740
+ "destination"
4741
+ ],
4742
+ "description": "Optional revision side for paired replacement or move targets."
4743
+ },
4744
+ "story": {
4745
+ "$ref": "#/$defs/StoryLocator",
4746
+ "description": "Optional story containing the range target."
4747
+ },
4748
+ "part": {
4749
+ "type": "string",
4750
+ "description": "Compatibility alias used by older range callers; interpretation is adapter-owned."
4751
+ }
4752
+ },
4753
+ "additionalProperties": false,
4754
+ "required": [
4755
+ "kind",
4756
+ "range"
4757
+ ]
4758
+ },
4759
+ {
4760
+ "type": "object",
4761
+ "properties": {
4762
+ "kind": {
4763
+ "const": "range",
4764
+ "type": "string"
4765
+ },
4766
+ "range": {
4767
+ "type": "object",
4768
+ "properties": {
4769
+ "anchor": {
4770
+ "type": "string"
4771
+ },
4772
+ "relativeStart": {
4773
+ "type": "integer",
4774
+ "minimum": 0
4775
+ },
4776
+ "relativeEnd": {
4777
+ "type": "integer",
4778
+ "minimum": 0
4779
+ }
4780
+ },
4781
+ "additionalProperties": false,
4782
+ "required": [
4783
+ "anchor",
4784
+ "relativeStart",
4785
+ "relativeEnd"
4786
+ ]
4787
+ },
4788
+ "overlap": {
4789
+ "type": "string",
4790
+ "description": "Optional logical overlap selector for callers that already resolved an ambiguous overlap surface. Adapter-owned interpretation."
4791
+ },
4792
+ "side": {
4793
+ "enum": [
4794
+ "insert",
4795
+ "inserted",
4796
+ "delete",
4797
+ "deleted",
4798
+ "source",
4799
+ "destination"
4800
+ ],
4801
+ "description": "Optional revision side for paired replacement or move targets."
4802
+ },
4803
+ "story": {
4804
+ "$ref": "#/$defs/StoryLocator",
4805
+ "description": "Optional story containing the range target."
4806
+ },
4807
+ "part": {
4808
+ "type": "string",
4809
+ "description": "Compatibility alias used by older range callers; interpretation is adapter-owned."
4810
+ }
4811
+ },
4812
+ "additionalProperties": false,
4813
+ "required": [
4814
+ "kind",
4815
+ "range"
4816
+ ]
4817
+ },
4818
+ {
4819
+ "type": "object",
4820
+ "properties": {
4821
+ "kind": {
4822
+ "const": "range",
4823
+ "type": "string"
4824
+ },
4825
+ "anchor": {
4826
+ "type": "string"
4827
+ },
4828
+ "relativeStart": {
4829
+ "type": "integer",
4830
+ "minimum": 0
4831
+ },
4832
+ "relativeEnd": {
4833
+ "type": "integer",
4834
+ "minimum": 0
4835
+ },
4836
+ "overlap": {
4837
+ "type": "string",
4838
+ "description": "Optional logical overlap selector for callers that already resolved an ambiguous overlap surface. Adapter-owned interpretation."
4839
+ },
4840
+ "side": {
4841
+ "enum": [
4842
+ "insert",
4843
+ "inserted",
4844
+ "delete",
4845
+ "deleted",
4846
+ "source",
4847
+ "destination"
4848
+ ],
4849
+ "description": "Optional revision side for paired replacement or move targets."
4850
+ },
4851
+ "story": {
4852
+ "$ref": "#/$defs/StoryLocator",
4853
+ "description": "Optional story containing the range target."
4854
+ },
4855
+ "part": {
4856
+ "type": "string",
4857
+ "description": "Compatibility alias used by older range callers; interpretation is adapter-owned."
4858
+ }
4859
+ },
4860
+ "additionalProperties": false,
4861
+ "required": [
4862
+ "kind",
4863
+ "anchor",
4864
+ "relativeStart",
4865
+ "relativeEnd"
4866
+ ]
4867
+ },
4868
+ {
4869
+ "type": "object",
4870
+ "properties": {
4871
+ "kind": {
4872
+ "const": "all",
4873
+ "type": "string"
4874
+ },
4875
+ "story": {
4876
+ "oneOf": [
4877
+ {
4878
+ "$ref": "#/$defs/StoryLocator"
4879
+ },
4880
+ {
4881
+ "const": "all",
4882
+ "type": "string"
4883
+ }
4884
+ ],
4885
+ "description": "Optional explicit bulk filter. Omit or pass 'all' to target every revision-capable story, or pass a StoryLocator to scope the decision to one story."
4886
+ }
4887
+ },
4888
+ "additionalProperties": false,
4889
+ "required": [
4890
+ "kind"
4891
+ ]
4892
+ },
2562
4893
  {
2563
4894
  "type": "object",
2564
4895
  "properties": {
@@ -2568,9 +4899,13 @@
2568
4899
  "story": {
2569
4900
  "$ref": "#/$defs/StoryLocator"
2570
4901
  },
2571
- "range": {
2572
- "type": "object",
2573
- "description": "Partial-range qualifier on an id target. Rejected with INVALID_INPUT for indivisible (e.g. structural) revisions."
4902
+ "moveRole": {
4903
+ "enum": [
4904
+ "pair",
4905
+ "source",
4906
+ "destination"
4907
+ ],
4908
+ "description": "Optional move pairing assertion. 'pair' requires the resolved tracked change to be a paired move; 'source' / 'destination' further narrow to a specific half. When the assertion does not hold the decide adapter fails closed."
2574
4909
  }
2575
4910
  },
2576
4911
  "additionalProperties": false,
@@ -2581,24 +4916,39 @@
2581
4916
  {
2582
4917
  "type": "object",
2583
4918
  "properties": {
2584
- "kind": {
2585
- "const": "range",
4919
+ "id": {
2586
4920
  "type": "string"
2587
4921
  },
2588
4922
  "range": {
2589
- "$ref": "#/$defs/TextTarget"
4923
+ "type": "object",
4924
+ "properties": {
4925
+ "kind": {
4926
+ "const": "partial",
4927
+ "type": "string"
4928
+ },
4929
+ "start": {
4930
+ "type": "integer",
4931
+ "minimum": 0
4932
+ },
4933
+ "end": {
4934
+ "type": "integer",
4935
+ "minimum": 0
4936
+ }
4937
+ },
4938
+ "additionalProperties": false,
4939
+ "required": [
4940
+ "kind",
4941
+ "start",
4942
+ "end"
4943
+ ]
2590
4944
  },
2591
4945
  "story": {
2592
4946
  "$ref": "#/$defs/StoryLocator"
2593
- },
2594
- "part": {
2595
- "type": "string",
2596
- "description": "Optional part discriminator for the range target."
2597
4947
  }
2598
4948
  },
2599
4949
  "additionalProperties": false,
2600
4950
  "required": [
2601
- "kind",
4951
+ "id",
2602
4952
  "range"
2603
4953
  ]
2604
4954
  },
@@ -2628,8 +4978,7 @@
2628
4978
  "scope"
2629
4979
  ]
2630
4980
  }
2631
- ],
2632
- "description": "Required for action 'decide'."
4981
+ ]
2633
4982
  }
2634
4983
  },
2635
4984
  "required": [
@@ -2661,6 +5010,10 @@
2661
5010
  "parameters": {
2662
5011
  "type": "object",
2663
5012
  "properties": {
5013
+ "in": {
5014
+ "$ref": "#/$defs/StoryLocator",
5015
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
5016
+ },
2664
5017
  "select": {
2665
5018
  "description": "Search selector. Use {type:'text', pattern:'...'} for text search or {type:'node', nodeType:'paragraph'|'heading'|...} for node search.",
2666
5019
  "oneOf": [
@@ -2674,18 +5027,22 @@
2674
5027
  },
2675
5028
  "pattern": {
2676
5029
  "type": "string",
2677
- "description": "Text or regex pattern to match."
5030
+ "description": "Text to match. In regex mode, patterns are validated for syntax, maximum length, and safety before execution."
2678
5031
  },
2679
5032
  "mode": {
2680
5033
  "enum": [
2681
5034
  "contains",
2682
5035
  "regex"
2683
5036
  ],
2684
- "description": "Match mode: 'contains' (substring) or 'regex'."
5037
+ "description": "Match mode: 'contains' (literal substring, recommended for literal text) or 'regex' (validated regular expression)."
2685
5038
  },
2686
5039
  "caseSensitive": {
2687
5040
  "type": "boolean",
2688
5041
  "description": "Case-sensitive matching. Default: false."
5042
+ },
5043
+ "wholeWord": {
5044
+ "type": "boolean",
5045
+ "description": "Require word-boundary matches. Default: false."
2689
5046
  }
2690
5047
  },
2691
5048
  "additionalProperties": false,
@@ -2815,6 +5172,10 @@
2815
5172
  ],
2816
5173
  "description": "The action to perform. One of: apply, preview."
2817
5174
  },
5175
+ "in": {
5176
+ "$ref": "#/$defs/StoryLocator",
5177
+ "description": "Story scope. Defaults to document body when omitted. Use {kind:'story', storyType:'body'} for body, or other storyType values for headers, footers, footnotes, endnotes."
5178
+ },
2818
5179
  "expectedRevision": {
2819
5180
  "type": "string",
2820
5181
  "description": "Document revision for optimistic concurrency. Mutation fails if document was modified since this revision. Only for action 'preview'. Omit for other actions."
@@ -2866,18 +5227,22 @@
2866
5227
  },
2867
5228
  "pattern": {
2868
5229
  "type": "string",
2869
- "description": "Text or regex pattern to match."
5230
+ "description": "Text to match. In regex mode, patterns are validated for syntax, maximum length, and safety before execution."
2870
5231
  },
2871
5232
  "mode": {
2872
5233
  "enum": [
2873
5234
  "contains",
2874
5235
  "regex"
2875
5236
  ],
2876
- "description": "Match mode: 'contains' (substring) or 'regex'."
5237
+ "description": "Match mode: 'contains' (literal substring, recommended for literal text) or 'regex' (validated regular expression)."
2877
5238
  },
2878
5239
  "caseSensitive": {
2879
5240
  "type": "boolean",
2880
5241
  "description": "Case-sensitive matching. Default: false."
5242
+ },
5243
+ "wholeWord": {
5244
+ "type": "boolean",
5245
+ "description": "Require word-boundary matches. Default: false."
2881
5246
  }
2882
5247
  },
2883
5248
  "additionalProperties": false,
@@ -3202,18 +5567,22 @@
3202
5567
  },
3203
5568
  "pattern": {
3204
5569
  "type": "string",
3205
- "description": "Text or regex pattern to match."
5570
+ "description": "Text to match. In regex mode, patterns are validated for syntax, maximum length, and safety before execution."
3206
5571
  },
3207
5572
  "mode": {
3208
5573
  "enum": [
3209
5574
  "contains",
3210
5575
  "regex"
3211
5576
  ],
3212
- "description": "Match mode: 'contains' (substring) or 'regex'."
5577
+ "description": "Match mode: 'contains' (literal substring, recommended for literal text) or 'regex' (validated regular expression)."
3213
5578
  },
3214
5579
  "caseSensitive": {
3215
5580
  "type": "boolean",
3216
5581
  "description": "Case-sensitive matching. Default: false."
5582
+ },
5583
+ "wholeWord": {
5584
+ "type": "boolean",
5585
+ "description": "Require word-boundary matches. Default: false."
3217
5586
  }
3218
5587
  },
3219
5588
  "additionalProperties": false,
@@ -3487,18 +5856,22 @@
3487
5856
  },
3488
5857
  "pattern": {
3489
5858
  "type": "string",
3490
- "description": "Text or regex pattern to match."
5859
+ "description": "Text to match. In regex mode, patterns are validated for syntax, maximum length, and safety before execution."
3491
5860
  },
3492
5861
  "mode": {
3493
5862
  "enum": [
3494
5863
  "contains",
3495
5864
  "regex"
3496
5865
  ],
3497
- "description": "Match mode: 'contains' (substring) or 'regex'."
5866
+ "description": "Match mode: 'contains' (literal substring, recommended for literal text) or 'regex' (validated regular expression)."
3498
5867
  },
3499
5868
  "caseSensitive": {
3500
5869
  "type": "boolean",
3501
5870
  "description": "Case-sensitive matching. Default: false."
5871
+ },
5872
+ "wholeWord": {
5873
+ "type": "boolean",
5874
+ "description": "Require word-boundary matches. Default: false."
3502
5875
  }
3503
5876
  },
3504
5877
  "additionalProperties": false,
@@ -3694,18 +6067,22 @@
3694
6067
  },
3695
6068
  "pattern": {
3696
6069
  "type": "string",
3697
- "description": "Text or regex pattern to match."
6070
+ "description": "Text to match. In regex mode, patterns are validated for syntax, maximum length, and safety before execution."
3698
6071
  },
3699
6072
  "mode": {
3700
6073
  "enum": [
3701
6074
  "contains",
3702
6075
  "regex"
3703
6076
  ],
3704
- "description": "Match mode: 'contains' (substring) or 'regex'."
6077
+ "description": "Match mode: 'contains' (literal substring, recommended for literal text) or 'regex' (validated regular expression)."
3705
6078
  },
3706
6079
  "caseSensitive": {
3707
6080
  "type": "boolean",
3708
6081
  "description": "Case-sensitive matching. Default: false."
6082
+ },
6083
+ "wholeWord": {
6084
+ "type": "boolean",
6085
+ "description": "Require word-boundary matches. Default: false."
3709
6086
  }
3710
6087
  },
3711
6088
  "additionalProperties": false,
@@ -4724,18 +7101,22 @@
4724
7101
  },
4725
7102
  "pattern": {
4726
7103
  "type": "string",
4727
- "description": "Text or regex pattern to match."
7104
+ "description": "Text to match. In regex mode, patterns are validated for syntax, maximum length, and safety before execution."
4728
7105
  },
4729
7106
  "mode": {
4730
7107
  "enum": [
4731
7108
  "contains",
4732
7109
  "regex"
4733
7110
  ],
4734
- "description": "Match mode: 'contains' (substring) or 'regex'."
7111
+ "description": "Match mode: 'contains' (literal substring, recommended for literal text) or 'regex' (validated regular expression)."
4735
7112
  },
4736
7113
  "caseSensitive": {
4737
7114
  "type": "boolean",
4738
7115
  "description": "Case-sensitive matching. Default: false."
7116
+ },
7117
+ "wholeWord": {
7118
+ "type": "boolean",
7119
+ "description": "Require word-boundary matches. Default: false."
4739
7120
  }
4740
7121
  },
4741
7122
  "additionalProperties": false,
@@ -4875,6 +7256,7 @@
4875
7256
  "insert_column",
4876
7257
  "insert_row",
4877
7258
  "merge_cells",
7259
+ "move_row",
4878
7260
  "set_borders",
4879
7261
  "set_cell",
4880
7262
  "set_cell_text",
@@ -4887,7 +7269,7 @@
4887
7269
  "set_style_options",
4888
7270
  "unmerge_cells"
4889
7271
  ],
4890
- "description": "The action to perform. One of: delete, delete_column, delete_row, insert_column, insert_row, merge_cells, set_borders, set_cell, set_cell_text, set_column, set_layout, set_options, set_row, set_row_options, set_shading, set_style_options, unmerge_cells."
7272
+ "description": "The action to perform. One of: delete, delete_column, delete_row, insert_column, insert_row, merge_cells, move_row, set_borders, set_cell, set_cell_text, set_column, set_layout, set_options, set_row, set_row_options, set_shading, set_style_options, unmerge_cells."
4891
7273
  },
4892
7274
  "force": {
4893
7275
  "type": "boolean",
@@ -4935,20 +7317,34 @@
4935
7317
  "oneOf": [
4936
7318
  {
4937
7319
  "oneOf": [
4938
- {
4939
- "$ref": "#/$defs/TableAddress"
4940
- },
4941
7320
  {
4942
7321
  "oneOf": [
7322
+ {
7323
+ "$ref": "#/$defs/TableAddress"
7324
+ },
4943
7325
  {
4944
7326
  "oneOf": [
4945
7327
  {
4946
- "$ref": "#/$defs/TableRowAddress"
7328
+ "oneOf": [
7329
+ {
7330
+ "$ref": "#/$defs/TableRowAddress"
7331
+ },
7332
+ {
7333
+ "$ref": "#/$defs/TableAddress"
7334
+ }
7335
+ ]
4947
7336
  },
4948
7337
  {
4949
7338
  "$ref": "#/$defs/TableAddress"
4950
7339
  }
4951
7340
  ]
7341
+ }
7342
+ ]
7343
+ },
7344
+ {
7345
+ "oneOf": [
7346
+ {
7347
+ "$ref": "#/$defs/TableRowAddress"
4952
7348
  },
4953
7349
  {
4954
7350
  "$ref": "#/$defs/TableAddress"
@@ -5070,6 +7466,14 @@
5070
7466
  "type": "number",
5071
7467
  "description": "Only for action 'set_layout'. Omit for other actions."
5072
7468
  },
7469
+ "preferredWidthType": {
7470
+ "enum": [
7471
+ "dxa",
7472
+ "auto",
7473
+ "pct"
7474
+ ],
7475
+ "description": "Only for action 'set_layout'. Omit for other actions."
7476
+ },
5073
7477
  "alignment": {
5074
7478
  "enum": [
5075
7479
  "left",
@@ -5116,7 +7520,142 @@
5116
7520
  "rowIndex": {
5117
7521
  "type": "integer",
5118
7522
  "minimum": 0,
5119
- "description": "Only for actions 'insert_row', 'delete_row', 'set_row', 'set_row_options', 'unmerge_cells', 'set_cell_text'. Omit for other actions."
7523
+ "description": "Only for actions 'insert_row', 'delete_row', 'move_row', 'set_row', 'set_row_options', 'unmerge_cells', 'set_cell_text'. Omit for other actions."
7524
+ },
7525
+ "destination": {
7526
+ "oneOf": [
7527
+ {
7528
+ "type": "object",
7529
+ "properties": {
7530
+ "kind": {
7531
+ "const": "first",
7532
+ "type": "string"
7533
+ }
7534
+ },
7535
+ "additionalProperties": false,
7536
+ "required": [
7537
+ "kind"
7538
+ ]
7539
+ },
7540
+ {
7541
+ "type": "object",
7542
+ "properties": {
7543
+ "kind": {
7544
+ "const": "last",
7545
+ "type": "string"
7546
+ }
7547
+ },
7548
+ "additionalProperties": false,
7549
+ "required": [
7550
+ "kind"
7551
+ ]
7552
+ },
7553
+ {
7554
+ "type": "object",
7555
+ "properties": {
7556
+ "kind": {
7557
+ "const": "before",
7558
+ "type": "string"
7559
+ },
7560
+ "rowIndex": {
7561
+ "type": "integer",
7562
+ "minimum": 0
7563
+ }
7564
+ },
7565
+ "additionalProperties": false,
7566
+ "required": [
7567
+ "kind",
7568
+ "rowIndex"
7569
+ ]
7570
+ },
7571
+ {
7572
+ "type": "object",
7573
+ "properties": {
7574
+ "kind": {
7575
+ "const": "after",
7576
+ "type": "string"
7577
+ },
7578
+ "rowIndex": {
7579
+ "type": "integer",
7580
+ "minimum": 0
7581
+ }
7582
+ },
7583
+ "additionalProperties": false,
7584
+ "required": [
7585
+ "kind",
7586
+ "rowIndex"
7587
+ ]
7588
+ },
7589
+ {
7590
+ "type": "object",
7591
+ "properties": {
7592
+ "kind": {
7593
+ "const": "before",
7594
+ "type": "string"
7595
+ },
7596
+ "target": {
7597
+ "$ref": "#/$defs/TableRowAddress"
7598
+ }
7599
+ },
7600
+ "additionalProperties": false,
7601
+ "required": [
7602
+ "kind",
7603
+ "target"
7604
+ ]
7605
+ },
7606
+ {
7607
+ "type": "object",
7608
+ "properties": {
7609
+ "kind": {
7610
+ "const": "after",
7611
+ "type": "string"
7612
+ },
7613
+ "target": {
7614
+ "$ref": "#/$defs/TableRowAddress"
7615
+ }
7616
+ },
7617
+ "additionalProperties": false,
7618
+ "required": [
7619
+ "kind",
7620
+ "target"
7621
+ ]
7622
+ },
7623
+ {
7624
+ "type": "object",
7625
+ "properties": {
7626
+ "kind": {
7627
+ "const": "before",
7628
+ "type": "string"
7629
+ },
7630
+ "nodeId": {
7631
+ "type": "string"
7632
+ }
7633
+ },
7634
+ "additionalProperties": false,
7635
+ "required": [
7636
+ "kind",
7637
+ "nodeId"
7638
+ ]
7639
+ },
7640
+ {
7641
+ "type": "object",
7642
+ "properties": {
7643
+ "kind": {
7644
+ "const": "after",
7645
+ "type": "string"
7646
+ },
7647
+ "nodeId": {
7648
+ "type": "string"
7649
+ }
7650
+ },
7651
+ "additionalProperties": false,
7652
+ "required": [
7653
+ "kind",
7654
+ "nodeId"
7655
+ ]
7656
+ }
7657
+ ],
7658
+ "description": "Required for action 'move_row'."
5120
7659
  },
5121
7660
  "heightPt": {
5122
7661
  "type": "number",
@@ -5129,7 +7668,7 @@
5129
7668
  "exact",
5130
7669
  "auto"
5131
7670
  ],
5132
- "description": "Required for action 'set_row'."
7671
+ "description": "Only for action 'set_row'. Omit for other actions."
5133
7672
  },
5134
7673
  "allowBreakAcrossPages": {
5135
7674
  "type": "boolean",
@@ -5139,6 +7678,62 @@
5139
7678
  "type": "boolean",
5140
7679
  "description": "Only for action 'set_row_options'. Omit for other actions."
5141
7680
  },
7681
+ "gridBefore": {
7682
+ "type": "integer",
7683
+ "minimum": 0,
7684
+ "description": "Only for action 'set_row_options'. Omit for other actions."
7685
+ },
7686
+ "gridAfter": {
7687
+ "type": "integer",
7688
+ "minimum": 0,
7689
+ "description": "Only for action 'set_row_options'. Omit for other actions."
7690
+ },
7691
+ "wBefore": {
7692
+ "type": "object",
7693
+ "properties": {
7694
+ "value": {
7695
+ "type": "integer",
7696
+ "minimum": 0
7697
+ },
7698
+ "type": {
7699
+ "enum": [
7700
+ "auto",
7701
+ "dxa",
7702
+ "nil",
7703
+ "pct"
7704
+ ]
7705
+ }
7706
+ },
7707
+ "additionalProperties": false,
7708
+ "required": [
7709
+ "value",
7710
+ "type"
7711
+ ],
7712
+ "description": "Only for action 'set_row_options'. Omit for other actions."
7713
+ },
7714
+ "wAfter": {
7715
+ "type": "object",
7716
+ "properties": {
7717
+ "value": {
7718
+ "type": "integer",
7719
+ "minimum": 0
7720
+ },
7721
+ "type": {
7722
+ "enum": [
7723
+ "auto",
7724
+ "dxa",
7725
+ "nil",
7726
+ "pct"
7727
+ ]
7728
+ }
7729
+ },
7730
+ "additionalProperties": false,
7731
+ "required": [
7732
+ "value",
7733
+ "type"
7734
+ ],
7735
+ "description": "Only for action 'set_row_options'. Omit for other actions."
7736
+ },
5142
7737
  "columnIndex": {
5143
7738
  "type": "integer",
5144
7739
  "minimum": 0,
@@ -5536,12 +8131,13 @@
5536
8131
  },
5537
8132
  "metadata": {
5538
8133
  "mutates": true,
5539
- "operationCount": 17,
8134
+ "operationCount": 18,
5540
8135
  "operations": [
5541
8136
  "doc.tables.delete",
5542
8137
  "doc.tables.setLayout",
5543
8138
  "doc.tables.insertRow",
5544
8139
  "doc.tables.deleteRow",
8140
+ "doc.tables.moveRow",
5545
8141
  "doc.tables.setRowHeight",
5546
8142
  "doc.tables.setRowOptions",
5547
8143
  "doc.tables.insertColumn",