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.
Files changed (73) hide show
  1. package/README.md +80 -80
  2. package/cordis.patch.yml +5 -0
  3. package/lib/client.d.ts +20 -2
  4. package/lib/client.d.ts.map +1 -1
  5. package/lib/client.js +6724 -7923
  6. package/lib/guard-core.js +72 -1
  7. package/lib/guard-core.js.map +1 -1
  8. package/lib/guard-loop-core.js +36 -5
  9. package/lib/guard-loop-core.js.map +1 -1
  10. package/lib/guard.js +20 -4
  11. package/lib/guard.js.map +1 -1
  12. package/lib/host-face.js +1 -0
  13. package/lib/host-face.js.map +1 -1
  14. package/lib/index.js +11 -1
  15. package/lib/index.js.map +1 -1
  16. package/lib/policy-state.js +29 -1
  17. package/lib/policy-state.js.map +1 -1
  18. package/lib/policy.js +24 -2
  19. package/lib/policy.js.map +1 -1
  20. package/lib/server/call-index-remote.js +110 -0
  21. package/lib/server/call-index-remote.js.map +1 -0
  22. package/lib/server/remote.js +13 -0
  23. package/lib/server/remote.js.map +1 -1
  24. package/lib/types/guard-core.d.ts +69 -1
  25. package/lib/types/guard-core.d.ts.map +1 -1
  26. package/lib/types/guard-loop-core.d.ts +15 -0
  27. package/lib/types/guard-loop-core.d.ts.map +1 -1
  28. package/lib/types/guard.d.ts +7 -1
  29. package/lib/types/guard.d.ts.map +1 -1
  30. package/lib/types/host-face.d.ts.map +1 -1
  31. package/lib/types/index.d.ts +5 -0
  32. package/lib/types/index.d.ts.map +1 -1
  33. package/lib/types/policy-state.d.ts +6 -0
  34. package/lib/types/policy-state.d.ts.map +1 -1
  35. package/lib/types/policy.d.ts +22 -3
  36. package/lib/types/policy.d.ts.map +1 -1
  37. package/lib/types/server/call-index-remote.d.ts +17 -0
  38. package/lib/types/server/call-index-remote.d.ts.map +1 -0
  39. package/lib/types/server/remote.d.ts +9 -0
  40. package/lib/types/server/remote.d.ts.map +1 -1
  41. package/lib/types/usage/call-index-core.d.ts +152 -0
  42. package/lib/types/usage/call-index-core.d.ts.map +1 -0
  43. package/lib/types/usage/call-index-host-face.d.ts +44 -0
  44. package/lib/types/usage/call-index-host-face.d.ts.map +1 -0
  45. package/lib/types/usage/call-index-host.d.ts +7 -0
  46. package/lib/types/usage/call-index-host.d.ts.map +1 -0
  47. package/lib/types/usage/call-index-query.d.ts +97 -0
  48. package/lib/types/usage/call-index-query.d.ts.map +1 -0
  49. package/lib/types/usage/call-index-runtime.d.ts +46 -0
  50. package/lib/types/usage/call-index-runtime.d.ts.map +1 -0
  51. package/lib/types/usage/call-index-scope.d.ts +59 -0
  52. package/lib/types/usage/call-index-scope.d.ts.map +1 -0
  53. package/lib/types/usage/call-index-wire.d.ts +286 -0
  54. package/lib/types/usage/call-index-wire.d.ts.map +1 -0
  55. package/lib/types/usage/session-index.d.ts +149 -0
  56. package/lib/types/usage/session-index.d.ts.map +1 -0
  57. package/lib/usage/call-index-core.js +761 -0
  58. package/lib/usage/call-index-core.js.map +1 -0
  59. package/lib/usage/call-index-host-face.js +77 -0
  60. package/lib/usage/call-index-host-face.js.map +1 -0
  61. package/lib/usage/call-index-host.js +13 -0
  62. package/lib/usage/call-index-host.js.map +1 -0
  63. package/lib/usage/call-index-query.js +669 -0
  64. package/lib/usage/call-index-query.js.map +1 -0
  65. package/lib/usage/call-index-runtime.js +376 -0
  66. package/lib/usage/call-index-runtime.js.map +1 -0
  67. package/lib/usage/call-index-scope.js +79 -0
  68. package/lib/usage/call-index-scope.js.map +1 -0
  69. package/lib/usage/call-index-wire.js +490 -0
  70. package/lib/usage/call-index-wire.js.map +1 -0
  71. package/lib/usage/session-index.js +600 -0
  72. package/lib/usage/session-index.js.map +1 -0
  73. 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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"}