@wagemule/daemon 0.1.2 → 0.1.4

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 (341) hide show
  1. package/README.md +9 -1
  2. package/dist/main.cjs +246 -42
  3. package/dist/main.cjs.map +3 -3
  4. package/dist/skills/larksuite/lark-approval/SKILL.md +56 -0
  5. package/dist/skills/larksuite/lark-attendance/SKILL.md +57 -0
  6. package/dist/skills/larksuite/lark-base/SKILL.md +349 -0
  7. package/dist/skills/larksuite/lark-base/references/dashboard-block-data-config.md +350 -0
  8. package/dist/skills/larksuite/lark-base/references/examples.md +140 -0
  9. package/dist/skills/larksuite/lark-base/references/formula-field-guide.md +735 -0
  10. package/dist/skills/larksuite/lark-base/references/lark-base-advperm-disable.md +83 -0
  11. package/dist/skills/larksuite/lark-base/references/lark-base-advperm-enable.md +80 -0
  12. package/dist/skills/larksuite/lark-base/references/lark-base-base-copy.md +74 -0
  13. package/dist/skills/larksuite/lark-base/references/lark-base-base-create.md +68 -0
  14. package/dist/skills/larksuite/lark-base/references/lark-base-base-get.md +39 -0
  15. package/dist/skills/larksuite/lark-base/references/lark-base-cell-value.md +151 -0
  16. package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-arrange.md +83 -0
  17. package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-block-create.md +108 -0
  18. package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-block-delete.md +46 -0
  19. package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-block-get.md +57 -0
  20. package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-block-list.md +53 -0
  21. package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-block-update.md +84 -0
  22. package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-create.md +73 -0
  23. package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-delete.md +44 -0
  24. package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-get.md +59 -0
  25. package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-list.md +52 -0
  26. package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-update.md +69 -0
  27. package/dist/skills/larksuite/lark-base/references/lark-base-dashboard.md +240 -0
  28. package/dist/skills/larksuite/lark-base/references/lark-base-data-analysis-sop.md +88 -0
  29. package/dist/skills/larksuite/lark-base/references/lark-base-data-query.md +451 -0
  30. package/dist/skills/larksuite/lark-base/references/lark-base-field-create.md +104 -0
  31. package/dist/skills/larksuite/lark-base/references/lark-base-field-delete.md +51 -0
  32. package/dist/skills/larksuite/lark-base/references/lark-base-field-get.md +42 -0
  33. package/dist/skills/larksuite/lark-base/references/lark-base-field-list.md +44 -0
  34. package/dist/skills/larksuite/lark-base/references/lark-base-field-search-options.md +48 -0
  35. package/dist/skills/larksuite/lark-base/references/lark-base-field-update.md +166 -0
  36. package/dist/skills/larksuite/lark-base/references/lark-base-field.md +23 -0
  37. package/dist/skills/larksuite/lark-base/references/lark-base-form-create.md +87 -0
  38. package/dist/skills/larksuite/lark-base/references/lark-base-form-delete.md +64 -0
  39. package/dist/skills/larksuite/lark-base/references/lark-base-form-get.md +68 -0
  40. package/dist/skills/larksuite/lark-base/references/lark-base-form-list.md +73 -0
  41. package/dist/skills/larksuite/lark-base/references/lark-base-form-questions-create.md +118 -0
  42. package/dist/skills/larksuite/lark-base/references/lark-base-form-questions-delete.md +68 -0
  43. package/dist/skills/larksuite/lark-base/references/lark-base-form-questions-list.md +84 -0
  44. package/dist/skills/larksuite/lark-base/references/lark-base-form-questions-update.md +92 -0
  45. package/dist/skills/larksuite/lark-base/references/lark-base-form-questions.md +23 -0
  46. package/dist/skills/larksuite/lark-base/references/lark-base-form-update.md +82 -0
  47. package/dist/skills/larksuite/lark-base/references/lark-base-form.md +24 -0
  48. package/dist/skills/larksuite/lark-base/references/lark-base-history.md +16 -0
  49. package/dist/skills/larksuite/lark-base/references/lark-base-record-batch-create.md +58 -0
  50. package/dist/skills/larksuite/lark-base/references/lark-base-record-batch-update.md +53 -0
  51. package/dist/skills/larksuite/lark-base/references/lark-base-record-delete.md +62 -0
  52. package/dist/skills/larksuite/lark-base/references/lark-base-record-history-list.md +86 -0
  53. package/dist/skills/larksuite/lark-base/references/lark-base-record-share-link-create.md +72 -0
  54. package/dist/skills/larksuite/lark-base/references/lark-base-record-upload-attachment.md +50 -0
  55. package/dist/skills/larksuite/lark-base/references/lark-base-record-upsert.md +64 -0
  56. package/dist/skills/larksuite/lark-base/references/lark-base-record.md +29 -0
  57. package/dist/skills/larksuite/lark-base/references/lark-base-role-create.md +89 -0
  58. package/dist/skills/larksuite/lark-base/references/lark-base-role-delete.md +83 -0
  59. package/dist/skills/larksuite/lark-base/references/lark-base-role-get.md +87 -0
  60. package/dist/skills/larksuite/lark-base/references/lark-base-role-list.md +81 -0
  61. package/dist/skills/larksuite/lark-base/references/lark-base-role-update.md +94 -0
  62. package/dist/skills/larksuite/lark-base/references/lark-base-shortcut-field-properties.md +481 -0
  63. package/dist/skills/larksuite/lark-base/references/lark-base-table-create.md +62 -0
  64. package/dist/skills/larksuite/lark-base/references/lark-base-table-delete.md +51 -0
  65. package/dist/skills/larksuite/lark-base/references/lark-base-table-get.md +46 -0
  66. package/dist/skills/larksuite/lark-base/references/lark-base-table-list.md +43 -0
  67. package/dist/skills/larksuite/lark-base/references/lark-base-table-update.md +49 -0
  68. package/dist/skills/larksuite/lark-base/references/lark-base-table.md +20 -0
  69. package/dist/skills/larksuite/lark-base/references/lark-base-view-create.md +50 -0
  70. package/dist/skills/larksuite/lark-base/references/lark-base-view-delete.md +48 -0
  71. package/dist/skills/larksuite/lark-base/references/lark-base-view-get-card.md +38 -0
  72. package/dist/skills/larksuite/lark-base/references/lark-base-view-get-filter.md +38 -0
  73. package/dist/skills/larksuite/lark-base/references/lark-base-view-get-group.md +38 -0
  74. package/dist/skills/larksuite/lark-base/references/lark-base-view-get-sort.md +38 -0
  75. package/dist/skills/larksuite/lark-base/references/lark-base-view-get-timebar.md +38 -0
  76. package/dist/skills/larksuite/lark-base/references/lark-base-view-get-visible-fields.md +28 -0
  77. package/dist/skills/larksuite/lark-base/references/lark-base-view-get.md +38 -0
  78. package/dist/skills/larksuite/lark-base/references/lark-base-view-list.md +44 -0
  79. package/dist/skills/larksuite/lark-base/references/lark-base-view-rename.md +44 -0
  80. package/dist/skills/larksuite/lark-base/references/lark-base-view-set-card.md +55 -0
  81. package/dist/skills/larksuite/lark-base/references/lark-base-view-set-filter.md +181 -0
  82. package/dist/skills/larksuite/lark-base/references/lark-base-view-set-group.md +65 -0
  83. package/dist/skills/larksuite/lark-base/references/lark-base-view-set-sort.md +63 -0
  84. package/dist/skills/larksuite/lark-base/references/lark-base-view-set-timebar.md +51 -0
  85. package/dist/skills/larksuite/lark-base/references/lark-base-view-set-visible-fields.md +46 -0
  86. package/dist/skills/larksuite/lark-base/references/lark-base-view.md +44 -0
  87. package/dist/skills/larksuite/lark-base/references/lark-base-workflow-create.md +180 -0
  88. package/dist/skills/larksuite/lark-base/references/lark-base-workflow-disable.md +94 -0
  89. package/dist/skills/larksuite/lark-base/references/lark-base-workflow-enable.md +94 -0
  90. package/dist/skills/larksuite/lark-base/references/lark-base-workflow-get.md +147 -0
  91. package/dist/skills/larksuite/lark-base/references/lark-base-workflow-guide.md +718 -0
  92. package/dist/skills/larksuite/lark-base/references/lark-base-workflow-list.md +124 -0
  93. package/dist/skills/larksuite/lark-base/references/lark-base-workflow-schema.md +935 -0
  94. package/dist/skills/larksuite/lark-base/references/lark-base-workflow-update.md +167 -0
  95. package/dist/skills/larksuite/lark-base/references/lark-base-workflow.md +23 -0
  96. package/dist/skills/larksuite/lark-base/references/lark-base-workspace.md +18 -0
  97. package/dist/skills/larksuite/lark-base/references/lookup-field-guide.md +510 -0
  98. package/dist/skills/larksuite/lark-base/references/role-config.md +539 -0
  99. package/dist/skills/larksuite/lark-calendar/SKILL.md +154 -0
  100. package/dist/skills/larksuite/lark-calendar/references/lark-calendar-agenda.md +78 -0
  101. package/dist/skills/larksuite/lark-calendar/references/lark-calendar-create.md +109 -0
  102. package/dist/skills/larksuite/lark-calendar/references/lark-calendar-freebusy.md +124 -0
  103. package/dist/skills/larksuite/lark-calendar/references/lark-calendar-room-find.md +113 -0
  104. package/dist/skills/larksuite/lark-calendar/references/lark-calendar-rsvp.md +42 -0
  105. package/dist/skills/larksuite/lark-calendar/references/lark-calendar-schedule-meeting.md +265 -0
  106. package/dist/skills/larksuite/lark-calendar/references/lark-calendar-suggestion.md +125 -0
  107. package/dist/skills/larksuite/lark-calendar/references/lark-calendar-update.md +105 -0
  108. package/dist/skills/larksuite/lark-contact/SKILL.md +45 -0
  109. package/dist/skills/larksuite/lark-contact/references/lark-contact-get-user.md +19 -0
  110. package/dist/skills/larksuite/lark-contact/references/lark-contact-search-user.md +124 -0
  111. package/dist/skills/larksuite/lark-doc/SKILL.md +69 -0
  112. package/dist/skills/larksuite/lark-doc/references/lark-doc-create.md +89 -0
  113. package/dist/skills/larksuite/lark-doc/references/lark-doc-fetch.md +141 -0
  114. package/dist/skills/larksuite/lark-doc/references/lark-doc-md.md +71 -0
  115. package/dist/skills/larksuite/lark-doc/references/lark-doc-media-download.md +50 -0
  116. package/dist/skills/larksuite/lark-doc/references/lark-doc-media-insert.md +114 -0
  117. package/dist/skills/larksuite/lark-doc/references/lark-doc-media-preview.md +41 -0
  118. package/dist/skills/larksuite/lark-doc/references/lark-doc-search.md +217 -0
  119. package/dist/skills/larksuite/lark-doc/references/lark-doc-update.md +252 -0
  120. package/dist/skills/larksuite/lark-doc/references/lark-doc-whiteboard.md +100 -0
  121. package/dist/skills/larksuite/lark-doc/references/lark-doc-xml.md +169 -0
  122. package/dist/skills/larksuite/lark-doc/references/style/lark-doc-create-workflow.md +56 -0
  123. package/dist/skills/larksuite/lark-doc/references/style/lark-doc-style.md +106 -0
  124. package/dist/skills/larksuite/lark-doc/references/style/lark-doc-update-workflow.md +54 -0
  125. package/dist/skills/larksuite/lark-drive/SKILL.md +343 -0
  126. package/dist/skills/larksuite/lark-drive/references/lark-drive-add-comment.md +169 -0
  127. package/dist/skills/larksuite/lark-drive/references/lark-drive-apply-permission.md +77 -0
  128. package/dist/skills/larksuite/lark-drive/references/lark-drive-create-folder.md +73 -0
  129. package/dist/skills/larksuite/lark-drive/references/lark-drive-create-shortcut.md +103 -0
  130. package/dist/skills/larksuite/lark-drive/references/lark-drive-delete.md +79 -0
  131. package/dist/skills/larksuite/lark-drive/references/lark-drive-download.md +31 -0
  132. package/dist/skills/larksuite/lark-drive/references/lark-drive-export-download.md +50 -0
  133. package/dist/skills/larksuite/lark-drive/references/lark-drive-export.md +119 -0
  134. package/dist/skills/larksuite/lark-drive/references/lark-drive-import.md +154 -0
  135. package/dist/skills/larksuite/lark-drive/references/lark-drive-move.md +120 -0
  136. package/dist/skills/larksuite/lark-drive/references/lark-drive-pull.md +137 -0
  137. package/dist/skills/larksuite/lark-drive/references/lark-drive-push.md +162 -0
  138. package/dist/skills/larksuite/lark-drive/references/lark-drive-reactions.md +113 -0
  139. package/dist/skills/larksuite/lark-drive/references/lark-drive-search.md +239 -0
  140. package/dist/skills/larksuite/lark-drive/references/lark-drive-status.md +137 -0
  141. package/dist/skills/larksuite/lark-drive/references/lark-drive-task-result.md +302 -0
  142. package/dist/skills/larksuite/lark-drive/references/lark-drive-upload.md +101 -0
  143. package/dist/skills/larksuite/lark-event/SKILL.md +145 -0
  144. package/dist/skills/larksuite/lark-event/references/lark-event-im.md +86 -0
  145. package/dist/skills/larksuite/lark-im/SKILL.md +162 -0
  146. package/dist/skills/larksuite/lark-im/references/lark-im-chat-create.md +162 -0
  147. package/dist/skills/larksuite/lark-im/references/lark-im-chat-identity.md +55 -0
  148. package/dist/skills/larksuite/lark-im/references/lark-im-chat-list.md +113 -0
  149. package/dist/skills/larksuite/lark-im/references/lark-im-chat-messages-list.md +142 -0
  150. package/dist/skills/larksuite/lark-im/references/lark-im-chat-search.md +136 -0
  151. package/dist/skills/larksuite/lark-im/references/lark-im-chat-update.md +84 -0
  152. package/dist/skills/larksuite/lark-im/references/lark-im-flag-cancel.md +67 -0
  153. package/dist/skills/larksuite/lark-im/references/lark-im-flag-create.md +67 -0
  154. package/dist/skills/larksuite/lark-im/references/lark-im-flag-list.md +100 -0
  155. package/dist/skills/larksuite/lark-im/references/lark-im-messages-mget.md +95 -0
  156. package/dist/skills/larksuite/lark-im/references/lark-im-messages-reply.md +222 -0
  157. package/dist/skills/larksuite/lark-im/references/lark-im-messages-resources-download.md +94 -0
  158. package/dist/skills/larksuite/lark-im/references/lark-im-messages-search.md +217 -0
  159. package/dist/skills/larksuite/lark-im/references/lark-im-messages-send.md +223 -0
  160. package/dist/skills/larksuite/lark-im/references/lark-im-reactions.md +297 -0
  161. package/dist/skills/larksuite/lark-im/references/lark-im-threads-messages-list.md +111 -0
  162. package/dist/skills/larksuite/lark-mail/SKILL.md +648 -0
  163. package/dist/skills/larksuite/lark-mail/references/lark-mail-decline-receipt.md +115 -0
  164. package/dist/skills/larksuite/lark-mail/references/lark-mail-draft-create.md +123 -0
  165. package/dist/skills/larksuite/lark-mail/references/lark-mail-draft-edit.md +400 -0
  166. package/dist/skills/larksuite/lark-mail/references/lark-mail-forward.md +232 -0
  167. package/dist/skills/larksuite/lark-mail/references/lark-mail-message.md +230 -0
  168. package/dist/skills/larksuite/lark-mail/references/lark-mail-messages.md +108 -0
  169. package/dist/skills/larksuite/lark-mail/references/lark-mail-reply-all.md +206 -0
  170. package/dist/skills/larksuite/lark-mail/references/lark-mail-reply.md +242 -0
  171. package/dist/skills/larksuite/lark-mail/references/lark-mail-send-receipt.md +120 -0
  172. package/dist/skills/larksuite/lark-mail/references/lark-mail-send.md +216 -0
  173. package/dist/skills/larksuite/lark-mail/references/lark-mail-share-to-chat.md +87 -0
  174. package/dist/skills/larksuite/lark-mail/references/lark-mail-signature.md +98 -0
  175. package/dist/skills/larksuite/lark-mail/references/lark-mail-template-create.md +129 -0
  176. package/dist/skills/larksuite/lark-mail/references/lark-mail-template-update.md +150 -0
  177. package/dist/skills/larksuite/lark-mail/references/lark-mail-thread.md +111 -0
  178. package/dist/skills/larksuite/lark-mail/references/lark-mail-triage.md +122 -0
  179. package/dist/skills/larksuite/lark-mail/references/lark-mail-watch.md +94 -0
  180. package/dist/skills/larksuite/lark-markdown/SKILL.md +46 -0
  181. package/dist/skills/larksuite/lark-markdown/references/lark-markdown-create.md +86 -0
  182. package/dist/skills/larksuite/lark-markdown/references/lark-markdown-fetch.md +79 -0
  183. package/dist/skills/larksuite/lark-markdown/references/lark-markdown-overwrite.md +85 -0
  184. package/dist/skills/larksuite/lark-minutes/SKILL.md +139 -0
  185. package/dist/skills/larksuite/lark-minutes/references/lark-minutes-download.md +137 -0
  186. package/dist/skills/larksuite/lark-minutes/references/lark-minutes-search.md +206 -0
  187. package/dist/skills/larksuite/lark-minutes/references/lark-minutes-upload.md +104 -0
  188. package/dist/skills/larksuite/lark-okr/SKILL.md +133 -0
  189. package/dist/skills/larksuite/lark-okr/references/lark-okr-contentblock.md +359 -0
  190. package/dist/skills/larksuite/lark-okr/references/lark-okr-cycle-detail.md +84 -0
  191. package/dist/skills/larksuite/lark-okr/references/lark-okr-cycle-list.md +90 -0
  192. package/dist/skills/larksuite/lark-okr/references/lark-okr-entities.md +329 -0
  193. package/dist/skills/larksuite/lark-okr/references/lark-okr-image-upload.md +116 -0
  194. package/dist/skills/larksuite/lark-okr/references/lark-okr-progress-create.md +81 -0
  195. package/dist/skills/larksuite/lark-okr/references/lark-okr-progress-delete.md +47 -0
  196. package/dist/skills/larksuite/lark-okr/references/lark-okr-progress-get.md +62 -0
  197. package/dist/skills/larksuite/lark-okr/references/lark-okr-progress-list.md +80 -0
  198. package/dist/skills/larksuite/lark-okr/references/lark-okr-progress-update.md +81 -0
  199. package/dist/skills/larksuite/lark-openapi-explorer/SKILL.md +153 -0
  200. package/dist/skills/larksuite/lark-shared/SKILL.md +138 -0
  201. package/dist/skills/larksuite/lark-sheets/SKILL.md +345 -0
  202. package/dist/skills/larksuite/lark-sheets/references/lark-sheets-cell-data.md +197 -0
  203. package/dist/skills/larksuite/lark-sheets/references/lark-sheets-cell-images.md +59 -0
  204. package/dist/skills/larksuite/lark-sheets/references/lark-sheets-cell-style-and-merge.md +141 -0
  205. package/dist/skills/larksuite/lark-sheets/references/lark-sheets-dropdown.md +133 -0
  206. package/dist/skills/larksuite/lark-sheets/references/lark-sheets-filter-views.md +193 -0
  207. package/dist/skills/larksuite/lark-sheets/references/lark-sheets-float-images.md +125 -0
  208. package/dist/skills/larksuite/lark-sheets/references/lark-sheets-formula.md +88 -0
  209. package/dist/skills/larksuite/lark-sheets/references/lark-sheets-row-column-management.md +151 -0
  210. package/dist/skills/larksuite/lark-sheets/references/lark-sheets-sheet-management.md +164 -0
  211. package/dist/skills/larksuite/lark-sheets/references/lark-sheets-spreadsheet-management.md +134 -0
  212. package/dist/skills/larksuite/lark-skill-maker/SKILL.md +85 -0
  213. package/dist/skills/larksuite/lark-slides/SKILL.md +525 -0
  214. package/dist/skills/larksuite/lark-slides/assets/templates/administration--all_hands_meeting.xml +1999 -0
  215. package/dist/skills/larksuite/lark-slides/assets/templates/administration--annual_gala.xml +1160 -0
  216. package/dist/skills/larksuite/lark-slides/assets/templates/administration--company_intro.xml +1376 -0
  217. package/dist/skills/larksuite/lark-slides/assets/templates/administration--corporate_culture.xml +1765 -0
  218. package/dist/skills/larksuite/lark-slides/assets/templates/hr--employee_training.xml +912 -0
  219. package/dist/skills/larksuite/lark-slides/assets/templates/hr--employee_training_workshop.xml +1504 -0
  220. package/dist/skills/larksuite/lark-slides/assets/templates/hr--onboarding.xml +933 -0
  221. package/dist/skills/larksuite/lark-slides/assets/templates/marketing--brand_communication.xml +1367 -0
  222. package/dist/skills/larksuite/lark-slides/assets/templates/marketing--brand_logo_design.xml +1347 -0
  223. package/dist/skills/larksuite/lark-slides/assets/templates/marketing--brand_operations_plan.xml +1309 -0
  224. package/dist/skills/larksuite/lark-slides/assets/templates/marketing--business_plan.xml +1646 -0
  225. package/dist/skills/larksuite/lark-slides/assets/templates/marketing--marketing_plan.xml +1469 -0
  226. package/dist/skills/larksuite/lark-slides/assets/templates/marketing--marketing_strategy.xml +1484 -0
  227. package/dist/skills/larksuite/lark-slides/assets/templates/marketing--product_whitepaper.xml +1455 -0
  228. package/dist/skills/larksuite/lark-slides/assets/templates/marketing--roadshow_business_plan.xml +1506 -0
  229. package/dist/skills/larksuite/lark-slides/assets/templates/misc--book_sharing.xml +1338 -0
  230. package/dist/skills/larksuite/lark-slides/assets/templates/misc--club_event_plan.xml +4885 -0
  231. package/dist/skills/larksuite/lark-slides/assets/templates/misc--student_career_plan.xml +1854 -0
  232. package/dist/skills/larksuite/lark-slides/assets/templates/office--dark_general.xml +3763 -0
  233. package/dist/skills/larksuite/lark-slides/assets/templates/office--dept_annual_report.xml +1192 -0
  234. package/dist/skills/larksuite/lark-slides/assets/templates/office--light_general.xml +3378 -0
  235. package/dist/skills/larksuite/lark-slides/assets/templates/office--project_kickoff.xml +3152 -0
  236. package/dist/skills/larksuite/lark-slides/assets/templates/office--quarterly_review.xml +1253 -0
  237. package/dist/skills/larksuite/lark-slides/assets/templates/office--work_report.xml +1099 -0
  238. package/dist/skills/larksuite/lark-slides/assets/templates/office--work_summary.xml +4420 -0
  239. package/dist/skills/larksuite/lark-slides/assets/templates/office--work_summary_report.xml +1523 -0
  240. package/dist/skills/larksuite/lark-slides/assets/templates/operations--brand_logo_design.xml +1347 -0
  241. package/dist/skills/larksuite/lark-slides/assets/templates/operations--brand_operations_plan.xml +1309 -0
  242. package/dist/skills/larksuite/lark-slides/assets/templates/operations--marketing_plan.xml +1469 -0
  243. package/dist/skills/larksuite/lark-slides/assets/templates/operations--product_promotion.xml +687 -0
  244. package/dist/skills/larksuite/lark-slides/assets/templates/personal--experience_sharing.xml +2242 -0
  245. package/dist/skills/larksuite/lark-slides/assets/templates/personal--personal_resume.xml +2047 -0
  246. package/dist/skills/larksuite/lark-slides/assets/templates/personal--promotion_defense.xml +1099 -0
  247. package/dist/skills/larksuite/lark-slides/assets/templates/personal--promotion_report.xml +1039 -0
  248. package/dist/skills/larksuite/lark-slides/assets/templates/personal--self_intro.xml +696 -0
  249. package/dist/skills/larksuite/lark-slides/assets/templates/personal--teaching_sharing.xml +3013 -0
  250. package/dist/skills/larksuite/lark-slides/assets/templates/product--business_case_analysis.xml +1341 -0
  251. package/dist/skills/larksuite/lark-slides/assets/templates/product--market_analysis.xml +898 -0
  252. package/dist/skills/larksuite/lark-slides/assets/templates/product--product_analysis.xml +1537 -0
  253. package/dist/skills/larksuite/lark-slides/assets/templates/product--product_intro.xml +2838 -0
  254. package/dist/skills/larksuite/lark-slides/assets/templates/product--product_promotion.xml +687 -0
  255. package/dist/skills/larksuite/lark-slides/assets/templates/product--product_promotion_2.xml +687 -0
  256. package/dist/skills/larksuite/lark-slides/references/examples.md +261 -0
  257. package/dist/skills/larksuite/lark-slides/references/lark-slides-create.md +137 -0
  258. package/dist/skills/larksuite/lark-slides/references/lark-slides-edit-workflows.md +142 -0
  259. package/dist/skills/larksuite/lark-slides/references/lark-slides-media-upload.md +128 -0
  260. package/dist/skills/larksuite/lark-slides/references/lark-slides-replace-slide.md +239 -0
  261. package/dist/skills/larksuite/lark-slides/references/lark-slides-xml-presentation-slide-create.md +221 -0
  262. package/dist/skills/larksuite/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +123 -0
  263. package/dist/skills/larksuite/lark-slides/references/lark-slides-xml-presentation-slide-get.md +110 -0
  264. package/dist/skills/larksuite/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +186 -0
  265. package/dist/skills/larksuite/lark-slides/references/lark-slides-xml-presentations-get.md +98 -0
  266. package/dist/skills/larksuite/lark-slides/references/slide-templates.md +201 -0
  267. package/dist/skills/larksuite/lark-slides/references/slides_demo.xml +226 -0
  268. package/dist/skills/larksuite/lark-slides/references/slides_xml_schema_definition.xml +3004 -0
  269. package/dist/skills/larksuite/lark-slides/references/template-catalog.md +464 -0
  270. package/dist/skills/larksuite/lark-slides/references/template-index.json +1853 -0
  271. package/dist/skills/larksuite/lark-slides/references/xml-format-guide.md +369 -0
  272. package/dist/skills/larksuite/lark-slides/references/xml-schema-quick-ref.md +215 -0
  273. package/dist/skills/larksuite/lark-slides/scripts/layout_lint.py +349 -0
  274. package/dist/skills/larksuite/lark-slides/scripts/layout_lint_test.py +159 -0
  275. package/dist/skills/larksuite/lark-slides/scripts/template_tool.py +970 -0
  276. package/dist/skills/larksuite/lark-slides/scripts/template_tool_test.py +177 -0
  277. package/dist/skills/larksuite/lark-task/SKILL.md +165 -0
  278. package/dist/skills/larksuite/lark-task/references/lark-task-assign.md +38 -0
  279. package/dist/skills/larksuite/lark-task/references/lark-task-comment.md +28 -0
  280. package/dist/skills/larksuite/lark-task/references/lark-task-complete.md +27 -0
  281. package/dist/skills/larksuite/lark-task/references/lark-task-create.md +57 -0
  282. package/dist/skills/larksuite/lark-task/references/lark-task-followers.md +35 -0
  283. package/dist/skills/larksuite/lark-task/references/lark-task-get-my-tasks.md +55 -0
  284. package/dist/skills/larksuite/lark-task/references/lark-task-get-related-tasks.md +53 -0
  285. package/dist/skills/larksuite/lark-task/references/lark-task-reminder.md +36 -0
  286. package/dist/skills/larksuite/lark-task/references/lark-task-reopen.md +27 -0
  287. package/dist/skills/larksuite/lark-task/references/lark-task-search.md +41 -0
  288. package/dist/skills/larksuite/lark-task/references/lark-task-set-ancestor.md +32 -0
  289. package/dist/skills/larksuite/lark-task/references/lark-task-subscribe-event.md +86 -0
  290. package/dist/skills/larksuite/lark-task/references/lark-task-tasklist-create.md +35 -0
  291. package/dist/skills/larksuite/lark-task/references/lark-task-tasklist-members.md +36 -0
  292. package/dist/skills/larksuite/lark-task/references/lark-task-tasklist-search.md +38 -0
  293. package/dist/skills/larksuite/lark-task/references/lark-task-tasklist-task-add.md +38 -0
  294. package/dist/skills/larksuite/lark-task/references/lark-task-update.md +37 -0
  295. package/dist/skills/larksuite/lark-task/references/lark-task-upload-attachment.md +59 -0
  296. package/dist/skills/larksuite/lark-vc/SKILL.md +168 -0
  297. package/dist/skills/larksuite/lark-vc/references/lark-vc-notes.md +126 -0
  298. package/dist/skills/larksuite/lark-vc/references/lark-vc-recording.md +153 -0
  299. package/dist/skills/larksuite/lark-vc/references/lark-vc-search.md +176 -0
  300. package/dist/skills/larksuite/lark-vc-agent/SKILL.md +121 -0
  301. package/dist/skills/larksuite/lark-vc-agent/references/lark-vc-agent-meeting-events.md +247 -0
  302. package/dist/skills/larksuite/lark-vc-agent/references/lark-vc-agent-meeting-join.md +133 -0
  303. package/dist/skills/larksuite/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +111 -0
  304. package/dist/skills/larksuite/lark-whiteboard/SKILL.md +144 -0
  305. package/dist/skills/larksuite/lark-whiteboard/references/connectors.md +102 -0
  306. package/dist/skills/larksuite/lark-whiteboard/references/content.md +40 -0
  307. package/dist/skills/larksuite/lark-whiteboard/references/image.md +80 -0
  308. package/dist/skills/larksuite/lark-whiteboard/references/lark-whiteboard-query.md +49 -0
  309. package/dist/skills/larksuite/lark-whiteboard/references/lark-whiteboard-update.md +100 -0
  310. package/dist/skills/larksuite/lark-whiteboard/references/layout.md +374 -0
  311. package/dist/skills/larksuite/lark-whiteboard/references/schema.md +357 -0
  312. package/dist/skills/larksuite/lark-whiteboard/references/style.md +318 -0
  313. package/dist/skills/larksuite/lark-whiteboard/references/typography.md +73 -0
  314. package/dist/skills/larksuite/lark-whiteboard/routes/dsl.md +107 -0
  315. package/dist/skills/larksuite/lark-whiteboard/routes/mermaid.md +27 -0
  316. package/dist/skills/larksuite/lark-whiteboard/routes/svg.md +54 -0
  317. package/dist/skills/larksuite/lark-whiteboard/scenes/architecture.md +433 -0
  318. package/dist/skills/larksuite/lark-whiteboard/scenes/bar-chart.md +187 -0
  319. package/dist/skills/larksuite/lark-whiteboard/scenes/comparison.md +135 -0
  320. package/dist/skills/larksuite/lark-whiteboard/scenes/fishbone.md +238 -0
  321. package/dist/skills/larksuite/lark-whiteboard/scenes/flowchart.md +185 -0
  322. package/dist/skills/larksuite/lark-whiteboard/scenes/flywheel.md +195 -0
  323. package/dist/skills/larksuite/lark-whiteboard/scenes/funnel.md +101 -0
  324. package/dist/skills/larksuite/lark-whiteboard/scenes/line-chart.md +214 -0
  325. package/dist/skills/larksuite/lark-whiteboard/scenes/mermaid.md +130 -0
  326. package/dist/skills/larksuite/lark-whiteboard/scenes/milestone.md +139 -0
  327. package/dist/skills/larksuite/lark-whiteboard/scenes/organization.md +173 -0
  328. package/dist/skills/larksuite/lark-whiteboard/scenes/photo-showcase.md +126 -0
  329. package/dist/skills/larksuite/lark-whiteboard/scenes/pyramid.md +99 -0
  330. package/dist/skills/larksuite/lark-whiteboard/scenes/swimlane.md +371 -0
  331. package/dist/skills/larksuite/lark-whiteboard/scenes/treemap.md +216 -0
  332. package/dist/skills/larksuite/lark-wiki/SKILL.md +111 -0
  333. package/dist/skills/larksuite/lark-wiki/references/lark-wiki-delete-space.md +205 -0
  334. package/dist/skills/larksuite/lark-wiki/references/lark-wiki-move.md +183 -0
  335. package/dist/skills/larksuite/lark-wiki/references/lark-wiki-node-copy.md +72 -0
  336. package/dist/skills/larksuite/lark-wiki/references/lark-wiki-node-create.md +127 -0
  337. package/dist/skills/larksuite/lark-wiki/references/lark-wiki-node-list.md +88 -0
  338. package/dist/skills/larksuite/lark-wiki/references/lark-wiki-space-list.md +68 -0
  339. package/dist/skills/larksuite/lark-workflow-meeting-summary/SKILL.md +104 -0
  340. package/dist/skills/larksuite/lark-workflow-standup-report/SKILL.md +120 -0
  341. package/package.json +2 -1
package/README.md CHANGED
@@ -7,7 +7,7 @@ Wage Mule local daemon connects local agent runtimes to a Workspace Server.
7
7
  Use the command shown in the Wage Mule Web machine page. It pins the daemon version and includes the pairing token for the current space:
8
8
 
9
9
  ```bash
10
- npx -y @wagemule/daemon@0.1.2 start --server-url "https://your-server" --api-key "daemon_xxx"
10
+ npx -y @wagemule/daemon@0.1.4 start --server-url "https://your-server" --api-key "daemon_xxx"
11
11
  ```
12
12
 
13
13
  The v0.1 daemon runs in the foreground. Keep the terminal open while the machine should stay online.
@@ -24,6 +24,14 @@ wm-daemon start --server-url "https://your-server" --api-key "daemon_xxx"
24
24
 
25
25
  `doctor` reports local runtime binaries and versions. Missing runtimes are reported honestly; install or log in to the relevant runtime CLI before creating agents for it.
26
26
 
27
+ ## Feishu delegation
28
+
29
+ The npm package depends on the official `@larksuite/cli`, so `npx -y @wagemule/daemon@0.1.4 ...` also installs the `lark-cli` binary. When a platform human enables Feishu delegation for an agent, the daemon injects the official Lark/Feishu CLI skills into that agent workspace and writes a local `.wm/lark-cli` wrapper.
30
+
31
+ The wrapper reads the delegated user token from `.wm/feishu/token` at runtime and sets `LARKSUITE_CLI_APP_ID`, `LARKSUITE_CLI_USER_ACCESS_TOKEN`, `LARKSUITE_CLI_DEFAULT_AS=user`, `LARKSUITE_CLI_STRICT_MODE=user`, and `LARKSUITE_CLI_BRAND=feishu`. The token is not embedded in the wrapper. If the token is missing or cleared, `lark-cli` exits with `Feishu token unavailable`.
32
+
33
+ The platform Feishu app must include the IM read/search scopes required by the official skills, including `im:message:readonly`, `im:chat:read`, and `search:message`. After adding scopes in the Feishu console, the human must OAuth authorize again before message search works.
34
+
27
35
  ## Required start options
28
36
 
29
37
  - `--server-url`: Workspace Server HTTP URL.
package/dist/main.cjs CHANGED
@@ -612,7 +612,18 @@ ${userPrompt}`;
612
612
  }
613
613
  async handleServerRequest(request) {
614
614
  if (request.method === "session/request_permission") {
615
- return permissionOutcome(selectPermissionOption(request.params, this.activePermissionMode === "full_access"));
615
+ const runInput = this.activePrompt?.runInput ?? this.startInput;
616
+ if (this.activePermissionMode === "full_access") {
617
+ return permissionOutcome(selectPermissionOption(request.params, true));
618
+ }
619
+ if (!runInput?.requestPermission) return permissionOutcome(selectPermissionOption(request.params, false));
620
+ const decision = await runInput.requestPermission({
621
+ kind: "session",
622
+ title: "Runtime permission requested",
623
+ description: summarizeAcpPermissionParams(request.params),
624
+ metadata: { method: request.method, params: request.params }
625
+ });
626
+ return permissionOutcome(selectPermissionOption(request.params, decision.action === "approve"));
616
627
  }
617
628
  return {};
618
629
  }
@@ -720,6 +731,14 @@ function emit(events, input, event) {
720
731
  events.push(event);
721
732
  input.onEvent?.(event);
722
733
  }
734
+ function summarizeAcpPermissionParams(params) {
735
+ if (!params || typeof params !== "object") return "Runtime requested permission.";
736
+ const record = params;
737
+ const reason = typeof record.reason === "string" ? record.reason : void 0;
738
+ const title = typeof record.title === "string" ? record.title : void 0;
739
+ const command = typeof record.command === "string" ? record.command : void 0;
740
+ return [title, command, reason].filter(Boolean).join("\n") || JSON.stringify(record).slice(0, 500);
741
+ }
723
742
  function modelArgs(args, model, enabled = true) {
724
743
  if (!enabled || !model || model === "default") return args;
725
744
  return [...args, "--model", model];
@@ -1509,15 +1528,41 @@ var CodexAdapter = class {
1509
1528
  }
1510
1529
  }
1511
1530
  async handleServerRequest(request) {
1512
- if (request.method === "item/fileChange/requestApproval") {
1531
+ const runInput = this.activeTurn?.runInput ?? (this.startInput ? this.startInputAsRunInput("") : void 0);
1532
+ if (runInput?.permissionMode === "full_access" || !runInput?.requestPermission) {
1533
+ if (request.method === "item/fileChange/requestApproval") return { decision: "accept" };
1534
+ if (request.method === "item/permissions/requestApproval") return { permissions: {}, scope: "turn" };
1513
1535
  return { decision: "accept" };
1514
1536
  }
1537
+ if (request.method === "item/fileChange/requestApproval") {
1538
+ const decision = await runInput.requestPermission({
1539
+ kind: "file_change",
1540
+ title: "File change approval requested",
1541
+ description: summarizePermissionParams(request.params),
1542
+ metadata: { method: request.method, params: request.params }
1543
+ });
1544
+ return { decision: decision.action === "approve" ? "accept" : "reject" };
1545
+ }
1515
1546
  if (request.method === "item/permissions/requestApproval") {
1516
- return { permissions: {}, scope: "turn" };
1547
+ const decision = await runInput.requestPermission({
1548
+ kind: "permission",
1549
+ title: "Command permission requested",
1550
+ description: summarizePermissionParams(request.params),
1551
+ metadata: { method: request.method, params: request.params }
1552
+ });
1553
+ return decision.action === "approve" ? { permissions: {}, scope: "turn" } : { permissions: null, scope: "turn" };
1517
1554
  }
1518
1555
  return { decision: "accept" };
1519
1556
  }
1520
1557
  };
1558
+ function summarizePermissionParams(params) {
1559
+ if (!params || typeof params !== "object") return "Runtime requested permission.";
1560
+ const record = params;
1561
+ const command = typeof record.command === "string" ? record.command : void 0;
1562
+ const path14 = typeof record.path === "string" ? record.path : void 0;
1563
+ const reason = typeof record.reason === "string" ? record.reason : void 0;
1564
+ return [command, path14, reason].filter(Boolean).join("\n") || JSON.stringify(record).slice(0, 500);
1565
+ }
1521
1566
  function codexPermissionOptions(permissionMode) {
1522
1567
  if (permissionMode === "full_access") {
1523
1568
  return { approvalPolicy: "never", sandbox: "danger-full-access" };
@@ -2262,30 +2307,8 @@ Use this skill whenever you need to interact with Wage Mule platform state: chan
2262
2307
  - \`wm task claim --id <task-id>\`
2263
2308
  - \`wm task update --id <task-id> --status <status>\`
2264
2309
  `;
2265
- var LARK_SKILL = `---
2266
- description: Lark and Feishu delegation tools
2267
- version: 0.1.0
2268
- ---
2269
- # lark
2270
-
2271
- Use this skill only when this agent has Feishu delegation enabled and the daemon has provided a token file at \`.wm/feishu/token\`.
2272
-
2273
- ## Token rule
2274
-
2275
- - Read the token file path from the task context or use \`.wm/feishu/token\` relative to the agent workspace.
2276
- - Never print, store, or send the token in platform messages, logs, memory, or notes.
2277
-
2278
- ## Delegation workflow
2279
-
2280
- - Search recent Feishu messages for the delegated human.
2281
- - Classify each message yourself: answer directly, ask another agent through the platform, or escalate to the human.
2282
- - Record meaningful work with \`wm task create\` or \`wm task update\` so the platform has an audit trail.
2283
- - When another agent is needed, use platform DM/thread collaboration instead of guessing.
2284
- `;
2285
- function skillTemplatesForWorkspace(input) {
2286
- const templates = [{ name: "wm-platform", content: WM_PLATFORM_SKILL }];
2287
- if (input.feishuEnabled) templates.push({ name: "lark", content: LARK_SKILL });
2288
- return templates;
2310
+ function skillTemplatesForWorkspace() {
2311
+ return [{ name: "wm-platform", content: WM_PLATFORM_SKILL }];
2289
2312
  }
2290
2313
 
2291
2314
  // src/workspace/agent-workspace.ts
@@ -2443,10 +2466,20 @@ async function buildSystemPrompt(input, paths) {
2443
2466
  "- Use `--json` on wm commands only when you need machine-readable output; default output is optimized for agent collaboration.",
2444
2467
  "- Use platform communication commands as the only channel for channel/task-visible communication. Runtime stdout/final answers are daemon transport details, not the long-term platform protocol.",
2445
2468
  "",
2469
+ "## Work Surface Routing",
2470
+ "",
2471
+ "First identify where the requested work must happen, then choose the tool for that surface.",
2472
+ "",
2473
+ "- Wage Mule platform: use `wm` for channel replies, DMs, thread collaboration, tasks, attachments, profiles, reminders, and questions directed at other platform agents.",
2474
+ "- Local workspace: use normal filesystem and shell tools for code, documents, local diagnostics, and verification.",
2475
+ "- External systems: use the relevant installed workspace skill, token, CLI, or API for tools outside Wage Mule, such as Feishu/Lark.",
2476
+ "- Do not turn external-contact requests into platform mentions. If the user asks you to contact a person through an external system, use that external system and then report the result back to the original platform thread.",
2477
+ "- If a request needs both surfaces, do the external work on the external surface and use `wm message send` only for the platform-visible progress or final report.",
2478
+ "",
2446
2479
  "## CRITICAL RULES",
2447
2480
  "",
2448
2481
  "- Other agents may be running on different machines. Do not use local processes, workspaces, server activity, task lists, or runtime sessions to answer what another agent is doing.",
2449
- '- When a human asks you to ask, check, confirm, contact, or get status from another agent, your first platform action is to ask that agent in the original message thread with `wm message send --target "#channel:<message>"` and an @mention.',
2482
+ '- When a human asks you to ask, check, confirm, contact, or get status from another platform agent, your first platform action is to ask that agent in the original message thread with `wm message send --target "#channel:<message>"` and an @mention.',
2450
2483
  "- When the request explicitly calls for a private agent DM, use `wm dm send --to-agent-id <agent_id>` instead of a thread mention.",
2451
2484
  "- Wait for that agent's platform reply via delivered messages, `wm message check`, or recent unread output; then summarize the reply in the same thread.",
2452
2485
  "- `wm server info`, `wm channel members`, and `wm task list` are discovery tools. They are not authoritative answers for another agent's current work.",
@@ -2525,14 +2558,39 @@ async function buildSystemPrompt(input, paths) {
2525
2558
  async function syncWorkspaceSkills(wmDir, feishuEnabled) {
2526
2559
  const skillsDir = import_node_path4.default.join(wmDir, "skills");
2527
2560
  await (0, import_promises4.mkdir)(skillsDir, { recursive: true });
2528
- for (const template of skillTemplatesForWorkspace({ feishuEnabled })) {
2561
+ for (const template of skillTemplatesForWorkspace()) {
2529
2562
  const targetDir = import_node_path4.default.join(skillsDir, template.name);
2530
2563
  await (0, import_promises4.mkdir)(targetDir, { recursive: true });
2531
- await (0, import_promises4.writeFile)(import_node_path4.default.join(targetDir, "SKILL.md"), template.content, { flag: "wx" }).catch((error) => {
2532
- if (error?.code !== "EEXIST") throw error;
2564
+ await (0, import_promises4.writeFile)(import_node_path4.default.join(targetDir, "SKILL.md"), template.content, "utf8");
2565
+ }
2566
+ await (0, import_promises4.rm)(import_node_path4.default.join(skillsDir, "lark"), { recursive: true, force: true });
2567
+ if (feishuEnabled) await copyLarksuiteSkills(skillsDir);
2568
+ }
2569
+ async function copyLarksuiteSkills(skillsDir) {
2570
+ const sourceDir = await resolveLarksuiteSkillsSourceDir();
2571
+ const entries = await (0, import_promises4.readdir)(sourceDir, { withFileTypes: true });
2572
+ for (const entry of entries) {
2573
+ if (!entry.isDirectory() || !entry.name.startsWith("lark-")) continue;
2574
+ await (0, import_promises4.cp)(import_node_path4.default.join(sourceDir, entry.name), import_node_path4.default.join(skillsDir, entry.name), {
2575
+ recursive: true,
2576
+ force: true
2533
2577
  });
2534
2578
  }
2535
2579
  }
2580
+ async function resolveLarksuiteSkillsSourceDir() {
2581
+ const candidates = [
2582
+ import_node_path4.default.join(__dirname, "..", "..", "vendor", "larksuite-cli-skills"),
2583
+ import_node_path4.default.join(__dirname, "skills", "larksuite")
2584
+ ];
2585
+ for (const candidate of candidates) {
2586
+ try {
2587
+ const entries = await (0, import_promises4.readdir)(candidate, { withFileTypes: true });
2588
+ if (entries.some((entry) => entry.isDirectory() && entry.name === "lark-im")) return candidate;
2589
+ } catch {
2590
+ }
2591
+ }
2592
+ throw new Error("official Lark/Feishu skills are missing from daemon package");
2593
+ }
2536
2594
  async function buildWorkspaceSkillsSection(input) {
2537
2595
  const result = await scanAgentSkills({
2538
2596
  rootDir: input.rootDir,
@@ -2595,7 +2653,7 @@ if (fs.existsSync(envPath)) {
2595
2653
 
2596
2654
  const args = process.argv.slice(2);
2597
2655
  const [group, command] = args;
2598
- const help = "Available commands: wm auth whoami; wm message send/check/read/search; wm dm send; wm server info; wm channel members; wm member find; wm task list/claim/unclaim/update/create; wm attachment upload/view; wm profile show/update; wm reminder schedule/list/snooze/update/cancel";
2656
+ const help = "Available commands: wm auth whoami; wm message send/check/read/search; wm dm send; wm server info; wm channel members; wm member find; wm task list/claim/unclaim/update/create; wm attachment upload/view; wm profile show/update; wm reminder schedule/list/snooze/update/cancel; wm inbox feishu-draft create/sent/failed";
2599
2657
 
2600
2658
  function valueAfter(name) {
2601
2659
  const index = args.indexOf(name);
@@ -2607,7 +2665,7 @@ function hasFlag(name) {
2607
2665
  }
2608
2666
 
2609
2667
  function positionalText() {
2610
- const knownOptions = new Set(["--target", "--channel", "--text", "--content", "--attachment-ids", "--query", "--q", "--around", "--status", "--id", "--task-id", "--title", "--description", "--file", "--at", "--every", "--role", "--instructions", "--body", "--to-agent-id", "--timeout", "--feishu-open-id", "--open-id"]);
2668
+ const knownOptions = new Set(["--target", "--channel", "--text", "--content", "--attachment-ids", "--query", "--q", "--around", "--status", "--id", "--task-id", "--title", "--description", "--file", "--at", "--every", "--role", "--instructions", "--body", "--to-agent-id", "--timeout", "--feishu-open-id", "--open-id", "--delegation-id", "--human-id", "--feishu-message-id", "--chat-id", "--sender-name", "--sender-open-id", "--original-text", "--draft-text", "--risk", "--message-id", "--error"]);
2611
2669
  const values = [];
2612
2670
  for (let index = 2; index < args.length; index++) {
2613
2671
  const arg = args[index];
@@ -2742,6 +2800,11 @@ function formatMemberFind(payload) {
2742
2800
  return lines.join("\\n");
2743
2801
  }
2744
2802
 
2803
+ function formatInboxDraft(payload, fallback) {
2804
+ const item = payload.item || {};
2805
+ return \`\${fallback}: \${item.id || "unknown"} status=\${item.status || "unknown"}\`;
2806
+ }
2807
+
2745
2808
  async function main() {
2746
2809
  const agentId = process.env.WM_AGENT_ID || process.env.WM_DAEMON_AGENT_ID;
2747
2810
  if (group === "auth" && command === "whoami") {
@@ -2832,6 +2895,43 @@ async function main() {
2832
2895
  printResult(payload, formatMemberFind(payload));
2833
2896
  return;
2834
2897
  }
2898
+ if (group === "inbox" && command === "feishu-draft") {
2899
+ const action = args[2];
2900
+ if (action === "create") {
2901
+ const draftText = (valueAfter("--draft-text") || await stdin()).trim();
2902
+ const payload = await request("POST", \`/internal/agent/\${agentId}/inbox/feishu-draft\`, {
2903
+ delegation_id: valueAfter("--delegation-id"),
2904
+ human_id: valueAfter("--human-id"),
2905
+ feishu_message_id: valueAfter("--feishu-message-id"),
2906
+ chat_id: valueAfter("--chat-id"),
2907
+ sender_name: valueAfter("--sender-name"),
2908
+ sender_open_id: valueAfter("--sender-open-id"),
2909
+ original_text: valueAfter("--original-text"),
2910
+ draft_text: draftText,
2911
+ risk: valueAfter("--risk"),
2912
+ });
2913
+ printResult(payload, formatInboxDraft(payload, "Feishu draft created"));
2914
+ return;
2915
+ }
2916
+ if (action === "sent") {
2917
+ const inboxId = valueAfter("--id");
2918
+ if (!inboxId) throw new Error("--id is required");
2919
+ const payload = await request("POST", \`/internal/agent/\${agentId}/inbox/feishu-draft/\${encodeURIComponent(inboxId)}/sent\`, {
2920
+ message_id: valueAfter("--message-id"),
2921
+ });
2922
+ printResult(payload, formatInboxDraft(payload, "Feishu draft sent"));
2923
+ return;
2924
+ }
2925
+ if (action === "failed") {
2926
+ const inboxId = valueAfter("--id");
2927
+ if (!inboxId) throw new Error("--id is required");
2928
+ const error = (valueAfter("--error") || await stdin()).trim();
2929
+ if (!error) throw new Error("--error is required");
2930
+ const payload = await request("POST", \`/internal/agent/\${agentId}/inbox/feishu-draft/\${encodeURIComponent(inboxId)}/failed\`, { error });
2931
+ printResult(payload, formatInboxDraft(payload, "Feishu draft failed"));
2932
+ return;
2933
+ }
2934
+ }
2835
2935
  if (group === "task" && command === "list") {
2836
2936
  const status = valueAfter("--status");
2837
2937
  const suffix = status ? \`?status=\${encodeURIComponent(status)}\` : "";
@@ -3788,7 +3888,7 @@ var import_ws = __toESM(require("ws"));
3788
3888
  // package.json
3789
3889
  var package_default = {
3790
3890
  name: "@wagemule/daemon",
3791
- version: "0.1.2",
3891
+ version: "0.1.4",
3792
3892
  private: false,
3793
3893
  description: "Wage Mule local daemon for connecting local agent runtimes to Workspace Server.",
3794
3894
  main: "./dist/main.cjs",
@@ -3825,6 +3925,7 @@ var package_default = {
3825
3925
  dependencies: {
3826
3926
  "@anthropic-ai/claude-agent-sdk": "^0.2.138",
3827
3927
  "@inquirer/prompts": "^8.4.2",
3928
+ "@larksuite/cli": "^1.0.32",
3828
3929
  commander: "^14.0.3",
3829
3930
  ws: "^8.0.0"
3830
3931
  }
@@ -4654,10 +4755,15 @@ var ReminderCache = class {
4654
4755
 
4655
4756
  // src/workspace/feishu-token-writer.ts
4656
4757
  var import_promises10 = require("node:fs/promises");
4758
+ var import_node_module = require("node:module");
4657
4759
  var import_node_path11 = __toESM(require("node:path"));
4760
+ var requireFromHere = (0, import_node_module.createRequire)(__filename);
4658
4761
  function feishuTokenPath(workspaceDir) {
4659
4762
  return import_node_path11.default.join(workspaceDir, ".wm", "feishu", "token");
4660
4763
  }
4764
+ function larkCliWrapperPath(workspaceDir) {
4765
+ return import_node_path11.default.join(workspaceDir, ".wm", "lark-cli");
4766
+ }
4661
4767
  async function writeFeishuToken(input) {
4662
4768
  const tokenPath = feishuTokenPath(input.workspaceDir);
4663
4769
  const dir = import_node_path11.default.dirname(tokenPath);
@@ -4669,9 +4775,46 @@ async function writeFeishuToken(input) {
4669
4775
  await (0, import_promises10.chmod)(tokenPath, 384);
4670
4776
  return tokenPath;
4671
4777
  }
4778
+ async function writeLarkCliWrapper(input) {
4779
+ const wrapperPath = larkCliWrapperPath(input.workspaceDir);
4780
+ await (0, import_promises10.mkdir)(import_node_path11.default.dirname(wrapperPath), { recursive: true });
4781
+ await (0, import_promises10.writeFile)(wrapperPath, buildLarkCliWrapper(input), { encoding: "utf8", mode: 493 });
4782
+ await (0, import_promises10.chmod)(wrapperPath, 493);
4783
+ return wrapperPath;
4784
+ }
4672
4785
  async function clearFeishuToken(input) {
4673
4786
  await (0, import_promises10.rm)(feishuTokenPath(input.workspaceDir), { force: true });
4674
4787
  }
4788
+ function buildLarkCliWrapper(input) {
4789
+ const runner = resolveLarkCliRunner();
4790
+ return [
4791
+ "#!/usr/bin/env bash",
4792
+ "set -euo pipefail",
4793
+ 'SELF_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"',
4794
+ 'TOKEN_FILE="${SELF_DIR}/feishu/token"',
4795
+ 'if [[ ! -s "$TOKEN_FILE" ]]; then',
4796
+ ' echo "Feishu token unavailable" >&2',
4797
+ " exit 2",
4798
+ "fi",
4799
+ `export LARKSUITE_CLI_APP_ID=${shellQuote(input.appId)}`,
4800
+ 'export LARKSUITE_CLI_USER_ACCESS_TOKEN="$(cat "$TOKEN_FILE")"',
4801
+ "export LARKSUITE_CLI_DEFAULT_AS=user",
4802
+ "export LARKSUITE_CLI_STRICT_MODE=user",
4803
+ `export LARKSUITE_CLI_BRAND=${shellQuote(input.brand ?? "feishu")}`,
4804
+ runner ? `exec ${shellQuote(process.execPath)} ${shellQuote(runner)} "$@"` : 'exec lark-cli "$@"',
4805
+ ""
4806
+ ].join("\n");
4807
+ }
4808
+ function resolveLarkCliRunner() {
4809
+ try {
4810
+ return requireFromHere.resolve("@larksuite/cli/scripts/run.js");
4811
+ } catch {
4812
+ return void 0;
4813
+ }
4814
+ }
4815
+ function shellQuote(value) {
4816
+ return `'${value.replace(/'/g, `'\\''`)}'`;
4817
+ }
4675
4818
 
4676
4819
  // src/agent-manager/activity-tracker.ts
4677
4820
  var ActivityTracker = class {
@@ -4835,6 +4978,7 @@ var AgentProcessManager = class {
4835
4978
  stoppedLaunches = /* @__PURE__ */ new Set();
4836
4979
  lastActivities = /* @__PURE__ */ new Map();
4837
4980
  pendingMigrations = /* @__PURE__ */ new Map();
4981
+ pendingPermissions = /* @__PURE__ */ new Map();
4838
4982
  fakeRuntimeChildren = /* @__PURE__ */ new Map();
4839
4983
  feishuDelegationTimers = /* @__PURE__ */ new Map();
4840
4984
  modelDetector;
@@ -4888,7 +5032,7 @@ var AgentProcessManager = class {
4888
5032
  } else if (message.type === "agent:workspace:init") {
4889
5033
  await this.replyWorkspaceInit(message.requestId, message.agentId, message.config);
4890
5034
  } else if (message.type === "feishu:token:write") {
4891
- await this.replyFeishuTokenWrite(message.requestId, message.agentId, message.token, message.config);
5035
+ await this.replyFeishuTokenWrite(message.requestId, message.agentId, message.token, message.appId, message.brand, message.config);
4892
5036
  } else if (message.type === "feishu:token:clear") {
4893
5037
  await this.replyFeishuTokenClear(message.requestId, message.agentId, message.config);
4894
5038
  } else if (message.type === "feishu:delegation:start" || message.type === "feishu:delegation:update") {
@@ -4928,6 +5072,8 @@ var AgentProcessManager = class {
4928
5072
  this.reminderCache.snapshot(message.agentId, message.reminders);
4929
5073
  } else if (message.type === "agent:runtime_profile:migration") {
4930
5074
  this.pendingMigrations.set(message.agentId, message.migrationKey);
5075
+ } else if (message.type === "agent:permission_decision") {
5076
+ this.resolvePermissionDecision(message.agentId, message.requestId, message.action, message.metadata);
4931
5077
  }
4932
5078
  }
4933
5079
  startFeishuDelegationSchedule(delegation, config) {
@@ -4938,6 +5084,7 @@ var AgentProcessManager = class {
4938
5084
  });
4939
5085
  if (!delegation.enabled) return;
4940
5086
  const intervalMs = Math.max(6e4, delegation.interval_seconds * 1e3);
5087
+ const lookbackMinutes = Math.min(60, Math.max(10, Math.ceil(delegation.interval_seconds * 2 / 60)));
4941
5088
  const timer = setInterval(() => {
4942
5089
  const wakeMessage = {
4943
5090
  target: "feishu:delegation",
@@ -4950,14 +5097,18 @@ var AgentProcessManager = class {
4950
5097
  "Feishu delegation tick.",
4951
5098
  `Human ID: ${delegation.human_id}`,
4952
5099
  `Delegation ID: ${delegation.id}`,
4953
- "Refresh the Feishu token file if needed, then use the lark skill to check pending Feishu messages.",
4954
- "Classify messages, handle safe requests, and escalate uncertain or high-risk requests through wm dm send --wait-for-reply."
5100
+ `Read Feishu messages from the last ${lookbackMinutes} minutes only. Never send, reply, react, or mutate Feishu during this tick.`,
5101
+ "For each new inbound Feishu message that needs a reply, draft a concise reply and create exactly one inbox item with:",
5102
+ "wm inbox feishu-draft create --delegation-id <delegation_id> --human-id <human_id> --feishu-message-id <message_id> --chat-id <chat_id> --sender-name <name> --sender-open-id <open_id> --original-text <summary> --draft-text <draft>",
5103
+ "Deduplicate by Feishu message_id. If there are no new relevant messages, do nothing.",
5104
+ "Do not call lark-cli im +messages-send or any other Feishu send command unless a later approved inbox task explicitly asks you to send."
4955
5105
  ].join("\n")
4956
5106
  };
4957
5107
  void this.enqueueStart({
4958
5108
  agentId: delegation.delegate_agent_id,
4959
5109
  config: { ...config, feishuDelegationEnabled: true },
4960
- wakeMessage
5110
+ wakeMessage,
5111
+ deliveredMessages: [wakeMessage]
4961
5112
  }).catch((error) => {
4962
5113
  this.options.sendToServer({
4963
5114
  type: "feishu:wake_failed",
@@ -5122,6 +5273,44 @@ var AgentProcessManager = class {
5122
5273
  this.lastActivities.set(msg.agentId, { activity: msg.activity, detail: msg.detail, launchId: msg.launchId, clientSeq: msg.clientSeq });
5123
5274
  this.options.sendToServer({ type: "agent:activity", ...msg });
5124
5275
  }
5276
+ requestRuntimePermission(agentId, launchId, request) {
5277
+ const requestId = `perm_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
5278
+ this.log(`permission request agent=${agentId} request=${requestId} kind=${request.kind}`);
5279
+ this.sendActivity({
5280
+ agentId,
5281
+ activity: "working",
5282
+ detail: "Waiting for permission",
5283
+ launchId,
5284
+ entries: [{ kind: "status", text: request.title, timestamp: Date.now() }],
5285
+ pendingInboxCount: this.queuedInboxCount(agentId) + 1
5286
+ });
5287
+ this.options.sendToServer({
5288
+ type: "agent:permission_request",
5289
+ agentId,
5290
+ requestId,
5291
+ launchId,
5292
+ kind: request.kind,
5293
+ title: request.title,
5294
+ description: request.description,
5295
+ metadata: request.metadata
5296
+ });
5297
+ return new Promise((resolve) => {
5298
+ const timeout = setTimeout(() => {
5299
+ this.pendingPermissions.delete(requestId);
5300
+ this.log(`permission timeout agent=${agentId} request=${requestId}`);
5301
+ resolve({ action: "reject", metadata: { reason: "permission timeout" } });
5302
+ }, 10 * 6e4);
5303
+ this.pendingPermissions.set(requestId, { agentId, timeout, resolve });
5304
+ });
5305
+ }
5306
+ resolvePermissionDecision(agentId, requestId, action, metadata) {
5307
+ const pending = this.pendingPermissions.get(requestId);
5308
+ if (!pending || pending.agentId !== agentId) return;
5309
+ clearTimeout(pending.timeout);
5310
+ this.pendingPermissions.delete(requestId);
5311
+ this.log(`permission decision agent=${agentId} request=${requestId} action=${action}`);
5312
+ pending.resolve({ action, metadata });
5313
+ }
5125
5314
  async ensureAgentWorkspace(agentId, config) {
5126
5315
  const running = this.running.get(agentId);
5127
5316
  if (running && !config?.feishuDelegationEnabled) return { workspace: running.workspace };
@@ -5170,11 +5359,12 @@ var AgentProcessManager = class {
5170
5359
  });
5171
5360
  }
5172
5361
  }
5173
- async replyFeishuTokenWrite(requestId, agentId, token, config) {
5362
+ async replyFeishuTokenWrite(requestId, agentId, token, appId, brand, config) {
5174
5363
  try {
5175
5364
  const { workspace } = await this.ensureAgentWorkspace(agentId, config);
5176
5365
  if (!workspace) throw new Error(`workspace missing for ${agentId}`);
5177
5366
  const tokenPath = await writeFeishuToken({ workspaceDir: workspace.agentDir, token });
5367
+ await writeLarkCliWrapper({ workspaceDir: workspace.agentDir, appId, brand });
5178
5368
  this.options.sendToServer({ type: "feishu:token:write_result", requestId, agentId, ok: true, tokenPath });
5179
5369
  } catch (error) {
5180
5370
  this.options.sendToServer({
@@ -5256,6 +5446,7 @@ var AgentProcessManager = class {
5256
5446
 
5257
5447
  [Runtime Profile Migration] Your runtime configuration has been updated. Before handling the above, re-ground yourself in the new context, then run: \`${workspace.wrapperPath} profile migration-ack --key ${migrationKey}\`` : basePrompt;
5258
5448
  const tracker = new ActivityTracker();
5449
+ const requestPermission = (request) => this.requestRuntimePermission(agentId, launchId, request);
5259
5450
  const onEvent = (event) => {
5260
5451
  this.log(`runtime event agent=${agentId} type=${event.type}${event.content ? ` text=${compact(event.content)}` : ""}`);
5261
5452
  const running = this.running.get(agentId);
@@ -5334,7 +5525,8 @@ var AgentProcessManager = class {
5334
5525
  env: runtimeEnv,
5335
5526
  runtimeSessionId: config.sessionId,
5336
5527
  timeoutMs: 18e4,
5337
- onEvent
5528
+ onEvent,
5529
+ requestPermission
5338
5530
  });
5339
5531
  this.log(`runtime spawned agent=${agentId} runtime=${config.runtime} pid=${adapter.pid ?? "-"} persistent=true`);
5340
5532
  } else {
@@ -5361,7 +5553,8 @@ var AgentProcessManager = class {
5361
5553
  runtimeSessionId: config.sessionId,
5362
5554
  timeoutMs: 18e4,
5363
5555
  abortSignal: controller.signal,
5364
- onEvent
5556
+ onEvent,
5557
+ requestPermission
5365
5558
  });
5366
5559
  }
5367
5560
  if (result.runtimeSessionId) {
@@ -5595,6 +5788,7 @@ var AgentProcessManager = class {
5595
5788
  this.idleConfigs.delete(agentId);
5596
5789
  this.startingInboxes.delete(agentId);
5597
5790
  this.runningInboxes.delete(agentId);
5791
+ this.rejectPendingPermissionsForAgent(agentId, "agent stopped");
5598
5792
  const running = this.running.get(agentId);
5599
5793
  if (!running) {
5600
5794
  this.options.sendToServer({ type: "agent:status", agentId, status: "inactive" });
@@ -5622,6 +5816,14 @@ var AgentProcessManager = class {
5622
5816
  new Promise((resolve) => setTimeout(resolve, 5e3))
5623
5817
  ]);
5624
5818
  }
5819
+ rejectPendingPermissionsForAgent(agentId, reason) {
5820
+ for (const [requestId, pending] of this.pendingPermissions) {
5821
+ if (pending.agentId !== agentId) continue;
5822
+ clearTimeout(pending.timeout);
5823
+ this.pendingPermissions.delete(requestId);
5824
+ pending.resolve({ action: "reject", metadata: { reason } });
5825
+ }
5826
+ }
5625
5827
  async runFakeRuntime(input) {
5626
5828
  const { agentId, config, workspace, wakeMessage, abortSignal, launchId } = input;
5627
5829
  let child;
@@ -6049,7 +6251,9 @@ function formatActionableMessagePrompt(messages, wrapperPath) {
6049
6251
  first?.message_id ? `Message ID: ${first.message_id}` : "Message ID: unknown",
6050
6252
  `Thread reply target: ${replyTarget}`,
6051
6253
  "",
6052
- "Collaboration rule: if this message asks you to ask, check, confirm, contact, or get status from another agent, do not inspect local process/workspace/server activity/task list to answer for them. Ask that agent in this exact thread target with an @mention, wait for their platform reply, then summarize in the same thread.",
6254
+ "Before acting, identify the requested work surface: Wage Mule platform, local workspace, or an external system. Use the tool for that surface.",
6255
+ "Platform-agent collaboration rule: if this message asks you to ask, check, confirm, contact, or get status from another platform agent, do not inspect local process/workspace/server activity/task list to answer for them. Ask that agent in this exact thread target with an @mention, wait for their platform reply, then summarize in the same thread.",
6256
+ "External-system rule: if the user names an external system such as Feishu/Lark, do the action through that external skill, CLI, token, or API, then report the result in this thread. Do not replace an external contact request with a platform mention.",
6053
6257
  "",
6054
6258
  "Complete the requested work. When you have a channel-visible final reply, send it with this agent-local absolute command:",
6055
6259
  replyCommand,