@zephyrdeng/pi-review 0.7.0 → 0.7.1

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 +16 -1
  2. package/README.zh-CN.md +16 -2
  3. package/dist/args.d.ts.map +1 -1
  4. package/dist/args.js +21 -1
  5. package/dist/args.js.map +1 -1
  6. package/dist/args.test.js +10 -0
  7. package/dist/args.test.js.map +1 -1
  8. package/dist/child-process.d.ts +3 -0
  9. package/dist/child-process.d.ts.map +1 -1
  10. package/dist/child-process.js +26 -0
  11. package/dist/child-process.js.map +1 -1
  12. package/dist/child-process.test.js +13 -0
  13. package/dist/child-process.test.js.map +1 -1
  14. package/dist/index.d.ts +6 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +4 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/json-events.d.ts +28 -2
  19. package/dist/json-events.d.ts.map +1 -1
  20. package/dist/json-events.js +110 -45
  21. package/dist/json-events.js.map +1 -1
  22. package/dist/json-events.test.js +156 -3
  23. package/dist/json-events.test.js.map +1 -1
  24. package/dist/panel-cancellation.test.d.ts +2 -0
  25. package/dist/panel-cancellation.test.d.ts.map +1 -0
  26. package/dist/panel-cancellation.test.js +24 -0
  27. package/dist/panel-cancellation.test.js.map +1 -0
  28. package/dist/panel-cli.test.js +51 -0
  29. package/dist/panel-cli.test.js.map +1 -1
  30. package/dist/panel-config.js +2 -2
  31. package/dist/panel-config.js.map +1 -1
  32. package/dist/panel-config.test.js +5 -2
  33. package/dist/panel-config.test.js.map +1 -1
  34. package/dist/panel-tools.test.d.ts +2 -0
  35. package/dist/panel-tools.test.d.ts.map +1 -0
  36. package/dist/panel-tools.test.js +12 -0
  37. package/dist/panel-tools.test.js.map +1 -0
  38. package/dist/panel-usage.d.ts +6 -0
  39. package/dist/panel-usage.d.ts.map +1 -0
  40. package/dist/panel-usage.js +21 -0
  41. package/dist/panel-usage.js.map +1 -0
  42. package/dist/panel-view.d.ts +41 -0
  43. package/dist/panel-view.d.ts.map +1 -0
  44. package/dist/panel-view.js +90 -0
  45. package/dist/panel-view.js.map +1 -0
  46. package/dist/panel-view.test.d.ts +2 -0
  47. package/dist/panel-view.test.d.ts.map +1 -0
  48. package/dist/panel-view.test.js +45 -0
  49. package/dist/panel-view.test.js.map +1 -0
  50. package/dist/panel.d.ts +11 -1
  51. package/dist/panel.d.ts.map +1 -1
  52. package/dist/panel.js +127 -49
  53. package/dist/panel.js.map +1 -1
  54. package/dist/review-events.d.ts +70 -0
  55. package/dist/review-events.d.ts.map +1 -0
  56. package/dist/review-events.js +52 -0
  57. package/dist/review-events.js.map +1 -0
  58. package/dist/review-events.test.d.ts +2 -0
  59. package/dist/review-events.test.d.ts.map +1 -0
  60. package/dist/review-events.test.js +47 -0
  61. package/dist/review-events.test.js.map +1 -0
  62. package/dist/types.d.ts +5 -1
  63. package/dist/types.d.ts.map +1 -1
  64. package/dist/types.js +2 -0
  65. package/dist/types.js.map +1 -1
  66. package/extensions/panel-tool.test.ts +30 -0
  67. package/extensions/panel-tool.ts +169 -0
  68. package/extensions/review.ts +3 -1
  69. package/extensions/rv-prompts.test.ts +8 -1
  70. package/extensions/rv-prompts.ts +6 -4
  71. package/package.json +13 -4
  72. package/resources/review-presets.json +2 -2
  73. package/skills/pi-review/SKILL.md +3 -3
@@ -5,17 +5,16 @@ function num(value) {
5
5
  const n = Number(value);
6
6
  return Number.isFinite(n) && n >= 0 ? n : 0;
7
7
  }
8
- function accumulateUsage(into, usage) {
8
+ function addUsage(into, usage) {
9
9
  if (!usage)
10
10
  return;
11
- // input/cacheRead are prompt-scoped maxima (reported per message, not summed);
12
- // output is additive across assistant turns.
13
- into.input = Math.max(into.input, num(usage.input));
14
- into.cacheRead = Math.max(into.cacheRead, num(usage.cacheRead));
15
- into.cacheWrite = Math.max(into.cacheWrite, num(usage.cacheWrite));
11
+ // Each completed assistant message represents a separately billed request.
12
+ into.input += num(usage.input);
16
13
  into.output += num(usage.output);
17
- into.reasoning = Math.max(into.reasoning, num(usage.reasoning));
18
- into.totalTokens = Math.max(into.totalTokens, num(usage.totalTokens));
14
+ into.cacheRead += num(usage.cacheRead);
15
+ into.cacheWrite += num(usage.cacheWrite);
16
+ into.reasoning += num(usage.reasoning);
17
+ into.totalTokens += num(usage.totalTokens);
19
18
  if (typeof usage.cost?.total === "number") {
20
19
  into.costTotal = (into.costTotal ?? 0) + usage.cost.total;
21
20
  }
@@ -80,8 +79,9 @@ export function extractFinalText(jsonLinesText) {
80
79
  }
81
80
  /**
82
81
  * Extract token usage and the response model from a pi `--mode json` event
83
- * stream. Usage is accumulated from assistant message/turn/agent_end events.
84
- * Degrades gracefully (returns undefined) when usage fields are absent.
82
+ * stream. Completed assistant `message_end` events are authoritative because
83
+ * Pi repeats the same usage snapshot in update, turn_end, and agent_end events.
84
+ * `agent_end` is used as a fallback when message_end usage is absent.
85
85
  */
86
86
  export function extractUsage(jsonLinesText) {
87
87
  const usage = {
@@ -93,7 +93,15 @@ export function extractUsage(jsonLinesText) {
93
93
  totalTokens: 0,
94
94
  };
95
95
  let sawAnyUsage = false;
96
+ let sawMessageEndUsageInCurrentAgent = false;
96
97
  let responseModel;
98
+ const completedResponseIds = new Set();
99
+ const captureModel = (message) => {
100
+ if (message.responseModel)
101
+ responseModel = message.responseModel;
102
+ else if (message.model && !responseModel)
103
+ responseModel = message.model;
104
+ };
97
105
  for (const line of jsonLinesText.split("\n")) {
98
106
  if (!line.trim())
99
107
  continue;
@@ -104,26 +112,41 @@ export function extractUsage(jsonLinesText) {
104
112
  catch {
105
113
  continue;
106
114
  }
107
- const candidates = [];
108
- if (event?.message?.usage)
109
- candidates.push(event.message);
110
- else if (event?.message?.responseModel || event?.message?.model)
111
- candidates.push(event.message);
112
- if (event?.type === "agent_end" && Array.isArray(event.messages)) {
113
- for (const m of event.messages) {
114
- if (m?.usage || m?.responseModel || m?.model)
115
- candidates.push(m);
115
+ if (event?.type === "agent_start") {
116
+ sawMessageEndUsageInCurrentAgent = false;
117
+ }
118
+ if (event?.type === "message_end" && event.message?.role === "assistant") {
119
+ captureModel(event.message);
120
+ const responseId = event.message.responseId;
121
+ if (event.message.usage) {
122
+ sawMessageEndUsageInCurrentAgent = true;
123
+ }
124
+ if (event.message.usage && (!responseId || !completedResponseIds.has(responseId))) {
125
+ addUsage(usage, event.message.usage);
126
+ sawAnyUsage = true;
127
+ if (responseId)
128
+ completedResponseIds.add(responseId);
116
129
  }
117
130
  }
118
- for (const c of candidates) {
119
- if (c.usage) {
120
- accumulateUsage(usage, c.usage);
131
+ if (event?.type === "agent_end" && Array.isArray(event.messages)) {
132
+ const assistantMessages = event.messages.filter((message) => message?.role === "assistant");
133
+ for (const message of assistantMessages)
134
+ captureModel(message);
135
+ const useAllFallback = !sawMessageEndUsageInCurrentAgent;
136
+ for (const message of assistantMessages) {
137
+ if (!message.usage)
138
+ continue;
139
+ const responseId = message.responseId;
140
+ if (responseId && completedResponseIds.has(responseId))
141
+ continue;
142
+ if (!useAllFallback && !responseId)
143
+ continue;
144
+ addUsage(usage, message.usage);
121
145
  sawAnyUsage = true;
146
+ if (responseId)
147
+ completedResponseIds.add(responseId);
122
148
  }
123
- if (c.responseModel)
124
- responseModel = c.responseModel;
125
- else if (c.model && !responseModel)
126
- responseModel = c.model;
149
+ sawMessageEndUsageInCurrentAgent = false;
127
150
  }
128
151
  }
129
152
  if (!sawAnyUsage)
@@ -142,7 +165,9 @@ export class JsonEventStream {
142
165
  buffer = "";
143
166
  emit;
144
167
  accumulate;
168
+ completedResponseIds = new Set();
145
169
  sawAnyUsage = false;
170
+ sawMessageEndUsageInCurrentAgent = false;
146
171
  responseModel;
147
172
  turn = 0;
148
173
  inAssistantTurn = false;
@@ -189,33 +214,49 @@ export class JsonEventStream {
189
214
  }
190
215
  handle(event) {
191
216
  const t = event.type;
192
- // Accumulate usage from any message/turn/agent_end carrying it.
193
- const usageSources = [];
194
- if (event.message?.usage)
195
- usageSources.push(event.message);
196
- if (event.assistantMessageEvent?.partial?.usage)
197
- usageSources.push(event.assistantMessageEvent.partial);
198
- if (t === "agent_end" && Array.isArray(event.messages)) {
199
- for (const m of event.messages) {
200
- if (m?.usage)
201
- usageSources.push(m);
217
+ if (t === "agent_start") {
218
+ this.sawMessageEndUsageInCurrentAgent = false;
219
+ }
220
+ // message_update usage is a live snapshot of the current request. Publish
221
+ // it for renderers without committing it to the final billed totals.
222
+ if (t === "message_update") {
223
+ const snapshot = event.assistantMessageEvent?.partial?.usage ?? event.message?.usage;
224
+ if (snapshot)
225
+ this.emitUsagePreview(snapshot);
226
+ }
227
+ // Pi repeats final usage in turn_end and agent_end. message_end is the
228
+ // authoritative completion boundary for each separately billed request.
229
+ if (t === "message_end" && event.message?.role === "assistant") {
230
+ this.captureResponseModel(event.message);
231
+ if (event.message.usage) {
232
+ this.sawMessageEndUsageInCurrentAgent = true;
233
+ this.commitUsage(event.message.usage, event.message.responseId);
202
234
  }
203
235
  }
204
- for (const s of usageSources) {
205
- if (s.usage) {
206
- accumulateUsage(this.accumulate, s.usage);
207
- this.sawAnyUsage = true;
236
+ if (t === "agent_end" && Array.isArray(event.messages)) {
237
+ const assistantMessages = event.messages.filter((message) => message?.role === "assistant");
238
+ for (const message of assistantMessages)
239
+ this.captureResponseModel(message);
240
+ const useAllFallback = !this.sawMessageEndUsageInCurrentAgent;
241
+ for (const message of assistantMessages) {
242
+ if (!message.usage)
243
+ continue;
244
+ const responseId = message.responseId;
245
+ if (responseId && this.completedResponseIds.has(responseId))
246
+ continue;
247
+ if (!useAllFallback && !responseId)
248
+ continue;
249
+ this.commitUsage(message.usage, responseId);
208
250
  }
209
- if (s.responseModel)
210
- this.responseModel = s.responseModel;
211
- else if (s.model && !this.responseModel)
212
- this.responseModel = s.model;
251
+ this.sawMessageEndUsageInCurrentAgent = false;
213
252
  }
214
253
  // Text deltas -> forward to the human-readable terminal.
215
254
  if (t === "message_update" && event.assistantMessageEvent?.type === "text_delta") {
216
255
  const delta = event.assistantMessageEvent.delta;
217
- if (typeof delta === "string" && delta)
256
+ if (typeof delta === "string" && delta) {
218
257
  this.emit.onText(delta);
258
+ this.emit.onActivity?.({ type: "text.delta", text: delta });
259
+ }
219
260
  }
220
261
  // Semantic milestones (B).
221
262
  switch (t) {
@@ -227,6 +268,7 @@ export class JsonEventStream {
227
268
  this.inAssistantTurn = false;
228
269
  if (this.turn > 1)
229
270
  this.emit.onMilestone(`pi-review: turn ${this.turn}\n`);
271
+ this.emit.onActivity?.({ type: "turn.started", turn: this.turn });
230
272
  break;
231
273
  case "message_start":
232
274
  if (event.message?.role === "assistant")
@@ -234,14 +276,37 @@ export class JsonEventStream {
234
276
  break;
235
277
  case "tool_execution_start":
236
278
  this.emit.onMilestone(`pi-review: tool ${event.toolName ?? "unknown"} started\n`);
279
+ this.emit.onActivity?.({ type: "tool.started", tool: event.toolName ?? "unknown" });
237
280
  break;
238
281
  case "tool_execution_end":
239
282
  this.emit.onMilestone(`pi-review: tool ${event.toolName ?? "unknown"} finished\n`);
283
+ this.emit.onActivity?.({ type: "tool.finished", tool: event.toolName ?? "unknown" });
240
284
  break;
241
285
  case "agent_end":
242
286
  this.emit.onMilestone("pi-review: review finished\n");
287
+ this.emit.onActivity?.({ type: "agent.finished" });
243
288
  break;
244
289
  }
245
290
  }
291
+ captureResponseModel(message) {
292
+ if (message.responseModel)
293
+ this.responseModel = message.responseModel;
294
+ else if (message.model && !this.responseModel)
295
+ this.responseModel = message.model;
296
+ }
297
+ commitUsage(usage, responseId) {
298
+ if (responseId && this.completedResponseIds.has(responseId))
299
+ return;
300
+ addUsage(this.accumulate, usage);
301
+ this.sawAnyUsage = true;
302
+ if (responseId)
303
+ this.completedResponseIds.add(responseId);
304
+ this.emit.onActivity?.({ type: "usage", usage: { ...this.accumulate } });
305
+ }
306
+ emitUsagePreview(usage) {
307
+ const preview = { ...this.accumulate };
308
+ addUsage(preview, usage);
309
+ this.emit.onActivity?.({ type: "usage", usage: preview });
310
+ }
246
311
  }
247
312
  //# sourceMappingURL=json-events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-events.js","sourceRoot":"","sources":["../src/json-events.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,mEAAmE;AACnE,4EAA4E;AAiC5E,SAAS,GAAG,CAAC,KAAc;IACzB,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,eAAe,CAAC,IAAgB,EAAE,KAA4B;IACrE,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,+EAA+E;IAC/E,6CAA6C;IAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACtE,IAAI,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,OAAyC;IAChE,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3D,OAAO,OAAO,CAAC,OAAO;SACnB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;SAC3E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,OAA6B;IAChD,OAAO,OAAO,CAAC,UAAU,KAAK,OAAO,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,aAAqB;IACpD,IAAI,oBAAsD,CAAC;IAC3D,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAE3B,IAAI,KAA2F,CAAC;QAChG,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,IAAI,KAAK,EAAE,OAAO,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;YACzC,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC;QACvC,CAAC;QAED,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,WAAW,GAAG,IAAI,CAAC;YACnB,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpD,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,OAAO,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;oBAClC,oBAAoB,GAAG,OAAO,CAAC;oBAC/B,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,kDAAkD,EAAE,CAAC;IACjF,CAAC;IAED,IAAI,WAAW,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,IAAI,EAAE,eAAe,CAAC,oBAAoB,CAAC;YAC3C,KAAK,EACH,oBAAoB,CAAC,YAAY;gBACjC,wCAAwC,oBAAoB,CAAC,UAAU,EAAE;YAC3E,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,6CAA6C,EAAE,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,8EAA8E,EAAE,CAAC;IACzG,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB;IAChD,MAAM,KAAK,GAAe;QACxB,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;KACf,CAAC;IACF,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,aAAiC,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC3B,IAAI,KAAgN,CAAC;QACrN,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAyE,EAAE,CAAC;QAC5F,IAAI,KAAK,EAAE,OAAO,EAAE,KAAK;YAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;aACrD,IAAI,KAAK,EAAE,OAAO,EAAE,aAAa,IAAI,KAAK,EAAE,OAAO,EAAE,KAAK;YAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChG,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,aAAa,IAAI,CAAC,EAAE,KAAK;oBAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACZ,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBAChC,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,CAAC,aAAa;gBAAE,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC;iBAChD,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa;gBAAE,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAmB,EAAE,KAAK,EAAE,CAAC;IACzC,IAAI,aAAa;QAAE,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;IACxD,OAAO,MAAM,CAAC;AAChB,CAAC;AA+BD;;;;GAIG;AACH,MAAM,OAAO,eAAe;IAClB,MAAM,GAAG,EAAE,CAAC;IACH,IAAI,CAAqB;IACzB,UAAU,CAAa;IAChC,WAAW,GAAG,KAAK,CAAC;IACpB,aAAa,CAAqB;IAClC,IAAI,GAAG,CAAC,CAAC;IACT,eAAe,GAAG,KAAK,CAAC;IAEhC,YAAY,IAAwB;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IACvG,CAAC;IAED,gEAAgE;IAChE,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QACrB,IAAI,EAAU,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,kEAAkE;IAClE,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QACjC,MAAM,MAAM,GAAkB,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QACzD,IAAI,IAAI,CAAC,aAAa;YAAE,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAClE,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,WAAW,CAAC,GAAW;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YAAE,OAAO;QACxB,IAAI,KAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,2CAA2C;QACrD,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,KAAsB;QACnC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;QACrB,gEAAgE;QAChE,MAAM,YAAY,GAAyE,EAAE,CAAC;QAC9F,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK;YAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,KAAK,CAAC,qBAAqB,EAAE,OAAO,EAAE,KAAK;YAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACxG,IAAI,CAAC,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAE,KAAgC,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnF,KAAK,MAAM,CAAC,IAAK,KAA4F,CAAC,QAAQ,EAAE,CAAC;gBACvH,IAAI,CAAC,EAAE,KAAK;oBAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACZ,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,CAAC;YACD,IAAI,CAAC,CAAC,aAAa;gBAAE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC;iBACrD,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC;QACxE,CAAC;QAED,yDAAyD;QACzD,IAAI,CAAC,KAAK,gBAAgB,IAAI,KAAK,CAAC,qBAAqB,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;YACjF,MAAM,KAAK,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC;YAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClE,CAAC;QAED,2BAA2B;QAC3B,QAAQ,CAAC,EAAE,CAAC;YACV,KAAK,aAAa;gBAChB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;gBACrD,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;gBACf,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;gBAC3E,MAAM;YACR,KAAK,eAAe;gBAClB,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,KAAK,WAAW;oBAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBACrE,MAAM;YACR,KAAK,sBAAsB;gBACzB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,KAAK,CAAC,QAAQ,IAAI,SAAS,YAAY,CAAC,CAAC;gBAClF,MAAM;YACR,KAAK,oBAAoB;gBACvB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,KAAK,CAAC,QAAQ,IAAI,SAAS,aAAa,CAAC,CAAC;gBACnF,MAAM;YACR,KAAK,WAAW;gBACd,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC;gBACtD,MAAM;QACV,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"json-events.js","sourceRoot":"","sources":["../src/json-events.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,116 @@ import { extractFinalText, extractUsage, JsonEventStream } from "./json-events.j
4
4
  function lines(...events) {
5
5
  return events.map((e) => JSON.stringify(e)).join("\n");
6
6
  }
7
+ const firstUsageSnapshot = {
8
+ input: 100,
9
+ output: 20,
10
+ cacheRead: 50,
11
+ cacheWrite: 2,
12
+ reasoning: 5,
13
+ totalTokens: 172,
14
+ cost: { total: 0.1 },
15
+ };
16
+ const secondUsageSnapshot = {
17
+ input: 30,
18
+ output: 10,
19
+ cacheRead: 170,
20
+ cacheWrite: 0,
21
+ reasoning: 2,
22
+ totalTokens: 210,
23
+ cost: { total: 0.12 },
24
+ };
25
+ function repeatedUsageEvents() {
26
+ return [
27
+ { type: "message_start", message: { role: "assistant", usage: firstUsageSnapshot } },
28
+ {
29
+ type: "message_update",
30
+ message: { role: "assistant", usage: firstUsageSnapshot },
31
+ assistantMessageEvent: { type: "text_delta", delta: "first", partial: { role: "assistant", usage: firstUsageSnapshot } },
32
+ },
33
+ { type: "message_end", message: { role: "assistant", usage: firstUsageSnapshot, model: "provider/model" } },
34
+ { type: "turn_end", message: { role: "assistant", usage: firstUsageSnapshot } },
35
+ {
36
+ type: "message_update",
37
+ message: { role: "assistant", usage: secondUsageSnapshot },
38
+ assistantMessageEvent: { type: "text_delta", delta: "second", partial: { role: "assistant", usage: secondUsageSnapshot } },
39
+ },
40
+ { type: "message_end", message: { role: "assistant", usage: secondUsageSnapshot, responseModel: "provider/model" } },
41
+ { type: "turn_end", message: { role: "assistant", usage: secondUsageSnapshot } },
42
+ {
43
+ type: "agent_end",
44
+ messages: [
45
+ { role: "assistant", usage: firstUsageSnapshot },
46
+ { role: "assistant", usage: secondUsageSnapshot, responseModel: "provider/model" },
47
+ ],
48
+ },
49
+ ];
50
+ }
51
+ const repeatedUsageExpected = {
52
+ usage: {
53
+ input: 130,
54
+ output: 30,
55
+ cacheRead: 220,
56
+ cacheWrite: 2,
57
+ reasoning: 7,
58
+ totalTokens: 382,
59
+ costTotal: 0.22,
60
+ },
61
+ responseModel: "provider/model",
62
+ };
63
+ const firstFallbackUsage = { input: 10, output: 2, totalTokens: 12 };
64
+ const secondFallbackUsage = { input: 20, output: 3, totalTokens: 23 };
65
+ const fallbackUsageExpected = {
66
+ input: 30,
67
+ output: 5,
68
+ cacheRead: 0,
69
+ cacheWrite: 0,
70
+ reasoning: 0,
71
+ totalTokens: 35,
72
+ };
73
+ function fullAgentEndFallbackEvents() {
74
+ return [{
75
+ type: "agent_end",
76
+ messages: [
77
+ { role: "assistant", usage: { ...firstFallbackUsage, cost: { total: 0.01 } } },
78
+ {
79
+ role: "assistant",
80
+ usage: { ...secondFallbackUsage, cost: { total: 0.02 } },
81
+ responseModel: "fallback/model",
82
+ },
83
+ ],
84
+ }];
85
+ }
86
+ function missingMessageEndUsageEvents() {
87
+ return [
88
+ {
89
+ type: "message_end",
90
+ message: { role: "assistant", responseId: "response-1", usage: firstFallbackUsage },
91
+ },
92
+ { type: "message_end", message: { role: "assistant", responseId: "response-2" } },
93
+ {
94
+ type: "agent_end",
95
+ messages: [
96
+ { role: "assistant", responseId: "response-1", usage: firstFallbackUsage },
97
+ { role: "assistant", responseId: "response-2", usage: secondFallbackUsage },
98
+ ],
99
+ },
100
+ ];
101
+ }
102
+ function multipleAgentFallbackEvents() {
103
+ return [
104
+ { type: "agent_start" },
105
+ { type: "message_end", message: { role: "assistant", usage: firstFallbackUsage } },
106
+ { type: "agent_end", messages: [{ role: "assistant", usage: firstFallbackUsage }] },
107
+ { type: "agent_start" },
108
+ { type: "agent_end", messages: [{ role: "assistant", usage: secondFallbackUsage }] },
109
+ ];
110
+ }
111
+ function parseStreamUsage(events) {
112
+ const stream = new JsonEventStream({ onText: () => { }, onMilestone: () => { } });
113
+ stream.feed(lines(...events));
114
+ stream.flush();
115
+ return stream.usage();
116
+ }
7
117
  test("extractFinalText reads the final assistant text from agent_end", () => {
8
118
  const input = lines({ type: "session", id: "s1" }, { type: "agent_start" }, { type: "message_end", message: { role: "assistant", content: [{ type: "text", text: "partial" }] } }, {
9
119
  type: "agent_end",
@@ -85,7 +195,7 @@ test("extractFinalText uses the last agent_end when the child retries", () => {
85
195
  assert.equal(result.text, "final attempt");
86
196
  assert.equal(result.fatal, undefined);
87
197
  });
88
- test("extractUsage accumulates tokens from message_end and agent_end", () => {
198
+ test("extractUsage uses message_end usage and agent_end response model", () => {
89
199
  const input = lines({ type: "session", id: "s1" }, { type: "message_end", message: { role: "assistant", usage: { input: 44, output: 3, cacheRead: 17984, cacheWrite: 0, reasoning: 0, totalTokens: 18031, cost: { total: 0.025 } }, model: "hf:zai-org/GLM-5.2" } }, { type: "agent_end", messages: [{ role: "assistant", responseModel: "zai-org/GLM-5.2" }] });
90
200
  const result = extractUsage(input);
91
201
  assert.ok(result.usage);
@@ -96,17 +206,33 @@ test("extractUsage accumulates tokens from message_end and agent_end", () => {
96
206
  assert.equal(result.usage.costTotal, 0.025);
97
207
  assert.equal(result.responseModel, "zai-org/GLM-5.2");
98
208
  });
209
+ test("extractUsage falls back to agent_end usage when message_end usage is absent", () => {
210
+ assert.deepEqual(extractUsage(lines(...fullAgentEndFallbackEvents())), {
211
+ usage: { ...fallbackUsageExpected, costTotal: 0.03 },
212
+ responseModel: "fallback/model",
213
+ });
214
+ });
215
+ test("extractUsage fills missing message_end usage from unseen agent_end response ids", () => {
216
+ assert.deepEqual(extractUsage(lines(...missingMessageEndUsageEvents())).usage, fallbackUsageExpected);
217
+ });
218
+ test("extractUsage applies no-id agent_end fallback independently per agent run", () => {
219
+ assert.deepEqual(extractUsage(lines(...multipleAgentFallbackEvents())).usage, fallbackUsageExpected);
220
+ });
99
221
  test("extractUsage returns undefined when no usage events exist", () => {
100
222
  const input = lines({ type: "session", id: "s1" }, { type: "agent_end", messages: [{ role: "assistant" }] });
101
223
  const result = extractUsage(input);
102
224
  assert.equal(result.usage, undefined);
103
225
  assert.equal(result.responseModel, undefined);
104
226
  });
105
- test("extractUsage sums output across multiple assistant turns", () => {
227
+ test("extractUsage sums separately billed usage across multiple assistant turns", () => {
106
228
  const input = lines({ type: "message_end", message: { role: "assistant", usage: { input: 100, output: 50, totalTokens: 150 } } }, { type: "message_end", message: { role: "assistant", usage: { input: 100, output: 30, totalTokens: 130 } } });
107
229
  const result = extractUsage(input);
108
230
  assert.equal(result.usage.output, 80);
109
- assert.equal(result.usage.input, 100);
231
+ assert.equal(result.usage.input, 200);
232
+ assert.equal(result.usage.totalTokens, 280);
233
+ });
234
+ test("extractUsage counts repeated usage snapshots once per completed assistant message", () => {
235
+ assert.deepEqual(extractUsage(lines(...repeatedUsageEvents())), repeatedUsageExpected);
110
236
  });
111
237
  test("JsonEventStream forwards text deltas and emits milestones", () => {
112
238
  const texts = [];
@@ -132,6 +258,33 @@ test("JsonEventStream accumulates token usage from streamed events", () => {
132
258
  assert.equal(usage.cacheRead, 100);
133
259
  assert.equal(usage.reasoning, 10);
134
260
  });
261
+ test("JsonEventStream counts repeated usage snapshots once per completed assistant message", () => {
262
+ const usageCosts = [];
263
+ const stream = new JsonEventStream({
264
+ onText: () => { },
265
+ onMilestone: () => { },
266
+ onActivity: (event) => {
267
+ if (event.type === "usage")
268
+ usageCosts.push(event.usage.costTotal);
269
+ },
270
+ });
271
+ stream.feed(lines(...repeatedUsageEvents()));
272
+ stream.flush();
273
+ assert.deepEqual(stream.usage(), repeatedUsageExpected);
274
+ assert.equal(usageCosts.at(-1), 0.22);
275
+ });
276
+ test("JsonEventStream falls back to agent_end usage when message_end usage is absent", () => {
277
+ assert.deepEqual(parseStreamUsage(fullAgentEndFallbackEvents()), {
278
+ usage: { ...fallbackUsageExpected, costTotal: 0.03 },
279
+ responseModel: "fallback/model",
280
+ });
281
+ });
282
+ test("JsonEventStream fills missing message_end usage from unseen agent_end response ids", () => {
283
+ assert.deepEqual(parseStreamUsage(missingMessageEndUsageEvents()).usage, fallbackUsageExpected);
284
+ });
285
+ test("JsonEventStream applies no-id agent_end fallback independently per agent run", () => {
286
+ assert.deepEqual(parseStreamUsage(multipleAgentFallbackEvents()).usage, fallbackUsageExpected);
287
+ });
135
288
  test("JsonEventStream handles partial lines across chunks", () => {
136
289
  const texts = [];
137
290
  const stream = new JsonEventStream({ onText: (c) => texts.push(c), onMilestone: () => { } });
@@ -1 +1 @@
1
- {"version":3,"file":"json-events.test.js","sourceRoot":"","sources":["../src/json-events.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-events.test.js","sourceRoot":"","sources":["../src/json-events.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnF,SAAS,KAAK,CAAC,GAAG,MAAiB;IACjC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,kBAAkB,GAAG;IACzB,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,EAAE;IACV,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,GAAG;IAChB,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;CACrB,CAAC;AAEF,MAAM,mBAAmB,GAAG;IAC1B,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;IACV,SAAS,EAAE,GAAG;IACd,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,GAAG;IAChB,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;CACtB,CAAC;AAEF,SAAS,mBAAmB;IAC1B,OAAO;QACL,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE;QACpF;YACE,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE;YACzD,qBAAqB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE;SACzH;QACD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE;QAC3G,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE;QAC/E;YACE,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE;YAC1D,qBAAqB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE;SAC3H;QACD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,EAAE,EAAE;QACpH,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE;QAChF;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE;gBAChD,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,EAAE;aACnF;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,qBAAqB,GAAG;IAC5B,KAAK,EAAE;QACL,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,GAAG;QACd,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,IAAI;KAChB;IACD,aAAa,EAAE,gBAAgB;CAChC,CAAC;AAEF,MAAM,kBAAkB,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AACrE,MAAM,mBAAmB,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AACtE,MAAM,qBAAqB,GAAG;IAC5B,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,CAAC;IACZ,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,SAAS,0BAA0B;IACjC,OAAO,CAAC;YACN,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,GAAG,kBAAkB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC9E;oBACE,IAAI,EAAE,WAAW;oBACjB,KAAK,EAAE,EAAE,GAAG,mBAAmB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;oBACxD,aAAa,EAAE,gBAAgB;iBAChC;aACF;SACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B;IACnC,OAAO;QACL;YACE,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE;SACpF;QACD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;QACjF;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE;gBAC1E,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB,EAAE;aAC5E;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B;IAClC,OAAO;QACL,EAAE,IAAI,EAAE,aAAa,EAAE;QACvB,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE;QAClF,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE;QACnF,EAAE,IAAI,EAAE,aAAa,EAAE;QACvB,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,EAAE;KACrF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAiB;IACzC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC;IAChF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC9B,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AAED,IAAI,CAAC,gEAAgE,EAAE,GAAG,EAAE;IAC1E,MAAM,KAAK,GAAG,KAAK,CACjB,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAC7B,EAAE,IAAI,EAAE,aAAa,EAAE,EACvB,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EACrG;QACE,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE;YAClE;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,EAAE;oBACjD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE;iBACjD;gBACD,UAAU,EAAE,MAAM;aACnB;SACF;KACF,CACF,CAAC;IACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,+CAA+C,CAAC,CAAC;IAC3E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC9D,MAAM,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;KAC/F,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8FAA8F,EAAE,GAAG,EAAE;IACxG,MAAM,KAAK,GAAG,KAAK,CACjB,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EACtG,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,CAC7G,CAAC;IACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2EAA2E,EAAE,GAAG,EAAE;IACrF,MAAM,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;KACtE,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBACrC,UAAU,EAAE,OAAO;gBACnB,YAAY,EAAE,uBAAuB;aACtC;SACF;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;IACjE,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;IAC3E,MAAM,KAAK,GAAG,KAAK,CACjB;QACE,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;KAC3G,EACD;QACE,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;KAC1G,CACF,CAAC;IACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC3C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE;IAC5E,MAAM,KAAK,GAAG,KAAK,CACjB,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAC7B,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,EAChN,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAC3F,CAAC;IACF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6EAA6E,EAAE,GAAG,EAAE;IACvF,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,0BAA0B,EAAE,CAAC,CAAC,EAAE;QACrE,KAAK,EAAE,EAAE,GAAG,qBAAqB,EAAE,SAAS,EAAE,IAAI,EAAE;QACpD,aAAa,EAAE,gBAAgB;KAChC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iFAAiF,EAAE,GAAG,EAAE;IAC3F,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,4BAA4B,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AACxG,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2EAA2E,EAAE,GAAG,EAAE;IACrF,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,2BAA2B,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AACvG,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACrE,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7G,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2EAA2E,EAAE,GAAG,EAAE;IACrF,MAAM,KAAK,GAAG,KAAK,CACjB,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,EAC5G,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,CAC7G,CAAC;IACF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mFAAmF,EAAE,GAAG,EAAE;IAC7F,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,mBAAmB,EAAE,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;AACzF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACrE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7G,MAAM,KAAK,GAAG,KAAK,CACjB,EAAE,IAAI,EAAE,aAAa,EAAE,EACvB,EAAE,IAAI,EAAE,YAAY,EAAE,EACtB,EAAE,IAAI,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,EAC1H,EAAE,IAAI,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,EACzH,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,EAAE,CACxI,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,YAAY,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC;AACvF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8DAA8D,EAAE,GAAG,EAAE;IACxE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC;IAChF,MAAM,CAAC,IAAI,CAAC,KAAK,CACf,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,CAC3J,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;IACnC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACjB,MAAM,CAAC,KAAK,CAAC,KAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,KAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,KAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACpC,MAAM,CAAC,KAAK,CAAC,KAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sFAAsF,EAAE,GAAG,EAAE;IAChG,MAAM,UAAU,GAA8B,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;QAChB,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;QACrB,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACrE,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,mBAAmB,EAAE,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,CAAC;IAEf,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,qBAAqB,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gFAAgF,EAAE,GAAG,EAAE;IAC1F,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,0BAA0B,EAAE,CAAC,EAAE;QAC/D,KAAK,EAAE,EAAE,GAAG,qBAAqB,EAAE,SAAS,EAAE,IAAI,EAAE;QACpD,aAAa,EAAE,gBAAgB;KAChC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oFAAoF,EAAE,GAAG,EAAE;IAC9F,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,4BAA4B,EAAE,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAClG,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8EAA8E,EAAE,GAAG,EAAE;IACxF,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,2BAA2B,EAAE,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AACjG,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC/D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC;IAC5F,yCAAyC;IACzC,MAAM,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;IAClG,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACpE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC;IAChF,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1B,MAAM,CAAC,IAAI,CAAC,uHAAuH,CAAC,CAAC;IACrI,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=panel-cancellation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-cancellation.test.d.ts","sourceRoot":"","sources":["../src/panel-cancellation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import assert from "node:assert/strict";
2
+ import { test } from "node:test";
3
+ import { runPanelReviewOnce } from "./panel.js";
4
+ test("an already-aborted panel emits deterministic reviewer cancellations and one final event", async () => {
5
+ const controller = new AbortController();
6
+ controller.abort();
7
+ const events = [];
8
+ const parsed = {
9
+ command: "review",
10
+ mode: "code",
11
+ skills: [],
12
+ payload: ["@src"],
13
+ keepSession: false,
14
+ stream: true,
15
+ reviewers: 2,
16
+ };
17
+ const result = await runPanelReviewOnce(parsed, "", { signal: controller.signal, onEvent: (event) => events.push(event), emitFooter: false });
18
+ assert.equal(result.exitCode, 4);
19
+ assert.equal(result.meta.status, "blocked");
20
+ assert.equal(events.filter((event) => event.type === "reviewer.cancelled").length, 2);
21
+ assert.equal(events.filter((event) => event.type === "panel.completed").length, 1);
22
+ assert.equal(events.at(-1)?.type, "panel.completed");
23
+ });
24
+ //# sourceMappingURL=panel-cancellation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-cancellation.test.js","sourceRoot":"","sources":["../src/panel-cancellation.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGhD,IAAI,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;IACzG,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,UAAU,CAAC,KAAK,EAAE,CAAC;IACnB,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,MAAM,GAAe;QACzB,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,WAAW,EAAE,KAAK;QAClB,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,CAAC;KACb,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9I,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC"}
@@ -31,6 +31,7 @@ const scenario = process.env.FAKE_PANEL_SCENARIO || "agree-bug";
31
31
  const idMatch = prompt.match(/Reviewer ID:\\s*(\\S+)/);
32
32
  const reviewerId = idMatch ? idMatch[1] : "r1";
33
33
  const bug = "### F1: Off-by-one in loop\\n- Severity: high\\n- Path: src/cli.ts\\n- Actionable: yes\\n- Evidence: x\\n- Impact: y\\n- Recommendation: z";
34
+ const longBug = "### F1: " + "x".repeat(700) + "\\n- Severity: high\\n- Path: src/cli.ts\\n- Actionable: yes\\n- Evidence: x\\n- Impact: y\\n- Recommendation: z";
34
35
  function emit(text) {
35
36
  function line(obj) { process.stdout.write(JSON.stringify(obj) + "\\n"); }
36
37
  line({ type: "session", version: 3, id: "s1" });
@@ -54,6 +55,8 @@ if (scenario === "agree-bug") {
54
55
  else out("approve", "No material findings.");
55
56
  } else if (scenario === "all-clean") {
56
57
  out("approve", "No material findings.");
58
+ } else if (scenario === "long-finding") {
59
+ out("request_changes", longBug);
57
60
  } else if (scenario === "singleton") {
58
61
  if (reviewerId === "r1" || reviewerId === "correctness") out("request_changes", bug);
59
62
  else out("approve", "No material findings.");
@@ -185,4 +188,52 @@ test("named panel preset reviewer ids appear in supporting reviewer ids", (t) =>
185
188
  const cluster = meta.confirmedClusters[0];
186
189
  assert.deepEqual(cluster.supportingReviewerIds.sort(), ["correctness", "security"]);
187
190
  });
191
+ test("panel events-jsonl emits only normalized lifecycle events and carries the final metadata", (t) => {
192
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-review-panel-cli-"));
193
+ t.after(() => fs.rmSync(tempDir, { recursive: true, force: true }));
194
+ const fakePi = writeFakePi(tempDir);
195
+ const result = runPanelCli(fakePi, "agree-bug", ["--reviewers", "3", "--output-format", "events-jsonl"]);
196
+ assert.equal(result.status, 1, result.stderr);
197
+ const events = result.stdout.trim().split("\n").map((line) => JSON.parse(line));
198
+ assert.equal(events[0]?.type, "panel.started");
199
+ assert.deepEqual(events.map((event) => event.seq), events.map((_, index) => index + 1));
200
+ assert.equal(events.at(-1)?.type, "panel.completed");
201
+ assert.equal(events.at(-1)?.meta?.status, "has_findings");
202
+ assert.doesNotMatch(result.stdout, /PI_REVIEW_META_JSON|── pi-review/);
203
+ });
204
+ test("panel events-jsonl keeps the default CLI gate metadata semantics", (t) => {
205
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-review-panel-cli-"));
206
+ t.after(() => fs.rmSync(tempDir, { recursive: true, force: true }));
207
+ const fakePi = writeFakePi(tempDir);
208
+ const args = ["--reviewers", "3", "--consensus", "quorum", "--min-agree", "2"];
209
+ const human = runPanelCli(fakePi, "agree-bug", args);
210
+ const eventStream = runPanelCli(fakePi, "agree-bug", [...args, "--output-format", "events-jsonl"]);
211
+ const humanMeta = metaRecord(human);
212
+ const eventMeta = JSON.parse(eventStream.stdout.trim().split("\n").at(-1)).meta;
213
+ assert.equal(eventStream.status, human.status);
214
+ assert.equal(eventMeta.status, humanMeta.status);
215
+ assert.deepEqual(eventMeta.confirmedClusters, humanMeta.confirmedClusters);
216
+ assert.deepEqual(eventMeta.advisories, humanMeta.advisories);
217
+ assert.equal(eventMeta.panelHealth, humanMeta.panelHealth);
218
+ });
219
+ test("panel keeps full redacted findings for the CLI while bounding renderer events", (t) => {
220
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-review-panel-cli-"));
221
+ t.after(() => fs.rmSync(tempDir, { recursive: true, force: true }));
222
+ const fakePi = writeFakePi(tempDir);
223
+ const args = ["--reviewers", "2", "--consensus", "quorum", "--min-agree", "2"];
224
+ const human = runPanelCli(fakePi, "long-finding", args);
225
+ const events = runPanelCli(fakePi, "long-finding", [...args, "--output-format", "events-jsonl"]);
226
+ assert.match(human.stdout, /x{700}/);
227
+ const completed = JSON.parse(events.stdout.trim().split("\n").at(-1));
228
+ assert.ok(completed.meta.confirmedClusters[0].summary.length <= 512);
229
+ });
230
+ test("panel rejects disallowed tools before writing a partial event stream", (t) => {
231
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-review-panel-cli-"));
232
+ t.after(() => fs.rmSync(tempDir, { recursive: true, force: true }));
233
+ const fakePi = writeFakePi(tempDir);
234
+ const result = runPanelCli(fakePi, "agree-bug", ["--reviewers", "2", "--tools", "bash", "--output-format", "events-jsonl"]);
235
+ assert.equal(result.status, 2);
236
+ assert.equal(result.stdout, "");
237
+ assert.match(result.stderr, /panel reviewers only allow/);
238
+ });
188
239
  //# sourceMappingURL=panel-cli.test.js.map