@@ -4,7 +4,7 @@ import { AgenticState, AgentState, BaseProjectState, CurrentDevState, MAX_PHASES
44import { Blueprint } from "../schemas" ;
55import { BaseCodingBehavior } from "./behaviors/base" ;
66import { createObjectLogger , StructuredLogger } from '../../logger' ;
7- import { InferenceContext } from "../inferutils/config.types" ;
7+ import { InferenceMetadata } from "../inferutils/config.types" ;
88import { getMimeType } from 'hono/utils/mime' ;
99import { normalizePath , isPathSafe } from '../../utils/pathUtils' ;
1010import { FileManager } from '../services/implementations/FileManager' ;
@@ -28,6 +28,7 @@ import { RateLimitExceededError } from "shared/types/errors";
2828import { ProjectObjective } from "./objectives/base" ;
2929import { FileOutputType } from "../schemas" ;
3030import { SecretsClient , type UserSecretsStoreStub } from '../../services/secrets/SecretsClient' ;
31+ import { StateMigration } from './stateMigration' ;
3132
3233const DEFAULT_CONVERSATION_SESSION_ID = 'default' ;
3334
@@ -66,7 +67,7 @@ export class CodeGeneratorAgent extends Agent<Env, AgentState> implements AgentI
6667 templateName : '' ,
6768 generatedFilesMap : { } ,
6869 conversationMessages : [ ] ,
69- inferenceContext : { } as InferenceContext ,
70+ metadata : { } as InferenceMetadata ,
7071 shouldBeGenerating : false ,
7172 sandboxInstanceId : undefined ,
7273 commandsHistory : [ ] ,
@@ -123,7 +124,7 @@ export class CodeGeneratorAgent extends Agent<Env, AgentState> implements AgentI
123124 ) : Promise < AgentState > {
124125 const { inferenceContext } = initArgs ;
125126 const sandboxSessionId = DeploymentManager . generateNewSessionId ( ) ;
126- this . initLogger ( inferenceContext . agentId , inferenceContext . userId , sandboxSessionId ) ;
127+ this . initLogger ( inferenceContext . metadata . agentId , inferenceContext . metadata . userId , sandboxSessionId ) ;
127128
128129 // Infrastructure setup
129130 await this . gitInit ( ) ;
@@ -148,6 +149,12 @@ export class CodeGeneratorAgent extends Agent<Env, AgentState> implements AgentI
148149 * @param props - Optional props
149150 */
150151 async onStart ( props ?: Record < string , unknown > | undefined ) : Promise < void > {
152+ // Run common migration FIRST, before any state access
153+ const migratedState = StateMigration . migrateCommon ( this . state ) ;
154+ if ( migratedState ) {
155+ this . setState ( migratedState ) ;
156+ }
157+
151158 this . logger ( ) . info ( `Agent ${ this . getAgentId ( ) } session: ${ this . state . sessionId } onStart` , { props } ) ;
152159
153160 this . logger ( ) . info ( 'Bootstrapping CodeGeneratorAgent' , { props } ) ;
@@ -171,7 +178,7 @@ export class CodeGeneratorAgent extends Agent<Env, AgentState> implements AgentI
171178 this . logger ( ) . warn ( `Agent ${ this . getAgentId ( ) } session: ${ this . state . sessionId } onStart ignored, agent not initialized` ) ;
172179 return ;
173180 }
174-
181+
175182 // Ensure state is migrated for any previous versions
176183 this . behavior . migrateStateIfNeeded ( ) ;
177184
@@ -191,14 +198,8 @@ export class CodeGeneratorAgent extends Agent<Env, AgentState> implements AgentI
191198
192199 // Load the latest user configs
193200 const modelConfigService = new ModelConfigService ( this . env ) ;
194- const userConfigsRecord = await modelConfigService . getUserModelConfigs ( this . state . inferenceContext . userId ) ;
195- this . setState ( {
196- ...this . state ,
197- inferenceContext : {
198- ...this . state . inferenceContext ,
199- userModelConfigs : userConfigsRecord ,
200- } ,
201- } ) ;
201+ const userConfigsRecord = await modelConfigService . getUserModelConfigs ( this . state . metadata . userId ) ;
202+ this . behavior . setUserModelConfigs ( userConfigsRecord ) ;
202203 this . logger ( ) . info ( `Agent ${ this . getAgentId ( ) } session: ${ this . state . sessionId } onStart: User configs loaded successfully` , { userConfigsRecord} ) ;
203204 }
204205
@@ -240,13 +241,13 @@ export class CodeGeneratorAgent extends Agent<Env, AgentState> implements AgentI
240241
241242 logger ( ) : StructuredLogger {
242243 if ( ! this . _logger ) {
243- this . _logger = this . initLogger ( this . getAgentId ( ) , this . state . inferenceContext . userId , this . state . sessionId ) ;
244+ this . _logger = this . initLogger ( this . getAgentId ( ) , this . state . metadata . userId , this . state . sessionId ) ;
244245 }
245246 return this . _logger ;
246247 }
247248
248249 getAgentId ( ) {
249- return this . state . inferenceContext . agentId ;
250+ return this . state . metadata . agentId ;
250251 }
251252
252253 getWebSockets ( ) : WebSocket [ ] {
@@ -266,7 +267,7 @@ export class CodeGeneratorAgent extends Agent<Env, AgentState> implements AgentI
266267
267268 private getSecretsClient ( ) : SecretsClient {
268269 if ( ! this . secretsClient ) {
269- const userId = this . state . inferenceContext . userId ;
270+ const userId = this . state . metadata . userId ;
270271 const stub = this . env . UserSecretsStore . get (
271272 this . env . UserSecretsStore . idFromName ( userId )
272273 ) as unknown as UserSecretsStoreStub ;
@@ -347,8 +348,8 @@ export class CodeGeneratorAgent extends Agent<Env, AgentState> implements AgentI
347348 // Save the app to database (authenticated users only)
348349 const appService = new AppService ( this . env ) ;
349350 await appService . createApp ( {
350- id : this . state . inferenceContext . agentId ,
351- userId : this . state . inferenceContext . userId ,
351+ id : this . state . metadata . agentId ,
352+ userId : this . state . metadata . userId ,
352353 sessionToken : null ,
353354 title : this . state . blueprint . title || this . state . query . substring ( 0 , 100 ) ,
354355 description : this . state . blueprint . description ,
@@ -360,12 +361,12 @@ export class CodeGeneratorAgent extends Agent<Env, AgentState> implements AgentI
360361 createdAt : new Date ( ) ,
361362 updatedAt : new Date ( )
362363 } ) ;
363- this . logger ( ) . info ( `App saved successfully to database for agent ${ this . state . inferenceContext . agentId } ` , {
364- agentId : this . state . inferenceContext . agentId ,
365- userId : this . state . inferenceContext . userId ,
364+ this . logger ( ) . info ( `App saved successfully to database for agent ${ this . state . metadata . agentId } ` , {
365+ agentId : this . state . metadata . agentId ,
366+ userId : this . state . metadata . userId ,
366367 visibility : 'private'
367368 } ) ;
368- this . logger ( ) . info ( `Agent initialized successfully for agent ${ this . state . inferenceContext . agentId } ` ) ;
369+ this . logger ( ) . info ( `Agent initialized successfully for agent ${ this . state . metadata . agentId } ` ) ;
369370 }
370371
371372 // ==========================================
0 commit comments