@opengeni/react 0.29.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.
Files changed (207) hide show
  1. package/dist/approvals.d.ts +14 -0
  2. package/dist/{chunk-M7X4JZOD.js → chunk-4QOQ2DSR.js} +8 -1
  3. package/dist/chunk-4QOQ2DSR.js.map +1 -0
  4. package/dist/{chunk-HQFPO7VX.js → chunk-7CJOAW3V.js} +24 -3
  5. package/dist/{chunk-HQFPO7VX.js.map → chunk-7CJOAW3V.js.map} +1 -1
  6. package/dist/{chunk-CSJBF3QJ.js → chunk-A2WITZTI.js} +377 -113
  7. package/dist/chunk-A2WITZTI.js.map +1 -0
  8. package/dist/{chunk-BC6RKIHS.js → chunk-GZ4KR67U.js} +11 -11
  9. package/dist/{chunk-AVLMIWYO.js → chunk-KZRUYCL4.js} +12 -6
  10. package/dist/chunk-KZRUYCL4.js.map +1 -0
  11. package/dist/{chunk-OKXCECLG.js → chunk-TCCE5ZU5.js} +171 -22
  12. package/dist/chunk-TCCE5ZU5.js.map +1 -0
  13. package/dist/chunk-U255M5EZ.js +178 -0
  14. package/dist/chunk-U255M5EZ.js.map +1 -0
  15. package/dist/{chunk-IPVOVOW6.js → chunk-WY2QN2CX.js} +2539 -2174
  16. package/dist/chunk-WY2QN2CX.js.map +1 -0
  17. package/dist/chunk-ZNNE2VES.js +6413 -0
  18. package/dist/chunk-ZNNE2VES.js.map +1 -0
  19. package/dist/client.d.ts +33 -0
  20. package/dist/commands/index.d.ts +3 -0
  21. package/dist/commands/registry.d.ts +41 -0
  22. package/dist/commands/types.d.ts +85 -0
  23. package/dist/components/approval-surface.d.ts +28 -0
  24. package/dist/components/chat-composer.d.ts +51 -0
  25. package/dist/components/code-editor.d.ts +43 -0
  26. package/dist/components/command-palette.d.ts +25 -0
  27. package/dist/components/composer-transcription-control.d.ts +36 -0
  28. package/dist/components/composer.d.ts +277 -0
  29. package/dist/components/copy-button.d.ts +26 -0
  30. package/dist/components/desktop-viewer.d.ts +85 -0
  31. package/dist/components/diff-view.d.ts +38 -0
  32. package/dist/components/enrollment-consent.d.ts +33 -0
  33. package/dist/components/enrollment-device-flow.d.ts +27 -0
  34. package/dist/components/file-browser.d.ts +47 -0
  35. package/dist/components/fleet-tile.d.ts +18 -0
  36. package/dist/components/human-input-form.d.ts +47 -0
  37. package/dist/components/machine-card.d.ts +21 -0
  38. package/dist/components/machine-dock-bar.d.ts +31 -0
  39. package/dist/components/machine-health-pill.d.ts +9 -0
  40. package/dist/components/machine-metrics.d.ts +15 -0
  41. package/dist/components/machine-status-pill.d.ts +54 -0
  42. package/dist/components/machines/health.d.ts +25 -0
  43. package/dist/components/machines/machine-detail.d.ts +14 -0
  44. package/dist/components/machines/metric-history-chart.d.ts +24 -0
  45. package/dist/components/machines/metric-sparkline.d.ts +9 -0
  46. package/dist/components/machines/series.d.ts +24 -0
  47. package/dist/components/machines-dashboard.d.ts +30 -0
  48. package/dist/components/markdown.d.ts +31 -0
  49. package/dist/components/message-timeline.d.ts +98 -0
  50. package/dist/components/model-picker.d.ts +19 -0
  51. package/dist/components/pierre-diff.d.ts +34 -0
  52. package/dist/components/pierre-file.d.ts +27 -0
  53. package/dist/components/queue-draft-policy.d.ts +7 -0
  54. package/dist/components/queue-surface-implementation.d.ts +20 -0
  55. package/dist/components/queue-surface-state.d.ts +12 -0
  56. package/dist/components/queue-surface.d.ts +12 -0
  57. package/dist/components/sandbox-files.d.ts +49 -0
  58. package/dist/components/sandbox-terminal.d.ts +123 -0
  59. package/dist/components/sandbox-workspace.d.ts +128 -0
  60. package/dist/components/session-chrome.d.ts +70 -0
  61. package/dist/components/session-status.d.ts +25 -0
  62. package/dist/components/soften-streaming-markdown.d.ts +13 -0
  63. package/dist/components/stream-reveal.d.ts +37 -0
  64. package/dist/components/tip-follow.d.ts +139 -0
  65. package/dist/components/tooltip.d.ts +16 -0
  66. package/dist/components/workbench-changes.d.ts +34 -0
  67. package/dist/components/workspace-dock.d.ts +35 -0
  68. package/dist/composer.d.ts +11 -7
  69. package/dist/composer.js +9 -6
  70. package/dist/hooks/internal.d.ts +46 -0
  71. package/dist/hooks/use-available-models.d.ts +37 -0
  72. package/dist/hooks/use-billing-usage.d.ts +26 -0
  73. package/dist/hooks/use-codex-accounts.d.ts +69 -0
  74. package/dist/{use-composer-ClHy1rkL.d.ts → hooks/use-composer.d.ts} +16 -24
  75. package/dist/hooks/use-desktop-stream.d.ts +43 -0
  76. package/dist/hooks/use-environments.d.ts +35 -0
  77. package/dist/{use-file-attachments-BmT8WtqO.d.ts → hooks/use-file-attachments.d.ts} +6 -9
  78. package/dist/hooks/use-goal.d.ts +46 -0
  79. package/dist/hooks/use-human-input.d.ts +26 -0
  80. package/dist/hooks/use-last-started-turn-policy.d.ts +27 -0
  81. package/dist/hooks/use-machine-chip.d.ts +54 -0
  82. package/dist/hooks/use-machines.d.ts +81 -0
  83. package/dist/hooks/use-packs.d.ts +27 -0
  84. package/dist/hooks/use-relay-frame-stream.d.ts +53 -0
  85. package/dist/hooks/use-rigs.d.ts +87 -0
  86. package/dist/hooks/use-sandbox-files.d.ts +108 -0
  87. package/dist/hooks/use-sandbox-git.d.ts +58 -0
  88. package/dist/hooks/use-sandbox-terminal.d.ts +62 -0
  89. package/dist/hooks/use-scheduled-tasks.d.ts +15 -0
  90. package/dist/hooks/use-session-capabilities.d.ts +83 -0
  91. package/dist/hooks/use-session-control.d.ts +22 -0
  92. package/dist/hooks/use-session-events.d.ts +92 -0
  93. package/dist/hooks/use-session-lineage.d.ts +17 -0
  94. package/dist/hooks/use-session-mcp-approval-policy.d.ts +23 -0
  95. package/dist/hooks/use-session.d.ts +23 -0
  96. package/dist/hooks/use-slash-commands.d.ts +66 -0
  97. package/dist/hooks/use-terminal-stream.d.ts +46 -0
  98. package/dist/hooks/use-transcription.d.ts +73 -0
  99. package/dist/hooks/use-turn-queue.d.ts +44 -0
  100. package/dist/hooks/use-voice-input.d.ts +25 -0
  101. package/dist/hooks/use-windowed-sections.d.ts +42 -0
  102. package/dist/hooks/use-workspace-capture.d.ts +49 -0
  103. package/dist/hooks/use-workspace-edit.d.ts +73 -0
  104. package/dist/hooks/use-workspace-sessions.d.ts +30 -0
  105. package/dist/hooks/use-workspaces.d.ts +22 -0
  106. package/dist/human-input.d.ts +18 -0
  107. package/dist/index.d.ts +144 -2119
  108. package/dist/index.js +421 -324
  109. package/dist/index.js.map +1 -1
  110. package/dist/lib/clipboard.d.ts +7 -0
  111. package/dist/lib/cn.d.ts +3 -0
  112. package/dist/lib/format.d.ts +48 -0
  113. package/dist/lib/git-patch.d.ts +8 -0
  114. package/dist/lib/motion-inspect.d.ts +5 -0
  115. package/dist/lib/motion.d.ts +14 -0
  116. package/dist/lib/noto-sans-arabic-loader.d.ts +1 -0
  117. package/dist/lib/noto-sans-jp-loader.generated.d.ts +1 -0
  118. package/dist/lib/relay-wire.d.ts +30 -0
  119. package/dist/lib/use-portal-token-style.d.ts +9 -0
  120. package/dist/lib/use-theme-type.d.ts +5 -0
  121. package/dist/lib/use-unicode-fonts.d.ts +12 -0
  122. package/dist/lib/xterm-renderer.d.ts +19 -0
  123. package/dist/lib/xterm-theme.d.ts +75 -0
  124. package/dist/machines.d.ts +30 -413
  125. package/dist/machines.js +3 -3
  126. package/dist/model-policy.d.ts +32 -0
  127. package/dist/model-policy.js +33 -0
  128. package/dist/model-policy.js.map +1 -0
  129. package/dist/provider.d.ts +16 -0
  130. package/dist/{queue-surface-implementation-UQ535OKQ.js → queue-surface-implementation-THPAKGMD.js} +2 -2
  131. package/dist/{queue-surface-implementation-UQ535OKQ.js.map → queue-surface-implementation-THPAKGMD.js.map} +1 -1
  132. package/dist/session-context.d.ts +82 -0
  133. package/dist/session-ui.d.ts +10 -7
  134. package/dist/session-ui.js +9 -5
  135. package/dist/session.d.ts +28 -6
  136. package/dist/session.js +11 -11
  137. package/dist/timeline/activity-rail.d.ts +19 -0
  138. package/dist/timeline/disclosure-context.d.ts +14 -0
  139. package/dist/timeline/entrance.d.ts +14 -0
  140. package/dist/timeline/fleet-decision-projection.d.ts +9 -0
  141. package/dist/timeline/fleet-decision-row.d.ts +11 -0
  142. package/dist/timeline/fold-memory.d.ts +15 -0
  143. package/dist/timeline/index.d.ts +18 -0
  144. package/dist/timeline/parsers.d.ts +96 -0
  145. package/dist/timeline/projection.d.ts +38 -0
  146. package/dist/timeline/registry.d.ts +40 -0
  147. package/dist/timeline/screenshot-lightbox.d.ts +26 -0
  148. package/dist/timeline/seen-activity-ids.d.ts +2 -0
  149. package/dist/timeline/shared.d.ts +125 -0
  150. package/dist/timeline/tool-diff.d.ts +8 -0
  151. package/dist/timeline/tool-display-name.d.ts +10 -0
  152. package/dist/timeline/tool-renderers.d.ts +5 -0
  153. package/dist/timeline/turn-summary.d.ts +116 -0
  154. package/dist/{use-turn-queue-D_1a8W_l.d.ts → timeline/types.d.ts} +41 -69
  155. package/dist/types/machines.d.ts +11 -0
  156. package/package.json +8 -4
  157. package/src/client.ts +1 -0
  158. package/src/components/composer-transcription-control.tsx +278 -130
  159. package/src/components/composer.tsx +20 -15
  160. package/src/components/copy-button.tsx +127 -0
  161. package/src/components/markdown.tsx +231 -32
  162. package/src/components/message-timeline.tsx +1304 -378
  163. package/src/components/model-picker.tsx +83 -43
  164. package/src/components/queue-surface-implementation.tsx +1 -1
  165. package/src/components/session-chrome.tsx +942 -0
  166. package/src/components/soften-streaming-markdown.ts +205 -0
  167. package/src/components/stream-reveal.ts +195 -0
  168. package/src/components/tip-follow.ts +459 -0
  169. package/src/components/tooltip.tsx +103 -0
  170. package/src/composer.ts +6 -0
  171. package/src/hooks/internal.ts +30 -4
  172. package/src/hooks/use-available-models.ts +51 -4
  173. package/src/hooks/use-composer.ts +23 -3
  174. package/src/hooks/use-last-started-turn-policy.ts +95 -0
  175. package/src/hooks/use-session-events.ts +359 -5
  176. package/src/hooks/use-voice-input.ts +232 -0
  177. package/src/index.ts +47 -1
  178. package/src/lib/clipboard.ts +58 -0
  179. package/src/lib/format.ts +18 -0
  180. package/src/lib/motion-inspect.ts +5 -0
  181. package/src/lib/motion.ts +80 -0
  182. package/src/model-policy.ts +210 -0
  183. package/src/session-ui.ts +7 -0
  184. package/src/timeline/activity-rail.tsx +46 -7
  185. package/src/timeline/entrance.tsx +10 -0
  186. package/src/timeline/fold-memory.ts +52 -0
  187. package/src/timeline/index.ts +9 -1
  188. package/src/timeline/projection.ts +226 -41
  189. package/src/timeline/seen-activity-ids.ts +19 -0
  190. package/src/timeline/shared.tsx +1 -1
  191. package/src/timeline/tool-renderers.tsx +75 -6
  192. package/src/timeline/turn-summary.tsx +387 -97
  193. package/src/timeline/types.ts +21 -0
  194. package/styles/index.css +99 -7
  195. package/styles/tokens.css +44 -3
  196. package/dist/chunk-AVLMIWYO.js.map +0 -1
  197. package/dist/chunk-CSJBF3QJ.js.map +0 -1
  198. package/dist/chunk-IPVOVOW6.js.map +0 -1
  199. package/dist/chunk-M7X4JZOD.js.map +0 -1
  200. package/dist/chunk-OKXCECLG.js.map +0 -1
  201. package/dist/chunk-ZMNPFZWL.js +0 -3918
  202. package/dist/chunk-ZMNPFZWL.js.map +0 -1
  203. package/dist/composer-BMzimGTO.d.ts +0 -528
  204. package/dist/session-DaONt-dY.d.ts +0 -264
  205. package/dist/session-context-CAjlaeZb.d.ts +0 -84
  206. package/dist/session-ui-B5_roA95.d.ts +0 -259
  207. /package/dist/{chunk-BC6RKIHS.js.map → chunk-GZ4KR67U.js.map} +0 -0
@@ -1,58 +1,90 @@
1
1
  import type { ClientModel } from "@opengeni/sdk";
2
2
  import { ChevronDownIcon } from "lucide-react";
3
3
  import { useId, useMemo } from "react";
4
+ import { groupPickerRowsByBillingClass, type PickerModelRow } from "../model-policy";
4
5
  import { cn } from "../lib/cn";
5
6
 
6
7
  export type ModelPickerProps = {
7
- /** The host-exposed models to choose from (typically {@link useAvailableModels}). */
8
- models: ClientModel[];
9
- /** Controlled selection the model id, or undefined for "nothing chosen yet". */
8
+ /** Legacy host config models grouped by provider. */
9
+ models?: ClientModel[] | undefined;
10
+ /** Catalog-backed rows grouped by billing class. Preferred when available. */
11
+ rows?: PickerModelRow[] | undefined;
10
12
  value?: string | undefined;
11
- /** Called with the chosen model id when the operator picks a row. */
12
13
  onChange: (modelId: string) => void;
13
14
  disabled?: boolean | undefined;
14
15
  className?: string | undefined;
15
- /** Visible-to-assistive-technology label. Defaults to "Model". */
16
16
  label?: string | undefined;
17
+ /**
18
+ * When true (remote compaction v2), non-Codex models remain listed but are
19
+ * disabled. Same picker chrome — only selectability changes.
20
+ */
21
+ codexOnly?: boolean | undefined;
17
22
  };
18
23
 
19
- /**
20
- * The model picker — a compact dropdown for the composer footer, grouping the
21
- * host-exposed models by `providerLabel` (so "OpenAI" and "Fireworks AI" head
22
- * their own sections) and showing each model's display `label`. A native
23
- * `<select>` keeps it keyboard- and screen-reader-accessible for free and
24
- * themes via the package's og-* tokens; the chevron is a decorative overlay.
25
- *
26
- * Controlled: the host owns `value`/`onChange` and threads the selection into
27
- * the send path. Renders nothing when no models are exposed, so a single-model
28
- * deployment shows no chrome.
29
- */
24
+ const EMPTY_CLIENT_MODELS: ClientModel[] = [];
25
+
26
+ function isCodexClientModel(model: ClientModel): boolean {
27
+ return model.id.startsWith("codex/") || model.provider === "codex-subscription";
28
+ }
29
+
30
+ function isCodexPickerRow(row: PickerModelRow): boolean {
31
+ return row.id.startsWith("codex/") || row.provider === "codex-subscription";
32
+ }
33
+
34
+ function applyCodexOnlyRows(rows: PickerModelRow[], codexOnly: boolean): PickerModelRow[] {
35
+ if (!codexOnly) return rows;
36
+ return rows.map((row) => {
37
+ if (isCodexPickerRow(row)) return row;
38
+ return {
39
+ ...row,
40
+ selectable: false,
41
+ unavailableReason: row.unavailableReason ?? "Codex-only session",
42
+ };
43
+ });
44
+ }
45
+
46
+ function providerGroups(models: ClientModel[], codexOnly: boolean) {
47
+ const byProvider = new Map<
48
+ string,
49
+ { label: string; models: Array<ClientModel & { optionDisabled: boolean }> }
50
+ >();
51
+ for (const model of models) {
52
+ let group = byProvider.get(model.provider);
53
+ if (!group) {
54
+ group = { label: model.providerLabel, models: [] };
55
+ byProvider.set(model.provider, group);
56
+ }
57
+ group.models.push({
58
+ ...model,
59
+ optionDisabled: codexOnly && !isCodexClientModel(model),
60
+ });
61
+ }
62
+ return [...byProvider.values()];
63
+ }
64
+
30
65
  export function ModelPicker({
31
- models,
66
+ models = EMPTY_CLIENT_MODELS,
67
+ rows,
32
68
  value,
33
69
  onChange,
34
70
  disabled,
35
71
  className,
36
72
  label = "Model",
73
+ codexOnly = false,
37
74
  }: ModelPickerProps) {
38
75
  const selectId = useId();
39
- // Group by provider, preserving first-seen order for both the providers and
40
- // the models within each the server already orders the list (default model
41
- // and built-in provider first), so we must not re-sort it.
42
- const groups = useMemo(() => {
43
- const byProvider = new Map<string, { label: string; models: ClientModel[] }>();
44
- for (const model of models) {
45
- let group = byProvider.get(model.provider);
46
- if (!group) {
47
- group = { label: model.providerLabel, models: [] };
48
- byProvider.set(model.provider, group);
49
- }
50
- group.models.push(model);
51
- }
52
- return [...byProvider.values()];
53
- }, [models]);
76
+ const effectiveRows = useMemo(
77
+ () => (rows && rows.length > 0 ? applyCodexOnlyRows(rows, codexOnly) : []),
78
+ [rows, codexOnly],
79
+ );
80
+ const billingGroups = useMemo(
81
+ () => (effectiveRows.length > 0 ? groupPickerRowsByBillingClass(effectiveRows) : []),
82
+ [effectiveRows],
83
+ );
84
+ const providerGroupList = useMemo(() => providerGroups(models, codexOnly), [models, codexOnly]);
85
+ const useBillingGroups = Boolean(effectiveRows.length);
54
86
 
55
- if (models.length === 0) {
87
+ if (models.length === 0 && effectiveRows.length === 0) {
56
88
  return null;
57
89
  }
58
90
 
@@ -68,8 +100,6 @@ export function ModelPicker({
68
100
  disabled={disabled === true}
69
101
  aria-label={label}
70
102
  className={cn(
71
- // Sized like the other footer controls; the chevron overlay needs the
72
- // right padding so the value never collides with it.
73
103
  "h-8 max-w-[180px] cursor-pointer appearance-none truncate rounded-og-md bg-transparent",
74
104
  "py-0 pl-2 pr-6 text-[13px] text-og-fg-muted",
75
105
  "transition-colors duration-150 hover:bg-og-surface-2 hover:text-og-fg",
@@ -77,15 +107,25 @@ export function ModelPicker({
77
107
  "disabled:cursor-not-allowed disabled:opacity-50",
78
108
  )}
79
109
  >
80
- {groups.map((group) => (
81
- <optgroup key={group.label} label={group.label}>
82
- {group.models.map((model) => (
83
- <option key={model.id} value={model.id}>
84
- {model.label}
85
- </option>
110
+ {useBillingGroups
111
+ ? billingGroups.map((group) => (
112
+ <optgroup key={group.billingClass} label={group.label}>
113
+ {group.rows.map((row) => (
114
+ <option key={row.id} value={row.id} disabled={!row.selectable}>
115
+ {row.unavailableReason ? `${row.label} (${row.unavailableReason})` : row.label}
116
+ </option>
117
+ ))}
118
+ </optgroup>
119
+ ))
120
+ : providerGroupList.map((group) => (
121
+ <optgroup key={group.label} label={group.label}>
122
+ {group.models.map((model) => (
123
+ <option key={model.id} value={model.id} disabled={model.optionDisabled}>
124
+ {model.label}
125
+ </option>
126
+ ))}
127
+ </optgroup>
86
128
  ))}
87
- </optgroup>
88
- ))}
89
129
  </select>
90
130
  <ChevronDownIcon
91
131
  aria-hidden
@@ -953,7 +953,7 @@ function SortableQueueRow({
953
953
  disabled={pending !== null}
954
954
  onClick={onSteer}
955
955
  aria-label={`Steer queued prompt ${index + 1}`}
956
- title="Make this the next direction"
956
+ title="Steer interrupt the current turn and send this message now"
957
957
  className="inline-flex h-7 shrink-0 items-center justify-center gap-1 rounded-md px-2 text-xs font-medium text-fg outline-none transition-[background-color] hover:bg-surface-2 focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50 pointer-coarse:min-h-[44px] pointer-coarse:min-w-[44px]"
958
958
  >
959
959
  {pending === "steer" ? (