@downcity/agent 1.1.199 → 1.1.202
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/bin/agent/local/Agent.d.ts +3 -7
- package/bin/agent/local/Agent.d.ts.map +1 -1
- package/bin/agent/local/Agent.js +14 -19
- package/bin/agent/local/Agent.js.map +1 -1
- package/bin/agent/local/services/{AgentSessionManager.d.ts → AgentSessions.d.ts} +12 -17
- package/bin/agent/local/services/AgentSessions.d.ts.map +1 -0
- package/bin/agent/local/services/{AgentSessionManager.js → AgentSessions.js} +11 -26
- package/bin/agent/local/services/AgentSessions.js.map +1 -0
- package/bin/agent/remote/RemoteAgent.d.ts +2 -9
- package/bin/agent/remote/RemoteAgent.d.ts.map +1 -1
- package/bin/agent/remote/RemoteAgent.js +40 -22
- package/bin/agent/remote/RemoteAgent.js.map +1 -1
- package/bin/agent/remote/RemoteSession.d.ts +5 -5
- package/bin/agent/remote/RemoteSession.d.ts.map +1 -1
- package/bin/agent/remote/RemoteSession.js +5 -3
- package/bin/agent/remote/RemoteSession.js.map +1 -1
- package/bin/agent/remote/RemoteTransport.d.ts +2 -2
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts +2 -2
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +5 -5
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts +2 -2
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.js +2 -2
- package/bin/executor/Executor.d.ts +7 -7
- package/bin/executor/Executor.d.ts.map +1 -1
- package/bin/executor/Executor.js +41 -33
- package/bin/executor/Executor.js.map +1 -1
- package/bin/executor/SessionRunScope.d.ts +1 -1
- package/bin/executor/SessionRunScope.d.ts.map +1 -1
- package/bin/executor/composer/compaction/SessionCompactionComposer.d.ts +5 -5
- package/bin/executor/composer/compaction/SessionCompactionComposer.d.ts.map +1 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js +1 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js.map +1 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.d.ts +4 -5
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.d.ts.map +1 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.js +73 -40
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.js.map +1 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.d.ts +27 -0
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.d.ts.map +1 -0
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.js +181 -0
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.js.map +1 -0
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.d.ts +45 -0
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.d.ts.map +1 -0
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.js +144 -0
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.js.map +1 -0
- package/bin/executor/composer/context/LocalSessionContextComposer.d.ts +3 -3
- package/bin/executor/composer/context/LocalSessionContextComposer.d.ts.map +1 -1
- package/bin/executor/composer/context/SessionContextComposer.d.ts +3 -3
- package/bin/executor/composer/context/SessionContextComposer.d.ts.map +1 -1
- package/bin/executor/composer/history/SessionHistoryComposer.d.ts +2 -2
- package/bin/executor/composer/history/SessionHistoryComposer.d.ts.map +1 -1
- package/bin/executor/composer/history/SessionHistoryWriter.d.ts +5 -5
- package/bin/executor/composer/history/SessionHistoryWriter.d.ts.map +1 -1
- package/bin/executor/composer/history/SessionHistoryWriter.js +6 -6
- package/bin/executor/composer/history/SessionHistoryWriter.js.map +1 -1
- package/bin/executor/composer/history/jsonl/JsonlSessionHistoryComposer.d.ts +2 -2
- package/bin/executor/composer/history/jsonl/JsonlSessionHistoryComposer.d.ts.map +1 -1
- package/bin/executor/composer/history/jsonl/JsonlSessionHistoryComposer.js +5 -4
- package/bin/executor/composer/history/jsonl/JsonlSessionHistoryComposer.js.map +1 -1
- package/bin/executor/core-engine/CoreEngineMessageState.d.ts +5 -5
- package/bin/executor/core-engine/CoreEngineMessageState.d.ts.map +1 -1
- package/bin/executor/core-engine/CoreEngineMessageState.js.map +1 -1
- package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -1
- package/bin/executor/core-engine/CoreEngineSignals.d.ts +4 -4
- package/bin/executor/core-engine/CoreEngineSignals.d.ts.map +1 -1
- package/bin/executor/core-engine/CoreEngineSignals.js.map +1 -1
- package/bin/executor/core-engine/CoreEngineUiStreamCollector.d.ts +3 -3
- package/bin/executor/core-engine/CoreEngineUiStreamCollector.d.ts.map +1 -1
- package/bin/executor/core-engine/CoreEngineUiStreamCollector.js.map +1 -1
- package/bin/executor/messages/AssistantResultPersistence.d.ts +5 -5
- package/bin/executor/messages/AssistantResultPersistence.d.ts.map +1 -1
- package/bin/executor/messages/AssistantResultPersistence.js +1 -1
- package/bin/executor/messages/AssistantResultPersistence.js.map +1 -1
- package/bin/executor/messages/SessionAttachmentMapper.d.ts +3 -3
- package/bin/executor/messages/SessionAttachmentMapper.d.ts.map +1 -1
- package/bin/executor/messages/SessionAttachmentMapper.js.map +1 -1
- package/bin/executor/messages/SessionMessageCodec.d.ts +4 -4
- package/bin/executor/messages/SessionMessageCodec.d.ts.map +1 -1
- package/bin/executor/messages/SessionMessageCodec.js +5 -5
- package/bin/executor/messages/SessionMessageCodec.js.map +1 -1
- package/bin/executor/messages/SessionMessageLog.d.ts +3 -3
- package/bin/executor/messages/SessionMessageLog.d.ts.map +1 -1
- package/bin/executor/messages/SessionMessageLog.js.map +1 -1
- package/bin/executor/messages/SessionStepEventMapper.d.ts +2 -2
- package/bin/executor/messages/SessionStepEventMapper.d.ts.map +1 -1
- package/bin/executor/messages/SessionStepEventMapper.js.map +1 -1
- package/bin/executor/messages/UserVisibleText.d.ts +3 -3
- package/bin/executor/messages/UserVisibleText.d.ts.map +1 -1
- package/bin/executor/messages/UserVisibleText.js +3 -3
- package/bin/executor/messages/UserVisibleText.js.map +1 -1
- package/bin/executor/services/ExecutorInflightService.d.ts +2 -2
- package/bin/executor/services/ExecutorInflightService.d.ts.map +1 -1
- package/bin/executor/services/ExecutorInflightService.js +11 -7
- package/bin/executor/services/ExecutorInflightService.js.map +1 -1
- package/bin/executor/store/history/SessionHistoryStore.d.ts +30 -27
- package/bin/executor/store/history/SessionHistoryStore.d.ts.map +1 -1
- package/bin/executor/store/history/SessionHistoryStore.js +3 -3
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts +21 -20
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts.map +1 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +114 -72
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js.map +1 -1
- package/bin/executor/tools/plugin/PluginToolDefinition.d.ts +1 -7
- package/bin/executor/tools/plugin/PluginToolDefinition.d.ts.map +1 -1
- package/bin/executor/tools/plugin/PluginToolSchemas.d.ts +4 -6
- package/bin/executor/tools/plugin/PluginToolSchemas.d.ts.map +1 -1
- package/bin/executor/tools/plugin/PluginToolSchemas.js +24 -10
- package/bin/executor/tools/plugin/PluginToolSchemas.js.map +1 -1
- package/bin/executor/types/SessionRecords.d.ts +162 -0
- package/bin/executor/types/SessionRecords.d.ts.map +1 -0
- package/bin/executor/types/SessionRecords.js +52 -0
- package/bin/executor/types/SessionRecords.js.map +1 -0
- package/bin/executor/types/SessionRun.d.ts +3 -3
- package/bin/executor/types/SessionRun.d.ts.map +1 -1
- package/bin/index.d.ts +2 -2
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js.map +1 -1
- package/bin/rpc/Client.d.ts +5 -5
- package/bin/rpc/Client.js +4 -4
- package/bin/session/Session.d.ts +6 -6
- package/bin/session/Session.d.ts.map +1 -1
- package/bin/session/Session.js +8 -8
- package/bin/session/Session.js.map +1 -1
- package/bin/session/SessionTitle.d.ts +2 -2
- package/bin/session/SessionTitle.d.ts.map +1 -1
- package/bin/session/SessionTitle.js +5 -0
- package/bin/session/SessionTitle.js.map +1 -1
- package/bin/session/browse/Browse.d.ts +12 -12
- package/bin/session/browse/Browse.d.ts.map +1 -1
- package/bin/session/browse/Browse.js +37 -34
- package/bin/session/browse/Browse.js.map +1 -1
- package/bin/session/index.d.ts +1 -1
- package/bin/session/index.js +1 -1
- package/bin/session/runtime/SessionPromptRuntime.d.ts +3 -3
- package/bin/session/runtime/SessionPromptRuntime.d.ts.map +1 -1
- package/bin/session/services/SessionStateService.d.ts +11 -12
- package/bin/session/services/SessionStateService.d.ts.map +1 -1
- package/bin/session/services/SessionStateService.js +43 -69
- package/bin/session/services/SessionStateService.js.map +1 -1
- package/bin/session/services/SessionTurnService.js +3 -3
- package/bin/session/services/SessionTurnService.js.map +1 -1
- package/bin/session/services/SessionViewService.d.ts +4 -4
- package/bin/session/services/SessionViewService.d.ts.map +1 -1
- package/bin/session/services/SessionViewService.js +26 -36
- package/bin/session/services/SessionViewService.js.map +1 -1
- package/bin/session/storage/Persistence.d.ts +4 -4
- package/bin/session/storage/Persistence.d.ts.map +1 -1
- package/bin/session/storage/RuntimeSessionPort.d.ts +2 -2
- package/bin/session/storage/RuntimeSessionPort.d.ts.map +1 -1
- package/bin/session/storage/RuntimeSessionPort.js +4 -4
- package/bin/session/storage/RuntimeSessionPort.js.map +1 -1
- package/bin/types/agent/AgentTypes.d.ts +2 -2
- package/bin/types/agent/AgentTypes.d.ts.map +1 -1
- package/bin/types/agent/SessionActor.d.ts +11 -11
- package/bin/types/agent/SessionActor.d.ts.map +1 -1
- package/bin/types/agent/SessionTypes.d.ts +22 -22
- package/bin/types/agent/SessionTypes.d.ts.map +1 -1
- package/bin/types/executor/SessionRunContext.d.ts +7 -7
- package/bin/types/executor/SessionRunContext.d.ts.map +1 -1
- package/bin/types/rpc/RpcProtocol.d.ts +6 -6
- package/bin/types/runtime/agent/AgentContext.d.ts +7 -7
- package/bin/types/runtime/agent/AgentContext.d.ts.map +1 -1
- package/bin/types/sdk/AgentSessionAction.d.ts +26 -0
- package/bin/types/sdk/AgentSessionAction.d.ts.map +1 -0
- package/bin/types/sdk/AgentSessionAction.js +10 -0
- package/bin/types/sdk/AgentSessionAction.js.map +1 -0
- package/bin/types/sdk/AgentSessionEvent.d.ts +2 -2
- package/bin/types/sdk/AgentSessionEvent.d.ts.map +1 -1
- package/bin/types/sdk/AgentSessionTurn.d.ts +2 -2
- package/bin/types/sdk/AgentSessionTurn.d.ts.map +1 -1
- package/package.json +3 -3
- package/scripts/agent-ready.test.mjs +1 -1
- package/scripts/city-model-tool-loop.test.mjs +36 -4
- package/scripts/plugin-tool-bridge.test.mjs +13 -0
- package/scripts/session-action-message.test.mjs +199 -0
- package/scripts/session-compaction-prompts.test.mjs +97 -0
- package/scripts/session-history-archive.test.mjs +8 -8
- package/scripts/session-history-inflight.test.mjs +10 -10
- package/scripts/session-list-title.test.mjs +9 -9
- package/scripts/session-title-event.test.mjs +12 -10
- package/src/agent/local/Agent.ts +16 -22
- package/src/agent/local/services/{AgentSessionManager.ts → AgentSessions.ts} +16 -32
- package/src/agent/remote/RemoteAgent.ts +58 -23
- package/src/agent/remote/RemoteSession.ts +10 -8
- package/src/agent/remote/RemoteTransport.ts +5 -5
- package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +10 -10
- package/src/agent/remote/transports/RpcRemoteAgentTransport.ts +6 -6
- package/src/executor/Executor.ts +51 -41
- package/src/executor/SessionRunScope.ts +1 -1
- package/src/executor/composer/compaction/SessionCompactionComposer.ts +5 -5
- package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.ts +1 -1
- package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.ts +91 -52
- package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.ts +197 -0
- package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.ts +162 -0
- package/src/executor/composer/context/LocalSessionContextComposer.ts +5 -5
- package/src/executor/composer/context/SessionContextComposer.ts +5 -5
- package/src/executor/composer/history/SessionHistoryComposer.ts +2 -2
- package/src/executor/composer/history/SessionHistoryWriter.ts +10 -10
- package/src/executor/composer/history/jsonl/JsonlSessionHistoryComposer.ts +13 -10
- package/src/executor/core-engine/CoreEngineMessageState.ts +8 -8
- package/src/executor/core-engine/CoreEngineRunner.ts +7 -7
- package/src/executor/core-engine/CoreEngineSignals.ts +7 -7
- package/src/executor/core-engine/CoreEngineUiStreamCollector.ts +5 -5
- package/src/executor/messages/AssistantResultPersistence.ts +8 -8
- package/src/executor/messages/SessionAttachmentMapper.ts +11 -11
- package/src/executor/messages/SessionMessageCodec.ts +10 -10
- package/src/executor/messages/SessionMessageLog.ts +3 -3
- package/src/executor/messages/SessionStepEventMapper.ts +5 -5
- package/src/executor/messages/UserVisibleText.ts +9 -9
- package/src/executor/services/ExecutorInflightService.ts +13 -9
- package/src/executor/store/history/SessionHistoryStore.ts +32 -28
- package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +146 -95
- package/src/executor/tools/plugin/PluginToolSchemas.ts +24 -10
- package/src/executor/types/SessionRecords.ts +217 -0
- package/src/executor/types/SessionRun.ts +5 -5
- package/src/index.ts +9 -10
- package/src/rpc/Client.ts +9 -9
- package/src/session/Session.ts +10 -10
- package/src/session/SessionTitle.ts +7 -4
- package/src/session/browse/Browse.ts +66 -58
- package/src/session/index.ts +1 -1
- package/src/session/runtime/SessionPromptRuntime.ts +6 -6
- package/src/session/services/SessionStateService.ts +61 -86
- package/src/session/services/SessionTurnService.ts +7 -7
- package/src/session/services/SessionViewService.ts +35 -45
- package/src/session/storage/Persistence.ts +6 -6
- package/src/session/storage/RuntimeSessionPort.ts +6 -6
- package/src/types/agent/AgentTypes.ts +4 -4
- package/src/types/agent/SessionActor.ts +12 -12
- package/src/types/agent/SessionTypes.ts +22 -22
- package/src/types/executor/SessionRunContext.ts +12 -12
- package/src/types/rpc/RpcProtocol.ts +6 -6
- package/src/types/runtime/agent/AgentContext.ts +8 -8
- package/src/types/sdk/AgentSessionAction.ts +35 -0
- package/src/types/sdk/AgentSessionEvent.ts +2 -2
- package/src/types/sdk/AgentSessionTurn.ts +2 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/bin/agent/local/services/AgentSessionManager.d.ts.map +0 -1
- package/bin/agent/local/services/AgentSessionManager.js.map +0 -1
- package/bin/executor/types/SessionMessages.d.ts +0 -118
- package/bin/executor/types/SessionMessages.d.ts.map +0 -1
- package/bin/executor/types/SessionMessages.js +0 -28
- package/bin/executor/types/SessionMessages.js.map +0 -1
- package/bin/types/sdk/AgentSessionOperation.d.ts +0 -99
- package/bin/types/sdk/AgentSessionOperation.d.ts.map +0 -1
- package/bin/types/sdk/AgentSessionOperation.js +0 -10
- package/bin/types/sdk/AgentSessionOperation.js.map +0 -1
- package/scripts/session-operation-message.test.mjs +0 -197
- package/src/executor/types/SessionMessages.ts +0 -148
- package/src/types/sdk/AgentSessionOperation.ts +0 -125
|
@@ -11,7 +11,9 @@ import path from "node:path";
|
|
|
11
11
|
import { generateText, isTextUIPart, } from "ai";
|
|
12
12
|
import { generateId } from "../../../../utils/Id.js";
|
|
13
13
|
import { getLogger } from "../../../../utils/logger/Logger.js";
|
|
14
|
-
import {
|
|
14
|
+
import { is_session_message_record, } from "../../../../executor/types/SessionRecords.js";
|
|
15
|
+
import { append_session_compaction_file_operations, build_initial_session_compaction_prompt, build_update_session_compaction_prompt, SESSION_COMPACTION_SYSTEM_PROMPT, } from "../../../composer/compaction/jsonl/JsonlSessionCompactionPrompts.js";
|
|
16
|
+
import { format_session_compaction_file_operations } from "../../../composer/compaction/jsonl/JsonlSessionCompactionFileOperations.js";
|
|
15
17
|
/**
|
|
16
18
|
* 对当前 session messages 做一次 best-effort compact(必要时)。
|
|
17
19
|
*
|
|
@@ -21,15 +23,20 @@ import { isSessionOperationMessage } from "../../../../executor/types/SessionMes
|
|
|
21
23
|
*/
|
|
22
24
|
export async function compactSessionMessagesIfNeeded(deps, params) {
|
|
23
25
|
const logger = getLogger(deps.rootPath, "info");
|
|
24
|
-
const
|
|
25
|
-
let
|
|
26
|
-
const
|
|
27
|
-
if (typeof params.
|
|
26
|
+
const action_id = `compacting:${deps.sessionId}:${Date.now()}:${generateId()}`;
|
|
27
|
+
let action_started = false;
|
|
28
|
+
const publish_action = async (action) => {
|
|
29
|
+
if (typeof params.onAction !== "function")
|
|
28
30
|
return;
|
|
29
|
-
await params.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
...
|
|
31
|
+
await params.onAction({
|
|
32
|
+
type: "action",
|
|
33
|
+
id: action_id,
|
|
34
|
+
...action,
|
|
35
|
+
metadata: {
|
|
36
|
+
v: 1,
|
|
37
|
+
ts: Date.now(),
|
|
38
|
+
sessionId: deps.sessionId,
|
|
39
|
+
},
|
|
33
40
|
});
|
|
34
41
|
};
|
|
35
42
|
// 算法阶段(中文)
|
|
@@ -39,7 +46,7 @@ export async function compactSessionMessagesIfNeeded(deps, params) {
|
|
|
39
46
|
let snapshot = [];
|
|
40
47
|
let snapshotTailId = "";
|
|
41
48
|
await deps.withWriteLock(async () => {
|
|
42
|
-
snapshot = (await deps.loadAll()).filter(
|
|
49
|
+
snapshot = (await deps.loadAll()).filter(is_session_message_record);
|
|
43
50
|
snapshotTailId =
|
|
44
51
|
snapshot.length > 0
|
|
45
52
|
? String(snapshot[snapshot.length - 1].id || "")
|
|
@@ -69,17 +76,27 @@ export async function compactSessionMessagesIfNeeded(deps, params) {
|
|
|
69
76
|
const older = snapshot.slice(0, compactCount);
|
|
70
77
|
if (older.length === 0)
|
|
71
78
|
return { compacted: false, reason: "nothing_to_compact" };
|
|
72
|
-
|
|
73
|
-
await
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
progress: 0,
|
|
79
|
+
action_started = true;
|
|
80
|
+
await publish_action({
|
|
81
|
+
title: "Compacting session records",
|
|
82
|
+
state: "running",
|
|
77
83
|
});
|
|
78
|
-
const
|
|
84
|
+
const previous_summary = extract_existing_compaction_summary(older[0]);
|
|
85
|
+
const conversation_messages = previous_summary ? older.slice(1) : older;
|
|
86
|
+
const olderTextAll = extractPlainTextFromMessages(conversation_messages);
|
|
79
87
|
const maxOlderChars = 24_000;
|
|
80
88
|
const olderText = olderTextAll.length > maxOlderChars
|
|
81
89
|
? "(注意:更早历史过长,已截断保留末尾)\n" + olderTextAll.slice(-maxOlderChars)
|
|
82
90
|
: olderTextAll;
|
|
91
|
+
const prompt = previous_summary
|
|
92
|
+
? build_update_session_compaction_prompt({
|
|
93
|
+
previous_summary,
|
|
94
|
+
new_conversation_text: olderText || "(none)",
|
|
95
|
+
})
|
|
96
|
+
: build_initial_session_compaction_prompt({
|
|
97
|
+
conversation_text: olderText || "(none)",
|
|
98
|
+
});
|
|
99
|
+
const file_operations_xml = format_session_compaction_file_operations(older);
|
|
83
100
|
// phase 1.5:生成摘要(不持锁)
|
|
84
101
|
// - 这一步最耗时,必须在锁外执行,避免阻塞 append。
|
|
85
102
|
let summary = "";
|
|
@@ -89,29 +106,29 @@ export async function compactSessionMessagesIfNeeded(deps, params) {
|
|
|
89
106
|
system: [
|
|
90
107
|
{
|
|
91
108
|
role: "system",
|
|
92
|
-
content:
|
|
93
|
-
"要求:\n" +
|
|
94
|
-
"- 输出中文\n" +
|
|
95
|
-
"- 不要复述无关细节,不要输出工具原始日志\n" +
|
|
96
|
-
"- 必须包含:已确认事实/用户偏好约束/已做决策/未完成事项\n" +
|
|
97
|
-
"- 使用 Markdown 列表,控制在 300~800 字",
|
|
109
|
+
content: SESSION_COMPACTION_SYSTEM_PROMPT,
|
|
98
110
|
},
|
|
99
111
|
],
|
|
100
|
-
prompt
|
|
112
|
+
prompt,
|
|
113
|
+
});
|
|
114
|
+
summary = append_session_compaction_file_operations({
|
|
115
|
+
summary: String(r.text || "").trim(),
|
|
116
|
+
file_operations_xml,
|
|
101
117
|
});
|
|
102
|
-
summary = String(r.text || "").trim();
|
|
103
118
|
}
|
|
104
119
|
catch (e) {
|
|
105
120
|
await logger.log("warn", "Session messages compact summary failed, fallback to lossy truncation", {
|
|
106
121
|
sessionId: deps.sessionId,
|
|
107
122
|
error: String(e),
|
|
108
123
|
});
|
|
109
|
-
summary =
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
124
|
+
summary = append_session_compaction_file_operations({
|
|
125
|
+
summary: "(系统自动压缩:摘要生成失败,已丢弃更早历史,仅保留最近对话。)",
|
|
126
|
+
file_operations_xml,
|
|
127
|
+
});
|
|
128
|
+
await publish_action({
|
|
129
|
+
title: "Compacting session records",
|
|
130
|
+
description: "Summary generation failed; using a fallback summary.",
|
|
131
|
+
state: "running",
|
|
115
132
|
});
|
|
116
133
|
}
|
|
117
134
|
const fromId = String(older[0]?.id || "");
|
|
@@ -131,7 +148,7 @@ export async function compactSessionMessagesIfNeeded(deps, params) {
|
|
|
131
148
|
// 如果 tail 不同,说明期间有新消息追加;我们仍可安全 compact:按“当前长度 + 相同比例”重算。
|
|
132
149
|
// snapshotTailId 用于 debug,不作为强一致性依赖。
|
|
133
150
|
void snapshotTailId;
|
|
134
|
-
const current_model_messages = current.filter(
|
|
151
|
+
const current_model_messages = current.filter(is_session_message_record);
|
|
135
152
|
const currentCompactCount = resolveCompactCount(current_model_messages.length, compactRatio);
|
|
136
153
|
const currentOlder = current_model_messages.slice(0, currentCompactCount);
|
|
137
154
|
if (currentOlder.length === 0)
|
|
@@ -165,15 +182,11 @@ export async function compactSessionMessagesIfNeeded(deps, params) {
|
|
|
165
182
|
updatedAt: Date.now(),
|
|
166
183
|
});
|
|
167
184
|
});
|
|
168
|
-
if (
|
|
169
|
-
await
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
result: {
|
|
174
|
-
archiveId,
|
|
175
|
-
compactedCount: older.length,
|
|
176
|
-
},
|
|
185
|
+
if (action_started) {
|
|
186
|
+
await publish_action({
|
|
187
|
+
title: "Session records compacted",
|
|
188
|
+
description: `Compacted ${String(older.length)} earlier messages into ${archiveId}.`,
|
|
189
|
+
state: "completed",
|
|
177
190
|
});
|
|
178
191
|
}
|
|
179
192
|
return { compacted: true };
|
|
@@ -237,4 +250,24 @@ function extractPlainTextFromMessages(messages) {
|
|
|
237
250
|
}
|
|
238
251
|
return lines.join("\n");
|
|
239
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* 从已有 compact summary 消息中提取旧摘要。
|
|
255
|
+
*
|
|
256
|
+
* 关键点(中文)
|
|
257
|
+
* - 旧摘要通常位于 messages.jsonl 第一条,后续 compact 应基于它迭代更新。
|
|
258
|
+
* - 只识别 compact 生成的 summary,避免误把普通 assistant 文本当作旧摘要。
|
|
259
|
+
*/
|
|
260
|
+
function extract_existing_compaction_summary(message) {
|
|
261
|
+
if (!message || typeof message !== "object")
|
|
262
|
+
return "";
|
|
263
|
+
const metadata = message.metadata;
|
|
264
|
+
if (metadata?.source !== "compact" || metadata.kind !== "summary")
|
|
265
|
+
return "";
|
|
266
|
+
const parts = Array.isArray(message.parts) ? message.parts : [];
|
|
267
|
+
return parts
|
|
268
|
+
.filter(isTextUIPart)
|
|
269
|
+
.map((part) => String(part.text ?? ""))
|
|
270
|
+
.join("\n")
|
|
271
|
+
.trim();
|
|
272
|
+
}
|
|
240
273
|
//# sourceMappingURL=JsonlSessionCompactionExecutor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonlSessionCompactionExecutor.js","sourceRoot":"","sources":["../../../../../src/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,YAAY,GAGb,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"JsonlSessionCompactionExecutor.js","sourceRoot":"","sources":["../../../../../src/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JsonlSessionCompactionFileOperations:上下文压缩文件操作记录模块。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 从被压缩的 session 消息中 best-effort 提取文件读写痕迹。
|
|
6
|
+
* - 输出结构化 XML 片段,追加到 LLM 生成的 compact summary 末尾。
|
|
7
|
+
* - 解析失败或没有文件操作时不影响 compact 主流程。
|
|
8
|
+
*/
|
|
9
|
+
import type { SessionMessageRecordV1 } from "../../../../executor/types/SessionRecords.js";
|
|
10
|
+
/**
|
|
11
|
+
* 压缩范围内的文件操作汇总。
|
|
12
|
+
*/
|
|
13
|
+
export type SessionCompactionFileOperations = {
|
|
14
|
+
/** 本次压缩范围内被读取或查看过的文件路径。 */
|
|
15
|
+
read_files: string[];
|
|
16
|
+
/** 本次压缩范围内被新增、修改或删除过的文件路径。 */
|
|
17
|
+
modified_files: string[];
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* 把压缩范围内的文件操作格式化为 XML。
|
|
21
|
+
*/
|
|
22
|
+
export declare function format_session_compaction_file_operations(messages: SessionMessageRecordV1[]): string;
|
|
23
|
+
/**
|
|
24
|
+
* 收集压缩范围内的文件操作。
|
|
25
|
+
*/
|
|
26
|
+
export declare function collect_session_compaction_file_operations(messages: SessionMessageRecordV1[]): SessionCompactionFileOperations;
|
|
27
|
+
//# sourceMappingURL=JsonlSessionCompactionFileOperations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonlSessionCompactionFileOperations.d.ts","sourceRoot":"","sources":["../../../../../src/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAEjF;;GAEG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,2BAA2B;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,8BAA8B;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAWF;;GAEG;AACH,wBAAgB,yCAAyC,CACvD,QAAQ,EAAE,sBAAsB,EAAE,GACjC,MAAM,CAcR;AAED;;GAEG;AACH,wBAAgB,0CAA0C,CACxD,QAAQ,EAAE,sBAAsB,EAAE,GACjC,+BAA+B,CAwBjC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JsonlSessionCompactionFileOperations:上下文压缩文件操作记录模块。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 从被压缩的 session 消息中 best-effort 提取文件读写痕迹。
|
|
6
|
+
* - 输出结构化 XML 片段,追加到 LLM 生成的 compact summary 末尾。
|
|
7
|
+
* - 解析失败或没有文件操作时不影响 compact 主流程。
|
|
8
|
+
*/
|
|
9
|
+
import { isTextUIPart } from "ai";
|
|
10
|
+
const PATH_CANDIDATE_RE = /(?:\.{1,2}\/|\/|[A-Za-z0-9_.@-]+\/)[A-Za-z0-9_.@~:+/=-]+/g;
|
|
11
|
+
const PATCH_FILE_RE = /^\*\*\* (?:Add|Update|Delete) File: (.+)$/gm;
|
|
12
|
+
const GIT_STATUS_FILE_RE = /^\s*(?:[MADRCU?!]{1,2}|[ MADRCU?!][ MADRCU?!])\s+(.+)$/gm;
|
|
13
|
+
const READ_COMMAND_RE = /\b(?:cat|less|more|sed|nl|head|tail|rg|grep|find|ls|wc|stat|open|git\s+(?:show|diff|status|grep|ls-files))\b/;
|
|
14
|
+
/**
|
|
15
|
+
* 把压缩范围内的文件操作格式化为 XML。
|
|
16
|
+
*/
|
|
17
|
+
export function format_session_compaction_file_operations(messages) {
|
|
18
|
+
const operations = collect_session_compaction_file_operations(messages);
|
|
19
|
+
if (operations.read_files.length === 0 && operations.modified_files.length === 0) {
|
|
20
|
+
return "";
|
|
21
|
+
}
|
|
22
|
+
return [
|
|
23
|
+
"<read-files>",
|
|
24
|
+
...operations.read_files.map((file_path) => xml_escape(file_path)),
|
|
25
|
+
"</read-files>",
|
|
26
|
+
"",
|
|
27
|
+
"<modified-files>",
|
|
28
|
+
...operations.modified_files.map((file_path) => xml_escape(file_path)),
|
|
29
|
+
"</modified-files>",
|
|
30
|
+
].join("\n");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 收集压缩范围内的文件操作。
|
|
34
|
+
*/
|
|
35
|
+
export function collect_session_compaction_file_operations(messages) {
|
|
36
|
+
const read_files = new Set();
|
|
37
|
+
const modified_files = new Set();
|
|
38
|
+
for (const message of Array.isArray(messages) ? messages : []) {
|
|
39
|
+
const text_blocks = extract_message_operation_texts(message);
|
|
40
|
+
for (const text of text_blocks) {
|
|
41
|
+
for (const file_path of extract_modified_files(text)) {
|
|
42
|
+
modified_files.add(file_path);
|
|
43
|
+
}
|
|
44
|
+
for (const file_path of extract_read_files(text)) {
|
|
45
|
+
read_files.add(file_path);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
for (const file_path of modified_files) {
|
|
50
|
+
read_files.delete(file_path);
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
read_files: [...read_files].sort(),
|
|
54
|
+
modified_files: [...modified_files].sort(),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 提取单条消息中可能包含文件操作的文本块。
|
|
59
|
+
*/
|
|
60
|
+
function extract_message_operation_texts(message) {
|
|
61
|
+
const out = [];
|
|
62
|
+
const parts = Array.isArray(message.parts) ? message.parts : [];
|
|
63
|
+
for (const part of parts) {
|
|
64
|
+
if (isTextUIPart(part)) {
|
|
65
|
+
const text = String(part.text ?? "").trim();
|
|
66
|
+
if (text)
|
|
67
|
+
out.push(text);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const part_record = to_record(part);
|
|
71
|
+
if (!part_record)
|
|
72
|
+
continue;
|
|
73
|
+
const input_text = stringify_compact(part_record.input);
|
|
74
|
+
const output_text = stringify_compact(part_record.output);
|
|
75
|
+
const error_text = stringify_compact(part_record.errorText);
|
|
76
|
+
if (input_text)
|
|
77
|
+
out.push(input_text);
|
|
78
|
+
if (output_text)
|
|
79
|
+
out.push(output_text);
|
|
80
|
+
if (error_text)
|
|
81
|
+
out.push(error_text);
|
|
82
|
+
}
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 提取 patch / git status 中的修改文件。
|
|
87
|
+
*/
|
|
88
|
+
function extract_modified_files(text) {
|
|
89
|
+
const out = new Set();
|
|
90
|
+
for (const file_path of match_group_values(text, PATCH_FILE_RE)) {
|
|
91
|
+
const normalized = normalize_file_path(file_path);
|
|
92
|
+
if (normalized)
|
|
93
|
+
out.add(normalized);
|
|
94
|
+
}
|
|
95
|
+
for (const file_path of match_group_values(text, GIT_STATUS_FILE_RE)) {
|
|
96
|
+
const normalized = normalize_file_path(file_path);
|
|
97
|
+
if (normalized)
|
|
98
|
+
out.add(normalized);
|
|
99
|
+
}
|
|
100
|
+
return [...out];
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 从读命令文本中提取读取路径。
|
|
104
|
+
*/
|
|
105
|
+
function extract_read_files(text) {
|
|
106
|
+
const out = new Set();
|
|
107
|
+
const lines = String(text || "").split(/\r?\n/);
|
|
108
|
+
for (const line of lines) {
|
|
109
|
+
if (!READ_COMMAND_RE.test(line))
|
|
110
|
+
continue;
|
|
111
|
+
for (const candidate of line.match(PATH_CANDIDATE_RE) || []) {
|
|
112
|
+
const normalized = normalize_file_path(candidate);
|
|
113
|
+
if (normalized)
|
|
114
|
+
out.add(normalized);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return [...out];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 获取正则第一个捕获组的所有结果。
|
|
121
|
+
*/
|
|
122
|
+
function match_group_values(text, pattern) {
|
|
123
|
+
const out = [];
|
|
124
|
+
pattern.lastIndex = 0;
|
|
125
|
+
let match = pattern.exec(text);
|
|
126
|
+
while (match) {
|
|
127
|
+
const value = String(match[1] || "").trim();
|
|
128
|
+
if (value)
|
|
129
|
+
out.push(value);
|
|
130
|
+
match = pattern.exec(text);
|
|
131
|
+
}
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 归一化候选路径。
|
|
136
|
+
*/
|
|
137
|
+
function normalize_file_path(value) {
|
|
138
|
+
let file_path = String(value || "").trim();
|
|
139
|
+
if (!file_path || file_path.includes("://"))
|
|
140
|
+
return "";
|
|
141
|
+
file_path = file_path.replace(/^["'`]+|["'`]+$/g, "");
|
|
142
|
+
file_path = file_path.replace(/[),.;:]+$/g, "");
|
|
143
|
+
if (!file_path || file_path === "." || file_path === "..")
|
|
144
|
+
return "";
|
|
145
|
+
if (file_path.startsWith("-"))
|
|
146
|
+
return "";
|
|
147
|
+
return file_path;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 转成对象记录。
|
|
151
|
+
*/
|
|
152
|
+
function to_record(value) {
|
|
153
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
154
|
+
return null;
|
|
155
|
+
return value;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* 将未知结构紧凑地转为文本。
|
|
159
|
+
*/
|
|
160
|
+
function stringify_compact(value) {
|
|
161
|
+
if (value === undefined || value === null)
|
|
162
|
+
return "";
|
|
163
|
+
if (typeof value === "string")
|
|
164
|
+
return value;
|
|
165
|
+
try {
|
|
166
|
+
return JSON.stringify(value);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return String(value);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* XML 文本转义。
|
|
174
|
+
*/
|
|
175
|
+
function xml_escape(value) {
|
|
176
|
+
return String(value || "")
|
|
177
|
+
.replace(/&/g, "&")
|
|
178
|
+
.replace(/</g, "<")
|
|
179
|
+
.replace(/>/g, ">");
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=JsonlSessionCompactionFileOperations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonlSessionCompactionFileOperations.js","sourceRoot":"","sources":["../../../../../src/executor/composer/compaction/jsonl/JsonlSessionCompactionFileOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JsonlSessionCompactionPrompts:上下文压缩提示词模块。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 统一维护 session compact 使用的 system prompt 与 user prompt。
|
|
6
|
+
* - 支持初始压缩、迭代更新压缩、turn prefix 压缩三类场景。
|
|
7
|
+
* - prompt 文本保持结构化格式稳定,便于后续 LLM 继续接力。
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* 上下文压缩 system prompt。
|
|
11
|
+
*/
|
|
12
|
+
export declare const SESSION_COMPACTION_SYSTEM_PROMPT: string;
|
|
13
|
+
/**
|
|
14
|
+
* 构建初始上下文压缩 prompt。
|
|
15
|
+
*/
|
|
16
|
+
export declare function build_initial_session_compaction_prompt(params: {
|
|
17
|
+
/** 待压缩的历史对话文本。 */
|
|
18
|
+
conversation_text: string;
|
|
19
|
+
}): string;
|
|
20
|
+
/**
|
|
21
|
+
* 构建迭代更新上下文压缩 prompt。
|
|
22
|
+
*/
|
|
23
|
+
export declare function build_update_session_compaction_prompt(params: {
|
|
24
|
+
/** 已存在的旧摘要。 */
|
|
25
|
+
previous_summary: string;
|
|
26
|
+
/** 本次需要合入旧摘要的新对话文本。 */
|
|
27
|
+
new_conversation_text: string;
|
|
28
|
+
}): string;
|
|
29
|
+
/**
|
|
30
|
+
* 构建 turn prefix 压缩 prompt。
|
|
31
|
+
*/
|
|
32
|
+
export declare function build_turn_prefix_session_compaction_prompt(params: {
|
|
33
|
+
/** 被切下来的 turn prefix 文本。 */
|
|
34
|
+
prefix_text: string;
|
|
35
|
+
}): string;
|
|
36
|
+
/**
|
|
37
|
+
* 给摘要追加文件操作 XML。
|
|
38
|
+
*/
|
|
39
|
+
export declare function append_session_compaction_file_operations(params: {
|
|
40
|
+
/** LLM 生成的结构化摘要。 */
|
|
41
|
+
summary: string;
|
|
42
|
+
/** 文件操作 XML,空字符串时不追加。 */
|
|
43
|
+
file_operations_xml?: string;
|
|
44
|
+
}): string;
|
|
45
|
+
//# sourceMappingURL=JsonlSessionCompactionPrompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonlSessionCompactionPrompts.d.ts","sourceRoot":"","sources":["../../../../../src/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,eAAO,MAAM,gCAAgC,QAIjC,CAAC;AAEb;;GAEG;AACH,wBAAgB,uCAAuC,CAAC,MAAM,EAAE;IAC9D,kBAAkB;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GAAG,MAAM,CAqCT;AAED;;GAEG;AACH,wBAAgB,sCAAsC,CAAC,MAAM,EAAE;IAC7D,eAAe;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,qBAAqB,EAAE,MAAM,CAAC;CAC/B,GAAG,MAAM,CA+CT;AAED;;GAEG;AACH,wBAAgB,2CAA2C,CAAC,MAAM,EAAE;IAClE,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAmBT;AAED;;GAEG;AACH,wBAAgB,yCAAyC,CAAC,MAAM,EAAE;IAChE,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,MAAM,CAMT"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JsonlSessionCompactionPrompts:上下文压缩提示词模块。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 统一维护 session compact 使用的 system prompt 与 user prompt。
|
|
6
|
+
* - 支持初始压缩、迭代更新压缩、turn prefix 压缩三类场景。
|
|
7
|
+
* - prompt 文本保持结构化格式稳定,便于后续 LLM 继续接力。
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* 上下文压缩 system prompt。
|
|
11
|
+
*/
|
|
12
|
+
export const SESSION_COMPACTION_SYSTEM_PROMPT = [
|
|
13
|
+
"You are a context summarization assistant. Your task is to read a conversation between a user and an AI assistant, then produce a structured summary following the exact format specified.",
|
|
14
|
+
"",
|
|
15
|
+
"Do NOT continue the conversation. Do NOT respond to any questions in the conversation. ONLY output the structured summary.",
|
|
16
|
+
].join("\n");
|
|
17
|
+
/**
|
|
18
|
+
* 构建初始上下文压缩 prompt。
|
|
19
|
+
*/
|
|
20
|
+
export function build_initial_session_compaction_prompt(params) {
|
|
21
|
+
return [
|
|
22
|
+
String(params.conversation_text || "").trim(),
|
|
23
|
+
"",
|
|
24
|
+
"The messages above are a conversation to summarize. Create a structured context checkpoint summary that another LLM will use to continue the work.",
|
|
25
|
+
"",
|
|
26
|
+
"Use this EXACT format:",
|
|
27
|
+
"",
|
|
28
|
+
"## Goal",
|
|
29
|
+
"[What is the user trying to accomplish? Can be multiple items if the session covers different tasks.]",
|
|
30
|
+
"",
|
|
31
|
+
"## Constraints & Preferences",
|
|
32
|
+
"- [Any constraints, preferences, or requirements mentioned by user]",
|
|
33
|
+
'- [Or "(none)" if none were mentioned]',
|
|
34
|
+
"",
|
|
35
|
+
"## Progress",
|
|
36
|
+
"### Done",
|
|
37
|
+
"- [x] [Completed tasks/changes]",
|
|
38
|
+
"",
|
|
39
|
+
"### In Progress",
|
|
40
|
+
"- [ ] [Current work]",
|
|
41
|
+
"",
|
|
42
|
+
"### Blocked",
|
|
43
|
+
"[Issues preventing progress, if any]",
|
|
44
|
+
"",
|
|
45
|
+
"## Key Decisions",
|
|
46
|
+
"- **[Decision]**: [Brief rationale]",
|
|
47
|
+
"",
|
|
48
|
+
"## Next Steps",
|
|
49
|
+
"1. [Ordered list of what should happen next]",
|
|
50
|
+
"",
|
|
51
|
+
"## Critical Context",
|
|
52
|
+
"- [Any data, examples, or references needed to continue]",
|
|
53
|
+
'- [Or "(none)" if not applicable]',
|
|
54
|
+
"",
|
|
55
|
+
"Keep each section concise. Preserve exact file paths, function names, and error messages.",
|
|
56
|
+
].join("\n");
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 构建迭代更新上下文压缩 prompt。
|
|
60
|
+
*/
|
|
61
|
+
export function build_update_session_compaction_prompt(params) {
|
|
62
|
+
return [
|
|
63
|
+
"<previous-summary>",
|
|
64
|
+
String(params.previous_summary || "").trim(),
|
|
65
|
+
"</previous-summary>",
|
|
66
|
+
"",
|
|
67
|
+
String(params.new_conversation_text || "").trim(),
|
|
68
|
+
"",
|
|
69
|
+
"The messages above are NEW conversation messages to incorporate into the existing summary provided in <previous-summary> tags.",
|
|
70
|
+
"",
|
|
71
|
+
"Update the existing structured summary with new information. RULES:",
|
|
72
|
+
"- PRESERVE all existing information from the previous summary",
|
|
73
|
+
"- ADD new progress, decisions, and context from the new messages",
|
|
74
|
+
'- UPDATE the Progress section: move items from "In Progress" to "Done" when completed',
|
|
75
|
+
'- UPDATE "Next Steps" based on what was accomplished',
|
|
76
|
+
"- PRESERVE exact file paths, function names, and error messages",
|
|
77
|
+
"- If something is no longer relevant, you may remove it",
|
|
78
|
+
"",
|
|
79
|
+
"Use this EXACT format:",
|
|
80
|
+
"",
|
|
81
|
+
"## Goal",
|
|
82
|
+
"[Preserve existing goals, add new ones if the task expanded]",
|
|
83
|
+
"",
|
|
84
|
+
"## Constraints & Preferences",
|
|
85
|
+
"- [Preserve existing, add new ones discovered]",
|
|
86
|
+
"",
|
|
87
|
+
"## Progress",
|
|
88
|
+
"### Done",
|
|
89
|
+
"- [x] [Include previously done items AND newly completed items]",
|
|
90
|
+
"",
|
|
91
|
+
"### In Progress",
|
|
92
|
+
"- [ ] [Current work - update based on progress]",
|
|
93
|
+
"",
|
|
94
|
+
"### Blocked",
|
|
95
|
+
"[Current blockers - remove if resolved]",
|
|
96
|
+
"",
|
|
97
|
+
"## Key Decisions",
|
|
98
|
+
"- **[Decision]**: [Brief rationale] (preserve all previous, add new)",
|
|
99
|
+
"",
|
|
100
|
+
"## Next Steps",
|
|
101
|
+
"1. [Update based on current state]",
|
|
102
|
+
"",
|
|
103
|
+
"## Critical Context",
|
|
104
|
+
"- [Preserve important context, add new if needed]",
|
|
105
|
+
"",
|
|
106
|
+
"Keep each section concise. Preserve exact file paths, function names, and error messages.",
|
|
107
|
+
].join("\n");
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 构建 turn prefix 压缩 prompt。
|
|
111
|
+
*/
|
|
112
|
+
export function build_turn_prefix_session_compaction_prompt(params) {
|
|
113
|
+
return [
|
|
114
|
+
String(params.prefix_text || "").trim(),
|
|
115
|
+
"",
|
|
116
|
+
"This is the PREFIX of a turn that was too large to keep. The SUFFIX (recent work) is retained.",
|
|
117
|
+
"",
|
|
118
|
+
"Summarize the prefix to provide context for the retained suffix:",
|
|
119
|
+
"",
|
|
120
|
+
"## Original Request",
|
|
121
|
+
"[What did the user ask for in this turn?]",
|
|
122
|
+
"",
|
|
123
|
+
"## Early Progress",
|
|
124
|
+
"- [Key decisions and work done in the prefix]",
|
|
125
|
+
"",
|
|
126
|
+
"## Context for Suffix",
|
|
127
|
+
"- [Information needed to understand the retained recent work]",
|
|
128
|
+
"",
|
|
129
|
+
"Be concise. Focus on what's needed to understand the kept suffix.",
|
|
130
|
+
].join("\n");
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* 给摘要追加文件操作 XML。
|
|
134
|
+
*/
|
|
135
|
+
export function append_session_compaction_file_operations(params) {
|
|
136
|
+
const summary = String(params.summary || "").trim();
|
|
137
|
+
const file_operations_xml = String(params.file_operations_xml || "").trim();
|
|
138
|
+
if (!file_operations_xml)
|
|
139
|
+
return summary;
|
|
140
|
+
if (!summary)
|
|
141
|
+
return file_operations_xml;
|
|
142
|
+
return `${summary}\n\n${file_operations_xml}`;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=JsonlSessionCompactionPrompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonlSessionCompactionPrompts.js","sourceRoot":"","sources":["../../../../../src/executor/composer/compaction/jsonl/JsonlSessionCompactionPrompts.ts"],"names":[],"mappings":"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"}
|