@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
|
@@ -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
|
|
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 门禁目录(
|
|
16
|
-
#
|
|
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
|
|
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 (必填):
|
|
258
|
-
- targetType (必填):
|
|
259
|
-
- 'BILL_FORM': PC
|
|
260
|
-
- 'LIST_FORM': PC
|
|
261
|
-
- 'MOBILE_BILL_FORM':
|
|
262
|
-
- 'MOBILE_LIST_FORM':
|
|
263
|
-
- 'OPERATION':
|
|
264
|
-
- 'BASEDATA_CONTROLLER':
|
|
265
|
-
- pluginType:
|
|
266
|
-
- fpk: 脚本插件FPK
|
|
267
|
-
- description:
|
|
268
|
-
- enabled:
|
|
269
|
-
- bizAppId:
|
|
270
|
-
- operationKey:
|
|
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
|
-
|
|
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:
|
|
289
|
-
- description:
|
|
290
|
-
- enabled:
|
|
291
|
-
- bizAppId:
|
|
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:
|
|
309
|
-
operation_key:
|
|
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:
|
|
337
|
-
- location:
|
|
338
|
-
- operationKey:
|
|
339
|
-
- operationName:
|
|
340
|
-
- pluginType:
|
|
341
|
-
- fpk: 脚本插件FPK
|
|
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
|
-
"""
|
|
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:
|
|
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
|
|
356
|
-
- fpk:
|
|
357
|
-
- className:
|
|
358
|
-
- scriptName:
|
|
359
|
-
- scriptNumber:
|
|
360
|
-
- scriptType:
|
|
361
|
-
- description:
|
|
362
|
-
- bizAppId:
|
|
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
|
|
402
|
-
"
|
|
403
|
-
"
|
|
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
|
|
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 (必填):
|
|
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
|
|
429
|
-
- success:
|
|
430
|
-
- message:
|
|
431
|
-
- fpk:
|
|
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 本地
|