@modus-ai/modus 0.2.4 → 0.2.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 (75) hide show
  1. package/README.md +100 -42
  2. package/dist/cli/index.js +2 -2
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/commands/config.d.ts.map +1 -1
  5. package/dist/commands/config.js +9 -8
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/commands/global.js +1 -1
  8. package/dist/commands/global.js.map +1 -1
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js +37 -7
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/status.js +2 -2
  13. package/dist/generators/claude.d.ts.map +1 -1
  14. package/dist/generators/claude.js +1 -37
  15. package/dist/generators/claude.js.map +1 -1
  16. package/dist/generators/codebuddy.d.ts.map +1 -1
  17. package/dist/generators/codebuddy.js +3 -1
  18. package/dist/generators/codebuddy.js.map +1 -1
  19. package/dist/generators/codex.d.ts +10 -0
  20. package/dist/generators/codex.d.ts.map +1 -0
  21. package/dist/generators/codex.js +178 -0
  22. package/dist/generators/codex.js.map +1 -0
  23. package/dist/generators/copilot.d.ts.map +1 -1
  24. package/dist/generators/copilot.js +0 -1
  25. package/dist/generators/copilot.js.map +1 -1
  26. package/dist/generators/cursor.d.ts.map +1 -1
  27. package/dist/generators/cursor.js +36 -7
  28. package/dist/generators/cursor.js.map +1 -1
  29. package/dist/generators/custom.d.ts +55 -0
  30. package/dist/generators/custom.d.ts.map +1 -0
  31. package/dist/generators/custom.js +166 -0
  32. package/dist/generators/custom.js.map +1 -0
  33. package/dist/generators/index.d.ts +1 -0
  34. package/dist/generators/index.d.ts.map +1 -1
  35. package/dist/generators/index.js +10 -0
  36. package/dist/generators/index.js.map +1 -1
  37. package/dist/utils/config.d.ts +38 -1
  38. package/dist/utils/config.d.ts.map +1 -1
  39. package/dist/utils/config.js +10 -2
  40. package/dist/utils/config.js.map +1 -1
  41. package/dist/utils/file-system.d.ts.map +1 -1
  42. package/dist/utils/file-system.js +2 -1
  43. package/dist/utils/file-system.js.map +1 -1
  44. package/package.json +1 -1
  45. package/schemas/harness-schema.yaml +178 -53
  46. package/schemas/knowledge-schema.yaml +111 -1
  47. package/templates/agents/modus-analyst.md +1 -1
  48. package/templates/behavior-guard.md +165 -0
  49. package/templates/commands/auto.md +61 -25
  50. package/templates/commands/commit.md +63 -0
  51. package/templates/commands/harness.md +97 -30
  52. package/templates/commands/init.md +43 -10
  53. package/templates/commands/modus.md +55 -28
  54. package/templates/commands/plan.md +60 -18
  55. package/templates/commands/spec.md +69 -25
  56. package/templates/commands/upgrade.md +54 -0
  57. package/templates/commands/vibe.md +56 -6
  58. package/templates/knowledge-catalog.md +74 -32
  59. package/templates/skills/modus-agents/analyst/SKILL.md +18 -3
  60. package/templates/skills/modus-agents/deployer/SKILL.md +114 -62
  61. package/templates/skills/modus-agents/designer/SKILL.md +104 -92
  62. package/templates/skills/modus-agents/developer/SKILL.md +107 -66
  63. package/templates/skills/modus-agents/perf-auditor/SKILL.md +98 -61
  64. package/templates/skills/modus-agents/reviewer/SKILL.md +61 -11
  65. package/templates/skills/modus-agents/security-auditor/SKILL.md +111 -67
  66. package/templates/skills/modus-agents/skill-creator/SKILL.md +30 -12
  67. package/templates/skills/modus-agents/tester/SKILL.md +100 -54
  68. package/templates/skills/modus-auto/SKILL.md +581 -109
  69. package/templates/skills/modus-design-brief/SKILL.md +45 -19
  70. package/templates/skills/modus-harness/SKILL.md +150 -85
  71. package/templates/skills/modus-init/SKILL.md +1145 -319
  72. package/templates/skills/modus-plan/SKILL.md +125 -48
  73. package/templates/skills/modus-platform/SKILL.md +271 -0
  74. package/templates/skills/modus-spec/SKILL.md +175 -331
  75. package/templates/skills/modus-vibe/SKILL.md +256 -55
@@ -7,12 +7,41 @@ const MCP_PATH = path.join('.cursor', 'mcp.json');
7
7
  // Framework command skills → .cursor/skills/modus-{cmd}/SKILL.md
8
8
  // ---------------------------------------------------------------------------
9
9
  const COMMAND_SKILLS = [
10
- { id: 'modus-init', templatePath: 'skills/modus-init/SKILL.md' },
11
- { id: 'modus-vibe', templatePath: 'skills/modus-vibe/SKILL.md' },
12
- { id: 'modus-plan', templatePath: 'skills/modus-plan/SKILL.md' },
13
- { id: 'modus-spec', templatePath: 'skills/modus-spec/SKILL.md' },
14
- { id: 'modus-auto', templatePath: 'skills/modus-auto/SKILL.md' },
15
- { id: 'modus-harness', templatePath: 'skills/modus-harness/SKILL.md' },
10
+ {
11
+ id: 'modus-init',
12
+ templatePath: 'skills/modus-init/SKILL.md',
13
+ description: 'Run /modus:init to scan the codebase and build Business Skills for each domain',
14
+ },
15
+ {
16
+ id: 'modus-vibe',
17
+ templatePath: 'skills/modus-vibe/SKILL.md',
18
+ description: 'Run /modus:vibe to start context-aware vibe coding with business Skill preloading',
19
+ },
20
+ {
21
+ id: 'modus-plan',
22
+ templatePath: 'skills/modus-plan/SKILL.md',
23
+ description: 'Run /modus:plan to create structured feature proposals with complexity grading',
24
+ },
25
+ {
26
+ id: 'modus-spec',
27
+ templatePath: 'skills/modus-spec/SKILL.md',
28
+ description: 'Run /modus:spec for OpenSpec-driven development with delta specs and GIVEN/WHEN/THEN scenarios',
29
+ },
30
+ {
31
+ id: 'modus-auto',
32
+ templatePath: 'skills/modus-auto/SKILL.md',
33
+ description: 'Run /modus:auto with a TAPD story URL to get AI-recommended mode (vibe/plan/spec/harness)',
34
+ },
35
+ {
36
+ id: 'modus-harness',
37
+ templatePath: 'skills/modus-harness/SKILL.md',
38
+ description: 'Run /modus:harness to execute the full dual-loop multi-agent development pipeline',
39
+ },
40
+ {
41
+ id: 'modus-platform',
42
+ templatePath: 'skills/modus-platform/SKILL.md',
43
+ description: 'Run /modus:platform -add to add a new AI platform adapter via online research',
44
+ },
16
45
  ];
17
46
  // ---------------------------------------------------------------------------
18
47
  // Harness SubAgent skills → .cursor/skills/modus-harness-{id}/SKILL.md
@@ -47,7 +76,7 @@ function generateCursorCommandSkills(projectRoot, config) {
47
76
  const enabled = new Set(config.commands.enabled);
48
77
  for (const skill of COMMAND_SKILLS) {
49
78
  const cmdId = skill.id.replace('modus-', '');
50
- if (['init', 'vibe', 'plan', 'spec', 'auto', 'harness'].includes(cmdId) && !enabled.has(cmdId)) {
79
+ if (['init', 'vibe', 'plan', 'spec', 'auto', 'harness', 'platform'].includes(cmdId) && !enabled.has(cmdId)) {
51
80
  continue;
52
81
  }
53
82
  let body;
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/generators/cursor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/generators/cursor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { ModusConfig } from '../utils/config.js';
2
+ import type { GenerateOptions } from './codebuddy.js';
3
+ export interface BizSkillSync {
4
+ /** Whether this platform needs biz skill copies */
5
+ enabled: boolean;
6
+ /**
7
+ * Output path template. Supports placeholders:
8
+ * {domain} → business domain name (e.g. "biz-track")
9
+ * {ext} → file extension (without dot, derived from fileExtension)
10
+ */
11
+ outputPath: string;
12
+ /** Markdown wrapper template. {content} is replaced with the skill body. */
13
+ wrapper?: string;
14
+ }
15
+ export interface PlatformCapabilities {
16
+ /** How skills/context are loaded: 'progressive' | 'flat' | 'none' */
17
+ skillsLoading: 'progressive' | 'flat' | 'none';
18
+ /** Whether the platform supports parallel Sub-Agents */
19
+ subAgents: boolean;
20
+ /** How commands are triggered: 'slash' | 'natural' | 'file' */
21
+ commandsTrigger: 'slash' | 'natural' | 'file';
22
+ /** Whether the platform has a native multi-file rules mechanism */
23
+ nativeRules: boolean;
24
+ }
25
+ export interface PlatformDescriptor {
26
+ name: string;
27
+ label: string;
28
+ /** Directory where framework adapter files are written */
29
+ outputDir: string;
30
+ /** File extension without dot (e.g. "md", "mdc") */
31
+ fileExtension: string;
32
+ capabilities: PlatformCapabilities;
33
+ bizSkill?: BizSkillSync;
34
+ /** Optional Markdown template for the constitution block. {hardRules} placeholder. */
35
+ constitutionTemplate?: string;
36
+ /** Optional Markdown template for the commands block. {commands} placeholder. */
37
+ commandsTemplate?: string;
38
+ }
39
+ /**
40
+ * Scan `modus/platforms/` and load all valid platform.yaml descriptors.
41
+ */
42
+ export declare function loadCustomPlatforms(projectRoot: string): PlatformDescriptor[];
43
+ export declare function generateCustomPlatformFiles(projectRoot: string, config: ModusConfig, _opts?: GenerateOptions): void;
44
+ /**
45
+ * Sync a biz skill to all custom platforms that have bizSkill.enabled=true.
46
+ * Called from the `/modus:init` SKILL.md flow after writing the canonical
47
+ * `modus/knowledge/biz-{domain}/SKILL.md`.
48
+ *
49
+ * This resolves the "ongoing sync" pain point for custom platforms:
50
+ * every time biz skills are updated, this function ensures custom platform
51
+ * directories are also kept in sync automatically.
52
+ */
53
+ export declare function syncBizSkillToAllCustomPlatforms(projectRoot: string, domain: string, skillContent: string): void;
54
+ export declare function syncBizSkillToCustomPlatform(projectRoot: string, platform: PlatformDescriptor, domain: string, skillContent: string): void;
55
+ //# sourceMappingURL=custom.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,166 @@
1
+ // Custom platform generator.
2
+ // Reads `modus/platforms/{name}/platform.yaml` descriptors registered via
3
+ // `/modus:platform -add` and generates platform-specific adapter files.
4
+ // This enables zero-code extension of Modus to any AI coding tool.
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
7
+ import yaml from 'js-yaml';
8
+ import { writeFile, fileExists, readFile, ensureDir, readTemplate } from '../utils/file-system.js';
9
+ // ---------------------------------------------------------------------------
10
+ // Discovery
11
+ // ---------------------------------------------------------------------------
12
+ /**
13
+ * Scan `modus/platforms/` and load all valid platform.yaml descriptors.
14
+ */
15
+ export function loadCustomPlatforms(projectRoot) {
16
+ const platformsDir = path.join(projectRoot, 'modus', 'platforms');
17
+ if (!fs.existsSync(platformsDir))
18
+ return [];
19
+ const descriptors = [];
20
+ let entries = [];
21
+ try {
22
+ entries = fs.readdirSync(platformsDir);
23
+ }
24
+ catch {
25
+ return [];
26
+ }
27
+ for (const entry of entries) {
28
+ const yamlPath = path.join(platformsDir, entry, 'platform.yaml');
29
+ if (!fileExists(yamlPath))
30
+ continue;
31
+ try {
32
+ const raw = readFile(yamlPath);
33
+ const parsed = yaml.load(raw);
34
+ if (parsed?.name && parsed?.outputDir) {
35
+ descriptors.push(parsed);
36
+ }
37
+ }
38
+ catch {
39
+ // Skip malformed descriptors
40
+ }
41
+ }
42
+ return descriptors;
43
+ }
44
+ // ---------------------------------------------------------------------------
45
+ // Main entry
46
+ // ---------------------------------------------------------------------------
47
+ export function generateCustomPlatformFiles(projectRoot, config, _opts = {}) {
48
+ const platforms = loadCustomPlatforms(projectRoot);
49
+ for (const platform of platforms) {
50
+ generateFrameworkFiles(projectRoot, config, platform);
51
+ }
52
+ }
53
+ // ---------------------------------------------------------------------------
54
+ // Framework file generation
55
+ // ---------------------------------------------------------------------------
56
+ function generateFrameworkFiles(projectRoot, config, platform) {
57
+ const outputDir = path.join(projectRoot, platform.outputDir);
58
+ ensureDir(outputDir);
59
+ const ext = platform.fileExtension ?? 'md';
60
+ const enabled = new Set(config.commands.enabled);
61
+ const any = config;
62
+ const constitution = any['constitution'] ?? {};
63
+ const hardRules = Array.isArray(constitution['hard_rules'])
64
+ ? constitution['hard_rules'].map((r) => `- ${r}`).join('\n')
65
+ : '';
66
+ // ── Constitution file ─────────────────────────────────────────────────────
67
+ if (hardRules) {
68
+ const constitutionBody = platform.constitutionTemplate
69
+ ? platform.constitutionTemplate.replace('{hardRules}', hardRules)
70
+ : buildDefaultConstitution(config, hardRules);
71
+ writeFile(path.join(outputDir, `modus-constitution.${ext}`), constitutionBody);
72
+ }
73
+ // ── Commands index file ───────────────────────────────────────────────────
74
+ const commandLines = [];
75
+ if (enabled.has('init'))
76
+ commandLines.push('- `/modus:init` — 初始化/更新知识库');
77
+ if (enabled.has('vibe'))
78
+ commandLines.push('- `/modus:vibe` — 上下文感知日常编码');
79
+ if (enabled.has('plan'))
80
+ commandLines.push('- `/modus:plan` — 功能规划');
81
+ if (enabled.has('spec'))
82
+ commandLines.push('- `/modus:spec` — 规范驱动开发');
83
+ if (enabled.has('auto'))
84
+ commandLines.push('- `/modus:auto` — 智能模式推荐');
85
+ if (enabled.has('harness'))
86
+ commandLines.push('- `/modus:harness` — 全自动双 Loop 交付流水线');
87
+ if (enabled.has('platform'))
88
+ commandLines.push('- `/modus:platform` — 平台适配管理');
89
+ const commandsBody = platform.commandsTemplate
90
+ ? platform.commandsTemplate.replace('{commands}', commandLines.join('\n'))
91
+ : `# Modus Commands\n\n${commandLines.join('\n')}\n`;
92
+ writeFile(path.join(outputDir, `modus-commands.${ext}`), commandsBody);
93
+ // ── Framework skill files (one per enabled command) ───────────────────────
94
+ const skillTemplateMap = {
95
+ init: 'skills/modus-init/SKILL.md',
96
+ vibe: 'skills/modus-vibe/SKILL.md',
97
+ plan: 'skills/modus-plan/SKILL.md',
98
+ spec: 'skills/modus-spec/SKILL.md',
99
+ auto: 'skills/modus-auto/SKILL.md',
100
+ harness: 'skills/modus-harness/SKILL.md',
101
+ };
102
+ if (platform.capabilities.skillsLoading !== 'none') {
103
+ for (const [cmdId, templatePath] of Object.entries(skillTemplateMap)) {
104
+ if (!enabled.has(cmdId))
105
+ continue;
106
+ let body = '';
107
+ try {
108
+ body = readTemplate(templatePath);
109
+ }
110
+ catch {
111
+ continue;
112
+ }
113
+ writeFile(path.join(outputDir, `modus-${cmdId}.${ext}`), body);
114
+ }
115
+ }
116
+ }
117
+ function buildDefaultConstitution(config, hardRules) {
118
+ const any = config;
119
+ const constitution = any['constitution'] ?? {};
120
+ const techStack = String(constitution['tech_stack'] ?? config.techStack ?? '');
121
+ const context = config.context ?? '';
122
+ const lines = ['# Modus Project Constitution', ''];
123
+ if (context)
124
+ lines.push(`> ${context}`, '');
125
+ if (techStack)
126
+ lines.push(`**Tech Stack:** ${techStack}`, '');
127
+ if (hardRules) {
128
+ lines.push('**Hard Rules (must never violate):**', hardRules, '');
129
+ }
130
+ lines.push('**Modus Commands:** `/modus:init` · `/modus:vibe` · `/modus:plan` · `/modus:spec` · `/modus:auto` · `/modus:harness`');
131
+ return lines.join('\n') + '\n';
132
+ }
133
+ // ---------------------------------------------------------------------------
134
+ // Business Skill sync for custom platforms
135
+ // ---------------------------------------------------------------------------
136
+ /**
137
+ * Sync a biz skill to all custom platforms that have bizSkill.enabled=true.
138
+ * Called from the `/modus:init` SKILL.md flow after writing the canonical
139
+ * `modus/knowledge/biz-{domain}/SKILL.md`.
140
+ *
141
+ * This resolves the "ongoing sync" pain point for custom platforms:
142
+ * every time biz skills are updated, this function ensures custom platform
143
+ * directories are also kept in sync automatically.
144
+ */
145
+ export function syncBizSkillToAllCustomPlatforms(projectRoot, domain, skillContent) {
146
+ const platforms = loadCustomPlatforms(projectRoot);
147
+ for (const platform of platforms) {
148
+ syncBizSkillToCustomPlatform(projectRoot, platform, domain, skillContent);
149
+ }
150
+ }
151
+ export function syncBizSkillToCustomPlatform(projectRoot, platform, domain, skillContent) {
152
+ if (!platform.bizSkill?.enabled)
153
+ return;
154
+ const outputPath = platform.bizSkill.outputPath
155
+ .replace('{domain}', domain)
156
+ .replace('{ext}', platform.fileExtension ?? 'md');
157
+ const body = platform.bizSkill.wrapper
158
+ ? platform.bizSkill.wrapper
159
+ .replace('{domain}', domain)
160
+ .replace('{content}', skillContent)
161
+ : skillContent;
162
+ const fullPath = path.join(projectRoot, outputPath);
163
+ ensureDir(path.dirname(fullPath));
164
+ writeFile(fullPath, body);
165
+ }
166
+ //# sourceMappingURL=custom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../src/generators/custom.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import type { ModusConfig } from '../utils/config.js';
3
3
  export type { GenerateOptions };
4
4
  /**
5
5
  * Generate configuration files for every platform listed in `config.platforms`.
6
+ * Also generates files for custom platforms registered in `config.customPlatforms`.
6
7
  * Defaults to ['codebuddy'] when the field is absent to preserve backward compat.
7
8
  */
8
9
  export declare function generateAllPlatformFiles(projectRoot: string, config: ModusConfig, opts?: GenerateOptions): void;
@@ -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;AAI9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE,eAAoB,GACzB,IAAI,CAeN"}
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"}
@@ -4,8 +4,11 @@ import { generateCodeBuddyFiles } from './codebuddy.js';
4
4
  import { generateClaudeFiles } from './claude.js';
5
5
  import { generateCursorFiles } from './cursor.js';
6
6
  import { generateCopilotFiles } from './copilot.js';
7
+ import { generateCodexFiles } from './codex.js';
8
+ import { generateCustomPlatformFiles } from './custom.js';
7
9
  /**
8
10
  * Generate configuration files for every platform listed in `config.platforms`.
11
+ * Also generates files for custom platforms registered in `config.customPlatforms`.
9
12
  * Defaults to ['codebuddy'] when the field is absent to preserve backward compat.
10
13
  */
11
14
  export function generateAllPlatformFiles(projectRoot, config, opts = {}) {
@@ -22,5 +25,12 @@ export function generateAllPlatformFiles(projectRoot, config, opts = {}) {
22
25
  if (platforms.includes('copilot')) {
23
26
  generateCopilotFiles(projectRoot, config, opts);
24
27
  }
28
+ if (platforms.includes('codex')) {
29
+ generateCodexFiles(projectRoot, config, opts);
30
+ }
31
+ // Custom platforms registered via /modus:platform -add
32
+ if (config.customPlatforms && config.customPlatforms.length > 0) {
33
+ generateCustomPlatformFiles(projectRoot, config, opts);
34
+ }
25
35
  }
26
36
  //# sourceMappingURL=index.js.map
@@ -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;AAKpD;;;GAGG;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;AACH,CAAC"}
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,5 +1,5 @@
1
1
  /** Supported AI platform targets for file generation. */
2
- export type PlatformId = 'codebuddy' | 'claude' | 'cursor' | 'copilot';
2
+ export type PlatformId = 'codebuddy' | 'claude' | 'cursor' | 'copilot' | 'codex';
3
3
  export interface ModusAnalyticsConfig {
4
4
  /** Whether to send usage events. Defaults to true. */
5
5
  enabled?: boolean;
@@ -8,6 +8,22 @@ export interface ModusAnalyticsConfig {
8
8
  /** Bearer token for the collector API (optional). */
9
9
  token?: string;
10
10
  }
11
+ export interface ModusConstitution {
12
+ /** Technology stack description (e.g. "Spring Boot 3.x, Java 17, MySQL 8"). */
13
+ tech_stack?: string;
14
+ /** Hard rules that must never be violated (list of strings). */
15
+ hard_rules?: string[];
16
+ /** Key architectural patterns used in this project. */
17
+ key_patterns?: string[];
18
+ /** Build command for compile-time verification (e.g. "mvn compile -q"). */
19
+ build_command?: string;
20
+ }
21
+ export interface ModusHarnessConfig {
22
+ /** TAPD project ID for auto bug creation. */
23
+ tapdProjectId?: string;
24
+ /** Maximum Loop 2 retry count before human escalation. Defaults to 3. */
25
+ maxLoop2Retries?: number;
26
+ }
11
27
  export interface ModusConfig {
12
28
  version: string;
13
29
  commands: {
@@ -16,6 +32,22 @@ export interface ModusConfig {
16
32
  context?: string;
17
33
  techStack?: string;
18
34
  tapdProjectId?: string;
35
+ /**
36
+ * Project constitution — hard rules, tech stack, and key patterns.
37
+ * Read by every Modus command as immutable constraints.
38
+ */
39
+ constitution?: ModusConstitution;
40
+ /**
41
+ * Scan rules — list of glob patterns to include/exclude during /modus:init domain scan.
42
+ */
43
+ scanRules?: {
44
+ include?: string[];
45
+ exclude?: string[];
46
+ };
47
+ /**
48
+ * Harness-specific configuration.
49
+ */
50
+ harness?: ModusHarnessConfig;
19
51
  /**
20
52
  * Team name — references ~/.codebuddy/team/{teamName}/ for Skills/Rules reuse.
21
53
  * Leave empty to skip team-level scoping.
@@ -31,6 +63,11 @@ export interface ModusConfig {
31
63
  * Defaults to ['codebuddy'] when omitted.
32
64
  */
33
65
  platforms?: PlatformId[];
66
+ /**
67
+ * Custom platform names registered via `/modus:platform -add`.
68
+ * Each entry corresponds to a `modus/platforms/{name}/platform.yaml` descriptor.
69
+ */
70
+ customPlatforms?: string[];
34
71
  /**
35
72
  * The modus CLI version that last wrote the platform files.
36
73
  * Written by `modus init` and `modus update`.
@@ -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,CAAC;AAEvE,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,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,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,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,CAK3D;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,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"}
@@ -5,7 +5,7 @@ import { fileExists, readFile, writeFile } from './file-system.js';
5
5
  const DEFAULT_CONFIG = {
6
6
  version: '1',
7
7
  commands: {
8
- enabled: ['init', 'vibe', 'plan', 'spec', 'harness'],
8
+ enabled: ['init', 'vibe', 'plan', 'spec', 'auto', 'harness'],
9
9
  },
10
10
  };
11
11
  export function getConfigPath(projectRoot) {
@@ -30,7 +30,15 @@ export function loadConfig(projectRoot) {
30
30
  if (!fileExists(configPath))
31
31
  return { ...DEFAULT_CONFIG };
32
32
  const raw = readFile(configPath);
33
- return yaml.load(raw);
33
+ const parsed = yaml.load(raw);
34
+ // Defensive: ensure required nested fields exist to prevent runtime crashes
35
+ if (!parsed.commands) {
36
+ parsed.commands = { ...DEFAULT_CONFIG.commands };
37
+ }
38
+ else if (!Array.isArray(parsed.commands.enabled)) {
39
+ parsed.commands.enabled = [...DEFAULT_CONFIG.commands.enabled];
40
+ }
41
+ return parsed;
34
42
  }
35
43
  export function saveConfig(projectRoot, config) {
36
44
  const configPath = getConfigPath(projectRoot);
@@ -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;AA8CnE,MAAM,cAAc,GAAgB;IAClC,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;KACrD;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,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,CAAC;AACvC,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;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,CAAC;KAC7D;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 +1 @@
1
- {"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"AAGA,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"}
@@ -1,5 +1,6 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
3
4
  export function ensureDir(dirPath) {
4
5
  fs.mkdirSync(dirPath, { recursive: true });
5
6
  }
@@ -35,7 +36,7 @@ export function findBizSkillDirs(projectRoot) {
35
36
  }
36
37
  /** Read a template file bundled with the package */
37
38
  export function readTemplate(templateRelPath) {
38
- const templateBase = new URL('../../templates/', import.meta.url).pathname;
39
+ const templateBase = fileURLToPath(new URL('../../templates/', import.meta.url));
39
40
  return readFile(path.join(templateBase, templateRelPath));
40
41
  }
41
42
  //# 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;AAE7B,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,IAAI,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC3E,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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modus-ai/modus",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "description": "Modus — Business-grounded AI coding accelerator for CodeBuddy IDE",
5
5
  "keywords": [
6
6
  "ai",