dsh-crwu-workbench 0.0.10
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/CHANGELOG.md +1516 -0
- package/LICENSE +26 -0
- package/README.en.md +204 -0
- package/README.md +521 -0
- package/SECURITY.md +39 -0
- package/bin/darwin-arm64/crwu +0 -0
- package/bin/darwin-arm64/dws +0 -0
- package/bin/darwin-arm64/ossutil +0 -0
- package/bin/manifest.json +82 -0
- package/bin/win32-x64/crwu.exe +0 -0
- package/bin/win32-x64/dws.exe +4 -0
- package/bin/win32-x64/ossutil.exe +0 -0
- package/common/skills/.synced.json +8 -0
- package/common/skills/crwu-dws/SKILL.md +208 -0
- package/common/skills/crwu-dws/references/00-/347/233/256/345/275/225/345/277/253/347/205/247schema.md +113 -0
- package/common/skills/crwu-dws/references/01-/345/256/241/346/240/270/344/270/213/350/275/275/344/270/216manifest/350/247/204/350/214/203.md +115 -0
- package/common/skills/crwu-dws/references/02-/347/274/223/345/255/230/344/270/216/345/205/234/345/272/225/346/237/245/346/211/276/350/247/204/350/214/203.md +119 -0
- package/common/skills/crwu-dws/scripts/test_dws_source_contract.py +493 -0
- package/common/skills/crwu-h3yun-login/SKILL.md +130 -0
- package/common/skills/crwu-h3yun-query/SKILL.md +192 -0
- package/config/crwu-workbench.yml +26 -0
- package/cordis.patch.yml +46 -0
- package/lib/client.js +10346 -0
- package/lib/index.js +11584 -0
- package/package.json +119 -0
- package/scripts/prepare.mjs +59 -0
- package/skills/README.md +26 -0
- package/skills/crwu/crwu-audit/SKILL.md +152 -0
- package/skills/crwu/crwu-audit/references/00-input-and-route-profile.md +232 -0
- package/skills/crwu/crwu-audit/references/01-report-id-resolution.md +13 -0
- package/skills/crwu/crwu-audit/references/02-scope-classification.md +25 -0
- package/skills/crwu/crwu-audit/references/03-asset-classification.md +27 -0
- package/skills/crwu/crwu-audit/references/04-business-classification.md +63 -0
- package/skills/crwu/crwu-audit/references/05-method-classification.md +66 -0
- package/skills/crwu/crwu-audit/references/06-overlay-classification.md +42 -0
- package/skills/crwu/crwu-audit/references/07-skill-registry.md +57 -0
- package/skills/crwu/crwu-audit/references/08-union-dispatch-rules.md +142 -0
- package/skills/crwu/crwu-audit/references/09-review-risk-classification.md +85 -0
- package/skills/crwu/crwu-audit/references/10-capability-gap-proposal.md +68 -0
- package/skills/crwu/crwu-audit/references/11-html-delivery-spec.md +881 -0
- package/skills/crwu/crwu-audit/references/12-leaf-common-contract.md +202 -0
- package/skills/crwu/crwu-audit/references/13-dingtalk-result-publish.md +88 -0
- package/skills/crwu/crwu-audit/references/14-orchestration-workflow.md +52 -0
- package/skills/crwu/crwu-audit/references/99-maintenance.md +62 -0
- package/skills/crwu/crwu-audit/scripts/README.md +157 -0
- package/skills/crwu/crwu-audit/scripts/audit_delivery.py +2736 -0
- package/skills/crwu/crwu-audit/scripts/audit_result.schema.json +1659 -0
- package/skills/crwu/crwu-audit/scripts/examples/audit-result.sample.json +739 -0
- package/skills/crwu/crwu-audit/scripts/fetch_review_records.py +85 -0
- package/skills/crwu/crwu-audit/scripts/media_extract.py +513 -0
- package/skills/crwu/crwu-audit/scripts/prepare_materials.py +1252 -0
- package/skills/crwu/crwu-audit/scripts/test_audit_delivery.py +1678 -0
- package/skills/crwu/crwu-audit/scripts/test_audit_multiaxis_router.py +1339 -0
- package/skills/crwu/crwu-audit/scripts/test_fetch_review_records.py +77 -0
- package/skills/crwu/crwu-audit/scripts/test_media_extract.py +332 -0
- package/skills/crwu/crwu-audit/scripts/test_prepare_materials.py +1081 -0
- package/skills/crwu/crwu-audit/template/audit-report.html +435 -0
- package/skills/crwu/crwu-audit-asset-asset-group-goodwill/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-asset-asset-group-goodwill/references/00-applicability.md +28 -0
- package/skills/crwu/crwu-audit-asset-asset-group-goodwill/references/01-kb-assembly.md +31 -0
- package/skills/crwu/crwu-audit-asset-asset-group-goodwill/references/02-review-focus.md +21 -0
- package/skills/crwu/crwu-audit-asset-asset-group-goodwill/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-asset-debt/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-asset-debt/references/00-applicability.md +40 -0
- package/skills/crwu/crwu-audit-asset-debt/references/01-kb-assembly.md +41 -0
- package/skills/crwu/crwu-audit-asset-debt/references/02-review-focus.md +54 -0
- package/skills/crwu/crwu-audit-asset-debt/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-asset-enterprise-value/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-asset-enterprise-value/references/00-applicability.md +31 -0
- package/skills/crwu/crwu-audit-asset-enterprise-value/references/01-kb-assembly.md +35 -0
- package/skills/crwu/crwu-audit-asset-enterprise-value/references/02-review-focus.md +33 -0
- package/skills/crwu/crwu-audit-asset-enterprise-value/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-asset-equipment/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-asset-equipment/references/00-applicability.md +40 -0
- package/skills/crwu/crwu-audit-asset-equipment/references/01-kb-assembly.md +39 -0
- package/skills/crwu/crwu-audit-asset-equipment/references/02-review-focus.md +52 -0
- package/skills/crwu/crwu-audit-asset-equipment/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-asset-intangible/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-asset-intangible/references/00-applicability.md +36 -0
- package/skills/crwu/crwu-audit-asset-intangible/references/01-kb-assembly.md +40 -0
- package/skills/crwu/crwu-audit-asset-intangible/references/02-review-focus.md +68 -0
- package/skills/crwu/crwu-audit-asset-intangible/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-asset-inventory/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-asset-inventory/references/00-applicability.md +28 -0
- package/skills/crwu/crwu-audit-asset-inventory/references/01-kb-assembly.md +31 -0
- package/skills/crwu/crwu-audit-asset-inventory/references/02-review-focus.md +21 -0
- package/skills/crwu/crwu-audit-asset-inventory/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-asset-mining-right/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-asset-mining-right/references/00-applicability.md +31 -0
- package/skills/crwu/crwu-audit-asset-mining-right/references/01-kb-assembly.md +35 -0
- package/skills/crwu/crwu-audit-asset-mining-right/references/02-review-focus.md +33 -0
- package/skills/crwu/crwu-audit-asset-mining-right/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-asset-other/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-asset-other/references/00-applicability.md +28 -0
- package/skills/crwu/crwu-audit-asset-other/references/01-kb-assembly.md +31 -0
- package/skills/crwu/crwu-audit-asset-other/references/02-review-focus.md +21 -0
- package/skills/crwu/crwu-audit-asset-other/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-asset-portfolio/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-asset-portfolio/references/00-applicability.md +28 -0
- package/skills/crwu/crwu-audit-asset-portfolio/references/01-kb-assembly.md +31 -0
- package/skills/crwu/crwu-audit-asset-portfolio/references/02-review-focus.md +21 -0
- package/skills/crwu/crwu-audit-asset-portfolio/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-asset-realestate/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-asset-realestate/references/00-applicability.md +43 -0
- package/skills/crwu/crwu-audit-asset-realestate/references/01-kb-assembly.md +75 -0
- package/skills/crwu/crwu-audit-asset-realestate/references/02-review-focus.md +93 -0
- package/skills/crwu/crwu-audit-asset-realestate/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-asset-scrap-materials/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-asset-scrap-materials/references/00-applicability.md +28 -0
- package/skills/crwu/crwu-audit-asset-scrap-materials/references/01-kb-assembly.md +31 -0
- package/skills/crwu/crwu-audit-asset-scrap-materials/references/02-review-focus.md +21 -0
- package/skills/crwu/crwu-audit-asset-scrap-materials/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-asset-transport-equipment/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-asset-transport-equipment/references/00-applicability.md +31 -0
- package/skills/crwu/crwu-audit-asset-transport-equipment/references/01-kb-assembly.md +35 -0
- package/skills/crwu/crwu-audit-asset-transport-equipment/references/02-review-focus.md +33 -0
- package/skills/crwu/crwu-audit-asset-transport-equipment/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-biz-asset-operation/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-biz-asset-operation/references/00-applicability.md +30 -0
- package/skills/crwu/crwu-audit-biz-asset-operation/references/01-kb-assembly.md +32 -0
- package/skills/crwu/crwu-audit-biz-asset-operation/references/02-review-focus.md +42 -0
- package/skills/crwu/crwu-audit-biz-asset-operation/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-biz-consulting-review/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-biz-consulting-review/references/00-applicability.md +30 -0
- package/skills/crwu/crwu-audit-biz-consulting-review/references/01-kb-assembly.md +32 -0
- package/skills/crwu/crwu-audit-biz-consulting-review/references/02-review-focus.md +40 -0
- package/skills/crwu/crwu-audit-biz-consulting-review/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-biz-financial-reporting/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-biz-financial-reporting/references/00-applicability.md +41 -0
- package/skills/crwu/crwu-audit-biz-financial-reporting/references/01-kb-assembly.md +40 -0
- package/skills/crwu/crwu-audit-biz-financial-reporting/references/02-review-focus.md +64 -0
- package/skills/crwu/crwu-audit-biz-financial-reporting/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-biz-financing-debt/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-biz-financing-debt/references/00-applicability.md +31 -0
- package/skills/crwu/crwu-audit-biz-financing-debt/references/01-kb-assembly.md +34 -0
- package/skills/crwu/crwu-audit-biz-financing-debt/references/02-review-focus.md +47 -0
- package/skills/crwu/crwu-audit-biz-financing-debt/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-biz-investment-capital/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-biz-investment-capital/references/00-applicability.md +31 -0
- package/skills/crwu/crwu-audit-biz-investment-capital/references/01-kb-assembly.md +34 -0
- package/skills/crwu/crwu-audit-biz-investment-capital/references/02-review-focus.md +47 -0
- package/skills/crwu/crwu-audit-biz-investment-capital/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-biz-judicial-liquidation-compensation/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-biz-judicial-liquidation-compensation/references/00-applicability.md +30 -0
- package/skills/crwu/crwu-audit-biz-judicial-liquidation-compensation/references/01-kb-assembly.md +32 -0
- package/skills/crwu/crwu-audit-biz-judicial-liquidation-compensation/references/02-review-focus.md +40 -0
- package/skills/crwu/crwu-audit-biz-judicial-liquidation-compensation/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-biz-tax-history/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-biz-tax-history/references/00-applicability.md +29 -0
- package/skills/crwu/crwu-audit-biz-tax-history/references/01-kb-assembly.md +30 -0
- package/skills/crwu/crwu-audit-biz-tax-history/references/02-review-focus.md +33 -0
- package/skills/crwu/crwu-audit-biz-tax-history/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-biz-transaction-disposal/SKILL.md +38 -0
- package/skills/crwu/crwu-audit-biz-transaction-disposal/references/00-applicability.md +31 -0
- package/skills/crwu/crwu-audit-biz-transaction-disposal/references/01-kb-assembly.md +34 -0
- package/skills/crwu/crwu-audit-biz-transaction-disposal/references/02-review-focus.md +47 -0
- package/skills/crwu/crwu-audit-biz-transaction-disposal/references/03-common-contract.md +202 -0
- package/skills/crwu/crwu-audit-datacheck/SKILL.md +59 -0
- package/skills/crwu/crwu-audit-datacheck/references/00-KB/350/243/205/351/205/215/350/241/250.md +25 -0
- package/skills/crwu/crwu-audit-datacheck/references/01-runtime-and-check-catalog.md +139 -0
- package/skills/crwu/crwu-audit-datacheck/scripts/recalc_check.py +521 -0
- package/skills/crwu/crwu-audit-datacheck/scripts/test_recalc_check.py +419 -0
- package/skills/crwu/crwu-audit-datacheck/scripts/test_skill_self_containment.py +44 -0
- package/skills/crwu/crwu-audit-external-data/SKILL.md +73 -0
- package/skills/crwu/crwu-audit-external-data/references/00-KB/350/243/205/351/205/215/350/241/250.md +38 -0
- package/skills/crwu/crwu-audit-external-data/references/01-connector-access.md +116 -0
- package/skills/crwu/crwu-audit-external-data/references/02-verification-workflow.md +78 -0
- package/skills/crwu/crwu-audit-external-data/scripts/connector_probe.py +374 -0
- package/skills/crwu/crwu-audit-external-data/scripts/test_connector_probe.py +264 -0
- package/skills/crwu/crwu-audit-output-filter/SKILL.md +34 -0
- package/skills/crwu/crwu-audit-output-filter/references/00-applicability.md +7 -0
- package/skills/crwu/crwu-audit-output-filter/references/01-kb-assembly.md +11 -0
- package/skills/crwu/crwu-audit-output-filter/references/02-review-focus.md +25 -0
- package/skills/crwu/crwu-audit-public-general-standards/SKILL.md +46 -0
- package/skills/crwu/crwu-audit-public-general-standards/references/00-applicability.md +41 -0
- package/skills/crwu/crwu-audit-public-general-standards/references/01-kb-assembly.md +66 -0
- package/skills/crwu/crwu-audit-public-general-standards/references/02-review-focus.md +111 -0
- package/skills/crwu/crwu-audit-public-general-standards/references/03-execution-contract.md +89 -0
- package/skills/crwu/crwu-dev-audit-optimize/SKILL.md +98 -0
- package/skills/crwu/crwu-dev-audit-optimize/references/00-/344/274/230/345/214/226/350/247/204/350/214/203/344/270/216/346/226/207/344/273/266/350/220/275/347/202/271.md +132 -0
- package/skills/crwu/crwu-dev-audit-optimize/references/01-/345/217/215/351/246/210/345/256/232/344/275/215/344/270/216/347/224/273/345/203/217/346/265/201/347/250/213.md +108 -0
- package/skills/crwu/crwu-dev-audit-optimize/references/02-/346/226/271/346/241/210/346/250/241/346/235/277/344/270/216/347/241/256/350/256/244/351/227/250/347/246/201.md +92 -0
- package/skills/crwu/crwu-dev-audit-optimize/references/03-AI/344/272/272/345/267/245/345/267/256/350/267/235/345/210/206/346/236/220/346/265/201/347/250/213.md +95 -0
- package/skills/crwu/crwu-dev-audit-optimize/scripts/examples/gap-analysis.sample.json +116 -0
- package/skills/crwu/crwu-dev-audit-optimize/scripts/gap_analysis.schema.json +33 -0
- package/skills/crwu/crwu-dev-audit-optimize/scripts/gap_analysis_delivery.py +475 -0
- package/skills/crwu/crwu-dev-audit-optimize/scripts/test_gap_analysis_delivery.py +855 -0
- package/skills/crwu/crwu-dev-audit-optimize/template/NOTICE.echarts.txt +7 -0
- package/skills/crwu/crwu-dev-audit-optimize/template/echarts.min.js +45 -0
- package/skills/crwu/crwu-dev-audit-optimize/template/gap-analysis-report.html +71 -0
- package/skills/crwu/crwu-dev-audit-skill-maintainer/SKILL.md +74 -0
- package/skills/crwu/crwu-dev-audit-skill-maintainer/references/00-responsibility-and-modes.md +62 -0
- package/skills/crwu/crwu-dev-audit-skill-maintainer/references/01-kb-source-discovery.md +89 -0
- package/skills/crwu/crwu-dev-audit-skill-maintainer/references/02-child-skill-contract.md +99 -0
- package/skills/crwu/crwu-dev-audit-skill-maintainer/references/03-review-item-execution-contract.md +51 -0
- package/skills/crwu/crwu-dev-audit-skill-maintainer/references/04-registry-and-mapping-update.md +73 -0
- package/skills/crwu/crwu-dev-audit-skill-maintainer/references/05-validation-and-delivery.md +127 -0
- package/skills/crwu/crwu-dev-audit-skill-maintainer/references/06-live-routing-reconciliation.md +136 -0
- package/skills/crwu/crwu-dev-audit-skill-maintainer/references/07-kb-skill-map.md +411 -0
- package/skills/crwu/crwu-dev-audit-skill-maintainer/scripts/README.md +200 -0
- package/skills/crwu/crwu-dev-audit-skill-maintainer/scripts/check_audit_skill_mappings.py +2477 -0
- package/skills/crwu/crwu-dev-audit-skill-maintainer/scripts/kb_tool.py +577 -0
- package/skills/crwu/crwu-dev-audit-skill-maintainer/scripts/test_audit_skill_maintainer.py +5097 -0
- package/skills/dws/LICENSE +178 -0
- package/skills/dws/NOTICE +17 -0
- package/skills/dws/dingtalk-aisearch/SKILL.md +83 -0
- package/skills/dws/dingtalk-aisearch/references/aisearch.md +249 -0
- package/skills/dws/dingtalk-aisearch/references/intent-guide.md +15 -0
- package/skills/dws/dingtalk-aisearch/references/lite-recipes.md +31 -0
- package/skills/dws/dingtalk-aitable/SKILL.md +139 -0
- package/skills/dws/dingtalk-aitable/references/06-data-analytics.md +11 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-advperm.md +251 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-attachment.md +49 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-best-practices.md +48 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-cell-value.md +346 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-dashboard-chart.md +46 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-data-analysis-sop.md +131 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-datasource.md +272 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-error-recovery.md +128 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-export-import.md +113 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-field-properties.md +238 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-field.md +186 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-filter-sort.md +135 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-form.md +130 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-formula-guide.md +224 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-primary-doc.md +58 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-create.md +52 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-delete.md +20 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-history.md +97 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-name-key.md +47 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-query.md +120 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-share.md +54 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-stats.md +59 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-update.md +66 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-upsert.md +89 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-view-config.md +140 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-view-extras.md +195 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-view-types.md +95 -0
- package/skills/dws/dingtalk-aitable/references/aitable/aitable-workflow.md +384 -0
- package/skills/dws/dingtalk-aitable/references/aitable-record-ops.md +80 -0
- package/skills/dws/dingtalk-aitable/references/aitable-section.md +30 -0
- package/skills/dws/dingtalk-aitable/references/aitable.md +59 -0
- package/skills/dws/dingtalk-aitable/references/field-rules.md +17 -0
- package/skills/dws/dingtalk-aitable/references/intent-guide.md +17 -0
- package/skills/dws/dingtalk-aitable/references/recipes/conventions.md +44 -0
- package/skills/dws/dingtalk-aitable/references/url-patterns.md +144 -0
- package/skills/dws/dingtalk-aitable/scripts/aitable_export_via_task.py +210 -0
- package/skills/dws/dingtalk-aitable/scripts/aitable_import_via_task.py +173 -0
- package/skills/dws/dingtalk-aitable/scripts/bulk_add_fields.py +273 -0
- package/skills/dws/dingtalk-aitable/scripts/import_records.py +333 -0
- package/skills/dws/dingtalk-aitable/scripts/upload_attachment.py +190 -0
- package/skills/dws/dingtalk-calendar/SKILL.md +137 -0
- package/skills/dws/dingtalk-calendar/references/03-meeting.md +56 -0
- package/skills/dws/dingtalk-calendar/references/calendar.md +760 -0
- package/skills/dws/dingtalk-calendar/references/intent-guide.md +9 -0
- package/skills/dws/dingtalk-calendar/references/lite-recipes.md +25 -0
- package/skills/dws/dingtalk-calendar/scripts/calendar_free_slot_finder.py +199 -0
- package/skills/dws/dingtalk-calendar/scripts/calendar_schedule_meeting.py +233 -0
- package/skills/dws/dingtalk-calendar/scripts/calendar_today_agenda.py +139 -0
- package/skills/dws/dingtalk-chat/SKILL.md +127 -0
- package/skills/dws/dingtalk-chat/references/01-messaging.md +103 -0
- package/skills/dws/dingtalk-chat/references/card/callback.md +10 -0
- package/skills/dws/dingtalk-chat/references/card/create.md +27 -0
- package/skills/dws/dingtalk-chat/references/card/schema.md +14 -0
- package/skills/dws/dingtalk-chat/references/card/update.md +13 -0
- package/skills/dws/dingtalk-chat/references/chat/chat-bot.md +187 -0
- package/skills/dws/dingtalk-chat/references/chat/chat-conversation.md +165 -0
- package/skills/dws/dingtalk-chat/references/chat/group-admin.md +144 -0
- package/skills/dws/dingtalk-chat/references/chat/group-discovery.md +121 -0
- package/skills/dws/dingtalk-chat/references/chat/message-actions.md +132 -0
- package/skills/dws/dingtalk-chat/references/chat/message-media.md +76 -0
- package/skills/dws/dingtalk-chat/references/chat/message-query.md +135 -0
- package/skills/dws/dingtalk-chat/references/chat/thread.md +46 -0
- package/skills/dws/dingtalk-chat/references/chat-emoji-list.md +216 -0
- package/skills/dws/dingtalk-chat/references/chat.md +140 -0
- package/skills/dws/dingtalk-chat/references/contracts.md +70 -0
- package/skills/dws/dingtalk-chat/references/intent-guide.md +56 -0
- package/skills/dws/dingtalk-contact/SKILL.md +122 -0
- package/skills/dws/dingtalk-contact/references/08-directory.md +51 -0
- package/skills/dws/dingtalk-contact/references/contact.md +595 -0
- package/skills/dws/dingtalk-contact/references/intent-guide.md +14 -0
- package/skills/dws/dingtalk-contact/references/lite-recipes.md +30 -0
- package/skills/dws/dingtalk-contact/references/recipes/conventions.md +44 -0
- package/skills/dws/dingtalk-contact/scripts/contact_dept_members.py +130 -0
- package/skills/dws/dingtalk-doc/SKILL.md +112 -0
- package/skills/dws/dingtalk-doc/references/04-document.md +57 -0
- package/skills/dws/dingtalk-doc/references/contracts.md +40 -0
- package/skills/dws/dingtalk-doc/references/doc/doc-block.md +39 -0
- package/skills/dws/dingtalk-doc/references/doc/doc-comment.md +29 -0
- package/skills/dws/dingtalk-doc/references/doc/doc-create.md +54 -0
- package/skills/dws/dingtalk-doc/references/doc/doc-export.md +30 -0
- package/skills/dws/dingtalk-doc/references/doc/doc-import.md +28 -0
- package/skills/dws/dingtalk-doc/references/doc/doc-info.md +12 -0
- package/skills/dws/dingtalk-doc/references/doc/doc-media.md +46 -0
- package/skills/dws/dingtalk-doc/references/doc/doc-read.md +56 -0
- package/skills/dws/dingtalk-doc/references/doc/doc-update.md +87 -0
- package/skills/dws/dingtalk-doc/references/doc/format/doc-jsonml-cookbook.md +469 -0
- package/skills/dws/dingtalk-doc/references/doc/format/doc-jsonml-schema.json +526 -0
- package/skills/dws/dingtalk-doc/references/doc/format/doc-jsonml-schema.md +711 -0
- package/skills/dws/dingtalk-doc/references/doc/style/doc-create-workflow.md +414 -0
- package/skills/dws/dingtalk-doc/references/doc/style/doc-style-guideline.md +404 -0
- package/skills/dws/dingtalk-doc/references/doc/style/doc-update-workflow.md +316 -0
- package/skills/dws/dingtalk-doc/references/doc.md +82 -0
- package/skills/dws/dingtalk-doc/references/intent-guide.md +20 -0
- package/skills/dws/dingtalk-drive/SKILL.md +128 -0
- package/skills/dws/dingtalk-drive/references/drive.md +126 -0
- package/skills/dws/dingtalk-drive/references/folder-sync.md +40 -0
- package/skills/dws/dingtalk-drive/references/intent-guide.md +22 -0
- package/skills/dws/dingtalk-drive/references/lite-recipes.md +39 -0
- package/skills/dws/dingtalk-event/SKILL.md +106 -0
- package/skills/dws/dingtalk-event/references/event-im-keys.md +54 -0
- package/skills/dws/dingtalk-event/references/event-im-lifecycle.md +35 -0
- package/skills/dws/dingtalk-event/references/event-im-operations.md +52 -0
- package/skills/dws/dingtalk-event/references/event-im-output.md +39 -0
- package/skills/dws/dingtalk-event/references/event-im.md +58 -0
- package/skills/dws/dingtalk-event/references/event-oa.md +155 -0
- package/skills/dws/dingtalk-event/references/event-todo.md +50 -0
- package/skills/dws/dingtalk-event/references/event-voip.md +69 -0
- package/skills/dws/dingtalk-mail/SKILL.md +113 -0
- package/skills/dws/dingtalk-mail/references/09-mail.md +45 -0
- package/skills/dws/dingtalk-mail/references/intent-guide.md +8 -0
- package/skills/dws/dingtalk-mail/references/lite-recipes.md +45 -0
- package/skills/dws/dingtalk-mail/references/mail.md +1889 -0
- package/skills/dws/dingtalk-mail/references/recipes/conventions.md +44 -0
- package/skills/dws/dingtalk-mail/scripts/mail_send_with_cc.py +122 -0
- package/skills/dws/dingtalk-mail/scripts/mail_unread_summary.py +114 -0
- package/skills/dws/dingtalk-minutes/SKILL.md +116 -0
- package/skills/dws/dingtalk-minutes/references/07-minutes.md +149 -0
- package/skills/dws/dingtalk-minutes/references/10-minutes-speaker-match.md +32 -0
- package/skills/dws/dingtalk-minutes/references/11-minutes-speaker-correct.md +40 -0
- package/skills/dws/dingtalk-minutes/references/intent-guide.md +79 -0
- package/skills/dws/dingtalk-minutes/references/lite-recipes.md +25 -0
- package/skills/dws/dingtalk-minutes/references/minutes.md +210 -0
- package/skills/dws/dingtalk-minutes/references/recipes/conventions.md +33 -0
- package/skills/dws/dingtalk-minutes/scripts/minutes_recent_summary.py +196 -0
- package/skills/dws/dingtalk-minutes/scripts/test_minutes_scripts.py +222 -0
- package/skills/dws/dingtalk-misc/SKILL.md +55 -0
- package/skills/dws/dingtalk-misc/references/05-reporting.md +29 -0
- package/skills/dws/dingtalk-misc/references/agoal.md +302 -0
- package/skills/dws/dingtalk-misc/references/attendance-intent-guide.md +7 -0
- package/skills/dws/dingtalk-misc/references/attendance-report.md +109 -0
- package/skills/dws/dingtalk-misc/references/attendance-schedule.md +115 -0
- package/skills/dws/dingtalk-misc/references/attendance-vacation.md +129 -0
- package/skills/dws/dingtalk-misc/references/attendance.md +149 -0
- package/skills/dws/dingtalk-misc/references/dev/app.md +42 -0
- package/skills/dws/dingtalk-misc/references/dev/connect.md +108 -0
- package/skills/dws/dingtalk-misc/references/dev/credentials.md +26 -0
- package/skills/dws/dingtalk-misc/references/dev/dev-index.md +13 -0
- package/skills/dws/dingtalk-misc/references/dev/event.md +47 -0
- package/skills/dws/dingtalk-misc/references/dev/mcp.md +106 -0
- package/skills/dws/dingtalk-misc/references/dev/member.md +19 -0
- package/skills/dws/dingtalk-misc/references/dev/permission.md +56 -0
- package/skills/dws/dingtalk-misc/references/dev/recipes.md +58 -0
- package/skills/dws/dingtalk-misc/references/dev/robot.md +74 -0
- package/skills/dws/dingtalk-misc/references/dev/security.md +21 -0
- package/skills/dws/dingtalk-misc/references/dev/version.md +99 -0
- package/skills/dws/dingtalk-misc/references/dev/webapp.md +22 -0
- package/skills/dws/dingtalk-misc/references/devapp.md +148 -0
- package/skills/dws/dingtalk-misc/references/devdoc-intent-guide.md +7 -0
- package/skills/dws/dingtalk-misc/references/devdoc.md +42 -0
- package/skills/dws/dingtalk-misc/references/ding.md +184 -0
- package/skills/dws/dingtalk-misc/references/hrbrain.md +67 -0
- package/skills/dws/dingtalk-misc/references/live.md +23 -0
- package/skills/dws/dingtalk-misc/references/markdown.md +167 -0
- package/skills/dws/dingtalk-misc/references/oa/oa-form-components.md +345 -0
- package/skills/dws/dingtalk-misc/references/oa/oa-process-nodes.md +374 -0
- package/skills/dws/dingtalk-misc/references/oa.md +1014 -0
- package/skills/dws/dingtalk-misc/references/openapi-explorer.md +47 -0
- package/skills/dws/dingtalk-misc/references/pat.md +52 -0
- package/skills/dws/dingtalk-misc/references/profile.md +41 -0
- package/skills/dws/dingtalk-misc/references/recruit.md +89 -0
- package/skills/dws/dingtalk-misc/references/report-conventions.md +44 -0
- package/skills/dws/dingtalk-misc/references/report-intent-guide.md +11 -0
- package/skills/dws/dingtalk-misc/references/report-lite-recipes.md +25 -0
- package/skills/dws/dingtalk-misc/references/report.md +109 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-batch-operations.md +104 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-chart.md +69 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-comment.md +166 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-conditional-format.md +59 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-dimension-operations.md +60 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-dropdown.md +103 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-export.md +135 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-filter-view.md +51 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-filter.md +181 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-formula.md +192 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-import.md +76 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-media-image.md +263 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-pivot-table.md +292 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-range-operations.md +161 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-read-data.md +60 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-revision-changeset.md +46 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-search-replace.md +120 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-style-format.md +71 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-version.md +84 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-workbook.md +59 -0
- package/skills/dws/dingtalk-misc/references/sheet/sheet-write-data.md +93 -0
- package/skills/dws/dingtalk-misc/references/sheet-conventions.md +44 -0
- package/skills/dws/dingtalk-misc/references/sheet-intent-guide.md +12 -0
- package/skills/dws/dingtalk-misc/references/sheet.md +166 -0
- package/skills/dws/dingtalk-misc/references/skill.md +98 -0
- package/skills/dws/dingtalk-misc/references/unsupported-scripts.md +49 -0
- package/skills/dws/dingtalk-misc/references/url-patterns.md +144 -0
- package/skills/dws/dingtalk-misc/references/whiteboard/compose.md +200 -0
- package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/01-overview.md +57 -0
- package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/02-query.md +288 -0
- package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/03-update.md +249 -0
- package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/04-text-style.md +395 -0
- package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/05-shape-frame-group-connector.md +186 -0
- package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/06-vector-icon-path.md +313 -0
- package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/07-examples-errors-write-support.md +270 -0
- package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/08-catalogs.md +61 -0
- package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1.md +54 -0
- package/skills/dws/dingtalk-misc/references/whiteboard/replace.md +41 -0
- package/skills/dws/dingtalk-misc/references/whiteboard/vector.md +51 -0
- package/skills/dws/dingtalk-misc/references/whiteboard.md +115 -0
- package/skills/dws/dingtalk-misc/scripts/aiapp_create_and_poll.py +138 -0
- package/skills/dws/dingtalk-misc/scripts/attendance_my_record.py +91 -0
- package/skills/dws/dingtalk-misc/scripts/attendance_report_checkin.py +440 -0
- package/skills/dws/dingtalk-misc/scripts/attendance_report_common.py +1698 -0
- package/skills/dws/dingtalk-misc/scripts/attendance_report_daily.py +558 -0
- package/skills/dws/dingtalk-misc/scripts/attendance_report_detail.py +809 -0
- package/skills/dws/dingtalk-misc/scripts/attendance_report_monthly.py +758 -0
- package/skills/dws/dingtalk-misc/scripts/attendance_report_record.py +947 -0
- package/skills/dws/dingtalk-misc/scripts/attendance_schedule_export.py +344 -0
- package/skills/dws/dingtalk-misc/scripts/attendance_schedule_import.py +498 -0
- package/skills/dws/dingtalk-misc/scripts/attendance_team_shift.py +89 -0
- package/skills/dws/dingtalk-misc/scripts/attendance_vacation_balance.py +617 -0
- package/skills/dws/dingtalk-misc/scripts/finance_daily_cashflow.py +70 -0
- package/skills/dws/dingtalk-misc/scripts/finance_expense_flow.py +138 -0
- package/skills/dws/dingtalk-misc/scripts/oa_batch_approve.py +158 -0
- package/skills/dws/dingtalk-misc/scripts/oa_pending_review.py +132 -0
- package/skills/dws/dingtalk-misc/scripts/report_received_today.py +315 -0
- package/skills/dws/dingtalk-misc/scripts/yida_custom_page_update.py +401 -0
- package/skills/dws/dingtalk-misc/scripts/yida_form_builder.py +526 -0
- package/skills/dws/dingtalk-misc/scripts/yida_form_fields.py +315 -0
- package/skills/dws/dingtalk-misc/scripts/yida_form_inspector.py +311 -0
- package/skills/dws/dingtalk-misc/scripts/yida_form_update.py +185 -0
- package/skills/dws/dingtalk-misc/scripts/yida_jsx_pipeline.py +1588 -0
- package/skills/dws/dingtalk-misc/scripts/yida_page_compiler.py +1441 -0
- package/skills/dws/dingtalk-misc/scripts/yida_page_generate.py +514 -0
- package/skills/dws/dingtalk-misc/scripts/yida_page_schema.py +519 -0
- package/skills/dws/dingtalk-misc/scripts/yida_page_self_check.py +398 -0
- package/skills/dws/dingtalk-misc/scripts/yida_process_flow.py +1478 -0
- package/skills/dws/dingtalk-misc/scripts/yida_process_update.py +589 -0
- package/skills/dws/dingtalk-misc/scripts/yida_report_builder.py +494 -0
- package/skills/dws/dingtalk-misc/scripts/yida_report_charts.py +1434 -0
- package/skills/dws/dingtalk-misc/scripts/yida_report_update.py +244 -0
- package/skills/dws/dingtalk-misc/scripts/yida_schema_common.py +340 -0
- package/skills/dws/dingtalk-shared/SKILL.md +83 -0
- package/skills/dws/dingtalk-shared/references/capability-limits.md +31 -0
- package/skills/dws/dingtalk-shared/references/channel-login.md +26 -0
- package/skills/dws/dingtalk-shared/references/confirmation.md +59 -0
- package/skills/dws/dingtalk-shared/references/error-codes.md +155 -0
- package/skills/dws/dingtalk-shared/references/global-reference.md +122 -0
- package/skills/dws/dingtalk-shared/references/intent-guide.md +537 -0
- package/skills/dws/dingtalk-shared/references/recipes/conventions.md +45 -0
- package/skills/dws/dingtalk-shared/references/recipes/lite-catalog.md +275 -0
- package/skills/dws/dingtalk-shared/references/recipes/meta.md +67 -0
- package/skills/dws/dingtalk-shared/references/routing.md +52 -0
- package/skills/dws/dingtalk-shared/references/runtime-contract.md +11 -0
- package/skills/dws/dingtalk-shared/references/schema-usage.md +88 -0
- package/skills/dws/dingtalk-shared/references/url-patterns.md +144 -0
- package/skills/dws/dingtalk-shared/references/workflow-routing.md +45 -0
- package/skills/dws/dingtalk-todo/SKILL.md +119 -0
- package/skills/dws/dingtalk-todo/references/02-task.md +70 -0
- package/skills/dws/dingtalk-todo/references/intent-guide.md +15 -0
- package/skills/dws/dingtalk-todo/references/lite-recipes.md +68 -0
- package/skills/dws/dingtalk-todo/references/recipes/conventions.md +44 -0
- package/skills/dws/dingtalk-todo/references/todo.md +517 -0
- package/skills/dws/dingtalk-todo/scripts/todo_batch_create.py +354 -0
- package/skills/dws/dingtalk-todo/scripts/todo_daily_summary.py +153 -0
- package/skills/dws/dingtalk-todo/scripts/todo_overdue_check.py +101 -0
- package/skills/dws/dingtalk-wiki/SKILL.md +117 -0
- package/skills/dws/dingtalk-wiki/references/intent-guide.md +14 -0
- package/skills/dws/dingtalk-wiki/references/lite-recipes.md +44 -0
- package/skills/dws/dingtalk-wiki/references/wiki-members.md +32 -0
- package/skills/dws/dingtalk-wiki/references/wiki-node-ops.md +46 -0
- package/skills/dws/dingtalk-wiki/references/wiki.md +65 -0
- package/skills/dws/provenance.json +27 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# 业务域通用规范
|
|
2
|
+
|
|
3
|
+
> 仅服务本 skill 已迁入的行动指南。安全门控、危险操作确认、`--format json` 等已在本 skill 的 `SKILL.md` 中定义,此处不重复。
|
|
4
|
+
|
|
5
|
+
## 批量查询规范
|
|
6
|
+
|
|
7
|
+
| # | 规范 |
|
|
8
|
+
|---|------|
|
|
9
|
+
| 1 | **并行查详情**:拿到多个 ID 后,用 `&` 合并到同一条 Shell 命令并行执行 + `wait`,**严禁逐条串行** |
|
|
10
|
+
| 2 | **翻页**:分页接口须拉全直至无更多 |
|
|
11
|
+
| 3 | **优先批量 API**:有批量接口则用批量;无则按 #1 并行 |
|
|
12
|
+
| 4 | **群消息**:必须先 `chat search --query` 得 `openConversationId`,再 `chat message list --group <openConversationId> --time "<yyyy-MM-dd HH:mm:ss>" --direction older`;多群同条命令并行 |
|
|
13
|
+
| 5 | **列表少轮次**:带条件搜索/列表 → 一次采全详情;**禁止**无新参数时重复同一 `list` / `search` |
|
|
14
|
+
|
|
15
|
+
## 多源并行采集(公共模式)
|
|
16
|
+
|
|
17
|
+
> recipe 引用方式:`按「多源并行采集」执行(关键词=<X>,时间=<Y>至<Z>)`。
|
|
18
|
+
|
|
19
|
+
- 同条 Shell:`&` 并行 + `wait`;分页须采全。
|
|
20
|
+
- 只保留与主题相关的数据,无关丢弃。
|
|
21
|
+
- 有批量详情接口优先;否则并行拉详情(见上表 #1)。
|
|
22
|
+
- 具体采哪些产品列表由对应 **行动指南 recipe** 与当前产品参考决定;不要引入本文档未覆盖的产品路线。
|
|
23
|
+
|
|
24
|
+
## 字段术语与 ID 传递
|
|
25
|
+
|
|
26
|
+
> list 返回 JSON 后,必须提取下表字段传给后续命令。**禁止用其他字段替代。**
|
|
27
|
+
|
|
28
|
+
| 字段 | 来源 | 传递给 |
|
|
29
|
+
|------|------|--------|
|
|
30
|
+
| `taskUuid` | `minutes list` | `minutes get summary/info/batch --id(s)` |
|
|
31
|
+
| `userId` | `aisearch person` / `contact user search` / `contact dept list-members` | `contact user get --ids`、`todo --executors`、`calendar --users` |
|
|
32
|
+
| `deptId` | `contact dept search` | `contact dept list-members --ids <deptId1,deptId2...>`;多子部门时对每个子部门分别 `dept search` 取 id |
|
|
33
|
+
| `nodeId` | `drive search` / `wiki node search` | `doc read/update --node`、`drive copy/move/rename/delete --node` |
|
|
34
|
+
| `nodeId` | `wiki node list` 中的 folder 类型节点 / `wiki node create --type folder` | `wiki node list --folder`、`wiki node create --folder`、`drive upload --folder`、`drive copy/move --folder` |
|
|
35
|
+
| `eventId` | `calendar event list` | `calendar event get/update --id` |
|
|
36
|
+
| `processInstanceId` | `oa approval list-*` | `oa approval detail/approve --instance-id` |
|
|
37
|
+
| `openConversationId` | `chat search` | `chat message list/send --group` |
|
|
38
|
+
| `todoTaskId` | `todo task list` | `todo task update/done --task-id` |
|
|
39
|
+
| `reportId` | `report inbox list` / `report outbox list` | `report entry get/stats --report-id` |
|
|
40
|
+
| `baseId` / `tableId` | `aitable base search` | `aitable record query --base-id --table-id` |
|
|
41
|
+
| `dentryUuid` | `drive list` / `drive mkdir` | `drive info/download/copy/move/rename/delete --node`、`drive list/mkdir/upload/copy/move --folder` |
|
|
42
|
+
| `dentryId` | `drive info` 的数字字段 | 仅用于 `chat message send --dentry-id` |
|
|
43
|
+
|
|
44
|
+
**ID 边界硬约束**:`dentryId` 通常是纯数字,只表示聊天文件消息需要的钉盘条目数字 ID;它不是父目录 ID。遇到 `drive --node/--folder`、`doc --node`、`wiki node --folder` 时,只能使用 `dentryUuid` / `nodeId` / 文档 URL。若当前上下文只有数字型 `dentryId`,必须先重新 `drive list` / `drive search` / `wiki node list` 获取正确 ID,不能把该数字直接代入后续命令。
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
发送带抄送的邮件(自动获取发件地址、校验参数)
|
|
4
|
+
|
|
5
|
+
用法:
|
|
6
|
+
python mail_send_with_cc.py \
|
|
7
|
+
--to colleague@company.com \
|
|
8
|
+
--cc boss@company.com,team@company.com \
|
|
9
|
+
--subject "周报" \
|
|
10
|
+
--body "本周完成任务A和任务B"
|
|
11
|
+
|
|
12
|
+
python mail_send_with_cc.py --dry-run \
|
|
13
|
+
--to a@b.com --subject "test" --body "hello"
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import sys
|
|
17
|
+
import json
|
|
18
|
+
import subprocess
|
|
19
|
+
import re
|
|
20
|
+
import argparse
|
|
21
|
+
from typing import List, Any, Optional
|
|
22
|
+
|
|
23
|
+
EMAIL_PATTERN = re.compile(
|
|
24
|
+
r'^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$'
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def run_dws(
|
|
29
|
+
args: List[str], dry_run: bool = False,
|
|
30
|
+
) -> Optional[Any]:
|
|
31
|
+
cmd = ['dws'] + args
|
|
32
|
+
if dry_run:
|
|
33
|
+
print(f"[dry-run] {' '.join(cmd)}")
|
|
34
|
+
return {'dry_run': True}
|
|
35
|
+
try:
|
|
36
|
+
result = subprocess.run(
|
|
37
|
+
cmd, capture_output=True, text=True, timeout=60
|
|
38
|
+
)
|
|
39
|
+
if result.returncode != 0:
|
|
40
|
+
print(f"错误:{result.stderr.strip()}", file=sys.stderr)
|
|
41
|
+
return None
|
|
42
|
+
return json.loads(result.stdout)
|
|
43
|
+
except (subprocess.TimeoutExpired, json.JSONDecodeError,
|
|
44
|
+
FileNotFoundError) as e:
|
|
45
|
+
print(f"错误:{e}", file=sys.stderr)
|
|
46
|
+
return None
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def validate_emails(emails_str: str) -> bool:
|
|
50
|
+
for email in emails_str.split(','):
|
|
51
|
+
email = email.strip()
|
|
52
|
+
if not EMAIL_PATTERN.match(email):
|
|
53
|
+
print(f"错误:无效邮箱地址 '{email}'")
|
|
54
|
+
return False
|
|
55
|
+
return True
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def get_my_email(dry_run: bool = False) -> Optional[str]:
|
|
59
|
+
data = run_dws([
|
|
60
|
+
'mail', 'mailbox', 'list', '--format', 'json',
|
|
61
|
+
], dry_run=dry_run)
|
|
62
|
+
if dry_run:
|
|
63
|
+
return '<MY_EMAIL>'
|
|
64
|
+
if not data:
|
|
65
|
+
return None
|
|
66
|
+
if isinstance(data, list) and data:
|
|
67
|
+
item = data[0]
|
|
68
|
+
return (item.get('email') or item.get('address')
|
|
69
|
+
if isinstance(item, dict) else str(item))
|
|
70
|
+
if isinstance(data, dict):
|
|
71
|
+
return data.get('email') or data.get('address')
|
|
72
|
+
return None
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def main():
|
|
76
|
+
parser = argparse.ArgumentParser(
|
|
77
|
+
description='发送带抄送的邮件'
|
|
78
|
+
)
|
|
79
|
+
parser.add_argument('--to', required=True, help='收件人')
|
|
80
|
+
parser.add_argument('--cc', default='', help='抄送人')
|
|
81
|
+
parser.add_argument('--subject', required=True, help='标题')
|
|
82
|
+
parser.add_argument('--body', required=True, help='正文')
|
|
83
|
+
parser.add_argument('--dry-run', action='store_true')
|
|
84
|
+
args = parser.parse_args()
|
|
85
|
+
|
|
86
|
+
if not validate_emails(args.to):
|
|
87
|
+
sys.exit(1)
|
|
88
|
+
if args.cc and not validate_emails(args.cc):
|
|
89
|
+
sys.exit(1)
|
|
90
|
+
|
|
91
|
+
print('📬 获取发件邮箱...')
|
|
92
|
+
from_email = get_my_email(dry_run=args.dry_run)
|
|
93
|
+
if not from_email and not args.dry_run:
|
|
94
|
+
print('错误:无法获取发件邮箱')
|
|
95
|
+
sys.exit(1)
|
|
96
|
+
|
|
97
|
+
cmd_args = [
|
|
98
|
+
'mail', 'message', 'send',
|
|
99
|
+
'--from', from_email or '<MY_EMAIL>',
|
|
100
|
+
'--to', args.to,
|
|
101
|
+
'--subject', args.subject,
|
|
102
|
+
'--body', args.body,
|
|
103
|
+
'--format', 'json',
|
|
104
|
+
]
|
|
105
|
+
if args.cc:
|
|
106
|
+
cmd_args.extend(['--cc', args.cc])
|
|
107
|
+
|
|
108
|
+
print('📤 发送邮件...')
|
|
109
|
+
result = run_dws(cmd_args, dry_run=args.dry_run)
|
|
110
|
+
if result:
|
|
111
|
+
print(f" ✓ 邮件已发送")
|
|
112
|
+
print(f" 收件人: {args.to}")
|
|
113
|
+
if args.cc:
|
|
114
|
+
print(f" 抄送: {args.cc}")
|
|
115
|
+
print(f" 主题: {args.subject}")
|
|
116
|
+
else:
|
|
117
|
+
print(' ✗ 发送失败')
|
|
118
|
+
sys.exit(1)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
if __name__ == '__main__':
|
|
122
|
+
main()
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
查询今天未读邮件并汇总(自动获取邮箱地址)
|
|
4
|
+
|
|
5
|
+
用法:
|
|
6
|
+
python mail_unread_summary.py
|
|
7
|
+
python mail_unread_summary.py --size 30
|
|
8
|
+
python mail_unread_summary.py --dry-run
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import sys
|
|
12
|
+
import json
|
|
13
|
+
import subprocess
|
|
14
|
+
import argparse
|
|
15
|
+
from datetime import datetime, timezone, timedelta
|
|
16
|
+
from typing import List, Any, Optional
|
|
17
|
+
|
|
18
|
+
TZ = timezone(timedelta(hours=8))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def run_dws(
|
|
22
|
+
args: List[str], dry_run: bool = False,
|
|
23
|
+
) -> Optional[Any]:
|
|
24
|
+
cmd = ['dws'] + args
|
|
25
|
+
if dry_run:
|
|
26
|
+
print(f"[dry-run] {' '.join(cmd)}")
|
|
27
|
+
return None
|
|
28
|
+
try:
|
|
29
|
+
result = subprocess.run(
|
|
30
|
+
cmd, capture_output=True, text=True, timeout=60
|
|
31
|
+
)
|
|
32
|
+
if result.returncode != 0:
|
|
33
|
+
print(f"错误:{result.stderr.strip()}", file=sys.stderr)
|
|
34
|
+
return None
|
|
35
|
+
return json.loads(result.stdout)
|
|
36
|
+
except (subprocess.TimeoutExpired, json.JSONDecodeError,
|
|
37
|
+
FileNotFoundError) as e:
|
|
38
|
+
print(f"错误:{e}", file=sys.stderr)
|
|
39
|
+
return None
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def get_my_email(dry_run: bool = False) -> Optional[str]:
|
|
43
|
+
data = run_dws([
|
|
44
|
+
'mail', 'mailbox', 'list', '--format', 'json',
|
|
45
|
+
], dry_run=dry_run)
|
|
46
|
+
if dry_run:
|
|
47
|
+
return '<MY_EMAIL>'
|
|
48
|
+
if not data:
|
|
49
|
+
return None
|
|
50
|
+
if isinstance(data, list) and data:
|
|
51
|
+
item = data[0]
|
|
52
|
+
return (item.get('email') or item.get('address')
|
|
53
|
+
if isinstance(item, dict) else str(item))
|
|
54
|
+
if isinstance(data, dict):
|
|
55
|
+
return data.get('email') or data.get('address')
|
|
56
|
+
return None
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def main():
|
|
60
|
+
parser = argparse.ArgumentParser(
|
|
61
|
+
description='查询今天未读邮件'
|
|
62
|
+
)
|
|
63
|
+
parser.add_argument(
|
|
64
|
+
'--size', type=int, default=20, help='返回数量'
|
|
65
|
+
)
|
|
66
|
+
parser.add_argument('--dry-run', action='store_true')
|
|
67
|
+
args = parser.parse_args()
|
|
68
|
+
|
|
69
|
+
print('📬 获取邮箱地址...')
|
|
70
|
+
email = get_my_email(dry_run=args.dry_run)
|
|
71
|
+
if not email and not args.dry_run:
|
|
72
|
+
print('错误:无法获取邮箱地址')
|
|
73
|
+
sys.exit(1)
|
|
74
|
+
|
|
75
|
+
today = datetime.now(TZ).strftime('%Y-%m-%dT00:00:00Z')
|
|
76
|
+
kql = f'isRead:false AND date>{today}'
|
|
77
|
+
|
|
78
|
+
print(f'🔍 搜索未读邮件...\n')
|
|
79
|
+
data = run_dws([
|
|
80
|
+
'mail', 'message', 'search',
|
|
81
|
+
'--email', email or '<MY_EMAIL>',
|
|
82
|
+
'--query', kql,
|
|
83
|
+
'--size', str(args.size),
|
|
84
|
+
'--format', 'json',
|
|
85
|
+
], dry_run=args.dry_run)
|
|
86
|
+
|
|
87
|
+
if args.dry_run:
|
|
88
|
+
return
|
|
89
|
+
if not data:
|
|
90
|
+
print('未查到邮件')
|
|
91
|
+
return
|
|
92
|
+
|
|
93
|
+
messages = (data if isinstance(data, list)
|
|
94
|
+
else data.get('items', data.get('messages', [])))
|
|
95
|
+
|
|
96
|
+
print(f"📧 今日未读邮件")
|
|
97
|
+
print('=' * 50)
|
|
98
|
+
if not messages:
|
|
99
|
+
print(' ✅ 收件箱清空,没有未读邮件!')
|
|
100
|
+
return
|
|
101
|
+
|
|
102
|
+
for m in messages:
|
|
103
|
+
subj = m.get('subject', '(无主题)')
|
|
104
|
+
sender = m.get('from', {})
|
|
105
|
+
sender_name = (sender.get('name') or sender.get('email', '未知')
|
|
106
|
+
if isinstance(sender, dict) else str(sender))
|
|
107
|
+
print(f" 📩 {subj}")
|
|
108
|
+
print(f" 发件人: {sender_name}")
|
|
109
|
+
|
|
110
|
+
print(f"\n合计: {len(messages)} 封未读邮件")
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
if __name__ == '__main__':
|
|
114
|
+
main()
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dingtalk-minutes
|
|
3
|
+
description: 钉钉 AI 听记。Use when 查询或修改听记摘要、完整逐字稿、关键词、行动项、录音、上传、思维导图、发言人洞察或分享权限。写文档走 dingtalk-doc;建待办走 dingtalk-todo;日程走 dingtalk-calendar。命令前缀:dws minutes。
|
|
4
|
+
metadata:
|
|
5
|
+
cli_version: ">=0.2.14"
|
|
6
|
+
category: product
|
|
7
|
+
requires:
|
|
8
|
+
bins:
|
|
9
|
+
- dws
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 钉钉 AI 听记 Skill
|
|
13
|
+
|
|
14
|
+
<!-- DWS_RUNTIME_CONTRACT_START -->
|
|
15
|
+
## 最小 DWS 执行契约
|
|
16
|
+
|
|
17
|
+
- 只通过 `dws` CLI 操作钉钉;结构化读取使用 `--format json`,按真实返回判断结果。
|
|
18
|
+
- 已知命令直接执行。只有 leaf 参数或安全语义不确定时读取精确 Schema,只有 Cobra flag 不确定时读取精确 leaf Help;不要加载产品级 Catalog 代替选路。
|
|
19
|
+
- 不猜命令、flag、字段、ID、账号或时间。后续 ID 必须来自真实返回;零命中、多候选或类型不明时停止并消歧。
|
|
20
|
+
- 解析目标、读取上下文和最终执行必须使用同一 profile;不得跨组织复用 userId、openDingTalkId 或 openConversationId。多账号组织只使用明确的 `isOrgCurrent=true` 默认账号;没有默认账号时要求用户指定,禁止选择第一项、最近登录或最近使用账号。
|
|
21
|
+
- 不输出或记录 token、refresh token、appSecret、webhook token 等凭据;宿主已注入认证时不要索要凭据。
|
|
22
|
+
- 写操作必须符合用户明确意图。是否需要确认以最终 Runtime gate 和 Schema 为准;需要确认时先说明对象、动作与影响,再追加 `--yes`。
|
|
23
|
+
- 写后按任务结果契约验证;不能仅凭退出码宣称成功。部分结果、未知投递状态和失败项必须如实保留。
|
|
24
|
+
- 时间戳面向用户展示时转换为带时区的可读时间;默认使用当前会话时区,必要时同时保留原值。
|
|
25
|
+
- 遇到认证、权限、profile、confirmation 或未知错误时,只加载 `dingtalk-shared` 中对应 reference;不要连续猜测替代命令。
|
|
26
|
+
<!-- DWS_RUNTIME_CONTRACT_END -->
|
|
27
|
+
|
|
28
|
+
<!-- VISIBLE_SHORTCUTS_START -->
|
|
29
|
+
## Shortcut 发现(按需)
|
|
30
|
+
|
|
31
|
+
`minutes` 当前有 29 条公开 shortcut,完整清单保留在 Runtime Catalog 与 Schema,不在高频产品根 Skill 中重复展开。已知意图直接使用下方的优先路由、意图表或任务 reference;命令已选中时直接执行,只在参数/安全语义不确定时读取 leaf Schema,在当前 Cobra flags 不确定时读取 leaf Help。
|
|
32
|
+
|
|
33
|
+
仅当现有路由和 reference 都无法定位低频能力时,才执行 `dws shortcut list --service minutes --format json` 做最后回退;不要为已知高频意图加载完整 Shortcut Catalog 或产品级 Schema。
|
|
34
|
+
<!-- VISIBLE_SHORTCUTS_END -->
|
|
35
|
+
|
|
36
|
+
## Golden Route
|
|
37
|
+
|
|
38
|
+
以下是当前 Minutes Case 支持的核心路径,用于减少 Agent 选路分叉;它不等同于生产使用频率统计。已有 `taskUuid` 直接使用;完整 `shanji.dingtalk.com` URL 先提取其中的真实 ID。只有标题或时间线索时先搜索,零命中停止,多候选或候选差异较大时让用户消歧,不默认取第一条。
|
|
39
|
+
|
|
40
|
+
| 用户意图 | 唯一推荐入口 | 关键边界 |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| 按标题或时间找听记 | `dws minutes +search --scope all --query "<关键词>" --page-all` | `scope` 可选 `mine/shared/all`;至少提供 query/start/end 之一。`all --page-all` 分别追完 mine/shared 后去重,不把单个 noLimit 端点当完整全集 |
|
|
43
|
+
| 浏览我创建、共享给我或全部可访问听记 | `+list-mine` / `+list-shared` / `+list-all` | 默认是可续拉预览;要声称完整必须加 `--page-all` 并检查 `complete=true`。用户只说“我的听记”不等于明确 `mine`,范围不清时用 `all` |
|
|
44
|
+
| 看我最新创建的一条 | `dws minutes +latest [--keyword <关键词>]` | 只在用户明确说“最新”时用;不能用它替代具名目标搜索,也不能在录音 start 后拿 latest 猜新录音 ID |
|
|
45
|
+
| 读取基础信息、摘要或关键词 | `dws minutes +detail --id <taskUuid> --artifacts basic,summary,keywords` | 已有 taskUuid 且只读取现有产物时直接使用,不要进入上传 workflow;任一产物失败都按 partial/非零处理,不把缺失项说成空内容 |
|
|
46
|
+
| 读取逐字稿 | `dws minutes +transcript --id <taskUuid> [--direction 1] [--single-page]` | 已有 taskUuid 且只读取逐字稿时直接使用,不要借 `+upload-and-analyze --resume-id` 代读。默认正序并追完分页;倒序必须传 `--direction 1`,用户明确只要第一页时传 `--single-page`,不得随后自动续页。交付前检查 `data.direction/data.complete/data.pages` 与 `meta.pagination` |
|
|
47
|
+
| 读取行动项 | `dws minutes +action-items --id <taskUuid>` | 只有受支持字段明确返回空数组才能说“没有待办”;`unsupported_shape`、字段解析失败或工具失败都不是空结果。需要创建钉钉待办时再切 `dingtalk-todo` |
|
|
48
|
+
| 把摘要、关键词、完整逐字稿和行动项归档到本地 | `dws minutes +export-pack --id <taskUuid> --output <新相对目录>` | 要带媒体时加 `--include-media`;必须由 `published/path/manifest/files` 证明落盘,只有建目录、计划或文件名不能称已生成 |
|
|
49
|
+
| 修改或预览标题 | `dws minutes +update --id <taskUuid> --title "<新标题>"` | 真实修改按 Runtime confirmation 执行并读回;用户只要预览时先读 basic,再加 `--dry-run`,展示“当前值 → 目标值”后停止,不追加 `--yes` |
|
|
50
|
+
| 覆盖纪要正文 | `dws minutes +summary --id <taskUuid> --content @<相对文件>` | `content` 是完整目标正文,不是局部 patch;按 Runtime confirmation 执行,并保护图片引用、读回全文 |
|
|
51
|
+
| 上传音视频生成听记 | `dws minutes +upload --file <相对路径>` | 真实执行会上传文件并创建远端听记,必须按 Runtime confirmation;用户明确要闪记卡片时改用 `+upload-and-notify`,需要上传后等待分析产物时用 `+upload-and-analyze` |
|
|
52
|
+
| 真实开始、暂停、继续或停止录音 | `+record-start` / `+record-pause` / `+record-resume` / `+record-stop` | 这组入口会真实执行。start 返回 `accepted=true, bound=false` 或 `controlReady=false` 时,报告“已受理但未绑定”并停止:不得重试 start,也不得用 `+latest`、列表第一条或时间最近项猜 ID。结束并等待产物用 `+record-wrap-up` |
|
|
53
|
+
| 只预览录音请求,不实际执行 | `dws minutes record start --dry-run --format json` | 使用对应的原子 `minutes record start|pause|resume|stop` leaf;start 的 `--session-id` 可选,pause/resume/stop 必须传真实 `--id`。不要把被拒绝的 Shortcut dry-run 描述成预览成功 |
|
|
54
|
+
| 生成或继续思维导图 | `dws minutes +mindmap --id <taskUuid>` | 创建后有界轮询;超时或未知状态保留恢复信息,用 `--resume` 继续,不重复创建 |
|
|
55
|
+
| 生成或继续发言人洞察 | `dws minutes +speaker-insights --id <taskUuid>` | 有界轮询;保留 `taskId`,恢复时用 `--resume [--task-id <ID>]`,不重复创建 |
|
|
56
|
+
| 当前用户申请查看/下载/编辑权限 | `dws minutes +apply-permission --id <taskUuid> --permission view|download|edit` | 这是“我申请访问”,不是所有者给别人授权;按 Runtime confirmation 执行 |
|
|
57
|
+
| 所有者给成员授权或撤权 | `dws minutes +share ...` / `dws minutes +unshare ...` | 先用通讯录把姓名解析为同组织稳定 UID;撤权是破坏性操作。批量结果必须保留逐成员 ledger 和失败项 |
|
|
58
|
+
|
|
59
|
+
### 搜索与列表执行胶囊
|
|
60
|
+
|
|
61
|
+
用户要求“全部、所有、完整、汇总整个范围”时,首轮直接使用 `--page-all`:
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
dws minutes +search --query "<关键词>" --scope all --page-all --format json
|
|
65
|
+
dws minutes +search --start "<RFC3339>" --end "<RFC3339>" --scope mine --page-all --format json
|
|
66
|
+
dws minutes +list-mine --page-all --format json
|
|
67
|
+
dws minutes +list-shared --page-all --format json
|
|
68
|
+
dws minutes +list-all --page-all --format json
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
只有用户明确要第一页、预览或样本时才省略 `--page-all`,并如实保留 `data.complete=false` 与 `meta.pagination.next_token`。有时间窗必须使用 `+search`,因为 `+list-*` 不接受 `--start/--end`。
|
|
72
|
+
|
|
73
|
+
## 目标与完整性
|
|
74
|
+
|
|
75
|
+
- 目标锁定优先级:用户给出的 `taskUuid`/URL > 精确标题 > 标题包含或语义相关候选。相似候选可展示,但候选差异明显或多个候选都合理时必须停下来消歧;分页未完成本身不是目标歧义。
|
|
76
|
+
- 用户说“先确认/核对目标”默认要求用真实 basic 字段完成证据核对,不自动变成等待用户回复的会话门禁。目标唯一、分页完整且后续均为只读时,展示标题、时间、归属等核对证据后在同一轮继续;只有用户明确要求“等我确认后再继续”或仍有多个合理候选时才暂停。
|
|
77
|
+
- 纯能力、规则或错误说明且没有唯一真实目标时直接解释,不猜对象;用户明确要求核对且目标唯一时必须真实读取,不能只展示命令。
|
|
78
|
+
- `mine` 仅表示我创建的,`shared` 仅表示共享给我的;`all` 表示 accessible 聚合目标。不得声称后端单个 noLimit 端点天然等于 `mine + shared`。
|
|
79
|
+
- 列表或逐字稿只有 `data.complete=true` 才能称为“全部/完整”。全量请求遇到 `meta.pagination.next_token` 时继续;只有 token 缺失、cursor 停滞/循环、达到 `page-limit` 或后页失败时才停止,并保留失败信封或不完整证据。
|
|
80
|
+
- 用户要求核对、汇总“这些/每条/全部”命中项时,必须覆盖完整命中集合;可用 `dws minutes +detail --ids <uuid1,uuid2> --artifacts basic --format json` 批量核对,并逐项保留失败。只检查第一条不能代表全体;响应没有逐条归属或组织字段时如实说明不可得,不能用当前 profile 的组织名代替每条听记的归属。
|
|
81
|
+
- 多听记、多来源或跨产品汇总按每个 `taskUuid`/来源 ID 保留 `requested/resolved/missing/artifacts/status`;缺输入或必需产物时整体按 partial,不用已找到项代表全部。
|
|
82
|
+
- 内容归纳必须来自每条真实 `summary/transcript/keywords`;只有 `title/basic` 时只列元数据,不生成摘要、关键词或分类。
|
|
83
|
+
- `partial_success`、异步 `pending`、超时和未知写入结果不是成功。按结果中的恢复句柄继续,不能重放已成功步骤。
|
|
84
|
+
|
|
85
|
+
## 安全边界
|
|
86
|
+
|
|
87
|
+
- 是否确认以 leaf Schema 与 Runtime gate 为准,不根据“看起来像写操作”自行推断。推荐 Golden Route 中的 `+update`、`+summary`、`+record-*`、`+share/+unshare/+apply-permission`、`+speaker-replace`、`+replace-batch` 等当前要求确认。
|
|
88
|
+
- 为兼容既有公开 Contract,对应的底层原子命令保留历史 `not_required`;它们只用于 Shortcut 无法表达的明确底层控制,不得为了绕过 Golden Route 的确认门禁而降级调用。
|
|
89
|
+
- `+upload` 与 `+upload-and-analyze` 即使不发送消息,仍会上传本地媒体并创建远端听记,真实执行必须按 Runtime confirmation;`--dry-run` 仍可在零远端调用下预览。上传并发送闪记卡片、精确同步并删除热词、撤权等副作用更大的入口继续单独处理。
|
|
90
|
+
- `+mindmap`、`+speaker-insights` 和 `+prepare-asr` 当前要求确认;`--resume` 仍沿用所在 Shortcut 的命令级门禁。旧 `+upload --enable-message-card` 与 `+upload-and-analyze --enable-message-card` 继续作为可执行兼容入口,并遵循各自 Shortcut 的确认门禁;新调用仍推荐 `+upload-and-notify`。原子 `minutes upload create --enable-message-card` 与旧 `--sync` 只保留为公开迁移提示,不得当作可执行 Golden Route。
|
|
91
|
+
- `--dry-run` 必须返回明确的 dry-run/request 证据且不调用远端;录音预览按上方原子入口执行。任何入口若拒绝 dry-run,必须报告“不支持预览”,不得把拦截或普通执行称为预演成功。
|
|
92
|
+
- 用户明确要求“仅预览/不实际写入”时,任务在真实现状读取、dry-run 计划和差异交付后结束;不得继续请求写入确认,也不得为了验证预览而执行真实写入后再还原。
|
|
93
|
+
- 分享/撤权使用稳定成员 UID,不能把姓名、手机号或跨组织 ID 直接当 UID;同一目标解析、读取、写入和验证必须使用同一 profile。
|
|
94
|
+
|
|
95
|
+
## 按需加载
|
|
96
|
+
|
|
97
|
+
Golden Route 参数足够时直接执行,不预读 Reference。每个 Case 最多先读取一个最精确的文件;参数事实优先读取 compact leaf Schema,不读取产品级全量 Catalog。
|
|
98
|
+
|
|
99
|
+
| 触发条件 | Reference |
|
|
100
|
+
|---|---|
|
|
101
|
+
| ASR 热词、上传会话恢复、复杂异步轮询、批量权限 workflow | [复杂流程](references/07-minutes.md) |
|
|
102
|
+
| 发言人替换、批量文本替换、下载媒体、离线导出等低频意图 | [局部意图](references/intent-guide.md) |
|
|
103
|
+
| 必须落到原子命令,或需要 URL/参数/确认事实 | [原子命令](references/minutes.md) |
|
|
104
|
+
|
|
105
|
+
## 错误最短路径
|
|
106
|
+
|
|
107
|
+
1. 零命中、多候选或 ID 类型不明:停止并返回候选证据。全量请求分页未完成但有有效 continuation 时继续;只有 token 缺失/停滞/循环、达到页数上限或后页失败时停止并返回 `data.complete`、`meta.pagination` 或失败信封等证据。
|
|
108
|
+
2. 认证、权限、profile 或 confirmation 错误:按 `dingtalk-shared` 对应错误 Reference 处理;不更换 scope、账号或写命令碰运气。
|
|
109
|
+
3. 异步超时或部分成功:保留 `taskUuid/taskId/sessionId/checkpoint`,只恢复未完成阶段;未知写入先读回,不能自动重试。
|
|
110
|
+
|
|
111
|
+
## 跨产品边界
|
|
112
|
+
|
|
113
|
+
- 把听记摘要或逐字稿写成文档 → 读取真实内容后切 `dingtalk-doc`。
|
|
114
|
+
- 把听记行动项创建为任务 → 读取行动项后切 `dingtalk-todo`,并按其身份解析规则处理执行人。
|
|
115
|
+
- 把摘要发给同事 → 切 `dingtalk-chat`;`+share` 只管理听记权限,不发送摘要消息。
|
|
116
|
+
- 创建或修改日程、会议室 → `dingtalk-calendar`;Minutes 只处理听记产物和录音控制。
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Minutes 复杂流程
|
|
2
|
+
|
|
3
|
+
> 返回入口:[DingTalk Minutes Skill](../SKILL.md) · [Reference 与脚本索引](minutes.md)
|
|
4
|
+
|
|
5
|
+
只在根 Skill 已确定属于 ASR、上传恢复、异步生成或批量权限 workflow 时读取本文件。普通搜索、详情、逐字稿、标题或摘要修改直接按根 Skill Golden Route 执行。
|
|
6
|
+
|
|
7
|
+
## 1. ASR 热词
|
|
8
|
+
|
|
9
|
+
| 用户意图 | 推荐入口 | 是否确认 | 关键语义 |
|
|
10
|
+
|---|---|---|---|
|
|
11
|
+
| “录音前加上这些专有词”“补充热词” | `dws minutes +prepare-asr --words "DWS,听记"` | 需要 | 只新增缺失热词,不删除现有项;读回验证 |
|
|
12
|
+
| “让热词最终只保留这组”“精确同步热词” | `dws minutes +sync-asr --words "DWS,听记"` | 需要,且先说明会删除目标集合外热词 | 新增缺失项并删除多余项;属于 destructive/high |
|
|
13
|
+
| 只查看当前 ASR 热词 / “识别词配置” | `dws minutes hot-word list --format json` | 不需要 | 原子只读;返回当前账号的识别词配置,不是某个音频的转写结果 |
|
|
14
|
+
| 删除一个或多个已知热词 | `dws minutes hot-word delete --words "<热词1,热词2>"` | 原子入口历史 `not_required` | 仅作兼容底层入口;推荐需要确认且能读回验证的 `+sync-asr`,不模糊删除 |
|
|
15
|
+
|
|
16
|
+
`+prepare-asr --sync` 作为已发布参数保持公开可见,但只返回迁移提示且在任何 MCP 调用前停止。需要删除时必须显式改用 `+sync-asr`,不能把“准备热词”解释成“覆盖整个词表”。两个 Shortcut 的 `--dry-run` 都只输出本地计划,不读取或写入远端;要比较真实差异时先读取词表,再单独执行目标入口。
|
|
17
|
+
|
|
18
|
+
用户说“先核对识别词/词表”时,默认指当前 ASR 热词配置,必须实际执行 `hot-word list`,不能只展示命令。如果用户明确要核对某个音频最终识别出的文字,则必须真实上传并等待转写;upload dry-run 做不到这一点。用户同时要求“不实际创建听记”时,以不写入为最高边界,如实说明两项要求不能同时满足,不能通过真实 create 后 cancel 来伪造预览。
|
|
19
|
+
|
|
20
|
+
## 2. 上传、通知与恢复
|
|
21
|
+
|
|
22
|
+
### 2.1 直接上传
|
|
23
|
+
|
|
24
|
+
| 目标 | 推荐入口 | 结果边界 |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| 上传并创建听记,不发送额外消息 | `dws minutes +upload --file <相对路径> [--title <标题>]` | 真实执行需要确认;完成 create、文件 PUT、complete 和详情读回,失败时取消可取消的 session |
|
|
27
|
+
| 上传并额外发送闪记卡片 | `dws minutes +upload-and-notify --file <相对路径> [--title <标题>]` | 推荐新入口;旧 `+upload --enable-message-card` 仍可执行并遵循 `+upload` 的确认门禁 |
|
|
28
|
+
| 上传并等待摘要/逐字稿等分析产物 | `dws minutes +upload-and-analyze --file <相对路径> --artifacts summary,transcript` | 真实执行需要确认;有界等待,可加 `--mindmap` / `--speaker-insights`,不要把 pending/timeout 说成完成 |
|
|
29
|
+
|
|
30
|
+
用户要求预览上传,并明确要求核对热词配置或比较听记列表是否变化时,执行以下可验证流程;没有这些额外要求时不必增加读操作:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
dws minutes hot-word list --format json
|
|
34
|
+
dws minutes +list-mine --page-all --format json
|
|
35
|
+
dws minutes +upload --file <相对路径> --title "<标题>" --input-language zh --template-id <templateId> --dry-run --format json
|
|
36
|
+
dws minutes +list-mine --page-all --format json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
- 热词查询、上传计划和前后列表是三份不同证据;命令示例不能代替真实查询结果。
|
|
40
|
+
- dry-run 只证明请求计划与 `executed=false`,不会创建 session、听记或 ASR 结果。前后列表按 `taskUuid` 集合比较;不能只比较数量或第一页。
|
|
41
|
+
- 没有真实文件、文件字节数或 sessionId 时,停止在相应前置门禁;不得调用 create/complete。用户要求确认“没有生成新听记”时,仍需用真实列表证据回答,不能仅由“我没有调用上传”推断列表事实。
|
|
42
|
+
|
|
43
|
+
如果已有 `taskUuid`,并且只需要读取当前已经生成的摘要与逐字稿,直接使用只读入口:
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
dws minutes +detail --id <taskUuid> --artifacts basic,summary,keywords --format json
|
|
47
|
+
dws minutes +transcript --id <taskUuid> --format json
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
不要仅因资源最初来自上传就再次进入上传 workflow。只有产物尚未就绪、确实需要有界轮询时,才使用:
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
dws minutes +upload-and-analyze --resume-id <taskUuid> --artifacts summary,transcript
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`--resume-id` 分支不重复上传或再次通知,但 `+upload-and-analyze` 是同时包含新上传分支的混合入口,因此仍按该命令的 Runtime confirmation 执行。旧 `+upload-and-analyze --enable-message-card` 继续执行原有通知语义并遵循同一确认门禁;新调用需要通知时优先使用 `+upload-and-notify`,再按需读取或恢复分析。
|
|
57
|
+
|
|
58
|
+
### 2.2 原子 upload session
|
|
59
|
+
|
|
60
|
+
只在 Shortcut 返回了可恢复 session、需要诊断某一阶段,或调用方自己负责文件 PUT 时使用原子命令:
|
|
61
|
+
|
|
62
|
+
| 阶段 | 原子命令 | 关键句柄 |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| 创建普通 session | `dws minutes upload create ...` | 保存 session/upload URL 等真实返回;旧 `--enable-message-card` 只返回迁移提示 |
|
|
65
|
+
| 创建并通知 | `dws minutes upload create-and-notify ...` | 需要确认;不要用普通 create 模拟通知 |
|
|
66
|
+
| 完成 session | `dws minutes upload complete ...` | 只对已知 session 执行,保留最终 taskUuid |
|
|
67
|
+
| 取消 session | `dws minutes upload cancel ...` | 取消失败或状态未知时停止,不能谎报已清理 |
|
|
68
|
+
|
|
69
|
+
上传状态未知时先根据真实 session/taskUuid 读回;不能重新 create 来“试一次”。预签名 URL 属于敏感临时数据,不写入日志、报告或长期 manifest。
|
|
70
|
+
|
|
71
|
+
## 3. 异步生成与录音收尾
|
|
72
|
+
|
|
73
|
+
### 3.1 思维导图
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
dws minutes +mindmap --id <taskUuid>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
- 首次执行负责 create + 有界轮询。
|
|
80
|
+
- 真实执行遵循 `user_required`;`--resume` 沿用同一命令级门禁。
|
|
81
|
+
- 返回 pending/timeout 时保留 taskUuid;继续检查用 `--resume`,不重复 create。
|
|
82
|
+
- 只有明确终态成功才声称已生成;失败和无法解析的状态返回非零。
|
|
83
|
+
|
|
84
|
+
### 3.2 发言人洞察
|
|
85
|
+
|
|
86
|
+
```text
|
|
87
|
+
dws minutes +speaker-insights --id <taskUuid>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
- 首次执行保存 create 返回的异步 `taskId`。
|
|
91
|
+
- 真实执行遵循 `user_required`;`--resume` 沿用同一命令级门禁。
|
|
92
|
+
- 超时后使用 `--resume [--task-id <taskId>]` 继续轮询。
|
|
93
|
+
- `taskId` 缺失、状态未知或结果不可解析时保留恢复信息并停止,不再次创建任务。
|
|
94
|
+
|
|
95
|
+
### 3.3 结束录音并等待产物
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
dws minutes +record-wrap-up --id <taskUuid> --artifacts summary,transcript
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
该入口先停止指定录音,再有界等待产物。它只接受已绑定的真实 `taskUuid`;如果 `+record-start` 返回 `controlReady=false`,不能通过 `+latest` 或列表第一项猜录音目标。停止已成功但等待超时时,保留 taskUuid 和未完成产物,后续只恢复读取,不再次 stop。
|
|
102
|
+
|
|
103
|
+
## 4. 权限 workflow
|
|
104
|
+
|
|
105
|
+
先区分三种身份语义:
|
|
106
|
+
|
|
107
|
+
| 用户意图 | 推荐入口 | 目标身份 |
|
|
108
|
+
|---|---|---|
|
|
109
|
+
| “我打不开,帮我申请查看/下载/编辑” | `+apply-permission --id <taskUuid> --permission view|download|edit` | 当前登录用户 |
|
|
110
|
+
| “把这条听记分享给张三” | `+share --id <taskUuid> --member-uids <UID> --permission view|download|edit` | 所有者给指定成员授权 |
|
|
111
|
+
| “撤销张三对这条听记的权限” | `+unshare --id <taskUuid> --member-uids <UID>` | 所有者移除指定成员权限 |
|
|
112
|
+
|
|
113
|
+
### 4.1 成员解析
|
|
114
|
+
|
|
115
|
+
1. 用户已给稳定成员 UID:直接复用,但必须保持同一 profile/组织。
|
|
116
|
+
2. 只有姓名、手机号或部门线索:切 `dingtalk-contact`/`dingtalk-aisearch` 解析;零或多候选时停止。
|
|
117
|
+
3. 不把姓名、手机号、userId、openId 或跨组织 UID 互相猜测转换。
|
|
118
|
+
|
|
119
|
+
### 4.2 批量执行
|
|
120
|
+
|
|
121
|
+
`+share` 的精确业务参数是 `--id|--ids`、`--member-uids`、必填的 `--permission view|download|edit`,以及可选的 `--cover`、`--sub-resources OrigContent|Summary|Analysis|Note`、`--failure-policy stop|continue`:
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
dws minutes +share --id <taskUuid> --member-uids <uid1,uid2> --permission view --failure-policy stop --format json
|
|
125
|
+
dws minutes +share --ids <uuid1,uuid2> --member-uids <uid> --permission edit --cover --sub-resources OrigContent,Summary --failure-policy continue --format json
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
`+unshare` 的精确业务参数是 `--id|--ids`、`--member-uids` 和可选的 `--failure-policy stop|continue`;它没有 `--permission`、`--cover` 或 `--sub-resources`:
|
|
129
|
+
|
|
130
|
+
```text
|
|
131
|
+
dws minutes +unshare --id <taskUuid> --member-uids <uid1,uid2> --failure-policy stop --format json
|
|
132
|
+
dws minutes +unshare --ids <uuid1,uuid2> --member-uids <uid> --failure-policy continue --format json
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
- `--id` 与 `--ids` 必须且只能选一个;听记 taskUuid 和成员 UID 去重后各为 `1..50` 个。
|
|
136
|
+
- `+share --permission` 必填、没有默认值:`edit=policy 2`、`download=policy 3`、`view=policy 4`。管理员 `0`、所有者 `1` 只能走 `minutes permission add --policy 0|1`。
|
|
137
|
+
- `--failure-policy` 默认 `stop`,首个成员失败后停止;显式 `continue` 才继续其他成员。任何失败都必须作为 partial/非零交付,并保留失败与未执行成员。
|
|
138
|
+
- `+unshare` 是 write/medium、`user_required`;执行前明确听记、成员和撤权影响。`+share`、`+apply-permission` 同样执行 Runtime 的 `user_required` confirmation。对应原子 permission 命令只保留历史兼容 Contract,不作为绕过确认的推荐路径。
|
|
139
|
+
- `+apply-permission` 只接受单个 `--id` 和必填的 `--permission view|download|edit`,目标固定为当前登录用户,不接受 `--member-uids`。
|
|
140
|
+
|
|
141
|
+
### 4.3 验证边界
|
|
142
|
+
|
|
143
|
+
当前没有公开的 `minutes permission list/get/inspect` 命令。真实执行后,`+share/+unshare` 可输出逐成员成功、失败和未执行 ledger,但成功项只表示写接口已确认接收;即使 `+unshare` 执行前读取了听记基本信息,也没有读到成员的最终权限。
|
|
144
|
+
|
|
145
|
+
因此权限结果必须按 `verification.mode=write_ack_only`、`verified=false` 交付。不要把 ledger 中的 `complete=true`、听记基本信息、dry-run 计划或退出码解释为“已读回验证权限生效”;也不要为了验证而重放授权或撤权请求。
|
|
146
|
+
|
|
147
|
+
### 4.4 dry-run
|
|
148
|
+
|
|
149
|
+
这些权限 Shortcut 的 dry-run 只展示目标组合与将执行的动作,不调用远端,也不证明听记、成员或当前权限状态。真实执行后也只能声明“写调用已确认接收”,不能声明“已读回最终权限”。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 听记发言人内容匹配
|
|
2
|
+
|
|
3
|
+
> 返回入口:[DingTalk Minutes Skill](../SKILL.md) · [Reference 与脚本索引](minutes.md) · [确认后替换发言人](11-minutes-speaker-correct.md)
|
|
4
|
+
|
|
5
|
+
只在用户要求“总结某人在这场会议里说了什么”,但逐字稿中的发言人标注仍需核对时读取本文件。只要用户要的是整场会议摘要,直接使用根 Skill 的 `+detail`;不要进入本流程。
|
|
6
|
+
|
|
7
|
+
## 稳定流程
|
|
8
|
+
|
|
9
|
+
1. **锁定听记**:已有 `taskUuid` 或 URL 时直接解析;只有标题/时间时使用 `+search --scope all --page-all`。零命中、多候选或分页不完整时停止,不默认第一条。
|
|
10
|
+
2. **读取完整逐字稿**:使用 `dws minutes +transcript --id <taskUuid>`,只有 `complete=true` 才进入人物归集;后页失败时不能用前几页代表整场发言。
|
|
11
|
+
3. **检查现有标注**:逐字稿已经稳定标注目标姓名时,按真实 speaker/segment 归集;不要仅在正文中搜索姓名,因为“别人提到某人”不等于“此人发言”。
|
|
12
|
+
4. **处理匿名发言人**:把匿名发言人的代表性原话和时间段作为候选证据。只有用户明确要求协助识别时,才可按会议时间查询日程参会人,并用通讯录补充候选的组织信息。
|
|
13
|
+
5. **要求用户消歧**:没有唯一、可验证的身份映射时展示候选并让用户选择。职位、部门、语言风格、发言顺序或某一条聊天/文档都不能单独证明真实身份。
|
|
14
|
+
6. **输出总结**:只总结已确认人物的真实发言,区分核心观点、问题、承诺/行动项和明确立场;源数据没有的责任人、数字或结论不得补写。
|
|
15
|
+
|
|
16
|
+
## 身份与隐私边界
|
|
17
|
+
|
|
18
|
+
- 日程参与人只是候选集合,不等于实际发言人,也不等于发言顺序。
|
|
19
|
+
- 不为识别发言人而默认检索其私人聊天或个人文档;用户明确要求跨产品核对时,才分别加载对应产品 Skill,并保留来源边界。
|
|
20
|
+
- 不暴露内部 speaker ID 作为人物身份结论。展示候选时使用逐字稿中可见的昵称或“匿名发言人 1/2”。
|
|
21
|
+
- 置信度分数不是身份凭证。即使模型判断“很像”,在没有稳定证据或用户确认时也只能给候选,不能写回。
|
|
22
|
+
|
|
23
|
+
## 后续替换
|
|
24
|
+
|
|
25
|
+
总结任务本身是只读。只有用户明确要求修改标注,并确认“当前昵称 → 目标姓名”的对应关系后,才读取 [11-minutes-speaker-correct.md](11-minutes-speaker-correct.md);不能把“帮我总结某人说了什么”自动扩大为替换发言人。
|
|
26
|
+
|
|
27
|
+
## 失败与不完整
|
|
28
|
+
|
|
29
|
+
- 逐字稿不完整:返回 `data.complete/data.pages`、`meta.pagination` 或失败信封等证据,停止人物级完整总结。
|
|
30
|
+
- 目标姓名未出现在稳定标注中:说明无法直接确认,展示匿名候选或询问用户。
|
|
31
|
+
- 同一姓名对应多人或跨组织结果:要求用户选择,保持当前 profile,不跨组织复用 UID。
|
|
32
|
+
- 没有足够发言内容:如实说明样本不足,不用其他人的发言补齐。
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# 听记发言人标注与替换
|
|
2
|
+
|
|
3
|
+
> 返回入口:[DingTalk Minutes Skill](../SKILL.md) · [Reference 与脚本索引](minutes.md) · [先识别和总结发言人](10-minutes-speaker-match.md)
|
|
4
|
+
|
|
5
|
+
只在用户已经提供或确认“当前发言人昵称 → 目标姓名”的对应关系,并明确要求修改听记时读取本文件。本流程不自动判断谁是谁,也不把候选推断当成写入授权。
|
|
6
|
+
|
|
7
|
+
## 写入前计划
|
|
8
|
+
|
|
9
|
+
1. 使用真实 `taskUuid` 锁定听记;只有标题时先按根 Skill 搜索并消歧。
|
|
10
|
+
2. 使用 `+transcript` 拉取完整逐字稿,确认每个 `--from` 昵称真实存在,并记录涉及的段落数量。
|
|
11
|
+
3. 将用户给出的每一组映射整理成 `from/to` 计划;同一个源昵称不得映射到多个目标姓名。
|
|
12
|
+
4. 用户要求绑定组织成员身份时,用 `dingtalk-aisearch` 唯一解析人员,再由 `dingtalk-contact` 核对同组织稳定 UID。零命中或多候选时停止该项;不能把姓名、手机号或跨组织 ID 直接当 UID。
|
|
13
|
+
5. 先执行 `+speaker-replace --dry-run` 查看计划。dry-run 不调用远端,也不能被解释为用户已经同意真实替换。
|
|
14
|
+
|
|
15
|
+
## 执行与验证
|
|
16
|
+
|
|
17
|
+
推荐入口:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
dws minutes +speaker-replace --id <taskUuid> --from <当前昵称> --to <目标姓名> [--target-uid <UID>]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- 这是写操作,按 leaf Schema 与 Runtime confirmation 执行;确认内容必须包含听记、源昵称、目标姓名和可选 UID。
|
|
24
|
+
- 多组映射逐项保留 ledger。某项失败后不能丢掉已成功项,也不能重放整个批次。
|
|
25
|
+
- 每次写入后重新读取逐字稿,验证旧昵称的目标段落已经更新,且没有修改其他发言人。
|
|
26
|
+
- 验证失败或结果未知时停止,报告已执行动作和当前证据;禁止盲目重试。
|
|
27
|
+
|
|
28
|
+
## 听音识别边界
|
|
29
|
+
|
|
30
|
+
当前没有发布“自动选择音频片段、调用本地 ffmpeg、发送片段并自动绑定身份”的稳定 Minutes Golden Route。需要用户听音识别时,可以先用 `+download` 安全下载用户明确指定听记的媒体,再让用户提供对应关系;不要静默安装工具、手写媒体请求或自行把音色推断成真实人员。
|
|
31
|
+
|
|
32
|
+
## 失败处理
|
|
33
|
+
|
|
34
|
+
| 情况 | 处理 |
|
|
35
|
+
|---|---|
|
|
36
|
+
| 源昵称不存在 | 停止该项并展示逐字稿中的真实昵称候选 |
|
|
37
|
+
| 人员解析多候选 | 展示姓名、部门等必要信息,让用户选择 |
|
|
38
|
+
| 找不到组织成员 | 询问是否仅修改显示名;未获授权时不执行 |
|
|
39
|
+
| 权限不足 | 保留原目标和计划,提示需要听记所有者/协作者权限 |
|
|
40
|
+
| 写入或读回状态未知 | 不自动重试;先按真实 taskUuid 重新读取 |
|