Skip to content

Package Map

Top-Level Layout

src/domain_agent/              reusable generic package
  domain/                      core domain model
  application/                 ports, DTOs, use cases
  adapters/                    inbound/outbound adapters
  orchestration/langgraph/     LangGraph workflow assembly
examples/autonomous_digest/      autonomous digest demo app
examples/operational_change/     operational change demo app
examples/mock_api/               mock API demo app
tests/                           generic package tests
docs/                            project documentation

src/domain_agent

domain

핵심 도메인 모델이 있습니다.

  • src/domain_agent/domain/models.py

주요 타입:

  • Request
  • RequestStatus
  • RiskLevel
  • Proposal
  • ReviewDecision
  • AgentPlan
  • PlannedAction
  • ActionReviewDecision
  • PlanReviewResult

이 파일은 "도메인 중심 agent에서 무엇이 유효한 상태인가"를 정의합니다. 현재 기본 예제는 review capability를 포함합니다.

더 자세한 설명: - Domain Model

application

외부 세계와 맞닿는 계약, DTO, use case가 있습니다.

  • src/domain_agent/application/ports.py
  • src/domain_agent/application/dto.py
  • src/domain_agent/application/use_cases.py

읽는 기준:

  • ports.py: 어떤 의존성을 교체할 수 있는지
  • dto.py: workflow와 사람 검토 사이에 어떤 payload가 오가는지
  • use_cases.py: workflow를 어떻게 실행하고 interrupt를 어떻게 resume하는지

orchestration/langgraph

LangGraph graph와 node가 있습니다.

  • src/domain_agent/orchestration/langgraph/graph.py
  • src/domain_agent/orchestration/langgraph/state.py
  • src/domain_agent/orchestration/langgraph/nodes/deterministic.py
  • src/domain_agent/orchestration/langgraph/nodes/llm.py

이 레이어는 "무슨 순서로 실행되는가"를 담당하는 LangGraph orchestration입니다.

adapters/outbound

외부 시스템 쪽으로 나가는 outbound adapter입니다.

  • src/domain_agent/adapters/outbound/in_memory.py

역할:

  • in-memory repository
  • deterministic context/proposal/planner
  • in-memory tools
  • static review handler

adapters/inbound

실제로 사용자가 진입하는 inbound adapter입니다.

  • src/domain_agent/adapters/inbound/cli_demo.py
  • src/domain_agent/adapters/inbound/cli_review.py
  • src/domain_agent/adapters/inbound/cli_graph.py

Example Apps

examples/operational_change

의도: - generic 코어 위에 운영 변경 도메인을 올리는 예

핵심 파일: - examples/operational_change/operational_change_demo/models.py - examples/operational_change/operational_change_demo/adapters.py - examples/operational_change/operational_change_demo/bootstrap.py

examples/autonomous_digest

의도: - human review 없이도 같은 core workflow를 사용할 수 있음을 보여주는 예

핵심 파일: - examples/autonomous_digest/autonomous_digest_demo/models.py - examples/autonomous_digest/autonomous_digest_demo/adapters.py - examples/autonomous_digest/autonomous_digest_demo/bootstrap.py

examples/mock_api

의도: - fake API를 가진 시나리오에서 generic 코어를 쓰는 예

핵심 파일: - examples/mock_api/mock_api_demo/models.py - examples/mock_api/mock_api_demo/client.py - examples/mock_api/mock_api_demo/adapters.py - examples/mock_api/mock_api_demo/bootstrap.py

Test Layout

generic package tests: - tests/unit - tests/integration

example app tests: - examples/autonomous_digest/tests - examples/operational_change/tests - examples/mock_api/tests

Practical Reading Advice

코드를 읽을 때 "어디가 프레임워크이고 어디가 비즈니스 의미인지"가 섞여 보이면, 아래처럼 나눠서 보면 됩니다.

  • 비즈니스 의미: domain
  • 외부 교체 가능 지점: application/ports.py
  • workflow 제어 흐름: orchestration/langgraph
  • 실제 실행용 입구: adapters/inbound
  • 샘플 도메인: examples/*

Code References

  • src/domain_agent/domain/models.py
  • docs/domain-model.md
  • src/domain_agent/application/ports.py
  • src/domain_agent/application/dto.py
  • src/domain_agent/application/use_cases.py
  • src/domain_agent/orchestration/langgraph/graph.py
  • src/domain_agent/orchestration/langgraph/state.py
  • src/domain_agent/orchestration/langgraph/nodes/deterministic.py
  • src/domain_agent/orchestration/langgraph/nodes/llm.py
  • src/domain_agent/adapters/outbound/in_memory.py
  • src/domain_agent/adapters/inbound/cli_demo.py
  • src/domain_agent/adapters/inbound/cli_review.py
  • src/domain_agent/adapters/inbound/cli_graph.py
  • examples/operational_change/operational_change_demo/models.py
  • examples/operational_change/operational_change_demo/adapters.py
  • examples/operational_change/operational_change_demo/bootstrap.py
  • examples/autonomous_digest/autonomous_digest_demo/models.py
  • examples/autonomous_digest/autonomous_digest_demo/adapters.py
  • examples/autonomous_digest/autonomous_digest_demo/bootstrap.py
  • examples/mock_api/mock_api_demo/models.py
  • examples/mock_api/mock_api_demo/client.py
  • examples/mock_api/mock_api_demo/adapters.py
  • examples/mock_api/mock_api_demo/bootstrap.py