@wagemule/daemon 0.1.0 → 0.1.3

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 -2
  2. package/dist/main.cjs +270 -101
  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/dist/main.cjs CHANGED
@@ -34,6 +34,7 @@ __export(main_exports, {
34
34
  runCli: () => runCli
35
35
  });
36
36
  module.exports = __toCommonJS(main_exports);
37
+ var import_node_os9 = __toESM(require("node:os"));
37
38
 
38
39
  // src/process/command.ts
39
40
  var import_node_child_process = require("node:child_process");
@@ -2136,7 +2137,7 @@ var import_node_os = __toESM(require("node:os"));
2136
2137
  var import_node_path3 = __toESM(require("node:path"));
2137
2138
  async function scanAgentSkills(input) {
2138
2139
  const homeDir = input.homeDir ?? import_node_os.default.homedir();
2139
- const workspaceDir = import_node_path3.default.join(input.rootDir, input.serverNamespace, input.machineId, input.agentId);
2140
+ const workspaceDir = input.machineDirectoryName ? import_node_path3.default.join(input.rootDir, input.machineDirectoryName, input.agentDirectoryName ?? input.agentId) : import_node_path3.default.join(input.rootDir, input.serverNamespace, input.machineId, input.agentId);
2140
2141
  return {
2141
2142
  global: await scanGroupedSkillRoots(runtimeSkillRoots(homeDir, input.runtime), "global"),
2142
2143
  workspace: await scanGroupedSkillRoots(workspaceSkillRoots(workspaceDir, input.runtime), "workspace")
@@ -2261,36 +2262,14 @@ Use this skill whenever you need to interact with Wage Mule platform state: chan
2261
2262
  - \`wm task claim --id <task-id>\`
2262
2263
  - \`wm task update --id <task-id> --status <status>\`
2263
2264
  `;
2264
- var LARK_SKILL = `---
2265
- description: Lark and Feishu delegation tools
2266
- version: 0.1.0
2267
- ---
2268
- # lark
2269
-
2270
- Use this skill only when this agent has Feishu delegation enabled and the daemon has provided a token file at \`.wm/feishu/token\`.
2271
-
2272
- ## Token rule
2273
-
2274
- - Read the token file path from the task context or use \`.wm/feishu/token\` relative to the agent workspace.
2275
- - Never print, store, or send the token in platform messages, logs, memory, or notes.
2276
-
2277
- ## Delegation workflow
2278
-
2279
- - Search recent Feishu messages for the delegated human.
2280
- - Classify each message yourself: answer directly, ask another agent through the platform, or escalate to the human.
2281
- - Record meaningful work with \`wm task create\` or \`wm task update\` so the platform has an audit trail.
2282
- - When another agent is needed, use platform DM/thread collaboration instead of guessing.
2283
- `;
2284
- function skillTemplatesForWorkspace(input) {
2285
- const templates = [{ name: "wm-platform", content: WM_PLATFORM_SKILL }];
2286
- if (input.feishuEnabled) templates.push({ name: "lark", content: LARK_SKILL });
2287
- return templates;
2265
+ function skillTemplatesForWorkspace() {
2266
+ return [{ name: "wm-platform", content: WM_PLATFORM_SKILL }];
2288
2267
  }
2289
2268
 
2290
2269
  // src/workspace/agent-workspace.ts
2291
2270
  async function createAgentWorkspace(input) {
2292
- const serverDir = input.machineId ? import_node_path4.default.join(input.rootDir, input.serverNamespace, input.machineId) : import_node_path4.default.join(input.rootDir, input.serverNamespace);
2293
- const agentDir = import_node_path4.default.join(serverDir, input.agentId);
2271
+ const serverDir = input.machineId ? import_node_path4.default.join(input.rootDir, input.machineDirectoryName) : import_node_path4.default.join(input.rootDir, input.serverNamespace);
2272
+ const agentDir = import_node_path4.default.join(serverDir, input.agentDirectoryName);
2294
2273
  const wmDir = import_node_path4.default.join(agentDir, ".wm");
2295
2274
  const notesDir = import_node_path4.default.join(agentDir, "notes");
2296
2275
  const runtimeSessionsDir = import_node_path4.default.join(wmDir, "runtime-sessions");
@@ -2415,24 +2394,26 @@ async function buildSystemPrompt(input, paths) {
2415
2394
  "",
2416
2395
  "1. `wm message check` -- Non-blocking check for new channel, DM, or thread messages at natural breakpoints.",
2417
2396
  "2. `wm message send` -- Send a channel, DM, or thread reply through the platform.",
2418
- "3. `wm message read` -- Read visible history with pagination or around a specific message.",
2419
- "4. `wm message search` -- Search visible channel and DM history before answering historical questions.",
2420
- "5. `wm server info` -- Inspect the current server, visible channels, humans, agents, and memberships.",
2421
- "6. `wm channel members` -- Inspect members of a channel, DM, or thread target.",
2422
- "7. `wm task list` -- View task messages for a channel or relevant target.",
2423
- "8. `wm task claim` -- Claim a task before doing work that changes files, runs tools, or performs multi-step investigation.",
2424
- "9. `wm task unclaim` -- Release a task you cannot or should not continue.",
2425
- "10. `wm task update` -- Move a task through statuses such as todo, in_progress, in_review, and done.",
2426
- "11. `wm task create` -- Create genuine new follow-up work when no canonical message/task exists.",
2427
- "12. `wm attachment upload` -- Upload a local artifact and reference it in a platform message.",
2428
- "13. `wm attachment view` -- Download and inspect a platform attachment.",
2429
- "14. `wm profile show` -- Inspect your own profile or a visible human/agent profile.",
2430
- "15. `wm profile update` -- Update your display name, description, or avatar when explicitly asked.",
2431
- "16. `wm reminder schedule` -- Schedule a platform-visible reminder for follow-up work.",
2432
- "17. `wm reminder list` -- List reminders and their lifecycle history.",
2433
- "18. `wm reminder snooze` -- Push an existing reminder later.",
2434
- "19. `wm reminder update` -- Change a reminder without creating a duplicate.",
2435
- "20. `wm reminder cancel` -- Cancel a reminder that is no longer needed.",
2397
+ "3. `wm dm send` -- Send a private agent-to-agent DM, optionally waiting for a reply.",
2398
+ "4. `wm message read` -- Read visible history with pagination or around a specific message.",
2399
+ "5. `wm message search` -- Search visible channel and DM history before answering historical questions.",
2400
+ "6. `wm server info` -- Inspect the current server, visible channels, humans, agents, and memberships.",
2401
+ "7. `wm channel members` -- Inspect members of a channel, DM, or thread target.",
2402
+ "8. `wm member find` -- Find platform members by Feishu open_id.",
2403
+ "9. `wm task list` -- View task messages for a channel or relevant target.",
2404
+ "10. `wm task claim` -- Claim a task before doing work that changes files, runs tools, or performs multi-step investigation.",
2405
+ "11. `wm task unclaim` -- Release a task you cannot or should not continue.",
2406
+ "12. `wm task update` -- Move a task through statuses such as todo, in_progress, in_review, and done.",
2407
+ "13. `wm task create` -- Create genuine new follow-up work when no canonical message/task exists.",
2408
+ "14. `wm attachment upload` -- Upload a local artifact and reference it in a platform message.",
2409
+ "15. `wm attachment view` -- Download and inspect a platform attachment.",
2410
+ "16. `wm profile show` -- Inspect your own profile or a visible human/agent profile.",
2411
+ "17. `wm profile update` -- Update your display name, description, or avatar when explicitly asked.",
2412
+ "18. `wm reminder schedule` -- Schedule a platform-visible reminder for follow-up work.",
2413
+ "19. `wm reminder list` -- List reminders and their lifecycle history.",
2414
+ "20. `wm reminder snooze` -- Push an existing reminder later.",
2415
+ "21. `wm reminder update` -- Change a reminder without creating a duplicate.",
2416
+ "22. `wm reminder cancel` -- Cancel a reminder that is no longer needed.",
2436
2417
  "",
2437
2418
  "Diagnostic command:",
2438
2419
  "",
@@ -2440,10 +2421,21 @@ async function buildSystemPrompt(input, paths) {
2440
2421
  "- Use `--json` on wm commands only when you need machine-readable output; default output is optimized for agent collaboration.",
2441
2422
  "- 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.",
2442
2423
  "",
2424
+ "## Work Surface Routing",
2425
+ "",
2426
+ "First identify where the requested work must happen, then choose the tool for that surface.",
2427
+ "",
2428
+ "- Wage Mule platform: use `wm` for channel replies, DMs, thread collaboration, tasks, attachments, profiles, reminders, and questions directed at other platform agents.",
2429
+ "- Local workspace: use normal filesystem and shell tools for code, documents, local diagnostics, and verification.",
2430
+ "- External systems: use the relevant installed workspace skill, token, CLI, or API for tools outside Wage Mule, such as Feishu/Lark.",
2431
+ "- 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.",
2432
+ "- 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.",
2433
+ "",
2443
2434
  "## CRITICAL RULES",
2444
2435
  "",
2445
2436
  "- 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.",
2446
- '- 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.',
2437
+ '- 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.',
2438
+ "- When the request explicitly calls for a private agent DM, use `wm dm send --to-agent-id <agent_id>` instead of a thread mention.",
2447
2439
  "- 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.",
2448
2440
  "- `wm server info`, `wm channel members`, and `wm task list` are discovery tools. They are not authoritative answers for another agent's current work.",
2449
2441
  "",
@@ -2521,19 +2513,46 @@ async function buildSystemPrompt(input, paths) {
2521
2513
  async function syncWorkspaceSkills(wmDir, feishuEnabled) {
2522
2514
  const skillsDir = import_node_path4.default.join(wmDir, "skills");
2523
2515
  await (0, import_promises4.mkdir)(skillsDir, { recursive: true });
2524
- for (const template of skillTemplatesForWorkspace({ feishuEnabled })) {
2516
+ for (const template of skillTemplatesForWorkspace()) {
2525
2517
  const targetDir = import_node_path4.default.join(skillsDir, template.name);
2526
2518
  await (0, import_promises4.mkdir)(targetDir, { recursive: true });
2527
- await (0, import_promises4.writeFile)(import_node_path4.default.join(targetDir, "SKILL.md"), template.content, { flag: "wx" }).catch((error) => {
2528
- if (error?.code !== "EEXIST") throw error;
2519
+ await (0, import_promises4.writeFile)(import_node_path4.default.join(targetDir, "SKILL.md"), template.content, "utf8");
2520
+ }
2521
+ await (0, import_promises4.rm)(import_node_path4.default.join(skillsDir, "lark"), { recursive: true, force: true });
2522
+ if (feishuEnabled) await copyLarksuiteSkills(skillsDir);
2523
+ }
2524
+ async function copyLarksuiteSkills(skillsDir) {
2525
+ const sourceDir = await resolveLarksuiteSkillsSourceDir();
2526
+ const entries = await (0, import_promises4.readdir)(sourceDir, { withFileTypes: true });
2527
+ for (const entry of entries) {
2528
+ if (!entry.isDirectory() || !entry.name.startsWith("lark-")) continue;
2529
+ await (0, import_promises4.cp)(import_node_path4.default.join(sourceDir, entry.name), import_node_path4.default.join(skillsDir, entry.name), {
2530
+ recursive: true,
2531
+ force: true
2529
2532
  });
2530
2533
  }
2531
2534
  }
2535
+ async function resolveLarksuiteSkillsSourceDir() {
2536
+ const candidates = [
2537
+ import_node_path4.default.join(__dirname, "..", "..", "vendor", "larksuite-cli-skills"),
2538
+ import_node_path4.default.join(__dirname, "skills", "larksuite")
2539
+ ];
2540
+ for (const candidate of candidates) {
2541
+ try {
2542
+ const entries = await (0, import_promises4.readdir)(candidate, { withFileTypes: true });
2543
+ if (entries.some((entry) => entry.isDirectory() && entry.name === "lark-im")) return candidate;
2544
+ } catch {
2545
+ }
2546
+ }
2547
+ throw new Error("official Lark/Feishu skills are missing from daemon package");
2548
+ }
2532
2549
  async function buildWorkspaceSkillsSection(input) {
2533
2550
  const result = await scanAgentSkills({
2534
2551
  rootDir: input.rootDir,
2535
2552
  serverNamespace: input.serverNamespace,
2553
+ machineDirectoryName: input.machineDirectoryName,
2536
2554
  machineId: input.machineId ?? "",
2555
+ agentDirectoryName: input.agentDirectoryName,
2537
2556
  agentId: input.agentId,
2538
2557
  runtime: input.runtime
2539
2558
  }).catch(() => ({ global: [], workspace: [] }));
@@ -2589,7 +2608,7 @@ if (fs.existsSync(envPath)) {
2589
2608
 
2590
2609
  const args = process.argv.slice(2);
2591
2610
  const [group, command] = args;
2592
- const help = "Available commands: wm auth whoami; wm message send/check/read/search; wm server info; wm channel members; wm channel members; wm task list/claim/unclaim/update/create; wm attachment upload/view; wm profile show/update; wm reminder schedule/list/snooze/update/cancel";
2611
+ 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";
2593
2612
 
2594
2613
  function valueAfter(name) {
2595
2614
  const index = args.indexOf(name);
@@ -2601,7 +2620,7 @@ function hasFlag(name) {
2601
2620
  }
2602
2621
 
2603
2622
  function positionalText() {
2604
- 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"]);
2623
+ 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"]);
2605
2624
  const values = [];
2606
2625
  for (let index = 2; index < args.length; index++) {
2607
2626
  const arg = args[index];
@@ -2671,6 +2690,17 @@ function formatSendResult(result, target) {
2671
2690
  return lines.join("\\n");
2672
2691
  }
2673
2692
 
2693
+ function formatDmSendResult(payload) {
2694
+ const messageId = payload.messageId || payload.message?.id || "unknown";
2695
+ const lines = [\`DM sent. Message ID: \${messageId}\`];
2696
+ if (payload.reply) {
2697
+ lines.push("", "--- Reply ---", messageLine(payload.reply));
2698
+ } else if (payload.timed_out) {
2699
+ lines.push("Timed out waiting for reply.");
2700
+ }
2701
+ return lines.join("\\n");
2702
+ }
2703
+
2674
2704
  function formatMessages(payload) {
2675
2705
  const messages = payload.messages || [];
2676
2706
  if (!messages.length) return "No messages.";
@@ -2705,6 +2735,26 @@ function formatMembers(payload) {
2705
2735
  return members.map((member) => \`- \${member.mention} type=\${member.type}\${member.runtime ? \` runtime=\${member.runtime}\` : ""}\`).join("\\n");
2706
2736
  }
2707
2737
 
2738
+ function formatMemberFind(payload) {
2739
+ const lines = [];
2740
+ if (payload.human) {
2741
+ lines.push(\`Human: @\${payload.human.name} (\${payload.human.id})\`);
2742
+ if (payload.human.feishu_open_id) lines.push(\`Feishu open_id: \${payload.human.feishu_open_id}\`);
2743
+ if (payload.human.email) lines.push(\`Email: \${payload.human.email}\`);
2744
+ } else {
2745
+ lines.push("Human: not found");
2746
+ }
2747
+ lines.push("Agents:");
2748
+ if (payload.agents?.length) {
2749
+ for (const agent of payload.agents) {
2750
+ lines.push(\`- @\${agent.name} id=\${agent.agent_id} runtime=\${agent.runtime} machine=\${agent.machine_id} \${agent.online ? "online" : "offline"}\`);
2751
+ }
2752
+ } else {
2753
+ lines.push("- none");
2754
+ }
2755
+ return lines.join("\\n");
2756
+ }
2757
+
2708
2758
  async function main() {
2709
2759
  const agentId = process.env.WM_AGENT_ID || process.env.WM_DAEMON_AGENT_ID;
2710
2760
  if (group === "auth" && command === "whoami") {
@@ -2736,6 +2786,20 @@ async function main() {
2736
2786
  printResult(payload, formatSendResult(payload, target));
2737
2787
  return;
2738
2788
  }
2789
+ if (group === "dm" && command === "send") {
2790
+ const toAgentId = valueAfter("--to-agent-id");
2791
+ if (!toAgentId) throw new Error("--to-agent-id is required");
2792
+ const text = (valueAfter("--text") || valueAfter("--content") || await stdin() || positionalText()).trim();
2793
+ if (!text) throw new Error("message text is required; use --text, --content, stdin, or a positional message");
2794
+ const payload = await request("POST", \`/internal/agent/\${agentId}/dm/send\`, {
2795
+ to_agent_id: toAgentId,
2796
+ text,
2797
+ wait_for_reply: hasFlag("--wait-for-reply"),
2798
+ timeout_ms: valueAfter("--timeout") ? Number(valueAfter("--timeout")) : undefined,
2799
+ });
2800
+ printResult(payload, formatDmSendResult(payload));
2801
+ return;
2802
+ }
2739
2803
  if (group === "message" && command === "check") {
2740
2804
  const payload = await request("GET", \`/internal/agent/\${agentId}/receive\`);
2741
2805
  printResult(payload, formatMessages(payload).replace("No messages.", "No new messages."));
@@ -2774,6 +2838,13 @@ async function main() {
2774
2838
  printResult(payload, formatMembers(payload));
2775
2839
  return;
2776
2840
  }
2841
+ if (group === "member" && command === "find") {
2842
+ const openId = (valueAfter("--feishu-open-id") || valueAfter("--open-id") || "").trim();
2843
+ if (!openId) throw new Error("--feishu-open-id is required");
2844
+ const payload = await request("GET", \`/internal/agent/\${agentId}/members/find?feishu_open_id=\${encodeURIComponent(openId)}\`);
2845
+ printResult(payload, formatMemberFind(payload));
2846
+ return;
2847
+ }
2777
2848
  if (group === "task" && command === "list") {
2778
2849
  const status = valueAfter("--status");
2779
2850
  const suffix = status ? \`?status=\${encodeURIComponent(status)}\` : "";
@@ -2889,7 +2960,11 @@ async function runAdapterSmokeTest(input) {
2889
2960
  input.runtime,
2890
2961
  "adapter runtime must match requested runtime"
2891
2962
  );
2892
- const workspace = await createAgentWorkspace(input);
2963
+ const workspace = await createAgentWorkspace({
2964
+ ...input,
2965
+ machineDirectoryName: input.machineDirectoryName ?? input.serverNamespace,
2966
+ agentDirectoryName: input.agentDirectoryName ?? input.agentId
2967
+ });
2893
2968
  const runDir = input.runDir ?? workspace.agentDir;
2894
2969
  const systemPrompt = await (0, import_promises5.readFile)(workspace.systemPromptPath, "utf8");
2895
2970
  const result = await input.adapter.run({
@@ -3033,6 +3108,8 @@ async function createLabAgent(input) {
3033
3108
  rootDir: input.rootDir,
3034
3109
  serverNamespace: input.serverNamespace,
3035
3110
  serverId: `lab:${input.serverNamespace}`,
3111
+ machineDirectoryName: input.serverNamespace,
3112
+ agentDirectoryName: agentId,
3036
3113
  daemonId: import_node_os4.default.hostname() || "local",
3037
3114
  agentId,
3038
3115
  agentName: input.agentName,
@@ -3724,7 +3801,7 @@ var import_ws = __toESM(require("ws"));
3724
3801
  // package.json
3725
3802
  var package_default = {
3726
3803
  name: "@wagemule/daemon",
3727
- version: "0.1.0",
3804
+ version: "0.1.3",
3728
3805
  private: false,
3729
3806
  description: "Wage Mule local daemon for connecting local agent runtimes to Workspace Server.",
3730
3807
  main: "./dist/main.cjs",
@@ -3761,6 +3838,7 @@ var package_default = {
3761
3838
  dependencies: {
3762
3839
  "@anthropic-ai/claude-agent-sdk": "^0.2.138",
3763
3840
  "@inquirer/prompts": "^8.4.2",
3841
+ "@larksuite/cli": "^1.0.32",
3764
3842
  commander: "^14.0.3",
3765
3843
  ws: "^8.0.0"
3766
3844
  }
@@ -4590,10 +4668,15 @@ var ReminderCache = class {
4590
4668
 
4591
4669
  // src/workspace/feishu-token-writer.ts
4592
4670
  var import_promises10 = require("node:fs/promises");
4671
+ var import_node_module = require("node:module");
4593
4672
  var import_node_path11 = __toESM(require("node:path"));
4673
+ var requireFromHere = (0, import_node_module.createRequire)(__filename);
4594
4674
  function feishuTokenPath(workspaceDir) {
4595
4675
  return import_node_path11.default.join(workspaceDir, ".wm", "feishu", "token");
4596
4676
  }
4677
+ function larkCliWrapperPath(workspaceDir) {
4678
+ return import_node_path11.default.join(workspaceDir, ".wm", "lark-cli");
4679
+ }
4597
4680
  async function writeFeishuToken(input) {
4598
4681
  const tokenPath = feishuTokenPath(input.workspaceDir);
4599
4682
  const dir = import_node_path11.default.dirname(tokenPath);
@@ -4605,9 +4688,46 @@ async function writeFeishuToken(input) {
4605
4688
  await (0, import_promises10.chmod)(tokenPath, 384);
4606
4689
  return tokenPath;
4607
4690
  }
4691
+ async function writeLarkCliWrapper(input) {
4692
+ const wrapperPath = larkCliWrapperPath(input.workspaceDir);
4693
+ await (0, import_promises10.mkdir)(import_node_path11.default.dirname(wrapperPath), { recursive: true });
4694
+ await (0, import_promises10.writeFile)(wrapperPath, buildLarkCliWrapper(input), { encoding: "utf8", mode: 493 });
4695
+ await (0, import_promises10.chmod)(wrapperPath, 493);
4696
+ return wrapperPath;
4697
+ }
4608
4698
  async function clearFeishuToken(input) {
4609
4699
  await (0, import_promises10.rm)(feishuTokenPath(input.workspaceDir), { force: true });
4610
4700
  }
4701
+ function buildLarkCliWrapper(input) {
4702
+ const runner = resolveLarkCliRunner();
4703
+ return [
4704
+ "#!/usr/bin/env bash",
4705
+ "set -euo pipefail",
4706
+ 'SELF_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"',
4707
+ 'TOKEN_FILE="${SELF_DIR}/feishu/token"',
4708
+ 'if [[ ! -s "$TOKEN_FILE" ]]; then',
4709
+ ' echo "Feishu token unavailable" >&2',
4710
+ " exit 2",
4711
+ "fi",
4712
+ `export LARKSUITE_CLI_APP_ID=${shellQuote(input.appId)}`,
4713
+ 'export LARKSUITE_CLI_USER_ACCESS_TOKEN="$(cat "$TOKEN_FILE")"',
4714
+ "export LARKSUITE_CLI_DEFAULT_AS=user",
4715
+ "export LARKSUITE_CLI_STRICT_MODE=user",
4716
+ `export LARKSUITE_CLI_BRAND=${shellQuote(input.brand ?? "feishu")}`,
4717
+ runner ? `exec ${shellQuote(process.execPath)} ${shellQuote(runner)} "$@"` : 'exec lark-cli "$@"',
4718
+ ""
4719
+ ].join("\n");
4720
+ }
4721
+ function resolveLarkCliRunner() {
4722
+ try {
4723
+ return requireFromHere.resolve("@larksuite/cli/scripts/run.js");
4724
+ } catch {
4725
+ return void 0;
4726
+ }
4727
+ }
4728
+ function shellQuote(value) {
4729
+ return `'${value.replace(/'/g, `'\\''`)}'`;
4730
+ }
4611
4731
 
4612
4732
  // src/agent-manager/activity-tracker.ts
4613
4733
  var ActivityTracker = class {
@@ -4706,9 +4826,7 @@ var WorkspaceBrowser = class {
4706
4826
  }
4707
4827
  rootDirForAgent(agentId, serverNamespace, machineId) {
4708
4828
  if (typeof this.options === "function") return this.options(agentId);
4709
- const scope = serverNamespace && machineId ? { serverNamespace, machineId } : this.options.workspaceScopeForAgent(agentId);
4710
- if (!scope) return void 0;
4711
- return import_node_path12.default.join(this.options.rootDir, scope.serverNamespace, scope.machineId, agentId);
4829
+ return this.options.workspaceDirectoryForAgent(agentId, serverNamespace, machineId);
4712
4830
  }
4713
4831
  resolveInside(base, relativePath) {
4714
4832
  const resolved = import_node_path12.default.resolve(base, relativePath);
@@ -4723,6 +4841,21 @@ function isSafeWorkspaceDirectoryName(directoryName) {
4723
4841
  directoryName && directoryName !== "." && directoryName !== ".." && !directoryName.includes("/") && !directoryName.includes("\\") && !directoryName.includes("..")
4724
4842
  );
4725
4843
  }
4844
+ function displayNameToWorkspaceDirectoryName(displayName, fallback = "machine") {
4845
+ const cleaned = displayName.trim().normalize("NFKC").replace(/[\/\\:]+/g, "-").replace(/\s+/g, "-").replace(/[^A-Za-z0-9._-]+/g, "-").replace(/-+/g, "-").replace(/^[.-]+|[.-]+$/g, "").slice(0, 80);
4846
+ return cleaned || fallback;
4847
+ }
4848
+ function namedWorkspaceDirectoryName(displayName, id, fallback = "item") {
4849
+ const namePart = displayNameToWorkspaceDirectoryName(displayName, fallback);
4850
+ const idPart = workspaceDirectoryIdPart(namePart, id);
4851
+ return `${namePart}-${idPart}`;
4852
+ }
4853
+ function workspaceDirectoryIdPart(namePart, id) {
4854
+ let idPart = displayNameToWorkspaceDirectoryName(id, "id");
4855
+ if (idPart.startsWith(`${namePart}-`)) idPart = idPart.slice(namePart.length + 1);
4856
+ idPart = idPart.replace(/^(machine|agent|org)[_-]/, "");
4857
+ return idPart || displayNameToWorkspaceDirectoryName(id, "id");
4858
+ }
4726
4859
 
4727
4860
  // src/agent-manager/agent-process-manager.ts
4728
4861
  var AgentProcessManager = class {
@@ -4731,9 +4864,11 @@ var AgentProcessManager = class {
4731
4864
  this.modelDetector = options.modelDetector ?? new RuntimeModelDetector();
4732
4865
  this.browser = new WorkspaceBrowser({
4733
4866
  rootDir: this.options.rootDir,
4734
- workspaceScopeForAgent: (agentId) => {
4867
+ workspaceDirectoryForAgent: (agentId, serverNamespace, machineId) => {
4735
4868
  const config = this.running.get(agentId)?.config ?? this.idleConfigs.get(agentId)?.config;
4736
- return config ? { serverNamespace: config.serverNamespace, machineId: config.machineId } : void 0;
4869
+ if (config) return this.resolveWorkspaceDirectory(config, agentId);
4870
+ if (serverNamespace && machineId) return this.resolveWorkspaceDirectoryForParts(machineId, machineId, agentId, agentId);
4871
+ return void 0;
4737
4872
  }
4738
4873
  });
4739
4874
  this.reminderCache.onFire((job) => {
@@ -4801,15 +4936,15 @@ var AgentProcessManager = class {
4801
4936
  } else if (message.type === "agent:workspace:list") {
4802
4937
  await this.replyWorkspaceList(message.agentId, message.requestId, message.path, message.serverNamespace, message.machineId, message.config);
4803
4938
  } else if (message.type === "agent:workspace:read") {
4804
- await this.replyWorkspaceRead(message.agentId, message.requestId, message.path, message.serverNamespace, message.machineId);
4939
+ await this.replyWorkspaceRead(message.agentId, message.requestId, message.path, message.serverNamespace, message.machineId, message.config);
4805
4940
  } else if (message.type === "agent:workspace:write") {
4806
- await this.replyWorkspaceWrite(message.agentId, message.requestId, message.path, message.content, message.serverNamespace, message.machineId);
4941
+ await this.replyWorkspaceWrite(message.agentId, message.requestId, message.path, message.content, message.serverNamespace, message.machineId, message.config);
4807
4942
  } else if (message.type === "agent:skills:list") {
4808
4943
  await this.replyAgentSkillsList(message.agentId, message.requestId, message.runtime, message.serverNamespace, message.machineId, message.config);
4809
4944
  } else if (message.type === "agent:workspace:init") {
4810
4945
  await this.replyWorkspaceInit(message.requestId, message.agentId, message.config);
4811
4946
  } else if (message.type === "feishu:token:write") {
4812
- await this.replyFeishuTokenWrite(message.requestId, message.agentId, message.token, message.config);
4947
+ await this.replyFeishuTokenWrite(message.requestId, message.agentId, message.token, message.appId, message.brand, message.config);
4813
4948
  } else if (message.type === "feishu:token:clear") {
4814
4949
  await this.replyFeishuTokenClear(message.requestId, message.agentId, message.config);
4815
4950
  } else if (message.type === "feishu:delegation:start" || message.type === "feishu:delegation:update") {
@@ -4834,9 +4969,9 @@ var AgentProcessManager = class {
4834
4969
  const results = await this.detectRuntimeModels(message.runtimes ?? ["cursor", "claude", "codex", "gemini", "kimi", "hermes", "opencode"]);
4835
4970
  this.options.sendToServer({ type: "machine:runtime_models:result", requestId: message.requestId, results });
4836
4971
  } else if (message.type === "machine:workspace:scan") {
4837
- await this.replyMachineWorkspaceScan(message.requestId, message.serverNamespace, message.machineId, message.knownAgentIds ?? []);
4972
+ await this.replyMachineWorkspaceScan(message.requestId, message.serverNamespace, message.machineId, message.machineName, message.knownAgentIds ?? []);
4838
4973
  } else if (message.type === "machine:workspace:delete") {
4839
- await this.replyMachineWorkspaceDelete(message.requestId, message.serverNamespace, message.machineId, message.directoryName);
4974
+ await this.replyMachineWorkspaceDelete(message.requestId, message.serverNamespace, message.machineId, message.machineName, message.directoryName);
4840
4975
  } else if (message.type === "agent:reset-workspace") {
4841
4976
  await this.replyResetWorkspace(message.requestId, message.agentId, message.config);
4842
4977
  } else if (message.type === "agent:diagnostic") {
@@ -4973,7 +5108,9 @@ var AgentProcessManager = class {
4973
5108
  rootDir: this.options.rootDir,
4974
5109
  serverNamespace: config.serverNamespace,
4975
5110
  serverId: config.spaceId,
5111
+ machineDirectoryName: this.machineDirectoryName(config),
4976
5112
  machineId: config.machineId,
5113
+ agentDirectoryName: this.agentDirectoryName(config, agentId),
4977
5114
  daemonId: import_node_os8.default.hostname() || "local-daemon",
4978
5115
  agentId,
4979
5116
  agentName: config.agentName,
@@ -5043,16 +5180,18 @@ var AgentProcessManager = class {
5043
5180
  }
5044
5181
  async ensureAgentWorkspace(agentId, config) {
5045
5182
  const running = this.running.get(agentId);
5046
- if (running) return { workspace: running.workspace };
5183
+ if (running && !config?.feishuDelegationEnabled) return { workspace: running.workspace };
5047
5184
  const idle = this.idleConfigs.get(agentId);
5048
- if (idle?.workspace) return { workspace: idle.workspace };
5185
+ if (idle?.workspace && !config?.feishuDelegationEnabled) return { workspace: idle.workspace };
5049
5186
  const effectiveConfig = config ?? idle?.config;
5050
5187
  if (!effectiveConfig) return { missing: true };
5051
5188
  const workspace = await createAgentWorkspace({
5052
5189
  rootDir: this.options.rootDir,
5053
5190
  serverNamespace: effectiveConfig.serverNamespace,
5054
5191
  serverId: effectiveConfig.spaceId,
5192
+ machineDirectoryName: this.machineDirectoryName(effectiveConfig),
5055
5193
  machineId: effectiveConfig.machineId,
5194
+ agentDirectoryName: this.agentDirectoryName(effectiveConfig, agentId),
5056
5195
  daemonId: import_node_os8.default.hostname() || "local-daemon",
5057
5196
  agentId,
5058
5197
  agentName: effectiveConfig.agentName,
@@ -5060,6 +5199,10 @@ var AgentProcessManager = class {
5060
5199
  role: effectiveConfig.role,
5061
5200
  feishuDelegationEnabled: effectiveConfig.feishuDelegationEnabled
5062
5201
  });
5202
+ if (running) {
5203
+ running.workspace = workspace;
5204
+ running.config = effectiveConfig;
5205
+ }
5063
5206
  this.idleConfigs.set(agentId, { config: effectiveConfig, sessionId: effectiveConfig.sessionId, workspace });
5064
5207
  return { workspace };
5065
5208
  }
@@ -5071,7 +5214,7 @@ var AgentProcessManager = class {
5071
5214
  requestId,
5072
5215
  agentId,
5073
5216
  ok: true,
5074
- workspacePath: workspace ? `~/.wm/${config.serverNamespace}/${config.machineId}/${agentId}/` : void 0
5217
+ workspacePath: workspace ? this.workspaceDisplayPath(config, agentId) : void 0
5075
5218
  });
5076
5219
  } catch (error) {
5077
5220
  this.options.sendToServer({
@@ -5083,11 +5226,12 @@ var AgentProcessManager = class {
5083
5226
  });
5084
5227
  }
5085
5228
  }
5086
- async replyFeishuTokenWrite(requestId, agentId, token, config) {
5229
+ async replyFeishuTokenWrite(requestId, agentId, token, appId, brand, config) {
5087
5230
  try {
5088
5231
  const { workspace } = await this.ensureAgentWorkspace(agentId, config);
5089
5232
  if (!workspace) throw new Error(`workspace missing for ${agentId}`);
5090
5233
  const tokenPath = await writeFeishuToken({ workspaceDir: workspace.agentDir, token });
5234
+ await writeLarkCliWrapper({ workspaceDir: workspace.agentDir, appId, brand });
5091
5235
  this.options.sendToServer({ type: "feishu:token:write_result", requestId, agentId, ok: true, tokenPath });
5092
5236
  } catch (error) {
5093
5237
  this.options.sendToServer({
@@ -5651,9 +5795,7 @@ var AgentProcessManager = class {
5651
5795
  return;
5652
5796
  }
5653
5797
  const effectiveConfig = config ?? this.running.get(agentId)?.config ?? this.idleConfigs.get(agentId)?.config;
5654
- const namespace = serverNamespace ?? effectiveConfig?.serverNamespace;
5655
- const machine = machineId ?? effectiveConfig?.machineId;
5656
- const entries = await this.browser.listFiles(agentId, dirPath, namespace, machine);
5798
+ const entries = await this.browser.listFiles(agentId, dirPath, serverNamespace ?? effectiveConfig?.serverNamespace, machineId ?? effectiveConfig?.machineId);
5657
5799
  this.options.sendToServer({ type: "agent:workspace:file_tree", agentId, requestId, entries });
5658
5800
  } catch (error) {
5659
5801
  this.log(`workspace list failed agent=${agentId} request=${requestId} error=${error instanceof Error ? error.message : String(error)}`);
@@ -5666,10 +5808,11 @@ var AgentProcessManager = class {
5666
5808
  });
5667
5809
  }
5668
5810
  }
5669
- async replyWorkspaceRead(agentId, requestId, filePath, serverNamespace, machineId) {
5811
+ async replyWorkspaceRead(agentId, requestId, filePath, serverNamespace, machineId, config) {
5670
5812
  try {
5671
5813
  this.log(`workspace read agent=${agentId} request=${requestId} path=${filePath}`);
5672
- const file = await this.browser.readFile(agentId, filePath, serverNamespace, machineId);
5814
+ const effectiveConfig = config ?? this.running.get(agentId)?.config ?? this.idleConfigs.get(agentId)?.config;
5815
+ const file = await this.browser.readFile(agentId, filePath, serverNamespace ?? effectiveConfig?.serverNamespace, machineId ?? effectiveConfig?.machineId);
5673
5816
  this.options.sendToServer({ type: "agent:workspace:file_content", agentId, requestId, file });
5674
5817
  } catch (error) {
5675
5818
  this.log(`workspace read failed agent=${agentId} request=${requestId} error=${error instanceof Error ? error.message : String(error)}`);
@@ -5682,10 +5825,11 @@ var AgentProcessManager = class {
5682
5825
  });
5683
5826
  }
5684
5827
  }
5685
- async replyWorkspaceWrite(agentId, requestId, filePath, content, serverNamespace, machineId) {
5828
+ async replyWorkspaceWrite(agentId, requestId, filePath, content, serverNamespace, machineId, config) {
5686
5829
  try {
5687
5830
  this.log(`workspace write agent=${agentId} request=${requestId} path=${filePath}`);
5688
- const result = await this.browser.writeFile(agentId, filePath, content, serverNamespace, machineId);
5831
+ const effectiveConfig = config ?? this.running.get(agentId)?.config ?? this.idleConfigs.get(agentId)?.config;
5832
+ const result = await this.browser.writeFile(agentId, filePath, content, serverNamespace ?? effectiveConfig?.serverNamespace, machineId ?? effectiveConfig?.machineId);
5689
5833
  this.options.sendToServer({ type: "agent:workspace:write_result", agentId, requestId, ...result });
5690
5834
  } catch (error) {
5691
5835
  this.options.sendToServer({
@@ -5708,7 +5852,9 @@ var AgentProcessManager = class {
5708
5852
  const result = await scanAgentSkills({
5709
5853
  rootDir: this.options.rootDir,
5710
5854
  serverNamespace: namespace,
5855
+ machineDirectoryName: this.machineDirectoryName(effectiveConfig),
5711
5856
  machineId: machine,
5857
+ agentDirectoryName: effectiveConfig ? this.agentDirectoryName(effectiveConfig, agentId) : namedWorkspaceDirectoryName(agentId, agentId, "agent"),
5712
5858
  agentId,
5713
5859
  runtime
5714
5860
  });
@@ -5724,9 +5870,9 @@ var AgentProcessManager = class {
5724
5870
  });
5725
5871
  }
5726
5872
  }
5727
- async replyMachineWorkspaceScan(requestId, serverNamespace, machineId, knownAgentIds) {
5873
+ async replyMachineWorkspaceScan(requestId, serverNamespace, machineId, machineName, knownAgentIds) {
5728
5874
  try {
5729
- const entries = await this.scanWorkspaces(serverNamespace, machineId, new Set(knownAgentIds));
5875
+ const entries = await this.scanWorkspaces(serverNamespace, machineId, machineName, new Set(knownAgentIds));
5730
5876
  this.options.sendToServer({ type: "machine:workspace:scan/result", requestId, entries });
5731
5877
  } catch (error) {
5732
5878
  this.options.sendToServer({
@@ -5737,11 +5883,11 @@ var AgentProcessManager = class {
5737
5883
  });
5738
5884
  }
5739
5885
  }
5740
- async replyMachineWorkspaceDelete(requestId, serverNamespace, machineId, directoryName) {
5886
+ async replyMachineWorkspaceDelete(requestId, serverNamespace, machineId, machineName, directoryName) {
5741
5887
  try {
5742
5888
  if (!isSafeWorkspaceDirectoryName(directoryName)) throw new Error("unsafe workspace directory name");
5743
5889
  if (this.running.has(directoryName) || this.starting.has(directoryName)) throw new Error("cannot delete a running workspace");
5744
- const target = this.resolveWorkspaceDirectory(serverNamespace, machineId, directoryName);
5890
+ const target = this.resolveWorkspaceDirectoryName(machineName ?? machineId, machineId, directoryName);
5745
5891
  await (0, import_promises12.rm)(target, { recursive: true, force: true });
5746
5892
  this.options.sendToServer({ type: "machine:workspace:delete/result", requestId, directoryName, ok: true });
5747
5893
  } catch (error) {
@@ -5757,13 +5903,15 @@ var AgentProcessManager = class {
5757
5903
  async replyResetWorkspace(requestId, agentId, config) {
5758
5904
  try {
5759
5905
  await this.stopAgent(agentId, "reset-workspace");
5760
- const target = this.resolveWorkspaceDirectory(config.serverNamespace, config.machineId, agentId);
5906
+ const target = this.resolveWorkspaceDirectory(config, agentId);
5761
5907
  await (0, import_promises12.rm)(target, { recursive: true, force: true });
5762
5908
  const workspace = await createAgentWorkspace({
5763
5909
  rootDir: this.options.rootDir,
5764
5910
  serverNamespace: config.serverNamespace,
5765
5911
  serverId: config.spaceId,
5912
+ machineDirectoryName: this.machineDirectoryName(config),
5766
5913
  machineId: config.machineId,
5914
+ agentDirectoryName: this.agentDirectoryName(config, agentId),
5767
5915
  daemonId: import_node_os8.default.hostname() || "local-daemon",
5768
5916
  agentId,
5769
5917
  agentName: config.agentName,
@@ -5808,7 +5956,7 @@ var AgentProcessManager = class {
5808
5956
  const idle = this.idleConfigs.get(agentId);
5809
5957
  const effectiveConfig = running?.config ?? idle?.config ?? config;
5810
5958
  const workspace = running?.workspace ?? idle?.workspace;
5811
- const workspacePath = workspace?.agentDir ?? (effectiveConfig ? this.resolveWorkspaceDirectory(effectiveConfig.serverNamespace, effectiveConfig.machineId, agentId) : void 0);
5959
+ const workspacePath = workspace?.agentDir ?? (effectiveConfig ? this.resolveWorkspaceDirectory(effectiveConfig, agentId) : void 0);
5812
5960
  const workspaceExists = workspacePath ? await pathExists(workspacePath) : false;
5813
5961
  return {
5814
5962
  agentId,
@@ -5824,8 +5972,8 @@ var AgentProcessManager = class {
5824
5972
  lastActivity: this.lastActivities.get(agentId)
5825
5973
  };
5826
5974
  }
5827
- async scanWorkspaces(serverNamespace, machineId, knownAgentIds) {
5828
- const machineRoot = this.resolveMachineRoot(serverNamespace, machineId);
5975
+ async scanWorkspaces(serverNamespace, machineId, machineName, knownAgentIds) {
5976
+ const machineRoot = this.resolveMachineRoot(machineName ?? machineId, machineId);
5829
5977
  const names = await (0, import_promises12.readdir)(machineRoot, { withFileTypes: true }).catch((error) => {
5830
5978
  if (error.code === "ENOENT") return [];
5831
5979
  throw error;
@@ -5833,14 +5981,15 @@ var AgentProcessManager = class {
5833
5981
  const entries = [];
5834
5982
  for (const entry of names) {
5835
5983
  if (!entry.isDirectory() || !isSafeWorkspaceDirectoryName(entry.name)) continue;
5836
- const fullPath = this.resolveWorkspaceDirectory(serverNamespace, machineId, entry.name);
5984
+ const fullPath = this.resolveWorkspaceDirectoryName(machineName ?? machineId, machineId, entry.name);
5837
5985
  const summary = await summarizeDirectory(fullPath);
5986
+ const agentId = agentIdFromDirectoryName(entry.name, knownAgentIds);
5838
5987
  entries.push({
5839
5988
  directoryName: entry.name,
5840
- agentId: entry.name,
5841
- workspacePath: `~/.wm/${serverNamespace}/${machineId}/${entry.name}/`,
5842
- knownToServer: knownAgentIds.has(entry.name),
5843
- running: this.running.has(entry.name) || this.starting.has(entry.name),
5989
+ agentId,
5990
+ workspacePath: `~/.wm/${this.machineDirectoryNameForParts(machineName ?? machineId, machineId)}/${entry.name}/`,
5991
+ knownToServer: knownAgentIds.has(agentId),
5992
+ running: this.running.has(agentId) || this.starting.has(agentId),
5844
5993
  fileCount: summary.fileCount,
5845
5994
  totalSizeBytes: summary.totalSizeBytes,
5846
5995
  lastModified: summary.lastModified
@@ -5848,25 +5997,36 @@ var AgentProcessManager = class {
5848
5997
  }
5849
5998
  return entries.sort((a, b) => b.lastModified - a.lastModified || a.directoryName.localeCompare(b.directoryName));
5850
5999
  }
5851
- resolveNamespaceRoot(serverNamespace) {
5852
- if (!isSafeWorkspaceDirectoryName(serverNamespace)) throw new Error("unsafe server namespace");
5853
- const resolved = import_node_path13.default.resolve(this.options.rootDir, serverNamespace);
6000
+ resolveMachineRoot(machineName, machineId) {
6001
+ const machineDirectoryName = this.machineDirectoryNameForParts(machineName, machineId);
6002
+ if (!isSafeWorkspaceDirectoryName(machineDirectoryName)) throw new Error("unsafe machine directory");
6003
+ const resolved = import_node_path13.default.resolve(this.options.rootDir, machineDirectoryName);
5854
6004
  const base = import_node_path13.default.resolve(this.options.rootDir);
5855
6005
  if (resolved !== base && !resolved.startsWith(`${base}${import_node_path13.default.sep}`)) throw new Error("workspace root escapes daemon root");
5856
6006
  return resolved;
5857
6007
  }
5858
- resolveMachineRoot(serverNamespace, machineId) {
5859
- if (!isSafeWorkspaceDirectoryName(machineId)) throw new Error("unsafe machine id");
5860
- const namespaceRoot = this.resolveNamespaceRoot(serverNamespace);
5861
- const resolved = import_node_path13.default.resolve(namespaceRoot, machineId);
5862
- if (resolved !== namespaceRoot && !resolved.startsWith(`${namespaceRoot}${import_node_path13.default.sep}`)) {
5863
- throw new Error("machine workspace root escapes namespace");
5864
- }
5865
- return resolved;
6008
+ machineDirectoryName(config) {
6009
+ return this.machineDirectoryNameForParts(config?.machineName ?? this.options.machineDisplayName, config?.machineId ?? "machine");
6010
+ }
6011
+ machineDirectoryNameForParts(machineName, machineId) {
6012
+ return namedWorkspaceDirectoryName(machineName, machineId, "machine");
6013
+ }
6014
+ agentDirectoryName(config, agentId) {
6015
+ return namedWorkspaceDirectoryName(config.agentName, agentId, "agent");
6016
+ }
6017
+ workspaceDisplayPath(config, agentId) {
6018
+ return `~/.wm/${this.machineDirectoryName(config)}/${this.agentDirectoryName(config, agentId)}/`;
5866
6019
  }
5867
- resolveWorkspaceDirectory(serverNamespace, machineId, directoryName) {
6020
+ resolveWorkspaceDirectory(config, agentId) {
6021
+ return this.resolveWorkspaceDirectoryForParts(config.machineName ?? this.options.machineDisplayName, config.machineId, config.agentName, agentId);
6022
+ }
6023
+ resolveWorkspaceDirectoryForParts(machineName, machineId, agentName, agentId) {
6024
+ const directoryName = namedWorkspaceDirectoryName(agentName, agentId, "agent");
6025
+ return this.resolveWorkspaceDirectoryName(machineName, machineId, directoryName);
6026
+ }
6027
+ resolveWorkspaceDirectoryName(machineName, machineId, directoryName) {
5868
6028
  if (!isSafeWorkspaceDirectoryName(directoryName)) throw new Error("unsafe workspace directory name");
5869
- const machineRoot = this.resolveMachineRoot(serverNamespace, machineId);
6029
+ const machineRoot = this.resolveMachineRoot(machineName, machineId);
5870
6030
  const resolved = import_node_path13.default.resolve(machineRoot, directoryName);
5871
6031
  if (resolved !== machineRoot && !resolved.startsWith(`${machineRoot}${import_node_path13.default.sep}`)) {
5872
6032
  throw new Error("workspace directory escapes machine root");
@@ -5946,7 +6106,9 @@ function formatActionableMessagePrompt(messages, wrapperPath) {
5946
6106
  first?.message_id ? `Message ID: ${first.message_id}` : "Message ID: unknown",
5947
6107
  `Thread reply target: ${replyTarget}`,
5948
6108
  "",
5949
- "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.",
6109
+ "Before acting, identify the requested work surface: Wage Mule platform, local workspace, or an external system. Use the tool for that surface.",
6110
+ "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.",
6111
+ "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.",
5950
6112
  "",
5951
6113
  "Complete the requested work. When you have a channel-visible final reply, send it with this agent-local absolute command:",
5952
6114
  replyCommand,
@@ -6029,6 +6191,12 @@ async function summarizeDirectory(root) {
6029
6191
  await visit(root);
6030
6192
  return { fileCount, totalSizeBytes, lastModified };
6031
6193
  }
6194
+ function agentIdFromDirectoryName(directoryName, knownAgentIds) {
6195
+ for (const agentId of knownAgentIds) {
6196
+ if (directoryName.endsWith(`-${agentId}`)) return agentId;
6197
+ }
6198
+ return directoryName;
6199
+ }
6032
6200
  async function pathExists(targetPath) {
6033
6201
  try {
6034
6202
  await (0, import_promises12.stat)(targetPath);
@@ -6129,6 +6297,7 @@ async function runDaemon(input) {
6129
6297
  let connection;
6130
6298
  const manager = new AgentProcessManager({
6131
6299
  rootDir: input.rootDir,
6300
+ machineDisplayName: input.name?.trim() || import_node_os9.default.hostname() || "machine",
6132
6301
  sendToServer: (msg) => connection.send(msg),
6133
6302
  log
6134
6303
  });