@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.
Files changed (245) hide show
  1. package/cordis.patch.yml +5 -5
  2. package/package.json +1 -1
  3. package/skills/cosmic-build/CHANGELOG.md +4 -0
  4. package/skills/cosmic-build/LOCAL-PATCHES.md +91 -40
  5. package/skills/cosmic-build/SKILL.md +46 -13
  6. package/skills/cosmic-build/assets/platform-report-filters/TypedReportFilterFields.java +169 -0
  7. package/skills/cosmic-build/assets/platform-report-filters/platform.patch +98 -0
  8. package/skills/cosmic-build/assets/report-algo-benchmark/ReportAlgoBenchmark.java +48 -0
  9. package/skills/cosmic-build/assets/report-algo-benchmark/ReportBenchmarkLogFactory.java +7 -0
  10. package/skills/cosmic-build/examples/java-rules/CosmicEntryQuery.java +26 -0
  11. package/skills/cosmic-build/examples/java-rules/CosmicReportAggregation.java +35 -0
  12. package/skills/cosmic-build/examples/java-rules/CosmicReportFilters.java +77 -0
  13. package/skills/cosmic-build/examples/java-rules/CosmicTimeAdapter.java +25 -0
  14. package/skills/cosmic-build/examples/java-rules/CosmicTimeAdapterCheck.java +26 -0
  15. package/skills/cosmic-build/knowledge/cosmic/platform/api/algo/GroupbyDataSet.md +47 -0
  16. package/skills/cosmic-build/knowledge/cosmic/platform/api/entity/report/FilterInfo.md +12 -12
  17. package/skills/cosmic-build/knowledge/cosmic/platform/api/entity/report/FilterItemInfo.md +2 -0
  18. package/skills/cosmic-build/knowledge/cosmic/platform/form-plugin.md +2 -4
  19. package/skills/cosmic-build/knowledge/cosmic/platform/java-type-contracts.md +11 -2
  20. package/skills/cosmic-build/knowledge/cosmic/platform/list-plugin.md +18 -14
  21. package/skills/cosmic-build/knowledge/cosmic/platform/operation-plugin.md +4 -4
  22. package/skills/cosmic-build/knowledge/cosmic/platform/reportlistdata-plugin.md +17 -9
  23. package/skills/cosmic-build/knowledge/cosmic/platform/scenes/operation/cross-entity-aggregate-writeback.md +2 -0
  24. package/skills/cosmic-build/knowledge/cosmic/platform/scenes/operation/pre-post-operation.md +15 -7
  25. package/skills/cosmic-build/knowledge/cosmic/platform/sdk/sdk-algo.md +24 -68
  26. package/skills/cosmic-build/knowledge/cosmic/platform/workflow-plugin.md +2 -7
  27. package/skills/cosmic-build/references/application-context.md +35 -1
  28. package/skills/cosmic-build/references/common-reference.md +1 -1
  29. package/skills/cosmic-build/references/compile-guide.md +55 -68
  30. package/skills/cosmic-build/references/delivery.md +59 -7
  31. package/skills/cosmic-build/references/execution-contract.md +38 -0
  32. package/skills/cosmic-build/references/form-discovery.md +7 -1
  33. package/skills/cosmic-build/references/java-plugin-delivery.md +32 -162
  34. package/skills/cosmic-build/references/operation-dispatch.md +17 -0
  35. package/skills/cosmic-build/references/plugin-handoff-input.md +131 -0
  36. package/skills/cosmic-build/references/plugin-runtime-routing.md +1 -1
  37. package/skills/cosmic-build/references/report-filter-contract.md +78 -0
  38. package/skills/cosmic-build/references/sdk-inspection.md +23 -0
  39. package/skills/cosmic-build/schemas/data-model-authoring.schema.json +2 -3
  40. package/skills/cosmic-build/scripts/_http_client.py +55 -55
  41. package/skills/cosmic-build/scripts/appconfig_load.py +2 -2
  42. package/skills/cosmic-build/scripts/apply_report_filter_extension.py +39 -0
  43. package/skills/cosmic-build/scripts/bootstrap_cosmic_context.py +37 -2
  44. package/skills/cosmic-build/scripts/compile_plugin_source.py +279 -156
  45. package/skills/cosmic-build/scripts/execution_binding.py +40 -0
  46. package/skills/cosmic-build/scripts/inspect_platform_sdk.py +169 -0
  47. package/skills/cosmic-build/scripts/kd_api.py +23 -22
  48. package/skills/cosmic-build/scripts/kd_auth.py +1 -1
  49. package/skills/cosmic-build/scripts/kd_env_loader.py +19 -10
  50. package/skills/cosmic-build/scripts/kd_token_cache.py +2 -2
  51. package/skills/cosmic-build/scripts/kingscript_sdk_sync.py +350 -0
  52. package/skills/cosmic-build/scripts/kingscript_source_gate.py +11 -8
  53. package/skills/cosmic-build/scripts/platform_api_contract.py +246 -11
  54. package/skills/cosmic-build/scripts/plugin_corpus/build_index.py +403 -0
  55. package/skills/cosmic-build/scripts/plugin_corpus/jvm_classfile.py +281 -0
  56. package/skills/cosmic-build/scripts/plugin_corpus/measure_api_usage.py +446 -0
  57. package/skills/cosmic-build/scripts/plugin_source_gate.py +48 -7
  58. package/skills/cosmic-build/scripts/plugin_target_sdk.py +45 -0
  59. package/skills/cosmic-build/scripts/prepare_plugin_handoff.py +493 -47
  60. package/skills/cosmic-build/scripts/preview_url.py +35 -6
  61. package/skills/cosmic-build/scripts/query_plugin_handoff.py +250 -0
  62. package/skills/cosmic-build/scripts/register_plugins.py +28 -2
  63. package/skills/cosmic-build/scripts/render_output_cards.py +42 -9
  64. package/skills/cosmic-build/scripts/report_algo_benchmark.py +46 -0
  65. package/skills/cosmic-build/scripts/run.py +2 -2
  66. package/skills/cosmic-build/scripts/sync_generated_locale_assets.py +43 -0
  67. package/skills/cosmic-build/scripts/test/fixtures/ReportSdkCheck.java +64 -0
  68. package/skills/cosmic-build/scripts/test/fixtures/java_context_booking_native.json +541 -0
  69. package/skills/cosmic-build/scripts/test/test_add_rule_business_contract.py +85 -14
  70. package/skills/cosmic-build/scripts/test/test_batch5_drift_governance.py +12 -3
  71. package/skills/cosmic-build/scripts/test/test_build_meta_order.py +0 -16
  72. package/skills/cosmic-build/scripts/test/test_cli_continuation.py +87 -0
  73. package/skills/cosmic-build/scripts/test/test_compile_plugin_source.py +224 -3
  74. package/skills/cosmic-build/scripts/test/test_control_authoring.py +123 -4
  75. package/skills/cosmic-build/scripts/test/test_cosmic_sdk_examples.py +141 -0
  76. package/skills/cosmic-build/scripts/test/test_data_model_contract.py +30 -5
  77. package/skills/cosmic-build/scripts/test/test_delivery_stage_boundary.py +2 -10
  78. package/skills/cosmic-build/scripts/test/test_dym_sync_background.py +11 -0
  79. package/skills/cosmic-build/scripts/test/test_dynamic_form_metadata_only_contract.py +59 -1
  80. package/skills/cosmic-build/scripts/test/test_guide_skeleton_contract.py +87 -43
  81. package/skills/cosmic-build/scripts/test/test_inspect_platform_sdk.py +71 -0
  82. package/skills/cosmic-build/scripts/test/test_kd_api.py +67 -19
  83. package/skills/cosmic-build/scripts/test/test_kingscript_sdk_sync.py +221 -0
  84. package/skills/cosmic-build/scripts/test/test_kingscript_source_gate.py +10 -0
  85. package/skills/cosmic-build/scripts/test/test_list_configuration_closure.py +18 -0
  86. package/skills/cosmic-build/scripts/test/test_long_session_regressions.py +116 -0
  87. package/skills/cosmic-build/scripts/test/test_mcp_cli.py +524 -0
  88. package/skills/cosmic-build/scripts/test/test_modeling_input_recovery.py +141 -0
  89. package/skills/cosmic-build/scripts/test/test_open_world_cli_catalog.py +36 -2
  90. package/skills/cosmic-build/scripts/test/test_platform_api_contract.py +161 -1
  91. package/skills/cosmic-build/scripts/test/test_plugin_business_contract.py +91 -0
  92. package/skills/cosmic-build/scripts/test/test_plugin_corpus.py +195 -0
  93. package/skills/cosmic-build/scripts/test/test_plugin_handoff.py +346 -1
  94. package/skills/cosmic-build/scripts/test/test_plugin_target_sdk.py +70 -0
  95. package/skills/cosmic-build/scripts/test/test_preview_url.py +44 -1
  96. package/skills/cosmic-build/scripts/test/test_property_batch.py +22 -0
  97. package/skills/cosmic-build/scripts/test/test_property_input_discovery.py +13 -11
  98. package/skills/cosmic-build/scripts/test/test_query_plugin_handoff.py +160 -0
  99. package/skills/cosmic-build/scripts/test/test_register_plugins.py +31 -1
  100. package/skills/cosmic-build/scripts/test/test_render_output_cards.py +50 -4
  101. package/skills/cosmic-build/scripts/test/test_report_business_contract.py +27 -0
  102. package/skills/cosmic-build/scripts/test/test_report_doc_contract_sync.py +5 -4
  103. package/skills/cosmic-build/scripts/test/test_report_sdk_optimization.py +36 -0
  104. package/skills/cosmic-build/scripts/test/test_rule_batch_evidence.py +1 -1
  105. package/skills/cosmic-build/scripts/test/test_rule_domain_contract.py +20 -0
  106. package/skills/cosmic-build/scripts/test/test_rule_function_formula.py +16 -6
  107. package/skills/cosmic-build/scripts/test/test_skill_entry_contract.py +1 -0
  108. package/skills/cosmic-build/scripts/test/test_test_environment.py +45 -0
  109. package/skills/cosmic-build/scripts/test/test_verify_plugin_loading.py +79 -0
  110. package/skills/cosmic-build/scripts/test_environment.py +49 -0
  111. package/skills/cosmic-build/scripts/verify_plugin_loading.py +71 -0
  112. package/skills/cosmic-build/skills/cosmic-coding-impl/SKILL.md +86 -162
  113. package/skills/cosmic-build/skills/cosmic-coding-script/ATTRIBUTION.md +1 -1
  114. package/skills/cosmic-build/skills/cosmic-coding-script/SKILL.md +45 -14
  115. package/skills/cosmic-build/skills/cosmic-coding-script/references/kwc-controller-authoring.md +6 -0
  116. package/skills/cosmic-build/skills/cosmic-coding-script/references/sdk/README.md +29 -19
  117. package/skills/cosmic-build/skills/cosmic-coding-script/references/sdk/docs//350/204/232/346/234/254SDK.md +3 -4
  118. package/skills/cosmic-build/skills/cosmic-coding-script/references/sdk/indexes/package-index.md +1 -1
  119. package/skills/cosmic-build/skills/cosmic-coding-script/references/sdk/strategy.md +27 -18
  120. package/skills/cosmic-build/skills/cosmic-meta-api/SKILL.md +11 -17
  121. package/skills/cosmic-build/skills/cosmic-meta-api/apis/ai_meta.md +1 -1
  122. package/skills/cosmic-build/skills/cosmic-meta-api/apis/app_menu.md +1 -1
  123. package/skills/cosmic-build/skills/cosmic-meta-api/apis/meta_log.md +1 -1
  124. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/control-authoring.json +45 -4
  125. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/form-control-traits.json +1 -1
  126. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/layout-ui.json +18 -0
  127. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/menu-publish.json +8 -2
  128. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/property-batch.json +7 -0
  129. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/property-input-index.json +3 -3
  130. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/report-write-contracts.json +1 -0
  131. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/rule-domain.json +37 -5
  132. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/rule-event-contract.json +24 -3
  133. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/run-build-meta.json +61 -12
  134. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/dropdown-menu.schema.json +69 -0
  135. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/report-write.schema.json +2 -1
  136. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/rule-set.schema.json +1 -0
  137. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/rule-write.schema.json +14 -7
  138. package/skills/cosmic-build/skills/cosmic-meta-api/docs/api-summary.md +2 -2
  139. package/skills/cosmic-build/skills/cosmic-meta-api/modules/app-action/SKILL.md +6 -3
  140. package/skills/cosmic-build/skills/cosmic-meta-api/modules/develop/SKILL.md +1 -2
  141. package/skills/cosmic-build/skills/cosmic-meta-api/modules/export/SKILL.md +5 -6
  142. package/skills/cosmic-build/skills/cosmic-meta-api/modules/init/SKILL.md +13 -36
  143. package/skills/cosmic-build/skills/cosmic-meta-api/modules/pdm/SKILL.md +8 -9
  144. package/skills/cosmic-build/skills/cosmic-meta-api/modules/pdm/scripts/config.json.example +5 -15
  145. package/skills/cosmic-build/skills/cosmic-meta-api/modules/reset/SKILL.md +6 -6
  146. package/skills/cosmic-build/skills/cosmic-meta-api/modules/usage/SKILL.md +20 -148
  147. package/skills/cosmic-build/skills/cosmic-meta-api/modules/verify/SKILL.md +1 -1
  148. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/build_receipts.py +171 -0
  149. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_apps.py +25 -6
  150. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_controls.py +55 -21
  151. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_fields.py +10 -3
  152. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_formactions.py +63 -6
  153. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_forms.py +59 -2
  154. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_listui.py +8 -0
  155. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_metaops.py +36 -1
  156. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_plugins.py +115 -90
  157. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_properties.py +666 -4
  158. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_rules.py +1415 -87
  159. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/commands.py +6 -1
  160. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/config.py +28 -15
  161. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/execution_errors.py +40 -0
  162. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/formatters.py +32 -5
  163. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/property_policy_contract.py +6 -0
  164. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/report_ops.py +113 -17
  165. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/reset.py +3 -3
  166. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/rule_contract.py +107 -26
  167. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/build_meta_order.py +50 -49
  168. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/cosmic_api.py +856 -150
  169. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/field_decorator.py +47 -14
  170. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_build_receipt_resume.py +374 -0
  171. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_cli_failure_contract.py +24 -0
  172. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_creation_identity_boundary.py +4 -2
  173. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_dropdown_menu_contract.py +382 -0
  174. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_existing_form_ui.py +0 -25
  175. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_field_decorator.py +50 -6
  176. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_functional_group_resolution.py +83 -16
  177. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_identity_template_resolution.py +103 -0
  178. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_plugin_contract.py +28 -2
  179. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_readback_derivation.py +22 -0
  180. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_typed_filters.py +65 -0
  181. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_rule_write_closure.py +1041 -15
  182. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_run_batch_post_build_recovery.py +65 -0
  183. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_run_batch_verification_evidence.py +17 -0
  184. package/skills/cosmic-build/skills/cosmic-meta-knowledge/generation/api-param-checklist.md +1 -1
  185. package/skills/cosmic-build/skills/cosmic-meta-knowledge/generation/rule-modeling-guide.md +7 -4
  186. package/skills/cosmic-build/skills/cosmic-meta-modeling/SKILL.md +61 -13
  187. package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/app-menu/SKILL.md +8 -0
  188. package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/formtemplate/SKILL.md +5 -0
  189. package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/formtemplate/dynamic-form-artifact-schema.md +5 -0
  190. package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/report/SKILL.md +21 -9
  191. package/skills/cosmic-build/skills/cosmic-meta-modeling/references/authoring-entity-graphs.md +1 -1
  192. package/skills/cosmic-build/skills/cosmic-meta-modeling/references/authoring-storage-constraints.md +5 -3
  193. package/skills/cosmic-build/skills/cosmic-meta-modeling/references/authoring-ui-composition.md +6 -3
  194. package/skills/cosmic-build/skills/cosmic-meta-modeling/references/creation-recovery.md +13 -0
  195. package/skills/cosmic-build/skills/cosmic-meta-modeling/references/parse-core.md +3 -0
  196. package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/data_model_contract.py +6 -1
  197. package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/data_model_emit.py +135 -87
  198. package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/field_type_registry.py +11 -1
  199. package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/isv_resolver.py +1 -3
  200. package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/report_validator.py +29 -0
  201. package/skills/cosmic-build/skills/cosmic-meta-modifier/SKILL.md +4 -2
  202. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/context/SKILL.md +2 -2
  203. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/execute/SKILL.md +1 -1
  204. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/operation/SKILL.md +5 -4
  205. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/operation/operation-write.md +6 -2
  206. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/operation/validation.md +2 -0
  207. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/property/SKILL.md +20 -5
  208. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/property/complex-apis.md +1 -1
  209. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/property/policy-grammar.md +4 -1
  210. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/report-op/SKILL.md +9 -0
  211. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/SKILL.md +61 -4
  212. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/raw-rule-authoring.md +3 -1
  213. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/rule-actions.md +2 -2
  214. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/rule-reference.md +6 -6
  215. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/state.md +1 -1
  216. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/unit/SKILL.md +6 -3
  217. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/verify/usage-guide.md +4 -4
  218. package/skills/cosmic-build/skills/cosmic-meta-modifier/references/list-filter-modification.md +4 -1
  219. package/skills/cosmic-build/skills/cosmic-meta-ui/SKILL.md +9 -1
  220. package/skills/cosmic-build/skills/cosmic-meta-ui/modules/button/SKILL.md +3 -0
  221. package/skills/cosmic-build/skills/mcp-server/SKILL.md +210 -0
  222. package/skills/cosmic-build/skills/mcp-server/scripts/mcp_cli.py +431 -0
  223. package/skills/cosmic-build/skills/openapi-gen/SKILL.md +3 -3
  224. package/skills/cosmic-build/skills/openapi-gen/scripts/api/gen_runner.py +2 -2
  225. package/skills/cosmic-dev-best-practices/references/bill-dev-convention.md +19 -9
  226. package/skills/cosmic-dev-best-practices/references/cosmic-meta-api.md +14 -11
  227. package/skills/cosmic-dev-best-practices/references/design-examples/basedata-design-example.md +1 -1
  228. package/skills/cosmic-dev-best-practices/references/design-examples/bill-design-example.md +1 -1
  229. package/skills/cosmic-dev-best-practices/references/elements/AssistantField.md +1 -1
  230. package/skills/cosmic-dev-best-practices/references/elements/BasedataField.md +2 -2
  231. package/skills/cosmic-dev-best-practices/references/elements/BasedataPropField.md +3 -3
  232. package/skills/cosmic-dev-best-practices/references/elements/CreaterField.md +2 -2
  233. package/skills/cosmic-dev-best-practices/references/elements/CurrencyField.md +2 -2
  234. package/skills/cosmic-dev-best-practices/references/elements/CustomerField.md +2 -2
  235. package/skills/cosmic-dev-best-practices/references/elements/FlexField.md +1 -1
  236. package/skills/cosmic-dev-best-practices/references/elements/MaterielField.md +2 -2
  237. package/skills/cosmic-dev-best-practices/references/elements/OrgField.md +2 -2
  238. package/skills/cosmic-dev-best-practices/references/elements/SupplierField.md +2 -2
  239. package/skills/cosmic-dev-best-practices/references/elements/UnitField.md +1 -1
  240. package/skills/cosmic-dev-best-practices/references/elements/UserField.md +3 -3
  241. package/skills/cosmic-dev-best-practices/references/elements/common-field-property-conventions.md +16 -11
  242. package/skills/cosmic-dev-best-practices/references/layout-control-convention.md +5 -4
  243. package/skills/erp-analysis/references/delivery-contract.md +4 -2
  244. package/skills/erp-analysis/templates/AGENTS.template.md +1 -1
  245. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/.dsh/cosmic/.kd/config.json +0 -21
@@ -0,0 +1,69 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "app-build://cosmic-meta-api/dropdown-menu.schema.json",
4
+ "title": "Dropdown menu edit intent",
5
+ "type": "object",
6
+ "properties": {
7
+ "append": {"type": "array", "items": {"$ref": "#/$defs/item"}},
8
+ "update": {"type": "array", "items": {"$ref": "#/$defs/itemPatch"}},
9
+ "remove": {"type": "array", "items": {"type": ["string", "object"]}},
10
+ "order": {"type": "array", "items": {"type": "string"}, "description": "Place these selected items first in this order; all unmentioned items follow in their original relative order."},
11
+ "moves": {"type": "array", "items": {"$ref": "#/$defs/move"}}
12
+ },
13
+ "minProperties": 1,
14
+ "additionalProperties": false,
15
+ "$defs": {
16
+ "item": {
17
+ "type": "object",
18
+ "required": ["key"],
19
+ "properties": {
20
+ "key": {"type": "string", "minLength": 1, "description": "New key for append; exact existing key or unique title/operation key for update. Existing identity is preserved."},
21
+ "title": {"type": "string"},
22
+ "subtitle": {"type": "string"},
23
+ "operation": {"type": "string"},
24
+ "background": {"type": "string"},
25
+ "icon": {"type": "string", "description": "Actual platform ImageKey resource, not an invented icon name"},
26
+ "switch": {"type": "boolean"},
27
+ "theme": {"type": "boolean"},
28
+ "merge": {"type": "boolean"},
29
+ "lock": {"type": ["string", "array"]},
30
+ "visible": {"type": ["string", "array"]},
31
+ "uploadable": {"type": "boolean"},
32
+ "uploadConfig": {
33
+ "type": "object",
34
+ "properties": {
35
+ "multiple": {"type": "boolean"},
36
+ "suffix": {"type": "string"},
37
+ "limitCount": {"type": "integer", "minimum": 0},
38
+ "limitSize": {"type": "integer", "minimum": 0},
39
+ "url": {"type": "string"},
40
+ "accept": {"type": "string", "description": "Alias for suffix"},
41
+ "maxFiles": {"type": "integer", "minimum": 0, "description": "Alias for limitCount"},
42
+ "maxFileSize": {"type": "integer", "minimum": 0, "description": "Alias for limitSize, same platform unit"}
43
+ },
44
+ "additionalProperties": false
45
+ }
46
+ },
47
+ "additionalProperties": false
48
+ },
49
+ "itemPatch": {
50
+ "allOf": [{"$ref": "#/$defs/item"}]
51
+ },
52
+ "move": {
53
+ "type": "object",
54
+ "required": ["key"],
55
+ "properties": {
56
+ "key": {"type": "string"},
57
+ "before": {"type": "string"},
58
+ "after": {"type": "string"}
59
+ },
60
+ "oneOf": [{"required": ["before"]}, {"required": ["after"]}],
61
+ "additionalProperties": false
62
+ }
63
+ },
64
+ "examples": [{
65
+ "append": [{"key": "bar_print_pdf", "title": "打印 PDF", "operation": "printpdf", "visible": ["查看", "提交", "审核"]}],
66
+ "update": [{"key": "bar_print_setting", "subtitle": "打印配置"}],
67
+ "moves": [{"key": "bar_print_setting", "before": "bar_print_pdf"}]
68
+ }]
69
+ }
@@ -98,8 +98,9 @@
98
98
  "displayName": {"type": "string", "minLength": 1},
99
99
  "compare": {
100
100
  "enum": ["=", "in", "between"],
101
- "description": "Selects the filter control shape. 'between' requires a date/datetime value domain."
101
+ "description": "Query comparison (=, in, between), not an arbitrary control-type selector. The platform source may create DateRangeField for between and TextField otherwise; verify actual deployment output. This input cannot request DateField, MulBaseDataField or ComboListField."
102
102
  },
103
+ "source": {"type": "object", "additionalProperties": false, "required": ["formNumber", "fieldKey"], "properties": {"formNumber": {"$ref": "#/$defs/identifier"}, "fieldKey": {"$ref": "#/$defs/identifier"}}, "description": "Verified source form and field. Uses the ReportFilters.typed platform extension; copies its native editor type, reference, enum and numeric/date options. between on a date creates DateRangeField. Legacy platforms fail closed; no TextField fallback."},
103
104
  "defaultValue": {},
104
105
  "mustInput": {
105
106
  "type": "boolean",
@@ -20,6 +20,7 @@
20
20
  "command": {
21
21
  "enum": [
22
22
  "ensureFieldCalculation",
23
+ "ensureTimeDifferenceCalculation",
23
24
  "ensureConditionalFieldState",
24
25
  "ensureConditionalEntryStyle",
25
26
  "ensureConditionalControlState",
@@ -9,8 +9,7 @@
9
9
  "ruleType",
10
10
  "description",
11
11
  "preDescription",
12
- "preCondition",
13
- "trueActions"
12
+ "preCondition"
14
13
  ],
15
14
  "properties": {
16
15
  "ruleType": {"enum": ["bizRule", "formRule"]},
@@ -23,7 +22,7 @@
23
22
  "preCondition": {"type": "string", "minLength": 1, "description": "Use 1=1 only when the requested rule is unconditional."},
24
23
  "triggerField": {"type": "string", "description": "Optional Display name(fieldKey) values separated by semicolons."},
25
24
  "enabled": {"type": "boolean", "default": true},
26
- "trueActions": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/action"}},
25
+ "trueActions": {"type": "array", "items": {"$ref": "#/$defs/action"}},
27
26
  "falseActions": {"type": "array", "items": {"$ref": "#/$defs/action"}}
28
27
  },
29
28
  "oneOf": [
@@ -31,6 +30,10 @@
31
30
  {"required": ["clientMount"]},
32
31
  {"required": ["itemId", "mountPoint"]}
33
32
  ],
33
+ "anyOf": [
34
+ {"required": ["trueActions"], "properties": {"trueActions": {"minItems": 1}}},
35
+ {"required": ["falseActions"], "properties": {"falseActions": {"minItems": 1}}}
36
+ ],
34
37
  "allOf": [
35
38
  {
36
39
  "if": {"properties": {"ruleType": {"const": "bizRule"}}},
@@ -87,14 +90,16 @@
87
90
  "properties": {
88
91
  "actionType": {"enum": ["FormulaAction", "ClearValueAction", "CallFieldChangeAction", "TakeBaseProAction", "SetEqutionAction"], "description": "推荐的语义调用键;CLI 会编译为 ActionType。"},
89
92
  "ActionType": {"enum": ["FormulaAction", "ClearValueAction", "CallFieldChangeAction", "TakeBaseProAction", "SetEqutionAction"]},
90
- "expression": {"description": "推荐的语义调用键。Formula/Clear/CallFieldChange 使用字符串;TakeBasePro/SetEqution 使用只含一个映射对象的数组。"},
93
+ "expression": {"description": "推荐的语义调用键。Formula/Clear/CallFieldChange 使用字符串;TakeBasePro/SetEqution 使用一组或多组有序映射对象。"},
91
94
  "Expression": {},
92
- "fieldName": {"description": "TakeBasePro/SetEqution 单组显示名映射的推荐语义调用键。"},
95
+ "fieldName": {"description": "TakeBasePro/SetEqution 的显示名映射数组,与 expression 逐行对应。"},
93
96
  "FieldName": {},
94
97
  "description": {"type": "string"},
95
98
  "Description": {"type": "string"},
96
- "ret": {"type": "integer", "description": "可选动作事件掩码;CallFieldChangeAction 已按运行态证据阻断,不得编写。"},
99
+ "ret": {"type": "integer", "description": "可选动作事件掩码;CallFieldChangeAction 默认 773。元数据回读不证明运行态分发。"},
97
100
  "RET": {"type": "integer", "description": "可选动作事件掩码的兼容别名。"},
101
+ "events": {"type": "array", "minItems": 1, "items": {"type": "string"}, "description": "为任一已注册业务服务动作指定完整触发时机,由 CLI 编译为 RET。"},
102
+ "addEvents": {"type": "array", "minItems": 1, "items": {"type": "string"}, "description": "向显式传入的当前 RET 追加时机;不使用隐式默认值。"},
98
103
  "seq": {"type": "integer", "minimum": 1},
99
104
  "Seq": {"type": "integer", "minimum": 1}
100
105
  },
@@ -120,7 +125,9 @@
120
125
  },
121
126
  "clientProperties": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/clientProperty"}},
122
127
  "rowStyles": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/rowStyle"}},
123
- "RET": {"type": "integer", "default": 251}
128
+ "RET": {"type": "integer", "default": 251},
129
+ "events": {"type": "array", "minItems": 1, "items": {"type": "string"}, "description": "为任一已注册界面服务动作指定完整触发时机,由 CLI 编译为 RET。"},
130
+ "addEvents": {"type": "array", "minItems": 1, "items": {"type": "string"}, "description": "向显式传入的当前 RET 追加时机;不使用隐式默认值。"}
124
131
  },
125
132
  "additionalProperties": true,
126
133
  "not": {
@@ -346,8 +346,8 @@ PDM 技能访问**两套独立的苍穹环境**,各自独立鉴权:
346
346
 
347
347
  | 环境 | 说明 | 使用的 API | 凭据配置文件 |
348
348
  |------|------|-----------|-------------|
349
- | **server**(设计期苍穹) | 提供设计期实体元数据 | entityMeta | `scripts/config.json`(经 `_cosmicConfig`) |
350
- | **datamodel**(数据模型环境) | PDM Diff 对比 + 脚本生成 | modelCode / save / submit | `pdm-automation/config.json` → **`datamodel` 块(五项必填,不继承主 config)** |
349
+ | **server**(设计期苍穹) | 提供设计期实体元数据 | entityMeta | `~/.kd/config.json` 默认环境(经 `kd_env_loader.py`) |
350
+ | **datamodel**(数据模型环境) | PDM Diff 对比 + 脚本生成 | modelCode / save / submit | `~/.kd/config.json` 的 **`pdm` section(留空字段继承默认环境)** |
351
351
 
352
352
  两套环境均使用相同的 OAuth2 `getToken` 鉴权流程(见 `pdm_client.py`)。
353
353
 
@@ -43,15 +43,18 @@ description: app-build 内部执行技能,用于查询、扩展、修改、启
43
43
  验证成功后才用扩展应用的 `appCode`、`appId`、`appName`、`cosmicAppName` 替换
44
44
  当前 `archive.json` 身份,同步 `context.json`,并使旧 workspace 分组失效。
45
45
  4. `updateApp` 只传用户明确要求修改的字段,不得清空或重写未提及属性。
46
- 5. `publishApp` 只把明确的启用/禁用意图映射为 `--action enable|disable`。
46
+ 5. `publishApp` 把明确的启用/禁用意图映射为 `--action enable|disable`。用户明确要求发布菜单,
47
+ 也授权在最终菜单树回读通过后启用同一个已验证应用;不授权禁用或操作其他应用。
47
48
  6. 明确点名已验证应用的删除请求视为已经授权;否则先展示精确应用并取得确认。平台
48
49
  删除后禁止删除本地项目文件。
49
50
  7. 只写一次并解析 JSON;进程退出码为零或终端打印“成功”不能证明业务成功。
50
- 8. `extendApp` 只有返回 `identitySynced=true` 且 `verifiedApp` 与扩展应用一致时才算
51
+ 8. `publishApp --action enable` 若平台明确回复应用已启用,在写入前准确核对身份后视为无变化;
52
+ 不重复调用。其他失败仍按失败处理。
53
+ 9. `extendApp` 只有返回 `identitySynced=true` 且 `verifiedApp` 与扩展应用一致时才算
51
54
  完成;禁止再单独调用 `getApp` 或手改 archive/context。其他写入使用 `getApp`
52
55
  比较变更字段/状态,或用不存在结果证明删除。回读不可用或结论不明确时返回
53
56
  `unknown_after_write`,禁止重试。
54
- 9. 采用 `extendPreCheck` 选出的已有扩展应用时,调用一次
57
+ 10. 采用 `extendPreCheck` 选出的已有扩展应用时,调用一次
55
58
  `getApp --app-root "<appRoot>" --sync-identity`;同样必须取得
56
59
  `identitySynced=true` 后才能继续写表单。
57
60
 
@@ -47,7 +47,6 @@
47
47
 
48
48
  ## 如何修改环境配置
49
49
 
50
- 所有环境相关参数(服务地址、鉴权凭据、租户信息)统一在 `scripts/config.json` 中维护。
51
- 修改配置后无需改动任何接口文档或示例代码,示例代码通过引用配置变量保持一致。
50
+ 所有环境相关参数(服务地址、鉴权凭据、租户信息)由 `scripts/kd_env_loader.py` 从 `~/.kd/config.json` 中选定的环境解析——平台级配置是唯一来源。禁止在技能目录内创建或编辑明文 `config.json`;配置的变更与恢复一律走 init/reset 入口。工具链写入的密钥以密文(`kdsec:`)存储,绝不明文落盘。
52
51
 
53
52
  展示用缓存(ISV/业务云信息)在 `RUNTIME_DIR/config.md`,由脚本自动维护,无需手动编辑。
@@ -5,12 +5,12 @@ description: app-build 内部执行技能,把已有苍穹表单的 DYM/DYMX
5
5
 
6
6
  # DYM 元数据同步
7
7
 
8
- 仅在 app-build 已初始化已有应用后使用。本模块只负责 `syncDym`;表单 zip 导入导出
8
+ 复用调用命令返回的已验证应用绑定。本模块只负责 `syncDym`;表单 zip 导入导出
9
9
  属于 `form-action`。
10
10
 
11
- 普通 app-build 交付不会在每条修改后调用本模块。`render_output_cards.py` 负责会话边界:全部
12
- 平台写入和读回完成后,只筛选本轮目标中本地已经存在 `.dym` 的表单,并执行唯一一次批量
13
- `syncDym --existing-only`。本地不存在 DYM 表示有意跳过,不能据此创建新文件。
11
+ 普通 app-build 交付不会在每条修改后调用本模块。会话边界的源码同步遵循
12
+ [交付契约](../../../../references/delivery.md):收口器为本轮表单创建同步请求,
13
+ 创建缺失的 DYM/DYMX 文件并更新已有文件。
14
14
 
15
15
  相对本模块,`cosmic_api` 位于 `../../scripts/cosmic_api.py`。
16
16
 
@@ -27,8 +27,7 @@ description: app-build 内部执行技能,把已有苍穹表单的 DYM/DYMX
27
27
  {python} {cosmic_api} syncDym --formNumber <formNumber...> --app-root "<appRoot>" --bizAppId "<archive.appId>" [--target "<目录>"]
28
28
  ```
29
29
 
30
- app-build 会话收口时追加 `--existing-only`。只有用户明确要求创建或下载元数据时,普通显式导出
31
- 才保持原行为。
30
+ 只有用户明确要求仅同步本地已有文件时才传 `--existing-only`,普通 app-build 交付不使用此限制。
32
31
 
33
32
  机器契约见 `../../contracts/cli/export-sync.json`。`syncDym` 必须把所选应用身份传给
34
33
  元数据导出端点。
@@ -1,43 +1,20 @@
1
- # Pre-flight Gate(元数据操作专用,按需触发)
1
+ # 环境初始化与绑定恢复
2
2
 
3
- > **路径推算**:SKILL_DIR = 本文件所在目录(`cosmic-meta-api/modules/init/`)。
4
- > KD_CONFIG = `~/.kd/config.json`,是唯一配置真源。
5
- > EFFECTIVE_CONFIG 由仓库根 `scripts/kd_env_loader.py` 负责装配:读取 `KD_CONFIG` 下 `default=true` 的环境,将 `url / username / client_id / client_secret / accountId` 映射并解密到运行时 `server.*`;`nonce / timestamp` 在发起 `getToken` 请求时动态生成。
6
- > cosmic_api = `SKILL_DIR/../../scripts/cosmic_api.py`。
7
- > Python 脚本统一使用 `{python}`(遵循 `[G9.1]`)。
3
+ 用户要求初始化环境,或命令明确报告环境配置、应用绑定缺失时使用本入口。
4
+ 普通领域命令已经负责鉴权和目标解析,无需先执行通用 Gate。
8
5
 
9
- > **此 Gate 是元数据操作(cosmic-meta-api / cosmic-meta-modeling / cosmic-meta-modifier)的统一入口。**
10
- > 其他技能在其 SKILL.md 开头写「Step 0:执行 Pre-flight Gate」即引用本节,**不复制逻辑**。
6
+ 环境凭据由 `scripts/kd_env_loader.py` 从 `~/.kd/config.json` 中选定的环境解析。
7
+ 按照命令诊断说明缺失配置;普通任务无需检查或重建凭据。
11
8
 
12
- ## Gate 流程
9
+ 对已明确选定、需要绑定的已有应用,遵循[应用上下文](../../../../references/application-context.md),
10
+ 仅在该流程要求时执行已发布的自举命令:
13
11
 
12
+ ```text
13
+ {python} {ROOT_DIR}/skills/cosmic-meta-api/scripts/cosmic_api.py --stdout bootstrapWorkspace --app-root "<appRoot>"
14
14
  ```
15
- Step G0:检查本地配置源
16
- ├─ ~/.kd/config.json 不存在 → 提示用户先准备 ~/.kd/config.json 默认环境,停止执行
17
- └─ 配置存在 → 继续 Step G1
18
15
 
19
- Step G1:一键自举(auth + getDevInfo + workspace 全部就绪)
20
- 执行:{python} "{cosmic_api}" bootstrapWorkspace --app-root "<appRoot>"
21
- 该命令内部自动完成:
22
- 1. auth 鉴权(有缓存则复用)
23
- 2. getDevInfo 获取 ISV 信息(动态写入 isv/standard 到 workspace)
24
- 3. 从 archive.json 读取 appCode 写入 workspace
25
- 4. 写入固定业务云默认值(bizCloudName/bizCloudId)
26
- 5. 查询应用是否存在,不存在则自动创建
27
- 6. 查询功能分组,为空则自动创建默认分组
28
- 7. 写入 workspace 全部 6 字段(appNumber/bizCloudName/isv/standard/bizAppId/bizUnitId)
29
- ├─ 成功 → 静默通过,执行用户原始请求
30
- └─ 失败(鉴权失败/配置缺失)→ 提示用户检查对应字段
31
- ```
32
-
33
- > **不再需要分步调用 auth → getDevInfo → bootstrapWorkspace → addUnit → setConfig。**
34
- > 单条 bootstrapWorkspace 命令完成全部前置工作。
35
-
36
- ### ⛔ Gate 硬性规则
16
+ 自举验证已有应用并同步运行时上下文,不创建缺失应用。应用目录或缓存 archive 不代表用户选择,
17
+ 也不能证明线上应用存在。应用不存在与鉴权失败按不同诊断处理。
37
18
 
38
- 1. **任何元数据操作**执行前,必须先通过 Gate,不得跳过。
39
- 2. Gate 通过后,**不向用户输出任何「环境检查通过」类提示**——用户无感。
40
- 3. 失败时**只说缺什么、怎么补**,不暴露内部路径或脚本细节。
41
- 4. `~/.kd/config.json` 是唯一配置真源;不得再引导用户填写 `skills/config.json`。
42
- 5. `setConfig` 在本 Gate 中仅用于写入 `workspace.json` 相关字段;不得再作为 OpenAPI 凭据写入入口。
43
- 6. **G5** 以 `archive.json` + `bootstrapWorkspace` 为唯一主路径;业务云不向用户做开放式收集;`appCode` 不得依赖用户口播,须与 `{appRoot}/archive.json` 或脚本落盘内容一致。
19
+ 成功绑定可供后续命令复用。失败遵循根入口的[执行契约](../../../../references/execution-contract.md);
20
+ 环境恢复不隐含创建应用或重置环境的授权。
@@ -6,7 +6,7 @@
6
6
 
7
7
  > 从 SKILL.md 所在路径推算(禁止硬编码任何绝对路径):
8
8
  > - SKILL_DIR = 本文件所在目录(`cosmic-meta-api/modules/pdm/`)
9
- > - CONFIG = `SKILL_DIR/../../../config.json`(= `skills/config.json`)
9
+ > - CONFIG = `~/.kd/config.json`(平台级配置;`pdm_auto.py` 自行解析,无需传 `--config` 参数,不使用技能目录内的 config.json)
10
10
  > - pdm_auto = `SKILL_DIR/scripts/pdm_auto.py`
11
11
  > - pdm_client = `SKILL_DIR/scripts/pdm_client.py`
12
12
  > - python:统一使用 `{python}`(遵循 `[G9.1]`)
@@ -20,7 +20,7 @@
20
20
  ## 前置条件
21
21
 
22
22
  - 苍穹本地 server 已启动
23
- - datamodel 环境已配置(config.json 的 `pdm` section)
23
+ - datamodel 环境已配置(`~/.kd/config.json` 的 `pdm` section)
24
24
  - 实体已关联应用
25
25
 
26
26
  ---
@@ -61,7 +61,7 @@
61
61
  运行脚本 dry-run 模式,收集所有信息但不修改任何数据:
62
62
 
63
63
  ```
64
- {PYTHON} "{SKILL_DIR}/scripts/pdm_auto.py" <entityNumber> --config "{CONFIG}" --dry-run
64
+ {PYTHON} "{SKILL_DIR}/scripts/pdm_auto.py" <entityNumber> --dry-run
65
65
  ```
66
66
 
67
67
  脚本输出摘要 JSON 到 stdout,同时自动将完整 TableAps 存入文件。摘要包含:
@@ -179,7 +179,7 @@ Agent 对比 convertedTableAps 和 currentTableAps,**逐表**按以下格式
179
179
  - 修改 → 用户指定修改内容(如“FXXX 长度改 300”),Agent 运行 `--patch` 命令修改文件,根据 patch 输出更新对应行后**重新展示表格,再次等待确认**(循环直到用户说确认)
180
180
 
181
181
  ```
182
- {PYTHON} "{SKILL_DIR}/scripts/pdm_auto.py" <entityNumber> --config "{CONFIG}" --patch <tableApsFile> <field> <attr>=<value>
182
+ {PYTHON} "{SKILL_DIR}/scripts/pdm_auto.py" <entityNumber> --patch <tableApsFile> <field> <attr>=<value>
183
183
  ```
184
184
  - 取消 → 终止
185
185
 
@@ -199,7 +199,7 @@ Agent 对比 convertedTableAps 和 currentTableAps,**逐表**按以下格式
199
199
  > ❌ 禁止创建辅助脚本。❌ 禁止在上下文中手动构建/修改完整 TableAps JSON。
200
200
 
201
201
  ```
202
- {PYTHON} "{SKILL_DIR}/scripts/pdm_auto.py" <entityNumber> --config "{CONFIG}" --apply --model-id <modelId> --table-aps-file <tempFile>
202
+ {PYTHON} "{SKILL_DIR}/scripts/pdm_auto.py" <entityNumber> --apply --model-id <modelId> --table-aps-file <tempFile>
203
203
  ```
204
204
 
205
205
  其中 `<modelId>` 是 Step 3 用户确认的模型 ID,`<tableApsFile>` 是 dry-run 自动保存的文件路径(摘要 JSON 的 `tableApsFile` 字段)。
@@ -258,7 +258,7 @@ Agent 对比 convertedTableAps 和 currentTableAps,**逐表**按以下格式
258
258
  2. 使用 `AskUserQuestion`(遵循 [S1-5]-[S1-9])询问是否强制继续提交,提供 2 个选项:强制继续提交(忽略校验错误)/ 取消
259
259
  - 用户选择"强制继续提交" → 加 `--force` 重新运行:
260
260
  ```
261
- {PYTHON} "{SKILL_DIR}/scripts/pdm_auto.py" <entityNumber> --config "{CONFIG}" --apply --model-id <modelId> --table-aps-file <tempFile> --force
261
+ {PYTHON} "{SKILL_DIR}/scripts/pdm_auto.py" <entityNumber> --apply --model-id <modelId> --table-aps-file <tempFile> --force
262
262
  ```
263
263
  - 用户选择"取消" → 终止流程
264
264
  - 如果 JSON 不含 `"stopped"` 字段(exit code 0):save + submit 均成功,进入 Step 6
@@ -332,7 +332,7 @@ python pdm_auto.py <entityNumber> [options]
332
332
  entityNumber 实体编码(如 testbill1)
333
333
 
334
334
  选项:
335
- --config, -c CONFIG 配置文件路径(默认:skills/config.json)
335
+ --config, -c CONFIG 已废弃;运行时统一读取 ~/.kd/config.json
336
336
  --dry-run 信息收集模式,输出摘要 JSON 到 stdout,完整 TableAps 自动存文件
337
337
  --output, -o FILE dry-run 模式额外输出完整 JSON 到文件(可选)
338
338
  --apply 执行模式,需配合 --model-id 和 --table-aps-file
@@ -364,5 +364,4 @@ python pdm_auto.py <entityNumber> [options]
364
364
 
365
365
  ## 配置
366
366
 
367
- 复用 cosmic-meta-api 的共享 config.json,pdm 环境凭据在 `pdm` section 中配置。
368
- 参考配置模板:`scripts/config.json.example`
367
+ PDM 环境凭据位于 `~/.kd/config.json` 的 `pdm` section(平台级配置;`client_secret` 以 `kdsec:` 密文存储)。通过 `setPdmConfig` 命令配置——禁止在技能目录内创建明文配置文件。`pdm` section 字段结构参考 `scripts/config.json.example`。
@@ -1,23 +1,13 @@
1
1
  {
2
- "_comment": "PDM 自动化配置模板。复制为 skills/config.json 并填入真实值。",
3
- "_note": "此文件位于 modules/pdm/scripts/ 仅作参考;pdm_client.py 实际读取的是 skills/config.json(cosmic-meta-api 上一级目录)。",
4
-
5
- "server": {
6
- "_comment": "苍穹元数据环境(用于 entityMeta 接口)",
7
- "baseUrl": "http://127.0.0.1:8080/ierp",
8
- "user": "YOUR_USERNAME",
9
- "appId": "YOUR_APP_ID",
10
- "appSecret": "YOUR_APP_SECRET",
11
- "accountId": "YOUR_ACCOUNT_ID",
12
- "tenantId": "YOUR_TENANT_ID"
13
- },
2
+ "_comment": "~/.kd/config.json 中 `pdm` section 的参考结构(平台级配置)。仅供参考——请勿将此文件复制进技能目录。",
3
+ "_note": "字段值由环境管理或 setPdmConfig 命令维护。client_secret 以 kdsec: 密文存储,绝不明文落盘。留空的字段回退继承默认环境条目。",
14
4
 
15
5
  "pdm": {
16
6
  "_comment": "PDM 数据模型环境(用于 convert / save / submit 等接口)",
17
7
  "baseUrl": "http://127.0.0.1:8080/ierp",
18
- "user": "YOUR_USERNAME",
19
- "appId": "YOUR_APP_ID",
20
- "appSecret": "YOUR_APP_SECRET",
8
+ "username": "YOUR_USERNAME",
9
+ "client_id": "YOUR_APP_ID",
10
+ "client_secret": "kdsec:v1:gcm|win:<ciphertext>",
21
11
  "accountId": "YOUR_ACCOUNT_ID",
22
12
  "tenantId": "YOUR_TENANT_ID",
23
13
  "outputDir": "datamodel"
@@ -25,7 +25,7 @@
25
25
  |------|------|
26
26
  | `RUNTIME_DIR/.token_cache.json` | 鉴权 token 缓存 |
27
27
  | `RUNTIME_DIR/context.md` | 会话级状态(Token 描述、buildMeta 目标、最近建模结果等) |
28
- | `RUNTIME_DIR/config.md` | ISV/业务云展示缓存(非 `skills/config.json`) |
28
+ | `RUNTIME_DIR/config.md` | ISV/业务云展示缓存(非 `~/.kd/config.json`) |
29
29
  | `RUNTIME_DIR/biz_cache.json` | bizApps 列表缓存 |
30
30
  | `RUNTIME_DIR/workspace.json` | 当前选中的应用上下文(appNumber / bizCloudName / bizAppId / bizUnitId / bizUnitName) |
31
31
  | `RUNTIME_DIR/ops/` | modifyMeta 临时 ops 文件(自动清理) |
@@ -35,7 +35,7 @@
35
35
  > `RUNTIME_DIR` = `{PROJECT_ROOT}/app/_runtime/cosmic-metadata/`
36
36
  > `appCode` 从 `{PROJECT_ROOT}/app/_runtime/context.json.appCode` 读取
37
37
 
38
- **本步不含**:`skills/config.json` 中的 `server.*` / `pdm.*` 凭据字段。
38
+ **本步不含**:`~/.kd/config.json` 中的凭据字段(默认环境 + `pdm` section)。
39
39
 
40
40
  **询问话术示例**:「是否执行上述缓存与会话重置?请回复 **确认 / 是** 表示同意第一步。」
41
41
 
@@ -45,13 +45,13 @@
45
45
 
46
46
  ## 步骤 B:是否重置「系统凭据」(第二步)
47
47
 
48
- 说明涉及字段(均在 `skills/config.json` 中):
48
+ 说明涉及字段(均在 `~/.kd/config.json` 中):
49
49
 
50
- - **`server.*`**:`baseUrl`、`tenantId`、`accountId`、`appId`、`appSecret`、`user`(**保留** `isv`,仅清空凭据类字段,并将 `_initialized` 置为 false)。
51
- - **`pdm.*`**:`baseUrl`、`user`、`appId`、`appSecret`、`accountId`(**保留** `outputDir`)。
50
+ - **默认环境(`env.*` 中 `default: true` 的条目)**:`url`、`username`、`client_id`、`client_secret`、`accountId`、`tenantId`(**保留** `isv` 等非凭据字段)。
51
+ - **`pdm` section**:`baseUrl`、`username`、`client_id`、`client_secret`、`accountId`、`tenantId`(**保留** `outputDir`)。
52
52
  - `resetEnv --credentials clear` 一次性清空上述两组凭据字段,自动备份整个 config 文件。
53
53
 
54
- **询问话术示例**:「是否还要清空 `skills/config.json` 中的**系统凭据**,便于您重新填写新环境?
54
+ **询问话术示例**:「是否还要清空 `~/.kd/config.json` 中的**系统凭据**,便于您重新填写新环境?
55
55
  - 回复 **保留凭据** → 只执行第一步缓存重置,不改动 config。
56
56
  - 回复 **清空凭据** → 先自动备份 `*.bak.时间戳`,再清空凭据字段。」
57
57
 
@@ -1,159 +1,31 @@
1
- # 使用流程(API 命令参考)
1
+ # API 命令使用
2
2
 
3
- ## 读取路径(每次开始时执行)
3
+ 本参考用于已选定的 API 命令或 API 故障排查。普通表单修改直接遵循建模、修改或 UI 入口。
4
4
 
5
- > 从 SKILL.md 所在路径推算(禁止硬编码任何绝对路径):
6
- > - SKILL_DIR = 本文件所在目录(`cosmic-meta-api/modules/usage/`)
7
- > - CONFIG = `SKILL_DIR/../../../config.json`(= `skills/config.json`)
8
- > - cosmic_api = `SKILL_DIR/../../scripts/cosmic_api.py`
9
- > - artifact_manager = `SKILL_DIR/../../scripts/artifact_manager.py`
10
- > - RUNTIME_DIR = `{appRoot}/_runtime/cosmic-metadata/`(从 `{PROJECT_ROOT}/app/_runtime/context.json` 读取 `projectRoot`)
11
- > - artifacts_dir = `{appRoot}/metadata/`
12
- > - batch_manifests_dir = `{appRoot}/modify/`
13
- > - python:统一使用 `{python}`(遵循 `[G9.1]`)
5
+ 使用根入口提供的 Python 解释器与技能包路径:
14
6
 
15
- ---
16
-
17
- ## 方式一:运行 Python 脚本(推荐,无编码问题)
18
-
19
- > **优先使用此方式**。脚本自动处理 token 缓存、UTF-8 编码、JSON 序列化,不存在 PowerShell 中文乱码等问题。
20
-
21
- ```bash
22
- # 鉴权(token 自动缓存在 RUNTIME_DIR/.token_cache.json,30分钟内复用)
23
- {python} "{cosmic_api}" auth
24
-
25
- # 强制刷新 token
26
- {python} "{cosmic_api}" auth --force
27
-
28
- # 查询业务云/应用(支持按名称过滤)
29
- {python} "{cosmic_api}" bizApps
30
- {python} "{cosmic_api}" bizApps --cloud bfyTest1 --app AI
31
-
32
- # 一步执行建模(读取 artifact 文件,自动鉴权)
33
- {python} "{cosmic_api}" run --bizAppId 5M3EVO2FU9EF --bizUnitId 5MJ9YP456GQ9 --template bos_billtpl
7
+ ```text
8
+ {python} {ROOT_DIR}/skills/cosmic-meta-api/scripts/cosmic_api.py --stdout <命令> <参数>
34
9
  ```
35
10
 
36
- ### workspace 自举与手工修正(与 L1 / Pre-flight 对齐)
37
-
38
- > **主路径**:`cosmic-meta-modeling` L1 与 `init` 在凭据就绪后,应执行 **`bootstrapWorkspace`**:从 `{appRoot}/archive.json` 读取经平台验证的 `appCode` 及 `bizCloudId`/`bizCloudName`,查询已有应用并写入 `bizAppId`/`bizUnitId`(见 `do_bootstrap_workspace`)。查询不到应用时必须停止,本命令永不创建应用。**不要**以「先问用户业务云、再问应用、再选分组」替代自举。
39
- > `setConfig` 仅作 **救急/手工纠偏**(如列表选中后写 id,或迁移旧环境)。
40
-
41
- ```bash
42
- # 主路径:自举(AI 在 L1/Init 中自动执行,用户一般无需手打)
43
- {python} "{cosmic_api}" bootstrapWorkspace --app-root "<appRoot>"
44
-
45
- # 手工纠偏:仅当确需改 workspace 内字段时;--app-number 须与 {appRoot}/archive.json 的 appCode 一致或先已写回 archive
46
- {python} "{cosmic_api}" setConfig \
47
- --app-number "<与 archive.json.appCode 一致的应用编码>" \
48
- --biz-cloud-name "<与 archive.json.bizCloudName 一致的业务云名称>"
49
-
50
- # 查询开发商 ISV 信息并回写 isv
51
- {python} "{cosmic_api}" getDevInfo
52
- ```
53
-
54
- | 命令 | 写入字段 | 是否需要鉴权 |
55
- |------|---------|------------|
56
- | `bootstrapWorkspace` | `appNumber`(来自 archive)、固定云、`bizAppId`/`bizUnitId` 等 | 是(内部 auth) |
57
- | `setConfig` | `workspace.json` 的若干键(如 `appNumber` / `bizCloudName` / id) | 否(直接写文件) |
58
- | `getDevInfo` | `isv`(由 API 返回值自动填入) | 是(需先 auth) |
59
-
60
- 以上 `{python}` / `{cosmic_api}` 按本文件顶部「读取路径」小节推算,**无需读取 skill_env.json**。
61
-
62
- ### 本地清理契约(`cleanTemp`)
63
-
64
- `cleanTemp` 是本地文件命令,不是平台元数据写入。必须显式传入 `--app-root`,不得从
65
- shell 当前目录猜测清理目标。
66
-
67
- ```bash
68
- {python} "{cosmic_api}" --stdout cleanTemp --app-root "<appRoot>"
69
- {python} "{cosmic_api}" --stdout cleanTemp --app-root "<appRoot>" --all
70
- ```
71
-
72
- - 默认模式只删除 `{appRoot}/_runtime/cosmic-metadata/` 直属的 `input_*.json` 和
73
- `output_*.json`。
74
- - `--all` 删除该目录内容,并且只重建 `ops/`。
75
- - 两种模式都不得触碰 `_runtime/cli-verify/` 等同级运行目录。
76
- - 必须在隔离 app root 中用文件系统前后态断言验证;发布和外部运行态页面验证不适用。
77
- - 未知参数必须返回 `CLI_ARGUMENT_ERROR`,退出码为 2。
78
-
79
- ### 平台写入的应用身份门禁
80
-
81
- 每个绑定应用的平台写入都以 `{appRoot}/archive.json` 为权威身份:
82
-
83
- - 必须满足 `workspace.appNumber == archive.appCode`。
84
- - archive 有 `appId` 时,必须满足 `workspace.bizAppId == archive.appId`。
85
- - 命令携带 `--bizAppId` 或 `--bizAppNumber` 时,也必须与 archive 一致。
86
- - workspace 即使非空,只要不一致仍是不安全状态。必须在鉴权/写入前以
87
- `APP_IDENTITY_MISMATCH` 或 `APP_TARGET_MISMATCH` 失败,执行
88
- `bootstrapWorkspace --app-root` 后重新读取并比较。
11
+ 命令负责鉴权、令牌缓存、运行时路径和线上目标绑定。参数形状不明确时,在同一 CLI
12
+ 调用 `describeCommand <命令>`。较大的 JSON 输入使用 UTF-8 文件。
89
13
 
90
- `addMenu` 的页面目标实际使用**表单编码**。优先使用 `--formNumber`;`--formId` 只是同一
91
- formNumber 载荷的历史别名,不能传 form UUID。`publishApp` 表示应用 `enable`/`disable`,
92
- 不是通用重新发布;应用已经启用时再次 `enable` 会失败。
14
+ 绑定缺失或归属冲突时读取[应用上下文](../../../../references/application-context.md)。
15
+ 本地 archive 记录已验证绑定,不证明线上表单是否存在。只有所选流程或恢复回执要求时才调用
16
+ `bootstrapWorkspace`。
93
17
 
94
- **修改配置**:只需编辑 `skills/config.json`(= `SKILL_DIR/../../../config.json`),脚本无需改动。
18
+ 命令失败和验证遵循根入口的[执行契约](../../../../references/execution-contract.md)。
19
+ 依据回执区分鉴权失败、权限不足、接口未部署及业务对象不存在;修正实际原因后再重试。
20
+ 无需在每条命令前另行鉴权或让模型维护重试计数。凭据配置与环境变更使用 init/reset 入口。
95
21
 
96
- ---
22
+ 用户明确要求本地清理时,`cleanTemp --app-root "<appRoot>"` 仅删除契约规定的临时输入输出文件。
23
+ `--all` 会清理该应用的元数据运行时目录,不属于普通交付流程;选择清理范围前读取命令契约。
97
24
 
98
- ## 方式二:生成代码参考(查阅文档)
99
-
100
- 查阅顺序:`RUNTIME_DIR/config.md` → `auth.md` → `apis/*.md` → `examples/python.md`
101
-
102
- ---
103
-
104
- ## 鉴权失败处理规则(所有依赖本技能的流程均须遵守)
105
-
106
- > **鉴权最多尝试 3 次,第 3 次失败后必须立即终止整个流程,不得继续执行任何后续步骤。**
107
-
108
- | 次数 | 触发条件 | AI 行为 |
109
- |------|----------|---------|
110
- | 第 1 次失败 | `auth` 返回非 0 / token 为空 / HTTP 401 | 自动执行 `{python} "{cosmic_api}" auth --force` 强制刷新 |
111
- | 第 2 次失败 | 强制刷新后仍失败 | 提示用户检查 `config.json`(密钥/租户/服务地址),等待用户更新后再重试一次 |
112
- | 第 3 次失败 | 用户确认已更新配置但仍失败 | **立即终止**,输出以下信息并停止,不再执行建模/修改/查询等任何操作 |
113
-
114
- **第 3 次失败时的终止输出模板:**
115
- ```
116
- ❌ 鉴权连续失败 3 次,已终止本次流程。
117
-
118
- 可能原因:
119
- 1. config.json 中 app_id / app_secret / tenant_id 不正确
120
- 2. 苍穹服务未启动或网络不通(base_url 无法访问)
121
- 3. 账号无权限或已被锁定
122
-
123
- 请检查以上配置后重新发起请求。
124
- ```
125
-
126
- > **注意**:
127
- > - 每次完整建模/修改流程(含 buildMeta / modifyMeta)内,失败计数从 0 开始重置
128
- > - 仅 `auth` 步骤失败计入,接口调用(如 queryForms / buildMeta)返回 401 也按此规则处理
129
-
130
- ---
131
-
132
- ## context.md 维护规则
133
-
134
- - `RUNTIME_DIR/context.md` 仅记录**本次会话**选定的 `bizAppId` / `bizUnitId`(建模目标)和最近一次建模结果
135
- - `buildMeta` 前先读取 `RUNTIME_DIR/context.md` 中的 `bizAppId` / `bizUnitId`
136
- - token 缓存由脚本的 `RUNTIME_DIR/.token_cache.json` 负责,`context.md` 作为人类可读记录
137
- - **ISV 信息 / 业务云列表** 属于持久配置,统一存放在 `RUNTIME_DIR/config.md`,不写入 `context.md`
138
- - 仅当用户主动说"刷新列表 / 切换业务云"时,才重新调用 `bizApps` 并将结果更新回 `RUNTIME_DIR/config.md`
139
- - `RUNTIME_DIR` = `{PROJECT_ROOT}/app/_runtime/cosmic-metadata/`
140
-
141
- ---
142
-
143
- ## API 路径规则
144
-
145
- 苍穹自定义 API 2.0 的请求路径格式:
146
-
147
- ```
148
- {base_url}/ierp/kapi/v2/{ISV}/{appNumber}/{类@ApiMapping}/{方法@ApiGetMapping|@ApiPostMapping}
149
- ```
25
+ `addMenu` 使用表单编码定位页面,其历史别名 `--formId` 也不是表单 UUID。
26
+ `publishApp` 表示启用或停用应用,不是通用重新部署。
150
27
 
151
- | 变量 | 说明 | 来源(`skills/config.json` 字段) |
152
- |------|------|------|
153
- | `base_url` | 服务地址 | `server.baseUrl` |
154
- | `ISV` | 开发商标识 | 顶层 `isv` |
155
- | `appNumber` | 苍穹应用编码 | `workspace.json` 的 `appNumber` |
156
- | 类路径 | `@ApiMapping` 的值 | 如 `/ai-meta` |
157
- | 方法路径 | `@ApiGetMapping` / `@ApiPostMapping` 的值 | 如 `/bizApps` |
28
+ 编写 API 集成代码时,仅查阅 `../../apis/` 下相关接口及对应语言示例。配置、URL 和凭据
29
+ 由 CLI 配置层负责,普通任务无需重建请求路径。
158
30
 
159
- > ⚠️ `appNumber` 原本硬编码在 `cosmic_api.py` 中,现统一由 `RUNTIME_DIR/workspace.json` 的 `appNumber` 提供;**真实流水线中**该值须与 `{appRoot}/archive.json` 的 `appCode` 由自举/同步保持一致,**不能**在脚本层单独发明应用编码。
31
+ 完成已验证修改后,遵循[交付契约](../../../../references/delivery.md)。
@@ -6,7 +6,7 @@
6
6
 
7
7
  > 从 SKILL.md 所在路径推算(禁止硬编码任何绝对路径):
8
8
  > - SKILL_DIR = 本文件所在目录(`cosmic-meta-api/modules/verify/`)
9
- > - CONFIG = `SKILL_DIR/../../../config.json`(= `skills/config.json`)
9
+ > - CONFIG = `~/.kd/config.json`(平台级配置,由脚本自行解析;无技能目录内的配置文件)
10
10
  > - meta_verifier = `SKILL_DIR/../../scripts/meta_verifier.py`
11
11
  > - python:统一使用 `{python}`(遵循 `[G9.1]`)
12
12