@petercjl/taobao-ai-ops 0.2.1 → 0.3.1
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 +13 -0
- package/package.json +1 -1
- package/skills/taobao-ai-operations/SKILL.md +21 -1
- package/skills/taobao-ai-operations/adapters/workbuddy.json +54 -0
- package/skills/taobao-ai-operations/capabilities.json +2 -1
- package/src/cli.mjs +2 -2
- package/src/components.mjs +1 -1
- package/src/runtime.mjs +22 -1
- package/src/skill-manager.mjs +2 -1
- package/suite-manifest.json +143 -3
package/README.md
CHANGED
|
@@ -26,6 +26,7 @@ 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。
|
|
29
30
|
- taobao-ai-operations:套件自带的管理与业务路由 Skill。
|
|
30
31
|
|
|
31
32
|
yccli 为取数时按需准备的外部工具,可用 TAOBAO_AI_OPS_YCCLI 指定;Excel 分析不需要 NAS、VPN 或平台登录。账号与授权留在包外,安装不会获得服务权限。
|
|
@@ -52,6 +53,8 @@ taobao-ai-ops components check --json
|
|
|
52
53
|
taobao-ai-ops skill source --name yuce-category-opportunity-report --json
|
|
53
54
|
taobao-ai-ops script category-research build_report.py --help
|
|
54
55
|
taobao-ai-ops tool run tbcli capabilities --json
|
|
56
|
+
taobao-ai-ops skill source --name sealseek-media --json
|
|
57
|
+
taobao-ai-ops component run sealseek-media capabilities --json
|
|
55
58
|
```
|
|
56
59
|
|
|
57
60
|
维护者分别发布各能力包的正式 latest。新增/移除组件或调整管理机制时才发布套件。源码开发可通过 components register --name ID --path CHECKOUT --yes 注册独立组件;开发记录由 Git 管理,不会被注册表更新覆盖。已安装 npm 组件的显式接入可加 --mode npm。源码套件自身通过 Git 更新。
|
|
@@ -60,8 +63,18 @@ Node >=20。Python 研究依赖通过稳定解释器准备;TAOBAO_AI_OPS_PYTHO
|
|
|
60
63
|
|
|
61
64
|
本地 macOS 确定性安装、更新与恢复测试单独记录;Windows/SealSeek 的真实宿主安装和端到端行为尚待验证。CI 发布前须先有可安装的类目独立包;所有发布通过 GitHub Actions OIDC。
|
|
62
65
|
|
|
66
|
+
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
|
+
|
|
63
68
|
## Audio production
|
|
64
69
|
|
|
65
70
|
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
71
|
|
|
67
72
|
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.
|
|
73
|
+
|
|
74
|
+
## 1688 components
|
|
75
|
+
|
|
76
|
+
- `1688cli`: atomic read-only product/supplier query and explicit filtering.
|
|
77
|
+
- `1688-product-sourcing`: keyword/reference-image sourcing application.
|
|
78
|
+
- `1688-opportunity-sourcing-research`: six-category portfolio application from compatible opportunity handoffs.
|
|
79
|
+
|
|
80
|
+
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
|
@@ -5,7 +5,7 @@ description: Route Taobao research to independent tools, preserve evidence hando
|
|
|
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 currently implements category research and product research, with independently registered media/canvas capability tools. Supply-chain validation, content creation and operating reviews are planned extensions reported as unavailable until registered.
|
|
9
9
|
|
|
10
10
|
## Main line
|
|
11
11
|
|
|
@@ -26,6 +26,12 @@ Tasks organize SOP work, dependencies, responsibility and acceptance; Wiki prese
|
|
|
26
26
|
|
|
27
27
|
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
28
|
|
|
29
|
+
## SealSeek media and canvas capability
|
|
30
|
+
|
|
31
|
+
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.
|
|
32
|
+
|
|
33
|
+
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`.
|
|
34
|
+
|
|
29
35
|
## Execution and branches
|
|
30
36
|
|
|
31
37
|
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,8 +50,22 @@ Missing native image observation stops product visual analysis; an unverified su
|
|
|
44
50
|
|
|
45
51
|
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
52
|
|
|
53
|
+
## Competitor visual collection
|
|
54
|
+
|
|
55
|
+
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
|
+
|
|
47
57
|
## Audio production
|
|
48
58
|
|
|
49
59
|
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
60
|
|
|
51
61
|
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.
|
|
62
|
+
|
|
63
|
+
## 1688 货源与选品应用
|
|
64
|
+
|
|
65
|
+
按用户目标选择独立组件。单次关键词/图片/链接查询和明确筛选用 `1688cli`;从关键词或参考图形成商品库、视觉分类和报告用 `1688-product-sourcing`;从兼容 `product-opportunities.json` 形成六类策略组合用 `1688-opportunity-sourcing-research`。两项应用均通过原子能力获取平台事实,功能包只负责注册、依赖与安装更新。
|
|
66
|
+
|
|
67
|
+
执行前运行 `taobao-ai-ops skill source --name <精确Skill名称> --json`,完整读取返回路径的当前 SKILL.md,按其要求解析依赖和相对资源,执行它的主线后回到本路由的交付节点。缺少组件用 `components install --agent <agent> --yes`;契约不兼容保留错误并停止该分支。
|
|
68
|
+
|
|
69
|
+
输入输出:关键词/图找货应用接收用户需求和约束,交付 HTML、完整商品 JSON 和查询视觉证据;六类应用接收兼容机会交接文件,交付类别组合报告及 sourcing-candidates.json。只有输入契约实际兼容时才串联上游研究结果,不把其他 JSON 当作机会交接文件。
|
|
70
|
+
|
|
71
|
+
调用应用用 `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/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]));
|
package/src/components.mjs
CHANGED
|
@@ -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
|
@@ -53,12 +53,33 @@ 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'}});
|
|
59
65
|
let detail;try{detail=JSON.parse(result.stdout);}catch{detail={code:'COMPONENT_DOCTOR_FAILED'};}
|
|
60
66
|
checks.push({id:'seedaudio-runtime-and-config',ok:result.status===0,value:detail});
|
|
61
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==='competitor-visual-canvas'){
|
|
77
|
+
const record=componentRecord(n.component);
|
|
78
|
+
const result=spawnSync(process.execPath,[record.entry,'doctor','--json'],{encoding:'utf8',timeout:30000,env:{...process.env,COMPETITOR_CANVAS_AUTO_UPDATE:'0'}});
|
|
79
|
+
let detail;try{detail=JSON.parse(result.stdout||result.stderr);}catch{detail={ok:false};}
|
|
80
|
+
checks.push({id:'competitor-canvas-node',ok:Number(process.versions.node.split('.')[0])>=22,value:process.version,minimum:22});
|
|
81
|
+
checks.push({id:'competitor-canvas-contract',ok:result.status===0&&detail.ok===true,value:detail});
|
|
82
|
+
}
|
|
62
83
|
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)))});
|
|
63
84
|
if(n.id==='product-research'){
|
|
64
85
|
const componentRequire=createRequire(path.join(componentRecord(n.component).root,'package.json'));
|
|
@@ -67,5 +88,5 @@ export async function doctor(id,mode='excel'){
|
|
|
67
88
|
}
|
|
68
89
|
if(!['excel','nas'].includes(mode))throw fail('USAGE','Doctor mode must be excel or nas');
|
|
69
90
|
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
|
|
91
|
+
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'].includes(n.component)||['1688cli','1688-product-sourcing','1688-opportunity-sourcing-research'].includes(n.component)?'not-probed':'not-required'};
|
|
71
92
|
}
|
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,12 @@
|
|
|
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",
|
|
17
|
+
"sealseek-media-tools",
|
|
18
|
+
"competitor-visual-canvas"
|
|
14
19
|
]
|
|
15
20
|
},
|
|
16
21
|
"nodes": [
|
|
@@ -37,7 +42,10 @@
|
|
|
37
42
|
"requires_skills": [
|
|
38
43
|
"yuce-category-opportunity-report",
|
|
39
44
|
"taobao-search-product-form",
|
|
40
|
-
"compact-commerce-ui"
|
|
45
|
+
"compact-commerce-ui",
|
|
46
|
+
"1688cli",
|
|
47
|
+
"1688-product-sourcing",
|
|
48
|
+
"1688-opportunity-sourcing-research"
|
|
41
49
|
],
|
|
42
50
|
"python_imports": [],
|
|
43
51
|
"scripts": [],
|
|
@@ -145,6 +153,75 @@
|
|
|
145
153
|
"python_imports": [],
|
|
146
154
|
"scripts": [],
|
|
147
155
|
"native_requirements": []
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"id": "sourcing-tools",
|
|
159
|
+
"skill": "1688cli",
|
|
160
|
+
"component": "1688cli",
|
|
161
|
+
"stage": "sourcing-capability",
|
|
162
|
+
"method_version": "1688-contract@1",
|
|
163
|
+
"requires_skills": [],
|
|
164
|
+
"python_imports": [],
|
|
165
|
+
"scripts": [],
|
|
166
|
+
"native_requirements": []
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"id": "product-sourcing",
|
|
170
|
+
"skill": "1688-product-sourcing",
|
|
171
|
+
"component": "1688-product-sourcing",
|
|
172
|
+
"stage": "product-sourcing",
|
|
173
|
+
"method_version": "1688-product-sourcing@1",
|
|
174
|
+
"requires_skills": [
|
|
175
|
+
"1688cli",
|
|
176
|
+
"compact-commerce-ui"
|
|
177
|
+
],
|
|
178
|
+
"python_imports": [],
|
|
179
|
+
"scripts": [],
|
|
180
|
+
"native_requirements": [
|
|
181
|
+
"image.observe",
|
|
182
|
+
"browser.report.inspect"
|
|
183
|
+
]
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"id": "opportunity-sourcing",
|
|
187
|
+
"skill": "1688-opportunity-sourcing-research",
|
|
188
|
+
"component": "1688-opportunity-sourcing-research",
|
|
189
|
+
"stage": "opportunity-portfolio",
|
|
190
|
+
"method_version": "1688-opportunity-sourcing-research@1",
|
|
191
|
+
"requires_skills": [
|
|
192
|
+
"1688cli"
|
|
193
|
+
],
|
|
194
|
+
"python_imports": [],
|
|
195
|
+
"scripts": [],
|
|
196
|
+
"native_requirements": [
|
|
197
|
+
"image.observe",
|
|
198
|
+
"browser.report.inspect"
|
|
199
|
+
]
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"id": "sealseek-media-tools",
|
|
203
|
+
"skill": "sealseek-media",
|
|
204
|
+
"component": "sealseek-media",
|
|
205
|
+
"stage": "tools",
|
|
206
|
+
"method_version": "sealseek-media-canvas-contract@1",
|
|
207
|
+
"requires_skills": [],
|
|
208
|
+
"python_imports": [],
|
|
209
|
+
"scripts": [],
|
|
210
|
+
"native_requirements": []
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"id": "competitor-visual-canvas",
|
|
214
|
+
"skill": "competitor-visual-canvas",
|
|
215
|
+
"component": "competitor-visual-canvas",
|
|
216
|
+
"stage": "competitor-visual-research",
|
|
217
|
+
"method_version": "competitor-visual-canvas@1",
|
|
218
|
+
"requires_skills": [
|
|
219
|
+
"tbcli",
|
|
220
|
+
"sealseek-media"
|
|
221
|
+
],
|
|
222
|
+
"python_imports": [],
|
|
223
|
+
"scripts": [],
|
|
224
|
+
"native_requirements": []
|
|
148
225
|
}
|
|
149
226
|
],
|
|
150
227
|
"tools": {
|
|
@@ -180,12 +257,40 @@
|
|
|
180
257
|
"package": "@petercjl/seedaudiocli",
|
|
181
258
|
"component": "seedaudiocli",
|
|
182
259
|
"role": "audio generation, reference voices, image-conditioned audio and task recovery"
|
|
260
|
+
},
|
|
261
|
+
"1688cli": {
|
|
262
|
+
"package": "@petercjl/1688cli",
|
|
263
|
+
"component": "1688cli",
|
|
264
|
+
"role": "sourcing-capability"
|
|
265
|
+
},
|
|
266
|
+
"1688-product-sourcing": {
|
|
267
|
+
"package": "@petercjl/1688-product-sourcing",
|
|
268
|
+
"component": "1688-product-sourcing",
|
|
269
|
+
"role": "product-sourcing"
|
|
270
|
+
},
|
|
271
|
+
"1688-opportunity-sourcing-research": {
|
|
272
|
+
"package": "@petercjl/1688-opportunity-sourcing-research",
|
|
273
|
+
"component": "1688-opportunity-sourcing-research",
|
|
274
|
+
"role": "opportunity-portfolio"
|
|
275
|
+
},
|
|
276
|
+
"sealseek-media": {
|
|
277
|
+
"package": "@petercjl/sealseek-media-cli",
|
|
278
|
+
"component": "sealseek-media",
|
|
279
|
+
"role": "explicit media generation, existing-media import and canvas operations; caller owns asset selection and layout"
|
|
280
|
+
},
|
|
281
|
+
"competitor-visual-canvas": {
|
|
282
|
+
"package": "@petercjl/competitor-visual-canvas",
|
|
283
|
+
"component": "competitor-visual-canvas",
|
|
284
|
+
"role": "collect ordered product media links and arrange four regional Frames per product"
|
|
183
285
|
}
|
|
184
286
|
},
|
|
185
287
|
"targets": {
|
|
186
288
|
"codex:macos": "implemented",
|
|
187
289
|
"sealseek:macos": "implemented",
|
|
188
|
-
"sealseek:windows": "implemented"
|
|
290
|
+
"sealseek:windows": "implemented",
|
|
291
|
+
"codex:windows": "implemented",
|
|
292
|
+
"workbuddy:macos": "implemented",
|
|
293
|
+
"workbuddy:windows": "implemented"
|
|
189
294
|
},
|
|
190
295
|
"update_policy": {
|
|
191
296
|
"owner": "shell",
|
|
@@ -248,6 +353,41 @@
|
|
|
248
353
|
"seedaudiocli"
|
|
249
354
|
],
|
|
250
355
|
"automatic_update": true
|
|
356
|
+
},
|
|
357
|
+
"1688cli": {
|
|
358
|
+
"package": "@petercjl/1688cli",
|
|
359
|
+
"bin": "1688cli",
|
|
360
|
+
"skills": [
|
|
361
|
+
"1688cli"
|
|
362
|
+
]
|
|
363
|
+
},
|
|
364
|
+
"1688-product-sourcing": {
|
|
365
|
+
"package": "@petercjl/1688-product-sourcing",
|
|
366
|
+
"bin": "1688-product-sourcing",
|
|
367
|
+
"skills": [
|
|
368
|
+
"1688-product-sourcing"
|
|
369
|
+
]
|
|
370
|
+
},
|
|
371
|
+
"1688-opportunity-sourcing-research": {
|
|
372
|
+
"package": "@petercjl/1688-opportunity-sourcing-research",
|
|
373
|
+
"bin": "1688-opportunity-sourcing-research",
|
|
374
|
+
"skills": [
|
|
375
|
+
"1688-opportunity-sourcing-research"
|
|
376
|
+
]
|
|
377
|
+
},
|
|
378
|
+
"sealseek-media": {
|
|
379
|
+
"package": "@petercjl/sealseek-media-cli",
|
|
380
|
+
"bin": "sealseek-media",
|
|
381
|
+
"skills": [
|
|
382
|
+
"sealseek-media"
|
|
383
|
+
]
|
|
384
|
+
},
|
|
385
|
+
"competitor-visual-canvas": {
|
|
386
|
+
"package": "@petercjl/competitor-visual-canvas",
|
|
387
|
+
"bin": "competitor-visual-canvas",
|
|
388
|
+
"skills": [
|
|
389
|
+
"competitor-visual-canvas"
|
|
390
|
+
]
|
|
251
391
|
}
|
|
252
392
|
}
|
|
253
393
|
}
|