pi-feishu-cli 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.
Files changed (407) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +111 -0
  3. package/dist/src/bot.d.ts +29 -0
  4. package/dist/src/bot.js +75 -0
  5. package/dist/src/cards.d.ts +6 -0
  6. package/dist/src/cards.js +87 -0
  7. package/dist/src/config.d.ts +3 -0
  8. package/dist/src/config.js +28 -0
  9. package/dist/src/daemon.d.ts +2 -0
  10. package/dist/src/daemon.js +151 -0
  11. package/dist/src/extension.d.ts +2 -0
  12. package/dist/src/extension.js +124 -0
  13. package/dist/src/poller.d.ts +33 -0
  14. package/dist/src/poller.js +94 -0
  15. package/dist/src/renderer.d.ts +8 -0
  16. package/dist/src/renderer.js +31 -0
  17. package/dist/src/session-registry.d.ts +15 -0
  18. package/dist/src/session-registry.js +82 -0
  19. package/dist/src/types.d.ts +25 -0
  20. package/dist/src/types.js +1 -0
  21. package/dist/tests/bot.test.d.ts +1 -0
  22. package/dist/tests/bot.test.js +89 -0
  23. package/dist/tests/cards.test.d.ts +1 -0
  24. package/dist/tests/cards.test.js +39 -0
  25. package/dist/tests/config.test.d.ts +1 -0
  26. package/dist/tests/config.test.js +59 -0
  27. package/dist/tests/renderer.test.d.ts +1 -0
  28. package/dist/tests/renderer.test.js +61 -0
  29. package/dist/tests/session-registry.test.d.ts +1 -0
  30. package/dist/tests/session-registry.test.js +92 -0
  31. package/dist/tests/types.test.d.ts +1 -0
  32. package/dist/tests/types.test.js +30 -0
  33. package/package.json +35 -0
  34. package/skills/lark-approval/SKILL.md +56 -0
  35. package/skills/lark-apps/SKILL.md +92 -0
  36. package/skills/lark-apps/references/lark-apps-access-scope-get.md +104 -0
  37. package/skills/lark-apps/references/lark-apps-access-scope-set.md +126 -0
  38. package/skills/lark-apps/references/lark-apps-create.md +112 -0
  39. package/skills/lark-apps/references/lark-apps-html-publish.md +151 -0
  40. package/skills/lark-apps/references/lark-apps-list.md +95 -0
  41. package/skills/lark-apps/references/lark-apps-update.md +86 -0
  42. package/skills/lark-attendance/SKILL.md +57 -0
  43. package/skills/lark-base/SKILL.md +359 -0
  44. package/skills/lark-base/references/dashboard-block-data-config.md +350 -0
  45. package/skills/lark-base/references/examples.md +140 -0
  46. package/skills/lark-base/references/formula-field-guide.md +737 -0
  47. package/skills/lark-base/references/lark-base-advperm-disable.md +83 -0
  48. package/skills/lark-base/references/lark-base-advperm-enable.md +80 -0
  49. package/skills/lark-base/references/lark-base-base-copy.md +74 -0
  50. package/skills/lark-base/references/lark-base-base-create.md +68 -0
  51. package/skills/lark-base/references/lark-base-base-get.md +39 -0
  52. package/skills/lark-base/references/lark-base-cell-value.md +151 -0
  53. package/skills/lark-base/references/lark-base-dashboard-arrange.md +83 -0
  54. package/skills/lark-base/references/lark-base-dashboard-block-create.md +108 -0
  55. package/skills/lark-base/references/lark-base-dashboard-block-delete.md +46 -0
  56. package/skills/lark-base/references/lark-base-dashboard-block-get.md +57 -0
  57. package/skills/lark-base/references/lark-base-dashboard-block-list.md +53 -0
  58. package/skills/lark-base/references/lark-base-dashboard-block-update.md +84 -0
  59. package/skills/lark-base/references/lark-base-dashboard-create.md +73 -0
  60. package/skills/lark-base/references/lark-base-dashboard-delete.md +44 -0
  61. package/skills/lark-base/references/lark-base-dashboard-get.md +59 -0
  62. package/skills/lark-base/references/lark-base-dashboard-list.md +52 -0
  63. package/skills/lark-base/references/lark-base-dashboard-update.md +69 -0
  64. package/skills/lark-base/references/lark-base-dashboard.md +240 -0
  65. package/skills/lark-base/references/lark-base-data-analysis-sop.md +88 -0
  66. package/skills/lark-base/references/lark-base-data-query.md +375 -0
  67. package/skills/lark-base/references/lark-base-field-create.md +104 -0
  68. package/skills/lark-base/references/lark-base-field-delete.md +51 -0
  69. package/skills/lark-base/references/lark-base-field-get.md +42 -0
  70. package/skills/lark-base/references/lark-base-field-list.md +44 -0
  71. package/skills/lark-base/references/lark-base-field-search-options.md +48 -0
  72. package/skills/lark-base/references/lark-base-field-update.md +97 -0
  73. package/skills/lark-base/references/lark-base-field.md +22 -0
  74. package/skills/lark-base/references/lark-base-form-create.md +87 -0
  75. package/skills/lark-base/references/lark-base-form-delete.md +64 -0
  76. package/skills/lark-base/references/lark-base-form-detail.md +198 -0
  77. package/skills/lark-base/references/lark-base-form-get.md +68 -0
  78. package/skills/lark-base/references/lark-base-form-list.md +73 -0
  79. package/skills/lark-base/references/lark-base-form-questions-create.md +118 -0
  80. package/skills/lark-base/references/lark-base-form-questions-delete.md +68 -0
  81. package/skills/lark-base/references/lark-base-form-questions-list.md +84 -0
  82. package/skills/lark-base/references/lark-base-form-questions-update.md +92 -0
  83. package/skills/lark-base/references/lark-base-form-questions.md +23 -0
  84. package/skills/lark-base/references/lark-base-form-submit.md +171 -0
  85. package/skills/lark-base/references/lark-base-form-update.md +82 -0
  86. package/skills/lark-base/references/lark-base-form.md +25 -0
  87. package/skills/lark-base/references/lark-base-history.md +16 -0
  88. package/skills/lark-base/references/lark-base-record-batch-create.md +58 -0
  89. package/skills/lark-base/references/lark-base-record-batch-update.md +53 -0
  90. package/skills/lark-base/references/lark-base-record-delete.md +62 -0
  91. package/skills/lark-base/references/lark-base-record-history-list.md +86 -0
  92. package/skills/lark-base/references/lark-base-record-share-link-create.md +72 -0
  93. package/skills/lark-base/references/lark-base-record-upsert.md +64 -0
  94. package/skills/lark-base/references/lark-base-record.md +31 -0
  95. package/skills/lark-base/references/lark-base-role-create.md +89 -0
  96. package/skills/lark-base/references/lark-base-role-delete.md +83 -0
  97. package/skills/lark-base/references/lark-base-role-get.md +87 -0
  98. package/skills/lark-base/references/lark-base-role-list.md +81 -0
  99. package/skills/lark-base/references/lark-base-role-update.md +94 -0
  100. package/skills/lark-base/references/lark-base-shortcut-field-properties.md +481 -0
  101. package/skills/lark-base/references/lark-base-table-create.md +62 -0
  102. package/skills/lark-base/references/lark-base-table-delete.md +51 -0
  103. package/skills/lark-base/references/lark-base-table-get.md +46 -0
  104. package/skills/lark-base/references/lark-base-table-list.md +43 -0
  105. package/skills/lark-base/references/lark-base-table-update.md +49 -0
  106. package/skills/lark-base/references/lark-base-table.md +20 -0
  107. package/skills/lark-base/references/lark-base-view-create.md +50 -0
  108. package/skills/lark-base/references/lark-base-view-delete.md +48 -0
  109. package/skills/lark-base/references/lark-base-view-get-card.md +38 -0
  110. package/skills/lark-base/references/lark-base-view-get-filter.md +38 -0
  111. package/skills/lark-base/references/lark-base-view-get-group.md +38 -0
  112. package/skills/lark-base/references/lark-base-view-get-sort.md +38 -0
  113. package/skills/lark-base/references/lark-base-view-get-timebar.md +38 -0
  114. package/skills/lark-base/references/lark-base-view-get-visible-fields.md +28 -0
  115. package/skills/lark-base/references/lark-base-view-get.md +38 -0
  116. package/skills/lark-base/references/lark-base-view-list.md +44 -0
  117. package/skills/lark-base/references/lark-base-view-rename.md +44 -0
  118. package/skills/lark-base/references/lark-base-view-set-card.md +55 -0
  119. package/skills/lark-base/references/lark-base-view-set-filter.md +181 -0
  120. package/skills/lark-base/references/lark-base-view-set-group.md +65 -0
  121. package/skills/lark-base/references/lark-base-view-set-sort.md +63 -0
  122. package/skills/lark-base/references/lark-base-view-set-timebar.md +51 -0
  123. package/skills/lark-base/references/lark-base-view-set-visible-fields.md +46 -0
  124. package/skills/lark-base/references/lark-base-view.md +44 -0
  125. package/skills/lark-base/references/lark-base-workflow-create.md +180 -0
  126. package/skills/lark-base/references/lark-base-workflow-disable.md +94 -0
  127. package/skills/lark-base/references/lark-base-workflow-enable.md +94 -0
  128. package/skills/lark-base/references/lark-base-workflow-get.md +147 -0
  129. package/skills/lark-base/references/lark-base-workflow-guide.md +718 -0
  130. package/skills/lark-base/references/lark-base-workflow-list.md +124 -0
  131. package/skills/lark-base/references/lark-base-workflow-schema.md +935 -0
  132. package/skills/lark-base/references/lark-base-workflow-update.md +167 -0
  133. package/skills/lark-base/references/lark-base-workflow.md +23 -0
  134. package/skills/lark-base/references/lark-base-workspace.md +18 -0
  135. package/skills/lark-base/references/lookup-field-guide.md +512 -0
  136. package/skills/lark-base/references/role-config.md +539 -0
  137. package/skills/lark-calendar/SKILL.md +154 -0
  138. package/skills/lark-calendar/references/lark-calendar-agenda.md +78 -0
  139. package/skills/lark-calendar/references/lark-calendar-create.md +109 -0
  140. package/skills/lark-calendar/references/lark-calendar-freebusy.md +124 -0
  141. package/skills/lark-calendar/references/lark-calendar-room-find.md +113 -0
  142. package/skills/lark-calendar/references/lark-calendar-rsvp.md +42 -0
  143. package/skills/lark-calendar/references/lark-calendar-schedule-meeting.md +265 -0
  144. package/skills/lark-calendar/references/lark-calendar-suggestion.md +125 -0
  145. package/skills/lark-calendar/references/lark-calendar-update.md +105 -0
  146. package/skills/lark-contact/SKILL.md +45 -0
  147. package/skills/lark-contact/references/lark-contact-get-user.md +19 -0
  148. package/skills/lark-contact/references/lark-contact-search-user.md +124 -0
  149. package/skills/lark-doc/SKILL.md +65 -0
  150. package/skills/lark-doc/references/lark-doc-create.md +89 -0
  151. package/skills/lark-doc/references/lark-doc-fetch.md +141 -0
  152. package/skills/lark-doc/references/lark-doc-md.md +71 -0
  153. package/skills/lark-doc/references/lark-doc-media-download.md +50 -0
  154. package/skills/lark-doc/references/lark-doc-media-insert.md +114 -0
  155. package/skills/lark-doc/references/lark-doc-media-preview.md +41 -0
  156. package/skills/lark-doc/references/lark-doc-update.md +252 -0
  157. package/skills/lark-doc/references/lark-doc-whiteboard.md +100 -0
  158. package/skills/lark-doc/references/lark-doc-xml.md +169 -0
  159. package/skills/lark-doc/references/style/lark-doc-create-workflow.md +56 -0
  160. package/skills/lark-doc/references/style/lark-doc-style.md +106 -0
  161. package/skills/lark-doc/references/style/lark-doc-update-workflow.md +54 -0
  162. package/skills/lark-drive/SKILL.md +369 -0
  163. package/skills/lark-drive/references/lark-drive-add-comment.md +182 -0
  164. package/skills/lark-drive/references/lark-drive-apply-permission.md +77 -0
  165. package/skills/lark-drive/references/lark-drive-create-folder.md +73 -0
  166. package/skills/lark-drive/references/lark-drive-create-shortcut.md +103 -0
  167. package/skills/lark-drive/references/lark-drive-delete.md +79 -0
  168. package/skills/lark-drive/references/lark-drive-download.md +31 -0
  169. package/skills/lark-drive/references/lark-drive-export-download.md +50 -0
  170. package/skills/lark-drive/references/lark-drive-export.md +119 -0
  171. package/skills/lark-drive/references/lark-drive-import.md +159 -0
  172. package/skills/lark-drive/references/lark-drive-inspect.md +50 -0
  173. package/skills/lark-drive/references/lark-drive-move.md +120 -0
  174. package/skills/lark-drive/references/lark-drive-pull.md +137 -0
  175. package/skills/lark-drive/references/lark-drive-push.md +162 -0
  176. package/skills/lark-drive/references/lark-drive-reactions.md +113 -0
  177. package/skills/lark-drive/references/lark-drive-search.md +266 -0
  178. package/skills/lark-drive/references/lark-drive-status.md +198 -0
  179. package/skills/lark-drive/references/lark-drive-task-result.md +302 -0
  180. package/skills/lark-drive/references/lark-drive-upload.md +67 -0
  181. package/skills/lark-drive/references/lark-drive-version-delete.md +38 -0
  182. package/skills/lark-drive/references/lark-drive-version-get.md +71 -0
  183. package/skills/lark-drive/references/lark-drive-version-history.md +73 -0
  184. package/skills/lark-drive/references/lark-drive-version-revert.md +198 -0
  185. package/skills/lark-event/SKILL.md +145 -0
  186. package/skills/lark-event/references/lark-event-im.md +86 -0
  187. package/skills/lark-im/SKILL.md +162 -0
  188. package/skills/lark-im/references/lark-im-chat-create.md +162 -0
  189. package/skills/lark-im/references/lark-im-chat-identity.md +55 -0
  190. package/skills/lark-im/references/lark-im-chat-list.md +198 -0
  191. package/skills/lark-im/references/lark-im-chat-messages-list.md +148 -0
  192. package/skills/lark-im/references/lark-im-chat-search.md +136 -0
  193. package/skills/lark-im/references/lark-im-chat-update.md +84 -0
  194. package/skills/lark-im/references/lark-im-flag-cancel.md +198 -0
  195. package/skills/lark-im/references/lark-im-flag-create.md +67 -0
  196. package/skills/lark-im/references/lark-im-flag-list.md +100 -0
  197. package/skills/lark-im/references/lark-im-messages-mget.md +95 -0
  198. package/skills/lark-im/references/lark-im-messages-reply.md +228 -0
  199. package/skills/lark-im/references/lark-im-messages-resources-download.md +94 -0
  200. package/skills/lark-im/references/lark-im-messages-search.md +232 -0
  201. package/skills/lark-im/references/lark-im-messages-send.md +229 -0
  202. package/skills/lark-im/references/lark-im-reactions.md +297 -0
  203. package/skills/lark-im/references/lark-im-threads-messages-list.md +111 -0
  204. package/skills/lark-mail/SKILL.md +648 -0
  205. package/skills/lark-mail/references/lark-mail-decline-receipt.md +115 -0
  206. package/skills/lark-mail/references/lark-mail-draft-create.md +123 -0
  207. package/skills/lark-mail/references/lark-mail-draft-edit.md +400 -0
  208. package/skills/lark-mail/references/lark-mail-forward.md +173 -0
  209. package/skills/lark-mail/references/lark-mail-message.md +230 -0
  210. package/skills/lark-mail/references/lark-mail-messages.md +108 -0
  211. package/skills/lark-mail/references/lark-mail-reply-all.md +206 -0
  212. package/skills/lark-mail/references/lark-mail-reply.md +242 -0
  213. package/skills/lark-mail/references/lark-mail-send-receipt.md +198 -0
  214. package/skills/lark-mail/references/lark-mail-send.md +216 -0
  215. package/skills/lark-mail/references/lark-mail-share-to-chat.md +198 -0
  216. package/skills/lark-mail/references/lark-mail-signature.md +98 -0
  217. package/skills/lark-mail/references/lark-mail-template-create.md +129 -0
  218. package/skills/lark-mail/references/lark-mail-template-update.md +198 -0
  219. package/skills/lark-mail/references/lark-mail-thread.md +111 -0
  220. package/skills/lark-mail/references/lark-mail-triage.md +122 -0
  221. package/skills/lark-mail/references/lark-mail-watch.md +94 -0
  222. package/skills/lark-minutes/SKILL.md +139 -0
  223. package/skills/lark-minutes/references/lark-minutes-download.md +137 -0
  224. package/skills/lark-minutes/references/lark-minutes-search.md +206 -0
  225. package/skills/lark-minutes/references/lark-minutes-upload.md +104 -0
  226. package/skills/lark-okr/SKILL.md +133 -0
  227. package/skills/lark-okr/references/lark-okr-contentblock.md +359 -0
  228. package/skills/lark-okr/references/lark-okr-cycle-detail.md +84 -0
  229. package/skills/lark-okr/references/lark-okr-cycle-list.md +90 -0
  230. package/skills/lark-okr/references/lark-okr-entities.md +329 -0
  231. package/skills/lark-okr/references/lark-okr-image-upload.md +116 -0
  232. package/skills/lark-okr/references/lark-okr-progress-create.md +81 -0
  233. package/skills/lark-okr/references/lark-okr-progress-delete.md +47 -0
  234. package/skills/lark-okr/references/lark-okr-progress-get.md +62 -0
  235. package/skills/lark-okr/references/lark-okr-progress-list.md +80 -0
  236. package/skills/lark-okr/references/lark-okr-progress-update.md +81 -0
  237. package/skills/lark-openapi-explorer/SKILL.md +153 -0
  238. package/skills/lark-shared/SKILL.md +144 -0
  239. package/skills/lark-sheets/SKILL.md +343 -0
  240. package/skills/lark-sheets/references/lark-sheets-cell-data.md +197 -0
  241. package/skills/lark-sheets/references/lark-sheets-cell-images.md +59 -0
  242. package/skills/lark-sheets/references/lark-sheets-cell-style-and-merge.md +141 -0
  243. package/skills/lark-sheets/references/lark-sheets-dropdown.md +133 -0
  244. package/skills/lark-sheets/references/lark-sheets-filter-views.md +193 -0
  245. package/skills/lark-sheets/references/lark-sheets-float-images.md +125 -0
  246. package/skills/lark-sheets/references/lark-sheets-formula.md +88 -0
  247. package/skills/lark-sheets/references/lark-sheets-row-column-management.md +151 -0
  248. package/skills/lark-sheets/references/lark-sheets-sheet-management.md +164 -0
  249. package/skills/lark-sheets/references/lark-sheets-spreadsheet-management.md +140 -0
  250. package/skills/lark-skill-maker/SKILL.md +85 -0
  251. package/skills/lark-slides/SKILL.md +296 -0
  252. package/skills/lark-slides/assets/templates/administration--all_hands_meeting.xml +1999 -0
  253. package/skills/lark-slides/assets/templates/administration--annual_gala.xml +1160 -0
  254. package/skills/lark-slides/assets/templates/administration--company_intro.xml +1376 -0
  255. package/skills/lark-slides/assets/templates/administration--corporate_culture.xml +1765 -0
  256. package/skills/lark-slides/assets/templates/hr--employee_training.xml +912 -0
  257. package/skills/lark-slides/assets/templates/hr--employee_training_workshop.xml +1504 -0
  258. package/skills/lark-slides/assets/templates/hr--onboarding.xml +933 -0
  259. package/skills/lark-slides/assets/templates/marketing--brand_communication.xml +1367 -0
  260. package/skills/lark-slides/assets/templates/marketing--brand_logo_design.xml +1347 -0
  261. package/skills/lark-slides/assets/templates/marketing--brand_operations_plan.xml +1309 -0
  262. package/skills/lark-slides/assets/templates/marketing--business_plan.xml +1646 -0
  263. package/skills/lark-slides/assets/templates/marketing--marketing_plan.xml +198 -0
  264. package/skills/lark-slides/assets/templates/marketing--marketing_strategy.xml +1484 -0
  265. package/skills/lark-slides/assets/templates/marketing--product_whitepaper.xml +198 -0
  266. package/skills/lark-slides/assets/templates/marketing--roadshow_business_plan.xml +1506 -0
  267. package/skills/lark-slides/assets/templates/misc--book_sharing.xml +198 -0
  268. package/skills/lark-slides/assets/templates/misc--club_event_plan.xml +4885 -0
  269. package/skills/lark-slides/assets/templates/misc--student_career_plan.xml +1854 -0
  270. package/skills/lark-slides/assets/templates/office--dark_general.xml +3763 -0
  271. package/skills/lark-slides/assets/templates/office--dept_annual_report.xml +1192 -0
  272. package/skills/lark-slides/assets/templates/office--light_general.xml +3378 -0
  273. package/skills/lark-slides/assets/templates/office--project_kickoff.xml +3152 -0
  274. package/skills/lark-slides/assets/templates/office--quarterly_review.xml +1253 -0
  275. package/skills/lark-slides/assets/templates/office--work_report.xml +1099 -0
  276. package/skills/lark-slides/assets/templates/office--work_summary.xml +4420 -0
  277. package/skills/lark-slides/assets/templates/office--work_summary_report.xml +1523 -0
  278. package/skills/lark-slides/assets/templates/operations--brand_logo_design.xml +1347 -0
  279. package/skills/lark-slides/assets/templates/operations--brand_operations_plan.xml +1309 -0
  280. package/skills/lark-slides/assets/templates/operations--marketing_plan.xml +1469 -0
  281. package/skills/lark-slides/assets/templates/operations--product_promotion.xml +687 -0
  282. package/skills/lark-slides/assets/templates/personal--experience_sharing.xml +2242 -0
  283. package/skills/lark-slides/assets/templates/personal--personal_resume.xml +2047 -0
  284. package/skills/lark-slides/assets/templates/personal--promotion_defense.xml +1099 -0
  285. package/skills/lark-slides/assets/templates/personal--promotion_report.xml +1039 -0
  286. package/skills/lark-slides/assets/templates/personal--self_intro.xml +696 -0
  287. package/skills/lark-slides/assets/templates/personal--teaching_sharing.xml +3013 -0
  288. package/skills/lark-slides/assets/templates/product--business_case_analysis.xml +1341 -0
  289. package/skills/lark-slides/assets/templates/product--market_analysis.xml +898 -0
  290. package/skills/lark-slides/assets/templates/product--product_analysis.xml +1537 -0
  291. package/skills/lark-slides/assets/templates/product--product_intro.xml +2838 -0
  292. package/skills/lark-slides/assets/templates/product--product_promotion.xml +687 -0
  293. package/skills/lark-slides/assets/templates/product--product_promotion_2.xml +198 -0
  294. package/skills/lark-slides/references/asset-planning.md +124 -0
  295. package/skills/lark-slides/references/examples.md +261 -0
  296. package/skills/lark-slides/references/lark-slides-create.md +137 -0
  297. package/skills/lark-slides/references/lark-slides-edit-workflows.md +142 -0
  298. package/skills/lark-slides/references/lark-slides-media-upload.md +128 -0
  299. package/skills/lark-slides/references/lark-slides-replace-slide.md +239 -0
  300. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +220 -0
  301. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +123 -0
  302. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +110 -0
  303. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +186 -0
  304. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +98 -0
  305. package/skills/lark-slides/references/planning-layer.md +219 -0
  306. package/skills/lark-slides/references/slide-templates.md +201 -0
  307. package/skills/lark-slides/references/slides_demo.xml +226 -0
  308. package/skills/lark-slides/references/slides_xml_schema_definition.xml +3004 -0
  309. package/skills/lark-slides/references/template-catalog.md +463 -0
  310. package/skills/lark-slides/references/template-index.json +198 -0
  311. package/skills/lark-slides/references/troubleshooting.md +198 -0
  312. package/skills/lark-slides/references/validation-checklist.md +102 -0
  313. package/skills/lark-slides/references/visual-planning.md +250 -0
  314. package/skills/lark-slides/references/xml-format-guide.md +369 -0
  315. package/skills/lark-slides/references/xml-schema-quick-ref.md +215 -0
  316. package/skills/lark-slides/scripts/template_tool.py +970 -0
  317. package/skills/lark-slides/scripts/template_tool_test.py +177 -0
  318. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +367 -0
  319. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +263 -0
  320. package/skills/lark-task/SKILL.md +165 -0
  321. package/skills/lark-task/references/lark-task-assign.md +38 -0
  322. package/skills/lark-task/references/lark-task-comment.md +28 -0
  323. package/skills/lark-task/references/lark-task-complete.md +27 -0
  324. package/skills/lark-task/references/lark-task-create.md +57 -0
  325. package/skills/lark-task/references/lark-task-followers.md +35 -0
  326. package/skills/lark-task/references/lark-task-get-my-tasks.md +55 -0
  327. package/skills/lark-task/references/lark-task-get-related-tasks.md +53 -0
  328. package/skills/lark-task/references/lark-task-reminder.md +36 -0
  329. package/skills/lark-task/references/lark-task-reopen.md +27 -0
  330. package/skills/lark-task/references/lark-task-search.md +41 -0
  331. package/skills/lark-task/references/lark-task-set-ancestor.md +32 -0
  332. package/skills/lark-task/references/lark-task-subscribe-event.md +86 -0
  333. package/skills/lark-task/references/lark-task-tasklist-create.md +35 -0
  334. package/skills/lark-task/references/lark-task-tasklist-members.md +36 -0
  335. package/skills/lark-task/references/lark-task-tasklist-search.md +38 -0
  336. package/skills/lark-task/references/lark-task-tasklist-task-add.md +38 -0
  337. package/skills/lark-task/references/lark-task-update.md +37 -0
  338. package/skills/lark-task/references/lark-task-upload-attachment.md +59 -0
  339. package/skills/lark-vc/SKILL.md +168 -0
  340. package/skills/lark-vc/references/lark-vc-notes.md +126 -0
  341. package/skills/lark-vc/references/lark-vc-recording.md +153 -0
  342. package/skills/lark-vc/references/lark-vc-search.md +193 -0
  343. package/skills/lark-vc-agent/SKILL.md +121 -0
  344. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md +247 -0
  345. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-join.md +133 -0
  346. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +111 -0
  347. package/skills/lark-whiteboard/SKILL.md +144 -0
  348. package/skills/lark-whiteboard/references/connectors.md +102 -0
  349. package/skills/lark-whiteboard/references/content.md +40 -0
  350. package/skills/lark-whiteboard/references/image.md +80 -0
  351. package/skills/lark-whiteboard/references/lark-whiteboard-query.md +49 -0
  352. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +100 -0
  353. package/skills/lark-whiteboard/references/layout.md +374 -0
  354. package/skills/lark-whiteboard/references/schema.md +357 -0
  355. package/skills/lark-whiteboard/references/style.md +318 -0
  356. package/skills/lark-whiteboard/references/typography.md +73 -0
  357. package/skills/lark-whiteboard/routes/dsl.md +107 -0
  358. package/skills/lark-whiteboard/routes/mermaid.md +27 -0
  359. package/skills/lark-whiteboard/routes/svg.md +54 -0
  360. package/skills/lark-whiteboard/scenes/architecture.md +433 -0
  361. package/skills/lark-whiteboard/scenes/bar-chart.md +187 -0
  362. package/skills/lark-whiteboard/scenes/comparison.md +135 -0
  363. package/skills/lark-whiteboard/scenes/fishbone.md +238 -0
  364. package/skills/lark-whiteboard/scenes/flowchart.md +198 -0
  365. package/skills/lark-whiteboard/scenes/flywheel.md +195 -0
  366. package/skills/lark-whiteboard/scenes/funnel.md +198 -0
  367. package/skills/lark-whiteboard/scenes/line-chart.md +214 -0
  368. package/skills/lark-whiteboard/scenes/mermaid.md +130 -0
  369. package/skills/lark-whiteboard/scenes/milestone.md +139 -0
  370. package/skills/lark-whiteboard/scenes/organization.md +173 -0
  371. package/skills/lark-whiteboard/scenes/photo-showcase.md +198 -0
  372. package/skills/lark-whiteboard/scenes/pyramid.md +99 -0
  373. package/skills/lark-whiteboard/scenes/swimlane.md +371 -0
  374. package/skills/lark-whiteboard/scenes/treemap.md +198 -0
  375. package/skills/lark-wiki/SKILL.md +119 -0
  376. package/skills/lark-wiki/references/lark-wiki-delete-space.md +205 -0
  377. package/skills/lark-wiki/references/lark-wiki-member-add.md +66 -0
  378. package/skills/lark-wiki/references/lark-wiki-member-list.md +76 -0
  379. package/skills/lark-wiki/references/lark-wiki-member-remove.md +61 -0
  380. package/skills/lark-wiki/references/lark-wiki-move.md +183 -0
  381. package/skills/lark-wiki/references/lark-wiki-node-copy.md +72 -0
  382. package/skills/lark-wiki/references/lark-wiki-node-create.md +127 -0
  383. package/skills/lark-wiki/references/lark-wiki-node-delete.md +62 -0
  384. package/skills/lark-wiki/references/lark-wiki-node-get.md +56 -0
  385. package/skills/lark-wiki/references/lark-wiki-node-list.md +198 -0
  386. package/skills/lark-wiki/references/lark-wiki-space-create.md +46 -0
  387. package/skills/lark-wiki/references/lark-wiki-space-list.md +198 -0
  388. package/skills/lark-workflow-meeting-summary/SKILL.md +104 -0
  389. package/skills/lark-workflow-standup-report/SKILL.md +120 -0
  390. package/skills/mmx-cli/SKILL.md +440 -0
  391. package/src/bot.ts +109 -0
  392. package/src/cards.ts +105 -0
  393. package/src/config.ts +33 -0
  394. package/src/daemon.ts +217 -0
  395. package/src/extension.ts +132 -0
  396. package/src/poller.ts +135 -0
  397. package/src/renderer.ts +47 -0
  398. package/src/session-registry.ts +90 -0
  399. package/src/types.ts +29 -0
  400. package/tests/bot.test.ts +104 -0
  401. package/tests/cards.test.ts +48 -0
  402. package/tests/config.test.ts +59 -0
  403. package/tests/renderer.test.ts +74 -0
  404. package/tests/session-registry.test.ts +94 -0
  405. package/tests/types.test.ts +35 -0
  406. package/tsconfig.json +16 -0
  407. package/vitest.config.ts +7 -0
@@ -0,0 +1,440 @@
1
+ ---
2
+ name: mmx-cli
3
+ description: Use mmx to generate text, images, video, speech, and music via the MiniMax AI platform. Use when the user wants to create media content, chat with MiniMax models, perform web search, or manage MiniMax API resources from the terminal.
4
+ ---
5
+
6
+ # MiniMax CLI — Agent Skill Guide
7
+
8
+ Use `mmx` to generate text, images, video, speech, music, and perform web search via the MiniMax AI platform.
9
+
10
+ ## Prerequisites
11
+
12
+ ```bash
13
+ # Install
14
+ npm install -g mmx-cli
15
+
16
+ # Auth (OAuth persists to ~/.mmx/credentials.json, API key persists to ~/.mmx/config.json)
17
+ mmx auth login --api-key sk-xxxxx
18
+
19
+ # Verify active auth source
20
+ mmx auth status
21
+
22
+ # Or pass per-call
23
+ mmx text chat --api-key sk-xxxxx --message "Hello"
24
+ ```
25
+
26
+ Region is auto-detected. Override with `--region global` or `--region cn`.
27
+
28
+ ---
29
+
30
+ ## Agent Flags
31
+
32
+ Always use these flags in non-interactive (agent/CI) contexts:
33
+
34
+ | Flag | Purpose |
35
+ |---|---|
36
+ | `--non-interactive` | Fail fast on missing args instead of prompting |
37
+ | `--quiet` | Suppress spinners/progress; stdout is pure data |
38
+ | `--output json` | Machine-readable JSON output |
39
+ | `--async` | Return task ID immediately (video generation) |
40
+ | `--dry-run` | Preview the API request without executing |
41
+ | `--yes` | Skip confirmation prompts |
42
+
43
+ ---
44
+
45
+ ## Commands
46
+
47
+ ### text chat
48
+
49
+ Chat completion. Default model: `MiniMax-M2.7`.
50
+
51
+ ```bash
52
+ mmx text chat --message <text> [flags]
53
+ ```
54
+
55
+ | Flag | Type | Description |
56
+ |---|---|---|
57
+ | `--message <text>` | string, **required**, repeatable | Message text. Prefix with `role:` to set role (e.g. `"system:You are helpful"`, `"user:Hello"`) |
58
+ | `--messages-file <path>` | string | JSON file with messages array. Use `-` for stdin |
59
+ | `--system <text>` | string | System prompt |
60
+ | `--model <model>` | string | Model ID (default: `MiniMax-M2.7`) |
61
+ | `--max-tokens <n>` | number | Max tokens (default: 4096) |
62
+ | `--temperature <n>` | number | Sampling temperature (0.0, 1.0] |
63
+ | `--top-p <n>` | number | Nucleus sampling threshold |
64
+ | `--stream` | boolean | Stream tokens (default: on in TTY) |
65
+ | `--tool <json-or-path>` | string, repeatable | Tool definition JSON or file path |
66
+
67
+ ```bash
68
+ # Single message
69
+ mmx text chat --message "user:What is MiniMax?" --output json --quiet
70
+
71
+ # Multi-turn
72
+ mmx text chat \
73
+ --system "You are a coding assistant." \
74
+ --message "user:Write fizzbuzz in Python" \
75
+ --output json
76
+
77
+ # From file
78
+ cat conversation.json | mmx text chat --messages-file - --output json
79
+ ```
80
+
81
+ **stdout**: response text (text mode) or full response object (json mode).
82
+
83
+ ---
84
+
85
+ ### image generate
86
+
87
+ Generate images. Model: `image-01`.
88
+
89
+ ```bash
90
+ mmx image generate --prompt <text> [flags]
91
+ ```
92
+
93
+ | Flag | Type | Description |
94
+ |---|---|---|
95
+ | `--prompt <text>` | string, **required** | Image description |
96
+ | `--aspect-ratio <ratio>` | string | e.g. `16:9`, `1:1`. Ignored if `--width` and `--height` are both set |
97
+ | `--n <count>` | number | Number of images (default: 1) |
98
+ | `--seed <n>` | number | Random seed for reproducible generation |
99
+ | `--width <px>` | number | Width in pixels (512–2048, multiple of 8). Requires `--height` |
100
+ | `--height <px>` | number | Height in pixels (512–2048, multiple of 8). Requires `--width` |
101
+ | `--prompt-optimizer` | boolean | Optimize prompt before generation |
102
+ | `--aigc-watermark` | boolean | Embed AI-generated content watermark |
103
+ | `--subject-ref <params>` | string | Subject reference: `type=character,image=path-or-url` |
104
+ | `--response-format <format>` | string | `url` (default) or `base64`. Base64 bypasses CDN download |
105
+ | `--out-dir <dir>` | string | Download images to directory |
106
+ | `--out-prefix <prefix>` | string | Filename prefix (default: `image`) |
107
+
108
+ ```bash
109
+ mmx image generate --prompt "A cat in a spacesuit" --output json --quiet
110
+ # stdout: image URLs (one per line in quiet mode)
111
+
112
+ mmx image generate --prompt "Logo" --n 3 --out-dir ./gen/ --quiet
113
+ # stdout: saved file paths (one per line)
114
+ ```
115
+
116
+ ---
117
+
118
+ ### video generate
119
+
120
+ Generate video. Default model: `MiniMax-Hailuo-2.3`. This is an async task — by default it polls until completion.
121
+
122
+ ```bash
123
+ mmx video generate --prompt <text> [flags]
124
+ ```
125
+
126
+ | Flag | Type | Description |
127
+ |---|---|---|
128
+ | `--prompt <text>` | string, **required** | Video description |
129
+ | `--model <model>` | string | `MiniMax-Hailuo-2.3` (default) or `MiniMax-Hailuo-2.3-Fast` |
130
+ | `--first-frame <path-or-url>` | string | First frame image |
131
+ | `--callback-url <url>` | string | Webhook URL for completion |
132
+ | `--download <path>` | string | Save video to specific file |
133
+ | `--async` | boolean | Return task ID immediately |
134
+ | `--no-wait` | boolean | Same as `--async` |
135
+ | `--poll-interval <seconds>` | number | Polling interval (default: 5) |
136
+
137
+ ```bash
138
+ # Non-blocking: get task ID
139
+ mmx video generate --prompt "A robot." --async --quiet
140
+ # stdout: {"taskId":"..."}
141
+
142
+ # Blocking: wait and get file path
143
+ mmx video generate --prompt "Ocean waves." --download ocean.mp4 --quiet
144
+ # stdout: ocean.mp4
145
+ ```
146
+
147
+ ### video task get
148
+
149
+ Query status of a video generation task.
150
+
151
+ ```bash
152
+ mmx video task get --task-id <id> [--output json]
153
+ ```
154
+
155
+ ### video download
156
+
157
+ Download a completed video by task ID.
158
+
159
+ ```bash
160
+ mmx video download --file-id <id> [--out <path>]
161
+ ```
162
+
163
+ ---
164
+
165
+ ### speech synthesize
166
+
167
+ Text-to-speech. Default model: `speech-2.8-hd`. Max 10k chars.
168
+
169
+ ```bash
170
+ mmx speech synthesize --text <text> [flags]
171
+ ```
172
+
173
+ | Flag | Type | Description |
174
+ |---|---|---|
175
+ | `--text <text>` | string | Text to synthesize |
176
+ | `--text-file <path>` | string | Read text from file. Use `-` for stdin |
177
+ | `--model <model>` | string | `speech-2.8-hd` (default), `speech-2.6`, `speech-02` |
178
+ | `--voice <id>` | string | Voice ID (default: `English_expressive_narrator`) |
179
+ | `--speed <n>` | number | Speed multiplier |
180
+ | `--volume <n>` | number | Volume level |
181
+ | `--pitch <n>` | number | Pitch adjustment |
182
+ | `--format <fmt>` | string | Audio format (default: `mp3`) |
183
+ | `--sample-rate <hz>` | number | Sample rate (default: 32000) |
184
+ | `--bitrate <bps>` | number | Bitrate (default: 128000) |
185
+ | `--channels <n>` | number | Audio channels (default: 1) |
186
+ | `--language <code>` | string | Language boost |
187
+ | `--subtitles` | boolean | Download and save subtitles as `.srt` file (alongside `--out` audio file). API must support subtitles for the selected model.
188
+ | `--pronunciation <from/to>` | string, repeatable | Custom pronunciation |
189
+ | `--sound-effect <effect>` | string | Add sound effect |
190
+ | `--out <path>` | string | Save audio to file |
191
+ | `--stream` | boolean | Stream raw audio to stdout |
192
+
193
+ ```bash
194
+ mmx speech synthesize --text "Hello world" --out hello.mp3 --quiet
195
+ # stdout: hello.mp3
196
+
197
+ mmx speech synthesize --text "Hello" --subtitles --out hello.mp3
198
+ # saves hello.mp3 + hello.srt (SRT subtitle file)
199
+
200
+ echo "Breaking news." | mmx speech synthesize --text-file - --out news.mp3
201
+ ```
202
+
203
+ ---
204
+
205
+ ### music generate
206
+
207
+ Generate music. Responds well to rich, structured descriptions.
208
+
209
+ **Model:** `music-2.6-free` — unlimited for API key users, RPM = 3.
210
+
211
+ ```bash
212
+ mmx music generate --prompt <text> [--lyrics <text>] [flags]
213
+ ```
214
+
215
+ | Flag | Type | Description |
216
+ |---|---|---|
217
+ | `--prompt <text>` | string | Music style description (can be detailed) |
218
+ | `--lyrics <text>` | string | Song lyrics with structure tags. Required unless `--instrumental` or `--lyrics-optimizer` is used. |
219
+ | `--lyrics-file <path>` | string | Read lyrics from file. Use `-` for stdin |
220
+ | `--lyrics-optimizer` | boolean | Auto-generate lyrics from prompt. Cannot be used with `--lyrics` or `--instrumental`. |
221
+ | `--instrumental` | boolean | Generate instrumental music (no vocals). Cannot be used with `--lyrics`. |
222
+ | `--vocals <text>` | string | Vocal style, e.g. `"warm male baritone"`, `"bright female soprano"`, `"duet with harmonies"` |
223
+ | `--genre <text>` | string | Music genre, e.g. folk, pop, jazz |
224
+ | `--mood <text>` | string | Mood or emotion, e.g. warm, melancholic, uplifting |
225
+ | `--instruments <text>` | string | Instruments to feature, e.g. `"acoustic guitar, piano"` |
226
+ | `--tempo <text>` | string | Tempo description, e.g. fast, slow, moderate |
227
+ | `--bpm <number>` | number | Exact tempo in beats per minute |
228
+ | `--key <text>` | string | Musical key, e.g. C major, A minor, G sharp |
229
+ | `--avoid <text>` | string | Elements to avoid in the generated music |
230
+ | `--use-case <text>` | string | Use case context, e.g. `"background music for video"`, `"theme song"` |
231
+ | `--structure <text>` | string | Song structure, e.g. `"verse-chorus-verse-bridge-chorus"` |
232
+ | `--references <text>` | string | Reference tracks or artists, e.g. `"similar to Ed Sheeran"` |
233
+ | `--extra <text>` | string | Additional fine-grained requirements |
234
+ | `--aigc-watermark` | boolean | Embed AI-generated content watermark |
235
+ | `--format <fmt>` | string | Audio format (default: `mp3`) |
236
+ | `--sample-rate <hz>` | number | Sample rate (default: 44100) |
237
+ | `--bitrate <bps>` | number | Bitrate (default: 256000) |
238
+ | `--out <path>` | string | Save audio to file |
239
+ | `--stream` | boolean | Stream raw audio to stdout |
240
+
241
+ At least one of `--prompt` or `--lyrics` is required.
242
+
243
+ ```bash
244
+ # With lyrics
245
+ mmx music generate --prompt "Upbeat pop" --lyrics "La la la..." --out song.mp3 --quiet
246
+
247
+ # Auto-generate lyrics from prompt
248
+ mmx music generate --prompt "Upbeat pop about summer" --lyrics-optimizer --out summer.mp3 --quiet
249
+
250
+ # Instrumental
251
+ mmx music generate --prompt "Cinematic orchestral, building tension" --instrumental --out bgm.mp3 --quiet
252
+
253
+ # Detailed prompt with vocal characteristics
254
+ mmx music generate --prompt "Warm morning folk" \
255
+ --vocals "male and female duet, harmonies in chorus" \
256
+ --instruments "acoustic guitar, piano" \
257
+ --bpm 95 \
258
+ --lyrics-file song.txt \
259
+ --out duet.mp3
260
+ ```
261
+
262
+ ---
263
+
264
+ ### music cover
265
+
266
+ Generate a cover version of a song based on reference audio.
267
+
268
+ **Model:** `music-cover-free` — unlimited for API key users, RPM = 3.
269
+
270
+ ```bash
271
+ mmx music cover --prompt <text> (--audio <url> | --audio-file <path>) [flags]
272
+ ```
273
+
274
+ | Flag | Type | Description |
275
+ |---|---|---|
276
+ | `--prompt <text>` | string, **required** | Target cover style, e.g. `"Indie folk, acoustic guitar, warm male vocal"` |
277
+ | `--audio <url>` | string | URL of reference audio (mp3, wav, flac, etc. — 6s to 6min, max 50MB) |
278
+ | `--audio-file <path>` | string | Local reference audio file (auto base64-encoded) |
279
+ | `--lyrics <text>` | string | Cover lyrics. If omitted, extracted from reference audio via ASR. |
280
+ | `--lyrics-file <path>` | string | Read lyrics from file. Use `-` for stdin |
281
+ | `--seed <number>` | number | Random seed 0–1000000 for reproducible results |
282
+ | `--format <fmt>` | string | Audio format: `mp3`, `wav`, `pcm` (default: `mp3`) |
283
+ | `--sample-rate <hz>` | number | Sample rate (default: 44100) |
284
+ | `--bitrate <bps>` | number | Bitrate (default: 256000) |
285
+ | `--channel <n>` | number | Channels: `1` (mono) or `2` (stereo, default) |
286
+ | `--out <path>` | string | Save audio to file |
287
+ | `--stream` | boolean | Stream raw audio to stdout |
288
+
289
+ ```bash
290
+ # Cover from URL
291
+ mmx music cover --prompt "Indie folk, acoustic guitar, warm male vocal" \
292
+ --audio https://filecdn.minimax.chat/public/d20eda57-2e36-45bf-9e12-82d9f2e69a86.mp3 --out cover.mp3 --quiet
293
+
294
+ # Cover from local file with custom lyrics
295
+ mmx music cover --prompt "Jazz, piano, slow" \
296
+ --audio-file original.mp3 --lyrics-file lyrics.txt --out jazz_cover.mp3 --quiet
297
+
298
+ # Reproducible result with seed
299
+ mmx music cover --prompt "Pop, upbeat" --audio https://filecdn.minimax.chat/public/d20eda57-2e36-45bf-9e12-82d9f2e69a86.mp3 --seed 42 --out cover.mp3
300
+ ```
301
+
302
+ ---
303
+
304
+ ### vision describe
305
+
306
+ Image understanding via VLM. Provide either `--image` or `--file-id`, not both.
307
+
308
+ ```bash
309
+ mmx vision describe (--image <path-or-url> | --file-id <id>) [flags]
310
+ ```
311
+
312
+ | Flag | Type | Description |
313
+ |---|---|---|
314
+ | `--image <path-or-url>` | string | Local path or URL (auto base64-encoded) |
315
+ | `--file-id <id>` | string | Pre-uploaded file ID (skips base64) |
316
+ | `--prompt <text>` | string | Question about the image (default: `"Describe the image."`) |
317
+
318
+ ```bash
319
+ mmx vision describe --image photo.jpg --prompt "What breed?" --output json
320
+ ```
321
+
322
+ **stdout**: description text (text mode) or full response (json mode).
323
+
324
+ ---
325
+
326
+ ### search query
327
+
328
+ Web search via MiniMax.
329
+
330
+ ```bash
331
+ mmx search query --q <query>
332
+ ```
333
+
334
+ | Flag | Type | Description |
335
+ |---|---|---|
336
+ | `--q <query>` | string, **required** | Search query |
337
+
338
+ ```bash
339
+ mmx search query --q "MiniMax AI" --output json --quiet
340
+ ```
341
+
342
+ ---
343
+
344
+ ### quota show
345
+
346
+ Display Token Plan usage and remaining quotas.
347
+
348
+ ```bash
349
+ mmx quota show [--output json]
350
+ ```
351
+
352
+ ---
353
+
354
+ ## Tool Schema Export
355
+
356
+ Export all commands as Anthropic/OpenAI-compatible JSON tool schemas:
357
+
358
+ ```bash
359
+ # All tool-worthy commands (excludes auth/config/update)
360
+ mmx config export-schema
361
+
362
+ # Single command
363
+ mmx config export-schema --command "video generate"
364
+ ```
365
+
366
+ Use this to dynamically register mmx commands as tools in your agent framework.
367
+
368
+ ---
369
+
370
+ ## Exit Codes
371
+
372
+ | Code | Meaning |
373
+ |---|---|
374
+ | 0 | Success |
375
+ | 1 | General error |
376
+ | 2 | Usage error (bad flags, missing args) |
377
+ | 3 | Authentication error |
378
+ | 4 | Quota exceeded |
379
+ | 5 | Timeout |
380
+ | 10 | Content filter triggered |
381
+
382
+ ---
383
+
384
+ ## Piping Patterns
385
+
386
+ ```bash
387
+ # stdout is always clean data — safe to pipe
388
+ mmx text chat --message "Hi" --output json | jq '.content'
389
+
390
+ # stderr has progress/spinners — discard if needed
391
+ mmx video generate --prompt "Waves" 2>/dev/null
392
+
393
+ # Chain: generate image → describe it
394
+ URL=$(mmx image generate --prompt "A sunset" --quiet)
395
+ mmx vision describe --image "$URL" --quiet
396
+
397
+ # Async video workflow
398
+ TASK=$(mmx video generate --prompt "A robot" --async --quiet | jq -r '.taskId')
399
+ mmx video task get --task-id "$TASK" --output json
400
+ mmx video download --task-id "$TASK" --out robot.mp4
401
+ ```
402
+
403
+ ---
404
+
405
+ ## Configuration Precedence
406
+
407
+ CLI flags → environment variables → `~/.mmx/config.json` → defaults.
408
+
409
+ ```bash
410
+ # Persistent config
411
+ mmx config set --key region --value cn
412
+ mmx config show
413
+
414
+ # Environment
415
+ export MINIMAX_API_KEY=sk-xxxxx
416
+ export MINIMAX_REGION=cn
417
+ ```
418
+
419
+ ### Default Model Configuration
420
+
421
+ Set per-modality defaults so you don't need `--model` every time:
422
+
423
+ ```bash
424
+ # Set defaults
425
+ mmx config set --key default-text-model --value MiniMax-M2.7-highspeed
426
+ mmx config set --key default-speech-model --value speech-2.8-hd
427
+ mmx config set --key default-video-model --value MiniMax-Hailuo-2.3
428
+ mmx config set --key default-music-model --value music-2.6
429
+
430
+ # Use without --model
431
+ mmx text chat --message "Hello"
432
+ mmx speech synthesize --text "Hello" --out hello.mp3
433
+ mmx video generate --prompt "Ocean waves"
434
+ mmx music generate --prompt "Upbeat pop" --instrumental
435
+
436
+ # --model still overrides per-call
437
+ mmx text chat --model MiniMax-M2.7 --message "Hello"
438
+ ```
439
+
440
+ **Resolution priority**: `--model` flag > config default > hardcoded fallback.
package/src/bot.ts ADDED
@@ -0,0 +1,109 @@
1
+ import { SessionRegistry } from "./session-registry.js";
2
+ import type { FeishuEvent } from "./poller.js";
3
+ import type { FeishuImConfig } from "./types.js";
4
+
5
+ export interface RouteResultCommand {
6
+ type: "command";
7
+ command: string;
8
+ args: string;
9
+ chatId: string;
10
+ threadId?: string;
11
+ }
12
+
13
+ export interface RouteResultMessage {
14
+ type: "message";
15
+ text: string;
16
+ chatId: string;
17
+ threadId?: string;
18
+ }
19
+
20
+ export interface RouteResultSkip {
21
+ type: "skip";
22
+ }
23
+
24
+ export type RouteResult = RouteResultCommand | RouteResultMessage | RouteResultSkip;
25
+
26
+ const BOT_OPEN_ID = "__bot_open_id__";
27
+
28
+ export class Bot {
29
+ constructor(
30
+ private registry: SessionRegistry,
31
+ private strategy: FeishuImConfig["strategy"]
32
+ ) {}
33
+
34
+ route(event: FeishuEvent): RouteResult {
35
+ const msg = event.event?.message;
36
+ if (!msg) return { type: "skip" };
37
+
38
+ const chatId = msg.chat_id;
39
+ const text = this.extractText(msg.content, msg.message_type);
40
+
41
+ if (!text) return { type: "skip" };
42
+
43
+ const mentions = msg.mentions ?? [];
44
+ const hasMentions = mentions.length > 0;
45
+ const isMentioned = mentions.some((m) => m.key === BOT_OPEN_ID);
46
+
47
+ if (this.strategy === "mention" && hasMentions && !isMentioned) {
48
+ if (!this.isCommand(text)) return { type: "skip" };
49
+ }
50
+
51
+ const commandResult = this.parseCommand(text);
52
+ if (commandResult) {
53
+ return {
54
+ type: "command",
55
+ command: commandResult.command,
56
+ args: commandResult.args,
57
+ chatId,
58
+ threadId: msg.parent_id,
59
+ };
60
+ }
61
+
62
+ return {
63
+ type: "message",
64
+ text,
65
+ chatId,
66
+ threadId: msg.parent_id,
67
+ };
68
+ }
69
+
70
+ private isCommand(text: string): boolean {
71
+ return ["/new", "/sessions", "/switch", "/rm", "/model"].some((cmd) =>
72
+ text.trim().startsWith(cmd)
73
+ );
74
+ }
75
+
76
+ private parseCommand(
77
+ text: string
78
+ ): { command: string; args: string } | null {
79
+ const trimmed = text.trim();
80
+ if (trimmed === "/sessions" || trimmed === "/model") {
81
+ return { command: trimmed.slice(1), args: "" };
82
+ }
83
+ if (trimmed.startsWith("/new ")) {
84
+ return { command: "new", args: trimmed.slice(5).trim() || "默认会话" };
85
+ }
86
+ if (trimmed === "/new") {
87
+ return { command: "new", args: "默认会话" };
88
+ }
89
+ if (trimmed.startsWith("/switch ")) {
90
+ return { command: "switch", args: trimmed.slice(8).trim() };
91
+ }
92
+ if (trimmed.startsWith("/rm ")) {
93
+ return { command: "rm", args: trimmed.slice(4).trim() };
94
+ }
95
+ return null;
96
+ }
97
+
98
+ private extractText(content: string, msgType: string): string {
99
+ if (msgType === "text") {
100
+ try {
101
+ const parsed = JSON.parse(content);
102
+ return parsed.text ?? "";
103
+ } catch {
104
+ return content;
105
+ }
106
+ }
107
+ return "";
108
+ }
109
+ }
package/src/cards.ts ADDED
@@ -0,0 +1,105 @@
1
+ import type { SessionInfo } from "./types.js";
2
+
3
+ export function buildSessionListCard(
4
+ chatId: string,
5
+ sessions: SessionInfo[],
6
+ activeId: string | null
7
+ ): string {
8
+ const header = {
9
+ title: { tag: "plain_text", content: "Pi 会话管理" },
10
+ template: "blue" as const,
11
+ };
12
+
13
+ const elements: unknown[] = [];
14
+
15
+ if (sessions.length === 0) {
16
+ elements.push({
17
+ tag: "div",
18
+ text: { tag: "lark_md", content: "暂无会话" },
19
+ });
20
+ } else {
21
+ for (const sess of sessions) {
22
+ const isActive = sess.id === activeId;
23
+ const prefix = isActive ? "▶ " : "";
24
+ elements.push({
25
+ tag: "div",
26
+ text: {
27
+ tag: "lark_md",
28
+ content: `${prefix}**${sess.name}** \n\`${sess.id}\``,
29
+ },
30
+ });
31
+ elements.push({ tag: "hr" });
32
+ }
33
+ elements.pop(); // remove last hr
34
+ }
35
+
36
+ elements.push({
37
+ tag: "action",
38
+ actions: [
39
+ {
40
+ tag: "button",
41
+ text: { tag: "plain_text", content: "➕ 新建会话" },
42
+ type: "primary",
43
+ value: JSON.stringify({ action: "new_session", chat_id: chatId }),
44
+ },
45
+ {
46
+ tag: "button",
47
+ text: { tag: "plain_text", content: "🔄 切换模型" },
48
+ value: JSON.stringify({ action: "model_select", chat_id: chatId }),
49
+ },
50
+ ],
51
+ });
52
+
53
+ return JSON.stringify({
54
+ msg_type: "interactive",
55
+ card: { header, elements },
56
+ });
57
+ }
58
+
59
+ export function buildModelSelectCard(
60
+ chatId: string,
61
+ models: Array<{ id: string; name: string }>,
62
+ current: string
63
+ ): string {
64
+ const header = {
65
+ title: { tag: "plain_text", content: "选择模型" },
66
+ template: "blue" as const,
67
+ };
68
+
69
+ const elements: unknown[] = [];
70
+
71
+ elements.push({
72
+ tag: "div",
73
+ text: {
74
+ tag: "lark_md",
75
+ content: `当前: **${models.find((m) => m.id === current)?.name ?? current}**`,
76
+ },
77
+ });
78
+ elements.push({ tag: "hr" });
79
+
80
+ for (const model of models) {
81
+ elements.push({
82
+ tag: "action",
83
+ actions: [
84
+ {
85
+ tag: "button",
86
+ text: {
87
+ tag: "plain_text",
88
+ content: model.id === current ? `▶ ${model.name}` : model.name,
89
+ },
90
+ type: model.id === current ? "primary" : "default",
91
+ value: JSON.stringify({
92
+ action: "select_model",
93
+ chat_id: chatId,
94
+ model_id: model.id,
95
+ }),
96
+ },
97
+ ],
98
+ });
99
+ }
100
+
101
+ return JSON.stringify({
102
+ msg_type: "interactive",
103
+ card: { header, elements },
104
+ });
105
+ }
package/src/config.ts ADDED
@@ -0,0 +1,33 @@
1
+ import { readFileSync, existsSync, mkdirSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import type { FeishuImConfig } from "./types.js";
4
+
5
+ export const DEFAULT_CONFIG: Required<Omit<FeishuImConfig, "model">> = {
6
+ strategy: "mention",
7
+ pollInterval: 5,
8
+ autoStart: false,
9
+ };
10
+
11
+ export function loadConfig(configDir: string): FeishuImConfig {
12
+ if (!existsSync(configDir)) {
13
+ mkdirSync(configDir, { recursive: true });
14
+ }
15
+
16
+ const configPath = join(configDir, "config.json");
17
+
18
+ if (!existsSync(configPath)) {
19
+ return { ...DEFAULT_CONFIG };
20
+ }
21
+
22
+ try {
23
+ const raw = JSON.parse(readFileSync(configPath, "utf-8"));
24
+ return {
25
+ strategy: raw.strategy ?? DEFAULT_CONFIG.strategy,
26
+ model: raw.model,
27
+ pollInterval: raw.pollInterval ?? DEFAULT_CONFIG.pollInterval,
28
+ autoStart: raw.autoStart ?? DEFAULT_CONFIG.autoStart,
29
+ };
30
+ } catch {
31
+ return { ...DEFAULT_CONFIG };
32
+ }
33
+ }