@zhuoyuezs/ml-platform 0.2.9 → 0.2.11

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 (30) hide show
  1. package/checksums.json +64 -44
  2. package/package.json +1 -1
  3. package/release.json +19 -19
  4. package/runtime/business-client/README.md +10 -0
  5. package/runtime/business-client/package-lock.json +2 -2
  6. package/runtime/business-client/package.json +1 -1
  7. package/runtime/business-client/src/cli.js +92 -2
  8. package/runtime/business-client/src/http.js +9 -0
  9. package/skills/data-source-exploration/SKILL.md +12 -1
  10. package/skills/data-source-exploration/agents/openai.yaml +2 -2
  11. package/skills/data-source-exploration/references/data-platform.md +83 -0
  12. package/skills/feature-management/SKILL.md +13 -4
  13. package/skills/feature-management/agents/openai.yaml +2 -2
  14. package/skills/feature-management/references/commands.md +26 -0
  15. package/skills/feature-management/references/data-platform-mapping.md +104 -0
  16. package/skills/feature-management/references/platform-capability-guide.md +6 -0
  17. package/skills/feature-management/references/supervised-datasets.md +13 -0
  18. package/skills/model-deployment-management/SKILL.md +4 -0
  19. package/skills/model-deployment-management/references/contracts.md +6 -0
  20. package/skills/model-deployment-management/references/operations.md +14 -0
  21. package/skills/model-deployment-management/references/troubleshooting.md +8 -0
  22. package/skills/model-lifecycle-management/SKILL.md +14 -5
  23. package/skills/model-lifecycle-management/agents/openai.yaml +2 -2
  24. package/skills/model-lifecycle-management/references/ablation.md +111 -0
  25. package/skills/model-lifecycle-management/references/evaluation.md +55 -1
  26. package/skills/model-lifecycle-management/references/experiment-runs.md +59 -0
  27. package/skills/model-lifecycle-management/references/model-comparison.md +11 -9
  28. package/skills/model-lifecycle-management/references/training.md +34 -0
  29. package/skills/model-lifecycle-management/references/zero-shot-inference.md +68 -0
  30. package/skills/prediction-report-management/SKILL.md +3 -0
package/checksums.json CHANGED
@@ -2,17 +2,17 @@
2
2
  "files": [
3
3
  {
4
4
  "path": "runtime/business-client/README.md",
5
- "sha256": "sha256:9f81e4400f46c53952a0df6f7442d4c0b58cff4ca1be61f1daf785e111b3f8eb",
6
- "size_bytes": 20557
5
+ "sha256": "sha256:9b56dde8e0db3a426e45b70595558b3ff461b79a867913a36978db90b963dfc0",
6
+ "size_bytes": 21439
7
7
  },
8
8
  {
9
9
  "path": "runtime/business-client/package-lock.json",
10
- "sha256": "sha256:9d19700ee4b348406bd0134f0539c37c2800e41a87dc130c1b0476eb2d23b931",
10
+ "sha256": "sha256:aaed1feb38250bcfa11284f54ff715dadadf848efece51b23aa133f110bd1358",
11
11
  "size_bytes": 1628
12
12
  },
13
13
  {
14
14
  "path": "runtime/business-client/package.json",
15
- "sha256": "sha256:d967d64289276cf1ce94f826a138f60fc93982b7478c1fb9f78f068f47f9d803",
15
+ "sha256": "sha256:bb5daa3e966f815c89ff5517962ddfe8a0dd5b767a2130d26c27c9cd987a8a0f",
16
16
  "size_bytes": 671
17
17
  },
18
18
  {
@@ -27,8 +27,8 @@
27
27
  },
28
28
  {
29
29
  "path": "runtime/business-client/src/cli.js",
30
- "sha256": "sha256:c235053473fb55737dc2c6269a556ed9e4206b074327c0acaf8ac663f1ea00da",
31
- "size_bytes": 79409
30
+ "sha256": "sha256:d3d2eb31c4508e532f634a63a057e2737bf60c4f7ccd966d156f71ab3e40fcbf",
31
+ "size_bytes": 85426
32
32
  },
33
33
  {
34
34
  "path": "runtime/business-client/src/config.js",
@@ -37,28 +37,33 @@
37
37
  },
38
38
  {
39
39
  "path": "runtime/business-client/src/http.js",
40
- "sha256": "sha256:91dc66d086deb5b5c0fd016560e6fddd369ccce9d430ce8f926bcae3f324cc86",
41
- "size_bytes": 29035
40
+ "sha256": "sha256:2387545e4548c60148b69a3bf5a8ae98a369e387e54de47da4327a957f541c35",
41
+ "size_bytes": 29525
42
42
  },
43
43
  {
44
44
  "path": "skills/data-source-exploration/SKILL.md",
45
- "sha256": "sha256:1f1f89d4ca41c3f7b206287e983027f50f65e462897584511259067fe94f2707",
46
- "size_bytes": 5631
45
+ "sha256": "sha256:63086689eac598ba9683d8dc63921b6ce13780973870e5ec346f69918892c5ed",
46
+ "size_bytes": 6260
47
47
  },
48
48
  {
49
49
  "path": "skills/data-source-exploration/agents/openai.yaml",
50
- "sha256": "sha256:5c7f7d497ad7738c672b8ee906d514284a2f2583a854f8fa487708a75836256f",
51
- "size_bytes": 299
50
+ "sha256": "sha256:15c93196536ff0eef2cf63940bee5eee852c9ccd55f394253fd98647f235b2eb",
51
+ "size_bytes": 348
52
+ },
53
+ {
54
+ "path": "skills/data-source-exploration/references/data-platform.md",
55
+ "sha256": "sha256:f65ff27fcd3f2e18baa34ae103984bc3a0adbf9fbbcf28d652ed41f89c11e44a",
56
+ "size_bytes": 5865
52
57
  },
53
58
  {
54
59
  "path": "skills/feature-management/SKILL.md",
55
- "sha256": "sha256:1435e380ede73fc9775bd0579ff9df08baf07b4eed8b1bbc174b5b394a72914f",
56
- "size_bytes": 35359
60
+ "sha256": "sha256:df6ca953ce7b1ad8dc8edb7a47cde02fc9cb6a70c1bf3a9a47d68b01ad642256",
61
+ "size_bytes": 36599
57
62
  },
58
63
  {
59
64
  "path": "skills/feature-management/agents/openai.yaml",
60
- "sha256": "sha256:a4c69cb062dc52749f0c0c96ad2d16f91f83ecedb44f78dcf662ef220273f24d",
61
- "size_bytes": 325
65
+ "sha256": "sha256:db2a9ebc7926370264e06b8e5767105415bb8a09a2dda08a7cf418a6e3b39bb0",
66
+ "size_bytes": 366
62
67
  },
63
68
  {
64
69
  "path": "skills/feature-management/assets/catalog-template/catalog.json",
@@ -107,14 +112,19 @@
107
112
  },
108
113
  {
109
114
  "path": "skills/feature-management/references/commands.md",
110
- "sha256": "sha256:375f953bac0263f9a40d217c99f029226d2a838c9510fce8d6e2324b8f548fb1",
111
- "size_bytes": 18288
115
+ "sha256": "sha256:8298c55378579aad151b86ff8a00d0c7cf992378b7c6af262d94564544dc4a3c",
116
+ "size_bytes": 19411
112
117
  },
113
118
  {
114
119
  "path": "skills/feature-management/references/contracts.md",
115
120
  "sha256": "sha256:717b81364f8508cd73d52f18d7b5dd012a3f3638921a8a5a93c41991a4f27998",
116
121
  "size_bytes": 38182
117
122
  },
123
+ {
124
+ "path": "skills/feature-management/references/data-platform-mapping.md",
125
+ "sha256": "sha256:fef06e1e1918132336789aa6d430a501324fc3f3f2241817322740a8dd20054a",
126
+ "size_bytes": 7421
127
+ },
118
128
  {
119
129
  "path": "skills/feature-management/references/operator-authoring.md",
120
130
  "sha256": "sha256:68ec5861800a6623db8e3cfae8e3363493c54772c4719d60dc66e4f4f0d3a347",
@@ -122,18 +132,18 @@
122
132
  },
123
133
  {
124
134
  "path": "skills/feature-management/references/platform-capability-guide.md",
125
- "sha256": "sha256:6acb35f57e1bd6385702b6114e96c0ed1db34c9650d18658f74f212af9f91d14",
126
- "size_bytes": 4423
135
+ "sha256": "sha256:64874764924929421c294e7a421d546aba245d8f8bc40caba32d889f557c1906",
136
+ "size_bytes": 4850
127
137
  },
128
138
  {
129
139
  "path": "skills/feature-management/references/supervised-datasets.md",
130
- "sha256": "sha256:2c23ed96c49af1954864660bf8d13f3114bb03a6598e20df6abbc191c5986e2b",
131
- "size_bytes": 10024
140
+ "sha256": "sha256:a12ef5c26bc206507679e60fbecfa8bc1f5cfeb357e428b9dc8d1cdac6458a8a",
141
+ "size_bytes": 10886
132
142
  },
133
143
  {
134
144
  "path": "skills/model-deployment-management/SKILL.md",
135
- "sha256": "sha256:84c58dbc71046ead45e3bd1aea55a5f98908e633314dbd088ce6d2c83987011c",
136
- "size_bytes": 5195
145
+ "sha256": "sha256:5e1f92a03584df4631e896754b9b91012678b2358c1df7df55aa610fd527bf1d",
146
+ "size_bytes": 5505
137
147
  },
138
148
  {
139
149
  "path": "skills/model-deployment-management/agents/openai.yaml",
@@ -142,28 +152,33 @@
142
152
  },
143
153
  {
144
154
  "path": "skills/model-deployment-management/references/contracts.md",
145
- "sha256": "sha256:967d70e1d162ce0f8736683fd82009c7aa4227a309f38de14199469bb3bfe52c",
146
- "size_bytes": 6722
155
+ "sha256": "sha256:10a86a5f0ba36546c8487ea0bf78366f9034c9f713b80bb76a4fdb39aed67957",
156
+ "size_bytes": 7178
147
157
  },
148
158
  {
149
159
  "path": "skills/model-deployment-management/references/operations.md",
150
- "sha256": "sha256:262ac8d3ab7524a9b30a14a95550a28821626a8832fd967fe3e9acd015f8c7b2",
151
- "size_bytes": 6987
160
+ "sha256": "sha256:ee98dbd02d84318108c157913e19353d1a6931cbe647af4125cffecbca155fea",
161
+ "size_bytes": 7854
152
162
  },
153
163
  {
154
164
  "path": "skills/model-deployment-management/references/troubleshooting.md",
155
- "sha256": "sha256:a1eb8f9419f9b05ccc92344f9050c4dfa91635284e3a19139afe2127706fa40f",
156
- "size_bytes": 3771
165
+ "sha256": "sha256:1d727c2e76fdbe361bdd5199bc63377feea9564b6b4d41842250bce1f23447f5",
166
+ "size_bytes": 4331
157
167
  },
158
168
  {
159
169
  "path": "skills/model-lifecycle-management/SKILL.md",
160
- "sha256": "sha256:55f0172c0b79a04b8ddfeb6bb9f617e7cb5da622b6bd43b3dbae2d3318f6f877",
161
- "size_bytes": 7447
170
+ "sha256": "sha256:920473f386f191e7492088e6d84bf33458ee57e97fb8b1db1d7274722ae871ad",
171
+ "size_bytes": 8043
162
172
  },
163
173
  {
164
174
  "path": "skills/model-lifecycle-management/agents/openai.yaml",
165
- "sha256": "sha256:37857849a8baa6b06b6d5d07ae6036080239356fcccd36f77bbdc52c1dfa283f",
166
- "size_bytes": 249
175
+ "sha256": "sha256:096bb0bca665622326b214a4d88d5b6807b50cf143b8a2e05528256fc3568f58",
176
+ "size_bytes": 258
177
+ },
178
+ {
179
+ "path": "skills/model-lifecycle-management/references/ablation.md",
180
+ "sha256": "sha256:41182c0c356626b04387c4b613cf293528187a98bc7d05b12f3d379ac51ad0ab",
181
+ "size_bytes": 5581
167
182
  },
168
183
  {
169
184
  "path": "skills/model-lifecycle-management/references/discovery.md",
@@ -172,13 +187,18 @@
172
187
  },
173
188
  {
174
189
  "path": "skills/model-lifecycle-management/references/evaluation.md",
175
- "sha256": "sha256:ba16117c0bf37ac92e28dc9b5e3bda266ac6ad29993c3d4bfcc1c955bb0ab3fa",
176
- "size_bytes": 16573
190
+ "sha256": "sha256:124c938f8ab633d6851357add501dd8e5defdfa2c81e8305b045f93656e6236e",
191
+ "size_bytes": 18889
192
+ },
193
+ {
194
+ "path": "skills/model-lifecycle-management/references/experiment-runs.md",
195
+ "sha256": "sha256:43360b72f2f9565640241450be01d95b44ebd5750d13c0ea9af47158bda35ccc",
196
+ "size_bytes": 2719
177
197
  },
178
198
  {
179
199
  "path": "skills/model-lifecycle-management/references/model-comparison.md",
180
- "sha256": "sha256:cb97b16476e28d3ca6f984ef2a964f936227bbb28a11570bbcd86f6ea51bccba",
181
- "size_bytes": 9359
200
+ "sha256": "sha256:13eeb1226effffc4eee1cacdb4ea04f4f61bc31874190046b6634e8e7bb49703",
201
+ "size_bytes": 9391
182
202
  },
183
203
  {
184
204
  "path": "skills/model-lifecycle-management/references/packaging.md",
@@ -192,18 +212,18 @@
192
212
  },
193
213
  {
194
214
  "path": "skills/model-lifecycle-management/references/training.md",
195
- "sha256": "sha256:654d3d45bfae4906f7f37898d09fa1fa84ecaab46346190c439f9f3fc0e17f95",
196
- "size_bytes": 9691
215
+ "sha256": "sha256:3ebf309ff7ede6b38dcb5b9afd75d282d29e91d768b9926808687c58434f88c9",
216
+ "size_bytes": 11419
197
217
  },
198
218
  {
199
219
  "path": "skills/model-lifecycle-management/references/zero-shot-inference.md",
200
- "sha256": "sha256:4ea224be54a7b0fc7754bdaa41df0f3b14c56f5134afc3951e91e59844108f90",
201
- "size_bytes": 2350
220
+ "sha256": "sha256:cae4675f0ae6f57482bcc7d2df956ee10495709f09f1d118b7a8bb565f1227f1",
221
+ "size_bytes": 5402
202
222
  },
203
223
  {
204
224
  "path": "skills/prediction-report-management/SKILL.md",
205
- "sha256": "sha256:fb1f8c579d392cc4d030d41b5c3b06cd59ab0c488de343bae93cbc87a27dd650",
206
- "size_bytes": 8707
225
+ "sha256": "sha256:e7ad90295929b01dc6640a6a5fe42b0dcbfd56c52fb329a05875bf1a706e7874",
226
+ "size_bytes": 8894
207
227
  },
208
228
  {
209
229
  "path": "skills/prediction-report-management/agents/openai.yaml",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhuoyuezs/ml-platform",
3
- "version": "0.2.9",
3
+ "version": "0.2.11",
4
4
  "description": "ML 数据平台 business CLI 与 Agent Skills 管理工具",
5
5
  "bin": {
6
6
  "ml-platform": "scripts/main.js"
package/release.json CHANGED
@@ -13,8 +13,8 @@
13
13
  "entrypoint": "src/cli.js",
14
14
  "name": "ml-platform",
15
15
  "path": "runtime/business-client",
16
- "sha256": "sha256:6b8adc18d15ead31da78bd6e4274d17bb7277edcb0d76a9b476ae77a3be22812",
17
- "version": "0.8.7"
16
+ "sha256": "sha256:b6e415ea6031b7dd7c838f09c50c1b22501591754c6deedbdcd444d39eb498f7",
17
+ "version": "0.8.8"
18
18
  },
19
19
  "policy_sha256": "sha256:02fbde0134696b78c0c365d6e0b76c9814227208da5b2b3d4e5dbd82dc4a3606",
20
20
  "public_schema_versions": [
@@ -25,7 +25,7 @@
25
25
  "ml_data_platform.feature_set/v1",
26
26
  "ml_data_platform.dataset_manifest/v1"
27
27
  ],
28
- "release_version": "0.2.9",
28
+ "release_version": "0.2.11",
29
29
  "runtime_requirements": {
30
30
  "node": ">=18",
31
31
  "os": [
@@ -37,34 +37,34 @@
37
37
  "skills": {
38
38
  "data-source-exploration": {
39
39
  "path": "skills/data-source-exploration",
40
- "requires_cli": ">=0.8.7 <0.9.0",
41
- "revision": "0.2.9",
42
- "sha256": "sha256:6cb1cad3e9531e5098582c532288edd9838c2acab2b324794ec99d2550418f32"
40
+ "requires_cli": ">=0.8.8 <0.9.0",
41
+ "revision": "0.2.11",
42
+ "sha256": "sha256:9614e6901fcfeac7e0779caee7a8ab1df40b39d08161967e51b459c266b82f90"
43
43
  },
44
44
  "feature-management": {
45
45
  "path": "skills/feature-management",
46
- "requires_cli": ">=0.8.7 <0.9.0",
47
- "revision": "0.2.9",
48
- "sha256": "sha256:2bd8e19ffe43e414fe74a269a75ccfdb88e66c7f2a52df6230a929321dbb54ea"
46
+ "requires_cli": ">=0.8.8 <0.9.0",
47
+ "revision": "0.2.11",
48
+ "sha256": "sha256:f9ec42124113d63a261e31d0f06959f2c7420370dfc1b6a84fcb2f5011310c45"
49
49
  },
50
50
  "model-deployment-management": {
51
51
  "path": "skills/model-deployment-management",
52
- "requires_cli": ">=0.8.7 <0.9.0",
53
- "revision": "0.2.9",
54
- "sha256": "sha256:26cbe95ca26371f3b34a4b83a1f185eeb879f64f099d9dbc30e4cc4ec81d9c64"
52
+ "requires_cli": ">=0.8.8 <0.9.0",
53
+ "revision": "0.2.11",
54
+ "sha256": "sha256:ef13c737a098e9a582dfa6f7c54777c00a9efbc7af894c7aea35b9db4a97aa15"
55
55
  },
56
56
  "model-lifecycle-management": {
57
57
  "path": "skills/model-lifecycle-management",
58
- "requires_cli": ">=0.8.7 <0.9.0",
59
- "revision": "0.2.9",
60
- "sha256": "sha256:40d8b5eef72a937c208c3607b41666015ac143f604fb0521e0953659306182b2"
58
+ "requires_cli": ">=0.8.8 <0.9.0",
59
+ "revision": "0.2.11",
60
+ "sha256": "sha256:5f95a65d649c946ab64f72b127ad8861e20623b05b6a937cad953a4eb2eadfe3"
61
61
  },
62
62
  "prediction-report-management": {
63
63
  "path": "skills/prediction-report-management",
64
- "requires_cli": ">=0.8.7 <0.9.0",
65
- "revision": "0.2.9",
66
- "sha256": "sha256:0aee744970236f0357aa9e264e31e144b3cb6fab4a3ea6a01f184dcdaef7e846"
64
+ "requires_cli": ">=0.8.8 <0.9.0",
65
+ "revision": "0.2.11",
66
+ "sha256": "sha256:399e5838604b5ce0248be702b70be2deaaf8f644e5518c91c45d21e0d2f43e53"
67
67
  }
68
68
  },
69
- "source_commit": "e0c33cf9f1d052d2a24a574393fdf804438a4543"
69
+ "source_commit": "c4ba6b6d1f0010eabbc269db5a8642b0c137944d"
70
70
  }
@@ -58,6 +58,16 @@ ml-platform list-feature-versions <name> --project <project> --all
58
58
  ml-platform list-jobs --project <project> --status succeeded --all
59
59
  ```
60
60
 
61
+ 本地 CSV/Parquet 可上传为不可变 Parameter source,再通过 `add-parameter` 注册显式列映射;后续仍使用既有 Feature、FeatureSet 和 Dataset build 流程生成标准 DatasetArtifact:
62
+
63
+ ```bash
64
+ ml-platform upload-source-file /absolute/path/to/measurements.csv
65
+ ml-platform add-parameter /absolute/path/to/parameter.json
66
+ ml-platform build-registered-dataset <dataset_id> <dataset_version> --project <project> --wait
67
+ ```
68
+
69
+ 上传响应提供 `object_uri`、`object_sha256`、格式和列预览。Parameter 的 `source.adapter` 使用 `local_file`,并显式设置 `object_uri`、`object_sha256`、`file_format`、`time_column` 和 `value_column`;筛选条件使用 `filters`。上传不会推断业务字段、注册资产或创建 DatasetArtifact。当前首期支持单文件,不支持 ZIP/多文件合并或直接将原始文件作为训练数据集。
70
+
61
71
  平台资源生命周期与部署绑定的因果上下文读取也由同一 CLI 覆盖:
62
72
 
63
73
  ```bash
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@zhuoyuezs/ml-platform-business-client",
3
- "version": "0.8.7",
3
+ "version": "0.8.8",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@zhuoyuezs/ml-platform-business-client",
9
- "version": "0.8.7",
9
+ "version": "0.8.8",
10
10
  "license": "UNLICENSED",
11
11
  "bin": {
12
12
  "ml-platform": "src/cli.js"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhuoyuezs/ml-platform-business-client",
3
- "version": "0.8.7",
3
+ "version": "0.8.8",
4
4
  "private": true,
5
5
  "description": "JavaScript implementation of the ML Platform business client",
6
6
  "bin": {
@@ -7,7 +7,7 @@ const { configPath, expandHome, loadApiUrl, normalizeApiUrl, saveApiUrl } = requ
7
7
  const { PlatformApiClient } = require("./http");
8
8
  const { applyCatalog, loadCatalog, normalizeDataset, normalizeRegistryDataset } = require("./catalog");
9
9
  const { version: CLIENT_VERSION } = require("../package.json");
10
- const LIFECYCLE_COLLECTIONS = new Set(["training-runs", "training-jobs", "model-artifacts", "evaluation-configs", "evaluation-runs", "evaluation-jobs", "metric-definitions", "executable-packages", "model-packages"]);
10
+ const LIFECYCLE_COLLECTIONS = new Set(["training-runs", "training-jobs", "model-artifacts", "evaluation-configs", "evaluation-runs", "evaluation-jobs", "metric-definitions", "executable-packages", "model-packages", "experiment-runs"]);
11
11
  const BUSINESS_COMMANDS = new Set([
12
12
  ...[...LIFECYCLE_COLLECTIONS].map((name) => `list-${name}`),
13
13
  "get-model-runtime-release", "get-training-run", "get-model-artifact", "get-executable-package",
@@ -15,6 +15,9 @@ const BUSINESS_COMMANDS = new Set([
15
15
  "version", "create-project", "list-projects", "get-project", "delete-project",
16
16
  "get-dataset-contract-file", "validate-evaluation-comparison",
17
17
  "configure", "show-config", "health",
18
+ "data-platform-status", "list-data-platform-connections", "get-data-platform-connection",
19
+ "list-data-platform-objects", "list-data-platform-mappings", "list-data-platform-query-candidates", "get-data-platform-mapping-revision",
20
+ "bind-data-platform-parameters", "query-data-platform", "get-data-platform-query", "get-data-platform-snapshot",
18
21
  "list-datasource-connections", "list-datasource-namespaces", "list-datasource-objects",
19
22
  "list-datasource-fields", "query-datasource-object", "create-datasource-connection",
20
23
  "get-datasource-connection", "update-datasource-connection", "delete-datasource-connection",
@@ -28,12 +31,13 @@ const BUSINESS_COMMANDS = new Set([
28
31
  "get-parameter-lifecycle", "get-feature-lifecycle", "get-feature-set-lifecycle", "get-parameter-freshness",
29
32
  "list-parameter-references", "list-feature-references", "list-feature-set-references",
30
33
  "list-parameter-versions", "list-feature-versions", "list-feature-set-versions", "list-operator-versions",
31
- "add-parameter", "add-feature", "add-feature-set", "add-operator", "publish-operator",
34
+ "add-parameter", "add-feature", "add-feature-set", "add-operator", "publish-operator", "upload-source-file",
32
35
  "add-dataset", "update-dataset", "delete-dataset", "list-dataset-artifacts",
33
36
  "register-operator", "show-operator-specs", "delete-operator", "run-operator",
34
37
  "get-job", "wait-job", "retry-job", "cancel-job", "get-dataset-artifact", "download-dataset-artifact", "fetch-inference-data", "fetch-inference-context", "predict-model", "apply",
35
38
  "list-foundation-models", "get-foundation-model", "predict-foundation", "predict-foundation-csv",
36
39
  "list-system-models", "get-system-model", "register-training-run", "validate-training-run", "submit-training-job", "get-training-job", "retry-training-job", "cancel-training-job",
40
+ "create-experiment-run", "validate-experiment-run", "submit-experiment-run", "get-experiment-run", "list-experiment-candidates", "reconcile-experiment-run", "cancel-experiment-run",
37
41
  "register-evaluation-config", "get-evaluation-config", "register-metric-definition", "get-metric-definition",
38
42
  "register-executable-package", "verify-executable-package", "publish-executable-package",
39
43
  "validate-evaluation-run", "submit-evaluation", "get-evaluation-run", "get-evaluation-job", "retry-evaluation-job", "cancel-evaluation-job", "list-evaluation-attempts",
@@ -62,6 +66,17 @@ const COMMAND_USAGE = {
62
66
  configure: "configure --api-url URL",
63
67
  "show-config": "show-config",
64
68
  health: "health",
69
+ "data-platform-status": "data-platform-status",
70
+ "list-data-platform-connections": "list-data-platform-connections",
71
+ "get-data-platform-connection": "get-data-platform-connection CONNECTION_ID",
72
+ "list-data-platform-objects": "list-data-platform-objects CONNECTION_ID",
73
+ "list-data-platform-mappings": "list-data-platform-mappings [--page N] [--page-size N] [--scope-code CODE]",
74
+ "list-data-platform-query-candidates": "list-data-platform-query-candidates",
75
+ "get-data-platform-mapping-revision": "get-data-platform-mapping-revision MAPPING_ID REVISION_ID",
76
+ "bind-data-platform-parameters": "bind-data-platform-parameters SPEC_JSON",
77
+ "query-data-platform": "query-data-platform SPEC_JSON",
78
+ "get-data-platform-query": "get-data-platform-query RUN_ID",
79
+ "get-data-platform-snapshot": "get-data-platform-snapshot SNAPSHOT_ID [--offset N] [--limit N]",
65
80
  "list-datasource-connections": "list-datasource-connections [--limit N] [--cursor CURSOR]",
66
81
  "list-datasource-namespaces": "list-datasource-namespaces CONNECTION_ID [--limit N] [--cursor CURSOR]",
67
82
  "list-datasource-objects": "list-datasource-objects CONNECTION_ID NAMESPACE_ID [--limit N] [--cursor CURSOR]",
@@ -107,6 +122,7 @@ const COMMAND_USAGE = {
107
122
  "add-feature-set": "add-feature-set SPEC_JSON",
108
123
  "add-operator": "add-operator SPEC_JSON",
109
124
  "publish-operator": "publish-operator SPEC_JSON --package PATH",
125
+ "upload-source-file": "upload-source-file FILE",
110
126
  "add-dataset": "add-dataset MANIFEST_JSON [--force]",
111
127
  "update-dataset": "update-dataset MANIFEST_JSON [--force]",
112
128
  "delete-dataset": "delete-dataset DATASET_ID DATASET_VERSION [--project PROJECT]",
@@ -168,6 +184,13 @@ const COMMAND_USAGE = {
168
184
  "create-model-package": "create-model-package REQUEST_JSON [--idempotency-key KEY]",
169
185
  "get-model-package": "get-model-package PACKAGE_ID [--package-version VERSION]",
170
186
  "cancel-model-package": "cancel-model-package PACKAGE_ID [--package-version VERSION]",
187
+ "create-experiment-run": "create-experiment-run SPEC_JSON",
188
+ "validate-experiment-run": "validate-experiment-run RUN_ID",
189
+ "submit-experiment-run": "submit-experiment-run RUN_ID",
190
+ "get-experiment-run": "get-experiment-run RUN_ID",
191
+ "list-experiment-candidates": "list-experiment-candidates RUN_ID [--limit N] [--offset N]",
192
+ "reconcile-experiment-run": "reconcile-experiment-run RUN_ID",
193
+ "cancel-experiment-run": "cancel-experiment-run RUN_ID",
171
194
  "validate-model-artifact": "validate-model-artifact ARTIFACT_ID",
172
195
  "register-model-artifact": "register-model-artifact ARTIFACT_ID --evaluation-id EVALUATION_ID",
173
196
  "list-business-domains": "list-business-domains",
@@ -490,6 +513,42 @@ async function runBusinessCli(argv, output = { write: text => process.stdout.wri
490
513
  }
491
514
  else if (options.command === "health")
492
515
  result = await client(options).get("/health");
516
+ else if (options.command === "data-platform-status")
517
+ result = await client(options).get("/data-platform/status");
518
+ else if (options.command === "list-data-platform-connections")
519
+ result = await client(options).get("/data-platform/connections");
520
+ else if (options.command === "list-data-platform-query-candidates")
521
+ result = await client(options).get("/data-platform/query-candidates");
522
+ else if (["get-data-platform-connection", "list-data-platform-objects"].includes(options.command)) {
523
+ const id = encodeURIComponent(positional(rest, "connection id"));
524
+ const suffix = options.command === "list-data-platform-objects" ? "/objects" : "";
525
+ result = await client(options).get(`/data-platform/connections/${id}${suffix}`);
526
+ }
527
+ else if (options.command === "list-data-platform-mappings") {
528
+ result = await client(options).get("/data-platform/mappings", {
529
+ page: integer(take(rest, "--page", "1"), "page"),
530
+ page_size: integer(take(rest, "--page-size", "50"), "page size"),
531
+ scope_code: take(rest, "--scope-code"),
532
+ });
533
+ }
534
+ else if (options.command === "get-data-platform-mapping-revision") {
535
+ const mappingId = encodeURIComponent(positional(rest, "mapping id"));
536
+ const revisionId = encodeURIComponent(positional(rest, "revision id"));
537
+ result = await client(options).get(`/data-platform/mappings/${mappingId}/revisions/${revisionId}`);
538
+ }
539
+ else if (options.command === "bind-data-platform-parameters")
540
+ result = await client(options).post("/data-platform/parameters", readSpec(positional(rest, "binding spec JSON")));
541
+ else if (options.command === "query-data-platform")
542
+ result = await client(options).post("/data-platform/query-runs", readSpec(positional(rest, "query spec JSON")));
543
+ else if (options.command === "get-data-platform-query")
544
+ result = await client(options).get(`/data-platform/query-runs/${encodeURIComponent(positional(rest, "run id"))}`);
545
+ else if (options.command === "get-data-platform-snapshot") {
546
+ const id = encodeURIComponent(positional(rest, "snapshot id"));
547
+ result = await client(options).get(`/data-platform/snapshots/${id}/rows`, {
548
+ offset: integer(take(rest, "--offset", "0"), "offset"),
549
+ limit: integer(take(rest, "--limit", "200"), "limit"),
550
+ });
551
+ }
493
552
  else if (options.command === "list-datasource-connections") {
494
553
  result = await client(options).get("/datasource-connections", datasourcePageParams(rest));
495
554
  }
@@ -566,6 +625,9 @@ async function runBusinessCli(argv, output = { write: text => process.stdout.wri
566
625
  const published = { ...spec, code_hash: upload.code_artifact.sha256, package_uri: upload.code_artifact.uri, code_artifact: upload.code_artifact };
567
626
  result = { status: "published", profile: "server", path: null, operator: published, registration: await api.post("/operators", published) };
568
627
  }
628
+ else if (options.command === "upload-source-file") {
629
+ result = await client(options).uploadSourceFile(positional(rest, "source file"));
630
+ }
569
631
  else if (options.command === "get-dataset") {
570
632
  const datasetId = positional(rest, "dataset id");
571
633
  const datasetVersion = positional(rest, "dataset version");
@@ -1051,6 +1113,34 @@ async function runBusinessCli(argv, output = { write: text => process.stdout.wri
1051
1113
  else if (options.command === "get-model-runtime-release") {
1052
1114
  result = await client(options).get("/model-runtime-release");
1053
1115
  }
1116
+ else if (options.command === "create-experiment-run") {
1117
+ result = await client(options).post("/experiment-runs", readSpec(positional(rest, "experiment JSON")));
1118
+ }
1119
+ else if (/^(validate|submit|reconcile|cancel)-experiment-run$/.test(options.command)) {
1120
+ const runId = positional(rest, "experiment run id");
1121
+ const action = options.command.split("-")[0];
1122
+ result = await client(options).post(`/experiment-runs/${encodeURIComponent(runId)}/${action}`);
1123
+ }
1124
+ else if (options.command === "get-experiment-run") {
1125
+ result = await client(options).get(`/experiment-runs/${encodeURIComponent(positional(rest, "experiment run id"))}`);
1126
+ }
1127
+ else if (options.command === "list-experiment-candidates") {
1128
+ const runId = positional(rest, "experiment run id");
1129
+ const params = {};
1130
+ const limit = take(rest, "--limit");
1131
+ const offset = take(rest, "--offset");
1132
+ if (limit !== undefined) {
1133
+ params.limit = integer(limit, "--limit");
1134
+ if (params.limit < 1 || params.limit > 500)
1135
+ throw new Error("--limit must be between 1 and 500");
1136
+ }
1137
+ if (offset !== undefined) {
1138
+ params.offset = integer(offset, "--offset");
1139
+ if (params.offset < 0)
1140
+ throw new Error("--offset must be non-negative");
1141
+ }
1142
+ result = await client(options).get(`/experiment-runs/${encodeURIComponent(runId)}/candidates`, params);
1143
+ }
1054
1144
  else if (options.command.startsWith("list-") && LIFECYCLE_COLLECTIONS.has(options.command.slice(5))) {
1055
1145
  const params = {};
1056
1146
  const limit = take(rest, "--limit");
@@ -212,6 +212,15 @@ class PlatformApiClient {
212
212
  params: { filename: path.basename(resolved) }, body: fs.readFileSync(resolved), contentType: "application/octet-stream",
213
213
  });
214
214
  }
215
+ uploadSourceFile(filePath) {
216
+ const resolved = path.resolve(expandHome(filePath));
217
+ if (!fs.existsSync(resolved) || !fs.statSync(resolved).isFile())
218
+ throw new Error(`source file not found: ${resolved}`);
219
+ const filename = path.basename(resolved).replace(/["\r\n]/g, "_");
220
+ return this.request("POST", "/source-files", {
221
+ params: { filename }, body: fs.readFileSync(resolved), contentType: "application/octet-stream",
222
+ });
223
+ }
215
224
  async downloadDatasetArtifact(project, datasetId, manifestHash, outputDir, force = false) {
216
225
  const target = path.resolve(expandHome(outputDir));
217
226
  if (fs.existsSync(target) && fs.readdirSync(target).length) {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: data-source-exploration
3
- description: Discover platform-configured PostgreSQL, MySQL, SQL Server, or InfluxDB objects and run bounded structured reads for local data and feature exploration. Use when an algorithm engineer wants to inspect visible databases, schemas, tables, measurements, fields, or limited rows before defining governed feature assets. Do not use for free-form SQL, bulk export, asset publication, dataset builds, or model training.
3
+ description: Discover platform-configured database objects or published external data-platform Mappings, and run bounded structured or Mapping snapshot reads for local data and feature exploration. Use when an algorithm engineer wants to inspect visible sources, Mapping outputs, time coverage or limited rows before defining governed feature assets. Do not use for free-form SQL, bulk export, asset publication, dataset builds, or model training.
4
4
  ---
5
5
 
6
6
  # Data Source Exploration
@@ -10,6 +10,15 @@ never request credentials in chat. The platform exposes managed connections and
10
10
  objects. Connection credentials are write-only control-plane input and are never returned by the
11
11
  platform.
12
12
 
13
+ ## External Data Platform
14
+
15
+ For external published mapping discovery and bounded query/snapshot reads, follow
16
+ [the external data platform reference](references/data-platform.md). This includes the complete
17
+ authorized query-candidate catalog, fixed Mapping revisions, asynchronous query runs and paged
18
+ snapshots. Keep that catalog separate from the direct database connections below; it has its own
19
+ IDs, permissions and query semantics. Use `$feature-management` to bind confirmed outputs to
20
+ Parameters and build features; discovery alone does not publish assets.
21
+
13
22
  ## Manage Connections
14
23
 
15
24
  Datasource connections are business-owned platform resources, not ConfigMap entries. An operator
@@ -48,6 +57,8 @@ Before discovery, verify the installed client and server target:
48
57
 
49
58
  ```bash
50
59
  command -v ml-platform
60
+ ml-platform version
61
+ ml-platform show-config
51
62
  ml-platform health
52
63
  ```
53
64
 
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "数据源与特征探索"
3
- short_description: "逐层发现已连接数据源并执行受限数据查询"
4
- default_prompt: "使用 $data-source-exploration 从平台已连接数据源中发现可见库表字段,执行有限查询,并整理数据与特征假设。"
3
+ short_description: "发现已连接数据源或外部 Mapping,并执行有界查询"
4
+ default_prompt: "使用 $data-source-exploration 发现平台可见库表字段或外部数据平台已发布 Mapping,执行有界查询和快照读取,并整理覆盖率、数据与特征假设。"