@@ -239,24 +239,27 @@ describe('spawnAgent docker mode', () => {
239239 expect ( volumeFlags ) . toContain ( `${ cwd } :${ cwd } ` ) ;
240240 } ) ;
241241
242- it ( 'injects HOME= /tmp into docker run args' , ( ) => {
242+ it ( 'injects a per-agent HOME under /tmp into docker run args' , ( ) => {
243243 vi . stubEnv ( 'HOME' , '/Users/tester' ) ;
244244
245- spawnAgent ( createMockWindow ( ) , buildSpawnArgs ( ) ) ;
245+ const agentId = nextAgentId ( ) ;
246+ spawnAgent ( createMockWindow ( ) , buildSpawnArgs ( { agentId } ) ) ;
246247
247248 const { command, args } = getLastSpawnCall ( ) ;
248249 expect ( command ) . toBe ( 'docker' ) ;
249- expect ( getFlagValues ( args , '-e' ) ) . toContain ( `HOME=${ DOCKER_CONTAINER_HOME } ` ) ;
250+ expect ( getFlagValues ( args , '-e' ) ) . toContain ( `HOME=${ DOCKER_CONTAINER_HOME } /agent- ${ agentId } ` ) ;
250251 } ) ;
251252
252253 it ( 'does not forward host or renderer HOME as a generic docker env flag' , ( ) => {
253254 const hostHome = '/Users/host-home' ;
254255 const rendererHome = '/Users/renderer-home' ;
255256 vi . stubEnv ( 'HOME' , hostHome ) ;
256257
258+ const agentId = nextAgentId ( ) ;
257259 spawnAgent (
258260 createMockWindow ( ) ,
259261 buildSpawnArgs ( {
262+ agentId,
260263 env : {
261264 API_KEY : 'secret' ,
262265 HOME : rendererHome ,
@@ -267,7 +270,7 @@ describe('spawnAgent docker mode', () => {
267270 const envFlags = getFlagValues ( getLastSpawnCall ( ) . args , '-e' ) ;
268271 expect ( envFlags ) . toContain ( 'API_KEY=secret' ) ;
269272 expect ( envFlags . filter ( ( value ) => value . startsWith ( 'HOME=' ) ) ) . toEqual ( [
270- `HOME=${ DOCKER_CONTAINER_HOME } ` ,
273+ `HOME=${ DOCKER_CONTAINER_HOME } /agent- ${ agentId } ` ,
271274 ] ) ;
272275 expect ( envFlags ) . not . toContain ( `HOME=${ hostHome } ` ) ;
273276 expect ( envFlags ) . not . toContain ( `HOME=${ rendererHome } ` ) ;
@@ -328,16 +331,18 @@ describe('spawnAgent docker mode', () => {
328331 expect ( ctx . args ) . toEqual ( [ '-c' , '<redacted>' ] ) ;
329332 } ) ;
330333
331- it ( 'redirects credential mounts under /tmp inside the container' , ( ) => {
334+ it ( 'redirects credential mounts under per-agent /tmp/agent-<id> inside the container' , ( ) => {
332335 const home = makeTempHome ( [ '.ssh/' , '.gitconfig' , '.config/gh/' ] ) ;
333336 vi . stubEnv ( 'HOME' , home ) ;
334337
335- spawnAgent ( createMockWindow ( ) , buildSpawnArgs ( ) ) ;
338+ const agentId = nextAgentId ( ) ;
339+ spawnAgent ( createMockWindow ( ) , buildSpawnArgs ( { agentId } ) ) ;
336340
341+ const containerHome = `${ DOCKER_CONTAINER_HOME } /agent-${ agentId } ` ;
337342 const volumeFlags = getFlagValues ( getLastSpawnCall ( ) . args , '-v' ) ;
338- expect ( volumeFlags ) . toContain ( `${ home } /.ssh:${ DOCKER_CONTAINER_HOME } /.ssh:ro` ) ;
339- expect ( volumeFlags ) . toContain ( `${ home } /.gitconfig:${ DOCKER_CONTAINER_HOME } /.gitconfig:ro` ) ;
340- expect ( volumeFlags ) . toContain ( `${ home } /.config/gh:${ DOCKER_CONTAINER_HOME } /.config/gh:ro` ) ;
343+ expect ( volumeFlags ) . toContain ( `${ home } /.ssh:${ containerHome } /.ssh:ro` ) ;
344+ expect ( volumeFlags ) . toContain ( `${ home } /.gitconfig:${ containerHome } /.gitconfig:ro` ) ;
345+ expect ( volumeFlags ) . toContain ( `${ home } /.config/gh:${ containerHome } /.config/gh:ro` ) ;
341346 } ) ;
342347
343348 describe ( 'agent config dir mounts (shareDockerAgentAuth)' , ( ) => {
@@ -353,11 +358,16 @@ describe('spawnAgent docker mode', () => {
353358 const home = makeTempHome ( [ ] ) ;
354359 vi . stubEnv ( 'HOME' , home ) ;
355360
356- spawnAgent ( createMockWindow ( ) , buildSpawnArgs ( { command, shareDockerAgentAuth : true } ) ) ;
361+ const agentId = nextAgentId ( ) ;
362+ spawnAgent (
363+ createMockWindow ( ) ,
364+ buildSpawnArgs ( { agentId, command, shareDockerAgentAuth : true } ) ,
365+ ) ;
357366
367+ const containerHome = `${ DOCKER_CONTAINER_HOME } /agent-${ agentId } ` ;
358368 const volumeFlags = getFlagValues ( getLastSpawnCall ( ) . args , '-v' ) ;
359369 const expectedHostDir = `${ home } /.parallel-code/agent-auth/${ command } /${ relDir } ` ;
360- expect ( volumeFlags ) . toContain ( `${ expectedHostDir } :${ DOCKER_CONTAINER_HOME } /${ relDir } ` ) ;
370+ expect ( volumeFlags ) . toContain ( `${ expectedHostDir } :${ containerHome } /${ relDir } ` ) ;
361371 } ,
362372 ) ;
363373
@@ -378,14 +388,16 @@ describe('spawnAgent docker mode', () => {
378388 const home = makeTempHome ( [ ] ) ;
379389 vi . stubEnv ( 'HOME' , home ) ;
380390
391+ const agentId = nextAgentId ( ) ;
381392 spawnAgent (
382393 createMockWindow ( ) ,
383- buildSpawnArgs ( { command : 'claude' , shareDockerAgentAuth : true } ) ,
394+ buildSpawnArgs ( { agentId , command : 'claude' , shareDockerAgentAuth : true } ) ,
384395 ) ;
385396
397+ const containerHome = `${ DOCKER_CONTAINER_HOME } /agent-${ agentId } ` ;
386398 const volumeFlags = getFlagValues ( getLastSpawnCall ( ) . args , '-v' ) ;
387399 const expectedHostFile = `${ home } /.parallel-code/agent-auth/claude/.claude.json` ;
388- expect ( volumeFlags ) . toContain ( `${ expectedHostFile } :${ DOCKER_CONTAINER_HOME } /.claude.json` ) ;
400+ expect ( volumeFlags ) . toContain ( `${ expectedHostFile } :${ containerHome } /.claude.json` ) ;
389401 expect ( JSON . parse ( fs . readFileSync ( expectedHostFile , 'utf8' ) ) ) . toMatchObject ( {
390402 projects : {
391403 '/workspace/project' : {
0 commit comments