feat: release 2.3.0 with workspace plugin extensions
This commit is contained in:
1 parent
8380057548
commit
bb873ec0e0
44 files changed
+1497
-48
No files matched your search
@@ -12,6 +12,8 @@ from packaging.specifiers import SpecifierSet
|
||||
from packaging.version import Version
|
||||
from pydantic import BaseModel, ConfigDict, Field, SecretStr, field_validator, model_validator
|
||||
|
||||
from artemis.plugins.workspace import WorkspaceContribution
|
||||
|
||||
Identifier = Annotated[str, Field(pattern=r"^[a-z][a-z0-9_-]{0,47}$")]
|
||||
|
||||
|
||||
@@ -94,7 +96,7 @@ class EvidenceSource(PluginModel):
|
||||
|
||||
|
||||
class PluginManifest(PluginModel):
|
||||
schema_version: Literal[1, 2] = 1
|
||||
schema_version: Literal[1, 2, 3] = 1
|
||||
id: Identifier
|
||||
name: str = Field(min_length=1, max_length=100)
|
||||
version: str
|
||||
@@ -113,6 +115,7 @@ class PluginManifest(PluginModel):
|
||||
targets: list[ExecutionTarget] = Field(default_factory=lambda: ["mixed"])
|
||||
observation: PluginObservation | None = None
|
||||
capabilities: PluginCapabilities | None = None
|
||||
workspace: WorkspaceContribution | None = None
|
||||
|
||||
@field_validator("version")
|
||||
@classmethod
|
||||
@@ -130,14 +133,16 @@ class PluginManifest(PluginModel):
|
||||
|
||||
@model_validator(mode="after")
|
||||
def has_capability(self):
|
||||
if self.server is None and self.skill is None:
|
||||
raise ValueError("插件至少需要 MCP 服务或 Skill")
|
||||
if self.server is None and self.skill is None and self.workspace is None:
|
||||
raise ValueError("插件至少需要 MCP 服务、Skill 或工作区扩展")
|
||||
if self.workspace is not None and self.schema_version != 3:
|
||||
raise ValueError("工作区扩展需要 schema_version=3")
|
||||
for name, field in self.config.items():
|
||||
if field.secret and field.default:
|
||||
raise ValueError(f"密钥字段 {name} 不允许默认值")
|
||||
if self.schema_version == 1 and self.capabilities is not None:
|
||||
raise ValueError("能力契约需要 schema_version=2;旧清单保持兼容")
|
||||
if self.schema_version == 2:
|
||||
if self.schema_version >= 2:
|
||||
if self.capabilities is None:
|
||||
raise ValueError("第二版插件必须声明 capabilities")
|
||||
if self.observation:
|
||||
|
||||
Reference in new issue
Block a user