@modus-ai/modus 0.2.10 → 0.3.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 (110) hide show
  1. package/dist/cli/index.js +2 -0
  2. package/dist/cli/index.js.map +1 -1
  3. package/dist/commands/doctor.d.ts.map +1 -1
  4. package/dist/commands/doctor.js +8 -3
  5. package/dist/commands/doctor.js.map +1 -1
  6. package/dist/commands/init.d.ts +39 -2
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +234 -3
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/status.d.ts.map +1 -1
  11. package/dist/commands/status.js +9 -3
  12. package/dist/commands/status.js.map +1 -1
  13. package/dist/generators/claude.d.ts +4 -2
  14. package/dist/generators/claude.d.ts.map +1 -1
  15. package/dist/generators/claude.js +17 -8
  16. package/dist/generators/claude.js.map +1 -1
  17. package/dist/generators/codebuddy.d.ts.map +1 -1
  18. package/dist/generators/codebuddy.js +15 -3
  19. package/dist/generators/codebuddy.js.map +1 -1
  20. package/dist/generators/codex.d.ts.map +1 -1
  21. package/dist/generators/codex.js +4 -4
  22. package/dist/generators/codex.js.map +1 -1
  23. package/dist/generators/continue.d.ts +17 -0
  24. package/dist/generators/continue.d.ts.map +1 -0
  25. package/dist/generators/continue.js +441 -0
  26. package/dist/generators/continue.js.map +1 -0
  27. package/dist/generators/copilot.d.ts.map +1 -1
  28. package/dist/generators/copilot.js +3 -2
  29. package/dist/generators/copilot.js.map +1 -1
  30. package/dist/generators/cursor.d.ts +4 -3
  31. package/dist/generators/cursor.d.ts.map +1 -1
  32. package/dist/generators/cursor.js +22 -11
  33. package/dist/generators/cursor.js.map +1 -1
  34. package/dist/generators/custom.d.ts +2 -2
  35. package/dist/generators/custom.d.ts.map +1 -1
  36. package/dist/generators/custom.js +9 -2
  37. package/dist/generators/custom.js.map +1 -1
  38. package/dist/generators/index.d.ts.map +1 -1
  39. package/dist/generators/index.js +11 -0
  40. package/dist/generators/index.js.map +1 -1
  41. package/dist/generators/modus.d.ts +12 -0
  42. package/dist/generators/modus.d.ts.map +1 -0
  43. package/dist/generators/modus.js +225 -0
  44. package/dist/generators/modus.js.map +1 -0
  45. package/dist/utils/config.d.ts +20 -1
  46. package/dist/utils/config.d.ts.map +1 -1
  47. package/dist/utils/config.js.map +1 -1
  48. package/dist/utils/file-system.d.ts +16 -0
  49. package/dist/utils/file-system.d.ts.map +1 -1
  50. package/dist/utils/file-system.js +40 -0
  51. package/dist/utils/file-system.js.map +1 -1
  52. package/package.json +1 -1
  53. package/schemas/harness-schema.yaml +13 -13
  54. package/templates/agents/modus-analyst.md +2 -2
  55. package/templates/agents/modus-deployer.md +1 -1
  56. package/templates/agents/modus-designer.md +1 -1
  57. package/templates/agents/modus-developer.md +1 -1
  58. package/templates/agents/modus-perf-auditor.md +1 -1
  59. package/templates/agents/modus-reviewer.md +1 -1
  60. package/templates/agents/modus-security-auditor.md +1 -1
  61. package/templates/agents/modus-skill-creator.md +1 -1
  62. package/templates/agents/modus-tester.md +1 -1
  63. package/templates/commands/auto.md +3 -1
  64. package/templates/commands/commit.md +11 -5
  65. package/templates/commands/cr.md +14 -10
  66. package/templates/commands/harness.md +27 -18
  67. package/templates/commands/init.md +56 -23
  68. package/templates/commands/modus.md +33 -11
  69. package/templates/commands/plan.md +23 -19
  70. package/templates/commands/spec.md +30 -17
  71. package/templates/commands/upgrade.md +50 -38
  72. package/templates/commands/vibe.md +30 -20
  73. package/templates/domain-business-readme.md +69 -0
  74. package/templates/domain-code/SKILL.md +94 -0
  75. package/templates/domain-code/apis.md +48 -0
  76. package/templates/domain-code/data-models.md +57 -0
  77. package/templates/domain-code/entities.md +45 -0
  78. package/templates/domain-code/services.md +51 -0
  79. package/templates/domain-history-readme.md +60 -0
  80. package/templates/domain-scenarios-readme.md +58 -0
  81. package/templates/knowledge-base-map.md +78 -0
  82. package/templates/knowledge-base-service-graph.md +100 -0
  83. package/templates/knowledge-catalog.md +38 -43
  84. package/templates/paths-v4.md +156 -0
  85. package/templates/rules/modus-workflow/RULE.mdc +45 -38
  86. package/templates/skills/modus-agents/analyst/SKILL.md +1 -1
  87. package/templates/skills/modus-agents/developer/SKILL.md +1 -1
  88. package/templates/skills/modus-agents/reviewer/SKILL.md +1 -1
  89. package/templates/skills/modus-agents/skill-creator/SKILL.md +3 -3
  90. package/templates/skills/modus-auto/SKILL.md +19 -19
  91. package/templates/skills/modus-cr/SKILL.md +1 -1
  92. package/templates/skills/modus-design-brief/SKILL.md +3 -3
  93. package/templates/skills/modus-harness/SKILL.md +5 -5
  94. package/templates/skills/modus-init/SKILL.md +330 -824
  95. package/templates/skills/modus-init/shared/frontmatter-spec.md +255 -0
  96. package/templates/skills/modus-init/shared/stack-detection.md +144 -0
  97. package/templates/skills/modus-init/shared/universal-skill-format.md +362 -0
  98. package/templates/skills/modus-init/strategies/fallback-init.md +150 -0
  99. package/templates/skills/modus-init/strategies/frontend-init.md +298 -0
  100. package/templates/skills/modus-init/strategies/java-init.md +278 -0
  101. package/templates/skills/modus-plan/SKILL.md +6 -6
  102. package/templates/skills/modus-platform/SKILL.md +1 -1
  103. package/templates/skills/modus-spec/SKILL.md +1 -1
  104. package/templates/skills/modus-vibe/SKILL.md +10 -10
  105. package/templates/template/analysis.md +83 -0
  106. package/templates/template/design.md +160 -0
  107. package/templates/template/pid.md +97 -0
  108. package/templates/template/plan.md +91 -0
  109. package/templates/template/spec.md +78 -0
  110. package/templates/template/sprint-contract.md +101 -0
@@ -5,7 +5,7 @@ export interface BizSkillSync {
5
5
  enabled: boolean;
6
6
  /**
7
7
  * Output path template. Supports placeholders:
8
- * {domain} → business domain name (e.g. "biz-track")
8
+ * {domain} → business domain name (e.g. "track", "order"; v4 不再加 biz- 前缀)
9
9
  * {ext} → file extension (without dot, derived from fileExtension)
10
10
  */
11
11
  outputPath: string;
@@ -44,7 +44,7 @@ export declare function generateCustomPlatformFiles(projectRoot: string, config:
44
44
  /**
45
45
  * Sync a biz skill to all custom platforms that have bizSkill.enabled=true.
46
46
  * Called from the `/modus:init` SKILL.md flow after writing the canonical
47
- * `modus/knowledge/biz-{domain}/SKILL.md`.
47
+ * `modus/knowledge_base/domain/{domain}/code/SKILL.md` (v4.0 path).
48
48
  *
49
49
  * This resolves the "ongoing sync" pain point for custom platforms:
50
50
  * every time biz skills are updated, this function ensures custom platform
@@ -1 +1 @@
1
- {"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../src/generators/custom.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAMtD,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,aAAa,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/C,wDAAwD;IACxD,SAAS,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,eAAe,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAC9C,mEAAmE;IACnE,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,oBAAoB,CAAC;IACnC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA2B7E;AAMD,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,KAAK,GAAE,eAAoB,GAC1B,IAAI,CAKN;AAsGD;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,IAAI,CAKN;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,IAAI,CAgBN"}
1
+ {"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../src/generators/custom.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAMtD,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,aAAa,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/C,wDAAwD;IACxD,SAAS,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,eAAe,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAC9C,mEAAmE;IACnE,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,oBAAoB,CAAC;IACnC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA2B7E;AAMD,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,KAAK,GAAE,eAAoB,GAC1B,IAAI,CAKN;AA+GD;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,IAAI,CAKN;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,IAAI,CAgBN"}
@@ -5,7 +5,7 @@
5
5
  import fs from 'node:fs';
6
6
  import path from 'node:path';
7
7
  import yaml from 'js-yaml';
8
- import { writeFile, fileExists, readFile, ensureDir, readTemplate } from '../utils/file-system.js';
8
+ import { writeFile, fileExists, readFile, ensureDir, readTemplate, copyTemplateDir } from '../utils/file-system.js';
9
9
  // ---------------------------------------------------------------------------
10
10
  // Discovery
11
11
  // ---------------------------------------------------------------------------
@@ -103,6 +103,13 @@ function generateFrameworkFiles(projectRoot, config, platform) {
103
103
  for (const [cmdId, templatePath] of Object.entries(skillTemplateMap)) {
104
104
  if (!enabled.has(cmdId))
105
105
  continue;
106
+ // modus-init 是 Router + Strategy + Shared 多文件结构,递归拷贝整个目录
107
+ // 其它 framework Skill 仍然按单文件方式输出(保持自定义平台的扁平结构兼容性)
108
+ if (cmdId === 'init') {
109
+ const destDir = path.join(outputDir, `modus-init`);
110
+ copyTemplateDir('skills/modus-init', destDir);
111
+ continue;
112
+ }
106
113
  let body = '';
107
114
  try {
108
115
  body = readTemplate(templatePath);
@@ -136,7 +143,7 @@ function buildDefaultConstitution(config, hardRules) {
136
143
  /**
137
144
  * Sync a biz skill to all custom platforms that have bizSkill.enabled=true.
138
145
  * Called from the `/modus:init` SKILL.md flow after writing the canonical
139
- * `modus/knowledge/biz-{domain}/SKILL.md`.
146
+ * `modus/knowledge_base/domain/{domain}/code/SKILL.md` (v4.0 path).
140
147
  *
141
148
  * This resolves the "ongoing sync" pain point for custom platforms:
142
149
  * every time biz skills are updated, this function ensures custom platform
@@ -1 +1 @@
1
- {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../src/generators/custom.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,0EAA0E;AAC1E,wEAAwE;AACxE,mEAAmE;AACnE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AA+CnG,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAClE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,CAAC;IAE5C,MAAM,WAAW,GAAyB,EAAE,CAAC;IAC7C,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS;QACpC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAuB,CAAC;YACpD,IAAI,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC;gBACtC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,UAAU,2BAA2B,CACzC,WAAmB,EACnB,MAAmB,EACnB,QAAyB,EAAE;IAE3B,MAAM,SAAS,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACnD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,SAAS,sBAAsB,CAC7B,WAAmB,EACnB,MAAmB,EACnB,QAA4B;IAE5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7D,SAAS,CAAC,SAAS,CAAC,CAAC;IAErB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,MAA4C,CAAC;IACzD,MAAM,YAAY,GAAI,GAAG,CAAC,cAAc,CAAyC,IAAI,EAAE,CAAC;IACxF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC,CAAE,YAAY,CAAC,YAAY,CAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1E,CAAC,CAAC,EAAE,CAAC;IAEP,6EAA6E;IAC7E,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,gBAAgB,GAAG,QAAQ,CAAC,oBAAoB;YACpD,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC;YACjE,CAAC,CAAC,wBAAwB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEhD,SAAS,CACP,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,GAAG,EAAE,CAAC,EACjD,gBAAgB,CACjB,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAM,YAAY,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAM,YAAY,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAM,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACzE,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAM,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAM,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAAG,YAAY,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACvF,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAE/E,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB;QAC5C,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1E,CAAC,CAAC,uBAAuB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAEvD,SAAS,CACP,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,GAAG,EAAE,CAAC,EAC7C,YAAY,CACb,CAAC;IAEF,6EAA6E;IAC7E,MAAM,gBAAgB,GAA2B;QAC/C,IAAI,EAAK,4BAA4B;QACrC,IAAI,EAAK,4BAA4B;QACrC,IAAI,EAAK,4BAA4B;QACrC,IAAI,EAAK,4BAA4B;QACrC,IAAI,EAAK,4BAA4B;QACrC,OAAO,EAAE,+BAA+B;KACzC,CAAC;IAEF,IAAI,QAAQ,CAAC,YAAY,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QACnD,KAAK,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS;YAClC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,SAAS,CACP,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GAAG,EAAE,CAAC,EAC7C,IAAI,CACL,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAmB,EAAE,SAAiB;IACtE,MAAM,GAAG,GAAG,MAA4C,CAAC;IACzD,MAAM,YAAY,GAAI,GAAG,CAAC,cAAc,CAAyC,IAAI,EAAE,CAAC;IACxF,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAErC,MAAM,KAAK,GAAG,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;IACnD,IAAI,OAAO;QAAI,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9C,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9D,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,sCAAsC,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,KAAK,CAAC,IAAI,CACR,sHAAsH,CACvH,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,8EAA8E;AAC9E,2CAA2C;AAC3C,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,gCAAgC,CAC9C,WAAmB,EACnB,MAAc,EACd,YAAoB;IAEpB,MAAM,SAAS,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACnD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,4BAA4B,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,WAAmB,EACnB,QAA4B,EAC5B,MAAc,EACd,YAAoB;IAEpB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO;QAAE,OAAO;IAExC,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU;SAC5C,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;SAC3B,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC;IAEpD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO;QACpC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO;aACtB,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;aAC3B,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC;QACvC,CAAC,CAAC,YAAY,CAAC;IAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACpD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../src/generators/custom.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAM9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE,eAAoB,GACzB,IAAI,CAuBN"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAO9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE,eAAoB,GACzB,IAAI,CA6BN"}
@@ -1,10 +1,16 @@
1
1
  // Platform dispatcher — generates configuration files for all selected AI platforms.
2
2
  // Called by `modus init` and `modus update`; replaces direct calls to generateCodeBuddyFiles.
3
+ //
4
+ // v4.0: Always run the neutral-layer generator FIRST so `.modus/`, `modus/template/`,
5
+ // `modus/knowledge_base/` and `modus/artifacts/` are present before any platform stub
6
+ // is written. Platform stubs reference the neutral source via `<!-- modus:source ... -->`.
7
+ import { generateModusNeutralFiles } from './modus.js';
3
8
  import { generateCodeBuddyFiles } from './codebuddy.js';
4
9
  import { generateClaudeFiles } from './claude.js';
5
10
  import { generateCursorFiles } from './cursor.js';
6
11
  import { generateCopilotFiles } from './copilot.js';
7
12
  import { generateCodexFiles } from './codex.js';
13
+ import { generateContinueFiles } from './continue.js';
8
14
  import { generateCustomPlatformFiles } from './custom.js';
9
15
  /**
10
16
  * Generate configuration files for every platform listed in `config.platforms`.
@@ -12,10 +18,15 @@ import { generateCustomPlatformFiles } from './custom.js';
12
18
  * Defaults to ['codebuddy'] when the field is absent to preserve backward compat.
13
19
  */
14
20
  export function generateAllPlatformFiles(projectRoot, config, opts = {}) {
21
+ // v4.0: Neutral layer is the single source of truth — always emit first
22
+ generateModusNeutralFiles(projectRoot, config, opts);
15
23
  const platforms = config.platforms ?? ['codebuddy'];
16
24
  if (platforms.includes('codebuddy')) {
17
25
  generateCodeBuddyFiles(projectRoot, config, opts);
18
26
  }
27
+ if (platforms.includes('continue')) {
28
+ generateContinueFiles(projectRoot, config, opts);
29
+ }
19
30
  if (platforms.includes('claude')) {
20
31
  generateClaudeFiles(projectRoot, config, opts);
21
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,8FAA8F;AAC9F,OAAO,EAAE,sBAAsB,EAAwB,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAK1D;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,MAAmB,EACnB,OAAwB,EAAE;IAE1B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,CAAC;IAEpD,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,uDAAuD;IACvD,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChE,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,8FAA8F;AAC9F,EAAE;AACF,sFAAsF;AACtF,sFAAsF;AACtF,2FAA2F;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAwB,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAK1D;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,MAAmB,EACnB,OAAwB,EAAE;IAE1B,wEAAwE;IACxE,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAErD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,CAAC;IAEpD,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,uDAAuD;IACvD,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChE,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ModusConfig } from '../utils/config.js';
2
+ import type { GenerateOptions } from './codebuddy.js';
3
+ export declare function generateModusNeutralFiles(projectRoot: string, _config: ModusConfig, _opts?: GenerateOptions): void;
4
+ /**
5
+ * Inject a `<!-- modus:source ... -->` header at the top of a markdown body
6
+ * so users know the authoritative source lives in `.modus/`.
7
+ *
8
+ * If the body already starts with YAML frontmatter (`---\n...\n---`), the
9
+ * header is inserted *after* the frontmatter to preserve frontmatter parsing.
10
+ */
11
+ export declare function injectNeutralSourceHeader(body: string, neutralPath: string): string;
12
+ //# sourceMappingURL=modus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modus.d.ts","sourceRoot":"","sources":["../../src/generators/modus.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AA0EtD,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,EACpB,KAAK,GAAE,eAAoB,GAC1B,IAAI,CAMN;AA4ID;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAanF"}
@@ -0,0 +1,225 @@
1
+ // Modus neutral-layer file generator (v4.0).
2
+ // Writes the platform-agnostic "single source of truth":
3
+ // - .modus/commands/*.md — full set of slash commands (authoritative)
4
+ // - .modus/skills/modus-*/ — framework skills (authoritative)
5
+ // - modus/template/*.md — artifact templates (pid/design/spec/plan/...)
6
+ // - modus/knowledge_base/ — knowledge base scaffolding (map.md, service-graph.md)
7
+ // - modus/artifacts/.gitkeep — empty artifacts dir for Story-scoped outputs
8
+ //
9
+ // Each platform generator (codebuddy/claude/cursor/...) reads its own template
10
+ // and writes a platform-native copy *plus* a `modus:source` header pointing
11
+ // back to this neutral source. This allows users to update knowledge in one
12
+ // place (.modus/) and have it propagate to platform stubs via `modus update`.
13
+ import fs from 'node:fs';
14
+ import path from 'node:path';
15
+ import { writeFile, readTemplate, ensureDir, copyTemplateDir } from '../utils/file-system.js';
16
+ // ---------------------------------------------------------------------------
17
+ // Output paths (relative to project root)
18
+ // ---------------------------------------------------------------------------
19
+ const NEUTRAL_COMMANDS_BASE = path.join('.modus', 'commands');
20
+ const NEUTRAL_SKILLS_BASE = path.join('.modus', 'skills');
21
+ const KB_BASE = path.join('modus', 'knowledge_base');
22
+ const KB_DOMAIN_BASE = path.join('modus', 'knowledge_base', 'domain');
23
+ const TEMPLATE_BASE = path.join('modus', 'template');
24
+ const ARTIFACTS_BASE = path.join('modus', 'artifacts');
25
+ // ---------------------------------------------------------------------------
26
+ // Roster (mirrors codebuddy.ts / continue.ts)
27
+ // ---------------------------------------------------------------------------
28
+ const FRAMEWORK_SKILLS = [
29
+ 'modus-init',
30
+ 'modus-vibe',
31
+ 'modus-plan',
32
+ 'modus-spec',
33
+ 'modus-auto',
34
+ 'modus-harness',
35
+ 'modus-platform',
36
+ 'modus-cr',
37
+ 'modus-skill-creator',
38
+ 'modus-analyst',
39
+ 'modus-developer',
40
+ 'modus-tester',
41
+ 'modus-perf-auditor',
42
+ 'modus-security-auditor',
43
+ 'modus-reviewer',
44
+ 'modus-deployer',
45
+ ];
46
+ const SKILL_TEMPLATE_MAP = {
47
+ 'modus-init': 'modus-init/SKILL.md',
48
+ 'modus-vibe': 'modus-vibe/SKILL.md',
49
+ 'modus-plan': 'modus-plan/SKILL.md',
50
+ 'modus-spec': 'modus-spec/SKILL.md',
51
+ 'modus-auto': 'modus-auto/SKILL.md',
52
+ 'modus-harness': 'modus-harness/SKILL.md',
53
+ 'modus-platform': 'modus-platform/SKILL.md',
54
+ 'modus-cr': 'modus-cr/SKILL.md',
55
+ 'modus-skill-creator': 'modus-agents/skill-creator/SKILL.md',
56
+ 'modus-analyst': 'modus-agents/analyst/SKILL.md',
57
+ 'modus-developer': 'modus-agents/developer/SKILL.md',
58
+ 'modus-tester': 'modus-agents/tester/SKILL.md',
59
+ 'modus-perf-auditor': 'modus-agents/perf-auditor/SKILL.md',
60
+ 'modus-security-auditor': 'modus-agents/security-auditor/SKILL.md',
61
+ 'modus-reviewer': 'modus-agents/reviewer/SKILL.md',
62
+ 'modus-deployer': 'modus-agents/deployer/SKILL.md',
63
+ };
64
+ const ALL_COMMAND_IDS = ['init', 'vibe', 'plan', 'spec', 'auto', 'harness', 'platform', 'cr', 'commit', 'upgrade'];
65
+ // 6 product templates (pid / design / spec / plan / analysis / sprint-contract)
66
+ const ARTIFACT_TEMPLATES = [
67
+ 'pid.md',
68
+ 'design.md',
69
+ 'spec.md',
70
+ 'plan.md',
71
+ 'analysis.md',
72
+ 'sprint-contract.md',
73
+ ];
74
+ // ---------------------------------------------------------------------------
75
+ // Main entry
76
+ // ---------------------------------------------------------------------------
77
+ export function generateModusNeutralFiles(projectRoot, _config, _opts = {}) {
78
+ generateNeutralCommands(projectRoot);
79
+ generateNeutralSkills(projectRoot);
80
+ generateArtifactTemplates(projectRoot);
81
+ generateKnowledgeBaseScaffolding(projectRoot);
82
+ generateArtifactsRoot(projectRoot);
83
+ }
84
+ // ---------------------------------------------------------------------------
85
+ // .modus/commands/*.md — authoritative command source
86
+ // ---------------------------------------------------------------------------
87
+ function generateNeutralCommands(projectRoot) {
88
+ // Root /modus command
89
+ try {
90
+ const rootContent = readTemplate('commands/modus.md');
91
+ writeFile(path.join(projectRoot, '.modus', 'commands', 'modus.md'), rootContent);
92
+ }
93
+ catch {
94
+ console.warn(' [warn] Root command template not found: commands/modus.md');
95
+ }
96
+ for (const cmdId of ALL_COMMAND_IDS) {
97
+ let content;
98
+ try {
99
+ content = readTemplate(`commands/${cmdId}.md`);
100
+ }
101
+ catch {
102
+ // Optional commands (commit/upgrade) may not exist in older trees — skip silently
103
+ continue;
104
+ }
105
+ writeFile(path.join(projectRoot, NEUTRAL_COMMANDS_BASE, `${cmdId}.md`), content);
106
+ }
107
+ }
108
+ // ---------------------------------------------------------------------------
109
+ // .modus/skills/modus-*/SKILL.md — authoritative framework skill source
110
+ // ---------------------------------------------------------------------------
111
+ function generateNeutralSkills(projectRoot) {
112
+ for (const skillId of FRAMEWORK_SKILLS) {
113
+ const templateRel = SKILL_TEMPLATE_MAP[skillId];
114
+ // modus-init has Router + Strategy + Shared sub-files; copy the whole dir.
115
+ if (skillId === 'modus-init') {
116
+ const destDir = path.join(projectRoot, NEUTRAL_SKILLS_BASE, skillId);
117
+ copyTemplateDir('skills/modus-init', destDir);
118
+ continue;
119
+ }
120
+ const templatePath = `skills/${templateRel}`;
121
+ let content;
122
+ try {
123
+ content = readTemplate(templatePath);
124
+ }
125
+ catch {
126
+ console.warn(` [warn] Template not found: ${templatePath}`);
127
+ continue;
128
+ }
129
+ const destPath = path.join(projectRoot, NEUTRAL_SKILLS_BASE, skillId, 'SKILL.md');
130
+ writeFile(destPath, content);
131
+ }
132
+ }
133
+ // ---------------------------------------------------------------------------
134
+ // modus/template/*.md — 6 artifact templates
135
+ // ---------------------------------------------------------------------------
136
+ function generateArtifactTemplates(projectRoot) {
137
+ for (const tplName of ARTIFACT_TEMPLATES) {
138
+ const templatePath = `template/${tplName}`;
139
+ let content;
140
+ try {
141
+ content = readTemplate(templatePath);
142
+ }
143
+ catch {
144
+ console.warn(` [warn] Artifact template not found: ${templatePath}`);
145
+ continue;
146
+ }
147
+ writeFile(path.join(projectRoot, TEMPLATE_BASE, tplName), content);
148
+ }
149
+ }
150
+ // ---------------------------------------------------------------------------
151
+ // modus/knowledge_base/ — scaffolding (map.md, service-graph.md, domain/)
152
+ // ---------------------------------------------------------------------------
153
+ function generateKnowledgeBaseScaffolding(projectRoot) {
154
+ // Knowledge base entry: map.md (replaces v3 knowledge-catalog.md)
155
+ const mapPath = path.join(projectRoot, KB_BASE, 'map.md');
156
+ if (!fs.existsSync(mapPath)) {
157
+ let mapContent = '';
158
+ try {
159
+ mapContent = readTemplate('knowledge-base-map.md');
160
+ }
161
+ catch {
162
+ mapContent = '# Knowledge Base Map\n\n> 等待 /modus:init 扫描代码生成。\n';
163
+ }
164
+ writeFile(mapPath, mapContent);
165
+ }
166
+ // Service graph (L0)
167
+ const sgPath = path.join(projectRoot, KB_BASE, 'service-graph.md');
168
+ if (!fs.existsSync(sgPath)) {
169
+ let sgContent = '';
170
+ try {
171
+ sgContent = readTemplate('knowledge-base-service-graph.md');
172
+ }
173
+ catch {
174
+ sgContent = '# Service Graph\n\n> 等待 /modus:init 扫描代码生成。\n';
175
+ }
176
+ writeFile(sgPath, sgContent);
177
+ }
178
+ // Empty domain/ root with placeholder
179
+ ensureDir(path.join(projectRoot, KB_DOMAIN_BASE));
180
+ const domainGitkeep = path.join(projectRoot, KB_DOMAIN_BASE, '.gitkeep');
181
+ if (!fs.existsSync(domainGitkeep)) {
182
+ writeFile(domainGitkeep, '# Modus v4.0 业务域知识根目录\n# 由 /modus:init 扫描代码后生成各业务域子目录。\n');
183
+ }
184
+ }
185
+ // ---------------------------------------------------------------------------
186
+ // modus/artifacts/ — Story-scoped artifacts root
187
+ // ---------------------------------------------------------------------------
188
+ function generateArtifactsRoot(projectRoot) {
189
+ ensureDir(path.join(projectRoot, ARTIFACTS_BASE));
190
+ const gitkeep = path.join(projectRoot, ARTIFACTS_BASE, '.gitkeep');
191
+ if (!fs.existsSync(gitkeep)) {
192
+ writeFile(gitkeep, [
193
+ '# Modus v4.0 产物目录(按 Story ID 隔离)',
194
+ '# 每个 Story 子目录包含:',
195
+ '# pid/ — 需求澄清产物',
196
+ '# design/ — 评估设计产物',
197
+ '# code/ — 编码实施产物(plan/spec/harness)',
198
+ '# archive/ — 上线归档(人工触发)',
199
+ '',
200
+ ].join('\n'));
201
+ }
202
+ }
203
+ // ---------------------------------------------------------------------------
204
+ // Header injection helper — used by other generators to mark platform stubs
205
+ // ---------------------------------------------------------------------------
206
+ /**
207
+ * Inject a `<!-- modus:source ... -->` header at the top of a markdown body
208
+ * so users know the authoritative source lives in `.modus/`.
209
+ *
210
+ * If the body already starts with YAML frontmatter (`---\n...\n---`), the
211
+ * header is inserted *after* the frontmatter to preserve frontmatter parsing.
212
+ */
213
+ export function injectNeutralSourceHeader(body, neutralPath) {
214
+ const header = `<!-- modus:source: ${neutralPath} (Modus v4.0 authoritative source — edit there to propagate) -->`;
215
+ // If body starts with frontmatter, insert after closing `---`
216
+ if (body.startsWith('---\n')) {
217
+ const endIdx = body.indexOf('\n---\n', 4);
218
+ if (endIdx !== -1) {
219
+ const fmEnd = endIdx + 5; // length of "\n---\n"
220
+ return body.slice(0, fmEnd) + header + '\n' + body.slice(fmEnd);
221
+ }
222
+ }
223
+ return header + '\n' + body;
224
+ }
225
+ //# sourceMappingURL=modus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modus.js","sourceRoot":"","sources":["../../src/generators/modus.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,17 @@
1
1
  /** Supported AI platform targets for file generation. */
2
- export type PlatformId = 'codebuddy' | 'claude' | 'cursor' | 'copilot' | 'codex';
2
+ export type PlatformId = 'codebuddy' | 'claude' | 'cursor' | 'copilot' | 'codex' | 'continue';
3
+ /**
4
+ * Primary tech stack of the project, detected at `/modus:init` Step 0.5.
5
+ *
6
+ * Used to route to the correct strategy file inside
7
+ * `templates/skills/modus-init/strategies/{stack}-init.md`:
8
+ * - `java` → strategies/java-init.md (Spring Boot / MyBatis 5-pass scan)
9
+ * - `frontend-react` → strategies/frontend-init.md (React/Next/Vite branch)
10
+ * - `frontend-vue` → strategies/frontend-init.md (Vue/Nuxt branch)
11
+ * - `go` / `python` → reserved for future strategy files
12
+ * - `fallback` → strategies/fallback-init.md (generic glob scan, 6-section skill)
13
+ */
14
+ export type PrimaryStack = 'java' | 'frontend-react' | 'frontend-vue' | 'frontend-other' | 'backend-node' | 'go' | 'python' | 'rust' | 'fallback';
3
15
  export interface ModusAnalyticsConfig {
4
16
  /** Whether to send usage events. Defaults to true. */
5
17
  enabled?: boolean;
@@ -63,6 +75,13 @@ export interface ModusConfig {
63
75
  * Defaults to ['codebuddy'] when omitted.
64
76
  */
65
77
  platforms?: PlatformId[];
78
+ /**
79
+ * Primary tech stack detected at `/modus:init` Step 0.5.
80
+ * Determines which strategy file under `templates/skills/modus-init/strategies/`
81
+ * is loaded for the 5-pass scan and Skill generation.
82
+ * Set/refreshed by every `/modus:init` run.
83
+ */
84
+ primaryStack?: PrimaryStack;
66
85
  /**
67
86
  * Custom platform names registered via `/modus:platform -add`.
68
87
  * Each entry corresponds to a `modus/platforms/{name}/platform.yaml` descriptor.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAKA,yDAAyD;AACzD,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjF,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC;;;;OAIG;IACH,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC;IACzB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AASD,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAY3D;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAIzE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAKA,yDAAyD;AACzD,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAE9F;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,gBAAgB,GAChB,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,IAAI,GACJ,QAAQ,GACR,MAAM,GACN,UAAU,CAAC;AAEf,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC;;;;OAIG;IACH,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC;IACzB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AASD,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAY3D;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAIzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAqFnE,MAAM,cAAc,GAAgB;IAClC,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC;KACnE;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,CAAC;IAC7C,4EAA4E;IAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,QAAQ,GAAG,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;IACnD,CAAC;SAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,MAAmB;IACjE,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAkHnE,MAAM,cAAc,GAAgB;IAClC,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC;KACnE;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,CAAC;IAC7C,4EAA4E;IAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,QAAQ,GAAG,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;IACnD,CAAC;SAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,MAAmB;IACjE,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
@@ -8,4 +8,20 @@ export declare function listFiles(dirPath: string, ext?: string): string[];
8
8
  export declare function findBizSkillDirs(projectRoot: string): string[];
9
9
  /** Read a template file bundled with the package */
10
10
  export declare function readTemplate(templateRelPath: string): string;
11
+ /** Resolve an absolute path inside the bundled `templates/` directory. */
12
+ export declare function resolveTemplatePath(templateRelPath: string): string;
13
+ /**
14
+ * Recursively copy every file under a templates/ subdirectory (e.g. an entire
15
+ * `skills/modus-init/` tree containing nested `strategies/` and `shared/` dirs)
16
+ * to a destination directory in the user's project.
17
+ *
18
+ * - `templateRelDir` — directory relative to the bundled `templates/` root.
19
+ * - `destAbsDir` — absolute destination directory in the project.
20
+ *
21
+ * Existing files at the destination are overwritten (these are framework-managed
22
+ * files, regenerated on every `modus init` / `modus update`). Non-existent
23
+ * source dirs are silently ignored to keep generators robust against template
24
+ * refactors that move/rename folders.
25
+ */
26
+ export declare function copyTemplateDir(templateRelDir: string, destAbsDir: string): void;
11
27
  //# sourceMappingURL=file-system.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"AAIA,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGjE;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAKlD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAMjE;AAED,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAG9D;AAED,oDAAoD;AACpD,wBAAgB,YAAY,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAG5D"}
1
+ {"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"AAIA,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGjE;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAKlD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAMjE;AAED,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAG9D;AAED,oDAAoD;AACpD,wBAAgB,YAAY,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAIhF"}
@@ -39,4 +39,44 @@ export function readTemplate(templateRelPath) {
39
39
  const templateBase = fileURLToPath(new URL('../../templates/', import.meta.url));
40
40
  return readFile(path.join(templateBase, templateRelPath));
41
41
  }
42
+ /** Resolve an absolute path inside the bundled `templates/` directory. */
43
+ export function resolveTemplatePath(templateRelPath) {
44
+ const templateBase = fileURLToPath(new URL('../../templates/', import.meta.url));
45
+ return path.join(templateBase, templateRelPath);
46
+ }
47
+ /**
48
+ * Recursively copy every file under a templates/ subdirectory (e.g. an entire
49
+ * `skills/modus-init/` tree containing nested `strategies/` and `shared/` dirs)
50
+ * to a destination directory in the user's project.
51
+ *
52
+ * - `templateRelDir` — directory relative to the bundled `templates/` root.
53
+ * - `destAbsDir` — absolute destination directory in the project.
54
+ *
55
+ * Existing files at the destination are overwritten (these are framework-managed
56
+ * files, regenerated on every `modus init` / `modus update`). Non-existent
57
+ * source dirs are silently ignored to keep generators robust against template
58
+ * refactors that move/rename folders.
59
+ */
60
+ export function copyTemplateDir(templateRelDir, destAbsDir) {
61
+ const srcDir = resolveTemplatePath(templateRelDir);
62
+ if (!fs.existsSync(srcDir))
63
+ return;
64
+ copyDirRecursive(srcDir, destAbsDir);
65
+ }
66
+ /** Recursively copy a directory tree, creating destination dirs as needed. */
67
+ function copyDirRecursive(srcDir, destDir) {
68
+ ensureDir(destDir);
69
+ const entries = fs.readdirSync(srcDir, { withFileTypes: true });
70
+ for (const entry of entries) {
71
+ const srcPath = path.join(srcDir, entry.name);
72
+ const destPath = path.join(destDir, entry.name);
73
+ if (entry.isDirectory()) {
74
+ copyDirRecursive(srcPath, destPath);
75
+ }
76
+ else if (entry.isFile()) {
77
+ writeFile(destPath, readFile(srcPath));
78
+ }
79
+ // Symlinks / other special types are skipped on purpose.
80
+ }
81
+ }
42
82
  //# sourceMappingURL=file-system.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IACzD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACvC,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACpD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,GAAY;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC7D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACpB,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IACjE,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,YAAY,CAAC,eAAuB;IAClD,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modus-ai/modus",
3
- "version": "0.2.10",
3
+ "version": "0.3.0",
4
4
  "description": "Modus — Business-grounded AI coding accelerator for CodeBuddy IDE",
5
5
  "keywords": [
6
6
  "ai",