@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.
- package/README.md +45 -10
- package/dist/a2a/node.js +1 -1
- package/dist/a2a/node.js.map +1 -1
- package/dist/agent/buyer/buyer-tools.d.ts +7 -0
- package/dist/agent/buyer/buyer-tools.js +53 -0
- package/dist/agent/buyer/buyer-tools.js.map +1 -1
- package/dist/agent/buyer/scheduler.d.ts +4 -0
- package/dist/agent/buyer/scheduler.js +5 -1
- package/dist/agent/buyer/scheduler.js.map +1 -1
- package/dist/agent/buyer/task-store.d.ts +5 -0
- package/dist/agent/buyer/task-store.js +13 -0
- package/dist/agent/buyer/task-store.js.map +1 -1
- package/dist/agent/chat-tools.js +10 -3
- package/dist/agent/chat-tools.js.map +1 -1
- package/dist/agent/context/fencing.d.ts +27 -0
- package/dist/agent/context/fencing.js +126 -0
- package/dist/agent/context/fencing.js.map +1 -0
- package/dist/agent/context/grounding.d.ts +18 -0
- package/dist/agent/context/grounding.js +22 -0
- package/dist/agent/context/grounding.js.map +1 -0
- package/dist/agent/host/events.d.ts +31 -0
- package/dist/agent/host/events.js +62 -0
- package/dist/agent/host/events.js.map +1 -0
- package/dist/agent/host/tui-renderer.d.ts +17 -0
- package/dist/agent/host/tui-renderer.js +125 -0
- package/dist/agent/host/tui-renderer.js.map +1 -0
- package/dist/agent/host/web-renderer.d.ts +71 -0
- package/dist/agent/host/web-renderer.js +185 -0
- package/dist/agent/host/web-renderer.js.map +1 -0
- package/dist/agent/kernel-builder.d.ts +3 -1
- package/dist/agent/kernel-builder.js +4 -1
- package/dist/agent/kernel-builder.js.map +1 -1
- package/dist/agent/kernel.d.ts +22 -1
- package/dist/agent/kernel.js +294 -22
- package/dist/agent/kernel.js.map +1 -1
- package/dist/agent/memory/schema.d.ts +1 -1
- package/dist/agent/memory/schema.js +67 -1
- package/dist/agent/memory/schema.js.map +1 -1
- package/dist/agent/merchant/intelligence/backend.d.ts +40 -0
- package/dist/agent/merchant/intelligence/backend.js +2 -0
- package/dist/agent/merchant/intelligence/backend.js.map +1 -0
- package/dist/agent/merchant/intelligence/default-backend.d.ts +38 -0
- package/dist/agent/merchant/intelligence/default-backend.js +454 -0
- package/dist/agent/merchant/intelligence/default-backend.js.map +1 -0
- package/dist/agent/merchant/intelligence/http-analytics-source.d.ts +55 -0
- package/dist/agent/merchant/intelligence/http-analytics-source.js +193 -0
- package/dist/agent/merchant/intelligence/http-analytics-source.js.map +1 -0
- package/dist/agent/merchant/intelligence/types.d.ts +109 -0
- package/dist/agent/merchant/intelligence/types.js +2 -0
- package/dist/agent/merchant/intelligence/types.js.map +1 -0
- package/dist/agent/merchant/merchant-enrichment.d.ts +10 -0
- package/dist/agent/merchant/merchant-enrichment.js +38 -0
- package/dist/agent/merchant/merchant-enrichment.js.map +1 -0
- package/dist/agent/merchant/merchant-grounding.d.ts +5 -0
- package/dist/agent/merchant/merchant-grounding.js +76 -0
- package/dist/agent/merchant/merchant-grounding.js.map +1 -0
- package/dist/agent/merchant/merchant-presentations.d.ts +8 -0
- package/dist/agent/merchant/merchant-presentations.js +184 -0
- package/dist/agent/merchant/merchant-presentations.js.map +1 -0
- package/dist/agent/merchant/merchant-tools.d.ts +8 -0
- package/dist/agent/merchant/merchant-tools.js +208 -9
- package/dist/agent/merchant/merchant-tools.js.map +1 -1
- package/dist/agent/presentation/registry.d.ts +14 -0
- package/dist/agent/presentation/registry.js +24 -0
- package/dist/agent/presentation/registry.js.map +1 -0
- package/dist/agent/presentation/runner.d.ts +11 -0
- package/dist/agent/presentation/runner.js +17 -0
- package/dist/agent/presentation/runner.js.map +1 -0
- package/dist/agent/presentation/sanitize.d.ts +16 -0
- package/dist/agent/presentation/sanitize.js +37 -0
- package/dist/agent/presentation/sanitize.js.map +1 -0
- package/dist/agent/presentation/types.d.ts +28 -0
- package/dist/agent/presentation/types.js +8 -0
- package/dist/agent/presentation/types.js.map +1 -0
- package/dist/agent/session.d.ts +1 -1
- package/dist/agent/session.js +2 -2
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/skills/registry.d.ts +11 -0
- package/dist/agent/skills/registry.js +119 -0
- package/dist/agent/skills/registry.js.map +1 -0
- package/dist/agent/skills/tools.d.ts +6 -0
- package/dist/agent/skills/tools.js +36 -0
- package/dist/agent/skills/tools.js.map +1 -0
- package/dist/agent/skills/types.d.ts +9 -0
- package/dist/agent/skills/types.js +2 -0
- package/dist/agent/skills/types.js.map +1 -0
- package/dist/agent/supplier/scheduler.d.ts +86 -0
- package/dist/agent/supplier/scheduler.js +618 -0
- package/dist/agent/supplier/scheduler.js.map +1 -0
- package/dist/agent/supplier/store.d.ts +173 -0
- package/dist/agent/supplier/store.js +387 -0
- package/dist/agent/supplier/store.js.map +1 -0
- package/dist/agent/system-prompt.d.ts +5 -1
- package/dist/agent/system-prompt.js +20 -3
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/cli.d.ts +5 -0
- package/dist/cli.js +177 -12
- package/dist/cli.js.map +1 -1
- package/dist/config/profile.d.ts +21 -0
- package/dist/config/profile.js +59 -0
- package/dist/config/profile.js.map +1 -1
- package/dist/discovery/catalog-source/kiwi-record.d.ts +2 -0
- package/dist/discovery/catalog-source/kiwi-record.js.map +1 -1
- package/dist/discovery/catalog-source/kiwi-source.js +2 -0
- package/dist/discovery/catalog-source/kiwi-source.js.map +1 -1
- package/dist/handoff/authorization.js +1 -1
- package/dist/http/merchant-server.d.ts +65 -0
- package/dist/http/merchant-server.js +346 -0
- package/dist/http/merchant-server.js.map +1 -0
- package/dist/merchant/stats-store.d.ts +7 -0
- package/dist/merchant/stats-store.js +11 -0
- package/dist/merchant/stats-store.js.map +1 -1
- package/dist/negotiation/action-candidate.js +1 -1
- package/dist/operator/types.d.ts +1 -1
- package/dist/product-cli.d.ts +2 -2
- package/dist/product-cli.js +14 -2
- package/dist/product-cli.js.map +1 -1
- package/dist/product-supplier.d.ts +148 -0
- package/dist/product-supplier.js +452 -0
- package/dist/product-supplier.js.map +1 -0
- package/dist/runtime/fake-model.d.ts +1 -1
- package/dist/trust/identity/jwk.d.ts +11 -0
- package/dist/trust/identity/jwk.js +2 -0
- package/dist/trust/identity/jwk.js.map +1 -0
- package/dist/trust/identity/jws.d.ts +2 -1
- package/dist/trust/identity/jws.js.map +1 -1
- package/dist/trust/identity/keys.d.ts +2 -1
- package/dist/trust/identity/keys.js.map +1 -1
- package/dist/trust/identity/message-signature.d.ts +1 -14
- package/dist/trust/identity/message-signature.js.map +1 -1
- package/dist/weixin/channel.d.ts +3 -0
- package/dist/weixin/channel.js +18 -2
- package/dist/weixin/channel.js.map +1 -1
- package/examples/profiles/merchant.deepseek.yaml +6 -0
- package/examples/profiles/merchant.fake.yaml +6 -0
- package/examples/profiles/merchant.local.yaml +6 -0
- package/package.json +7 -6
- package/skills/kiwi-buyer/SKILL.md +66 -0
- package/skills/merchant/catalog-operations/SKILL.md +17 -0
- package/skills/merchant/change-approval/SKILL.md +16 -0
- package/skills/merchant/human-review/SKILL.md +17 -0
- package/skills/merchant/inventory-operations/SKILL.md +17 -0
- package/skills/merchant/negotiation-review/SKILL.md +18 -0
- package/skills/merchant/performance-insights/SKILL.md +19 -0
- package/contracts/candidate-agent-dto-1.0.README.md +0 -43
- 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":"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;
|
|
1
|
+
{"version":3,"file":"kernel-builder.js","sourceRoot":"","sources":["../../src/agent/kernel-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/kernel.d.ts
CHANGED
|
@@ -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
|
-
* (
|
|
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` 可查、跨重启可恢复。
|