@osovv/vv-opencode 0.35.19 → 0.35.21
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.
- package/CHANGELOG.md +20 -0
- package/README.md +67 -24
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/completion.js +2 -0
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/config-validate.d.ts +8 -1
- package/dist/commands/config-validate.js +31 -8
- package/dist/commands/config-validate.js.map +1 -1
- package/dist/commands/doctor.d.ts +3 -3
- package/dist/commands/doctor.js +14 -13
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.js +10 -12
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.js +6 -6
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/launch.d.ts +35 -0
- package/dist/commands/launch.js +123 -0
- package/dist/commands/launch.js.map +1 -0
- package/dist/commands/patch-provider.d.ts +8 -0
- package/dist/commands/patch-provider.js +13 -4
- package/dist/commands/patch-provider.js.map +1 -1
- package/dist/commands/plugin-list.d.ts +6 -6
- package/dist/commands/plugin-list.js +30 -24
- package/dist/commands/plugin-list.js.map +1 -1
- package/dist/commands/plugin-toggle.js +5 -3
- package/dist/commands/plugin-toggle.js.map +1 -1
- package/dist/commands/preset.d.ts +7 -0
- package/dist/commands/preset.js +37 -9
- package/dist/commands/preset.js.map +1 -1
- package/dist/commands/role.d.ts +3 -0
- package/dist/commands/role.js +45 -11
- package/dist/commands/role.js.map +1 -1
- package/dist/commands/status.d.ts +3 -3
- package/dist/commands/status.js +14 -13
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.js +6 -7
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/upgrade.js +4 -3
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/lib/config-layers.d.ts +56 -0
- package/dist/lib/config-layers.js +256 -0
- package/dist/lib/config-layers.js.map +1 -0
- package/dist/lib/opencode.d.ts +13 -5
- package/dist/lib/opencode.js +105 -39
- package/dist/lib/opencode.js.map +1 -1
- package/dist/lib/plugin-toggle-config.d.ts +5 -1
- package/dist/lib/plugin-toggle-config.js +20 -33
- package/dist/lib/plugin-toggle-config.js.map +1 -1
- package/dist/lib/vvoc-config.js +14 -1
- package/dist/lib/vvoc-config.js.map +1 -1
- package/dist/lib/vvoc-paths.d.ts +2 -2
- package/dist/lib/vvoc-paths.js +12 -9
- package/dist/lib/vvoc-paths.js.map +1 -1
- package/dist/plugins/guardian/index.js +30 -37
- package/dist/plugins/guardian/index.js.map +1 -1
- package/dist/plugins/model-roles/index.js +11 -27
- package/dist/plugins/model-roles/index.js.map +1 -1
- package/dist/plugins/secrets-redaction/config.d.ts +1 -1
- package/dist/plugins/secrets-redaction/config.js +28 -39
- package/dist/plugins/secrets-redaction/config.js.map +1 -1
- package/dist/plugins/system-context-injection/index.js +19 -7
- package/dist/plugins/system-context-injection/index.js.map +1 -1
- package/package.json +1 -1
- package/schemas/vvoc/v3.json +1 -1
- package/templates/agents/vv-controller.md +9 -8
- package/templates/skills/vv-execute/SKILL.md +8 -8
- package/templates/skills/vv-plan/SKILL.md +11 -6
- package/templates/skills/vv-plan/references/plan-template.xml +1 -0
- package/templates/skills/vv-spec/SKILL.md +29 -3
- package/templates/skills/vv-spec/references/design-context-template.xml +62 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,iBAAiB;AACjB,wBAAwB;AACxB,iSAAiS;AACjS,yMAAyM;AACzM,0DAA0D;AAC1D,sCAAsC;AACtC,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,gDAAgD;AAChD,2CAA2C;AAC3C,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,mFAAmF;AACnF,4HAA4H;AAC5H,4JAA4J;AAC5J,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/install.js
CHANGED
|
@@ -14,12 +14,13 @@
|
|
|
14
14
|
// END_MODULE_MAP
|
|
15
15
|
//
|
|
16
16
|
// START_CHANGE_SUMMARY
|
|
17
|
+
// LAST_CHANGE: [v0.6.0 - Skipped global managed skill symlink creation for project-scope installs.]
|
|
17
18
|
// LAST_CHANGE: [v0.5.0 - Added managed skill file install during vvoc install.]
|
|
18
19
|
// LAST_CHANGE: [v0.4.0 - Ensured the project-local managed planning artifact directory exists during project-scope install.]
|
|
19
20
|
// LAST_CHANGE: [v0.3.0 - Replaced per-feature vvoc config scaffolding with canonical vvoc.json creation.]
|
|
20
21
|
// END_CHANGE_SUMMARY
|
|
21
22
|
import { defineCommand } from "citty";
|
|
22
|
-
import { describeWriteResult,
|
|
23
|
+
import { describeWriteResult, ensureManagedSkillSymlink, ensurePackageInstalled, installManagedAgentPrompts, installVvocConfig, installManagedSkillFiles, resolvePaths, syncManagedAgentRegistrations, } from "../lib/opencode.js";
|
|
23
24
|
export default defineCommand({
|
|
24
25
|
meta: {
|
|
25
26
|
name: "install",
|
|
@@ -64,13 +65,12 @@ export default defineCommand({
|
|
|
64
65
|
})) {
|
|
65
66
|
console.log(describeWriteResult(result));
|
|
66
67
|
}
|
|
67
|
-
if (paths.scope === "project") {
|
|
68
|
-
console.log(describeWriteResult(await ensureManagedPlanDirectory(paths)));
|
|
69
|
-
}
|
|
70
68
|
const vvocConfig = await installVvocConfig(paths);
|
|
71
69
|
console.log(describeWriteResult(vvocConfig));
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
if (paths.scope === "global") {
|
|
71
|
+
const symlinkResult = await ensureManagedSkillSymlink(configDir);
|
|
72
|
+
console.log(describeWriteResult(symlinkResult));
|
|
73
|
+
}
|
|
74
74
|
// END_BLOCK_APPLY_INSTALL_COMMAND
|
|
75
75
|
},
|
|
76
76
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,iBAAiB;AACjB,wBAAwB;AACxB,yHAAyH;AACzH,qMAAqM;AACrM,0CAA0C;AAC1C,0CAA0C;AAC1C,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,4FAA4F;AAC5F,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,kFAAkF;AAClF,+HAA+H;AAC/H,4GAA4G;AAC5G,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EACL,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type ConfigSource } from "../lib/config-layers.js";
|
|
2
|
+
export type LaunchScope = "effective" | "project" | "global";
|
|
3
|
+
export type LaunchPlan = {
|
|
4
|
+
command: string[];
|
|
5
|
+
env: Record<string, string>;
|
|
6
|
+
opencodeSource: ConfigSource;
|
|
7
|
+
vvocSource: ConfigSource;
|
|
8
|
+
};
|
|
9
|
+
export declare function buildLaunchPlan(options: {
|
|
10
|
+
scope: LaunchScope;
|
|
11
|
+
cwd: string;
|
|
12
|
+
configDir?: string;
|
|
13
|
+
passthroughArgs: string[];
|
|
14
|
+
env?: NodeJS.ProcessEnv;
|
|
15
|
+
}): Promise<LaunchPlan>;
|
|
16
|
+
export declare function runLaunch(options: {
|
|
17
|
+
scope: LaunchScope;
|
|
18
|
+
cwd: string;
|
|
19
|
+
configDir?: string;
|
|
20
|
+
passthroughArgs: string[];
|
|
21
|
+
spawn?: (plan: LaunchPlan) => Promise<number>;
|
|
22
|
+
}): Promise<number>;
|
|
23
|
+
declare const _default: import("citty").CommandDef<{
|
|
24
|
+
readonly scope: {
|
|
25
|
+
type: "enum";
|
|
26
|
+
options: string[];
|
|
27
|
+
default: string;
|
|
28
|
+
description: string;
|
|
29
|
+
};
|
|
30
|
+
readonly "config-dir": {
|
|
31
|
+
readonly type: "string";
|
|
32
|
+
readonly description: "Override the global config home used for opencode/ and vvoc/.";
|
|
33
|
+
};
|
|
34
|
+
}>;
|
|
35
|
+
export default _default;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// FILE: src/commands/launch.ts
|
|
2
|
+
// VERSION: 1.0.0
|
|
3
|
+
// START_MODULE_CONTRACT
|
|
4
|
+
// PURPOSE: Launch OpenCode with deterministic vvoc and OpenCode config layer environment variables.
|
|
5
|
+
// SCOPE: Scope parsing, config source selection, subprocess env construction, arg forwarding, stdio forwarding, and exit-code preservation.
|
|
6
|
+
// DEPENDS: [citty, src/lib/config-layers.ts]
|
|
7
|
+
// LINKS: [M-CLI-COMMANDS]
|
|
8
|
+
// ROLE: RUNTIME
|
|
9
|
+
// MAP_MODE: EXPORTS
|
|
10
|
+
// END_MODULE_CONTRACT
|
|
11
|
+
//
|
|
12
|
+
// START_MODULE_MAP
|
|
13
|
+
// LaunchScope - Supported launch source selection scopes.
|
|
14
|
+
// LaunchPlan - Testable OpenCode command and environment plan.
|
|
15
|
+
// buildLaunchPlan - Builds the opencode command and env overrides without spawning.
|
|
16
|
+
// runLaunch - Runs opencode from a launch plan and returns its exit code.
|
|
17
|
+
// default - Launch command definition for vvoc.
|
|
18
|
+
// END_MODULE_MAP
|
|
19
|
+
//
|
|
20
|
+
// START_CHANGE_SUMMARY
|
|
21
|
+
// LAST_CHANGE: [v1.0.0 - Added deterministic OpenCode launch planning and subprocess execution.]
|
|
22
|
+
// END_CHANGE_SUMMARY
|
|
23
|
+
import { defineCommand } from "citty";
|
|
24
|
+
import { OPENCODE_CONFIG_ENV, VVOC_CONFIG_ENV, resolveOpenCodeConfigSource, resolveVvocConfigSource, } from "../lib/config-layers.js";
|
|
25
|
+
const launchScopeArg = {
|
|
26
|
+
type: "enum",
|
|
27
|
+
options: ["effective", "project", "global"],
|
|
28
|
+
default: "effective",
|
|
29
|
+
description: "Launch with effective, project-local, or global config paths.",
|
|
30
|
+
};
|
|
31
|
+
export async function buildLaunchPlan(options) {
|
|
32
|
+
const [opencodeSource, vvocSource] = await Promise.all([
|
|
33
|
+
resolveOpenCodeConfigSource({
|
|
34
|
+
scope: options.scope,
|
|
35
|
+
cwd: options.cwd,
|
|
36
|
+
configDir: options.configDir,
|
|
37
|
+
env: options.env,
|
|
38
|
+
}),
|
|
39
|
+
resolveVvocConfigSource({
|
|
40
|
+
scope: options.scope,
|
|
41
|
+
cwd: options.cwd,
|
|
42
|
+
configDir: options.configDir,
|
|
43
|
+
env: options.env,
|
|
44
|
+
allowDefault: false,
|
|
45
|
+
}),
|
|
46
|
+
]);
|
|
47
|
+
if (options.scope === "project") {
|
|
48
|
+
const missing = [opencodeSource, vvocSource].find((source) => source.kind === "missing");
|
|
49
|
+
if (missing) {
|
|
50
|
+
throw new Error(missing.reason ?? "project config missing; run vvoc install --scope project");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (!opencodeSource.path) {
|
|
54
|
+
throw new Error("OpenCode config source has no path; run vvoc install --scope project or vvoc install");
|
|
55
|
+
}
|
|
56
|
+
if (!vvocSource.path) {
|
|
57
|
+
throw new Error("vvoc config source has no path; run vvoc install --scope project or vvoc install");
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
command: ["opencode", ...options.passthroughArgs],
|
|
61
|
+
env: {
|
|
62
|
+
[OPENCODE_CONFIG_ENV]: opencodeSource.path,
|
|
63
|
+
[VVOC_CONFIG_ENV]: vvocSource.path,
|
|
64
|
+
},
|
|
65
|
+
opencodeSource,
|
|
66
|
+
vvocSource,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export async function runLaunch(options) {
|
|
70
|
+
const plan = await buildLaunchPlan(options);
|
|
71
|
+
if (options.spawn) {
|
|
72
|
+
return options.spawn(plan);
|
|
73
|
+
}
|
|
74
|
+
const subprocess = Bun.spawn({
|
|
75
|
+
cmd: plan.command,
|
|
76
|
+
cwd: options.cwd,
|
|
77
|
+
env: { ...process.env, ...plan.env },
|
|
78
|
+
stdin: "inherit",
|
|
79
|
+
stdout: "inherit",
|
|
80
|
+
stderr: "inherit",
|
|
81
|
+
});
|
|
82
|
+
return subprocess.exited;
|
|
83
|
+
}
|
|
84
|
+
export default defineCommand({
|
|
85
|
+
meta: {
|
|
86
|
+
name: "launch",
|
|
87
|
+
description: "Launch OpenCode with deterministic vvoc/OpenCode config sources.",
|
|
88
|
+
},
|
|
89
|
+
args: {
|
|
90
|
+
scope: launchScopeArg,
|
|
91
|
+
"config-dir": {
|
|
92
|
+
type: "string",
|
|
93
|
+
description: "Override the global config home used for opencode/ and vvoc/.",
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
async run({ args }) {
|
|
97
|
+
const configDir = typeof args["config-dir"] === "string" ? args["config-dir"] : undefined;
|
|
98
|
+
const passthroughArgs = readPassthroughArgs(args);
|
|
99
|
+
const exitCode = await runLaunch({
|
|
100
|
+
scope: resolveLaunchScope(args.scope),
|
|
101
|
+
cwd: process.cwd(),
|
|
102
|
+
configDir,
|
|
103
|
+
passthroughArgs,
|
|
104
|
+
});
|
|
105
|
+
if (exitCode !== 0) {
|
|
106
|
+
process.exitCode = exitCode;
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
function resolveLaunchScope(value) {
|
|
111
|
+
return value === "project" || value === "global" ? value : "effective";
|
|
112
|
+
}
|
|
113
|
+
function readPassthroughArgs(args) {
|
|
114
|
+
const raw = args._;
|
|
115
|
+
if (Array.isArray(raw)) {
|
|
116
|
+
return raw.filter((entry) => typeof entry === "string");
|
|
117
|
+
}
|
|
118
|
+
if (typeof raw === "string" && raw.trim()) {
|
|
119
|
+
return [raw];
|
|
120
|
+
}
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Scope } from "../lib/opencode.js";
|
|
1
2
|
type ProviderBaseUrlPatchPreset = {
|
|
2
3
|
kind: "provider-base-url";
|
|
3
4
|
providerID: string;
|
|
@@ -90,6 +91,7 @@ export declare function resolvePatchProviderPreset(name: string): PatchPreset;
|
|
|
90
91
|
export declare function applyPatchProviderPreset(presetName: string, options?: {
|
|
91
92
|
cwd?: string;
|
|
92
93
|
configDir?: string;
|
|
94
|
+
scope?: Scope;
|
|
93
95
|
}): Promise<{
|
|
94
96
|
preset: PatchPreset;
|
|
95
97
|
result: import("../lib/opencode.js").WriteResult;
|
|
@@ -100,6 +102,12 @@ declare const _default: import("citty").CommandDef<{
|
|
|
100
102
|
required: boolean;
|
|
101
103
|
description: string;
|
|
102
104
|
};
|
|
105
|
+
readonly scope: {
|
|
106
|
+
type: "enum";
|
|
107
|
+
options: string[];
|
|
108
|
+
default: string;
|
|
109
|
+
description: string;
|
|
110
|
+
};
|
|
103
111
|
readonly "config-dir": {
|
|
104
112
|
type: "string";
|
|
105
113
|
description: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// FILE: src/commands/patch-provider.ts
|
|
2
2
|
// VERSION: 0.4.1
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
|
-
// PURPOSE: Apply global OpenCode
|
|
5
|
-
// SCOPE: Patch preset validation,
|
|
4
|
+
// PURPOSE: Apply OpenCode patch presets to global or project OpenCode config layers.
|
|
5
|
+
// SCOPE: Patch preset validation, scoped OpenCode config path resolution, provider/baseURL patch writes, provider-specific object patch writes under `provider`, and CLI output.
|
|
6
6
|
// DEPENDS: [citty, src/lib/opencode.ts]
|
|
7
7
|
// LINKS: [M-CLI-PATCH-PROVIDER, M-CLI-CONFIG]
|
|
8
8
|
// ROLE: RUNTIME
|
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
// default - PatchProvider command definition for vvoc.
|
|
14
14
|
// resolvePatchProviderPreset - Validate an OpenCode patch preset name and return its config.
|
|
15
15
|
// PatchProviderPresetName - Supported built-in patch-provider preset names.
|
|
16
|
-
// applyPatchProviderPreset - Apply the selected OpenCode patch preset to global OpenCode config.
|
|
16
|
+
// applyPatchProviderPreset - Apply the selected OpenCode patch preset to global or project OpenCode config.
|
|
17
17
|
// END_MODULE_MAP
|
|
18
18
|
//
|
|
19
19
|
// START_CHANGE_SUMMARY
|
|
20
|
+
// LAST_CHANGE: [v0.5.0 - Added --scope global|project provider patch writes.]
|
|
20
21
|
// LAST_CHANGE: [v0.4.3 - Added reasoning:true to vv-gpt-5.4-xhigh and vv-gpt-5.5-xhigh in openai patch preset.]
|
|
21
22
|
// END_CHANGE_SUMMARY
|
|
22
23
|
import { defineCommand } from "citty";
|
|
@@ -107,6 +108,12 @@ const configDirArg = {
|
|
|
107
108
|
type: "string",
|
|
108
109
|
description: "Override the global config home used for opencode/.",
|
|
109
110
|
};
|
|
111
|
+
const writeScopeArg = {
|
|
112
|
+
type: "enum",
|
|
113
|
+
options: ["global", "project"],
|
|
114
|
+
default: "global",
|
|
115
|
+
description: "Write global config or project-local config.",
|
|
116
|
+
};
|
|
110
117
|
// START_BLOCK_PROVIDER_PRESET_RESOLUTION
|
|
111
118
|
export function resolvePatchProviderPreset(name) {
|
|
112
119
|
const presetName = name.trim();
|
|
@@ -119,7 +126,7 @@ export function resolvePatchProviderPreset(name) {
|
|
|
119
126
|
export async function applyPatchProviderPreset(presetName, options = {}) {
|
|
120
127
|
const preset = resolvePatchProviderPreset(presetName);
|
|
121
128
|
const paths = await resolvePaths({
|
|
122
|
-
scope: "global",
|
|
129
|
+
scope: options.scope ?? "global",
|
|
123
130
|
cwd: options.cwd ?? process.cwd(),
|
|
124
131
|
configDir: options.configDir,
|
|
125
132
|
});
|
|
@@ -136,6 +143,7 @@ export default defineCommand({
|
|
|
136
143
|
},
|
|
137
144
|
args: {
|
|
138
145
|
preset: presetArg,
|
|
146
|
+
scope: writeScopeArg,
|
|
139
147
|
"config-dir": configDirArg,
|
|
140
148
|
},
|
|
141
149
|
async run({ args }) {
|
|
@@ -144,6 +152,7 @@ export default defineCommand({
|
|
|
144
152
|
const { preset, result } = await applyPatchProviderPreset(presetName, {
|
|
145
153
|
cwd: process.cwd(),
|
|
146
154
|
configDir,
|
|
155
|
+
scope: args.scope === "project" ? "project" : "global",
|
|
147
156
|
});
|
|
148
157
|
console.log(`${describeWriteResult(result)} (${preset.summary})`);
|
|
149
158
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch-provider.js","sourceRoot":"","sources":["../../src/commands/patch-provider.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,iBAAiB;AACjB,wBAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"patch-provider.js","sourceRoot":"","sources":["../../src/commands/patch-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ConfigReadScope } from "../lib/config-layers.js";
|
|
2
2
|
export type PluginEntry = {
|
|
3
3
|
name: string;
|
|
4
4
|
source: string;
|
|
@@ -7,9 +7,9 @@ export type PluginEntry = {
|
|
|
7
7
|
declare const _default: import("citty").CommandDef<{
|
|
8
8
|
readonly scope: {
|
|
9
9
|
readonly type: "enum";
|
|
10
|
-
readonly options: ["global", "project"];
|
|
11
|
-
readonly default: "
|
|
12
|
-
readonly description: "List plugins from global or
|
|
10
|
+
readonly options: ["global", "project", "effective"];
|
|
11
|
+
readonly default: "effective";
|
|
12
|
+
readonly description: "List plugins from global, project-local, or effective layered config.";
|
|
13
13
|
};
|
|
14
14
|
readonly "config-dir": {
|
|
15
15
|
readonly type: "string";
|
|
@@ -22,7 +22,7 @@ declare const _default: import("citty").CommandDef<{
|
|
|
22
22
|
};
|
|
23
23
|
}>;
|
|
24
24
|
export default _default;
|
|
25
|
-
export declare function listPlugins(scope:
|
|
25
|
+
export declare function listPlugins(scope: ConfigReadScope, cwd: string, configDir?: string): Promise<PluginEntry[]>;
|
|
26
26
|
export declare function parsePluginSpecifier(specifier: string): PluginEntry;
|
|
27
|
-
export declare function loadVvocPluginToggles(): Promise<Record<string, boolean> | null>;
|
|
27
|
+
export declare function loadVvocPluginToggles(scope?: ConfigReadScope, cwd?: string, configDir?: string): Promise<Record<string, boolean> | null>;
|
|
28
28
|
export declare function renderPluginTable(plugins: PluginEntry[], vvocToggles?: Record<string, boolean> | null): void;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// FILE: src/commands/plugin-list.ts
|
|
2
2
|
// VERSION: 0.4.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
|
-
// PURPOSE: Display
|
|
5
|
-
// SCOPE:
|
|
6
|
-
// DEPENDS: [citty,
|
|
4
|
+
// PURPOSE: Display installed OpenCode plugins with their status (enabled/disabled) and selected source paths.
|
|
5
|
+
// SCOPE: Read-scope parsing, plugin array inspection, effective vvoc plugin toggle loading, table rendering, and graceful handling of missing config.
|
|
6
|
+
// DEPENDS: [citty, src/lib/config-layers.ts]
|
|
7
7
|
// LINKS: [M-CLI-PLUGIN-LIST, M-CLI-CONFIG]
|
|
8
8
|
// ROLE: RUNTIME
|
|
9
9
|
// MAP_MODE: EXPORTS
|
|
@@ -15,16 +15,15 @@
|
|
|
15
15
|
// renderPluginTable - Renders a table of plugins with name, source, and enabled status.
|
|
16
16
|
// PluginEntry - Parsed plugin entry information.
|
|
17
17
|
// parsePluginSpecifier - Parse plugin specifier string.
|
|
18
|
-
// loadVvocPluginToggles - Read plugin toggle state from vvoc.
|
|
18
|
+
// loadVvocPluginToggles - Read plugin toggle state from the selected vvoc source.
|
|
19
19
|
// END_MODULE_MAP
|
|
20
20
|
//
|
|
21
21
|
// START_CHANGE_SUMMARY
|
|
22
|
+
// LAST_CHANGE: [v0.5.0 - Added effective/project/global plugin list scopes and source-matched vvoc toggles.]
|
|
22
23
|
// LAST_CHANGE: [v0.4.0 - Initial GRACE implementation for plugin list command.]
|
|
23
24
|
// END_CHANGE_SUMMARY
|
|
24
25
|
import { defineCommand } from "citty";
|
|
25
|
-
import {
|
|
26
|
-
import { readFile } from "node:fs/promises";
|
|
27
|
-
import { getGlobalVvocConfigPath } from "../lib/vvoc-paths.js";
|
|
26
|
+
import { loadVvocConfigForRead, resolveOpenCodeConfigSource, } from "../lib/config-layers.js";
|
|
28
27
|
export default defineCommand({
|
|
29
28
|
meta: {
|
|
30
29
|
name: "list",
|
|
@@ -33,9 +32,9 @@ export default defineCommand({
|
|
|
33
32
|
args: {
|
|
34
33
|
scope: {
|
|
35
34
|
type: "enum",
|
|
36
|
-
options: ["global", "project"],
|
|
37
|
-
default: "
|
|
38
|
-
description: "List plugins from global or
|
|
35
|
+
options: ["global", "project", "effective"],
|
|
36
|
+
default: "effective",
|
|
37
|
+
description: "List plugins from global, project-local, or effective layered config.",
|
|
39
38
|
},
|
|
40
39
|
"config-dir": {
|
|
41
40
|
type: "string",
|
|
@@ -49,26 +48,35 @@ export default defineCommand({
|
|
|
49
48
|
},
|
|
50
49
|
async run({ args }) {
|
|
51
50
|
// START_BLOCK_RUN_PLUGIN_LIST
|
|
52
|
-
const scope = args.scope
|
|
51
|
+
const scope = resolveReadScope(args.scope);
|
|
53
52
|
const configDir = typeof args["config-dir"] === "string" ? args["config-dir"] : undefined;
|
|
54
53
|
const verbose = args.verbose === true;
|
|
55
54
|
const cwd = process.cwd();
|
|
56
|
-
const
|
|
55
|
+
const source = await resolveOpenCodeConfigSource({ scope, cwd, configDir });
|
|
57
56
|
const plugins = await listPlugins(scope, cwd, configDir);
|
|
58
57
|
if (verbose) {
|
|
59
58
|
console.log(`Scope: ${scope}`);
|
|
60
|
-
console.log(`OpenCode
|
|
59
|
+
console.log(`OpenCode source: ${source.kind}${source.path ? ` ${source.path}` : ""}`);
|
|
61
60
|
}
|
|
62
|
-
const vvocToggles = await loadVvocPluginToggles();
|
|
61
|
+
const vvocToggles = await loadVvocPluginToggles(scope, cwd, configDir);
|
|
63
62
|
renderPluginTable(plugins, vvocToggles);
|
|
64
63
|
// END_BLOCK_RUN_PLUGIN_LIST
|
|
65
64
|
},
|
|
66
65
|
});
|
|
67
66
|
export async function listPlugins(scope, cwd, configDir) {
|
|
68
|
-
const
|
|
67
|
+
const source = await resolveOpenCodeConfigSource({ scope, cwd, configDir });
|
|
68
|
+
if (source.kind === "missing") {
|
|
69
|
+
if (scope === "project") {
|
|
70
|
+
throw new Error(source.reason ?? "project OpenCode config missing; run vvoc install --scope project");
|
|
71
|
+
}
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
if (!source.path) {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
69
77
|
try {
|
|
70
78
|
const { readFileSync } = await import("node:fs");
|
|
71
|
-
const content = readFileSync(
|
|
79
|
+
const content = readFileSync(source.path, "utf8");
|
|
72
80
|
const { parse } = await import("jsonc-parser");
|
|
73
81
|
const errors = [];
|
|
74
82
|
const parsed = parse(content, errors, { allowTrailingComma: true, disallowComments: false });
|
|
@@ -107,15 +115,10 @@ export function parsePluginSpecifier(specifier) {
|
|
|
107
115
|
}
|
|
108
116
|
return { name, source, enabled };
|
|
109
117
|
}
|
|
110
|
-
export async function loadVvocPluginToggles() {
|
|
118
|
+
export async function loadVvocPluginToggles(scope = "effective", cwd = process.cwd(), configDir) {
|
|
111
119
|
try {
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
const parsed = JSON.parse(content);
|
|
115
|
-
if (typeof parsed.plugins !== "object" || parsed.plugins === null) {
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
return parsed.plugins;
|
|
120
|
+
const { config } = await loadVvocConfigForRead({ scope, cwd, configDir, allowDefault: true });
|
|
121
|
+
return config.plugins;
|
|
119
122
|
}
|
|
120
123
|
catch {
|
|
121
124
|
return null;
|
|
@@ -158,4 +161,7 @@ export function renderPluginTable(plugins, vvocToggles = null) {
|
|
|
158
161
|
}
|
|
159
162
|
}
|
|
160
163
|
}
|
|
164
|
+
function resolveReadScope(value) {
|
|
165
|
+
return value === "global" || value === "project" ? value : "effective";
|
|
166
|
+
}
|
|
161
167
|
//# sourceMappingURL=plugin-list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-list.js","sourceRoot":"","sources":["../../src/commands/plugin-list.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,iBAAiB;AACjB,wBAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"plugin-list.js","sourceRoot":"","sources":["../../src/commands/plugin-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// FILE: src/commands/plugin-toggle.ts
|
|
2
2
|
// VERSION: 1.0.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
|
-
// PURPOSE: Provide `vvoc plugin enable <name>` and `vvoc plugin disable <name>` subcommands that mutate the `plugins` section in
|
|
5
|
-
// SCOPE: Plugin name validation, vvoc.json read/write, and CLI output.
|
|
4
|
+
// PURPOSE: Provide `vvoc plugin enable <name>` and `vvoc plugin disable <name>` subcommands that mutate the `plugins` section in scoped vvoc.json layers.
|
|
5
|
+
// SCOPE: Plugin name validation, global/project vvoc.json bootstrap, read/write, and CLI output.
|
|
6
6
|
// DEPENDS: [citty, node:fs/promises, src/lib/opencode.js, src/lib/plugin-toggle-config.js]
|
|
7
7
|
// LINKS: [M-CLI-PLUGIN-TOGGLE, M-CLI-CONFIG, M-PLUGIN-TOGGLE-CONFIG]
|
|
8
8
|
// ROLE: RUNTIME
|
|
@@ -15,15 +15,17 @@
|
|
|
15
15
|
// END_MODULE_MAP
|
|
16
16
|
//
|
|
17
17
|
// START_CHANGE_SUMMARY
|
|
18
|
+
// LAST_CHANGE: [v1.1.0 - Added project-scope plugin toggle writes while preserving global defaults.]
|
|
18
19
|
// LAST_CHANGE: [v1.0.0 - Initial implementation for runtime plugin enable/disable.]
|
|
19
20
|
// END_CHANGE_SUMMARY
|
|
20
21
|
import { defineCommand } from "citty";
|
|
21
22
|
import { readFile, writeFile } from "node:fs/promises";
|
|
22
|
-
import { resolvePaths } from "../lib/opencode.js";
|
|
23
|
+
import { resolvePaths, syncVvocConfig } from "../lib/opencode.js";
|
|
23
24
|
import { PLUGIN_TOGGLE_NAMES } from "../lib/plugin-toggle-config.js";
|
|
24
25
|
// START_BLOCK_TOGGLE_PLUGIN
|
|
25
26
|
async function togglePlugin(pluginName, enabled, scope, cwd, configDir) {
|
|
26
27
|
const paths = await resolvePaths({ scope, cwd, configDir });
|
|
28
|
+
await syncVvocConfig(paths);
|
|
27
29
|
// Read current vvoc.json
|
|
28
30
|
let content;
|
|
29
31
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-toggle.js","sourceRoot":"","sources":["../../src/commands/plugin-toggle.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iBAAiB;AACjB,wBAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"plugin-toggle.js","sourceRoot":"","sources":["../../src/commands/plugin-toggle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ConfigWriteScope } from "../lib/config-layers.js";
|
|
1
2
|
import { type VvocPreset, type VvocPresets } from "../lib/vvoc-config.js";
|
|
2
3
|
type ListedPreset = {
|
|
3
4
|
name: string;
|
|
@@ -19,6 +20,11 @@ declare const _default: import("citty").CommandDef<{
|
|
|
19
20
|
required: boolean;
|
|
20
21
|
description: string;
|
|
21
22
|
};
|
|
23
|
+
readonly scope: {
|
|
24
|
+
type: "enum";
|
|
25
|
+
options: string[];
|
|
26
|
+
description: string;
|
|
27
|
+
};
|
|
22
28
|
readonly "config-dir": {
|
|
23
29
|
type: "string";
|
|
24
30
|
description: string;
|
|
@@ -34,6 +40,7 @@ export declare function formatPreset(_name: string, preset: VvocPreset): string;
|
|
|
34
40
|
export declare function applyPreset(presetName: string, options?: {
|
|
35
41
|
cwd?: string;
|
|
36
42
|
configDir?: string;
|
|
43
|
+
scope?: ConfigWriteScope;
|
|
37
44
|
}): Promise<{
|
|
38
45
|
name: string;
|
|
39
46
|
preset: VvocPreset;
|