@harrylabsj/kiwi 0.7.22 → 0.8.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 (140) hide show
  1. package/README.md +45 -10
  2. package/dist/a2a/node.js +1 -1
  3. package/dist/a2a/node.js.map +1 -1
  4. package/dist/agent/buyer/buyer-tools.js +15 -8
  5. package/dist/agent/buyer/buyer-tools.js.map +1 -1
  6. package/dist/agent/buyer/scheduler.d.ts +1 -0
  7. package/dist/agent/buyer/scheduler.js +5 -1
  8. package/dist/agent/buyer/scheduler.js.map +1 -1
  9. package/dist/agent/buyer/task-store.js +5 -2
  10. package/dist/agent/buyer/task-store.js.map +1 -1
  11. package/dist/agent/chat-tools.js +10 -3
  12. package/dist/agent/chat-tools.js.map +1 -1
  13. package/dist/agent/context/fencing.d.ts +27 -0
  14. package/dist/agent/context/fencing.js +126 -0
  15. package/dist/agent/context/fencing.js.map +1 -0
  16. package/dist/agent/context/grounding.d.ts +18 -0
  17. package/dist/agent/context/grounding.js +22 -0
  18. package/dist/agent/context/grounding.js.map +1 -0
  19. package/dist/agent/host/events.d.ts +31 -0
  20. package/dist/agent/host/events.js +62 -0
  21. package/dist/agent/host/events.js.map +1 -0
  22. package/dist/agent/host/tui-renderer.d.ts +17 -0
  23. package/dist/agent/host/tui-renderer.js +125 -0
  24. package/dist/agent/host/tui-renderer.js.map +1 -0
  25. package/dist/agent/host/web-renderer.d.ts +71 -0
  26. package/dist/agent/host/web-renderer.js +185 -0
  27. package/dist/agent/host/web-renderer.js.map +1 -0
  28. package/dist/agent/kernel-builder.d.ts +3 -1
  29. package/dist/agent/kernel-builder.js +4 -1
  30. package/dist/agent/kernel-builder.js.map +1 -1
  31. package/dist/agent/kernel.d.ts +20 -1
  32. package/dist/agent/kernel.js +251 -14
  33. package/dist/agent/kernel.js.map +1 -1
  34. package/dist/agent/merchant/intelligence/backend.d.ts +40 -0
  35. package/dist/agent/merchant/intelligence/backend.js +2 -0
  36. package/dist/agent/merchant/intelligence/backend.js.map +1 -0
  37. package/dist/agent/merchant/intelligence/default-backend.d.ts +38 -0
  38. package/dist/agent/merchant/intelligence/default-backend.js +454 -0
  39. package/dist/agent/merchant/intelligence/default-backend.js.map +1 -0
  40. package/dist/agent/merchant/intelligence/http-analytics-source.d.ts +55 -0
  41. package/dist/agent/merchant/intelligence/http-analytics-source.js +193 -0
  42. package/dist/agent/merchant/intelligence/http-analytics-source.js.map +1 -0
  43. package/dist/agent/merchant/intelligence/types.d.ts +109 -0
  44. package/dist/agent/merchant/intelligence/types.js +2 -0
  45. package/dist/agent/merchant/intelligence/types.js.map +1 -0
  46. package/dist/agent/merchant/merchant-enrichment.d.ts +10 -0
  47. package/dist/agent/merchant/merchant-enrichment.js +38 -0
  48. package/dist/agent/merchant/merchant-enrichment.js.map +1 -0
  49. package/dist/agent/merchant/merchant-grounding.d.ts +5 -0
  50. package/dist/agent/merchant/merchant-grounding.js +76 -0
  51. package/dist/agent/merchant/merchant-grounding.js.map +1 -0
  52. package/dist/agent/merchant/merchant-presentations.d.ts +8 -0
  53. package/dist/agent/merchant/merchant-presentations.js +184 -0
  54. package/dist/agent/merchant/merchant-presentations.js.map +1 -0
  55. package/dist/agent/merchant/merchant-tools.d.ts +8 -0
  56. package/dist/agent/merchant/merchant-tools.js +208 -9
  57. package/dist/agent/merchant/merchant-tools.js.map +1 -1
  58. package/dist/agent/presentation/registry.d.ts +14 -0
  59. package/dist/agent/presentation/registry.js +24 -0
  60. package/dist/agent/presentation/registry.js.map +1 -0
  61. package/dist/agent/presentation/runner.d.ts +11 -0
  62. package/dist/agent/presentation/runner.js +17 -0
  63. package/dist/agent/presentation/runner.js.map +1 -0
  64. package/dist/agent/presentation/sanitize.d.ts +16 -0
  65. package/dist/agent/presentation/sanitize.js +37 -0
  66. package/dist/agent/presentation/sanitize.js.map +1 -0
  67. package/dist/agent/presentation/types.d.ts +28 -0
  68. package/dist/agent/presentation/types.js +8 -0
  69. package/dist/agent/presentation/types.js.map +1 -0
  70. package/dist/agent/session.d.ts +1 -1
  71. package/dist/agent/session.js +2 -2
  72. package/dist/agent/session.js.map +1 -1
  73. package/dist/agent/skills/registry.d.ts +11 -0
  74. package/dist/agent/skills/registry.js +119 -0
  75. package/dist/agent/skills/registry.js.map +1 -0
  76. package/dist/agent/skills/tools.d.ts +6 -0
  77. package/dist/agent/skills/tools.js +36 -0
  78. package/dist/agent/skills/tools.js.map +1 -0
  79. package/dist/agent/skills/types.d.ts +9 -0
  80. package/dist/agent/skills/types.js +2 -0
  81. package/dist/agent/skills/types.js.map +1 -0
  82. package/dist/agent/supplier/scheduler.d.ts +2 -0
  83. package/dist/agent/supplier/scheduler.js +101 -22
  84. package/dist/agent/supplier/scheduler.js.map +1 -1
  85. package/dist/agent/supplier/store.d.ts +2 -0
  86. package/dist/agent/supplier/store.js +44 -0
  87. package/dist/agent/supplier/store.js.map +1 -1
  88. package/dist/agent/system-prompt.d.ts +5 -1
  89. package/dist/agent/system-prompt.js +20 -3
  90. package/dist/agent/system-prompt.js.map +1 -1
  91. package/dist/cli.js +34 -14
  92. package/dist/cli.js.map +1 -1
  93. package/dist/config/profile.d.ts +21 -0
  94. package/dist/config/profile.js +59 -0
  95. package/dist/config/profile.js.map +1 -1
  96. package/dist/discovery/catalog-source/kiwi-record.d.ts +2 -0
  97. package/dist/discovery/catalog-source/kiwi-record.js.map +1 -1
  98. package/dist/discovery/catalog-source/kiwi-source.js +2 -0
  99. package/dist/discovery/catalog-source/kiwi-source.js.map +1 -1
  100. package/dist/handoff/authorization.js +1 -1
  101. package/dist/http/merchant-server.d.ts +65 -0
  102. package/dist/http/merchant-server.js +346 -0
  103. package/dist/http/merchant-server.js.map +1 -0
  104. package/dist/merchant/stats-store.d.ts +7 -0
  105. package/dist/merchant/stats-store.js +11 -0
  106. package/dist/merchant/stats-store.js.map +1 -1
  107. package/dist/negotiation/action-candidate.js +1 -1
  108. package/dist/operator/types.d.ts +1 -1
  109. package/dist/product-cli.d.ts +2 -2
  110. package/dist/product-cli.js +5 -3
  111. package/dist/product-cli.js.map +1 -1
  112. package/dist/product-supplier.d.ts +73 -0
  113. package/dist/product-supplier.js +224 -5
  114. package/dist/product-supplier.js.map +1 -1
  115. package/dist/runtime/fake-model.d.ts +1 -1
  116. package/dist/trust/identity/jwk.d.ts +11 -0
  117. package/dist/trust/identity/jwk.js +2 -0
  118. package/dist/trust/identity/jwk.js.map +1 -0
  119. package/dist/trust/identity/jws.d.ts +2 -1
  120. package/dist/trust/identity/jws.js.map +1 -1
  121. package/dist/trust/identity/keys.d.ts +2 -1
  122. package/dist/trust/identity/keys.js.map +1 -1
  123. package/dist/trust/identity/message-signature.d.ts +1 -14
  124. package/dist/trust/identity/message-signature.js.map +1 -1
  125. package/dist/weixin/channel.d.ts +3 -0
  126. package/dist/weixin/channel.js +18 -2
  127. package/dist/weixin/channel.js.map +1 -1
  128. package/examples/profiles/merchant.deepseek.yaml +6 -0
  129. package/examples/profiles/merchant.fake.yaml +6 -0
  130. package/examples/profiles/merchant.local.yaml +6 -0
  131. package/package.json +7 -6
  132. package/skills/kiwi-buyer/SKILL.md +66 -0
  133. package/skills/merchant/catalog-operations/SKILL.md +17 -0
  134. package/skills/merchant/change-approval/SKILL.md +16 -0
  135. package/skills/merchant/human-review/SKILL.md +17 -0
  136. package/skills/merchant/inventory-operations/SKILL.md +17 -0
  137. package/skills/merchant/negotiation-review/SKILL.md +18 -0
  138. package/skills/merchant/performance-insights/SKILL.md +19 -0
  139. package/contracts/candidate-agent-dto-1.0.README.md +0 -43
  140. package/contracts/conformance/python-service/README.md +0 -19
@@ -0,0 +1,125 @@
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 { createTheme } from "../../tui/styles.js";
8
+ function asRecord(value) {
9
+ return value !== null && typeof value === "object" && !Array.isArray(value)
10
+ ? value
11
+ : {};
12
+ }
13
+ function display(value) {
14
+ if (value === null || value === undefined)
15
+ return "—";
16
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean")
17
+ return String(value);
18
+ return JSON.stringify(value) ?? "—";
19
+ }
20
+ function renderUi(component, payload) {
21
+ const value = asRecord(payload);
22
+ if (component === "merchant_digest") {
23
+ const snapshot = asRecord(value.snapshot);
24
+ const alerts = asRecord(snapshot.alerts);
25
+ const metrics = Array.isArray(snapshot.metrics) ? snapshot.metrics : [];
26
+ return [
27
+ "[经营摘要] " + display(value.title),
28
+ ...metrics.slice(0, 8).map((metric) => {
29
+ const item = asRecord(metric);
30
+ return ` ${display(item.name)}: ${display(item.value)} ${display(item.unit)}`;
31
+ }),
32
+ ` 活跃磋商 ${display(alerts.active_negotiations)} · 人工审核 ${display(alerts.human_reviews)} · 待审批 ${display(alerts.pending_actions)}`,
33
+ ];
34
+ }
35
+ if (component === "metrics") {
36
+ const points = Array.isArray(value.points) ? value.points : [];
37
+ return [
38
+ `[指标] ${display(value.metric)}(${display(value.period)} / ${display(value.granularity)})`,
39
+ ...points.slice(0, 20).map((point) => {
40
+ const item = asRecord(point);
41
+ return ` ${display(item.date)} ${display(item.value)}`;
42
+ }),
43
+ ...(typeof value.note === "string" && value.note !== "" ? [` 说明:${value.note}`] : []),
44
+ ];
45
+ }
46
+ if (component === "catalog") {
47
+ const products = Array.isArray(value.products) ? value.products : [];
48
+ const health = asRecord(value.health);
49
+ return [
50
+ `[目录] 共 ${display(health.total)} 件 · active ${display(health.active)} · paused ${display(health.paused)} · 缺货 ${display(health.out_of_stock)}`,
51
+ ...products.slice(0, 20).map((product) => {
52
+ const item = asRecord(product);
53
+ return ` ${display(item.sku)} ${display(item.title)} 价格 ${display(item.price)} 库存 ${display(item.stock)}`;
54
+ }),
55
+ ];
56
+ }
57
+ if (component === "negotiations") {
58
+ const rows = Array.isArray(payload) ? payload : [];
59
+ return [
60
+ `[磋商] ${rows.length} 条`,
61
+ ...rows.slice(0, 20).map((row) => {
62
+ const item = asRecord(row);
63
+ return ` ${display(item.negotiation_id)} ${display(item.phase)} ${display(item.updated_at)}`;
64
+ }),
65
+ ];
66
+ }
67
+ if (component === "human_review") {
68
+ const rows = Array.isArray(value.reviews) ? value.reviews : [];
69
+ return [
70
+ `[人工审核] ${rows.length} 条`,
71
+ ...rows.slice(0, 20).map((row) => {
72
+ const item = asRecord(row);
73
+ return ` ${display(item.review_id)} ${display(item.severity)} ${display(item.reason)}`;
74
+ }),
75
+ ];
76
+ }
77
+ if (component === "change_preview") {
78
+ const changes = Array.isArray(value.changes) ? value.changes : [];
79
+ return [
80
+ `[变更预览] ${display(value.headline)}(${display(value.status)})`,
81
+ ...changes.slice(0, 20).map((change) => {
82
+ const item = asRecord(change);
83
+ return ` ${display(item.field)}: ${display(item.before)} → ${display(item.after)}`;
84
+ }),
85
+ ...(typeof value.note === "string" && value.note !== "" ? [` 说明:${value.note}`] : []),
86
+ ];
87
+ }
88
+ if (component === "suggestions") {
89
+ const suggestions = Array.isArray(value.suggestions) ? value.suggestions : [];
90
+ return ["[建议]", ...suggestions.slice(0, 4).map((suggestion) => ` · ${display(suggestion)}`)];
91
+ }
92
+ return [`[ui] ${component}`];
93
+ }
94
+ /** Optional renderer for hosts that want readable TUI projections from events. */
95
+ export class TuiEventSink {
96
+ output;
97
+ theme;
98
+ constructor(output) {
99
+ this.output = output;
100
+ this.theme = createTheme(output);
101
+ }
102
+ emit(event) {
103
+ const data = asRecord(event.data);
104
+ let lines = [];
105
+ if (event.type === "message" && typeof data.text === "string" && data.role !== "user") {
106
+ lines = [data.text];
107
+ }
108
+ else if (event.type === "grounding_started") {
109
+ lines = [`[数据] 正在读取 ${display(data.tool)}…`];
110
+ }
111
+ else if (event.type === "grounding_completed") {
112
+ lines = [`[数据] ${display(data.tool)}:${display(data.status)}`];
113
+ }
114
+ else if (event.type === "ui") {
115
+ lines = renderUi(display(data.component), data.payload);
116
+ }
117
+ else if (event.type === "error") {
118
+ lines = [`[错误] ${display(data.message)}`];
119
+ }
120
+ for (const line of lines)
121
+ this.output.write(`${this.theme.decorate(line)}\n`);
122
+ }
123
+ }
124
+ export { renderUi as renderTuiEvent };
125
+ //# sourceMappingURL=tui-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-renderer.js","sourceRoot":"","sources":["../../../src/agent/host/tui-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
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 { AgentHostEvent } from "./events.js";
8
+ export interface MerchantWebMessage {
9
+ role: "user" | "assistant" | "system";
10
+ text: string;
11
+ sequence: number;
12
+ occurredAt: string;
13
+ }
14
+ export interface MerchantWebToolState {
15
+ tool: string;
16
+ callId: string;
17
+ status: "running" | "ok" | "error";
18
+ input?: unknown;
19
+ summary?: string;
20
+ partial?: unknown;
21
+ }
22
+ export interface MerchantWebViewState {
23
+ lastSequence: number;
24
+ streamText: string;
25
+ messages: MerchantWebMessage[];
26
+ grounding: Record<string, {
27
+ tool: string;
28
+ status: string;
29
+ }>;
30
+ tools: Record<string, MerchantWebToolState>;
31
+ ui: Record<string, {
32
+ payload: unknown;
33
+ sequence: number;
34
+ }>;
35
+ candidates: Record<string, {
36
+ status: string;
37
+ preview?: unknown;
38
+ }>;
39
+ negotiations: Record<string, {
40
+ phase: string;
41
+ summary: string;
42
+ }>;
43
+ progress: Array<{
44
+ message: string;
45
+ operation?: string;
46
+ step?: string;
47
+ }>;
48
+ errors: Array<{
49
+ code: string;
50
+ message: string;
51
+ retryable?: boolean;
52
+ }>;
53
+ replayGap?: {
54
+ after: number;
55
+ oldest: number;
56
+ };
57
+ }
58
+ /**
59
+ * Framework-neutral reducer for Web/Buddy hosts.
60
+ *
61
+ * It is intentionally a state reducer rather than a DOM/React renderer. The
62
+ * transport may replay events, so duplicate or older sequence numbers are
63
+ * ignored. All values are copied and sanitized before entering view state.
64
+ */
65
+ export declare class MerchantWebEventRenderer {
66
+ private state;
67
+ get snapshot(): MerchantWebViewState;
68
+ reset(): void;
69
+ applyReplayGap(after: number, oldest: number): void;
70
+ apply(event: AgentHostEvent): MerchantWebViewState;
71
+ }
@@ -0,0 +1,185 @@
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 { sanitizeModelText } from "../context/fencing.js";
8
+ import { sanitizePresentationValue } from "../presentation/sanitize.js";
9
+ const MAX_ITEMS = 100;
10
+ function record(value) {
11
+ return value !== null && typeof value === "object" && !Array.isArray(value)
12
+ ? value
13
+ : {};
14
+ }
15
+ function text(value, maxChars = 2_000) {
16
+ return typeof value === "string" ? sanitizeModelText(value, { maxChars }) : "";
17
+ }
18
+ function id(value) {
19
+ return text(value, 200);
20
+ }
21
+ function boundedPush(items, item) {
22
+ items.push(item);
23
+ while (items.length > MAX_ITEMS)
24
+ items.shift();
25
+ }
26
+ function boundedSet(items, key, value) {
27
+ items[key] = value;
28
+ while (Object.keys(items).length > MAX_ITEMS) {
29
+ const oldest = Object.keys(items)[0];
30
+ if (oldest === undefined)
31
+ break;
32
+ delete items[oldest];
33
+ }
34
+ }
35
+ function safePayload(value) {
36
+ return sanitizePresentationValue(value, { maxChars: 2_000, maxItems: MAX_ITEMS });
37
+ }
38
+ function emptyState() {
39
+ return {
40
+ lastSequence: 0,
41
+ streamText: "",
42
+ messages: [],
43
+ grounding: {},
44
+ tools: {},
45
+ ui: {},
46
+ candidates: {},
47
+ negotiations: {},
48
+ progress: [],
49
+ errors: [],
50
+ };
51
+ }
52
+ /**
53
+ * Framework-neutral reducer for Web/Buddy hosts.
54
+ *
55
+ * It is intentionally a state reducer rather than a DOM/React renderer. The
56
+ * transport may replay events, so duplicate or older sequence numbers are
57
+ * ignored. All values are copied and sanitized before entering view state.
58
+ */
59
+ export class MerchantWebEventRenderer {
60
+ state = emptyState();
61
+ get snapshot() {
62
+ return structuredClone(this.state);
63
+ }
64
+ reset() {
65
+ this.state = emptyState();
66
+ }
67
+ applyReplayGap(after, oldest) {
68
+ if (!Number.isSafeInteger(after) || !Number.isSafeInteger(oldest) || after < 0 || oldest < 0)
69
+ return;
70
+ this.state.replayGap = { after, oldest };
71
+ }
72
+ apply(event) {
73
+ if (!Number.isSafeInteger(event.sequence) || event.sequence <= this.state.lastSequence) {
74
+ return this.snapshot;
75
+ }
76
+ this.state.lastSequence = event.sequence;
77
+ const data = record(event.data);
78
+ switch (event.type) {
79
+ case "message": {
80
+ const role = data.role === "user" || data.role === "system" ? data.role : "assistant";
81
+ boundedPush(this.state.messages, {
82
+ role,
83
+ text: text(data.text),
84
+ sequence: event.sequence,
85
+ occurredAt: text(event.occurredAt, 64),
86
+ });
87
+ if (role === "assistant")
88
+ this.state.streamText = "";
89
+ break;
90
+ }
91
+ case "text_delta":
92
+ this.state.streamText = `${this.state.streamText}${text(data.text, 4_000)}`.slice(-20_000);
93
+ break;
94
+ case "grounding_started":
95
+ boundedSet(this.state.grounding, id(data.rule) || id(data.tool), { tool: id(data.tool), status: "running" });
96
+ break;
97
+ case "grounding_completed":
98
+ boundedSet(this.state.grounding, id(data.rule) || id(data.tool), { tool: id(data.tool), status: id(data.status) });
99
+ break;
100
+ case "tool_call": {
101
+ const callId = id(data.call_id);
102
+ if (callId !== "") {
103
+ boundedSet(this.state.tools, callId, {
104
+ tool: id(data.tool),
105
+ callId,
106
+ status: "running",
107
+ input: safePayload(data.input),
108
+ });
109
+ }
110
+ break;
111
+ }
112
+ case "ui_partial": {
113
+ const callId = id(data.call_id);
114
+ if (callId !== "") {
115
+ const current = this.state.tools[callId];
116
+ boundedSet(this.state.tools, callId, {
117
+ tool: id(data.tool) || current?.tool || "",
118
+ callId,
119
+ status: current?.status ?? "running",
120
+ ...(current?.input === undefined ? {} : { input: current.input }),
121
+ partial: safePayload(data.partial),
122
+ });
123
+ }
124
+ break;
125
+ }
126
+ case "tool_result": {
127
+ const callId = id(data.call_id);
128
+ if (callId !== "") {
129
+ const current = this.state.tools[callId];
130
+ boundedSet(this.state.tools, callId, {
131
+ tool: id(data.tool) || current?.tool || "",
132
+ callId,
133
+ status: data.status === "error" ? "error" : "ok",
134
+ ...(current?.input === undefined ? {} : { input: current.input }),
135
+ summary: text(data.summary, 4_000),
136
+ ...(current?.partial === undefined ? {} : { partial: current.partial }),
137
+ });
138
+ }
139
+ break;
140
+ }
141
+ case "ui": {
142
+ const component = id(data.component);
143
+ if (component !== "")
144
+ boundedSet(this.state.ui, component, { payload: safePayload(data.payload), sequence: event.sequence });
145
+ break;
146
+ }
147
+ case "candidate_update": {
148
+ const candidateId = id(data.candidate_id);
149
+ if (candidateId !== "")
150
+ boundedSet(this.state.candidates, candidateId, {
151
+ status: id(data.status),
152
+ ...(data.preview === undefined ? {} : { preview: safePayload(data.preview) }),
153
+ });
154
+ break;
155
+ }
156
+ case "negotiation_update": {
157
+ const negotiationId = id(data.negotiation_id);
158
+ if (negotiationId !== "")
159
+ boundedSet(this.state.negotiations, negotiationId, {
160
+ phase: id(data.phase),
161
+ summary: text(data.summary),
162
+ });
163
+ break;
164
+ }
165
+ case "progress":
166
+ boundedPush(this.state.progress, {
167
+ message: text(data.message),
168
+ ...(data.operation === undefined ? {} : { operation: id(data.operation) }),
169
+ ...(data.step === undefined ? {} : { step: id(data.step) }),
170
+ });
171
+ break;
172
+ case "error":
173
+ boundedPush(this.state.errors, {
174
+ code: id(data.code),
175
+ message: text(data.message),
176
+ ...(typeof data.retryable === "boolean" ? { retryable: data.retryable } : {}),
177
+ });
178
+ break;
179
+ default:
180
+ break;
181
+ }
182
+ return this.snapshot;
183
+ }
184
+ }
185
+ //# sourceMappingURL=web-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-renderer.js","sourceRoot":"","sources":["../../../src/agent/host/web-renderer.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,8 @@
16
16
  import { AgentKernel } from "./kernel.js";
17
17
  import { type AgentProfile } from "../config/profile.js";
18
18
  import type { CommerceClient } from "../commerce/types.js";
19
+ import type { AgentEventSink } from "./host/events.js";
20
+ import type { MerchantAnalyticsSource } from "./merchant/intelligence/types.js";
19
21
  /** 裸 `kiwi` 的缺省 buyer profile(deepseek-v4-flash,环境变量可覆盖)。 */
20
22
  export declare function defaultChatProfile(): AgentProfile;
21
23
  /** 构建 commerce client(negotiation scope token 从 env 解析)。 */
@@ -24,4 +26,4 @@ export declare function buildClient(profile: AgentProfile): CommerceClient;
24
26
  * 为 profile 构建 AgentKernel(chat/weixin 共享装配)。
25
27
  * provider=fake 运行确定性离线 chat fake;真实 provider 解析模型与认证。
26
28
  */
27
- export declare function buildChatKernel(profile: AgentProfile, dataDir?: string, catalog?: string): Promise<AgentKernel>;
29
+ export declare function buildChatKernel(profile: AgentProfile, dataDir?: string, catalog?: string, eventSink?: AgentEventSink, eventSessionId?: string, merchantAnalyticsSource?: MerchantAnalyticsSource): Promise<AgentKernel>;
@@ -80,7 +80,7 @@ export function buildClient(profile) {
80
80
  * 为 profile 构建 AgentKernel(chat/weixin 共享装配)。
81
81
  * provider=fake 运行确定性离线 chat fake;真实 provider 解析模型与认证。
82
82
  */
83
- export async function buildChatKernel(profile, dataDir, catalog) {
83
+ export async function buildChatKernel(profile, dataDir, catalog, eventSink, eventSessionId, merchantAnalyticsSource) {
84
84
  const paths = ensurePathsForDir(dataDir ?? agentDataDir(profile.agent_id));
85
85
  let models;
86
86
  let model;
@@ -174,6 +174,9 @@ export async function buildChatKernel(profile, dataDir, catalog) {
174
174
  ...(merchantClient !== undefined ? { merchantClient } : {}),
175
175
  ...(broker !== undefined ? { broker } : {}),
176
176
  ...(catalog !== undefined ? { catalog } : {}),
177
+ ...(eventSink !== undefined ? { eventSink } : {}),
178
+ ...(eventSessionId !== undefined ? { eventSessionId } : {}),
179
+ ...(merchantAnalyticsSource !== undefined ? { merchantAnalyticsSource } : {}),
177
180
  ...(thinkingLevel !== undefined ? { thinkingLevel } : {}),
178
181
  });
179
182
  }
@@ -1 +1 @@
1
- {"version":3,"file":"kernel-builder.js","sourceRoot":"","sources":["../../src/agent/kernel-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kernel-builder.js","sourceRoot":"","sources":["../../src/agent/kernel-builder.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,8 @@ import { type AgentMode } from "./mode.js";
38
38
  import { WriteApprovalCandidateStore, type ApprovalExecutionResult } from "./merchant/action-candidate.js";
39
39
  import type { CredentialBroker } from "./merchant/credential-broker.js";
40
40
  import type { MerchantClient } from "./merchant/types.js";
41
+ import type { MerchantAnalyticsSource } from "./merchant/intelligence/types.js";
42
+ import type { AgentEventSink } from "./host/events.js";
41
43
  import { MemoryStore } from "./memory/store.js";
42
44
  import { type Principal } from "./memory/types.js";
43
45
  import { PrivateVault } from "./memory/vault.js";
@@ -74,6 +76,14 @@ export interface AgentKernelOptions {
74
76
  now?: () => string;
75
77
  /** agent catalog base URL(buyer `negotiate_buyer_task` 的 A2A 商家发现用)。 */
76
78
  catalog?: string;
79
+ /** 仅本地开发/E2E:允许 supplier pull 访问字面 loopback。 */
80
+ allowLoopback?: boolean;
81
+ /** Optional host projection for Merchant Experience integrations. */
82
+ eventSink?: AgentEventSink;
83
+ /** Transport session id used in host events; defaults to the local main session. */
84
+ eventSessionId?: string;
85
+ /** Optional authoritative sales/campaign/ROAS source for Merchant Intelligence. */
86
+ merchantAnalyticsSource?: MerchantAnalyticsSource;
77
87
  }
78
88
  /** A2A 磋商结果记忆记录(/negotiate 与 negotiate_buyer_task 共用形状)。 */
79
89
  interface NegotiationRecord {
@@ -91,6 +101,7 @@ export interface KernelReply {
91
101
  /** True when the command was /quit. */
92
102
  quit: boolean;
93
103
  }
104
+ export declare function toolResultSummary(toolName: string, result: unknown): string;
94
105
  export declare class AgentKernel {
95
106
  readonly profile: AgentProfile;
96
107
  readonly principal: Principal;
@@ -115,6 +126,11 @@ export declare class AgentKernel {
115
126
  private readonly commerceClient?;
116
127
  private readonly merchantClient?;
117
128
  private readonly broker?;
129
+ private readonly merchantIntelligence?;
130
+ /** Optional host event projection; it never owns business state. */
131
+ private readonly emitEvent?;
132
+ /** Removes the optional AgentHarness stream bridge during kernel shutdown. */
133
+ private readonly unsubscribeHarnessEvents?;
118
134
  /** Shared mutable mode ref (tools read it via a getter before the kernel exists). */
119
135
  private readonly modeRef;
120
136
  /** Live execution hooks for pending candidates (v0.3.0-C /approve). */
@@ -168,7 +184,7 @@ export declare class AgentKernel {
168
184
  /**
169
185
  * Change the runtime mode. Switching INTO autopilot requires an explicit
170
186
  * `confirm` — the same fail-closed rule as the operator control plane
171
- * (docs/operator-tui-v0.2.md §8).
187
+ * (operator control-plane design §8).
172
188
  */
173
189
  setMode(mode: AgentMode, options?: {
174
190
  confirmed?: boolean;
@@ -226,6 +242,9 @@ export declare class AgentKernel {
226
242
  * (消除"两个脑")。
227
243
  */
228
244
  injectContext(text: string): Promise<void>;
245
+ private runMerchantGroundingRead;
246
+ /** Run at most two deterministic, read-only merchant grounding reads per turn. */
247
+ private merchantGrounding;
229
248
  /**
230
249
  * 把一轮 A2A 磋商结果写入记忆(episode namespace,active 无需人工确认):
231
250
  * 持久上下文,`/why` 可查、跨重启可恢复。