cloudcc-cli 2.3.8 → 2.4.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 (66) hide show
  1. package/.cursor/skills/{cloudcc-cli-dev → dev-guide}/SKILL.md +5 -1
  2. package/README.md +82 -1
  3. package/bin/cc.js +2 -1
  4. package/bin/index.js +1 -0
  5. package/cloudcc-dev-skill/SKILL.md +31 -8
  6. package/cloudcc-dev-skill/cloudcc-dev-html.md +42 -0
  7. package/cloudcc-dev-skill/config.json +2 -2
  8. package/mcp/index.js +27 -3
  9. package/mcp/tools/JSP Migrator/handler.js +51 -866
  10. package/mcp/tools/Object Creator/handler.js +14 -4
  11. package/mcp/tools/Object Fields Creator/handler.js +149 -3
  12. package/package.json +1 -1
  13. package/src/classes/docs/devguide.md +758 -364
  14. package/src/classes/docs/introduction.md +279 -143
  15. package/src/fields/buildFieldData.js +692 -0
  16. package/src/fields/create.js +10 -170
  17. package/src/fields/detail.js +37 -0
  18. package/src/fields/docs/devguide.md +168 -44
  19. package/src/fields/docs/introduction.md +2 -0
  20. package/src/fields/fields/A.js +3 -2
  21. package/src/fields/fields/AD.js +4 -2
  22. package/src/fields/fields/B.js +8 -5
  23. package/src/fields/fields/C.js +13 -5
  24. package/src/fields/fields/D.js +4 -4
  25. package/src/fields/fields/E.js +10 -5
  26. package/src/fields/fields/ENC.js +27 -8
  27. package/src/fields/fields/ENCD.js +27 -8
  28. package/src/fields/fields/F.js +4 -4
  29. package/src/fields/fields/FL.js +8 -4
  30. package/src/fields/fields/H.js +4 -4
  31. package/src/fields/fields/IMG.js +23 -5
  32. package/src/fields/fields/J.js +21 -6
  33. package/src/fields/fields/L.js +32 -8
  34. package/src/fields/fields/LT.js +23 -6
  35. package/src/fields/fields/M.js +2 -2
  36. package/src/fields/fields/MR.js +2 -2
  37. package/src/fields/fields/N.js +31 -8
  38. package/src/fields/fields/P.js +13 -5
  39. package/src/fields/fields/Q.js +42 -12
  40. package/src/fields/fields/S.js +19 -7
  41. package/src/fields/fields/SCORE.js +9 -4
  42. package/src/fields/fields/T.js +4 -4
  43. package/src/fields/fields/U.js +18 -5
  44. package/src/fields/fields/X.js +20 -6
  45. package/src/fields/fields/Y.js +17 -4
  46. package/src/fields/index.js +2 -0
  47. package/src/fields/update.js +148 -0
  48. package/src/jsp/analyze.js +17 -0
  49. package/src/jsp/doc.js +18 -0
  50. package/src/jsp/docs/devguide.md +111 -0
  51. package/src/jsp/docs/introduction.md +50 -0
  52. package/src/jsp/docs.js +21 -0
  53. package/src/jsp/index.js +14 -0
  54. package/src/jsp/migration.js +871 -0
  55. package/src/jsp/split.js +17 -0
  56. package/src/object/create.js +36 -10
  57. package/src/object/docs/devguide.md +6 -3
  58. package/src/project/docs/devguide.md +1 -1
  59. package/src/timer/docs/devguide.md +849 -400
  60. package/src/timer/docs/introduction.md +343 -231
  61. package/src/triggers/docs/devguide.md +929 -352
  62. package/src/triggers/docs/introduction.md +640 -369
  63. package/src/version/listModuleCommands.js +6 -0
  64. package/test/fields.cli.test.js +3 -1
  65. package/test/jsp.cli.test.js +70 -0
  66. package/test/object.cli.test.js +9 -1
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: cloudcc-cli-dev
2
+ name: dev-guide
3
3
  description: >-
4
4
  Defines how cloudcc-cli extends the `cc` command: argv shape, `bin/cc.js` entry
5
5
  (global flags, doctor/docs/init, action-level `-h`), `bin/index.js` Proxy routing,
@@ -124,6 +124,10 @@ cloudcc <动作 action> <资源 resource> <其余参数 ...>
124
124
  3. 若有 `doc`,在 `src/<resource>/doc.js` 与 `docs/` 中维护说明;通过 `cloudcc doc <resource>` 可读。
125
125
  4. 更新 `src/version/listModuleCommands.js`:**`MODULE_KEYS_ORDER`**、**`MODULE_FOLDER`**,必要时 **`MODULE_HINT`**、**`RESOURCE_CN`**、**`describeActionLine`** 中的映射,保证 `cloudcc --help` 与 `cloudcc <action> -h` 正确。
126
126
  5. 自测:`node bin/cc.js <动作> <resource> …`、`cloudcc --help` / `cc --help`、`cloudcc <action> -h`;若 MCP 通过 `cliRunner` 调 **`cloudcc`**,确认参数顺序与文档一致。
127
+ 6. 若涉及 `fields` 模块的 `create` 参数扩展:保持“固定参数位置 + 空占位”约定,并同步更新实现、`src/fields/docs/devguide.md` 以及 MCP “Object Fields Creator” 参数透传。
128
+ - `cloudcc create fields`:`argvs[6]` 固定为 `remark`(写入 `obj.remark`)。
129
+ - 新增字段类型特殊参数时:按类型把参数按固定顺序追加到 `argvs` 后面(无值时调用方用空字符串占位),避免下标错位。
130
+ - 如有联动参数(如 `casesensitive` 依赖 `isrepeat=false`):以实现为准,并在文档里明确“何时生效”。
127
131
 
128
132
  ---
129
133
 
package/README.md CHANGED
@@ -71,9 +71,90 @@ Resolve the script path on macOS/Linux with:
71
71
  echo "$(npm root -g)/cloudcc-cli/bin/mcp.js"
72
72
  ```
73
73
 
74
+ # ReleaseV2.4.0
75
+
76
+ #### Release Date: 2026-4-8
77
+
78
+ #### Release Scope: Full
79
+
80
+ #### Release Content
81
+
82
+ - JSP migration module
83
+ - Added a new `jsp` resource module with `cloudcc analyze jsp`, `cloudcc split jsp`, and `cloudcc doc jsp <introduction|devguide>`
84
+ - Added migration pipeline support for JSP analysis and split generation, including parameter parsing and migration report output
85
+ - Added `src/jsp/docs/introduction.md` and `src/jsp/docs/devguide.md` for CLI-first JSP migration guidance
86
+ - CLI integration
87
+ - Registered `jsp` in `bin/index.js` and `src/version/listModuleCommands.js` so `cloudcc --help` and `cloudcc <action> -h` can discover JSP commands
88
+ - Improved CLI error handling in `bin/cc.js` by setting non-zero exit code and printing cleaner error messages
89
+ - MCP and skill alignment
90
+ - Refactored `mcp/tools/JSP Migrator/handler.js` to align with the new JSP module workflow
91
+ - Updated `cloudcc-dev-skill` docs/config to include JSP migration commands and latest skill metadata
92
+ - Documentation and tests
93
+ - Updated project devguide wording for current-directory project creation
94
+ - Added JSP CLI tests in `test/jsp.cli.test.js` for command contract coverage
95
+
96
+ # ReleaseV2.3.9
97
+
98
+ #### Release Date: 2026-4-3
99
+
100
+ #### Release Scope: Full
101
+
102
+ #### Release Content
103
+
104
+ - Fields
105
+ - Added unified `remark` input for `cloudcc create fields` (writes to `obj.remark`)
106
+ - Extended `S` field creation with `schemefieldLength`, `helps`, `isrepeat`, `casesensitive`, `placeholder`, and `defaultValue`
107
+ - Extended `U` (URL) field creation with optional `helps`, `edittype` (`_blank` / `_self`), and `defaultValue` (fixed argv positions after `remark`)
108
+ - Updated the MCP “Object Fields Creator” tool to pass the new `S` parameters, optional `U` parameters, and optional `remark`; expanded `create_object_field` input schema to include these fields
109
+ - Extended `P` (percent) field creation with optional `helps`, `defaultValue`, `schemefieldLength` (digits left of the decimal point), and `decimalPlaces` (digits right of the decimal point); defaults remain `10` / `2` when omitted; MCP `create_object_field` and schema pass `P` parameters and document `decimalPlaces` / per-type `schemefieldLength` semantics
110
+ - Enforced percent (`P`) precision rule: `schemefieldLength` + `decimalPlaces` must be non-negative integers and their sum must not exceed **18**
111
+ - Added `cloudcc update fields` (POST `/api/fieldSetup/saveField`) to update existing fields; requires field id on `obj`; refactored shared payload building into `src/fields/buildFieldData.js` with argv shift for create vs update
112
+ - `update fields` / `saveField`: when merging server field metadata from `queryField`, also copy `apiname` from `schemefieldName` or `apiname` so the save payload stays aligned with the platform field definition
113
+ - Added `cloudcc detail fields` (POST `/api/fieldSetup/editField`) to load field edit-page data (`fieldId`, `fdtype`, `objid`)
114
+ - Extended `C` (currency) field creation with optional `helps`, `defaultValue`, `schemefieldLength`, and `decimalPlaces` (same argv layout and **≤ 18** total-digit rule as `P`)
115
+ - Extended `N` (number) field creation with optional `schemefieldLength` (integer digits left of the decimal), `decimalPlaces` (fraction digits), `isrepeat` (allow duplicate values; default `true`), and `displayThousands` (platform flag: `"1"` disallows repeats, `"0"` allows repeats per current CloudCC mapping; argv slots `argvs[9..12]` on **create**); **≤ 18** total digits enforced like `P`/`C`; MCP passes the same parameters
116
+ - Simple field templates (`U`, `D`, `T`, `F`, `B`, `H`, `E`, `IMG`, `AD`) now set default `obj.schemefieldLength` where missing (e.g. **phone `H`=`15`**, **email `E`=`254`**, **URL `U`=`2000`**, **date/time `D`/`T`/`F`=`20`/`20`/`30`**, **checkbox `B`=`10`**, **image `IMG`=`255`**, **address `AD`=`500`**) so save payloads align with platform length fields
117
+ - `B` (checkbox): `defaultValue` is coerced to **`"0"`** (unchecked) or **`"1"`** (checked) only; any other value falls back to **`"0"`**
118
+ - `E` (email): optional `isrepeat` at `argvs[9]` (**`"true"`** allows duplicate values, **`"false"`** disallows; default **`"true"`**); MCP passes the same parameter
119
+ - `SCORE` (rating): optional `schemefieldLength` at `argvs[9]` as **max score** (number of star icons), integer **1–100**, default **`10`**; MCP passes the same parameter
120
+ - `X` (multiline text area): optional `schemefieldLength` at `argvs[9]` (**max characters 1–4000**, default **`4000`**) and optional `placeholder` at `argvs[10]`; MCP passes the same parameters
121
+ - `J` (long multiline text): same argv layout as `X` with **max characters 1–32000** (default **`32000`**); platform limits **10 `J` fields per object** (not enforced by CLI); MCP passes the same parameters
122
+ - `IMG` (image): `defaultValue` at `argvs[8]` is **max upload count** (integer **1–100**, default **`3`** when omitted); optional `formulaType` (`url` / `input`) at `argvs[9]` (default **`input`**); optional `watermarkstatus` (`"0"` / `"1"`) at `argvs[10]` (default **`"0"`**); MCP passes `formulaType` and `watermarkstatus`
123
+ - `FL` (file): **`obj.defaultValue`** and **`obj.isrepeat`** are both set to the **max file upload count** (integer **1–100**, default **`1`** when omitted); `buildFieldData` validates the count like **`IMG`**
124
+ - `L` (picklist): optional **`useGlobalSelect`** / **`edittype`** (**`radio`** or **`select`** on **`obj`**) / **`isPicklistSorted`** / **`defPl`** / **`globalSelectId`** at **`argvs[10..14]`** (create); **`ptext`** required when **`useGlobalSelect`** is **`"0"`**; **`globalSelectId`** required when **`useGlobalSelect`** is **`"1"`**; defaults **`useGlobalSelect`=`"0"`**, **`edittype`=`select`**, sorted/defPl **`"0"`**; MCP **`create_object_field`** adds the same **`L`**-only arguments after **`ptext`**
125
+ - `Q` (multi-select picklist): same argv layout as **`L`** through **`argvs[14]`**, plus **`visibleLines`** (**`obj.visibleLines`**, integer **1–100**, default **`4`**) and **`showalloptions`** (**`obj.showalloptions`**, **`"0"`**/**`"1"`**, default **`"0"`**) at **`argvs[15..16]`**; **`ptext`** / **`globalSelectId`** rules match **`L`**; MCP passes **`visibleLines`** and **`showalloptions`**
126
+ - `Y` (lookup): **`lookupObj`** at **`argvs[9]`**; optional **`lookupObjDefaultField`** (**`obj.lookupObjDefaultField`**, search/display helper when searching) at **`argvs[10]`**; **`MR`** / **`M`** unchanged (**`lookupObj`** only); MCP passes **`lookupObjDefaultField`** only for **`Y`**
127
+ - **`Y`** / **`MR`** / **`M`**: save payload **`obj`** no longer includes **`defaultValue`** (CLI **`argvs[8]`** unchanged for **`helps`** / **`defaultValue`** position; platform lookup/master-detail fields do not use **`obj.defaultValue`** in these templates)
128
+ - **`ENC`** / **`ENCD` (encrypted text)**: **`obj.schemefieldLength`** (**1–255**, **`argvs[9]`**); top-level **`masktype`** (**`all`** / **`4`** / **`card`** / **`custom`**, **`argvs[10]`**), **`encrypttype`** (when **`masktype`=`custom`**, **`argvs[11]`**), **`maskcharacter`** (**`*`**/**`X`**, **`argvs[12]`**); same argv layout for both types
129
+ - **`LT` (geolocation)**: **`obj.schemefieldLength`** / **`obj.decimalPlaces`** (integer + fractional digits, **≤ 18** total like **`P`**/**`C`**/**`N`**, default **`8`**/**`10`**, **`argvs[9]`**/**`argvs[10]`**); **`displayType`** (**`"1"`** numeric / **`"2"`** DMS, **`argvs[11]`**); MCP passes **`schemefieldLength`**, **`decimalPlaces`**, **`displayType`**
130
+ - Most field templates wire **`helps`** and, where applicable, **`defaultValue`** on **`obj`**; `buildFieldData` uses a unified argv layout (`helps` / `defaultValue` at fixed indices after `remark`, then type-specific args from the next slot—e.g. `ptext` / `lookupObj` at `argvs[9]` for `L`/`Q`/`Y`/`MR`/`M` on **create**); MCP **Object Fields Creator** follows the same order
131
+ - **Argv contract (create, after `remark`=`argvs[6]`)**: `helps`=`argvs[7]`, `defaultValue`=`argvs[8]`; type-specific extras start at `argvs[9]` (`S`: length / `isrepeat` / `placeholder` / `casesensitive`; `U`: `edittype`; `P`/`C`: integer digits / `decimalPlaces`; `N`: integer digits / `decimalPlaces` / `isrepeat` / `displayThousands`; `E`: `isrepeat`; `SCORE`: `schemefieldLength` (max score / stars, 1–100); `X`: `schemefieldLength` (max chars, 1–4000) / `placeholder`; `J`: `schemefieldLength` (max chars, 1–32000) / `placeholder`; `IMG`: `formulaType` / `watermarkstatus`; `L`: `ptext` then `useGlobalSelect` / `edittype` (`radio`/`select`) / `isPicklistSorted` / `defPl` / `globalSelectId` at `argvs[10..14]`; `Q`: same as `L` through `argvs[14]`, then `visibleLines` / `showalloptions` at `argvs[15..16]`; `Y`: `lookupObj` at `argvs[9]`, optional `lookupObjDefaultField` at `argvs[10]`; `MR`/`M`: `lookupObj` at `argvs[9]`; `ENC`/`ENCD`: `schemefieldLength` (1–255) at `argvs[9]`, `masktype` / `encrypttype` / `maskcharacter` at `argvs[10..12]`; `LT`: `schemefieldLength` / `decimalPlaces` at `argvs[9..10]`, `displayType` at `argvs[11]`). **`update fields`** shifts those indices by **+1** (`remark`=`argvs[7]`, so `helps`=`argvs[8]`, `defaultValue`=`argvs[9]`, extras from `argvs[10]`).
132
+ - **Implementation**: `src/fields/buildFieldData.js` parses `S`, `U`, `P`, `C`, `N`, `E`, `SCORE`, `X`, `J`, `IMG`, `L`, `Q`, `Y`, `MR`, `M`, `ENC`, `ENCD`, and `LT` using the above layout (single `readHelpsDefault` helper for `helps`/`defaultValue`); MCP `create_object_field` pushes arguments in the same order as the CLI.
133
+ - Documentation
134
+ - Updated `src/fields/docs/devguide.md` and `introduction.md` (`S`/`remark`, `U`, `L`/`Q` with **CRLF** `\r\n` for picklists, `P`, `C`, universal `helps`/`defaultValue`, `detail` / `update`, API notes)
135
+ - **`devguide`**: “Field-specific parameters” section rewritten to match the unified argv rule; shell examples for `L`/`Q`/`Y`/`MR`/`M` now show `[helps] [defaultValue]` before `ptext` / `lookupObj`; `N` documents `schemefieldLength` / `decimalPlaces` / `isrepeat` / `displayThousands` at `argvs[9..12]` (create); `B` documents checkbox `defaultValue` **`"0"`**/**`"1"`** only; `E` documents `isrepeat` at `argvs[9]`; `SCORE` documents max score (stars) **`1`–`100`** at `argvs[9]`; `X` documents max chars **`1`–`4000`** and `placeholder` at `argvs[9]` / `argvs[10]`; `J` documents **`1`–`32000`**, **10 fields per object** (platform), same argv slots as `X`; `IMG` documents upload count **`1`–`100`** at `argvs[8]` (default **`3`**), `formulaType` / `watermarkstatus` at `argvs[9]` / `argvs[10]`.
136
+ - **`IMG` / `FL`**: JSDoc on `src/fields/fields/IMG.js` and `FL.js` documents `defaultValue` (max images / max files), plus `IMG` `formulaType` (`url` / `input`) and `watermarkstatus` (`"0"` / `"1"`); **`devguide.md`** adds a **`FL`** subsection and table row (`defaultValue` = max file count, default **`1`**) and lists `FL` separately from types that only share generic `helps` / `defaultValue`
137
+ - **`FL` (follow-up)**: **`devguide.md`** updated so **`FL`** upload count (**1–100**) is written to both **`obj.defaultValue`** and **`obj.isrepeat`**; **`buildFieldData`** adds **`validateFlUploadCount`**; **`mcp/index.js`** `create_object_field` **`defaultValue`** schema documents **`FL`** (saved **`isrepeat`** matches the count)
138
+ - **`L` (picklist)**: **`src/fields/fields/L.js`** and **`buildFieldData`** support **`useGlobalSelect`**, **`obj.edittype`** (**`radio`**/**`select`**), **`isPicklistSorted`**, **`defPl`**, **`globalSelectId`**; **`devguide.md`** and MCP **`create_object_field`** (schema + **Object Fields Creator** argv) document **`argvs[10..14]`** after **`ptext`**
139
+ - **`Q` (multi-select picklist)**: **`src/fields/fields/Q.js`** aligns with **`L`** for global/sort options and adds **`obj.visibleLines`** / **`obj.showalloptions`**; **`buildFieldData`** **`normalizeQVisibleLines`**; **`devguide`** / MCP document **`argvs[15..16]`**
140
+ - **`devguide` (`L`/`Q`)**: shell placeholder wording for optional **`ptext`**-after slots now starts at **`argvs[10]`** (matches **`useGlobalSelect`** first), not **`argvs[12]`**
141
+ - **`Y` (lookup)**: optional **`lookupObjDefaultField`** (**`obj.lookupObjDefaultField`**, search/display helper) at **`argvs[10]`** (create); MCP **`create_object_field`** passes **`lookupObjDefaultField`** after **`lookupObj`**
142
+ - **`Y` / `MR` / `M`**: **`src/fields/fields/Y.js`**, **`MR.js`**, **`M.js`** drop **`obj.defaultValue`** from the create/save payload (aligned with platform lookup / master-detail field definitions)
143
+ - **`ENC` / `ENCD`**: **`ENC.js`** / **`ENCD.js`** + **`buildFieldData`** share **`schemefieldLength`** (≤255), **`masktype`**, **`encrypttype`**, **`maskcharacter`**; **`devguide`** / MCP document **`argvs[9..12]`**
144
+ - **`LT` (geolocation)**: **`LT.js`** + **`buildFieldData`** **`validateCurrencyLikePrecision`** for **`obj`** length fields; **`displayType`**; **`devguide`** / MCP **`argvs[9..11]`**
145
+ - Refreshed **`package.json` / npm** version to **2.3.12** (patch-line **2.3.9–2.3.12** changelog is consolidated in this **ReleaseV2.3.9** section); this README supplement documents **`C` + universal `helps`/`defaultValue`** without a new npm version bump
146
+ - **Classes**: Rewrote `src/classes/docs/devguide.md` as an AI-oriented custom-class spec (when to use classes, mandatory cloudcc-cli workflow, SOURCE-only business code, `UserInfo`/`CCService`, thin entry points, SDK usage, structure); expanded and aligned `src/classes/docs/introduction.md`
147
+ - **Timer**: Rewrote `src/timer/docs/devguide.md` as an AI-oriented scheduled-job (`CCSchedule`) spec (fit checks vs triggers/pages, cloudcc-cli `schedule/` workflow, idempotency/observability/batch/timezone, SDK alignment); expanded and aligned `src/timer/docs/introduction.md`
148
+ - **Timer (follow-up)**: Trimmed duplicate framing in `src/timer/docs/devguide.md` (removed redundant “sources” list wrapper and SDK appendix intro paragraphs; kept bullet lists and SDK reference content)
149
+ - **Triggers**: Rewrote `src/triggers/docs/devguide.md` as an AI-oriented trigger spec (fit checks vs schedulers/classes/pages, real project layout and CLI constraints, SDK usage, structure, recursion/perf pitfalls); expanded and aligned `src/triggers/docs/introduction.md`
150
+ - **Repo `cloudcc-cli.config.js`**: Default `use` is now `appstore-cn` (was `hls`); removed the `hls` environment block from the checked-in sample config
151
+ - Object
152
+ - **`cloudcc create object`** requires a **business description** as the **last** positional argument. The **`obj.remark`** payload is the default label-based prefix sentence plus a space plus that description. Supported forms: ``cloudcc create object <path> <label> <businessDescription>`` (auto-generated `nameLabel`) and ``cloudcc create object <path> <label> <nameLabel> <businessDescription>``. Omitting the description prints a usage hint and fails fast with an error.
153
+ - MCP tool **`create_custom_object`**: **`businessDescription`** is **required** (schema `z.string().min(1)`); **`mcp/tools/Object Creator/handler.js`** passes it as the trailing CLI argument. **`src/object/docs/devguide.md`** updated for the new contract.
154
+
74
155
  # ReleaseV2.3.8
75
156
 
76
- #### Release Date: 2026-4-1
157
+ #### Release Date:
77
158
 
78
159
  #### Release Scope: Full
79
160
 
package/bin/cc.js CHANGED
@@ -116,8 +116,9 @@ async function runWithArgvs(argv) {
116
116
  try {
117
117
  await cc[act](argv)
118
118
  } catch (e) {
119
+ process.exitCode = 1
119
120
  console.error()
120
- console.error(chalk.yellow("请查看帮助:cloudcc --help"), e)
121
+ console.error(chalk.yellow("请查看帮助:cloudcc --help"), e && e.message ? e.message : e)
121
122
  console.error()
122
123
  }
123
124
  }
package/bin/index.js CHANGED
@@ -11,6 +11,7 @@ const modules = {
11
11
  triggers: require("../src/triggers/index"),
12
12
  timer: require("../src/timer/index"),
13
13
  script: require("../src/script/index"),
14
+ jsp: require("../src/jsp/index"),
14
15
  token: require("../src/token/index"),
15
16
  object: require("../src/object/index"),
16
17
  recordType: require("../src/recordType/index"),
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: cloudcc-dev-skill
3
- description: 用于 CloudCC CRM 二次开发设计与实施。优先通过 `cloudcc doc <module> introduction|devguide` 获取官方模块文档,再给出方案与代码。用户提到 CloudCC、cloudcc-cli、模块文档、对象/字段、权限、触发器、类、组件、页面、脚本、静态资源、菜单、应用、单点登录、身份提供方、校验规则时应优先使用。
3
+ description: 用于 CloudCC CRM 二次开发设计与实施。优先通过 `cloudcc doc <module> introduction|devguide` 获取官方模块文档,再给出方案与代码。用户提到 CloudCC、cloudcc-cli、模块文档、对象/字段、权限、触发器、类、组件、页面、脚本、JSP迁移、静态资源、菜单、应用、单点登录、身份提供方、校验规则时应优先使用。
4
4
  ---
5
5
 
6
6
  # CloudCC CRM 二开技能
@@ -14,16 +14,17 @@ description: 用于 CloudCC CRM 二次开发设计与实施。优先通过 `clou
14
14
 
15
15
  - 先确认 CLI 可用:优先检查 `cloudcc --version`。
16
16
  - 若未安装,执行:`npm i -g cloudcc-cli@latest`。
17
- - 只要涉及 CloudCC 设计或开发,先查文档再回答:优先 `introduction`,落地时看 `devguide`。
17
+ - 当进行 CloudCC 方案设计时,必须读取所有模块的`introduction`文档后,再设计
18
+ - 当进行 CloudCC 方案开发时,需要读取,对应模块的`devguide`信息后,再开发
18
19
  - 命令统一格式:`cloudcc doc <module> <introduction|devguide>`。
19
20
  - 特例:`config` 仅支持 `devguide`,不支持 `introduction`。
20
21
 
21
- ## 模块指令清单(按仓库当前实现)
22
+ ## 模块指令清单
22
23
 
23
24
  ### 基础与环境
24
25
 
25
26
  - 项目:`cloudcc doc project introduction`、`cloudcc doc project devguide`
26
- - 配置:`cloudcc doc config devguide`(仅该子命令)
27
+ - 配置:`cloudcc doc config devguide`
27
28
 
28
29
  ### 元数据与模型
29
30
 
@@ -51,11 +52,18 @@ description: 用于 CloudCC CRM 二次开发设计与实施。优先通过 `clou
51
52
 
52
53
  ### 前端扩展
53
54
 
54
- - 组件:`cloudcc doc plugin introduction`、`cloudcc doc plugin devguide`
55
+ - 自定义Vue组件:`cloudcc doc plugin introduction`、`cloudcc doc plugin devguide`
56
+ - 自定义Html组件:`./cloudcc-dev-html.md`
55
57
  - 自定义页面:`cloudcc doc customPage introduction`、`cloudcc doc customPage devguide`
56
58
  - 客户端脚本:`cloudcc doc script introduction`、`cloudcc doc script devguide`
57
59
  - 静态资源:`cloudcc doc staticResource introduction`、`cloudcc doc staticResource devguide`
58
60
 
61
+ ### 迁移与改造
62
+
63
+ - JSP 迁移文档:`cloudcc doc jsp introduction`、`cloudcc doc jsp devguide`
64
+ - JSP 分析:`cloudcc analyze jsp <encodeURI(JSON.stringify(params))>`
65
+ - JSP 拆分生成:`cloudcc split jsp <encodeURI(JSON.stringify(params))>`
66
+
59
67
  ### 平台导航与系统能力
60
68
 
61
69
  - 菜单:`cloudcc doc menu introduction`、`cloudcc doc menu devguide`
@@ -66,13 +74,28 @@ description: 用于 CloudCC CRM 二次开发设计与实施。优先通过 `clou
66
74
 
67
75
  ## 使用流程(执行顺序)
68
76
 
69
- 1. 方案阶段:先调用 `cloudcc doc <module> introduction`,确认能力边界与适用场景。
77
+ 1. 方案阶段:先调用
78
+ `cloudcc doc <module> introduction`,确认能力边界与适用场景。
70
79
  2. 实施阶段:再调用 `cloudcc doc <module> devguide`,按文档落地 CLI 命令与配置。
71
- 3. 环境阶段:涉及项目初始化或鉴权问题时,优先查看 `project devguide` 与 `config devguide`。
80
+ 3. 环境阶段:涉及项目初始化或鉴权问题时,优先查看 `project devguide` 与
81
+ `config devguide`。
82
+ 4. 若是旧系统 JSP 改造,先看 `cloudcc doc jsp devguide` 中的“JSP 迁移规则”章节,再执行 `cloudcc analyze jsp` / `cloudcc split jsp`。
72
83
 
73
84
  ## 响应要求
74
85
 
75
86
  - 给方案或代码前,先明确引用了哪些 `cloudcc doc` 模块文档。
76
87
  - 若用户没有指定模块,先反问业务对象(如对象、权限、触发器、页面)或先给一个最小可行模块列表。
77
88
  - 输出命令时保持可直接复制执行,不混用过时命令格式。
78
- - **发布日志/Release Notes 规则(强制)**:凡是更新发布记录、版本日志、README `Release`/`Release Notes` 区块,内容必须使用英文(标题、日期标签、条目描述均不得使用中文)。
89
+ - 若用户在 IDE / MCP 场景中做 JSP 迁移,可使用 MCP 工具 `get_jsp_migration_rules`、`analyze_jsp_migration`、`split_jsp_to_cloudcc`,但其规则来源仍以 `cloudcc doc jsp devguide` 为准。
90
+ - **发布日志/Release Notes 规则(强制)**:凡是更新发布记录、版本日志、README 中
91
+ `Release`/`Release Notes`
92
+ 区块,内容必须使用英文(标题、日期标签、条目描述均不得使用中文)。
93
+
94
+ ## 快速规则
95
+
96
+ - 先确认 CLI 可用:优先检查 `cloudcc --version`。
97
+ - 若未安装,执行:`npm i -g cloudcc-cli@latest`。
98
+ - 当进行 CloudCC 方案设计时,必须读取所有模块的`introduction`文档后,再设计
99
+ - 当进行 CloudCC 方案开发时,需要读取,对应模块的`devguide`信息后,再开发
100
+ - 命令统一格式:`cloudcc doc <module> <introduction|devguide>`。
101
+ - 特例:`config` 仅支持 `devguide`,不支持 `introduction`。
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: cloudcc-dev-html
3
+ description: 指导在 CloudCC 相关仓库中编写单个 HTML 入口页:推荐 Tailwind(tailwindcss-browser)、Alpine.js、ECharts(BootCDN)、可使用 window.$CCDK。用户提到单页 HTML、html/index、BootCDN、Tailwind、Alpine、ECharts、CCDK、$CCDK 时使用。
4
+ ---
5
+
6
+ # CloudCC 单 HTML 页面开发规范
7
+
8
+ 版本信息见同目录 [config.json](config.json)。
9
+
10
+ ## 1. 技能用途:创建单个 HTML 页面
11
+
12
+ - 本技能用于在项目中编写**单个 HTML 入口文件**(通常为 **`html/index.html`**),在 CloudCC 内嵌或单独打开,与 `plugins/` 等业务源码区分存放。
13
+ - 静态依赖(样式、脚本、字体等)**优先使用线上绝对地址**(`https://...`)引入;**公有云**推荐 [BootCDN](https://www.bootcdn.cn/) 等中国大陆可稳定访问的源;**私有云 / 内网**可将所需文件下载后上传到组织静态资源,再改为静态资源 URL。
14
+ - 平台业务接口与模块说明以 **cloudcc-dev-skill**(`cloudcc doc <module>`)为准;本技能不替代平台开发指南。
15
+
16
+ ## 2. 页面推荐的样式与交互库
17
+
18
+ 以下为独立页**推荐**组合(通过 BootCDN 固定版本,升级时改 URL 中版本号;私有云按上一节改链)。
19
+
20
+ **样式:Tailwind CSS(tailwindcss-browser,浏览器端编译)**
21
+
22
+ ```html
23
+ <script src="https://cdn.bootcdn.net/ajax/libs/tailwindcss-browser/4.1.13/index.global.min.js"></script>
24
+ ```
25
+
26
+ **交互:Alpine.js v3(CDN 构建,使用 `defer`,放在 `head`;与 Tailwind 同页时 Tailwind 在前、Alpine 在后)**
27
+
28
+ ```html
29
+ <script defer src="https://cdn.bootcdn.net/ajax/libs/alpinejs/3.15.0/cdn.min.js"></script>
30
+ ```
31
+
32
+ **图表:ECharts(按需引入;与 Tailwind、Alpine 同页时,建议放在二者之后,在初始化图表的脚本之前加载)**
33
+
34
+ ```html
35
+ <script src="https://cdn.bootcdn.net/ajax/libs/echarts/6.0.0/echarts.min.js"></script>
36
+ ```
37
+
38
+ ## 3. 页面可使用 CCDK
39
+
40
+ - 在 CloudCC 运行环境(自定义页面、内嵌 HTML 等)中,可通过 **`window.$CCDK`** 使用平台提供的 **CCDK** 能力;脚本应通过该入口调用,不依赖未文档化的其它全局名。
41
+ - 在浏览器中直接打开本地文件时通常**没有** `$CCDK`,须做存在性判断或区分环境,避免报错。
42
+ - CCDK 具体 API 以平台文档及 **cloudcc-dev-skill** 中相关说明为准。
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "1.0.0",
3
- "releaseDate": "2026-04-01"
2
+ "version": "1.0.3",
3
+ "releaseDate": "2026-04-07"
4
4
  }
package/mcp/index.js CHANGED
@@ -115,7 +115,8 @@ mcpServer.registerTool(
115
115
  description: '在 CloudCC CRM 系统中创建一个自定义对象(Custom Object),相当于数据库的表。',
116
116
  inputSchema: z.object({
117
117
  label: z.string().min(1).describe('对象的显示标签(例如: 客户)'),
118
- projectPath: z.string().describe('项目根路径,默认为当前工作目录')
118
+ projectPath: z.string().describe('项目根路径,默认为当前工作目录'),
119
+ businessDescription: z.string().min(1).describe('对象业务功能描述(必填),拼接到默认 remark 文案之后')
119
120
  })
120
121
  },
121
122
  customObjectHandler.createCustomObject
@@ -158,8 +159,31 @@ mcpServer.registerTool(
158
159
  fieldType: z.enum(['S', 'U', 'SCORE', 'IMG', 'P', 'C', 'J', 'H', 'E', 'B', 'A', 'D', 'F', 'T', 'N', 'ENC', 'ENCD', 'X', 'L', 'Q', 'AD', 'LT', 'FL', 'Y', 'MR', 'M']).describe('字段类型:S(文本),U(URL),SCORE(评分),IMG(图片),P(百分比),C(币种),J(文本区-长,最长32000字符),H(电话),E(电子邮件),B(复选框),A(富文本),D(日期),F(日期/时间),T(时间),N(数字),ENC(加密文本-存储加密),ENCD(加密文本-显示加密),X(文本区,最多4000字符),L(选项列表-单选),Q(选项列表-多选),AD(地址),LT(地理定位,用于录入经纬度),FL(文件),Y(查找关系),MR(查找多选),M(主详信息关系)'),
159
160
  nameLabel: z.string().min(1).describe('字段名称,必填字段'),
160
161
  projectPath: z.string().optional().describe('项目根路径,默认为当前工作目录'),
161
- ptext: z.string().optional().describe('选项列表文本,多个选项用\\r\\n分隔,当字段类型为L(选项列表-单选)或Q(选项列表-多选)时必填'),
162
- lookupObj: z.string().optional().describe('查找关系对象ID,当字段类型为Y(查找关系)、MR(查找多选)或M(主详信息关系)时必填'),
162
+ ptext: z.string().optional().describe('选项列表文本,多个选项用\\r\\n分隔;L/Q 在 useGlobalSelect=0 时必填,全局列表时可空,对应 CLI argvs[9](create)'),
163
+ lookupObj: z.string().optional().describe('查找关系目标对象;Y/MR/M 必填,对应 CLI argvs[9](create)'),
164
+ lookupObjDefaultField: z.string().optional().describe('Y(查找关系):搜索辅助字段,写入 obj.lookupObjDefaultField;搜索时展示;对应 CLI argvs[10](create),可空'),
165
+ remark: z.string().optional().describe('字段业务功能描述,写入 obj.remark;对应 CLI argvs[6]'),
166
+ schemefieldLength: z.string().optional().describe('S 长度 argvs[9];P/C/N 整数位 argvs[9];LT 小数点左侧位数 argvs[9] 默认8(与 decimalPlaces 之和≤18);SCORE 1~100 默认10;X 1~4000 默认4000;J 长文本区 1~32000 默认32000;ENC/ENCD 1~255 默认255,argvs[9](create)'),
167
+ helps: z.string().optional().describe('帮助文本,统一 argvs[7](create);update 为 argvs[8]'),
168
+ isrepeat: z.string().optional().describe('S argvs[10];N argvs[11];E(电子邮件) argvs[9]:true 允许重复,false 不允许,默认 true'),
169
+ casesensitive: z.string().optional().describe('S(文本) 区分大小写,argvs[12],仅 isrepeat=false 时生效'),
170
+ placeholder: z.string().optional().describe('S 输入框提示 argvs[11];X 文本区 argvs[10];J 长文本区 argvs[10]'),
171
+ defaultValue: z.string().optional().describe('默认值,统一 argvs[8](create);update 为 argvs[9];B(复选框) 仅 "0"/"1"(未选中/选中),其它按 "0";IMG(图片) 为可上传图片数量 1~100,空则 3;FL(文件) 为可上传文件数量 1~100(保存时与 obj.isrepeat 同步为同一数值),空则 1'),
172
+ formulaType: z.string().optional().describe('IMG(图片):录入方式 url 或 input,argvs[9](create),空则 input'),
173
+ watermarkstatus: z.string().optional().describe('IMG(图片):水印拍照 "0" 不支持 "1" 支持,argvs[10](create),空则 0'),
174
+ edittype: z.string().optional().describe('U(URL):_blank 或 _self,argvs[9](create),空则 _blank。L/Q(选项列表):radio 或 select,argvs[11](create),空则 select'),
175
+ useGlobalSelect: z.string().optional().describe('L/Q(选项列表):是否使用全局选项列表 "0" 否 "1" 是,argvs[10](create),空则 0'),
176
+ isPicklistSorted: z.string().optional().describe('L/Q:按字母顺序排序 "0" 否 "1" 是,argvs[12](create),空则 0'),
177
+ defPl: z.string().optional().describe('L/Q:将第一个值作为默认值 "0" 否 "1" 是,argvs[13](create),空则 0'),
178
+ globalSelectId: z.string().optional().describe('L/Q:全局选项列表 id;useGlobalSelect=1 时必填,argvs[14](create)'),
179
+ visibleLines: z.string().optional().describe('Q(多选):下拉最多展示行数 1~100,写入 obj.visibleLines,argvs[15](create),空则 4'),
180
+ showalloptions: z.string().optional().describe('Q(多选):是否显示全部选项 "0" 否 "1" 是,写入 obj.showalloptions,argvs[16](create),空则 0'),
181
+ masktype: z.string().optional().describe('ENC/ENCD:掩码类型 all | 4 | card | custom,argvs[10](create),空则 all'),
182
+ encrypttype: z.string().optional().describe('ENC/ENCD:masktype=custom 时自定义规则,如 {AAAA}{****}{AAAA};argvs[11](create);非 custom 可空'),
183
+ maskcharacter: z.string().optional().describe('ENC/ENCD:掩码字符 * 或 X,argvs[12](create),空则 *'),
184
+ decimalPlaces: z.string().optional().describe('P/C 小数点右侧 argvs[10] 默认2;N 小数点右侧 argvs[10] 默认0;LT 小数点右侧 argvs[10] 默认10'),
185
+ displayType: z.string().optional().describe('LT(地理定位):经纬度显示 "1" 数字 "2" 度分秒,顶层 displayType,argvs[11](create),空则 1'),
186
+ displayThousands: z.string().optional().describe('N(数字) argvs[12],默认0; "1"不允许重复,"0"允许重复(平台字段名 displayThousands)'),
163
187
  })
164
188
  },
165
189
  fieldCreatorHandler.createObjectField