@osovv/vv-opencode 0.30.1 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/commands/doctor.js +1 -1
  2. package/dist/commands/doctor.js.map +1 -1
  3. package/dist/commands/plugin-list.d.ts +2 -1
  4. package/dist/commands/plugin-list.js +38 -3
  5. package/dist/commands/plugin-list.js.map +1 -1
  6. package/dist/commands/plugin-toggle.d.ts +34 -0
  7. package/dist/commands/plugin-toggle.js +134 -0
  8. package/dist/commands/plugin-toggle.js.map +1 -0
  9. package/dist/commands/plugin.js +3 -0
  10. package/dist/commands/plugin.js.map +1 -1
  11. package/dist/commands/status.js +1 -1
  12. package/dist/commands/status.js.map +1 -1
  13. package/dist/lib/plugin-toggle-config.d.ts +4 -0
  14. package/dist/lib/plugin-toggle-config.js +76 -0
  15. package/dist/lib/plugin-toggle-config.js.map +1 -0
  16. package/dist/lib/vvoc-config.d.ts +11 -4
  17. package/dist/lib/vvoc-config.js +24 -12
  18. package/dist/lib/vvoc-config.js.map +1 -1
  19. package/dist/plugins/guardian/index.js +3 -0
  20. package/dist/plugins/guardian/index.js.map +1 -1
  21. package/dist/plugins/hashline-edit/index.js +3 -0
  22. package/dist/plugins/hashline-edit/index.js.map +1 -1
  23. package/dist/plugins/model-roles/index.js +3 -0
  24. package/dist/plugins/model-roles/index.js.map +1 -1
  25. package/dist/plugins/secrets-redaction/index.js +2 -1
  26. package/dist/plugins/secrets-redaction/index.js.map +1 -1
  27. package/dist/plugins/system-context-injection/index.js +3 -0
  28. package/dist/plugins/system-context-injection/index.js.map +1 -1
  29. package/dist/plugins/workflow/index.js +3 -0
  30. package/dist/plugins/workflow/index.js.map +1 -1
  31. package/package.json +1 -1
  32. package/schemas/vvoc/v3.json +10 -3
  33. package/templates/agents/vv-controller.md +7 -7
@@ -54,7 +54,7 @@ export default defineCommand({
54
54
  console.log(`vvoc schema: ${inspection.vvoc.schema ?? "missing"}`);
55
55
  console.log(`vvoc version: ${inspection.vvoc.version ?? "missing"}`);
56
56
  console.log(`Guardian model: ${inspection.guardian.config ? (inspection.guardian.config.model ?? "default") : "unknown"}`);
57
- console.log(`Secrets Redaction enabled: ${inspection.secretsRedaction.config ? (inspection.secretsRedaction.config.enabled ? "yes" : "no") : "unknown"}`);
57
+ console.log(`Secrets Redaction config: ${inspection.secretsRedaction.config ? "present" : "unknown"}`);
58
58
  console.log("Roles:");
59
59
  if (inspection.roles.assignments.length === 0) {
60
60
  console.log(" <none>");
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -24,4 +24,5 @@ declare const _default: import("citty").CommandDef<{
24
24
  export default _default;
25
25
  export declare function listPlugins(scope: Scope, cwd: string, configDir?: string): Promise<PluginEntry[]>;
26
26
  export declare function parsePluginSpecifier(specifier: string): PluginEntry;
27
- export declare function renderPluginTable(plugins: PluginEntry[]): void;
27
+ export declare function loadVvocPluginToggles(): Promise<Record<string, boolean> | null>;
28
+ export declare function renderPluginTable(plugins: PluginEntry[], vvocToggles?: Record<string, boolean> | null): void;
@@ -3,7 +3,7 @@
3
3
  // START_MODULE_CONTRACT
4
4
  // PURPOSE: Display all installed OpenCode plugins with their status (enabled/disabled) and source paths.
5
5
  // SCOPE: Scope parsing, plugin array inspection, table rendering, and graceful handling of missing config.
6
- // DEPENDS: [citty, src/lib/opencode.js]
6
+ // DEPENDS: [citty, node:fs/promises, src/lib/opencode.js, src/lib/plugin-toggle-config.js]
7
7
  // LINKS: [M-CLI-PLUGIN-LIST, M-CLI-CONFIG]
8
8
  // ROLE: RUNTIME
9
9
  // MAP_MODE: EXPORTS
@@ -23,6 +23,8 @@
23
23
  // END_CHANGE_SUMMARY
24
24
  import { defineCommand } from "citty";
25
25
  import { resolvePaths } from "../lib/opencode.js";
26
+ import { readFile } from "node:fs/promises";
27
+ import { getGlobalVvocConfigPath } from "../lib/vvoc-paths.js";
26
28
  export default defineCommand({
27
29
  meta: {
28
30
  name: "list",
@@ -57,7 +59,8 @@ export default defineCommand({
57
59
  console.log(`Scope: ${scope}`);
58
60
  console.log(`OpenCode config: ${paths.opencodeConfigPath}`);
59
61
  }
60
- renderPluginTable(plugins);
62
+ const vvocToggles = await loadVvocPluginToggles();
63
+ renderPluginTable(plugins, vvocToggles);
61
64
  // END_BLOCK_RUN_PLUGIN_LIST
62
65
  },
63
66
  });
@@ -104,7 +107,21 @@ export function parsePluginSpecifier(specifier) {
104
107
  }
105
108
  return { name, source, enabled };
106
109
  }
107
- export function renderPluginTable(plugins) {
110
+ export async function loadVvocPluginToggles() {
111
+ try {
112
+ const configPath = getGlobalVvocConfigPath();
113
+ const content = await readFile(configPath, "utf8");
114
+ const parsed = JSON.parse(content);
115
+ if (typeof parsed.plugins !== "object" || parsed.plugins === null) {
116
+ return null;
117
+ }
118
+ return parsed.plugins;
119
+ }
120
+ catch {
121
+ return null;
122
+ }
123
+ }
124
+ export function renderPluginTable(plugins, vvocToggles = null) {
108
125
  if (plugins.length === 0) {
109
126
  console.log("No plugins configured.");
110
127
  return;
@@ -122,5 +139,23 @@ export function renderPluginTable(plugins) {
122
139
  const status = plugin.enabled ? "enabled" : "disabled";
123
140
  console.log(` ${plugin.name.padEnd(nameWidth)} ${plugin.source.padEnd(sourceWidth)} ${status}`);
124
141
  }
142
+ // Render VVoc plugin toggles section
143
+ if (vvocToggles !== null) {
144
+ console.log();
145
+ console.log("VVoc Plugin Toggles:");
146
+ const toggleNameCol = "Plugin";
147
+ const toggleStatusCol = "Status";
148
+ const toggleNameWidth = Math.max(toggleNameCol.length, ...(Object.keys(vvocToggles).length > 0
149
+ ? Object.keys(vvocToggles).map((n) => n.length)
150
+ : [0]));
151
+ const toggleHeader = ` ${toggleNameCol.padEnd(toggleNameWidth)} ${toggleStatusCol}`;
152
+ const toggleSep = ` ${"-".repeat(toggleNameWidth)} ${"-".repeat(9)}`;
153
+ console.log(toggleHeader);
154
+ console.log(toggleSep);
155
+ for (const [pluginName, enabled] of Object.entries(vvocToggles)) {
156
+ const statusText = enabled ? "enabled" : "disabled";
157
+ console.log(` ${pluginName.padEnd(toggleNameWidth)} ${statusText}`);
158
+ }
159
+ }
125
160
  }
126
161
  //# sourceMappingURL=plugin-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-list.js","sourceRoot":"","sources":["../../src/commands/plugin-list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-list.js","sourceRoot":"","sources":["../../src/commands/plugin-list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export declare const enableCommand: import("citty").CommandDef<{
2
+ readonly plugin: {
3
+ readonly type: "positional";
4
+ readonly description: "Plugin name to enable (e.g. secrets-redaction, hashline-edit).";
5
+ readonly required: true;
6
+ };
7
+ readonly scope: {
8
+ readonly type: "enum";
9
+ readonly options: ["global", "project"];
10
+ readonly default: "global";
11
+ readonly description: "Config scope.";
12
+ };
13
+ readonly "config-dir": {
14
+ readonly type: "string";
15
+ readonly description: "Override the global config home.";
16
+ };
17
+ }>;
18
+ export declare const disableCommand: import("citty").CommandDef<{
19
+ readonly plugin: {
20
+ readonly type: "positional";
21
+ readonly description: "Plugin name to disable (e.g. secrets-redaction, hashline-edit).";
22
+ readonly required: true;
23
+ };
24
+ readonly scope: {
25
+ readonly type: "enum";
26
+ readonly options: ["global", "project"];
27
+ readonly default: "global";
28
+ readonly description: "Config scope.";
29
+ };
30
+ readonly "config-dir": {
31
+ readonly type: "string";
32
+ readonly description: "Override the global config home.";
33
+ };
34
+ }>;
@@ -0,0 +1,134 @@
1
+ // FILE: src/commands/plugin-toggle.ts
2
+ // VERSION: 1.0.0
3
+ // START_MODULE_CONTRACT
4
+ // PURPOSE: Provide `vvoc plugin enable <name>` and `vvoc plugin disable <name>` subcommands that mutate the `plugins` section in canonical vvoc.json.
5
+ // SCOPE: Plugin name validation, vvoc.json read/write, and CLI output.
6
+ // DEPENDS: [citty, node:fs/promises, src/lib/opencode.js, src/lib/plugin-toggle-config.js]
7
+ // LINKS: [M-CLI-PLUGIN-TOGGLE, M-CLI-CONFIG, M-PLUGIN-TOGGLE-CONFIG]
8
+ // ROLE: RUNTIME
9
+ // MAP_MODE: EXPORTS
10
+ // END_MODULE_CONTRACT
11
+ //
12
+ // START_MODULE_MAP
13
+ // enableCommand - Enable plugin subcommand definition.
14
+ // disableCommand - Disable plugin subcommand definition.
15
+ // togglePlugin - Core logic to set a plugin toggle value.
16
+ // END_MODULE_MAP
17
+ //
18
+ // START_CHANGE_SUMMARY
19
+ // LAST_CHANGE: [v1.0.0 - Initial implementation for runtime plugin enable/disable.]
20
+ // END_CHANGE_SUMMARY
21
+ import { defineCommand } from "citty";
22
+ import { readFile, writeFile } from "node:fs/promises";
23
+ import { resolvePaths } from "../lib/opencode.js";
24
+ import { PLUGIN_TOGGLE_NAMES } from "../lib/plugin-toggle-config.js";
25
+ // START_BLOCK_TOGGLE_PLUGIN
26
+ async function togglePlugin(pluginName, enabled, scope, cwd, configDir) {
27
+ const paths = await resolvePaths({ scope, cwd, configDir });
28
+ // Read current vvoc.json
29
+ let content;
30
+ try {
31
+ content = await readFile(paths.vvocConfigPath, "utf8");
32
+ }
33
+ catch {
34
+ throw new Error(`Cannot read vvoc config at ${paths.vvocConfigPath}`);
35
+ }
36
+ const config = JSON.parse(content);
37
+ // Ensure plugins section exists
38
+ if (typeof config.plugins !== "object" || config.plugins === null) {
39
+ config.plugins = {};
40
+ }
41
+ const plugins = config.plugins;
42
+ plugins[pluginName] = enabled;
43
+ await writeFile(paths.vvocConfigPath, JSON.stringify(config, null, 2) + "\n", "utf8");
44
+ const state = enabled ? "enabled" : "disabled";
45
+ return `Plugin "${pluginName}" ${state}. Restart the session to apply.`;
46
+ }
47
+ // END_BLOCK_TOGGLE_PLUGIN
48
+ // START_BLOCK_ENABLE_COMMAND
49
+ export const enableCommand = defineCommand({
50
+ meta: {
51
+ name: "enable",
52
+ description: "Enable a vvoc-managed plugin.",
53
+ },
54
+ args: {
55
+ plugin: {
56
+ type: "positional",
57
+ description: "Plugin name to enable (e.g. secrets-redaction, hashline-edit).",
58
+ required: true,
59
+ },
60
+ scope: {
61
+ type: "enum",
62
+ options: ["global", "project"],
63
+ default: "global",
64
+ description: "Config scope.",
65
+ },
66
+ "config-dir": {
67
+ type: "string",
68
+ description: "Override the global config home.",
69
+ },
70
+ },
71
+ async run({ args }) {
72
+ const pluginName = args.plugin;
73
+ const scope = (args.scope === "project" ? "project" : "global");
74
+ const configDir = typeof args["config-dir"] === "string" ? args["config-dir"] : undefined;
75
+ const cwd = process.cwd();
76
+ if (!PLUGIN_TOGGLE_NAMES.includes(pluginName)) {
77
+ console.error(`Unknown plugin "${pluginName}". Available plugins: ${PLUGIN_TOGGLE_NAMES.join(", ")}`);
78
+ process.exit(1);
79
+ }
80
+ try {
81
+ const message = await togglePlugin(pluginName, true, scope, cwd, configDir);
82
+ console.log(message);
83
+ }
84
+ catch (error) {
85
+ console.error(error instanceof Error ? error.message : String(error));
86
+ process.exit(1);
87
+ }
88
+ },
89
+ });
90
+ // END_BLOCK_ENABLE_COMMAND
91
+ // START_BLOCK_DISABLE_COMMAND
92
+ export const disableCommand = defineCommand({
93
+ meta: {
94
+ name: "disable",
95
+ description: "Disable a vvoc-managed plugin until re-enabled.",
96
+ },
97
+ args: {
98
+ plugin: {
99
+ type: "positional",
100
+ description: "Plugin name to disable (e.g. secrets-redaction, hashline-edit).",
101
+ required: true,
102
+ },
103
+ scope: {
104
+ type: "enum",
105
+ options: ["global", "project"],
106
+ default: "global",
107
+ description: "Config scope.",
108
+ },
109
+ "config-dir": {
110
+ type: "string",
111
+ description: "Override the global config home.",
112
+ },
113
+ },
114
+ async run({ args }) {
115
+ const pluginName = args.plugin;
116
+ const scope = (args.scope === "project" ? "project" : "global");
117
+ const configDir = typeof args["config-dir"] === "string" ? args["config-dir"] : undefined;
118
+ const cwd = process.cwd();
119
+ if (!PLUGIN_TOGGLE_NAMES.includes(pluginName)) {
120
+ console.error(`Unknown plugin "${pluginName}". Available plugins: ${PLUGIN_TOGGLE_NAMES.join(", ")}`);
121
+ process.exit(1);
122
+ }
123
+ try {
124
+ const message = await togglePlugin(pluginName, false, scope, cwd, configDir);
125
+ console.log(message);
126
+ }
127
+ catch (error) {
128
+ console.error(error instanceof Error ? error.message : String(error));
129
+ process.exit(1);
130
+ }
131
+ },
132
+ });
133
+ // END_BLOCK_DISABLE_COMMAND
134
+ //# sourceMappingURL=plugin-toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-toggle.js","sourceRoot":"","sources":["../../src/commands/plugin-toggle.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@
18
18
  // END_CHANGE_SUMMARY
19
19
  import { defineCommand } from "citty";
20
20
  import listCommand from "./plugin-list.js";
21
+ import { enableCommand, disableCommand } from "./plugin-toggle.js";
21
22
  export default defineCommand({
22
23
  meta: {
23
24
  name: "plugin",
@@ -25,6 +26,8 @@ export default defineCommand({
25
26
  },
26
27
  subCommands: {
27
28
  list: listCommand,
29
+ enable: enableCommand,
30
+ disable: disableCommand,
28
31
  },
29
32
  });
30
33
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,iBAAiB;AACjB,wBAAwB;AACxB,2FAA2F;AAC3F,4DAA4D;AAC5D,kDAAkD;AAClD,+CAA+C;AAC/C,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,iEAAiE;AACjE,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,oFAAoF;AACpF,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAE3C,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,6BAA6B;KAC3C;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;KAClB;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,iBAAiB;AACjB,wBAAwB;AACxB,2FAA2F;AAC3F,4DAA4D;AAC5D,kDAAkD;AAClD,+CAA+C;AAC/C,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,iEAAiE;AACjE,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,oFAAoF;AACpF,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEnE,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,6BAA6B;KAC3C;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,cAAc;KACxB;CACF,CAAC,CAAC"}
@@ -53,7 +53,7 @@ export default defineCommand({
53
53
  console.log(`vvoc config exists: ${inspection.vvoc.exists ? "yes" : "no"}`);
54
54
  console.log(`vvoc config version: ${inspection.vvoc.version ?? "missing"}`);
55
55
  console.log(`Guardian model: ${inspection.guardian.config ? (inspection.guardian.config.model ?? "default") : "unknown"}`);
56
- console.log(`Secrets Redaction enabled: ${inspection.secretsRedaction.config ? (inspection.secretsRedaction.config.enabled ? "yes" : "no") : "unknown"}`);
56
+ console.log(`Secrets Redaction config: ${inspection.secretsRedaction.config ? "present" : "unknown"}`);
57
57
  console.log("Roles:");
58
58
  if (inspection.roles.assignments.length === 0) {
59
59
  console.log(" <none>");
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const PLUGIN_TOGGLE_NAMES: readonly ["guardian", "hashline-edit", "model-roles", "system-context-injection", "workflow", "secrets-redaction"];
2
+ export type VvocPluginToggleConfig = Record<string, boolean>;
3
+ export declare function createDefaultPluginToggleConfig(): VvocPluginToggleConfig;
4
+ export declare function isPluginEnabled(pluginName: string): Promise<boolean>;
@@ -0,0 +1,76 @@
1
+ // FILE: src/lib/plugin-toggle-config.ts
2
+ // VERSION: 1.0.0
3
+ // START_MODULE_CONTRACT
4
+ // PURPOSE: Define the canonical plugin toggle names, default-all-true values, a shared VvocPluginToggleConfig type, and the isPluginEnabled() helper that each plugin factory calls at load time.
5
+ // SCOPE: Plugin name constants, default config builder, runtime toggle check from vvoc.json, and the toggle config type.
6
+ // DEPENDS: [node:fs/promises, src/lib/vvoc-paths.js]
7
+ // LINKS: [M-PLUGIN-TOGGLE-CONFIG, M-CLI-CONFIG]
8
+ // ROLE: RUNTIME
9
+ // MAP_MODE: EXPORTS
10
+ // END_MODULE_CONTRACT
11
+ //
12
+ // START_MODULE_MAP
13
+ // PLUGIN_TOGGLE_NAMES - Canonical list of vvoc-managed plugin names.
14
+ // VvocPluginToggleConfig - Type alias for Record<string, boolean>.
15
+ // createDefaultPluginToggleConfig - Returns a Record with all known plugins set to true.
16
+ // isPluginEnabled - Read canonical vvoc.json and return whether the named plugin is enabled.
17
+ // END_MODULE_MAP
18
+ //
19
+ // START_CHANGE_SUMMARY
20
+ // LAST_CHANGE: [v1.0.0 - Initial implementation for runtime plugin toggle.]
21
+ // END_CHANGE_SUMMARY
22
+ import { readFile } from "node:fs/promises";
23
+ import { getGlobalVvocConfigPath } from "./vvoc-paths.js";
24
+ // START_BLOCK_CONSTANTS
25
+ export const PLUGIN_TOGGLE_NAMES = [
26
+ "guardian",
27
+ "hashline-edit",
28
+ "model-roles",
29
+ "system-context-injection",
30
+ "workflow",
31
+ "secrets-redaction",
32
+ ];
33
+ // END_BLOCK_CONSTANTS
34
+ // START_BLOCK_DEFAULT_CONFIG
35
+ export function createDefaultPluginToggleConfig() {
36
+ const config = {};
37
+ for (const name of PLUGIN_TOGGLE_NAMES) {
38
+ config[name] = true;
39
+ }
40
+ return config;
41
+ }
42
+ // END_BLOCK_DEFAULT_CONFIG
43
+ // START_BLOCK_IS_PLUGIN_ENABLED
44
+ // START_CONTRACT: isPluginEnabled
45
+ // PURPOSE: Read canonical vvoc.json and return whether the named plugin is enabled.
46
+ // INPUTS: { pluginName: string - one of PLUGIN_TOGGLE_NAMES }
47
+ // OUTPUTS: { boolean - true if the plugin is enabled or the plugins section is absent, false if explicitly disabled }
48
+ // SIDE_EFFECTS: Reads vvoc.json from the canonical global config path on each call.
49
+ // LINKS: getGlobalVvocConfigPath
50
+ // END_CONTRACT: isPluginEnabled
51
+ export async function isPluginEnabled(pluginName) {
52
+ // START_BLOCK_VALIDATE_INPUT
53
+ // END_BLOCK_VALIDATE_INPUT
54
+ try {
55
+ const configPath = getGlobalVvocConfigPath();
56
+ const content = await readFile(configPath, "utf8");
57
+ const parsed = JSON.parse(content);
58
+ // If the plugins section is absent, default to enabled (backward compatibility)
59
+ const plugins = parsed.plugins;
60
+ if (typeof plugins !== "object" || plugins === null) {
61
+ return true;
62
+ }
63
+ const pluginValue = plugins[pluginName];
64
+ // If the specific plugin is not listed, default to enabled
65
+ if (typeof pluginValue !== "boolean") {
66
+ return true;
67
+ }
68
+ return pluginValue;
69
+ }
70
+ catch {
71
+ // If config cannot be read or parsed, default to enabled
72
+ return true;
73
+ }
74
+ }
75
+ // END_BLOCK_IS_PLUGIN_ENABLED
76
+ //# sourceMappingURL=plugin-toggle-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-toggle-config.js","sourceRoot":"","sources":["../../src/lib/plugin-toggle-config.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,iBAAiB;AACjB,wBAAwB;AACxB,oMAAoM;AACpM,2HAA2H;AAC3H,uDAAuD;AACvD,kDAAkD;AAClD,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,uEAAuE;AACvE,qEAAqE;AACrE,2FAA2F;AAC3F,+FAA+F;AAC/F,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,8EAA8E;AAC9E,qBAAqB;AAErB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,wBAAwB;AACxB,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,UAAU;IACV,eAAe;IACf,aAAa;IACb,0BAA0B;IAC1B,UAAU;IACV,mBAAmB;CACX,CAAC;AAGX,sBAAsB;AAEtB,6BAA6B;AAC7B,MAAM,UAAU,+BAA+B;IAC7C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,2BAA2B;AAE3B,gCAAgC;AAChC,kCAAkC;AAClC,sFAAsF;AACtF,gEAAgE;AAChE,wHAAwH;AACxH,sFAAsF;AACtF,mCAAmC;AACnC,gCAAgC;AAChC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB;IACtD,6BAA6B;IAC7B,2BAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,uBAAuB,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAE9D,gFAAgF;QAChF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAI,OAAmC,CAAC,UAAU,CAAC,CAAC;QACrE,2DAA2D;QAC3D,IAAI,OAAO,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AACD,8BAA8B"}
@@ -1,3 +1,4 @@
1
+ import { type VvocPluginToggleConfig } from "./plugin-toggle-config.js";
1
2
  export declare const VVOC_CONFIG_VERSION = 3;
2
3
  export declare const VVOC_CONFIG_SCHEMA_URL: string;
3
4
  type VvocConfigVersion = 3;
@@ -24,7 +25,6 @@ export type SecretsRedactionRegexRule = {
24
25
  category: string;
25
26
  };
26
27
  export type SecretsRedactionConfig = {
27
- enabled: boolean;
28
28
  secret: string;
29
29
  ttlMs: number;
30
30
  maxMappings: number;
@@ -43,6 +43,7 @@ export type VvocConfig = {
43
43
  guardian: GuardianConfig;
44
44
  secretsRedaction: SecretsRedactionConfig;
45
45
  presets: VvocPresets;
46
+ plugins: VvocPluginToggleConfig;
46
47
  };
47
48
  export type ParsedVvocConfig = {
48
49
  sourceSchema: string;
@@ -108,9 +109,6 @@ export declare const VVOC_CONFIG_SCHEMA: {
108
109
  additionalProperties: boolean;
109
110
  required: string[];
110
111
  properties: {
111
- enabled: {
112
- type: string;
113
- };
114
112
  secret: {
115
113
  type: string;
116
114
  minLength: number;
@@ -214,6 +212,15 @@ export declare const VVOC_CONFIG_SCHEMA: {
214
212
  };
215
213
  };
216
214
  };
215
+ plugins: {
216
+ type: string;
217
+ propertyNames: {
218
+ minLength: number;
219
+ };
220
+ additionalProperties: {
221
+ type: string;
222
+ };
223
+ };
217
224
  };
218
225
  };
219
226
  export declare function createGuardianConfig(overrides?: GuardianConfigOverrides): GuardianConfig;
@@ -49,6 +49,7 @@ import { Ajv2020 } from "ajv/dist/2020.js";
49
49
  import { BUILTIN_ROLE_NAMES, parseModelSelection } from "./model-roles.js";
50
50
  import { PACKAGE_NAME, PACKAGE_VERSION } from "./package.js";
51
51
  import { BUILTIN_VVOC_PRESET_REGISTRY, isBuiltinVvocPresetName as isManagedBuiltinVvocPresetName, } from "./vvoc-preset-registry.js";
52
+ import { createDefaultPluginToggleConfig, } from "./plugin-toggle-config.js";
52
53
  const DEFAULT_GUARDIAN_TIMEOUT_MS = 90_000;
53
54
  const DEFAULT_GUARDIAN_APPROVAL_RISK_THRESHOLD = 80;
54
55
  const DEFAULT_SECRETS_REDACTION_TTL_MS = 3_600_000;
@@ -85,9 +86,8 @@ const GUARDIAN_CONFIG_SCHEMA = {
85
86
  const SECRETS_REDACTION_CONFIG_SCHEMA = {
86
87
  type: "object",
87
88
  additionalProperties: false,
88
- required: ["enabled", "secret", "ttlMs", "maxMappings", "patterns", "debug"],
89
+ required: ["secret", "ttlMs", "maxMappings", "patterns", "debug"],
89
90
  properties: {
90
- enabled: { type: "boolean" },
91
91
  secret: { type: "string", minLength: 1 },
92
92
  ttlMs: { type: "integer", minimum: 0 },
93
93
  maxMappings: { type: "integer", minimum: 1 },
@@ -179,6 +179,11 @@ export const VVOC_CONFIG_SCHEMA = {
179
179
  propertyNames: { minLength: 1 },
180
180
  additionalProperties: VVOC_PRESET_SCHEMA,
181
181
  },
182
+ plugins: {
183
+ type: "object",
184
+ propertyNames: { minLength: 1 },
185
+ additionalProperties: { type: "boolean" },
186
+ },
182
187
  },
183
188
  };
184
189
  const ajv = new Ajv2020({ allErrors: true, strict: false });
@@ -195,7 +200,6 @@ export function createGuardianConfig(overrides = {}) {
195
200
  }
196
201
  export function createDefaultSecretsRedactionConfig() {
197
202
  return {
198
- enabled: true,
199
203
  secret: "${VVOC_SECRET}",
200
204
  ttlMs: DEFAULT_SECRETS_REDACTION_TTL_MS,
201
205
  maxMappings: DEFAULT_SECRETS_REDACTION_MAX_MAPPINGS,
@@ -242,6 +246,7 @@ export function createDefaultVvocConfig() {
242
246
  guardian: createGuardianConfig(),
243
247
  secretsRedaction: createDefaultSecretsRedactionConfig(),
244
248
  presets: createDefaultVvocPresets(),
249
+ plugins: createDefaultPluginToggleConfig(),
245
250
  };
246
251
  }
247
252
  // END_BLOCK_DEFAULT_CONFIG_BUILDERS
@@ -304,6 +309,7 @@ export function loadLenientVvocConfigText(text, label, warnings) {
304
309
  guardian: loadLenientGuardianConfig(value.guardian, `${label}: guardian`, warnings),
305
310
  secretsRedaction: loadLenientSecretsRedactionConfig(value.secretsRedaction, `${label}: secretsRedaction`, warnings),
306
311
  presets: loadLenientVvocPresets(value.presets, `${label}: presets`, warnings),
312
+ plugins: loadLenientPluginToggleConfig(value.plugins, `${label}: plugins`, warnings),
307
313
  };
308
314
  }
309
315
  export function renderVvocConfig(config = createDefaultVvocConfig()) {
@@ -314,6 +320,7 @@ export function renderVvocConfig(config = createDefaultVvocConfig()) {
314
320
  guardian: createGuardianConfig(config.guardian),
315
321
  secretsRedaction: createSecretsRedactionConfig(config.secretsRedaction),
316
322
  presets: createVvocPresets(config.presets),
323
+ plugins: config.plugins,
317
324
  });
318
325
  }
319
326
  // END_BLOCK_CANONICAL_CONFIG_PARSE_RENDER
@@ -340,6 +347,7 @@ function normalizeStrictVvocConfig(value) {
340
347
  guardian: createGuardianConfig(value.guardian),
341
348
  secretsRedaction: createSecretsRedactionConfig(value.secretsRedaction),
342
349
  presets: createVvocPresets(value.presets),
350
+ plugins: createDefaultPluginToggleConfig(),
343
351
  },
344
352
  };
345
353
  }
@@ -347,7 +355,6 @@ function createSecretsRedactionConfig(overrides = {}) {
347
355
  const defaults = createDefaultSecretsRedactionConfig();
348
356
  const patterns = overrides.patterns ?? {};
349
357
  return {
350
- enabled: overrides.enabled ?? defaults.enabled,
351
358
  secret: normalizeOptionalString(overrides.secret) ?? defaults.secret,
352
359
  ttlMs: overrides.ttlMs ?? defaults.ttlMs,
353
360
  maxMappings: overrides.maxMappings ?? defaults.maxMappings,
@@ -439,14 +446,6 @@ function loadLenientSecretsRedactionConfig(value, label, warnings) {
439
446
  }
440
447
  const defaults = createDefaultSecretsRedactionConfig();
441
448
  const config = createDefaultSecretsRedactionConfig();
442
- if (Object.hasOwn(value, "enabled")) {
443
- if (typeof value.enabled === "boolean") {
444
- config.enabled = value.enabled;
445
- }
446
- else {
447
- warnings.push(`${label}.enabled: expected a boolean`);
448
- }
449
- }
450
449
  if (Object.hasOwn(value, "secret")) {
451
450
  const secret = readLenientOptionalString(value.secret, `${label}.secret`, warnings);
452
451
  if (secret !== undefined) {
@@ -584,6 +583,19 @@ function loadLenientVvocPresets(value, label, warnings) {
584
583
  }
585
584
  return createVvocPresets(presets);
586
585
  }
586
+ function loadLenientPluginToggleConfig(value, label, warnings) {
587
+ if (!isPlainObject(value)) {
588
+ warnings.push(`${label}: expected an object`);
589
+ return createDefaultPluginToggleConfig();
590
+ }
591
+ const config = createDefaultPluginToggleConfig();
592
+ for (const [pluginName, pluginValue] of Object.entries(value)) {
593
+ if (typeof pluginValue === "boolean") {
594
+ config[pluginName] = pluginValue;
595
+ }
596
+ }
597
+ return config;
598
+ }
587
599
  function loadLenientVvocPresetAgents(value, label, warnings) {
588
600
  if (!isPlainObject(value)) {
589
601
  warnings.push(`${label}: expected an object`);