@mcp-z/mcp-sheets 1.0.7 → 1.1.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.
- package/README.md +3 -2
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/index.js +10 -24
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/create-store.js +2 -5
- package/dist/cjs/lib/create-store.js.map +1 -1
- package/dist/cjs/mcp/index.js +8 -19
- package/dist/cjs/mcp/index.js.map +1 -1
- package/dist/cjs/mcp/prompts/a1-notation.js +3 -6
- package/dist/cjs/mcp/prompts/a1-notation.js.map +1 -1
- package/dist/cjs/mcp/prompts/index.js.map +1 -1
- package/dist/cjs/mcp/resources/index.js.map +1 -1
- package/dist/cjs/mcp/resources/spreadsheet.js +3 -6
- package/dist/cjs/mcp/resources/spreadsheet.js.map +1 -1
- package/dist/cjs/mcp/tools/cells-format.js +7 -10
- package/dist/cjs/mcp/tools/cells-format.js.map +1 -1
- package/dist/cjs/mcp/tools/chart-create.js +7 -10
- package/dist/cjs/mcp/tools/chart-create.js.map +1 -1
- package/dist/cjs/mcp/tools/columns-get.js +4 -8
- package/dist/cjs/mcp/tools/columns-get.js.map +1 -1
- package/dist/cjs/mcp/tools/columns-update.js +4 -8
- package/dist/cjs/mcp/tools/columns-update.js.map +1 -1
- package/dist/cjs/mcp/tools/csv-get-columns.js +4 -8
- package/dist/cjs/mcp/tools/csv-get-columns.js.map +1 -1
- package/dist/cjs/mcp/tools/dimensions-batch-update.js +4 -8
- package/dist/cjs/mcp/tools/dimensions-batch-update.js.map +1 -1
- package/dist/cjs/mcp/tools/dimensions-move.js +4 -8
- package/dist/cjs/mcp/tools/dimensions-move.js.map +1 -1
- package/dist/cjs/mcp/tools/index.d.cts +1 -0
- package/dist/cjs/mcp/tools/index.d.ts +1 -0
- package/dist/cjs/mcp/tools/index.js +4 -0
- package/dist/cjs/mcp/tools/index.js.map +1 -1
- package/dist/cjs/mcp/tools/lib/dimension-operations.d.cts +2 -2
- package/dist/cjs/mcp/tools/lib/dimension-operations.d.ts +2 -2
- package/dist/cjs/mcp/tools/lib/dimension-operations.js +5 -5
- package/dist/cjs/mcp/tools/lib/dimension-operations.js.map +1 -1
- package/dist/cjs/mcp/tools/rows-append.js +4 -8
- package/dist/cjs/mcp/tools/rows-append.js.map +1 -1
- package/dist/cjs/mcp/tools/rows-csv-append.js +33 -29
- package/dist/cjs/mcp/tools/rows-csv-append.js.map +1 -1
- package/dist/cjs/mcp/tools/rows-get.js +4 -8
- package/dist/cjs/mcp/tools/rows-get.js.map +1 -1
- package/dist/cjs/mcp/tools/sheet-copy-to.js +4 -8
- package/dist/cjs/mcp/tools/sheet-copy-to.js.map +1 -1
- package/dist/cjs/mcp/tools/sheet-copy.js +5 -11
- package/dist/cjs/mcp/tools/sheet-copy.js.map +1 -1
- package/dist/cjs/mcp/tools/sheet-create.js +4 -8
- package/dist/cjs/mcp/tools/sheet-create.js.map +1 -1
- package/dist/cjs/mcp/tools/sheet-delete.js +5 -11
- package/dist/cjs/mcp/tools/sheet-delete.js.map +1 -1
- package/dist/cjs/mcp/tools/sheet-find.js +4 -8
- package/dist/cjs/mcp/tools/sheet-find.js.map +1 -1
- package/dist/cjs/mcp/tools/sheet-rename.js +4 -8
- package/dist/cjs/mcp/tools/sheet-rename.js.map +1 -1
- package/dist/cjs/mcp/tools/spreadsheet-copy.js +5 -11
- package/dist/cjs/mcp/tools/spreadsheet-copy.js.map +1 -1
- package/dist/cjs/mcp/tools/spreadsheet-create.js +4 -8
- package/dist/cjs/mcp/tools/spreadsheet-create.js.map +1 -1
- package/dist/cjs/mcp/tools/spreadsheet-find.js +5 -11
- package/dist/cjs/mcp/tools/spreadsheet-find.js.map +1 -1
- package/dist/cjs/mcp/tools/spreadsheet-rename.js +4 -8
- package/dist/cjs/mcp/tools/spreadsheet-rename.js.map +1 -1
- package/dist/cjs/mcp/tools/validation-set.js +4 -8
- package/dist/cjs/mcp/tools/validation-set.js.map +1 -1
- package/dist/cjs/mcp/tools/values-batch-update.d.cts +1 -1
- package/dist/cjs/mcp/tools/values-batch-update.d.ts +1 -1
- package/dist/cjs/mcp/tools/values-batch-update.js +5 -9
- package/dist/cjs/mcp/tools/values-batch-update.js.map +1 -1
- package/dist/cjs/mcp/tools/values-clear.js +4 -8
- package/dist/cjs/mcp/tools/values-clear.js.map +1 -1
- package/dist/cjs/mcp/tools/values-csv-update.js +4 -8
- package/dist/cjs/mcp/tools/values-csv-update.js.map +1 -1
- package/dist/cjs/mcp/tools/values-markdown-update.d.cts +76 -0
- package/dist/cjs/mcp/tools/values-markdown-update.d.ts +76 -0
- package/dist/cjs/mcp/tools/values-markdown-update.js +408 -0
- package/dist/cjs/mcp/tools/values-markdown-update.js.map +1 -0
- package/dist/cjs/mcp/tools/values-replace.js +5 -11
- package/dist/cjs/mcp/tools/values-replace.js.map +1 -1
- package/dist/cjs/mcp/tools/values-search.js +6 -12
- package/dist/cjs/mcp/tools/values-search.js.map +1 -1
- package/dist/cjs/schemas/index.js.map +1 -1
- package/dist/cjs/setup/config.js +11 -25
- package/dist/cjs/setup/config.js.map +1 -1
- package/dist/cjs/setup/http.js +15 -16
- package/dist/cjs/setup/http.js.map +1 -1
- package/dist/cjs/setup/index.js.map +1 -1
- package/dist/cjs/setup/oauth-google.js +9 -16
- package/dist/cjs/setup/oauth-google.js.map +1 -1
- package/dist/cjs/setup/runtime.d.cts +1 -1
- package/dist/cjs/setup/runtime.d.ts +1 -1
- package/dist/cjs/setup/runtime.js +11 -25
- package/dist/cjs/setup/runtime.js.map +1 -1
- package/dist/cjs/setup/stdio.js +15 -16
- package/dist/cjs/setup/stdio.js.map +1 -1
- package/dist/cjs/spreadsheet/column-utilities.js.map +1 -1
- package/dist/cjs/spreadsheet/csv-streaming.js +2 -5
- package/dist/cjs/spreadsheet/csv-streaming.js.map +1 -1
- package/dist/cjs/spreadsheet/data-operations.js +19 -21
- package/dist/cjs/spreadsheet/data-operations.js.map +1 -1
- package/dist/cjs/spreadsheet/deduplication-utils.js.map +1 -1
- package/dist/cjs/spreadsheet/markdown-runs.d.cts +67 -0
- package/dist/cjs/spreadsheet/markdown-runs.d.ts +67 -0
- package/dist/cjs/spreadsheet/markdown-runs.js +443 -0
- package/dist/cjs/spreadsheet/markdown-runs.js.map +1 -0
- package/dist/cjs/spreadsheet/range-operations.d.cts +1 -1
- package/dist/cjs/spreadsheet/range-operations.d.ts +1 -1
- package/dist/cjs/spreadsheet/range-operations.js +1 -1
- package/dist/cjs/spreadsheet/range-operations.js.map +1 -1
- package/dist/cjs/spreadsheet/sheet-operations.d.cts +1 -1
- package/dist/cjs/spreadsheet/sheet-operations.d.ts +1 -1
- package/dist/cjs/spreadsheet/sheet-operations.js +15 -16
- package/dist/cjs/spreadsheet/sheet-operations.js.map +1 -1
- package/dist/cjs/spreadsheet/spreadsheet-management.d.cts +8 -8
- package/dist/cjs/spreadsheet/spreadsheet-management.d.ts +8 -8
- package/dist/cjs/spreadsheet/spreadsheet-management.js +2 -5
- package/dist/cjs/spreadsheet/spreadsheet-management.js.map +1 -1
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/create-store.js.map +1 -1
- package/dist/esm/mcp/index.js.map +1 -1
- package/dist/esm/mcp/prompts/a1-notation.js.map +1 -1
- package/dist/esm/mcp/prompts/index.js.map +1 -1
- package/dist/esm/mcp/resources/index.js.map +1 -1
- package/dist/esm/mcp/resources/spreadsheet.js.map +1 -1
- package/dist/esm/mcp/tools/cells-format.js +3 -2
- package/dist/esm/mcp/tools/cells-format.js.map +1 -1
- package/dist/esm/mcp/tools/chart-create.js +3 -2
- package/dist/esm/mcp/tools/chart-create.js.map +1 -1
- package/dist/esm/mcp/tools/columns-get.js.map +1 -1
- package/dist/esm/mcp/tools/columns-update.js.map +1 -1
- package/dist/esm/mcp/tools/csv-get-columns.js.map +1 -1
- package/dist/esm/mcp/tools/dimensions-batch-update.js.map +1 -1
- package/dist/esm/mcp/tools/dimensions-move.js.map +1 -1
- package/dist/esm/mcp/tools/index.d.ts +1 -0
- package/dist/esm/mcp/tools/index.js +1 -0
- package/dist/esm/mcp/tools/index.js.map +1 -1
- package/dist/esm/mcp/tools/lib/dimension-operations.d.ts +2 -2
- package/dist/esm/mcp/tools/lib/dimension-operations.js.map +1 -1
- package/dist/esm/mcp/tools/rows-append.js.map +1 -1
- package/dist/esm/mcp/tools/rows-csv-append.js.map +1 -1
- package/dist/esm/mcp/tools/rows-get.js.map +1 -1
- package/dist/esm/mcp/tools/sheet-copy-to.js.map +1 -1
- package/dist/esm/mcp/tools/sheet-copy.js.map +1 -1
- package/dist/esm/mcp/tools/sheet-create.js.map +1 -1
- package/dist/esm/mcp/tools/sheet-delete.js.map +1 -1
- package/dist/esm/mcp/tools/sheet-find.js.map +1 -1
- package/dist/esm/mcp/tools/sheet-rename.js.map +1 -1
- package/dist/esm/mcp/tools/spreadsheet-copy.js.map +1 -1
- package/dist/esm/mcp/tools/spreadsheet-create.js.map +1 -1
- package/dist/esm/mcp/tools/spreadsheet-find.js.map +1 -1
- package/dist/esm/mcp/tools/spreadsheet-rename.js.map +1 -1
- package/dist/esm/mcp/tools/validation-set.js.map +1 -1
- package/dist/esm/mcp/tools/values-batch-update.d.ts +1 -1
- package/dist/esm/mcp/tools/values-batch-update.js +1 -1
- package/dist/esm/mcp/tools/values-batch-update.js.map +1 -1
- package/dist/esm/mcp/tools/values-clear.js.map +1 -1
- package/dist/esm/mcp/tools/values-csv-update.js.map +1 -1
- package/dist/esm/mcp/tools/values-markdown-update.d.ts +76 -0
- package/dist/esm/mcp/tools/values-markdown-update.js +216 -0
- package/dist/esm/mcp/tools/values-markdown-update.js.map +1 -0
- package/dist/esm/mcp/tools/values-replace.js.map +1 -1
- package/dist/esm/mcp/tools/values-search.js.map +1 -1
- package/dist/esm/schemas/index.js.map +1 -1
- package/dist/esm/setup/config.js.map +1 -1
- package/dist/esm/setup/http.js.map +1 -1
- package/dist/esm/setup/index.js.map +1 -1
- package/dist/esm/setup/oauth-google.js.map +1 -1
- package/dist/esm/setup/runtime.d.ts +1 -1
- package/dist/esm/setup/runtime.js.map +1 -1
- package/dist/esm/setup/stdio.js.map +1 -1
- package/dist/esm/spreadsheet/column-utilities.js.map +1 -1
- package/dist/esm/spreadsheet/csv-streaming.js.map +1 -1
- package/dist/esm/spreadsheet/data-operations.js.map +1 -1
- package/dist/esm/spreadsheet/deduplication-utils.js.map +1 -1
- package/dist/esm/spreadsheet/markdown-runs.d.ts +67 -0
- package/dist/esm/spreadsheet/markdown-runs.js +325 -0
- package/dist/esm/spreadsheet/markdown-runs.js.map +1 -0
- package/dist/esm/spreadsheet/range-operations.d.ts +1 -1
- package/dist/esm/spreadsheet/range-operations.js.map +1 -1
- package/dist/esm/spreadsheet/sheet-operations.d.ts +1 -1
- package/dist/esm/spreadsheet/sheet-operations.js.map +1 -1
- package/dist/esm/spreadsheet/spreadsheet-management.d.ts +8 -8
- package/dist/esm/spreadsheet/spreadsheet-management.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/package.json +12 -8
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { EnrichedExtra } from '@mcp-z/oauth-google';
|
|
2
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
declare const inputSchema: z.ZodObject<{
|
|
5
|
+
id: z.ZodString;
|
|
6
|
+
gid: z.ZodCoercedString<unknown>;
|
|
7
|
+
requests: z.ZodArray<z.ZodObject<{
|
|
8
|
+
cell: z.ZodString;
|
|
9
|
+
text: z.ZodString;
|
|
10
|
+
}, z.core.$strip>>;
|
|
11
|
+
}, z.core.$strip>;
|
|
12
|
+
declare const outputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
13
|
+
type: z.ZodLiteral<"success">;
|
|
14
|
+
id: z.ZodString;
|
|
15
|
+
gid: z.ZodString;
|
|
16
|
+
sheetTitle: z.ZodString;
|
|
17
|
+
sheetUrl: z.ZodString;
|
|
18
|
+
successCount: z.ZodNumber;
|
|
19
|
+
cells: z.ZodArray<z.ZodObject<{
|
|
20
|
+
cell: z.ZodString;
|
|
21
|
+
text: z.ZodString;
|
|
22
|
+
linkCount: z.ZodNumber;
|
|
23
|
+
}, z.core.$strip>>;
|
|
24
|
+
failedCells: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
25
|
+
cell: z.ZodString;
|
|
26
|
+
error: z.ZodString;
|
|
27
|
+
}, z.core.$strip>>>;
|
|
28
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
29
|
+
type: z.ZodLiteral<"auth_required">;
|
|
30
|
+
provider: z.ZodString;
|
|
31
|
+
message: z.ZodString;
|
|
32
|
+
url: z.ZodOptional<z.ZodString>;
|
|
33
|
+
}, z.core.$strip>], "type">;
|
|
34
|
+
export type Input = z.infer<typeof inputSchema>;
|
|
35
|
+
export type Output = z.infer<typeof outputSchema>;
|
|
36
|
+
declare function handler({ id, gid, requests }: Input, extra: EnrichedExtra): Promise<CallToolResult>;
|
|
37
|
+
export default function createTool(): {
|
|
38
|
+
name: string;
|
|
39
|
+
config: {
|
|
40
|
+
readonly description: "Replace cell content with text parsed from inline markdown. Supports [label](url) links, bare URLs, **bold**, *italic*, ~~strikethrough~~ — the only way to put MULTIPLE clickable links in one cell. Block syntax (headers, lists, tables) and other unsupported markdown is written as literal text. Writes text cells only — no formula or number coercion. For whole-cell formatting (colors, borders, number formats) use cells-format.";
|
|
41
|
+
readonly inputSchema: z.ZodObject<{
|
|
42
|
+
id: z.ZodString;
|
|
43
|
+
gid: z.ZodCoercedString<unknown>;
|
|
44
|
+
requests: z.ZodArray<z.ZodObject<{
|
|
45
|
+
cell: z.ZodString;
|
|
46
|
+
text: z.ZodString;
|
|
47
|
+
}, z.core.$strip>>;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
readonly outputSchema: z.ZodObject<{
|
|
50
|
+
result: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
51
|
+
type: z.ZodLiteral<"success">;
|
|
52
|
+
id: z.ZodString;
|
|
53
|
+
gid: z.ZodString;
|
|
54
|
+
sheetTitle: z.ZodString;
|
|
55
|
+
sheetUrl: z.ZodString;
|
|
56
|
+
successCount: z.ZodNumber;
|
|
57
|
+
cells: z.ZodArray<z.ZodObject<{
|
|
58
|
+
cell: z.ZodString;
|
|
59
|
+
text: z.ZodString;
|
|
60
|
+
linkCount: z.ZodNumber;
|
|
61
|
+
}, z.core.$strip>>;
|
|
62
|
+
failedCells: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
63
|
+
cell: z.ZodString;
|
|
64
|
+
error: z.ZodString;
|
|
65
|
+
}, z.core.$strip>>>;
|
|
66
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
67
|
+
type: z.ZodLiteral<"auth_required">;
|
|
68
|
+
provider: z.ZodString;
|
|
69
|
+
message: z.ZodString;
|
|
70
|
+
url: z.ZodOptional<z.ZodString>;
|
|
71
|
+
}, z.core.$strip>], "type">;
|
|
72
|
+
}, z.core.$strip>;
|
|
73
|
+
};
|
|
74
|
+
handler: typeof handler;
|
|
75
|
+
};
|
|
76
|
+
export {};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { EnrichedExtra } from '@mcp-z/oauth-google';
|
|
2
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
declare const inputSchema: z.ZodObject<{
|
|
5
|
+
id: z.ZodString;
|
|
6
|
+
gid: z.ZodCoercedString<unknown>;
|
|
7
|
+
requests: z.ZodArray<z.ZodObject<{
|
|
8
|
+
cell: z.ZodString;
|
|
9
|
+
text: z.ZodString;
|
|
10
|
+
}, z.core.$strip>>;
|
|
11
|
+
}, z.core.$strip>;
|
|
12
|
+
declare const outputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
13
|
+
type: z.ZodLiteral<"success">;
|
|
14
|
+
id: z.ZodString;
|
|
15
|
+
gid: z.ZodString;
|
|
16
|
+
sheetTitle: z.ZodString;
|
|
17
|
+
sheetUrl: z.ZodString;
|
|
18
|
+
successCount: z.ZodNumber;
|
|
19
|
+
cells: z.ZodArray<z.ZodObject<{
|
|
20
|
+
cell: z.ZodString;
|
|
21
|
+
text: z.ZodString;
|
|
22
|
+
linkCount: z.ZodNumber;
|
|
23
|
+
}, z.core.$strip>>;
|
|
24
|
+
failedCells: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
25
|
+
cell: z.ZodString;
|
|
26
|
+
error: z.ZodString;
|
|
27
|
+
}, z.core.$strip>>>;
|
|
28
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
29
|
+
type: z.ZodLiteral<"auth_required">;
|
|
30
|
+
provider: z.ZodString;
|
|
31
|
+
message: z.ZodString;
|
|
32
|
+
url: z.ZodOptional<z.ZodString>;
|
|
33
|
+
}, z.core.$strip>], "type">;
|
|
34
|
+
export type Input = z.infer<typeof inputSchema>;
|
|
35
|
+
export type Output = z.infer<typeof outputSchema>;
|
|
36
|
+
declare function handler({ id, gid, requests }: Input, extra: EnrichedExtra): Promise<CallToolResult>;
|
|
37
|
+
export default function createTool(): {
|
|
38
|
+
name: string;
|
|
39
|
+
config: {
|
|
40
|
+
readonly description: "Replace cell content with text parsed from inline markdown. Supports [label](url) links, bare URLs, **bold**, *italic*, ~~strikethrough~~ — the only way to put MULTIPLE clickable links in one cell. Block syntax (headers, lists, tables) and other unsupported markdown is written as literal text. Writes text cells only — no formula or number coercion. For whole-cell formatting (colors, borders, number formats) use cells-format.";
|
|
41
|
+
readonly inputSchema: z.ZodObject<{
|
|
42
|
+
id: z.ZodString;
|
|
43
|
+
gid: z.ZodCoercedString<unknown>;
|
|
44
|
+
requests: z.ZodArray<z.ZodObject<{
|
|
45
|
+
cell: z.ZodString;
|
|
46
|
+
text: z.ZodString;
|
|
47
|
+
}, z.core.$strip>>;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
readonly outputSchema: z.ZodObject<{
|
|
50
|
+
result: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
51
|
+
type: z.ZodLiteral<"success">;
|
|
52
|
+
id: z.ZodString;
|
|
53
|
+
gid: z.ZodString;
|
|
54
|
+
sheetTitle: z.ZodString;
|
|
55
|
+
sheetUrl: z.ZodString;
|
|
56
|
+
successCount: z.ZodNumber;
|
|
57
|
+
cells: z.ZodArray<z.ZodObject<{
|
|
58
|
+
cell: z.ZodString;
|
|
59
|
+
text: z.ZodString;
|
|
60
|
+
linkCount: z.ZodNumber;
|
|
61
|
+
}, z.core.$strip>>;
|
|
62
|
+
failedCells: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
63
|
+
cell: z.ZodString;
|
|
64
|
+
error: z.ZodString;
|
|
65
|
+
}, z.core.$strip>>>;
|
|
66
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
67
|
+
type: z.ZodLiteral<"auth_required">;
|
|
68
|
+
provider: z.ZodString;
|
|
69
|
+
message: z.ZodString;
|
|
70
|
+
url: z.ZodOptional<z.ZodString>;
|
|
71
|
+
}, z.core.$strip>], "type">;
|
|
72
|
+
}, z.core.$strip>;
|
|
73
|
+
};
|
|
74
|
+
handler: typeof handler;
|
|
75
|
+
};
|
|
76
|
+
export {};
|
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return createTool;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _oauthgoogle = require("@mcp-z/oauth-google");
|
|
12
|
+
var _types = require("@modelcontextprotocol/sdk/types.js");
|
|
13
|
+
var _googleapis = require("googleapis");
|
|
14
|
+
var _zod = require("zod");
|
|
15
|
+
var _indexts = require("../../schemas/index.js");
|
|
16
|
+
var _markdownrunsts = require("../../spreadsheet/markdown-runs.js");
|
|
17
|
+
var _rangeoperationsts = require("../../spreadsheet/range-operations.js");
|
|
18
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
19
|
+
try {
|
|
20
|
+
var info = gen[key](arg);
|
|
21
|
+
var value = info.value;
|
|
22
|
+
} catch (error) {
|
|
23
|
+
reject(error);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (info.done) resolve(value);
|
|
27
|
+
else Promise.resolve(value).then(_next, _throw);
|
|
28
|
+
}
|
|
29
|
+
function _async_to_generator(fn) {
|
|
30
|
+
return function() {
|
|
31
|
+
var self = this, args = arguments;
|
|
32
|
+
return new Promise(function(resolve, reject) {
|
|
33
|
+
var gen = fn.apply(self, args);
|
|
34
|
+
function _next(value) {
|
|
35
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
36
|
+
}
|
|
37
|
+
function _throw(err) {
|
|
38
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
39
|
+
}
|
|
40
|
+
_next(undefined);
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function _instanceof(left, right) {
|
|
45
|
+
"@swc/helpers - instanceof";
|
|
46
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
47
|
+
return !!right[Symbol.hasInstance](left);
|
|
48
|
+
} else return left instanceof right;
|
|
49
|
+
}
|
|
50
|
+
function _ts_generator(thisArg, body) {
|
|
51
|
+
var f, y, t, _ = {
|
|
52
|
+
label: 0,
|
|
53
|
+
sent: function() {
|
|
54
|
+
if (t[0] & 1) throw t[1];
|
|
55
|
+
return t[1];
|
|
56
|
+
},
|
|
57
|
+
trys: [],
|
|
58
|
+
ops: []
|
|
59
|
+
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
|
|
60
|
+
return d(g, "next", {
|
|
61
|
+
value: verb(0)
|
|
62
|
+
}), d(g, "throw", {
|
|
63
|
+
value: verb(1)
|
|
64
|
+
}), d(g, "return", {
|
|
65
|
+
value: verb(2)
|
|
66
|
+
}), typeof Symbol === "function" && d(g, Symbol.iterator, {
|
|
67
|
+
value: function() {
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
}), g;
|
|
71
|
+
function verb(n) {
|
|
72
|
+
return function(v) {
|
|
73
|
+
return step([
|
|
74
|
+
n,
|
|
75
|
+
v
|
|
76
|
+
]);
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function step(op) {
|
|
80
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
81
|
+
while(g && (g = 0, op[0] && (_ = 0)), _)try {
|
|
82
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
83
|
+
if (y = 0, t) op = [
|
|
84
|
+
op[0] & 2,
|
|
85
|
+
t.value
|
|
86
|
+
];
|
|
87
|
+
switch(op[0]){
|
|
88
|
+
case 0:
|
|
89
|
+
case 1:
|
|
90
|
+
t = op;
|
|
91
|
+
break;
|
|
92
|
+
case 4:
|
|
93
|
+
_.label++;
|
|
94
|
+
return {
|
|
95
|
+
value: op[1],
|
|
96
|
+
done: false
|
|
97
|
+
};
|
|
98
|
+
case 5:
|
|
99
|
+
_.label++;
|
|
100
|
+
y = op[1];
|
|
101
|
+
op = [
|
|
102
|
+
0
|
|
103
|
+
];
|
|
104
|
+
continue;
|
|
105
|
+
case 7:
|
|
106
|
+
op = _.ops.pop();
|
|
107
|
+
_.trys.pop();
|
|
108
|
+
continue;
|
|
109
|
+
default:
|
|
110
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
111
|
+
_ = 0;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
115
|
+
_.label = op[1];
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
119
|
+
_.label = t[1];
|
|
120
|
+
t = op;
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
if (t && _.label < t[2]) {
|
|
124
|
+
_.label = t[2];
|
|
125
|
+
_.ops.push(op);
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
if (t[2]) _.ops.pop();
|
|
129
|
+
_.trys.pop();
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
op = body.call(thisArg, _);
|
|
133
|
+
} catch (e) {
|
|
134
|
+
op = [
|
|
135
|
+
6,
|
|
136
|
+
e
|
|
137
|
+
];
|
|
138
|
+
y = 0;
|
|
139
|
+
} finally{
|
|
140
|
+
f = t = 0;
|
|
141
|
+
}
|
|
142
|
+
if (op[0] & 5) throw op[1];
|
|
143
|
+
return {
|
|
144
|
+
value: op[0] ? op[1] : void 0,
|
|
145
|
+
done: true
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
var AuthRequiredBranchSchema = _oauthgoogle.schemas.AuthRequiredBranchSchema;
|
|
150
|
+
// Input schema for a single markdown-cell request
|
|
151
|
+
var MarkdownCellRequestSchema = _zod.z.object({
|
|
152
|
+
cell: _zod.z.string().min(1).describe('Single-cell A1 reference (e.g., "I2"). Multi-cell ranges (e.g., "A1:B2") are rejected as a per-request failure.'),
|
|
153
|
+
text: _zod.z.string().describe('Cell content as inline markdown: [label](url) links, bare URLs, **bold**, *italic*, ~~strikethrough~~. Block syntax and other unsupported markdown is written as literal text.')
|
|
154
|
+
});
|
|
155
|
+
var inputSchema = _zod.z.object({
|
|
156
|
+
id: _indexts.SpreadsheetIdSchema,
|
|
157
|
+
gid: _indexts.SheetGidSchema,
|
|
158
|
+
requests: _zod.z.array(MarkdownCellRequestSchema).min(1).max(50).describe('Array of cell markdown requests. Batch multiple cells for efficiency.')
|
|
159
|
+
});
|
|
160
|
+
var successBranchSchema = _zod.z.object({
|
|
161
|
+
type: _zod.z.literal('success'),
|
|
162
|
+
id: _indexts.SpreadsheetIdOutput,
|
|
163
|
+
gid: _indexts.SheetGidOutput,
|
|
164
|
+
sheetTitle: _zod.z.string().describe('Title of the updated sheet'),
|
|
165
|
+
sheetUrl: _zod.z.string().describe('URL of the updated sheet'),
|
|
166
|
+
successCount: _zod.z.number().int().nonnegative().describe('Number of cells successfully written'),
|
|
167
|
+
cells: _zod.z.array(_zod.z.object({
|
|
168
|
+
cell: _zod.z.string().describe('A1 reference of the cell that was written'),
|
|
169
|
+
text: _zod.z.string().describe('Resolved plain text written to the cell (markdown syntax stripped/literalized)'),
|
|
170
|
+
linkCount: _zod.z.number().int().nonnegative().describe('Number of clickable links written into the cell')
|
|
171
|
+
})).describe('Cells successfully written'),
|
|
172
|
+
failedCells: _zod.z.array(_zod.z.object({
|
|
173
|
+
cell: _zod.z.string().describe('A1 reference that failed'),
|
|
174
|
+
error: _zod.z.string().describe('Why the cell failed (e.g., not a single-cell reference)')
|
|
175
|
+
})).optional().describe('Only populated if some cells failed')
|
|
176
|
+
});
|
|
177
|
+
var outputSchema = _zod.z.discriminatedUnion('type', [
|
|
178
|
+
successBranchSchema,
|
|
179
|
+
AuthRequiredBranchSchema
|
|
180
|
+
]);
|
|
181
|
+
var config = {
|
|
182
|
+
description: 'Replace cell content with text parsed from inline markdown. Supports [label](url) links, bare URLs, **bold**, *italic*, ~~strikethrough~~ — the only way to put MULTIPLE clickable links in one cell. Block syntax (headers, lists, tables) and other unsupported markdown is written as literal text. Writes text cells only — no formula or number coercion. For whole-cell formatting (colors, borders, number formats) use cells-format.',
|
|
183
|
+
inputSchema: inputSchema,
|
|
184
|
+
outputSchema: _zod.z.object({
|
|
185
|
+
result: outputSchema
|
|
186
|
+
})
|
|
187
|
+
};
|
|
188
|
+
function handler(_0, _1) {
|
|
189
|
+
return _async_to_generator(function(param, extra) {
|
|
190
|
+
var id, gid, requests, logger, _sheet_properties_title, _sheet_properties_sheetId, _spreadsheetResponse_data_sheets, sheets, spreadsheetResponse, sheet, sheetTitle, sheetId, sheetUrl, batchRequests, cells, failedCells, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, request, rangeRef, gridRange, parsed, runs, message, result, result1, error, message1;
|
|
191
|
+
return _ts_generator(this, function(_state) {
|
|
192
|
+
switch(_state.label){
|
|
193
|
+
case 0:
|
|
194
|
+
id = param.id, gid = param.gid, requests = param.requests;
|
|
195
|
+
logger = extra.logger;
|
|
196
|
+
logger.info('sheets.values.markdownUpdate called', {
|
|
197
|
+
id: id,
|
|
198
|
+
gid: gid,
|
|
199
|
+
requestCount: requests.length
|
|
200
|
+
});
|
|
201
|
+
_state.label = 1;
|
|
202
|
+
case 1:
|
|
203
|
+
_state.trys.push([
|
|
204
|
+
1,
|
|
205
|
+
4,
|
|
206
|
+
,
|
|
207
|
+
5
|
|
208
|
+
]);
|
|
209
|
+
sheets = _googleapis.google.sheets({
|
|
210
|
+
version: 'v4',
|
|
211
|
+
auth: extra.authContext.auth
|
|
212
|
+
});
|
|
213
|
+
return [
|
|
214
|
+
4,
|
|
215
|
+
sheets.spreadsheets.get({
|
|
216
|
+
spreadsheetId: id,
|
|
217
|
+
fields: 'sheets.properties.sheetId,sheets.properties.title'
|
|
218
|
+
})
|
|
219
|
+
];
|
|
220
|
+
case 2:
|
|
221
|
+
spreadsheetResponse = _state.sent();
|
|
222
|
+
// Find sheet by gid
|
|
223
|
+
sheet = (_spreadsheetResponse_data_sheets = spreadsheetResponse.data.sheets) === null || _spreadsheetResponse_data_sheets === void 0 ? void 0 : _spreadsheetResponse_data_sheets.find(function(s) {
|
|
224
|
+
var _s_properties;
|
|
225
|
+
return String((_s_properties = s.properties) === null || _s_properties === void 0 ? void 0 : _s_properties.sheetId) === gid;
|
|
226
|
+
});
|
|
227
|
+
if (!(sheet === null || sheet === void 0 ? void 0 : sheet.properties)) {
|
|
228
|
+
logger.info('Sheet not found for markdown update', {
|
|
229
|
+
id: id,
|
|
230
|
+
gid: gid,
|
|
231
|
+
requestCount: requests.length
|
|
232
|
+
});
|
|
233
|
+
throw new _types.McpError(_types.ErrorCode.InvalidParams, "Sheet not found: ".concat(gid));
|
|
234
|
+
}
|
|
235
|
+
sheetTitle = (_sheet_properties_title = sheet.properties.title) !== null && _sheet_properties_title !== void 0 ? _sheet_properties_title : gid;
|
|
236
|
+
// googleapis types sheetId as `number | null | undefined`; coerce for rangeReferenceToGridRange below (same pattern as values-batch-update.ts's sheetGid).
|
|
237
|
+
sheetId = (_sheet_properties_sheetId = sheet.properties.sheetId) !== null && _sheet_properties_sheetId !== void 0 ? _sheet_properties_sheetId : 0;
|
|
238
|
+
sheetUrl = "https://docs.google.com/spreadsheets/d/".concat(id, "/edit#gid=").concat(sheetId);
|
|
239
|
+
// Build one updateCells request per cell
|
|
240
|
+
batchRequests = [];
|
|
241
|
+
cells = [];
|
|
242
|
+
failedCells = [];
|
|
243
|
+
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
244
|
+
try {
|
|
245
|
+
for(_iterator = requests[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
246
|
+
request = _step.value;
|
|
247
|
+
try {
|
|
248
|
+
// Parse A1 notation and reject anything that isn't a single cell
|
|
249
|
+
rangeRef = (0, _rangeoperationsts.parseA1Notation)(request.cell);
|
|
250
|
+
if (rangeRef.type !== 'cell') {
|
|
251
|
+
throw new Error('Not a single-cell reference: "'.concat(request.cell, '"'));
|
|
252
|
+
}
|
|
253
|
+
gridRange = (0, _rangeoperationsts.rangeReferenceToGridRange)(rangeRef, sheetId);
|
|
254
|
+
parsed = (0, _markdownrunsts.parseInlineMarkdown)(request.text);
|
|
255
|
+
runs = (0, _markdownrunsts.buildTextFormatRuns)(parsed);
|
|
256
|
+
batchRequests.push({
|
|
257
|
+
updateCells: {
|
|
258
|
+
range: gridRange,
|
|
259
|
+
rows: [
|
|
260
|
+
{
|
|
261
|
+
values: [
|
|
262
|
+
{
|
|
263
|
+
userEnteredValue: {
|
|
264
|
+
stringValue: parsed.text
|
|
265
|
+
},
|
|
266
|
+
textFormatRuns: runs
|
|
267
|
+
}
|
|
268
|
+
]
|
|
269
|
+
}
|
|
270
|
+
],
|
|
271
|
+
fields: 'userEnteredValue,textFormatRuns'
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
cells.push({
|
|
275
|
+
cell: request.cell,
|
|
276
|
+
text: parsed.text,
|
|
277
|
+
linkCount: parsed.linkCount
|
|
278
|
+
});
|
|
279
|
+
} catch (error) {
|
|
280
|
+
message = _instanceof(error, Error) ? error.message : String(error);
|
|
281
|
+
logger.info('Failed to parse cell for markdown update', {
|
|
282
|
+
cell: request.cell,
|
|
283
|
+
error: message
|
|
284
|
+
});
|
|
285
|
+
failedCells.push({
|
|
286
|
+
cell: request.cell,
|
|
287
|
+
error: "Failed to parse cell: ".concat(message)
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
} catch (err) {
|
|
292
|
+
_didIteratorError = true;
|
|
293
|
+
_iteratorError = err;
|
|
294
|
+
} finally{
|
|
295
|
+
try {
|
|
296
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
297
|
+
_iterator.return();
|
|
298
|
+
}
|
|
299
|
+
} finally{
|
|
300
|
+
if (_didIteratorError) {
|
|
301
|
+
throw _iteratorError;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// Early return if all cells failed
|
|
306
|
+
if (batchRequests.length === 0) {
|
|
307
|
+
result = {
|
|
308
|
+
type: 'success',
|
|
309
|
+
id: id,
|
|
310
|
+
gid: String(sheetId),
|
|
311
|
+
sheetTitle: sheetTitle,
|
|
312
|
+
sheetUrl: sheetUrl,
|
|
313
|
+
successCount: 0,
|
|
314
|
+
cells: [],
|
|
315
|
+
failedCells: failedCells.length > 0 ? failedCells : undefined
|
|
316
|
+
};
|
|
317
|
+
return [
|
|
318
|
+
2,
|
|
319
|
+
{
|
|
320
|
+
content: [
|
|
321
|
+
{
|
|
322
|
+
type: 'text',
|
|
323
|
+
text: JSON.stringify(result)
|
|
324
|
+
}
|
|
325
|
+
],
|
|
326
|
+
structuredContent: {
|
|
327
|
+
result: result
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
];
|
|
331
|
+
}
|
|
332
|
+
logger.info('sheets.values.markdownUpdate executing batch request', {
|
|
333
|
+
spreadsheetId: id,
|
|
334
|
+
sheetTitle: sheetTitle,
|
|
335
|
+
batchRequestsCount: batchRequests.length
|
|
336
|
+
});
|
|
337
|
+
// Execute the batch update
|
|
338
|
+
return [
|
|
339
|
+
4,
|
|
340
|
+
sheets.spreadsheets.batchUpdate({
|
|
341
|
+
spreadsheetId: id,
|
|
342
|
+
requestBody: {
|
|
343
|
+
requests: batchRequests
|
|
344
|
+
}
|
|
345
|
+
})
|
|
346
|
+
];
|
|
347
|
+
case 3:
|
|
348
|
+
_state.sent();
|
|
349
|
+
logger.info('sheets.values.markdownUpdate completed successfully', {
|
|
350
|
+
successCount: cells.length,
|
|
351
|
+
failedCount: failedCells.length
|
|
352
|
+
});
|
|
353
|
+
result1 = {
|
|
354
|
+
type: 'success',
|
|
355
|
+
id: id,
|
|
356
|
+
gid: String(sheetId),
|
|
357
|
+
sheetTitle: sheetTitle,
|
|
358
|
+
sheetUrl: sheetUrl,
|
|
359
|
+
successCount: cells.length,
|
|
360
|
+
cells: cells,
|
|
361
|
+
failedCells: failedCells.length > 0 ? failedCells : undefined
|
|
362
|
+
};
|
|
363
|
+
return [
|
|
364
|
+
2,
|
|
365
|
+
{
|
|
366
|
+
content: [
|
|
367
|
+
{
|
|
368
|
+
type: 'text',
|
|
369
|
+
text: JSON.stringify(result1)
|
|
370
|
+
}
|
|
371
|
+
],
|
|
372
|
+
structuredContent: {
|
|
373
|
+
result: result1
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
];
|
|
377
|
+
case 4:
|
|
378
|
+
error = _state.sent();
|
|
379
|
+
// Re-throw McpError as-is
|
|
380
|
+
if (_instanceof(error, _types.McpError)) {
|
|
381
|
+
throw error;
|
|
382
|
+
}
|
|
383
|
+
message1 = _instanceof(error, Error) ? error.message : String(error);
|
|
384
|
+
logger.error('Markdown update operation failed', {
|
|
385
|
+
id: id,
|
|
386
|
+
gid: gid,
|
|
387
|
+
requestCount: requests.length,
|
|
388
|
+
error: message1
|
|
389
|
+
});
|
|
390
|
+
throw new _types.McpError(_types.ErrorCode.InternalError, "Error writing markdown to cells: ".concat(message1), {
|
|
391
|
+
stack: _instanceof(error, Error) ? error.stack : undefined
|
|
392
|
+
});
|
|
393
|
+
case 5:
|
|
394
|
+
return [
|
|
395
|
+
2
|
|
396
|
+
];
|
|
397
|
+
}
|
|
398
|
+
});
|
|
399
|
+
}).apply(this, arguments);
|
|
400
|
+
}
|
|
401
|
+
function createTool() {
|
|
402
|
+
return {
|
|
403
|
+
name: 'values-markdown-update',
|
|
404
|
+
config: config,
|
|
405
|
+
handler: handler
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/mcp-z/mcp-sheets/src/mcp/tools/values-markdown-update.ts"],"sourcesContent":["import type { EnrichedExtra } from '@mcp-z/oauth-google';\nimport { schemas } from '@mcp-z/oauth-google';\n\nconst { AuthRequiredBranchSchema } = schemas;\n\nimport type { ToolModule } from '@mcp-z/server';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';\nimport { google, type sheets_v4 } from 'googleapis';\nimport { z } from 'zod';\nimport { SheetGidOutput, SheetGidSchema, SpreadsheetIdOutput, SpreadsheetIdSchema } from '../../schemas/index.ts';\nimport { buildTextFormatRuns, parseInlineMarkdown } from '../../spreadsheet/markdown-runs.ts';\nimport { parseA1Notation, rangeReferenceToGridRange } from '../../spreadsheet/range-operations.ts';\n\n// Input schema for a single markdown-cell request\nconst MarkdownCellRequestSchema = z.object({\n cell: z.string().min(1).describe('Single-cell A1 reference (e.g., \"I2\"). Multi-cell ranges (e.g., \"A1:B2\") are rejected as a per-request failure.'),\n text: z.string().describe('Cell content as inline markdown: [label](url) links, bare URLs, **bold**, *italic*, ~~strikethrough~~. Block syntax and other unsupported markdown is written as literal text.'),\n});\n\nconst inputSchema = z.object({\n id: SpreadsheetIdSchema,\n gid: SheetGidSchema,\n requests: z.array(MarkdownCellRequestSchema).min(1).max(50).describe('Array of cell markdown requests. Batch multiple cells for efficiency.'),\n});\n\nconst successBranchSchema = z.object({\n type: z.literal('success'),\n id: SpreadsheetIdOutput,\n gid: SheetGidOutput,\n sheetTitle: z.string().describe('Title of the updated sheet'),\n sheetUrl: z.string().describe('URL of the updated sheet'),\n successCount: z.number().int().nonnegative().describe('Number of cells successfully written'),\n cells: z\n .array(\n z.object({\n cell: z.string().describe('A1 reference of the cell that was written'),\n text: z.string().describe('Resolved plain text written to the cell (markdown syntax stripped/literalized)'),\n linkCount: z.number().int().nonnegative().describe('Number of clickable links written into the cell'),\n })\n )\n .describe('Cells successfully written'),\n failedCells: z\n .array(\n z.object({\n cell: z.string().describe('A1 reference that failed'),\n error: z.string().describe('Why the cell failed (e.g., not a single-cell reference)'),\n })\n )\n .optional()\n .describe('Only populated if some cells failed'),\n});\n\nconst outputSchema = z.discriminatedUnion('type', [successBranchSchema, AuthRequiredBranchSchema]);\n\nconst config = {\n description:\n 'Replace cell content with text parsed from inline markdown. Supports [label](url) links, bare URLs, **bold**, *italic*, ~~strikethrough~~ — the only way to put MULTIPLE clickable links in one cell. Block syntax (headers, lists, tables) and other unsupported markdown is written as literal text. Writes text cells only — no formula or number coercion. For whole-cell formatting (colors, borders, number formats) use cells-format.',\n inputSchema,\n outputSchema: z.object({\n result: outputSchema,\n }),\n} as const;\n\nexport type Input = z.infer<typeof inputSchema>;\nexport type Output = z.infer<typeof outputSchema>;\n\nasync function handler({ id, gid, requests }: Input, extra: EnrichedExtra): Promise<CallToolResult> {\n const logger = extra.logger;\n logger.info('sheets.values.markdownUpdate called', {\n id,\n gid,\n requestCount: requests.length,\n });\n\n try {\n const sheets = google.sheets({ version: 'v4', auth: extra.authContext.auth });\n\n // Get spreadsheet and sheet info in single API call\n const spreadsheetResponse = await sheets.spreadsheets.get({\n spreadsheetId: id,\n fields: 'sheets.properties.sheetId,sheets.properties.title',\n });\n\n // Find sheet by gid\n const sheet = spreadsheetResponse.data.sheets?.find((s) => String(s.properties?.sheetId) === gid);\n if (!sheet?.properties) {\n logger.info('Sheet not found for markdown update', { id, gid, requestCount: requests.length });\n throw new McpError(ErrorCode.InvalidParams, `Sheet not found: ${gid}`);\n }\n\n const sheetTitle = sheet.properties.title ?? gid;\n // googleapis types sheetId as `number | null | undefined`; coerce for rangeReferenceToGridRange below (same pattern as values-batch-update.ts's sheetGid).\n const sheetId = sheet.properties.sheetId ?? 0;\n const sheetUrl = `https://docs.google.com/spreadsheets/d/${id}/edit#gid=${sheetId}`;\n\n // Build one updateCells request per cell\n const batchRequests: sheets_v4.Schema$Request[] = [];\n const cells: Array<{ cell: string; text: string; linkCount: number }> = [];\n const failedCells: Array<{ cell: string; error: string }> = [];\n\n for (const request of requests) {\n try {\n // Parse A1 notation and reject anything that isn't a single cell\n const rangeRef = parseA1Notation(request.cell);\n if (rangeRef.type !== 'cell') {\n throw new Error(`Not a single-cell reference: \"${request.cell}\"`);\n }\n\n const gridRange = rangeReferenceToGridRange(rangeRef, sheetId);\n const parsed = parseInlineMarkdown(request.text);\n const runs = buildTextFormatRuns(parsed);\n\n batchRequests.push({\n updateCells: {\n range: gridRange,\n rows: [\n {\n values: [\n {\n userEnteredValue: { stringValue: parsed.text },\n textFormatRuns: runs,\n },\n ],\n },\n ],\n fields: 'userEnteredValue,textFormatRuns',\n },\n });\n cells.push({ cell: request.cell, text: parsed.text, linkCount: parsed.linkCount });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.info('Failed to parse cell for markdown update', {\n cell: request.cell,\n error: message,\n });\n failedCells.push({\n cell: request.cell,\n error: `Failed to parse cell: ${message}`,\n });\n }\n }\n\n // Early return if all cells failed\n if (batchRequests.length === 0) {\n const result: Output = {\n type: 'success' as const,\n id,\n gid: String(sheetId),\n sheetTitle,\n sheetUrl,\n successCount: 0,\n cells: [],\n failedCells: failedCells.length > 0 ? failedCells : undefined,\n };\n\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result) }],\n structuredContent: { result },\n };\n }\n\n logger.info('sheets.values.markdownUpdate executing batch request', {\n spreadsheetId: id,\n sheetTitle,\n batchRequestsCount: batchRequests.length,\n });\n\n // Execute the batch update\n await sheets.spreadsheets.batchUpdate({\n spreadsheetId: id,\n requestBody: {\n requests: batchRequests,\n },\n });\n\n logger.info('sheets.values.markdownUpdate completed successfully', {\n successCount: cells.length,\n failedCount: failedCells.length,\n });\n\n const result: Output = {\n type: 'success' as const,\n id,\n gid: String(sheetId),\n sheetTitle,\n sheetUrl,\n successCount: cells.length,\n cells,\n failedCells: failedCells.length > 0 ? failedCells : undefined,\n };\n\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result) }],\n structuredContent: { result },\n };\n } catch (error) {\n // Re-throw McpError as-is\n if (error instanceof McpError) {\n throw error;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n logger.error('Markdown update operation failed', {\n id,\n gid,\n requestCount: requests.length,\n error: message,\n });\n\n throw new McpError(ErrorCode.InternalError, `Error writing markdown to cells: ${message}`, {\n stack: error instanceof Error ? error.stack : undefined,\n });\n }\n}\n\nexport default function createTool() {\n return {\n name: 'values-markdown-update',\n config,\n handler,\n } satisfies ToolModule;\n}\n"],"names":["createTool","AuthRequiredBranchSchema","schemas","MarkdownCellRequestSchema","z","object","cell","string","min","describe","text","inputSchema","id","SpreadsheetIdSchema","gid","SheetGidSchema","requests","array","max","successBranchSchema","type","literal","SpreadsheetIdOutput","SheetGidOutput","sheetTitle","sheetUrl","successCount","number","int","nonnegative","cells","linkCount","failedCells","error","optional","outputSchema","discriminatedUnion","config","description","result","handler","extra","logger","sheet","spreadsheetResponse","sheets","sheetId","batchRequests","request","rangeRef","gridRange","parsed","runs","message","info","requestCount","length","google","version","auth","authContext","spreadsheets","get","spreadsheetId","fields","data","find","s","String","properties","McpError","ErrorCode","InvalidParams","title","parseA1Notation","Error","rangeReferenceToGridRange","parseInlineMarkdown","buildTextFormatRuns","push","updateCells","range","rows","values","userEnteredValue","stringValue","textFormatRuns","undefined","content","JSON","stringify","structuredContent","batchRequestsCount","batchUpdate","requestBody","failedCount","InternalError","stack","name"],"mappings":"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"}
|
|
@@ -22,11 +22,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
|
22
22
|
reject(error);
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
|
-
if (info.done)
|
|
26
|
-
|
|
27
|
-
} else {
|
|
28
|
-
Promise.resolve(value).then(_next, _throw);
|
|
29
|
-
}
|
|
25
|
+
if (info.done) resolve(value);
|
|
26
|
+
else Promise.resolve(value).then(_next, _throw);
|
|
30
27
|
}
|
|
31
28
|
function _async_to_generator(fn) {
|
|
32
29
|
return function() {
|
|
@@ -51,17 +48,14 @@ function _define_property(obj, key, value) {
|
|
|
51
48
|
configurable: true,
|
|
52
49
|
writable: true
|
|
53
50
|
});
|
|
54
|
-
} else
|
|
55
|
-
obj[key] = value;
|
|
56
|
-
}
|
|
51
|
+
} else obj[key] = value;
|
|
57
52
|
return obj;
|
|
58
53
|
}
|
|
59
54
|
function _instanceof(left, right) {
|
|
55
|
+
"@swc/helpers - instanceof";
|
|
60
56
|
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
61
57
|
return !!right[Symbol.hasInstance](left);
|
|
62
|
-
} else
|
|
63
|
-
return left instanceof right;
|
|
64
|
-
}
|
|
58
|
+
} else return left instanceof right;
|
|
65
59
|
}
|
|
66
60
|
function _object_spread(target) {
|
|
67
61
|
for(var i = 1; i < arguments.length; i++){
|