Merge remote-tracking branch 'origin/feat/agent-v2' into feat/agent-v2

This commit is contained in:
Yanli 盐粒 2026-06-25 13:19:03 +08:00
commit 49041ae2a6
18 changed files with 1074 additions and 339 deletions

View File

@ -330,8 +330,7 @@ def _delete_skill_for_app(*, current_user: Account, app_model: App, slug: str, a
file_ref.drive_key
for skill in agent_soul.files.skills
if (
skill.path
or (AgentSoulFilesService.skill_path_from_key(skill.skill_md_key) if skill.skill_md_key else "")
skill.path or (AgentSoulFilesService.skill_path_from_key(skill.skill_md_key) if skill.skill_md_key else "")
).strip("/")
== slug
for file_ref in skill.file_refs

View File

@ -674,9 +674,7 @@ def build_drive_aware_soul_mention_resolver(
base_resolver = build_soul_mention_resolver(agent_soul)
skill_names_by_key = {
skill.skill_md_key: skill.name
for skill in agent_soul.files.skills
if skill.skill_md_key and skill.name
skill.skill_md_key: skill.name for skill in agent_soul.files.skills if skill.skill_md_key and skill.name
}
file_names_by_key = {
file_ref.drive_key: file_ref.name or file_ref.drive_key.rsplit("/", 1)[-1]

View File

@ -240,9 +240,7 @@ class AgentConfigDraft(DefaultFieldsMixin, Base):
tenant_id: Mapped[str] = mapped_column(StringUUID, nullable=False)
agent_id: Mapped[str] = mapped_column(StringUUID, nullable=False)
draft_type: Mapped[AgentConfigDraftType] = mapped_column(
EnumText(AgentConfigDraftType, length=32), nullable=False
)
draft_type: Mapped[AgentConfigDraftType] = mapped_column(EnumText(AgentConfigDraftType, length=32), nullable=False)
account_id: Mapped[str | None] = mapped_column(StringUUID, nullable=True)
draft_owner_key: Mapped[str] = mapped_column(String(255), nullable=False, default="")
base_snapshot_id: Mapped[str | None] = mapped_column(StringUUID, nullable=True)

View File

@ -465,6 +465,83 @@ Check if activation token is valid
| ---- | ----------- |
| 204 | Agent service API key deleted |
### [DELETE] /agent/{agent_id}/build-draft
#### Parameters
| Name | Located in | Description | Required | Schema |
| ---- | ---------- | ----------- | -------- | ------ |
| agent_id | path | | Yes | string (uuid) |
#### Responses
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Agent build draft discarded | **application/json**: [AgentSimpleResultResponse](#agentsimpleresultresponse)<br> |
### [GET] /agent/{agent_id}/build-draft
#### Parameters
| Name | Located in | Description | Required | Schema |
| ---- | ---------- | ----------- | -------- | ------ |
| agent_id | path | | Yes | string (uuid) |
#### Responses
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Agent build draft | **application/json**: [AgentBuildDraftResponse](#agentbuilddraftresponse)<br> |
### [PUT] /agent/{agent_id}/build-draft
#### Parameters
| Name | Located in | Description | Required | Schema |
| ---- | ---------- | ----------- | -------- | ------ |
| agent_id | path | | Yes | string (uuid) |
#### Request Body
| Required | Schema |
| -------- | ------ |
| Yes | **application/json**: [ComposerSavePayload](#composersavepayload)<br> |
#### Responses
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Agent build draft saved | **application/json**: [AgentBuildDraftResponse](#agentbuilddraftresponse)<br> |
### [POST] /agent/{agent_id}/build-draft/apply
#### Parameters
| Name | Located in | Description | Required | Schema |
| ---- | ---------- | ----------- | -------- | ------ |
| agent_id | path | | Yes | string (uuid) |
#### Responses
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Agent build draft applied | **application/json**: [AgentBuildDraftApplyResponse](#agentbuilddraftapplyresponse)<br> |
### [POST] /agent/{agent_id}/build-draft/checkout
#### Parameters
| Name | Located in | Description | Required | Schema |
| ---- | ---------- | ----------- | -------- | ------ |
| agent_id | path | | Yes | string (uuid) |
#### Request Body
| Required | Schema |
| -------- | ------ |
| Yes | **application/json**: [AgentBuildDraftCheckoutPayload](#agentbuilddraftcheckoutpayload)<br> |
#### Responses
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Agent build draft checked out | **application/json**: [AgentBuildDraftResponse](#agentbuilddraftresponse)<br> |
### [GET] /agent/{agent_id}/chat-messages
Get Agent App chat messages for a conversation with pagination
@ -856,6 +933,26 @@ Get Agent App message details by ID
| 200 | Message retrieved successfully | **application/json**: [MessageDetailResponse](#messagedetailresponse)<br> |
| 404 | Agent or message not found | |
### [POST] /agent/{agent_id}/publish
#### Parameters
| Name | Located in | Description | Required | Schema |
| ---- | ---------- | ----------- | -------- | ------ |
| agent_id | path | | Yes | string (uuid) |
#### Request Body
| Required | Schema |
| -------- | ------ |
| Yes | **application/json**: [AgentPublishPayload](#agentpublishpayload)<br> |
#### Responses
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Agent draft published | **application/json**: [AgentPublishResponse](#agentpublishresponse)<br> |
| 403 | Insufficient permissions | |
### [GET] /agent/{agent_id}/referencing-workflows
List workflow apps that reference this Agent App's bound Agent (read-only)
@ -12170,9 +12267,10 @@ Default namespace
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| active_config_snapshot | [AgentConfigSnapshotSummaryResponse](#agentconfigsnapshotsummaryresponse) | | Yes |
| active_config_snapshot | [AgentConfigSnapshotSummaryResponse](#agentconfigsnapshotsummaryresponse) | | No |
| agent | [AgentComposerAgentResponse](#agentcomposeragentresponse) | | Yes |
| agent_soul | [AgentSoulConfig](#agentsoulconfig) | | Yes |
| draft | [AgentConfigDraftSummaryResponse](#agentconfigdraftsummaryresponse) | | No |
| save_options | [ [ComposerSaveStrategy](#composersavestrategy) ] | | Yes |
| validation | [ComposerValidationFindingsResponse](#composervalidationfindingsresponse) | | No |
| variant | string | | Yes |
@ -12227,7 +12325,7 @@ Default namespace
| name | string | | Yes |
| permission_keys | [ string ] | | No |
| role | string | | No |
| site | [Site](#site) | | No |
| site | [AppDetailSiteResponse](#appdetailsiteresponse) | | No |
| tags | [ [Tag](#tag) ] | | No |
| tracing | [JSONValue](#jsonvalue) | | No |
| updated_at | integer | | No |
@ -12335,6 +12433,27 @@ default (the config form sends the full desired feature state on save).
| date | string | | Yes |
| interactions | number | | Yes |
#### AgentBuildDraftApplyResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| draft | object | | Yes |
| result | string | | Yes |
#### AgentBuildDraftCheckoutPayload
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| force | boolean | Overwrite the existing current-user build draft | No |
#### AgentBuildDraftResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| agent_soul | object | | Yes |
| draft | object | | Yes |
| variant | string | | Yes |
#### AgentCliToolAuthorizationStatus
Authorization state for Agent-scoped CLI tools.
@ -12398,8 +12517,12 @@ Risk marker for CLI tool bootstrap commands.
| ---- | ---- | ----------- | -------- |
| active_config_snapshot_id | string | | No |
| description | string | | Yes |
| icon | string | | No |
| icon_background | string | | No |
| icon_type | string | | No |
| id | string | | Yes |
| name | string | | Yes |
| role | string | | No |
| scope | [AgentScope](#agentscope) | | Yes |
| status | [AgentStatus](#agentstatus) | | Yes |
@ -12486,8 +12609,10 @@ Risk marker for CLI tool bootstrap commands.
| ---- | ---- | ----------- | -------- |
| cli_tools | [ [AgentCliToolConfig](#agentclitoolconfig) ] | | No |
| dify_tools | [ [AgentComposerDifyToolCandidateResponse](#agentcomposerdifytoolcandidateresponse) ] | | No |
| files | [ [AgentFileRefConfig](#agentfilerefconfig) ] | | No |
| human_contacts | [ [AgentHumanContactConfig](#agenthumancontactconfig) ] | | No |
| knowledge_sets | [ [AgentComposerKnowledgeSetCandidateResponse](#agentcomposerknowledgesetcandidateresponse) ] | | No |
| skills | [ [AgentSkillRefConfig](#agentskillrefconfig) ] | | No |
#### AgentComposerSoulLockResponse
@ -12506,6 +12631,28 @@ Risk marker for CLI tool bootstrap commands.
| result | string | | Yes |
| warnings | [ [ComposerValidationWarningResponse](#composervalidationwarningresponse) ] | | No |
#### AgentConfigDraftSummaryResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| account_id | string | | No |
| agent_id | string | | Yes |
| base_snapshot_id | string | | No |
| created_at | integer | | No |
| created_by | string | | No |
| draft_type | [AgentConfigDraftType](#agentconfigdrafttype) | | Yes |
| id | string | | Yes |
| updated_at | integer | | No |
| updated_by | string | | No |
#### AgentConfigDraftType
Editable Agent Soul draft workspace type.
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| AgentConfigDraftType | string | Editable Agent Soul draft workspace type. | |
#### AgentConfigRevisionOperation
Audit operation recorded for Agent Soul version/revision changes.
@ -12555,6 +12702,8 @@ Audit operation recorded for Agent Soul version/revision changes.
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| active_config_snapshot_id | string | | Yes |
| draft_config_id | string | | No |
| restored_version_id | string | | No |
| result | string | | Yes |
#### AgentConfigSnapshotSummaryResponse
@ -12898,6 +13047,12 @@ the current roster/workflow APIs scoped to Dify Agent.
#### AgentKnowledgeMetadataFilteringConfig
Per-set metadata filtering policy.
The Python attribute uses ``metadata_model_config`` for clarity because the
model belongs to metadata filtering specifically, while the external API and
generated schema keep the historical ``model_config`` field name via alias.
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| conditions | [AgentKnowledgeMetadataConditions](#agentknowledgemetadataconditions) | | No |
@ -12915,6 +13070,13 @@ the current roster/workflow APIs scoped to Dify Agent.
#### AgentKnowledgeQueryConfig
Per-set query policy for Agent v2 knowledge retrieval.
Agent v2 stores knowledge as explicit ``knowledge.sets`` rather than the
legacy flat ``datasets`` / ``query_mode`` / ``query_config`` shape. Each
set owns its own query policy, so ``user_query`` must carry an explicit
``value`` while ``generated_query`` leaves that value empty.
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| mode | [AgentKnowledgeQueryMode](#agentknowledgequerymode) | | Yes |
@ -12935,6 +13097,12 @@ the current roster/workflow APIs scoped to Dify Agent.
#### AgentKnowledgeRetrievalConfig
Per-set retrieval policy for Agent v2 knowledge retrieval.
Retrieval settings now live on each knowledge set instead of one shared
flat config. A set may use either ``multiple`` retrieval with ``top_k`` or
``single`` retrieval with a required model config.
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| mode | string, <br>**Available values:** "multiple", "single" | *Enum:* `"multiple"`, `"single"` | Yes |
@ -12948,6 +13116,13 @@ the current roster/workflow APIs scoped to Dify Agent.
#### AgentKnowledgeSetConfig
One explicit knowledge set in Agent v2.
``knowledge.sets`` replaces the old flat knowledge config. Each set owns
its datasets plus query, retrieval, and metadata policies. An individual
set must contain at least one dataset id even though the overall knowledge
section may be empty, which is how callers express "no knowledge layer".
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| datasets | [ [AgentKnowledgeDatasetConfig](#agentknowledgedatasetconfig) ] | | Yes |
@ -13149,6 +13324,21 @@ the current roster/workflow APIs scoped to Dify Agent.
| ---- | ---- | ----------- | -------- |
| AgentProviderResponse | object | | |
#### AgentPublishPayload
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| version_note | string | Optional note for this published Agent version | No |
#### AgentPublishResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| active_config_snapshot | object | | No |
| active_config_snapshot_id | string | | Yes |
| draft | object | | No |
| result | string | | Yes |
#### AgentPublishedReferenceResponse
| Name | Type | Description | Required |
@ -13276,6 +13466,28 @@ Visibility and lifecycle scope of an Agent record.
| enabled | boolean | | No |
| type | string | | No |
#### AgentSimpleResultResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| result | string | | Yes |
#### AgentSkillRefConfig
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| description | string | | No |
| file_id | string | | No |
| file_refs | [ [AgentFileRefConfig](#agentfilerefconfig) ] | | No |
| full_archive_file_id | string | | No |
| full_archive_key | string | | No |
| id | string | | No |
| manifest_files | [ string ] | | No |
| name | string | | No |
| path | string | | No |
| skill_md_file_id | string | | No |
| skill_md_key | string | | No |
#### AgentSkillUploadResponse
| Name | Type | Description | Required |
@ -13302,6 +13514,7 @@ Visibility and lifecycle scope of an Agent record.
| app_features | [AgentSoulAppFeaturesConfig](#agentsoulappfeaturesconfig) | | No |
| app_variables | [ [AppVariableConfig](#appvariableconfig) ] | | No |
| env | [AgentSoulEnvConfig](#agentsoulenvconfig) | | No |
| files | [AgentSoulFilesConfig](#agentsoulfilesconfig) | | No |
| human | [AgentSoulHumanConfig](#agentsoulhumanconfig) | | No |
| knowledge | [AgentSoulKnowledgeConfig](#agentsoulknowledgeconfig) | | No |
| memory | [AgentSoulMemoryConfig](#agentsoulmemoryconfig) | | No |
@ -13356,6 +13569,19 @@ old Agent tool payloads can be read while new payloads stay explicit.
| secret_refs | [ [AgentSecretRefConfig](#agentsecretrefconfig) ] | | No |
| variables | [ [AgentEnvVariableConfig](#agentenvvariableconfig) ] | | No |
#### AgentSoulFilesConfig
Versioned Agent Soul references to drive-backed skills and files.
File bytes and drive value pointers stay in ``agent_drive_files``. This
section records which drive keys belong to one Agent Soul snapshot so version
restore/copy/runtime use the same skills/files view the user published.
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| files | [ [AgentFileRefConfig](#agentfilerefconfig) ] | | No |
| skills | [ [AgentSkillRefConfig](#agentskillrefconfig) ] | | No |
#### AgentSoulHumanConfig
| Name | Type | Description | Required |
@ -13365,6 +13591,14 @@ old Agent tool payloads can be read while new payloads stay explicit.
#### AgentSoulKnowledgeConfig
Top-level Agent v2 knowledge config.
Agent v2 models knowledge as explicit sets instead of one flat
``datasets`` / ``query_mode`` / ``query_config`` block. An empty ``sets``
list means no knowledge layer should be emitted at runtime, while set-name
uniqueness stays case-insensitive because runtime selection addresses sets
by name.
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| sets | [ [AgentKnowledgeSetConfig](#agentknowledgesetconfig) ] | | No |
@ -13841,6 +14075,35 @@ Enum class for api provider schema type.
| use_icon_as_answer_icon | boolean | | No |
| workflow | [WorkflowPartial](#workflowpartial) | | No |
#### AppDetailSiteResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| access_token | string | | No |
| app_base_url | string | | No |
| chat_color_theme | string | | No |
| chat_color_theme_inverted | boolean | | No |
| code | string | | No |
| copyright | string | | No |
| created_at | integer | | No |
| created_by | string | | No |
| custom_disclaimer | string | | No |
| customize_domain | string | | No |
| customize_token_strategy | string | | No |
| default_language | string | | No |
| description | string | | No |
| icon | string | | No |
| icon_background | string | | No |
| icon_type | string<br>[IconType](#icontype) | | No |
| icon_url | string | | Yes |
| privacy_policy | string | | No |
| prompt_public | boolean | | No |
| show_workflow_steps | boolean | | No |
| title | string | | No |
| updated_at | integer | | No |
| updated_by | string | | No |
| use_icon_as_answer_icon | boolean | | No |
#### AppDetailWithSite
| Name | Type | Description | Required |
@ -13866,7 +14129,7 @@ Enum class for api provider schema type.
| model_config | [ModelConfig](#modelconfig) | | No |
| name | string | | Yes |
| permission_keys | [ string ] | | No |
| site | [Site](#site) | | No |
| site | [AppDetailSiteResponse](#appdetailsiteresponse) | | No |
| tags | [ [Tag](#tag) ] | | No |
| tracing | [JSONValue](#jsonvalue) | | No |
| updated_at | integer | | No |
@ -14270,6 +14533,7 @@ Button styles for user actions.
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| conversation_id | string | Conversation ID | No |
| draft_type | string, <br>**Available values:** "debug_build", "draft", <br>**Default:** draft | Agent App debug config source. Use debug_build while the Agent is in build mode.<br>*Enum:* `"debug_build"`, `"draft"` | No |
| files | [ object ] | Uploaded files | No |
| inputs | object | | Yes |
| model_config | object | | No |

View File

@ -287,11 +287,7 @@ class AgentSoulFilesService:
manifest_files=metadata.manifest_files,
)
existing_ref = next(
(
existing
for existing in agent_soul.files.skills
if existing.skill_md_key == key or existing.path == path
),
(existing for existing in agent_soul.files.skills if existing.skill_md_key == key or existing.path == path),
None,
)
file_refs = list(existing_ref.file_refs) if existing_ref else []
@ -303,9 +299,7 @@ class AgentSoulFilesService:
ref.full_archive_file_id = archive_ref.file_id
ref.file_refs = sorted(file_refs, key=lambda value: value.drive_key or value.name)
skills = [
existing
for existing in agent_soul.files.skills
if existing.skill_md_key != key and existing.path != path
existing for existing in agent_soul.files.skills if existing.skill_md_key != key and existing.path != path
]
skills.append(ref)
skills.sort(key=lambda value: value.path or value.skill_md_key or "")

View File

@ -285,9 +285,8 @@ class WorkflowAgentPublishService:
continue
if not isinstance(binding_payload, Mapping):
raise ValueError(f"Workflow Agent node {node_id} has invalid agent_binding.")
if (
binding_payload.get("binding_type") == WorkflowAgentBindingType.INLINE_AGENT.value
and (not binding_payload.get("agent_id") or not binding_payload.get("current_snapshot_id"))
if binding_payload.get("binding_type") == WorkflowAgentBindingType.INLINE_AGENT.value and (
not binding_payload.get("agent_id") or not binding_payload.get("current_snapshot_id")
):
continue
cls._sync_agent_binding_for_node(

View File

@ -891,9 +891,7 @@ class AgentDriveService:
file_id: str,
) -> str:
if file_kind == AgentDriveFileKind.TOOL_FILE:
tool_file = session.scalar(
select(ToolFile).where(ToolFile.id == file_id, ToolFile.tenant_id == tenant_id)
)
tool_file = session.scalar(select(ToolFile).where(ToolFile.id == file_id, ToolFile.tenant_id == tenant_id))
if tool_file is None:
raise AgentDriveError("drive_key_not_found", "drive value record is missing", status_code=404)
return tool_file.file_key

View File

@ -599,9 +599,7 @@ def test_build_maps_agent_soul_knowledge_to_knowledge_layer_config():
"metadata_model_config": None,
"conditions": {
"logical_operator": "and",
"conditions": [
{"name": "category", "comparison_operator": "contains", "value": "auth"}
],
"conditions": [{"name": "category", "comparison_operator": "contains", "value": "auth"}],
},
},
},

View File

@ -1756,9 +1756,7 @@ def test_active_config_is_published_flags_handle_matching_and_empty_snapshots():
base_snapshot_id="version-1",
config_snapshot=AgentSoulConfig(),
)
service = AgentRosterService(
FakeSession(scalars=[["agent-1"], [published_draft], ["agent-1"], [published_draft]])
)
service = AgentRosterService(FakeSession(scalars=[["agent-1"], [published_draft], ["agent-1"], [published_draft]]))
flags = service.load_active_config_is_published_by_agent_id(tenant_id="tenant-1", agents=[agent, draft_agent])
@ -1784,10 +1782,13 @@ def test_active_config_is_published_skips_empty_agent_ids():
)
fake_session = FakeSession(scalars=[["should-not-be-read"]])
assert AgentRosterService(fake_session).load_active_config_is_published_by_agent_id(
tenant_id="tenant-1",
agents=[empty_id_agent],
) == {}
assert (
AgentRosterService(fake_session).load_active_config_is_published_by_agent_id(
tenant_id="tenant-1",
agents=[empty_id_agent],
)
== {}
)
assert fake_session._scalars == [["should-not-be-read"]]

View File

@ -146,9 +146,7 @@ def test_apply_drive_commit_removes_refs_without_touching_unrelated_entries():
)
AgentSoulFilesService._apply_commit_item(agent_soul=soul, item={"key": "files/sample.pdf", "removed": True})
AgentSoulFilesService._apply_commit_item(
agent_soul=soul, item={"key": "tender-analyzer/SKILL.md", "removed": True}
)
AgentSoulFilesService._apply_commit_item(agent_soul=soul, item={"key": "tender-analyzer/SKILL.md", "removed": True})
assert [file_ref.drive_key for file_ref in soul.files.files] == ["files/keep.pdf"]
assert soul.files.skills == []

View File

@ -878,14 +878,6 @@
"count": 1
}
},
"web/app/components/app/overview/settings/index.tsx": {
"jsx-a11y/click-events-have-key-events": {
"count": 1
},
"jsx-a11y/no-static-element-interactions": {
"count": 1
}
},
"web/app/components/app/overview/workflow-hidden-input-fields.tsx": {
"no-restricted-imports": {
"count": 1
@ -1198,14 +1190,6 @@
"count": 1
}
},
"web/app/components/base/chat/chat/chat-input-area/index.tsx": {
"jsx-a11y/no-autofocus": {
"count": 1
},
"ts/no-explicit-any": {
"count": 3
}
},
"web/app/components/base/chat/chat/check-input-forms-hooks.ts": {
"ts/no-explicit-any": {
"count": 1
@ -1236,14 +1220,6 @@
"count": 17
}
},
"web/app/components/base/chat/chat/index.tsx": {
"ts/no-explicit-any": {
"count": 2
},
"ts/no-non-null-asserted-optional-chain": {
"count": 1
}
},
"web/app/components/base/chat/chat/log/index.tsx": {
"jsx-a11y/click-events-have-key-events": {
"count": 1
@ -4554,9 +4530,6 @@
"web/app/components/workflow-app/hooks/use-nodes-sync-draft.ts": {
"no-restricted-imports": {
"count": 1
},
"ts/no-explicit-any": {
"count": 2
}
},
"web/app/components/workflow-app/hooks/use-workflow-init.ts": {
@ -6283,9 +6256,6 @@
"web/app/components/workflow/operator/add-block.tsx": {
"no-restricted-imports": {
"count": 1
},
"ts/no-explicit-any": {
"count": 1
}
},
"web/app/components/workflow/operator/hooks.ts": {

View File

@ -6,6 +6,8 @@ import * as z from 'zod'
import {
zDeleteAgentByAgentIdApiKeysByApiKeyIdPath,
zDeleteAgentByAgentIdApiKeysByApiKeyIdResponse,
zDeleteAgentByAgentIdBuildDraftPath,
zDeleteAgentByAgentIdBuildDraftResponse,
zDeleteAgentByAgentIdFilesPath,
zDeleteAgentByAgentIdFilesQuery,
zDeleteAgentByAgentIdFilesResponse,
@ -17,6 +19,8 @@ import {
zGetAgentByAgentIdApiAccessResponse,
zGetAgentByAgentIdApiKeysPath,
zGetAgentByAgentIdApiKeysResponse,
zGetAgentByAgentIdBuildDraftPath,
zGetAgentByAgentIdBuildDraftResponse,
zGetAgentByAgentIdChatMessagesByMessageIdSuggestedQuestionsPath,
zGetAgentByAgentIdChatMessagesByMessageIdSuggestedQuestionsResponse,
zGetAgentByAgentIdChatMessagesPath,
@ -76,6 +80,11 @@ import {
zPostAgentByAgentIdApiEnableResponse,
zPostAgentByAgentIdApiKeysPath,
zPostAgentByAgentIdApiKeysResponse,
zPostAgentByAgentIdBuildDraftApplyPath,
zPostAgentByAgentIdBuildDraftApplyResponse,
zPostAgentByAgentIdBuildDraftCheckoutBody,
zPostAgentByAgentIdBuildDraftCheckoutPath,
zPostAgentByAgentIdBuildDraftCheckoutResponse,
zPostAgentByAgentIdChatMessagesByTaskIdStopPath,
zPostAgentByAgentIdChatMessagesByTaskIdStopResponse,
zPostAgentByAgentIdComposerValidateBody,
@ -95,6 +104,9 @@ import {
zPostAgentByAgentIdFilesBody,
zPostAgentByAgentIdFilesPath,
zPostAgentByAgentIdFilesResponse,
zPostAgentByAgentIdPublishBody,
zPostAgentByAgentIdPublishPath,
zPostAgentByAgentIdPublishResponse,
zPostAgentByAgentIdSandboxFilesUploadBody,
zPostAgentByAgentIdSandboxFilesUploadPath,
zPostAgentByAgentIdSandboxFilesUploadResponse,
@ -107,6 +119,9 @@ import {
zPostAgentByAgentIdVersionsByVersionIdRestoreResponse,
zPostAgentResponse,
zPutAgentByAgentIdBody,
zPutAgentByAgentIdBuildDraftBody,
zPutAgentByAgentIdBuildDraftPath,
zPutAgentByAgentIdBuildDraftResponse,
zPutAgentByAgentIdComposerBody,
zPutAgentByAgentIdComposerPath,
zPutAgentByAgentIdComposerResponse,
@ -206,10 +221,88 @@ export const apiKeys = {
byApiKeyId,
}
export const post3 = oc
.route({
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAgentByAgentIdBuildDraftApply',
path: '/agent/{agent_id}/build-draft/apply',
tags: ['console'],
})
.input(z.object({ params: zPostAgentByAgentIdBuildDraftApplyPath }))
.output(zPostAgentByAgentIdBuildDraftApplyResponse)
export const apply = {
post: post3,
}
export const post4 = oc
.route({
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAgentByAgentIdBuildDraftCheckout',
path: '/agent/{agent_id}/build-draft/checkout',
tags: ['console'],
})
.input(
z.object({
body: zPostAgentByAgentIdBuildDraftCheckoutBody,
params: zPostAgentByAgentIdBuildDraftCheckoutPath,
}),
)
.output(zPostAgentByAgentIdBuildDraftCheckoutResponse)
export const checkout = {
post: post4,
}
export const delete2 = oc
.route({
inputStructure: 'detailed',
method: 'DELETE',
operationId: 'deleteAgentByAgentIdBuildDraft',
path: '/agent/{agent_id}/build-draft',
tags: ['console'],
})
.input(z.object({ params: zDeleteAgentByAgentIdBuildDraftPath }))
.output(zDeleteAgentByAgentIdBuildDraftResponse)
export const get4 = oc
.route({
inputStructure: 'detailed',
method: 'GET',
operationId: 'getAgentByAgentIdBuildDraft',
path: '/agent/{agent_id}/build-draft',
tags: ['console'],
})
.input(z.object({ params: zGetAgentByAgentIdBuildDraftPath }))
.output(zGetAgentByAgentIdBuildDraftResponse)
export const put = oc
.route({
inputStructure: 'detailed',
method: 'PUT',
operationId: 'putAgentByAgentIdBuildDraft',
path: '/agent/{agent_id}/build-draft',
tags: ['console'],
})
.input(
z.object({ body: zPutAgentByAgentIdBuildDraftBody, params: zPutAgentByAgentIdBuildDraftPath }),
)
.output(zPutAgentByAgentIdBuildDraftResponse)
export const buildDraft = {
delete: delete2,
get: get4,
put,
apply,
checkout,
}
/**
* Get suggested questions for an Agent App message
*/
export const get4 = oc
export const get5 = oc
.route({
description: 'Get suggested questions for an Agent App message',
inputStructure: 'detailed',
@ -222,7 +315,7 @@ export const get4 = oc
.output(zGetAgentByAgentIdChatMessagesByMessageIdSuggestedQuestionsResponse)
export const suggestedQuestions = {
get: get4,
get: get5,
}
export const byMessageId = {
@ -232,7 +325,7 @@ export const byMessageId = {
/**
* Stop a running Agent App chat message generation
*/
export const post3 = oc
export const post5 = oc
.route({
description: 'Stop a running Agent App chat message generation',
inputStructure: 'detailed',
@ -245,7 +338,7 @@ export const post3 = oc
.output(zPostAgentByAgentIdChatMessagesByTaskIdStopResponse)
export const stop = {
post: post3,
post: post5,
}
export const byTaskId = {
@ -255,7 +348,7 @@ export const byTaskId = {
/**
* Get Agent App chat messages for a conversation with pagination
*/
export const get5 = oc
export const get6 = oc
.route({
description: 'Get Agent App chat messages for a conversation with pagination',
inputStructure: 'detailed',
@ -273,12 +366,12 @@ export const get5 = oc
.output(zGetAgentByAgentIdChatMessagesResponse)
export const chatMessages = {
get: get5,
get: get6,
byMessageId,
byTaskId,
}
export const get6 = oc
export const get7 = oc
.route({
inputStructure: 'detailed',
method: 'GET',
@ -290,10 +383,10 @@ export const get6 = oc
.output(zGetAgentByAgentIdComposerCandidatesResponse)
export const candidates = {
get: get6,
get: get7,
}
export const post4 = oc
export const post6 = oc
.route({
inputStructure: 'detailed',
method: 'POST',
@ -310,10 +403,10 @@ export const post4 = oc
.output(zPostAgentByAgentIdComposerValidateResponse)
export const validate = {
post: post4,
post: post6,
}
export const get7 = oc
export const get8 = oc
.route({
inputStructure: 'detailed',
method: 'GET',
@ -324,7 +417,7 @@ export const get7 = oc
.input(z.object({ params: zGetAgentByAgentIdComposerPath }))
.output(zGetAgentByAgentIdComposerResponse)
export const put = oc
export const put2 = oc
.route({
inputStructure: 'detailed',
method: 'PUT',
@ -336,13 +429,13 @@ export const put = oc
.output(zPutAgentByAgentIdComposerResponse)
export const composer = {
get: get7,
put,
get: get8,
put: put2,
candidates,
validate,
}
export const post5 = oc
export const post7 = oc
.route({
inputStructure: 'detailed',
method: 'POST',
@ -355,10 +448,10 @@ export const post5 = oc
.output(zPostAgentByAgentIdCopyResponse)
export const copy = {
post: post5,
post: post7,
}
export const post6 = oc
export const post8 = oc
.route({
inputStructure: 'detailed',
method: 'POST',
@ -370,7 +463,7 @@ export const post6 = oc
.output(zPostAgentByAgentIdDebugConversationRefreshResponse)
export const refresh = {
post: post6,
post: post8,
}
export const debugConversation = {
@ -380,7 +473,7 @@ export const debugConversation = {
/**
* Time-limited external signed URL for one Agent App drive value
*/
export const get8 = oc
export const get9 = oc
.route({
description: 'Time-limited external signed URL for one Agent App drive value',
inputStructure: 'detailed',
@ -398,13 +491,13 @@ export const get8 = oc
.output(zGetAgentByAgentIdDriveFilesDownloadResponse)
export const download = {
get: get8,
get: get9,
}
/**
* Truncated text preview of one Agent App drive value
*/
export const get9 = oc
export const get10 = oc
.route({
description: 'Truncated text preview of one Agent App drive value',
inputStructure: 'detailed',
@ -422,13 +515,13 @@ export const get9 = oc
.output(zGetAgentByAgentIdDriveFilesPreviewResponse)
export const preview = {
get: get9,
get: get10,
}
/**
* List agent drive entries for an Agent App
*/
export const get10 = oc
export const get11 = oc
.route({
description: 'List agent drive entries for an Agent App',
inputStructure: 'detailed',
@ -446,7 +539,7 @@ export const get10 = oc
.output(zGetAgentByAgentIdDriveFilesResponse)
export const files = {
get: get10,
get: get11,
download,
preview,
}
@ -454,7 +547,7 @@ export const files = {
/**
* Inspect one drive-backed skill for slash-menu hover/detail UI
*/
export const get11 = oc
export const get12 = oc
.route({
description: 'Inspect one drive-backed skill for slash-menu hover/detail UI',
inputStructure: 'detailed',
@ -467,7 +560,7 @@ export const get11 = oc
.output(zGetAgentByAgentIdDriveSkillsBySkillPathInspectResponse)
export const inspect = {
get: get11,
get: get12,
}
export const bySkillPath = {
@ -477,7 +570,7 @@ export const bySkillPath = {
/**
* List drive-backed skills for an Agent App
*/
export const get12 = oc
export const get13 = oc
.route({
description: 'List drive-backed skills for an Agent App',
inputStructure: 'detailed',
@ -490,7 +583,7 @@ export const get12 = oc
.output(zGetAgentByAgentIdDriveSkillsResponse)
export const skills = {
get: get12,
get: get13,
bySkillPath,
}
@ -502,7 +595,7 @@ export const drive = {
/**
* Update an Agent App's presentation features (opener, follow-up, citations, ...)
*/
export const post7 = oc
export const post9 = oc
.route({
description: 'Update an Agent App\'s presentation features (opener, follow-up, citations, ...)',
inputStructure: 'detailed',
@ -517,13 +610,13 @@ export const post7 = oc
.output(zPostAgentByAgentIdFeaturesResponse)
export const features = {
post: post7,
post: post9,
}
/**
* Create or update Agent App message feedback
*/
export const post8 = oc
export const post10 = oc
.route({
description: 'Create or update Agent App message feedback',
inputStructure: 'detailed',
@ -538,13 +631,13 @@ export const post8 = oc
.output(zPostAgentByAgentIdFeedbacksResponse)
export const feedbacks = {
post: post8,
post: post10,
}
/**
* Delete one Agent App drive file by key
*/
export const delete2 = oc
export const delete3 = oc
.route({
description: 'Delete one Agent App drive file by key',
inputStructure: 'detailed',
@ -561,7 +654,7 @@ export const delete2 = oc
/**
* Commit an uploaded file into the Agent App drive under files/<name>
*/
export const post9 = oc
export const post11 = oc
.route({
description: 'Commit an uploaded file into the Agent App drive under files/<name>',
inputStructure: 'detailed',
@ -575,11 +668,11 @@ export const post9 = oc
.output(zPostAgentByAgentIdFilesResponse)
export const files2 = {
delete: delete2,
post: post9,
delete: delete3,
post: post11,
}
export const get13 = oc
export const get14 = oc
.route({
inputStructure: 'detailed',
method: 'GET',
@ -591,10 +684,10 @@ export const get13 = oc
.output(zGetAgentByAgentIdLogSourcesResponse)
export const logSources = {
get: get13,
get: get14,
}
export const get14 = oc
export const get15 = oc
.route({
inputStructure: 'detailed',
method: 'GET',
@ -611,14 +704,14 @@ export const get14 = oc
.output(zGetAgentByAgentIdLogsByConversationIdMessagesResponse)
export const messages = {
get: get14,
get: get15,
}
export const byConversationId = {
messages,
}
export const get15 = oc
export const get16 = oc
.route({
inputStructure: 'detailed',
method: 'GET',
@ -632,14 +725,14 @@ export const get15 = oc
.output(zGetAgentByAgentIdLogsResponse)
export const logs = {
get: get15,
get: get16,
byConversationId,
}
/**
* Get Agent App message details by ID
*/
export const get16 = oc
export const get17 = oc
.route({
description: 'Get Agent App message details by ID',
inputStructure: 'detailed',
@ -652,17 +745,32 @@ export const get16 = oc
.output(zGetAgentByAgentIdMessagesByMessageIdResponse)
export const byMessageId2 = {
get: get16,
get: get17,
}
export const messages2 = {
byMessageId: byMessageId2,
}
export const post12 = oc
.route({
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAgentByAgentIdPublish',
path: '/agent/{agent_id}/publish',
tags: ['console'],
})
.input(z.object({ body: zPostAgentByAgentIdPublishBody, params: zPostAgentByAgentIdPublishPath }))
.output(zPostAgentByAgentIdPublishResponse)
export const publish = {
post: post12,
}
/**
* List workflow apps that reference this Agent App's bound Agent (read-only)
*/
export const get17 = oc
export const get18 = oc
.route({
description: 'List workflow apps that reference this Agent App\'s bound Agent (read-only)',
inputStructure: 'detailed',
@ -675,13 +783,13 @@ export const get17 = oc
.output(zGetAgentByAgentIdReferencingWorkflowsResponse)
export const referencingWorkflows = {
get: get17,
get: get18,
}
/**
* Read a text/binary preview file in an Agent App conversation sandbox
*/
export const get18 = oc
export const get19 = oc
.route({
description: 'Read a text/binary preview file in an Agent App conversation sandbox',
inputStructure: 'detailed',
@ -699,13 +807,13 @@ export const get18 = oc
.output(zGetAgentByAgentIdSandboxFilesReadResponse)
export const read = {
get: get18,
get: get19,
}
/**
* Upload one Agent App sandbox file as a Dify ToolFile mapping
*/
export const post10 = oc
export const post13 = oc
.route({
description: 'Upload one Agent App sandbox file as a Dify ToolFile mapping',
inputStructure: 'detailed',
@ -723,13 +831,13 @@ export const post10 = oc
.output(zPostAgentByAgentIdSandboxFilesUploadResponse)
export const upload = {
post: post10,
post: post13,
}
/**
* List a directory in an Agent App conversation sandbox
*/
export const get19 = oc
export const get20 = oc
.route({
description: 'List a directory in an Agent App conversation sandbox',
inputStructure: 'detailed',
@ -747,7 +855,7 @@ export const get19 = oc
.output(zGetAgentByAgentIdSandboxFilesResponse)
export const files3 = {
get: get19,
get: get20,
read,
upload,
}
@ -759,7 +867,7 @@ export const sandbox = {
/**
* Upload + standardize a Skill into an Agent App drive
*/
export const post11 = oc
export const post14 = oc
.route({
description: 'Upload + standardize a Skill into an Agent App drive',
inputStructure: 'detailed',
@ -778,13 +886,13 @@ export const post11 = oc
.output(zPostAgentByAgentIdSkillsUploadResponse)
export const upload2 = {
post: post11,
post: post14,
}
/**
* Infer CLI tool + ENV suggestions from a standardized Agent App skill
*/
export const post12 = oc
export const post15 = oc
.route({
description: 'Infer CLI tool + ENV suggestions from a standardized Agent App skill',
inputStructure: 'detailed',
@ -797,13 +905,13 @@ export const post12 = oc
.output(zPostAgentByAgentIdSkillsBySlugInferToolsResponse)
export const inferTools = {
post: post12,
post: post15,
}
/**
* Delete a standardized skill from an Agent App drive
*/
export const delete3 = oc
export const delete4 = oc
.route({
description: 'Delete a standardized skill from an Agent App drive',
inputStructure: 'detailed',
@ -816,7 +924,7 @@ export const delete3 = oc
.output(zDeleteAgentByAgentIdSkillsBySlugResponse)
export const bySlug = {
delete: delete3,
delete: delete4,
inferTools,
}
@ -825,7 +933,7 @@ export const skills2 = {
bySlug,
}
export const get20 = oc
export const get21 = oc
.route({
inputStructure: 'detailed',
method: 'GET',
@ -842,14 +950,14 @@ export const get20 = oc
.output(zGetAgentByAgentIdStatisticsSummaryResponse)
export const summary = {
get: get20,
get: get21,
}
export const statistics = {
summary,
}
export const post13 = oc
export const post16 = oc
.route({
inputStructure: 'detailed',
method: 'POST',
@ -861,10 +969,10 @@ export const post13 = oc
.output(zPostAgentByAgentIdVersionsByVersionIdRestoreResponse)
export const restore = {
post: post13,
post: post16,
}
export const get21 = oc
export const get22 = oc
.route({
inputStructure: 'detailed',
method: 'GET',
@ -876,11 +984,11 @@ export const get21 = oc
.output(zGetAgentByAgentIdVersionsByVersionIdResponse)
export const byVersionId = {
get: get21,
get: get22,
restore,
}
export const get22 = oc
export const get23 = oc
.route({
inputStructure: 'detailed',
method: 'GET',
@ -892,11 +1000,11 @@ export const get22 = oc
.output(zGetAgentByAgentIdVersionsResponse)
export const versions = {
get: get22,
get: get23,
byVersionId,
}
export const delete4 = oc
export const delete5 = oc
.route({
inputStructure: 'detailed',
method: 'DELETE',
@ -908,7 +1016,7 @@ export const delete4 = oc
.input(z.object({ params: zDeleteAgentByAgentIdPath }))
.output(zDeleteAgentByAgentIdResponse)
export const get23 = oc
export const get24 = oc
.route({
inputStructure: 'detailed',
method: 'GET',
@ -919,7 +1027,7 @@ export const get23 = oc
.input(z.object({ params: zGetAgentByAgentIdPath }))
.output(zGetAgentByAgentIdResponse)
export const put2 = oc
export const put3 = oc
.route({
inputStructure: 'detailed',
method: 'PUT',
@ -931,12 +1039,13 @@ export const put2 = oc
.output(zPutAgentByAgentIdResponse)
export const byAgentId = {
delete: delete4,
get: get23,
put: put2,
delete: delete5,
get: get24,
put: put3,
apiAccess,
apiEnable,
apiKeys,
buildDraft,
chatMessages,
composer,
copy,
@ -948,6 +1057,7 @@ export const byAgentId = {
logSources,
logs,
messages: messages2,
publish,
referencingWorkflows,
sandbox,
skills: skills2,
@ -955,7 +1065,7 @@ export const byAgentId = {
versions,
}
export const get24 = oc
export const get25 = oc
.route({
inputStructure: 'detailed',
method: 'GET',
@ -966,7 +1076,7 @@ export const get24 = oc
.input(z.object({ query: zGetAgentQuery.optional() }))
.output(zGetAgentResponse)
export const post14 = oc
export const post17 = oc
.route({
inputStructure: 'detailed',
method: 'POST',
@ -979,8 +1089,8 @@ export const post14 = oc
.output(zPostAgentResponse)
export const agent = {
get: get24,
post: post14,
get: get25,
post: post17,
inviteOptions,
byAgentId,
}

View File

@ -107,27 +107,18 @@ export type ApiKeyItem = {
type: string
}
export type MessageInfiniteScrollPaginationResponse = {
data: Array<MessageDetailResponse>
has_more: boolean
limit: number
}
export type SuggestedQuestionsResponse = {
data: Array<string>
}
export type SimpleResultResponse = {
export type AgentSimpleResultResponse = {
result: string
}
export type AgentAppComposerResponse = {
active_config_snapshot: AgentConfigSnapshotSummaryResponse
agent: AgentComposerAgentResponse
agent_soul: AgentSoulConfig
save_options: Array<ComposerSaveStrategy>
validation?: ComposerValidationFindingsResponse | null
variant: 'agent_app'
export type AgentBuildDraftResponse = {
agent_soul: {
[key: string]: unknown
}
draft: {
[key: string]: unknown
}
variant: string
}
export type ComposerSavePayload = {
@ -148,6 +139,41 @@ export type ComposerSavePayload = {
version_note?: string | null
}
export type AgentBuildDraftApplyResponse = {
draft: {
[key: string]: unknown
}
result: string
}
export type AgentBuildDraftCheckoutPayload = {
force?: boolean
}
export type MessageInfiniteScrollPaginationResponse = {
data: Array<MessageDetailResponse>
has_more: boolean
limit: number
}
export type SuggestedQuestionsResponse = {
data: Array<string>
}
export type SimpleResultResponse = {
result: string
}
export type AgentAppComposerResponse = {
active_config_snapshot?: AgentConfigSnapshotSummaryResponse | null
agent: AgentComposerAgentResponse
agent_soul: AgentSoulConfig
draft?: AgentConfigDraftSummaryResponse | null
save_options: Array<ComposerSaveStrategy>
validation?: ComposerValidationFindingsResponse | null
variant: 'agent_app'
}
export type AgentComposerCandidatesResponse = {
allowed_node_job_candidates?: AgentComposerNodeJobCandidatesResponse
allowed_soul_candidates?: AgentComposerSoulCandidatesResponse
@ -294,6 +320,21 @@ export type MessageDetailResponse = {
workflow_run_id?: string | null
}
export type AgentPublishPayload = {
version_note?: string | null
}
export type AgentPublishResponse = {
active_config_snapshot?: {
[key: string]: unknown
} | null
active_config_snapshot_id: string
draft?: {
[key: string]: unknown
} | null
result: string
}
export type AgentReferencingWorkflowsResponse = {
data?: Array<AgentReferencingWorkflowResponse>
}
@ -359,6 +400,8 @@ export type AgentConfigSnapshotDetailResponse = {
export type AgentConfigSnapshotRestoreResponse = {
active_config_snapshot_id: string
draft_config_id?: string | null
restored_version_id?: string | null
result: 'success'
}
@ -497,6 +540,54 @@ export type AgentInviteOptionResponse = {
workflow_node_id?: string | null
}
export type AgentSoulConfig = {
app_features?: AgentSoulAppFeaturesConfig
app_variables?: Array<AppVariableConfig>
env?: AgentSoulEnvConfig
files?: AgentSoulFilesConfig
human?: AgentSoulHumanConfig
knowledge?: AgentSoulKnowledgeConfig
memory?: AgentSoulMemoryConfig
misc_legacy?: AgentSoulAppFeaturesConfig
model?: AgentSoulModelConfig | null
prompt?: AgentSoulPromptConfig
sandbox?: AgentSoulSandboxConfig
schema_version?: number
tools?: AgentSoulToolsConfig
}
export type ComposerBindingPayload = {
agent_id?: string | null
binding_type: 'inline_agent' | 'roster_agent'
current_snapshot_id?: string | null
}
export type AgentIconType = 'emoji' | 'image' | 'link'
export type WorkflowNodeJobConfig = {
declared_outputs?: Array<DeclaredOutputConfig>
human_contacts?: Array<AgentHumanContactConfig>
metadata?: WorkflowNodeJobMetadata
mode?: WorkflowNodeJobMode
previous_node_output_refs?: Array<WorkflowPreviousNodeOutputRef>
schema_version?: number
workflow_prompt?: string
}
export type ComposerSaveStrategy
= | 'node_job_only'
| 'save_as_new_agent'
| 'save_as_new_version'
| 'save_to_current_version'
| 'save_to_roster'
export type ComposerSoulLockPayload = {
locked?: boolean
unlocked_from_version_id?: string | null
}
export type ComposerVariant = 'agent_app' | 'workflow'
export type AgentConfigSnapshotSummaryResponse = {
agent_id?: string | null
created_at?: number | null
@ -522,58 +613,23 @@ export type AgentComposerAgentResponse = {
status: AgentStatus
}
export type AgentSoulConfig = {
app_features?: AgentSoulAppFeaturesConfig
app_variables?: Array<AppVariableConfig>
env?: AgentSoulEnvConfig
human?: AgentSoulHumanConfig
knowledge?: AgentSoulKnowledgeConfig
memory?: AgentSoulMemoryConfig
misc_legacy?: AgentSoulAppFeaturesConfig
model?: AgentSoulModelConfig | null
prompt?: AgentSoulPromptConfig
sandbox?: AgentSoulSandboxConfig
schema_version?: number
tools?: AgentSoulToolsConfig
export type AgentConfigDraftSummaryResponse = {
account_id?: string | null
agent_id: string
base_snapshot_id?: string | null
created_at?: number | null
created_by?: string | null
draft_type: AgentConfigDraftType
id: string
updated_at?: number | null
updated_by?: string | null
}
export type ComposerSaveStrategy
= | 'node_job_only'
| 'save_as_new_agent'
| 'save_as_new_version'
| 'save_to_current_version'
| 'save_to_roster'
export type ComposerValidationFindingsResponse = {
knowledge_retrieval_placeholder?: Array<ComposerKnowledgePlaceholderResponse>
warnings?: Array<ComposerValidationWarningResponse>
}
export type ComposerBindingPayload = {
agent_id?: string | null
binding_type: 'inline_agent' | 'roster_agent'
current_snapshot_id?: string | null
}
export type AgentIconType = 'emoji' | 'image' | 'link'
export type WorkflowNodeJobConfig = {
declared_outputs?: Array<DeclaredOutputConfig>
human_contacts?: Array<AgentHumanContactConfig>
metadata?: WorkflowNodeJobMetadata
mode?: WorkflowNodeJobMode
previous_node_output_refs?: Array<WorkflowPreviousNodeOutputRef>
schema_version?: number
workflow_prompt?: string
}
export type ComposerSoulLockPayload = {
locked?: boolean
unlocked_from_version_id?: string | null
}
export type ComposerVariant = 'agent_app' | 'workflow'
export type AgentComposerNodeJobCandidatesResponse = {
declare_output_types?: Array<DeclaredOutputType>
human_contacts?: Array<AgentHumanContactConfig>
@ -583,8 +639,10 @@ export type AgentComposerNodeJobCandidatesResponse = {
export type AgentComposerSoulCandidatesResponse = {
cli_tools?: Array<AgentCliToolConfig>
dify_tools?: Array<AgentComposerDifyToolCandidateResponse>
files?: Array<AgentFileRefConfig>
human_contacts?: Array<AgentHumanContactConfig>
knowledge_sets?: Array<AgentComposerKnowledgeSetCandidateResponse>
skills?: Array<AgentSkillRefConfig>
}
export type ComposerCandidateCapabilities = {
@ -939,6 +997,11 @@ export type AgentSoulEnvConfig = {
variables?: Array<AgentEnvVariableConfig>
}
export type AgentSoulFilesConfig = {
files?: Array<AgentFileRefConfig>
skills?: Array<AgentSkillRefConfig>
}
export type AgentSoulHumanConfig = {
contacts?: Array<AgentHumanContactConfig>
tools?: Array<AgentHumanToolConfig>
@ -1042,6 +1105,8 @@ export type WorkflowPreviousNodeOutputRef = {
[key: string]: unknown
}
export type AgentConfigDraftType = 'debug_build' | 'draft'
export type DeclaredOutputType = 'array' | 'boolean' | 'file' | 'number' | 'object' | 'string'
export type AgentCliToolConfig = {
@ -1086,6 +1151,21 @@ export type AgentComposerDifyToolCandidateResponse = {
tools_count?: number | null
}
export type AgentFileRefConfig = {
drive_key?: string | null
file_id?: string | null
id?: string | null
name?: string | null
reference?: string | null
remote_url?: string | null
tenant_id?: string | null
transfer_method?: string | null
type?: string | null
upload_file_id?: string | null
url?: string | null
[key: string]: unknown
}
export type AgentComposerKnowledgeSetCandidateResponse = {
datasets?: Array<AgentComposerKnowledgeDatasetCandidateResponse>
description?: string | null
@ -1094,6 +1174,21 @@ export type AgentComposerKnowledgeSetCandidateResponse = {
name: string
}
export type AgentSkillRefConfig = {
description?: string | null
file_id?: string | null
file_refs?: Array<AgentFileRefConfig>
full_archive_file_id?: string | null
full_archive_key?: string | null
id?: string | null
manifest_files?: Array<string> | null
name?: string | null
path?: string | null
skill_md_file_id?: string | null
skill_md_key?: string | null
[key: string]: unknown
}
export type AgentModerationProviderConfig = {
api_based_extension_id?: string | null
inputs_config?: AgentModerationIoConfig | null
@ -1186,6 +1281,7 @@ export type AgentUserSatisfactionRateStatisticResponse = {
export type AgentConfigRevisionOperation
= | 'create_version'
| 'publish_draft'
| 'restore_version'
| 'save_current_version'
| 'save_new_agent'
@ -1356,21 +1452,6 @@ export type DeclaredOutputFileConfig = {
mime_types?: Array<string>
}
export type AgentFileRefConfig = {
drive_key?: string | null
file_id?: string | null
id?: string | null
name?: string | null
reference?: string | null
remote_url?: string | null
tenant_id?: string | null
transfer_method?: string | null
type?: string | null
upload_file_id?: string | null
url?: string | null
[key: string]: unknown
}
export type AgentCliToolAuthorizationStatus
= | 'allowed'
| 'authorized'
@ -1892,6 +1973,86 @@ export type DeleteAgentByAgentIdApiKeysByApiKeyIdResponses = {
export type DeleteAgentByAgentIdApiKeysByApiKeyIdResponse
= DeleteAgentByAgentIdApiKeysByApiKeyIdResponses[keyof DeleteAgentByAgentIdApiKeysByApiKeyIdResponses]
export type DeleteAgentByAgentIdBuildDraftData = {
body?: never
path: {
agent_id: string
}
query?: never
url: '/agent/{agent_id}/build-draft'
}
export type DeleteAgentByAgentIdBuildDraftResponses = {
200: AgentSimpleResultResponse
}
export type DeleteAgentByAgentIdBuildDraftResponse
= DeleteAgentByAgentIdBuildDraftResponses[keyof DeleteAgentByAgentIdBuildDraftResponses]
export type GetAgentByAgentIdBuildDraftData = {
body?: never
path: {
agent_id: string
}
query?: never
url: '/agent/{agent_id}/build-draft'
}
export type GetAgentByAgentIdBuildDraftResponses = {
200: AgentBuildDraftResponse
}
export type GetAgentByAgentIdBuildDraftResponse
= GetAgentByAgentIdBuildDraftResponses[keyof GetAgentByAgentIdBuildDraftResponses]
export type PutAgentByAgentIdBuildDraftData = {
body: ComposerSavePayload
path: {
agent_id: string
}
query?: never
url: '/agent/{agent_id}/build-draft'
}
export type PutAgentByAgentIdBuildDraftResponses = {
200: AgentBuildDraftResponse
}
export type PutAgentByAgentIdBuildDraftResponse
= PutAgentByAgentIdBuildDraftResponses[keyof PutAgentByAgentIdBuildDraftResponses]
export type PostAgentByAgentIdBuildDraftApplyData = {
body?: never
path: {
agent_id: string
}
query?: never
url: '/agent/{agent_id}/build-draft/apply'
}
export type PostAgentByAgentIdBuildDraftApplyResponses = {
200: AgentBuildDraftApplyResponse
}
export type PostAgentByAgentIdBuildDraftApplyResponse
= PostAgentByAgentIdBuildDraftApplyResponses[keyof PostAgentByAgentIdBuildDraftApplyResponses]
export type PostAgentByAgentIdBuildDraftCheckoutData = {
body: AgentBuildDraftCheckoutPayload
path: {
agent_id: string
}
query?: never
url: '/agent/{agent_id}/build-draft/checkout'
}
export type PostAgentByAgentIdBuildDraftCheckoutResponses = {
200: AgentBuildDraftResponse
}
export type PostAgentByAgentIdBuildDraftCheckoutResponse
= PostAgentByAgentIdBuildDraftCheckoutResponses[keyof PostAgentByAgentIdBuildDraftCheckoutResponses]
export type GetAgentByAgentIdChatMessagesData = {
body?: never
path: {
@ -2315,6 +2476,26 @@ export type GetAgentByAgentIdMessagesByMessageIdResponses = {
export type GetAgentByAgentIdMessagesByMessageIdResponse
= GetAgentByAgentIdMessagesByMessageIdResponses[keyof GetAgentByAgentIdMessagesByMessageIdResponses]
export type PostAgentByAgentIdPublishData = {
body: AgentPublishPayload
path: {
agent_id: string
}
query?: never
url: '/agent/{agent_id}/publish'
}
export type PostAgentByAgentIdPublishErrors = {
403: unknown
}
export type PostAgentByAgentIdPublishResponses = {
200: AgentPublishResponse
}
export type PostAgentByAgentIdPublishResponse
= PostAgentByAgentIdPublishResponses[keyof PostAgentByAgentIdPublishResponses]
export type GetAgentByAgentIdReferencingWorkflowsData = {
body?: never
path: {

View File

@ -47,6 +47,37 @@ export const zApiKeyList = z.object({
data: z.array(zApiKeyItem),
})
/**
* AgentSimpleResultResponse
*/
export const zAgentSimpleResultResponse = z.object({
result: z.string(),
})
/**
* AgentBuildDraftResponse
*/
export const zAgentBuildDraftResponse = z.object({
agent_soul: z.record(z.string(), z.unknown()),
draft: z.record(z.string(), z.unknown()),
variant: z.string(),
})
/**
* AgentBuildDraftApplyResponse
*/
export const zAgentBuildDraftApplyResponse = z.object({
draft: z.record(z.string(), z.unknown()),
result: z.string(),
})
/**
* AgentBuildDraftCheckoutPayload
*/
export const zAgentBuildDraftCheckoutPayload = z.object({
force: z.boolean().optional().default(false),
})
/**
* SuggestedQuestionsResponse
*/
@ -110,6 +141,23 @@ export const zAgentDriveFilePayload = z.object({
upload_file_id: z.string(),
})
/**
* AgentPublishPayload
*/
export const zAgentPublishPayload = z.object({
version_note: z.string().nullish(),
})
/**
* AgentPublishResponse
*/
export const zAgentPublishResponse = z.object({
active_config_snapshot: z.record(z.string(), z.unknown()).nullish(),
active_config_snapshot_id: z.string(),
draft: z.record(z.string(), z.unknown()).nullish(),
result: z.string(),
})
/**
* SandboxReadResponse
*/
@ -134,6 +182,8 @@ export const zAgentSandboxUploadPayload = z.object({
*/
export const zAgentConfigSnapshotRestoreResponse = z.object({
active_config_snapshot_id: z.string(),
draft_config_id: z.string().nullish(),
restored_version_id: z.string().nullish(),
result: z.literal('success'),
})
@ -250,6 +300,46 @@ export const zWorkflowPartial = z.object({
updated_by: z.string().nullish(),
})
/**
* ComposerBindingPayload
*/
export const zComposerBindingPayload = z.object({
agent_id: z.string().nullish(),
binding_type: z.enum(['inline_agent', 'roster_agent']),
current_snapshot_id: z.string().nullish(),
})
/**
* AgentIconType
*
* Supported icon storage formats for Agent roster entries.
*/
export const zAgentIconType = z.enum(['emoji', 'image', 'link'])
/**
* ComposerSaveStrategy
*/
export const zComposerSaveStrategy = z.enum([
'node_job_only',
'save_as_new_agent',
'save_as_new_version',
'save_to_current_version',
'save_to_roster',
])
/**
* ComposerSoulLockPayload
*/
export const zComposerSoulLockPayload = z.object({
locked: z.boolean().optional().default(true),
unlocked_from_version_id: z.string().nullish(),
})
/**
* ComposerVariant
*/
export const zComposerVariant = z.enum(['agent_app', 'workflow'])
/**
* AgentConfigSnapshotSummaryResponse
*/
@ -272,46 +362,6 @@ export const zAgentConfigSnapshotListResponse = z.object({
data: z.array(zAgentConfigSnapshotSummaryResponse),
})
/**
* ComposerSaveStrategy
*/
export const zComposerSaveStrategy = z.enum([
'node_job_only',
'save_as_new_agent',
'save_as_new_version',
'save_to_current_version',
'save_to_roster',
])
/**
* ComposerBindingPayload
*/
export const zComposerBindingPayload = z.object({
agent_id: z.string().nullish(),
binding_type: z.enum(['inline_agent', 'roster_agent']),
current_snapshot_id: z.string().nullish(),
})
/**
* AgentIconType
*
* Supported icon storage formats for Agent roster entries.
*/
export const zAgentIconType = z.enum(['emoji', 'image', 'link'])
/**
* ComposerSoulLockPayload
*/
export const zComposerSoulLockPayload = z.object({
locked: z.boolean().optional().default(true),
unlocked_from_version_id: z.string().nullish(),
})
/**
* ComposerVariant
*/
export const zComposerVariant = z.enum(['agent_app', 'workflow'])
/**
* ComposerCandidateCapabilities
*/
@ -1001,6 +1051,28 @@ export const zWorkflowPreviousNodeOutputRef = z.object({
.nullish(),
})
/**
* AgentConfigDraftType
*
* Editable Agent Soul draft workspace type.
*/
export const zAgentConfigDraftType = z.enum(['debug_build', 'draft'])
/**
* AgentConfigDraftSummaryResponse
*/
export const zAgentConfigDraftSummaryResponse = z.object({
account_id: z.string().nullish(),
agent_id: z.string(),
base_snapshot_id: z.string().nullish(),
created_at: z.int().nullish(),
created_by: z.string().nullish(),
draft_type: zAgentConfigDraftType,
id: z.string(),
updated_at: z.int().nullish(),
updated_by: z.string().nullish(),
})
/**
* DeclaredOutputType
*/
@ -1036,6 +1108,62 @@ export const zAgentComposerDifyToolCandidateResponse = z.object({
tools_count: z.int().nullish(),
})
/**
* AgentFileRefConfig
*/
export const zAgentFileRefConfig = z.object({
drive_key: z.string().max(512).nullish(),
file_id: z.string().max(255).nullish(),
id: z.string().max(255).nullish(),
name: z.string().max(255).nullish(),
reference: z.string().max(255).nullish(),
remote_url: z.string().nullish(),
tenant_id: z.string().max(255).nullish(),
transfer_method: z.string().max(64).nullish(),
type: z.string().max(64).nullish(),
upload_file_id: z.string().max(255).nullish(),
url: z.string().nullish(),
})
/**
* WorkflowNodeJobMetadata
*/
export const zWorkflowNodeJobMetadata = z.object({
agent_soul: z.record(z.string(), z.unknown()).nullish(),
file_refs: z.array(zAgentFileRefConfig).nullish(),
})
/**
* AgentSkillRefConfig
*/
export const zAgentSkillRefConfig = z.object({
description: z.string().nullish(),
file_id: z.string().max(255).nullish(),
file_refs: z.array(zAgentFileRefConfig).optional(),
full_archive_file_id: z.string().max(255).nullish(),
full_archive_key: z.string().max(512).nullish(),
id: z.string().max(255).nullish(),
manifest_files: z.array(z.string()).nullish(),
name: z.string().max(255).nullish(),
path: z.string().nullish(),
skill_md_file_id: z.string().max(255).nullish(),
skill_md_key: z.string().max(512).nullish(),
})
/**
* AgentSoulFilesConfig
*
* Versioned Agent Soul references to drive-backed skills and files.
*
* File bytes and drive value pointers stay in ``agent_drive_files``. This
* section records which drive keys belong to one Agent Soul snapshot so version
* restore/copy/runtime use the same skills/files view the user published.
*/
export const zAgentSoulFilesConfig = z.object({
files: z.array(zAgentFileRefConfig).optional(),
skills: z.array(zAgentSkillRefConfig).optional(),
})
/**
* SimpleAccount
*/
@ -1209,6 +1337,7 @@ export const zAgentStatisticSummaryEnvelopeResponse = z.object({
*/
export const zAgentConfigRevisionOperation = z.enum([
'create_version',
'publish_draft',
'restore_version',
'save_current_version',
'save_new_agent',
@ -1375,31 +1504,6 @@ export const zDeclaredOutputFileConfig = z.object({
mime_types: z.array(z.string()).optional(),
})
/**
* AgentFileRefConfig
*/
export const zAgentFileRefConfig = z.object({
drive_key: z.string().max(512).nullish(),
file_id: z.string().max(255).nullish(),
id: z.string().max(255).nullish(),
name: z.string().max(255).nullish(),
reference: z.string().max(255).nullish(),
remote_url: z.string().nullish(),
tenant_id: z.string().max(255).nullish(),
transfer_method: z.string().max(64).nullish(),
type: z.string().max(64).nullish(),
upload_file_id: z.string().max(255).nullish(),
url: z.string().nullish(),
})
/**
* WorkflowNodeJobMetadata
*/
export const zWorkflowNodeJobMetadata = z.object({
agent_soul: z.record(z.string(), z.unknown()).nullish(),
file_refs: z.array(zAgentFileRefConfig).nullish(),
})
/**
* AgentCliToolAuthorizationStatus
*
@ -1529,8 +1633,10 @@ export const zAgentComposerKnowledgeSetCandidateResponse = z.object({
export const zAgentComposerSoulCandidatesResponse = z.object({
cli_tools: z.array(zAgentCliToolConfig).optional(),
dify_tools: z.array(zAgentComposerDifyToolCandidateResponse).optional(),
files: z.array(zAgentFileRefConfig).optional(),
human_contacts: z.array(zAgentHumanContactConfig).optional(),
knowledge_sets: z.array(zAgentComposerKnowledgeSetCandidateResponse).optional(),
skills: z.array(zAgentSkillRefConfig).optional(),
})
/**
@ -2049,6 +2155,7 @@ export const zAgentSoulConfig = z.object({
app_features: zAgentSoulAppFeaturesConfig.optional(),
app_variables: z.array(zAppVariableConfig).optional(),
env: zAgentSoulEnvConfig.optional(),
files: zAgentSoulFilesConfig.optional(),
human: zAgentSoulHumanConfig.optional(),
knowledge: zAgentSoulKnowledgeConfig.optional(),
memory: zAgentSoulMemoryConfig.optional(),
@ -2060,18 +2167,6 @@ export const zAgentSoulConfig = z.object({
tools: zAgentSoulToolsConfig.optional(),
})
/**
* AgentAppComposerResponse
*/
export const zAgentAppComposerResponse = z.object({
active_config_snapshot: zAgentConfigSnapshotSummaryResponse,
agent: zAgentComposerAgentResponse,
agent_soul: zAgentSoulConfig,
save_options: z.array(zComposerSaveStrategy),
validation: zComposerValidationFindingsResponse.nullish(),
variant: z.literal('agent_app'),
})
/**
* ComposerSavePayload
*/
@ -2093,6 +2188,19 @@ export const zComposerSavePayload = z.object({
version_note: z.string().nullish(),
})
/**
* AgentAppComposerResponse
*/
export const zAgentAppComposerResponse = z.object({
active_config_snapshot: zAgentConfigSnapshotSummaryResponse.nullish(),
agent: zAgentComposerAgentResponse,
agent_soul: zAgentSoulConfig,
draft: zAgentConfigDraftSummaryResponse.nullish(),
save_options: z.array(zComposerSaveStrategy),
validation: zComposerValidationFindingsResponse.nullish(),
variant: z.literal('agent_app'),
})
/**
* AgentConfigSnapshotDetailResponse
*/
@ -2470,6 +2578,55 @@ export const zDeleteAgentByAgentIdApiKeysByApiKeyIdPath = z.object({
*/
export const zDeleteAgentByAgentIdApiKeysByApiKeyIdResponse = z.void()
export const zDeleteAgentByAgentIdBuildDraftPath = z.object({
agent_id: z.uuid(),
})
/**
* Agent build draft discarded
*/
export const zDeleteAgentByAgentIdBuildDraftResponse = zAgentSimpleResultResponse
export const zGetAgentByAgentIdBuildDraftPath = z.object({
agent_id: z.uuid(),
})
/**
* Agent build draft
*/
export const zGetAgentByAgentIdBuildDraftResponse = zAgentBuildDraftResponse
export const zPutAgentByAgentIdBuildDraftBody = zComposerSavePayload
export const zPutAgentByAgentIdBuildDraftPath = z.object({
agent_id: z.uuid(),
})
/**
* Agent build draft saved
*/
export const zPutAgentByAgentIdBuildDraftResponse = zAgentBuildDraftResponse
export const zPostAgentByAgentIdBuildDraftApplyPath = z.object({
agent_id: z.uuid(),
})
/**
* Agent build draft applied
*/
export const zPostAgentByAgentIdBuildDraftApplyResponse = zAgentBuildDraftApplyResponse
export const zPostAgentByAgentIdBuildDraftCheckoutBody = zAgentBuildDraftCheckoutPayload
export const zPostAgentByAgentIdBuildDraftCheckoutPath = z.object({
agent_id: z.uuid(),
})
/**
* Agent build draft checked out
*/
export const zPostAgentByAgentIdBuildDraftCheckoutResponse = zAgentBuildDraftResponse
export const zGetAgentByAgentIdChatMessagesPath = z.object({
agent_id: z.uuid(),
})
@ -2738,6 +2895,17 @@ export const zGetAgentByAgentIdMessagesByMessageIdPath = z.object({
*/
export const zGetAgentByAgentIdMessagesByMessageIdResponse = zMessageDetailResponse
export const zPostAgentByAgentIdPublishBody = zAgentPublishPayload
export const zPostAgentByAgentIdPublishPath = z.object({
agent_id: z.uuid(),
})
/**
* Agent draft published
*/
export const zPostAgentByAgentIdPublishResponse = zAgentPublishResponse
export const zGetAgentByAgentIdReferencingWorkflowsPath = z.object({
agent_id: z.uuid(),
})

View File

@ -1812,6 +1812,7 @@ export type AgentSoulConfig = {
app_features?: AgentSoulAppFeaturesConfig
app_variables?: Array<AppVariableConfig>
env?: AgentSoulEnvConfig
files?: AgentSoulFilesConfig
human?: AgentSoulHumanConfig
knowledge?: AgentSoulKnowledgeConfig
memory?: AgentSoulMemoryConfig
@ -1916,8 +1917,10 @@ export type AgentComposerNodeJobCandidatesResponse = {
export type AgentComposerSoulCandidatesResponse = {
cli_tools?: Array<AgentCliToolConfig>
dify_tools?: Array<AgentComposerDifyToolCandidateResponse>
files?: Array<AgentFileRefConfig>
human_contacts?: Array<AgentHumanContactConfig>
knowledge_sets?: Array<AgentComposerKnowledgeSetCandidateResponse>
skills?: Array<AgentSkillRefConfig>
}
export type ComposerCandidateCapabilities = {
@ -2145,6 +2148,11 @@ export type AgentSoulEnvConfig = {
variables?: Array<AgentEnvVariableConfig>
}
export type AgentSoulFilesConfig = {
files?: Array<AgentFileRefConfig>
skills?: Array<AgentSkillRefConfig>
}
export type AgentSoulHumanConfig = {
contacts?: Array<AgentHumanContactConfig>
tools?: Array<AgentHumanToolConfig>
@ -2303,6 +2311,21 @@ export type AgentComposerDifyToolCandidateResponse = {
tools_count?: number | null
}
export type AgentFileRefConfig = {
drive_key?: string | null
file_id?: string | null
id?: string | null
name?: string | null
reference?: string | null
remote_url?: string | null
tenant_id?: string | null
transfer_method?: string | null
type?: string | null
upload_file_id?: string | null
url?: string | null
[key: string]: unknown
}
export type AgentComposerKnowledgeSetCandidateResponse = {
datasets?: Array<AgentComposerKnowledgeDatasetCandidateResponse>
description?: string | null
@ -2311,6 +2334,21 @@ export type AgentComposerKnowledgeSetCandidateResponse = {
name: string
}
export type AgentSkillRefConfig = {
description?: string | null
file_id?: string | null
file_refs?: Array<AgentFileRefConfig>
full_archive_file_id?: string | null
full_archive_key?: string | null
id?: string | null
manifest_files?: Array<string> | null
name?: string | null
path?: string | null
skill_md_file_id?: string | null
skill_md_key?: string | null
[key: string]: unknown
}
export type CheckResultView = {
passed: boolean
reason?: string | null
@ -2486,21 +2524,6 @@ export type AgentSoulDifyToolConfig = {
tool_name?: string | null
}
export type AgentFileRefConfig = {
drive_key?: string | null
file_id?: string | null
id?: string | null
name?: string | null
reference?: string | null
remote_url?: string | null
tenant_id?: string | null
transfer_method?: string | null
type?: string | null
upload_file_id?: string | null
url?: string | null
[key: string]: unknown
}
export type OutputErrorStrategy = 'default_value' | 'fail_branch' | 'stop'
export type DeclaredOutputRetryConfig = {

View File

@ -2659,6 +2659,62 @@ export const zAgentComposerDifyToolCandidateResponse = z.object({
tools_count: z.int().nullish(),
})
/**
* AgentFileRefConfig
*/
export const zAgentFileRefConfig = z.object({
drive_key: z.string().max(512).nullish(),
file_id: z.string().max(255).nullish(),
id: z.string().max(255).nullish(),
name: z.string().max(255).nullish(),
reference: z.string().max(255).nullish(),
remote_url: z.string().nullish(),
tenant_id: z.string().max(255).nullish(),
transfer_method: z.string().max(64).nullish(),
type: z.string().max(64).nullish(),
upload_file_id: z.string().max(255).nullish(),
url: z.string().nullish(),
})
/**
* WorkflowNodeJobMetadata
*/
export const zWorkflowNodeJobMetadata = z.object({
agent_soul: z.record(z.string(), z.unknown()).nullish(),
file_refs: z.array(zAgentFileRefConfig).nullish(),
})
/**
* AgentSkillRefConfig
*/
export const zAgentSkillRefConfig = z.object({
description: z.string().nullish(),
file_id: z.string().max(255).nullish(),
file_refs: z.array(zAgentFileRefConfig).optional(),
full_archive_file_id: z.string().max(255).nullish(),
full_archive_key: z.string().max(512).nullish(),
id: z.string().max(255).nullish(),
manifest_files: z.array(z.string()).nullish(),
name: z.string().max(255).nullish(),
path: z.string().nullish(),
skill_md_file_id: z.string().max(255).nullish(),
skill_md_key: z.string().max(512).nullish(),
})
/**
* AgentSoulFilesConfig
*
* Versioned Agent Soul references to drive-backed skills and files.
*
* File bytes and drive value pointers stay in ``agent_drive_files``. This
* section records which drive keys belong to one Agent Soul snapshot so version
* restore/copy/runtime use the same skills/files view the user published.
*/
export const zAgentSoulFilesConfig = z.object({
files: z.array(zAgentFileRefConfig).optional(),
skills: z.array(zAgentSkillRefConfig).optional(),
})
/**
* CheckResultView
*
@ -2836,31 +2892,6 @@ export const zAgentSoulSandboxConfig = z.object({
provider: z.string().nullish(),
})
/**
* AgentFileRefConfig
*/
export const zAgentFileRefConfig = z.object({
drive_key: z.string().max(512).nullish(),
file_id: z.string().max(255).nullish(),
id: z.string().max(255).nullish(),
name: z.string().max(255).nullish(),
reference: z.string().max(255).nullish(),
remote_url: z.string().nullish(),
tenant_id: z.string().max(255).nullish(),
transfer_method: z.string().max(64).nullish(),
type: z.string().max(64).nullish(),
upload_file_id: z.string().max(255).nullish(),
url: z.string().nullish(),
})
/**
* WorkflowNodeJobMetadata
*/
export const zWorkflowNodeJobMetadata = z.object({
agent_soul: z.record(z.string(), z.unknown()).nullish(),
file_refs: z.array(zAgentFileRefConfig).nullish(),
})
/**
* OutputErrorStrategy
*
@ -3026,8 +3057,10 @@ export const zAgentComposerKnowledgeSetCandidateResponse = z.object({
export const zAgentComposerSoulCandidatesResponse = z.object({
cli_tools: z.array(zAgentCliToolConfig).optional(),
dify_tools: z.array(zAgentComposerDifyToolCandidateResponse).optional(),
files: z.array(zAgentFileRefConfig).optional(),
human_contacts: z.array(zAgentHumanContactConfig).optional(),
knowledge_sets: z.array(zAgentComposerKnowledgeSetCandidateResponse).optional(),
skills: z.array(zAgentSkillRefConfig).optional(),
})
/**
@ -3599,6 +3632,7 @@ export const zAgentSoulConfig = z.object({
app_features: zAgentSoulAppFeaturesConfig.optional(),
app_variables: z.array(zAppVariableConfig).optional(),
env: zAgentSoulEnvConfig.optional(),
files: zAgentSoulFilesConfig.optional(),
human: zAgentSoulHumanConfig.optional(),
knowledge: zAgentSoulKnowledgeConfig.optional(),
memory: zAgentSoulMemoryConfig.optional(),

View File

@ -31,6 +31,7 @@ export type AudioTranscriptResponse = {
export type ChatMessagePayload = {
conversation_id?: string | null
draft_type?: 'debug_build' | 'draft'
files?: Array<unknown> | null
inputs: {
[key: string]: unknown

View File

@ -43,6 +43,7 @@ export const zAudioTranscriptResponse = z.object({
*/
export const zChatMessagePayload = z.object({
conversation_id: z.string().nullish(),
draft_type: z.enum(['debug_build', 'draft']).optional().default('draft'),
files: z.array(z.unknown()).nullish(),
inputs: z.record(z.string(), z.unknown()),
model_config: z.record(z.string(), z.unknown()).optional(),