@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.
- package/README.md +9 -1
- package/dist/main.cjs +246 -42
- package/dist/main.cjs.map +3 -3
- package/dist/skills/larksuite/lark-approval/SKILL.md +56 -0
- package/dist/skills/larksuite/lark-attendance/SKILL.md +57 -0
- package/dist/skills/larksuite/lark-base/SKILL.md +349 -0
- package/dist/skills/larksuite/lark-base/references/dashboard-block-data-config.md +350 -0
- package/dist/skills/larksuite/lark-base/references/examples.md +140 -0
- package/dist/skills/larksuite/lark-base/references/formula-field-guide.md +735 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-advperm-disable.md +83 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-advperm-enable.md +80 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-base-copy.md +74 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-base-create.md +68 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-base-get.md +39 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-cell-value.md +151 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-arrange.md +83 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-block-create.md +108 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-block-delete.md +46 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-block-get.md +57 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-block-list.md +53 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-block-update.md +84 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-create.md +73 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-delete.md +44 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-get.md +59 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-list.md +52 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-dashboard-update.md +69 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-dashboard.md +240 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-data-analysis-sop.md +88 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-data-query.md +451 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-field-create.md +104 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-field-delete.md +51 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-field-get.md +42 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-field-list.md +44 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-field-search-options.md +48 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-field-update.md +166 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-field.md +23 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-form-create.md +87 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-form-delete.md +64 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-form-get.md +68 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-form-list.md +73 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-form-questions-create.md +118 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-form-questions-delete.md +68 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-form-questions-list.md +84 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-form-questions-update.md +92 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-form-questions.md +23 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-form-update.md +82 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-form.md +24 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-history.md +16 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-record-batch-create.md +58 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-record-batch-update.md +53 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-record-delete.md +62 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-record-history-list.md +86 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-record-share-link-create.md +72 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-record-upload-attachment.md +50 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-record-upsert.md +64 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-record.md +29 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-role-create.md +89 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-role-delete.md +83 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-role-get.md +87 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-role-list.md +81 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-role-update.md +94 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-shortcut-field-properties.md +481 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-table-create.md +62 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-table-delete.md +51 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-table-get.md +46 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-table-list.md +43 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-table-update.md +49 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-table.md +20 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-create.md +50 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-delete.md +48 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-get-card.md +38 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-get-filter.md +38 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-get-group.md +38 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-get-sort.md +38 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-get-timebar.md +38 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-get-visible-fields.md +28 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-get.md +38 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-list.md +44 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-rename.md +44 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-set-card.md +55 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-set-filter.md +181 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-set-group.md +65 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-set-sort.md +63 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-set-timebar.md +51 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view-set-visible-fields.md +46 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-view.md +44 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-workflow-create.md +180 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-workflow-disable.md +94 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-workflow-enable.md +94 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-workflow-get.md +147 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-workflow-guide.md +718 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-workflow-list.md +124 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-workflow-schema.md +935 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-workflow-update.md +167 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-workflow.md +23 -0
- package/dist/skills/larksuite/lark-base/references/lark-base-workspace.md +18 -0
- package/dist/skills/larksuite/lark-base/references/lookup-field-guide.md +510 -0
- package/dist/skills/larksuite/lark-base/references/role-config.md +539 -0
- package/dist/skills/larksuite/lark-calendar/SKILL.md +154 -0
- package/dist/skills/larksuite/lark-calendar/references/lark-calendar-agenda.md +78 -0
- package/dist/skills/larksuite/lark-calendar/references/lark-calendar-create.md +109 -0
- package/dist/skills/larksuite/lark-calendar/references/lark-calendar-freebusy.md +124 -0
- package/dist/skills/larksuite/lark-calendar/references/lark-calendar-room-find.md +113 -0
- package/dist/skills/larksuite/lark-calendar/references/lark-calendar-rsvp.md +42 -0
- package/dist/skills/larksuite/lark-calendar/references/lark-calendar-schedule-meeting.md +265 -0
- package/dist/skills/larksuite/lark-calendar/references/lark-calendar-suggestion.md +125 -0
- package/dist/skills/larksuite/lark-calendar/references/lark-calendar-update.md +105 -0
- package/dist/skills/larksuite/lark-contact/SKILL.md +45 -0
- package/dist/skills/larksuite/lark-contact/references/lark-contact-get-user.md +19 -0
- package/dist/skills/larksuite/lark-contact/references/lark-contact-search-user.md +124 -0
- package/dist/skills/larksuite/lark-doc/SKILL.md +69 -0
- package/dist/skills/larksuite/lark-doc/references/lark-doc-create.md +89 -0
- package/dist/skills/larksuite/lark-doc/references/lark-doc-fetch.md +141 -0
- package/dist/skills/larksuite/lark-doc/references/lark-doc-md.md +71 -0
- package/dist/skills/larksuite/lark-doc/references/lark-doc-media-download.md +50 -0
- package/dist/skills/larksuite/lark-doc/references/lark-doc-media-insert.md +114 -0
- package/dist/skills/larksuite/lark-doc/references/lark-doc-media-preview.md +41 -0
- package/dist/skills/larksuite/lark-doc/references/lark-doc-search.md +217 -0
- package/dist/skills/larksuite/lark-doc/references/lark-doc-update.md +252 -0
- package/dist/skills/larksuite/lark-doc/references/lark-doc-whiteboard.md +100 -0
- package/dist/skills/larksuite/lark-doc/references/lark-doc-xml.md +169 -0
- package/dist/skills/larksuite/lark-doc/references/style/lark-doc-create-workflow.md +56 -0
- package/dist/skills/larksuite/lark-doc/references/style/lark-doc-style.md +106 -0
- package/dist/skills/larksuite/lark-doc/references/style/lark-doc-update-workflow.md +54 -0
- package/dist/skills/larksuite/lark-drive/SKILL.md +343 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-add-comment.md +169 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-apply-permission.md +77 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-create-folder.md +73 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-create-shortcut.md +103 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-delete.md +79 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-download.md +31 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-export-download.md +50 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-export.md +119 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-import.md +154 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-move.md +120 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-pull.md +137 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-push.md +162 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-reactions.md +113 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-search.md +239 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-status.md +137 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-task-result.md +302 -0
- package/dist/skills/larksuite/lark-drive/references/lark-drive-upload.md +101 -0
- package/dist/skills/larksuite/lark-event/SKILL.md +145 -0
- package/dist/skills/larksuite/lark-event/references/lark-event-im.md +86 -0
- package/dist/skills/larksuite/lark-im/SKILL.md +162 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-chat-create.md +162 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-chat-identity.md +55 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-chat-list.md +113 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-chat-messages-list.md +142 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-chat-search.md +136 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-chat-update.md +84 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-flag-cancel.md +67 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-flag-create.md +67 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-flag-list.md +100 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-messages-mget.md +95 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-messages-reply.md +222 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-messages-resources-download.md +94 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-messages-search.md +217 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-messages-send.md +223 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-reactions.md +297 -0
- package/dist/skills/larksuite/lark-im/references/lark-im-threads-messages-list.md +111 -0
- package/dist/skills/larksuite/lark-mail/SKILL.md +648 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-decline-receipt.md +115 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-draft-create.md +123 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-draft-edit.md +400 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-forward.md +232 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-message.md +230 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-messages.md +108 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-reply-all.md +206 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-reply.md +242 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-send-receipt.md +120 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-send.md +216 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-share-to-chat.md +87 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-signature.md +98 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-template-create.md +129 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-template-update.md +150 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-thread.md +111 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-triage.md +122 -0
- package/dist/skills/larksuite/lark-mail/references/lark-mail-watch.md +94 -0
- package/dist/skills/larksuite/lark-markdown/SKILL.md +46 -0
- package/dist/skills/larksuite/lark-markdown/references/lark-markdown-create.md +86 -0
- package/dist/skills/larksuite/lark-markdown/references/lark-markdown-fetch.md +79 -0
- package/dist/skills/larksuite/lark-markdown/references/lark-markdown-overwrite.md +85 -0
- package/dist/skills/larksuite/lark-minutes/SKILL.md +139 -0
- package/dist/skills/larksuite/lark-minutes/references/lark-minutes-download.md +137 -0
- package/dist/skills/larksuite/lark-minutes/references/lark-minutes-search.md +206 -0
- package/dist/skills/larksuite/lark-minutes/references/lark-minutes-upload.md +104 -0
- package/dist/skills/larksuite/lark-okr/SKILL.md +133 -0
- package/dist/skills/larksuite/lark-okr/references/lark-okr-contentblock.md +359 -0
- package/dist/skills/larksuite/lark-okr/references/lark-okr-cycle-detail.md +84 -0
- package/dist/skills/larksuite/lark-okr/references/lark-okr-cycle-list.md +90 -0
- package/dist/skills/larksuite/lark-okr/references/lark-okr-entities.md +329 -0
- package/dist/skills/larksuite/lark-okr/references/lark-okr-image-upload.md +116 -0
- package/dist/skills/larksuite/lark-okr/references/lark-okr-progress-create.md +81 -0
- package/dist/skills/larksuite/lark-okr/references/lark-okr-progress-delete.md +47 -0
- package/dist/skills/larksuite/lark-okr/references/lark-okr-progress-get.md +62 -0
- package/dist/skills/larksuite/lark-okr/references/lark-okr-progress-list.md +80 -0
- package/dist/skills/larksuite/lark-okr/references/lark-okr-progress-update.md +81 -0
- package/dist/skills/larksuite/lark-openapi-explorer/SKILL.md +153 -0
- package/dist/skills/larksuite/lark-shared/SKILL.md +138 -0
- package/dist/skills/larksuite/lark-sheets/SKILL.md +345 -0
- package/dist/skills/larksuite/lark-sheets/references/lark-sheets-cell-data.md +197 -0
- package/dist/skills/larksuite/lark-sheets/references/lark-sheets-cell-images.md +59 -0
- package/dist/skills/larksuite/lark-sheets/references/lark-sheets-cell-style-and-merge.md +141 -0
- package/dist/skills/larksuite/lark-sheets/references/lark-sheets-dropdown.md +133 -0
- package/dist/skills/larksuite/lark-sheets/references/lark-sheets-filter-views.md +193 -0
- package/dist/skills/larksuite/lark-sheets/references/lark-sheets-float-images.md +125 -0
- package/dist/skills/larksuite/lark-sheets/references/lark-sheets-formula.md +88 -0
- package/dist/skills/larksuite/lark-sheets/references/lark-sheets-row-column-management.md +151 -0
- package/dist/skills/larksuite/lark-sheets/references/lark-sheets-sheet-management.md +164 -0
- package/dist/skills/larksuite/lark-sheets/references/lark-sheets-spreadsheet-management.md +134 -0
- package/dist/skills/larksuite/lark-skill-maker/SKILL.md +85 -0
- package/dist/skills/larksuite/lark-slides/SKILL.md +525 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/administration--all_hands_meeting.xml +1999 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/administration--annual_gala.xml +1160 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/administration--company_intro.xml +1376 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/administration--corporate_culture.xml +1765 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/hr--employee_training.xml +912 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/hr--employee_training_workshop.xml +1504 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/hr--onboarding.xml +933 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/marketing--brand_communication.xml +1367 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/marketing--brand_logo_design.xml +1347 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/marketing--brand_operations_plan.xml +1309 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/marketing--business_plan.xml +1646 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/marketing--marketing_plan.xml +1469 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/marketing--marketing_strategy.xml +1484 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/marketing--product_whitepaper.xml +1455 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/marketing--roadshow_business_plan.xml +1506 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/misc--book_sharing.xml +1338 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/misc--club_event_plan.xml +4885 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/misc--student_career_plan.xml +1854 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/office--dark_general.xml +3763 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/office--dept_annual_report.xml +1192 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/office--light_general.xml +3378 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/office--project_kickoff.xml +3152 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/office--quarterly_review.xml +1253 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/office--work_report.xml +1099 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/office--work_summary.xml +4420 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/office--work_summary_report.xml +1523 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/operations--brand_logo_design.xml +1347 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/operations--brand_operations_plan.xml +1309 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/operations--marketing_plan.xml +1469 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/operations--product_promotion.xml +687 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/personal--experience_sharing.xml +2242 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/personal--personal_resume.xml +2047 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/personal--promotion_defense.xml +1099 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/personal--promotion_report.xml +1039 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/personal--self_intro.xml +696 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/personal--teaching_sharing.xml +3013 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/product--business_case_analysis.xml +1341 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/product--market_analysis.xml +898 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/product--product_analysis.xml +1537 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/product--product_intro.xml +2838 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/product--product_promotion.xml +687 -0
- package/dist/skills/larksuite/lark-slides/assets/templates/product--product_promotion_2.xml +687 -0
- package/dist/skills/larksuite/lark-slides/references/examples.md +261 -0
- package/dist/skills/larksuite/lark-slides/references/lark-slides-create.md +137 -0
- package/dist/skills/larksuite/lark-slides/references/lark-slides-edit-workflows.md +142 -0
- package/dist/skills/larksuite/lark-slides/references/lark-slides-media-upload.md +128 -0
- package/dist/skills/larksuite/lark-slides/references/lark-slides-replace-slide.md +239 -0
- package/dist/skills/larksuite/lark-slides/references/lark-slides-xml-presentation-slide-create.md +221 -0
- package/dist/skills/larksuite/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +123 -0
- package/dist/skills/larksuite/lark-slides/references/lark-slides-xml-presentation-slide-get.md +110 -0
- package/dist/skills/larksuite/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +186 -0
- package/dist/skills/larksuite/lark-slides/references/lark-slides-xml-presentations-get.md +98 -0
- package/dist/skills/larksuite/lark-slides/references/slide-templates.md +201 -0
- package/dist/skills/larksuite/lark-slides/references/slides_demo.xml +226 -0
- package/dist/skills/larksuite/lark-slides/references/slides_xml_schema_definition.xml +3004 -0
- package/dist/skills/larksuite/lark-slides/references/template-catalog.md +464 -0
- package/dist/skills/larksuite/lark-slides/references/template-index.json +1853 -0
- package/dist/skills/larksuite/lark-slides/references/xml-format-guide.md +369 -0
- package/dist/skills/larksuite/lark-slides/references/xml-schema-quick-ref.md +215 -0
- package/dist/skills/larksuite/lark-slides/scripts/layout_lint.py +349 -0
- package/dist/skills/larksuite/lark-slides/scripts/layout_lint_test.py +159 -0
- package/dist/skills/larksuite/lark-slides/scripts/template_tool.py +970 -0
- package/dist/skills/larksuite/lark-slides/scripts/template_tool_test.py +177 -0
- package/dist/skills/larksuite/lark-task/SKILL.md +165 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-assign.md +38 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-comment.md +28 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-complete.md +27 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-create.md +57 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-followers.md +35 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-get-my-tasks.md +55 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-get-related-tasks.md +53 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-reminder.md +36 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-reopen.md +27 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-search.md +41 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-set-ancestor.md +32 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-subscribe-event.md +86 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-tasklist-create.md +35 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-tasklist-members.md +36 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-tasklist-search.md +38 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-tasklist-task-add.md +38 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-update.md +37 -0
- package/dist/skills/larksuite/lark-task/references/lark-task-upload-attachment.md +59 -0
- package/dist/skills/larksuite/lark-vc/SKILL.md +168 -0
- package/dist/skills/larksuite/lark-vc/references/lark-vc-notes.md +126 -0
- package/dist/skills/larksuite/lark-vc/references/lark-vc-recording.md +153 -0
- package/dist/skills/larksuite/lark-vc/references/lark-vc-search.md +176 -0
- package/dist/skills/larksuite/lark-vc-agent/SKILL.md +121 -0
- package/dist/skills/larksuite/lark-vc-agent/references/lark-vc-agent-meeting-events.md +247 -0
- package/dist/skills/larksuite/lark-vc-agent/references/lark-vc-agent-meeting-join.md +133 -0
- package/dist/skills/larksuite/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +111 -0
- package/dist/skills/larksuite/lark-whiteboard/SKILL.md +144 -0
- package/dist/skills/larksuite/lark-whiteboard/references/connectors.md +102 -0
- package/dist/skills/larksuite/lark-whiteboard/references/content.md +40 -0
- package/dist/skills/larksuite/lark-whiteboard/references/image.md +80 -0
- package/dist/skills/larksuite/lark-whiteboard/references/lark-whiteboard-query.md +49 -0
- package/dist/skills/larksuite/lark-whiteboard/references/lark-whiteboard-update.md +100 -0
- package/dist/skills/larksuite/lark-whiteboard/references/layout.md +374 -0
- package/dist/skills/larksuite/lark-whiteboard/references/schema.md +357 -0
- package/dist/skills/larksuite/lark-whiteboard/references/style.md +318 -0
- package/dist/skills/larksuite/lark-whiteboard/references/typography.md +73 -0
- package/dist/skills/larksuite/lark-whiteboard/routes/dsl.md +107 -0
- package/dist/skills/larksuite/lark-whiteboard/routes/mermaid.md +27 -0
- package/dist/skills/larksuite/lark-whiteboard/routes/svg.md +54 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/architecture.md +433 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/bar-chart.md +187 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/comparison.md +135 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/fishbone.md +238 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/flowchart.md +185 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/flywheel.md +195 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/funnel.md +101 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/line-chart.md +214 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/mermaid.md +130 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/milestone.md +139 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/organization.md +173 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/photo-showcase.md +126 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/pyramid.md +99 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/swimlane.md +371 -0
- package/dist/skills/larksuite/lark-whiteboard/scenes/treemap.md +216 -0
- package/dist/skills/larksuite/lark-wiki/SKILL.md +111 -0
- package/dist/skills/larksuite/lark-wiki/references/lark-wiki-delete-space.md +205 -0
- package/dist/skills/larksuite/lark-wiki/references/lark-wiki-move.md +183 -0
- package/dist/skills/larksuite/lark-wiki/references/lark-wiki-node-copy.md +72 -0
- package/dist/skills/larksuite/lark-wiki/references/lark-wiki-node-create.md +127 -0
- package/dist/skills/larksuite/lark-wiki/references/lark-wiki-node-list.md +88 -0
- package/dist/skills/larksuite/lark-wiki/references/lark-wiki-space-list.md +68 -0
- package/dist/skills/larksuite/lark-workflow-meeting-summary/SKILL.md +104 -0
- package/dist/skills/larksuite/lark-workflow-standup-report/SKILL.md +120 -0
- 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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2266
|
-
|
|
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(
|
|
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,
|
|
2532
|
-
|
|
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.
|
|
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
|
-
|
|
4954
|
-
"
|
|
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
|
-
"
|
|
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,
|