@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.
- package/README.md +9 -2
- package/dist/main.cjs +270 -101
- 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/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
|
-
|
|
2265
|
-
|
|
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.
|
|
2293
|
-
const agentDir = import_node_path4.default.join(serverDir, input.
|
|
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
|
|
2419
|
-
"4. `wm message
|
|
2420
|
-
"5. `wm
|
|
2421
|
-
"6. `wm
|
|
2422
|
-
"7. `wm
|
|
2423
|
-
"8. `wm
|
|
2424
|
-
"9. `wm task
|
|
2425
|
-
"10. `wm task
|
|
2426
|
-
"11. `wm task
|
|
2427
|
-
"12. `wm
|
|
2428
|
-
"13. `wm
|
|
2429
|
-
"14. `wm
|
|
2430
|
-
"15. `wm
|
|
2431
|
-
"16. `wm
|
|
2432
|
-
"17. `wm
|
|
2433
|
-
"18. `wm reminder
|
|
2434
|
-
"19. `wm reminder
|
|
2435
|
-
"20. `wm reminder
|
|
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(
|
|
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,
|
|
2528
|
-
|
|
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
|
|
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(
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
4867
|
+
workspaceDirectoryForAgent: (agentId, serverNamespace, machineId) => {
|
|
4735
4868
|
const config = this.running.get(agentId)?.config ?? this.idleConfigs.get(agentId)?.config;
|
|
4736
|
-
|
|
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 ?
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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(
|
|
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.
|
|
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
|
|
5841
|
-
workspacePath: `~/.wm/${
|
|
5842
|
-
knownToServer: knownAgentIds.has(
|
|
5843
|
-
running: this.running.has(
|
|
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
|
-
|
|
5852
|
-
|
|
5853
|
-
|
|
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
|
-
|
|
5859
|
-
|
|
5860
|
-
|
|
5861
|
-
|
|
5862
|
-
|
|
5863
|
-
|
|
5864
|
-
|
|
5865
|
-
return
|
|
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(
|
|
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(
|
|
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
|
-
"
|
|
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
|
});
|