No mdashes in comments

This commit is contained in:
Enrico Ros
2026-03-04 14:29:22 -08:00
parent 4878f361b5
commit b003993961
10 changed files with 27 additions and 27 deletions
@@ -20,12 +20,12 @@ Reference files (for context only, do not modify):
**Discovering feature docs:** The release notes and models overview markdown
contain inline links to feature-specific pages (thinking modes, effort,
context windows, what's-new pages, etc.). When a new capability is
referenced, follow those links append `.md` to get markdown. Examples of
referenced, follow those links - append `.md` to get markdown. Examples of
pages you might discover this way:
- `about-claude/models/whats-new-claude-*` per-generation changes
- `build-with-claude/extended-thinking` thinking budget configuration
- `build-with-claude/effort` effort parameter levels
- `build-with-claude/adaptive-thinking` adaptive thinking mode
- `about-claude/models/whats-new-claude-*` - per-generation changes
- `build-with-claude/extended-thinking` - thinking budget configuration
- `build-with-claude/effort` - effort parameter levels
- `build-with-claude/adaptive-thinking` - adaptive thinking mode
**Fallback web pages** (crawl if `.md` paths break or structure changes):
- https://platform.claude.com/docs/en/about-claude/models/overview
+1 -1
View File
@@ -77,7 +77,7 @@ function _displayKey(key: string): string {
/**
* Build a set of fingerprints from currently registered shortcuts for active detection.
* Fingerprint: `key_lowercase:ctrl:shift` matches the global handler resolution.
* Fingerprint: `key_lowercase:ctrl:shift` - matches the global handler resolution.
*/
function _buildActiveFingerprints(): Set<string> {
const allShortcuts = useGlobalShortcutsStore.getState().getAllShortcuts();
@@ -147,8 +147,8 @@ function AutoDownloadToggle(props: { delay?: number }) {
* Portable attachment sources component.
*
* Three modes:
* - **menu-compact**: Mobile-style icon trigger, simple MenuItems (no descriptions/animations)
* - **menu-rich**: Desktop-style labeled button trigger, rich items with descriptions and animations
* - **menu-compact**: Mobile-style - icon trigger, simple MenuItems (no descriptions/animations)
* - **menu-rich**: Desktop-style - labeled button trigger, rich items with descriptions and animations
* - **inline-buttons**: Individual source buttons rendered inline (no dropdown)
*/
export const AttachmentSourcesMemo = React.memo(AttachmentSources);
@@ -174,7 +174,7 @@ function AttachmentSources(props: {
onOpenWebInput: () => void,
}) {
// state (screen capture used in menu modes where the component handles the capture)
// state (screen capture - used in menu modes where the component handles the capture)
const [capturingScreen, setCapturingScreen] = React.useState(false);
const [screenCaptureError, setScreenCaptureError] = React.useState<string | null>(null);
@@ -201,7 +201,7 @@ function AttachmentSources(props: {
}, [onAttachScreenCapture]);
// inline-buttons mode individual buttons rendered flat (no dropdown)
// inline-buttons mode - individual buttons rendered flat (no dropdown)
if (props.mode === 'inline-buttons')
return <>
@@ -234,7 +234,7 @@ function AttachmentSources(props: {
</>;
// menu-compact mode (mobile) simple icon trigger with flat menu items
// menu-compact mode (mobile) - simple icon trigger with flat menu items
if (props.mode === 'menu-compact' || props.mode === 'menu-message') {
const isMessage = props.mode === 'menu-message';
return <>
@@ -321,7 +321,7 @@ function AttachmentSources(props: {
}
// menu-rich mode (desktop) labeled button trigger with animated, descriptive menu items
// menu-rich mode (desktop) - labeled button trigger with animated, descriptive menu items
return (
<Dropdown>
<MenuButton
@@ -29,7 +29,7 @@ function notifyOnlyImages(item: any) {
export type AttachmentStoreCloudInput = Omit<Extract<AttachmentDraftSource, { media: 'cloud' }>, 'media' | 'origin'>;
/** Inferred return type used by composable source handler hooks. */
/** Inferred return type - used by composable source handler hooks. */
export type AttachmentDraftsApi = ReturnType<typeof useAttachmentDrafts>;
@@ -24,8 +24,8 @@ const _style = {
/**
* Compact numeric input field with label and optional description.
* Supports undefined (unset/default) state with a toggle button:
* - undefined: input disabled, X button pressed (soft) input shows empty
* - number: input active, X button flat (plain) pressing X clears to undefined
* - undefined: input disabled, X button pressed (soft) - input shows empty
* - number: input active, X button flat (plain) - pressing X clears to undefined
*/
export function FormNumberInput(props: {
title: string,
@@ -24,17 +24,17 @@ const buttonSx: SxProps = {
export function ChromelessFloatingButtons() {
return <>
{/* Left where the drawer toggle usually is */}
{/* Left - where the drawer toggle usually is */}
<IconButton aria-label='Open Drawer' variant='soft' onClick={optimaOpenDrawer} style={{ left: '0.5rem' }} sx={buttonSx}>
<MenuIcon />
</IconButton>
{/* Center exit chromeless (styled like the scroll-to-bottom button) */}
{/* Center - exit chromeless (styled like the scroll-to-bottom button) */}
<IconButton aria-label='Exit Chrome-less' variant='soft' onClick={optimaExitChromeless} sx={buttonSx} style={{ left: '50%', transform: 'translateX(-50%)' }}>
<FullscreenExitIcon />
</IconButton>
{/* Right where the panel toggle usually is */}
{/* Right - where the panel toggle usually is */}
<IconButton aria-label='Open Menu' variant='soft' onClick={optimaOpenPanel} style={{ right: '0.5rem' }} sx={buttonSx}>
<LayoutSidebarRight />
</IconButton>
+1 -1
View File
@@ -47,7 +47,7 @@ export const useLogicSherpaStore = create<SherpaStore>()(
),
);
// increment the usage count (client-only localStorage is unavailable during SSR)
// increment the usage count (client-only - localStorage is unavailable during SSR)
if (isBrowser)
useLogicSherpaStore.setState((state) => ({ usageCount: (state.usageCount || 0) + 1 }));
@@ -24,7 +24,7 @@ import { DModelParameterSpecAny } from '~/common/stores/llms/llms.parameters';
const SKIP_FM_ID_CONTAINS = ['rerank'];
const SKIP_IP_ID_STARTSWITH = ['stability.'];
// Known Mantle-only models (no matching foundation model) override heuristics with accurate metadata
// Known Mantle-only models (no matching foundation model) - override heuristics with accurate metadata
const KNOWN_MANTLE_ONLY: Record<string, { label: string; ctx: number; out: number; vision?: true; reasoning?: true }> = {
'deepseek.v3.1': { label: 'DeepSeek V3.1', ctx: 131072, out: 16384 },
'moonshotai.kimi-k2-thinking': { label: 'Kimi K2 Thinking', ctx: 131072, out: 16384 },
@@ -163,13 +163,13 @@ const IF_25 = [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Fn, LLM_IF_OAI_Jso
const IF_30 = [...IF_25]; // Note: Gemini 3 Developer Guide recommends temperature=1.0, which is now set as the default via initialTemperature
// Gemini Thinking Control (as of 2026-02-19):
// - Gemini 3 models use `thinkingLevel` (llmVndGemEffort) NOT thinkingBudget.
// - Gemini 3 models use `thinkingLevel` (llmVndGemEffort) - NOT thinkingBudget.
// Supported levels: 3.1 Pro=['low','medium','high'], 3 Pro=['low','high'], Flash=['minimal','low','medium','high']. Default is 'high' (dynamic).
// Pro does not support disabling thinking. Flash's 'minimal' does not guarantee thinking is off.
// - Gemini 2.5 models use `thinkingBudget` (llmVndGeminiThinkingBudget) NOT thinkingLevel.
// - Gemini 2.5 models use `thinkingBudget` (llmVndGeminiThinkingBudget) - NOT thinkingLevel.
// Budget=0 disables thinking (Flash/Flash-Lite only; Pro cannot disable). Undefined = auto.
// Note: the parameter sweep shows thinkingBudget accepted on Gemini 3, but the official docs
// prescribe thinkingLevel for Gemini 3. We follow the docs do NOT add thinkingBudget to Gemini 3 models.
// prescribe thinkingLevel for Gemini 3. We follow the docs - do NOT add thinkingBudget to Gemini 3 models.
// NOTE: LLM_IF_Outputs_Image is auto-implied by llmsAutoImplyInterfaces() from image parameterSpecs (llmVndGeminiAspectRatio, llmVndGeminiImageSize)
@@ -187,9 +187,9 @@ export function openRouterModelToModelDescription(wireModel: object): ModelDescr
if (DEV_DEBUG_OPENROUTER_MODELS && !antLookup && ['anthropic/claude-3.5-sonnet'].every(silence => !model.id.startsWith(silence)))
console.log('[DEV] openRouterModelToModelDescription: unknown Anthropic model:', model.id);
// 0-day: non-indexed models only indexed ones use native definitions via llmOrtAntLookup.
// 0-day: non-indexed models only - indexed ones use native definitions via llmOrtAntLookup.
// OR sweep shows effort on all Anthropic models because OR translates reasoning_effort internally;
// the native API only supports effort on select models trust the manual definitions for those.
// the native API only supports effort on select models - trust the manual definitions for those.
if (interfaces.includes(LLM_IF_OAI_Reasoning) && !parameterSpecs.some(p => p.paramId === 'llmVndAntThinkingBudget')) {
DEV_DEBUG_OPENROUTER_MODELS && console.log(`[DEV] openRouterModelToModelDescription: unexpected ${antLookup ? 'KNOWN' : 'unknown'} Anthropic reasoning model:`, model.id);
parameterSpecs.push({ paramId: 'llmVndAntThinkingBudget' }); // configurable thinking budget
@@ -205,7 +205,7 @@ export function openRouterModelToModelDescription(wireModel: object): ModelDescr
if (DEV_DEBUG_OPENROUTER_MODELS && !gemLookup && ['google/gemma-', 'google/gemini-2.5-pro-preview-05-06'].every(silence => !model.id.startsWith(silence)))
console.log('[DEV] openRouterModelToModelDescription: unknown Gemini model:', model.id);
// 0-day: non-indexed models only indexed ones use native definitions via llmOrtGemLookup.
// 0-day: non-indexed models only - indexed ones use native definitions via llmOrtGemLookup.
// OR sweep shows effort on all Gemini models because OR translates reasoning_effort internally;
// the native API uses thinkingLevel (discrete) or thinkingBudget (integer) depending on generation.
if (interfaces.includes(LLM_IF_OAI_Reasoning) && !parameterSpecs.some(p => p.paramId === 'llmVndGeminiThinkingBudget' || p.paramId === 'llmVndGemEffort')) {
@@ -232,7 +232,7 @@ export function openRouterModelToModelDescription(wireModel: object): ModelDescr
if (DEV_DEBUG_OPENROUTER_MODELS && !oaiLookup && ['openai/gpt-oss', 'openai/gpt-3.5'].every(silence => !model.id.startsWith(silence)))
console.log('[DEV] openRouterModelToModelDescription: unknown OpenAI model:', model.id);
// 0-day: non-indexed models only indexed ones use native definitions via llmOrtOaiLookup.
// 0-day: non-indexed models only - indexed ones use native definitions via llmOrtOaiLookup.
// OR sweep may show broader effort ranges than the native API supports (OR adds levels internally).
if (interfaces.includes(LLM_IF_OAI_Reasoning) && !parameterSpecs.some(p => p.paramId === 'llmVndOaiEffort')) {
// console.log('[DEV] openRouterModelToModelDescription: unexpected OpenAI reasoning model:', model.id);