@osovv/vv-opencode 0.3.0 → 0.4.1
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 +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/agent.d.ts +2 -0
- package/dist/commands/agent.js +250 -0
- package/dist/commands/agent.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/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 +9 -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
package/README.md
CHANGED
|
@@ -289,8 +289,8 @@ npm publish
|
|
|
289
289
|
|
|
290
290
|
## Repository layout
|
|
291
291
|
|
|
292
|
-
- `src/plugins/guardian
|
|
293
|
-
- `src/plugins/memory
|
|
292
|
+
- `src/plugins/guardian/` - Guardian OpenCode plugin (index.ts + policy.md)
|
|
293
|
+
- `src/plugins/memory/` - Memory OpenCode plugin (index.ts + system-instruction.md + reviewer.md)
|
|
294
294
|
- `src/plugins/memory-store.ts` - file-based memory store and search logic
|
|
295
295
|
- `src/lib/opencode.ts` - config path resolution and JSONC helpers for the CLI
|
|
296
296
|
- `src/lib/vvoc-paths.ts` - shared vvoc/openCode path helpers
|
package/dist/cli.js
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
// LAST_CHANGE: [v0.2.5 - Added GRACE script markup so the vvoc entrypoint and command tree can be navigated quickly.]
|
|
20
20
|
// END_CHANGE_SUMMARY
|
|
21
21
|
import { defineCommand, runMain } from "citty";
|
|
22
|
+
import agent from "./commands/agent.js";
|
|
22
23
|
import doctor from "./commands/doctor.js";
|
|
23
24
|
import guardian from "./commands/guardian.js";
|
|
24
25
|
import install from "./commands/install.js";
|
|
@@ -35,6 +36,7 @@ const main = defineCommand({
|
|
|
35
36
|
description: "Install and sync vv-opencode plugins for OpenCode.",
|
|
36
37
|
},
|
|
37
38
|
subCommands: {
|
|
39
|
+
agent,
|
|
38
40
|
install,
|
|
39
41
|
sync,
|
|
40
42
|
status,
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,mBAAmB;AACnB,iBAAiB;AACjB,wBAAwB;AACxB,uDAAuD;AACvD,+FAA+F;AAC/F,2LAA2L;AAC3L,4BAA4B;AAC5B,iBAAiB;AACjB,qBAAqB;AACrB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,oEAAoE;AACpE,wCAAwC;AACxC,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,wHAAwH;AACxH,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,iCAAiC;AACjC,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAC;AAEjD,MAAM,IAAI,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,oDAAoD;KAClE;IACD,WAAW,EAAE;QACX,OAAO;QACP,IAAI;QACJ,MAAM;QACN,MAAM;QACN,QAAQ;QACR,OAAO;KACR;CACF,CAAC,CAAC;AACH,+BAA+B;AAE/B,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,mBAAmB;AACnB,iBAAiB;AACjB,wBAAwB;AACxB,uDAAuD;AACvD,+FAA+F;AAC/F,2LAA2L;AAC3L,4BAA4B;AAC5B,iBAAiB;AACjB,qBAAqB;AACrB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,oEAAoE;AACpE,wCAAwC;AACxC,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,wHAAwH;AACxH,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,iCAAiC;AACjC,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAC;AAEjD,MAAM,IAAI,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,oDAAoD;KAClE;IACD,WAAW,EAAE;QACX,KAAK;QACL,OAAO;QACP,IAAI;QACJ,MAAM;QACN,MAAM;QACN,QAAQ;QACR,OAAO;KACR;CACF,CAAC,CAAC;AACH,+BAA+B;AAE/B,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
// FILE: src/commands/agent.ts
|
|
2
|
+
// VERSION: 0.3.4
|
|
3
|
+
// START_MODULE_CONTRACT
|
|
4
|
+
// PURPOSE: Manage agent model overrides for guardian and memory-reviewer agents.
|
|
5
|
+
// SCOPE: Agent model setting, unsetting, and listing via vvoc agent command tree.
|
|
6
|
+
// DEPENDS: [citty, src/lib/opencode.ts, src/plugins/memory-store.ts]
|
|
7
|
+
// LINKS: [M-CLI-COMMANDS]
|
|
8
|
+
// ROLE: RUNTIME
|
|
9
|
+
// MAP_MODE: EXPORTS
|
|
10
|
+
// END_MODULE_CONTRACT
|
|
11
|
+
//
|
|
12
|
+
// START_MODULE_MAP
|
|
13
|
+
// default - Agent command group.
|
|
14
|
+
// END_MODULE_MAP
|
|
15
|
+
//
|
|
16
|
+
// START_CHANGE_SUMMARY
|
|
17
|
+
// LAST_CHANGE: [v0.3.4 - Added granular agent model configuration via vvoc agent command.]
|
|
18
|
+
// END_CHANGE_SUMMARY
|
|
19
|
+
import { defineCommand } from "citty";
|
|
20
|
+
import { describeWriteResult, parseGuardianConfigText, renderGuardianConfig, resolvePaths, } from "../lib/opencode.js";
|
|
21
|
+
import { parseMemoryConfigText, renderMemoryConfig, } from "../plugins/memory-store.js";
|
|
22
|
+
const guardianSet = defineCommand({
|
|
23
|
+
meta: {
|
|
24
|
+
name: "set",
|
|
25
|
+
description: "Set the Guardian agent model override.",
|
|
26
|
+
},
|
|
27
|
+
args: {
|
|
28
|
+
model: {
|
|
29
|
+
type: "positional",
|
|
30
|
+
required: true,
|
|
31
|
+
description: "Model in provider/model-id[:variant] format.",
|
|
32
|
+
},
|
|
33
|
+
scope: {
|
|
34
|
+
type: "enum",
|
|
35
|
+
options: ["global", "project"],
|
|
36
|
+
default: "global",
|
|
37
|
+
description: "Write global or project config.",
|
|
38
|
+
},
|
|
39
|
+
"config-dir": {
|
|
40
|
+
type: "string",
|
|
41
|
+
description: "Override the global config home.",
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
async run({ args }) {
|
|
45
|
+
const { model, variant } = parseModelArg(args.model, "set");
|
|
46
|
+
const scope = args.scope === "project" ? "project" : "global";
|
|
47
|
+
const configDir = typeof args["config-dir"] === "string" ? args["config-dir"] : undefined;
|
|
48
|
+
const paths = await resolvePaths({ scope: scope, cwd: process.cwd(), configDir });
|
|
49
|
+
const currentText = await Bun.file(paths.guardianConfigPath)
|
|
50
|
+
.text()
|
|
51
|
+
.catch(() => "");
|
|
52
|
+
const current = currentText
|
|
53
|
+
? parseGuardianConfigText(currentText, paths.guardianConfigPath)
|
|
54
|
+
: {};
|
|
55
|
+
const merged = { ...current, model, variant };
|
|
56
|
+
const nextText = renderGuardianConfig(merged);
|
|
57
|
+
if (currentText.trim() === nextText.trim()) {
|
|
58
|
+
console.log(describeWriteResult({ action: "kept", path: paths.guardianConfigPath }));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
await Bun.write(paths.guardianConfigPath, nextText);
|
|
62
|
+
console.log(describeWriteResult({
|
|
63
|
+
action: currentText ? "updated" : "created",
|
|
64
|
+
path: paths.guardianConfigPath,
|
|
65
|
+
}));
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
const guardianUnset = defineCommand({
|
|
69
|
+
meta: {
|
|
70
|
+
name: "unset",
|
|
71
|
+
description: "Remove the Guardian agent model override.",
|
|
72
|
+
},
|
|
73
|
+
args: {
|
|
74
|
+
scope: {
|
|
75
|
+
type: "enum",
|
|
76
|
+
options: ["global", "project"],
|
|
77
|
+
default: "global",
|
|
78
|
+
description: "Write global or project config.",
|
|
79
|
+
},
|
|
80
|
+
"config-dir": {
|
|
81
|
+
type: "string",
|
|
82
|
+
description: "Override the global config home.",
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
async run({ args }) {
|
|
86
|
+
const scope = args.scope === "project" ? "project" : "global";
|
|
87
|
+
const configDir = typeof args["config-dir"] === "string" ? args["config-dir"] : undefined;
|
|
88
|
+
const paths = await resolvePaths({ scope: scope, cwd: process.cwd(), configDir });
|
|
89
|
+
const currentText = await Bun.file(paths.guardianConfigPath)
|
|
90
|
+
.text()
|
|
91
|
+
.catch(() => "");
|
|
92
|
+
if (!currentText) {
|
|
93
|
+
console.log(describeWriteResult({ action: "kept", path: paths.guardianConfigPath }));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const current = parseGuardianConfigText(currentText, paths.guardianConfigPath);
|
|
97
|
+
const { model: _model, variant: _variant, ...rest } = current;
|
|
98
|
+
const nextText = renderGuardianConfig(rest);
|
|
99
|
+
if (currentText.trim() === nextText.trim()) {
|
|
100
|
+
console.log(describeWriteResult({ action: "kept", path: paths.guardianConfigPath }));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
await Bun.write(paths.guardianConfigPath, nextText);
|
|
104
|
+
console.log(describeWriteResult({ action: "updated", path: paths.guardianConfigPath }));
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
const guardianCmd = defineCommand({
|
|
108
|
+
meta: {
|
|
109
|
+
name: "guardian",
|
|
110
|
+
description: "Manage the Guardian agent.",
|
|
111
|
+
},
|
|
112
|
+
subCommands: {
|
|
113
|
+
set: guardianSet,
|
|
114
|
+
unset: guardianUnset,
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
const memoryReviewerSet = defineCommand({
|
|
118
|
+
meta: {
|
|
119
|
+
name: "set",
|
|
120
|
+
description: "Set the memory-reviewer agent model override.",
|
|
121
|
+
},
|
|
122
|
+
args: {
|
|
123
|
+
model: {
|
|
124
|
+
type: "positional",
|
|
125
|
+
required: true,
|
|
126
|
+
description: "Model in provider/model-id[:variant] format.",
|
|
127
|
+
},
|
|
128
|
+
scope: {
|
|
129
|
+
type: "enum",
|
|
130
|
+
options: ["global", "project"],
|
|
131
|
+
default: "global",
|
|
132
|
+
description: "Write global or project config.",
|
|
133
|
+
},
|
|
134
|
+
"config-dir": {
|
|
135
|
+
type: "string",
|
|
136
|
+
description: "Override the global config home.",
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
async run({ args }) {
|
|
140
|
+
const { model, variant } = parseModelArg(args.model, "set");
|
|
141
|
+
const overrides = { reviewerModel: model };
|
|
142
|
+
if (variant) {
|
|
143
|
+
overrides.reviewerVariant = variant;
|
|
144
|
+
}
|
|
145
|
+
const scope = args.scope === "project" ? "project" : "global";
|
|
146
|
+
const configDir = typeof args["config-dir"] === "string" ? args["config-dir"] : undefined;
|
|
147
|
+
const paths = await resolvePaths({ scope: scope, cwd: process.cwd(), configDir });
|
|
148
|
+
const currentText = await Bun.file(paths.memoryConfigPath)
|
|
149
|
+
.text()
|
|
150
|
+
.catch(() => "");
|
|
151
|
+
const current = currentText ? parseMemoryConfigText(currentText, paths.memoryConfigPath) : {};
|
|
152
|
+
const merged = {
|
|
153
|
+
enabled: current.enabled ?? true,
|
|
154
|
+
defaultSearchLimit: current.defaultSearchLimit,
|
|
155
|
+
reviewerModel: model,
|
|
156
|
+
reviewerVariant: variant,
|
|
157
|
+
};
|
|
158
|
+
const nextText = renderMemoryConfig(merged);
|
|
159
|
+
if (currentText.trim() === nextText.trim()) {
|
|
160
|
+
console.log(describeWriteResult({ action: "kept", path: paths.memoryConfigPath }));
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
await Bun.write(paths.memoryConfigPath, nextText);
|
|
164
|
+
console.log(describeWriteResult({
|
|
165
|
+
action: currentText ? "updated" : "created",
|
|
166
|
+
path: paths.memoryConfigPath,
|
|
167
|
+
}));
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
const memoryReviewerUnset = defineCommand({
|
|
171
|
+
meta: {
|
|
172
|
+
name: "unset",
|
|
173
|
+
description: "Remove the memory-reviewer agent model override.",
|
|
174
|
+
},
|
|
175
|
+
args: {
|
|
176
|
+
scope: {
|
|
177
|
+
type: "enum",
|
|
178
|
+
options: ["global", "project"],
|
|
179
|
+
default: "global",
|
|
180
|
+
description: "Write global or project config.",
|
|
181
|
+
},
|
|
182
|
+
"config-dir": {
|
|
183
|
+
type: "string",
|
|
184
|
+
description: "Override the global config home.",
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
async run({ args }) {
|
|
188
|
+
const scope = args.scope === "project" ? "project" : "global";
|
|
189
|
+
const configDir = typeof args["config-dir"] === "string" ? args["config-dir"] : undefined;
|
|
190
|
+
const paths = await resolvePaths({ scope: scope, cwd: process.cwd(), configDir });
|
|
191
|
+
const currentText = await Bun.file(paths.memoryConfigPath)
|
|
192
|
+
.text()
|
|
193
|
+
.catch(() => "");
|
|
194
|
+
if (!currentText) {
|
|
195
|
+
console.log(describeWriteResult({ action: "kept", path: paths.memoryConfigPath }));
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
const current = parseMemoryConfigText(currentText, paths.memoryConfigPath);
|
|
199
|
+
const nextText = renderMemoryConfig({
|
|
200
|
+
enabled: current.enabled ?? true,
|
|
201
|
+
defaultSearchLimit: current.defaultSearchLimit,
|
|
202
|
+
});
|
|
203
|
+
if (currentText.trim() === nextText.trim()) {
|
|
204
|
+
console.log(describeWriteResult({ action: "kept", path: paths.memoryConfigPath }));
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
await Bun.write(paths.memoryConfigPath, nextText);
|
|
208
|
+
console.log(describeWriteResult({ action: "updated", path: paths.memoryConfigPath }));
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
const memoryReviewerCmd = defineCommand({
|
|
212
|
+
meta: {
|
|
213
|
+
name: "memory-reviewer",
|
|
214
|
+
description: "Manage the memory-reviewer agent.",
|
|
215
|
+
},
|
|
216
|
+
subCommands: {
|
|
217
|
+
set: memoryReviewerSet,
|
|
218
|
+
unset: memoryReviewerUnset,
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
export default defineCommand({
|
|
222
|
+
meta: {
|
|
223
|
+
name: "agent",
|
|
224
|
+
description: "Manage agent model overrides.",
|
|
225
|
+
},
|
|
226
|
+
subCommands: {
|
|
227
|
+
guardian: guardianCmd,
|
|
228
|
+
"memory-reviewer": memoryReviewerCmd,
|
|
229
|
+
},
|
|
230
|
+
});
|
|
231
|
+
function parseModelArg(value, operation) {
|
|
232
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
233
|
+
throw new Error(`model argument required for ${operation}`);
|
|
234
|
+
}
|
|
235
|
+
const trimmed = value.trim();
|
|
236
|
+
if (trimmed.includes(":")) {
|
|
237
|
+
const lastColon = trimmed.lastIndexOf(":");
|
|
238
|
+
const model = trimmed.slice(0, lastColon);
|
|
239
|
+
const variant = trimmed.slice(lastColon + 1);
|
|
240
|
+
if (!model.includes("/")) {
|
|
241
|
+
throw new Error(`model must be in provider/model-id format, got: ${trimmed}`);
|
|
242
|
+
}
|
|
243
|
+
return { model, variant };
|
|
244
|
+
}
|
|
245
|
+
if (!trimmed.includes("/")) {
|
|
246
|
+
throw new Error(`model must be in provider/model-id format, got: ${trimmed}`);
|
|
247
|
+
}
|
|
248
|
+
return { model: trimmed };
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.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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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { GuardianPlugin } from "./plugins/guardian.js";
|
|
2
|
-
export { MemoryPlugin } from "./plugins/memory.js";
|
|
1
|
+
export { GuardianPlugin } from "./plugins/guardian/index.js";
|
|
2
|
+
export { MemoryPlugin } from "./plugins/memory/index.js";
|
|
3
3
|
export { SecretsRedactionPlugin } from "./plugins/secrets-redaction.js";
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
// START_CHANGE_SUMMARY
|
|
17
17
|
// LAST_CHANGE: [v0.3.0 - Added SecretsRedactionPlugin for secret redaction in LLM requests.]
|
|
18
18
|
// END_CHANGE_SUMMARY
|
|
19
|
-
export { GuardianPlugin } from "./plugins/guardian.js";
|
|
20
|
-
export { MemoryPlugin } from "./plugins/memory.js";
|
|
19
|
+
export { GuardianPlugin } from "./plugins/guardian/index.js";
|
|
20
|
+
export { MemoryPlugin } from "./plugins/memory/index.js";
|
|
21
21
|
export { SecretsRedactionPlugin } from "./plugins/secrets-redaction.js";
|
|
22
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,iBAAiB;AACjB,wBAAwB;AACxB,wFAAwF;AACxF,8FAA8F;AAC9F,gGAAgG;AAChG,4EAA4E;AAC5E,iBAAiB;AACjB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,oHAAoH;AACpH,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,+FAA+F;AAC/F,qBAAqB;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,iBAAiB;AACjB,wBAAwB;AACxB,wFAAwF;AACxF,8FAA8F;AAC9F,gGAAgG;AAChG,4EAA4E;AAC5E,iBAAiB;AACjB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,oHAAoH;AACpH,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,+FAA+F;AAC/F,qBAAqB;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC"}
|
package/dist/lib/opencode.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ export type ResolvedPaths = {
|
|
|
16
16
|
guardianAlternatePaths: string[];
|
|
17
17
|
memoryConfigPath: string;
|
|
18
18
|
memoryConfigAlternates: string[];
|
|
19
|
+
secretsRedactionConfigPath: string;
|
|
20
|
+
secretsRedactionConfigAlternates: string[];
|
|
19
21
|
};
|
|
20
22
|
export type GuardianConfigOverrides = {
|
|
21
23
|
model?: string;
|
|
@@ -55,6 +57,13 @@ export type InstallationInspection = {
|
|
|
55
57
|
parseError?: string;
|
|
56
58
|
overrides?: MemoryConfigOverrides;
|
|
57
59
|
};
|
|
60
|
+
secretsRedaction: {
|
|
61
|
+
path: string;
|
|
62
|
+
exists: boolean;
|
|
63
|
+
alternates: string[];
|
|
64
|
+
managed: boolean;
|
|
65
|
+
parseError?: string;
|
|
66
|
+
};
|
|
58
67
|
warnings: string[];
|
|
59
68
|
problems: string[];
|
|
60
69
|
};
|
|
@@ -85,5 +94,13 @@ export declare function installMemoryConfig(paths: ResolvedPaths, options: {
|
|
|
85
94
|
export declare function syncMemoryConfig(paths: ResolvedPaths, options: {
|
|
86
95
|
force: boolean;
|
|
87
96
|
}): Promise<WriteResult>;
|
|
97
|
+
export declare function renderSecretsRedactionConfig(): string;
|
|
98
|
+
export declare function parseSecretsRedactionConfigText(text: string, _filePath: string): Record<string, unknown>;
|
|
99
|
+
export declare function installSecretsRedactionConfig(paths: ResolvedPaths, options: {
|
|
100
|
+
force: boolean;
|
|
101
|
+
}): Promise<WriteResult>;
|
|
102
|
+
export declare function syncSecretsRedactionConfig(paths: ResolvedPaths, options: {
|
|
103
|
+
force: boolean;
|
|
104
|
+
}): Promise<WriteResult>;
|
|
88
105
|
export declare function inspectInstallation(paths: ResolvedPaths): Promise<InstallationInspection>;
|
|
89
106
|
export declare function describeWriteResult(result: WriteResult): string;
|
package/dist/lib/opencode.js
CHANGED
|
@@ -50,6 +50,10 @@ const DEFAULT_GUARDIAN_APPROVAL_RISK_THRESHOLD = 80;
|
|
|
50
50
|
const GUARDIAN_CONFIG_FILE_NAMES = ["guardian.jsonc", "guardian.json"];
|
|
51
51
|
const MEMORY_CONFIG_FILE_NAMES = ["memory.jsonc", "memory.json"];
|
|
52
52
|
const OPENCODE_CONFIG_FILE_NAMES = ["opencode.json", "opencode.jsonc"];
|
|
53
|
+
const SECRETS_REDACTION_CONFIG_FILE_NAMES = [
|
|
54
|
+
"secrets-redaction.config.json",
|
|
55
|
+
"secrets-redaction.config.jsonc",
|
|
56
|
+
];
|
|
53
57
|
const JSON_FORMAT = {
|
|
54
58
|
insertSpaces: true,
|
|
55
59
|
tabSize: 2,
|
|
@@ -65,6 +69,7 @@ export async function resolvePaths(options) {
|
|
|
65
69
|
const opencodeSelection = await selectPrimaryPath(OPENCODE_CONFIG_FILE_NAMES.map((name) => join(opencodeBaseDir, name)));
|
|
66
70
|
const guardianSelection = await selectPrimaryPath(GUARDIAN_CONFIG_FILE_NAMES.map((name) => join(vvocBaseDir, name)));
|
|
67
71
|
const memorySelection = await selectPrimaryPath(MEMORY_CONFIG_FILE_NAMES.map((name) => join(vvocBaseDir, name)));
|
|
72
|
+
const secretsRedactionSelection = await selectPrimaryPath(SECRETS_REDACTION_CONFIG_FILE_NAMES.map((name) => join(vvocBaseDir, name)));
|
|
68
73
|
return {
|
|
69
74
|
scope: options.scope,
|
|
70
75
|
cwd: options.cwd,
|
|
@@ -77,6 +82,8 @@ export async function resolvePaths(options) {
|
|
|
77
82
|
guardianAlternatePaths: guardianSelection.alternates,
|
|
78
83
|
memoryConfigPath: memorySelection.primary,
|
|
79
84
|
memoryConfigAlternates: memorySelection.alternates,
|
|
85
|
+
secretsRedactionConfigPath: secretsRedactionSelection.primary,
|
|
86
|
+
secretsRedactionConfigAlternates: secretsRedactionSelection.alternates,
|
|
80
87
|
};
|
|
81
88
|
}
|
|
82
89
|
// END_BLOCK_RESOLVE_CONFIG_PATHS
|
|
@@ -250,6 +257,79 @@ export async function syncMemoryConfig(paths, options) {
|
|
|
250
257
|
return { action: "updated", path: paths.memoryConfigPath };
|
|
251
258
|
}
|
|
252
259
|
// END_BLOCK_INSTALL_MEMORY_CONFIG
|
|
260
|
+
// START_BLOCK_INSTALL_SECRETS_REDACTION_CONFIG
|
|
261
|
+
export function renderSecretsRedactionConfig() {
|
|
262
|
+
const lines = [
|
|
263
|
+
"// Managed by vvoc.",
|
|
264
|
+
"// `vvoc sync` rewrites files with this marker while preserving current values.",
|
|
265
|
+
"// Remove this header if you want to manage the file manually.",
|
|
266
|
+
"",
|
|
267
|
+
"{",
|
|
268
|
+
' "enabled": true,',
|
|
269
|
+
' "secret": "${VVOC_SECRET}",',
|
|
270
|
+
' "ttlMs": 3600000,',
|
|
271
|
+
' "maxMappings": 10000,',
|
|
272
|
+
' "patterns": {',
|
|
273
|
+
' "keywords": [],',
|
|
274
|
+
' "regex": [],',
|
|
275
|
+
' "builtin": ["email", "uuid", "ipv4", "mac", "openai_key", "anthropic_key", "github_token", "aws_access_key", "stripe_key", "bearer_token", "bearer_dot", "syn_key", "hex_token"],',
|
|
276
|
+
' "exclude": []',
|
|
277
|
+
" },",
|
|
278
|
+
' "debug": false',
|
|
279
|
+
"}",
|
|
280
|
+
];
|
|
281
|
+
return `${lines.join("\n")}\n`;
|
|
282
|
+
}
|
|
283
|
+
export function parseSecretsRedactionConfigText(text, _filePath) {
|
|
284
|
+
const errors = [];
|
|
285
|
+
const result = parse(text, errors, { allowTrailingComma: true });
|
|
286
|
+
if (errors.length > 0) {
|
|
287
|
+
throw new Error(`parse error at offset ${errors[0].offset}`);
|
|
288
|
+
}
|
|
289
|
+
if (typeof result !== "object" || result === null) {
|
|
290
|
+
throw new Error("root must be an object");
|
|
291
|
+
}
|
|
292
|
+
return result;
|
|
293
|
+
}
|
|
294
|
+
export async function installSecretsRedactionConfig(paths, options) {
|
|
295
|
+
const currentText = await readOptionalText(paths.secretsRedactionConfigPath);
|
|
296
|
+
if (!currentText) {
|
|
297
|
+
await writeText(paths.secretsRedactionConfigPath, renderSecretsRedactionConfig());
|
|
298
|
+
return { action: "created", path: paths.secretsRedactionConfigPath };
|
|
299
|
+
}
|
|
300
|
+
if (!options.force) {
|
|
301
|
+
if (!isManagedFile(currentText)) {
|
|
302
|
+
return {
|
|
303
|
+
action: "skipped",
|
|
304
|
+
path: paths.secretsRedactionConfigPath,
|
|
305
|
+
reason: "existing file is not managed by vvoc",
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
return { action: "kept", path: paths.secretsRedactionConfigPath };
|
|
309
|
+
}
|
|
310
|
+
return syncSecretsRedactionConfig(paths, options);
|
|
311
|
+
}
|
|
312
|
+
export async function syncSecretsRedactionConfig(paths, options) {
|
|
313
|
+
const currentText = await readOptionalText(paths.secretsRedactionConfigPath);
|
|
314
|
+
if (!currentText) {
|
|
315
|
+
await writeText(paths.secretsRedactionConfigPath, renderSecretsRedactionConfig());
|
|
316
|
+
return { action: "created", path: paths.secretsRedactionConfigPath };
|
|
317
|
+
}
|
|
318
|
+
if (!options.force && !isManagedFile(currentText)) {
|
|
319
|
+
return {
|
|
320
|
+
action: "skipped",
|
|
321
|
+
path: paths.secretsRedactionConfigPath,
|
|
322
|
+
reason: "existing file is not managed by vvoc",
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
const nextText = renderSecretsRedactionConfig();
|
|
326
|
+
if (currentText === nextText) {
|
|
327
|
+
return { action: "kept", path: paths.secretsRedactionConfigPath };
|
|
328
|
+
}
|
|
329
|
+
await writeText(paths.secretsRedactionConfigPath, nextText);
|
|
330
|
+
return { action: "updated", path: paths.secretsRedactionConfigPath };
|
|
331
|
+
}
|
|
332
|
+
// END_BLOCK_INSTALL_SECRETS_REDACTION_CONFIG
|
|
253
333
|
// START_BLOCK_INSPECT_INSTALLATION_STATE
|
|
254
334
|
export async function inspectInstallation(paths) {
|
|
255
335
|
const warnings = [];
|
|
@@ -263,6 +343,9 @@ export async function inspectInstallation(paths) {
|
|
|
263
343
|
if (paths.memoryConfigAlternates.length > 0) {
|
|
264
344
|
warnings.push(`multiple Memory config files exist: ${[paths.memoryConfigPath, ...paths.memoryConfigAlternates].join(", ")}`);
|
|
265
345
|
}
|
|
346
|
+
if (paths.secretsRedactionConfigAlternates.length > 0) {
|
|
347
|
+
warnings.push(`multiple SecretsRedaction config files exist: ${[paths.secretsRedactionConfigPath, ...paths.secretsRedactionConfigAlternates].join(", ")}`);
|
|
348
|
+
}
|
|
266
349
|
const opencodeText = await readOptionalText(paths.opencodeConfigPath);
|
|
267
350
|
let opencodeParseError;
|
|
268
351
|
let plugins = [];
|
|
@@ -304,6 +387,20 @@ export async function inspectInstallation(paths) {
|
|
|
304
387
|
problems.push(memoryParseError);
|
|
305
388
|
}
|
|
306
389
|
}
|
|
390
|
+
const secretsRedactionText = await readOptionalText(paths.secretsRedactionConfigPath);
|
|
391
|
+
let secretsRedactionParseError;
|
|
392
|
+
const secretsRedactionManaged = secretsRedactionText
|
|
393
|
+
? isManagedFile(secretsRedactionText)
|
|
394
|
+
: false;
|
|
395
|
+
if (secretsRedactionText) {
|
|
396
|
+
try {
|
|
397
|
+
parseSecretsRedactionConfigText(secretsRedactionText, paths.secretsRedactionConfigPath);
|
|
398
|
+
}
|
|
399
|
+
catch (error) {
|
|
400
|
+
secretsRedactionParseError = error instanceof Error ? error.message : String(error);
|
|
401
|
+
problems.push(secretsRedactionParseError);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
307
404
|
if (!pluginConfigured) {
|
|
308
405
|
problems.push(`${PACKAGE_NAME} is not configured in ${paths.opencodeConfigPath}`);
|
|
309
406
|
}
|
|
@@ -333,6 +430,13 @@ export async function inspectInstallation(paths) {
|
|
|
333
430
|
parseError: memoryParseError,
|
|
334
431
|
overrides: memoryOverrides,
|
|
335
432
|
},
|
|
433
|
+
secretsRedaction: {
|
|
434
|
+
path: paths.secretsRedactionConfigPath,
|
|
435
|
+
exists: Boolean(secretsRedactionText),
|
|
436
|
+
alternates: paths.secretsRedactionConfigAlternates,
|
|
437
|
+
managed: secretsRedactionManaged,
|
|
438
|
+
parseError: secretsRedactionParseError,
|
|
439
|
+
},
|
|
336
440
|
warnings,
|
|
337
441
|
problems,
|
|
338
442
|
};
|