sophhub 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/sophhub.js +21 -0
- package/package.json +32 -0
- package/skills/VERSIONS.md +27 -0
- package/skills/builtin/clawhub/SKILL.md +77 -0
- package/skills/builtin/flight-booking/SKILL.md +288 -0
- package/skills/builtin/flight-booking/scripts/flight_booking.py +1232 -0
- package/skills/builtin/inventory-management/SKILL.md +241 -0
- package/skills/builtin/inventory-management/scripts/inventory.py +1844 -0
- package/skills/builtin/schedule-reminder/SKILL.md +619 -0
- package/skills/builtin/schedule-reminder/schedule_template.md +68 -0
- package/skills/builtin/schedule-reminder/scripts/append_event.py +204 -0
- package/skills/builtin/schedule-reminder/scripts/create_reminders.sh +163 -0
- package/skills/builtin/schedule-reminder/scripts/daily_activate.sh +175 -0
- package/skills/builtin/schedule-reminder/scripts/parse_schedule.py +704 -0
- package/skills/builtin/schedule-reminder/scripts/setup.sh +242 -0
- package/skills/builtin/schedule-reminder//347/224/250/346/210/267/346/214/207/345/215/227.md +311 -0
- package/skills/builtin/skill-creator/SKILL.md +370 -0
- package/skills/builtin/skill-creator/license.txt +202 -0
- package/skills/builtin/skill-creator/scripts/init_skill.py +378 -0
- package/skills/builtin/skill-creator/scripts/package_skill.py +111 -0
- package/skills/builtin/skill-creator/scripts/quick_validate.py +101 -0
- package/skills/builtin/sophnet-customer-management/SKILL.md +271 -0
- package/skills/builtin/sophnet-customer-management/pyproject.toml +15 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_cli/__init__.py +2 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_cli/__main__.py +5 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_cli/cli.py +67 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_cli/commands/__init__.py +2 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_cli/commands/customer.py +60 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_cli/commands/export_file.py +18 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_cli/commands/import_file.py +15 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_cli/commands/reminder.py +26 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_cli/commands/schema.py +28 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_cli/config.py +54 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_core/__init__.py +2 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_core/exporter.py +85 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_core/models.py +84 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_core/normalizer.py +144 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_core/parser.py +241 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_core/query.py +109 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_core/reminder.py +121 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_core/repository.py +397 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_core/schema.py +106 -0
- package/skills/builtin/sophnet-customer-management/src/customer_mgmt_core/service.py +565 -0
- package/skills/builtin/sophnet-customer-management/uv.lock +48 -0
- package/skills/builtin/sophnet-customized-marketing/SKILL.md +144 -0
- package/skills/builtin/sophnet-customized-marketing/playbooks/campaign-planning.md +187 -0
- package/skills/builtin/sophnet-customized-marketing/playbooks/content-generation.md +124 -0
- package/skills/builtin/sophnet-customized-marketing/playbooks/marketing-calendar.md +59 -0
- package/skills/builtin/sophnet-customized-marketing/playbooks/multi-channel-bundle.md +94 -0
- package/skills/builtin/sophnet-customized-marketing/playbooks/poster-generation.md +182 -0
- package/skills/builtin/sophnet-customized-marketing/playbooks/style-profile-workflow.md +103 -0
- package/skills/builtin/sophnet-customized-marketing/pyproject.toml +9 -0
- package/skills/builtin/sophnet-customized-marketing/references/campaign-mechanics.md +168 -0
- package/skills/builtin/sophnet-customized-marketing/references/content-safety.md +26 -0
- package/skills/builtin/sophnet-customized-marketing/references/marketing-date-checklist.md +99 -0
- package/skills/builtin/sophnet-customized-marketing/references/platform-writing-guidelines.md +88 -0
- package/skills/builtin/sophnet-customized-marketing/references/quality-checklist.md +44 -0
- package/skills/builtin/sophnet-customized-marketing/scripts/generate_poster.py +585 -0
- package/skills/builtin/sophnet-customized-marketing/scripts/style_profile.py +215 -0
- package/skills/builtin/sophnet-face-search/SKILL.md +115 -0
- package/skills/builtin/sophnet-face-search/pyproject.toml +11 -0
- package/skills/builtin/sophnet-face-search/scripts/face_search.py +336 -0
- package/skills/builtin/sophnet-face-search/uv.lock +508 -0
- package/skills/builtin/sophnet-image-edit/SKILL.md +140 -0
- package/skills/builtin/sophnet-image-edit/pyproject.toml +9 -0
- package/skills/builtin/sophnet-image-edit/scripts/edit_and_preview.sh +68 -0
- package/skills/builtin/sophnet-image-edit/scripts/edit_image.py +279 -0
- package/skills/builtin/sophnet-image-edit/uv.lock +234 -0
- package/skills/builtin/sophnet-image-generate/SKILL.md +62 -0
- package/skills/builtin/sophnet-image-generate/pyproject.toml +9 -0
- package/skills/builtin/sophnet-image-generate/scripts/generate_image.py +156 -0
- package/skills/builtin/sophnet-image-generate/uv.lock +234 -0
- package/skills/builtin/sophnet-image-ocr/SKILL.md +167 -0
- package/skills/builtin/sophnet-image-ocr/pyproject.toml +13 -0
- package/skills/builtin/sophnet-image-ocr/scripts/ocr.py +226 -0
- package/skills/builtin/sophnet-image-ocr/uv.lock +234 -0
- package/skills/builtin/sophnet-infinite-talk/SKILL.md +140 -0
- package/skills/builtin/sophnet-infinite-talk/pyproject.toml +9 -0
- package/skills/builtin/sophnet-infinite-talk/scripts/gen.py +172 -0
- package/skills/builtin/sophnet-oss/SKILL.md +109 -0
- package/skills/builtin/sophnet-oss/pyproject.toml +8 -0
- package/skills/builtin/sophnet-oss/scripts/upload_file.py +43 -0
- package/skills/builtin/sophnet-qa-install/SKILL.md +210 -0
- package/skills/builtin/sophnet-qa-install/pyproject.toml +6 -0
- package/skills/builtin/sophnet-qa-install/scripts/backup_md.py +35 -0
- package/skills/builtin/sophnet-qa-install/scripts/check_installed.py +143 -0
- package/skills/builtin/sophnet-qa-install/scripts/update_config.py +142 -0
- package/skills/builtin/sophnet-qa-install/scripts/update_md.py +73 -0
- package/skills/builtin/sophnet-training-install/SKILL.md +211 -0
- package/skills/builtin/sophnet-training-install/pyproject.toml +6 -0
- package/skills/builtin/sophnet-training-install/scripts/backup_md.py +35 -0
- package/skills/builtin/sophnet-training-install/scripts/check_installed.py +144 -0
- package/skills/builtin/sophnet-training-install/scripts/update_config.py +142 -0
- package/skills/builtin/sophnet-training-install/scripts/update_md.py +73 -0
- package/skills/builtin/sophnet-tts/SKILL.md +79 -0
- package/skills/builtin/sophnet-tts/pyproject.toml +9 -0
- package/skills/builtin/sophnet-tts/scripts/gen_tts.py +130 -0
- package/skills/builtin/sophnet-video-generate/SKILL.md +116 -0
- package/skills/builtin/sophnet-video-generate/scripts/gen_video.py +304 -0
- package/skills/builtin/video-understand/SKILL.md +79 -0
- package/skills/builtin/video-understand/scripts/video_understand.py +204 -0
- package/skills/builtin/weather/SKILL.md +112 -0
- package/skills/builtin/web-scraper/SKILL.md +101 -0
- package/skills/builtin/web-scraper/scripts/scrape.py +270 -0
- package/skills/builtin/website-builder/SKILL.md +266 -0
- package/skills/builtin/website-builder/scripts/deploy_site.sh +46 -0
- package/skills/store/didi-ride/SKILL.md +309 -0
- package/skills/store/didi-ride/_meta.json +6 -0
- package/skills/store/didi-ride/assets/PREFERENCE.md +58 -0
- package/skills/store/didi-ride/package.json +15 -0
- package/skills/store/didi-ride/references/api_references.md +171 -0
- package/skills/store/didi-ride/references/error_handling.md +68 -0
- package/skills/store/didi-ride/references/setup.md +73 -0
- package/skills/store/didi-ride/references/workflow.md +150 -0
- package/skills/store/flyai/SKILL.md +119 -0
- package/skills/store/flyai/references/fliggy-fast-search.md +53 -0
- package/skills/store/flyai/references/search-flight.md +89 -0
- package/skills/store/flyai/references/search-hotels.md +57 -0
- package/skills/store/flyai/references/search-poi.md +49 -0
- package/src/commands/download.js +103 -0
- package/src/commands/list.js +67 -0
- package/src/utils/config.js +24 -0
- package/src/utils/gitlab.js +67 -0
- package/src/utils/paths.js +19 -0
- package/src/utils/versions.js +38 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: inventory-management
|
|
3
|
+
description: "库存管理工具。当用户需要导入商品表、管理库存、出入库操作、查询库存、低库存预警、查看出入库记录、库存盘点或导出数据时使用。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Inventory Management(库存管理)
|
|
7
|
+
|
|
8
|
+
支持多项目、自定义字段的库存管理 skill。用户可上传 CSV/XLSX 文件创建项目,系统自动解析表头生成字段配置,支持出入库、库存查询、低库存预警、变动记录、数据导出等全流程操作。
|
|
9
|
+
|
|
10
|
+
## 重要原则
|
|
11
|
+
|
|
12
|
+
- **字段由用户定义**:商品字段不是预设的,而是从用户上传的文件表头自动解析。每个项目有独立的字段配置。
|
|
13
|
+
- **关键字段必须明确**:每个项目需要指定「唯一标识字段」(如 SKU/编号)和「库存数量字段」(如 库存/数量),才能正常执行出入库操作。
|
|
14
|
+
- **删除操作需确认**:删除商品或删除项目前,必须向用户确认,不得自动执行。
|
|
15
|
+
- **出库校验**:出库数量不得超过当前库存,超出时提示库存不足。
|
|
16
|
+
- **信息不全时主动询问**:如用户说「入库 100 个」但未说明哪个商品或哪个项目,需先确认。
|
|
17
|
+
- **单项目时可省略 --project**:若用户只有一个项目,所有命令可省略 `--project` 参数,自动使用唯一项目。
|
|
18
|
+
|
|
19
|
+
## 流程概览
|
|
20
|
+
|
|
21
|
+
| 步骤 | 说明 | 脚本子命令 |
|
|
22
|
+
|------|------|------------|
|
|
23
|
+
| 自然语言建表 | 用户描述字段,直接创建空项目(无需文件) | `create` |
|
|
24
|
+
| 从文件建表 | 上传 CSV/XLSX 文件,解析表头创建项目并导入数据 | `init` |
|
|
25
|
+
| 追加导入 | 向已有项目追加/更新商品数据 | `import` |
|
|
26
|
+
| 项目管理 | 查看/删除项目 | `project-list` / `project-delete` |
|
|
27
|
+
| 字段管理 | 查看/新增/删除自定义字段 | `field-list` / `field-add` / `field-delete` |
|
|
28
|
+
| 商品管理 | 添加/编辑/删除/查询/详情 | `product-add` / `product-edit` / `product-delete` / `product-list` / `product-detail` |
|
|
29
|
+
| 入库 | 采购入库/退货入库/其他入库 | `stock-in` |
|
|
30
|
+
| 出库 | 销售出库/退货出库/报损/其他 | `stock-out` |
|
|
31
|
+
| 库存查询 | 查全部/单个/低库存预警/按字段筛选 | `stock-query` |
|
|
32
|
+
| 变动记录 | 查看出入库历史流水 | `stock-log` |
|
|
33
|
+
| 导出 | 导出商品或流水为 CSV | `export` |
|
|
34
|
+
|
|
35
|
+
## 自然语言建表(create)
|
|
36
|
+
|
|
37
|
+
**当用户用自然语言描述要管理的商品和字段时,优先使用 `create` 命令**,无需用户提供文件。将用户描述的字段转换为 `--fields` 参数即可。
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# 简单格式:逗号分隔字段名,类型自动推断(含"数量/价/库存"的→number,含"日期"的→date,其余→text)
|
|
41
|
+
python3 {baseDir}/scripts/inventory.py create --project 服装仓库 --fields "SKU,名称,颜色,尺码,库存数量,售价" --key-field SKU --stock-field 库存数量
|
|
42
|
+
|
|
43
|
+
# 带类型的简单格式:用冒号指定类型
|
|
44
|
+
python3 {baseDir}/scripts/inventory.py create --project 食品仓库 --fields "条码:text,品名:text,保质期:date,库存:number,进价:number,售价:number" --key-field 条码 --stock-field 库存
|
|
45
|
+
|
|
46
|
+
# JSON 格式(完全控制字段定义)
|
|
47
|
+
python3 {baseDir}/scripts/inventory.py create --project 原材料 --fields '[{"name":"物料编号","type":"text"},{"name":"名称","type":"text"},{"name":"库存数量","type":"number"},{"name":"单价","type":"number"}]' --key-field 物料编号 --stock-field 库存数量
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
- `--project`:项目名称(必填)。
|
|
51
|
+
- `--fields`:字段定义(必填),支持两种格式:
|
|
52
|
+
- **简单格式**:`"字段1,字段2,字段3"` 或 `"字段1:类型,字段2:类型"`,类型可选 `text`(默认)/ `number` / `date`。
|
|
53
|
+
- **JSON 格式**:`'[{"name":"字段名","type":"类型"},...]'`。
|
|
54
|
+
- 不指定类型时根据字段名自动推断:含「数量/库存/价/金额/成本」→ number,含「日期/时间/保质期」→ date,其余 → text。
|
|
55
|
+
- `--key-field`:唯一标识字段名(可选,自动推断匹配「SKU/编码/编号/货号」的字段)。
|
|
56
|
+
- `--stock-field`:库存数量字段名(可选,自动推断匹配「库存/数量」的字段)。
|
|
57
|
+
- 创建后项目为空表(0 条商品),可通过 `product-add` 逐条添加或 `import` 批量导入。
|
|
58
|
+
|
|
59
|
+
**使用场景示例**:
|
|
60
|
+
- 用户说「帮我建一个服装库存表,要有 SKU、名称、颜色、尺码、库存和售价」→ 用 `create` 命令
|
|
61
|
+
- 用户说「我有一个 Excel 表,帮我导入」→ 用 `init` 命令
|
|
62
|
+
- 用户说「帮我管理一下仓库库存」但没提供文件 → 先问用户需要哪些字段,再用 `create` 命令
|
|
63
|
+
|
|
64
|
+
## 从文件初始化项目(init)
|
|
65
|
+
|
|
66
|
+
当用户提供了 CSV 或 XLSX 文件时使用。脚本自动解析表头生成字段配置,并导入全部数据。
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# 自动推断关键字段(脚本会从表头猜测唯一标识和库存字段,输出推断结果供确认)
|
|
70
|
+
python3 {baseDir}/scripts/inventory.py init --project 原材料 --file /path/to/materials.csv
|
|
71
|
+
|
|
72
|
+
# 明确指定关键字段(跳过推断)
|
|
73
|
+
python3 {baseDir}/scripts/inventory.py init --project 原材料 --file /path/to/materials.csv --key-field 物料编号 --stock-field 库存数量
|
|
74
|
+
|
|
75
|
+
# XLSX 文件同理
|
|
76
|
+
python3 {baseDir}/scripts/inventory.py init --project 成品 --file /path/to/products.xlsx --key-field SKU --stock-field 库存
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
- 支持 `.csv`(自动检测 UTF-8/GBK 编码)和 `.xlsx` 格式。
|
|
80
|
+
- `--project`:项目名称(必填),同名项目不可重复创建。
|
|
81
|
+
- `--key-field`:唯一标识字段名(可选,不传时脚本自动推断并输出结果)。
|
|
82
|
+
- `--stock-field`:库存数量字段名(可选,不传时脚本自动推断并输出结果)。
|
|
83
|
+
- 若自动推断失败或存在歧义,脚本会输出所有列名并提示用户手动指定。
|
|
84
|
+
- **输出**:项目创建成功,导入 N 条商品,字段列表,关键字段配置。
|
|
85
|
+
|
|
86
|
+
**自动推断规则**:
|
|
87
|
+
- 唯一标识:优先匹配包含「SKU」「编码」「编号」「货号」「条码」「ID」的列名。
|
|
88
|
+
- 库存数量:优先匹配包含「库存」「数量」「stock」「qty」的列名。
|
|
89
|
+
|
|
90
|
+
## 追加导入(import)
|
|
91
|
+
|
|
92
|
+
向已有项目追加数据。key 已存在的行更新,新 key 的行插入。
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
python3 {baseDir}/scripts/inventory.py import --project 原材料 --file /path/to/new_materials.csv
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
- 文件表头必须与项目字段配置一致(允许少列,不允许多出未知列)。
|
|
99
|
+
- **输出**:新增 N 条,更新 M 条,跳过 K 条(附原因)。
|
|
100
|
+
|
|
101
|
+
## 项目管理
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# 查看所有项目
|
|
105
|
+
python3 {baseDir}/scripts/inventory.py project-list
|
|
106
|
+
|
|
107
|
+
# 删除项目(会同时删除该项目下所有商品和变动记录)
|
|
108
|
+
python3 {baseDir}/scripts/inventory.py project-delete --project 原材料
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
- `project-list` 输出:项目名称、商品数量、字段数、创建时间。
|
|
112
|
+
- `project-delete` 需用户确认后再执行,**不得自动执行**。
|
|
113
|
+
|
|
114
|
+
## 字段管理
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# 查看某项目的字段配置
|
|
118
|
+
python3 {baseDir}/scripts/inventory.py field-list --project 成品
|
|
119
|
+
|
|
120
|
+
# 为项目新增一个自定义字段
|
|
121
|
+
python3 {baseDir}/scripts/inventory.py field-add --project 成品 --name 保质期 --type date
|
|
122
|
+
|
|
123
|
+
# 删除单个字段
|
|
124
|
+
python3 {baseDir}/scripts/inventory.py field-delete --project 食品仓库 --name 条码
|
|
125
|
+
|
|
126
|
+
# 批量删除多个字段(逗号分隔)
|
|
127
|
+
python3 {baseDir}/scripts/inventory.py field-delete --project 食品仓库 --name "条码,保质期,进价,售价"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
- `field-add`:`--type` 可选 `text`(默认)、`number`、`date`。新增字段后已有商品该字段值为空。
|
|
131
|
+
- `field-delete`:`--name` 传要删除的字段名,多个用逗号分隔。**唯一标识字段和库存数量字段不可删除**。删除后会同步清除所有商品中对应字段的数据。
|
|
132
|
+
|
|
133
|
+
## 商品管理
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# 添加单个商品(JSON 格式传入字段值)
|
|
137
|
+
python3 {baseDir}/scripts/inventory.py product-add --project 成品 --data '{"SKU":"BT-003","商品名":"蓝牙音箱","库存":0,"售价":299}'
|
|
138
|
+
|
|
139
|
+
# 编辑商品
|
|
140
|
+
python3 {baseDir}/scripts/inventory.py product-edit --project 成品 --key BT-003 --set '{"售价":259,"商品名":"蓝牙音箱Pro"}'
|
|
141
|
+
|
|
142
|
+
# 删除商品(软删除)
|
|
143
|
+
python3 {baseDir}/scripts/inventory.py product-delete --project 成品 --key BT-003
|
|
144
|
+
|
|
145
|
+
# 查询商品列表
|
|
146
|
+
python3 {baseDir}/scripts/inventory.py product-list --project 成品
|
|
147
|
+
python3 {baseDir}/scripts/inventory.py product-list --project 成品 --search 蓝牙
|
|
148
|
+
python3 {baseDir}/scripts/inventory.py product-list --project 成品 --filter 颜色=红色
|
|
149
|
+
|
|
150
|
+
# 商品详情
|
|
151
|
+
python3 {baseDir}/scripts/inventory.py product-detail --project 成品 --key BT-001
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
- `product-add`:`--data` 为 JSON 字符串,字段名须与项目字段配置匹配。唯一标识字段和库存字段必填。
|
|
155
|
+
- `product-edit`:`--set` 为 JSON 字符串,只传需要修改的字段。
|
|
156
|
+
- `product-delete`:软删除(标记 status=deleted),向用户确认后再执行。
|
|
157
|
+
- `product-list`:展示表格,包含所有自定义字段 + 当前库存。`--search` 对所有文本字段模糊匹配,`--filter` 精确筛选。
|
|
158
|
+
- `product-detail`:展示单个商品全部字段及最近 10 条库存变动记录。
|
|
159
|
+
|
|
160
|
+
## 入库
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
python3 {baseDir}/scripts/inventory.py stock-in --project 原材料 --key M-001 --quantity 500
|
|
164
|
+
python3 {baseDir}/scripts/inventory.py stock-in --project 原材料 --key M-001 --quantity 500 --type purchase --remark "供应商A第三批"
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
- `--key`:商品唯一标识值(必填)。
|
|
168
|
+
- `--quantity`:入库数量,正整数(必填)。
|
|
169
|
+
- `--type`:`purchase`(采购,默认)、`return`(退货入库)、`other`(其他)。
|
|
170
|
+
- `--remark`:备注(可选)。
|
|
171
|
+
- **输出**:入库成功,商品 xxx 库存 100 → 600。
|
|
172
|
+
|
|
173
|
+
## 出库
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
python3 {baseDir}/scripts/inventory.py stock-out --project 成品 --key BT-001 --quantity 5
|
|
177
|
+
python3 {baseDir}/scripts/inventory.py stock-out --project 成品 --key BT-001 --quantity 5 --type sale --remark "订单#12345"
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
- `--type`:`sale`(销售,默认)、`return`(退货出库)、`damage`(报损)、`other`(其他)。
|
|
181
|
+
- 出库数量不得超过当前库存,超出时报错并提示当前库存量。
|
|
182
|
+
|
|
183
|
+
## 库存查询
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# 查询全部库存
|
|
187
|
+
python3 {baseDir}/scripts/inventory.py stock-query --project 成品
|
|
188
|
+
|
|
189
|
+
# 查询单个商品
|
|
190
|
+
python3 {baseDir}/scripts/inventory.py stock-query --project 成品 --key BT-001
|
|
191
|
+
|
|
192
|
+
# 低库存预警
|
|
193
|
+
python3 {baseDir}/scripts/inventory.py stock-query --project 成品 --low-stock
|
|
194
|
+
|
|
195
|
+
# 按字段筛选
|
|
196
|
+
python3 {baseDir}/scripts/inventory.py stock-query --project 成品 --filter 颜色=红色
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
- 输出表格包含:唯一标识、所有自定义字段、当前库存、是否低于阈值。
|
|
200
|
+
- `--low-stock`:仅展示库存 ≤ 低库存阈值的商品。
|
|
201
|
+
|
|
202
|
+
## 变动记录
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
# 查看某商品的全部变动
|
|
206
|
+
python3 {baseDir}/scripts/inventory.py stock-log --project 成品 --key BT-001
|
|
207
|
+
|
|
208
|
+
# 按时间范围查询
|
|
209
|
+
python3 {baseDir}/scripts/inventory.py stock-log --project 成品 --from 2026-01-01 --to 2026-03-31
|
|
210
|
+
|
|
211
|
+
# 按方向筛选
|
|
212
|
+
python3 {baseDir}/scripts/inventory.py stock-log --project 成品 --direction in
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
- 输出字段:时间、商品标识、方向(入库/出库)、类型、数量、变动前→变动后、备注。
|
|
216
|
+
|
|
217
|
+
## 导出
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
# 导出商品数据为 CSV
|
|
221
|
+
python3 {baseDir}/scripts/inventory.py export --project 成品 --type products --output /path/to/output.csv
|
|
222
|
+
|
|
223
|
+
# 导出变动记录为 CSV
|
|
224
|
+
python3 {baseDir}/scripts/inventory.py export --project 成品 --type logs --output /path/to/logs.csv
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
- `--type`:`products`(商品数据)或 `logs`(变动记录)。
|
|
228
|
+
- `--output`:输出文件路径(可选,默认输出到脚本同目录下 `export_<项目名>_<类型>_<时间戳>.csv`)。
|
|
229
|
+
|
|
230
|
+
## 脚本与配置
|
|
231
|
+
|
|
232
|
+
- 脚本路径:`scripts/inventory.py`
|
|
233
|
+
- 数据库路径:默认 `~/.openclaw/workspace/inventory-management/inventory.db`(目录不存在时自动创建),可通过环境变量 `INVENTORY_DB_PATH` 自定义。
|
|
234
|
+
- 依赖:`openpyxl`(仅 XLSX 导入时需要,CSV 无第三方依赖)。
|
|
235
|
+
|
|
236
|
+
## 何时向用户确认
|
|
237
|
+
|
|
238
|
+
- 用户说「入库/出库」但未指定项目名或商品标识时,先确认。
|
|
239
|
+
- 用户说「删除商品」或「删除项目」时,展示将被删除的内容并等待确认。
|
|
240
|
+
- `init` 时若自动推断的关键字段存在歧义(如多个列都包含「编号」),须列出候选并让用户选择。
|
|
241
|
+
- 用户只有一个项目时,操作命令可省略 `--project`,无需额外确认项目。
|