@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/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
- * 上游数据接口的返回形态不统一:多数是 `{"data":[…]}`,也有 `rows`/`items`/
29
- * `result`。这个列表是**读取顺序**,不是白名单——列表里没有的键会在兜底扫描里
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
- * 规则按优先级:数组自己就是行;`data`/`rows`/… 里第一个非空数组是行;否则找第一
43
- * 个「元素是对象的数组」;再否则,若记录里还有非信封字段,就把整条记录当作一行
44
- * (单对象返回值也是数据)。只有「信封里什么都没有」才返回空数组,也就是
45
- * `empty`——这正是「真的没有数据」的定义。
49
+ * 规则:数组本身是行;已知容器里的非空数组/对象是行;任意数组键里的记录是行;
50
+ * 非信封、非容器、非数组的字段让整条记录成为一行;以上都没有时,只有「已知容器
51
+ * 为空数组」才算 `emptyEvidence`,否则是 `unrecognized`。
46
52
  * @param value - 上游结构化载荷。
47
- * @returns 明细行;空数组表示确实没有数据。
53
+ * @param depth - 当前递归深度(内部用)。
54
+ * @returns 观测结果。
48
55
  */
49
- export function normalizeRows(value) {
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
- for (const key of PAYLOAD_KEYS) {
55
- if (!(key in value))
56
- continue;
57
- const found = normalizeRows(value[key]);
58
- if (found.length > 0)
59
- return found;
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 found = recordsOf(candidate);
65
- if (found.length > 0)
66
- return found;
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 rows = normalizeRows(value);
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
- // 成功信封 + 权限标记 = 无权,不是没有数据。这是 P8 的第二种形态。
97
- if (gated !== undefined)
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
- return { ok: true, state: 'empty', rows: [], source };
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?.warn('ftshare.call_classified', { tool: interfaceName, state, code: notice.code, durationMs: Date.now() - startedAt });
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":"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"}
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 - 归一结果。
@@ -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;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAa/F;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAkCxC"}
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(`所需订阅:${notice.requiredPlan}`);
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));
@@ -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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"}
@@ -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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"}