diff --git a/packages/cli/src/commands/workspace/connect.ts b/packages/cli/src/commands/workspace/connect.ts index 91d5bb8259..dbb1d01d6b 100644 --- a/packages/cli/src/commands/workspace/connect.ts +++ b/packages/cli/src/commands/workspace/connect.ts @@ -92,9 +92,7 @@ export async function connectToWorkspace(args: ArgumentsCamelCase): } } - const { instance_name: instanceName, zone } = readyWs; - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const project = process.env['GOOGLE_CLOUD_PROJECT'] || 'dev-project'; + const { instance_name: instanceName, zone, project_id: projectId } = readyWs; const ssh = new SSHService(); // 1. Sync settings if enabled @@ -106,7 +104,7 @@ export async function connectToWorkspace(args: ArgumentsCamelCase): await sync.pushSettings({ instanceName, zone, - project, + project: projectId, }); // eslint-disable-next-line no-console console.log(chalk.green(`✓ Settings synced.`)); @@ -122,7 +120,7 @@ export async function connectToWorkspace(args: ArgumentsCamelCase): // eslint-disable-next-line no-console console.log(chalk.yellow('Injecting GitHub credentials...')); try { - await ssh.pushSecret({ instanceName, zone, project }, '.gh_token', pat); + await ssh.pushSecret({ instanceName, zone, project: projectId }, '.gh_token', pat); // eslint-disable-next-line no-console console.log(chalk.green('✓ Credentials injected.')); } catch (err) { @@ -141,7 +139,7 @@ export async function connectToWorkspace(args: ArgumentsCamelCase): await ssh.connect({ instanceName, zone, - project, + project: projectId, command: remoteCommand, forwardAgent: args.forwardAgent, }); diff --git a/packages/core/src/services/syncService.test.ts b/packages/core/src/services/syncService.test.ts index aa2ecb4d98..4dcd21115e 100644 --- a/packages/core/src/services/syncService.test.ts +++ b/packages/core/src/services/syncService.test.ts @@ -50,7 +50,7 @@ describe('SyncService', () => { 'scp', '--recurse', '/mock/local/dir/settings.json', - 'test-inst:', + 'test-inst:.gemini/', '--zone=us-west1-a', '--project=test-project', '--tunnel-through-iap', diff --git a/packages/core/src/services/syncService.ts b/packages/core/src/services/syncService.ts index cdd59fc469..0868f8e986 100644 --- a/packages/core/src/services/syncService.ts +++ b/packages/core/src/services/syncService.ts @@ -23,8 +23,8 @@ export class SyncService { const { instanceName, zone, project } = options; const localDir = Storage.getGlobalGeminiDir(); - // Fix: Using the home directory as destination to avoid nested .gemini/.gemini - const remotePath = `${instanceName}:`; + // Fix: Ensure files are placed in the .gemini directory on the remote + const remotePath = `${instanceName}:.gemini/`; // Performance/Robustness: Exclude large and local-only folders. // Since gcloud scp doesn't support --exclude, we could either: diff --git a/packages/core/src/services/workspaceHubClient.ts b/packages/core/src/services/workspaceHubClient.ts index 081b9c8553..7ce280f888 100644 --- a/packages/core/src/services/workspaceHubClient.ts +++ b/packages/core/src/services/workspaceHubClient.ts @@ -14,6 +14,7 @@ export interface WorkspaceHubInfo { status: string; machine_type: string; zone: string; + project_id: string; created_at: string; owner_id: string; } diff --git a/packages/workspace-manager/src/routes/workspaceRoutes.ts b/packages/workspace-manager/src/routes/workspaceRoutes.ts index 9d4b148d10..7fbb332af5 100644 --- a/packages/workspace-manager/src/routes/workspaceRoutes.ts +++ b/packages/workspace-manager/src/routes/workspaceRoutes.ts @@ -53,6 +53,7 @@ router.post('/', async (req, res) => { status: 'PROVISIONING', machine_type: machineType, zone, + project_id: computeService.getProjectId(), created_at: new Date().toISOString(), }; diff --git a/packages/workspace-manager/src/services/computeService.ts b/packages/workspace-manager/src/services/computeService.ts index f90bf6b087..7464319bdb 100644 --- a/packages/workspace-manager/src/services/computeService.ts +++ b/packages/workspace-manager/src/services/computeService.ts @@ -23,6 +23,10 @@ export class ComputeService { this.projectId = process.env['GOOGLE_CLOUD_PROJECT'] || 'dev-project'; } + getProjectId(): string { + return this.projectId; + } + /** * Provision a new GCE VM with the Workspace Container */ diff --git a/packages/workspace-manager/src/services/workspaceService.test.ts b/packages/workspace-manager/src/services/workspaceService.test.ts index 8d63bb0fa4..b9cd4fdd12 100644 --- a/packages/workspace-manager/src/services/workspaceService.test.ts +++ b/packages/workspace-manager/src/services/workspaceService.test.ts @@ -55,6 +55,7 @@ describe('WorkspaceService', () => { status: 'READY', machine_type: 'e2', zone: 'us1', + project_id: 'p1', created_at: 'now', }; await service.createWorkspace('id1', data); diff --git a/packages/workspace-manager/src/services/workspaceService.ts b/packages/workspace-manager/src/services/workspaceService.ts index 9ae21549d8..a440813da0 100644 --- a/packages/workspace-manager/src/services/workspaceService.ts +++ b/packages/workspace-manager/src/services/workspaceService.ts @@ -13,6 +13,7 @@ export interface WorkspaceData { status: string; machine_type: string; zone: string; + project_id: string; created_at: string; }