@uoyo/mvtt 2.0.0-beta.3 → 2.0.0-beta.4

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 (32) hide show
  1. package/dist/fs/materialize.d.ts.map +1 -1
  2. package/dist/fs/materialize.js +7 -4
  3. package/dist/fs/materialize.js.map +1 -1
  4. package/dist/fs/registry-merge.d.ts +19 -0
  5. package/dist/fs/registry-merge.d.ts.map +1 -0
  6. package/dist/fs/registry-merge.js +177 -0
  7. package/dist/fs/registry-merge.js.map +1 -0
  8. package/dist/scripts/plan-update.cjs +7563 -0
  9. package/install-manifest.yaml +6 -2
  10. package/package.json +1 -1
  11. package/sources/scripts/plan-update.js +353 -0
  12. package/sources/sections/output-format-constraint.md +14 -0
  13. package/sources/sections/project-context-profile.md +29 -0
  14. package/sources/skills/mvt-analyze/manifest.yaml +3 -0
  15. package/sources/skills/mvt-analyze-code/manifest.yaml +6 -0
  16. package/sources/skills/mvt-cleanup/manifest.yaml +3 -0
  17. package/sources/skills/mvt-create-skill/manifest.yaml +3 -0
  18. package/sources/skills/mvt-design/manifest.yaml +3 -0
  19. package/sources/skills/mvt-fix/manifest.yaml +3 -0
  20. package/sources/skills/mvt-implement/business.md +9 -5
  21. package/sources/skills/mvt-implement/manifest.yaml +3 -0
  22. package/sources/skills/mvt-init/manifest.yaml +3 -0
  23. package/sources/skills/mvt-manage-context/manifest.yaml +6 -0
  24. package/sources/skills/mvt-plan-dev/manifest.yaml +3 -0
  25. package/sources/skills/mvt-quick-dev/manifest.yaml +3 -0
  26. package/sources/skills/mvt-refactor/manifest.yaml +3 -0
  27. package/sources/skills/mvt-review/manifest.yaml +3 -0
  28. package/sources/skills/mvt-sync-context/business.md +58 -29
  29. package/sources/skills/mvt-sync-context/manifest.yaml +6 -0
  30. package/sources/skills/mvt-test/manifest.yaml +3 -0
  31. package/sources/skills/mvt-update-plan/business.md +30 -28
  32. package/sources/skills/mvt-update-plan/manifest.yaml +3 -0
@@ -1 +1 @@
1
- {"version":3,"file":"materialize.d.ts","sourceRoot":"","sources":["../../src/fs/materialize.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAuCD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,gBAAgB,EAAE,CA6HlF"}
1
+ {"version":3,"file":"materialize.d.ts","sourceRoot":"","sources":["../../src/fs/materialize.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAuCD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,gBAAgB,EAAE,CA+HlF"}
@@ -4,6 +4,7 @@ import { parse as parseYaml } from "yaml";
4
4
  import { assembleFromManifest } from "../build/assembler.js";
5
5
  import { hashString, hashFile } from "./hash.js";
6
6
  import { updateCoreManifest } from "./core-manifest.js";
7
+ import { updateRegistry } from "./registry-merge.js";
7
8
  function copyRecursive(srcDir, destDir, collected, projectRoot, shouldSkip, baseSrcDir) {
8
9
  if (!existsSync(srcDir))
9
10
  return;
@@ -77,15 +78,17 @@ export function materializeProject(options) {
77
78
  hash: hashFile(coreManifestDest),
78
79
  category: "create_once",
79
80
  });
80
- const registrySrc = path.resolve(packageRoot, "registry.yaml");
81
+ // Reconcile registry.yaml instead of overwriting it: user-authored skills
82
+ // (custom: true) and knowledge bindings added via /mvt-create-skill and
83
+ // /mvt-manage-context must survive `mvtt update`. Treated as create_once
84
+ // (like core/manifest.yaml) so the modified-files guard does not flag it.
81
85
  const registryDest = path.resolve(projectRoot, ".ai-agents/registry.yaml");
82
- mkdirSync(path.dirname(registryDest), { recursive: true });
83
- copyFileSync(registrySrc, registryDest);
86
+ updateRegistry(projectRoot, packageRoot);
84
87
  materialized.push({
85
88
  absPath: registryDest,
86
89
  relPath: ".ai-agents/registry.yaml",
87
90
  hash: hashFile(registryDest),
88
- category: "generated",
91
+ category: "create_once",
89
92
  });
90
93
  // Copy bundled scripts from dist/scripts/ (bundled by esbuild, zero external deps)
91
94
  // Only copy .cjs files to avoid stale build artifacts leaking into user projects
@@ -1 +1 @@
1
- {"version":3,"file":"materialize.js","sourceRoot":"","sources":["../../src/fs/materialize.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAgBxD,SAAS,aAAa,CACpB,MAAc,EACd,OAAe,EACf,SAA6B,EAC7B,WAAmB,EACnB,UAA4C,EAC5C,UAAmB;IAEnB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO;IAChC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExC,MAAM,UAAU,GAAG,UAAU,IAAI,MAAM,CAAC;IAExC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE/B,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC3E,IAAI,UAAU,CAAC,WAAW,CAAC;gBAAE,SAAS;QACxC,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAChC,SAAS,CAAC,IAAI,CAAC;gBACb,OAAO,EAAE,QAAQ;gBACjB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;gBACjE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;gBACxB,QAAQ,EAAE,WAAW;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA2B;IAC5D,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1E,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,YAAY,GAAuB,EAAE,CAAC;IAE5C,MAAM,KAAK,GAAkC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACrE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS;QAEnC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;YAChE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;gBAAE,SAAS;YAExC,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAa,SAAS,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,oBAAoB,CAAC,YAAY,EAAE;gBACjD,UAAU;gBACV,SAAS;aACV,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3D,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAEzC,YAAY,CAAC,IAAI,CAAC;gBAChB,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,QAAQ,CAAC,MAAM;gBACxB,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC;gBACzB,QAAQ,EAAE,WAAW;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,0EAA0E;IAC1E,6EAA6E;IAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;IACxE,aAAa,CACX,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,oBAAoB,CAC9C,CAAC;IAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CACnC,WAAW,EACX,yCAAyC,CAC1C,CAAC;IACF,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC7C,YAAY,CAAC,IAAI,CAAC;QAChB,OAAO,EAAE,gBAAgB;QACzB,OAAO,EAAE,yCAAyC;QAClD,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC;QAChC,QAAQ,EAAE,aAAa;KACxB,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;IAC3E,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACxC,YAAY,CAAC,IAAI,CAAC;QAChB,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,0BAA0B;QACnC,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;QAC5B,QAAQ,EAAE,WAAW;KACtB,CAAC,CAAC;IAEH,mFAAmF;IACnF,iFAAiF;IACjF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;IACpE,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAElG,MAAM,QAAQ,GAA4B;QACxC;YACE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,sBAAsB,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,wBAAwB,CAAC;SACpD;QACD;YACE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,uBAAuB,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,mCAAmC,CAAC;SAC/D;QACD;YACE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,+BAA+B,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,2CAA2C,CAAC;SACvE;KACF,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QACnC,IAAI,CAAC,mBAAmB,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,YAAY,CAAC,IAAI,CAAC;gBAChB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC7D,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;gBACpB,QAAQ,EAAE,aAAa;aACxB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC;YAChB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;YAC7D,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;YACpB,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG;QACnB,gCAAgC;QAChC,qCAAqC;QACrC,gCAAgC;QAChC,8BAA8B;QAC9B,yCAAyC;QACzC,gCAAgC;KACjC,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"materialize.js","sourceRoot":"","sources":["../../src/fs/materialize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface RegistryMergeResult {
2
+ written: boolean;
3
+ backup: string | null;
4
+ frameworkSkillCount: number;
5
+ customSkillCount: number;
6
+ preservedBindingCount: number;
7
+ }
8
+ /**
9
+ * Reconcile the project's `.ai-agents/registry.yaml` with the framework
10
+ * registry shipped in the package, preserving user-authored skills and
11
+ * knowledge bindings across `mvtt update`.
12
+ *
13
+ * On a fresh install (no existing user registry) the framework file is copied
14
+ * verbatim so its documentation comments survive. When a user registry already
15
+ * exists it is backed up to `.ai-agents/.backup/` and rewritten with the merged
16
+ * result.
17
+ */
18
+ export declare function updateRegistry(projectRoot: string, packageRoot: string): RegistryMergeResult;
19
+ //# sourceMappingURL=registry-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-merge.d.ts","sourceRoot":"","sources":["../../src/fs/registry-merge.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAiJD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAqC5F"}
@@ -0,0 +1,177 @@
1
+ import { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
2
+ import path from "node:path";
3
+ import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
4
+ const FRAMEWORK_REGISTRY_REL = "registry.yaml";
5
+ const USER_REGISTRY_REL = ".ai-agents/registry.yaml";
6
+ const BACKUP_DIR_REL = ".ai-agents/.backup";
7
+ /**
8
+ * Deterministic, order-independent key for a knowledge binding so two entries
9
+ * with the same content compare equal regardless of YAML key order.
10
+ */
11
+ function stableKey(value) {
12
+ if (Array.isArray(value))
13
+ return `[${value.map(stableKey).join(",")}]`;
14
+ if (value && typeof value === "object") {
15
+ const keys = Object.keys(value).sort();
16
+ return `{${keys.map((k) => `${k}:${stableKey(value[k])}`).join(",")}}`;
17
+ }
18
+ return JSON.stringify(value);
19
+ }
20
+ function clone(value) {
21
+ return JSON.parse(JSON.stringify(value));
22
+ }
23
+ function readRegistry(filePath) {
24
+ if (!existsSync(filePath))
25
+ return null;
26
+ const parsed = parseYaml(readFileSync(filePath, "utf-8"));
27
+ if (!parsed || typeof parsed !== "object")
28
+ return null;
29
+ return parsed;
30
+ }
31
+ /**
32
+ * Preserve the framework file's leading comment block (documentation header)
33
+ * when we have to re-serialize the merged document, since stringify() drops
34
+ * comments.
35
+ */
36
+ function leadingComments(raw) {
37
+ const out = [];
38
+ for (const line of raw.split(/\r?\n/)) {
39
+ if (line.trim() === "" || line.trimStart().startsWith("#")) {
40
+ out.push(line);
41
+ }
42
+ else {
43
+ break;
44
+ }
45
+ }
46
+ return out.length > 0 ? out.join("\n") + "\n" : "";
47
+ }
48
+ function backupRegistry(projectRoot, sourcePath) {
49
+ const backupDir = path.resolve(projectRoot, BACKUP_DIR_REL);
50
+ mkdirSync(backupDir, { recursive: true });
51
+ const stamp = new Date().toISOString().replace(/[:.]/g, "-");
52
+ const backupPath = path.join(backupDir, `registry-${stamp}.yaml`);
53
+ copyFileSync(sourcePath, backupPath);
54
+ return backupPath;
55
+ }
56
+ /**
57
+ * Merge a fresh framework registry with the user's existing registry,
58
+ * preserving user-authored content (Plan A — diff-based, no markers required).
59
+ *
60
+ * Rules:
61
+ * - Framework skills (those present in the framework registry) take the NEW
62
+ * framework definition verbatim. Any knowledge bindings the user added to a
63
+ * framework skill (entries present in the user copy but absent from the
64
+ * framework copy) are re-grafted onto the refreshed entry.
65
+ * - User custom skills (present in the user registry, absent from the framework
66
+ * registry, and flagged `custom: true`) are preserved as-is.
67
+ * - User skills that are neither framework skills nor flagged `custom: true`
68
+ * are dropped (retired framework skills / legacy/malformed entries).
69
+ * - `knowledge.shared[]` is the framework baseline plus any user shared entries
70
+ * not already present in the framework baseline (keyed by `id`, falling back
71
+ * to deep content equality).
72
+ */
73
+ function mergeRegistry(framework, user) {
74
+ const fwSkills = framework.skills ?? {};
75
+ const userSkills = user.skills ?? {};
76
+ const mergedSkills = {};
77
+ let preservedBindingCount = 0;
78
+ // Framework skills: refresh from framework, re-graft user-added knowledge.
79
+ for (const [name, fwEntry] of Object.entries(fwSkills)) {
80
+ const next = clone(fwEntry);
81
+ const userEntry = userSkills[name];
82
+ if (userEntry && userEntry.custom !== true) {
83
+ const fwKnow = Array.isArray(fwEntry.knowledge) ? fwEntry.knowledge : [];
84
+ const userKnow = Array.isArray(userEntry.knowledge)
85
+ ? userEntry.knowledge
86
+ : [];
87
+ const fwKeys = new Set(fwKnow.map(stableKey));
88
+ const additions = userKnow.filter((k) => !fwKeys.has(stableKey(k)));
89
+ if (additions.length > 0) {
90
+ next.knowledge = [...clone(fwKnow), ...clone(additions)];
91
+ preservedBindingCount += additions.length;
92
+ }
93
+ }
94
+ mergedSkills[name] = next;
95
+ }
96
+ // User custom skills not part of the framework set.
97
+ let customSkillCount = 0;
98
+ for (const [name, userEntry] of Object.entries(userSkills)) {
99
+ if (mergedSkills[name])
100
+ continue;
101
+ if (userEntry && userEntry.custom === true) {
102
+ mergedSkills[name] = clone(userEntry);
103
+ customSkillCount += 1;
104
+ }
105
+ // Otherwise drop: a retired framework skill or a legacy/unmarked entry.
106
+ }
107
+ // Shared knowledge: framework baseline + user additions.
108
+ const fwShared = Array.isArray(framework.knowledge?.shared)
109
+ ? framework.knowledge.shared
110
+ : [];
111
+ const userShared = Array.isArray(user.knowledge?.shared)
112
+ ? user.knowledge.shared
113
+ : [];
114
+ const sharedKeyOf = (e) => typeof e?.id === "string" ? `id:${e.id}` : stableKey(e);
115
+ const fwSharedKeys = new Set(fwShared.map(sharedKeyOf));
116
+ const sharedAdditions = userShared.filter((e) => !fwSharedKeys.has(sharedKeyOf(e)));
117
+ preservedBindingCount += sharedAdditions.length;
118
+ const mergedKnowledge = {
119
+ ...(framework.knowledge ?? {}),
120
+ shared: [...clone(fwShared), ...clone(sharedAdditions)],
121
+ };
122
+ const merged = {
123
+ ...framework,
124
+ knowledge: mergedKnowledge,
125
+ skills: mergedSkills,
126
+ };
127
+ return {
128
+ merged,
129
+ result: {
130
+ frameworkSkillCount: Object.keys(fwSkills).length,
131
+ customSkillCount,
132
+ preservedBindingCount,
133
+ },
134
+ };
135
+ }
136
+ /**
137
+ * Reconcile the project's `.ai-agents/registry.yaml` with the framework
138
+ * registry shipped in the package, preserving user-authored skills and
139
+ * knowledge bindings across `mvtt update`.
140
+ *
141
+ * On a fresh install (no existing user registry) the framework file is copied
142
+ * verbatim so its documentation comments survive. When a user registry already
143
+ * exists it is backed up to `.ai-agents/.backup/` and rewritten with the merged
144
+ * result.
145
+ */
146
+ export function updateRegistry(projectRoot, packageRoot) {
147
+ const frameworkPath = path.resolve(packageRoot, FRAMEWORK_REGISTRY_REL);
148
+ const userPath = path.resolve(projectRoot, USER_REGISTRY_REL);
149
+ const frameworkRaw = existsSync(frameworkPath) ? readFileSync(frameworkPath, "utf-8") : null;
150
+ const framework = readRegistry(frameworkPath);
151
+ if (!frameworkRaw || !framework) {
152
+ return {
153
+ written: false,
154
+ backup: null,
155
+ frameworkSkillCount: 0,
156
+ customSkillCount: 0,
157
+ preservedBindingCount: 0,
158
+ };
159
+ }
160
+ mkdirSync(path.dirname(userPath), { recursive: true });
161
+ // Install and update share one path: a fresh install is just a merge against
162
+ // an empty user registry. This guarantees `mvtt install` and `mvtt update`
163
+ // produce byte-identical output (no verbatim-copy vs re-serialize drift).
164
+ const existingUser = readRegistry(userPath) ?? {};
165
+ let backup = null;
166
+ if (existsSync(userPath)) {
167
+ backup = backupRegistry(projectRoot, userPath);
168
+ }
169
+ const { merged, result } = mergeRegistry(framework, existingUser);
170
+ // lineWidth: 0 disables YAML line folding so long `description` strings stay
171
+ // on a single line. Only the framework file's leading comment header is
172
+ // preserved (yaml.stringify drops comments); inline section comments are not.
173
+ const serialized = leadingComments(frameworkRaw) + stringifyYaml(merged, { lineWidth: 0 });
174
+ writeFileSync(userPath, serialized, "utf-8");
175
+ return { written: true, backup, ...result };
176
+ }
177
+ //# sourceMappingURL=registry-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-merge.js","sourceRoot":"","sources":["../../src/fs/registry-merge.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,UAAU,EACV,SAAS,EACT,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAEtE,MAAM,sBAAsB,GAAG,eAAe,CAAC;AAC/C,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AACrD,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAsB5C;;;GAGG;AACH,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACvE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAa,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,SAAS,CAAE,KAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACnF,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,KAAK,CAAI,KAAQ;IACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAM,CAAC;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAY,CAAC;IACrE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvD,OAAO,MAAqB,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,WAAmB,EAAE,UAAkB;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC5D,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC;IAClE,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACrC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,aAAa,CACpB,SAAsB,EACtB,IAAiB;IAEjB,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAErC,MAAM,YAAY,GAAyB,EAAE,CAAC;IAC9C,IAAI,qBAAqB,GAAG,CAAC,CAAC;IAE9B,2EAA2E;IAC3E,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,OAAO,CAAC,SAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC;gBACjD,CAAC,CAAE,SAAS,CAAC,SAAuB;gBACpC,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzD,qBAAqB,IAAI,SAAS,CAAC,MAAM,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,oDAAoD;IACpD,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,IAAI,YAAY,CAAC,IAAI,CAAC;YAAE,SAAS;QACjC,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC3C,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YACtC,gBAAgB,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,wEAAwE;IAC1E,CAAC;IAED,yDAAyD;IACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;QACzD,CAAC,CAAE,SAAS,CAAC,SAAU,CAAC,MAAiB;QACzC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;QACtD,CAAC,CAAE,IAAI,CAAC,SAAU,CAAC,MAAiB;QACpC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,WAAW,GAAG,CAAC,CAAO,EAAU,EAAE,CACtC,OAAO,CAAC,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,qBAAqB,IAAI,eAAe,CAAC,MAAM,CAAC;IAEhD,MAAM,eAAe,GAAS;QAC5B,GAAG,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC;QAC9B,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;KACxD,CAAC;IAEF,MAAM,MAAM,GAAgB;QAC1B,GAAG,SAAS;QACZ,SAAS,EAAE,eAAe;QAC1B,MAAM,EAAE,YAAY;KACrB,CAAC;IAEF,OAAO;QACL,MAAM;QACN,MAAM,EAAE;YACN,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM;YACjD,gBAAgB;YAChB,qBAAqB;SACtB;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,WAAmB;IACrE,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAE9D,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7F,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,IAAI;YACZ,mBAAmB,EAAE,CAAC;YACtB,gBAAgB,EAAE,CAAC;YACnB,qBAAqB,EAAE,CAAC;SACzB,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvD,6EAA6E;IAC7E,2EAA2E;IAC3E,0EAA0E;IAC1E,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAElD,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAClE,6EAA6E;IAC7E,wEAAwE;IACxE,8EAA8E;IAC9E,MAAM,UAAU,GACd,eAAe,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1E,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAE7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;AAC9C,CAAC"}