AI Agents SDE Task Viewer
      • Context
      • Plan
      • Prd
  1. Home
  2. AgentSDE
  3. agent-core
  4. gh-348
  5. plan
  6. plan.md
plan.md(2.6 KB)· Apr 8, 2026· 2 min read
  • Summary
  • Files
  • Steps
  • Verification
  • Risks

Plan: MT-4 — TenantConfig Interfaces + TenantConfigService#

Summary#

Create TenantConfig and RepoConfig interfaces plus a TenantConfigService that models all currently hardcoded configuration (org, labels, branch naming, LLM settings) as a typed object. Single-tenant implementation reads from ConfigService with hardcoded defaults. No existing files are modified.

Files#

FileActionDescription
src/tenant/tenant-config.interface.tscreateTenantConfig and RepoConfig interfaces
src/tenant/tenant-config.service.tscreateTenantConfigService with getConfig() returning single tenant config from ENV + defaults
src/tenant/tenant.module.tscreateNestJS module providing and exporting TenantConfigService
src/tenant/tenant-config.service.spec.tscreateUnit tests for defaults, ConfigService reads, label values, missing required vars

Steps#

  1. Create TenantConfig interface capturing: tenantId, org, platform, platformCredentialPath, botUsername, defaultBaseBranch, branchPrefix, labels (in-refinement, refined, in-review, agent-blocked, backlog), projectId, projectNumber, llmProvider, llmCredentialPath, llmModel, llmTimeoutSecs, defaultDirective. Create RepoConfig extending Partial<TenantConfig> with repo and excludeFromAgent.
  2. Create TenantConfigService injecting ConfigService. Implement getConfig(org?: string, repo?: string): TenantConfig that reads GITHUB_OWNER, AGENT_USERNAME (required), PROJECT_ID, PROJECT_NUMBER, CLAUDE_TIMEOUT_SECS (optional with defaults) from ConfigService. Hardcode: platform='github', platformCredentialPath='env://GITHUB_TOKEN', defaultBaseBranch='master', branchPrefix='feat', llmProvider='claude-cli', defaultDirective='auto', label defaults matching current values in github.adapter.ts.
  3. Add constructor validation: throw if GITHUB_OWNER or AGENT_USERNAME is missing/empty from ConfigService.
  4. Create TenantModule providing and exporting TenantConfigService, importing ConfigModule.
  5. Write unit tests: correct defaults, ConfigService reads for org/project/bot/timeout, label values match hardcoded strings, throws on missing required vars.

Verification#

  • npx tsc --noEmit passes with no errors
  • npm run lint passes with zero warnings
  • npm run test -- --testPathPattern=tenant — all tests green

Risks#

  • Label string drift: Hardcoded label values ('in-refinement', 'agent-blocked', etc.) are duplicated from github.adapter.ts. Future work (downstream issues) should centralize label references through TenantConfigService.
ContextPrd