@theia/ai-chat-ui 1.74.0-next.8 → 1.74.0

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 (131) hide show
  1. package/lib/browser/ai-chat-ui-contribution.d.ts.map +1 -1
  2. package/lib/browser/ai-chat-ui-contribution.js +54 -31
  3. package/lib/browser/ai-chat-ui-contribution.js.map +1 -1
  4. package/lib/browser/ai-chat-ui-frontend-module.d.ts.map +1 -1
  5. package/lib/browser/ai-chat-ui-frontend-module.js +11 -3
  6. package/lib/browser/ai-chat-ui-frontend-module.js.map +1 -1
  7. package/lib/browser/chat-banner-provider.d.ts +20 -0
  8. package/lib/browser/chat-banner-provider.d.ts.map +1 -0
  9. package/lib/browser/chat-banner-provider.js +28 -0
  10. package/lib/browser/chat-banner-provider.js.map +1 -0
  11. package/lib/browser/chat-banner-widget.d.ts +20 -0
  12. package/lib/browser/chat-banner-widget.d.ts.map +1 -0
  13. package/lib/browser/chat-banner-widget.js +81 -0
  14. package/lib/browser/chat-banner-widget.js.map +1 -0
  15. package/lib/browser/chat-input-widget.d.ts +34 -15
  16. package/lib/browser/chat-input-widget.d.ts.map +1 -1
  17. package/lib/browser/chat-input-widget.js +166 -60
  18. package/lib/browser/chat-input-widget.js.map +1 -1
  19. package/lib/browser/chat-response-renderer/block-external-resources.d.ts +22 -0
  20. package/lib/browser/chat-response-renderer/block-external-resources.d.ts.map +1 -0
  21. package/lib/browser/chat-response-renderer/block-external-resources.js +331 -0
  22. package/lib/browser/chat-response-renderer/block-external-resources.js.map +1 -0
  23. package/lib/browser/chat-response-renderer/block-external-resources.spec.d.ts +2 -0
  24. package/lib/browser/chat-response-renderer/block-external-resources.spec.d.ts.map +1 -0
  25. package/lib/browser/chat-response-renderer/block-external-resources.spec.js +351 -0
  26. package/lib/browser/chat-response-renderer/block-external-resources.spec.js.map +1 -0
  27. package/lib/browser/chat-response-renderer/blocked-resource-placeholder.d.ts +7 -0
  28. package/lib/browser/chat-response-renderer/blocked-resource-placeholder.d.ts.map +1 -0
  29. package/lib/browser/chat-response-renderer/blocked-resource-placeholder.js +39 -0
  30. package/lib/browser/chat-response-renderer/blocked-resource-placeholder.js.map +1 -0
  31. package/lib/browser/chat-response-renderer/compaction-part-renderer.d.ts +8 -0
  32. package/lib/browser/chat-response-renderer/compaction-part-renderer.d.ts.map +1 -0
  33. package/lib/browser/chat-response-renderer/compaction-part-renderer.js +47 -0
  34. package/lib/browser/chat-response-renderer/compaction-part-renderer.js.map +1 -0
  35. package/lib/browser/chat-response-renderer/delegation-tool-renderer.js +1 -1
  36. package/lib/browser/chat-response-renderer/delegation-tool-renderer.js.map +1 -1
  37. package/lib/browser/chat-response-renderer/external-resource-allowlist-contribution.d.ts +11 -0
  38. package/lib/browser/chat-response-renderer/external-resource-allowlist-contribution.d.ts.map +1 -0
  39. package/lib/browser/chat-response-renderer/external-resource-allowlist-contribution.js +47 -0
  40. package/lib/browser/chat-response-renderer/external-resource-allowlist-contribution.js.map +1 -0
  41. package/lib/browser/chat-response-renderer/index.d.ts +1 -0
  42. package/lib/browser/chat-response-renderer/index.d.ts.map +1 -1
  43. package/lib/browser/chat-response-renderer/index.js +1 -0
  44. package/lib/browser/chat-response-renderer/index.js.map +1 -1
  45. package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts +4 -1
  46. package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts.map +1 -1
  47. package/lib/browser/chat-response-renderer/markdown-part-renderer.js +41 -10
  48. package/lib/browser/chat-response-renderer/markdown-part-renderer.js.map +1 -1
  49. package/lib/browser/chat-response-renderer/markdown-part-renderer.spec.d.ts +2 -0
  50. package/lib/browser/chat-response-renderer/markdown-part-renderer.spec.d.ts.map +1 -0
  51. package/lib/browser/chat-response-renderer/markdown-part-renderer.spec.js +167 -0
  52. package/lib/browser/chat-response-renderer/markdown-part-renderer.spec.js.map +1 -0
  53. package/lib/browser/chat-session-notification-contribution.d.ts +36 -0
  54. package/lib/browser/chat-session-notification-contribution.d.ts.map +1 -0
  55. package/lib/browser/chat-session-notification-contribution.js +128 -0
  56. package/lib/browser/chat-session-notification-contribution.js.map +1 -0
  57. package/lib/browser/chat-session-notification-contribution.spec.d.ts +2 -0
  58. package/lib/browser/chat-session-notification-contribution.spec.d.ts.map +1 -0
  59. package/lib/browser/chat-session-notification-contribution.spec.js +233 -0
  60. package/lib/browser/chat-session-notification-contribution.spec.js.map +1 -0
  61. package/lib/browser/chat-token-usage-indicator-util.d.ts +8 -1
  62. package/lib/browser/chat-token-usage-indicator-util.d.ts.map +1 -1
  63. package/lib/browser/chat-token-usage-indicator-util.js +50 -5
  64. package/lib/browser/chat-token-usage-indicator-util.js.map +1 -1
  65. package/lib/browser/chat-token-usage-indicator-util.spec.js +86 -2
  66. package/lib/browser/chat-token-usage-indicator-util.spec.js.map +1 -1
  67. package/lib/browser/chat-tree-view/chat-view-tree-widget.d.ts +12 -27
  68. package/lib/browser/chat-tree-view/chat-view-tree-widget.d.ts.map +1 -1
  69. package/lib/browser/chat-tree-view/chat-view-tree-widget.js +39 -127
  70. package/lib/browser/chat-tree-view/chat-view-tree-widget.js.map +1 -1
  71. package/lib/browser/chat-tree-view/chat-view-tree-widget.spec.d.ts +2 -0
  72. package/lib/browser/chat-tree-view/chat-view-tree-widget.spec.d.ts.map +1 -0
  73. package/lib/browser/chat-tree-view/chat-view-tree-widget.spec.js +83 -0
  74. package/lib/browser/chat-tree-view/chat-view-tree-widget.spec.js.map +1 -0
  75. package/lib/browser/chat-tree-view/model-badge.d.ts +13 -0
  76. package/lib/browser/chat-tree-view/model-badge.d.ts.map +1 -0
  77. package/lib/browser/chat-tree-view/model-badge.js +41 -0
  78. package/lib/browser/chat-tree-view/model-badge.js.map +1 -0
  79. package/lib/browser/chat-view-commands.d.ts +1 -0
  80. package/lib/browser/chat-view-commands.d.ts.map +1 -1
  81. package/lib/browser/chat-view-commands.js +6 -1
  82. package/lib/browser/chat-view-commands.js.map +1 -1
  83. package/lib/browser/chat-view-preferences.d.ts +2 -0
  84. package/lib/browser/chat-view-preferences.d.ts.map +1 -1
  85. package/lib/browser/chat-view-preferences.js +13 -1
  86. package/lib/browser/chat-view-preferences.js.map +1 -1
  87. package/lib/browser/chat-view-widget.d.ts +3 -1
  88. package/lib/browser/chat-view-widget.d.ts.map +1 -1
  89. package/lib/browser/chat-view-widget.js +8 -2
  90. package/lib/browser/chat-view-widget.js.map +1 -1
  91. package/lib/browser/session-settings-dialog.d.ts +5 -0
  92. package/lib/browser/session-settings-dialog.d.ts.map +1 -1
  93. package/lib/browser/session-settings-dialog.js +61 -2
  94. package/lib/browser/session-settings-dialog.js.map +1 -1
  95. package/package.json +13 -13
  96. package/src/browser/ai-chat-ui-contribution.ts +64 -36
  97. package/src/browser/ai-chat-ui-frontend-module.ts +12 -3
  98. package/src/browser/chat-banner-provider.ts +36 -0
  99. package/src/browser/chat-banner-widget.tsx +69 -0
  100. package/src/browser/chat-input-widget.tsx +222 -62
  101. package/src/browser/chat-response-renderer/block-external-resources.spec.ts +449 -0
  102. package/src/browser/chat-response-renderer/block-external-resources.ts +370 -0
  103. package/src/browser/chat-response-renderer/blocked-resource-placeholder.tsx +44 -0
  104. package/src/browser/chat-response-renderer/compaction-part-renderer.tsx +52 -0
  105. package/src/browser/chat-response-renderer/delegation-tool-renderer.tsx +1 -1
  106. package/src/browser/chat-response-renderer/external-resource-allowlist-contribution.ts +42 -0
  107. package/src/browser/chat-response-renderer/index.ts +1 -0
  108. package/src/browser/chat-response-renderer/markdown-part-renderer.spec.tsx +203 -0
  109. package/src/browser/chat-response-renderer/markdown-part-renderer.tsx +47 -10
  110. package/src/browser/chat-session-notification-contribution.spec.ts +314 -0
  111. package/src/browser/chat-session-notification-contribution.ts +132 -0
  112. package/src/browser/chat-token-usage-indicator-util.spec.ts +100 -2
  113. package/src/browser/chat-token-usage-indicator-util.ts +52 -5
  114. package/src/browser/chat-tree-view/chat-view-tree-widget.spec.tsx +117 -0
  115. package/src/browser/chat-tree-view/chat-view-tree-widget.tsx +53 -153
  116. package/src/browser/chat-tree-view/model-badge.tsx +52 -0
  117. package/src/browser/chat-view-commands.ts +6 -0
  118. package/src/browser/chat-view-preferences.ts +16 -0
  119. package/src/browser/chat-view-widget.tsx +6 -1
  120. package/src/browser/session-settings-dialog.tsx +140 -1
  121. package/src/browser/style/index.css +195 -34
  122. package/lib/browser/chat-input-needed-notification-contribution.d.ts +0 -28
  123. package/lib/browser/chat-input-needed-notification-contribution.d.ts.map +0 -1
  124. package/lib/browser/chat-input-needed-notification-contribution.js +0 -104
  125. package/lib/browser/chat-input-needed-notification-contribution.js.map +0 -1
  126. package/lib/browser/chat-input-needed-notification-contribution.spec.d.ts +0 -2
  127. package/lib/browser/chat-input-needed-notification-contribution.spec.d.ts.map +0 -1
  128. package/lib/browser/chat-input-needed-notification-contribution.spec.js +0 -171
  129. package/lib/browser/chat-input-needed-notification-contribution.spec.js.map +0 -1
  130. package/src/browser/chat-input-needed-notification-contribution.spec.ts +0 -223
  131. package/src/browser/chat-input-needed-notification-contribution.ts +0 -103
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 EclipseSource GmbH.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const jsdom_1 = require("@theia/core/lib/browser/test/jsdom");
19
+ let disableJSDOM = (0, jsdom_1.enableJSDOM)();
20
+ const frontend_application_config_provider_1 = require("@theia/core/lib/browser/frontend-application-config-provider");
21
+ frontend_application_config_provider_1.FrontendApplicationConfigProvider.set({});
22
+ require("reflect-metadata");
23
+ const chai_1 = require("chai");
24
+ const core_1 = require("@theia/core");
25
+ const ai_core_1 = require("@theia/ai-core");
26
+ const chat_session_notification_contribution_1 = require("./chat-session-notification-contribution");
27
+ disableJSDOM();
28
+ class FakeChatModel {
29
+ constructor() {
30
+ this.id = 'test-model';
31
+ this.emitter = new core_1.Emitter();
32
+ this.onDidChange = this.emitter.event;
33
+ this.status = 'idle';
34
+ this.requests = [];
35
+ }
36
+ getRequests() {
37
+ return this.requests;
38
+ }
39
+ setStatus(status) {
40
+ this.status = status;
41
+ this.emitter.fire({ kind: 'statusChanged', status });
42
+ }
43
+ fireResponseChanged() {
44
+ this.emitter.fire({ kind: 'responseChanged' });
45
+ }
46
+ }
47
+ function createSession(id, model, title = 'Session ' + id) {
48
+ return {
49
+ id,
50
+ title,
51
+ model: model,
52
+ isActive: false
53
+ };
54
+ }
55
+ class TestableContribution extends chat_session_notification_contribution_1.ChatSessionNotificationContribution {
56
+ // Expose protected hooks so we can drive the contribution from tests without going through DI.
57
+ setChatService(service) {
58
+ this.chatService = service;
59
+ }
60
+ setNotificationService(service) {
61
+ this.notificationService = service;
62
+ }
63
+ setShell(shell) {
64
+ this.shell = shell;
65
+ }
66
+ }
67
+ describe('ChatSessionNotificationContribution', () => {
68
+ before(() => disableJSDOM = (0, jsdom_1.enableJSDOM)());
69
+ after(() => disableJSDOM());
70
+ let contribution;
71
+ let chatModel;
72
+ let session;
73
+ let notifications;
74
+ let chatService;
75
+ let sessionEventEmitter;
76
+ beforeEach(() => {
77
+ chatModel = new FakeChatModel();
78
+ session = createSession('session-1', chatModel);
79
+ notifications = [];
80
+ const notificationService = {
81
+ async showNotification(agentId, kind, options) {
82
+ notifications.push({ agentId, kind, options });
83
+ }
84
+ };
85
+ sessionEventEmitter = new core_1.Emitter();
86
+ chatService = {
87
+ getSessions: () => [session],
88
+ getSession: (id) => (id === session.id ? session : undefined),
89
+ onSessionEvent: sessionEventEmitter.event,
90
+ setActiveSession: () => { }
91
+ };
92
+ const shell = { currentWidget: undefined };
93
+ contribution = new TestableContribution();
94
+ contribution.setChatService(chatService);
95
+ contribution.setNotificationService(notificationService);
96
+ contribution.setShell(shell);
97
+ contribution.onStart();
98
+ chatModel.requests = [{
99
+ agentId: 'agent-a',
100
+ response: {}
101
+ }];
102
+ });
103
+ describe('input needed', () => {
104
+ it('fires a notification on the transition into a waiting status', () => {
105
+ chatModel.setStatus('awaitingInput');
106
+ (0, chai_1.expect)(notifications).to.have.lengthOf(1);
107
+ (0, chai_1.expect)(notifications[0].agentId).to.equal('agent-a');
108
+ (0, chai_1.expect)(notifications[0].kind).to.equal(ai_core_1.AGENT_NOTIFICATION_KIND_INPUT_NEEDED);
109
+ (0, chai_1.expect)(notifications[0].options?.sessionTitle).to.equal(session.title);
110
+ });
111
+ it('fires a notification when a tool approval is needed', () => {
112
+ chatModel.setStatus('awaitingApproval');
113
+ (0, chai_1.expect)(notifications).to.have.lengthOf(1);
114
+ (0, chai_1.expect)(notifications[0].kind).to.equal(ai_core_1.AGENT_NOTIFICATION_KIND_INPUT_NEEDED);
115
+ });
116
+ it('does not re-fire when switching between waiting statuses', () => {
117
+ chatModel.setStatus('awaitingApproval');
118
+ chatModel.setStatus('awaitingInput');
119
+ (0, chai_1.expect)(notifications).to.have.lengthOf(1);
120
+ });
121
+ it('fires again after the waiting state cleared and then started again', () => {
122
+ chatModel.setStatus('awaitingInput');
123
+ // The waiting state clears — e.g. the question was answered.
124
+ chatModel.setStatus('running');
125
+ // The agent asks for a tool approval next.
126
+ chatModel.setStatus('awaitingApproval');
127
+ (0, chai_1.expect)(notifications).to.have.lengthOf(2);
128
+ (0, chai_1.expect)(notifications.every(n => n.kind === ai_core_1.AGENT_NOTIFICATION_KIND_INPUT_NEEDED)).to.be.true;
129
+ });
130
+ it('does not fire for in-progress statuses that do not require user action', () => {
131
+ chatModel.setStatus('running');
132
+ chatModel.setStatus('awaitingToolCall');
133
+ (0, chai_1.expect)(notifications).to.have.lengthOf(0);
134
+ });
135
+ it('ignores model changes that are not status changes', () => {
136
+ chatModel.status = 'awaitingInput';
137
+ chatModel.fireResponseChanged();
138
+ (0, chai_1.expect)(notifications).to.have.lengthOf(0);
139
+ });
140
+ });
141
+ describe('completed', () => {
142
+ it('fires a completion notification when a running session becomes idle', () => {
143
+ chatModel.setStatus('running');
144
+ chatModel.setStatus('idle');
145
+ (0, chai_1.expect)(notifications).to.have.lengthOf(1);
146
+ (0, chai_1.expect)(notifications[0].agentId).to.equal('agent-a');
147
+ (0, chai_1.expect)(notifications[0].kind).to.equal(ai_core_1.AGENT_NOTIFICATION_KIND_COMPLETED);
148
+ (0, chai_1.expect)(notifications[0].options?.sessionTitle).to.equal(session.title);
149
+ });
150
+ it('fires a completion notification when a running session fails', () => {
151
+ chatModel.setStatus('running');
152
+ chatModel.setStatus('failed');
153
+ (0, chai_1.expect)(notifications).to.have.lengthOf(1);
154
+ (0, chai_1.expect)(notifications[0].kind).to.equal(ai_core_1.AGENT_NOTIFICATION_KIND_COMPLETED);
155
+ });
156
+ it('fires a completion notification when a waiting session completes directly', () => {
157
+ chatModel.setStatus('awaitingInput');
158
+ chatModel.setStatus('idle');
159
+ (0, chai_1.expect)(notifications).to.have.lengthOf(2);
160
+ (0, chai_1.expect)(notifications[0].kind).to.equal(ai_core_1.AGENT_NOTIFICATION_KIND_INPUT_NEEDED);
161
+ (0, chai_1.expect)(notifications[1].kind).to.equal(ai_core_1.AGENT_NOTIFICATION_KIND_COMPLETED);
162
+ });
163
+ it('does not fire when switching between in-progress statuses', () => {
164
+ chatModel.setStatus('running');
165
+ chatModel.setStatus('awaitingToolCall');
166
+ chatModel.setStatus('running');
167
+ (0, chai_1.expect)(notifications).to.have.lengthOf(0);
168
+ });
169
+ it('does not fire when a new request starts', () => {
170
+ chatModel.setStatus('running');
171
+ chatModel.setStatus('idle');
172
+ chatModel.setStatus('running');
173
+ (0, chai_1.expect)(notifications).to.have.lengthOf(1);
174
+ });
175
+ it('fires once per request cycle', () => {
176
+ chatModel.setStatus('running');
177
+ chatModel.setStatus('idle');
178
+ chatModel.setStatus('running');
179
+ chatModel.setStatus('idle');
180
+ (0, chai_1.expect)(notifications).to.have.lengthOf(2);
181
+ (0, chai_1.expect)(notifications.every(n => n.kind === ai_core_1.AGENT_NOTIFICATION_KIND_COMPLETED)).to.be.true;
182
+ });
183
+ });
184
+ describe('delegated sessions', () => {
185
+ it('does not fire input-needed notifications for delegated sessions', () => {
186
+ chatModel.rootSessionId = 'parent-session';
187
+ chatModel.setStatus('awaitingInput');
188
+ (0, chai_1.expect)(notifications).to.have.lengthOf(0);
189
+ });
190
+ it('does not fire completion notifications for delegated sessions', () => {
191
+ chatModel.rootSessionId = 'parent-session';
192
+ chatModel.setStatus('running');
193
+ chatModel.setStatus('idle');
194
+ (0, chai_1.expect)(notifications).to.have.lengthOf(0);
195
+ });
196
+ it('excludes sessions marked as delegated only after watching began', () => {
197
+ // The delegation tool assigns rootSessionId after createSession has returned, i.e.
198
+ // after the session-created event has been observed by this contribution.
199
+ sessionEventEmitter.fire({ type: 'created', sessionId: session.id });
200
+ chatModel.rootSessionId = 'parent-session';
201
+ chatModel.setStatus('running');
202
+ chatModel.setStatus('awaitingApproval');
203
+ chatModel.setStatus('idle');
204
+ (0, chai_1.expect)(notifications).to.have.lengthOf(0);
205
+ });
206
+ });
207
+ describe('agent resolution', () => {
208
+ it('falls back to the response.agentId when the request has no agentId', () => {
209
+ chatModel.requests = [{
210
+ response: { agentId: 'response-agent' }
211
+ }];
212
+ chatModel.setStatus('awaitingInput');
213
+ (0, chai_1.expect)(notifications).to.have.lengthOf(1);
214
+ (0, chai_1.expect)(notifications[0].agentId).to.equal('response-agent');
215
+ });
216
+ it('does not fire when no agent id is available on the last request', () => {
217
+ chatModel.requests = [{
218
+ response: {}
219
+ }];
220
+ chatModel.setStatus('awaitingInput');
221
+ (0, chai_1.expect)(notifications).to.have.lengthOf(0);
222
+ });
223
+ });
224
+ it('does not double-watch a session when a created event arrives after onStart', () => {
225
+ // The session was already returned from getSessions() in onStart, so re-watching it via
226
+ // the 'created' event must not install a second listener that would fire duplicate
227
+ // notifications.
228
+ sessionEventEmitter.fire({ type: 'created', sessionId: session.id });
229
+ chatModel.setStatus('awaitingInput');
230
+ (0, chai_1.expect)(notifications).to.have.lengthOf(1);
231
+ });
232
+ });
233
+ //# sourceMappingURL=chat-session-notification-contribution.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-session-notification-contribution.spec.js","sourceRoot":"","sources":["../../src/browser/chat-session-notification-contribution.spec.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,13 @@ export declare function formatTokenCount(count: number | undefined): string;
26
26
  */
27
27
  export declare function getUsageColorClass(totalTokens: number, threshold: number, contextWindowSize?: number): string;
28
28
  export declare function computeSessionTokenUsage(chatModel?: ChatModel): number;
29
+ /** Sum of input + output (+ cache) tokens across every response in the session. Represents cumulative billed usage. */
30
+ export declare function computeCumulativeTokenUsage(chatModel?: ChatModel): number;
31
+ /**
32
+ * Number of provider compaction events recorded across the session.
33
+ * Counts every `compaction` content part; a single response may contain more than one.
34
+ */
35
+ export declare function countCompactions(chatModel?: ChatModel): number;
29
36
  export declare function getLatestTokenUsage(chatModel?: ChatModel): ResponseTokenUsage | undefined;
30
- export declare function buildBarTooltip(usage: ResponseTokenUsage | undefined, totalTokens: number, threshold: number, contextWindowSize?: number): MarkdownString | undefined;
37
+ export declare function buildBarTooltip(usage: ResponseTokenUsage | undefined, totalTokens: number, threshold: number, contextWindowSize?: number, chatModel?: ChatModel): MarkdownString | undefined;
31
38
  //# sourceMappingURL=chat-token-usage-indicator-util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-token-usage-indicator-util.d.ts","sourceRoot":"","sources":["../../src/browser/chat-token-usage-indicator-util.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAE3E,oHAAoH;AACpH,eAAO,MAAM,iCAAiC,SAAS,CAAC;AAExD,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpE,2FAA2F;AAC3F,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAEjG;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;CAC5B,GAAG,yBAAyB,CAQ5B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQlE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAA0C,GAAG,MAAM,CAWhJ;AAED,wBAAgB,wBAAwB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAetE;AAED,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,kBAAkB,GAAG,SAAS,CAYzF;AAED,wBAAgB,eAAe,CAC3B,KAAK,EAAE,kBAAkB,GAAG,SAAS,EACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,iBAAiB,GAAE,MAA0C,GAC9D,cAAc,GAAG,SAAS,CAmC5B"}
1
+ {"version":3,"file":"chat-token-usage-indicator-util.d.ts","sourceRoot":"","sources":["../../src/browser/chat-token-usage-indicator-util.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAE3E,oHAAoH;AACpH,eAAO,MAAM,iCAAiC,SAAS,CAAC;AAExD,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpE,2FAA2F;AAC3F,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAEjG;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;CAC5B,GAAG,yBAAyB,CAQ5B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQlE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAA0C,GAAG,MAAM,CAWhJ;AASD,wBAAgB,wBAAwB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAYtE;AAED,uHAAuH;AACvH,wBAAgB,2BAA2B,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAYzE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAa9D;AAED,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,kBAAkB,GAAG,SAAS,CAYzF;AAED,wBAAgB,eAAe,CAC3B,KAAK,EAAE,kBAAkB,GAAG,SAAS,EACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,iBAAiB,GAAE,MAA0C,EAC7D,SAAS,CAAC,EAAE,SAAS,GACtB,cAAc,GAAG,SAAS,CA2C5B"}
@@ -21,6 +21,8 @@ exports.decideTokenUsageWarning = decideTokenUsageWarning;
21
21
  exports.formatTokenCount = formatTokenCount;
22
22
  exports.getUsageColorClass = getUsageColorClass;
23
23
  exports.computeSessionTokenUsage = computeSessionTokenUsage;
24
+ exports.computeCumulativeTokenUsage = computeCumulativeTokenUsage;
25
+ exports.countCompactions = countCompactions;
24
26
  exports.getLatestTokenUsage = getLatestTokenUsage;
25
27
  exports.buildBarTooltip = buildBarTooltip;
26
28
  const nls_1 = require("@theia/core/lib/common/nls");
@@ -73,6 +75,12 @@ function getUsageColorClass(totalTokens, threshold, contextWindowSize = exports.
73
75
  }
74
76
  return 'token-usage-red';
75
77
  }
78
+ function sumUsageTokens(usage) {
79
+ return usage.inputTokens
80
+ + usage.outputTokens
81
+ + (usage.cacheCreationInputTokens ?? 0)
82
+ + (usage.cacheReadInputTokens ?? 0);
83
+ }
76
84
  function computeSessionTokenUsage(chatModel) {
77
85
  if (!chatModel) {
78
86
  return 0;
@@ -81,14 +89,43 @@ function computeSessionTokenUsage(chatModel) {
81
89
  for (let i = requests.length - 1; i >= 0; i--) {
82
90
  const usage = requests[i].response.tokenUsage;
83
91
  if (usage) {
84
- return usage.inputTokens
85
- + usage.outputTokens
86
- + (usage.cacheCreationInputTokens ?? 0)
87
- + (usage.cacheReadInputTokens ?? 0);
92
+ return sumUsageTokens(usage);
88
93
  }
89
94
  }
90
95
  return 0;
91
96
  }
97
+ /** Sum of input + output (+ cache) tokens across every response in the session. Represents cumulative billed usage. */
98
+ function computeCumulativeTokenUsage(chatModel) {
99
+ if (!chatModel) {
100
+ return 0;
101
+ }
102
+ let total = 0;
103
+ for (const request of chatModel.getRequests()) {
104
+ const usage = request.response.tokenUsage;
105
+ if (usage) {
106
+ total += sumUsageTokens(usage);
107
+ }
108
+ }
109
+ return total;
110
+ }
111
+ /**
112
+ * Number of provider compaction events recorded across the session.
113
+ * Counts every `compaction` content part; a single response may contain more than one.
114
+ */
115
+ function countCompactions(chatModel) {
116
+ if (!chatModel) {
117
+ return 0;
118
+ }
119
+ let count = 0;
120
+ for (const request of chatModel.getRequests()) {
121
+ for (const content of request.response.response.content) {
122
+ if (content.kind === 'compaction') {
123
+ count++;
124
+ }
125
+ }
126
+ }
127
+ return count;
128
+ }
92
129
  function getLatestTokenUsage(chatModel) {
93
130
  if (!chatModel) {
94
131
  return undefined;
@@ -102,7 +139,7 @@ function getLatestTokenUsage(chatModel) {
102
139
  }
103
140
  return undefined;
104
141
  }
105
- function buildBarTooltip(usage, totalTokens, threshold, contextWindowSize = exports.CHAT_CONTEXT_WINDOW_SIZE_FALLBACK) {
142
+ function buildBarTooltip(usage, totalTokens, threshold, contextWindowSize = exports.CHAT_CONTEXT_WINDOW_SIZE_FALLBACK, chatModel) {
106
143
  if (!usage) {
107
144
  return undefined;
108
145
  }
@@ -129,6 +166,14 @@ function buildBarTooltip(usage, totalTokens, threshold, contextWindowSize = expo
129
166
  }
130
167
  const percentage = Math.round((totalTokens / contextWindowSize) * 100);
131
168
  lines.push(nls_1.nls.localize('theia/ai/chat-ui/tokenUsageTooltipTotal', 'Total: {0} / {1} ({2}%)', formatTokenCount(totalTokens), formatTokenCount(contextWindowSize), percentage));
169
+ const cumulative = computeCumulativeTokenUsage(chatModel);
170
+ if (cumulative > 0) {
171
+ lines.push(nls_1.nls.localize('theia/ai/chat-ui/tokenUsageTooltipCumulative', 'Cumulative: {0}', formatTokenCount(cumulative)));
172
+ }
173
+ const compactions = countCompactions(chatModel);
174
+ if (compactions > 0) {
175
+ lines.push(nls_1.nls.localize('theia/ai/chat-ui/tokenUsageTooltipCompactions', 'Compacted {0}x', compactions));
176
+ }
132
177
  return { value: lines.join(' \n') };
133
178
  }
134
179
  //# sourceMappingURL=chat-token-usage-indicator-util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-token-usage-indicator-util.js","sourceRoot":"","sources":["../../src/browser/chat-token-usage-indicator-util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-token-usage-indicator-util.js","sourceRoot":"","sources":["../../src/browser/chat-token-usage-indicator-util.ts"],"names":[],"mappings":"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"}
@@ -20,11 +20,16 @@ const core_1 = require("@theia/core");
20
20
  const chat_token_usage_indicator_util_1 = require("./chat-token-usage-indicator-util");
21
21
  const THRESHOLD = 100;
22
22
  const CONTEXT_WINDOW = 200;
23
- function createMockRequest(tokenUsage, isComplete = true) {
23
+ function createMockRequest(tokenUsage, isComplete = true, contentKinds) {
24
24
  return {
25
25
  response: {
26
26
  tokenUsage,
27
- isComplete
27
+ isComplete,
28
+ response: {
29
+ content: (contentKinds ?? []).map(kind => ({ kind })),
30
+ asString: () => '',
31
+ asDisplayString: () => ''
32
+ }
28
33
  }
29
34
  };
30
35
  }
@@ -204,6 +209,85 @@ describe('ChatTokenUsageIndicator', () => {
204
209
  // The fallback (200k) should appear in the total line.
205
210
  (0, chai_1.expect)(tooltip.value).to.contain('200.0k');
206
211
  });
212
+ it('includes cumulative usage line when model has token usage', () => {
213
+ const model = createMockChatModel([
214
+ createMockRequest({ inputTokens: 50, outputTokens: 50 }),
215
+ createMockRequest({ inputTokens: 30, outputTokens: 20 })
216
+ ]);
217
+ const usage = { inputTokens: 30, outputTokens: 20 };
218
+ const tooltip = (0, chat_token_usage_indicator_util_1.buildBarTooltip)(usage, 50, THRESHOLD, CONTEXT_WINDOW, model);
219
+ (0, chai_1.expect)(tooltip).to.not.equal(undefined);
220
+ (0, chai_1.expect)(tooltip.value).to.contain('Cumulative:');
221
+ });
222
+ it('includes compaction line when model has a compaction content part', () => {
223
+ const model = createMockChatModel([
224
+ createMockRequest({ inputTokens: 50, outputTokens: 50 }, true, ['compaction'])
225
+ ]);
226
+ const usage = { inputTokens: 50, outputTokens: 50 };
227
+ const tooltip = (0, chat_token_usage_indicator_util_1.buildBarTooltip)(usage, 100, THRESHOLD, CONTEXT_WINDOW, model);
228
+ (0, chai_1.expect)(tooltip).to.not.equal(undefined);
229
+ (0, chai_1.expect)(tooltip.value).to.contain('Compacted');
230
+ });
231
+ });
232
+ describe('computeCumulativeTokenUsage', () => {
233
+ it('returns 0 for an undefined model', () => {
234
+ (0, chai_1.expect)((0, chat_token_usage_indicator_util_1.computeCumulativeTokenUsage)(undefined)).to.equal(0);
235
+ });
236
+ it('returns 0 for a model with no requests', () => {
237
+ const model = createMockChatModel([]);
238
+ (0, chai_1.expect)((0, chat_token_usage_indicator_util_1.computeCumulativeTokenUsage)(model)).to.equal(0);
239
+ });
240
+ it('sums cumulative usage across all responses', () => {
241
+ const model = createMockChatModel([
242
+ createMockRequest({ inputTokens: 100, outputTokens: 50 }),
243
+ createMockRequest({ inputTokens: 200, outputTokens: 60, cacheReadInputTokens: 10 })
244
+ ]);
245
+ (0, chai_1.expect)((0, chat_token_usage_indicator_util_1.computeCumulativeTokenUsage)(model)).to.equal(420);
246
+ });
247
+ it('includes cache creation and read tokens in the cumulative total', () => {
248
+ const model = createMockChatModel([
249
+ createMockRequest({ inputTokens: 100, outputTokens: 50, cacheCreationInputTokens: 20, cacheReadInputTokens: 30 }),
250
+ createMockRequest({ inputTokens: 200, outputTokens: 60 })
251
+ ]);
252
+ (0, chai_1.expect)((0, chat_token_usage_indicator_util_1.computeCumulativeTokenUsage)(model)).to.equal(460);
253
+ });
254
+ it('skips requests with no token usage', () => {
255
+ const model = createMockChatModel([
256
+ createMockRequest(undefined),
257
+ createMockRequest({ inputTokens: 100, outputTokens: 50 })
258
+ ]);
259
+ (0, chai_1.expect)((0, chat_token_usage_indicator_util_1.computeCumulativeTokenUsage)(model)).to.equal(150);
260
+ });
261
+ });
262
+ describe('countCompactions', () => {
263
+ it('returns 0 for an undefined model', () => {
264
+ (0, chai_1.expect)((0, chat_token_usage_indicator_util_1.countCompactions)(undefined)).to.equal(0);
265
+ });
266
+ it('returns 0 for a model with no requests', () => {
267
+ const model = createMockChatModel([]);
268
+ (0, chai_1.expect)((0, chat_token_usage_indicator_util_1.countCompactions)(model)).to.equal(0);
269
+ });
270
+ it('counts compaction markers across the session', () => {
271
+ const model = createMockChatModel([
272
+ createMockRequest(undefined, true, ['text', 'compaction']),
273
+ createMockRequest(undefined, true, ['text']),
274
+ createMockRequest(undefined, true, ['compaction', 'text'])
275
+ ]);
276
+ (0, chai_1.expect)((0, chat_token_usage_indicator_util_1.countCompactions)(model)).to.equal(2);
277
+ });
278
+ it('returns 0 when no compaction markers are present', () => {
279
+ const model = createMockChatModel([
280
+ createMockRequest(undefined, true, ['text']),
281
+ createMockRequest(undefined, true, ['toolCall'])
282
+ ]);
283
+ (0, chai_1.expect)((0, chat_token_usage_indicator_util_1.countCompactions)(model)).to.equal(0);
284
+ });
285
+ it('counts multiple compaction markers within a single response', () => {
286
+ const model = createMockChatModel([
287
+ createMockRequest(undefined, true, ['compaction', 'compaction', 'text'])
288
+ ]);
289
+ (0, chai_1.expect)((0, chat_token_usage_indicator_util_1.countCompactions)(model)).to.equal(2);
290
+ });
207
291
  });
208
292
  describe('decideTokenUsageWarning', () => {
209
293
  it('resets when usage is below the threshold', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"chat-token-usage-indicator-util.spec.js","sourceRoot":"","sources":["../../src/browser/chat-token-usage-indicator-util.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-token-usage-indicator-util.spec.js","sourceRoot":"","sources":["../../src/browser/chat-token-usage-indicator-util.spec.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { ChatAgent, ChatAgentService, ChatModel, ChatRequestModel, ChatResponseC
2
2
  import { AIVariableService } from '@theia/ai-core';
3
3
  import { AIActivationService } from '@theia/ai-core/lib/browser';
4
4
  import { CommandRegistry, ContributionProvider, DisposableCollection, Emitter, Event, ILogger } from '@theia/core';
5
- import { ContextMenuRenderer, HoverService, NodeProps, OpenerService, TreeModel, TreeNode, TreeProps, TreeWidget } from '@theia/core/lib/browser';
5
+ import { ContextMenuRenderer, HoverService, NodeProps, OpenerService, TreeModel, TreeNode, TreeProps, TreeWidget, type ReactWidget } from '@theia/core/lib/browser';
6
6
  import { ContextKey, ContextKeyService } from '@theia/core/lib/browser/context-key-service';
7
7
  import * as React from '@theia/core/shared/react';
8
8
  import { ChatNodeToolbarActionContribution } from '../chat-node-toolbar-action-contribution';
@@ -61,37 +61,18 @@ export declare class ChatViewTreeWidget extends TreeWidget {
61
61
  /** Tracks if we are at the bottom for showing the scroll-to-bottom button. */
62
62
  protected atBottom: boolean;
63
63
  /**
64
- * Track the visibility of the scroll button with debounce logic. Used to prevent flickering when streaming tokens.
64
+ * Track the visibility of the scroll button.
65
65
  */
66
66
  protected _showScrollButton: boolean;
67
- /**
68
- * Timer for debouncing the scroll button activation (prevents flicker on auto-scroll).
69
- * If user scrolls up, this delays showing the button in case auto-scroll-to-bottom kicks in.
70
- */
71
- protected _scrollButtonDebounceTimer?: number;
72
- /**
73
- * Debounce period in ms before showing scroll-to-bottom button after scrolling up.
74
- * Avoids flickering of the button during LLM token streaming.
75
- */
76
- protected static readonly SCROLL_BUTTON_GRACE_PERIOD = 100;
77
67
  onScrollLockChange?: (temporaryLocked: boolean) => void;
78
- protected lastScrollTop: number;
79
68
  set shouldScrollToEnd(shouldScrollToEnd: boolean);
80
69
  get shouldScrollToEnd(): boolean;
81
70
  constructor(props: TreeProps, model: TreeModel, contextMenuRenderer: ContextMenuRenderer);
82
71
  protected init(): void;
83
72
  setEnabled(enabled: boolean): void;
84
- protected handleScrollEvent(scrollEvent: unknown): void;
85
- /** Updates the scroll-to-bottom button state and handles debounce. */
86
- protected updateScrollToBottomButtonState(isAtBottom: boolean): void;
73
+ /** Toggles auto-scroll and the scroll-to-bottom button based on whether the viewport includes the bottom of the list. */
74
+ protected handleAtBottomStateChange(isAtBottom: boolean): void;
87
75
  protected setTemporaryScrollLock(enabled: boolean): void;
88
- protected getCurrentScrollTop(scrollEvent: unknown): number;
89
- /**
90
- * Returns true if the scroll position is at the absolute (1px tolerance) bottom of the scroll container.
91
- * Handles both virtualized and non-virtualized scroll containers.
92
- * Allows for a tiny floating point epsilon (1px).
93
- */
94
- protected isAtAbsoluteBottom(): boolean;
95
76
  protected renderTree(model: TreeModel): React.ReactNode;
96
77
  /** Shows the scroll to bottom button if not at the bottom (debounced). */
97
78
  protected renderScrollToBottomButton(): React.ReactNode;
@@ -130,9 +111,13 @@ export declare class ChatViewTreeWidget extends TreeWidget {
130
111
  protected getChatResponsePartRenderer(content: ChatResponseContent, node: ResponseNode): React.ReactNode;
131
112
  protected handleContextMenu(node: TreeNode | undefined, event: React.MouseEvent<HTMLElement>): void;
132
113
  protected handleSpace(event: KeyboardEvent): boolean;
133
- /**
134
- * Ensure atBottom state is correct when content grows (e.g., LLM streaming while scroll lock is enabled).
135
- */
136
- protected updateScrollToRow(): void;
137
114
  }
115
+ export declare const ChatRequestRender: ({ node, hoverService, chatAgentService, variableService, openerService, provideChatInputWidget }: {
116
+ node: RequestNode;
117
+ hoverService: HoverService;
118
+ chatAgentService: ChatAgentService;
119
+ variableService: AIVariableService;
120
+ openerService: OpenerService;
121
+ provideChatInputWidget: () => ReactWidget | undefined;
122
+ }) => React.JSX.Element;
138
123
  //# sourceMappingURL=chat-view-tree-widget.d.ts.map