diff --git a/shortcuts/sheets/data/flag-defs.json b/shortcuts/sheets/data/flag-defs.json index 68db9d854..e869b7061 100644 --- a/shortcuts/sheets/data/flag-defs.json +++ b/shortcuts/sheets/data/flag-defs.json @@ -196,14 +196,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "yes", @@ -243,14 +243,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "title", @@ -290,14 +290,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "index", @@ -345,14 +345,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "title", @@ -400,14 +400,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "dry-run", @@ -440,14 +440,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "dry-run", @@ -480,14 +480,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "color", @@ -527,14 +527,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "dry-run", @@ -567,14 +567,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "dry-run", @@ -744,14 +744,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "include", @@ -807,14 +807,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "inherit-style", @@ -872,14 +872,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -937,14 +937,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -984,14 +984,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -1031,14 +1031,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "dimension", @@ -1089,14 +1089,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "depth", @@ -1156,14 +1156,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "depth", @@ -1211,14 +1211,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "source-range", @@ -1265,14 +1265,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -1349,14 +1349,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -1396,14 +1396,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -1542,14 +1542,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "find", @@ -1641,14 +1641,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "find", @@ -1730,14 +1730,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`); not accepted with `--writes` (each writes item carries its own sheet selector)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two); not accepted with `--writes` (each writes item carries its own sheet selector)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`); not accepted with `--writes` (each writes item carries its own sheet selector)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two); not accepted with `--writes` (each writes item carries its own sheet selector)" }, { "name": "range", @@ -1823,14 +1823,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -1949,7 +1949,7 @@ "kind": "own", "type": "string", "required": "optional", - "desc": "Border config JSON: `{ top: {style,color,weight}, bottom: ..., left: ..., right: ... }`; same shape for all 4 sides", + "desc": "Border config JSON: `{ top: {style,weight,color}, bottom: ..., left: ..., right: ... }`; same shape for all 4 sides. style = line type (solid|dashed|dotted|double|none); weight = thickness (thin|medium|thick — a string, not a pixel number); color = hex like #000000. { all: {...} } sets all four sides at once. This is the only border flag: no --border-all / --border-top / --border-color exist", "input": [ "file", "stdin" @@ -1986,14 +1986,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -2047,14 +2047,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -2137,14 +2137,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "start-cell", @@ -2260,14 +2260,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -2327,14 +2327,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -2387,14 +2387,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -2434,14 +2434,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "height", @@ -2512,14 +2512,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "width", @@ -2589,14 +2589,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "source-range", @@ -2650,14 +2650,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "source-range", @@ -2725,14 +2725,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "source-range", @@ -2794,14 +2794,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -3063,7 +3063,7 @@ "kind": "own", "type": "string", "required": "optional", - "desc": "Border config JSON (same shape as in +cells-set-style)", + "desc": "Border config JSON (same shape as in +cells-set-style): `{ top|bottom|left|right|all: {style,weight,color} }`; style = solid|dashed|dotted|double|none, weight = thin|medium|thick (string), color = hex like #000000", "input": [ "file", "stdin" @@ -3281,14 +3281,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "chart-id", @@ -3328,14 +3328,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "properties", @@ -3379,14 +3379,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "chart-id", @@ -3437,14 +3437,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "chart-id", @@ -3491,14 +3491,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "pivot-table-id", @@ -3611,14 +3611,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "pivot-table-id", @@ -3669,14 +3669,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "pivot-table-id", @@ -3723,14 +3723,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "rule-id", @@ -3770,14 +3770,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "properties", @@ -3854,14 +3854,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "rule-id", @@ -3945,14 +3945,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "rule-id", @@ -3999,14 +3999,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "dry-run", @@ -4039,14 +4039,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "range", @@ -4097,14 +4097,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "properties", @@ -4155,14 +4155,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "yes", @@ -4202,14 +4202,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "view-id", @@ -4249,14 +4249,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "properties", @@ -4314,14 +4314,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "view-id", @@ -4386,14 +4386,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "view-id", @@ -4440,14 +4440,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "group-id", @@ -4487,14 +4487,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "properties", @@ -4538,14 +4538,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "group-id", @@ -4596,14 +4596,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "group-id", @@ -4650,14 +4650,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "float-image-id", @@ -4697,14 +4697,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "image-name", @@ -4814,14 +4814,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "float-image-id", @@ -4931,14 +4931,14 @@ "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet reference_id (XOR with `--sheet-name`)" + "desc": "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)" }, { "name": "sheet-name", "kind": "public", "type": "string", "required": "xor", - "desc": "Sheet name (XOR with `--sheet-id`)" + "desc": "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)" }, { "name": "float-image-id", diff --git a/shortcuts/sheets/flag_defs_gen.go b/shortcuts/sheets/flag_defs_gen.go index 58524dc1a..b0489f594 100644 --- a/shortcuts/sheets/flag_defs_gen.go +++ b/shortcuts/sheets/flag_defs_gen.go @@ -50,7 +50,7 @@ var flagDefs = map[string]commandDef{ {Name: "vertical-alignment", Kind: "own", Type: "string", Required: "optional", Desc: "Vertical alignment", Enum: []string{"top", "middle", "bottom"}}, {Name: "word-wrap", Kind: "own", Type: "string", Required: "optional", Desc: "Word-wrap strategy", Enum: []string{"overflow", "auto-wrap", "word-clip"}}, {Name: "number-format", Kind: "own", Type: "string", Required: "optional", Desc: "Number format pattern (e.g. text `@`, number `0.00`, currency `$#,##0.00`, date `mm/dd/yyyy`)"}, - {Name: "border-styles", Kind: "own", Type: "string", Required: "optional", Desc: "Border config JSON (same shape as in +cells-set-style)", Input: []string{"file", "stdin"}}, + {Name: "border-styles", Kind: "own", Type: "string", Required: "optional", Desc: "Border config JSON (same shape as in +cells-set-style): `{ top|bottom|left|right|all: {style,weight,color} }`; style = solid|dashed|dotted|double|none, weight = thin|medium|thick (string), color = hex like #000000", Input: []string{"file", "stdin"}}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, }, @@ -59,8 +59,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Range to clear (A1 notation)"}, {Name: "scope", Kind: "own", Type: "string", Required: "optional", Desc: "Clear scope: `content` (default, values only) / `formats` (formats only) / `all` (values and formats)", Default: "content", Enum: []string{"content", "formats", "all"}}, {Name: "yes", Kind: "system", Type: "bool", Required: "required", Desc: "Confirm destructive write (exit code 10 without this flag); clear is irreversible"}, @@ -72,8 +72,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "A1 range, e.g. `A1:F10` (no sheet prefix — use `--sheet-id` / `--sheet-name` to select the sheet)"}, {Name: "include", Kind: "own", Type: "string_slice", Required: "optional", Desc: "Comma-separated info categories to include. `truncation` additionally estimates whether each cell's content is clipped (by row height / col width / font size / wrap) and returns `isRowTruncated` / `isColTruncated` (extra compute; enable only for layout checks or before adjusting row heights / column widths)", Enum: []string{"value", "formula", "style", "comment", "data_validation", "truncation"}}, {Name: "max-chars", Kind: "own", Type: "int", Required: "optional", Desc: "Max output chars per call; default 500000 (safety cap). For a full untruncated read, use --output-path to dump to a file (auto-unlimited); only lower it (e.g. 25000) when you want results inline without a file, paging via has_more.", Default: "500000"}, @@ -87,8 +87,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Range to merge / unmerge (A1 notation)"}, {Name: "merge-type", Kind: "own", Type: "string", Required: "optional", Desc: "Merge direction (`+cells-merge` only)", Default: "all", Enum: []string{"all", "rows", "columns"}}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -99,8 +99,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "find", Kind: "own", Type: "string", Required: "required", Desc: "Text to find for replacement"}, {Name: "replacement", Kind: "own", Type: "string", Required: "required", Desc: "Replacement text; pass empty string `\"\"` to delete matched content"}, {Name: "range", Kind: "own", Type: "string", Required: "optional", Desc: "Replace range (A1 notation); whole sheet when omitted"}, @@ -116,8 +116,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "find", Kind: "own", Type: "string", Required: "required", Desc: "Text to find (interpreted as regex when `--regex` is set)"}, {Name: "range", Kind: "own", Type: "string", Required: "optional", Desc: "Search range (A1 notation); whole sheet when omitted"}, {Name: "match-case", Kind: "own", Type: "bool", Required: "optional", Desc: "Case-sensitive match"}, @@ -134,8 +134,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`); not accepted with `--writes` (each writes item carries its own sheet selector)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`); not accepted with `--writes` (each writes item carries its own sheet selector)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two); not accepted with `--writes` (each writes item carries its own sheet selector)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two); not accepted with `--writes` (each writes item carries its own sheet selector)"}, {Name: "range", Kind: "own", Type: "string", Required: "xor", Desc: "Write range (A1 notation). XOR with `--writes` (single region: --range+--cells; multiple regions: --writes)"}, {Name: "cells", Kind: "own", Type: "string", Required: "xor", Desc: "JSON 2D array `[[{cell},...],...]`, dimensions must match `--range`; each cell may carry `value` / `formula` / `cell_styles` / `note` / `rich_text` (incl. `type=\"embed-image\"` in-cell image); run `--print-schema` for full fields", Input: []string{"file", "stdin"}}, {Name: "writes", Kind: "own", Type: "string", Required: "xor", Desc: "Multi-region write as a JSON array (up to 100 items), each `{sheet_name|sheet_id, range, cells}` — the sheet selector LIVES IN EACH ITEM (same convention as +batch-update sub-ops and +styles-put items; the top-level --sheet-name is rejected). cells has the same shape as `--cells` (2D array; per-cell cell_styles/border_styles allowed). The whole array goes out as ONE atomic batched request, cross-sheet supported; typical use: fixing formulas scattered across ranges/sheets — do not assemble a +batch-update operations array for this. XOR with `--range`+`--cells`; range-level uniform styling stays with +styles-put afterwards", Input: []string{"file", "stdin"}}, @@ -150,8 +150,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Target cell (A1 notation; must be a single cell, e.g. `A1`; start and end must be identical)"}, {Name: "image", Kind: "own", Type: "string", Required: "required", Desc: "Local image path (PNG / JPEG / JPG / GIF / BMP / JFIF / EXIF / TIFF / BPG / HEIC)"}, {Name: "name", Kind: "own", Type: "string", Required: "optional", Desc: "Image file name (with extension); defaults to the basename of `--image`"}, @@ -163,8 +163,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Target range (A1 notation, e.g. `A1:B2`)"}, {Name: "background-color", Kind: "own", Type: "string", Required: "optional", Desc: "Background color (hex, e.g. `#ffffff`)"}, {Name: "font-color", Kind: "own", Type: "string", Required: "optional", Desc: "Font color (hex, e.g. `#000000`)"}, @@ -177,7 +177,7 @@ var flagDefs = map[string]commandDef{ {Name: "vertical-alignment", Kind: "own", Type: "string", Required: "optional", Desc: "Vertical alignment", Enum: []string{"top", "middle", "bottom"}}, {Name: "word-wrap", Kind: "own", Type: "string", Required: "optional", Desc: "Word-wrap strategy", Enum: []string{"overflow", "auto-wrap", "word-clip"}}, {Name: "number-format", Kind: "own", Type: "string", Required: "optional", Desc: "Number format pattern (e.g. text `@`, number `0.00`, currency `$#,##0.00`, date `mm/dd/yyyy`)"}, - {Name: "border-styles", Kind: "own", Type: "string", Required: "optional", Desc: "Border config JSON: `{ top: {style,color,weight}, bottom: ..., left: ..., right: ... }`; same shape for all 4 sides", Input: []string{"file", "stdin"}}, + {Name: "border-styles", Kind: "own", Type: "string", Required: "optional", Desc: "Border config JSON: `{ top: {style,weight,color}, bottom: ..., left: ..., right: ... }`; same shape for all 4 sides. style = line type (solid|dashed|dotted|double|none); weight = thickness (thin|medium|thick — a string, not a pixel number); color = hex like #000000. { all: {...} } sets all four sides at once. This is the only border flag: no --border-all / --border-top / --border-color exist", Input: []string{"file", "stdin"}}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, }, @@ -186,8 +186,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Range to merge / unmerge (A1 notation)"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -206,8 +206,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "properties", Kind: "own", Type: "string", Required: "required", Desc: "Full chart config JSON. Top-level keys: `position` / `offset` / `size` / `snapshot` (no top-level `data`, no extra nested `properties`); chart data config lives under `snapshot.data` (`refs` / `headerMode` / `dim1` / `dim2`); must include at least one of `snapshot.data.dim1.serie.index` or `dim2.series[].index`, otherwise the server rejects it. Deeply nested — run `--print-schema --flag-name properties` for the full structure.", Input: []string{"file", "stdin"}}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional", Desc: "Print the request template; no side effects"}, }, @@ -217,8 +217,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "chart-id", Kind: "own", Type: "string", Required: "required", Desc: "Target chart reference_id"}, {Name: "yes", Kind: "system", Type: "bool", Required: "required", Desc: "Confirm destructive write (exit code 10 without this flag)"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -229,8 +229,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "chart-id", Kind: "own", Type: "string", Required: "optional", Desc: "Filter to a single chart reference_id"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -240,8 +240,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "chart-id", Kind: "own", Type: "string", Required: "required", Desc: "Target chart reference_id"}, {Name: "properties", Kind: "own", Type: "string", Required: "required", Desc: "Full or sufficiently complete chart config JSON (read back with `+chart-list` first, then patch)", Input: []string{"file", "stdin"}}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -252,8 +252,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "width", Kind: "own", Type: "int", Required: "xor", Desc: "Uniform column width in pixels (e.g. 80 / 120 / 200; NOT Excel character units), used with `--range`. Passing --width implies pixel mode; --type may be omitted (or set to `pixel` — equivalent). For per-column widths use `--widths`", Default: "0"}, {Name: "widths", Kind: "own", Type: "string", Required: "xor", Desc: "Per-column width map — set different widths for many columns in one atomic call. Keys: single column (`\"A\"`) or closed range (`\"C:E\"`); values: pixel width (e.g. 80 / 120 / 200) or `\"standard\"` (reset to default). Units are pixels, NOT Excel character units (px ≈ chars × 8 + 16). Mutually exclusive with `--range` / `--width` / `--type`", Input: []string{"file", "stdin"}}, {Name: "type", Kind: "own", Type: "string", Required: "xor", Desc: "Sizing mode: `pixel` (requires `--width`) / `standard` (reset to default column width). Passing --width alone is the common form; `--type standard` cannot be combined with `--width`", Enum: []string{"pixel", "standard"}}, @@ -266,8 +266,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "properties", Kind: "own", Type: "string", Required: "required", Desc: "Rule config JSON: `style` (required, applied on match), `attrs?` (rule-type-dependent params), `has_ref?`. `rule_type` and `ranges` are separate flags", Input: []string{"file", "stdin"}}, {Name: "rule-type", Kind: "own", Type: "string", Required: "required", Desc: "Conditional format rule type; takes precedence over the same-named field inside `--properties`", Enum: []string{"duplicateValues", "uniqueValues", "cellIs", "containsText", "timePeriod", "containsBlanks", "notContainsBlanks", "dataBar", "colorScale", "rank", "aboveAverage", "expression", "iconSet"}}, {Name: "ranges", Kind: "own", Type: "string", Required: "required", Desc: "A1 ranges where the conditional format applies, as a JSON array (e.g. `[\"A1:A100\",\"C2:C50\"]`); takes precedence over the same-named field inside `--properties`", Input: []string{"file", "stdin"}}, @@ -279,8 +279,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "rule-id", Kind: "own", Type: "string", Required: "required", Desc: "Target rule id"}, {Name: "yes", Kind: "system", Type: "bool", Required: "required", Desc: "Confirm destructive write (exit code 10 without this flag); delete is irreversible"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -291,8 +291,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "rule-id", Kind: "own", Type: "string", Required: "optional", Desc: "Filter by rule id"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -302,8 +302,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "rule-id", Kind: "own", Type: "string", Required: "required", Desc: "Target rule id"}, {Name: "properties", Kind: "own", Type: "string", Required: "required", Desc: "Rule config JSON, same shape as `+cond-format-create --properties`; update overwrites the entire rule", Input: []string{"file", "stdin"}}, {Name: "rule-type", Kind: "own", Type: "string", Required: "required", Desc: "Conditional format rule type; takes precedence over the same-named field inside `--properties`", Enum: []string{"duplicateValues", "uniqueValues", "cellIs", "containsText", "timePeriod", "containsBlanks", "notContainsBlanks", "dataBar", "colorScale", "rank", "aboveAverage", "expression", "iconSet"}}, @@ -316,8 +316,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "optional", Desc: "A1 range, e.g. `A1:F30` (no sheet prefix — use `--sheet-id` / `--sheet-name` to select the sheet). Optional: when omitted the whole sheet is read (clipped to the actual grid bounds; actual_range in the response names what was read); pair with --max-chars / --output-path on large sheets"}, {Name: "max-chars", Kind: "own", Type: "int", Required: "optional", Desc: "Max output chars per call; default 500000 (safety cap). For a full untruncated read, use --output-path to dump to a file (auto-unlimited); only lower it (e.g. 25000) when you want results inline without a file, paging via has_more.", Default: "500000"}, {Name: "output-path", Kind: "own", Type: "string", Required: "optional", Desc: "Write the full read result to a local path (e.g. `./out.json`); the file holds the data payload as JSON while stdout returns only a small confirmation (output_path, byte count). **When set, the char cap defaults to unlimited** (overriding the --max-chars default), so a large sheet can be dumped in full for later analysis without stdout being truncated by max_chars. Omit it to print to stdout as usual."}, @@ -331,8 +331,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "start-cell", Kind: "own", Type: "string", Required: "required", Desc: "Top-left A1 anchor (e.g. `A1`, `B5`; no sheet prefix — use `--sheet-id` / `--sheet-name` to select the sheet); must be a single cell, range notation not accepted; the bottom-right is inferred from CSV row/column counts", Default: "A1"}, {Name: "csv", Kind: "own", Type: "string", Required: "required", Desc: "RFC 4180 CSV text; values or formulas (a leading = is evaluated as a formula); no styles / comments / images (use +cells-set for those).", Input: []string{"file", "stdin"}}, {Name: "allow-overwrite", Kind: "own", Type: "bool", Required: "optional", Desc: "Allow overwriting (default true); set false to error if any target cell is non-empty", Default: "true"}, @@ -345,8 +345,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "xor", Desc: "Row/column closed range to delete; rows use 1-based numbers like `3:7` or `5` (single row), columns use letters like `C:F` or `C`. XOR with `--ranges`"}, {Name: "ranges", Kind: "own", Type: "string", Required: "xor", Desc: "Multiple row/column ranges to delete as a JSON array (up to 100 items, e.g. `[\"5:5\",\"8:8\",\"11:13\"]` or `[\"C:C\",\"F:G\"]`); rows and columns cannot be mixed, ranges must not overlap; XOR with `--range`. CLI sorts positions in DESCENDING order into one atomic batch delete — ascending deletion would shift later indexes as earlier rows/columns disappear; the CLI handles the ordering", Input: []string{"file", "stdin"}}, {Name: "yes", Kind: "system", Type: "bool", Required: "required", Desc: "Confirm destructive write (exit code 10 without this flag); row/column deletion is irreversible"}, @@ -358,8 +358,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "dimension", Kind: "own", Type: "string", Required: "required", Desc: "Dimension (row or column)", Enum: []string{"row", "column"}}, {Name: "count", Kind: "own", Type: "int", Required: "required", Desc: "Freeze the first N rows/columns; pass 0 to unfreeze"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -370,8 +370,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "depth", Kind: "own", Type: "int", Required: "optional", Desc: "Nesting level for grouping; default 1", Default: "1"}, {Name: "group-state", Kind: "own", Type: "string", Required: "optional", Desc: "Initial group expand state", Default: "expand", Enum: []string{"expand", "fold"}}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Row/column closed range to group; rows use 1-based numbers like `3:7`, columns use letters like `C:F`"}, @@ -383,8 +383,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Row/column closed range to hide; rows use 1-based numbers like `3:7`, columns use letters like `C:F`"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -394,8 +394,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "inherit-style", Kind: "own", Type: "string", Required: "optional", Desc: "Style inheritance for the new row/column: `before` (from the preceding row/column) / `after` (from the following row/column). Omit the flag to inherit the following row/column (same as `after`) — the backend cannot leave a new row/column unstyled; for a truly blank row/column, clear formats afterwards with +cells-clear --scope formats. Insertion always lands before `--position`; this only selects which side's style is copied.", Enum: []string{"before", "after"}}, {Name: "position", Kind: "own", Type: "string", Required: "required", Desc: "Insert position (1-based row number like `3` or column letter like `C`); new rows/columns are inserted *before* this position"}, {Name: "count", Kind: "own", Type: "int", Required: "required", Desc: "Number of rows/columns to insert (must be > 0)"}, @@ -407,8 +407,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "source-range", Kind: "own", Type: "string", Required: "required", Desc: "Source row/column closed range to move; rows use 1-based numbers like `3:7`, columns use letters like `C:F`"}, {Name: "target", Kind: "own", Type: "string", Required: "required", Desc: "Destination position (the moved rows/columns are placed *before* this position); rows use 1-based row number like `12`, columns use column letter like `H`. Must match the dimension of --source-range"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -419,8 +419,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "depth", Kind: "own", Type: "int", Required: "optional", Desc: "Group nesting level to ungroup; default 1 (1 = outermost, larger = deeper)", Default: "1"}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Row/column closed range to ungroup; rows use 1-based numbers like `3:7`, columns use letters like `C:F`"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -431,8 +431,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Row/column closed range to unhide; rows use 1-based numbers like `3:7`, columns use letters like `C:F`"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -452,8 +452,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Target range in A1 notation, e.g. `A2:A100` (no sheet prefix — use `--sheet-id` / `--sheet-name` to select the sheet)"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -463,8 +463,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Target range (A1 notation, e.g. `A2:A100`)"}, {Name: "options", Kind: "own", Type: "string", Required: "xor", Desc: "Options as a JSON array, e.g. `[\"opt1\",\"opt2\"]`. Server enforces no item-count cap and no per-item length cap; values containing commas are accepted (they are escape-encoded on the wire). For very large lists prefer `--source-range`.", Input: []string{"file", "stdin"}}, {Name: "colors", Kind: "own", Type: "string", Required: "optional", Desc: "Per-option pill colors, RGB hex array (e.g. `[\"#1FB6C1\",\"#F006C2\"]`). Length may be shorter than the source (`--options` items / `--source-range` cells) — extras cycle through a 10-color palette — but never longer (CLI Validate rejects: `--colors length (N) must not exceed dropdown source size (M)`). **Applies on its own**; ignored when `--highlight=false`.", Input: []string{"file", "stdin"}}, @@ -493,8 +493,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Filter range (A1 notation, including header row, e.g. `A1:F1000`); do not duplicate the range field inside `--properties`"}, {Name: "properties", Kind: "own", Type: "string", Required: "optional", Desc: "Filter rule JSON: `rules` (per-column rule array), `filtered_columns?` (active column index hint). The flag is optional overall — if provided, `rules` must be non-empty; if omitted, an empty filter is created on `--range` (no column conditions). `range` is a separate flag (do not duplicate inside this JSON)", Input: []string{"file", "stdin"}}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -505,8 +505,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "yes", Kind: "system", Type: "bool", Required: "required", Desc: "Confirm destructive write (exit code 10 without this flag); delete is irreversible"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -516,8 +516,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, }, @@ -526,8 +526,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "properties", Kind: "own", Type: "string", Required: "required", Desc: "Filter rule JSON: `rules` and `filtered_columns?`; update overwrites the entire rule set (pass `rules: []` to clear). `range` is a separate flag", Input: []string{"file", "stdin"}}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Range the filter applies to (A1 notation, e.g. `A1:F1000`); takes precedence over the same-named field inside `--properties`"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -538,8 +538,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "properties", Kind: "own", Type: "string", Required: "required", Desc: "Filter-view rule JSON: `rules?` (per-column rule array), `filtered_columns?`. `range` and `view_name` are separate flags", Input: []string{"file", "stdin"}}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Range the filter view applies to (A1 notation, e.g. `A1:F1000`); takes precedence over the same-named field inside `--properties`; required on create and must cover the header row"}, {Name: "view-name", Kind: "own", Type: "string", Required: "optional", Desc: "Filter-view name; auto-assigned by the server when omitted; takes precedence over the same-named field inside `--properties`"}, @@ -551,8 +551,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "view-id", Kind: "own", Type: "string", Required: "required", Desc: "Target filter-view reference_id"}, {Name: "yes", Kind: "system", Type: "bool", Required: "required", Desc: "Confirm high-risk write (exit code 10 without this flag)"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -563,8 +563,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "view-id", Kind: "own", Type: "string", Required: "optional", Desc: "Filter by filter-view reference_id (returns the matching single view)"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -574,8 +574,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "view-id", Kind: "own", Type: "string", Required: "required", Desc: "Target filter-view reference_id"}, {Name: "properties", Kind: "own", Type: "string", Required: "required", Desc: "Filter-view rule JSON: `rules?`, `filtered_columns?`; update overwrites the entire rule set (read back with `+filter-view-list` first, then patch; pass `rules: []` to clear). `range` and `view_name` are separate flags", Input: []string{"file", "stdin"}}, {Name: "range", Kind: "own", Type: "string", Required: "optional", Desc: "Range the filter view applies to (A1 notation, e.g. `A1:F1000`); takes precedence over the same-named field inside `--properties`; omit to keep the current range on update"}, @@ -588,8 +588,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "image-name", Kind: "own", Type: "string", Required: "required", Desc: "Image name, including extension (e.g. `logo.png`)"}, {Name: "image-token", Kind: "own", Type: "string", Required: "xor", Desc: "Image file_token (XOR with `--image-uri`). Common source: `image_token` returned by `+float-image-list`"}, {Name: "image-uri", Kind: "own", Type: "string", Required: "xor", Desc: "Image URI handle returned by the upload flow (not a sheet object reference_id; XOR with `--image-token`); converted to file_token automatically"}, @@ -609,8 +609,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "float-image-id", Kind: "own", Type: "string", Required: "required", Desc: "Target float image id"}, {Name: "yes", Kind: "system", Type: "bool", Required: "required", Desc: "Confirm destructive write (exit code 10 without this flag); delete is irreversible"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -621,8 +621,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "float-image-id", Kind: "own", Type: "string", Required: "optional", Desc: "Filter by id; lists all float images on the sheet when omitted"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -632,8 +632,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "float-image-id", Kind: "own", Type: "string", Required: "required", Desc: "Target float image id"}, {Name: "image-name", Kind: "own", Type: "string", Required: "required", Desc: "Image name, including extension (e.g. `logo.png`)"}, {Name: "image-token", Kind: "own", Type: "string", Required: "optional", Desc: "Optional image file_token; mutually exclusive with `--image-uri`; omit both to keep the current image. Common source: `image_token` returned by `+float-image-list`"}, @@ -706,8 +706,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "pivot-table-id", Kind: "own", Type: "string", Required: "required", Desc: "Target pivot table id"}, {Name: "yes", Kind: "system", Type: "bool", Required: "required", Desc: "Confirm destructive write (exit code 10 without this flag); delete is irreversible"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -718,8 +718,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "pivot-table-id", Kind: "own", Type: "string", Required: "optional", Desc: "Filter by id"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -729,8 +729,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "pivot-table-id", Kind: "own", Type: "string", Required: "required", Desc: "Target pivot table id"}, {Name: "properties", Kind: "own", Type: "string", Required: "required", Desc: "Full or sufficiently complete pivot config (read back with `+pivot-list --pivot-table-id ` first, then patch)", Input: []string{"file", "stdin"}}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -741,8 +741,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "source-range", Kind: "own", Type: "string", Required: "required", Desc: "Source A1 range"}, {Name: "target-sheet-id", Kind: "own", Type: "string", Required: "optional", Desc: "Destination sub-sheet id; defaults to the same sheet as the source"}, {Name: "target-range", Kind: "own", Type: "string", Required: "required", Desc: "Destination A1 range (anchor cell is enough; size inferred from the source)"}, @@ -755,8 +755,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "source-range", Kind: "own", Type: "string", Required: "required", Desc: "Fill template range (seed cells for the series)"}, {Name: "target-range", Kind: "own", Type: "string", Required: "required", Desc: "Destination fill range (A1 notation)"}, {Name: "series-type", Kind: "own", Type: "string", Required: "optional", Desc: "Fill series type", Default: "auto", Enum: []string{"auto", "linear", "growth", "date", "copy"}}, @@ -768,8 +768,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "source-range", Kind: "own", Type: "string", Required: "required", Desc: "Source A1 range"}, {Name: "target-sheet-id", Kind: "own", Type: "string", Required: "optional", Desc: "Destination sub-sheet id; defaults to the same sheet as the source"}, {Name: "target-range", Kind: "own", Type: "string", Required: "required", Desc: "Destination A1 range (anchor cell is enough; size inferred from the source)"}, @@ -781,8 +781,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "range", Kind: "own", Type: "string", Required: "required", Desc: "Sort range (A1 notation; whether the header is included depends on `--has-header`)"}, {Name: "sort-keys", Kind: "own", Type: "string", Required: "required", Desc: "JSON array: `[{\"column\":\"\",\"ascending\":}, ...]`", Input: []string{"file", "stdin"}}, {Name: "has-header", Kind: "own", Type: "bool", Required: "optional", Desc: "Treat the first row as a header and exclude from sort; default `false`"}, @@ -802,8 +802,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "height", Kind: "own", Type: "int", Required: "xor", Desc: "Uniform row height in pixels (e.g. 30 / 40 / 60; NOT points), used with `--range`. Passing --height implies pixel mode; --type may be omitted (or set to `pixel` — equivalent). For per-row heights use `--heights`", Default: "0"}, {Name: "heights", Kind: "own", Type: "string", Required: "xor", Desc: "Per-row height map — set different heights for many rows in one atomic call. Keys: single row (`\"1\"`) or closed range (`\"2:20\"`); values: pixel height (e.g. 30 / 50), `\"auto\"` (fit content) or `\"standard\"` (reset to default). Units are pixels, NOT points. Mutually exclusive with `--range` / `--height` / `--type`", Input: []string{"file", "stdin"}}, {Name: "type", Kind: "own", Type: "string", Required: "xor", Desc: "Sizing mode: `pixel` (requires `--height`) / `standard` (reset to default row height) / `auto` (fit content). Passing --height alone is the common form; `--type standard` / `--type auto` cannot be combined with `--height`", Enum: []string{"pixel", "standard", "auto"}}, @@ -816,8 +816,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "title", Kind: "own", Type: "string", Required: "optional", Desc: "Copy title; auto-generated by the server when omitted"}, {Name: "index", Kind: "own", Type: "int", Required: "optional", Desc: "Insert position for the copy (0-based); appended to the end when omitted", Default: "-1"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -841,8 +841,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "yes", Kind: "system", Type: "bool", Required: "required", Desc: "Confirm high-risk write (exit code 10 without this flag)"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -852,8 +852,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, }, @@ -862,8 +862,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, }, @@ -872,8 +872,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "include", Kind: "own", Type: "string_slice", Required: "optional", Desc: "Comma-separated structure info categories to return", Enum: []string{"merges", "row_heights", "col_widths", "hidden_rows", "hidden_cols", "groups", "frozen"}}, {Name: "range", Kind: "own", Type: "string", Required: "optional", Desc: "Limit structure info to this A1 range; whole sheet when omitted"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -884,8 +884,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "index", Kind: "own", Type: "int", Required: "required", Desc: "Target position (0-based)"}, {Name: "source-index", Kind: "own", Type: "int", Required: "optional", Desc: "Source position (0-based); optional for standalone calls — if omitted, the CLI runtime derives it from the current workbook index of `--sheet-id` / `--sheet-name`. Inside `+batch-update` it must be passed explicitly, since batch cannot issue a structure query mid-run to derive it", Default: "-1"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -896,8 +896,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "title", Kind: "own", Type: "string", Required: "required", Desc: "New title"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -907,8 +907,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "color", Kind: "own", Type: "string", Required: "required", Desc: "Hex color like `#FF0000`; pass empty string `\"\"` to clear"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -918,8 +918,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, }, @@ -928,8 +928,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, }, @@ -938,8 +938,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "properties", Kind: "own", Type: "string", Required: "required", Desc: "JSON: `{config (shared style), sparklines (array of mini-charts)}`; run `--print-schema` for the full structure", Input: []string{"file", "stdin"}}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -949,8 +949,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "group-id", Kind: "own", Type: "string", Required: "required", Desc: "Target group id"}, {Name: "yes", Kind: "system", Type: "bool", Required: "required", Desc: "Confirm destructive write (exit code 10 without this flag); delete is irreversible"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, @@ -961,8 +961,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "group-id", Kind: "own", Type: "string", Required: "optional", Desc: "Filter by group_id"}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, }, @@ -972,8 +972,8 @@ var flagDefs = map[string]commandDef{ Flags: []flagDef{ {Name: "url", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet URL (XOR with `--spreadsheet-token`)"}, {Name: "spreadsheet-token", Kind: "public", Type: "string", Required: "xor", Desc: "Spreadsheet token (XOR with `--url`)"}, - {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id (XOR with `--sheet-name`)"}, - {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name (XOR with `--sheet-id`)"}, + {Name: "sheet-id", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet reference_id — required: pass this or `--sheet-name` (exactly one of the two)"}, + {Name: "sheet-name", Kind: "public", Type: "string", Required: "xor", Desc: "Sheet name — required: pass this or `--sheet-id` (exactly one of the two)"}, {Name: "group-id", Kind: "own", Type: "string", Required: "required", Desc: "Target group id"}, {Name: "properties", Kind: "own", Type: "string", Required: "required", Desc: "JSON: `{config, sparklines}`; read back with `+sparkline-list --group-id ` first, then patch; run `--print-schema` for the full structure", Input: []string{"file", "stdin"}}, {Name: "dry-run", Kind: "system", Type: "bool", Required: "optional"}, diff --git a/shortcuts/sheets/flag_ergonomics.go b/shortcuts/sheets/flag_ergonomics.go index 8109fb1eb..351f3a102 100644 --- a/shortcuts/sheets/flag_ergonomics.go +++ b/shortcuts/sheets/flag_ergonomics.go @@ -296,6 +296,10 @@ var enumAliases = map[string]string{ // a distinct truncation mode nobody spells "false"). "true": "auto-wrap", "false": "overflow", + // Google Sheets wrapStrategy vocabulary: WRAP / CLIP / OVERFLOW. Only + // the first two need mapping — overflow is spelled the same in both. + "wrap": "auto-wrap", + "clip": "word-clip", } // canonicalEnumValue returns the enum entry an off-vocabulary value diff --git a/shortcuts/sheets/flag_schema_validate.go b/shortcuts/sheets/flag_schema_validate.go index e04bfb732..c6826e95a 100644 --- a/shortcuts/sheets/flag_schema_validate.go +++ b/shortcuts/sheets/flag_schema_validate.go @@ -116,9 +116,14 @@ func validateValueAgainstSchema(fv flagView, name string, value interface{}) err // exact JSON Schema for this (command, flag) pair; reaching this // branch means entry[name] resolved a schema from the embedded // index, so the suggested command is guaranteed to print it. + // An enum-bearing field states its own contract far better than a + // whole-payload skeleton, at any depth: --border-styles with + // weight:1 used to answer with {"bottom": {…}, "left": {…}, …}, + // which says nothing about thin/medium/thick. Let those fall + // through to the hintSuffix path below, which names the enum. var tm *typeMismatchError isTypeMismatch := errors.As(vErr, &tm) - if isTypeMismatch && pathDepth(tm.path) <= skeletonPathDepthLimit { + if isTypeMismatch && len(tm.enum) == 0 && pathDepth(tm.path) <= skeletonPathDepthLimit { if sk := schemaSkeleton(&schema, skeletonMaxDepth); sk != "" { return sheetsValidationForFlag(name, "--%s: %s; expected shape: %s (run `lark-cli sheets %s --print-schema --flag-name %s` for the full JSON Schema)", diff --git a/shortcuts/sheets/helpers.go b/shortcuts/sheets/helpers.go index 7e0357200..e9281c929 100644 --- a/shortcuts/sheets/helpers.go +++ b/shortcuts/sheets/helpers.go @@ -301,7 +301,12 @@ func requireSheetSelector(sheetID, sheetName string) error { sheetID = strings.TrimSpace(sheetID) sheetName = strings.TrimSpace(sheetName) if sheetID == "" && sheetName == "" { + // Eval traces show every occurrence recovering on the next call, so + // the gap is knowing WHICH name to pass, not that one is needed: a + // just-created workbook has a single sheet named Sheet1, and any + // other workbook needs one +workbook-info lookup. return common.ValidationErrorf("specify at least one of --sheet-id or --sheet-name"). + WithHint("a freshly created workbook has one sheet named Sheet1 (`--sheet-name Sheet1`); otherwise list the real sheets with `lark-cli sheets +workbook-info --url `"). WithParams( sheetsInvalidParam("sheet-id", "required; specify at least one"), sheetsInvalidParam("sheet-name", "required; specify at least one"), diff --git a/shortcuts/sheets/helpers_test.go b/shortcuts/sheets/helpers_test.go index 39aef181b..bd53a04c7 100644 --- a/shortcuts/sheets/helpers_test.go +++ b/shortcuts/sheets/helpers_test.go @@ -144,6 +144,13 @@ func TestSheetHelpersValidationMetadata(t *testing.T) { if validationErr.Params[0].Name != "--sheet-id" || validationErr.Params[1].Name != "--sheet-name" { t.Fatalf("params = %#v, want --sheet-id/--sheet-name", validationErr.Params) } + // Eval traces recover on the very next call, so the missing piece is + // which name to pass — the hint has to name Sheet1 and the lookup. + for _, want := range []string{"Sheet1", "+workbook-info"} { + if !strings.Contains(validationErr.Hint, want) { + t.Errorf("hint should mention %q, got %q", want, validationErr.Hint) + } + } }) t.Run("spreadsheet url shape reports url param", func(t *testing.T) { diff --git a/shortcuts/sheets/json_flag_normalize_test.go b/shortcuts/sheets/json_flag_normalize_test.go index 9acac78c4..c7ee094ca 100644 --- a/shortcuts/sheets/json_flag_normalize_test.go +++ b/shortcuts/sheets/json_flag_normalize_test.go @@ -223,6 +223,25 @@ func TestTablePut_SheetsDecodeHints(t *testing.T) { } }) + t.Run("bare array names the missing envelope", func(t *testing.T) { + t.Parallel() + sc := shortcutFromRegistry(t, "+table-put") + _, _, err := runShortcutCapturingErr(t, sc, []string{ + "--url", testURL, + "--sheets", `[{"name":"s","columns":["a"],"data":[["x"]]}]`, + "--dry-run", + }) + // The Go unmarshal text names the internal struct, not the fix + // (07-28 root-cause report #4, 84 occurrences). + ve := requireValidation(t, err, `top level must be the object {"sheets":[…]}`) + if strings.Contains(ve.Message, "cannot unmarshal") { + t.Errorf("message should not leak the Go unmarshal wording, got %q", ve.Message) + } + if !strings.Contains(ve.Hint, "expected shape:") { + t.Errorf("hint should still inline the skeleton, got %q", ve.Hint) + } + }) + t.Run("syntax error steers to stdin or @file", func(t *testing.T) { t.Parallel() sc := shortcutFromRegistry(t, "+table-put") diff --git a/shortcuts/sheets/lark_sheet_table_io.go b/shortcuts/sheets/lark_sheet_table_io.go index 7a80a7e19..042d0d392 100644 --- a/shortcuts/sheets/lark_sheet_table_io.go +++ b/shortcuts/sheets/lark_sheet_table_io.go @@ -272,6 +272,16 @@ func parseTablePutPayload(runtime flagView) (*tablePayload, error) { verr := common.ValidationErrorf("--sheets: invalid JSON: %v", err).WithCause(err) var ute *json.UnmarshalTypeError if errors.As(err, &ute) { + // A mismatch with no field path is the missing envelope: the + // payload IS the sub-sheet list, written without the wrapper. + // Say that in the message — the Go unmarshal text ("cannot + // unmarshal array into Go value of type struct { Sheets …}") + // names the internal type, not the fix. + if ute.Field == "" { + verr = common.ValidationErrorf( + `--sheets: top level must be the object {"sheets":[…]}, got a bare JSON %s; wrap the sub-sheet list in a "sheets" key`, + ute.Value).WithCause(err) + } return nil, verr.WithHint( "expected shape: %s (columns is a flat string array; dtypes/formats are column-name-keyed maps; data is row-major)", tablePutSheetsSkeleton) diff --git a/shortcuts/sheets/styles_prescription_test.go b/shortcuts/sheets/styles_prescription_test.go index d97e02d50..34b8ab2e9 100644 --- a/shortcuts/sheets/styles_prescription_test.go +++ b/shortcuts/sheets/styles_prescription_test.go @@ -224,6 +224,59 @@ func TestCellsSetStyle_WordWrapBooleanNormalizes(t *testing.T) { } } +// TestCellsSetStyle_WordWrapGoogleVocabularyNormalizes pins the Google +// Sheets wrapStrategy words (WRAP / CLIP) onto the Lark enum — the flag +// name --wrap-strategy already prescribes --word-wrap, so the value +// vocabulary has to land too or the retry fails a second time. +func TestCellsSetStyle_WordWrapGoogleVocabularyNormalizes(t *testing.T) { + t.Parallel() + for word, want := range map[string]string{"wrap": "auto-wrap", "WRAP": "auto-wrap", "clip": "word-clip"} { + t.Run(word, func(t *testing.T) { + t.Parallel() + sc := shortcutFromRegistry(t, "+cells-set-style") + stdout, _, err := runShortcutCapturingErr(t, sc, []string{ + "--url", testURL, + "--sheet-name", "s", + "--range", "A1:A1", + "--word-wrap", word, + "--dry-run", + }) + if err != nil { + t.Fatalf("--word-wrap %s should normalize to %s, got: %v", word, want, err) + } + if !strings.Contains(stdout, want) { + t.Errorf("dry-run body should carry %s, got %q", want, stdout) + } + }) + } +} + +// TestCellsSetStyle_BorderWeightNumberNamesEnum pins the enum-over-skeleton +// rule: a type mismatch on an enum-bearing field answers with the allowed +// values, not a whole-payload skeleton ({"bottom": {…}, "left": {…}, …} +// told the caller nothing about thin/medium/thick — 07-28 root-cause +// report #5, 75 occurrences). +func TestCellsSetStyle_BorderWeightNumberNamesEnum(t *testing.T) { + t.Parallel() + sc := shortcutFromRegistry(t, "+cells-set-style") + _, _, err := runShortcutCapturingErr(t, sc, []string{ + "--url", testURL, + "--sheet-name", "s", + "--range", "A1", + "--border-styles", `{"top":{"style":"solid","weight":1}}`, + "--dry-run", + }) + ve := requireValidation(t, err, `expected type "string", got "number"`) + for _, want := range []string{`"thin"`, `"medium"`, `"thick"`} { + if !strings.Contains(ve.Message, want) { + t.Errorf("message should name the weight enum %s, got %q", want, ve.Message) + } + } + if strings.Contains(ve.Message, "expected shape:") { + t.Errorf("enum-bearing mismatch should not fall back to the shape skeleton, got %q", ve.Message) + } +} + // TestUnderscoreFlagFormsParse pins the wire-vocabulary underscore rewrite: // --sheet_name / --border_styles parse as their hyphen forms (agents copy // field names out of JSON payloads where underscores are canonical).