@inf-monkeys-tech/monkeys-cli 0.12.37 → 0.12.39

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 (44) hide show
  1. package/dist/commands/data/field/list.d.ts +1 -0
  2. package/dist/commands/data/field/list.d.ts.map +1 -1
  3. package/dist/commands/data/field/list.js +7 -2
  4. package/dist/commands/data/field/list.js.map +1 -1
  5. package/dist/commands/data/relation/get.d.ts +22 -0
  6. package/dist/commands/data/relation/get.d.ts.map +1 -0
  7. package/dist/commands/data/relation/get.js +52 -0
  8. package/dist/commands/data/relation/get.js.map +1 -0
  9. package/dist/data/asset-aggregate.d.ts +11 -2
  10. package/dist/data/asset-aggregate.d.ts.map +1 -1
  11. package/dist/data/asset-aggregate.js +43 -5
  12. package/dist/data/asset-aggregate.js.map +1 -1
  13. package/dist/data/asset-inspect.d.ts.map +1 -1
  14. package/dist/data/asset-inspect.js +3 -2
  15. package/dist/data/asset-inspect.js.map +1 -1
  16. package/dist/data/asset-search-expression.d.ts +38 -0
  17. package/dist/data/asset-search-expression.d.ts.map +1 -1
  18. package/dist/data/asset-search-expression.js +84 -3
  19. package/dist/data/asset-search-expression.js.map +1 -1
  20. package/dist/data/client.d.ts.map +1 -1
  21. package/dist/data/client.js +1 -0
  22. package/dist/data/client.js.map +1 -1
  23. package/dist/data/kernel-bindings.d.ts.map +1 -1
  24. package/dist/data/kernel-bindings.js +1 -0
  25. package/dist/data/kernel-bindings.js.map +1 -1
  26. package/dist/data/relations.d.ts +58 -0
  27. package/dist/data/relations.d.ts.map +1 -0
  28. package/dist/data/relations.js +128 -0
  29. package/dist/data/relations.js.map +1 -0
  30. package/dist/data/resource-locator-types.d.ts.map +1 -1
  31. package/dist/data/resource-locator-types.js +1 -0
  32. package/dist/data/resource-locator-types.js.map +1 -1
  33. package/dist/data/view-rows.d.ts.map +1 -1
  34. package/dist/data/view-rows.js +76 -1
  35. package/dist/data/view-rows.js.map +1 -1
  36. package/dist/declarative/catalog.d.ts +152 -0
  37. package/dist/declarative/catalog.d.ts.map +1 -1
  38. package/dist/declarative/client.d.ts +1330 -159
  39. package/dist/declarative/client.d.ts.map +1 -1
  40. package/oclif.manifest.json +165 -1
  41. package/package.json +3 -3
  42. package/skills/monkeys-data/SKILL.md +1 -0
  43. package/skills/monkeys-data/references/ontology-feature-search.md +3 -3
  44. package/skills/monkeys-data/references/ontology-relations.md +50 -0
@@ -5334,6 +5334,16 @@
5334
5334
  "summary": "Old Bucket ID (deprecated; new tasks use --ontology)",
5335
5335
  "type": "option"
5336
5336
  },
5337
+ "incoming": {
5338
+ "allowNo": false,
5339
+ "exclusive": [
5340
+ "keyword",
5341
+ "view"
5342
+ ],
5343
+ "name": "incoming",
5344
+ "summary": "Discover incoming relation columns owned by other Ontologies",
5345
+ "type": "boolean"
5346
+ },
5337
5347
  "jq": {
5338
5348
  "char": "q",
5339
5349
  "hasDynamicHelp": false,
@@ -6957,6 +6967,160 @@
6957
6967
  ],
6958
6968
  "strict": true
6959
6969
  },
6970
+ "data:relation:get": {
6971
+ "aliases": [],
6972
+ "args": {},
6973
+ "description": "Read incoming/outgoing business relations independently of local fields. Bounded multi-hop expansion requires Studio and an explicit Ontology allowlist; it never expands report candidates.",
6974
+ "enableJsonFlag": false,
6975
+ "flags": {
6976
+ "allow-ontology": {
6977
+ "hasDynamicHelp": false,
6978
+ "multiple": true,
6979
+ "name": "allow-ontology",
6980
+ "summary": "Additional Ontology ID allowed for expansion; repeat for each confirmed scope",
6981
+ "type": "option"
6982
+ },
6983
+ "asset-ids-file": {
6984
+ "hasDynamicHelp": false,
6985
+ "multiple": false,
6986
+ "name": "asset-ids-file",
6987
+ "required": true,
6988
+ "summary": "JSON array of 1-1000 exact root Asset IDs",
6989
+ "type": "option"
6990
+ },
6991
+ "bucket": {
6992
+ "hasDynamicHelp": false,
6993
+ "multiple": false,
6994
+ "name": "bucket",
6995
+ "summary": "Old Bucket ID (deprecated; new tasks use --ontology)",
6996
+ "type": "option"
6997
+ },
6998
+ "depth": {
6999
+ "default": 1,
7000
+ "hasDynamicHelp": false,
7001
+ "multiple": false,
7002
+ "name": "depth",
7003
+ "summary": "Maximum relation hops; default reads direct edges only",
7004
+ "type": "option"
7005
+ },
7006
+ "direction": {
7007
+ "default": "both",
7008
+ "hasDynamicHelp": false,
7009
+ "multiple": false,
7010
+ "name": "direction",
7011
+ "options": [
7012
+ "incoming",
7013
+ "outgoing",
7014
+ "both"
7015
+ ],
7016
+ "type": "option"
7017
+ },
7018
+ "field-id": {
7019
+ "hasDynamicHelp": false,
7020
+ "multiple": true,
7021
+ "name": "field-id",
7022
+ "summary": "Optional relation-owner Column IDs filtering the first hop only",
7023
+ "type": "option"
7024
+ },
7025
+ "jq": {
7026
+ "char": "q",
7027
+ "hasDynamicHelp": false,
7028
+ "multiple": false,
7029
+ "name": "jq",
7030
+ "summary": "Filter the JSON result with a jq expression",
7031
+ "type": "option"
7032
+ },
7033
+ "max-assets": {
7034
+ "default": 1000,
7035
+ "hasDynamicHelp": false,
7036
+ "multiple": false,
7037
+ "name": "max-assets",
7038
+ "type": "option"
7039
+ },
7040
+ "max-edges": {
7041
+ "default": 5000,
7042
+ "hasDynamicHelp": false,
7043
+ "multiple": false,
7044
+ "name": "max-edges",
7045
+ "type": "option"
7046
+ },
7047
+ "ontology": {
7048
+ "hasDynamicHelp": false,
7049
+ "multiple": false,
7050
+ "name": "ontology",
7051
+ "summary": "Ontology ID",
7052
+ "type": "option"
7053
+ },
7054
+ "output": {
7055
+ "default": "json",
7056
+ "hasDynamicHelp": false,
7057
+ "multiple": false,
7058
+ "name": "output",
7059
+ "options": [
7060
+ "json",
7061
+ "pretty",
7062
+ "table",
7063
+ "ndjson",
7064
+ "csv",
7065
+ "text"
7066
+ ],
7067
+ "summary": "Output format",
7068
+ "type": "option"
7069
+ },
7070
+ "perspective": {
7071
+ "hasDynamicHelp": false,
7072
+ "multiple": false,
7073
+ "name": "perspective",
7074
+ "options": [
7075
+ "kernel",
7076
+ "studio"
7077
+ ],
7078
+ "summary": "Use only this Data perspective; when omitted, read queries use Studio first and may fall back to Kernel",
7079
+ "type": "option"
7080
+ },
7081
+ "resource-team": {
7082
+ "hasDynamicHelp": false,
7083
+ "multiple": false,
7084
+ "name": "resource-team",
7085
+ "summary": "Kernel Ontology data resource location Team; does not represent Team filtering and cannot be used simultaneously with --team",
7086
+ "type": "option"
7087
+ },
7088
+ "subscription": {
7089
+ "hasDynamicHelp": false,
7090
+ "multiple": false,
7091
+ "name": "subscription",
7092
+ "type": "option"
7093
+ },
7094
+ "team": {
7095
+ "hasDynamicHelp": false,
7096
+ "multiple": false,
7097
+ "name": "team",
7098
+ "type": "option"
7099
+ },
7100
+ "yes": {
7101
+ "allowNo": false,
7102
+ "char": "y",
7103
+ "name": "yes",
7104
+ "summary": "Confirm destructive or privileged operations",
7105
+ "type": "boolean"
7106
+ }
7107
+ },
7108
+ "hasDynamicHelp": false,
7109
+ "hiddenAliases": [],
7110
+ "id": "data:relation:get",
7111
+ "isESM": true,
7112
+ "pluginAlias": "@inf-monkeys-tech/monkeys-cli",
7113
+ "pluginName": "@inf-monkeys-tech/monkeys-cli",
7114
+ "pluginType": "core",
7115
+ "relativePath": [
7116
+ "dist",
7117
+ "commands",
7118
+ "data",
7119
+ "relation",
7120
+ "get.js"
7121
+ ],
7122
+ "strict": true
7123
+ },
6960
7124
  "data:tag-group:create": {
6961
7125
  "aliases": [],
6962
7126
  "args": {},
@@ -20020,5 +20184,5 @@
20020
20184
  "strict": true
20021
20185
  }
20022
20186
  },
20023
- "version": "0.12.37"
20187
+ "version": "0.12.39"
20024
20188
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inf-monkeys-tech/monkeys-cli",
3
- "version": "0.12.37",
3
+ "version": "0.12.39",
4
4
  "packageManager": "bun@1.3.14",
5
5
  "description": "Monkeys command-line client for AI agents, automation, and interactive use",
6
6
  "type": "module",
@@ -117,7 +117,7 @@
117
117
  }
118
118
  },
119
119
  "dependencies": {
120
- "@inf-monkeys-tech/monkeys": "1.1.23",
120
+ "@inf-monkeys-tech/monkeys": "1.1.38",
121
121
  "@oclif/core": "4.13.2",
122
122
  "ajv": "8.20.0",
123
123
  "csv-parse": "6.1.0",
@@ -150,5 +150,5 @@
150
150
  "publishConfig": {
151
151
  "access": "public"
152
152
  },
153
- "monkeysReleaseCommit": "e21b7f47cd65232b4be7956d1596351aa9860960"
153
+ "monkeysReleaseCommit": "8edded7a47b42036beef3cc8e018718e64cd41b8"
154
154
  }
@@ -19,6 +19,7 @@ description: 通过 monkeys CLI 理解并操作 Ontology、View、Asset、Field/
19
19
 
20
20
  - 查询、搜索、候选批量字段/关系、媒体与附件(含 Studio View 筛选合同):[Data 读取](references/data-read.md)
21
21
  - 按 Feature Column 结构化值检索:[Ontology Feature 结构化检索](references/ontology-feature-search.md)
22
+ - 跨 Ontology 关联、正向/反向筛选、子查询、关系聚合与有界展开:[Ontology 业务关联](references/ontology-relations.md)
22
23
  - 创建和修改资源:[Data 写入](references/data-write.md)
23
24
  - Ontology、Container、Trash 与转换:[Data 初步治理](references/data-governance.md)
24
25
  - JSONL、CSV、XLSX 与 Ontology 迁移:[Data 导入导出](references/data-transfer.md)
@@ -65,10 +65,10 @@ CLI 只校验 expression 公共结构和 JSON 标量形状。Feature 的真实
65
65
  - semantic/vector/description/fuzzy/full-text Feature search
66
66
  - JSON/object/relation/image/file Feature 类型
67
67
  - View/container scoped Feature
68
- - 任意关系遍历、多维 facet、exists 或 null predicate;标量 sort/select 与单维 aggregate 见下文,不能据此推断其他能力已经存在。
68
+ - 无界关系遍历、exists 或 null predicate;有界业务关联、跨本体子查询及最多两维关联聚合见 [Ontology 业务关联](ontology-relations.md)。
69
69
  - Feature 与 `current_and_shared` 跨 Team 查询
70
70
 
71
- 不要把固定字段 `relation` expression 与 Relation 类型 Feature 混淆;后者当前不支持。
71
+ 不要把用户/团队 `relation` expression 与业务 `featureRelation` / `featureRelationSource` 混淆;业务关系使用专门的身份元组合同,不使用标量 feature 比较。
72
72
 
73
73
  ## 最小字段投影与排序
74
74
 
@@ -110,7 +110,7 @@ monkeys data asset aggregate --ontology <ontology-id> --view <view-id> --input-f
110
110
  }
111
111
  ```
112
112
 
113
- - 可选一个 `groupBy`,字段使用 `builtin`、标量 `feature.fieldKey` 或 `tag_group.tagGroupId`;多个指标仍有上限。支持 `count/value_count/distinct_count/sum/avg/min/max`,实际字段类型和权限由服务端判定。`count` 不带字段,所有指标及分组 alias 必须唯一。
113
+ - 可选一个 `groupBy` 或最多两个 `groupByDimensions`(互斥),字段使用 `builtin`、标量 `feature.fieldKey` 或 `tag_group.tagGroupId`;多个指标仍有上限。支持 `count/value_count/distinct_count/sum/avg/min/max`,实际字段类型和权限由服务端判定。`count` 不带字段,所有指标及分组 alias 必须唯一。
114
114
  - CLI 只调用已公开、稳定、只读且支持 Studio 的 `data.asset.aggregate`;不会猜地址、不以旧内置路由替代、不下载全量 Asset 后本地统计。找不到或不兼容时,停止并确认 Server 部署和 OpenAPI,不能靠刷新 CLI 把未部署的 Operation 变出来。
115
115
  - 结果仍为 `items/pageInfo`。`aggregatePages` 保留每一服务端页的 `scanned/exact/truncated/pageInfo` 及 `itemOffset`;多页不累加扫描量,也不把分页分组再算成一个虚假的总计。单次只返回一页时还提供顶层 `scanned/exact/truncated`。
116
116
  - `exact` 是服务端指标精确度声明,不等于已经读完全部组。必须同时检查 `pageInfo.hasMore` 与 `truncated`;任何缺页或截断都不能称为完整统计。近似 `distinct_count` 也不得说成精确去重数。`accuracy` 不是请求参数。
@@ -0,0 +1,50 @@
1
+ # Ontology 业务关联查询
2
+
3
+ 业务关系连接 `(ontologyId, assetId)`,不能只按 Asset ID 合并。先确定业务候选集合和字段 `config.fieldKey`;关联证据不自动加入报告商品集合。所有命令沿用调用用户、Subscription、明确视角和可读 View,不因空结果或权限失败换身份、切 Kernel、扫 PG 或全库。
4
+
5
+ ## 读取与关系发现
6
+
7
+ - `data field list --ontology <ID>` 获取出向字段定义;`data field list --ontology <ID> --incoming` 获取其他 ontology 指向当前 ontology 的关系字段,检查完整分页。以实际字段配置确定关系,不按名称猜测。
8
+ - `data asset inspect --ontology <ID> --asset-ids-file ids.json` 批读字段和关系。默认读取全部入向/出向关系,即使当前本体没有关系字段;指定 `--field-id` 时只查所选关系列。省略 View 时不含 View 专属字段。
9
+ - 单独反查或跨本体展开用 `data relation get --ontology <ID> --asset-ids-file ids.json --direction incoming|outgoing|both`。输出 `edges[].source/target/columnId`、`missing`、`boundaries`、`frontier`。缺失记录不等于无关联。只有 `completeWithinRequestedScope=true` 才表示请求范围内批次完整,不表示全图、目标详情或权限已全部验证。
10
+ - 有界展开可加 `--depth 2`(最多3)、重复 `--allow-ontology <确认允许的目标ID>`。多跳只支持 Studio;最多1000节点、5000边,超限报错,不发布部分结果为完整结论。`boundaries` 是未允许继续展开的目标,`frontier` 是深度边界。遇到权限拒绝停止;无循环重复查询。需要详情时将返回节点按 ontology 分组另批 inspect,不跨业务候选范围制作商品卡。
11
+
12
+ 所有示例补充当前已确认的 `--perspective studio --team <Team>`;Kernel 单跳补 `--perspective kernel --resource-team <数据Team>`,不可混用。命令先看当前 schema;旧服务缺接口时报告部署合同缺口,不猜替代接口。
13
+
14
+ ## 关联条件与跨 ontology 子查询
15
+
16
+ 使用 `data asset search --ontology <ID> --filter-file scope.json --expression-file expression.json`。scope.json 保留实际 View 与归属筛选;不能省略原有业务范围。表达式也可与标量、标签通过 and/or 组合。
17
+
18
+ 正向:查使用某块面料的商品(fieldKey 属于商品本体):
19
+
20
+ ```json
21
+ {"op":"featureRelation","fieldKey":"materials","cmp":"contains_any","value":[{"ontologyId":"materials-ontology","assetId":"material-id"}]}
22
+ ```
23
+
24
+ 反向:在面料本体中查被指定商品关联的面料,必须给出关系所属商品本体与可读 View:
25
+
26
+ ```json
27
+ {"op":"featureRelationSource","ontologyId":"products-ontology","viewId":"products-view","fieldKey":"materials","cmp":"contains_any","value":[{"ontologyId":"products-ontology","assetId":"product-id"}]}
28
+ ```
29
+
30
+ 根据另一可读 View 的筛选结果选择关联目标(例:在面料本体查询指定品牌商品引用的面料):
31
+
32
+ ```json
33
+ {"op":"inQuery","query":{"ontologyId":"products-ontology","viewId":"products-view","field":{"kind":"feature_relation_target","fieldKey":"materials"},"expression":{"op":"tagGroup","allOf":["confirmed-brand-tag"]}}}
34
+ ```
35
+
36
+ 必须把来源 View 的归属等必要业务条件加入 query.expression;不能仅照抄示例。最多6个 inQuery 叶子,不支持嵌套;服务端限制每叶5000匹配身份、50000来源分组及表达式展开预算。超限缩小真实查询范围或报告缺口,不能静默取前几条。builtin asset_id 投影仅能引用根 ontology。
37
+
38
+ `relation` 仍只表示 owned-by/shared-with/liked-by/favorited-by 用户或团队关系,不等于业务关联。
39
+
40
+ ## 关联聚合
41
+
42
+ `data asset aggregate --ontology <ID> --view <View> --input-file query.json` 支持以 `feature_relation_target`(fieldKey)或 `feature_relation_source`(fieldKey、ontologyId、viewId)作为 groupBy 字段;返回键为完整身份元组。支持最多两个 groupByDimensions,与 groupBy 互斥;关系字段不能作为 sum/avg 等数值指标。
43
+
44
+ ```json
45
+ {"groupBy":{"field":{"kind":"feature_relation_target","fieldKey":"materials"},"alias":"material"},"metrics":[{"op":"count","alias":"products"}]}
46
+ ```
47
+
48
+ 两维去重统计可使用 rollup `{groupAlias,distinctAlias,alias}`,要求两个不同分组和一个 count 指标、按 key 排序。保留业务筛选,复用实际标签ID。逐页核对 exact/truncated/scanned/pageInfo,不能把分页或截断结果当全量统计。部署必须支持对应合同;校验失败不自动降级到 Raw API。
49
+
50
+ 服务端限制必须保留:当前反向条件可能要求关系所属 View 不附带记录筛选;收到此类 400 不自动改用另一个 View。跨本体子查询仍受各来源与目标的访问控制,403(含 LF_ACCESS_DENIED)表示权限或服务端范围问题,不代表数据为空,也不得通过换身份或 Raw API 绕过。优先使用已验证的直接关系筛选或在既定候选内批读关联证据;不能据此宣称等价全量子查询已完成。