@nifrajs/agent-app 3.2.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 +70 -0
- package/dist/client.d.ts +150 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +340 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/transport.d.ts +61 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +145 -0
- package/dist/transport.js.map +1 -0
- package/dist/view-models.d.ts +283 -0
- package/dist/view-models.d.ts.map +1 -0
- package/dist/view-models.js +579 -0
- package/dist/view-models.js.map +1 -0
- package/package.json +49 -0
- package/src/client.ts +465 -0
- package/src/index.ts +74 -0
- package/src/transport.ts +179 -0
- package/src/view-models.ts +919 -0
|
@@ -0,0 +1,579 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Presentation-safe projections of the agent protocol.
|
|
3
|
+
*
|
|
4
|
+
* A backend event or session snapshot carries prompt text, tool inputs and outputs, model
|
|
5
|
+
* completions, diagnostic reports, and filesystem paths. None of that may reach browser-facing code.
|
|
6
|
+
* These view models expose only stable identifiers, lifecycle statuses, counters, and opaque
|
|
7
|
+
* references - never the content itself. A prompt becomes a character count; a tool result becomes an
|
|
8
|
+
* `ok` flag and an error *code*; a compaction becomes before/after token counts. The projection is the
|
|
9
|
+
* boundary: an upstream consumer sees enough to render progress and resolve interactions, and nothing
|
|
10
|
+
* it could use to reconstruct a payload.
|
|
11
|
+
*/
|
|
12
|
+
import { nextApprovalState, nextHandoffState, } from "@nifrajs/agent-protocol";
|
|
13
|
+
export function toSessionView(snapshot) {
|
|
14
|
+
return Object.freeze({
|
|
15
|
+
id: snapshot.id,
|
|
16
|
+
backend: snapshot.backend,
|
|
17
|
+
status: snapshot.status,
|
|
18
|
+
createdAt: snapshot.createdAt,
|
|
19
|
+
updatedAt: snapshot.updatedAt,
|
|
20
|
+
lastSeq: snapshot.lastSeq,
|
|
21
|
+
...(snapshot.activeTurnId === undefined ? {} : { activeTurnId: snapshot.activeTurnId }),
|
|
22
|
+
...(snapshot.extensionRevision === undefined
|
|
23
|
+
? {}
|
|
24
|
+
: { extensionRevision: snapshot.extensionRevision }),
|
|
25
|
+
capabilities: [...snapshot.capabilities],
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/** Project one protocol event to its content-free view. Total over the event union - never returns undefined. */
|
|
29
|
+
export function toEventView(event) {
|
|
30
|
+
const base = { seq: event.seq, at: event.at };
|
|
31
|
+
switch (event.type) {
|
|
32
|
+
case "session.started":
|
|
33
|
+
case "session.updated":
|
|
34
|
+
case "session.completed":
|
|
35
|
+
return Object.freeze({ ...base, kind: event.type, session: toSessionView(event.snapshot) });
|
|
36
|
+
case "turn.started":
|
|
37
|
+
return Object.freeze({ ...base, kind: event.type, turnId: event.turnId });
|
|
38
|
+
case "assistant.delta":
|
|
39
|
+
case "assistant.message":
|
|
40
|
+
return Object.freeze({
|
|
41
|
+
...base,
|
|
42
|
+
kind: event.type,
|
|
43
|
+
turnId: event.turnId,
|
|
44
|
+
chars: event.text.length,
|
|
45
|
+
});
|
|
46
|
+
case "tool.started":
|
|
47
|
+
return Object.freeze({
|
|
48
|
+
...base,
|
|
49
|
+
kind: event.type,
|
|
50
|
+
turnId: event.turnId,
|
|
51
|
+
callId: event.callId,
|
|
52
|
+
name: event.name,
|
|
53
|
+
hasInput: event.input !== undefined,
|
|
54
|
+
});
|
|
55
|
+
case "tool.delta":
|
|
56
|
+
return Object.freeze({
|
|
57
|
+
...base,
|
|
58
|
+
kind: event.type,
|
|
59
|
+
turnId: event.turnId,
|
|
60
|
+
callId: event.callId,
|
|
61
|
+
chars: event.text.length,
|
|
62
|
+
});
|
|
63
|
+
case "tool.completed":
|
|
64
|
+
return Object.freeze({
|
|
65
|
+
...base,
|
|
66
|
+
kind: event.type,
|
|
67
|
+
turnId: event.turnId,
|
|
68
|
+
callId: event.callId,
|
|
69
|
+
name: event.name,
|
|
70
|
+
ok: event.ok,
|
|
71
|
+
...(event.error === undefined ? {} : { errorCode: event.error.code }),
|
|
72
|
+
});
|
|
73
|
+
case "approval.required":
|
|
74
|
+
return Object.freeze({
|
|
75
|
+
...base,
|
|
76
|
+
kind: event.type,
|
|
77
|
+
turnId: event.turnId,
|
|
78
|
+
approvalId: event.approvalId,
|
|
79
|
+
action: event.action,
|
|
80
|
+
capability: event.capability,
|
|
81
|
+
});
|
|
82
|
+
case "approval.resolved":
|
|
83
|
+
return Object.freeze({
|
|
84
|
+
...base,
|
|
85
|
+
kind: event.type,
|
|
86
|
+
approvalId: event.approvalId,
|
|
87
|
+
approved: event.approved,
|
|
88
|
+
...(event.turnId === undefined ? {} : { turnId: event.turnId }),
|
|
89
|
+
});
|
|
90
|
+
case "repair.required":
|
|
91
|
+
return Object.freeze({
|
|
92
|
+
...base,
|
|
93
|
+
kind: event.type,
|
|
94
|
+
taskId: event.task.id,
|
|
95
|
+
verification: event.task.verification,
|
|
96
|
+
capabilities: [...event.task.capabilities],
|
|
97
|
+
...(event.turnId === undefined ? {} : { turnId: event.turnId }),
|
|
98
|
+
});
|
|
99
|
+
case "verification.completed":
|
|
100
|
+
return Object.freeze({ ...base, kind: event.type, name: event.name, ok: event.ok });
|
|
101
|
+
case "memory.compacted":
|
|
102
|
+
return Object.freeze({
|
|
103
|
+
...base,
|
|
104
|
+
kind: event.type,
|
|
105
|
+
before: event.before,
|
|
106
|
+
after: event.after,
|
|
107
|
+
reason: event.reason,
|
|
108
|
+
});
|
|
109
|
+
case "extension.reloaded":
|
|
110
|
+
return Object.freeze({
|
|
111
|
+
...base,
|
|
112
|
+
kind: event.type,
|
|
113
|
+
revision: event.revision,
|
|
114
|
+
loadedCount: event.loaded.length,
|
|
115
|
+
disabledCount: event.disabled.length,
|
|
116
|
+
rolledBack: event.rolledBack,
|
|
117
|
+
});
|
|
118
|
+
case "session.failed":
|
|
119
|
+
return Object.freeze({
|
|
120
|
+
...base,
|
|
121
|
+
kind: event.type,
|
|
122
|
+
errorCode: event.error.code,
|
|
123
|
+
recoverable: event.recoverable,
|
|
124
|
+
});
|
|
125
|
+
case "session.stopped":
|
|
126
|
+
return Object.freeze({ ...base, kind: event.type });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
export function toRunView(snapshot) {
|
|
130
|
+
return Object.freeze({
|
|
131
|
+
runId: snapshot.runId,
|
|
132
|
+
planId: snapshot.plan.id,
|
|
133
|
+
planDigest: snapshot.plan.digest,
|
|
134
|
+
nodeCount: snapshot.plan.nodeCount,
|
|
135
|
+
state: snapshot.state,
|
|
136
|
+
cursor: snapshot.cursor,
|
|
137
|
+
total: snapshot.counters.total,
|
|
138
|
+
completed: snapshot.counters.completed,
|
|
139
|
+
failed: snapshot.counters.failed,
|
|
140
|
+
updatedAt: snapshot.updatedAt,
|
|
141
|
+
...(snapshot.failureCode === undefined ? {} : { failureCode: snapshot.failureCode }),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
export function toHandoffView(snapshot) {
|
|
145
|
+
return Object.freeze({
|
|
146
|
+
runId: snapshot.runId,
|
|
147
|
+
nodeId: snapshot.nodeId,
|
|
148
|
+
seq: snapshot.seq,
|
|
149
|
+
from: snapshot.from,
|
|
150
|
+
to: snapshot.to,
|
|
151
|
+
status: snapshot.status,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
const REGISTRY_KINDS = new Set([
|
|
155
|
+
"tool",
|
|
156
|
+
"mcp-tool",
|
|
157
|
+
"extension",
|
|
158
|
+
"model-adapter",
|
|
159
|
+
"deployment-adapter",
|
|
160
|
+
]);
|
|
161
|
+
const REGISTRY_RETRY = new Set(["none", "idempotent"]);
|
|
162
|
+
const REGISTRY_IDEMPOTENCY = new Set(["none", "request", "durable"]);
|
|
163
|
+
const REGISTRY_ISOLATION = new Set(["inherit", "process", "sandbox"]);
|
|
164
|
+
const HEX64 = /^[0-9a-f]{64}$/;
|
|
165
|
+
function isRecordValue(value) {
|
|
166
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
167
|
+
}
|
|
168
|
+
function readApproval(value) {
|
|
169
|
+
if (!isRecordValue(value))
|
|
170
|
+
return undefined;
|
|
171
|
+
const kind = value.kind;
|
|
172
|
+
if (kind === "none" || kind === "required")
|
|
173
|
+
return { approval: kind };
|
|
174
|
+
if (kind === "threshold" && typeof value.level === "number" && Number.isSafeInteger(value.level))
|
|
175
|
+
return { approval: "threshold", level: value.level };
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Project one raw registry descriptor to a content-free {@link RegistryCapabilityView}, or `undefined`
|
|
180
|
+
* when a required identifier is missing or malformed. Only whitelisted structural fields are read, so
|
|
181
|
+
* an unexpected content field on the record can never reach the returned view.
|
|
182
|
+
*/
|
|
183
|
+
export function toRegistryCapabilityView(value) {
|
|
184
|
+
if (!isRecordValue(value))
|
|
185
|
+
return undefined;
|
|
186
|
+
const { kind, name, version, schemaDigest, requiredCapabilities, retry, idempotency, isolation } = value;
|
|
187
|
+
if (typeof kind !== "string" ||
|
|
188
|
+
!REGISTRY_KINDS.has(kind) ||
|
|
189
|
+
typeof name !== "string" ||
|
|
190
|
+
name.length === 0 ||
|
|
191
|
+
typeof version !== "string" ||
|
|
192
|
+
version.length === 0 ||
|
|
193
|
+
typeof schemaDigest !== "string" ||
|
|
194
|
+
!HEX64.test(schemaDigest) ||
|
|
195
|
+
!Array.isArray(requiredCapabilities) ||
|
|
196
|
+
!requiredCapabilities.every((entry) => typeof entry === "string") ||
|
|
197
|
+
typeof retry !== "string" ||
|
|
198
|
+
!REGISTRY_RETRY.has(retry) ||
|
|
199
|
+
typeof idempotency !== "string" ||
|
|
200
|
+
!REGISTRY_IDEMPOTENCY.has(idempotency) ||
|
|
201
|
+
typeof isolation !== "string" ||
|
|
202
|
+
!REGISTRY_ISOLATION.has(isolation))
|
|
203
|
+
return undefined;
|
|
204
|
+
const approval = readApproval(value.approval);
|
|
205
|
+
if (approval === undefined)
|
|
206
|
+
return undefined;
|
|
207
|
+
return Object.freeze({
|
|
208
|
+
kind: kind,
|
|
209
|
+
name,
|
|
210
|
+
version,
|
|
211
|
+
schemaDigest,
|
|
212
|
+
requiredCapabilities: Object.freeze([...requiredCapabilities]),
|
|
213
|
+
approval: approval.approval,
|
|
214
|
+
...(approval.level === undefined ? {} : { approvalLevel: approval.level }),
|
|
215
|
+
retry: retry,
|
|
216
|
+
idempotency: idempotency,
|
|
217
|
+
isolation: isolation,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
const APPROVAL_STATES = new Set([
|
|
221
|
+
"pending",
|
|
222
|
+
"approved",
|
|
223
|
+
"denied",
|
|
224
|
+
"expired",
|
|
225
|
+
"cancelled",
|
|
226
|
+
]);
|
|
227
|
+
const HANDOFF_STATES = new Set([
|
|
228
|
+
"pending",
|
|
229
|
+
"assigned",
|
|
230
|
+
"accepted",
|
|
231
|
+
"declined",
|
|
232
|
+
"resolved",
|
|
233
|
+
"expired",
|
|
234
|
+
"cancelled",
|
|
235
|
+
]);
|
|
236
|
+
/** UI verbs per boundary kind, in display order. `cancel` is shared; a numeric level never appears. */
|
|
237
|
+
const APPROVAL_UI_OPS = ["approve", "deny", "cancel"];
|
|
238
|
+
const HANDOFF_UI_OPS = ["assign", "resolve", "cancel"];
|
|
239
|
+
/** True once `now` reaches or passes the boundary's expiry. A stale boundary fails every command closed. */
|
|
240
|
+
export function boundaryIsStale(item, now) {
|
|
241
|
+
return now >= item.expiresAt;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* The boundary commands a UI may currently offer for one item. A command appears only when the host
|
|
245
|
+
* has negotiated the `inbox` feature, the boundary has not expired, and the op is a legal transition
|
|
246
|
+
* from the boundary's live state. An unknown or terminal state yields no commands, so a stale,
|
|
247
|
+
* unsupported, or already-settled boundary can never present an actionable control.
|
|
248
|
+
*/
|
|
249
|
+
export function boundaryCommands(item, options) {
|
|
250
|
+
if (!options.inbox || boundaryIsStale(item, options.now))
|
|
251
|
+
return [];
|
|
252
|
+
if (item.kind === "approval") {
|
|
253
|
+
if (!APPROVAL_STATES.has(item.state))
|
|
254
|
+
return [];
|
|
255
|
+
const state = item.state;
|
|
256
|
+
return Object.freeze(APPROVAL_UI_OPS.filter((op) => nextApprovalState(state, op) !== undefined));
|
|
257
|
+
}
|
|
258
|
+
if (!HANDOFF_STATES.has(item.state))
|
|
259
|
+
return [];
|
|
260
|
+
const state = item.state;
|
|
261
|
+
return Object.freeze(HANDOFF_UI_OPS.filter((op) => nextHandoffState(state, op) !== undefined));
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Orders events by their sequence number and suppresses duplicates before they reach the UI.
|
|
265
|
+
*
|
|
266
|
+
* A live SSE stream can redeliver an event after a reconnect, or hand two frames to a consumer out of
|
|
267
|
+
* order. {@link offer} returns only the events that are newly deliverable, in sequence order. Events
|
|
268
|
+
* whose seq was already delivered, or is already buffered, are dropped as duplicates. A bounded
|
|
269
|
+
* `maxPending` guards against an unbounded hole: once more than `maxPending` out-of-order events are
|
|
270
|
+
* held waiting for a missing seq, the buffer skips the gap to the lowest pending seq and records the
|
|
271
|
+
* skipped count on {@link dropped}, so a permanently lost event cannot stall the view forever.
|
|
272
|
+
*/
|
|
273
|
+
export class OrderedEventBuffer {
|
|
274
|
+
next;
|
|
275
|
+
pending = new Map();
|
|
276
|
+
maxPending;
|
|
277
|
+
droppedCount = 0;
|
|
278
|
+
/**
|
|
279
|
+
* @param options.from Last already-delivered seq; the next expected event is `from + 1`. Omit for a
|
|
280
|
+
* fresh buffer that adopts the first offered event's seq as its starting point.
|
|
281
|
+
* @param options.maxPending Out-of-order events held before the buffer skips a gap. Default 256.
|
|
282
|
+
*/
|
|
283
|
+
constructor(options) {
|
|
284
|
+
if (options?.from !== undefined) {
|
|
285
|
+
if (!Number.isSafeInteger(options.from))
|
|
286
|
+
throw new TypeError("OrderedEventBuffer: from must be a safe integer");
|
|
287
|
+
this.next = options.from + 1;
|
|
288
|
+
}
|
|
289
|
+
this.maxPending = options?.maxPending ?? 256;
|
|
290
|
+
if (!Number.isSafeInteger(this.maxPending) || this.maxPending < 1)
|
|
291
|
+
throw new TypeError("OrderedEventBuffer: maxPending must be a positive integer");
|
|
292
|
+
}
|
|
293
|
+
/** Count of events skipped to recover from an unfilled gap. */
|
|
294
|
+
get dropped() {
|
|
295
|
+
return this.droppedCount;
|
|
296
|
+
}
|
|
297
|
+
/** Seq the buffer will emit next, or `undefined` before the first event is seen. */
|
|
298
|
+
get expected() {
|
|
299
|
+
return this.next;
|
|
300
|
+
}
|
|
301
|
+
offer(view) {
|
|
302
|
+
if (this.next === undefined)
|
|
303
|
+
this.next = view.seq;
|
|
304
|
+
if (view.seq < this.next)
|
|
305
|
+
return []; // already delivered
|
|
306
|
+
if (this.pending.has(view.seq))
|
|
307
|
+
return []; // duplicate still waiting
|
|
308
|
+
this.pending.set(view.seq, view);
|
|
309
|
+
return this.drain();
|
|
310
|
+
}
|
|
311
|
+
drain() {
|
|
312
|
+
const out = [];
|
|
313
|
+
const emitContiguous = () => {
|
|
314
|
+
for (let held = this.pending.get(this.next); held !== undefined;) {
|
|
315
|
+
out.push(held);
|
|
316
|
+
this.pending.delete(this.next);
|
|
317
|
+
this.next = this.next + 1;
|
|
318
|
+
held = this.pending.get(this.next);
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
emitContiguous();
|
|
322
|
+
if (this.pending.size > this.maxPending) {
|
|
323
|
+
const lowest = Math.min(...this.pending.keys());
|
|
324
|
+
this.droppedCount += lowest - this.next;
|
|
325
|
+
this.next = lowest;
|
|
326
|
+
emitContiguous();
|
|
327
|
+
}
|
|
328
|
+
return out;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
const STUDIO_TOKEN = /^[-A-Za-z0-9._:/]{1,128}$/;
|
|
332
|
+
const STUDIO_DIGEST = /^[0-9a-f]{64}$/;
|
|
333
|
+
const STUDIO_STATES = new Set([
|
|
334
|
+
"pending",
|
|
335
|
+
"running",
|
|
336
|
+
"paused",
|
|
337
|
+
"succeeded",
|
|
338
|
+
"failed",
|
|
339
|
+
"cancelled",
|
|
340
|
+
"recovered",
|
|
341
|
+
]);
|
|
342
|
+
const STUDIO_STATUSES = new Set([
|
|
343
|
+
"started",
|
|
344
|
+
"checkpointed",
|
|
345
|
+
"retrying",
|
|
346
|
+
"recovered",
|
|
347
|
+
"completed",
|
|
348
|
+
"failed",
|
|
349
|
+
"cancelled",
|
|
350
|
+
"dead-lettered",
|
|
351
|
+
]);
|
|
352
|
+
const STUDIO_CODES = new Set([
|
|
353
|
+
"equal",
|
|
354
|
+
"improved",
|
|
355
|
+
"tolerated",
|
|
356
|
+
"regressed",
|
|
357
|
+
"missing",
|
|
358
|
+
"incomparable",
|
|
359
|
+
]);
|
|
360
|
+
const STUDIO_FORBIDDEN = new Set([
|
|
361
|
+
"prompt",
|
|
362
|
+
"message",
|
|
363
|
+
"text",
|
|
364
|
+
"input",
|
|
365
|
+
"output",
|
|
366
|
+
"arguments",
|
|
367
|
+
"body",
|
|
368
|
+
"response",
|
|
369
|
+
"secret",
|
|
370
|
+
"credential",
|
|
371
|
+
"diagnostic",
|
|
372
|
+
"stack",
|
|
373
|
+
"content",
|
|
374
|
+
"transcript",
|
|
375
|
+
"artifact",
|
|
376
|
+
"path",
|
|
377
|
+
]);
|
|
378
|
+
function studioRecord(value) {
|
|
379
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
380
|
+
}
|
|
381
|
+
function studioToken(value) {
|
|
382
|
+
return typeof value === "string" && STUDIO_TOKEN.test(value);
|
|
383
|
+
}
|
|
384
|
+
function studioInt(value, min = 0) {
|
|
385
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value >= min;
|
|
386
|
+
}
|
|
387
|
+
function studioSafeKeys(value, allowed) {
|
|
388
|
+
return Object.keys(value).every((key) => !STUDIO_FORBIDDEN.has(key.toLowerCase()) && allowed.has(key));
|
|
389
|
+
}
|
|
390
|
+
/** Project an evidence-only run graph; malformed or content-bearing input is rejected. */
|
|
391
|
+
export function toRunStudioView(value) {
|
|
392
|
+
if (!studioRecord(value))
|
|
393
|
+
return undefined;
|
|
394
|
+
const allowed = new Set([
|
|
395
|
+
"runId",
|
|
396
|
+
"planId",
|
|
397
|
+
"planDigest",
|
|
398
|
+
"cursor",
|
|
399
|
+
"state",
|
|
400
|
+
"nodes",
|
|
401
|
+
"traceRef",
|
|
402
|
+
"replayRef",
|
|
403
|
+
]);
|
|
404
|
+
if (!studioSafeKeys(value, allowed) ||
|
|
405
|
+
!studioToken(value.runId) ||
|
|
406
|
+
!studioToken(value.planId) ||
|
|
407
|
+
typeof value.planDigest !== "string" ||
|
|
408
|
+
!STUDIO_DIGEST.test(value.planDigest) ||
|
|
409
|
+
!studioInt(value.cursor) ||
|
|
410
|
+
typeof value.state !== "string" ||
|
|
411
|
+
!STUDIO_STATES.has(value.state) ||
|
|
412
|
+
!Array.isArray(value.nodes))
|
|
413
|
+
return undefined;
|
|
414
|
+
if (value.traceRef !== undefined && !studioToken(value.traceRef))
|
|
415
|
+
return undefined;
|
|
416
|
+
if (value.replayRef !== undefined && !studioToken(value.replayRef))
|
|
417
|
+
return undefined;
|
|
418
|
+
const nodes = [];
|
|
419
|
+
for (const raw of value.nodes) {
|
|
420
|
+
if (!studioRecord(raw) ||
|
|
421
|
+
!studioSafeKeys(raw, new Set([
|
|
422
|
+
"nodeId",
|
|
423
|
+
"dependsOn",
|
|
424
|
+
"state",
|
|
425
|
+
"attempt",
|
|
426
|
+
"retryCount",
|
|
427
|
+
"checkpointed",
|
|
428
|
+
"cancelled",
|
|
429
|
+
"recovered",
|
|
430
|
+
])))
|
|
431
|
+
return undefined;
|
|
432
|
+
if (!studioToken(raw.nodeId) ||
|
|
433
|
+
!Array.isArray(raw.dependsOn) ||
|
|
434
|
+
!raw.dependsOn.every(studioToken) ||
|
|
435
|
+
typeof raw.state !== "string" ||
|
|
436
|
+
!STUDIO_STATES.has(raw.state) ||
|
|
437
|
+
!studioInt(raw.attempt, 1) ||
|
|
438
|
+
!studioInt(raw.retryCount) ||
|
|
439
|
+
typeof raw.checkpointed !== "boolean" ||
|
|
440
|
+
typeof raw.cancelled !== "boolean" ||
|
|
441
|
+
typeof raw.recovered !== "boolean")
|
|
442
|
+
return undefined;
|
|
443
|
+
nodes.push(Object.freeze({
|
|
444
|
+
nodeId: raw.nodeId,
|
|
445
|
+
dependsOn: Object.freeze([...raw.dependsOn].sort()),
|
|
446
|
+
state: raw.state,
|
|
447
|
+
attempt: raw.attempt,
|
|
448
|
+
retryCount: raw.retryCount,
|
|
449
|
+
checkpointed: raw.checkpointed,
|
|
450
|
+
cancelled: raw.cancelled,
|
|
451
|
+
recovered: raw.recovered,
|
|
452
|
+
}));
|
|
453
|
+
}
|
|
454
|
+
nodes.sort((a, b) => a.nodeId.localeCompare(b.nodeId));
|
|
455
|
+
return Object.freeze({
|
|
456
|
+
runId: value.runId,
|
|
457
|
+
planId: value.planId,
|
|
458
|
+
planDigest: value.planDigest,
|
|
459
|
+
cursor: value.cursor,
|
|
460
|
+
state: value.state,
|
|
461
|
+
nodes: Object.freeze(nodes),
|
|
462
|
+
activeNodes: nodes.filter((node) => node.state === "running" || node.state === "paused").length,
|
|
463
|
+
terminalNodes: nodes.filter((node) => node.state === "succeeded" || node.state === "failed" || node.state === "cancelled").length,
|
|
464
|
+
...(value.traceRef === undefined ? {} : { traceRef: value.traceRef }),
|
|
465
|
+
...(value.replayRef === undefined ? {} : { replayRef: value.replayRef }),
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
/** Drop every field except bounded timeline evidence and sort by sequence. */
|
|
469
|
+
export function toEvidenceTimelineView(value) {
|
|
470
|
+
if (!Array.isArray(value))
|
|
471
|
+
return [];
|
|
472
|
+
const rows = [];
|
|
473
|
+
for (const raw of value) {
|
|
474
|
+
if (!studioRecord(raw) ||
|
|
475
|
+
!studioSafeKeys(raw, new Set([
|
|
476
|
+
"seq",
|
|
477
|
+
"eventId",
|
|
478
|
+
"runId",
|
|
479
|
+
"nodeId",
|
|
480
|
+
"status",
|
|
481
|
+
"attempt",
|
|
482
|
+
"traceRef",
|
|
483
|
+
"replayRef",
|
|
484
|
+
"scheduleToken",
|
|
485
|
+
])))
|
|
486
|
+
continue;
|
|
487
|
+
if (!studioInt(raw.seq) ||
|
|
488
|
+
!studioToken(raw.eventId) ||
|
|
489
|
+
!studioToken(raw.runId) ||
|
|
490
|
+
!studioToken(raw.nodeId) ||
|
|
491
|
+
typeof raw.status !== "string" ||
|
|
492
|
+
!STUDIO_STATUSES.has(raw.status) ||
|
|
493
|
+
!studioInt(raw.attempt, 1))
|
|
494
|
+
continue;
|
|
495
|
+
if (raw.traceRef !== undefined && !studioToken(raw.traceRef))
|
|
496
|
+
continue;
|
|
497
|
+
if (raw.replayRef !== undefined && !studioToken(raw.replayRef))
|
|
498
|
+
continue;
|
|
499
|
+
if (raw.scheduleToken !== undefined && !studioToken(raw.scheduleToken))
|
|
500
|
+
continue;
|
|
501
|
+
rows.push(Object.freeze({
|
|
502
|
+
seq: raw.seq,
|
|
503
|
+
eventId: raw.eventId,
|
|
504
|
+
runId: raw.runId,
|
|
505
|
+
nodeId: raw.nodeId,
|
|
506
|
+
status: raw.status,
|
|
507
|
+
attempt: raw.attempt,
|
|
508
|
+
...(raw.traceRef === undefined ? {} : { traceRef: raw.traceRef }),
|
|
509
|
+
...(raw.replayRef === undefined ? {} : { replayRef: raw.replayRef }),
|
|
510
|
+
...(raw.scheduleToken === undefined ? {} : { scheduleToken: raw.scheduleToken }),
|
|
511
|
+
}));
|
|
512
|
+
}
|
|
513
|
+
rows.sort((a, b) => a.seq - b.seq);
|
|
514
|
+
return Object.freeze(rows);
|
|
515
|
+
}
|
|
516
|
+
export function toEvalComparisonView(value) {
|
|
517
|
+
if (!studioRecord(value) ||
|
|
518
|
+
!studioSafeKeys(value, new Set(["suiteId", "comparisons", "regressions"])) ||
|
|
519
|
+
!studioToken(value.suiteId) ||
|
|
520
|
+
!Array.isArray(value.comparisons) ||
|
|
521
|
+
!Array.isArray(value.regressions) ||
|
|
522
|
+
!value.regressions.every(studioToken))
|
|
523
|
+
return undefined;
|
|
524
|
+
const comparisons = [];
|
|
525
|
+
for (const raw of value.comparisons) {
|
|
526
|
+
if (!studioRecord(raw) ||
|
|
527
|
+
!studioSafeKeys(raw, new Set(["caseId", "rubricId", "code", "regressionId"])) ||
|
|
528
|
+
!studioToken(raw.caseId) ||
|
|
529
|
+
!studioToken(raw.rubricId) ||
|
|
530
|
+
typeof raw.code !== "string" ||
|
|
531
|
+
!STUDIO_CODES.has(raw.code) ||
|
|
532
|
+
!studioToken(raw.regressionId))
|
|
533
|
+
return undefined;
|
|
534
|
+
comparisons.push(Object.freeze({
|
|
535
|
+
caseId: raw.caseId,
|
|
536
|
+
rubricId: raw.rubricId,
|
|
537
|
+
code: raw.code,
|
|
538
|
+
regressionId: raw.regressionId,
|
|
539
|
+
}));
|
|
540
|
+
}
|
|
541
|
+
return Object.freeze({
|
|
542
|
+
suiteId: value.suiteId,
|
|
543
|
+
comparisons: Object.freeze(comparisons),
|
|
544
|
+
regressionIds: Object.freeze([...value.regressions]),
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
export function toFaultInjectionViews(value) {
|
|
548
|
+
if (!Array.isArray(value))
|
|
549
|
+
return [];
|
|
550
|
+
const views = [];
|
|
551
|
+
for (const raw of value) {
|
|
552
|
+
if (!studioRecord(raw) ||
|
|
553
|
+
!studioSafeKeys(raw, new Set(["id", "kind", "scheduleToken", "regressionId", "ok"])) ||
|
|
554
|
+
!studioToken(raw.id) ||
|
|
555
|
+
!studioToken(raw.kind) ||
|
|
556
|
+
!studioToken(raw.scheduleToken) ||
|
|
557
|
+
!studioToken(raw.regressionId) ||
|
|
558
|
+
typeof raw.ok !== "boolean")
|
|
559
|
+
continue;
|
|
560
|
+
views.push(Object.freeze({
|
|
561
|
+
id: raw.id,
|
|
562
|
+
kind: raw.kind,
|
|
563
|
+
scheduleToken: raw.scheduleToken,
|
|
564
|
+
regressionId: raw.regressionId,
|
|
565
|
+
ok: raw.ok,
|
|
566
|
+
}));
|
|
567
|
+
}
|
|
568
|
+
return Object.freeze(views);
|
|
569
|
+
}
|
|
570
|
+
/** Keep browser work bounded when a run has more than 1,000 evidence rows. */
|
|
571
|
+
export function virtualizeEvidenceRows(rows, cursor, windowSize = 100) {
|
|
572
|
+
if (!Number.isSafeInteger(cursor) || cursor < 0)
|
|
573
|
+
throw new RangeError("evidence cursor must be non-negative");
|
|
574
|
+
if (!Number.isSafeInteger(windowSize) || windowSize < 1 || windowSize > 256)
|
|
575
|
+
throw new RangeError("evidence window size is invalid");
|
|
576
|
+
const offset = Math.min(Math.max(0, cursor - Math.floor(windowSize / 2)), Math.max(0, rows.length - windowSize));
|
|
577
|
+
return Object.freeze({ offset, rows: Object.freeze(rows.slice(offset, offset + windowSize)) });
|
|
578
|
+
}
|
|
579
|
+
//# sourceMappingURL=view-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-models.js","sourceRoot":"","sources":["../src/view-models.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nifrajs/agent-app",
|
|
3
|
+
"version": "3.2.0",
|
|
4
|
+
"description": "Presentation-safe browser SDK for Nifra agent hosts: negotiated commands, ordered event streaming, and content-free view models over the agent protocol.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"bun",
|
|
7
|
+
"typescript",
|
|
8
|
+
"nifra",
|
|
9
|
+
"agent",
|
|
10
|
+
"sdk",
|
|
11
|
+
"browser",
|
|
12
|
+
"sse"
|
|
13
|
+
],
|
|
14
|
+
"type": "module",
|
|
15
|
+
"main": "./dist/index.js",
|
|
16
|
+
"module": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"bun": "./src/index.ts",
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"default": "./dist/index.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist",
|
|
27
|
+
"src"
|
|
28
|
+
],
|
|
29
|
+
"sideEffects": false,
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc -p tsconfig.build.json && bun run ../../scripts/fix-dts.ts dist"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@nifrajs/agent-protocol": "3.2.0"
|
|
35
|
+
},
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "git+https://github.com/nifrajs/nifra.git",
|
|
43
|
+
"directory": "packages/agent-app"
|
|
44
|
+
},
|
|
45
|
+
"bugs": {
|
|
46
|
+
"url": "https://github.com/nifrajs/nifra/issues"
|
|
47
|
+
},
|
|
48
|
+
"homepage": "https://github.com/nifrajs/nifra#readme"
|
|
49
|
+
}
|