@theia/ai-chat-ui 1.76.0-next.23 → 1.76.0-next.28
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.
|
@@ -149,15 +149,29 @@ class DelegatedChat extends React.Component {
|
|
|
149
149
|
constructor(props) {
|
|
150
150
|
super(props);
|
|
151
151
|
this.toDispose = new core_1.DisposableCollection();
|
|
152
|
-
this.
|
|
152
|
+
this.unmounted = false;
|
|
153
153
|
this.handleToggle = (event) => {
|
|
154
154
|
const details = event.currentTarget;
|
|
155
155
|
this.setState({ isOpen: details.open });
|
|
156
156
|
};
|
|
157
|
+
/**
|
|
158
|
+
* Clicking anywhere inside a <summary> toggles the <details> element by default,
|
|
159
|
+
* which would collapse/expand the block while the user operates the inline
|
|
160
|
+
* interaction UI. Suppress the toggle for such clicks — but keep nested
|
|
161
|
+
* <summary> elements working (e.g. the argument expanders of a confirmation
|
|
162
|
+
* card), whose own toggle is also the click's default action.
|
|
163
|
+
*/
|
|
164
|
+
this.preventSummaryToggle = (event) => {
|
|
165
|
+
const target = event.target instanceof HTMLElement ? event.target : undefined;
|
|
166
|
+
const closestSummary = target?.closest('summary');
|
|
167
|
+
if (closestSummary && event.currentTarget.contains(closestSummary)) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
event.preventDefault();
|
|
171
|
+
};
|
|
157
172
|
this.state = {
|
|
158
173
|
node: undefined,
|
|
159
|
-
isOpen: false
|
|
160
|
-
pendingInteractions: []
|
|
174
|
+
isOpen: false
|
|
161
175
|
};
|
|
162
176
|
this.widget = props.subChatWidgetFactory();
|
|
163
177
|
}
|
|
@@ -172,68 +186,74 @@ class DelegatedChat extends React.Component {
|
|
|
172
186
|
subscribeToInvocation(invocation) {
|
|
173
187
|
this.toDispose.dispose();
|
|
174
188
|
this.toDispose = new core_1.DisposableCollection();
|
|
175
|
-
this.trackedInteractionIds.clear();
|
|
176
189
|
if (!invocation) {
|
|
177
190
|
return;
|
|
178
191
|
}
|
|
179
192
|
invocation.responseCreated.then(chatModel => {
|
|
193
|
+
// Guard against continuations of a superseded invocation or an unmounted
|
|
194
|
+
// component: they would show the old model's node and register listeners
|
|
195
|
+
// into an already-disposed collection (which silently keeps them alive).
|
|
196
|
+
if (this.unmounted || invocation !== this.props.invocation) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
180
199
|
const node = mapResponseToNode(chatModel, this.props.parentNode);
|
|
181
200
|
this.setState({ node });
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
this.toDispose.push(chatModel.
|
|
187
|
-
// Subscribe to interactionNeeded for push-based interaction tracking
|
|
188
|
-
this.toDispose.push(chatModel.onInteractionNeeded(contentPart => {
|
|
189
|
-
const id = contentPart.interactionId;
|
|
190
|
-
if (id && !this.trackedInteractionIds.has(id)
|
|
191
|
-
&& this.findConfirmationRenderer(contentPart)) {
|
|
192
|
-
this.trackedInteractionIds.add(id);
|
|
193
|
-
this.setState(prevState => ({
|
|
194
|
-
pendingInteractions: [
|
|
195
|
-
...prevState.pendingInteractions,
|
|
196
|
-
{ contentPart, id }
|
|
197
|
-
]
|
|
198
|
-
}));
|
|
199
|
-
}
|
|
200
|
-
}));
|
|
201
|
+
this.toDispose.push(chatModel.onDidChange(() => this.forceUpdate()));
|
|
202
|
+
// Pending interactions are derived from chatModel.pendingInteractions in
|
|
203
|
+
// render(); interactionNeeded does not imply onDidChange, so re-render
|
|
204
|
+
// explicitly when a new interaction is announced (#17952).
|
|
205
|
+
this.toDispose.push(chatModel.onInteractionNeeded(() => this.forceUpdate()));
|
|
201
206
|
}).catch(error => {
|
|
202
207
|
console.error('Failed to create delegated chat response:', error);
|
|
203
208
|
});
|
|
204
209
|
invocation.responseCompleted.then(() => {
|
|
205
|
-
this.
|
|
210
|
+
if (!this.unmounted) {
|
|
211
|
+
this.forceUpdate();
|
|
212
|
+
}
|
|
206
213
|
}).catch(error => {
|
|
207
214
|
console.error('Error in delegated chat response completion:', error);
|
|
208
|
-
this.
|
|
215
|
+
if (!this.unmounted) {
|
|
216
|
+
this.forceUpdate();
|
|
217
|
+
}
|
|
209
218
|
});
|
|
210
219
|
}
|
|
211
220
|
componentWillUnmount() {
|
|
221
|
+
this.unmounted = true;
|
|
212
222
|
this.toDispose.dispose();
|
|
213
|
-
this.trackedInteractionIds.clear();
|
|
214
|
-
}
|
|
215
|
-
removeResolvedInteractions() {
|
|
216
|
-
this.setState(prevState => ({
|
|
217
|
-
pendingInteractions: prevState.pendingInteractions.filter(p => !p.contentPart.isResolved)
|
|
218
|
-
}));
|
|
219
223
|
}
|
|
224
|
+
/**
|
|
225
|
+
* The highest-priority renderer that implements renderConfirmation. Unlike plain
|
|
226
|
+
* rendering, this must not stop at the overall highest-priority renderer: a
|
|
227
|
+
* specialized renderer without renderConfirmation (e.g. the delegation renderer
|
|
228
|
+
* itself for nested delegations) would otherwise silently drop the interaction.
|
|
229
|
+
*/
|
|
220
230
|
findConfirmationRenderer(contentPart) {
|
|
221
|
-
|
|
231
|
+
return this.props.chatResponsePartRenderers.getContributions()
|
|
232
|
+
.filter(renderer => renderer.renderConfirmation)
|
|
233
|
+
.reduce((prev, current) => {
|
|
222
234
|
const prio = current.canHandle(contentPart);
|
|
223
235
|
if (prio > prev[0]) {
|
|
224
236
|
return [prio, current];
|
|
225
237
|
}
|
|
226
238
|
return prev;
|
|
227
239
|
}, [-1, undefined])[1];
|
|
228
|
-
if (renderer && renderer.renderConfirmation) {
|
|
229
|
-
return renderer;
|
|
230
|
-
}
|
|
231
|
-
return undefined;
|
|
232
240
|
}
|
|
233
|
-
|
|
241
|
+
renderPendingInteractions(pendingInteractions) {
|
|
242
|
+
// Key by interactionId so a sibling interaction resolving does not remount the
|
|
243
|
+
// remaining ones (losing in-progress wizard state); disambiguate the rare
|
|
244
|
+
// duplicate ids (e.g. two pending questions with identical text) by occurrence.
|
|
245
|
+
const seenIds = new Map();
|
|
246
|
+
return pendingInteractions.map(contentPart => {
|
|
247
|
+
const baseKey = contentPart.interactionId ?? 'interaction';
|
|
248
|
+
const occurrence = seenIds.get(baseKey) ?? 0;
|
|
249
|
+
seenIds.set(baseKey, occurrence + 1);
|
|
250
|
+
return this.renderInteractionConfirmation(contentPart, occurrence === 0 ? baseKey : `${baseKey}-${occurrence}`);
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
renderInteractionConfirmation(contentPart, key) {
|
|
234
254
|
const renderer = this.findConfirmationRenderer(contentPart);
|
|
235
255
|
if (renderer && this.state.node) {
|
|
236
|
-
return (0, jsx_runtime_1.jsx)(React.Fragment, { children: renderer.renderConfirmation(contentPart, this.state.node) },
|
|
256
|
+
return ((0, jsx_runtime_1.jsx)(React.Fragment, { children: renderer.renderConfirmation(contentPart, this.state.node) }, key));
|
|
237
257
|
}
|
|
238
258
|
return undefined;
|
|
239
259
|
}
|
|
@@ -243,6 +263,12 @@ class DelegatedChat extends React.Component {
|
|
|
243
263
|
const isComplete = this.state.node?.response.isComplete ?? false;
|
|
244
264
|
const isCanceled = this.state.node?.response.isCanceled ?? false;
|
|
245
265
|
const isError = this.state.node?.response.isError ?? false;
|
|
266
|
+
// Derived from the model on every render so pending interactions survive
|
|
267
|
+
// remounts and never outlive their resolution or the response (#17952). The
|
|
268
|
+
// list also covers interactions bubbled up from nested delegations, whose
|
|
269
|
+
// waiting state is not reflected in this response's isWaitingForInput.
|
|
270
|
+
const pendingInteractions = this.state.node?.response.pendingInteractions ?? [];
|
|
271
|
+
const isWaitingForInput = (this.state.node?.response.isWaitingForInput ?? false) || pendingInteractions.length > 0;
|
|
246
272
|
let statusIcon = '';
|
|
247
273
|
let statusText = '';
|
|
248
274
|
if (hasNode) {
|
|
@@ -250,13 +276,18 @@ class DelegatedChat extends React.Component {
|
|
|
250
276
|
statusIcon = 'codicon-close';
|
|
251
277
|
statusText = core_1.nls.localize('theia/ai/chat-ui/delegation-response-renderer/status/canceled', 'canceled');
|
|
252
278
|
}
|
|
279
|
+
else if (isError) {
|
|
280
|
+
// error() also marks the response complete, so check isError first
|
|
281
|
+
statusIcon = 'codicon-error';
|
|
282
|
+
statusText = core_1.nls.localizeByDefault('error');
|
|
283
|
+
}
|
|
253
284
|
else if (isComplete) {
|
|
254
285
|
statusIcon = 'codicon-check';
|
|
255
286
|
statusText = core_1.nls.localizeByDefault('completed');
|
|
256
287
|
}
|
|
257
|
-
else if (
|
|
258
|
-
statusIcon = 'codicon-
|
|
259
|
-
statusText = core_1.nls.
|
|
288
|
+
else if (isWaitingForInput) {
|
|
289
|
+
statusIcon = 'codicon-loading';
|
|
290
|
+
statusText = core_1.nls.localize('theia/ai/chat-ui/delegation-response-renderer/status/waitingForInput', 'waiting for input');
|
|
260
291
|
}
|
|
261
292
|
else {
|
|
262
293
|
statusIcon = 'codicon-loading';
|
|
@@ -271,9 +302,9 @@ class DelegatedChat extends React.Component {
|
|
|
271
302
|
statusIcon = 'codicon-loading';
|
|
272
303
|
statusText = core_1.nls.localize('theia/ai/chat-ui/delegation-response-renderer/status/starting', 'starting...');
|
|
273
304
|
}
|
|
274
|
-
const { isOpen
|
|
305
|
+
const { isOpen } = this.state;
|
|
275
306
|
const showInteractionsInSummary = !isOpen && pendingInteractions.length > 0;
|
|
276
|
-
return ((0, jsx_runtime_1.jsx)("div", { className: 'theia-delegation-container', children: (0, jsx_runtime_1.jsxs)("details", { className: 'delegation-response-details', onToggle: this.handleToggle, children: [(0, jsx_runtime_1.jsxs)("summary", { className: 'delegation-summary', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'delegation-header', children: [(0, jsx_runtime_1.jsxs)("span", { className: 'delegation-agent', children: [(0, jsx_runtime_1.jsx)("span", { className: 'codicon codicon-copilot-large' }), " ", agentName] }), (0, jsx_runtime_1.jsxs)("span", { className: 'delegation-status', children: [showInteractionsInSummary && ((0, jsx_runtime_1.jsx)("span", { className: 'delegation-interaction-badge', title: core_1.nls.localize('theia/ai/chat-ui/delegation-response-renderer/interactionNeeded', 'User interaction needed'), children: (0, jsx_runtime_1.jsx)("span", { className: 'codicon codicon-warning' }) })), (0, jsx_runtime_1.jsx)("span", { className: `codicon ${statusIcon} delegation-status-icon` }), (0, jsx_runtime_1.jsx)("span", { className: 'delegation-status-text', children: statusText })] }), (0, jsx_runtime_1.jsx)("span", { className: `delegation-toggle-arrow${isOpen ? ' open' : ''}` })] }), showInteractionsInSummary && ((0, jsx_runtime_1.jsx)("div", { className: 'delegation-pending-confirmations',
|
|
307
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: 'theia-delegation-container', children: (0, jsx_runtime_1.jsxs)("details", { className: 'delegation-response-details', onToggle: this.handleToggle, children: [(0, jsx_runtime_1.jsxs)("summary", { className: 'delegation-summary', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'delegation-header', children: [(0, jsx_runtime_1.jsxs)("span", { className: 'delegation-agent', children: [(0, jsx_runtime_1.jsx)("span", { className: 'codicon codicon-copilot-large' }), " ", agentName] }), (0, jsx_runtime_1.jsxs)("span", { className: 'delegation-status', children: [showInteractionsInSummary && ((0, jsx_runtime_1.jsx)("span", { className: 'delegation-interaction-badge', title: core_1.nls.localize('theia/ai/chat-ui/delegation-response-renderer/interactionNeeded', 'User interaction needed'), children: (0, jsx_runtime_1.jsx)("span", { className: 'codicon codicon-warning' }) })), (0, jsx_runtime_1.jsx)("span", { className: `codicon ${statusIcon} delegation-status-icon` }), (0, jsx_runtime_1.jsx)("span", { className: 'delegation-status-text', children: statusText })] }), (0, jsx_runtime_1.jsx)("span", { className: `delegation-toggle-arrow${isOpen ? ' open' : ''}` })] }), showInteractionsInSummary && ((0, jsx_runtime_1.jsx)("div", { className: 'delegation-pending-confirmations', onClick: this.preventSummaryToggle, children: this.renderPendingInteractions(pendingInteractions) }))] }), (0, jsx_runtime_1.jsxs)("div", { className: 'delegation-content', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'delegation-prompt-section', children: [(0, jsx_runtime_1.jsx)("strong", { children: core_1.nls.localize('theia/ai/chat-ui/delegation-response-renderer/prompt/label', 'Delegated prompt:') }), (0, jsx_runtime_1.jsx)("div", { className: 'delegation-prompt', children: prompt })] }), (0, jsx_runtime_1.jsxs)("div", { className: 'delegation-response-section', children: [(0, jsx_runtime_1.jsx)("strong", { children: core_1.nls.localize('theia/ai/chat-ui/delegation-response-renderer/response/label', 'Response:') }), (0, jsx_runtime_1.jsx)("div", { className: 'delegation-response-placeholder', children: hasNode && this.state.node ? this.widget.renderChatResponse(this.state.node) :
|
|
277
308
|
this.props.finished ?
|
|
278
309
|
(0, jsx_runtime_1.jsx)("span", { className: 'delegation-status-text', children: core_1.nls.localize('theia/ai/chat-ui/delegation-response-renderer/restoredNotAvailable', 'Response not available for restored sessions.') }) :
|
|
279
310
|
(0, jsx_runtime_1.jsx)("div", { className: 'theia-ChatContentInProgress', children: core_1.nls.localize('theia/ai/chat-ui/delegation-response-renderer/starting', 'Starting delegation...') }) })] })] })] }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegation-tool-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/delegation-tool-renderer.tsx"],"names":[],"mappings":";;;;;AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAEhF,4DAAyE;AACzE,4CAAgJ;AAChJ,qFAAgF;AAChF,4GAAmG;AACnG,oHAA8G;AAC9G,6EAAwF;AACxF,4CAAwD;AACxD,4FAAuF;AACvF,gFAA0E;AAE1E,uEAAyE;AACzE,2DAAgG;AAChG,4GAGsD;AACtD,qDAA0D;AAC1D,qDAAsI;AACtI,sCAA8E;AAC9E,kDAAkD;AAG3C,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAmC/B,SAAS,CAAC,QAA6B;QACnC,IAAI,qCAA2B,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,6CAA4B,EAAE,CAAC;YAC7F,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IAED,MAAM,CAAC,QAAqC,EAAE,UAAwB;QAClE,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEjG,IAAI,SAAS,GAAG,QAAQ,CAAC,IAAI,IAAI,6CAA4B,CAAC;QAC9D,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC5C,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACnC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC;gBACnF,CAAC;gBACD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAClC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBACzB,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,MAAM,cAAc,GAAG,IAAA,uCAAsB,EAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBAC7E,IAAI,cAAc,EAAE,CAAC;oBACjB,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,IAAI,IAAI,cAAc,CAAC;gBACvF,CAAC;gBACD,MAAM,aAAa,GAAG,IAAA,uCAAsB,EAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBAC3E,IAAI,aAAa,EAAE,CAAC;oBAChB,MAAM,GAAG,aAAa,CAAC;gBAC3B,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,6CAA4B,CAAC,CAAC;QAC1F,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,6CAA4B,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAE7H,OAAO,uBAAC,6BAA6B,IACjC,UAAU,EAAE,UAAU,EAAE,UAAU,EAClC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,MAAM,EACpC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,UAAU,EAAE,UAAU,EACtB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAC/C,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAC7C,yBAAyB,EAAE,IAAI,CAAC,yBAAyB,EACzD,gBAAgB,EAAE;gBACd,QAAQ;gBACR,gBAAgB;gBAChB,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;gBACrD,WAAW;gBACX,MAAM;gBACN,eAAe,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU;gBAC/C,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;gBAC7C,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,cAAc,EAAE,IAAI,CAAC,8BAA8B;gBACnD,eAAe,EAAE,IAAI,CAAC,kBAAkB,EAAE;gBAC1C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;aAC1C,GACH,CAAC;IACP,CAAC;IAES,kBAAkB;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,oFAAwC,CAAC,EAAE,CAAC,CAAC;QACjF,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,iFAAqC,CAAC,EAAE,CAAC,CAAC;QAC7E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAES,gBAAgB,CAAC,SAAiB;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAC7E,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9E,CAAC;CACJ,CAAA;AA9GY,wDAAsB;AAGrB;IADT,IAAA,kBAAM,EAAC,2CAAmB,CAAC;sCACG,2CAAmB;mEAAC;AAGhC;IADlB,IAAA,kBAAM,EAAC,qCAAgB,CAAC;;gEAC6B;AAG5C;IADT,IAAA,kBAAM,EAAC,sCAAoB,CAAC;;oEACwB;AAG3C;IADT,IAAA,kBAAM,EAAC,uDAAuB,CAAC;sCACG,uDAAuB;uEAAC;AAGjD;IADT,IAAA,kBAAM,EAAC,gCAAsB,CAAC;;sEAC0B;AAG/C;IADT,IAAA,kBAAM,EAAC,6BAAmB,CAAC;sCACG,6BAAmB;mEAAC;AAGzC;IADT,IAAA,kBAAM,EAAC,uBAAa,CAAC;;6DACiB;AAG7B;IADT,IAAA,kBAAM,EAAC,kEAA8B,CAAC;sCACG,kEAA8B;8EAAC;AAG/D;IADT,IAAA,kBAAM,EAAC,4BAAkB,CAAC;sCACG,4BAAkB;kEAAC;AAGvC;IADT,IAAA,kBAAM,EAAC,0BAAgB,CAAC;;gEACoB;AAGnC;IADT,IAAA,kBAAM,EAAC,2BAAoB,CAAC;IAAE,IAAA,iBAAK,EAAC,sDAAwB,CAAC;;yEAC2C;iCAjChG,sBAAsB;IADlC,IAAA,sBAAU,GAAE;GACA,sBAAsB,CA8GlC;AAwBD,MAAM,aAAc,SAAQ,KAAK,CAAC,SAAiD;IAK/E,YAAY,KAAyB;QACjC,KAAK,CAAC,KAAK,CAAC,CAAC;QAJT,cAAS,GAAG,IAAI,2BAAoB,EAAE,CAAC;QACvC,0BAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;QA6F1C,iBAAY,GAAG,CAAC,KAA+C,EAAQ,EAAE;YAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC;QA5FE,IAAI,CAAC,KAAK,GAAG;YACT,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,KAAK;YACb,mBAAmB,EAAE,EAAE;SAC1B,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC;IAC/C,CAAC;IAEQ,iBAAiB;QACtB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IAEQ,kBAAkB,CAAC,SAA6B;QACrD,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;YAC1E,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IAEO,qBAAqB,CAAC,UAAkC;QAC5D,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,2BAAoB,EAAE,CAAC;QAC5C,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO;QACX,CAAC;QAED,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACxC,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACjE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YAExB,MAAM,cAAc,GAAG,GAAG,EAAE;gBACxB,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBAClC,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;YAE3D,qEAAqE;YACrE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;gBAC5D,MAAM,EAAE,GAAG,WAAW,CAAC,aAAa,CAAC;gBACrC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;uBACtC,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,CAAC;oBAChD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACnC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;wBACxB,mBAAmB,EAAE;4BACjB,GAAG,SAAS,CAAC,mBAAmB;4BAChC,EAAE,WAAW,EAAE,EAAE,EAAE;yBACtB;qBACJ,CAAC,CAAC,CAAC;gBACR,CAAC;YACL,CAAC,CAAC,CAAC,CAAC;QACR,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC;YACrE,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;IAEQ,oBAAoB;QACzB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;IAEO,0BAA0B;QAC9B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACxB,mBAAmB,EAAE,SAAS,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC;SAC5F,CAAC,CAAC,CAAC;IACR,CAAC;IAEO,wBAAwB,CAAC,WAAgC;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAC3E,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;YACd,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC5C,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3B,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,EACD,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,QAAQ,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YAC1C,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAOO,6BAA6B,CAAC,WAAgC,EAAE,EAAU;QAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,uBAAC,KAAK,CAAC,QAAQ,cAAW,QAAQ,CAAC,kBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAA/D,EAAE,CAA+E,CAAC;QAClH,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAEQ,MAAM;QACX,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACzC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,IAAI,KAAK,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,IAAI,KAAK,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC;QAE3D,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,UAAU,EAAE,CAAC;gBACb,UAAU,GAAG,eAAe,CAAC;gBAC7B,UAAU,GAAG,UAAG,CAAC,QAAQ,CAAC,+DAA+D,EAAE,UAAU,CAAC,CAAC;YAC3G,CAAC;iBAAM,IAAI,UAAU,EAAE,CAAC;gBACpB,UAAU,GAAG,eAAe,CAAC;gBAC7B,UAAU,GAAG,UAAG,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC;iBAAM,IAAI,OAAO,EAAE,CAAC;gBACjB,UAAU,GAAG,eAAe,CAAC;gBAC7B,UAAU,GAAG,UAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACJ,UAAU,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,GAAG,UAAG,CAAC,QAAQ,CAAC,iEAAiE,EAAE,eAAe,CAAC,CAAC;YAClH,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC7B,UAAU,GAAG,eAAe,CAAC;YAC7B,UAAU,GAAG,UAAG,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACJ,UAAU,GAAG,iBAAiB,CAAC;YAC/B,UAAU,GAAG,UAAG,CAAC,QAAQ,CAAC,+DAA+D,EAAE,aAAa,CAAC,CAAC;QAC9G,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACnD,MAAM,yBAAyB,GAAG,CAAC,MAAM,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC;QAE5E,OAAO,CACH,gCAAK,SAAS,EAAC,4BAA4B,YACvC,qCAAS,SAAS,EAAC,6BAA6B,EAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,aACxE,qCAAS,SAAS,EAAC,oBAAoB,aACnC,iCAAK,SAAS,EAAC,mBAAmB,aAC9B,kCAAM,SAAS,EAAC,kBAAkB,aAC9B,iCAAM,SAAS,EAAC,+BAA+B,GAAG,OAAE,SAAS,IAC1D,EACP,kCAAM,SAAS,EAAC,mBAAmB,aAC9B,yBAAyB,IAAI,CAC1B,iCAAM,SAAS,EAAC,8BAA8B,EAAC,KAAK,EAAE,UAAG,CAAC,QAAQ,CAC9D,iEAAiE,EACjE,yBAAyB,CAC5B,YACG,iCAAM,SAAS,EAAC,yBAAyB,GAAQ,GAC9C,CACV,EACD,iCAAM,SAAS,EAAE,WAAW,UAAU,yBAAyB,GAAS,EACxE,iCAAM,SAAS,EAAC,wBAAwB,YAAE,UAAU,GAAQ,IACzD,EACP,iCAAM,SAAS,EAAE,0BAA0B,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAI,IACpE,EACL,yBAAyB,IAAI,CAC1B,gCAAK,SAAS,EAAC,kCAAkC,YAC5C,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAC7C,IAAI,CAAC,6BAA6B,CAAC,WAAW,EAAE,EAAE,CAAC,CACtD,GACC,CACT,IACK,EACV,iCAAK,SAAS,EAAC,oBAAoB,aAC/B,iCAAK,SAAS,EAAC,2BAA2B,aACtC,6CAAS,UAAG,CAAC,QAAQ,CAAC,4DAA4D,EAAE,mBAAmB,CAAC,GAAU,EAClH,gCAAK,SAAS,EAAC,mBAAmB,YAAE,MAAM,GAAO,IAC/C,EACN,iCAAK,SAAS,EAAC,6BAA6B,aACxC,6CAAS,UAAG,CAAC,QAAQ,CAAC,8DAA8D,EAAE,WAAW,CAAC,GAAU,EAC5G,gCAAK,SAAS,EAAC,iCAAiC,YAC3C,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;4CAC3E,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gDACjB,iCAAM,SAAS,EAAC,wBAAwB,YACnC,UAAG,CAAC,QAAQ,CAAC,oEAAoE,EAC9E,+CAA+C,CAAC,GACjD,CAAC,CAAC;gDACT,gCAAK,SAAS,EAAC,6BAA6B,YACvC,UAAG,CAAC,QAAQ,CAAC,wDAAwD,EAAE,wBAAwB,CAAC,GAC/F,GAEZ,IACJ,IACJ,IACA,GACR,CACT,CAAC;IACN,CAAC;CACJ;AAED,MAAM,6BAA6B,GAAG,IAAA,4CAAwB,EAAC,aAAa,CAAC,CAAC;AAE9E,SAAS,iBAAiB,CAAC,QAA2B,EAAE,UAAwB;IAC5E,OAAO;QACH,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,MAAM,EAAE,UAA0C;QAClD,QAAQ;QACR,SAAS,EAAE,UAAU,CAAC,SAAS;KAClC,CAAC;AACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"delegation-tool-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/delegation-tool-renderer.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/ai-chat-ui",
|
|
3
|
-
"version": "1.76.0-next.
|
|
3
|
+
"version": "1.76.0-next.28+98d1a268f",
|
|
4
4
|
"description": "Theia - AI Chat UI Extension",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/ai-chat": "1.76.0-next.
|
|
7
|
-
"@theia/ai-core": "1.76.0-next.
|
|
8
|
-
"@theia/core": "1.76.0-next.
|
|
9
|
-
"@theia/editor": "1.76.0-next.
|
|
10
|
-
"@theia/editor-preview": "1.76.0-next.
|
|
11
|
-
"@theia/filesystem": "1.76.0-next.
|
|
12
|
-
"@theia/monaco": "1.76.0-next.
|
|
6
|
+
"@theia/ai-chat": "1.76.0-next.28+98d1a268f",
|
|
7
|
+
"@theia/ai-core": "1.76.0-next.28+98d1a268f",
|
|
8
|
+
"@theia/core": "1.76.0-next.28+98d1a268f",
|
|
9
|
+
"@theia/editor": "1.76.0-next.28+98d1a268f",
|
|
10
|
+
"@theia/editor-preview": "1.76.0-next.28+98d1a268f",
|
|
11
|
+
"@theia/filesystem": "1.76.0-next.28+98d1a268f",
|
|
12
|
+
"@theia/monaco": "1.76.0-next.28+98d1a268f",
|
|
13
13
|
"@theia/monaco-editor-core": "1.108.201",
|
|
14
|
-
"@theia/preferences": "1.76.0-next.
|
|
15
|
-
"@theia/workspace": "1.76.0-next.
|
|
14
|
+
"@theia/preferences": "1.76.0-next.28+98d1a268f",
|
|
15
|
+
"@theia/workspace": "1.76.0-next.28+98d1a268f",
|
|
16
16
|
"date-fns": "^4.4.0",
|
|
17
|
-
"mermaid": "^11.
|
|
17
|
+
"mermaid": "^11.17.2",
|
|
18
18
|
"tslib": "^2.8.1"
|
|
19
19
|
},
|
|
20
20
|
"publishConfig": {
|
|
@@ -56,5 +56,5 @@
|
|
|
56
56
|
"nyc": {
|
|
57
57
|
"extends": "../../configs/nyc.json"
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "98d1a268f03bc1a6709b0fbf6842c54c2ee13ccb"
|
|
60
60
|
}
|
|
@@ -148,11 +148,6 @@ export class DelegationToolRenderer implements ChatResponsePartRenderer<ToolCall
|
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
interface PendingInteraction {
|
|
152
|
-
contentPart: InteractiveContent & ChatResponseContent;
|
|
153
|
-
id: string;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
151
|
interface DelegatedChatProps {
|
|
157
152
|
invocation?: ChatRequestInvocation;
|
|
158
153
|
agentName: string;
|
|
@@ -167,20 +162,18 @@ interface DelegatedChatProps {
|
|
|
167
162
|
interface DelegatedChatState {
|
|
168
163
|
node?: ResponseNode;
|
|
169
164
|
isOpen: boolean;
|
|
170
|
-
pendingInteractions: PendingInteraction[];
|
|
171
165
|
}
|
|
172
166
|
|
|
173
167
|
class DelegatedChat extends React.Component<DelegatedChatProps, DelegatedChatState> {
|
|
174
168
|
private widget: ReturnType<SubChatWidgetFactory>;
|
|
175
169
|
private toDispose = new DisposableCollection();
|
|
176
|
-
private
|
|
170
|
+
private unmounted = false;
|
|
177
171
|
|
|
178
172
|
constructor(props: DelegatedChatProps) {
|
|
179
173
|
super(props);
|
|
180
174
|
this.state = {
|
|
181
175
|
node: undefined,
|
|
182
|
-
isOpen: false
|
|
183
|
-
pendingInteractions: []
|
|
176
|
+
isOpen: false
|
|
184
177
|
};
|
|
185
178
|
this.widget = props.subChatWidgetFactory();
|
|
186
179
|
}
|
|
@@ -198,72 +191,64 @@ class DelegatedChat extends React.Component<DelegatedChatProps, DelegatedChatSta
|
|
|
198
191
|
private subscribeToInvocation(invocation?: ChatRequestInvocation): void {
|
|
199
192
|
this.toDispose.dispose();
|
|
200
193
|
this.toDispose = new DisposableCollection();
|
|
201
|
-
this.trackedInteractionIds.clear();
|
|
202
194
|
if (!invocation) {
|
|
203
195
|
return;
|
|
204
196
|
}
|
|
205
197
|
|
|
206
198
|
invocation.responseCreated.then(chatModel => {
|
|
199
|
+
// Guard against continuations of a superseded invocation or an unmounted
|
|
200
|
+
// component: they would show the old model's node and register listeners
|
|
201
|
+
// into an already-disposed collection (which silently keeps them alive).
|
|
202
|
+
if (this.unmounted || invocation !== this.props.invocation) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
207
205
|
const node = mapResponseToNode(chatModel, this.props.parentNode);
|
|
208
206
|
this.setState({ node });
|
|
209
207
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
this.toDispose.push(chatModel.
|
|
215
|
-
|
|
216
|
-
// Subscribe to interactionNeeded for push-based interaction tracking
|
|
217
|
-
this.toDispose.push(chatModel.onInteractionNeeded(contentPart => {
|
|
218
|
-
const id = contentPart.interactionId;
|
|
219
|
-
if (id && !this.trackedInteractionIds.has(id)
|
|
220
|
-
&& this.findConfirmationRenderer(contentPart)) {
|
|
221
|
-
this.trackedInteractionIds.add(id);
|
|
222
|
-
this.setState(prevState => ({
|
|
223
|
-
pendingInteractions: [
|
|
224
|
-
...prevState.pendingInteractions,
|
|
225
|
-
{ contentPart, id }
|
|
226
|
-
]
|
|
227
|
-
}));
|
|
228
|
-
}
|
|
229
|
-
}));
|
|
208
|
+
this.toDispose.push(chatModel.onDidChange(() => this.forceUpdate()));
|
|
209
|
+
// Pending interactions are derived from chatModel.pendingInteractions in
|
|
210
|
+
// render(); interactionNeeded does not imply onDidChange, so re-render
|
|
211
|
+
// explicitly when a new interaction is announced (#17952).
|
|
212
|
+
this.toDispose.push(chatModel.onInteractionNeeded(() => this.forceUpdate()));
|
|
230
213
|
}).catch(error => {
|
|
231
214
|
console.error('Failed to create delegated chat response:', error);
|
|
232
215
|
});
|
|
233
216
|
|
|
234
217
|
invocation.responseCompleted.then(() => {
|
|
235
|
-
this.
|
|
218
|
+
if (!this.unmounted) {
|
|
219
|
+
this.forceUpdate();
|
|
220
|
+
}
|
|
236
221
|
}).catch(error => {
|
|
237
222
|
console.error('Error in delegated chat response completion:', error);
|
|
238
|
-
this.
|
|
223
|
+
if (!this.unmounted) {
|
|
224
|
+
this.forceUpdate();
|
|
225
|
+
}
|
|
239
226
|
});
|
|
240
227
|
}
|
|
241
228
|
|
|
242
229
|
override componentWillUnmount(): void {
|
|
230
|
+
this.unmounted = true;
|
|
243
231
|
this.toDispose.dispose();
|
|
244
|
-
this.trackedInteractionIds.clear();
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
private removeResolvedInteractions(): void {
|
|
248
|
-
this.setState(prevState => ({
|
|
249
|
-
pendingInteractions: prevState.pendingInteractions.filter(p => !p.contentPart.isResolved)
|
|
250
|
-
}));
|
|
251
232
|
}
|
|
252
233
|
|
|
234
|
+
/**
|
|
235
|
+
* The highest-priority renderer that implements renderConfirmation. Unlike plain
|
|
236
|
+
* rendering, this must not stop at the overall highest-priority renderer: a
|
|
237
|
+
* specialized renderer without renderConfirmation (e.g. the delegation renderer
|
|
238
|
+
* itself for nested delegations) would otherwise silently drop the interaction.
|
|
239
|
+
*/
|
|
253
240
|
private findConfirmationRenderer(contentPart: ChatResponseContent): ChatResponsePartRenderer<ChatResponseContent> | undefined {
|
|
254
|
-
|
|
255
|
-
(
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
}
|
|
266
|
-
return undefined;
|
|
241
|
+
return this.props.chatResponsePartRenderers.getContributions()
|
|
242
|
+
.filter(renderer => renderer.renderConfirmation)
|
|
243
|
+
.reduce<[number, ChatResponsePartRenderer<ChatResponseContent> | undefined]>(
|
|
244
|
+
(prev, current) => {
|
|
245
|
+
const prio = current.canHandle(contentPart);
|
|
246
|
+
if (prio > prev[0]) {
|
|
247
|
+
return [prio, current];
|
|
248
|
+
}
|
|
249
|
+
return prev;
|
|
250
|
+
},
|
|
251
|
+
[-1, undefined])[1];
|
|
267
252
|
}
|
|
268
253
|
|
|
269
254
|
private handleToggle = (event: React.SyntheticEvent<HTMLDetailsElement>): void => {
|
|
@@ -271,10 +256,43 @@ class DelegatedChat extends React.Component<DelegatedChatProps, DelegatedChatSta
|
|
|
271
256
|
this.setState({ isOpen: details.open });
|
|
272
257
|
};
|
|
273
258
|
|
|
274
|
-
|
|
259
|
+
/**
|
|
260
|
+
* Clicking anywhere inside a <summary> toggles the <details> element by default,
|
|
261
|
+
* which would collapse/expand the block while the user operates the inline
|
|
262
|
+
* interaction UI. Suppress the toggle for such clicks — but keep nested
|
|
263
|
+
* <summary> elements working (e.g. the argument expanders of a confirmation
|
|
264
|
+
* card), whose own toggle is also the click's default action.
|
|
265
|
+
*/
|
|
266
|
+
private preventSummaryToggle = (event: React.MouseEvent): void => {
|
|
267
|
+
const target = event.target instanceof HTMLElement ? event.target : undefined;
|
|
268
|
+
const closestSummary = target?.closest('summary');
|
|
269
|
+
if (closestSummary && event.currentTarget.contains(closestSummary)) {
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
event.preventDefault();
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
private renderPendingInteractions(pendingInteractions: ReadonlyArray<InteractiveContent & ChatResponseContent>): React.ReactNode[] {
|
|
276
|
+
// Key by interactionId so a sibling interaction resolving does not remount the
|
|
277
|
+
// remaining ones (losing in-progress wizard state); disambiguate the rare
|
|
278
|
+
// duplicate ids (e.g. two pending questions with identical text) by occurrence.
|
|
279
|
+
const seenIds = new Map<string, number>();
|
|
280
|
+
return pendingInteractions.map(contentPart => {
|
|
281
|
+
const baseKey = contentPart.interactionId ?? 'interaction';
|
|
282
|
+
const occurrence = seenIds.get(baseKey) ?? 0;
|
|
283
|
+
seenIds.set(baseKey, occurrence + 1);
|
|
284
|
+
return this.renderInteractionConfirmation(contentPart, occurrence === 0 ? baseKey : `${baseKey}-${occurrence}`);
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
private renderInteractionConfirmation(contentPart: InteractiveContent & ChatResponseContent, key: string): React.ReactNode {
|
|
275
289
|
const renderer = this.findConfirmationRenderer(contentPart);
|
|
276
290
|
if (renderer && this.state.node) {
|
|
277
|
-
return
|
|
291
|
+
return (
|
|
292
|
+
<React.Fragment key={key}>
|
|
293
|
+
{renderer.renderConfirmation!(contentPart, this.state.node)}
|
|
294
|
+
</React.Fragment>
|
|
295
|
+
);
|
|
278
296
|
}
|
|
279
297
|
return undefined;
|
|
280
298
|
}
|
|
@@ -285,6 +303,12 @@ class DelegatedChat extends React.Component<DelegatedChatProps, DelegatedChatSta
|
|
|
285
303
|
const isComplete = this.state.node?.response.isComplete ?? false;
|
|
286
304
|
const isCanceled = this.state.node?.response.isCanceled ?? false;
|
|
287
305
|
const isError = this.state.node?.response.isError ?? false;
|
|
306
|
+
// Derived from the model on every render so pending interactions survive
|
|
307
|
+
// remounts and never outlive their resolution or the response (#17952). The
|
|
308
|
+
// list also covers interactions bubbled up from nested delegations, whose
|
|
309
|
+
// waiting state is not reflected in this response's isWaitingForInput.
|
|
310
|
+
const pendingInteractions = this.state.node?.response.pendingInteractions ?? [];
|
|
311
|
+
const isWaitingForInput = (this.state.node?.response.isWaitingForInput ?? false) || pendingInteractions.length > 0;
|
|
288
312
|
|
|
289
313
|
let statusIcon = '';
|
|
290
314
|
let statusText = '';
|
|
@@ -292,12 +316,16 @@ class DelegatedChat extends React.Component<DelegatedChatProps, DelegatedChatSta
|
|
|
292
316
|
if (isCanceled) {
|
|
293
317
|
statusIcon = 'codicon-close';
|
|
294
318
|
statusText = nls.localize('theia/ai/chat-ui/delegation-response-renderer/status/canceled', 'canceled');
|
|
295
|
-
} else if (isComplete) {
|
|
296
|
-
statusIcon = 'codicon-check';
|
|
297
|
-
statusText = nls.localizeByDefault('completed');
|
|
298
319
|
} else if (isError) {
|
|
320
|
+
// error() also marks the response complete, so check isError first
|
|
299
321
|
statusIcon = 'codicon-error';
|
|
300
322
|
statusText = nls.localizeByDefault('error');
|
|
323
|
+
} else if (isComplete) {
|
|
324
|
+
statusIcon = 'codicon-check';
|
|
325
|
+
statusText = nls.localizeByDefault('completed');
|
|
326
|
+
} else if (isWaitingForInput) {
|
|
327
|
+
statusIcon = 'codicon-loading';
|
|
328
|
+
statusText = nls.localize('theia/ai/chat-ui/delegation-response-renderer/status/waitingForInput', 'waiting for input');
|
|
301
329
|
} else {
|
|
302
330
|
statusIcon = 'codicon-loading';
|
|
303
331
|
statusText = nls.localize('theia/ai/chat-ui/delegation-response-renderer/status/generating', 'generating...');
|
|
@@ -310,7 +338,7 @@ class DelegatedChat extends React.Component<DelegatedChatProps, DelegatedChatSta
|
|
|
310
338
|
statusText = nls.localize('theia/ai/chat-ui/delegation-response-renderer/status/starting', 'starting...');
|
|
311
339
|
}
|
|
312
340
|
|
|
313
|
-
const { isOpen
|
|
341
|
+
const { isOpen } = this.state;
|
|
314
342
|
const showInteractionsInSummary = !isOpen && pendingInteractions.length > 0;
|
|
315
343
|
|
|
316
344
|
return (
|
|
@@ -336,10 +364,8 @@ class DelegatedChat extends React.Component<DelegatedChatProps, DelegatedChatSta
|
|
|
336
364
|
<span className={`delegation-toggle-arrow${isOpen ? ' open' : ''}`} />
|
|
337
365
|
</div>
|
|
338
366
|
{showInteractionsInSummary && (
|
|
339
|
-
<div className='delegation-pending-confirmations'>
|
|
340
|
-
{
|
|
341
|
-
this.renderInteractionConfirmation(contentPart, id)
|
|
342
|
-
)}
|
|
367
|
+
<div className='delegation-pending-confirmations' onClick={this.preventSummaryToggle}>
|
|
368
|
+
{this.renderPendingInteractions(pendingInteractions)}
|
|
343
369
|
</div>
|
|
344
370
|
)}
|
|
345
371
|
</summary>
|