@harrylabsj/kiwi 0.6.0 → 0.6.1
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/dist/a2a/node.d.ts +3 -1
- package/dist/a2a/node.js +1 -0
- package/dist/a2a/node.js.map +1 -1
- package/dist/agent/buyer/types.d.ts +0 -25
- package/dist/agent/buyer/types.js.map +1 -1
- package/dist/agent/kernel-builder.d.ts +27 -0
- package/dist/agent/kernel-builder.js +180 -0
- package/dist/agent/kernel-builder.js.map +1 -0
- package/dist/cli.js +98 -154
- package/dist/cli.js.map +1 -1
- package/dist/commerce/data-source.d.ts +4 -3
- package/dist/commerce/data-source.js.map +1 -1
- package/dist/commerce/shopping-cli-source.js +3 -2
- package/dist/commerce/shopping-cli-source.js.map +1 -1
- package/dist/config/profile.d.ts +7 -0
- package/dist/config/profile.js +23 -0
- package/dist/config/profile.js.map +1 -1
- package/dist/discovery/catalog-source/kiwi-record.d.ts +3 -0
- package/dist/discovery/catalog-source/kiwi-record.js.map +1 -1
- package/dist/discovery/catalog-source/kiwi-source.js +7 -1
- package/dist/discovery/catalog-source/kiwi-source.js.map +1 -1
- package/dist/discovery/catalog-source/register.d.ts +6 -0
- package/dist/discovery/catalog-source/register.js +15 -7
- package/dist/discovery/catalog-source/register.js.map +1 -1
- package/dist/handoff/errors.d.ts +1 -1
- package/dist/handoff/errors.js +1 -0
- package/dist/handoff/errors.js.map +1 -1
- package/dist/handoff/idempotency.d.ts +10 -1
- package/dist/handoff/idempotency.js +13 -3
- package/dist/handoff/idempotency.js.map +1 -1
- package/dist/handoff/transaction.js +13 -6
- package/dist/handoff/transaction.js.map +1 -1
- package/dist/negotiation/state/phase.js +12 -4
- package/dist/negotiation/state/phase.js.map +1 -1
- package/dist/product-catalog.d.ts +43 -0
- package/dist/product-catalog.js +60 -0
- package/dist/product-catalog.js.map +1 -0
- package/dist/product-cli.d.ts +1 -1
- package/dist/product-cli.js +1 -1
- package/dist/product-publish.d.ts +10 -17
- package/dist/product-publish.js +177 -41
- package/dist/product-publish.js.map +1 -1
- package/dist/weixin/channel.d.ts +87 -0
- package/dist/weixin/channel.js +356 -0
- package/dist/weixin/channel.js.map +1 -0
- package/dist/weixin/cli-weixin.d.ts +29 -0
- package/dist/weixin/cli-weixin.js +128 -0
- package/dist/weixin/cli-weixin.js.map +1 -0
- package/dist/weixin/credentials.d.ts +33 -0
- package/dist/weixin/credentials.js +107 -0
- package/dist/weixin/credentials.js.map +1 -0
- package/dist/weixin/ilink-client.d.ts +44 -0
- package/dist/weixin/ilink-client.js +262 -0
- package/dist/weixin/ilink-client.js.map +1 -0
- package/dist/weixin/login.d.ts +34 -0
- package/dist/weixin/login.js +93 -0
- package/dist/weixin/login.js.map +1 -0
- package/dist/weixin/qr.d.ts +26 -0
- package/dist/weixin/qr.js +525 -0
- package/dist/weixin/qr.js.map +1 -0
- package/dist/weixin/types.d.ts +114 -0
- package/dist/weixin/types.js +48 -0
- package/dist/weixin/types.js.map +1 -0
- package/package.json +4 -1
package/dist/a2a/node.d.ts
CHANGED
|
@@ -20,8 +20,10 @@ export interface A2aNodeOptions {
|
|
|
20
20
|
catalog?: string;
|
|
21
21
|
/** 首选端口(缺省按角色:merchant 9000 / buyer 9001)。占用则自动换。 */
|
|
22
22
|
preferredPort?: number;
|
|
23
|
-
/** KIWI_CATALOG_OWNER_TOKEN_SECRET(merchant 注册绑定 owner
|
|
23
|
+
/** KIWI_CATALOG_OWNER_TOKEN_SECRET(merchant 注册绑定 owner 语义,legacy HMAC 派生)。 */
|
|
24
24
|
ownerTokenSecret?: string;
|
|
25
|
+
/** 商家自己的随机 owner token(v12+ 双路径;平台 secret 不落商家服务器)。 */
|
|
26
|
+
ownerToken?: string;
|
|
25
27
|
}
|
|
26
28
|
export interface A2aNodeHandle {
|
|
27
29
|
role: "buyer" | "merchant";
|
package/dist/a2a/node.js
CHANGED
|
@@ -131,6 +131,7 @@ export async function startA2aNode(options) {
|
|
|
131
131
|
agentCardUrl,
|
|
132
132
|
ucpProfileUrl: `${url}/.well-known/ucp`,
|
|
133
133
|
merchantId: profile.agent_id,
|
|
134
|
+
ownerToken: options.ownerToken,
|
|
134
135
|
ownerTokenSecret: options.ownerTokenSecret,
|
|
135
136
|
});
|
|
136
137
|
catalogAgentId = reg.catalogAgentId;
|
package/dist/a2a/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/a2a/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/a2a/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,29 +45,6 @@ export interface TaskIntent {
|
|
|
45
45
|
query_text?: string;
|
|
46
46
|
open_questions?: string[];
|
|
47
47
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Product-first 商品意图(rev1.5 CD #27;产品文档 kiwi-catalog v0.4 §10)。
|
|
50
|
-
* 与 TaskIntent 独立:TaskIntent 是本地任务的结构化约束,ProductIntent 是
|
|
51
|
-
* kiwi-catalog listing 搜索的输入(need → /v1/listings/search)。
|
|
52
|
-
*/
|
|
53
|
-
export interface ProductIntent {
|
|
54
|
-
/** 需求描述("我要 21.5 寸工业触摸屏")。 */
|
|
55
|
-
need_description: string;
|
|
56
|
-
category?: string;
|
|
57
|
-
regions?: string[];
|
|
58
|
-
min_moq?: number;
|
|
59
|
-
max_moq?: number;
|
|
60
|
-
supports_customization?: boolean;
|
|
61
|
-
/** 预算提示(discovery hint,不对外精确披露——NetworkDisclosurePolicy 门)。 */
|
|
62
|
-
budget_hint?: string;
|
|
63
|
-
handoff_destination_types?: readonly string[];
|
|
64
|
-
}
|
|
65
|
-
/** listing → owner Agent resolution 的引用(CD #23:绑定 owner_agent_id,不复制 endpoint)。 */
|
|
66
|
-
export interface ListingRef {
|
|
67
|
-
listing_id: string;
|
|
68
|
-
listing_type: "product" | "capability";
|
|
69
|
-
source_product_ref?: string;
|
|
70
|
-
}
|
|
71
48
|
/** Current-task hard constraints; private values may be Vault refs (§11.2). */
|
|
72
49
|
export interface TaskConstraints {
|
|
73
50
|
/** Per-unit budget ("单价预算 94 元"); the decision derives the total from it. */
|
|
@@ -153,8 +130,6 @@ export interface ProductCandidate {
|
|
|
153
130
|
external_product_id: string;
|
|
154
131
|
sku?: string;
|
|
155
132
|
merchant_id?: string;
|
|
156
|
-
/** kiwi-catalog listing 引用(product-first 链路;shortlist 候选的来源锚点)。 */
|
|
157
|
-
listing_ref?: ListingRef;
|
|
158
133
|
/** owner Agent(listing.owner_agent_id;Direct A2A 的 catalogAgentId 输入)。 */
|
|
159
134
|
owner_agent_id?: string;
|
|
160
135
|
canonical_key: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent/buyer/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;GAIG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO;IACP,YAAY;IACZ,OAAO;IACP,WAAW;IACX,UAAU;IACV,iBAAiB;IACjB,eAAe;IACf,YAAY;IACZ,aAAa;IACb,qBAAqB;IACrB,WAAW;IACX,QAAQ;IACR,SAAS;CACD,CAAC;AAGX,mEAAmE;AACnE,MAAM,CAAC,MAAM,gBAAgB,GAAkE;IAC7F,KAAK,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,CAAC;IAC3C,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;IAClC,oDAAoD;IACpD,8CAA8C;IAC9C,KAAK,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;IAClC,SAAS,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,QAAQ,CAAC;IACpD,QAAQ,EAAE,CAAC,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,CAAC;IACnE,eAAe,EAAE,CAAC,eAAe,CAAC;IAClC,aAAa,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,CAAC;IAC9E,UAAU,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC;IAC5C,WAAW,EAAE,CAAC,eAAe,EAAE,qBAAqB,CAAC;IACrD,2CAA2C;IAC3C,mBAAmB,EAAE,CAAC,YAAY,CAAC;IACnC,SAAS,EAAE,EAAE;IACb,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,aAAa;IACb,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,iBAAiB;CACT,CAAC;AAGX,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAU,CAAC;AAGnF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,YAAY;IACZ,SAAS;IACT,aAAa;IACb,UAAU;IACV,UAAU;IACV,OAAO;CACC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent/buyer/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;GAIG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO;IACP,YAAY;IACZ,OAAO;IACP,WAAW;IACX,UAAU;IACV,iBAAiB;IACjB,eAAe;IACf,YAAY;IACZ,aAAa;IACb,qBAAqB;IACrB,WAAW;IACX,QAAQ;IACR,SAAS;CACD,CAAC;AAGX,mEAAmE;AACnE,MAAM,CAAC,MAAM,gBAAgB,GAAkE;IAC7F,KAAK,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,CAAC;IAC3C,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;IAClC,oDAAoD;IACpD,8CAA8C;IAC9C,KAAK,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;IAClC,SAAS,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,QAAQ,CAAC;IACpD,QAAQ,EAAE,CAAC,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,CAAC;IACnE,eAAe,EAAE,CAAC,eAAe,CAAC;IAClC,aAAa,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,CAAC;IAC9E,UAAU,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC;IAC5C,WAAW,EAAE,CAAC,eAAe,EAAE,qBAAqB,CAAC;IACrD,2CAA2C;IAC3C,mBAAmB,EAAE,CAAC,YAAY,CAAC;IACnC,SAAS,EAAE,EAAE;IACb,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,aAAa;IACb,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,iBAAiB;CACT,CAAC;AAGX,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAU,CAAC;AAGnF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,YAAY;IACZ,SAAS;IACT,aAAa;IACb,UAAU;IACV,UAAU;IACV,OAAO;CACC,CAAC;AAiCX,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO;IACP,YAAY;IACZ,WAAW;IACX,eAAe;IACf,OAAO;IACP,UAAU;IACV,aAAa;IACb,gBAAgB;IAChB,kBAAkB;IAClB,WAAW;CACH,CAAC;AAyCX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,SAAS;IACT,WAAW;IACX,gBAAgB;IAChB,mBAAmB;IACnB,aAAa;IACb,oBAAoB;IACpB,oBAAoB;IACpB,cAAc;IACd,oBAAoB;IACpB,qBAAqB;IACrB,UAAU;IACV,gBAAgB;IAChB,QAAQ;IACR,SAAS;IACT,WAAW;CACH,CAAC;AAGX,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,YAAY;IACZ,aAAa;IACb,QAAQ;IACR,OAAO;CACC,CAAC;AA+FX,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAuF;IACpG,YAAY,IAA4B,EAAE,OAAe;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,cAAc,EAAE,EAAE;IAClB,YAAY,EAAE,EAAE;IAChB,UAAU,EAAE,MAAM;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACrD,wBAAwB,EAAE,IAAI;IAC9B,wBAAwB,EAAE,IAAI;IAC9B,uBAAuB,EAAE,IAAI;CAC9B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { AgentKernel } from "./kernel.js";
|
|
17
|
+
import { type AgentProfile } from "../config/profile.js";
|
|
18
|
+
import type { CommerceClient } from "../commerce/types.js";
|
|
19
|
+
/** 裸 `kiwi` 的缺省 buyer profile(deepseek-v4-flash,环境变量可覆盖)。 */
|
|
20
|
+
export declare function defaultChatProfile(): AgentProfile;
|
|
21
|
+
/** 构建 commerce client(negotiation scope token 从 env 解析)。 */
|
|
22
|
+
export declare function buildClient(profile: AgentProfile): CommerceClient;
|
|
23
|
+
/**
|
|
24
|
+
* 为 profile 构建 AgentKernel(chat/weixin 共享装配)。
|
|
25
|
+
* provider=fake 运行确定性离线 chat fake;真实 provider 解析模型与认证。
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildChatKernel(profile: AgentProfile, dataDir?: string, catalog?: string): Promise<AgentKernel>;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* AgentKernel 装配(从 cli.ts 抽出,供 chat/weixin 等入口共享)。
|
|
18
|
+
*
|
|
19
|
+
* provider=fake 走确定性离线 chat fake;真实 provider 经 pi-ai builtin
|
|
20
|
+
* 目录解析模型与认证。`catalog` 是 agent catalog base URL(buyer 的
|
|
21
|
+
* negotiate_buyer_task 发现商家用)。从 cli.ts 机械抽取,无行为变化。
|
|
22
|
+
*/
|
|
23
|
+
import { agentDataDir, ensurePathsForDir } from "./agent-db.js";
|
|
24
|
+
import { createFakeChatModels } from "./fake-chat-model.js";
|
|
25
|
+
import { isAgentMode } from "./mode.js";
|
|
26
|
+
import { AgentKernel } from "./kernel.js";
|
|
27
|
+
import { ProfileError, RUNTIME_VERSION, resolveSecret, } from "../config/profile.js";
|
|
28
|
+
import { HttpCommerceClient } from "../commerce/http-client.js";
|
|
29
|
+
import { isFakeProvider, resolveThinkingLevel } from "../runtime/model.js";
|
|
30
|
+
/** 裸 `kiwi` 的缺省 buyer profile(deepseek-v4-flash,环境变量可覆盖)。 */
|
|
31
|
+
export function defaultChatProfile() {
|
|
32
|
+
const provider = process.env.KIWI_MODEL_PROVIDER ?? "deepseek";
|
|
33
|
+
const model = process.env.KIWI_MODEL ?? "deepseek-v4-flash";
|
|
34
|
+
const apiKeyEnv = process.env.KIWI_MODEL_API_KEY_ENV ?? "DEEPSEEK_API_KEY";
|
|
35
|
+
const baseUrl = process.env.KIWI_MODEL_BASE_URL;
|
|
36
|
+
return {
|
|
37
|
+
runtime_version: RUNTIME_VERSION,
|
|
38
|
+
protocol_version: "shopping.negotiation/0.1",
|
|
39
|
+
agent_id: "kiwi-assistant",
|
|
40
|
+
role: "buyer",
|
|
41
|
+
owner_id: "kiwi-user",
|
|
42
|
+
commerce: {
|
|
43
|
+
base_url: "http://127.0.0.1:8765",
|
|
44
|
+
token_env: "SHOPPING_BUYER_TOKEN",
|
|
45
|
+
backend: "local_marketplace",
|
|
46
|
+
},
|
|
47
|
+
model: {
|
|
48
|
+
provider,
|
|
49
|
+
model,
|
|
50
|
+
api_key_env: apiKeyEnv,
|
|
51
|
+
...(baseUrl !== undefined ? { base_url: baseUrl } : {}),
|
|
52
|
+
},
|
|
53
|
+
runtime: {
|
|
54
|
+
mode: "once",
|
|
55
|
+
poll_interval_seconds: 5,
|
|
56
|
+
turn_timeout_seconds: 90,
|
|
57
|
+
max_model_steps: 4,
|
|
58
|
+
max_retries: 2,
|
|
59
|
+
},
|
|
60
|
+
buyer_policy: {
|
|
61
|
+
target_skus: [],
|
|
62
|
+
quantity: 1,
|
|
63
|
+
max_total_price_private: 1_000_000,
|
|
64
|
+
acceptable_eta_latest: "2099-12-31T23:59:59+08:00",
|
|
65
|
+
required_after_sales_terms: [],
|
|
66
|
+
auto_negotiate: true,
|
|
67
|
+
human_review_on: [],
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/** 构建 commerce client(negotiation scope token 从 env 解析)。 */
|
|
72
|
+
export function buildClient(profile) {
|
|
73
|
+
const token = resolveSecret(profile.commerce.token_env, "commerce token");
|
|
74
|
+
return new HttpCommerceClient({
|
|
75
|
+
baseUrl: profile.commerce.base_url,
|
|
76
|
+
token,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 为 profile 构建 AgentKernel(chat/weixin 共享装配)。
|
|
81
|
+
* provider=fake 运行确定性离线 chat fake;真实 provider 解析模型与认证。
|
|
82
|
+
*/
|
|
83
|
+
export async function buildChatKernel(profile, dataDir, catalog) {
|
|
84
|
+
const paths = ensurePathsForDir(dataDir ?? agentDataDir(profile.agent_id));
|
|
85
|
+
let models;
|
|
86
|
+
let model;
|
|
87
|
+
let connector;
|
|
88
|
+
let thinkingLevel;
|
|
89
|
+
let merchantClient;
|
|
90
|
+
let broker;
|
|
91
|
+
let commerceClient;
|
|
92
|
+
if (isFakeProvider(profile)) {
|
|
93
|
+
({ models, model } = createFakeChatModels());
|
|
94
|
+
if (profile.role === "buyer") {
|
|
95
|
+
const { FakeCommerceConnector, fakeConnectorProduct } = await import("./connector/fake-connector.js");
|
|
96
|
+
connector = new FakeCommerceConnector([
|
|
97
|
+
fakeConnectorProduct(),
|
|
98
|
+
fakeConnectorProduct({
|
|
99
|
+
sku: "sku-002",
|
|
100
|
+
title: "机制陶瓷杯",
|
|
101
|
+
price: 59,
|
|
102
|
+
stock: 0,
|
|
103
|
+
merchant_id: "merchant-002",
|
|
104
|
+
}),
|
|
105
|
+
]);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// Offline merchant chat: deterministic catalog client + dummy-scope
|
|
109
|
+
// credentials so the capability pack is exercisable without a gateway.
|
|
110
|
+
const { FakeMerchantClient, fakeMerchantProduct } = await import("./merchant/fake-merchant-client.js");
|
|
111
|
+
const { StaticCredentialBroker } = await import("./merchant/credential-broker.js");
|
|
112
|
+
merchantClient = new FakeMerchantClient({
|
|
113
|
+
products: [fakeMerchantProduct()],
|
|
114
|
+
});
|
|
115
|
+
broker = new StaticCredentialBroker({
|
|
116
|
+
negotiation: "fake-negotiation-token",
|
|
117
|
+
catalog: "fake-catalog-token",
|
|
118
|
+
inventory: "fake-inventory-token",
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
const { builtinModels } = await import("@earendil-works/pi-ai/providers/all");
|
|
124
|
+
const collection = builtinModels();
|
|
125
|
+
const found = collection.getModel(profile.model.provider, profile.model.model);
|
|
126
|
+
if (found === undefined) {
|
|
127
|
+
process.stderr.write(`no built-in model ${profile.model.provider}/${profile.model.model}; check the profile\n`);
|
|
128
|
+
throw new ProfileError(`no built-in model ${profile.model.provider}/${profile.model.model}`);
|
|
129
|
+
}
|
|
130
|
+
models = collection;
|
|
131
|
+
model = found;
|
|
132
|
+
thinkingLevel = resolveThinkingLevel(profile);
|
|
133
|
+
if (profile.role === "buyer") {
|
|
134
|
+
const { ShoppingCliConnector } = await import("./connector/http-connector.js");
|
|
135
|
+
connector = new ShoppingCliConnector(profile.commerce.base_url, {
|
|
136
|
+
buyerBootstrapToken: process.env.SHOPPING_BUYER_BOOTSTRAP_TOKEN,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
// Real gateway: negotiation client + scoped merchant client + broker.
|
|
140
|
+
const { ProfileCredentialBroker } = await import("./merchant/credential-broker.js");
|
|
141
|
+
broker = new ProfileCredentialBroker(profile);
|
|
142
|
+
try {
|
|
143
|
+
commerceClient = buildClient(profile);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// No negotiation token: negotiation tools fail closed at call time.
|
|
147
|
+
// Catalog/inventory 只读工具走公开搜索端点,不依赖该 token,仍会挂载。
|
|
148
|
+
commerceClient = undefined;
|
|
149
|
+
if (profile.role === "merchant") {
|
|
150
|
+
process.stderr.write(`[kiwi] 未设置 ${profile.commerce.token_env}:磋商工具停用(fail closed),` +
|
|
151
|
+
"目录/库存只读工具仍可用。\n");
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (profile.role === "merchant") {
|
|
155
|
+
const { HttpMerchantClient } = await import("./merchant/merchant-client.js");
|
|
156
|
+
merchantClient = new HttpMerchantClient(profile.commerce.base_url, broker);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// KIWI_MODE env: start the chat already in the given write mode (e.g.
|
|
160
|
+
// autopilot for autonomous negotiation) — no manual /mode needed.
|
|
161
|
+
const kiwiMode = process.env.KIWI_MODE;
|
|
162
|
+
const mode = isAgentMode(kiwiMode) ? kiwiMode : undefined;
|
|
163
|
+
if (kiwiMode !== undefined && mode === undefined) {
|
|
164
|
+
process.stderr.write(`unknown KIWI_MODE ${kiwiMode}(可选 ${["manual", "supervised", "autopilot"].join("/")})\n`);
|
|
165
|
+
}
|
|
166
|
+
return AgentKernel.open({
|
|
167
|
+
profile,
|
|
168
|
+
paths,
|
|
169
|
+
models,
|
|
170
|
+
model,
|
|
171
|
+
...(mode !== undefined ? { mode } : {}),
|
|
172
|
+
...(connector !== undefined ? { connector } : {}),
|
|
173
|
+
...(commerceClient !== undefined ? { commerceClient } : {}),
|
|
174
|
+
...(merchantClient !== undefined ? { merchantClient } : {}),
|
|
175
|
+
...(broker !== undefined ? { broker } : {}),
|
|
176
|
+
...(catalog !== undefined ? { catalog } : {}),
|
|
177
|
+
...(thinkingLevel !== undefined ? { thinkingLevel } : {}),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=kernel-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel-builder.js","sourceRoot":"","sources":["../../src/agent/kernel-builder.ts"],"names":[],"mappings":"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"}
|