@modus-ai/modus 0.2.11 → 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.
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +8 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +37 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +215 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +9 -3
- package/dist/commands/status.js.map +1 -1
- package/dist/generators/claude.d.ts +4 -2
- package/dist/generators/claude.d.ts.map +1 -1
- package/dist/generators/claude.js +17 -8
- package/dist/generators/claude.js.map +1 -1
- package/dist/generators/codebuddy.d.ts.map +1 -1
- package/dist/generators/codebuddy.js +5 -1
- package/dist/generators/codebuddy.js.map +1 -1
- package/dist/generators/codex.d.ts.map +1 -1
- package/dist/generators/codex.js +4 -4
- package/dist/generators/codex.js.map +1 -1
- package/dist/generators/continue.d.ts +3 -2
- package/dist/generators/continue.d.ts.map +1 -1
- package/dist/generators/continue.js +11 -5
- package/dist/generators/continue.js.map +1 -1
- package/dist/generators/copilot.d.ts.map +1 -1
- package/dist/generators/copilot.js +3 -2
- package/dist/generators/copilot.js.map +1 -1
- package/dist/generators/cursor.d.ts +4 -3
- package/dist/generators/cursor.d.ts.map +1 -1
- package/dist/generators/cursor.js +15 -10
- package/dist/generators/cursor.js.map +1 -1
- package/dist/generators/custom.d.ts +2 -2
- package/dist/generators/custom.js +1 -1
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +7 -0
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/modus.d.ts +12 -0
- package/dist/generators/modus.d.ts.map +1 -0
- package/dist/generators/modus.js +225 -0
- package/dist/generators/modus.js.map +1 -0
- package/package.json +1 -1
- package/schemas/harness-schema.yaml +13 -13
- package/templates/agents/modus-analyst.md +2 -2
- package/templates/agents/modus-deployer.md +1 -1
- package/templates/agents/modus-designer.md +1 -1
- package/templates/agents/modus-developer.md +1 -1
- package/templates/agents/modus-perf-auditor.md +1 -1
- package/templates/agents/modus-reviewer.md +1 -1
- package/templates/agents/modus-security-auditor.md +1 -1
- package/templates/agents/modus-skill-creator.md +1 -1
- package/templates/agents/modus-tester.md +1 -1
- package/templates/commands/auto.md +3 -1
- package/templates/commands/commit.md +11 -5
- package/templates/commands/cr.md +14 -10
- package/templates/commands/harness.md +27 -18
- package/templates/commands/init.md +56 -23
- package/templates/commands/modus.md +33 -11
- package/templates/commands/plan.md +23 -19
- package/templates/commands/spec.md +30 -17
- package/templates/commands/upgrade.md +50 -38
- package/templates/commands/vibe.md +30 -20
- package/templates/domain-business-readme.md +69 -0
- package/templates/domain-code/SKILL.md +94 -0
- package/templates/domain-code/apis.md +48 -0
- package/templates/domain-code/data-models.md +57 -0
- package/templates/domain-code/entities.md +45 -0
- package/templates/domain-code/services.md +51 -0
- package/templates/domain-history-readme.md +60 -0
- package/templates/domain-scenarios-readme.md +58 -0
- package/templates/knowledge-base-map.md +78 -0
- package/templates/knowledge-base-service-graph.md +100 -0
- package/templates/knowledge-catalog.md +38 -43
- package/templates/paths-v4.md +156 -0
- package/templates/rules/modus-workflow/RULE.mdc +45 -38
- package/templates/skills/modus-agents/analyst/SKILL.md +1 -1
- package/templates/skills/modus-agents/developer/SKILL.md +1 -1
- package/templates/skills/modus-agents/reviewer/SKILL.md +1 -1
- package/templates/skills/modus-agents/skill-creator/SKILL.md +3 -3
- package/templates/skills/modus-auto/SKILL.md +19 -19
- package/templates/skills/modus-cr/SKILL.md +1 -1
- package/templates/skills/modus-design-brief/SKILL.md +3 -3
- package/templates/skills/modus-harness/SKILL.md +5 -5
- package/templates/skills/modus-init/SKILL.md +64 -64
- package/templates/skills/modus-init/shared/frontmatter-spec.md +2 -2
- package/templates/skills/modus-init/shared/stack-detection.md +1 -1
- package/templates/skills/modus-init/strategies/fallback-init.md +1 -1
- package/templates/skills/modus-plan/SKILL.md +6 -6
- package/templates/skills/modus-platform/SKILL.md +1 -1
- package/templates/skills/modus-spec/SKILL.md +1 -1
- package/templates/skills/modus-vibe/SKILL.md +10 -10
- package/templates/template/analysis.md +83 -0
- package/templates/template/design.md +160 -0
- package/templates/template/pid.md +97 -0
- package/templates/template/plan.md +91 -0
- package/templates/template/spec.md +78 -0
- package/templates/template/sprint-contract.md +101 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/generators/cursor.ts"],"names":[],"mappings":"AAQA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/generators/cursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ export interface BizSkillSync {
|
|
|
5
5
|
enabled: boolean;
|
|
6
6
|
/**
|
|
7
7
|
* Output path template. Supports placeholders:
|
|
8
|
-
|
|
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/
|
|
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
|
|
@@ -143,7 +143,7 @@ function buildDefaultConstitution(config, hardRules) {
|
|
|
143
143
|
/**
|
|
144
144
|
* Sync a biz skill to all custom platforms that have bizSkill.enabled=true.
|
|
145
145
|
* Called from the `/modus:init` SKILL.md flow after writing the canonical
|
|
146
|
-
* `modus/
|
|
146
|
+
* `modus/knowledge_base/domain/{domain}/code/SKILL.md` (v4.0 path).
|
|
147
147
|
*
|
|
148
148
|
* This resolves the "ongoing sync" pain point for custom platforms:
|
|
149
149
|
* every time biz skills are updated, this function ensures custom platform
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/generators/index.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
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';
|
|
@@ -13,6 +18,8 @@ import { generateCustomPlatformFiles } from './custom.js';
|
|
|
13
18
|
* Defaults to ['codebuddy'] when the field is absent to preserve backward compat.
|
|
14
19
|
*/
|
|
15
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);
|
|
16
23
|
const platforms = config.platforms ?? ['codebuddy'];
|
|
17
24
|
if (platforms.includes('codebuddy')) {
|
|
18
25
|
generateCodeBuddyFiles(projectRoot, config, opts);
|
|
@@ -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,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,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"}
|
|
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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"}
|
package/package.json
CHANGED
|
@@ -10,8 +10,8 @@ schema_version: "1.1" # HANDOFF 协议版本(见 docs/protocol.md)
|
|
|
10
10
|
|
|
11
11
|
# 产物根目录(v3.2)
|
|
12
12
|
directories:
|
|
13
|
-
harness: "modus/
|
|
14
|
-
knowledge: "modus/
|
|
13
|
+
harness: "modus/artifacts/{story_id}/code/"
|
|
14
|
+
knowledge: "modus/knowledge_base/"
|
|
15
15
|
sessions: "modus/sessions/"
|
|
16
16
|
|
|
17
17
|
# SubAgent 清单(SA00~SA08,共 9 个)
|
|
@@ -24,8 +24,8 @@ subAgents:
|
|
|
24
24
|
handoff_agent: "00-skills-builder"
|
|
25
25
|
name: 知识注入/提取(Skills Builder)
|
|
26
26
|
generates:
|
|
27
|
-
- "Skill 文件(modus/
|
|
28
|
-
- "modus/
|
|
27
|
+
- "Skill 文件(modus/knowledge_base/domain/*/code/SKILL.md)"
|
|
28
|
+
- "modus/knowledge_base/map.md"
|
|
29
29
|
requires: []
|
|
30
30
|
loop: 1
|
|
31
31
|
modes:
|
|
@@ -39,7 +39,7 @@ subAgents:
|
|
|
39
39
|
skill: modus-harness-01-analysis
|
|
40
40
|
handoff_agent: "01-analysis"
|
|
41
41
|
name: 需求分析
|
|
42
|
-
generates: ["modus/
|
|
42
|
+
generates: ["modus/artifacts/{story_id}/pid/prd.md"]
|
|
43
43
|
requires: ["00-INIT"]
|
|
44
44
|
loop: 1
|
|
45
45
|
gateAfter: A0 # Gate A0: 检查 01-analysis.md HANDOFF gate_status = "passed"
|
|
@@ -49,7 +49,7 @@ subAgents:
|
|
|
49
49
|
skill: modus-harness-01-5-design
|
|
50
50
|
handoff_agent: "02-design"
|
|
51
51
|
name: 设计方案生成
|
|
52
|
-
generates: ["modus/
|
|
52
|
+
generates: ["modus/artifacts/{story_id}/design/design.md"]
|
|
53
53
|
requires: ["01"]
|
|
54
54
|
loop: 1
|
|
55
55
|
human_checkpoint: true # 架构决策确认 ⏸️ 人工交互节点
|
|
@@ -60,7 +60,7 @@ subAgents:
|
|
|
60
60
|
skill: modus-harness-02-dev
|
|
61
61
|
handoff_agent: "03-dev"
|
|
62
62
|
name: 代码开发
|
|
63
|
-
generates: ["modus/
|
|
63
|
+
generates: ["modus/artifacts/{story_id}/code/sprint-contract.md"]
|
|
64
64
|
requires: ["02"]
|
|
65
65
|
loop: 1
|
|
66
66
|
gateAfter: A # Gate A: 执行 constitution.build_command,exit code = 0
|
|
@@ -70,7 +70,7 @@ subAgents:
|
|
|
70
70
|
skill: modus-harness-03-test
|
|
71
71
|
handoff_agent: "04-test"
|
|
72
72
|
name: 代码测试(单元测试)
|
|
73
|
-
generates: ["modus/
|
|
73
|
+
generates: ["modus/artifacts/{story_id}/code/test-report.md"]
|
|
74
74
|
requires: ["03"]
|
|
75
75
|
loop: 1
|
|
76
76
|
parallel: ["04", "05", "06"] # 与 SA05/SA06 并行执行
|
|
@@ -81,7 +81,7 @@ subAgents:
|
|
|
81
81
|
skill: modus-harness-04-perf
|
|
82
82
|
handoff_agent: "05-perf"
|
|
83
83
|
name: 性能审计
|
|
84
|
-
generates: ["modus/
|
|
84
|
+
generates: ["modus/artifacts/{story_id}/code/perf-report.md"]
|
|
85
85
|
requires: ["03"]
|
|
86
86
|
loop: 1
|
|
87
87
|
parallel: ["04", "05", "06"]
|
|
@@ -92,7 +92,7 @@ subAgents:
|
|
|
92
92
|
skill: modus-harness-05-security
|
|
93
93
|
handoff_agent: "06-security"
|
|
94
94
|
name: 安全审计
|
|
95
|
-
generates: ["modus/
|
|
95
|
+
generates: ["modus/artifacts/{story_id}/code/security-report.md"]
|
|
96
96
|
requires: ["03"]
|
|
97
97
|
loop: 1
|
|
98
98
|
parallel: ["04", "05", "06"]
|
|
@@ -103,7 +103,7 @@ subAgents:
|
|
|
103
103
|
skill: modus-harness-06-review
|
|
104
104
|
handoff_agent: "07-review"
|
|
105
105
|
name: 代码评审(CR)
|
|
106
|
-
generates: ["modus/
|
|
106
|
+
generates: ["modus/artifacts/{story_id}/code/cr-report.md"]
|
|
107
107
|
requires: ["04", "05", "06"] # Gate B 通过后触发
|
|
108
108
|
loop: 1 # CR 在 Loop 1 执行;Loop 2 是对 SA03 的精准重入,非 CR 重跑
|
|
109
109
|
gateAfter: C # Gate C: cr-report.md HANDOFF issues 为空或全为 P3
|
|
@@ -112,7 +112,7 @@ subAgents:
|
|
|
112
112
|
skill: modus-harness-07-deploy
|
|
113
113
|
handoff_agent: "08-deploy"
|
|
114
114
|
name: 部署发布
|
|
115
|
-
generates: ["modus/
|
|
115
|
+
generates: ["modus/artifacts/{story_id}/code/deploy-status.md"]
|
|
116
116
|
requires: ["07"] # Gate C 通过后触发
|
|
117
117
|
loop: 1
|
|
118
118
|
human_checkpoint: true # prd 环境等待人工确认
|
|
@@ -195,7 +195,7 @@ archive:
|
|
|
195
195
|
|
|
196
196
|
# 断点续跑状态文件
|
|
197
197
|
stateFile:
|
|
198
|
-
path: "modus/
|
|
198
|
+
path: "modus/artifacts/{story_id}/code/.harness-state.yaml"
|
|
199
199
|
fields:
|
|
200
200
|
story_id: "string"
|
|
201
201
|
loop: "integer(1 或 2)"
|
|
@@ -7,8 +7,8 @@ enabledAutoRun: true
|
|
|
7
7
|
enabled: true
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
读取并严格遵循 `.
|
|
10
|
+
读取并严格遵循 `.modus/skills/modus-analyst/SKILL.md` 中的执行规范。
|
|
11
11
|
|
|
12
|
-
产出物路径:`modus/
|
|
12
|
+
产出物路径:`modus/artifacts/{story_id}/pid/prd.md`(v4.0 路径;详见 `templates/paths-v4.md`)
|
|
13
13
|
|
|
14
14
|
产出物头部必须包含 HANDOFF 块,包含 `agent`、`story_id`、`domains`、`risk_level`、`key_constraints`、`skill_refs`、`gate_status` 字段。
|
|
@@ -7,7 +7,7 @@ enabledAutoRun: true
|
|
|
7
7
|
enabled: true
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
读取并严格遵循 `.
|
|
10
|
+
读取并严格遵循 `.modus/skills/modus-developer/SKILL.md` 中的执行规范。
|
|
11
11
|
|
|
12
12
|
输入依赖:`modus/plans/active/{story-id}/01-analysis.md` 的 HANDOFF 块 + 相关业务 Skill 内容(由 Orchestrator 传入)。
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ enabledAutoRun: true
|
|
|
7
7
|
enabled: true
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
读取并严格遵循 `.
|
|
10
|
+
读取并严格遵循 `.modus/skills/modus-security-auditor/SKILL.md` 中的执行规范。
|
|
11
11
|
|
|
12
12
|
输入依赖:`modus/plans/active/{story-id}/02-sprint-contract.md` 的 HANDOFF 块 + 代码变更文件。
|
|
13
13
|
|
|
@@ -7,6 +7,6 @@ enabledAutoRun: true
|
|
|
7
7
|
enabled: true
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
读取并严格遵循 `.
|
|
10
|
+
读取并严格遵循 `.modus/skills/modus-skill-creator/SKILL.md` 中的执行规范和五种工作模式(A: 新建 Skill / B: 增量更新 / C: 知识回写 / D: Harness 归档提取 / E: 基础 Skill 初始化)。
|
|
11
11
|
|
|
12
12
|
调用方必须在 prompt 中明确指定工作模式(A/B/C/D/E)和目标业务域列表。
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
**用途:** 读取 TAPD Story,从四个维度(复杂度/风险/需求明确度/接口契约)进行评分,自动推荐最适合的 Modus 命令(vibe/plan/spec/harness),确认后自动启动。**不确定用哪个命令时,首选此命令。**
|
|
4
4
|
|
|
5
|
+
> **路径范式版本:v4.0**(详见 `templates/paths-v4.md`)
|
|
6
|
+
|
|
5
7
|
## 执行流程
|
|
6
8
|
|
|
7
9
|
1. 接受 TAPD Story URL(或提示手动粘贴内容)
|
|
@@ -71,4 +73,4 @@
|
|
|
71
73
|
|
|
72
74
|
## 执行此命令
|
|
73
75
|
|
|
74
|
-
读取并执行 `.
|
|
76
|
+
读取并执行 `.modus/skills/modus-auto/SKILL.md` 中的完整流程(中性源;各平台目录为引用桩)。
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# /modus:commit
|
|
2
2
|
|
|
3
|
-
Knowledge-aware git commit. Drains pending knowledge from `modus/sessions/pending-knowledge.yaml` into the corresponding business
|
|
3
|
+
Knowledge-aware git commit. Drains pending knowledge from `modus/sessions/pending-knowledge.yaml` into the corresponding domain knowledge files (`modus/knowledge_base/domain/<d>/code/`) and into `business/` if rule-level, then executes the actual git commit.
|
|
4
|
+
|
|
5
|
+
> **路径范式版本:v4.0**(详见 `templates/paths-v4.md`)
|
|
4
6
|
|
|
5
7
|
## Instructions
|
|
6
8
|
|
|
@@ -32,15 +34,19 @@ During `/modus:vibe` sessions, newly discovered knowledge (new enum values, busi
|
|
|
32
34
|
是否将以上知识写入对应 Skill 文件?[Y/n]
|
|
33
35
|
```
|
|
34
36
|
|
|
35
|
-
3. **Write back to
|
|
37
|
+
3. **Write back to knowledge base (if confirmed):**
|
|
36
38
|
For each entry in `pending-knowledge.yaml`:
|
|
37
|
-
-
|
|
39
|
+
- Determine target file by knowledge type:
|
|
40
|
+
- `[model]` / `[enum]` / `[api]` → `modus/knowledge_base/domain/<d>/code/{entities|apis|services|data-models}.md`
|
|
41
|
+
- `[pitfall]` / `[guideline]` / `[business-rule]` → `modus/knowledge_base/domain/<d>/business/`
|
|
42
|
+
- Call `modus-skill-creator` Mode C to append the entry
|
|
38
43
|
- Mark the entry as `settled: true` in `pending-knowledge.yaml`
|
|
39
|
-
- Output per-entry status: `✓ [pitfall] →
|
|
44
|
+
- Output per-entry status: `✓ [pitfall] → domain/order/business/ 已写入`
|
|
40
45
|
|
|
41
46
|
After all entries processed:
|
|
42
47
|
- Remove settled entries from `pending-knowledge.yaml` (keep only `settled: false` entries)
|
|
43
|
-
- Update `modus/
|
|
48
|
+
- Update `modus/knowledge_base/map.md` if any domain knowledge version changed
|
|
49
|
+
- Append a record to `modus/knowledge_base/domain/<d>/history/{YYYY-MM-DD}-{topic}.md`
|
|
44
50
|
|
|
45
51
|
4. **Execute git commit:**
|
|
46
52
|
Run the standard git commit flow:
|