makea-cli 0.1.20__tar.gz → 0.1.22__tar.gz

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 (51) hide show
  1. {makea_cli-0.1.20 → makea_cli-0.1.22}/PKG-INFO +49 -2
  2. {makea_cli-0.1.20 → makea_cli-0.1.22}/README.md +48 -1
  3. makea_cli-0.1.22/makea_cli/__init__.py +1 -0
  4. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/api_client.py +55 -0
  5. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/__init__.py +2 -0
  6. makea_cli-0.1.22/makea_cli/commands/production/__init__.py +3 -0
  7. makea_cli-0.1.22/makea_cli/commands/production/cmd.py +887 -0
  8. makea_cli-0.1.22/makea_cli/commands/production/pricing_spec.py +726 -0
  9. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/supplier/cmd.py +464 -57
  10. {makea_cli-0.1.20 → makea_cli-0.1.22}/pyproject.toml +1 -1
  11. makea_cli-0.1.20/makea_cli/__init__.py +0 -1
  12. {makea_cli-0.1.20 → makea_cli-0.1.22}/.claude/skills/create-supplier-profile/SKILL.md +0 -0
  13. {makea_cli-0.1.20 → makea_cli-0.1.22}/.claude/skills/lark-cli-setup/SKILL.md +0 -0
  14. {makea_cli-0.1.20 → makea_cli-0.1.22}/.claude/skills/link-supplier-user/SKILL.md +0 -0
  15. {makea_cli-0.1.20 → makea_cli-0.1.22}/.claude/skills/makea-cli-setup/SKILL.md +0 -0
  16. {makea_cli-0.1.20 → makea_cli-0.1.22}/.claude/skills/payment-revenue-report/SKILL.md +0 -0
  17. {makea_cli-0.1.20 → makea_cli-0.1.22}/.claude/skills/supplier-user-id-migration/SKILL.md +0 -0
  18. {makea_cli-0.1.20 → makea_cli-0.1.22}/.gitignore +0 -0
  19. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea-collection-upload/SKILL.md +0 -0
  20. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea-collection-upload/scripts/create_products.py +0 -0
  21. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/__main__.py +0 -0
  22. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/auth_pkce.py +0 -0
  23. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/_util.py +0 -0
  24. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/analytics/__init__.py +0 -0
  25. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/analytics/cmd.py +0 -0
  26. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/auth/__init__.py +0 -0
  27. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/auth/cmd.py +0 -0
  28. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/designer/__init__.py +0 -0
  29. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/designer/cmd.py +0 -0
  30. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/directory/__init__.py +0 -0
  31. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/directory/cmd.py +0 -0
  32. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/document/__init__.py +0 -0
  33. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/document/cmd.py +0 -0
  34. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/email/__init__.py +0 -0
  35. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/email/cmd.py +0 -0
  36. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/library/__init__.py +0 -0
  37. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/library/cmd.py +0 -0
  38. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/metrics/__init__.py +0 -0
  39. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/metrics/cmd.py +0 -0
  40. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/orders/__init__.py +0 -0
  41. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/orders/cmd.py +0 -0
  42. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/product/__init__.py +0 -0
  43. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/product/cmd.py +0 -0
  44. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/commands/supplier/__init__.py +0 -0
  45. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/config.py +0 -0
  46. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/main.py +0 -0
  47. {makea_cli-0.1.20 → makea_cli-0.1.22}/makea_cli/posthog_client.py +0 -0
  48. {makea_cli-0.1.20 → makea_cli-0.1.22}/npm/makea-cli/README.md +0 -0
  49. {makea_cli-0.1.20 → makea_cli-0.1.22}/npm/makea-cli/makea-cli.mjs +0 -0
  50. {makea_cli-0.1.20 → makea_cli-0.1.22}/npm/makea-cli/package.json +0 -0
  51. {makea_cli-0.1.20 → makea_cli-0.1.22}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: makea-cli
3
- Version: 0.1.20
3
+ Version: 0.1.22
4
4
  Summary: Makea admin CLI (browser login + Makea admin HTTP API)
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: httpx>=0.27
@@ -82,10 +82,16 @@ makea-cli auth --logout
82
82
  - `makea-cli create-quote-request -s <supplier_id> -p <product_reference_id> [--quote-type SAMPLING|PRODUCTION] [--message ...] [--due-date YYYY-MM-DD]` — 创建并发送 quote request(POST `/admin/supplier/create_quote_request`)
83
83
  - `makea-cli get-quote-requests-by-supplier-id <supplier_id> [--status <status>] [-n <limit>]` — 直连后端按 supplier_id 查询 quote requests
84
84
  - `makea-cli get-supplier-links-by-supplier-id <supplier_id> [--link-type SAMPLING|PRODUCTION]` — 直连后端按 supplier_id 查询 supplier links
85
- - `makea-cli submit-supplier-quote <quote_request_id> --link-name ... --currency ... --sampling-price-amount ... --sampling-price-valid-until ... --production-price-tiers-json ... --sample-lead-time ... --lead-time ... --deliverables-json ... --customer-note ...` — 以供应商身份向指定 quote request 新增 quote(完整参数说明见 `--help`)
85
+ - `makea-cli submit-supplier-quote <quote_request_id> --link-name ... --currency ... --sampling-price-value ... --sampling-price-valid-until ... --sample-lead-time ... --deliverables-json ... --customer-note ...` — 以 admin 身份代供应商向指定 quote request 新增 quote。大货阶梯价(`--production-price-tiers-json`)和 `--lead-time` 现在是可选的;样衣加做费、MOQ 口径、寄料地址(CMT / full package 打样报价必填)、可选尺码颜色、规格行、typed link 等字段见 `--help`。pricing groups 提交时给不进去,提交完用 `update-supplier-quote` 补
86
+ - `makea-cli update-supplier-quote <product_id> <link_id> [--sampling-price-value ... --sampling-price-valid-until ...] [--production-price-tiers-json ...] [--pricing-groups-json ...] [...]` — 改一条已提交的 quote(supplier link):只发你传的字段,没传的后端不动;pricing groups(多套阶梯价)只有这条命令能写(POST `/admin/product/edit_supplier_link_override_info`)
86
87
  - `makea-cli list-product-orders` — 列出所有设计师产品订单(GET `/admin/designer/get_all_product_orders`)
87
88
  - `makea-cli list-sampling-orders-by-product <id>` — 按产品 reference id 列打样单
88
89
  - `makea-cli list-production-orders-by-product <id>` — 按产品 reference id 列大货单
90
+ - `makea-cli production-pricing-show <production_order_id>` — 看一张大货单的定价现状:币种、MOQ、阶梯价、尺码/颜色、pricing groups、购物车覆盖情况(加 `--json` 出原始字段)
91
+ - `makea-cli production-variants-set <production_order_id> --sizes S,M,L --color "Black:#000000"` — 改这张单的可选尺码和颜色(cart key 就是由它们拼出来的)
92
+ - `makea-cli production-tiers-set <production_order_id> --tier 100-199:7.50 --tier 500+:7.20 --moq 100` — 改整单口径的阶梯价 / MOQ / incoterm / 币种
93
+ - `makea-cli production-groups-generate <production_order_id> --by style|colour|variant|all` — 按某个轴生成 pricing groups,连带每组的阶梯价和 MOQ
94
+ - `makea-cli production-groups-set <production_order_id> --file groups.json | --from-quote | --clear` — 整体写入 pricing groups:文件回放、从供应商报价拷贝、或清空回退到整单阶梯价
89
95
  - `makea-cli download-document <document_id> -u <user_id>` — 下载单个文件(GET `/admin/document/download`)
90
96
  - `makea-cli download-product-document <product_reference_id> <document_id> -d <designer_user_id>` — 按产品行 + 文档 id 下载(内部用订单列表 JSON,不额外查 metadata)
91
97
  - `makea-cli upload-product-document -u <designer_user_id> -p <product_id> -f <path>` — 通用产品文档上传(不限 quote 流程):上传到 AWS S3 并挂到产品(POST `/admin/designer/upload_document`),返回 document domain 元数据供其它命令使用
@@ -100,6 +106,47 @@ makea-cli auth --logout
100
106
 
101
107
  ---
102
108
 
109
+ ## 大货定价(price tier / 颜色尺码 / pricing group)
110
+
111
+ 一张 production order 的价格由三部分组成:
112
+
113
+ 1. `available_sizes` / `available_colors` — 买家购物车的网格。cart key 是 `"{尺码},{颜色}"`,颜色段有 hex 就用 `hex_code`,没有才退回 `color_name`。所以颜色尽量都给 hex。
114
+ 2. `production_price_tiers` + `moq` — 整单一套阶梯价。**只在这张单没有 pricing group 时生效**。
115
+ 3. `pricing_groups` — 若干个各自计价的 cart key 分组。分组回答"谁共用一套价目表",`tier_basis` / `moq_basis` 回答"按什么量去查这套表"(VARIANT 每个 cart key 各算各的,GROUP 按组内合计,ORDER 按全单合计)。
116
+
117
+ MOQ 的几种配法就是这两个旋钮的组合:
118
+
119
+ | 想要的效果 | 命令 |
120
+ |---|---|
121
+ | 每个 style 自己的阶梯价 + 自己的 MOQ | `--by style --moq-basis group` |
122
+ | 每个颜色一个 MOQ,跨所有 style 累计 | `--by colour --moq-basis group` |
123
+ | 每个颜色 × 尺码单独计价 | `--by variant --moq-basis group` |
124
+ | 全单一套价,MOQ 看全单总量 | `--by all --moq-basis order` |
125
+
126
+ 阶梯写法:`--tier 100-199:7.50 --tier 200-499:7.40 --tier 500+:7.20`。结尾的 `+`(或只写下限)表示不封顶,存成 `max_qty=0`;后端从低到高选,最后一个够 `min_qty` 的档位胜出。
127
+
128
+ 单组覆盖:`--tier-for 'S=100-199:22.45'`、`--moq-for 'S=100'`,等号左边可以写组名、尺码、颜色名或 hex。
129
+
130
+ 例(参考 Lacati 毯子那张报价的形态:三个尺寸各一套价,MOQ 100/组):
131
+
132
+ ```bash
133
+ makea-cli production-variants-set <po_id> --sizes S,M,L --customized-color
134
+ makea-cli production-groups-generate <po_id> --by style \
135
+ --tier-for 'S=100-199:7.50' --tier-for 'S=300+:7.20' \
136
+ --tier-for 'M=100-199:22.45' --tier-for 'M=300+:21.85' \
137
+ --tier-for 'L=100-199:33.05' --tier-for 'L=300+:32.25' \
138
+ --moq 100 --moq-basis group --tier-basis VARIANT --dry-run
139
+ ```
140
+
141
+ 几条要记住的:
142
+
143
+ - 写命令都先打印 plan 再问一次;`--dry-run` 只看不发,`--yes` 跳过确认。默认打的是**生产环境**。
144
+ - 购物车里有、却没被任何组认领的 cart key,付款时会整单失败(不是按 0 计价)。plan 和保存结果都会把这些 key 列出来。
145
+ - 重跑 `production-groups-generate` 会保留同名/同变体旧组的 `group_id` 和这次没指定的字段,所以"只改 MOQ"是安全的。
146
+ - 已经付过款的单,改这里不会动已经收的钱(发票读冻结值),只影响之后的扣款。
147
+
148
+ ---
149
+
103
150
  ## Claude / Cursor skills(可选)
104
151
 
105
152
  仓库内 `.claude/skills/` 下放有面向 agent 的操作说明,例如:
@@ -71,10 +71,16 @@ makea-cli auth --logout
71
71
  - `makea-cli create-quote-request -s <supplier_id> -p <product_reference_id> [--quote-type SAMPLING|PRODUCTION] [--message ...] [--due-date YYYY-MM-DD]` — 创建并发送 quote request(POST `/admin/supplier/create_quote_request`)
72
72
  - `makea-cli get-quote-requests-by-supplier-id <supplier_id> [--status <status>] [-n <limit>]` — 直连后端按 supplier_id 查询 quote requests
73
73
  - `makea-cli get-supplier-links-by-supplier-id <supplier_id> [--link-type SAMPLING|PRODUCTION]` — 直连后端按 supplier_id 查询 supplier links
74
- - `makea-cli submit-supplier-quote <quote_request_id> --link-name ... --currency ... --sampling-price-amount ... --sampling-price-valid-until ... --production-price-tiers-json ... --sample-lead-time ... --lead-time ... --deliverables-json ... --customer-note ...` — 以供应商身份向指定 quote request 新增 quote(完整参数说明见 `--help`)
74
+ - `makea-cli submit-supplier-quote <quote_request_id> --link-name ... --currency ... --sampling-price-value ... --sampling-price-valid-until ... --sample-lead-time ... --deliverables-json ... --customer-note ...` — 以 admin 身份代供应商向指定 quote request 新增 quote。大货阶梯价(`--production-price-tiers-json`)和 `--lead-time` 现在是可选的;样衣加做费、MOQ 口径、寄料地址(CMT / full package 打样报价必填)、可选尺码颜色、规格行、typed link 等字段见 `--help`。pricing groups 提交时给不进去,提交完用 `update-supplier-quote` 补
75
+ - `makea-cli update-supplier-quote <product_id> <link_id> [--sampling-price-value ... --sampling-price-valid-until ...] [--production-price-tiers-json ...] [--pricing-groups-json ...] [...]` — 改一条已提交的 quote(supplier link):只发你传的字段,没传的后端不动;pricing groups(多套阶梯价)只有这条命令能写(POST `/admin/product/edit_supplier_link_override_info`)
75
76
  - `makea-cli list-product-orders` — 列出所有设计师产品订单(GET `/admin/designer/get_all_product_orders`)
76
77
  - `makea-cli list-sampling-orders-by-product <id>` — 按产品 reference id 列打样单
77
78
  - `makea-cli list-production-orders-by-product <id>` — 按产品 reference id 列大货单
79
+ - `makea-cli production-pricing-show <production_order_id>` — 看一张大货单的定价现状:币种、MOQ、阶梯价、尺码/颜色、pricing groups、购物车覆盖情况(加 `--json` 出原始字段)
80
+ - `makea-cli production-variants-set <production_order_id> --sizes S,M,L --color "Black:#000000"` — 改这张单的可选尺码和颜色(cart key 就是由它们拼出来的)
81
+ - `makea-cli production-tiers-set <production_order_id> --tier 100-199:7.50 --tier 500+:7.20 --moq 100` — 改整单口径的阶梯价 / MOQ / incoterm / 币种
82
+ - `makea-cli production-groups-generate <production_order_id> --by style|colour|variant|all` — 按某个轴生成 pricing groups,连带每组的阶梯价和 MOQ
83
+ - `makea-cli production-groups-set <production_order_id> --file groups.json | --from-quote | --clear` — 整体写入 pricing groups:文件回放、从供应商报价拷贝、或清空回退到整单阶梯价
78
84
  - `makea-cli download-document <document_id> -u <user_id>` — 下载单个文件(GET `/admin/document/download`)
79
85
  - `makea-cli download-product-document <product_reference_id> <document_id> -d <designer_user_id>` — 按产品行 + 文档 id 下载(内部用订单列表 JSON,不额外查 metadata)
80
86
  - `makea-cli upload-product-document -u <designer_user_id> -p <product_id> -f <path>` — 通用产品文档上传(不限 quote 流程):上传到 AWS S3 并挂到产品(POST `/admin/designer/upload_document`),返回 document domain 元数据供其它命令使用
@@ -89,6 +95,47 @@ makea-cli auth --logout
89
95
 
90
96
  ---
91
97
 
98
+ ## 大货定价(price tier / 颜色尺码 / pricing group)
99
+
100
+ 一张 production order 的价格由三部分组成:
101
+
102
+ 1. `available_sizes` / `available_colors` — 买家购物车的网格。cart key 是 `"{尺码},{颜色}"`,颜色段有 hex 就用 `hex_code`,没有才退回 `color_name`。所以颜色尽量都给 hex。
103
+ 2. `production_price_tiers` + `moq` — 整单一套阶梯价。**只在这张单没有 pricing group 时生效**。
104
+ 3. `pricing_groups` — 若干个各自计价的 cart key 分组。分组回答"谁共用一套价目表",`tier_basis` / `moq_basis` 回答"按什么量去查这套表"(VARIANT 每个 cart key 各算各的,GROUP 按组内合计,ORDER 按全单合计)。
105
+
106
+ MOQ 的几种配法就是这两个旋钮的组合:
107
+
108
+ | 想要的效果 | 命令 |
109
+ |---|---|
110
+ | 每个 style 自己的阶梯价 + 自己的 MOQ | `--by style --moq-basis group` |
111
+ | 每个颜色一个 MOQ,跨所有 style 累计 | `--by colour --moq-basis group` |
112
+ | 每个颜色 × 尺码单独计价 | `--by variant --moq-basis group` |
113
+ | 全单一套价,MOQ 看全单总量 | `--by all --moq-basis order` |
114
+
115
+ 阶梯写法:`--tier 100-199:7.50 --tier 200-499:7.40 --tier 500+:7.20`。结尾的 `+`(或只写下限)表示不封顶,存成 `max_qty=0`;后端从低到高选,最后一个够 `min_qty` 的档位胜出。
116
+
117
+ 单组覆盖:`--tier-for 'S=100-199:22.45'`、`--moq-for 'S=100'`,等号左边可以写组名、尺码、颜色名或 hex。
118
+
119
+ 例(参考 Lacati 毯子那张报价的形态:三个尺寸各一套价,MOQ 100/组):
120
+
121
+ ```bash
122
+ makea-cli production-variants-set <po_id> --sizes S,M,L --customized-color
123
+ makea-cli production-groups-generate <po_id> --by style \
124
+ --tier-for 'S=100-199:7.50' --tier-for 'S=300+:7.20' \
125
+ --tier-for 'M=100-199:22.45' --tier-for 'M=300+:21.85' \
126
+ --tier-for 'L=100-199:33.05' --tier-for 'L=300+:32.25' \
127
+ --moq 100 --moq-basis group --tier-basis VARIANT --dry-run
128
+ ```
129
+
130
+ 几条要记住的:
131
+
132
+ - 写命令都先打印 plan 再问一次;`--dry-run` 只看不发,`--yes` 跳过确认。默认打的是**生产环境**。
133
+ - 购物车里有、却没被任何组认领的 cart key,付款时会整单失败(不是按 0 计价)。plan 和保存结果都会把这些 key 列出来。
134
+ - 重跑 `production-groups-generate` 会保留同名/同变体旧组的 `group_id` 和这次没指定的字段,所以"只改 MOQ"是安全的。
135
+ - 已经付过款的单,改这里不会动已经收的钱(发票读冻结值),只影响之后的扣款。
136
+
137
+ ---
138
+
92
139
  ## Claude / Cursor skills(可选)
93
140
 
94
141
  仓库内 `.claude/skills/` 下放有面向 agent 的操作说明,例如:
@@ -0,0 +1 @@
1
+ __version__ = "0.1.22"
@@ -390,6 +390,27 @@ def submit_admin_quote_for_quote_request(
390
390
  return post_json(f"/admin/quote_requests/{quote_request_id}/submit_quote", body)
391
391
 
392
392
 
393
+ def edit_supplier_link_override_info(
394
+ *,
395
+ product_id: str,
396
+ link_id: str,
397
+ override_info: dict[str, Any],
398
+ ) -> Any:
399
+ """
400
+ POST /admin/product/edit_supplier_link_override_info — admin updates an existing
401
+ supplier link (a submitted quote) in place. Only the keys present in
402
+ ``override_info`` are applied; the rest of the link is left alone.
403
+ """
404
+ return post_json(
405
+ "/admin/product/edit_supplier_link_override_info",
406
+ {
407
+ "product_id": product_id,
408
+ "link_id": link_id,
409
+ "override_info": override_info,
410
+ },
411
+ )
412
+
413
+
393
414
  def upload_admin_link_document(
394
415
  *,
395
416
  file_path: Path,
@@ -652,6 +673,40 @@ def get_production_orders_by_product(
652
673
  )
653
674
 
654
675
 
676
+ def get_production_order_details(production_order_id: str, *, timeout: float = 60.0) -> Any:
677
+ """
678
+ GET /admin/production_orders/{id}/details — one production (or restock) order in full.
679
+
680
+ Carries the pricing configuration the pricing commands read and write back:
681
+ currency, moq, production_price_tiers, pricing_groups, available_sizes,
682
+ available_colors, cart_items.
683
+ """
684
+ return get_json(f"/admin/production_orders/{production_order_id}/details", timeout=timeout)
685
+
686
+
687
+ def update_production_order_details(
688
+ production_order_id: str,
689
+ body: dict[str, Any],
690
+ *,
691
+ timeout: float = 60.0,
692
+ ) -> Any:
693
+ """
694
+ POST /admin/production_orders/{id}/details/update — patch-style admin update.
695
+
696
+ Only the keys present in ``body`` are touched (moq, production_price_tiers,
697
+ pricing_groups, production_price_incoterm, production_price_valid_until,
698
+ available_sizes, available_colors, currency, lead_time, payment_term,
699
+ one_time_production_fees, sizechart, component_specifications). The response
700
+ may carry a ``warning`` plus ``uncovered_cart_keys`` when the saved pricing
701
+ groups do not price the whole cart.
702
+ """
703
+ return post_json(
704
+ f"/admin/production_orders/{production_order_id}/details/update",
705
+ body,
706
+ timeout=timeout,
707
+ )
708
+
709
+
655
710
  def get_cumulative_payment_and_platform_revenue(
656
711
  *,
657
712
  start_date: str,
@@ -12,6 +12,7 @@ from makea_cli.commands.library.cmd import register as register_library
12
12
  from makea_cli.commands.metrics.cmd import register as register_metrics
13
13
  from makea_cli.commands.orders.cmd import register as register_orders
14
14
  from makea_cli.commands.product.cmd import register as register_product
15
+ from makea_cli.commands.production.cmd import register as register_production
15
16
  from makea_cli.commands.supplier.cmd import register as register_supplier
16
17
 
17
18
 
@@ -22,6 +23,7 @@ def register_all(app: typer.Typer) -> None:
22
23
  register_supplier(app)
23
24
  register_orders(app)
24
25
  register_product(app)
26
+ register_production(app)
25
27
  register_designer(app)
26
28
  register_metrics(app)
27
29
  register_analytics(app)
@@ -0,0 +1,3 @@
1
+ from makea_cli.commands.production.cmd import register
2
+
3
+ __all__ = ["register"]