@shundoo-ai/dsh-cosmic 1.0.19 → 1.0.21
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/cordis.patch.yml +5 -5
- package/package.json +1 -1
- package/skills/cosmic-build/CHANGELOG.md +4 -0
- package/skills/cosmic-build/LOCAL-PATCHES.md +91 -40
- package/skills/cosmic-build/SKILL.md +46 -13
- package/skills/cosmic-build/assets/platform-report-filters/TypedReportFilterFields.java +169 -0
- package/skills/cosmic-build/assets/platform-report-filters/platform.patch +98 -0
- package/skills/cosmic-build/assets/report-algo-benchmark/ReportAlgoBenchmark.java +48 -0
- package/skills/cosmic-build/assets/report-algo-benchmark/ReportBenchmarkLogFactory.java +7 -0
- package/skills/cosmic-build/examples/java-rules/CosmicEntryQuery.java +26 -0
- package/skills/cosmic-build/examples/java-rules/CosmicReportAggregation.java +35 -0
- package/skills/cosmic-build/examples/java-rules/CosmicReportFilters.java +77 -0
- package/skills/cosmic-build/examples/java-rules/CosmicTimeAdapter.java +25 -0
- package/skills/cosmic-build/examples/java-rules/CosmicTimeAdapterCheck.java +26 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/api/algo/GroupbyDataSet.md +47 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/api/entity/report/FilterInfo.md +12 -12
- package/skills/cosmic-build/knowledge/cosmic/platform/api/entity/report/FilterItemInfo.md +2 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/form-plugin.md +2 -4
- package/skills/cosmic-build/knowledge/cosmic/platform/java-type-contracts.md +11 -2
- package/skills/cosmic-build/knowledge/cosmic/platform/list-plugin.md +18 -14
- package/skills/cosmic-build/knowledge/cosmic/platform/operation-plugin.md +4 -4
- package/skills/cosmic-build/knowledge/cosmic/platform/reportlistdata-plugin.md +17 -9
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/operation/cross-entity-aggregate-writeback.md +2 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/operation/pre-post-operation.md +15 -7
- package/skills/cosmic-build/knowledge/cosmic/platform/sdk/sdk-algo.md +24 -68
- package/skills/cosmic-build/knowledge/cosmic/platform/workflow-plugin.md +2 -7
- package/skills/cosmic-build/references/application-context.md +35 -1
- package/skills/cosmic-build/references/common-reference.md +1 -1
- package/skills/cosmic-build/references/compile-guide.md +55 -68
- package/skills/cosmic-build/references/delivery.md +59 -7
- package/skills/cosmic-build/references/execution-contract.md +38 -0
- package/skills/cosmic-build/references/form-discovery.md +7 -1
- package/skills/cosmic-build/references/java-plugin-delivery.md +32 -162
- package/skills/cosmic-build/references/operation-dispatch.md +17 -0
- package/skills/cosmic-build/references/plugin-handoff-input.md +131 -0
- package/skills/cosmic-build/references/plugin-runtime-routing.md +1 -1
- package/skills/cosmic-build/references/report-filter-contract.md +78 -0
- package/skills/cosmic-build/references/sdk-inspection.md +23 -0
- package/skills/cosmic-build/schemas/data-model-authoring.schema.json +2 -3
- package/skills/cosmic-build/scripts/_http_client.py +55 -55
- package/skills/cosmic-build/scripts/appconfig_load.py +2 -2
- package/skills/cosmic-build/scripts/apply_report_filter_extension.py +39 -0
- package/skills/cosmic-build/scripts/bootstrap_cosmic_context.py +37 -2
- package/skills/cosmic-build/scripts/compile_plugin_source.py +279 -156
- package/skills/cosmic-build/scripts/execution_binding.py +40 -0
- package/skills/cosmic-build/scripts/inspect_platform_sdk.py +169 -0
- package/skills/cosmic-build/scripts/kd_api.py +23 -22
- package/skills/cosmic-build/scripts/kd_auth.py +1 -1
- package/skills/cosmic-build/scripts/kd_env_loader.py +19 -10
- package/skills/cosmic-build/scripts/kd_token_cache.py +2 -2
- package/skills/cosmic-build/scripts/kingscript_sdk_sync.py +350 -0
- package/skills/cosmic-build/scripts/kingscript_source_gate.py +11 -8
- package/skills/cosmic-build/scripts/platform_api_contract.py +246 -11
- package/skills/cosmic-build/scripts/plugin_corpus/build_index.py +403 -0
- package/skills/cosmic-build/scripts/plugin_corpus/jvm_classfile.py +281 -0
- package/skills/cosmic-build/scripts/plugin_corpus/measure_api_usage.py +446 -0
- package/skills/cosmic-build/scripts/plugin_source_gate.py +48 -7
- package/skills/cosmic-build/scripts/plugin_target_sdk.py +45 -0
- package/skills/cosmic-build/scripts/prepare_plugin_handoff.py +493 -47
- package/skills/cosmic-build/scripts/preview_url.py +35 -6
- package/skills/cosmic-build/scripts/query_plugin_handoff.py +250 -0
- package/skills/cosmic-build/scripts/register_plugins.py +28 -2
- package/skills/cosmic-build/scripts/render_output_cards.py +42 -9
- package/skills/cosmic-build/scripts/report_algo_benchmark.py +46 -0
- package/skills/cosmic-build/scripts/run.py +2 -2
- package/skills/cosmic-build/scripts/sync_generated_locale_assets.py +43 -0
- package/skills/cosmic-build/scripts/test/fixtures/ReportSdkCheck.java +64 -0
- package/skills/cosmic-build/scripts/test/fixtures/java_context_booking_native.json +541 -0
- package/skills/cosmic-build/scripts/test/test_add_rule_business_contract.py +85 -14
- package/skills/cosmic-build/scripts/test/test_batch5_drift_governance.py +12 -3
- package/skills/cosmic-build/scripts/test/test_build_meta_order.py +0 -16
- package/skills/cosmic-build/scripts/test/test_cli_continuation.py +87 -0
- package/skills/cosmic-build/scripts/test/test_compile_plugin_source.py +224 -3
- package/skills/cosmic-build/scripts/test/test_control_authoring.py +123 -4
- package/skills/cosmic-build/scripts/test/test_cosmic_sdk_examples.py +141 -0
- package/skills/cosmic-build/scripts/test/test_data_model_contract.py +30 -5
- package/skills/cosmic-build/scripts/test/test_delivery_stage_boundary.py +2 -10
- package/skills/cosmic-build/scripts/test/test_dym_sync_background.py +11 -0
- package/skills/cosmic-build/scripts/test/test_dynamic_form_metadata_only_contract.py +59 -1
- package/skills/cosmic-build/scripts/test/test_guide_skeleton_contract.py +87 -43
- package/skills/cosmic-build/scripts/test/test_inspect_platform_sdk.py +71 -0
- package/skills/cosmic-build/scripts/test/test_kd_api.py +67 -19
- package/skills/cosmic-build/scripts/test/test_kingscript_sdk_sync.py +221 -0
- package/skills/cosmic-build/scripts/test/test_kingscript_source_gate.py +10 -0
- package/skills/cosmic-build/scripts/test/test_list_configuration_closure.py +18 -0
- package/skills/cosmic-build/scripts/test/test_long_session_regressions.py +116 -0
- package/skills/cosmic-build/scripts/test/test_mcp_cli.py +524 -0
- package/skills/cosmic-build/scripts/test/test_modeling_input_recovery.py +141 -0
- package/skills/cosmic-build/scripts/test/test_open_world_cli_catalog.py +36 -2
- package/skills/cosmic-build/scripts/test/test_platform_api_contract.py +161 -1
- package/skills/cosmic-build/scripts/test/test_plugin_business_contract.py +91 -0
- package/skills/cosmic-build/scripts/test/test_plugin_corpus.py +195 -0
- package/skills/cosmic-build/scripts/test/test_plugin_handoff.py +346 -1
- package/skills/cosmic-build/scripts/test/test_plugin_target_sdk.py +70 -0
- package/skills/cosmic-build/scripts/test/test_preview_url.py +44 -1
- package/skills/cosmic-build/scripts/test/test_property_batch.py +22 -0
- package/skills/cosmic-build/scripts/test/test_property_input_discovery.py +13 -11
- package/skills/cosmic-build/scripts/test/test_query_plugin_handoff.py +160 -0
- package/skills/cosmic-build/scripts/test/test_register_plugins.py +31 -1
- package/skills/cosmic-build/scripts/test/test_render_output_cards.py +50 -4
- package/skills/cosmic-build/scripts/test/test_report_business_contract.py +27 -0
- package/skills/cosmic-build/scripts/test/test_report_doc_contract_sync.py +5 -4
- package/skills/cosmic-build/scripts/test/test_report_sdk_optimization.py +36 -0
- package/skills/cosmic-build/scripts/test/test_rule_batch_evidence.py +1 -1
- package/skills/cosmic-build/scripts/test/test_rule_domain_contract.py +20 -0
- package/skills/cosmic-build/scripts/test/test_rule_function_formula.py +16 -6
- package/skills/cosmic-build/scripts/test/test_skill_entry_contract.py +1 -0
- package/skills/cosmic-build/scripts/test/test_test_environment.py +45 -0
- package/skills/cosmic-build/scripts/test/test_verify_plugin_loading.py +79 -0
- package/skills/cosmic-build/scripts/test_environment.py +49 -0
- package/skills/cosmic-build/scripts/verify_plugin_loading.py +71 -0
- package/skills/cosmic-build/skills/cosmic-coding-impl/SKILL.md +86 -162
- package/skills/cosmic-build/skills/cosmic-coding-script/ATTRIBUTION.md +1 -1
- package/skills/cosmic-build/skills/cosmic-coding-script/SKILL.md +45 -14
- package/skills/cosmic-build/skills/cosmic-coding-script/references/kwc-controller-authoring.md +6 -0
- package/skills/cosmic-build/skills/cosmic-coding-script/references/sdk/README.md +29 -19
- package/skills/cosmic-build/skills/cosmic-coding-script/references/sdk/docs//350/204/232/346/234/254SDK.md +3 -4
- package/skills/cosmic-build/skills/cosmic-coding-script/references/sdk/indexes/package-index.md +1 -1
- package/skills/cosmic-build/skills/cosmic-coding-script/references/sdk/strategy.md +27 -18
- package/skills/cosmic-build/skills/cosmic-meta-api/SKILL.md +11 -17
- package/skills/cosmic-build/skills/cosmic-meta-api/apis/ai_meta.md +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/apis/app_menu.md +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/apis/meta_log.md +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/control-authoring.json +45 -4
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/form-control-traits.json +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/layout-ui.json +18 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/menu-publish.json +8 -2
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/property-batch.json +7 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/property-input-index.json +3 -3
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/report-write-contracts.json +1 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/rule-domain.json +37 -5
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/rule-event-contract.json +24 -3
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/run-build-meta.json +61 -12
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/dropdown-menu.schema.json +69 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/report-write.schema.json +2 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/rule-set.schema.json +1 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/rule-write.schema.json +14 -7
- package/skills/cosmic-build/skills/cosmic-meta-api/docs/api-summary.md +2 -2
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/app-action/SKILL.md +6 -3
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/develop/SKILL.md +1 -2
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/export/SKILL.md +5 -6
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/init/SKILL.md +13 -36
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/pdm/SKILL.md +8 -9
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/pdm/scripts/config.json.example +5 -15
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/reset/SKILL.md +6 -6
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/usage/SKILL.md +20 -148
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/verify/SKILL.md +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/build_receipts.py +171 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_apps.py +25 -6
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_controls.py +55 -21
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_fields.py +10 -3
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_formactions.py +63 -6
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_forms.py +59 -2
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_listui.py +8 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_metaops.py +36 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_plugins.py +115 -90
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_properties.py +666 -4
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_rules.py +1415 -87
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/commands.py +6 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/config.py +28 -15
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/execution_errors.py +40 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/formatters.py +32 -5
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/property_policy_contract.py +6 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/report_ops.py +113 -17
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/reset.py +3 -3
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/rule_contract.py +107 -26
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/build_meta_order.py +50 -49
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/cosmic_api.py +856 -150
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/field_decorator.py +47 -14
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_build_receipt_resume.py +374 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_cli_failure_contract.py +24 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_creation_identity_boundary.py +4 -2
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_dropdown_menu_contract.py +382 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_existing_form_ui.py +0 -25
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_field_decorator.py +50 -6
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_functional_group_resolution.py +83 -16
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_identity_template_resolution.py +103 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_plugin_contract.py +28 -2
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_readback_derivation.py +22 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_typed_filters.py +65 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_rule_write_closure.py +1041 -15
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_run_batch_post_build_recovery.py +65 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_run_batch_verification_evidence.py +17 -0
- package/skills/cosmic-build/skills/cosmic-meta-knowledge/generation/api-param-checklist.md +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-knowledge/generation/rule-modeling-guide.md +7 -4
- package/skills/cosmic-build/skills/cosmic-meta-modeling/SKILL.md +61 -13
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/app-menu/SKILL.md +8 -0
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/formtemplate/SKILL.md +5 -0
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/formtemplate/dynamic-form-artifact-schema.md +5 -0
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/report/SKILL.md +21 -9
- package/skills/cosmic-build/skills/cosmic-meta-modeling/references/authoring-entity-graphs.md +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-modeling/references/authoring-storage-constraints.md +5 -3
- package/skills/cosmic-build/skills/cosmic-meta-modeling/references/authoring-ui-composition.md +6 -3
- package/skills/cosmic-build/skills/cosmic-meta-modeling/references/creation-recovery.md +13 -0
- package/skills/cosmic-build/skills/cosmic-meta-modeling/references/parse-core.md +3 -0
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/data_model_contract.py +6 -1
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/data_model_emit.py +135 -87
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/field_type_registry.py +11 -1
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/isv_resolver.py +1 -3
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/report_validator.py +29 -0
- package/skills/cosmic-build/skills/cosmic-meta-modifier/SKILL.md +4 -2
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/context/SKILL.md +2 -2
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/execute/SKILL.md +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/operation/SKILL.md +5 -4
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/operation/operation-write.md +6 -2
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/operation/validation.md +2 -0
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/property/SKILL.md +20 -5
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/property/complex-apis.md +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/property/policy-grammar.md +4 -1
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/report-op/SKILL.md +9 -0
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/SKILL.md +61 -4
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/raw-rule-authoring.md +3 -1
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/rule-actions.md +2 -2
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/rule-reference.md +6 -6
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/state.md +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/unit/SKILL.md +6 -3
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/verify/usage-guide.md +4 -4
- package/skills/cosmic-build/skills/cosmic-meta-modifier/references/list-filter-modification.md +4 -1
- package/skills/cosmic-build/skills/cosmic-meta-ui/SKILL.md +9 -1
- package/skills/cosmic-build/skills/cosmic-meta-ui/modules/button/SKILL.md +3 -0
- package/skills/cosmic-build/skills/mcp-server/SKILL.md +210 -0
- package/skills/cosmic-build/skills/mcp-server/scripts/mcp_cli.py +431 -0
- package/skills/cosmic-build/skills/openapi-gen/SKILL.md +3 -3
- package/skills/cosmic-build/skills/openapi-gen/scripts/api/gen_runner.py +2 -2
- package/skills/cosmic-dev-best-practices/references/bill-dev-convention.md +19 -9
- package/skills/cosmic-dev-best-practices/references/cosmic-meta-api.md +14 -11
- package/skills/cosmic-dev-best-practices/references/design-examples/basedata-design-example.md +1 -1
- package/skills/cosmic-dev-best-practices/references/design-examples/bill-design-example.md +1 -1
- package/skills/cosmic-dev-best-practices/references/elements/AssistantField.md +1 -1
- package/skills/cosmic-dev-best-practices/references/elements/BasedataField.md +2 -2
- package/skills/cosmic-dev-best-practices/references/elements/BasedataPropField.md +3 -3
- package/skills/cosmic-dev-best-practices/references/elements/CreaterField.md +2 -2
- package/skills/cosmic-dev-best-practices/references/elements/CurrencyField.md +2 -2
- package/skills/cosmic-dev-best-practices/references/elements/CustomerField.md +2 -2
- package/skills/cosmic-dev-best-practices/references/elements/FlexField.md +1 -1
- package/skills/cosmic-dev-best-practices/references/elements/MaterielField.md +2 -2
- package/skills/cosmic-dev-best-practices/references/elements/OrgField.md +2 -2
- package/skills/cosmic-dev-best-practices/references/elements/SupplierField.md +2 -2
- package/skills/cosmic-dev-best-practices/references/elements/UnitField.md +1 -1
- package/skills/cosmic-dev-best-practices/references/elements/UserField.md +3 -3
- package/skills/cosmic-dev-best-practices/references/elements/common-field-property-conventions.md +16 -11
- package/skills/cosmic-dev-best-practices/references/layout-control-convention.md +5 -4
- package/skills/erp-analysis/references/delivery-contract.md +4 -2
- package/skills/erp-analysis/templates/AGENTS.template.md +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/.dsh/cosmic/.kd/config.json +0 -21
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
本模块处理已有表单的条件界面行为(`formRule`)和元数据业务规则
|
|
4
4
|
(`bizRule`)。直接执行最小匹配命令;普通修改不创建二次流程、临时规则文件,
|
|
5
5
|
也不追加用户确认步骤。
|
|
6
|
+
`description` 显示在设计器规则列表;专家原始规则使用简短业务语句,领域命令自行生成。
|
|
6
7
|
|
|
7
8
|
修改已有规则条件/阈值时,读取本目录的 `update.md`。
|
|
8
9
|
|
|
@@ -36,6 +37,21 @@
|
|
|
36
37
|
已有 `ensure*` 命令及其 `args`;单个意图仍调用原子 writer。该批次不接受 raw `addRule`、
|
|
37
38
|
操作校验、属性、UI 或插件命令。
|
|
38
39
|
|
|
40
|
+
触发时机是每个规则服务动作的通用属性,不是清空规则特例。已发布的规则服务命令在
|
|
41
|
+
`ensureRuleSet` 对应项的 `args` 中用 `events` 指定新规则的完整时机集合,或用
|
|
42
|
+
`addEvents` 向现有规则追加时机;原子命令分别重复传 `--event` / `--add-event`。
|
|
43
|
+
“创建/新建”是 `ItemAdded`,“值更新”是 `FieldChanged`;“创建后”才是
|
|
44
|
+
`AfterAdded`,“值更新后”才是 `AfterFieldChanged`。`create` / `update`
|
|
45
|
+
也分别表示前两者,不应将“创建”解释为“创建后”。
|
|
46
|
+
不要根据某个示例省略用户要求的时机。已有规则要替换整个集合,需用准确 `ruleId`
|
|
47
|
+
调用 `updateRule`,语义 `ensure*` 不会悄悄删除旧时机。`ensureFieldCalculation`
|
|
48
|
+
与 `ensureConditionalEntryStyle` 不是 RET 服务动作,不接受上述参数。专家
|
|
49
|
+
`addRule` / `updateRule` 的每个已注册 true/false action 也可用语义
|
|
50
|
+
`events` / `addEvents`,由 CLI 统一编译为 `RET`。
|
|
51
|
+
原始动作的 `addEvents` 必须带回读得到的当前 `RET`;未回读时使用领域命令追加。
|
|
52
|
+
`ensureConditionalClientAppearance` 在原有 `--input` 对象内传时机;批量调用则
|
|
53
|
+
把同一个对象放在 `args.request` 中。
|
|
54
|
+
|
|
39
55
|
|
|
40
56
|
计算操作符仅为 `add`、`subtract`、`multiply`、`divide`;这些已发布值不需要检查 contract 或源码。
|
|
41
57
|
|
|
@@ -43,6 +59,9 @@
|
|
|
43
59
|
# 目标 = 左值 × 右值;两个来源变化都会更新目标
|
|
44
60
|
... ensureFieldCalculation --entity "<用户位置>" --target "<目标>" --left "<左值>" --operator multiply --right "<右值>"
|
|
45
61
|
|
|
62
|
+
# 目标十进制小时 =(结束 TimeField - 开始 TimeField)/ 3600.0
|
|
63
|
+
... ensureTimeDifferenceCalculation --entity "<用户位置>" --target "<目标>" --start "<开始时间>" --end "<结束时间>"
|
|
64
|
+
|
|
46
65
|
# 条件成立时锁定/隐藏;命令自动生成反向分支
|
|
47
66
|
... ensureConditionalFieldState --entity "<用户位置>" --condition-field "<条件字段>" --operator equals --value "<值>" --target "<目标>" --behavior lock
|
|
48
67
|
|
|
@@ -66,6 +85,10 @@
|
|
|
66
85
|
任一来源为空或为零时,目标金额回到空值呈现,不残留旧金额;不得为此再追加清空规则。用户要求
|
|
67
86
|
不同于该标准行为时,只有已有发布命令能准确表达才继续,否则单独报告。
|
|
68
87
|
|
|
88
|
+
`ensureTimeDifferenceCalculation` 负责平台 TimeField 的整数秒语义,并固定除以
|
|
89
|
+
`3600.0` 保留小数小时;任一时间为空时清空目标。结果是带符号的同日时间差;结束时间早于
|
|
90
|
+
开始时间若表示次日,必须先解决该业务决定,不能静默加 24 小时。
|
|
91
|
+
|
|
69
92
|
## 函数公式
|
|
70
93
|
|
|
71
94
|
需求中的表达式需要设计器函数(如舍入、文本处理、日期或空值处理)时,读取
|
|
@@ -80,6 +103,8 @@
|
|
|
80
103
|
|
|
81
104
|
- 同一实体内两个数值字段计算目标数值字段:`ensureFieldCalculation`;命令解析业务字段名并
|
|
82
105
|
负责两个来源字段的更新触发器。
|
|
106
|
+
- 同一实体内两个 TimeField 计算十进制小时:`ensureTimeDifferenceCalculation`;命令负责
|
|
107
|
+
`3600.0` 换算、两个来源字段触发器及空输入分支。
|
|
83
108
|
- 带业务条件的同实体二元数值计算:`ensureConditionalCalculation`;由命令负责 FormulaAction、
|
|
84
109
|
RET 及条件/操作数字段触发器。
|
|
85
110
|
- 分录数值字段汇总到表头:直接调用
|
|
@@ -88,6 +113,7 @@
|
|
|
88
113
|
- 条件隐藏/显示或锁定/解锁字段:`ensureConditionalFieldState`;只传一次业务条件,
|
|
89
114
|
由命令生成反向动作。"为空/不为空"用 `--operator empty` / `not-empty` 且不传 `--value`。
|
|
90
115
|
同一条件和行为作用于多个字段时重复传 `--target`,命令创建一条包含完整目标集合的规则。
|
|
116
|
+
新规则的准确触发时机重复传 `--event`;向已有规则追加时机才用 `--add-event`。
|
|
91
117
|
挂载点跟随目标字段所在实体。目标位于分录时,条件字段可以来自该分录或表头。其他跨实体
|
|
92
118
|
组合不预先假定支持,按命令返回的结构化结果处理。
|
|
93
119
|
- 条件设置分录行/单元格样式:`ensureConditionalEntryStyle`,由命令负责
|
|
@@ -112,25 +138,56 @@
|
|
|
112
138
|
- 条件隐藏/显示或锁定/解锁控件:`ensureConditionalControlState`;传准确控件名称/key,
|
|
113
139
|
由命令负责控件身份与反向动作。
|
|
114
140
|
- 同一实体内按条件清空一个或多个字段:`ensureConditionalClearFields`,由命令负责
|
|
115
|
-
分隔符、RET
|
|
141
|
+
分隔符、RET 与实体作用域。多个目标重复传 `--target`,仍是一条规则;
|
|
142
|
+
用户指定的“新建”“字段值变化”等时机可直接传给 `--add-event`。
|
|
116
143
|
- 同一实体内按条件把源字段复制到目标字段:`ensureConditionalCopyFieldValue`,由命令负责
|
|
117
|
-
两组 TakeValueId
|
|
144
|
+
两组 TakeValueId 映射。同一条件、触发时机下要复制多组字段时,向同一命令的
|
|
145
|
+
`--input` 传 `{"conditionField":"...","operator":"...","value":"...","mappings":[{"source":"...","target":"..."}]}`;
|
|
146
|
+
一条服务包含全部映射行。省略 `branch` 即条件成立时执行;只有要求条件不成立时执行,
|
|
147
|
+
才传 `"branch":"false"`。要求不成立时不执行任何服务,就保持 `falseActions` 为空。
|
|
118
148
|
- 按条件携带引用实体属性:`ensureConditionalCarryReferenceProperty`;常见的
|
|
119
149
|
“来源引用变化且不为空”场景省略条件参数即可。命令会解析引用实体上的唯一准确属性,
|
|
120
150
|
缺少 `RefProps` 声明时先通过已验证属性闭环补齐,再写携带规则。
|
|
151
|
+
同一服务带出多个字段时,用其 `--input` 传由 `sourceReference`、
|
|
152
|
+
`sourceProperty`、`target` 组成的 `mappings` 数组;仅在用户要求时附上共同条件。
|
|
153
|
+
默认在条件成立时执行;仅要求条件不成立时执行才用 `"branch":"false"`。
|
|
154
|
+
若引用资料中不存在与用户给定名称或编码唯一匹配的属性,报告命令返回的候选并等待用户指定,
|
|
155
|
+
不把其他属性(如普通“名称”)当作用户要求的属性。`ensureRuleSet` 在该项 `args` 中传同一数组及分支。
|
|
156
|
+
已有拆分规则须指定准确 `ruleId`
|
|
157
|
+
才合并,不能隐式删改无关动作或条件不成立分支。
|
|
158
|
+
如果需要解析命令的 JSON 输出,只读取 stdout;认证提示在 stderr,不能用 `2>&1`
|
|
159
|
+
合并后交给 JSON 解析器。
|
|
121
160
|
- 关联单位的数量字段换算:`ensureQuantityConversion`;由命令负责 UnitConvertDTO JSON 与 RET 249。
|
|
122
161
|
- 领域命令未覆盖的高级公式赋值进入下方专家 raw-rule 逃生口;语义命令失败后不得改走此路由。
|
|
123
|
-
- `
|
|
162
|
+
- 条件清空需要增加“复制后”时,使用 `ensureConditionalClearFields --add-event AfterCopy`;
|
|
163
|
+
其他已支持时机可重复传该参数,CLI 合并已有时机并验证保留结果。
|
|
164
|
+
`ensureRuleSet` 的对应项使用 `addEvents: ["AfterCopy"]`。
|
|
165
|
+
- 按业务条件调用字段值更新服务使用 `ensureConditionalFieldChange`。条件为“不为空”时传
|
|
166
|
+
`--operator not-empty`,不传值。新规则的准确时机重复传 `--event`,向已有规则追加
|
|
167
|
+
时机才用 `--add-event`。回执只证明设计态,后续规则链须在目标环境验证。
|
|
124
168
|
- 没有条件的静态显隐或锁定:使用属性/UI 命令,不创建规则。
|
|
125
169
|
|
|
126
170
|
只有进入下方专家 raw-rule 逃生口并构造动作时读取
|
|
127
171
|
`{ROOT_DIR}/skills/cosmic-meta-modifier/modules/rule/rule-actions.md`;只有条件包含
|
|
128
172
|
不熟悉的专家 raw-rule 语法时读取
|
|
129
173
|
`{ROOT_DIR}/skills/cosmic-meta-knowledge/conventions/rule-expression-syntax.md`。
|
|
130
|
-
两个资源都使用上方完整 `ROOT_DIR` 路径。
|
|
174
|
+
两个资源都使用上方完整 `{ROOT_DIR}` 路径。
|
|
131
175
|
|
|
132
176
|
只有领域规则命令不能表达请求时,读取 [raw-rule-authoring.md](raw-rule-authoring.md) 中的原始规则边界与执行契约。
|
|
133
177
|
|
|
178
|
+
|
|
179
|
+
## 引用带出的准确输入与类型边界
|
|
180
|
+
|
|
181
|
+
单个映射且默认“来源非空”时直接用完整参数,不先查询人员候选记录或猜 JSON:
|
|
182
|
+
|
|
183
|
+
```text
|
|
184
|
+
{python} {ROOT_DIR}/skills/cosmic-meta-api/scripts/cosmic_api.py --stdout ensureConditionalCarryReferenceProperty --app-root "<appRoot>" --form-name "<表单>" --source-reference "<引用字段>" --source-property "<引用实体表头属性>" --target "<目标字段>"
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
多映射的 `--input` 形状为 `{"mappings":[{"sourceReference":"<引用字段>","sourceProperty":"<属性>","target":"<目标>"}]}`,三个选择器均在数组行内。批量未给条件时是 `1 = 1`;需要“来源非空”时指定 `conditionField` 与 `operator: "not-empty"`,不得把两种默认语义混为一谈。
|
|
188
|
+
|
|
189
|
+
writer 负责发现来源属性及其表头/分录归属。已有 `RefProps` 不证明其值为单值;人员部门分录等来源返回集合,即使叶子类型是 `OrgField`。`CARRY_REFERENCE_COLLECTION_UNSUPPORTED` 在写入前阻断:按根入口的 Java 插件路线实现明确的选择/汇总策略,不重试同一属性、不改用 raw rule、不任意取首行。`listDefaultCandidates` 用于选择记录,不用于发现引用属性。
|
|
190
|
+
|
|
134
191
|
## 完成
|
|
135
192
|
|
|
136
193
|
使用 writer 的独立验证与返回的 `data.appRoot` / `data.formNumber`;验证成功后无需
|
|
@@ -40,8 +40,10 @@ key;`addRule` 内部解析并校验 `itemId` 与 `mountPoint`。
|
|
|
40
40
|
`bizRule` 优先使用语义化调用契约:`actionType`、`description`、`expression`、
|
|
41
41
|
`fieldName`、`ret`、`seq`。CLI 会编译为平台 PascalCase 表示,PascalCase 仅作为
|
|
42
42
|
兼容输入。`TakeBaseProAction` 和 `SetEqutionAction` 的 `expression`、`fieldName`
|
|
43
|
-
|
|
43
|
+
各写一组或多组逐行对应的语义映射,由 CLI 补齐嵌套的 `TakeValueId` 类型。不要强塞通用 `RET`,
|
|
44
44
|
默认值按动作类型决定。
|
|
45
|
+
条件清空增加触发时机使用 `ensureConditionalClearFields --add-event`,
|
|
46
|
+
由命令合并;不需要原始动作或手算事件位。
|
|
45
47
|
|
|
46
48
|
## 执行与验证
|
|
47
49
|
|
|
@@ -111,7 +111,7 @@ CLI 会编译 `ClientProperty`、`DisplayStyle`、`RowStyle` 值对象,并完
|
|
|
111
111
|
|------------|------|------|
|
|
112
112
|
| FormulaAction | 同实体公式赋值 | 带条件的二元数值计算使用 `ensureConditionalCalculation`,无条件使用 `ensureFieldCalculation`;常量/函数等高级场景才使用语义输入 `expression: "target = expr"`;生产默认 RET 为 253 |
|
|
113
113
|
| ClearValueAction | 清空字段值 | 普通请求使用 `ensureConditionalClearFields`;存储 `Expression` 为 `field1:field2`,`RET:253` |
|
|
114
|
-
| CallFieldChangeAction |
|
|
114
|
+
| CallFieldChangeAction | 调用单个字段的值更新服务 | `expression` 传目标字段名称或 key;CLI 解析准确 key 并补 RET 773;运行效果需在目标环境验证 |
|
|
115
115
|
|
|
116
116
|
### 3.2 高级动作(含 TakeValueId 列表参数)
|
|
117
117
|
|
|
@@ -170,7 +170,7 @@ FormulaAction 的全部字段必须属于挂载实体。聚合函数和点号跨
|
|
|
170
170
|
}
|
|
171
171
|
```
|
|
172
172
|
|
|
173
|
-
`SetEqutionAction` 的 `expression`、`fieldName`
|
|
173
|
+
`SetEqutionAction` 的 `expression`、`fieldName` 逐行对应;同一服务可配置多组字段映射:
|
|
174
174
|
|
|
175
175
|
```json
|
|
176
176
|
{
|
|
@@ -235,7 +235,7 @@ CLI 会生成 `_Type_: "DisplayStyle"`,保持 `id` 为分录字段业务 key
|
|
|
235
235
|
|-----------|------|---------|
|
|
236
236
|
| `FormulaAction` | 同实体公式赋值 | 带条件二元计算使用 `ensureConditionalCalculation`,无条件使用 `ensureFieldCalculation`;高级语义表达式默认 RET 253 |
|
|
237
237
|
| `ClearValueAction` | 清空字段值 | 普通请求使用 `ensureConditionalClearFields`;平台存储为 `Expression:"field1:field2", RET:253` |
|
|
238
|
-
| `CallFieldChangeAction` |
|
|
238
|
+
| `CallFieldChangeAction` | 调用字段值更新服务 | CLI 校验单个目标并回读设计态;后续规则是否执行需在目标环境验证 |
|
|
239
239
|
|
|
240
240
|
#### 高级动作(含 TakeValueId 列表参数)
|
|
241
241
|
|
|
@@ -310,10 +310,10 @@ CLI 会生成 `_Type_: "DisplayStyle"`,保持 `id` 为分录字段业务 key
|
|
|
310
310
|
|
|
311
311
|
#### 5.3.4 CallFieldChangeAction(触发字段值更新)
|
|
312
312
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
313
|
+
元模型与运行类都只声明一个字符串 `Expression`,运行类将其当作单个字段属性名;
|
|
314
|
+
不存在分号多字段语法。`addRule` / `updateRule` 接受目标字段名称或 key,CLI 解析
|
|
315
|
+
准确 key、补 `RET=773`,并回读已保存的规则。历史平台版本的双观察器测试未观察到
|
|
316
|
+
后续规则链分发,因此回执会把运行态标记为未验证;实际效果须在目标环境检查。
|
|
317
317
|
```
|
|
318
318
|
|
|
319
319
|
---
|
|
@@ -566,4 +566,4 @@ true/falseActions。
|
|
|
566
566
|
| 5 | FillQtyAction | 数量换算 | 根据单位自动计算目标数量 | FillQtyAction |
|
|
567
567
|
| 6 | CallFieldChangeAction | 调用字段值更新服务 | 触发对应业务规则和界面规则 | CallFieldChangeAction |
|
|
568
568
|
|
|
569
|
-
> **注意**:`CallFieldChangeAction`
|
|
569
|
+
> **注意**:`CallFieldChangeAction` 仅验证设计态,既有运行态测试未观察到后续规则链。FormulaAction 受实体作用域约束并拒绝聚合函数;TakeBaseProAction / SetEqutionAction 使用已验证列表结构;FillQtyAction 只通过 `ensureQuantityConversion` 开放。
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# 启用或停用已有规则
|
|
2
2
|
|
|
3
3
|
输入是用户的项目目录、应用名称/编码、表单名称,以及规则的业务条件与动作。即使不知道本地
|
|
4
|
-
应用文件夹,这些信息也足够执行。`ROOT_DIR` 使用宿主提供的 Skill package directory。
|
|
4
|
+
应用文件夹,这些信息也足够执行。`{ROOT_DIR}` 使用宿主提供的 Skill package directory。
|
|
5
5
|
`--project-root` 使用用户明确给出的项目目录;未给出时直接使用宿主的 **Working directory**。
|
|
6
6
|
它是绑定位置,不是需要另行查找或检查目录内容才能确定的身份。
|
|
7
7
|
|
|
@@ -25,7 +25,7 @@ description: app-build 内部执行技能,用于查询和管理已经验证的
|
|
|
25
25
|
listUnits --bizAppId "<appId>"
|
|
26
26
|
resolveUnit --bizAppId "<appId>" --name "<精确一级分组名称>"
|
|
27
27
|
getUnit --bizAppId "<appId>" --unitId "<unitId>"
|
|
28
|
-
addUnit --
|
|
28
|
+
addUnit --app-root "<appRoot>" --name "<名称>" --number "<编码>" [--description "<描述>"] [--seq <1-999>] [--parentUnitId ...]
|
|
29
29
|
updateUnit --bizAppId "<appId>" --unitId "<unitId>" <只传变更字段>
|
|
30
30
|
deleteUnit --bizAppId "<appId>" --unitId "<unitId>"
|
|
31
31
|
```
|
|
@@ -36,8 +36,11 @@ deleteUnit --bizAppId "<appId>" --unitId "<unitId>"
|
|
|
36
36
|
异常返回 `FUNCTIONAL_GROUP_QUERY_FAILED`。用户需要分组树本身或嵌套父分组时才用
|
|
37
37
|
`listUnits`。唯一命中后才能继续,不得编造有业务意义的父分组或编码。
|
|
38
38
|
|
|
39
|
-
`addUnit`
|
|
40
|
-
|
|
39
|
+
`addUnit` 从 `appRoot` 解析所选应用身份;显式应用参数必须与绑定一致。平台要求非空分组编码:
|
|
40
|
+
保留需求给出的编码,命名已委托时自行选择技术编码。描述缺省为分组名称;
|
|
41
|
+
无需向用户询问应用 ID 或可选描述。
|
|
42
|
+
一级分组省略 `--seq` 时,CLI 先回读现有一级分组的真实序号并追加下一整数;子分组
|
|
43
|
+
必须显式传同级 `--seq`。所需回读不可用时写前停止,不猜测顺序。
|
|
41
44
|
|
|
42
45
|
祈使式新增/修改请求已授权所述变更。明确点名精确分组的删除请求视为已经授权;否则
|
|
43
46
|
先展示解析结果并取得确认。禁止级联删除;存在子分组或关联资源时交由用户处理。
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
| 项目 | 要求 |
|
|
31
31
|
|------|------|
|
|
32
32
|
| Python | 3.8+ |
|
|
33
|
-
| config.json |
|
|
34
|
-
| 鉴权 | config.json 中的凭据有效,能正常调用苍穹 OpenAPI |
|
|
33
|
+
| `~/.kd/config.json` | 环境已配置(所选环境的 `client_id`、`client_secret`、`accountId` 已填写) |
|
|
34
|
+
| 鉴权 | `~/.kd/config.json` 中的凭据有效,能正常调用苍穹 OpenAPI |
|
|
35
35
|
|
|
36
36
|
### 脚本位置
|
|
37
37
|
|
|
@@ -344,7 +344,7 @@ WARN 表示命中了已知缺陷库,是苍穹 API 的限制,不是你的操
|
|
|
344
344
|
|
|
345
345
|
### ERROR 时怎么办
|
|
346
346
|
|
|
347
|
-
1. **检查鉴权**:token
|
|
347
|
+
1. **检查鉴权**:token 是否过期,`~/.kd/config.json` 中凭据是否正确
|
|
348
348
|
2. **检查网络**:苍穹服务是否可达(`server.baseUrl`)
|
|
349
349
|
3. **重试验证**(最多 2 次)
|
|
350
350
|
4. 仍失败则检查环境配置
|
|
@@ -360,7 +360,7 @@ A: 清除设计器缓存或刷新页面。验证工具通过 API 直接读取数
|
|
|
360
360
|
A: `--artifact`、`--ops`、`--expected` 参数支持文件路径或内联 JSON。如果传文件路径,确保路径正确(相对于当前工作目录的路径,或绝对路径)。
|
|
361
361
|
|
|
362
362
|
**Q: 报错 `鉴权失败` 或连接超时?**
|
|
363
|
-
A: 检查
|
|
363
|
+
A: 检查 `~/.kd/config.json` 所选环境的 `url`、`client_id`、`client_secret` 是否正确,苍穹服务是否正常运行。
|
|
364
364
|
|
|
365
365
|
**Q: `--expected` 参数在 PowerShell 中如何传递 JSON?**
|
|
366
366
|
A: 用单引号包裹,内部双引号不需要转义:
|
package/skills/cosmic-build/skills/cosmic-meta-modifier/references/list-filter-modification.md
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# 修改已有表单的列表
|
|
2
2
|
|
|
3
|
-
`
|
|
3
|
+
`configureList.commonFilters` 配置列表里的过滤列。设计器“通用控件”分类中的“通用过滤”
|
|
4
|
+
是 `FilterGridAp` 表单控件,应使用 `addControls`。
|
|
5
|
+
|
|
6
|
+
`{ROOT_DIR}` 是 app-build 根入口提供的 **Skill package directory** 绝对路径,必须原样复制。
|
|
4
7
|
禁止根据 profile 根目录、本地化 Base directory、工作目录或本文件路径重新推导。
|
|
5
8
|
|
|
6
9
|
`configureList` 是**局部更新**:只传用户点名要改的字段和属性。未传的列、字段绑定、
|
|
@@ -26,8 +26,9 @@ description: app-build 内部的苍穹表单/列表控件、容器、页签、
|
|
|
26
26
|
| 移动或排序一个已有表头字段、面板或已发布的非分录控件 | `moveFormElement --element ... [--parent ...] [--before ... 或 --after ...]`;同父节点排序省略 parent |
|
|
27
27
|
| 调整分录/明细网格内的字段或列顺序 | `configureEntryGrid --input '{"moves":[{"field":"<字段>","after":"<锚点>"}]}'`;移到锚点前时使用 `before`,未点名分录时省略 `entry` |
|
|
28
28
|
| 新增标题字段组并添加字段 | `addFieldPanel --caption ... [--page <已有页面>]`,再用返回的 panelKey 执行一条 `addField --panel` 批次 |
|
|
29
|
-
| 新增通用控件 | `addControls
|
|
29
|
+
| 新增通用控件 | `addControls --input '{"controls":[{"type":"<控件类型>","name":"<显示名称>"}]}'`;未传父容器时由命令解析实时表单根节点 |
|
|
30
30
|
| 为已验证操作添加可见触发按钮 | `addButton --skipOperation` |
|
|
31
|
+
| 追加、修改、删除或排序工具栏/按钮下拉菜单 | `configureDropdownMenu --element "<按钮>" --input '<意图>'`;命令负责原菜单定位与保留,不以清空重建恢复失败 |
|
|
31
32
|
| 新增设计器高级容器 | `addAdvancedContainer` |
|
|
32
33
|
| 修改字段/控件/容器的单项属性 | 属性入口的 `setProperties` |
|
|
33
34
|
| 修改表单背景 | `setFormBackground` |
|
|
@@ -45,6 +46,13 @@ description: app-build 内部的苍穹表单/列表控件、容器、页签、
|
|
|
45
46
|
|
|
46
47
|
## 语义边界
|
|
47
48
|
|
|
49
|
+
- “通用控件”是设计器分类,不是具体控件类型。用户只说分类时先确认要添加哪一种;
|
|
50
|
+
其中“通用过滤”是 `FilterGridAp` 表单控件,列表过滤条件才走 `configureList`。
|
|
51
|
+
|
|
52
|
+
- 菜单项的显示名称和说明对应 Title、SubTitle,与绑定操作的名称是不同对象。
|
|
53
|
+
显示文字修改使用 configureDropdownMenu;菜单项名称能唯一定位所属按钮时可省略
|
|
54
|
+
--element,否则使用命令返回的按钮候选。
|
|
55
|
+
|
|
48
56
|
- 用户要求的角色必须对应实时类型。页面是 `TabAp` 下的 `TabPageAp`,标题字段组是
|
|
49
57
|
`FieldsetPanelAp`,Flex 只排列子项。基础移动成功只证明位置,不能证明另一种 UI 角色。
|
|
50
58
|
- `EntryFieldAp` 顺序只属于 `configureEntryGrid`,`moveFormElement` 不接收分录列。直接传递
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# mcp-server — 管理金蝶 OpenAPI MCP 服务(open_mcp_ext)
|
|
2
|
+
|
|
3
|
+
## 对话输出规则
|
|
4
|
+
|
|
5
|
+
本技能继承主技能的全局对话输出规则:
|
|
6
|
+
|
|
7
|
+
- 默认静默执行;不要向用户逐步复述中间过程(读取配置、解析参数、翻页等)。
|
|
8
|
+
- 按 system prompt `<language-policy>` 中声明的 `response_language` 汇总结果;
|
|
9
|
+
转述数量、状态与工具名,不要粘贴原始 JSON。
|
|
10
|
+
- 用户确认破坏性操作后直接执行,不要输出「好的」「继续」「收到」等确认性废话。
|
|
11
|
+
|
|
12
|
+
## 概述
|
|
13
|
+
|
|
14
|
+
苍穹 OpenAPI 平台提供 **MCP 服务列表**(元数据 `open_mcp_ext`),每条记录把一个
|
|
15
|
+
已发布 API 注册为 AI 可调用的 MCP 工具。本技能通过平台 `devportal/ai-meta/mcpserver`
|
|
16
|
+
接口族(即 `OpenApiMcpServerFormPlugin` / `OpenApiMcpServerListPlugin` 界面背后的
|
|
17
|
+
同一套服务端逻辑)以对话方式驱动该完整生命周期。
|
|
18
|
+
|
|
19
|
+
适用场景:把 API 注册为 MCP 工具、查询/检索既有 MCP 服务、从 OpenAPI YAML 批量
|
|
20
|
+
导入工具、重新注册失败的服务、下架(unshelve)服务、导出服务用于环境间迁移。
|
|
21
|
+
|
|
22
|
+
## 端到端流程:单据 → API → MCP 工具
|
|
23
|
+
|
|
24
|
+
用户说"把单据做成可对话操作的完整流程"时,指的是这条流水线:
|
|
25
|
+
|
|
26
|
+
1. **单据** —— 用 app-build 主技能交付单据/表单元数据(字段、操作、布局)。
|
|
27
|
+
2. **API** —— openapi-gen 技能为单据操作生成 v2 零码 API(实体服务)。生成的
|
|
28
|
+
`apiIds` 归档到 `{outputRoot}/{appCode}/archive.json`,按单据编号分组。
|
|
29
|
+
若第三方应用需要调用这些 API,用 `newApiAuthInThirdApp` 授权
|
|
30
|
+
(见 `skills/openapi-gen/docs/auth-api.md`,按需冷加载)。
|
|
31
|
+
3. **MCP** —— 本技能:`save --api-type openapi_apilist --api-id <apiId>` 附带
|
|
32
|
+
AI 工具元数据(说明、领域/模块、条件字段)。平台校验 API 存在且开发商标识
|
|
33
|
+
匹配,自动构建工具名并把工具注册到 AI 网关。
|
|
34
|
+
|
|
35
|
+
衔接契约:第 1→2 步传递 `formNumber`(单据编号);第 2→3 步传递归档的 `apiId`
|
|
36
|
+
(即平台 API 列表中的同一 ID)。openapi-gen 产物的 `apiType` 恒为
|
|
37
|
+
`openapi_apilist`;`open_rest_api` 仅用于手写的 v3 RESTful API。要一次审计某张
|
|
38
|
+
单据的流水线状态,运行 `listByForm --form-number <formNumber>`——单次调用同时
|
|
39
|
+
返回该单据的 API 列表(`apis[]`,含 `id`/`number`/`operation`)与已注册的 MCP
|
|
40
|
+
工具(`items[]`),出现在 `apis[]` 但不在 `items[]` 的 API 即未注册。
|
|
41
|
+
|
|
42
|
+
**不要**用本技能创建 API 本身——从实体操作生成 v2 零码 API 属于 openapi-gen 技能
|
|
43
|
+
(`skills/openapi-gen/SKILL.md`,按需冷加载)。
|
|
44
|
+
|
|
45
|
+
## 字段语义(编写指引)
|
|
46
|
+
|
|
47
|
+
| 字段 | 平台键 | 规则 |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| 目标API | `apiId` + `apiType` | 必填。`apiType`:`openapi_apilist`(V2 零码 API)或 `open_rest_api`(V3 RESTful)。目标 API 必须已存在且开发商标识与当前环境匹配(否则平台报 `API_ISV_MISMATCH`)。 |
|
|
50
|
+
| 说明 | `description` | 必填;有长度上限(平台报 `DESCRIPTION_TOO_LONG`)。 |
|
|
51
|
+
| 工具名称 | `toolNameNew` | 可选。缺省时服务端自动构建 `云_应用_方法_路径` 形式的名称;重名自动加后缀。 |
|
|
52
|
+
| 操作类型 | `operateType` | 英文枚举:`query`/`create`/`update`/`save`/`delete`/`submit`/`unsubmit`/`audit`/`unaudit`/`enable`/`disable`/`execute`/`invoke`/`action`/`cancel`(传中文显示名如"保存操作"会报 `OPERATE_TYPE_INVALID`)。 |
|
|
53
|
+
| 所属领域/模块 | `domain` / `module` | 实体必填(`x-ai-domain`、`x-ai-module`)。 |
|
|
54
|
+
| 前置条件/后置效果/错误恢复 | `beforeCondition` / `afterCondition` / `errRecovery` | 长文本(`x-ai-preconditions` / `x-ai-postconditions` / `x-ai-error-recovery`);AI 工具语义字段,每个正式工具都建议填写。 |
|
|
55
|
+
| 是否敏感操作 | — | 由目标 API 派生(delete/unaudit 等),不接受调用方传入。保存敏感 API 的工具时,先向用户明示再确认。 |
|
|
56
|
+
| 自定义参数扩展配置 | `cusParamExtCfg` | 必须是单个 JSON **对象**字符串,如 `{"key": "value"}`(否则 `CUS_PARAM_INVALID`)。 |
|
|
57
|
+
| 服务来源 | `sourceType` | 调用方只读。`custom` = 租户自建;非白名单环境不可修改标品预置服务(`MCP_DEV_DISABLED`)。 |
|
|
58
|
+
|
|
59
|
+
## 注册状态生命周期
|
|
60
|
+
|
|
61
|
+
`register_status`(code → 显示名):`SUCCESS` 已发布 · `FAILED` 失败 · `UNPUBLISH` 待注册 ·
|
|
62
|
+
`UNSHELVES` 下架中 · `UNSHELVESED` 已下架 · `PENDING_UPDATE` 待更新。
|
|
63
|
+
|
|
64
|
+
- 保存会异步把工具注册到 AI 网关:记录先以 `UNPUBLISH`(待注册)创建,后台
|
|
65
|
+
注册完成后变为 `SUCCESS`(已发布)——先用 `get` 复核再判断成败。保存响应携带
|
|
66
|
+
`registerInfo`(`triggered`/`skipped`/`successCount`/`failCount`/`message`);
|
|
67
|
+
无真实 AI 网关的环境报 `skipped: true`,但状态机仍照常流转。
|
|
68
|
+
- `resetStatus`(→ `UNPUBLISH`)只接受 **FAILED 或 UNSHELVESED** 的记录。
|
|
69
|
+
- `unshelves`(→ `UNSHELVES`)只接受 **SUCCESS 或 PENDING_UPDATE** 的记录。
|
|
70
|
+
下架同样是异步的:记录先经 `UNSHELVES`(下架中)再到 `UNSHELVESED`
|
|
71
|
+
(已下架)——用 `get` 轮询确认。
|
|
72
|
+
- `delete` 仅对 **UNSHELVESED**(已下架)的记录成功:删除已发布或下架中的
|
|
73
|
+
记录会报 `DELETE_FAIL`(成功0条)——先下架、等状态到已下架再删。
|
|
74
|
+
`UNSHELVESED` **不是稳定终态**:实测平台后台会把已下架记录重新发布回
|
|
75
|
+
`SUCCESS`,因此「下架 → 轮询 → 删除」必须作为连续序列在同一执行轮内
|
|
76
|
+
一气呵成。
|
|
77
|
+
- 锁定态(下架中的 `UNSHELVES`,以及受限环境中的标品预置记录)拒绝编辑,
|
|
78
|
+
报 `STATUS_LOCKED` / `MCP_DEV_DISABLED`。
|
|
79
|
+
|
|
80
|
+
## CLI 参考
|
|
81
|
+
|
|
82
|
+
所有命令经同一脚本执行,输出单条机器可读 JSON 行
|
|
83
|
+
(退出码 0 成功 / 1 平台失败 / 2 CLI 参数错误):
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
{python} {ROOT_DIR}/skills/mcp-server/scripts/mcp_cli.py <command> [flags]
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
| 命令 | 效果 | 关键 flag |
|
|
90
|
+
|---|---|---|
|
|
91
|
+
| `list` | 读 | `--status`, `--source-type`, `--api-type`, `--tool-name`, `--number`, `--api-number`, `--page-index`, `--page-size` |
|
|
92
|
+
| `listByForm` | 读 | `--form-number` |
|
|
93
|
+
| `get` | 读 | `--id` |
|
|
94
|
+
| `save` | 写 | `--id`(缺省为新增), `--api-type`, `--api-id`, `--description`, `--operate-type`, `--domain`, `--module`, `--before-condition`, `--after-condition`, `--err-recovery`, `--cus-param-ext-cfg`, `--tool-name`, `--source-yaml` |
|
|
95
|
+
| `delete` | 破坏性 | `--ids`, `--confirm` |
|
|
96
|
+
| `importYaml` | 写 | `--file`, `--mode override\|ignore`, `--save-yaml` |
|
|
97
|
+
| `resetStatus` | 破坏性 | `--ids`, `--confirm` |
|
|
98
|
+
| `unshelves` | 破坏性 | `--ids`, `--confirm` |
|
|
99
|
+
| `export` | 读 | `--ids`, `--format dts\|yaml`, `--output` |
|
|
100
|
+
|
|
101
|
+
首次调用前按主技能的启动器探测约定绑定一次 `{python}`。
|
|
102
|
+
|
|
103
|
+
HTTP 方法由平台控制器固定:`listByForm` 与 `get` 为 GET(payload 作为 query
|
|
104
|
+
参数传递),其余 7 个命令为 POST + JSON body。对 GET 端点发 POST 会返回 HTTP
|
|
105
|
+
405 `HttpMethod POST is not allowed`——真实路由不匹配(带 TraceId),不是部署缺失。
|
|
106
|
+
|
|
107
|
+
## 对话流程
|
|
108
|
+
|
|
109
|
+
### 查找 MCP 服务
|
|
110
|
+
1. 用户明确提到某张单据("那张单据的 MCP 工具有哪些")时优先
|
|
111
|
+
`listByForm --form-number <formNumber>`——单次调用返回该单据的 API 与已注册
|
|
112
|
+
工具,直接指出哪些 API 尚未注册。
|
|
113
|
+
2. 其余情况按用户给的条件 `list`(状态/来源/工具名)。total > pageSize 时用
|
|
114
|
+
`--page-index` 翻页。
|
|
115
|
+
3. 需要单条记录的完整字段(条件文本、YAML、网关日志)时运行 `get --id`。
|
|
116
|
+
4. 最多展示 8-10 行,投影成用户语言:工具名、目标 API、状态(显示名)、
|
|
117
|
+
来源、操作类型。
|
|
118
|
+
|
|
119
|
+
### 把 API 注册为 MCP 工具
|
|
120
|
+
1. 用户点名某表单操作(如"把在养批次查询注册成 MCP 工具")时,先解析到
|
|
121
|
+
已存在的 API——`listByForm --form-number <formNumber>` 列出该单据全部 API
|
|
122
|
+
及其 `id`;也可向用户确认或查 openapi-gen 归档。需要 `apiType` + `apiId`。
|
|
123
|
+
2. 询问或起草 AI 工具元数据:说明、领域/模块、操作类型、前置条件、后置效果、
|
|
124
|
+
错误恢复。三个条件字段建议写成模型可读的明确句子——它们是工具被调用时
|
|
125
|
+
模型看到的语义描述。
|
|
126
|
+
3. 不带 `--id` 执行 `save`(新增)。转述 `registerInfo`:`failCount` > 0 表示
|
|
127
|
+
工具已保存但未发布成功——上报网关 message,建议 `resetStatus` 后重存或
|
|
128
|
+
平台侧排查。
|
|
129
|
+
4. 更新时先 `list` 定位记录,再 `save --id <id>` 只传变更字段。
|
|
130
|
+
|
|
131
|
+
### 从 OpenAPI YAML 批量导入
|
|
132
|
+
1. YAML 必须含 OpenAPI `paths` 节点;每个操作生成一个 MCP 工具。操作级
|
|
133
|
+
`x-ai-domain` / `x-ai-module` 覆盖默认值。
|
|
134
|
+
2. `--mode`:`override`(默认)覆盖更新已存在的记录;`ignore` 跳过已存在记录。
|
|
135
|
+
`--save-yaml` 额外把原始 YAML 存入 `source_yaml`。
|
|
136
|
+
3. 汇报拆分结果:`total`、`successCount` / `failCount` / `ignoreCount` 及
|
|
137
|
+
v2/v3 明细,逐条列出失败路径与原因。
|
|
138
|
+
|
|
139
|
+
### 重新注册 / 下架 / 删除
|
|
140
|
+
1. `resetStatus` 仅用于 FAILED/UNSHELVESED 记录;`unshelves` 仅用于
|
|
141
|
+
SUCCESS/PENDING_UPDATE 记录。CLI 返回 `RESET_STATUS_INVALID` /
|
|
142
|
+
`UNSHELVES_INVALID` 时,重新 `list` 并解释记录的实际状态。
|
|
143
|
+
2. 已发布工具的完整删除序列——三步在**同一执行轮**内连续完成、中间不暂停:
|
|
144
|
+
`unshelves --confirm` → 每 2–5 秒用 `get` 轮询直到 `UNSHELVESED`(实测
|
|
145
|
+
15 秒到 1 分钟以上不等)→ 立即 `delete --confirm`。提前删除报
|
|
146
|
+
`DELETE_FAIL`;步骤间暂停会让平台把记录重新发布回 `SUCCESS`,届时整个
|
|
147
|
+
序列须从头再来。删除后用 `get` 验证:返回 `bos.orm.read.dataNotExist`
|
|
148
|
+
即删除成功的证据。
|
|
149
|
+
3. 三者都有 `--confirm` 门禁——缺省时 CLI 直接拒绝。向用户确认记录清单
|
|
150
|
+
(工具名,不只是 id)后再传。
|
|
151
|
+
|
|
152
|
+
### 导出 / 环境间迁移
|
|
153
|
+
1. `export --ids … --format dts` 产出平台 DTS 包格式(已实测通过)。
|
|
154
|
+
`--format yaml` 在当前平台构建上返回成功但 `content` 为空——在平台修复前
|
|
155
|
+
把 yaml 导出视为不可靠,优先用 `dts`。
|
|
156
|
+
2. 在目标环境执行 `importYaml` 导入的是 OpenAPI YAML 文件(dts 是 DTS 包
|
|
157
|
+
产物,不是 importYaml 的输入)。
|
|
158
|
+
|
|
159
|
+
## 错误码(平台侧)
|
|
160
|
+
|
|
161
|
+
| Code | 含义 / 恢复 |
|
|
162
|
+
|---|---|
|
|
163
|
+
| `PARAM_EMPTY` / `API_ID_EMPTY` | 缺少必填参数。 |
|
|
164
|
+
| `API_TYPE_INVALID` | `apiType` 只能是 `openapi_apilist` 或 `open_rest_api`。 |
|
|
165
|
+
| `API_NOT_FOUND` | 目标 API id 不存在——重新解析 API。 |
|
|
166
|
+
| `API_ISV_MISMATCH` | 目标 API 属于其他开发商标识。 |
|
|
167
|
+
| `API_DUPLICATE` | 已有 MCP 记录绑定了该 API。 |
|
|
168
|
+
| `TOOL_NAME_INVALID` | 显式工具名被拒(格式/长度)。 |
|
|
169
|
+
| `STATUS_LOCKED` | 记录下架中(`UNSHELVES`)——等待完成后再编辑。 |
|
|
170
|
+
| `SOURCE_MISMATCH` | 租户环境修改标品预置记录(或反向)被拒。 |
|
|
171
|
+
| `MCP_COUNT_LIMIT` | 租户 MCP 数量达到 `openapi_mcp_maxCount` 上限。 |
|
|
172
|
+
| `MCP_DEV_DISABLED` | 当前环境未开放 MCP 开发。 |
|
|
173
|
+
| `DESCRIPTION_TOO_LONG` / `CUS_PARAM_INVALID` / `OPERATE_TYPE_INVALID` | 字段级校验——修正输入值。 |
|
|
174
|
+
| `RESET_STATUS_INVALID` / `UNSHELVES_INVALID` | 状态前置条件不满足——用 `list` 复核。 |
|
|
175
|
+
| `DELETE_FAIL` | 删除被拒——通常是记录尚未到 `UNSHELVESED`;先下架再重试。 |
|
|
176
|
+
| `bos.orm.read.dataNotExist` | `get` 查询已删除记录——这是删除成功的验证证据,不是故障。 |
|
|
177
|
+
|
|
178
|
+
## 环境兼容性
|
|
179
|
+
|
|
180
|
+
灵基(本技能树)与苍穹平台**独立发版**:灵基先行更新后,可能运行在尚未部署
|
|
181
|
+
`devportal/ai-meta/mcpserver` 接口族的旧苍穹上。CLI 会识别这一情形并返回专用
|
|
182
|
+
错误码 `MCP_API_NOT_DEPLOYED`,而不是裸传输错误:
|
|
183
|
+
|
|
184
|
+
- **网关 NullPointerException 无 TraceId**(HTTP 400,`TraceId:null`):API
|
|
185
|
+
条目已在平台 API 列表登记、但后端控制器缺失——请求未到达业务实例。
|
|
186
|
+
- **404 `Cannot found OpenAPI`**(HTTP 层或 body 级 errorCode 皆算):该环境
|
|
187
|
+
根本没有登记本接口族。
|
|
188
|
+
|
|
189
|
+
触发时,向用户明确说明当前环境尚未携带 MCP 管理 API 族(灵基更新领先于平台),
|
|
190
|
+
并给出手工替代方案:OpenAPI 模块的 MCP 服务界面(元数据 `open_mcp_ext`)覆盖
|
|
191
|
+
同一生命周期。相关但不同的情形:403 该第三方应用…没有此接口访问权限 说明接口族
|
|
192
|
+
**已部署**、只是未授权给所配置的第三方应用——在平台 API 管理列表做「应用授权」
|
|
193
|
+
即可,无需重新部署。
|
|
194
|
+
|
|
195
|
+
绝不要在接口族缺失时改用零码实体 API 直写 `open_mcp_ext` 表来绕过:注册状态机、
|
|
196
|
+
AI 网关注册、数量管控、敏感操作检查全部在服务端控制器里——直写表会让记录进入
|
|
197
|
+
不一致状态。
|
|
198
|
+
|
|
199
|
+
## 边界说明
|
|
200
|
+
|
|
201
|
+
- 其余传输/凭证/网络故障表现为 `PLATFORM_ERROR`,`message` 携带原始原因(网关
|
|
202
|
+
NPE **带** TraceId 的是真实服务端缺陷而非部署缺失——按缺陷上报,不要误判)。
|
|
203
|
+
失败 message 由 CLI 截断(剥离 Java 栈、长度硬上限)以保持单条 JSON 机器
|
|
204
|
+
输出紧凑;TraceId 保留在截断后的部分。
|
|
205
|
+
- 长文本字段经平台多语言表存储,可能在中文中插入空格——写入「各科目」回读为
|
|
206
|
+
「各科 目」,`module` 值也可能带前导空格。回读比对时应做空白归一化,
|
|
207
|
+
不要误判为 CLI 数据损坏。
|
|
208
|
+
- `register_status`、`source_type`、`cloud`、`app`、`log_err` 由服务端维护;
|
|
209
|
+
CLI 没有对应 flag。
|
|
210
|
+
- 平台侧删除不可恢复;用户意图只是"下线"时优先用 `unshelves`。
|