@petercjl/taobao-ai-ops 0.3.0 → 0.4.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 CHANGED
@@ -4,15 +4,15 @@
4
4
 
5
5
  ## 安装与更新
6
6
 
7
- ```sh
8
- npm install --global @petercjl/taobao-ai-ops
9
- taobao-ai-ops components install --agent codex --yes --json
10
- taobao-ai-ops doctor --json
11
- taobao-ai-ops update check --json
12
- taobao-ai-ops update install --agent codex --yes --json
13
- ```
7
+ 将提示词发送给准备使用的 Agent,安装与检查由 Agent 完成。
8
+
9
+ > 请安装 npm 包 @petercjl/taobao-ai-ops。
14
10
 
15
- SealSeek 用户改用 --agent sealseek。目标有歧义时通过 SEALSEEK_SKILLS_DIR 指定。已有非套件管理的 Skill 会阻止覆盖;明确授权迁移后用 --adopt,保留完整备份。本地修改会阻止更新。
11
+ > 请更新 npm 包 @petercjl/taobao-ai-ops。
12
+
13
+ > 检查 taobao-ai-ops 的安装和组件是否可用。
14
+
15
+ 支持 Codex、SealSeek 和 WorkBuddy;Agent 解析对应的实际技能目录。已有非套件管理的 Skill 会阻止覆盖;明确授权迁移后用 --adopt,保留完整备份。本地修改会阻止更新。
16
16
 
17
17
  首次安装会获取清单中全部独立组件的正式 latest。统一更新检查套件及每个组件:套件版本不变也会更新组件。已安装组件的 Skill 同步可用 skill update;该命令只同步本地安装内容,不查询注册表。日常业务调用不更新环境,任务中保持已安装版本。
18
18
 
@@ -26,6 +26,8 @@ SealSeek 用户改用 --agent sealseek。目标有歧义时通过 SEALSEEK_SKILL
26
26
  - @petercjl/sycmcli:店铺经营数据工具,含其独立 Skill。
27
27
  - @petercjl/commerce-ui:通用 HTML 报告 Skill、模板、渲染与校验。调用 `taobao-ai-ops component run html-report ...`;Python 依赖不足时通过该入口执行 `runtime install --yes`。
28
28
  - @petercjl/procli:项目 SOP、任务依赖与成果归档,配套 `project-management` Skill。任务卡组织工作,项目 Wiki 积累可复用的证据与结论。
29
+ - @petercjl/sealseek-media-cli:生图、生视频、已有素材贴入及画板操作,配套 `sealseek-media` Skill。应用层负责素材选择与布局;接入不修改宿主的默认生图生视频路由。该组件需要 Node.js >=22。
30
+ - @petercjl/cloud-hug-style-transfer:抱抱云朵社品牌视觉转换,提供完整品牌素材、人物设定、摄影排版方法和效果验收流程。实际生图需要宿主参考图编辑能力。
29
31
  - taobao-ai-operations:套件自带的管理与业务路由 Skill。
30
32
 
31
33
  yccli 为取数时按需准备的外部工具,可用 TAOBAO_AI_OPS_YCCLI 指定;Excel 分析不需要 NAS、VPN 或平台登录。账号与授权留在包外,安装不会获得服务权限。
@@ -44,7 +46,7 @@ taobao-ai-ops component run procli knowledge index --project "项目名称" --js
44
46
 
45
47
  向 Agent 明确说“用 procli”,并指定项目、任务及读取或归档目标。按当前 `project-management` Skill 解析真实名称和目标环境。项目读写需项目服务授权;发布钉钉文档还需官方 dws 与对应权限。服务不可访问时报告原目标错误并停止该操作,已有 Excel 研究可独立进行。套件不自动创建所有 SOP 任务、执行整条业务链或向项目写入研究结果;现有项目的真实 SOP 与依赖以 procli 读取结果为准。
46
48
 
47
- ## 调用与开发
49
+ ## 开发者合同参考:调用与开发
48
50
 
49
51
  ```sh
50
52
  taobao-ai-ops components status --json
@@ -52,6 +54,8 @@ taobao-ai-ops components check --json
52
54
  taobao-ai-ops skill source --name yuce-category-opportunity-report --json
53
55
  taobao-ai-ops script category-research build_report.py --help
54
56
  taobao-ai-ops tool run tbcli capabilities --json
57
+ taobao-ai-ops skill source --name sealseek-media --json
58
+ taobao-ai-ops component run sealseek-media capabilities --json
55
59
  ```
56
60
 
57
61
  维护者分别发布各能力包的正式 latest。新增/移除组件或调整管理机制时才发布套件。源码开发可通过 components register --name ID --path CHECKOUT --yes 注册独立组件;开发记录由 Git 管理,不会被注册表更新覆盖。已安装 npm 组件的显式接入可加 --mode npm。源码套件自身通过 Git 更新。
@@ -60,6 +64,8 @@ Node >=20。Python 研究依赖通过稳定解释器准备;TAOBAO_AI_OPS_PYTHO
60
64
 
61
65
  本地 macOS 确定性安装、更新与恢复测试单独记录;Windows/SealSeek 的真实宿主安装和端到端行为尚待验证。CI 发布前须先有可安装的类目独立包;所有发布通过 GitHub Actions OIDC。
62
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.
68
+
63
69
  ## Audio production
64
70
 
65
71
  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.
@@ -73,3 +79,15 @@ Before every audio component invocation, the suite checks stable latest, install
73
79
  - `1688-opportunity-sourcing-research`: six-category portfolio application from compatible opportunity handoffs.
74
80
 
75
81
  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.
82
+
83
+ ## 抱抱云朵社品牌视觉制作
84
+
85
+ 安装或更新套件时,独立组件 `@petercjl/cloud-hug-style-transfer` 纳入统一管理,仍保留独立版本和维护来源。已有套件用户更新后即可发现该节点。附上待转换图片;商品关键结构或文案不清楚时补充实拍或准确文字。
86
+
87
+ > 用抱抱云朵社风格转换处理所附图片。
88
+
89
+ 只需要规划时:
90
+
91
+ > 用抱抱云朵社风格转换,为所附图片做转换规划。
92
+
93
+ 套件检查组件来源与素材完整性,子 Skill 按当前品牌方法执行。Codex、SealSeek、WorkBuddy 的实际生成能力以各自宿主预检为准,安装成功不代表生成效果已验证。套件不复制该组件的品牌图片、方法或提示词;独立包的兼容更新通过显式套件更新进入。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@petercjl/taobao-ai-ops",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Independent Taobao AI operations SOP skills with a managed suite lifecycle",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,17 +1,18 @@
1
1
  ---
2
2
  name: taobao-ai-operations
3
- description: Route Taobao research to independent tools, preserve evidence handoffs, and use procli for explicitly requested project SOP, task context and cumulative knowledge publication.
3
+ description: Route Taobao research, sourcing and Cloud Hug brand visual production to independently managed tools; preserve evidence handoffs and explicit project-management authorization.
4
4
  ---
5
5
 
6
6
  # Taobao AI operations
7
7
 
8
- Input: an operator's goal, supplied workbooks or authorized data sources, optional existing research and run directory. Output: the selected node's full deliverables, a versioned run plan and, when requested, an evidence-bound handoff. This suite currently implements category research and product research. Supply-chain validation, content creation and operating reviews are planned extensions reported as unavailable until registered.
8
+ Input: an operator's goal, supplied workbooks or authorized data sources, optional existing research and run directory. Output: the selected node's full deliverables, a versioned run plan and, when requested, an evidence-bound handoff. This suite implements category/product research, sourcing and Cloud Hug brand visual production, with independently registered media/canvas tools. Other business requests require a matching registered node.
9
9
 
10
10
  ## Main line
11
11
 
12
12
  1. Resolve the requested business result with `taobao-ai-ops nodes list --json`. A category/monthly market question uses `category-research`; a search-result workbook and concrete research object use `product-research`. Existing product scope can enter product research directly. If no supported node covers the request, report the missing node.
13
13
  An explicit request to use `procli` for project/task information, SOP progression, knowledge reuse or result publication uses `project-management`. Preserve this child's explicit-trigger contract; offering project integration does not authorize service reads or writes. For an authorized project-backed research request, resolve the project and read its task context and compiled Wiki before selecting the business research node. Preserve the target profile, exact project/task identities, observation windows, provenance and unresolved questions in the handoff.
14
14
  A supplied analysis or compatible ViewModel requiring a reusable HTML report uses `html-report`, whose exact Skill is `compact-commerce-ui`. It supplies reporting methods, not business conclusions; existing category/product outputs keep their own declared contracts.
15
+ A Cloud Hug brand conversion request for supplied detail pages, photography, main KV or SKU images uses `cloud-hug-style-transfer`; its brand-production contract is below.
15
16
  2. Run `taobao-ai-ops doctor --node NODE --mode excel --json` for local workbooks, or `--mode nas` for live category data. Doctor checks deterministic resources; verify any listed native capabilities in the active Agent before their stage. A missing dependency ends the affected node with its exact error.
16
17
  3. Resolve the exact child Skill with `taobao-ai-ops skill source --name SKILL --json`. Read its complete current SKILL.md, load its platform adapter, then follow only the child node's current reference routes. The logical dependencies are `yuce-category-opportunity-report` (method contract `yuce-category-opportunity@2.0`) and `taobao-search-product-form` (imported method `0.1.1`). Their returned artifacts and source hashes are the handoff; resolution or contract failure stops with CAPABILITY_UNAVAILABLE or OUTPUT_CONTRACT_FAILED. Return here at step 4 after the child completes. Naming a Skill alone is not execution.
17
18
  4. Preserve the child's analysis, full HTML and evidence files. Use `taobao-ai-ops workflow plan --run-dir NEW_DIR --node NODE --input WORKBOOK --json` when a durable suite plan is requested; this records a plan and fixed suite/method versions, not business completion. The product node's own stage ledger remains authoritative for its detailed execution.
@@ -26,6 +27,12 @@ Tasks organize SOP work, dependencies, responsibility and acceptance; Wiki prese
26
27
 
27
28
  When the user explicitly authorizes archiving to an exact project/task, prepare the current child's publication bundle, preserving the complete report and its evidence, and use `task publish`: preview, inspect the target and coverage, then publish with the same bundle/key and verify readback. Existing sources require cumulative synthesis with source citations. The child owns DingTalk creation, optional HTML attachment, full report Wiki, cumulative node knowledge and task-card summary; the Agent owns evidence-based meaning. Handle partial/unknown writes only through the child's recovery flow. Ordinary `task update` is a field edit, and publication is separate from submission/reviewer approval. The shell neither copies these business rules into runtime code nor automatically executes every SOP node. New tools can join project workflows through these contracts while retaining independent analysis methods.
28
29
 
30
+ ## SealSeek media and canvas capability
31
+
32
+ The `sealseek-media-tools` node registers `@petercjl/sealseek-media-cli` and its canonical `sealseek-media` Skill. For an explicitly routed SealSeek media/canvas operation, resolve `taobao-ai-ops skill source --name sealseek-media --json`, read the complete current Skill and active adapter, then discover the installed child contract through `taobao-ai-ops component run sealseek-media capabilities --json`. Invoke operations through that component entry, retaining the child's arguments and authorization requirements. Node.js 22+ is required for this component; installation does not authorize access to SealSeek.
33
+
34
+ Contract: explicit prompt/references or existing-media URLs, canvas identity, placement and operation authorization in; task/element identifiers, verified writes or structured errors out. Applications own asset selection, prompts, layouts and project state; the child owns service execution, authentication, validation and recovery. Provider and model selection follow the host/user policy. Registering this component changes no image/video default routes. Ordinary component calls retain installed versions; use the shell update path for managed components. Return to main-line step 4 with the operation result, or step 6 for a direct capability request. The independently released competitor-visual application is registered as `competitor-visual-canvas`.
35
+
29
36
  ## Execution and branches
30
37
 
31
38
  Component scripts run via `taobao-ai-ops script NODE SCRIPT ...`; supplied Excel does not require platform accounts. Optional platform calls use `taobao-ai-ops tool run TOOL ...` so the shell selects the installed independent component. Accounts, warehouse access and write permissions remain external. The category child's database-consent and additive-import boundaries apply in its NAS route.
@@ -44,6 +51,10 @@ Missing native image observation stops product visual analysis; an unverified su
44
51
 
45
52
  Confirm the selected node, actual source path, method version, source hashes and full output contract. Keep every Skill's tests independent and exercise suite installation, dependency closure and handoffs separately. Suite targets are implemented, with actual Agent/OS runtime evidence recorded separately. Clean-context regression requires an explicit user request. New business nodes enter the suite registry only with an independent I → S → O, execution and QA contract.
46
53
 
54
+ ## Competitor visual collection
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.
57
+
47
58
  ## Audio production
48
59
 
49
60
  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.
@@ -59,3 +70,13 @@ Before every audio component invocation, the suite checks stable latest, install
59
70
  输入输出:关键词/图找货应用接收用户需求和约束,交付 HTML、完整商品 JSON 和查询视觉证据;六类应用接收兼容机会交接文件,交付类别组合报告及 sourcing-candidates.json。只有输入契约实际兼容时才串联上游研究结果,不把其他 JSON 当作机会交接文件。
60
71
 
61
72
  调用应用用 `taobao-ai-ops component run <component> <arguments...>`,原子查询可用 `taobao-ai-ops tool run 1688cli products search "关键词"`。应用方法和模板由各自 npm 包拥有,独立升级。
73
+
74
+ ## 抱抱云朵社品牌视觉制作
75
+
76
+ 用户要求把旧详情页、产品摄影、主 KV 或 SKU 转为抱抱云朵社品牌视觉,或按当前模特设定延展画面时,选择 `cloud-hug-style-transfer` 节点。它由独立 npm 包 `@petercjl/cloud-hug-style-transfer` 拥有;套件只负责安装更新、精确来源解析、调用与检查。
77
+
78
+ 先通过 `taobao-ai-ops skill source --name cloud-hug-style-transfer --json` 获取规范来源,完整读取当前 SKILL.md,按其中节点加载本轮参考与当前宿主适配,再回到本套件主线。执行前运行 `taobao-ai-ops doctor --node cloud-hug-style-transfer --json`:它核对组件自身的资源和完整性,宿主仍须核验实际看图、多参考图编辑及结果交付能力。组件业务 CLI 通过 `taobao-ai-ops component run cloud-hug-style-transfer ...` 调用;包管理不代替品牌判断和原生生成工具。
79
+
80
+ 输入为当次源图、商品依据和用户目标,可补充已确认文案、比例和版式要求。输出为本轮约定数量的独立成图及简短验收说明,或仅要求的转换规划。品牌方法、人物与产品约束、素材选择、摄影与排版顺序、提示词、任务恢复及效果验收由子 Skill 的当前主线承接。遇到来源/合同不兼容、缺失资产或宿主能力不可用时,保留子层结构化错误并停止受影响阶段;满足条件后回到子层执行节点,完成后返回套件主线第 6 步交付。
81
+
82
+ 独立包与素材不复制到套件。普通业务使用已安装版本;显式套件更新获取该组件的正式 latest 并同步受管 Skill。安装该应用不更改宿主的生成服务、模型或授权策略,是否使用 SealSeek 媒体工具仍遵循用户的明确选择。
@@ -1,3 +1,3 @@
1
1
  interface:
2
2
  display_name: "淘宝 AI 运营"
3
- short_description: "按独立 SOP 节点开展淘宝类目机会、商品形态研究与证据交接"
3
+ short_description: "按独立 SOP 节点开展市场研究、货源分析、品牌视觉与证据交接"
package/src/cli.mjs CHANGED
@@ -15,11 +15,11 @@ export async function main(argv){
15
15
  if(command==='script')return runScript(action,rest[0],rest.slice(1));
16
16
  if(command==='component'&&action==='run'){
17
17
  await prepareComponentRun(rest[0]);
18
- const record=componentRecord(rest[0]);const r=spawnSync(process.execPath,[record.entry,...rest.slice(1)],{stdio:'inherit',env:{...process.env,TBCLI_UPDATE_CHECK:'0',SYCMCLI_DISABLE_AUTO_UPDATE:'1',SEEDAUDIO_AUTO_UPDATE:'0'}});if(r.error)throw fail('EXECUTION_FAILED',r.error.message);process.exitCode=r.status??1;return;
18
+ const record=componentRecord(rest[0]);const r=spawnSync(process.execPath,[record.entry,...rest.slice(1)],{stdio:'inherit',env:{...process.env,TBCLI_UPDATE_CHECK:'0',SYCMCLI_DISABLE_AUTO_UPDATE:'1',SEEDAUDIO_AUTO_UPDATE:'0',SEALSEEK_MEDIA_AUTO_UPDATE:'0',COMPETITOR_CANVAS_AUTO_UPDATE:'0'}});if(r.error)throw fail('EXECUTION_FAILED',r.error.message);process.exitCode=r.status??1;return;
19
19
  }
20
20
  if(command==='tool'&&action==='run'){
21
21
  await prepareComponentRun(MANIFEST.tools[rest[0]]?.component);
22
- const entry=toolEntry(rest[0]);const r=spawnSync(entry.command,[...entry.args,...rest.slice(1)],{stdio:'inherit',env:{...process.env,TBCLI_UPDATE_CHECK:'0',SYCMCLI_DISABLE_AUTO_UPDATE:'1',SEEDAUDIO_AUTO_UPDATE:'0'}});if(r.error)throw fail('CAPABILITY_UNAVAILABLE',r.error.message);process.exitCode=r.status??1;return;
22
+ const entry=toolEntry(rest[0]);const r=spawnSync(entry.command,[...entry.args,...rest.slice(1)],{stdio:'inherit',env:{...process.env,TBCLI_UPDATE_CHECK:'0',SYCMCLI_DISABLE_AUTO_UPDATE:'1',SEEDAUDIO_AUTO_UPDATE:'0',SEALSEEK_MEDIA_AUTO_UPDATE:'0',COMPETITOR_CANVAS_AUTO_UPDATE:'0'}});if(r.error)throw fail('CAPABILITY_UNAVAILABLE',r.error.message);process.exitCode=r.status??1;return;
23
23
  }
24
24
  if(command==='nodes'&&action==='list')return print(MANIFEST.nodes);
25
25
  if(command==='node'&&action==='show')return print(nodeFor(rest[0]));
@@ -15,7 +15,7 @@ export async function inspectComponent(id,root){
15
15
  if(!p.bin?.[c.bin]||!entry.startsWith(path.resolve(root)+path.sep))throw fail('INVALID_COMPONENT_ENTRY',id);
16
16
  const sources={};
17
17
  for(const skill of c.skills){
18
- const r=spawnSync(process.execPath,[entry,'skill','source','--json'],{encoding:'utf8',timeout:30000,env:{...process.env,TBCLI_UPDATE_CHECK:'0',SYCMCLI_DISABLE_AUTO_UPDATE:'1',SEEDAUDIO_AUTO_UPDATE:'0'}});
18
+ const r=spawnSync(process.execPath,[entry,'skill','source','--json'],{encoding:'utf8',timeout:30000,env:{...process.env,TBCLI_UPDATE_CHECK:'0',SYCMCLI_DISABLE_AUTO_UPDATE:'1',SEEDAUDIO_AUTO_UPDATE:'0',SEALSEEK_MEDIA_AUTO_UPDATE:'0',COMPETITOR_CANVAS_AUTO_UPDATE:'0'}});
19
19
  if(r.status!==0)throw fail('COMPONENT_SOURCE_FAILED',r.stderr||id);
20
20
  const envelope=JSON.parse(r.stdout);
21
21
  if(envelope.ok===false)throw fail('COMPONENT_SOURCE_FAILED',id, envelope.error);
package/src/runtime.mjs CHANGED
@@ -65,6 +65,28 @@ export async function doctor(id,mode='excel'){
65
65
  let detail;try{detail=JSON.parse(result.stdout);}catch{detail={code:'COMPONENT_DOCTOR_FAILED'};}
66
66
  checks.push({id:'seedaudio-runtime-and-config',ok:result.status===0,value:detail});
67
67
  }
68
+ if(n.component==='sealseek-media'){
69
+ const record=componentRecord(n.component);
70
+ const result=spawnSync(process.execPath,[record.entry,'version'],{encoding:'utf8',timeout:15000,env:{...process.env,SEALSEEK_MEDIA_AUTO_UPDATE:'0'}});
71
+ const version=result.stdout?.trim().replace(/^sealseek-media\s+/,'');
72
+ checks.push({id:'sealseek-media-node',ok:Number(process.versions.node.split('.')[0])>=22,value:process.version,minimum:22});
73
+ checks.push({id:'sealseek-media-runtime',ok:result.status===0&&version===record.version,value:version});
74
+ checks.push({id:'sealseek-media-contract',ok:fs.existsSync(path.join(source(n),'capabilities.json'))});
75
+ }
76
+ if(n.component==='cloud-hug-style-transfer'){
77
+ const record=componentRecord(n.component);
78
+ const result=spawnSync(process.execPath,[record.entry,'doctor','--json'],{encoding:'utf8',timeout:30000});
79
+ let detail;try{detail=JSON.parse(result.stdout);}catch{detail={ok:false,code:'COMPONENT_DOCTOR_FAILED'};}
80
+ checks.push({id:'cloud-hug-node',ok:Number(process.versions.node.split('.')[0])>=22,value:process.version,minimum:22});
81
+ 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});
82
+ }
83
+ if(n.component==='competitor-visual-canvas'){
84
+ const record=componentRecord(n.component);
85
+ const result=spawnSync(process.execPath,[record.entry,'doctor','--json'],{encoding:'utf8',timeout:30000,env:{...process.env,COMPETITOR_CANVAS_AUTO_UPDATE:'0'}});
86
+ let detail;try{detail=JSON.parse(result.stdout||result.stderr);}catch{detail={ok:false};}
87
+ checks.push({id:'competitor-canvas-node',ok:Number(process.versions.node.split('.')[0])>=22,value:process.version,minimum:22});
88
+ checks.push({id:'competitor-canvas-contract',ok:result.status===0&&detail.ok===true,value:detail});
89
+ }
68
90
  if(n.id==='category-research')checks.push({id:'report-runtime',ok:['assets/report-template.html','assets/chart-views.js'].every(p=>fs.existsSync(path.join(source(n),p)))});
69
91
  if(n.id==='product-research'){
70
92
  const componentRequire=createRequire(path.join(componentRecord(n.component).root,'package.json'));
@@ -73,5 +95,5 @@ export async function doctor(id,mode='excel'){
73
95
  }
74
96
  if(!['excel','nas'].includes(mode))throw fail('USAGE','Doctor mode must be excel or nas');
75
97
  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});}}
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'};
98
+ 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'};
77
99
  }
@@ -13,7 +13,10 @@
13
13
  "seedaudio-tools",
14
14
  "sourcing-tools",
15
15
  "product-sourcing",
16
- "opportunity-sourcing"
16
+ "opportunity-sourcing",
17
+ "sealseek-media-tools",
18
+ "competitor-visual-canvas",
19
+ "cloud-hug-style-transfer"
17
20
  ]
18
21
  },
19
22
  "nodes": [
@@ -43,7 +46,8 @@
43
46
  "compact-commerce-ui",
44
47
  "1688cli",
45
48
  "1688-product-sourcing",
46
- "1688-opportunity-sourcing-research"
49
+ "1688-opportunity-sourcing-research",
50
+ "cloud-hug-style-transfer"
47
51
  ],
48
52
  "python_imports": [],
49
53
  "scripts": [],
@@ -195,6 +199,61 @@
195
199
  "image.observe",
196
200
  "browser.report.inspect"
197
201
  ]
202
+ },
203
+ {
204
+ "id": "sealseek-media-tools",
205
+ "skill": "sealseek-media",
206
+ "component": "sealseek-media",
207
+ "stage": "tools",
208
+ "method_version": "sealseek-media-canvas-contract@1",
209
+ "requires_skills": [],
210
+ "python_imports": [],
211
+ "scripts": [],
212
+ "native_requirements": []
213
+ },
214
+ {
215
+ "id": "competitor-visual-canvas",
216
+ "skill": "competitor-visual-canvas",
217
+ "component": "competitor-visual-canvas",
218
+ "stage": "competitor-visual-research",
219
+ "method_version": "competitor-visual-canvas@1",
220
+ "requires_skills": [
221
+ "tbcli",
222
+ "sealseek-media"
223
+ ],
224
+ "python_imports": [],
225
+ "scripts": [],
226
+ "native_requirements": []
227
+ },
228
+ {
229
+ "id": "cloud-hug-style-transfer",
230
+ "skill": "cloud-hug-style-transfer",
231
+ "component": "cloud-hug-style-transfer",
232
+ "stage": "visual-production",
233
+ "method_version": "cloud-hug-style-transfer@0.1",
234
+ "requires_skills": [],
235
+ "python_imports": [],
236
+ "scripts": [],
237
+ "native_requirements": [
238
+ "media.image.inspect",
239
+ "media.image.edit"
240
+ ],
241
+ "input_contract": {
242
+ "required": [
243
+ "current source images",
244
+ "task intent"
245
+ ],
246
+ "optional": [
247
+ "current product references",
248
+ "confirmed copy and layout constraints"
249
+ ]
250
+ },
251
+ "output_contract": {
252
+ "planning": "requested conversion plan",
253
+ "generation": "agreed number of separate raster images and acceptance summary",
254
+ "state": "child remains owner of generation task records and artifacts"
255
+ },
256
+ "contract_resolution": "Resolve canonical Skill and live capabilities through the component CLI; host preflight remains mandatory."
198
257
  }
199
258
  ],
200
259
  "tools": {
@@ -245,6 +304,21 @@
245
304
  "package": "@petercjl/1688-opportunity-sourcing-research",
246
305
  "component": "1688-opportunity-sourcing-research",
247
306
  "role": "opportunity-portfolio"
307
+ },
308
+ "sealseek-media": {
309
+ "package": "@petercjl/sealseek-media-cli",
310
+ "component": "sealseek-media",
311
+ "role": "explicit media generation, existing-media import and canvas operations; caller owns asset selection and layout"
312
+ },
313
+ "competitor-visual-canvas": {
314
+ "package": "@petercjl/competitor-visual-canvas",
315
+ "component": "competitor-visual-canvas",
316
+ "role": "collect ordered product media links and arrange four regional Frames per product"
317
+ },
318
+ "cloud-hug-style-transfer": {
319
+ "package": "@petercjl/cloud-hug-style-transfer",
320
+ "component": "cloud-hug-style-transfer",
321
+ "role": "brand style conversion application; child owns product/reference selection, photography, prompts and acceptance"
248
322
  }
249
323
  },
250
324
  "targets": {
@@ -337,6 +411,27 @@
337
411
  "skills": [
338
412
  "1688-opportunity-sourcing-research"
339
413
  ]
414
+ },
415
+ "sealseek-media": {
416
+ "package": "@petercjl/sealseek-media-cli",
417
+ "bin": "sealseek-media",
418
+ "skills": [
419
+ "sealseek-media"
420
+ ]
421
+ },
422
+ "competitor-visual-canvas": {
423
+ "package": "@petercjl/competitor-visual-canvas",
424
+ "bin": "competitor-visual-canvas",
425
+ "skills": [
426
+ "competitor-visual-canvas"
427
+ ]
428
+ },
429
+ "cloud-hug-style-transfer": {
430
+ "package": "@petercjl/cloud-hug-style-transfer",
431
+ "bin": "cloud-hug-style-transfer",
432
+ "skills": [
433
+ "cloud-hug-style-transfer"
434
+ ]
340
435
  }
341
436
  }
342
437
  }