@4djs/assistant 0.1.3 → 0.1.4

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 (37) hide show
  1. package/dist/core/chat-history.d.ts.map +1 -1
  2. package/dist/core/create-assistant-store.d.ts +2 -0
  3. package/dist/core/create-assistant-store.d.ts.map +1 -1
  4. package/dist/core/index.d.ts +5 -1
  5. package/dist/core/index.d.ts.map +1 -1
  6. package/dist/core/index.js +715 -28
  7. package/dist/core/llm-chat.d.ts +13 -0
  8. package/dist/core/llm-chat.d.ts.map +1 -1
  9. package/dist/core/llm-context-breakdown.d.ts +39 -0
  10. package/dist/core/llm-context-breakdown.d.ts.map +1 -0
  11. package/dist/core/llm-settings-storage.d.ts +3 -0
  12. package/dist/core/llm-settings-storage.d.ts.map +1 -1
  13. package/dist/core/llm-sse.d.ts +2 -0
  14. package/dist/core/llm-sse.d.ts.map +1 -1
  15. package/dist/core/llm-usage.d.ts +52 -0
  16. package/dist/core/llm-usage.d.ts.map +1 -0
  17. package/dist/core/types.d.ts +5 -0
  18. package/dist/core/types.d.ts.map +1 -1
  19. package/dist/index.js +353 -353
  20. package/dist/labels.d.ts +27 -1
  21. package/dist/labels.d.ts.map +1 -1
  22. package/dist/react/Assistant.d.ts.map +1 -1
  23. package/dist/react/components/chat/ChatComposer.d.ts +10 -2
  24. package/dist/react/components/chat/ChatComposer.d.ts.map +1 -1
  25. package/dist/react/components/chat/ContextUsageStrip.d.ts +14 -0
  26. package/dist/react/components/chat/ContextUsageStrip.d.ts.map +1 -0
  27. package/dist/react/components/chat/LlmSettingsStrip.d.ts.map +1 -1
  28. package/dist/react/components/chat/UsageToolbarButton.d.ts +24 -0
  29. package/dist/react/components/chat/UsageToolbarButton.d.ts.map +1 -0
  30. package/dist/react/components/chat/context-usage-utils.d.ts +34 -0
  31. package/dist/react/components/chat/context-usage-utils.d.ts.map +1 -0
  32. package/dist/react/index.d.ts +2 -0
  33. package/dist/react/index.d.ts.map +1 -1
  34. package/dist/react/types.d.ts +2 -0
  35. package/dist/react/types.d.ts.map +1 -1
  36. package/dist/styles.css +216 -5
  37. 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": "Configured — leave blank to keep";
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}";
@@ -1 +1 @@
1
- {"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../src/labels.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoI3B,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
+ {"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;AAiBf,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAuUlE,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
+ {"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,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
- onOpenLlmSettings?: () => void;
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;AAK1D,UAAU,mBAAmB;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,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;CACH;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,GACZ,EAAE,iBAAiB,+BAmInB"}
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":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AASvE,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,sCAgVxE"}
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;AAEhD,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,eAAe,EAAe,MAAM,oBAAoB,CAAC;AAWvE,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;;;;;;;;;;;;;;;EAgDA"}
@@ -9,6 +9,8 @@ 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";
13
+ export { UsageToolbarButtonConnected } from "./components/chat/UsageToolbarButton.js";
12
14
  export { LlmSettingsStrip } from "./components/chat/LlmSettingsStrip.js";
13
15
  export { MarkdownContent } from "./components/MarkdownContent.js";
14
16
  export { MermaidDiagram } from "./components/MermaidDiagram.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,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,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"}
@@ -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
@@ -1026,21 +1026,40 @@
1026
1026
  display: flex;
1027
1027
  align-items: center;
1028
1028
  justify-content: space-between;
1029
- gap: 0.5rem;
1029
+ gap: 0.375rem;
1030
1030
  border-top: 1px solid var(--border-default);
1031
- padding: 0.375rem 0.5rem;
1031
+ padding: 0.25rem 0.375rem;
1032
+ }
1033
+
1034
+ .assistant-composer__footer-start {
1035
+ display: inline-flex;
1036
+ min-width: 0;
1037
+ flex: 1;
1038
+ align-items: center;
1039
+ gap: 0.25rem;
1032
1040
  }
1033
1041
 
1034
1042
  .assistant-composer__tools {
1035
1043
  display: inline-flex;
1036
1044
  flex-shrink: 0;
1037
1045
  align-items: center;
1038
- gap: 0.125rem;
1046
+ gap: 0.0625rem;
1039
1047
  margin-left: auto;
1040
1048
  }
1041
1049
 
1042
- .assistant-composer__tool {
1043
- padding: 0.375rem;
1050
+ .assistant-composer__tools .assistant-btn {
1051
+ min-width: 1.375rem;
1052
+ min-height: 1.375rem;
1053
+ padding: 0.125rem;
1054
+ border-radius: 0.3125rem;
1055
+ gap: 0;
1056
+ color: var(--text-chat-secondary);
1057
+ }
1058
+
1059
+ .assistant-composer__tool--active,
1060
+ .assistant-composer__tools .assistant-usage-toolbar-btn--active {
1061
+ color: var(--text-chat-primary);
1062
+ background: color-mix(in srgb, var(--text-chat-primary) 8%, transparent);
1044
1063
  }
1045
1064
 
1046
1065
  .assistant-composer__tool-spinner {
@@ -1054,6 +1073,198 @@
1054
1073
  color: var(--text-chat-tertiary);
1055
1074
  }
1056
1075
 
1076
+ .assistant-usage-toolbar-btn:hover,
1077
+ .assistant-usage-toolbar-btn:focus-visible {
1078
+ color: var(--text-chat-primary);
1079
+ }
1080
+
1081
+ .assistant-usage-toolbar-btn__ring {
1082
+ display: block;
1083
+ }
1084
+
1085
+ .assistant-usage-toolbar-btn__track {
1086
+ stroke: color-mix(in srgb, var(--text-chat-tertiary) 35%, transparent);
1087
+ }
1088
+
1089
+ .assistant-usage-toolbar-btn__progress {
1090
+ stroke: var(--text-chat-secondary);
1091
+ transition: stroke-dashoffset 0.2s ease;
1092
+ }
1093
+
1094
+ .assistant-usage-toolbar-btn__progress--live {
1095
+ stroke: var(--accent-primary, var(--text-chat-secondary));
1096
+ }
1097
+
1098
+ .assistant-usage-strip {
1099
+ display: flex;
1100
+ flex-direction: column;
1101
+ max-height: min(60vh, 24rem);
1102
+ margin-bottom: 0.75rem;
1103
+ padding: 0.75rem;
1104
+ border-radius: var(--radius-base);
1105
+ border: 1px solid var(--border-default);
1106
+ background: var(--surface-panel);
1107
+ overflow: hidden;
1108
+ }
1109
+
1110
+ .assistant-usage-strip__header {
1111
+ display: flex;
1112
+ align-items: center;
1113
+ justify-content: space-between;
1114
+ gap: 0.5rem;
1115
+ flex-shrink: 0;
1116
+ margin-bottom: 0.5rem;
1117
+ }
1118
+
1119
+ .assistant-usage-strip__title {
1120
+ display: inline-flex;
1121
+ align-items: center;
1122
+ gap: 0.375rem;
1123
+ font-size: 0.8125rem;
1124
+ font-weight: 600;
1125
+ color: var(--text-heading);
1126
+ }
1127
+
1128
+ .assistant-usage-strip__header-actions {
1129
+ display: inline-flex;
1130
+ align-items: center;
1131
+ gap: 0.125rem;
1132
+ flex-shrink: 0;
1133
+ }
1134
+
1135
+ .assistant-usage-strip__header-btn {
1136
+ padding: 0.375rem;
1137
+ }
1138
+
1139
+ .assistant-usage-strip__body {
1140
+ display: flex;
1141
+ flex-direction: column;
1142
+ gap: 0.625rem;
1143
+ overflow: auto;
1144
+ }
1145
+
1146
+ .assistant-usage-strip__summary {
1147
+ display: flex;
1148
+ align-items: baseline;
1149
+ justify-content: space-between;
1150
+ gap: 0.75rem;
1151
+ }
1152
+
1153
+ .assistant-usage-strip__percent {
1154
+ font-size: 0.8125rem;
1155
+ font-weight: 600;
1156
+ color: var(--text-chat-primary);
1157
+ }
1158
+
1159
+ .assistant-usage-strip__budget {
1160
+ font-size: 0.6875rem;
1161
+ color: var(--text-chat-tertiary);
1162
+ white-space: nowrap;
1163
+ }
1164
+
1165
+ .assistant-usage-strip__bar {
1166
+ display: flex;
1167
+ height: 0.375rem;
1168
+ overflow: hidden;
1169
+ border-radius: 999px;
1170
+ background: color-mix(in srgb, var(--text-chat-tertiary) 16%, transparent);
1171
+ }
1172
+
1173
+ .assistant-usage-strip__bar-segment {
1174
+ min-width: 2px;
1175
+ height: 100%;
1176
+ transition: width 0.25s ease;
1177
+ }
1178
+
1179
+ .assistant-usage-strip__bar-segment--systemPrompt,
1180
+ .assistant-usage-strip__swatch--systemPrompt {
1181
+ background: var(--usage-system, #8b8d98);
1182
+ }
1183
+
1184
+ .assistant-usage-strip__bar-segment--toolDefinitions,
1185
+ .assistant-usage-strip__swatch--toolDefinitions {
1186
+ background: var(--usage-tools, #9b7bf7);
1187
+ }
1188
+
1189
+ .assistant-usage-strip__bar-segment--conversation,
1190
+ .assistant-usage-strip__swatch--conversation {
1191
+ background: var(--usage-conversation, #5b9cf5);
1192
+ }
1193
+
1194
+ .assistant-usage-strip__bar-segment--completion,
1195
+ .assistant-usage-strip__swatch--completion {
1196
+ background: var(--usage-completion, #4ade80);
1197
+ }
1198
+
1199
+ .assistant-usage-strip__bar-segment--cached,
1200
+ .assistant-usage-strip__swatch--cached {
1201
+ background: var(--usage-cached, #fbbf24);
1202
+ }
1203
+
1204
+ .assistant-usage-strip__bar-segment--reasoning,
1205
+ .assistant-usage-strip__swatch--reasoning {
1206
+ background: var(--usage-reasoning, #fb923c);
1207
+ }
1208
+
1209
+ .assistant-usage-strip__legend {
1210
+ display: flex;
1211
+ flex-direction: column;
1212
+ gap: 0.375rem;
1213
+ margin: 0;
1214
+ padding: 0;
1215
+ list-style: none;
1216
+ }
1217
+
1218
+ .assistant-usage-strip__legend-item {
1219
+ display: grid;
1220
+ grid-template-columns: 0.625rem 1fr auto;
1221
+ align-items: center;
1222
+ gap: 0.5rem;
1223
+ }
1224
+
1225
+ .assistant-usage-strip__swatch {
1226
+ width: 0.625rem;
1227
+ height: 0.625rem;
1228
+ border-radius: 0.125rem;
1229
+ }
1230
+
1231
+ .assistant-usage-strip__legend-label {
1232
+ font-size: 0.75rem;
1233
+ color: var(--text-chat-secondary);
1234
+ }
1235
+
1236
+ .assistant-usage-strip__legend-value {
1237
+ font-size: 0.75rem;
1238
+ font-variant-numeric: tabular-nums;
1239
+ color: var(--text-chat-primary);
1240
+ }
1241
+
1242
+ .assistant-usage-strip__hint,
1243
+ .assistant-usage-strip__idle {
1244
+ margin: 0;
1245
+ font-size: 0.6875rem;
1246
+ line-height: 1.45;
1247
+ color: var(--text-chat-tertiary);
1248
+ }
1249
+
1250
+ .assistant-usage-strip__stats {
1251
+ display: flex;
1252
+ flex-wrap: wrap;
1253
+ gap: 0.375rem 0.625rem;
1254
+ border-top: 1px solid var(--border-default);
1255
+ padding-top: 0.625rem;
1256
+ font-size: 0.6875rem;
1257
+ color: var(--text-chat-tertiary);
1258
+ }
1259
+
1260
+ .assistant-usage-strip__model {
1261
+ flex: 1 1 100%;
1262
+ overflow: hidden;
1263
+ text-overflow: ellipsis;
1264
+ white-space: nowrap;
1265
+ color: var(--text-chat-secondary);
1266
+ }
1267
+
1057
1268
  .composer-command-menu {
1058
1269
  position: absolute;
1059
1270
  bottom: calc(100% + 0.5rem);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@4djs/assistant",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "type": "module",
5
5
  "types": "./dist/react/index.d.ts",
6
6
  "files": [