| 1 | global: |
| 2 | # Deployment profile is intentionally separate from the Spring profile so |
| 3 | # existing DEV behavior remains available while LOCAL/TEST/AZURE are explicit. |
| 4 | environment: LOCAL |
| 5 | springProfile: LOCAL |
| 6 | imageRegistry: localhost:5001 |
| 7 | imagePullPolicy: IfNotPresent |
| 8 | imageTag: "" |
| 9 | imagePullSecrets: [] |
| 10 | timezone: UTC |
| 11 | serviceAccount: |
| 12 | create: true |
| 13 | name: ai-investment-platform |
| 14 | annotations: {} |
| 15 | automountServiceAccountToken: false |
| 16 | azure: |
| 17 | workloadIdentity: |
| 18 | enabled: false |
| 19 | clientId: "" |
| 20 | tenantId: "" |
| 21 | workloads: [] |
| 22 | podAnnotations: {} |
| 23 | podLabels: {} |
| 24 | revisionHistoryLimit: 3 |
| 25 | terminationGracePeriodSeconds: 30 |
| 26 | podSecurityContext: |
| 27 | runAsNonRoot: true |
| 28 | seccompProfile: |
| 29 | type: RuntimeDefault |
| 30 | containerSecurityContext: |
| 31 | allowPrivilegeEscalation: false |
| 32 | readOnlyRootFilesystem: false |
| 33 | capabilities: |
| 34 | drop: |
| 35 | - ALL |
| 36 | temporaryStorage: |
| 37 | enabled: true |
| 38 | mountPath: /tmp |
| 39 | sizeLimit: 256Mi |
| 40 | rolloutStrategy: |
| 41 | type: RollingUpdate |
| 42 | rollingUpdate: |
| 43 | maxUnavailable: 1 |
| 44 | maxSurge: 1 |
| 45 | topologySpread: |
| 46 | enabled: false |
| 47 | topologyKey: topology.kubernetes.io/zone |
| 48 | maxSkew: 1 |
| 49 | whenUnsatisfiable: ScheduleAnyway |
| 50 | nodeSelector: {} |
| 51 | tolerations: [] |
| 52 | affinity: {} |
| 53 | observability: |
| 54 | otel: |
| 55 | enabled: false |
| 56 | tracesEnabled: false |
| 57 | metricsEnabled: false |
| 58 | exporterOtlpEndpoint: "" |
| 59 | exporterOtlpProtocol: grpc |
| 60 | resourceAttributes: "" |
| 61 | javaAgentInjection: false |
| 62 | pythonAgentInjection: false |
| 63 | |
| 64 | serviceEndpoints: |
| 65 | auth: http://auth-service |
| 66 | portfolio: http://portfolio-service |
| 67 | broker: http://broker-service |
| 68 | ibkrConnector: http://ibkr-connector |
| 69 | company: http://company-service |
| 70 | research: http://research-service |
| 71 | researchEngine: http://research-engine |
| 72 | mcpGateway: http://mcp-gateway |
| 73 | yahooFinanceMcp: http://yahoo-finance-mcp |
| 74 | frontend: http://frontend |
| 75 | |
| 76 | database: |
| 77 | host: postgres |
| 78 | port: 5432 |
| 79 | name: investment |
| 80 | username: investment |
| 81 | authMode: password |
| 82 | passwordSecretName: dev-postgres |
| 83 | passwordSecretKey: POSTGRES_PASSWORD |
| 84 | sslMode: disable |
| 85 | connectTimeoutSeconds: 10 |
| 86 | socketTimeoutSeconds: 30 |
| 87 | pool: |
| 88 | maximumSize: 8 |
| 89 | minimumIdle: 1 |
| 90 | connectionTimeoutMs: 10000 |
| 91 | idleTimeoutMs: 600000 |
| 92 | maxLifetimeMs: 1800000 |
| 93 | |
| 94 | redis: |
| 95 | url: "" |
| 96 | host: redis |
| 97 | port: 6379 |
| 98 | tlsEnabled: false |
| 99 | username: "" |
| 100 | passwordSecretName: "" |
| 101 | passwordSecretKey: REDIS_PASSWORD |
| 102 | connectTimeout: 3s |
| 103 | readTimeout: 3s |
| 104 | pool: |
| 105 | maxActive: 8 |
| 106 | maxIdle: 8 |
| 107 | minIdle: 0 |
| 108 | maxWait: 2s |
| 109 | |
| 110 | kafka: |
| 111 | enabled: false |
| 112 | bootstrapServers: kafka:9092 |
| 113 | securityProtocol: PLAINTEXT |
| 114 | saslMechanism: PLAIN |
| 115 | username: "" |
| 116 | consumerGroupPrefix: ai-investment-local |
| 117 | credentialSecretName: "" |
| 118 | passwordSecretKey: KAFKA_PASSWORD |
| 119 | sslTruststoreSecretName: "" |
| 120 | sslTruststoreSecretKey: KAFKA_TRUSTSTORE |
| 121 | sslTruststoreMountPath: /etc/ai-investment/kafka |
| 122 | sslTruststoreType: PEM |
| 123 | clientDnsLookup: use_all_dns_ips |
| 124 | requestTimeoutMs: 30000 |
| 125 | deliveryTimeoutMs: 120000 |
| 126 | retries: 5 |
| 127 | |
| 128 | objectStorage: |
| 129 | enabled: false |
| 130 | provider: disabled |
| 131 | accountName: "" |
| 132 | endpoint: "" |
| 133 | container: "" |
| 134 | authMode: workloadIdentity |
| 135 | temporary: |
| 136 | enabled: false |
| 137 | ttlSeconds: 3600 |
| 138 | |
| 139 | keyVault: |
| 140 | enabled: false |
| 141 | name: "" |
| 142 | tenantId: "" |
| 143 | clientId: "" |
| 144 | secretProviderClassName: aip-key-vault |
| 145 | mountPath: /mnt/secrets-store |
| 146 | cloudName: "" |
| 147 | workloads: |
| 148 | - api-gateway |
| 149 | - auth-service |
| 150 | - portfolio-service |
| 151 | - broker-service |
| 152 | - research-service |
| 153 | - research-engine |
| 154 | - mcp-gateway |
| 155 | objects: [] |
| 156 | secretObjects: [] |
| 157 | |
| 158 | networkPolicy: |
| 159 | enabled: false |
| 160 | allowSameNamespace: true |
| 161 | ingressController: |
| 162 | enabled: false |
| 163 | namespace: "" |
| 164 | podLabels: {} |
| 165 | egress: |
| 166 | enabled: false |
| 167 | allowDns: true |
| 168 | additionalRules: [] |
| 169 | |
| 170 | frontend: |
| 171 | enabled: true |
| 172 | image: ai-investment/frontend |
| 173 | tag: latest |
| 174 | port: 3000 |
| 175 | replicaCount: 1 |
| 176 | service: |
| 177 | type: ClusterIP |
| 178 | port: 80 |
| 179 | probes: |
| 180 | startup: |
| 181 | enabled: true |
| 182 | path: /api/health |
| 183 | periodSeconds: 5 |
| 184 | timeoutSeconds: 3 |
| 185 | failureThreshold: 30 |
| 186 | readiness: |
| 187 | path: /api/health |
| 188 | periodSeconds: 10 |
| 189 | timeoutSeconds: 3 |
| 190 | failureThreshold: 3 |
| 191 | liveness: |
| 192 | path: /api/health |
| 193 | periodSeconds: 10 |
| 194 | timeoutSeconds: 3 |
| 195 | failureThreshold: 3 |
| 196 | autoscaling: |
| 197 | enabled: false |
| 198 | minReplicas: 2 |
| 199 | maxReplicas: 4 |
| 200 | targetCPUUtilizationPercentage: 70 |
| 201 | pdb: |
| 202 | enabled: false |
| 203 | minAvailable: 1 |
| 204 | resources: |
| 205 | requests: |
| 206 | cpu: 100m |
| 207 | memory: 128Mi |
| 208 | limits: |
| 209 | cpu: 500m |
| 210 | memory: 512Mi |
| 211 | cache: |
| 212 | enabled: true |
| 213 | mountPath: /app/.next/cache |
| 214 | sizeLimit: 256Mi |
| 215 | |
| 216 | apiGateway: |
| 217 | http: |
| 218 | connectTimeout: 3s |
| 219 | readTimeout: 30s |
| 220 | cors: |
| 221 | allowedOrigins: [] |
| 222 | ingress: |
| 223 | enabled: false |
| 224 | className: traefik |
| 225 | annotations: {} |
| 226 | host: "" |
| 227 | path: / |
| 228 | pathType: Prefix |
| 229 | tls: [] |
| 230 | rateLimiting: |
| 231 | enabled: false |
| 232 | # Controller-specific annotations belong in ingress.annotations once an |
| 233 | # ingress controller has been selected. |
| 234 | requestsPerSecond: 0 |
| 235 | burst: 0 |
| 236 | |
| 237 | auth: |
| 238 | issuer: "" |
| 239 | devLoginEnabled: false |
| 240 | tokenTtlSeconds: 28800 |
| 241 | email: |
| 242 | mode: DISABLED |
| 243 | smtpHost: "" |
| 244 | smtpPort: 587 |
| 245 | smtpFrom: "" |
| 246 | publicUrl: "" |
| 247 | credentialSecretName: "" |
| 248 | usernameSecretKey: SMTP_USERNAME |
| 249 | passwordSecretKey: SMTP_PASSWORD |
| 250 | createDevSecret: false |
| 251 | devJwtSecret: "" |
| 252 | jwtSecretName: aip-auth-jwt |
| 253 | jwtSecretKey: jwt-secret |
| 254 | |
| 255 | ibkr: |
| 256 | enabled: false |
| 257 | baseUrl: "" |
| 258 | oauth2BaseUrl: "" |
| 259 | gatewayBaseUrl: "" |
| 260 | clientId: "" |
| 261 | clientKeyId: "" |
| 262 | callbackUrl: "" |
| 263 | authMethod: client-portal-gateway |
| 264 | officialDocumentationVerified: false |
| 265 | marketDataEnabled: false |
| 266 | insecureTls: false |
| 267 | connectorBaseUrl: "" |
| 268 | connectorRuntimeMode: LOCAL_AGENT |
| 269 | connectorLoginUrl: "" |
| 270 | connectorInternalToken: "" |
| 271 | connectorInternalTokenSecretName: "" |
| 272 | connectorInternalTokenSecretKey: AIP_INTERNAL_TOKEN |
| 273 | connectorIdleTimeoutSeconds: 1800 |
| 274 | connectorSessionTimeoutSeconds: 86400 |
| 275 | privateKeyReference: "" |
| 276 | sessionReference: "" |
| 277 | |
| 278 | iciciDirect: |
| 279 | enabled: false |
| 280 | officialDocumentationVerified: false |
| 281 | baseUrl: https://api.icicidirect.com/breezeapi/api/v1/ |
| 282 | loginUrl: https://api.icicidirect.com/apiuser/login |
| 283 | redirectUrl: "" |
| 284 | authMethod: breeze-interactive-session |
| 285 | credentialSecretName: "" |
| 286 | appKeySecretKey: app-key |
| 287 | secretKeySecretKey: secret-key |
| 288 | secretKeyEnvironmentVariable: ICICI_DIRECT_SECRET_KEY |
| 289 | |
| 290 | ibkrConnector: |
| 291 | enabled: false |
| 292 | image: ai-investment/ibkr-connector |
| 293 | tag: latest |
| 294 | port: 8080 |
| 295 | replicaCount: 1 |
| 296 | runtimeMode: LOCAL_AGENT |
| 297 | productionApproved: false |
| 298 | gatewayPackagePath: "" |
| 299 | gatewayBaseUrl: "" |
| 300 | gatewayTlsVerify: true |
| 301 | loginPublicBaseUrl: "" |
| 302 | internalToken: "" |
| 303 | internalTokenSecretName: "" |
| 304 | internalTokenSecretKey: AIP_INTERNAL_TOKEN |
| 305 | packageVolumeClaim: "" |
| 306 | service: |
| 307 | type: ClusterIP |
| 308 | port: 80 |
| 309 | probes: |
| 310 | startup: |
| 311 | enabled: true |
| 312 | path: /health |
| 313 | periodSeconds: 10 |
| 314 | timeoutSeconds: 3 |
| 315 | failureThreshold: 30 |
| 316 | readiness: |
| 317 | path: /health |
| 318 | periodSeconds: 10 |
| 319 | timeoutSeconds: 3 |
| 320 | failureThreshold: 3 |
| 321 | liveness: |
| 322 | path: /health |
| 323 | periodSeconds: 10 |
| 324 | timeoutSeconds: 3 |
| 325 | failureThreshold: 3 |
| 326 | autoscaling: |
| 327 | enabled: false |
| 328 | minReplicas: 1 |
| 329 | maxReplicas: 1 |
| 330 | targetCPUUtilizationPercentage: 70 |
| 331 | pdb: |
| 332 | enabled: false |
| 333 | minAvailable: 1 |
| 334 | resources: |
| 335 | requests: |
| 336 | cpu: 250m |
| 337 | memory: 512Mi |
| 338 | limits: |
| 339 | cpu: 1000m |
| 340 | memory: 1Gi |
| 341 | |
| 342 | # The Client Portal Gateway package PVC is DEV_ONLY. It is not an AKS package |
| 343 | # distribution design and remains disabled in the Azure overlay. |
| 344 | ibkrRuntime: |
| 345 | mode: STATIC |
| 346 | namespace: "" |
| 347 | image: |
| 348 | repository: ai-investment/ibkr-connector |
| 349 | tag: "" |
| 350 | digest: "" |
| 351 | pullPolicy: IfNotPresent |
| 352 | serviceAccount: |
| 353 | create: true |
| 354 | name: ibkr-runtime-orchestrator |
| 355 | annotations: {} |
| 356 | startupTimeoutSeconds: 120 |
| 357 | resources: |
| 358 | requests: { cpu: 250m, memory: 512Mi } |
| 359 | limits: { cpu: "1", memory: 1Gi } |
| 360 | nodeSelector: {} |
| 361 | tolerations: [] |
| 362 | affinity: {} |
| 363 | topologySpreadConstraints: [] |
| 364 | imagePullSecrets: [] |
| 365 | podAnnotations: {} |
| 366 | podLabels: {} |
| 367 | serviceAnnotations: {} |
| 368 | serviceLabels: {} |
| 369 | azure: |
| 370 | workloadIdentity: |
| 371 | enabled: false |
| 372 | clientId: "" |
| 373 | gatewayPackage: |
| 374 | classification: DEV_ONLY |
| 375 | claimName: "" |
| 376 | mountPath: /opt/ibkr/clientportal.gw-source |
| 377 | readOnly: true |
| 378 | workspace: |
| 379 | classification: EPHEMERAL |
| 380 | mountPath: /opt/ibkr/runtime |
| 381 | medium: "" |
| 382 | sizeLimit: "" |
| 383 | internalToken: |
| 384 | secretName: "" |
| 385 | secretKey: "" |
| 386 | gateway: |
| 387 | baseUrl: https://127.0.0.1:5000/v1/api |
| 388 | tlsVerify: true |
| 389 | loginPublicBaseUrl: "" |
| 390 | kubernetesSpec: |
| 391 | initContainer: |
| 392 | name: copy-gateway-package |
| 393 | image: "" |
| 394 | imagePullPolicy: IfNotPresent |
| 395 | command: ["/bin/sh", "-c"] |
| 396 | args: ["cp -a /opt/ibkr/clientportal.gw-source/. /opt/ibkr/runtime/ && chown -R 1000:1000 /opt/ibkr/runtime && chmod u+x /opt/ibkr/runtime/bin/run.sh"] |
| 397 | startupProbe: { path: /actuator/health/readiness, initialDelaySeconds: 0, periodSeconds: 10, timeoutSeconds: 3, failureThreshold: 30, successThreshold: 1 } |
| 398 | readinessProbe: { path: /actuator/health/readiness, initialDelaySeconds: 0, periodSeconds: 10, timeoutSeconds: 3, failureThreshold: 3, successThreshold: 1 } |
| 399 | livenessProbe: { path: /actuator/health/liveness, initialDelaySeconds: 0, periodSeconds: 10, timeoutSeconds: 3, failureThreshold: 3, successThreshold: 1 } |
| 400 | ports: { containerPort: 8080, servicePort: 80, serviceTargetPort: 8080, gatewayPort: 5000 } |
| 401 | security: { runAsNonRoot: true, runAsUser: 1000, allowPrivilegeEscalation: false, dropCapabilities: ["ALL"] } |
| 402 | |
| 403 | javaServices: |
| 404 | - name: api-gateway |
| 405 | image: ai-investment/api-gateway |
| 406 | tag: latest |
| 407 | port: 8080 |
| 408 | scalingClass: HORIZONTALLY_SCALABLE |
| 409 | - name: auth-service |
| 410 | image: ai-investment/auth-service |
| 411 | tag: latest |
| 412 | port: 8080 |
| 413 | scalingClass: HORIZONTALLY_SCALABLE |
| 414 | - name: portfolio-service |
| 415 | image: ai-investment/portfolio-service |
| 416 | tag: latest |
| 417 | port: 8080 |
| 418 | scalingClass: HORIZONTALLY_SCALABLE |
| 419 | - name: broker-service |
| 420 | image: ai-investment/broker-service |
| 421 | tag: latest |
| 422 | port: 8080 |
| 423 | scalingClass: NEEDS_DISTRIBUTED_LOCK |
| 424 | - name: company-service |
| 425 | image: ai-investment/company-service |
| 426 | tag: latest |
| 427 | port: 8080 |
| 428 | scalingClass: HORIZONTALLY_SCALABLE |
| 429 | - name: research-service |
| 430 | image: ai-investment/research-service |
| 431 | tag: latest |
| 432 | port: 8080 |
| 433 | scalingClass: SINGLETON_MIGRATION_OWNER |
| 434 | - name: recommendation-service |
| 435 | image: ai-investment/recommendation-service |
| 436 | tag: latest |
| 437 | port: 8080 |
| 438 | scalingClass: HORIZONTALLY_SCALABLE |
| 439 | - name: risk-service |
| 440 | image: ai-investment/risk-service |
| 441 | tag: latest |
| 442 | port: 8080 |
| 443 | scalingClass: HORIZONTALLY_SCALABLE |
| 444 | - name: notification-service |
| 445 | image: ai-investment/notification-service |
| 446 | tag: latest |
| 447 | port: 8080 |
| 448 | scalingClass: HORIZONTALLY_SCALABLE |
| 449 | |
| 450 | javaServiceDefaults: |
| 451 | replicaCount: 1 |
| 452 | service: |
| 453 | type: ClusterIP |
| 454 | port: 80 |
| 455 | probes: |
| 456 | startup: |
| 457 | enabled: true |
| 458 | path: /actuator/health/liveness |
| 459 | periodSeconds: 5 |
| 460 | timeoutSeconds: 3 |
| 461 | failureThreshold: 36 |
| 462 | readiness: |
| 463 | path: /actuator/health/readiness |
| 464 | periodSeconds: 10 |
| 465 | timeoutSeconds: 3 |
| 466 | failureThreshold: 3 |
| 467 | liveness: |
| 468 | path: /actuator/health/liveness |
| 469 | periodSeconds: 10 |
| 470 | timeoutSeconds: 3 |
| 471 | failureThreshold: 3 |
| 472 | autoscaling: |
| 473 | enabled: false |
| 474 | minReplicas: 2 |
| 475 | maxReplicas: 4 |
| 476 | targetCPUUtilizationPercentage: 70 |
| 477 | pdb: |
| 478 | enabled: false |
| 479 | minAvailable: 1 |
| 480 | resources: |
| 481 | requests: |
| 482 | cpu: 100m |
| 483 | memory: 256Mi |
| 484 | limits: |
| 485 | cpu: 500m |
| 486 | memory: 768Mi |
| 487 | |
| 488 | # Map-based overrides keep image lists stable across environment overlays. |
| 489 | workloadOverrides: {} |
| 490 | |
| 491 | aiServices: |
| 492 | - name: research-engine |
| 493 | image: ai-investment/research-engine |
| 494 | tag: latest |
| 495 | port: 8000 |
| 496 | scalingClass: NEEDS_DISTRIBUTED_LOCK |
| 497 | - name: valuation-engine |
| 498 | image: ai-investment/valuation-engine |
| 499 | tag: latest |
| 500 | port: 8000 |
| 501 | scalingClass: HORIZONTALLY_SCALABLE |
| 502 | - name: ranking-engine |
| 503 | image: ai-investment/ranking-engine |
| 504 | tag: latest |
| 505 | port: 8000 |
| 506 | scalingClass: HORIZONTALLY_SCALABLE |
| 507 | - name: portfolio-optimizer |
| 508 | image: ai-investment/portfolio-optimizer |
| 509 | tag: latest |
| 510 | port: 8000 |
| 511 | scalingClass: HORIZONTALLY_SCALABLE |
| 512 | |
| 513 | aiServiceImageOverrides: {} |
| 514 | |
| 515 | aiServiceDefaults: |
| 516 | replicaCount: 1 |
| 517 | service: |
| 518 | type: ClusterIP |
| 519 | port: 80 |
| 520 | probes: |
| 521 | startup: |
| 522 | enabled: true |
| 523 | path: /health |
| 524 | periodSeconds: 5 |
| 525 | timeoutSeconds: 3 |
| 526 | failureThreshold: 36 |
| 527 | readiness: |
| 528 | path: /health |
| 529 | periodSeconds: 10 |
| 530 | timeoutSeconds: 3 |
| 531 | failureThreshold: 3 |
| 532 | liveness: |
| 533 | path: /health |
| 534 | periodSeconds: 10 |
| 535 | timeoutSeconds: 3 |
| 536 | failureThreshold: 3 |
| 537 | autoscaling: |
| 538 | enabled: false |
| 539 | minReplicas: 2 |
| 540 | maxReplicas: 4 |
| 541 | targetCPUUtilizationPercentage: 70 |
| 542 | pdb: |
| 543 | enabled: false |
| 544 | minAvailable: 1 |
| 545 | resources: |
| 546 | requests: |
| 547 | cpu: 100m |
| 548 | memory: 256Mi |
| 549 | limits: |
| 550 | cpu: 500m |
| 551 | memory: 768Mi |
| 552 | |
| 553 | research: |
| 554 | liveEnabled: false |
| 555 | demoEnabled: true |
| 556 | logLevel: WARNING |
| 557 | persistence: |
| 558 | enabled: false |
| 559 | databaseBackend: postgres |
| 560 | databaseSchema: research |
| 561 | distributedLock: |
| 562 | backend: process |
| 563 | acquireTimeoutSeconds: 30 |
| 564 | mcpAcquisition: |
| 565 | enabled: false |
| 566 | gatewayBaseUrl: http://mcp-gateway |
| 567 | timeoutSeconds: 10 |
| 568 | serviceIdentity: research-engine |
| 569 | readinessEnsureTimeoutSeconds: 25 |
| 570 | portfolioServiceBaseUrl: http://portfolio-service |
| 571 | providers: |
| 572 | nseAnnouncementsUrl: https://www.nseindia.com/api/corporate-announcements |
| 573 | nseShareholdingsUrl: https://www.nseindia.com/api/corporate-share-holdings-master |
| 574 | yahooSearchUrl: https://query1.finance.yahoo.com/v1/finance/search |
| 575 | yahooQuoteUrl: https://query1.finance.yahoo.com/v7/finance/quote |
| 576 | yahooSummaryUrl: https://query2.finance.yahoo.com/v10/finance/quoteSummary/{ticker} |
| 577 | secTickerUrl: https://www.sec.gov/files/company_tickers.json |
| 578 | secCompanyFactsUrl: https://data.sec.gov/api/xbrl/companyfacts/CIK{cik}.json |
| 579 | eodhdBaseUrl: https://eodhd.com/api |
| 580 | eodhdCredentialSecretName: "" |
| 581 | eodhdApiKeySecretKey: api-key |
| 582 | http: |
| 583 | requestTimeoutSeconds: 10 |
| 584 | connectTimeoutSeconds: 3 |
| 585 | maxRetries: 2 |
| 586 | search: |
| 587 | enabled: false |
| 588 | provider: disabled |
| 589 | endpoint: "" |
| 590 | engineId: "" |
| 591 | engineIdSecretName: "" |
| 592 | engineIdSecretKey: engine-id |
| 593 | apiKeySecretName: "" |
| 594 | apiKeySecretKey: api-key |
| 595 | windowMonths: 12 |
| 596 | maxQueriesPerCategory: 6 |
| 597 | maxResultsPerQuery: 5 |
| 598 | maxDocumentsPerRefresh: 6 |
| 599 | refreshCooldownSeconds: 3600 |
| 600 | cacheTtlSeconds: 86400 |
| 601 | allowedDomains: [] |
| 602 | |
| 603 | featureFlags: |
| 604 | mcpEnabled: false |
| 605 | llmEnabled: false |
| 606 | scheduledJobsEnabled: false |
| 607 | globalResearchAcquisitionEnabled: false |
| 608 | |
| 609 | marketData: |
| 610 | demoMode: true |
| 611 | quoteCacheMode: memory |
| 612 | quoteCacheTtl: PT5M |
| 613 | nifty500Url: https://www.niftyindices.com/IndexConstituent/ind_nifty500list.csv |
| 614 | |
| 615 | mcpGateway: |
| 616 | implemented: true |
| 617 | enabled: false |
| 618 | exposure: INTERNAL_ONLY |
| 619 | image: ai-investment/mcp-gateway |
| 620 | tag: latest |
| 621 | port: 8000 |
| 622 | replicaCount: 1 |
| 623 | transport: streamable-http |
| 624 | httpPath: /mcp |
| 625 | maxRequestBodyBytes: 262144 |
| 626 | # Empty means the chart's centralized serviceEndpoints.researchEngine value. |
| 627 | researchBaseUrl: "" |
| 628 | serviceIdentity: local-mcp-gateway |
| 629 | authenticationType: LOCAL_SERVICE |
| 630 | localUserId: "" |
| 631 | roles: |
| 632 | - MCP_READER |
| 633 | scopes: |
| 634 | - mcp:read |
| 635 | externalProvidersEnabled: false |
| 636 | externalCallerIdentities: |
| 637 | - research-engine |
| 638 | yahooFinance: |
| 639 | enabled: false |
| 640 | transport: streamable-http |
| 641 | endpoint: "" |
| 642 | stdioCommand: "" |
| 643 | stdioArgs: [] |
| 644 | authType: NONE |
| 645 | authHeaderName: Authorization |
| 646 | authSecretName: "" |
| 647 | authSecretKey: yahoo-mcp-token |
| 648 | stdioTokenEnvName: "" |
| 649 | # A capability remains UNKNOWN (SHAREHOLDING defaults UNSUPPORTED) until |
| 650 | # an approved server contract supplies an exact region/requirement/tool mapping. |
| 651 | capabilities: [] |
| 652 | timeoutSeconds: 8 |
| 653 | maxRetries: 1 |
| 654 | retryBackoffSeconds: 0.2 |
| 655 | maxConcurrency: 4 |
| 656 | allowedHosts: |
| 657 | - mcp-gateway |
| 658 | - mcp-gateway:* |
| 659 | - localhost |
| 660 | - localhost:* |
| 661 | allowedOrigins: [] |
| 662 | timeouts: |
| 663 | invocationSeconds: 10 |
| 664 | connectSeconds: 3 |
| 665 | readSeconds: 8 |
| 666 | httpPool: |
| 667 | maxConnections: 50 |
| 668 | maxKeepaliveConnections: 20 |
| 669 | service: |
| 670 | type: ClusterIP |
| 671 | port: 80 |
| 672 | ingress: |
| 673 | enabled: false |
| 674 | probes: |
| 675 | startup: |
| 676 | enabled: true |
| 677 | path: /health |
| 678 | periodSeconds: 5 |
| 679 | timeoutSeconds: 3 |
| 680 | failureThreshold: 30 |
| 681 | readiness: |
| 682 | path: /health/ready |
| 683 | periodSeconds: 10 |
| 684 | timeoutSeconds: 3 |
| 685 | failureThreshold: 3 |
| 686 | liveness: |
| 687 | path: /health |
| 688 | periodSeconds: 10 |
| 689 | timeoutSeconds: 3 |
| 690 | failureThreshold: 3 |
| 691 | resources: |
| 692 | requests: |
| 693 | cpu: 50m |
| 694 | memory: 128Mi |
| 695 | limits: |
| 696 | cpu: 300m |
| 697 | memory: 384Mi |
| 698 | autoscaling: |
| 699 | enabled: false |
| 700 | minReplicas: 2 |
| 701 | maxReplicas: 4 |
| 702 | targetCPUUtilizationPercentage: 70 |
| 703 | pdb: |
| 704 | enabled: false |
| 705 | minAvailable: 1 |
| 706 | networkPolicy: |
| 707 | enabled: false |
| 708 | |
| 709 | yahooFinanceMcp: |
| 710 | implemented: true |
| 711 | enabled: false |
| 712 | exposure: INTERNAL_ONLY |
| 713 | image: ai-investment/yahoo-finance-mcp |
| 714 | tag: latest |
| 715 | port: 8002 |
| 716 | replicaCount: 1 |
| 717 | transport: streamable-http |
| 718 | httpPath: /mcp |
| 719 | maxRequestBodyBytes: 131072 |
| 720 | maxResponseItems: 1000 |
| 721 | upstreamTimeoutSeconds: 8 |
| 722 | maxConcurrency: 4 |
| 723 | userAgent: AIInvestmentResearchBot/0.1 contact=research-compliance@example.invalid |
| 724 | # Executable first-party contracts. Tool success is still subject to strict |
| 725 | # identity, freshness, and requirement-completeness validation at runtime. |
| 726 | capabilities: |
| 727 | - &yahoo_quote |
| 728 | region: INDIA |
| 729 | requirementId: LATEST_PRICE |
| 730 | capability: LATEST_PRICE |
| 731 | tool: get_quote |
| 732 | state: SUPPORTED |
| 733 | maxAgeSeconds: 900 |
| 734 | - &yahoo_history |
| 735 | region: INDIA |
| 736 | requirementId: HISTORICAL_PRICE_SERIES |
| 737 | capability: MARKET_HISTORY |
| 738 | tool: get_price_history |
| 739 | state: SUPPORTED |
| 740 | minimumItems: 2 |
| 741 | toolArguments: {lookbackDays: 400} |
| 742 | - &yahoo_valuation |
| 743 | region: INDIA |
| 744 | requirementId: VALUATION_INPUTS |
| 745 | capability: VALUATION_INPUTS |
| 746 | tool: get_financials |
| 747 | state: SUPPORTED |
| 748 | - &yahoo_business |
| 749 | region: INDIA |
| 750 | requirementId: BUSINESS_QUALITY_FACTS |
| 751 | capability: ANNUAL_FINANCIALS |
| 752 | tool: get_financials |
| 753 | state: SUPPORTED |
| 754 | - &yahoo_growth |
| 755 | region: INDIA |
| 756 | requirementId: GROWTH_FACTS |
| 757 | capability: GROWTH_INPUTS |
| 758 | tool: get_financials |
| 759 | state: SUPPORTED |
| 760 | - &yahoo_balance |
| 761 | region: INDIA |
| 762 | requirementId: BALANCE_SHEET_FACTS |
| 763 | capability: BALANCE_SHEET |
| 764 | tool: get_financials |
| 765 | state: SUPPORTED |
| 766 | - &yahoo_quarterly |
| 767 | region: INDIA |
| 768 | requirementId: QUARTERLY_FINANCIALS |
| 769 | capability: QUARTERLY_FINANCIALS |
| 770 | tool: get_quarterly_financials |
| 771 | state: SUPPORTED |
| 772 | - &yahoo_news |
| 773 | region: INDIA |
| 774 | requirementId: CURRENT_NEWS |
| 775 | capability: NEWS |
| 776 | tool: get_news |
| 777 | state: SUPPORTED |
| 778 | toolArguments: {days: 30} |
| 779 | - &yahoo_sector |
| 780 | region: INDIA |
| 781 | requirementId: SECTOR_MACRO |
| 782 | capability: SECTOR_INDUSTRY |
| 783 | tool: get_sector_industry |
| 784 | state: SUPPORTED |
| 785 | - &yahoo_profile |
| 786 | region: INDIA |
| 787 | requirementId: COMPANY_PROFILE |
| 788 | capability: COMPANY_PROFILE |
| 789 | tool: get_company_profile |
| 790 | state: SUPPORTED |
| 791 | - &yahoo_analyst |
| 792 | region: INDIA |
| 793 | requirementId: ANALYST_DATA |
| 794 | capability: ANALYST_DATA |
| 795 | tool: get_analyst_data |
| 796 | state: SUPPORTED |
| 797 | - &yahoo_shareholding |
| 798 | region: INDIA |
| 799 | requirementId: SHAREHOLDING |
| 800 | capability: SHAREHOLDING |
| 801 | state: UNSUPPORTED |
| 802 | - {<<: *yahoo_quote, region: USA} |
| 803 | - {<<: *yahoo_history, region: USA} |
| 804 | - {<<: *yahoo_valuation, region: USA} |
| 805 | - {<<: *yahoo_business, region: USA} |
| 806 | - {<<: *yahoo_growth, region: USA} |
| 807 | - {<<: *yahoo_balance, region: USA} |
| 808 | - {<<: *yahoo_quarterly, region: USA} |
| 809 | - {<<: *yahoo_news, region: USA} |
| 810 | - {<<: *yahoo_sector, region: USA} |
| 811 | - {<<: *yahoo_profile, region: USA} |
| 812 | - {<<: *yahoo_analyst, region: USA} |
| 813 | - {<<: *yahoo_shareholding, region: USA} |
| 814 | - {<<: *yahoo_quote, region: EUROPE} |
| 815 | - {<<: *yahoo_history, region: EUROPE} |
| 816 | - {<<: *yahoo_valuation, region: EUROPE} |
| 817 | - {<<: *yahoo_business, region: EUROPE} |
| 818 | - {<<: *yahoo_growth, region: EUROPE} |
| 819 | - {<<: *yahoo_balance, region: EUROPE} |
| 820 | - {<<: *yahoo_quarterly, region: EUROPE} |
| 821 | - {<<: *yahoo_news, region: EUROPE} |
| 822 | - {<<: *yahoo_sector, region: EUROPE} |
| 823 | - {<<: *yahoo_profile, region: EUROPE} |
| 824 | - {<<: *yahoo_analyst, region: EUROPE} |
| 825 | - {<<: *yahoo_shareholding, region: EUROPE} |
| 826 | allowedHosts: |
| 827 | - yahoo-finance-mcp |
| 828 | - yahoo-finance-mcp:* |
| 829 | - localhost |
| 830 | - localhost:* |
| 831 | allowedOrigins: [] |
| 832 | service: |
| 833 | type: ClusterIP |
| 834 | port: 80 |
| 835 | ingress: |
| 836 | enabled: false |
| 837 | probes: |
| 838 | startup: |
| 839 | enabled: true |
| 840 | path: /health |
| 841 | periodSeconds: 5 |
| 842 | timeoutSeconds: 3 |
| 843 | failureThreshold: 30 |
| 844 | readiness: |
| 845 | path: /health/ready |
| 846 | periodSeconds: 10 |
| 847 | timeoutSeconds: 3 |
| 848 | failureThreshold: 3 |
| 849 | liveness: |
| 850 | path: /health |
| 851 | periodSeconds: 10 |
| 852 | timeoutSeconds: 3 |
| 853 | failureThreshold: 3 |
| 854 | resources: |
| 855 | requests: |
| 856 | cpu: 50m |
| 857 | memory: 128Mi |
| 858 | limits: |
| 859 | cpu: 300m |
| 860 | memory: 384Mi |
| 861 | autoscaling: |
| 862 | enabled: false |
| 863 | minReplicas: 2 |
| 864 | maxReplicas: 4 |
| 865 | targetCPUUtilizationPercentage: 70 |
| 866 | pdb: |
| 867 | enabled: false |
| 868 | minAvailable: 1 |
| 869 | networkPolicy: |
| 870 | enabled: false |
| 871 | |
| 872 | devDependencies: |
| 873 | enabled: true |
| 874 | postgres: |
| 875 | image: postgres:16-alpine |
| 876 | database: investment |
| 877 | username: investment |
| 878 | password: "" |
| 879 | passwordSecretName: dev-postgres |
| 880 | persistence: |
| 881 | enabled: true |
| 882 | classification: DURABLE_DEV_ONLY |
| 883 | existingClaim: "" |
| 884 | storageClass: local-path |
| 885 | size: 5Gi |
| 886 | resources: |
| 887 | requests: |
| 888 | cpu: 100m |
| 889 | memory: 256Mi |
| 890 | limits: |
| 891 | cpu: 500m |
| 892 | memory: 512Mi |
| 893 | redis: |
| 894 | image: redis:7-alpine |
| 895 | classification: CACHE |
| 896 | resources: |
| 897 | requests: |
| 898 | cpu: 50m |
| 899 | memory: 64Mi |
| 900 | limits: |
| 901 | cpu: 250m |
| 902 | memory: 256Mi |
| 903 | kafka: |
| 904 | image: apache/kafka:3.7.0 |
| 905 | classification: DEV_ONLY |
| 906 | resources: |
| 907 | requests: |
| 908 | cpu: 250m |
| 909 | memory: 512Mi |
| 910 | limits: |
| 911 | cpu: 1000m |
| 912 | memory: 1Gi |
| 913 | searxng: |
| 914 | enabled: false |
| 915 | image: searxng/searxng:latest |
| 916 | port: 8080 |
| 917 | secretKey: "" |
| 918 | secretName: dev-searxng |
| 919 | secretKeyName: SEARXNG_SECRET |
| 920 | resources: |
| 921 | requests: |
| 922 | cpu: 100m |
| 923 | memory: 256Mi |
| 924 | limits: |
| 925 | cpu: 500m |
| 926 | memory: 768Mi |