@harrylabsj/kiwi 0.6.0 → 0.6.2
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 +21 -0
- package/contracts/candidate-agent-dto-1.0.README.md +12 -8
- package/contracts/conformance/python-service/README.md +19 -0
- package/contracts/conformance/python-service/run.py +134 -0
- package/contracts/kiwi-catalog/1.0/listing-record.schema.json +11 -1
- package/contracts/kiwi-contracts.lock.json +7 -0
- package/contracts/manifest.json +61 -0
- package/contracts/vectors/candidate-agent.invalid-private-field.json +7 -0
- package/contracts/vectors/candidate-agent.valid.json +26 -0
- package/dist/a2a/client/client.js +39 -34
- package/dist/a2a/client/client.js.map +1 -1
- package/dist/a2a/client/url-policy.d.ts +8 -1
- package/dist/a2a/client/url-policy.js +18 -2
- package/dist/a2a/client/url-policy.js.map +1 -1
- package/dist/a2a/clock.d.ts +30 -0
- package/dist/a2a/clock.js +39 -0
- package/dist/a2a/clock.js.map +1 -0
- package/dist/a2a/negotiate.d.ts +6 -0
- package/dist/a2a/negotiate.js +10 -12
- package/dist/a2a/negotiate.js.map +1 -1
- package/dist/a2a/node.d.ts +23 -3
- package/dist/a2a/node.js +128 -18
- package/dist/a2a/node.js.map +1 -1
- package/dist/a2a/server/merchant-handler.d.ts +4 -0
- package/dist/a2a/server/merchant-handler.js +238 -25
- package/dist/a2a/server/merchant-handler.js.map +1 -1
- package/dist/a2a/server/pipeline.d.ts +17 -0
- package/dist/a2a/server/pipeline.js +89 -1
- package/dist/a2a/server/pipeline.js.map +1 -1
- package/dist/a2a/server/ucp.d.ts +30 -2
- package/dist/a2a/server/ucp.js +23 -14
- package/dist/a2a/server/ucp.js.map +1 -1
- package/dist/agent/agent-db.js +5 -0
- package/dist/agent/agent-db.js.map +1 -1
- package/dist/agent/buyer/buyer-tools.d.ts +5 -0
- package/dist/agent/buyer/buyer-tools.js +8 -1
- package/dist/agent/buyer/buyer-tools.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/agent/kernel.d.ts +6 -0
- package/dist/agent/kernel.js +95 -8
- package/dist/agent/kernel.js.map +1 -1
- package/dist/agent/memory/store.d.ts +5 -0
- package/dist/agent/memory/store.js +29 -1
- package/dist/agent/memory/store.js.map +1 -1
- package/dist/agent/merchant/action-candidate.js +15 -1
- package/dist/agent/merchant/action-candidate.js.map +1 -1
- package/dist/agent/merchant/merchant-client.js +22 -4
- package/dist/agent/merchant/merchant-client.js.map +1 -1
- package/dist/agent/merchant/types.d.ts +5 -2
- package/dist/agent/merchant/types.js +6 -2
- package/dist/agent/merchant/types.js.map +1 -1
- package/dist/agent/negotiation-chat.js +34 -14
- package/dist/agent/negotiation-chat.js.map +1 -1
- package/dist/cli.d.ts +56 -0
- package/dist/cli.js +141 -156
- package/dist/cli.js.map +1 -1
- package/dist/commerce/data-source.d.ts +7 -3
- package/dist/commerce/data-source.js.map +1 -1
- package/dist/commerce/http-client.js +35 -31
- package/dist/commerce/http-client.js.map +1 -1
- package/dist/commerce/shopping-cli-source.js +66 -48
- 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/counterparty/a2a-direct/index.d.ts +5 -0
- package/dist/counterparty/a2a-direct/index.js +24 -0
- package/dist/counterparty/a2a-direct/index.js.map +1 -1
- package/dist/counterparty/shopping-cli-hosted/index.js +52 -19
- package/dist/counterparty/shopping-cli-hosted/index.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 +46 -36
- 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 +27 -8
- package/dist/discovery/catalog-source/register.js.map +1 -1
- package/dist/discovery/catalog-source/source.js +39 -35
- package/dist/discovery/catalog-source/source.js.map +1 -1
- package/dist/discovery/resolve.d.ts +15 -0
- package/dist/discovery/resolve.js +59 -35
- package/dist/discovery/resolve.js.map +1 -1
- package/dist/discovery/ucp/index.d.ts +1 -1
- package/dist/discovery/ucp/index.js +1 -1
- package/dist/discovery/ucp/index.js.map +1 -1
- package/dist/discovery/ucp/resolver.d.ts +5 -0
- package/dist/discovery/ucp/resolver.js +65 -38
- package/dist/discovery/ucp/resolver.js.map +1 -1
- package/dist/discovery/ucp/vendor.d.ts +1 -1
- package/dist/discovery/ucp/vendor.js +1 -1
- package/dist/handoff/delivery.d.ts +4 -2
- package/dist/handoff/delivery.js +6 -1
- package/dist/handoff/delivery.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/index.d.ts +1 -1
- package/dist/handoff/index.js +1 -1
- package/dist/handoff/index.js.map +1 -1
- package/dist/handoff/ledger.d.ts +9 -0
- package/dist/handoff/ledger.js +66 -0
- package/dist/handoff/ledger.js.map +1 -1
- package/dist/handoff/transaction.d.ts +21 -3
- package/dist/handoff/transaction.js +50 -11
- package/dist/handoff/transaction.js.map +1 -1
- package/dist/handoff/ucp-checkout/channel.js +15 -10
- package/dist/handoff/ucp-checkout/channel.js.map +1 -1
- package/dist/negotiation/jcs.js +11 -8
- package/dist/negotiation/jcs.js.map +1 -1
- package/dist/negotiation/lease/store.d.ts +25 -0
- package/dist/negotiation/lease/store.js +101 -0
- package/dist/negotiation/lease/store.js.map +1 -0
- package/dist/negotiation/recovery/recover.js +25 -1
- package/dist/negotiation/recovery/recover.js.map +1 -1
- package/dist/negotiation/state/phase.js +12 -4
- package/dist/negotiation/state/phase.js.map +1 -1
- package/dist/operator/runner.d.ts +11 -0
- package/dist/operator/runner.js +20 -1
- package/dist/operator/runner.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 +15 -17
- package/dist/product-publish.js +279 -46
- package/dist/product-publish.js.map +1 -1
- package/dist/supervisor/stack-config.d.ts +6 -1
- package/dist/supervisor/stack-config.js +11 -3
- package/dist/supervisor/stack-config.js.map +1 -1
- package/dist/trust/identity/message-signature.js +17 -0
- package/dist/trust/identity/message-signature.js.map +1 -1
- package/dist/weixin/channel.d.ts +89 -0
- package/dist/weixin/channel.js +370 -0
- package/dist/weixin/channel.js.map +1 -0
- package/dist/weixin/cli-weixin.d.ts +29 -0
- package/dist/weixin/cli-weixin.js +130 -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 +287 -0
- package/dist/weixin/ilink-client.js.map +1 -0
- package/dist/weixin/login.d.ts +37 -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 +12 -2
- package/dist/commerce/erp-source.d.ts +0 -51
- package/dist/commerce/erp-source.js +0 -184
- package/dist/commerce/erp-source.js.map +0 -1
- package/dist/commerce/local-db-source.d.ts +0 -50
- package/dist/commerce/local-db-source.js +0 -162
- package/dist/commerce/local-db-source.js.map +0 -1
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
* `kiwi catalog serve` —— 启动独立 kiwi-catalog 服务(CURRENT-DOCS v0.7.0)。
|
|
18
|
+
*
|
|
19
|
+
* kiwi-catalog 是独立部署仓(<WORKSPACE>/kiwi-catalog),console script 入口
|
|
20
|
+
* `kiwi-catalog-api`(pyproject [project.scripts])。本命令以前台方式
|
|
21
|
+
* 转发启动该服务(stdio inherit),便于本地一体化开发;依赖检测:
|
|
22
|
+
* 未安装(ENOENT)→ fail-closed 提示 pip install。
|
|
23
|
+
*
|
|
24
|
+
* 缺省:--db ./kiwi-catalog.sqlite --host 127.0.0.1 --port 8600
|
|
25
|
+
* (与 kiwi-catalog 的缺省端口一致)。
|
|
26
|
+
*/
|
|
27
|
+
import { spawnSync } from "node:child_process";
|
|
28
|
+
export function catalogServe(options = {}) {
|
|
29
|
+
const spawn = options.spawnImpl ?? spawnSync;
|
|
30
|
+
const args = [
|
|
31
|
+
"--db",
|
|
32
|
+
options.db ?? "./kiwi-catalog.sqlite",
|
|
33
|
+
"--host",
|
|
34
|
+
options.host ?? "127.0.0.1",
|
|
35
|
+
"--port",
|
|
36
|
+
String(options.port ?? 8600),
|
|
37
|
+
];
|
|
38
|
+
// spawnSync 对 ENOENT 不抛异常——返回 { error: ENOENT, status: null };
|
|
39
|
+
// Ctrl+C 停止则 status 为 null 且无 error(视为正常)。
|
|
40
|
+
const result = spawn("kiwi-catalog-api", args, { stdio: "inherit" });
|
|
41
|
+
if (result.error !== undefined) {
|
|
42
|
+
const code = result.error.code;
|
|
43
|
+
if (code === "ENOENT") {
|
|
44
|
+
return {
|
|
45
|
+
ok: false,
|
|
46
|
+
error: "kiwi-catalog-api 未安装——kiwi-catalog 是独立部署仓(<WORKSPACE>/kiwi-catalog)," +
|
|
47
|
+
"请先 `pip install -e <WORKSPACE>/kiwi-catalog` 再运行本命令",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
ok: false,
|
|
52
|
+
error: `kiwi-catalog-api 启动失败:${result.error.message}`,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if (result.status !== null && result.status !== 0) {
|
|
56
|
+
return { ok: false, error: `kiwi-catalog-api 退出码 ${result.status}(服务日志见上方输出)` };
|
|
57
|
+
}
|
|
58
|
+
return { ok: true, spawned: true };
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=product-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-catalog.js","sourceRoot":"","sources":["../src/product-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAmB/C,MAAM,UAAU,YAAY,CAAC,UAA+B,EAAE;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC;IAC7C,MAAM,IAAI,GAAG;QACX,MAAM;QACN,OAAO,CAAC,EAAE,IAAI,uBAAuB;QACrC,QAAQ;QACR,OAAO,CAAC,IAAI,IAAI,WAAW;QAC3B,QAAQ;QACR,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;KAC7B,CAAC;IACF,+DAA+D;IAC/D,2CAA2C;IAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAI,MAAM,CAAC,KAA2B,CAAC,IAAI,CAAC;QACtD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EACH,sEAAsE;oBACtE,qDAAqD;aACxD,CAAC;QACJ,CAAC;QACD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,yBAAyB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;SACvD,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,MAAM,CAAC,MAAM,aAAa,EAAE,CAAC;IAClF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC"}
|
package/dist/product-cli.d.ts
CHANGED
package/dist/product-cli.js
CHANGED
|
@@ -30,7 +30,7 @@ import { spawnSync } from "node:child_process";
|
|
|
30
30
|
import { EXIT } from "./exit-codes.js";
|
|
31
31
|
import { SHOPPING_CLI_COMPAT, compatRangeText, versionInRange } from "./product-compat.js";
|
|
32
32
|
/** 与 package.json / USAGE 同步的产品版本。 */
|
|
33
|
-
export const PRODUCT_VERSION = "0.6.
|
|
33
|
+
export const PRODUCT_VERSION = "0.6.2";
|
|
34
34
|
/**
|
|
35
35
|
* 缺省 kiwi-catalog 地址(单一来源,cli.ts 各处解析一致)。
|
|
36
36
|
*
|
|
@@ -14,20 +14,6 @@
|
|
|
14
14
|
* See the License for the specific language governing permissions and
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
|
-
/**
|
|
18
|
-
* `kiwi merchant publish` 编排(product-strategy rev1.1 §4.5/§19 D2)。
|
|
19
|
-
*
|
|
20
|
-
* 编排层在 kiwi 仓,调两仓能力(组件独立发布,§12):
|
|
21
|
-
*
|
|
22
|
-
* 1. 确认/注册 owner Agent → kiwi-catalog POST /v1/agent-catalog/agents/register
|
|
23
|
-
* (owner_token = HMAC-SHA256("kiwi-catalog-owner:" + merchant_id),
|
|
24
|
-
* 与 kiwi-catalog api/auth.py 逐字节一致;注册幂等 upsert)
|
|
25
|
-
* 2. 触发 listing 发布 → 进程调用 shopping-cli
|
|
26
|
-
* (spawn `shopping listings publish-listings`,不建 HTTP 强依赖;
|
|
27
|
-
* digest 去重由 shopping-cli 镜像表保证幂等)
|
|
28
|
-
* 3. 汇总分步状态 → fail-closed:agent 注册失败则短路
|
|
29
|
-
* (listings 依赖 owner agent 存在),listings 失败报错不假装全成功。
|
|
30
|
-
*/
|
|
31
17
|
import { spawnSync } from "node:child_process";
|
|
32
18
|
import type { AgentProfile } from "./config/profile.js";
|
|
33
19
|
export interface MerchantPublishOptions {
|
|
@@ -35,16 +21,25 @@ export interface MerchantPublishOptions {
|
|
|
35
21
|
profile: AgentProfile;
|
|
36
22
|
/** kiwi-catalog base URL(缺省由调用方解析 KIWI_CATALOG_URL)。 */
|
|
37
23
|
catalogBaseUrl: string;
|
|
38
|
-
/** KIWI_CATALOG_OWNER_TOKEN_SECRET(owner token
|
|
39
|
-
ownerTokenSecret
|
|
24
|
+
/** KIWI_CATALOG_OWNER_TOKEN_SECRET(owner token 派生,legacy)。 */
|
|
25
|
+
ownerTokenSecret?: string;
|
|
26
|
+
/** 商家随机 owner token(v12+ 双路径;优先于 HMAC 派生)。 */
|
|
27
|
+
ownerToken?: string;
|
|
40
28
|
/** shopping-cli SQLite 数据库路径(listings publish-listings --db)。 */
|
|
41
29
|
shoppingCliDb: string;
|
|
42
30
|
/** shopping-cli 可执行名/路径(缺省 "shopping")。 */
|
|
43
31
|
shoppingCliPath?: string;
|
|
44
|
-
/** shopping-cli
|
|
32
|
+
/** shopping-cli 侧 merchant_id(投影过滤;缺省 = profile.agent_id)。
|
|
33
|
+
* catalog 侧身份恒为 profile.agent_id——两者不同时(如 catalog 申请
|
|
34
|
+
* 审批身份配随机 owner token)用本字段显式映射投影侧。 */
|
|
45
35
|
shoppingCliMerchant?: string;
|
|
46
36
|
/** catalog 注册域名(缺省 KIWI_CATALOG_DOMAIN / merchant-{agent_id}.local)。 */
|
|
47
37
|
catalogDomain?: string;
|
|
38
|
+
/** 审查 P1-B:投影为空但 catalog 存在 ACTIVE product listing 时,默认
|
|
39
|
+
* 拒绝 reconcile 下架(典型成因是 --shopping-cli-merchant 不匹配或
|
|
40
|
+
* --shopping-cli-db 指向空库,静默全量下架=数据丢失且报告仍 ok)。
|
|
41
|
+
* 设为 true 显式放行"全部下架"语义(CLI --allow-empty-projection)。 */
|
|
42
|
+
allowEmptyProjectionReconcile?: boolean;
|
|
48
43
|
/** 测试注入。 */
|
|
49
44
|
fetchImpl?: typeof fetch;
|
|
50
45
|
spawnImpl?: typeof spawnSync;
|
|
@@ -60,6 +55,9 @@ export interface StepListings {
|
|
|
60
55
|
published?: number;
|
|
61
56
|
skipped?: number;
|
|
62
57
|
withdrawn?: number;
|
|
58
|
+
published_refs?: string[];
|
|
59
|
+
skipped_refs?: string[];
|
|
60
|
+
withdrawn_refs?: string[];
|
|
63
61
|
errors?: string[];
|
|
64
62
|
raw?: unknown;
|
|
65
63
|
}
|
package/dist/product-publish.js
CHANGED
|
@@ -22,18 +22,80 @@
|
|
|
22
22
|
* 1. 确认/注册 owner Agent → kiwi-catalog POST /v1/agent-catalog/agents/register
|
|
23
23
|
* (owner_token = HMAC-SHA256("kiwi-catalog-owner:" + merchant_id),
|
|
24
24
|
* 与 kiwi-catalog api/auth.py 逐字节一致;注册幂等 upsert)
|
|
25
|
-
* 2.
|
|
26
|
-
*
|
|
27
|
-
*
|
|
25
|
+
* 2. 读投影并发布 listings → spawn `shopping listings projections list`(只读)
|
|
26
|
+
* 取 public-only 投影 → 逐条直连 kiwi-catalog POST /v1/listings/publish
|
|
27
|
+
* (v3.0 起 publish 面归独立 kiwi-catalog 服务,行级幂等在服务端;
|
|
28
|
+
* owner token 直传优先,否则按 register 同公式 HMAC 派生)
|
|
29
|
+
* 随后 reconcile:投影中消失的商品 POST /v1/listings/{id}/withdraw
|
|
28
30
|
* 3. 汇总分步状态 → fail-closed:agent 注册失败则短路
|
|
29
31
|
* (listings 依赖 owner agent 存在),listings 失败报错不假装全成功。
|
|
30
32
|
*/
|
|
33
|
+
import { createHmac } from "node:crypto";
|
|
31
34
|
import { spawnSync } from "node:child_process";
|
|
32
35
|
import { registerCatalogAgent } from "./discovery/catalog-source/register.js";
|
|
36
|
+
import { isRedirectResponse } from "./net/safe-http.js";
|
|
33
37
|
import { SHOPPING_CLI_COMPAT, compatRangeText, versionInRange } from "./product-compat.js";
|
|
34
38
|
function safeAgentId(agentId) {
|
|
35
39
|
return agentId.replace(/[^a-z0-9-]/gi, "-").toLowerCase();
|
|
36
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* 审查 P1-10:构造注册用的 agent_card_url —— **绝对且经过校验**。
|
|
43
|
+
*
|
|
44
|
+
* `domain` 可能是裸 hostname(`merchant-x.local`,本地占位)或已含 scheme 的
|
|
45
|
+
* URL;统一规范化为 `<scheme>://<host>/.well-known/agent-card.json`。此前直接
|
|
46
|
+
* 拼接 `${domain}/.well-known/agent-card.json`——裸 hostname 时产物是相对 URL
|
|
47
|
+
* (catalog 无法按 well-known 验证),且若 domain 携带 userinfo/路径会污染注册
|
|
48
|
+
* 身份。
|
|
49
|
+
*
|
|
50
|
+
* 校验(fail-closed,任何一项不过 → 抛错短路,不发布):
|
|
51
|
+
* - 绝对 URL 且 http(s);
|
|
52
|
+
* - 远程 host 必须 https(loopback 本地形态允许 http);
|
|
53
|
+
* - 无 userinfo / query / fragment;
|
|
54
|
+
* - path 只允许空或 "/"(agent_card_url 的 well-known 路径由本函数追加)。
|
|
55
|
+
*/
|
|
56
|
+
function buildAgentCardUrl(domain) {
|
|
57
|
+
const base = /^[a-z][a-z0-9+.-]*:\/\//i.test(domain) ? domain : `https://${domain}`;
|
|
58
|
+
let parsed;
|
|
59
|
+
try {
|
|
60
|
+
parsed = new URL(base);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
throw new Error(`catalog domain 不是合法 URL/域名: "${domain}"(应为 https://<host> 形式)`);
|
|
64
|
+
}
|
|
65
|
+
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") {
|
|
66
|
+
throw new Error(`catalog domain 必须使用 http(s)(got ${parsed.protocol}): ${domain}`);
|
|
67
|
+
}
|
|
68
|
+
if (parsed.username !== "" || parsed.password !== "") {
|
|
69
|
+
throw new Error(`catalog domain 不得内嵌凭据(userinfo): ${domain}`);
|
|
70
|
+
}
|
|
71
|
+
if (parsed.search !== "" || parsed.hash !== "") {
|
|
72
|
+
throw new Error(`catalog domain 不得包含 query/fragment: ${domain}`);
|
|
73
|
+
}
|
|
74
|
+
if (parsed.pathname !== "" && parsed.pathname !== "/") {
|
|
75
|
+
throw new Error(`catalog domain 不得包含路径(agent_card_url 由本函数构造): ${domain}`);
|
|
76
|
+
}
|
|
77
|
+
const host = parsed.hostname;
|
|
78
|
+
const isLoopback = host === "127.0.0.1" || host === "localhost" || host === "::1";
|
|
79
|
+
if (parsed.protocol !== "https:" && !isLoopback) {
|
|
80
|
+
throw new Error(`catalog domain 远程 host 必须使用 https(本地 loopback 才允许 http): ${domain}`);
|
|
81
|
+
}
|
|
82
|
+
const port = parsed.port !== "" ? `:${parsed.port}` : "";
|
|
83
|
+
return `${parsed.protocol}//${host}${port}/.well-known/agent-card.json`;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 审查 P1-11:catalog 出站调用(可能携带 owner_token 凭据)——**绝不跟随
|
|
87
|
+
* 重定向**。manual redirect 下任何 3xx / opaqueredirect 立即抛错,不解析
|
|
88
|
+
* body:重定向会把 Authorization 头 / body / query 中的凭据转发给第三方
|
|
89
|
+
* host。跨源重定向是 token 泄漏路径(SC-SEC-01 同型);fail-closed 拒绝所有
|
|
90
|
+
* 3xx(含同源——最简且最安全的保证)。
|
|
91
|
+
*/
|
|
92
|
+
async function catalogFetch(fetchImpl, url, init) {
|
|
93
|
+
const res = await fetchImpl(url, { ...init, redirect: "manual" });
|
|
94
|
+
if (isRedirectResponse(res)) {
|
|
95
|
+
throw new Error(`catalog request must not follow redirects (HTTP ${res.status} from ${url})`);
|
|
96
|
+
}
|
|
97
|
+
return res;
|
|
98
|
+
}
|
|
37
99
|
/**
|
|
38
100
|
* 执行一次 publish 编排。fail-closed:
|
|
39
101
|
* - agent 注册失败 → 短路(listings 依赖 owner agent 存在),ok:false;
|
|
@@ -42,14 +104,21 @@ function safeAgentId(agentId) {
|
|
|
42
104
|
*/
|
|
43
105
|
export async function merchantPublish(options) {
|
|
44
106
|
const profile = options.profile;
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
|
|
107
|
+
// 双身份拆分(2026-08-08 修复):catalog 侧身份与 shopping-cli 侧 merchant
|
|
108
|
+
// 是两个独立概念——
|
|
109
|
+
// - catalogMerchantId = profile.agent_id:agent 注册/复用、owner token
|
|
110
|
+
// 派生(HMAC)与校验、publish body merchant_id、自查端点(kiwi-catalog
|
|
111
|
+
// 一商家一 agent + publish 校验 owner 绑定都以此为准);
|
|
112
|
+
// - shoppingMerchant = --shopping-cli-merchant ?? profile.agent_id:投影
|
|
113
|
+
// 过滤(shopping-cli 侧 merchant)。D1 init 统一身份后两者相同;显式
|
|
114
|
+
// 映射用于 catalog 申请审批身份(随机 owner token)与 shopping-cli
|
|
115
|
+
// 商家名不同的场景——原实现把映射项当成全局身份,导致随机 token
|
|
116
|
+
// (KIWI_MERCHANT_TOKEN)下 publish 身份错乱。
|
|
117
|
+
const catalogMerchantId = profile.agent_id;
|
|
118
|
+
const shoppingMerchant = options.shoppingCliMerchant ?? profile.agent_id;
|
|
50
119
|
const domain = options.catalogDomain ??
|
|
51
120
|
process.env.KIWI_CATALOG_DOMAIN ??
|
|
52
|
-
`merchant-${safeAgentId(
|
|
121
|
+
`merchant-${safeAgentId(catalogMerchantId)}.local`;
|
|
53
122
|
// ── Step 0: shopping-cli 版本兼容检查(D3 矩阵共同消费,fail-closed)──
|
|
54
123
|
// 矩阵单一来源 = product-compat.ts;与 `kiwi doctor` 共同消费。
|
|
55
124
|
const versionSpawn = options.spawnImpl ?? spawnSync;
|
|
@@ -101,8 +170,8 @@ export async function merchantPublish(options) {
|
|
|
101
170
|
let catalogAgentId;
|
|
102
171
|
let agentError;
|
|
103
172
|
try {
|
|
104
|
-
const lookupUrl = `${baseUrl}/v1/agent-catalog/merchants/${encodeURIComponent(
|
|
105
|
-
const lookup = await fetchImpl
|
|
173
|
+
const lookupUrl = `${baseUrl}/v1/agent-catalog/merchants/${encodeURIComponent(catalogMerchantId)}/agents`;
|
|
174
|
+
const lookup = await catalogFetch(fetchImpl, lookupUrl, { signal: AbortSignal.timeout(15_000) });
|
|
106
175
|
if (lookup.ok) {
|
|
107
176
|
const body = (await lookup.json());
|
|
108
177
|
const existing = body.results?.[0]?.catalog_agent_id;
|
|
@@ -115,9 +184,10 @@ export async function merchantPublish(options) {
|
|
|
115
184
|
const reg = await registerCatalogAgent({
|
|
116
185
|
catalogBaseUrl: options.catalogBaseUrl,
|
|
117
186
|
domain,
|
|
118
|
-
merchantId,
|
|
187
|
+
merchantId: catalogMerchantId,
|
|
188
|
+
ownerToken: options.ownerToken,
|
|
119
189
|
ownerTokenSecret: options.ownerTokenSecret,
|
|
120
|
-
agentCardUrl:
|
|
190
|
+
agentCardUrl: buildAgentCardUrl(domain),
|
|
121
191
|
fetchImpl: options.fetchImpl,
|
|
122
192
|
timeoutMs: 15_000,
|
|
123
193
|
});
|
|
@@ -137,17 +207,17 @@ export async function merchantPublish(options) {
|
|
|
137
207
|
},
|
|
138
208
|
};
|
|
139
209
|
}
|
|
140
|
-
// ── Step 2:
|
|
141
|
-
//
|
|
210
|
+
// ── Step 2: 读 shopping-cli 投影 → 直连 catalog 发布 listings ──────────
|
|
211
|
+
// shopping-cli v3.0 剥离 publish-listings 后,发布面归 kiwi-catalog:
|
|
212
|
+
// 本步骤读取可发布投影(listings projections list --format json,只读),
|
|
213
|
+
// 逐条直连 POST /v1/listings/publish(owner token 直传)。--db 是
|
|
214
|
+
// shopping-cli 顶层参数,必须在子命令之前。
|
|
142
215
|
const spawn = options.spawnImpl ?? spawnSync;
|
|
143
216
|
const args = [
|
|
144
217
|
"--db", options.shoppingCliDb,
|
|
145
218
|
"listings",
|
|
146
|
-
"
|
|
147
|
-
"--merchant",
|
|
148
|
-
"--kiwi-catalog-url", options.catalogBaseUrl,
|
|
149
|
-
"--owner-token-secret", options.ownerTokenSecret,
|
|
150
|
-
"--owner-agent-id", catalogAgentId,
|
|
219
|
+
"projections",
|
|
220
|
+
"--merchant", shoppingMerchant,
|
|
151
221
|
"--format", "json",
|
|
152
222
|
];
|
|
153
223
|
let result;
|
|
@@ -172,31 +242,192 @@ export async function merchantPublish(options) {
|
|
|
172
242
|
}
|
|
173
243
|
const stdout = String(result.stdout ?? "");
|
|
174
244
|
const stderr = String(result.stderr ?? "");
|
|
175
|
-
|
|
245
|
+
if (result.status !== 0) {
|
|
246
|
+
// fail-closed:投影读取失败(含非零退出/输出非 JSON)一律不发布
|
|
247
|
+
const detail = (stderr !== "" ? stderr.trim() : stdout.trim()).slice(0, 300);
|
|
248
|
+
return {
|
|
249
|
+
ok: false,
|
|
250
|
+
steps: {
|
|
251
|
+
shopping_cli_compat: compatStep,
|
|
252
|
+
agent: { ok: true, catalog_agent_id: catalogAgentId },
|
|
253
|
+
listings: {
|
|
254
|
+
ok: false,
|
|
255
|
+
errors: [`shopping-cli projections failed: ${detail !== "" ? detail : `exit ${result.status ?? "?"}`}`],
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
let projections = [];
|
|
176
261
|
try {
|
|
177
|
-
|
|
262
|
+
const parsed = JSON.parse(stdout);
|
|
263
|
+
if (parsed.ok === true && Array.isArray(parsed.results)) {
|
|
264
|
+
projections = parsed.results;
|
|
265
|
+
}
|
|
178
266
|
}
|
|
179
267
|
catch {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
268
|
+
// 非 JSON → fail-closed(不发布,避免漏发)
|
|
269
|
+
return {
|
|
270
|
+
ok: false,
|
|
271
|
+
steps: {
|
|
272
|
+
shopping_cli_compat: compatStep,
|
|
273
|
+
agent: { ok: true, catalog_agent_id: catalogAgentId },
|
|
274
|
+
listings: { ok: false, errors: [`shopping-cli projections 输出非 JSON:${stdout.slice(0, 200)}`] },
|
|
275
|
+
},
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
// 逐条直连 catalog publish(投影是 canonical payload 子集;owner 身份由
|
|
279
|
+
// 发布方补齐:merchant_id / owner_agent_id / owner_token / handoff 默认)。
|
|
280
|
+
// owner token:直传优先,否则 HMAC 派生(与 register 一致)。
|
|
281
|
+
const effectiveOwnerToken = options.ownerToken !== undefined && options.ownerToken !== ""
|
|
282
|
+
? options.ownerToken
|
|
283
|
+
: options.ownerTokenSecret !== undefined
|
|
284
|
+
? createHmac("sha256", options.ownerTokenSecret)
|
|
285
|
+
.update(`kiwi-catalog-owner:${catalogMerchantId}`)
|
|
286
|
+
.digest("hex")
|
|
287
|
+
: "";
|
|
288
|
+
const reportErrors = [];
|
|
289
|
+
const publishedRefs = [];
|
|
290
|
+
const skippedRefs = [];
|
|
291
|
+
for (const projection of projections) {
|
|
292
|
+
const ref = String(projection.source_product_ref ?? "?");
|
|
293
|
+
// category 必须非空(catalog contracts.py 要求)——为空则跳过并报告,
|
|
294
|
+
// 不猜默认值(fail-closed)。
|
|
295
|
+
const category = projection.category;
|
|
296
|
+
if (typeof category !== "string" || category.trim() === "") {
|
|
297
|
+
skippedRefs.push(ref);
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
// 投影含内部元数据(_provenance 等)——catalog 契约 additionalProperties:
|
|
301
|
+
// false,发布前剔除 _ 前缀字段(仅 wire 字段进 body)。
|
|
302
|
+
const wireFields = Object.fromEntries(Object.entries(projection).filter(([key]) => !key.startsWith("_")));
|
|
303
|
+
// 每商品成交入口(KTH destination_ref):投影携带商家维护的
|
|
304
|
+
// handoff_destination(shopping-cli products.handoff_destination)。
|
|
305
|
+
// 映射为 listing 的 handoff_destination_ref,并剔除原始字段(catalog 契约
|
|
306
|
+
// 只认 handoff_destination_ref,additionalProperties:false 会拒未知键)。
|
|
307
|
+
const { handoff_destination: rawHandoff, ...projectionWire } = wireFields;
|
|
308
|
+
const handoffRef = typeof rawHandoff === "string" ? rawHandoff.trim() : "";
|
|
309
|
+
const body = {
|
|
310
|
+
...projectionWire,
|
|
311
|
+
merchant_id: catalogMerchantId,
|
|
312
|
+
owner_agent_id: catalogAgentId,
|
|
313
|
+
owner_token: effectiveOwnerToken,
|
|
314
|
+
handoff_destination_types: ["external_checkout_url"],
|
|
315
|
+
};
|
|
316
|
+
if (handoffRef !== "") {
|
|
317
|
+
body.handoff_destination_ref = handoffRef;
|
|
318
|
+
}
|
|
319
|
+
if (typeof body.owner_token !== "string" || body.owner_token === "") {
|
|
320
|
+
reportErrors.push(`${ref}: no owner token (KIWI_MERCHANT_TOKEN 或 secret 派生)`);
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
try {
|
|
324
|
+
const res = await catalogFetch(fetchImpl, `${baseUrl}/v1/listings/publish`, {
|
|
325
|
+
method: "POST",
|
|
326
|
+
headers: { "Content-Type": "application/json" },
|
|
327
|
+
body: JSON.stringify(body),
|
|
328
|
+
signal: AbortSignal.timeout(20_000),
|
|
329
|
+
});
|
|
330
|
+
const payload = (await res.json());
|
|
331
|
+
if (res.ok && payload.ok === true) {
|
|
332
|
+
publishedRefs.push(ref);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
reportErrors.push(`${ref}: ${payload.error ?? `HTTP ${res.status}`}`);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
catch (err) {
|
|
339
|
+
reportErrors.push(`${ref}: ${err instanceof Error ? err.message : String(err)}`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
// ── Step 2b: reconcile——投影消失的商品 withdraw(data-hub DoD #5)──────
|
|
343
|
+
// products.active=0 或已删除的商品不再出现在投影里;拉取本 agent 现有
|
|
344
|
+
// product listings(自查端点,owner_token 经 query),与投影 ref 集合
|
|
345
|
+
// diff,多出的下架(capability listing 不在投影集合,不处理)。服务端
|
|
346
|
+
// 对已 WITHDRAWN 幂等返回;SUSPENDED 的 listing 也允许商家 withdraw。
|
|
347
|
+
const projectedRefs = new Set(projections.map((p) => String(p.source_product_ref ?? "")).filter((ref) => ref !== ""));
|
|
348
|
+
// 审查 P1-B(2026-08-10 复验):空投影 + 既有 ACTIVE product listing =
|
|
349
|
+
// 配置错误典型信号(--shopping-cli-merchant 不匹配 / --shopping-cli-db
|
|
350
|
+
// 指向空库)——此前 reconcile 会把自查端点返回的全部 listing 下架且
|
|
351
|
+
// 报告仍 ok:true,自动化发布不告警。fail-closed:拒绝下架,除非显式
|
|
352
|
+
// allowEmptyProjectionReconcile。自查失败不在此重复判定(下方循环会报)。
|
|
353
|
+
let reconcileBlocked = false;
|
|
354
|
+
if (projections.length === 0 && options.allowEmptyProjectionReconcile !== true) {
|
|
355
|
+
const probeUrl = `${baseUrl}/v1/agents/${encodeURIComponent(catalogAgentId)}/listings` +
|
|
356
|
+
`?owner_token=${encodeURIComponent(effectiveOwnerToken)}&limit=100`;
|
|
357
|
+
try {
|
|
358
|
+
const probeRes = await catalogFetch(fetchImpl, probeUrl, { signal: AbortSignal.timeout(15_000) });
|
|
359
|
+
const probePayload = (await probeRes.json());
|
|
360
|
+
if (probeRes.ok && probePayload.ok === true) {
|
|
361
|
+
const hasActiveProductListing = (probePayload.results ?? []).some((rec) => String(rec.listing_type ?? "") === "product" &&
|
|
362
|
+
String(rec.publication_state ?? "") !== "WITHDRAWN");
|
|
363
|
+
if (hasActiveProductListing) {
|
|
364
|
+
reconcileBlocked = true;
|
|
365
|
+
reportErrors.push("投影为空但 catalog 存在 ACTIVE product listing:拒绝 reconcile 下架" +
|
|
366
|
+
"(疑似 --shopping-cli-merchant 不匹配或 --shopping-cli-db 指向空库);" +
|
|
367
|
+
"如确需全部下架请显式传 --allow-empty-projection");
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
// 探测失败交给下方 reconcile 循环报错(fail-closed 语义一致)
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
const withdrawnRefs = [];
|
|
376
|
+
try {
|
|
377
|
+
let cursor;
|
|
378
|
+
for (;;) {
|
|
379
|
+
if (reconcileBlocked)
|
|
380
|
+
break;
|
|
381
|
+
const listUrl = `${baseUrl}/v1/agents/${encodeURIComponent(catalogAgentId)}/listings` +
|
|
382
|
+
`?owner_token=${encodeURIComponent(effectiveOwnerToken)}&limit=100` +
|
|
383
|
+
(cursor !== undefined ? `&cursor=${encodeURIComponent(cursor)}` : "");
|
|
384
|
+
const listRes = await catalogFetch(fetchImpl, listUrl, { signal: AbortSignal.timeout(15_000) });
|
|
385
|
+
const listPayload = (await listRes.json());
|
|
386
|
+
if (!listRes.ok || listPayload.ok !== true) {
|
|
387
|
+
reportErrors.push(`withdraw reconcile failed: ${listPayload.error ?? `HTTP ${listRes.status}`}`);
|
|
388
|
+
break;
|
|
389
|
+
}
|
|
390
|
+
for (const rec of listPayload.results ?? []) {
|
|
391
|
+
// 只 diff product listing:capability listing 不在投影集合,不处理
|
|
392
|
+
if (String(rec.listing_type ?? "") !== "product")
|
|
393
|
+
continue;
|
|
394
|
+
const ref = String(rec.source_product_ref ?? "");
|
|
395
|
+
if (ref === "" || projectedRefs.has(ref))
|
|
396
|
+
continue;
|
|
397
|
+
if (String(rec.publication_state ?? "") === "WITHDRAWN")
|
|
398
|
+
continue;
|
|
399
|
+
const listingId = String(rec.listing_id ?? "");
|
|
400
|
+
if (listingId === "")
|
|
401
|
+
continue;
|
|
402
|
+
try {
|
|
403
|
+
const wRes = await catalogFetch(fetchImpl, `${baseUrl}/v1/listings/${encodeURIComponent(listingId)}/withdraw`, {
|
|
404
|
+
method: "POST",
|
|
405
|
+
headers: { "Content-Type": "application/json" },
|
|
406
|
+
body: JSON.stringify({ owner_token: effectiveOwnerToken }),
|
|
407
|
+
signal: AbortSignal.timeout(20_000),
|
|
408
|
+
});
|
|
409
|
+
const wPayload = (await wRes.json());
|
|
410
|
+
if (wRes.ok && wPayload.ok === true) {
|
|
411
|
+
withdrawnRefs.push(ref);
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
reportErrors.push(`${ref}: withdraw ${wPayload.error ?? `HTTP ${wRes.status}`}`);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
catch (err) {
|
|
418
|
+
reportErrors.push(`${ref}: withdraw ${err instanceof Error ? err.message : String(err)}`);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
const next = listPayload.next_cursor;
|
|
422
|
+
if (typeof next !== "string" || next === "")
|
|
423
|
+
break;
|
|
424
|
+
cursor = next;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
catch (err) {
|
|
428
|
+
reportErrors.push(`withdraw reconcile failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
429
|
+
}
|
|
430
|
+
const ok = reportErrors.length === 0;
|
|
200
431
|
return {
|
|
201
432
|
ok,
|
|
202
433
|
steps: {
|
|
@@ -204,11 +435,13 @@ export async function merchantPublish(options) {
|
|
|
204
435
|
agent: { ok: true, catalog_agent_id: catalogAgentId },
|
|
205
436
|
listings: {
|
|
206
437
|
ok,
|
|
207
|
-
published,
|
|
208
|
-
skipped,
|
|
209
|
-
withdrawn,
|
|
438
|
+
published: publishedRefs.length,
|
|
439
|
+
skipped: skippedRefs.length,
|
|
440
|
+
withdrawn: withdrawnRefs.length,
|
|
441
|
+
published_refs: publishedRefs,
|
|
442
|
+
skipped_refs: skippedRefs,
|
|
443
|
+
withdrawn_refs: withdrawnRefs,
|
|
210
444
|
...(reportErrors.length > 0 ? { errors: reportErrors } : {}),
|
|
211
|
-
...(raw !== undefined ? { raw } : {}),
|
|
212
445
|
},
|
|
213
446
|
},
|
|
214
447
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-publish.js","sourceRoot":"","sources":["../src/product-publish.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"product-publish.js","sourceRoot":"","sources":["../src/product-publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,5 +75,10 @@ export declare function parseStackConfig(raw: string, source: string): StackConf
|
|
|
75
75
|
/** A free loopback port (best effort; the usual bind-after-close race applies). */
|
|
76
76
|
export declare function pickFreePort(): Promise<number>;
|
|
77
77
|
export declare function newInstanceId(): string;
|
|
78
|
-
/** Detect
|
|
78
|
+
/** Detect a nearby shopping-cli source checkout.
|
|
79
|
+
*
|
|
80
|
+
* Local development keeps the repositories as siblings, while composition CI
|
|
81
|
+
* checks the pinned consumer out below the Kiwi workspace. Support both
|
|
82
|
+
* layouts so `kiwi init` remains deterministic in either environment.
|
|
83
|
+
*/
|
|
79
84
|
export declare function detectShoppingCliSrc(packageRoot: string): string | undefined;
|
|
@@ -254,9 +254,17 @@ export async function pickFreePort() {
|
|
|
254
254
|
export function newInstanceId() {
|
|
255
255
|
return randomBytes(16).toString("hex");
|
|
256
256
|
}
|
|
257
|
-
/** Detect
|
|
257
|
+
/** Detect a nearby shopping-cli source checkout.
|
|
258
|
+
*
|
|
259
|
+
* Local development keeps the repositories as siblings, while composition CI
|
|
260
|
+
* checks the pinned consumer out below the Kiwi workspace. Support both
|
|
261
|
+
* layouts so `kiwi init` remains deterministic in either environment.
|
|
262
|
+
*/
|
|
258
263
|
export function detectShoppingCliSrc(packageRoot) {
|
|
259
|
-
const
|
|
260
|
-
|
|
264
|
+
const candidates = [
|
|
265
|
+
path.resolve(packageRoot, "..", "shopping-cli"),
|
|
266
|
+
path.resolve(packageRoot, "shopping-cli"),
|
|
267
|
+
];
|
|
268
|
+
return candidates.find((candidate) => existsSync(path.join(candidate, "shopping_cli")));
|
|
261
269
|
}
|
|
262
270
|
//# sourceMappingURL=stack-config.js.map
|