@dexto/core 1.9.2 → 1.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/context/error-codes.cjs +1 -0
- package/dist/context/error-codes.d.ts +1 -0
- package/dist/context/error-codes.d.ts.map +1 -1
- package/dist/context/error-codes.js +1 -0
- package/dist/context/errors.cjs +10 -0
- package/dist/context/errors.d.ts +1 -0
- package/dist/context/errors.d.ts.map +1 -1
- package/dist/context/errors.js +10 -0
- package/dist/context/manager.cjs +66 -24
- package/dist/context/manager.d.ts +27 -17
- package/dist/context/manager.d.ts.map +1 -1
- package/dist/context/manager.js +66 -24
- package/dist/llm/executor/model-request-diagnostics.cjs +286 -0
- package/dist/llm/executor/model-request-diagnostics.d.ts +63 -0
- package/dist/llm/executor/model-request-diagnostics.d.ts.map +1 -0
- package/dist/llm/executor/model-request-diagnostics.js +262 -0
- package/dist/llm/executor/stream-processor.cjs +8 -13
- package/dist/llm/executor/stream-processor.d.ts +0 -1
- package/dist/llm/executor/stream-processor.d.ts.map +1 -1
- package/dist/llm/executor/stream-processor.js +8 -13
- package/dist/llm/executor/turn-executor.cjs +48 -12
- package/dist/llm/executor/turn-executor.d.ts +1 -1
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.js +51 -12
- package/dist/storage/conversation/database.cjs +15 -0
- package/dist/storage/conversation/database.d.ts +4 -1
- package/dist/storage/conversation/database.d.ts.map +1 -1
- package/dist/storage/conversation/database.js +15 -0
- package/dist/storage/conversation/types.d.ts +12 -0
- package/dist/storage/conversation/types.d.ts.map +1 -1
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/stores/in-memory.cjs +15 -0
- package/dist/storage/stores/in-memory.d.ts.map +1 -1
- package/dist/storage/stores/in-memory.js +15 -0
- package/package.json +2 -2
|
@@ -125,11 +125,13 @@ class StreamProcessor {
|
|
|
125
125
|
setStreamAttribute("last_delta_received_ms", lastDeltaReceivedAtMs);
|
|
126
126
|
setStreamAttribute("last_delta_kind", "text");
|
|
127
127
|
if (!this.assistantMessageId) {
|
|
128
|
-
this.assistantMessageId = await this.contextManager.addAssistantMessage(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
128
|
+
this.assistantMessageId = await this.contextManager.addAssistantMessage(
|
|
129
|
+
"",
|
|
130
|
+
[],
|
|
131
|
+
{
|
|
132
|
+
assistantOutput: { status: "draft" }
|
|
133
|
+
}
|
|
134
|
+
);
|
|
133
135
|
}
|
|
134
136
|
await this.contextManager.appendAssistantText(
|
|
135
137
|
this.assistantMessageId,
|
|
@@ -543,16 +545,9 @@ class StreamProcessor {
|
|
|
543
545
|
this.reasoningMetadata = merged;
|
|
544
546
|
}
|
|
545
547
|
async createAssistantMessage() {
|
|
546
|
-
|
|
548
|
+
return this.contextManager.addAssistantMessage("", [], {
|
|
547
549
|
assistantOutput: { status: "draft" }
|
|
548
550
|
});
|
|
549
|
-
return this.getLastMessageId();
|
|
550
|
-
}
|
|
551
|
-
async getLastMessageId() {
|
|
552
|
-
const history = await this.contextManager.getHistory();
|
|
553
|
-
const last = history[history.length - 1];
|
|
554
|
-
if (!last || !last.id) throw new Error("Failed to get last message ID");
|
|
555
|
-
return last.id;
|
|
556
551
|
}
|
|
557
552
|
/**
|
|
558
553
|
* Persist synthetic "cancelled" results for all pending tool calls.
|
|
@@ -47,6 +47,7 @@ var import_provider_error = require("./provider-error.js");
|
|
|
47
47
|
var import_error_conversion = require("../../utils/error-conversion.js");
|
|
48
48
|
var import_codex_base_url = require("../providers/codex-base-url.js");
|
|
49
49
|
var import_tool_definitions = require("./tool-definitions.js");
|
|
50
|
+
var import_model_request_diagnostics = require("./model-request-diagnostics.js");
|
|
50
51
|
var import_types3 = require("../../approval/types.js");
|
|
51
52
|
var import_content_audit = require("../../context/content-audit.js");
|
|
52
53
|
var import_content_clone = require("../../context/content-clone.js");
|
|
@@ -966,7 +967,7 @@ class TurnExecutor {
|
|
|
966
967
|
() => this.contextManager.getSystemPrompt(input.contributorContext),
|
|
967
968
|
this.logger
|
|
968
969
|
);
|
|
969
|
-
let { preparedHistory, formattedMessages } = await (0, import_operation_span.recordOperationSpan)(
|
|
970
|
+
let { preparedHistory, preparedHistoryStats, formattedMessages } = await (0, import_operation_span.recordOperationSpan)(
|
|
970
971
|
{
|
|
971
972
|
name: "context.build_messages",
|
|
972
973
|
componentName: "TurnExecutor",
|
|
@@ -976,14 +977,19 @@ class TurnExecutor {
|
|
|
976
977
|
}
|
|
977
978
|
},
|
|
978
979
|
async () => {
|
|
979
|
-
const
|
|
980
|
+
const preparedHistoryResult = await this.contextManager.prepareModelHistory();
|
|
981
|
+
const preparedHistory2 = preparedHistoryResult.preparedHistory;
|
|
980
982
|
const formattedMessages2 = await this.contextManager.getFormattedMessages(
|
|
981
983
|
input.contributorContext,
|
|
982
984
|
this.llmContext,
|
|
983
985
|
systemPrompt,
|
|
984
986
|
preparedHistory2
|
|
985
987
|
);
|
|
986
|
-
return {
|
|
988
|
+
return {
|
|
989
|
+
preparedHistory: preparedHistory2,
|
|
990
|
+
preparedHistoryStats: preparedHistoryResult.stats,
|
|
991
|
+
formattedMessages: formattedMessages2
|
|
992
|
+
};
|
|
987
993
|
},
|
|
988
994
|
this.logger
|
|
989
995
|
);
|
|
@@ -1047,7 +1053,7 @@ class TurnExecutor {
|
|
|
1047
1053
|
() => this.contextManager.getSystemPrompt(input.contributorContext),
|
|
1048
1054
|
this.logger
|
|
1049
1055
|
);
|
|
1050
|
-
({ preparedHistory, formattedMessages } = await (0, import_operation_span.recordOperationSpan)(
|
|
1056
|
+
({ preparedHistory, preparedHistoryStats, formattedMessages } = await (0, import_operation_span.recordOperationSpan)(
|
|
1051
1057
|
{
|
|
1052
1058
|
name: "context.build_messages",
|
|
1053
1059
|
componentName: "TurnExecutor",
|
|
@@ -1058,14 +1064,19 @@ class TurnExecutor {
|
|
|
1058
1064
|
}
|
|
1059
1065
|
},
|
|
1060
1066
|
async () => {
|
|
1061
|
-
const
|
|
1067
|
+
const preparedHistoryResult = await this.contextManager.prepareModelHistory();
|
|
1068
|
+
const preparedHistory2 = preparedHistoryResult.preparedHistory;
|
|
1062
1069
|
const formattedMessages2 = await this.contextManager.getFormattedMessages(
|
|
1063
1070
|
input.contributorContext,
|
|
1064
1071
|
this.llmContext,
|
|
1065
1072
|
systemPrompt,
|
|
1066
1073
|
preparedHistory2
|
|
1067
1074
|
);
|
|
1068
|
-
return {
|
|
1075
|
+
return {
|
|
1076
|
+
preparedHistory: preparedHistory2,
|
|
1077
|
+
preparedHistoryStats: preparedHistoryResult.stats,
|
|
1078
|
+
formattedMessages: formattedMessages2
|
|
1079
|
+
};
|
|
1069
1080
|
},
|
|
1070
1081
|
this.logger
|
|
1071
1082
|
));
|
|
@@ -1124,6 +1135,30 @@ class TurnExecutor {
|
|
|
1124
1135
|
...reasoningVariant !== void 0 && { reasoningVariant },
|
|
1125
1136
|
...reasoningBudgetTokens !== void 0 && { reasoningBudgetTokens }
|
|
1126
1137
|
} : void 0;
|
|
1138
|
+
const requestProviderOptions = providerOptions;
|
|
1139
|
+
const requestDiagnostics = (0, import_model_request_diagnostics.createModelRequestDiagnostics)({
|
|
1140
|
+
compacted,
|
|
1141
|
+
estimatedInputTokens,
|
|
1142
|
+
formattedMessages,
|
|
1143
|
+
model: this.llmContext.model,
|
|
1144
|
+
preparedHistoryCount: preparedHistory.length,
|
|
1145
|
+
preparedHistoryStats,
|
|
1146
|
+
provider: this.llmContext.provider,
|
|
1147
|
+
providerOptions: requestProviderOptions,
|
|
1148
|
+
reasoning,
|
|
1149
|
+
streaming: input.streaming,
|
|
1150
|
+
systemPrompt,
|
|
1151
|
+
toolDefinitions
|
|
1152
|
+
});
|
|
1153
|
+
await (0, import_operation_span.recordOperationSpan)(
|
|
1154
|
+
{
|
|
1155
|
+
name: "llm.request_diagnostics",
|
|
1156
|
+
componentName: "TurnExecutor",
|
|
1157
|
+
attributes: (0, import_model_request_diagnostics.modelRequestDiagnosticAttributes)(requestDiagnostics)
|
|
1158
|
+
},
|
|
1159
|
+
() => void 0,
|
|
1160
|
+
this.logger
|
|
1161
|
+
);
|
|
1127
1162
|
this.logger.info("Model request context prepared", {
|
|
1128
1163
|
sessionId: this.sessionId,
|
|
1129
1164
|
provider: this.llmContext.provider,
|
|
@@ -1134,6 +1169,7 @@ class TurnExecutor {
|
|
|
1134
1169
|
formattedMessageCount: formattedMessages.length,
|
|
1135
1170
|
preparedHistoryCount: preparedHistory.length,
|
|
1136
1171
|
compacted,
|
|
1172
|
+
requestDiagnostics,
|
|
1137
1173
|
...this.runContext?.hostRuntime?.ids !== void 0 && {
|
|
1138
1174
|
hostRuntimeIds: this.runContext.hostRuntime.ids
|
|
1139
1175
|
},
|
|
@@ -1145,7 +1181,7 @@ class TurnExecutor {
|
|
|
1145
1181
|
toolDefinitions,
|
|
1146
1182
|
estimatedInputTokens,
|
|
1147
1183
|
reasoning,
|
|
1148
|
-
providerOptions,
|
|
1184
|
+
providerOptions: requestProviderOptions,
|
|
1149
1185
|
streaming: input.streaming
|
|
1150
1186
|
};
|
|
1151
1187
|
}
|
|
@@ -1218,11 +1254,11 @@ class TurnExecutor {
|
|
|
1218
1254
|
}
|
|
1219
1255
|
async runModelStepWithRetry(request) {
|
|
1220
1256
|
for (let failedAttempts = 0; ; failedAttempts += 1) {
|
|
1221
|
-
const historyLengthBefore = (await this.contextManager.
|
|
1257
|
+
const historyLengthBefore = (await this.contextManager.getModelHistory()).length;
|
|
1222
1258
|
try {
|
|
1223
1259
|
return await this.runModelStep(request);
|
|
1224
1260
|
} catch (error) {
|
|
1225
|
-
const historyLengthAfter = (await this.contextManager.
|
|
1261
|
+
const historyLengthAfter = (await this.contextManager.getModelHistory()).length;
|
|
1226
1262
|
const historyLengthChanged = historyLengthAfter !== historyLengthBefore;
|
|
1227
1263
|
if (!this.canRetryModelRequest(error, historyLengthChanged) || failedAttempts >= MODEL_REQUEST_MAX_RETRIES) {
|
|
1228
1264
|
throw error;
|
|
@@ -1664,7 +1700,7 @@ class TurnExecutor {
|
|
|
1664
1700
|
/**
|
|
1665
1701
|
* Prunes old tool outputs by marking them with compactedAt timestamp.
|
|
1666
1702
|
* Does NOT modify content - transformation happens at format time in
|
|
1667
|
-
* ContextManager.
|
|
1703
|
+
* ContextManager.prepareModelHistory().
|
|
1668
1704
|
*
|
|
1669
1705
|
* Algorithm:
|
|
1670
1706
|
* 1. Go backwards through history (most recent first)
|
|
@@ -1674,7 +1710,7 @@ class TurnExecutor {
|
|
|
1674
1710
|
* 5. Only prune if savings exceed PRUNE_MINIMUM
|
|
1675
1711
|
*/
|
|
1676
1712
|
async pruneOldToolOutputs() {
|
|
1677
|
-
const history = await this.contextManager.
|
|
1713
|
+
const history = await this.contextManager.getModelHistory();
|
|
1678
1714
|
let totalToolTokens = 0;
|
|
1679
1715
|
let prunedTokens = 0;
|
|
1680
1716
|
const toPrune = [];
|
|
@@ -1776,7 +1812,7 @@ class TurnExecutor {
|
|
|
1776
1812
|
this.logger.info(
|
|
1777
1813
|
`Context overflow detected (${originalTokens} tokens), checking if compression is possible`
|
|
1778
1814
|
);
|
|
1779
|
-
const history = await this.contextManager.
|
|
1815
|
+
const history = await this.contextManager.getModelHistory();
|
|
1780
1816
|
const { filterCompacted } = await import("../../context/utils.js");
|
|
1781
1817
|
const originalFiltered = filterCompacted(history);
|
|
1782
1818
|
const originalMessages = originalFiltered.length;
|
|
@@ -354,7 +354,7 @@ export declare class TurnExecutor {
|
|
|
354
354
|
/**
|
|
355
355
|
* Prunes old tool outputs by marking them with compactedAt timestamp.
|
|
356
356
|
* Does NOT modify content - transformation happens at format time in
|
|
357
|
-
* ContextManager.
|
|
357
|
+
* ContextManager.prepareModelHistory().
|
|
358
358
|
*
|
|
359
359
|
* Algorithm:
|
|
360
360
|
* 1. Go backwards through history (most recent first)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-executor.d.ts","sourceRoot":"","sources":["../../../src/llm/executor/turn-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EAMb,KAAK,YAAY,EAEpB,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAa,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAS1D,OAAO,EACH,WAAW,EAId,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAMpD,OAAO,KAAK,EAAE,cAAc,EAAiB,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEvF,OAAO,KAAK,EACR,UAAU,EACV,kBAAkB,EAClB,UAAU,EAGb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAIxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAQ1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAExE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"turn-executor.d.ts","sourceRoot":"","sources":["../../../src/llm/executor/turn-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,10 @@ import {
|
|
|
21
21
|
import { toError } from "../../utils/error-conversion.js";
|
|
22
22
|
import { isCodexBaseURL } from "../providers/codex-base-url.js";
|
|
23
23
|
import { createModelToolDefinitions } from "./tool-definitions.js";
|
|
24
|
+
import {
|
|
25
|
+
createModelRequestDiagnostics,
|
|
26
|
+
modelRequestDiagnosticAttributes
|
|
27
|
+
} from "./model-request-diagnostics.js";
|
|
24
28
|
import { ApprovalStatus } from "../../approval/types.js";
|
|
25
29
|
import {
|
|
26
30
|
describeContentPartsForAudit,
|
|
@@ -943,7 +947,7 @@ class TurnExecutor {
|
|
|
943
947
|
() => this.contextManager.getSystemPrompt(input.contributorContext),
|
|
944
948
|
this.logger
|
|
945
949
|
);
|
|
946
|
-
let { preparedHistory, formattedMessages } = await recordOperationSpan(
|
|
950
|
+
let { preparedHistory, preparedHistoryStats, formattedMessages } = await recordOperationSpan(
|
|
947
951
|
{
|
|
948
952
|
name: "context.build_messages",
|
|
949
953
|
componentName: "TurnExecutor",
|
|
@@ -953,14 +957,19 @@ class TurnExecutor {
|
|
|
953
957
|
}
|
|
954
958
|
},
|
|
955
959
|
async () => {
|
|
956
|
-
const
|
|
960
|
+
const preparedHistoryResult = await this.contextManager.prepareModelHistory();
|
|
961
|
+
const preparedHistory2 = preparedHistoryResult.preparedHistory;
|
|
957
962
|
const formattedMessages2 = await this.contextManager.getFormattedMessages(
|
|
958
963
|
input.contributorContext,
|
|
959
964
|
this.llmContext,
|
|
960
965
|
systemPrompt,
|
|
961
966
|
preparedHistory2
|
|
962
967
|
);
|
|
963
|
-
return {
|
|
968
|
+
return {
|
|
969
|
+
preparedHistory: preparedHistory2,
|
|
970
|
+
preparedHistoryStats: preparedHistoryResult.stats,
|
|
971
|
+
formattedMessages: formattedMessages2
|
|
972
|
+
};
|
|
964
973
|
},
|
|
965
974
|
this.logger
|
|
966
975
|
);
|
|
@@ -1024,7 +1033,7 @@ class TurnExecutor {
|
|
|
1024
1033
|
() => this.contextManager.getSystemPrompt(input.contributorContext),
|
|
1025
1034
|
this.logger
|
|
1026
1035
|
);
|
|
1027
|
-
({ preparedHistory, formattedMessages } = await recordOperationSpan(
|
|
1036
|
+
({ preparedHistory, preparedHistoryStats, formattedMessages } = await recordOperationSpan(
|
|
1028
1037
|
{
|
|
1029
1038
|
name: "context.build_messages",
|
|
1030
1039
|
componentName: "TurnExecutor",
|
|
@@ -1035,14 +1044,19 @@ class TurnExecutor {
|
|
|
1035
1044
|
}
|
|
1036
1045
|
},
|
|
1037
1046
|
async () => {
|
|
1038
|
-
const
|
|
1047
|
+
const preparedHistoryResult = await this.contextManager.prepareModelHistory();
|
|
1048
|
+
const preparedHistory2 = preparedHistoryResult.preparedHistory;
|
|
1039
1049
|
const formattedMessages2 = await this.contextManager.getFormattedMessages(
|
|
1040
1050
|
input.contributorContext,
|
|
1041
1051
|
this.llmContext,
|
|
1042
1052
|
systemPrompt,
|
|
1043
1053
|
preparedHistory2
|
|
1044
1054
|
);
|
|
1045
|
-
return {
|
|
1055
|
+
return {
|
|
1056
|
+
preparedHistory: preparedHistory2,
|
|
1057
|
+
preparedHistoryStats: preparedHistoryResult.stats,
|
|
1058
|
+
formattedMessages: formattedMessages2
|
|
1059
|
+
};
|
|
1046
1060
|
},
|
|
1047
1061
|
this.logger
|
|
1048
1062
|
));
|
|
@@ -1101,6 +1115,30 @@ class TurnExecutor {
|
|
|
1101
1115
|
...reasoningVariant !== void 0 && { reasoningVariant },
|
|
1102
1116
|
...reasoningBudgetTokens !== void 0 && { reasoningBudgetTokens }
|
|
1103
1117
|
} : void 0;
|
|
1118
|
+
const requestProviderOptions = providerOptions;
|
|
1119
|
+
const requestDiagnostics = createModelRequestDiagnostics({
|
|
1120
|
+
compacted,
|
|
1121
|
+
estimatedInputTokens,
|
|
1122
|
+
formattedMessages,
|
|
1123
|
+
model: this.llmContext.model,
|
|
1124
|
+
preparedHistoryCount: preparedHistory.length,
|
|
1125
|
+
preparedHistoryStats,
|
|
1126
|
+
provider: this.llmContext.provider,
|
|
1127
|
+
providerOptions: requestProviderOptions,
|
|
1128
|
+
reasoning,
|
|
1129
|
+
streaming: input.streaming,
|
|
1130
|
+
systemPrompt,
|
|
1131
|
+
toolDefinitions
|
|
1132
|
+
});
|
|
1133
|
+
await recordOperationSpan(
|
|
1134
|
+
{
|
|
1135
|
+
name: "llm.request_diagnostics",
|
|
1136
|
+
componentName: "TurnExecutor",
|
|
1137
|
+
attributes: modelRequestDiagnosticAttributes(requestDiagnostics)
|
|
1138
|
+
},
|
|
1139
|
+
() => void 0,
|
|
1140
|
+
this.logger
|
|
1141
|
+
);
|
|
1104
1142
|
this.logger.info("Model request context prepared", {
|
|
1105
1143
|
sessionId: this.sessionId,
|
|
1106
1144
|
provider: this.llmContext.provider,
|
|
@@ -1111,6 +1149,7 @@ class TurnExecutor {
|
|
|
1111
1149
|
formattedMessageCount: formattedMessages.length,
|
|
1112
1150
|
preparedHistoryCount: preparedHistory.length,
|
|
1113
1151
|
compacted,
|
|
1152
|
+
requestDiagnostics,
|
|
1114
1153
|
...this.runContext?.hostRuntime?.ids !== void 0 && {
|
|
1115
1154
|
hostRuntimeIds: this.runContext.hostRuntime.ids
|
|
1116
1155
|
},
|
|
@@ -1122,7 +1161,7 @@ class TurnExecutor {
|
|
|
1122
1161
|
toolDefinitions,
|
|
1123
1162
|
estimatedInputTokens,
|
|
1124
1163
|
reasoning,
|
|
1125
|
-
providerOptions,
|
|
1164
|
+
providerOptions: requestProviderOptions,
|
|
1126
1165
|
streaming: input.streaming
|
|
1127
1166
|
};
|
|
1128
1167
|
}
|
|
@@ -1195,11 +1234,11 @@ class TurnExecutor {
|
|
|
1195
1234
|
}
|
|
1196
1235
|
async runModelStepWithRetry(request) {
|
|
1197
1236
|
for (let failedAttempts = 0; ; failedAttempts += 1) {
|
|
1198
|
-
const historyLengthBefore = (await this.contextManager.
|
|
1237
|
+
const historyLengthBefore = (await this.contextManager.getModelHistory()).length;
|
|
1199
1238
|
try {
|
|
1200
1239
|
return await this.runModelStep(request);
|
|
1201
1240
|
} catch (error) {
|
|
1202
|
-
const historyLengthAfter = (await this.contextManager.
|
|
1241
|
+
const historyLengthAfter = (await this.contextManager.getModelHistory()).length;
|
|
1203
1242
|
const historyLengthChanged = historyLengthAfter !== historyLengthBefore;
|
|
1204
1243
|
if (!this.canRetryModelRequest(error, historyLengthChanged) || failedAttempts >= MODEL_REQUEST_MAX_RETRIES) {
|
|
1205
1244
|
throw error;
|
|
@@ -1641,7 +1680,7 @@ class TurnExecutor {
|
|
|
1641
1680
|
/**
|
|
1642
1681
|
* Prunes old tool outputs by marking them with compactedAt timestamp.
|
|
1643
1682
|
* Does NOT modify content - transformation happens at format time in
|
|
1644
|
-
* ContextManager.
|
|
1683
|
+
* ContextManager.prepareModelHistory().
|
|
1645
1684
|
*
|
|
1646
1685
|
* Algorithm:
|
|
1647
1686
|
* 1. Go backwards through history (most recent first)
|
|
@@ -1651,7 +1690,7 @@ class TurnExecutor {
|
|
|
1651
1690
|
* 5. Only prune if savings exceed PRUNE_MINIMUM
|
|
1652
1691
|
*/
|
|
1653
1692
|
async pruneOldToolOutputs() {
|
|
1654
|
-
const history = await this.contextManager.
|
|
1693
|
+
const history = await this.contextManager.getModelHistory();
|
|
1655
1694
|
let totalToolTokens = 0;
|
|
1656
1695
|
let prunedTokens = 0;
|
|
1657
1696
|
const toPrune = [];
|
|
@@ -1753,7 +1792,7 @@ class TurnExecutor {
|
|
|
1753
1792
|
this.logger.info(
|
|
1754
1793
|
`Context overflow detected (${originalTokens} tokens), checking if compression is possible`
|
|
1755
1794
|
);
|
|
1756
|
-
const history = await this.contextManager.
|
|
1795
|
+
const history = await this.contextManager.getModelHistory();
|
|
1757
1796
|
const { filterCompacted } = await import("../../context/utils.js");
|
|
1758
1797
|
const originalFiltered = filterCompacted(history);
|
|
1759
1798
|
const originalMessages = originalFiltered.length;
|
|
@@ -22,6 +22,7 @@ __export(database_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(database_exports);
|
|
24
24
|
var import_content_clone = require("../../context/content-clone.js");
|
|
25
|
+
var import_utils = require("../../context/utils.js");
|
|
25
26
|
var import_types = require("../../logger/v2/types.js");
|
|
26
27
|
var import_errors = require("../errors.js");
|
|
27
28
|
class DatabaseConversationStore {
|
|
@@ -37,6 +38,20 @@ class DatabaseConversationStore {
|
|
|
37
38
|
const state = await this.loadState(input.sessionId);
|
|
38
39
|
return (0, import_content_clone.cloneInternalMessages)(state.cache ?? []);
|
|
39
40
|
}
|
|
41
|
+
async loadModelHistory(input) {
|
|
42
|
+
const fullHistory = await this.listMessages(input);
|
|
43
|
+
const messages = (0, import_utils.filterCompacted)(fullHistory);
|
|
44
|
+
const firstMessage = messages[0];
|
|
45
|
+
const summaryMessageId = firstMessage?.metadata?.isSummary === true || firstMessage?.metadata?.isSessionSummary === true ? firstMessage.id ?? null : null;
|
|
46
|
+
return {
|
|
47
|
+
messages,
|
|
48
|
+
stats: {
|
|
49
|
+
returnedMessages: messages.length,
|
|
50
|
+
skippedPreSummaryMessages: fullHistory.length - messages.length,
|
|
51
|
+
summaryMessageId
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
40
55
|
async saveMessage(input) {
|
|
41
56
|
const state = await this.loadState(input.sessionId);
|
|
42
57
|
const cache = state.cache ?? [];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { InternalMessage } from '../../context/types.js';
|
|
2
2
|
import type { Logger } from '../../logger/v2/types.js';
|
|
3
3
|
import type { Database } from '../database/types.js';
|
|
4
|
-
import type { ConversationStore } from './types.js';
|
|
4
|
+
import type { ConversationStore, ModelHistoryLoad } from './types.js';
|
|
5
5
|
export declare class DatabaseConversationStore implements ConversationStore {
|
|
6
6
|
private readonly database;
|
|
7
7
|
private readonly logger;
|
|
@@ -12,6 +12,9 @@ export declare class DatabaseConversationStore implements ConversationStore {
|
|
|
12
12
|
listMessages(input: {
|
|
13
13
|
sessionId: string;
|
|
14
14
|
}): Promise<InternalMessage[]>;
|
|
15
|
+
loadModelHistory(input: {
|
|
16
|
+
sessionId: string;
|
|
17
|
+
}): Promise<ModelHistoryLoad>;
|
|
15
18
|
saveMessage(input: {
|
|
16
19
|
sessionId: string;
|
|
17
20
|
message: InternalMessage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/storage/conversation/database.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/storage/conversation/database.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAStE,qBAAa,yBAA0B,YAAW,iBAAiB;IAQ3D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAP7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;IAEtE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAO;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGtB,QAAQ,EAAE,QAAQ,EACnC,MAAM,EAAE,MAAM;IAKZ,YAAY,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAKtE,gBAAgB,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmBzE,WAAW,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlF,aAAa,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBpF,aAAa,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB1D,KAAK,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAoB1C,SAAS;IA4BvB,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,cAAc;YA6BR,UAAU;IAuBxB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,YAAY;CAGvB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import "../../chunk-C6A6W6XS.js";
|
|
2
2
|
import { cloneInternalMessage, cloneInternalMessages } from "../../context/content-clone.js";
|
|
3
|
+
import { filterCompacted } from "../../context/utils.js";
|
|
3
4
|
import { DextoLogComponent } from "../../logger/v2/types.js";
|
|
4
5
|
import { StorageError } from "../errors.js";
|
|
5
6
|
class DatabaseConversationStore {
|
|
@@ -15,6 +16,20 @@ class DatabaseConversationStore {
|
|
|
15
16
|
const state = await this.loadState(input.sessionId);
|
|
16
17
|
return cloneInternalMessages(state.cache ?? []);
|
|
17
18
|
}
|
|
19
|
+
async loadModelHistory(input) {
|
|
20
|
+
const fullHistory = await this.listMessages(input);
|
|
21
|
+
const messages = filterCompacted(fullHistory);
|
|
22
|
+
const firstMessage = messages[0];
|
|
23
|
+
const summaryMessageId = firstMessage?.metadata?.isSummary === true || firstMessage?.metadata?.isSessionSummary === true ? firstMessage.id ?? null : null;
|
|
24
|
+
return {
|
|
25
|
+
messages,
|
|
26
|
+
stats: {
|
|
27
|
+
returnedMessages: messages.length,
|
|
28
|
+
skippedPreSummaryMessages: fullHistory.length - messages.length,
|
|
29
|
+
summaryMessageId
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
18
33
|
async saveMessage(input) {
|
|
19
34
|
const state = await this.loadState(input.sessionId);
|
|
20
35
|
const cache = state.cache ?? [];
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import type { InternalMessage } from '../../context/types.js';
|
|
2
|
+
export type ModelHistoryLoadStats = {
|
|
3
|
+
returnedMessages: number;
|
|
4
|
+
skippedPreSummaryMessages: number;
|
|
5
|
+
summaryMessageId: string | null;
|
|
6
|
+
};
|
|
7
|
+
export type ModelHistoryLoad = {
|
|
8
|
+
messages: InternalMessage[];
|
|
9
|
+
stats: ModelHistoryLoadStats;
|
|
10
|
+
};
|
|
2
11
|
export interface ConversationStore {
|
|
3
12
|
listMessages(input: {
|
|
4
13
|
sessionId: string;
|
|
5
14
|
}): Promise<InternalMessage[]>;
|
|
15
|
+
loadModelHistory(input: {
|
|
16
|
+
sessionId: string;
|
|
17
|
+
}): Promise<ModelHistoryLoad>;
|
|
6
18
|
saveMessage(input: {
|
|
7
19
|
sessionId: string;
|
|
8
20
|
message: InternalMessage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/conversation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAC9B,YAAY,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACvE,WAAW,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnF,aAAa,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,aAAa,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,KAAK,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/conversation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,MAAM,qBAAqB,GAAG;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,yBAAyB,EAAE,MAAM,CAAC;IAClC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,KAAK,EAAE,qBAAqB,CAAC;CAChC,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAC9B,YAAY,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACvE,gBAAgB,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC1E,WAAW,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnF,aAAa,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,aAAa,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,KAAK,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD"}
|
package/dist/storage/index.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export { BackendDextoStores, DatabaseBackedApprovalStore, DatabaseBackedArtifact
|
|
|
14
14
|
export type { DextoStoresLifecycle } from './stores/backend.js';
|
|
15
15
|
export type { DextoStoreMap, DextoStoreName, DextoStores } from './stores/types.js';
|
|
16
16
|
export { DatabaseConversationStore } from './conversation/database.js';
|
|
17
|
-
export type { ConversationStore } from './conversation/types.js';
|
|
17
|
+
export type { ConversationStore, ModelHistoryLoad, ModelHistoryLoadStats, } from './conversation/types.js';
|
|
18
18
|
export type { SessionStore } from './sessions/types.js';
|
|
19
19
|
export type { MemoryStore } from './memories/types.js';
|
|
20
20
|
export type { WorkspaceStore } from './workspaces/types.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACR,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,SAAS,GACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACH,kBAAkB,EAClB,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAC/B,sCAAsC,EACtC,0BAA0B,EAC1B,gCAAgC,EAChC,iCAAiC,EACjC,4BAA4B,EAC5B,4BAA4B,EAC5B,kCAAkC,EAClC,8BAA8B,GACjC,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACR,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,SAAS,GACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACH,kBAAkB,EAClB,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAC/B,sCAAsC,EACtC,0BAA0B,EAC1B,gCAAgC,EAChC,iCAAiC,EACjC,4BAA4B,EAC5B,4BAA4B,EAC5B,kCAAkC,EAClC,8BAA8B,GACjC,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,YAAY,EACR,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACxB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAChF,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,YAAY,EACR,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,sBAAsB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACvF,YAAY,EACR,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,kBAAkB,GACrB,MAAM,4BAA4B,CAAC"}
|
|
@@ -23,6 +23,7 @@ __export(in_memory_exports, {
|
|
|
23
23
|
module.exports = __toCommonJS(in_memory_exports);
|
|
24
24
|
var import_crypto = require("crypto");
|
|
25
25
|
var import_content_clone = require("../../context/content-clone.js");
|
|
26
|
+
var import_utils = require("../../context/utils.js");
|
|
26
27
|
var import_queue_clone = require("../../session/queue-clone.js");
|
|
27
28
|
var import_types = require("../tool-executions/types.js");
|
|
28
29
|
var import_errors = require("../errors.js");
|
|
@@ -39,6 +40,20 @@ class InMemoryConversationStore {
|
|
|
39
40
|
async listMessages(input) {
|
|
40
41
|
return (0, import_content_clone.cloneInternalMessages)(this.messages.get(input.sessionId) ?? []);
|
|
41
42
|
}
|
|
43
|
+
async loadModelHistory(input) {
|
|
44
|
+
const fullHistory = await this.listMessages(input);
|
|
45
|
+
const messages = (0, import_utils.filterCompacted)(fullHistory);
|
|
46
|
+
const firstMessage = messages[0];
|
|
47
|
+
const summaryMessageId = firstMessage?.metadata?.isSummary === true || firstMessage?.metadata?.isSessionSummary === true ? firstMessage.id ?? null : null;
|
|
48
|
+
return {
|
|
49
|
+
messages,
|
|
50
|
+
stats: {
|
|
51
|
+
returnedMessages: messages.length,
|
|
52
|
+
skippedPreSummaryMessages: fullHistory.length - messages.length,
|
|
53
|
+
summaryMessageId
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
42
57
|
async saveMessage(input) {
|
|
43
58
|
const messages = this.messages.get(input.sessionId) ?? [];
|
|
44
59
|
if (input.message.id && messages.some((message) => message.id === input.message.id)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/storage/stores/in-memory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/storage/stores/in-memory.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA8mB7E,qBAAa,mBAAoB,YAAW,WAAW;IACnD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAcrB;IAEF,QAAQ,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;IAIvD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,WAAW,IAAI,OAAO;IAItB,YAAY,IAAI,MAAM;CAGzB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import "../../chunk-C6A6W6XS.js";
|
|
2
2
|
import { createHash, randomUUID } from "crypto";
|
|
3
3
|
import { cloneInternalMessage, cloneInternalMessages } from "../../context/content-clone.js";
|
|
4
|
+
import { filterCompacted } from "../../context/utils.js";
|
|
4
5
|
import { cloneQueuedMessage, cloneQueuedMessages } from "../../session/queue-clone.js";
|
|
5
6
|
import { splitToolExecutionResult } from "../tool-executions/types.js";
|
|
6
7
|
import { StorageError } from "../errors.js";
|
|
@@ -17,6 +18,20 @@ class InMemoryConversationStore {
|
|
|
17
18
|
async listMessages(input) {
|
|
18
19
|
return cloneInternalMessages(this.messages.get(input.sessionId) ?? []);
|
|
19
20
|
}
|
|
21
|
+
async loadModelHistory(input) {
|
|
22
|
+
const fullHistory = await this.listMessages(input);
|
|
23
|
+
const messages = filterCompacted(fullHistory);
|
|
24
|
+
const firstMessage = messages[0];
|
|
25
|
+
const summaryMessageId = firstMessage?.metadata?.isSummary === true || firstMessage?.metadata?.isSessionSummary === true ? firstMessage.id ?? null : null;
|
|
26
|
+
return {
|
|
27
|
+
messages,
|
|
28
|
+
stats: {
|
|
29
|
+
returnedMessages: messages.length,
|
|
30
|
+
skippedPreSummaryMessages: fullHistory.length - messages.length,
|
|
31
|
+
summaryMessageId
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
20
35
|
async saveMessage(input) {
|
|
21
36
|
const messages = this.messages.get(input.sessionId) ?? [];
|
|
22
37
|
if (input.message.id && messages.some((message) => message.id === input.message.id)) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dexto/core",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
"nanoid": "^5.1.6",
|
|
163
163
|
"winston": "^3.17.0",
|
|
164
164
|
"yaml": "^2.8.3",
|
|
165
|
-
"@dexto/llm": "1.9.
|
|
165
|
+
"@dexto/llm": "1.9.4"
|
|
166
166
|
},
|
|
167
167
|
"devDependencies": {
|
|
168
168
|
"@opentelemetry/context-async-hooks": "^1.28.0",
|