feat: 工具系统迁移 + 重型插件骨架 + 前端交互增强

- 工具系统从 kilostar/plugin/tool_plugin/ 迁移到 data/toolset/(manifest.json 声明式)
- 新增 plugin_runtime 模块:BaseOrganization / GlobalPluginManager / loader / tool_bridge
- 新增 org_task + org_task_event 表及 DAO(alembic 0009)
- 新增 /api/v1/plugin 路由(submit/status/stream/install/reload)
- 新增 data/plugin/example_dept 示例重型插件
- regulatory_node 支持聊天历史上下文注入
- send_file 改为 artifact 存盘 + SSE 推送下载链接
- 前端 WorkflowFileCard 组件 + ToolSettings README 渲染
- utils 整理:合并 access/role_check、standalone_proxy→ray_compat、删除废弃模块
- 项目结构文档移至 docs/STRUCTURE.md 并详细展开

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-17 05:20:00 +00:00
parent 9b73ae4db4
commit 6d658b4f4d
74 changed files with 2591 additions and 1308 deletions
+57
View File
@@ -0,0 +1,57 @@
"""manifest.json 的 pydantic 模型。"""
from __future__ import annotations
from typing import List, Literal, Optional
from pydantic import BaseModel, Field
class OrgDependencies(BaseModel):
"""组织依赖声明。
``python`` 列表会在 install 阶段交给 uv 处理;``plugins`` 留给后续做插件间依赖。
"""
python: List[str] = Field(default_factory=list)
plugins: List[str] = Field(default_factory=list)
class OrgUIRef(BaseModel):
"""前端 dashboard 入口(先占位,Tauri 化后接通)。"""
entry: Optional[str] = None
icon: Optional[str] = None
class OrgManifest(BaseModel):
"""重型插件的章程文件。
name 是目录名也是 actor 注册名前缀(实际 actor name = ``org_<name>``)。
entry 留空则使用 ``BaseOrganization`` 默认实现,纯声明式插件即可跑起来;
填写时形如 ``core.organization:DataCleaningOrg`` 指向子类。
"""
name: str
version: str = "0.1.0"
display_name: str = ""
description: str = ""
# 入口与并发
entry: Optional[str] = None
concurrency: Literal["queue", "parallel"] = "queue"
node_affinity: Literal["cpu", "core", "gpu"] = "cpu"
# 对外
api_prefix: Optional[str] = None
capabilities: List[str] = Field(default_factory=list)
# 资源
dependencies: OrgDependencies = Field(default_factory=OrgDependencies)
# UI
ui: OrgUIRef = Field(default_factory=OrgUIRef)
@property
def actor_name(self) -> str:
return f"org_{self.name}"