@tangle-network/agent-app 0.45.33 → 0.45.35
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/agent-session-controls-1q1XR3j8.d.ts +257 -0
- package/dist/assistant/index.d.ts +1 -1
- package/dist/assistant/index.js +2 -2
- package/dist/chat-react/index.d.ts +1 -1
- package/dist/chat-react/index.js +1 -1
- package/dist/{chunk-XHD4Y54K.js → chunk-AIHKKLKY.js} +2 -2
- package/dist/{chunk-SFSR3CAH.js → chunk-MIZMWCKW.js} +4 -3
- package/dist/{chunk-SFSR3CAH.js.map → chunk-MIZMWCKW.js.map} +1 -1
- package/dist/{chunk-5LC2VXH5.js → chunk-TRWJ5CRT.js} +205 -5
- package/dist/chunk-TRWJ5CRT.js.map +1 -0
- package/dist/spend/cli.js +1 -1
- package/dist/spend/index.d.ts +303 -3
- package/dist/spend/index.js +18 -3
- package/dist/spend/index.js.map +1 -1
- package/dist/web-react/index.d.ts +2 -120
- package/dist/web-react/index.js +2 -2
- package/package.json +1 -1
- package/dist/agent-session-controls-BwImzYKC.d.ts +0 -129
- package/dist/chunk-5LC2VXH5.js.map +0 -1
- /package/dist/{chunk-XHD4Y54K.js.map → chunk-AIHKKLKY.js.map} +0 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { F as FileMention } from './wire-DOZ-O6hD.js';
|
|
4
|
+
import { Harness } from './harness/index.js';
|
|
5
|
+
import { CatalogModel } from './catalog/index.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* `useFileMentions` — the glue a host passes straight into `AgentComposer`'s
|
|
9
|
+
* `mention` prop (`@tangle-network/sandbox-ui#184`) to wire up `@`-file
|
|
10
|
+
* mentions against `createSandboxFileIndexRoute` (`/chat-routes`).
|
|
11
|
+
*
|
|
12
|
+
* Fetches the index once per session from `indexUrl`, refreshes it in the
|
|
13
|
+
* background whenever the popover opens (a `fetchItems` call) if the cached
|
|
14
|
+
* copy has aged past `refreshAfterMs`, and answers every keystroke from an
|
|
15
|
+
* in-memory fuzzy filter — no per-keystroke network round trip. The returned
|
|
16
|
+
* `refresh()` lets a caller force a re-fetch immediately instead of waiting
|
|
17
|
+
* on `refreshAfterMs` — e.g. right after the agent creates a file mid-session.
|
|
18
|
+
*
|
|
19
|
+
* `MentionItem`/the `mention` prop shape mirror the FROZEN contract from
|
|
20
|
+
* sandbox-ui#184 structurally (no import: `/web-react` stays dependency-free
|
|
21
|
+
* beyond React, and `@tangle-network/sandbox-ui` is an optional peer).
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/** Mirrors sandbox-ui#184's `MentionItem` — the atomic pill's payload. For a
|
|
25
|
+
* file mention, `id` is the workspace-relative path (the pill's stable
|
|
26
|
+
* identity and the `@<id>` serialization sandbox-ui uses to round-trip
|
|
27
|
+
* `value`), `label` is the display name, and `detail` carries the full path
|
|
28
|
+
* for the popover row's secondary line. */
|
|
29
|
+
interface MentionItem {
|
|
30
|
+
id: string;
|
|
31
|
+
label: string;
|
|
32
|
+
detail?: string;
|
|
33
|
+
kind?: string;
|
|
34
|
+
}
|
|
35
|
+
/** Mirrors sandbox-ui#184's `AgentComposerProps['mention']` shape — plug the
|
|
36
|
+
* hook's `mention` return value straight into that prop. */
|
|
37
|
+
interface ComposerMentionProp {
|
|
38
|
+
trigger?: string;
|
|
39
|
+
fetchItems(query: string): Promise<MentionItem[]>;
|
|
40
|
+
onMentionsChange?(mentions: MentionItem[]): void;
|
|
41
|
+
renderItem?(item: MentionItem): ReactNode;
|
|
42
|
+
emptyText?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Ranks `files` against `query` (case-insensitive), capped to `limit`:
|
|
46
|
+
* name-prefix matches first, then name-substring, then path-substring.
|
|
47
|
+
* Within a tier, shorter names sort first (the more specific match), then
|
|
48
|
+
* alphabetically by path for a stable order. An empty query returns the
|
|
49
|
+
* first `limit` entries unranked — the popover's default list before typing.
|
|
50
|
+
* Pure and dependency-free (no fuzzy-match library) so it's cheap enough to
|
|
51
|
+
* re-run on every keystroke against a 10k-entry index.
|
|
52
|
+
*/
|
|
53
|
+
declare function rankFileMentions(files: readonly FileMention[], query: string, limit: number): FileMention[];
|
|
54
|
+
/** Max popover results per query — enough to show a useful spread of matches
|
|
55
|
+
* without pushing the fuzzy-filtered list past what a popover can usefully
|
|
56
|
+
* render in one screen. */
|
|
57
|
+
declare const DEFAULT_MENTION_LIMIT = 20;
|
|
58
|
+
/** How long a `ready` index is served before a background refetch — long
|
|
59
|
+
* enough that a full session's worth of popover opens don't repeatedly hit
|
|
60
|
+
* the index endpoint, short enough that a stale listing doesn't linger too
|
|
61
|
+
* far past workspace file changes. Callers who need the index current right
|
|
62
|
+
* now (e.g. just after the agent creates a file) call `refresh()` instead of
|
|
63
|
+
* waiting on this window. */
|
|
64
|
+
declare const INDEX_REFRESH_AFTER_MS: number;
|
|
65
|
+
/** Popover empty-state copy for a `ready` index whose query matched nothing.
|
|
66
|
+
* Loading/warming/error states have their own copy — see `emptyTextFor`. */
|
|
67
|
+
declare const DEFAULT_MENTION_EMPTY_TEXT = "No matching files";
|
|
68
|
+
/** Define options for configuring file mention fetching, caching, and display behavior */
|
|
69
|
+
interface UseFileMentionsOptions {
|
|
70
|
+
/** GET endpoint returning `FileIndexResponse` (a `createSandboxFileIndexRoute`). */
|
|
71
|
+
indexUrl: string;
|
|
72
|
+
/** Max popover results per query. Default {@link DEFAULT_MENTION_LIMIT}. */
|
|
73
|
+
limit?: number;
|
|
74
|
+
/** How long a `ready` index is served without a background refetch.
|
|
75
|
+
* Default {@link INDEX_REFRESH_AFTER_MS}. */
|
|
76
|
+
refreshAfterMs?: number;
|
|
77
|
+
/** `fetch` override for tests / non-global-fetch hosts. Default `fetch`. */
|
|
78
|
+
fetchImpl?: typeof fetch;
|
|
79
|
+
/** Text shown in the popover's empty state once the index is loaded and
|
|
80
|
+
* the query matched nothing. Default {@link DEFAULT_MENTION_EMPTY_TEXT}. */
|
|
81
|
+
emptyText?: string;
|
|
82
|
+
}
|
|
83
|
+
/** Provide properties and methods to manage and refresh file mentions in a composer interface */
|
|
84
|
+
interface UseFileMentionsResult {
|
|
85
|
+
/** Spread straight into `AgentComposer`'s `mention` prop. */
|
|
86
|
+
mention: ComposerMentionProp;
|
|
87
|
+
/** The files currently referenced by mentions in the composer's value —
|
|
88
|
+
* the send-body list (map through `fileMentionsToParts`). */
|
|
89
|
+
mentions: FileMention[];
|
|
90
|
+
/** Drop all currently-referenced mentions (e.g. after a successful send). */
|
|
91
|
+
clearMentions: () => void;
|
|
92
|
+
/** Force a re-fetch of the index right now, ignoring `refreshAfterMs` — for
|
|
93
|
+
* example right after the agent creates a file mid-session, so the next
|
|
94
|
+
* popover open sees it. Dedupes against an already-in-flight load rather
|
|
95
|
+
* than firing a second request. */
|
|
96
|
+
refresh: () => Promise<void>;
|
|
97
|
+
}
|
|
98
|
+
/** Resolve and manage file mention data with configurable fetching and state handling */
|
|
99
|
+
declare function useFileMentions(options: UseFileMentionsOptions): UseFileMentionsResult;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Keyboard + pointer model for a trigger-and-popover pair, dependency-free.
|
|
103
|
+
* Outside-mousedown and Escape both close; Escape also returns focus to the
|
|
104
|
+
* trigger so keyboard users aren't dropped at the top of the document. The
|
|
105
|
+
* returned `triggerProps` carry the ARIA contract (`aria-haspopup`/
|
|
106
|
+
* `aria-expanded`); spread them onto the trigger button.
|
|
107
|
+
*/
|
|
108
|
+
declare function usePopover(open: boolean, setOpen: (open: boolean) => void): {
|
|
109
|
+
containerRef: react.RefObject<HTMLDivElement | null>;
|
|
110
|
+
triggerRef: react.RefObject<HTMLButtonElement | null>;
|
|
111
|
+
triggerProps: {
|
|
112
|
+
ref: react.RefObject<HTMLButtonElement | null>;
|
|
113
|
+
'aria-haspopup': true;
|
|
114
|
+
'aria-expanded': boolean;
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* The one overlay elevation for floating surfaces — picker menus, popovers,
|
|
119
|
+
* drawers, modals. The theme's `shadow-overlay` utility is landing with the
|
|
120
|
+
* token work; until it does, this is the composer's raised-card literal kept
|
|
121
|
+
* in a single place so every overlay paints the same shadow and the later
|
|
122
|
+
* token swap is a one-line edit (`shadow-overlay` here, `shadow-raised` on
|
|
123
|
+
* the composer card).
|
|
124
|
+
* TODO(theme): swap to `shadow-overlay` once the preset ships it.
|
|
125
|
+
*/
|
|
126
|
+
declare const OVERLAY_SHADOW = "shadow-[0_1px_2px_hsl(var(--foreground)/0.05),0_12px_28px_hsl(var(--foreground)/0.07)] dark:shadow-[0_1px_2px_hsl(var(--foreground)/0.14),0_12px_28px_hsl(var(--foreground)/0.22)]";
|
|
127
|
+
/**
|
|
128
|
+
* Guard an async action against double-submit. `run` ignores re-entrant calls
|
|
129
|
+
* while a promise is in flight and flips `pending` so the caller can disable
|
|
130
|
+
* the control — the fix for double-charge / double-approve on a slow network.
|
|
131
|
+
* Settles (success or throw) before clearing, and no-ops state updates after
|
|
132
|
+
* unmount.
|
|
133
|
+
*/
|
|
134
|
+
declare function usePending(): {
|
|
135
|
+
pending: boolean;
|
|
136
|
+
run: (action: () => void | Promise<void>) => void;
|
|
137
|
+
};
|
|
138
|
+
interface ModelPickerProps {
|
|
139
|
+
value: string;
|
|
140
|
+
onChange: (id: string) => void;
|
|
141
|
+
/** Catalogue models — from `GET`ing the app's catalogue route (see
|
|
142
|
+
* `runtime/model-catalog`), plus any product-specific entries appended. */
|
|
143
|
+
models: CatalogModel[];
|
|
144
|
+
loading?: boolean;
|
|
145
|
+
/** Render a provider logo/badge; default is a generic sparkle. */
|
|
146
|
+
renderProviderBadge?: (provider: string) => ReactNode;
|
|
147
|
+
/** Section label for `featured` models. */
|
|
148
|
+
recommendedLabel?: string;
|
|
149
|
+
/** Pin a labeled section to the TOP of the list (above Recommended) for the
|
|
150
|
+
* models a product wants surfaced first — e.g. a tuner app's own fine-tuned
|
|
151
|
+
* models (`{ label: 'Your Fine-Tuned Models', match: (m) => m.provider === 'tuner' }`).
|
|
152
|
+
* Matching models are shown only in this section, not duplicated below. */
|
|
153
|
+
priorityGroup?: {
|
|
154
|
+
label: string;
|
|
155
|
+
match: (model: CatalogModel) => boolean;
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Searchable model picker pill + popover: a featured/recommended section
|
|
160
|
+
* first, then per-provider groups in catalogue order (the server already
|
|
161
|
+
* sorts providers by tier).
|
|
162
|
+
*
|
|
163
|
+
* This is the CANONICAL ecosystem model picker (see "UI chrome ownership
|
|
164
|
+
* (picker canon)" in AGENTS.md). sandbox-ui's `dashboard/ModelPicker` is
|
|
165
|
+
* legacy — deprecated, frozen, removed at sandbox-ui's next major; new code
|
|
166
|
+
* belongs here.
|
|
167
|
+
*/
|
|
168
|
+
declare function ModelPicker({ value, onChange, models, loading, renderProviderBadge, recommendedLabel, priorityGroup }: ModelPickerProps): react.JSX.Element;
|
|
169
|
+
/** One reasoning-budget level: the engine `id` is unchanged (the value the
|
|
170
|
+
* product sends to the loop); only the user-facing `label` is renamed to the
|
|
171
|
+
* plainer "how hard should it think" vocabulary from docs/product-surfaces.md.
|
|
172
|
+
* `low`→Quick, `medium`→Standard, `high`→Extended. The mapping is overridable
|
|
173
|
+
* via `EffortPickerProps.levels`, so a product can relabel without losing the
|
|
174
|
+
* ids the runtime expects. */
|
|
175
|
+
interface EffortLevel {
|
|
176
|
+
id: string;
|
|
177
|
+
label: string;
|
|
178
|
+
}
|
|
179
|
+
declare const DEFAULT_EFFORT_LEVELS: readonly EffortLevel[];
|
|
180
|
+
/** Segments the meter draws — fixed geometry so the ladder stays tabular
|
|
181
|
+
* across levels (and across the trigger and its menu rows). */
|
|
182
|
+
declare const EFFORT_METER_SEGMENTS = 4;
|
|
183
|
+
/**
|
|
184
|
+
* Filled-segment count for a level: 0 for off/none (or an id the levels list
|
|
185
|
+
* does not carry); otherwise the level's position among the non-off choices
|
|
186
|
+
* scaled onto the meter, so the ladder reads low < medium < high and the top
|
|
187
|
+
* level fills the whole scale. The canonical four levels land 0 / 1 / 2 / 4.
|
|
188
|
+
*/
|
|
189
|
+
declare function effortMeterFill(levelId: string, levels?: readonly EffortLevel[]): number;
|
|
190
|
+
/**
|
|
191
|
+
* The thinking-strength meter: four 12px bars, filled count = level, filled
|
|
192
|
+
* opacity ramping 25→100% left to right (unfilled at a faint ghost). Purely
|
|
193
|
+
* decorative — the level name is always rendered as text beside it, so the
|
|
194
|
+
* meter is `aria-hidden` and adds no second accessible name.
|
|
195
|
+
*/
|
|
196
|
+
declare function EffortMeter({ fill, className }: {
|
|
197
|
+
fill: number;
|
|
198
|
+
className?: string;
|
|
199
|
+
}): react.JSX.Element;
|
|
200
|
+
interface EffortPickerProps {
|
|
201
|
+
value: string;
|
|
202
|
+
onChange: (id: string) => void;
|
|
203
|
+
/** Selectable levels (engine id + user-facing label). Defaults to the plain
|
|
204
|
+
* "Thinking" vocabulary; override to relabel without changing the ids the
|
|
205
|
+
* runtime receives. */
|
|
206
|
+
levels?: readonly EffortLevel[];
|
|
207
|
+
/** Prefix shown before the active level on the pill — the "what is this"
|
|
208
|
+
* context the bare value lacked. Default "Thinking". Pass '' to hide it. */
|
|
209
|
+
label?: string;
|
|
210
|
+
}
|
|
211
|
+
/** Thinking-budget selector pill, styled to match {@link ModelPicker}. Show
|
|
212
|
+
* it only when the selected model `supportsReasoning`. "Thinking" is the
|
|
213
|
+
* plain-English name for what was internally called "effort".
|
|
214
|
+
*
|
|
215
|
+
* The CANONICAL ecosystem effort picker — sandbox-ui's reasoning menu (inside
|
|
216
|
+
* its `chat/AgentSessionControls`) is legacy and frozen. */
|
|
217
|
+
declare function EffortPicker({ value, onChange, levels, label }: EffortPickerProps): react.JSX.Element;
|
|
218
|
+
|
|
219
|
+
interface AgentSessionControlsProps {
|
|
220
|
+
/** Catalog models — canonical provider-prefixed ids. */
|
|
221
|
+
models: CatalogModel[];
|
|
222
|
+
modelsLoading?: boolean;
|
|
223
|
+
/** Selected canonical model id. */
|
|
224
|
+
model: string;
|
|
225
|
+
onModelChange(modelId: string): void;
|
|
226
|
+
/** Current harness; harness↔model coherence is enforced on every change. */
|
|
227
|
+
harness: Harness;
|
|
228
|
+
onHarnessChange(harness: Harness): void;
|
|
229
|
+
/** Harnesses to offer; defaults to the labeled set. */
|
|
230
|
+
availableHarnesses?: ReadonlyArray<Harness>;
|
|
231
|
+
/** Reasoning-effort value + setter. Shown only when the selected model
|
|
232
|
+
* `supportsReasoning`, matching `EffortPicker`'s guidance. */
|
|
233
|
+
effort: string;
|
|
234
|
+
onEffortChange(effort: string): void;
|
|
235
|
+
/**
|
|
236
|
+
* Levels to offer, forwarded verbatim to {@link EffortPicker}. Omit for the
|
|
237
|
+
* default vocabulary.
|
|
238
|
+
*
|
|
239
|
+
* A product whose backend applies only a SUBSET of the levels for the
|
|
240
|
+
* selected harness/model passes that subset here. Without it the strip
|
|
241
|
+
* offers every level and the backend silently ignores the ones it does not
|
|
242
|
+
* apply — a control that reports a choice the system never made.
|
|
243
|
+
*/
|
|
244
|
+
effortLevels?: readonly EffortLevel[];
|
|
245
|
+
/**
|
|
246
|
+
* `inline` (default): model, harness, effort side by side — the prior
|
|
247
|
+
* behavior. `compact`: model inline, harness + effort behind a gear popover.
|
|
248
|
+
*/
|
|
249
|
+
layout?: 'inline' | 'compact';
|
|
250
|
+
/** Hide the harness control entirely (single-harness products). */
|
|
251
|
+
showHarness?: boolean;
|
|
252
|
+
renderProviderBadge?: (provider: string) => ReactNode;
|
|
253
|
+
className?: string;
|
|
254
|
+
}
|
|
255
|
+
declare function AgentSessionControls(props: AgentSessionControlsProps): react.JSX.Element;
|
|
256
|
+
|
|
257
|
+
export { type AgentSessionControlsProps as A, type ComposerMentionProp as C, DEFAULT_EFFORT_LEVELS as D, EFFORT_METER_SEGMENTS as E, INDEX_REFRESH_AFTER_MS as I, type MentionItem as M, OVERLAY_SHADOW as O, type UseFileMentionsResult as U, AgentSessionControls as a, DEFAULT_MENTION_EMPTY_TEXT as b, DEFAULT_MENTION_LIMIT as c, type EffortLevel as d, EffortMeter as e, EffortPicker as f, type EffortPickerProps as g, ModelPicker as h, type ModelPickerProps as i, type UseFileMentionsOptions as j, effortMeterFill as k, usePending as l, usePopover as m, rankFileMentions as r, useFileMentions as u };
|
|
@@ -7,7 +7,7 @@ import '../plans/index.js';
|
|
|
7
7
|
import '../parts-BqIHMdyu.js';
|
|
8
8
|
import '../types-CCeYywdS.js';
|
|
9
9
|
import '../wire-DOZ-O6hD.js';
|
|
10
|
-
import '../agent-session-controls-
|
|
10
|
+
import '../agent-session-controls-1q1XR3j8.js';
|
|
11
11
|
import '../harness/index.js';
|
|
12
12
|
import '../catalog/index.js';
|
|
13
13
|
import '../agent-activity-C8ZG0F0M.js';
|
package/dist/assistant/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ChatComposer,
|
|
3
3
|
ChatMessages
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-AIHKKLKY.js";
|
|
5
5
|
import "../chunk-FBVLEGEG.js";
|
|
6
6
|
import "../chunk-5MZXWPFN.js";
|
|
7
7
|
import "../chunk-GEYACSFW.js";
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
ModelPicker,
|
|
10
10
|
OVERLAY_SHADOW,
|
|
11
11
|
ProviderLogo
|
|
12
|
-
} from "../chunk-
|
|
12
|
+
} from "../chunk-MIZMWCKW.js";
|
|
13
13
|
import "../chunk-BATKJP3P.js";
|
|
14
14
|
import {
|
|
15
15
|
AsyncView
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import { AgentComposer } from '@tangle-network/sandbox-ui/chat';
|
|
4
|
-
import { A as AgentSessionControlsProps, U as UseFileMentionsResult } from '../agent-session-controls-
|
|
4
|
+
import { A as AgentSessionControlsProps, U as UseFileMentionsResult } from '../agent-session-controls-1q1XR3j8.js';
|
|
5
5
|
import { b as ChatAttachmentInput, F as FileMention } from '../wire-DOZ-O6hD.js';
|
|
6
6
|
import '../harness/index.js';
|
|
7
7
|
import '@tangle-network/agent-interface';
|
package/dist/chat-react/index.js
CHANGED
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
OVERLAY_SHADOW,
|
|
11
11
|
POPOVER_OPTION_FOCUS,
|
|
12
12
|
usePending
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-MIZMWCKW.js";
|
|
14
14
|
import {
|
|
15
15
|
UNTITLED_SESSION_LABEL,
|
|
16
16
|
mergeSessionPages,
|
|
@@ -5983,4 +5983,4 @@ export {
|
|
|
5983
5983
|
useThinkingSeconds,
|
|
5984
5984
|
ChatMessages
|
|
5985
5985
|
};
|
|
5986
|
-
//# sourceMappingURL=chunk-
|
|
5986
|
+
//# sourceMappingURL=chunk-AIHKKLKY.js.map
|
|
@@ -824,6 +824,7 @@ function AgentSessionControls(props) {
|
|
|
824
824
|
availableHarnesses,
|
|
825
825
|
effort,
|
|
826
826
|
onEffortChange,
|
|
827
|
+
effortLevels,
|
|
827
828
|
layout = "inline",
|
|
828
829
|
showHarness = true,
|
|
829
830
|
renderProviderBadge,
|
|
@@ -848,7 +849,7 @@ function AgentSessionControls(props) {
|
|
|
848
849
|
return /* @__PURE__ */ jsxs4("div", { className: `flex items-center gap-1.5 ${className ?? ""}`, children: [
|
|
849
850
|
modelPicker,
|
|
850
851
|
showHarness && /* @__PURE__ */ jsx4(HarnessPicker, { value: harness, onChange: onHarness, available: availableHarnesses }),
|
|
851
|
-
showEffort && /* @__PURE__ */ jsx4(EffortPicker, { value: effort, onChange: onEffortChange })
|
|
852
|
+
showEffort && /* @__PURE__ */ jsx4(EffortPicker, { value: effort, onChange: onEffortChange, levels: effortLevels })
|
|
852
853
|
] });
|
|
853
854
|
}
|
|
854
855
|
const hasAdvanced = showHarness || showEffort;
|
|
@@ -875,7 +876,7 @@ function AgentSessionControls(props) {
|
|
|
875
876
|
] }),
|
|
876
877
|
showEffort && /* @__PURE__ */ jsxs4("div", { className: "space-y-1.5", children: [
|
|
877
878
|
/* @__PURE__ */ jsx4("p", { className: "text-xs font-medium text-foreground", children: "Thinking" }),
|
|
878
|
-
/* @__PURE__ */ jsx4(EffortPicker, { value: effort, onChange: onEffortChange, label: "" }),
|
|
879
|
+
/* @__PURE__ */ jsx4(EffortPicker, { value: effort, onChange: onEffortChange, levels: effortLevels, label: "" }),
|
|
879
880
|
/* @__PURE__ */ jsx4("p", { className: "text-[11px] leading-snug text-muted-foreground", children: "How hard the agent thinks before answering. Higher is slower but more thorough." })
|
|
880
881
|
] })
|
|
881
882
|
] })
|
|
@@ -900,4 +901,4 @@ export {
|
|
|
900
901
|
HarnessGlyph,
|
|
901
902
|
AgentSessionControls
|
|
902
903
|
};
|
|
903
|
-
//# sourceMappingURL=chunk-
|
|
904
|
+
//# sourceMappingURL=chunk-MIZMWCKW.js.map
|