@osovv/vv-opencode 0.3.3 → 0.5.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.
- package/README.md +2 -2
- package/dist/cli.js +15 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/agent.d.ts +2 -0
- package/dist/commands/agent.js +294 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/completion.d.ts +11 -0
- package/dist/commands/completion.js +117 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config-validate.d.ts +36 -0
- package/dist/commands/config-validate.js +298 -0
- package/dist/commands/config-validate.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.js +30 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +29 -0
- package/dist/commands/init.js +129 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +5 -0
- package/dist/commands/install.js +19 -4
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/plugin-list.d.ts +27 -0
- package/dist/commands/plugin-list.js +123 -0
- package/dist/commands/plugin-list.js.map +1 -0
- package/dist/commands/plugin.d.ts +2 -0
- package/dist/commands/plugin.js +30 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/upgrade.d.ts +5 -0
- package/dist/commands/upgrade.js +125 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/opencode.d.ts +17 -0
- package/dist/lib/opencode.js +104 -0
- package/dist/lib/opencode.js.map +1 -1
- package/dist/plugins/{guardian.js → guardian/index.js} +5 -50
- package/dist/plugins/guardian/index.js.map +1 -0
- package/dist/plugins/{memory.js → memory/index.js} +11 -35
- package/dist/plugins/memory/index.js.map +1 -0
- package/dist/plugins/memory-store.d.ts +4 -0
- package/dist/plugins/memory-store.js +28 -2
- package/dist/plugins/memory-store.js.map +1 -1
- package/dist/plugins/secrets-redaction/config.js +15 -1
- package/dist/plugins/secrets-redaction/config.js.map +1 -1
- package/dist/plugins/secrets-redaction/engine.js +1 -1
- package/dist/plugins/secrets-redaction/engine.js.map +1 -1
- package/dist/plugins/secrets-redaction/index.js.map +1 -1
- package/dist/plugins/secrets-redaction/patterns.js +19 -12
- package/dist/plugins/secrets-redaction/patterns.js.map +1 -1
- package/package.json +10 -5
- package/dist/plugins/guardian.js.map +0 -1
- package/dist/plugins/memory.js.map +0 -1
- /package/dist/plugins/{guardian.d.ts → guardian/index.d.ts} +0 -0
- /package/dist/plugins/{memory.d.ts → memory/index.d.ts} +0 -0
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
// FILE: src/commands/config-validate.ts
|
|
2
|
+
// VERSION: 0.4.0
|
|
3
|
+
// START_MODULE_CONTRACT
|
|
4
|
+
// PURPOSE: Validate guardian.jsonc and memory.jsonc configuration files with human-readable error reporting.
|
|
5
|
+
// SCOPE: Scope parsing, file discovery, JSONC parse error reporting, schema field validation, and pass/fail terminal output.
|
|
6
|
+
// DEPENDS: [citty, src/lib/opencode.js, src/lib/vvoc-paths.js]
|
|
7
|
+
// LINKS: [M-CLI-CONFIG-VALIDATE, M-CLI-CONFIG]
|
|
8
|
+
// ROLE: RUNTIME
|
|
9
|
+
// MAP_MODE: EXPORTS
|
|
10
|
+
// END_MODULE_CONTRACT
|
|
11
|
+
//
|
|
12
|
+
// START_MODULE_MAP
|
|
13
|
+
// default - ConfigValidate command definition for vvoc.
|
|
14
|
+
// validateGuardianConfig - Validate guardian.jsonc and report schema violations.
|
|
15
|
+
// validateMemoryConfig - Validate memory.jsonc and report schema violations.
|
|
16
|
+
// ConfigValidateResult - Outcome of a single config file validation.
|
|
17
|
+
// END_MODULE_MAP
|
|
18
|
+
//
|
|
19
|
+
// START_CHANGE_SUMMARY
|
|
20
|
+
// LAST_CHANGE: [v0.4.0 - Initial GRACE implementation for config validation commands.]
|
|
21
|
+
// END_CHANGE_SUMMARY
|
|
22
|
+
import { defineCommand } from "citty";
|
|
23
|
+
import { parse } from "jsonc-parser";
|
|
24
|
+
import { resolvePaths } from "../lib/opencode.js";
|
|
25
|
+
const GUARDIAN_REQUIRED_FIELDS = {
|
|
26
|
+
timeoutMs: "number",
|
|
27
|
+
approvalRiskThreshold: "number",
|
|
28
|
+
};
|
|
29
|
+
const GUARDIAN_OPTIONAL_FIELDS = {
|
|
30
|
+
model: "string",
|
|
31
|
+
variant: "string",
|
|
32
|
+
reviewToastDurationMs: "number",
|
|
33
|
+
};
|
|
34
|
+
const MEMORY_REQUIRED_FIELDS = {
|
|
35
|
+
enabled: "boolean",
|
|
36
|
+
};
|
|
37
|
+
const MEMORY_OPTIONAL_FIELDS = {
|
|
38
|
+
defaultSearchLimit: "number",
|
|
39
|
+
reviewerModel: "string",
|
|
40
|
+
reviewerVariant: "string",
|
|
41
|
+
};
|
|
42
|
+
export default defineCommand({
|
|
43
|
+
meta: {
|
|
44
|
+
name: "validate",
|
|
45
|
+
description: "Validate guardian.jsonc and memory.jsonc configuration files.",
|
|
46
|
+
},
|
|
47
|
+
args: {
|
|
48
|
+
scope: {
|
|
49
|
+
type: "enum",
|
|
50
|
+
options: ["global", "project", "all"],
|
|
51
|
+
default: "all",
|
|
52
|
+
description: "Validate global, project, or all config files.",
|
|
53
|
+
},
|
|
54
|
+
"config-dir": {
|
|
55
|
+
type: "string",
|
|
56
|
+
description: "Override the global config home used for vvoc/",
|
|
57
|
+
},
|
|
58
|
+
"guardian-only": {
|
|
59
|
+
type: "boolean",
|
|
60
|
+
default: false,
|
|
61
|
+
description: "Only validate guardian.jsonc.",
|
|
62
|
+
},
|
|
63
|
+
"memory-only": {
|
|
64
|
+
type: "boolean",
|
|
65
|
+
default: false,
|
|
66
|
+
description: "Only validate memory.jsonc.",
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
async run({ args }) {
|
|
70
|
+
// START_BLOCK_RUN_VALIDATE
|
|
71
|
+
const scope = args.scope === "project" ? "project" : args.scope === "global" ? "global" : undefined;
|
|
72
|
+
const configDir = typeof args["config-dir"] === "string" ? args["config-dir"] : undefined;
|
|
73
|
+
const guardianOnly = args["guardian-only"] === true;
|
|
74
|
+
const memoryOnly = args["memory-only"] === true;
|
|
75
|
+
const cwd = process.cwd();
|
|
76
|
+
let exitCode = 0;
|
|
77
|
+
if (!guardianOnly && !memoryOnly) {
|
|
78
|
+
if (scope !== undefined) {
|
|
79
|
+
const guardianResult = await validateGuardianConfig(scope, cwd, configDir);
|
|
80
|
+
printResult(guardianResult);
|
|
81
|
+
if (!guardianResult.valid)
|
|
82
|
+
exitCode = 1;
|
|
83
|
+
const memoryResult = await validateMemoryConfig(scope, cwd, configDir);
|
|
84
|
+
printResult(memoryResult);
|
|
85
|
+
if (!memoryResult.valid)
|
|
86
|
+
exitCode = 1;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const globalGuardian = await validateGuardianConfig("global", cwd, configDir);
|
|
90
|
+
printResult(globalGuardian);
|
|
91
|
+
if (!globalGuardian.valid)
|
|
92
|
+
exitCode = 1;
|
|
93
|
+
const globalMemory = await validateMemoryConfig("global", cwd, configDir);
|
|
94
|
+
printResult(globalMemory);
|
|
95
|
+
if (!globalMemory.valid)
|
|
96
|
+
exitCode = 1;
|
|
97
|
+
const projectGuardian = await validateGuardianConfig("project", cwd, configDir);
|
|
98
|
+
printResult(projectGuardian);
|
|
99
|
+
if (!projectGuardian.valid)
|
|
100
|
+
exitCode = 1;
|
|
101
|
+
const projectMemory = await validateMemoryConfig("project", cwd, configDir);
|
|
102
|
+
printResult(projectMemory);
|
|
103
|
+
if (!projectMemory.valid)
|
|
104
|
+
exitCode = 1;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
if (!guardianOnly) {
|
|
109
|
+
if (scope !== undefined) {
|
|
110
|
+
const guardianResult = await validateGuardianConfig(scope, cwd, configDir);
|
|
111
|
+
printResult(guardianResult);
|
|
112
|
+
if (!guardianResult.valid)
|
|
113
|
+
exitCode = 1;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
const globalGuardian = await validateGuardianConfig("global", cwd, configDir);
|
|
117
|
+
printResult(globalGuardian);
|
|
118
|
+
if (!globalGuardian.valid)
|
|
119
|
+
exitCode = 1;
|
|
120
|
+
const projectGuardian = await validateGuardianConfig("project", cwd, configDir);
|
|
121
|
+
printResult(projectGuardian);
|
|
122
|
+
if (!projectGuardian.valid)
|
|
123
|
+
exitCode = 1;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (!memoryOnly) {
|
|
127
|
+
if (scope !== undefined) {
|
|
128
|
+
const memoryResult = await validateMemoryConfig(scope, cwd, configDir);
|
|
129
|
+
printResult(memoryResult);
|
|
130
|
+
if (!memoryResult.valid)
|
|
131
|
+
exitCode = 1;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
const globalMemory = await validateMemoryConfig("global", cwd, configDir);
|
|
135
|
+
printResult(globalMemory);
|
|
136
|
+
if (!globalMemory.valid)
|
|
137
|
+
exitCode = 1;
|
|
138
|
+
const projectMemory = await validateMemoryConfig("project", cwd, configDir);
|
|
139
|
+
printResult(projectMemory);
|
|
140
|
+
if (!projectMemory.valid)
|
|
141
|
+
exitCode = 1;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
process.exitCode = exitCode;
|
|
146
|
+
// END_BLOCK_RUN_VALIDATE
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
export async function validateGuardianConfig(scope, cwd, configDir) {
|
|
150
|
+
const paths = await resolvePaths({ scope, cwd, configDir });
|
|
151
|
+
return validateGuardianConfigFile(paths.guardianConfigPath);
|
|
152
|
+
}
|
|
153
|
+
export async function validateMemoryConfig(scope, cwd, configDir) {
|
|
154
|
+
const paths = await resolvePaths({ scope, cwd, configDir });
|
|
155
|
+
return validateMemoryConfigFile(paths.memoryConfigPath);
|
|
156
|
+
}
|
|
157
|
+
export function validateGuardianConfigContent(content, filePath) {
|
|
158
|
+
const errors = [];
|
|
159
|
+
const parseErrors = [];
|
|
160
|
+
const parsed = parse(content, parseErrors, {
|
|
161
|
+
allowEmptyContent: true,
|
|
162
|
+
allowTrailingComma: true,
|
|
163
|
+
disallowComments: false,
|
|
164
|
+
});
|
|
165
|
+
if (parseErrors.length > 0) {
|
|
166
|
+
for (const err of parseErrors) {
|
|
167
|
+
const lineCol = offsetToLineCol(content, err.offset);
|
|
168
|
+
errors.push(`${filePath}:${lineCol.line}:${lineCol.col} - invalid JSONC (${err.error})`);
|
|
169
|
+
}
|
|
170
|
+
return { path: filePath, valid: false, errors };
|
|
171
|
+
}
|
|
172
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
173
|
+
errors.push(`${filePath} - expected a top-level object`);
|
|
174
|
+
return { path: filePath, valid: false, errors };
|
|
175
|
+
}
|
|
176
|
+
for (const [field, expectedType] of Object.entries(GUARDIAN_REQUIRED_FIELDS)) {
|
|
177
|
+
if (!Object.hasOwn(parsed, field)) {
|
|
178
|
+
errors.push(`${filePath} - missing required field "${field}" (expected ${expectedType})`);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
const actual = typeof parsed[field];
|
|
182
|
+
if (actual !== expectedType) {
|
|
183
|
+
errors.push(`${filePath} - field "${field}" has type "${actual}" but expected "${expectedType}"`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
for (const [field, expectedType] of Object.entries(GUARDIAN_OPTIONAL_FIELDS)) {
|
|
188
|
+
if (Object.hasOwn(parsed, field)) {
|
|
189
|
+
const actual = typeof parsed[field];
|
|
190
|
+
if (actual !== expectedType) {
|
|
191
|
+
errors.push(`${filePath} - optional field "${field}" has type "${actual}" but expected "${expectedType}"`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (Object.hasOwn(parsed, "timeoutMs")) {
|
|
196
|
+
const val = parsed.timeoutMs;
|
|
197
|
+
if (typeof val === "number" && (val <= 0 || !Number.isFinite(val))) {
|
|
198
|
+
errors.push(`${filePath} - "timeoutMs" must be a positive number`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (Object.hasOwn(parsed, "approvalRiskThreshold")) {
|
|
202
|
+
const val = parsed.approvalRiskThreshold;
|
|
203
|
+
if (typeof val === "number" && (val < 0 || val > 100 || !Number.isFinite(val))) {
|
|
204
|
+
errors.push(`${filePath} - "approvalRiskThreshold" must be a number between 0 and 100`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (Object.hasOwn(parsed, "reviewToastDurationMs")) {
|
|
208
|
+
const val = parsed.reviewToastDurationMs;
|
|
209
|
+
if (typeof val === "number" && (val <= 0 || !Number.isFinite(val))) {
|
|
210
|
+
errors.push(`${filePath} - "reviewToastDurationMs" must be a positive number`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return { path: filePath, valid: errors.length === 0, errors };
|
|
214
|
+
}
|
|
215
|
+
export function validateGuardianConfigFile(filePath) {
|
|
216
|
+
return validateGuardianConfigContent(readFileOrEmpty(filePath), filePath);
|
|
217
|
+
}
|
|
218
|
+
export function validateMemoryConfigContent(content, filePath) {
|
|
219
|
+
const errors = [];
|
|
220
|
+
const parseErrors = [];
|
|
221
|
+
const parsed = parse(content, parseErrors, {
|
|
222
|
+
allowEmptyContent: true,
|
|
223
|
+
allowTrailingComma: true,
|
|
224
|
+
disallowComments: false,
|
|
225
|
+
});
|
|
226
|
+
if (parseErrors.length > 0) {
|
|
227
|
+
for (const err of parseErrors) {
|
|
228
|
+
const lineCol = offsetToLineCol(content, err.offset);
|
|
229
|
+
errors.push(`${filePath}:${lineCol.line}:${lineCol.col} - invalid JSONC (${err.error})`);
|
|
230
|
+
}
|
|
231
|
+
return { path: filePath, valid: false, errors };
|
|
232
|
+
}
|
|
233
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
234
|
+
errors.push(`${filePath} - expected a top-level object`);
|
|
235
|
+
return { path: filePath, valid: false, errors };
|
|
236
|
+
}
|
|
237
|
+
for (const [field, expectedType] of Object.entries(MEMORY_REQUIRED_FIELDS)) {
|
|
238
|
+
if (!Object.hasOwn(parsed, field)) {
|
|
239
|
+
errors.push(`${filePath} - missing required field "${field}" (expected ${expectedType})`);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
const actual = typeof parsed[field];
|
|
243
|
+
if (actual !== expectedType) {
|
|
244
|
+
errors.push(`${filePath} - field "${field}" has type "${actual}" but expected "${expectedType}"`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
for (const [field, expectedType] of Object.entries(MEMORY_OPTIONAL_FIELDS)) {
|
|
249
|
+
if (Object.hasOwn(parsed, field)) {
|
|
250
|
+
const actual = typeof parsed[field];
|
|
251
|
+
if (actual !== expectedType) {
|
|
252
|
+
errors.push(`${filePath} - optional field "${field}" has type "${actual}" but expected "${expectedType}"`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
if (Object.hasOwn(parsed, "defaultSearchLimit")) {
|
|
257
|
+
const val = parsed.defaultSearchLimit;
|
|
258
|
+
if (typeof val === "number" && (val <= 0 || !Number.isInteger(val))) {
|
|
259
|
+
errors.push(`${filePath} - "defaultSearchLimit" must be a positive integer`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return { path: filePath, valid: errors.length === 0, errors };
|
|
263
|
+
}
|
|
264
|
+
export function validateMemoryConfigFile(filePath) {
|
|
265
|
+
return validateMemoryConfigContent(readFileOrEmpty(filePath), filePath);
|
|
266
|
+
}
|
|
267
|
+
function printResult(result) {
|
|
268
|
+
if (result.valid) {
|
|
269
|
+
console.log(`${result.path}: OK`);
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
for (const error of result.errors) {
|
|
273
|
+
console.error(error);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
function readFileOrEmpty(path) {
|
|
278
|
+
try {
|
|
279
|
+
const { readFileSync } = require("node:fs");
|
|
280
|
+
return readFileSync(path, "utf8");
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
return "";
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
function offsetToLineCol(content, offset) {
|
|
287
|
+
const lines = content.split("\n");
|
|
288
|
+
let pos = 0;
|
|
289
|
+
for (let i = 0; i < lines.length; i++) {
|
|
290
|
+
const lineLen = lines[i].length + 1;
|
|
291
|
+
if (pos + lineLen > offset) {
|
|
292
|
+
return { line: i + 1, col: offset - pos + 1 };
|
|
293
|
+
}
|
|
294
|
+
pos += lineLen;
|
|
295
|
+
}
|
|
296
|
+
return { line: lines.length, col: 1 };
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=config-validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-validate.js","sourceRoot":"","sources":["../../src/commands/config-validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// FILE: src/commands/config.ts
|
|
2
|
+
// VERSION: 0.4.0
|
|
3
|
+
// START_MODULE_CONTRACT
|
|
4
|
+
// PURPOSE: Group config-related subcommands (validate) under the vvoc config parent command.
|
|
5
|
+
// SCOPE: Parent command definition and subcommand wiring.
|
|
6
|
+
// DEPENDS: [citty, src/commands/config-validate.js]
|
|
7
|
+
// LINKS: [M-CLI-CONFIG-VALIDATE, M-CLI-COMMANDS]
|
|
8
|
+
// ROLE: RUNTIME
|
|
9
|
+
// MAP_MODE: EXPORTS
|
|
10
|
+
// END_MODULE_CONTRACT
|
|
11
|
+
//
|
|
12
|
+
// START_MODULE_MAP
|
|
13
|
+
// default - Config parent command grouping config subcommands.
|
|
14
|
+
// END_MODULE_MAP
|
|
15
|
+
//
|
|
16
|
+
// START_CHANGE_SUMMARY
|
|
17
|
+
// LAST_CHANGE: [v0.4.0 - Initial GRACE implementation for config parent command.]
|
|
18
|
+
// END_CHANGE_SUMMARY
|
|
19
|
+
import { defineCommand } from "citty";
|
|
20
|
+
import validateCommand from "./config-validate.js";
|
|
21
|
+
export default defineCommand({
|
|
22
|
+
meta: {
|
|
23
|
+
name: "config",
|
|
24
|
+
description: "Config-related commands.",
|
|
25
|
+
},
|
|
26
|
+
subCommands: {
|
|
27
|
+
validate: validateCommand,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,iBAAiB;AACjB,wBAAwB;AACxB,+FAA+F;AAC/F,4DAA4D;AAC5D,sDAAsD;AACtD,mDAAmD;AACnD,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,eAAe,MAAM,sBAAsB,CAAC;AAEnD,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,0BAA0B;KACxC;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,eAAe;KAC1B;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Scope } from "../lib/opencode.js";
|
|
2
|
+
declare const _default: import("citty").CommandDef<{
|
|
3
|
+
readonly scope: {
|
|
4
|
+
readonly type: "enum";
|
|
5
|
+
readonly options: ["global", "project"];
|
|
6
|
+
readonly default: "global";
|
|
7
|
+
readonly description: "Initialize globally or per-project.";
|
|
8
|
+
};
|
|
9
|
+
readonly plugins: {
|
|
10
|
+
readonly type: "string";
|
|
11
|
+
readonly default: "@osovv/vv-opencode";
|
|
12
|
+
readonly description: "Comma-separated list of plugins to enable.";
|
|
13
|
+
};
|
|
14
|
+
readonly "non-interactive": {
|
|
15
|
+
readonly type: "boolean";
|
|
16
|
+
readonly default: false;
|
|
17
|
+
readonly description: "Skip interactive prompts and use defaults.";
|
|
18
|
+
};
|
|
19
|
+
readonly "config-dir": {
|
|
20
|
+
readonly type: "string";
|
|
21
|
+
readonly description: "Override the global config home.";
|
|
22
|
+
};
|
|
23
|
+
}>;
|
|
24
|
+
export default _default;
|
|
25
|
+
export declare function runInitNonInteractive(options: {
|
|
26
|
+
scope: Scope;
|
|
27
|
+
cwd: string;
|
|
28
|
+
configDir?: string;
|
|
29
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// FILE: src/commands/init.ts
|
|
2
|
+
// VERSION: 0.4.0
|
|
3
|
+
// START_MODULE_CONTRACT
|
|
4
|
+
// PURPOSE: Interactive project initialization: registers @osovv/vv-opencode in OpenCode plugin array and scaffolds initial vvoc config files. Uses @clack/prompts for TTY prompts. Interactive mode is the default; --non-interactive flag enables batch mode.
|
|
5
|
+
// SCOPE: Scope selection, plugin registration, config file scaffolding, and idempotent re-run handling.
|
|
6
|
+
// DEPENDS: [citty, @clack/prompts, src/lib/opencode.js]
|
|
7
|
+
// LINKS: [M-CLI-INIT, M-CLI-CONFIG]
|
|
8
|
+
// ROLE: RUNTIME
|
|
9
|
+
// MAP_MODE: EXPORTS
|
|
10
|
+
// END_MODULE_CONTRACT
|
|
11
|
+
//
|
|
12
|
+
// START_MODULE_MAP
|
|
13
|
+
// default - Init command definition for vvoc.
|
|
14
|
+
// runInit - Run the initialization flow.
|
|
15
|
+
// END_MODULE_MAP
|
|
16
|
+
//
|
|
17
|
+
// START_CHANGE_SUMMARY
|
|
18
|
+
// LAST_CHANGE: [v0.4.0 - Initial GRACE implementation for init command.]
|
|
19
|
+
// END_CHANGE_SUMMARY
|
|
20
|
+
import { defineCommand } from "citty";
|
|
21
|
+
import * as p from "@clack/prompts";
|
|
22
|
+
import { ensurePackageInstalled, installGuardianConfig, installMemoryConfig, inspectInstallation, resolvePaths, } from "../lib/opencode.js";
|
|
23
|
+
export default defineCommand({
|
|
24
|
+
meta: {
|
|
25
|
+
name: "init",
|
|
26
|
+
description: "Initialize vvoc in a project or globally.",
|
|
27
|
+
},
|
|
28
|
+
args: {
|
|
29
|
+
scope: {
|
|
30
|
+
type: "enum",
|
|
31
|
+
options: ["global", "project"],
|
|
32
|
+
default: "global",
|
|
33
|
+
description: "Initialize globally or per-project.",
|
|
34
|
+
},
|
|
35
|
+
plugins: {
|
|
36
|
+
type: "string",
|
|
37
|
+
default: "@osovv/vv-opencode",
|
|
38
|
+
description: "Comma-separated list of plugins to enable.",
|
|
39
|
+
},
|
|
40
|
+
"non-interactive": {
|
|
41
|
+
type: "boolean",
|
|
42
|
+
default: false,
|
|
43
|
+
description: "Skip interactive prompts and use defaults.",
|
|
44
|
+
},
|
|
45
|
+
"config-dir": {
|
|
46
|
+
type: "string",
|
|
47
|
+
description: "Override the global config home.",
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
async run({ args }) {
|
|
51
|
+
// START_BLOCK_RUN_INIT
|
|
52
|
+
const nonInteractive = args["non-interactive"] === true;
|
|
53
|
+
const scope = (args.scope === "project" ? "project" : "global");
|
|
54
|
+
const configDir = typeof args["config-dir"] === "string" ? args["config-dir"] : undefined;
|
|
55
|
+
const cwd = process.cwd();
|
|
56
|
+
p.intro("Initializing vvoc");
|
|
57
|
+
try {
|
|
58
|
+
await runInit({ scope, cwd, configDir, nonInteractive });
|
|
59
|
+
p.outro("vvoc initialized successfully");
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
if (err instanceof Error && err.message === "ABORTED") {
|
|
63
|
+
p.cancel("Initialization cancelled");
|
|
64
|
+
process.exitCode = 130;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
p.cancel("Initialization failed: " + (err instanceof Error ? err.message : String(err)));
|
|
68
|
+
process.exitCode = 1;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// END_BLOCK_RUN_INIT
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
async function runInit(options) {
|
|
75
|
+
const { scope, cwd, configDir, nonInteractive } = options;
|
|
76
|
+
let selectedScope = scope;
|
|
77
|
+
if (!nonInteractive) {
|
|
78
|
+
const scopeAnswer = await p.select({
|
|
79
|
+
message: "Select installation scope:",
|
|
80
|
+
options: [
|
|
81
|
+
{ label: "Global (all projects)", value: "global" },
|
|
82
|
+
{ label: "Project (current directory only)", value: "project" },
|
|
83
|
+
],
|
|
84
|
+
initialValue: scope,
|
|
85
|
+
});
|
|
86
|
+
if (p.isCancel(scopeAnswer)) {
|
|
87
|
+
throw new Error("ABORTED");
|
|
88
|
+
}
|
|
89
|
+
selectedScope = scopeAnswer;
|
|
90
|
+
const reloadedPaths = await resolvePaths({ scope: selectedScope, cwd, configDir });
|
|
91
|
+
const inspection = await inspectInstallation(reloadedPaths);
|
|
92
|
+
if (inspection.opencode.pluginConfigured) {
|
|
93
|
+
const overwrite = await p.confirm({
|
|
94
|
+
message: `@osovv/vv-opencode is already configured. Overwrite?`,
|
|
95
|
+
initialValue: false,
|
|
96
|
+
});
|
|
97
|
+
if (p.isCancel(overwrite)) {
|
|
98
|
+
throw new Error("ABORTED");
|
|
99
|
+
}
|
|
100
|
+
if (!overwrite) {
|
|
101
|
+
p.cancel("Already configured. Run `vvoc sync` to update configs.");
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const finalPaths = await resolvePaths({ scope: selectedScope, cwd, configDir });
|
|
107
|
+
p.log.step("Registering plugin in OpenCode config...");
|
|
108
|
+
const pkgResult = await ensurePackageInstalled(finalPaths);
|
|
109
|
+
p.log.info(pkgResult.path + " - " + (pkgResult.changed ? "updated" : "already up to date"));
|
|
110
|
+
p.log.step("Scaffolding Guardian config...");
|
|
111
|
+
const guardianResult = await installGuardianConfig(finalPaths, { force: true });
|
|
112
|
+
p.log.info(guardianResult.path + " - " + guardianResult.action);
|
|
113
|
+
p.log.step("Scaffolding Memory config...");
|
|
114
|
+
const memoryResult = await installMemoryConfig(finalPaths, { force: true });
|
|
115
|
+
p.log.info(memoryResult.path + " - " + memoryResult.action);
|
|
116
|
+
}
|
|
117
|
+
export async function runInitNonInteractive(options) {
|
|
118
|
+
const { scope, cwd, configDir } = options;
|
|
119
|
+
const paths = await resolvePaths({ scope, cwd, configDir });
|
|
120
|
+
const inspection = await inspectInstallation(paths);
|
|
121
|
+
if (inspection.opencode.pluginConfigured) {
|
|
122
|
+
console.log("Already configured. Run `vvoc sync` to update configs.");
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
await ensurePackageInstalled(paths);
|
|
126
|
+
await installGuardianConfig(paths, { force: true });
|
|
127
|
+
await installMemoryConfig(paths, { force: true });
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,5 +23,10 @@ declare const _default: import("citty").CommandDef<{
|
|
|
23
23
|
readonly default: true;
|
|
24
24
|
readonly description: "Create memory.jsonc when missing.";
|
|
25
25
|
};
|
|
26
|
+
readonly "secrets-redaction-config": {
|
|
27
|
+
readonly type: "boolean";
|
|
28
|
+
readonly default: true;
|
|
29
|
+
readonly description: "Create secrets-redaction.config.json when missing.";
|
|
30
|
+
};
|
|
26
31
|
}>;
|
|
27
32
|
export default _default;
|
package/dist/commands/install.js
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
// LAST_CHANGE: [v0.2.5 - Added GRACE command markup around install flow so vvoc bootstrap behavior is easier to inspect.]
|
|
18
18
|
// END_CHANGE_SUMMARY
|
|
19
19
|
import { defineCommand } from "citty";
|
|
20
|
-
import { describeWriteResult, ensurePackageInstalled, installGuardianConfig, installMemoryConfig, resolvePaths, } from "../lib/opencode.js";
|
|
20
|
+
import { describeWriteResult, ensurePackageInstalled, installGuardianConfig, installMemoryConfig, installSecretsRedactionConfig, resolvePaths, } from "../lib/opencode.js";
|
|
21
21
|
export default defineCommand({
|
|
22
22
|
meta: {
|
|
23
23
|
name: "install",
|
|
@@ -48,6 +48,11 @@ export default defineCommand({
|
|
|
48
48
|
default: true,
|
|
49
49
|
description: "Create memory.jsonc when missing.",
|
|
50
50
|
},
|
|
51
|
+
"secrets-redaction-config": {
|
|
52
|
+
type: "boolean",
|
|
53
|
+
default: true,
|
|
54
|
+
description: "Create secrets-redaction.config.json when missing.",
|
|
55
|
+
},
|
|
51
56
|
},
|
|
52
57
|
async run({ args }) {
|
|
53
58
|
// START_BLOCK_APPLY_INSTALL_COMMAND
|
|
@@ -69,10 +74,20 @@ export default defineCommand({
|
|
|
69
74
|
}
|
|
70
75
|
if (args["memory-config"] === false) {
|
|
71
76
|
console.log(`Skipped ${paths.memoryConfigPath} (memory config disabled)`);
|
|
72
|
-
return;
|
|
73
77
|
}
|
|
74
|
-
|
|
75
|
-
|
|
78
|
+
else {
|
|
79
|
+
const memory = await installMemoryConfig(paths, { force: Boolean(args.force) });
|
|
80
|
+
console.log(describeWriteResult(memory));
|
|
81
|
+
}
|
|
82
|
+
if (args["secrets-redaction-config"] === false) {
|
|
83
|
+
console.log(`Skipped ${paths.secretsRedactionConfigPath} (secrets-redaction config disabled)`);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const secretsRedaction = await installSecretsRedactionConfig(paths, {
|
|
87
|
+
force: Boolean(args.force),
|
|
88
|
+
});
|
|
89
|
+
console.log(describeWriteResult(secretsRedaction));
|
|
90
|
+
}
|
|
76
91
|
// END_BLOCK_APPLY_INSTALL_COMMAND
|
|
77
92
|
},
|
|
78
93
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,iBAAiB;AACjB,wBAAwB;AACxB,+FAA+F;AAC/F,oHAAoH;AACpH,0CAA0C;AAC1C,0CAA0C;AAC1C,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,4FAA4F;AAC5F,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,4HAA4H;AAC5H,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,GAEb,MAAM,oBAAoB,CAAC;AAE5B,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,2CAA2C;KACzD;IACD,IAAI,EAAE;QACJ,KAAK,EAAE;YACL,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC9B,OAAO,EAAE,QAAQ;YACjB,WAAW,EAAE,oCAAoC;SAClD;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,+DAA+D;SAC7E;QACD,KAAK,EAAE;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,4DAA4D;SAC1E;QACD,iBAAiB,EAAE;YACjB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,qCAAqC;SACnD;QACD,eAAe,EAAE;YACf,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,mCAAmC;SACjD;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,oCAAoC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC9D,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC;YAC/B,KAAK,EAAE,KAAc;YACrB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,SAAS;SACV,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAErD,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAEzE,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,KAAK,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,kBAAkB,6BAA6B,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,gBAAgB,2BAA2B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Scope } from "../lib/opencode.js";
|
|
2
|
+
export type PluginEntry = {
|
|
3
|
+
name: string;
|
|
4
|
+
source: string;
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
};
|
|
7
|
+
declare const _default: import("citty").CommandDef<{
|
|
8
|
+
readonly scope: {
|
|
9
|
+
readonly type: "enum";
|
|
10
|
+
readonly options: ["global", "project"];
|
|
11
|
+
readonly default: "global";
|
|
12
|
+
readonly description: "List plugins from global or project config.";
|
|
13
|
+
};
|
|
14
|
+
readonly "config-dir": {
|
|
15
|
+
readonly type: "string";
|
|
16
|
+
readonly description: "Override the global config home used for opencode/";
|
|
17
|
+
};
|
|
18
|
+
readonly verbose: {
|
|
19
|
+
readonly type: "boolean";
|
|
20
|
+
readonly default: false;
|
|
21
|
+
readonly description: "Show additional details including config path.";
|
|
22
|
+
};
|
|
23
|
+
}>;
|
|
24
|
+
export default _default;
|
|
25
|
+
export declare function listPlugins(scope: Scope, cwd: string, configDir?: string): Promise<PluginEntry[]>;
|
|
26
|
+
export declare function parsePluginSpecifier(specifier: string): PluginEntry;
|
|
27
|
+
export declare function renderPluginTable(plugins: PluginEntry[]): void;
|