@superdoc/cli 0.36.0-next.9 → 0.36.1-next.1

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.
@@ -113,7 +113,357 @@
113
113
  "required": [
114
114
  "action"
115
115
  ],
116
- "additionalProperties": false
116
+ "additionalProperties": false,
117
+ "$defs": {
118
+ "BlockNodeAddress": {
119
+ "type": "object",
120
+ "properties": {
121
+ "kind": {
122
+ "const": "block",
123
+ "type": "string"
124
+ },
125
+ "nodeType": {
126
+ "enum": [
127
+ "paragraph",
128
+ "heading",
129
+ "listItem",
130
+ "table",
131
+ "tableRow",
132
+ "tableCell",
133
+ "tableOfContents",
134
+ "image",
135
+ "sdt"
136
+ ]
137
+ },
138
+ "nodeId": {
139
+ "type": "string"
140
+ },
141
+ "story": {
142
+ "$ref": "#/$defs/StoryLocator"
143
+ }
144
+ },
145
+ "additionalProperties": false,
146
+ "required": [
147
+ "kind",
148
+ "nodeType",
149
+ "nodeId"
150
+ ]
151
+ },
152
+ "SDProjectionReviewMode": {
153
+ "enum": [
154
+ "final",
155
+ "original",
156
+ "redline"
157
+ ]
158
+ },
159
+ "SDProjectionScope": {
160
+ "oneOf": [
161
+ {
162
+ "$ref": "#/$defs/BlockNodeAddress"
163
+ },
164
+ {
165
+ "$ref": "#/$defs/SelectionTarget"
166
+ }
167
+ ]
168
+ },
169
+ "SectionAddress": {
170
+ "type": "object",
171
+ "properties": {
172
+ "kind": {
173
+ "const": "section",
174
+ "type": "string"
175
+ },
176
+ "sectionId": {
177
+ "type": "string"
178
+ }
179
+ },
180
+ "additionalProperties": false,
181
+ "required": [
182
+ "kind",
183
+ "sectionId"
184
+ ]
185
+ },
186
+ "SelectionEdgeNodeAddress": {
187
+ "type": "object",
188
+ "properties": {
189
+ "kind": {
190
+ "const": "block",
191
+ "type": "string"
192
+ },
193
+ "nodeType": {
194
+ "enum": [
195
+ "paragraph",
196
+ "heading",
197
+ "listItem",
198
+ "table",
199
+ "tableOfContents",
200
+ "sdt",
201
+ "image"
202
+ ]
203
+ },
204
+ "nodeId": {
205
+ "type": "string"
206
+ },
207
+ "story": {
208
+ "$ref": "#/$defs/StoryLocator"
209
+ }
210
+ },
211
+ "additionalProperties": false,
212
+ "required": [
213
+ "kind",
214
+ "nodeType",
215
+ "nodeId"
216
+ ]
217
+ },
218
+ "SelectionPoint": {
219
+ "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.",
220
+ "oneOf": [
221
+ {
222
+ "type": "object",
223
+ "properties": {
224
+ "kind": {
225
+ "const": "text",
226
+ "type": "string"
227
+ },
228
+ "blockId": {
229
+ "type": "string"
230
+ },
231
+ "offset": {
232
+ "type": "integer",
233
+ "minimum": 0
234
+ },
235
+ "story": {
236
+ "$ref": "#/$defs/StoryLocator"
237
+ }
238
+ },
239
+ "additionalProperties": false,
240
+ "required": [
241
+ "kind",
242
+ "blockId",
243
+ "offset"
244
+ ]
245
+ },
246
+ {
247
+ "type": "object",
248
+ "properties": {
249
+ "kind": {
250
+ "const": "nodeEdge",
251
+ "type": "string"
252
+ },
253
+ "node": {
254
+ "$ref": "#/$defs/SelectionEdgeNodeAddress"
255
+ },
256
+ "edge": {
257
+ "enum": [
258
+ "before",
259
+ "after"
260
+ ]
261
+ }
262
+ },
263
+ "additionalProperties": false,
264
+ "required": [
265
+ "kind",
266
+ "node",
267
+ "edge"
268
+ ]
269
+ }
270
+ ]
271
+ },
272
+ "SelectionTarget": {
273
+ "type": "object",
274
+ "properties": {
275
+ "kind": {
276
+ "const": "selection",
277
+ "type": "string"
278
+ },
279
+ "start": {
280
+ "$ref": "#/$defs/SelectionPoint"
281
+ },
282
+ "end": {
283
+ "$ref": "#/$defs/SelectionPoint"
284
+ },
285
+ "story": {
286
+ "$ref": "#/$defs/StoryLocator"
287
+ },
288
+ "coordinateSpace": {
289
+ "$ref": "#/$defs/TextCoordinateSpace"
290
+ }
291
+ },
292
+ "additionalProperties": false,
293
+ "required": [
294
+ "kind",
295
+ "start",
296
+ "end"
297
+ ]
298
+ },
299
+ "StoryLocator": {
300
+ "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.",
301
+ "oneOf": [
302
+ {
303
+ "type": "object",
304
+ "properties": {
305
+ "kind": {
306
+ "const": "story",
307
+ "type": "string"
308
+ },
309
+ "storyType": {
310
+ "const": "body",
311
+ "type": "string"
312
+ }
313
+ },
314
+ "additionalProperties": false,
315
+ "required": [
316
+ "kind",
317
+ "storyType"
318
+ ]
319
+ },
320
+ {
321
+ "type": "object",
322
+ "properties": {
323
+ "kind": {
324
+ "const": "story",
325
+ "type": "string"
326
+ },
327
+ "storyType": {
328
+ "const": "headerFooterSlot",
329
+ "type": "string"
330
+ },
331
+ "section": {
332
+ "$ref": "#/$defs/SectionAddress"
333
+ },
334
+ "headerFooterKind": {
335
+ "enum": [
336
+ "header",
337
+ "footer"
338
+ ]
339
+ },
340
+ "variant": {
341
+ "enum": [
342
+ "default",
343
+ "first",
344
+ "even"
345
+ ]
346
+ },
347
+ "resolution": {
348
+ "enum": [
349
+ "effective",
350
+ "explicit"
351
+ ]
352
+ },
353
+ "onWrite": {
354
+ "enum": [
355
+ "materializeIfInherited",
356
+ "editResolvedPart",
357
+ "error"
358
+ ]
359
+ }
360
+ },
361
+ "additionalProperties": false,
362
+ "required": [
363
+ "kind",
364
+ "storyType",
365
+ "section",
366
+ "headerFooterKind",
367
+ "variant"
368
+ ]
369
+ },
370
+ {
371
+ "type": "object",
372
+ "properties": {
373
+ "kind": {
374
+ "const": "story",
375
+ "type": "string"
376
+ },
377
+ "storyType": {
378
+ "const": "headerFooterPart",
379
+ "type": "string"
380
+ },
381
+ "refId": {
382
+ "type": "string"
383
+ }
384
+ },
385
+ "additionalProperties": false,
386
+ "required": [
387
+ "kind",
388
+ "storyType",
389
+ "refId"
390
+ ]
391
+ },
392
+ {
393
+ "type": "object",
394
+ "properties": {
395
+ "kind": {
396
+ "const": "story",
397
+ "type": "string"
398
+ },
399
+ "storyType": {
400
+ "const": "footnote",
401
+ "type": "string"
402
+ },
403
+ "noteId": {
404
+ "type": "string"
405
+ }
406
+ },
407
+ "additionalProperties": false,
408
+ "required": [
409
+ "kind",
410
+ "storyType",
411
+ "noteId"
412
+ ]
413
+ },
414
+ {
415
+ "type": "object",
416
+ "properties": {
417
+ "kind": {
418
+ "const": "story",
419
+ "type": "string"
420
+ },
421
+ "storyType": {
422
+ "const": "endnote",
423
+ "type": "string"
424
+ },
425
+ "noteId": {
426
+ "type": "string"
427
+ }
428
+ },
429
+ "additionalProperties": false,
430
+ "required": [
431
+ "kind",
432
+ "storyType",
433
+ "noteId"
434
+ ]
435
+ },
436
+ {
437
+ "type": "object",
438
+ "properties": {
439
+ "kind": {
440
+ "const": "story",
441
+ "type": "string"
442
+ },
443
+ "storyType": {
444
+ "const": "textbox",
445
+ "type": "string"
446
+ },
447
+ "textboxId": {
448
+ "type": "string"
449
+ }
450
+ },
451
+ "additionalProperties": false,
452
+ "required": [
453
+ "kind",
454
+ "storyType",
455
+ "textboxId"
456
+ ]
457
+ }
458
+ ]
459
+ },
460
+ "TextCoordinateSpace": {
461
+ "enum": [
462
+ "visible",
463
+ "tracked"
464
+ ]
465
+ }
466
+ }
117
467
  },
118
468
  "mutates": false,
119
469
  "operations": [
@@ -893,39 +1243,425 @@
893
1243
  "required": [
894
1244
  "action"
895
1245
  ],
896
- "additionalProperties": false
897
- },
898
- "mutates": true,
899
- "operations": [
900
- {
901
- "operationId": "doc.insert",
902
- "intentAction": "insert",
903
- "requiredOneOf": [
904
- [
905
- "target",
906
- "value"
907
- ],
908
- [
909
- "ref",
910
- "value"
911
- ],
912
- [
913
- "value"
914
- ],
915
- [
916
- "target",
917
- "value",
918
- "type"
919
- ],
920
- [
921
- "ref",
922
- "value",
923
- "type"
924
- ],
925
- [
926
- "value",
927
- "type"
928
- ],
1246
+ "additionalProperties": false,
1247
+ "$defs": {
1248
+ "BlockNodeAddress": {
1249
+ "type": "object",
1250
+ "properties": {
1251
+ "kind": {
1252
+ "const": "block",
1253
+ "type": "string"
1254
+ },
1255
+ "nodeType": {
1256
+ "enum": [
1257
+ "paragraph",
1258
+ "heading",
1259
+ "listItem",
1260
+ "table",
1261
+ "tableRow",
1262
+ "tableCell",
1263
+ "tableOfContents",
1264
+ "image",
1265
+ "sdt"
1266
+ ]
1267
+ },
1268
+ "nodeId": {
1269
+ "type": "string"
1270
+ },
1271
+ "story": {
1272
+ "$ref": "#/$defs/StoryLocator"
1273
+ }
1274
+ },
1275
+ "additionalProperties": false,
1276
+ "required": [
1277
+ "kind",
1278
+ "nodeType",
1279
+ "nodeId"
1280
+ ]
1281
+ },
1282
+ "DeletableBlockNodeAddress": {
1283
+ "type": "object",
1284
+ "properties": {
1285
+ "kind": {
1286
+ "const": "block",
1287
+ "type": "string"
1288
+ },
1289
+ "nodeType": {
1290
+ "enum": [
1291
+ "paragraph",
1292
+ "heading",
1293
+ "listItem",
1294
+ "table",
1295
+ "sdt"
1296
+ ]
1297
+ },
1298
+ "nodeId": {
1299
+ "type": "string"
1300
+ },
1301
+ "story": {
1302
+ "$ref": "#/$defs/StoryLocator"
1303
+ }
1304
+ },
1305
+ "additionalProperties": false,
1306
+ "required": [
1307
+ "kind",
1308
+ "nodeType",
1309
+ "nodeId"
1310
+ ]
1311
+ },
1312
+ "DeleteBehavior": {
1313
+ "enum": [
1314
+ "selection",
1315
+ "exact"
1316
+ ]
1317
+ },
1318
+ "SDProjectionReviewMode": {
1319
+ "enum": [
1320
+ "final",
1321
+ "original",
1322
+ "redline"
1323
+ ]
1324
+ },
1325
+ "SDProjectionScope": {
1326
+ "oneOf": [
1327
+ {
1328
+ "$ref": "#/$defs/BlockNodeAddress"
1329
+ },
1330
+ {
1331
+ "$ref": "#/$defs/SelectionTarget"
1332
+ }
1333
+ ]
1334
+ },
1335
+ "SectionAddress": {
1336
+ "type": "object",
1337
+ "properties": {
1338
+ "kind": {
1339
+ "const": "section",
1340
+ "type": "string"
1341
+ },
1342
+ "sectionId": {
1343
+ "type": "string"
1344
+ }
1345
+ },
1346
+ "additionalProperties": false,
1347
+ "required": [
1348
+ "kind",
1349
+ "sectionId"
1350
+ ]
1351
+ },
1352
+ "SelectionEdgeNodeAddress": {
1353
+ "type": "object",
1354
+ "properties": {
1355
+ "kind": {
1356
+ "const": "block",
1357
+ "type": "string"
1358
+ },
1359
+ "nodeType": {
1360
+ "enum": [
1361
+ "paragraph",
1362
+ "heading",
1363
+ "listItem",
1364
+ "table",
1365
+ "tableOfContents",
1366
+ "sdt",
1367
+ "image"
1368
+ ]
1369
+ },
1370
+ "nodeId": {
1371
+ "type": "string"
1372
+ },
1373
+ "story": {
1374
+ "$ref": "#/$defs/StoryLocator"
1375
+ }
1376
+ },
1377
+ "additionalProperties": false,
1378
+ "required": [
1379
+ "kind",
1380
+ "nodeType",
1381
+ "nodeId"
1382
+ ]
1383
+ },
1384
+ "SelectionPoint": {
1385
+ "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.",
1386
+ "oneOf": [
1387
+ {
1388
+ "type": "object",
1389
+ "properties": {
1390
+ "kind": {
1391
+ "const": "text",
1392
+ "type": "string"
1393
+ },
1394
+ "blockId": {
1395
+ "type": "string"
1396
+ },
1397
+ "offset": {
1398
+ "type": "integer",
1399
+ "minimum": 0
1400
+ },
1401
+ "story": {
1402
+ "$ref": "#/$defs/StoryLocator"
1403
+ }
1404
+ },
1405
+ "additionalProperties": false,
1406
+ "required": [
1407
+ "kind",
1408
+ "blockId",
1409
+ "offset"
1410
+ ]
1411
+ },
1412
+ {
1413
+ "type": "object",
1414
+ "properties": {
1415
+ "kind": {
1416
+ "const": "nodeEdge",
1417
+ "type": "string"
1418
+ },
1419
+ "node": {
1420
+ "$ref": "#/$defs/SelectionEdgeNodeAddress"
1421
+ },
1422
+ "edge": {
1423
+ "enum": [
1424
+ "before",
1425
+ "after"
1426
+ ]
1427
+ }
1428
+ },
1429
+ "additionalProperties": false,
1430
+ "required": [
1431
+ "kind",
1432
+ "node",
1433
+ "edge"
1434
+ ]
1435
+ }
1436
+ ]
1437
+ },
1438
+ "SelectionTarget": {
1439
+ "type": "object",
1440
+ "properties": {
1441
+ "kind": {
1442
+ "const": "selection",
1443
+ "type": "string"
1444
+ },
1445
+ "start": {
1446
+ "$ref": "#/$defs/SelectionPoint"
1447
+ },
1448
+ "end": {
1449
+ "$ref": "#/$defs/SelectionPoint"
1450
+ },
1451
+ "story": {
1452
+ "$ref": "#/$defs/StoryLocator"
1453
+ },
1454
+ "coordinateSpace": {
1455
+ "$ref": "#/$defs/TextCoordinateSpace"
1456
+ }
1457
+ },
1458
+ "additionalProperties": false,
1459
+ "required": [
1460
+ "kind",
1461
+ "start",
1462
+ "end"
1463
+ ]
1464
+ },
1465
+ "StoryLocator": {
1466
+ "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.",
1467
+ "oneOf": [
1468
+ {
1469
+ "type": "object",
1470
+ "properties": {
1471
+ "kind": {
1472
+ "const": "story",
1473
+ "type": "string"
1474
+ },
1475
+ "storyType": {
1476
+ "const": "body",
1477
+ "type": "string"
1478
+ }
1479
+ },
1480
+ "additionalProperties": false,
1481
+ "required": [
1482
+ "kind",
1483
+ "storyType"
1484
+ ]
1485
+ },
1486
+ {
1487
+ "type": "object",
1488
+ "properties": {
1489
+ "kind": {
1490
+ "const": "story",
1491
+ "type": "string"
1492
+ },
1493
+ "storyType": {
1494
+ "const": "headerFooterSlot",
1495
+ "type": "string"
1496
+ },
1497
+ "section": {
1498
+ "$ref": "#/$defs/SectionAddress"
1499
+ },
1500
+ "headerFooterKind": {
1501
+ "enum": [
1502
+ "header",
1503
+ "footer"
1504
+ ]
1505
+ },
1506
+ "variant": {
1507
+ "enum": [
1508
+ "default",
1509
+ "first",
1510
+ "even"
1511
+ ]
1512
+ },
1513
+ "resolution": {
1514
+ "enum": [
1515
+ "effective",
1516
+ "explicit"
1517
+ ]
1518
+ },
1519
+ "onWrite": {
1520
+ "enum": [
1521
+ "materializeIfInherited",
1522
+ "editResolvedPart",
1523
+ "error"
1524
+ ]
1525
+ }
1526
+ },
1527
+ "additionalProperties": false,
1528
+ "required": [
1529
+ "kind",
1530
+ "storyType",
1531
+ "section",
1532
+ "headerFooterKind",
1533
+ "variant"
1534
+ ]
1535
+ },
1536
+ {
1537
+ "type": "object",
1538
+ "properties": {
1539
+ "kind": {
1540
+ "const": "story",
1541
+ "type": "string"
1542
+ },
1543
+ "storyType": {
1544
+ "const": "headerFooterPart",
1545
+ "type": "string"
1546
+ },
1547
+ "refId": {
1548
+ "type": "string"
1549
+ }
1550
+ },
1551
+ "additionalProperties": false,
1552
+ "required": [
1553
+ "kind",
1554
+ "storyType",
1555
+ "refId"
1556
+ ]
1557
+ },
1558
+ {
1559
+ "type": "object",
1560
+ "properties": {
1561
+ "kind": {
1562
+ "const": "story",
1563
+ "type": "string"
1564
+ },
1565
+ "storyType": {
1566
+ "const": "footnote",
1567
+ "type": "string"
1568
+ },
1569
+ "noteId": {
1570
+ "type": "string"
1571
+ }
1572
+ },
1573
+ "additionalProperties": false,
1574
+ "required": [
1575
+ "kind",
1576
+ "storyType",
1577
+ "noteId"
1578
+ ]
1579
+ },
1580
+ {
1581
+ "type": "object",
1582
+ "properties": {
1583
+ "kind": {
1584
+ "const": "story",
1585
+ "type": "string"
1586
+ },
1587
+ "storyType": {
1588
+ "const": "endnote",
1589
+ "type": "string"
1590
+ },
1591
+ "noteId": {
1592
+ "type": "string"
1593
+ }
1594
+ },
1595
+ "additionalProperties": false,
1596
+ "required": [
1597
+ "kind",
1598
+ "storyType",
1599
+ "noteId"
1600
+ ]
1601
+ },
1602
+ {
1603
+ "type": "object",
1604
+ "properties": {
1605
+ "kind": {
1606
+ "const": "story",
1607
+ "type": "string"
1608
+ },
1609
+ "storyType": {
1610
+ "const": "textbox",
1611
+ "type": "string"
1612
+ },
1613
+ "textboxId": {
1614
+ "type": "string"
1615
+ }
1616
+ },
1617
+ "additionalProperties": false,
1618
+ "required": [
1619
+ "kind",
1620
+ "storyType",
1621
+ "textboxId"
1622
+ ]
1623
+ }
1624
+ ]
1625
+ },
1626
+ "TextCoordinateSpace": {
1627
+ "enum": [
1628
+ "visible",
1629
+ "tracked"
1630
+ ]
1631
+ }
1632
+ }
1633
+ },
1634
+ "mutates": true,
1635
+ "operations": [
1636
+ {
1637
+ "operationId": "doc.insert",
1638
+ "intentAction": "insert",
1639
+ "requiredOneOf": [
1640
+ [
1641
+ "target",
1642
+ "value"
1643
+ ],
1644
+ [
1645
+ "ref",
1646
+ "value"
1647
+ ],
1648
+ [
1649
+ "value"
1650
+ ],
1651
+ [
1652
+ "target",
1653
+ "value",
1654
+ "type"
1655
+ ],
1656
+ [
1657
+ "ref",
1658
+ "value",
1659
+ "type"
1660
+ ],
1661
+ [
1662
+ "value",
1663
+ "type"
1664
+ ],
929
1665
  [
930
1666
  "content"
931
1667
  ]
@@ -1925,271 +2661,645 @@
1925
2661
  }
1926
2662
  ]
1927
2663
  },
1928
- "fontSizeCs": {
1929
- "oneOf": [
1930
- {
1931
- "type": "number"
1932
- },
1933
- {
1934
- "type": "null"
1935
- }
1936
- ]
2664
+ "fontSizeCs": {
2665
+ "oneOf": [
2666
+ {
2667
+ "type": "number"
2668
+ },
2669
+ {
2670
+ "type": "null"
2671
+ }
2672
+ ]
2673
+ },
2674
+ "ligatures": {
2675
+ "oneOf": [
2676
+ {
2677
+ "type": "string",
2678
+ "minLength": 1
2679
+ },
2680
+ {
2681
+ "type": "null"
2682
+ }
2683
+ ]
2684
+ },
2685
+ "numForm": {
2686
+ "oneOf": [
2687
+ {
2688
+ "type": "string",
2689
+ "minLength": 1
2690
+ },
2691
+ {
2692
+ "type": "null"
2693
+ }
2694
+ ]
2695
+ },
2696
+ "numSpacing": {
2697
+ "oneOf": [
2698
+ {
2699
+ "type": "string",
2700
+ "minLength": 1
2701
+ },
2702
+ {
2703
+ "type": "null"
2704
+ }
2705
+ ]
2706
+ },
2707
+ "stylisticSets": {
2708
+ "oneOf": [
2709
+ {
2710
+ "type": "array",
2711
+ "items": {
2712
+ "type": "object",
2713
+ "properties": {
2714
+ "id": {
2715
+ "type": "number"
2716
+ },
2717
+ "val": {
2718
+ "type": "boolean"
2719
+ }
2720
+ },
2721
+ "required": [
2722
+ "id"
2723
+ ],
2724
+ "additionalProperties": false
2725
+ },
2726
+ "minItems": 1
2727
+ },
2728
+ {
2729
+ "type": "null"
2730
+ }
2731
+ ]
2732
+ },
2733
+ "contextualAlternates": {
2734
+ "oneOf": [
2735
+ {
2736
+ "type": "boolean"
2737
+ },
2738
+ {
2739
+ "type": "null"
2740
+ }
2741
+ ]
2742
+ }
2743
+ },
2744
+ "additionalProperties": false,
2745
+ "minProperties": 1,
2746
+ "description": "Inline formatting properties to apply. Set a property to apply it, use null to clear it. Example: {bold: true, italic: true} or {bold: null} to remove bold. Only for action 'inline'. Omit for other actions."
2747
+ },
2748
+ "ref": {
2749
+ "type": "string",
2750
+ "description": "Handle ref string from a superdoc_search result. Pass the handle.ref value directly (e.g. 'text:eyJ...'). Preferred over 'target' for inline formatting. Only for action 'inline'. Omit for other actions."
2751
+ },
2752
+ "styleId": {
2753
+ "anyOf": [
2754
+ {
2755
+ "type": "string",
2756
+ "minLength": 1,
2757
+ "description": "Named paragraph style ID (e.g. 'Normal', 'Heading1', 'BodyText'). Use superdoc_search to find a nearby paragraph, then inspect its style to determine the correct styleId."
2758
+ },
2759
+ {
2760
+ "type": "string",
2761
+ "minLength": 1,
2762
+ "description": "Named paragraph style ID (e.g. 'Normal', 'Heading1'). Unlike setStyle, existing run formatting is preserved."
2763
+ }
2764
+ ],
2765
+ "description": "Named paragraph style ID (e.g. 'Normal', 'Heading1', 'BodyText'). Use superdoc_search to find a nearby paragraph, then inspect its style to determine the correct styleId. Required for action 'set_style_ref'."
2766
+ },
2767
+ "role": {
2768
+ "anyOf": [
2769
+ {
2770
+ "type": "object",
2771
+ "properties": {
2772
+ "kind": {
2773
+ "const": "defaultParagraph",
2774
+ "type": "string"
2775
+ }
2776
+ },
2777
+ "additionalProperties": false,
2778
+ "required": [
2779
+ "kind"
2780
+ ]
2781
+ },
2782
+ {
2783
+ "type": "object",
2784
+ "properties": {
2785
+ "kind": {
2786
+ "const": "heading",
2787
+ "type": "string"
2788
+ },
2789
+ "level": {
2790
+ "type": "integer",
2791
+ "minimum": 1,
2792
+ "maximum": 9
2793
+ }
2794
+ },
2795
+ "additionalProperties": false,
2796
+ "required": [
2797
+ "kind",
2798
+ "level"
2799
+ ]
2800
+ },
2801
+ {
2802
+ "type": "object",
2803
+ "properties": {
2804
+ "kind": {
2805
+ "const": "title",
2806
+ "type": "string"
2807
+ }
2808
+ },
2809
+ "additionalProperties": false,
2810
+ "required": [
2811
+ "kind"
2812
+ ]
2813
+ },
2814
+ {
2815
+ "type": "object",
2816
+ "properties": {
2817
+ "kind": {
2818
+ "const": "subtitle",
2819
+ "type": "string"
2820
+ }
2821
+ },
2822
+ "additionalProperties": false,
2823
+ "required": [
2824
+ "kind"
2825
+ ]
2826
+ }
2827
+ ],
2828
+ "description": "Semantic built-in style intent, resolved to the document authored style identity. Only for action 'set_style'. Omit for other actions."
2829
+ },
2830
+ "alignment": {
2831
+ "enum": [
2832
+ "left",
2833
+ "center",
2834
+ "right",
2835
+ "justify"
2836
+ ],
2837
+ "description": "Visual paragraph alignment. In RTL paragraphs, 'left' stores w:jc='right' and 'right' stores w:jc='left' so Word displays the requested side. Required for action 'set_alignment'."
2838
+ },
2839
+ "left": {
2840
+ "type": "integer",
2841
+ "description": "Left indentation in twips (1440 = 1 inch). Only for action 'set_indentation'. Omit for other actions."
2842
+ },
2843
+ "right": {
2844
+ "type": "integer",
2845
+ "description": "Right indentation in twips (1440 = 1 inch). Only for action 'set_indentation'. Omit for other actions."
2846
+ },
2847
+ "firstLine": {
2848
+ "type": "integer",
2849
+ "minimum": 0,
2850
+ "description": "First line indent in twips. Cannot be combined with hanging. Only for action 'set_indentation'. Omit for other actions."
2851
+ },
2852
+ "hanging": {
2853
+ "type": "integer",
2854
+ "minimum": 0,
2855
+ "description": "Hanging indent in twips. Cannot be combined with firstLine. Only for action 'set_indentation'. Omit for other actions."
2856
+ },
2857
+ "before": {
2858
+ "type": "integer",
2859
+ "minimum": 0,
2860
+ "description": "Space before paragraph in twips (20 twips = 1pt). Only for action 'set_spacing'. Omit for other actions."
2861
+ },
2862
+ "after": {
2863
+ "type": "integer",
2864
+ "minimum": 0,
2865
+ "description": "Space after paragraph in twips (20 twips = 1pt). Only for action 'set_spacing'. Omit for other actions."
2866
+ },
2867
+ "line": {
2868
+ "type": "integer",
2869
+ "minimum": 1,
2870
+ "description": "Line spacing value. Meaning depends on lineRule. Must be provided together with lineRule. Only for action 'set_spacing'. Omit for other actions."
2871
+ },
2872
+ "lineRule": {
2873
+ "enum": [
2874
+ "auto",
2875
+ "exact",
2876
+ "atLeast"
2877
+ ],
2878
+ "description": "Line spacing rule. Required when 'line' is set. Only for action 'set_spacing'. Omit for other actions."
2879
+ },
2880
+ "contextualSpacing": {
2881
+ "type": "boolean",
2882
+ "description": "Only for action 'set_flow_options'. Omit for other actions."
2883
+ },
2884
+ "pageBreakBefore": {
2885
+ "type": "boolean",
2886
+ "description": "Only for action 'set_flow_options'. Omit for other actions."
2887
+ },
2888
+ "suppressAutoHyphens": {
2889
+ "type": "boolean",
2890
+ "description": "Only for action 'set_flow_options'. Omit for other actions."
2891
+ },
2892
+ "autoSpaceDE": {
2893
+ "type": "boolean",
2894
+ "description": "Only for action 'set_flow_options'. Omit for other actions."
2895
+ },
2896
+ "autoSpaceDN": {
2897
+ "type": "boolean",
2898
+ "description": "Only for action 'set_flow_options'. Omit for other actions."
2899
+ },
2900
+ "adjustRightInd": {
2901
+ "type": "boolean",
2902
+ "description": "Only for action 'set_flow_options'. Omit for other actions."
2903
+ },
2904
+ "snapToGrid": {
2905
+ "type": "boolean",
2906
+ "description": "Only for action 'set_flow_options'. Omit for other actions."
2907
+ },
2908
+ "direction": {
2909
+ "type": "string",
2910
+ "enum": [
2911
+ "ltr",
2912
+ "rtl"
2913
+ ],
2914
+ "description": "Required for action 'set_direction'."
2915
+ },
2916
+ "alignmentPolicy": {
2917
+ "type": "string",
2918
+ "enum": [
2919
+ "preserve",
2920
+ "matchDirection"
2921
+ ],
2922
+ "description": "Only for action 'set_direction'. Omit for other actions."
2923
+ }
2924
+ },
2925
+ "required": [
2926
+ "action"
2927
+ ],
2928
+ "additionalProperties": false,
2929
+ "$defs": {
2930
+ "HeadingAddress": {
2931
+ "type": "object",
2932
+ "properties": {
2933
+ "kind": {
2934
+ "const": "block",
2935
+ "type": "string"
2936
+ },
2937
+ "nodeType": {
2938
+ "const": "heading",
2939
+ "type": "string"
1937
2940
  },
1938
- "ligatures": {
1939
- "oneOf": [
1940
- {
1941
- "type": "string",
1942
- "minLength": 1
1943
- },
1944
- {
1945
- "type": "null"
1946
- }
1947
- ]
2941
+ "nodeId": {
2942
+ "type": "string"
1948
2943
  },
1949
- "numForm": {
1950
- "oneOf": [
1951
- {
1952
- "type": "string",
1953
- "minLength": 1
1954
- },
1955
- {
1956
- "type": "null"
1957
- }
1958
- ]
2944
+ "story": {
2945
+ "$ref": "#/$defs/StoryLocator"
2946
+ }
2947
+ },
2948
+ "additionalProperties": false,
2949
+ "required": [
2950
+ "kind",
2951
+ "nodeType",
2952
+ "nodeId"
2953
+ ]
2954
+ },
2955
+ "ListItemAddress": {
2956
+ "type": "object",
2957
+ "properties": {
2958
+ "kind": {
2959
+ "const": "block",
2960
+ "type": "string"
1959
2961
  },
1960
- "numSpacing": {
1961
- "oneOf": [
1962
- {
1963
- "type": "string",
1964
- "minLength": 1
1965
- },
1966
- {
1967
- "type": "null"
1968
- }
2962
+ "nodeType": {
2963
+ "const": "listItem",
2964
+ "type": "string"
2965
+ },
2966
+ "nodeId": {
2967
+ "type": "string"
2968
+ },
2969
+ "story": {
2970
+ "$ref": "#/$defs/StoryLocator"
2971
+ }
2972
+ },
2973
+ "additionalProperties": false,
2974
+ "required": [
2975
+ "kind",
2976
+ "nodeType",
2977
+ "nodeId"
2978
+ ]
2979
+ },
2980
+ "ParagraphAddress": {
2981
+ "type": "object",
2982
+ "properties": {
2983
+ "kind": {
2984
+ "const": "block",
2985
+ "type": "string"
2986
+ },
2987
+ "nodeType": {
2988
+ "const": "paragraph",
2989
+ "type": "string"
2990
+ },
2991
+ "nodeId": {
2992
+ "type": "string"
2993
+ },
2994
+ "story": {
2995
+ "$ref": "#/$defs/StoryLocator"
2996
+ }
2997
+ },
2998
+ "additionalProperties": false,
2999
+ "required": [
3000
+ "kind",
3001
+ "nodeType",
3002
+ "nodeId"
3003
+ ]
3004
+ },
3005
+ "SectionAddress": {
3006
+ "type": "object",
3007
+ "properties": {
3008
+ "kind": {
3009
+ "const": "section",
3010
+ "type": "string"
3011
+ },
3012
+ "sectionId": {
3013
+ "type": "string"
3014
+ }
3015
+ },
3016
+ "additionalProperties": false,
3017
+ "required": [
3018
+ "kind",
3019
+ "sectionId"
3020
+ ]
3021
+ },
3022
+ "SelectionEdgeNodeAddress": {
3023
+ "type": "object",
3024
+ "properties": {
3025
+ "kind": {
3026
+ "const": "block",
3027
+ "type": "string"
3028
+ },
3029
+ "nodeType": {
3030
+ "enum": [
3031
+ "paragraph",
3032
+ "heading",
3033
+ "listItem",
3034
+ "table",
3035
+ "tableOfContents",
3036
+ "sdt",
3037
+ "image"
1969
3038
  ]
1970
3039
  },
1971
- "stylisticSets": {
1972
- "oneOf": [
1973
- {
1974
- "type": "array",
1975
- "items": {
1976
- "type": "object",
1977
- "properties": {
1978
- "id": {
1979
- "type": "number"
1980
- },
1981
- "val": {
1982
- "type": "boolean"
1983
- }
1984
- },
1985
- "required": [
1986
- "id"
1987
- ],
1988
- "additionalProperties": false
1989
- },
1990
- "minItems": 1
3040
+ "nodeId": {
3041
+ "type": "string"
3042
+ },
3043
+ "story": {
3044
+ "$ref": "#/$defs/StoryLocator"
3045
+ }
3046
+ },
3047
+ "additionalProperties": false,
3048
+ "required": [
3049
+ "kind",
3050
+ "nodeType",
3051
+ "nodeId"
3052
+ ]
3053
+ },
3054
+ "SelectionPoint": {
3055
+ "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.",
3056
+ "oneOf": [
3057
+ {
3058
+ "type": "object",
3059
+ "properties": {
3060
+ "kind": {
3061
+ "const": "text",
3062
+ "type": "string"
1991
3063
  },
1992
- {
1993
- "type": "null"
3064
+ "blockId": {
3065
+ "type": "string"
3066
+ },
3067
+ "offset": {
3068
+ "type": "integer",
3069
+ "minimum": 0
3070
+ },
3071
+ "story": {
3072
+ "$ref": "#/$defs/StoryLocator"
1994
3073
  }
3074
+ },
3075
+ "additionalProperties": false,
3076
+ "required": [
3077
+ "kind",
3078
+ "blockId",
3079
+ "offset"
1995
3080
  ]
1996
3081
  },
1997
- "contextualAlternates": {
1998
- "oneOf": [
1999
- {
2000
- "type": "boolean"
3082
+ {
3083
+ "type": "object",
3084
+ "properties": {
3085
+ "kind": {
3086
+ "const": "nodeEdge",
3087
+ "type": "string"
2001
3088
  },
2002
- {
2003
- "type": "null"
3089
+ "node": {
3090
+ "$ref": "#/$defs/SelectionEdgeNodeAddress"
3091
+ },
3092
+ "edge": {
3093
+ "enum": [
3094
+ "before",
3095
+ "after"
3096
+ ]
2004
3097
  }
3098
+ },
3099
+ "additionalProperties": false,
3100
+ "required": [
3101
+ "kind",
3102
+ "node",
3103
+ "edge"
2005
3104
  ]
2006
3105
  }
3106
+ ]
3107
+ },
3108
+ "SelectionTarget": {
3109
+ "type": "object",
3110
+ "properties": {
3111
+ "kind": {
3112
+ "const": "selection",
3113
+ "type": "string"
3114
+ },
3115
+ "start": {
3116
+ "$ref": "#/$defs/SelectionPoint"
3117
+ },
3118
+ "end": {
3119
+ "$ref": "#/$defs/SelectionPoint"
3120
+ },
3121
+ "story": {
3122
+ "$ref": "#/$defs/StoryLocator"
3123
+ },
3124
+ "coordinateSpace": {
3125
+ "$ref": "#/$defs/TextCoordinateSpace"
3126
+ }
2007
3127
  },
2008
3128
  "additionalProperties": false,
2009
- "minProperties": 1,
2010
- "description": "Inline formatting properties to apply. Set a property to apply it, use null to clear it. Example: {bold: true, italic: true} or {bold: null} to remove bold. Only for action 'inline'. Omit for other actions."
2011
- },
2012
- "ref": {
2013
- "type": "string",
2014
- "description": "Handle ref string from a superdoc_search result. Pass the handle.ref value directly (e.g. 'text:eyJ...'). Preferred over 'target' for inline formatting. Only for action 'inline'. Omit for other actions."
3129
+ "required": [
3130
+ "kind",
3131
+ "start",
3132
+ "end"
3133
+ ]
2015
3134
  },
2016
- "styleId": {
2017
- "anyOf": [
3135
+ "StoryLocator": {
3136
+ "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.",
3137
+ "oneOf": [
2018
3138
  {
2019
- "type": "string",
2020
- "minLength": 1,
2021
- "description": "Named paragraph style ID (e.g. 'Normal', 'Heading1', 'BodyText'). Use superdoc_search to find a nearby paragraph, then inspect its style to determine the correct styleId."
3139
+ "type": "object",
3140
+ "properties": {
3141
+ "kind": {
3142
+ "const": "story",
3143
+ "type": "string"
3144
+ },
3145
+ "storyType": {
3146
+ "const": "body",
3147
+ "type": "string"
3148
+ }
3149
+ },
3150
+ "additionalProperties": false,
3151
+ "required": [
3152
+ "kind",
3153
+ "storyType"
3154
+ ]
3155
+ },
3156
+ {
3157
+ "type": "object",
3158
+ "properties": {
3159
+ "kind": {
3160
+ "const": "story",
3161
+ "type": "string"
3162
+ },
3163
+ "storyType": {
3164
+ "const": "headerFooterSlot",
3165
+ "type": "string"
3166
+ },
3167
+ "section": {
3168
+ "$ref": "#/$defs/SectionAddress"
3169
+ },
3170
+ "headerFooterKind": {
3171
+ "enum": [
3172
+ "header",
3173
+ "footer"
3174
+ ]
3175
+ },
3176
+ "variant": {
3177
+ "enum": [
3178
+ "default",
3179
+ "first",
3180
+ "even"
3181
+ ]
3182
+ },
3183
+ "resolution": {
3184
+ "enum": [
3185
+ "effective",
3186
+ "explicit"
3187
+ ]
3188
+ },
3189
+ "onWrite": {
3190
+ "enum": [
3191
+ "materializeIfInherited",
3192
+ "editResolvedPart",
3193
+ "error"
3194
+ ]
3195
+ }
3196
+ },
3197
+ "additionalProperties": false,
3198
+ "required": [
3199
+ "kind",
3200
+ "storyType",
3201
+ "section",
3202
+ "headerFooterKind",
3203
+ "variant"
3204
+ ]
2022
3205
  },
2023
- {
2024
- "type": "string",
2025
- "minLength": 1,
2026
- "description": "Named paragraph style ID (e.g. 'Normal', 'Heading1'). Unlike setStyle, existing run formatting is preserved."
2027
- }
2028
- ],
2029
- "description": "Named paragraph style ID (e.g. 'Normal', 'Heading1', 'BodyText'). Use superdoc_search to find a nearby paragraph, then inspect its style to determine the correct styleId. Required for action 'set_style_ref'."
2030
- },
2031
- "role": {
2032
- "anyOf": [
2033
3206
  {
2034
3207
  "type": "object",
2035
3208
  "properties": {
2036
3209
  "kind": {
2037
- "const": "defaultParagraph",
3210
+ "const": "story",
3211
+ "type": "string"
3212
+ },
3213
+ "storyType": {
3214
+ "const": "headerFooterPart",
3215
+ "type": "string"
3216
+ },
3217
+ "refId": {
2038
3218
  "type": "string"
2039
3219
  }
2040
3220
  },
2041
3221
  "additionalProperties": false,
2042
3222
  "required": [
2043
- "kind"
3223
+ "kind",
3224
+ "storyType",
3225
+ "refId"
2044
3226
  ]
2045
3227
  },
2046
3228
  {
2047
3229
  "type": "object",
2048
3230
  "properties": {
2049
3231
  "kind": {
2050
- "const": "heading",
3232
+ "const": "story",
2051
3233
  "type": "string"
2052
3234
  },
2053
- "level": {
2054
- "type": "integer",
2055
- "minimum": 1,
2056
- "maximum": 9
3235
+ "storyType": {
3236
+ "const": "footnote",
3237
+ "type": "string"
3238
+ },
3239
+ "noteId": {
3240
+ "type": "string"
2057
3241
  }
2058
3242
  },
2059
3243
  "additionalProperties": false,
2060
3244
  "required": [
2061
3245
  "kind",
2062
- "level"
3246
+ "storyType",
3247
+ "noteId"
2063
3248
  ]
2064
3249
  },
2065
3250
  {
2066
3251
  "type": "object",
2067
3252
  "properties": {
2068
3253
  "kind": {
2069
- "const": "title",
3254
+ "const": "story",
3255
+ "type": "string"
3256
+ },
3257
+ "storyType": {
3258
+ "const": "endnote",
3259
+ "type": "string"
3260
+ },
3261
+ "noteId": {
2070
3262
  "type": "string"
2071
3263
  }
2072
3264
  },
2073
3265
  "additionalProperties": false,
2074
3266
  "required": [
2075
- "kind"
3267
+ "kind",
3268
+ "storyType",
3269
+ "noteId"
2076
3270
  ]
2077
3271
  },
2078
3272
  {
2079
3273
  "type": "object",
2080
3274
  "properties": {
2081
3275
  "kind": {
2082
- "const": "subtitle",
3276
+ "const": "story",
3277
+ "type": "string"
3278
+ },
3279
+ "storyType": {
3280
+ "const": "textbox",
3281
+ "type": "string"
3282
+ },
3283
+ "textboxId": {
2083
3284
  "type": "string"
2084
3285
  }
2085
3286
  },
2086
3287
  "additionalProperties": false,
2087
3288
  "required": [
2088
- "kind"
3289
+ "kind",
3290
+ "storyType",
3291
+ "textboxId"
2089
3292
  ]
2090
3293
  }
2091
- ],
2092
- "description": "Semantic built-in style intent, resolved to the document authored style identity. Only for action 'set_style'. Omit for other actions."
2093
- },
2094
- "alignment": {
2095
- "enum": [
2096
- "left",
2097
- "center",
2098
- "right",
2099
- "justify"
2100
- ],
2101
- "description": "Visual paragraph alignment. In RTL paragraphs, 'left' stores w:jc='right' and 'right' stores w:jc='left' so Word displays the requested side. Required for action 'set_alignment'."
2102
- },
2103
- "left": {
2104
- "type": "integer",
2105
- "description": "Left indentation in twips (1440 = 1 inch). Only for action 'set_indentation'. Omit for other actions."
2106
- },
2107
- "right": {
2108
- "type": "integer",
2109
- "description": "Right indentation in twips (1440 = 1 inch). Only for action 'set_indentation'. Omit for other actions."
2110
- },
2111
- "firstLine": {
2112
- "type": "integer",
2113
- "minimum": 0,
2114
- "description": "First line indent in twips. Cannot be combined with hanging. Only for action 'set_indentation'. Omit for other actions."
2115
- },
2116
- "hanging": {
2117
- "type": "integer",
2118
- "minimum": 0,
2119
- "description": "Hanging indent in twips. Cannot be combined with firstLine. Only for action 'set_indentation'. Omit for other actions."
2120
- },
2121
- "before": {
2122
- "type": "integer",
2123
- "minimum": 0,
2124
- "description": "Space before paragraph in twips (20 twips = 1pt). Only for action 'set_spacing'. Omit for other actions."
2125
- },
2126
- "after": {
2127
- "type": "integer",
2128
- "minimum": 0,
2129
- "description": "Space after paragraph in twips (20 twips = 1pt). Only for action 'set_spacing'. Omit for other actions."
2130
- },
2131
- "line": {
2132
- "type": "integer",
2133
- "minimum": 1,
2134
- "description": "Line spacing value. Meaning depends on lineRule. Must be provided together with lineRule. Only for action 'set_spacing'. Omit for other actions."
2135
- },
2136
- "lineRule": {
2137
- "enum": [
2138
- "auto",
2139
- "exact",
2140
- "atLeast"
2141
- ],
2142
- "description": "Line spacing rule. Required when 'line' is set. Only for action 'set_spacing'. Omit for other actions."
2143
- },
2144
- "contextualSpacing": {
2145
- "type": "boolean",
2146
- "description": "Only for action 'set_flow_options'. Omit for other actions."
2147
- },
2148
- "pageBreakBefore": {
2149
- "type": "boolean",
2150
- "description": "Only for action 'set_flow_options'. Omit for other actions."
2151
- },
2152
- "suppressAutoHyphens": {
2153
- "type": "boolean",
2154
- "description": "Only for action 'set_flow_options'. Omit for other actions."
2155
- },
2156
- "autoSpaceDE": {
2157
- "type": "boolean",
2158
- "description": "Only for action 'set_flow_options'. Omit for other actions."
2159
- },
2160
- "autoSpaceDN": {
2161
- "type": "boolean",
2162
- "description": "Only for action 'set_flow_options'. Omit for other actions."
2163
- },
2164
- "adjustRightInd": {
2165
- "type": "boolean",
2166
- "description": "Only for action 'set_flow_options'. Omit for other actions."
2167
- },
2168
- "snapToGrid": {
2169
- "type": "boolean",
2170
- "description": "Only for action 'set_flow_options'. Omit for other actions."
2171
- },
2172
- "direction": {
2173
- "type": "string",
2174
- "enum": [
2175
- "ltr",
2176
- "rtl"
2177
- ],
2178
- "description": "Required for action 'set_direction'."
3294
+ ]
2179
3295
  },
2180
- "alignmentPolicy": {
2181
- "type": "string",
3296
+ "TextCoordinateSpace": {
2182
3297
  "enum": [
2183
- "preserve",
2184
- "matchDirection"
2185
- ],
2186
- "description": "Only for action 'set_direction'. Omit for other actions."
3298
+ "visible",
3299
+ "tracked"
3300
+ ]
2187
3301
  }
2188
- },
2189
- "required": [
2190
- "action"
2191
- ],
2192
- "additionalProperties": false
3302
+ }
2193
3303
  },
2194
3304
  "mutates": true,
2195
3305
  "operations": [
@@ -2484,57 +3594,271 @@
2484
3594
  ]
2485
3595
  }
2486
3596
  ]
2487
- }
2488
- ],
2489
- "description": "Position: {kind:'documentEnd'} to append, {kind:'documentStart'} to prepend, or {kind:'before'|'after', target:{kind:'block', nodeType:'...', nodeId:'...'}} for relative placement."
2490
- },
2491
- "text": {
2492
- "anyOf": [
3597
+ }
3598
+ ],
3599
+ "description": "Position: {kind:'documentEnd'} to append, {kind:'documentStart'} to prepend, or {kind:'before'|'after', target:{kind:'block', nodeType:'...', nodeId:'...'}} for relative placement."
3600
+ },
3601
+ "text": {
3602
+ "anyOf": [
3603
+ {
3604
+ "type": "string",
3605
+ "description": "Paragraph text content. Each call creates ONE paragraph. For multiple items (e.g. list items), call superdoc_create separately for each item: do NOT use newlines to put multiple items in one paragraph."
3606
+ },
3607
+ {
3608
+ "type": "string",
3609
+ "description": "Heading text content."
3610
+ }
3611
+ ],
3612
+ "description": "Paragraph text content. Each call creates ONE paragraph. For multiple items (e.g. list items), call superdoc_create separately for each item: do NOT use newlines to put multiple items in one paragraph."
3613
+ },
3614
+ "input": {
3615
+ "anyOf": [
3616
+ {
3617
+ "type": "object",
3618
+ "description": "Full paragraph input as JSON (alternative to individual text/at params)."
3619
+ },
3620
+ {
3621
+ "type": "object",
3622
+ "description": "Full heading input as JSON (alternative to individual text/level/at params)."
3623
+ }
3624
+ ],
3625
+ "description": "Full paragraph input as JSON (alternative to individual text/at params)."
3626
+ },
3627
+ "level": {
3628
+ "type": "integer",
3629
+ "minimum": 1,
3630
+ "maximum": 6,
3631
+ "description": "Heading level (1-6). Required for action 'heading'."
3632
+ },
3633
+ "rows": {
3634
+ "type": "integer",
3635
+ "minimum": 1,
3636
+ "description": "Required for action 'table'."
3637
+ },
3638
+ "columns": {
3639
+ "type": "integer",
3640
+ "minimum": 1,
3641
+ "description": "Required for action 'table'."
3642
+ }
3643
+ },
3644
+ "required": [
3645
+ "action"
3646
+ ],
3647
+ "additionalProperties": false,
3648
+ "$defs": {
3649
+ "BlockNodeAddress": {
3650
+ "type": "object",
3651
+ "properties": {
3652
+ "kind": {
3653
+ "const": "block",
3654
+ "type": "string"
3655
+ },
3656
+ "nodeType": {
3657
+ "enum": [
3658
+ "paragraph",
3659
+ "heading",
3660
+ "listItem",
3661
+ "table",
3662
+ "tableRow",
3663
+ "tableCell",
3664
+ "tableOfContents",
3665
+ "image",
3666
+ "sdt"
3667
+ ]
3668
+ },
3669
+ "nodeId": {
3670
+ "type": "string"
3671
+ },
3672
+ "story": {
3673
+ "$ref": "#/$defs/StoryLocator"
3674
+ }
3675
+ },
3676
+ "additionalProperties": false,
3677
+ "required": [
3678
+ "kind",
3679
+ "nodeType",
3680
+ "nodeId"
3681
+ ]
3682
+ },
3683
+ "SectionAddress": {
3684
+ "type": "object",
3685
+ "properties": {
3686
+ "kind": {
3687
+ "const": "section",
3688
+ "type": "string"
3689
+ },
3690
+ "sectionId": {
3691
+ "type": "string"
3692
+ }
3693
+ },
3694
+ "additionalProperties": false,
3695
+ "required": [
3696
+ "kind",
3697
+ "sectionId"
3698
+ ]
3699
+ },
3700
+ "StoryLocator": {
3701
+ "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.",
3702
+ "oneOf": [
3703
+ {
3704
+ "type": "object",
3705
+ "properties": {
3706
+ "kind": {
3707
+ "const": "story",
3708
+ "type": "string"
3709
+ },
3710
+ "storyType": {
3711
+ "const": "body",
3712
+ "type": "string"
3713
+ }
3714
+ },
3715
+ "additionalProperties": false,
3716
+ "required": [
3717
+ "kind",
3718
+ "storyType"
3719
+ ]
3720
+ },
3721
+ {
3722
+ "type": "object",
3723
+ "properties": {
3724
+ "kind": {
3725
+ "const": "story",
3726
+ "type": "string"
3727
+ },
3728
+ "storyType": {
3729
+ "const": "headerFooterSlot",
3730
+ "type": "string"
3731
+ },
3732
+ "section": {
3733
+ "$ref": "#/$defs/SectionAddress"
3734
+ },
3735
+ "headerFooterKind": {
3736
+ "enum": [
3737
+ "header",
3738
+ "footer"
3739
+ ]
3740
+ },
3741
+ "variant": {
3742
+ "enum": [
3743
+ "default",
3744
+ "first",
3745
+ "even"
3746
+ ]
3747
+ },
3748
+ "resolution": {
3749
+ "enum": [
3750
+ "effective",
3751
+ "explicit"
3752
+ ]
3753
+ },
3754
+ "onWrite": {
3755
+ "enum": [
3756
+ "materializeIfInherited",
3757
+ "editResolvedPart",
3758
+ "error"
3759
+ ]
3760
+ }
3761
+ },
3762
+ "additionalProperties": false,
3763
+ "required": [
3764
+ "kind",
3765
+ "storyType",
3766
+ "section",
3767
+ "headerFooterKind",
3768
+ "variant"
3769
+ ]
3770
+ },
2493
3771
  {
2494
- "type": "string",
2495
- "description": "Paragraph text content. Each call creates ONE paragraph. For multiple items (e.g. list items), call superdoc_create separately for each item: do NOT use newlines to put multiple items in one paragraph."
3772
+ "type": "object",
3773
+ "properties": {
3774
+ "kind": {
3775
+ "const": "story",
3776
+ "type": "string"
3777
+ },
3778
+ "storyType": {
3779
+ "const": "headerFooterPart",
3780
+ "type": "string"
3781
+ },
3782
+ "refId": {
3783
+ "type": "string"
3784
+ }
3785
+ },
3786
+ "additionalProperties": false,
3787
+ "required": [
3788
+ "kind",
3789
+ "storyType",
3790
+ "refId"
3791
+ ]
2496
3792
  },
2497
3793
  {
2498
- "type": "string",
2499
- "description": "Heading text content."
2500
- }
2501
- ],
2502
- "description": "Paragraph text content. Each call creates ONE paragraph. For multiple items (e.g. list items), call superdoc_create separately for each item: do NOT use newlines to put multiple items in one paragraph."
2503
- },
2504
- "input": {
2505
- "anyOf": [
3794
+ "type": "object",
3795
+ "properties": {
3796
+ "kind": {
3797
+ "const": "story",
3798
+ "type": "string"
3799
+ },
3800
+ "storyType": {
3801
+ "const": "footnote",
3802
+ "type": "string"
3803
+ },
3804
+ "noteId": {
3805
+ "type": "string"
3806
+ }
3807
+ },
3808
+ "additionalProperties": false,
3809
+ "required": [
3810
+ "kind",
3811
+ "storyType",
3812
+ "noteId"
3813
+ ]
3814
+ },
2506
3815
  {
2507
3816
  "type": "object",
2508
- "description": "Full paragraph input as JSON (alternative to individual text/at params)."
3817
+ "properties": {
3818
+ "kind": {
3819
+ "const": "story",
3820
+ "type": "string"
3821
+ },
3822
+ "storyType": {
3823
+ "const": "endnote",
3824
+ "type": "string"
3825
+ },
3826
+ "noteId": {
3827
+ "type": "string"
3828
+ }
3829
+ },
3830
+ "additionalProperties": false,
3831
+ "required": [
3832
+ "kind",
3833
+ "storyType",
3834
+ "noteId"
3835
+ ]
2509
3836
  },
2510
3837
  {
2511
3838
  "type": "object",
2512
- "description": "Full heading input as JSON (alternative to individual text/level/at params)."
3839
+ "properties": {
3840
+ "kind": {
3841
+ "const": "story",
3842
+ "type": "string"
3843
+ },
3844
+ "storyType": {
3845
+ "const": "textbox",
3846
+ "type": "string"
3847
+ },
3848
+ "textboxId": {
3849
+ "type": "string"
3850
+ }
3851
+ },
3852
+ "additionalProperties": false,
3853
+ "required": [
3854
+ "kind",
3855
+ "storyType",
3856
+ "textboxId"
3857
+ ]
2513
3858
  }
2514
- ],
2515
- "description": "Full paragraph input as JSON (alternative to individual text/at params)."
2516
- },
2517
- "level": {
2518
- "type": "integer",
2519
- "minimum": 1,
2520
- "maximum": 6,
2521
- "description": "Heading level (1-6). Required for action 'heading'."
2522
- },
2523
- "rows": {
2524
- "type": "integer",
2525
- "minimum": 1,
2526
- "description": "Required for action 'table'."
2527
- },
2528
- "columns": {
2529
- "type": "integer",
2530
- "minimum": 1,
2531
- "description": "Required for action 'table'."
3859
+ ]
2532
3860
  }
2533
- },
2534
- "required": [
2535
- "action"
2536
- ],
2537
- "additionalProperties": false
3861
+ }
2538
3862
  },
2539
3863
  "mutates": true,
2540
3864
  "operations": [
@@ -2923,11 +4247,264 @@
2923
4247
  ],
2924
4248
  "description": "Numbering continuity: 'preserve' keeps numbering; 'none' restarts. Only for action 'set_type'. Omit for other actions."
2925
4249
  }
2926
- },
2927
- "required": [
2928
- "action"
2929
- ],
2930
- "additionalProperties": false
4250
+ },
4251
+ "required": [
4252
+ "action"
4253
+ ],
4254
+ "additionalProperties": false,
4255
+ "$defs": {
4256
+ "BlockAddress": {
4257
+ "type": "object",
4258
+ "properties": {
4259
+ "kind": {
4260
+ "const": "block",
4261
+ "type": "string"
4262
+ },
4263
+ "nodeType": {
4264
+ "const": "paragraph",
4265
+ "type": "string"
4266
+ },
4267
+ "nodeId": {
4268
+ "type": "string"
4269
+ }
4270
+ },
4271
+ "additionalProperties": false,
4272
+ "required": [
4273
+ "kind",
4274
+ "nodeType",
4275
+ "nodeId"
4276
+ ]
4277
+ },
4278
+ "BlockAddressOrRange": {
4279
+ "oneOf": [
4280
+ {
4281
+ "$ref": "#/$defs/BlockAddress"
4282
+ },
4283
+ {
4284
+ "$ref": "#/$defs/BlockRange"
4285
+ }
4286
+ ]
4287
+ },
4288
+ "BlockRange": {
4289
+ "type": "object",
4290
+ "properties": {
4291
+ "from": {
4292
+ "$ref": "#/$defs/BlockAddress"
4293
+ },
4294
+ "to": {
4295
+ "$ref": "#/$defs/BlockAddress"
4296
+ }
4297
+ },
4298
+ "additionalProperties": false,
4299
+ "required": [
4300
+ "from",
4301
+ "to"
4302
+ ]
4303
+ },
4304
+ "ListItemAddress": {
4305
+ "type": "object",
4306
+ "properties": {
4307
+ "kind": {
4308
+ "const": "block",
4309
+ "type": "string"
4310
+ },
4311
+ "nodeType": {
4312
+ "const": "listItem",
4313
+ "type": "string"
4314
+ },
4315
+ "nodeId": {
4316
+ "type": "string"
4317
+ },
4318
+ "story": {
4319
+ "$ref": "#/$defs/StoryLocator"
4320
+ }
4321
+ },
4322
+ "additionalProperties": false,
4323
+ "required": [
4324
+ "kind",
4325
+ "nodeType",
4326
+ "nodeId"
4327
+ ]
4328
+ },
4329
+ "SectionAddress": {
4330
+ "type": "object",
4331
+ "properties": {
4332
+ "kind": {
4333
+ "const": "section",
4334
+ "type": "string"
4335
+ },
4336
+ "sectionId": {
4337
+ "type": "string"
4338
+ }
4339
+ },
4340
+ "additionalProperties": false,
4341
+ "required": [
4342
+ "kind",
4343
+ "sectionId"
4344
+ ]
4345
+ },
4346
+ "StoryLocator": {
4347
+ "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.",
4348
+ "oneOf": [
4349
+ {
4350
+ "type": "object",
4351
+ "properties": {
4352
+ "kind": {
4353
+ "const": "story",
4354
+ "type": "string"
4355
+ },
4356
+ "storyType": {
4357
+ "const": "body",
4358
+ "type": "string"
4359
+ }
4360
+ },
4361
+ "additionalProperties": false,
4362
+ "required": [
4363
+ "kind",
4364
+ "storyType"
4365
+ ]
4366
+ },
4367
+ {
4368
+ "type": "object",
4369
+ "properties": {
4370
+ "kind": {
4371
+ "const": "story",
4372
+ "type": "string"
4373
+ },
4374
+ "storyType": {
4375
+ "const": "headerFooterSlot",
4376
+ "type": "string"
4377
+ },
4378
+ "section": {
4379
+ "$ref": "#/$defs/SectionAddress"
4380
+ },
4381
+ "headerFooterKind": {
4382
+ "enum": [
4383
+ "header",
4384
+ "footer"
4385
+ ]
4386
+ },
4387
+ "variant": {
4388
+ "enum": [
4389
+ "default",
4390
+ "first",
4391
+ "even"
4392
+ ]
4393
+ },
4394
+ "resolution": {
4395
+ "enum": [
4396
+ "effective",
4397
+ "explicit"
4398
+ ]
4399
+ },
4400
+ "onWrite": {
4401
+ "enum": [
4402
+ "materializeIfInherited",
4403
+ "editResolvedPart",
4404
+ "error"
4405
+ ]
4406
+ }
4407
+ },
4408
+ "additionalProperties": false,
4409
+ "required": [
4410
+ "kind",
4411
+ "storyType",
4412
+ "section",
4413
+ "headerFooterKind",
4414
+ "variant"
4415
+ ]
4416
+ },
4417
+ {
4418
+ "type": "object",
4419
+ "properties": {
4420
+ "kind": {
4421
+ "const": "story",
4422
+ "type": "string"
4423
+ },
4424
+ "storyType": {
4425
+ "const": "headerFooterPart",
4426
+ "type": "string"
4427
+ },
4428
+ "refId": {
4429
+ "type": "string"
4430
+ }
4431
+ },
4432
+ "additionalProperties": false,
4433
+ "required": [
4434
+ "kind",
4435
+ "storyType",
4436
+ "refId"
4437
+ ]
4438
+ },
4439
+ {
4440
+ "type": "object",
4441
+ "properties": {
4442
+ "kind": {
4443
+ "const": "story",
4444
+ "type": "string"
4445
+ },
4446
+ "storyType": {
4447
+ "const": "footnote",
4448
+ "type": "string"
4449
+ },
4450
+ "noteId": {
4451
+ "type": "string"
4452
+ }
4453
+ },
4454
+ "additionalProperties": false,
4455
+ "required": [
4456
+ "kind",
4457
+ "storyType",
4458
+ "noteId"
4459
+ ]
4460
+ },
4461
+ {
4462
+ "type": "object",
4463
+ "properties": {
4464
+ "kind": {
4465
+ "const": "story",
4466
+ "type": "string"
4467
+ },
4468
+ "storyType": {
4469
+ "const": "endnote",
4470
+ "type": "string"
4471
+ },
4472
+ "noteId": {
4473
+ "type": "string"
4474
+ }
4475
+ },
4476
+ "additionalProperties": false,
4477
+ "required": [
4478
+ "kind",
4479
+ "storyType",
4480
+ "noteId"
4481
+ ]
4482
+ },
4483
+ {
4484
+ "type": "object",
4485
+ "properties": {
4486
+ "kind": {
4487
+ "const": "story",
4488
+ "type": "string"
4489
+ },
4490
+ "storyType": {
4491
+ "const": "textbox",
4492
+ "type": "string"
4493
+ },
4494
+ "textboxId": {
4495
+ "type": "string"
4496
+ }
4497
+ },
4498
+ "additionalProperties": false,
4499
+ "required": [
4500
+ "kind",
4501
+ "storyType",
4502
+ "textboxId"
4503
+ ]
4504
+ }
4505
+ ]
4506
+ }
4507
+ }
2931
4508
  },
2932
4509
  "mutates": true,
2933
4510
  "operations": [
@@ -3205,27 +4782,438 @@
3205
4782
  ],
3206
4783
  "description": "Set comment status. Use 'resolved' to resolve a comment, or 'active' to reopen a previously resolved comment (lifecycle inverse). Only for action 'update'. Omit for other actions."
3207
4784
  },
3208
- "isInternal": {
3209
- "type": "boolean",
3210
- "description": "Legacy v1/document-api compatibility field. V2 adapters set or clear the target comment `sdcom:internal` attribute and preserve the field in the schema so v1 callers keep their input shape. Only for action 'update'. Omit for other actions."
4785
+ "isInternal": {
4786
+ "type": "boolean",
4787
+ "description": "Legacy v1/document-api compatibility field. V2 adapters set or clear the target comment `sdcom:internal` attribute and preserve the field in the schema so v1 callers keep their input shape. Only for action 'update'. Omit for other actions."
4788
+ },
4789
+ "includeResolved": {
4790
+ "type": "boolean",
4791
+ "description": "When true, includes resolved comments in results. Default: false. Only for action 'list'. Omit for other actions."
4792
+ },
4793
+ "limit": {
4794
+ "type": "integer",
4795
+ "description": "Maximum number of comments to return. Only for action 'list'. Omit for other actions."
4796
+ },
4797
+ "offset": {
4798
+ "type": "integer",
4799
+ "description": "Number of comments to skip for pagination. Only for action 'list'. Omit for other actions."
4800
+ }
4801
+ },
4802
+ "required": [
4803
+ "action"
4804
+ ],
4805
+ "additionalProperties": false,
4806
+ "$defs": {
4807
+ "CommentTrackedChangeTarget": {
4808
+ "type": "object",
4809
+ "properties": {
4810
+ "kind": {
4811
+ "const": "trackedChange",
4812
+ "description": "Optional discriminator. Omit it for the Labs-compatible { trackedChangeId } shape.",
4813
+ "type": "string"
4814
+ },
4815
+ "trackedChangeId": {
4816
+ "type": "string"
4817
+ },
4818
+ "side": {
4819
+ "enum": [
4820
+ "inserted",
4821
+ "deleted",
4822
+ "source",
4823
+ "destination"
4824
+ ],
4825
+ "description": "Which revision side to anchor the comment on. Optional for grouped replacements (defaults to inserted) and paired moves (defaults to destination); required for separate replacements where both sides are reviewed independently."
4826
+ },
4827
+ "story": {
4828
+ "$ref": "#/$defs/StoryLocator"
4829
+ }
4830
+ },
4831
+ "additionalProperties": false,
4832
+ "required": [
4833
+ "trackedChangeId"
4834
+ ]
4835
+ },
4836
+ "Range": {
4837
+ "type": "object",
4838
+ "properties": {
4839
+ "start": {
4840
+ "type": "integer"
4841
+ },
4842
+ "end": {
4843
+ "type": "integer"
4844
+ }
4845
+ },
4846
+ "additionalProperties": false,
4847
+ "required": [
4848
+ "start",
4849
+ "end"
4850
+ ]
4851
+ },
4852
+ "SectionAddress": {
4853
+ "type": "object",
4854
+ "properties": {
4855
+ "kind": {
4856
+ "const": "section",
4857
+ "type": "string"
4858
+ },
4859
+ "sectionId": {
4860
+ "type": "string"
4861
+ }
4862
+ },
4863
+ "additionalProperties": false,
4864
+ "required": [
4865
+ "kind",
4866
+ "sectionId"
4867
+ ]
4868
+ },
4869
+ "SelectionEdgeNodeAddress": {
4870
+ "type": "object",
4871
+ "properties": {
4872
+ "kind": {
4873
+ "const": "block",
4874
+ "type": "string"
4875
+ },
4876
+ "nodeType": {
4877
+ "enum": [
4878
+ "paragraph",
4879
+ "heading",
4880
+ "listItem",
4881
+ "table",
4882
+ "tableOfContents",
4883
+ "sdt",
4884
+ "image"
4885
+ ]
4886
+ },
4887
+ "nodeId": {
4888
+ "type": "string"
4889
+ },
4890
+ "story": {
4891
+ "$ref": "#/$defs/StoryLocator"
4892
+ }
4893
+ },
4894
+ "additionalProperties": false,
4895
+ "required": [
4896
+ "kind",
4897
+ "nodeType",
4898
+ "nodeId"
4899
+ ]
4900
+ },
4901
+ "SelectionPoint": {
4902
+ "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.",
4903
+ "oneOf": [
4904
+ {
4905
+ "type": "object",
4906
+ "properties": {
4907
+ "kind": {
4908
+ "const": "text",
4909
+ "type": "string"
4910
+ },
4911
+ "blockId": {
4912
+ "type": "string"
4913
+ },
4914
+ "offset": {
4915
+ "type": "integer",
4916
+ "minimum": 0
4917
+ },
4918
+ "story": {
4919
+ "$ref": "#/$defs/StoryLocator"
4920
+ }
4921
+ },
4922
+ "additionalProperties": false,
4923
+ "required": [
4924
+ "kind",
4925
+ "blockId",
4926
+ "offset"
4927
+ ]
4928
+ },
4929
+ {
4930
+ "type": "object",
4931
+ "properties": {
4932
+ "kind": {
4933
+ "const": "nodeEdge",
4934
+ "type": "string"
4935
+ },
4936
+ "node": {
4937
+ "$ref": "#/$defs/SelectionEdgeNodeAddress"
4938
+ },
4939
+ "edge": {
4940
+ "enum": [
4941
+ "before",
4942
+ "after"
4943
+ ]
4944
+ }
4945
+ },
4946
+ "additionalProperties": false,
4947
+ "required": [
4948
+ "kind",
4949
+ "node",
4950
+ "edge"
4951
+ ]
4952
+ }
4953
+ ]
4954
+ },
4955
+ "SelectionTarget": {
4956
+ "type": "object",
4957
+ "properties": {
4958
+ "kind": {
4959
+ "const": "selection",
4960
+ "type": "string"
4961
+ },
4962
+ "start": {
4963
+ "$ref": "#/$defs/SelectionPoint"
4964
+ },
4965
+ "end": {
4966
+ "$ref": "#/$defs/SelectionPoint"
4967
+ },
4968
+ "story": {
4969
+ "$ref": "#/$defs/StoryLocator"
4970
+ },
4971
+ "coordinateSpace": {
4972
+ "$ref": "#/$defs/TextCoordinateSpace"
4973
+ }
4974
+ },
4975
+ "additionalProperties": false,
4976
+ "required": [
4977
+ "kind",
4978
+ "start",
4979
+ "end"
4980
+ ]
4981
+ },
4982
+ "StoryLocator": {
4983
+ "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.",
4984
+ "oneOf": [
4985
+ {
4986
+ "type": "object",
4987
+ "properties": {
4988
+ "kind": {
4989
+ "const": "story",
4990
+ "type": "string"
4991
+ },
4992
+ "storyType": {
4993
+ "const": "body",
4994
+ "type": "string"
4995
+ }
4996
+ },
4997
+ "additionalProperties": false,
4998
+ "required": [
4999
+ "kind",
5000
+ "storyType"
5001
+ ]
5002
+ },
5003
+ {
5004
+ "type": "object",
5005
+ "properties": {
5006
+ "kind": {
5007
+ "const": "story",
5008
+ "type": "string"
5009
+ },
5010
+ "storyType": {
5011
+ "const": "headerFooterSlot",
5012
+ "type": "string"
5013
+ },
5014
+ "section": {
5015
+ "$ref": "#/$defs/SectionAddress"
5016
+ },
5017
+ "headerFooterKind": {
5018
+ "enum": [
5019
+ "header",
5020
+ "footer"
5021
+ ]
5022
+ },
5023
+ "variant": {
5024
+ "enum": [
5025
+ "default",
5026
+ "first",
5027
+ "even"
5028
+ ]
5029
+ },
5030
+ "resolution": {
5031
+ "enum": [
5032
+ "effective",
5033
+ "explicit"
5034
+ ]
5035
+ },
5036
+ "onWrite": {
5037
+ "enum": [
5038
+ "materializeIfInherited",
5039
+ "editResolvedPart",
5040
+ "error"
5041
+ ]
5042
+ }
5043
+ },
5044
+ "additionalProperties": false,
5045
+ "required": [
5046
+ "kind",
5047
+ "storyType",
5048
+ "section",
5049
+ "headerFooterKind",
5050
+ "variant"
5051
+ ]
5052
+ },
5053
+ {
5054
+ "type": "object",
5055
+ "properties": {
5056
+ "kind": {
5057
+ "const": "story",
5058
+ "type": "string"
5059
+ },
5060
+ "storyType": {
5061
+ "const": "headerFooterPart",
5062
+ "type": "string"
5063
+ },
5064
+ "refId": {
5065
+ "type": "string"
5066
+ }
5067
+ },
5068
+ "additionalProperties": false,
5069
+ "required": [
5070
+ "kind",
5071
+ "storyType",
5072
+ "refId"
5073
+ ]
5074
+ },
5075
+ {
5076
+ "type": "object",
5077
+ "properties": {
5078
+ "kind": {
5079
+ "const": "story",
5080
+ "type": "string"
5081
+ },
5082
+ "storyType": {
5083
+ "const": "footnote",
5084
+ "type": "string"
5085
+ },
5086
+ "noteId": {
5087
+ "type": "string"
5088
+ }
5089
+ },
5090
+ "additionalProperties": false,
5091
+ "required": [
5092
+ "kind",
5093
+ "storyType",
5094
+ "noteId"
5095
+ ]
5096
+ },
5097
+ {
5098
+ "type": "object",
5099
+ "properties": {
5100
+ "kind": {
5101
+ "const": "story",
5102
+ "type": "string"
5103
+ },
5104
+ "storyType": {
5105
+ "const": "endnote",
5106
+ "type": "string"
5107
+ },
5108
+ "noteId": {
5109
+ "type": "string"
5110
+ }
5111
+ },
5112
+ "additionalProperties": false,
5113
+ "required": [
5114
+ "kind",
5115
+ "storyType",
5116
+ "noteId"
5117
+ ]
5118
+ },
5119
+ {
5120
+ "type": "object",
5121
+ "properties": {
5122
+ "kind": {
5123
+ "const": "story",
5124
+ "type": "string"
5125
+ },
5126
+ "storyType": {
5127
+ "const": "textbox",
5128
+ "type": "string"
5129
+ },
5130
+ "textboxId": {
5131
+ "type": "string"
5132
+ }
5133
+ },
5134
+ "additionalProperties": false,
5135
+ "required": [
5136
+ "kind",
5137
+ "storyType",
5138
+ "textboxId"
5139
+ ]
5140
+ }
5141
+ ]
5142
+ },
5143
+ "TextAddress": {
5144
+ "type": "object",
5145
+ "properties": {
5146
+ "kind": {
5147
+ "const": "text",
5148
+ "type": "string"
5149
+ },
5150
+ "blockId": {
5151
+ "type": "string"
5152
+ },
5153
+ "range": {
5154
+ "$ref": "#/$defs/Range"
5155
+ },
5156
+ "story": {
5157
+ "$ref": "#/$defs/StoryLocator"
5158
+ }
5159
+ },
5160
+ "additionalProperties": false,
5161
+ "required": [
5162
+ "kind",
5163
+ "blockId",
5164
+ "range"
5165
+ ]
3211
5166
  },
3212
- "includeResolved": {
3213
- "type": "boolean",
3214
- "description": "When true, includes resolved comments in results. Default: false. Only for action 'list'. Omit for other actions."
5167
+ "TextCoordinateSpace": {
5168
+ "enum": [
5169
+ "visible",
5170
+ "tracked"
5171
+ ]
3215
5172
  },
3216
- "limit": {
3217
- "type": "integer",
3218
- "description": "Maximum number of comments to return. Only for action 'list'. Omit for other actions."
5173
+ "TextSegment": {
5174
+ "type": "object",
5175
+ "properties": {
5176
+ "blockId": {
5177
+ "type": "string"
5178
+ },
5179
+ "range": {
5180
+ "$ref": "#/$defs/Range"
5181
+ }
5182
+ },
5183
+ "additionalProperties": false,
5184
+ "required": [
5185
+ "blockId",
5186
+ "range"
5187
+ ]
3219
5188
  },
3220
- "offset": {
3221
- "type": "integer",
3222
- "description": "Number of comments to skip for pagination. Only for action 'list'. Omit for other actions."
5189
+ "TextTarget": {
5190
+ "type": "object",
5191
+ "properties": {
5192
+ "kind": {
5193
+ "const": "text",
5194
+ "type": "string"
5195
+ },
5196
+ "segments": {
5197
+ "type": "array",
5198
+ "items": {
5199
+ "$ref": "#/$defs/TextSegment"
5200
+ },
5201
+ "minItems": 1
5202
+ },
5203
+ "story": {
5204
+ "$ref": "#/$defs/StoryLocator"
5205
+ },
5206
+ "coordinateSpace": {
5207
+ "$ref": "#/$defs/TextCoordinateSpace"
5208
+ }
5209
+ },
5210
+ "additionalProperties": false,
5211
+ "required": [
5212
+ "kind",
5213
+ "segments"
5214
+ ]
3223
5215
  }
3224
- },
3225
- "required": [
3226
- "action"
3227
- ],
3228
- "additionalProperties": false
5216
+ }
3229
5217
  },
3230
5218
  "mutates": true,
3231
5219
  "operations": [
@@ -3517,154 +5505,399 @@
3517
5505
  "type": "string",
3518
5506
  "description": "Optional logical overlap selector for callers that already resolved an ambiguous overlap surface. Adapter-owned interpretation."
3519
5507
  },
3520
- "side": {
5508
+ "side": {
5509
+ "enum": [
5510
+ "insert",
5511
+ "inserted",
5512
+ "delete",
5513
+ "deleted",
5514
+ "source",
5515
+ "destination"
5516
+ ],
5517
+ "description": "Optional revision side for grouped replacement or move targets."
5518
+ },
5519
+ "story": {
5520
+ "$ref": "#/$defs/StoryLocator",
5521
+ "description": "Optional story containing the range target."
5522
+ },
5523
+ "part": {
5524
+ "type": "string",
5525
+ "description": "Compatibility alias used by older range callers; interpretation is adapter-owned."
5526
+ }
5527
+ },
5528
+ "additionalProperties": false,
5529
+ "required": [
5530
+ "kind",
5531
+ "anchor",
5532
+ "relativeStart",
5533
+ "relativeEnd"
5534
+ ]
5535
+ },
5536
+ {
5537
+ "type": "object",
5538
+ "properties": {
5539
+ "kind": {
5540
+ "const": "all",
5541
+ "type": "string"
5542
+ },
5543
+ "story": {
5544
+ "oneOf": [
5545
+ {
5546
+ "$ref": "#/$defs/StoryLocator"
5547
+ },
5548
+ {
5549
+ "const": "all",
5550
+ "type": "string"
5551
+ }
5552
+ ],
5553
+ "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."
5554
+ }
5555
+ },
5556
+ "additionalProperties": false,
5557
+ "required": [
5558
+ "kind"
5559
+ ]
5560
+ },
5561
+ {
5562
+ "type": "object",
5563
+ "properties": {
5564
+ "id": {
5565
+ "type": "string"
5566
+ },
5567
+ "story": {
5568
+ "$ref": "#/$defs/StoryLocator"
5569
+ },
5570
+ "moveRole": {
5571
+ "enum": [
5572
+ "pair",
5573
+ "source",
5574
+ "destination"
5575
+ ],
5576
+ "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."
5577
+ }
5578
+ },
5579
+ "additionalProperties": false,
5580
+ "required": [
5581
+ "id"
5582
+ ]
5583
+ },
5584
+ {
5585
+ "type": "object",
5586
+ "properties": {
5587
+ "id": {
5588
+ "type": "string"
5589
+ },
5590
+ "range": {
5591
+ "type": "object",
5592
+ "properties": {
5593
+ "kind": {
5594
+ "const": "partial",
5595
+ "type": "string"
5596
+ },
5597
+ "start": {
5598
+ "type": "integer",
5599
+ "minimum": 0
5600
+ },
5601
+ "end": {
5602
+ "type": "integer",
5603
+ "minimum": 0
5604
+ }
5605
+ },
5606
+ "additionalProperties": false,
5607
+ "required": [
5608
+ "kind",
5609
+ "start",
5610
+ "end"
5611
+ ]
5612
+ },
5613
+ "story": {
5614
+ "$ref": "#/$defs/StoryLocator"
5615
+ }
5616
+ },
5617
+ "additionalProperties": false,
5618
+ "required": [
5619
+ "id",
5620
+ "range"
5621
+ ]
5622
+ },
5623
+ {
5624
+ "type": "object",
5625
+ "properties": {
5626
+ "scope": {
5627
+ "enum": [
5628
+ "all"
5629
+ ]
5630
+ },
5631
+ "story": {
5632
+ "oneOf": [
5633
+ {
5634
+ "$ref": "#/$defs/StoryLocator"
5635
+ },
5636
+ {
5637
+ "const": "all",
5638
+ "type": "string"
5639
+ }
5640
+ ],
5641
+ "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."
5642
+ }
5643
+ },
5644
+ "additionalProperties": false,
5645
+ "required": [
5646
+ "scope"
5647
+ ]
5648
+ }
5649
+ ]
5650
+ }
5651
+ },
5652
+ "required": [
5653
+ "action"
5654
+ ],
5655
+ "additionalProperties": false,
5656
+ "$defs": {
5657
+ "Range": {
5658
+ "type": "object",
5659
+ "properties": {
5660
+ "start": {
5661
+ "type": "integer"
5662
+ },
5663
+ "end": {
5664
+ "type": "integer"
5665
+ }
5666
+ },
5667
+ "additionalProperties": false,
5668
+ "required": [
5669
+ "start",
5670
+ "end"
5671
+ ]
5672
+ },
5673
+ "SectionAddress": {
5674
+ "type": "object",
5675
+ "properties": {
5676
+ "kind": {
5677
+ "const": "section",
5678
+ "type": "string"
5679
+ },
5680
+ "sectionId": {
5681
+ "type": "string"
5682
+ }
5683
+ },
5684
+ "additionalProperties": false,
5685
+ "required": [
5686
+ "kind",
5687
+ "sectionId"
5688
+ ]
5689
+ },
5690
+ "StoryLocator": {
5691
+ "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.",
5692
+ "oneOf": [
5693
+ {
5694
+ "type": "object",
5695
+ "properties": {
5696
+ "kind": {
5697
+ "const": "story",
5698
+ "type": "string"
5699
+ },
5700
+ "storyType": {
5701
+ "const": "body",
5702
+ "type": "string"
5703
+ }
5704
+ },
5705
+ "additionalProperties": false,
5706
+ "required": [
5707
+ "kind",
5708
+ "storyType"
5709
+ ]
5710
+ },
5711
+ {
5712
+ "type": "object",
5713
+ "properties": {
5714
+ "kind": {
5715
+ "const": "story",
5716
+ "type": "string"
5717
+ },
5718
+ "storyType": {
5719
+ "const": "headerFooterSlot",
5720
+ "type": "string"
5721
+ },
5722
+ "section": {
5723
+ "$ref": "#/$defs/SectionAddress"
5724
+ },
5725
+ "headerFooterKind": {
5726
+ "enum": [
5727
+ "header",
5728
+ "footer"
5729
+ ]
5730
+ },
5731
+ "variant": {
3521
5732
  "enum": [
3522
- "insert",
3523
- "inserted",
3524
- "delete",
3525
- "deleted",
3526
- "source",
3527
- "destination"
3528
- ],
3529
- "description": "Optional revision side for grouped replacement or move targets."
5733
+ "default",
5734
+ "first",
5735
+ "even"
5736
+ ]
3530
5737
  },
3531
- "story": {
3532
- "$ref": "#/$defs/StoryLocator",
3533
- "description": "Optional story containing the range target."
5738
+ "resolution": {
5739
+ "enum": [
5740
+ "effective",
5741
+ "explicit"
5742
+ ]
3534
5743
  },
3535
- "part": {
3536
- "type": "string",
3537
- "description": "Compatibility alias used by older range callers; interpretation is adapter-owned."
5744
+ "onWrite": {
5745
+ "enum": [
5746
+ "materializeIfInherited",
5747
+ "editResolvedPart",
5748
+ "error"
5749
+ ]
3538
5750
  }
3539
5751
  },
3540
5752
  "additionalProperties": false,
3541
5753
  "required": [
3542
5754
  "kind",
3543
- "anchor",
3544
- "relativeStart",
3545
- "relativeEnd"
5755
+ "storyType",
5756
+ "section",
5757
+ "headerFooterKind",
5758
+ "variant"
3546
5759
  ]
3547
5760
  },
3548
5761
  {
3549
5762
  "type": "object",
3550
5763
  "properties": {
3551
5764
  "kind": {
3552
- "const": "all",
5765
+ "const": "story",
3553
5766
  "type": "string"
3554
5767
  },
3555
- "story": {
3556
- "oneOf": [
3557
- {
3558
- "$ref": "#/$defs/StoryLocator"
3559
- },
3560
- {
3561
- "const": "all",
3562
- "type": "string"
3563
- }
3564
- ],
3565
- "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."
5768
+ "storyType": {
5769
+ "const": "headerFooterPart",
5770
+ "type": "string"
5771
+ },
5772
+ "refId": {
5773
+ "type": "string"
3566
5774
  }
3567
5775
  },
3568
5776
  "additionalProperties": false,
3569
5777
  "required": [
3570
- "kind"
5778
+ "kind",
5779
+ "storyType",
5780
+ "refId"
3571
5781
  ]
3572
5782
  },
3573
5783
  {
3574
5784
  "type": "object",
3575
5785
  "properties": {
3576
- "id": {
5786
+ "kind": {
5787
+ "const": "story",
3577
5788
  "type": "string"
3578
5789
  },
3579
- "story": {
3580
- "$ref": "#/$defs/StoryLocator"
5790
+ "storyType": {
5791
+ "const": "footnote",
5792
+ "type": "string"
3581
5793
  },
3582
- "moveRole": {
3583
- "enum": [
3584
- "pair",
3585
- "source",
3586
- "destination"
3587
- ],
3588
- "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."
5794
+ "noteId": {
5795
+ "type": "string"
3589
5796
  }
3590
5797
  },
3591
5798
  "additionalProperties": false,
3592
5799
  "required": [
3593
- "id"
5800
+ "kind",
5801
+ "storyType",
5802
+ "noteId"
3594
5803
  ]
3595
5804
  },
3596
5805
  {
3597
5806
  "type": "object",
3598
5807
  "properties": {
3599
- "id": {
5808
+ "kind": {
5809
+ "const": "story",
3600
5810
  "type": "string"
3601
5811
  },
3602
- "range": {
3603
- "type": "object",
3604
- "properties": {
3605
- "kind": {
3606
- "const": "partial",
3607
- "type": "string"
3608
- },
3609
- "start": {
3610
- "type": "integer",
3611
- "minimum": 0
3612
- },
3613
- "end": {
3614
- "type": "integer",
3615
- "minimum": 0
3616
- }
3617
- },
3618
- "additionalProperties": false,
3619
- "required": [
3620
- "kind",
3621
- "start",
3622
- "end"
3623
- ]
5812
+ "storyType": {
5813
+ "const": "endnote",
5814
+ "type": "string"
3624
5815
  },
3625
- "story": {
3626
- "$ref": "#/$defs/StoryLocator"
5816
+ "noteId": {
5817
+ "type": "string"
3627
5818
  }
3628
5819
  },
3629
5820
  "additionalProperties": false,
3630
5821
  "required": [
3631
- "id",
3632
- "range"
5822
+ "kind",
5823
+ "storyType",
5824
+ "noteId"
3633
5825
  ]
3634
5826
  },
3635
5827
  {
3636
5828
  "type": "object",
3637
5829
  "properties": {
3638
- "scope": {
3639
- "enum": [
3640
- "all"
3641
- ]
5830
+ "kind": {
5831
+ "const": "story",
5832
+ "type": "string"
3642
5833
  },
3643
- "story": {
3644
- "oneOf": [
3645
- {
3646
- "$ref": "#/$defs/StoryLocator"
3647
- },
3648
- {
3649
- "const": "all",
3650
- "type": "string"
3651
- }
3652
- ],
3653
- "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."
5834
+ "storyType": {
5835
+ "const": "textbox",
5836
+ "type": "string"
5837
+ },
5838
+ "textboxId": {
5839
+ "type": "string"
3654
5840
  }
3655
5841
  },
3656
5842
  "additionalProperties": false,
3657
5843
  "required": [
3658
- "scope"
5844
+ "kind",
5845
+ "storyType",
5846
+ "textboxId"
3659
5847
  ]
3660
5848
  }
3661
5849
  ]
5850
+ },
5851
+ "TextCoordinateSpace": {
5852
+ "enum": [
5853
+ "visible",
5854
+ "tracked"
5855
+ ]
5856
+ },
5857
+ "TextSegment": {
5858
+ "type": "object",
5859
+ "properties": {
5860
+ "blockId": {
5861
+ "type": "string"
5862
+ },
5863
+ "range": {
5864
+ "$ref": "#/$defs/Range"
5865
+ }
5866
+ },
5867
+ "additionalProperties": false,
5868
+ "required": [
5869
+ "blockId",
5870
+ "range"
5871
+ ]
5872
+ },
5873
+ "TextTarget": {
5874
+ "type": "object",
5875
+ "properties": {
5876
+ "kind": {
5877
+ "const": "text",
5878
+ "type": "string"
5879
+ },
5880
+ "segments": {
5881
+ "type": "array",
5882
+ "items": {
5883
+ "$ref": "#/$defs/TextSegment"
5884
+ },
5885
+ "minItems": 1
5886
+ },
5887
+ "story": {
5888
+ "$ref": "#/$defs/StoryLocator"
5889
+ },
5890
+ "coordinateSpace": {
5891
+ "$ref": "#/$defs/TextCoordinateSpace"
5892
+ }
5893
+ },
5894
+ "additionalProperties": false,
5895
+ "required": [
5896
+ "kind",
5897
+ "segments"
5898
+ ]
3662
5899
  }
3663
- },
3664
- "required": [
3665
- "action"
3666
- ],
3667
- "additionalProperties": false
5900
+ }
3668
5901
  },
3669
5902
  "mutates": true,
3670
5903
  "operations": [
@@ -3817,11 +6050,225 @@
3817
6050
  "minimum": 0,
3818
6051
  "description": "Number of matches to skip for pagination."
3819
6052
  }
3820
- },
3821
- "required": [
3822
- "select"
3823
- ],
3824
- "additionalProperties": false
6053
+ },
6054
+ "required": [
6055
+ "select"
6056
+ ],
6057
+ "additionalProperties": false,
6058
+ "$defs": {
6059
+ "BlockNodeAddress": {
6060
+ "type": "object",
6061
+ "properties": {
6062
+ "kind": {
6063
+ "const": "block",
6064
+ "type": "string"
6065
+ },
6066
+ "nodeType": {
6067
+ "enum": [
6068
+ "paragraph",
6069
+ "heading",
6070
+ "listItem",
6071
+ "table",
6072
+ "tableRow",
6073
+ "tableCell",
6074
+ "tableOfContents",
6075
+ "image",
6076
+ "sdt"
6077
+ ]
6078
+ },
6079
+ "nodeId": {
6080
+ "type": "string"
6081
+ },
6082
+ "story": {
6083
+ "$ref": "#/$defs/StoryLocator"
6084
+ }
6085
+ },
6086
+ "additionalProperties": false,
6087
+ "required": [
6088
+ "kind",
6089
+ "nodeType",
6090
+ "nodeId"
6091
+ ]
6092
+ },
6093
+ "SectionAddress": {
6094
+ "type": "object",
6095
+ "properties": {
6096
+ "kind": {
6097
+ "const": "section",
6098
+ "type": "string"
6099
+ },
6100
+ "sectionId": {
6101
+ "type": "string"
6102
+ }
6103
+ },
6104
+ "additionalProperties": false,
6105
+ "required": [
6106
+ "kind",
6107
+ "sectionId"
6108
+ ]
6109
+ },
6110
+ "StoryLocator": {
6111
+ "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.",
6112
+ "oneOf": [
6113
+ {
6114
+ "type": "object",
6115
+ "properties": {
6116
+ "kind": {
6117
+ "const": "story",
6118
+ "type": "string"
6119
+ },
6120
+ "storyType": {
6121
+ "const": "body",
6122
+ "type": "string"
6123
+ }
6124
+ },
6125
+ "additionalProperties": false,
6126
+ "required": [
6127
+ "kind",
6128
+ "storyType"
6129
+ ]
6130
+ },
6131
+ {
6132
+ "type": "object",
6133
+ "properties": {
6134
+ "kind": {
6135
+ "const": "story",
6136
+ "type": "string"
6137
+ },
6138
+ "storyType": {
6139
+ "const": "headerFooterSlot",
6140
+ "type": "string"
6141
+ },
6142
+ "section": {
6143
+ "$ref": "#/$defs/SectionAddress"
6144
+ },
6145
+ "headerFooterKind": {
6146
+ "enum": [
6147
+ "header",
6148
+ "footer"
6149
+ ]
6150
+ },
6151
+ "variant": {
6152
+ "enum": [
6153
+ "default",
6154
+ "first",
6155
+ "even"
6156
+ ]
6157
+ },
6158
+ "resolution": {
6159
+ "enum": [
6160
+ "effective",
6161
+ "explicit"
6162
+ ]
6163
+ },
6164
+ "onWrite": {
6165
+ "enum": [
6166
+ "materializeIfInherited",
6167
+ "editResolvedPart",
6168
+ "error"
6169
+ ]
6170
+ }
6171
+ },
6172
+ "additionalProperties": false,
6173
+ "required": [
6174
+ "kind",
6175
+ "storyType",
6176
+ "section",
6177
+ "headerFooterKind",
6178
+ "variant"
6179
+ ]
6180
+ },
6181
+ {
6182
+ "type": "object",
6183
+ "properties": {
6184
+ "kind": {
6185
+ "const": "story",
6186
+ "type": "string"
6187
+ },
6188
+ "storyType": {
6189
+ "const": "headerFooterPart",
6190
+ "type": "string"
6191
+ },
6192
+ "refId": {
6193
+ "type": "string"
6194
+ }
6195
+ },
6196
+ "additionalProperties": false,
6197
+ "required": [
6198
+ "kind",
6199
+ "storyType",
6200
+ "refId"
6201
+ ]
6202
+ },
6203
+ {
6204
+ "type": "object",
6205
+ "properties": {
6206
+ "kind": {
6207
+ "const": "story",
6208
+ "type": "string"
6209
+ },
6210
+ "storyType": {
6211
+ "const": "footnote",
6212
+ "type": "string"
6213
+ },
6214
+ "noteId": {
6215
+ "type": "string"
6216
+ }
6217
+ },
6218
+ "additionalProperties": false,
6219
+ "required": [
6220
+ "kind",
6221
+ "storyType",
6222
+ "noteId"
6223
+ ]
6224
+ },
6225
+ {
6226
+ "type": "object",
6227
+ "properties": {
6228
+ "kind": {
6229
+ "const": "story",
6230
+ "type": "string"
6231
+ },
6232
+ "storyType": {
6233
+ "const": "endnote",
6234
+ "type": "string"
6235
+ },
6236
+ "noteId": {
6237
+ "type": "string"
6238
+ }
6239
+ },
6240
+ "additionalProperties": false,
6241
+ "required": [
6242
+ "kind",
6243
+ "storyType",
6244
+ "noteId"
6245
+ ]
6246
+ },
6247
+ {
6248
+ "type": "object",
6249
+ "properties": {
6250
+ "kind": {
6251
+ "const": "story",
6252
+ "type": "string"
6253
+ },
6254
+ "storyType": {
6255
+ "const": "textbox",
6256
+ "type": "string"
6257
+ },
6258
+ "textboxId": {
6259
+ "type": "string"
6260
+ }
6261
+ },
6262
+ "additionalProperties": false,
6263
+ "required": [
6264
+ "kind",
6265
+ "storyType",
6266
+ "textboxId"
6267
+ ]
6268
+ }
6269
+ ]
6270
+ }
6271
+ }
3825
6272
  },
3826
6273
  "mutates": false,
3827
6274
  "operations": [
@@ -5908,46 +8355,385 @@
5908
8355
  ]
5909
8356
  }
5910
8357
  },
5911
- "additionalProperties": false,
5912
- "required": [
5913
- "id",
5914
- "op",
5915
- "where",
5916
- "args"
5917
- ]
5918
- }
5919
- ]
5920
- },
5921
- "description": "Ordered array of mutation steps. Each step needs 'op' (text.rewrite, text.insert, text.delete, format.apply, or assert) and a 'where' targeting clause."
5922
- },
5923
- "detail": {
5924
- "type": "object",
5925
- "properties": {
5926
- "offset": {
5927
- "type": "number",
5928
- "minimum": 0
8358
+ "additionalProperties": false,
8359
+ "required": [
8360
+ "id",
8361
+ "op",
8362
+ "where",
8363
+ "args"
8364
+ ]
8365
+ }
8366
+ ]
8367
+ },
8368
+ "description": "Ordered array of mutation steps. Each step needs 'op' (text.rewrite, text.insert, text.delete, format.apply, or assert) and a 'where' targeting clause."
8369
+ },
8370
+ "detail": {
8371
+ "type": "object",
8372
+ "properties": {
8373
+ "offset": {
8374
+ "type": "number",
8375
+ "minimum": 0
8376
+ },
8377
+ "limit": {
8378
+ "type": "number",
8379
+ "minimum": 0,
8380
+ "maximum": 1000
8381
+ }
8382
+ },
8383
+ "additionalProperties": false,
8384
+ "description": "Only for action 'preview'. Omit for other actions."
8385
+ },
8386
+ "force": {
8387
+ "type": "boolean",
8388
+ "description": "Bypass confirmation checks. Only for action 'apply'. Omit for other actions."
8389
+ }
8390
+ },
8391
+ "required": [
8392
+ "action",
8393
+ "atomic",
8394
+ "changeMode",
8395
+ "steps"
8396
+ ],
8397
+ "additionalProperties": false,
8398
+ "$defs": {
8399
+ "BlockNodeAddress": {
8400
+ "type": "object",
8401
+ "properties": {
8402
+ "kind": {
8403
+ "const": "block",
8404
+ "type": "string"
8405
+ },
8406
+ "nodeType": {
8407
+ "enum": [
8408
+ "paragraph",
8409
+ "heading",
8410
+ "listItem",
8411
+ "table",
8412
+ "tableRow",
8413
+ "tableCell",
8414
+ "tableOfContents",
8415
+ "image",
8416
+ "sdt"
8417
+ ]
8418
+ },
8419
+ "nodeId": {
8420
+ "type": "string"
8421
+ },
8422
+ "story": {
8423
+ "$ref": "#/$defs/StoryLocator"
8424
+ }
8425
+ },
8426
+ "additionalProperties": false,
8427
+ "required": [
8428
+ "kind",
8429
+ "nodeType",
8430
+ "nodeId"
8431
+ ]
8432
+ },
8433
+ "DeleteBehavior": {
8434
+ "enum": [
8435
+ "selection",
8436
+ "exact"
8437
+ ]
8438
+ },
8439
+ "SectionAddress": {
8440
+ "type": "object",
8441
+ "properties": {
8442
+ "kind": {
8443
+ "const": "section",
8444
+ "type": "string"
8445
+ },
8446
+ "sectionId": {
8447
+ "type": "string"
8448
+ }
8449
+ },
8450
+ "additionalProperties": false,
8451
+ "required": [
8452
+ "kind",
8453
+ "sectionId"
8454
+ ]
8455
+ },
8456
+ "SelectionEdgeNodeAddress": {
8457
+ "type": "object",
8458
+ "properties": {
8459
+ "kind": {
8460
+ "const": "block",
8461
+ "type": "string"
8462
+ },
8463
+ "nodeType": {
8464
+ "enum": [
8465
+ "paragraph",
8466
+ "heading",
8467
+ "listItem",
8468
+ "table",
8469
+ "tableOfContents",
8470
+ "sdt",
8471
+ "image"
8472
+ ]
8473
+ },
8474
+ "nodeId": {
8475
+ "type": "string"
8476
+ },
8477
+ "story": {
8478
+ "$ref": "#/$defs/StoryLocator"
8479
+ }
8480
+ },
8481
+ "additionalProperties": false,
8482
+ "required": [
8483
+ "kind",
8484
+ "nodeType",
8485
+ "nodeId"
8486
+ ]
8487
+ },
8488
+ "SelectionPoint": {
8489
+ "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.",
8490
+ "oneOf": [
8491
+ {
8492
+ "type": "object",
8493
+ "properties": {
8494
+ "kind": {
8495
+ "const": "text",
8496
+ "type": "string"
8497
+ },
8498
+ "blockId": {
8499
+ "type": "string"
8500
+ },
8501
+ "offset": {
8502
+ "type": "integer",
8503
+ "minimum": 0
8504
+ },
8505
+ "story": {
8506
+ "$ref": "#/$defs/StoryLocator"
8507
+ }
8508
+ },
8509
+ "additionalProperties": false,
8510
+ "required": [
8511
+ "kind",
8512
+ "blockId",
8513
+ "offset"
8514
+ ]
8515
+ },
8516
+ {
8517
+ "type": "object",
8518
+ "properties": {
8519
+ "kind": {
8520
+ "const": "nodeEdge",
8521
+ "type": "string"
8522
+ },
8523
+ "node": {
8524
+ "$ref": "#/$defs/SelectionEdgeNodeAddress"
8525
+ },
8526
+ "edge": {
8527
+ "enum": [
8528
+ "before",
8529
+ "after"
8530
+ ]
8531
+ }
8532
+ },
8533
+ "additionalProperties": false,
8534
+ "required": [
8535
+ "kind",
8536
+ "node",
8537
+ "edge"
8538
+ ]
8539
+ }
8540
+ ]
8541
+ },
8542
+ "SelectionTarget": {
8543
+ "type": "object",
8544
+ "properties": {
8545
+ "kind": {
8546
+ "const": "selection",
8547
+ "type": "string"
8548
+ },
8549
+ "start": {
8550
+ "$ref": "#/$defs/SelectionPoint"
8551
+ },
8552
+ "end": {
8553
+ "$ref": "#/$defs/SelectionPoint"
8554
+ },
8555
+ "story": {
8556
+ "$ref": "#/$defs/StoryLocator"
8557
+ },
8558
+ "coordinateSpace": {
8559
+ "$ref": "#/$defs/TextCoordinateSpace"
8560
+ }
8561
+ },
8562
+ "additionalProperties": false,
8563
+ "required": [
8564
+ "kind",
8565
+ "start",
8566
+ "end"
8567
+ ]
8568
+ },
8569
+ "StoryLocator": {
8570
+ "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.",
8571
+ "oneOf": [
8572
+ {
8573
+ "type": "object",
8574
+ "properties": {
8575
+ "kind": {
8576
+ "const": "story",
8577
+ "type": "string"
8578
+ },
8579
+ "storyType": {
8580
+ "const": "body",
8581
+ "type": "string"
8582
+ }
8583
+ },
8584
+ "additionalProperties": false,
8585
+ "required": [
8586
+ "kind",
8587
+ "storyType"
8588
+ ]
8589
+ },
8590
+ {
8591
+ "type": "object",
8592
+ "properties": {
8593
+ "kind": {
8594
+ "const": "story",
8595
+ "type": "string"
8596
+ },
8597
+ "storyType": {
8598
+ "const": "headerFooterSlot",
8599
+ "type": "string"
8600
+ },
8601
+ "section": {
8602
+ "$ref": "#/$defs/SectionAddress"
8603
+ },
8604
+ "headerFooterKind": {
8605
+ "enum": [
8606
+ "header",
8607
+ "footer"
8608
+ ]
8609
+ },
8610
+ "variant": {
8611
+ "enum": [
8612
+ "default",
8613
+ "first",
8614
+ "even"
8615
+ ]
8616
+ },
8617
+ "resolution": {
8618
+ "enum": [
8619
+ "effective",
8620
+ "explicit"
8621
+ ]
8622
+ },
8623
+ "onWrite": {
8624
+ "enum": [
8625
+ "materializeIfInherited",
8626
+ "editResolvedPart",
8627
+ "error"
8628
+ ]
8629
+ }
8630
+ },
8631
+ "additionalProperties": false,
8632
+ "required": [
8633
+ "kind",
8634
+ "storyType",
8635
+ "section",
8636
+ "headerFooterKind",
8637
+ "variant"
8638
+ ]
8639
+ },
8640
+ {
8641
+ "type": "object",
8642
+ "properties": {
8643
+ "kind": {
8644
+ "const": "story",
8645
+ "type": "string"
8646
+ },
8647
+ "storyType": {
8648
+ "const": "headerFooterPart",
8649
+ "type": "string"
8650
+ },
8651
+ "refId": {
8652
+ "type": "string"
8653
+ }
8654
+ },
8655
+ "additionalProperties": false,
8656
+ "required": [
8657
+ "kind",
8658
+ "storyType",
8659
+ "refId"
8660
+ ]
8661
+ },
8662
+ {
8663
+ "type": "object",
8664
+ "properties": {
8665
+ "kind": {
8666
+ "const": "story",
8667
+ "type": "string"
8668
+ },
8669
+ "storyType": {
8670
+ "const": "footnote",
8671
+ "type": "string"
8672
+ },
8673
+ "noteId": {
8674
+ "type": "string"
8675
+ }
8676
+ },
8677
+ "additionalProperties": false,
8678
+ "required": [
8679
+ "kind",
8680
+ "storyType",
8681
+ "noteId"
8682
+ ]
8683
+ },
8684
+ {
8685
+ "type": "object",
8686
+ "properties": {
8687
+ "kind": {
8688
+ "const": "story",
8689
+ "type": "string"
8690
+ },
8691
+ "storyType": {
8692
+ "const": "endnote",
8693
+ "type": "string"
8694
+ },
8695
+ "noteId": {
8696
+ "type": "string"
8697
+ }
8698
+ },
8699
+ "additionalProperties": false,
8700
+ "required": [
8701
+ "kind",
8702
+ "storyType",
8703
+ "noteId"
8704
+ ]
5929
8705
  },
5930
- "limit": {
5931
- "type": "number",
5932
- "minimum": 0,
5933
- "maximum": 1000
8706
+ {
8707
+ "type": "object",
8708
+ "properties": {
8709
+ "kind": {
8710
+ "const": "story",
8711
+ "type": "string"
8712
+ },
8713
+ "storyType": {
8714
+ "const": "textbox",
8715
+ "type": "string"
8716
+ },
8717
+ "textboxId": {
8718
+ "type": "string"
8719
+ }
8720
+ },
8721
+ "additionalProperties": false,
8722
+ "required": [
8723
+ "kind",
8724
+ "storyType",
8725
+ "textboxId"
8726
+ ]
5934
8727
  }
5935
- },
5936
- "additionalProperties": false,
5937
- "description": "Only for action 'preview'. Omit for other actions."
8728
+ ]
5938
8729
  },
5939
- "force": {
5940
- "type": "boolean",
5941
- "description": "Bypass confirmation checks. Only for action 'apply'. Omit for other actions."
8730
+ "TextCoordinateSpace": {
8731
+ "enum": [
8732
+ "visible",
8733
+ "tracked"
8734
+ ]
5942
8735
  }
5943
- },
5944
- "required": [
5945
- "action",
5946
- "atomic",
5947
- "changeMode",
5948
- "steps"
5949
- ],
5950
- "additionalProperties": false
8736
+ }
5951
8737
  },
5952
8738
  "mutates": true,
5953
8739
  "operations": [
@@ -6937,7 +9723,311 @@
6937
9723
  "required": [
6938
9724
  "action"
6939
9725
  ],
6940
- "additionalProperties": false
9726
+ "additionalProperties": false,
9727
+ "$defs": {
9728
+ "BlockNodeAddress": {
9729
+ "type": "object",
9730
+ "properties": {
9731
+ "kind": {
9732
+ "const": "block",
9733
+ "type": "string"
9734
+ },
9735
+ "nodeType": {
9736
+ "enum": [
9737
+ "paragraph",
9738
+ "heading",
9739
+ "listItem",
9740
+ "table",
9741
+ "tableRow",
9742
+ "tableCell",
9743
+ "tableOfContents",
9744
+ "image",
9745
+ "sdt"
9746
+ ]
9747
+ },
9748
+ "nodeId": {
9749
+ "type": "string"
9750
+ },
9751
+ "story": {
9752
+ "$ref": "#/$defs/StoryLocator"
9753
+ }
9754
+ },
9755
+ "additionalProperties": false,
9756
+ "required": [
9757
+ "kind",
9758
+ "nodeType",
9759
+ "nodeId"
9760
+ ]
9761
+ },
9762
+ "SectionAddress": {
9763
+ "type": "object",
9764
+ "properties": {
9765
+ "kind": {
9766
+ "const": "section",
9767
+ "type": "string"
9768
+ },
9769
+ "sectionId": {
9770
+ "type": "string"
9771
+ }
9772
+ },
9773
+ "additionalProperties": false,
9774
+ "required": [
9775
+ "kind",
9776
+ "sectionId"
9777
+ ]
9778
+ },
9779
+ "StoryLocator": {
9780
+ "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.",
9781
+ "oneOf": [
9782
+ {
9783
+ "type": "object",
9784
+ "properties": {
9785
+ "kind": {
9786
+ "const": "story",
9787
+ "type": "string"
9788
+ },
9789
+ "storyType": {
9790
+ "const": "body",
9791
+ "type": "string"
9792
+ }
9793
+ },
9794
+ "additionalProperties": false,
9795
+ "required": [
9796
+ "kind",
9797
+ "storyType"
9798
+ ]
9799
+ },
9800
+ {
9801
+ "type": "object",
9802
+ "properties": {
9803
+ "kind": {
9804
+ "const": "story",
9805
+ "type": "string"
9806
+ },
9807
+ "storyType": {
9808
+ "const": "headerFooterSlot",
9809
+ "type": "string"
9810
+ },
9811
+ "section": {
9812
+ "$ref": "#/$defs/SectionAddress"
9813
+ },
9814
+ "headerFooterKind": {
9815
+ "enum": [
9816
+ "header",
9817
+ "footer"
9818
+ ]
9819
+ },
9820
+ "variant": {
9821
+ "enum": [
9822
+ "default",
9823
+ "first",
9824
+ "even"
9825
+ ]
9826
+ },
9827
+ "resolution": {
9828
+ "enum": [
9829
+ "effective",
9830
+ "explicit"
9831
+ ]
9832
+ },
9833
+ "onWrite": {
9834
+ "enum": [
9835
+ "materializeIfInherited",
9836
+ "editResolvedPart",
9837
+ "error"
9838
+ ]
9839
+ }
9840
+ },
9841
+ "additionalProperties": false,
9842
+ "required": [
9843
+ "kind",
9844
+ "storyType",
9845
+ "section",
9846
+ "headerFooterKind",
9847
+ "variant"
9848
+ ]
9849
+ },
9850
+ {
9851
+ "type": "object",
9852
+ "properties": {
9853
+ "kind": {
9854
+ "const": "story",
9855
+ "type": "string"
9856
+ },
9857
+ "storyType": {
9858
+ "const": "headerFooterPart",
9859
+ "type": "string"
9860
+ },
9861
+ "refId": {
9862
+ "type": "string"
9863
+ }
9864
+ },
9865
+ "additionalProperties": false,
9866
+ "required": [
9867
+ "kind",
9868
+ "storyType",
9869
+ "refId"
9870
+ ]
9871
+ },
9872
+ {
9873
+ "type": "object",
9874
+ "properties": {
9875
+ "kind": {
9876
+ "const": "story",
9877
+ "type": "string"
9878
+ },
9879
+ "storyType": {
9880
+ "const": "footnote",
9881
+ "type": "string"
9882
+ },
9883
+ "noteId": {
9884
+ "type": "string"
9885
+ }
9886
+ },
9887
+ "additionalProperties": false,
9888
+ "required": [
9889
+ "kind",
9890
+ "storyType",
9891
+ "noteId"
9892
+ ]
9893
+ },
9894
+ {
9895
+ "type": "object",
9896
+ "properties": {
9897
+ "kind": {
9898
+ "const": "story",
9899
+ "type": "string"
9900
+ },
9901
+ "storyType": {
9902
+ "const": "endnote",
9903
+ "type": "string"
9904
+ },
9905
+ "noteId": {
9906
+ "type": "string"
9907
+ }
9908
+ },
9909
+ "additionalProperties": false,
9910
+ "required": [
9911
+ "kind",
9912
+ "storyType",
9913
+ "noteId"
9914
+ ]
9915
+ },
9916
+ {
9917
+ "type": "object",
9918
+ "properties": {
9919
+ "kind": {
9920
+ "const": "story",
9921
+ "type": "string"
9922
+ },
9923
+ "storyType": {
9924
+ "const": "textbox",
9925
+ "type": "string"
9926
+ },
9927
+ "textboxId": {
9928
+ "type": "string"
9929
+ }
9930
+ },
9931
+ "additionalProperties": false,
9932
+ "required": [
9933
+ "kind",
9934
+ "storyType",
9935
+ "textboxId"
9936
+ ]
9937
+ }
9938
+ ]
9939
+ },
9940
+ "TableAddress": {
9941
+ "type": "object",
9942
+ "properties": {
9943
+ "kind": {
9944
+ "const": "block",
9945
+ "type": "string"
9946
+ },
9947
+ "nodeType": {
9948
+ "const": "table",
9949
+ "type": "string"
9950
+ },
9951
+ "nodeId": {
9952
+ "type": "string"
9953
+ }
9954
+ },
9955
+ "additionalProperties": false,
9956
+ "required": [
9957
+ "kind",
9958
+ "nodeType",
9959
+ "nodeId"
9960
+ ]
9961
+ },
9962
+ "TableCellAddress": {
9963
+ "type": "object",
9964
+ "properties": {
9965
+ "kind": {
9966
+ "const": "block",
9967
+ "type": "string"
9968
+ },
9969
+ "nodeType": {
9970
+ "const": "tableCell",
9971
+ "type": "string"
9972
+ },
9973
+ "nodeId": {
9974
+ "type": "string"
9975
+ }
9976
+ },
9977
+ "additionalProperties": false,
9978
+ "required": [
9979
+ "kind",
9980
+ "nodeType",
9981
+ "nodeId"
9982
+ ]
9983
+ },
9984
+ "TableOrCellAddress": {
9985
+ "type": "object",
9986
+ "properties": {
9987
+ "kind": {
9988
+ "const": "block",
9989
+ "type": "string"
9990
+ },
9991
+ "nodeType": {
9992
+ "enum": [
9993
+ "table",
9994
+ "tableCell"
9995
+ ]
9996
+ },
9997
+ "nodeId": {
9998
+ "type": "string"
9999
+ }
10000
+ },
10001
+ "additionalProperties": false,
10002
+ "required": [
10003
+ "kind",
10004
+ "nodeType",
10005
+ "nodeId"
10006
+ ]
10007
+ },
10008
+ "TableRowAddress": {
10009
+ "type": "object",
10010
+ "properties": {
10011
+ "kind": {
10012
+ "const": "block",
10013
+ "type": "string"
10014
+ },
10015
+ "nodeType": {
10016
+ "const": "tableRow",
10017
+ "type": "string"
10018
+ },
10019
+ "nodeId": {
10020
+ "type": "string"
10021
+ }
10022
+ },
10023
+ "additionalProperties": false,
10024
+ "required": [
10025
+ "kind",
10026
+ "nodeType",
10027
+ "nodeId"
10028
+ ]
10029
+ }
10030
+ }
6941
10031
  },
6942
10032
  "mutates": true,
6943
10033
  "operations": [