@harrylabsj/kiwi 0.7.21 → 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 (146) 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.d.ts +7 -0
  5. package/dist/agent/buyer/buyer-tools.js +53 -0
  6. package/dist/agent/buyer/buyer-tools.js.map +1 -1
  7. package/dist/agent/buyer/scheduler.d.ts +4 -0
  8. package/dist/agent/buyer/scheduler.js +5 -1
  9. package/dist/agent/buyer/scheduler.js.map +1 -1
  10. package/dist/agent/buyer/task-store.d.ts +5 -0
  11. package/dist/agent/buyer/task-store.js +13 -0
  12. package/dist/agent/buyer/task-store.js.map +1 -1
  13. package/dist/agent/chat-tools.js +10 -3
  14. package/dist/agent/chat-tools.js.map +1 -1
  15. package/dist/agent/context/fencing.d.ts +27 -0
  16. package/dist/agent/context/fencing.js +126 -0
  17. package/dist/agent/context/fencing.js.map +1 -0
  18. package/dist/agent/context/grounding.d.ts +18 -0
  19. package/dist/agent/context/grounding.js +22 -0
  20. package/dist/agent/context/grounding.js.map +1 -0
  21. package/dist/agent/host/events.d.ts +31 -0
  22. package/dist/agent/host/events.js +62 -0
  23. package/dist/agent/host/events.js.map +1 -0
  24. package/dist/agent/host/tui-renderer.d.ts +17 -0
  25. package/dist/agent/host/tui-renderer.js +125 -0
  26. package/dist/agent/host/tui-renderer.js.map +1 -0
  27. package/dist/agent/host/web-renderer.d.ts +71 -0
  28. package/dist/agent/host/web-renderer.js +185 -0
  29. package/dist/agent/host/web-renderer.js.map +1 -0
  30. package/dist/agent/kernel-builder.d.ts +3 -1
  31. package/dist/agent/kernel-builder.js +4 -1
  32. package/dist/agent/kernel-builder.js.map +1 -1
  33. package/dist/agent/kernel.d.ts +22 -1
  34. package/dist/agent/kernel.js +294 -22
  35. package/dist/agent/kernel.js.map +1 -1
  36. package/dist/agent/memory/schema.d.ts +1 -1
  37. package/dist/agent/memory/schema.js +67 -1
  38. package/dist/agent/memory/schema.js.map +1 -1
  39. package/dist/agent/merchant/intelligence/backend.d.ts +40 -0
  40. package/dist/agent/merchant/intelligence/backend.js +2 -0
  41. package/dist/agent/merchant/intelligence/backend.js.map +1 -0
  42. package/dist/agent/merchant/intelligence/default-backend.d.ts +38 -0
  43. package/dist/agent/merchant/intelligence/default-backend.js +454 -0
  44. package/dist/agent/merchant/intelligence/default-backend.js.map +1 -0
  45. package/dist/agent/merchant/intelligence/http-analytics-source.d.ts +55 -0
  46. package/dist/agent/merchant/intelligence/http-analytics-source.js +193 -0
  47. package/dist/agent/merchant/intelligence/http-analytics-source.js.map +1 -0
  48. package/dist/agent/merchant/intelligence/types.d.ts +109 -0
  49. package/dist/agent/merchant/intelligence/types.js +2 -0
  50. package/dist/agent/merchant/intelligence/types.js.map +1 -0
  51. package/dist/agent/merchant/merchant-enrichment.d.ts +10 -0
  52. package/dist/agent/merchant/merchant-enrichment.js +38 -0
  53. package/dist/agent/merchant/merchant-enrichment.js.map +1 -0
  54. package/dist/agent/merchant/merchant-grounding.d.ts +5 -0
  55. package/dist/agent/merchant/merchant-grounding.js +76 -0
  56. package/dist/agent/merchant/merchant-grounding.js.map +1 -0
  57. package/dist/agent/merchant/merchant-presentations.d.ts +8 -0
  58. package/dist/agent/merchant/merchant-presentations.js +184 -0
  59. package/dist/agent/merchant/merchant-presentations.js.map +1 -0
  60. package/dist/agent/merchant/merchant-tools.d.ts +8 -0
  61. package/dist/agent/merchant/merchant-tools.js +208 -9
  62. package/dist/agent/merchant/merchant-tools.js.map +1 -1
  63. package/dist/agent/presentation/registry.d.ts +14 -0
  64. package/dist/agent/presentation/registry.js +24 -0
  65. package/dist/agent/presentation/registry.js.map +1 -0
  66. package/dist/agent/presentation/runner.d.ts +11 -0
  67. package/dist/agent/presentation/runner.js +17 -0
  68. package/dist/agent/presentation/runner.js.map +1 -0
  69. package/dist/agent/presentation/sanitize.d.ts +16 -0
  70. package/dist/agent/presentation/sanitize.js +37 -0
  71. package/dist/agent/presentation/sanitize.js.map +1 -0
  72. package/dist/agent/presentation/types.d.ts +28 -0
  73. package/dist/agent/presentation/types.js +8 -0
  74. package/dist/agent/presentation/types.js.map +1 -0
  75. package/dist/agent/session.d.ts +1 -1
  76. package/dist/agent/session.js +2 -2
  77. package/dist/agent/session.js.map +1 -1
  78. package/dist/agent/skills/registry.d.ts +11 -0
  79. package/dist/agent/skills/registry.js +119 -0
  80. package/dist/agent/skills/registry.js.map +1 -0
  81. package/dist/agent/skills/tools.d.ts +6 -0
  82. package/dist/agent/skills/tools.js +36 -0
  83. package/dist/agent/skills/tools.js.map +1 -0
  84. package/dist/agent/skills/types.d.ts +9 -0
  85. package/dist/agent/skills/types.js +2 -0
  86. package/dist/agent/skills/types.js.map +1 -0
  87. package/dist/agent/supplier/scheduler.d.ts +86 -0
  88. package/dist/agent/supplier/scheduler.js +618 -0
  89. package/dist/agent/supplier/scheduler.js.map +1 -0
  90. package/dist/agent/supplier/store.d.ts +173 -0
  91. package/dist/agent/supplier/store.js +387 -0
  92. package/dist/agent/supplier/store.js.map +1 -0
  93. package/dist/agent/system-prompt.d.ts +5 -1
  94. package/dist/agent/system-prompt.js +20 -3
  95. package/dist/agent/system-prompt.js.map +1 -1
  96. package/dist/cli.d.ts +5 -0
  97. package/dist/cli.js +177 -12
  98. package/dist/cli.js.map +1 -1
  99. package/dist/config/profile.d.ts +21 -0
  100. package/dist/config/profile.js +59 -0
  101. package/dist/config/profile.js.map +1 -1
  102. package/dist/discovery/catalog-source/kiwi-record.d.ts +2 -0
  103. package/dist/discovery/catalog-source/kiwi-record.js.map +1 -1
  104. package/dist/discovery/catalog-source/kiwi-source.js +2 -0
  105. package/dist/discovery/catalog-source/kiwi-source.js.map +1 -1
  106. package/dist/handoff/authorization.js +1 -1
  107. package/dist/http/merchant-server.d.ts +65 -0
  108. package/dist/http/merchant-server.js +346 -0
  109. package/dist/http/merchant-server.js.map +1 -0
  110. package/dist/merchant/stats-store.d.ts +7 -0
  111. package/dist/merchant/stats-store.js +11 -0
  112. package/dist/merchant/stats-store.js.map +1 -1
  113. package/dist/negotiation/action-candidate.js +1 -1
  114. package/dist/operator/types.d.ts +1 -1
  115. package/dist/product-cli.d.ts +2 -2
  116. package/dist/product-cli.js +14 -2
  117. package/dist/product-cli.js.map +1 -1
  118. package/dist/product-supplier.d.ts +148 -0
  119. package/dist/product-supplier.js +452 -0
  120. package/dist/product-supplier.js.map +1 -0
  121. package/dist/runtime/fake-model.d.ts +1 -1
  122. package/dist/trust/identity/jwk.d.ts +11 -0
  123. package/dist/trust/identity/jwk.js +2 -0
  124. package/dist/trust/identity/jwk.js.map +1 -0
  125. package/dist/trust/identity/jws.d.ts +2 -1
  126. package/dist/trust/identity/jws.js.map +1 -1
  127. package/dist/trust/identity/keys.d.ts +2 -1
  128. package/dist/trust/identity/keys.js.map +1 -1
  129. package/dist/trust/identity/message-signature.d.ts +1 -14
  130. package/dist/trust/identity/message-signature.js.map +1 -1
  131. package/dist/weixin/channel.d.ts +3 -0
  132. package/dist/weixin/channel.js +18 -2
  133. package/dist/weixin/channel.js.map +1 -1
  134. package/examples/profiles/merchant.deepseek.yaml +6 -0
  135. package/examples/profiles/merchant.fake.yaml +6 -0
  136. package/examples/profiles/merchant.local.yaml +6 -0
  137. package/package.json +7 -6
  138. package/skills/kiwi-buyer/SKILL.md +66 -0
  139. package/skills/merchant/catalog-operations/SKILL.md +17 -0
  140. package/skills/merchant/change-approval/SKILL.md +16 -0
  141. package/skills/merchant/human-review/SKILL.md +17 -0
  142. package/skills/merchant/inventory-operations/SKILL.md +17 -0
  143. package/skills/merchant/negotiation-review/SKILL.md +18 -0
  144. package/skills/merchant/performance-insights/SKILL.md +19 -0
  145. package/contracts/candidate-agent-dto-1.0.README.md +0 -43
  146. 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":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAkB,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,WAAW,EAA2B,MAAM,aAAa,CAAC;AACnE,OAAO,EACL,YAAY,EACZ,eAAe,EACf,aAAa,GAEd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAIhE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,6DAA6D;AAC7D,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,UAAU,CAAC;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,kBAAkB,CAAC;IAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAChD,OAAO;QACL,eAAe,EAAE,eAAe;QAChC,gBAAgB,EAAE,0BAA0B;QAC5C,QAAQ,EAAE,gBAAgB;QAC1B,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE;YACR,QAAQ,EAAE,uBAAuB;YACjC,SAAS,EAAE,sBAAsB;YACjC,OAAO,EAAE,mBAAmB;SAC7B;QACD,KAAK,EAAE;YACL,QAAQ;YACR,KAAK;YACL,WAAW,EAAE,SAAS;YACtB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD;QACD,OAAO,EAAE;YACP,IAAI,EAAE,MAAM;YACZ,qBAAqB,EAAE,CAAC;YACxB,oBAAoB,EAAE,EAAE;YACxB,eAAe,EAAE,CAAC;YAClB,WAAW,EAAE,CAAC;SACf;QACD,YAAY,EAAE;YACZ,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,CAAC;YACX,uBAAuB,EAAE,SAAS;YAClC,qBAAqB,EAAE,2BAA2B;YAClD,0BAA0B,EAAE,EAAE;YAC9B,cAAc,EAAE,IAAI;YACpB,eAAe,EAAE,EAAE;SACpB;KACF,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,WAAW,CAAC,OAAqB;IAC/C,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC1E,OAAO,IAAI,kBAAkB,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ;QAClC,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAqB,EACrB,OAAgB,EAChB,OAAgB,EAChB,SAA0B,EAC1B,cAAuB,EACvB,uBAAiD;IAEjD,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE3E,IAAI,MAAoC,CAAC;IACzC,IAAI,KAAkC,CAAC;IACvC,IAAI,SAA0C,CAAC;IAC/C,IAAI,aAAsD,CAAC;IAC3D,IAAI,cAAoD,CAAC;IACzD,IAAI,MAAoC,CAAC;IACzC,IAAI,cAAoD,CAAC;IACzD,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,oBAAoB,EAAE,CAAC,CAAC;QAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAClE,+BAA+B,CAChC,CAAC;YACF,SAAS,GAAG,IAAI,qBAAqB,CAAC;gBACpC,oBAAoB,EAAE;gBACtB,oBAAoB,CAAC;oBACnB,GAAG,EAAE,SAAS;oBACd,KAAK,EAAE,OAAO;oBACd,KAAK,EAAE,EAAE;oBACT,KAAK,EAAE,CAAC;oBACR,WAAW,EAAE,cAAc;iBAC5B,CAAC;aACH,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,oEAAoE;YACpE,uEAAuE;YACvE,MAAM,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAC9D,oCAAoC,CACrC,CAAC;YACF,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAC7C,iCAAiC,CAClC,CAAC;YACF,cAAc,GAAG,IAAI,kBAAkB,CAAC;gBACtC,QAAQ,EAAE,CAAC,mBAAmB,EAAE,CAAC;aAClC,CAAC,CAAC;YACH,MAAM,GAAG,IAAI,sBAAsB,CAAC;gBAClC,WAAW,EAAE,wBAAwB;gBACrC,OAAO,EAAE,oBAAoB;gBAC7B,SAAS,EAAE,sBAAsB;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qCAAqC,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qBAAqB,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,uBAAuB,CAC1F,CAAC;YACF,MAAM,IAAI,YAAY,CAAC,qBAAqB,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,GAAG,UAAU,CAAC;QACpB,KAAK,GAAG,KAAK,CAAC;QACd,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;YAC/E,SAAS,GAAG,IAAI,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBAC9D,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B;aAChE,CAAC,CAAC;QACL,CAAC;QACD,sEAAsE;QACtE,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAC9C,iCAAiC,CAClC,CAAC;QACF,MAAM,GAAG,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;YACpE,iDAAiD;YACjD,cAAc,GAAG,SAAS,CAAC;YAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,cAAc,OAAO,CAAC,QAAQ,CAAC,SAAS,uBAAuB;oBAC7D,iBAAiB,CACpB,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAChC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;YAC7E,cAAc,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,kEAAkE;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACvC,MAAM,IAAI,GAA0B,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,QAAQ,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjH,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC;QACtB,OAAO;QACP,KAAK;QACL,MAAM;QACN,KAAK;QACL,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,uBAAuB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1D,CAAC,CAAC;AACL,CAAC"}
@@ -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;
@@ -107,12 +118,19 @@ export declare class AgentKernel {
107
118
  private closed;
108
119
  private readonly taskStore?;
109
120
  private readonly scheduler?;
121
+ /** M1:Buyer-owned supplier pull scheduler(buyer 角色构造;与 TaskScheduler 同一 tick 链)。 */
122
+ private readonly supplierScheduler?;
110
123
  private readonly approvals?;
111
124
  /** v0.7.0 KTH:handoff 存储(open() 构造,buyer 角色注入)。 */
112
125
  private readonly handoffRuntime?;
113
126
  private readonly commerceClient?;
114
127
  private readonly merchantClient?;
115
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?;
116
134
  /** Shared mutable mode ref (tools read it via a getter before the kernel exists). */
117
135
  private readonly modeRef;
118
136
  /** Live execution hooks for pending candidates (v0.3.0-C /approve). */
@@ -166,7 +184,7 @@ export declare class AgentKernel {
166
184
  /**
167
185
  * Change the runtime mode. Switching INTO autopilot requires an explicit
168
186
  * `confirm` — the same fail-closed rule as the operator control plane
169
- * (docs/operator-tui-v0.2.md §8).
187
+ * (operator control-plane design §8).
170
188
  */
171
189
  setMode(mode: AgentMode, options?: {
172
190
  confirmed?: boolean;
@@ -224,6 +242,9 @@ export declare class AgentKernel {
224
242
  * (消除"两个脑")。
225
243
  */
226
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;
227
248
  /**
228
249
  * 把一轮 A2A 磋商结果写入记忆(episode namespace,active 无需人工确认):
229
250
  * 持久上下文,`/why` 可查、跨重启可恢复。