| 1 | import type { BrowserWindow } from 'electron' |
| 2 | import type { GenerateChunkEvent } from '@shared/generation' |
| 3 | import type { AppLocale } from '@shared/progress' |
| 4 | import type { PPTDatabase } from '../../db/database' |
| 5 | import type { AgentManager } from '../../agent-runtime/agent' |
| 6 | import { TypedEventBus, type RuntimeDomain } from '../../agent-runtime' |
| 7 | import type { ModelRuntimeConfig } from '../../agent-runtime/model' |
| 8 | import { createRuntimeCredentials, type RuntimeCredentials } from './credentials' |
| 9 | import { createRuntimeLocalFiles, type RuntimeLocalFiles } from './local-files' |
| 10 | import { createPageExport, type PageExport, type SessionPageFile } from './page-export' |
| 11 | import { |
| 12 | createRuntimeEmitters, |
| 13 | getDeckProgressStageBounds, |
| 14 | shouldEmitLlmStatusUpdate, |
| 15 | type LlmStatusEmissionSnapshot, |
| 16 | type RuntimeEmitters |
| 17 | } from './runtime-emitters' |
| 18 | import { |
| 19 | createSessionProjectResolver, |
| 20 | type SessionGenerationSnapshot, |
| 21 | type SessionProjectResolver |
| 22 | } from './session-project' |
| 23 | import { createSessionScaffold, type SessionScaffold } from './session-scaffold' |
| 24 | import { |
| 25 | createSessionRunStateStore, |
| 26 | getSessionRunPageCounts, |
| 27 | type BeginSessionRunStateArgs, |
| 28 | type SessionRunState, |
| 29 | type SessionRunStateStore |
| 30 | } from './session-run-state' |
| 31 | |
| 32 | export { |
| 33 | getDeckProgressStageBounds, |
| 34 | getSessionRunPageCounts, |
| 35 | shouldEmitLlmStatusUpdate |
| 36 | } |
| 37 | export type { |
| 38 | BeginSessionRunStateArgs, |
| 39 | LlmStatusEmissionSnapshot, |
| 40 | SessionGenerationSnapshot, |
| 41 | SessionPageFile, |
| 42 | SessionRunState |
| 43 | } |
| 44 | |
| 45 | /** |
| 46 | * Compatibility facade for existing handlers. Its members are assembled from |
| 47 | * focused runtime capabilities; new domains should depend on their narrow |
| 48 | * capability rather than growing this interface. |
| 49 | */ |
| 50 | export interface IpcContext |
| 51 | extends SessionProjectResolver, |
| 52 | RuntimeLocalFiles, |
| 53 | RuntimeCredentials, |
| 54 | SessionScaffold, |
| 55 | PageExport { |
| 56 | mainWindow: BrowserWindow |
| 57 | db: PPTDatabase |
| 58 | agentManager: AgentManager |
| 59 | modelRuntime: ModelRuntimeConfig |
| 60 | sessionRuns: SessionRunStateStore |
| 61 | runtimeEmitters: RuntimeEmitters |
| 62 | sessionProject: SessionProjectResolver |
| 63 | localFiles: RuntimeLocalFiles |
| 64 | credentials: RuntimeCredentials |
| 65 | sessionScaffold: SessionScaffold |
| 66 | sessionRunStates: Map<string, SessionRunState> |
| 67 | pruneFinishedSessionRunStates(now?: number): void |
| 68 | beginSessionRunState(args: BeginSessionRunStateArgs): void |
| 69 | trackSessionRunChunk(sessionId: string, chunk: GenerateChunkEvent): void |
| 70 | emitGenerateChunk(sessionId: string, chunk: GenerateChunkEvent): void |
| 71 | emitRuntimeJobStarted(args: { |
| 72 | sessionId: string |
| 73 | jobId: string |
| 74 | domain?: RuntimeDomain |
| 75 | }): void |
| 76 | emitRuntimeJobTerminal(args: { |
| 77 | sessionId: string |
| 78 | jobId: string |
| 79 | domain?: RuntimeDomain |
| 80 | status: 'completed' | 'failed' | 'cancelled' |
| 81 | errorCode?: string |
| 82 | errorMessage?: string |
| 83 | cancellationReason?: 'user' | 'timeout' | 'shutdown' |
| 84 | }): void |
| 85 | createDeckProgressEmitter( |
| 86 | sessionId: string, |
| 87 | appLocale?: AppLocale |
| 88 | ): (chunk: GenerateChunkEvent) => void |
| 89 | PLANNER_TEMPERATURE: number |
| 90 | DESIGN_CONTRACT_TEMPERATURE: number |
| 91 | PAGE_GENERATION_TEMPERATURE: number |
| 92 | PAGE_EDIT_WITH_SELECTOR_TEMPERATURE: number |
| 93 | PAGE_EDIT_DEFAULT_TEMPERATURE: number |
| 94 | } |
| 95 | |
| 96 | const PLANNER_TEMPERATURE = 0.1 |
| 97 | const DESIGN_CONTRACT_TEMPERATURE = 0.25 |
| 98 | const PAGE_GENERATION_TEMPERATURE = 0.65 |
| 99 | const PAGE_EDIT_WITH_SELECTOR_TEMPERATURE = 0.15 |
| 100 | const PAGE_EDIT_DEFAULT_TEMPERATURE = 0.45 |
| 101 | |
| 102 | export function createIpcContext( |
| 103 | mainWindow: BrowserWindow, |
| 104 | db: PPTDatabase, |
| 105 | agentManager: AgentManager, |
| 106 | runtimeEvents = new TypedEventBus(), |
| 107 | modelRuntime: ModelRuntimeConfig = { recorder: null } |
| 108 | ): IpcContext { |
| 109 | const sessionProject = createSessionProjectResolver({ db }) |
| 110 | const localFiles = createRuntimeLocalFiles({ db, sessionProject }) |
| 111 | const sessionRuns = createSessionRunStateStore() |
| 112 | const runtimeEmitters = createRuntimeEmitters({ mainWindow, runtimeEvents, sessionRuns }) |
| 113 | const credentials = createRuntimeCredentials() |
| 114 | const scaffold = createSessionScaffold() |
| 115 | const pageExport = createPageExport({ db, localFiles, sessionProject }) |
| 116 | |
| 117 | const beginSessionRunState = (args: BeginSessionRunStateArgs): void => { |
| 118 | const state = sessionRuns.beginSessionRunState(args) |
| 119 | runtimeEmitters.emitSessionRunLifecycle(state) |
| 120 | } |
| 121 | |
| 122 | return { |
| 123 | mainWindow, |
| 124 | db, |
| 125 | agentManager, |
| 126 | modelRuntime, |
| 127 | sessionRuns, |
| 128 | runtimeEmitters, |
| 129 | sessionProject, |
| 130 | localFiles, |
| 131 | credentials, |
| 132 | sessionScaffold: scaffold, |
| 133 | ...sessionProject, |
| 134 | ...localFiles, |
| 135 | ...credentials, |
| 136 | ...scaffold, |
| 137 | ...pageExport, |
| 138 | sessionRunStates: sessionRuns.sessionRunStates, |
| 139 | pruneFinishedSessionRunStates: sessionRuns.pruneFinishedSessionRunStates, |
| 140 | beginSessionRunState, |
| 141 | trackSessionRunChunk: sessionRuns.trackSessionRunChunk, |
| 142 | emitGenerateChunk: runtimeEmitters.emitGenerateChunk, |
| 143 | emitRuntimeJobStarted: runtimeEmitters.emitRuntimeJobStarted, |
| 144 | emitRuntimeJobTerminal: runtimeEmitters.emitRuntimeJobTerminal, |
| 145 | createDeckProgressEmitter: runtimeEmitters.createDeckProgressEmitter, |
| 146 | PLANNER_TEMPERATURE, |
| 147 | DESIGN_CONTRACT_TEMPERATURE, |
| 148 | PAGE_GENERATION_TEMPERATURE, |
| 149 | PAGE_EDIT_WITH_SELECTOR_TEMPERATURE, |
| 150 | PAGE_EDIT_DEFAULT_TEMPERATURE |
| 151 | } |
| 152 | } |
| 153 |