@zhuoyuezs/ml-platform 0.2.0 → 0.2.2-alpha.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.
package/DEVELOPMENT.md CHANGED
@@ -9,13 +9,14 @@
9
9
  - Business CLI 与 Skill 是并列组件;CLI 不属于 Skill。
10
10
  - Skill 直接调用正式命令 `ml-platform`,不嵌入 CLI runtime。
11
11
  - 正式 npm 包只有 `@zhuoyuezs/ml-platform`,正式 bin 只有 `ml-platform`。
12
- - `business-client-js/` 是 CLI 唯一源码,仓库 `skills/` 下三个受支持 Skill 是各自唯一源码。
12
+ - `business-client-js/src-ts/` 是 business CLI 的唯一 TypeScript 源码,`src/` 是供 Node.js
13
+ release payload 使用的编译输出;仓库 `skills/` 下三个受支持 Skill 是各自唯一源码。
13
14
  - `npx @zhuoyuezs/ml-platform@<version> install` 是面向用户的统一安装入口;默认目标是 Codex
14
15
  用户级 Skill,不要求额外安装参数。
15
16
  - 管理命令默认输出简洁结果;Agent 和 CI 显式使用 `--json` 获取稳定结构化输出。
16
17
  - npm `postinstall` 不得修改 Agent Skills 目录。
17
18
  - Python business client 与迁移 oracle 已删除;release builder 继续防御性排除 Python
18
- runtime、wheel 和旧 wrapper,npm 包只携带 JavaScript CLI 与纯 Skill payload。
19
+ runtime、wheel 和旧 wrapper,npm 包只携带由 TypeScript 编译的 JavaScript CLI 与纯 Skill payload。
19
20
  - Codex CLI 不重新打包;当前只支持唯一自研 Host。
20
21
  - builder 使用 Python,因此开发构建命令仍通过 `uv run ...` 启动;最终 npm 包和用户侧
21
22
  `ml-platform` 运行时只依赖 Node.js,不依赖 Python 或 `uv`。
@@ -26,6 +27,9 @@
26
27
 
27
28
  ```text
28
29
  business-client-js/
30
+ ├── src-ts/ TypeScript business CLI source
31
+ └── src/ generated Node.js runtime
32
+ npm/ml-platform/src/ TypeScript installer and dispatcher source
29
33
  skills/feature-management/
30
34
  skills/model-lifecycle-management/
31
35
  skills/model-deployment-management/
@@ -40,8 +44,8 @@ agent_poc/codex-host/
40
44
  package/
41
45
  ├── package.json
42
46
  ├── scripts/
43
- │ ├── main.js
44
- │ └── lib.js
47
+ │ ├── main.js generated dispatcher
48
+ │ └── lib.js generated installer library
45
49
  ├── runtime/business-client/
46
50
  ├── skills/<skill-name>/
47
51
  ├── release-policy.json
@@ -156,6 +160,11 @@ SemVer tag(`vX.Y.Z` 或 `X.Y.Z`)与 `package.json.version` 一致、且配
156
160
 
157
161
  ## 4. package.json
158
162
 
163
+ `npm/ml-platform/src/` 与 `business-client-js/src-ts/` 是可编辑 TypeScript 源码。分别运行
164
+ `npm run build --prefix npm/ml-platform` 和 `npm run build --prefix business-client-js` 后,生成的
165
+ CommonJS 文件位于 `npm/ml-platform/scripts/` 与 `business-client-js/src/`。发布归档只包含这些
166
+ Node.js runtime 文件,不携带 TypeScript 编译器或 `node_modules`。
167
+
159
168
  ```json
160
169
  {
161
170
  "name": "@zhuoyuezs/ml-platform",
@@ -246,7 +255,16 @@ npx @zhuoyuezs/ml-platform@<version> install
246
255
 
247
256
  保留两种 scope 是因为它们解决不同的隔离需求:`user` 适合一个开发者在多个 Codex 项目共享
248
257
  同一 Skill,`project` 适合项目独立安装、校验和升级。它们不是两套发布物,也不会复制 CLI;
249
- 持久 CLI 始终只有一份,scope 只决定 Skill 和安装记录的位置。
258
+ 持久 CLI 始终只有一份,scope 只决定 Skill 和安装记录的位置。共享 runtime 在 state 目录的
259
+ `installations.json` 登记每个已安装 scope。升级共享 CLI 前,安装器会遍历所有已登记 scope 的
260
+ 全部 Skill `requires_cli`;候选 CLI 不兼容任何一个 scope 时,整个升级在替换前失败。`status`
261
+ 同时返回 scope 的 `installed_release` 与共享 runtime 的 `runtime_release`,CLI 版本始终以实际
262
+ runtime 为准,不从某个 scope 的历史安装记录推断。
263
+
264
+ `doctor` 会校验当前 scope 的每个已登记 Skill、共享 runtime、shim 和 registry。相同 release 的
265
+ `install` 发现某个受管 Skill 缺失或摘要被篡改时会重新写入该 scope 的全部 Skill,返回 `repaired`。
266
+ 旧安装记录可读取;要纳入跨 scope 兼容性保护,每个旧 scope 需至少执行一次当前安装器的
267
+ `install --upgrade` 完成 registry 登记。
250
268
 
251
269
  公开常用选项是 `--scope user|project`、`--project-dir PATH`、`--json` 和迁移旧 Skill 时使用的
252
270
  `--backup-unmanaged`。`--agent`、`--skills-dir`、`--state-dir`、`--bin-dir`、
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ML Platform
2
2
 
3
- ML Platform 的 JavaScript CLI、`feature-management`、`model-lifecycle-management` 与
3
+ ML Platform 的 TypeScript CLI(编译为 Node.js JavaScript runtime)、`feature-management`、`model-lifecycle-management` 与
4
4
  `model-deployment-management` Agent Skill。CLI 与 Skill 由同一个 npm
5
5
  release 安装和升级,运行时不需要 Python 或 `uv`。
6
6
 
@@ -82,7 +82,10 @@ ml-platform doctor
82
82
  ```
83
83
 
84
84
  管理命令默认输出简洁结果;Agent 和 CI 使用 `--json` 获取稳定 JSON。`doctor` 会使用当前有效
85
- API 配置;未配置 API 时只跳过联网检查,其余安装完整性检查仍会执行。
85
+ API 配置;未配置 API 时只跳过联网检查,其余安装完整性检查仍会执行。完整性检查覆盖当前 scope
86
+ 的全部受管 Skill、共享 CLI、shim 和 scope registry;同版本安装会自动恢复缺失或被篡改的受管
87
+ Skill。`status --json` 中 `installed_release` 是当前 scope 的 Skill release,`runtime_release` 和
88
+ `cli` 则表示实际共享 CLI runtime。
86
89
 
87
90
  验证项目级安装时,在项目根目录使用 `ml-platform status --scope project` 和
88
91
  `ml-platform doctor --scope project`。
@@ -95,12 +98,13 @@ ml-platform list-datasets --project <project>
95
98
  ml-platform get-dataset <dataset_id> <dataset_version> --project <project>
96
99
  ml-platform resolve-dataset <dataset_id> <dataset_version> --project <project>
97
100
  ml-platform build-registered-dataset <dataset_id> <dataset_version> --project <project> --wait
101
+ ml-platform list-deployments --package-id <package-id> --package-version <package-version>
98
102
  ml-platform apply /absolute/path/to/catalog --dry-run
99
103
  ml-platform build-dataset /absolute/path/to/manifest.json --wait
100
104
  ml-platform --help
101
105
  ```
102
106
 
103
- 前四个 Dataset 命令直接使用远程 Registry/API,适合 Agent 对已发布版本执行发现、只读诊断和
107
+ Dataset 查询和 `list-deployments` 直接使用远程 Registry/API,适合 Agent 对已发布版本执行发现、只读诊断和
104
108
  受控构建,不要求本地存在 Catalog。`apply`、`resolve-manifest` 和带本地 JSON 路径的
105
109
  `build-dataset` 用于新契约的编写和发布流程。
106
110
 
@@ -124,7 +128,7 @@ npx --yes --registry=https://registry.npmjs.org/ \
124
128
 
125
129
  ## 包内容
126
130
 
127
- - 一份 JavaScript business CLI;
131
+ - 一份由 TypeScript 编译的 business CLI;
128
132
  - 三份纯 Skill:`feature-management`、`model-lifecycle-management` 与
129
133
  `model-deployment-management`;
130
134
  - 显式安装、升级、状态、校验和回滚逻辑。
package/checksums.json CHANGED
@@ -2,38 +2,38 @@
2
2
  "files": [
3
3
  {
4
4
  "path": "runtime/business-client/README.md",
5
- "sha256": "sha256:61708adaee4479fe138ac5e6df1adc02be09cfeb6c30a7f9211ccc372c0e8ced",
6
- "size_bytes": 7553
5
+ "sha256": "sha256:7e84fad64f8ee6c7aae467b7947123f3a490b799ec5ffa24fd008e0fa37b133e",
6
+ "size_bytes": 7898
7
7
  },
8
8
  {
9
9
  "path": "runtime/business-client/package-lock.json",
10
- "sha256": "sha256:ff46c68537d57d95b324318ab10a0b70847afa6db15a9223b74b6bc074925a5c",
11
- "size_bytes": 381
10
+ "sha256": "sha256:7fc827b514bf44b2b216eeaa3ba2638739ebd4691fe77093322fd882e2cb11f3",
11
+ "size_bytes": 1628
12
12
  },
13
13
  {
14
14
  "path": "runtime/business-client/package.json",
15
- "sha256": "sha256:3a82339cbb18e0e205647860f72a4a1ecbaf3182e22431c7810dd5e3e32bac19",
16
- "size_bytes": 501
15
+ "sha256": "sha256:a497a296ed8b70323bf6a306f92ad7cadd693613d1f8c9fe2df00a045603aee0",
16
+ "size_bytes": 671
17
17
  },
18
18
  {
19
19
  "path": "runtime/business-client/src/catalog.js",
20
- "sha256": "sha256:9de30ed45b99e3be6ca23f0f0087cbbbf91f644f032273ccf3bec00e8062062e",
21
- "size_bytes": 56271
20
+ "sha256": "sha256:9ace0708c04aed8876e8d5b8eba9241f32e98757ca19d14fb00c30ba2de662cf",
21
+ "size_bytes": 58679
22
22
  },
23
23
  {
24
24
  "path": "runtime/business-client/src/cli.js",
25
- "sha256": "sha256:255c1ddf9521f7d6b336122a4678b1e9aab34e1ff4e894395a9e69316bacb4ad",
26
- "size_bytes": 54119
25
+ "sha256": "sha256:2c8c2ccc5ca9d09ac787ea68af928cb4cd63d3348c0b40bfc1898dd2dcb0edec",
26
+ "size_bytes": 58618
27
27
  },
28
28
  {
29
29
  "path": "runtime/business-client/src/config.js",
30
- "sha256": "sha256:4190e09c339a3f0b2861ca7dbc96fe2aa3bdd7927a5e1c4a4c00103a53236bd8",
31
- "size_bytes": 2186
30
+ "sha256": "sha256:8c9666c089dac373e5b849dd13312f25edce77b70e8f1e69b85fc5863a16c4ce",
31
+ "size_bytes": 2408
32
32
  },
33
33
  {
34
34
  "path": "runtime/business-client/src/http.js",
35
- "sha256": "sha256:e515b39f19e7b5e7d6c2388e9cf2d8e2c9fd18b585bb53bd4f8eeeb7412af81c",
36
- "size_bytes": 15192
35
+ "sha256": "sha256:4ae9e9ec10a74f36ed19ca7a63b0ba58a34cedea13ed95131ef1d07cd7d9e674",
36
+ "size_bytes": 17176
37
37
  },
38
38
  {
39
39
  "path": "skills/feature-management/SKILL.md",
@@ -132,8 +132,8 @@
132
132
  },
133
133
  {
134
134
  "path": "skills/model-deployment-management/references/operations.md",
135
- "sha256": "sha256:93977ec65a8b1ac51a5134ab98ac095e177de537c81f0db447ad97fb8a7e910f",
136
- "size_bytes": 4455
135
+ "sha256": "sha256:b6d8ac126033a1e3b463b53474f0b27d8687e1a7b05eb973d3aad79259838ac6",
136
+ "size_bytes": 4968
137
137
  },
138
138
  {
139
139
  "path": "skills/model-deployment-management/references/troubleshooting.md",
@@ -157,8 +157,8 @@
157
157
  },
158
158
  {
159
159
  "path": "skills/model-lifecycle-management/references/evaluation.md",
160
- "sha256": "sha256:099fc54af2a1d8bed287f9e557cee8583558e594880235c32b89276b385cce90",
161
- "size_bytes": 8858
160
+ "sha256": "sha256:4314e65b162f0a72c5c5e6411186340661c853551dc8b2ebce3597680acef117",
161
+ "size_bytes": 9477
162
162
  },
163
163
  {
164
164
  "path": "skills/model-lifecycle-management/references/packaging.md",
@@ -167,8 +167,8 @@
167
167
  },
168
168
  {
169
169
  "path": "skills/model-lifecycle-management/references/training-contracts.md",
170
- "sha256": "sha256:28fe32b2673db8f6cb1e02053bf5709826786e48dbe9951eac7bb4d98368d0c4",
171
- "size_bytes": 12644
170
+ "sha256": "sha256:d2b1f4089cd622589fabd50fe1600edfa6c330f4a7516734fe2316fcec7bb1e0",
171
+ "size_bytes": 12893
172
172
  },
173
173
  {
174
174
  "path": "skills/model-lifecycle-management/references/training.md",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhuoyuezs/ml-platform",
3
- "version": "0.2.0",
3
+ "version": "0.2.2-alpha.0",
4
4
  "description": "ML 数据平台 business CLI 与 Agent Skills 管理工具",
5
5
  "bin": {
6
6
  "ml-platform": "scripts/main.js"
@@ -17,10 +17,12 @@
17
17
  "CI-ARTIFACT.md"
18
18
  ],
19
19
  "scripts": {
20
- "test": "node --test test/*.test.js",
20
+ "build": "tsc --project tsconfig.json && chmod +x scripts/main.js scripts/verify-release-package.js",
21
+ "test": "npm run build && node --test test/*.test.js",
22
+ "test:compiled": "node --test test/*.test.js",
21
23
  "api:check": "node ../../scripts/check_api_contract.js",
22
24
  "pack": "npm pack",
23
- "prepublishOnly": "node scripts/verify-release-package.js"
25
+ "prepublishOnly": "npm run build && node scripts/verify-release-package.js"
24
26
  },
25
27
  "engines": {
26
28
  "node": ">=18"
@@ -33,5 +35,9 @@
33
35
  "publishConfig": {
34
36
  "access": "public",
35
37
  "registry": "https://registry.npmjs.org/"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "^22.10.0",
41
+ "typescript": "^5.7.3"
36
42
  }
37
43
  }
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:41f143a9451dbd740ec08070a33e21d4580e246cf4b282e0ffda6d9f6f9f880a",
17
- "version": "0.8.0"
16
+ "sha256": "sha256:6491b970b094de9514aacdf21a90e8f8f57d429f37a0f762747b2dca4a4d6df2",
17
+ "version": "0.8.1"
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.0",
28
+ "release_version": "0.2.2-alpha.0",
29
29
  "runtime_requirements": {
30
30
  "node": ">=18",
31
31
  "os": [
@@ -37,22 +37,22 @@
37
37
  "skills": {
38
38
  "feature-management": {
39
39
  "path": "skills/feature-management",
40
- "requires_cli": ">=0.8.0 <0.9.0",
41
- "revision": "0.2.0",
40
+ "requires_cli": ">=0.8.1 <0.9.0",
41
+ "revision": "0.2.2-alpha.0",
42
42
  "sha256": "sha256:d32f0306f129d7bf76eb037fe239c84dd3c29c64b61600799d6e40320784bb10"
43
43
  },
44
44
  "model-deployment-management": {
45
45
  "path": "skills/model-deployment-management",
46
- "requires_cli": ">=0.8.0 <0.9.0",
47
- "revision": "0.2.0",
48
- "sha256": "sha256:d81becca0076d0513e7b8277e7584d9f810db755aa56e79235df68d0f7a7659b"
46
+ "requires_cli": ">=0.8.1 <0.9.0",
47
+ "revision": "0.2.2-alpha.0",
48
+ "sha256": "sha256:e7d87c272a0dcc028ea628d5e36f5b7e52ed27cb9c1bc17ea76527478e28b46d"
49
49
  },
50
50
  "model-lifecycle-management": {
51
51
  "path": "skills/model-lifecycle-management",
52
- "requires_cli": ">=0.8.0 <0.9.0",
53
- "revision": "0.2.0",
54
- "sha256": "sha256:5a911eff6a4c188d8e3709f37e4f37819effea61db9f5a015e6ec4dddd4a0ec7"
52
+ "requires_cli": ">=0.8.1 <0.9.0",
53
+ "revision": "0.2.2-alpha.0",
54
+ "sha256": "sha256:aaa3fdb54c0ff9e8dfa0f71e67d072830786e5e3d4803ba3962dff723d159386"
55
55
  }
56
56
  },
57
- "source_commit": "aa4c64af0715b168edd4d50766f7b6bf851763ff"
57
+ "source_commit": "581b69e5c0a7c21dc3ebadd23121231974214b13"
58
58
  }
@@ -64,10 +64,15 @@ ml-platform validate-deployment /absolute/path/to/deployment.json \
64
64
  ml-platform create-deployment /absolute/path/to/deployment.json \
65
65
  --evaluation-id <pass-evaluation-id>
66
66
  ml-platform wait-deployment <deployment-id> --wait-timeout-seconds 1800
67
+ ml-platform list-deployments --package-id <package-id> \
68
+ --package-version <package-version> --model-artifact-id <artifact-id>
67
69
  ml-platform get-deployment <deployment-id>
68
70
  ml-platform get-deployment-events <deployment-id> --limit 100 --offset 0
69
71
  ```
70
72
 
73
+ `list-deployments` 也支持按 `service`、`environment`、`state` 和自由文本 `q` 过滤,返回平台
74
+ Deployment Controller 管理的部署,不把模型中心回写的 delivery 状态当作平台部署。
75
+
71
76
  `READY` 必须同时包含 `ReplicasReady=true`、`ArtifactsVerified=true` 和
72
77
  `SmokePredictionPassed=true`。`get-deployment` 返回控制器实际观察到的 endpoint 元数据;
73
78
  本地 CLI 不推测 Kubernetes Service 名称。部署后验证优先使用控制面代理:
@@ -1,19 +1,54 @@
1
1
  {
2
2
  "name": "@zhuoyuezs/ml-platform-business-client",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
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.0",
9
+ "version": "0.8.1",
10
10
  "license": "UNLICENSED",
11
11
  "bin": {
12
12
  "ml-platform": "src/cli.js"
13
13
  },
14
+ "devDependencies": {
15
+ "@types/node": "^22.10.0",
16
+ "typescript": "^5.7.3"
17
+ },
14
18
  "engines": {
15
19
  "node": ">=18"
16
20
  }
21
+ },
22
+ "node_modules/@types/node": {
23
+ "version": "22.20.3",
24
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.3.tgz",
25
+ "integrity": "sha512-DZmzkmwHzXrLPAXPyKNDzlIwMMUZCVacoD25ywdy5YTKGbOx/2ld+Q38Im2zJ0vBuZP5Prd3VZutKZyXwkOS8A==",
26
+ "dev": true,
27
+ "license": "MIT",
28
+ "dependencies": {
29
+ "undici-types": "~6.21.0"
30
+ }
31
+ },
32
+ "node_modules/typescript": {
33
+ "version": "5.9.3",
34
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
35
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
36
+ "dev": true,
37
+ "license": "Apache-2.0",
38
+ "bin": {
39
+ "tsc": "bin/tsc",
40
+ "tsserver": "bin/tsserver"
41
+ },
42
+ "engines": {
43
+ "node": ">=14.17"
44
+ }
45
+ },
46
+ "node_modules/undici-types": {
47
+ "version": "6.21.0",
48
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
49
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
50
+ "dev": true,
51
+ "license": "MIT"
17
52
  }
18
53
  }
19
54
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhuoyuezs/ml-platform-business-client",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
4
  "private": true,
5
5
  "description": "JavaScript implementation of the ML Platform business client",
6
6
  "bin": {
@@ -11,7 +11,8 @@
11
11
  "README.md"
12
12
  ],
13
13
  "scripts": {
14
- "test": "node --test test/*.test.js",
14
+ "build": "tsc --project tsconfig.json && chmod +x src/cli.js",
15
+ "test": "npm run build && node --test test/*.test.js",
15
16
  "api:check": "node ../scripts/check_api_contract.js",
16
17
  "pack": "npm pack"
17
18
  },
@@ -19,5 +20,9 @@
19
20
  "node": ">=18"
20
21
  },
21
22
  "license": "UNLICENSED",
22
- "dependencies": {}
23
+ "dependencies": {},
24
+ "devDependencies": {
25
+ "@types/node": "^22.10.0",
26
+ "typescript": "^5.7.3"
27
+ }
23
28
  }