@codex-app-sdk/backend 0.16.1 → 0.16.3

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.js CHANGED
@@ -2140,17 +2140,17 @@ function W(e, t, n, r) {
2140
2140
  parts: s
2141
2141
  }), G(i, t);
2142
2142
  }
2143
- function er(e, t, n, r) {
2144
- let i = [...e], a = i.findIndex((e) => e.role === "assistant" && e.metadata?.turnId === n && e.parts.some((e) => e.type === "media" && e.itemId === r.itemId));
2145
- a < 0 && r.itemId && (a = i.findIndex((e) => e.role === "assistant" && e.metadata?.turnId === n && e.parts.some((e) => e.type === "tool" && e.id === r.itemId))), a < 0 && (i = U(i, t, n), a = K(i, (e) => e.role === "assistant" && e.kind === void 0 && e.metadata?.turnId === n));
2146
- let o = a >= 0 ? i[a] : void 0;
2147
- if (!o) return i;
2148
- let s = [...o.parts], c = s.findIndex((e) => e.type === "media" && e.itemId === r.itemId);
2149
- return c >= 0 ? s.splice(c, 1, r) : s.push(r), i.splice(a, 1, {
2150
- ...o,
2143
+ function er(e, t, n, r, i = r.itemId) {
2144
+ let a = [...e], o = a.findIndex((e) => e.role === "assistant" && e.metadata?.turnId === n && e.parts.some((e) => e.type === "media" && e.itemId === r.itemId));
2145
+ o < 0 && r.itemId && (o = a.findIndex((e) => e.role === "assistant" && e.metadata?.turnId === n && e.parts.some((e) => e.type === "tool" && e.id === i))), o < 0 && (a = U(a, t, n), o = K(a, (e) => e.role === "assistant" && e.kind === void 0 && e.metadata?.turnId === n));
2146
+ let s = o >= 0 ? a[o] : void 0;
2147
+ if (!s) return a;
2148
+ let c = [...s.parts], l = c.findIndex((e) => e.type === "media" && e.itemId === r.itemId);
2149
+ return l >= 0 ? c.splice(l, 1, r) : c.push(r), a.splice(o, 1, {
2150
+ ...s,
2151
2151
  status: "streaming",
2152
- parts: s
2153
- }), G(i, t);
2152
+ parts: c
2153
+ }), G(a, t);
2154
2154
  }
2155
2155
  function tr(e, t, n, r) {
2156
2156
  let i = [...e], a = i.findIndex((e) => e.role === "assistant" && e.metadata?.turnId === n && e.parts.some((e) => e.type === "question" && e.request.id === r.request.id));
@@ -2299,7 +2299,7 @@ function fr(e) {
2299
2299
  }
2300
2300
  function pr(e, t) {
2301
2301
  let n = /* @__PURE__ */ new Map();
2302
- for (let t of e) for (let e of t.parts) e.type !== "attachment" || e.attachment.kind !== "image" || !e.attachment.path || Dr(e.attachment.url) && n.set(e.attachment.path, e.attachment.url);
2302
+ for (let t of e) for (let e of t.parts) e.type !== "attachment" || e.attachment.kind !== "image" || !e.attachment.path || Or(e.attachment.url) && n.set(e.attachment.path, e.attachment.url);
2303
2303
  return n.size === 0 ? [...t] : t.map((e) => {
2304
2304
  let t = !1, r = e.parts.map((e) => {
2305
2305
  if (e.type !== "attachment" || e.attachment.kind !== "image" || !e.attachment.path) return e;
@@ -2319,13 +2319,13 @@ function pr(e, t) {
2319
2319
  });
2320
2320
  }
2321
2321
  function mr(e, t) {
2322
- let n = [], r = [], i = jr(t.startedAt ?? t.completedAt), a = 0, o = !1, s = /* @__PURE__ */ new Set(), c = () => {
2322
+ let n = [], r = [], i = Mr(t.startedAt ?? t.completedAt), a = 0, o = !1, s = /* @__PURE__ */ new Set(), c = () => {
2323
2323
  if (r.length === 0) return;
2324
2324
  let o = a === 0 ? "" : `-segment-${a}`;
2325
2325
  n.push({
2326
2326
  id: `assistant-${t.id}${o}`,
2327
2327
  role: "assistant",
2328
- status: Ar(t.status),
2328
+ status: jr(t.status),
2329
2329
  turnId: t.id,
2330
2330
  parts: [...r],
2331
2331
  createdAt: i,
@@ -2337,7 +2337,7 @@ function mr(e, t) {
2337
2337
  };
2338
2338
  for (let a of Array.isArray(t.items) ? t.items : []) {
2339
2339
  if (a.type === "userMessage") {
2340
- let r = vr(a), l = br(a);
2340
+ let r = yr(a), l = xr(a);
2341
2341
  if (r.length > 0) {
2342
2342
  let u = o, d = u ? null : JSON.stringify(r);
2343
2343
  if (d && s.has(d)) continue;
@@ -2354,7 +2354,7 @@ function mr(e, t) {
2354
2354
  turnId: t.id,
2355
2355
  ...l.length > 0 ? {
2356
2356
  asyncQuestionRequestIds: l,
2357
- asyncQuestionAnswers: xr(a)
2357
+ asyncQuestionAnswers: Sr(a)
2358
2358
  } : {}
2359
2359
  }
2360
2360
  });
@@ -2418,15 +2418,15 @@ function mr(e, t) {
2418
2418
  }
2419
2419
  let l = L(a);
2420
2420
  l && (o = !0, r.push(l));
2421
- let u = _r(a);
2422
- u && (o = !0, r.push(u));
2421
+ let u = vr(a);
2422
+ u.length && (o = !0, r.push(...u));
2423
2423
  }
2424
2424
  return c(), t.status === "inProgress" ? n : ar(n, t.id, t.status);
2425
2425
  }
2426
2426
  function hr(e, t, n) {
2427
- let r = jr(t.startedAt);
2427
+ let r = Mr(t.startedAt);
2428
2428
  if (n.type === "userMessage") {
2429
- let i = vr(n), a = br(n);
2429
+ let i = yr(n), a = xr(n);
2430
2430
  return i.length > 0 ? {
2431
2431
  id: n.clientId ?? `user-${e}-${t.id}-${n.id}`,
2432
2432
  role: "user",
@@ -2440,7 +2440,7 @@ function hr(e, t, n) {
2440
2440
  itemId: n.id,
2441
2441
  ...a.length > 0 ? {
2442
2442
  asyncQuestionRequestIds: a,
2443
- asyncQuestionAnswers: xr(n)
2443
+ asyncQuestionAnswers: Sr(n)
2444
2444
  } : {}
2445
2445
  }
2446
2446
  } : null;
@@ -2455,7 +2455,7 @@ function hr(e, t, n) {
2455
2455
  return s.length > 0 ? {
2456
2456
  id: `assistant-${n.id}`,
2457
2457
  role: "assistant",
2458
- status: Ar(t.status),
2458
+ status: jr(t.status),
2459
2459
  turnId: t.id,
2460
2460
  parts: s,
2461
2461
  createdAt: r,
@@ -2479,7 +2479,7 @@ function hr(e, t, n) {
2479
2479
  return i.length > 0 ? {
2480
2480
  id: `assistant-${n.id}`,
2481
2481
  role: "assistant",
2482
- status: Ar(t.status),
2482
+ status: jr(t.status),
2483
2483
  turnId: t.id,
2484
2484
  parts: i,
2485
2485
  createdAt: r,
@@ -2491,13 +2491,11 @@ function hr(e, t, n) {
2491
2491
  } : null;
2492
2492
  }
2493
2493
  let i = [], a = L(n);
2494
- a && i.push(a);
2495
- let o = _r(n);
2496
- o && i.push(o);
2497
- let s = i.length > 0 ? {
2494
+ a && i.push(a), i.push(...vr(n));
2495
+ let o = i.length > 0 ? {
2498
2496
  id: `assistant-${n.id}`,
2499
2497
  role: "assistant",
2500
- status: Ar(t.status),
2498
+ status: jr(t.status),
2501
2499
  turnId: t.id,
2502
2500
  parts: i,
2503
2501
  createdAt: r,
@@ -2507,7 +2505,7 @@ function hr(e, t, n) {
2507
2505
  itemId: n.id
2508
2506
  }
2509
2507
  } : null;
2510
- return !s || t.status === "inProgress" ? s : ar([s], t.id, t.status)[0] ?? null;
2508
+ return !o || t.status === "inProgress" ? o : ar([o], t.id, t.status)[0] ?? null;
2511
2509
  }
2512
2510
  function gr(e, t, n, r = !1) {
2513
2511
  if (n.delivery !== "async") return null;
@@ -2553,7 +2551,7 @@ function gr(e, t, n, r = !1) {
2553
2551
  }
2554
2552
  function _r(e) {
2555
2553
  if (e.type !== "imageGeneration" || L(e)?.status !== "completed") return null;
2556
- let t = typeof e.savedPath == "string" && v(e.savedPath) ? e.savedPath : null, n = t ? Tr(t) : void 0, r = n && dr.has(n) ? t : null, i = Er(typeof e.result == "string" ? e.result.trim() : ""), a = i?.url ?? (r ? re(r).href : void 0);
2554
+ let t = typeof e.savedPath == "string" && v(e.savedPath) ? e.savedPath : null, n = t ? Er(t) : void 0, r = n && dr.has(n) ? t : null, i = Dr(typeof e.result == "string" ? e.result.trim() : ""), a = i?.url ?? (r ? re(r).href : void 0);
2557
2555
  if (!a) return null;
2558
2556
  let o = typeof e.revisedPrompt == "string" ? e.revisedPrompt.trim() : "";
2559
2557
  return {
@@ -2569,6 +2567,30 @@ function _r(e) {
2569
2567
  };
2570
2568
  }
2571
2569
  function vr(e) {
2570
+ let t = _r(e);
2571
+ if (t) return [t];
2572
+ let n = e.type === "mcpToolCall" && e.status === "completed" ? e.result?.content : e.type === "dynamicToolCall" && e.status === "completed" ? e.contentItems : void 0;
2573
+ if (!Array.isArray(n)) return [];
2574
+ let r = [], i = 20 * 1024 * 1024;
2575
+ for (let t of n) {
2576
+ if (!t || typeof t != "object" || Array.isArray(t) || r.length >= 8) continue;
2577
+ let n = t, a = n.type === "image" && typeof n.data == "string" ? n.data : n.type === "inputImage" && typeof n.imageUrl == "string" ? n.imageUrl : "";
2578
+ if (a.length > i) continue;
2579
+ let o = Dr(a);
2580
+ o && (i -= o.url.length, r.push({
2581
+ type: "media",
2582
+ itemId: r.length ? `${e.id}:image:${r.length}` : e.id,
2583
+ media: {
2584
+ url: o.url,
2585
+ mimeType: o.mimeType,
2586
+ alt: "Tool image",
2587
+ title: "Tool image"
2588
+ }
2589
+ }));
2590
+ }
2591
+ return r;
2592
+ }
2593
+ function yr(e) {
2572
2594
  let t = Array.isArray(e.content) ? e.content : [], n = t.some((e) => q(e) && e.type === "text" && typeof e.text == "string" && e.text.length > 0), r = [], i = [], a = /* @__PURE__ */ new Set(), o = () => {
2573
2595
  i.length > 0 && r.push({
2574
2596
  type: "text",
@@ -2582,7 +2604,7 @@ function vr(e) {
2582
2604
  if (a.has(t)) continue;
2583
2605
  a.add(t);
2584
2606
  }
2585
- let t = yr(e), s = kt(t);
2607
+ let t = br(e), s = kt(t);
2586
2608
  if (s) {
2587
2609
  o(), r.push({
2588
2610
  type: "attachment",
@@ -2597,7 +2619,7 @@ function vr(e) {
2597
2619
  i.push(t);
2598
2620
  continue;
2599
2621
  }
2600
- let c = Cr(e);
2622
+ let c = wr(e);
2601
2623
  c && (o(), r.push({
2602
2624
  type: "attachment",
2603
2625
  attachment: c
@@ -2605,20 +2627,20 @@ function vr(e) {
2605
2627
  }
2606
2628
  return o(), r;
2607
2629
  }
2608
- function yr(e) {
2609
- return !q(e) || typeof e.type != "string" ? "" : e.type === "text" && typeof e.text == "string" ? Sr(e.text)?.displayText ?? e.text : e.type === "skill" && typeof e.name == "string" ? `$${e.name}` : "";
2610
- }
2611
2630
  function br(e) {
2631
+ return !q(e) || typeof e.type != "string" ? "" : e.type === "text" && typeof e.text == "string" ? Cr(e.text)?.displayText ?? e.text : e.type === "skill" && typeof e.name == "string" ? `$${e.name}` : "";
2632
+ }
2633
+ function xr(e) {
2612
2634
  let t = /* @__PURE__ */ new Set();
2613
- for (let n of Array.isArray(e.content) ? e.content : []) if (!(!q(n) || n.type !== "text" || typeof n.text != "string")) for (let e of Sr(n.text)?.requestIds ?? []) t.add(e);
2635
+ for (let n of Array.isArray(e.content) ? e.content : []) if (!(!q(n) || n.type !== "text" || typeof n.text != "string")) for (let e of Cr(n.text)?.requestIds ?? []) t.add(e);
2614
2636
  return [...t];
2615
2637
  }
2616
- function xr(e) {
2638
+ function Sr(e) {
2617
2639
  let t = {};
2618
- for (let n of Array.isArray(e.content) ? e.content : []) !q(n) || n.type !== "text" || typeof n.text != "string" || Object.assign(t, Sr(n.text)?.answers);
2640
+ for (let n of Array.isArray(e.content) ? e.content : []) !q(n) || n.type !== "text" || typeof n.text != "string" || Object.assign(t, Cr(n.text)?.answers);
2619
2641
  return t;
2620
2642
  }
2621
- function Sr(e) {
2643
+ function Cr(e) {
2622
2644
  let t = e.match(/^<send_user_message_question_reply>\s*([\s\S]*?)\s*<\/send_user_message_question_reply>$/);
2623
2645
  if (!t?.[1]) return null;
2624
2646
  try {
@@ -2642,10 +2664,10 @@ function Sr(e) {
2642
2664
  return null;
2643
2665
  }
2644
2666
  }
2645
- function Cr(e) {
2667
+ function wr(e) {
2646
2668
  if (!q(e) || typeof e.type != "string") return null;
2647
2669
  if (e.type === "mention" && typeof e.path == "string") {
2648
- let t = typeof e.name == "string" && e.name.trim() ? e.name.trim() : wr(e.path, "File"), n = Tr(e.path);
2670
+ let t = typeof e.name == "string" && e.name.trim() ? e.name.trim() : Tr(e.path, "File"), n = Er(e.path);
2649
2671
  return {
2650
2672
  kind: "file",
2651
2673
  name: t,
@@ -2654,26 +2676,26 @@ function Cr(e) {
2654
2676
  };
2655
2677
  }
2656
2678
  if (e.type === "image" && typeof e.url == "string") {
2657
- let t = Tr(e.url);
2679
+ let t = Er(e.url);
2658
2680
  return {
2659
2681
  kind: "image",
2660
- name: wr(e.url, "Image"),
2682
+ name: Tr(e.url, "Image"),
2661
2683
  url: e.url,
2662
2684
  ...t ? { mimeType: t } : {}
2663
2685
  };
2664
2686
  }
2665
2687
  if (e.type === "localImage" && typeof e.path == "string") {
2666
- let t = Tr(e.path);
2688
+ let t = Er(e.path);
2667
2689
  return {
2668
2690
  kind: "image",
2669
- name: wr(e.path, "Image"),
2691
+ name: Tr(e.path, "Image"),
2670
2692
  path: e.path,
2671
2693
  ...t ? { mimeType: t } : {}
2672
2694
  };
2673
2695
  }
2674
2696
  return null;
2675
2697
  }
2676
- function wr(e, t) {
2698
+ function Tr(e, t) {
2677
2699
  try {
2678
2700
  let n = /^[a-z][a-z\d+.-]*:/i.test(e) ? new URL(e).pathname : e;
2679
2701
  return g(decodeURIComponent(n)).trim() || t;
@@ -2681,7 +2703,7 @@ function wr(e, t) {
2681
2703
  return g(e).trim() || t;
2682
2704
  }
2683
2705
  }
2684
- function Tr(e) {
2706
+ function Er(e) {
2685
2707
  let t = /^data:([^;,]+)/i.exec(e)?.[1]?.toLowerCase();
2686
2708
  if (t) return t;
2687
2709
  let n = "";
@@ -2703,23 +2725,23 @@ function Tr(e) {
2703
2725
  webp: "image/webp"
2704
2726
  }[n];
2705
2727
  }
2706
- function Er(e) {
2728
+ function Dr(e) {
2707
2729
  if (!e) return null;
2708
2730
  let t = (/^data:image\/[a-z0-9.+-]+;base64,([a-z0-9+/=\s]+)$/i.exec(e)?.[1] ?? e).replace(/\s+/g, ""), n = Math.ceil(ur / 3) * 4 + 4;
2709
2731
  if (!t || t.length > n || t.length % 4 != 0 || !/^[a-z0-9+/]+={0,2}$/i.test(t)) return null;
2710
2732
  let r = Buffer.from(t, "base64");
2711
2733
  if (r.byteLength === 0 || r.byteLength > ur) return null;
2712
- let i = Or(r);
2734
+ let i = kr(r);
2713
2735
  return i ? {
2714
2736
  url: `data:${i};base64,${t}`,
2715
2737
  mimeType: i
2716
2738
  } : null;
2717
2739
  }
2718
- function Dr(e) {
2740
+ function Or(e) {
2719
2741
  return !!(e && e.length <= 16 * 1024 * 1024 && /^data:image\/(?:avif|bmp|gif|heic|heif|jpe?g|png|webp);base64,[a-z\d+/]+={0,2}$/i.test(e));
2720
2742
  }
2721
- function Or(e) {
2722
- if (kr(e, [
2743
+ function kr(e) {
2744
+ if (Ar(e, [
2723
2745
  137,
2724
2746
  80,
2725
2747
  78,
@@ -2729,7 +2751,7 @@ function Or(e) {
2729
2751
  26,
2730
2752
  10
2731
2753
  ])) return "image/png";
2732
- if (kr(e, [
2754
+ if (Ar(e, [
2733
2755
  255,
2734
2756
  216,
2735
2757
  255
@@ -2737,13 +2759,13 @@ function Or(e) {
2737
2759
  let t = Buffer.from(e.subarray(0, 12)).toString("ascii");
2738
2760
  return t.startsWith("GIF87a") || t.startsWith("GIF89a") ? "image/gif" : t.startsWith("RIFF") && t.slice(8, 12) === "WEBP" ? "image/webp" : e.byteLength >= 12 && t.slice(4, 12) === "ftypavif" ? "image/avif" : null;
2739
2761
  }
2740
- function kr(e, t) {
2762
+ function Ar(e, t) {
2741
2763
  return t.every((t, n) => e[n] === t);
2742
2764
  }
2743
- function Ar(e) {
2765
+ function jr(e) {
2744
2766
  return e === "inProgress" ? "streaming" : e === "failed" ? "error" : "complete";
2745
2767
  }
2746
- function jr(e) {
2768
+ function Mr(e) {
2747
2769
  return typeof e != "number" || !Number.isFinite(e) ? (/* @__PURE__ */ new Date(0)).toISOString() : (/* @__PURE__ */ new Date(e * 1e3)).toISOString();
2748
2770
  }
2749
2771
  function q(e) {
@@ -2751,19 +2773,19 @@ function q(e) {
2751
2773
  }
2752
2774
  //#endregion
2753
2775
  //#region src/node/codex-raw-response-item-adapter.ts
2754
- function Mr(e) {
2755
- if (!Vr(e) || typeof e.type != "string") return null;
2776
+ function Nr(e) {
2777
+ if (!Hr(e) || typeof e.type != "string") return null;
2756
2778
  if (e.type === "local_shell_call") {
2757
- let t = L(Nr(e));
2779
+ let t = L(Pr(e));
2758
2780
  return {
2759
- type: Lr(e.status) ? "item.completed" : "item.started",
2781
+ type: Rr(e.status) ? "item.completed" : "item.started",
2760
2782
  payload: { toolPart: t }
2761
2783
  };
2762
2784
  }
2763
2785
  return e.type === "function_call" ? {
2764
2786
  type: "item.started",
2765
- payload: { toolPart: L(Pr(e)) }
2766
- } : e.type === "function_call_output" ? Fr(e.call_id, e.output) : e.type === "custom_tool_call" ? {
2787
+ payload: { toolPart: L(Fr(e)) }
2788
+ } : e.type === "function_call_output" ? Ir(e.call_id, e.output) : e.type === "custom_tool_call" ? {
2767
2789
  type: "item.started",
2768
2790
  payload: { toolPart: L({
2769
2791
  type: "dynamicToolCall",
@@ -2776,7 +2798,7 @@ function Mr(e) {
2776
2798
  success: null,
2777
2799
  durationMs: null
2778
2800
  }) }
2779
- } : e.type === "custom_tool_call_output" ? Fr(e.call_id, e.output, Y(e.name) ?? void 0) : e.type === "tool_search_call" ? {
2801
+ } : e.type === "custom_tool_call_output" ? Ir(e.call_id, e.output, Y(e.name) ?? void 0) : e.type === "tool_search_call" ? {
2780
2802
  type: "item.started",
2781
2803
  payload: { toolPart: L({
2782
2804
  type: "dynamicToolCall",
@@ -2798,7 +2820,7 @@ function Mr(e) {
2798
2820
  payload: { toolPart: L({
2799
2821
  type: "webSearch",
2800
2822
  id: J(e),
2801
- query: zr(e.action),
2823
+ query: Br(e.action),
2802
2824
  action: e.action
2803
2825
  }) }
2804
2826
  } : e.type === "image_generation_call" ? {
@@ -2816,8 +2838,8 @@ function Mr(e) {
2816
2838
  }) }
2817
2839
  } : null;
2818
2840
  }
2819
- function Nr(e) {
2820
- let t = Vr(e.action) ? e.action : {}, n = Array.isArray(t.command) ? Br(t.command) : Y(t.command) ?? "local shell";
2841
+ function Pr(e) {
2842
+ let t = Hr(e.action) ? e.action : {}, n = Array.isArray(t.command) ? Vr(t.command) : Y(t.command) ?? "local shell";
2821
2843
  return {
2822
2844
  type: "commandExecution",
2823
2845
  id: Y(e.call_id) ?? J(e),
@@ -2825,16 +2847,16 @@ function Nr(e) {
2825
2847
  cwd: Y(t.working_directory) ?? "",
2826
2848
  processId: null,
2827
2849
  source: "agent",
2828
- status: Ir(e.status),
2850
+ status: Lr(e.status),
2829
2851
  commandActions: [],
2830
2852
  aggregatedOutput: null,
2831
2853
  exitCode: null,
2832
2854
  durationMs: null
2833
2855
  };
2834
2856
  }
2835
- function Pr(e) {
2836
- let t = Y(e.name) ?? "function_call", n = Rr(e.arguments), r = Y(e.call_id) ?? J(e);
2837
- return t === "shell_command" && Vr(n) ? {
2857
+ function Fr(e) {
2858
+ let t = Y(e.name) ?? "function_call", n = zr(e.arguments), r = Y(e.call_id) ?? J(e);
2859
+ return t === "shell_command" && Hr(n) ? {
2838
2860
  type: "commandExecution",
2839
2861
  id: r,
2840
2862
  command: Y(n.command) ?? t,
@@ -2858,19 +2880,19 @@ function Pr(e) {
2858
2880
  durationMs: null
2859
2881
  };
2860
2882
  }
2861
- function Fr(e, t, n) {
2883
+ function Ir(e, t, n) {
2862
2884
  return {
2863
2885
  type: "item.updated",
2864
2886
  payload: xn(Y(e) ?? "raw-response-output", t, n)
2865
2887
  };
2866
2888
  }
2867
- function Ir(e) {
2889
+ function Lr(e) {
2868
2890
  return e === "completed" ? "completed" : e === "incomplete" || e === "failed" || e === "error" ? "failed" : "inProgress";
2869
2891
  }
2870
- function Lr(e) {
2892
+ function Rr(e) {
2871
2893
  return e === "completed" || e === "failed" || e === "error" || e === "incomplete";
2872
2894
  }
2873
- function Rr(e) {
2895
+ function zr(e) {
2874
2896
  if (typeof e != "string") return e;
2875
2897
  try {
2876
2898
  return JSON.parse(e);
@@ -2878,10 +2900,10 @@ function Rr(e) {
2878
2900
  return e;
2879
2901
  }
2880
2902
  }
2881
- function zr(e) {
2882
- return Vr(e) ? Y(e.query) ?? Y(e.searchTerm) ?? "web search" : "web search";
2883
- }
2884
2903
  function Br(e) {
2904
+ return Hr(e) ? Y(e.query) ?? Y(e.searchTerm) ?? "web search" : "web search";
2905
+ }
2906
+ function Vr(e) {
2885
2907
  return e.map((e) => {
2886
2908
  let t = String(e);
2887
2909
  return /\s/.test(t) ? JSON.stringify(t) : t;
@@ -2893,21 +2915,21 @@ function J(e) {
2893
2915
  function Y(e) {
2894
2916
  return typeof e == "string" && e.length > 0 ? e : null;
2895
2917
  }
2896
- function Vr(e) {
2918
+ function Hr(e) {
2897
2919
  return !!(e && typeof e == "object" && !Array.isArray(e));
2898
2920
  }
2899
2921
  //#endregion
2900
2922
  //#region src/node/codex-surface-events.ts
2901
- function Hr(e, t) {
2923
+ function Ur(e, t) {
2902
2924
  return `${e}\u0000${t}`;
2903
2925
  }
2904
2926
  function X(e) {
2905
2927
  return typeof e == "number" && Number.isFinite(e) ? (/* @__PURE__ */ new Date(e * 1e3)).toISOString() : (/* @__PURE__ */ new Date()).toISOString();
2906
2928
  }
2907
- function Ur(e) {
2929
+ function Wr(e) {
2908
2930
  return typeof e == "number" && Number.isFinite(e) ? (/* @__PURE__ */ new Date(e * 1e3)).toISOString() : null;
2909
2931
  }
2910
- function Wr(e) {
2932
+ function Gr(e) {
2911
2933
  return e ? {
2912
2934
  message: e.message,
2913
2935
  additionalDetails: e.additionalDetails,
@@ -2918,10 +2940,10 @@ function Z(e, t = !1) {
2918
2940
  return {
2919
2941
  id: e.id,
2920
2942
  status: e.status,
2921
- error: Wr(e.error),
2943
+ error: Gr(e.error),
2922
2944
  willRetry: t,
2923
- startedAt: Ur(e.startedAt),
2924
- completedAt: Ur(e.completedAt),
2945
+ startedAt: Wr(e.startedAt),
2946
+ completedAt: Wr(e.completedAt),
2925
2947
  durationMs: e.durationMs ?? null
2926
2948
  };
2927
2949
  }
@@ -2931,18 +2953,18 @@ function Q(e, t) {
2931
2953
  let r = [...e];
2932
2954
  return r.splice(n, 1, t), r;
2933
2955
  }
2934
- function Gr(e, t) {
2956
+ function Kr(e, t) {
2935
2957
  return JSON.stringify(e) === JSON.stringify(t);
2936
2958
  }
2937
- function Kr() {
2959
+ function qr() {
2938
2960
  return `user-${globalThis.crypto.randomUUID()}`;
2939
2961
  }
2940
- function qr() {
2962
+ function Jr() {
2941
2963
  return `queued-prompt-${globalThis.crypto.randomUUID()}`;
2942
2964
  }
2943
2965
  //#endregion
2944
2966
  //#region src/node/codex-surface-subagents.ts
2945
- function Jr(e) {
2967
+ function Yr(e) {
2946
2968
  let t = {};
2947
2969
  for (let [n, r] of Object.entries(e.agentsStates)) r && (t[n] = {
2948
2970
  status: r.status,
@@ -2962,7 +2984,7 @@ function Jr(e) {
2962
2984
  }
2963
2985
  //#endregion
2964
2986
  //#region src/node/codex-surface-items-controller.ts
2965
- var Yr = class {
2987
+ var Xr = class {
2966
2988
  host;
2967
2989
  commandOutputForwardItemIds = /* @__PURE__ */ new Set();
2968
2990
  fileActivityKeys = /* @__PURE__ */ new Set();
@@ -2980,7 +3002,7 @@ var Yr = class {
2980
3002
  for (let e of this.reviewOutputByTurn.keys()) e.startsWith(t) && this.reviewOutputByTurn.delete(e);
2981
3003
  }
2982
3004
  isForwardingCommandOutput(e, t) {
2983
- return this.commandOutputForwardItemIds.has(Hr(e, t));
3005
+ return this.commandOutputForwardItemIds.has(Ur(e, t));
2984
3006
  }
2985
3007
  applyAgentDelta(e) {
2986
3008
  let t = this.host.requireRuntime(e.threadId);
@@ -3043,7 +3065,7 @@ var Yr = class {
3043
3065
  applyRawResponseItem(e) {
3044
3066
  let t = this.host.requireRuntime(e.threadId);
3045
3067
  this.host.markRuntimeTurnActive(t, e.turnId);
3046
- let n = Mr(e.item);
3068
+ let n = Nr(e.item);
3047
3069
  if (!n) return;
3048
3070
  if (n.type === "item.updated") {
3049
3071
  this.applyToolUpdate(e.threadId, e.turnId, n.payload);
@@ -3144,7 +3166,7 @@ var Yr = class {
3144
3166
  if (e.item.type === "agentMessage" || e.item.type === "exitedReviewMode") {
3145
3167
  let t = e.item.type === "agentMessage" ? e.item.text : e.item.review, r = e.item.type === "agentMessage" ? e.item.phase ?? void 0 : void 0;
3146
3168
  if (!t && e.item.type !== "agentMessage") return;
3147
- let i = Hr(e.threadId, e.turnId);
3169
+ let i = Ur(e.threadId, e.turnId);
3148
3170
  if (e.item.type === "agentMessage" && this.reviewOutputByTurn.get(i) === t) return;
3149
3171
  e.item.type === "exitedReviewMode" && this.reviewOutputByTurn.set(i, t);
3150
3172
  let a = new Set(n.messages.map((e) => e.id)), o = this.host.assistantMessageForTurn(e.threadId, e.turnId), s = o ? JSON.stringify(o.parts) : null, c = new Set(o?.parts.flatMap((e) => e.type === "question" ? [e.request.id] : []) ?? []), l = n.messages.flatMap((e) => e.parts).find((t) => t.type === "text" && t.itemId === e.item.id)?.text ?? "", u = e.item.type === "agentMessage" ? gr(e.threadId, e.turnId, e.item) : null, d = u ? "" : t, f = u ? Qn(n.messages, e.threadId, e.turnId, e.item.id) : Zn(n.messages, e.threadId, e.turnId, e.item.id, t, r);
@@ -3230,7 +3252,7 @@ var Yr = class {
3230
3252
  turnId: e.turnId,
3231
3253
  payload: {
3232
3254
  lifecycle: t ? "completed" : "started",
3233
- toolCall: Jr(e.item)
3255
+ toolCall: Yr(e.item)
3234
3256
  }
3235
3257
  });
3236
3258
  return;
@@ -3255,10 +3277,11 @@ var Yr = class {
3255
3277
  let a = this.shouldForwardCommandOutput(e.threadId, t, e.item), o = L(e.item, {
3256
3278
  includeCommandOutput: a,
3257
3279
  cwd: n.cwd
3258
- }), s = _r(e.item);
3259
- if (!o && !s) return;
3260
- let c = s ? !n.messages.some((e) => e.parts.some((e) => e.type === "media" && nr(e, s))) : !1, l = o ? W(n.messages, e.threadId, e.turnId, o) : [...n.messages];
3261
- s && (l = er(l, e.threadId, e.turnId, s)), this.host.patchRuntime(e.threadId, { messages: l });
3280
+ }), s = vr(e.item);
3281
+ if (!o && !s.length) return;
3282
+ let c = s.some((e) => !n.messages.some((t) => t.parts.some((t) => t.type === "media" && nr(t, e)))), l = o ? W(n.messages, e.threadId, e.turnId, o) : [...n.messages];
3283
+ for (let t of s) l = er(l, e.threadId, e.turnId, t, e.item.id);
3284
+ this.host.patchRuntime(e.threadId, { messages: l });
3262
3285
  let u = o ? this.host.messageContainingTool(e.threadId, e.turnId, o.id) : this.host.assistantMessageForTurn(e.threadId, e.turnId);
3263
3286
  u && o && this.host.emitEvent("notification", {
3264
3287
  type: t ? "tool.completed" : "tool.started",
@@ -3268,7 +3291,7 @@ var Yr = class {
3268
3291
  messageId: u.id,
3269
3292
  toolPart: structuredClone(o)
3270
3293
  }
3271
- }), u && o && this.emitFileActivities(e.threadId, e.turnId, u.id, o.id, o, n.cwd), u && s && c && this.host.emitEvent("notification", {
3294
+ }), u && o && this.emitFileActivities(e.threadId, e.turnId, u.id, o.id, o, n.cwd), u && c && this.host.emitEvent("notification", {
3272
3295
  type: "message.updated",
3273
3296
  conversationId: e.threadId,
3274
3297
  turnId: e.turnId,
@@ -3278,7 +3301,7 @@ var Yr = class {
3278
3301
  shouldForwardCommandOutput(e, t, n) {
3279
3302
  let r = "id" in n && typeof n.id == "string" ? n.id : null;
3280
3303
  if (!r) return !1;
3281
- let i = Hr(e, r);
3304
+ let i = Ur(e, r);
3282
3305
  if (!t) {
3283
3306
  let e = _n(n);
3284
3307
  return e ? this.commandOutputForwardItemIds.add(i) : this.commandOutputForwardItemIds.delete(i), e;
@@ -3289,7 +3312,7 @@ var Yr = class {
3289
3312
  applyToolUpdate(e, t, n) {
3290
3313
  let r = this.host.requireRuntime(e);
3291
3314
  this.host.markRuntimeTurnActive(r, t);
3292
- let i = r.cwd && Xr(n) ? {
3315
+ let i = r.cwd && Zr(n) ? {
3293
3316
  ...n,
3294
3317
  metadata: {
3295
3318
  ...n.metadata,
@@ -3358,26 +3381,26 @@ var Yr = class {
3358
3381
  turnId: e.turn.id,
3359
3382
  payload: {
3360
3383
  status: e.turn.status,
3361
- error: Wr(e.turn.error),
3384
+ error: Gr(e.turn.error),
3362
3385
  willRetry: !1,
3363
- startedAt: Ur(e.turn.startedAt),
3364
- completedAt: Ur(e.turn.completedAt),
3386
+ startedAt: Wr(e.turn.startedAt),
3387
+ completedAt: Wr(e.turn.completedAt),
3365
3388
  durationMs: e.turn.durationMs ?? null
3366
3389
  }
3367
3390
  }), this.host.emitConversationActivity(e.threadId, "notification"), t.planMarkdownByTurn.delete(e.turn.id), this.host.sendNextQueuedPrompt(e.threadId);
3368
3391
  }
3369
3392
  };
3370
- function Xr(e) {
3393
+ function Zr(e) {
3371
3394
  if (e.fallbackToolPart?.kind === "fileChange") return !0;
3372
3395
  let t = e.input, n = e.metadata;
3373
- return Zr(t) && Array.isArray(t.changes) || Zr(n) && Array.isArray(n.changes);
3396
+ return Qr(t) && Array.isArray(t.changes) || Qr(n) && Array.isArray(n.changes);
3374
3397
  }
3375
- function Zr(e) {
3398
+ function Qr(e) {
3376
3399
  return typeof e == "object" && !!e;
3377
3400
  }
3378
3401
  //#endregion
3379
3402
  //#region src/node/codex-surface-client-requests-controller.ts
3380
- var Qr = class {
3403
+ var $r = class {
3381
3404
  host;
3382
3405
  pending = /* @__PURE__ */ new Map();
3383
3406
  constructor(e) {
@@ -3659,8 +3682,8 @@ ${JSON.stringify(s)}\n</send_user_message_question_reply>`, t = s.length === 1 ?
3659
3682
  payload: { request: structuredClone(d) }
3660
3683
  }), this.host.emitConversationActivity(n.threadId, "notification"), !0;
3661
3684
  }
3662
- }, $r = 256 * 1024;
3663
- function ei(e) {
3685
+ }, ei = 256 * 1024;
3686
+ function ti(e) {
3664
3687
  return {
3665
3688
  id: e.id,
3666
3689
  model: e.model,
@@ -3685,11 +3708,11 @@ function ei(e) {
3685
3708
  }
3686
3709
  };
3687
3710
  }
3688
- async function ti(e, t) {
3689
- return Promise.all(e.filter((e) => e.enabled).map((e) => ni(e, t)));
3690
- }
3691
3711
  async function ni(e, t) {
3692
- let n = $(e.interface?.brandColor), r = ci(e.interface?.defaultPrompt), [i, a] = await Promise.all([e.interface?.iconSmall ? t(e.interface.iconSmall) : void 0, e.interface?.iconLarge ? t(e.interface.iconLarge) : void 0]);
3712
+ return Promise.all(e.filter((e) => e.enabled).map((e) => ri(e, t)));
3713
+ }
3714
+ async function ri(e, t) {
3715
+ let n = $(e.interface?.brandColor), r = li(e.interface?.defaultPrompt), [i, a] = await Promise.all([e.interface?.iconSmall ? t(e.interface.iconSmall) : void 0, e.interface?.iconLarge ? t(e.interface.iconLarge) : void 0]);
3693
3716
  return {
3694
3717
  name: e.name,
3695
3718
  description: e.description,
@@ -3704,8 +3727,8 @@ async function ni(e, t) {
3704
3727
  enabled: e.enabled
3705
3728
  };
3706
3729
  }
3707
- async function ri(e, t) {
3708
- let n = e.interface, r = ai(n?.composerIconUrl), i = ai(n?.logoUrl), a = ai(n?.logoUrlDark), o = $(n?.displayName) ?? e.name, s = $(n?.shortDescription), c = $(n?.longDescription), l = $(n?.brandColor), u = r ?? i ?? await ii([n?.composerIcon, n?.logo], t), d = r ?? a ?? i ?? await ii([
3730
+ async function ii(e, t) {
3731
+ let n = e.interface, r = oi(n?.composerIconUrl), i = oi(n?.logoUrl), a = oi(n?.logoUrlDark), o = $(n?.displayName) ?? e.name, s = $(n?.shortDescription), c = $(n?.longDescription), l = $(n?.brandColor), u = r ?? i ?? await ai([n?.composerIcon, n?.logo], t), d = r ?? a ?? i ?? await ai([
3709
3732
  n?.composerIcon,
3710
3733
  n?.logoDark,
3711
3734
  n?.logo
@@ -3722,20 +3745,20 @@ async function ri(e, t) {
3722
3745
  enabled: e.enabled
3723
3746
  };
3724
3747
  }
3725
- async function ii(e, t) {
3748
+ async function ai(e, t) {
3726
3749
  for (let n of e) {
3727
3750
  if (!n) continue;
3728
3751
  let e = await t(n);
3729
3752
  if (e) return e;
3730
3753
  }
3731
3754
  }
3732
- function ai(e) {
3755
+ function oi(e) {
3733
3756
  let t = $(e);
3734
3757
  try {
3735
3758
  return new URL(t).protocol === "https:" ? t : void 0;
3736
3759
  } catch {}
3737
3760
  }
3738
- function oi(e) {
3761
+ function si(e) {
3739
3762
  switch (_(e).toLowerCase()) {
3740
3763
  case ".avif": return "image/avif";
3741
3764
  case ".bmp": return "image/bmp";
@@ -3748,23 +3771,23 @@ function oi(e) {
3748
3771
  case ".webp": return "image/webp";
3749
3772
  }
3750
3773
  }
3751
- function si(e, t) {
3774
+ function ci(e, t) {
3752
3775
  let n = t.trim();
3753
3776
  if (!/^[a-z\d+/]+={0,2}$/i.test(n)) return;
3754
3777
  let r = n.replace(/=+$/, "");
3755
3778
  if (r.length % 4 == 1) return;
3756
3779
  let i = n.length - r.length, a = (4 - r.length % 4) % 4;
3757
- if (!(i !== 0 && i !== a) && !(Math.floor(r.length * 3 / 4) > $r)) return `data:${e};base64,${`${r}${"=".repeat((4 - r.length % 4) % 4)}`}`;
3780
+ if (!(i !== 0 && i !== a) && !(Math.floor(r.length * 3 / 4) > ei)) return `data:${e};base64,${`${r}${"=".repeat((4 - r.length % 4) % 4)}`}`;
3758
3781
  }
3759
3782
  function $(e) {
3760
3783
  return (typeof e == "string" ? e.trim() : void 0) || void 0;
3761
3784
  }
3762
- function ci(e) {
3785
+ function li(e) {
3763
3786
  return typeof e == "string" ? e : void 0;
3764
3787
  }
3765
3788
  //#endregion
3766
3789
  //#region src/node/codex-surface-catalog-controller.ts
3767
- var li = class {
3790
+ var ui = class {
3768
3791
  client;
3769
3792
  cwd;
3770
3793
  host;
@@ -3799,7 +3822,7 @@ var li = class {
3799
3822
  async loadSkills(e = !1, t = "action") {
3800
3823
  e && this.iconDataUrls.clear(), this.host.patch({ skillCatalogStatus: "loading" }), this.emitSkills(this.cwd ?? null, [], "loading", t);
3801
3824
  try {
3802
- let n = await ti((await this.client.request("skills/list", {
3825
+ let n = await ni((await this.client.request("skills/list", {
3803
3826
  ...this.cwd ? { cwds: [this.cwd] } : {},
3804
3827
  forceReload: e
3805
3828
  })).data.flatMap((e) => e.skills), (e) => this.iconDataUrl(e));
@@ -3816,7 +3839,7 @@ var li = class {
3816
3839
  }
3817
3840
  async listSkills(e = {}) {
3818
3841
  await this.host.ensureConnected(), e.forceReload && this.iconDataUrls.clear();
3819
- let t = await ti((await this.client.request("skills/list", {
3842
+ let t = await ni((await this.client.request("skills/list", {
3820
3843
  ...e.cwd ? { cwds: [e.cwd] } : {},
3821
3844
  forceReload: e.forceReload ?? !1
3822
3845
  })).data.flatMap((e) => e.skills), (e) => this.iconDataUrl(e));
@@ -3870,7 +3893,7 @@ var li = class {
3870
3893
  }), (async () => ({
3871
3894
  profiles: await this.requestPermissionProfiles(e),
3872
3895
  requirements: (await this.client.request("configRequirements/read", void 0)).requirements
3873
- }))()]), a = r.status === "fulfilled" ? await ti(r.value.data.flatMap((e) => e.skills), (e) => this.iconDataUrl(e)) : [], o = i.status === "fulfilled" ? i.value.profiles : [];
3896
+ }))()]), a = r.status === "fulfilled" ? await ni(r.value.data.flatMap((e) => e.skills), (e) => this.iconDataUrl(e)) : [], o = i.status === "fulfilled" ? i.value.profiles : [];
3874
3897
  return {
3875
3898
  skills: a,
3876
3899
  skillCatalogStatus: r.status === "fulfilled" ? "loaded" : "error",
@@ -3902,7 +3925,7 @@ var li = class {
3902
3925
  cursor: n,
3903
3926
  includeHidden: e
3904
3927
  });
3905
- t.push(...r.data.map(ei)), n = r.nextCursor;
3928
+ t.push(...r.data.map(ti)), n = r.nextCursor;
3906
3929
  } while (n);
3907
3930
  return t;
3908
3931
  }
@@ -3972,7 +3995,7 @@ var li = class {
3972
3995
  try {
3973
3996
  let t = await this.client.request("plugin/installed", { ...e.length > 0 ? { cwds: [...e] } : {} }), n = /* @__PURE__ */ new Map();
3974
3997
  for (let e of t.marketplaces) for (let t of e.plugins) n.has(t.id) || n.set(t.id, t);
3975
- let r = Ht(this.host.getState().plugins, await Promise.all([...n.values()].map((e) => ri(e, (e) => this.iconDataUrl(e)))));
3998
+ let r = Ht(this.host.getState().plugins, await Promise.all([...n.values()].map((e) => ii(e, (e) => this.iconDataUrl(e)))));
3976
3999
  if (this.host.isClosed() || this.host.authenticationBlocksBootstrap()) return;
3977
4000
  this.host.patch({
3978
4001
  plugins: r,
@@ -4003,9 +4026,9 @@ var li = class {
4003
4026
  }
4004
4027
  async readIconDataUrl(e) {
4005
4028
  if (!v(e)) return;
4006
- let t = oi(e);
4029
+ let t = si(e);
4007
4030
  if (t) try {
4008
- return si(t, (await this.client.request("fs/readFile", { path: e })).dataBase64);
4031
+ return ci(t, (await this.client.request("fs/readFile", { path: e })).dataBase64);
4009
4032
  } catch {
4010
4033
  return;
4011
4034
  }
@@ -4013,18 +4036,18 @@ var li = class {
4013
4036
  };
4014
4037
  //#endregion
4015
4038
  //#region src/node/codex-approvals.ts
4016
- function ui(e, t) {
4039
+ function di(e, t) {
4017
4040
  let n = [
4018
4041
  e.onServerRequest("item/commandExecution/requestApproval", (e, n) => (t({
4019
- approval: di(e.id, e.params),
4020
- resolve: (t, r) => n.resolve({ decision: mi(e.params, t, r) })
4042
+ approval: fi(e.id, e.params),
4043
+ resolve: (t, r) => n.resolve({ decision: hi(e.params, t, r) })
4021
4044
  }), !0)),
4022
4045
  e.onServerRequest("item/fileChange/requestApproval", (e, n) => (t({
4023
- approval: fi(e.id, e.params),
4046
+ approval: pi(e.id, e.params),
4024
4047
  resolve: (e, t) => n.resolve({ decision: e === "deny" ? "decline" : t === "session" ? "acceptForSession" : "accept" })
4025
4048
  }), !0)),
4026
4049
  e.onServerRequest("item/permissions/requestApproval", (e, n) => (t({
4027
- approval: pi(e.id, e.params),
4050
+ approval: mi(e.id, e.params),
4028
4051
  resolve: (t, r) => n.resolve({
4029
4052
  permissions: t === "deny" ? {} : {
4030
4053
  ...e.params.permissions.fileSystem ? { fileSystem: e.params.permissions.fileSystem } : {},
@@ -4062,8 +4085,8 @@ function ui(e, t) {
4062
4085
  for (let e of n) e();
4063
4086
  };
4064
4087
  }
4065
- function di(e, t) {
4066
- let n = t.availableDecisions, r = hi(t.additionalPermissions), i = [...t.networkApprovalContext ? [{
4088
+ function fi(e, t) {
4089
+ let n = t.availableDecisions, r = gi(t.additionalPermissions), i = [...t.networkApprovalContext ? [{
4067
4090
  kind: "network",
4068
4091
  enabled: !0,
4069
4092
  host: t.networkApprovalContext.host,
@@ -4086,7 +4109,7 @@ function di(e, t) {
4086
4109
  } : {}
4087
4110
  };
4088
4111
  }
4089
- function fi(e, t) {
4112
+ function pi(e, t) {
4090
4113
  return {
4091
4114
  id: String(e),
4092
4115
  kind: "file-change",
@@ -4097,8 +4120,8 @@ function fi(e, t) {
4097
4120
  ...t.reason || t.grantRoot ? { description: t.reason ?? `Write under ${t.grantRoot}` } : {}
4098
4121
  };
4099
4122
  }
4100
- function pi(e, t) {
4101
- let n = hi(t.permissions);
4123
+ function mi(e, t) {
4124
+ let n = gi(t.permissions);
4102
4125
  return {
4103
4126
  id: String(e),
4104
4127
  kind: "permissions",
@@ -4111,13 +4134,13 @@ function pi(e, t) {
4111
4134
  ...n.length ? { requestedPermissions: n } : {}
4112
4135
  };
4113
4136
  }
4114
- function mi(e, t, n) {
4137
+ function hi(e, t, n) {
4115
4138
  let r = e.availableDecisions, i = t === "deny" ? "decline" : n === "session" ? "acceptForSession" : "accept";
4116
4139
  if (!r || r.includes(i)) return i;
4117
4140
  if (t === "deny" && r.includes("cancel")) return "cancel";
4118
4141
  throw Error(`Approval decision '${t}:${n}' is not available for this command`);
4119
4142
  }
4120
- function hi(e) {
4143
+ function gi(e) {
4121
4144
  if (!e) return [];
4122
4145
  let t = [];
4123
4146
  if (e.network && t.push({
@@ -4137,12 +4160,12 @@ function hi(e) {
4137
4160
  for (let n of e.fileSystem.entries ?? []) t.push({
4138
4161
  kind: "filesystem",
4139
4162
  access: n.access,
4140
- path: gi(n.path)
4163
+ path: _i(n.path)
4141
4164
  });
4142
4165
  }
4143
4166
  return t;
4144
4167
  }
4145
- function gi(e) {
4168
+ function _i(e) {
4146
4169
  if (e.type === "path") return e.path;
4147
4170
  if (e.type === "glob_pattern") return e.pattern;
4148
4171
  let t = e.value;
@@ -4157,12 +4180,12 @@ function gi(e) {
4157
4180
  }
4158
4181
  //#endregion
4159
4182
  //#region src/node/codex-surface-approvals-controller.ts
4160
- var _i = class {
4183
+ var vi = class {
4161
4184
  host;
4162
4185
  pending = /* @__PURE__ */ new Map();
4163
4186
  unsubscribeHandler;
4164
4187
  constructor(e, t) {
4165
- this.host = t, this.unsubscribeHandler = ui(e, (e) => this.add(e));
4188
+ this.host = t, this.unsubscribeHandler = di(e, (e) => this.add(e));
4166
4189
  }
4167
4190
  close() {
4168
4191
  this.unsubscribeHandler(), this.pending.clear();
@@ -4243,7 +4266,7 @@ var _i = class {
4243
4266
  };
4244
4267
  //#endregion
4245
4268
  //#region src/node/codex-surface-mcp.ts
4246
- function vi(e) {
4269
+ function yi(e) {
4247
4270
  if (!Array.isArray(e)) throw TypeError("Codex MCP servers must be an array");
4248
4271
  let t = /* @__PURE__ */ new Set();
4249
4272
  return e.map((e, n) => {
@@ -4252,10 +4275,10 @@ function vi(e) {
4252
4275
  if (!r || !/^[A-Za-z0-9][A-Za-z0-9_-]*$/.test(r)) throw TypeError(`Codex MCP server ${n + 1} name must match ^[A-Za-z0-9][A-Za-z0-9_-]*$`);
4253
4276
  if (t.has(r)) throw Error(`Duplicate Codex MCP server '${r}'`);
4254
4277
  t.add(r);
4255
- let i = yi(e.transport, r), a = e.toolApprovalMode;
4278
+ let i = bi(e.transport, r), a = e.toolApprovalMode;
4256
4279
  if (a !== void 0 && a !== "auto" && a !== "prompt" && a !== "writes" && a !== "approve") throw TypeError(`Codex MCP server '${r}' tool approval mode is invalid`);
4257
4280
  if (e.required !== void 0 && typeof e.required != "boolean") throw TypeError(`Codex MCP server '${r}' required flag must be a boolean`);
4258
- let o = e.enabledTools === void 0 ? void 0 : bi(e.enabledTools, `Codex MCP server '${r}' enabled tool`), s = Si(e.startupTimeoutMs, `Codex MCP server '${r}' startup timeout`), c = Si(e.toolTimeoutMs, `Codex MCP server '${r}' tool timeout`);
4281
+ let o = e.enabledTools === void 0 ? void 0 : xi(e.enabledTools, `Codex MCP server '${r}' enabled tool`), s = Ci(e.startupTimeoutMs, `Codex MCP server '${r}' startup timeout`), c = Ci(e.toolTimeoutMs, `Codex MCP server '${r}' tool timeout`);
4259
4282
  return {
4260
4283
  name: r,
4261
4284
  transport: i,
@@ -4267,7 +4290,7 @@ function vi(e) {
4267
4290
  };
4268
4291
  });
4269
4292
  }
4270
- function yi(e, t) {
4293
+ function bi(e, t) {
4271
4294
  if (!e || typeof e != "object" || Array.isArray(e)) throw TypeError(`Codex MCP server '${t}' transport must be an object`);
4272
4295
  if (e.type === "http") {
4273
4296
  let n = e.url?.trim(), r;
@@ -4285,7 +4308,7 @@ function yi(e, t) {
4285
4308
  if (e.type !== "stdio") throw TypeError(`Codex MCP server '${t}' transport type is invalid`);
4286
4309
  let n = e.command?.trim();
4287
4310
  if (!n) throw TypeError(`Codex MCP server '${t}' command cannot be empty`);
4288
- let r = e.args === void 0 ? void 0 : bi(e.args, `Codex MCP server '${t}' argument`), i = e.cwd?.trim();
4311
+ let r = e.args === void 0 ? void 0 : xi(e.args, `Codex MCP server '${t}' argument`), i = e.cwd?.trim();
4289
4312
  if (i !== void 0 && (!i || !v(i))) throw TypeError(`Codex MCP server '${t}' cwd must be an absolute path`);
4290
4313
  let a;
4291
4314
  if (e.env !== void 0) {
@@ -4296,7 +4319,7 @@ function yi(e, t) {
4296
4319
  a[n] = r;
4297
4320
  }
4298
4321
  }
4299
- let o = e.envVars === void 0 ? void 0 : xi(e.envVars, t);
4322
+ let o = e.envVars === void 0 ? void 0 : Si(e.envVars, t);
4300
4323
  return {
4301
4324
  type: "stdio",
4302
4325
  command: n,
@@ -4306,7 +4329,7 @@ function yi(e, t) {
4306
4329
  ...o === void 0 ? {} : { envVars: o }
4307
4330
  };
4308
4331
  }
4309
- function bi(e, t) {
4332
+ function xi(e, t) {
4310
4333
  if (!Array.isArray(e)) throw TypeError(`${t}s must be an array`);
4311
4334
  let n = e.map((e) => {
4312
4335
  if (typeof e != "string" || !e.trim()) throw TypeError(`${t} cannot be empty`);
@@ -4314,18 +4337,18 @@ function bi(e, t) {
4314
4337
  });
4315
4338
  return [...new Set(n)];
4316
4339
  }
4317
- function xi(e, t) {
4318
- let n = bi(e, `Codex MCP server '${t}' environment variable`);
4340
+ function Si(e, t) {
4341
+ let n = xi(e, `Codex MCP server '${t}' environment variable`);
4319
4342
  for (let e of n) if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)) throw TypeError(`Codex MCP server '${t}' environment variable '${e}' is invalid`);
4320
4343
  return n;
4321
4344
  }
4322
- function Si(e, t) {
4345
+ function Ci(e, t) {
4323
4346
  if (e !== void 0) {
4324
4347
  if (!Number.isFinite(e) || e <= 0) throw TypeError(`${t} must be a positive finite number`);
4325
4348
  return e;
4326
4349
  }
4327
4350
  }
4328
- function Ci(e) {
4351
+ function wi(e) {
4329
4352
  let t = {};
4330
4353
  for (let n of e) {
4331
4354
  let e = n.transport.type === "http" ? { url: n.transport.url } : {
@@ -4339,7 +4362,7 @@ function Ci(e) {
4339
4362
  }
4340
4363
  return t;
4341
4364
  }
4342
- function wi(e, t) {
4365
+ function Ti(e, t) {
4343
4366
  if (t.length !== 0) for (let n of Object.keys(e)) {
4344
4367
  if (n === "mcp_servers") throw Error("Raw mcp_servers config cannot be combined with typed Codex MCP servers");
4345
4368
  for (let e of t) {
@@ -4350,13 +4373,13 @@ function wi(e, t) {
4350
4373
  }
4351
4374
  //#endregion
4352
4375
  //#region src/node/codex-surface-extensions-controller.ts
4353
- var Ti = class {
4376
+ var Ei = class {
4354
4377
  extensions;
4355
4378
  hostOptionsForThread;
4356
4379
  dynamicTools = /* @__PURE__ */ new Map();
4357
4380
  defaultMcpServers;
4358
4381
  constructor(e, t, n) {
4359
- this.extensions = e, this.hostOptionsForThread = n, this.defaultMcpServers = vi(t);
4382
+ this.extensions = e, this.hostOptionsForThread = n, this.defaultMcpServers = yi(t);
4360
4383
  for (let t of e) for (let e of t.dynamicTools ?? []) {
4361
4384
  let t = e.name.trim();
4362
4385
  if (!t) throw Error("Dynamic tool names cannot be empty");
@@ -4380,13 +4403,13 @@ var Ti = class {
4380
4403
  }));
4381
4404
  }
4382
4405
  async conversationExtension(e, t = {}, n = this.defaultMcpServers) {
4383
- let r = Ci(n), i = [], a;
4406
+ let r = wi(n), i = [], a;
4384
4407
  for (let t of this.extensions) {
4385
4408
  if (!t.configureConversation) continue;
4386
4409
  let o = await t.configureConversation(e);
4387
- o.config && (wi(o.config, n), Object.assign(r, o.config)), o.baseInstructions !== void 0 && (a = o.baseInstructions), o.developerInstructions?.trim() && i.push(o.developerInstructions.trim());
4410
+ o.config && (Ti(o.config, n), Object.assign(r, o.config)), o.baseInstructions !== void 0 && (a = o.baseInstructions), o.developerInstructions?.trim() && i.push(o.developerInstructions.trim());
4388
4411
  }
4389
- return t.config && (wi(t.config, n), Object.assign(r, t.config)), t.baseInstructions !== void 0 && (a = t.baseInstructions), t.developerInstructions?.trim() && i.push(t.developerInstructions.trim()), {
4412
+ return t.config && (Ti(t.config, n), Object.assign(r, t.config)), t.baseInstructions !== void 0 && (a = t.baseInstructions), t.developerInstructions?.trim() && i.push(t.developerInstructions.trim()), {
4390
4413
  ...a === void 0 ? {} : { baseInstructions: a },
4391
4414
  ...Object.keys(r).length === 0 ? {} : { config: r },
4392
4415
  ...i.length === 0 ? {} : { developerInstructions: i.join("\n\n") }
@@ -4445,7 +4468,7 @@ var Ti = class {
4445
4468
  });
4446
4469
  }
4447
4470
  }
4448
- }, Ei = 50, Di = 25, Oi = 25, ki = class {
4471
+ }, Di = 50, Oi = 25, ki = 25, Ai = class {
4449
4472
  client;
4450
4473
  conversationLimit;
4451
4474
  host;
@@ -4514,7 +4537,7 @@ var Ti = class {
4514
4537
  let t = await this.client.request("thread/turns/list", {
4515
4538
  threadId: e,
4516
4539
  cursor: null,
4517
- limit: Ei,
4540
+ limit: Di,
4518
4541
  sortDirection: "desc",
4519
4542
  itemsView: "full"
4520
4543
  });
@@ -4562,7 +4585,7 @@ var Ti = class {
4562
4585
  let i = new Set(this.host.requireRuntime(e).turnIds), a = await this.client.request("thread/turns/list", {
4563
4586
  threadId: e,
4564
4587
  cursor: t,
4565
- limit: Di,
4588
+ limit: Oi,
4566
4589
  sortDirection: "desc",
4567
4590
  itemsView: "full"
4568
4591
  }), o = [...a.data].reverse(), s = new Set(o.map((e) => e.id).filter((e) => !i.has(e)));
@@ -4593,8 +4616,8 @@ var Ti = class {
4593
4616
  }
4594
4617
  async emitHistoryChunks(e, t) {
4595
4618
  for (let n = t.length; n > 0;) {
4596
- let r = Math.max(0, n - Oi);
4597
- this.host.emitHistoryPrepended(e, t.slice(r, n), "lifecycle"), await Ai(), n = r;
4619
+ let r = Math.max(0, n - ki);
4620
+ this.host.emitHistoryPrepended(e, t.slice(r, n), "lifecycle"), await ji(), n = r;
4598
4621
  }
4599
4622
  }
4600
4623
  async refreshCompleteHistory(e) {
@@ -4657,12 +4680,12 @@ var Ti = class {
4657
4680
  } : t;
4658
4681
  }
4659
4682
  };
4660
- function Ai() {
4683
+ function ji() {
4661
4684
  return new Promise((e) => setTimeout(e, 0));
4662
4685
  }
4663
4686
  //#endregion
4664
4687
  //#region src/node/codex-surface-conversation-settings-controller.ts
4665
- var ji = class {
4688
+ var Mi = class {
4666
4689
  client;
4667
4690
  defaults;
4668
4691
  host;
@@ -4735,7 +4758,7 @@ var ji = class {
4735
4758
  ...n === void 0 ? {} : { tokenBudget: n }
4736
4759
  });
4737
4760
  if (a.goal.threadId !== e) throw Error(`Codex thread/goal/set returned a goal for '${a.goal.threadId}' instead of '${e}'`);
4738
- let o = !Gr(r.goal, a.goal);
4761
+ let o = !Kr(r.goal, a.goal);
4739
4762
  this.host.patchRuntime(e, { goal: { ...a.goal } }), o && this.host.emitEvent("action", {
4740
4763
  type: "conversation.goalChanged",
4741
4764
  conversationId: e,
@@ -4757,7 +4780,7 @@ var ji = class {
4757
4780
  payload: { goal: null }
4758
4781
  });
4759
4782
  }
4760
- }, Mi = "Review the current code changes (staged, unstaged, and untracked files) and provide prioritized findings.", Ni = class {
4783
+ }, Ni = "Review the current code changes (staged, unstaged, and untracked files) and provide prioritized findings.", Pi = class {
4761
4784
  client;
4762
4785
  host;
4763
4786
  constructor(e, t) {
@@ -4798,13 +4821,13 @@ var ji = class {
4798
4821
  ...e,
4799
4822
  parts: r.type === "uncommittedChanges" ? e.parts.map((e) => e.type === "text" && e.text === "current changes" ? {
4800
4823
  ...e,
4801
- text: Mi
4824
+ text: Ni
4802
4825
  } : e) : e.parts,
4803
4826
  metadata: {
4804
4827
  ...e.metadata,
4805
4828
  reviewPrompt: !0
4806
4829
  }
4807
- } : e), s = Pi(n.messages, i.turn.id, o);
4830
+ } : e), s = Fi(n.messages, i.turn.id, o);
4808
4831
  this.host.patchRuntime(e, {
4809
4832
  busy: n.activeTurnId !== null,
4810
4833
  turnStartPending: !1,
@@ -4933,7 +4956,7 @@ var ji = class {
4933
4956
  return e;
4934
4957
  }
4935
4958
  };
4936
- function Pi(e, t, n) {
4959
+ function Fi(e, t, n) {
4937
4960
  let r = e.findIndex((e) => e.turnId === t);
4938
4961
  return r < 0 ? [...e, ...n] : [
4939
4962
  ...e.slice(0, r),
@@ -4943,7 +4966,7 @@ function Pi(e, t, n) {
4943
4966
  }
4944
4967
  //#endregion
4945
4968
  //#region src/node/codex-surface-messages-controller.ts
4946
- var Fi = class {
4969
+ var Ii = class {
4947
4970
  client;
4948
4971
  host;
4949
4972
  constructor(e, t) {
@@ -5050,13 +5073,13 @@ var Fi = class {
5050
5073
  let i = this.host.requireRuntime(e), a = Ut(this.host.snapshotForRuntime(i), n), o = r?.trim() || t, s = it(nt(t, i.skills), rt(a.skills ?? [], i.skills)), c = Wt(a.attachments ?? []);
5051
5074
  if (i.busy) {
5052
5075
  this.host.patchRuntime(e, { queuedPrompts: [...i.queuedPrompts, {
5053
- id: qr(),
5076
+ id: Jr(),
5054
5077
  text: o,
5055
5078
  ...Object.keys(a).length > 0 ? { options: a } : {}
5056
5079
  }] }), this.emitQueuedPrompts(e);
5057
5080
  return;
5058
5081
  }
5059
- let l = Kr(), u = {
5082
+ let l = qr(), u = {
5060
5083
  id: l,
5061
5084
  role: "user",
5062
5085
  status: "complete",
@@ -5143,7 +5166,7 @@ var Fi = class {
5143
5166
  let i = await this.host.ensureThreadReady(e), a = t.trim(), o = r?.trim() || a;
5144
5167
  if (!a) throw Error("Cannot steer with an empty message");
5145
5168
  if (!i.activeTurnId) throw Error("There is no active turn to steer");
5146
- let s = Wt(n.attachments ?? []), c = Kr(), l = {
5169
+ let s = Wt(n.attachments ?? []), c = qr(), l = {
5147
5170
  id: c,
5148
5171
  kind: "steer",
5149
5172
  role: "user",
@@ -5275,7 +5298,7 @@ var Fi = class {
5275
5298
  if (!e) throw Error("There is no active conversation");
5276
5299
  return e;
5277
5300
  }
5278
- }, Ii = 5, Li = class {
5301
+ }, Li = 5, Ri = class {
5279
5302
  client;
5280
5303
  options;
5281
5304
  catalog;
@@ -5315,7 +5338,7 @@ var Fi = class {
5315
5338
  ...a ? { approvalPreset: a } : {}
5316
5339
  }, r.approvalPresets), s = k(i.models, i.selectedModelId), c = e.model ? At(i.models, e.model) : s, l = c?.model, u = e.reasoningEffort ?? (c?.id === s?.id ? i.selectedReasoningEffort : c ? A(c) : null) ?? void 0, d = e.serviceTier === void 0 ? c?.id === s?.id ? i.selectedServiceTier ?? null : c?.defaultServiceTier ?? null : e.serviceTier;
5317
5340
  jt(c, u), j(c, d);
5318
- let f = t.mcpServers === void 0 ? this.extensions.defaultMcpServers : vi(t.mcpServers), p = await this.extensions.conversationExtension({
5341
+ let f = t.mcpServers === void 0 ? this.extensions.defaultMcpServers : yi(t.mcpServers), p = await this.extensions.conversationExtension({
5319
5342
  operation: "start",
5320
5343
  conversationId: null,
5321
5344
  cwd: n,
@@ -5332,7 +5355,9 @@ var Fi = class {
5332
5355
  ...d === void 0 ? {} : { serviceTier: d },
5333
5356
  ...e.threadSource === void 0 ? {} : { threadSource: e.threadSource },
5334
5357
  serviceName: "codex_app_sdk"
5335
- }), h = Lt(m, i.models, i);
5358
+ });
5359
+ this.host.observeEmptyConversation(m.thread.id);
5360
+ let h = Lt(m, i.models, i);
5336
5361
  u && (await this.client.request("thread/settings/update", {
5337
5362
  threadId: m.thread.id,
5338
5363
  effort: u,
@@ -5430,7 +5455,7 @@ var Fi = class {
5430
5455
  ...n
5431
5456
  }, a = {
5432
5457
  ...i,
5433
- mcpServers: i.mcpServers === void 0 ? this.extensions.defaultMcpServers : vi(i.mcpServers)
5458
+ mcpServers: i.mcpServers === void 0 ? this.extensions.defaultMcpServers : yi(i.mcpServers)
5434
5459
  };
5435
5460
  this.hostOptionsByThread.set(e, a);
5436
5461
  let o = await this.extensions.conversationExtension({
@@ -5448,7 +5473,7 @@ var Fi = class {
5448
5473
  threadId: e,
5449
5474
  excludeTurns: !0,
5450
5475
  initialTurnsPage: {
5451
- limit: Ii,
5476
+ limit: Li,
5452
5477
  sortDirection: "desc",
5453
5478
  itemsView: "full"
5454
5479
  },
@@ -5461,7 +5486,7 @@ var Fi = class {
5461
5486
  let i = t.initialTurnsPage ?? await this.client.request("thread/turns/list", {
5462
5487
  threadId: t.thread.id,
5463
5488
  cursor: null,
5464
- limit: Ii,
5489
+ limit: Li,
5465
5490
  sortDirection: "desc",
5466
5491
  itemsView: "full"
5467
5492
  }), d = [...i.data].reverse(), f = t.cwd ?? t.thread.cwd ?? a.cwd, p = await this.catalog.loadConversationCatalogs(f), m = s.turns.filter((e) => c.get(e.id) !== e), h = s.threadStatus !== u && s.threadStatus ? s.threadStatus : F(t.thread.status), g = d.map((e) => h.type === "idle" && e.status === "inProgress" ? {
@@ -5521,7 +5546,7 @@ var Fi = class {
5521
5546
  threadStatus: structuredClone(t.threadStatus)
5522
5547
  };
5523
5548
  }
5524
- }, Ri = class {
5549
+ }, zi = class {
5525
5550
  authentication;
5526
5551
  approvals;
5527
5552
  catalog;
@@ -5603,7 +5628,7 @@ var Fi = class {
5603
5628
  return;
5604
5629
  }
5605
5630
  case "thread/goal/updated":
5606
- if (Gr(this.host.requireRuntime(e.params.threadId).goal, e.params.goal)) return;
5631
+ if (Kr(this.host.requireRuntime(e.params.threadId).goal, e.params.goal)) return;
5607
5632
  this.host.patchRuntime(e.params.threadId, { goal: { ...e.params.goal } }), this.host.emitEvent("notification", {
5608
5633
  type: "conversation.goalChanged",
5609
5634
  conversationId: e.params.threadId,
@@ -5746,7 +5771,7 @@ var Fi = class {
5746
5771
  durationMs: null
5747
5772
  },
5748
5773
  status: e.params.willRetry ? "inProgress" : "failed",
5749
- error: Wr(e.params.error),
5774
+ error: Gr(e.params.error),
5750
5775
  willRetry: e.params.willRetry
5751
5776
  }),
5752
5777
  ...n ? {
@@ -5758,7 +5783,7 @@ var Fi = class {
5758
5783
  conversationId: e.params.threadId,
5759
5784
  turnId: e.params.turnId,
5760
5785
  payload: {
5761
- error: Wr(e.params.error),
5786
+ error: Gr(e.params.error),
5762
5787
  willRetry: e.params.willRetry
5763
5788
  }
5764
5789
  }), this.host.emitConversationActivity(e.params.threadId, "notification");
@@ -5904,7 +5929,7 @@ var Fi = class {
5904
5929
  default: return this.host.unknownNotification(e);
5905
5930
  }
5906
5931
  }
5907
- }, zi = class {
5932
+ }, Bi = class {
5908
5933
  approvals;
5909
5934
  clientRequests;
5910
5935
  host;
@@ -5965,7 +5990,7 @@ var Fi = class {
5965
5990
  conversationId: e,
5966
5991
  payload: {
5967
5992
  historyLoading: n.historyLoading,
5968
- historyState: Hi(n),
5993
+ historyState: Ui(n),
5969
5994
  error: n.error
5970
5995
  }
5971
5996
  });
@@ -6059,7 +6084,7 @@ var Fi = class {
6059
6084
  reason: t,
6060
6085
  messages: structuredClone(r.messages),
6061
6086
  threadStatus: structuredClone(r.threadStatus),
6062
- state: Bi(r)
6087
+ state: Vi(r)
6063
6088
  }
6064
6089
  });
6065
6090
  }
@@ -6071,7 +6096,7 @@ var Fi = class {
6071
6096
  conversationId: e,
6072
6097
  payload: {
6073
6098
  messages: structuredClone(t.map((e) => r.get(e.id) ?? e)),
6074
- state: Vi(this.require(e))
6099
+ state: Hi(this.require(e))
6075
6100
  }
6076
6101
  });
6077
6102
  }
@@ -6113,7 +6138,7 @@ var Fi = class {
6113
6138
  i && this.emitSummaryUpserted(i, "updated", n);
6114
6139
  }
6115
6140
  };
6116
- function Bi(e) {
6141
+ function Vi(e) {
6117
6142
  return structuredClone({
6118
6143
  activeTurnId: e.activeTurnId,
6119
6144
  answeredClientRequestIds: e.answeredClientRequestIds,
@@ -6122,21 +6147,21 @@ function Bi(e) {
6122
6147
  error: e.error,
6123
6148
  executionPlan: e.executionPlan,
6124
6149
  historyLoading: e.historyLoading,
6125
- historyState: Hi(e),
6150
+ historyState: Ui(e),
6126
6151
  turnGitDiff: e.turnGitDiff,
6127
6152
  turnIds: e.turnIds,
6128
6153
  turns: e.turns
6129
6154
  });
6130
6155
  }
6131
- function Vi(e) {
6156
+ function Hi(e) {
6132
6157
  return structuredClone({
6133
6158
  historyLoading: e.historyLoading,
6134
- historyState: Hi(e),
6159
+ historyState: Ui(e),
6135
6160
  turnIds: e.turnIds,
6136
6161
  turns: e.turns
6137
6162
  });
6138
6163
  }
6139
- function Hi(e) {
6164
+ function Ui(e) {
6140
6165
  return {
6141
6166
  loadingStrategy: e.loadingStrategy,
6142
6167
  hasOlder: e.historyHasOlder,
@@ -6146,7 +6171,7 @@ function Hi(e) {
6146
6171
  }
6147
6172
  //#endregion
6148
6173
  //#region src/node/codex-surface-connection-controller.ts
6149
- var Ui = /* @__PURE__ */ new Set(["compaction_image_budget", "default_mode_request_user_input"]), Wi = class {
6174
+ var Wi = /* @__PURE__ */ new Set(["compaction_image_budget", "default_mode_request_user_input"]), Gi = class {
6150
6175
  client;
6151
6176
  options;
6152
6177
  authentication;
@@ -6209,7 +6234,7 @@ var Ui = /* @__PURE__ */ new Set(["compaction_image_budget", "default_mode_reque
6209
6234
  limit: 100,
6210
6235
  threadId: null
6211
6236
  });
6212
- for (let e of n.data) Ui.has(e.name) && !e.enabled && (t[e.name] = !0);
6237
+ for (let e of n.data) Wi.has(e.name) && !e.enabled && (t[e.name] = !0);
6213
6238
  e = n.nextCursor;
6214
6239
  } while (e);
6215
6240
  Object.keys(t).length > 0 && await this.client.request("experimentalFeature/enablement/set", { enablement: t });
@@ -6343,7 +6368,7 @@ var Ui = /* @__PURE__ */ new Set(["compaction_image_budget", "default_mode_reque
6343
6368
  error: null
6344
6369
  });
6345
6370
  }
6346
- }, Gi = 5, Ki = class {
6371
+ }, Ki = 5, qi = class {
6347
6372
  client;
6348
6373
  loadingStrategy;
6349
6374
  catalog;
@@ -6357,7 +6382,7 @@ var Ui = /* @__PURE__ */ new Set(["compaction_image_budget", "default_mode_reque
6357
6382
  if ((i.busy || i.activeTurnId) && !r.beforeTurnId && (!r.lastTurnId || r.lastTurnId === i.activeTurnId)) throw Error("Cannot fork a conversation while its current turn is still active");
6358
6383
  let a = t.cwd ?? i.cwd ?? n.cwd, o = await this.catalog.loadConversationCatalogs(a ?? void 0), s = this.host.getState(), c = t.model ? At(s.models, t.model) : k(s.models, i.selectedModelId);
6359
6384
  jt(c, t.reasoningEffort), j(c, t.serviceTier);
6360
- let l = n.mcpServers === void 0 ? this.extensions.defaultMcpServers : vi(n.mcpServers), u = await this.extensions.conversationExtension({
6385
+ let l = n.mcpServers === void 0 ? this.extensions.defaultMcpServers : yi(n.mcpServers), u = await this.extensions.conversationExtension({
6361
6386
  operation: "start",
6362
6387
  conversationId: null,
6363
6388
  cwd: a ?? void 0,
@@ -6375,7 +6400,7 @@ var Ui = /* @__PURE__ */ new Set(["compaction_image_budget", "default_mode_reque
6375
6400
  ...u.baseInstructions === void 0 ? {} : { baseInstructions: u.baseInstructions },
6376
6401
  ...u.developerInstructions === void 0 ? {} : { developerInstructions: u.developerInstructions },
6377
6402
  ...u.config === void 0 ? {} : { config: u.config },
6378
- ...qi(t, o.approvalPresets)
6403
+ ...Ji(t, o.approvalPresets)
6379
6404
  });
6380
6405
  if (!d.thread.id || d.thread.id === e) throw Error(`Codex thread/fork returned an invalid new thread id '${d.thread.id}'`);
6381
6406
  t.reasoningEffort && await this.client.request("thread/settings/update", {
@@ -6386,7 +6411,7 @@ var Ui = /* @__PURE__ */ new Set(["compaction_image_budget", "default_mode_reque
6386
6411
  let [f, p] = await Promise.all([this.client.request("thread/turns/list", {
6387
6412
  threadId: d.thread.id,
6388
6413
  cursor: null,
6389
- limit: Gi,
6414
+ limit: Ki,
6390
6415
  sortDirection: "desc",
6391
6416
  itemsView: "full"
6392
6417
  }), this.client.request("thread/goal/get", { threadId: d.thread.id }).then((e) => e.goal).catch(() => null)]), m = [...f.data].reverse(), h = Jn(m), g = fr({
@@ -6428,7 +6453,7 @@ var Ui = /* @__PURE__ */ new Set(["compaction_image_budget", "default_mode_reque
6428
6453
  return this.fork(e, n, r, { lastTurnId: t });
6429
6454
  }
6430
6455
  };
6431
- function qi(e, t) {
6456
+ function Ji(e, t) {
6432
6457
  if (e.approvalPreset) {
6433
6458
  if (!t.includes(e.approvalPreset)) throw Error(`Approval preset '${e.approvalPreset}' is not available`);
6434
6459
  return Pt(e.approvalPreset);
@@ -6440,27 +6465,27 @@ function qi(e, t) {
6440
6465
  }
6441
6466
  //#endregion
6442
6467
  //#region src/node/codex-markdown-images.ts
6443
- var Ji = /(?<!\[)!\[([^\]]*)\]\(([^)\s]+)(?:\s+["']([^"']*)["'])?\)/g, Yi = /* @__PURE__ */ new Set([
6468
+ var Yi = /(?<!\[)!\[([^\]]*)\]\(([^)\s]+)(?:\s+["']([^"']*)["'])?\)/g, Xi = /* @__PURE__ */ new Set([
6444
6469
  ".avif",
6445
6470
  ".gif",
6446
6471
  ".jpeg",
6447
6472
  ".jpg",
6448
6473
  ".png",
6449
6474
  ".webp"
6450
- ]), Xi = class {
6475
+ ]), Zi = class {
6451
6476
  client;
6452
6477
  constructor(e) {
6453
6478
  this.client = e;
6454
6479
  }
6455
6480
  async hydrate(e, t) {
6456
- let n = $i(e);
6457
- return Qi(e, (await Promise.all(Array.from(e.matchAll(Ji), async (e) => {
6481
+ let n = ea(e);
6482
+ return $i(e, (await Promise.all(Array.from(e.matchAll(Yi), async (e) => {
6458
6483
  let r = e.index ?? 0;
6459
- if (ea(r, n)) return null;
6460
- let i = e[2], a = Zi(i, t);
6484
+ if (ta(r, n)) return null;
6485
+ let i = e[2], a = Qi(i, t);
6461
6486
  if (!a) return null;
6462
6487
  try {
6463
- let t = Er((await this.client.request("fs/readFile", { path: a })).dataBase64);
6488
+ let t = Dr((await this.client.request("fs/readFile", { path: a })).dataBase64);
6464
6489
  if (!t) return null;
6465
6490
  let n = e[0].indexOf("](") + 2;
6466
6491
  return {
@@ -6474,7 +6499,7 @@ var Ji = /(?<!\[)!\[([^\]]*)\]\(([^)\s]+)(?:\s+["']([^"']*)["'])?\)/g, Yi = /* @
6474
6499
  }))).filter((e) => e !== null));
6475
6500
  }
6476
6501
  };
6477
- function Zi(e, t) {
6502
+ function Qi(e, t) {
6478
6503
  let n = e.trim();
6479
6504
  if (!n || /[\u0000-\u001f\u007f]/.test(n)) return null;
6480
6505
  let r;
@@ -6489,18 +6514,18 @@ function Zi(e, t) {
6489
6514
  } catch {
6490
6515
  return null;
6491
6516
  }
6492
- if (!Yi.has(_(r).toLowerCase())) return null;
6517
+ if (!Xi.has(_(r).toLowerCase())) return null;
6493
6518
  if (v(r)) return r;
6494
6519
  if (!t || !v(t)) return null;
6495
6520
  let i = x(t, r), a = b(t, i);
6496
6521
  return a === ".." || a.startsWith(`..${S}`) || v(a) ? null : i;
6497
6522
  }
6498
- function Qi(e, t) {
6523
+ function $i(e, t) {
6499
6524
  let n = e;
6500
6525
  for (let e of t.sort((e, t) => t.start - e.start)) n = `${n.slice(0, e.start)}${e.value}${n.slice(e.end)}`;
6501
6526
  return n;
6502
6527
  }
6503
- function $i(e) {
6528
+ function ea(e) {
6504
6529
  let t = [], n = /(^|\n)(```|~~~)/g, r;
6505
6530
  for (; (r = n.exec(e)) !== null;) {
6506
6531
  let i = r[2], a = r[1], o = r.index + a.length, s = RegExp(`(^|\\n)${i}`, "g");
@@ -6521,15 +6546,15 @@ function $i(e) {
6521
6546
  }
6522
6547
  return t;
6523
6548
  }
6524
- function ea(e, t) {
6549
+ function ta(e, t) {
6525
6550
  return t.some((t) => e >= t.start && e <= t.end);
6526
6551
  }
6527
- var ta = /<context>[\s\S]*?<\/context>\s*/g, na = /<in-app-browser-context(?:\s[^>]*)?>[\s\S]*?<\/in-app-browser-context>\s*/g, ra = /^[ \t]*## My request for Codex:[ \t]*$/m;
6528
- async function ia(e, t) {
6552
+ var na = /<context>[\s\S]*?<\/context>\s*/g, ra = /<in-app-browser-context(?:\s[^>]*)?>[\s\S]*?<\/in-app-browser-context>\s*/g, ia = /^[ \t]*## My request for Codex:[ \t]*$/m;
6553
+ async function aa(e, t) {
6529
6554
  let n = D(t);
6530
6555
  return {
6531
6556
  conversationId: n,
6532
- prompts: aa((await e.request("thread/turns/list", {
6557
+ prompts: oa((await e.request("thread/turns/list", {
6533
6558
  threadId: n,
6534
6559
  cursor: null,
6535
6560
  limit: 100,
@@ -6538,20 +6563,20 @@ async function ia(e, t) {
6538
6563
  })).data)
6539
6564
  };
6540
6565
  }
6541
- function aa(e) {
6566
+ function oa(e) {
6542
6567
  return [...e].reverse().flatMap((e) => e.items.flatMap((e) => {
6543
6568
  if (e.type !== "userMessage") return [];
6544
- let t = oa(e.content.flatMap((e) => e.type === "text" ? [e.text] : []).join(""));
6569
+ let t = sa(e.content.flatMap((e) => e.type === "text" ? [e.text] : []).join(""));
6545
6570
  return t && t !== "(no user instructions)" ? [t] : [];
6546
6571
  }));
6547
6572
  }
6548
- function oa(e) {
6549
- let t = e.replace(ta, ""), n = t.replace(na, "");
6550
- return (n === t ? n : n.replace(ra, "")).trim();
6573
+ function sa(e) {
6574
+ let t = e.replace(na, ""), n = t.replace(ra, "");
6575
+ return (n === t ? n : n.replace(ia, "")).trim();
6551
6576
  }
6552
6577
  //#endregion
6553
6578
  //#region src/node/codex-surface-text-generation-controller.ts
6554
- var sa = 12e4, ca = class {
6579
+ var ca = 12e4, la = class {
6555
6580
  client;
6556
6581
  defaultCwd;
6557
6582
  host;
@@ -6562,7 +6587,7 @@ var sa = 12e4, ca = class {
6562
6587
  }
6563
6588
  handleNotification(e) {
6564
6589
  e.method === "thread/started" && e.params.thread.ephemeral && this.hiddenThreadIds.add(e.params.thread.id);
6565
- let t = fa(e);
6590
+ let t = pa(e);
6566
6591
  if (!t || !this.hiddenThreadIds.has(t)) return !1;
6567
6592
  let n = this.pendingByThread.get(t);
6568
6593
  return n && this.consumeNotification(n, e), (e.method === "thread/closed" || e.method === "thread/deleted") && this.hiddenThreadIds.delete(t), !0;
@@ -6570,7 +6595,7 @@ var sa = 12e4, ca = class {
6570
6595
  async generate(e, t = {}) {
6571
6596
  let n = e.trim();
6572
6597
  if (!n) throw Error("Generation prompt cannot be empty");
6573
- if (t.signal?.aborted) throw pa();
6598
+ if (t.signal?.aborted) throw ma();
6574
6599
  await this.host.ensureConnected();
6575
6600
  let r = this.host.getSnapshot(), i = k(r.models, r.selectedModelId), a = t.model ? At(r.models, t.model) : i, o = a?.model, s = t.reasoningEffort ?? (a?.id === i?.id ? r.selectedReasoningEffort : a ? A(a) : null) ?? void 0, c = t.serviceTier === void 0 ? a?.id === i?.id ? r.selectedServiceTier : a?.defaultServiceTier ?? null : t.serviceTier;
6576
6601
  jt(a, s), j(a, c);
@@ -6589,15 +6614,15 @@ var sa = 12e4, ca = class {
6589
6614
  serviceName: "codex_app_sdk",
6590
6615
  threadSource: "sdk_ephemeral_generation"
6591
6616
  }), u = l.thread.id;
6592
- if (!l.thread.ephemeral) throw await la(() => this.client.request("thread/delete", { threadId: u })), Error("Codex app-server did not create an ephemeral generation thread");
6593
- if (this.hiddenThreadIds.add(u), t.signal?.aborted) throw await la(() => this.client.request("thread/unsubscribe", { threadId: u })), this.hiddenThreadIds.delete(u), pa();
6594
- let d = ua();
6617
+ if (!l.thread.ephemeral) throw await ua(() => this.client.request("thread/delete", { threadId: u })), Error("Codex app-server did not create an ephemeral generation thread");
6618
+ if (this.hiddenThreadIds.add(u), t.signal?.aborted) throw await ua(() => this.client.request("thread/unsubscribe", { threadId: u })), this.hiddenThreadIds.delete(u), ma();
6619
+ let d = da();
6595
6620
  this.pendingByThread.set(u, d);
6596
- let f = null, p = !1, m = () => d.reject(pa());
6621
+ let f = null, p = !1, m = () => d.reject(ma());
6597
6622
  t.signal?.addEventListener("abort", m);
6598
6623
  let h = setTimeout(() => {
6599
6624
  d.reject(/* @__PURE__ */ Error("Codex ephemeral generation timed out"));
6600
- }, t.timeoutMs ?? sa);
6625
+ }, t.timeoutMs ?? ca);
6601
6626
  try {
6602
6627
  let e = await this.client.request("turn/start", {
6603
6628
  threadId: u,
@@ -6613,18 +6638,18 @@ var sa = 12e4, ca = class {
6613
6638
  serviceTier: c,
6614
6639
  ...t.outputSchema === void 0 ? {} : { outputSchema: t.outputSchema }
6615
6640
  });
6616
- f = e.turn.id, d.turnId = f, da(d, e.turn);
6641
+ f = e.turn.id, d.turnId = f, fa(d, e.turn);
6617
6642
  let r = await d.promise;
6618
6643
  return p = !0, r;
6619
6644
  } finally {
6620
6645
  if (clearTimeout(h), t.signal?.removeEventListener("abort", m), this.pendingByThread.delete(u), !p && f) {
6621
6646
  let e = f;
6622
- await la(() => this.client.request("turn/interrupt", {
6647
+ await ua(() => this.client.request("turn/interrupt", {
6623
6648
  threadId: u,
6624
6649
  turnId: e
6625
6650
  }));
6626
6651
  }
6627
- await la(() => this.client.request("thread/unsubscribe", { threadId: u })), this.hiddenThreadIds.delete(u);
6652
+ await ua(() => this.client.request("thread/unsubscribe", { threadId: u })), this.hiddenThreadIds.delete(u);
6628
6653
  }
6629
6654
  }
6630
6655
  close(e = /* @__PURE__ */ Error("Codex surface closed")) {
@@ -6647,16 +6672,16 @@ var sa = 12e4, ca = class {
6647
6672
  }
6648
6673
  if (t.method === "turn/completed") {
6649
6674
  if (e.turnId && t.params.turn.id !== e.turnId) return;
6650
- da(e, t.params.turn);
6675
+ fa(e, t.params.turn);
6651
6676
  }
6652
6677
  }
6653
6678
  };
6654
- async function la(e) {
6679
+ async function ua(e) {
6655
6680
  try {
6656
6681
  await e();
6657
6682
  } catch {}
6658
6683
  }
6659
- function ua() {
6684
+ function da() {
6660
6685
  let e, t, n = {
6661
6686
  promise: new Promise((n, r) => {
6662
6687
  e = n, t = r;
@@ -6672,7 +6697,7 @@ function ua() {
6672
6697
  };
6673
6698
  return n.promise.catch(() => void 0), n;
6674
6699
  }
6675
- function da(e, t) {
6700
+ function fa(e, t) {
6676
6701
  for (let n of t.items) {
6677
6702
  if (n.type !== "agentMessage") continue;
6678
6703
  let t = n.text.trim();
@@ -6694,21 +6719,31 @@ function da(e, t) {
6694
6719
  }
6695
6720
  e.resolve({ text: n });
6696
6721
  }
6697
- function fa(e) {
6722
+ function pa(e) {
6698
6723
  if (e.method === "thread/started") return e.params.thread.id;
6699
6724
  let t = e.params;
6700
6725
  return typeof t.threadId == "string" ? t.threadId : null;
6701
6726
  }
6702
- function pa() {
6727
+ function ma() {
6703
6728
  return /* @__PURE__ */ Error("Codex ephemeral generation was aborted");
6704
6729
  }
6705
6730
  //#endregion
6706
6731
  //#region src/node/codex-surface-usage-controller.ts
6707
- var ma = class {
6732
+ var ha = class {
6708
6733
  threads = /* @__PURE__ */ new Map();
6709
6734
  clear() {
6710
6735
  this.threads.clear();
6711
6736
  }
6737
+ observeEmptyConversation(e) {
6738
+ this.threads.has(e) || (this.thread(e).total = {
6739
+ totalTokens: 0,
6740
+ inputTokens: 0,
6741
+ cachedInputTokens: 0,
6742
+ cacheWriteInputTokens: 0,
6743
+ outputTokens: 0,
6744
+ reasoningOutputTokens: 0
6745
+ });
6746
+ }
6712
6747
  observe(e, t) {
6713
6748
  if (!("conversationId" in t)) return t;
6714
6749
  let n = t.conversationId;
@@ -6736,15 +6771,15 @@ var ma = class {
6736
6771
  let e = r.executions.get(r.activeTurnId);
6737
6772
  e && (e.baseline = null), i && (i.baseline = null);
6738
6773
  }
6739
- i && (!ga(a.total) || i.latest && !_a(i.latest.total, a.total)) && (i.baseline = null);
6740
- let s = i?.baseline ? va(i.baseline, a.total) : null;
6774
+ i && (!_a(a.total) || i.latest && !va(i.latest.total, a.total)) && (i.baseline = null);
6775
+ let s = i?.baseline ? ya(i.baseline, a.total) : null;
6741
6776
  i && s === null && (i.baseline = null);
6742
6777
  let c = {
6743
6778
  ...a,
6744
6779
  execution: s,
6745
6780
  observedStart: !!i
6746
6781
  };
6747
- return i && (i.latest = structuredClone(c)), r.total = !o && ga(a.total) ? structuredClone(a.total) : null, r.lastUsageTurnId = t.turnId, {
6782
+ return i && (i.latest = structuredClone(c)), r.total = !o && _a(a.total) ? structuredClone(a.total) : null, r.lastUsageTurnId = t.turnId, {
6748
6783
  ...t,
6749
6784
  payload: { usage: c }
6750
6785
  };
@@ -6758,21 +6793,21 @@ var ma = class {
6758
6793
  executions: /* @__PURE__ */ new Map()
6759
6794
  }, this.threads.set(e, t)), t;
6760
6795
  }
6761
- }, ha = [
6796
+ }, ga = [
6762
6797
  "totalTokens",
6763
6798
  "inputTokens",
6764
6799
  "cachedInputTokens",
6765
6800
  "outputTokens",
6766
6801
  "reasoningOutputTokens"
6767
6802
  ];
6768
- function ga(e) {
6769
- return ha.every((t) => Number.isSafeInteger(e[t]) && e[t] >= 0) && (e.cacheWriteInputTokens === null || Number.isSafeInteger(e.cacheWriteInputTokens) && e.cacheWriteInputTokens >= 0) && e.totalTokens === e.inputTokens + e.outputTokens && e.cachedInputTokens <= e.inputTokens && e.reasoningOutputTokens <= e.outputTokens;
6770
- }
6771
- function _a(e, t) {
6772
- return ha.every((n) => t[n] >= e[n]) && (e.cacheWriteInputTokens === null || t.cacheWriteInputTokens === null || t.cacheWriteInputTokens >= e.cacheWriteInputTokens);
6803
+ function _a(e) {
6804
+ return ga.every((t) => Number.isSafeInteger(e[t]) && e[t] >= 0) && (e.cacheWriteInputTokens === null || Number.isSafeInteger(e.cacheWriteInputTokens) && e.cacheWriteInputTokens >= 0) && e.totalTokens === e.inputTokens + e.outputTokens && e.cachedInputTokens <= e.inputTokens && e.reasoningOutputTokens <= e.outputTokens;
6773
6805
  }
6774
6806
  function va(e, t) {
6775
- if (!ga(e) || !ga(t) || !_a(e, t)) return null;
6807
+ return ga.every((n) => t[n] >= e[n]) && (e.cacheWriteInputTokens === null || t.cacheWriteInputTokens === null || t.cacheWriteInputTokens >= e.cacheWriteInputTokens);
6808
+ }
6809
+ function ya(e, t) {
6810
+ if (!_a(e) || !_a(t) || !va(e, t)) return null;
6776
6811
  let n = {
6777
6812
  totalTokens: t.totalTokens - e.totalTokens,
6778
6813
  inputTokens: t.inputTokens - e.inputTokens,
@@ -6781,11 +6816,11 @@ function va(e, t) {
6781
6816
  outputTokens: t.outputTokens - e.outputTokens,
6782
6817
  reasoningOutputTokens: t.reasoningOutputTokens - e.reasoningOutputTokens
6783
6818
  };
6784
- return ga(n) ? n : null;
6819
+ return _a(n) ? n : null;
6785
6820
  }
6786
6821
  //#endregion
6787
6822
  //#region src/node/codex-surface.ts
6788
- var ya = class {
6823
+ var ba = class {
6789
6824
  options;
6790
6825
  client;
6791
6826
  listeners = /* @__PURE__ */ new Set();
@@ -6816,21 +6851,21 @@ var ya = class {
6816
6851
  unsubscribeToolInputRequests;
6817
6852
  unsubscribeMcpElicitationRequests;
6818
6853
  eventSequence = 0;
6819
- usage = new ma();
6854
+ usage = new ha();
6820
6855
  accountGeneration = 0;
6821
6856
  pendingMarkdownImageHydrations = /* @__PURE__ */ new Set();
6822
6857
  closed = !1;
6823
6858
  state = _t(bt());
6824
6859
  constructor(e = {}) {
6825
- this.options = e, this.extensions = new Ti(e.extensions ?? [], e.mcpServers ?? [], (e) => this.lifecycle.hostOptions(e));
6860
+ this.options = e, this.extensions = new Ei(e.extensions ?? [], e.mcpServers ?? [], (e) => this.lifecycle.hostOptions(e));
6826
6861
  let n = sn(e);
6827
- this.client = e.client ?? new t(on(n) ? new Ke(n) : new Ve(n), e.onListenerError ? { onListenerError: e.onListenerError } : {}), this.markdownImages = new Xi(this.client), this.authentication = new ln(this.client, {
6862
+ this.client = e.client ?? new t(on(n) ? new Ke(n) : new Ve(n), e.onListenerError ? { onListenerError: e.onListenerError } : {}), this.markdownImages = new Zi(this.client), this.authentication = new ln(this.client, {
6828
6863
  bootstrapSurfaceData: (e) => this.connection.bootstrapSurfaceData(e),
6829
6864
  clearAuthenticatedSurfaceData: () => this.connection.clearAuthenticatedSurfaceData(),
6830
6865
  getSnapshot: () => this.getSnapshot(),
6831
6866
  patchAuthentication: (e, t) => this.connection.patchAuthentication(e, t),
6832
6867
  reportError: (e) => this.patch({ error: O(e) })
6833
- }), this.items = new Yr({
6868
+ }), this.items = new Xr({
6834
6869
  assistantMessageForTurn: (e, t) => this.assistantMessageForTurn(e, t),
6835
6870
  emitConversationActivity: (e, t) => this.emitConversationActivity(e, t),
6836
6871
  emitEvent: (e, t) => this.emitEvent(e, t),
@@ -6844,7 +6879,7 @@ var ya = class {
6844
6879
  sendNextQueuedPrompt: (e) => {
6845
6880
  this.messagesController.sendNextQueuedPrompt(e);
6846
6881
  }
6847
- }), this.approvals = new _i(this.client, {
6882
+ }), this.approvals = new vi(this.client, {
6848
6883
  activeConversationId: () => this.state.activeConversationId,
6849
6884
  createRuntime: (e, t) => this.createRuntime(e, t),
6850
6885
  emitConversationActivity: (e, t) => this.emitConversationActivity(e, t),
@@ -6854,7 +6889,7 @@ var ya = class {
6854
6889
  patch: (e) => this.patch(e),
6855
6890
  patchConversationStatus: (e, t) => this.patchConversationStatus(e, t),
6856
6891
  patchRuntime: (e, t) => this.patchRuntime(e, t)
6857
- }), this.clientRequests = new Qr({
6892
+ }), this.clientRequests = new $r({
6858
6893
  activeConversationId: () => this.state.activeConversationId,
6859
6894
  answerAsyncQuestion: (e, t, n) => this.messagesController.answerAsyncQuestion(e, t, n),
6860
6895
  emitConversationActivity: (e, t) => this.emitConversationActivity(e, t),
@@ -6864,13 +6899,13 @@ var ya = class {
6864
6899
  messageContainingTool: (e, t, n) => this.messageContainingTool(e, t, n),
6865
6900
  patchRuntime: (e, t) => this.patchRuntime(e, t),
6866
6901
  requireRuntime: (e) => this.requireRuntime(e)
6867
- }), this.runtimeState = new zi(this.approvals, this.clientRequests, {
6902
+ }), this.runtimeState = new Bi(this.approvals, this.clientRequests, {
6868
6903
  emitEvent: (e, t) => this.emitEvent(e, t),
6869
6904
  getState: () => this.state,
6870
6905
  notifyConversationListeners: (e) => this.notifyConversationListeners(e),
6871
6906
  patch: (e, t) => this.patch(e, t),
6872
6907
  schedulePluginRefresh: () => this.catalog.schedulePluginRefresh()
6873
- }), this.conversationSettings = new ji(this.client, {
6908
+ }), this.conversationSettings = new Mi(this.client, {
6874
6909
  approvalMode: e.approvalMode,
6875
6910
  approvalPreset: e.approvalPreset,
6876
6911
  permissionMode: e.permissionMode
@@ -6888,7 +6923,7 @@ var ya = class {
6888
6923
  patch: (e) => this.patch(e),
6889
6924
  patchRuntime: (e, t) => this.patchRuntime(e, t),
6890
6925
  snapshotForRuntime: (e) => this.snapshotForRuntime(e)
6891
- }), this.turnActions = new Ni(this.client, {
6926
+ }), this.turnActions = new Pi(this.client, {
6892
6927
  createConversation: async () => {
6893
6928
  await this.createConversation();
6894
6929
  },
@@ -6905,7 +6940,7 @@ var ya = class {
6905
6940
  patchConversationTurnCount: (e, t, n) => this.patchConversationTurnCount(e, t, n),
6906
6941
  patchRuntime: (e, t) => this.patchRuntime(e, t),
6907
6942
  sendMessageToThread: (e, t, n) => this.messagesController.sendToThread(e, t, n)
6908
- }), this.messagesController = new Fi(this.client, {
6943
+ }), this.messagesController = new Ii(this.client, {
6909
6944
  clearGoalForThread: (e) => this.conversationSettings.clearGoalForThread(e),
6910
6945
  compactForThread: (e) => this.turnActions.compactForThread(e),
6911
6946
  createConversation: async () => {
@@ -6928,7 +6963,7 @@ var ya = class {
6928
6963
  startReviewForThread: (e, t) => this.turnActions.startReviewForThread(e, t),
6929
6964
  updateSettings: (e) => this.conversationSettings.update(e),
6930
6965
  updateSettingsForThread: (e, t) => this.conversationSettings.updateForThread(e, t)
6931
- }), this.catalog = new li(this.client, e.cwd, {
6966
+ }), this.catalog = new ui(this.client, e.cwd, {
6932
6967
  authenticationBlocksBootstrap: () => this.authentication.blocksBootstrap(),
6933
6968
  emitConversationSkills: (e, t) => this.emitConversationSkills(e, t),
6934
6969
  emitEvent: (e, t) => this.emitEvent(e, t),
@@ -6939,7 +6974,7 @@ var ya = class {
6939
6974
  patchRuntime: (e, t) => this.patchRuntime(e, t),
6940
6975
  preferredApprovalPreset: () => this.conversationSettings.preferredApprovalPreset(),
6941
6976
  runtimes: () => this.runtimeState.values()
6942
- }), this.conversations = new ki(this.client, e.conversationLimit, {
6977
+ }), this.conversations = new Ai(this.client, e.conversationLimit, {
6943
6978
  emitHistoryPrepended: (e, t, n) => this.emitHistoryPrepended(e, t, n),
6944
6979
  emitSummaryUpserted: (e, t, n) => this.emitSummaryUpserted(e, t, n),
6945
6980
  ensureConnected: () => this.ensureConnected(),
@@ -6951,7 +6986,7 @@ var ya = class {
6951
6986
  requireRuntime: (e) => this.requireRuntime(e),
6952
6987
  runtime: (e) => this.runtimeState.get(e),
6953
6988
  schedulePluginRefresh: (e) => this.catalog.schedulePluginRefresh(e)
6954
- }), this.lifecycle = new Li(this.client, e, this.catalog, this.extensions, this.conversationSettings, this.conversations, {
6989
+ }), this.lifecycle = new Ri(this.client, e, this.catalog, this.extensions, this.conversationSettings, this.conversations, {
6955
6990
  activateRuntime: (e) => this.activateRuntime(e),
6956
6991
  createRuntime: (e, t) => this.createRuntime(e, t),
6957
6992
  emitConversationActivity: (e, t) => this.emitConversationActivity(e, t),
@@ -6967,13 +7002,14 @@ var ya = class {
6967
7002
  ensureConnected: () => this.ensureConnected(),
6968
7003
  getSnapshot: () => this.getSnapshot(),
6969
7004
  getState: () => this.state,
7005
+ observeEmptyConversation: (e) => this.usage.observeEmptyConversation(e),
6970
7006
  patch: (e) => this.patch(e),
6971
7007
  patchRuntime: (e, t) => this.patchRuntime(e, t),
6972
7008
  requireRuntime: (e) => this.requireRuntime(e),
6973
7009
  runtime: (e) => this.runtimeState.get(e),
6974
7010
  runtimeProjection: (e) => this.runtimeProjection(e),
6975
7011
  snapshotForRuntime: (e) => this.snapshotForRuntime(e)
6976
- }), this.forks = new Ki(this.client, e.loadingStrategy, this.catalog, this.extensions, {
7012
+ }), this.forks = new qi(this.client, e.loadingStrategy, this.catalog, this.extensions, {
6977
7013
  createRuntime: (e, t) => this.createRuntime(e, t),
6978
7014
  emitConversationActivity: (e) => this.emitConversationActivity(e, "action"),
6979
7015
  emitConversationPermissions: (e) => this.emitConversationPermissions(e, "action"),
@@ -6987,7 +7023,7 @@ var ya = class {
6987
7023
  rememberHostOptions: (e, t) => this.lifecycle.rememberHostOptions(e, t),
6988
7024
  requireRuntime: (e) => this.requireRuntime(e),
6989
7025
  snapshotForRuntime: (e) => this.snapshotForRuntime(e)
6990
- }), this.connection = new Wi(this.client, e, this.authentication, this.approvals, this.catalog, this.clientRequests, this.conversations, this.items, this.lifecycle, this.runtimeState, {
7026
+ }), this.connection = new Gi(this.client, e, this.authentication, this.approvals, this.catalog, this.clientRequests, this.conversations, this.items, this.lifecycle, this.runtimeState, {
6991
7027
  clearConversationHandles: () => this.conversationHandles.clear(),
6992
7028
  clearPendingForThread: (e, t, n) => this.clearPendingForThread(e, t, n),
6993
7029
  closed: () => this.closed,
@@ -6999,7 +7035,7 @@ var ya = class {
6999
7035
  getSnapshot: () => this.getSnapshot(),
7000
7036
  getState: () => this.state,
7001
7037
  patch: (e) => this.patch(e)
7002
- }), this.notifications = new Ri(this.authentication, this.approvals, this.catalog, this.clientRequests, this.conversations, this.items, {
7038
+ }), this.notifications = new zi(this.authentication, this.approvals, this.catalog, this.clientRequests, this.conversations, this.items, {
7003
7039
  clearPendingForThread: (e, t, n) => this.clearPendingForThread(e, t, n),
7004
7040
  createRuntime: (e, t) => this.createRuntime(e, t),
7005
7041
  emitConversationActivity: (e, t) => this.emitConversationActivity(e, t),
@@ -7023,7 +7059,7 @@ var ya = class {
7023
7059
  },
7024
7060
  snapshotForRuntime: (e) => this.snapshotForRuntime(e),
7025
7061
  unknownNotification: (e) => this.handleUnknownNotification(e)
7026
- }), this.textGeneration = new ca(this.client, e.cwd, {
7062
+ }), this.textGeneration = new la(this.client, e.cwd, {
7027
7063
  ensureConnected: () => this.ensureConnected(),
7028
7064
  getSnapshot: () => this.getSnapshot()
7029
7065
  }), this.unsubscribeNotification = this.client.onNotification((e) => {
@@ -7196,7 +7232,7 @@ var ya = class {
7196
7232
  return this.lifecycle.readHistory(e);
7197
7233
  }
7198
7234
  async readConversationPromptHistory(e = this.state.activeConversationId ?? "") {
7199
- return await this.ensureConnected(), ia(this.client, e);
7235
+ return await this.ensureConnected(), aa(this.client, e);
7200
7236
  }
7201
7237
  async loadOlderConversationHistory(e = this.state.activeConversationId ?? "") {
7202
7238
  return this.conversations.loadOlderHistory(D(e));
@@ -7584,19 +7620,19 @@ var ya = class {
7584
7620
  for (let e of this.conversationListeners.keys()) this.notifyConversationListeners(e);
7585
7621
  }
7586
7622
  };
7587
- function ba(e = {}) {
7588
- return new ya(e);
7623
+ function xa(e = {}) {
7624
+ return new ba(e);
7589
7625
  }
7590
7626
  //#endregion
7591
7627
  //#region src/node/codex-app-backend-cache.ts
7592
- var xa = {
7628
+ var Sa = {
7593
7629
  set(e, t) {
7594
7630
  return setTimeout(e, t);
7595
7631
  },
7596
7632
  clear(e) {
7597
7633
  clearTimeout(e);
7598
7634
  }
7599
- }, Sa = class {
7635
+ }, Ca = class {
7600
7636
  options;
7601
7637
  records = /* @__PURE__ */ new Map();
7602
7638
  now;
@@ -7609,7 +7645,7 @@ var xa = {
7609
7645
  constructor(e) {
7610
7646
  if (this.options = e, !Number.isFinite(e.ttlMs) || e.ttlMs <= 0) throw Error("Codex backend cache ttlMs must be greater than zero");
7611
7647
  if (e.sweepIntervalMs !== void 0 && e.sweepIntervalMs !== null && (!Number.isFinite(e.sweepIntervalMs) || e.sweepIntervalMs <= 0)) throw Error("Codex backend cache sweepIntervalMs must be greater than zero");
7612
- this.now = e.now ?? Date.now, this.scheduler = e.scheduler ?? xa, this.sweepIntervalMs = e.sweepIntervalMs ?? null;
7648
+ this.now = e.now ?? Date.now, this.scheduler = e.scheduler ?? Sa, this.sweepIntervalMs = e.sweepIntervalMs ?? null;
7613
7649
  }
7614
7650
  get size() {
7615
7651
  return this.records.size;
@@ -7707,7 +7743,7 @@ var xa = {
7707
7743
  assertOpen() {
7708
7744
  if (this.closed) throw Error("Codex backend cache is closed");
7709
7745
  }
7710
- }, Ca = class {
7746
+ }, wa = class {
7711
7747
  surface;
7712
7748
  moduleServices = /* @__PURE__ */ new Map();
7713
7749
  ttlCaches = /* @__PURE__ */ new Set();
@@ -7723,7 +7759,7 @@ var xa = {
7723
7759
  if (n.has(e)) throw Error(`Duplicate Codex backend module '${e}'`);
7724
7760
  n.add(e);
7725
7761
  }
7726
- this.surface = e.surface ?? new ya(e.surfaceOptions);
7762
+ this.surface = e.surface ?? new ba(e.surfaceOptions);
7727
7763
  for (let { id: e, module: n } of t) this.moduleServices.set(e, n.create({
7728
7764
  surface: this.surface,
7729
7765
  closeBackend: () => this.close(),
@@ -7737,7 +7773,7 @@ var xa = {
7737
7773
  }
7738
7774
  createTtlCache(e) {
7739
7775
  if (this.closePromise) throw Error("Cannot create a cache after the Codex backend is closed");
7740
- let t = new Sa(e);
7776
+ let t = new Ca(e);
7741
7777
  return this.ttlCaches.add(t), t;
7742
7778
  }
7743
7779
  close() {
@@ -7747,16 +7783,16 @@ var xa = {
7747
7783
  await Promise.all([...this.ttlCaches].map((e) => e.close())), await this.surface.close();
7748
7784
  }
7749
7785
  };
7750
- function wa(e = {}) {
7751
- return new Ca(e);
7786
+ function Ta(e = {}) {
7787
+ return new wa(e);
7752
7788
  }
7753
7789
  //#endregion
7754
7790
  //#region src/node/apple-speech-transcription.ts
7755
- async function Ta(e, t = {}, n = {}) {
7791
+ async function Ea(e, t = {}, n = {}) {
7756
7792
  let r = n.fs ?? l, i = n.spawn ?? o, a = n.tmpdir ?? f.tmpdir, s = await r.mkdtemp(h.join(a(), "codex-app-sdk-apple-stt-")), c = h.join(s, "input.wav"), u = h.join(s, "output.txt");
7757
7793
  try {
7758
- let a = await Aa(Ea(n.assetsPath), s, r);
7759
- return await r.writeFile(c, e), await Oa(i, a, Da(c, u, t)), { text: (await r.readFile(u, "utf8")).trim() };
7794
+ let a = await ja(Da(n.assetsPath), s, r);
7795
+ return await r.writeFile(c, e), await ka(i, a, Oa(c, u, t)), { text: (await r.readFile(u, "utf8")).trim() };
7760
7796
  } catch (e) {
7761
7797
  return {
7762
7798
  text: "",
@@ -7769,10 +7805,10 @@ async function Ta(e, t = {}, n = {}) {
7769
7805
  });
7770
7806
  }
7771
7807
  }
7772
- function Ea(e, t = {}) {
7773
- return h.join(e ?? ka(t), "apple-speechanalyzer-cli");
7808
+ function Da(e, t = {}) {
7809
+ return h.join(e ?? Aa(t), "apple-speechanalyzer-cli");
7774
7810
  }
7775
- function Da(e, t, n) {
7811
+ function Oa(e, t, n) {
7776
7812
  let r = [
7777
7813
  "--input-audio-path",
7778
7814
  e,
@@ -7781,7 +7817,7 @@ function Da(e, t, n) {
7781
7817
  ], i = n.locale?.trim();
7782
7818
  return i && r.push("--locale", i), n.live && r.push("--live"), r;
7783
7819
  }
7784
- function Oa(e, t, n) {
7820
+ function ka(e, t, n) {
7785
7821
  return new Promise((r, i) => {
7786
7822
  let a = e(t, n), o = "";
7787
7823
  a.stderr?.on("data", (e) => {
@@ -7797,7 +7833,7 @@ function Oa(e, t, n) {
7797
7833
  });
7798
7834
  });
7799
7835
  }
7800
- function ka(e) {
7836
+ function Aa(e) {
7801
7837
  let t = (e.env ?? process.env).CODEX_APP_SDK_ASSETS_PATH?.trim();
7802
7838
  if (t) return t;
7803
7839
  let n = process.resourcesPath, r = e.resourcesPath === void 0 ? n : e.resourcesPath ?? void 0, i = e.existsSync ?? c;
@@ -7828,18 +7864,18 @@ function ka(e) {
7828
7864
  let u = import.meta.url, d = e.moduleUrl === void 0 ? u : e.moduleUrl ?? void 0, f = d ? h.dirname(ne(d)) : s, p = [h.resolve(f, "../assets"), h.resolve(f, "../../assets")];
7829
7865
  return p.find((e) => i(h.join(e, "apple-speechanalyzer-cli"))) ?? p[0];
7830
7866
  }
7831
- async function Aa(e, t, n) {
7867
+ async function ja(e, t, n) {
7832
7868
  let r = h.join(t, "apple-speechanalyzer-cli");
7833
7869
  return await n.copyFile(e, r), await n.chmod(r, 448), r;
7834
7870
  }
7835
7871
  //#endregion
7836
7872
  //#region src/node/apple-speech-session.ts
7837
- async function ja(e, t, n = {}) {
7873
+ async function Ma(e, t, n = {}) {
7838
7874
  if (n.signal?.throwIfAborted(), !Number.isInteger(e.sampleRate) || e.sampleRate < 8e3 || e.sampleRate > 96e3) throw Error("Unsupported speech sample rate.");
7839
7875
  let r = await se(h.join(m(), "codex-sdk-live-speech-")), i;
7840
7876
  try {
7841
7877
  let t = h.join(r, "apple-speechanalyzer-cli");
7842
- await oe(Ea(n.assetsPath), t), await ae(t, 448), n.signal?.throwIfAborted(), i = (n.spawn ?? o)(t, [
7878
+ await oe(Da(n.assetsPath), t), await ae(t, 448), n.signal?.throwIfAborted(), i = (n.spawn ?? o)(t, [
7843
7879
  "--stream",
7844
7880
  "--sample-rate",
7845
7881
  String(e.sampleRate),
@@ -7941,6 +7977,6 @@ async function ja(e, t, n = {}) {
7941
7977
  };
7942
7978
  }
7943
7979
  //#endregion
7944
- export { Ca as CodexAppBackend, Sa as CodexAppBackendTtlCache, Ve as CodexAppServerStdioTransport, Ke as CodexAppServerUnixSocketTransport, ya as CodexSurface, _r as codexItemToMediaPart, hr as codexItemToSurfaceMessage, L as codexItemToToolPart, me as codexRuntimePathEntries, fr as codexThreadToSurfaceMessages, mr as codexTurnToSurfaceMessages, wa as createCodexAppBackend, ba as createCodexSurface, pe as discoverCodexExecutable, pr as preserveHistoricalAttachmentPreviews, Ea as resolveAppleSpeechAnalyzerPath, ge as resolveCodexRuntime, ja as startAppleSpeechSession, Ta as transcribeWithAppleSpeechAnalyzer, he as withCodexRuntimePath };
7980
+ export { wa as CodexAppBackend, Ca as CodexAppBackendTtlCache, Ve as CodexAppServerStdioTransport, Ke as CodexAppServerUnixSocketTransport, ba as CodexSurface, _r as codexItemToMediaPart, hr as codexItemToSurfaceMessage, L as codexItemToToolPart, me as codexRuntimePathEntries, fr as codexThreadToSurfaceMessages, mr as codexTurnToSurfaceMessages, Ta as createCodexAppBackend, xa as createCodexSurface, pe as discoverCodexExecutable, pr as preserveHistoricalAttachmentPreviews, Da as resolveAppleSpeechAnalyzerPath, ge as resolveCodexRuntime, Ma as startAppleSpeechSession, Ea as transcribeWithAppleSpeechAnalyzer, he as withCodexRuntimePath };
7945
7981
 
7946
7982
  //# sourceMappingURL=index.js.map