@tiwater/office-mcp 0.21.19 → 0.21.20
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.
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "tiwater.office-mcp-input/docx_fill_table_from_tables",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"input": { "type": "string", "minLength": 1, "description": "Current target DOCX.", "x-tiwater-file-role": "read" },
|
|
7
|
+
"table": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"description": "Current target table address returned by docx_read_table or docx_table_index.",
|
|
10
|
+
"properties": {
|
|
11
|
+
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
12
|
+
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
13
|
+
},
|
|
14
|
+
"required": ["part", "path"],
|
|
15
|
+
"additionalProperties": false
|
|
16
|
+
},
|
|
17
|
+
"existingRows": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"description": "Exact contiguous current target row range to replace; it must enclose every vertical merge it intersects.",
|
|
20
|
+
"properties": {
|
|
21
|
+
"first": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"properties": {
|
|
24
|
+
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
25
|
+
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
26
|
+
},
|
|
27
|
+
"required": ["part", "path"],
|
|
28
|
+
"additionalProperties": false
|
|
29
|
+
},
|
|
30
|
+
"last": {
|
|
31
|
+
"type": "object",
|
|
32
|
+
"properties": {
|
|
33
|
+
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
34
|
+
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
35
|
+
},
|
|
36
|
+
"required": ["part", "path"],
|
|
37
|
+
"additionalProperties": false
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"required": ["first", "last"],
|
|
41
|
+
"additionalProperties": false
|
|
42
|
+
},
|
|
43
|
+
"prototypeRow": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"description": "One current row inside existingRows whose cell formatting is reused for every generated body row.",
|
|
46
|
+
"properties": {
|
|
47
|
+
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
48
|
+
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
49
|
+
},
|
|
50
|
+
"required": ["part", "path"],
|
|
51
|
+
"additionalProperties": false
|
|
52
|
+
},
|
|
53
|
+
"sources": {
|
|
54
|
+
"type": "array",
|
|
55
|
+
"minItems": 1,
|
|
56
|
+
"description": "Ordered source-table ranges whose logical records are concatenated into the target body. Source boundaries never create a vertical merge with one another.",
|
|
57
|
+
"items": {
|
|
58
|
+
"type": "object",
|
|
59
|
+
"properties": {
|
|
60
|
+
"input": { "type": "string", "minLength": 1, "description": "Current source DOCX.", "x-tiwater-file-role": "read" },
|
|
61
|
+
"table": {
|
|
62
|
+
"type": "object",
|
|
63
|
+
"description": "Current source table address.",
|
|
64
|
+
"properties": {
|
|
65
|
+
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
66
|
+
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
67
|
+
},
|
|
68
|
+
"required": ["part", "path"],
|
|
69
|
+
"additionalProperties": false
|
|
70
|
+
},
|
|
71
|
+
"rows": {
|
|
72
|
+
"type": "object",
|
|
73
|
+
"description": "Exact contiguous source data-row range. Intersecting native vertical merges are clipped to this range, retain their owner content, and restart at the first selected row.",
|
|
74
|
+
"properties": {
|
|
75
|
+
"first": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"properties": {
|
|
78
|
+
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
79
|
+
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
80
|
+
},
|
|
81
|
+
"required": ["part", "path"],
|
|
82
|
+
"additionalProperties": false
|
|
83
|
+
},
|
|
84
|
+
"last": {
|
|
85
|
+
"type": "object",
|
|
86
|
+
"properties": {
|
|
87
|
+
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
88
|
+
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
89
|
+
},
|
|
90
|
+
"required": ["part", "path"],
|
|
91
|
+
"additionalProperties": false
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"required": ["first", "last"],
|
|
95
|
+
"additionalProperties": false
|
|
96
|
+
},
|
|
97
|
+
"recordColumn": {
|
|
98
|
+
"type": "object",
|
|
99
|
+
"description": "Source grid-column address whose native vertical-merge owners define consecutive logical records. An unmerged cell defines one record.",
|
|
100
|
+
"properties": {
|
|
101
|
+
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
102
|
+
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
103
|
+
},
|
|
104
|
+
"required": ["part", "path"],
|
|
105
|
+
"additionalProperties": false
|
|
106
|
+
},
|
|
107
|
+
"columnMappings": {
|
|
108
|
+
"type": "array",
|
|
109
|
+
"minItems": 1,
|
|
110
|
+
"description": "Complete projection from this source grid onto all target prototype cells. Multiple adjacent source columns may compose one target cell; one source column may spread its logical values across several target cells.",
|
|
111
|
+
"items": {
|
|
112
|
+
"type": "object",
|
|
113
|
+
"properties": {
|
|
114
|
+
"sourceColumns": {
|
|
115
|
+
"type": "array",
|
|
116
|
+
"minItems": 1,
|
|
117
|
+
"description": "One or more contiguous source grid columns in native order. Multiple columns compose one target cell; a source cell spanning several selected columns contributes once.",
|
|
118
|
+
"items": {
|
|
119
|
+
"type": "object",
|
|
120
|
+
"properties": {
|
|
121
|
+
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
122
|
+
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
123
|
+
},
|
|
124
|
+
"required": ["part", "path"],
|
|
125
|
+
"additionalProperties": false
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"targetColumns": {
|
|
129
|
+
"type": "array",
|
|
130
|
+
"minItems": 1,
|
|
131
|
+
"description": "One or more contiguous target grid columns covering complete prototype cells.",
|
|
132
|
+
"items": {
|
|
133
|
+
"type": "object",
|
|
134
|
+
"properties": {
|
|
135
|
+
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
136
|
+
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
137
|
+
},
|
|
138
|
+
"required": ["part", "path"],
|
|
139
|
+
"additionalProperties": false
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"joinWith": {
|
|
143
|
+
"type": "string",
|
|
144
|
+
"description": "Separator used when sourceColumns compose one target cell. Defaults to a newline."
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
"required": ["sourceColumns", "targetColumns"],
|
|
148
|
+
"additionalProperties": false
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"required": ["input", "table", "rows", "recordColumn", "columnMappings"],
|
|
153
|
+
"additionalProperties": false
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"output": { "type": "string", "minLength": 1, "description": "Output DOCX path; may equal input for one atomic in-place update.", "x-tiwater-file-role": "write" },
|
|
157
|
+
"receiptOutput": { "type": "string", "minLength": 1, "x-tiwater-file-role": "write", "x-tiwater-file-effect": false }
|
|
158
|
+
},
|
|
159
|
+
"required": ["input", "table", "existingRows", "prototypeRow", "sources", "output", "receiptOutput"],
|
|
160
|
+
"additionalProperties": false
|
|
161
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"schema": "tiwater.office-provider-contract-manifest/v1",
|
|
3
3
|
"provider": {
|
|
4
4
|
"id": "@tiwater/office-mcp",
|
|
5
|
-
"version": "0.21.
|
|
5
|
+
"version": "0.21.20"
|
|
6
6
|
},
|
|
7
7
|
"tools": [
|
|
8
8
|
{
|
|
@@ -72,14 +72,14 @@
|
|
|
72
72
|
}
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
|
-
"name": "
|
|
75
|
+
"name": "docx_fill_table_from_tables",
|
|
76
76
|
"providerContract": {
|
|
77
|
-
"source": "packages/docx-cli/contracts/mcp-input/
|
|
78
|
-
"sha256": "
|
|
77
|
+
"source": "packages/docx-cli/contracts/mcp-input/docx_fill_table_from_tables.schema.json",
|
|
78
|
+
"sha256": "f4778f68707c1bc505bd1b38c26508b9ff80d2bc1a361f1630ecb70dbc6a542e"
|
|
79
79
|
},
|
|
80
80
|
"inputContract": {
|
|
81
|
-
"path": "office/contracts/
|
|
82
|
-
"sha256": "
|
|
81
|
+
"path": "office/contracts/docx_fill_table_from_tables.schema.json",
|
|
82
|
+
"sha256": "f4778f68707c1bc505bd1b38c26508b9ff80d2bc1a361f1630ecb70dbc6a542e"
|
|
83
83
|
}
|
|
84
84
|
},
|
|
85
85
|
{
|
package/office/index.mjs
CHANGED
|
@@ -410,7 +410,7 @@ const tools = [
|
|
|
410
410
|
},
|
|
411
411
|
{
|
|
412
412
|
name: 'docx_replace_content_from_source',
|
|
413
|
-
description: 'Replace existing target paragraph or table-cell content from explicitly selected native source paragraphs, runs, text nodes, or exact text ranges while retaining target container formatting and table structure. Use it after
|
|
413
|
+
description: 'Replace existing target paragraph or table-cell content from explicitly selected native source paragraphs, runs, text nodes, or exact text ranges while retaining target container formatting and table structure. Use it after docx_fill_table_from_tables when the target needs selected source child content instead of the whole source cell; supply returned target-cell addresses and observed source descendant addresses, never retype source-owned text. It does not copy source rows, cells, spans, or merges.',
|
|
414
414
|
inputSchema: inputContract('docx_replace_content_from_source'),
|
|
415
415
|
outputSchema: fixedEditOutput('docx_replace_content_from_source'),
|
|
416
416
|
handler: args => fixedEdit('docx_replace_content_from_source', args),
|
|
@@ -424,17 +424,17 @@ const tools = [
|
|
|
424
424
|
},
|
|
425
425
|
{
|
|
426
426
|
name: 'docx_set_table_body',
|
|
427
|
-
description: 'Atomically replace one exact current target-table row range while retaining the table, target styles, grid widths, and all rows and surrounding content outside the range. When retaining leading rows reported with repeatHeader=true, existingRows starts after all of them and never at a verticalMerge=continue row. Name every target grid column in native order and choose one current row inside existingRows as the style prototype for each final row. Horizontal spans use contiguous column IDs. Set rowSpan on one logical cell to occupy multiple rows and omit those columns from the covered rows; the provider writes native vertical merge cells. Every other grid column remains explicit. Every explicit cell includes an already-derived value; source-owned content is not retyped here. An empty final row array removes the range when another table row remains. The provider commits once and returns structural readback. It does not read
|
|
427
|
+
description: 'Atomically replace one exact current target-table row range while retaining the table, target styles, grid widths, and all rows and surrounding content outside the range. When retaining leading rows reported with repeatHeader=true, existingRows starts after all of them and never at a verticalMerge=continue row. Name every target grid column in native order and choose one current row inside existingRows as the style prototype for each final row. Horizontal spans use contiguous column IDs. Set rowSpan on one logical cell to occupy multiple rows and omit those columns from the covered rows; the provider writes native vertical merge cells. Every other grid column remains explicit. Every explicit cell includes an already-derived value; source-owned content is not retyped here. An empty final row array removes the range when another table row remains. The provider commits once and returns structural readback. It does not read source tables, map source to target, derive text, choose business columns, identify headers, or accept non-text cell content; use docx_fill_table_from_tables and docx_replace_content_from_source for source-owned table content.',
|
|
428
428
|
inputSchema: inputContract('docx_set_table_body'),
|
|
429
429
|
outputSchema: fixedEditOutput('docx_set_table_body'),
|
|
430
430
|
handler: args => fixedEdit('docx_set_table_body', args),
|
|
431
431
|
},
|
|
432
432
|
{
|
|
433
|
-
name: '
|
|
434
|
-
description: 'Fill one current target-table body from one current source-table row
|
|
435
|
-
inputSchema: inputContract('
|
|
436
|
-
outputSchema: fixedEditOutput('
|
|
437
|
-
handler: args => fixedEdit('
|
|
433
|
+
name: 'docx_fill_table_from_tables',
|
|
434
|
+
description: 'Fill one current target-table body from one or more explicitly ordered current source-table row ranges. For each source, select the grid column whose native vertical merges define logical records and map its grid columns onto every target prototype cell. The provider concatenates source records in declared order, preserves horizontal spans, rebuilds vertical merges only within each source range, validates the complete target grid, commits once, and returns structural readback. It does not discover source tables, choose source or target business meaning, filter records, translate or rewrite text, or apply business-specific rules. A single source uses the same sources array with one item. When only selected source paragraphs belong in the target, use its returned target-cell addresses with docx_replace_content_from_source before readback.',
|
|
435
|
+
inputSchema: inputContract('docx_fill_table_from_tables'),
|
|
436
|
+
outputSchema: fixedEditOutput('docx_fill_table_from_tables'),
|
|
437
|
+
handler: args => fixedEdit('docx_fill_table_from_tables', args),
|
|
438
438
|
},
|
|
439
439
|
{
|
|
440
440
|
name: 'docx_insert_objects',
|
package/package.json
CHANGED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "tiwater.office-mcp-input/docx_fill_table_from_table",
|
|
4
|
-
"type": "object",
|
|
5
|
-
"properties": {
|
|
6
|
-
"input": { "type": "string", "minLength": 1, "description": "Current target DOCX.", "x-tiwater-file-role": "read" },
|
|
7
|
-
"table": {
|
|
8
|
-
"type": "object",
|
|
9
|
-
"properties": {
|
|
10
|
-
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
11
|
-
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
12
|
-
},
|
|
13
|
-
"required": ["part", "path"],
|
|
14
|
-
"additionalProperties": false,
|
|
15
|
-
"description": "Current target table address returned by docx_read_table or docx_table_index."
|
|
16
|
-
},
|
|
17
|
-
"existingRows": {
|
|
18
|
-
"type": "object",
|
|
19
|
-
"properties": {
|
|
20
|
-
"first": {
|
|
21
|
-
"type": "object",
|
|
22
|
-
"properties": {
|
|
23
|
-
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
24
|
-
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
25
|
-
},
|
|
26
|
-
"required": ["part", "path"],
|
|
27
|
-
"additionalProperties": false
|
|
28
|
-
},
|
|
29
|
-
"last": {
|
|
30
|
-
"type": "object",
|
|
31
|
-
"properties": {
|
|
32
|
-
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
33
|
-
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
34
|
-
},
|
|
35
|
-
"required": ["part", "path"],
|
|
36
|
-
"additionalProperties": false
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
"required": ["first", "last"],
|
|
40
|
-
"additionalProperties": false,
|
|
41
|
-
"description": "Exact contiguous current target row range to replace; it must enclose every vertical merge it intersects."
|
|
42
|
-
},
|
|
43
|
-
"prototypeRow": {
|
|
44
|
-
"type": "object",
|
|
45
|
-
"properties": {
|
|
46
|
-
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
47
|
-
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
48
|
-
},
|
|
49
|
-
"required": ["part", "path"],
|
|
50
|
-
"additionalProperties": false,
|
|
51
|
-
"description": "One current row inside existingRows whose cell formatting is reused for every generated body row."
|
|
52
|
-
},
|
|
53
|
-
"sourceInput": { "type": "string", "minLength": 1, "description": "Current source DOCX.", "x-tiwater-file-role": "read" },
|
|
54
|
-
"sourceTable": {
|
|
55
|
-
"type": "object",
|
|
56
|
-
"properties": {
|
|
57
|
-
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
58
|
-
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
59
|
-
},
|
|
60
|
-
"required": ["part", "path"],
|
|
61
|
-
"additionalProperties": false,
|
|
62
|
-
"description": "Current source table address returned by docx_read_table or docx_table_index."
|
|
63
|
-
},
|
|
64
|
-
"sourceRows": {
|
|
65
|
-
"type": "object",
|
|
66
|
-
"properties": {
|
|
67
|
-
"first": {
|
|
68
|
-
"type": "object",
|
|
69
|
-
"properties": {
|
|
70
|
-
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
71
|
-
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
72
|
-
},
|
|
73
|
-
"required": ["part", "path"],
|
|
74
|
-
"additionalProperties": false
|
|
75
|
-
},
|
|
76
|
-
"last": {
|
|
77
|
-
"type": "object",
|
|
78
|
-
"properties": {
|
|
79
|
-
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
80
|
-
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
81
|
-
},
|
|
82
|
-
"required": ["part", "path"],
|
|
83
|
-
"additionalProperties": false
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
"required": ["first", "last"],
|
|
87
|
-
"additionalProperties": false,
|
|
88
|
-
"description": "Exact contiguous source data-row range. Intersecting native vertical merges are clipped to this range, retain their owner content, and restart at the first selected row."
|
|
89
|
-
},
|
|
90
|
-
"sourceRecordColumn": {
|
|
91
|
-
"type": "object",
|
|
92
|
-
"properties": {
|
|
93
|
-
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
94
|
-
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
95
|
-
},
|
|
96
|
-
"required": ["part", "path"],
|
|
97
|
-
"additionalProperties": false,
|
|
98
|
-
"description": "Source grid-column address whose native vertical-merge owners define consecutive logical records. An unmerged cell defines one record."
|
|
99
|
-
},
|
|
100
|
-
"columnMappings": {
|
|
101
|
-
"type": "array",
|
|
102
|
-
"minItems": 1,
|
|
103
|
-
"description": "Complete source-to-target grid-column projection. Multiple adjacent source columns may compose one target cell. One source column may spread its logical values across several prototype cells. Composition and spreading cannot occur in the same mapping. Target columns that belong to one prototype cell remain one cell, and unused trailing spread cells stay blank.",
|
|
104
|
-
"items": {
|
|
105
|
-
"type": "object",
|
|
106
|
-
"properties": {
|
|
107
|
-
"sourceColumns": {
|
|
108
|
-
"type": "array",
|
|
109
|
-
"minItems": 1,
|
|
110
|
-
"description": "One or more contiguous source grid columns in native order. Multiple columns compose one target cell; a source cell spanning several selected columns contributes once.",
|
|
111
|
-
"items": {
|
|
112
|
-
"type": "object",
|
|
113
|
-
"properties": {
|
|
114
|
-
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
115
|
-
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
116
|
-
},
|
|
117
|
-
"required": ["part", "path"],
|
|
118
|
-
"additionalProperties": false
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
"targetColumns": {
|
|
122
|
-
"type": "array",
|
|
123
|
-
"minItems": 1,
|
|
124
|
-
"items": {
|
|
125
|
-
"type": "object",
|
|
126
|
-
"properties": {
|
|
127
|
-
"part": { "type": "string", "minLength": 1, "pattern": "^\\/" },
|
|
128
|
-
"path": { "type": "string", "pattern": "^\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\](?:\\/[A-Za-z_][A-Za-z0-9_.-]*:[A-Za-z_][A-Za-z0-9_.-]*\\[[1-9][0-9]*\\])*$" }
|
|
129
|
-
},
|
|
130
|
-
"required": ["part", "path"],
|
|
131
|
-
"additionalProperties": false
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
"joinWith": {
|
|
135
|
-
"type": "string",
|
|
136
|
-
"description": "Separator used when sourceColumns compose one target cell. Defaults to a newline. It does not apply when one source column spreads across multiple target cells."
|
|
137
|
-
}
|
|
138
|
-
},
|
|
139
|
-
"required": ["sourceColumns", "targetColumns"],
|
|
140
|
-
"additionalProperties": false
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
"output": { "type": "string", "minLength": 1, "description": "Output DOCX path; may equal input for one atomic in-place update.", "x-tiwater-file-role": "write" },
|
|
144
|
-
"receiptOutput": { "type": "string", "minLength": 1, "x-tiwater-file-role": "write", "x-tiwater-file-effect": false }
|
|
145
|
-
},
|
|
146
|
-
"required": ["input", "table", "existingRows", "prototypeRow", "sourceInput", "sourceTable", "sourceRows", "sourceRecordColumn", "columnMappings", "output", "receiptOutput"],
|
|
147
|
-
"additionalProperties": false
|
|
148
|
-
}
|