@getpaseo/server 0.1.14 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/client/daemon-client.d.ts +41 -4
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +355 -84
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/agent-manager.d.ts +10 -0
- package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
- package/dist/server/server/agent/agent-manager.js +261 -18
- package/dist/server/server/agent/agent-manager.js.map +1 -1
- package/dist/server/server/agent/agent-projections.d.ts +5 -0
- package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
- package/dist/server/server/agent/agent-projections.js +24 -0
- package/dist/server/server/agent/agent-projections.js.map +1 -1
- package/dist/server/server/agent/agent-sdk-types.d.ts +11 -0
- package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
- package/dist/server/server/agent/agent-storage.d.ts +15 -5
- package/dist/server/server/agent/agent-storage.d.ts.map +1 -1
- package/dist/server/server/agent/agent-storage.js +2 -0
- package/dist/server/server/agent/agent-storage.js.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +2 -0
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js +2 -0
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts +7 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.js +1470 -237
- package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.js +19 -4
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +40 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js +1 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -1
- package/dist/server/server/client-message-id.d.ts +3 -0
- package/dist/server/server/client-message-id.d.ts.map +1 -0
- package/dist/server/server/client-message-id.js +12 -0
- package/dist/server/server/client-message-id.js.map +1 -0
- package/dist/server/server/persisted-config.d.ts +8 -8
- package/dist/server/server/persistence-hooks.js +1 -1
- package/dist/server/server/persistence-hooks.js.map +1 -1
- package/dist/server/server/relay-transport.d.ts.map +1 -1
- package/dist/server/server/relay-transport.js +27 -28
- package/dist/server/server/relay-transport.js.map +1 -1
- package/dist/server/server/session.d.ts +4 -2
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +122 -31
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/websocket-server.d.ts +8 -4
- package/dist/server/server/websocket-server.d.ts.map +1 -1
- package/dist/server/server/websocket-server.js +272 -75
- package/dist/server/server/websocket-server.js.map +1 -1
- package/dist/server/shared/daemon-endpoints.d.ts +9 -1
- package/dist/server/shared/daemon-endpoints.d.ts.map +1 -1
- package/dist/server/shared/daemon-endpoints.js +18 -3
- package/dist/server/shared/daemon-endpoints.js.map +1 -1
- package/dist/server/shared/messages.d.ts +2065 -313
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +40 -1
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/shared/tool-call-display.d.ts.map +1 -1
- package/dist/server/shared/tool-call-display.js +4 -0
- package/dist/server/shared/tool-call-display.js.map +1 -1
- package/package.json +3 -3
|
@@ -17,7 +17,7 @@ import { buildConfigOverrides, buildSessionConfig, extractTimestamps } from './p
|
|
|
17
17
|
import { experimental_createMCPClient } from 'ai';
|
|
18
18
|
import { buildProviderRegistry } from './agent/provider-registry.js';
|
|
19
19
|
import { scheduleAgentMetadataGeneration } from './agent/agent-metadata-generator.js';
|
|
20
|
-
import { toAgentPayload } from './agent/agent-projections.js';
|
|
20
|
+
import { resolveEffectiveThinkingOptionId, toAgentPayload } from './agent/agent-projections.js';
|
|
21
21
|
import { appendTimelineItemIfAgentKnown, emitLiveTimelineItemIfAgentKnown, } from './agent/timeline-append.js';
|
|
22
22
|
import { projectTimelineRows } from './agent/timeline-projection.js';
|
|
23
23
|
import { DEFAULT_STRUCTURED_GENERATION_PROVIDERS, StructuredAgentFallbackError, StructuredAgentResponseError, generateStructuredAgentResponseWithFallback, } from './agent/agent-response-loop.js';
|
|
@@ -32,6 +32,7 @@ import { getProjectIcon } from '../utils/project-icon.js';
|
|
|
32
32
|
import { expandTilde } from '../utils/path.js';
|
|
33
33
|
import { searchHomeDirectories, searchWorkspaceEntries } from '../utils/directory-suggestions.js';
|
|
34
34
|
import { ensureLocalSpeechModels, getLocalSpeechModelDir, listLocalSpeechModels, } from './speech/providers/local/models.js';
|
|
35
|
+
import { resolveClientMessageId } from './client-message-id.js';
|
|
35
36
|
const execAsync = promisify(exec);
|
|
36
37
|
const READ_ONLY_GIT_ENV = {
|
|
37
38
|
...process.env,
|
|
@@ -516,12 +517,33 @@ export class Session {
|
|
|
516
517
|
const updatedAt = new Date(record.lastActivityAt ?? record.updatedAt);
|
|
517
518
|
const lastUserMessageAt = record.lastUserMessageAt ? new Date(record.lastUserMessageAt) : null;
|
|
518
519
|
const provider = coerceAgentProvider(this.sessionLogger, record.provider, record.id);
|
|
520
|
+
const runtimeInfo = record.runtimeInfo
|
|
521
|
+
? {
|
|
522
|
+
provider: coerceAgentProvider(this.sessionLogger, record.runtimeInfo.provider, record.id),
|
|
523
|
+
sessionId: record.runtimeInfo.sessionId,
|
|
524
|
+
...(Object.prototype.hasOwnProperty.call(record.runtimeInfo, 'model')
|
|
525
|
+
? { model: record.runtimeInfo.model ?? null }
|
|
526
|
+
: {}),
|
|
527
|
+
...(Object.prototype.hasOwnProperty.call(record.runtimeInfo, 'thinkingOptionId')
|
|
528
|
+
? { thinkingOptionId: record.runtimeInfo.thinkingOptionId ?? null }
|
|
529
|
+
: {}),
|
|
530
|
+
...(Object.prototype.hasOwnProperty.call(record.runtimeInfo, 'modeId')
|
|
531
|
+
? { modeId: record.runtimeInfo.modeId ?? null }
|
|
532
|
+
: {}),
|
|
533
|
+
...(record.runtimeInfo.extra ? { extra: record.runtimeInfo.extra } : {}),
|
|
534
|
+
}
|
|
535
|
+
: undefined;
|
|
519
536
|
return {
|
|
520
537
|
id: record.id,
|
|
521
538
|
provider,
|
|
522
539
|
cwd: record.cwd,
|
|
523
540
|
model: record.config?.model ?? null,
|
|
524
541
|
thinkingOptionId: record.config?.thinkingOptionId ?? null,
|
|
542
|
+
effectiveThinkingOptionId: resolveEffectiveThinkingOptionId({
|
|
543
|
+
runtimeInfo,
|
|
544
|
+
configuredThinkingOptionId: record.config?.thinkingOptionId ?? null,
|
|
545
|
+
}),
|
|
546
|
+
...(runtimeInfo ? { runtimeInfo } : {}),
|
|
525
547
|
createdAt: createdAt.toISOString(),
|
|
526
548
|
updatedAt: updatedAt.toISOString(),
|
|
527
549
|
lastUserMessageAt: lastUserMessageAt ? lastUserMessageAt.toISOString() : null,
|
|
@@ -592,6 +614,19 @@ export class Session {
|
|
|
592
614
|
if (!includeArchived && agent.archivedAt) {
|
|
593
615
|
return false;
|
|
594
616
|
}
|
|
617
|
+
if (filter?.thinkingOptionId !== undefined) {
|
|
618
|
+
const expectedThinkingOptionId = resolveEffectiveThinkingOptionId({
|
|
619
|
+
configuredThinkingOptionId: filter.thinkingOptionId ?? null,
|
|
620
|
+
});
|
|
621
|
+
const resolvedThinkingOptionId = agent.effectiveThinkingOptionId ??
|
|
622
|
+
resolveEffectiveThinkingOptionId({
|
|
623
|
+
runtimeInfo: agent.runtimeInfo,
|
|
624
|
+
configuredThinkingOptionId: agent.thinkingOptionId ?? null,
|
|
625
|
+
});
|
|
626
|
+
if (resolvedThinkingOptionId !== expectedThinkingOptionId) {
|
|
627
|
+
return false;
|
|
628
|
+
}
|
|
629
|
+
}
|
|
595
630
|
if (filter?.statuses && filter.statuses.length > 0) {
|
|
596
631
|
const statuses = new Set(filter.statuses);
|
|
597
632
|
if (!statuses.has(agent.status)) {
|
|
@@ -1093,6 +1128,9 @@ export class Session {
|
|
|
1093
1128
|
}
|
|
1094
1129
|
async handleArchiveAgentRequest(agentId, requestId) {
|
|
1095
1130
|
this.sessionLogger.info({ agentId }, `Archiving agent ${agentId}`);
|
|
1131
|
+
if (this.agentManager.getAgent(agentId)) {
|
|
1132
|
+
await this.interruptAgentIfRunning(agentId);
|
|
1133
|
+
}
|
|
1096
1134
|
const archivedAt = new Date().toISOString();
|
|
1097
1135
|
const existing = await this.agentStorage.get(agentId);
|
|
1098
1136
|
let archivedRecord = existing;
|
|
@@ -1102,7 +1140,6 @@ export class Session {
|
|
|
1102
1140
|
throw new Error(`Agent not found: ${agentId}`);
|
|
1103
1141
|
}
|
|
1104
1142
|
await this.agentStorage.applySnapshot(liveAgent, {
|
|
1105
|
-
title: liveAgent.config.title ?? null,
|
|
1106
1143
|
internal: liveAgent.internal,
|
|
1107
1144
|
});
|
|
1108
1145
|
archivedRecord = await this.agentStorage.get(agentId);
|
|
@@ -1130,6 +1167,10 @@ export class Session {
|
|
|
1130
1167
|
requestId,
|
|
1131
1168
|
});
|
|
1132
1169
|
}
|
|
1170
|
+
async getArchivedAt(agentId) {
|
|
1171
|
+
const record = await this.agentStorage.get(agentId);
|
|
1172
|
+
return record?.archivedAt ?? null;
|
|
1173
|
+
}
|
|
1133
1174
|
async handleUpdateAgentRequest(agentId, name, labels, requestId) {
|
|
1134
1175
|
this.sessionLogger.info({
|
|
1135
1176
|
agentId,
|
|
@@ -1608,6 +1649,11 @@ export class Session {
|
|
|
1608
1649
|
this.handleAgentRunError(agentId, error, 'Failed to initialize agent before sending prompt');
|
|
1609
1650
|
return;
|
|
1610
1651
|
}
|
|
1652
|
+
const archivedAt = await this.getArchivedAt(agentId);
|
|
1653
|
+
if (archivedAt) {
|
|
1654
|
+
this.handleAgentRunError(agentId, new Error(`Agent ${agentId} is archived`), 'Refusing to send prompt to archived agent');
|
|
1655
|
+
return;
|
|
1656
|
+
}
|
|
1611
1657
|
try {
|
|
1612
1658
|
await this.interruptAgentIfRunning(agentId);
|
|
1613
1659
|
}
|
|
@@ -1631,7 +1677,7 @@ export class Session {
|
|
|
1631
1677
|
* Handle create agent request
|
|
1632
1678
|
*/
|
|
1633
1679
|
async handleCreateAgentRequest(msg) {
|
|
1634
|
-
const { config, worktreeName, requestId, initialPrompt, outputSchema, git, images, labels } = msg;
|
|
1680
|
+
const { config, worktreeName, requestId, initialPrompt, clientMessageId, outputSchema, git, images, labels, } = msg;
|
|
1635
1681
|
this.sessionLogger.info({ cwd: config.cwd, provider: config.provider, worktreeName }, `Creating agent in ${config.cwd} (${config.provider})${worktreeName ? ` with worktree ${worktreeName}` : ''}`);
|
|
1636
1682
|
try {
|
|
1637
1683
|
const { sessionConfig, worktreeConfig } = await this.buildAgentSessionConfig(config, git, worktreeName, labels);
|
|
@@ -1649,7 +1695,7 @@ export class Session {
|
|
|
1649
1695
|
logger: this.sessionLogger,
|
|
1650
1696
|
});
|
|
1651
1697
|
try {
|
|
1652
|
-
await this.handleSendAgentMessage(snapshot.id, trimmedPrompt,
|
|
1698
|
+
await this.handleSendAgentMessage(snapshot.id, trimmedPrompt, resolveClientMessageId(clientMessageId), images, outputSchema ? { outputSchema } : undefined);
|
|
1653
1699
|
}
|
|
1654
1700
|
catch (promptError) {
|
|
1655
1701
|
this.sessionLogger.error({ err: promptError, agentId: snapshot.id }, `Failed to run initial prompt for agent ${snapshot.id}`);
|
|
@@ -3767,6 +3813,18 @@ export class Session {
|
|
|
3767
3813
|
return entry.agent.title?.toLocaleLowerCase() ?? '';
|
|
3768
3814
|
}
|
|
3769
3815
|
}
|
|
3816
|
+
getFetchAgentsSortValueFromAgent(agent, key) {
|
|
3817
|
+
switch (key) {
|
|
3818
|
+
case 'status_priority':
|
|
3819
|
+
return this.getStatusPriority(agent);
|
|
3820
|
+
case 'created_at':
|
|
3821
|
+
return Date.parse(agent.createdAt);
|
|
3822
|
+
case 'updated_at':
|
|
3823
|
+
return Date.parse(agent.updatedAt);
|
|
3824
|
+
case 'title':
|
|
3825
|
+
return agent.title?.toLocaleLowerCase() ?? '';
|
|
3826
|
+
}
|
|
3827
|
+
}
|
|
3770
3828
|
compareSortValues(left, right) {
|
|
3771
3829
|
if (left === right) {
|
|
3772
3830
|
return 0;
|
|
@@ -3782,17 +3840,17 @@ export class Session {
|
|
|
3782
3840
|
}
|
|
3783
3841
|
return String(left).localeCompare(String(right));
|
|
3784
3842
|
}
|
|
3785
|
-
|
|
3843
|
+
compareFetchAgentsAgents(left, right, sort) {
|
|
3786
3844
|
for (const spec of sort) {
|
|
3787
|
-
const leftValue = this.
|
|
3788
|
-
const rightValue = this.
|
|
3845
|
+
const leftValue = this.getFetchAgentsSortValueFromAgent(left, spec.key);
|
|
3846
|
+
const rightValue = this.getFetchAgentsSortValueFromAgent(right, spec.key);
|
|
3789
3847
|
const base = this.compareSortValues(leftValue, rightValue);
|
|
3790
3848
|
if (base === 0) {
|
|
3791
3849
|
continue;
|
|
3792
3850
|
}
|
|
3793
3851
|
return spec.direction === 'asc' ? base : -base;
|
|
3794
3852
|
}
|
|
3795
|
-
return left.
|
|
3853
|
+
return left.id.localeCompare(right.id);
|
|
3796
3854
|
}
|
|
3797
3855
|
encodeFetchAgentsCursor(entry, sort) {
|
|
3798
3856
|
const values = {};
|
|
@@ -3852,9 +3910,9 @@ export class Session {
|
|
|
3852
3910
|
id: payload.id,
|
|
3853
3911
|
};
|
|
3854
3912
|
}
|
|
3855
|
-
|
|
3913
|
+
compareAgentWithCursor(agent, cursor, sort) {
|
|
3856
3914
|
for (const spec of sort) {
|
|
3857
|
-
const leftValue = this.
|
|
3915
|
+
const leftValue = this.getFetchAgentsSortValueFromAgent(agent, spec.key);
|
|
3858
3916
|
const rightValue = cursor.values[spec.key] !== undefined ? (cursor.values[spec.key] ?? null) : null;
|
|
3859
3917
|
const base = this.compareSortValues(leftValue, rightValue);
|
|
3860
3918
|
if (base === 0) {
|
|
@@ -3862,7 +3920,7 @@ export class Session {
|
|
|
3862
3920
|
}
|
|
3863
3921
|
return spec.direction === 'asc' ? base : -base;
|
|
3864
3922
|
}
|
|
3865
|
-
return
|
|
3923
|
+
return agent.id.localeCompare(cursor.id);
|
|
3866
3924
|
}
|
|
3867
3925
|
async listFetchAgentsEntries(request) {
|
|
3868
3926
|
const filter = request.filter;
|
|
@@ -3880,24 +3938,38 @@ export class Session {
|
|
|
3880
3938
|
placementByCwd.set(cwd, placementPromise);
|
|
3881
3939
|
return placementPromise;
|
|
3882
3940
|
};
|
|
3883
|
-
let
|
|
3884
|
-
|
|
3885
|
-
project: await getPlacement(agent.cwd),
|
|
3886
|
-
})));
|
|
3887
|
-
entries = entries.filter((entry) => this.matchesAgentFilter({
|
|
3888
|
-
agent: entry.agent,
|
|
3889
|
-
project: entry.project,
|
|
3890
|
-
filter,
|
|
3891
|
-
}));
|
|
3892
|
-
entries.sort((left, right) => this.compareFetchAgentsEntries(left, right, sort));
|
|
3941
|
+
let candidates = [...agents];
|
|
3942
|
+
candidates.sort((left, right) => this.compareFetchAgentsAgents(left, right, sort));
|
|
3893
3943
|
const cursorToken = request.page?.cursor;
|
|
3894
3944
|
if (cursorToken) {
|
|
3895
3945
|
const cursor = this.decodeFetchAgentsCursor(cursorToken, sort);
|
|
3896
|
-
|
|
3946
|
+
candidates = candidates.filter((agent) => this.compareAgentWithCursor(agent, cursor, sort) > 0);
|
|
3947
|
+
}
|
|
3948
|
+
const limit = request.page?.limit ?? 200;
|
|
3949
|
+
const matchedEntries = [];
|
|
3950
|
+
const batchSize = 25;
|
|
3951
|
+
for (let start = 0; start < candidates.length && matchedEntries.length <= limit; start += batchSize) {
|
|
3952
|
+
const batch = candidates.slice(start, start + batchSize);
|
|
3953
|
+
const batchEntries = await Promise.all(batch.map(async (agent) => ({
|
|
3954
|
+
agent,
|
|
3955
|
+
project: await getPlacement(agent.cwd),
|
|
3956
|
+
})));
|
|
3957
|
+
for (const entry of batchEntries) {
|
|
3958
|
+
if (!this.matchesAgentFilter({
|
|
3959
|
+
agent: entry.agent,
|
|
3960
|
+
project: entry.project,
|
|
3961
|
+
filter,
|
|
3962
|
+
})) {
|
|
3963
|
+
continue;
|
|
3964
|
+
}
|
|
3965
|
+
matchedEntries.push(entry);
|
|
3966
|
+
if (matchedEntries.length > limit) {
|
|
3967
|
+
break;
|
|
3968
|
+
}
|
|
3969
|
+
}
|
|
3897
3970
|
}
|
|
3898
|
-
const
|
|
3899
|
-
const
|
|
3900
|
-
const hasMore = entries.length > limit;
|
|
3971
|
+
const pagedEntries = matchedEntries.slice(0, limit);
|
|
3972
|
+
const hasMore = matchedEntries.length > limit;
|
|
3901
3973
|
const nextCursor = hasMore && pagedEntries.length > 0
|
|
3902
3974
|
? this.encodeFetchAgentsCursor(pagedEntries[pagedEntries.length - 1], sort)
|
|
3903
3975
|
: null;
|
|
@@ -3969,7 +4041,7 @@ export class Session {
|
|
|
3969
4041
|
if (!resolved.ok) {
|
|
3970
4042
|
this.emit({
|
|
3971
4043
|
type: 'fetch_agent_response',
|
|
3972
|
-
payload: { requestId, agent: null, error: resolved.error },
|
|
4044
|
+
payload: { requestId, agent: null, project: null, error: resolved.error },
|
|
3973
4045
|
});
|
|
3974
4046
|
return;
|
|
3975
4047
|
}
|
|
@@ -3977,13 +4049,19 @@ export class Session {
|
|
|
3977
4049
|
if (!agent) {
|
|
3978
4050
|
this.emit({
|
|
3979
4051
|
type: 'fetch_agent_response',
|
|
3980
|
-
payload: {
|
|
4052
|
+
payload: {
|
|
4053
|
+
requestId,
|
|
4054
|
+
agent: null,
|
|
4055
|
+
project: null,
|
|
4056
|
+
error: `Agent not found: ${resolved.agentId}`,
|
|
4057
|
+
},
|
|
3981
4058
|
});
|
|
3982
4059
|
return;
|
|
3983
4060
|
}
|
|
4061
|
+
const project = await this.buildProjectPlacement(agent.cwd);
|
|
3984
4062
|
this.emit({
|
|
3985
4063
|
type: 'fetch_agent_response',
|
|
3986
|
-
payload: { requestId, agent, error: null },
|
|
4064
|
+
payload: { requestId, agent, project, error: null },
|
|
3987
4065
|
});
|
|
3988
4066
|
}
|
|
3989
4067
|
async handleFetchAgentTimelineRequest(msg) {
|
|
@@ -4069,6 +4147,19 @@ export class Session {
|
|
|
4069
4147
|
}
|
|
4070
4148
|
try {
|
|
4071
4149
|
const agentId = resolved.agentId;
|
|
4150
|
+
const archivedAt = await this.getArchivedAt(agentId);
|
|
4151
|
+
if (archivedAt) {
|
|
4152
|
+
this.emit({
|
|
4153
|
+
type: 'send_agent_message_response',
|
|
4154
|
+
payload: {
|
|
4155
|
+
requestId: msg.requestId,
|
|
4156
|
+
agentId,
|
|
4157
|
+
accepted: false,
|
|
4158
|
+
error: `Agent ${agentId} is archived`,
|
|
4159
|
+
},
|
|
4160
|
+
});
|
|
4161
|
+
return;
|
|
4162
|
+
}
|
|
4072
4163
|
await this.ensureAgentLoaded(agentId);
|
|
4073
4164
|
await this.interruptAgentIfRunning(agentId);
|
|
4074
4165
|
try {
|
|
@@ -4193,14 +4284,14 @@ export class Session {
|
|
|
4193
4284
|
abortController.abort('timeout');
|
|
4194
4285
|
}, effectiveTimeoutMs);
|
|
4195
4286
|
try {
|
|
4196
|
-
|
|
4287
|
+
let result = await this.agentManager.waitForAgentEvent(agentId, {
|
|
4197
4288
|
signal: abortController.signal,
|
|
4198
4289
|
});
|
|
4199
|
-
|
|
4290
|
+
let final = await this.getAgentPayloadById(agentId);
|
|
4200
4291
|
if (!final) {
|
|
4201
4292
|
throw new Error(`Agent ${agentId} disappeared while waiting`);
|
|
4202
4293
|
}
|
|
4203
|
-
|
|
4294
|
+
let status = result.permission ? 'permission' : result.status === 'error' ? 'error' : 'idle';
|
|
4204
4295
|
this.emit({
|
|
4205
4296
|
type: 'wait_for_finish_response',
|
|
4206
4297
|
payload: { requestId, status, final, error: null, lastMessage: result.lastMessage },
|