@osovv/vv-opencode 0.4.1 → 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/dist/cli.js CHANGED
@@ -20,11 +20,16 @@
20
20
  // END_CHANGE_SUMMARY
21
21
  import { defineCommand, runMain } from "citty";
22
22
  import agent from "./commands/agent.js";
23
+ import completion from "./commands/completion.js";
24
+ import config from "./commands/config.js";
23
25
  import doctor from "./commands/doctor.js";
24
26
  import guardian from "./commands/guardian.js";
27
+ import init from "./commands/init.js";
25
28
  import install from "./commands/install.js";
29
+ import plugin from "./commands/plugin.js";
26
30
  import status from "./commands/status.js";
27
31
  import sync from "./commands/sync.js";
32
+ import upgrade from "./commands/upgrade.js";
28
33
  import version from "./commands/version.js";
29
34
  import { getPackageVersion } from "./lib/package.js";
30
35
  // START_BLOCK_BUILD_CLI_METADATA
@@ -37,11 +42,16 @@ const main = defineCommand({
37
42
  },
38
43
  subCommands: {
39
44
  agent,
40
- install,
41
- sync,
42
- status,
45
+ completion,
46
+ config,
43
47
  doctor,
44
48
  guardian,
49
+ init,
50
+ install,
51
+ plugin,
52
+ status,
53
+ sync,
54
+ upgrade,
45
55
  version,
46
56
  },
47
57
  });
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,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"}
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,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,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,UAAU;QACV,MAAM;QACN,MAAM;QACN,QAAQ;QACR,IAAI;QACJ,OAAO;QACP,MAAM;QACN,MAAM;QACN,IAAI;QACJ,OAAO;QACP,OAAO;KACR;CACF,CAAC,CAAC;AACH,+BAA+B;AAE/B,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -218,6 +218,44 @@ const memoryReviewerCmd = defineCommand({
218
218
  unset: memoryReviewerUnset,
219
219
  },
220
220
  });
221
+ const agentList = defineCommand({
222
+ meta: {
223
+ name: "list",
224
+ description: "List configured agent models.",
225
+ },
226
+ args: {
227
+ scope: {
228
+ type: "enum",
229
+ options: ["global", "project"],
230
+ default: "global",
231
+ description: "Show global or project config.",
232
+ },
233
+ "config-dir": {
234
+ type: "string",
235
+ description: "Override the global config home.",
236
+ },
237
+ },
238
+ async run({ args }) {
239
+ const scope = args.scope === "project" ? "project" : "global";
240
+ const configDir = typeof args["config-dir"] === "string" ? args["config-dir"] : undefined;
241
+ const paths = await resolvePaths({ scope: scope, cwd: process.cwd(), configDir });
242
+ const guardianText = await Bun.file(paths.guardianConfigPath)
243
+ .text()
244
+ .catch(() => "");
245
+ const memoryText = await Bun.file(paths.memoryConfigPath)
246
+ .text()
247
+ .catch(() => "");
248
+ const guardianConfig = guardianText
249
+ ? parseGuardianConfigText(guardianText, paths.guardianConfigPath)
250
+ : {};
251
+ const memoryConfig = memoryText
252
+ ? parseMemoryConfigText(memoryText, paths.memoryConfigPath)
253
+ : {};
254
+ console.log(`Agent models (${scope}):`);
255
+ console.log(` guardian: ${formatAgentModel(guardianConfig.model, guardianConfig.variant)}`);
256
+ console.log(` memory-reviewer: ${formatAgentModel(memoryConfig.reviewerModel, memoryConfig.reviewerVariant)}`);
257
+ },
258
+ });
221
259
  export default defineCommand({
222
260
  meta: {
223
261
  name: "agent",
@@ -226,8 +264,14 @@ export default defineCommand({
226
264
  subCommands: {
227
265
  guardian: guardianCmd,
228
266
  "memory-reviewer": memoryReviewerCmd,
267
+ list: agentList,
229
268
  },
230
269
  });
270
+ function formatAgentModel(model, variant) {
271
+ if (!model)
272
+ return "default";
273
+ return variant ? `${model}:${variant}` : model;
274
+ }
231
275
  function parseModelArg(value, operation) {
232
276
  if (typeof value !== "string" || !value.trim()) {
233
277
  throw new Error(`model argument required for ${operation}`);
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,iBAAiB;AACjB,wBAAwB;AACxB,mFAAmF;AACnF,oFAAoF;AACpF,uEAAuE;AACvE,4BAA4B;AAC5B,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,mCAAmC;AACnC,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,6FAA6F;AAC7F,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,YAAY,GAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GAEnB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,GAAG,aAAa,CAAC;IAChC,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,wCAAwC;KACtD;IACD,IAAI,EAAE;QACJ,KAAK,EAAE;YACL,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,8CAA8C;SAC5D;QACD,KAAK,EAAE;YACL,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC9B,OAAO,EAAE,QAAQ;YACjB,WAAW,EAAE,iCAAiC;SAC/C;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kCAAkC;SAChD;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAE5D,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,EAAE,KAAK,EAAE,KAAc,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAE3F,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;aACzD,IAAI,EAAE;aACN,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnB,MAAM,OAAO,GAAG,WAAW;YACzB,CAAC,CAAC,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,kBAAkB,CAAC;YAChE,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAE9C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QAED,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CACT,mBAAmB,CAAC;YAClB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAC3C,IAAI,EAAE,KAAK,CAAC,kBAAkB;SAC/B,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,aAAa,CAAC;IAClC,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,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,iCAAiC;SAC/C;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kCAAkC;SAChD;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,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,EAAE,KAAK,EAAE,KAAc,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAE3F,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;aACzD,IAAI,EAAE;aACN,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnB,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC/E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QAC9D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QAED,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IAC1F,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,aAAa,CAAC;IAChC,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,4BAA4B;KAC1C;IACD,WAAW,EAAE;QACX,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,aAAa;KACrB;CACF,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,aAAa,CAAC;IACtC,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,+CAA+C;KAC7D;IACD,IAAI,EAAE;QACJ,KAAK,EAAE;YACL,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,8CAA8C;SAC5D;QACD,KAAK,EAAE;YACL,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC9B,OAAO,EAAE,QAAQ;YACjB,WAAW,EAAE,iCAAiC;SAC/C;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kCAAkC;SAChD;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAE5D,MAAM,SAAS,GAA0B,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAClE,IAAI,OAAO,EAAE,CAAC;YACZ,SAAS,CAAC,eAAe,GAAG,OAAO,CAAC;QACtC,CAAC;QAED,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,EAAE,KAAK,EAAE,KAAc,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAE3F,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;aACvD,IAAI,EAAE;aACN,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnB,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,WAAW,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,MAAM,MAAM,GAA0B;YACpC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,aAAa,EAAE,KAAK;YACpB,eAAe,EAAE,OAAO;SACzB,CAAC;QAEF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YACnF,OAAO;QACT,CAAC;QAED,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CACT,mBAAmB,CAAC;YAClB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAC3C,IAAI,EAAE,KAAK,CAAC,gBAAgB;SAC7B,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,aAAa,CAAC;IACxC,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,kDAAkD;KAChE;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,iCAAiC;SAC/C;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kCAAkC;SAChD;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,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,EAAE,KAAK,EAAE,KAAc,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAE3F,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;aACvD,IAAI,EAAE;aACN,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnB,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YACnF,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,qBAAqB,CAAC,WAAW,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,kBAAkB,CAAC;YAClC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;SAC/C,CAAC,CAAC;QAEH,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YACnF,OAAO;QACT,CAAC;QAED,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,aAAa,CAAC;IACtC,IAAI,EAAE;QACJ,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,mCAAmC;KACjD;IACD,WAAW,EAAE;QACX,GAAG,EAAE,iBAAiB;QACtB,KAAK,EAAE,mBAAmB;KAC3B;CACF,CAAC,CAAC;AAEH,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,+BAA+B;KAC7C;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,WAAW;QACrB,iBAAiB,EAAE,iBAAiB;KACrC;CACF,CAAC,CAAC;AAEH,SAAS,aAAa,CAAC,KAAc,EAAE,SAAiB;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,mDAAmD,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,mDAAmD,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ declare const _default: import("citty").CommandDef<{
2
+ readonly shell: {
3
+ readonly type: "positional";
4
+ readonly required: true;
5
+ readonly description: "Shell type: bash, zsh, or fish.";
6
+ };
7
+ }>;
8
+ export default _default;
9
+ export declare function generateBashCompletion(): string;
10
+ export declare function generateZshCompletion(): string;
11
+ export declare function generateFishCompletion(): string;
@@ -0,0 +1,117 @@
1
+ // FILE: src/commands/completion.ts
2
+ // VERSION: 0.4.0
3
+ // START_MODULE_CONTRACT
4
+ // PURPOSE: Generate and print shell completion scripts for bash, zsh, and fish.
5
+ // SCOPE: Shell type argument validation, completion script generation, and stdout output.
6
+ // DEPENDS: [citty]
7
+ // LINKS: [M-CLI-COMPLETION, M-CLI-COMMANDS]
8
+ // ROLE: RUNTIME
9
+ // MAP_MODE: EXPORTS
10
+ // END_MODULE_CONTRACT
11
+ //
12
+ // START_MODULE_MAP
13
+ // default - Completion command definition for vvoc.
14
+ // generateBashCompletion - Generate bash completion script.
15
+ // generateZshCompletion - Generate zsh completion script.
16
+ // generateFishCompletion - Generate fish completion script.
17
+ // END_MODULE_MAP
18
+ //
19
+ // START_CHANGE_SUMMARY
20
+ // LAST_CHANGE: [v0.4.0 - Initial GRACE implementation for shell completion command.]
21
+ // END_CHANGE_SUMMARY
22
+ import { defineCommand } from "citty";
23
+ const VVOC_COMMANDS = [
24
+ "agent",
25
+ "config",
26
+ "doctor",
27
+ "guardian",
28
+ "install",
29
+ "plugin",
30
+ "status",
31
+ "sync",
32
+ "upgrade",
33
+ "validate",
34
+ "version",
35
+ "list",
36
+ ];
37
+ export default defineCommand({
38
+ meta: {
39
+ name: "completion",
40
+ description: "Generate shell completion scripts.",
41
+ },
42
+ args: {
43
+ shell: {
44
+ type: "positional",
45
+ required: true,
46
+ description: "Shell type: bash, zsh, or fish.",
47
+ },
48
+ },
49
+ async run({ args }) {
50
+ // START_BLOCK_RUN_COMPLETION
51
+ const shell = String(args.shell).toLowerCase();
52
+ switch (shell) {
53
+ case "bash":
54
+ process.stdout.write(generateBashCompletion());
55
+ break;
56
+ case "zsh":
57
+ process.stdout.write(generateZshCompletion());
58
+ break;
59
+ case "fish":
60
+ process.stdout.write(generateFishCompletion());
61
+ break;
62
+ default:
63
+ console.error("Unsupported shell: " + shell + ". Use bash, zsh, or fish.");
64
+ process.exitCode = 1;
65
+ }
66
+ // END_BLOCK_RUN_COMPLETION
67
+ },
68
+ });
69
+ export function generateBashCompletion() {
70
+ const cmds = VVOC_COMMANDS.join(" ");
71
+ return ("# bash completion for vvoc\n" +
72
+ "_vvoc() {\n" +
73
+ " local cur prev words cword\n" +
74
+ " _init_completion || return\n" +
75
+ "\n" +
76
+ ' case "${words[0]}" in\n' +
77
+ " vvoc)\n" +
78
+ " _vvoc_commands\n" +
79
+ " ;;\n" +
80
+ " *)\n" +
81
+ " ;;\n" +
82
+ " esac\n" +
83
+ "}\n" +
84
+ "\n" +
85
+ "_vvoc_commands() {\n" +
86
+ ' local commands="' +
87
+ cmds +
88
+ '"\n' +
89
+ ' _completions=($(compgen -W "$commands" -- "$cur"))\n' +
90
+ ' COMPREPLY=("${_completions[@]}")\n' +
91
+ "}\n" +
92
+ "\n" +
93
+ "complete -F _vvoc vvoc\n");
94
+ }
95
+ export function generateZshCompletion() {
96
+ const lines = [
97
+ "# zsh completion for vvoc",
98
+ "",
99
+ "_vvoc() {",
100
+ " local -a commands",
101
+ " commands=(",
102
+ ];
103
+ for (const cmd of VVOC_COMMANDS) {
104
+ lines.push(' "' + cmd + '"');
105
+ }
106
+ lines.push(" )", "", " _arguments -C \\", ' "-s[shell type]" \\', ' "1: :(' + VVOC_COMMANDS.join(" ") + ')" \\', ' "*::arg:->args"', "", " case $line[1] in", " config)", " _vvoc_config_cmds", " ;;", " plugin)", " _vvoc_plugin_cmds", " ;;", " esac", "}", "", "_vvoc_config_cmds() {", " local -a config_commands", " config_commands=(validate)", ' _arguments "1: :(validate)"', "}", "", "_vvoc_plugin_cmds() {", " local -a plugin_commands", " plugin_commands=(list)", ' _arguments "1: :(list)"', "}", "", "compdef _vvoc vvoc");
107
+ return lines.join("\n") + "\n";
108
+ }
109
+ export function generateFishCompletion() {
110
+ const lines = ["# fish completion for vvoc", "", "function __vvoc_commands"];
111
+ for (const cmd of VVOC_COMMANDS) {
112
+ lines.push(" echo " + cmd);
113
+ }
114
+ lines.push("end", "", "function __vvoc_config_cmds", " echo validate", "end", "", "function __vvoc_plugin_cmds", " echo list", "end", "", 'complete -c vvoc -f -a "(__vvoc_commands)"', 'complete -c vvoc -n "__fish_seen_subcommand_from config" -f -a "(__vvoc_config_cmds)"', 'complete -c vvoc -n "__fish_seen_subcommand_from plugin" -f -a "(__vvoc_plugin_cmds)"');
115
+ return lines.join("\n") + "\n";
116
+ }
117
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,iBAAiB;AACjB,wBAAwB;AACxB,kFAAkF;AAClF,4FAA4F;AAC5F,qBAAqB;AACrB,8CAA8C;AAC9C,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,sDAAsD;AACtD,8DAA8D;AAC9D,4DAA4D;AAC5D,8DAA8D;AAC9D,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,uFAAuF;AACvF,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,aAAa,GAAG;IACpB,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;IACT,UAAU;IACV,SAAS;IACT,MAAM;CACP,CAAC;AAEF,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,oCAAoC;KAClD;IACD,IAAI,EAAE;QACJ,KAAK,EAAE;YACL,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,iCAAiC;SAC/C;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,6BAA6B;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAE/C,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,MAAM;gBACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC;gBAC/C,MAAM;YACR,KAAK,KAAK;gBACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC;gBAC9C,MAAM;YACR,KAAK,MAAM;gBACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC;gBAC/C,MAAM;YACR;gBACE,OAAO,CAAC,KAAK,CAAC,qBAAqB,GAAG,KAAK,GAAG,2BAA2B,CAAC,CAAC;gBAC3E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,2BAA2B;IAC7B,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,sBAAsB;IACpC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,CACL,8BAA8B;QAC9B,aAAa;QACb,gCAAgC;QAChC,gCAAgC;QAChC,IAAI;QACJ,2BAA2B;QAC3B,aAAa;QACb,wBAAwB;QACxB,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,UAAU;QACV,KAAK;QACL,IAAI;QACJ,sBAAsB;QACtB,oBAAoB;QACpB,IAAI;QACJ,KAAK;QACL,wDAAwD;QACxD,sCAAsC;QACtC,KAAK;QACL,IAAI;QACJ,0BAA0B,CAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,KAAK,GAAa;QACtB,2BAA2B;QAC3B,EAAE;QACF,WAAW;QACX,qBAAqB;QACrB,cAAc;KACf,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI,CACR,KAAK,EACL,EAAE,EACF,oBAAoB,EACpB,yBAAyB,EACzB,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,EAChD,qBAAqB,EACrB,EAAE,EACF,oBAAoB,EACpB,aAAa,EACb,yBAAyB,EACzB,UAAU,EACV,aAAa,EACb,yBAAyB,EACzB,UAAU,EACV,QAAQ,EACR,GAAG,EACH,EAAE,EACF,uBAAuB,EACvB,4BAA4B,EAC5B,8BAA8B,EAC9B,+BAA+B,EAC/B,GAAG,EACH,EAAE,EACF,uBAAuB,EACvB,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,GAAG,EACH,EAAE,EACF,oBAAoB,CACrB,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,MAAM,KAAK,GAAa,CAAC,4BAA4B,EAAE,EAAE,EAAE,0BAA0B,CAAC,CAAC;IAEvF,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,IAAI,CACR,KAAK,EACL,EAAE,EACF,6BAA6B,EAC7B,iBAAiB,EACjB,KAAK,EACL,EAAE,EACF,6BAA6B,EAC7B,aAAa,EACb,KAAK,EACL,EAAE,EACF,4CAA4C,EAC5C,uFAAuF,EACvF,uFAAuF,CACxF,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { type Scope } from "../lib/opencode.js";
2
+ type ConfigValidateResult = {
3
+ path: string;
4
+ valid: boolean;
5
+ errors: string[];
6
+ };
7
+ export type { ConfigValidateResult };
8
+ declare const _default: import("citty").CommandDef<{
9
+ readonly scope: {
10
+ readonly type: "enum";
11
+ readonly options: ["global", "project", "all"];
12
+ readonly default: "all";
13
+ readonly description: "Validate global, project, or all config files.";
14
+ };
15
+ readonly "config-dir": {
16
+ readonly type: "string";
17
+ readonly description: "Override the global config home used for vvoc/";
18
+ };
19
+ readonly "guardian-only": {
20
+ readonly type: "boolean";
21
+ readonly default: false;
22
+ readonly description: "Only validate guardian.jsonc.";
23
+ };
24
+ readonly "memory-only": {
25
+ readonly type: "boolean";
26
+ readonly default: false;
27
+ readonly description: "Only validate memory.jsonc.";
28
+ };
29
+ }>;
30
+ export default _default;
31
+ export declare function validateGuardianConfig(scope: Scope, cwd: string, configDir?: string): Promise<ConfigValidateResult>;
32
+ export declare function validateMemoryConfig(scope: Scope, cwd: string, configDir?: string): Promise<ConfigValidateResult>;
33
+ export declare function validateGuardianConfigContent(content: string, filePath: string): ConfigValidateResult;
34
+ export declare function validateGuardianConfigFile(filePath: string): ConfigValidateResult;
35
+ export declare function validateMemoryConfigContent(content: string, filePath: string): ConfigValidateResult;
36
+ export declare function validateMemoryConfigFile(filePath: string): ConfigValidateResult;
@@ -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,2 @@
1
+ declare const _default: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ export default _default;
@@ -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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"}
@@ -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;
@@ -0,0 +1,123 @@
1
+ // FILE: src/commands/plugin-list.ts
2
+ // VERSION: 0.4.0
3
+ // START_MODULE_CONTRACT
4
+ // PURPOSE: Display all installed OpenCode plugins with their status (enabled/disabled) and source paths.
5
+ // SCOPE: Scope parsing, plugin array inspection, table rendering, and graceful handling of missing config.
6
+ // DEPENDS: [citty, src/lib/opencode.js]
7
+ // LINKS: [M-CLI-PLUGIN-LIST, M-CLI-CONFIG]
8
+ // ROLE: RUNTIME
9
+ // MAP_MODE: EXPORTS
10
+ // END_MODULE_CONTRACT
11
+ //
12
+ // START_MODULE_MAP
13
+ // default - PluginList command definition for vvoc.
14
+ // listPlugins - Returns the list of plugins from OpenCode config.
15
+ // renderPluginTable - Renders a table of plugins with name, source, and enabled status.
16
+ // END_MODULE_MAP
17
+ //
18
+ // START_CHANGE_SUMMARY
19
+ // LAST_CHANGE: [v0.4.0 - Initial GRACE implementation for plugin list command.]
20
+ // END_CHANGE_SUMMARY
21
+ import { defineCommand } from "citty";
22
+ import { resolvePaths } from "../lib/opencode.js";
23
+ export default defineCommand({
24
+ meta: {
25
+ name: "list",
26
+ description: "List installed OpenCode plugins.",
27
+ },
28
+ args: {
29
+ scope: {
30
+ type: "enum",
31
+ options: ["global", "project"],
32
+ default: "global",
33
+ description: "List plugins from global or project config.",
34
+ },
35
+ "config-dir": {
36
+ type: "string",
37
+ description: "Override the global config home used for opencode/",
38
+ },
39
+ verbose: {
40
+ type: "boolean",
41
+ default: false,
42
+ description: "Show additional details including config path.",
43
+ },
44
+ },
45
+ async run({ args }) {
46
+ // START_BLOCK_RUN_PLUGIN_LIST
47
+ const scope = args.scope === "project" ? "project" : "global";
48
+ const configDir = typeof args["config-dir"] === "string" ? args["config-dir"] : undefined;
49
+ const verbose = args.verbose === true;
50
+ const cwd = process.cwd();
51
+ const paths = await resolvePaths({ scope, cwd, configDir });
52
+ const plugins = await listPlugins(scope, cwd, configDir);
53
+ if (verbose) {
54
+ console.log(`Scope: ${scope}`);
55
+ console.log(`OpenCode config: ${paths.opencodeConfigPath}`);
56
+ }
57
+ renderPluginTable(plugins);
58
+ // END_BLOCK_RUN_PLUGIN_LIST
59
+ },
60
+ });
61
+ export async function listPlugins(scope, cwd, configDir) {
62
+ const paths = await resolvePaths({ scope, cwd, configDir });
63
+ try {
64
+ const { readFileSync } = await import("node:fs");
65
+ const content = readFileSync(paths.opencodeConfigPath, "utf8");
66
+ const { parse } = await import("jsonc-parser");
67
+ const errors = [];
68
+ const parsed = parse(content, errors, { allowTrailingComma: true, disallowComments: false });
69
+ if (errors.length > 0 || typeof parsed !== "object" || parsed === null) {
70
+ return [];
71
+ }
72
+ const obj = parsed;
73
+ const pluginField = obj.plugin;
74
+ if (!Array.isArray(pluginField)) {
75
+ return [];
76
+ }
77
+ return pluginField
78
+ .filter((entry) => typeof entry === "string")
79
+ .map((specifier) => parsePluginSpecifier(specifier));
80
+ }
81
+ catch {
82
+ return [];
83
+ }
84
+ }
85
+ export function parsePluginSpecifier(specifier) {
86
+ const enabled = !specifier.startsWith("#");
87
+ const source = specifier.replace(/^#/, "").trim();
88
+ const lastSlash = source.lastIndexOf("/");
89
+ const versionIdx = lastSlash >= 0 ? source.indexOf("@", lastSlash + 1) : source.indexOf("@");
90
+ const nameSource = versionIdx > 0 ? source.slice(0, versionIdx) : source;
91
+ let name = nameSource;
92
+ if (nameSource.startsWith("@")) {
93
+ const parts = nameSource.split("/");
94
+ if (parts.length >= 2) {
95
+ name = `${parts[0]}/${parts[1]}`;
96
+ }
97
+ }
98
+ else if (nameSource.includes("/")) {
99
+ const idx = nameSource.lastIndexOf("/");
100
+ name = nameSource.slice(idx + 1);
101
+ }
102
+ return { name, source, enabled };
103
+ }
104
+ export function renderPluginTable(plugins) {
105
+ if (plugins.length === 0) {
106
+ console.log("No plugins configured.");
107
+ return;
108
+ }
109
+ const nameCol = "Name";
110
+ const sourceCol = "Source";
111
+ const statusCol = "Status";
112
+ const nameWidth = Math.max(nameCol.length, ...plugins.map((p) => p.name.length));
113
+ const sourceWidth = Math.max(sourceCol.length, ...plugins.map((p) => p.source.length));
114
+ const header = ` ${nameCol.padEnd(nameWidth)} ${sourceCol.padEnd(sourceWidth)} ${statusCol}`;
115
+ const separator = ` ${"-".repeat(nameWidth)} ${"-".repeat(sourceWidth)} ${"-".repeat(6)}`;
116
+ console.log(header);
117
+ console.log(separator);
118
+ for (const plugin of plugins) {
119
+ const status = plugin.enabled ? "enabled" : "disabled";
120
+ console.log(` ${plugin.name.padEnd(nameWidth)} ${plugin.source.padEnd(sourceWidth)} ${status}`);
121
+ }
122
+ }
123
+ //# sourceMappingURL=plugin-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-list.js","sourceRoot":"","sources":["../../src/commands/plugin-list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ export default _default;
@@ -0,0 +1,30 @@
1
+ // FILE: src/commands/plugin.ts
2
+ // VERSION: 0.4.0
3
+ // START_MODULE_CONTRACT
4
+ // PURPOSE: Group plugin-related subcommands (list) under the vvoc plugin parent command.
5
+ // SCOPE: Parent command definition and subcommand wiring.
6
+ // DEPENDS: [citty, src/commands/plugin-list.js]
7
+ // LINKS: [M-CLI-PLUGIN-LIST, M-CLI-COMMANDS]
8
+ // ROLE: RUNTIME
9
+ // MAP_MODE: EXPORTS
10
+ // END_MODULE_CONTRACT
11
+ //
12
+ // START_MODULE_MAP
13
+ // default - Plugin parent command grouping plugin subcommands.
14
+ // END_MODULE_MAP
15
+ //
16
+ // START_CHANGE_SUMMARY
17
+ // LAST_CHANGE: [v0.4.0 - Initial GRACE implementation for plugin parent command.]
18
+ // END_CHANGE_SUMMARY
19
+ import { defineCommand } from "citty";
20
+ import listCommand from "./plugin-list.js";
21
+ export default defineCommand({
22
+ meta: {
23
+ name: "plugin",
24
+ description: "Plugin management commands.",
25
+ },
26
+ subCommands: {
27
+ list: listCommand,
28
+ },
29
+ });
30
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,iBAAiB;AACjB,wBAAwB;AACxB,2FAA2F;AAC3F,4DAA4D;AAC5D,kDAAkD;AAClD,+CAA+C;AAC/C,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,iEAAiE;AACjE,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,oFAAoF;AACpF,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAE3C,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,6BAA6B;KAC3C;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;KAClB;CACF,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare const _default: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ export default _default;
3
+ export declare function fetchLatestVersion(): Promise<string | null>;
4
+ export declare function fetchChangelog(_fromVersion: string, _toVersion: string): Promise<string | null>;
5
+ export declare function printUpgradeStatus(currentVersion: string, latestVersion: string): void;
@@ -0,0 +1,125 @@
1
+ // FILE: src/commands/upgrade.ts
2
+ // VERSION: 0.4.0
3
+ // START_MODULE_CONTRACT
4
+ // PURPOSE: Check npm registry for the latest vvoc version and offer in-place upgrade with changelog.
5
+ // SCOPE: npm registry query, version comparison, changelog fetching, and user prompts.
6
+ // DEPENDS: [citty]
7
+ // LINKS: [M-CLI-UPGRADE]
8
+ // ROLE: RUNTIME
9
+ // MAP_MODE: EXPORTS
10
+ // END_MODULE_CONTRACT
11
+ //
12
+ // START_MODULE_MAP
13
+ // default - Upgrade command definition for vvoc.
14
+ // fetchLatestVersion - Query npm registry for latest version.
15
+ // fetchChangelog - Fetch changelog from npm registry.
16
+ // printUpgradeStatus - Print up-to-date or upgrade available message.
17
+ // END_MODULE_MAP
18
+ //
19
+ // START_CHANGE_SUMMARY
20
+ // LAST_CHANGE: [v0.4.0 - Initial GRACE implementation for upgrade command.]
21
+ // END_CHANGE_SUMMARY
22
+ import { defineCommand } from "citty";
23
+ const PACKAGE_NAME = "@osovv/vv-opencode";
24
+ const NPM_REGISTRY = "https://registry.npmjs.org";
25
+ export default defineCommand({
26
+ meta: {
27
+ name: "upgrade",
28
+ description: "Check for and perform upgrades.",
29
+ },
30
+ async run() {
31
+ // START_BLOCK_RUN_UPGRADE
32
+ try {
33
+ const latestVersion = await fetchLatestVersion();
34
+ const currentVersion = await getCurrentVersion();
35
+ if (!latestVersion) {
36
+ console.error("NETWORK_ERROR: Could not reach npm registry");
37
+ process.exitCode = 1;
38
+ return;
39
+ }
40
+ if (latestVersion === currentVersion) {
41
+ console.log(`Already at latest version: ${currentVersion}`);
42
+ return;
43
+ }
44
+ console.log(`Current version: ${currentVersion}`);
45
+ console.log(`Latest version: ${latestVersion}`);
46
+ console.log("Upgrade available!");
47
+ const changelog = await fetchChangelog(currentVersion, latestVersion);
48
+ if (changelog) {
49
+ console.log("\n--- Changelog ---");
50
+ console.log(changelog);
51
+ }
52
+ console.log("\nTo upgrade, run:");
53
+ console.log(` npm install -g ${PACKAGE_NAME}@${latestVersion}`);
54
+ }
55
+ catch (err) {
56
+ if (err instanceof Error && err.message === "NETWORK_ERROR") {
57
+ console.error("NETWORK_ERROR: Could not reach npm registry");
58
+ process.exitCode = 1;
59
+ }
60
+ else if (err instanceof Error && err.message === "ALREADY_LATEST") {
61
+ console.log("Already at latest version");
62
+ }
63
+ else {
64
+ console.error("Upgrade check failed:", err instanceof Error ? err.message : String(err));
65
+ process.exitCode = 1;
66
+ }
67
+ }
68
+ // END_BLOCK_RUN_UPGRADE
69
+ },
70
+ });
71
+ export async function fetchLatestVersion() {
72
+ try {
73
+ const url = `${NPM_REGISTRY}/${encodeURIComponent(PACKAGE_NAME)}/latest`;
74
+ const response = await fetch(url, {
75
+ method: "GET",
76
+ headers: { Accept: "application/json" },
77
+ });
78
+ if (!response.ok) {
79
+ return null;
80
+ }
81
+ const data = (await response.json());
82
+ return data.version ?? null;
83
+ }
84
+ catch {
85
+ return null;
86
+ }
87
+ }
88
+ export async function fetchChangelog(_fromVersion, _toVersion) {
89
+ try {
90
+ const url = `${NPM_REGISTRY}/${encodeURIComponent(PACKAGE_NAME)}`;
91
+ const response = await fetch(url, {
92
+ method: "GET",
93
+ headers: { Accept: "application/json" },
94
+ });
95
+ if (!response.ok) {
96
+ return null;
97
+ }
98
+ const data = (await response.json());
99
+ const latest = data["dist-tags"]?.latest;
100
+ if (!latest || !data.versions) {
101
+ return null;
102
+ }
103
+ const versionData = data.versions[latest];
104
+ return versionData?.description ?? null;
105
+ }
106
+ catch {
107
+ return null;
108
+ }
109
+ }
110
+ export function printUpgradeStatus(currentVersion, latestVersion) {
111
+ if (currentVersion === latestVersion) {
112
+ console.log(`Already at latest version: ${currentVersion}`);
113
+ }
114
+ else {
115
+ console.log(`Update available: ${currentVersion} -> ${latestVersion}`);
116
+ }
117
+ }
118
+ async function getCurrentVersion() {
119
+ const { readFileSync } = await import("node:fs");
120
+ const { resolve } = await import("path");
121
+ const packageJsonPath = resolve(process.cwd(), "package.json");
122
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
123
+ return packageJson.version ?? "0.0.0";
124
+ }
125
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osovv/vv-opencode",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "Portable OpenCode workflow plugins, explicit memory, and CLI tooling.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -57,6 +57,7 @@
57
57
  "prepare": "lefthook install --force"
58
58
  },
59
59
  "dependencies": {
60
+ "@clack/prompts": "^1.2.0",
60
61
  "@opencode-ai/plugin": "1.3.17",
61
62
  "@opencode-ai/sdk": "1.3.17",
62
63
  "citty": "0.2.2",