mirror of
https://github.com/kennethnym/freya
synced 2026-07-07 08:11:15 +01:00
refactor: move conversation types to core (#149)
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { ConversationEntryKind } from "@freya/core"
|
||||
import { describe, expect, test } from "bun:test"
|
||||
|
||||
import type { AppendConversationEntryInput } from "../conversations/storage.ts"
|
||||
@@ -6,7 +7,6 @@ import type {
|
||||
ConversationStorageEntry,
|
||||
} from "./conversation-recording-query-agent.ts"
|
||||
|
||||
import { ConversationEntryKind } from "../conversations/types.ts"
|
||||
import { ConversationRecordingQueryAgent } from "./conversation-recording-query-agent.ts"
|
||||
import {
|
||||
createQueryAgentEventListeners,
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
import type { ConversationEntryMetadata } from "@freya/core"
|
||||
|
||||
import { ConversationEntryKind } from "@freya/core"
|
||||
import { randomUUID } from "node:crypto"
|
||||
|
||||
import type {
|
||||
AppendConversationEntryInput,
|
||||
ConversationEntryRow,
|
||||
} from "../conversations/storage.ts"
|
||||
import type { ConversationEntryMetadata } from "../conversations/types.ts"
|
||||
|
||||
import { ConversationEntryKind } from "../conversations/types.ts"
|
||||
import {
|
||||
createQueryAgentEventListeners,
|
||||
QueryAgentEvent,
|
||||
@@ -19,6 +20,7 @@ import {
|
||||
type QueryAgentStreamEvent,
|
||||
} from "./query-agent.ts"
|
||||
|
||||
/** Storage operations used to persist and replay query-agent conversation entries. */
|
||||
export interface ConversationStorage {
|
||||
getOrCreateConversation(): Promise<{ id: string }>
|
||||
appendEntry(
|
||||
@@ -28,11 +30,13 @@ export interface ConversationStorage {
|
||||
listEntries(conversationId: string): Promise<ConversationStorageEntry[]>
|
||||
}
|
||||
|
||||
/** Minimal persisted entry shape needed by recording and replay agents. */
|
||||
export type ConversationStorageEntry = Pick<
|
||||
ConversationEntryRow,
|
||||
"id" | "sequence" | "kind" | "payload" | "metadata" | "createdAt"
|
||||
>
|
||||
|
||||
/** Configuration for wrapping a QueryAgent with conversation recording. */
|
||||
export interface ConversationRecordingQueryAgentConfig {
|
||||
agent: QueryAgent
|
||||
storage: ConversationStorage
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ConversationEntryKind } from "@freya/core"
|
||||
import { beforeEach, describe, expect, mock, test } from "bun:test"
|
||||
|
||||
import type { QueryAgentToolbox } from "./query-agent-toolbox.ts"
|
||||
import type { QueryAgentStreamEvent } from "./query-agent.ts"
|
||||
|
||||
import { ConversationEntryKind } from "../conversations/types.ts"
|
||||
import { QueryAgentEvent } from "./query-agent.ts"
|
||||
|
||||
interface FakePiSession {
|
||||
|
||||
@@ -33,13 +33,25 @@ import {
|
||||
import { createSessionManager } from "./session-manager.ts"
|
||||
import { createFreyaAgentTools, FREYA_AGENT_TOOL_NAMES } from "./tools.ts"
|
||||
|
||||
/** Active Pi SDK session instance returned by createAgentSession. */
|
||||
type PiSession = Awaited<ReturnType<typeof createAgentSession>>["session"]
|
||||
|
||||
/** Pi event emitted when a message finishes. */
|
||||
type PiMessageEndEvent = Extract<AgentSessionEvent, { type: "message_end" }>
|
||||
|
||||
/** Message payload carried by Pi's message-end event. */
|
||||
type PiAgentMessage = PiMessageEndEvent["message"]
|
||||
|
||||
/** Pi event emitted when an agent run finishes. */
|
||||
type PiAgentEndEvent = Extract<AgentSessionEvent, { type: "agent_end" }>
|
||||
|
||||
/** Session manager created for Pi conversation replay. */
|
||||
type PiSessionManager = ReturnType<typeof createSessionManager>
|
||||
|
||||
/** Message shape accepted by the replay session manager. */
|
||||
type PiSessionMessage = Parameters<PiSessionManager["appendMessage"]>[0]
|
||||
|
||||
/** Configuration for the Pi-backed query agent. */
|
||||
export interface PiQueryAgentConfig {
|
||||
toolbox: QueryAgentToolbox
|
||||
apiKey?: string
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { ConversationEntryKind } from "@freya/core"
|
||||
import { describe, expect, test } from "bun:test"
|
||||
|
||||
import type { ConversationStorageEntry } from "./conversation-recording-query-agent.ts"
|
||||
|
||||
import { ConversationEntryKind } from "../conversations/types.ts"
|
||||
import { createSessionManager } from "./session-manager.ts"
|
||||
|
||||
describe("createSessionManager", () => {
|
||||
|
||||
@@ -1,18 +1,21 @@
|
||||
import { SessionManager } from "@earendil-works/pi-coding-agent"
|
||||
import { tmpdir } from "node:os"
|
||||
|
||||
import type { ConversationStorageEntry } from "./conversation-recording-query-agent.ts"
|
||||
|
||||
import {
|
||||
AssistantMessagePayload,
|
||||
ContextSummaryPayload,
|
||||
ConversationEntryKind,
|
||||
UserMessagePayload,
|
||||
} from "../conversations/types.ts"
|
||||
} from "@freya/core"
|
||||
import { tmpdir } from "node:os"
|
||||
|
||||
import type { ConversationStorageEntry } from "./conversation-recording-query-agent.ts"
|
||||
|
||||
/** Message shape accepted by Pi's SessionManager.appendMessage API. */
|
||||
type PiMessage = Parameters<SessionManager["appendMessage"]>[0]
|
||||
|
||||
/** Assistant message variant required when replaying stored assistant entries. */
|
||||
type PiAssistantMessage = Extract<PiMessage, { role: "assistant" }>
|
||||
|
||||
/** Inputs required to rebuild a Pi session manager from stored conversation entries. */
|
||||
export interface CreateSessionManagerInput {
|
||||
cwd?: string
|
||||
entries: ConversationStorageEntry[]
|
||||
|
||||
Reference in New Issue
Block a user