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.
Files changed (219) hide show
  1. package/README.md +358 -0
  2. package/dist/cli/kcode.d.ts +15 -0
  3. package/dist/cli/kcode.js +153 -0
  4. package/dist/cli/main.d.ts +2 -0
  5. package/dist/cli/main.js +7 -0
  6. package/docs/KCODE_DISTRIBUTION.md +91 -0
  7. package/extensions/kingdee-harness.ts +180 -0
  8. package/extensions/kingdee-header.ts +122 -0
  9. package/extensions/kingdee-tools.ts +379 -0
  10. package/knowledge/.backup/v1.0.0/version.json +10 -0
  11. package/knowledge/cangqiong/product-notes.md +15 -0
  12. package/knowledge/common/business-flows.md +115 -0
  13. package/knowledge/common/config-guides.md +110 -0
  14. package/knowledge/common/error-patterns.md +170 -0
  15. package/knowledge/common/implementation.md +144 -0
  16. package/knowledge/cosmic/hard-constraints.md +38 -0
  17. package/knowledge/cosmic/ksql-datafix.md +34 -0
  18. package/knowledge/cosmic/platform-baseline.md +32 -0
  19. package/knowledge/cosmic/plugin-decision-matrix.md +40 -0
  20. package/knowledge/cosmic/review-checklist.md +40 -0
  21. package/knowledge/cosmic/unittest.md +35 -0
  22. package/knowledge/enterprise/api-reference.md +186 -0
  23. package/knowledge/enterprise/code-patterns.md +217 -0
  24. package/knowledge/enterprise/plugin-lifecycle.md +188 -0
  25. package/knowledge/enterprise/tables.json +159 -0
  26. package/knowledge/flagship/api-reference.md +237 -0
  27. package/knowledge/flagship/code-patterns.md +246 -0
  28. package/knowledge/flagship/cosmic-platform-note.md +15 -0
  29. package/knowledge/flagship/plugin-lifecycle.md +248 -0
  30. package/knowledge/flagship/tables.json +159 -0
  31. package/knowledge/version.json +10 -0
  32. package/knowledge/xinghan/product-notes.md +15 -0
  33. package/package.json +71 -0
  34. package/prompts/kd-discuss.md +11 -0
  35. package/prompts/kd-execute.md +12 -0
  36. package/prompts/kd-plan.md +12 -0
  37. package/prompts/kd-ship.md +12 -0
  38. package/prompts/kd-spec.md +12 -0
  39. package/prompts/kd-verify.md +12 -0
  40. package/skills/kd-check/SKILL.md +26 -0
  41. package/skills/kd-cosmic-dev/SKILL.md +82 -0
  42. package/skills/kd-cosmic-review/SKILL.md +90 -0
  43. package/skills/kd-cosmic-unittest/SKILL.md +92 -0
  44. package/skills/kd-debug/SKILL.md +30 -0
  45. package/skills/kd-discuss/SKILL.md +24 -0
  46. package/skills/kd-execute/SKILL.md +22 -0
  47. package/skills/kd-gen/SKILL.md +34 -0
  48. package/skills/kd-ksql/SKILL.md +86 -0
  49. package/skills/kd-plan/SKILL.md +24 -0
  50. package/skills/kd-ship/SKILL.md +22 -0
  51. package/skills/kd-spec/SKILL.md +24 -0
  52. package/skills/kd-verify/SKILL.md +22 -0
  53. package/themes/kcode-dark.json +81 -0
  54. package/vendor/kingdee-skills/cosmic-unittest/SKILL.md +788 -0
  55. package/vendor/kingdee-skills/cosmic-unittest/author-cache.json +5 -0
  56. package/vendor/kingdee-skills/cosmic-unittest/cosmic-unittest-skill-overview.html +746 -0
  57. package/vendor/kingdee-skills/cosmic-unittest/examples/business-test.md +205 -0
  58. package/vendor/kingdee-skills/cosmic-unittest/examples/common-test.md +257 -0
  59. package/vendor/kingdee-skills/cosmic-unittest/examples/formplugin-test.md +560 -0
  60. package/vendor/kingdee-skills/cosmic-unittest/examples/op-plugin-test.md +231 -0
  61. package/vendor/kingdee-skills/cosmic-unittest/examples/validator-test.md +232 -0
  62. package/vendor/kingdee-skills/cosmic-unittest/patterns/business-helper.md +184 -0
  63. package/vendor/kingdee-skills/cosmic-unittest/patterns/common-module.md +355 -0
  64. package/vendor/kingdee-skills/cosmic-unittest/patterns/convert-plugin.md +130 -0
  65. package/vendor/kingdee-skills/cosmic-unittest/patterns/formplugin.md +235 -0
  66. package/vendor/kingdee-skills/cosmic-unittest/patterns/op-plugin.md +226 -0
  67. package/vendor/kingdee-skills/cosmic-unittest/patterns/validator.md +206 -0
  68. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/SKILL.md +674 -0
  69. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/advanced-scenario-checklist.md +307 -0
  70. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/algox-performance-checklist.md +129 -0
  71. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/coding-standard-checklist.md +491 -0
  72. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/cosmic-api-checklist.md +285 -0
  73. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/data-access-checklist.md +261 -0
  74. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/data-transaction-checklist.md +390 -0
  75. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/domain-logic-checklist.md +295 -0
  76. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/form-plugin-checklist.md +508 -0
  77. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/infra-checklist.md +254 -0
  78. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/ksql-checklist.md +305 -0
  79. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/lifecycle-checklist.md +298 -0
  80. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/operation-plugin-checklist.md +442 -0
  81. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/test-mock-checklist.md +120 -0
  82. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/ui-performance-checklist.md +320 -0
  83. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/scripts/pattern-matcher.py +336 -0
  84. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/scripts/review-score-calculator.py +121 -0
  85. package/vendor/kingdee-skills/ok-cosmic/CHANGELOG.md +295 -0
  86. package/vendor/kingdee-skills/ok-cosmic/README.md +460 -0
  87. package/vendor/kingdee-skills/ok-cosmic/SKILL.md +287 -0
  88. package/vendor/kingdee-skills/ok-cosmic/agents/openai.yaml +17 -0
  89. package/vendor/kingdee-skills/ok-cosmic/assets/BatchImportPluginTemplate.java +93 -0
  90. package/vendor/kingdee-skills/ok-cosmic/assets/BillPlugInTemplate.java +156 -0
  91. package/vendor/kingdee-skills/ok-cosmic/assets/ConvertPlugInTemplate.java +255 -0
  92. package/vendor/kingdee-skills/ok-cosmic/assets/FormPluginTemplate.java +597 -0
  93. package/vendor/kingdee-skills/ok-cosmic/assets/IWorkflowPluginTemplate.java +91 -0
  94. package/vendor/kingdee-skills/ok-cosmic/assets/ListPluginTemplate.java +194 -0
  95. package/vendor/kingdee-skills/ok-cosmic/assets/OpPluginTemplate.java +201 -0
  96. package/vendor/kingdee-skills/ok-cosmic/assets/OpenApiControllerTemplate.java +103 -0
  97. package/vendor/kingdee-skills/ok-cosmic/assets/PrintPluginTemplate.java +95 -0
  98. package/vendor/kingdee-skills/ok-cosmic/assets/ReportFormPluginTemplate.java +257 -0
  99. package/vendor/kingdee-skills/ok-cosmic/assets/ReportListDataPluginTemplate.java +70 -0
  100. package/vendor/kingdee-skills/ok-cosmic/assets/StandardTreeListPluginTemplate.java +130 -0
  101. package/vendor/kingdee-skills/ok-cosmic/assets/TaskTemplate.java +80 -0
  102. package/vendor/kingdee-skills/ok-cosmic/assets/TreeListPluginTemplate.java +152 -0
  103. package/vendor/kingdee-skills/ok-cosmic/assets/WriteBackPlugInTemplate.java +286 -0
  104. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/attachment/AttachmentUploadBindSample.java +93 -0
  105. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/botp/BotpTracePushSample.java +168 -0
  106. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/botp/SampleConvertPlugin.java +223 -0
  107. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/cache/SampleCacheUsage.java +218 -0
  108. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/concurrent/SampleThreadPoolBatch.java +156 -0
  109. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/data/DynamicObjectCrudSample.java +205 -0
  110. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/data/DynamicObjectOpsSample.java +100 -0
  111. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/BeforeOperationConfirmSample.java +217 -0
  112. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/ConfirmDialogSample.java +131 -0
  113. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/EntryRowCalculateSample.java +116 -0
  114. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/F7FilterSample.java +134 -0
  115. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/GetAndSetValueSample.java +176 -0
  116. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/HyperlinkJumpSample.java +124 -0
  117. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/OpenBillModalSample.java +253 -0
  118. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/ReturnParentDataSample.java +295 -0
  119. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/TreeControlSample.java +140 -0
  120. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/ViewControlOpsSample.java +132 -0
  121. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/list/ListPluginBasicSample.java +170 -0
  122. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/list/ListPreOpenFilterSample.java +68 -0
  123. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/message/MessageNotifySample.java +95 -0
  124. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/mq/SampleMQConsumer.java +198 -0
  125. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/mq/sample_mq.xml +15 -0
  126. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/operation/OpAddValidatorsSample.java +137 -0
  127. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/operation/OperationOptionBridgeSample.java +228 -0
  128. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/package-info.java +19 -0
  129. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/query/BaseDataQuerySample.java +194 -0
  130. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/query/BatchQuerySample.java +368 -0
  131. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/query/DataSetQueryStatSample.java +131 -0
  132. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/report/SampleReportFormPlugin.java +179 -0
  133. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/report/SampleReportListDataPlugin.java +616 -0
  134. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/snippets-guide.md +64 -0
  135. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/task/ScheduleTaskSample.java +160 -0
  136. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/workflow/SampleWorkflowPlugin.java +302 -0
  137. package/vendor/kingdee-skills/ok-cosmic/manifest.json +78 -0
  138. package/vendor/kingdee-skills/ok-cosmic/ok-cosmic-intro.html +903 -0
  139. package/vendor/kingdee-skills/ok-cosmic/references/adv/attachment-api.md +114 -0
  140. package/vendor/kingdee-skills/ok-cosmic/references/adv/botp-convert.md +98 -0
  141. package/vendor/kingdee-skills/ok-cosmic/references/adv/dynamic-object.md +113 -0
  142. package/vendor/kingdee-skills/ok-cosmic/references/adv/entity-metadata.md +123 -0
  143. package/vendor/kingdee-skills/ok-cosmic/references/adv/event-lifecycle.md +184 -0
  144. package/vendor/kingdee-skills/ok-cosmic/references/adv/flex-prop.md +114 -0
  145. package/vendor/kingdee-skills/ok-cosmic/references/adv/form-utils.md +133 -0
  146. package/vendor/kingdee-skills/ok-cosmic/references/adv/operate-chain.md +159 -0
  147. package/vendor/kingdee-skills/ok-cosmic/references/adv/plugin-base.md +218 -0
  148. package/vendor/kingdee-skills/ok-cosmic/references/adv/query-dataset.md +149 -0
  149. package/vendor/kingdee-skills/ok-cosmic/references/adv/request-context.md +88 -0
  150. package/vendor/kingdee-skills/ok-cosmic/references/adv/view-handler.md +157 -0
  151. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-bill.md +76 -0
  152. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-botp.md +70 -0
  153. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-form.md +165 -0
  154. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-import.md +69 -0
  155. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-list.md +227 -0
  156. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-openapi.md +112 -0
  157. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-operation.md +135 -0
  158. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-print.md +65 -0
  159. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-report-data.md +64 -0
  160. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-report-form.md +90 -0
  161. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-task.md +62 -0
  162. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-tree-list.md +71 -0
  163. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-workflow.md +82 -0
  164. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-writeback.md +71 -0
  165. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-algo.md +67 -0
  166. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-cache.md +63 -0
  167. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-dynamic-model-svc.md +82 -0
  168. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-dynamic-object.md +70 -0
  169. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-entity-model.md +61 -0
  170. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-exception.md +64 -0
  171. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-file.md +63 -0
  172. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-id.md +47 -0
  173. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-lock.md +61 -0
  174. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-log.md +63 -0
  175. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-network-control.md +70 -0
  176. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-orm-access.md +78 -0
  177. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-request-context.md +62 -0
  178. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-threadpool.md +63 -0
  179. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-tx.md +64 -0
  180. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-utils.md +67 -0
  181. package/vendor/kingdee-skills/ok-cosmic/requirements.txt +2 -0
  182. package/vendor/kingdee-skills/ok-cosmic/rules/a-layer-rules.json +24 -0
  183. package/vendor/kingdee-skills/ok-cosmic/rules/anti-patterns.md +48 -0
  184. package/vendor/kingdee-skills/ok-cosmic/rules/cheat-sheet.md +256 -0
  185. package/vendor/kingdee-skills/ok-cosmic/rules/coding-preferences.md +140 -0
  186. package/vendor/kingdee-skills/ok-cosmic/rules/constraints.md +61 -0
  187. package/vendor/kingdee-skills/ok-cosmic/rules/decision-matrix.md +222 -0
  188. package/vendor/kingdee-skills/ok-cosmic/rules/intent-routing.md +94 -0
  189. package/vendor/kingdee-skills/ok-cosmic/rules/platform-baseline.md +69 -0
  190. package/vendor/kingdee-skills/ok-cosmic/rules/post-check.md +109 -0
  191. package/vendor/kingdee-skills/ok-cosmic/scripts/config_loader.py +204 -0
  192. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-api-knowledge.py +910 -0
  193. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-basedata-query.py +359 -0
  194. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-config-check.py +181 -0
  195. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-extpoints-query.py +389 -0
  196. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-form-metadata.py +856 -0
  197. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-post-check.py +262 -0
  198. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-post-lint.py +293 -0
  199. package/vendor/kingdee-skills/ok-cosmic/scripts/lint/__init__.py +2 -0
  200. package/vendor/kingdee-skills/ok-cosmic/scripts/lint/base.py +393 -0
  201. package/vendor/kingdee-skills/ok-cosmic/scripts/lint/resource_check.py +176 -0
  202. package/vendor/kingdee-skills/ok-cosmic/scripts/lint/scene_check.py +375 -0
  203. package/vendor/kingdee-skills/ok-cosmic/scripts/lint/style_check.py +434 -0
  204. package/vendor/kingdee-skills/ok-cosmic/scripts/lint/verify_check.py +36 -0
  205. package/vendor/kingdee-skills/ok-cosmic/scripts/route_client.py +186 -0
  206. package/vendor/kingdee-skills/ok-cosmic/scripts/script_utils.py +40 -0
  207. package/vendor/kingdee-skills/ok-cosmic/scripts/sqlite_cache.py +142 -0
  208. package/vendor/kingdee-skills/ok-cosmic/setup/cuslib/kd-cd-cosmic-commons.jar +0 -0
  209. package/vendor/kingdee-skills/ok-cosmic/setup/cuslib/kd-cd-cosmic-features.jar +0 -0
  210. package/vendor/kingdee-skills/ok-cosmic/setup/ok-cosmic-docs.db +0 -0
  211. package/vendor/kingdee-skills/ok-cosmic/setup/ok-cosmic.json +13 -0
  212. package/vendor/kingdee-skills/ok-cosmic/setup/setup-mac.sh +18 -0
  213. package/vendor/kingdee-skills/ok-cosmic/setup/setup-windows.bat +53 -0
  214. package/vendor/kingdee-skills/ok-cosmic/setup/setup.jar +0 -0
  215. package/vendor/kingdee-skills/ok-ksql/SKILL.md +81 -0
  216. package/vendor/kingdee-skills/ok-ksql/agents/openai.yaml +7 -0
  217. package/vendor/kingdee-skills/ok-ksql/manifest.json +14 -0
  218. package/vendor/kingdee-skills/ok-ksql/references/ksql-datafix.md +452 -0
  219. package/vendor/kingdee-skills/ok-ksql/scripts/ksql_lint.py +363 -0
@@ -0,0 +1,903 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>ok-cosmic v1.3.0 — 金蝶云苍穹 AI 开发技能</title>
7
+ <style>
8
+ :root {
9
+ --primary: #2563eb;
10
+ --primary-dark: #1d4ed8;
11
+ --accent: #f59e0b;
12
+ --bg: #0f172a;
13
+ --bg-card: #1e293b;
14
+ --bg-light: #334155;
15
+ --text: #e2e8f0;
16
+ --text-muted: #94a3b8;
17
+ --success: #22c55e;
18
+ --error: #ef4444;
19
+ --warning: #f59e0b;
20
+ --info: #3b82f6;
21
+ --gradient: linear-gradient(135deg, #2563eb 0%, #7c3aed 100%);
22
+ }
23
+ * { margin: 0; padding: 0; box-sizing: border-box; }
24
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Microsoft YaHei', sans-serif; background: var(--bg); color: var(--text); overflow: hidden; height: 100vh; }
25
+
26
+ /* Slide container */
27
+ .deck { position: relative; width: 100vw; height: 100vh; }
28
+ .slide { position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 60px 80px; opacity: 0; transform: translateX(60px); transition: all 0.5s cubic-bezier(.4,0,.2,1); pointer-events: none; overflow-y: auto; }
29
+ .slide.active { opacity: 1; transform: translateX(0); pointer-events: auto; }
30
+ .slide.prev { opacity: 0; transform: translateX(-60px); }
31
+
32
+ /* Navigation */
33
+ .nav { position: fixed; bottom: 30px; left: 50%; transform: translateX(-50%); display: flex; gap: 12px; z-index: 100; }
34
+ .nav button { background: var(--bg-light); border: none; color: var(--text); width: 44px; height: 44px; border-radius: 50%; cursor: pointer; font-size: 18px; transition: all .2s; display: flex; align-items: center; justify-content: center; }
35
+ .nav button:hover { background: var(--primary); }
36
+ .progress { position: fixed; top: 0; left: 0; height: 3px; background: var(--gradient); transition: width .4s; z-index: 100; }
37
+ .page-num { position: fixed; bottom: 36px; right: 40px; color: var(--text-muted); font-size: 14px; z-index: 100; font-variant-numeric: tabular-nums; }
38
+
39
+ /* Typography */
40
+ h1 { font-size: 3em; font-weight: 800; line-height: 1.2; margin-bottom: 16px; }
41
+ h2 { font-size: 2.2em; font-weight: 700; margin-bottom: 24px; color: #fff; }
42
+ h3 { font-size: 1.3em; font-weight: 600; margin-bottom: 12px; color: var(--accent); }
43
+ p, li { font-size: 1.1em; line-height: 1.7; color: var(--text); }
44
+ .subtitle { font-size: 1.35em; color: var(--text-muted); margin-bottom: 32px; }
45
+ .tag { display: inline-block; padding: 4px 14px; border-radius: 20px; font-size: .85em; font-weight: 600; margin: 3px; }
46
+ .tag-blue { background: rgba(37,99,235,.2); color: #60a5fa; border: 1px solid rgba(37,99,235,.3); }
47
+ .tag-purple { background: rgba(124,58,237,.2); color: #a78bfa; border: 1px solid rgba(124,58,237,.3); }
48
+ .tag-green { background: rgba(34,197,94,.2); color: #4ade80; border: 1px solid rgba(34,197,94,.3); }
49
+ .tag-amber { background: rgba(245,158,11,.2); color: #fbbf24; border: 1px solid rgba(245,158,11,.3); }
50
+ .tag-red { background: rgba(239,68,68,.2); color: #f87171; border: 1px solid rgba(239,68,68,.3); }
51
+
52
+ /* Layout helpers */
53
+ .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; width: 100%; max-width: 1200px; }
54
+ .grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 20px; width: 100%; max-width: 1200px; }
55
+ .grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; width: 100%; max-width: 1200px; }
56
+ .card { background: var(--bg-card); border-radius: 16px; padding: 28px; border: 1px solid rgba(255,255,255,.06); transition: transform .2s; }
57
+ .card:hover { transform: translateY(-2px); }
58
+ .card-sm { background: var(--bg-card); border-radius: 12px; padding: 18px; border: 1px solid rgba(255,255,255,.06); }
59
+ .center { text-align: center; }
60
+ .left { text-align: left; align-items: flex-start; }
61
+ .w-full { width: 100%; max-width: 1200px; }
62
+
63
+ .stat { font-size: 3em; font-weight: 800; background: var(--gradient); -webkit-background-clip: text; -webkit-text-fill-color: transparent; line-height: 1.1; }
64
+ .stat-label { font-size: .95em; color: var(--text-muted); margin-top: 6px; }
65
+
66
+ .code-block { background: #0d1117; border-radius: 10px; padding: 20px 24px; font-family: 'JetBrains Mono', 'Fira Code', 'SF Mono', monospace; font-size: .9em; line-height: 1.7; color: #c9d1d9; overflow-x: auto; text-align: left; border: 1px solid rgba(255,255,255,.06); }
67
+ .code-block .kw { color: #ff7b72; }
68
+ .code-block .str { color: #a5d6ff; }
69
+ .code-block .cm { color: #8b949e; }
70
+ .code-block .fn { color: #d2a8ff; }
71
+
72
+ .flow-line { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; justify-content: center; margin: 20px 0; }
73
+ .flow-box { background: var(--bg-card); border: 1px solid rgba(37,99,235,.4); border-radius: 10px; padding: 12px 20px; font-weight: 600; font-size: .95em; white-space: nowrap; }
74
+ .flow-arrow { color: var(--primary); font-size: 1.4em; }
75
+
76
+ table { width: 100%; border-collapse: collapse; font-size: .95em; }
77
+ th { background: var(--bg-light); padding: 12px 16px; text-align: left; font-weight: 600; color: #fff; }
78
+ td { padding: 10px 16px; border-bottom: 1px solid rgba(255,255,255,.06); }
79
+ tr:hover td { background: rgba(37,99,235,.05); }
80
+
81
+ .layer-a { border-left: 4px solid var(--error); }
82
+ .layer-b { border-left: 4px solid var(--warning); }
83
+ .layer-c { border-left: 4px solid var(--info); }
84
+
85
+ .emoji { font-size: 2em; margin-bottom: 12px; display: block; }
86
+ .badge { display: inline-block; padding: 2px 10px; border-radius: 6px; font-size: .8em; font-weight: 700; }
87
+ .badge-err { background: rgba(239,68,68,.2); color: #f87171; }
88
+ .badge-warn { background: rgba(245,158,11,.2); color: #fbbf24; }
89
+ .badge-info { background: rgba(59,130,246,.2); color: #60a5fa; }
90
+
91
+ .hero-logo { font-size: 5em; margin-bottom: 20px; }
92
+ .version { display: inline-block; background: var(--gradient); padding: 6px 18px; border-radius: 20px; font-size: .95em; font-weight: 700; color: #fff; margin-bottom: 20px; }
93
+
94
+ ul { list-style: none; padding: 0; }
95
+ ul li { padding: 6px 0; padding-left: 24px; position: relative; }
96
+ ul li::before { content: "▸"; position: absolute; left: 0; color: var(--primary); font-weight: bold; }
97
+
98
+ /* Retrieval chain (Extension Repos slide) */
99
+ .retrieval-chain { display: flex; align-items: stretch; justify-content: center; gap: 8px; width: 100%; max-width: 1200px; margin: 0 auto; }
100
+ .chain-node { flex: 1; background: var(--bg-card); border-radius: 14px; padding: 18px 14px 16px; text-align: center; position: relative; border: 1px solid rgba(255,255,255,.08); transition: transform .2s; }
101
+ .chain-node:hover { transform: translateY(-4px); }
102
+ .chain-node .node-num { position: absolute; top: -10px; left: 50%; transform: translateX(-50%); width: 26px; height: 26px; border-radius: 50%; font-size: .78em; font-weight: 800; display: flex; align-items: center; justify-content: center; color: #fff; box-shadow: 0 2px 8px rgba(0,0,0,.3); }
103
+ .chain-node .node-icon { font-size: 1.8em; margin: 6px 0 4px; line-height: 1; }
104
+ .chain-node .node-title { font-size: .95em; font-weight: 700; color: #fff; font-family: 'JetBrains Mono', 'Fira Code', monospace; letter-spacing: -.02em; }
105
+ .chain-node .node-desc { font-size: .75em; color: var(--text-muted); margin-top: 4px; }
106
+ .chain-node.n-blue { border-top: 3px solid #60a5fa; } .chain-node.n-blue .node-num { background: #2563eb; }
107
+ .chain-node.n-purple { border-top: 3px solid #a78bfa; } .chain-node.n-purple .node-num { background: #7c3aed; }
108
+ .chain-node.n-green { border-top: 3px solid #4ade80; } .chain-node.n-green .node-num { background: #16a34a; }
109
+ .chain-node.n-amber { border-top: 3px solid #fbbf24; box-shadow: 0 0 0 1px rgba(245,158,11,.4), 0 8px 32px -8px rgba(245,158,11,.4); background: linear-gradient(180deg, rgba(245,158,11,.08) 0%, var(--bg-card) 100%); }
110
+ .chain-node.n-amber .node-num { background: var(--accent); }
111
+ .chain-node.n-amber .node-title { color: #fbbf24; }
112
+ .chain-arrow-wrap { display: flex; flex-direction: column; align-items: center; justify-content: center; min-width: 52px; padding-top: 28px; }
113
+ .chain-arrow-wrap .arrow-label { font-size: .7em; color: var(--error); font-weight: 700; letter-spacing: .05em; text-transform: uppercase; margin-bottom: 2px; }
114
+ .chain-arrow-wrap .arrow-icon { color: var(--text-muted); font-size: 1.6em; line-height: 1; }
115
+
116
+ /* Venn diagram (trigger conditions) */
117
+ .venn-wrap { display: flex; align-items: center; justify-content: center; position: relative; height: 160px; }
118
+ .venn-circle { position: absolute; width: 140px; height: 140px; border-radius: 50%; display: flex; align-items: center; justify-content: center; text-align: center; font-size: .82em; font-weight: 600; line-height: 1.35; padding: 0 12px; }
119
+ .venn-left { left: 40px; background: rgba(96,165,250,.22); border: 2px solid rgba(96,165,250,.6); color: #bfdbfe; padding-right: 50px; }
120
+ .venn-right { right: 40px; background: rgba(167,139,250,.22); border: 2px solid rgba(167,139,250,.6); color: #ddd6fe; padding-left: 50px; }
121
+ .venn-center { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 3; width: 72px; height: 72px; border-radius: 50%; background: var(--accent); display: flex; align-items: center; justify-content: center; color: #1a1a1a; font-weight: 800; font-size: .85em; box-shadow: 0 0 24px rgba(245,158,11,.6); border: 3px solid #0f172a; text-align: center; line-height: 1.1; }
122
+
123
+ /* Principle badge pills */
124
+ .principle-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; width: 100%; }
125
+ .principle-badge { background: var(--bg-card); border-radius: 14px; padding: 16px 18px; display: flex; align-items: center; gap: 14px; border: 1px solid rgba(255,255,255,.06); }
126
+ .principle-badge .pb-icon { flex: 0 0 42px; width: 42px; height: 42px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 1.3em; font-weight: 800; }
127
+ .principle-badge .pb-text strong { display: block; font-size: .95em; color: #fff; margin-bottom: 2px; }
128
+ .principle-badge .pb-text span { font-size: .8em; color: var(--text-muted); line-height: 1.4; }
129
+ .principle-badge.p-amber .pb-icon { background: rgba(245,158,11,.2); color: #fbbf24; }
130
+ .principle-badge.p-red .pb-icon { background: rgba(239,68,68,.2); color: #f87171; }
131
+ .principle-badge.p-blue .pb-icon { background: rgba(37,99,235,.2); color: #60a5fa; }
132
+
133
+ @media (max-width: 900px) {
134
+ .slide { padding: 30px 24px; }
135
+ h1 { font-size: 2em; }
136
+ h2 { font-size: 1.6em; }
137
+ .grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; }
138
+ .stat { font-size: 2em; }
139
+ }
140
+ </style>
141
+ </head>
142
+ <body>
143
+ <div class="progress" id="progress"></div>
144
+ <div class="page-num" id="pageNum"></div>
145
+
146
+ <div class="deck" id="deck">
147
+
148
+ <!-- ============ SLIDE 1: Title ============ -->
149
+ <div class="slide active center">
150
+ <div class="hero-logo">🚀</div>
151
+ <div class="version">v1.3.0</div>
152
+ <h1 style="background:var(--gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;">ok-cosmic</h1>
153
+ <p class="subtitle">金蝶云苍穹 AI 开发技能 — 完整介绍</p>
154
+ <div style="margin-top:24px; display:flex; gap:10px; flex-wrap:wrap; justify-content:center;">
155
+ <span class="tag tag-blue">封装优先</span>
156
+ <span class="tag tag-purple">幻觉防护</span>
157
+ <span class="tag tag-green">自动校验</span>
158
+ <span class="tag tag-amber">离线知识库</span>
159
+ </div>
160
+ <p style="margin-top:48px; color:var(--text-muted); font-size:.9em;">作者:陈泽贤、钱芮名 &nbsp;|&nbsp; 仅限内部使用</p>
161
+ </div>
162
+
163
+ <!-- ============ SLIDE 2: What is ok-cosmic ============ -->
164
+ <div class="slide center">
165
+ <h2>什么是 ok-cosmic?</h2>
166
+ <p class="subtitle" style="max-width:800px;">面向金蝶云苍穹二开场景的 AI Agent Skill,让 AI 真正理解苍穹 SDK</p>
167
+ <div class="grid-4" style="margin-top:20px;">
168
+ <div class="card center">
169
+ <div class="stat">15</div>
170
+ <div class="stat-label">插件模板</div>
171
+ </div>
172
+ <div class="card center">
173
+ <div class="stat">7</div>
174
+ <div class="stat-label">内置工具</div>
175
+ </div>
176
+ <div class="card center">
177
+ <div class="stat">24</div>
178
+ <div class="stat-label">代码片段</div>
179
+ </div>
180
+ <div class="card center">
181
+ <div class="stat">19</div>
182
+ <div class="stat-label">A层硬规则</div>
183
+ </div>
184
+ </div>
185
+ <div class="grid-4" style="margin-top:16px;">
186
+ <div class="card center">
187
+ <div class="stat">12</div>
188
+ <div class="stat-label">规则文档</div>
189
+ </div>
190
+ <div class="card center">
191
+ <div class="stat">12</div>
192
+ <div class="stat-label">封装参考文档</div>
193
+ </div>
194
+ <div class="card center">
195
+ <div class="stat">6</div>
196
+ <div class="stat-label">Lint 检查器</div>
197
+ </div>
198
+ <div class="card center">
199
+ <div class="stat">40+</div>
200
+ <div class="stat-label">STYLE/SCENE 规则</div>
201
+ </div>
202
+ </div>
203
+ </div>
204
+
205
+ <!-- ============ SLIDE 3: Design Goals ============ -->
206
+ <div class="slide center">
207
+ <h2>四大设计目标</h2>
208
+ <div class="grid-2" style="margin-top:12px;">
209
+ <div class="card">
210
+ <span class="emoji">🧠</span>
211
+ <h3>AI 理解无障碍</h3>
212
+ <p>所有文档、模板、规则均面向 AI 消费设计,结构化标签 + 锚点引用,让 Agent 精准定位信息</p>
213
+ </div>
214
+ <div class="card">
215
+ <span class="emoji">🎯</span>
216
+ <h3>生产级代码</h3>
217
+ <p>通过模板骨架 + A/B/C 三层规则 + 自动 post-check,确保 AI 生成的代码可直接进入 Code Review</p>
218
+ </div>
219
+ <div class="card">
220
+ <span class="emoji">⚡</span>
221
+ <h3>Token 效率</h3>
222
+ <p>决策矩阵索引 + 最小加载原则 + TL;DR 摘要机制,减少无效上下文消耗</p>
223
+ </div>
224
+ <div class="card">
225
+ <span class="emoji">📦</span>
226
+ <h3>开箱即用</h3>
227
+ <p>Step 0 自动预检 + 依赖自动安装 + 离线知识库,一条命令完成环境验证</p>
228
+ </div>
229
+ </div>
230
+ </div>
231
+
232
+ <!-- ============ SLIDE 4: Core Capabilities ============ -->
233
+ <div class="slide center">
234
+ <h2>五大核心能力</h2>
235
+ <div class="w-full" style="margin-top:12px;">
236
+ <div class="card" style="margin-bottom:16px; display:flex; gap:20px; align-items:flex-start;">
237
+ <div style="font-size:2em; min-width:44px;">🧩</div>
238
+ <div><h3 style="margin-bottom:4px;">插件选型与模板骨架</h3><p>14 种插件类型 + 11 种能力类型全覆盖,决策矩阵 + 意图路由自动匹配最佳方案</p></div>
239
+ </div>
240
+ <div class="card" style="margin-bottom:16px; display:flex; gap:20px; align-items:flex-start;">
241
+ <div style="font-size:2em; min-width:44px;">🔎</div>
242
+ <div><h3 style="margin-bottom:4px;">离线 API 知识查询</h3><p>基于 SQLite 知识图谱,支持类名搜索、方法搜索、继承链校验、签名验证,完全离线可用</p></div>
243
+ </div>
244
+ <div class="card" style="margin-bottom:16px; display:flex; gap:20px; align-items:flex-start;">
245
+ <div style="font-size:2em; min-width:44px;">🗂️</div>
246
+ <div><h3 style="margin-bottom:4px;">元数据 / 基础资料在线查询</h3><p>通过 OpenAPI 实时查询字段标识、枚举映射、refType、基础资料编码名称,支持本地缓存</p></div>
247
+ </div>
248
+ <div class="card" style="margin-bottom:16px; display:flex; gap:20px; align-items:flex-start;">
249
+ <div style="font-size:2em; min-width:44px;">🛡️</div>
250
+ <div><h3 style="margin-bottom:4px;">幻觉防护与规则约束</h3><p>11 个幻觉方法名 + 6 个幻觉类名黑名单 + 12 个场景错配规则 + 24 个编码风格规则,自动 lint 检测</p></div>
251
+ </div>
252
+ <div class="card" style="display:flex; gap:20px; align-items:flex-start;">
253
+ <div style="font-size:2em; min-width:44px;">✅</div>
254
+ <div><h3 style="margin-bottom:4px;">代码生成后自动校验</h3><p>Gradle 编译 + post-lint 串联,6 大检查器并行扫描,ERROR 阻断 → 自动修复 → 复检闭环</p></div>
255
+ </div>
256
+ </div>
257
+ </div>
258
+
259
+ <!-- ============ SLIDE 5: Architecture ============ -->
260
+ <div class="slide left">
261
+ <h2 style="text-align:center;">技能架构总览</h2>
262
+ <div class="grid-2 w-full" style="margin-top:12px;">
263
+ <div>
264
+ <div class="code-block" style="font-size:.82em; line-height:1.6;">
265
+ <span class="cm">ok-cosmic/</span>
266
+ ├── <span class="fn">SKILL.md</span> <span class="cm"># AI 主入口(线性执行流)</span>
267
+ ├── <span class="fn">manifest.json</span> <span class="cm"># 工具注册(7 tools)</span>
268
+ ├── <span class="str">assets/</span> <span class="cm"># 15 个插件模板</span>
269
+ │ └── <span class="str">snippets/</span> <span class="cm"># 24 个场景代码片段</span>
270
+ ├── <span class="str">rules/</span> <span class="cm"># 12 个规则文档</span>
271
+ │ ├── constraints.md <span class="cm"># A层硬约束</span>
272
+ │ ├── anti-patterns.md <span class="cm"># 禁忌清单</span>
273
+ │ ├── coding-preferences.md <span class="cm"># B/C层偏好</span>
274
+ │ ├── decision-matrix.md <span class="cm"># 决策矩阵</span>
275
+ │ ├── intent-routing.md <span class="cm"># 意图路由</span>
276
+ │ ├── cheat-sheet.md <span class="cm"># 高频API速查</span>
277
+ │ ├── post-check.md <span class="cm"># 校验规则</span>
278
+ │ └── a-layer-rules.json <span class="cm"># 规则ID配置</span>
279
+ ├── <span class="str">scripts/</span> <span class="cm"># 7 个 Python 工具脚本</span>
280
+ │ └── <span class="str">lint/</span> <span class="cm"># 6 个静态检查器</span>
281
+ └── <span class="str">references/</span> <span class="cm"># SDK 参考文档</span>
282
+ ├── <span class="str">adv/</span> <span class="cm"># 12 篇封装层文档</span>
283
+ └── <span class="str">base/</span> <span class="cm"># 原生SDK文档</span>
284
+ </div>
285
+ </div>
286
+ <div>
287
+ <div class="card layer-a" style="margin-bottom:12px;">
288
+ <h3>SKILL.md — AI 大脑</h3>
289
+ <p>线性执行流设计:Step 0 预检 → 意图路由 → 决策矩阵 → 确认卡 → 代码生成 → Post-Check</p>
290
+ </div>
291
+ <div class="card layer-b" style="margin-bottom:12px;">
292
+ <h3>rules/ — 规则引擎</h3>
293
+ <p>A/B/C 三层分治,文档与 lint 脚本 1:1 映射,a-layer-rules.json 作为单一可信源</p>
294
+ </div>
295
+ <div class="card" style="margin-bottom:12px; border-left: 4px solid var(--success);">
296
+ <h3>scripts/ — 工具链</h3>
297
+ <p>7 个 Python 脚本 + 6 个 lint 检查器,支持离线/在线混合查询与自动校验</p>
298
+ </div>
299
+ <div class="card" style="border-left: 4px solid var(--primary);">
300
+ <h3>assets/ — 模板库</h3>
301
+ <p>15 个骨架模板 + 24 个场景片段,覆盖苍穹全部主流二开场景</p>
302
+ </div>
303
+ </div>
304
+ </div>
305
+ </div>
306
+
307
+ <!-- ============ SLIDE 6: Plugin Coverage ============ -->
308
+ <div class="slide center">
309
+ <h2>14 种插件类型全覆盖</h2>
310
+ <p class="subtitle">每种类型配套:模板骨架 + 参考文档 + 代码片段 + 决策矩阵卡片</p>
311
+ <div class="grid-4 w-full" style="margin-top:12px;">
312
+ <div class="card-sm center"><div style="font-size:1.5em;">📋</div><strong>表单插件</strong><br><small style="color:var(--text-muted)">字段联动 / 控件交互</small></div>
313
+ <div class="card-sm center"><div style="font-size:1.5em;">📄</div><strong>单据插件</strong><br><small style="color:var(--text-muted)">审核提交 / 单据头体</small></div>
314
+ <div class="card-sm center"><div style="font-size:1.5em;">📑</div><strong>列表插件</strong><br><small style="color:var(--text-muted)">多选操作 / 批量处理</small></div>
315
+ <div class="card-sm center"><div style="font-size:1.5em;">🌳</div><strong>树列表插件</strong><br><small style="color:var(--text-muted)">左树右表</small></div>
316
+ <div class="card-sm center"><div style="font-size:1.5em;">⚙️</div><strong>操作插件</strong><br><small style="color:var(--text-muted)">保存 / 审核 / 校验</small></div>
317
+ <div class="card-sm center"><div style="font-size:1.5em;">🔄</div><strong>转换插件</strong><br><small style="color:var(--text-muted)">下推 / BOTP 转换</small></div>
318
+ <div class="card-sm center"><div style="font-size:1.5em;">↩️</div><strong>反写插件</strong><br><small style="color:var(--text-muted)">BOTP 回写阶段</small></div>
319
+ <div class="card-sm center"><div style="font-size:1.5em;">📊</div><strong>报表插件</strong><br><small style="color:var(--text-muted)">过滤容器 / 界面</small></div>
320
+ <div class="card-sm center"><div style="font-size:1.5em;">📈</div><strong>报表取数</strong><br><small style="color:var(--text-muted)">动态列 / DataSet</small></div>
321
+ <div class="card-sm center"><div style="font-size:1.5em;">🖨️</div><strong>打印插件</strong><br><small style="color:var(--text-muted)">套打模板</small></div>
322
+ <div class="card-sm center"><div style="font-size:1.5em;">🌐</div><strong>OpenAPI</strong><br><small style="color:var(--text-muted)">外部集成接口</small></div>
323
+ <div class="card-sm center"><div style="font-size:1.5em;">⏰</div><strong>后台任务</strong><br><small style="color:var(--text-muted)">定时调度作业</small></div>
324
+ <div class="card-sm center"><div style="font-size:1.5em;">🔀</div><strong>工作流插件</strong><br><small style="color:var(--text-muted)">审批流节点</small></div>
325
+ <div class="card-sm center"><div style="font-size:1.5em;">📥</div><strong>导入插件</strong><br><small style="color:var(--text-muted)">批量导入</small></div>
326
+ </div>
327
+ </div>
328
+
329
+ <!-- ============ SLIDE 7: Tool Chain ============ -->
330
+ <div class="slide center">
331
+ <h2>7 个内置工具脚本</h2>
332
+ <div class="w-full" style="margin-top:12px;">
333
+ <table>
334
+ <tr><th style="width:30%">工具名</th><th style="width:35%">功能</th><th>关键特性</th></tr>
335
+ <tr>
336
+ <td><strong style="color:#60a5fa">cosmic_search_classes</strong></td>
337
+ <td>模糊/正则搜索苍穹类名</td>
338
+ <td><span class="tag tag-blue" style="font-size:.75em">离线</span> 支持包前缀、kind 过滤</td>
339
+ </tr>
340
+ <tr>
341
+ <td><strong style="color:#60a5fa">cosmic_search_methods</strong></td>
342
+ <td>跨类全局搜索方法名</td>
343
+ <td><span class="tag tag-blue" style="font-size:.75em">离线</span> 排名 + 分类筛选</td>
344
+ </tr>
345
+ <tr>
346
+ <td><strong style="color:#60a5fa">cosmic_get_class_detail</strong></td>
347
+ <td>查看类详情 / 校验签名</td>
348
+ <td><span class="tag tag-blue" style="font-size:.75em">离线</span> 继承链 + compact 模式</td>
349
+ </tr>
350
+ <tr>
351
+ <td><strong style="color:#a78bfa">cosmic_get_meta_fields</strong></td>
352
+ <td>查询表单元数据字段</td>
353
+ <td><span class="tag tag-purple" style="font-size:.75em">在线+缓存</span> fuzzy/detail/tree 视图</td>
354
+ </tr>
355
+ <tr>
356
+ <td><strong style="color:#a78bfa">cosmic_query_basedata</strong></td>
357
+ <td>查询基础资料数据</td>
358
+ <td><span class="tag tag-purple" style="font-size:.75em">在线+缓存</span> 编码/名称/完整数据包</td>
359
+ </tr>
360
+ <tr>
361
+ <td><strong style="color:#4ade80">cosmic_post_check</strong></td>
362
+ <td>代码生成后统一校验</td>
363
+ <td><span class="tag tag-green" style="font-size:.75em">Gradle+Lint</span> 6 大检查器并行</td>
364
+ </tr>
365
+ <tr>
366
+ <td><strong style="color:#4ade80">cosmic_config_check</strong></td>
367
+ <td>Step 0 环境预检</td>
368
+ <td><span class="tag tag-green" style="font-size:.75em">自动安装</span> Python 依赖自动补全</td>
369
+ </tr>
370
+ </table>
371
+ </div>
372
+ </div>
373
+
374
+ <!-- ============ SLIDE 8: Decision Flow ============ -->
375
+ <div class="slide center">
376
+ <h2>AI 开发决策流程</h2>
377
+ <p class="subtitle">从用户需求到代码交付的完整链路</p>
378
+ <div class="flow-line" style="margin:28px 0;">
379
+ <div class="flow-box" style="border-color:var(--accent);">Step 0<br>配置预检</div>
380
+ <div class="flow-arrow">→</div>
381
+ <div class="flow-box">意图路由<br><small>时机+载体+能力</small></div>
382
+ <div class="flow-arrow">→</div>
383
+ <div class="flow-box">决策矩阵<br><small>命中1主+0-1能力</small></div>
384
+ <div class="flow-arrow">→</div>
385
+ <div class="flow-box" style="border-color:var(--accent);">最小确认卡<br><small>6项全部就绪</small></div>
386
+ </div>
387
+ <div class="flow-line">
388
+ <div class="flow-box">读模板骨架<br><small>assets/*.java</small></div>
389
+ <div class="flow-arrow">→</div>
390
+ <div class="flow-box">验证签名<br><small>cheat-sheet/脚本</small></div>
391
+ <div class="flow-arrow">→</div>
392
+ <div class="flow-box" style="border-color:var(--success);">生成代码</div>
393
+ <div class="flow-arrow">→</div>
394
+ <div class="flow-box" style="border-color:var(--success);">Post-Check<br><small>≤3轮修复闭环</small></div>
395
+ </div>
396
+ <div class="card w-full" style="margin-top:28px; text-align:left;">
397
+ <h3>最小确认卡(6 项必须就绪)</h3>
398
+ <div class="grid-3" style="margin-top:12px;">
399
+ <div>① 插件类型 <small style="color:var(--text-muted)">← 决策矩阵</small></div>
400
+ <div>② 目标事件方法 <small style="color:var(--text-muted)">← 模板/references</small></div>
401
+ <div>③ 使用模板 <small style="color:var(--text-muted)">← assets/*.java</small></div>
402
+ <div>④ 已验证字段/refType <small style="color:var(--text-muted)">← 元数据脚本</small></div>
403
+ <div>⑤ 已确认枚举值 <small style="color:var(--text-muted)">← metadata Ext</small></div>
404
+ <div>⑥ 已验证类/方法签名 <small style="color:var(--text-muted)">← cheat-sheet/API</small></div>
405
+ </div>
406
+ </div>
407
+ </div>
408
+
409
+ <!-- ============ SLIDE 9: Rule Layers ============ -->
410
+ <div class="slide center">
411
+ <h2>A / B / C 三层规则体系</h2>
412
+ <p class="subtitle">区分"硬红线"与"建议写法",避免一刀切</p>
413
+ <div class="grid-3 w-full" style="margin-top:16px;">
414
+ <div class="card layer-a">
415
+ <h3 style="color:var(--error);">A 层 · 硬约束</h3>
416
+ <p style="font-size:.9em;"><span class="badge badge-err">ERROR</span> 阻断交付</p>
417
+ <ul style="margin-top:12px; font-size:.9em;">
418
+ <li>拒绝 API 幻觉</li>
419
+ <li>模板签名强制校验</li>
420
+ <li>操作插件禁调 getView()</li>
421
+ <li>绑定阶段禁改数据</li>
422
+ <li>循环禁访数据库/Redis</li>
423
+ <li>DataSet 必须 close</li>
424
+ <li>禁止 printStackTrace()</li>
425
+ <li>SQL 必须参数化</li>
426
+ </ul>
427
+ <p style="margin-top:12px; font-size:.85em; color:var(--text-muted);">来源:constraints.md · anti-patterns.md<br>19 个规则 ID 定义在 a-layer-rules.json</p>
428
+ </div>
429
+ <div class="card layer-b">
430
+ <h3 style="color:var(--warning);">B 层 · 推荐项</h3>
431
+ <p style="font-size:.9em;"><span class="badge badge-warn">WARNING</span> 新代码优先</p>
432
+ <ul style="margin-top:12px; font-size:.9em;">
433
+ <li>优先使用 Ext 扩展基类</li>
434
+ <li>优先使用 OpUtils / BotpUtils</li>
435
+ <li>CharSequenceUtils 判空</li>
436
+ <li>CollectionUtils 判空</li>
437
+ <li>query+load 替代直接 set</li>
438
+ <li>ThreadPools 替代 new Thread</li>
439
+ <li>KDBizException 替代 RE</li>
440
+ </ul>
441
+ <p style="margin-top:12px; font-size:.85em; color:var(--text-muted);">来源:coding-preferences.md<br>历史代码不因 B 层判错</p>
442
+ </div>
443
+ <div class="card layer-c">
444
+ <h3 style="color:var(--info);">C 层 · 治理项</h3>
445
+ <p style="font-size:.9em;"><span class="badge badge-info">INFO</span> 渐进优化</p>
446
+ <ul style="margin-top:12px; font-size:.9em;">
447
+ <li>补 @Override 验证来源注释</li>
448
+ <li>统一异常体系</li>
449
+ <li>减少原生样板代码</li>
450
+ <li>进一步封装收敛</li>
451
+ </ul>
452
+ <p style="margin-top:12px; font-size:.85em; color:var(--text-muted);">来源:coding-preferences.md · post-check.md<br>仅 --strict 模式检查 VERIFY-*</p>
453
+ </div>
454
+ </div>
455
+ </div>
456
+
457
+ <!-- ============ SLIDE 10: Anti-Hallucination ============ -->
458
+ <div class="slide center">
459
+ <h2>幻觉防护机制</h2>
460
+ <p class="subtitle">AI 代码生成中最常见的苍穹 SDK 幻觉,ok-cosmic 全部拦截</p>
461
+ <div class="grid-2 w-full" style="margin-top:16px;">
462
+ <div class="card" style="text-align:left;">
463
+ <h3 style="color:var(--error);">幻觉方法名黑名单(11 项)</h3>
464
+ <div style="margin-top:8px; font-size:.85em;">
465
+ <table>
466
+ <tr><td style="color:#f87171"><code>setReadOnly()</code></td><td>→ <code>getView().setEnable()</code></td></tr>
467
+ <tr><td style="color:#f87171"><code>model.getRowCount()</code></td><td>→ <code>model.getEntryRowCount()</code></td></tr>
468
+ <tr><td style="color:#f87171"><code>model.addRow()</code></td><td>→ <code>model.createNewEntryRow()</code></td></tr>
469
+ <tr><td style="color:#f87171"><code>model.deleteRow()</code></td><td>→ <code>model.deleteEntryRow()</code></td></tr>
470
+ <tr><td style="color:#f87171"><code>getView().refresh()</code></td><td>→ <code>getView().updateView()</code></td></tr>
471
+ <tr><td style="color:#f87171"><code>queryAll()</code></td><td>→ <code>query()</code></td></tr>
472
+ </table>
473
+ </div>
474
+ </div>
475
+ <div class="card" style="text-align:left;">
476
+ <h3 style="color:var(--error);">幻觉类名黑名单(6 项)</h3>
477
+ <ul style="font-size:.9em;">
478
+ <li>不存在 <code>Cosmic*</code> 工具类</li>
479
+ <li>不存在 <code>Cloud*</code> Utils/Helper</li>
480
+ <li>不存在 <code>BillHelper</code></li>
481
+ <li>不存在 <code>FormHelper</code></li>
482
+ <li>不存在 <code>ListHelper</code></li>
483
+ <li>不存在 <code>PluginHelper</code></li>
484
+ </ul>
485
+ <div style="margin-top:16px;">
486
+ <h3 style="color:var(--warning);">枚举值禁猜 [A1.8]</h3>
487
+ <p style="font-size:.9em;">下拉字段选项值必须通过元数据脚本确认,禁止凭经验猜测</p>
488
+ </div>
489
+ </div>
490
+ </div>
491
+ </div>
492
+
493
+ <!-- ============ SLIDE 11: Post-Check ============ -->
494
+ <div class="slide center">
495
+ <h2>Post-Check 自动校验</h2>
496
+ <p class="subtitle">每次代码生成后自动触发,形成闭环</p>
497
+ <div class="flow-line" style="margin:24px 0;">
498
+ <div class="flow-box">生成 .java</div>
499
+ <div class="flow-arrow">→</div>
500
+ <div class="flow-box">cosmic-post-check.py</div>
501
+ <div class="flow-arrow">→</div>
502
+ <div class="flow-box" style="border-color:var(--accent);">Gradle?</div>
503
+ </div>
504
+ <div class="grid-2 w-full">
505
+ <div class="card" style="text-align:left;">
506
+ <h3 style="color:var(--success);">Gradle 项目</h3>
507
+ <div class="flow-line" style="justify-content:flex-start; margin:8px 0;">
508
+ <div class="flow-box" style="font-size:.85em;">gradlew compileJava</div>
509
+ <div class="flow-arrow">→</div>
510
+ <div class="flow-box" style="font-size:.85em;">post-lint 场景/风格</div>
511
+ <div class="flow-arrow">→</div>
512
+ <div class="flow-box" style="font-size:.85em; border-color:var(--success);">综合结果</div>
513
+ </div>
514
+ </div>
515
+ <div class="card" style="text-align:left;">
516
+ <h3 style="color:var(--info);">非 Gradle 项目</h3>
517
+ <div class="flow-line" style="justify-content:flex-start; margin:8px 0;">
518
+ <div class="flow-box" style="font-size:.85em;">post-lint 静态校验</div>
519
+ <div class="flow-arrow">→</div>
520
+ <div class="flow-box" style="font-size:.85em; border-color:var(--success);">输出结果</div>
521
+ </div>
522
+ </div>
523
+ </div>
524
+ <div class="card w-full" style="margin-top:20px; text-align:left;">
525
+ <h3>4 大并行检查器</h3>
526
+ <div class="grid-3" style="margin-top:12px; gap:12px;">
527
+ <div class="card-sm"><strong>scene_check</strong><br><small style="color:var(--text-muted)">场景错配检测</small></div>
528
+ <div class="card-sm"><strong>style_check</strong><br><small style="color:var(--text-muted)">编码风格 24 规则</small></div>
529
+ <div class="card-sm"><strong>resource_check</strong><br><small style="color:var(--text-muted)">资源管理 4 规则</small></div>
530
+ <div class="card-sm"><strong>verify_check</strong><br><small style="color:var(--text-muted)">验证来源留痕</small></div>
531
+ </div>
532
+ </div>
533
+ </div>
534
+
535
+ <!-- ============ SLIDE 12: Snippets & Templates ============ -->
536
+ <div class="slide center">
537
+ <h2>代码片段矩阵</h2>
538
+ <p class="subtitle">24 个场景化代码片段,按领域分类,可直接引用</p>
539
+ <div class="grid-3 w-full" style="margin-top:12px;">
540
+ <div class="card" style="text-align:left;">
541
+ <h3>📋 form/ <small style="color:var(--text-muted)">(10 篇)</small></h3>
542
+ <ul style="font-size:.85em;">
543
+ <li>ViewControlOpsSample</li>
544
+ <li>F7FilterSample</li>
545
+ <li>ConfirmDialogSample</li>
546
+ <li>OpenBillModalSample</li>
547
+ <li>TreeControlSample</li>
548
+ <li>...</li>
549
+ </ul>
550
+ </div>
551
+ <div class="card" style="text-align:left;">
552
+ <h3>🔍 query/ <small style="color:var(--text-muted)">(3 篇)</small></h3>
553
+ <ul style="font-size:.85em;">
554
+ <li>BatchQuerySample</li>
555
+ <li>DataSetQueryStatSample</li>
556
+ <li>BaseDataQuerySample</li>
557
+ </ul>
558
+ <h3 style="margin-top:16px;">📦 data/ <small style="color:var(--text-muted)">(2 篇)</small></h3>
559
+ <ul style="font-size:.85em;">
560
+ <li>DynamicObjectOpsSample</li>
561
+ <li>DynamicObjectCrudSample</li>
562
+ </ul>
563
+ </div>
564
+ <div class="card" style="text-align:left;">
565
+ <h3>⚙️ operation/ <small style="color:var(--text-muted)">(2 篇)</small></h3>
566
+ <ul style="font-size:.85em;">
567
+ <li>OpAddValidatorsSample</li>
568
+ <li>OperationOptionBridgeSample</li>
569
+ </ul>
570
+ <h3 style="margin-top:12px;">🔄 botp/</h3>
571
+ <ul style="font-size:.85em;"><li>BotpTracePushSample</li></ul>
572
+ <h3 style="margin-top:12px;">📎 attachment/</h3>
573
+ <ul style="font-size:.85em;"><li>AttachmentUploadBindSample</li></ul>
574
+ <h3 style="margin-top:12px;">💬 message/ · ⏰ task/ · 🔗 concurrent/</h3>
575
+ </div>
576
+ </div>
577
+ </div>
578
+
579
+ <!-- ============ SLIDE 13: Intent Routing ============ -->
580
+ <div class="slide center">
581
+ <h2>自然语言意图路由</h2>
582
+ <p class="subtitle">三步翻译:时机 → 载体 → 能力,从业务话术到技术场景</p>
583
+ <div class="grid-3 w-full" style="margin-top:16px;">
584
+ <div class="card" style="text-align:left;">
585
+ <h3>① 看"时机词"</h3>
586
+ <table style="font-size:.82em;">
587
+ <tr><td>"保存前""审核时"</td><td>→ 操作插件</td></tr>
588
+ <tr><td>"下推时""选单时"</td><td>→ 转换插件</td></tr>
589
+ <tr><td>"字段变化""F7 过滤"</td><td>→ 前端交互</td></tr>
590
+ <tr><td>"定时执行""后台跑"</td><td>→ 后台任务</td></tr>
591
+ <tr><td>"外部调用""接口"</td><td>→ OpenAPI</td></tr>
592
+ </table>
593
+ </div>
594
+ <div class="card" style="text-align:left;">
595
+ <h3>② 看"载体词"</h3>
596
+ <table style="font-size:.82em;">
597
+ <tr><td>"表单上""控件"</td><td>→ 表单插件</td></tr>
598
+ <tr><td>"单据界面""头体"</td><td>→ 单据插件</td></tr>
599
+ <tr><td>"列表上""批量"</td><td>→ 列表插件</td></tr>
600
+ <tr><td>"左树右表"</td><td>→ 树列表插件</td></tr>
601
+ <tr><td>"报表过滤"</td><td>→ 报表插件</td></tr>
602
+ </table>
603
+ </div>
604
+ <div class="card" style="text-align:left;">
605
+ <h3>③ 补"能力词"</h3>
606
+ <table style="font-size:.82em;">
607
+ <tr><td>"打开页面""弹窗"</td><td>→ 视图跳转</td></tr>
608
+ <tr><td>"查数据""ORM"</td><td>→ 查询存取</td></tr>
609
+ <tr><td>"基础资料""物料"</td><td>→ 基础资料</td></tr>
610
+ <tr><td>"附件""上传"</td><td>→ 附件文件</td></tr>
611
+ <tr><td>"跨线程""并发"</td><td>→ 上下文恢复</td></tr>
612
+ </table>
613
+ </div>
614
+ </div>
615
+ </div>
616
+
617
+ <!-- ============ SLIDE 14: Extension Repos Fallback ============ -->
618
+ <div class="slide center">
619
+ <h2 style="margin-bottom:6px;">扩展代码库兜底 <span style="font-size:.6em; color:var(--text-muted); font-weight:500;">Extension Repos Fallback</span></h2>
620
+ <p style="color:var(--text-muted); font-size:.95em; margin-bottom:24px;">信息检索的最后一道防线:内置资产与当前项目都 miss 时,再走拓展仓库</p>
621
+
622
+ <!-- Retrieval chain: 4 个阶梯式卡片→壮extensionRepos高亮 -->
623
+ <div class="retrieval-chain">
624
+ <div class="chain-node n-blue">
625
+ <div class="node-num">1</div>
626
+ <div class="node-icon">📖</div>
627
+ <div class="node-title">cheat-sheet</div>
628
+ <div class="node-desc">高频 API 速查</div>
629
+ </div>
630
+ <div class="chain-arrow-wrap">
631
+ <div class="arrow-label">miss</div>
632
+ <div class="arrow-icon">→</div>
633
+ </div>
634
+ <div class="chain-node n-purple">
635
+ <div class="node-num">2</div>
636
+ <div class="node-icon">🗄️</div>
637
+ <div class="node-title">知识库脚本</div>
638
+ <div class="node-desc">API 事实 / 字段校验</div>
639
+ </div>
640
+ <div class="chain-arrow-wrap">
641
+ <div class="arrow-label">miss</div>
642
+ <div class="arrow-icon">→</div>
643
+ </div>
644
+ <div class="chain-node n-green">
645
+ <div class="node-num">3</div>
646
+ <div class="node-icon">🧩</div>
647
+ <div class="node-title">assets/snippets</div>
648
+ <div class="node-desc">场景实现模板</div>
649
+ </div>
650
+ <div class="chain-arrow-wrap">
651
+ <div class="arrow-label">miss</div>
652
+ <div class="arrow-icon">→</div>
653
+ </div>
654
+ <div class="chain-node n-amber">
655
+ <div class="node-num">4</div>
656
+ <div class="node-icon">📦</div>
657
+ <div class="node-title">extensionRepos</div>
658
+ <div class="node-desc">拓展仓库兜底 ⭐</div>
659
+ </div>
660
+ </div>
661
+
662
+ <!-- 中间区:左 Venn 图 触发条件 / 右 配置示例 -->
663
+ <div class="grid-2 w-full" style="margin-top:26px; gap:20px;">
664
+ <div class="card" style="text-align:left; padding:20px 24px;">
665
+ <h3 style="margin-bottom:6px;">触发条件 <span style="font-size:.65em; color:var(--text-muted); font-weight:500;">需同时满足</span></h3>
666
+ <div class="venn-wrap">
667
+ <div class="venn-circle venn-left">内置资产<br>全部 miss</div>
668
+ <div class="venn-circle venn-right">当前项目<br>无可用实现</div>
669
+ <div class="venn-center">触发<br>Fallback</div>
670
+ </div>
671
+ <p style="text-align:center; font-size:.8em; color:var(--text-muted); margin-top:4px;">两个条件的<strong style="color:var(--accent);"> 交集 </strong>才会触发,避免乱跳拓展仓</p>
672
+ </div>
673
+ <div class="card" style="text-align:left; padding:20px 24px;">
674
+ <h3 style="margin-bottom:8px;">一行配置即启用 <span style="font-size:.65em; color:var(--text-muted); font-weight:500;">ok-cosmic.json</span></h3>
675
+ <div class="code-block" style="font-size:.82em;">
676
+ {
677
+ <span class="cm">// 其他字段省略…</span>
678
+ <span style="color:#fbbf24; font-weight:700;">"extensionRepos"</span>: [
679
+ <span class="str">"/path/to/ext-repo-1"</span>,
680
+ <span class="str">"~/code/ext-repo-2"</span>
681
+ ]
682
+ }
683
+ </div>
684
+ <p style="margin-top:10px; font-size:.78em; color:var(--text-muted);">支持 <code>~</code> 展开、多路径。Step 0 预检自动校验,路径不存在只给 WARNING。</p>
685
+ </div>
686
+ </div>
687
+
688
+ <!-- 使用原则 3 大徽章 -->
689
+ <div class="principle-row w-full" style="margin-top:22px;">
690
+ <div class="principle-badge p-amber">
691
+ <div class="pb-icon">📌</div>
692
+ <div class="pb-text"><strong>仅参考</strong><span>不等同于 ok-cosmic 推荐写法</span></div>
693
+ </div>
694
+ <div class="principle-badge p-red">
695
+ <div class="pb-icon">🛡️</div>
696
+ <div class="pb-text"><strong>规范优先</strong><span>与 A/B 层冲突时以 ok-cosmic 为准</span></div>
697
+ </div>
698
+ <div class="principle-badge p-blue">
699
+ <div class="pb-icon">🔘</div>
700
+ <div class="pb-text"><strong>可选开关</strong><span>未配置或空数组时自动跳过</span></div>
701
+ </div>
702
+ </div>
703
+ </div>
704
+
705
+ <!-- ============ SLIDE 15: Quick Start ============ -->
706
+ <div class="slide center">
707
+ <h2>快速开始</h2>
708
+ <div class="w-full" style="margin-top:16px;">
709
+ <table>
710
+ <tr><th>你的情况</th><th>从哪步开始</th><th>预计耗时</th></tr>
711
+ <tr><td>首次完整安装(含服务端)</td><td>步骤 1</td><td>30 分钟</td></tr>
712
+ <tr><td>服务端已就绪,新项目接入</td><td>步骤 6</td><td>2 分钟</td></tr>
713
+ <tr><td>已有项目,换 Agent</td><td>步骤 7</td><td>1 分钟</td></tr>
714
+ </table>
715
+ </div>
716
+ <div class="grid-2 w-full" style="margin-top:20px;">
717
+ <div class="card" style="text-align:left;">
718
+ <h3>安装步骤概览</h3>
719
+ <ol style="list-style:decimal; padding-left:20px; font-size:.95em;">
720
+ <li style="padding:4px 0;">环境检查(Java 8+ / Python 3.8+)</li>
721
+ <li style="padding:4px 0;">部署自定义封装库 JAR</li>
722
+ <li style="padding:4px 0;">注册元数据 + 基础资料 OpenAPI</li>
723
+ <li style="padding:4px 0;">构建离线知识库</li>
724
+ <li style="padding:4px 0;">知识验证</li>
725
+ <li style="padding:4px 0;">创建 <code>ok-cosmic.json</code> 配置</li>
726
+ <li style="padding:4px 0;">软链接安装 Skill</li>
727
+ <li style="padding:4px 0;">加载 Skill 开始编程</li>
728
+ </ol>
729
+ </div>
730
+ <div class="card" style="text-align:left;">
731
+ <h3>多 Agent 共享(推荐)</h3>
732
+ <div class="code-block" style="font-size:.8em; margin-top:8px;">
733
+ <span class="cm"># 唯一维护一份 skill 源</span>
734
+ ~/skills/ok-cosmic
735
+
736
+ <span class="cm"># 各 Agent 软链接指向</span>
737
+ ~/.claude/skills/ok-cosmic → ~/skills/ok-cosmic
738
+ ~/.opencode/skills/ok-cosmic → ~/skills/ok-cosmic
739
+ ~/.codex/skills/ok-cosmic → ~/skills/ok-cosmic
740
+ ~/.gemini/.../ok-cosmic → ~/skills/ok-cosmic
741
+ </div>
742
+ <p style="margin-top:12px; font-size:.85em; color:var(--text-muted);">更新一处,多个 Agent 同步生效</p>
743
+ </div>
744
+ </div>
745
+ </div>
746
+
747
+ <!-- ============ SLIDE 16: Demo Scenarios ============ -->
748
+ <div class="slide center">
749
+ <h2>典型使用场景</h2>
750
+ <div class="grid-2 w-full" style="margin-top:16px;">
751
+ <div class="card" style="text-align:left;">
752
+ <h3>场景一:表单字段联动</h3>
753
+ <div class="code-block" style="font-size:.82em; margin-top:8px;">
754
+ <span class="cm">// 用户说:</span>
755
+ <span class="str">"帮我写一个表单插件,数量变化时自动计算金额"</span>
756
+
757
+ <span class="cm">// AI 执行路径:</span>
758
+ 1. 意图路由 → "字段值改变" → 表单插件
759
+ 2. 决策矩阵 → #form-plugin
760
+ 3. 确认卡 → propertyChanged 事件
761
+ 4. 查元数据 → 确认 qty / price / amount 字段
762
+ 5. 读 FormPluginTemplate.java
763
+ 6. 生成代码 → Post-Check ✅
764
+ </div>
765
+ </div>
766
+ <div class="card" style="text-align:left;">
767
+ <h3>场景二:审核前校验</h3>
768
+ <div class="code-block" style="font-size:.82em; margin-top:8px;">
769
+ <span class="cm">// 用户说:</span>
770
+ <span class="str">"审核时校验分录不能为空"</span>
771
+
772
+ <span class="cm">// AI 执行路径:</span>
773
+ 1. 意图路由 → "审核时" → 操作插件
774
+ 2. 决策矩阵 → #op-plugin
775
+ 3. 确认卡 → onAddValidators 事件
776
+ 4. 读 OpPluginTemplate.java
777
+ 5. 查 cheat-sheet → getEntryRowCount API
778
+ 6. 生成代码 → Post-Check ✅
779
+ </div>
780
+ </div>
781
+ <div class="card" style="text-align:left;">
782
+ <h3>场景三:BOTP 下推</h3>
783
+ <div class="code-block" style="font-size:.82em; margin-top:8px;">
784
+ <span class="cm">// 用户说:</span>
785
+ <span class="str">"实现销售订单到出库单的下推转换"</span>
786
+
787
+ <span class="cm">// AI 执行路径:</span>
788
+ 1. 意图路由 → "下推" → 转换插件
789
+ 2. 决策矩阵 → #convert-plugin
790
+ 3. 读 BotpTracePushSample 片段
791
+ 4. 读 ConvertPlugInTemplate.java
792
+ 5. 生成代码 → Post-Check ✅
793
+ </div>
794
+ </div>
795
+ <div class="card" style="text-align:left;">
796
+ <h3>场景四:API 签名校验</h3>
797
+ <div class="code-block" style="font-size:.82em; margin-top:8px;">
798
+ <span class="cm">// 用户说:</span>
799
+ <span class="str">"查询 QueryServiceHelper 的 loadSingle 用法"</span>
800
+
801
+ <span class="cm">// AI 执行路径:</span>
802
+ 1. 调用 cosmic_get_class_detail
803
+ 2. detail kd.bos.servicehelper
804
+ .QueryServiceHelper
805
+ --method loadSingle --compact
806
+ 3. 返回精确签名 + 参数说明
807
+ 4. 写入代码 → 签名保证准确
808
+ </div>
809
+ </div>
810
+ </div>
811
+ </div>
812
+
813
+ <!-- ============ SLIDE 17: Summary ============ -->
814
+ <div class="slide center">
815
+ <h2>总结</h2>
816
+ <div class="grid-2 w-full" style="margin-top:20px;">
817
+ <div>
818
+ <div class="card" style="text-align:left; margin-bottom:16px;">
819
+ <h3 style="color:#fff;">核心价值</h3>
820
+ <ul style="font-size:.95em;">
821
+ <li><strong>消除 API 幻觉</strong> — 黑名单 + 知识库校验双保险</li>
822
+ <li><strong>事件时机正确</strong> — 场景错配自动检测</li>
823
+ <li><strong>封装优先落地</strong> — 模板 + 规则引导使用封装</li>
824
+ <li><strong>交付质量保证</strong> — Post-Check 自动闭环校验</li>
825
+ <li><strong>拓展库兜底</strong> — extensionRepos 补足内置资产的长尾空白</li>
826
+ <li><strong>Token 高效</strong> — 索引 + 按需加载最小化上下文</li>
827
+ </ul>
828
+ </div>
829
+ <div class="card" style="text-align:left;">
830
+ <h3 style="color:#fff;">兼容性</h3>
831
+ <ul style="font-size:.95em;">
832
+ <li>Claude Code / Qoder</li>
833
+ <li>OpenCode / Codex</li>
834
+ <li>Gemini CLI</li>
835
+ <li>任何支持 Skill 的 AI Agent</li>
836
+ </ul>
837
+ </div>
838
+ </div>
839
+ <div>
840
+ <div class="card" style="text-align:center; padding:40px;">
841
+ <div class="hero-logo" style="font-size:4em;">🚀</div>
842
+ <div class="version" style="margin:12px 0;">v1.3.0</div>
843
+ <h2 style="font-size:1.8em; margin-bottom:8px;">ok-cosmic</h2>
844
+ <p style="color:var(--text-muted);">让 AI 真正理解苍穹 SDK<br>写出生产级代码</p>
845
+ <div style="margin-top:24px; display:flex; gap:8px; flex-wrap:wrap; justify-content:center;">
846
+ <span class="tag tag-blue">15 模板</span>
847
+ <span class="tag tag-purple">7 工具</span>
848
+ <span class="tag tag-green">6 检查器</span>
849
+ <span class="tag tag-amber">24 片段</span>
850
+ <span class="tag tag-red">19 硬规则</span>
851
+ </div>
852
+ </div>
853
+ </div>
854
+ </div>
855
+ <p style="margin-top:32px; color:var(--text-muted); font-size:.9em;">作者:陈泽贤、钱芮名 &nbsp;|&nbsp; 金蝶云苍穹 AI 开发技能</p>
856
+ </div>
857
+
858
+ </div><!-- /deck -->
859
+
860
+ <!-- Navigation -->
861
+ <div class="nav">
862
+ <button onclick="go(-1)" title="上一页">‹</button>
863
+ <button onclick="go(1)" title="下一页">›</button>
864
+ </div>
865
+
866
+ <script>
867
+ const slides = document.querySelectorAll('.slide');
868
+ let cur = 0;
869
+
870
+ function show(n) {
871
+ slides.forEach((s, i) => {
872
+ s.classList.remove('active', 'prev');
873
+ if (i === n) s.classList.add('active');
874
+ else if (i < n) s.classList.add('prev');
875
+ });
876
+ document.getElementById('progress').style.width = ((n + 1) / slides.length * 100) + '%';
877
+ document.getElementById('pageNum').textContent = (n + 1) + ' / ' + slides.length;
878
+ }
879
+
880
+ function go(d) {
881
+ cur = Math.max(0, Math.min(slides.length - 1, cur + d));
882
+ show(cur);
883
+ }
884
+
885
+ document.addEventListener('keydown', e => {
886
+ if (e.key === 'ArrowRight' || e.key === ' ' || e.key === 'PageDown') { e.preventDefault(); go(1); }
887
+ if (e.key === 'ArrowLeft' || e.key === 'PageUp') { e.preventDefault(); go(-1); }
888
+ if (e.key === 'Home') { e.preventDefault(); cur = 0; show(cur); }
889
+ if (e.key === 'End') { e.preventDefault(); cur = slides.length - 1; show(cur); }
890
+ });
891
+
892
+ // Touch support
893
+ let touchX = 0;
894
+ document.addEventListener('touchstart', e => touchX = e.touches[0].clientX);
895
+ document.addEventListener('touchend', e => {
896
+ const dx = e.changedTouches[0].clientX - touchX;
897
+ if (Math.abs(dx) > 50) go(dx < 0 ? 1 : -1);
898
+ });
899
+
900
+ show(0);
901
+ </script>
902
+ </body>
903
+ </html>