Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
378 changes: 378 additions & 0 deletions .agents/plugins/evaluations/contentcloud-video-production-0.27.0.json

Large diffs are not rendered by default.

54 changes: 54 additions & 0 deletions .agents/plugins/registry.draft.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
{
"$schema": "../../contracts/marketplace-registry-1.0.schema.json",
"schema_version": "1.0",
"entries": [
{
"id": "contentcloud-marketing",
"kind": "skill_pack",
"version": "0.1.0",
"source": {
"repository": "https://github.com/limecloud/contentcloud",
"ref": "v0.1.0"
},
"license": "Apache-2.0",
"digest": "sha256:d2bfc1aa09ce9fd288afbf581c91f6d8b558bba008c767a313c7c7c3d4dfe7ff",
"signature": {
"status": "pending"
},
"compatible_profiles": [
"contentcloud.video-production",
"contentcloud.marketing"
],
"permissions": [
"workspace:read",
"workspace:write-managed",
"contentcloud-control-plane:explicit-actions-only"
],
"data_flow": {
"local_by_default": true,
"cloud_actions": [
"explicit knowledge, brief, content and delivery submission",
"explicit review and approved-snapshot synchronization"
]
},
"cost": {
"model": "included",
"notice": "营销 Skills 随 ContentCloud 提供;外部模型、素材或渠道 Provider 费用必须单独确认。"
},
"output_schemas": [
"contracts/knowledge-candidates-1.0.schema.json",
"contracts/knowledge-page-3.0.schema.json",
"contracts/knowledge-pack-3.0.schema.json",
"contracts/content-batch-3.0.schema.json",
"contracts/handoff-1.0.schema.json"
],
"evaluation": {
"status": "pending"
},
"lifecycle": "draft",
"revocation": {
"status": "active"
}
}
]
}
12 changes: 6 additions & 6 deletions .agents/plugins/registry.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@
{
"id": "contentcloud-video-production",
"kind": "scene_plugin",
"version": "0.26.0",
"version": "0.27.0",
"source": {
"repository": "https://github.com/limecloud/contentcloud",
"ref": "v0.26.0"
"ref": "v0.27.0"
},
"license": "Apache-2.0",
"digest": "sha256:6c8fdbaa10d887d94880f0451d5b336da871d36faf71a23a85f3d05212b1e756",
"digest": "sha256:602eae13abe742944becddd96913828db95b8a4780a1a854ff66f9d78cdd7a2e",
"signature": {
"status": "verified",
"algorithm": "ed25519",
"key_id": "contentcloud-plugin-release-2026-07",
"value": "lyM2tA6XXRz0Ox+urs9JC2DdfZ6d45mKbKygSJTSvNrEaAo9cwXk/Qwqk3hp0ZJczvv1arj3FGkR57IpKorkBg=="
"value": "NPtmi4QDh//7fUwAlC9W6uETu9W2L12LMDdC2AAhBLh017i2orZIKdX3p36xIBOn7VI4MH55KdP3iWuQJoP+Dg=="
},
"compatible_profiles": [
"contentcloud.video-production"
Expand Down Expand Up @@ -54,8 +54,8 @@
],
"evaluation": {
"status": "passed",
"report": ".agents/plugins/evaluations/contentcloud-video-production-0.26.0.json",
"digest": "sha256:84063ed0aa42593ef77cec0e6ac640ae3040cff7b0f256aad2624a652da55edd",
"report": ".agents/plugins/evaluations/contentcloud-video-production-0.27.0.json",
"digest": "sha256:4db3049a5663e78568be17fba8c7ed90962297556326bc11a171e453e407ad9e",
"evidence": [
"codex-plugin-transaction",
"bootstrap-confirmation",
Expand Down
22 changes: 21 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,29 @@

ContentCloud 的重要变更记录在此文件中。

## [0.27.0] - 2026-08-15

### Added

- 增加 Seedance 2.5 Provider 适配、PromptPackage 校验、文本生视频输入和媒体任务取消/提交对账能力。
- 增加 ContentCloud Marketing Skill Pack,串联知识摄取、治理、意图内容、编译和客户交付流程。
- 增加 Workbench MCP App、媒体输出清理、Provider 费用估算和 Runtime MCP 网关回归测试。

### Changed

- 扩展视频生产插件的 Seedance 执行 Skill、内容治理规则、MCP 与工作区交接文档。
- Web、Server、Worker、CLI、Plugin、MCP 和 Environment Profile 统一升级到 `0.27.0`。

### Fixed

- 修复外部媒体提交、取消和输出入库失败时的状态一致性、重试与临时 Blob 清理问题。
- 修复 Workbench handoff、Workspace 视图和微信文章 Skill 边界校验的回归问题。

## [0.26.0] - 2026-08-14

### Added

- 增加 Agent Plugin 的本地 Workspace 工作台能力,通过 `Skills + stdio MCP` 提供类型化 View、digest 固定 Resource 与安全静态 HTML presentation
- 增加 Agent Plugin 的本地 Workspace 工作台能力,通过 `Skills + stdio MCP` 提供类型化 View、digest 固定 Resource、同进程 Go Presenter 和嵌入式 SPA
- 增加 Attempt 级 Runtime MCP Gateway、Daemon 绑定与运行诊断,使 Codex/Claude Harness 在受控工具边界内恢复本地与云端执行上下文。

### Changed
Expand All @@ -17,6 +35,8 @@ ContentCloud 的重要变更记录在此文件中。
### Fixed

- 修复 Codex Harness 在 Runtime Gateway 参数校验失败时创建未释放 context 的问题。
- 修复本地 Workbench 清除一次性 handoff 后刷新无法恢复的问题,并让 Browser Claim 在同一标签页刷新后继续受 owner/epoch 围栏保护。
- 修复 Workspace JSON 被降级为纯文本的问题,并从模型可见 `workspace_context` 中移除本地绝对 Root。

## [0.25.0] - 2026-08-12

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.26.0
0.27.0
4 changes: 2 additions & 2 deletions agent_plugins.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import (
"io/fs"
)

//go:embed plugins/contentcloud-video-production plugins/contentcloud-wechat-article
//go:embed plugins/contentcloud-video-production plugins/contentcloud-wechat-article plugins/contentcloud-marketing
var agentPlugins embed.FS

func AgentPlugin(name string) (fs.FS, error) {
if name != "contentcloud-video-production" && name != "contentcloud-wechat-article" {
if name != "contentcloud-video-production" && name != "contentcloud-wechat-article" && name != "contentcloud-marketing" {
return nil, fmt.Errorf("Agent Plugin %q is not bundled", name)
}
return fs.Sub(agentPlugins, "plugins/"+name)
Expand Down
12 changes: 10 additions & 2 deletions cmd/contentcloud-server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,16 @@ func main() {
serviceOptions = append(serviceOptions, app.WithAutomationExecutionPolicy(environmentRuntime.AutomationRequirements, environmentRuntime.AutomationPackIDs))
}
}
seedance25Provider, seedance25Err := app.Seedance25ProviderFromEnv(st, blobStore)
if seedance25Err != nil {
logger.Error("configure Seedance 2.5 Provider", "error", seedance25Err)
os.Exit(1)
}
if seedance25Provider != nil {
serviceOptions = append(serviceOptions, app.WithMediaProviderAdapter(app.Seedance25ProviderID, seedance25Provider))
}
service := app.NewWithBlob(st, logger, blobStore, serviceOptions...)
logger.Info("Environment Control Plane configured", "enabled", environmentRuntime.Enabled, "automation_policy", len(environmentRuntime.AutomationRequirements) > 0)
logger.Info("Environment Control Plane configured", "enabled", environmentRuntime.Enabled, "automation_policy", len(environmentRuntime.AutomationRequirements) > 0, "seedance25_enabled", seedance25Provider != nil)
logger.Info("Runtime rollout configured", "admission_enabled", rolloutPolicy.AdmissionEnabled, "dynamic_graph_enabled", rolloutPolicy.DynamicGraphEnabled, "canary_tenant_count", len(rolloutPolicy.TenantIDs))
workerCtx, cancelWorker := context.WithCancel(context.Background())
defer cancelWorker()
Expand Down Expand Up @@ -112,7 +120,7 @@ func main() {
httpOptions = append(httpOptions, agentCallbackHTTPOptions(os.Getenv("CONTENTCLOUD_AGENT_CALLBACK_SECRETS"))...)
server := &http.Server{Addr: addr, Handler: httpapi.New(service, logger, devMode, webDist, httpOptions...).Handler(), ReadHeaderTimeout: 5 * time.Second, ReadTimeout: 30 * time.Second, WriteTimeout: 35 * time.Second, IdleTimeout: 60 * time.Second}
go func() {
logger.Info("contentcloud server listening", "addr", addr, "dev_mode", devMode, "zero_exec", true)
logger.Info("contentcloud server listening", "addr", addr, "dev_mode", devMode, "zero_exec", seedance25Provider == nil)
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
logger.Error("server stopped", "error", err)
os.Exit(1)
Expand Down
17 changes: 15 additions & 2 deletions cmd/contentcloud-worker/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,22 @@ func main() {
logger.Error("initialize object storage", "error", err)
os.Exit(1)
}
service := app.NewWithBlob(store, logger, blobs)
serviceOptions := []app.Option{}
seedance25Provider, seedance25Err := app.Seedance25ProviderFromEnv(store, blobs)
if seedance25Err != nil {
logger.Error("configure Seedance 2.5 Provider", "error", seedance25Err)
os.Exit(1)
}
if seedance25Provider != nil {
serviceOptions = append(serviceOptions, app.WithMediaProviderAdapter(app.Seedance25ProviderID, seedance25Provider))
}
service := app.NewWithBlob(store, logger, blobs, serviceOptions...)
runtimeWorkerID := worker.RuntimeEventWorkerID()
logger.Info("contentcloud deterministic worker ready", "zero_exec", true, "capabilities", []string{"runtime_event_delivery", "business_result_materialization", "runtime_projection", "source_ingestion", "policy_validation", "context_compile", "export"})
capabilities := []string{"runtime_event_delivery", "business_result_materialization", "runtime_projection", "source_ingestion", "policy_validation", "context_compile", "export"}
if seedance25Provider != nil {
capabilities = append(capabilities, "seedance25_media")
}
logger.Info("contentcloud deterministic worker ready", "zero_exec", seedance25Provider == nil, "seedance25_enabled", seedance25Provider != nil, "capabilities", capabilities)
ticker := time.NewTicker(2 * time.Second)
defer ticker.Stop()
for {
Expand Down
4 changes: 2 additions & 2 deletions contracts/seedance-prompt-package-1.0.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
"provider": {"const": "seedance"},
"provider_profile_version": {"type": "string", "minLength": 1},
"adapter_capability": {"$ref": "#/$defs/capability"},
"mode": {"enum": ["first_last_frame", "all_reference", "extend"]},
"mode": {"enum": ["text_to_video", "image_to_video", "first_last_frame", "all_reference", "extend"]},
"settings": {"$ref": "#/$defs/settings"},
"upload_manifest": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/upload"}},
"upload_manifest": {"type": "array", "items": {"$ref": "#/$defs/upload"}},
"segments": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/segment"}},
"post_production_plan": {"type": "array", "items": {"type": "string", "minLength": 1}},
"validation": {"$ref": "#/$defs/validation"},
Expand Down
2 changes: 1 addition & 1 deletion deploy/systemd/contentcloud.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,5 @@ CONTENTCLOUD_PI_AGENT_ENDPOINT=
CONTENTCLOUD_PI_AGENT_TOKEN=
CONTENTCLOUD_AGENT_SAAS_ENDPOINT=
CONTENTCLOUD_AGENT_SAAS_TOKEN=
CONTENTCLOUD_CAPABILITY_RELEASE_VERSION=0.26.0
CONTENTCLOUD_CAPABILITY_RELEASE_VERSION=0.27.0
CONTENTCLOUD_ENVIRONMENT_MANIFEST_TTL=24h
2 changes: 1 addition & 1 deletion deploy/systemd/environment-profile.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
{
"id": "contentcloud-video-production",
"kind": "scene_plugin",
"version": "0.26.0",
"version": "0.27.0",
"required": true,
"scope": "environment",
"capabilities": [
Expand Down
1 change: 1 addition & 0 deletions diagrams/contentcloud-marketing-architecture.excalidraw

Large diffs are not rendered by default.

29 changes: 29 additions & 0 deletions diagrams/contentcloud-marketing-architecture.mmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
graph LR
Host[Codex / Claude 宿主]
Core[Core Scene Plugin\ncontentcloud-local stdio MCP]
Env[Environment Resolver\nCapability 解析]
Registry[(签名 Manifest + Registry)]
Lock[(Environment Lock)]
Loader[Bundled Plugin Loader\nexact ID + version + digest]
Adapter[Native Host Adapter\nPlan / Apply / Rollback]
Pack[contentcloud-marketing\n8 个中文 Skills]
Kernel[Workspace Command Kernel]
Run[LocalRun + Claim\n唯一状态机]
Workspace[(客户 Workspace\n资料 / 素材 / Run / 输出)]
Shape[视频 / 文章形态 Pack]
Cloud[(ContentCloud 云端)]

Host --> Core
Core --> Env
Registry --> Env
Lock --> Env
Env -->|缺少任务 Pack| Loader
Loader --> Adapter
Adapter -->|安装后更新| Lock
Adapter -->|新会话发现| Pack
Pack --> Core
Core --> Kernel
Kernel --> Run
Kernel <--> Workspace
Pack -. 类型化交接 .-> Shape
Kernel -->|确认 plan_id 后写入| Cloud
Binary file added diagrams/contentcloud-marketing-architecture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions diagrams/contentcloud-marketing-architecture.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions diagrams/contentcloud-marketing-flow.excalidraw

Large diffs are not rendered by default.

22 changes: 22 additions & 0 deletions diagrams/contentcloud-marketing-flow.mmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
graph TD
A[营销任务请求] --> B[Core: workspace_context\n+ environment_execution_plan]
B --> C{Capability 允许?}
C -->|否| D[停止并报告签名环境阻断]
C -->|是| E{营销 Pack 已安装?}
E -->|否| F[prepare_plan\n披露权限 / 数据流 / 费用]
F --> G{确认同一 preparation_id?}
G -->|否| H[保持当前环境不变]
G -->|是| I[apply: exact bundle\nHost Adapter + Lock CAS]
I --> J[新建宿主会话]
E -->|是| K[加载中文营销 Skills]
J --> K
K --> L[恢复或创建同一个 LocalRun\n取得 Claim]
L --> M[来源摄取 + 知识 lint / query]
M --> N{知识门禁通过?}
N -->|否| O[记录 finding\n失败后 resume]
N -->|是| P[按意图编排\n交接视频 / 文章 Pack]
P --> Q[内容 lint + finalize]
Q --> R{需要云端写入?}
R -->|否| S[record + release / handoff]
R -->|是| T[preflight -> 用户确认\napply + audit receipt]
T --> S
Binary file added diagrams/contentcloud-marketing-flow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions diagrams/contentcloud-marketing-flow.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
47 changes: 47 additions & 0 deletions diagrams/contentcloud-marketing-sequence.mmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
sequenceDiagram
actor User as 用户
participant Host as Codex / Claude
participant Core as Core Scene Plugin / stdio MCP
participant Env as Environment Resolver
participant Store as Registry / Lock / Bundled Package
participant Adapter as Native Host Adapter
participant Skill as 营销 Skill Pack
participant WS as Customer Workspace
participant Cloud as Cloud Control Plane

User->>Host: 提出客户营销任务
Host->>Core: workspace_context + environment_execution_plan
Core->>WS: 读取唯一 Workspace 绑定
Core->>Env: 解析 required_capabilities
Env->>Store: 校验 Manifest / Registry / Lock
Store-->>Env: exact PluginRef(id, version, digest)
alt 缺少营销任务 Pack
Env-->>Core: environment_prepare
Core-->>Host: preparation_id、权限、数据流、费用、新会话影响
User->>Host: 确认同一 preparation_id
Host->>Core: environment_prepare_apply(accept=true)
Core->>Store: 加载 CLI 内嵌 exact bundle
Core->>Adapter: Plan + Apply
Adapter-->>Core: 安装回执或可回滚错误
Core->>Store: CAS 更新 Lock 并重新解析
Core-->>Host: ready + requires_new_chat
User->>Host: 新建绑定同一 Workspace 的会话
end
Host->>Skill: 发现并选择中文营销 Skill
Skill->>Core: local_run_init/resume + local_run_claim
Core->>WS: 创建或恢复同一个 Run 与 Claim
Skill->>Core: source_verify / knowledge_lint / knowledge_query
Core->>WS: 写入 finding、eligible、blocked
Skill->>Core: content_batch_lint / finalize
Core->>WS: 保存候选产物与 output_refs
alt 需要云端同步
Skill->>Core: publish_preflight
Core-->>Host: plan_id、范围、摘要、费用
User->>Host: 确认准确 plan_id
Skill->>Core: publish_apply(plan_id)
Core->>Cloud: 明确云端写入
Cloud-->>Core: revision / audit receipt
end
Skill->>Core: local_run_record + release 或 handoff
Core->>WS: 保存最终状态
Host-->>User: 产物、阻断项、Run 与下一步
Binary file added diagrams/contentcloud-marketing-sequence.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions diagrams/contentcloud-marketing-sequence.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions diagrams/contentcloud-marketing-state.mmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
stateDiagram-v2
[*] --> planned
planned --> claimed: local_run_claim
claimed --> ingest: with_ingest
claimed --> knowledge_lint: no new source
ingest --> knowledge_lint: source_ingest complete
knowledge_lint --> query: kb-lint passed
knowledge_lint --> failed: kb-lint failed
query --> compile: intent=content
query --> done: intent=query
compile --> output_lint: content candidates ready
output_lint --> done: content-lint passed
output_lint --> failed: content-lint failed
failed --> claimed: local_run_resume
done --> released: local_run_release
done --> handoff: handoff_create_ready
released --> [*]
handoff --> [*]
Binary file added diagrams/contentcloud-marketing-state.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions diagrams/contentcloud-marketing-state.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 8 additions & 5 deletions docs/content/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,12 @@ Content Work OS 是 Studio-first 的内容生产与云端治理系统。客户
| 客户端 | 当前状态 | 文档 |
| --- | --- | --- |
| Codex | 完整接入能力可用 | [Codex](clients/codex.md) |
| Claude Code | 本地自动化与工作区注册可用,其他能力仍在接入 | [Claude Code](clients/claude-code.md) |
| WorkBuddy | 即将支持 | 在 Web 文档中心查看动态状态页 |
| Cursor | 即将支持 | 在 Web 文档中心查看动态状态页 |
| Hermes | 即将支持 | 在 Web 文档中心查看动态状态页 |
| OpenClaw | 即将支持 | 在 Web 文档中心查看动态状态页 |
| Claude Code | 控制面有限可用,客户侧完整接入仍在进行 | [Claude Code](clients/claude-code.md) |
| Claude Desktop/Web、Cursor、VS Code GitHub Copilot | 上游协议候选,ContentCloud 尚未准入 | 在 Web 文档中心查看动态状态页 |
| GitHub Copilot 其他 Surface、Kiro、Gemini CLI | Headless/协议候选,尚未准入 | 在 Web 文档中心查看动态状态页 |
| Cline、Windsurf、Continue | 规划状态 | 在 Web 文档中心查看动态状态页 |
| Hermes、OpenClaw、WorkBuddy | 规划状态 | 在 Web 文档中心查看动态状态页 |
| Grok Bot、NanoClaw | 非首发 | 在 Web 文档中心查看动态状态页 |

客户端状态来自智能体客户端注册表(`Agent Client Registry`)。Web 文档中心会按注册表中的最新能力状态生成客户端目录,避免文档和产品状态各自维护一份事实。

Expand All @@ -49,6 +50,8 @@ Content Work OS 是 Studio-first 的内容生产与云端治理系统。客户
- **有限支持**:部分底层能力可用,但不能完成完整初始化、交接或内容生产流程。
- **即将支持**:已进入兼容设计,尚无可执行实现。

上游兼容目录只作为调研证据,不会直接改变这里的客户可用状态。每个客户端都必须独立完成安装、Workspace 绑定、stdio MCP 生命周期、呈现或 Headless 降级以及安全验收。

遇到任务、执行客户端连接、本地工作区或任务交接问题时,查看[故障排查](troubleshooting/workspace-and-handoff.md)。

产品分层、运营后台和 Runtime 目标架构见 [`docs/foundation`](../foundation/README.md)、[`docs/product`](../product/README.md) 和 [`docs/roadmap/v8`](../roadmap/v8/README.md);本目录只描述已经验证、可执行的客户能力。
Loading
Loading