@downcity/agent 1.1.200 → 1.1.203
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 +5 -5
- package/bin/executor/Executor.d.ts.map +1 -1
- package/bin/executor/Executor.js +22 -13
- 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 +3 -3
- package/bin/executor/composer/compaction/SessionCompactionComposer.d.ts.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 +56 -16
- 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 -5
- 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 +4 -4
- package/bin/executor/services/ExecutorInflightService.js.map +1 -1
- package/bin/executor/store/history/SessionHistoryStore.d.ts +24 -21
- 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 +18 -19
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts.map +1 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +33 -36
- 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/{SessionMessages.d.ts → SessionRecords.d.ts} +53 -28
- 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 +1 -1
- package/bin/index.d.ts.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 +3 -3
- 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 +9 -9
- 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 +7 -8
- package/bin/session/services/SessionStateService.d.ts.map +1 -1
- package/bin/session/services/SessionStateService.js +24 -34
- package/bin/session/services/SessionStateService.js.map +1 -1
- package/bin/session/services/SessionViewService.d.ts +4 -4
- package/bin/session/services/SessionViewService.js +12 -12
- 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 +12 -12
- package/bin/types/agent/SessionTypes.d.ts.map +1 -1
- package/bin/types/executor/SessionRunContext.d.ts +2 -2
- 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 +8 -49
- package/bin/types/sdk/AgentSessionAction.d.ts.map +1 -1
- package/bin/types/sdk/AgentSessionAction.js +4 -4
- 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 +71 -27
- 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 +30 -19
- package/src/executor/SessionRunScope.ts +1 -1
- package/src/executor/composer/compaction/SessionCompactionComposer.ts +3 -3
- package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.ts +73 -29
- 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 -13
- 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 +7 -7
- package/src/executor/store/history/SessionHistoryStore.ts +26 -23
- package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +58 -62
- package/src/executor/tools/plugin/PluginToolSchemas.ts +24 -10
- package/src/executor/types/{SessionMessages.ts → SessionRecords.ts} +71 -40
- package/src/executor/types/SessionRun.ts +5 -5
- package/src/index.ts +4 -4
- package/src/rpc/Client.ts +9 -9
- package/src/session/Session.ts +10 -10
- package/src/session/SessionTitle.ts +7 -7
- package/src/session/browse/Browse.ts +38 -38
- package/src/session/index.ts +1 -1
- package/src/session/runtime/SessionPromptRuntime.ts +6 -6
- package/src/session/services/SessionStateService.ts +40 -47
- package/src/session/services/SessionTurnService.ts +4 -4
- package/src/session/services/SessionViewService.ts +21 -21
- 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 +12 -12
- package/src/types/executor/SessionRunContext.ts +2 -2
- package/src/types/rpc/RpcProtocol.ts +6 -6
- package/src/types/runtime/agent/AgentContext.ts +8 -8
- package/src/types/sdk/AgentSessionAction.ts +12 -56
- 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.map +0 -1
- package/bin/executor/types/SessionMessages.js +0 -46
- package/bin/executor/types/SessionMessages.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionStepEventMapper.d.ts","sourceRoot":"","sources":["../../../src/executor/messages/SessionStepEventMapper.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"SessionStepEventMapper.d.ts","sourceRoot":"","sources":["../../../src/executor/messages/SessionStepEventMapper.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAiGjF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;CACrC,GAAG,sBAAsB,CAAC,OAAO,CAAC,CA4ElC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionStepEventMapper.js","sourceRoot":"","sources":["../../../src/executor/messages/SessionStepEventMapper.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SessionStepEventMapper.js","sourceRoot":"","sources":["../../../src/executor/messages/SessionStepEventMapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - 真实的“最终回复”往往由 `chat_send` 工具的 input.text 决定
|
|
7
7
|
* - 因此需要一个稳定的、与 Agent 解耦的提取逻辑(属于 chat/egress 语义)
|
|
8
8
|
*/
|
|
9
|
-
import { type
|
|
9
|
+
import { type SessionRecordV1, type SessionMessageRecordV1 } from "../../executor/types/SessionRecords.js";
|
|
10
10
|
/**
|
|
11
11
|
* 生成真正应该落盘到 session 的 assistant message。
|
|
12
12
|
*
|
|
@@ -14,7 +14,7 @@ import { type SessionMessageV1, type SessionModelMessageV1 } from "../../executo
|
|
|
14
14
|
* - session 正式历史应尽量保留 AI SDK 最终 assistant UIMessage。
|
|
15
15
|
* - 运行中 step/tool 的中断恢复由 inflight 快照承担,不再通过跳过最终 message 收口。
|
|
16
16
|
*/
|
|
17
|
-
export declare function resolveAssistantMessageForPersistence(message:
|
|
17
|
+
export declare function resolveAssistantMessageForPersistence(message: SessionRecordV1 | null | undefined): SessionMessageRecordV1 | null;
|
|
18
18
|
/**
|
|
19
19
|
* 提取策略(中文)
|
|
20
20
|
* - 倒序扫描:优先使用最后一次 `chat_send`,与最终用户感知一致。
|
|
@@ -22,5 +22,5 @@ export declare function resolveAssistantMessageForPersistence(message: SessionMe
|
|
|
22
22
|
* - 若 tool output 为空/非 JSON,走 best-effort 采用 input.text。
|
|
23
23
|
* - 若无 tool call,则回退到 message 文本内容。
|
|
24
24
|
*/
|
|
25
|
-
export declare function pickLastSuccessfulChatSendText(message:
|
|
25
|
+
export declare function pickLastSuccessfulChatSendText(message: SessionRecordV1 | null | undefined): string;
|
|
26
26
|
//# sourceMappingURL=UserVisibleText.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserVisibleText.d.ts","sourceRoot":"","sources":["../../../src/executor/messages/UserVisibleText.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,
|
|
1
|
+
{"version":3,"file":"UserVisibleText.d.ts","sourceRoot":"","sources":["../../../src/executor/messages/UserVisibleText.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC5B,MAAM,oCAAoC,CAAC;AAM5C;;;;;;GAMG;AACH,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,GAC1C,sBAAsB,GAAG,IAAI,CAI/B;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,GAC1C,MAAM,CA+BR"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - 真实的“最终回复”往往由 `chat_send` 工具的 input.text 决定
|
|
7
7
|
* - 因此需要一个稳定的、与 Agent 解耦的提取逻辑(属于 chat/egress 语义)
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { is_session_message_record, } from "../../executor/types/SessionRecords.js";
|
|
10
10
|
import { extractTextFromUiMessage, extractToolCallsFromUiMessage, } from "./UIMessageTransformer.js";
|
|
11
11
|
/**
|
|
12
12
|
* 生成真正应该落盘到 session 的 assistant message。
|
|
@@ -18,7 +18,7 @@ import { extractTextFromUiMessage, extractToolCallsFromUiMessage, } from "./UIMe
|
|
|
18
18
|
export function resolveAssistantMessageForPersistence(message) {
|
|
19
19
|
if (!message || typeof message !== "object")
|
|
20
20
|
return null;
|
|
21
|
-
if (!
|
|
21
|
+
if (!is_session_message_record(message))
|
|
22
22
|
return null;
|
|
23
23
|
return message;
|
|
24
24
|
}
|
|
@@ -30,7 +30,7 @@ export function resolveAssistantMessageForPersistence(message) {
|
|
|
30
30
|
* - 若无 tool call,则回退到 message 文本内容。
|
|
31
31
|
*/
|
|
32
32
|
export function pickLastSuccessfulChatSendText(message) {
|
|
33
|
-
if (!
|
|
33
|
+
if (!is_session_message_record(message))
|
|
34
34
|
return "";
|
|
35
35
|
const toolCalls = extractToolCallsFromUiMessage(message);
|
|
36
36
|
// 关键点(中文):优先从 chat_send 的 input.text 还原"用户可见回复"。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserVisibleText.js","sourceRoot":"","sources":["../../../src/executor/messages/UserVisibleText.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"UserVisibleText.js","sourceRoot":"","sources":["../../../src/executor/messages/UserVisibleText.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,yBAAyB,GAG1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;AAEnC;;;;;;GAMG;AACH,MAAM,UAAU,qCAAqC,CACnD,OAA2C;IAE3C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzD,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAA2C;IAE3C,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,SAAS,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACzD,iDAAiD;IACjD,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,WAAW;YAAE,SAAS;QAEpD,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,MAAM,IAAI,GAAG,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,CAAC,wBAAwB;QAE/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,IACE,MAAM;gBACN,OAAO,MAAM,KAAK,QAAQ;gBACzB,MAAgC,CAAC,OAAO,KAAK,IAAI,EAClD,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - 保持与 SessionHistoryStore 的交互边界清晰,避免 Executor 自身同时承担编排与写入细节。
|
|
8
8
|
*/
|
|
9
9
|
import type { SessionHistoryStore } from "../../executor/store/history/SessionHistoryStore.js";
|
|
10
|
-
import type {
|
|
10
|
+
import type { SessionMessageRecordV1 } from "../../executor/types/SessionRecords.js";
|
|
11
11
|
interface ExecutorInflightServiceOptions {
|
|
12
12
|
/**
|
|
13
13
|
* 当前 session 标识。
|
|
@@ -33,7 +33,7 @@ export declare class ExecutorInflightService {
|
|
|
33
33
|
/**
|
|
34
34
|
* 把 step/tool 过程增量写入当前运行中的 assistant 快照。
|
|
35
35
|
*/
|
|
36
|
-
append_assistant_step_parts(parts:
|
|
36
|
+
append_assistant_step_parts(parts: SessionMessageRecordV1["parts"]): Promise<void>;
|
|
37
37
|
}
|
|
38
38
|
export {};
|
|
39
39
|
//# sourceMappingURL=ExecutorInflightService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutorInflightService.d.ts","sourceRoot":"","sources":["../../../src/executor/services/ExecutorInflightService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ExecutorInflightService.d.ts","sourceRoot":"","sources":["../../../src/executor/services/ExecutorInflightService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAGjF,UAAU,8BAA8B;IACtC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;OAEG;IACH,+BAA+B,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAoE;gBAEzG,OAAO,EAAE,8BAA8B;IAWnD;;OAEG;IACG,2BAA2B,CAC/B,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,GACrC,OAAO,CAAC,IAAI,CAAC;CAiDjB"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - 保持与 SessionHistoryStore 的交互边界清晰,避免 Executor 自身同时承担编排与写入细节。
|
|
8
8
|
*/
|
|
9
9
|
import { generateId } from "../../utils/Id.js";
|
|
10
|
-
import {
|
|
10
|
+
import { is_session_message_record } from "../../executor/types/SessionRecords.js";
|
|
11
11
|
/**
|
|
12
12
|
* 运行中 assistant 快照写入服务。
|
|
13
13
|
*/
|
|
@@ -33,8 +33,8 @@ export class ExecutorInflightService {
|
|
|
33
33
|
: [];
|
|
34
34
|
if (normalized_parts.length === 0)
|
|
35
35
|
return;
|
|
36
|
-
const current_inflight = await this.history_store.
|
|
37
|
-
const normalized_inflight =
|
|
36
|
+
const current_inflight = await this.history_store.read_inflight();
|
|
37
|
+
const normalized_inflight = is_session_message_record(current_inflight)
|
|
38
38
|
? current_inflight
|
|
39
39
|
: null;
|
|
40
40
|
const next_message = normalized_inflight
|
|
@@ -70,7 +70,7 @@ export class ExecutorInflightService {
|
|
|
70
70
|
},
|
|
71
71
|
parts: normalized_parts,
|
|
72
72
|
};
|
|
73
|
-
await this.history_store.
|
|
73
|
+
await this.history_store.write_inflight(next_message);
|
|
74
74
|
if (this.run_after_session_updated_async) {
|
|
75
75
|
await this.run_after_session_updated_async();
|
|
76
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutorInflightService.js","sourceRoot":"","sources":["../../../src/executor/services/ExecutorInflightService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ExecutorInflightService.js","sourceRoot":"","sources":["../../../src/executor/services/ExecutorInflightService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAmB/E;;GAEG;AACH,MAAM,OAAO,uBAAuB;IACjB,UAAU,CAAS;IACnB,aAAa,CAAsB;IACnC,+BAA+B,CAAqE;IAErH,YAAY,OAAuC;QACjD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,+BAA+B;YAClC,OAAO,CAAC,+BAA+B,CAAC;QAE1C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,2BAA2B,CAC/B,KAAsC;QAEtC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAC3C,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC;YAC1D,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE1C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAClE,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,gBAAgB,CAAC;YACrE,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,YAAY,GAA2B,mBAAmB;YAC9D,CAAC,CAAC;gBACE,GAAG,mBAAmB;gBACtB,QAAQ,EAAE;oBACR,GAAG,CAAC,mBAAmB,CAAC,QAAQ,IAAI;wBAClC,CAAC,EAAE,CAAU;wBACb,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;wBACd,SAAS,EAAE,IAAI,CAAC,UAAU;qBAC3B,CAAC;oBACF,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;oBACd,SAAS,EAAE,IAAI,CAAC,UAAU;oBAC1B,MAAM,EAAE,QAAQ;oBAChB,IAAI,EAAE,QAAQ;iBACf;gBACD,KAAK,EAAE;oBACL,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC;wBAC1C,CAAC,CAAC,mBAAmB,CAAC,KAAK;wBAC3B,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,gBAAgB;iBACpB;aACF;YACH,CAAC,CAAC;gBACE,EAAE,EAAE,KAAK,IAAI,CAAC,UAAU,IAAI,UAAU,EAAE,EAAE;gBAC1C,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE;oBACR,CAAC,EAAE,CAAC;oBACJ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;oBACd,SAAS,EAAE,IAAI,CAAC,UAAU;oBAC1B,MAAM,EAAE,QAAQ;oBAChB,IAAI,EAAE,QAAQ;iBACf;gBACD,KAAK,EAAE,gBAAgB;aACxB,CAAC;QAEN,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,+BAA+B,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,+BAA+B,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SessionHistoryStore
|
|
2
|
+
* SessionHistoryStore:会话 record 事实源接口。
|
|
3
3
|
*
|
|
4
4
|
* 关键点(中文)
|
|
5
|
-
* - Store
|
|
6
|
-
* - Composer 只负责把 Store
|
|
5
|
+
* - Store 负责 records、meta、archive、lock 等持久化能力。
|
|
6
|
+
* - Composer 只负责把 Store 中的模型消息 record 组装成本轮模型输入。
|
|
7
7
|
* - 这个接口刻意独立于 Composer,避免把“落盘事实源”误当成“组装策略”。
|
|
8
8
|
*/
|
|
9
9
|
import type { LanguageModel } from "ai";
|
|
10
|
-
import type {
|
|
10
|
+
import type { SessionActionRecordV1, SessionRecordV1, SessionMetadataV1 } from "../../../executor/types/SessionRecords.js";
|
|
11
11
|
import type { SessionSystemMessage } from "../../../executor/types/SessionPrompts.js";
|
|
12
|
-
import type { AgentSessionActionRecord } from "../../../types/sdk/AgentSessionAction.js";
|
|
13
12
|
/**
|
|
14
13
|
* compact 输入参数。
|
|
15
14
|
*/
|
|
@@ -41,7 +40,7 @@ export type SessionHistoryCompactInput = {
|
|
|
41
40
|
/**
|
|
42
41
|
* 可选 action 发布回调。
|
|
43
42
|
*/
|
|
44
|
-
onAction?: (action:
|
|
43
|
+
onAction?: (action: SessionActionRecordV1) => Promise<void>;
|
|
45
44
|
};
|
|
46
45
|
/**
|
|
47
46
|
* 会话历史事实源。
|
|
@@ -52,33 +51,37 @@ export interface SessionHistoryStore {
|
|
|
52
51
|
*/
|
|
53
52
|
readonly sessionId: string;
|
|
54
53
|
/**
|
|
55
|
-
*
|
|
54
|
+
* 写入一条 session record。
|
|
55
|
+
*
|
|
56
|
+
* 说明(中文)
|
|
57
|
+
* - 模型消息会追加到 JSONL。
|
|
58
|
+
* - action record 会按稳定 ID upsert 为同一条 record。
|
|
56
59
|
*/
|
|
57
|
-
|
|
60
|
+
write_record(message: SessionRecordV1): Promise<void>;
|
|
58
61
|
/**
|
|
59
62
|
* 读取当前运行中的 assistant 快照。
|
|
60
63
|
*/
|
|
61
|
-
|
|
64
|
+
read_inflight(): Promise<SessionRecordV1 | null>;
|
|
62
65
|
/**
|
|
63
66
|
* 写入当前运行中的 assistant 快照。
|
|
64
67
|
*/
|
|
65
|
-
|
|
68
|
+
write_inflight(message: SessionRecordV1): Promise<void>;
|
|
66
69
|
/**
|
|
67
70
|
* 用最终 assistant 收口 inflight 快照。
|
|
68
71
|
*/
|
|
69
|
-
|
|
72
|
+
finalize_inflight(message?: SessionRecordV1 | null): Promise<void>;
|
|
70
73
|
/**
|
|
71
|
-
*
|
|
74
|
+
* 读取完整 session records。
|
|
72
75
|
*/
|
|
73
|
-
|
|
76
|
+
list_records(): Promise<SessionRecordV1[]>;
|
|
74
77
|
/**
|
|
75
|
-
*
|
|
78
|
+
* 读取 session record 区间 [start, end)。
|
|
76
79
|
*/
|
|
77
|
-
|
|
80
|
+
slice_records(start: number, end: number): Promise<SessionRecordV1[]>;
|
|
78
81
|
/**
|
|
79
|
-
*
|
|
82
|
+
* 读取 session record 总条数。
|
|
80
83
|
*/
|
|
81
|
-
|
|
84
|
+
record_count(): Promise<number>;
|
|
82
85
|
/**
|
|
83
86
|
* 读取元信息。
|
|
84
87
|
*/
|
|
@@ -106,7 +109,7 @@ export interface SessionHistoryStore {
|
|
|
106
109
|
* 可选消息 ID(默认自动生成)。
|
|
107
110
|
*/
|
|
108
111
|
id?: string;
|
|
109
|
-
}):
|
|
112
|
+
}): SessionRecordV1;
|
|
110
113
|
/**
|
|
111
114
|
* 构造 assistant 文本消息。
|
|
112
115
|
*/
|
|
@@ -131,7 +134,7 @@ export interface SessionHistoryStore {
|
|
|
131
134
|
* 消息来源(egress/compact)。
|
|
132
135
|
*/
|
|
133
136
|
source?: "egress" | "compact";
|
|
134
|
-
}):
|
|
137
|
+
}): SessionRecordV1;
|
|
135
138
|
/**
|
|
136
139
|
* 构造 action 消息。
|
|
137
140
|
*/
|
|
@@ -139,7 +142,7 @@ export interface SessionHistoryStore {
|
|
|
139
142
|
/**
|
|
140
143
|
* 当前 action 结构化记录。
|
|
141
144
|
*/
|
|
142
|
-
action:
|
|
145
|
+
action: SessionActionRecordV1;
|
|
143
146
|
/**
|
|
144
147
|
* 消息元信息(除 schema 字段)。
|
|
145
148
|
*/
|
|
@@ -148,6 +151,6 @@ export interface SessionHistoryStore {
|
|
|
148
151
|
* 可选消息 ID(默认自动生成)。
|
|
149
152
|
*/
|
|
150
153
|
id?: string;
|
|
151
|
-
}):
|
|
154
|
+
}): SessionActionRecordV1;
|
|
152
155
|
}
|
|
153
156
|
//# sourceMappingURL=SessionHistoryStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionHistoryStore.d.ts","sourceRoot":"","sources":["../../../../src/executor/store/history/SessionHistoryStore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"SessionHistoryStore.d.ts","sourceRoot":"","sources":["../../../../src/executor/store/history/SessionHistoryStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SessionHistoryStore
|
|
2
|
+
* SessionHistoryStore:会话 record 事实源接口。
|
|
3
3
|
*
|
|
4
4
|
* 关键点(中文)
|
|
5
|
-
* - Store
|
|
6
|
-
* - Composer 只负责把 Store
|
|
5
|
+
* - Store 负责 records、meta、archive、lock 等持久化能力。
|
|
6
|
+
* - Composer 只负责把 Store 中的模型消息 record 组装成本轮模型输入。
|
|
7
7
|
* - 这个接口刻意独立于 Composer,避免把“落盘事实源”误当成“组装策略”。
|
|
8
8
|
*/
|
|
9
9
|
export {};
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* JsonlSessionHistoryStore:基于 JSONL 的 session
|
|
2
|
+
* JsonlSessionHistoryStore:基于 JSONL 的 session records 事实源。
|
|
3
3
|
*
|
|
4
4
|
* 关键点(中文)
|
|
5
5
|
* - 负责 `.downcity/.../messages/messages.jsonl`、`meta.json`、archive 与文件锁。
|
|
6
6
|
* - append 与 compact 共用同一把文件锁,避免并发覆盖。
|
|
7
7
|
* - 不负责为模型组装 messages;组装逻辑放在 `JsonlSessionHistoryComposer`。
|
|
8
8
|
*/
|
|
9
|
-
import type {
|
|
10
|
-
import type { AgentSessionActionRecord } from "../../../../types/sdk/AgentSessionAction.js";
|
|
9
|
+
import type { SessionActionRecordV1, SessionRecordV1, SessionMetadataV1 } from "../../../../executor/types/SessionRecords.js";
|
|
11
10
|
import type { SessionHistoryPathOverrides } from "../../../../executor/types/SessionHistoryPaths.js";
|
|
12
11
|
import type { SessionHistoryCompactInput, SessionHistoryStore } from "../../../../executor/store/history/SessionHistoryStore.js";
|
|
13
12
|
/**
|
|
@@ -59,24 +58,24 @@ export declare class JsonlSessionHistoryStore implements SessionHistoryStore {
|
|
|
59
58
|
private ensureLayout;
|
|
60
59
|
private normalizeText;
|
|
61
60
|
private normalizePersistedMessage;
|
|
62
|
-
private
|
|
61
|
+
private normalize_action_record;
|
|
63
62
|
private hasStructuredAssistantParts;
|
|
64
63
|
private mergeInflightWithFinal;
|
|
65
64
|
private readMetaUnsafe;
|
|
66
65
|
private writeMetaUnsafe;
|
|
67
|
-
private
|
|
68
|
-
private
|
|
66
|
+
private read_inflight_unsafe;
|
|
67
|
+
private write_inflight_unsafe;
|
|
69
68
|
private removeInflightUnsafe;
|
|
70
69
|
private appendMessageUnsafe;
|
|
71
70
|
private rewriteMessagesUnsafe;
|
|
72
|
-
private
|
|
71
|
+
private upsert_action_record_unsafe;
|
|
73
72
|
private withWriteLock;
|
|
74
73
|
private normalizeSystem;
|
|
75
74
|
compact(input: SessionHistoryCompactInput): Promise<{
|
|
76
75
|
compacted: boolean;
|
|
77
76
|
reason?: string;
|
|
78
77
|
}>;
|
|
79
|
-
|
|
78
|
+
write_record(message: SessionRecordV1): Promise<void>;
|
|
80
79
|
/**
|
|
81
80
|
* 批量追加消息。
|
|
82
81
|
*
|
|
@@ -84,30 +83,30 @@ export declare class JsonlSessionHistoryStore implements SessionHistoryStore {
|
|
|
84
83
|
* - 一次锁、一次 IO,适合 fork 等需要拷贝整段历史的场景。
|
|
85
84
|
* - 不处理 inflight,调用方需自行确保历史已经收口。
|
|
86
85
|
*/
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
86
|
+
write_records(messages: SessionRecordV1[]): Promise<void>;
|
|
87
|
+
read_inflight(): Promise<SessionRecordV1 | null>;
|
|
88
|
+
write_inflight(message: SessionRecordV1): Promise<void>;
|
|
89
|
+
finalize_inflight(message?: SessionRecordV1 | null): Promise<void>;
|
|
90
|
+
list_records(): Promise<SessionRecordV1[]>;
|
|
91
|
+
slice_records(start: number, end: number): Promise<SessionRecordV1[]>;
|
|
92
|
+
record_count(): Promise<number>;
|
|
94
93
|
meta(): Promise<Record<string, unknown>>;
|
|
95
94
|
userText(input: {
|
|
96
95
|
text: string;
|
|
97
96
|
metadata: Omit<SessionMetadataV1, "v" | "ts"> & Partial<Pick<SessionMetadataV1, "ts">>;
|
|
98
97
|
id?: string;
|
|
99
|
-
}):
|
|
98
|
+
}): SessionRecordV1;
|
|
100
99
|
assistantText(input: {
|
|
101
100
|
text: string;
|
|
102
101
|
metadata: Omit<SessionMetadataV1, "v" | "ts"> & Partial<Pick<SessionMetadataV1, "ts">>;
|
|
103
102
|
id?: string;
|
|
104
103
|
kind?: "normal" | "summary";
|
|
105
104
|
source?: "egress" | "compact";
|
|
106
|
-
}):
|
|
105
|
+
}): SessionRecordV1;
|
|
107
106
|
action(input: {
|
|
108
|
-
action:
|
|
107
|
+
action: SessionActionRecordV1;
|
|
109
108
|
metadata: Pick<SessionMetadataV1, "sessionId"> & Partial<Pick<SessionMetadataV1, "ts">>;
|
|
110
109
|
id?: string;
|
|
111
|
-
}):
|
|
110
|
+
}): SessionActionRecordV1;
|
|
112
111
|
}
|
|
113
112
|
//# sourceMappingURL=JsonlSessionHistoryStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonlSessionHistoryStore.d.ts","sourceRoot":"","sources":["../../../../../src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"JsonlSessionHistoryStore.d.ts","sourceRoot":"","sources":["../../../../../src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* JsonlSessionHistoryStore:基于 JSONL 的 session
|
|
2
|
+
* JsonlSessionHistoryStore:基于 JSONL 的 session records 事实源。
|
|
3
3
|
*
|
|
4
4
|
* 关键点(中文)
|
|
5
5
|
* - 负责 `.downcity/.../messages/messages.jsonl`、`meta.json`、archive 与文件锁。
|
|
@@ -12,7 +12,7 @@ import path from "node:path";
|
|
|
12
12
|
import { generateId } from "../../../../utils/Id.js";
|
|
13
13
|
import { getLogger } from "../../../../utils/logger/Logger.js";
|
|
14
14
|
import { compactSessionMessagesIfNeeded } from "../../../composer/compaction/jsonl/JsonlSessionCompactionExecutor.js";
|
|
15
|
-
import {
|
|
15
|
+
import { is_session_action_record, is_session_message_record, to_session_action_record, } from "../../../../executor/types/SessionRecords.js";
|
|
16
16
|
function getDowncityDirPath(rootPath) {
|
|
17
17
|
return path.join(rootPath, ".downcity");
|
|
18
18
|
}
|
|
@@ -124,7 +124,7 @@ export class JsonlSessionHistoryStore {
|
|
|
124
124
|
if (!input || typeof input !== "object")
|
|
125
125
|
return null;
|
|
126
126
|
if (input.type === "action") {
|
|
127
|
-
return this.
|
|
127
|
+
return this.normalize_action_record(input);
|
|
128
128
|
}
|
|
129
129
|
const candidate = input;
|
|
130
130
|
const role = String(candidate.role || "");
|
|
@@ -135,7 +135,7 @@ export class JsonlSessionHistoryStore {
|
|
|
135
135
|
return null;
|
|
136
136
|
return input;
|
|
137
137
|
}
|
|
138
|
-
|
|
138
|
+
normalize_action_record(input) {
|
|
139
139
|
if (!input || typeof input !== "object")
|
|
140
140
|
return null;
|
|
141
141
|
const candidate = input;
|
|
@@ -170,7 +170,7 @@ export class JsonlSessionHistoryStore {
|
|
|
170
170
|
};
|
|
171
171
|
}
|
|
172
172
|
hasStructuredAssistantParts(message) {
|
|
173
|
-
if (!
|
|
173
|
+
if (!is_session_message_record(message) ||
|
|
174
174
|
message.role !== "assistant" ||
|
|
175
175
|
!Array.isArray(message.parts)) {
|
|
176
176
|
return false;
|
|
@@ -183,9 +183,9 @@ export class JsonlSessionHistoryStore {
|
|
|
183
183
|
});
|
|
184
184
|
}
|
|
185
185
|
mergeInflightWithFinal(inflight, finalMessage) {
|
|
186
|
-
if (!
|
|
186
|
+
if (!is_session_message_record(finalMessage))
|
|
187
187
|
return inflight;
|
|
188
|
-
if (!
|
|
188
|
+
if (!is_session_message_record(inflight))
|
|
189
189
|
return finalMessage;
|
|
190
190
|
const final_parts = Array.isArray(finalMessage.parts)
|
|
191
191
|
? finalMessage.parts.filter((part) => part && typeof part === "object")
|
|
@@ -288,7 +288,7 @@ export class JsonlSessionHistoryStore {
|
|
|
288
288
|
};
|
|
289
289
|
await fs.writeJson(this.getMetaFilePath(), normalized, { spaces: 2 });
|
|
290
290
|
}
|
|
291
|
-
async
|
|
291
|
+
async read_inflight_unsafe() {
|
|
292
292
|
const file = this.getInflightFilePath();
|
|
293
293
|
try {
|
|
294
294
|
const raw = await fs.readJson(file);
|
|
@@ -298,9 +298,9 @@ export class JsonlSessionHistoryStore {
|
|
|
298
298
|
return null;
|
|
299
299
|
}
|
|
300
300
|
}
|
|
301
|
-
async
|
|
301
|
+
async write_inflight_unsafe(message) {
|
|
302
302
|
const normalized = this.normalizePersistedMessage(message);
|
|
303
|
-
if (!
|
|
303
|
+
if (!is_session_message_record(normalized) ||
|
|
304
304
|
normalized.role !== "assistant") {
|
|
305
305
|
throw new Error("inflight assistant must be an assistant UIMessage");
|
|
306
306
|
}
|
|
@@ -325,7 +325,7 @@ export class JsonlSessionHistoryStore {
|
|
|
325
325
|
await fs.writeFile(temp, payload, "utf8");
|
|
326
326
|
await fs.move(temp, file, { overwrite: true });
|
|
327
327
|
}
|
|
328
|
-
async
|
|
328
|
+
async upsert_action_record_unsafe(message) {
|
|
329
329
|
const file = this.getMessagesFilePath();
|
|
330
330
|
const raw = await fs.readFile(file, "utf8").catch(() => "");
|
|
331
331
|
const messages = [];
|
|
@@ -335,7 +335,7 @@ export class JsonlSessionHistoryStore {
|
|
|
335
335
|
const current = this.normalizePersistedMessage(JSON.parse(line));
|
|
336
336
|
if (!current)
|
|
337
337
|
continue;
|
|
338
|
-
if (
|
|
338
|
+
if (is_session_action_record(current) && current.id === message.id) {
|
|
339
339
|
messages.push(message);
|
|
340
340
|
replaced = true;
|
|
341
341
|
continue;
|
|
@@ -416,7 +416,7 @@ export class JsonlSessionHistoryStore {
|
|
|
416
416
|
rootPath: this.rootPath,
|
|
417
417
|
sessionId: this.sessionId,
|
|
418
418
|
withWriteLock: (fn) => this.withWriteLock(fn),
|
|
419
|
-
loadAll: () => this.
|
|
419
|
+
loadAll: () => this.list_records(),
|
|
420
420
|
createSummaryMessage: ({ text, archiveId, sourceRange }) => ({
|
|
421
421
|
id: `a:${this.sessionId}:${generateId()}`,
|
|
422
422
|
role: "assistant",
|
|
@@ -445,19 +445,19 @@ export class JsonlSessionHistoryStore {
|
|
|
445
445
|
...(input.onAction ? { onAction: input.onAction } : {}),
|
|
446
446
|
});
|
|
447
447
|
}
|
|
448
|
-
async
|
|
448
|
+
async write_record(message) {
|
|
449
449
|
await this.withWriteLock(async () => {
|
|
450
450
|
const normalized = this.normalizePersistedMessage(message);
|
|
451
451
|
if (!normalized)
|
|
452
452
|
return;
|
|
453
|
-
if (
|
|
454
|
-
await this.
|
|
453
|
+
if (is_session_action_record(normalized)) {
|
|
454
|
+
await this.upsert_action_record_unsafe(normalized);
|
|
455
455
|
return;
|
|
456
456
|
}
|
|
457
457
|
// 关键点(中文):若上一次 assistant 在运行中中断,新的 user 到来前先把残留快照收口到正式历史,
|
|
458
|
-
// 避免 `
|
|
459
|
-
if (
|
|
460
|
-
const current_inflight = await this.
|
|
458
|
+
// 避免 `list_records()` 时旧 inflight 跑到新 user 后面,打乱时序。
|
|
459
|
+
if (is_session_message_record(normalized) && normalized.role === "user") {
|
|
460
|
+
const current_inflight = await this.read_inflight_unsafe();
|
|
461
461
|
if (current_inflight) {
|
|
462
462
|
await this.appendMessageUnsafe(current_inflight);
|
|
463
463
|
await this.removeInflightUnsafe();
|
|
@@ -473,7 +473,7 @@ export class JsonlSessionHistoryStore {
|
|
|
473
473
|
* - 一次锁、一次 IO,适合 fork 等需要拷贝整段历史的场景。
|
|
474
474
|
* - 不处理 inflight,调用方需自行确保历史已经收口。
|
|
475
475
|
*/
|
|
476
|
-
async
|
|
476
|
+
async write_records(messages) {
|
|
477
477
|
if (!Array.isArray(messages) || messages.length === 0)
|
|
478
478
|
return;
|
|
479
479
|
const normalized_list = messages
|
|
@@ -488,18 +488,18 @@ export class JsonlSessionHistoryStore {
|
|
|
488
488
|
await fs.appendFile(this.getMessagesFilePath(), payload, "utf8");
|
|
489
489
|
});
|
|
490
490
|
}
|
|
491
|
-
async
|
|
491
|
+
async read_inflight() {
|
|
492
492
|
await this.ensureLayout();
|
|
493
|
-
return this.
|
|
493
|
+
return this.read_inflight_unsafe();
|
|
494
494
|
}
|
|
495
|
-
async
|
|
495
|
+
async write_inflight(message) {
|
|
496
496
|
await this.withWriteLock(async () => {
|
|
497
|
-
await this.
|
|
497
|
+
await this.write_inflight_unsafe(message);
|
|
498
498
|
});
|
|
499
499
|
}
|
|
500
|
-
async
|
|
500
|
+
async finalize_inflight(message) {
|
|
501
501
|
await this.withWriteLock(async () => {
|
|
502
|
-
const current_inflight = await this.
|
|
502
|
+
const current_inflight = await this.read_inflight_unsafe();
|
|
503
503
|
const normalized_message = this.normalizePersistedMessage(message);
|
|
504
504
|
const final_message = current_inflight && normalized_message
|
|
505
505
|
? this.mergeInflightWithFinal(current_inflight, normalized_message)
|
|
@@ -512,7 +512,7 @@ export class JsonlSessionHistoryStore {
|
|
|
512
512
|
}
|
|
513
513
|
});
|
|
514
514
|
}
|
|
515
|
-
async
|
|
515
|
+
async list_records() {
|
|
516
516
|
await this.ensureLayout();
|
|
517
517
|
const file = this.getMessagesFilePath();
|
|
518
518
|
const raw = await fs.readFile(file, "utf8");
|
|
@@ -529,20 +529,20 @@ export class JsonlSessionHistoryStore {
|
|
|
529
529
|
// ignore invalid lines
|
|
530
530
|
}
|
|
531
531
|
}
|
|
532
|
-
const current_inflight = await this.
|
|
532
|
+
const current_inflight = await this.read_inflight_unsafe();
|
|
533
533
|
if (current_inflight) {
|
|
534
534
|
out.push(current_inflight);
|
|
535
535
|
}
|
|
536
536
|
return out;
|
|
537
537
|
}
|
|
538
|
-
async
|
|
539
|
-
const msgs = await this.
|
|
538
|
+
async slice_records(start, end) {
|
|
539
|
+
const msgs = await this.list_records();
|
|
540
540
|
const startIndex = Math.max(0, Math.floor(start));
|
|
541
541
|
const endIndex = Math.max(startIndex, Math.floor(end));
|
|
542
542
|
return msgs.slice(startIndex, endIndex);
|
|
543
543
|
}
|
|
544
|
-
async
|
|
545
|
-
const msgs = await this.
|
|
544
|
+
async record_count() {
|
|
545
|
+
const msgs = await this.list_records();
|
|
546
546
|
return msgs.length;
|
|
547
547
|
}
|
|
548
548
|
async meta() {
|
|
@@ -586,10 +586,7 @@ export class JsonlSessionHistoryStore {
|
|
|
586
586
|
}
|
|
587
587
|
action(input) {
|
|
588
588
|
const { ts, ...metadata } = input.metadata;
|
|
589
|
-
const message =
|
|
590
|
-
...input.action,
|
|
591
|
-
...(input.id ? { id: input.id } : {}),
|
|
592
|
-
}, metadata.sessionId || this.sessionId);
|
|
589
|
+
const message = to_session_action_record(input.id ? { ...input.action, id: input.id } : input.action, metadata.sessionId || this.sessionId);
|
|
593
590
|
return {
|
|
594
591
|
...message,
|
|
595
592
|
metadata: {
|