@petercjl/taobao-ai-ops 0.4.2 → 0.4.3

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 CHANGED
@@ -64,7 +64,7 @@ Node >=20。Python 研究依赖通过稳定解释器准备;TAOBAO_AI_OPS_PYTHO
64
64
 
65
65
  本地 macOS 确定性安装、更新与恢复测试单独记录;Windows/SealSeek 的真实宿主安装和端到端行为尚待验证。CI 发布前须先有可安装的类目独立包;所有发布通过 GitHub Actions OIDC。
66
66
 
67
- The independent `competitor-visual-canvas` component collects Taobao/Tmall visual media into regional SealSeek Frames. Select its node for new collection or append; it owns application layout/state and uses the registered capability dependencies. WorkBuddy accepts the same suite lifecycle through `--agent workbuddy`; host execution evidence remains separate.
67
+ The independent `competitor-visual-canvas` component collects Taobao/Tmall visual media into regional Infinite Canvas or explicitly selected Boardmix Frames. Boardmix uses the independent `@petercjl/boardmixcli` component for browser/login recovery, image and native-video imports, and explicit object operations. The shell installs the full dependency closure and forwards its registered capability entries to the application. Select its node for new collection or append; it owns application layout/state and uses the registered capability dependencies. WorkBuddy accepts the same suite lifecycle through `--agent workbuddy`; host execution evidence remains separate.
68
68
 
69
69
  ## Audio production
70
70
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@petercjl/taobao-ai-ops",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "description": "Independent Taobao AI operations SOP skills with a managed suite lifecycle",
5
5
  "repository": {
6
6
  "type": "git",
@@ -53,7 +53,7 @@ Confirm the selected node, actual source path, method version, source hashes and
53
53
 
54
54
  ## Competitor visual collection
55
55
 
56
- A request to collect product main images, main videos, SKU images and detail images into Infinite Canvas selects `competitor-visual-canvas`. Resolve `taobao-ai-ops skill source --name competitor-visual-canvas --json`, read its complete current Skill and active adapter, then follow its main line through `taobao-ai-ops component run competitor-visual-canvas ...`. The child accepts Taobao IDs or Taobao/Tmall links, owns the media manifest, four regional Frames per product, layout and append state, and returns source evidence, verified canvas URL and coverage gaps. Its exact dependencies are `tbcli` and `sealseek-media`, loaded at runtime through the child's declared tool resolver; it ships compatible npm dependency versions. Authentication, validation and writes stay with those capability packages. Missing collection or canvas capability stops the affected node with CAPABILITY_UNAVAILABLE; do not duplicate its integrations. Return to main-line step 4 for optional continuity or step 6 for delivery. Ordinary requests add to the child's selected existing canvas when asked to continue; new canvas creation follows the child's explicit user intent.
56
+ A request to collect product main images, main videos, SKU images and detail images into Infinite Canvas or explicitly requested Boardmix selects `competitor-visual-canvas`. Resolve `taobao-ai-ops skill source --name competitor-visual-canvas --json`, read its complete current Skill and active adapter, then follow its main line through `taobao-ai-ops component run competitor-visual-canvas ...`. The child accepts Taobao IDs or Taobao/Tmall links, owns the media manifest, four regional Frames per product, layout and append state, and returns source evidence, verified canvas URL and coverage gaps. Use competitor-visual-canvas 0.1.7+ with tbcli 0.11.1+ and boardmixcli 0.1.6+ for the Boardmix branch. The default target is Infinite Canvas; explicit Boardmix intent selects Boardmix. The shell installs both target capabilities and passes its registered CLI entries to the application. At runtime load only the selected target's current capability Skill: `tbcli` plus `sealseek-media` for Infinite Canvas, or `tbcli` plus `boardmixcli` for Boardmix. The application owns new collection, append, video backfill, layout, state and acceptance; the capability owns browser startup, login recovery and native media operations. Authentication, validation and writes stay with those capability packages. Missing collection or canvas capability stops the affected node with CAPABILITY_UNAVAILABLE; do not duplicate its integrations. Return to main-line step 4 for optional continuity or step 6 for delivery. Ordinary requests add to the child's selected existing canvas when asked to continue; new canvas creation follows the child's explicit user intent.
57
57
 
58
58
  ## Audio production
59
59
 
@@ -87,3 +87,7 @@ Before every audio component invocation, the suite checks stable latest, install
87
87
  当前宿主通过能力集合订阅安装时,宿主提供的 collection-runtime 回执声明本任务的 runtimeEntry 与 environment。调用所选 CLI 时使用该入口和环境,依照当前 Skill 完成业务;壳通过自己的组件记录解析成员。业务期间保持该版本集合。安装、定期更新、启停、移除和热刷新由宿主订阅管理;本 Skill 负责业务路由及子 Skill 的完整当前主线。
88
88
 
89
89
  维护时,壳独立检查全部注册成员,无需壳先发布新版本。新建成员包发布后登记并发布壳;既有成员的后续更新只发布成员即可。首次订阅默认允许安装以后登记的新成员,业务登录、付费与外部操作继续遵循各能力的授权。离线、合同或安装失败保留当前集合,并回到失败阶段恢复;不要通过业务调用替换正在使用的集合。
90
+
91
+ ## Boardmix operations
92
+
93
+ For explicit Boardmix file, media or object operations, select `boardmix-tools`. Resolve `taobao-ai-ops skill source --name boardmixcli --json`, load the complete current Skill and discover live capabilities through `taobao-ai-ops component run boardmixcli capabilities --json`. Invoke its exact operations through that component entry. Inputs are the user-authorized file/media/object targets and placement; outputs are verified identifiers and readback evidence or structured recovery errors. Installation does not authorize service access. Collection and layout decisions remain with the competitor-visual application. Return to main-line step 6 after the capability completes.
package/src/runtime.mjs CHANGED
@@ -5,8 +5,9 @@ import {spawnSync} from 'node:child_process';
5
5
  import {createRequire} from 'node:module';
6
6
  import {ROOT,MANIFEST,PACKAGE,nodeFor,source,componentRecord,componentRecords,fail} from './core.mjs';
7
7
  export function componentEnvironment(id,env=process.env){
8
- const media=componentRecords()['sealseek-media'];
9
- return {...env,TBCLI_UPDATE_CHECK:'0',SYCMCLI_DISABLE_AUTO_UPDATE:'1',SEEDAUDIO_AUTO_UPDATE:'0',SEALSEEK_MEDIA_AUTO_UPDATE:'0',COMPETITOR_CANVAS_AUTO_UPDATE:'0',...(id==='cloud-hug-style-transfer'&&media&&!env.CLOUD_HUG_MEDIA_ROOT?{CLOUD_HUG_MEDIA_ROOT:media.root}:{})};
8
+ const records=componentRecords(),media=records['sealseek-media'];
9
+ const canvasEntries=id==='competitor-visual-canvas'?Object.fromEntries([['tbcli','TBCLI_ENTRY'],['sealseek-media','SEALSEEK_MEDIA_ENTRY'],['boardmixcli','BOARDMIXCLI_ENTRY']].filter(([key])=>records[key]?.entry).map(([key,variable])=>[variable,records[key].entry])):{};
10
+ return {...env,...canvasEntries,BOARDMIXCLI_UPDATE_CHECK:'0',TBCLI_UPDATE_CHECK:'0',SYCMCLI_DISABLE_AUTO_UPDATE:'1',SEEDAUDIO_AUTO_UPDATE:'0',SEALSEEK_MEDIA_AUTO_UPDATE:'0',COMPETITOR_CANVAS_AUTO_UPDATE:'0',...(id==='cloud-hug-style-transfer'&&media&&!env.CLOUD_HUG_MEDIA_ROOT?{CLOUD_HUG_MEDIA_ROOT:media.root}:{})};
10
11
  }
11
12
  export function pythonEnvironment(env=process.env){
12
13
  return {...env,PYTHONUTF8:'1',PYTHONIOENCODING:'utf-8',PYTHONDONTWRITEBYTECODE:'1'};
@@ -84,9 +85,17 @@ export async function doctor(id,mode='excel'){
84
85
  checks.push({id:'cloud-hug-node',ok:Number(process.versions.node.split('.')[0])>=22,value:process.version,minimum:22});
85
86
  checks.push({id:'cloud-hug-component-integrity',ok:result.status===0&&detail.ok===true&&detail.package===MANIFEST.components[n.component].package&&detail.version===record.version&&detail.integrity?.ok===true,value:detail});
86
87
  }
88
+ if(n.component==='boardmixcli'){
89
+ const record=componentRecord(n.component);
90
+ const result=spawnSync(process.execPath,[record.entry,'--version'],{encoding:'utf8',timeout:15000,env:componentEnvironment(n.component)});
91
+ let version;try{const data=JSON.parse(result.stdout);version=(data.data??data).version;}catch{}
92
+ checks.push({id:'boardmix-node',ok:Number(process.versions.node.split('.')[0])>=22,value:process.version,minimum:22});
93
+ checks.push({id:'boardmix-runtime',ok:result.status===0&&version===record.version,value:version});
94
+ checks.push({id:'boardmix-contract',ok:fs.existsSync(path.join(record.root,'capabilities.json'))});
95
+ }
87
96
  if(n.component==='competitor-visual-canvas'){
88
97
  const record=componentRecord(n.component);
89
- const result=spawnSync(process.execPath,[record.entry,'doctor','--json'],{encoding:'utf8',timeout:30000,env:{...process.env,COMPETITOR_CANVAS_AUTO_UPDATE:'0'}});
98
+ const result=spawnSync(process.execPath,[record.entry,'doctor','--json'],{encoding:'utf8',timeout:30000,env:componentEnvironment(n.component)});
90
99
  let detail;try{detail=JSON.parse(result.stdout||result.stderr);}catch{detail={ok:false};}
91
100
  checks.push({id:'competitor-canvas-node',ok:Number(process.versions.node.split('.')[0])>=22,value:process.version,minimum:22});
92
101
  checks.push({id:'competitor-canvas-contract',ok:result.status===0&&detail.ok===true,value:detail});
@@ -99,5 +108,5 @@ export async function doctor(id,mode='excel'){
99
108
  }
100
109
  if(!['excel','nas'].includes(mode))throw fail('USAGE','Doctor mode must be excel or nas');
101
110
  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});}}
102
- 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'||['procli','sealseek-media','competitor-visual-canvas','cloud-hug-style-transfer'].includes(n.component)||['1688cli','1688-product-sourcing','1688-opportunity-sourcing-research'].includes(n.component)?'not-probed':'not-required'};
111
+ 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'||['procli','sealseek-media','boardmixcli','competitor-visual-canvas','cloud-hug-style-transfer'].includes(n.component)||['1688cli','1688-product-sourcing','1688-opportunity-sourcing-research'].includes(n.component)?'not-probed':'not-required'};
103
112
  }
@@ -16,7 +16,8 @@
16
16
  "opportunity-sourcing",
17
17
  "sealseek-media-tools",
18
18
  "competitor-visual-canvas",
19
- "cloud-hug-style-transfer"
19
+ "cloud-hug-style-transfer",
20
+ "boardmix-tools"
20
21
  ]
21
22
  },
22
23
  "nodes": [
@@ -216,10 +217,11 @@
216
217
  "skill": "competitor-visual-canvas",
217
218
  "component": "competitor-visual-canvas",
218
219
  "stage": "competitor-visual-research",
219
- "method_version": "competitor-visual-canvas@1",
220
+ "method_version": "competitor-visual-canvas@0.1.7",
220
221
  "requires_skills": [
221
222
  "tbcli",
222
- "sealseek-media"
223
+ "sealseek-media",
224
+ "boardmixcli"
223
225
  ],
224
226
  "python_imports": [],
225
227
  "scripts": [],
@@ -256,6 +258,17 @@
256
258
  "state": "child remains owner of generation task records and artifacts"
257
259
  },
258
260
  "contract_resolution": "Resolve canonical Skill and live capabilities through the component CLI; host preflight remains mandatory."
261
+ },
262
+ {
263
+ "id": "boardmix-tools",
264
+ "skill": "boardmixcli",
265
+ "component": "boardmixcli",
266
+ "stage": "tools",
267
+ "method_version": "boardmixcli@0.1.6",
268
+ "requires_skills": [],
269
+ "python_imports": [],
270
+ "scripts": [],
271
+ "native_requirements": []
259
272
  }
260
273
  ],
261
274
  "tools": {
@@ -321,6 +334,11 @@
321
334
  "package": "@petercjl/cloud-hug-style-transfer",
322
335
  "component": "cloud-hug-style-transfer",
323
336
  "role": "brand style conversion application; child owns product/reference selection, photography, prompts and acceptance"
337
+ },
338
+ "boardmixcli": {
339
+ "package": "@petercjl/boardmixcli",
340
+ "component": "boardmixcli",
341
+ "role": "Boardmix browser/login recovery, files, images, native videos and explicit object operations"
324
342
  }
325
343
  },
326
344
  "targets": {
@@ -434,6 +452,13 @@
434
452
  "skills": [
435
453
  "cloud-hug-style-transfer"
436
454
  ]
455
+ },
456
+ "boardmixcli": {
457
+ "package": "@petercjl/boardmixcli",
458
+ "bin": "boardmixcli",
459
+ "skills": [
460
+ "boardmixcli"
461
+ ]
437
462
  }
438
463
  }
439
464
  }