Add remote thread store bridge

This commit is contained in:
Tom Wiltzius
2026-04-13 09:41:07 -07:00
parent 7adf7ef24b
commit 9540d4afb6
21 changed files with 2600 additions and 16 deletions

View File

@@ -0,0 +1,225 @@
# @generated by scripts/generate_thread_store_bridge_python.py
from __future__ import annotations
from dataclasses import dataclass
from typing import Any, Protocol
@dataclass(frozen=True, kw_only=True)
class OpaqueBytes:
codec: str
contentType: str
data: bytes
@dataclass(frozen=True, kw_only=True)
class ThreadOwner:
chatgptUserId: str | None = None
accountId: str | None = None
authMode: str | None = None
@dataclass(frozen=True, kw_only=True)
class RemoteThreadMetadata:
threadId: str
forkedFromId: str | None = None
owner: ThreadOwner
preview: str
name: str | None = None
modelProvider: str
model: str | None = None
serviceTier: Any | None = None
reasoningEffort: Any | None = None
createdAt: int
updatedAt: int
archivedAt: int | None = None
cwd: str
cliVersion: str
source: Any
agentNickname: str | None = None
agentRole: str | None = None
agentPath: str | None = None
gitInfo: Any | None = None
approvalMode: Any
sandboxPolicy: Any
tokenUsage: Any | None = None
firstUserMessage: str | None = None
memoryMode: str | None = None
@dataclass(frozen=True, kw_only=True)
class ThreadIndexPatch:
updatedAt: int
firstUserMessage: str | None = None
preview: str | None = None
name: str | None = None
tokenUsage: Any | None = None
memoryMode: str | None = None
@dataclass(frozen=True, kw_only=True)
class CreateThreadRequest:
thread: RemoteThreadMetadata
initialItems: OpaqueBytes
initialPayloadCodec: str
eventPersistenceMode: str
@dataclass(frozen=True, kw_only=True)
class ResumeThreadRecorderRequest:
threadId: str
owner: ThreadOwner
includeArchived: bool
eventPersistenceMode: str
@dataclass(frozen=True, kw_only=True)
class AppendThreadRequest:
threadId: str
owner: ThreadOwner
idempotencyKey: str | None = None
updatedAt: int | None = None
newThreadMemoryMode: str | None = None
eventPersistenceMode: str | None = None
indexPatch: ThreadIndexPatch
items: OpaqueBytes
payloadCodec: str
@dataclass(frozen=True, kw_only=True)
class LoadThreadHistoryRequest:
threadId: str
owner: ThreadOwner
includeArchived: bool
@dataclass(frozen=True, kw_only=True)
class LoadThreadHistoryResponse:
threadId: str
payloadCodec: str
history: OpaqueBytes
@dataclass(frozen=True, kw_only=True)
class ReadThreadRequest:
threadId: str
owner: ThreadOwner
includeArchived: bool
includeHistory: bool
@dataclass(frozen=True, kw_only=True)
class ReadThreadResponse:
thread: RemoteThreadMetadata
historyPayloadCodec: str | None = None
history: OpaqueBytes | None = None
@dataclass(frozen=True, kw_only=True)
class ListThreadsRequest:
owner: ThreadOwner
pageSize: int
cursor: str | None = None
sortKey: str
allowedSources: list[Any]
modelProviders: list[str] | None = None
archived: bool
cwd: str | None = None
searchTerm: str | None = None
@dataclass(frozen=True, kw_only=True)
class ListThreadsResponse:
items: list[RemoteThreadMetadata]
nextCursor: str | None = None
scanned: int | None = None
@dataclass(frozen=True, kw_only=True)
class FindThreadByNameRequest:
owner: ThreadOwner
name: str
includeArchived: bool
cwd: str | None = None
allowedSources: list[Any]
modelProviders: list[str] | None = None
@dataclass(frozen=True, kw_only=True)
class FindThreadByNameResponse:
thread: RemoteThreadMetadata | None = None
@dataclass(frozen=True, kw_only=True)
class SetThreadNameRequest:
threadId: str
owner: ThreadOwner
name: str
@dataclass(frozen=True, kw_only=True)
class UpdateThreadMetadataRequest:
threadId: str
owner: ThreadOwner
patch: Any
@dataclass(frozen=True, kw_only=True)
class ArchiveThreadRequest:
threadId: str
owner: ThreadOwner
@dataclass(frozen=True, kw_only=True)
class DynamicToolsRequest:
threadId: str
owner: ThreadOwner
@dataclass(frozen=True, kw_only=True)
class DynamicToolsResponse:
dynamicTools: list[Any] | None = None
@dataclass(frozen=True, kw_only=True)
class MemoryModeRequest:
threadId: str
owner: ThreadOwner
@dataclass(frozen=True, kw_only=True)
class MemoryModeResponse:
memoryMode: str | None = None
@dataclass(frozen=True, kw_only=True)
class SetMemoryModeRequest:
threadId: str
owner: ThreadOwner
memoryMode: str
@dataclass(frozen=True, kw_only=True)
class ThreadSpawnEdgeRecord:
parentThreadId: str
childThreadId: str
status: str
@dataclass(frozen=True, kw_only=True)
class ListThreadSpawnEdgesRequest:
threadId: str
owner: ThreadOwner
recursive: bool
status: str | None = None
@dataclass(frozen=True, kw_only=True)
class ListThreadSpawnEdgesResponse:
edges: list[ThreadSpawnEdgeRecord]
@dataclass(frozen=True, kw_only=True)
class FindThreadSpawnByPathRequest:
threadId: str
owner: ThreadOwner
recursive: bool
agentPath: str
@dataclass(frozen=True, kw_only=True)
class FindThreadSpawnByPathResponse:
threadId: str | None = None
class ThreadStoreBridgeService(Protocol):
async def create_thread(self, request: CreateThreadRequest) -> None: ...
async def resume_thread_recorder(self, request: ResumeThreadRecorderRequest) -> None: ...
async def append_thread_items(self, request: AppendThreadRequest) -> None: ...
async def load_thread_history(self, request: LoadThreadHistoryRequest) -> LoadThreadHistoryResponse: ...
async def read_thread(self, request: ReadThreadRequest) -> ReadThreadResponse: ...
async def list_threads(self, request: ListThreadsRequest) -> ListThreadsResponse: ...
async def find_thread_by_name(self, request: FindThreadByNameRequest) -> FindThreadByNameResponse: ...
async def set_thread_name(self, request: SetThreadNameRequest) -> None: ...
async def update_thread_metadata(self, request: UpdateThreadMetadataRequest) -> ReadThreadResponse: ...
async def archive_thread(self, request: ArchiveThreadRequest) -> None: ...
async def unarchive_thread(self, request: ArchiveThreadRequest) -> ReadThreadResponse: ...
async def dynamic_tools(self, request: DynamicToolsRequest) -> DynamicToolsResponse: ...
async def memory_mode(self, request: MemoryModeRequest) -> MemoryModeResponse: ...
async def set_memory_mode(self, request: SetMemoryModeRequest) -> None: ...
async def mark_memory_mode_polluted(self, request: MemoryModeRequest) -> None: ...
async def upsert_thread_spawn_edge(self, request: ThreadSpawnEdgeRecord) -> None: ...
async def list_thread_spawn_edges(self, request: ListThreadSpawnEdgesRequest) -> ListThreadSpawnEdgesResponse: ...
async def find_thread_spawn_by_path(self, request: FindThreadSpawnByPathRequest) -> FindThreadSpawnByPathResponse: ...