源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
import {
|
||||
loadAllAgentSessionMessages,
|
||||
mergeAgentActivityMessages,
|
||||
type AgentActivityMessage
|
||||
} from "@tutti-os/agent-activity-core";
|
||||
import {
|
||||
isWorkspaceAgentActivityOptimisticMessage,
|
||||
mergeWorkspaceAgentActivityDurableAndOverlayMessages
|
||||
} from "../shared/workspaceAgentMessageOverlay";
|
||||
|
||||
const DEFAULT_WORKSPACE_AGENT_MESSAGES_LIMIT = 20;
|
||||
|
||||
export interface AgentActivitySessionMessagesPage {
|
||||
messages: AgentActivityMessage[];
|
||||
latestVersion?: number;
|
||||
hasMore?: boolean;
|
||||
}
|
||||
|
||||
export interface WorkspaceAgentActivityListSessionMessagesInput {
|
||||
workspaceId: string;
|
||||
agentSessionId: string;
|
||||
afterVersion?: number;
|
||||
beforeVersion?: number;
|
||||
limit?: number;
|
||||
order?: "asc" | "desc";
|
||||
}
|
||||
|
||||
export async function loadWorkspaceAgentSessionMessagePages({
|
||||
workspaceId,
|
||||
agentSessionId,
|
||||
afterVersion = 0,
|
||||
limit = DEFAULT_WORKSPACE_AGENT_MESSAGES_LIMIT,
|
||||
maxPages,
|
||||
listSessionMessages
|
||||
}: {
|
||||
workspaceId?: string;
|
||||
agentSessionId: string;
|
||||
afterVersion?: number;
|
||||
limit?: number;
|
||||
maxPages?: number;
|
||||
listSessionMessages: (
|
||||
payload: WorkspaceAgentActivityListSessionMessagesInput
|
||||
) => Promise<AgentActivitySessionMessagesPage>;
|
||||
}): Promise<AgentActivityMessage[]> {
|
||||
const normalizedWorkspaceId = workspaceId?.trim() || "";
|
||||
const { messages } = await loadAllAgentSessionMessages<AgentActivityMessage>({
|
||||
afterVersion,
|
||||
...(maxPages === undefined ? {} : { maxPages }),
|
||||
listPage: async (cursor) => {
|
||||
const response = await listSessionMessages({
|
||||
workspaceId: normalizedWorkspaceId,
|
||||
agentSessionId,
|
||||
afterVersion: cursor,
|
||||
limit
|
||||
});
|
||||
return {
|
||||
messages: response.messages,
|
||||
latestVersion: response.latestVersion,
|
||||
hasMore:
|
||||
typeof response.hasMore === "boolean"
|
||||
? response.hasMore
|
||||
: response.messages.length >= limit
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
return messages;
|
||||
}
|
||||
|
||||
export function mergeWorkspaceAgentMessages(
|
||||
previous: readonly AgentActivityMessage[],
|
||||
incoming: readonly AgentActivityMessage[]
|
||||
): AgentActivityMessage[] {
|
||||
const previousDurableMessages = previous.filter(
|
||||
(message) => !isWorkspaceAgentActivityOptimisticMessage(message)
|
||||
);
|
||||
const incomingDurableMessages = incoming.filter(
|
||||
(message) => !isWorkspaceAgentActivityOptimisticMessage(message)
|
||||
);
|
||||
const durableMessages = mergeAgentActivityMessages(
|
||||
previousDurableMessages,
|
||||
incomingDurableMessages
|
||||
);
|
||||
const previousOptimisticMessages = previous.filter(
|
||||
isWorkspaceAgentActivityOptimisticMessage
|
||||
);
|
||||
const incomingOptimisticMessages = incoming.filter(
|
||||
isWorkspaceAgentActivityOptimisticMessage
|
||||
);
|
||||
const localMessages = mergeAgentActivityMessages(
|
||||
previousOptimisticMessages,
|
||||
incomingOptimisticMessages
|
||||
);
|
||||
return mergeWorkspaceAgentActivityDurableAndOverlayMessages({
|
||||
durableMessages,
|
||||
localMessages
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user