@opengeni/react 0.6.1 → 0.6.2

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/dist/index.d.ts CHANGED
@@ -42,6 +42,8 @@ type UserMessageItem = {
42
42
  kind: "user-message";
43
43
  id: string;
44
44
  text: string;
45
+ /** Queued for a future turn whose start has not appeared in the event log. */
46
+ pending?: boolean;
45
47
  /** Resources attached to this message (file uploads, repositories). */
46
48
  resources: ResourceRef[];
47
49
  /** Tools requested for the turn this message starts. */
package/dist/index.js CHANGED
@@ -105,7 +105,8 @@ var WORKER_MESSAGE_TOOL = "session_send_message";
105
105
  var WORKER_INTERRUPT_TOOL = "session_interrupt";
106
106
  function buildTimeline(events) {
107
107
  const items = [];
108
- const ordered = [...events].sort((a, b) => a.sequence - b.sequence);
108
+ const prescan = prescanTurnAnchors(events);
109
+ const ordered = orderTimelineEvents(events, prescan);
109
110
  const last = () => items[items.length - 1];
110
111
  const closeStreamingTail = () => {
111
112
  const open = last();
@@ -139,6 +140,7 @@ function buildTimeline(events) {
139
140
  kind: "user-message",
140
141
  id: event.id,
141
142
  text: typeof payload.text === "string" ? payload.text : "",
143
+ ...event.pendingUserMessage ? { pending: true } : {},
142
144
  resources: resourceRefs(payload.resources),
143
145
  tools: toolRefs(payload.tools),
144
146
  occurredAt: event.occurredAt
@@ -363,6 +365,9 @@ ${message}` : message;
363
365
  break;
364
366
  }
365
367
  case "turn.cancelled": {
368
+ if (turnId && !prescan.startedTurnIds.has(turnId)) {
369
+ break;
370
+ }
366
371
  const hadActivity = hasTurnActivity(items, turnId);
367
372
  finalizeOpen(turnId, "cancelled");
368
373
  items.push(turnEndItem(event, "cancelled", null));
@@ -443,6 +448,108 @@ function groupTimeline(items) {
443
448
  }
444
449
  return groups;
445
450
  }
451
+ function prescanTurnAnchors(events) {
452
+ const ordered = [...events].sort((a, b) => a.sequence - b.sequence);
453
+ const queuedTurnByTrigger = /* @__PURE__ */ new Map();
454
+ const startSeqByTrigger = /* @__PURE__ */ new Map();
455
+ const cancelledTurnIds = /* @__PURE__ */ new Set();
456
+ const fallbackSeqByTurn = /* @__PURE__ */ new Map();
457
+ const startedTurnIds = /* @__PURE__ */ new Set();
458
+ for (const event of ordered) {
459
+ const payload = asRecord(event.payload);
460
+ const turnId = event.turnId ?? null;
461
+ if (event.type === "turn.queued") {
462
+ const triggerEventId = typeof payload.triggerEventId === "string" ? payload.triggerEventId : null;
463
+ const queuedTurnId = typeof payload.turnId === "string" ? payload.turnId : turnId;
464
+ if (triggerEventId && queuedTurnId) {
465
+ queuedTurnByTrigger.set(triggerEventId, queuedTurnId);
466
+ }
467
+ continue;
468
+ }
469
+ if (event.type === "turn.started") {
470
+ const triggerEventId = typeof payload.triggerEventId === "string" ? payload.triggerEventId : null;
471
+ if (triggerEventId) {
472
+ startSeqByTrigger.set(triggerEventId, event.sequence);
473
+ }
474
+ if (turnId) {
475
+ startedTurnIds.add(turnId);
476
+ }
477
+ } else if (event.type === "turn.cancelled" && turnId) {
478
+ cancelledTurnIds.add(turnId);
479
+ }
480
+ if (turnId && event.type !== "turn.queued" && event.type !== "turn.cancelled") {
481
+ const previous = fallbackSeqByTurn.get(turnId);
482
+ if (previous === void 0 || event.sequence < previous) {
483
+ fallbackSeqByTurn.set(turnId, event.sequence);
484
+ }
485
+ }
486
+ if (turnId && isAgentActivityEvent(event.type)) {
487
+ startedTurnIds.add(turnId);
488
+ }
489
+ }
490
+ for (const [triggerEventId, turnId] of queuedTurnByTrigger) {
491
+ if (!startSeqByTrigger.has(triggerEventId)) {
492
+ const fallbackSeq = fallbackSeqByTurn.get(turnId);
493
+ if (fallbackSeq !== void 0) {
494
+ startSeqByTrigger.set(triggerEventId, fallbackSeq);
495
+ }
496
+ }
497
+ }
498
+ const cancelledBeforeStartTriggers = /* @__PURE__ */ new Set();
499
+ for (const [triggerEventId, turnId] of queuedTurnByTrigger) {
500
+ if (cancelledTurnIds.has(turnId) && !startSeqByTrigger.has(triggerEventId) && !fallbackSeqByTurn.has(turnId)) {
501
+ cancelledBeforeStartTriggers.add(triggerEventId);
502
+ }
503
+ }
504
+ return { queuedTurnByTrigger, startSeqByTrigger, cancelledBeforeStartTriggers, startedTurnIds };
505
+ }
506
+ function orderTimelineEvents(events, prescan) {
507
+ const ordered = [...events].sort((a, b) => a.sequence - b.sequence);
508
+ const insertions = /* @__PURE__ */ new Map();
509
+ const pending = [];
510
+ for (const event of ordered) {
511
+ if (event.type !== "user.message") {
512
+ continue;
513
+ }
514
+ const queuedTurnId = prescan.queuedTurnByTrigger.get(event.id);
515
+ if (!queuedTurnId) {
516
+ pushInsertion(insertions, event.sequence, event);
517
+ continue;
518
+ }
519
+ if (prescan.cancelledBeforeStartTriggers.has(event.id)) {
520
+ continue;
521
+ }
522
+ const startSeq = prescan.startSeqByTrigger.get(event.id);
523
+ if (startSeq !== void 0) {
524
+ pushInsertion(insertions, startSeq, event);
525
+ continue;
526
+ }
527
+ pending.push({ ...event, pendingUserMessage: true });
528
+ }
529
+ const projected = [];
530
+ for (const event of ordered) {
531
+ const before = insertions.get(event.sequence);
532
+ if (before) {
533
+ projected.push(...before);
534
+ }
535
+ if (event.type !== "user.message") {
536
+ projected.push(event);
537
+ }
538
+ }
539
+ projected.push(...pending);
540
+ return projected;
541
+ }
542
+ function pushInsertion(insertions, sequence, event) {
543
+ const bucket = insertions.get(sequence);
544
+ if (bucket) {
545
+ bucket.push(event);
546
+ } else {
547
+ insertions.set(sequence, [event]);
548
+ }
549
+ }
550
+ function isAgentActivityEvent(type) {
551
+ return type.startsWith("agent.") || type.startsWith("sandbox.");
552
+ }
446
553
  function turnEndItem(event, outcome, failureText) {
447
554
  return {
448
555
  kind: "turn-end",
@@ -6088,7 +6195,10 @@ function UserMessageRow({
6088
6195
  item,
6089
6196
  renderMessageText
6090
6197
  }) {
6091
- return /* @__PURE__ */ jsx15("div", { className: "animate-og-enter flex justify-end", children: /* @__PURE__ */ jsx15("div", { className: "max-w-[85%] min-w-0 rounded-og-lg rounded-br-og-xs border border-og-border bg-og-surface-2 px-4 py-2.5 text-og-md leading-6 text-og-fg", children: renderMessageText ? renderMessageText(item.text, item) : /* @__PURE__ */ jsx15(Markdown, { children: item.text }) }) });
6198
+ return /* @__PURE__ */ jsx15("div", { className: "animate-og-enter flex justify-end", children: /* @__PURE__ */ jsxs12("div", { className: "flex max-w-[85%] min-w-0 flex-col items-end gap-1", children: [
6199
+ item.pending ? /* @__PURE__ */ jsx15("span", { className: "px-1 text-og-xs text-og-fg-subtle", children: "queued" }) : null,
6200
+ /* @__PURE__ */ jsx15("div", { className: "w-fit max-w-full min-w-0 rounded-og-lg rounded-br-og-xs border border-og-border bg-og-surface-2 px-4 py-2.5 text-og-md leading-6 text-og-fg", children: renderMessageText ? renderMessageText(item.text, item) : /* @__PURE__ */ jsx15(Markdown, { children: item.text }) })
6201
+ ] }) });
6092
6202
  }
6093
6203
  function AgentMessageRow({
6094
6204
  item,