F2: persist native job projections and expose task controls

This commit is contained in:
Xin Wang
2026-10-23 16:03:40 +08:00
parent bae5ec3c58
commit 33fde56edd
13 changed files with 550 additions and 5 deletions
+27 -1
View File
@@ -21,7 +21,7 @@ AssistantType = Literal["prompt", "workflow", "dify", "fastgpt"]
SUPPORTED_ASSISTANT_TYPES = get_args(AssistantType)
TurnEndStrategy = Literal["silence", "smart_turn"]
KnowledgeRetrievalMode = Literal["automatic", "on_demand"]
ToolType = Literal["http", "mcp", "client"]
ToolType = Literal["http", "mcp", "client", "task"]
ToolStatus = Literal["active", "archived", "draft"]
McpServerStatus = Literal["active", "archived", "draft"]
McpTransport = Literal["streamable_http", "sse"]
@@ -474,11 +474,37 @@ class McpToolDefinition(CamelModel):
config: McpToolConfig
class TaskToolConfig(CamelModel):
provider: Literal["opencode"] = "opencode"
url: str = Field(min_length=1, max_length=2048)
directory: str = Field(min_length=1, max_length=2048)
username: str = Field(default="opencode", max_length=128)
timeout_seconds: int = Field(default=600, ge=30, le=7200)
allow_interruptions: Literal[True] = True
execution_mode: Literal["immediate"] = "immediate"
@field_validator("url")
@classmethod
def validate_task_url(cls, value: str) -> str:
from urllib.parse import urlsplit
parsed = urlsplit(value)
if parsed.scheme not in {"http", "https"} or not parsed.hostname or parsed.username or parsed.password or parsed.query or parsed.fragment:
raise ValueError("任务服务须使用不含凭证、查询参数的 HTTP(S) 地址")
return value.rstrip("/")
class TaskToolDefinition(CamelModel):
schema_version: int = 2
type: Literal["task"] = "task"
config: TaskToolConfig
ToolDefinition = Annotated[
Union[
HttpToolDefinition,
ClientToolDefinition,
McpToolDefinition,
TaskToolDefinition,
],
Field(discriminator="type"),
]