@yandy0725/pi-lark 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -0
- package/README.zh.md +30 -0
- package/package.json +36 -0
- package/skills/lark-approval/SKILL.md +56 -0
- package/skills/lark-approval/references/lark-approval-initiate.md +196 -0
- package/skills/lark-approval/references/lark-approval-instance-form-control-parameters.md +606 -0
- package/skills/lark-approval/references/lark-approval-instance-value-sourcing.md +108 -0
- package/skills/lark-apps/SKILL.md +78 -0
- package/skills/lark-apps/references/lark-apps-access-scope-get.md +28 -0
- package/skills/lark-apps/references/lark-apps-access-scope-set.md +40 -0
- package/skills/lark-apps/references/lark-apps-cloud-dev.md +120 -0
- package/skills/lark-apps/references/lark-apps-create.md +40 -0
- package/skills/lark-apps/references/lark-apps-db-env-create.md +31 -0
- package/skills/lark-apps/references/lark-apps-db-execute.md +40 -0
- package/skills/lark-apps/references/lark-apps-db-table-get.md +29 -0
- package/skills/lark-apps/references/lark-apps-db-table-list.md +31 -0
- package/skills/lark-apps/references/lark-apps-env-pull.md +35 -0
- package/skills/lark-apps/references/lark-apps-git-credential.md +37 -0
- package/skills/lark-apps/references/lark-apps-html-publish.md +57 -0
- package/skills/lark-apps/references/lark-apps-init.md +37 -0
- package/skills/lark-apps/references/lark-apps-list.md +37 -0
- package/skills/lark-apps/references/lark-apps-local-dev.md +76 -0
- package/skills/lark-apps/references/lark-apps-release-create.md +30 -0
- package/skills/lark-apps/references/lark-apps-release-get.md +28 -0
- package/skills/lark-apps/references/lark-apps-release-list.md +31 -0
- package/skills/lark-apps/references/lark-apps-session-messages-list.md +53 -0
- package/skills/lark-apps/references/lark-apps-update.md +30 -0
- package/skills/lark-attendance/SKILL.md +57 -0
- package/skills/lark-base/SKILL.md +157 -0
- package/skills/lark-base/references/dashboard-block-data-config.md +350 -0
- package/skills/lark-base/references/formula-field-guide.md +737 -0
- package/skills/lark-base/references/lark-base-cell-value.md +153 -0
- package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +717 -0
- package/skills/lark-base/references/lark-base-dashboard.md +238 -0
- package/skills/lark-base/references/lark-base-data-analysis-sop.md +210 -0
- package/skills/lark-base/references/lark-base-data-query-guide.md +61 -0
- package/skills/lark-base/references/lark-base-data-query.md +452 -0
- package/skills/lark-base/references/lark-base-field-create.md +103 -0
- package/skills/lark-base/references/lark-base-field-json.md +489 -0
- package/skills/lark-base/references/lark-base-field-update.md +171 -0
- package/skills/lark-base/references/lark-base-form-detail.md +71 -0
- package/skills/lark-base/references/lark-base-form-questions-create.md +118 -0
- package/skills/lark-base/references/lark-base-form-questions-update.md +92 -0
- package/skills/lark-base/references/lark-base-form-submit.md +170 -0
- package/skills/lark-base/references/lark-base-record-batch-create.md +57 -0
- package/skills/lark-base/references/lark-base-record-batch-update.md +52 -0
- package/skills/lark-base/references/lark-base-record-history-list.md +43 -0
- package/skills/lark-base/references/lark-base-record-upsert.md +63 -0
- package/skills/lark-base/references/lark-base-role-guide.md +65 -0
- package/skills/lark-base/references/lark-base-view-set-filter.md +189 -0
- package/skills/lark-base/references/lark-base-workflow-guide.md +830 -0
- package/skills/lark-base/references/lark-base-workflow-schema.md +1071 -0
- package/skills/lark-base/references/lookup-field-guide.md +512 -0
- package/skills/lark-base/references/role-config.md +549 -0
- package/skills/lark-calendar/SKILL.md +137 -0
- package/skills/lark-calendar/references/lark-calendar-agenda.md +78 -0
- package/skills/lark-calendar/references/lark-calendar-create.md +106 -0
- package/skills/lark-calendar/references/lark-calendar-freebusy.md +124 -0
- package/skills/lark-calendar/references/lark-calendar-meeting.md +40 -0
- package/skills/lark-calendar/references/lark-calendar-room-find.md +113 -0
- package/skills/lark-calendar/references/lark-calendar-rsvp.md +42 -0
- package/skills/lark-calendar/references/lark-calendar-schedule-meeting.md +265 -0
- package/skills/lark-calendar/references/lark-calendar-search-event.md +29 -0
- package/skills/lark-calendar/references/lark-calendar-suggestion.md +125 -0
- package/skills/lark-calendar/references/lark-calendar-update.md +105 -0
- package/skills/lark-contact/SKILL.md +59 -0
- package/skills/lark-contact/references/lark-contact-get-user.md +19 -0
- package/skills/lark-contact/references/lark-contact-search-user.md +124 -0
- package/skills/lark-doc/SKILL.md +79 -0
- package/skills/lark-doc/references/lark-doc-create.md +79 -0
- package/skills/lark-doc/references/lark-doc-fetch.md +138 -0
- package/skills/lark-doc/references/lark-doc-md.md +76 -0
- package/skills/lark-doc/references/lark-doc-media-download.md +50 -0
- package/skills/lark-doc/references/lark-doc-media-insert.md +114 -0
- package/skills/lark-doc/references/lark-doc-media-preview.md +41 -0
- package/skills/lark-doc/references/lark-doc-resource-cover.md +70 -0
- package/skills/lark-doc/references/lark-doc-update.md +259 -0
- package/skills/lark-doc/references/lark-doc-whiteboard.md +154 -0
- package/skills/lark-doc/references/lark-doc-xml.md +181 -0
- package/skills/lark-doc/references/style/lark-doc-create-workflow.md +59 -0
- package/skills/lark-doc/references/style/lark-doc-style.md +86 -0
- package/skills/lark-doc/references/style/lark-doc-update-workflow.md +55 -0
- package/skills/lark-drive/SKILL.md +215 -0
- package/skills/lark-drive/references/lark-drive-add-comment.md +193 -0
- package/skills/lark-drive/references/lark-drive-apply-permission.md +77 -0
- package/skills/lark-drive/references/lark-drive-comment-location.md +193 -0
- package/skills/lark-drive/references/lark-drive-comments-guide.md +72 -0
- package/skills/lark-drive/references/lark-drive-cover.md +79 -0
- package/skills/lark-drive/references/lark-drive-create-folder.md +73 -0
- package/skills/lark-drive/references/lark-drive-create-shortcut.md +103 -0
- package/skills/lark-drive/references/lark-drive-delete.md +79 -0
- package/skills/lark-drive/references/lark-drive-download.md +31 -0
- package/skills/lark-drive/references/lark-drive-export-download.md +50 -0
- package/skills/lark-drive/references/lark-drive-export.md +145 -0
- package/skills/lark-drive/references/lark-drive-files-list.md +158 -0
- package/skills/lark-drive/references/lark-drive-import.md +170 -0
- package/skills/lark-drive/references/lark-drive-inspect.md +50 -0
- package/skills/lark-drive/references/lark-drive-member-add.md +66 -0
- package/skills/lark-drive/references/lark-drive-move.md +120 -0
- package/skills/lark-drive/references/lark-drive-permission-guide.md +41 -0
- package/skills/lark-drive/references/lark-drive-preview.md +87 -0
- package/skills/lark-drive/references/lark-drive-pull.md +137 -0
- package/skills/lark-drive/references/lark-drive-push.md +162 -0
- package/skills/lark-drive/references/lark-drive-reactions.md +113 -0
- package/skills/lark-drive/references/lark-drive-search.md +269 -0
- package/skills/lark-drive/references/lark-drive-secure-label.md +52 -0
- package/skills/lark-drive/references/lark-drive-status.md +137 -0
- package/skills/lark-drive/references/lark-drive-task-result.md +302 -0
- package/skills/lark-drive/references/lark-drive-upload.md +101 -0
- package/skills/lark-drive/references/lark-drive-version-delete.md +38 -0
- package/skills/lark-drive/references/lark-drive-version-get.md +71 -0
- package/skills/lark-drive/references/lark-drive-version-history.md +73 -0
- package/skills/lark-drive/references/lark-drive-version-revert.md +35 -0
- package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-analysis.md +249 -0
- package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-discovery.md +253 -0
- package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-execution.md +200 -0
- package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-planning.md +336 -0
- package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-rollback.md +308 -0
- package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize.md +226 -0
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance-commands.md +168 -0
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance-outputs.md +424 -0
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance.md +207 -0
- package/skills/lark-drive/references/lark-drive-workflow.md +130 -0
- package/skills/lark-event/SKILL.md +154 -0
- package/skills/lark-event/references/lark-event-im.md +87 -0
- package/skills/lark-event/references/lark-event-minutes.md +54 -0
- package/skills/lark-event/references/lark-event-task.md +78 -0
- package/skills/lark-event/references/lark-event-vc.md +94 -0
- package/skills/lark-event/references/lark-event-whiteboard.md +67 -0
- package/skills/lark-im/SKILL.md +247 -0
- package/skills/lark-im/references/lark-im-card-action-reply.md +175 -0
- package/skills/lark-im/references/lark-im-chat-create.md +162 -0
- package/skills/lark-im/references/lark-im-chat-identity.md +55 -0
- package/skills/lark-im/references/lark-im-chat-list.md +166 -0
- package/skills/lark-im/references/lark-im-chat-messages-list.md +157 -0
- package/skills/lark-im/references/lark-im-chat-search.md +142 -0
- package/skills/lark-im/references/lark-im-chat-update.md +84 -0
- package/skills/lark-im/references/lark-im-feed-group-list-item.md +68 -0
- package/skills/lark-im/references/lark-im-feed-group-list.md +65 -0
- package/skills/lark-im/references/lark-im-feed-group-query-item.md +44 -0
- package/skills/lark-im/references/lark-im-feed-groups.md +452 -0
- package/skills/lark-im/references/lark-im-feed-shortcut-create.md +97 -0
- package/skills/lark-im/references/lark-im-feed-shortcut-list.md +103 -0
- package/skills/lark-im/references/lark-im-feed-shortcut-remove.md +48 -0
- package/skills/lark-im/references/lark-im-flag-cancel.md +67 -0
- package/skills/lark-im/references/lark-im-flag-create.md +67 -0
- package/skills/lark-im/references/lark-im-flag-list.md +100 -0
- package/skills/lark-im/references/lark-im-message-enrichment.md +54 -0
- package/skills/lark-im/references/lark-im-messages-mget.md +99 -0
- package/skills/lark-im/references/lark-im-messages-reply.md +267 -0
- package/skills/lark-im/references/lark-im-messages-resources-download.md +94 -0
- package/skills/lark-im/references/lark-im-messages-search.md +234 -0
- package/skills/lark-im/references/lark-im-messages-send.md +267 -0
- package/skills/lark-im/references/lark-im-reactions.md +299 -0
- package/skills/lark-im/references/lark-im-threads-messages-list.md +115 -0
- package/skills/lark-mail/SKILL.md +287 -0
- package/skills/lark-mail/assets/templates/job-application--resume.html +33 -0
- package/skills/lark-mail/assets/templates/newsletter--weekly-brief.html +50 -0
- package/skills/lark-mail/assets/templates/research--market-report.html +256 -0
- package/skills/lark-mail/assets/templates/weekly--personal-report.html +43 -0
- package/skills/lark-mail/assets/templates/weekly--team-report.html +9 -0
- package/skills/lark-mail/references/lark-mail-calendar-invite.md +36 -0
- package/skills/lark-mail/references/lark-mail-decline-receipt.md +115 -0
- package/skills/lark-mail/references/lark-mail-draft-create.md +127 -0
- package/skills/lark-mail/references/lark-mail-draft-edit.md +404 -0
- package/skills/lark-mail/references/lark-mail-forward.md +239 -0
- package/skills/lark-mail/references/lark-mail-html.md +333 -0
- package/skills/lark-mail/references/lark-mail-lint-html.md +243 -0
- package/skills/lark-mail/references/lark-mail-message.md +233 -0
- package/skills/lark-mail/references/lark-mail-messages.md +108 -0
- package/skills/lark-mail/references/lark-mail-recall.md +66 -0
- package/skills/lark-mail/references/lark-mail-recipient-search.md +59 -0
- package/skills/lark-mail/references/lark-mail-reply-all.md +213 -0
- package/skills/lark-mail/references/lark-mail-reply.md +249 -0
- package/skills/lark-mail/references/lark-mail-rules.md +31 -0
- package/skills/lark-mail/references/lark-mail-send-as.md +44 -0
- package/skills/lark-mail/references/lark-mail-send-receipt.md +120 -0
- package/skills/lark-mail/references/lark-mail-send-status.md +46 -0
- package/skills/lark-mail/references/lark-mail-send.md +222 -0
- package/skills/lark-mail/references/lark-mail-share-to-chat.md +87 -0
- package/skills/lark-mail/references/lark-mail-signature.md +98 -0
- package/skills/lark-mail/references/lark-mail-template-create.md +129 -0
- package/skills/lark-mail/references/lark-mail-template-update.md +150 -0
- package/skills/lark-mail/references/lark-mail-template.md +54 -0
- package/skills/lark-mail/references/lark-mail-thread.md +111 -0
- package/skills/lark-mail/references/lark-mail-triage.md +131 -0
- package/skills/lark-mail/references/lark-mail-watch.md +94 -0
- package/skills/lark-markdown/SKILL.md +69 -0
- package/skills/lark-markdown/references/lark-markdown-create.md +94 -0
- package/skills/lark-markdown/references/lark-markdown-diff.md +156 -0
- package/skills/lark-markdown/references/lark-markdown-fetch.md +79 -0
- package/skills/lark-markdown/references/lark-markdown-overwrite.md +85 -0
- package/skills/lark-markdown/references/lark-markdown-patch.md +160 -0
- package/skills/lark-minutes/SKILL.md +192 -0
- package/skills/lark-minutes/references/lark-minutes-detail.md +62 -0
- package/skills/lark-minutes/references/lark-minutes-download.md +137 -0
- package/skills/lark-minutes/references/lark-minutes-search.md +204 -0
- package/skills/lark-minutes/references/lark-minutes-speaker-replace.md +107 -0
- package/skills/lark-minutes/references/lark-minutes-summary.md +122 -0
- package/skills/lark-minutes/references/lark-minutes-todo.md +138 -0
- package/skills/lark-minutes/references/lark-minutes-update.md +41 -0
- package/skills/lark-minutes/references/lark-minutes-upload.md +104 -0
- package/skills/lark-note/SKILL.md +94 -0
- package/skills/lark-note/references/lark-note-detail.md +26 -0
- package/skills/lark-note/references/lark-note-transcript.md +23 -0
- package/skills/lark-okr/SKILL.md +115 -0
- package/skills/lark-okr/references/lark-okr-batch-create.md +106 -0
- package/skills/lark-okr/references/lark-okr-contentblock.md +359 -0
- package/skills/lark-okr/references/lark-okr-cycle-detail.md +84 -0
- package/skills/lark-okr/references/lark-okr-cycle-list.md +90 -0
- package/skills/lark-okr/references/lark-okr-entities.md +329 -0
- package/skills/lark-okr/references/lark-okr-image-upload.md +116 -0
- package/skills/lark-okr/references/lark-okr-indicator-update.md +80 -0
- package/skills/lark-okr/references/lark-okr-progress-create.md +81 -0
- package/skills/lark-okr/references/lark-okr-progress-delete.md +47 -0
- package/skills/lark-okr/references/lark-okr-progress-get.md +62 -0
- package/skills/lark-okr/references/lark-okr-progress-list.md +80 -0
- package/skills/lark-okr/references/lark-okr-progress-update.md +81 -0
- package/skills/lark-okr/references/lark-okr-reorder.md +81 -0
- package/skills/lark-okr/references/lark-okr-weight.md +96 -0
- package/skills/lark-openapi-explorer/SKILL.md +153 -0
- package/skills/lark-shared/SKILL.md +168 -0
- package/skills/lark-shared/references/lark-wiki-token-routing.md +42 -0
- package/skills/lark-sheets/SKILL.md +165 -0
- package/skills/lark-sheets/references/lark-sheets-batch-update.md +191 -0
- package/skills/lark-sheets/references/lark-sheets-chart.md +330 -0
- package/skills/lark-sheets/references/lark-sheets-conditional-format.md +179 -0
- package/skills/lark-sheets/references/lark-sheets-core-operations.md +103 -0
- package/skills/lark-sheets/references/lark-sheets-filter-view.md +137 -0
- package/skills/lark-sheets/references/lark-sheets-filter.md +130 -0
- package/skills/lark-sheets/references/lark-sheets-float-image.md +159 -0
- package/skills/lark-sheets/references/lark-sheets-formula-translation.md +267 -0
- package/skills/lark-sheets/references/lark-sheets-pivot-table.md +166 -0
- package/skills/lark-sheets/references/lark-sheets-range-operations.md +267 -0
- package/skills/lark-sheets/references/lark-sheets-read-data.md +235 -0
- package/skills/lark-sheets/references/lark-sheets-search-replace.md +111 -0
- package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +212 -0
- package/skills/lark-sheets/references/lark-sheets-sparkline.md +149 -0
- package/skills/lark-sheets/references/lark-sheets-visual-standards.md +205 -0
- package/skills/lark-sheets/references/lark-sheets-workbook.md +395 -0
- package/skills/lark-sheets/references/lark-sheets-write-cells.md +565 -0
- package/skills/lark-sheets/scripts/sheets_df.py +32 -0
- package/skills/lark-skill-maker/SKILL.md +85 -0
- package/skills/lark-slides/SKILL.md +293 -0
- package/skills/lark-slides/assets/templates/administration--all_hands_meeting.xml +1999 -0
- package/skills/lark-slides/assets/templates/administration--annual_gala.xml +1160 -0
- package/skills/lark-slides/assets/templates/administration--company_intro.xml +1376 -0
- package/skills/lark-slides/assets/templates/administration--corporate_culture.xml +1765 -0
- package/skills/lark-slides/assets/templates/hr--employee_training.xml +912 -0
- package/skills/lark-slides/assets/templates/hr--employee_training_workshop.xml +1504 -0
- package/skills/lark-slides/assets/templates/hr--onboarding.xml +933 -0
- package/skills/lark-slides/assets/templates/marketing--brand_communication.xml +1367 -0
- package/skills/lark-slides/assets/templates/marketing--brand_logo_design.xml +1347 -0
- package/skills/lark-slides/assets/templates/marketing--brand_operations_plan.xml +1309 -0
- package/skills/lark-slides/assets/templates/marketing--business_plan.xml +1646 -0
- package/skills/lark-slides/assets/templates/marketing--marketing_plan.xml +1469 -0
- package/skills/lark-slides/assets/templates/marketing--marketing_strategy.xml +1484 -0
- package/skills/lark-slides/assets/templates/marketing--product_whitepaper.xml +1455 -0
- package/skills/lark-slides/assets/templates/marketing--roadshow_business_plan.xml +1506 -0
- package/skills/lark-slides/assets/templates/misc--book_sharing.xml +1338 -0
- package/skills/lark-slides/assets/templates/misc--club_event_plan.xml +4885 -0
- package/skills/lark-slides/assets/templates/misc--student_career_plan.xml +1854 -0
- package/skills/lark-slides/assets/templates/office--dark_general.xml +3763 -0
- package/skills/lark-slides/assets/templates/office--dept_annual_report.xml +1192 -0
- package/skills/lark-slides/assets/templates/office--light_general.xml +3378 -0
- package/skills/lark-slides/assets/templates/office--project_kickoff.xml +3152 -0
- package/skills/lark-slides/assets/templates/office--quarterly_review.xml +1253 -0
- package/skills/lark-slides/assets/templates/office--work_report.xml +1099 -0
- package/skills/lark-slides/assets/templates/office--work_summary.xml +4420 -0
- package/skills/lark-slides/assets/templates/office--work_summary_report.xml +1523 -0
- package/skills/lark-slides/assets/templates/operations--brand_logo_design.xml +1347 -0
- package/skills/lark-slides/assets/templates/operations--brand_operations_plan.xml +1309 -0
- package/skills/lark-slides/assets/templates/operations--marketing_plan.xml +1469 -0
- package/skills/lark-slides/assets/templates/operations--product_promotion.xml +687 -0
- package/skills/lark-slides/assets/templates/personal--experience_sharing.xml +2242 -0
- package/skills/lark-slides/assets/templates/personal--personal_resume.xml +2047 -0
- package/skills/lark-slides/assets/templates/personal--promotion_defense.xml +1099 -0
- package/skills/lark-slides/assets/templates/personal--promotion_report.xml +1039 -0
- package/skills/lark-slides/assets/templates/personal--self_intro.xml +696 -0
- package/skills/lark-slides/assets/templates/personal--teaching_sharing.xml +3013 -0
- package/skills/lark-slides/assets/templates/product--business_case_analysis.xml +1341 -0
- package/skills/lark-slides/assets/templates/product--market_analysis.xml +898 -0
- package/skills/lark-slides/assets/templates/product--product_analysis.xml +1537 -0
- package/skills/lark-slides/assets/templates/product--product_intro.xml +2838 -0
- package/skills/lark-slides/assets/templates/product--product_promotion.xml +687 -0
- package/skills/lark-slides/assets/templates/product--product_promotion_2.xml +687 -0
- package/skills/lark-slides/references/asset-planning.md +124 -0
- package/skills/lark-slides/references/examples.md +261 -0
- package/skills/lark-slides/references/iconpark-index.json +41901 -0
- package/skills/lark-slides/references/iconpark.md +46 -0
- package/skills/lark-slides/references/lark-slides-create.md +137 -0
- package/skills/lark-slides/references/lark-slides-edit-workflows.md +144 -0
- package/skills/lark-slides/references/lark-slides-media-upload.md +128 -0
- package/skills/lark-slides/references/lark-slides-replace-pages.md +95 -0
- package/skills/lark-slides/references/lark-slides-replace-slide.md +240 -0
- package/skills/lark-slides/references/lark-slides-screenshot.md +94 -0
- package/skills/lark-slides/references/lark-slides-whiteboard.md +330 -0
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +220 -0
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +123 -0
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +110 -0
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +187 -0
- package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +98 -0
- package/skills/lark-slides/references/planning-layer.md +219 -0
- package/skills/lark-slides/references/slide-templates.md +201 -0
- package/skills/lark-slides/references/slides_demo.xml +226 -0
- package/skills/lark-slides/references/slides_xml_schema_definition.xml +3049 -0
- package/skills/lark-slides/references/template-catalog.md +463 -0
- package/skills/lark-slides/references/template-index.json +1853 -0
- package/skills/lark-slides/references/troubleshooting.md +63 -0
- package/skills/lark-slides/references/validation-checklist.md +110 -0
- package/skills/lark-slides/references/visual-planning.md +254 -0
- package/skills/lark-slides/references/xml-format-guide.md +369 -0
- package/skills/lark-slides/references/xml-schema-quick-ref.md +245 -0
- package/skills/lark-slides/scripts/iconpark_tool.py +362 -0
- package/skills/lark-slides/scripts/iconpark_tool_test.py +177 -0
- package/skills/lark-slides/scripts/template_tool.py +970 -0
- package/skills/lark-slides/scripts/template_tool_test.py +177 -0
- package/skills/lark-slides/scripts/xml_text_overlap_lint.py +367 -0
- package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +263 -0
- package/skills/lark-task/SKILL.md +167 -0
- package/skills/lark-task/references/lark-task-assign.md +38 -0
- package/skills/lark-task/references/lark-task-comment.md +28 -0
- package/skills/lark-task/references/lark-task-complete.md +27 -0
- package/skills/lark-task/references/lark-task-create.md +57 -0
- package/skills/lark-task/references/lark-task-followers.md +35 -0
- package/skills/lark-task/references/lark-task-get-my-tasks.md +61 -0
- package/skills/lark-task/references/lark-task-get-related-tasks.md +53 -0
- package/skills/lark-task/references/lark-task-reminder.md +36 -0
- package/skills/lark-task/references/lark-task-reopen.md +27 -0
- package/skills/lark-task/references/lark-task-search.md +41 -0
- package/skills/lark-task/references/lark-task-set-ancestor.md +32 -0
- package/skills/lark-task/references/lark-task-tasklist-create.md +35 -0
- package/skills/lark-task/references/lark-task-tasklist-members.md +36 -0
- package/skills/lark-task/references/lark-task-tasklist-search.md +38 -0
- package/skills/lark-task/references/lark-task-tasklist-task-add.md +38 -0
- package/skills/lark-task/references/lark-task-update.md +37 -0
- package/skills/lark-task/references/lark-task-upload-attachment.md +59 -0
- package/skills/lark-vc/SKILL.md +202 -0
- package/skills/lark-vc/references/lark-vc-detail.md +44 -0
- package/skills/lark-vc/references/lark-vc-recording.md +154 -0
- package/skills/lark-vc/references/lark-vc-search.md +163 -0
- package/skills/lark-vc/references/vc-domain-boundaries.md +188 -0
- package/skills/lark-vc-agent/SKILL.md +169 -0
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md +287 -0
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-join.md +141 -0
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +105 -0
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-list-active.md +91 -0
- package/skills/lark-whiteboard/SKILL.md +47 -0
- package/skills/lark-whiteboard/elements/connectors.md +102 -0
- package/skills/lark-whiteboard/elements/content.md +40 -0
- package/skills/lark-whiteboard/elements/image.md +80 -0
- package/skills/lark-whiteboard/elements/layout.md +374 -0
- package/skills/lark-whiteboard/elements/schema.md +357 -0
- package/skills/lark-whiteboard/elements/style.md +318 -0
- package/skills/lark-whiteboard/elements/typography.md +73 -0
- package/skills/lark-whiteboard/references/lark-whiteboard-query.md +60 -0
- package/skills/lark-whiteboard/references/lark-whiteboard-update.md +122 -0
- package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +94 -0
- package/skills/lark-whiteboard/routes/dsl.md +107 -0
- package/skills/lark-whiteboard/routes/mermaid.md +27 -0
- package/skills/lark-whiteboard/routes/svg-edit.md +85 -0
- package/skills/lark-whiteboard/routes/svg.md +54 -0
- package/skills/lark-whiteboard/scenes/architecture.md +433 -0
- package/skills/lark-whiteboard/scenes/bar-chart.md +187 -0
- package/skills/lark-whiteboard/scenes/comparison.md +135 -0
- package/skills/lark-whiteboard/scenes/fishbone.md +238 -0
- package/skills/lark-whiteboard/scenes/flowchart.md +185 -0
- package/skills/lark-whiteboard/scenes/flywheel.md +195 -0
- package/skills/lark-whiteboard/scenes/funnel.md +101 -0
- package/skills/lark-whiteboard/scenes/line-chart.md +214 -0
- package/skills/lark-whiteboard/scenes/mermaid.md +130 -0
- package/skills/lark-whiteboard/scenes/milestone.md +139 -0
- package/skills/lark-whiteboard/scenes/organization.md +173 -0
- package/skills/lark-whiteboard/scenes/photo-showcase.md +126 -0
- package/skills/lark-whiteboard/scenes/pyramid.md +99 -0
- package/skills/lark-whiteboard/scenes/swimlane.md +371 -0
- package/skills/lark-whiteboard/scenes/treemap.md +216 -0
- package/skills/lark-wiki/SKILL.md +110 -0
- package/skills/lark-wiki/references/lark-wiki-delete-space.md +205 -0
- package/skills/lark-wiki/references/lark-wiki-member-add.md +67 -0
- package/skills/lark-wiki/references/lark-wiki-member-list.md +76 -0
- package/skills/lark-wiki/references/lark-wiki-member-remove.md +61 -0
- package/skills/lark-wiki/references/lark-wiki-move.md +183 -0
- package/skills/lark-wiki/references/lark-wiki-node-copy.md +72 -0
- package/skills/lark-wiki/references/lark-wiki-node-create.md +127 -0
- package/skills/lark-wiki/references/lark-wiki-node-delete.md +62 -0
- package/skills/lark-wiki/references/lark-wiki-node-get.md +57 -0
- package/skills/lark-wiki/references/lark-wiki-node-list.md +88 -0
- package/skills/lark-wiki/references/lark-wiki-space-create.md +46 -0
- package/skills/lark-wiki/references/lark-wiki-space-list.md +68 -0
- package/skills/lark-workflow-meeting-summary/SKILL.md +122 -0
- package/skills/lark-workflow-standup-report/SKILL.md +122 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# card.action.trigger
|
|
2
|
+
|
|
3
|
+
> **Prerequisite:** Read [`../../lark-event/SKILL.md`](../../lark-event/SKILL.md) first for `event consume` essentials.
|
|
4
|
+
|
|
5
|
+
Fires when a user interacts with an interactive card — button click, form submit, dropdown select,
|
|
6
|
+
checkbox toggle, date/time pick, etc.
|
|
7
|
+
|
|
8
|
+
## Setup (required)
|
|
9
|
+
|
|
10
|
+
> **Console configuration required**: In the Feishu Developer Console, go to
|
|
11
|
+
> **App → Events & Callbacks → Callback Configuration** (应用--事件与回调--回调配置) and enable it.
|
|
12
|
+
> The consumer starts without errors even when not configured, but **no events will be received**.
|
|
13
|
+
> There is no preflight check for this setting.
|
|
14
|
+
|
|
15
|
+
After enabling, events are delivered over the existing WebSocket long connection — no additional
|
|
16
|
+
URL configuration needed.
|
|
17
|
+
|
|
18
|
+
## Scopes & auth
|
|
19
|
+
|
|
20
|
+
| Scope | Required for |
|
|
21
|
+
|---|---|
|
|
22
|
+
| `im:message:readonly` | Auto-fetch `card_content` via message get API (covers both p2p and group messages) |
|
|
23
|
+
|
|
24
|
+
Auth: `bot` only.
|
|
25
|
+
|
|
26
|
+
## Output fields
|
|
27
|
+
|
|
28
|
+
| Field | Type | Description |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| `type` | string | Always `card.action.trigger` |
|
|
31
|
+
| `event_id` | string | Unique event ID; safe for deduplication |
|
|
32
|
+
| `timestamp` | string (timestamp_ms) | Event delivery time (ms since epoch) |
|
|
33
|
+
| `operator_id` | string (open_id) | Open ID of the user who interacted |
|
|
34
|
+
| `message_id` | string (message_id) | Message ID of the card (`om_xxx`) |
|
|
35
|
+
| `chat_id` | string (chat_id) | Chat ID (`oc_xxx`) |
|
|
36
|
+
| `host` | string | `im_message` (chat card) or `im_top_notice` (top banner) |
|
|
37
|
+
| `token` | string | Delayed-update token; valid 30 min, max 2 uses |
|
|
38
|
+
| `action_tag` | string | Component type that was triggered (see decision table) |
|
|
39
|
+
| `action_value` | string | Developer-defined value on the component; serialized to JSON string |
|
|
40
|
+
| `action_name` | string | `name` attribute of the component |
|
|
41
|
+
| `timezone` | string | User timezone, e.g. `Asia/Shanghai`; only populated for date/time picker interactions |
|
|
42
|
+
| `form_value` | string (JSON) | All form field values as JSON string, keyed by component `name`; only present when a button inside a form container is clicked |
|
|
43
|
+
| `input_value` | string | Input text; only for standalone `input` components (not inside a form) |
|
|
44
|
+
| `option` | string | Selected value for standalone single-select: `select_static`, `select_person`, `overflow`, `date_picker`, `picker_time`, `picker_datetime` |
|
|
45
|
+
| `options` | string | Comma-separated selected values for standalone multi-select: `multi_select_static`, `multi_select_person` |
|
|
46
|
+
| `checked` | bool | Checkbox state for standalone `checker` elements |
|
|
47
|
+
| `card_content` | string | Original card content (userDSL text format) from when the card was sent; auto-fetched via message get API at consume time; empty if `message_id` absent or fetch fails — skip if empty |
|
|
48
|
+
|
|
49
|
+
## `card_content` — what it is and how to use it
|
|
50
|
+
|
|
51
|
+
`card_content` is the `user_dsl` field extracted from the card message content, auto-fetched
|
|
52
|
+
at event consume time. It represents the card's original definition — use it as the starting
|
|
53
|
+
point to understand the current card structure and construct the updated card JSON.
|
|
54
|
+
|
|
55
|
+
No extra API call is needed — the consumer fetches it automatically. If empty, skip — no fallback required.
|
|
56
|
+
|
|
57
|
+
## action_tag decision table
|
|
58
|
+
|
|
59
|
+
> **Form container rule**: when a component is inside a `form` container, its value appears in
|
|
60
|
+
> `form_value[name]` instead of the standalone fields (`option`, `options`, `input_value`,
|
|
61
|
+
> `checked`). There is no `form_submit` tag — form submission comes through as `button` with
|
|
62
|
+
> `form_value` populated.
|
|
63
|
+
|
|
64
|
+
| `action_tag` | Read field(s) | Notes |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| `button` | `action_value` (fromjson if object); `form_value` if inside a form | Most common; `form_value` non-empty = form submit |
|
|
67
|
+
| `overflow` | `option` | Collapsible button group selection |
|
|
68
|
+
| `select_static` | `option` (standalone) or `form_value[name]` (in form) | Single-select dropdown |
|
|
69
|
+
| `multi_select_static` | `options` (standalone) or `form_value[name]` (in form) | Multi-select dropdown |
|
|
70
|
+
| `select_person` | `option` — open_id of selected user | Single-select person |
|
|
71
|
+
| `multi_select_person` | `options` — comma-separated open_ids | Multi-select person |
|
|
72
|
+
| `input` | `input_value` (standalone) or `form_value[name]` (in form) | Text input |
|
|
73
|
+
| `checker` | `checked` (standalone) or `form_value[name]` (in form) | Checkbox |
|
|
74
|
+
| `date_picker` | `option` (date string) + `timezone` | e.g. `"2024-04-01 +0800"` |
|
|
75
|
+
| `picker_time` | `option` (time string) + `timezone` | e.g. `"08:30 +0800"` |
|
|
76
|
+
| `picker_datetime` | `option` (datetime string) + `timezone` | e.g. `"2024-04-29 07:07 +0800"` |
|
|
77
|
+
| `select_img` | `option` (single) or `options` (multi) | Image picker |
|
|
78
|
+
|
|
79
|
+
## Key constraints
|
|
80
|
+
|
|
81
|
+
1. Token **valid 30 minutes**, **max 2 uses** — if update fails after exhaustion, inform the user
|
|
82
|
+
2. Delayed-update API requires **complete new card JSON** — partial updates are not supported
|
|
83
|
+
3. SDK auto-responds `{"code":200}` within 3 s — your update call can be sent any time within 30 min
|
|
84
|
+
4. `card_content` is auto-populated — no extra API call needed; if empty, skip it
|
|
85
|
+
|
|
86
|
+
## After starting the listener
|
|
87
|
+
|
|
88
|
+
Once the listener is running, check whether your agent runtime supports background event
|
|
89
|
+
monitoring (i.e. can receive and process stdout lines from a running subprocess while
|
|
90
|
+
continuing to respond to the user). If it does, prompt the user:
|
|
91
|
+
|
|
92
|
+
> "Card callback listener is now active. Do you want me to automatically handle card
|
|
93
|
+
> interactions and update the card based on user actions?"
|
|
94
|
+
|
|
95
|
+
Only enter the auto-update workflow below if the user confirms. If your runtime does not
|
|
96
|
+
support background monitoring, inform the user that automatic card updates are not available
|
|
97
|
+
and they will need to handle interactions manually.
|
|
98
|
+
|
|
99
|
+
## Agent workflow
|
|
100
|
+
|
|
101
|
+
When a `card.action.trigger` event arrives (**each stdout JSON line is one event — process it immediately**):
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
1. Read action fields to understand what the user did:
|
|
105
|
+
- action_tag: which component was triggered
|
|
106
|
+
- action_value / option / options / checked / input_value / form_value: what value was set
|
|
107
|
+
|
|
108
|
+
2. Decide: does this interaction require a card update?
|
|
109
|
+
- e.g. button click with a business action → yes
|
|
110
|
+
- e.g. navigation / pagination → no (just record, no update needed)
|
|
111
|
+
- Not every callback requires a card update — decide based on business semantics
|
|
112
|
+
- Before updating, explicitly state what visual change the action requires. If you cannot articulate one, skip the update.
|
|
113
|
+
|
|
114
|
+
3. If update is needed:
|
|
115
|
+
a. If card_content is empty: inform the user that the original card could not be fetched,
|
|
116
|
+
so it is not possible to determine whether an update is needed — do not guess
|
|
117
|
+
b. Determine the new card state based on the action
|
|
118
|
+
c. Use card_content as the structural basis to construct the updated card JSON
|
|
119
|
+
d. Detect card version: if card_content contains `"schema":"2.0"` or `"schema": "2.0"` it is Card 2.0; otherwise assume Card 1.0
|
|
120
|
+
e. For Card 1.0: include `"open_ids": ["<operator_id>"]` inside the `card` object, or the API returns code 300090
|
|
121
|
+
f. Call the delayed update API with the token and new card JSON
|
|
122
|
+
|
|
123
|
+
4. If no update: end (the SDK has already acknowledged the callback)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Updating the card
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
lark-cli api POST /open-apis/interactive/v1/card/update --as bot \
|
|
130
|
+
--data '{"token":"<token>","card":<new_card_json>}'
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
`--data` parameters:
|
|
134
|
+
|
|
135
|
+
| Field | Required | Description |
|
|
136
|
+
|---|---|---|
|
|
137
|
+
| `token` | Yes | Delayed-update token from the event |
|
|
138
|
+
| `card` | Yes | Complete new card JSON — construct based on `card_content` from the event, modified to reflect the new state |
|
|
139
|
+
| `card.open_ids` | No | **Card 1.0 only.** Array of `open_id`s defining which users see the updated card. Must contain at least one open_id (e.g. the operator's); passing `[]` or omitting the key both cause "openid empty" (code 300090). |
|
|
140
|
+
|
|
141
|
+
## Examples
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
# Stream all card interactions
|
|
145
|
+
lark-cli event consume card.action.trigger --as bot
|
|
146
|
+
|
|
147
|
+
# Grab one callback to inspect shape (debugging only — do not use in production workflows)
|
|
148
|
+
lark-cli event consume card.action.trigger --as bot --max-events 1 --timeout 60s
|
|
149
|
+
|
|
150
|
+
# Button clicks only (not form submit), with action value
|
|
151
|
+
lark-cli event consume card.action.trigger --as bot \
|
|
152
|
+
--jq 'select(.action_tag == "button" and .form_value == "") | {op: .operator_id, val: (.action_value | fromjson?), token: .token}'
|
|
153
|
+
|
|
154
|
+
# Form submits (button with form_value present)
|
|
155
|
+
lark-cli event consume card.action.trigger --as bot \
|
|
156
|
+
--jq 'select(.action_tag == "button" and .form_value != "") | {op: .operator_id, form: (.form_value | fromjson), token: .token}'
|
|
157
|
+
|
|
158
|
+
# Date picker interactions
|
|
159
|
+
lark-cli event consume card.action.trigger --as bot \
|
|
160
|
+
--jq 'select(.action_tag == "date_picker") | {op: .operator_id, date: .option, tz: .timezone}'
|
|
161
|
+
|
|
162
|
+
# Filter to one chat
|
|
163
|
+
lark-cli event consume card.action.trigger --as bot \
|
|
164
|
+
--jq 'select(.chat_id == "oc_xxx")'
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Gotchas
|
|
168
|
+
|
|
169
|
+
- **No `form_submit` tag**: form submission comes as `action_tag = "button"` with `form_value`
|
|
170
|
+
populated. Check `form_value != ""` to distinguish from a standalone button click.
|
|
171
|
+
- **`action_value` type is developer-defined**: the original may be an object or a plain string.
|
|
172
|
+
Use `fromjson?` (with `?` to swallow errors) or check before parsing.
|
|
173
|
+
- **Standalone vs form fields**: `input_value`, `option`, `options`, `checked` are only populated
|
|
174
|
+
for components **not** inside a form container. Inside a form, all values appear in `form_value`.
|
|
175
|
+
- **WebSocket delivery**: no separate callback URL needed; uses the existing WS connection.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# im +chat-create
|
|
2
|
+
|
|
3
|
+
> **Prerequisite:** Read [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) first to understand authentication, global parameters, and safety rules.
|
|
4
|
+
|
|
5
|
+
Create a group chat. Supports both user identity (`--as user`) and bot identity (`--as bot`). You can specify the group name, description, members (users/bots), owner, chat type (private/public), and group mode. Set `--chat-mode topic` to create a topic chat.
|
|
6
|
+
|
|
7
|
+
This skill maps to the shortcut: `lark-cli im +chat-create` (internally calls `POST /open-apis/im/v1/chats`).
|
|
8
|
+
|
|
9
|
+
- `--as bot` requires the `im:chat:create` scope.
|
|
10
|
+
- `--as user` requires the `im:chat:create_by_user` scope.
|
|
11
|
+
|
|
12
|
+
## Commands
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Create a private group (default)
|
|
16
|
+
lark-cli im +chat-create --name "My Group"
|
|
17
|
+
|
|
18
|
+
# Create a public group (name is required and must be at least 2 characters)
|
|
19
|
+
lark-cli im +chat-create --name "Public Group" --type public
|
|
20
|
+
|
|
21
|
+
# Create a topic chat
|
|
22
|
+
lark-cli im +chat-create --name "Topic Group" --chat-mode topic
|
|
23
|
+
|
|
24
|
+
# Specify the group owner
|
|
25
|
+
lark-cli im +chat-create --name "My Group" --owner ou_xxx
|
|
26
|
+
|
|
27
|
+
# Invite user members (comma-separated open_ids, up to 50)
|
|
28
|
+
lark-cli im +chat-create --name "My Group" --users "ou_aaa,ou_bbb"
|
|
29
|
+
|
|
30
|
+
# Invite bot members (comma-separated app IDs, up to 5)
|
|
31
|
+
lark-cli im +chat-create --name "My Group" --bots "cli_aaa,cli_bbb"
|
|
32
|
+
|
|
33
|
+
# Invite both users and bots
|
|
34
|
+
lark-cli im +chat-create --name "My Group" --users "ou_aaa" --bots "cli_aaa"
|
|
35
|
+
|
|
36
|
+
# Make the creating bot a group manager (bot identity only)
|
|
37
|
+
lark-cli im +chat-create --name "My Group" --set-bot-manager --as bot
|
|
38
|
+
|
|
39
|
+
# JSON output
|
|
40
|
+
lark-cli im +chat-create --name "My Group" --format json
|
|
41
|
+
|
|
42
|
+
# Create a group with bot identity
|
|
43
|
+
lark-cli im +chat-create --name "My Group" --users "ou_aaa" --as bot
|
|
44
|
+
|
|
45
|
+
# Create a group with user identity
|
|
46
|
+
lark-cli im +chat-create --name "My Group" --users "ou_aaa,ou_bbb" --as user
|
|
47
|
+
|
|
48
|
+
# Preview the request without creating anything
|
|
49
|
+
lark-cli im +chat-create --name "My Group" --dry-run
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Parameters
|
|
53
|
+
|
|
54
|
+
| Parameter | Required | Limits | Description |
|
|
55
|
+
|------|------|------|------|
|
|
56
|
+
| `--name <name>` | Required for public groups | Max 60 characters; at least 2 characters for public groups | Group name (`"(no subject)"` for private groups if omitted) |
|
|
57
|
+
| `--description <text>` | No | Max 100 characters | Group description |
|
|
58
|
+
| `--users <ids>` | No | Up to 50, format `ou_xxx` | Comma-separated user open_ids |
|
|
59
|
+
| `--bots <ids>` | No | Up to 5, format `cli_xxx` | Comma-separated bot app IDs |
|
|
60
|
+
| `--owner <open_id>` | No | Format `ou_xxx` | Owner open_id (defaults to the bot when using `--as bot`, or the authorized user when using `--as user`) |
|
|
61
|
+
| `--type <type>` | No | `private` (default) or `public` | Group type. Default to `private`; pass `public` only when the user explicitly asks for a discoverable/public group. |
|
|
62
|
+
| `--chat-mode <mode>` | No | `group` (default) or `topic` | Group mode; `topic` creates a topic chat (not the same as `group_message_type=thread`). When the user asks for a topic chat, pass `topic` explicitly — do not rely on the default. |
|
|
63
|
+
| `--set-bot-manager` | No | - | Set the creating bot as a group manager (only effective with `--as bot`) |
|
|
64
|
+
| `--format json` | No | - | Output as JSON |
|
|
65
|
+
| `--as <identity>` | No | `bot` or `user` | Identity type |
|
|
66
|
+
| `--dry-run` | No | - | Preview the request without executing it |
|
|
67
|
+
|
|
68
|
+
> **`--chat-mode topic` vs "normal group with topic-message mode"**: `--chat-mode topic` here creates a 话题群 — the entire group is a topic chat. This is different from "normal group (`chat_mode=group`) + topic-message mode (`group_message_type=thread`)". This CLI exposes only `chat_mode`; `group_message_type` is intentionally not surfaced.
|
|
69
|
+
|
|
70
|
+
## AI Usage Guidance
|
|
71
|
+
|
|
72
|
+
### When using `--as bot`
|
|
73
|
+
|
|
74
|
+
Bot may fail to invite users who are mutually invisible to it during group creation (error 232043). To avoid this, use the **two-step flow** below instead of passing other users' open_ids in `--users`.
|
|
75
|
+
|
|
76
|
+
1. **Get the current user's open_id:** Run `lark-cli contact +search-user --query "<name or email>"` to retrieve it.
|
|
77
|
+
2. **Create the group — by default include the current user:**
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
lark-cli im +chat-create --name "<group name>" \
|
|
81
|
+
--users "<current user open_id>" --as bot
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Default behavior:** Always add the current user to the group, unless the user explicitly says "do not add me" or "bot-only group" — only then omit `--users`.
|
|
85
|
+
|
|
86
|
+
3. **Add other members via user identity** (requires the current user to be in the group):
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
lark-cli im chat.members create \
|
|
90
|
+
--params '{"chat_id":"<chat_id from step 2>","member_id_type":"open_id","succeed_type":1}' \
|
|
91
|
+
--data '{"id_list":["ou_aaa","ou_bbb"]}' \
|
|
92
|
+
--as user
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
`succeed_type=1` ensures reachable users are added successfully; unreachable ones are returned in `invalid_id_list` instead of failing the whole request.
|
|
96
|
+
|
|
97
|
+
4. **Check `invalid_id_list`** in the response. If non-empty, report to the user which members could not be added.
|
|
98
|
+
|
|
99
|
+
### When using `--as user`
|
|
100
|
+
|
|
101
|
+
User identity does not have the bot visibility limitation, so you can create the group and invite members in one step:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
lark-cli im +chat-create --name "<group name>" --users "ou_aaa,ou_bbb" --as user
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
The authorized user is automatically the group creator and member.
|
|
108
|
+
|
|
109
|
+
## Output Fields
|
|
110
|
+
|
|
111
|
+
| Field | Description |
|
|
112
|
+
|------|------|
|
|
113
|
+
| `chat_id` | The new group's ID (`oc_xxx` format) |
|
|
114
|
+
| `name` | Group name |
|
|
115
|
+
| `chat_type` | Group type (`private` / `public`) |
|
|
116
|
+
| `owner_id` | Owner ID (may be empty when a bot creates the group and `--owner` is not specified) |
|
|
117
|
+
| `external` | Whether the group is external |
|
|
118
|
+
| `share_link` | Group share link (omitted if retrieval fails) |
|
|
119
|
+
|
|
120
|
+
## Usage Scenarios
|
|
121
|
+
|
|
122
|
+
### Scenario 1: Create a group and specify the owner
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
lark-cli im +chat-create --name "Project Discussion Group" --owner ou_xxx
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Scenario 2: Create a group and invite users and a bot
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
lark-cli im +chat-create --name "Project Discussion Group" \
|
|
132
|
+
--owner ou_xxx \
|
|
133
|
+
--users "ou_aaa,ou_bbb" \
|
|
134
|
+
--bots "cli_aaa"
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Scenario 3: Create a group and send a welcome message
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
CHAT_ID=$(lark-cli im +chat-create --name "New Group" --format json | jq -r '.data.chat_id')
|
|
141
|
+
lark-cli im +messages-send --chat-id "$CHAT_ID" --text "Welcome, everyone!"
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Common Errors and Troubleshooting
|
|
145
|
+
|
|
146
|
+
| Symptom | Root Cause | Solution |
|
|
147
|
+
|---------|---------|---------|
|
|
148
|
+
| Permission denied (99991672) | The app does not have `im:chat:create` (bot) or `im:chat:create_by_user` (user) permission enabled | Enable the required permission for the app in the Open Platform console |
|
|
149
|
+
| `--name is required for public groups and must be at least 2 characters` | A public group was created without a name or with a name shorter than 2 characters | Provide a name with at least 2 characters |
|
|
150
|
+
| `--name exceeds the maximum of 60 characters` | The group name is too long | Shorten the name to 60 characters or fewer |
|
|
151
|
+
| `--description exceeds the maximum of 100 characters` | The group description is too long | Shorten the description to 100 characters or fewer |
|
|
152
|
+
| `--users exceeds the maximum of 50` | Too many user members were provided | Split the operation into batches and add more members later |
|
|
153
|
+
| `--bots exceeds the maximum of 5` | Too many bot members were provided | Invite at most 5 bots at once |
|
|
154
|
+
| `invalid user id: expected open_id (ou_xxx)` | Invalid user ID format | Use the `ou_xxx` format for users |
|
|
155
|
+
| `invalid bot id: expected app ID (cli_xxx)` | Invalid bot ID format | Use the `cli_xxx` format for bots |
|
|
156
|
+
| `invalid --owner: expected open_id (ou_xxx)` | Invalid owner ID format | Use the `ou_xxx` format for the owner |
|
|
157
|
+
| `bot is invisible to user` (232043) | The bot and target users are mutually invisible | Follow the two-step flow in AI Usage Guidance above — do not pass other users in `--users` during creation |
|
|
158
|
+
|
|
159
|
+
## References
|
|
160
|
+
|
|
161
|
+
- [lark-im](../SKILL.md) - all IM commands
|
|
162
|
+
- [lark-shared](../../lark-shared/SKILL.md) - authentication and global parameters
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Group Chat Identity Rules
|
|
2
|
+
|
|
3
|
+
> Warning: The most common source of failure in group operations is choosing the wrong identity. Confirm the identity before performing the action.
|
|
4
|
+
|
|
5
|
+
Group-chat operations support both `--as user` (UAT user identity) and `--as bot` (TAT bot identity). Choosing the correct identity is critical for success.
|
|
6
|
+
|
|
7
|
+
## Basic Principles
|
|
8
|
+
|
|
9
|
+
- **If the user explicitly specifies an identity:** use exactly what the user requested (`--as user` or `--as bot`) without guessing.
|
|
10
|
+
- **If the user does not specify an identity:** infer the correct identity from context instead of relying on the default.
|
|
11
|
+
|
|
12
|
+
## Identity Selection by Operation
|
|
13
|
+
|
|
14
|
+
| Operation | Recommended Identity | Why |
|
|
15
|
+
|------|---------|-----------------------------------|
|
|
16
|
+
| Create group (`+chat-create`) | Depends on the scenario | Infer from context |
|
|
17
|
+
| Add members (member-management flow) | `--as user` | Bot visibility is limited and often fails when the target user is mutually invisible to the bot (232024) |
|
|
18
|
+
| Update group (`+chat-update`) | Owner identity | Permission changes require owner/admin privileges; owner transfer requires owner identity |
|
|
19
|
+
|
|
20
|
+
## Inferring the Owner
|
|
21
|
+
|
|
22
|
+
When an owner-level action is needed and the owner is unknown, infer in this order:
|
|
23
|
+
|
|
24
|
+
1. A bot created the group and `--owner` was **not** specified -> the owner is the bot (`--as bot`)
|
|
25
|
+
2. A bot created the group and `--owner ou_xxx` **was** specified -> the owner is that user (`--as user`)
|
|
26
|
+
3. A user created the group and `--owner` was **not** specified -> the owner is the current user (`--as user`)
|
|
27
|
+
4. Still unclear -> ask the user to confirm who owns the group before making owner-level changes
|
|
28
|
+
|
|
29
|
+
### When the Owner Is Neither the Current User Nor the Bot
|
|
30
|
+
|
|
31
|
+
If the query shows that the owner is a third-party user (`owner_id` is neither the currently authorized user nor the bot), the current identity does not have owner privileges. In that case:
|
|
32
|
+
|
|
33
|
+
- **Permission/setting changes:** if the bot is an admin of the group, `--as bot` can still perform admin-level operations such as renaming the group or changing permissions.
|
|
34
|
+
- **Owner-only actions such as owner transfer:** require the actual owner to complete UAT authorization via `lark-cli auth login`, then perform the action as that owner.
|
|
35
|
+
- Explain the limitation clearly to the user instead of retrying blindly.
|
|
36
|
+
|
|
37
|
+
## Common Pitfalls
|
|
38
|
+
|
|
39
|
+
### Inviting Members During Group Creation
|
|
40
|
+
|
|
41
|
+
If a bot creates a group and `--users` includes users who are mutually invisible to the bot, the entire request fails with 232043. Use two steps instead:
|
|
42
|
+
|
|
43
|
+
1. Create the group with the bot first, excluding invisible users: `lark-cli im +chat-create --name "Group Name"`
|
|
44
|
+
2. Add users later with a user-identity member-management flow
|
|
45
|
+
|
|
46
|
+
### Insufficient Privileges
|
|
47
|
+
|
|
48
|
+
- **232016 / 232002 / 232017:** the current identity is not the owner or an admin -> switch to the owner identity
|
|
49
|
+
- **232011:** the current user is not in the group -> use a group-member identity, or join the group first
|
|
50
|
+
- **232024:** the bot and the target user are mutually invisible -> switch to `--as user`
|
|
51
|
+
|
|
52
|
+
## References
|
|
53
|
+
|
|
54
|
+
- [lark-im](../SKILL.md) - all IM commands
|
|
55
|
+
- [lark-shared](../../lark-shared/SKILL.md) - authentication and global parameters
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# im +chat-list
|
|
2
|
+
|
|
3
|
+
> **Prerequisite:** Read [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) first to understand authentication, global parameters, and safety rules.
|
|
4
|
+
|
|
5
|
+
List chats the current user (or bot, with `--as bot`) is a member of. **Not a search API — there is no `--query` parameter; the call always returns the full member list, paginated.** For keyword-based lookup (e.g. find a group by name or by member), use [`+chat-search`](lark-im-chat-search.md) instead.
|
|
6
|
+
|
|
7
|
+
**Defaults to groups only**; pass `--types=p2p,group` (or `--types p2p --types group`) to also include p2p single chats (user identity only — see ["Bot identity and p2p"](#bot-identity-and-p2p)). Supports pagination, sort order, and (user identity only) muted-chat filtering.
|
|
8
|
+
|
|
9
|
+
This skill maps to the shortcut: `lark-cli im +chat-list` (internally calls `GET /open-apis/im/v1/chats`).
|
|
10
|
+
|
|
11
|
+
## Commands
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# List the user's chats (default sort: create_time, ascending)
|
|
15
|
+
lark-cli im +chat-list
|
|
16
|
+
|
|
17
|
+
# Sort by recent activity (most recently active first)
|
|
18
|
+
lark-cli im +chat-list --sort active_time
|
|
19
|
+
|
|
20
|
+
# Limit page size
|
|
21
|
+
lark-cli im +chat-list --page-size 50
|
|
22
|
+
|
|
23
|
+
# Pagination
|
|
24
|
+
lark-cli im +chat-list --page-token "xxx"
|
|
25
|
+
|
|
26
|
+
# Drop muted chats (user identity only)
|
|
27
|
+
lark-cli im +chat-list --exclude-muted
|
|
28
|
+
|
|
29
|
+
# JSON output
|
|
30
|
+
lark-cli im +chat-list --format json
|
|
31
|
+
|
|
32
|
+
# Preview the request without executing it
|
|
33
|
+
lark-cli im +chat-list --dry-run
|
|
34
|
+
|
|
35
|
+
# Include p2p single chats (user identity only) — comma form
|
|
36
|
+
lark-cli im +chat-list --as user --types p2p,group
|
|
37
|
+
|
|
38
|
+
# Same, using repeat flag instead of CSV
|
|
39
|
+
lark-cli im +chat-list --as user --types p2p --types group
|
|
40
|
+
|
|
41
|
+
# Only p2p single chats (user identity only)
|
|
42
|
+
lark-cli im +chat-list --as user --types p2p
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Parameters
|
|
46
|
+
|
|
47
|
+
| Parameter | Required | Limits | Description |
|
|
48
|
+
|------|------|------|------|
|
|
49
|
+
| `--user-id-type <type>` | No | `open_id` (default), `union_id`, `user_id` | ID type used for `owner_id` in the response |
|
|
50
|
+
| `--types <strings>` | No | `group`, `p2p` (comma-separated or repeated) | Chat types to include. Omitted = groups only (backward compatible). `p2p` requires user identity (`--as user`); under `--as bot`, `--types=p2p` alone is rejected and `--types=p2p,group` is silently downgraded to `group` |
|
|
51
|
+
| `--sort <field>` | No | `create_time` (default, ascending), `active_time` (descending) | Result ordering |
|
|
52
|
+
| `--page-size <n>` | No | 1-100, default 20 | Number of results per page |
|
|
53
|
+
| `--page-token <token>` | No | - | Pagination token from the previous response |
|
|
54
|
+
| `--exclude-muted` | No | User identity only | Drop chats the current user has muted (do-not-disturb). Under `--as bot`, the flag is silently inactive; see "Filtering muted chats" below |
|
|
55
|
+
| `--format json` | No | - | Output as JSON |
|
|
56
|
+
| `--dry-run` | No | - | Preview the request without executing it |
|
|
57
|
+
|
|
58
|
+
> **Note:** Supports both `--as user` (default) and `--as bot`. When using bot identity, the app must have bot capability enabled.
|
|
59
|
+
|
|
60
|
+
## Output Fields
|
|
61
|
+
|
|
62
|
+
| Field | Description |
|
|
63
|
+
|------|------|
|
|
64
|
+
| `chat_id` | Chat ID (`oc_xxx` format) |
|
|
65
|
+
| `name` | Chat name |
|
|
66
|
+
| `description` | Chat description |
|
|
67
|
+
| `owner_id` | Owner ID (type controlled by `--user-id-type`) |
|
|
68
|
+
| `external` | Whether the chat is external |
|
|
69
|
+
| `chat_status` | Chat status (`normal` / `dissolved` / `dissolved_save`) |
|
|
70
|
+
| `chat_mode` | Chat mode discriminator: `group` (regular) / `topic` (topic group) / `p2p` (single chat) |
|
|
71
|
+
| `p2p_target_type` | Peer type, e.g., `user` |
|
|
72
|
+
| `p2p_target_id` | Peer ID (type controlled by `--user-id-type`) |
|
|
73
|
+
|
|
74
|
+
## Including p2p single chats
|
|
75
|
+
|
|
76
|
+
Default behavior lists groups only — same as before this feature. To include p2p, pass `--types`:
|
|
77
|
+
|
|
78
|
+
| User intent | Call | Identity |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| "list my groups" / 我的群 / 我加入了哪些群 | (default, omit `--types`) | user or bot |
|
|
81
|
+
| "list my p2p chats" / 我的单聊 / 我跟谁有 1v1 | `--types p2p` | **user only** |
|
|
82
|
+
| "all my chats" / 全部聊天 / 所有会话 (ambiguous) | `--types p2p,group` | **user only** |
|
|
83
|
+
|
|
84
|
+
For p2p rows in the response: `name` is the peer's display name, `owner_id` follows group semantics, `chat_mode = "p2p"`, and `p2p_target_type` / `p2p_target_id` identify the peer.
|
|
85
|
+
|
|
86
|
+
## Bot identity and p2p
|
|
87
|
+
|
|
88
|
+
`tenant_access_token` cannot list p2p chats — to protect user privacy, bot identity is not permitted to enumerate p2p single chats. Behavior under `--as bot`:
|
|
89
|
+
|
|
90
|
+
- `--as bot --types=p2p` → rejected at validation time with an actionable error; no request is sent.
|
|
91
|
+
- `--as bot --types=p2p,group` → CLI strips `p2p` and sends `types=group`. Request proceeds; only groups are returned. The strip is a **request-level adjustment**, surfaced two ways so neither humans nor agents miss it:
|
|
92
|
+
- **stderr**: `warning: bot_strip_p2p: To protect user privacy, bot identity cannot list p2p chats; --types=p2p,group was sent as types=group. Use --as user to include p2p.` (matches the `warning: <code>: <message>` convention in `shortcuts/common/runner.go`)
|
|
93
|
+
- **stdout JSON**: a top-level `notices` array gains a structured entry:
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"chats": [...],
|
|
97
|
+
"notices": [
|
|
98
|
+
{ "code": "bot_strip_p2p", "message": "To protect user privacy, bot identity cannot list p2p chats; …" }
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
- The `filter` slot stays scoped to `--exclude-muted`; `notices` is a separate top-level key, so the two never collide and no priority is needed when both fire.
|
|
103
|
+
- DryRun emits the same stderr warning so a previewed request truthfully reflects what Execute will send (parity with `shortcuts/drive/drive_search.go`).
|
|
104
|
+
- `--as bot --types=group` → accepted, returns groups normally.
|
|
105
|
+
- `--as bot` (no `--types`) → unchanged, returns groups.
|
|
106
|
+
|
|
107
|
+
To include p2p single chats, switch to user identity: `--as user --types=p2p,group`.
|
|
108
|
+
|
|
109
|
+
## Filtering muted chats
|
|
110
|
+
|
|
111
|
+
`--exclude-muted` (user identity only) drops chats the current user has set to do-not-disturb. After the list call, the CLI batches the page's chat_ids through `POST /open-apis/im/v1/chat_user_setting/batch_get_mute_status` and filters client-side. Under `--as bot`, the mute API is UAT-only and the filter is silently skipped.
|
|
112
|
+
|
|
113
|
+
When the flag is set, the JSON envelope gains a `filter` sub-object (absent otherwise, so existing consumers are unaffected); `fetched_count == returned_count + filtered_count` always holds:
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"chats": [...],
|
|
118
|
+
"filter": {
|
|
119
|
+
"applied": "exclude_muted",
|
|
120
|
+
"fetched_count": 20,
|
|
121
|
+
"returned_count": 17,
|
|
122
|
+
"filtered_count": 3,
|
|
123
|
+
"hint": "Filtered out 3 muted chat(s) on this page (17 remaining); use --page-token to fetch more."
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Usage Scenarios
|
|
129
|
+
|
|
130
|
+
### Scenario 1: List my recent chats
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
lark-cli im +chat-list --sort active_time --page-size 10
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Scenario 2: List my non-muted chats sorted by activity
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
lark-cli im +chat-list --sort active_time --exclude-muted
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Scenario 3: Iterate all my chats programmatically
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
TOKEN=""
|
|
146
|
+
while :; do
|
|
147
|
+
RESP=$(lark-cli im +chat-list --page-size 100 --page-token "$TOKEN" --format json)
|
|
148
|
+
echo "$RESP" | jq -r '.data.chats[].chat_id'
|
|
149
|
+
HAS_MORE=$(echo "$RESP" | jq -r '.data.has_more')
|
|
150
|
+
[ "$HAS_MORE" = "true" ] || break
|
|
151
|
+
TOKEN=$(echo "$RESP" | jq -r '.data.page_token')
|
|
152
|
+
done
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Common Errors and Troubleshooting
|
|
156
|
+
|
|
157
|
+
| Symptom | Root Cause | Solution |
|
|
158
|
+
|---------|---------|---------|
|
|
159
|
+
| `--page-size must be an integer between 1 and 100` | page-size is out of range or not an integer | Use an integer between 1 and 100 |
|
|
160
|
+
| Permission denied (99991672) | The bot app does not have `im:chat:read` TAT permission enabled | Enable the permission for the app in the Open Platform console |
|
|
161
|
+
| Permission denied (99991679) with `--as user` | UAT is not authorized for `im:chat:read` | Run `lark-cli auth login --scope "im:chat:read"` |
|
|
162
|
+
| `Bot ability is not activated` (232025) | The app does not have bot capability enabled | Enable bot capability in the Open Platform console |
|
|
163
|
+
| `--exclude-muted` returns all chats unfiltered and `hint` says "no effect under bot identity" | Running under `--as bot` (mute API is UAT-only) | Switch to `--as user` for mute filtering |
|
|
164
|
+
| `--types=p2p (single chats) is only supported with user identity` | `--as bot` + `--types=p2p` (single-value only; mixed `--types=p2p,group` is downgraded to `group` and surfaces a `bot_strip_p2p` notice via stderr + `outData["notices"]` — see "Bot identity and p2p") | Use `--as user`, or include `group` in `--types` (the bot proceeds with `group` only and emits the `bot_strip_p2p` notice) |
|
|
165
|
+
|
|
166
|
+
> Full error message of the row above: `--types=p2p (single chats) is only supported with user identity (--as user). To protect user privacy, bot identity cannot list p2p chats. Use --as user, or include "group" in --types.`
|