bloby-bot 0.32.0 → 0.32.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -57,12 +57,15 @@ const MODELS: Record<string, { id: string; label: string }[]> = {
57
57
  { id: 'claude-haiku-4-5', label: 'Haiku 4.5' },
58
58
  ],
59
59
  openai: [
60
- { id: 'gpt-5.2-codex:medium', label: 'GPT-5.2 Codex Medium' },
61
- { id: 'gpt-5.2-codex:high', label: 'GPT-5.2 Codex High' },
62
- { id: 'gpt-5.2-codex:xhigh', label: 'GPT-5.2 Codex Extra High' },
63
- { id: 'gpt-5.3-codex:medium', label: 'GPT-5.3 Codex Medium (Pro)' },
64
- { id: 'gpt-5.3-codex:high', label: 'GPT-5.3 Codex High (Pro)' },
65
- { id: 'gpt-5.3-codex:xhigh', label: 'GPT-5.3 Codex Extra High (Pro)' },
60
+ { id: 'gpt-5.5:high', label: 'GPT-5.5 High' },
61
+ { id: 'gpt-5.5:medium', label: 'GPT-5.5 Medium' },
62
+ { id: 'gpt-5.5:xhigh', label: 'GPT-5.5 Extra High' },
63
+ { id: 'gpt-5.4:medium', label: 'GPT-5.4 Medium' },
64
+ { id: 'gpt-5.4:high', label: 'GPT-5.4 High' },
65
+ { id: 'gpt-5.4:xhigh', label: 'GPT-5.4 Extra High' },
66
+ { id: 'gpt-5.4-mini:medium', label: 'GPT-5.4-Mini Medium' },
67
+ { id: 'gpt-5.4-mini:high', label: 'GPT-5.4-Mini High' },
68
+ { id: 'gpt-5.4-mini:xhigh', label: 'GPT-5.4-Mini Extra High' },
66
69
  ],
67
70
  };
68
71
 
@@ -77,22 +80,39 @@ const HANDLES = [
77
80
 
78
81
  function ModelDropdown({ models, value, onChange }: { models: { id: string; label: string }[]; value: string; onChange: (id: string) => void }) {
79
82
  const [open, setOpen] = useState(false);
80
- const ref = useRef<HTMLDivElement>(null);
83
+ const [pos, setPos] = useState<{ top: number; left: number; width: number } | null>(null);
84
+ const btnRef = useRef<HTMLButtonElement>(null);
85
+ const menuRef = useRef<HTMLDivElement>(null);
81
86
 
82
87
  useEffect(() => {
83
88
  if (!open) return;
89
+ const recalc = () => {
90
+ const r = btnRef.current?.getBoundingClientRect();
91
+ if (r) setPos({ top: r.bottom + 4, left: r.left, width: r.width });
92
+ };
93
+ recalc();
84
94
  const handler = (e: MouseEvent) => {
85
- if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);
95
+ const t = e.target as Node;
96
+ if (btnRef.current?.contains(t)) return;
97
+ if (menuRef.current?.contains(t)) return;
98
+ setOpen(false);
86
99
  };
87
100
  document.addEventListener('mousedown', handler);
88
- return () => document.removeEventListener('mousedown', handler);
101
+ window.addEventListener('resize', recalc);
102
+ window.addEventListener('scroll', recalc, true);
103
+ return () => {
104
+ document.removeEventListener('mousedown', handler);
105
+ window.removeEventListener('resize', recalc);
106
+ window.removeEventListener('scroll', recalc, true);
107
+ };
89
108
  }, [open]);
90
109
 
91
110
  const selected = models.find((m) => m.id === value);
92
111
 
93
112
  return (
94
- <div className="relative" ref={ref}>
113
+ <div className="relative">
95
114
  <button
115
+ ref={btnRef}
96
116
  type="button"
97
117
  onClick={() => setOpen((o) => !o)}
98
118
  className="w-full flex items-center justify-between bg-white/[0.03] border border-white/[0.08] text-white rounded-xl px-4 py-2.5 text-[13px] outline-none hover:border-white/15 focus:border-[#AF27E3]/30 transition-colors"
@@ -102,8 +122,12 @@ function ModelDropdown({ models, value, onChange }: { models: { id: string; labe
102
122
  </span>
103
123
  <ChevronDown className={`h-4 w-4 text-white/30 transition-transform ${open ? 'rotate-180' : ''}`} />
104
124
  </button>
105
- {open && (
106
- <div className="absolute left-0 right-0 top-full mt-1 bg-[#222] border border-white/[0.08] rounded-xl shadow-xl py-1 z-10 max-h-48 overflow-y-auto">
125
+ {open && pos && (
126
+ <div
127
+ ref={menuRef}
128
+ style={{ position: 'fixed', top: pos.top, left: pos.left, width: pos.width, zIndex: 60 }}
129
+ className="bg-[#222] border border-white/[0.08] rounded-xl shadow-xl py-1 max-h-[320px] overflow-y-auto"
130
+ >
107
131
  {models.map((m) => (
108
132
  <button
109
133
  key={m.id}
@@ -535,7 +559,7 @@ export default function OnboardWizard({ onComplete, isInitialSetup = false, onSa
535
559
  if (codexDeviceState === 'pending') fetch('/api/auth/codex/device/cancel', { method: 'POST' });
536
560
  }
537
561
  setProvider(id);
538
- setModel('');
562
+ setModel(id === 'openai' ? 'gpt-5.5:high' : '');
539
563
  setOauthStarted(false);
540
564
  setAnthropicCode('');
541
565
  setAnthropicError(undefined);