kcode-pi 0.1.0
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/README.md +358 -0
- package/dist/cli/kcode.d.ts +15 -0
- package/dist/cli/kcode.js +153 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +7 -0
- package/docs/KCODE_DISTRIBUTION.md +91 -0
- package/extensions/kingdee-harness.ts +180 -0
- package/extensions/kingdee-header.ts +122 -0
- package/extensions/kingdee-tools.ts +379 -0
- package/knowledge/.backup/v1.0.0/version.json +10 -0
- package/knowledge/cangqiong/product-notes.md +15 -0
- package/knowledge/common/business-flows.md +115 -0
- package/knowledge/common/config-guides.md +110 -0
- package/knowledge/common/error-patterns.md +170 -0
- package/knowledge/common/implementation.md +144 -0
- package/knowledge/cosmic/hard-constraints.md +38 -0
- package/knowledge/cosmic/ksql-datafix.md +34 -0
- package/knowledge/cosmic/platform-baseline.md +32 -0
- package/knowledge/cosmic/plugin-decision-matrix.md +40 -0
- package/knowledge/cosmic/review-checklist.md +40 -0
- package/knowledge/cosmic/unittest.md +35 -0
- package/knowledge/enterprise/api-reference.md +186 -0
- package/knowledge/enterprise/code-patterns.md +217 -0
- package/knowledge/enterprise/plugin-lifecycle.md +188 -0
- package/knowledge/enterprise/tables.json +159 -0
- package/knowledge/flagship/api-reference.md +237 -0
- package/knowledge/flagship/code-patterns.md +246 -0
- package/knowledge/flagship/cosmic-platform-note.md +15 -0
- package/knowledge/flagship/plugin-lifecycle.md +248 -0
- package/knowledge/flagship/tables.json +159 -0
- package/knowledge/version.json +10 -0
- package/knowledge/xinghan/product-notes.md +15 -0
- package/package.json +71 -0
- package/prompts/kd-discuss.md +11 -0
- package/prompts/kd-execute.md +12 -0
- package/prompts/kd-plan.md +12 -0
- package/prompts/kd-ship.md +12 -0
- package/prompts/kd-spec.md +12 -0
- package/prompts/kd-verify.md +12 -0
- package/skills/kd-check/SKILL.md +26 -0
- package/skills/kd-cosmic-dev/SKILL.md +82 -0
- package/skills/kd-cosmic-review/SKILL.md +90 -0
- package/skills/kd-cosmic-unittest/SKILL.md +92 -0
- package/skills/kd-debug/SKILL.md +30 -0
- package/skills/kd-discuss/SKILL.md +24 -0
- package/skills/kd-execute/SKILL.md +22 -0
- package/skills/kd-gen/SKILL.md +34 -0
- package/skills/kd-ksql/SKILL.md +86 -0
- package/skills/kd-plan/SKILL.md +24 -0
- package/skills/kd-ship/SKILL.md +22 -0
- package/skills/kd-spec/SKILL.md +24 -0
- package/skills/kd-verify/SKILL.md +22 -0
- package/themes/kcode-dark.json +81 -0
- package/vendor/kingdee-skills/cosmic-unittest/SKILL.md +788 -0
- package/vendor/kingdee-skills/cosmic-unittest/author-cache.json +5 -0
- package/vendor/kingdee-skills/cosmic-unittest/cosmic-unittest-skill-overview.html +746 -0
- package/vendor/kingdee-skills/cosmic-unittest/examples/business-test.md +205 -0
- package/vendor/kingdee-skills/cosmic-unittest/examples/common-test.md +257 -0
- package/vendor/kingdee-skills/cosmic-unittest/examples/formplugin-test.md +560 -0
- package/vendor/kingdee-skills/cosmic-unittest/examples/op-plugin-test.md +231 -0
- package/vendor/kingdee-skills/cosmic-unittest/examples/validator-test.md +232 -0
- package/vendor/kingdee-skills/cosmic-unittest/patterns/business-helper.md +184 -0
- package/vendor/kingdee-skills/cosmic-unittest/patterns/common-module.md +355 -0
- package/vendor/kingdee-skills/cosmic-unittest/patterns/convert-plugin.md +130 -0
- package/vendor/kingdee-skills/cosmic-unittest/patterns/formplugin.md +235 -0
- package/vendor/kingdee-skills/cosmic-unittest/patterns/op-plugin.md +226 -0
- package/vendor/kingdee-skills/cosmic-unittest/patterns/validator.md +206 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/SKILL.md +674 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/advanced-scenario-checklist.md +307 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/algox-performance-checklist.md +129 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/coding-standard-checklist.md +491 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/cosmic-api-checklist.md +285 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/data-access-checklist.md +261 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/data-transaction-checklist.md +390 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/domain-logic-checklist.md +295 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/form-plugin-checklist.md +508 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/infra-checklist.md +254 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/ksql-checklist.md +305 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/lifecycle-checklist.md +298 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/operation-plugin-checklist.md +442 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/test-mock-checklist.md +120 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/ui-performance-checklist.md +320 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/scripts/pattern-matcher.py +336 -0
- package/vendor/kingdee-skills/kingdee-cosmic-reviewer/scripts/review-score-calculator.py +121 -0
- package/vendor/kingdee-skills/ok-cosmic/CHANGELOG.md +295 -0
- package/vendor/kingdee-skills/ok-cosmic/README.md +460 -0
- package/vendor/kingdee-skills/ok-cosmic/SKILL.md +287 -0
- package/vendor/kingdee-skills/ok-cosmic/agents/openai.yaml +17 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/BatchImportPluginTemplate.java +93 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/BillPlugInTemplate.java +156 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/ConvertPlugInTemplate.java +255 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/FormPluginTemplate.java +597 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/IWorkflowPluginTemplate.java +91 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/ListPluginTemplate.java +194 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/OpPluginTemplate.java +201 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/OpenApiControllerTemplate.java +103 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/PrintPluginTemplate.java +95 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/ReportFormPluginTemplate.java +257 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/ReportListDataPluginTemplate.java +70 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/StandardTreeListPluginTemplate.java +130 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/TaskTemplate.java +80 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/TreeListPluginTemplate.java +152 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/WriteBackPlugInTemplate.java +286 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/attachment/AttachmentUploadBindSample.java +93 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/botp/BotpTracePushSample.java +168 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/botp/SampleConvertPlugin.java +223 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/cache/SampleCacheUsage.java +218 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/concurrent/SampleThreadPoolBatch.java +156 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/data/DynamicObjectCrudSample.java +205 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/data/DynamicObjectOpsSample.java +100 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/BeforeOperationConfirmSample.java +217 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/ConfirmDialogSample.java +131 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/EntryRowCalculateSample.java +116 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/F7FilterSample.java +134 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/GetAndSetValueSample.java +176 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/HyperlinkJumpSample.java +124 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/OpenBillModalSample.java +253 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/ReturnParentDataSample.java +295 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/TreeControlSample.java +140 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/ViewControlOpsSample.java +132 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/list/ListPluginBasicSample.java +170 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/list/ListPreOpenFilterSample.java +68 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/message/MessageNotifySample.java +95 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/mq/SampleMQConsumer.java +198 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/mq/sample_mq.xml +15 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/operation/OpAddValidatorsSample.java +137 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/operation/OperationOptionBridgeSample.java +228 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/package-info.java +19 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/query/BaseDataQuerySample.java +194 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/query/BatchQuerySample.java +368 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/query/DataSetQueryStatSample.java +131 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/report/SampleReportFormPlugin.java +179 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/report/SampleReportListDataPlugin.java +616 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/snippets-guide.md +64 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/task/ScheduleTaskSample.java +160 -0
- package/vendor/kingdee-skills/ok-cosmic/assets/snippets/workflow/SampleWorkflowPlugin.java +302 -0
- package/vendor/kingdee-skills/ok-cosmic/manifest.json +78 -0
- package/vendor/kingdee-skills/ok-cosmic/ok-cosmic-intro.html +903 -0
- package/vendor/kingdee-skills/ok-cosmic/references/adv/attachment-api.md +114 -0
- package/vendor/kingdee-skills/ok-cosmic/references/adv/botp-convert.md +98 -0
- package/vendor/kingdee-skills/ok-cosmic/references/adv/dynamic-object.md +113 -0
- package/vendor/kingdee-skills/ok-cosmic/references/adv/entity-metadata.md +123 -0
- package/vendor/kingdee-skills/ok-cosmic/references/adv/event-lifecycle.md +184 -0
- package/vendor/kingdee-skills/ok-cosmic/references/adv/flex-prop.md +114 -0
- package/vendor/kingdee-skills/ok-cosmic/references/adv/form-utils.md +133 -0
- package/vendor/kingdee-skills/ok-cosmic/references/adv/operate-chain.md +159 -0
- package/vendor/kingdee-skills/ok-cosmic/references/adv/plugin-base.md +218 -0
- package/vendor/kingdee-skills/ok-cosmic/references/adv/query-dataset.md +149 -0
- package/vendor/kingdee-skills/ok-cosmic/references/adv/request-context.md +88 -0
- package/vendor/kingdee-skills/ok-cosmic/references/adv/view-handler.md +157 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-bill.md +76 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-botp.md +70 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-form.md +165 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-import.md +69 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-list.md +227 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-openapi.md +112 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-operation.md +135 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-print.md +65 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-report-data.md +64 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-report-form.md +90 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-task.md +62 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-tree-list.md +71 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-workflow.md +82 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-writeback.md +71 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-algo.md +67 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-cache.md +63 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-dynamic-model-svc.md +82 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-dynamic-object.md +70 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-entity-model.md +61 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-exception.md +64 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-file.md +63 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-id.md +47 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-lock.md +61 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-log.md +63 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-network-control.md +70 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-orm-access.md +78 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-request-context.md +62 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-threadpool.md +63 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-tx.md +64 -0
- package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-utils.md +67 -0
- package/vendor/kingdee-skills/ok-cosmic/requirements.txt +2 -0
- package/vendor/kingdee-skills/ok-cosmic/rules/a-layer-rules.json +24 -0
- package/vendor/kingdee-skills/ok-cosmic/rules/anti-patterns.md +48 -0
- package/vendor/kingdee-skills/ok-cosmic/rules/cheat-sheet.md +256 -0
- package/vendor/kingdee-skills/ok-cosmic/rules/coding-preferences.md +140 -0
- package/vendor/kingdee-skills/ok-cosmic/rules/constraints.md +61 -0
- package/vendor/kingdee-skills/ok-cosmic/rules/decision-matrix.md +222 -0
- package/vendor/kingdee-skills/ok-cosmic/rules/intent-routing.md +94 -0
- package/vendor/kingdee-skills/ok-cosmic/rules/platform-baseline.md +69 -0
- package/vendor/kingdee-skills/ok-cosmic/rules/post-check.md +109 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/config_loader.py +204 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-api-knowledge.py +910 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-basedata-query.py +359 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-config-check.py +181 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-extpoints-query.py +389 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-form-metadata.py +856 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-post-check.py +262 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-post-lint.py +293 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/lint/__init__.py +2 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/lint/base.py +393 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/lint/resource_check.py +176 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/lint/scene_check.py +375 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/lint/style_check.py +434 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/lint/verify_check.py +36 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/route_client.py +186 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/script_utils.py +40 -0
- package/vendor/kingdee-skills/ok-cosmic/scripts/sqlite_cache.py +142 -0
- package/vendor/kingdee-skills/ok-cosmic/setup/cuslib/kd-cd-cosmic-commons.jar +0 -0
- package/vendor/kingdee-skills/ok-cosmic/setup/cuslib/kd-cd-cosmic-features.jar +0 -0
- package/vendor/kingdee-skills/ok-cosmic/setup/ok-cosmic-docs.db +0 -0
- package/vendor/kingdee-skills/ok-cosmic/setup/ok-cosmic.json +13 -0
- package/vendor/kingdee-skills/ok-cosmic/setup/setup-mac.sh +18 -0
- package/vendor/kingdee-skills/ok-cosmic/setup/setup-windows.bat +53 -0
- package/vendor/kingdee-skills/ok-cosmic/setup/setup.jar +0 -0
- package/vendor/kingdee-skills/ok-ksql/SKILL.md +81 -0
- package/vendor/kingdee-skills/ok-ksql/agents/openai.yaml +7 -0
- package/vendor/kingdee-skills/ok-ksql/manifest.json +14 -0
- package/vendor/kingdee-skills/ok-ksql/references/ksql-datafix.md +452 -0
- package/vendor/kingdee-skills/ok-ksql/scripts/ksql_lint.py +363 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# 完整统一决策矩阵
|
|
2
|
+
|
|
3
|
+
从 [SKILL.md](../SKILL.md) 的精简索引命中场景后,只读对应 **1 个主场景卡片** 和 **0-1 个能力卡片**;不要整文通读。
|
|
4
|
+
|
|
5
|
+
如果用户原话还是业务描述、还没翻译成“操作插件 / 表单插件 / 基础资料能力”等技术场景,先读 [intent-routing.md](intent-routing.md) 做语义翻译。
|
|
6
|
+
|
|
7
|
+
> **提示**:`入口类` 主要用于缩小 `cosmic-api-knowledge.py` 的搜索范围,不代表必须直接依赖原生 API;`封装文档` 和 `原生文档` 都应先读 `TL;DR`,确实需要时再展开全文。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 插件类
|
|
12
|
+
|
|
13
|
+
### 表单插件 {#form-plugin}
|
|
14
|
+
- **关键词**: 表单 UI / 字段联动 / 控件交互
|
|
15
|
+
- **入口类**: `AbstractFormPluginExt` · `kd.bos.form.plugin.*` · `kd.bos.form` / `kd.bos.form.control`
|
|
16
|
+
- **先读**: [plugin-base.md](../references/adv/plugin-base.md) · [form-utils.md](../references/adv/form-utils.md)
|
|
17
|
+
- **兜底**: [plugin-form.md](../references/base/plugin/plugin-form.md)
|
|
18
|
+
- **模板**: [FormPluginTemplate.java](../assets/FormPluginTemplate.java)
|
|
19
|
+
- **片段**: [ViewControlOpsSample](../assets/snippets/form/ViewControlOpsSample.java) · [F7FilterSample](../assets/snippets/form/F7FilterSample.java)
|
|
20
|
+
|
|
21
|
+
### 单据插件 {#bill-plugin}
|
|
22
|
+
- **关键词**: 单据 UI / 审核提交按钮
|
|
23
|
+
- **入口类**: `AbstractBillPlugInExt` · `kd.bos.form.plugin.*`
|
|
24
|
+
- **先读**: [plugin-base.md](../references/adv/plugin-base.md) · [form-utils.md](../references/adv/form-utils.md)
|
|
25
|
+
- **兜底**: [plugin-bill.md](../references/base/plugin/plugin-bill.md)
|
|
26
|
+
- **模板**: [BillPlugInTemplate.java](../assets/BillPlugInTemplate.java)
|
|
27
|
+
- **片段**: [OpenBillModalSample](../assets/snippets/form/OpenBillModalSample.java)
|
|
28
|
+
|
|
29
|
+
### 列表插件 {#list-plugin}
|
|
30
|
+
- **关键词**: 列表 / 多选操作 / 批量
|
|
31
|
+
- **入口类**: `AbstractListPluginExt` · `AbstractListPlugin` · `kd.bos.list`
|
|
32
|
+
- **先读**: [plugin-base.md](../references/adv/plugin-base.md)
|
|
33
|
+
- **兜底**: [plugin-list.md](../references/base/plugin/plugin-list.md)
|
|
34
|
+
- **模板**: [ListPluginTemplate.java](../assets/ListPluginTemplate.java)
|
|
35
|
+
- **片段**: [ListPluginBasicSample](../assets/snippets/list/ListPluginBasicSample.java)
|
|
36
|
+
|
|
37
|
+
### 树列表插件 {#tree-plugins}
|
|
38
|
+
- **关键词**: 左树右表(单据 / 基础资料)
|
|
39
|
+
- **入口类**: `AbstractTreeListPlugin` · `kd.bos.list`
|
|
40
|
+
- **先读**: [plugin-base.md](../references/adv/plugin-base.md)
|
|
41
|
+
- **兜底**: [plugin-tree-list.md](../references/base/plugin/plugin-tree-list.md)
|
|
42
|
+
- **模板(单据)**: [TreeListPluginTemplate.java](../assets/TreeListPluginTemplate.java)
|
|
43
|
+
- **模板(基础资料)**: [StandardTreeListPluginTemplate.java](../assets/StandardTreeListPluginTemplate.java)
|
|
44
|
+
- **片段**: [TreeControlSample](../assets/snippets/form/TreeControlSample.java)
|
|
45
|
+
|
|
46
|
+
### 操作插件 {#op-plugin}
|
|
47
|
+
- **关键词**: 审核 / 保存 / 状态流转 / 校验 / 回滚
|
|
48
|
+
- **入口类**: `OpUtils` · `OperateChain` · `OperationServiceHelper`(MQ/后台任务) · `AbstractOperationServicePlugIn` · `kd.bos.entity.plugin.*`
|
|
49
|
+
- **先读**: [operate-chain.md](../references/adv/operate-chain.md)
|
|
50
|
+
- **兜底**: [plugin-operation.md](../references/base/plugin/plugin-operation.md) · [sdk-dynamic-model-svc.md](../references/base/sdk/sdk-dynamic-model-svc.md)
|
|
51
|
+
- **模板**: [OpPluginTemplate.java](../assets/OpPluginTemplate.java)
|
|
52
|
+
- **片段**: [OpAddValidatorsSample](../assets/snippets/operation/OpAddValidatorsSample.java) · [OperationOptionBridgeSample](../assets/snippets/operation/OperationOptionBridgeSample.java)
|
|
53
|
+
|
|
54
|
+
### 转换插件 {#convert-plugin}
|
|
55
|
+
- **关键词**: 下推 / 选单 / 来源追踪 / 转换
|
|
56
|
+
- **入口类**: `BotpUtils` · `kd.bos.entity.botp.runtime.*` · `AbstractConvertPlugIn`
|
|
57
|
+
- **先读**: [botp-convert.md](../references/adv/botp-convert.md)
|
|
58
|
+
- **兜底**: [plugin-botp.md](../references/base/plugin/plugin-botp.md)
|
|
59
|
+
- **模板**: [ConvertPlugInTemplate.java](../assets/ConvertPlugInTemplate.java)
|
|
60
|
+
- **片段**: [BotpTracePushSample](../assets/snippets/botp/BotpTracePushSample.java)
|
|
61
|
+
|
|
62
|
+
### 反写插件 {#writeback-plugin}
|
|
63
|
+
- **关键词**: 明确指定反写插件 / BOTP 回写阶段
|
|
64
|
+
- **入口类**: `AbstractWriteBackPlugIn` · `ConvertServiceHelper`
|
|
65
|
+
- **先读**: [botp-convert.md](../references/adv/botp-convert.md)
|
|
66
|
+
- **兜底**: [plugin-writeback.md](../references/base/plugin/plugin-writeback.md)
|
|
67
|
+
- **模板**: [WriteBackPlugInTemplate.java](../assets/WriteBackPlugInTemplate.java)
|
|
68
|
+
- **片段**: [BatchQuerySample](../assets/snippets/query/BatchQuerySample.java)
|
|
69
|
+
|
|
70
|
+
### 报表插件 {#report-form-plugin}
|
|
71
|
+
- **关键词**: 报表 / 数据分析 / 过滤容器
|
|
72
|
+
- **入口类**: `AbstractReportFormPlugin`
|
|
73
|
+
- **兜底**: [plugin-report-form.md](../references/base/plugin/plugin-report-form.md)
|
|
74
|
+
- **模板**: [ReportFormPluginTemplate.java](../assets/ReportFormPluginTemplate.java)
|
|
75
|
+
- **片段**: [SampleReportFormPlugin](../assets/snippets/report/SampleReportFormPlugin.java)
|
|
76
|
+
|
|
77
|
+
### 报表取数插件 {#report-data-plugin}
|
|
78
|
+
- **关键词**: 报表取数 / 动态列 / 自定义数据源
|
|
79
|
+
- **入口类**: `AbstractReportListDataPlugin` · `DataSet`
|
|
80
|
+
- **先读**: [query-dataset.md](../references/adv/query-dataset.md)
|
|
81
|
+
- **兜底**: [plugin-report-data.md](../references/base/plugin/plugin-report-data.md) · [sdk-algo.md](../references/base/sdk/sdk-algo.md)
|
|
82
|
+
- **模板**: [ReportListDataPluginTemplate.java](../assets/ReportListDataPluginTemplate.java)
|
|
83
|
+
- **片段**: [SampleReportListDataPlugin](../assets/snippets/report/SampleReportListDataPlugin.java) · [DataSetQueryStatSample](../assets/snippets/query/DataSetQueryStatSample.java)
|
|
84
|
+
|
|
85
|
+
### 打印插件 {#print-plugin}
|
|
86
|
+
- **关键词**: 打印 / 套打
|
|
87
|
+
- **入口类**: `AbstractPrintPlugin`
|
|
88
|
+
- **兜底**: [plugin-print.md](../references/base/plugin/plugin-print.md)
|
|
89
|
+
- **模板**: [PrintPluginTemplate.java](../assets/PrintPluginTemplate.java)
|
|
90
|
+
|
|
91
|
+
### OpenAPI 控制器 {#openapi-plugin}
|
|
92
|
+
- **关键词**: OpenAPI / 外部集成
|
|
93
|
+
- **入口类**: `@ApiController` · `@ApiMapping` · `kd.bos.openapi.common.custom.annotation`
|
|
94
|
+
- **兜底**: [plugin-openapi.md](../references/base/plugin/plugin-openapi.md)
|
|
95
|
+
- **模板**: [OpenApiControllerTemplate.java](../assets/OpenApiControllerTemplate.java)
|
|
96
|
+
|
|
97
|
+
### 后台任务 {#task-plugin}
|
|
98
|
+
- **关键词**: 后台任务 / 定时 / 调度作业
|
|
99
|
+
- **入口类**: `AbstractTask`
|
|
100
|
+
- **兜底**: [plugin-task.md](../references/base/plugin/plugin-task.md)
|
|
101
|
+
- **模板**: [TaskTemplate.java](../assets/TaskTemplate.java)
|
|
102
|
+
- **片段**: [ScheduleTaskSample](../assets/snippets/task/ScheduleTaskSample.java)
|
|
103
|
+
|
|
104
|
+
### 工作流插件 {#workflow-plugin}
|
|
105
|
+
- **关键词**: 工作流 / 审批流
|
|
106
|
+
- **入口类**: `IWorkflowPlugin`
|
|
107
|
+
- **兜底**: [plugin-workflow.md](../references/base/plugin/plugin-workflow.md)
|
|
108
|
+
- **模板**: [IWorkflowPluginTemplate.java](../assets/IWorkflowPluginTemplate.java)
|
|
109
|
+
- **片段**: [SampleWorkflowPlugin](../assets/snippets/workflow/SampleWorkflowPlugin.java)
|
|
110
|
+
|
|
111
|
+
### 导入插件 {#import-plugin}
|
|
112
|
+
- **关键词**: 导入 / 批量导入
|
|
113
|
+
- **入口类**: `BatchImportPlugin`
|
|
114
|
+
- **兜底**: [plugin-import.md](../references/base/plugin/plugin-import.md)
|
|
115
|
+
- **模板**: [BatchImportPluginTemplate.java](../assets/BatchImportPluginTemplate.java)
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 能力类
|
|
120
|
+
|
|
121
|
+
### 视图打开与跳转 {#view-handler}
|
|
122
|
+
- **关键词**: 后台打开表单 / 列表 / 新页签跳转
|
|
123
|
+
- **入口类**: `ViewHandler` · `AutoCloseViewHandler` · `FormShowParameter`
|
|
124
|
+
- **先读**: [view-handler.md](../references/adv/view-handler.md)
|
|
125
|
+
|
|
126
|
+
### 界面工具 {#form-utils}
|
|
127
|
+
- **关键词**: 表单控件 / UI 消息 / 元数据读取
|
|
128
|
+
- **入口类**: `FormUtils` · `this.getView()` / `this.getModel()` · `kd.bos.form.control`
|
|
129
|
+
- **先读**: [form-utils.md](../references/adv/form-utils.md)
|
|
130
|
+
- **兜底**: [plugin-form.md](../references/base/plugin/plugin-form.md) · [plugin-bill.md](../references/base/plugin/plugin-bill.md) · [plugin-list.md](../references/base/plugin/plugin-list.md)
|
|
131
|
+
- **片段**: [ViewControlOpsSample](../assets/snippets/form/ViewControlOpsSample.java) · [ConfirmDialogSample](../assets/snippets/form/ConfirmDialogSample.java) · [F7FilterSample](../assets/snippets/form/F7FilterSample.java)
|
|
132
|
+
|
|
133
|
+
### 查询与存取 {#query}
|
|
134
|
+
- **关键词**: 数据加载 / 保存 / 查询 / ORM / DataSet
|
|
135
|
+
- **入口类**: `AlgoUtils` · `BusinessDataServiceHelper` · `QueryServiceHelper` · `QFilter`
|
|
136
|
+
- **先读**: [query-dataset.md](../references/adv/query-dataset.md)
|
|
137
|
+
- **兜底**: [sdk-dynamic-model-svc.md](../references/base/sdk/sdk-dynamic-model-svc.md) · [sdk-orm-access.md](../references/base/sdk/sdk-orm-access.md) · [sdk-algo.md](../references/base/sdk/sdk-algo.md)
|
|
138
|
+
- **片段**: [BatchQuerySample](../assets/snippets/query/BatchQuerySample.java) · [DataSetQueryStatSample](../assets/snippets/query/DataSetQueryStatSample.java) · [DynamicObjectCrudSample](../assets/snippets/data/DynamicObjectCrudSample.java)
|
|
139
|
+
|
|
140
|
+
### 基础资料 {#basedata}
|
|
141
|
+
- **关键词**: 基础资料 / 管控策略 / 分配 / 个性化 / 客户 / 物料 / 供应商
|
|
142
|
+
- **入口类**: `BaseDataServiceHelper` · `kd.bd.master.*`
|
|
143
|
+
- **先读**: 先用 `cosmic-form-metadata.py` / `cosmic-basedata-query.py` 确认 `refType` / `entityId`
|
|
144
|
+
- **兜底**: [sdk-dynamic-model-svc.md](../references/base/sdk/sdk-dynamic-model-svc.md)
|
|
145
|
+
- **片段**: [BaseDataQuerySample](../assets/snippets/query/BaseDataQuerySample.java)
|
|
146
|
+
|
|
147
|
+
### 数据包操作 {#dynamic-object}
|
|
148
|
+
- **关键词**: DynamicObject / 安全取值 / 序列化
|
|
149
|
+
- **入口类**: `DynamicObjectUtils` · `DynamicObject` · `DynamicObjectCollection`
|
|
150
|
+
- **先读**: [dynamic-object.md](../references/adv/dynamic-object.md)
|
|
151
|
+
- **兜底**: [sdk-dynamic-object.md](../references/base/sdk/sdk-dynamic-object.md)
|
|
152
|
+
- **片段**: [DynamicObjectOpsSample](../assets/snippets/data/DynamicObjectOpsSample.java) · [DynamicObjectCrudSample](../assets/snippets/data/DynamicObjectCrudSample.java)
|
|
153
|
+
|
|
154
|
+
### 元数据与结构 {#entity-metadata}
|
|
155
|
+
- **关键词**: 实体元数据 / 字段路径 / DBRoute
|
|
156
|
+
- **入口类**: `EntityUtils` · `EntityType` · `MainEntityType` · `IDataEntityProperty` · `DBRoute`
|
|
157
|
+
- **先读**: [entity-metadata.md](../references/adv/entity-metadata.md)
|
|
158
|
+
- **兜底**: [sdk-entity-model.md](../references/base/sdk/sdk-entity-model.md) · [sdk-orm-access.md](../references/base/sdk/sdk-orm-access.md)
|
|
159
|
+
|
|
160
|
+
### 弹性域 {#flex-prop}
|
|
161
|
+
- **关键词**: 弹性域字段 / 值解析
|
|
162
|
+
- **入口类**: `FlexPropUtils` · `FlexType`
|
|
163
|
+
- **先读**: [flex-prop.md](../references/adv/flex-prop.md)
|
|
164
|
+
|
|
165
|
+
### 消息通知 {#message}
|
|
166
|
+
- **关键词**: 消息 / 邮件 / 短信 / 企业微信
|
|
167
|
+
- **入口类**: `MessageServiceHelper` · `EmailInfo` · `kd.bos.message.api.*`
|
|
168
|
+
- **片段**: [MessageNotifySample](../assets/snippets/message/MessageNotifySample.java)
|
|
169
|
+
|
|
170
|
+
### 附件与文件 {#attachment}
|
|
171
|
+
- **关键词**: 附件上传 / 下载 / 复制 / 面板绑定
|
|
172
|
+
- **入口类**: `AttachmentUtils` · `AttachmentServiceHelper`
|
|
173
|
+
- **先读**: [attachment-api.md](../references/adv/attachment-api.md)
|
|
174
|
+
- **兜底**: [sdk-file.md](../references/base/sdk/sdk-file.md)
|
|
175
|
+
- **片段**: [AttachmentUploadBindSample](../assets/snippets/attachment/AttachmentUploadBindSample.java)
|
|
176
|
+
|
|
177
|
+
### 上下文判定 {#request-context}
|
|
178
|
+
- **关键词**: 组织 / 权限 / 上下文
|
|
179
|
+
- **入口类**: `RequestContext`
|
|
180
|
+
- **先读**: [request-context.md](../references/adv/request-context.md)
|
|
181
|
+
- **兜底**: [sdk-request-context.md](../references/base/sdk/sdk-request-context.md)
|
|
182
|
+
|
|
183
|
+
### 并发上下文恢复 {#thread-context}
|
|
184
|
+
- **关键词**: 跨线程身份 / 上下文恢复 / 线程池批量处理
|
|
185
|
+
- **入口类**: `RequestContextUtils` · `ThreadPools` · `ExecutorServiceUtils`
|
|
186
|
+
- **先读**: [request-context.md](../references/adv/request-context.md)
|
|
187
|
+
- **兜底**: [sdk-threadpool.md](../references/base/sdk/sdk-threadpool.md) · [sdk-request-context.md](../references/base/sdk/sdk-request-context.md)
|
|
188
|
+
- **片段**: [SampleThreadPoolBatch](../assets/snippets/concurrent/SampleThreadPoolBatch.java)
|
|
189
|
+
|
|
190
|
+
### 消息队列 {#mq-consumer}
|
|
191
|
+
- **关键词**: MQ / 消息队列 / 异步消费 / MessageConsumer
|
|
192
|
+
- **入口类**: `MessageConsumer` · `MessageAcker` · `MQFactory` · `DLock`
|
|
193
|
+
- **片段**: [SampleMQConsumer](../assets/snippets/mq/SampleMQConsumer.java)
|
|
194
|
+
|
|
195
|
+
### 缓存 {#cache}
|
|
196
|
+
- **关键词**: 缓存 / AppCache / 分布式缓存 / loadFromCache
|
|
197
|
+
- **入口类**: `AppCache` · `DistributeSessionlessCache` · `CacheFactory` · `BusinessDataServiceHelper.loadFromCache`
|
|
198
|
+
- **片段**: [SampleCacheUsage](../assets/snippets/cache/SampleCacheUsage.java)
|
|
199
|
+
|
|
200
|
+
### 业务拓展点查询 {#business-extpoints}
|
|
201
|
+
- **关键词**: 业务拓展点 / 业务扩展点 / SDK 扩展接口 / 扩展场景 / 扩展插件 / 二开接口 / Java 示例 / route extpoint
|
|
202
|
+
- **入口脚本**: `scripts/cosmic-extpoints-query.py`
|
|
203
|
+
- **先查**: `python3 <SKILL_ROOT>/scripts/cosmic-extpoints-query.py --config ok-cosmic.json get --keyword <业务关键词>`
|
|
204
|
+
- **示例查询**: 默认不用 `--full`;只有当需要生成实现代码或查看返回中的 Java/代码示例时,才追加 `--full`
|
|
205
|
+
- **后续验证**: 若 `--full` 返回中已有清晰 Java 示例代码(能识别 `implements` 接口、`@Override` 方法、参数与返回值),可先按示例生成,不强制立即调用 `cosmic-api-knowledge.py detail`;若示例缺失/不完整/签名仍不确定,再用 `detail <full.class.Name>` 确认
|
|
206
|
+
- **约束**: 仅用于定位标准产品预留的业务拓展点候选;不要误判为 OpenAPI 控制器、表单插件或操作插件;示例代码可作为优先参考,但示例不清晰时不得猜方法签名
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 未命中兜底 {#fallback}
|
|
211
|
+
|
|
212
|
+
如果需求不属于上述任一场景:
|
|
213
|
+
|
|
214
|
+
1. **需求可拆分**:将需求拆解为多个子任务,分别匹配卡片。常见组合:
|
|
215
|
+
- "保存前校验 + 审核后下推 + 下推后在 BOTP 回写阶段更新来源" → 操作插件 + 转换插件 + 反写插件
|
|
216
|
+
- "列表批量选中 + 弹窗编辑 + 保存" → 列表插件 + 表单插件 + 操作插件
|
|
217
|
+
2. **纯后端逻辑(无 UI、无操作链)**:优先命中"查询与存取""基础资料""消息通知""并发上下文恢复"等能力卡片;仍不匹配时,再回到 `references/base/sdk/` 原生 SDK 文档。
|
|
218
|
+
3. **用户想找标准产品预留扩展点**:优先命中 [`#business-extpoints`](#business-extpoints),用业务关键词查候选接口,再用 `cosmic-api-knowledge.py detail` 校验签名。
|
|
219
|
+
4. **仍无法匹配**:先用 `cosmic-api-knowledge.py search <关键词>` 搜索相关类,再向用户确认具体实现方向后动手。
|
|
220
|
+
5. **扩展代码库探索**(需 `ok-cosmic.json` 配置 `extensionRepos`):
|
|
221
|
+
用当前需求关键词在扩展代码库中搜索相关 Java 实现,
|
|
222
|
+
作为实现参考但仍需遵守 ok-cosmic 规范。
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# 自然语言意图到场景路由
|
|
2
|
+
|
|
3
|
+
当用户不是直接说“操作插件 / 表单插件 / 基础资料能力”,而是用业务话术描述需求时,先把需求翻译为:
|
|
4
|
+
|
|
5
|
+
1. **时机**:事情发生在什么时候
|
|
6
|
+
2. **载体**:发生在哪个界面 / 后台 / 接口
|
|
7
|
+
3. **能力**:还需要补哪种公共能力
|
|
8
|
+
|
|
9
|
+
完成翻译后,再去 [decision-matrix.md](decision-matrix.md) 命中 **1 行主场景** 和 **0-1 行能力行**。
|
|
10
|
+
|
|
11
|
+
## 路由三问
|
|
12
|
+
|
|
13
|
+
### 1. 先看“时机词”
|
|
14
|
+
|
|
15
|
+
| 用户常说的话 | 优先翻译为 | 对应矩阵 |
|
|
16
|
+
|------------------------------------------|---|---|
|
|
17
|
+
| 保存前 / 提交时 / 审核时 / 反审核时 / 操作时 / 校验不通过不让继续 | 操作链上的校验、补值、拦截 | [`#op-plugin`](decision-matrix.md#op-plugin) |
|
|
18
|
+
| 下推时 / 选单时 / 来源单据带出 / 转换规则 | 单据转换阶段处理 | [`#convert-plugin`](decision-matrix.md#convert-plugin) |
|
|
19
|
+
| 用户口头说“反写” / 回写上游 / 更新来源状态 | 默认先按“更新关联实体”理解,不直接等于反写插件 | 继续结合主动作判断是操作插件、转换插件,还是明确的反写插件 |
|
|
20
|
+
| 明确指定“反写插件” / 明确要求挂在 BOTP 回写阶段 | 反写阶段处理 | [`#writeback-plugin`](decision-matrix.md#writeback-plugin) |
|
|
21
|
+
| 打开页面时 / 页面初始化时 / 字段值改变 / 点击按钮时 / F7 过滤时 | 前端交互阶段处理 | 继续看“载体词”决定是表单、单据还是列表插件 |
|
|
22
|
+
| 定时执行 / 每天跑一次 / 后台批处理 / 异步任务 | 后台任务 | [`#task-plugin`](decision-matrix.md#task-plugin) |
|
|
23
|
+
| 外部系统调用 / 提供接口 / 回调地址 | OpenAPI 控制器 | [`#openapi-plugin`](decision-matrix.md#openapi-plugin) |
|
|
24
|
+
| 打印时 / 套打时 | 打印插件 | [`#print-plugin`](decision-matrix.md#print-plugin) |
|
|
25
|
+
| 导入时 / 批量导入时 | 导入插件 | [`#import-plugin`](decision-matrix.md#import-plugin) |
|
|
26
|
+
| 审批流节点 / 工作流动作 | 工作流插件 | [`#workflow-plugin`](decision-matrix.md#workflow-plugin) |
|
|
27
|
+
|
|
28
|
+
### 2. 再看“载体词”
|
|
29
|
+
|
|
30
|
+
当前一步落到“前端交互阶段处理”时,再用载体词确定主场景:
|
|
31
|
+
|
|
32
|
+
| 用户常说的话 | 优先翻译为 | 对应矩阵 |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| 表单上 / 页面上 / 打开窗口 / 字段联动 / 控件显示隐藏 | 表单插件 | [`#form-plugin`](decision-matrix.md#form-plugin) |
|
|
35
|
+
| 单据界面 / 单据头体 / 审核提交按钮 / 单据字段联动 / 分录操作(增行、删行、遍历分录) | 单据插件 | [`#bill-plugin`](decision-matrix.md#bill-plugin) |
|
|
36
|
+
| 列表上 / 列表按钮 / 多选批量 / 批量处理 | 列表插件 | [`#list-plugin`](decision-matrix.md#list-plugin) |
|
|
37
|
+
| 左边树右边表 / 树节点切换右侧数据 | 树列表插件 | [`#tree-plugins`](decision-matrix.md#tree-plugins) |
|
|
38
|
+
| 报表过滤条件界面 / 报表表单 | 报表插件 | [`#report-form-plugin`](decision-matrix.md#report-form-plugin) |
|
|
39
|
+
| 报表取数 / 动态列 / 自定义数据源 | 报表取数插件 | [`#report-data-plugin`](decision-matrix.md#report-data-plugin) |
|
|
40
|
+
|
|
41
|
+
### 3. 最后补“能力词”
|
|
42
|
+
|
|
43
|
+
主场景命中后,再按需补 0-1 行能力行:
|
|
44
|
+
|
|
45
|
+
| 用户常说的话 | 追加能力 | 对应矩阵 |
|
|
46
|
+
|---|---|---|
|
|
47
|
+
| 打开页面 / 弹窗 / 新页签 / 跳详情页 | 视图打开与跳转 | [`#view-handler`](decision-matrix.md#view-handler) |
|
|
48
|
+
| 查数据 / 聚合 / 统计 / ORM / DataSet | 查询与存取 | [`#query`](decision-matrix.md#query) |
|
|
49
|
+
| 基础资料编码名称 / 引用类型 / 管控策略 / 分配 | 基础资料 | [`#basedata`](decision-matrix.md#basedata) |
|
|
50
|
+
| DynamicObject / 安全取值 / 序列化 | 数据包操作 | [`#dynamic-object`](decision-matrix.md#dynamic-object) |
|
|
51
|
+
| 实体元数据 / 字段路径 / DBRoute | 元数据与结构 | [`#entity-metadata`](decision-matrix.md#entity-metadata) |
|
|
52
|
+
| 分录行数据 / 增删分录行 / 遍历分录 / createNewEntryRow / getEntryRowEntity | 数据包操作 | [`#dynamic-object`](decision-matrix.md#dynamic-object) |
|
|
53
|
+
| 弹性域 / Flex | 弹性域 | [`#flex-prop`](decision-matrix.md#flex-prop) |
|
|
54
|
+
| 附件上传下载复制 | 附件与文件 | [`#attachment`](decision-matrix.md#attachment) |
|
|
55
|
+
| 邮件 / 消息 / 企业微信 / 短信 | 消息通知 | [`#message`](decision-matrix.md#message) |
|
|
56
|
+
| 组织权限 / 登录组织 / 上下文判定 | 上下文判定 | [`#request-context`](decision-matrix.md#request-context) |
|
|
57
|
+
| 异步线程 / 跨线程身份恢复 | 并发上下文恢复 | [`#thread-context`](decision-matrix.md#thread-context) |
|
|
58
|
+
| 业务拓展点 / 业务扩展点 / SDK 扩展接口 / 扩展场景编码 / Java 示例 | 业务拓展点查询 | [`#business-extpoints`](decision-matrix.md#business-extpoints) |
|
|
59
|
+
|
|
60
|
+
## 常见例句翻译
|
|
61
|
+
|
|
62
|
+
| 用户原话 | 推荐翻译 | 命中方式 |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| 我想在审核的时候校验金额不能超过 100 万 | 时机=`审核时`,载体=`单据操作`,能力=`校验` | 主场景命中 [`#op-plugin`](decision-matrix.md#op-plugin) |
|
|
65
|
+
| 页面上选了供应商以后自动过滤物料 | 时机=`字段值改变`,载体=`单据/表单界面`,能力=`基础资料 + 界面工具` | 主场景命中 [`#bill-plugin`](decision-matrix.md#bill-plugin) 或 [`#form-plugin`](decision-matrix.md#form-plugin),补 [`#basedata`](decision-matrix.md#basedata) |
|
|
66
|
+
| 列表里加个批量审核按钮 | 时机=`点击按钮时`,载体=`列表`,能力=`操作链` | 主场景命中 [`#list-plugin`](decision-matrix.md#list-plugin),必要时补 [`#op-plugin`](decision-matrix.md#op-plugin) |
|
|
67
|
+
| 下推后把来源单据状态改成已处理 | 时机=`下推后`,意图=`更新来源实体` | 先按转换链路中的实体更新理解;只有明确指定反写插件 / BOTP 回写点时才命中 [`#writeback-plugin`](decision-matrix.md#writeback-plugin) |
|
|
68
|
+
| 每天凌晨同步一次基础资料 | 时机=`定时执行`,载体=`后台`,能力=`基础资料` | 主场景命中 [`#task-plugin`](decision-matrix.md#task-plugin),补 [`#basedata`](decision-matrix.md#basedata) |
|
|
69
|
+
| 提供一个接口给 WMS 回传结果 | 时机=`外部系统调用`,载体=`接口` | 主场景命中 [`#openapi-plugin`](decision-matrix.md#openapi-plugin) |
|
|
70
|
+
| 查一下应付相关的业务拓展点,并给一个 Java 示例 | 意图=`查询型`,能力=`业务拓展点查询` | 直接命中 [`#business-extpoints`](decision-matrix.md#business-extpoints),先查候选,再按 `interfaceName` 查签名 |
|
|
71
|
+
|
|
72
|
+
## 查询型意图补充
|
|
73
|
+
|
|
74
|
+
如果用户不是要立刻写插件,而是在问“有没有 / 查一下 / 找一下 / 列出 / 给我示例”某类标准产品预留能力,可直接命中能力卡片。
|
|
75
|
+
|
|
76
|
+
| 用户常说的话 | 优先翻译为 | 对应矩阵 |
|
|
77
|
+
|---|---|---|
|
|
78
|
+
| 查业务拓展点 / 找业务扩展点 / 有没有标准扩展点 / SDK 扩展接口 / 扩展场景编码 / 业务扩展插件 / 给我拓展点 Java 示例 | 查询标准产品预留的业务拓展点候选 | [`#business-extpoints`](decision-matrix.md#business-extpoints) |
|
|
79
|
+
| 查类 / 查方法 / 看签名 / 这个接口有哪些方法 | SDK API 事实查询 | 先走 `cosmic-api-knowledge.py`;已命中具体实现需求时再回到矩阵 |
|
|
80
|
+
|
|
81
|
+
## 常见误判修正
|
|
82
|
+
|
|
83
|
+
- 用户说“审核页面上”但真正诉求是“审核动作发生时拦截”,优先按 [`#op-plugin`](decision-matrix.md#op-plugin) 处理,不要因为提到“页面”就误判成表单/单据插件。
|
|
84
|
+
- 用户说“页面上实时提示”“字段改了马上联动”,优先按表单 / 单据插件处理,不要误判成操作插件。
|
|
85
|
+
- “反写”相关(见上方路由三问):口头“反写”/“下推后更新来源”默认理解为业务语义的“更新关联实体”;只有用户明确说“反写插件”“WriteBackPlugIn”“BOTP 回写阶段”时才命中 [`#writeback-plugin`](decision-matrix.md#writeback-plugin)。
|
|
86
|
+
- 用户说“后台自动跑”“定时同步”,优先按 [`#task-plugin`](decision-matrix.md#task-plugin),不要误判成列表按钮或操作插件。
|
|
87
|
+
- 用户只说“查一批数据统计结果”,如果没有插件时机词,优先从 [`#query`](decision-matrix.md#query) 开始,而不是先猜某种插件。
|
|
88
|
+
- 用户说“业务拓展点 / 业务扩展点 / SDK 扩展接口 / 扩展场景编码”时,优先按 [`#business-extpoints`](decision-matrix.md#business-extpoints) 查询候选;不要误判成“OpenAPI 控制器”或直接套用 BOS 表单/操作插件模板。
|
|
89
|
+
|
|
90
|
+
## 仍然模糊时
|
|
91
|
+
|
|
92
|
+
- 先用本文件把用户原话翻成“时机 + 载体 + 能力”。
|
|
93
|
+
- 再去 [decision-matrix.md](decision-matrix.md) 读对应 1-3 行。
|
|
94
|
+
- 还是模糊时,按 [decision-matrix.md#fallback](decision-matrix.md#fallback) 的兜底流程继续。
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# 苍穹平台总规范摘要
|
|
2
|
+
|
|
3
|
+
> 本文件为**平台级基线参考**(guidance-only),不直接对应 lint 脚本。
|
|
4
|
+
|
|
5
|
+
本文件提炼自《苍穹定制化开发规范》,用于补齐 `ok-cosmic` 现有规则中较少覆盖的"平台级基线"。遇到命名、设计器/PDM、数据库、多语言、微服务、日志异常等问题时,优先回看本文件。
|
|
6
|
+
|
|
7
|
+
## 1. 命名基线
|
|
8
|
+
|
|
9
|
+
- 扩展项目推荐命名:`<isv>-<cloud>-<system>[-<type>]-ext`
|
|
10
|
+
- 扩展包强制命名:`<isv>.<cloud>[.<app>][.<feature>][.<suffix>]`
|
|
11
|
+
- 类名使用 `UpperCamelCase`,方法和变量使用 `lowerCamelCase`
|
|
12
|
+
- 不要使用难以理解的随意缩写;抽象类以 `Abstract` 开头,异常类以 `Exception` 结尾,枚举类以 `Enum` 结尾
|
|
13
|
+
- Service/DAO 命名遵守语义前缀:单条 `get`,列表 `list`,统计 `count`,新增 `save/insert`,删除 `remove/delete`,修改 `update`
|
|
14
|
+
- 插件类推荐后缀:
|
|
15
|
+
- 表单插件:`{Name}FormPlugin`
|
|
16
|
+
- 单据插件:`{Name}BillPlugin`
|
|
17
|
+
- 列表插件:`{Name}ListPlugin`
|
|
18
|
+
- 操作插件:`{Name}OpPlugin`
|
|
19
|
+
- 报表插件:`{Name}RptPlugin`
|
|
20
|
+
- 统一使用 `Plugin` 后缀写法
|
|
21
|
+
|
|
22
|
+
## 2. 数据模型与数据库基线
|
|
23
|
+
|
|
24
|
+
- 业务对象表结构以 PDM 和设计器定义为准;表、字段、缺省值、可空性、实体关系必须一致
|
|
25
|
+
- 二开表名使用 `tk_<isv>_...` 前缀,二开字段使用 `fk_<isv>_...` 前缀
|
|
26
|
+
- 业务对象禁止使用数据库视图;设计器主键属性必须与表定义主键一致
|
|
27
|
+
- 表、字段、键、约束、缺省值名称长度不超过 24;字段 Key 推荐 4-24 位,由字母、数字、下划线组成
|
|
28
|
+
- 不要设计数据库外键;关系通过平台模型和应用逻辑维护
|
|
29
|
+
- 表结构总字节长度不得超过 8K(LOB / Image / nText 不计入)
|
|
30
|
+
- 新建表必须定义主键,新建数据库对象必须具备聚集索引
|
|
31
|
+
- 金额、数量字段必须使用精确数值类型 `Decimal`,明确精度,`not null` 且默认值为 `0`
|
|
32
|
+
- 字段长度按实际场景定义,禁止无依据地统一使用 `255`
|
|
33
|
+
- 同一业务含义的字段,在不同表中的类型定义要保持一致
|
|
34
|
+
|
|
35
|
+
## 3. 开发与插件基线
|
|
36
|
+
|
|
37
|
+
- 禁止在 `beforeBindData`、`afterBindData` 中修改数据对象
|
|
38
|
+
- 禁止在 `initialize()` 中注册控件事件、设置控件可见性或编写界面逻辑
|
|
39
|
+
- 事件注册放 `registerListener`;界面控制放 `afterBindData`
|
|
40
|
+
- 禁止继承标准产品插件;禁止禁用原厂插件
|
|
41
|
+
- 创建引用对象或给引用属性赋值时,必须保证对象类型与属性复杂类型一致
|
|
42
|
+
- 从缓存拿到的实体元数据是单例,修改前必须先 `clone`
|
|
43
|
+
- 判断"记录是否存在"优先使用 `QueryServiceHelper.exists(...)`
|
|
44
|
+
|
|
45
|
+
## 4. 性能与数据访问基线
|
|
46
|
+
|
|
47
|
+
- 所有脚本优先使用 KSQL,避免数据库方言
|
|
48
|
+
- SQL/KSQL 传参优先使用参数化形式,避免字符串拼接
|
|
49
|
+
- 不推荐在循环中访问数据库、Redis、`view.updateView()`
|
|
50
|
+
- 查询按需取字段;除加载完整单据/基础资料场景外,不要默认查询所有字段
|
|
51
|
+
|
|
52
|
+
## 5. 异常、日志与多语言基线
|
|
53
|
+
|
|
54
|
+
- 统一使用 `KDException` 体系;业务异常必须使用 `KDBizException`,不要用 `RuntimeException` 代替
|
|
55
|
+
- 包装异常时必须保留原始 `cause`
|
|
56
|
+
- 程序日志统一使用 `kd.bos.logging.Log`;业务操作日志统一使用 `BizLog.log`
|
|
57
|
+
- 输出日志前先判断日志级别;禁止在大循环中打日志;记录异常时用 `logger.error("描述", e)`
|
|
58
|
+
- 多语言字段必须使用多语言文本控件,并落库为 `NVARCHAR`
|
|
59
|
+
- 非多语言字段但会存中文等非英文字符时,也应优先定义为 `NVARCHAR`
|
|
60
|
+
- 多语言表推荐单独建表,命名 `{表名}_L`,主键字段名固定为 `FPKID`
|
|
61
|
+
- 提示语不要通过多个中文片段拼接;应以完整句模板配合 `ResManager.loadKDString(...)` 和 `String.format(...)`
|
|
62
|
+
- 运行时会按登录语言切换的提示语,不要固化成静态常量,改为方法内实时获取
|
|
63
|
+
|
|
64
|
+
## 6. 微服务与报表基线
|
|
65
|
+
|
|
66
|
+
- 二开微服务必须通过服务工厂注册;服务工厂类推荐:`<isv>.<cloud>.<app>.ServiceFactory`
|
|
67
|
+
- 微服务接口放在对应业务包下,命名保持“业务域 + Service”风格
|
|
68
|
+
- 报表场景避免在循环中做 SQL;大子单据体关联时优先拆分查询,减少 `left join`
|
|
69
|
+
- 充分利用 `algo` 做分组、去重、计数;避免把大数据量聚合放到 Java 循环里
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# 生成后自动校验规则 (Post-Check)
|
|
2
|
+
|
|
3
|
+
`cosmic-post-check.py` 是代码生成后的**统一检查入口**,自动选择最佳检查策略:
|
|
4
|
+
|
|
5
|
+
- **Gradle 项目** → 先执行 `./gradlew :module:compileJava` 真实编译,编译成功后继续执行 `cosmic-post-lint.py` 场景/风格校验
|
|
6
|
+
- **非 Gradle 项目** → 直接回退到 `cosmic-post-lint.py` 静态校验(A/B/C 三层规则)
|
|
7
|
+
|
|
8
|
+
## 触发条件
|
|
9
|
+
|
|
10
|
+
**每次 AI 生成或修改 `.java` 文件后,自动触发**,无需用户手动请求。
|
|
11
|
+
|
|
12
|
+
## 默认执行命令
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
python3 <SKILL_ROOT>/scripts/cosmic-post-check.py <生成的文件或目录> --fix-hint
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
脚本自动判断:
|
|
19
|
+
1. 从目标文件路径**向上查找** `build.gradle` + `settings.gradle` 共存的目录
|
|
20
|
+
2. 找到 → Gradle 编译(解析 `settings.gradle` 确定模块,执行 `./gradlew :module:compileJava`)
|
|
21
|
+
3. 未找到 → 回退到 `cosmic-post-lint.py --fix-hint` 静态校验
|
|
22
|
+
|
|
23
|
+
## 严格模式(仅 post-lint 回退时生效)
|
|
24
|
+
|
|
25
|
+
当用户明确要求"严格校验""模板升级治理""补事实来源留痕"时,再追加严格模式:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
python3 <SKILL_ROOT>/scripts/cosmic-post-check.py <生成的文件或目录> --fix-hint --strict
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
说明:
|
|
32
|
+
|
|
33
|
+
- `--strict` 仅在非 Gradle 回退到 post-lint 时生效,额外检查 **C 层** 验证来源注释。
|
|
34
|
+
- Gradle 编译本身不区分严格/宽松——编译器检查的就是全部约束。
|
|
35
|
+
|
|
36
|
+
## 校验流程
|
|
37
|
+
|
|
38
|
+
```mermaid
|
|
39
|
+
graph TB
|
|
40
|
+
A[生成代码] --> B[执行 cosmic-post-check.py]
|
|
41
|
+
B --> C{Gradle 项目?}
|
|
42
|
+
C -->|否| D[post-lint 静态校验]
|
|
43
|
+
C -->|是| E{JAVA_HOME 兼容?}
|
|
44
|
+
E -->|否| F[post-lint + JDK 设置提示]
|
|
45
|
+
E -->|是| G[Gradle 编译]
|
|
46
|
+
G -->|失败| H[修复代码 → 重新编译]
|
|
47
|
+
G -->|成功| I[继续 post-lint 场景/风格校验]
|
|
48
|
+
I --> J[综合结果]
|
|
49
|
+
D --> J
|
|
50
|
+
F --> J
|
|
51
|
+
J -->|有 ERROR| K[必须修复 → 重新校验]
|
|
52
|
+
J -->|仅 WARNING| L[新代码优先修复]
|
|
53
|
+
J -->|全部通过| M[完成]
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
> **注意**:Gradle 编译成功后仍会串联执行 post-lint 的场景/风格校验(SCENE/STYLE/RESOURCE 等规则),编译器不检测这些业务约束。最终以两者综合结果为准。
|
|
57
|
+
|
|
58
|
+
## 问题级别处理策略
|
|
59
|
+
|
|
60
|
+
| 级别 | 对应层级 | 处理方式 | 是否阻断 |
|
|
61
|
+
|------|----------|----------|----------|
|
|
62
|
+
| ❌ ERROR | A 层硬约束 | 必须修复,根据 fix-hint 立即调整代码 | **是** |
|
|
63
|
+
| ⚠️ WARNING | B 层推荐项 | 新代码优先修复;历史代码可结合上下文评估是否本次顺手收敛 | 否 |
|
|
64
|
+
| 💡 INFO | C 层治理项 | 记录为治理建议,适合模板升级或批量重构 | 否 |
|
|
65
|
+
|
|
66
|
+
## 规则 ID 与层级映射
|
|
67
|
+
|
|
68
|
+
| ID 前缀 | 默认层级 | 类别 | 来源文件 |
|
|
69
|
+
|----------|----------|------|----------|
|
|
70
|
+
| `SCENE-*` | A / B | 场景错配 | anti-patterns.md |
|
|
71
|
+
| `STYLE-*` | A / B | 编码风格 | coding-preferences.md |
|
|
72
|
+
| `RESOURCE-*` | A / B | 资源管理 | coding-preferences.md |
|
|
73
|
+
| `VERIFY-*` | C | 验证来源留痕 | coding-preferences.md |
|
|
74
|
+
|
|
75
|
+
补充说明:
|
|
76
|
+
|
|
77
|
+
- SDK 类名、方法签名和 `@Override` 正确性改为**事前**通过 `cosmic-api-knowledge.py detail/search`、模板、cheat-sheet 或编译验证,不再由 post-lint 的 `API-*` 规则兜底。
|
|
78
|
+
- `SCENE-*` 与 `RESOURCE-*` 中既有明显硬错误,也可能包含偏治理的 warning;解释结果时要结合上下文,不要机械套标签。
|
|
79
|
+
- 需要按 A 层(ERROR)处理的 SCENE/STYLE/RESOURCE 规则 ID,统一定义在 [a-layer-rules.json](a-layer-rules.json)(单一可信源),`cosmic-post-lint.py` 在运行时自动加载。如需新增/移除 A 层规则,直接编辑该 JSON 文件即可,无需改脚本代码。
|
|
80
|
+
- `VERIFY-*` 默认不作为当前交付阻断项;只有在 `--strict` 或用户明确要求治理时,才应提高关注度。
|
|
81
|
+
|
|
82
|
+
## 修复示例
|
|
83
|
+
|
|
84
|
+
当收到如下 lint 报告时:
|
|
85
|
+
|
|
86
|
+
```text
|
|
87
|
+
❌ L 31 [SCENE-001] 操作插件中调用 this.getView()
|
|
88
|
+
> this.getView().showMessage("处理完成");
|
|
89
|
+
💊 修复: 操作插件无 UI 上下文,改为 addErrorMessage / 日志 / 返回操作结果
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
AI 应:
|
|
93
|
+
|
|
94
|
+
1. 将 UI 交互逻辑移出操作插件,或改为操作结果/日志方式表达。
|
|
95
|
+
2. 重新执行 lint,确认该 `ERROR` 消失
|
|
96
|
+
3. 检查修复是否引入新的场景错配或资源问题
|
|
97
|
+
|
|
98
|
+
## 对历史项目的解释口径
|
|
99
|
+
|
|
100
|
+
- 出现 `WARNING` 时,不要直接说"代码错误";优先判断它是:
|
|
101
|
+
- 新代码应该采用的默认写法
|
|
102
|
+
- 历史项目当前可接受的兼容写法
|
|
103
|
+
- 适合本次顺手治理的低风险改动
|
|
104
|
+
- 出现 `INFO` 时,默认按"后续治理建议"表述,不要阻断当前任务。
|
|
105
|
+
|
|
106
|
+
## 重试上限
|
|
107
|
+
|
|
108
|
+
- 单个文件最多执行 **3 轮** "修复 → 复检" 循环
|
|
109
|
+
- 3 轮后仍有 `ERROR` 未消除,停止自动修复,向用户报告剩余问题清单并请求人工介入
|