@osovv/vv-opencode 0.13.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +42 -35
  2. package/dist/commands/agent.js +23 -87
  3. package/dist/commands/agent.js.map +1 -1
  4. package/dist/commands/config-validate.d.ts +4 -24
  5. package/dist/commands/config-validate.js +52 -242
  6. package/dist/commands/config-validate.js.map +1 -1
  7. package/dist/commands/doctor.js +10 -9
  8. package/dist/commands/doctor.js.map +1 -1
  9. package/dist/commands/guardian.js +6 -13
  10. package/dist/commands/guardian.js.map +1 -1
  11. package/dist/commands/init.js +11 -15
  12. package/dist/commands/init.js.map +1 -1
  13. package/dist/commands/install.d.ts +1 -16
  14. package/dist/commands/install.js +8 -44
  15. package/dist/commands/install.js.map +1 -1
  16. package/dist/commands/status.js +9 -9
  17. package/dist/commands/status.js.map +1 -1
  18. package/dist/commands/sync.d.ts +1 -1
  19. package/dist/commands/sync.js +8 -10
  20. package/dist/commands/sync.js.map +1 -1
  21. package/dist/commands/upgrade.d.ts +21 -1
  22. package/dist/commands/upgrade.js +205 -51
  23. package/dist/commands/upgrade.js.map +1 -1
  24. package/dist/lib/opencode.d.ts +19 -52
  25. package/dist/lib/opencode.js +86 -336
  26. package/dist/lib/opencode.js.map +1 -1
  27. package/dist/lib/package.d.ts +2 -0
  28. package/dist/lib/package.js +14 -10
  29. package/dist/lib/package.js.map +1 -1
  30. package/dist/lib/vvoc-config.d.ts +209 -0
  31. package/dist/lib/vvoc-config.js +642 -0
  32. package/dist/lib/vvoc-config.js.map +1 -0
  33. package/dist/lib/vvoc-paths.d.ts +2 -0
  34. package/dist/lib/vvoc-paths.js +9 -3
  35. package/dist/lib/vvoc-paths.js.map +1 -1
  36. package/dist/plugins/guardian/index.js +24 -206
  37. package/dist/plugins/guardian/index.js.map +1 -1
  38. package/dist/plugins/memory/index.js +1 -1
  39. package/dist/plugins/memory/index.js.map +1 -1
  40. package/dist/plugins/memory-store.d.ts +2 -9
  41. package/dist/plugins/memory-store.js +20 -127
  42. package/dist/plugins/memory-store.js.map +1 -1
  43. package/dist/plugins/secrets-redaction/config.d.ts +3 -20
  44. package/dist/plugins/secrets-redaction/config.js +33 -134
  45. package/dist/plugins/secrets-redaction/config.js.map +1 -1
  46. package/package.json +3 -1
  47. package/schemas/vvoc/v1.json +94 -0
@@ -1,8 +1,8 @@
1
1
  // FILE: src/commands/install.ts
2
- // VERSION: 0.2.9
2
+ // VERSION: 0.3.0
3
3
  // START_MODULE_CONTRACT
4
- // PURPOSE: Install vv-opencode into OpenCode config and bootstrap vvoc-managed config files.
5
- // SCOPE: Scope parsing, path resolution, pinned plugin registration, managed OpenCode agent registration, managed agent prompt scaffolding, and initial Guardian/Memory config creation.
4
+ // PURPOSE: Install vv-opencode into OpenCode config and bootstrap the canonical vvoc.json config plus managed prompts.
5
+ // SCOPE: Scope parsing, path resolution, pinned plugin registration, managed OpenCode agent registration, managed agent prompt scaffolding, and canonical vvoc config creation.
6
6
  // DEPENDS: [citty, src/lib/opencode.ts]
7
7
  // LINKS: [M-CLI-COMMANDS, M-CLI-CONFIG]
8
8
  // ROLE: RUNTIME
@@ -14,10 +14,10 @@
14
14
  // END_MODULE_MAP
15
15
  //
16
16
  // START_CHANGE_SUMMARY
17
- // LAST_CHANGE: [v0.2.9 - Removed legacy enhance command installation and kept enhancer as the managed primary agent path.]
17
+ // LAST_CHANGE: [v0.3.0 - Replaced per-feature vvoc config scaffolding with canonical vvoc.json creation.]
18
18
  // END_CHANGE_SUMMARY
19
19
  import { defineCommand } from "citty";
20
- import { describeWriteResult, ensurePackageInstalled, installGuardianConfig, installManagedAgentPrompts, installMemoryConfig, installSecretsRedactionConfig, resolvePaths, syncManagedAgentRegistrations, } from "../lib/opencode.js";
20
+ import { describeWriteResult, ensurePackageInstalled, installManagedAgentPrompts, installVvocConfig, resolvePaths, syncManagedAgentRegistrations, } from "../lib/opencode.js";
21
21
  export default defineCommand({
22
22
  meta: {
23
23
  name: "install",
@@ -36,22 +36,7 @@ export default defineCommand({
36
36
  },
37
37
  force: {
38
38
  type: "boolean",
39
- description: "Allow overwriting an existing guardian config when needed.",
40
- },
41
- "guardian-config": {
42
- type: "boolean",
43
- default: true,
44
- description: "Create guardian.jsonc when missing.",
45
- },
46
- "memory-config": {
47
- type: "boolean",
48
- default: true,
49
- description: "Create memory.jsonc when missing.",
50
- },
51
- "secrets-redaction-config": {
52
- type: "boolean",
53
- default: true,
54
- description: "Create secrets-redaction.config.json when missing.",
39
+ description: "Allow overwriting managed prompt files when needed.",
55
40
  },
56
41
  },
57
42
  async run({ args }) {
@@ -72,29 +57,8 @@ export default defineCommand({
72
57
  })) {
73
58
  console.log(describeWriteResult(result));
74
59
  }
75
- if (args["guardian-config"] === false) {
76
- console.log(`Skipped ${paths.guardianConfigPath} (guardian config disabled)`);
77
- }
78
- else {
79
- const guardian = await installGuardianConfig(paths, { force: Boolean(args.force) });
80
- console.log(describeWriteResult(guardian));
81
- }
82
- if (args["memory-config"] === false) {
83
- console.log(`Skipped ${paths.memoryConfigPath} (memory config disabled)`);
84
- }
85
- else {
86
- const memory = await installMemoryConfig(paths, { force: Boolean(args.force) });
87
- console.log(describeWriteResult(memory));
88
- }
89
- if (args["secrets-redaction-config"] === false) {
90
- console.log(`Skipped ${paths.secretsRedactionConfigPath} (secrets-redaction config disabled)`);
91
- }
92
- else {
93
- const secretsRedaction = await installSecretsRedactionConfig(paths, {
94
- force: Boolean(args.force),
95
- });
96
- console.log(describeWriteResult(secretsRedaction));
97
- }
60
+ const vvocConfig = await installVvocConfig(paths);
61
+ console.log(describeWriteResult(vvocConfig));
98
62
  // END_BLOCK_APPLY_INSTALL_COMMAND
99
63
  },
100
64
  });
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,iBAAiB;AACjB,wBAAwB;AACxB,yHAAyH;AACzH,kLAAkL;AAClL,0CAA0C;AAC1C,0CAA0C;AAC1C,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,4FAA4F;AAC5F,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,4GAA4G;AAC5G,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,iBAAiB,EACjB,YAAY,EACZ,6BAA6B,GAE9B,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,qDAAqD;SACnE;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;QACrD,MAAM,aAAa,GAAG,MAAM,6BAA6B,CAAC,KAAK,CAAC,CAAC;QAEjE,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CACT,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC,IAAI,mBAAmB,CACvF,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,MAAM,0BAA0B,CAAC,KAAK,EAAE;YAC3D,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;SAC3B,CAAC,EAAE,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7C,kCAAkC;IACpC,CAAC;CACF,CAAC,CAAC"}
@@ -1,8 +1,8 @@
1
1
  // FILE: src/commands/status.ts
2
- // VERSION: 0.2.5
2
+ // VERSION: 0.3.0
3
3
  // START_MODULE_CONTRACT
4
4
  // PURPOSE: Show the current vv-opencode installation status.
5
- // SCOPE: Scope parsing, inspection lookup, and human-readable status output for OpenCode, Guardian, and Memory config.
5
+ // SCOPE: Scope parsing, inspection lookup, and human-readable status output for OpenCode and the canonical vvoc.json config.
6
6
  // DEPENDS: [citty, src/lib/opencode.ts]
7
7
  // LINKS: [M-CLI-COMMANDS, M-CLI-CONFIG]
8
8
  // ROLE: RUNTIME
@@ -14,7 +14,7 @@
14
14
  // END_MODULE_MAP
15
15
  //
16
16
  // START_CHANGE_SUMMARY
17
- // LAST_CHANGE: [v0.2.5 - Added GRACE command markup around status reporting for easier operational inspection.]
17
+ // LAST_CHANGE: [v0.3.0 - Updated status reporting for the canonical vvoc.json config file.]
18
18
  // END_CHANGE_SUMMARY
19
19
  import { defineCommand } from "citty";
20
20
  import { inspectInstallation, resolvePaths } from "../lib/opencode.js";
@@ -49,12 +49,12 @@ export default defineCommand({
49
49
  console.log(`OpenCode config: ${inspection.opencode.path}`);
50
50
  console.log(`OpenCode config exists: ${inspection.opencode.exists ? "yes" : "no"}`);
51
51
  console.log(`Package configured: ${inspection.opencode.pluginConfigured ? "yes" : "no"}`);
52
- console.log(`Guardian config: ${inspection.guardian.path}`);
53
- console.log(`Guardian config exists: ${inspection.guardian.exists ? "yes" : "no"}`);
54
- console.log(`Guardian config managed by vvoc: ${inspection.guardian.managed ? "yes" : "no"}`);
55
- console.log(`Memory config: ${inspection.memory.path}`);
56
- console.log(`Memory config exists: ${inspection.memory.exists ? "yes" : "no"}`);
57
- console.log(`Memory config managed by vvoc: ${inspection.memory.managed ? "yes" : "no"}`);
52
+ console.log(`vvoc config: ${inspection.vvoc.path}`);
53
+ console.log(`vvoc config exists: ${inspection.vvoc.exists ? "yes" : "no"}`);
54
+ console.log(`vvoc config version: ${inspection.vvoc.version ?? "missing"}`);
55
+ console.log(`Guardian model: ${inspection.guardian.config ? (inspection.guardian.config.model ?? "default") : "unknown"}`);
56
+ console.log(`Memory enabled: ${inspection.memory.config ? (inspection.memory.config.enabled ? "yes" : "no") : "unknown"}`);
57
+ console.log(`Secrets Redaction enabled: ${inspection.secretsRedaction.config ? (inspection.secretsRedaction.config.enabled ? "yes" : "no") : "unknown"}`);
58
58
  if (inspection.warnings.length > 0) {
59
59
  console.log("Warnings:");
60
60
  for (const warning of inspection.warnings) {
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ declare const _default: import("citty").CommandDef<{
11
11
  };
12
12
  readonly force: {
13
13
  readonly type: "boolean";
14
- readonly description: "Allow rewriting unmanaged vvoc config files.";
14
+ readonly description: "Allow rewriting unmanaged managed-prompt files.";
15
15
  };
16
16
  }>;
17
17
  export default _default;
@@ -1,8 +1,8 @@
1
1
  // FILE: src/commands/sync.ts
2
- // VERSION: 0.2.9
2
+ // VERSION: 0.3.0
3
3
  // START_MODULE_CONTRACT
4
- // PURPOSE: Sync managed vvoc config files and keep the OpenCode plugin specifier current.
5
- // SCOPE: Scope parsing, path resolution, pinned plugin sync, managed OpenCode agent sync, managed agent prompt sync, and managed Guardian/Memory config rewrites.
4
+ // PURPOSE: Sync the canonical vvoc.json config file, managed prompts, and keep the OpenCode plugin specifier current.
5
+ // SCOPE: Scope parsing, path resolution, pinned plugin sync, managed OpenCode agent sync, managed agent prompt sync, and canonical vvoc config rewrite.
6
6
  // DEPENDS: [citty, src/lib/opencode.ts]
7
7
  // LINKS: [M-CLI-COMMANDS, M-CLI-CONFIG]
8
8
  // ROLE: RUNTIME
@@ -14,10 +14,10 @@
14
14
  // END_MODULE_MAP
15
15
  //
16
16
  // START_CHANGE_SUMMARY
17
- // LAST_CHANGE: [v0.2.9 - Removed legacy enhance command syncing and kept enhancer as the managed primary agent path.]
17
+ // LAST_CHANGE: [v0.3.0 - Replaced per-feature vvoc config syncing with canonical vvoc.json refresh.]
18
18
  // END_CHANGE_SUMMARY
19
19
  import { defineCommand } from "citty";
20
- import { describeWriteResult, ensurePackageInstalled, resolvePaths, syncManagedAgentPrompts, syncManagedAgentRegistrations, syncGuardianConfig, syncMemoryConfig, } from "../lib/opencode.js";
20
+ import { describeWriteResult, ensurePackageInstalled, resolvePaths, syncManagedAgentPrompts, syncManagedAgentRegistrations, syncVvocConfig, } from "../lib/opencode.js";
21
21
  export default defineCommand({
22
22
  meta: {
23
23
  name: "sync",
@@ -36,7 +36,7 @@ export default defineCommand({
36
36
  },
37
37
  force: {
38
38
  type: "boolean",
39
- description: "Allow rewriting unmanaged vvoc config files.",
39
+ description: "Allow rewriting unmanaged managed-prompt files.",
40
40
  },
41
41
  },
42
42
  async run({ args }) {
@@ -51,15 +51,13 @@ export default defineCommand({
51
51
  const opencode = await ensurePackageInstalled(paths);
52
52
  const managedAgents = await syncManagedAgentRegistrations(paths);
53
53
  const managedPrompts = await syncManagedAgentPrompts(paths, { force: Boolean(args.force) });
54
- const guardian = await syncGuardianConfig(paths, { force: Boolean(args.force) });
55
- const memory = await syncMemoryConfig(paths, { force: Boolean(args.force) });
54
+ const vvocConfig = await syncVvocConfig(paths);
56
55
  console.log(`${opencode.changed ? "Updated" : "Kept"} ${opencode.path}`);
57
56
  console.log(`${managedAgents.changed ? "Updated" : "Kept"} ${managedAgents.path} (managed agents)`);
58
57
  for (const result of managedPrompts) {
59
58
  console.log(describeWriteResult(result));
60
59
  }
61
- console.log(describeWriteResult(guardian));
62
- console.log(describeWriteResult(memory));
60
+ console.log(describeWriteResult(vvocConfig));
63
61
  // END_BLOCK_APPLY_SYNC_COMMAND
64
62
  },
65
63
  });
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,iBAAiB;AACjB,wBAAwB;AACxB,wHAAwH;AACxH,0JAA0J;AAC1J,0CAA0C;AAC1C,0CAA0C;AAC1C,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,qEAAqE;AACrE,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,uGAAuG;AACvG,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,YAAY,EACZ,uBAAuB,EACvB,6BAA6B,EAC7B,cAAc,GAEf,MAAM,oBAAoB,CAAC;AAE5B,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,wCAAwC;KACtD;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,gCAAgC;SAC9C;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,+DAA+D;SAC7E;QACD,KAAK,EAAE;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,iDAAiD;SAC/D;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,iCAAiC;QACjC,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;QACrD,MAAM,aAAa,GAAG,MAAM,6BAA6B,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,MAAM,uBAAuB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5F,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAE/C,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CACT,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC,IAAI,mBAAmB,CACvF,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7C,+BAA+B;IACjC,CAAC;CACF,CAAC,CAAC"}
@@ -1,5 +1,25 @@
1
+ type UpgradeCommand = readonly [string, ...string[]];
2
+ export type UpgradeFlowResult = {
3
+ exitCode: number;
4
+ status: "already-latest" | "registry-failed" | "install-failed" | "sync-warning" | "upgraded";
5
+ };
6
+ export type UpgradeSubprocessResult = {
7
+ exitCode: number;
8
+ stdout: string;
9
+ stderr: string;
10
+ };
11
+ type UpgradeLogger = Pick<Console, "error" | "log" | "warn">;
12
+ type UpgradeDependencies = {
13
+ fetchChangelog: (fromVersion: string, toVersion: string) => Promise<string | null>;
14
+ fetchLatestVersion: () => Promise<string | null>;
15
+ getCurrentVersion: () => Promise<string>;
16
+ logger: UpgradeLogger;
17
+ runSubprocess: (command: UpgradeCommand) => Promise<UpgradeSubprocessResult>;
18
+ };
1
19
  declare const _default: import("citty").CommandDef<import("citty").ArgsDef>;
2
20
  export default _default;
21
+ export declare function runUpgradeFlow(overrides?: Partial<UpgradeDependencies>): Promise<UpgradeFlowResult>;
22
+ export declare function buildInstallCommand(latestVersion: string): UpgradeCommand;
23
+ export declare function buildPostInstallSyncCommand(): UpgradeCommand;
3
24
  export declare function fetchLatestVersion(): Promise<string | null>;
4
25
  export declare function fetchChangelog(_fromVersion: string, _toVersion: string): Promise<string | null>;
5
- export declare function printUpgradeStatus(currentVersion: string, latestVersion: string): void;
@@ -1,9 +1,9 @@
1
1
  // FILE: src/commands/upgrade.ts
2
- // VERSION: 0.4.0
2
+ // VERSION: 0.5.0
3
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]
4
+ // PURPOSE: Upgrade the global vvoc package by checking npm, installing the latest release with Bun, and triggering a fresh sync subprocess.
5
+ // SCOPE: npm registry query, version comparison, best-effort changelog fetching, global Bun install, and post-install sync execution.
6
+ // DEPENDS: [citty, src/lib/package.ts, Bun]
7
7
  // LINKS: [M-CLI-UPGRADE]
8
8
  // ROLE: RUNTIME
9
9
  // MAP_MODE: EXPORTS
@@ -11,64 +11,117 @@
11
11
  //
12
12
  // START_MODULE_MAP
13
13
  // default - Upgrade command definition for vvoc.
14
+ // runUpgradeFlow - Execute the full global upgrade and post-install sync flow.
15
+ // buildInstallCommand - Build the Bun global install command for a specific version.
16
+ // buildPostInstallSyncCommand - Build the fresh subprocess command for the default global sync flow.
14
17
  // fetchLatestVersion - Query npm registry for latest version.
15
18
  // fetchChangelog - Fetch changelog from npm registry.
16
- // printUpgradeStatus - Print up-to-date or upgrade available message.
17
19
  // END_MODULE_MAP
18
20
  //
19
21
  // START_CHANGE_SUMMARY
20
- // LAST_CHANGE: [v0.4.0 - Initial GRACE implementation for upgrade command.]
22
+ // LAST_CHANGE: [v0.5.0 - Redesigned upgrade into a global-only Bun install flow that runs post-install sync in a fresh subprocess.]
21
23
  // END_CHANGE_SUMMARY
22
24
  import { defineCommand } from "citty";
23
- import { getPackageVersion } from "../lib/package.js";
24
- const PACKAGE_NAME = "@osovv/vv-opencode";
25
+ import { getPackageVersion, PACKAGE_NAME } from "../lib/package.js";
25
26
  const NPM_REGISTRY = "https://registry.npmjs.org";
26
27
  export default defineCommand({
27
28
  meta: {
28
29
  name: "upgrade",
29
- description: "Check for and perform upgrades.",
30
+ description: "Upgrade the global vvoc package and sync config.",
30
31
  },
31
32
  async run() {
32
33
  // START_BLOCK_RUN_UPGRADE
33
- try {
34
- const latestVersion = await fetchLatestVersion();
35
- const currentVersion = await getCurrentVersion();
36
- if (!latestVersion) {
37
- console.error("NETWORK_ERROR: Could not reach npm registry");
38
- process.exitCode = 1;
39
- return;
40
- }
41
- if (latestVersion === currentVersion) {
42
- console.log(`Already at latest version: ${currentVersion}`);
43
- return;
44
- }
45
- console.log(`Current version: ${currentVersion}`);
46
- console.log(`Latest version: ${latestVersion}`);
47
- console.log("Upgrade available!");
48
- const changelog = await fetchChangelog(currentVersion, latestVersion);
49
- if (changelog) {
50
- console.log("\n--- Changelog ---");
51
- console.log(changelog);
52
- }
53
- console.log("\nTo upgrade, run:");
54
- console.log(` npm install -g ${PACKAGE_NAME}@${latestVersion}`);
55
- }
56
- catch (err) {
57
- if (err instanceof Error && err.message === "NETWORK_ERROR") {
58
- console.error("NETWORK_ERROR: Could not reach npm registry");
59
- process.exitCode = 1;
60
- }
61
- else if (err instanceof Error && err.message === "ALREADY_LATEST") {
62
- console.log("Already at latest version");
63
- }
64
- else {
65
- console.error("Upgrade check failed:", err instanceof Error ? err.message : String(err));
66
- process.exitCode = 1;
67
- }
34
+ const result = await runUpgradeFlow();
35
+ if (result.exitCode !== 0) {
36
+ process.exitCode = result.exitCode;
68
37
  }
69
38
  // END_BLOCK_RUN_UPGRADE
70
39
  },
71
40
  });
41
+ export async function runUpgradeFlow(overrides = {}) {
42
+ const logger = overrides.logger ?? console;
43
+ const fetchLatest = overrides.fetchLatestVersion ?? fetchLatestVersion;
44
+ const fetchReleaseNotes = overrides.fetchChangelog ?? fetchChangelog;
45
+ const getCurrentVersion = overrides.getCurrentVersion ?? getPackageVersion;
46
+ const runSubprocess = overrides.runSubprocess ?? runSubprocessCommand;
47
+ try {
48
+ const [currentVersion, latestVersion] = await Promise.all([getCurrentVersion(), fetchLatest()]);
49
+ if (!latestVersion) {
50
+ logger.error("NETWORK_ERROR: Could not reach npm registry");
51
+ return { exitCode: 1, status: "registry-failed" };
52
+ }
53
+ if (compareVersions(currentVersion, latestVersion) >= 0) {
54
+ logger.log(`Already at latest version: ${currentVersion}`);
55
+ return { exitCode: 0, status: "already-latest" };
56
+ }
57
+ logger.log(`Current version: ${currentVersion}`);
58
+ logger.log(`Latest version: ${latestVersion}`);
59
+ logger.log("Upgrade available!");
60
+ const changelog = await getBestEffortChangelog({
61
+ currentVersion,
62
+ latestVersion,
63
+ fetchChangelog: fetchReleaseNotes,
64
+ });
65
+ if (changelog) {
66
+ logger.log("\n--- Changelog ---");
67
+ logger.log(changelog);
68
+ }
69
+ const installCommand = buildInstallCommand(latestVersion);
70
+ logger.log("\nInstalling global package:");
71
+ logger.log(` ${formatCommand(installCommand)}`);
72
+ let installResult;
73
+ try {
74
+ installResult = await runSubprocess(installCommand);
75
+ }
76
+ catch (error) {
77
+ logger.error(`Upgrade install failed: ${formatError(error)}`);
78
+ return { exitCode: 1, status: "install-failed" };
79
+ }
80
+ if (installResult.exitCode !== 0) {
81
+ logProcessOutput(logger.error, installResult.stdout);
82
+ logProcessOutput(logger.error, installResult.stderr);
83
+ logger.error("Upgrade install failed.");
84
+ return {
85
+ exitCode: installResult.exitCode || 1,
86
+ status: "install-failed",
87
+ };
88
+ }
89
+ logProcessOutput(logger.log, installResult.stdout);
90
+ logProcessOutput(logger.warn, installResult.stderr);
91
+ logger.log("Global upgrade installed successfully.");
92
+ const syncCommand = buildPostInstallSyncCommand();
93
+ logger.log("\nRunning post-upgrade sync:");
94
+ logger.log(` ${formatCommand(syncCommand)}`);
95
+ let syncResult;
96
+ try {
97
+ syncResult = await runSubprocess(syncCommand);
98
+ }
99
+ catch (error) {
100
+ warnManualSync(logger, `Could not launch sync: ${formatError(error)}`);
101
+ return { exitCode: 0, status: "sync-warning" };
102
+ }
103
+ if (syncResult.exitCode !== 0) {
104
+ logProcessOutput(logger.warn, syncResult.stdout);
105
+ logProcessOutput(logger.warn, syncResult.stderr);
106
+ warnManualSync(logger, "Post-upgrade sync failed.");
107
+ return { exitCode: 0, status: "sync-warning" };
108
+ }
109
+ logProcessOutput(logger.log, syncResult.stdout);
110
+ logProcessOutput(logger.warn, syncResult.stderr);
111
+ logger.log("Upgrade complete.");
112
+ return { exitCode: 0, status: "upgraded" };
113
+ }
114
+ catch (error) {
115
+ logger.error(`Upgrade check failed: ${formatError(error)}`);
116
+ return { exitCode: 1, status: "registry-failed" };
117
+ }
118
+ }
119
+ export function buildInstallCommand(latestVersion) {
120
+ return ["bun", "add", "-g", `${PACKAGE_NAME}@${latestVersion}`];
121
+ }
122
+ export function buildPostInstallSyncCommand() {
123
+ return ["vvoc", "sync"];
124
+ }
72
125
  export async function fetchLatestVersion() {
73
126
  try {
74
127
  const url = `${NPM_REGISTRY}/${encodeURIComponent(PACKAGE_NAME)}/latest`;
@@ -108,15 +161,116 @@ export async function fetchChangelog(_fromVersion, _toVersion) {
108
161
  return null;
109
162
  }
110
163
  }
111
- export function printUpgradeStatus(currentVersion, latestVersion) {
112
- if (currentVersion === latestVersion) {
113
- console.log(`Already at latest version: ${currentVersion}`);
164
+ // START_BLOCK_RUN_UPGRADE_SUBPROCESS
165
+ async function runSubprocessCommand(command) {
166
+ const proc = Bun.spawn({
167
+ cmd: [...command],
168
+ cwd: process.cwd(),
169
+ env: process.env,
170
+ stdout: "pipe",
171
+ stderr: "pipe",
172
+ });
173
+ const [stdout, stderr, exitCode] = await Promise.all([
174
+ readProcessStream(proc.stdout),
175
+ readProcessStream(proc.stderr),
176
+ proc.exited,
177
+ ]);
178
+ return { exitCode, stderr, stdout };
179
+ }
180
+ // END_BLOCK_RUN_UPGRADE_SUBPROCESS
181
+ async function getBestEffortChangelog({ currentVersion, fetchChangelog, latestVersion, }) {
182
+ try {
183
+ const changelog = await fetchChangelog(currentVersion, latestVersion);
184
+ return changelog?.trim() ? changelog : null;
185
+ }
186
+ catch {
187
+ return null;
188
+ }
189
+ }
190
+ async function readProcessStream(stream) {
191
+ if (!stream) {
192
+ return "";
193
+ }
194
+ return new Response(stream).text();
195
+ }
196
+ function compareVersions(left, right) {
197
+ const leftVersion = parseVersion(left);
198
+ const rightVersion = parseVersion(right);
199
+ if (!leftVersion || !rightVersion) {
200
+ return left.localeCompare(right, undefined, {
201
+ numeric: true,
202
+ sensitivity: "base",
203
+ });
204
+ }
205
+ for (let index = 0; index < 3; index += 1) {
206
+ const difference = leftVersion.release[index] - rightVersion.release[index];
207
+ if (difference !== 0) {
208
+ return difference;
209
+ }
210
+ }
211
+ if (leftVersion.prerelease.length === 0 && rightVersion.prerelease.length === 0) {
212
+ return 0;
213
+ }
214
+ if (leftVersion.prerelease.length === 0) {
215
+ return 1;
216
+ }
217
+ if (rightVersion.prerelease.length === 0) {
218
+ return -1;
114
219
  }
115
- else {
116
- console.log(`Update available: ${currentVersion} -> ${latestVersion}`);
220
+ const prereleaseLength = Math.max(leftVersion.prerelease.length, rightVersion.prerelease.length);
221
+ for (let index = 0; index < prereleaseLength; index += 1) {
222
+ const leftIdentifier = leftVersion.prerelease[index];
223
+ const rightIdentifier = rightVersion.prerelease[index];
224
+ if (leftIdentifier === undefined) {
225
+ return -1;
226
+ }
227
+ if (rightIdentifier === undefined) {
228
+ return 1;
229
+ }
230
+ const leftNumeric = /^\d+$/.test(leftIdentifier);
231
+ const rightNumeric = /^\d+$/.test(rightIdentifier);
232
+ if (leftNumeric && rightNumeric) {
233
+ const difference = Number(leftIdentifier) - Number(rightIdentifier);
234
+ if (difference !== 0) {
235
+ return difference;
236
+ }
237
+ continue;
238
+ }
239
+ if (leftNumeric !== rightNumeric) {
240
+ return leftNumeric ? -1 : 1;
241
+ }
242
+ const difference = leftIdentifier.localeCompare(rightIdentifier);
243
+ if (difference !== 0) {
244
+ return difference;
245
+ }
246
+ }
247
+ return 0;
248
+ }
249
+ function parseVersion(value) {
250
+ const match = /^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/.exec(value.trim());
251
+ if (!match) {
252
+ return null;
253
+ }
254
+ return {
255
+ prerelease: match[4] ? match[4].split(".") : [],
256
+ release: [Number(match[1] ?? 0), Number(match[2] ?? 0), Number(match[3] ?? 0)],
257
+ };
258
+ }
259
+ function formatCommand(command) {
260
+ return command.join(" ");
261
+ }
262
+ function formatError(error) {
263
+ return error instanceof Error ? error.message : String(error);
264
+ }
265
+ function logProcessOutput(write, output) {
266
+ const trimmed = output.trim();
267
+ if (trimmed) {
268
+ write(trimmed);
117
269
  }
118
270
  }
119
- async function getCurrentVersion() {
120
- return getPackageVersion();
271
+ function warnManualSync(logger, reason) {
272
+ logger.warn(reason);
273
+ logger.warn("Upgrade installed successfully, but post-install sync did not complete.");
274
+ logger.warn("Run `vvoc sync` manually to finish refreshing the global config.");
121
275
  }
122
276
  //# sourceMappingURL=upgrade.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}