@petercjl/taobao-ai-ops 0.1.0 → 0.1.2

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.
Files changed (77) hide show
  1. package/README.md +30 -22
  2. package/package.json +2 -7
  3. package/requirements.txt +1 -0
  4. package/skills/taobao-ai-operations/SKILL.md +8 -1
  5. package/src/cli.mjs +16 -6
  6. package/src/components.mjs +73 -0
  7. package/src/core.mjs +5 -1
  8. package/src/runtime.mjs +18 -16
  9. package/src/skill-manager.mjs +4 -4
  10. package/src/update.mjs +5 -5
  11. package/src/workflow.mjs +3 -3
  12. package/suite-manifest.json +186 -10
  13. package/skills/taobao-search-product-form/SKILL.md +0 -74
  14. package/skills/taobao-search-product-form/adapters/codex.json +0 -139
  15. package/skills/taobao-search-product-form/adapters/sealseek.json +0 -24
  16. package/skills/taobao-search-product-form/agents/openai.yaml +0 -3
  17. package/skills/taobao-search-product-form/capabilities.json +0 -148
  18. package/skills/taobao-search-product-form/references/SCHEMA.md +0 -3
  19. package/skills/taobao-search-product-form/references/index.md +0 -10
  20. package/skills/taobao-search-product-form/references/log.md +0 -35
  21. package/skills/taobao-search-product-form/references/queries/evaluate-white-label-forms.md +0 -3
  22. package/skills/taobao-search-product-form/references/queries/identify-advertisers.md +0 -5
  23. package/skills/taobao-search-product-form/references/queries/identify-geography.md +0 -5
  24. package/skills/taobao-search-product-form/references/queries/identify-price-bands.md +0 -3
  25. package/skills/taobao-search-product-form/references/queries/identify-product-forms.md +0 -3
  26. package/skills/taobao-search-product-form/references/queries/identify-title-roots.md +0 -5
  27. package/skills/taobao-search-product-form/references/report-output.md +0 -23
  28. package/skills/taobao-search-product-form/references/source-manifest.md +0 -37
  29. package/skills/taobao-search-product-form/references/title-lexicon.json +0 -55
  30. package/skills/taobao-search-product-form/references/topics/advertiser-analysis-method.md +0 -43
  31. package/skills/taobao-search-product-form/references/topics/geography-analysis-method.md +0 -23
  32. package/skills/taobao-search-product-form/references/topics/price-band-analysis-method.md +0 -27
  33. package/skills/taobao-search-product-form/references/topics/title-root-analysis-method.md +0 -37
  34. package/skills/taobao-search-product-form/references/topics/visual-form-method.md +0 -31
  35. package/skills/taobao-search-product-form/references/topics/white-label-evidence.md +0 -38
  36. package/skills/taobao-search-product-form/references/workflow-ledger.md +0 -28
  37. package/skills/taobao-search-product-form/report_runtime/VERSION +0 -1
  38. package/skills/taobao-search-product-form/report_runtime/renderer.py +0 -485
  39. package/skills/taobao-search-product-form/report_runtime/templates/workbench.html +0 -67
  40. package/skills/taobao-search-product-form/report_runtime/validator.py +0 -117
  41. package/skills/taobao-search-product-form/scripts/analyze.py +0 -119
  42. package/skills/taobao-search-product-form/scripts/analyze_advertisers.py +0 -352
  43. package/skills/taobao-search-product-form/scripts/analyze_geography.py +0 -316
  44. package/skills/taobao-search-product-form/scripts/analyze_price_bands.py +0 -257
  45. package/skills/taobao-search-product-form/scripts/analyze_title_roots.py +0 -327
  46. package/skills/taobao-search-product-form/scripts/assemble_opportunity_evidence.py +0 -322
  47. package/skills/taobao-search-product-form/scripts/build_report_viewmodel.py +0 -822
  48. package/skills/taobao-search-product-form/scripts/build_visual_review_viewmodel.py +0 -177
  49. package/skills/taobao-search-product-form/scripts/clean_search_export.mjs +0 -61
  50. package/skills/taobao-search-product-form/scripts/cluster_visual_forms.py +0 -193
  51. package/skills/taobao-search-product-form/scripts/compile_style_prototypes.py +0 -115
  52. package/skills/taobao-search-product-form/scripts/compile_visual_review.py +0 -60
  53. package/skills/taobao-search-product-form/scripts/compile_visual_selection.py +0 -148
  54. package/skills/taobao-search-product-form/scripts/prepare.py +0 -180
  55. package/skills/taobao-search-product-form/scripts/render_report.py +0 -31
  56. package/skills/taobao-search-product-form/scripts/validate_opportunity_cards.py +0 -84
  57. package/skills/taobao-search-product-form/scripts/validate_report_viewmodel.py +0 -152
  58. package/skills/taobao-search-product-form/scripts/visual_form_pipeline.py +0 -247
  59. package/skills/taobao-search-product-form/scripts/visual_observation_batches.py +0 -117
  60. package/skills/taobao-search-product-form/scripts/workflow_ledger.py +0 -177
  61. package/skills/yuce-category-opportunity-report/SKILL.md +0 -151
  62. package/skills/yuce-category-opportunity-report/adapters/codex.json +0 -113
  63. package/skills/yuce-category-opportunity-report/adapters/sealseek.json +0 -39
  64. package/skills/yuce-category-opportunity-report/agents/openai.yaml +0 -3
  65. package/skills/yuce-category-opportunity-report/assets/chart-views.js +0 -80
  66. package/skills/yuce-category-opportunity-report/assets/package.json +0 -1
  67. package/skills/yuce-category-opportunity-report/assets/report-template.html +0 -62
  68. package/skills/yuce-category-opportunity-report/capabilities.json +0 -48
  69. package/skills/yuce-category-opportunity-report/references/SCHEMA.md +0 -5
  70. package/skills/yuce-category-opportunity-report/references/data-contract.md +0 -40
  71. package/skills/yuce-category-opportunity-report/references/index.md +0 -6
  72. package/skills/yuce-category-opportunity-report/references/log.md +0 -29
  73. package/skills/yuce-category-opportunity-report/references/queries/assess-category-opportunity.md +0 -7
  74. package/skills/yuce-category-opportunity-report/references/source-manifest.md +0 -14
  75. package/skills/yuce-category-opportunity-report/references/topics/category-opportunity-method.md +0 -39
  76. package/skills/yuce-category-opportunity-report/scripts/build_report.py +0 -779
  77. package/skills/yuce-category-opportunity-report/scripts/market_routes.py +0 -139
@@ -1,17 +1,193 @@
1
1
  {
2
- "schema_version": 1,
2
+ "schema_version": 2,
3
3
  "package": "@petercjl/taobao-ai-ops",
4
- "profiles": {"research": ["operations", "category-research", "product-research"]},
4
+ "profiles": {
5
+ "research": [
6
+ "operations",
7
+ "category-research",
8
+ "product-research",
9
+ "tbcli-tools",
10
+ "sycmcli-tools",
11
+ "html-report"
12
+ ]
13
+ },
5
14
  "nodes": [
6
- {"id": "operations", "skill": "taobao-ai-operations", "stage": "routing", "method_version": "1.0", "requires_skills": ["yuce-category-opportunity-report", "taobao-search-product-form"], "python_imports": [], "scripts": [], "native_requirements": []},
7
- {"id": "category-research", "skill": "yuce-category-opportunity-report", "stage": "discover-market", "method_version": "yuce-category-opportunity@2.0", "requires_skills": [], "python_imports": ["openpyxl"], "scripts": ["build_report.py"], "native_requirements": [], "optional_tools": ["tbcli", "yccli"], "origin": {"kind": "accepted-local-skill", "skill_md_sha256": "e93ea7817d44eada35f9934007f5d4d04736553fb28afb01339fdcdacf8275ef"}},
8
- {"id": "product-research", "skill": "taobao-search-product-form", "stage": "research-product", "method_version": "taobao-search-product-form@0.1.1", "requires_skills": [], "python_imports": ["pandas", "numpy", "openpyxl", "PIL", "jieba"], "native_requirements": ["image.observe"], "origin": {"package": "@petercjl/taobao-search-product-form", "version": "0.1.1", "repository": "https://github.com/petercjl/taobao-search-product-form", "commit": "49a574d572895ea4f0047d54766633de754b07d4", "npm_integrity": "sha512-RSoCkbdp3Ggh+VwJl9ejR+IpGHaWeIkExWq4/WcqBS6xzcxYbfuPzX6Fx15PXgh/K2QffjLjgll4mQMiJK3yig=="}, "scripts": ["clean_search_export.mjs", "prepare.py", "analyze.py", "analyze_advertisers.py", "analyze_geography.py", "analyze_price_bands.py", "analyze_title_roots.py", "assemble_opportunity_evidence.py", "build_report_viewmodel.py", "build_visual_review_viewmodel.py", "cluster_visual_forms.py", "compile_style_prototypes.py", "compile_visual_review.py", "compile_visual_selection.py", "render_report.py", "validate_opportunity_cards.py", "validate_report_viewmodel.py", "visual_form_pipeline.py", "visual_observation_batches.py", "workflow_ledger.py"]}
15
+ {
16
+ "id": "html-report",
17
+ "skill": "compact-commerce-ui",
18
+ "component": "html-report",
19
+ "stage": "shared-reporting",
20
+ "method_version": "commerce-ui-template-pack@1",
21
+ "requires_skills": [],
22
+ "python_imports": ["jsonschema"],
23
+ "scripts": [],
24
+ "native_requirements": ["browser.report.inspect"]
25
+ },
26
+ {
27
+ "id": "operations",
28
+ "skill": "taobao-ai-operations",
29
+ "stage": "routing",
30
+ "method_version": "1.0",
31
+ "requires_skills": [
32
+ "yuce-category-opportunity-report",
33
+ "taobao-search-product-form",
34
+ "compact-commerce-ui"
35
+ ],
36
+ "python_imports": [],
37
+ "scripts": [],
38
+ "native_requirements": []
39
+ },
40
+ {
41
+ "id": "category-research",
42
+ "skill": "yuce-category-opportunity-report",
43
+ "stage": "discover-market",
44
+ "method_version": "yuce-category-opportunity@2.0",
45
+ "requires_skills": [],
46
+ "python_imports": [
47
+ "openpyxl"
48
+ ],
49
+ "scripts": [
50
+ "build_report.py"
51
+ ],
52
+ "native_requirements": [],
53
+ "optional_tools": [
54
+ "tbcli",
55
+ "yccli"
56
+ ],
57
+ "component": "category-research"
58
+ },
59
+ {
60
+ "id": "product-research",
61
+ "skill": "taobao-search-product-form",
62
+ "stage": "research-product",
63
+ "method_version": "taobao-search-product-form@0.1.1",
64
+ "requires_skills": [],
65
+ "python_imports": [
66
+ "pandas",
67
+ "numpy",
68
+ "openpyxl",
69
+ "PIL",
70
+ "jieba"
71
+ ],
72
+ "native_requirements": [
73
+ "image.observe"
74
+ ],
75
+ "scripts": [
76
+ "clean_search_export.mjs",
77
+ "prepare.py",
78
+ "analyze.py",
79
+ "analyze_advertisers.py",
80
+ "analyze_geography.py",
81
+ "analyze_price_bands.py",
82
+ "analyze_title_roots.py",
83
+ "assemble_opportunity_evidence.py",
84
+ "build_report_viewmodel.py",
85
+ "build_visual_review_viewmodel.py",
86
+ "cluster_visual_forms.py",
87
+ "compile_style_prototypes.py",
88
+ "compile_visual_review.py",
89
+ "compile_visual_selection.py",
90
+ "render_report.py",
91
+ "validate_opportunity_cards.py",
92
+ "validate_report_viewmodel.py",
93
+ "visual_form_pipeline.py",
94
+ "visual_observation_batches.py",
95
+ "workflow_ledger.py"
96
+ ],
97
+ "component": "product-research"
98
+ },
99
+ {
100
+ "id": "tbcli-tools",
101
+ "skill": "tbcli",
102
+ "component": "tbcli",
103
+ "stage": "tools",
104
+ "requires_skills": [],
105
+ "python_imports": [],
106
+ "scripts": [],
107
+ "native_requirements": []
108
+ },
109
+ {
110
+ "id": "sycmcli-tools",
111
+ "skill": "sycmcli",
112
+ "component": "sycmcli",
113
+ "stage": "tools",
114
+ "requires_skills": [],
115
+ "python_imports": [],
116
+ "scripts": [],
117
+ "native_requirements": []
118
+ }
9
119
  ],
10
120
  "tools": {
11
- "tbcli": {"package": "@petercjl/tbcli", "version": "0.10.4", "entry": "scripts/tbcli.mjs", "role": "existing monthly exports, warehouse and additive category import"},
12
- "sycmcli": {"package": "@petercjl/sycmcli", "version": "0.3.1", "entry": "scripts/sycmcli.mjs", "role": "store-bound market, category, keyword and competitor read operations"},
13
- "yccli": {"external": true, "minimum_version": "0.5.0", "executable_env": "TAOBAO_AI_OPS_YCCLI", "role": "authorized Yuce monthly collection; optional for supplied Excel"}
121
+ "commerce-ui": {
122
+ "package": "@petercjl/commerce-ui",
123
+ "component": "html-report",
124
+ "role": "versioned HTML templates, rendering and validation"
125
+ },
126
+ "tbcli": {
127
+ "package": "@petercjl/tbcli",
128
+ "entry": "scripts/tbcli.mjs",
129
+ "role": "existing monthly exports, warehouse and additive category import",
130
+ "component": "tbcli"
131
+ },
132
+ "sycmcli": {
133
+ "package": "@petercjl/sycmcli",
134
+ "entry": "scripts/sycmcli.mjs",
135
+ "role": "store-bound market, category, keyword and competitor read operations",
136
+ "component": "sycmcli"
137
+ },
138
+ "yccli": {
139
+ "external": true,
140
+ "minimum_version": "0.5.0",
141
+ "executable_env": "TAOBAO_AI_OPS_YCCLI",
142
+ "role": "authorized Yuce monthly collection; optional for supplied Excel"
143
+ }
144
+ },
145
+ "targets": {
146
+ "codex:macos": "implemented",
147
+ "sealseek:macos": "implemented",
148
+ "sealseek:windows": "implemented"
149
+ },
150
+ "update_policy": {
151
+ "owner": "shell",
152
+ "channel": "latest",
153
+ "during_run": "installed-component-set",
154
+ "automatic_install": false,
155
+ "offline": "keep-current",
156
+ "source_checkout": "git-managed"
14
157
  },
15
- "targets": {"codex:macos": "implemented", "sealseek:macos": "implemented", "sealseek:windows": "implemented"},
16
- "update_policy": {"owner": "suite", "during_run": "fixed-version-set", "automatic_install": false, "offline": "keep-current", "source_checkout": "git-managed"}
158
+ "components": {
159
+ "html-report": {
160
+ "package": "@petercjl/commerce-ui",
161
+ "bin": "commerce-ui",
162
+ "skills": ["compact-commerce-ui"]
163
+ },
164
+ "category-research": {
165
+ "package": "@petercjl/yuce-category-opportunity-report",
166
+ "bin": "yuce-category-research",
167
+ "skills": [
168
+ "yuce-category-opportunity-report"
169
+ ]
170
+ },
171
+ "product-research": {
172
+ "package": "@petercjl/taobao-search-product-form",
173
+ "bin": "taobao-search-form",
174
+ "skills": [
175
+ "taobao-search-product-form"
176
+ ]
177
+ },
178
+ "tbcli": {
179
+ "package": "@petercjl/tbcli",
180
+ "bin": "tbcli",
181
+ "skills": [
182
+ "tbcli"
183
+ ]
184
+ },
185
+ "sycmcli": {
186
+ "package": "@petercjl/sycmcli",
187
+ "bin": "sycmcli",
188
+ "skills": [
189
+ "sycmcli"
190
+ ]
191
+ }
192
+ }
17
193
  }
@@ -1,74 +0,0 @@
1
- ---
2
- name: taobao-search-product-form
3
- description: Research white-label product opportunities from a Taobao search-result workbook. Supports a stepwise development mode with an auditable stage ledger and an end-to-end run mode; classification and decision strategies are selected per run.
4
- ---
5
-
6
- # Taobao search product opportunity research
7
-
8
- ## Purpose and boundaries
9
-
10
- Input: a search-result workbook and the intended research object. Output: traceable intermediate evidence and a comprehensive HTML report answering what product forms merit further white-label research and why. This Skill does not infer market growth, advertising spend, profit, or actual buyer demographics from a single search snapshot.
11
-
12
- The business flow is stable and complete; the methods used to classify products and judge opportunities are replaceable strategies. The stage list below defines **what must be handed forward**, not a fixed taxonomy, score, price-band scheme, or product recommendation. A strategy may originate from a user-confirmed method, a relevant Wiki source, or a tested proposal; record its source and version in the run ledger. Image-grounded form analysis is a required part of the current flow; its classification strategy can evolve.
13
-
14
- This is a shareable Skill. The currently tested host is Codex on macOS. Read `capabilities.json` and the matching adapter when resolving execution capabilities. Do not claim other hosts tested without evidence. The workbook and public listing images are read-only inputs; no marketplace login, purchase, project update, publication, or paid action is implied.
15
-
16
- The canonical source is bundled in the Taobao AI operations suite. Use `taobao-ai-ops doctor --node product-research --json` to check deterministic resources and `taobao-ai-ops skill source --name taobao-search-product-form --json` to locate it. Scripts run through `taobao-ai-ops script product-research NAME ...`, resolving the suite's dependencies even from a managed Skill copy.
17
-
18
- Run the suite doctor before analysis and record its fixed version. Package and managed Skill updates use `taobao-ai-ops update check|install` at run boundaries; development checkouts update through Git. A required doctor failure stops the affected stage with the exact missing capability. SealSeek on Windows uses its discovered or configured Skill target and a working Python interpreter. The HTML renderer, validator and template are bundled and checked by doctor.
19
-
20
- ## Mode selection
21
-
22
- - **Development mode (`development`)**: use when designing or changing this Skill with the user. Work on one stage or module at a time while building the complete flow. Preserve its real intermediate files. After producing a stage result, check it, record its artifacts and review state in `ledger.json`, and stop for the relevant design or result review before treating it as approved. Resume from approved artifacts instead of repeating earlier work. User confirmation is needed before marking a stage `approved`; an Agent's mechanical check alone is `awaiting_review`.
23
- - **Run mode (`run`)**: use for an ordinary end-to-end request when the strategies and required capabilities are defined. Execute input, clean, all five current analysis modules, compare, decide, and report; perform each stage's automated QA, record results, and continue without routine user prompts. Stop only for a material missing choice, unavailable required capability, permission boundary, or failed quality gate that cannot be resolved safely. `verified` records automated QA; it is distinct from development-mode user approval.
24
-
25
- Choose the mode from the request. An explicit request to co-design, tune, inspect, or approve one step uses development mode. A request to apply an established Skill to new data uses run mode. Do not silently treat unfinished design as a run-ready strategy.
26
-
27
- ## Shared business flow
28
-
29
- The complete run follows all six stages in order. Development mode can inspect and approve one stage at a time; stage-level review is a design activity, not a shortened production run.
30
-
31
- 1. **Input.** Identify source workbook(s), search intent, target-product boundary, and available fields. Hand off the source identity and field inventory.
32
- 2. **Clean.** Split the source into separate natural-position and advertising-position tables. For natural-position rows, scan in source worksheet order and keep only the first row for each `商品ID`; later natural-position rows with that ID are excluded from the cleaned table. Retain all advertising-position rows as display records, including repeated IDs and IDs also present in natural positions. Keep the original source workbook unchanged, preserve its columns and surviving row order, and record source, retained and excluded row counts. Run `taobao-ai-ops script product-research clean_search_export.mjs SOURCE.xlsx OUTPUT.xlsx` to produce the two-sheet local workbook. Treat blank IDs or unknown placement labels as input errors. Hand off this workbook and the quality counts; downstream modules use the relevant sheet and population.
33
- 3. **Classify and analyze.** Run all five current analysis modules: advertising placement, title terms, merchant geography, price bands, and image-grounded product form/style/audience. Each module consumes the cleaned data and records its own labels, statistics, evidence and limitations. Version each classification strategy separately from the stage. Additional modules may enrich the analysis without replacing these five.
34
- 4. **Compare.** Join outputs of all five modules at the natural product-ID grain, verify source identity and population coverage, and preserve module-specific grains such as ad appearances. Produce a reusable evidence dataset; state uncertain or incomparable observations.
35
- 5. **Decide.** Use the whole-product style prototypes as opportunity-card subjects. Structural form, product design style and image-supported use task explain and compare those merchandise propositions at the level the sample can sustain. For each selected prototype, produce an opportunity card with supporting evidence, counterevidence, key unknowns, representative products and shops, and the next discriminating checks. Research order may be proposed with reasons; the user makes the entry decision. Research priority is not authorization to source or stock goods.
36
- 6. **Report.** Assemble a comprehensive, conclusion-first HTML report from every completed module's reviewed interpretation **and** its traceable evidence artifact, then the cross-module comparison and opportunity cards. Each module keeps a substantive chapter with numbered, scannable *complete judgments*: a source conclusion, its supporting figures, interpretation and caveat stay together as one point. Use semantic emphasis while preserving its evidence. The visual chapter contains the full product-image gallery, grouped into whole-product style-prototype child menus; a listing may appear in several menus when its image contains multiple real styles. Keep structural form, variant/configuration, style and task visible on each card, 50 items per page and full-group sorting by price, displayed payment or an explicitly defined research-priority score. Preserve each source product link so the card offers separate copy-ID and copy-link controls and opens the product from its image or title in a new tab. Load `references/report-output.md` only at this node for the chapter, evidence and QA contract. Create and validate the ViewModel, then run `taobao-ai-ops script product-research render_report.py --input VIEWMODEL.json --output REPORT.html`; this uses the bundled renderer, validator and template. In development mode, `compact-commerce-ui` may be used to design or revise a template, but the approved template and renderer must be incorporated into this package and tested before release. Ordinary runs depend only on the installed package and declared Python runtime. In development mode deliver a new report version as `awaiting_review`; in run mode finish after automated QA without routine user interaction.
37
-
38
- The five analysis modules and the final HTML report are required deliverables of a run. Development-mode reviews may stop at the current stage and retain its intermediate result for the next design step.
39
-
40
- ## Run ledger
41
-
42
- Keep execution state outside the Skill in the chosen run directory. Use `scripts/workflow_ledger.py init --run-dir RUN_DIR --mode development|run --input WORKBOOK` once. `ledger.json` tracks each stage's `design_state`, `status`, strategy reference, evidence/artifact paths, review note and event history. Use `record` after each material transition and `show` when resuming. The CLI refuses to initialize over an existing ledger, verifies declared artifact paths, and backs up the previous ledger before updating it. See `references/workflow-ledger.md` for the minimal command contract and state meanings.
43
-
44
- In development mode, an executed stage normally ends at `awaiting_review`. Record `approved` only after the user's confirmation, with the reviewer and evidence. Record completed parent stages (`classify`) and downstream stages (`compare`, `decide`) as soon as their artifacts exist; a report's approval does not silently approve separate stage results. A changed visual-classification strategy or input invalidates the compare, decide and report artifacts: mark those stages `not_started` with the reason, regenerate their evidence and interpretations, and record their new source hashes before advancing. Previously approved unaffected modules from the same cleaned workbook may be reused after their source hashes and populations reconcile. In run mode, `verified` means the applicable automatic checks passed; update the ledger after every material transition, including completed long-running visual batches. Never infer success from a file name alone: inspect the file and record what was checked.
45
-
46
- The ledger is a pointer to intermediate results, not their replacement. Preserve source identity, exact output paths and enough stage context to resume another day. Do not put private run paths or user data into this distributable Skill.
47
-
48
- ## Current method routes and execution resources
49
-
50
- Load knowledge only when the current knowledge-dependent node needs it; later-node pages remain deferred. At the first visual-form judgment node, read `references/SCHEMA.md`, `references/index.md`, recent `references/log.md`, then `references/queries/identify-product-forms.md` and only its routed topics. Complete this orientation before expensive image inspection. At a white-label judgment node using the current evidence method, load `references/queries/evaluate-white-label-forms.md` and its routed topics. Return to the selected business-flow node after each route. Do not load the whole knowledge layer at startup; `source-manifest.md` is maintenance provenance.
51
-
52
- When selecting **visual product forms** (`classify/visual-form`), follow the routed visual method. Use `scripts/visual_form_pipeline.py plan --manifest IMAGE_MANIFEST --output-dir NEW_DIR [--batch-size 10]` to produce disjoint, image-hash-bound review batches and contact sheets for orientation and QA. Ten is a checkpoint size, not ten images merged into one semantic input. The planner consumes a prepared image manifest and plans natural-position products only; reconcile its product IDs and first natural records with the approved cleaned workbook before analysis. An original image exceeding 10 MB is marked `too_large`: retain that product in the natural population and report, mark its visual status `not_observed`, exclude it from visual candidate aggregation, and continue with the readable images. Record the omitted ID, count and reason; every `ready` image still requires a semantic observation, and other fetch failures require diagnosis or retry before completion. The image fingerprint is solely a scheduling aid. The default execution path is **serial, resumable semantic review**: inspect each product's original cached image individually using the host's tested image capability, write one image-hash-bound three-axis observation per ready product, and commit each checkpoint with `scripts/visual_observation_batches.py commit --plan PLAN.json --batch-dir BATCH_DIR --batch-id B001 --draft DRAFT.json`. A source HTTPS URL may be inspected individually when available, but bind the observation to the corresponding cached original and confirm that it represents the same image. Use contact sheets to orient the reviewer and audit coverage, not as the sole visual evidence. Call `status` with the same plan and batch directory to locate the next uncommitted batch, and continue until none remain; record progress in the run ledger after material batch groups. A large batch count or unverified parallelism is not by itself a capability failure. If the active turn or context ends, preserve the committed batches and resume from `status`; report incomplete only when execution actually cannot continue, identifying the last committed batch. Multi-image calls and parallel-observe are optional acceleration only after the active host has demonstrably returned independent per-image observations with reconciled IDs. In one image-semantic pass per ready product, record structural form, product design style and target use-task/audience evidence; preserve this original image observation separately from later inference. After all batches are committed, merge them with `scripts/visual_observation_batches.py merge` and keep the three-axis compiler output as evidence, not as the final product-style taxonomy.
53
-
54
- The final visual classification unit is a **whole, sourceable product-style prototype**: a recognizable physical product scheme that can be compared as a merchandise option. From a varied image sample, discover run-specific prototypes with complete product definitions, representative images, distinguishing configuration/design and inclusion boundaries. Compare every ready product with the prototypes; add a prototype when a materially different sellable product scheme appears, then revisit earlier near neighbors. A product image containing several distinct real products may belong to several prototypes; ordinary color/size variants remain within one prototype. Keep isolated body/handle/lid/spout/surface features as evidence or variant fields, not as substitute style classes. Use image evidence for visible structure and design; material claims, buyer identity and use suitability remain uncertain until separately corroborated. A saved image-hash-bound observation may be reused for re-aggregation; reopen representative or ambiguous originals when its description cannot resolve a style boundary. Record one decision per ready product, the versioned prototype registry, reasons for close merge/split decisions, uncertain/boundary items and example images. Validate with `scripts/compile_style_prototypes.py --plan PLAN.json --observations OBSERVATIONS.json --decisions DECISIONS.json --output-dir NEW_DIR`; it checks coverage, source hashes, prototype references and multi-style membership, then emits per-product labels, group summary and audit. Inspect each group's representative and exceptional images, plus similar groups across the registry. Use these prototype groups for downstream comparisons and report navigation; preserve earlier structural/style/task labels as secondary evidence. Report observed sample size against the full natural population; pilot results remain pilot-only. Register the plan, batch checkpoints, merged observations, prototype decisions, compiled labels/summary/audit and interpretation under `classify/visual-form`; development mode stops at `awaiting_review`.
55
-
56
- When the selected module is **who appears in advertising positions** (`classify/placement`), first load `references/SCHEMA.md`, `references/index.md`, recent `references/log.md`, and `references/queries/identify-advertisers.md` with its routed topic. Return to stage 3 and run `scripts/analyze_advertisers.py --input CLEANED.xlsx --output NEW.json`; optionally pass run-specific `--price-bands` chosen after inspecting the price distribution. The input is the clean-stage two-sheet workbook. The JSON holds separate advertising-appearance, unique-product and operating-shop grains; it preserves original display labels and resolves a known platform label to the actual shop only with same-ID shop-name and seller-name corroboration; advertiser-shop natural-position product layout; natural-row `付款人数` for matching products and shops; comparable price-band distributions; definitions and reconciliation checks. Use only natural-row `付款人数` as the observed transaction-traction field. Then write a substantive UTF-8 Markdown interpretation for the later HTML report. Select representative, contrasting advertiser shops by observed advertising presence, advertised-versus-unadvertised assortment, natural-position payment evidence, and price positioning. For each selected shop, identify the actual advertised listings and key non-advertised natural listings, explain the observed merchandise/placement configuration, distinguish plausible intent from measured fact, and derive a concrete implication for the next white-label product-form investigation. A cross-shop synthesis must distinguish recurring patterns and prioritize what to inspect next; aggregate statistics provide context rather than replacing the cases. Follow the case-selection and evidence contract in the routed advertiser method. Every named claim must trace to JSON records, and any missing natural record stays unknown rather than zero. The JSON is the detail artifact; the Markdown is the human-readable conclusion artifact. Check every stated figure against the JSON and register both paths under `classify/placement`. Development mode may stop here for user review before the next module is designed. Advertising rows are observed placements, not spend or actual impressions; shop-type labels do not verify brand ownership; natural `付款人数` has an unspecified time window and is not GMV, unit sales or storewide sales.
57
-
58
- When the selected module is **natural-position title roots** (`classify/title`), first load `references/SCHEMA.md`, `references/index.md`, recent `references/log.md`, and `references/queries/identify-title-roots.md` with its routed topic. Return to stage 3 and run `scripts/analyze_title_roots.py --input CLEANED.xlsx --output-dir NEW_DIR`, optionally adding `--project-lexicon REVIEWED.json`. Discover a Python with pandas, XLSX reading support and a package exposing `jieba`: probe `TAOBAO_SEARCH_PYTHON` when configured, SealSeek's managed Python under its Agent home, an existing user-managed `$HOME/.local/share/taobao-search-product-form/.venv` environment, then working interpreters on `PATH`; verify the actual imports before running. These home-relative paths are discovery conventions, not required platform paths. If none qualifies, install the dependencies in a supported stable user environment or report the exact gap. The bundled `references/title-lexicon.json` holds general protected phrases and aliases; each run writes its merged lexicon snapshot and new-word candidates without changing the bundled or project dictionary. The script creates product, product–root, root, shop and cross-facet-pair evidence from the cleaned `自然位` sheet only. Review the JSON quality counts and representative segmentation cases, then write a separate evidence-backed human conclusion. Interpret title words as seller claims/SEO language; the source search phrase is the buyer query, and actual product form awaits image review. Use distinct product IDs when aggregating; root-level payment sums overlap and cannot be added across roots. Register the four JSON files and conclusion under `classify/title` in the ledger. Development mode may stop here for user review.
59
-
60
- When the selected module is **listing location and merchant geography** (`classify/geography`), load `references/SCHEMA.md`, `references/index.md`, recent `references/log.md`, and `references/queries/identify-geography.md` with its routed topic. Return to stage 3 and run `scripts/analyze_geography.py --input CLEANED.xlsx --output-dir NEW_DIR`, adding `--title-roots PRODUCT_ROOTS.json` when an approved title-root artifact from the same cleaned workbook is available. The two JSON outputs preserve unique natural products, exact shops, shop–address pairs, region statistics, optional title-root–region cells, and separate advertising appearances and unique products. Check workbook-hash and product-title joins, multi-address shops, missing locations and independent count reconciliation. Write an evidence-backed Markdown conclusion and register all three artifacts under `classify/geography`. The exported `地址` is an observed listing label; it does not verify dispatch warehouse or factory location. Do not turn regional listing concentration into a production-cluster claim. Development mode stops here for user review.
61
-
62
- When the selected module is **sample-derived price bands** (`classify/price`), load `references/SCHEMA.md`, `references/index.md`, recent `references/log.md`, and `references/queries/identify-price-bands.md` with its routed topic. Return to stage 3 and run `scripts/analyze_price_bands.py --input CLEANED.xlsx --output-dir NEW_DIR`. The module uses every cleaned natural-position product; product eligibility belongs to the upstream clean stage when needed, not this price module. Advertising appearances are mapped against the natural-derived boundaries but do not fit them. Jenks natural breaks on log current price produces candidate boundaries; the declared complexity penalty selects a band count from sample fit, and bootstrap resampling checks boundary stability. Read `price_band_detail.json` and `price_band_summary.json`, then write a separate evidence-backed Markdown interpretation for the later HTML report. Explain the actual fitted boundaries, band populations, merchant spread, observed payment and advertising context, selection criterion, sensitivity, and limitations. Boundaries are run-specific and must never be reused as a default for another search. Displayed current price is not a verified transaction/SKU price; price clustering describes visible supply, not proven buyer price psychology or white-label opportunity. Reconcile all natural IDs and advertising appearance counts, register the three artifacts under `classify/price`, and stop for development-mode review.
63
-
64
- When the selected node is **cross-module comparison** (`compare`), use `scripts/assemble_opportunity_evidence.py --visual-labels PRODUCT_LABELS.json --prototype-labels PRODUCT_STYLE_LABELS.json --price-detail PRICE_DETAIL.json --title-roots PRODUCT_ROOTS.json --geography-detail GEOGRAPHY_DETAIL.json --advertiser-detail ADVERTISER_DETAIL.json --output NEW.json` using the five completed module artifacts and compiled whole-product style labels. It verifies the common cleaned-workbook hash for numeric modules, reconciles natural product IDs, key fields and visual image hashes, accepts a visual subset only when its IDs belong to that natural population, and keeps advertising appearances separate. Its output contains one record per natural product and candidate groups at product-style prototype and secondary form/style/task grains. These groups overlap by design: never add their totals together. `uncertain` visual products remain in the product table but outside tagged candidate aggregates; an unknown task is not evidence of no task demand. If a required module artifact is missing, stop the full run and report the missing evidence instead of producing a narrower opportunity judgment. Inspect the output's reconciliation and source hashes, then record it under `compare`. Return to stage 5.
65
-
66
- When the selected node is **white-label opportunity judgment** (`decide`), load `references/SCHEMA.md`, `references/index.md`, recent `references/log.md`, and `references/queries/evaluate-white-label-forms.md` with its routed topic before interpreting candidate groups. Select whole-product style prototype candidates as the card subjects; use secondary form/style/task groups as comparisons and evidence cuts. Produce a versioned schema-2 `opportunity_cards.json` plus a readable Markdown rendering from the current comparison artifact. The card document records `source_evidence_sha256`, the exact SHA-256 of that artifact; each `candidate_id` resolves to its `product_style` axis. Each card identifies the concrete product-side proposition, observed demand and price signals, merchant-line and advertising configuration, supporting and adverse evidence with product IDs or group metrics, unknowns, and the next question whose answer would change the assessment. Keep the semantic judgment out of the aggregation script. The default card is an evidence display and research-order suggestion, not a binary go/no-go verdict or an opaque total score. Run `scripts/validate_opportunity_cards.py --cards CARDS.json --evidence EVIDENCE.json` to check source binding, card structure and reference resolution; separately audit the meaning and arithmetic of every stated number. Preserve conflicts, and register both outputs under `decide` as `awaiting_review` in development mode. Return to stage 6 to produce the required HTML report.
67
-
68
- `scripts/prepare.py`, `scripts/compile_visual_review.py`, and `scripts/analyze.py` remain available for the current workbook and image-form path. Their use is recorded in the ledger, including the actual scope. The clean-stage two-sheet workbook is the authoritative handoff for later modules; where an older script reads raw rows directly, reconcile its natural-position population and first-record fields against the clean workbook before using its results. Derive visual form from inspected images rather than title or platform category. An ad-only product may inform advertiser analysis but not inflate natural-form counts. If images or labels cover only a pilot, label both denominator and conclusions as pilot-only. Displayed `付款人数` has an unspecified window; do not turn it into GMV or a growth trend.
69
-
70
- ## Completion and evolution
71
-
72
- Before advancing a stage, check its actual artifact, source coverage and uncertainty, then record its state. Before handing off a full report, reconcile displayed counts to the intermediate results and validate images, links, navigation and readable layout through available permitted capabilities. If a required capability is unavailable, report the precise gap instead of silently weakening the output.
73
-
74
- Development decisions refine the appropriate layer: stable order and hard boundaries here; evolving classification or decision methods in routed references; fixed transformations in scripts; evaluation cases outside the runtime Skill. Change only the affected layer, verify the written files, and test the changed path. A clean-context regression is separate and only runs when the user explicitly requests it after accepting a standard artifact.
@@ -1,139 +0,0 @@
1
- {
2
- "schema": "portable-skill-adapter",
3
- "schema_version": "1.0.0",
4
- "platform": "codex",
5
- "mappings": [
6
- {
7
- "capability_id": "product.workflow.ledger",
8
- "implementation": {"kind": "bundled-script", "discovery": "Resolve scripts/workflow_ledger.py relative to the installed Skill; Python standard library only.", "execution": "Run init once, then show and record at stage boundaries.", "normalization": "Read the per-run ledger.json and its stage records."},
9
- "features": ["new_ledger_only", "stage_state_record", "existing_artifact_verification", "recoverable_update"],
10
- "status": "implemented",
11
- "permissions": ["Local run-directory write"],
12
- "normalization": "Return ledger and backup paths with the current stage status."
13
- },
14
- {
15
- "capability_id": "product.search.clean",
16
- "implementation": {"kind": "bundled-cli-script", "discovery": "Resolve the installed taobao-ai-ops CLI and run doctor --node product-research --json; its npm dependency supplies ExcelJS.", "execution": "Run taobao-ai-ops script product-research clean_search_export.mjs SOURCE.xlsx OUTPUT.xlsx; inspect its JSON counts and compare both saved sheets with the source.", "normalization": "Return the two sheet names, cleaned workbook path, and source/retained/excluded row counts."},
17
- "features": ["xlsx_read", "first_natural_id_only", "all_ad_appearances", "source_order_preserved", "xlsx_write", "new_output_only"],
18
- "status": "tested",
19
- "tested_date": "2026-10-01",
20
- "evidence": ["Package test fixture confirms first natural record retained, later same-ID natural record excluded, and both same-ID advertising appearances retained; existing output is refused.", "The 2,516-row flat-pan workbook produced 1,750 first-seen natural IDs and 211 advertising rows, matching the previously audited population counts; ExcelJS writer was exercised through the packaged CLI."],
21
- "permissions": ["Local source read", "New local workbook write"],
22
- "normalization": "Return workbook artifact and quality counts; fail for unknown placement or blank ID."
23
- },
24
- {
25
- "capability_id": "product.search.advertiser-analysis",
26
- "implementation": {"kind": "bundled-script", "discovery": "Resolve scripts/analyze_advertisers.py relative to the installed Skill; use a Python with pandas and an Excel reader.", "execution": "Run with --input CLEANED.xlsx --output NEW.json and optional --price-bands; inspect shop, product, natural-payment and price reconciliations, then write the named business conclusions separately.", "normalization": "Return JSON path, shop and product layout, price bands, natural-payment evidence, and quality status."},
27
- "features": ["xlsx_read", "three_grains", "product_id_natural_join", "exact_shop_name_join", "natural_payment_traction", "shop_product_layout", "configurable_price_bands", "json_detail_export", "new_output_only"],
28
- "status": "tested",
29
- "tested_date": "2026-09-27",
30
- "evidence": ["Cleaned flat-pan workbook yielded 211 advertising appearances, 106 unique advertised products, 75 exact shop names, and 70 product-ID overlaps with natural positions; JSON totals reconciled with the two source sheets.", "Merchant-layout and price-band extension is validated on the current flat-pan workbook with natural-row payment-count cross-checks."],
31
- "permissions": ["Local cleaned workbook read", "New local JSON write"],
32
- "normalization": "Return detail JSON, merchant layout, natural-row payment-count evidence, price bands, and quality counts; fail for invalid grain, missing identity, or conflicting ad product-to-shop mappings."
33
- },
34
- {
35
- "capability_id": "product.search.title-roots",
36
- "implementation": {"kind": "bundled-script", "discovery": "Resolve scripts/analyze_title_roots.py and references/title-lexicon.json relative to the installed Skill; discover Python with pandas, an XLSX reader and a jieba-compatible module.", "execution": "Run --input CLEANED.xlsx --output-dir NEW_DIR with optional --project-lexicon REVIEWED.json; inspect the four JSON files and write the interpretation separately.", "normalization": "Return the product/root detail, summary, lexicon snapshot, candidate terms, and quality counts."},
37
- "features": ["xlsx_read", "natural_only", "protected_phrase_segmentation", "project_lexicon_merge", "run_lexicon_snapshot", "candidate_review_queue", "product_root_evidence", "root_shop_price_payment_statistics", "new_output_only"],
38
- "status": "tested",
39
- "tested_date": "2026-09-27",
40
- "evidence": ["Cleaned flat-pan sample: 1,750 unique natural-position product IDs, 19,569 product-root rows, 1,748 products with a mapped root; product identity, title, price, payment and shop all reconciled to the source sheet.", "Dictionary snapshot recorded jieba-py 0.46.12 and source hashes; unit tests passed for protected phrases, aliases, repeat counts, size boundaries, duplicate IDs and ad exclusion."],
41
- "permissions": ["Local cleaned workbook read", "Optional reviewed lexicon read", "New local JSON directory write"],
42
- "normalization": "Return four JSON artifacts and counts; fail for missing dependency, duplicate natural ID, lexicon conflict, or existing output directory."
43
- },
44
- {
45
- "capability_id": "product.search.geography",
46
- "implementation": {"kind": "bundled-script", "discovery": "Resolve scripts/analyze_geography.py relative to the installed Skill; discover Python with pandas and an XLSX reader.", "execution": "Run --input CLEANED.xlsx --output-dir NEW_DIR and optional --title-roots PRODUCT_ROOTS.json; inspect the two JSON outputs, then write the interpretation separately.", "normalization": "Return geography detail, region and root-region summaries, advertising-location context, and quality counts."},
47
- "features": ["xlsx_read", "natural_product_grain", "shop_address_grain", "address_normalization", "optional_title_root_hash_join", "regional_price_payment_statistics", "advertising_appearance_separation", "json_detail_and_summary", "new_output_only"],
48
- "status": "tested",
49
- "tested_date": "2026-09-27",
50
- "evidence": ["Cleaned flat-pan workbook: 1,750 unique natural products, 662 exact shops, 739 shop-address pairs, 52 multi-address shops, and 211 ad appearances from 106 distinct ad products; all regional product/shop and ad appearance/product counts independently reconciled to source sheets.", "Approved title-root JSON joined by exact workbook hash and product-title population; standalone branch, source-mismatch validation, duplicate natural IDs, address parsing, and existing-output refusal were exercised."],
51
- "permissions": ["Local cleaned workbook read", "Optional approved title-root JSON read", "New local JSON directory write"],
52
- "normalization": "Return two JSON artifacts and counts; fail for duplicate natural IDs, invalid placement, mismatched root source, or existing output directory."
53
- },
54
- {
55
- "capability_id": "product.search.price-bands",
56
- "implementation": {"kind": "bundled-script", "discovery": "Resolve scripts/analyze_price_bands.py relative to the installed Skill; discover Python with pandas, numpy and an XLSX reader.", "execution": "Run --input CLEANED.xlsx --output-dir NEW_DIR; inspect candidate models, sensitivity, bootstrap intervals and all count reconciliations, then write the interpretation separately.", "normalization": "Return two JSON artifacts, selected price boundaries, band comparisons and quality counts."},
57
- "features": ["xlsx_read", "all_natural_products", "log_price_jenks", "sample_selected_band_count", "bootstrap_stability", "advertising_context_separate", "json_detail_and_summary", "new_output_only"],
58
- "status": "tested",
59
- "tested_date": "2026-09-27",
60
- "evidence": ["Flat-pan cleaned workbook: all 1,750 unique natural products assigned once; 211 advertising appearances and 106 unique advertised IDs mapped separately; five sample-selected bands with 30 reproducible bootstrap resamples.", "Unit cases covered shifted-price boundaries, repeated-price grouping, duplicate natural IDs, invalid prices and penalty validation."],
61
- "permissions": ["Local cleaned workbook read", "New local JSON directory write"],
62
- "normalization": "Return detail and summary JSON with source hash, all product assignments, fitted boundaries, candidate-model evidence and bootstrap stability."
63
- },
64
- {
65
- "capability_id": "product.search.prepare",
66
- "implementation": {"kind": "bundled-script", "discovery": "Resolve scripts relative to the installed Skill and a Python with pandas and Pillow.", "execution": "Run scripts/prepare.py when the current input and selected modules need its normalization and image cache.", "normalization": "Read manifest.json as the canonical machine-readable output of this implementation."},
67
- "features": ["xlsx_read", "product_id_deduplication", "placement_preservation", "safe_image_fetch", "new_output_only"],
68
- "status": "implemented",
69
- "permissions": ["Local input read", "Local output write", "HTTPS image read"],
70
- "normalization": "Return manifest, contact-sheet paths and fetch coverage."
71
- },
72
- {
73
- "capability_id": "product.image.inspect",
74
- "implementation": {"kind": "agent-native", "discovery": "Use the host's advertised local-image viewing capability.", "execution": "Inspect each prepared original image individually; use contact sheets for orientation and QA; write product-ID keyed visual labels with image-hash evidence.", "normalization": "Persist the ledger schema documented in SKILL.md."},
75
- "features": ["local_image_view", "source_image_zoom", "one_observation_per_image", "multi_facet_observation", "open_candidate_labels", "uncertainty_preservation"],
76
- "status": "tested",
77
- "tested_date": "2026-09-27",
78
- "evidence": ["Current Codex session inspected two 12-product contact sheets and wrote 24 multi-facet product-ID observations; exact image hash and batch were bound and checked. A preliminary legacy contact sheet was also viewed, so strict one-image-read-once and parallel semantic workers were not validated."],
79
- "permissions": ["Local image read"],
80
- "normalization": "Default to serial local-image inspection with per-batch checkpoints; return product-ID keyed raw multi-facet observations, actual semantic worker limit and coverage. Do not infer concurrency from parallel fetching."
81
- },
82
- {
83
- "capability_id": "product.image.plan-reduce",
84
- "implementation": {"kind": "bundled-script", "discovery": "Resolve scripts/visual_form_pipeline.py relative to the installed Skill; use Python 3 with Pillow.", "execution": "Run plan, bind and reduce with new output paths; inspect summary and unresolved candidates.", "normalization": "Read visual_batch_plan.json, visual_form_assignments.json and visual_form_summary.json."},
85
- "features": ["image_hash_provenance", "disjoint_batches", "contact_sheet_export", "observation_binding", "one_record_per_product_validation", "versioned_alias_registry", "unresolved_label_reporting", "new_output_only"],
86
- "status": "tested",
87
- "tested_date": "2026-09-27",
88
- "evidence": ["Flat-pan pilot: 24 distinct natural-position image IDs planned into two batches; 24 hash-bound observations reduced from seven candidate labels to four canonical forms, with one uncertain item preserved."],
89
- "permissions": ["Prepared local image read", "New local JSON and contact-sheet write"],
90
- "normalization": "Return explicit batch membership, all per-product assignments, registry version, unresolved candidates and population coverage."
91
- },
92
- {
93
- "capability_id": "product.image.three-axis-compile",
94
- "implementation": {"kind": "bundled-script", "discovery": "Resolve scripts/compile_visual_selection.py relative to the installed Skill; use Python 3.", "execution": "Compile a planned image batch, product-ID keyed three-axis observations and a versioned registry into a new directory; inspect unresolved records and coverage.", "normalization": "Read product_labels.json, label_summary.json and raw_observations.json."},
95
- "features": ["three_independent_axes", "image_hash_provenance", "product_side_delta", "audience_evidence_tier", "open_candidate_labels", "versioned_alias_registry", "unresolved_label_reporting", "one_record_per_product_validation", "new_output_only"],
96
- "status": "tested",
97
- "tested_date": "2026-09-27",
98
- "evidence": ["Flat-pan 50-product pilot: all 50 planned IDs compiled with independent form, style and task-audience assignments; two unresolved form boundaries and 38 unclassified task-audience cases were preserved. Unit tests covered successful compilation, insufficient style evidence and refusal to overwrite existing output."],
99
- "permissions": ["Local planned observations read", "New local JSON directory write"],
100
- "normalization": "Return one hash-bound record per planned product, three independent canonical axes, evidence tiers, unresolved candidates and complete counts."
101
- },
102
- {
103
- "capability_id": "product.image.parallel-observe",
104
- "implementation": {"kind": "agent-native", "discovery": "Check the active host's advertised parallel visual-analysis worker capability at runtime.", "execution": "Assign each planned batch to one independent semantic worker with a bounded worker limit; collect one result per product and preserve execution evidence.", "normalization": "Return actual semantic worker count and product-ID keyed batch observations; image-download concurrency does not count."},
105
- "features": [],
106
- "status": "unresolved",
107
- "permissions": ["Local image read; possible metered vision usage"],
108
- "normalization": "When parallelism is unverified, use the tested serial image-inspection path and report actual worker count; parallelism is optional acceleration, not a full-run prerequisite."
109
- },
110
- {
111
- "capability_id": "product.opportunity.evidence-join",
112
- "implementation": {"kind": "bundled-script", "discovery": "Resolve scripts/assemble_opportunity_evidence.py relative to the installed Skill; Python 3 standard library only.", "execution": "Run with five approved JSON inputs and a new output path; inspect the source hash, population and candidate reconciliation before composing cards.", "normalization": "Read the product and candidate evidence arrays plus their population and grain notes."},
113
- "features": ["source_hash_reconciliation", "natural_product_id_join", "uncertainty_preservation", "advertising_grain_separation", "merchant_line_context", "overlapping_candidate_groups", "new_output_only"],
114
- "status": "tested",
115
- "tested_date": "2026-09-28",
116
- "evidence": ["Flat-pan main run joined 1,750 natural products with four same-hash numeric artifacts and a 1,750-ID visual observation set; 1,611 tagged and 139 uncertain records remained distinct; advertising reconciled to 211 appearances and 106 IDs."],
117
- "permissions": ["Local stage-artifact read", "New local JSON write"],
118
- "normalization": "Return evidence JSON, product/candidate counts and explicit caveats; semantic opportunity-card interpretation remains Agent judgment."
119
- },
120
- {
121
- "capability_id": "product.opportunity.card-validate",
122
- "implementation": {"kind": "bundled-script", "discovery": "Resolve scripts/validate_opportunity_cards.py relative to the installed Skill; Python 3 standard library only.", "execution": "Run with cards and joined evidence JSON, then independently audit numerical claims and business inferences.", "normalization": "Return card count and resolved-reference success."},
123
- "features": ["required_card_fields", "candidate_reference_resolution", "member_product_reference", "research_order_uniqueness", "no_composite_entry_score"],
124
- "status": "tested",
125
- "tested_date": "2026-09-28",
126
- "evidence": ["Four first-run flat-pan cards passed structural/reference validation; unit tests rejected broken candidate fields, foreign product IDs and opaque scores."],
127
- "permissions": ["Local JSON read"],
128
- "normalization": "Return read-only validation result; do not infer that commercial claims passed semantic review."
129
- },
130
- {
131
- "capability_id": "product.report.html",
132
- "implementation": {"kind": "bundled-script", "discovery": "Use taobao-ai-ops script product-research render_report.py and the package's pinned report_runtime.", "execution": "Build and validate the ViewModel, then render and validate with the bundled report runtime.", "normalization": "Return ViewModel and standalone HTML paths plus validation results."},
133
- "features": ["versioned_viewmodel", "embedded_images", "structured_conclusions", "standalone_html", "validation"],
134
- "status": "implemented",
135
- "permissions": ["Local report write"],
136
- "normalization": "Use the bundled renderer's JSON result and inspect the rendered artifact."
137
- }
138
- ]
139
- }
@@ -1,24 +0,0 @@
1
- {
2
- "schema": "portable-skill-adapter",
3
- "schema_version": "1.0.0",
4
- "platform": "sealseek",
5
- "tested_targets": [],
6
- "discovery": "Run taobao-ai-ops skill source --name taobao-search-product-form --json to locate the bundled Skill, then skill status|install|update --agent sealseek for its managed installation.",
7
- "runtime": "Use taobao-ai-ops doctor --node product-research --json to check Python imports and the bundled report runtime. The host must provide single-image inspection for visual classification.",
8
- "mappings": [
9
- {"capability_id":"product.workflow.ledger","implementation":{"kind":"bundled-script"},"features":["new_ledger_only","stage_state_record","existing_artifact_verification","recoverable_update"],"status":"implemented"},
10
- {"capability_id":"product.search.clean","implementation":{"kind":"bundled-cli-script"},"features":["xlsx_read","first_natural_id_only","all_ad_appearances","source_order_preserved","xlsx_write","new_output_only"],"status":"implemented"},
11
- {"capability_id":"product.search.advertiser-analysis","implementation":{"kind":"bundled-script"},"features":["xlsx_read","three_grains","product_id_natural_join","exact_shop_name_join","natural_payment_traction","shop_product_layout","configurable_price_bands","json_detail_export","new_output_only"],"status":"implemented"},
12
- {"capability_id":"product.search.title-roots","implementation":{"kind":"bundled-script"},"features":["xlsx_read","natural_only","protected_phrase_segmentation","project_lexicon_merge","run_lexicon_snapshot","candidate_review_queue","product_root_evidence","root_shop_price_payment_statistics","new_output_only"],"status":"implemented"},
13
- {"capability_id":"product.search.geography","implementation":{"kind":"bundled-script"},"features":["xlsx_read","natural_product_grain","shop_address_grain","address_normalization","optional_title_root_hash_join","regional_price_payment_statistics","advertising_appearance_separation","json_detail_and_summary","new_output_only"],"status":"implemented"},
14
- {"capability_id":"product.search.price-bands","implementation":{"kind":"bundled-script"},"features":["xlsx_read","all_natural_products","log_price_jenks","sample_selected_band_count","bootstrap_stability","advertising_context_separate","json_detail_and_summary","new_output_only"],"status":"implemented"},
15
- {"capability_id":"product.search.prepare","implementation":{"kind":"bundled-script"},"features":["xlsx_read","product_id_deduplication","placement_preservation","safe_image_fetch","new_output_only"],"status":"implemented"},
16
- {"capability_id":"product.image.inspect","implementation":{"kind":"agent-native","execution":"Inspect each cached original image separately, bind its observation to product ID and image hash; zoom the original where needed, then record independent form, style and use-task facets with uncertainty. Use contact sheets for orientation only."},"features":["local_image_view","source_image_zoom","one_observation_per_image","multi_facet_observation","open_candidate_labels","uncertainty_preservation","single_https_image_view"],"status":"implemented"},
17
- {"capability_id":"product.image.plan-reduce","implementation":{"kind":"bundled-script"},"features":["image_hash_provenance","disjoint_batches","contact_sheet_export","observation_binding","one_record_per_product_validation","versioned_alias_registry","unresolved_label_reporting","new_output_only"],"status":"implemented"},
18
- {"capability_id":"product.image.three-axis-compile","implementation":{"kind":"bundled-script"},"features":["three_independent_axes","image_hash_provenance","product_side_delta","audience_evidence_tier","open_candidate_labels","versioned_alias_registry","unresolved_label_reporting","one_record_per_product_validation","new_output_only"],"status":"implemented"},
19
- {"capability_id":"product.image.parallel-observe","implementation":{"kind":"agent-native"},"features":[],"status":"unresolved"},
20
- {"capability_id":"product.opportunity.evidence-join","implementation":{"kind":"bundled-script"},"features":["source_hash_reconciliation","natural_product_id_join","uncertainty_preservation","advertising_grain_separation","merchant_line_context","overlapping_candidate_groups","new_output_only"],"status":"implemented"},
21
- {"capability_id":"product.opportunity.card-validate","implementation":{"kind":"bundled-script"},"features":["required_card_fields","candidate_reference_resolution","member_product_reference","research_order_uniqueness","no_composite_entry_score"],"status":"implemented"},
22
- {"capability_id":"product.report.html","implementation":{"kind":"bundled-script","execution":"Run taobao-ai-ops script product-research render_report.py --input VIEWMODEL.json --output REPORT.html; inspect validation result."},"features":["versioned_viewmodel","embedded_images","structured_conclusions","standalone_html","validation"],"status":"implemented"}
23
- ]
24
- }
@@ -1,3 +0,0 @@
1
- interface:
2
- display_name: "淘宝搜索选品研究"
3
- short_description: "分步开发或完整运行搜索结果选品分析"