@uoyo/mvtt 2.0.0-beta.2 → 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 (80) hide show
  1. package/README.md +1 -11
  2. package/dist/build/section-loader.d.ts.map +1 -1
  3. package/dist/build/section-loader.js +18 -8
  4. package/dist/build/section-loader.js.map +1 -1
  5. package/dist/fs/materialize.d.ts.map +1 -1
  6. package/dist/fs/materialize.js +12 -4
  7. package/dist/fs/materialize.js.map +1 -1
  8. package/dist/fs/registry-merge.d.ts +19 -0
  9. package/dist/fs/registry-merge.d.ts.map +1 -0
  10. package/dist/fs/registry-merge.js +177 -0
  11. package/dist/fs/registry-merge.js.map +1 -0
  12. package/dist/scripts/plan-update.cjs +7563 -0
  13. package/dist/scripts/session-update.cjs +7568 -0
  14. package/install-manifest.yaml +8 -2
  15. package/package.json +3 -2
  16. package/sources/defaults/config.yaml +7 -7
  17. package/sources/defaults/session.yaml +9 -16
  18. package/sources/scripts/plan-update.js +353 -0
  19. package/sources/scripts/session-update.js +351 -0
  20. package/sources/sections/activation-load-context.md +4 -0
  21. package/sources/sections/footer-next-steps.md +1 -1
  22. package/sources/sections/output-format-constraint.md +14 -0
  23. package/sources/sections/project-context-profile.md +29 -0
  24. package/sources/sections/session-update.md +100 -32
  25. package/sources/skills/mvt-analyze/manifest.yaml +4 -0
  26. package/sources/skills/mvt-analyze-code/manifest.yaml +24 -4
  27. package/sources/skills/mvt-bug-detect/business.md +99 -101
  28. package/sources/skills/mvt-bug-detect/manifest.yaml +84 -84
  29. package/sources/skills/mvt-check-context/business.md +3 -5
  30. package/sources/skills/mvt-check-context/manifest.yaml +15 -8
  31. package/sources/skills/mvt-cleanup/business.md +49 -23
  32. package/sources/skills/mvt-cleanup/manifest.yaml +18 -10
  33. package/sources/skills/mvt-config/business.md +1 -2
  34. package/sources/skills/mvt-config/manifest.yaml +11 -4
  35. package/sources/skills/mvt-create-skill/business.md +6 -5
  36. package/sources/skills/mvt-create-skill/manifest.yaml +30 -11
  37. package/sources/skills/mvt-design/business.md +3 -6
  38. package/sources/skills/mvt-design/manifest.yaml +17 -1
  39. package/sources/skills/mvt-fix/business.md +2 -1
  40. package/sources/skills/mvt-fix/manifest.yaml +9 -3
  41. package/sources/skills/mvt-help/business.md +2 -4
  42. package/sources/skills/mvt-help/manifest.yaml +13 -5
  43. package/sources/skills/mvt-implement/business.md +10 -7
  44. package/sources/skills/mvt-implement/manifest.yaml +16 -0
  45. package/sources/skills/mvt-init/business.md +2 -2
  46. package/sources/skills/mvt-init/manifest.yaml +4 -0
  47. package/sources/skills/mvt-manage-context/business.md +11 -0
  48. package/sources/skills/mvt-manage-context/manifest.yaml +20 -3
  49. package/sources/skills/mvt-plan-dev/business.md +101 -20
  50. package/sources/skills/mvt-plan-dev/manifest.yaml +21 -19
  51. package/sources/skills/mvt-quick-dev/business.md +2 -1
  52. package/sources/skills/mvt-quick-dev/manifest.yaml +24 -6
  53. package/sources/skills/mvt-refactor/business.md +2 -1
  54. package/sources/skills/mvt-refactor/manifest.yaml +24 -3
  55. package/sources/skills/mvt-resume/business.md +28 -68
  56. package/sources/skills/mvt-resume/manifest.yaml +17 -7
  57. package/sources/skills/mvt-review/business.md +3 -3
  58. package/sources/skills/mvt-review/manifest.yaml +25 -1
  59. package/sources/skills/mvt-status/business.md +14 -18
  60. package/sources/skills/mvt-status/manifest.yaml +11 -3
  61. package/sources/skills/mvt-sync-context/business.md +69 -35
  62. package/sources/skills/mvt-sync-context/manifest.yaml +9 -0
  63. package/sources/skills/mvt-template/business.md +0 -2
  64. package/sources/skills/mvt-template/manifest.yaml +13 -8
  65. package/sources/skills/mvt-test/business.md +3 -3
  66. package/sources/skills/mvt-test/manifest.yaml +17 -1
  67. package/sources/skills/mvt-update-plan/business.md +41 -28
  68. package/sources/skills/mvt-update-plan/manifest.yaml +14 -19
  69. package/dist/build/plan-validator.d.ts +0 -26
  70. package/dist/build/plan-validator.d.ts.map +0 -1
  71. package/dist/build/plan-validator.js +0 -225
  72. package/dist/build/plan-validator.js.map +0 -1
  73. package/dist/commands/build.d.ts +0 -5
  74. package/dist/commands/build.d.ts.map +0 -1
  75. package/dist/commands/build.js +0 -46
  76. package/dist/commands/build.js.map +0 -1
  77. package/dist/commands/migrate.d.ts +0 -16
  78. package/dist/commands/migrate.d.ts.map +0 -1
  79. package/dist/commands/migrate.js +0 -118
  80. package/dist/commands/migrate.js.map +0 -1
package/README.md CHANGED
@@ -19,7 +19,7 @@ MVTT turns Claude Code into a coordinated engineering team — Analyst, Architec
19
19
  │ ├── project-context.yaml # Tech stack, domain model, conventions
20
20
  │ └── artifacts/ # Analysis docs, design specs, review logs
21
21
  └── knowledge/
22
- ├── core/ # Framework principles & architecture patterns
22
+ ├── core/ # Framework principles
23
23
  ├── principle/ # Your team's coding standards
24
24
  └── project/ # Domain-specific knowledge
25
25
  ```
@@ -147,16 +147,6 @@ mvtt doctor # Check installation health
147
147
  mvtt uninstall # Remove generated files (user data preserved)
148
148
  ```
149
149
 
150
- ## Architecture Patterns
151
-
152
- MVTT ships knowledge for three patterns that workflow skills automatically consume:
153
-
154
- - **`ddd`** — Domain-Driven Design (bounded contexts, aggregates, domain events)
155
- - **`clean-architecture`** — Layered boundaries, dependency inversion
156
- - **`frontend-react`** — React-specific structural conventions
157
-
158
- Detected automatically by `/mvt-init` or configured via `/mvt-config`.
159
-
160
150
  ## Extending MVTT
161
151
 
162
152
  - **Add team knowledge** — Drop markdown files into `.ai-agents/knowledge/principle/` for coding standards, or `project/` for domain knowledge. All skills load them automatically.
@@ -1 +1 @@
1
- {"version":3,"file":"section-loader.d.ts","sourceRoot":"","sources":["../../src/build/section-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AA8EpD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAMR;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CAiBR"}
1
+ {"version":3,"file":"section-loader.d.ts","sourceRoot":"","sources":["../../src/build/section-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AA0FpD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAQR;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CAiBR"}
@@ -25,13 +25,14 @@ function replaceVars(template, vars) {
25
25
  });
26
26
  }
27
27
  function expandBlocks(template, params) {
28
- return template.replace(BLOCK_PATTERN, (_match, key, rawBody) => {
28
+ return template.replace(BLOCK_PATTERN, (match, key, rawBody) => {
29
29
  const val = params[key];
30
30
  if (val === undefined || val === null || val === false)
31
31
  return "";
32
32
  if (Array.isArray(val) && val.length === 0)
33
33
  return "";
34
34
  const body = rawBody.replace(/^\n/, "").replace(/\n$/, "");
35
+ const suffix = match.endsWith("\n") ? "\n" : "";
35
36
  if (Array.isArray(val)) {
36
37
  const items = val
37
38
  .map((item) => {
@@ -41,35 +42,44 @@ function expandBlocks(template, params) {
41
42
  return applyParams(body, { ".": item }).trimEnd();
42
43
  })
43
44
  .join("\n");
44
- return items + "\n";
45
+ return items + suffix;
45
46
  }
46
47
  if (typeof val === "object") {
47
- return applyParams(body, val) + "\n";
48
+ return applyParams(body, val) + suffix;
48
49
  }
49
- return applyParams(body, params) + "\n";
50
+ return applyParams(body, params) + suffix;
50
51
  });
51
52
  }
52
53
  function expandInverted(template, params) {
53
- return template.replace(INVERTED_PATTERN, (_match, key, rawBody) => {
54
+ return template.replace(INVERTED_PATTERN, (match, key, rawBody) => {
54
55
  if (isTruthyNonEmpty(params[key]))
55
56
  return "";
56
57
  const body = rawBody.replace(/^\n/, "").replace(/\n$/, "");
57
- return body + "\n";
58
+ const suffix = match.endsWith("\n") ? "\n" : "";
59
+ return applyParams(body, params) + suffix;
58
60
  });
59
61
  }
60
62
  function expandConditionals(template, params) {
61
- return template.replace(COND_PATTERN, (_match, key, rawBody) => {
63
+ return template.replace(COND_PATTERN, (match, key, rawBody) => {
62
64
  if (!isTruthyNonEmpty(params[key]))
63
65
  return "";
64
66
  const body = rawBody.replace(/^\n/, "").replace(/\n$/, "");
65
- return body + "\n";
67
+ const suffix = match.endsWith("\n") ? "\n" : "";
68
+ return body + suffix;
66
69
  });
67
70
  }
71
+ function stripEmptyTables(text) {
72
+ // Remove Markdown tables that have a heading + header row + separator but no
73
+ // data rows (all conditional rows were removed during template expansion).
74
+ return text.replace(/^#{1,6} [^\n]+\n\n\|[^\n]+\|\n\|[-| :]+\|\n(?=\n|$)/gm, "");
75
+ }
68
76
  export function applyParams(template, params) {
69
77
  let result = expandConditionals(template, params);
70
78
  result = expandBlocks(result, params);
71
79
  result = expandInverted(result, params);
72
80
  result = replaceVars(result, params);
81
+ result = stripEmptyTables(result);
82
+ result = result.replace(/\n{3,}/g, "\n\n");
73
83
  return result;
74
84
  }
75
85
  export function loadSection(section, skillDir, sourcesDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"section-loader.js","sourceRoot":"","sources":["../../src/build/section-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"section-loader.js","sourceRoot":"","sources":["../../src/build/section-loader.ts"],"names":[],"mappings":"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"}
@@ -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,CAuHlF"}
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,16 +78,23 @@ 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
  });
93
+ // Copy bundled scripts from dist/scripts/ (bundled by esbuild, zero external deps)
94
+ // Only copy .cjs files to avoid stale build artifacts leaking into user projects
95
+ const scriptsSrc = path.resolve(packageRoot, "dist/scripts");
96
+ const scriptsDest = path.resolve(projectRoot, ".ai-agents/scripts");
97
+ copyRecursive(scriptsSrc, scriptsDest, materialized, projectRoot, (rel) => !rel.endsWith(".cjs"));
90
98
  const defaults = [
91
99
  [
92
100
  path.resolve(sourcesDir, "defaults/config.yaml"),
@@ -1 +1 @@
1
- {"version":3,"file":"materialize.js","sourceRoot":"","sources":["../../src/fs/materialize.ts"],"names":[],"mappings":"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"}
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":"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"}