@harrylabsj/kiwi 0.7.22 → 0.9.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.
Files changed (332) hide show
  1. package/README.md +45 -10
  2. package/dist/a2a/negotiate.d.ts +6 -2
  3. package/dist/a2a/negotiate.js +10 -3
  4. package/dist/a2a/negotiate.js.map +1 -1
  5. package/dist/a2a/node.d.ts +4 -1
  6. package/dist/a2a/node.js +57 -4
  7. package/dist/a2a/node.js.map +1 -1
  8. package/dist/a2a/server/merchant-handler.d.ts +11 -3
  9. package/dist/a2a/server/merchant-handler.js +84 -26
  10. package/dist/a2a/server/merchant-handler.js.map +1 -1
  11. package/dist/agent/buyer/buyer-tools.js +17 -10
  12. package/dist/agent/buyer/buyer-tools.js.map +1 -1
  13. package/dist/agent/buyer/scheduler.d.ts +1 -0
  14. package/dist/agent/buyer/scheduler.js +5 -1
  15. package/dist/agent/buyer/scheduler.js.map +1 -1
  16. package/dist/agent/buyer/task-store.js +5 -2
  17. package/dist/agent/buyer/task-store.js.map +1 -1
  18. package/dist/agent/chat-tools.js +10 -3
  19. package/dist/agent/chat-tools.js.map +1 -1
  20. package/dist/agent/context/fencing.d.ts +27 -0
  21. package/dist/agent/context/fencing.js +126 -0
  22. package/dist/agent/context/fencing.js.map +1 -0
  23. package/dist/agent/context/grounding.d.ts +18 -0
  24. package/dist/agent/context/grounding.js +22 -0
  25. package/dist/agent/context/grounding.js.map +1 -0
  26. package/dist/agent/host/events.d.ts +31 -0
  27. package/dist/agent/host/events.js +62 -0
  28. package/dist/agent/host/events.js.map +1 -0
  29. package/dist/agent/host/tui-renderer.d.ts +17 -0
  30. package/dist/agent/host/tui-renderer.js +125 -0
  31. package/dist/agent/host/tui-renderer.js.map +1 -0
  32. package/dist/agent/host/web-renderer.d.ts +71 -0
  33. package/dist/agent/host/web-renderer.js +185 -0
  34. package/dist/agent/host/web-renderer.js.map +1 -0
  35. package/dist/agent/kernel-builder.d.ts +3 -1
  36. package/dist/agent/kernel-builder.js +4 -1
  37. package/dist/agent/kernel-builder.js.map +1 -1
  38. package/dist/agent/kernel.d.ts +20 -1
  39. package/dist/agent/kernel.js +255 -14
  40. package/dist/agent/kernel.js.map +1 -1
  41. package/dist/agent/memory/schema.d.ts +1 -1
  42. package/dist/agent/memory/schema.js +9 -1
  43. package/dist/agent/memory/schema.js.map +1 -1
  44. package/dist/agent/merchant/action-candidate.d.ts +18 -0
  45. package/dist/agent/merchant/action-candidate.js +51 -0
  46. package/dist/agent/merchant/action-candidate.js.map +1 -1
  47. package/dist/agent/merchant/fake-merchant-client.js +6 -1
  48. package/dist/agent/merchant/fake-merchant-client.js.map +1 -1
  49. package/dist/agent/merchant/intelligence/backend.d.ts +40 -0
  50. package/dist/agent/merchant/intelligence/backend.js +2 -0
  51. package/dist/agent/merchant/intelligence/backend.js.map +1 -0
  52. package/dist/agent/merchant/intelligence/default-backend.d.ts +38 -0
  53. package/dist/agent/merchant/intelligence/default-backend.js +477 -0
  54. package/dist/agent/merchant/intelligence/default-backend.js.map +1 -0
  55. package/dist/agent/merchant/intelligence/http-analytics-source.d.ts +55 -0
  56. package/dist/agent/merchant/intelligence/http-analytics-source.js +193 -0
  57. package/dist/agent/merchant/intelligence/http-analytics-source.js.map +1 -0
  58. package/dist/agent/merchant/intelligence/types.d.ts +109 -0
  59. package/dist/agent/merchant/intelligence/types.js +2 -0
  60. package/dist/agent/merchant/intelligence/types.js.map +1 -0
  61. package/dist/agent/merchant/merchant-client.d.ts +50 -1
  62. package/dist/agent/merchant/merchant-client.js +157 -8
  63. package/dist/agent/merchant/merchant-client.js.map +1 -1
  64. package/dist/agent/merchant/merchant-enrichment.d.ts +10 -0
  65. package/dist/agent/merchant/merchant-enrichment.js +38 -0
  66. package/dist/agent/merchant/merchant-enrichment.js.map +1 -0
  67. package/dist/agent/merchant/merchant-grounding.d.ts +5 -0
  68. package/dist/agent/merchant/merchant-grounding.js +76 -0
  69. package/dist/agent/merchant/merchant-grounding.js.map +1 -0
  70. package/dist/agent/merchant/merchant-presentations.d.ts +8 -0
  71. package/dist/agent/merchant/merchant-presentations.js +207 -0
  72. package/dist/agent/merchant/merchant-presentations.js.map +1 -0
  73. package/dist/agent/merchant/merchant-tools.d.ts +8 -0
  74. package/dist/agent/merchant/merchant-tools.js +291 -178
  75. package/dist/agent/merchant/merchant-tools.js.map +1 -1
  76. package/dist/agent/merchant/types.d.ts +6 -2
  77. package/dist/agent/merchant/types.js +45 -0
  78. package/dist/agent/merchant/types.js.map +1 -1
  79. package/dist/agent/presentation/registry.d.ts +14 -0
  80. package/dist/agent/presentation/registry.js +24 -0
  81. package/dist/agent/presentation/registry.js.map +1 -0
  82. package/dist/agent/presentation/runner.d.ts +11 -0
  83. package/dist/agent/presentation/runner.js +17 -0
  84. package/dist/agent/presentation/runner.js.map +1 -0
  85. package/dist/agent/presentation/sanitize.d.ts +16 -0
  86. package/dist/agent/presentation/sanitize.js +37 -0
  87. package/dist/agent/presentation/sanitize.js.map +1 -0
  88. package/dist/agent/presentation/types.d.ts +28 -0
  89. package/dist/agent/presentation/types.js +8 -0
  90. package/dist/agent/presentation/types.js.map +1 -0
  91. package/dist/agent/session.d.ts +1 -1
  92. package/dist/agent/session.js +2 -2
  93. package/dist/agent/session.js.map +1 -1
  94. package/dist/agent/skills/registry.d.ts +11 -0
  95. package/dist/agent/skills/registry.js +119 -0
  96. package/dist/agent/skills/registry.js.map +1 -0
  97. package/dist/agent/skills/tools.d.ts +6 -0
  98. package/dist/agent/skills/tools.js +36 -0
  99. package/dist/agent/skills/tools.js.map +1 -0
  100. package/dist/agent/skills/types.d.ts +9 -0
  101. package/dist/agent/skills/types.js +2 -0
  102. package/dist/agent/skills/types.js.map +1 -0
  103. package/dist/agent/supplier/scheduler.d.ts +2 -0
  104. package/dist/agent/supplier/scheduler.js +101 -22
  105. package/dist/agent/supplier/scheduler.js.map +1 -1
  106. package/dist/agent/supplier/store.d.ts +2 -0
  107. package/dist/agent/supplier/store.js +44 -0
  108. package/dist/agent/supplier/store.js.map +1 -1
  109. package/dist/agent/system-prompt.d.ts +5 -1
  110. package/dist/agent/system-prompt.js +20 -3
  111. package/dist/agent/system-prompt.js.map +1 -1
  112. package/dist/auth/merchant-authorization.d.ts +49 -0
  113. package/dist/auth/merchant-authorization.js +61 -0
  114. package/dist/auth/merchant-authorization.js.map +1 -0
  115. package/dist/auth/merchant-oauth.d.ts +255 -0
  116. package/dist/auth/merchant-oauth.js +764 -0
  117. package/dist/auth/merchant-oauth.js.map +1 -0
  118. package/dist/auth/merchant-pairing.d.ts +62 -0
  119. package/dist/auth/merchant-pairing.js +199 -0
  120. package/dist/auth/merchant-pairing.js.map +1 -0
  121. package/dist/auth/merchant-sessions.d.ts +71 -0
  122. package/dist/auth/merchant-sessions.js +168 -0
  123. package/dist/auth/merchant-sessions.js.map +1 -0
  124. package/dist/buyer-core/build-service.d.ts +5 -0
  125. package/dist/buyer-core/build-service.js +12 -0
  126. package/dist/buyer-core/build-service.js.map +1 -1
  127. package/dist/buyer-core/errors.d.ts +1 -1
  128. package/dist/buyer-core/errors.js +2 -0
  129. package/dist/buyer-core/errors.js.map +1 -1
  130. package/dist/buyer-core/merchant-index.d.ts +19 -4
  131. package/dist/buyer-core/merchant-index.js +137 -16
  132. package/dist/buyer-core/merchant-index.js.map +1 -1
  133. package/dist/buyer-core/negotiator.d.ts +0 -10
  134. package/dist/buyer-core/negotiator.js +12 -1
  135. package/dist/buyer-core/negotiator.js.map +1 -1
  136. package/dist/buyer-core/quote-fetcher.js +2 -1
  137. package/dist/buyer-core/quote-fetcher.js.map +1 -1
  138. package/dist/buyer-core/service.d.ts +104 -0
  139. package/dist/buyer-core/service.js +105 -1
  140. package/dist/buyer-core/service.js.map +1 -1
  141. package/dist/cli.d.ts +4 -2
  142. package/dist/cli.js +644 -32
  143. package/dist/cli.js.map +1 -1
  144. package/dist/config/profile.d.ts +51 -0
  145. package/dist/config/profile.js +185 -61
  146. package/dist/config/profile.js.map +1 -1
  147. package/dist/demo/demo-runner.js +12 -9
  148. package/dist/demo/demo-runner.js.map +1 -1
  149. package/dist/discovery/catalog-source/buyer-follows.d.ts +82 -0
  150. package/dist/discovery/catalog-source/buyer-follows.js +228 -0
  151. package/dist/discovery/catalog-source/buyer-follows.js.map +1 -0
  152. package/dist/discovery/catalog-source/connector-identity.d.ts +75 -0
  153. package/dist/discovery/catalog-source/connector-identity.js +175 -0
  154. package/dist/discovery/catalog-source/connector-identity.js.map +1 -0
  155. package/dist/discovery/catalog-source/errors.d.ts +1 -1
  156. package/dist/discovery/catalog-source/errors.js +2 -0
  157. package/dist/discovery/catalog-source/errors.js.map +1 -1
  158. package/dist/discovery/catalog-source/kiwi-record.d.ts +2 -0
  159. package/dist/discovery/catalog-source/kiwi-record.js.map +1 -1
  160. package/dist/discovery/catalog-source/kiwi-source.js +2 -0
  161. package/dist/discovery/catalog-source/kiwi-source.js.map +1 -1
  162. package/dist/discovery/catalog-source/merchant-publications.d.ts +65 -0
  163. package/dist/discovery/catalog-source/merchant-publications.js +207 -0
  164. package/dist/discovery/catalog-source/merchant-publications.js.map +1 -0
  165. package/dist/discovery/catalog-source/register.d.ts +24 -0
  166. package/dist/discovery/catalog-source/register.js +46 -0
  167. package/dist/discovery/catalog-source/register.js.map +1 -1
  168. package/dist/discovery/catalog-source/source.js +2 -1
  169. package/dist/discovery/catalog-source/source.js.map +1 -1
  170. package/dist/fs/atomic-write.d.ts +18 -0
  171. package/dist/fs/atomic-write.js +29 -0
  172. package/dist/fs/atomic-write.js.map +1 -0
  173. package/dist/handoff/authorization.js +1 -1
  174. package/dist/http/merchant-server.d.ts +65 -0
  175. package/dist/http/merchant-server.js +346 -0
  176. package/dist/http/merchant-server.js.map +1 -0
  177. package/dist/http/server.js +4 -1
  178. package/dist/http/server.js.map +1 -1
  179. package/dist/mcp/cli.d.ts +2 -0
  180. package/dist/mcp/cli.js +7 -6
  181. package/dist/mcp/cli.js.map +1 -1
  182. package/dist/mcp/merchant-auth.d.ts +78 -0
  183. package/dist/mcp/merchant-auth.js +146 -0
  184. package/dist/mcp/merchant-auth.js.map +1 -0
  185. package/dist/mcp/merchant-dirs.d.ts +26 -0
  186. package/dist/mcp/merchant-dirs.js +44 -0
  187. package/dist/mcp/merchant-dirs.js.map +1 -0
  188. package/dist/mcp/merchant-resources.d.ts +38 -0
  189. package/dist/mcp/merchant-resources.js +146 -0
  190. package/dist/mcp/merchant-resources.js.map +1 -0
  191. package/dist/mcp/merchant-server.d.ts +106 -0
  192. package/dist/mcp/merchant-server.js +615 -0
  193. package/dist/mcp/merchant-server.js.map +1 -0
  194. package/dist/mcp/merchant-tools.d.ts +103 -0
  195. package/dist/mcp/merchant-tools.js +517 -0
  196. package/dist/mcp/merchant-tools.js.map +1 -0
  197. package/dist/mcp/server.js +4 -3
  198. package/dist/mcp/server.js.map +1 -1
  199. package/dist/mcp/tools.d.ts +5 -3
  200. package/dist/mcp/tools.js +102 -5
  201. package/dist/mcp/tools.js.map +1 -1
  202. package/dist/mcp/types.d.ts +1 -1
  203. package/dist/mcp/types.js +4 -0
  204. package/dist/mcp/types.js.map +1 -1
  205. package/dist/merchant/ops.d.ts +0 -11
  206. package/dist/merchant/ops.js +13 -1
  207. package/dist/merchant/ops.js.map +1 -1
  208. package/dist/merchant/stats-store.d.ts +7 -0
  209. package/dist/merchant/stats-store.js +11 -0
  210. package/dist/merchant/stats-store.js.map +1 -1
  211. package/dist/merchant/workbench-service.d.ts +189 -0
  212. package/dist/merchant/workbench-service.js +417 -0
  213. package/dist/merchant/workbench-service.js.map +1 -0
  214. package/dist/merchant-admin/pending-page.d.ts +35 -0
  215. package/dist/merchant-admin/pending-page.js +69 -0
  216. package/dist/merchant-admin/pending-page.js.map +1 -0
  217. package/dist/merchant-core/commands.d.ts +99 -0
  218. package/dist/merchant-core/commands.js +179 -0
  219. package/dist/merchant-core/commands.js.map +1 -0
  220. package/dist/merchant-core/executor.d.ts +69 -0
  221. package/dist/merchant-core/executor.js +218 -0
  222. package/dist/merchant-core/executor.js.map +1 -0
  223. package/dist/merchant-core/negotiation-adapters.d.ts +55 -0
  224. package/dist/merchant-core/negotiation-adapters.js +55 -0
  225. package/dist/merchant-core/negotiation-adapters.js.map +1 -0
  226. package/dist/merchant-core/network-checks.d.ts +65 -0
  227. package/dist/merchant-core/network-checks.js +111 -0
  228. package/dist/merchant-core/network-checks.js.map +1 -0
  229. package/dist/merchant-core/operations.d.ts +64 -0
  230. package/dist/merchant-core/operations.js +136 -0
  231. package/dist/merchant-core/operations.js.map +1 -0
  232. package/dist/merchant-core/policy-runtime.d.ts +70 -0
  233. package/dist/merchant-core/policy-runtime.js +181 -0
  234. package/dist/merchant-core/policy-runtime.js.map +1 -0
  235. package/dist/merchant-core/product-import.d.ts +67 -0
  236. package/dist/merchant-core/product-import.js +160 -0
  237. package/dist/merchant-core/product-import.js.map +1 -0
  238. package/dist/merchant-core/service.d.ts +203 -0
  239. package/dist/merchant-core/service.js +402 -0
  240. package/dist/merchant-core/service.js.map +1 -0
  241. package/dist/merchant-gateway/catalog-publications.d.ts +71 -0
  242. package/dist/merchant-gateway/catalog-publications.js +175 -0
  243. package/dist/merchant-gateway/catalog-publications.js.map +1 -0
  244. package/dist/merchant-gateway/catalog-tools.d.ts +46 -0
  245. package/dist/merchant-gateway/catalog-tools.js +277 -0
  246. package/dist/merchant-gateway/catalog-tools.js.map +1 -0
  247. package/dist/merchant-gateway/cli.d.ts +75 -0
  248. package/dist/merchant-gateway/cli.js +458 -0
  249. package/dist/merchant-gateway/cli.js.map +1 -0
  250. package/dist/merchant-gateway/credential-vault.d.ts +44 -0
  251. package/dist/merchant-gateway/credential-vault.js +111 -0
  252. package/dist/merchant-gateway/credential-vault.js.map +1 -0
  253. package/dist/merchant-gateway/entry-server.d.ts +117 -0
  254. package/dist/merchant-gateway/entry-server.js +710 -0
  255. package/dist/merchant-gateway/entry-server.js.map +1 -0
  256. package/dist/merchant-gateway/instance-registration.d.ts +143 -0
  257. package/dist/merchant-gateway/instance-registration.js +382 -0
  258. package/dist/merchant-gateway/instance-registration.js.map +1 -0
  259. package/dist/merchant-gateway/instance-tools.d.ts +58 -0
  260. package/dist/merchant-gateway/instance-tools.js +184 -0
  261. package/dist/merchant-gateway/instance-tools.js.map +1 -0
  262. package/dist/merchant-gateway/mcp-proxy.d.ts +25 -0
  263. package/dist/merchant-gateway/mcp-proxy.js +192 -0
  264. package/dist/merchant-gateway/mcp-proxy.js.map +1 -0
  265. package/dist/merchant-gateway/pinned-fetch.d.ts +52 -0
  266. package/dist/merchant-gateway/pinned-fetch.js +212 -0
  267. package/dist/merchant-gateway/pinned-fetch.js.map +1 -0
  268. package/dist/merchant-gateway/tenant-registry.d.ts +82 -0
  269. package/dist/merchant-gateway/tenant-registry.js +190 -0
  270. package/dist/merchant-gateway/tenant-registry.js.map +1 -0
  271. package/dist/merchant-gateway/tool-bundle.d.ts +26 -0
  272. package/dist/merchant-gateway/tool-bundle.js +56 -0
  273. package/dist/merchant-gateway/tool-bundle.js.map +1 -0
  274. package/dist/merchant-runtime/backup.d.ts +48 -0
  275. package/dist/merchant-runtime/backup.js +226 -0
  276. package/dist/merchant-runtime/backup.js.map +1 -0
  277. package/dist/merchant-runtime/health.d.ts +99 -0
  278. package/dist/merchant-runtime/health.js +206 -0
  279. package/dist/merchant-runtime/health.js.map +1 -0
  280. package/dist/merchant-runtime/jobs.d.ts +64 -0
  281. package/dist/merchant-runtime/jobs.js +107 -0
  282. package/dist/merchant-runtime/jobs.js.map +1 -0
  283. package/dist/merchant-runtime/manager.d.ts +94 -0
  284. package/dist/merchant-runtime/manager.js +305 -0
  285. package/dist/merchant-runtime/manager.js.map +1 -0
  286. package/dist/merchant-runtime/services.d.ts +30 -0
  287. package/dist/merchant-runtime/services.js +51 -0
  288. package/dist/merchant-runtime/services.js.map +1 -0
  289. package/dist/negotiation/action-candidate.js +1 -1
  290. package/dist/net/url.d.ts +26 -0
  291. package/dist/net/url.js +32 -0
  292. package/dist/net/url.js.map +1 -0
  293. package/dist/operator/types.d.ts +1 -1
  294. package/dist/product-cli.d.ts +2 -2
  295. package/dist/product-cli.js +27 -6
  296. package/dist/product-cli.js.map +1 -1
  297. package/dist/product-compat.d.ts +9 -1
  298. package/dist/product-compat.js +12 -1
  299. package/dist/product-compat.js.map +1 -1
  300. package/dist/product-init.js +17 -5
  301. package/dist/product-init.js.map +1 -1
  302. package/dist/product-publish.js +2 -1
  303. package/dist/product-publish.js.map +1 -1
  304. package/dist/product-supplier.d.ts +73 -0
  305. package/dist/product-supplier.js +224 -5
  306. package/dist/product-supplier.js.map +1 -1
  307. package/dist/runtime/fake-model.d.ts +1 -1
  308. package/dist/trust/identity/jwk.d.ts +11 -0
  309. package/dist/trust/identity/jwk.js +2 -0
  310. package/dist/trust/identity/jwk.js.map +1 -0
  311. package/dist/trust/identity/jws.d.ts +2 -1
  312. package/dist/trust/identity/jws.js.map +1 -1
  313. package/dist/trust/identity/keys.d.ts +2 -1
  314. package/dist/trust/identity/keys.js.map +1 -1
  315. package/dist/trust/identity/message-signature.d.ts +1 -14
  316. package/dist/trust/identity/message-signature.js.map +1 -1
  317. package/dist/weixin/channel.d.ts +3 -0
  318. package/dist/weixin/channel.js +18 -2
  319. package/dist/weixin/channel.js.map +1 -1
  320. package/examples/profiles/merchant.deepseek.yaml +6 -0
  321. package/examples/profiles/merchant.fake.yaml +6 -0
  322. package/examples/profiles/merchant.local.yaml +6 -0
  323. package/package.json +9 -7
  324. package/skills/kiwi-buyer/SKILL.md +68 -0
  325. package/skills/merchant/catalog-operations/SKILL.md +17 -0
  326. package/skills/merchant/change-approval/SKILL.md +16 -0
  327. package/skills/merchant/human-review/SKILL.md +17 -0
  328. package/skills/merchant/inventory-operations/SKILL.md +17 -0
  329. package/skills/merchant/negotiation-review/SKILL.md +18 -0
  330. package/skills/merchant/performance-insights/SKILL.md +19 -0
  331. package/contracts/candidate-agent-dto-1.0.README.md +0 -43
  332. package/contracts/conformance/python-service/README.md +0 -19
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Copyright 2026 harrylabsj
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /**
17
+ * Merchant Workbench 的 7 个 MVP MCP 工具定义(WorkBuddy Buddy 应用开发计划
18
+ * 阶段二)。全部 handler 委托 MerchantWorkbenchService(阶段一 Facade)——
19
+ * 本层只做协议适配:稳定 name/description/inputSchema(JSON Schema,
20
+ * additionalProperties: false)、structuredContent 返回、统一错误映射
21
+ * (MerchantWorkbenchError → isError 带内返回,中文标签与 agent 工具层
22
+ * errorText 一致)、响应体大小保护(超长截断并注明)与单次调用 30s 超时。
23
+ *
24
+ * 写类工具(kiwi_merchant_prepare_product_change)只返回审批候选元数据,绝不直接执行。
25
+ */
26
+ import type { MerchantWorkbenchSurface } from "../merchant/workbench-service.js";
27
+ /** 单次工具调用的响应体大小上限(字符;对齐 agent 侧 experienceMaxChars 缺省)。 */
28
+ export declare const MERCHANT_MCP_MAX_RESPONSE_CHARS = 12000;
29
+ /** 单次工具调用的处理超时(WorkBuddy 连接器 30s 上限)。 */
30
+ export declare const MERCHANT_MCP_REQUEST_TIMEOUT_MS = 30000;
31
+ export interface MerchantMcpToolDefinition {
32
+ name: string;
33
+ description: string;
34
+ /** 原始 JSON Schema(不做 zod 依赖;additionalProperties: false)。 */
35
+ inputSchema: Record<string, unknown>;
36
+ }
37
+ export interface MerchantMcpCallResult {
38
+ content: Array<{
39
+ type: "text";
40
+ text: string;
41
+ }>;
42
+ structuredContent?: Record<string, unknown>;
43
+ isError?: true;
44
+ }
45
+ export interface MerchantMcpToolsOptions {
46
+ maxChars?: number;
47
+ requestTimeoutMs?: number;
48
+ }
49
+ /** 命令写面(V2 阶段三;merchant-core 提供,facade 不具备——缺失时对应工具报「不可得」)。 */
50
+ export type MerchantCommandSurface = {
51
+ prepareProductCreate(input: {
52
+ product: unknown;
53
+ reason?: string;
54
+ }): Promise<import("../merchant-core/commands.js").PreparedCommand>;
55
+ prepareInventoryUpdate(input: {
56
+ sku: string;
57
+ stock: number;
58
+ reason?: string;
59
+ }): Promise<import("../merchant-core/commands.js").PreparedCommand>;
60
+ prepareListingChange(input: {
61
+ sku: string;
62
+ paused: boolean;
63
+ reason?: string;
64
+ }): Promise<import("../merchant-core/commands.js").PreparedCommand>;
65
+ prepareReviewResolve(input: {
66
+ source_protocol: "a2a" | "shopping";
67
+ source_id: string;
68
+ resolution: string;
69
+ reason?: string;
70
+ }): Promise<import("../merchant-core/commands.js").PreparedCommand>;
71
+ preparePolicyChange(input: {
72
+ patch: Record<string, unknown>;
73
+ reason?: string;
74
+ }): Promise<import("../merchant-core/commands.js").PreparedCommand>;
75
+ executeApproved(commandId: string): Promise<unknown>;
76
+ rejectCandidate(commandId: string): Promise<unknown>;
77
+ prepareProductsImport(input: {
78
+ csv: string;
79
+ idempotency_key?: string;
80
+ reason?: string;
81
+ }): Promise<import("../merchant-core/commands.js").PreparedCommand>;
82
+ prepareProductsWithdraw(input: {
83
+ skus: string[];
84
+ idempotency_key?: string;
85
+ reason?: string;
86
+ }): Promise<import("../merchant-core/commands.js").PreparedCommand>;
87
+ getOperation(operationId: string): Promise<import("../merchant-core/operations.js").MerchantOperation> | import("../merchant-core/operations.js").MerchantOperation;
88
+ };
89
+ /** 工具所需最小 scope。 */
90
+ export declare function requiredScopeForTool(name: string): "merchant:read" | "merchant:write";
91
+ /**
92
+ * 构建 7 个 MVP 工具的定义与分发器。`call(name, args, scopes)` 返回 MCP
93
+ * CallToolResult 形状;业务错误与未知工具名一律带内 isError 返回(中文说明)。
94
+ *
95
+ * scope 过滤(V2 阶段一):scopes 来自 OAuth access_token 授权上下文;
96
+ * undefined = 静态 token 过渡模式(全量)。`listTools(scopes)` 只列出已授权
97
+ * 工具;`call` 逐次强制校验(服务端不依赖 tools/list 的展示过滤)。
98
+ */
99
+ export declare function buildMerchantMcpTools(service: MerchantWorkbenchSurface, options?: MerchantMcpToolsOptions): {
100
+ tools: MerchantMcpToolDefinition[];
101
+ listTools: (scopes?: string[]) => MerchantMcpToolDefinition[];
102
+ call: (name: string, args: Record<string, unknown>, scopes?: string[]) => Promise<MerchantMcpCallResult>;
103
+ };
@@ -0,0 +1,517 @@
1
+ /**
2
+ * Copyright 2026 harrylabsj
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { MerchantWorkbenchError } from "../merchant/workbench-service.js";
17
+ /** 单次工具调用的响应体大小上限(字符;对齐 agent 侧 experienceMaxChars 缺省)。 */
18
+ export const MERCHANT_MCP_MAX_RESPONSE_CHARS = 12_000;
19
+ /** 单次工具调用的处理超时(WorkBuddy 连接器 30s 上限)。 */
20
+ export const MERCHANT_MCP_REQUEST_TIMEOUT_MS = 30_000;
21
+ /** MerchantWorkbenchError kind → 中文标签(与 agent 工具层 errorText 一致)。 */
22
+ const KIND_LABEL = {
23
+ auth: "凭据被拒或缺失",
24
+ not_found: "未找到",
25
+ validation: "参数或服务校验失败",
26
+ unavailable: "暂时性错误",
27
+ };
28
+ function errorResult(err) {
29
+ if (err instanceof MerchantWorkbenchError) {
30
+ return {
31
+ content: [{ type: "text", text: `商家操作失败(${KIND_LABEL[err.kind]}):${err.message}` }],
32
+ isError: true,
33
+ };
34
+ }
35
+ // 审查 P2:非业务异常(底层实现错误)不透出内部细节(文件路径/网关 URL
36
+ // 等)——对客户端收敛为统一文案,完整错误进服务端 stderr 日志。
37
+ process.stderr.write(`[merchant mcp] 工具调用底层异常:${err instanceof Error ? (err.stack ?? err.message) : String(err)}\n`);
38
+ return {
39
+ content: [
40
+ {
41
+ type: "text",
42
+ text: "商家操作失败(暂时性错误):请稍后重试;若持续失败请查看服务端日志。",
43
+ },
44
+ ],
45
+ isError: true,
46
+ };
47
+ }
48
+ /** 响应体大小保护:超长截断并注明(fenceModelPayload maxChars 同思路)。 */
49
+ function okResult(payload, maxChars) {
50
+ const text = JSON.stringify(payload);
51
+ if (text.length <= maxChars) {
52
+ return { content: [{ type: "text", text }], structuredContent: payload };
53
+ }
54
+ return {
55
+ content: [
56
+ {
57
+ type: "text",
58
+ text: `${text.slice(0, Math.max(1, maxChars - 1))}…` +
59
+ `(响应过大已截断:共 ${text.length} 字符,上限 ${maxChars};请缩小查询范围,例如降低 limit)`,
60
+ },
61
+ ],
62
+ structuredContent: { truncated: true, total_chars: text.length },
63
+ };
64
+ }
65
+ /** 单次调用超时保护:超时即拒绝,绝不悬挂连接。 */
66
+ async function withTimeout(work, timeoutMs) {
67
+ let timer;
68
+ try {
69
+ return await Promise.race([
70
+ work,
71
+ new Promise((_resolve, reject) => {
72
+ timer = setTimeout(() => reject(
73
+ // 审查 P2:超时不取消底层工作——prepare 可能仍已落库成功,
74
+ // 提示先查待批准列表,避免重试生成重复候选。
75
+ new MerchantWorkbenchError("unavailable", `请求超时(${Math.round(timeoutMs / 1000)}s 上限);底层操作可能仍在完成——` +
76
+ "写操作请先用只读工具查询待批准候选,确认未生成后再重试")), timeoutMs);
77
+ }),
78
+ ]);
79
+ }
80
+ finally {
81
+ if (timer !== undefined)
82
+ clearTimeout(timer);
83
+ }
84
+ }
85
+ /** draft_product_change 的候选元数据投影(只含公开字段,绝不回传执行结果)。 */
86
+ function draftResultPayload(result) {
87
+ const candidate = "candidate" in result.outcome ? result.outcome.candidate : undefined;
88
+ return {
89
+ kind: result.outcome.kind,
90
+ ...(candidate !== undefined
91
+ ? {
92
+ candidate_id: candidate.candidate_id,
93
+ tool: candidate.tool,
94
+ status: candidate.status,
95
+ risk: candidate.risk,
96
+ expires_at: candidate.expires_at,
97
+ created_at: candidate.created_at,
98
+ }
99
+ : {}),
100
+ product: result.product,
101
+ };
102
+ }
103
+ /** 撤回 SKU 列表校验(审查 P2:此前 .map(String) 把非字符串元素静默变成
104
+ * "[object Object]",登记无效命令白烧人工确认)。 */
105
+ function parseSkuList(value) {
106
+ if (!Array.isArray(value) || value.some((s) => typeof s !== "string" || s.trim() === "")) {
107
+ throw new MerchantWorkbenchError("validation", "skus 必须是非空字符串数组");
108
+ }
109
+ return value;
110
+ }
111
+ /** 命令写面守卫:facade-only 调用方缺命令面时 fail-closed 报「不可得」。 */
112
+ function commandSurface(service) {
113
+ const s = service;
114
+ if (typeof s.prepareProductCreate !== "function") {
115
+ throw new MerchantWorkbenchError("unavailable", "命令写面不可用(需要 merchant-core 服务)");
116
+ }
117
+ return s;
118
+ }
119
+ /** prepare 结果投影:候选元数据 + 预览(prepare 不执行)。 */
120
+ function preparedPayload(prepared) {
121
+ const c = prepared.candidate;
122
+ return {
123
+ kind: "pending_approval",
124
+ command_id: c.candidate_id,
125
+ tool: c.tool,
126
+ status: c.status,
127
+ risk: c.risk,
128
+ expires_at: c.expires_at,
129
+ created_at: c.created_at,
130
+ preview: prepared.preview,
131
+ };
132
+ }
133
+ /** 写类工具(scope 过滤:要求 merchant:write;其余只读工具要求 merchant:read)。 */
134
+ const WRITE_TOOLS = new Set([
135
+ "kiwi_merchant_prepare_product_change",
136
+ "kiwi_merchant_prepare_product_create",
137
+ "kiwi_merchant_prepare_inventory_update",
138
+ "kiwi_merchant_prepare_listing_change",
139
+ "kiwi_merchant_prepare_review_resolve",
140
+ "kiwi_merchant_prepare_policy_change",
141
+ "kiwi_merchant_prepare_products_import",
142
+ "kiwi_merchant_prepare_products_withdraw",
143
+ ]);
144
+ /** 工具所需最小 scope。 */
145
+ export function requiredScopeForTool(name) {
146
+ return WRITE_TOOLS.has(name) ? "merchant:write" : "merchant:read";
147
+ }
148
+ /** scope 判定:scopes === undefined 表示静态 token 过渡模式(全量放行)。 */
149
+ function scopeAllows(scopes, required) {
150
+ if (scopes === undefined)
151
+ return true;
152
+ return scopes.includes(required);
153
+ }
154
+ /**
155
+ * 构建 7 个 MVP 工具的定义与分发器。`call(name, args, scopes)` 返回 MCP
156
+ * CallToolResult 形状;业务错误与未知工具名一律带内 isError 返回(中文说明)。
157
+ *
158
+ * scope 过滤(V2 阶段一):scopes 来自 OAuth access_token 授权上下文;
159
+ * undefined = 静态 token 过渡模式(全量)。`listTools(scopes)` 只列出已授权
160
+ * 工具;`call` 逐次强制校验(服务端不依赖 tools/list 的展示过滤)。
161
+ */
162
+ export function buildMerchantMcpTools(service, options = {}) {
163
+ const maxChars = options.maxChars ?? MERCHANT_MCP_MAX_RESPONSE_CHARS;
164
+ const timeoutMs = options.requestTimeoutMs ?? MERCHANT_MCP_REQUEST_TIMEOUT_MS;
165
+ const handlers = {
166
+ kiwi_merchant_list_products: async () => {
167
+ const { items, source } = await service.listPublicProducts();
168
+ return { count: items.length, source, items };
169
+ },
170
+ kiwi_merchant_get_product: async (args) => {
171
+ const product = await service.getPublicProduct(typeof args.sku === "string" ? args.sku : "", typeof args.merchant_id === "string" ? args.merchant_id : undefined);
172
+ return { product };
173
+ },
174
+ kiwi_merchant_get_inventory: async (args) => {
175
+ const snapshot = await service.getInventorySnapshot(typeof args.sku === "string" ? args.sku : "");
176
+ return { snapshot };
177
+ },
178
+ kiwi_merchant_list_a2a_negotiations: async (args) => {
179
+ const { total, items } = await service.listA2aNegotiations(args.limit);
180
+ return { total, count: items.length, items };
181
+ },
182
+ kiwi_merchant_list_human_reviews: async () => {
183
+ const items = await service.listHumanReviews();
184
+ return { count: items.length, items };
185
+ },
186
+ kiwi_merchant_get_analytics: async (args) => {
187
+ const snapshot = await service.getAnalytics(typeof args.period === "string" ? args.period : undefined);
188
+ return { snapshot };
189
+ },
190
+ kiwi_merchant_prepare_product_change: async (args) => {
191
+ const result = await service.draftProductChange({
192
+ sku: typeof args.sku === "string" ? args.sku : "",
193
+ changes: args.changes,
194
+ ...(typeof args.reason === "string" ? { reason: args.reason } : {}),
195
+ ...(typeof args.merchant_id === "string" ? { merchant_id: args.merchant_id } : {}),
196
+ });
197
+ return draftResultPayload(result);
198
+ },
199
+ // ---- V2 阶段三写闭环工具(命令记录 + 执行器;全部 merchant:write scope)----
200
+ kiwi_merchant_prepare_product_create: async (args) => commandSurface(service)
201
+ .prepareProductCreate({
202
+ product: args.product,
203
+ ...(typeof args.reason === "string" ? { reason: args.reason } : {}),
204
+ })
205
+ .then(preparedPayload),
206
+ kiwi_merchant_prepare_inventory_update: async (args) => {
207
+ // 审查 P2:类型不符直接 validation(此前哨兵 -1 静默登记无效命令)。
208
+ if (typeof args.stock !== "number") {
209
+ throw new MerchantWorkbenchError("validation", "stock 必须是数字(非负整数)");
210
+ }
211
+ if (typeof args.sku !== "string" || args.sku.trim() === "") {
212
+ throw new MerchantWorkbenchError("validation", "sku 必须是非空字符串");
213
+ }
214
+ return commandSurface(service)
215
+ .prepareInventoryUpdate({
216
+ sku: args.sku,
217
+ stock: args.stock,
218
+ ...(typeof args.reason === "string" ? { reason: args.reason } : {}),
219
+ })
220
+ .then(preparedPayload);
221
+ },
222
+ kiwi_merchant_prepare_listing_change: async (args) => {
223
+ // 审查 P2:paused 非布尔直接拒绝——`"true" === true` 为 false 会把
224
+ // 「下架」请求静默变成「恢复销售」,反转操作者意图。
225
+ if (typeof args.paused !== "boolean") {
226
+ throw new MerchantWorkbenchError("validation", "paused 必须是布尔值(true=暂停销售,false=恢复销售)");
227
+ }
228
+ if (typeof args.sku !== "string" || args.sku.trim() === "") {
229
+ throw new MerchantWorkbenchError("validation", "sku 必须是非空字符串");
230
+ }
231
+ return commandSurface(service)
232
+ .prepareListingChange({
233
+ sku: args.sku,
234
+ paused: args.paused,
235
+ ...(typeof args.reason === "string" ? { reason: args.reason } : {}),
236
+ })
237
+ .then(preparedPayload);
238
+ },
239
+ kiwi_merchant_prepare_review_resolve: async (args) => {
240
+ // 审查 P2:非法枚举直接拒绝——此前非 "a2a" 一律静默落到 shopping
241
+ // 可执行轨道(含 "A2A"/拼写错误),违背「绝不跨轨」语义。
242
+ if (args.source_protocol !== "a2a" && args.source_protocol !== "shopping") {
243
+ throw new MerchantWorkbenchError("validation", 'source_protocol 必须是 "a2a" 或 "shopping"');
244
+ }
245
+ if (typeof args.source_id !== "string" || args.source_id.trim() === "") {
246
+ throw new MerchantWorkbenchError("validation", "source_id 必须是非空字符串");
247
+ }
248
+ if (typeof args.resolution !== "string" || args.resolution.trim() === "") {
249
+ throw new MerchantWorkbenchError("validation", "resolution 必须是非空字符串");
250
+ }
251
+ return commandSurface(service)
252
+ .prepareReviewResolve({
253
+ source_protocol: args.source_protocol,
254
+ source_id: args.source_id,
255
+ resolution: args.resolution,
256
+ ...(typeof args.reason === "string" ? { reason: args.reason } : {}),
257
+ })
258
+ .then(preparedPayload);
259
+ },
260
+ kiwi_merchant_prepare_policy_change: async (args) => commandSurface(service)
261
+ .preparePolicyChange({
262
+ patch: (args.patch ?? {}),
263
+ ...(typeof args.reason === "string" ? { reason: args.reason } : {}),
264
+ })
265
+ .then(preparedPayload),
266
+ // BUG-02:批准/拒绝已从 MCP 工具注册表移除(模型不可见不可调)——
267
+ // 确认只经管理页面(cookie 会话 + 一次性确认凭证)。
268
+ // ---- V2 阶段四:CSV 导入/撤回(长任务 + 幂等)与 operation 查询 ----
269
+ kiwi_merchant_prepare_products_import: async (args) => commandSurface(service)
270
+ .prepareProductsImport({
271
+ csv: typeof args.csv === "string" ? args.csv : "",
272
+ ...(typeof args.idempotency_key === "string"
273
+ ? { idempotency_key: args.idempotency_key }
274
+ : {}),
275
+ ...(typeof args.reason === "string" ? { reason: args.reason } : {}),
276
+ })
277
+ .then(preparedPayload),
278
+ kiwi_merchant_prepare_products_withdraw: async (args) => commandSurface(service)
279
+ .prepareProductsWithdraw({
280
+ skus: parseSkuList(args.skus),
281
+ ...(typeof args.idempotency_key === "string"
282
+ ? { idempotency_key: args.idempotency_key }
283
+ : {}),
284
+ ...(typeof args.reason === "string" ? { reason: args.reason } : {}),
285
+ })
286
+ .then(preparedPayload),
287
+ kiwi_merchant_get_operation: async (args) => {
288
+ const op = await commandSurface(service).getOperation(typeof args.operation_id === "string" ? args.operation_id : "");
289
+ return { operation: op };
290
+ },
291
+ };
292
+ const skuParam = { type: "string", description: "商品 SKU" };
293
+ const merchantIdParam = {
294
+ type: "string",
295
+ description: "租户校验(可选):提供时必须等于本商家 merchant_id",
296
+ };
297
+ const tools = [
298
+ {
299
+ name: "kiwi_merchant_list_products",
300
+ description: "列出商家自己的目录商品(只读;公开字段白名单,无私有底价/成本)。",
301
+ inputSchema: { type: "object", properties: {}, additionalProperties: false },
302
+ },
303
+ {
304
+ name: "kiwi_merchant_get_product",
305
+ description: "按 SKU 读取商家目录中的一个商品(只读,公开字段白名单)。",
306
+ inputSchema: {
307
+ type: "object",
308
+ properties: { sku: skuParam, merchant_id: merchantIdParam },
309
+ required: ["sku"],
310
+ additionalProperties: false,
311
+ },
312
+ },
313
+ {
314
+ name: "kiwi_merchant_get_inventory",
315
+ description: "读取一个商品的当前库存快照(含观察时间,不是永恒事实)。",
316
+ inputSchema: {
317
+ type: "object",
318
+ properties: { sku: skuParam },
319
+ required: ["sku"],
320
+ additionalProperties: false,
321
+ },
322
+ },
323
+ {
324
+ name: "kiwi_merchant_list_a2a_negotiations",
325
+ description: "列出商家节点的 A2A 磋商记录(结构化行:negotiation_id、相位、SKU、数量、报价、是否达成协议、时间)。",
326
+ inputSchema: {
327
+ type: "object",
328
+ properties: {
329
+ limit: {
330
+ type: "integer",
331
+ minimum: 1,
332
+ maximum: 100,
333
+ description: "最多返回最近 N 笔(缺省 20,clamp 1..100)",
334
+ },
335
+ },
336
+ additionalProperties: false,
337
+ },
338
+ },
339
+ {
340
+ name: "kiwi_merchant_list_human_reviews",
341
+ description: "查看商家需要人工处理的队列(升级、超预算/超底价、转人工的磋商)。",
342
+ inputSchema: { type: "object", properties: {}, additionalProperties: false },
343
+ },
344
+ {
345
+ name: "kiwi_merchant_get_analytics",
346
+ description: "读取当前商家经营摘要(只读;指标由服务端计算。未配置指标后端时返回明确错误,不给演示数据)。",
347
+ inputSchema: {
348
+ type: "object",
349
+ properties: {
350
+ period: {
351
+ type: "string",
352
+ pattern: "^(?:[1-9]|[1-8][0-9]|90)d$",
353
+ description: "UTC 统计窗口,1d 到 90d,例如 7d、14d、30d",
354
+ },
355
+ },
356
+ additionalProperties: false,
357
+ },
358
+ },
359
+ {
360
+ name: "kiwi_merchant_prepare_product_change",
361
+ description: "为一个商品变更生成审批候选(不立即执行,任何模式都不自动执行)。操作者批准后才会真正写入;只返回候选元数据。",
362
+ inputSchema: {
363
+ type: "object",
364
+ properties: {
365
+ sku: skuParam,
366
+ changes: {
367
+ type: "object",
368
+ description: "计划修改的字段(title/price/stock/description 等)",
369
+ },
370
+ reason: { type: "string", description: "变更原因(可选)" },
371
+ merchant_id: merchantIdParam,
372
+ },
373
+ required: ["sku", "changes"],
374
+ additionalProperties: false,
375
+ },
376
+ },
377
+ {
378
+ name: "kiwi_merchant_prepare_product_create",
379
+ description: "登记商品创建命令(prepare:只产持久命令候选与预览,不执行)。经确认通道批准后才由执行器写入。",
380
+ inputSchema: {
381
+ type: "object",
382
+ properties: {
383
+ product: {
384
+ type: "object",
385
+ description: "sku/title/price/stock 必填;currency/category/tags/description 可选",
386
+ },
387
+ reason: { type: "string", description: "变更原因(可选)" },
388
+ },
389
+ required: ["product"],
390
+ additionalProperties: false,
391
+ },
392
+ },
393
+ {
394
+ name: "kiwi_merchant_prepare_inventory_update",
395
+ description: "登记库存调整命令(prepare:只产候选与预览,不执行)。stock 必须是非负整数。",
396
+ inputSchema: {
397
+ type: "object",
398
+ properties: {
399
+ sku: skuParam,
400
+ stock: { type: "integer", minimum: 0, description: "新的库存数量(>= 0)" },
401
+ reason: { type: "string", description: "变更原因(可选)" },
402
+ },
403
+ required: ["sku", "stock"],
404
+ additionalProperties: false,
405
+ },
406
+ },
407
+ {
408
+ name: "kiwi_merchant_prepare_listing_change",
409
+ description: "登记商品销售状态变更(F08:暂停/恢复销售)。上游不支持时返回明确「不可得」,不降级为库存写零。",
410
+ inputSchema: {
411
+ type: "object",
412
+ properties: {
413
+ sku: skuParam,
414
+ paused: { type: "boolean", description: "true 暂停销售,false 恢复销售" },
415
+ reason: { type: "string", description: "变更原因(可选)" },
416
+ },
417
+ required: ["sku", "paused"],
418
+ additionalProperties: false,
419
+ },
420
+ },
421
+ {
422
+ name: "kiwi_merchant_prepare_review_resolve",
423
+ description: "登记人工处理命令(F14 两轨路由:仅 shopping 轨可执行;A2A 轨报「不可得」——绝不跨轨调 shopping-cli resolve-review)。",
424
+ inputSchema: {
425
+ type: "object",
426
+ properties: {
427
+ source_protocol: {
428
+ type: "string",
429
+ enum: ["a2a", "shopping"],
430
+ description: "磋商来源轨道",
431
+ },
432
+ source_id: { type: "string", description: "轨道内 id(conversation_id)" },
433
+ resolution: { type: "string", description: "处理结论" },
434
+ reason: { type: "string", description: "变更原因(可选)" },
435
+ },
436
+ required: ["source_protocol", "source_id", "resolution"],
437
+ additionalProperties: false,
438
+ },
439
+ },
440
+ {
441
+ name: "kiwi_merchant_prepare_policy_change",
442
+ description: "登记策略变更命令(F17:执行器写入后热生效,不重启进程;硬策略由执行器强制)。",
443
+ inputSchema: {
444
+ type: "object",
445
+ properties: {
446
+ patch: { type: "object", description: "策略变更字段(merchant_policy 键)" },
447
+ reason: { type: "string", description: "变更原因(可选)" },
448
+ },
449
+ required: ["patch"],
450
+ additionalProperties: false,
451
+ },
452
+ },
453
+ {
454
+ name: "kiwi_merchant_prepare_products_import",
455
+ description: "CSV 商品导入(prepare:解析预览 + 逐行回执,不执行)。相同幂等键不重复导入;批准后逐行执行,部分成功逐项回执。",
456
+ inputSchema: {
457
+ type: "object",
458
+ properties: {
459
+ csv: {
460
+ type: "string",
461
+ description: "CSV 文本(表头 sku,title,price,stock[,currency][,category][,description])",
462
+ },
463
+ idempotency_key: { type: "string", description: "幂等键(可选;缺省按 CSV 内容 hash)" },
464
+ reason: { type: "string", description: "变更原因(可选)" },
465
+ },
466
+ required: ["csv"],
467
+ additionalProperties: false,
468
+ },
469
+ },
470
+ {
471
+ name: "kiwi_merchant_prepare_products_withdraw",
472
+ description: "批量撤回商品(listing 销售状态语义;prepare:只产候选,批准后执行;相同幂等键不重复撤回)。上游不支持时逐项回执明确失败。",
473
+ inputSchema: {
474
+ type: "object",
475
+ properties: {
476
+ skus: { type: "array", items: { type: "string" }, description: "要撤回的 SKU 列表" },
477
+ idempotency_key: { type: "string", description: "幂等键(可选)" },
478
+ reason: { type: "string", description: "变更原因(可选)" },
479
+ },
480
+ required: ["skus"],
481
+ additionalProperties: false,
482
+ },
483
+ },
484
+ {
485
+ name: "kiwi_merchant_get_operation",
486
+ description: "查询长任务状态(operation_id;queued/running/succeeded/partially_failed/failed + 逐项回执)。",
487
+ inputSchema: {
488
+ type: "object",
489
+ properties: { operation_id: { type: "string", description: "长任务 id" } },
490
+ required: ["operation_id"],
491
+ additionalProperties: false,
492
+ },
493
+ },
494
+ ];
495
+ const call = async (name, args, scopes) => {
496
+ const handler = handlers[name];
497
+ if (handler === undefined) {
498
+ // 未知工具名:带内 isError(连接器统一处理),而非 JSON-RPC 协议错误。
499
+ return errorResult(new MerchantWorkbenchError("validation", `未知工具 ${name}`));
500
+ }
501
+ // scope 强制校验(服务端逐次执行,不依赖 tools/list 展示过滤)。
502
+ const required = requiredScopeForTool(name);
503
+ if (!scopeAllows(scopes, required)) {
504
+ return errorResult(new MerchantWorkbenchError("auth", `scope 不足:${name} 需要 ${required}(当前授权:${(scopes ?? []).join(" ") || "无"})`));
505
+ }
506
+ try {
507
+ const payload = await withTimeout(handler(args), timeoutMs);
508
+ return okResult(payload, maxChars);
509
+ }
510
+ catch (err) {
511
+ return errorResult(err);
512
+ }
513
+ };
514
+ const listTools = (scopes) => tools.filter((t) => scopeAllows(scopes, requiredScopeForTool(t.name)));
515
+ return { tools, listTools, call };
516
+ }
517
+ //# sourceMappingURL=merchant-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merchant-tools.js","sourceRoot":"","sources":["../../src/mcp/merchant-tools.ts"],"names":[],"mappings":"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"}