Files
dify/api/constants
Yansong Zhang d067d84811 feat(api): Agent App type S1 — AppMode.AGENT + create flow + binding
First slice of the Agent App type (新 Agent 作为独立 App 类型,替代
chatbot/agent-legacy/completion). Design:
https://km.dify.langgenius.ai/wiki/spaces/DT/pages/460161070/Agent+App+Type

* New ``AppMode.AGENT = "agent"`` (distinct from legacy ``agent-chat`` ReAct
  app). Runtime model/prompt/tools live in the bound Agent Soul, so the
  default template seeds no model_config.
* Create flow: creating an Agent App also creates a roster Agent bound 1:1 via
  ``Agent.app_id`` (decision Q1), inside the same transaction so app + backing
  agent persist atomically. ``AgentRosterService.create_backing_agent_for_app``
  builds the agent + a v1 (empty) Agent Soul snapshot without committing; the
  user configures model/prompt/tools afterward in the Composer.
* ``App.bound_agent_id`` resolves the backing roster Agent from the app id (so
  the console can open the Composer in roster-detail mode); surfaced on the app
  detail response. Returns None for non-agent apps (short-circuits, no DB hit).
* ``CreateAppParams`` / ``AppListParams`` accept "agent"; list filter handles it.

Scope: S1 only (foundation). Runtime/preview, web/service API, access &
sharing, logs and feature flags land in S2–S7 per the design.

Tests: roster backing-agent build/link/get + enum/template/params/bound_agent_id
short-circuit. 46 passing in app + agent service suites; ruff + pyrefly clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 18:46:10 +08:00
..