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
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
{
"$schema": "../../../contracts/plugin-evaluation-1.0.schema.json",
"schema_version": "1.0",
"plugin": {
"id": "contentcloud-video-production",
"version": "0.5.0",
"digest": "sha256:025e6f31b491f8cd529d39dbbae31a464743dba653234be2012426631950b26a"
},
"scope": "deterministic_release_contract",
"status": "passed",
"scenarios": [
{
"id": "codex-plugin-transaction",
"requirement": "Pinned Marketplace and Plugin plans remain read-only until confirmation, validate after install, roll back only owned changes, and open a new Codex chat through the documented fallback.",
"command": ["go", "test", "-v", "./internal/codexplugin", "-run", "^(TestPlanIsReadOnlyAndPinsMarketplaceAndPlugin|TestDetectClassifiesCurrentOutdatedAndBroken|TestApplyRequiresConfirmation|TestApplyInstallsAndValidates|TestApplyRollsBackOnlyMarketplaceAddedByThisRun|TestNewChatDeepLinkContainsWorkspaceAndPluginMention|TestLaunchNewChatFallsBackToWorkspaceCommand)$"],
"evidence": ["TestPlanIsReadOnlyAndPinsMarketplaceAndPlugin", "TestApplyRequiresConfirmation", "TestApplyInstallsAndValidates", "TestApplyRollsBackOnlyMarketplaceAddedByThisRun", "TestLaunchNewChatFallsBackToWorkspaceCommand"],
"status": "passed"
},
{
"id": "bootstrap-confirmation",
"requirement": "Bootstrap uses a deterministic plan_id, performs no mutation before exact confirmation, runs doctor before registration, and preserves recoverability on failure.",
"command": ["go", "test", "-v", "./internal/cli", "-run", "^(TestBootstrapPlanIsReadOnlyAndDoesNotExposeConnectKey|TestBootstrapPlanIDIsStableUntilInputsChange|TestBootstrapApplyInstallsInitializesDoctorsAndRegisters|TestBootstrapApplyRollsBackWithIndependentContextAfterCancellation|TestBootstrapApplyRejectsUnconfirmedPlanID|TestBootstrapApplyRequiresPlanIDBeforeMutation|TestBootstrapApplyRejectsPlanAfterCodexStateChanges)$"],
"evidence": ["TestBootstrapPlanIsReadOnlyAndDoesNotExposeConnectKey", "TestBootstrapApplyInstallsInitializesDoctorsAndRegisters", "TestBootstrapApplyRejectsUnconfirmedPlanID", "TestBootstrapApplyRejectsPlanAfterCodexStateChanges"],
"status": "passed"
},
{
"id": "cross-conversation-handoff",
"requirement": "New conversations recover persisted state and atomically transfer one exact Run revision without reading prior transcripts.",
"command": ["go", "test", "-v", "./internal/localworkspace", "./internal/cli", "-run", "^(TestConversationContextReadsPersistedOfflineState|TestRunClaimIsSingleWriterAndExpiredTakeoverIsExplicit|TestHandoffAcceptIsAtomicAcrossConversations|TestHandoffRejectsChangedInputDigest|TestMCPRunsCrossConversationHandoffLifecycle)$"],
"evidence": ["TestConversationContextReadsPersistedOfflineState", "TestRunClaimIsSingleWriterAndExpiredTakeoverIsExplicit", "TestHandoffAcceptIsAtomicAcrossConversations", "TestHandoffRejectsChangedInputDigest", "TestMCPRunsCrossConversationHandoffLifecycle"],
"status": "passed"
},
{
"id": "governed-publish",
"requirement": "Publish binds exact files, disclosures, message, idempotency key, and environment to a confirmed plan_id and performs no cloud write for a missing, stale, or unconfirmed plan.",
"command": ["go", "test", "-v", "./internal/cli", "-run", "^(TestPublishPlanIDIsStableAndBindsExactInputs|TestPublishCLIRejectsMissingOrStalePlanBeforeCloudWrite|TestMCPPublishApplyRequiresExactConfirmationBeforeCloudWrite|TestPublishReadersRejectSymlinksOutsideWorkspace)$"],
"evidence": ["TestPublishPlanIDIsStableAndBindsExactInputs", "TestPublishCLIRejectsMissingOrStalePlanBeforeCloudWrite", "TestMCPPublishApplyRequiresExactConfirmationBeforeCloudWrite", "TestPublishReadersRejectSymlinksOutsideWorkspace"],
"status": "passed"
},
{
"id": "review-and-approved-resume",
"requirement": "Review feedback and ApprovedSnapshots are explicitly pulled, stored immutably, verified, and reused by later credential-free conversations without cloud reads.",
"command": ["go", "test", "-v", "./internal/localworkspace", "./internal/cli", "-run", "^(TestReviewFeedbackInboxKeepsImmutableRevisionsOfOneSubmissionRevision|TestReviewFeedbackInboxRejectsDigestMismatch|TestMCPFeedbackPullCreatesImmutableInboxForNewConversation|TestApprovedSnapshotCacheKeepsImmutableVersions|TestApprovedSnapshotCacheRejectsTamperingAndUnverifiedLegacyEntry|TestMCPApprovedSnapshotPullSupportsOfflineCrossConversationRead|TestWorkspaceApprovedCommandsReadCacheWithoutCredential)$"],
"evidence": ["TestReviewFeedbackInboxKeepsImmutableRevisionsOfOneSubmissionRevision", "TestMCPFeedbackPullCreatesImmutableInboxForNewConversation", "TestApprovedSnapshotCacheKeepsImmutableVersions", "TestApprovedSnapshotCacheRejectsTamperingAndUnverifiedLegacyEntry", "TestMCPApprovedSnapshotPullSupportsOfflineCrossConversationRead"],
"status": "passed"
},
{
"id": "knowledge-contract",
"requirement": "Knowledge candidates remain evidence-bound, reject invented or out-of-workspace inputs, and become eligible only through a verified ApprovedSnapshot.",
"command": ["go", "test", "-v", "./internal/localworkspace", "-run", "^(TestKnowledgeCandidateFlowToApprovedQueryAndPack|TestKnowledgeImportRejectsInventedEvidence|TestKnowledgeImportRejectsSymlinkOutsideWorkspace|TestKnowledgeImportRejectsInvalidCandidatePackageShapes)$"],
"evidence": ["TestKnowledgeCandidateFlowToApprovedQueryAndPack", "TestKnowledgeImportRejectsInventedEvidence", "TestKnowledgeImportRejectsSymlinkOutsideWorkspace", "TestKnowledgeImportRejectsInvalidCandidatePackageShapes"],
"status": "passed"
},
{
"id": "script-contract",
"requirement": "Script packages enforce explicit arrays, blocked reasons, approved references, and declared revision drift before publish or export.",
"command": ["go", "test", "-v", "./internal/localworkspace", "./internal/cli", "-run", "^(TestScriptRevisionDiffRejectsUndeclaredDrift|TestScriptLintRequiresExplicitArraysAndBlockedReasons|TestPublishPreflightAllowsBlockedScriptOnlyWithReasons|TestPublishPreflightRejectsBriefThatSkippedLocalLint)$"],
"evidence": ["TestScriptRevisionDiffRejectsUndeclaredDrift", "TestScriptLintRequiresExplicitArraysAndBlockedReasons", "TestPublishPreflightAllowsBlockedScriptOnlyWithReasons", "TestPublishPreflightRejectsBriefThatSkippedLocalLint"],
"status": "passed"
},
{
"id": "environment-control-plane",
"requirement": "Project-bound Manifests and Execution Bundles are signed and expiry-checked; Registry, local Lock, Pack, capability digest, subject binding, Automation pre-lease resolution, and attempt-scoped execution workspaces all fail closed without leaking run credentials or leaving an unfinished attempt.",
"command": ["go", "test", "-v", "./internal/environment", "./internal/app", "./internal/localworkspace", "./internal/capabilitycatalog", "./internal/serverconfig", "./internal/automationworkspace", "./internal/agentadapter", "./internal/cli", "-run", "^(TestManifestSignatureBindsPayloadProjectExpiryAndTrust|TestBuildManifestUsesOnlyExactPublishedCompatibleRegistryEntries|TestRevokedEntryBlocksNewUseButRemainsHistoricallyAuditable|TestLocalResolverIntersectsManifestRegistryAndLock|TestPreparationPlanBindsSignedPermissionsCostAndExecutionPlan|TestPreparedLockAddsOnlyExactConfirmedTaskPack|TestRegistryCanonicalPayloadMatchesNodeConformanceVector|TestCreativeExecutionBundleIsDeterministicAndBindsSubjectEnvironmentAndTrust|TestCreativeExecutionBundleFailsClosedForPackRegistryLockAndCapabilityDrift|TestConnectDeviceReturnsProjectBoundSignedEnvironmentManifest|TestAutomationPollRequiresVerifiedEnvironmentPackAndCapabilityBeforeLease|TestEnvironmentStateStoresAndVerifiesSignedManifestAndExactLock|TestEnvironmentStateFailsClosedForWrongProjectMissingPluginAndTampering|TestEnvironmentLockCompareAndSwapRejectsConcurrentChange|TestEnvironmentPreparationAndRunClaimAreMutuallyExclusive|TestBuiltinsUseDeterministicSHA256Digests|TestLoadEnvironmentBuildsVerifiedControlPlaneAndAutomationPolicy|TestLoadEnvironmentFailsClosedForPartialOrUnsafeConfiguration|TestMCPEnvironmentExecutionPlanUsesVerifiedOfflineState|TestMCPEnvironmentPreparationRequiresExactConfirmationAndReachesReady|TestWorkspacePrepareCLIPlanAndApplyUseTheSameDeterministicPlan|TestEnvironmentPreparationFailureRollsBackOnlyTheNewPack|TestAttemptWorkspaceFreezesInputsWithoutRunCredentialAndUsesExclusiveLease|TestAttemptWorkspaceRejectsInteractiveOverlapAndRecoversOnlyExpiredOwnedLease|TestAttemptWorkspaceRenewsExclusiveLeaseFromServerExpiry|TestAdapterLoadsOnlyFrozenAutomationWorkspaceResources|TestAgentEnvironmentDoesNotInheritUnrelatedSecret|TestDaemonFixtureUsesAttemptScopedWorkspaceWithoutPersistingRunCredential|TestDaemonFinishesAttemptWhenWorkspaceIsolationFails)$"],
"evidence": ["TestManifestSignatureBindsPayloadProjectExpiryAndTrust", "TestBuildManifestUsesOnlyExactPublishedCompatibleRegistryEntries", "TestRevokedEntryBlocksNewUseButRemainsHistoricallyAuditable", "TestLocalResolverIntersectsManifestRegistryAndLock", "TestPreparationPlanBindsSignedPermissionsCostAndExecutionPlan", "TestPreparedLockAddsOnlyExactConfirmedTaskPack", "TestRegistryCanonicalPayloadMatchesNodeConformanceVector", "TestCreativeExecutionBundleIsDeterministicAndBindsSubjectEnvironmentAndTrust", "TestCreativeExecutionBundleFailsClosedForPackRegistryLockAndCapabilityDrift", "TestConnectDeviceReturnsProjectBoundSignedEnvironmentManifest", "TestAutomationPollRequiresVerifiedEnvironmentPackAndCapabilityBeforeLease", "TestEnvironmentStateStoresAndVerifiesSignedManifestAndExactLock", "TestEnvironmentStateFailsClosedForWrongProjectMissingPluginAndTampering", "TestEnvironmentLockCompareAndSwapRejectsConcurrentChange", "TestEnvironmentPreparationAndRunClaimAreMutuallyExclusive", "TestBuiltinsUseDeterministicSHA256Digests", "TestLoadEnvironmentBuildsVerifiedControlPlaneAndAutomationPolicy", "TestLoadEnvironmentFailsClosedForPartialOrUnsafeConfiguration", "TestMCPEnvironmentExecutionPlanUsesVerifiedOfflineState", "TestMCPEnvironmentPreparationRequiresExactConfirmationAndReachesReady", "TestWorkspacePrepareCLIPlanAndApplyUseTheSameDeterministicPlan", "TestEnvironmentPreparationFailureRollsBackOnlyTheNewPack", "TestAttemptWorkspaceFreezesInputsWithoutRunCredentialAndUsesExclusiveLease", "TestAttemptWorkspaceRejectsInteractiveOverlapAndRecoversOnlyExpiredOwnedLease", "TestAttemptWorkspaceRenewsExclusiveLeaseFromServerExpiry", "TestAdapterLoadsOnlyFrozenAutomationWorkspaceResources", "TestAgentEnvironmentDoesNotInheritUnrelatedSecret", "TestDaemonFixtureUsesAttemptScopedWorkspaceWithoutPersistingRunCredential", "TestDaemonFinishesAttemptWhenWorkspaceIsolationFails"],
"status": "passed"
}
],
"limitations": [
"Codex Desktop host loading, Deep Link behavior, and session boundaries remain separate W0 smoke-test gates.",
"The report does not use production credentials, publish release artifacts, or contact production services.",
"Optional future Skill and Provider Packs require their own creative-quality evaluations under W5-06."
]
}
20 changes: 20 additions & 0 deletions .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "contentcloud",
"interface": {
"displayName": "ContentCloud"
},
"plugins": [
{
"name": "contentcloud-video-production",
"source": {
"source": "local",
"path": "./plugins/contentcloud-video-production"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}
]
}
67 changes: 67 additions & 0 deletions .agents/plugins/registry.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"$schema": "../../contracts/marketplace-registry-1.0.schema.json",
"schema_version": "1.0",
"entries": [
{
"id": "contentcloud-video-production",
"kind": "scene_plugin",
"version": "0.5.0",
"source": {
"repository": "https://github.com/limecloud/contentcloud",
"ref": "v0.5.0"
},
"license": "Apache-2.0",
"digest": "sha256:025e6f31b491f8cd529d39dbbae31a464743dba653234be2012426631950b26a",
"signature": {
"status": "verified",
"algorithm": "ed25519",
"key_id": "contentcloud-plugin-release-2026-07",
"value": "59mUalQ+sdVk9ROcULIOJHE/4PhuN1fMxIYuN14Ae/2Vp/zefWDppKJRgOWPvwHO/50ODZim9Jamd7q4BcBLAw=="
},
"compatible_profiles": [
"contentcloud.video-production"
],
"permissions": [
"workspace:read",
"workspace:write-managed",
"contentcloud-control-plane:explicit-actions-only",
"credential-store:macos-keychain"
],
"data_flow": {
"local_by_default": true,
"cloud_actions": [
"device.connect",
"workspace.register",
"explicit publish and review synchronization"
]
},
"cost": {
"model": "included",
"notice": "ContentCloud Scene Plugin 随当前产品订阅提供;外部模型或 Provider 费用仍在执行前单独确认。"
},
"output_schemas": [
"contracts/knowledge-candidates-1.0.schema.json",
"contracts/script-package-2.0.schema.json"
],
"evaluation": {
"status": "passed",
"report": ".agents/plugins/evaluations/contentcloud-video-production-0.5.0.json",
"digest": "sha256:8dbecc50bb45fee5904889d4a29b19b7ae49a10c7cb7242afb4251eb6913c93e",
"evidence": [
"codex-plugin-transaction",
"bootstrap-confirmation",
"cross-conversation-handoff",
"governed-publish",
"review-and-approved-resume",
"knowledge-contract",
"script-contract",
"environment-control-plane"
]
},
"lifecycle": "published",
"revocation": {
"status": "active"
}
}
]
}
12 changes: 12 additions & 0 deletions .agents/plugins/trusted-keys.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"$schema": "../../contracts/plugin-trusted-keys-1.0.schema.json",
"schema_version": "1.0",
"keys": [
{
"key_id": "contentcloud-plugin-release-2026-07",
"algorithm": "ed25519",
"status": "active",
"public_key": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAHWpJ0pG8zvT6JLiNVMcaDGySmjPxdXqVa08rYCyPqYk=\n-----END PUBLIC KEY-----\n"
}
]
}
5 changes: 4 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,12 @@ jobs:
node-version: '22'
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: test -z "$(gofmt -l ./cmd ./internal ./contracts ./migrations ./skills)"
- run: test -z "$(gofmt -l ./cmd ./internal ./contracts ./migrations ./plugins)"
- run: go vet ./...
- run: go test -race ./...
- run: pnpm evaluate:plugin
- run: pnpm test:plugin-signing
- run: pnpm check:plugin
- run: pnpm --dir web typecheck
- run: pnpm --dir web test
- run: pnpm --dir web build
Expand Down
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,28 @@

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

## [0.5.0] - 2026-07-27

### Added

- 增加 ContentCloud 精选 Marketplace、`contentcloud-video-production` Scene Plugin、三个 canonical Skills 与 bundled `contentcloud-local` MCP,并建立确定性评测、digest、Ed25519 签名和撤回门禁。
- 增加项目级 Creative Environment Control Plane,覆盖签名 Manifest、可信 Registry、Environment Lock、Pack preparation、升级/重置计划及离线 doctor。
- 增加 CreativeExecutionBundle、capability catalog、Automation 租约前环境校验与隔离执行工作区,使交互式创作和后台执行共享同一套可审计能力契约。
- 增加 `bootstrap plan/apply/resume` 安装事务、Codex Marketplace/Plugin 状态检测、新会话 handoff、RunClaim 和跨对话原子交接。
- 增加本地审核反馈 inbox、ApprovedSnapshot 只读缓存,以及 CLI/MCP 的显式拉取、查看和精确确认发布流程。

### Changed

- 将内置创作 Skills 收敛到 Scene Plugin 单一事实源,由 Go CLI、Workspace Template 和 Codex Plugin 共同引用。
- 将 CLI、Web、npm 安装器、Plugin、MCP 与 bootstrap 固定版本统一为 `0.5.0`。
- 服务端可通过 systemd 配置启用签名 Environment Profile 和 capability release,bootstrap 与 Automation 在缺少可信环境时 fail closed。

### Fixed

- 修复 Environment Preparation 超过 lease TTL 后 RunClaim 可提前进入的问题;只要 preparation 文件存在,运行领取始终保持关闭。
- 修复 CreativeExecutionBundle 在 PostgreSQL 中可被 runtime 更新或删除的问题,增加权限撤销、不可变触发器和 RLS 集成断言。
- 修复 Node 23 下发布签名工具无法为现有 public `KeyObject` 计算指纹的问题。

## [0.4.0] - 2026-07-27

### Added
Expand Down
Loading
Loading