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,80 @@
|
|
|
1
|
+
# AI 表格记录操作
|
|
2
|
+
|
|
3
|
+
仅在任务涉及记录历史、分享、删除恢复、空行或特殊字段值时读取。普通 query/create/update/upsert 走根 Skill;复杂 filter/sort、附件上传和主键文档由根 Skill 分别选择对应终点 Reference。
|
|
4
|
+
|
|
5
|
+
本文不负责 Base/Table/Field 选路;读取后不要继续加载其他 AITable Reference。
|
|
6
|
+
|
|
7
|
+
## 查询
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
dws aitable +record-query --base-id <B> --table-id <T> --record-ids <R1,R2>
|
|
11
|
+
dws aitable +record-query --base-id <B> --table-id <T> --record-ids <R1,R2> --field-ids <F_NAME,F_STATUS>
|
|
12
|
+
dws aitable +record-query --base-id <B> --table-id <T> --query "关键词" --limit 100
|
|
13
|
+
dws aitable +record-query --base-id <B> --table-id <T> --filters '<JSON>' --sort '<JSON>'
|
|
14
|
+
dws aitable record query --base-id <B> --table-id <T> --filters '<JSON>' --all --page-limit 50
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
- `record-ids` 用于稳定 ID 精确读取;`query` 用于全文搜索;复杂条件用 `filters`。
|
|
18
|
+
- 用户要求“只返回/仅查看”指定列时,查询必须在工具层传 `--field-ids <ID1,ID2>`。不要先拉取全部字段再只在最终答复中删列;字段投影既是结果契约,也是降低响应 token 的手段。
|
|
19
|
+
- filters 使用 `{"operator":"and|or","operands":[...]}`,字段引用使用 fieldId。明确出现 AND/OR、日期或比较操作符时,应由根 Skill 直接选中记录筛选 reference;不要先读本文件再跳到第二个 reference。
|
|
20
|
+
- `+record-query` 必须传真实 `base-id` 和 `table-id`。URL 先用 `+url-resolve`;名称先用 `+resolve-base` / `+resolve-table` 唯一解析,禁止自动选第一项。
|
|
21
|
+
- 单页 `limit` 为 1-100。返回 `data.records`、`data.hasMore`,存在后续页时还会返回 `data.nextCursor`;把该值原样传给下一次 `--cursor`。
|
|
22
|
+
- `+record-query` 不提供 `--all`;明确要求全量时改用原子 `record query --all --page-limit <N>`。达到页上限后仍有 `hasMore=true` 代表截断,应从返回 cursor 续跑;只有 `hasMore=false`,或按 `record-ids` 查询且所有请求 ID 均已返回时,才能声称结果完整。
|
|
23
|
+
- 出现 `pagination_cursor_cycle`、相同 cursor 或重复页时,保留已取记录并立即停止;不要用相同参数重跑,也不要更换查询命令把不完整结果误报为完整。
|
|
24
|
+
|
|
25
|
+
## 新增
|
|
26
|
+
|
|
27
|
+
当前没有 `+record-create`,使用原子命令:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
dws aitable record create --base-id <B> --table-id <T> \
|
|
31
|
+
--records '[{"cells":{"fldText":"内容"}}]' --format json
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
长 JSON 写到 cwd 内相对文件后使用 `--records-file ./records.json`。从真实返回的 `data.newRecordIds[]` 取 recordId,再用 `+record-query --record-ids` 回读;用户限定返回列时同时传 `--field-ids`。不要从输入顺序、名称或行号推断 ID。
|
|
35
|
+
|
|
36
|
+
## 更新、同步与批量修改
|
|
37
|
+
|
|
38
|
+
已知 recordId:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
dws aitable +record-update --base-id <B> --table-id <T> \
|
|
42
|
+
--records '[{"recordId":"<R>","cells":{"fldStatus":"完成"}}]'
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
`+record-update` 自动按 100 条分片并逐批回读;该 shortcut 只接受 `--records`。超长文件输入需要改用原子 `record update --records-file`,不要给 shortcut 猜造 flag。
|
|
46
|
+
|
|
47
|
+
批量 shortcut 必须检查 `completed/failed`、`verification` 和 `checkpoint`;`partial_success` 不是完成。存在失败项时保留已完成批次和续跑位置;写入效果未知时只按真实 recordId 回读,不重放成功批次。
|
|
48
|
+
|
|
49
|
+
单选、多选等字段的写入值可能是名称字符串,读回则是 `{id,name}` 或对象数组。若 shortcut 因原始类型不同返回 commit-unknown/read-back mismatch,禁止重放更新;只按返回的 recordId 做一次 `+record-query`,把单选按 `name`、多选按名称集合归一化比较。归一化后与目标一致时,按“独立读回已确认写入”报告,并保留 shortcut 的误报信息供排障。
|
|
50
|
+
|
|
51
|
+
按业务唯一键同步使用 `+record-upsert-by-key`:0 条创建、1 条更新、多条冲突停止。按条件批改使用 `+record-bulk-patch`,必须提供 filters/query/record-ids 中至少一种选择条件,或显式 `--all`,并设置合理 `--max-matches`。
|
|
52
|
+
|
|
53
|
+
## 删除
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
dws aitable +record-delete --base-id <B> --table-id <T> --record-ids <R1,R2>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
删除不可逆。只使用已确认的真实 recordId;shortcut 自动分片并验证记录已不存在。未知结果按 recordId 回读,不重放已完成批次。
|
|
60
|
+
|
|
61
|
+
## 常用字段值
|
|
62
|
+
|
|
63
|
+
| 字段类型 | 写入值 |
|
|
64
|
+
|---|---|
|
|
65
|
+
| 文本、单选 | 字符串;单选使用已有选项名称 |
|
|
66
|
+
| 多选 | 选项名称数组 |
|
|
67
|
+
| 数字、评分 | JSON number |
|
|
68
|
+
| 复选框 | boolean |
|
|
69
|
+
| 日期 | 按字段配置要求的时间值;不凭展示文本猜格式 |
|
|
70
|
+
| URL | 按当前字段 Schema 要求的对象或字符串 |
|
|
71
|
+
| 人员、关联记录 | 使用真实 userId/recordId,不用姓名代替 |
|
|
72
|
+
| 附件 | 先用 `+attachment-put` 获得 AITable 附件 token,再写字段 |
|
|
73
|
+
|
|
74
|
+
公式、查找引用、创建人/时间、修改人/时间等只读字段不得写入。字段类型不明时只读取目标字段配置一次。
|
|
75
|
+
|
|
76
|
+
## 历史与分享
|
|
77
|
+
|
|
78
|
+
- 记录历史:`dws aitable +record-history-list --base-id <B> --table-id <T> --record-id <R>`。已有真实 recordId 直接执行,不扫描 Help 或产品 Catalog。
|
|
79
|
+
- 批量记录分享:`dws aitable +record-share-links --base <B> --table <T> --record-ids <R1,R2>`;单条也可用 `+record-share-url`。
|
|
80
|
+
- 用户要求把分享链接“发给”联系人时,AITable 的职责在链接生成后结束;随后加载 `dingtalk-chat`,用 `dws chat +dm --to <姓名> --text <包含全部链接的文本>` 对每位收件人分别发送并检查真实回执。只解析联系人或只生成 URL 都不算完成。
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# AI 表格 Section 与内部节点
|
|
2
|
+
|
|
3
|
+
只在用户操作 Base 内文件夹(Section)或把 Table/Dashboard 移入、移出 Section 时读取。这里的节点是 nsheet 业务节点,不是独立 Drive dentry;不要加载 Drive Skill 或尝试 Drive move。
|
|
4
|
+
|
|
5
|
+
## 高频闭环
|
|
6
|
+
|
|
7
|
+
创建 Section 并移动节点:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
dws aitable +section-create --base-id <B> --name "归档区" --format json
|
|
11
|
+
dws aitable +section-move-node --base-id <B> --node-id <TABLE_OR_DASHBOARD_ID> --new-parent-section-id <S> --format json
|
|
12
|
+
dws aitable +section-list-nodes --base-id <B> --format json
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
移动回 Base 根目录时显式传空字符串,不能省略该参数或改用 Drive:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
dws aitable +section-move-node --base-id <B> --node-id <N> --new-parent-section-id '' --format json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
后续操作只使用本次创建真实返回的 sectionId。若列表、移动或重命名对同一 sectionId 返回不存在或父节点无效,保留创建返回与后续错误并停止;不要创建替代 Section、更换 ID、重读本文或查询 Help/Catalog,也不要修改无关节点。
|
|
22
|
+
|
|
23
|
+
## 删除空 Section
|
|
24
|
+
|
|
25
|
+
1. 用 `+section-list-nodes` 核对目标 Section 内节点;需要移出的节点逐个 `+section-move-node`。
|
|
26
|
+
2. 用 `+section-list-empty --base-id <B>` 验证目标 sectionId 确实为空。
|
|
27
|
+
3. 执行 `+section-delete --base-id <B> --section-id <S>`;按 Runtime confirmation 处理。
|
|
28
|
+
4. 再次 `+section-list-nodes` 或 `+section-list-empty`,确认 Section 已不存在且被移动节点仍在预期父级。
|
|
29
|
+
|
|
30
|
+
Table 本身的创建、复制、改名、删除分别使用 `+table-*`;Section 只管理 Base 内目录关系。
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# AITable 低频原子能力索引
|
|
2
|
+
|
|
3
|
+
> 返回入口:[DingTalk AITable Skill](../SKILL.md)
|
|
4
|
+
|
|
5
|
+
本文件只用于根 Skill 和精确操作 Reference 都未覆盖的低频底层能力。Base/Table 创建、记录 CRUD、筛选排序、视图、导入导出和 Dashboard 等已覆盖能力必须返回根 Skill;本文件不直接导航到其他 AITable Reference。
|
|
6
|
+
|
|
7
|
+
## 使用边界
|
|
8
|
+
|
|
9
|
+
1. 只有任务确实需要 Shortcut 未发布的底层字段、原始响应或运维控制时才读取本文件;
|
|
10
|
+
2. 若任务已由根 Skill 或某个精确 Reference 覆盖,立即返回根 Skill 重新选路,不在本文件继续导航到另一个 Reference;
|
|
11
|
+
3. 已知命令且参数完整时直接执行;只有 leaf 参数或安全语义不确定时才读精确 Schema,只有 Cobra flag 不确定时才读该 leaf Help;
|
|
12
|
+
4. 名称或 URL 目标仍必须解析为当前 profile 下的唯一稳定 ID,禁止选择第一个候选;
|
|
13
|
+
5. 原子写 leaf 的 confirmation 与对应 Golden Shortcut 不一致时停止,以 Runtime gate 和精确 leaf Schema 为准;
|
|
14
|
+
6. 完成后保留稳定 ID、验证证据、partial failure、checkpoint 和真实错误。
|
|
15
|
+
|
|
16
|
+
## 返回规则
|
|
17
|
+
|
|
18
|
+
Base、Table、普通 Field、普通 Record、View、Dashboard、筛选排序、导入导出等已覆盖能力全部返回根 Skill;本索引不重复维护高频路由,也不作为 Reference 之间的中转站。
|
|
19
|
+
|
|
20
|
+
## 低频底层命令族
|
|
21
|
+
|
|
22
|
+
下表只是最后回退的导航,不是可预加载的命令目录。命中后若参数或安全语义仍不确定,才读取精确 leaf Schema。
|
|
23
|
+
|
|
24
|
+
| 原子命令或命令族 | 仅用于 |
|
|
25
|
+
|---|---|
|
|
26
|
+
| `base get-primary-doc-id` | 统一 Base/Record 路由未投影所需底层主文档 ID 时 |
|
|
27
|
+
| `record get` | 必须获取单条记录原始响应,且 `+record-query --record-ids` 不能交付所需字段时 |
|
|
28
|
+
| `field search-options` | 只需在已知选项字段中搜索选项,不需要完整字段配置时 |
|
|
29
|
+
|
|
30
|
+
## 低频批处理脚本
|
|
31
|
+
|
|
32
|
+
只有根 Skill 已定位到对应低频任务、且原生命令需要重复编排时才使用;脚本参数以 `--help` 和脚本内校验为准,不因脚本存在而跳过目标解析、确认或结果验证。
|
|
33
|
+
|
|
34
|
+
| 脚本 | 仅用于 |
|
|
35
|
+
|---|---|
|
|
36
|
+
| `python scripts/aitable_export_via_task.py <baseId> --scope all` | 已由根 Skill 选中导出任务,需要轮询 `taskId` 并下载结果时;表或视图范围使用稳定 `tableId` / `viewId` |
|
|
37
|
+
| `python scripts/bulk_add_fields.py <baseId> <tableId> fields.json` | 已完成字段类型与配置校验后批量创建大量字段;少量普通字段走根 Skill 次级直达 |
|
|
38
|
+
|
|
39
|
+
## 稳定 ID 传递
|
|
40
|
+
|
|
41
|
+
| 来源 | 只可用于 |
|
|
42
|
+
|---|---|
|
|
43
|
+
| `+url-resolve` / `+resolve-base` / `+base-search` 唯一结果 | 当前 profile 下的 `baseId` |
|
|
44
|
+
| `+resolve-table` / `+list-tables` | 当前 Base 下的 `tableId` |
|
|
45
|
+
| `field list` / `+field-get` | 当前 Table 下的 `fieldId` |
|
|
46
|
+
| `record create` / `+record-query` | 当前 Table 下的 `recordId` |
|
|
47
|
+
| `view create` / `+view-get` | 当前 Table 下的 `viewId` |
|
|
48
|
+
| Dashboard 或 Chart 创建结果 | 当前 Base 下的 `dashboardId` / `chartId` |
|
|
49
|
+
|
|
50
|
+
`baseId` / `tableId` / `fieldId` / `recordId` / `viewId` 是不同类型,不得轮流代入试错。Base 复制目标按根 Skill 的 Golden Route 解析。
|
|
51
|
+
|
|
52
|
+
## 故障处理
|
|
53
|
+
|
|
54
|
+
- `unknown command` / `unknown flag`:读取精确 leaf Help,最多做一次有证据的修正;
|
|
55
|
+
- confirmation 或参数约束不清:读取精确 leaf Schema,以 Runtime gate 为准;
|
|
56
|
+
- `partial_success`:保留已完成项和 checkpoint,只执行结果给出的继续或恢复命令;
|
|
57
|
+
- 写入结果为 `unknown`:先按稳定 ID 或业务唯一键回读,未确认前不重试非幂等写;
|
|
58
|
+
- `retryable=false` 或 ID 类型错误:停止,不换同义原子命令或其他 ID 类型试错;
|
|
59
|
+
- 部分成功:保留 completed/failed/unknown 明细,不表述为完整成功。
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Field 兼容规则终点
|
|
2
|
+
|
|
3
|
+
这是保留给 Mono/Multi 历史内容映射的兼容文件,根 Skill 不主动路由到这里。普通字段操作可直接使用下列事实;AI、关联、lookup、filterUp 或复杂 config 应由根 Skill 直接选择唯一 `references/aitable/aitable-field.md`,不要从本文件继续跳转。
|
|
4
|
+
|
|
5
|
+
| 用户意图 | 正确命令/边界 |
|
|
6
|
+
|---|---|
|
|
7
|
+
| 读取字段目录 | `dws aitable field list --base-id <B> --table-id <T>`;只取 fieldId/name/type |
|
|
8
|
+
| 读取完整字段配置 | `dws aitable +field-get --base-id <B> --table-id <T>`;需要 config/options 时使用 |
|
|
9
|
+
| 创建普通字段 | `dws aitable field create --base-id <B> --table-id <T> --name <N> --type <T> [--config <JSON>]` |
|
|
10
|
+
| 批量创建字段 | `field create ... --fields '<JSON_ARRAY>'`;与 `--name/--type/--config/--ai-config` 互斥 |
|
|
11
|
+
| 重命名/改配置 | `field update ... --field-id <F> --name <N>` 或 `--config <JSON>`;不能改字段类型 |
|
|
12
|
+
| 删除字段 | `dws aitable +field-delete --base-id <B> --table-id <T> --field-id <F>`;主字段和最后一个字段不可删除 |
|
|
13
|
+
| 调整列顺序 | 使用 `view update visible-fields`;没有 `field reorder` / `field move` |
|
|
14
|
+
|
|
15
|
+
创建 Table 时第一个字段自动成为主字段,且必须是 text。singleSelect/multipleSelect 创建时在 `config.options` 中声明选项;记录写入使用已存在的选项名称。公式、引用、创建/修改人和创建/修改时间等只读字段不得写入。
|
|
16
|
+
|
|
17
|
+
本文件是终点:不读取 cell-value、field-properties 或 Help。只有 Runtime 实际返回 `unknown command` / `unknown flag` 时才读取精确 leaf Help,并最多修正一次。
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# AITable 局部意图消歧
|
|
2
|
+
|
|
3
|
+
| 用户表达 | 归属 | 理由 |
|
|
4
|
+
|---|---|---|
|
|
5
|
+
| AI 表格、多维表、Base、Table、字段、记录、视图、表单、仪表盘、自动化 | AITable | 操作 AITable 的业务数据与配置 |
|
|
6
|
+
| 搜索 Base 候选、按关键词找 Base、检查某 Base 是否存在 | AITable | 直接使用 `+base-search --query`;即使关键词像人名,只要对象是 Base,也不得改走 `aisearch person` |
|
|
7
|
+
| 表格链接,需要读取记录 | AITable | 先用 `+url-resolve` 取稳定 ID,再用 `+record-query` |
|
|
8
|
+
| 只有 Base/Table 名称,需要读取记录 | AITable | 先用 `+resolve-base` / `+resolve-table` 唯一解析,再查询记录 |
|
|
9
|
+
| 只复制 Base 结构、删除整个 Base | AITable | 复制到已知文档文件夹用 `+base-copy --target-folder-id ... --only-struct`;删除用真实 baseId。不要 Drive 完整复制后逐表删数据 |
|
|
10
|
+
| Base 整体移动到普通文件夹、外层存储重命名 | Drive | 这是 Base 作为单个存储节点的外层位置/名称动作 |
|
|
11
|
+
| Base 内 Table、Dashboard、Section 的复制/移动/重命名/删除 | AITable | 这些是 Base 内 nsheet/业务结构,不是独立 Drive dentry |
|
|
12
|
+
| Base 角色、高级权限 | AITable | `+role-*` / `+advperm-*`;仅普通文件 ACL 才走 Drive |
|
|
13
|
+
| 记录主键文档正文 | Doc | AITable 只取/建关联,正文由 Doc 处理 |
|
|
14
|
+
| Excel 式单元格、区域、工作表、公式 | Sheet(dingtalk-misc) | 二维电子表格,不是多维表记录模型 |
|
|
15
|
+
| CSV/JSON 数据进入现有 AI 表格 | AITable import 或 record create | 需要保留导入任务语义时用 import;已映射字段时直接写记录 |
|
|
16
|
+
|
|
17
|
+
若链接类型不明确,先做 URL 类型预检;不要仅凭 URL 文本猜产品。明确是 AI 表格后才加载本 Skill。
|
|
@@ -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,144 @@
|
|
|
1
|
+
# URL 格式与处理规范
|
|
2
|
+
|
|
3
|
+
## 路由第 0 步:意图直达(优先级高于 URL 探测)
|
|
4
|
+
|
|
5
|
+
用户已经明确表达某产品的内容意图时,直接进入对应产品场域,不要先做 URL 类型
|
|
6
|
+
探测。尤其:
|
|
7
|
+
|
|
8
|
+
- 明确提到 Markdown / `.md` 文件的读取或修改,按普通文件走 `drive` 场域:
|
|
9
|
+
先 `dws drive download` 下载到本地处理,再用 `dws drive upload` 回传。
|
|
10
|
+
- 明确“读这篇文档 / 编辑文档正文”进入 `doc`;明确“看这个在线表格数据”进入
|
|
11
|
+
`sheet`。
|
|
12
|
+
|
|
13
|
+
仅当用户只粘贴 URL、没有明确产品意图,或意图与链接类型可能冲突时,才执行下方
|
|
14
|
+
类型探测。
|
|
15
|
+
|
|
16
|
+
## alidocs URL 分流决策(意图不明确时执行)
|
|
17
|
+
|
|
18
|
+
收到 `alidocs.dingtalk.com` URL 且无法从指令判断产品时,必须按以下顺序判断:
|
|
19
|
+
|
|
20
|
+
1. URL 路径含 `/i/p/` → **分享短链**,禁止调用 `dws doc` 任何子命令 → 按下方 [分享短链处理](#分享短链处理) 执行
|
|
21
|
+
2. URL 路径含 `/i/nodes/` → **节点链接**,需探测类型 → 按下方 [alidocs URL 类型探测流程](#alidocs-url-类型探测流程) 执行
|
|
22
|
+
3. URL 路径含 `/spreadsheetv2/` → **电子表格直链**,直接路由到 `sheet`,将完整 URL 原样传给 `--node` 参数
|
|
23
|
+
4. URL 路径含 `/document/edit` 或 `/document/preview` 且 query 参数包含 `dentryKey` → **文档链接**,直接路由到 `doc`,将完整 URL 原样传给 `--node` 参数(URL 中不一定有 `type=d`,只需匹配路径和 `dentryKey` 参数即可)
|
|
24
|
+
5. 其他 alidocs URL 格式 → 告知用户当前暂不支持该链接格式
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 已知 URL 格式
|
|
29
|
+
|
|
30
|
+
需要自行拼接链接时,只能使用以下模板:
|
|
31
|
+
|
|
32
|
+
| 产品 | 用途 | URL 格式 | ID 来源 |
|
|
33
|
+
|------|------|----------|---------|
|
|
34
|
+
| `aitable` | AI表格 Base 链接 | `https://alidocs.dingtalk.com/i/nodes/{baseId}` | `base list/search/create/get` 返回的 `baseId` |
|
|
35
|
+
| `aitable` | AI表格指定数据表链接 | `https://alidocs.dingtalk.com/i/nodes/{baseId}?iframeQuery=sheetId%3D{tableId}` | `baseId` + `table create/get` 或 `base get` 返回的 `tableId` |
|
|
36
|
+
| `aitable` | AI表格指定数据表+视图链接 | `https://alidocs.dingtalk.com/i/nodes/{baseId}?iframeQuery=sheetId%3D{tableId}%26viewId%3D{viewId}` | `baseId` + `tableId` + `view create/get` 返回的 `viewId` |
|
|
37
|
+
| `aitable` | AI表格模板预览 | `https://docs.dingtalk.com/table/template/{templateId}` | `template search` 返回的 `templateId` |
|
|
38
|
+
| `doc` | 文档链接 | `https://alidocs.dingtalk.com/i/nodes/{dentryUuid}` | `doc` 命令返回的 `dentryUuid` |
|
|
39
|
+
| `sheet` | 电子表格链接 | `https://alidocs.dingtalk.com/i/nodes/{dentryUuid}` | `sheet create` 返回的 `dentryUuid` |
|
|
40
|
+
| `sheet` | 电子表格直链 | `https://alidocs.dingtalk.com/spreadsheetv2/{key}/...?dentryKey={key}&type=s` | 用户提供的完整 URL,直接传给 `--node` |
|
|
41
|
+
| `doc` | 文档链接(edit/preview) | `https://alidocs.dingtalk.com/document/{edit\|preview}?...&dentryKey={key}` | 用户提供的完整 URL,直接传给 `--node` |
|
|
42
|
+
| `minutes` | 听记链接 | `https://shanji.dingtalk.com/app/transcribes/{taskUuid}` | `list mine/shared` 返回的 `taskUuid` |
|
|
43
|
+
|
|
44
|
+
不在此表中的产品,禁止自行拼接 URL。命令返回中包含完整链接时直接使用,否则告知用户无法提供。
|
|
45
|
+
|
|
46
|
+
## 分享短链处理
|
|
47
|
+
|
|
48
|
+
`alidocs.dingtalk.com/i/p/{shortKey}` 是钉钉文档的**对外分享短链**,`dws doc` 命令无法解析此格式。
|
|
49
|
+
|
|
50
|
+
### 识别规则
|
|
51
|
+
|
|
52
|
+
URL 路径中包含 `/i/p/` 即为分享短链(无论后面是否还有子路径),例如:
|
|
53
|
+
- `https://alidocs.dingtalk.com/i/p/Y7kmbokZp3pgGLq2`
|
|
54
|
+
- `https://alidocs.dingtalk.com/i/p/Y7kmbokZp3pgGLq2/docs/AY39rGpMPmeVNpXZevZm8OZkXKnaoNQ7`
|
|
55
|
+
- `https://alidocs.dingtalk.com/i/p/AbCdEfGh1234`
|
|
56
|
+
- `https://alidocs.dingtalk.com/i/p/AbCdEfGh1234/sheets/XYZ789`
|
|
57
|
+
|
|
58
|
+
> **关键**:只要 URL 中出现 `/i/p/`,无论后面跟什么子路径(`/docs/...`、`/sheets/...` 等),都属于分享短链,一律禁止调用 `dws doc`。
|
|
59
|
+
|
|
60
|
+
### 处理方式
|
|
61
|
+
|
|
62
|
+
**不要调用 `dws doc` 任何子命令**(包括 `doc info`、`doc read` 等),`dws` 无法解析此格式。
|
|
63
|
+
|
|
64
|
+
- **需要获取文档内容时**:使用 `read_url` 工具直接读取该链接
|
|
65
|
+
- **其他操作(如移动、复制、权限管理等)**:告知用户此链接为分享短链,无法直接执行复制、移动、权限管理等操作。如需保存该文档内容,建议用户在钉钉客户端中打开该页面,手动复制文本内容,然后可通过 `dws doc create` 创建一篇新文档并将内容写入
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
# 需要读取文档内容时(无论 /i/p/ 后面有没有子路径,都用 read_url)
|
|
69
|
+
read_url("https://alidocs.dingtalk.com/i/p/Y7kmbokZp3pgGLq2")
|
|
70
|
+
read_url("https://alidocs.dingtalk.com/i/p/Y7kmbokZp3pgGLq2/docs/AY39rGpMPmeVNpXZevZm8OZkXKnaoNQ7")
|
|
71
|
+
|
|
72
|
+
# 禁止(以下全部会失败,dws 无法解析任何含 /i/p/ 的 URL)
|
|
73
|
+
dws doc info --node "https://alidocs.dingtalk.com/i/p/Y7kmbokZp3pgGLq2" --format json
|
|
74
|
+
dws doc read --node "https://alidocs.dingtalk.com/i/p/Y7kmbokZp3pgGLq2/docs/AY39rGpMPmeVNpXZevZm8OZkXKnaoNQ7" --format json
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 当 `read_url` 返回内容不完整时
|
|
78
|
+
|
|
79
|
+
钉钉文档分享页是动态渲染的,`read_url` 可能只能获取到页面标题等有限信息,无法获取文档正文。此时**禁止猜测原因**(如"权限不足""文档为空""文档已删除"等),**禁止建议用户"提供 `/i/nodes/` 格式链接"**(分享短链和节点链接是不同体系,普通用户无法自行转换)。应直接告知用户:
|
|
80
|
+
|
|
81
|
+
> 这个链接是钉钉文档的分享短链,由于页面是动态渲染的,我无法通过该链接直接获取文档的完整正文内容。
|
|
82
|
+
>
|
|
83
|
+
> 你可以:
|
|
84
|
+
> 1. 在钉钉客户端中打开该文档,将正文内容复制粘贴给我
|
|
85
|
+
> 2. 如果文档已保存在你的文档空间中,可以告诉我文档名称,我通过 `dws drive search` 搜索后再读取
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## alidocs URL 类型探测流程
|
|
90
|
+
|
|
91
|
+
`alidocs.dingtalk.com/i/nodes/{id}` 是钉钉文档空间的统一 URL,可能指向**文档、电子表格、多维表、文件、文件夹**等不同类型。**禁止仅凭 URL 就假定为文档**,必须先探测类型再路由到正确的产品。
|
|
92
|
+
|
|
93
|
+
### 探测步骤
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Step 1 → dws drive info --node "<URL>" --format json
|
|
97
|
+
Step 2 → 从返回中提取 extension、nodeType 字段
|
|
98
|
+
Step 3 → 按下方路由规则映射到对应产品
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
> 路由依据是 `extension`,不是 `contentType`。`drive info` 检测到
|
|
102
|
+
> `adoc` / `axls` / `able` 时会自动补充在线文档信息。
|
|
103
|
+
|
|
104
|
+
### 路由映射表
|
|
105
|
+
|
|
106
|
+
| 条件 | 路由到产品 | 后续操作 |
|
|
107
|
+
|------|-----------|---------|
|
|
108
|
+
| `extension=adoc` | `doc` | 加载 `dingtalk-doc` 操作内容 |
|
|
109
|
+
| `extension=axls` | `sheet` | 加载 `dingtalk-misc` 的 `references/sheet.md` 操作(仅 `axls` 在线电子表格) |
|
|
110
|
+
| `extension=able` | `aitable` | 将 nodeId 作为 baseId,加载 `dingtalk-aitable` 操作 |
|
|
111
|
+
| `extension=xlsx` / `xls` / `xlsm` / `csv` | `drive` | 必须用 `dws drive download` 下载到本地处理,禁止走 `sheet` |
|
|
112
|
+
| `nodeType=file`(非在线文档扩展名,含 `md`) | `drive` | 下载用 `dws drive download --node <ID> --output <PATH> --format json`;上传/覆盖用 `dws drive upload` |
|
|
113
|
+
| `nodeType=folder` | `drive` / `wiki` | 调用 `dws drive list --workspace <WS_ID>` 或 `dws wiki node list` 列出子节点 |
|
|
114
|
+
| 以上均不匹配 | — | 告知用户当前暂不支持该类型 |
|
|
115
|
+
|
|
116
|
+
> axls vs xlsx 关键区分:
|
|
117
|
+
> - `axls`(钉钉在线电子表格,`contentType=ALIDOC`)→ 走 `sheet` 产品线(读/写/筛选/导出等服务端原子操作)
|
|
118
|
+
> - `xlsx` / `xls` / `xlsm` / `csv`(上传到文档空间的本地表格文件,`contentType=DOCUMENT`)→ 必须走 `dws drive download` 下载到本地后再解析处理,严禁错误路由到 `sheet` 产品线(sheet 命令只支持在线表格,调用 xlsx 节点会直接报错)
|
|
119
|
+
> - 用户想把在线表格导出为 xlsx 文件 → 用 `dws sheet export`(输入是 `axls`,输出是 xlsx,这是 axls → xlsx 的格式转换,不属于 xlsx 读取场景)
|
|
120
|
+
|
|
121
|
+
### 示例
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# 用户传入: https://alidocs.dingtalk.com/i/nodes/abc123
|
|
125
|
+
dws drive info --node "https://alidocs.dingtalk.com/i/nodes/abc123" --format json
|
|
126
|
+
|
|
127
|
+
# 返回 extension=axls → 在线电子表格,路由到 sheet
|
|
128
|
+
dws sheet list --node "https://alidocs.dingtalk.com/i/nodes/abc123" --format json
|
|
129
|
+
|
|
130
|
+
# 返回 extension=xlsx/xls/csv → 本地表格文件,必须下载处理(禁止走 sheet)
|
|
131
|
+
dws drive download --node "https://alidocs.dingtalk.com/i/nodes/xlsx456" --output <PATH> --format json
|
|
132
|
+
|
|
133
|
+
# 返回 nodeType=file → 普通文件,下载
|
|
134
|
+
dws drive download --node "https://alidocs.dingtalk.com/i/nodes/def456" --output <PATH> --format json
|
|
135
|
+
|
|
136
|
+
# 返回 nodeType=folder → 文件夹,列出子节点
|
|
137
|
+
dws drive list --workspace <WS_ID> --format json
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 何时可跳过探测
|
|
141
|
+
|
|
142
|
+
当用户指令中已明确指定产品(如"帮我读这个文档"、"看下这个表格的数据"),可结合用户意图**跳过探测**直接路由。仅在以下情况**必须执行探测**:
|
|
143
|
+
- 用户只粘贴 URL,无其他上下文
|
|
144
|
+
- 用户指令与 URL 实际类型可能不一致(如说"文档"但实际是表格)
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
通过 MCP 导出任务(export_data)导出 AI 表格,并可自动下载文件。
|
|
4
|
+
|
|
5
|
+
与普通命令的区别:
|
|
6
|
+
- 自动处理 taskId 轮询(直到拿到 downloadUrl 或达到轮询上限)。
|
|
7
|
+
- 自动保存导出文件到本地(可选 --output)。
|
|
8
|
+
|
|
9
|
+
用法:
|
|
10
|
+
python scripts/aitable_export_via_task.py <baseId> --scope all
|
|
11
|
+
python scripts/aitable_export_via_task.py <baseId> --scope table --table-id <tableId>
|
|
12
|
+
python scripts/aitable_export_via_task.py <baseId> --scope view --table-id <tableId> --view-id <viewId>
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import argparse
|
|
18
|
+
import json
|
|
19
|
+
import re
|
|
20
|
+
import subprocess
|
|
21
|
+
import sys
|
|
22
|
+
import time
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
from typing import Any, Dict, Optional, Tuple
|
|
25
|
+
from urllib.error import HTTPError, URLError
|
|
26
|
+
from urllib.parse import urlparse
|
|
27
|
+
from urllib.request import Request, urlopen
|
|
28
|
+
|
|
29
|
+
RESOURCE_ID_PATTERN = re.compile(r"^[A-Za-z0-9_-]{8,128}$")
|
|
30
|
+
ALLOWED_FORMATS = {"excel", "attachment", "excel_and_attachment", "excel_with_inline_images"}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def validate_resource_id(resource_id: str) -> bool:
|
|
34
|
+
return bool(resource_id and RESOURCE_ID_PATTERN.match(resource_id.strip()))
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def run_dws(dws_bin: str, args: list[str], timeout_sec: int = 120) -> Tuple[int, str, str]:
|
|
38
|
+
cmd = [dws_bin] + args
|
|
39
|
+
try:
|
|
40
|
+
result = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout_sec)
|
|
41
|
+
return result.returncode, result.stdout.strip(), result.stderr.strip()
|
|
42
|
+
except subprocess.TimeoutExpired:
|
|
43
|
+
return 124, "", f"dws command timeout after {timeout_sec}s"
|
|
44
|
+
except FileNotFoundError:
|
|
45
|
+
return 127, "", f"dws binary not found: {dws_bin}"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def parse_json_output(raw: str) -> Optional[Dict[str, Any]]:
|
|
49
|
+
try:
|
|
50
|
+
obj = json.loads(raw)
|
|
51
|
+
return obj if isinstance(obj, dict) else None
|
|
52
|
+
except json.JSONDecodeError:
|
|
53
|
+
return None
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def normalize_download_url(url: str) -> str:
|
|
57
|
+
if url.startswith("http://") or url.startswith("https://"):
|
|
58
|
+
return url
|
|
59
|
+
return f"https://{url}"
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def download_file(url: str, output_path: Path) -> Tuple[bool, str]:
|
|
63
|
+
req = Request(url, method="GET")
|
|
64
|
+
try:
|
|
65
|
+
with urlopen(req, timeout=180) as resp:
|
|
66
|
+
if resp.status != 200:
|
|
67
|
+
return False, f"download http status: {resp.status}"
|
|
68
|
+
output_path.write_bytes(resp.read())
|
|
69
|
+
return True, ""
|
|
70
|
+
except HTTPError as e:
|
|
71
|
+
body = e.read().decode("utf-8", "ignore")
|
|
72
|
+
return False, f"HTTP {e.code}: {body[:300]}"
|
|
73
|
+
except URLError as e:
|
|
74
|
+
return False, f"URL error: {e.reason}"
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def fail(msg: str, code: int = 1) -> None:
|
|
78
|
+
print(f"错误:{msg}", file=sys.stderr)
|
|
79
|
+
sys.exit(code)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def build_start_args(args: argparse.Namespace) -> list[str]:
|
|
83
|
+
cmd = [
|
|
84
|
+
"aitable",
|
|
85
|
+
"export",
|
|
86
|
+
"data",
|
|
87
|
+
"--base-id",
|
|
88
|
+
args.base_id,
|
|
89
|
+
"--scope",
|
|
90
|
+
args.scope,
|
|
91
|
+
"--format",
|
|
92
|
+
args.export_format,
|
|
93
|
+
"--timeout-ms",
|
|
94
|
+
str(args.timeout_ms),
|
|
95
|
+
]
|
|
96
|
+
if args.table_id:
|
|
97
|
+
cmd.extend(["--table-id", args.table_id])
|
|
98
|
+
if args.view_id:
|
|
99
|
+
cmd.extend(["--view-id", args.view_id])
|
|
100
|
+
return cmd
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def main() -> None:
|
|
104
|
+
parser = argparse.ArgumentParser(description="通过 MCP 导出任务导出 AI 表格")
|
|
105
|
+
parser.add_argument("base_id", help="目标 AI 表格 baseId")
|
|
106
|
+
parser.add_argument("--scope", choices=["all", "table", "view"], required=True, help="导出范围")
|
|
107
|
+
parser.add_argument("--table-id", help="scope=table/view 时必填")
|
|
108
|
+
parser.add_argument("--view-id", help="scope=view 时必填")
|
|
109
|
+
parser.add_argument("--export-format", default="excel", choices=sorted(ALLOWED_FORMATS), help="导出格式")
|
|
110
|
+
parser.add_argument("--timeout-ms", type=int, default=1000, help="单次等待毫秒数,默认 1000")
|
|
111
|
+
parser.add_argument("--poll-timeout-ms", type=int, default=3000, help="轮询等待毫秒数,默认 3000")
|
|
112
|
+
parser.add_argument("--max-polls", type=int, default=10, help="最大轮询次数,默认 10")
|
|
113
|
+
parser.add_argument("--output", help="本地保存路径(不传则按 fileName 保存到当前目录)")
|
|
114
|
+
parser.add_argument("--dws", default="dws", help="dws 可执行文件路径,默认 dws")
|
|
115
|
+
parser.add_argument("--no-download", action="store_true", help="仅返回 downloadUrl,不下载文件")
|
|
116
|
+
args = parser.parse_args()
|
|
117
|
+
|
|
118
|
+
if not validate_resource_id(args.base_id):
|
|
119
|
+
fail("无效的 baseId 格式")
|
|
120
|
+
if args.scope in ("table", "view") and not args.table_id:
|
|
121
|
+
fail("scope=table/view 时必须传 --table-id")
|
|
122
|
+
if args.scope == "view" and not args.view_id:
|
|
123
|
+
fail("scope=view 时必须传 --view-id")
|
|
124
|
+
|
|
125
|
+
print("[1/2] start export task", file=sys.stderr)
|
|
126
|
+
rc, out, err = run_dws(args.dws, build_start_args(args), timeout_sec=120)
|
|
127
|
+
if rc != 0:
|
|
128
|
+
fail(f"export_data 启动失败: {err or out}", rc)
|
|
129
|
+
obj = parse_json_output(out)
|
|
130
|
+
if not obj:
|
|
131
|
+
fail(f"export_data 返回非 JSON: {out[:300]}")
|
|
132
|
+
|
|
133
|
+
data = obj.get("data", {}) or {}
|
|
134
|
+
status = obj.get("status")
|
|
135
|
+
if status == "error":
|
|
136
|
+
fail(f"export_data 返回失败: {json.dumps(obj, ensure_ascii=False)}")
|
|
137
|
+
|
|
138
|
+
download_url = data.get("downloadUrl")
|
|
139
|
+
task_id = data.get("taskId")
|
|
140
|
+
file_name = data.get("fileName") or "export_result.bin"
|
|
141
|
+
|
|
142
|
+
polls = 0
|
|
143
|
+
while not download_url and task_id and polls < args.max_polls:
|
|
144
|
+
polls += 1
|
|
145
|
+
print(f"[2/2] polling task ({polls}/{args.max_polls})", file=sys.stderr)
|
|
146
|
+
rc2, out2, err2 = run_dws(
|
|
147
|
+
args.dws,
|
|
148
|
+
[
|
|
149
|
+
"aitable",
|
|
150
|
+
"export",
|
|
151
|
+
"data",
|
|
152
|
+
"--base-id",
|
|
153
|
+
args.base_id,
|
|
154
|
+
"--task-id",
|
|
155
|
+
task_id,
|
|
156
|
+
"--timeout-ms",
|
|
157
|
+
str(args.poll_timeout_ms),
|
|
158
|
+
],
|
|
159
|
+
timeout_sec=max(120, int(args.poll_timeout_ms / 1000) + 60),
|
|
160
|
+
)
|
|
161
|
+
if rc2 != 0:
|
|
162
|
+
fail(f"export_data 轮询失败: {err2 or out2}", rc2)
|
|
163
|
+
obj2 = parse_json_output(out2)
|
|
164
|
+
if not obj2:
|
|
165
|
+
fail(f"export_data 轮询返回非 JSON: {out2[:300]}")
|
|
166
|
+
if obj2.get("status") == "error":
|
|
167
|
+
fail(f"export_data 轮询返回失败: {json.dumps(obj2, ensure_ascii=False)}")
|
|
168
|
+
d2 = obj2.get("data", {}) or {}
|
|
169
|
+
download_url = d2.get("downloadUrl") or download_url
|
|
170
|
+
file_name = d2.get("fileName") or file_name
|
|
171
|
+
task_id = d2.get("taskId") or task_id
|
|
172
|
+
if not download_url:
|
|
173
|
+
time.sleep(0.2)
|
|
174
|
+
|
|
175
|
+
result: Dict[str, Any] = {
|
|
176
|
+
"baseId": args.base_id,
|
|
177
|
+
"scope": args.scope,
|
|
178
|
+
"exportFormat": args.export_format,
|
|
179
|
+
"taskId": task_id,
|
|
180
|
+
"fileName": file_name,
|
|
181
|
+
"downloadUrl": download_url,
|
|
182
|
+
"polledTimes": polls,
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if not download_url:
|
|
186
|
+
result["status"] = "pending"
|
|
187
|
+
result["summary"] = "导出任务仍在处理中,请继续用 taskId 轮询。"
|
|
188
|
+
print(json.dumps(result, ensure_ascii=False, indent=2))
|
|
189
|
+
sys.exit(3)
|
|
190
|
+
|
|
191
|
+
if args.no_download:
|
|
192
|
+
result["status"] = "success"
|
|
193
|
+
result["summary"] = "导出完成(未下载文件)。"
|
|
194
|
+
print(json.dumps(result, ensure_ascii=False, indent=2))
|
|
195
|
+
return
|
|
196
|
+
|
|
197
|
+
norm_url = normalize_download_url(download_url)
|
|
198
|
+
output_path = Path(args.output).expanduser().resolve() if args.output else Path.cwd() / file_name
|
|
199
|
+
ok, dl_err = download_file(norm_url, output_path)
|
|
200
|
+
if not ok:
|
|
201
|
+
fail(f"downloadUrl 下载失败: {dl_err}")
|
|
202
|
+
|
|
203
|
+
result["status"] = "success"
|
|
204
|
+
result["summary"] = "导出完成并已下载。"
|
|
205
|
+
result["savedPath"] = str(output_path)
|
|
206
|
+
print(json.dumps(result, ensure_ascii=False, indent=2))
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
if __name__ == "__main__":
|
|
210
|
+
main()
|