@xihe-lab/tapd-core 2.0.0-rc.2 → 2.0.0-rc.4
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 +1 -0
- package/dist/advisor/index.d.ts.map +1 -1
- package/dist/advisor/index.js +2 -0
- package/dist/advisor/index.js.map +1 -1
- package/dist/cache/read-cache.d.ts +136 -0
- package/dist/cache/read-cache.d.ts.map +1 -0
- package/dist/cache/read-cache.js +322 -0
- package/dist/cache/read-cache.js.map +1 -0
- package/dist/cache/read-cache.test.d.ts +2 -0
- package/dist/cache/read-cache.test.d.ts.map +1 -0
- package/dist/cache/read-cache.test.js +429 -0
- package/dist/cache/read-cache.test.js.map +1 -0
- package/dist/errors/index.d.ts +120 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +429 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/registry/registry.d.ts +7 -0
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +9 -3
- package/dist/registry/registry.js.map +1 -1
- package/dist/registry/registry.test.js +293 -2
- package/dist/registry/registry.test.js.map +1 -1
- package/dist/richtext/index.d.ts +1 -14
- package/dist/richtext/index.d.ts.map +1 -1
- package/dist/richtext/index.js +3 -34
- package/dist/richtext/index.js.map +1 -1
- package/dist/richtext/pipeline.d.ts +1 -4
- package/dist/richtext/pipeline.d.ts.map +1 -1
- package/dist/richtext/pipeline.js +2 -198
- package/dist/richtext/pipeline.js.map +1 -1
- package/dist/tapd-client.d.ts +34 -2
- package/dist/tapd-client.d.ts.map +1 -1
- package/dist/tapd-client.js +121 -42
- package/dist/tapd-client.js.map +1 -1
- package/dist/tools/attachment.js +40 -40
- package/dist/tools/attachment.js.map +1 -1
- package/dist/tools/board.js +22 -22
- package/dist/tools/board.js.map +1 -1
- package/dist/tools/bug.js +259 -259
- package/dist/tools/bug.js.map +1 -1
- package/dist/tools/changes.js +20 -20
- package/dist/tools/changes.js.map +1 -1
- package/dist/tools/comment.js +23 -23
- package/dist/tools/comment.js.map +1 -1
- package/dist/tools/custom-fields.js +16 -16
- package/dist/tools/custom-fields.js.map +1 -1
- package/dist/tools/image.js +2 -2
- package/dist/tools/image.js.map +1 -1
- package/dist/tools/iteration.js +50 -50
- package/dist/tools/iteration.js.map +1 -1
- package/dist/tools/media.js +2 -2
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/mini-comment.js +27 -27
- package/dist/tools/mini-comment.js.map +1 -1
- package/dist/tools/mini-item.js +83 -83
- package/dist/tools/mini-item.js.map +1 -1
- package/dist/tools/mini-workspace.js +5 -5
- package/dist/tools/mini-workspace.js.map +1 -1
- package/dist/tools/program.js +7 -7
- package/dist/tools/program.js.map +1 -1
- package/dist/tools/relations.js +14 -14
- package/dist/tools/relations.js.map +1 -1
- package/dist/tools/release.js +53 -53
- package/dist/tools/release.js.map +1 -1
- package/dist/tools/report.js +8 -8
- package/dist/tools/report.js.map +1 -1
- package/dist/tools/settings.js +77 -77
- package/dist/tools/settings.js.map +1 -1
- package/dist/tools/source.js +14 -14
- package/dist/tools/source.js.map +1 -1
- package/dist/tools/story.js +120 -120
- package/dist/tools/story.js.map +1 -1
- package/dist/tools/task.js +123 -123
- package/dist/tools/task.js.map +1 -1
- package/dist/tools/test.js +117 -117
- package/dist/tools/test.js.map +1 -1
- package/dist/tools/timesheet.js +23 -23
- package/dist/tools/timesheet.js.map +1 -1
- package/dist/tools/user.js +8 -8
- package/dist/tools/user.js.map +1 -1
- package/dist/tools/utility.d.ts +17 -0
- package/dist/tools/utility.d.ts.map +1 -1
- package/dist/tools/utility.js +73 -78
- package/dist/tools/utility.js.map +1 -1
- package/dist/tools/wiki.js +51 -51
- package/dist/tools/wiki.js.map +1 -1
- package/dist/tools/workflow.js +26 -26
- package/dist/tools/workflow.js.map +1 -1
- package/dist/tools/workspace.js +16 -16
- package/dist/tools/workspace.js.map +1 -1
- package/package.json +10 -14
- package/dist/richtext/attachment-anchor.d.ts +0 -58
- package/dist/richtext/attachment-anchor.d.ts.map +0 -1
- package/dist/richtext/attachment-anchor.js +0 -221
- package/dist/richtext/attachment-anchor.js.map +0 -1
- package/dist/richtext/attachment-anchor.test.d.ts +0 -2
- package/dist/richtext/attachment-anchor.test.d.ts.map +0 -1
- package/dist/richtext/attachment-anchor.test.js +0 -149
- package/dist/richtext/attachment-anchor.test.js.map +0 -1
- package/dist/richtext/escape.d.ts +0 -7
- package/dist/richtext/escape.d.ts.map +0 -1
- package/dist/richtext/escape.js +0 -60
- package/dist/richtext/escape.js.map +0 -1
- package/dist/richtext/mention.d.ts +0 -49
- package/dist/richtext/mention.d.ts.map +0 -1
- package/dist/richtext/mention.js +0 -179
- package/dist/richtext/mention.js.map +0 -1
- package/dist/richtext/mention.test.d.ts +0 -2
- package/dist/richtext/mention.test.d.ts.map +0 -1
- package/dist/richtext/mention.test.js +0 -123
- package/dist/richtext/mention.test.js.map +0 -1
- package/dist/richtext/round-trip.test.d.ts +0 -2
- package/dist/richtext/round-trip.test.d.ts.map +0 -1
- package/dist/richtext/round-trip.test.js +0 -105
- package/dist/richtext/round-trip.test.js.map +0 -1
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TapdError —— 结构化错误模型(错误降级详情)
|
|
3
|
+
*
|
|
4
|
+
* 设计目标:工具报错时输出"足够人工接管"的信息,而不是薄薄一行状态码 + message。
|
|
5
|
+
* - 统一字段:内部错误码 / HTTP 状态 / endpoint / TAPD 服务端原始 status+info / 脱敏参数
|
|
6
|
+
* - hint:针对性修复建议(按错误码定制)
|
|
7
|
+
* - takeover:人工接管指引(建议检查项 / 开放平台·后台操作路径 / 需收集的信息)
|
|
8
|
+
* - JSON 友好:`toJSON()` 返回纯结构;`message` 首行保留人可读摘要(兼容旧日志/测试),
|
|
9
|
+
* 首行之后追加 `tapd-error <code>:` + pretty JSON 块——MCP 层只透出 message 字符串即可
|
|
10
|
+
* 完整携带结构(mcp 仓零改动受益)。
|
|
11
|
+
*/
|
|
12
|
+
const SENSITIVE_KEY = /password|token|secret|credential/i;
|
|
13
|
+
const MAX_PARAM_TEXT = 300;
|
|
14
|
+
/**
|
|
15
|
+
* 错误详情参数脱敏:
|
|
16
|
+
* - 凭证类字段(password/token/secret/credential)一律掩码为 ***(与 registry 审计同规则)
|
|
17
|
+
* - 超长字符串截断(description/content 类字段不应淹没错误详情)
|
|
18
|
+
*/
|
|
19
|
+
export function sanitizeParamsForError(params) {
|
|
20
|
+
if (!params)
|
|
21
|
+
return undefined;
|
|
22
|
+
const out = {};
|
|
23
|
+
for (const [key, value] of Object.entries(params)) {
|
|
24
|
+
if (value === undefined)
|
|
25
|
+
continue;
|
|
26
|
+
if (SENSITIVE_KEY.test(key)) {
|
|
27
|
+
out[key] = '***';
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (typeof value === 'string' && value.length > MAX_PARAM_TEXT) {
|
|
31
|
+
out[key] = `${value.slice(0, MAX_PARAM_TEXT)}…(truncated ${value.length} chars)`;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
out[key] = value;
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
/** 从 TAPD 错误响应体提取业务 status / info(JSON 或纯文本均兼容)。 */
|
|
39
|
+
function parseTapdBody(bodyText) {
|
|
40
|
+
const trimmed = bodyText.trim();
|
|
41
|
+
if (trimmed.startsWith('{')) {
|
|
42
|
+
try {
|
|
43
|
+
const parsed = JSON.parse(trimmed);
|
|
44
|
+
return {
|
|
45
|
+
...(typeof parsed.status === 'number' ? { tapdStatus: parsed.status } : {}),
|
|
46
|
+
...(typeof parsed.info === 'string'
|
|
47
|
+
? { tapdMessage: parsed.info }
|
|
48
|
+
: typeof parsed.message === 'string'
|
|
49
|
+
? { tapdMessage: parsed.message }
|
|
50
|
+
: {}),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// 落入纯文本分支
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return { tapdMessage: trimmed.slice(0, 500) || undefined };
|
|
58
|
+
}
|
|
59
|
+
/** 解析 Retry-After 头(秒数或 HTTP 日期)为毫秒;无法解析返回 undefined。 */
|
|
60
|
+
export function parseRetryAfterMs(header) {
|
|
61
|
+
if (!header)
|
|
62
|
+
return undefined;
|
|
63
|
+
const asSeconds = Number(header);
|
|
64
|
+
if (Number.isFinite(asSeconds) && asSeconds >= 0)
|
|
65
|
+
return Math.round(asSeconds * 1000);
|
|
66
|
+
const asDate = Date.parse(header);
|
|
67
|
+
if (!Number.isNaN(asDate))
|
|
68
|
+
return Math.max(0, asDate - Date.now());
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
/** 从 403 文案中提取 TAPD 权限 scope 形态(如 stories::workitem_types)。 */
|
|
72
|
+
function extractScope(text) {
|
|
73
|
+
const match = text?.match(/[a-zA-Z_]+::[a-zA-Z_]+/);
|
|
74
|
+
return match?.[0];
|
|
75
|
+
}
|
|
76
|
+
function hasIdParam(ctx) {
|
|
77
|
+
return ctx.params !== undefined && 'id' in ctx.params;
|
|
78
|
+
}
|
|
79
|
+
const OPEN_PLATFORM_WHERE = [
|
|
80
|
+
'TAPD 开放平台(https://open.tapd.cn)→ 我的应用 → API 权限/接口权限管理',
|
|
81
|
+
'企业 TAPD 管理后台 → 应用与授权(确认应用可见范围与项目授权)',
|
|
82
|
+
];
|
|
83
|
+
function baseCollect(ctx) {
|
|
84
|
+
return [
|
|
85
|
+
'本错误详情 JSON(code/endpoint/tapdMessage/params)',
|
|
86
|
+
...(ctx ? [`请求方式:${ctx.method} ${ctx.path}`] : []),
|
|
87
|
+
'凭证类型(OAuth Access Token / Basic Auth)',
|
|
88
|
+
];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 按错误码生成针对性 hint + takeover。
|
|
92
|
+
* 独立成纯函数便于单测各状态码的指引内容。
|
|
93
|
+
*/
|
|
94
|
+
export function buildGuidance(code, ctx, info) {
|
|
95
|
+
const attempts = info?.attempts;
|
|
96
|
+
switch (code) {
|
|
97
|
+
case 'TAPD_HTTP_401':
|
|
98
|
+
case 'TAPD_HTTP_403': {
|
|
99
|
+
const scope = extractScope(info?.tapdMessage);
|
|
100
|
+
const is403 = code === 'TAPD_HTTP_403';
|
|
101
|
+
return {
|
|
102
|
+
hint: is403
|
|
103
|
+
? `权限不足:当前凭证未被授权访问该接口${scope ? `(tapdMessage 提示 scope: ${scope})` : ''}。注意 Basic Auth 仅支持读取类 API,写操作必须 OAuth。`
|
|
104
|
+
: '认证失败(401):Access Token 无效/过期,或 Basic 凭证(api_user/api_password)错误。',
|
|
105
|
+
takeover: {
|
|
106
|
+
checks: is403
|
|
107
|
+
? [
|
|
108
|
+
'确认凭证类型:Basic Auth 遇写接口(create/update)必 403,改用 OAuth token',
|
|
109
|
+
`在开放平台应用权限页确认接口对应 scope(${scope ?? '见 tapdMessage'})已申请并审批生效`,
|
|
110
|
+
'确认 token 对目标 workspace_id 所在项目有授权',
|
|
111
|
+
'用同一凭证 curl 直连该 endpoint 复现,排除网关/代理差异',
|
|
112
|
+
]
|
|
113
|
+
: [
|
|
114
|
+
'OAuth token 有有效期,确认是否已过期,重新走授权流程换取新 token',
|
|
115
|
+
'Basic 模式确认 api_user/api_password 与公司 ID 匹配',
|
|
116
|
+
'确认系统时间正常(时间偏移会导致签名/Token 校验失败)',
|
|
117
|
+
],
|
|
118
|
+
where: OPEN_PLATFORM_WHERE,
|
|
119
|
+
collect: [...baseCollect(ctx), ...(scope ? [`缺失 scope:${scope}`] : ['所需 scope(从 tapdMessage 或接口文档确认)'])],
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
case 'TAPD_BAD_ID':
|
|
124
|
+
case 'TAPD_HTTP_404':
|
|
125
|
+
return {
|
|
126
|
+
hint: '资源不存在(404):优先核对 ID 形态——19-20 位长 ID 必须按字符串传递(数值会精度损毁);'
|
|
127
|
+
+ '≤9 位短 ID 需先换算长 ID(tapd_short_to_long_id / TapdClient.toLongId,云环境前缀 11 + workspace_id + 补零 9 位);再确认 id 与 workspace_id 同项目、资源未被删除。',
|
|
128
|
+
takeover: {
|
|
129
|
+
checks: [
|
|
130
|
+
'id 是否以 number 传输(长 ID 超过 2^53 会精度丢失,必须字符串语义)',
|
|
131
|
+
'短 ID 是否已按 workspace_id 换算成长 ID(短 ID 跨项目会查错/查空)',
|
|
132
|
+
'workspace_id 与 id 是否归属同一项目',
|
|
133
|
+
'换 tapd_get_stories/bugs/tasks 按 name 或创建时间范围检索,确认资源确实存在',
|
|
134
|
+
],
|
|
135
|
+
collect: baseCollect(ctx),
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
case 'TAPD_RATE_LIMIT':
|
|
139
|
+
return {
|
|
140
|
+
hint: `触发 TAPD 接口限流(429):GET 已自动指数退避重试 ${attempts ?? '?'} 次仍失败。`
|
|
141
|
+
+ (info?.retryAfterMs !== undefined
|
|
142
|
+
? `服务端 Retry-After 要求等待约 ${info.retryAfterMs}ms。`
|
|
143
|
+
: '响应未携带 Retry-After。')
|
|
144
|
+
+ '建议降低调用频率与批量并发(max_workers)、错峰执行。',
|
|
145
|
+
takeover: {
|
|
146
|
+
checks: [
|
|
147
|
+
'尊重 Retry-After 显式等待后重试(客户端已按其退避)',
|
|
148
|
+
'批量拉取降低 max_workers(默认 3)或分批',
|
|
149
|
+
'高频场景确认是否可改用批量查询接口(一次条件查询替代逐 ID 拉取)',
|
|
150
|
+
],
|
|
151
|
+
collect: baseCollect(ctx),
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
case 'TAPD_NETWORK':
|
|
155
|
+
return {
|
|
156
|
+
hint: `网络层失败:检查代理/VPN、DNS 与 TAPD_API_BASE_URL 配置。GET 已自动重试 ${attempts ?? '?'} 次;`
|
|
157
|
+
+ 'POST 不重试(防重复创建)——确认无部分写入后再重放。',
|
|
158
|
+
takeover: {
|
|
159
|
+
checks: [
|
|
160
|
+
'curl 直连 TAPD_API_BASE_URL 验证网络连通性',
|
|
161
|
+
'检查是否有企业代理/防火墙拦截 api.tapd.cn',
|
|
162
|
+
'POST 类操作先核对 TAPD 后台是否已产生数据,避免重放造成重复创建',
|
|
163
|
+
],
|
|
164
|
+
collect: [...baseCollect(ctx), 'cause 中的底层网络错误信息(ECONNREFUSED/ETIMEDOUT 等)'],
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
case 'TAPD_NON_JSON':
|
|
168
|
+
return {
|
|
169
|
+
hint: '响应非 JSON:通常是网关/代理返回了 HTML 拦截页或服务端异常页。检查 TAPD_API_BASE_URL 是否被中间层改写。',
|
|
170
|
+
takeover: {
|
|
171
|
+
checks: [
|
|
172
|
+
'确认 TAPD_API_BASE_URL 指向官方 api.tapd.cn(或指定网关)',
|
|
173
|
+
'若走企业代理,确认代理对 API 域名的响应未被替换',
|
|
174
|
+
'重试一次排除瞬时网关错误',
|
|
175
|
+
],
|
|
176
|
+
collect: baseCollect(ctx),
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
case 'TAPD_SDK_ERROR':
|
|
180
|
+
return {
|
|
181
|
+
hint: 'SDK 通道抛错:POST 请求不回退 fetch(防重复写入)。可设 TAPD_SDK_DISABLED=1 做对照(仅 GET 会回退 fetch),'
|
|
182
|
+
+ '并核对该端点的 SDK_ROUTES 映射与参数编码(POST 会还原字面 \\n 为换行)。',
|
|
183
|
+
takeover: {
|
|
184
|
+
checks: [
|
|
185
|
+
'设 TAPD_SDK_DISABLED=1 复跑:GET 若成功则问题定位在 SDK 通道',
|
|
186
|
+
'确认 @opentapd/tapd-node-sdk 版本与该端点支持度',
|
|
187
|
+
'POST 操作先核对 TAPD 后台是否已产生数据',
|
|
188
|
+
],
|
|
189
|
+
collect: [...baseCollect(ctx), 'SDK 抛出的原始 cause'],
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
case 'TAPD_TIMEOUT':
|
|
193
|
+
return {
|
|
194
|
+
hint: `工具执行超时(${info?.timeoutMs ?? '?'}ms):调大 ExecContext.timeoutMs(CLI 用 --timeout),`
|
|
195
|
+
+ '或缩小查询范围(fields 裁剪、时间窗收窄、limit 调小)后重试。单条慢查询优先排查是否全表条件扫描。',
|
|
196
|
+
takeover: {
|
|
197
|
+
checks: [
|
|
198
|
+
'确认超时发生时长:偶发超时调大 timeoutMs 即可;稳定超时先优化查询条件',
|
|
199
|
+
'批量并发 max_workers 过高会拖慢单请求,适当调低',
|
|
200
|
+
'网络抓包/TAPD 后台确认服务端是否有慢查询公告',
|
|
201
|
+
],
|
|
202
|
+
collect: [...baseCollect(), `timeoutMs=${info?.timeoutMs ?? '?'}`, '工具名与参数'],
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
case 'TAPD_PARTIAL':
|
|
206
|
+
return {
|
|
207
|
+
hint: '批量操作失败(0 项成功,逐项错误见 items):可按 items 单独重试失败项'
|
|
208
|
+
+ '——单项失败通常是数据形态/权限问题,不必整批重跑。',
|
|
209
|
+
takeover: {
|
|
210
|
+
checks: [
|
|
211
|
+
'按 items 逐项核对 error.code 与 hint(常见为单条 ID 形态或权限问题)',
|
|
212
|
+
'只重试失败项,避免整批重放',
|
|
213
|
+
'失败集中出现同一 code 时按该 code 的接管指引处理',
|
|
214
|
+
],
|
|
215
|
+
collect: ['items 中每项的 id + error.code', '失败项占比(判断是个别数据问题还是系统性问题)'],
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
case 'TAPD_API_STATUS':
|
|
219
|
+
return {
|
|
220
|
+
hint: `TAPD 业务错误(HTTP 200 但响应体 status=${String(info?.httpStatus ?? '?')}≠1):`
|
|
221
|
+
+ '常见原因为参数不合法、无权限或资源当前状态不允许该操作,以 tapdMessage 为准处理。',
|
|
222
|
+
takeover: {
|
|
223
|
+
checks: [
|
|
224
|
+
'按 tapdMessage 核对参数(字段格式/枚举值/必填项)',
|
|
225
|
+
'确认资源当前状态允许该操作(如已关闭的缺陷不能再指派)',
|
|
226
|
+
'写接口确认凭证为 OAuth 且对应 scope 已开通',
|
|
227
|
+
],
|
|
228
|
+
collect: [...baseCollect(ctx), 'tapdStatus 与 tapdMessage 原文'],
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
default: {
|
|
232
|
+
if (code.startsWith('TAPD_HTTP_5')) {
|
|
233
|
+
return {
|
|
234
|
+
hint: `TAPD 服务端错误(${code.replace('TAPD_HTTP_', '')}):通常为瞬时故障。GET 已自动重试 ${attempts ?? '?'} 次;`
|
|
235
|
+
+ 'POST 不重试(防重复创建)——确认无部分写入后再重放。',
|
|
236
|
+
takeover: {
|
|
237
|
+
checks: [
|
|
238
|
+
'稍候重试(5xx 多为瞬时)',
|
|
239
|
+
'POST 操作先核对 TAPD 后台是否已产生数据',
|
|
240
|
+
'持续出现时查 TAPD 服务状态或联系平台管理员',
|
|
241
|
+
],
|
|
242
|
+
collect: baseCollect(ctx),
|
|
243
|
+
},
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
if (code.startsWith('TAPD_HTTP_')) {
|
|
247
|
+
return {
|
|
248
|
+
hint: `请求被 TAPD 拒绝(HTTP ${code.replace('TAPD_HTTP_', '')}):核对 params 字段格式`
|
|
249
|
+
+ '(日期 YYYY-MM-DD、长 ID 字符串语义、枚举取值),以 tapdMessage 为准修正后重试。',
|
|
250
|
+
takeover: {
|
|
251
|
+
checks: [
|
|
252
|
+
'对照 tapd-api-reference 核对参数名与取值格式',
|
|
253
|
+
'长 ID 类参数确认字符串语义未被数值化',
|
|
254
|
+
'确认 workspace_id 正确且资源存在',
|
|
255
|
+
],
|
|
256
|
+
collect: baseCollect(ctx),
|
|
257
|
+
},
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
return {
|
|
261
|
+
hint: '未分类错误:按 cause 与堆栈定位;若确认由 TAPD 响应引发,请收集详情反馈补充错误分类。',
|
|
262
|
+
takeover: {
|
|
263
|
+
checks: ['查看 cause 与调用堆栈定位抛错来源', '核对最近一次成功的同工具调用参数差异'],
|
|
264
|
+
collect: baseCollect(ctx),
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/** message 组装:首行摘要 + 结构化 JSON 块(MCP 透出 message 即携带全量结构)。 */
|
|
271
|
+
function buildMessage(detail) {
|
|
272
|
+
const head = detail.message;
|
|
273
|
+
const block = JSON.stringify(detail, null, 2);
|
|
274
|
+
return `${head}\ntapd-error ${detail.code}:\n${block}`;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* 统一错误对象。
|
|
278
|
+
* - `message` 首行 = detail.message(人可读摘要,兼容旧日志/test 对首行的依赖)
|
|
279
|
+
* - `toJSON()` 返回纯结构(registry 会挂到 ExecResult.error.detail)
|
|
280
|
+
*/
|
|
281
|
+
export class TapdError extends Error {
|
|
282
|
+
detail;
|
|
283
|
+
constructor(detail) {
|
|
284
|
+
super(buildMessage(detail));
|
|
285
|
+
this.name = 'TapdError';
|
|
286
|
+
this.detail = detail;
|
|
287
|
+
}
|
|
288
|
+
toJSON() {
|
|
289
|
+
return this.detail;
|
|
290
|
+
}
|
|
291
|
+
/** HTTP 非 2xx:按状态码归一语义码(429→RATE_LIMIT,404+id→BAD_ID)。 */
|
|
292
|
+
static http(ctx, httpStatus, statusText, bodyText, opts = {}) {
|
|
293
|
+
const body = parseTapdBody(bodyText);
|
|
294
|
+
const tapdMessage = body.tapdMessage ?? '';
|
|
295
|
+
let code = `TAPD_HTTP_${httpStatus}`;
|
|
296
|
+
if (httpStatus === 429)
|
|
297
|
+
code = 'TAPD_RATE_LIMIT';
|
|
298
|
+
else if (httpStatus === 404 && hasIdParam(ctx))
|
|
299
|
+
code = 'TAPD_BAD_ID';
|
|
300
|
+
const summary = tapdMessage !== '' ? tapdMessage : bodyText.slice(0, 200) || statusText;
|
|
301
|
+
const { hint, takeover } = buildGuidance(code, ctx, {
|
|
302
|
+
httpStatus,
|
|
303
|
+
tapdMessage,
|
|
304
|
+
retryAfterMs: opts.retryAfterMs,
|
|
305
|
+
attempts: opts.attempts,
|
|
306
|
+
});
|
|
307
|
+
return new TapdError({
|
|
308
|
+
code,
|
|
309
|
+
message: `TAPD API error: ${httpStatus} ${ctx.method} ${ctx.path} - ${summary}`,
|
|
310
|
+
httpStatus,
|
|
311
|
+
method: ctx.method,
|
|
312
|
+
endpoint: ctx.path,
|
|
313
|
+
...(body.tapdStatus !== undefined ? { tapdStatus: body.tapdStatus } : {}),
|
|
314
|
+
...(tapdMessage !== '' ? { tapdMessage } : {}),
|
|
315
|
+
...(ctx.params ? { params: ctx.params } : {}),
|
|
316
|
+
...(opts.retryAfterMs !== undefined ? { retryAfterMs: opts.retryAfterMs } : {}),
|
|
317
|
+
...(opts.attempts !== undefined ? { attempts: opts.attempts } : {}),
|
|
318
|
+
hint,
|
|
319
|
+
takeover,
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
/** HTTP 200 但响应体 status !== 1(TAPD 业务错误)。 */
|
|
323
|
+
static apiStatus(ctx, tapdStatus, info, attempts) {
|
|
324
|
+
const { hint, takeover } = buildGuidance('TAPD_API_STATUS', ctx, { httpStatus: tapdStatus });
|
|
325
|
+
return new TapdError({
|
|
326
|
+
code: 'TAPD_API_STATUS',
|
|
327
|
+
message: `TAPD API error: ${info === '' ? 'Unknown error' : info}`,
|
|
328
|
+
method: ctx.method,
|
|
329
|
+
endpoint: ctx.path,
|
|
330
|
+
tapdStatus,
|
|
331
|
+
...(info !== '' ? { tapdMessage: info } : {}),
|
|
332
|
+
...(ctx.params ? { params: ctx.params } : {}),
|
|
333
|
+
...(attempts !== undefined ? { attempts } : {}),
|
|
334
|
+
hint,
|
|
335
|
+
takeover,
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
/** 响应非 JSON(网关/代理/异常页)。 */
|
|
339
|
+
static nonJson(ctx, text, attempts) {
|
|
340
|
+
const { hint, takeover } = buildGuidance('TAPD_NON_JSON', ctx);
|
|
341
|
+
return new TapdError({
|
|
342
|
+
code: 'TAPD_NON_JSON',
|
|
343
|
+
message: `TAPD API returned non-JSON response: ${text.slice(0, 100)}`,
|
|
344
|
+
method: ctx.method,
|
|
345
|
+
endpoint: ctx.path,
|
|
346
|
+
...(ctx.params ? { params: ctx.params } : {}),
|
|
347
|
+
...(attempts !== undefined ? { attempts } : {}),
|
|
348
|
+
hint,
|
|
349
|
+
takeover,
|
|
350
|
+
...(text !== '' ? { cause: text.slice(0, 500) } : {}),
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
/** 网络层失败(fetch reject:DNS/连接/中断)。 */
|
|
354
|
+
static network(ctx, cause, attempts) {
|
|
355
|
+
const causeMessage = cause instanceof Error ? cause.message : String(cause);
|
|
356
|
+
const { hint, takeover } = buildGuidance('TAPD_NETWORK', ctx, { attempts });
|
|
357
|
+
return new TapdError({
|
|
358
|
+
code: 'TAPD_NETWORK',
|
|
359
|
+
message: `TAPD API network error: ${causeMessage}`,
|
|
360
|
+
method: ctx.method,
|
|
361
|
+
endpoint: ctx.path,
|
|
362
|
+
...(ctx.params ? { params: ctx.params } : {}),
|
|
363
|
+
...(attempts !== undefined ? { attempts } : {}),
|
|
364
|
+
hint,
|
|
365
|
+
takeover,
|
|
366
|
+
cause: causeMessage,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
/** SDK 通道抛错(POST 不回退 fetch)。 */
|
|
370
|
+
static sdk(ctx, cause) {
|
|
371
|
+
const causeMessage = cause instanceof Error ? cause.message : String(cause);
|
|
372
|
+
const { hint, takeover } = buildGuidance('TAPD_SDK_ERROR', ctx);
|
|
373
|
+
return new TapdError({
|
|
374
|
+
code: 'TAPD_SDK_ERROR',
|
|
375
|
+
message: `TAPD SDK error: ${causeMessage}`,
|
|
376
|
+
method: ctx.method,
|
|
377
|
+
endpoint: ctx.path,
|
|
378
|
+
...(ctx.params ? { params: ctx.params } : {}),
|
|
379
|
+
hint,
|
|
380
|
+
takeover,
|
|
381
|
+
cause: causeMessage,
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
/** registry 层工具执行超时。 */
|
|
385
|
+
static timeout(tool, timeoutMs, args) {
|
|
386
|
+
const { hint, takeover } = buildGuidance('TAPD_TIMEOUT', undefined, { timeoutMs });
|
|
387
|
+
return new TapdError({
|
|
388
|
+
code: 'TAPD_TIMEOUT',
|
|
389
|
+
message: `tool timed out after ${timeoutMs}ms`,
|
|
390
|
+
tool,
|
|
391
|
+
...(args ? { params: args } : {}),
|
|
392
|
+
hint,
|
|
393
|
+
takeover,
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* 批量操作全部失败(部分失败时 handler 返回降级聚合结构,不抛错)。
|
|
398
|
+
* items 携带逐项 TapdErrorDetail,保证"全部失败"也不丢任何单项信息。
|
|
399
|
+
*/
|
|
400
|
+
static partial(ctx, total, failed) {
|
|
401
|
+
const items = failed.map(f => ({ id: f.id, error: f.error.toJSON() }));
|
|
402
|
+
const first = failed[0]?.error.detail.message ?? 'unknown';
|
|
403
|
+
const { hint, takeover } = buildGuidance('TAPD_PARTIAL', ctx, { total: items.length });
|
|
404
|
+
return new TapdError({
|
|
405
|
+
code: 'TAPD_PARTIAL',
|
|
406
|
+
message: `batch operation failed: 0/${total} succeeded via ${ctx.method} ${ctx.path}; first error: ${first}`,
|
|
407
|
+
method: ctx.method,
|
|
408
|
+
endpoint: ctx.path,
|
|
409
|
+
...(ctx.params ? { params: ctx.params } : {}),
|
|
410
|
+
hint,
|
|
411
|
+
takeover,
|
|
412
|
+
items,
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
/** 未分类错误统一包一层(保留原 message 为首行摘要)。 */
|
|
416
|
+
static wrap(cause, tool) {
|
|
417
|
+
const causeMessage = cause instanceof Error ? cause.message : String(cause);
|
|
418
|
+
const { hint, takeover } = buildGuidance('TAPD_UNKNOWN');
|
|
419
|
+
return new TapdError({
|
|
420
|
+
code: 'TAPD_UNKNOWN',
|
|
421
|
+
message: causeMessage,
|
|
422
|
+
...(tool ? { tool } : {}),
|
|
423
|
+
hint,
|
|
424
|
+
takeover,
|
|
425
|
+
cause: cause instanceof Error ? (cause.stack ?? causeMessage) : causeMessage,
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export type { ToolDef, TapdResponse, CliMeta } from './types.js';
|
|
2
2
|
export { TapdClient } from './tapd-client.js';
|
|
3
|
+
export { TapdError, buildGuidance, parseRetryAfterMs, sanitizeParamsForError, type BatchFailureItem, type RequestContext, type TapdErrorCode, type TapdErrorDetail, type TapdTakeover, } from './errors/index.js';
|
|
4
|
+
export { CACHE_TTL_MS, cacheStats, invalidateCache, type CacheStats, } from './cache/read-cache.js';
|
|
5
|
+
export type { BatchDegradedResult } from './tools/utility.js';
|
|
3
6
|
export { allTools } from './tools/index.js';
|
|
4
7
|
export { ToolRegistry, type Entry, type ExecContext, type AuditEvent, type CliErrorCode, type ExecResult, type DerivedCommand, } from './registry/registry.js';
|
|
5
8
|
export { resolveWrite } from './registry/write-policy.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,eAAe,EACf,KAAK,UAAU,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { TapdClient } from './tapd-client.js';
|
|
2
|
+
export { TapdError, buildGuidance, parseRetryAfterMs, sanitizeParamsForError, } from './errors/index.js';
|
|
3
|
+
export { CACHE_TTL_MS, cacheStats, invalidateCache, } from './cache/read-cache.js';
|
|
2
4
|
export { allTools } from './tools/index.js';
|
|
3
5
|
export { ToolRegistry, } from './registry/registry.js';
|
|
4
6
|
export { resolveWrite } from './registry/write-policy.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,YAAY,GAOb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,SAAS,GAGV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAA4B,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,aAAa,EACb,UAAU,GAQX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAA+D,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,sBAAsB,GAMvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,eAAe,GAEhB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,YAAY,GAOb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,SAAS,GAGV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAA4B,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,aAAa,EACb,UAAU,GAQX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAA+D,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ToolDef } from '../types.js';
|
|
2
2
|
import type { TapdClient } from '../tapd-client.js';
|
|
3
|
+
import type { TapdErrorDetail } from '../errors/index.js';
|
|
3
4
|
export type Entry = 'cli' | 'mcp';
|
|
4
5
|
export interface ExecContext {
|
|
5
6
|
entry: Entry;
|
|
@@ -23,6 +24,12 @@ export interface ExecResult<T = unknown> {
|
|
|
23
24
|
error?: {
|
|
24
25
|
code: CliErrorCode;
|
|
25
26
|
message: string;
|
|
27
|
+
/**
|
|
28
|
+
* 结构化错误详情(TapdError.toJSON()):API_ERROR / TIMEOUT 时携带。
|
|
29
|
+
* message 首行为人可读摘要,其后内嵌同一份 JSON 块——只读 message 的消费方
|
|
30
|
+
* (如 MCP 透出)也能拿到全量结构;能拿到 detail 字段的则可直接用对象。
|
|
31
|
+
*/
|
|
32
|
+
detail?: TapdErrorDetail;
|
|
26
33
|
};
|
|
27
34
|
}
|
|
28
35
|
export interface DerivedCommand {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQ1D,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAElC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GACpB,gBAAgB,GAChB,cAAc,GACd,mBAAmB,GACnB,cAAc,GACd,WAAW,GACX,SAAS,CAAC;AAEd,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,YAAY,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB;;;;WAIG;QACH,MAAM,CAAC,EAAE,eAAe,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAiCD,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA8B;IAE3C,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;IAchC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAItC,IAAI,IAAI,OAAO,EAAE;IAIjB,QAAQ,IAAI,cAAc,EAAE;IAatB,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,WAAW,EAChB,aAAa,CAAC,EAAE,MAAM,UAAU,GAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;CAwE1B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TapdError } from '../errors/index.js';
|
|
1
2
|
import { resolveWrite } from './write-policy.js';
|
|
2
3
|
import { deriveCommand } from './derive-command.js';
|
|
3
4
|
import { MANUAL_CLI_META, EXPLICIT_WRITE } from './cli-meta.js';
|
|
@@ -119,12 +120,17 @@ export class ToolRegistry {
|
|
|
119
120
|
}
|
|
120
121
|
catch (error) {
|
|
121
122
|
if (error instanceof TimeoutSignal) {
|
|
123
|
+
// 超时也走结构化模型:带 hint(调 timeoutMs / 收窄查询)与脱敏参数
|
|
124
|
+
const timeoutError = TapdError.timeout(name, ctx.timeoutMs ?? DEFAULT_TIMEOUT_MS, sanitizeArgs(parsed.data));
|
|
122
125
|
finish(false, 'TIMEOUT');
|
|
123
|
-
return { ok: false, error: { code: 'TIMEOUT', message:
|
|
126
|
+
return { ok: false, error: { code: 'TIMEOUT', message: timeoutError.message, detail: timeoutError.toJSON() } };
|
|
124
127
|
}
|
|
125
|
-
|
|
128
|
+
// 错误路径统一走 TapdError 模型:TapdError 原样保留结构;普通 Error/未知抛出物
|
|
129
|
+
// 包一层 TAPD_UNKNOWN。message = 首行人可读摘要 + 内嵌结构化 JSON 块,
|
|
130
|
+
// 只透出 message 的消费方(MCP/日志)也能拿到全量接管信息。
|
|
131
|
+
const tapdError = error instanceof TapdError ? error : TapdError.wrap(error, name);
|
|
126
132
|
finish(false, 'API_ERROR');
|
|
127
|
-
return { ok: false, error: { code: 'API_ERROR', message } };
|
|
133
|
+
return { ok: false, error: { code: 'API_ERROR', message: tapdError.message, detail: tapdError.toJSON() } };
|
|
128
134
|
}
|
|
129
135
|
}
|
|
130
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"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"}
|