@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
@@ -281,10 +281,43 @@ def _load_ops(ops_arg):
281
281
  # ─── buildMeta ────────────────────────────────────────────────────────────────
282
282
 
283
283
  def do_build_meta(cfg, token, artifact, biz_app_id, biz_unit_id,
284
- template_number="bos_billtpl"):
284
+ template_number="bos_billtpl", on_write_result=None):
285
285
  """Execute AI metadata modeling. When bizUnitId is empty, Java backend handles automatically."""
286
286
  # Blank template: send "" when "blank" or empty string passed, backend treats as null
287
287
  tn = "" if (not template_number or str(template_number).strip().lower() in ("blank", "blankpage")) else str(template_number).strip()
288
+ from .cmd_forms import resolve_template_input
289
+ roots = [item for item in artifact.get("entities", []) if not item.get("parentEntityId")]
290
+ model_type = ({"BillEntity": "BillFormModel", "BaseEntity": "BaseFormModel",
291
+ "MainEntity": "DynamicFormModel"}.get(roots[0].get("type"))
292
+ if len(roots) == 1 else None)
293
+ try:
294
+ tn = resolve_template_input(cfg, token, tn, biz_app_id=biz_app_id, model_type=model_type)
295
+ except Exception as exc:
296
+ code = str(exc).partition(":")[0]
297
+ return {"status": False, "errorCode": code if code.isupper() and " " not in code else "TEMPLATE_LOOKUP_UNCONFIRMED",
298
+ "message": str(exc), "writeAttempted": False}
299
+
300
+ for root in roots:
301
+ number = str(root.get("entityKey") or "").strip()
302
+ if not number:
303
+ return {"status": False, "errorCode": "ARTIFACT_TARGET_MISSING",
304
+ "message": "An exact root entityKey is required before creation", "writeAttempted": False}
305
+ try:
306
+ lookup = do_query_forms(cfg, token, keyword=number)
307
+ except Exception as exc:
308
+ return {"status": False, "errorCode": "TARGET_LOOKUP_UNCONFIRMED",
309
+ "message": str(exc), "writeAttempted": False}
310
+ if not _is_api_success(lookup) or not isinstance(lookup.get("data"), list):
311
+ return {"status": False, "errorCode": "TARGET_LOOKUP_UNCONFIRMED",
312
+ "message": "Target conflict lookup failed; no creation was attempted",
313
+ "writeAttempted": False, "cause": lookup}
314
+ matches = [row for row in lookup["data"] if isinstance(row, dict)
315
+ and str(row.get("formNumber") or "").strip().casefold() == number.casefold()]
316
+ if matches:
317
+ return {"status": False, "errorCode": "TARGET_ALREADY_EXISTS",
318
+ "message": "The exact number already belongs to an online object; it is not a creation receipt",
319
+ "writeAttempted": False, "data": {"requestedNumber": number, "conflicts": matches},
320
+ "retryAdvice": "user_input_required"}
288
321
 
289
322
  compiled = copy.deepcopy(artifact)
290
323
  trigger_settings = []
@@ -302,6 +335,8 @@ def do_build_meta(cfg, token, artifact, biz_app_id, biz_unit_id,
302
335
  "artifact": compiled
303
336
  }
304
337
  result = _api_call(cfg, token, "buildMeta", payload, method="POST")
338
+ if on_write_result is not None:
339
+ on_write_result(copy.deepcopy(result))
305
340
  data = result.get("data") if isinstance(result, dict) else None
306
341
  if not isinstance(data, dict):
307
342
  return result
@@ -1,20 +1,20 @@
1
1
  """插件注册 API:表单插件的注册/修改/删除,以及 KingScript 脚本的查询与创建。
2
2
 
3
3
  从 commands.py 拆出。与 cmd_operations 同属叶子层,主要依赖 _core.config 的 _api_call。
4
- KingScript 写入前会尝试调用编码侧源码门禁(本语言树 scripts/kingscript_source_gate.py);
4
+ KingScript 写入前会尝试调用编码侧源码门禁(app-build/scripts/kingscript_source_gate.py);
5
5
  该依赖是可选的:缺失时诚实降级放行,绝不因基础设施缺失而阻断(见 kingscript_write_guard)。
6
6
  """
7
7
 
8
8
  from __future__ import annotations
9
9
 
10
10
  import sys
11
+ import json
11
12
  from pathlib import Path
12
13
 
13
14
  from .config import _api_call
14
15
 
15
- # 编码侧 KingScript 门禁目录(parents[4]/scripts 在 canonical 与 .locales/zh 两套目录树中
16
- # 都成立)。元数据 CLI 与编码侧刻意解耦,故此依赖可选:门禁模块缺失时守卫诚实降级放行,
17
- # 仅当门禁报出 P0 违规时才阻断不可逆写入。
16
+ # 编码侧 KingScript 门禁目录(app-build/scripts)。元数据 CLI 与编码侧刻意解耦,故此
17
+ # 依赖可选:门禁模块缺失时守卫诚实降级放行,仅当门禁报出 P0 违规时才阻断不可逆写入。
18
18
  _KINGSCRIPT_GATE_DIR = Path(__file__).resolve().parents[4] / "scripts"
19
19
 
20
20
 
@@ -246,70 +246,95 @@ def script_readback_verification(rows, expected, result_data):
246
246
 
247
247
  # ─── 插件注册 API ──────────────────────────────────────────────────────────────
248
248
 
249
- def do_register_plugin(cfg, token, form_number, plugin_config):
250
- """注册插件到表单。
249
+ def validate_local_java_registration(app_root, plugin_config):
250
+ """Reject contradictions with a locally declared Java source; no runtime claim."""
251
+ if not app_root or plugin_config.get("pluginType", "JAVA") != "JAVA":
252
+ return
253
+ archive = Path(app_root) / "archive.json"
254
+ if not archive.is_file():
255
+ return
256
+ entries = json.loads(archive.read_text(encoding="utf-8-sig")).get("javas", [])
257
+ class_name = plugin_config["className"]
258
+ candidates = [entry for entry in entries if isinstance(entry, dict)
259
+ and entry.get("className") in (class_name, class_name.rsplit(".", 1)[-1])]
260
+ if not candidates:
261
+ return # Existing deployed classes without local declarations remain supported.
262
+ if len(candidates) != 1:
263
+ raise ValueError("PLUGIN_LOCAL_SOURCE_AMBIGUOUS: multiple archive entries for " + class_name)
264
+ if str(_KINGSCRIPT_GATE_DIR) not in sys.path:
265
+ sys.path.insert(0, str(_KINGSCRIPT_GATE_DIR))
266
+ from plugin_source_gate import validate_registration_entry
267
+ return validate_registration_entry(candidates[0], plugin_config["targetType"], class_name)
268
+
269
+
270
+ def do_register_plugin(cfg, token, form_number, plugin_config, app_root=None):
271
+ """注册插件 to Form.
251
272
 
252
273
  Args:
253
- cfg: 配置字典
274
+ cfg: Configuration dict
254
275
  token: access_token
255
- form_number: 表单编码
256
- plugin_config: 插件配置字典,包含:
257
- - className (必填): 插件类名。Java插件为全限定类名,脚本插件为脚本路径
258
- - targetType (必填): 注册目标类型
259
- - 'BILL_FORM': PC 表单插件
260
- - 'LIST_FORM': PC 列表插件
261
- - 'MOBILE_BILL_FORM': 移动表单插件
262
- - 'MOBILE_LIST_FORM': 移动列表插件
263
- - 'OPERATION': 操作插件(需要 operationKey)
264
- - 'BASEDATA_CONTROLLER': 基础资料个性化控制器(仅基础资料表单)
265
- - pluginType: 插件类型 'JAVA'(默认) 或 'KINGSCRIPT'
266
- - fpk: 脚本插件FPK标识(仅 pluginType=KINGSCRIPT 时必填)
267
- - description: 插件描述
268
- - enabled: 是否启用,默认 true
269
- - bizAppId: 所属应用 ID
270
- - operationKey: 操作 Key(仅 OPERATION 类型需要)
276
+ form_number: Form number
277
+ plugin_config: 插件Configuration dict, 包含:
278
+ - className (必填): Plugin class name. Java插件为全限定类名, 脚本插件为脚本路径
279
+ - targetType (必填): Registration target type
280
+ - 'BILL_FORM': PC Form插件
281
+ - 'LIST_FORM': PC list plugin
282
+ - 'MOBILE_BILL_FORM': 移动Form插件
283
+ - 'MOBILE_LIST_FORM': Mobile list plugin
284
+ - 'OPERATION': 操作插件 (需要 operationKey)
285
+ - 'BASEDATA_CONTROLLER': 基础资料个性化控制器 (仅基础资料Form)
286
+ - pluginType: Plugin type 'JAVA'(default) 或 'KINGSCRIPT'
287
+ - fpk: 脚本插件FPK标识 (仅 pluginType=KINGSCRIPT 时必填)
288
+ - description: Plugin description
289
+ - enabled: Whether enabled, default true
290
+ - bizAppId: Owning app ID
291
+ - operationKey: Operation Key (仅 OPERATION 类型需要)
271
292
 
272
293
  Returns:
273
- dict: API 响应结果
294
+ dict: API response result
274
295
  """
296
+ source_check = validate_local_java_registration(app_root, plugin_config)
275
297
  payload = dict(plugin_config)
276
298
  payload["formNumber"] = form_number
277
- return _api_call(cfg, token, "registerPlugin", payload, method="POST")
299
+ result = _api_call(cfg, token, "registerPlugin", payload, method="POST")
300
+ if source_check and isinstance(result, dict):
301
+ result["sourceCheck"] = source_check
302
+ return result
278
303
  def do_update_plugin(cfg, token, form_number, plugin_config):
279
- """修改插件。
304
+ """修改插件.
280
305
 
281
306
  Args:
282
- cfg: 配置字典
307
+ cfg: Configuration dict
283
308
  token: access_token
284
- form_number: 表单编码
285
- plugin_config: 插件配置字典,包含:
286
- - className (必填): 目标插件类名(用于定位,不可修改)
287
- - targetType (必填): 插件所在目标类型
288
- - operationKey: 操作 Key(仅 OPERATION 类型需要)
289
- - description: 新的插件描述
290
- - enabled: 是否启用
291
- - bizAppId: 所属应用 ID
292
- - fpk: 脚本插件FPK标识(仅脚本插件可修改)
309
+ form_number: Form number
310
+ plugin_config: 插件Configuration dict, 包含:
311
+ - className (必填): 目标Plugin class name (用于定位, 不可修改)
312
+ - targetType (必填): Target type where plugin resides
313
+ - operationKey: Operation Key (仅 OPERATION 类型需要)
314
+ - description: 新的Plugin description
315
+ - enabled: Whether enabled
316
+ - bizAppId: Owning app ID
317
+ - fpk: 脚本插件FPK标识 (仅脚本插件可修改)
293
318
 
294
319
  Returns:
295
- dict: API 响应结果
320
+ dict: API response result
296
321
  """
297
322
  payload = dict(plugin_config)
298
323
  payload["formNumber"] = form_number
299
324
  return _api_call(cfg, token, "updatePlugin", payload, method="POST")
300
325
  def do_delete_plugin(cfg, token, form_number, target_type, class_name, operation_key=None):
301
- """删除插件。
326
+ """删除插件.
302
327
 
303
328
  Args:
304
- cfg: 配置字典
329
+ cfg: Configuration dict
305
330
  token: access_token
306
- form_number: 表单编码
307
- target_type: 插件所在目标类型
308
- class_name: 要删除的插件类名(Java为全限定类名,脚本为脚本路径)
309
- operation_key: 操作 Key(仅 OPERATION 类型需要)
331
+ form_number: Form number
332
+ target_type: Target type where plugin resides
333
+ class_name: 要删除的Plugin class name (Java为全限定类名, 脚本为脚本路径)
334
+ operation_key: Operation Key (仅 OPERATION 类型需要)
310
335
 
311
336
  Returns:
312
- dict: API 响应结果
337
+ dict: API response result
313
338
  """
314
339
  payload = {
315
340
  "formNumber": form_number,
@@ -320,51 +345,49 @@ def do_delete_plugin(cfg, token, form_number, target_type, class_name, operation
320
345
  payload["operationKey"] = operation_key
321
346
  return _api_call(cfg, token, "deletePlugin", payload, method="POST")
322
347
  def do_query_editable_plugins(cfg, token, form_number):
323
- """查询可编辑插件列表。
348
+ """查询可编辑插件列表.
324
349
 
325
350
  Args:
326
- cfg: 配置字典
351
+ cfg: Configuration dict
327
352
  token: access_token
328
- form_number: 表单编码
353
+ form_number: Form number
329
354
 
330
355
  Returns:
331
- dict: 包含 success 和 data 字段。
332
- data 为插件列表,每个元素包含:
333
- - className: 插件类名
334
- - description: 插件描述
335
- - enabled: 是否启用
336
- - bizAppId: 所属应用ID
337
- - location: 插件所属位置类型
338
- - operationKey: 操作 Key(仅 OPERATION 类型有值)
339
- - operationName: 操作名称
340
- - pluginType: 插件类型(JAVA/KINGSCRIPT/JAVASCRIPT)
341
- - fpk: 脚本插件FPK标识(Java插件为null)
356
+ dict: 包含 success 和 data Field.
357
+ data 为插件列表, 每个元素包含:
358
+ - className: Plugin class name
359
+ - description: Plugin description
360
+ - enabled: Whether enabled
361
+ - bizAppId: Owning app ID
362
+ - location: Plugin location type
363
+ - operationKey: Operation Key (仅 OPERATION 类型有值)
364
+ - operationName: Operation name
365
+ - pluginType: Plugin type (JAVA/KINGSCRIPT/JAVASCRIPT)
366
+ - fpk: 脚本插件FPK标识 (Java插件为null)
342
367
  """
343
368
  payload = {"formNumber": form_number}
344
369
  return _api_call(cfg, token, "queryEditablePlugins", payload, method="GET")
345
370
  def do_query_available_scripts(cfg, token, form_number, target_type):
346
- """查询指定表单可选的 KingScript 脚本列表。
371
+ """查询指定Form可选的 KingScript 脚本列表.
347
372
 
348
373
  Args:
349
- cfg: 配置字典
374
+ cfg: Configuration dict
350
375
  token: access_token
351
- form_number: 表单编码
352
- target_type: 目标类型(BILL_FORM/LIST_FORM/MOBILE_BILL_FORM/MOBILE_LIST_FORM/OPERATION/BASEDATA_CONTROLLER)
376
+ form_number: Form number
377
+ target_type: 目标类型 (BILL_FORM/LIST_FORM/MOBILE_BILL_FORM/MOBILE_LIST_FORM/OPERATION/BASEDATA_CONTROLLER)
353
378
 
354
379
  Returns:
355
- dict: 包含 data 字段,data 为脚本列表,每个元素包含:
356
- - fpk: 脚本记录 ID(注册时作为 fpk 传入)
357
- - className: 脚本完整路径(注册时作为 className 传入)
358
- - scriptName: 脚本名称
359
- - scriptNumber: 脚本编码
360
- - scriptType: 脚本类型编码
361
- - description: 脚本描述
362
- - bizAppId: 脚本所属应用 ID
380
+ dict: 包含 data Field, data 为脚本列表, 每个元素包含:
381
+ - fpk: Script record ID (注册时作为 fpk 传入)
382
+ - className: Script full path (注册时作为 className 传入)
383
+ - scriptName: Script name
384
+ - scriptNumber: Script number
385
+ - scriptType: Script type code
386
+ - description: Script description
387
+ - bizAppId: 脚本Owning app ID
363
388
  """
364
389
  payload = {"formNumber": form_number, "targetType": target_type}
365
390
  return _api_call(cfg, token, "queryAvailableScripts", payload, method="GET")
366
-
367
-
368
391
  def kingscript_write_guard(script_config):
369
392
  """createScript 写入前的 KingScript 源码门禁(fail-closed,覆盖所有调用点)。
370
393
 
@@ -398,38 +421,40 @@ def kingscript_write_guard(script_config):
398
421
  "success": False,
399
422
  "errorCode": "KINGSCRIPT_GATE_FAILED",
400
423
  "message": (
401
- "createScript 已拒绝:KingScript 源码违反 P0 硬约束。该写入不可逆且平台不提供"
402
- "编译信号,故写入前在本地门禁校验。请修正后重试;被拒绝的 scriptNumber 从未"
403
- "写入,可直接复用。违规项:" + summary
424
+ "createScript rejected: the KingScript source violates the P0 hard "
425
+ "constraints. This write is irreversible and the platform gives no compile "
426
+ "signal, so the source is gated locally before the write. Fix it and retry; "
427
+ "the rejected scriptNumber was never written and can be reused. "
428
+ "Violations: " + summary
404
429
  ),
405
430
  "data": {"success": False, "gate": verdict},
406
431
  }
407
432
 
408
433
 
409
434
  def do_create_script(cfg, token, script_config):
410
- """创建 KingScript 脚本记录到 ide_pluginscript。
435
+ """创建 KingScript 脚本记录 to ide_pluginscript.
411
436
 
412
437
  写入前先过 kingscript_write_guard:若自带 scriptContent 违反 P0 硬约束,返回 blocked
413
438
  envelope 而绝不发出不可逆写入(覆盖 CLI dispatch 与编程式两个调用点)。
414
439
 
415
440
  Args:
416
- cfg: 配置字典
441
+ cfg: Configuration dict
417
442
  token: access_token
418
- script_config: 脚本创建参数字典,包含:
419
- - bizAppId (必填): 脚本所属应用ID
420
- - formNumber (必填): 关联表单编码
421
- - scriptNumber (必填): 脚本编码(仅字母、数字、下划线)
422
- - scriptName (必填): 脚本名称
423
- - targetType (必填): 脚本目标类型
424
- - description: 脚本描述
425
- - scriptContent: 脚本源代码(不传则使用系统模板)
443
+ script_config: 脚本创建parameters字典, 包含:
444
+ - bizAppId (必填): 脚本Owning app ID
445
+ - formNumber (必填): 关联Form number
446
+ - scriptNumber (必填): Script number (仅字母, 数字, 下划线)
447
+ - scriptName (必填): Script name
448
+ - targetType (必填): Script target type
449
+ - description: Script description
450
+ - scriptContent: 脚本源代码 (不传则使用系统模板)
426
451
 
427
452
  Returns:
428
- dict: API 响应结果,data 包含:
429
- - success: 是否创建成功
430
- - message: 结果消息
431
- - fpk: 脚本记录 ID
432
- - className: 脚本完整路径
453
+ dict: API response result, data 包含:
454
+ - success: 是否创建succeeded
455
+ - message: Result message
456
+ - fpk: Script record ID
457
+ - className: Script full path
433
458
  - compiled: 平台创建时的编译标志位。**live 探测证实恒为 false(连系统模板
434
459
  基线也是),并非成功/失败信号**;KingScript 的真正编译不发生在 createScript,
435
460
  故本 CLI 不消费该字段,源码正确性改由写入前的 kingscript_write_guard 本地