Files
teatea-pension/.trellis/tasks/07-04-ai-agent-knowledge-analysis/implement.md

9.5 KiB

AI Agent Knowledge Analysis Implementation Plan

Preconditions

  • User reviews and approves prd.md, design.md, and implement.md.
  • Task status is moved from planning to in_progress with task.py start.
  • Before editing code in Phase 2, load trellis-before-dev and relevant specs:
    • .trellis/spec/shared/code-quality.md
    • .trellis/spec/shared/typescript.md
    • .trellis/spec/shared/dependencies.md
    • .trellis/spec/backend/directory-structure.md
    • .trellis/spec/backend/database.md
    • .trellis/spec/backend/authentication.md
    • .trellis/spec/backend/type-safety.md
    • .trellis/spec/backend/quality.md
    • .trellis/spec/frontend/components.md
    • .trellis/spec/frontend/type-safety.md
    • .trellis/spec/frontend/quality.md

Implementation Checklist

1. Dependencies And Environment

  • Add LangChain runtime packages:
    • langchain
    • @langchain/core
    • @langchain/openai
  • Decide and document default embedding dimension for AI_EMBEDDING_MODEL.
  • Add env handling in modules/ai/server/config.ts:
    • AI_BASE_URL
    • AI_API_KEY
    • AI_CHAT_MODEL
    • AI_EMBEDDING_MODEL
  • Update local PostgreSQL image or setup notes so pgvector is available.

Validation:

  • pnpm install
  • pnpm type-check

Rollback:

  • Remove added dependencies and AI env usage if the AI module is backed out.

2. Database Schema And Migration

  • Update modules/core/server/schema.ts:
    • AI enums for knowledge scope/status and analysis status.
    • aiKnowledgeEntries.
    • aiKnowledgeChunks.
    • elderAiAnalyses.
  • Add pgvector extension migration support.
  • Generate Drizzle migration with pnpm db:generate.
  • Manually inspect generated SQL for:
    • CREATE EXTENSION IF NOT EXISTS vector.
    • Correct foreign keys.
    • Correct indexes.
    • Correct vector column type/dimension.

Validation:

  • pnpm db:generate
  • pnpm type-check
  • Apply migration locally when DB is available: pnpm db:migrate.

Rollback:

  • Drop AI tables and extension-dependent indexes in a rollback migration if needed.
  • Do not drop vector extension automatically if other future objects may use it.

3. Permissions And Role Seeding

  • Update modules/core/types.ts:
    • Add ai:read, ai:manage, knowledge:read, knowledge:manage.
  • Update modules/core/server/permissions.ts:
    • Add permission definitions.
    • Update default role grants:
      • platform_admin: all four.
      • org_admin: all four.
      • manager: all four.
      • caregiver: ai:read, knowledge:read.
      • viewer, family, resident: none.
  • Ensure ensureSystemDefaults() upserts permissions and role grants without deleting custom grants.

Validation:

  • pnpm type-check
  • Targeted tests or assertions for seeded permission definitions and role grants.

Rollback:

  • Remove permissions from default grants only through an intentional migration/seed change; avoid deleting custom user role state.

4. AI Domain Types

  • Create modules/ai/types.ts.
  • Define:
    • Knowledge entry input and status/scope values.
    • Analysis status values.
    • Data scope values.
    • Risk/severity/priority values.
    • Structured analysis output type and runtime validator.
    • Citation type.
    • Sanitized error category type.
  • Avoid any; use explicit unknown validation helpers when parsing API bodies or AI output.

Validation:

  • Unit tests for validators if they contain non-trivial parsing.
  • pnpm type-check

Rollback:

  • Types are isolated; remove module if feature is backed out.

5. Knowledge Service

  • Create modules/ai/server/knowledge.ts.
  • Implement:
    • List visible entries by permission and active organization.
    • Create/update/delete entries with scope validation.
    • Server-side chunking.
    • Embedding generation through LangChain OpenAI-compatible embeddings.
    • Chunk rebuild on create/update.
    • Scope-filtered retrieval for platform shared + active organization entries.
  • Write audit logs for create/update/delete/enable/disable.
  • Ensure no organization-private chunks from other organizations can be retrieved.

Validation:

  • Tests for scope filtering:
    • Platform shared visible to organization user.
    • Own organization visible.
    • Other organization not visible.
    • Disabled entries not retrieved.
  • Tests for mutation permission failures.

Rollback:

  • Disable /settings/knowledge navigation and API routes if embedding is unavailable.
  • Existing tables can remain unused.

6. Elder Context Service

  • Create modules/ai/server/elder-context.ts.
  • Implement permission-aware resident graph assembly:
    • Always include elder basics after elder:read.
    • Include health only with health:read.
    • Include care only with care:read.
    • Include family only with family:read.
    • Include admission/facility only with matching read permissions.
    • Include alert/incident only with matching read permissions.
    • Include knowledge only with knowledge:read.
  • Return dataScopes exactly matching included families.
  • Use batch queries and Promise.all for independent loads.

Validation:

  • Tests for data family inclusion/exclusion by permissions.
  • Tests that target elder must belong to active organization.

Rollback:

  • This service is isolated under modules/ai; remove API use if feature is disabled.

7. Analysis Service

  • Create modules/ai/server/analysis.ts.
  • Implement:
    • Generate structured analysis synchronously with LangChain.
    • Validate AI output against fixed schema.
    • Save completed history with result/citations/model summary/data scopes.
    • On failure, save failed history with sanitized error category/reason.
    • Write success/failure audit logs.
    • Redact history details when current permissions do not satisfy stored dataScopes.
  • Do not store full prompts, full context snapshots, API keys, or raw provider errors.

Validation:

  • Tests for:
    • Missing config -> structured failure + failed history.
    • Schema validation failure -> failed history.
    • History detail redaction when permissions are insufficient.
    • Completed history shape.

Rollback:

  • Keep history rows as audit evidence; hide UI/API if provider issues block rollout.

8. API Routes

  • Add elder analysis routes:
    • app/api/ai/elders/[id]/analyses/route.ts
      • GET: latest/history with permission-aware redaction.
      • POST: synchronous generation.
  • Add knowledge routes:
    • app/api/ai/knowledge/route.ts
      • GET, POST.
    • app/api/ai/knowledge/[id]/route.ts
      • PATCH, DELETE.
  • Use existing requirePermission, jsonSuccess, jsonFailure, readJsonBody, and recordAuditLog patterns.
  • Preserve Cache-Control: no-store through existing helpers.

Validation:

  • Route tests for auth/permission failures and structured responses.
  • pnpm type-check

Rollback:

  • Remove routes or return feature-disabled failures while keeping data.

9. Knowledge Settings UI

  • Create:
    • app/(app)/app/settings/knowledge/page.tsx
    • app/(app)/app/[organizationSlug]/settings/knowledge/page.tsx
    • modules/ai/components/KnowledgeManagementClient.tsx
  • Update:
    • modules/shared/lib/navigation.ts
    • modules/shared/components/AppSidebarNav.tsx icon map if a new icon key is needed.
  • UI supports:
    • List/filter/search.
    • Create/edit dialog.
    • Enable/disable/delete.
    • Read-only view if missing knowledge:manage.
  • Follow existing settings/client component patterns.

Validation:

  • Manual browser check.
  • Type-check/lint.

Rollback:

  • Remove nav entry and route.

10. Elder Analysis UI

  • Update modules/elders/components/EldersClient.tsx.
  • Add AI 分析 row action for authorized users.
  • Create modules/ai/components/ElderAiAnalysisDialog.tsx.
  • Dialog displays:
    • Elder summary.
    • Generate button/loading state.
    • Latest completed analysis.
    • Failed state if latest attempt failed.
    • Findings, recommendations, data gaps.
    • Citations.
    • History list with restricted placeholders.
  • No chat input.
  • No one-click business mutation.

Validation:

  • Manual browser check for desktop/mobile widths.
  • Confirm button text fits and table layout remains stable.
  • Verify unauthorized users do not see the action.

Rollback:

  • Remove row action; API/history remains dormant.

11. Quality Gate

Run:

  • pnpm lint
  • pnpm type-check
  • pnpm test if route/domain tests were added.
  • pnpm build before final completion if time and environment allow.

Manual checks:

  • Knowledge CRUD as authorized admin/manager.
  • Knowledge read-only as caregiver.
  • Elder analysis generation with configured AI provider.
  • Missing AI config failure.
  • History redaction across roles.
  • Other-organization knowledge cannot appear in retrieval.

Risky Files

  • modules/core/server/schema.ts
  • modules/core/types.ts
  • modules/core/server/permissions.ts
  • compose.yaml
  • drizzle/*
  • modules/elders/components/EldersClient.tsx
  • modules/shared/lib/navigation.ts

Rollback Points

  • After dependency install: revert package changes if LangChain package compatibility fails.
  • After schema migration generation: inspect SQL before applying.
  • After permissions update: verify default role grants before touching UI.
  • After API routes: keep UI disabled until permission and scope tests pass.
  • After UI: remove nav/row entry if backend generation is not production-ready.

Follow-Up Checks Before Start

  • Confirm pgvector deployment support on the target PostgreSQL server.
  • Pick and document embedding dimensions for the configured default embedding model.
  • Confirm production AI provider and env var names.
  • Decide whether to add seed knowledge entries for smoke testing.