mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-25 05:09:31 +00:00
* feat(codex): add on-request plugin approvals * feat(codex): rename plugin approval policy to auto * fix(codex): update binding schema version callers
127 lines
4.0 KiB
TypeScript
127 lines
4.0 KiB
TypeScript
// Codex tests cover doctor contract api plugin behavior.
|
|
import { describe, expect, it } from "vitest";
|
|
import { legacyConfigRules, normalizeCompatibilityConfig } from "./doctor-contract-api.js";
|
|
|
|
describe("codex doctor contract", () => {
|
|
it("reports the retired dynamic tools profile config key", () => {
|
|
expect(
|
|
legacyConfigRules[0]?.match({
|
|
codexDynamicToolsProfile: "openclaw-compat",
|
|
codexDynamicToolsLoading: "direct",
|
|
}),
|
|
).toBe(true);
|
|
expect(legacyConfigRules[0]?.match({ codexDynamicToolsLoading: "direct" })).toBe(false);
|
|
});
|
|
|
|
it("reports old approval-routed destructive plugin policy values", () => {
|
|
expect(
|
|
legacyConfigRules[1]?.match({
|
|
allow_destructive_actions: "on-request",
|
|
plugins: {},
|
|
}),
|
|
).toBe(true);
|
|
expect(
|
|
legacyConfigRules[1]?.match({
|
|
allow_destructive_actions: true,
|
|
plugins: {
|
|
"google-calendar": { allow_destructive_actions: "on-request" },
|
|
},
|
|
}),
|
|
).toBe(true);
|
|
expect(
|
|
legacyConfigRules[1]?.match({
|
|
allow_destructive_actions: "auto",
|
|
plugins: {
|
|
"google-calendar": { allow_destructive_actions: true },
|
|
},
|
|
}),
|
|
).toBe(false);
|
|
});
|
|
|
|
it("removes the retired dynamic tools profile without dropping other Codex config", () => {
|
|
const original = {
|
|
plugins: {
|
|
entries: {
|
|
codex: {
|
|
enabled: true,
|
|
config: {
|
|
codexDynamicToolsProfile: "openclaw-compat",
|
|
codexDynamicToolsLoading: "direct",
|
|
codexDynamicToolsExclude: ["custom_tool"],
|
|
appServer: { mode: "guardian" },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
const result = normalizeCompatibilityConfig({ cfg: original });
|
|
|
|
expect(result.changes).toEqual([
|
|
"Removed retired plugins.entries.codex.config.codexDynamicToolsProfile; Codex app-server always keeps Codex-native workspace tools native.",
|
|
]);
|
|
expect(result.config.plugins?.entries?.codex?.config).toEqual({
|
|
codexDynamicToolsLoading: "direct",
|
|
codexDynamicToolsExclude: ["custom_tool"],
|
|
appServer: { mode: "guardian" },
|
|
});
|
|
expect(original.plugins.entries.codex.config).toHaveProperty("codexDynamicToolsProfile");
|
|
});
|
|
|
|
it("renames old approval-routed destructive plugin policy values", () => {
|
|
const original = {
|
|
plugins: {
|
|
entries: {
|
|
codex: {
|
|
enabled: true,
|
|
config: {
|
|
codexDynamicToolsProfile: "openclaw-compat",
|
|
codexPlugins: {
|
|
enabled: true,
|
|
allow_destructive_actions: "on-request",
|
|
plugins: {
|
|
"google-calendar": {
|
|
enabled: true,
|
|
allow_destructive_actions: "on-request",
|
|
},
|
|
slack: {
|
|
enabled: true,
|
|
allow_destructive_actions: false,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
const result = normalizeCompatibilityConfig({ cfg: original });
|
|
|
|
expect(result.changes).toEqual([
|
|
"Removed retired plugins.entries.codex.config.codexDynamicToolsProfile; Codex app-server always keeps Codex-native workspace tools native.",
|
|
'Renamed plugins.entries.codex.config.codexPlugins allow_destructive_actions="on-request" values to "auto".',
|
|
]);
|
|
expect(result.config.plugins?.entries?.codex?.config).toEqual({
|
|
codexPlugins: {
|
|
enabled: true,
|
|
allow_destructive_actions: "auto",
|
|
plugins: {
|
|
"google-calendar": {
|
|
enabled: true,
|
|
allow_destructive_actions: "auto",
|
|
},
|
|
slack: {
|
|
enabled: true,
|
|
allow_destructive_actions: false,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
expect(
|
|
original.plugins.entries.codex.config.codexPlugins.plugins["google-calendar"]
|
|
.allow_destructive_actions,
|
|
).toBe("on-request");
|
|
});
|
|
});
|