@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,477 @@
1
+ import { existsSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { LedgerStore } from "../../../negotiation/ledger/index.js";
4
+ import { TERMINAL_PHASES } from "../../../negotiation/state/phase.js";
5
+ import { openMerchantStatsStore } from "../../../merchant/stats-store.js";
6
+ import { publicCandidatePreview } from "../merchant-enrichment.js";
7
+ const DEFAULT_DAYS = 14;
8
+ const MAX_DAYS = 90;
9
+ function utcNow() {
10
+ return new Date().toISOString();
11
+ }
12
+ function dayShift(day, delta) {
13
+ return new Date(Date.parse(`${day}T00:00:00Z`) + delta * 86_400_000).toISOString().slice(0, 10);
14
+ }
15
+ function periodWindow(period, now) {
16
+ const today = now.slice(0, 10);
17
+ const label = period ?? `${DEFAULT_DAYS}d`;
18
+ const match = /^(\d+)d$/i.exec(label);
19
+ if (match?.[1] === undefined)
20
+ throw new Error("period must use Nd syntax, for example 7d or 30d");
21
+ const days = Number(match[1]);
22
+ if (!Number.isSafeInteger(days) || days < 1 || days > MAX_DAYS) {
23
+ throw new Error(`period days must be between 1 and ${MAX_DAYS}`);
24
+ }
25
+ return { label: `${days}d`, since: dayShift(today, -(days - 1)) };
26
+ }
27
+ function metricBucket(date, granularity) {
28
+ if (granularity === "day")
29
+ return date;
30
+ if (granularity === "month")
31
+ return `${date.slice(0, 7)}-01`;
32
+ const parsed = new Date(`${date}T00:00:00Z`);
33
+ const day = parsed.getUTCDay();
34
+ const mondayOffset = day === 0 ? -6 : 1 - day;
35
+ return dayShift(date, mondayOffset);
36
+ }
37
+ function aggregateMetricPoints(points, granularity) {
38
+ if (granularity === "day")
39
+ return points;
40
+ const totals = new Map();
41
+ for (const point of points) {
42
+ const bucket = metricBucket(point.date, granularity);
43
+ totals.set(bucket, (totals.get(bucket) ?? 0) + point.value);
44
+ }
45
+ return [...totals.entries()].map(([date, value]) => ({ date, value }));
46
+ }
47
+ function aggregateDistinctBuyerPoints(rows, granularity) {
48
+ const buckets = new Map();
49
+ for (const row of rows) {
50
+ const bucket = metricBucket(row.day, granularity);
51
+ const identities = buckets.get(bucket) ?? new Set();
52
+ identities.add(row.buyer_identity);
53
+ buckets.set(bucket, identities);
54
+ }
55
+ return [...buckets.entries()]
56
+ .sort(([left], [right]) => left.localeCompare(right))
57
+ .map(([date, identities]) => ({ date, value: identities.size }));
58
+ }
59
+ function readStatsPath(dataDir) {
60
+ return path.join(dataDir, "a2a", "stats.sqlite");
61
+ }
62
+ function assertOwned(requested, owner) {
63
+ if (requested !== owner)
64
+ throw new Error("merchant identity does not match the bound session");
65
+ }
66
+ function extractNegotiation(negotiationId, events) {
67
+ const tail = events.at(-1);
68
+ if (tail === undefined)
69
+ return undefined;
70
+ let phase = tail.state_transition?.to_phase ?? "OPEN";
71
+ let buyerIdentity = tail.identity.counterparty_identity;
72
+ let updatedAt = tail.recorded_at;
73
+ const skus = new Set();
74
+ let quantity;
75
+ let price;
76
+ let currency;
77
+ let agreementId;
78
+ let lastInboundAt = "";
79
+ let lastInboundAction = "";
80
+ let lastOutboundAt = "";
81
+ for (const event of events) {
82
+ if (event.recorded_at > updatedAt)
83
+ updatedAt = event.recorded_at;
84
+ if (event.state_transition?.to_phase !== undefined)
85
+ phase = event.state_transition.to_phase;
86
+ if (event.identity.counterparty_identity !== "")
87
+ buyerIdentity = event.identity.counterparty_identity;
88
+ if (event.agreement_id !== undefined)
89
+ agreementId = event.agreement_id;
90
+ const payload = event.wire_payload;
91
+ // V2 §8.7:terms 提取覆盖 offer(terms) / counter_offer(proposed_terms) /
92
+ // conditional_offer(base_terms) / 最终协议(agreed_terms)——此前只读 terms,
93
+ // 还价与成交价在摘要里静默丢失。
94
+ const p = payload?.payload;
95
+ const terms = p?.terms ?? p?.proposed_terms ?? p?.base_terms ?? p?.agreed_terms;
96
+ const items = terms?.items ?? [];
97
+ for (const item of items) {
98
+ if (item.sku)
99
+ skus.add(item.sku);
100
+ }
101
+ const item = items[0];
102
+ if (item?.quantity?.value !== undefined)
103
+ quantity = item.quantity.value;
104
+ if (item?.unit_price?.amount_minor !== undefined)
105
+ price = item.unit_price.amount_minor;
106
+ if (item?.unit_price?.currency !== undefined)
107
+ currency = item.unit_price.currency;
108
+ // needs_human_review(V2 §8.7):不简单等价 AWAITING_CLARIFICATION——
109
+ // 非终态且最后一条消息是买家入站(offer/counter_offer/clarification 等待
110
+ // 商家回应)也算需要处理。
111
+ if (event.event_kind === "message_received") {
112
+ lastInboundAt = event.recorded_at;
113
+ lastInboundAction = payload?.action ?? "";
114
+ }
115
+ if (event.event_kind === "message_sent") {
116
+ if (event.recorded_at >= lastOutboundAt)
117
+ lastOutboundAt = event.recorded_at;
118
+ }
119
+ }
120
+ const awaitingMerchant = lastInboundAt !== "" &&
121
+ lastInboundAt > lastOutboundAt &&
122
+ ["offer", "counter_offer", "clarification"].includes(lastInboundAction);
123
+ return {
124
+ negotiation_id: negotiationId,
125
+ phase,
126
+ buyer_identity: buyerIdentity,
127
+ skus: [...skus],
128
+ ...(quantity === undefined ? {} : { quantity }),
129
+ ...(price === undefined ? {} : { latest_price_minor: price }),
130
+ ...(currency === undefined ? {} : { currency }),
131
+ needs_human_review: phase === "AWAITING_CLARIFICATION" ||
132
+ (!TERMINAL_PHASES.includes(phase) && awaitingMerchant),
133
+ updated_at: updatedAt,
134
+ ...(agreementId === undefined ? {} : { agreement_id: agreementId }),
135
+ };
136
+ }
137
+ function agreementsReachedSince(dataDir, since) {
138
+ const ledger = new LedgerStore({ dir: path.join(dataDir, "a2a"), now: utcNow });
139
+ let count = 0;
140
+ for (const negotiationId of ledger.listNegotiations()) {
141
+ if (ledger.events(negotiationId).some((event) => event.state_transition?.to_phase === "AGREEMENT_REACHED" && event.recorded_at.slice(0, 10) >= since)) {
142
+ count += 1;
143
+ }
144
+ }
145
+ return count;
146
+ }
147
+ export class DefaultMerchantIntelligenceBackend {
148
+ merchantId;
149
+ dataDir;
150
+ merchantClient;
151
+ approvals;
152
+ now;
153
+ analyticsSource;
154
+ principalId;
155
+ constructor(deps) {
156
+ this.merchantId = deps.merchant_id;
157
+ this.dataDir = deps.data_dir;
158
+ this.merchantClient = deps.merchant_client;
159
+ this.approvals = deps.approvals;
160
+ this.analyticsSource = deps.analytics_source;
161
+ this.principalId = deps.principal_id ?? this.merchantId;
162
+ this.now = deps.now ?? utcNow;
163
+ }
164
+ validateSourceMetric(metric) {
165
+ if (metric === null || typeof metric !== "object" || Array.isArray(metric))
166
+ return false;
167
+ const value = metric;
168
+ return (typeof value.name === "string" && value.name.length > 0 && value.name.length <= 80 &&
169
+ (value.value === null || (typeof value.value === "number" && Number.isFinite(value.value))) &&
170
+ (value.unit === "count" || value.unit === "percent" || value.unit === "minor_currency") &&
171
+ typeof value.observed_at === "string" && value.observed_at.length > 0 &&
172
+ (value.currency === undefined || typeof value.currency === "string") &&
173
+ (value.note === undefined || typeof value.note === "string"));
174
+ }
175
+ async readAnalyticsMetrics(period) {
176
+ if (this.analyticsSource === undefined)
177
+ return { metrics: [], limitations: [] };
178
+ try {
179
+ const result = await this.analyticsSource.getMetrics({ merchant_id: this.merchantId, period });
180
+ if (result === null || typeof result !== "object" || !Array.isArray(result.metrics)) {
181
+ return { metrics: [], limitations: [{ source: "analytics", note: "分析数据源返回了无效结构" }] };
182
+ }
183
+ const metrics = [];
184
+ const names = new Set();
185
+ let invalidCount = 0;
186
+ let duplicateCount = 0;
187
+ for (const metric of result.metrics) {
188
+ if (!this.validateSourceMetric(metric)) {
189
+ invalidCount += 1;
190
+ continue;
191
+ }
192
+ if (names.has(metric.name)) {
193
+ duplicateCount += 1;
194
+ continue;
195
+ }
196
+ names.add(metric.name);
197
+ metrics.push(metric);
198
+ }
199
+ return {
200
+ metrics,
201
+ limitations: [
202
+ ...(Array.isArray(result.limitations) ? result.limitations.filter((item) => item !== null && typeof item === "object" &&
203
+ typeof item.source === "string" && typeof item.note === "string") : []),
204
+ ...(invalidCount > 0 ? [{ source: "analytics", note: `${invalidCount} 个指标因格式无效被丢弃` }] : []),
205
+ ...(duplicateCount > 0 ? [{ source: "analytics", note: `${duplicateCount} 个重复指标被丢弃` }] : []),
206
+ ],
207
+ };
208
+ }
209
+ catch {
210
+ return { metrics: [], limitations: [{ source: "analytics", note: "销售/活动分析数据源暂时不可用" }] };
211
+ }
212
+ }
213
+ validSourceSeries(value, metric, period, granularity) {
214
+ if (value === null || typeof value !== "object" || Array.isArray(value))
215
+ return false;
216
+ const series = value;
217
+ if (series.metric !== metric || series.period !== period || series.granularity !== granularity ||
218
+ (series.unit !== "count" && series.unit !== "percent" && series.unit !== "minor_currency") ||
219
+ !Array.isArray(series.points) || series.points.length > 10_000)
220
+ return false;
221
+ return series.points.every((point) => {
222
+ if (point === null || typeof point !== "object" || Array.isArray(point))
223
+ return false;
224
+ const item = point;
225
+ return typeof item.date === "string" && item.date.length > 0 && item.date.length <= 32 &&
226
+ typeof item.value === "number" && Number.isFinite(item.value);
227
+ }) && (series.currency === undefined || typeof series.currency === "string") &&
228
+ (series.note === undefined || typeof series.note === "string");
229
+ }
230
+ async getBusinessSnapshot(input) {
231
+ assertOwned(input.merchant_id, this.merchantId);
232
+ const now = this.now();
233
+ const window = periodWindow(input.period, now);
234
+ const limitations = [];
235
+ let distinctBuyers = null;
236
+ let contactEvents = null;
237
+ let negotiations = null;
238
+ let topSkuContacts = [];
239
+ const statsPath = readStatsPath(this.dataDir);
240
+ if (existsSync(statsPath)) {
241
+ const store = openMerchantStatsStore({ dbPath: statsPath });
242
+ try {
243
+ const totals = store.totalsSince(window.since);
244
+ distinctBuyers = totals.distinct_buyers;
245
+ contactEvents = totals.contact_events;
246
+ negotiations = totals.negotiations;
247
+ topSkuContacts = store.topSkus(window.since, 10);
248
+ }
249
+ finally {
250
+ store.close();
251
+ }
252
+ }
253
+ else {
254
+ limitations.push({ source: "merchant_stats", note: "没有买家触达统计数据" });
255
+ }
256
+ const [negotiationDigest, reviews, catalogHealth] = await Promise.all([
257
+ this.getNegotiationDigest({ merchant_id: this.merchantId, status: "active", limit: 100 }),
258
+ this.merchantClient.getHumanReviewQueue(this.merchantId),
259
+ this.getCatalogHealth({ merchant_id: this.merchantId }),
260
+ ]);
261
+ const pending = await this.getPendingActions();
262
+ const analytics = await this.readAnalyticsMetrics(window.label);
263
+ const metricNames = new Set([
264
+ "distinct_buyers",
265
+ "contact_events",
266
+ "negotiations",
267
+ "agreements_reached",
268
+ "agreement_rate",
269
+ "human_review_count",
270
+ "pending_action_count",
271
+ "active_negotiations",
272
+ ]);
273
+ const acceptedAnalytics = analytics.metrics.filter((metric) => {
274
+ if (metricNames.has(metric.name)) {
275
+ analytics.limitations.push({ source: "analytics", note: `指标 ${metric.name} 与本地权威源冲突,已拒绝外部值` });
276
+ return false;
277
+ }
278
+ metricNames.add(metric.name);
279
+ return true;
280
+ });
281
+ const agreementsReached = agreementsReachedSince(this.dataDir, window.since);
282
+ const rawAgreementRate = negotiations === null || negotiations === 0
283
+ ? null
284
+ : Math.round((agreementsReached / negotiations) * 10_000) / 100;
285
+ const agreementRate = rawAgreementRate === null ? null : Math.min(100, Math.max(0, rawAgreementRate));
286
+ if (rawAgreementRate !== null && rawAgreementRate !== agreementRate) {
287
+ limitations.push({ source: "agreement_rate", note: "成交记录与触达统计窗口不完全一致,比例已限制在 0–100%" });
288
+ }
289
+ if (negotiations === null) {
290
+ limitations.push({ source: "negotiation_ledger", note: "无法计算 agreements_reached 和 agreement_rate" });
291
+ }
292
+ else if (negotiations === 0) {
293
+ limitations.push({ source: "agreement_rate", note: "分母 negotiations 为 0,agreement_rate 不适用" });
294
+ }
295
+ return {
296
+ merchant_id: input.merchant_id,
297
+ period: window.label,
298
+ generated_at: now,
299
+ metrics: [
300
+ {
301
+ name: "distinct_buyers",
302
+ value: distinctBuyers,
303
+ unit: "count",
304
+ observed_at: now,
305
+ note: "按认证身份去重,不等同于真实自然人数量",
306
+ },
307
+ { name: "contact_events", value: contactEvents, unit: "count", observed_at: now },
308
+ { name: "negotiations", value: negotiations, unit: "count", observed_at: now },
309
+ { name: "agreements_reached", value: negotiations === null ? null : agreementsReached, unit: "count", observed_at: now },
310
+ {
311
+ name: "agreement_rate",
312
+ value: agreementRate,
313
+ unit: "percent",
314
+ observed_at: now,
315
+ note: "agreements_reached / negotiations;分母为统计窗口内的触达磋商数",
316
+ },
317
+ { name: "human_review_count", value: reviews.length, unit: "count", observed_at: now },
318
+ { name: "pending_action_count", value: pending.length, unit: "count", observed_at: now },
319
+ { name: "active_negotiations", value: negotiationDigest.length, unit: "count", observed_at: now },
320
+ ...acceptedAnalytics,
321
+ ],
322
+ alerts: {
323
+ active_negotiations: negotiationDigest.length,
324
+ human_reviews: reviews.length,
325
+ pending_actions: pending.length,
326
+ low_stock: null,
327
+ },
328
+ top_sku_contacts: topSkuContacts,
329
+ limitations: [
330
+ ...limitations,
331
+ ...analytics.limitations,
332
+ ...(catalogHealth.out_of_stock === null
333
+ ? [{ source: "inventory", note: "当前没有精确库存数据,无法计算缺货数量" }]
334
+ : [{ source: "inventory", note: "当前没有统一低库存阈值数据源" }]),
335
+ ],
336
+ };
337
+ }
338
+ async queryMetric(input) {
339
+ assertOwned(input.merchant_id, this.merchantId);
340
+ const now = this.now();
341
+ const window = periodWindow(input.period, now);
342
+ const granularity = input.granularity ?? "day";
343
+ if (!["distinct_buyers", "contact_events", "negotiations"].includes(input.metric)) {
344
+ if (this.analyticsSource !== undefined) {
345
+ try {
346
+ const sourceSeries = await this.analyticsSource.queryMetric({
347
+ merchant_id: this.merchantId,
348
+ metric: input.metric,
349
+ period: window.label,
350
+ granularity,
351
+ });
352
+ if (sourceSeries !== undefined) {
353
+ if (!this.validSourceSeries(sourceSeries, input.metric, window.label, granularity)) {
354
+ return { metric: input.metric, unit: "count", period: window.label, granularity, points: [], note: "分析数据源返回了无效指标序列" };
355
+ }
356
+ return sourceSeries;
357
+ }
358
+ }
359
+ catch {
360
+ return {
361
+ metric: input.metric,
362
+ unit: "count",
363
+ period: window.label,
364
+ granularity,
365
+ points: [],
366
+ note: "分析数据源暂时不可用",
367
+ };
368
+ }
369
+ }
370
+ return {
371
+ metric: input.metric,
372
+ unit: "count",
373
+ period: window.label,
374
+ granularity,
375
+ points: [],
376
+ note: "当前数据源不提供该指标",
377
+ };
378
+ }
379
+ const statsPath = readStatsPath(this.dataDir);
380
+ if (!existsSync(statsPath)) {
381
+ return {
382
+ metric: input.metric,
383
+ unit: "count",
384
+ period: window.label,
385
+ granularity,
386
+ points: [],
387
+ note: "没有买家触达统计数据",
388
+ };
389
+ }
390
+ const store = openMerchantStatsStore({ dbPath: statsPath });
391
+ try {
392
+ if (input.metric === "distinct_buyers" && granularity !== "day") {
393
+ return {
394
+ metric: input.metric,
395
+ unit: "count",
396
+ period: window.label,
397
+ granularity,
398
+ points: aggregateDistinctBuyerPoints(store.dailyBuyerIdentitiesSince(window.since), granularity),
399
+ };
400
+ }
401
+ const daily = store.dailySince(window.since);
402
+ const byDay = new Map(daily.map((row) => [row.day, row]));
403
+ const days = Number(window.label.slice(0, -1));
404
+ const points = [];
405
+ for (let i = 0; i < days; i += 1) {
406
+ const date = dayShift(window.since, i);
407
+ const row = byDay.get(date);
408
+ const field = input.metric === "contact_events"
409
+ ? "contact_events"
410
+ : input.metric === "negotiations"
411
+ ? "negotiations"
412
+ : "distinct_buyers";
413
+ points.push({ date, value: row?.[field] ?? 0 });
414
+ }
415
+ return {
416
+ metric: input.metric,
417
+ unit: "count",
418
+ period: window.label,
419
+ granularity,
420
+ points: aggregateMetricPoints(points, granularity),
421
+ };
422
+ }
423
+ finally {
424
+ store.close();
425
+ }
426
+ }
427
+ async getCatalogHealth(input) {
428
+ assertOwned(input.merchant_id, this.merchantId);
429
+ const products = await this.merchantClient.listProducts(input.merchant_id);
430
+ const outOfStock = products.some((product) => product.stock === undefined)
431
+ ? null
432
+ : products.filter((product) => (product.stock ?? 0) <= 0).length;
433
+ return {
434
+ total: products.length,
435
+ active: products.filter((product) => !product.paused).length,
436
+ paused: products.filter((product) => product.paused).length,
437
+ out_of_stock: outOfStock,
438
+ observed_at: this.now(),
439
+ };
440
+ }
441
+ async getNegotiationDigest(input) {
442
+ assertOwned(input.merchant_id, this.merchantId);
443
+ const ledger = new LedgerStore({ dir: path.join(this.dataDir, "a2a"), now: this.now });
444
+ const wanted = input.status ?? "all";
445
+ const rows = [];
446
+ for (const negotiationId of ledger.listNegotiations()) {
447
+ const row = extractNegotiation(negotiationId, ledger.events(negotiationId));
448
+ if (row === undefined)
449
+ continue;
450
+ const active = !TERMINAL_PHASES.includes(row.phase);
451
+ const agreement = row.agreement_id !== undefined || row.phase === "AGREEMENT_REACHED";
452
+ if (wanted === "active" && !active)
453
+ continue;
454
+ if (wanted === "agreement" && !agreement)
455
+ continue;
456
+ rows.push(row);
457
+ }
458
+ return rows.sort((a, b) => b.updated_at.localeCompare(a.updated_at)).slice(0, Math.max(1, Math.min(input.limit ?? 20, 100)));
459
+ }
460
+ async getPendingActions() {
461
+ return this.approvals.listPending().map((candidate) => ({
462
+ candidate_id: candidate.candidate_id,
463
+ tool: candidate.tool,
464
+ risk: candidate.risk,
465
+ status: candidate.status,
466
+ expires_at: candidate.expires_at,
467
+ stale_sensitive: true,
468
+ }));
469
+ }
470
+ async getCandidatePreview(input) {
471
+ if (input.principal_id !== this.principalId) {
472
+ throw new Error("principal identity does not match the bound session");
473
+ }
474
+ return publicCandidatePreview(this.approvals.get(input.candidate_id));
475
+ }
476
+ }
477
+ //# sourceMappingURL=default-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-backend.js","sourceRoot":"","sources":["../../../../src/agent/merchant/intelligence/default-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
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
+ */
7
+ import type { MerchantAnalyticsSource } from "./types.js";
8
+ import type { MetricSeries, MetricValue, DataLimitation } from "./types.js";
9
+ export interface HttpMerchantAnalyticsSourceOptions {
10
+ /** HTTPS is required for remote services; HTTP is allowed only on loopback. */
11
+ baseUrl: string;
12
+ /** Kept in memory for the request only; never included in error messages. */
13
+ token?: string;
14
+ fetchImpl?: typeof fetch;
15
+ timeoutMs?: number;
16
+ maxResponseBytes?: number;
17
+ }
18
+ export declare class MerchantAnalyticsHttpError extends Error {
19
+ readonly status?: number;
20
+ readonly code: "configuration" | "transport" | "protocol" | "auth" | "unavailable";
21
+ constructor(code: MerchantAnalyticsHttpError["code"], message: string, status?: number);
22
+ }
23
+ /**
24
+ * Generic server-side adapter for order, sales, campaign or advertising
25
+ * services. The remote service is never exposed to the model as a tool.
26
+ *
27
+ * Contract:
28
+ * GET /v1/merchant/analytics/metrics?merchant_id=...&period=7d
29
+ * -> { ok: true, merchant_id, metrics, limitations? }
30
+ * GET /v1/merchant/analytics/series?merchant_id=...&metric=...&period=7d&granularity=day
31
+ * -> { ok: true, merchant_id, series: MetricSeries }
32
+ * A 404 on the series endpoint means the source does not provide that metric.
33
+ */
34
+ export declare class HttpMerchantAnalyticsSource implements MerchantAnalyticsSource {
35
+ private readonly baseUrl;
36
+ private readonly token;
37
+ private readonly fetchImpl;
38
+ private readonly timeoutMs;
39
+ private readonly maxResponseBytes;
40
+ constructor(options: HttpMerchantAnalyticsSourceOptions);
41
+ private request;
42
+ getMetrics(input: {
43
+ merchant_id: string;
44
+ period: string;
45
+ }): Promise<{
46
+ metrics: MetricValue[];
47
+ limitations?: DataLimitation[];
48
+ }>;
49
+ queryMetric(input: {
50
+ merchant_id: string;
51
+ metric: string;
52
+ period: string;
53
+ granularity: "day" | "week" | "month";
54
+ }): Promise<MetricSeries | undefined>;
55
+ }