Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (31)
✅ Files skipped from review due to trivial changes (28)
🚧 Files skipped from review as they are similar to previous changes (3)
📝 WalkthroughWalkthroughAdds 30+ new Feishu/Lark interactive card JSON examples under Changes
Estimated Code Review Effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested labels
Suggested Reviewers
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Greptile SummaryThis PR adds 28 Card 2.0 JSON example templates under Two copy-paste content errors exist in the example library that agents could learn as correct patterns:
Confidence Score: 4/5Safe to merge after fixing two copy-paste i18n content errors in the example library that would teach agents incorrect translation patterns. Two P1 content errors exist in the example JSON files: wrong i18n translations in order-confirmation-approval.json and a semantically wrong Japanese alert title in alert-resolved.json (and alert-initiation.json). Since these are LLM training examples, incorrect patterns can propagate into agent-generated cards. The documentation changes (SKILL.md, send/reply references) are clean and correct. skills/lark-im/card-examples/order-confirmation-approval.json (payment term i18n copy-paste), skills/lark-im/card-examples/alert-resolved.json and alert-initiation.json (wrong Japanese title "注文確認待ち") Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Agent receives card task] --> B{Card type?}
B -->|Interactive / complex| C[Read SKILL.md mandatory section]
B -->|Plain text / post| Z[Use --text or --markdown flag]
C --> D[Read +messages-send or +messages-reply reference]
D --> E[Read Card 2.0 structure doc]
E --> F[Read component overview doc]
F --> G[Read only necessary component detail docs]
G --> H[Choose 1-2 relevant examples from card-examples/]
H --> I[Compose card JSON]
I --> J[Send via --content flag with msg_type interactive]
Reviews (3): Last reviewed commit: "# This is a combination of 2 commits." | Re-trigger Greptile |
There was a problem hiding this comment.
Actionable comments posted: 18
🧹 Nitpick comments (9)
skills/lark-im/card-examples/equipment-pickup-notification.json (1)
157-157: Consider adding a trailing newline.JSON files should end with a newline for better POSIX compliance and cleaner git diffs.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/lark-im/card-examples/equipment-pickup-notification.json` at line 157, The file ends with a closing brace '}' but lacks a trailing newline; open skills/lark-im/card-examples/equipment-pickup-notification.json and ensure there is a single newline character after the final '}' (i.e., add a trailing newline at EOF) to satisfy POSIX/good-git-diff conventions.skills/lark-im/card-examples/team-birthday-greeting.json (1)
94-94: Consider adding a trailing newline.JSON files should end with a newline for better POSIX compliance and cleaner git diffs.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/lark-im/card-examples/team-birthday-greeting.json` at line 94, Add a trailing newline to the JSON file by ensuring the final closing brace '}' in team-birthday-greeting.json is followed by a single '\n' character so the file ends with a newline (POSIX-compliant and cleaner diffs).skills/lark-im/card-examples/smart-locker-launch.json (1)
115-115: Consider adding a trailing newline.JSON files should end with a newline for better POSIX compliance and cleaner git diffs.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/lark-im/card-examples/smart-locker-launch.json` at line 115, The file ends with a closing brace '}' but lacks a trailing newline; update skills/lark-im/card-examples/smart-locker-launch.json by adding a single newline character at EOF so the file ends with '\n' for POSIX compliance and cleaner git diffs.skills/lark-im/card-examples/equipment-service-feedback.json (1)
227-227: Consider adding a trailing newline.JSON files should end with a newline for better POSIX compliance and cleaner git diffs.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/lark-im/card-examples/equipment-service-feedback.json` at line 227, The file ends with a closing brace '}' but lacks a trailing newline; open the JSON file (look for the final '}' in equipment-service-feedback.json) and add a single newline character at EOF so the file terminates with a trailing newline for POSIX compliance and cleaner diffs.skills/lark-im/card-examples/daily-report-of-codebase.json (1)
241-241: Consider adding a trailing newline.JSON files should end with a newline for better POSIX compliance and cleaner git diffs.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/lark-im/card-examples/daily-report-of-codebase.json` at line 241, The JSON file skills/lark-im/card-examples/daily-report-of-codebase.json is missing a trailing newline; open that file and add a single newline character after the final closing brace (ensure the file ends with "\n") so it conforms to POSIX conventions and produces cleaner git diffs.skills/lark-im/card-examples/ai-chat-welcome.json (1)
21-52: Deduplicate equivalent custom color definitions.The color entries in Line 21–Line 52 repeat the same RGBA values under different keys. Keeping one set improves maintainability and reduces accidental drift.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/lark-im/card-examples/ai-chat-welcome.json` around lines 21 - 52, Several color entries (color_dtgiw98jw3s, color_7u3svrs1gk, color_aedgx4h5lst, color_5fjelryhkr7, color_cpi1ty18y07, color_9uxmooevtbs, color_yshuzkazoo, color_bqm6462lklw) define identical light/dark RGBA values; consolidate them by keeping one canonical key for each unique RGBA pair (e.g., keep color_dtgiw98jw3s and color_aedgx4h5lst for the two distinct pairs) and remove the duplicate keys, and then update all usages/references in the project to point to the retained canonical keys so behavior is unchanged.skills/lark-im/card-examples/approval-reminder.json (1)
225-235: Use margin/spacing instead of an empty spacer column.The empty column in Line 225–Line 235 can be removed to simplify structure without behavior change.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/lark-im/card-examples/approval-reminder.json` around lines 225 - 235, Remove the empty column object (the JSON node with "tag": "column" and "elements": []) from the card definition and rely on existing margin/spacing properties (e.g., "horizontal_spacing", "vertical_spacing", "margin") on neighboring elements to preserve layout; delete that entire empty column block and, if needed, adjust the surrounding container's "horizontal_spacing"/"vertical_spacing" or the adjacent column's "margin" to maintain the intended spacing.skills/lark-im/card-examples/ai-image-generation.json (1)
277-301: Icon-only action buttons should include visible labels.Buttons at lines 277, 316, and 355 define empty
text.contentand rely onhover_tipsonly. This approach is weak on touch/mobile devices and fails accessibility requirements—hover tooltips are inaccessible to keyboard users and non-existent on touch interfaces. Consider adding descriptive text to thetext.contentfield for each button.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/lark-im/card-examples/ai-image-generation.json` around lines 277 - 301, Button definitions using only an icon (e.g., the button with element_id "a1" and the other icon-only buttons at the next two spots) have empty text.content and rely on hover_tips, which breaks accessibility on touch/keyboard devices; update each button's "text.content" from "" to a short descriptive label (for example "Regenerate" for the refresh action) while keeping the existing icon and behaviors so the visible label is available to all users.skills/lark-im/card-examples/daily-work-summary.json (1)
333-333: Avoid hardcoded day text in reusable template headers.Line 333 hardcodes
09月11号, which makes this example stale quickly. Prefer a placeholder/date variable or a neutral title.♻️ Suggested update
- "content": "早上好!请查收09月11号工作总结" + "content": "早上好!请查收今日工作总结"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/lark-im/card-examples/daily-work-summary.json` at line 333, The example JSON's "content" value currently hardcodes the date "09月11号" making the template stale; update the "content" field in this JSON example to use a placeholder or variable (e.g., {{date}} or {{summary_date}}) or a neutral title like "工作总结" instead, so the header is reusable and not tied to a specific hardcoded day.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@skills/lark-im/card-examples/ai-calendar-creation.json`:
- Around line 18-23: The card example's container uses "direction":
"horizontal", causing title, datetime, attendees, and actions to layout in a
single row; update the body.direction value from "horizontal" to "vertical" (in
the JSON key "body.direction" of the ai-calendar-creation example) so the
elements stack correctly for mobile/readability while leaving other
spacing/padding keys unchanged.
In `@skills/lark-im/card-examples/ai-curated-recommendations.json`:
- Line 155: The callback action value contains a stray newline "view_\ndetail"
which breaks dispatch keys; locate the JSON object with the "value" field that
currently equals "view_\ndetail" (in the card example under
ai-curated-recommendations) and replace it with a single-token string
"view_detail" so the callback key is a continuous token.
In `@skills/lark-im/card-examples/ai-image-generation.json`:
- Line 47: The corner_radius field inside the interactive_container object is
set to an empty string; change that value to an explicit "0px" to match the
other interactive_container usages (standardize corner_radius from "" to "0px"
so it is consistent with examples that use values like "6px" or "0px").
In `@skills/lark-im/card-examples/alert-initiation.json`:
- Around line 7-9: The locales array under the "locales" key only lists "en_us"
while there are i18n entries for "ja_jp" later in alert-initiation.json; either
add "ja_jp" to the config.locales array or remove the "ja_jp" i18n entries so
the declared locales match the actual translations (update the "locales" array
to include "ja_jp" if you want to keep the Japanese content, or delete the
"ja_jp" blocks wherever they appear).
In `@skills/lark-im/card-examples/alert-resolved.json`:
- Around line 7-9: The locales list in config.locales only contains "en_us"
while i18n_content includes "ja_jp" entries; make them consistent by either
adding "ja_jp" to the config.locales array or removing the "ja_jp" block from
i18n_content, ensuring config.locales and i18n_content contain the same locale
keys; update any corresponding keys used by the card/examples loader (e.g.,
config.locales and i18n_content) so they remain aligned.
In `@skills/lark-im/card-examples/approval-reminder.json`:
- Line 99: The <person> tag in the JSON string is left unclosed causing
malformed card content; locate the string value containing "<person
id=\"ou_bb1588f4b53177075497b1e3cbc28e99\" show_avatar=\"true\"
show_name=\"true\" style=\"capsule\">" (in the approval-reminder card content)
and close it by appending a matching "</person>" before the closing quote so the
JSON value becomes well-formed and the Feishu card can render.
In `@skills/lark-im/card-examples/beta-feature-recruitment.json`:
- Around line 106-128: The two interactive_container blocks (the button-styled
containers with inner markdown text "立即申请开通" and "查看接入指南") are missing a
behaviors property so they won't respond to clicks; add a behaviors array to
each interactive_container (e.g., a behavior that opens a URL or triggers a
callback) and include the necessary behavior type and parameters (callback or
url) to enable the intended action while preserving existing styling properties
like background_style and corner_radius.
In `@skills/lark-im/card-examples/data-report-dashboard.json`:
- Line 189: The sample table uses mixed identifier prefixes for the same persons
field (e.g., "on_df3900568967b0bdcdaf5abecf918db1" vs. the "ou_..." identifiers
found later); pick one consistent identifier style and replace all occurrences
so the three entries use the identical ID format (e.g., change
"on_df3900568967b0bdcdaf5abecf918db1" to the matching "ou_..." form or vice
versa) in the JSON so readers copying the payload see a single, consistent
identifier for the persons field.
In `@skills/lark-im/card-examples/equipment-service-feedback.json`:
- Around line 56-112: The "options" array in equipment-service-feedback.json has
non-monotonic rating "value" fields that don't match the textual labels; update
the values in the options objects so the scale is consistent (e.g., map "非常满意"
-> "5", "满意" -> "4", "一般" -> "3", "不满意" -> "2", "非常不满意" -> "1") by editing the
"value" properties for each option in the options array to match their
"text.content" labels.
In `@skills/lark-im/card-examples/event-announcement.json`:
- Line 103: The card example embeds tenant-specific user IDs in the person tag
(e.g., id="ou_5d65cb6d532b923098ce65fd7062a165" /
"ou_07ffb5b368e0fee8fc202e207d1cdf67" / "ou_6d4b38884e0e8a517e426de7942dc840");
replace these concrete ou_... values with clear placeholders like
ou_example_user_1, ou_example_user_2, ou_example_user_3 in the <person id="...">
tags inside the content string and add a short inline comment or note in the
card JSON indicating these must be replaced with real tenant IDs before use.
In `@skills/lark-im/card-examples/order-confirmation-approval.json`:
- Around line 388-401: The "立即确认" button and the guidance text "点击前往..." are
missing interactive handlers — add a behaviors object to each element (the
button and the guidance text node) so clicks are handled: for the confirm button
(text "立即确认") add behaviors.onClick to perform the desired action (e.g.,
submit/trigger an approval action or call a webhook/event name) and for the
guidance text (text "点击前往...") add behaviors.onClick.open_link with the billing
center URL; use the exact property name behaviors and attach onClick with the
appropriate action type (open_link with uri or submit/trigger with action name)
to make them clickable.
- Around line 231-235: The i18n translations for the payment-term JSON object
are wrong: the "content" key reads "14 天 (自服务开始时间起)" but the "i18n_content"
object currently contains invoice-sequence text; update the "i18n_content"
entries for this object (the "content" / "i18n_content" pair in the same JSON
block) so en_us and ja_jp reflect the payment-term meaning (e.g. en_us -> "14
days (from service start)" and ja_jp -> "サービス開始日から14日以内" or equivalent accurate
translations).
In `@skills/lark-im/card-examples/personal-birthday-greeting.json`:
- Line 55: The JSON example contains realistic personal identifiers in the
"content" fields (e.g., the string starting with " **周翊 同学生日快乐 (09-13 ♍️)**" and
the similar occurrence later) which must be anonymized; update those "content"
values in the card examples to use neutral placeholders (e.g., "**[Name]
同学生日快乐**" or "**生日快乐,朋友**") and remove or replace the exact date/astrological
sign with a generic token like "[MM-DD]" or omit it so no real personal data
remains; ensure you update both occurrences referenced in the diff so the
examples are non-identifiable while preserving formatting and intent.
In `@skills/lark-im/card-examples/product-newsletter.json`:
- Around line 176-183: The product title and description mismatch: the earlier
markdown content "🎵 **蓝牙音箱**" does not match the subsequent product description
about a modern Japanese ceramic piece; update the paired "content" fields so
they describe the same product—either change the title string "🎵 **蓝牙音箱**" to a
ceramic-appropriate title (e.g., reference 陶瓷/装饰) or rewrite the description to
describe a Bluetooth speaker; locate and modify the two adjacent JSON blocks
with "tag": "markdown" and their "content" keys to keep title and description
consistent.
In `@skills/lark-im/card-examples/project-assistant-form.json`:
- Around line 85-87: The form displays required markers but the select elements
lack enforcement; update each select element (the elements with "tag":
"select_person" and "tag": "select_static", e.g., the instances around the
current blocks) to include a required flag and validation metadata so the
payload cannot submit empty values — add "required": true (and if supported by
the card framework include "validation": {"required": true, "message": "<field>
is required"} or the equivalent) to those select_person/select_static element
objects and ensure their "name" keys remain present so backend/payload
validation can check non-empty values before submit.
- Around line 300-309: The cancel button (name "Button_vghtjecc609") lacks an
action configuration so clicks do nothing; update its JSON to include an action
such as adding "form_action_type": "reset" or "form_action_type": "close"
(matching how the "提交" button uses "form_action_type": "submit"), or
alternatively add a "behaviors" block that performs the desired action (e.g.,
close/hide the modal or reset the form); ensure the new key is added to the same
button object so the cancel button becomes functional.
In `@skills/lark-im/card-examples/streaming-service-desk.json`:
- Line 30: The content string contains a typo "创建卡片实体</link>体接口" in the card
example JSON; locate the content value containing that substring and remove the
extra "体" so it reads "创建卡片实体</link>接口" (update the string where the phrase
appears).
In `@skills/lark-im/card-examples/travel-hotel-recommendations.json`:
- Line 88: Remove the empty <text_tag> placeholders from the price row strings
(the "content" values that currently contain "<text_tag
color='yellow'></text_tag>"); locate the JSON objects in
travel-hotel-recommendations.json where "content" includes an empty <text_tag>
(e.g., the price rows showing "**<font color='red'>700</font>**/晚起 <text_tag
color='yellow'></text_tag> <text_tag color='yellow'>协议价</text_tag>") and delete
only the empty tag(s) so spacing and rendering remain correct while preserving
the non-empty "<text_tag color='yellow'>协议价</text_tag>" element.
---
Nitpick comments:
In `@skills/lark-im/card-examples/ai-chat-welcome.json`:
- Around line 21-52: Several color entries (color_dtgiw98jw3s, color_7u3svrs1gk,
color_aedgx4h5lst, color_5fjelryhkr7, color_cpi1ty18y07, color_9uxmooevtbs,
color_yshuzkazoo, color_bqm6462lklw) define identical light/dark RGBA values;
consolidate them by keeping one canonical key for each unique RGBA pair (e.g.,
keep color_dtgiw98jw3s and color_aedgx4h5lst for the two distinct pairs) and
remove the duplicate keys, and then update all usages/references in the project
to point to the retained canonical keys so behavior is unchanged.
In `@skills/lark-im/card-examples/ai-image-generation.json`:
- Around line 277-301: Button definitions using only an icon (e.g., the button
with element_id "a1" and the other icon-only buttons at the next two spots) have
empty text.content and rely on hover_tips, which breaks accessibility on
touch/keyboard devices; update each button's "text.content" from "" to a short
descriptive label (for example "Regenerate" for the refresh action) while
keeping the existing icon and behaviors so the visible label is available to all
users.
In `@skills/lark-im/card-examples/approval-reminder.json`:
- Around line 225-235: Remove the empty column object (the JSON node with "tag":
"column" and "elements": []) from the card definition and rely on existing
margin/spacing properties (e.g., "horizontal_spacing", "vertical_spacing",
"margin") on neighboring elements to preserve layout; delete that entire empty
column block and, if needed, adjust the surrounding container's
"horizontal_spacing"/"vertical_spacing" or the adjacent column's "margin" to
maintain the intended spacing.
In `@skills/lark-im/card-examples/daily-report-of-codebase.json`:
- Line 241: The JSON file
skills/lark-im/card-examples/daily-report-of-codebase.json is missing a trailing
newline; open that file and add a single newline character after the final
closing brace (ensure the file ends with "\n") so it conforms to POSIX
conventions and produces cleaner git diffs.
In `@skills/lark-im/card-examples/daily-work-summary.json`:
- Line 333: The example JSON's "content" value currently hardcodes the date
"09月11号" making the template stale; update the "content" field in this JSON
example to use a placeholder or variable (e.g., {{date}} or {{summary_date}}) or
a neutral title like "工作总结" instead, so the header is reusable and not tied to a
specific hardcoded day.
In `@skills/lark-im/card-examples/equipment-pickup-notification.json`:
- Line 157: The file ends with a closing brace '}' but lacks a trailing newline;
open skills/lark-im/card-examples/equipment-pickup-notification.json and ensure
there is a single newline character after the final '}' (i.e., add a trailing
newline at EOF) to satisfy POSIX/good-git-diff conventions.
In `@skills/lark-im/card-examples/equipment-service-feedback.json`:
- Line 227: The file ends with a closing brace '}' but lacks a trailing newline;
open the JSON file (look for the final '}' in equipment-service-feedback.json)
and add a single newline character at EOF so the file terminates with a trailing
newline for POSIX compliance and cleaner diffs.
In `@skills/lark-im/card-examples/smart-locker-launch.json`:
- Line 115: The file ends with a closing brace '}' but lacks a trailing newline;
update skills/lark-im/card-examples/smart-locker-launch.json by adding a single
newline character at EOF so the file ends with '\n' for POSIX compliance and
cleaner git diffs.
In `@skills/lark-im/card-examples/team-birthday-greeting.json`:
- Line 94: Add a trailing newline to the JSON file by ensuring the final closing
brace '}' in team-birthday-greeting.json is followed by a single '\n' character
so the file ends with a newline (POSIX-compliant and cleaner diffs).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 0c39a54b-af72-4a42-8b8b-39d714c0c954
📒 Files selected for processing (31)
skills/lark-im/SKILL.mdskills/lark-im/card-examples/ai-calendar-creation.jsonskills/lark-im/card-examples/ai-chat-welcome.jsonskills/lark-im/card-examples/ai-curated-recommendations.jsonskills/lark-im/card-examples/ai-image-generation.jsonskills/lark-im/card-examples/alert-initiation.jsonskills/lark-im/card-examples/alert-resolved.jsonskills/lark-im/card-examples/approval-approved.jsonskills/lark-im/card-examples/approval-reminder.jsonskills/lark-im/card-examples/article-with-images.jsonskills/lark-im/card-examples/beta-feature-recruitment.jsonskills/lark-im/card-examples/bot-tutorial-welcome.jsonskills/lark-im/card-examples/daily-report-of-codebase.jsonskills/lark-im/card-examples/daily-work-summary.jsonskills/lark-im/card-examples/data-report-dashboard.jsonskills/lark-im/card-examples/deal-won-announcement.jsonskills/lark-im/card-examples/equipment-pickup-notification.jsonskills/lark-im/card-examples/equipment-service-feedback.jsonskills/lark-im/card-examples/event-announcement.jsonskills/lark-im/card-examples/order-confirmation-approval.jsonskills/lark-im/card-examples/personal-birthday-greeting.jsonskills/lark-im/card-examples/product-newsletter.jsonskills/lark-im/card-examples/project-assistant-form.jsonskills/lark-im/card-examples/sales-leaderboard.jsonskills/lark-im/card-examples/smart-locker-launch.jsonskills/lark-im/card-examples/streaming-service-desk.jsonskills/lark-im/card-examples/team-birthday-greeting.jsonskills/lark-im/card-examples/travel-hotel-recommendations.jsonskills/lark-im/card-examples/workplace-social-share.jsonskills/lark-im/references/lark-im-messages-reply.mdskills/lark-im/references/lark-im-messages-send.md
| "direction": "horizontal", | ||
| "horizontal_spacing": "8px", | ||
| "vertical_spacing": "12px", | ||
| "horizontal_align": "left", | ||
| "vertical_align": "top", | ||
| "padding": "20px 20px 20px 20px", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Inspect body direction and top-level element tags across example cards.
python - <<'PY'
import json, pathlib
root = pathlib.Path("skills/lark-im/card-examples")
for p in sorted(root.glob("*.json")):
data = json.loads(p.read_text(encoding="utf-8"))
body = data.get("card", {}).get("body", {})
direction = body.get("direction")
tags = [e.get("tag") for e in body.get("elements", [])[:6]]
print(f"{p.name}: direction={direction}, first_tags={tags}")
PYRepository: larksuite/cli
Length of output: 3102
Change body.direction to vertical for proper stacked content layout.
This file is the only example using horizontal direction; all 27 other card examples use vertical. With direction set to horizontal, the title, date/time, person list, and action buttons render in a single row and break mobile readability. The content structure requires a vertical stack.
Fix
- "direction": "horizontal",
+ "direction": "vertical",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "direction": "horizontal", | |
| "horizontal_spacing": "8px", | |
| "vertical_spacing": "12px", | |
| "horizontal_align": "left", | |
| "vertical_align": "top", | |
| "padding": "20px 20px 20px 20px", | |
| "direction": "vertical", | |
| "horizontal_spacing": "8px", | |
| "vertical_spacing": "12px", | |
| "horizontal_align": "left", | |
| "vertical_align": "top", | |
| "padding": "20px 20px 20px 20px", |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/lark-im/card-examples/ai-calendar-creation.json` around lines 18 - 23,
The card example's container uses "direction": "horizontal", causing title,
datetime, attendees, and actions to layout in a single row; update the
body.direction value from "horizontal" to "vertical" (in the JSON key
"body.direction" of the ai-calendar-creation example) so the elements stack
correctly for mobile/readability while leaving other spacing/padding keys
unchanged.
| "tag": "interactive_container", | ||
| "width": "fill", | ||
| "height": "auto", | ||
| "corner_radius": "", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
jq -r '
.. | objects
| select(.tag?=="interactive_container")
| {corner_radius: (.corner_radius // null)}
' skills/lark-im/card-examples/ai-image-generation.jsonRepository: larksuite/cli
Length of output: 111
🏁 Script executed:
#!/bin/bash
# First, let's look at the file structure and line 47
echo "=== Checking line 47 context ==="
sed -n '40,55p' skills/lark-im/card-examples/ai-image-generation.json
echo ""
echo "=== Checking total lines ==="
wc -l skills/lark-im/card-examples/ai-image-generation.jsonRepository: larksuite/cli
Length of output: 848
🏁 Script executed:
#!/bin/bash
# Let's also check if there's any JSON schema or documentation about corner_radius
echo "=== Searching for schema or validation documentation ==="
find . -type f \( -name "*.md" -o -name "*.schema.json" -o -name "*schema*" \) | head -20
echo ""
echo "=== Searching for corner_radius in documentation ==="
rg -i "corner_radius" --type md -A 2 -B 2Repository: larksuite/cli
Length of output: 922
🏁 Script executed:
#!/bin/bash
# Check if there are other files with similar JSON structures
echo "=== Checking other card examples ==="
find skills/lark-im/card-examples -name "*.json" -type f | head -10Repository: larksuite/cli
Length of output: 630
🏁 Script executed:
#!/bin/bash
# Check the schema definition for corner_radius
echo "=== Searching for corner_radius in schema ==="
rg "corner_radius" cmd/schema/ -A 2 -B 2
echo ""
echo "=== Checking schema.go structure ==="
grep -n "interactive_container\|CornerRadius\|corner_radius" cmd/schema/schema.go | head -30Repository: larksuite/cli
Length of output: 140
🏁 Script executed:
#!/bin/bash
# Check all card examples for corner_radius patterns
echo "=== Checking corner_radius in all card examples ==="
for file in skills/lark-im/card-examples/*.json; do
echo "File: $(basename $file)"
jq -r '
.. | objects
| select(.tag?=="interactive_container")
| "\(.corner_radius // "missing")"
' "$file" 2>/dev/null | sort | uniq -c | head -5
echo ""
doneRepository: larksuite/cli
Length of output: 1130
🏁 Script executed:
#!/bin/bash
# Check for validation or linting scripts
echo "=== Checking for validation scripts ==="
find . -name "*format*" -o -name "*validate*" -o -name "*lint*" | grep -E "\.(sh|py|js|go)$" | head -20
echo ""
echo "=== Checking skill-format-check README ==="
cat scripts/skill-format-check/README.md | head -50Repository: larksuite/cli
Length of output: 1592
🏁 Script executed:
#!/bin/bash
# Compare the two interactive_container objects in ai-image-generation.json more carefully
echo "=== Full context of both interactive_container objects ==="
jq -r '
.. | objects
| select(.tag?=="interactive_container")
| {
corner_radius: .corner_radius,
width: .width,
height: .height,
elements: [.elements[]? | .tag // .content]
}
' skills/lark-im/card-examples/ai-image-generation.jsonRepository: larksuite/cli
Length of output: 356
Ensure corner_radius uses an explicit value instead of empty string for consistency.
On Line 47, corner_radius is set to "" while the other interactive_container in the same file uses "0px". All other card example files also use explicit values (e.g., 6px, 8px, 12px) or omit the field entirely. Standardize this to "0px".
Suggested fix
- "corner_radius": "",
+ "corner_radius": "0px",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "corner_radius": "", | |
| "corner_radius": "0px", |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/lark-im/card-examples/ai-image-generation.json` at line 47, The
corner_radius field inside the interactive_container object is set to an empty
string; change that value to an explicit "0px" to match the other
interactive_container usages (standardize corner_radius from "" to "0px" so it
is consistent with examples that use values like "6px" or "0px").
| "locales": [ | ||
| "en_us" | ||
| ], |
There was a problem hiding this comment.
Locale declaration and i18n entries are inconsistent.
Line 7 declares only en_us, but Line 196 includes ja_jp content. Add ja_jp to config.locales or remove ja_jp text to keep localization behavior deterministic.
Also applies to: 194-197
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/lark-im/card-examples/alert-initiation.json` around lines 7 - 9, The
locales array under the "locales" key only lists "en_us" while there are i18n
entries for "ja_jp" later in alert-initiation.json; either add "ja_jp" to the
config.locales array or remove the "ja_jp" i18n entries so the declared locales
match the actual translations (update the "locales" array to include "ja_jp" if
you want to keep the Japanese content, or delete the "ja_jp" blocks wherever
they appear).
| "locales": [ | ||
| "en_us" | ||
| ], |
There was a problem hiding this comment.
Locale declaration and i18n entries are inconsistent.
Line 7 declares only en_us, but Line 152 includes ja_jp text. Keep config.locales and i18n_content aligned.
Also applies to: 150-153
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/lark-im/card-examples/alert-resolved.json` around lines 7 - 9, The
locales list in config.locales only contains "en_us" while i18n_content includes
"ja_jp" entries; make them consistent by either adding "ja_jp" to the
config.locales array or removing the "ja_jp" block from i18n_content, ensuring
config.locales and i18n_content contain the same locale keys; update any
corresponding keys used by the card/examples loader (e.g., config.locales and
i18n_content) so they remain aligned.
| "content": "🎵 **蓝牙音箱**", | ||
| "text_align": "left", | ||
| "text_size": "normal" | ||
| }, | ||
| { | ||
| "tag": "markdown", | ||
| "content": "\n这款现代日式陶瓷以精美造型和艺术装饰风格脱颖而出。设计灵感源自传统与现代的交融,色彩明快、线条流畅,无论用作家居摆件还是实用器皿,都能为空间增添一份时尚雅致。", | ||
| "text_align": "left", |
There was a problem hiding this comment.
Product title and description are inconsistent.
Line 176 says “蓝牙音箱”, but Line 182 describes ceramic decor. This should be aligned to avoid confusing readers.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/lark-im/card-examples/product-newsletter.json` around lines 176 - 183,
The product title and description mismatch: the earlier markdown content "🎵
**蓝牙音箱**" does not match the subsequent product description about a modern
Japanese ceramic piece; update the paired "content" fields so they describe the
same product—either change the title string "🎵 **蓝牙音箱**" to a
ceramic-appropriate title (e.g., reference 陶瓷/装饰) or rewrite the description to
describe a Bluetooth speaker; locate and modify the two adjacent JSON blocks
with "tag": "markdown" and their "content" keys to keep title and description
consistent.
| "content": "**经办人**<font color='red'>*</font>", | ||
| "text_align": "left", | ||
| "text_size": "normal", |
There was a problem hiding this comment.
Required fields are marked in UI but not enforced in payload.
Line 85/135 show * as required markers, but Line 105 (select_person) and Line 155 (select_static) do not include validation flags, so submit can pass with empty required selections.
#!/bin/bash
jq -r '
.card.body.elements[] | select(.tag=="form") | .elements[]
| select(.tag=="column_set")
| .columns[].elements[]
| select(.tag=="select_person" or .tag=="select_static")
| {tag, name, required: (.required // false)}
' skills/lark-im/card-examples/project-assistant-form.jsonAlso applies to: 105-113, 135-137, 155-198
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/lark-im/card-examples/project-assistant-form.json` around lines 85 -
87, The form displays required markers but the select elements lack enforcement;
update each select element (the elements with "tag": "select_person" and "tag":
"select_static", e.g., the instances around the current blocks) to include a
required flag and validation metadata so the payload cannot submit empty values
— add "required": true (and if supported by the card framework include
"validation": {"required": true, "message": "<field> is required"} or the
equivalent) to those select_person/select_static element objects and ensure
their "name" keys remain present so backend/payload validation can check
non-empty values before submit.
| "tag": "button", | ||
| "text": { | ||
| "tag": "plain_text", | ||
| "content": "取消" | ||
| }, | ||
| "type": "default", | ||
| "width": "fill", | ||
| "size": "medium", | ||
| "name": "Button_vghtjecc609", | ||
| "margin": "0px 0px 0px 0px" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
jq -r '
.. | objects
| select(.tag?=="button" and .text.content?=="取消")
| {name, has_behaviors: has("behaviors"), form_action_type: (.form_action_type // null)}
' skills/lark-im/card-examples/project-assistant-form.jsonRepository: larksuite/cli
Length of output: 145
🏁 Script executed:
sed -n '290,320p' skills/lark-im/card-examples/project-assistant-form.json | cat -nRepository: larksuite/cli
Length of output: 1894
🏁 Script executed:
rg '"tag":\s*"button"' skills/lark-im/card-examples/project-assistant-form.json -A 15 -B 2Repository: larksuite/cli
Length of output: 2109
🏁 Script executed:
rg '"content":\s*"取消"' skills/lark-im/ -B 10 -A 10Repository: larksuite/cli
Length of output: 2407
🏁 Script executed:
rg 'form_action_type' skills/lark-im/ -oRepository: larksuite/cli
Length of output: 414
🏁 Script executed:
rg 'form_action_type.*:' skills/lark-im/ --no-headingRepository: larksuite/cli
Length of output: 699
🏁 Script executed:
rg '"tag":\s*"button"' skills/lark-im/card-examples/ -A 10 | grep -E '(content|form_action_type|behaviors)' | head -40Repository: larksuite/cli
Length of output: 4707
取消 button (Button_vghtjecc609) is non-functional due to missing action configuration.
The cancel button at lines 300–309 has neither form_action_type nor behaviors, preventing it from performing any action when clicked. Other buttons in the same file use form_action_type (e.g., the 提交 button uses "form_action_type": "submit") or behaviors. Add appropriate action configuration to make this button functional.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/lark-im/card-examples/project-assistant-form.json` around lines 300 -
309, The cancel button (name "Button_vghtjecc609") lacks an action configuration
so clicks do nothing; update its JSON to include an action such as adding
"form_action_type": "reset" or "form_action_type": "close" (matching how the
"提交" button uses "form_action_type": "submit"), or alternatively add a
"behaviors" block that performs the desired action (e.g., close/hide the modal
or reset the form); ensure the new key is added to the same button object so the
cancel button becomes functional.
| }, | ||
| { | ||
| "tag": "markdown", | ||
| "content": " **一、JSON结构中的相关字段配置**\n1. **streaming_mode字段**<number_tag>1</number_tag><number_tag>2</number_tag>\n<number_tag>4</number_tag><number_tag>5</number_tag>\n - 类型为Boolean,用于开启或关闭流式更新模式 \n - 若要开启卡片的流式更新模式,需将此值设为true \n2. **streaming_config字段**<number_tag>1</number_tag><number_tag>3</number_tag>\n<number_tag>4</number_tag>\n - 类型为Object,用于指定流式更新的频率、步长和更新策略等参数\n - **print_frequency_ms子字段**<number_tag>1</number_tag><number_tag>2</number_tag>\n - 用于设置流式更新频率,即两次流式更新上屏之间的间隔时长,默认为70ms \n - 支持分端配置,若要配置三端统一的流式参数,仅指定default的值即可;若要为三端指定不同的流式参数,则在填写default参数的基础上,可选增加android/ios/pc三端的参数 \n - default(三端通用统一频率)为必填项,单位为毫秒,数据校验规则为20 - 1000;android、ios、pc端频率为可选项,同样需满足20 - 1000的毫秒数据校验规则 \n - **print_step子字段**<number_tag>3</number_tag>\n<number_tag>4</number_tag>\n - 用于设置流式更新步长,即每次流式更新上屏打印的增量字符数,默认为1\n - 支持分端配置,若要配置三端统一的流式参数,仅指定default的值即可;若要为三端指定不同的流式参数,则在填写default参数的基础上,可选增加android/ios/pc三端的参数 \n - default(三端通用统一频率)为必填项,单位为毫秒,数据校验规则为20 - 1000;android、ios、pc端频率为可选项,同样需满足20 - 1000的毫秒数据校验规则 \n - **print_strategy子字段**<number_tag>1</number_tag><number_tag>5</number_tag>\n - 类型为enum,用于设置单个文本或富文本组件内文本的流式更新策略,可选值有fast(快速上屏,为7.20 - 7.22版本的默认策略)和delay(延迟上屏),默认为fast\n\n - fast策略下,调用 [流式更新文本](https://open.larkoffice.com/document/uAjLw4CM/ukTMukTMukTM/cardkit-v1/card-element/content) 接口后,若历史文本尚未流式上屏完毕,未上屏的部分将立即全部上屏,然后立即开始本次内容上屏;delay策略下,调用 [流式更新文本](https://open.larkoffice.com/document/uAjLw4CM/ukTMukTMukTM/cardkit-v1/card-element/content) 接口后,若历史文本尚未流式输出完毕,历史文本中未上屏部分将会继续按打字机效果输出直到全部输出完毕,再开始本次内容上屏。\n\n**二、前提条件**\n1. **创建应用并添加相关权限**<number_tag>1</number_tag>\n\n - 已在 飞书开发者后台创建了一个应用,并为应用添加了机器人能力、开通了以下权限:以应用的身份发消息(im:message:send_as_bot)、获取与发送单聊、群组消息(im:message)、创建与更新卡片(cardkit:card:write) \n\n2. **构建卡片JSON**<number_tag>1</number_tag><number_tag>2</number_tag>\n<number_tag>4</number_tag><number_tag>5</number_tag>\n - 已基于<link icon='file-link-bitable_outlined' url='https://open.larkoffice.com/document/uAjLw4CM/ukzMukzMukzM/feishu-cards/card-json-v2-structure' pc_url='' ios_url='' android_url=''>卡片 JSON 2.0 结构</link>构建了卡片JSON \n - 若要开启卡片的流式更新模式,需将此值设为true \n3. **设置流式更新参数并开启模式**<number_tag>1</number_tag>\n\n - 按需设置了流式更新的频率、步长和策略,并将全局属性streaming_mode设置为true,以开启卡片流式更新模式 \n\n**三、操作步骤** \n\n1. **调用 创建卡片实体**<number_tag>1</number_tag><number_tag>2</number_tag>\n<number_tag>4</number_tag><number_tag>6</number_tag>\n - 通过调用 <link icon='file-link-bitable_outlined' url='https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/cardkit-v1/card/create' pc_url='' ios_url='' android_url=''>创建卡片实体</link>体接口,开启卡片的流式更新模式。同时获取卡片实体的ID,用于发送卡片 。\n - Mac系统和Windows系统都有对应的Curl示例。调用成功将返回卡片实体ID,同时为该卡片开启流式更新模式 。流式更新模式将在距上次开启10分钟后自动关闭,也可随时调用<link icon='file-link-bitable_outlined' url='https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/cardkit-v1/card/settings' pc_url='' ios_url='' android_url=''>更新卡片配置</link>API将streaming_mode字段值设置为false,以终止卡片的流式更新模式 \n2. **发送卡片实体**\n - 参考 <link icon='file-link-bitable_outlined' url='https://open.feishu.cn/document/server-docs/im-v1/message/create' pc_url='' ios_url='' android_url=''>发送消息接口文档</link>,在请求体的content字段中传入卡片实体ID,以发送卡片实体 。\n - 注意事项:\n - 卡片实体仅支持发送一次 \n - 发送卡片实体的应用必须是该卡片实体的创建应用 \n - 发送卡片实体时,content字段中的结构有相应要求,文档中有请求体示例、Mac系统和Windows系统的Curl命令示例以及成功返回的响应示例 \n3. ** (可选)流式更新文本 **\n - 飞书卡片中的普通文本组件和富文本组件支持对文本进行持续、增量的更新,从而实现“打字机”式的文字输出效果,提升终端用户体验 \n - 卡片发送后,可调用 \n <link icon='file-link-bitable_outlined' url='https://open.larkoffice.com/document/uAjLw4CM/ukTMukTMukTM/cardkit-v1/card-element/content' pc_url='' ios_url='' android_url=''>流式更新文本</link>\n 接口,对卡片中的普通文本组件或富文本组件传入全量文本内容 。若旧文本为传入的新文本的前缀子串,新增文本将在旧文本末尾继续以打字机效果输出;若新旧文本前缀不同,全量文本将直接上屏输出,无打字机效果。同样有Mac系统和Windows系统的Curl命令示例 。", |
There was a problem hiding this comment.
Fix typo in instructional markdown content.
Line 30 includes 创建卡片实体</link>体接口 (extra “体”). Please correct the phrase to avoid confusing readers in this reference sample.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/lark-im/card-examples/streaming-service-desk.json` at line 30, The
content string contains a typo "创建卡片实体</link>体接口" in the card example JSON;
locate the content value containing that substring and remove the extra "体" so
it reads "创建卡片实体</link>接口" (update the string where the phrase appears).
| }, | ||
| { | ||
| "tag": "markdown", | ||
| "content": "**<font color='red'>700</font>**/晚起 <text_tag color='yellow'></text_tag> <text_tag color='yellow'>协议价</text_tag>", |
There was a problem hiding this comment.
Remove empty <text_tag> placeholders in price rows.
Line 88 and Line 196 include an empty text_tag, which adds noise and may render awkward spacing.
Suggested cleanup
- "content": "**<font color='red'>700</font>**/晚起 <text_tag color='yellow'></text_tag> <text_tag color='yellow'>协议价</text_tag>",
+ "content": "**<font color='red'>700</font>**/晚起 <text_tag color='yellow'>协议价</text_tag>",Also applies to: 196-196
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/lark-im/card-examples/travel-hotel-recommendations.json` at line 88,
Remove the empty <text_tag> placeholders from the price row strings (the
"content" values that currently contain "<text_tag color='yellow'></text_tag>");
locate the JSON objects in travel-hotel-recommendations.json where "content"
includes an empty <text_tag> (e.g., the price rows showing "**<font
color='red'>700</font>**/晚起 <text_tag color='yellow'></text_tag> <text_tag
color='yellow'>协议价</text_tag>") and delete only the empty tag(s) so spacing and
rendering remain correct while preserving the non-empty "<text_tag
color='yellow'>协议价</text_tag>" element.
4fdb0b7 to
9763c79
Compare
|
Tip: Greploop — Automatically fix all review issues by running Use the Greptile plugin for Claude Code to query reviews, search comments, and manage custom context directly from your terminal. |
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (2)
skills/lark-im/card-examples/equipment-service-feedback.json (1)
56-112:⚠️ Potential issue | 🟠 MajorMake rating
valuemappings monotonic with sentiment order.On Line 62, Line 73, Line 84, Line 95, and Line 106, the scale is
1,2,5,3,4, which is inconsistent with the displayed satisfaction order and can distort downstream score aggregation.📊 Proposed fix (consistent 5→1 satisfaction scale)
{ "text": { "tag": "plain_text", "content": "非常满意" }, - "value": "1", + "value": "5", "icon": { "tag": "standard_icon", "token": "sheet-iconsets-star-100_filled" } }, { "text": { "tag": "plain_text", "content": "满意" }, - "value": "2", + "value": "4", "icon": { "tag": "standard_icon", "token": "sheet-iconsets-star-100_filled" } }, { "text": { "tag": "plain_text", "content": "一般" }, - "value": "5", + "value": "3", "icon": { "tag": "standard_icon", "token": "sheet-iconsets-star-100_filled" } }, { "text": { "tag": "plain_text", "content": "不满意" }, - "value": "3", + "value": "2", "icon": { "tag": "standard_icon", "token": "sheet-iconsets-star-100_filled" } }, { "text": { "tag": "plain_text", "content": "非常不满意" }, - "value": "4", + "value": "1", "icon": { "tag": "standard_icon", "token": "sheet-iconsets-star-100_filled" } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/lark-im/card-examples/equipment-service-feedback.json` around lines 56 - 112, The rating "value" fields in the "options" array are out of order (currently 1,2,5,3,4) and must be made monotonic with the sentiment text; update the "value" strings for each option so they follow a consistent 5→1 satisfaction scale: set "非常满意" -> "5", "满意" -> "4", "一般" -> "3", "不满意" -> "2", and "非常不满意" -> "1" in the options array so downstream aggregation is correct.skills/lark-im/card-examples/alert-resolved.json (1)
7-9:⚠️ Potential issue | 🟡 MinorAlign
config.localesandi18n_contentlocale keys.Line 7-Line 9 declares only
en_us, but Line 150-Line 153 addsja_jpinheader.title.i18n_content. Keep them consistent (either removeja_jpor fully localize the card and addja_jptoconfig.locales).Proposed minimal fix
"i18n_content": { "en_us": "[Resolved] Alert: Process Error - Please Address Promptly", - "ja_jp": "注文確認待ち" }#!/bin/bash python - <<'PY' import json from pathlib import Path p = Path("skills/lark-im/card-examples/alert-resolved.json") data = json.loads(p.read_text(encoding="utf-8")) locales = set(data.get("card", {}).get("config", {}).get("locales", [])) def walk(node, path="$"): if isinstance(node, dict): i18n = node.get("i18n_content") if isinstance(i18n, dict): extra = sorted(set(i18n.keys()) - locales) if extra: print(f"{path}.i18n_content has locales not in config.locales: {extra}") for k, v in node.items(): walk(v, f"{path}.{k}") elif isinstance(node, list): for i, v in enumerate(node): walk(v, f"{path}[{i}]") walk(data) PYAlso applies to: 150-153
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/lark-im/card-examples/alert-resolved.json` around lines 7 - 9, config.locales only lists "en_us" while header.title.i18n_content contains "ja_jp", causing inconsistent locale keys; update either the card's i18n_content or the config.locales to match. Locate the JSON fields config.locales (under "card"."config") and header.title.i18n_content (and any other i18n_content objects found under "card") and either remove the "ja_jp" entries from i18n_content or add "ja_jp" to config.locales and ensure all i18n_content keys are fully localized for each locale you add. Make the change so every locale key present in any i18n_content exists in config.locales and rerun the provided validation snippet to confirm no extras remain.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@skills/lark-im/card-examples/data-report-dashboard.json`:
- Around line 188-204: The persons-type column uses placeholder names ("xxx")
which are invalid for Feishu persons; update each "name" array used under the
persons column (the objects containing "name", "duration", "diff") to contain
realistic Feishu user identifiers instead of "xxx" (for example replace "xxx"
with values like "ou_xxxxxxxxxxxxxxxx" or a valid
"user_id"/"open_id"/"union_id"/"lark_id") so the "data_type":"persons" entries
are valid for testing; ensure every occurrence of "name": ["xxx"] in that JSON
is replaced with a realistic Feishu ID string.
---
Duplicate comments:
In `@skills/lark-im/card-examples/alert-resolved.json`:
- Around line 7-9: config.locales only lists "en_us" while
header.title.i18n_content contains "ja_jp", causing inconsistent locale keys;
update either the card's i18n_content or the config.locales to match. Locate the
JSON fields config.locales (under "card"."config") and header.title.i18n_content
(and any other i18n_content objects found under "card") and either remove the
"ja_jp" entries from i18n_content or add "ja_jp" to config.locales and ensure
all i18n_content keys are fully localized for each locale you add. Make the
change so every locale key present in any i18n_content exists in config.locales
and rerun the provided validation snippet to confirm no extras remain.
In `@skills/lark-im/card-examples/equipment-service-feedback.json`:
- Around line 56-112: The rating "value" fields in the "options" array are out
of order (currently 1,2,5,3,4) and must be made monotonic with the sentiment
text; update the "value" strings for each option so they follow a consistent 5→1
satisfaction scale: set "非常满意" -> "5", "满意" -> "4", "一般" -> "3", "不满意" -> "2",
and "非常不满意" -> "1" in the options array so downstream aggregation is correct.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 89e0d4f2-98b6-4fea-9ec5-adb85d6b6bc9
📒 Files selected for processing (31)
skills/lark-im/SKILL.mdskills/lark-im/card-examples/ai-calendar-creation.jsonskills/lark-im/card-examples/ai-chat-welcome.jsonskills/lark-im/card-examples/ai-curated-recommendations.jsonskills/lark-im/card-examples/ai-image-generation.jsonskills/lark-im/card-examples/alert-initiation.jsonskills/lark-im/card-examples/alert-resolved.jsonskills/lark-im/card-examples/approval-approved.jsonskills/lark-im/card-examples/approval-reminder.jsonskills/lark-im/card-examples/article-with-images.jsonskills/lark-im/card-examples/beta-feature-recruitment.jsonskills/lark-im/card-examples/bot-tutorial-welcome.jsonskills/lark-im/card-examples/daily-report-of-codebase.jsonskills/lark-im/card-examples/daily-work-summary.jsonskills/lark-im/card-examples/data-report-dashboard.jsonskills/lark-im/card-examples/deal-won-announcement.jsonskills/lark-im/card-examples/equipment-pickup-notification.jsonskills/lark-im/card-examples/equipment-service-feedback.jsonskills/lark-im/card-examples/event-announcement.jsonskills/lark-im/card-examples/order-confirmation-approval.jsonskills/lark-im/card-examples/personal-birthday-greeting.jsonskills/lark-im/card-examples/product-newsletter.jsonskills/lark-im/card-examples/project-assistant-form.jsonskills/lark-im/card-examples/sales-leaderboard.jsonskills/lark-im/card-examples/smart-locker-launch.jsonskills/lark-im/card-examples/streaming-service-desk.jsonskills/lark-im/card-examples/team-birthday-greeting.jsonskills/lark-im/card-examples/travel-hotel-recommendations.jsonskills/lark-im/card-examples/workplace-social-share.jsonskills/lark-im/references/lark-im-messages-reply.mdskills/lark-im/references/lark-im-messages-send.md
✅ Files skipped from review due to trivial changes (25)
- skills/lark-im/SKILL.md
- skills/lark-im/references/lark-im-messages-reply.md
- skills/lark-im/references/lark-im-messages-send.md
- skills/lark-im/card-examples/team-birthday-greeting.json
- skills/lark-im/card-examples/product-newsletter.json
- skills/lark-im/card-examples/travel-hotel-recommendations.json
- skills/lark-im/card-examples/bot-tutorial-welcome.json
- skills/lark-im/card-examples/ai-calendar-creation.json
- skills/lark-im/card-examples/project-assistant-form.json
- skills/lark-im/card-examples/beta-feature-recruitment.json
- skills/lark-im/card-examples/equipment-pickup-notification.json
- skills/lark-im/card-examples/deal-won-announcement.json
- skills/lark-im/card-examples/sales-leaderboard.json
- skills/lark-im/card-examples/workplace-social-share.json
- skills/lark-im/card-examples/ai-image-generation.json
- skills/lark-im/card-examples/ai-curated-recommendations.json
- skills/lark-im/card-examples/approval-approved.json
- skills/lark-im/card-examples/daily-report-of-codebase.json
- skills/lark-im/card-examples/article-with-images.json
- skills/lark-im/card-examples/event-announcement.json
- skills/lark-im/card-examples/ai-chat-welcome.json
- skills/lark-im/card-examples/order-confirmation-approval.json
- skills/lark-im/card-examples/alert-initiation.json
- skills/lark-im/card-examples/personal-birthday-greeting.json
- skills/lark-im/card-examples/daily-work-summary.json
🚧 Files skipped from review as they are similar to previous changes (3)
- skills/lark-im/card-examples/smart-locker-launch.json
- skills/lark-im/card-examples/approval-reminder.json
- skills/lark-im/card-examples/streaming-service-desk.json
| "name": [ | ||
| "xxx" | ||
| ], | ||
| "duration": "小于1小时", | ||
| "diff": "↓12%" | ||
| }, | ||
| { | ||
| "name": [ | ||
| "xxx" | ||
| ], | ||
| "duration": "2 小时", | ||
| "diff": "↑5%" | ||
| }, | ||
| { | ||
| "name": [ | ||
| "xxx" | ||
| ], |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
For Feishu/Lark Interactive Card 2.0 table component, what exact value format is required for rows when the column data_type is "persons"?
💡 Result:
For a table column with "data_type": "persons", each row’s cell value must be a Feishu user ID string (single person) or an array of user ID strings (multiple persons). Supported ID types: user_id, open_id, union_id, lark_id. When an ID is invalid, the client shows “unknown user”. [1]
"rows": [
{
"assignee": "ou_xxx"
},
{
"assignee": ["ou_xxx", "ou_yyy"]
}
][1] (mdgrok.com)
Citations:
🏁 Script executed:
# First, let's find and read the specific file
find . -name "data-report-dashboard.json" -type fRepository: larksuite/cli
Length of output: 114
🏁 Script executed:
# Read the file to understand the full context around lines 188-204
cat -n ./skills/lark-im/card-examples/data-report-dashboard.json | head -220 | tail -50Repository: larksuite/cli
Length of output: 2486
🏁 Script executed:
# Let's see more of the file to find all columns definition
cat -n ./skills/lark-im/card-examples/data-report-dashboard.json | head -190 | tail -80Repository: larksuite/cli
Length of output: 3690
Use explicit Feishu user IDs in the persons column.
The "name" column at line 165 is configured with "data_type": "persons". The placeholder values "xxx" at lines 189, 196, and 203 are invalid—persons columns require Feishu user IDs (e.g., user_id, open_id, union_id, or lark_id). Replace with realistic placeholder IDs (e.g., ou_xxxxxxxxxxxxxxxx) to make the example functional for testing.
Suggested edit
{
"name": [
- "xxx"
+ "ou_xxxxxxxxxxxxxxxx"
],
"duration": "小于1小时",
"diff": "↓12%"
},
{
"name": [
- "xxx"
+ "ou_yyyyyyyyyyyyyyyy"
],
"duration": "2 小时",
"diff": "↑5%"
},
{
"name": [
- "xxx"
+ "ou_zzzzzzzzzzzzzzzz"
],
"duration": "3 小时",
"diff": "↓10%"
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "name": [ | |
| "xxx" | |
| ], | |
| "duration": "小于1小时", | |
| "diff": "↓12%" | |
| }, | |
| { | |
| "name": [ | |
| "xxx" | |
| ], | |
| "duration": "2 小时", | |
| "diff": "↑5%" | |
| }, | |
| { | |
| "name": [ | |
| "xxx" | |
| ], | |
| "name": [ | |
| "ou_xxxxxxxxxxxxxxxx" | |
| ], | |
| "duration": "小于1小时", | |
| "diff": "↓12%" | |
| }, | |
| { | |
| "name": [ | |
| "ou_yyyyyyyyyyyyyyyy" | |
| ], | |
| "duration": "2 小时", | |
| "diff": "↑5%" | |
| }, | |
| { | |
| "name": [ | |
| "ou_zzzzzzzzzzzzzzzz" | |
| ], | |
| "duration": "3 小时", | |
| "diff": "↓10%" | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/lark-im/card-examples/data-report-dashboard.json` around lines 188 -
204, The persons-type column uses placeholder names ("xxx") which are invalid
for Feishu persons; update each "name" array used under the persons column (the
objects containing "name", "duration", "diff") to contain realistic Feishu user
identifiers instead of "xxx" (for example replace "xxx" with values like
"ou_xxxxxxxxxxxxxxxx" or a valid "user_id"/"open_id"/"union_id"/"lark_id") so
the "data_type":"persons" entries are valid for testing; ensure every occurrence
of "name": ["xxx"] in that JSON is replaced with a realistic Feishu ID string.
# This is the 1st commit message: feat: support send/reply card 2.0 Change-Id: I5e5cdfb37946af52ef7a2a812460e50fa8b09e9c # This is the commit message larksuite#2:
9763c79 to
813c912
Compare
Change-Id: I5e5cdfb37946af52ef7a2a812460e50fa8b09e9c
Summary
im +messages-sendandim +messages-replyalready support interactive card payloads, but the IM skill currently lacks a concrete Card 2.0 example library and explicit guidance on how agents should study examples before composinga card.
This PR adds a curated
card-exampleslibrary underskills/lark-imand updates the send/reply references so Card 2.0 tasks follow a consistent reading path: read the structure docs, read only the necessary component docs, thenpick 1-2 relevant local examples instead of scanning the whole example set.
Changes
skills/lark-im/card-examples/*.json:skills/lark-im/references/lark-im-messages-send.md:Interactive Cardssection for Card 2.0 usage../card-examplesbefore composing the final card, and explicitly forbid reading the whole folderskills/lark-im/references/lark-im-messages-reply.md:skills/lark-im/SKILL.md:+messages-sendand+messages-replyas mandatory reads before interactive card operationsTest Plan
make unit-testgo1.15, which rejectsgo 1.23.0ingo.modjq empty skills/lark-im/card-examples/*.jsonim +messages-sendandim +messages-replyskills/lark-im/card-examplesand covers common daily IM card scenariosRelated Issues
Summary by CodeRabbit