pi-ui-extend 0.1.32 → 0.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/app/app.d.ts +2 -0
- package/dist/app/app.js +28 -0
- package/dist/app/commands/command-session-actions.js +29 -1
- package/dist/app/constants.d.ts +1 -1
- package/dist/app/constants.js +2 -2
- package/dist/app/icons.d.ts +4 -9
- package/dist/app/icons.js +12 -35
- package/dist/app/model/model-usage-status.d.ts +2 -1
- package/dist/app/model/model-usage-status.js +33 -25
- package/dist/app/rendering/conversation-entry-renderer.d.ts +1 -0
- package/dist/app/rendering/conversation-tool-renderer.d.ts +1 -0
- package/dist/app/rendering/conversation-tool-renderer.js +12 -18
- package/dist/app/rendering/conversation-viewport.d.ts +4 -0
- package/dist/app/rendering/conversation-viewport.js +144 -13
- package/dist/app/rendering/dcp-stats.js +42 -16
- package/dist/app/rendering/render-controller.js +4 -0
- package/dist/app/rendering/status-line-renderer.d.ts +8 -1
- package/dist/app/rendering/status-line-renderer.js +36 -1
- package/dist/app/rendering/tab-line-renderer.js +2 -2
- package/dist/app/rendering/tool-block-renderer.d.ts +1 -0
- package/dist/app/rendering/tool-block-renderer.js +37 -11
- package/dist/app/runtime.js +1 -1
- package/dist/app/screen/mouse-controller.d.ts +5 -1
- package/dist/app/screen/mouse-controller.js +16 -0
- package/dist/app/screen/scroll-controller.d.ts +20 -0
- package/dist/app/screen/scroll-controller.js +127 -10
- package/dist/app/session/lazy-session-manager.js +35 -5
- package/dist/app/session/pix-system-message.d.ts +1 -0
- package/dist/app/session/pix-system-message.js +14 -3
- package/dist/app/session/queued-message-controller.d.ts +11 -4
- package/dist/app/session/queued-message-controller.js +74 -59
- package/dist/app/session/queued-message-entries.d.ts +2 -1
- package/dist/app/session/queued-message-entries.js +12 -1
- package/dist/app/session/session-event-controller.d.ts +42 -1
- package/dist/app/session/session-event-controller.js +500 -31
- package/dist/app/session/session-history.js +23 -4
- package/dist/app/session/tabs-controller.d.ts +11 -1
- package/dist/app/session/tabs-controller.js +102 -21
- package/dist/app/types.d.ts +14 -1
- package/dist/bundled-extensions/question/contract.d.ts +25 -0
- package/dist/bundled-extensions/question/contract.js +94 -0
- package/dist/bundled-extensions/question/index.d.ts +7 -0
- package/dist/bundled-extensions/question/index.js +28 -0
- package/dist/bundled-extensions/question/render.d.ts +4 -0
- package/dist/bundled-extensions/question/render.js +27 -0
- package/dist/bundled-extensions/question/result.d.ts +6 -0
- package/dist/bundled-extensions/question/result.js +84 -0
- package/dist/bundled-extensions/question/tool-description.d.ts +7 -0
- package/dist/bundled-extensions/question/tool-description.js +11 -0
- package/dist/bundled-extensions/question/tui.d.ts +2 -0
- package/dist/bundled-extensions/question/tui.js +577 -0
- package/dist/bundled-extensions/question/types.d.ts +103 -0
- package/dist/bundled-extensions/question/types.js +1 -0
- package/dist/bundled-extensions/session-title/config.d.ts +17 -0
- package/dist/bundled-extensions/session-title/config.js +150 -0
- package/dist/bundled-extensions/session-title/index.d.ts +5 -0
- package/dist/bundled-extensions/session-title/index.js +384 -0
- package/dist/bundled-extensions/session-title/title-generation.d.ts +26 -0
- package/dist/bundled-extensions/session-title/title-generation.js +141 -0
- package/dist/bundled-extensions/terminal-bell/index.d.ts +14 -0
- package/dist/bundled-extensions/terminal-bell/index.js +491 -0
- package/dist/config.d.ts +1 -1
- package/dist/config.js +2 -1
- package/dist/default-pix-config.js +2 -1
- package/dist/icon-theme.d.ts +7 -0
- package/dist/icon-theme.js +36 -0
- package/dist/schemas/pi-tools-suite-schema.d.ts +4 -0
- package/dist/schemas/pi-tools-suite-schema.js +5 -0
- package/dist/schemas/pix-schema.d.ts +1 -0
- package/dist/schemas/pix-schema.js +1 -0
- package/external/pi-tools-suite/README.md +7 -7
- package/external/pi-tools-suite/src/async-subagents/async-subagents.sample.jsonc +16 -16
- package/external/pi-tools-suite/src/async-subagents/core/state.ts +18 -4
- package/external/pi-tools-suite/src/async-subagents/core/types.ts +4 -0
- package/external/pi-tools-suite/src/async-subagents/tools/result.ts +14 -26
- package/external/pi-tools-suite/src/async-subagents/tools/subagents.ts +0 -1
- package/external/pi-tools-suite/src/dcp/config.ts +14 -14
- package/external/pi-tools-suite/src/dcp/index.ts +31 -43
- package/external/pi-tools-suite/src/dcp/state-persistence.ts +151 -0
- package/external/pi-tools-suite/src/default-pi-tools-suite-config.ts +25 -18
- package/external/pi-tools-suite/src/tool-descriptions.ts +34 -54
- package/package.json +3 -2
- package/schemas/pi-tools-suite.json +14 -0
- package/schemas/pix.json +7 -0
- package/extensions/question/contract.ts +0 -100
- package/extensions/question/index.ts +0 -34
- package/extensions/question/render.ts +0 -28
- package/extensions/question/result.ts +0 -86
- package/extensions/question/tool-description.ts +0 -11
- package/extensions/question/tui.ts +0 -629
- package/extensions/question/types.ts +0 -123
- package/extensions/session-title/config.ts +0 -164
- package/extensions/session-title/index.ts +0 -502
- package/extensions/terminal-bell/index.ts +0 -345
|
@@ -1,19 +1,28 @@
|
|
|
1
1
|
import { createId } from "../id.js";
|
|
2
2
|
import { stringifyUnknown, submittedUserDisplayText } from "../rendering/message-content.js";
|
|
3
|
-
import { deferredQueuedMessageEntries, queuedMessageEntries } from "./queued-message-entries.js";
|
|
3
|
+
import { autoQueuedMessageEntries, deferredQueuedMessageEntries, queuedMessageEntries } from "./queued-message-entries.js";
|
|
4
4
|
export class AppQueuedMessageController {
|
|
5
5
|
host;
|
|
6
|
+
autoUserMessages = [];
|
|
6
7
|
deferredUserMessages = [];
|
|
7
|
-
|
|
8
|
-
flushingDeferredUserMessages = false;
|
|
8
|
+
promptSubmissionInFlightSession;
|
|
9
9
|
immediateSendInProgress = false;
|
|
10
10
|
constructor(host) {
|
|
11
11
|
this.host = host;
|
|
12
12
|
}
|
|
13
13
|
reset() {
|
|
14
|
+
this.autoUserMessages.length = 0;
|
|
14
15
|
this.deferredUserMessages.length = 0;
|
|
15
|
-
this.
|
|
16
|
-
|
|
16
|
+
this.promptSubmissionInFlightSession = undefined;
|
|
17
|
+
}
|
|
18
|
+
captureAutoUserMessages() {
|
|
19
|
+
return this.autoUserMessages.map((message) => this.cloneSubmittedUserMessage(message));
|
|
20
|
+
}
|
|
21
|
+
restoreAutoUserMessages(messages) {
|
|
22
|
+
this.autoUserMessages.length = 0;
|
|
23
|
+
this.autoUserMessages.push(...messages.map((message) => this.cloneSubmittedUserMessage(message)));
|
|
24
|
+
this.updateQueuedMessageStatus();
|
|
25
|
+
void this.flushAutoUserMessages();
|
|
17
26
|
}
|
|
18
27
|
captureDeferredUserMessages() {
|
|
19
28
|
return this.deferredUserMessages.map((message) => this.cloneSubmittedUserMessage(message));
|
|
@@ -37,8 +46,8 @@ export class AppQueuedMessageController {
|
|
|
37
46
|
await this.sendUserMessageToSession(message, { streamingBehavior: "steer" });
|
|
38
47
|
return;
|
|
39
48
|
}
|
|
40
|
-
if (this.
|
|
41
|
-
this.
|
|
49
|
+
if (this.shouldQueueUserMessageAsSteering(session)) {
|
|
50
|
+
await this.queueUserMessageAsSteering(message);
|
|
42
51
|
return;
|
|
43
52
|
}
|
|
44
53
|
await this.sendUserMessageToSession(message);
|
|
@@ -47,7 +56,7 @@ export class AppQueuedMessageController {
|
|
|
47
56
|
const session = this.host.requireRuntime().session;
|
|
48
57
|
const markInFlight = !session.isStreaming;
|
|
49
58
|
if (markInFlight)
|
|
50
|
-
this.
|
|
59
|
+
this.promptSubmissionInFlightSession = session;
|
|
51
60
|
this.host.setSessionActivity("running");
|
|
52
61
|
try {
|
|
53
62
|
const opts = {};
|
|
@@ -58,8 +67,8 @@ export class AppQueuedMessageController {
|
|
|
58
67
|
await session.prompt(message.promptText, Object.keys(opts).length > 0 ? opts : undefined);
|
|
59
68
|
}
|
|
60
69
|
finally {
|
|
61
|
-
if (markInFlight)
|
|
62
|
-
this.
|
|
70
|
+
if (markInFlight && this.promptSubmissionInFlightSession === session)
|
|
71
|
+
this.promptSubmissionInFlightSession = undefined;
|
|
63
72
|
const runtime = this.host.runtime();
|
|
64
73
|
if (runtime) {
|
|
65
74
|
const activeSession = runtime.session;
|
|
@@ -68,47 +77,30 @@ export class AppQueuedMessageController {
|
|
|
68
77
|
}
|
|
69
78
|
if (this.totalQueuedMessageCount() > 0)
|
|
70
79
|
this.updateQueuedMessageStatus();
|
|
80
|
+
void this.flushAutoUserMessages();
|
|
71
81
|
}
|
|
72
82
|
}
|
|
73
|
-
async
|
|
74
|
-
if (this.immediateSendInProgress || this.
|
|
83
|
+
async flushAutoUserMessages() {
|
|
84
|
+
if (this.immediateSendInProgress || this.autoUserMessages.length === 0)
|
|
75
85
|
return;
|
|
76
86
|
const session = this.host.runtime()?.session;
|
|
77
|
-
if (!session || session.isCompacting)
|
|
87
|
+
if (!session || session.isStreaming || session.isCompacting || this.promptSubmissionInFlightSession === session)
|
|
78
88
|
return;
|
|
79
|
-
|
|
89
|
+
const message = this.autoUserMessages.shift();
|
|
90
|
+
if (!message)
|
|
80
91
|
return;
|
|
81
|
-
this.
|
|
92
|
+
this.notifyAutoUserMessagesChanged();
|
|
93
|
+
this.updateQueuedMessageStatus();
|
|
94
|
+
if (this.host.isRunning())
|
|
95
|
+
this.host.render();
|
|
82
96
|
try {
|
|
83
|
-
|
|
84
|
-
if (this.immediateSendInProgress)
|
|
85
|
-
break;
|
|
86
|
-
const activeSession = this.host.runtime()?.session;
|
|
87
|
-
if (!activeSession || activeSession.isCompacting)
|
|
88
|
-
break;
|
|
89
|
-
if (!activeSession.isStreaming && this.promptSubmissionInFlight)
|
|
90
|
-
break;
|
|
91
|
-
const message = this.deferredUserMessages.shift();
|
|
92
|
-
if (!message)
|
|
93
|
-
break;
|
|
94
|
-
this.notifyDeferredUserMessagesChanged();
|
|
95
|
-
this.updateQueuedMessageStatus();
|
|
96
|
-
try {
|
|
97
|
-
await this.sendUserMessageToSession(message);
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
this.deferredUserMessages.unshift(message);
|
|
101
|
-
this.notifyDeferredUserMessagesChanged();
|
|
102
|
-
this.updateQueuedMessageStatus();
|
|
103
|
-
this.host.addEntry({ id: createId("error"), kind: "error", text: `Queued message failed: ${stringifyUnknown(error)}` });
|
|
104
|
-
break;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
97
|
+
await this.sendUserMessageToSession(message);
|
|
107
98
|
}
|
|
108
|
-
|
|
109
|
-
this.
|
|
110
|
-
|
|
111
|
-
|
|
99
|
+
catch (error) {
|
|
100
|
+
this.autoUserMessages.unshift(message);
|
|
101
|
+
this.notifyAutoUserMessagesChanged();
|
|
102
|
+
this.updateQueuedMessageStatus();
|
|
103
|
+
this.host.addEntry({ id: createId("error"), kind: "error", text: `Queued message failed: ${stringifyUnknown(error)}` });
|
|
112
104
|
if (this.host.isRunning())
|
|
113
105
|
this.host.render();
|
|
114
106
|
}
|
|
@@ -116,7 +108,7 @@ export class AppQueuedMessageController {
|
|
|
116
108
|
queuedMessageCounts() {
|
|
117
109
|
const session = this.host.runtime()?.session;
|
|
118
110
|
return {
|
|
119
|
-
steering: (session?.getSteeringMessages().length ?? 0) + this.deferredUserMessages.length,
|
|
111
|
+
steering: (session?.getSteeringMessages().length ?? 0) + this.autoUserMessages.length + this.deferredUserMessages.length,
|
|
120
112
|
followUp: session?.getFollowUpMessages().length ?? 0,
|
|
121
113
|
};
|
|
122
114
|
}
|
|
@@ -131,18 +123,20 @@ export class AppQueuedMessageController {
|
|
|
131
123
|
restoreQueuedMessagesToEditorForAbort() {
|
|
132
124
|
const session = this.host.runtime()?.session;
|
|
133
125
|
const sdkQueued = session?.clearQueue() ?? { steering: [], followUp: [] };
|
|
126
|
+
const auto = this.autoUserMessages.splice(0);
|
|
134
127
|
const deferred = this.deferredUserMessages.splice(0);
|
|
135
128
|
if (deferred.length > 0)
|
|
136
129
|
this.notifyDeferredUserMessagesChanged();
|
|
137
130
|
const restoredTexts = [
|
|
138
131
|
...sdkQueued.steering,
|
|
132
|
+
...auto.map((message) => this.restorableSubmittedMessageText(message)),
|
|
139
133
|
...deferred.map((message) => this.restorableSubmittedMessageText(message)),
|
|
140
134
|
...sdkQueued.followUp,
|
|
141
135
|
]
|
|
142
136
|
.map((text) => text.trimEnd())
|
|
143
137
|
.filter((text) => text.trim().length > 0);
|
|
144
|
-
const images = deferred.flatMap((message) => message.images);
|
|
145
|
-
const restoredCount = sdkQueued.steering.length + sdkQueued.followUp.length + deferred.length;
|
|
138
|
+
const images = [...auto, ...deferred].flatMap((message) => message.images);
|
|
139
|
+
const restoredCount = sdkQueued.steering.length + sdkQueued.followUp.length + auto.length + deferred.length;
|
|
146
140
|
if (restoredTexts.length > 0 || images.length > 0) {
|
|
147
141
|
const currentText = this.host.inputText().trimEnd();
|
|
148
142
|
const combinedText = [...restoredTexts, currentText]
|
|
@@ -234,19 +228,31 @@ export class AppQueuedMessageController {
|
|
|
234
228
|
return entry?.kind === "queued" ? entry : undefined;
|
|
235
229
|
}
|
|
236
230
|
queuedEntries() {
|
|
237
|
-
return queuedMessageEntries(this.host.runtime()?.session, this.deferredUserMessages);
|
|
231
|
+
return queuedMessageEntries(this.host.runtime()?.session, this.autoUserMessages, this.deferredUserMessages);
|
|
232
|
+
}
|
|
233
|
+
autoQueuedEntries() {
|
|
234
|
+
return autoQueuedMessageEntries(this.autoUserMessages);
|
|
238
235
|
}
|
|
239
236
|
deferredQueuedEntries() {
|
|
240
237
|
return deferredQueuedMessageEntries(this.deferredUserMessages);
|
|
241
238
|
}
|
|
242
|
-
|
|
243
|
-
return session.isCompacting || this.
|
|
239
|
+
shouldQueueUserMessageAsSteering(session) {
|
|
240
|
+
return session.isCompacting || this.promptSubmissionInFlightSession === session;
|
|
241
|
+
}
|
|
242
|
+
async queueUserMessageAsSteering(message) {
|
|
243
|
+
this.autoUserMessages.push(message);
|
|
244
|
+
this.notifyAutoUserMessagesChanged();
|
|
245
|
+
this.updateQueuedMessageStatus();
|
|
246
|
+
this.host.setSessionStatus(this.host.runtime()?.session);
|
|
247
|
+
this.host.showToast("Message queued for the next agent turn", "info");
|
|
248
|
+
this.host.render();
|
|
249
|
+
void this.flushAutoUserMessages();
|
|
244
250
|
}
|
|
245
251
|
deferUserMessage(message) {
|
|
246
252
|
this.deferredUserMessages.push(message);
|
|
247
253
|
this.notifyDeferredUserMessagesChanged();
|
|
248
254
|
this.updateQueuedMessageStatus();
|
|
249
|
-
this.host.showToast("Message
|
|
255
|
+
this.host.showToast("Message paused; send it from the queue menu or status button", "info");
|
|
250
256
|
this.host.render();
|
|
251
257
|
}
|
|
252
258
|
async rewriteSdkQueuedMessages(update) {
|
|
@@ -286,12 +292,14 @@ export class AppQueuedMessageController {
|
|
|
286
292
|
steering: [...session.getSteeringMessages()],
|
|
287
293
|
followUp: [...session.getFollowUpMessages()],
|
|
288
294
|
};
|
|
289
|
-
if (entry.queueSource === "deferred") {
|
|
290
|
-
const
|
|
295
|
+
if (entry.queueSource === "auto" || entry.queueSource === "deferred") {
|
|
296
|
+
const source = entry.queueSource === "auto" ? this.autoUserMessages : this.deferredUserMessages;
|
|
297
|
+
const [message] = source.splice(entry.queueIndex, 1);
|
|
291
298
|
if (!message)
|
|
292
299
|
throw new Error("Queued message is no longer available");
|
|
293
300
|
session.clearQueue();
|
|
294
|
-
|
|
301
|
+
if (entry.queueSource === "deferred")
|
|
302
|
+
this.notifyDeferredUserMessagesChanged();
|
|
295
303
|
return { removed: message, sdkMessagesToRestore: sdkMessages };
|
|
296
304
|
}
|
|
297
305
|
const messages = entry.queueSource === "sdk-steering" ? sdkMessages.steering : sdkMessages.followUp;
|
|
@@ -340,11 +348,13 @@ export class AppQueuedMessageController {
|
|
|
340
348
|
return session?.isStreaming || session?.isCompacting ? "running" : "idle";
|
|
341
349
|
}
|
|
342
350
|
async removeQueuedEntry(entry) {
|
|
343
|
-
if (entry.queueSource === "deferred") {
|
|
344
|
-
const
|
|
351
|
+
if (entry.queueSource === "auto" || entry.queueSource === "deferred") {
|
|
352
|
+
const source = entry.queueSource === "auto" ? this.autoUserMessages : this.deferredUserMessages;
|
|
353
|
+
const [message] = source.splice(entry.queueIndex, 1);
|
|
345
354
|
if (!message)
|
|
346
355
|
throw new Error("Queued message is no longer available");
|
|
347
|
-
|
|
356
|
+
if (entry.queueSource === "deferred")
|
|
357
|
+
this.notifyDeferredUserMessagesChanged();
|
|
348
358
|
return message;
|
|
349
359
|
}
|
|
350
360
|
const removed = await this.rewriteSdkQueuedMessages((steering, followUp) => {
|
|
@@ -357,11 +367,13 @@ export class AppQueuedMessageController {
|
|
|
357
367
|
return removed;
|
|
358
368
|
}
|
|
359
369
|
async requeueRemovedEntry(entry, removed) {
|
|
360
|
-
if (entry.queueSource === "deferred") {
|
|
370
|
+
if (entry.queueSource === "auto" || entry.queueSource === "deferred") {
|
|
361
371
|
if (typeof removed === "string")
|
|
362
372
|
return;
|
|
363
|
-
|
|
364
|
-
|
|
373
|
+
const source = entry.queueSource === "auto" ? this.autoUserMessages : this.deferredUserMessages;
|
|
374
|
+
source.splice(Math.min(entry.queueIndex, source.length), 0, removed);
|
|
375
|
+
if (entry.queueSource === "deferred")
|
|
376
|
+
this.notifyDeferredUserMessagesChanged();
|
|
365
377
|
return;
|
|
366
378
|
}
|
|
367
379
|
if (typeof removed !== "string")
|
|
@@ -397,4 +409,7 @@ export class AppQueuedMessageController {
|
|
|
397
409
|
notifyDeferredUserMessagesChanged() {
|
|
398
410
|
this.host.onDeferredUserMessagesChanged?.();
|
|
399
411
|
}
|
|
412
|
+
notifyAutoUserMessagesChanged() {
|
|
413
|
+
this.host.onDeferredUserMessagesChanged?.();
|
|
414
|
+
}
|
|
400
415
|
}
|
|
@@ -5,4 +5,5 @@ export type QueuedEntry = Extract<Entry, {
|
|
|
5
5
|
}>;
|
|
6
6
|
export declare function sdkQueuedMessageEntries(session: AgentSession | undefined): QueuedEntry[];
|
|
7
7
|
export declare function deferredQueuedMessageEntries(messages: readonly SubmittedUserMessage[]): QueuedEntry[];
|
|
8
|
-
export declare function
|
|
8
|
+
export declare function autoQueuedMessageEntries(messages: readonly SubmittedUserMessage[]): QueuedEntry[];
|
|
9
|
+
export declare function queuedMessageEntries(session: AgentSession | undefined, autoUserMessages: readonly SubmittedUserMessage[], deferredUserMessages: readonly SubmittedUserMessage[]): QueuedEntry[];
|
|
@@ -33,9 +33,20 @@ export function deferredQueuedMessageEntries(messages) {
|
|
|
33
33
|
queueIndex: index,
|
|
34
34
|
}));
|
|
35
35
|
}
|
|
36
|
-
export function
|
|
36
|
+
export function autoQueuedMessageEntries(messages) {
|
|
37
|
+
return messages.map((message, index) => ({
|
|
38
|
+
id: `${message.id}-auto-${index}`,
|
|
39
|
+
kind: "queued",
|
|
40
|
+
mode: "steering",
|
|
41
|
+
text: message.displayText,
|
|
42
|
+
queueSource: "auto",
|
|
43
|
+
queueIndex: index,
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
export function queuedMessageEntries(session, autoUserMessages, deferredUserMessages) {
|
|
37
47
|
return [
|
|
38
48
|
...sdkQueuedMessageEntries(session),
|
|
49
|
+
...autoQueuedMessageEntries(autoUserMessages),
|
|
39
50
|
...deferredQueuedMessageEntries(deferredUserMessages),
|
|
40
51
|
];
|
|
41
52
|
}
|
|
@@ -5,6 +5,7 @@ import type { Entry, SessionActivity } from "../types.js";
|
|
|
5
5
|
import type { WorkspaceMutation, WorkspaceMutationPreparation } from "../workspace/workspace-undo.js";
|
|
6
6
|
export type AppSessionEventControllerState = {
|
|
7
7
|
toolEntryIdsByCallId: Map<string, string>;
|
|
8
|
+
pendingToolCallIdsByContentIndex: Map<number, string>;
|
|
8
9
|
toolMutationPreparationsByCallId: Map<string, {
|
|
9
10
|
userEntryId: string;
|
|
10
11
|
args: unknown;
|
|
@@ -13,9 +14,16 @@ export type AppSessionEventControllerState = {
|
|
|
13
14
|
olderHistoryLoader: SessionHistoryOlderLoader | undefined;
|
|
14
15
|
currentUserEntryId: string | undefined;
|
|
15
16
|
currentAssistantEntryId: string | undefined;
|
|
17
|
+
currentAssistantTextBlockEntryId: string | undefined;
|
|
18
|
+
currentAssistantTextBlockStartLength: number | undefined;
|
|
19
|
+
currentAssistantTextBlockContentIndex: number | undefined;
|
|
20
|
+
assistantTextBlocksByContentIndex: Map<number, string>;
|
|
16
21
|
currentThinkingEntryId: string | undefined;
|
|
22
|
+
assistantMessageClosed: boolean;
|
|
17
23
|
assistantTextBuffer: string;
|
|
18
24
|
entryRenderVersions: Map<string, number>;
|
|
25
|
+
historyEntries: Entry[];
|
|
26
|
+
historyWindowStart: number;
|
|
19
27
|
};
|
|
20
28
|
export type AppSessionEventControllerHost = {
|
|
21
29
|
readonly entries: Entry[];
|
|
@@ -31,6 +39,7 @@ export type AppSessionEventControllerHost = {
|
|
|
31
39
|
setSessionStatus(session: AgentSessionRuntime["session"] | undefined): void;
|
|
32
40
|
setSessionActivity(activity: SessionActivity): void;
|
|
33
41
|
updateQueuedMessageStatus(): void;
|
|
42
|
+
flushAutoUserMessages(): void;
|
|
34
43
|
prepareWorkspaceMutation(toolName: string, args: unknown): WorkspaceMutationPreparation | undefined;
|
|
35
44
|
recordWorkspaceMutationForUserEntry(entryId: string, mutation: WorkspaceMutation): void;
|
|
36
45
|
workspaceMutationFromToolExecution(input: {
|
|
@@ -52,11 +61,20 @@ export declare class AppSessionEventController {
|
|
|
52
61
|
private readonly host;
|
|
53
62
|
readonly entryRenderVersions: Map<string, number>;
|
|
54
63
|
private readonly toolEntryIdsByCallId;
|
|
64
|
+
private readonly pendingToolCallIdsByContentIndex;
|
|
55
65
|
private readonly toolMutationPreparationsByCallId;
|
|
56
66
|
private olderHistoryLoader;
|
|
57
67
|
private currentUserEntryId;
|
|
58
68
|
private currentAssistantEntryId;
|
|
69
|
+
private currentAssistantTextBlockEntryId;
|
|
70
|
+
private currentAssistantTextBlockStartLength;
|
|
71
|
+
private currentAssistantTextBlockContentIndex;
|
|
72
|
+
private readonly assistantTextBlocksByContentIndex;
|
|
73
|
+
private readonly finalizedToolCallContentIndexes;
|
|
74
|
+
private historyEntries;
|
|
75
|
+
private historyWindowStart;
|
|
59
76
|
private currentThinkingEntryId;
|
|
77
|
+
private assistantMessageClosed;
|
|
60
78
|
private assistantTextBuffer;
|
|
61
79
|
constructor(host: AppSessionEventControllerHost);
|
|
62
80
|
snapshotState(): AppSessionEventControllerState;
|
|
@@ -71,6 +89,11 @@ export declare class AppSessionEventController {
|
|
|
71
89
|
hasOlderSessionHistory(): boolean;
|
|
72
90
|
isLoadingOlderSessionHistory(): boolean;
|
|
73
91
|
loadOlderSessionHistory(options?: LoadOlderSessionHistoryOptions): Promise<boolean>;
|
|
92
|
+
hasNewerSessionHistory(): boolean;
|
|
93
|
+
isLoadingNewerSessionHistory(): boolean;
|
|
94
|
+
loadNewerSessionHistory(options?: {
|
|
95
|
+
render?: boolean;
|
|
96
|
+
}): Promise<boolean>;
|
|
74
97
|
handleSessionEvent(event: AgentSessionEvent): void;
|
|
75
98
|
addCustomMessageEntry(message: Record<string, unknown>): void;
|
|
76
99
|
findEntry(id: string): Entry | undefined;
|
|
@@ -79,22 +102,40 @@ export declare class AppSessionEventController {
|
|
|
79
102
|
}> | undefined;
|
|
80
103
|
touchEntry(entry: Entry): void;
|
|
81
104
|
addEntry(entry: Entry): void;
|
|
82
|
-
|
|
105
|
+
prependEntries(entries: readonly Entry[]): void;
|
|
106
|
+
private shiftHistoryWindow;
|
|
107
|
+
private setHistoryWindowStart;
|
|
108
|
+
private historyWindowSize;
|
|
109
|
+
private maxHistoryWindowStart;
|
|
110
|
+
private registerEntry;
|
|
83
111
|
private pruneHistoryWindow;
|
|
84
112
|
private measuredLineCountForEntries;
|
|
85
113
|
private forgetEntry;
|
|
114
|
+
private removeToolEntryOrphan;
|
|
86
115
|
addSessionAbortedEntry(): void;
|
|
116
|
+
private finalizeAbandonedToolEntries;
|
|
87
117
|
private handleMessageStart;
|
|
88
118
|
private handleMessageEnd;
|
|
89
119
|
private prepareToolWorkspaceMutation;
|
|
120
|
+
private finalizeToolResultMessage;
|
|
90
121
|
private recordToolWorkspaceMutation;
|
|
91
122
|
private handleMessageUpdate;
|
|
123
|
+
private handleToolCallStreamUpdate;
|
|
92
124
|
private appendAssistantText;
|
|
93
125
|
private flushAssistantTextBuffer;
|
|
126
|
+
private reconcileAssistantTextBlock;
|
|
127
|
+
private ensureAssistantTextBlockStarted;
|
|
128
|
+
private finishCurrentAssistantTextBlock;
|
|
129
|
+
private hasVisibleTextBeforeCurrentAssistantBlock;
|
|
94
130
|
private drainAssistantTextBuffer;
|
|
95
131
|
private hasVisibleAssistantText;
|
|
132
|
+
private hasStartedCurrentAssistantText;
|
|
96
133
|
private appendThinkingText;
|
|
97
134
|
private finishCurrentThinkingEntry;
|
|
135
|
+
private reconcileThinkingText;
|
|
136
|
+
private currentThinkingLevel;
|
|
137
|
+
private renderAssistantToolCallsFromMessage;
|
|
138
|
+
private upsertPendingToolCall;
|
|
98
139
|
private upsertToolEntry;
|
|
99
140
|
private clearCurrentAssistantState;
|
|
100
141
|
}
|