feat: expose codex migration marketplace governance

This commit is contained in:
AI Bot
2026-06-03 11:55:48 +08:00
parent 0fdee4bcf7
commit ca64a4c498
12 changed files with 169 additions and 7 deletions

View File

@@ -78,6 +78,14 @@ if (args[0] === "app-server" && args[1] === "generate-json-schema") {
{ properties: { method: { const: "fs/copy" } } },
{ properties: { method: { const: "fs/watch" } } },
{ properties: { method: { const: "fs/unwatch" } } },
{ properties: { method: { const: "externalAgentConfig/detect" } } },
{ properties: { method: { const: "externalAgentConfig/import" } } },
{ properties: { method: { const: "externalAgentConfig/import/completed" } } },
{ properties: { method: { const: "marketplace/add" } } },
{ properties: { method: { const: "marketplace/remove" } } },
{ properties: { method: { const: "marketplace/upgrade" } } },
{ properties: { method: { const: "experimentalFeature/list" } } },
{ properties: { method: { const: "experimentalFeature/enablement/set" } } },
{ properties: { method: { const: "skills/extraRoots/set" } } },
{ properties: { method: { const: "hooks/list" } } },
{ properties: { method: { const: "turn/interrupt" } } },
@@ -152,6 +160,11 @@ process.exit(2);
assert.equal(manifest.supports.fsRead, true);
assert.equal(manifest.supports.fsWrite, true);
assert.equal(manifest.supports.fsWatch, true);
assert.equal(manifest.supports.externalAgentImport, true);
assert.equal(manifest.supports.marketplaceAdd, true);
assert.equal(manifest.supports.marketplaceRemove, true);
assert.equal(manifest.supports.marketplaceUpgrade, true);
assert.equal(manifest.supports.experimentalFeatureEnablementSet, true);
assert.deepEqual(manifest.methods, [
"account/chatgptAuthTokens/refresh",
"account/login/cancel",
@@ -166,6 +179,11 @@ process.exit(2);
"config/batchWrite",
"config/mcpServer/reload",
"config/value/write",
"experimentalFeature/enablement/set",
"experimentalFeature/list",
"externalAgentConfig/detect",
"externalAgentConfig/import",
"externalAgentConfig/import/completed",
"fs/copy",
"fs/createDirectory",
"fs/getMetadata",
@@ -176,6 +194,9 @@ process.exit(2);
"fs/watch",
"fs/writeFile",
"hooks/list",
"marketplace/add",
"marketplace/remove",
"marketplace/upgrade",
"plugin/install",
"plugin/read",
"plugin/share/checkout",

View File

@@ -207,6 +207,28 @@ test("device detail exposes Codex App Server discovered model and extension summ
userInitiatedOnly: true,
labels: ["执行命令", "写入 stdin", "调整 PTY", "终止命令", "输出流"],
},
externalAgentGovernanceSummary: {
actionCount: 3,
importActionCount: 1,
notificationActionCount: 1,
detectActionAvailable: true,
userInitiatedOnly: true,
labels: ["迁移检测", "迁移导入", "导入完成"],
},
marketplaceGovernanceSummary: {
actionCount: 3,
writeActionCount: 3,
upgradeAvailable: true,
userInitiatedOnly: true,
labels: ["添加市场", "移除市场", "升级市场"],
},
experimentalFeatureGovernanceSummary: {
actionCount: 2,
writeActionCount: 1,
listAvailable: true,
userInitiatedOnly: true,
labels: ["实验列表", "启用设置"],
},
},
},
};
@@ -231,6 +253,9 @@ test("device detail exposes Codex App Server discovered model and extension summ
assert.equal(cards.capabilities.items.codexConfigGovernance, "配置治理5 项 · 写入 3 项 · 重载 1 项 · 读取可用");
assert.equal(cards.capabilities.items.codexFileSystemGovernance, "文件治理9 项 · 读 3 项 · 写 3 项 · 监听 2 项");
assert.equal(cards.capabilities.items.codexCommandSession, "命令会话5 项 · 控制 3 项 · 输出流可用 · 可终止");
assert.equal(cards.capabilities.items.codexExternalAgentGovernance, "迁移治理3 项 · 导入 1 项 · 检测可用");
assert.equal(cards.capabilities.items.codexMarketplaceGovernance, "市场治理3 项 · 写入 3 项 · 升级可用");
assert.equal(cards.capabilities.items.codexExperimentalFeatureGovernance, "实验特性治理2 项 · 写入 1 项 · 列表可用");
});
test("device detail exposes folder and project conflict skeleton from workspace policy", async () => {

View File

@@ -167,6 +167,28 @@ test("codex app-server discovery includes governance and MCP summaries without l
userInitiatedOnly: true,
labels: ["执行命令", "写入 stdin", "调整 PTY", "终止命令", "输出流"],
});
assert.deepEqual(metadata.externalAgentGovernanceSummary, {
actionCount: 3,
importActionCount: 1,
notificationActionCount: 1,
detectActionAvailable: true,
userInitiatedOnly: true,
labels: ["迁移检测", "迁移导入", "导入完成"],
});
assert.deepEqual(metadata.marketplaceGovernanceSummary, {
actionCount: 3,
writeActionCount: 3,
upgradeAvailable: true,
userInitiatedOnly: true,
labels: ["添加市场", "移除市场", "升级市场"],
});
assert.deepEqual(metadata.experimentalFeatureGovernanceSummary, {
actionCount: 2,
writeActionCount: 1,
listAvailable: true,
userInitiatedOnly: true,
labels: ["实验列表", "启用设置"],
});
const serialized = JSON.stringify(metadata);
assert.equal(serialized.includes("sk-secret-should-not-leak"), false);