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

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 (96) hide show
  1. package/README.md +299 -64
  2. package/README.zh-CN.md +419 -0
  3. package/dist/commands/install.d.ts.map +1 -1
  4. package/dist/commands/install.js +27 -2
  5. package/dist/commands/install.js.map +1 -1
  6. package/dist/commands/uninstall.d.ts.map +1 -1
  7. package/dist/commands/uninstall.js +19 -7
  8. package/dist/commands/uninstall.js.map +1 -1
  9. package/dist/commands/update.d.ts.map +1 -1
  10. package/dist/commands/update.js +4 -2
  11. package/dist/commands/update.js.map +1 -1
  12. package/dist/fs/install-manifest.d.ts +4 -1
  13. package/dist/fs/install-manifest.d.ts.map +1 -1
  14. package/dist/fs/install-manifest.js +13 -1
  15. package/dist/fs/install-manifest.js.map +1 -1
  16. package/dist/fs/materialize.d.ts +2 -0
  17. package/dist/fs/materialize.d.ts.map +1 -1
  18. package/dist/fs/materialize.js +46 -13
  19. package/dist/fs/materialize.js.map +1 -1
  20. package/dist/fs/registry-merge.d.ts +19 -0
  21. package/dist/fs/registry-merge.d.ts.map +1 -0
  22. package/dist/fs/registry-merge.js +220 -0
  23. package/dist/fs/registry-merge.js.map +1 -0
  24. package/dist/scripts/epic-update.cjs +7670 -0
  25. package/dist/scripts/plan-update.cjs +7736 -0
  26. package/dist/scripts/session-update.cjs +84 -6
  27. package/dist/types/platform.d.ts +12 -0
  28. package/dist/types/platform.d.ts.map +1 -0
  29. package/dist/types/platform.js +24 -0
  30. package/dist/types/platform.js.map +1 -0
  31. package/dist/types/registry.d.ts +3 -24
  32. package/dist/types/registry.d.ts.map +1 -1
  33. package/install-manifest.yaml +10 -2
  34. package/package.json +1 -1
  35. package/registry.yaml +72 -198
  36. package/sources/defaults/config.yaml +8 -13
  37. package/sources/defaults/project-context.yaml +2 -5
  38. package/sources/defaults/session.yaml +14 -2
  39. package/sources/knowledge/core/manifest.yaml +1 -4
  40. package/sources/scripts/epic-update.js +512 -0
  41. package/sources/scripts/plan-update.js +614 -0
  42. package/sources/scripts/session-update.js +102 -2
  43. package/sources/sections/activation-load-config.md +1 -1
  44. package/sources/sections/activation-load-context.md +42 -13
  45. package/sources/sections/activation-preflight.md +1 -1
  46. package/sources/sections/footer-next-steps.md +3 -2
  47. package/sources/sections/output-format-constraint.md +14 -0
  48. package/sources/sections/project-context-profile.md +29 -0
  49. package/sources/sections/session-update.md +41 -1
  50. package/sources/skills/mvt-analyze/business.md +46 -8
  51. package/sources/skills/mvt-analyze/manifest.yaml +8 -1
  52. package/sources/skills/mvt-analyze-code/business.md +18 -17
  53. package/sources/skills/mvt-analyze-code/manifest.yaml +9 -6
  54. package/sources/skills/mvt-check-context/business.md +13 -6
  55. package/sources/skills/mvt-check-context/manifest.yaml +0 -5
  56. package/sources/skills/mvt-cleanup/business.md +17 -2
  57. package/sources/skills/mvt-cleanup/manifest.yaml +3 -0
  58. package/sources/skills/mvt-config/business.md +5 -5
  59. package/sources/skills/mvt-config/manifest.yaml +3 -6
  60. package/sources/skills/mvt-create-skill/business.md +2 -14
  61. package/sources/skills/mvt-create-skill/manifest.yaml +2 -4
  62. package/sources/skills/mvt-decompose/business.md +94 -0
  63. package/sources/skills/mvt-decompose/manifest.yaml +121 -0
  64. package/sources/skills/mvt-design/manifest.yaml +3 -0
  65. package/sources/skills/mvt-fix/business.md +21 -6
  66. package/sources/skills/mvt-fix/manifest.yaml +4 -1
  67. package/sources/skills/mvt-help/business.md +11 -9
  68. package/sources/skills/mvt-help/manifest.yaml +0 -5
  69. package/sources/skills/mvt-implement/business.md +57 -10
  70. package/sources/skills/mvt-implement/manifest.yaml +3 -0
  71. package/sources/skills/mvt-init/business.md +23 -13
  72. package/sources/skills/mvt-init/manifest.yaml +4 -2
  73. package/sources/skills/mvt-manage-context/business.md +41 -14
  74. package/sources/skills/mvt-manage-context/manifest.yaml +7 -5
  75. package/sources/skills/mvt-plan-dev/business.md +17 -9
  76. package/sources/skills/mvt-plan-dev/manifest.yaml +3 -0
  77. package/sources/skills/mvt-quick-dev/business.md +22 -7
  78. package/sources/skills/mvt-quick-dev/manifest.yaml +3 -1
  79. package/sources/skills/mvt-refactor/business.md +32 -17
  80. package/sources/skills/mvt-refactor/manifest.yaml +2 -4
  81. package/sources/skills/mvt-resume/business.md +32 -12
  82. package/sources/skills/mvt-resume/manifest.yaml +3 -3
  83. package/sources/skills/mvt-review/business.md +24 -9
  84. package/sources/skills/mvt-review/manifest.yaml +3 -0
  85. package/sources/skills/mvt-status/business.md +37 -9
  86. package/sources/skills/mvt-status/manifest.yaml +2 -2
  87. package/sources/skills/mvt-sync-context/business.md +77 -34
  88. package/sources/skills/mvt-sync-context/manifest.yaml +6 -0
  89. package/sources/skills/mvt-template/business.md +1 -1
  90. package/sources/skills/mvt-template/manifest.yaml +0 -5
  91. package/sources/skills/mvt-test/business.md +30 -15
  92. package/sources/skills/mvt-test/manifest.yaml +3 -0
  93. package/sources/skills/mvt-update-plan/business.md +64 -33
  94. package/sources/skills/mvt-update-plan/manifest.yaml +10 -7
  95. package/sources/templates/decompose-output/body.md +13 -0
  96. package/sources/templates/decompose-output/manifest.yaml +11 -0
@@ -1 +1 @@
1
- {"version":3,"file":"install-manifest.d.ts","sourceRoot":"","sources":["../../src/fs/install-manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAC5C;AAID,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAIzF;AAED,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,gBAAgB,EAAE,EACzB,QAAQ,EAAE,oBAAoB,GAAG,IAAI,GACpC,oBAAoB,CAgBtB"}
1
+ {"version":3,"file":"install-manifest.d.ts","sourceRoot":"","sources":["../../src/fs/install-manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAC5C;AAID,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAIzF;AAED,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,MAAM,GAAG,oBAAoB,GAC/C,UAAU,EAAE,CAYd;AAED,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,gBAAgB,EAAE,EACzB,QAAQ,EAAE,oBAAoB,GAAG,IAAI,EACrC,SAAS,CAAC,EAAE,UAAU,EAAE,GACvB,oBAAoB,CAiBtB"}
@@ -1,5 +1,6 @@
1
1
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import path from "node:path";
3
+ import { DEFAULT_PLATFORMS, getPlatformById } from "../types/platform.js";
3
4
  const MANIFEST_REL = ".ai-agents/.mvtt-manifest.json";
4
5
  export function manifestPath(projectRoot) {
5
6
  return path.resolve(projectRoot, MANIFEST_REL);
@@ -10,7 +11,17 @@ export function readInstallationManifest(projectRoot) {
10
11
  return null;
11
12
  return JSON.parse(readFileSync(p, "utf-8"));
12
13
  }
13
- export function writeInstallationManifest(projectRoot, version, files, previous) {
14
+ export function readInstalledPlatforms(projectOrManifest) {
15
+ const manifest = typeof projectOrManifest === "string"
16
+ ? readInstallationManifest(projectOrManifest)
17
+ : projectOrManifest;
18
+ if (!manifest?.platforms || manifest.platforms.length === 0) {
19
+ return DEFAULT_PLATFORMS;
20
+ }
21
+ const valid = manifest.platforms.filter((p) => getPlatformById(p) !== undefined);
22
+ return valid.length > 0 ? valid : DEFAULT_PLATFORMS;
23
+ }
24
+ export function writeInstallationManifest(projectRoot, version, files, previous, platforms) {
14
25
  const now = new Date().toISOString();
15
26
  const fileMap = {};
16
27
  for (const f of files) {
@@ -20,6 +31,7 @@ export function writeInstallationManifest(projectRoot, version, files, previous)
20
31
  mvtt_version: version,
21
32
  installed_at: previous?.installed_at ?? now,
22
33
  last_updated_at: now,
34
+ platforms: platforms ?? previous?.platforms ?? DEFAULT_PLATFORMS,
23
35
  files: fileMap,
24
36
  };
25
37
  writeFileSync(manifestPath(projectRoot), JSON.stringify(manifest, null, 2), "utf-8");
@@ -1 +1 @@
1
- {"version":3,"file":"install-manifest.js","sourceRoot":"","sources":["../../src/fs/install-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,IAAI,MAAM,WAAW,CAAC;AAe7B,MAAM,YAAY,GAAG,gCAAgC,CAAC;AAEtD,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,WAAmB;IAC1D,MAAM,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAyB,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,WAAmB,EACnB,OAAe,EACf,KAAyB,EACzB,QAAqC;IAErC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,OAAO,GAAwC,EAAE,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9D,CAAC;IAED,MAAM,QAAQ,GAAyB;QACrC,YAAY,EAAE,OAAO;QACrB,YAAY,EAAE,QAAQ,EAAE,YAAY,IAAI,GAAG;QAC3C,eAAe,EAAE,GAAG;QACpB,KAAK,EAAE,OAAO;KACf,CAAC;IAEF,aAAa,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"install-manifest.js","sourceRoot":"","sources":["../../src/fs/install-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAe1E,MAAM,YAAY,GAAG,gCAAgC,CAAC;AAEtD,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,WAAmB;IAC1D,MAAM,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAyB,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,iBAAgD;IAEhD,MAAM,QAAQ,GACZ,OAAO,iBAAiB,KAAK,QAAQ;QACnC,CAAC,CAAC,wBAAwB,CAAC,iBAAiB,CAAC;QAC7C,CAAC,CAAC,iBAAiB,CAAC;IACxB,IAAI,CAAC,QAAQ,EAAE,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CACrC,CAAC,CAAC,EAAmB,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,SAAS,CACzD,CAAC;IACF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,WAAmB,EACnB,OAAe,EACf,KAAyB,EACzB,QAAqC,EACrC,SAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,OAAO,GAAwC,EAAE,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9D,CAAC;IAED,MAAM,QAAQ,GAAyB;QACrC,YAAY,EAAE,OAAO;QACrB,YAAY,EAAE,QAAQ,EAAE,YAAY,IAAI,GAAG;QAC3C,eAAe,EAAE,GAAG;QACpB,SAAS,EAAE,SAAS,IAAI,QAAQ,EAAE,SAAS,IAAI,iBAAiB;QAChE,KAAK,EAAE,OAAO;KACf,CAAC;IAEF,aAAa,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { PlatformId } from "../types/platform.js";
1
2
  export interface MaterializedFile {
2
3
  absPath: string;
3
4
  relPath: string;
@@ -9,6 +10,7 @@ export interface MaterializeOptions {
9
10
  projectRoot: string;
10
11
  timestamp?: string;
11
12
  overwriteCreateOnce?: boolean;
13
+ platforms?: PlatformId[];
12
14
  }
13
15
  export declare function materializeProject(options: MaterializeOptions): MaterializedFile[];
14
16
  //# sourceMappingURL=materialize.d.ts.map
@@ -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":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAOvD,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;IAC9B,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC;CAC1B;AAyCD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,gBAAgB,EAAE,CA8JlF"}
@@ -1,9 +1,12 @@
1
1
  import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync, } from "node:fs";
2
2
  import path from "node:path";
3
3
  import { parse as parseYaml } from "yaml";
4
+ import { DEFAULT_PLATFORMS, PLATFORMS, getPlatformById } from "../types/platform.js";
4
5
  import { assembleFromManifest } from "../build/assembler.js";
5
6
  import { hashString, hashFile } from "./hash.js";
6
7
  import { updateCoreManifest } from "./core-manifest.js";
8
+ import { updateRegistry } from "./registry-merge.js";
9
+ const SKILL_OUTPUT_PREFIX = PLATFORMS[0].skillDir + "/";
7
10
  function copyRecursive(srcDir, destDir, collected, projectRoot, shouldSkip, baseSrcDir) {
8
11
  if (!existsSync(srcDir))
9
12
  return;
@@ -34,6 +37,7 @@ function copyRecursive(srcDir, destDir, collected, projectRoot, shouldSkip, base
34
37
  }
35
38
  export function materializeProject(options) {
36
39
  const { packageRoot, projectRoot, overwriteCreateOnce = false } = options;
40
+ const selectedPlatforms = options.platforms ?? DEFAULT_PLATFORMS;
37
41
  const timestamp = options.timestamp ?? new Date().toISOString();
38
42
  const sourcesDir = path.resolve(packageRoot, "sources");
39
43
  const materialized = [];
@@ -52,15 +56,42 @@ export function materializeProject(options) {
52
56
  sourcesDir,
53
57
  timestamp,
54
58
  });
55
- const outPath = path.resolve(projectRoot, manifest.output);
56
- mkdirSync(path.dirname(outPath), { recursive: true });
57
- writeFileSync(outPath, content, "utf-8");
58
- materialized.push({
59
- absPath: outPath,
60
- relPath: manifest.output,
61
- hash: hashString(content),
62
- category: "generated",
63
- });
59
+ const isSkillOutput = manifest.output.startsWith(SKILL_OUTPUT_PREFIX);
60
+ if (isSkillOutput) {
61
+ // Write to all selected platforms
62
+ const written = new Set();
63
+ for (const platformId of selectedPlatforms) {
64
+ const platform = getPlatformById(platformId);
65
+ if (!platform)
66
+ continue;
67
+ const platformRelPath = manifest.output.replace(SKILL_OUTPUT_PREFIX, platform.skillDir + "/");
68
+ // Avoid duplicate writes (e.g. if same platform appears twice)
69
+ if (written.has(platformRelPath))
70
+ continue;
71
+ written.add(platformRelPath);
72
+ const outPath = path.resolve(projectRoot, platformRelPath);
73
+ mkdirSync(path.dirname(outPath), { recursive: true });
74
+ writeFileSync(outPath, content, "utf-8");
75
+ materialized.push({
76
+ absPath: outPath,
77
+ relPath: platformRelPath,
78
+ hash: hashString(content),
79
+ category: "generated",
80
+ });
81
+ }
82
+ }
83
+ else {
84
+ // Non-skill output (templates, etc.) — write once to canonical path
85
+ const outPath = path.resolve(projectRoot, manifest.output);
86
+ mkdirSync(path.dirname(outPath), { recursive: true });
87
+ writeFileSync(outPath, content, "utf-8");
88
+ materialized.push({
89
+ absPath: outPath,
90
+ relPath: manifest.output,
91
+ hash: hashString(content),
92
+ category: "generated",
93
+ });
94
+ }
64
95
  }
65
96
  }
66
97
  // Skip core/manifest.yaml during the recursive copy: it is treated as
@@ -77,15 +108,17 @@ export function materializeProject(options) {
77
108
  hash: hashFile(coreManifestDest),
78
109
  category: "create_once",
79
110
  });
80
- const registrySrc = path.resolve(packageRoot, "registry.yaml");
111
+ // Reconcile registry.yaml instead of overwriting it: user-authored skills
112
+ // (custom: true) and knowledge bindings added via /mvt-create-skill and
113
+ // /mvt-manage-context must survive `mvtt update`. Treated as create_once
114
+ // (like core/manifest.yaml) so the modified-files guard does not flag it.
81
115
  const registryDest = path.resolve(projectRoot, ".ai-agents/registry.yaml");
82
- mkdirSync(path.dirname(registryDest), { recursive: true });
83
- copyFileSync(registrySrc, registryDest);
116
+ updateRegistry(projectRoot, packageRoot);
84
117
  materialized.push({
85
118
  absPath: registryDest,
86
119
  relPath: ".ai-agents/registry.yaml",
87
120
  hash: hashFile(registryDest),
88
- category: "generated",
121
+ category: "create_once",
89
122
  });
90
123
  // Copy bundled scripts from dist/scripts/ (bundled by esbuild, zero external deps)
91
124
  // 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":"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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;AAkMD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,mBAAmB,CA2C5F"}
@@ -0,0 +1,220 @@
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 (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` is a project-keyed map. Each key (e.g. "_all",
70
+ * "web", "api") is the framework baseline plus user additions not already
71
+ * present (keyed by `id`, falling back to deep content equality). Both
72
+ * top-level and per-skill knowledge maps are merged independently.
73
+ * - Old flat arrays (pre-migration: `knowledge.shared` or `skills.*.knowledge`
74
+ * as arrays) are treated as the `_all` key during merge.
75
+ */
76
+ function mergeRegistry(framework, user) {
77
+ const fwSkills = framework.skills ?? {};
78
+ const userSkills = user.skills ?? {};
79
+ const mergedSkills = {};
80
+ let preservedBindingCount = 0;
81
+ // --- Per-skill knowledge merge (map-aware) ---
82
+ // For each framework skill: refresh from framework, re-graft user-added
83
+ // knowledge entries per project key.
84
+ for (const [name, fwEntry] of Object.entries(fwSkills)) {
85
+ const next = clone(fwEntry);
86
+ const userEntry = userSkills[name];
87
+ if (userEntry && userEntry.custom !== true) {
88
+ const fwKnowRaw = fwEntry.knowledge;
89
+ const userKnowRaw = userEntry.knowledge;
90
+ // Normalize: map or old array -> map with _all key
91
+ const fwKnowMap = Array.isArray(fwKnowRaw)
92
+ ? { _all: fwKnowRaw }
93
+ : (fwKnowRaw ?? {});
94
+ const userKnowMap = Array.isArray(userKnowRaw)
95
+ ? { _all: userKnowRaw }
96
+ : (userKnowRaw ?? {});
97
+ // Migration: old per-skill "shared" key -> "_all"
98
+ if (Array.isArray(userKnowMap.shared)) {
99
+ userKnowMap._all = [...(userKnowMap._all ?? []), ...userKnowMap.shared];
100
+ delete userKnowMap.shared;
101
+ }
102
+ const allKeys = new Set([...Object.keys(fwKnowMap), ...Object.keys(userKnowMap)]);
103
+ const mergedSkillKnowledge = {};
104
+ for (const key of allKeys) {
105
+ const fwEntries = fwKnowMap[key] ?? [];
106
+ const userEntries = userKnowMap[key] ?? [];
107
+ const keyOf = (e) => typeof e?.id === "string"
108
+ ? `id:${e.id}`
109
+ : stableKey(e);
110
+ const fwKeys = new Set(fwEntries.map(keyOf));
111
+ const additions = userEntries.filter((e) => !fwKeys.has(keyOf(e)));
112
+ mergedSkillKnowledge[key] = [...clone(fwEntries), ...clone(additions)];
113
+ preservedBindingCount += additions.length;
114
+ }
115
+ if (Object.keys(mergedSkillKnowledge).length > 0) {
116
+ next.knowledge = mergedSkillKnowledge;
117
+ }
118
+ }
119
+ mergedSkills[name] = next;
120
+ }
121
+ // User custom skills not part of the framework set.
122
+ let customSkillCount = 0;
123
+ for (const [name, userEntry] of Object.entries(userSkills)) {
124
+ if (mergedSkills[name])
125
+ continue;
126
+ if (userEntry && userEntry.custom === true) {
127
+ mergedSkills[name] = clone(userEntry);
128
+ customSkillCount += 1;
129
+ }
130
+ // Otherwise drop: a retired framework skill or a legacy/unmarked entry.
131
+ }
132
+ // --- Top-level knowledge map merge ---
133
+ // Normalize old flat format (knowledge.shared as array) -> _all key.
134
+ const fwKnowRaw = framework.knowledge;
135
+ const userKnowRaw = user.knowledge;
136
+ const fwKnowMap = Array.isArray(fwKnowRaw)
137
+ ? { _all: fwKnowRaw }
138
+ : (fwKnowRaw ?? {});
139
+ const userKnowMap = Array.isArray(userKnowRaw)
140
+ ? { _all: userKnowRaw }
141
+ : (userKnowRaw ?? {});
142
+ // Migration: old top-level "shared" key -> "_all"
143
+ if (Array.isArray(userKnowMap.shared)) {
144
+ userKnowMap._all = [...(userKnowMap._all ?? []), ...userKnowMap.shared];
145
+ delete userKnowMap.shared;
146
+ }
147
+ const allKeys = new Set([...Object.keys(fwKnowMap), ...Object.keys(userKnowMap)]);
148
+ const mergedKnowledge = {};
149
+ for (const key of allKeys) {
150
+ const fwEntries = fwKnowMap[key] ?? [];
151
+ const userEntries = userKnowMap[key] ?? [];
152
+ const keyOf = (e) => typeof e?.id === "string"
153
+ ? `id:${e.id}`
154
+ : stableKey(e);
155
+ const fwKeys = new Set(fwEntries.map(keyOf));
156
+ const additions = userEntries.filter((e) => !fwKeys.has(keyOf(e)));
157
+ mergedKnowledge[key] = [...clone(fwEntries), ...clone(additions)];
158
+ preservedBindingCount += additions.length;
159
+ }
160
+ const merged = {
161
+ ...framework,
162
+ knowledge: mergedKnowledge,
163
+ skills: mergedSkills,
164
+ };
165
+ return {
166
+ merged,
167
+ result: {
168
+ frameworkSkillCount: Object.keys(fwSkills).length,
169
+ customSkillCount,
170
+ preservedBindingCount,
171
+ },
172
+ };
173
+ }
174
+ /**
175
+ * Reconcile the project's `.ai-agents/registry.yaml` with the framework
176
+ * registry shipped in the package, preserving user-authored skills and
177
+ * knowledge bindings across `mvtt update`.
178
+ *
179
+ * On a fresh install (no existing user registry) the framework file is copied
180
+ * verbatim so its documentation comments survive. When a user registry already
181
+ * exists it is backed up to `.ai-agents/.backup/` and rewritten with the merged
182
+ * result.
183
+ */
184
+ export function updateRegistry(projectRoot, packageRoot) {
185
+ const frameworkPath = path.resolve(packageRoot, FRAMEWORK_REGISTRY_REL);
186
+ const userPath = path.resolve(projectRoot, USER_REGISTRY_REL);
187
+ const frameworkRaw = existsSync(frameworkPath) ? readFileSync(frameworkPath, "utf-8") : null;
188
+ const framework = readRegistry(frameworkPath);
189
+ if (!frameworkRaw || !framework) {
190
+ return {
191
+ written: false,
192
+ backup: null,
193
+ frameworkSkillCount: 0,
194
+ customSkillCount: 0,
195
+ preservedBindingCount: 0,
196
+ };
197
+ }
198
+ mkdirSync(path.dirname(userPath), { recursive: true });
199
+ // Install and update share one path: a fresh install is just a merge against
200
+ // an empty user registry. This guarantees `mvtt install` and `mvtt update`
201
+ // produce byte-identical output (no verbatim-copy vs re-serialize drift).
202
+ const existingUser = readRegistry(userPath) ?? {};
203
+ let backup = null;
204
+ if (existsSync(userPath)) {
205
+ backup = backupRegistry(projectRoot, userPath);
206
+ }
207
+ const { merged, result } = mergeRegistry(framework, existingUser);
208
+ // lineWidth: 0 disables YAML line folding so long `description` strings stay
209
+ // on a single line. Only the framework file's leading comment header is
210
+ // preserved (yaml.stringify drops comments); inline section comments are not.
211
+ const serialized = leadingComments(frameworkRaw) +
212
+ stringifyYaml(merged, {
213
+ lineWidth: 0,
214
+ defaultStringType: "QUOTE_DOUBLE",
215
+ defaultKeyType: "PLAIN",
216
+ });
217
+ writeFileSync(userPath, serialized, "utf-8");
218
+ return { written: true, backup, ...result };
219
+ }
220
+ //# 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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"}