@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.19"
5
+ "version": "0.21.20"
6
6
  },
7
7
  "tools": [
8
8
  {
@@ -72,14 +72,14 @@
72
72
  }
73
73
  },
74
74
  {
75
- "name": "docx_fill_table_from_table",
75
+ "name": "docx_fill_table_from_tables",
76
76
  "providerContract": {
77
- "source": "packages/docx-cli/contracts/mcp-input/docx_fill_table_from_table.schema.json",
78
- "sha256": "d1fe3fc40bf7dda75cb0d485339a45860fda492065d97ee8dbcb446a4795771e"
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/docx_fill_table_from_table.schema.json",
82
- "sha256": "d1fe3fc40bf7dda75cb0d485339a45860fda492065d97ee8dbcb446a4795771e"
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 docx_fill_table_from_table 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.',
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 a source table, map source to target, derive text, choose business columns, identify headers, or accept non-text cell content; use docx_fill_table_from_table and docx_replace_content_from_source for source-owned table content.',
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: 'docx_fill_table_from_table',
434
- description: 'Fill one current target-table body from one current source-table row range. Select the source grid column whose native vertical merges define logical records, then map source grid columns onto the target prototype cells. Target columns belonging to one prototype cell retain that horizontal span; multiple prototype cells receive source values in row order. The provider derives output rows and vertical merges, validates the complete target grid, commits once, and returns structural readback. It does not choose source or target business meaning, filter records, translate or rewrite text, or apply business-specific rules. 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_table'),
436
- outputSchema: fixedEditOutput('docx_fill_table_from_table'),
437
- handler: args => fixedEdit('docx_fill_table_from_table', args),
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@tiwater/office-mcp",
3
- "version": "0.21.19",
3
+ "version": "0.21.20",
4
4
  "description": "Published MCP server for Tiwater Office document capabilities",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -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
- }