dsh-thinking-guard 0.1.19 → 0.1.21
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 +80 -80
- package/cordis.patch.yml +5 -0
- package/lib/client.d.ts +20 -2
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +6724 -7923
- package/lib/guard-core.js +72 -1
- package/lib/guard-core.js.map +1 -1
- package/lib/guard-loop-core.js +36 -5
- package/lib/guard-loop-core.js.map +1 -1
- package/lib/guard.js +20 -4
- package/lib/guard.js.map +1 -1
- package/lib/host-face.js +1 -0
- package/lib/host-face.js.map +1 -1
- package/lib/index.js +11 -1
- package/lib/index.js.map +1 -1
- package/lib/policy-state.js +29 -1
- package/lib/policy-state.js.map +1 -1
- package/lib/policy.js +24 -2
- package/lib/policy.js.map +1 -1
- package/lib/server/call-index-remote.js +110 -0
- package/lib/server/call-index-remote.js.map +1 -0
- package/lib/server/remote.js +13 -0
- package/lib/server/remote.js.map +1 -1
- package/lib/types/guard-core.d.ts +69 -1
- package/lib/types/guard-core.d.ts.map +1 -1
- package/lib/types/guard-loop-core.d.ts +15 -0
- package/lib/types/guard-loop-core.d.ts.map +1 -1
- package/lib/types/guard.d.ts +7 -1
- package/lib/types/guard.d.ts.map +1 -1
- package/lib/types/host-face.d.ts.map +1 -1
- package/lib/types/index.d.ts +5 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/policy-state.d.ts +6 -0
- package/lib/types/policy-state.d.ts.map +1 -1
- package/lib/types/policy.d.ts +22 -3
- package/lib/types/policy.d.ts.map +1 -1
- package/lib/types/server/call-index-remote.d.ts +17 -0
- package/lib/types/server/call-index-remote.d.ts.map +1 -0
- package/lib/types/server/remote.d.ts +9 -0
- package/lib/types/server/remote.d.ts.map +1 -1
- package/lib/types/usage/call-index-core.d.ts +152 -0
- package/lib/types/usage/call-index-core.d.ts.map +1 -0
- package/lib/types/usage/call-index-host-face.d.ts +44 -0
- package/lib/types/usage/call-index-host-face.d.ts.map +1 -0
- package/lib/types/usage/call-index-host.d.ts +7 -0
- package/lib/types/usage/call-index-host.d.ts.map +1 -0
- package/lib/types/usage/call-index-query.d.ts +97 -0
- package/lib/types/usage/call-index-query.d.ts.map +1 -0
- package/lib/types/usage/call-index-runtime.d.ts +46 -0
- package/lib/types/usage/call-index-runtime.d.ts.map +1 -0
- package/lib/types/usage/call-index-scope.d.ts +59 -0
- package/lib/types/usage/call-index-scope.d.ts.map +1 -0
- package/lib/types/usage/call-index-wire.d.ts +286 -0
- package/lib/types/usage/call-index-wire.d.ts.map +1 -0
- package/lib/types/usage/session-index.d.ts +149 -0
- package/lib/types/usage/session-index.d.ts.map +1 -0
- package/lib/usage/call-index-core.js +761 -0
- package/lib/usage/call-index-core.js.map +1 -0
- package/lib/usage/call-index-host-face.js +77 -0
- package/lib/usage/call-index-host-face.js.map +1 -0
- package/lib/usage/call-index-host.js +13 -0
- package/lib/usage/call-index-host.js.map +1 -0
- package/lib/usage/call-index-query.js +669 -0
- package/lib/usage/call-index-query.js.map +1 -0
- package/lib/usage/call-index-runtime.js +376 -0
- package/lib/usage/call-index-runtime.js.map +1 -0
- package/lib/usage/call-index-scope.js +79 -0
- package/lib/usage/call-index-scope.js.map +1 -0
- package/lib/usage/call-index-wire.js +490 -0
- package/lib/usage/call-index-wire.js.map +1 -0
- package/lib/usage/session-index.js +600 -0
- package/lib/usage/session-index.js.map +1 -0
- package/package.json +144 -144
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-safe wire contract for the `callIndex` Remote namespace (D-026).
|
|
3
|
+
*
|
|
4
|
+
* This module is the single place both faces agree on. It is imported at
|
|
5
|
+
* RUNTIME by the browser contribution (`src/client/call-index-remote.ts`) and by
|
|
6
|
+
* the Host face (`src/usage/call-index-host-face.ts`), so it may only depend on
|
|
7
|
+
* `zod`; it must never runtime-import a Node module or `session-index.ts` (a
|
|
8
|
+
* type-only import is fine because it is erased before the browser bundle).
|
|
9
|
+
*
|
|
10
|
+
* @module dsh-thinking-guard/usage/call-index-wire
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
/** Every reply kind on the `callIndex` wire. */
|
|
14
|
+
export const CALL_INDEX_REPLY_KINDS = [
|
|
15
|
+
'status',
|
|
16
|
+
'task',
|
|
17
|
+
'summary',
|
|
18
|
+
'sessions',
|
|
19
|
+
'calls',
|
|
20
|
+
'detail',
|
|
21
|
+
'error',
|
|
22
|
+
];
|
|
23
|
+
/** Stable failure codes; anything else normalizes to `internal-error`. */
|
|
24
|
+
export const CALL_INDEX_ERROR_REASONS = [
|
|
25
|
+
'invalid-request',
|
|
26
|
+
'scope-disabled',
|
|
27
|
+
'persistence-unavailable',
|
|
28
|
+
'cursor-stale',
|
|
29
|
+
'query-capacity',
|
|
30
|
+
'reply-too-large',
|
|
31
|
+
'not-visible',
|
|
32
|
+
'runtime-unavailable',
|
|
33
|
+
'task-not-found',
|
|
34
|
+
'internal-error',
|
|
35
|
+
];
|
|
36
|
+
/** Call statuses mirrored from `CallIndexRow.outcome`. */
|
|
37
|
+
export const CALL_INDEX_OUTCOMES = [
|
|
38
|
+
'success',
|
|
39
|
+
'error',
|
|
40
|
+
'cancelled',
|
|
41
|
+
'unresolved',
|
|
42
|
+
'unknown',
|
|
43
|
+
'running',
|
|
44
|
+
];
|
|
45
|
+
/** Known call source categories (the core currently emits only `unknown`). */
|
|
46
|
+
export const CALL_INDEX_SOURCE_KINDS = ['mcp', 'plugin-tool', 'native', 'skill', 'unknown'];
|
|
47
|
+
/** Shared literal bounds; Host and browser must agree. */
|
|
48
|
+
export const CALL_INDEX_MAX_ID_LENGTH = 512;
|
|
49
|
+
export const CALL_INDEX_MAX_CWD_LENGTH = 4096;
|
|
50
|
+
export const CALL_INDEX_MAX_CURSOR_LENGTH = 256;
|
|
51
|
+
export const CALL_INDEX_DEFAULT_LIMIT = 50;
|
|
52
|
+
export const CALL_INDEX_MAX_LIMIT = 200;
|
|
53
|
+
export const CALL_INDEX_DEFAULT_TTL_MS = 60_000;
|
|
54
|
+
export const CALL_INDEX_DEFAULT_MAX_VIEWS = 4;
|
|
55
|
+
export const CALL_INDEX_DEFAULT_MAX_BYTES = 8 * 1024 * 1024;
|
|
56
|
+
export const CALL_INDEX_MAX_REPLY_BYTES = 256 * 1024;
|
|
57
|
+
/** Build a stable error reply; an unknown reason becomes `internal-error`. */
|
|
58
|
+
export function callIndexError(reason) {
|
|
59
|
+
const normalized = CALL_INDEX_ERROR_REASONS.includes(reason)
|
|
60
|
+
? reason
|
|
61
|
+
: 'internal-error';
|
|
62
|
+
return { schemaVersion: 1, ok: false, kind: 'error', reason: normalized };
|
|
63
|
+
}
|
|
64
|
+
const outcomeEnum = z.enum([...CALL_INDEX_OUTCOMES]);
|
|
65
|
+
const sourceKindEnum = z.enum([...CALL_INDEX_SOURCE_KINDS]);
|
|
66
|
+
/** A finite number that is also a valid `Date` instant. */
|
|
67
|
+
const epochMs = z.number().refine((value) => Number.isFinite(value) && Number.isFinite(new Date(value).getTime()), { message: 'invalid-date' });
|
|
68
|
+
/** One filter shared by summary / list requests. Half-open `[fromMs, toMs)`. */
|
|
69
|
+
export const callIndexQuerySchema = z
|
|
70
|
+
.object({
|
|
71
|
+
sessionId: z.string().max(CALL_INDEX_MAX_ID_LENGTH).optional(),
|
|
72
|
+
toolName: z.string().max(CALL_INDEX_MAX_ID_LENGTH).optional(),
|
|
73
|
+
cwd: z.string().max(CALL_INDEX_MAX_CWD_LENGTH).optional(),
|
|
74
|
+
outcome: outcomeEnum.optional(),
|
|
75
|
+
sourceKind: sourceKindEnum.optional(),
|
|
76
|
+
fromMs: epochMs.optional(),
|
|
77
|
+
toMs: epochMs.optional(),
|
|
78
|
+
includeInherited: z.boolean().optional(),
|
|
79
|
+
})
|
|
80
|
+
.strict()
|
|
81
|
+
.refine(value => value.fromMs === undefined || value.toMs === undefined || value.fromMs <= value.toMs, { message: 'invalid-date-interval' });
|
|
82
|
+
/** Bounds for the client-supplied local-day offset (UTC-12:00 … UTC+14:00). */
|
|
83
|
+
export const CALL_INDEX_MIN_DAY_OFFSET_MINUTES = -720;
|
|
84
|
+
export const CALL_INDEX_MAX_DAY_OFFSET_MINUTES = 840;
|
|
85
|
+
/** Hard cap on returned day buckets: one calendar year of daily rows. */
|
|
86
|
+
export const CALL_INDEX_MAX_DAY_BUCKETS = 366;
|
|
87
|
+
export const callIndexSummaryRequestSchema = z
|
|
88
|
+
.object({
|
|
89
|
+
query: callIndexQuerySchema.optional(),
|
|
90
|
+
snapshotId: z.string().min(1).max(CALL_INDEX_MAX_ID_LENGTH).optional(),
|
|
91
|
+
/**
|
|
92
|
+
* Minutes east of UTC for the caller's local day boundary.
|
|
93
|
+
*
|
|
94
|
+
* The Host never guesses a timezone: a natural-day bucket is only meaningful
|
|
95
|
+
* relative to a zone, and the browser is the only party that knows the user's
|
|
96
|
+
* preference. Absent means the buckets are UTC days.
|
|
97
|
+
*/
|
|
98
|
+
dayOffsetMinutes: z
|
|
99
|
+
.number()
|
|
100
|
+
.int()
|
|
101
|
+
.min(CALL_INDEX_MIN_DAY_OFFSET_MINUTES)
|
|
102
|
+
.max(CALL_INDEX_MAX_DAY_OFFSET_MINUTES)
|
|
103
|
+
.optional(),
|
|
104
|
+
})
|
|
105
|
+
.strict();
|
|
106
|
+
export const callIndexListRequestSchema = z
|
|
107
|
+
.object({
|
|
108
|
+
query: callIndexQuerySchema.optional(),
|
|
109
|
+
snapshotId: z.string().min(1).max(CALL_INDEX_MAX_ID_LENGTH).optional(),
|
|
110
|
+
cursor: z.string().min(1).max(CALL_INDEX_MAX_CURSOR_LENGTH).optional(),
|
|
111
|
+
limit: z.number().int().min(1).max(CALL_INDEX_MAX_LIMIT).optional(),
|
|
112
|
+
})
|
|
113
|
+
.strict();
|
|
114
|
+
export const callIndexDetailRequestSchema = z
|
|
115
|
+
.object({
|
|
116
|
+
sessionId: z.string().min(1).max(CALL_INDEX_MAX_ID_LENGTH),
|
|
117
|
+
callSeq: z.number().int().min(0),
|
|
118
|
+
snapshotId: z.string().min(1).max(CALL_INDEX_MAX_ID_LENGTH).optional(),
|
|
119
|
+
})
|
|
120
|
+
.strict();
|
|
121
|
+
/** `startIndex(request?)`; the runtime owns the actual scan mode. */
|
|
122
|
+
export const callIndexStartRequestSchema = z
|
|
123
|
+
.object({ mode: z.enum(['full', 'incremental']).optional() })
|
|
124
|
+
.strict();
|
|
125
|
+
/** `cancelIndex(request)`; `request` is required even when it carries nothing. */
|
|
126
|
+
export const callIndexCancelRequestSchema = z
|
|
127
|
+
.object({ taskId: z.string().min(1).max(CALL_INDEX_MAX_ID_LENGTH).optional() })
|
|
128
|
+
.strict();
|
|
129
|
+
/**
|
|
130
|
+
* Reason codes, sanitized instead of rejected.
|
|
131
|
+
*
|
|
132
|
+
* A strict `.max(32)` list here was a whole-reply failure mode: the scan legitimately
|
|
133
|
+
* accumulates reasons per Session, so once a large corpus produced more than 32
|
|
134
|
+
* distinct codes the ENTIRE status reply was rejected as internal-error and the
|
|
135
|
+
* page reported 「尚未收到索引状态」 — losing the numbers and the diagnostics at
|
|
136
|
+
* the same time. A diagnostic field must never be able to break the read it is
|
|
137
|
+
* supposed to explain.
|
|
138
|
+
*
|
|
139
|
+
* Now each entry is clamped to the wire's 64-char alphabet and the list is
|
|
140
|
+
* truncated to the first 32 (the UI shows them as text, so the first ones are
|
|
141
|
+
* also the most relevant). Malformed entries are dropped rather than failing the
|
|
142
|
+
* parse: the payload keeps answering, just with fewer codes.
|
|
143
|
+
*/
|
|
144
|
+
const callIndexReasonListSchema = z.array(z.string()).transform(list => {
|
|
145
|
+
const out = [];
|
|
146
|
+
for (const raw of list) {
|
|
147
|
+
if (typeof raw !== 'string')
|
|
148
|
+
continue;
|
|
149
|
+
const code = raw.toLowerCase().replace(/[^a-z0-9-]/g, '-').slice(0, 64);
|
|
150
|
+
if (!/^[a-z]/.test(code) || out.includes(code))
|
|
151
|
+
continue;
|
|
152
|
+
out.push(code);
|
|
153
|
+
if (out.length >= 32)
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
return out;
|
|
157
|
+
});
|
|
158
|
+
const coverageEnum = z.enum(['complete', 'partial', 'unknown']);
|
|
159
|
+
/** Fixed metadata fields of one call row (mirrors `CallIndexRow`, never args). */
|
|
160
|
+
export const callIndexWireRowSchema = z.object({
|
|
161
|
+
sessionId: z.string().max(CALL_INDEX_MAX_ID_LENGTH),
|
|
162
|
+
callSeq: z.number().int().min(0),
|
|
163
|
+
callId: z.string().max(CALL_INDEX_MAX_ID_LENGTH),
|
|
164
|
+
toolName: z.string().max(CALL_INDEX_MAX_ID_LENGTH),
|
|
165
|
+
turn: z.number().int().optional(),
|
|
166
|
+
step: z.number().int().optional(),
|
|
167
|
+
startedAt: epochMs,
|
|
168
|
+
endedAt: epochMs.optional(),
|
|
169
|
+
resultSeq: z.number().int().optional(),
|
|
170
|
+
durationMs: z.number().min(0).optional(),
|
|
171
|
+
outcome: outcomeEnum,
|
|
172
|
+
inherited: z.boolean(),
|
|
173
|
+
sourceKind: sourceKindEnum,
|
|
174
|
+
layer: z.string().max(64),
|
|
175
|
+
});
|
|
176
|
+
const sessionRowSchema = z.object({
|
|
177
|
+
sessionId: z.string().max(CALL_INDEX_MAX_ID_LENGTH),
|
|
178
|
+
cwd: z.string().max(CALL_INDEX_MAX_CWD_LENGTH).optional(),
|
|
179
|
+
revision: z.string().max(CALL_INDEX_MAX_ID_LENGTH),
|
|
180
|
+
cut: z.number().int().min(0),
|
|
181
|
+
coverage: z.enum(['complete', 'partial']),
|
|
182
|
+
stale: z.boolean(),
|
|
183
|
+
reasons: callIndexReasonListSchema,
|
|
184
|
+
});
|
|
185
|
+
export const callIndexWireSessionSchema = sessionRowSchema;
|
|
186
|
+
/**
|
|
187
|
+
* Outcome counts. Every counter is optional and defaults to 0.
|
|
188
|
+
*
|
|
189
|
+
* This is the THIRD place the same failure mode appeared: a strict object here
|
|
190
|
+
* meant a reply missing one counter (an older Host, a partially built summary)
|
|
191
|
+
* was rejected as internal-error, so 调用明细 printed 「Host 返回了无效的响应
|
|
192
|
+
* 结构」 and lost all 710 rows that were perfectly valid.
|
|
193
|
+
*
|
|
194
|
+
* A count that was not sent is 0. Losing an entire page over one absent integer
|
|
195
|
+
* is never the right trade: the page shows far more than this breakdown.
|
|
196
|
+
*/
|
|
197
|
+
const summarySchema = z.object({
|
|
198
|
+
total: z.number().int().min(0).optional(),
|
|
199
|
+
success: z.number().int().min(0).optional(),
|
|
200
|
+
error: z.number().int().min(0).optional(),
|
|
201
|
+
cancelled: z.number().int().min(0).optional(),
|
|
202
|
+
unresolved: z.number().int().min(0).optional(),
|
|
203
|
+
unknown: z.number().int().min(0).optional(),
|
|
204
|
+
running: z.number().int().min(0).optional(),
|
|
205
|
+
inherited: z.number().int().min(0).optional(),
|
|
206
|
+
}).transform(counts => ({
|
|
207
|
+
total: counts.total ?? 0,
|
|
208
|
+
success: counts.success ?? 0,
|
|
209
|
+
error: counts.error ?? 0,
|
|
210
|
+
cancelled: counts.cancelled ?? 0,
|
|
211
|
+
unresolved: counts.unresolved ?? 0,
|
|
212
|
+
unknown: counts.unknown ?? 0,
|
|
213
|
+
running: counts.running ?? 0,
|
|
214
|
+
inherited: counts.inherited ?? 0,
|
|
215
|
+
}));
|
|
216
|
+
const pageBase = {
|
|
217
|
+
corpus: z.literal('persisted-plus-observed-live').optional(),
|
|
218
|
+
snapshotId: z.string().max(CALL_INDEX_MAX_ID_LENGTH),
|
|
219
|
+
generation: z.number().int(),
|
|
220
|
+
asOf: z.number().optional(),
|
|
221
|
+
coverage: coverageEnum,
|
|
222
|
+
totalExact: z.boolean().optional(),
|
|
223
|
+
semanticCoverage: z.object({ source: z.enum(['unknown', 'verified']), ptc: z.enum(['unknown', 'verified']), skillExecution: z.enum(['unavailable', 'verified']), denied: z.enum(['unavailable', 'verified']) }).optional(),
|
|
224
|
+
};
|
|
225
|
+
/**
|
|
226
|
+
* Overview aggregates over the whole filtered set (never the current page).
|
|
227
|
+
*
|
|
228
|
+
* `bySource` always carries every source kind, including zeros, so a caller can
|
|
229
|
+
* distinguish "known to be zero" from "not reported". `byDay` is bounded and
|
|
230
|
+
* ordered oldest-first; a request whose span exceeds
|
|
231
|
+
* {@link CALL_INDEX_MAX_DAY_BUCKETS} fails with `reply-too-large` instead of
|
|
232
|
+
* silently truncating a trend line.
|
|
233
|
+
*/
|
|
234
|
+
/**
|
|
235
|
+
* Per-source counts. All five keys are always emitted by this Host, but a reply
|
|
236
|
+
* that omits one is still readable: the missing kind is 0 and the caller renders
|
|
237
|
+
* it as "not resolved" anyway (R-009 forbids reading 0 as "unused"). Rejecting
|
|
238
|
+
* the whole overview over one absent key was never worth it.
|
|
239
|
+
*/
|
|
240
|
+
export const callIndexSourceCountsSchema = z.object({
|
|
241
|
+
mcp: z.number().int().min(0).optional(),
|
|
242
|
+
'plugin-tool': z.number().int().min(0).optional(),
|
|
243
|
+
native: z.number().int().min(0).optional(),
|
|
244
|
+
skill: z.number().int().min(0).optional(),
|
|
245
|
+
unknown: z.number().int().min(0).optional(),
|
|
246
|
+
}).transform(counts => ({
|
|
247
|
+
mcp: counts.mcp ?? 0,
|
|
248
|
+
'plugin-tool': counts['plugin-tool'] ?? 0,
|
|
249
|
+
native: counts.native ?? 0,
|
|
250
|
+
skill: counts.skill ?? 0,
|
|
251
|
+
unknown: counts.unknown ?? 0,
|
|
252
|
+
}));
|
|
253
|
+
/**
|
|
254
|
+
* One day of the trend, salvaged rather than rejected.
|
|
255
|
+
*
|
|
256
|
+
* A strict object here had the same failure mode the status reply had: a bucket
|
|
257
|
+
* missing ONE counter (an older Host, a partially built aggregate) made the whole
|
|
258
|
+
* getSummary answer fail, so 总览 printed 「Host 返回了无效的响应结构」 and lost
|
|
259
|
+
* every number — including the ones that were perfectly valid.
|
|
260
|
+
*
|
|
261
|
+
* A day bucket is a display row. A missing counter is a 0, not a reason to throw
|
|
262
|
+
* away the entire overview. Only the day label stays mandatory, because a bucket
|
|
263
|
+
* without a usable date cannot be placed on the axis at all.
|
|
264
|
+
*/
|
|
265
|
+
const dayBucketSchema = z.object({
|
|
266
|
+
/** `YYYY-MM-DD` in the caller's local day boundary. */
|
|
267
|
+
day: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
|
|
268
|
+
calls: z.number().int().min(0).optional(),
|
|
269
|
+
success: z.number().int().min(0).optional(),
|
|
270
|
+
error: z.number().int().min(0).optional(),
|
|
271
|
+
cancelled: z.number().int().min(0).optional(),
|
|
272
|
+
unresolved: z.number().int().min(0).optional(),
|
|
273
|
+
unknown: z.number().int().min(0).optional(),
|
|
274
|
+
running: z.number().int().min(0).optional(),
|
|
275
|
+
}).transform(bucket => ({
|
|
276
|
+
day: bucket.day,
|
|
277
|
+
calls: bucket.calls ?? 0,
|
|
278
|
+
success: bucket.success ?? 0,
|
|
279
|
+
error: bucket.error ?? 0,
|
|
280
|
+
cancelled: bucket.cancelled ?? 0,
|
|
281
|
+
unresolved: bucket.unresolved ?? 0,
|
|
282
|
+
unknown: bucket.unknown ?? 0,
|
|
283
|
+
running: bucket.running ?? 0,
|
|
284
|
+
}));
|
|
285
|
+
export const callIndexAggregatesSchema = z.object({
|
|
286
|
+
/** Distinct `toolName` values in the filtered set (rows, not calls). */
|
|
287
|
+
distinctTools: z.number().int().min(0),
|
|
288
|
+
bySource: callIndexSourceCountsSchema,
|
|
289
|
+
/** Oldest-first local-day buckets; omitted when the filtered set is empty. */
|
|
290
|
+
byDay: z.array(dayBucketSchema).max(CALL_INDEX_MAX_DAY_BUCKETS).optional(),
|
|
291
|
+
/** Day boundary actually used, echoed so the UI cannot mislabel a UTC day. */
|
|
292
|
+
dayOffsetMinutes: z.number().int().min(CALL_INDEX_MIN_DAY_OFFSET_MINUTES).max(CALL_INDEX_MAX_DAY_OFFSET_MINUTES),
|
|
293
|
+
});
|
|
294
|
+
const summaryDataSchema = z.object({
|
|
295
|
+
...pageBase,
|
|
296
|
+
hasUpdates: z.boolean().optional(),
|
|
297
|
+
summary: summarySchema,
|
|
298
|
+
total: z.number().int().min(0).optional(),
|
|
299
|
+
aggregates: callIndexAggregatesSchema.optional(),
|
|
300
|
+
});
|
|
301
|
+
const sessionsDataSchema = z.object({
|
|
302
|
+
...pageBase,
|
|
303
|
+
summary: summarySchema,
|
|
304
|
+
total: z.number().int().min(0).optional(),
|
|
305
|
+
items: z.array(sessionRowSchema).optional(),
|
|
306
|
+
nextCursor: z.string().optional(),
|
|
307
|
+
hasUpdates: z.boolean().optional(),
|
|
308
|
+
});
|
|
309
|
+
const callsDataSchema = z.object({
|
|
310
|
+
...pageBase,
|
|
311
|
+
summary: summarySchema,
|
|
312
|
+
total: z.number().int().min(0).optional(),
|
|
313
|
+
items: z.array(callIndexWireRowSchema).optional(),
|
|
314
|
+
nextCursor: z.string().optional(),
|
|
315
|
+
hasUpdates: z.boolean().optional(),
|
|
316
|
+
});
|
|
317
|
+
const detailDataSchema = z.object({
|
|
318
|
+
...pageBase,
|
|
319
|
+
detail: callIndexWireRowSchema,
|
|
320
|
+
});
|
|
321
|
+
const scopeSchema = z.object({
|
|
322
|
+
status: z.enum(['disabled', 'unavailable', 'ready']),
|
|
323
|
+
mode: z.enum(['disabled', 'host-visible']),
|
|
324
|
+
scope: z.literal('host-visible').optional(),
|
|
325
|
+
includesOtherProfiles: z.literal(true).optional(),
|
|
326
|
+
epoch: z.number().int().optional(),
|
|
327
|
+
reason: z.enum(['not-enabled', 'unsupported-scope', 'persistence-unavailable']).optional(),
|
|
328
|
+
});
|
|
329
|
+
const semanticCoverageSchema = z.object({
|
|
330
|
+
source: z.string(),
|
|
331
|
+
ptc: z.string(),
|
|
332
|
+
skillExecution: z.string(),
|
|
333
|
+
denied: z.string(),
|
|
334
|
+
});
|
|
335
|
+
/** Same tolerance as `summarySchema`: an absent counter is 0, not a fatal error. */
|
|
336
|
+
const totalsSchema = z.object({
|
|
337
|
+
calls: z.number().int().min(0).optional(),
|
|
338
|
+
succeeded: z.number().int().min(0).optional(),
|
|
339
|
+
failed: z.number().int().min(0).optional(),
|
|
340
|
+
unresolved: z.number().int().min(0).optional(),
|
|
341
|
+
unknown: z.number().int().min(0).optional(),
|
|
342
|
+
cancelled: z.number().int().min(0).optional(),
|
|
343
|
+
running: z.number().int().min(0).optional(),
|
|
344
|
+
inherited: z.number().int().min(0).optional(),
|
|
345
|
+
}).transform(counts => ({
|
|
346
|
+
calls: counts.calls ?? 0,
|
|
347
|
+
succeeded: counts.succeeded ?? 0,
|
|
348
|
+
failed: counts.failed ?? 0,
|
|
349
|
+
unresolved: counts.unresolved ?? 0,
|
|
350
|
+
unknown: counts.unknown ?? 0,
|
|
351
|
+
cancelled: counts.cancelled ?? 0,
|
|
352
|
+
running: counts.running ?? 0,
|
|
353
|
+
inherited: counts.inherited ?? 0,
|
|
354
|
+
}));
|
|
355
|
+
const taskDataSchema = z.object({
|
|
356
|
+
taskId: z.string().max(CALL_INDEX_MAX_ID_LENGTH),
|
|
357
|
+
mode: z.enum(['full', 'incremental']),
|
|
358
|
+
phase: z.enum(['running', 'complete', 'partial', 'cancelled', 'failed']),
|
|
359
|
+
startedAt: z.number(),
|
|
360
|
+
finishedAt: z.number().optional(),
|
|
361
|
+
cancelRequested: z.boolean(),
|
|
362
|
+
});
|
|
363
|
+
const statusDataSchema = z.object({
|
|
364
|
+
corpus: z.literal('persisted-plus-observed-live').optional(),
|
|
365
|
+
scope: scopeSchema,
|
|
366
|
+
generation: z.number().int(),
|
|
367
|
+
censusGeneration: z.number().int(),
|
|
368
|
+
asOf: z.number().optional(),
|
|
369
|
+
/**
|
|
370
|
+
* Scan lifecycle. `idle` means "no scan has ever run in this generation";
|
|
371
|
+
* `complete` means "a scan finished and the index is current".
|
|
372
|
+
*
|
|
373
|
+
* They used to be one value, which made "never scanned" and "scan finished
|
|
374
|
+
* with nothing to show" indistinguishable — the page reported "已列出 0 个
|
|
375
|
+
* Session" in both cases and read as "your corpus is empty".
|
|
376
|
+
*/
|
|
377
|
+
// `partial` is a REAL terminal state of a scan (some Sessions read, some
|
|
378
|
+
// skipped). It was missing from this allowlist while session-index.ts emitted
|
|
379
|
+
// it, so every partially-complete scan rejected the entire status reply and
|
|
380
|
+
// the page fell back to 「尚未收到索引状态」 — the whole panel went dead
|
|
381
|
+
// because one enum value was not listed.
|
|
382
|
+
phase: z.enum(['idle', 'running', 'complete', 'partial', 'cancelled', 'failed']),
|
|
383
|
+
coverage: coverageEnum,
|
|
384
|
+
eventCoverage: coverageEnum,
|
|
385
|
+
enumerationCoverage: coverageEnum,
|
|
386
|
+
semanticCoverage: semanticCoverageSchema,
|
|
387
|
+
listedSessions: z.number().int().min(0),
|
|
388
|
+
/**
|
|
389
|
+
* Scan diagnostic: events the backend DECLARED vs events actually read.
|
|
390
|
+
*
|
|
391
|
+
* Both are aggregate integers — no ids, no content. They exist so an operator
|
|
392
|
+
* can tell "the corpus is empty" from "the backend under-reports its event
|
|
393
|
+
* count and the scan is starving" without reading Host logs.
|
|
394
|
+
*/
|
|
395
|
+
declaredEvents: z.number().int().min(0).optional(),
|
|
396
|
+
readEvents: z.number().int().min(0).optional(),
|
|
397
|
+
visibleSessions: z.number().int().min(0),
|
|
398
|
+
completedSessions: z.number().int().min(0),
|
|
399
|
+
pendingSessions: z.number().int().min(0),
|
|
400
|
+
failedSessions: z.number().int().min(0),
|
|
401
|
+
pendingLive: z.number().int().min(0),
|
|
402
|
+
estimatedBytes: z.number().int().min(0),
|
|
403
|
+
reasons: callIndexReasonListSchema,
|
|
404
|
+
totals: totalsSchema,
|
|
405
|
+
task: taskDataSchema.optional(),
|
|
406
|
+
features: z.object({ history: z.boolean().optional(), rawPayloads: z.literal(false).optional(), ptc: z.boolean().optional(), skillExecution: z.boolean().optional(), denied: z.boolean().optional() }).optional(),
|
|
407
|
+
});
|
|
408
|
+
function isRecord(value) {
|
|
409
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
410
|
+
}
|
|
411
|
+
const KIND_SET = new Set(CALL_INDEX_REPLY_KINDS);
|
|
412
|
+
/**
|
|
413
|
+
* Project an arbitrary reply value through the fixed allowlist. Never throws:
|
|
414
|
+
* a structurally invalid payload answers `internal-error`, and extra keys
|
|
415
|
+
* (backend, token, args, content, error.stack) are stripped by the zod schemas.
|
|
416
|
+
*/
|
|
417
|
+
function projectReply(value) {
|
|
418
|
+
if (!isRecord(value))
|
|
419
|
+
return callIndexError('internal-error');
|
|
420
|
+
const { schemaVersion, ok, kind } = value;
|
|
421
|
+
if (schemaVersion !== 1 || typeof ok !== 'boolean' || typeof kind !== 'string' || !KIND_SET.has(kind)) {
|
|
422
|
+
return callIndexError('internal-error');
|
|
423
|
+
}
|
|
424
|
+
if (!ok) {
|
|
425
|
+
if (kind !== 'error')
|
|
426
|
+
return callIndexError('internal-error');
|
|
427
|
+
return callIndexError(typeof value.reason === 'string' ? value.reason : 'internal-error');
|
|
428
|
+
}
|
|
429
|
+
const project = (schema) => {
|
|
430
|
+
const result = schema.safeParse(value.data);
|
|
431
|
+
return result.success ? result.data : undefined;
|
|
432
|
+
};
|
|
433
|
+
switch (kind) {
|
|
434
|
+
case 'status': {
|
|
435
|
+
const data = project(statusDataSchema);
|
|
436
|
+
if (data === undefined)
|
|
437
|
+
return callIndexError('internal-error');
|
|
438
|
+
const scope = { ...data.scope };
|
|
439
|
+
if (scope.status !== 'ready') {
|
|
440
|
+
delete scope.includesOtherProfiles;
|
|
441
|
+
delete scope.scope;
|
|
442
|
+
delete scope.epoch;
|
|
443
|
+
}
|
|
444
|
+
return { schemaVersion: 1, ok: true, kind: 'status', data: { ...data, scope } };
|
|
445
|
+
}
|
|
446
|
+
case 'task': {
|
|
447
|
+
const data = project(taskDataSchema);
|
|
448
|
+
if (data === undefined)
|
|
449
|
+
return callIndexError('internal-error');
|
|
450
|
+
return { schemaVersion: 1, ok: true, kind: 'task', data: data };
|
|
451
|
+
}
|
|
452
|
+
case 'summary': {
|
|
453
|
+
const data = project(summaryDataSchema);
|
|
454
|
+
if (data === undefined)
|
|
455
|
+
return callIndexError('internal-error');
|
|
456
|
+
return { schemaVersion: 1, ok: true, kind: 'summary', data: data };
|
|
457
|
+
}
|
|
458
|
+
case 'sessions': {
|
|
459
|
+
const data = project(sessionsDataSchema);
|
|
460
|
+
if (data === undefined)
|
|
461
|
+
return callIndexError('internal-error');
|
|
462
|
+
return { schemaVersion: 1, ok: true, kind: 'sessions', data: data };
|
|
463
|
+
}
|
|
464
|
+
case 'calls': {
|
|
465
|
+
const data = project(callsDataSchema);
|
|
466
|
+
if (data === undefined)
|
|
467
|
+
return callIndexError('internal-error');
|
|
468
|
+
return { schemaVersion: 1, ok: true, kind: 'calls', data: data };
|
|
469
|
+
}
|
|
470
|
+
case 'detail': {
|
|
471
|
+
const data = project(detailDataSchema);
|
|
472
|
+
if (data === undefined)
|
|
473
|
+
return callIndexError('internal-error');
|
|
474
|
+
return { schemaVersion: 1, ok: true, kind: 'detail', data: data };
|
|
475
|
+
}
|
|
476
|
+
default:
|
|
477
|
+
return callIndexError('internal-error');
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
/** Public, non-throwing projector used by the Host gateway and the client codec. */
|
|
481
|
+
export function callIndexReply(value) {
|
|
482
|
+
return projectReply(value);
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Zod codec for replies. `.parse` always succeeds and returns the projected
|
|
486
|
+
* reply, so a malformed Host payload degrades to `internal-error` instead of a
|
|
487
|
+
* transport failure.
|
|
488
|
+
*/
|
|
489
|
+
export const callIndexReplySchema = z.any().transform((value) => callIndexReply(value));
|
|
490
|
+
//# sourceMappingURL=call-index-wire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-index-wire.js","sourceRoot":"","sources":["../../src/usage/call-index-wire.ts"],"names":[],"mappings":"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"}
|