diff --git a/apps/client/src/app/components/ai-chat/ai-chat.component.ts b/apps/client/src/app/components/ai-chat/ai-chat.component.ts index d4bfc3c20..d31afd434 100644 --- a/apps/client/src/app/components/ai-chat/ai-chat.component.ts +++ b/apps/client/src/app/components/ai-chat/ai-chat.component.ts @@ -3,12 +3,15 @@ import { ChangeDetectorRef, Component, ElementRef, + Inject, OnDestroy, ViewChild } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule } from '@angular/forms'; import { HttpClient, HttpClientModule } from '@angular/common/http'; +import { GfEnvironment } from '@ghostfolio/ui/environment'; +import { GF_ENVIRONMENT } from '@ghostfolio/ui/environment'; import { AiMarkdownPipe } from './ai-markdown.pipe'; @@ -51,13 +54,18 @@ export class GfAiChatComponent implements OnDestroy { private pendingWrite: Record | null = null; public awaitingConfirmation = false; - private readonly AGENT_URL = '/agent/chat'; - private readonly FEEDBACK_URL = '/agent/feedback'; + private readonly AGENT_URL: string; + private readonly FEEDBACK_URL: string; public constructor( private changeDetectorRef: ChangeDetectorRef, - private http: HttpClient - ) {} + private http: HttpClient, + @Inject(GF_ENVIRONMENT) environment: GfEnvironment + ) { + const base = (environment.agentUrl ?? '/agent').replace(/\/$/, ''); + this.AGENT_URL = `${base}/chat`; + this.FEEDBACK_URL = `${base}/feedback`; + } public ngOnDestroy() {} diff --git a/apps/client/src/environments/environment.prod.ts b/apps/client/src/environments/environment.prod.ts index f3ded619e..c22d8b3d3 100644 --- a/apps/client/src/environments/environment.prod.ts +++ b/apps/client/src/environments/environment.prod.ts @@ -1,6 +1,7 @@ import type { GfEnvironment } from '@ghostfolio/ui/environment'; export const environment: GfEnvironment = { + agentUrl: 'https://ghostfolio-agent-production.up.railway.app', lastPublish: '{BUILD_TIMESTAMP}', production: true }; diff --git a/apps/client/src/environments/environment.ts b/apps/client/src/environments/environment.ts index 1b9efe2be..c53be4d8f 100644 --- a/apps/client/src/environments/environment.ts +++ b/apps/client/src/environments/environment.ts @@ -5,6 +5,7 @@ import type { GfEnvironment } from '@ghostfolio/ui/environment'; // The list of file replacements can be found in `angular.json`. export const environment: GfEnvironment = { + agentUrl: '/agent', lastPublish: null, production: false }; diff --git a/libs/ui/src/lib/environment/environment.interface.ts b/libs/ui/src/lib/environment/environment.interface.ts index bdd867324..db7be1b29 100644 --- a/libs/ui/src/lib/environment/environment.interface.ts +++ b/libs/ui/src/lib/environment/environment.interface.ts @@ -1,4 +1,5 @@ export interface GfEnvironment { + agentUrl?: string; lastPublish: string | null; production: boolean; } diff --git a/railway.json b/railway.json new file mode 100644 index 000000000..1bcad3d1a --- /dev/null +++ b/railway.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://railway.com/railway.schema.json", + "build": { + "builder": "DOCKERFILE", + "dockerfilePath": "Dockerfile" + }, + "deploy": { + "startCommand": "/ghostfolio/entrypoint.sh", + "healthcheckPath": "/api/v1/health", + "healthcheckTimeout": 300, + "restartPolicyType": "ON_FAILURE", + "restartPolicyMaxRetries": 5 + } +}