@petercjl/taobao-ai-ops 0.2.1 → 0.3.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/README.md +8 -0
- package/package.json +1 -1
- package/skills/taobao-ai-operations/SKILL.md +10 -0
- package/skills/taobao-ai-operations/adapters/workbuddy.json +54 -0
- package/skills/taobao-ai-operations/capabilities.json +2 -1
- package/src/runtime.mjs +7 -1
- package/src/skill-manager.mjs +2 -1
- package/suite-manifest.json +92 -3
package/README.md
CHANGED
|
@@ -65,3 +65,11 @@ Node >=20。Python 研究依赖通过稳定解释器准备;TAOBAO_AI_OPS_PYTHO
|
|
|
65
65
|
The `seedaudio-tools` node registers the independent `@petercjl/seedaudiocli` package and its canonical `seedaudiocli` Skill. Install with `taobao-ai-ops skill install --agent codex --name seedaudiocli` (or the actual SealSeek target). Discover its source with `taobao-ai-ops skill source --name seedaudiocli --json`, read the complete current Skill and relative resources, then invoke `taobao-ai-ops component run seedaudiocli ...` or `tool run seedaudiocli ...`. Return task IDs and output files to the caller's audio acceptance flow. A missing component requires `components install --agent AGENT --yes`; missing credentials require importing the administrator-provided file through the component CLI.
|
|
66
66
|
|
|
67
67
|
Before every audio component invocation, the suite checks stable latest, installs a newer component into a separate generation and synchronizes registered managed Skill targets. Configuration and task history remain in user directories. Registry/install failures retain the previous version. Local development checkouts remain Git-managed. `TAOBAO_AI_OPS_AUTO_UPDATE=0` pins the installed set for a specific run. Other components keep their declared update policy. The suite owns installation and invocation; the audio package owns provider integration, validation, authentication, generation and recovery. Prompts and output acceptance belong to the caller.
|
|
68
|
+
|
|
69
|
+
## 1688 components
|
|
70
|
+
|
|
71
|
+
- `1688cli`: atomic read-only product/supplier query and explicit filtering.
|
|
72
|
+
- `1688-product-sourcing`: keyword/reference-image sourcing application.
|
|
73
|
+
- `1688-opportunity-sourcing-research`: six-category portfolio application from compatible opportunity handoffs.
|
|
74
|
+
|
|
75
|
+
Each component is an independent `@petercjl` npm package with its own canonical Skill. Use `skill source --name NAME`, `component run NAME ...`, or `tool run 1688cli ...`. The research profile includes all three and their Skill dependency closure. `components install --agent workbuddy --yes` supports the WorkBuddy managed target, alongside Codex and SealSeek; runtime QA remains host-specific.
|
package/package.json
CHANGED
|
@@ -49,3 +49,13 @@ Confirm the selected node, actual source path, method version, source hashes and
|
|
|
49
49
|
The `seedaudio-tools` node registers the independent `@petercjl/seedaudiocli` package and its canonical `seedaudiocli` Skill. Install with `taobao-ai-ops skill install --agent codex --name seedaudiocli` (or the actual SealSeek target). Discover its source with `taobao-ai-ops skill source --name seedaudiocli --json`, read the complete current Skill and relative resources, then invoke `taobao-ai-ops component run seedaudiocli ...` or `tool run seedaudiocli ...`. Return task IDs and output files to the caller's audio acceptance flow. A missing component requires `components install --agent AGENT --yes`; missing credentials require importing the administrator-provided file through the component CLI.
|
|
50
50
|
|
|
51
51
|
Before every audio component invocation, the suite checks stable latest, installs a newer component into a separate generation and synchronizes registered managed Skill targets. Configuration and task history remain in user directories. Registry/install failures retain the previous version. Local development checkouts remain Git-managed. `TAOBAO_AI_OPS_AUTO_UPDATE=0` pins the installed set for a specific run. Other components keep their declared update policy. The suite owns installation and invocation; the audio package owns provider integration, validation, authentication, generation and recovery. Prompts and output acceptance belong to the caller.
|
|
52
|
+
|
|
53
|
+
## 1688 货源与选品应用
|
|
54
|
+
|
|
55
|
+
按用户目标选择独立组件。单次关键词/图片/链接查询和明确筛选用 `1688cli`;从关键词或参考图形成商品库、视觉分类和报告用 `1688-product-sourcing`;从兼容 `product-opportunities.json` 形成六类策略组合用 `1688-opportunity-sourcing-research`。两项应用均通过原子能力获取平台事实,功能包只负责注册、依赖与安装更新。
|
|
56
|
+
|
|
57
|
+
执行前运行 `taobao-ai-ops skill source --name <精确Skill名称> --json`,完整读取返回路径的当前 SKILL.md,按其要求解析依赖和相对资源,执行它的主线后回到本路由的交付节点。缺少组件用 `components install --agent <agent> --yes`;契约不兼容保留错误并停止该分支。
|
|
58
|
+
|
|
59
|
+
输入输出:关键词/图找货应用接收用户需求和约束,交付 HTML、完整商品 JSON 和查询视觉证据;六类应用接收兼容机会交接文件,交付类别组合报告及 sourcing-candidates.json。只有输入契约实际兼容时才串联上游研究结果,不把其他 JSON 当作机会交接文件。
|
|
60
|
+
|
|
61
|
+
调用应用用 `taobao-ai-ops component run <component> <arguments...>`,原子查询可用 `taobao-ai-ops tool run 1688cli products search "关键词"`。应用方法和模板由各自 npm 包拥有,独立升级。
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "portable-skill-adapter",
|
|
3
|
+
"schema_version": "1.0.0",
|
|
4
|
+
"platform": "workbuddy",
|
|
5
|
+
"skill": "taobao-ai-operations",
|
|
6
|
+
"mappings": [
|
|
7
|
+
{
|
|
8
|
+
"capability_id": "suite.node.route",
|
|
9
|
+
"implementation": {
|
|
10
|
+
"kind": "cli-and-host-file-reader",
|
|
11
|
+
"execution": "Use the current host's command execution and file-reading surfaces to invoke taobao-ai-ops and load the returned source.",
|
|
12
|
+
"normalization": "Return artifacts, metadata and warnings; preserve structured CLI errors."
|
|
13
|
+
},
|
|
14
|
+
"status": "implemented",
|
|
15
|
+
"configuration": [],
|
|
16
|
+
"permissions": [
|
|
17
|
+
"local file read",
|
|
18
|
+
"new local output"
|
|
19
|
+
],
|
|
20
|
+
"normalization": "Return artifacts, metadata and warnings; preserve structured CLI errors.",
|
|
21
|
+
"output_contract_differences": [],
|
|
22
|
+
"evidence": [],
|
|
23
|
+
"features": [
|
|
24
|
+
"node_registry",
|
|
25
|
+
"exact_skill_source",
|
|
26
|
+
"full_child_instructions",
|
|
27
|
+
"runtime_preflight"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"capability_id": "suite.evidence.handoff",
|
|
32
|
+
"implementation": {
|
|
33
|
+
"kind": "cli-and-host-file-reader",
|
|
34
|
+
"execution": "Use the current host's command execution and file-reading surfaces to invoke taobao-ai-ops and load the returned source.",
|
|
35
|
+
"normalization": "Return artifacts, metadata and warnings; preserve structured CLI errors."
|
|
36
|
+
},
|
|
37
|
+
"status": "implemented",
|
|
38
|
+
"configuration": [],
|
|
39
|
+
"permissions": [
|
|
40
|
+
"local file read",
|
|
41
|
+
"new local output"
|
|
42
|
+
],
|
|
43
|
+
"normalization": "Return artifacts, metadata and warnings; preserve structured CLI errors.",
|
|
44
|
+
"output_contract_differences": [],
|
|
45
|
+
"evidence": [],
|
|
46
|
+
"features": [
|
|
47
|
+
"source_sha256",
|
|
48
|
+
"exact_candidate",
|
|
49
|
+
"explicit_query",
|
|
50
|
+
"new_output_only"
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
package/src/runtime.mjs
CHANGED
|
@@ -53,6 +53,12 @@ export async function doctor(id,mode='excel'){
|
|
|
53
53
|
checks.push({id:'procli-runtime',ok:result.status===0&&version===record.version,value:version});
|
|
54
54
|
checks.push({id:'procli-contract',ok:fs.existsSync(path.join(source(n),'capabilities.json'))});
|
|
55
55
|
}
|
|
56
|
+
if(['1688cli','1688-product-sourcing','1688-opportunity-sourcing-research'].includes(n.component)){
|
|
57
|
+
const record=componentRecord(n.component);
|
|
58
|
+
const result=spawnSync(process.execPath,[record.entry,'doctor','--json'],{encoding:'utf8',timeout:90000,env:pythonEnvironment()});
|
|
59
|
+
let detail;try{detail=JSON.parse(result.stdout);}catch{detail={code:'COMPONENT_DOCTOR_FAILED'};}
|
|
60
|
+
checks.push({id:'1688-component-runtime',ok:result.status===0,value:detail});
|
|
61
|
+
}
|
|
56
62
|
if(n.component==='seedaudiocli'){
|
|
57
63
|
const record=componentRecord(n.component);
|
|
58
64
|
const result=spawnSync(process.execPath,[record.entry,'doctor','--json'],{encoding:'utf8',timeout:30000,env:{...pythonEnvironment(),SEEDAUDIO_AUTO_UPDATE:'0'}});
|
|
@@ -67,5 +73,5 @@ export async function doctor(id,mode='excel'){
|
|
|
67
73
|
}
|
|
68
74
|
if(!['excel','nas'].includes(mode))throw fail('USAGE','Doctor mode must be excel or nas');
|
|
69
75
|
if(mode==='nas'&&n.id==='category-research')for(const id of ['tbcli','yccli']){try{const tool=toolEntry(id);const r=spawnSync(tool.command,[...tool.args,'--version'],{encoding:'utf8',timeout:15000,env:{...process.env,TBCLI_UPDATE_CHECK:'0'}});checks.push({id,ok:r.status===0,value:r.stdout?.trim()});}catch(e){checks.push({id,ok:false,message:e.message});}}
|
|
70
|
-
return {ok:checks.every(c=>c.ok),package:PACKAGE.name,version:PACKAGE.version,node:n.id,mode,checks,native_requirements:n.native_requirements.map(id=>({id,status:'requires-active-agent-verification'})),service_access:mode==='nas'||n.component==='procli'?'not-probed':'not-required'};
|
|
76
|
+
return {ok:checks.every(c=>c.ok),package:PACKAGE.name,version:PACKAGE.version,node:n.id,mode,checks,native_requirements:n.native_requirements.map(id=>({id,status:'requires-active-agent-verification'})),service_access:mode==='nas'||n.component==='procli'||['1688cli','1688-product-sourcing','1688-opportunity-sourcing-research'].includes(n.component)?'not-probed':'not-required'};
|
|
71
77
|
}
|
package/src/skill-manager.mjs
CHANGED
|
@@ -9,6 +9,7 @@ export function targetRoot(opts){
|
|
|
9
9
|
if(opts.targetDir&&opts.agent)throw fail('USAGE','Choose --agent or --target-dir');
|
|
10
10
|
if(opts.targetDir)return path.resolve(opts.targetDir);
|
|
11
11
|
if(opts.agent==='codex')return path.join(process.env.CODEX_HOME||path.join(os.homedir(),'.codex'),'skills');
|
|
12
|
+
if(opts.agent==='workbuddy')return process.env.WORKBUDDY_SKILLS_DIR||path.join(process.env.WORKBUDDY_HOME||path.join(os.homedir(),'.workbuddy'),'skills');
|
|
12
13
|
if(opts.agent==='agents')return process.env.AGENT_SKILLS_DIR||path.join(os.homedir(),'.agents','skills');
|
|
13
14
|
if(opts.agent==='sealseek'){
|
|
14
15
|
if(process.env.SEALSEEK_SKILLS_DIR)return path.resolve(process.env.SEALSEEK_SKILLS_DIR);
|
|
@@ -17,7 +18,7 @@ export function targetRoot(opts){
|
|
|
17
18
|
if(choices.length!==1)throw fail('TARGET_UNRESOLVED','Set SEALSEEK_SKILLS_DIR or --target-dir to the active SealSeek Skill root');
|
|
18
19
|
return choices[0];
|
|
19
20
|
}
|
|
20
|
-
throw fail('UNKNOWN_AGENT','Choose codex, agents, sealseek or --target-dir');
|
|
21
|
+
throw fail('UNKNOWN_AGENT','Choose codex, agents, sealseek, workbuddy or --target-dir');
|
|
21
22
|
}
|
|
22
23
|
import {existsSync as osExists} from 'node:fs';
|
|
23
24
|
async function owners(root){const p=path.join(root,OWNER);if(!await stat(p))return {package:PACKAGE.name,skills:{}};const value=await json(p);if(value.package!==PACKAGE.name)throw fail('OWNERSHIP_CONFLICT','Suite ownership file belongs to another package');return value;}
|
package/suite-manifest.json
CHANGED
|
@@ -10,7 +10,10 @@
|
|
|
10
10
|
"sycmcli-tools",
|
|
11
11
|
"html-report",
|
|
12
12
|
"project-management",
|
|
13
|
-
"seedaudio-tools"
|
|
13
|
+
"seedaudio-tools",
|
|
14
|
+
"sourcing-tools",
|
|
15
|
+
"product-sourcing",
|
|
16
|
+
"opportunity-sourcing"
|
|
14
17
|
]
|
|
15
18
|
},
|
|
16
19
|
"nodes": [
|
|
@@ -37,7 +40,10 @@
|
|
|
37
40
|
"requires_skills": [
|
|
38
41
|
"yuce-category-opportunity-report",
|
|
39
42
|
"taobao-search-product-form",
|
|
40
|
-
"compact-commerce-ui"
|
|
43
|
+
"compact-commerce-ui",
|
|
44
|
+
"1688cli",
|
|
45
|
+
"1688-product-sourcing",
|
|
46
|
+
"1688-opportunity-sourcing-research"
|
|
41
47
|
],
|
|
42
48
|
"python_imports": [],
|
|
43
49
|
"scripts": [],
|
|
@@ -145,6 +151,50 @@
|
|
|
145
151
|
"python_imports": [],
|
|
146
152
|
"scripts": [],
|
|
147
153
|
"native_requirements": []
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"id": "sourcing-tools",
|
|
157
|
+
"skill": "1688cli",
|
|
158
|
+
"component": "1688cli",
|
|
159
|
+
"stage": "sourcing-capability",
|
|
160
|
+
"method_version": "1688-contract@1",
|
|
161
|
+
"requires_skills": [],
|
|
162
|
+
"python_imports": [],
|
|
163
|
+
"scripts": [],
|
|
164
|
+
"native_requirements": []
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"id": "product-sourcing",
|
|
168
|
+
"skill": "1688-product-sourcing",
|
|
169
|
+
"component": "1688-product-sourcing",
|
|
170
|
+
"stage": "product-sourcing",
|
|
171
|
+
"method_version": "1688-product-sourcing@1",
|
|
172
|
+
"requires_skills": [
|
|
173
|
+
"1688cli",
|
|
174
|
+
"compact-commerce-ui"
|
|
175
|
+
],
|
|
176
|
+
"python_imports": [],
|
|
177
|
+
"scripts": [],
|
|
178
|
+
"native_requirements": [
|
|
179
|
+
"image.observe",
|
|
180
|
+
"browser.report.inspect"
|
|
181
|
+
]
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"id": "opportunity-sourcing",
|
|
185
|
+
"skill": "1688-opportunity-sourcing-research",
|
|
186
|
+
"component": "1688-opportunity-sourcing-research",
|
|
187
|
+
"stage": "opportunity-portfolio",
|
|
188
|
+
"method_version": "1688-opportunity-sourcing-research@1",
|
|
189
|
+
"requires_skills": [
|
|
190
|
+
"1688cli"
|
|
191
|
+
],
|
|
192
|
+
"python_imports": [],
|
|
193
|
+
"scripts": [],
|
|
194
|
+
"native_requirements": [
|
|
195
|
+
"image.observe",
|
|
196
|
+
"browser.report.inspect"
|
|
197
|
+
]
|
|
148
198
|
}
|
|
149
199
|
],
|
|
150
200
|
"tools": {
|
|
@@ -180,12 +230,30 @@
|
|
|
180
230
|
"package": "@petercjl/seedaudiocli",
|
|
181
231
|
"component": "seedaudiocli",
|
|
182
232
|
"role": "audio generation, reference voices, image-conditioned audio and task recovery"
|
|
233
|
+
},
|
|
234
|
+
"1688cli": {
|
|
235
|
+
"package": "@petercjl/1688cli",
|
|
236
|
+
"component": "1688cli",
|
|
237
|
+
"role": "sourcing-capability"
|
|
238
|
+
},
|
|
239
|
+
"1688-product-sourcing": {
|
|
240
|
+
"package": "@petercjl/1688-product-sourcing",
|
|
241
|
+
"component": "1688-product-sourcing",
|
|
242
|
+
"role": "product-sourcing"
|
|
243
|
+
},
|
|
244
|
+
"1688-opportunity-sourcing-research": {
|
|
245
|
+
"package": "@petercjl/1688-opportunity-sourcing-research",
|
|
246
|
+
"component": "1688-opportunity-sourcing-research",
|
|
247
|
+
"role": "opportunity-portfolio"
|
|
183
248
|
}
|
|
184
249
|
},
|
|
185
250
|
"targets": {
|
|
186
251
|
"codex:macos": "implemented",
|
|
187
252
|
"sealseek:macos": "implemented",
|
|
188
|
-
"sealseek:windows": "implemented"
|
|
253
|
+
"sealseek:windows": "implemented",
|
|
254
|
+
"codex:windows": "implemented",
|
|
255
|
+
"workbuddy:macos": "implemented",
|
|
256
|
+
"workbuddy:windows": "implemented"
|
|
189
257
|
},
|
|
190
258
|
"update_policy": {
|
|
191
259
|
"owner": "shell",
|
|
@@ -248,6 +316,27 @@
|
|
|
248
316
|
"seedaudiocli"
|
|
249
317
|
],
|
|
250
318
|
"automatic_update": true
|
|
319
|
+
},
|
|
320
|
+
"1688cli": {
|
|
321
|
+
"package": "@petercjl/1688cli",
|
|
322
|
+
"bin": "1688cli",
|
|
323
|
+
"skills": [
|
|
324
|
+
"1688cli"
|
|
325
|
+
]
|
|
326
|
+
},
|
|
327
|
+
"1688-product-sourcing": {
|
|
328
|
+
"package": "@petercjl/1688-product-sourcing",
|
|
329
|
+
"bin": "1688-product-sourcing",
|
|
330
|
+
"skills": [
|
|
331
|
+
"1688-product-sourcing"
|
|
332
|
+
]
|
|
333
|
+
},
|
|
334
|
+
"1688-opportunity-sourcing-research": {
|
|
335
|
+
"package": "@petercjl/1688-opportunity-sourcing-research",
|
|
336
|
+
"bin": "1688-opportunity-sourcing-research",
|
|
337
|
+
"skills": [
|
|
338
|
+
"1688-opportunity-sourcing-research"
|
|
339
|
+
]
|
|
251
340
|
}
|
|
252
341
|
}
|
|
253
342
|
}
|