@amaster.ai/pi-lark 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/SKILL.md +39 -6
  3. package/skills/lark-apps/references/lark-apps-cloud-dev.md +5 -4
  4. package/skills/lark-apps/references/lark-apps-create.md +6 -3
  5. package/skills/lark-apps/references/lark-apps-get.md +1 -1
  6. package/skills/lark-apps/references/lark-apps-list.md +1 -1
  7. package/skills/lark-apps/references/lark-apps-local-dev.md +27 -1
  8. package/skills/lark-apps/references/lark-apps-release-create.md +1 -1
  9. package/skills/lark-base/SKILL.md +14 -6
  10. package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +17 -1
  11. package/skills/lark-base/references/lark-base-dashboard.md +17 -4
  12. package/skills/lark-base/references/lark-base-data-query-guide.md +8 -0
  13. package/skills/lark-base/references/lark-base-field-create.md +19 -8
  14. package/skills/lark-base/references/lark-base-field-json.md +5 -2
  15. package/skills/lark-calendar/SKILL.md +1 -1
  16. package/skills/lark-doc/SKILL.md +26 -61
  17. package/skills/lark-doc/references/genres/business-analysis.md +30 -0
  18. package/skills/lark-doc/references/genres/data-report.md +32 -0
  19. package/skills/lark-doc/references/genres/email.md +38 -0
  20. package/skills/lark-doc/references/genres/execution-plan.md +27 -0
  21. package/skills/lark-doc/references/genres/formal-doc.md +37 -0
  22. package/skills/lark-doc/references/genres/meeting-minutes.md +24 -0
  23. package/skills/lark-doc/references/genres/memo-brief.md +25 -0
  24. package/skills/lark-doc/references/genres/official-redhead.md +73 -0
  25. package/skills/lark-doc/references/genres/prd.md +26 -0
  26. package/skills/lark-doc/references/genres/proposal.md +24 -0
  27. package/skills/lark-doc/references/genres/research-report.md +32 -0
  28. package/skills/lark-doc/references/genres/retrospective.md +25 -0
  29. package/skills/lark-doc/references/genres/route-consumer.md +37 -0
  30. package/skills/lark-doc/references/genres/route-creative.md +36 -0
  31. package/skills/lark-doc/references/genres/route-knowledge.md +39 -0
  32. package/skills/lark-doc/references/genres/route-marketing.md +40 -0
  33. package/skills/lark-doc/references/genres/route-media.md +36 -0
  34. package/skills/lark-doc/references/genres/route-opinion.md +38 -0
  35. package/skills/lark-doc/references/genres/route-personal-brand.md +36 -0
  36. package/skills/lark-doc/references/genres/route-platform.md +9 -0
  37. package/skills/lark-doc/references/genres/route-report.md +10 -0
  38. package/skills/lark-doc/references/genres/route-workplace.md +17 -0
  39. package/skills/lark-doc/references/genres/sop-tutorial.md +41 -0
  40. package/skills/lark-doc/references/genres/technical-doc.md +39 -0
  41. package/skills/lark-doc/references/genres/wechat.md +39 -0
  42. package/skills/lark-doc/references/genres/weekly-report.md +24 -0
  43. package/skills/lark-doc/references/genres/white-paper.md +32 -0
  44. package/skills/lark-doc/references/genres/xiaohongshu.md +38 -0
  45. package/skills/lark-doc/references/lark-doc-create-workflow.md +121 -0
  46. package/skills/lark-doc/references/lark-doc-create.md +22 -48
  47. package/skills/lark-doc/references/lark-doc-fetch.md +75 -92
  48. package/skills/lark-doc/references/lark-doc-history.md +16 -15
  49. package/skills/lark-doc/references/lark-doc-md.md +5 -1
  50. package/skills/lark-doc/references/lark-doc-media-download.md +2 -1
  51. package/skills/lark-doc/references/lark-doc-script.md +76 -0
  52. package/skills/lark-doc/references/lark-doc-update.md +70 -222
  53. package/skills/lark-doc/references/lark-doc-whiteboard.md +5 -9
  54. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +17 -12
  55. package/skills/lark-doc/references/lark-doc-xml.md +38 -167
  56. package/skills/lark-drive/SKILL.md +7 -5
  57. package/skills/lark-drive/references/lark-drive-apply-permission.md +1 -1
  58. package/skills/lark-drive/references/lark-drive-copy.md +87 -0
  59. package/skills/lark-drive/references/lark-drive-download.md +2 -1
  60. package/skills/lark-drive/references/lark-drive-export.md +3 -0
  61. package/skills/lark-drive/references/lark-drive-task-result.md +3 -0
  62. package/skills/lark-drive/references/lark-drive-update-title.md +78 -0
  63. package/skills/lark-event/SKILL.md +7 -4
  64. package/skills/lark-event/references/lark-event-vc.md +8 -2
  65. package/skills/lark-im/SKILL.md +8 -8
  66. package/skills/lark-im/references/lark-im-chat-list.md +9 -2
  67. package/skills/lark-im/references/lark-im-chat-members-list.md +7 -4
  68. package/skills/lark-im/references/lark-im-chat-messages-list.md +10 -3
  69. package/skills/lark-im/references/lark-im-chat-search.md +9 -2
  70. package/skills/lark-im/references/lark-im-feed-group-list-item.md +2 -2
  71. package/skills/lark-im/references/lark-im-feed-group-list.md +2 -2
  72. package/skills/lark-im/references/lark-im-feed-shortcut-list.md +1 -1
  73. package/skills/lark-im/references/lark-im-flag-list.md +2 -2
  74. package/skills/lark-im/references/lark-im-message-enrichment.md +1 -1
  75. package/skills/lark-im/references/lark-im-messages-resources-download.md +19 -25
  76. package/skills/lark-im/references/lark-im-messages-search.md +4 -5
  77. package/skills/lark-im/references/lark-im-threads-messages-list.md +8 -4
  78. package/skills/lark-mail/references/lark-mail-triage.md +19 -4
  79. package/skills/lark-minutes/SKILL.md +1 -1
  80. package/skills/lark-minutes/references/lark-minutes-search.md +6 -7
  81. package/skills/lark-shared/SKILL.md +3 -3
  82. package/skills/lark-sheets/SKILL.md +83 -82
  83. package/skills/lark-sheets/references/lark-sheets-batch-update.md +13 -58
  84. package/skills/lark-sheets/references/lark-sheets-chart.md +2 -1
  85. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +1 -1
  86. package/skills/lark-sheets/references/lark-sheets-range-operations.md +5 -5
  87. package/skills/lark-sheets/references/lark-sheets-read-data.md +80 -6
  88. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +21 -10
  89. package/skills/lark-sheets/references/lark-sheets-styles-put.md +93 -0
  90. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +2 -2
  91. package/skills/lark-sheets/references/lark-sheets-workbook.md +4 -3
  92. package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -12
  93. package/skills/lark-sheets/scripts/lark_detect_subtables.py +593 -0
  94. package/skills/lark-sheets/scripts/lark_inspect_workbook.py +188 -0
  95. package/skills/lark-sheets/scripts/lark_profile_table.py +614 -0
  96. package/skills/lark-sheets/scripts/lark_sheet_range.py +176 -0
  97. package/skills/lark-sheets/scripts/lark_sheet_read_cli.py +184 -0
  98. package/skills/lark-sheets/scripts/sheets_df.py +21 -3
  99. package/skills/lark-slides/SKILL.md +27 -44
  100. package/skills/lark-slides/references/lark-slides-add-slide.md +92 -0
  101. package/skills/lark-slides/references/lark-slides-create.md +77 -65
  102. package/skills/lark-slides/references/lark-slides-delete-slide.md +65 -0
  103. package/skills/lark-slides/references/lark-slides-edit-workflows.md +6 -7
  104. package/skills/lark-slides/references/lark-slides-media-upload.md +3 -25
  105. package/skills/lark-slides/references/lark-slides-replace-slide.md +22 -1
  106. package/skills/lark-slides/references/lark-slides-screenshot.md +31 -13
  107. package/skills/lark-slides/references/lark-slides-update-slide.md +146 -0
  108. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +31 -8
  109. package/skills/lark-slides/references/slides_chart_demo.xml +1 -2
  110. package/skills/lark-slides/references/slides_xml_schema_definition.xml +48 -4
  111. package/skills/lark-slides/references/troubleshooting.md +7 -8
  112. package/skills/lark-slides/references/validation-checklist.md +4 -4
  113. package/skills/lark-slides/references/xml-schema-quick-ref.md +23 -11
  114. package/skills/lark-slides/scripts/sxsd_validator.py +154 -10
  115. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +360 -76
  116. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +1138 -214
  117. package/skills/lark-whiteboard/SKILL.md +15 -8
  118. package/skills/lark-whiteboard/references/lark-whiteboard-export.md +4 -3
  119. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +4 -4
  120. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +19 -17
  121. package/skills/lark-whiteboard/routes/dsl.md +8 -2
  122. package/skills/lark-whiteboard/routes/mermaid.md +1 -1
  123. package/skills/lark-whiteboard/routes/svg-edit.md +5 -2
  124. package/skills/lark-whiteboard/routes/svg.md +3 -1
  125. package/skills/lark-whiteboard/scenes/mention.md +71 -0
  126. package/skills/lark-wiki/SKILL.md +5 -3
  127. package/skills/lark-wiki/references/lark-wiki-delete-space.md +6 -3
  128. package/skills/lark-doc/references/lark-doc-word-stat.md +0 -93
  129. package/skills/lark-doc/references/style/lark-doc-create-workflow.md +0 -47
  130. package/skills/lark-doc/references/style/lark-doc-style.md +0 -68
  131. package/skills/lark-doc/references/style/lark-doc-update-workflow.md +0 -48
  132. package/skills/lark-doc/scripts/doc_word_stat.py +0 -1243
  133. package/skills/lark-slides/references/lark-slides-replace-pages.md +0 -95
  134. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +0 -219
  135. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +0 -126
@@ -0,0 +1,188 @@
1
+ #!/usr/bin/env python3
2
+ # Copyright (c) 2026 Lark Technologies Pte. Ltd.
3
+ # SPDX-License-Identifier: MIT
4
+ """Inspect a Lark spreadsheet and emit a compact workbook profile."""
5
+
6
+ from __future__ import annotations
7
+
8
+ import argparse
9
+ from typing import Any
10
+
11
+ from lark_sheet_range import index_to_col
12
+ from lark_sheet_read_cli import (
13
+ LarkCliError,
14
+ add_spreadsheet_args,
15
+ emit_error,
16
+ emit_success,
17
+ envelope_data,
18
+ resolve_target_sheets,
19
+ run_sheets,
20
+ sheet_identifier,
21
+ sheet_locator,
22
+ sheet_title,
23
+ )
24
+
25
+ ACTION = "inspect_workbook"
26
+ LAYOUT_INCLUDE = "merges,row_heights,col_widths,hidden_rows,hidden_cols,groups,frozen"
27
+
28
+
29
+ def _sheet_summary(sheet: dict[str, Any]) -> dict[str, Any]:
30
+ return {
31
+ "sheet_id": sheet_identifier(sheet),
32
+ "title": sheet_title(sheet),
33
+ "index": sheet.get("index"),
34
+ "row_count": sheet.get("row_count"),
35
+ "column_count": sheet.get("column_count"),
36
+ "is_hidden": sheet.get("is_hidden"),
37
+ "merged_cells_count": sheet.get("merged_cells_count"),
38
+ "chart_count": sheet.get("chart_count"),
39
+ "pivot_table_count": sheet.get("pivot_table_count"),
40
+ "float_image_count": sheet.get("float_image_count"),
41
+ }
42
+
43
+
44
+ def _list_count(value: Any) -> int:
45
+ return len(value) if isinstance(value, list) else 0
46
+
47
+
48
+ def _layout_summary(layout: dict[str, Any]) -> dict[str, Any]:
49
+ """Retain layout signals without serializing unbounded per-cell metadata."""
50
+ merges = layout.get("merged_cells") or layout.get("merges") or []
51
+ groups = layout.get("groups") if isinstance(layout.get("groups"), dict) else {}
52
+ row_groups = layout.get("row_groups") or groups.get("rows", [])
53
+ col_groups = layout.get("column_groups") or groups.get("columns", [])
54
+ return {
55
+ "merge_count": _list_count(merges),
56
+ "row_heights_count": _list_count(layout.get("row_heights")),
57
+ "column_widths_count": _list_count(layout.get("col_widths")),
58
+ "hidden_rows_count": _list_count(layout.get("hidden_rows")),
59
+ "hidden_columns_count": _list_count(
60
+ layout.get("hidden_cols") or layout.get("hidden_columns")
61
+ ),
62
+ "row_groups_count": _list_count(row_groups),
63
+ "column_groups_count": _list_count(col_groups),
64
+ "frozen": layout.get("frozen"),
65
+ }
66
+
67
+
68
+ def inspect_workbook(args) -> tuple[dict[str, Any], list[str]]:
69
+ warnings: list[str] = []
70
+ workbook = envelope_data(
71
+ run_sheets(
72
+ "+workbook-info",
73
+ url=args.url,
74
+ spreadsheet_token=args.spreadsheet_token,
75
+ timeout=args.timeout,
76
+ )
77
+ )
78
+ # An explicit selector must resolve: without require_one a typo'd
79
+ # --sheet-id/--sheet-name silently yields sheet_count 0, which reads as
80
+ # "empty workbook" instead of a locator error.
81
+ target_sheets = resolve_target_sheets(
82
+ workbook,
83
+ sheet_id=args.sheet_id,
84
+ sheet_name=args.sheet_name,
85
+ require_one=bool(args.sheet_id or args.sheet_name),
86
+ )
87
+ if args.max_sheets < 1:
88
+ raise LarkCliError("--max-sheets must be at least 1")
89
+ inspect_count = len(target_sheets)
90
+ if not args.sheet_id and not args.sheet_name:
91
+ inspect_count = min(len(target_sheets), args.max_sheets)
92
+ if inspect_count < len(target_sheets):
93
+ warnings.append(
94
+ f"layout and preview skipped for {len(target_sheets) - inspect_count} sheets; "
95
+ f"pass --sheet-id or --sheet-name to inspect one"
96
+ )
97
+
98
+ profiles = []
99
+ for position, sheet in enumerate(target_sheets):
100
+ sid = sheet_identifier(sheet)
101
+ title = sheet_title(sheet)
102
+ profile = _sheet_summary(sheet)
103
+ if position >= inspect_count:
104
+ profiles.append(profile)
105
+ continue
106
+ locator = sheet_locator(sheet)
107
+ col_count = int(sheet.get("column_count") or args.max_preview_cols)
108
+ preview_cols = min(col_count, args.max_preview_cols)
109
+ if col_count > args.max_preview_cols:
110
+ warnings.append(
111
+ f"{title or sid}: preview clipped to first {args.max_preview_cols} columns"
112
+ )
113
+ end_col = index_to_col(max(1, preview_cols))
114
+ preview_range = f"A1:{end_col}{args.preview_rows}"
115
+
116
+ # Per-sheet, not fail-the-run: this is the first-step pre-flight, and
117
+ # one unreadable sheet (odd type, transient error, a locator that does
118
+ # not resolve) must not throw away the summaries already collected for
119
+ # every other sheet. The basic summary comes from +workbook-info and is
120
+ # already in hand, so a failure here degrades detail, not correctness —
121
+ # same call the sibling profile_table downgrades to a warning.
122
+ try:
123
+ layout = envelope_data(
124
+ run_sheets(
125
+ "+sheet-info",
126
+ url=args.url,
127
+ spreadsheet_token=args.spreadsheet_token,
128
+ **locator,
129
+ flags={"include": LAYOUT_INCLUDE},
130
+ timeout=args.timeout,
131
+ )
132
+ )
133
+ preview = envelope_data(
134
+ run_sheets(
135
+ "+csv-get",
136
+ url=args.url,
137
+ spreadsheet_token=args.spreadsheet_token,
138
+ **locator,
139
+ flags={"range": preview_range, "max_chars": args.max_chars},
140
+ timeout=args.timeout,
141
+ )
142
+ )
143
+ except LarkCliError as exc:
144
+ warnings.append(
145
+ f"{title or sid}: layout/preview unavailable ({exc}); "
146
+ "re-read this sheet on its own with --sheet-name, or use +sheet-info / +csv-get directly"
147
+ )
148
+ profiles.append(profile)
149
+ continue
150
+ if preview.get("has_more"):
151
+ warnings.append(f"{title or sid}: preview range {preview_range} was truncated")
152
+
153
+ profiles.append(
154
+ {
155
+ **profile,
156
+ "layout": _layout_summary(layout),
157
+ "preview": {
158
+ "range": preview_range,
159
+ "current_region": preview.get("current_region"),
160
+ "row_indices": preview.get("row_indices"),
161
+ "col_indices": preview.get("col_indices"),
162
+ "annotated_csv": preview.get("annotated_csv"),
163
+ "has_more": preview.get("has_more"),
164
+ },
165
+ }
166
+ )
167
+
168
+ return {"sheet_count": len(target_sheets), "sheets": profiles}, warnings
169
+
170
+
171
+ def main() -> None:
172
+ parser = argparse.ArgumentParser(description=__doc__)
173
+ add_spreadsheet_args(parser, require_sheet=False, allow_sheet=True)
174
+ parser.add_argument("--preview-rows", type=int, default=15)
175
+ parser.add_argument("--max-preview-cols", type=int, default=100)
176
+ parser.add_argument("--max-chars", type=int, default=8000)
177
+ parser.add_argument("--max-sheets", type=int, default=3)
178
+ parser.add_argument("--timeout", type=int, default=60)
179
+ args = parser.parse_args()
180
+ try:
181
+ data, warnings = inspect_workbook(args)
182
+ except (LarkCliError, ValueError, TypeError) as exc:
183
+ emit_error(ACTION, str(exc))
184
+ emit_success(ACTION, data, warnings)
185
+
186
+
187
+ if __name__ == "__main__":
188
+ main()