@tiwater/office-mcp 0.20.1 → 0.20.3

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.
@@ -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.20.1"
5
+ "version": "0.20.3"
6
6
  },
7
7
  "tools": [
8
8
  {
package/office/index.mjs CHANGED
@@ -194,6 +194,8 @@ const docxNestedObjectIdentity = docxObjectIdentity.pick({
194
194
  }).extend({
195
195
  gridSpan: z.number().int().positive().optional(),
196
196
  verticalMerge: z.string().optional(),
197
+ verticalMergeOwner: docxAddress.optional(),
198
+ logicalText: z.string().optional(),
197
199
  }).strict();
198
200
  const docxObservationNode = z.lazy(() => z.object({
199
201
  object: docxNestedObjectIdentity,
@@ -329,7 +331,7 @@ const tools = [
329
331
  },
330
332
  {
331
333
  name: 'docx_read_object',
332
- description: 'Read selected rows, cells, or paragraphs from one native DOCX and retain the complete result at output. The response returns compact requested descendants when bounded; if receipt.narrowingRequired is true, request fewer observed addresses or descendants. Use docx_read_table for a table.',
334
+ description: 'Read selected rows, cells, or paragraphs from one native DOCX and retain the complete result at output. A selected cell exposes its vertical-merge owner and logical text, so a continue cell keeps its physical identity while resolving the restart cell value. The response returns compact requested descendants when bounded; if receipt.narrowingRequired is true, request fewer observed addresses or descendants. Use docx_read_table for a table.',
333
335
  inputSchema: inputContract('docx_read_object'),
334
336
  outputSchema: docxReadObjectOutput,
335
337
  annotations: { readOnlyHint: true, idempotentHint: true },
@@ -337,7 +339,7 @@ const tools = [
337
339
  },
338
340
  {
339
341
  name: 'docx_read_table',
340
- description: 'Read exactly one table selected from docx_table_index by native OpenXML address. Each call retains full paragraph and text-node detail for exactly the returned row page at output; it never builds another whole-table data object. The machine response is the compact form of that page: each row and cell keeps its reusable native address, grid position and span, vertical-merge owner, physical text, and logical text. In a vertical merge, restart begins one logical cell and a continue cell is not an independent row value: logicalText resolves the restart cell value while text remains the physical cell value. Process the current page before continuing once with receipt.nextOffset; never revisit an earlier offset. Use docx_read_object only when one selected object needs a narrower descendant view. The provider reports physical structure only; the Agent decides the template and business meaning.',
342
+ description: 'Read exactly one table selected from docx_table_index by native OpenXML address. Each call retains full paragraph and text-node detail for exactly the returned row page at output; it never builds another whole-table data object. The machine response is the compact form of that page: each row and cell keeps its reusable native address, grid position and span, vertical-merge owner, physical text, and logical text. In a vertical merge, restart begins one logical cell and a continue cell is not an independent row value: logicalText resolves the restart cell value while text remains the physical cell value. A table observation is complete only when receipt.remaining is 0; process each page once in ascending receipt.nextOffset order. Use docx_read_object only when one selected object needs a narrower descendant view. The provider reports physical structure only; the Agent decides the template and business meaning.',
341
343
  inputSchema: inputContract('docx_read_table'),
342
344
  outputSchema: docxTableReadOutput,
343
345
  annotations: { readOnlyHint: true, idempotentHint: true },
@@ -345,7 +347,7 @@ const tools = [
345
347
  },
346
348
  {
347
349
  name: 'docx_copy_content',
348
- description: 'Replace content in existing plain-text target paragraphs or cells while retaining target container formatting and source inline meaning. A selection copies a whole object by OpenXML address, or an exact substring when range is attached to a run or text address.',
350
+ description: 'Replace content in existing plain-text target paragraphs or cells while retaining target container formatting. A whole-object selection copies only that object\'s inline content; a range copies an exact substring from a run or text address. Source table, row, cell, span, and merge structure are not copied.',
349
351
  inputSchema: inputContract('docx_copy_content'),
350
352
  outputSchema: fixedEditOutput('docx_copy_content'),
351
353
  handler: args => fixedEdit('docx_copy_content', args),
@@ -627,6 +629,8 @@ function compactDocxObservation(observation) {
627
629
  textPreview: children.length === 0 ? identity.textPreview : null,
628
630
  ...(identity.gridSpan === null ? {} : { gridSpan: identity.gridSpan }),
629
631
  ...(identity.verticalMerge === null ? {} : { verticalMerge: identity.verticalMerge }),
632
+ ...(node.object.verticalMergeOwner === null ? {} : { verticalMergeOwner: node.object.verticalMergeOwner }),
633
+ ...(node.object.logicalText === null ? {} : { logicalText: node.object.logicalText }),
630
634
  };
631
635
  return {
632
636
  object,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tiwater/office-mcp",
3
- "version": "0.20.1",
3
+ "version": "0.20.3",
4
4
  "description": "Published MCP server for Tiwater Office document capabilities",
5
5
  "type": "module",
6
6
  "license": "MIT",