@stalfh233/omc-cli 0.6.20 → 0.6.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stalfh233/omc-cli",
3
- "version": "0.6.20",
3
+ "version": "0.6.22",
4
4
  "description": "CloudPivot 8.6 configuration capability CLI — governed, fail-closed, coverage-manifest bounded.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -55,7 +55,7 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "commander": "14.0.3",
58
- "omc-core": "0.6.20",
58
+ "omc-core": "0.6.22",
59
59
  "proper-lockfile": "4.1.2",
60
60
  "write-file-atomic": "6.0.0",
61
61
  "zod": "^3.23.8",
@@ -73,6 +73,6 @@
73
73
  "directory": "packages/omc-cli"
74
74
  },
75
75
  "optionalDependencies": {
76
- "@stalfh233/omc-fake-platform": "0.6.20"
76
+ "@stalfh233/omc-fake-platform": "0.6.22"
77
77
  }
78
78
  }
@@ -117,6 +117,7 @@ only the section for the capability you need —
117
117
  - **按钮脚本(JS)读写**:`listview.get --buttonCode <code>`(或 `--buttons`)直接回 `scriptData`/`scriptBytes`/`scriptSha256`,不用翻 artifact;写用 `listview.configure --buttonScripts [{code,script}]` 只改脚本(保留其它字段),或在 `buttons[]` 里用 `script` 简写(= `actionConfig.scriptData`)。
118
118
  - **recipe**:`omc describe listview.configure --example configure-default-list`
119
119
  - **边界 / 陷阱**:默认视图已存在,`listview.configure` 省略 code 即配置默认视图。**按字段分组(queryLayer)未取证**——别猜写。
120
+ - **行级条件标红当前不支持**:`rowColorSetting` 在 8.6.26 没有平台类映射,配置会被拒绝。替代方案是增加/展示状态字段,再用视图筛选或分组表达重点记录;不要把列表行颜色当作已覆盖能力承诺。
120
121
 
121
122
  ## 字段级规则 `datarule`
122
123
 
@@ -144,10 +144,9 @@ you can wait for.
144
144
  范围以任务书为界,任务书之外的增删改仍需新草稿。指纹重核与写后读回照旧。
145
145
  此豁免**要求任务书显式声明预授权**;agent 不得自行把交互会话当成自治上下文。
146
146
 
147
- ## 7. Cleanup
147
+ ## 7. Cleanup / 非交互 run
148
148
 
149
- 清理授权捆在创建授权里:创建草稿写明「验收后删除这些」,确认即一并授权。
150
- **清单外的对象仍要单独出草稿。** 清理只碰自有 `omc_mcp_*` 夹具。
149
+ 清理授权捆在创建授权里:创建草稿写明「验收后删除这些」,确认即一并授权;**清单外对象仍单独出草稿**;清理只碰自有 `omc_mcp_*` 夹具。非交互 run 无 question 通道时按上文「任务书即草稿即批准」执行,另加两条:推定内容逐项写入草稿 `assumptions[]`;**超出任务书范围的写入不能推定**——停下,收口报告标红等新授权。
151
150
 
152
151
  ## 8. Canonical configuration order(规范配置顺序)
153
152
 
@@ -76,6 +76,8 @@ Terminology for the `omc` configuration CLI. Built on CloudPivot 8.6 (anchor
76
76
  tools `data.save` / `data.load` / `data.submit` / `data.update` / `data.list`).
77
77
  `data.load` is the authoritative custom-field readback; list projection
78
78
  is a pinned boundary (custom fields keys-present-values-null).
79
+ - **记录状态 `sequenceStatus`** — 系统流转态枚举:`DRAFT`(草稿)、`PROCESSING`(流程处理中)、`COMPLETED`(已完成/提交态)。判态用 `data.load`,不要用 `data.list` 的入口统计;`data.list` 的 `draftPolicy` 只影响列表计入口径。无流程模型提交用 `data.submit`;有流程模型在 workitem 审批通过后才进入 `COMPLETED`。它不是业务状态字段,业务状态应另建字段并由规则维护。
80
+ - **业务状态** — 平台无内置业务状态字段;需求里的「状态改成大额维修」要显式建业务字段(如 `repairStatus`)+ `rule-when --then 'set:<状态字段>=<值>'` 维护;不要拿 `sequenceStatus` 承载业务枚举。
79
81
  - **B2 service (bizservice)** — service + method registration face.
80
82
  - **List view (query)** — design-time list-view header lifecycle with
81
83
  forced LIST/showOnPc/unpublished defaults.
@@ -13,11 +13,13 @@ description: 一页纸业务场景步骤清单(采购申请 / 请假审批 /
13
13
 
14
14
  1. `omc next "从零做采购申请:主子表、合计、条件审批、列表、按钮"`
15
15
  2. `omc intent schema`(或直接按下方拼装器链)
16
- 3. `omc model-scaffold --app <app> --code <code> --name 采购申请 --fields '[{"code":"title","name":"标题","propertyType":"SHORT_TEXT"},{"code":"amount","name":"合计","propertyType":"NUMERICAL","options":{"scale":2}},{"code":"details","name":"明细","propertyType":"CHILD_TABLE","subFields":[{"code":"item","name":"品名","propertyType":"SHORT_TEXT"},{"code":"qty","name":"数量","propertyType":"NUMERICAL","options":{"scale":0}},{"code":"price","name":"单价","propertyType":"NUMERICAL","options":{"scale":2}},{"code":"lineAmount","name":"金额","propertyType":"NUMERICAL","options":{"scale":2}}]}]' --apply`
17
- 4. `omc compute --schema <code> --target amount --formula 'SUM({details.lineAmount})' --apply`(⚠️ 只在门户算,REST 不回填)
16
+ 3. `omc model-scaffold --app <app> --code <code> --name 采购申请 --fields '[{"code":"title","name":"标题","propertyType":"SHORT_TEXT"},{"code":"amount","name":"合计","propertyType":"NUMERICAL","options":{"scale":2}},{"code":"<主表code>_details","name":"明细","propertyType":"CHILD_TABLE","subFields":[{"code":"item","name":"品名","propertyType":"SHORT_TEXT"},{"code":"qty","name":"数量","propertyType":"NUMERICAL","options":{"scale":0}},{"code":"price","name":"单价","propertyType":"NUMERICAL","options":{"scale":2}},{"code":"lineAmount","name":"金额","propertyType":"NUMERICAL","options":{"scale":2}}]}]' --apply`
17
+ 子表 code 是全局子 schema code,必须全局唯一;不要使用 `details`、`items` 这类通用名,按 `<主表code>_details` 这类带主表前缀的形式命名,避免撞名 40000。
18
+ 4. `omc compute --schema <code> --target amount --formula 'SUM({<主表code>_details.lineAmount})' --apply`(⚠️ 只在门户算,REST 不回填)
18
19
  5. 条件审批(金额>50000 两级):**不要** `approval-flow --condition`(无此参数)。线性先:`omc approval-flow --schema <code> --steps '经理@role:<mgr>' --steps '总监@role:<dir>' --apply`;条件分流改 `omc describe workflow.update --example workflow-conditional-branch` 后 `workflow.update`。
19
20
  6. 发起权限:`omc call workflow.addPermission --args '{"workflowCode":"<code>_wf","unitId":"<deptOrRoleId>","unitType":1}'`(这是**谁能发起**,不是行级可见范围)
20
- 7. 列表:`omc call listview.configure --args '{"schemaCode":"<code>","fieldCodes":["title","amount"]}'`
21
+ 7. 列表:`omc call listview.configure --args '{"schemaCode":"<code>","fieldCodes":["title","amount"],"conditions":[{"propertyCode":"assetNo","filterType":"Eq","defaultValue":"<设备编号>"}]}'`
22
+ 按设备编号等条件查询时用 `conditions`;形状以 `omc describe listview.configure --param conditions` 为准(至少提供 `propertyCode`,再按字段补 `filterType`/`defaultValue`)。
21
23
  8. 表单按钮:`omc call listview.configure --args '{"schemaCode":"<code>","buttons":[{"name":"提交审批","useLocation":"FORM","bindAction":"FLOW"}]}'`(形状以 describe 为准)
22
24
  9. ⚠️ **行级「申请人只看自己」当前工具面不支持**(`workflow.permissions` / `org.role.setUserScope` 都不是行级数据权限)
23
25
 
@@ -12,9 +12,9 @@ be treated as a second source. Read this, then follow the topics it names.
12
12
 
13
13
  ## 最小路径(先读这段就能开始)
14
14
 
15
- 0. **调用与检索(跨平台)**:`omc call ... --args '<json>'` 的内联 JSON 在 Windows PowerShell 下因引号转义不可靠——**PS 环境优先 `--args-file <path>`**(把 JSON 写临时文件再引用;解析失败的报错里也有此提示)。读命令输出默认把中文转义为 `\uXXXX`(防乱码)——**这是有意为之**:stdout 恒为「恰好一个合法 JSON envelope」,在任何代码页下都能被 `JSON.parse`/`ConvertFrom-Json` 还原(GitLab #17 T2 实证:曾让 `--utf8` 关掉转义,GBK 管道把信封结构解码坏、`ConvertFrom-Json` 中途失败)。`--utf8` 只让**人类诊断文本**(stderr/散文)按 UTF-8 原文输出;要连 stdout 也是中文明文,必须先让管道按 UTF-8 解码(`chcp 65001`)——只设 `OMC_ASCII_STDOUT=0` 是关写出端转义、不改管道解码,在 cp936 管道下会把信封解码坏。对输出做内容检索时**先解 JSON 再检索**(或 `--jq` 取值),"grep 搜不到中文"≠"没有配置"(静默假阴性坑)。stdout 恒为纯 JSON、人读进度在 stderr——脚本解析勿 `2>&1` 合流。
15
+ 0. **调用与检索(跨平台)**:`omc call ... --args '<json>'` 的内联 JSON 在 Windows PowerShell 下因引号转义不可靠——**PS 环境优先 `--args-file <path>`**(把 JSON 写临时文件再引用;解析失败的报错里也有此提示)。长 JSON、含引号或中文换行的负载统一可走 stdin:`echo '<json>' | omc call <tool> --args -`;`--args-file <path>` 则必须位于项目配置根内。读命令输出默认把中文转义为 `\uXXXX`(防乱码)——**这是有意为之**:stdout 恒为「恰好一个合法 JSON envelope」,在任何代码页下都能被 `JSON.parse`/`ConvertFrom-Json` 还原(GitLab #17 T2 实证:曾让 `--utf8` 关掉转义,GBK 管道把信封结构解码坏、`ConvertFrom-Json` 中途失败)。`--utf8` 只让**人类诊断文本**(stderr/散文)按 UTF-8 原文输出;要连 stdout 也是中文明文,必须先让管道按 UTF-8 解码(`chcp 65001`)——只设 `OMC_ASCII_STDOUT=0` 是关写出端转义、不改管道解码,在 cp936 管道下会把信封解码坏。对输出做内容检索时**先解 JSON 再检索**(或 `--jq` 取值),"grep 搜不到中文"≠"没有配置"(静默假阴性坑)。stdout 恒为纯 JSON、人读进度在 stderr——脚本解析勿 `2>&1` 合流。
16
16
 
17
- 0. **拼装器优先(高频写面一条命令)**:整模型建模(模型+N 字段+子表+发布+表单)`omc model-scaffold`;**存量模型加字段(建→发布→重建表单→列表加列)`omc field-add`**;字段计算 `omc compute`;条件→动作 `omc rule-when`;线性审批流 `omc approval-flow`;表单默认值 `omc form-default`;存量盘点 `data.list all:true`——命中这些形态先看 `--help`,比 recipe 手拼省 10+ 轮。
17
+ 0. **拼装器优先(高频写面一条命令)**:整模型建模(模型+N 字段+子表+发布+表单)`omc model-scaffold`;**存量模型加字段(建→发布→重建表单→列表加列)`omc field-add`**;字段计算 `omc compute`;条件→动作 `omc rule-when`;线性审批流 `omc approval-flow`;表单默认值 `omc form-default`;存量盘点 `data.list all:true`;收尾清理 `omc model-purge --code <schema>`(依赖倒序,默认 dry-run)+ `omc residue <prefix>` 证删净——命中这些形态先看 `--help`,比 recipe 手拼省 10+ 轮。
18
18
 
19
19
  0d. **改线上已有配置:按范围选路**——单点(字段/视图/规则/布局)用 `omc call` 只传要改的参数;存量加字段用 `omc field-add`;整包收敛写**最小** `intent.yaml`(只声明要管的)再 `validate`/`plan`/`apply`;整面正文用 `form.get` + `artifact get --jq` 取回再写。`intent readback` 只做**等价校验**、不是导出可编辑草稿;结构化配置没有 pull/apply(仅规则源码走 `omc programming`)。
20
20
 
@@ -29,10 +29,7 @@ be treated as a second source. Read this, then follow the topics it names.
29
29
  方法论按 `route.readSections` 逐节读:对每条 `{topic, section}` 执行 `omc help <topic> --section "<section>"`(单节 0.4–3.4KB)。`omc help <topic>` 默认只回节索引(约 1KB,含每节字节数);**不要 `--all` 读整篇**(5–14KB,读一次就留在后续每一轮窗口)。**带着具体问题(错误码/跨能力语义/某个词)直接 `omc help --search "<词>"`**——跨全部 topic 全文检索,命中节的正文随结果内联返回,一次调用就是答案;**严禁自己写 `for t in …; do omc help $t --all | grep …` 循环**(r18 实测 12 调用/176KB,检索一次 8KB 搞定)。
30
30
  1b. **改/删/重命名既有对象前先看影响面(本地规则图索引)**:`omc graph pull --env <env>` 一次拉全平台建本地索引(增量、秒级、带锁与 gap 报告),之后 `omc graph references <service|model|field> <code>` 离线答「谁引用了它」——一调替代逐模型 `rule.get` 枚举(r30 实测影响评估手工枚举 8×rule.get,graph 一调可达);`impact <kind> <code>` 看爆炸半径、`search <词>` 找规则 code、`status` 看索引新鲜度。索引不含规则条件叶子与流程绑定,命中后仍以 `rule.get` 原文为准。无索引时会拒绝并指路 pull。宿主已接 MCP 时用 `omc mcp-graph --path <项目根>`(工具 `omc_graph_explore`/`omc_graph_status`)。
31
31
 
32
- **图谱只覆盖单应用时怎么按应用盘点(只读)**:先用
33
- `omc call app.list` 列出应用,再用
34
- `omc call model.list --args '{"applicationCode":"<code>"}'` 按应用盘点模型。
35
- graph 索引 coverage 默认只含配置应用;coverage 未命中不等于应用或模型不存在。
32
+ **图谱多应用覆盖时怎么盘点(只读)**:优先用 `omc graph pull --all-applications --env <env>` 建全租户索引;也可用 `--application-codes <a,b,c>` 指定应用,再用 `omc graph status` 看 coveredApplications/tenantApplications。
36
33
  1c. **写后端 Java 源码(在线开发)走工作区而不是一条条 call**:`omc programming pull --env <env> --app <appCode>` 把业务规则源码拉进 `.omc-programming/`(git 可管),改文件后 `omc programming status` → `omc programming apply [--publish]`(逐文件走编程面治理);图形化规则转编码用 `omc programming adopt --schema <s> --rule <r>`;验证用 `omc programming test --schema <s> --rule <r>`(fixture 驱动:compile→publish→触发→断言→清理)。**平台运行时只执行已发布版**:只 save 不 publish 等于没改;publish 内部会编译并把规则切 CODING+enable。包路径/类名不得改。
37
34
  2. 写前只需读 `omc-config-draft-review`(人审门)与 `omc-five-piece-flow`(发现→草稿→权限→执行→回读);`omc-business-configuration` 按命中的能力分节读(见 `next` 的 `readSections`),不要整篇预取。
38
35
  3. 环境名以 `omc doctor` 的「环境=」或 `.omc-env` 为准;工具不确定先用默认 `describe`/`--example`,只有单个工具缺形状才用 `--full`;`describe` 带 `exampleHint`/`recipeHint` 时优先 `--example`。
@@ -80,6 +80,10 @@ omc help omc-write-hazards
80
80
  - 新模型先配列表视图再依赖 `data.list`。部分 8.6.26 读面在没有 query/view 配置时会把业务列投影为 null;单行核对可用 `data.load`。1.1.25 复证(2026-10-31):脚手架默认视图只含 createdTime/creater/name/sequenceNo 四个系统列,`data.list` 对不在列面的业务字段一律回 null——**null ≠ 数据丢失**,先 `listview.get` 看列面;修复=`listview.configure {fieldCodes:[…业务列…], replaceColumns:true}`,配完立即回值。
81
81
  - **默认列表视图不能单独 `listview.delete`**(平台回 `303025 列表是默认列表`);要清掉它就删模型(`model.delete` 级联)。清理时别把它当失败。
82
82
 
83
+ ## 删除链
84
+
85
+ `model.delete` 带走:默认表单/在线 JS/流程/列表视图/平台预置规则与数据规则;**不带走**:自定义业务规则、业务数据(须先删)。顺序:`onlinejs` → `data.delete` 逐条清数据 → 删自定义规则 → `omc model-purge --code <schema>`(依赖倒序,默认 dry-run)。漏传 `bizObjectId(s)` 会被 `tool-input-invalid` 拒绝并指路 `data.list` 取 id(1.1.25 批量 `bizObjectIds` 被拒,须逐个单删)——无「漏传=全删」暗门(真机实测)。清完 `data.load` 复核。
86
+
83
87
  ## 按钮
84
88
 
85
89
  - **列表/行级按钮**用 `listview.configure` 的 `buttons`(`useLocation: LIST|ROW`)。
@@ -164,9 +168,13 @@ omc call field.publish --env local --args '{"schemaCode":"expense"}'
164
168
 
165
169
  - **本 CLI 只负责发布,不负责写 JS**。脚本内容的创作与增量合并不在本 CLI:若当前项目自带在线 JS 编写规范(例如其 `.cpdocs`/技能或项目文档),遵循它;否则向用户/设计者索取已定稿 `source`。不要在 omc 技能里手写/臆造 JS 逻辑。
166
170
  - 经 omc 发布时用 `onlinejs.compose`:把已定稿的 `source` 组合进平台 skeleton 的 `customScript`,再 `publish`,并回读 `publishedHtmlJson` + SHA-256。不要用裸脚本覆盖平台 skeleton。
167
- - **`replace:true` 对裸代码被拒是设计**:`replace` 必须传完整的 `(function(form){…})`,否则会写坏脚本槽让表单空白;同样,`merge` 传完整带外层的脚本也会被拒(避免嵌套丢内容)。远端 `customScript` 为空时,定稿脚本带外层 + `replace:true` 即可,不要把它当成缺陷。
171
+ - **`replace`/`merge` 拒绝形状是设计**:`replace` 必须传完整 `(function(form){…})`(裸代码会写坏脚本槽);`merge` 传完整外层脚本也被拒(避免嵌套丢内容)。远端脚本为空时:完整脚本 + `replace:true`。
168
172
  - 源码不能有 import/export,事件名必须在支持集合内;compose 后读回 draft/published HTML,浏览器不是默认步骤。
169
173
 
174
+ ### 规范查找顺序
175
+
176
+ 项目规范:沙盒/项目 `.cpdocs/` → 项目根技能/文档 → 任务书指定路径。cpdocs 的 `--confirm-sha256` 流水线与 omc 互不替代:compose 已内置 dry-run 指纹,等价=replace 前用 `onlinejs.get` 记当前 SHA。
177
+
170
178
  ## 固定验收顺序
171
179
 
172
180
  执行阶段以 `omc-five-piece-flow` 为准;写面安全只额外强调两点:写前先 `commands/describe/contract` + dry-run 静态校验,写后权威 readback,必要时再用 CLI 触发运行验证。
@@ -237,4 +245,3 @@ omc call field.publish --env local --args '{"schemaCode":"expense"}'
237
245
  2. **来源子表字段是集合,不是逐行扇出**:`currentSchemaDataItem:"items.asset"` 会被解析成该子表所有行的值集合,目标主表仍只查询一次。写这个形状能存能发布,但运行 0 行命中(r5-asset 真机)。OMC 0.4.64 起 `rule-graph-cross-model-child-source-fanout` **拒绝**。
238
246
  3. **一张单多行逐件回写**(每条明细各改一条另一模型的主表行)没有可用的纯配置形状——走 BIZ_ACTION 自调二开接口,一次处理多行;单行回写用主表字段做 DYNAMIC 来源。
239
247
  4. **BRANCH 后接两个跨表 UPDATE** 真机报 50000;改用单个 UPDATE + 条件动作,或二开。
240
-