@4djs/assistant 0.1.3 → 0.1.5
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/core/chat-history.d.ts.map +1 -1
- package/dist/core/create-assistant-store.d.ts +2 -0
- package/dist/core/create-assistant-store.d.ts.map +1 -1
- package/dist/core/index.d.ts +5 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +715 -28
- package/dist/core/llm-chat.d.ts +13 -0
- package/dist/core/llm-chat.d.ts.map +1 -1
- package/dist/core/llm-context-breakdown.d.ts +39 -0
- package/dist/core/llm-context-breakdown.d.ts.map +1 -0
- package/dist/core/llm-settings-storage.d.ts +3 -0
- package/dist/core/llm-settings-storage.d.ts.map +1 -1
- package/dist/core/llm-sse.d.ts +2 -0
- package/dist/core/llm-sse.d.ts.map +1 -1
- package/dist/core/llm-usage.d.ts +52 -0
- package/dist/core/llm-usage.d.ts.map +1 -0
- package/dist/core/types.d.ts +5 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.js +354 -353
- package/dist/labels.d.ts +27 -1
- package/dist/labels.d.ts.map +1 -1
- package/dist/react/Assistant.d.ts.map +1 -1
- package/dist/react/components/MermaidDiagram.d.ts.map +1 -1
- package/dist/react/components/chat/ChatComposer.d.ts +10 -2
- package/dist/react/components/chat/ChatComposer.d.ts.map +1 -1
- package/dist/react/components/chat/ContextUsageStrip.d.ts +14 -0
- package/dist/react/components/chat/ContextUsageStrip.d.ts.map +1 -0
- package/dist/react/components/chat/LlmSettingsStrip.d.ts.map +1 -1
- package/dist/react/components/chat/UsageToolbarButton.d.ts +24 -0
- package/dist/react/components/chat/UsageToolbarButton.d.ts.map +1 -0
- package/dist/react/components/chat/context-usage-utils.d.ts +34 -0
- package/dist/react/components/chat/context-usage-utils.d.ts.map +1 -0
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/lib/sanitize-mermaid.d.ts +3 -0
- package/dist/react/lib/sanitize-mermaid.d.ts.map +1 -0
- package/dist/react/types.d.ts +2 -0
- package/dist/react/types.d.ts.map +1 -1
- package/dist/styles.css +293 -62
- package/package.json +1 -1
package/dist/labels.d.ts
CHANGED
|
@@ -20,8 +20,34 @@ export declare const DEFAULT_ASSISTANT_LABELS: {
|
|
|
20
20
|
readonly "composer.stop": "Stop";
|
|
21
21
|
readonly "composer.hint": "Enter to send · Shift+Enter for new line";
|
|
22
22
|
readonly "composer.llmSettings": "LLM settings";
|
|
23
|
+
readonly "composer.contextUsage": "Context usage";
|
|
23
24
|
readonly "composer.generateSuggestions": "Generate suggestions";
|
|
24
25
|
readonly "composer.clearConversation": "Clear conversation";
|
|
26
|
+
readonly "usage.ariaLabel": "Show context usage";
|
|
27
|
+
readonly "usage.panelTitle": "Context usage";
|
|
28
|
+
readonly "usage.panelClose": "Close context usage";
|
|
29
|
+
readonly "usage.fullPercent": "{percent}% full";
|
|
30
|
+
readonly "usage.tokenBudget": "{used} / {total} tokens";
|
|
31
|
+
readonly "usage.tooltipTitle": "LLM usage";
|
|
32
|
+
readonly "usage.context": "Context: {used} / {total} ({percent}%)";
|
|
33
|
+
readonly "usage.tokensTotal": "Tokens: {count}";
|
|
34
|
+
readonly "usage.promptCompletion": "Prompt: {prompt} · Completion: {completion}";
|
|
35
|
+
readonly "usage.cached": "Cached: {count}";
|
|
36
|
+
readonly "usage.reasoning": "Reasoning: {count}";
|
|
37
|
+
readonly "usage.speed": "Speed: {rate} tok/s";
|
|
38
|
+
readonly "usage.duration": "Duration: {duration}";
|
|
39
|
+
readonly "usage.requests": "Requests this turn: {count}";
|
|
40
|
+
readonly "usage.model": "Model: {model}";
|
|
41
|
+
readonly "usage.session": "Session: {total} tokens · {requests} requests";
|
|
42
|
+
readonly "usage.idle": "No usage yet — send a message to start tracking";
|
|
43
|
+
readonly "usage.contextLimit": "Context window: {total}";
|
|
44
|
+
readonly "usage.category.systemPrompt": "System prompt";
|
|
45
|
+
readonly "usage.category.toolDefinitions": "Tool definitions";
|
|
46
|
+
readonly "usage.category.conversation": "Conversation";
|
|
47
|
+
readonly "usage.category.completion": "Completion";
|
|
48
|
+
readonly "usage.category.cached": "Cached prompt";
|
|
49
|
+
readonly "usage.category.reasoning": "Reasoning";
|
|
50
|
+
readonly "usage.estimatedHint": "Category splits are estimated from payload size";
|
|
25
51
|
readonly "commandMenu.ariaLabel": "Composer commands";
|
|
26
52
|
readonly "commandMenu.header": "Commands";
|
|
27
53
|
readonly "commands.clear.description": "Clear the current conversation";
|
|
@@ -47,7 +73,7 @@ export declare const DEFAULT_ASSISTANT_LABELS: {
|
|
|
47
73
|
readonly "llmSettings.modelList": "Model list";
|
|
48
74
|
readonly "llmSettings.baseUrlPlaceholder": "https://api.openai.com/v1";
|
|
49
75
|
readonly "llmSettings.apiKeyPlaceholder": "sk-…";
|
|
50
|
-
readonly "llmSettings.apiKeyConfiguredPlaceholder": "
|
|
76
|
+
readonly "llmSettings.apiKeyConfiguredPlaceholder": "Leave blank to keep current key";
|
|
51
77
|
readonly "llmSettings.modelPlaceholder": "gpt-4o-mini";
|
|
52
78
|
readonly "llmSettings.modelListPlaceholder": "Optional — comma-separated";
|
|
53
79
|
readonly "llmSettings.connected": "Connected · {model}";
|
package/dist/labels.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../src/labels.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../src/labels.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8J3B,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,wBAAwB,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAEhE,6DAA6D;AAC7D,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAE/D,eAAO,MAAM,oBAAoB,EAE5B,iBAAiB,EAAE,CAAC;AAEzB,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACtC,MAAM,CAIR;AAED,wBAAgB,sBAAsB,CACpC,SAAS,CAAC,EAAE,uBAAuB,GAClC,eAAe,CAEjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Assistant.d.ts","sourceRoot":"","sources":["../../src/react/Assistant.tsx"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Assistant.d.ts","sourceRoot":"","sources":["../../src/react/Assistant.tsx"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAkBf,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAqXlE,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BAM9C;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,GAAG;IAClB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BAQA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MermaidDiagram.d.ts","sourceRoot":"","sources":["../../../src/react/components/MermaidDiagram.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MermaidDiagram.d.ts","sourceRoot":"","sources":["../../../src/react/components/MermaidDiagram.tsx"],"names":[],"mappings":"AA8DA,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,SAAiB,EACjB,SAAS,GACV,EAAE,mBAAmB,+BAsGrB"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import type { KeyboardEvent, RefObject } from "react";
|
|
2
2
|
import type { ChatCommandSuggestion } from "../../../core/chat-commands.js";
|
|
3
|
+
import type { LlmSessionUsage } from "../../../core/llm-usage.js";
|
|
3
4
|
import type { AssistantLabels } from "../../../labels.js";
|
|
4
5
|
interface ChatComposerToolbar {
|
|
5
6
|
showLlmSettings?: boolean;
|
|
6
|
-
|
|
7
|
+
onToggleLlmSettings?: () => void;
|
|
8
|
+
llmSettingsOpen?: boolean;
|
|
9
|
+
showUsageStats?: boolean;
|
|
10
|
+
onToggleUsage?: () => void;
|
|
11
|
+
usageOpen?: boolean;
|
|
7
12
|
showGenerateSuggestions?: boolean;
|
|
8
13
|
onGenerateSuggestions?: () => void;
|
|
9
14
|
suggestionsLoading?: boolean;
|
|
@@ -32,7 +37,10 @@ interface ChatComposerProps {
|
|
|
32
37
|
selectedIndex: number;
|
|
33
38
|
onSelect: (command: ChatCommandSuggestion) => void;
|
|
34
39
|
};
|
|
40
|
+
llmUsage?: LlmSessionUsage | null;
|
|
41
|
+
usageModel?: string | null;
|
|
42
|
+
modelContextWindows?: Record<string, number>;
|
|
35
43
|
}
|
|
36
|
-
export declare function ChatComposer({ input, onInputChange, onSubmit, onKeyDown, streaming, onStop, textareaRef, llmEnabled, disabled, inputDisabled, placeholder, labels: labelsOverride, toolbar, commandMenu, }: ChatComposerProps): import("react").JSX.Element;
|
|
44
|
+
export declare function ChatComposer({ input, onInputChange, onSubmit, onKeyDown, streaming, onStop, textareaRef, llmEnabled, disabled, inputDisabled, placeholder, labels: labelsOverride, toolbar, commandMenu, llmUsage, usageModel, modelContextWindows, }: ChatComposerProps): import("react").JSX.Element;
|
|
37
45
|
export {};
|
|
38
46
|
//# sourceMappingURL=ChatComposer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatComposer.d.ts","sourceRoot":"","sources":["../../../../src/react/components/chat/ChatComposer.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatComposer.d.ts","sourceRoot":"","sources":["../../../../src/react/components/chat/ChatComposer.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAM1D,UAAU,mBAAmB;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IAC/D,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sFAAsF;IACtF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,OAAO,CAAC;QACd,QAAQ,EAAE,qBAAqB,EAAE,CAAC;QAClC,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;KACpD,CAAC;IACF,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,aAAa,EACb,QAAQ,EACR,SAAS,EACT,SAAS,EACT,MAAM,EACN,WAAW,EACX,UAAU,EACV,QAAQ,EACR,aAAa,EACb,WAAW,EACX,MAAM,EAAE,cAAc,EACtB,OAAO,EACP,WAAW,EACX,QAAQ,EACR,UAAU,EACV,mBAAmB,GACpB,EAAE,iBAAiB,+BAsJnB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { LlmSessionUsage } from "../../../core/llm-usage.js";
|
|
2
|
+
import { type AssistantLabels } from "../../../labels.js";
|
|
3
|
+
interface ContextUsageStripProps {
|
|
4
|
+
open: boolean;
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
usage: LlmSessionUsage | null;
|
|
7
|
+
labels: AssistantLabels;
|
|
8
|
+
model: string;
|
|
9
|
+
modelContextWindows?: Record<string, number>;
|
|
10
|
+
streaming?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function ContextUsageStrip({ open, onClose, usage, labels, model, modelContextWindows, streaming, }: ContextUsageStripProps): import("react").JSX.Element | null;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=ContextUsageStrip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextUsageStrip.d.ts","sourceRoot":"","sources":["../../../../src/react/components/chat/ContextUsageStrip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,KAAK,eAAe,EAAe,MAAM,oBAAoB,CAAC;AAOvE,UAAU,sBAAsB;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,KAAK,EACL,MAAM,EACN,KAAK,EACL,mBAAmB,EACnB,SAAS,GACV,EAAE,sBAAsB,sCA2IxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LlmSettingsStrip.d.ts","sourceRoot":"","sources":["../../../../src/react/components/chat/LlmSettingsStrip.tsx"],"names":[],"mappings":"AAeA,UAAU,qBAAqB;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"LlmSettingsStrip.d.ts","sourceRoot":"","sources":["../../../../src/react/components/chat/LlmSettingsStrip.tsx"],"names":[],"mappings":"AAeA,UAAU,qBAAqB;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,qBAAqB,sCA4VxE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { LlmSessionUsage } from "../../../core/llm-usage.js";
|
|
2
|
+
import type { AssistantLabels } from "../../../labels.js";
|
|
3
|
+
interface UsageToolbarButtonProps {
|
|
4
|
+
labels: AssistantLabels;
|
|
5
|
+
active: boolean;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
ringPercent: number;
|
|
8
|
+
streaming?: boolean;
|
|
9
|
+
onClick?: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function UsageToolbarButton({ labels, active, disabled, ringPercent, streaming, onClick, }: UsageToolbarButtonProps): import("react").JSX.Element;
|
|
12
|
+
interface UsageToolbarButtonConnectedProps {
|
|
13
|
+
labels: AssistantLabels;
|
|
14
|
+
active: boolean;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
streaming?: boolean;
|
|
17
|
+
onClick?: () => void;
|
|
18
|
+
model: string;
|
|
19
|
+
usage: LlmSessionUsage | null;
|
|
20
|
+
modelContextWindows?: Record<string, number>;
|
|
21
|
+
}
|
|
22
|
+
export declare function UsageToolbarButtonConnected({ labels, active, disabled, streaming, onClick, model, usage, modelContextWindows, }: UsageToolbarButtonConnectedProps): import("react").JSX.Element;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=UsageToolbarButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsageToolbarButton.d.ts","sourceRoot":"","sources":["../../../../src/react/components/chat/UsageToolbarButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,UAAU,uBAAuB;IAC/B,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,MAAM,EACN,QAAQ,EACR,WAAW,EACX,SAAS,EACT,OAAO,GACR,EAAE,uBAAuB,+BAiDzB;AAED,UAAU,gCAAgC;IACxC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,MAAM,EACN,MAAM,EACN,QAAQ,EACR,SAAS,EACT,OAAO,EACP,KAAK,EACL,KAAK,EACL,mBAAmB,GACpB,EAAE,gCAAgC,+BAkBlC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ContextCategorySegment, ContextUsageBreakdown, ContextUsageCategory } from "../../../core/llm-context-breakdown.js";
|
|
2
|
+
import { type LlmSessionUsage, type LlmTurnUsage } from "../../../core/llm-usage.js";
|
|
3
|
+
import type { AssistantLabels } from "../../../labels.js";
|
|
4
|
+
export declare function resolveUsageBreakdown(input: {
|
|
5
|
+
turn: LlmTurnUsage | null;
|
|
6
|
+
baseline: ContextUsageBreakdown | null;
|
|
7
|
+
model: string;
|
|
8
|
+
modelContextWindows?: Record<string, number>;
|
|
9
|
+
}): ContextUsageBreakdown | null;
|
|
10
|
+
export declare function sortUsageSegments(segments: ContextCategorySegment[]): ContextCategorySegment[];
|
|
11
|
+
export declare function categoryLabel(id: ContextUsageCategory, labels: AssistantLabels): string;
|
|
12
|
+
export declare function formatUsageDuration(ms: number): string;
|
|
13
|
+
export declare function computeUsageDisplay(input: {
|
|
14
|
+
usage: LlmSessionUsage | null;
|
|
15
|
+
model: string;
|
|
16
|
+
modelContextWindows?: Record<string, number>;
|
|
17
|
+
streaming?: boolean;
|
|
18
|
+
}): {
|
|
19
|
+
turn: LlmTurnUsage | null;
|
|
20
|
+
breakdown: ContextUsageBreakdown | null;
|
|
21
|
+
contextWindow: number | null;
|
|
22
|
+
totalTokens: number;
|
|
23
|
+
contextUsedPercent: number | null;
|
|
24
|
+
ringPercent: number;
|
|
25
|
+
segments: ContextCategorySegment[];
|
|
26
|
+
hasTurnUsage: boolean;
|
|
27
|
+
session: {
|
|
28
|
+
promptTokens: number;
|
|
29
|
+
completionTokens: number;
|
|
30
|
+
totalTokens: number;
|
|
31
|
+
requestCount: number;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=context-usage-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-usage-utils.d.ts","sourceRoot":"","sources":["../../../../src/react/components/chat/context-usage-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAElB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAW1D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C,GAAG,qBAAqB,GAAG,IAAI,CAiB/B;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,sBAAsB,EAAE,GACjC,sBAAsB,EAAE,CAM1B;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,oBAAoB,EACxB,MAAM,EAAE,eAAe,GACtB,MAAM,CAER;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;;;;;;;;;;;;;;;EAmDA"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -9,7 +9,9 @@ export { ChatInteractivePrompt } from "./components/chat/ChatInteractivePrompt/i
|
|
|
9
9
|
export { ChatMessageView } from "./components/chat/ChatMessage.js";
|
|
10
10
|
export { ChatMessageScroll } from "./components/chat/ChatMessageScroll.js";
|
|
11
11
|
export { ChatReplySuggestions } from "./components/chat/ChatReplySuggestions.js";
|
|
12
|
+
export { ContextUsageStrip } from "./components/chat/ContextUsageStrip.js";
|
|
12
13
|
export { LlmSettingsStrip } from "./components/chat/LlmSettingsStrip.js";
|
|
14
|
+
export { UsageToolbarButtonConnected } from "./components/chat/UsageToolbarButton.js";
|
|
13
15
|
export { MarkdownContent } from "./components/MarkdownContent.js";
|
|
14
16
|
export { MermaidDiagram } from "./components/MermaidDiagram.js";
|
|
15
17
|
export { ModelSelector } from "./components/ModelSelector.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,WAAW,EACX,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,gCAAgC,EAChC,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,WAAW,EACX,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,gCAAgC,EAChC,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize-mermaid.d.ts","sourceRoot":"","sources":["../../../src/react/lib/sanitize-mermaid.ts"],"names":[],"mappings":"AA+CA,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMtD"}
|
package/dist/react/types.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export interface AssistantUiConfig {
|
|
|
27
27
|
showModelSelector?: boolean;
|
|
28
28
|
/** Show LLM settings button in the composer footer (default: true) */
|
|
29
29
|
showLlmSettings?: boolean;
|
|
30
|
+
/** Show LLM usage indicator in the composer footer (default: false) */
|
|
31
|
+
showUsageStats?: boolean;
|
|
30
32
|
maxWidth?: string;
|
|
31
33
|
className?: string;
|
|
32
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/react/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE7E,MAAM,WAAW,gCACf,SAAQ,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC9C,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,gCAAgC,EAAE,CAAC;IACtD,gFAAgF;IAChF,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sGAAsG;IACtG,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sEAAsE;IACtE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,0BAA0B;IACjE,yEAAyE;IACzE,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mFAAmF;IACnF,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE;QAC5B,UAAU,EAAE,OAAO,CAAC;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,KAAK,EAAE,uBAAuB,EAAE,CAAC;KAClC,KAAK,OAAO,CACX,KAAK,CAAC;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CACH,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,gDAAgD;IAChD,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,+CAA+C;IAC/C,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB,+DAA+D;IAC/D,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/react/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE7E,MAAM,WAAW,gCACf,SAAQ,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC9C,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,gCAAgC,EAAE,CAAC;IACtD,gFAAgF;IAChF,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sGAAsG;IACtG,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sEAAsE;IACtE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,0BAA0B;IACjE,yEAAyE;IACzE,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mFAAmF;IACnF,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE;QAC5B,UAAU,EAAE,OAAO,CAAC;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,KAAK,EAAE,uBAAuB,EAAE,CAAC;KAClC,KAAK,OAAO,CACX,KAAK,CAAC;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CACH,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,gDAAgD;IAChD,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,+CAA+C;IAC/C,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB,+DAA+D;IAC/D,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC"}
|
package/dist/styles.css
CHANGED
|
@@ -318,6 +318,26 @@
|
|
|
318
318
|
height: auto;
|
|
319
319
|
}
|
|
320
320
|
|
|
321
|
+
.markdown-mermaid--loading {
|
|
322
|
+
font-size: 0.75rem;
|
|
323
|
+
color: var(--text-chat-tertiary);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.markdown-mermaid--error {
|
|
327
|
+
border-color: color-mix(
|
|
328
|
+
in oklab,
|
|
329
|
+
var(--danger) 35%,
|
|
330
|
+
var(--border-default) 65%
|
|
331
|
+
);
|
|
332
|
+
background: var(--danger-soft);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
.markdown-mermaid__error {
|
|
336
|
+
margin: 0 0 0.375rem;
|
|
337
|
+
font-size: 0.75rem;
|
|
338
|
+
color: var(--text-danger);
|
|
339
|
+
}
|
|
340
|
+
|
|
321
341
|
/* ── Assistant chat (aligned with 4d-ai-agents editor) ── */
|
|
322
342
|
@keyframes assistant-icon-spin {
|
|
323
343
|
to {
|
|
@@ -1026,21 +1046,97 @@
|
|
|
1026
1046
|
display: flex;
|
|
1027
1047
|
align-items: center;
|
|
1028
1048
|
justify-content: space-between;
|
|
1029
|
-
gap: 0.
|
|
1049
|
+
gap: 0.375rem;
|
|
1030
1050
|
border-top: 1px solid var(--border-default);
|
|
1031
|
-
padding: 0.
|
|
1051
|
+
padding: 0.25rem 0.375rem;
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
.assistant-composer__footer-start {
|
|
1055
|
+
display: inline-flex;
|
|
1056
|
+
min-width: 0;
|
|
1057
|
+
flex: 1;
|
|
1058
|
+
align-items: center;
|
|
1059
|
+
gap: 0.25rem;
|
|
1032
1060
|
}
|
|
1033
1061
|
|
|
1034
1062
|
.assistant-composer__tools {
|
|
1035
1063
|
display: inline-flex;
|
|
1036
1064
|
flex-shrink: 0;
|
|
1037
1065
|
align-items: center;
|
|
1038
|
-
gap: 0.
|
|
1066
|
+
gap: 0.0625rem;
|
|
1039
1067
|
margin-left: auto;
|
|
1040
1068
|
}
|
|
1041
1069
|
|
|
1042
|
-
|
|
1043
|
-
|
|
1070
|
+
/* ── Assistant buttons (self-contained) ── */
|
|
1071
|
+
.assistant-btn {
|
|
1072
|
+
display: inline-flex;
|
|
1073
|
+
align-items: center;
|
|
1074
|
+
justify-content: center;
|
|
1075
|
+
gap: 0.5rem;
|
|
1076
|
+
padding: 0.625rem 1.125rem;
|
|
1077
|
+
border-radius: var(--radius-base, 0.5rem);
|
|
1078
|
+
font-size: 0.875rem;
|
|
1079
|
+
font-weight: 500;
|
|
1080
|
+
font-family: inherit;
|
|
1081
|
+
border: 1px solid transparent;
|
|
1082
|
+
cursor: pointer;
|
|
1083
|
+
transition:
|
|
1084
|
+
background 180ms ease,
|
|
1085
|
+
border-color 180ms ease,
|
|
1086
|
+
color 180ms ease,
|
|
1087
|
+
transform 120ms ease;
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
.assistant-btn:active:not(:disabled) {
|
|
1091
|
+
transform: scale(0.98);
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
.assistant-btn:disabled {
|
|
1095
|
+
opacity: 0.45;
|
|
1096
|
+
cursor: not-allowed;
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
.assistant-btn--primary {
|
|
1100
|
+
background: var(--brand);
|
|
1101
|
+
color: var(--brand-on-surface);
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
.assistant-btn--primary:hover:not(:disabled) {
|
|
1105
|
+
filter: brightness(1.05);
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
.assistant-btn--secondary {
|
|
1109
|
+
background: var(--surface-panel);
|
|
1110
|
+
border-color: var(--border-default);
|
|
1111
|
+
color: var(--text-heading);
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
.assistant-btn--secondary:hover:not(:disabled) {
|
|
1115
|
+
background: var(--overlay-hover);
|
|
1116
|
+
}
|
|
1117
|
+
|
|
1118
|
+
.assistant-btn--ghost {
|
|
1119
|
+
background: transparent;
|
|
1120
|
+
color: var(--text-body);
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
.assistant-btn--ghost:hover:not(:disabled) {
|
|
1124
|
+
background: var(--overlay-hover);
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
.assistant-composer__tools .assistant-btn {
|
|
1128
|
+
min-width: 1.375rem;
|
|
1129
|
+
min-height: 1.375rem;
|
|
1130
|
+
padding: 0.125rem;
|
|
1131
|
+
border-radius: 0.3125rem;
|
|
1132
|
+
gap: 0;
|
|
1133
|
+
color: var(--text-chat-secondary);
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
.assistant-composer__tool--active,
|
|
1137
|
+
.assistant-composer__tools .assistant-usage-toolbar-btn--active {
|
|
1138
|
+
color: var(--text-chat-primary);
|
|
1139
|
+
background: color-mix(in srgb, var(--text-chat-primary) 8%, transparent);
|
|
1044
1140
|
}
|
|
1045
1141
|
|
|
1046
1142
|
.assistant-composer__tool-spinner {
|
|
@@ -1054,6 +1150,198 @@
|
|
|
1054
1150
|
color: var(--text-chat-tertiary);
|
|
1055
1151
|
}
|
|
1056
1152
|
|
|
1153
|
+
.assistant-usage-toolbar-btn:hover,
|
|
1154
|
+
.assistant-usage-toolbar-btn:focus-visible {
|
|
1155
|
+
color: var(--text-chat-primary);
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
.assistant-usage-toolbar-btn__ring {
|
|
1159
|
+
display: block;
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
.assistant-usage-toolbar-btn__track {
|
|
1163
|
+
stroke: color-mix(in srgb, var(--text-chat-tertiary) 35%, transparent);
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
.assistant-usage-toolbar-btn__progress {
|
|
1167
|
+
stroke: var(--text-chat-secondary);
|
|
1168
|
+
transition: stroke-dashoffset 0.2s ease;
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
.assistant-usage-toolbar-btn__progress--live {
|
|
1172
|
+
stroke: var(--accent-primary, var(--text-chat-secondary));
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
.assistant-usage-strip {
|
|
1176
|
+
display: flex;
|
|
1177
|
+
flex-direction: column;
|
|
1178
|
+
max-height: min(60vh, 24rem);
|
|
1179
|
+
margin-bottom: 0.75rem;
|
|
1180
|
+
padding: 0.75rem;
|
|
1181
|
+
border-radius: var(--radius-base);
|
|
1182
|
+
border: 1px solid var(--border-default);
|
|
1183
|
+
background: var(--surface-panel);
|
|
1184
|
+
overflow: hidden;
|
|
1185
|
+
}
|
|
1186
|
+
|
|
1187
|
+
.assistant-usage-strip__header {
|
|
1188
|
+
display: flex;
|
|
1189
|
+
align-items: center;
|
|
1190
|
+
justify-content: space-between;
|
|
1191
|
+
gap: 0.5rem;
|
|
1192
|
+
flex-shrink: 0;
|
|
1193
|
+
margin-bottom: 0.5rem;
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
.assistant-usage-strip__title {
|
|
1197
|
+
display: inline-flex;
|
|
1198
|
+
align-items: center;
|
|
1199
|
+
gap: 0.375rem;
|
|
1200
|
+
font-size: 0.8125rem;
|
|
1201
|
+
font-weight: 600;
|
|
1202
|
+
color: var(--text-heading);
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
.assistant-usage-strip__header-actions {
|
|
1206
|
+
display: inline-flex;
|
|
1207
|
+
align-items: center;
|
|
1208
|
+
gap: 0.125rem;
|
|
1209
|
+
flex-shrink: 0;
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
.assistant-usage-strip__header-btn {
|
|
1213
|
+
padding: 0.375rem;
|
|
1214
|
+
}
|
|
1215
|
+
|
|
1216
|
+
.assistant-usage-strip__body {
|
|
1217
|
+
display: flex;
|
|
1218
|
+
flex-direction: column;
|
|
1219
|
+
gap: 0.625rem;
|
|
1220
|
+
overflow: auto;
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
.assistant-usage-strip__summary {
|
|
1224
|
+
display: flex;
|
|
1225
|
+
align-items: baseline;
|
|
1226
|
+
justify-content: space-between;
|
|
1227
|
+
gap: 0.75rem;
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
.assistant-usage-strip__percent {
|
|
1231
|
+
font-size: 0.8125rem;
|
|
1232
|
+
font-weight: 600;
|
|
1233
|
+
color: var(--text-chat-primary);
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
.assistant-usage-strip__budget {
|
|
1237
|
+
font-size: 0.6875rem;
|
|
1238
|
+
color: var(--text-chat-tertiary);
|
|
1239
|
+
white-space: nowrap;
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
.assistant-usage-strip__bar {
|
|
1243
|
+
display: flex;
|
|
1244
|
+
height: 0.375rem;
|
|
1245
|
+
overflow: hidden;
|
|
1246
|
+
border-radius: 999px;
|
|
1247
|
+
background: color-mix(in srgb, var(--text-chat-tertiary) 16%, transparent);
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
.assistant-usage-strip__bar-segment {
|
|
1251
|
+
min-width: 2px;
|
|
1252
|
+
height: 100%;
|
|
1253
|
+
transition: width 0.25s ease;
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1256
|
+
.assistant-usage-strip__bar-segment--systemPrompt,
|
|
1257
|
+
.assistant-usage-strip__swatch--systemPrompt {
|
|
1258
|
+
background: var(--usage-system, #8b8d98);
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
.assistant-usage-strip__bar-segment--toolDefinitions,
|
|
1262
|
+
.assistant-usage-strip__swatch--toolDefinitions {
|
|
1263
|
+
background: var(--usage-tools, #9b7bf7);
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
.assistant-usage-strip__bar-segment--conversation,
|
|
1267
|
+
.assistant-usage-strip__swatch--conversation {
|
|
1268
|
+
background: var(--usage-conversation, #5b9cf5);
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
.assistant-usage-strip__bar-segment--completion,
|
|
1272
|
+
.assistant-usage-strip__swatch--completion {
|
|
1273
|
+
background: var(--usage-completion, #4ade80);
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
.assistant-usage-strip__bar-segment--cached,
|
|
1277
|
+
.assistant-usage-strip__swatch--cached {
|
|
1278
|
+
background: var(--usage-cached, #fbbf24);
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1281
|
+
.assistant-usage-strip__bar-segment--reasoning,
|
|
1282
|
+
.assistant-usage-strip__swatch--reasoning {
|
|
1283
|
+
background: var(--usage-reasoning, #fb923c);
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
.assistant-usage-strip__legend {
|
|
1287
|
+
display: flex;
|
|
1288
|
+
flex-direction: column;
|
|
1289
|
+
gap: 0.375rem;
|
|
1290
|
+
margin: 0;
|
|
1291
|
+
padding: 0;
|
|
1292
|
+
list-style: none;
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
.assistant-usage-strip__legend-item {
|
|
1296
|
+
display: grid;
|
|
1297
|
+
grid-template-columns: 0.625rem 1fr auto;
|
|
1298
|
+
align-items: center;
|
|
1299
|
+
gap: 0.5rem;
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
.assistant-usage-strip__swatch {
|
|
1303
|
+
width: 0.625rem;
|
|
1304
|
+
height: 0.625rem;
|
|
1305
|
+
border-radius: 0.125rem;
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
.assistant-usage-strip__legend-label {
|
|
1309
|
+
font-size: 0.75rem;
|
|
1310
|
+
color: var(--text-chat-secondary);
|
|
1311
|
+
}
|
|
1312
|
+
|
|
1313
|
+
.assistant-usage-strip__legend-value {
|
|
1314
|
+
font-size: 0.75rem;
|
|
1315
|
+
font-variant-numeric: tabular-nums;
|
|
1316
|
+
color: var(--text-chat-primary);
|
|
1317
|
+
}
|
|
1318
|
+
|
|
1319
|
+
.assistant-usage-strip__hint,
|
|
1320
|
+
.assistant-usage-strip__idle {
|
|
1321
|
+
margin: 0;
|
|
1322
|
+
font-size: 0.6875rem;
|
|
1323
|
+
line-height: 1.45;
|
|
1324
|
+
color: var(--text-chat-tertiary);
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
.assistant-usage-strip__stats {
|
|
1328
|
+
display: flex;
|
|
1329
|
+
flex-wrap: wrap;
|
|
1330
|
+
gap: 0.375rem 0.625rem;
|
|
1331
|
+
border-top: 1px solid var(--border-default);
|
|
1332
|
+
padding-top: 0.625rem;
|
|
1333
|
+
font-size: 0.6875rem;
|
|
1334
|
+
color: var(--text-chat-tertiary);
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
.assistant-usage-strip__model {
|
|
1338
|
+
flex: 1 1 100%;
|
|
1339
|
+
overflow: hidden;
|
|
1340
|
+
text-overflow: ellipsis;
|
|
1341
|
+
white-space: nowrap;
|
|
1342
|
+
color: var(--text-chat-secondary);
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1057
1345
|
.composer-command-menu {
|
|
1058
1346
|
position: absolute;
|
|
1059
1347
|
bottom: calc(100% + 0.5rem);
|
|
@@ -2415,63 +2703,6 @@
|
|
|
2415
2703
|
border-radius: 0.75rem;
|
|
2416
2704
|
}
|
|
2417
2705
|
|
|
2418
|
-
/* ── Assistant buttons (self-contained) ── */
|
|
2419
|
-
.assistant-btn {
|
|
2420
|
-
display: inline-flex;
|
|
2421
|
-
align-items: center;
|
|
2422
|
-
justify-content: center;
|
|
2423
|
-
gap: 0.5rem;
|
|
2424
|
-
padding: 0.625rem 1.125rem;
|
|
2425
|
-
border-radius: var(--radius-base, 0.5rem);
|
|
2426
|
-
font-size: 0.875rem;
|
|
2427
|
-
font-weight: 500;
|
|
2428
|
-
font-family: inherit;
|
|
2429
|
-
border: 1px solid transparent;
|
|
2430
|
-
cursor: pointer;
|
|
2431
|
-
transition:
|
|
2432
|
-
background 180ms ease,
|
|
2433
|
-
border-color 180ms ease,
|
|
2434
|
-
color 180ms ease,
|
|
2435
|
-
transform 120ms ease;
|
|
2436
|
-
}
|
|
2437
|
-
|
|
2438
|
-
.assistant-btn:active:not(:disabled) {
|
|
2439
|
-
transform: scale(0.98);
|
|
2440
|
-
}
|
|
2441
|
-
|
|
2442
|
-
.assistant-btn:disabled {
|
|
2443
|
-
opacity: 0.45;
|
|
2444
|
-
cursor: not-allowed;
|
|
2445
|
-
}
|
|
2446
|
-
|
|
2447
|
-
.assistant-btn--primary {
|
|
2448
|
-
background: var(--brand);
|
|
2449
|
-
color: var(--brand-on-surface);
|
|
2450
|
-
}
|
|
2451
|
-
|
|
2452
|
-
.assistant-btn--primary:hover:not(:disabled) {
|
|
2453
|
-
filter: brightness(1.05);
|
|
2454
|
-
}
|
|
2455
|
-
|
|
2456
|
-
.assistant-btn--secondary {
|
|
2457
|
-
background: var(--surface-panel);
|
|
2458
|
-
border-color: var(--border-default);
|
|
2459
|
-
color: var(--text-heading);
|
|
2460
|
-
}
|
|
2461
|
-
|
|
2462
|
-
.assistant-btn--secondary:hover:not(:disabled) {
|
|
2463
|
-
background: var(--overlay-hover);
|
|
2464
|
-
}
|
|
2465
|
-
|
|
2466
|
-
.assistant-btn--ghost {
|
|
2467
|
-
background: transparent;
|
|
2468
|
-
color: var(--text-body);
|
|
2469
|
-
}
|
|
2470
|
-
|
|
2471
|
-
.assistant-btn--ghost:hover:not(:disabled) {
|
|
2472
|
-
background: var(--overlay-hover);
|
|
2473
|
-
}
|
|
2474
|
-
|
|
2475
2706
|
.assistant-input {
|
|
2476
2707
|
width: 100%;
|
|
2477
2708
|
padding: 0.375rem 0.625rem;
|