Commit Graph

16 Commits

Author SHA1 Message Date
Yaojia Wang
38644594d2 test: add thread_id validation tests for replay API
- Test invalid thread_id with spaces returns 400
- Test thread_id with special chars returns 400
- Tighten existing 404 test assertion
2026-03-31 13:44:04 +02:00
Yaojia Wang
ef6e5ac2be fix: address security findings in Phase 4 analytics and replay
- Fix CRITICAL: use parameterized INTERVAL arithmetic (%(days)s * INTERVAL '1 day')
  instead of string interpolation inside SQL literal
- Use asyncio.gather() for parallel query execution in get_analytics()
- Add range upper bound (max 365 days) to prevent DoS via full-table scans
- Add thread_id validation (alphanumeric, max 128 chars) in replay API
- Sanitize error messages to not reflect user input
2026-03-31 13:38:09 +02:00
Yaojia Wang
33db5aeb10 feat: complete phase 4 -- conversation replay API + analytics dashboard
- Replay models: StepType enum, ReplayStep, ReplayPage frozen dataclasses
- Checkpoint transformer: PostgresSaver JSONB -> structured timeline steps
- Replay API: GET /api/conversations (paginated), GET /api/replay/{thread_id}
- Analytics models: AgentUsage, InterruptStats, AnalyticsResult
- Analytics event recorder: Protocol + PostgresAnalyticsRecorder + NoOp
- Analytics queries: resolution_rate, agent_usage, escalation_rate, cost, interrupts
- Analytics API: GET /api/analytics?range=Xd with envelope response
- DB migration: analytics_events table + conversations column additions
- 74 new tests, 399 total passing, 92.87% coverage
2026-03-31 13:35:45 +02:00
Yaojia Wang
a2f750269d fix: address critical security and code review findings in Phase 3
- Wire ImportOrchestrator into review_api start_import via BackgroundTasks
- Sanitize docstrings in generated tool code to prevent code injection
- Add Literal["read", "write"] validation for access_type
- Add regex validation for agent_group
- Validate URL scheme (http/https only) in ImportRequest
- Validate LLM output fields (clamp confidence, validate access_type)
- Use dataclasses.replace instead of manual reconstruction in importer
- Expand SSRF blocked networks (Carrier-Grade NAT, IPv4-mapped IPv6, etc.)
- Make _BLOCKED_NETWORKS immutable tuple
- Use yaml.safe_dump instead of yaml.dump
- Fix _to_snake_case for empty strings and Python keywords
2026-03-31 00:28:28 +02:00
Yaojia Wang
a54eb224e0 feat: complete phase 3 -- OpenAPI auto-discovery, SSRF protection, tool generation
- SSRF protection: private IP blocking, DNS rebinding defense, redirect validation
- OpenAPI fetcher with SSRF guard, JSON/YAML auto-detection, 10MB limit
- Structural spec validator (3.0.x/3.1.x)
- Endpoint parser with $ref resolution, auto-generated operation IDs
- Heuristic + LLM endpoint classifier with Protocol interface
- Review API at /api/openapi (import, job status, classification CRUD, approve)
- @tool code generator + Agent YAML generator
- Import orchestrator (fetch -> validate -> parse -> classify pipeline)
- 125 new tests, 322 total passing, 93.23% coverage
2026-03-31 00:10:44 +02:00
Yaojia Wang
006b4ee5d7 fix: resolve ruff lint errors in Phase 2 code
- Move intent imports to TYPE_CHECKING block in graph.py (TC001)
- Rename test classes to CapWords convention (N801)
- Fix line length violations across test files (E501)
- Auto-fix import sorting (I001)
2026-03-30 21:44:47 +02:00
Yaojia Wang
b861ff055f test: add routing integration tests for Phase 2 test requirements
9 tests covering the complete multi-agent routing flow:
- Single-intent routing to each agent (order_lookup, order_actions, discount, fallback)
- Multi-intent routing hint injection for sequential execution
- Ambiguity detection skips graph and returns clarification
- Low confidence threshold triggers ambiguity
- No-classifier fallback to supervisor prompt routing

Fills Phase 2 test requirement for integration-level routing coverage.
Total: 197 tests, 92.60% coverage.
2026-03-30 21:41:01 +02:00
Yaojia Wang
512f988dd0 test: add Phase 2 checkpoint acceptance tests
18 integration tests validating all 7 Phase 2 checkpoint criteria:
1. Order query routes to order_lookup agent
2. Multi-intent classification with routing hint injection
3. Ambiguous message triggers clarification prompt
4. 30-min interrupt TTL auto-cancel with retry prompt
5. Webhook POST escalation with retry on failure
6. E-commerce template loads 4 correctly configured agents
7. Coverage at 92.60% (188 tests total)
2026-03-30 21:38:25 +02:00
Yaojia Wang
6e7b824b64 test: add integration tests for WebSocket message flow
17 integration tests covering:
- Happy path: token streaming, tool calls, multi-message sessions
- Interrupt flow: approve and reject paths with manager tracking
- Session TTL: expiration, sliding window reset, interrupt extension
- Validation: invalid JSON, missing fields, size limits
- Interrupt TTL: expired interrupt sends retry prompt

Fills Phase 1 test gap for integration-level WebSocket coverage.
Total: 170 tests, 92.15% coverage.
2026-03-30 21:24:31 +02:00
Yaojia Wang
1050df780d feat: complete phase 2 -- multi-agent routing, interrupt TTL, escalation, templates
- Intent classification with LLM structured output (single/multi/ambiguous)
- Discount agent with apply_discount and generate_coupon tools
- Interrupt manager with 30-min TTL auto-expiration and retry prompts
- Webhook escalation module with exponential backoff retry (max 3)
- Three vertical industry templates (e-commerce, SaaS, fintech)
- Template loading in AgentRegistry
- Enhanced supervisor prompt with dynamic agent descriptions
- 153 tests passing, 90.18% coverage
2026-03-30 21:04:39 +02:00
Yaojia Wang
7c3571b47d chore: update local Claude Code permission settings
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 15:14:16 +02:00
Yaojia Wang
98331abbd5 Update doc 2026-03-30 15:09:04 +02:00
Yaojia Wang
47d4a57313 docs: mark phase 1 as completed 2026-03-30 00:54:54 +02:00
Yaojia Wang
33488fd634 feat: complete phase 1 -- core framework with chat loop, agents, and React UI
Backend:
- FastAPI WebSocket /ws endpoint with streaming via LangGraph astream
- LangGraph Supervisor connecting 3 mock agents (order_lookup, order_actions, fallback)
- YAML Agent Registry with Pydantic validation and immutable configs
- PostgresSaver checkpoint persistence via langgraph-checkpoint-postgres
- Session TTL with 30-min sliding window and interrupt extension
- LLM provider abstraction (Anthropic/OpenAI/Google)
- Token usage + cost tracking callback handler
- Input validation: message size cap, thread_id format, content length
- Security: no hardcoded defaults, startup API key validation, no input reflection

Frontend:
- React 19 + TypeScript + Vite chat UI
- WebSocket hook with reconnect + exponential backoff
- Streaming token display with agent attribution
- Interrupt approval/reject UI for write operations
- Collapsible tool call viewer

Testing:
- 87 unit tests, 87% coverage (exceeds 80% requirement)
- Ruff lint + format clean

Infrastructure:
- Docker Compose (PostgreSQL 16 + backend)
- pyproject.toml with full dependency management
2026-03-30 00:54:21 +02:00
Yaojia Wang
e4f08576a9 docs: add CLAUDE.md project instructions and architecture docs
- CLAUDE.md with phase execution workflow and project conventions
- ARCHITECTURE.md with system design, data flow, and component breakdown
- DEVELOPMENT-PLAN.md with detailed 5-phase task breakdown
2026-03-30 00:26:50 +02:00
Yaojia Wang
f93e8baef1 feat: initial project setup with planning docs
Smart Support - AI customer service action layer framework.
Includes design doc, CEO plan, eng review, test plan, and README.
2026-03-29 21:11:36 +02:00