@dsh-ft/dsh-fft-ftshare 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/lib/client.d.ts +3 -0
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +40 -5
- package/lib/client.js.map +1 -1
- package/lib/contract.d.ts +38 -17
- package/lib/contract.d.ts.map +1 -1
- package/lib/contract.js +7 -5
- package/lib/contract.js.map +1 -1
- package/lib/errors.d.ts +54 -60
- package/lib/errors.d.ts.map +1 -1
- package/lib/errors.js +184 -174
- package/lib/errors.js.map +1 -1
- package/lib/index.d.ts +31 -6
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +147 -36
- package/lib/index.js.map +1 -1
- package/lib/project.d.ts +3 -0
- package/lib/project.d.ts.map +1 -1
- package/lib/project.js +10 -1
- package/lib/project.js.map +1 -1
- package/lib/status.d.ts +103 -0
- package/lib/status.d.ts.map +1 -0
- package/lib/status.js +134 -0
- package/lib/status.js.map +1 -0
- package/lib/tools.d.ts +12 -5
- package/lib/tools.d.ts.map +1 -1
- package/lib/tools.js +65 -19
- package/lib/tools.js.map +1 -1
- package/lib/transport.d.ts +12 -0
- package/lib/transport.d.ts.map +1 -1
- package/lib/transport.js +28 -14
- package/lib/transport.js.map +1 -1
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +4 -2
package/lib/index.js
CHANGED
|
@@ -8,14 +8,20 @@
|
|
|
8
8
|
* 的隔离域,preset 之外的插件再也 `inject` 不到,公用底座就白叫了。所以:
|
|
9
9
|
* **provider 全局,工具与投影钩子在 preset**(见 `./tools`、`./project`)。
|
|
10
10
|
*
|
|
11
|
+
* 载荷判定只有一条硬规则:`empty` 必须**正向证据**——已知数据容器存在且为空数组。
|
|
12
|
+
* 成功信封里既没有行、也没有空容器证据时落 `failed`,绝不冒充「没有数据」(P8 的
|
|
13
|
+
* 病根);但非空载荷仍保留兜底(单对象/任意数组),避免把能用的接口判死。
|
|
14
|
+
*
|
|
11
15
|
* 凭据一律走 `ctx.ftshareSettings.apiKey.resolve()`,本包不读任何凭据文件。
|
|
12
16
|
* @module @dsh-ft/dsh-fft-ftshare
|
|
13
17
|
*/
|
|
14
|
-
import { FTSHARE_DATA_SERVICE } from './contract.js';
|
|
15
|
-
import { asText, classifyFailure, isRecord, permissionNoticeFromPayload } from './errors.js';
|
|
18
|
+
import { FTSHARE_DATA_SERVICE, } from './contract.js';
|
|
19
|
+
import { asText, classifyFailure, fingerprintOf, isRecord, permissionNoticeFromPayload } from './errors.js';
|
|
20
|
+
import { statusStore } from './status.js';
|
|
16
21
|
import { createFtshareTransport } from './transport.js';
|
|
17
22
|
export * from './contract.js';
|
|
18
23
|
export { FTSHARE_GATEWAY_ENDPOINT } from './transport.js';
|
|
24
|
+
export { statusStore } from './status.js';
|
|
19
25
|
/** Cordis 插件名。 */
|
|
20
26
|
export const name = '@dsh-ft/dsh-fft-ftshare';
|
|
21
27
|
/** 凭据来自设置服务;缺这一项本行挂起等待,属刻意的 fail-loud。 */
|
|
@@ -25,50 +31,137 @@ export const provide = [FTSHARE_DATA_SERVICE];
|
|
|
25
31
|
/**
|
|
26
32
|
* 载荷里当「明细容器」看待的键,按优先级排列。
|
|
27
33
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* 作为「任意数组」被找到。
|
|
34
|
+
* 这个列表只用于**读容器**:非空时仍允许兜底(单对象/任意数组),但「空」必须来自
|
|
35
|
+
* 列表里的容器为空数组——否则无法区分「真的没有」和「形状变了」。
|
|
31
36
|
*/
|
|
32
37
|
const PAYLOAD_KEYS = ['data', 'rows', 'items', 'records', 'list', 'result', 'payload', 'response'];
|
|
33
|
-
/**
|
|
38
|
+
/** 只描述调用本身、不含事实的键;判断「是否存在事实」与「是不是一行」时忽略。 */
|
|
34
39
|
const ENVELOPE_KEYS = new Set(['ok', 'success', 'cached', 'metadata', 'message', 'error', 'code', 'status', 'request_id', 'permission', 'permissions', 'source']);
|
|
40
|
+
/** 载荷递归深度上限,防止异常结构把递归拖深。 */
|
|
41
|
+
const MAX_PAYLOAD_DEPTH = 3;
|
|
35
42
|
/** 只留下记录元素。 */
|
|
36
43
|
function recordsOf(value) {
|
|
37
44
|
return value.filter(isRecord);
|
|
38
45
|
}
|
|
39
46
|
/**
|
|
40
|
-
*
|
|
47
|
+
* 观测上游载荷:只回答「有没有行」「空有没有证据」「是不是不认识」。
|
|
41
48
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* `empty`——这正是「真的没有数据」的定义。
|
|
49
|
+
* 规则:数组本身是行;已知容器里的非空数组/对象是行;任意数组键里的记录是行;
|
|
50
|
+
* 非信封、非容器、非数组的字段让整条记录成为一行;以上都没有时,只有「已知容器
|
|
51
|
+
* 为空数组」才算 `emptyEvidence`,否则是 `unrecognized`。
|
|
46
52
|
* @param value - 上游结构化载荷。
|
|
47
|
-
* @
|
|
53
|
+
* @param depth - 当前递归深度(内部用)。
|
|
54
|
+
* @returns 观测结果。
|
|
48
55
|
*/
|
|
49
|
-
export function
|
|
50
|
-
if (Array.isArray(value))
|
|
51
|
-
return recordsOf(value);
|
|
56
|
+
export function observePayload(value, depth = 0) {
|
|
57
|
+
if (Array.isArray(value)) {
|
|
58
|
+
return { rows: recordsOf(value), emptyEvidence: value.length === 0, keys: [], unrecognized: false };
|
|
59
|
+
}
|
|
52
60
|
if (!isRecord(value))
|
|
53
|
-
return [];
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
61
|
+
return { rows: [], emptyEvidence: false, keys: [], unrecognized: true };
|
|
62
|
+
const keys = Object.keys(value);
|
|
63
|
+
if (depth < MAX_PAYLOAD_DEPTH) {
|
|
64
|
+
for (const key of PAYLOAD_KEYS) {
|
|
65
|
+
if (!(key in value))
|
|
66
|
+
continue;
|
|
67
|
+
const child = value[key];
|
|
68
|
+
if (Array.isArray(child)) {
|
|
69
|
+
return { rows: recordsOf(child), emptyEvidence: child.length === 0, keys, unrecognized: false };
|
|
70
|
+
}
|
|
71
|
+
if (isRecord(child)) {
|
|
72
|
+
const nested = observePayload(child, depth + 1);
|
|
73
|
+
if (nested.rows.length > 0 || nested.emptyEvidence)
|
|
74
|
+
return { ...nested, keys };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
60
77
|
}
|
|
78
|
+
// 非空兜底:任意数组键里的记录,或整条记录当一行(单对象返回值也是数据)。
|
|
61
79
|
for (const [key, candidate] of Object.entries(value)) {
|
|
62
80
|
if (ENVELOPE_KEYS.has(key) || !Array.isArray(candidate))
|
|
63
81
|
continue;
|
|
64
|
-
const
|
|
65
|
-
if (
|
|
66
|
-
return
|
|
82
|
+
const rows = recordsOf(candidate);
|
|
83
|
+
if (rows.length > 0)
|
|
84
|
+
return { rows, emptyEvidence: false, keys, unrecognized: false };
|
|
85
|
+
}
|
|
86
|
+
const meaningful = keys.filter(key => !ENVELOPE_KEYS.has(key) && !PAYLOAD_KEYS.includes(key) && !Array.isArray(value[key]));
|
|
87
|
+
if (meaningful.length > 0)
|
|
88
|
+
return { rows: [value], emptyEvidence: false, keys, unrecognized: false };
|
|
89
|
+
return { rows: [], emptyEvidence: false, keys, unrecognized: true };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 从任意上游载荷里找出明细行(`observePayload` 的兼容薄包装)。
|
|
93
|
+
* @param value - 上游结构化载荷。
|
|
94
|
+
* @returns 明细行;空数组表示没有行(**不**代表 `empty`,见 `observePayload`)。
|
|
95
|
+
*/
|
|
96
|
+
export function normalizeRows(value) {
|
|
97
|
+
return observePayload(value).rows;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 未识别载荷的提示:这是本地事实(上游成功了,但我们读不出数据容器),不是上游原文。
|
|
101
|
+
* @param value - 上游结构化载荷。
|
|
102
|
+
* @param keys - 顶层键。
|
|
103
|
+
* @returns 失败提示。
|
|
104
|
+
*/
|
|
105
|
+
function unrecognizedPayloadNotice(value, keys) {
|
|
106
|
+
const raw = JSON.stringify(value);
|
|
107
|
+
return {
|
|
108
|
+
message: `上游返回成功,但没有可识别的数据容器(顶层键:${keys.join('、') === '' ? '无' : keys.join('、')})`,
|
|
109
|
+
retryable: false,
|
|
110
|
+
upstream: {
|
|
111
|
+
raw: raw.slice(0, 2048),
|
|
112
|
+
fingerprint: fingerprintOf(undefined, undefined, `unrecognized|${keys.slice().sort().join(',')}`),
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* 记一次失败到账本,并按指纹节流日志:首次带原文,之后每 100 次带一次计数。
|
|
118
|
+
*
|
|
119
|
+
* 线上同一个 429 一天能打几千行(日志里 5835/11653 行是同一个指纹),节流的依据是
|
|
120
|
+
* 指纹本身,不是「这条日志重不重复」。
|
|
121
|
+
* @param logger - 具名 logger。
|
|
122
|
+
* @param store - 失败账本。
|
|
123
|
+
* @param tool - 上游接口名。
|
|
124
|
+
* @param state - 结局。
|
|
125
|
+
* @param notice - 提示。
|
|
126
|
+
* @param durationMs - 本次耗时。
|
|
127
|
+
*/
|
|
128
|
+
function recordFailure(logger, store, tool, state, notice, durationMs) {
|
|
129
|
+
const fingerprint = notice.upstream?.fingerprint ?? fingerprintOf(undefined, notice.code, notice.message);
|
|
130
|
+
const message = notice.upstream?.raw ?? notice.message;
|
|
131
|
+
const { record, isNew } = store.recordFailure({
|
|
132
|
+
fingerprint,
|
|
133
|
+
tool,
|
|
134
|
+
state: state === 'denied' ? 'denied' : 'failed',
|
|
135
|
+
...notice.code !== undefined ? { code: notice.code } : {},
|
|
136
|
+
...notice.upstream?.status !== undefined ? { status: notice.upstream.status } : {},
|
|
137
|
+
message,
|
|
138
|
+
durationMs,
|
|
139
|
+
});
|
|
140
|
+
if (logger === undefined)
|
|
141
|
+
return;
|
|
142
|
+
if (isNew) {
|
|
143
|
+
logger.warn('ftshare.call_classified', {
|
|
144
|
+
tool,
|
|
145
|
+
state,
|
|
146
|
+
...notice.code !== undefined ? { code: notice.code } : {},
|
|
147
|
+
...notice.upstream?.status !== undefined ? { status: notice.upstream.status } : {},
|
|
148
|
+
fingerprint,
|
|
149
|
+
durationMs,
|
|
150
|
+
count: record.count,
|
|
151
|
+
message: message.slice(0, 1000),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
else if (record.count % 100 === 0) {
|
|
155
|
+
logger.warn('ftshare.call_classified', {
|
|
156
|
+
tool,
|
|
157
|
+
state,
|
|
158
|
+
...notice.code !== undefined ? { code: notice.code } : {},
|
|
159
|
+
...notice.upstream?.status !== undefined ? { status: notice.upstream.status } : {},
|
|
160
|
+
fingerprint,
|
|
161
|
+
durationMs,
|
|
162
|
+
count: record.count,
|
|
163
|
+
});
|
|
67
164
|
}
|
|
68
|
-
// 兜底:没有任何数组键、但确实带了非信封字段时,整条记录算一行。数组键(哪怕是
|
|
69
|
-
// 空数组)已经在上面的扫描里表过态,不能再把 `{"data": []}` 读成「有一条数据」。
|
|
70
|
-
const meaningful = Object.keys(value).filter(key => !ENVELOPE_KEYS.has(key) && !Array.isArray(value[key]));
|
|
71
|
-
return meaningful.length > 0 ? [value] : [];
|
|
72
165
|
}
|
|
73
166
|
/**
|
|
74
167
|
* 上游接口清单的缓存时长。清单一天最多变几次,而目录产物是发版时生成的,运行期
|
|
@@ -82,6 +175,7 @@ const TOOLS_TTL_MS = 5 * 60_000;
|
|
|
82
175
|
*/
|
|
83
176
|
export function createFtshareDataService(options) {
|
|
84
177
|
const now = options.now ?? (() => new Date());
|
|
178
|
+
const store = options.statusStore ?? statusStore;
|
|
85
179
|
let cache;
|
|
86
180
|
return {
|
|
87
181
|
async call(interfaceName, args = {}, callOptions) {
|
|
@@ -89,18 +183,24 @@ export function createFtshareDataService(options) {
|
|
|
89
183
|
const startedAt = Date.now();
|
|
90
184
|
try {
|
|
91
185
|
const { value } = await options.transport.call(interfaceName, args, callOptions);
|
|
92
|
-
const
|
|
93
|
-
if (rows.length > 0)
|
|
94
|
-
return { ok: true, state: 'available', rows, source };
|
|
186
|
+
const observation = observePayload(value);
|
|
187
|
+
if (observation.rows.length > 0)
|
|
188
|
+
return { ok: true, state: 'available', rows: observation.rows, source };
|
|
189
|
+
// 成功信封 + 显式权限标记 = denied,不是没有数据。这是 P8 的第二种形态。
|
|
95
190
|
const gated = permissionNoticeFromPayload(interfaceName, value);
|
|
96
|
-
|
|
97
|
-
|
|
191
|
+
if (gated !== undefined) {
|
|
192
|
+
recordFailure(options.logger, store, interfaceName, 'denied', gated, Date.now() - startedAt);
|
|
98
193
|
return { ok: false, state: 'denied', rows: [], notice: gated, source };
|
|
99
|
-
|
|
194
|
+
}
|
|
195
|
+
if (observation.emptyEvidence)
|
|
196
|
+
return { ok: true, state: 'empty', rows: [], source };
|
|
197
|
+
const notice = unrecognizedPayloadNotice(value, observation.keys);
|
|
198
|
+
recordFailure(options.logger, store, interfaceName, 'failed', notice, Date.now() - startedAt);
|
|
199
|
+
return { ok: false, state: 'failed', rows: [], notice, source };
|
|
100
200
|
}
|
|
101
201
|
catch (error) {
|
|
102
202
|
const { state, notice } = classifyFailure(error, interfaceName);
|
|
103
|
-
options.logger
|
|
203
|
+
recordFailure(options.logger, store, interfaceName, state, notice, Date.now() - startedAt);
|
|
104
204
|
return { ok: false, state, rows: [], notice, source };
|
|
105
205
|
}
|
|
106
206
|
},
|
|
@@ -110,6 +210,17 @@ export function createFtshareDataService(options) {
|
|
|
110
210
|
try {
|
|
111
211
|
const tools = await options.transport.listTools();
|
|
112
212
|
cache = { tools, at: Date.now() };
|
|
213
|
+
// 目录漂移:随包快照 vs 上游实时清单的规范化哈希,不一致就留痕。
|
|
214
|
+
store.recordCatalog(tools);
|
|
215
|
+
const observation = store.snapshot().catalog;
|
|
216
|
+
if (observation.changed === true) {
|
|
217
|
+
options.logger?.warn('ftshare.catalog_changed', {
|
|
218
|
+
shippedCount: observation.shippedCount,
|
|
219
|
+
liveCount: observation.liveCount,
|
|
220
|
+
shippedHash: observation.shippedHash,
|
|
221
|
+
liveHash: observation.liveHash,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
113
224
|
return tools;
|
|
114
225
|
}
|
|
115
226
|
catch (error) {
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/project.d.ts
CHANGED
|
@@ -83,6 +83,9 @@ export declare function projectContent(name: string, result: {
|
|
|
83
83
|
}): ContentBlock[] | undefined;
|
|
84
84
|
/**
|
|
85
85
|
* 把一次 `ctx.ftshareData.call()` 的结果渲染成模型可见文本(工具平面与投影平面共用)。
|
|
86
|
+
*
|
|
87
|
+
* 失败说明只展示事实:上游原文、上游状态、指纹、上游给的档位与重试提示。不翻译、
|
|
88
|
+
* 不归因——「是不是额度」让原文自己说。
|
|
86
89
|
* @param title - 中文标题。
|
|
87
90
|
* @param tool - 上游接口名。
|
|
88
91
|
* @param result - 归一结果。
|
package/lib/project.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAwBtD,4DAA4D;AAC5D,eAAO,MAAM,uBAAuB,cAAc,CAAA;AAElD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAM5C,CAAA;AAoGD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAkDzE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAK9F;AAED,oBAAoB;AACpB,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOvF;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,GACrE,YAAY,EAAE,GAAG,SAAS,CAM5B;AAED
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAwBtD,4DAA4D;AAC5D,eAAO,MAAM,uBAAuB,cAAc,CAAA;AAElD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAM5C,CAAA;AAoGD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAkDzE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAK9F;AAED,oBAAoB;AACpB,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOvF;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,GACrE,YAAY,EAAE,GAAG,SAAS,CAM5B;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAgB/F;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAkCxC"}
|
package/lib/project.js
CHANGED
|
@@ -255,6 +255,9 @@ export function projectContent(name, result) {
|
|
|
255
255
|
}
|
|
256
256
|
/**
|
|
257
257
|
* 把一次 `ctx.ftshareData.call()` 的结果渲染成模型可见文本(工具平面与投影平面共用)。
|
|
258
|
+
*
|
|
259
|
+
* 失败说明只展示事实:上游原文、上游状态、指纹、上游给的档位与重试提示。不翻译、
|
|
260
|
+
* 不归因——「是不是额度」让原文自己说。
|
|
258
261
|
* @param title - 中文标题。
|
|
259
262
|
* @param tool - 上游接口名。
|
|
260
263
|
* @param result - 归一结果。
|
|
@@ -266,11 +269,17 @@ export function renderCallResult(title, tool, result) {
|
|
|
266
269
|
if (notice !== undefined) {
|
|
267
270
|
lines.push(`⚠ ${notice.message}`);
|
|
268
271
|
if (notice.requiredPlan !== undefined)
|
|
269
|
-
lines.push(
|
|
272
|
+
lines.push(`上游给出的所需档位:${notice.requiredPlan}`);
|
|
270
273
|
if (notice.upgradeUrl !== undefined)
|
|
271
274
|
lines.push(`升级入口:${notice.upgradeUrl}`);
|
|
275
|
+
if (notice.upstream?.status !== undefined)
|
|
276
|
+
lines.push(`上游状态:HTTP ${notice.upstream.status}`);
|
|
277
|
+
if (notice.upstream?.fingerprint !== undefined)
|
|
278
|
+
lines.push(`失败指纹:${notice.upstream.fingerprint}`);
|
|
272
279
|
if (notice.retryable)
|
|
273
280
|
lines.push('该失败可重试。');
|
|
281
|
+
if (result.state === 'denied')
|
|
282
|
+
lines.push('该结果是无权访问,不代表「没有数据」。');
|
|
274
283
|
}
|
|
275
284
|
if (result.state === 'available')
|
|
276
285
|
lines.push(...renderItems(result.rows, MAX_GENERIC_ITEMS, false));
|
package/lib/project.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|
package/lib/status.d.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 失败现场与目录漂移的进程内聚合(`ftshare_status` 的数据源)。
|
|
3
|
+
*
|
|
4
|
+
* 为什么在内存里:日志是给导出用的长文本,模型问「为什么取不到」时没有便宜的读法;
|
|
5
|
+
* 一个按指纹聚合的环形账本能把「同一个 429 打了几千次、首次/末次是什么、原文是什么」
|
|
6
|
+
* 一次答完。它只记事实,不做归因,也不主动联网。
|
|
7
|
+
* @module @dsh-ft/dsh-fft-ftshare/status
|
|
8
|
+
*/
|
|
9
|
+
import type { FtshareToolInfo } from './contract.js';
|
|
10
|
+
/** 一个失败指纹的聚合记录。 */
|
|
11
|
+
export interface FailureRecord {
|
|
12
|
+
fingerprint: string;
|
|
13
|
+
/** 最近一次失败的接口名。 */
|
|
14
|
+
tool: string;
|
|
15
|
+
state: 'denied' | 'failed';
|
|
16
|
+
code?: string;
|
|
17
|
+
status?: number;
|
|
18
|
+
/** 最近一次的上游原文/事实说明。 */
|
|
19
|
+
message: string;
|
|
20
|
+
/** 命中次数。 */
|
|
21
|
+
count: number;
|
|
22
|
+
/** 首次出现时间(ISO)。 */
|
|
23
|
+
firstAt: string;
|
|
24
|
+
/** 最近一次出现时间(ISO)。 */
|
|
25
|
+
lastAt: string;
|
|
26
|
+
/** 最近一次耗时。 */
|
|
27
|
+
lastDurationMs: number;
|
|
28
|
+
}
|
|
29
|
+
/** 记一条失败所需的输入。 */
|
|
30
|
+
export interface FailureInput {
|
|
31
|
+
fingerprint: string;
|
|
32
|
+
tool: string;
|
|
33
|
+
state: 'denied' | 'failed';
|
|
34
|
+
code?: string;
|
|
35
|
+
status?: number;
|
|
36
|
+
message: string;
|
|
37
|
+
durationMs: number;
|
|
38
|
+
/** 事件时间;默认当前时间。 */
|
|
39
|
+
at?: Date;
|
|
40
|
+
}
|
|
41
|
+
/** 目录漂移的观测结果:随包快照 vs 上游实时清单。 */
|
|
42
|
+
export interface CatalogObservation {
|
|
43
|
+
/** 随包目录条目数。 */
|
|
44
|
+
shippedCount: number;
|
|
45
|
+
/** 随包目录的规范化哈希。 */
|
|
46
|
+
shippedHash: string;
|
|
47
|
+
/** 上游实时清单条目数;还没拉过时为 undefined。 */
|
|
48
|
+
liveCount?: number;
|
|
49
|
+
/** 上游实时清单的规范化哈希。 */
|
|
50
|
+
liveHash?: string;
|
|
51
|
+
/** 是否与随包快照不一致。 */
|
|
52
|
+
changed?: boolean;
|
|
53
|
+
/** 最近一次检查时间(ISO)。 */
|
|
54
|
+
checkedAt?: string;
|
|
55
|
+
}
|
|
56
|
+
/** `ftshare_status` 的快照。 */
|
|
57
|
+
export interface StatusSnapshot {
|
|
58
|
+
/** 失败指纹,按次数从多到少。 */
|
|
59
|
+
failures: FailureRecord[];
|
|
60
|
+
/** 目录漂移观测。 */
|
|
61
|
+
catalog: CatalogObservation;
|
|
62
|
+
/** 进程启动以来记录到的失败总次数。 */
|
|
63
|
+
totalFailures: number;
|
|
64
|
+
/** 账本创建时间(ISO)。 */
|
|
65
|
+
since: string;
|
|
66
|
+
}
|
|
67
|
+
/** 失败账本:服务写、状态工具读;测试可以 new 一个隔离实例。 */
|
|
68
|
+
export interface FailureStore {
|
|
69
|
+
/**
|
|
70
|
+
* 记一次失败。
|
|
71
|
+
* @param input - 失败事实。
|
|
72
|
+
* @returns 聚合后的记录与「是否首次出现」。
|
|
73
|
+
*/
|
|
74
|
+
recordFailure(input: FailureInput): {
|
|
75
|
+
record: FailureRecord;
|
|
76
|
+
isNew: boolean;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* 记一次目录检查。
|
|
80
|
+
* @param live - 上游实时清单。
|
|
81
|
+
*/
|
|
82
|
+
recordCatalog(live: readonly FtshareToolInfo[]): void;
|
|
83
|
+
/** 读快照(拷贝,调用方改不到账本)。 */
|
|
84
|
+
snapshot(): StatusSnapshot;
|
|
85
|
+
/** 清空账本(测试用)。 */
|
|
86
|
+
clear(): void;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 随包目录的规范化摘要。
|
|
90
|
+
* @returns 条目数与哈希。
|
|
91
|
+
*/
|
|
92
|
+
export declare function shippedCatalogSummary(): {
|
|
93
|
+
count: number;
|
|
94
|
+
hash: string;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* 造一个失败账本。
|
|
98
|
+
* @returns 空账本。
|
|
99
|
+
*/
|
|
100
|
+
export declare function createFailureStore(): FailureStore;
|
|
101
|
+
/** 进程级账本:服务写、`ftshare_status` 读。 */
|
|
102
|
+
export declare const statusStore: FailureStore;
|
|
103
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AASpD,mBAAmB;AACnB,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc;IACd,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,kBAAkB;AAClB,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,mBAAmB;IACnB,EAAE,CAAC,EAAE,IAAI,CAAA;CACV;AAED,gCAAgC;AAChC,MAAM,WAAW,kBAAkB;IACjC,eAAe;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kBAAkB;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,4BAA4B;AAC5B,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,cAAc;IACd,OAAO,EAAE,kBAAkB,CAAA;IAC3B,uBAAuB;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAA;IAC7E;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,SAAS,eAAe,EAAE,GAAG,IAAI,CAAA;IACrD,wBAAwB;IACxB,QAAQ,IAAI,cAAc,CAAA;IAC1B,iBAAiB;IACjB,KAAK,IAAI,IAAI,CAAA;CACd;AA0BD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAMvE;AAQD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CA4EjD;AAED,oCAAoC;AACpC,eAAO,MAAM,WAAW,EAAE,YAAmC,CAAA"}
|
package/lib/status.js
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 失败现场与目录漂移的进程内聚合(`ftshare_status` 的数据源)。
|
|
3
|
+
*
|
|
4
|
+
* 为什么在内存里:日志是给导出用的长文本,模型问「为什么取不到」时没有便宜的读法;
|
|
5
|
+
* 一个按指纹聚合的环形账本能把「同一个 429 打了几千次、首次/末次是什么、原文是什么」
|
|
6
|
+
* 一次答完。它只记事实,不做归因,也不主动联网。
|
|
7
|
+
* @module @dsh-ft/dsh-fft-ftshare/status
|
|
8
|
+
*/
|
|
9
|
+
import { loadCatalog } from './catalog-host.js';
|
|
10
|
+
import { hashText } from './errors.js';
|
|
11
|
+
/** 最多保留的失败指纹数;超出按最后出现时间淘汰。 */
|
|
12
|
+
const MAX_FAILURES = 50;
|
|
13
|
+
/** 存进账本的原文上限;完整原文在日志与当次工具结果里。 */
|
|
14
|
+
const MESSAGE_MAX = 500;
|
|
15
|
+
/** 按字段名排序的稳定序列化,用于目录哈希。 */
|
|
16
|
+
function stableStringify(value) {
|
|
17
|
+
if (Array.isArray(value))
|
|
18
|
+
return `[${value.map(item => stableStringify(item)).join(',')}]`;
|
|
19
|
+
if (value !== null && typeof value === 'object') {
|
|
20
|
+
const record = value;
|
|
21
|
+
const keys = Object.keys(record).filter(key => record[key] !== undefined).sort();
|
|
22
|
+
return `{${keys.map(key => `${JSON.stringify(key)}:${stableStringify(record[key])}`).join(',')}}`;
|
|
23
|
+
}
|
|
24
|
+
return JSON.stringify(value ?? null);
|
|
25
|
+
}
|
|
26
|
+
/** 一条目录/清单条目的规范化文本;两侧用同一个形状才能直接比哈希。 */
|
|
27
|
+
function canonicalLine(entry) {
|
|
28
|
+
return stableStringify({
|
|
29
|
+
name: entry.name,
|
|
30
|
+
title: entry.title,
|
|
31
|
+
description: entry.description ?? '',
|
|
32
|
+
inputSchema: entry.inputSchema ?? null,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/** 随包目录的条目数与哈希(懒算一次)。 */
|
|
36
|
+
let shippedCatalog;
|
|
37
|
+
/**
|
|
38
|
+
* 随包目录的规范化摘要。
|
|
39
|
+
* @returns 条目数与哈希。
|
|
40
|
+
*/
|
|
41
|
+
export function shippedCatalogSummary() {
|
|
42
|
+
if (shippedCatalog !== undefined)
|
|
43
|
+
return shippedCatalog;
|
|
44
|
+
const entries = loadCatalog().entries;
|
|
45
|
+
const hash = hashText(entries.map(entry => canonicalLine(entry)).sort().join('\n'));
|
|
46
|
+
shippedCatalog = { count: entries.length, hash };
|
|
47
|
+
return shippedCatalog;
|
|
48
|
+
}
|
|
49
|
+
/** 随包目录的初始观测(还没拉上游清单)。 */
|
|
50
|
+
function shippedObservation() {
|
|
51
|
+
const shipped = shippedCatalogSummary();
|
|
52
|
+
return { shippedCount: shipped.count, shippedHash: shipped.hash };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 造一个失败账本。
|
|
56
|
+
* @returns 空账本。
|
|
57
|
+
*/
|
|
58
|
+
export function createFailureStore() {
|
|
59
|
+
const failures = new Map();
|
|
60
|
+
const since = new Date().toISOString();
|
|
61
|
+
let total = 0;
|
|
62
|
+
let catalog = shippedObservation();
|
|
63
|
+
const evict = () => {
|
|
64
|
+
if (failures.size <= MAX_FAILURES)
|
|
65
|
+
return;
|
|
66
|
+
const oldest = [...failures.values()].sort((left, right) => left.lastAt.localeCompare(right.lastAt))[0];
|
|
67
|
+
if (oldest !== undefined)
|
|
68
|
+
failures.delete(oldest.fingerprint);
|
|
69
|
+
};
|
|
70
|
+
return {
|
|
71
|
+
recordFailure(input) {
|
|
72
|
+
const at = (input.at ?? new Date()).toISOString();
|
|
73
|
+
const existing = failures.get(input.fingerprint);
|
|
74
|
+
total += 1;
|
|
75
|
+
if (existing === undefined) {
|
|
76
|
+
const record = {
|
|
77
|
+
fingerprint: input.fingerprint,
|
|
78
|
+
tool: input.tool,
|
|
79
|
+
state: input.state,
|
|
80
|
+
...input.code !== undefined ? { code: input.code } : {},
|
|
81
|
+
...input.status !== undefined ? { status: input.status } : {},
|
|
82
|
+
message: input.message.slice(0, MESSAGE_MAX),
|
|
83
|
+
count: 1,
|
|
84
|
+
firstAt: at,
|
|
85
|
+
lastAt: at,
|
|
86
|
+
lastDurationMs: input.durationMs,
|
|
87
|
+
};
|
|
88
|
+
failures.set(input.fingerprint, record);
|
|
89
|
+
evict();
|
|
90
|
+
return { record: { ...record }, isNew: true };
|
|
91
|
+
}
|
|
92
|
+
existing.tool = input.tool;
|
|
93
|
+
existing.state = input.state;
|
|
94
|
+
existing.code = input.code;
|
|
95
|
+
existing.status = input.status;
|
|
96
|
+
existing.message = input.message.slice(0, MESSAGE_MAX);
|
|
97
|
+
existing.count += 1;
|
|
98
|
+
existing.lastAt = at;
|
|
99
|
+
existing.lastDurationMs = input.durationMs;
|
|
100
|
+
return { record: { ...existing }, isNew: false };
|
|
101
|
+
},
|
|
102
|
+
recordCatalog(live) {
|
|
103
|
+
const hash = hashText(live.map(tool => canonicalLine({
|
|
104
|
+
name: tool.tool,
|
|
105
|
+
title: tool.title,
|
|
106
|
+
...tool.description !== undefined ? { description: tool.description } : {},
|
|
107
|
+
...tool.inputSchema !== undefined ? { inputSchema: tool.inputSchema } : {},
|
|
108
|
+
})).sort().join('\n'));
|
|
109
|
+
catalog = {
|
|
110
|
+
...shippedObservation(),
|
|
111
|
+
liveCount: live.length,
|
|
112
|
+
liveHash: hash,
|
|
113
|
+
changed: hash !== catalog.shippedHash,
|
|
114
|
+
checkedAt: new Date().toISOString(),
|
|
115
|
+
};
|
|
116
|
+
},
|
|
117
|
+
snapshot() {
|
|
118
|
+
return {
|
|
119
|
+
failures: [...failures.values()].sort((left, right) => right.count - left.count).map(record => ({ ...record })),
|
|
120
|
+
catalog: { ...catalog },
|
|
121
|
+
totalFailures: total,
|
|
122
|
+
since,
|
|
123
|
+
};
|
|
124
|
+
},
|
|
125
|
+
clear() {
|
|
126
|
+
failures.clear();
|
|
127
|
+
total = 0;
|
|
128
|
+
catalog = shippedObservation();
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/** 进程级账本:服务写、`ftshare_status` 读。 */
|
|
133
|
+
export const statusStore = createFailureStore();
|
|
134
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
|