@gestaltrun/dsh-workspace-bundle 0.0.0-stage → 0.1.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.
Files changed (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.i18n.yaml +37 -0
  3. package/README.md +92 -2
  4. package/README.zh.md +93 -0
  5. package/lib/index.js +2868 -0
  6. package/lib/types/agent-config-contract/agent-configs.d.ts +621 -0
  7. package/lib/types/agent-config-contract/agent-configs.js +68 -0
  8. package/lib/types/agent-config-contract/cs-hosting.d.ts +1333 -0
  9. package/lib/types/agent-config-contract/cs-hosting.js +163 -0
  10. package/lib/types/agent-config-contract/errors.d.ts +224 -0
  11. package/lib/types/agent-config-contract/errors.js +202 -0
  12. package/lib/types/agent-config-contract/ids.d.ts +65 -0
  13. package/lib/types/agent-config-contract/ids.js +35 -0
  14. package/lib/types/agent-config-contract/route.d.ts +56 -0
  15. package/lib/types/agent-config-contract/route.js +1 -0
  16. package/lib/types/agent-config-contract/test-account-claim.d.ts +24 -0
  17. package/lib/types/agent-config-contract/test-account-claim.js +5 -0
  18. package/lib/types/agent-config-format.d.ts +86 -0
  19. package/lib/types/agent-config-format.js +119 -0
  20. package/lib/types/agent-config-observation.d.ts +64 -0
  21. package/lib/types/agent-config-observation.js +448 -0
  22. package/lib/types/agent-config-source.d.ts +78 -0
  23. package/lib/types/agent-config-source.js +411 -0
  24. package/lib/types/agent-config-types.d.ts +67 -0
  25. package/lib/types/agent-config-types.js +1 -0
  26. package/lib/types/bundled-agent-config.d.ts +29 -0
  27. package/lib/types/bundled-agent-config.js +47 -0
  28. package/lib/types/config.d.ts +34 -0
  29. package/lib/types/config.js +53 -0
  30. package/lib/types/definition.d.ts +82 -0
  31. package/lib/types/definition.js +20 -0
  32. package/lib/types/digest.d.ts +38 -0
  33. package/lib/types/digest.js +243 -0
  34. package/lib/types/errors.d.ts +22 -0
  35. package/lib/types/errors.js +26 -0
  36. package/lib/types/filesystem.d.ts +16 -0
  37. package/lib/types/filesystem.js +64 -0
  38. package/lib/types/index.d.ts +28 -0
  39. package/lib/types/index.js +19 -0
  40. package/lib/types/journal.d.ts +51 -0
  41. package/lib/types/journal.js +109 -0
  42. package/lib/types/local-host-identity.d.ts +65 -0
  43. package/lib/types/local-host-identity.js +87 -0
  44. package/lib/types/local-host-replacement.d.ts +49 -0
  45. package/lib/types/local-host-replacement.js +112 -0
  46. package/lib/types/paths.d.ts +26 -0
  47. package/lib/types/paths.js +48 -0
  48. package/lib/types/provider.d.ts +83 -0
  49. package/lib/types/provider.js +560 -0
  50. package/lib/types/session-events.d.ts +23 -0
  51. package/lib/types/session-events.js +14 -0
  52. package/lib/types/types.d.ts +126 -0
  53. package/lib/types/types.js +1 -0
  54. package/locale/en.json +6 -0
  55. package/locale/zh.json +6 -0
  56. package/package.json +69 -3
@@ -0,0 +1,163 @@
1
+ /** 客服托管权、租约与运行状态检查点契约。子账号归属使用本服务 UserId。 @module */
2
+ import { z } from 'zod';
3
+ import { TenantId, UserId } from "./ids.js";
4
+ /** 旺旺账号的稳定、不透明标识;不作昵称或大小写归一化。 */
5
+ export const WangwangAccountId = z.string().min(1).max(200).brand();
6
+ /** 本机安装标识,由 Host 产生并持久保存。 */
7
+ export const InstallationId = z.uuid().brand();
8
+ /** 云端沙箱标识,不限定执行器的标识格式。 */
9
+ export const SandboxId = z.string().min(1).max(200).brand();
10
+ /** 持有者种类参与匹配,相同文本的安装与沙箱不是同一持有者。 */
11
+ export const HostingHolder = z.discriminatedUnion('kind', [
12
+ z.object({ kind: z.literal('installation'), id: InstallationId }),
13
+ z.object({ kind: z.literal('sandbox'), id: SandboxId }),
14
+ ]).meta({ id: 'HostingHolder' });
15
+ /** 单调递增的 CAS 代次,JSON 安全整数。 */
16
+ export const HostingEpoch = z.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
17
+ export const HostingLeaseParams = z.object({ tenantId: TenantId, userId: UserId, accountId: WangwangAccountId });
18
+ /** 禁止通过查询串指定身份或客户端时间。 */
19
+ export const HostingLeaseQuery = z.strictObject({});
20
+ /** 未开通不保存记录,调用方按本地既有行为继续运行。 */
21
+ export const HostingNotEnabled = z.object({ cloudEnabled: z.literal(false), serverTime: z.iso.datetime() }).meta({ id: 'HostingNotEnabled' });
22
+ /** 有效性以 serverTime 为准;到期记录保留持有者与 epoch 供 CAS 接管。 */
23
+ export const HostingEnabled = z.object({
24
+ cloudEnabled: z.literal(true), holder: HostingHolder.nullable(), epoch: HostingEpoch,
25
+ state: z.enum(['unheld', 'active', 'expired']), leaseExpiresAt: z.iso.datetime().nullable(),
26
+ remainingSeconds: z.number().int().nonnegative(), serverTime: z.iso.datetime(), updatedAt: z.iso.datetime(),
27
+ }).meta({ id: 'HostingEnabled' });
28
+ export const HostingLeaseResponse = z.discriminatedUnion('cloudEnabled', [HostingNotEnabled, HostingEnabled]).meta({ id: 'HostingLeaseResponse' });
29
+ /** 取得只允许无持有者或已到期;expectedEpoch 必须匹配,成功后加一。 */
30
+ export const AcquireHostingLeaseRequest = z.strictObject({ holder: HostingHolder, expectedEpoch: HostingEpoch }).meta({ id: 'AcquireHostingLeaseRequest' });
31
+ /** 云端首次开通只接受当前沙箱;不携带 epoch,也不接受本机安装。 */
32
+ export const FirstEnableHostingLeaseRequest = z.strictObject({ holder: z.strictObject({ kind: z.literal('sandbox'), id: SandboxId }) }).meta({ id: 'FirstEnableHostingLeaseRequest' });
33
+ /** 续约和释放验证完整持有者与当前 epoch;过期续约拒绝。 */
34
+ export const HostingLeaseOwnerRequest = z.strictObject({ holder: HostingHolder, epoch: HostingEpoch }).meta({ id: 'HostingLeaseOwnerRequest' });
35
+ /** 交接要求源租约有效;目标获得新 epoch 与完整 TTL。 */
36
+ export const HandoffHostingLeaseRequest = HostingLeaseOwnerRequest.extend({ target: HostingHolder }).meta({ id: 'HandoffHostingLeaseRequest' });
37
+ const path = '/v1/tenants/{tenantId}/cs-hosting/users/{userId}/accounts/{accountId}/lease';
38
+ const problems = {
39
+ 503: ['SERVICE_UNAVAILABLE'],
40
+ 401: ['SESSION_REQUIRED', 'SESSION_EXPIRED'],
41
+ 403: ['NO_CURRENT_TENANT', 'NOT_A_MEMBER', 'HOSTING_UNAVAILABLE', 'HOSTING_USER_MISMATCH'],
42
+ 409: ['TENANT_NOT_CURRENT', 'HOSTING_EPOCH_MISMATCH', 'HOSTING_HELD', 'HOSTING_HOLDER_MISMATCH', 'HOSTING_LEASE_EXPIRED'],
43
+ };
44
+ const responses = { 200: { description: '托管权状态;未开通的操作同样返回 cloudEnabled=false,不创建记录', schema: HostingLeaseResponse, headers: { 'Cache-Control': { description: '租约状态不得缓存', schema: z.literal('no-store') } } } };
45
+ const queryResponses = { 200: { description: '托管权状态。本账号没有记录但同一用户在其他旺旺账号上已有未过期的 active 持有者时,返回该持有者且 cloudEnabled=true。本账号已有未开通记录,或没有其他 active 持有者时,返回 cloudEnabled=false,不创建记录', schema: HostingLeaseResponse, headers: responses[200].headers } };
46
+ const firstEnableResponses = { 200: { description: '已开通的托管权。没有租约记录且同一用户没有其他 active 持有者时创建沙箱持有的 active 租约;同一沙箱重复调用不改变 epoch、持有者或到期时间', schema: HostingLeaseResponse, headers: { 'Cache-Control': { description: '租约状态不得缓存', schema: z.literal('no-store') } } } };
47
+ /** 只能查询当前店铺租户中本人的旺旺账号托管权。本账号无记录但同一用户已有 active 持有者时返回该持有者。 */
48
+ export const getHostingLease = { method: 'get', path, summary: '查询本人托管权', auth: 'tenant', request: { params: HostingLeaseParams, query: HostingLeaseQuery }, responses: queryResponses, problems };
49
+ const acquireResponses = { 200: { description: '托管权状态。同一用户在其他旺旺账号上已有 active 持有者时回答 HOSTING_HELD,不创建记录。本账号未开通且没有其他 active 持有者时返回 cloudEnabled=false,不创建记录', schema: HostingLeaseResponse, headers: responses[200].headers } };
50
+ /** 同一用户在其他旺旺账号上已有 active 持有者时回答 HOSTING_HELD,不创建记录。本账号未开通且没有其他 active 持有者时仍返回 cloudEnabled=false。 */
51
+ export const acquireHostingLease = { method: 'post', path: `${path}/acquire`, summary: 'CAS 取得托管租约', auth: 'tenant', request: { params: HostingLeaseParams, query: HostingLeaseQuery, body: AcquireHostingLeaseRequest }, responses: acquireResponses, problems: { ...problems, 409: [...problems[409], 'LOCAL_HOST_REPLACED'] } };
52
+ /** 没有租约记录时创建 cloudEnabled 的沙箱租约;已有记录拒绝,不抢占。同一用户在其他旺旺账号上已有 active 持有者时回答 HOSTING_HELD,不插入。 */
53
+ export const firstEnableHostingLease = { method: 'post', path: `${path}/first-enable`, summary: '云端沙箱首次开通本人托管权', auth: 'tenant', request: { params: HostingLeaseParams, query: HostingLeaseQuery, body: FirstEnableHostingLeaseRequest }, responses: firstEnableResponses, problems: { ...problems, 403: [...problems[403], 'CLOUD_NOT_ELIGIBLE', 'SANDBOX_SESSION_UNBOUND'] } };
54
+ const renewResponses = { 200: { description: '已续约的托管权。本机持有者未开通时返回 cloudEnabled=false 且不创建记录;沙箱持有者没有租约行,或前任观察与锁内判断不一致时不刷新租约', schema: HostingLeaseResponse, headers: responses[200].headers } };
55
+ /** 已交接或首次开通给沙箱的同一 epoch,在采用及续约时重新确认旧实例退出,成功保持该 epoch。没有租约行,或未完成与锁内判断一致的前任观察时,沙箱续约拒绝且不更新。 */
56
+ export const renewHostingLease = { method: 'post', path: `${path}/renew`, summary: '续约本人托管权', auth: 'tenant', request: { params: HostingLeaseParams, query: HostingLeaseQuery, body: HostingLeaseOwnerRequest }, responses: renewResponses, problems: { ...problems, 403: [...problems[403], 'SANDBOX_SESSION_UNBOUND'], 409: [...problems[409], 'LOCAL_HOST_REPLACED', 'PLACEMENT_KEY_NOT_READY', 'PREDECESSOR_STILL_RUNNING'], 503: ['SERVICE_UNAVAILABLE', 'PREDECESSOR_EXIT_UNKNOWN'] } };
57
+ /** 释放推进 epoch 并清空持有者;到期的当前持有者也可释放。 */
58
+ export const releaseHostingLease = { method: 'post', path: `${path}/release`, summary: '释放本人托管权', auth: 'tenant', request: { params: HostingLeaseParams, query: HostingLeaseQuery, body: HostingLeaseOwnerRequest }, responses, problems };
59
+ export const handoffHostingLease = { method: 'post', path: `${path}/handoff`, summary: 'CAS 交接本人托管权', auth: 'tenant', request: { params: HostingLeaseParams, query: HostingLeaseQuery, body: HandoffHostingLeaseRequest }, responses, problems: { ...problems, 409: [...problems[409], 'LOCAL_HOST_REPLACED'] } };
60
+ const whitespace = /\s/u;
61
+ /** 不透明令牌:非空,且不含空白或 ASCII 控制字符。 */
62
+ function opaqueText(value) {
63
+ if (whitespace.test(value))
64
+ return false;
65
+ for (const char of value) {
66
+ const code = char.codePointAt(0) ?? 0;
67
+ if (code < 32 || code === 127)
68
+ return false;
69
+ }
70
+ return true;
71
+ }
72
+ const opaque = (max) => z.string().min(1).max(max).refine(opaqueText);
73
+ const count = z.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
74
+ /** 一条消息流的不透明游标。同一次上报里 streamId 不可重复,不含消息正文。 */
75
+ export const HostingStreamCursor = z.strictObject({
76
+ streamId: opaque(200),
77
+ cursor: opaque(1024),
78
+ }).meta({ id: 'HostingStreamCursor' });
79
+ /** 各消息流游标,最多 64 条。 */
80
+ export const HostingStreamCursors = z.array(HostingStreamCursor).max(64).superRefine((items, ctx) => {
81
+ const seen = new Set();
82
+ items.forEach((item, index) => {
83
+ if (!seen.has(item.streamId)) {
84
+ seen.add(item.streamId);
85
+ return;
86
+ }
87
+ ctx.addIssue({ code: 'custom', path: [index, 'streamId'], message: 'Duplicate stream' });
88
+ });
89
+ });
90
+ /** 已提交事件的 sha256,不是正文摘要。 */
91
+ export const HostingCheckpointSession = z.strictObject({
92
+ id: opaque(200),
93
+ eventCount: count,
94
+ digest: z.string().regex(/^[a-f0-9]{64}$/),
95
+ }).meta({ id: 'HostingCheckpointSession' });
96
+ /** running 正在自动接待,draining 正在排空,stopped 已停止自动接待,unavailable 无法确认仍在接待。 */
97
+ export const HostingCheckpointStatus = z.enum(['running', 'draining', 'stopped', 'unavailable']).meta({ id: 'HostingCheckpointStatus' });
98
+ const hostVersion = z.string().regex(/^[0-9A-Za-z][0-9A-Za-z.+_-]{0,99}$/);
99
+ /** 规范 SemVer 2.0,最多 200 字符,保留预发布和构建元数据,不接受前缀或空白。 */
100
+ export const AgentConfigSemver = z.string().max(200).regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?(?![\s\S])/);
101
+ /** 与 Host Agent 配置错误分类对齐;查询失败与作用域变化不计采用拒绝。 */
102
+ export const AgentConfigErrorCode = z.enum([
103
+ 'AGENT_CONFIG_INCOMPATIBLE', 'AGENT_CONFIG_DIGEST_MISMATCH', 'AGENT_CONFIG_INVALID',
104
+ 'AGENT_CONFIG_DOWNLOAD_FAILED', 'AGENT_CONFIG_APPLY_FAILED', 'AGENT_CONFIG_QUERY_FAILED', 'AGENT_CONFIG_SCOPE_CHANGED',
105
+ ]).meta({ id: 'AgentConfigErrorCode' });
106
+ /** 仅包含固定码与已知时的被拒版本,不包含消息、路径、URL 或凭据。 */
107
+ export const AgentConfigRejection = z.strictObject({ code: AgentConfigErrorCode, version: AgentConfigSemver.optional() }).meta({ id: 'AgentConfigRejection' });
108
+ /**
109
+ * 某个旺旺账号的最新运行状态检查点。revision 从 1 起,跨 epoch 单调递增,不随代次重置。
110
+ * reportedAt 是服务端记下的上报时间,调用方用它判断是否过期。旧检查点不能作为补发依据。
111
+ */
112
+ export const HostingCheckpoint = z.strictObject({
113
+ tenantId: TenantId,
114
+ userId: UserId,
115
+ accountId: WangwangAccountId,
116
+ epoch: HostingEpoch,
117
+ revision: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER),
118
+ streamCursors: HostingStreamCursors,
119
+ session: HostingCheckpointSession.nullable(),
120
+ pendingCount: count,
121
+ unknownSendCount: count,
122
+ status: HostingCheckpointStatus,
123
+ hostVersion,
124
+ reportedAt: z.iso.datetime(),
125
+ }).meta({ id: 'HostingCheckpoint' });
126
+ /**
127
+ * 上报当前检查点。expectedRevision 为 0 表示尚无记录,否则必须等于当前 revision。
128
+ * 只接受 held 且 epoch 匹配的托管租约;未开通、未持有或 epoch 不同为 HOSTING_EPOCH_MISMATCH。
129
+ * revision 不匹配或加一后超出安全整数为 HOSTING_REVISION_MISMATCH,且不修改记录。限制开关关闭时不比较持有者;开启时本地请求必须提供与模块名册一致的 holder。
130
+ */
131
+ export const ReportHostingCheckpointRequest = z.strictObject({
132
+ /** 本地 Host 限制开启时必须提供;与模块名册的 hostId 相同。 */
133
+ holder: HostingHolder.optional(),
134
+ epoch: HostingEpoch,
135
+ expectedRevision: count,
136
+ streamCursors: HostingStreamCursors,
137
+ session: HostingCheckpointSession.nullable(),
138
+ pendingCount: count,
139
+ unknownSendCount: count,
140
+ status: HostingCheckpointStatus,
141
+ hostVersion,
142
+ /** Host 已经成功应用的 Agent 配置版本;未上报表示未知,不接受以分配版本代替。 */
143
+ agentConfigVersion: z.string().min(1).max(200).optional(),
144
+ /** Host 的 Agent 配置 API,独立于应用 hostVersion;缺失表示未知。 */
145
+ hostAgentConfigApiVersion: AgentConfigSemver.optional(),
146
+ /** 已提交内容是否禁止执行;缺失不代表 false。 */
147
+ agentConfigBlocked: z.boolean().optional(),
148
+ /** null 明确表示没有拒绝,缺失表示未上报;三个新字段齐全才构成完整观测。 */
149
+ agentConfigRejection: AgentConfigRejection.nullable().optional(),
150
+ }).meta({ id: 'ReportHostingCheckpointRequest' });
151
+ const checkpointPath = '/v1/tenants/{tenantId}/cs-hosting/users/{userId}/accounts/{accountId}/checkpoint';
152
+ const checkpointResponses = { 200: { description: '最新运行状态与游标。reportedAt 为上报时间,调用方据此判断是否过期;旧检查点不能作为补发依据', schema: HostingCheckpoint, headers: { 'Cache-Control': { description: '检查点不得缓存', schema: z.literal('no-store') } } } };
153
+ const checkpointProblems = {
154
+ 503: ['SERVICE_UNAVAILABLE'],
155
+ 401: ['SESSION_REQUIRED', 'SESSION_EXPIRED'],
156
+ 403: ['NO_CURRENT_TENANT', 'NOT_A_MEMBER', 'HOSTING_UNAVAILABLE', 'HOSTING_USER_MISMATCH'],
157
+ 409: ['TENANT_NOT_CURRENT'],
158
+ };
159
+ /** 读取本人该旺旺账号的最新检查点。没有记录时 404,不把缺失当成可补发的空游标。 */
160
+ export const getHostingCheckpoint = { method: 'get', path: checkpointPath, summary: '读取本人运行状态检查点', auth: 'tenant', request: { params: HostingLeaseParams, query: HostingLeaseQuery }, responses: checkpointResponses, problems: { ...checkpointProblems, 404: ['NOT_FOUND'] } };
161
+ /** 当前持有者上报。本机会话与沙箱会话都只按租约 epoch 判断,旧 epoch 或旧 revision 被拒绝。 */
162
+ export const reportHostingCheckpoint = { method: 'post', path: checkpointPath, summary: 'CAS 上报本人运行状态检查点', auth: 'tenant', request: { params: HostingLeaseParams, query: HostingLeaseQuery, body: ReportHostingCheckpointRequest }, responses: checkpointResponses, problems: { ...checkpointProblems, 409: ['TENANT_NOT_CURRENT', 'HOSTING_EPOCH_MISMATCH', 'HOSTING_REVISION_MISMATCH', 'HOSTING_HOLDER_MISMATCH', 'LOCAL_HOST_REPLACED'] } };
163
+ export const CS_HOSTING_ROUTES = [getHostingLease, acquireHostingLease, firstEnableHostingLease, renewHostingLease, releaseHostingLease, handoffHostingLease, getHostingCheckpoint, reportHostingCheckpoint];
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Error model of the v1 API: RFC 9457 `application/problem+json` bodies with a closed `code` set.
3
+ * @module
4
+ */
5
+ import { z } from 'zod';
6
+ /**
7
+ * Closed set of problem codes. Clients choose localized copy by `code` and fall back to generic copy
8
+ * for a code they do not know; `title` and `detail` are diagnostic only.
9
+ */
10
+ export declare const ERROR_CODES: readonly ["MERCHANT_NOT_ALLOWED", "MERCHANT_ACCOUNT_TYPE_UNSUPPORTED", "MERCHANT_SUB_ACCOUNT_MISMATCH", "MERCHANT_IDENTITY_NOT_FOUND", "MERCHANT_IDENTITY_KIND_MISMATCH", "MERCHANT_IDENTITY_UNAVAILABLE", "MERCHANT_ALREADY_ALLOWED", "MERCHANT_PREVIEW_CHANGED", "SANDBOX_ALREADY_EXISTS", "NAS_CAPACITY_INSUFFICIENT", "NAS_USAGE_UNAVAILABLE", "MERCHANT_TOKEN_UNAVAILABLE", "TEST_ACCOUNT_NOT_REGISTERED", "TEST_ACCOUNT_CLAIMED", "TEST_ACCOUNT_CLAIM_HOLDER_MISMATCH", "VALIDATION_FAILED", "NOT_FOUND", "SESSION_REQUIRED", "SESSION_EXPIRED", "NO_CURRENT_TENANT", "TENANT_NOT_CURRENT", "NOT_A_MEMBER", "ADMIN_REQUIRED", "RESOURCE_CENTER_UNAVAILABLE", "CLOUD_MODELS_UNAVAILABLE", "CLOUD_QUOTA_EXCEEDED", "CLOUD_LOGIN_RATE_LIMITED", "AGENT_CONFIGS_UNAVAILABLE", "AGENT_CONFIG_PLAN_NOT_INITIALIZED", "SHOP_ACCOUNT_CANNOT_JOIN", "SHOP_ACCOUNT_CANNOT_SWITCH", "SHOP_ACCOUNT_CANNOT_CREATE", "SHOP_TENANT_CANNOT_REMOVE_MEMBER", "SHOP_TENANT_NAME_IMMUTABLE", "SHOP_TENANT_CANNOT_INVITE", "INVITE_EXPIRED", "INVITE_REVOKED", "OWNER_IMMUTABLE", "ROLE_NAME_TAKEN", "VERSION_CONFLICT", "OPERATION_CONFLICT", "MATERIAL_REFERENCED", "ASSET_CHECKSUM_MISMATCH", "ASSET_COMMIT_IN_PROGRESS", "ASSET_NOT_UPLOADED", "ASSET_NOT_COMMITTED", "MATERIAL_ARCHIVED", "CLIENT_UPGRADE_REQUIRED", "LOGIN_ATTEMPT_GONE", "LOGIN_VERIFIER_MISMATCH", "SERVICE_UNAVAILABLE", "PLATFORM_IDENTITY_NOT_ALLOWED", "PLATFORM_IDENTITY_MISMATCH", "KNOWLEDGE_MANAGE_REQUIRED", "KNOWLEDGE_OPERATION_NOT_ALLOWED", "KNOWLEDGE_PERSONAL_USE_REQUIRED", "KNOWLEDGE_SHOP_ONLY", "KNOWLEDGE_CONFLICT", "KNOWLEDGE_RUNTIME_CURSOR_EXPIRED", "KNOWLEDGE_OPS_ADMIN_REQUIRED", "KNOWLEDGE_RECOVERY_OUTCOME_UNKNOWN", "KNOWLEDGE_DISTILL_OUTCOME_UNKNOWN", "PREVIEW_STALE", "AMAP_MCP_SHOP_ONLY", "AMAP_MCP_METHOD_NOT_ALLOWED", "AMAP_MCP_TOOL_NOT_ALLOWED", "AMAP_MCP_TOO_LARGE", "AMAP_MCP_UNAVAILABLE", "AMAP_MCP_PROVIDER_LIMITED", "AMAP_MCP_UPSTREAM_ERROR", "AMAP_MCP_TIMEOUT", "AMAP_MCP_PROTOCOL_ERROR", "HOSTING_UNAVAILABLE", "HOSTING_USER_MISMATCH", "HOSTING_EPOCH_MISMATCH", "HOSTING_REVISION_MISMATCH", "HOSTING_ARCHIVE_CONFLICT", "HOSTING_HELD", "HOSTING_HOLDER_MISMATCH", "HOSTING_LEASE_EXPIRED", "SANDBOX_UNAVAILABLE", "SANDBOX_NOT_RUNNING", "EVALUATION_ACTIVE", "EVALUATION_EXECUTOR_UNSUPPORTED", "EVALUATION_HOSTING_ACTIVE", "SANDBOX_UPGRADE_CONFLICT", "SANDBOX_RECOVERY_CONFLICT", "SANDBOX_UPGRADE_REJECTED", "SANDBOX_RELEASE_UNAVAILABLE", "SANDBOX_SESSION_UNBOUND", "PREDECESSOR_STILL_RUNNING", "PREDECESSOR_EXIT_UNKNOWN", "ENTRY_TOKEN_REJECTED", "ENTRY_TOKEN_EXPIRED", "ENTRY_TOKEN_SANDBOX_MISMATCH", "OPERATOR_INVALID_CREDENTIALS", "OPERATOR_INVALID_2FA", "OPERATOR_ROLE_REQUIRED", "OPERATOR_ACCOUNT_INACTIVE", "OPERATOR_RATE_LIMITED", "OPERATOR_SESSION_LIMIT", "OPERATOR_LOGIN_RATE_LIMITED", "OPERATOR_SESSION_REQUIRED", "OPERATOR_SESSION_EXPIRED", "SUB2API_UNAVAILABLE", "SERVICE_CREDENTIAL_REQUIRED", "SERVICE_CREDENTIAL_REJECTED", "CUSTOMER_MESSAGES_UNAVAILABLE", "MESSAGE_PENDING_VERIFICATION", "MAPPING_NOT_ALLOWED", "SPACE_TOKEN_REQUIRED", "SPACE_TOKEN_REJECTED", "SEGMENT_SPACE_FORBIDDEN", "CLOUD_NOT_ELIGIBLE", "OPERATION_MISMATCH", "SANDBOX_PROVISION_CONFLICT", "PROVISION_ALREADY_COMPLETED", "HANDOFF_CONFLICT", "HANDOFF_REVISION_MISMATCH", "HANDOFF_NOT_CANCELLABLE", "INSTALLATION_SESSION_REQUIRED", "INSTALLATION_CHALLENGE_REJECTED", "INSTALLATION_CHALLENGE_EXPIRED", "INSTALLATION_BINDING_CONFLICT", "INSTALLATION_BINDING_REQUIRED", "LOCAL_HOST_REPLACED", "HANDOFF_STATE_CONFLICT", "HANDOFF_IMPORT_REQUIRED", "HANDOFF_MANIFEST_MISMATCH", "PLACEMENT_KEY_CONFLICT", "PLACEMENT_KEY_NOT_READY", "PLACEMENT_TOKEN_REJECTED", "SALES_CASES_SHOP_ONLY", "OBSERVATION_BINDING_REJECTED", "OBSERVATION_EXPIRED", "OBSERVATION_TOO_LARGE", "CUSTOMER_SHOP_REQUIRED", "CUSTOMER_NOT_FOUND", "CUSTOMER_REVISION_CONFLICT", "CUSTOMER_OPERATION_MISMATCH", "CUSTOMER_SOURCE_STALE", "CUSTOMER_ACTIVE_CASE_EXISTS", "CUSTOMER_WRITE_FENCED", "CUSTOMER_EVIDENCE_PENDING", "CUSTOMER_SEND_UNRESOLVED", "CUSTOMER_DATA_TOO_LARGE", "CUSTOMER_CAPACITY_EXCEEDED", "CUSTOMER_RATE_LIMITED", "CUSTOMER_DATA_UNAVAILABLE", "INTERNAL"];
11
+ /** One member of {@link ERROR_CODES}. */
12
+ export declare const ErrorCode: z.ZodEnum<{
13
+ MERCHANT_NOT_ALLOWED: "MERCHANT_NOT_ALLOWED";
14
+ MERCHANT_ACCOUNT_TYPE_UNSUPPORTED: "MERCHANT_ACCOUNT_TYPE_UNSUPPORTED";
15
+ MERCHANT_SUB_ACCOUNT_MISMATCH: "MERCHANT_SUB_ACCOUNT_MISMATCH";
16
+ MERCHANT_IDENTITY_NOT_FOUND: "MERCHANT_IDENTITY_NOT_FOUND";
17
+ MERCHANT_IDENTITY_KIND_MISMATCH: "MERCHANT_IDENTITY_KIND_MISMATCH";
18
+ MERCHANT_IDENTITY_UNAVAILABLE: "MERCHANT_IDENTITY_UNAVAILABLE";
19
+ MERCHANT_ALREADY_ALLOWED: "MERCHANT_ALREADY_ALLOWED";
20
+ MERCHANT_PREVIEW_CHANGED: "MERCHANT_PREVIEW_CHANGED";
21
+ SANDBOX_ALREADY_EXISTS: "SANDBOX_ALREADY_EXISTS";
22
+ NAS_CAPACITY_INSUFFICIENT: "NAS_CAPACITY_INSUFFICIENT";
23
+ NAS_USAGE_UNAVAILABLE: "NAS_USAGE_UNAVAILABLE";
24
+ MERCHANT_TOKEN_UNAVAILABLE: "MERCHANT_TOKEN_UNAVAILABLE";
25
+ TEST_ACCOUNT_NOT_REGISTERED: "TEST_ACCOUNT_NOT_REGISTERED";
26
+ TEST_ACCOUNT_CLAIMED: "TEST_ACCOUNT_CLAIMED";
27
+ TEST_ACCOUNT_CLAIM_HOLDER_MISMATCH: "TEST_ACCOUNT_CLAIM_HOLDER_MISMATCH";
28
+ VALIDATION_FAILED: "VALIDATION_FAILED";
29
+ NOT_FOUND: "NOT_FOUND";
30
+ SESSION_REQUIRED: "SESSION_REQUIRED";
31
+ SESSION_EXPIRED: "SESSION_EXPIRED";
32
+ NO_CURRENT_TENANT: "NO_CURRENT_TENANT";
33
+ TENANT_NOT_CURRENT: "TENANT_NOT_CURRENT";
34
+ NOT_A_MEMBER: "NOT_A_MEMBER";
35
+ ADMIN_REQUIRED: "ADMIN_REQUIRED";
36
+ RESOURCE_CENTER_UNAVAILABLE: "RESOURCE_CENTER_UNAVAILABLE";
37
+ CLOUD_MODELS_UNAVAILABLE: "CLOUD_MODELS_UNAVAILABLE";
38
+ CLOUD_QUOTA_EXCEEDED: "CLOUD_QUOTA_EXCEEDED";
39
+ CLOUD_LOGIN_RATE_LIMITED: "CLOUD_LOGIN_RATE_LIMITED";
40
+ AGENT_CONFIGS_UNAVAILABLE: "AGENT_CONFIGS_UNAVAILABLE";
41
+ AGENT_CONFIG_PLAN_NOT_INITIALIZED: "AGENT_CONFIG_PLAN_NOT_INITIALIZED";
42
+ SHOP_ACCOUNT_CANNOT_JOIN: "SHOP_ACCOUNT_CANNOT_JOIN";
43
+ SHOP_ACCOUNT_CANNOT_SWITCH: "SHOP_ACCOUNT_CANNOT_SWITCH";
44
+ SHOP_ACCOUNT_CANNOT_CREATE: "SHOP_ACCOUNT_CANNOT_CREATE";
45
+ SHOP_TENANT_CANNOT_REMOVE_MEMBER: "SHOP_TENANT_CANNOT_REMOVE_MEMBER";
46
+ SHOP_TENANT_NAME_IMMUTABLE: "SHOP_TENANT_NAME_IMMUTABLE";
47
+ SHOP_TENANT_CANNOT_INVITE: "SHOP_TENANT_CANNOT_INVITE";
48
+ INVITE_EXPIRED: "INVITE_EXPIRED";
49
+ INVITE_REVOKED: "INVITE_REVOKED";
50
+ OWNER_IMMUTABLE: "OWNER_IMMUTABLE";
51
+ ROLE_NAME_TAKEN: "ROLE_NAME_TAKEN";
52
+ VERSION_CONFLICT: "VERSION_CONFLICT";
53
+ OPERATION_CONFLICT: "OPERATION_CONFLICT";
54
+ MATERIAL_REFERENCED: "MATERIAL_REFERENCED";
55
+ ASSET_CHECKSUM_MISMATCH: "ASSET_CHECKSUM_MISMATCH";
56
+ ASSET_COMMIT_IN_PROGRESS: "ASSET_COMMIT_IN_PROGRESS";
57
+ ASSET_NOT_UPLOADED: "ASSET_NOT_UPLOADED";
58
+ ASSET_NOT_COMMITTED: "ASSET_NOT_COMMITTED";
59
+ MATERIAL_ARCHIVED: "MATERIAL_ARCHIVED";
60
+ CLIENT_UPGRADE_REQUIRED: "CLIENT_UPGRADE_REQUIRED";
61
+ LOGIN_ATTEMPT_GONE: "LOGIN_ATTEMPT_GONE";
62
+ LOGIN_VERIFIER_MISMATCH: "LOGIN_VERIFIER_MISMATCH";
63
+ SERVICE_UNAVAILABLE: "SERVICE_UNAVAILABLE";
64
+ PLATFORM_IDENTITY_NOT_ALLOWED: "PLATFORM_IDENTITY_NOT_ALLOWED";
65
+ PLATFORM_IDENTITY_MISMATCH: "PLATFORM_IDENTITY_MISMATCH";
66
+ KNOWLEDGE_MANAGE_REQUIRED: "KNOWLEDGE_MANAGE_REQUIRED";
67
+ KNOWLEDGE_OPERATION_NOT_ALLOWED: "KNOWLEDGE_OPERATION_NOT_ALLOWED";
68
+ KNOWLEDGE_PERSONAL_USE_REQUIRED: "KNOWLEDGE_PERSONAL_USE_REQUIRED";
69
+ KNOWLEDGE_SHOP_ONLY: "KNOWLEDGE_SHOP_ONLY";
70
+ KNOWLEDGE_CONFLICT: "KNOWLEDGE_CONFLICT";
71
+ KNOWLEDGE_RUNTIME_CURSOR_EXPIRED: "KNOWLEDGE_RUNTIME_CURSOR_EXPIRED";
72
+ KNOWLEDGE_OPS_ADMIN_REQUIRED: "KNOWLEDGE_OPS_ADMIN_REQUIRED";
73
+ KNOWLEDGE_RECOVERY_OUTCOME_UNKNOWN: "KNOWLEDGE_RECOVERY_OUTCOME_UNKNOWN";
74
+ KNOWLEDGE_DISTILL_OUTCOME_UNKNOWN: "KNOWLEDGE_DISTILL_OUTCOME_UNKNOWN";
75
+ PREVIEW_STALE: "PREVIEW_STALE";
76
+ AMAP_MCP_SHOP_ONLY: "AMAP_MCP_SHOP_ONLY";
77
+ AMAP_MCP_METHOD_NOT_ALLOWED: "AMAP_MCP_METHOD_NOT_ALLOWED";
78
+ AMAP_MCP_TOOL_NOT_ALLOWED: "AMAP_MCP_TOOL_NOT_ALLOWED";
79
+ AMAP_MCP_TOO_LARGE: "AMAP_MCP_TOO_LARGE";
80
+ AMAP_MCP_UNAVAILABLE: "AMAP_MCP_UNAVAILABLE";
81
+ AMAP_MCP_PROVIDER_LIMITED: "AMAP_MCP_PROVIDER_LIMITED";
82
+ AMAP_MCP_UPSTREAM_ERROR: "AMAP_MCP_UPSTREAM_ERROR";
83
+ AMAP_MCP_TIMEOUT: "AMAP_MCP_TIMEOUT";
84
+ AMAP_MCP_PROTOCOL_ERROR: "AMAP_MCP_PROTOCOL_ERROR";
85
+ HOSTING_UNAVAILABLE: "HOSTING_UNAVAILABLE";
86
+ HOSTING_USER_MISMATCH: "HOSTING_USER_MISMATCH";
87
+ HOSTING_EPOCH_MISMATCH: "HOSTING_EPOCH_MISMATCH";
88
+ HOSTING_REVISION_MISMATCH: "HOSTING_REVISION_MISMATCH";
89
+ HOSTING_ARCHIVE_CONFLICT: "HOSTING_ARCHIVE_CONFLICT";
90
+ HOSTING_HELD: "HOSTING_HELD";
91
+ HOSTING_HOLDER_MISMATCH: "HOSTING_HOLDER_MISMATCH";
92
+ HOSTING_LEASE_EXPIRED: "HOSTING_LEASE_EXPIRED";
93
+ SANDBOX_UNAVAILABLE: "SANDBOX_UNAVAILABLE";
94
+ SANDBOX_NOT_RUNNING: "SANDBOX_NOT_RUNNING";
95
+ EVALUATION_ACTIVE: "EVALUATION_ACTIVE";
96
+ EVALUATION_EXECUTOR_UNSUPPORTED: "EVALUATION_EXECUTOR_UNSUPPORTED";
97
+ EVALUATION_HOSTING_ACTIVE: "EVALUATION_HOSTING_ACTIVE";
98
+ SANDBOX_UPGRADE_CONFLICT: "SANDBOX_UPGRADE_CONFLICT";
99
+ SANDBOX_RECOVERY_CONFLICT: "SANDBOX_RECOVERY_CONFLICT";
100
+ SANDBOX_UPGRADE_REJECTED: "SANDBOX_UPGRADE_REJECTED";
101
+ SANDBOX_RELEASE_UNAVAILABLE: "SANDBOX_RELEASE_UNAVAILABLE";
102
+ SANDBOX_SESSION_UNBOUND: "SANDBOX_SESSION_UNBOUND";
103
+ PREDECESSOR_STILL_RUNNING: "PREDECESSOR_STILL_RUNNING";
104
+ PREDECESSOR_EXIT_UNKNOWN: "PREDECESSOR_EXIT_UNKNOWN";
105
+ ENTRY_TOKEN_REJECTED: "ENTRY_TOKEN_REJECTED";
106
+ ENTRY_TOKEN_EXPIRED: "ENTRY_TOKEN_EXPIRED";
107
+ ENTRY_TOKEN_SANDBOX_MISMATCH: "ENTRY_TOKEN_SANDBOX_MISMATCH";
108
+ OPERATOR_INVALID_CREDENTIALS: "OPERATOR_INVALID_CREDENTIALS";
109
+ OPERATOR_INVALID_2FA: "OPERATOR_INVALID_2FA";
110
+ OPERATOR_ROLE_REQUIRED: "OPERATOR_ROLE_REQUIRED";
111
+ OPERATOR_ACCOUNT_INACTIVE: "OPERATOR_ACCOUNT_INACTIVE";
112
+ OPERATOR_RATE_LIMITED: "OPERATOR_RATE_LIMITED";
113
+ OPERATOR_SESSION_LIMIT: "OPERATOR_SESSION_LIMIT";
114
+ OPERATOR_LOGIN_RATE_LIMITED: "OPERATOR_LOGIN_RATE_LIMITED";
115
+ OPERATOR_SESSION_REQUIRED: "OPERATOR_SESSION_REQUIRED";
116
+ OPERATOR_SESSION_EXPIRED: "OPERATOR_SESSION_EXPIRED";
117
+ SUB2API_UNAVAILABLE: "SUB2API_UNAVAILABLE";
118
+ SERVICE_CREDENTIAL_REQUIRED: "SERVICE_CREDENTIAL_REQUIRED";
119
+ SERVICE_CREDENTIAL_REJECTED: "SERVICE_CREDENTIAL_REJECTED";
120
+ CUSTOMER_MESSAGES_UNAVAILABLE: "CUSTOMER_MESSAGES_UNAVAILABLE";
121
+ MESSAGE_PENDING_VERIFICATION: "MESSAGE_PENDING_VERIFICATION";
122
+ MAPPING_NOT_ALLOWED: "MAPPING_NOT_ALLOWED";
123
+ SPACE_TOKEN_REQUIRED: "SPACE_TOKEN_REQUIRED";
124
+ SPACE_TOKEN_REJECTED: "SPACE_TOKEN_REJECTED";
125
+ SEGMENT_SPACE_FORBIDDEN: "SEGMENT_SPACE_FORBIDDEN";
126
+ CLOUD_NOT_ELIGIBLE: "CLOUD_NOT_ELIGIBLE";
127
+ OPERATION_MISMATCH: "OPERATION_MISMATCH";
128
+ SANDBOX_PROVISION_CONFLICT: "SANDBOX_PROVISION_CONFLICT";
129
+ PROVISION_ALREADY_COMPLETED: "PROVISION_ALREADY_COMPLETED";
130
+ HANDOFF_CONFLICT: "HANDOFF_CONFLICT";
131
+ HANDOFF_REVISION_MISMATCH: "HANDOFF_REVISION_MISMATCH";
132
+ HANDOFF_NOT_CANCELLABLE: "HANDOFF_NOT_CANCELLABLE";
133
+ INSTALLATION_SESSION_REQUIRED: "INSTALLATION_SESSION_REQUIRED";
134
+ INSTALLATION_CHALLENGE_REJECTED: "INSTALLATION_CHALLENGE_REJECTED";
135
+ INSTALLATION_CHALLENGE_EXPIRED: "INSTALLATION_CHALLENGE_EXPIRED";
136
+ INSTALLATION_BINDING_CONFLICT: "INSTALLATION_BINDING_CONFLICT";
137
+ INSTALLATION_BINDING_REQUIRED: "INSTALLATION_BINDING_REQUIRED";
138
+ LOCAL_HOST_REPLACED: "LOCAL_HOST_REPLACED";
139
+ HANDOFF_STATE_CONFLICT: "HANDOFF_STATE_CONFLICT";
140
+ HANDOFF_IMPORT_REQUIRED: "HANDOFF_IMPORT_REQUIRED";
141
+ HANDOFF_MANIFEST_MISMATCH: "HANDOFF_MANIFEST_MISMATCH";
142
+ PLACEMENT_KEY_CONFLICT: "PLACEMENT_KEY_CONFLICT";
143
+ PLACEMENT_KEY_NOT_READY: "PLACEMENT_KEY_NOT_READY";
144
+ PLACEMENT_TOKEN_REJECTED: "PLACEMENT_TOKEN_REJECTED";
145
+ SALES_CASES_SHOP_ONLY: "SALES_CASES_SHOP_ONLY";
146
+ OBSERVATION_BINDING_REJECTED: "OBSERVATION_BINDING_REJECTED";
147
+ OBSERVATION_EXPIRED: "OBSERVATION_EXPIRED";
148
+ OBSERVATION_TOO_LARGE: "OBSERVATION_TOO_LARGE";
149
+ CUSTOMER_SHOP_REQUIRED: "CUSTOMER_SHOP_REQUIRED";
150
+ CUSTOMER_NOT_FOUND: "CUSTOMER_NOT_FOUND";
151
+ CUSTOMER_REVISION_CONFLICT: "CUSTOMER_REVISION_CONFLICT";
152
+ CUSTOMER_OPERATION_MISMATCH: "CUSTOMER_OPERATION_MISMATCH";
153
+ CUSTOMER_SOURCE_STALE: "CUSTOMER_SOURCE_STALE";
154
+ CUSTOMER_ACTIVE_CASE_EXISTS: "CUSTOMER_ACTIVE_CASE_EXISTS";
155
+ CUSTOMER_WRITE_FENCED: "CUSTOMER_WRITE_FENCED";
156
+ CUSTOMER_EVIDENCE_PENDING: "CUSTOMER_EVIDENCE_PENDING";
157
+ CUSTOMER_SEND_UNRESOLVED: "CUSTOMER_SEND_UNRESOLVED";
158
+ CUSTOMER_DATA_TOO_LARGE: "CUSTOMER_DATA_TOO_LARGE";
159
+ CUSTOMER_CAPACITY_EXCEEDED: "CUSTOMER_CAPACITY_EXCEEDED";
160
+ CUSTOMER_RATE_LIMITED: "CUSTOMER_RATE_LIMITED";
161
+ CUSTOMER_DATA_UNAVAILABLE: "CUSTOMER_DATA_UNAVAILABLE";
162
+ INTERNAL: "INTERNAL";
163
+ }>;
164
+ /** One member of {@link ERROR_CODES}. */
165
+ export type ErrorCode = z.infer<typeof ErrorCode>;
166
+ /** Media type of every error response. */
167
+ export declare const PROBLEM_MEDIA_TYPE = "application/problem+json";
168
+ /** One failed validation check. `path` locates the field; input values are never echoed. */
169
+ export declare const ValidationIssue: z.ZodObject<{
170
+ path: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
171
+ code: z.ZodString;
172
+ }, z.core.$strip>;
173
+ /** One failed validation check. */
174
+ export type ValidationIssue = z.infer<typeof ValidationIssue>;
175
+ /** 仅用于知识库管理核对/清空的受控 RFC 9457 扩展,不承载任意上游原因。 */
176
+ export declare const KnowledgeDistillProblemReason: z.ZodEnum<{
177
+ processing_incomplete: "processing_incomplete";
178
+ generation_conflict: "generation_conflict";
179
+ scope_drift: "scope_drift";
180
+ document_mismatch: "document_mismatch";
181
+ publication_pause_required: "publication_pause_required";
182
+ task_result_unknown: "task_result_unknown";
183
+ scan_incomplete: "scan_incomplete";
184
+ preview_not_ready: "preview_not_ready";
185
+ preview_failed: "preview_failed";
186
+ }>;
187
+ export type KnowledgeDistillProblemReason = z.infer<typeof KnowledgeDistillProblemReason>;
188
+ /**
189
+ * RFC 9457 problem details body returned by every error response. `code` is a string whose known
190
+ * values are {@link ERROR_CODES}; new codes are added within v1, so a client parses any string and
191
+ * narrows it with {@link ErrorCode}. The OpenAPI document declares the known values as
192
+ * `x-extensible-enum`.
193
+ */
194
+ export declare const Problem: z.ZodObject<{
195
+ type: z.ZodString;
196
+ title: z.ZodString;
197
+ status: z.ZodNumber;
198
+ code: z.ZodString;
199
+ requestId: z.ZodString;
200
+ detail: z.ZodOptional<z.ZodString>;
201
+ testClaim: z.ZodOptional<z.ZodObject<{
202
+ issue: z.ZodObject<{
203
+ repo: z.ZodDefault<z.ZodString>;
204
+ number: z.ZodNumber;
205
+ }, z.core.$strict>;
206
+ demandName: z.ZodString;
207
+ claimedAt: z.ZodISODateTime;
208
+ }, z.core.$strict>>;
209
+ reason: z.ZodOptional<z.ZodString>;
210
+ issues: z.ZodOptional<z.ZodArray<z.ZodObject<{
211
+ path: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
212
+ code: z.ZodString;
213
+ }, z.core.$strip>>>;
214
+ conflict: z.ZodOptional<z.ZodObject<{
215
+ actualRevision: z.ZodOptional<z.ZodString>;
216
+ customerId: z.ZodOptional<z.ZodString>;
217
+ caseId: z.ZodOptional<z.ZodString>;
218
+ operationId: z.ZodOptional<z.ZodString>;
219
+ requestId: z.ZodOptional<z.ZodString>;
220
+ refresh: z.ZodLiteral<"reload">;
221
+ }, z.core.$strict>>;
222
+ }, z.core.$strip>;
223
+ /** RFC 9457 problem details body returned by every error response. */
224
+ export type Problem = z.infer<typeof Problem>;
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Error model of the v1 API: RFC 9457 `application/problem+json` bodies with a closed `code` set.
3
+ * @module
4
+ */
5
+ import { z } from 'zod';
6
+ import { TestAccountClaim } from "./test-account-claim.js";
7
+ /**
8
+ * Closed set of problem codes. Clients choose localized copy by `code` and fall back to generic copy
9
+ * for a code they do not know; `title` and `detail` are diagnostic only.
10
+ */
11
+ export const ERROR_CODES = [
12
+ 'MERCHANT_NOT_ALLOWED',
13
+ 'MERCHANT_ACCOUNT_TYPE_UNSUPPORTED',
14
+ 'MERCHANT_SUB_ACCOUNT_MISMATCH',
15
+ 'MERCHANT_IDENTITY_NOT_FOUND',
16
+ 'MERCHANT_IDENTITY_KIND_MISMATCH',
17
+ 'MERCHANT_IDENTITY_UNAVAILABLE',
18
+ 'MERCHANT_ALREADY_ALLOWED',
19
+ 'MERCHANT_PREVIEW_CHANGED',
20
+ 'SANDBOX_ALREADY_EXISTS',
21
+ 'NAS_CAPACITY_INSUFFICIENT',
22
+ 'NAS_USAGE_UNAVAILABLE',
23
+ 'MERCHANT_TOKEN_UNAVAILABLE',
24
+ 'TEST_ACCOUNT_NOT_REGISTERED',
25
+ 'TEST_ACCOUNT_CLAIMED',
26
+ 'TEST_ACCOUNT_CLAIM_HOLDER_MISMATCH',
27
+ 'VALIDATION_FAILED',
28
+ 'NOT_FOUND',
29
+ 'SESSION_REQUIRED',
30
+ 'SESSION_EXPIRED',
31
+ 'NO_CURRENT_TENANT',
32
+ 'TENANT_NOT_CURRENT',
33
+ 'NOT_A_MEMBER',
34
+ 'ADMIN_REQUIRED',
35
+ 'RESOURCE_CENTER_UNAVAILABLE',
36
+ 'CLOUD_MODELS_UNAVAILABLE',
37
+ 'CLOUD_QUOTA_EXCEEDED',
38
+ 'CLOUD_LOGIN_RATE_LIMITED',
39
+ 'AGENT_CONFIGS_UNAVAILABLE',
40
+ 'AGENT_CONFIG_PLAN_NOT_INITIALIZED',
41
+ 'SHOP_ACCOUNT_CANNOT_JOIN',
42
+ 'SHOP_ACCOUNT_CANNOT_SWITCH',
43
+ 'SHOP_ACCOUNT_CANNOT_CREATE',
44
+ 'SHOP_TENANT_CANNOT_REMOVE_MEMBER',
45
+ 'SHOP_TENANT_NAME_IMMUTABLE',
46
+ 'SHOP_TENANT_CANNOT_INVITE',
47
+ 'INVITE_EXPIRED',
48
+ 'INVITE_REVOKED',
49
+ 'OWNER_IMMUTABLE',
50
+ 'ROLE_NAME_TAKEN',
51
+ 'VERSION_CONFLICT',
52
+ 'OPERATION_CONFLICT',
53
+ 'MATERIAL_REFERENCED',
54
+ 'ASSET_CHECKSUM_MISMATCH',
55
+ 'ASSET_COMMIT_IN_PROGRESS',
56
+ 'ASSET_NOT_UPLOADED',
57
+ 'ASSET_NOT_COMMITTED',
58
+ 'MATERIAL_ARCHIVED',
59
+ 'CLIENT_UPGRADE_REQUIRED',
60
+ 'LOGIN_ATTEMPT_GONE',
61
+ 'LOGIN_VERIFIER_MISMATCH',
62
+ 'SERVICE_UNAVAILABLE',
63
+ 'PLATFORM_IDENTITY_NOT_ALLOWED',
64
+ 'PLATFORM_IDENTITY_MISMATCH',
65
+ 'KNOWLEDGE_MANAGE_REQUIRED',
66
+ 'KNOWLEDGE_OPERATION_NOT_ALLOWED',
67
+ 'KNOWLEDGE_PERSONAL_USE_REQUIRED',
68
+ 'KNOWLEDGE_SHOP_ONLY',
69
+ 'KNOWLEDGE_CONFLICT',
70
+ 'KNOWLEDGE_RUNTIME_CURSOR_EXPIRED',
71
+ 'KNOWLEDGE_OPS_ADMIN_REQUIRED',
72
+ 'KNOWLEDGE_RECOVERY_OUTCOME_UNKNOWN',
73
+ 'KNOWLEDGE_DISTILL_OUTCOME_UNKNOWN',
74
+ 'PREVIEW_STALE',
75
+ 'AMAP_MCP_SHOP_ONLY',
76
+ 'AMAP_MCP_METHOD_NOT_ALLOWED',
77
+ 'AMAP_MCP_TOOL_NOT_ALLOWED',
78
+ 'AMAP_MCP_TOO_LARGE',
79
+ 'AMAP_MCP_UNAVAILABLE',
80
+ 'AMAP_MCP_PROVIDER_LIMITED',
81
+ 'AMAP_MCP_UPSTREAM_ERROR',
82
+ 'AMAP_MCP_TIMEOUT',
83
+ 'AMAP_MCP_PROTOCOL_ERROR',
84
+ 'HOSTING_UNAVAILABLE',
85
+ 'HOSTING_USER_MISMATCH',
86
+ 'HOSTING_EPOCH_MISMATCH',
87
+ 'HOSTING_REVISION_MISMATCH',
88
+ 'HOSTING_ARCHIVE_CONFLICT',
89
+ 'HOSTING_HELD',
90
+ 'HOSTING_HOLDER_MISMATCH',
91
+ 'HOSTING_LEASE_EXPIRED',
92
+ 'SANDBOX_UNAVAILABLE',
93
+ 'SANDBOX_NOT_RUNNING',
94
+ 'EVALUATION_ACTIVE',
95
+ 'EVALUATION_EXECUTOR_UNSUPPORTED',
96
+ 'EVALUATION_HOSTING_ACTIVE',
97
+ 'SANDBOX_UPGRADE_CONFLICT',
98
+ 'SANDBOX_RECOVERY_CONFLICT',
99
+ 'SANDBOX_UPGRADE_REJECTED',
100
+ 'SANDBOX_RELEASE_UNAVAILABLE',
101
+ 'SANDBOX_SESSION_UNBOUND',
102
+ 'PREDECESSOR_STILL_RUNNING',
103
+ 'PREDECESSOR_EXIT_UNKNOWN',
104
+ 'ENTRY_TOKEN_REJECTED',
105
+ 'ENTRY_TOKEN_EXPIRED',
106
+ 'ENTRY_TOKEN_SANDBOX_MISMATCH',
107
+ 'OPERATOR_INVALID_CREDENTIALS',
108
+ 'OPERATOR_INVALID_2FA',
109
+ 'OPERATOR_ROLE_REQUIRED',
110
+ 'OPERATOR_ACCOUNT_INACTIVE',
111
+ 'OPERATOR_RATE_LIMITED',
112
+ 'OPERATOR_SESSION_LIMIT', // v1 兼容保留;登录路由不再返回。
113
+ 'OPERATOR_LOGIN_RATE_LIMITED',
114
+ 'OPERATOR_SESSION_REQUIRED',
115
+ 'OPERATOR_SESSION_EXPIRED',
116
+ 'SUB2API_UNAVAILABLE',
117
+ 'SERVICE_CREDENTIAL_REQUIRED',
118
+ 'SERVICE_CREDENTIAL_REJECTED',
119
+ 'CUSTOMER_MESSAGES_UNAVAILABLE',
120
+ 'MESSAGE_PENDING_VERIFICATION',
121
+ 'MAPPING_NOT_ALLOWED',
122
+ 'SPACE_TOKEN_REQUIRED',
123
+ 'SPACE_TOKEN_REJECTED',
124
+ 'SEGMENT_SPACE_FORBIDDEN',
125
+ 'CLOUD_NOT_ELIGIBLE',
126
+ 'OPERATION_MISMATCH',
127
+ 'SANDBOX_PROVISION_CONFLICT',
128
+ 'PROVISION_ALREADY_COMPLETED',
129
+ 'HANDOFF_CONFLICT',
130
+ 'HANDOFF_REVISION_MISMATCH',
131
+ 'HANDOFF_NOT_CANCELLABLE',
132
+ 'INSTALLATION_SESSION_REQUIRED',
133
+ 'INSTALLATION_CHALLENGE_REJECTED',
134
+ 'INSTALLATION_CHALLENGE_EXPIRED',
135
+ 'INSTALLATION_BINDING_CONFLICT',
136
+ 'INSTALLATION_BINDING_REQUIRED',
137
+ 'LOCAL_HOST_REPLACED',
138
+ 'HANDOFF_STATE_CONFLICT',
139
+ 'HANDOFF_IMPORT_REQUIRED',
140
+ 'HANDOFF_MANIFEST_MISMATCH',
141
+ 'PLACEMENT_KEY_CONFLICT',
142
+ 'PLACEMENT_KEY_NOT_READY',
143
+ 'PLACEMENT_TOKEN_REJECTED',
144
+ 'SALES_CASES_SHOP_ONLY',
145
+ 'OBSERVATION_BINDING_REJECTED',
146
+ 'OBSERVATION_EXPIRED',
147
+ 'OBSERVATION_TOO_LARGE',
148
+ 'CUSTOMER_SHOP_REQUIRED',
149
+ 'CUSTOMER_NOT_FOUND',
150
+ 'CUSTOMER_REVISION_CONFLICT',
151
+ 'CUSTOMER_OPERATION_MISMATCH',
152
+ 'CUSTOMER_SOURCE_STALE',
153
+ 'CUSTOMER_ACTIVE_CASE_EXISTS',
154
+ 'CUSTOMER_WRITE_FENCED',
155
+ 'CUSTOMER_EVIDENCE_PENDING',
156
+ 'CUSTOMER_SEND_UNRESOLVED',
157
+ 'CUSTOMER_DATA_TOO_LARGE',
158
+ 'CUSTOMER_CAPACITY_EXCEEDED',
159
+ 'CUSTOMER_RATE_LIMITED',
160
+ 'CUSTOMER_DATA_UNAVAILABLE',
161
+ 'INTERNAL',
162
+ ];
163
+ /** One member of {@link ERROR_CODES}. */
164
+ export const ErrorCode = z.enum(ERROR_CODES);
165
+ /** Media type of every error response. */
166
+ export const PROBLEM_MEDIA_TYPE = 'application/problem+json';
167
+ /** One failed validation check. `path` locates the field; input values are never echoed. */
168
+ export const ValidationIssue = z
169
+ .object({
170
+ path: z.array(z.union([z.string(), z.number()])),
171
+ code: z.string(),
172
+ })
173
+ .meta({ id: 'ValidationIssue' });
174
+ /** 仅用于知识库管理核对/清空的受控 RFC 9457 扩展,不承载任意上游原因。 */
175
+ export const KnowledgeDistillProblemReason = z.enum(['processing_incomplete', 'generation_conflict', 'scope_drift', 'document_mismatch', 'publication_pause_required', 'task_result_unknown', 'scan_incomplete', 'preview_not_ready', 'preview_failed']);
176
+ /**
177
+ * RFC 9457 problem details body returned by every error response. `code` is a string whose known
178
+ * values are {@link ERROR_CODES}; new codes are added within v1, so a client parses any string and
179
+ * narrows it with {@link ErrorCode}. The OpenAPI document declares the known values as
180
+ * `x-extensible-enum`.
181
+ */
182
+ export const Problem = z
183
+ .object({
184
+ type: z.string(),
185
+ title: z.string(),
186
+ status: z.number().int(),
187
+ code: z.string().meta({ 'x-extensible-enum': [...ERROR_CODES], description: 'MERCHANT_ACCOUNT_TYPE_UNSUPPORTED:不是天猫主账号或账号不存在;MERCHANT_IDENTITY_KIND_MISMATCH:账号层级不符(子账号预热:不是子账号或账号不存在)' }),
188
+ requestId: z.string(),
189
+ detail: z.string().optional(),
190
+ testClaim: TestAccountClaim.optional(),
191
+ reason: z.string().meta({ 'x-extensible-enum': [...KnowledgeDistillProblemReason.options], description: '可扩展原因文本;已知值供客户端收窄,代理仍只输出各接口允许的原因' }).optional(),
192
+ issues: z.array(ValidationIssue).optional(),
193
+ conflict: z.strictObject({
194
+ actualRevision: z.string().optional(),
195
+ customerId: z.string().optional(),
196
+ caseId: z.string().optional(),
197
+ operationId: z.string().optional(),
198
+ requestId: z.string().optional(),
199
+ refresh: z.literal('reload'),
200
+ }).optional(),
201
+ })
202
+ .meta({ id: 'Problem' });