moicle 2.2.0 → 2.2.2

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 (43) hide show
  1. package/README.md +3 -2
  2. package/assets/architecture/hexagonal-architecture.md +128 -0
  3. package/assets/commands/bootstrap.md +4 -2
  4. package/dist/commands/install/generic-editor.d.ts +3 -0
  5. package/dist/commands/install/generic-editor.d.ts.map +1 -0
  6. package/dist/commands/install/generic-editor.js +41 -0
  7. package/dist/commands/install/generic-editor.js.map +1 -0
  8. package/dist/commands/install/index.d.ts +3 -0
  9. package/dist/commands/install/index.d.ts.map +1 -0
  10. package/dist/commands/install/index.js +71 -0
  11. package/dist/commands/install/index.js.map +1 -0
  12. package/dist/commands/install/native.d.ts +3 -0
  13. package/dist/commands/install/native.d.ts.map +1 -0
  14. package/dist/commands/install/native.js +75 -0
  15. package/dist/commands/install/native.js.map +1 -0
  16. package/dist/commands/install/print.d.ts +6 -0
  17. package/dist/commands/install/print.d.ts.map +1 -0
  18. package/dist/commands/install/print.js +31 -0
  19. package/dist/commands/install/print.js.map +1 -0
  20. package/dist/commands/install/prompts.d.ts +4 -0
  21. package/dist/commands/install/prompts.d.ts.map +1 -0
  22. package/dist/commands/install/prompts.js +40 -0
  23. package/dist/commands/install/prompts.js.map +1 -0
  24. package/dist/commands/install/skill-editor.d.ts +4 -0
  25. package/dist/commands/install/skill-editor.d.ts.map +1 -0
  26. package/dist/commands/install/skill-editor.js +130 -0
  27. package/dist/commands/install/skill-editor.js.map +1 -0
  28. package/dist/commands/install/transform.d.ts +15 -0
  29. package/dist/commands/install/transform.d.ts.map +1 -0
  30. package/dist/commands/install/transform.js +47 -0
  31. package/dist/commands/install/transform.js.map +1 -0
  32. package/dist/commands/install/usage.d.ts +3 -0
  33. package/dist/commands/install/usage.d.ts.map +1 -0
  34. package/dist/commands/install/usage.js +72 -0
  35. package/dist/commands/install/usage.js.map +1 -0
  36. package/dist/commands/install.d.ts +1 -2
  37. package/dist/commands/install.d.ts.map +1 -1
  38. package/dist/commands/install.js +1 -657
  39. package/dist/commands/install.js.map +1 -1
  40. package/dist/commands/postinstall.d.ts.map +1 -1
  41. package/dist/commands/postinstall.js +4 -1
  42. package/dist/commands/postinstall.js.map +1 -1
  43. package/package.json +1 -1
@@ -0,0 +1,130 @@
1
+ import chalk from 'chalk';
2
+ import path from 'path';
3
+ import fs from 'fs';
4
+ import { ASSETS_DIR, ensureDir, getEditorConfig, getEditorDir, getFiles, getDirs } from '../../utils/symlink.js';
5
+ import { printSummary } from './print.js';
6
+ import { rewriteClaudePaths, extractFrontmatter, buildGeneratedSkill, } from './transform.js';
7
+ /**
8
+ * Skill-based editors (Codex, Antigravity). Both consume a flat `skills/` folder
9
+ * of rewritten SKILL.md files plus an `architecture/` folder. The two editors are
10
+ * identical apart from the rewrite target, so everything here is parameterized by
11
+ * `target` — there is no per-editor branching.
12
+ */
13
+ /** Write content only if it differs; report created/updated/exists. */
14
+ const writeIfChanged = (targetFile, content, name) => {
15
+ if (fs.existsSync(targetFile)) {
16
+ if (fs.readFileSync(targetFile, 'utf-8') === content) {
17
+ return { status: 'exists', name };
18
+ }
19
+ fs.writeFileSync(targetFile, content);
20
+ return { status: 'updated', name };
21
+ }
22
+ fs.writeFileSync(targetFile, content);
23
+ return { status: 'created', name };
24
+ };
25
+ const ensureSkillDir = (baseDir, name) => {
26
+ const skillDir = path.join(baseDir, name);
27
+ ensureDir(skillDir);
28
+ return skillDir;
29
+ };
30
+ /** Copy a Claude skill folder (SKILL.md + assets) with paths rewritten. */
31
+ const installSkillFolder = (sourceDir, targetSkillsDir, target) => {
32
+ const skillName = path.basename(sourceDir);
33
+ const targetDir = ensureSkillDir(targetSkillsDir, skillName);
34
+ let status = 'created';
35
+ for (const file of getFiles(sourceDir, 8)) {
36
+ const targetFile = path.join(targetDir, path.relative(sourceDir, file));
37
+ ensureDir(path.dirname(targetFile));
38
+ const content = rewriteClaudePaths(fs.readFileSync(file, 'utf-8'), target);
39
+ const existed = fs.existsSync(targetFile);
40
+ if (existed && fs.readFileSync(targetFile, 'utf-8') === content) {
41
+ status = status === 'created' ? 'exists' : status;
42
+ continue;
43
+ }
44
+ fs.writeFileSync(targetFile, content);
45
+ if (existed) {
46
+ status = 'updated';
47
+ }
48
+ }
49
+ return { status, name: skillName };
50
+ };
51
+ /** Wrap an agent/command body as a generated SKILL.md. */
52
+ const installGeneratedSkill = (targetSkillsDir, name, description, body, target) => {
53
+ const skillDir = ensureSkillDir(targetSkillsDir, name);
54
+ const content = buildGeneratedSkill(name, description, rewriteClaudePaths(body, target));
55
+ return writeIfChanged(path.join(skillDir, 'SKILL.md'), content, name);
56
+ };
57
+ /** Copy a command file straight into its own SKILL.md (frontmatter already present). */
58
+ const installDirectSkill = (targetSkillsDir, name, content, target) => {
59
+ const skillDir = ensureSkillDir(targetSkillsDir, name);
60
+ return writeIfChanged(path.join(skillDir, 'SKILL.md'), rewriteClaudePaths(content, target), name);
61
+ };
62
+ const installEditorArchitecture = (targetDir, target) => {
63
+ const archDir = path.join(ASSETS_DIR, 'architecture');
64
+ const targetArchDir = path.join(targetDir, 'architecture');
65
+ ensureDir(targetArchDir);
66
+ if (!fs.existsSync(archDir)) {
67
+ return [];
68
+ }
69
+ return getFiles(archDir).map((file) => {
70
+ const content = rewriteClaudePaths(fs.readFileSync(file, 'utf-8'), target);
71
+ return writeIfChanged(path.join(targetArchDir, path.basename(file)), content, path.basename(file));
72
+ });
73
+ };
74
+ const installEditorSkills = (targetDir, target) => {
75
+ const results = [];
76
+ const targetSkillsDir = path.join(targetDir, 'skills');
77
+ ensureDir(targetSkillsDir);
78
+ // 1. Skill folders → copied verbatim (paths rewritten).
79
+ const skillsDir = path.join(ASSETS_DIR, 'skills');
80
+ if (fs.existsSync(skillsDir)) {
81
+ for (const dir of getDirs(skillsDir)) {
82
+ results.push(installSkillFolder(dir, targetSkillsDir, target));
83
+ }
84
+ }
85
+ // 2. Commands → each becomes a SKILL.md (frontmatter already present).
86
+ const commandsDir = path.join(ASSETS_DIR, 'commands');
87
+ if (fs.existsSync(commandsDir)) {
88
+ for (const file of getFiles(commandsDir)) {
89
+ const name = path.basename(file, '.md');
90
+ results.push(installDirectSkill(targetSkillsDir, name, fs.readFileSync(file, 'utf-8'), target));
91
+ }
92
+ }
93
+ // 3. Agent personas → wrapped as generated SKILL.md.
94
+ for (const dirName of ['developers', 'utilities']) {
95
+ const sourceDir = path.join(ASSETS_DIR, 'agents', dirName);
96
+ if (!fs.existsSync(sourceDir)) {
97
+ continue;
98
+ }
99
+ for (const file of getFiles(sourceDir)) {
100
+ const name = path.basename(file, '.md');
101
+ const parsed = extractFrontmatter(fs.readFileSync(file, 'utf-8'));
102
+ const description = parsed.description ??
103
+ (dirName === 'developers'
104
+ ? `Imported MoiCle developer persona for ${name}. Use when the task matches this stack specialist.`
105
+ : `Imported MoiCle utility persona for ${name}. Use when the task matches this specialist.`);
106
+ results.push(installGeneratedSkill(targetSkillsDir, name, description, parsed.body.trimStart(), target));
107
+ }
108
+ }
109
+ return results;
110
+ };
111
+ export const installSkillEditorScope = async (scope, target) => {
112
+ const isGlobal = scope === 'global';
113
+ const label = isGlobal ? 'Global' : 'Project';
114
+ const name = getEditorConfig(target).name;
115
+ const baseDir = getEditorDir(target, scope);
116
+ console.log('');
117
+ console.log(chalk.cyan(`>>> ${label} ${name} Installation`));
118
+ console.log(chalk.gray(` Target: ${baseDir}`));
119
+ console.log('');
120
+ ensureDir(baseDir);
121
+ const archResults = installEditorArchitecture(baseDir, target);
122
+ console.log(chalk.green(` ✓ Architecture installed to ${chalk.cyan(path.join(baseDir, 'architecture'))}`));
123
+ printSummary(archResults);
124
+ const skillResults = installEditorSkills(baseDir, target);
125
+ console.log(chalk.green(` ✓ ${name} skills installed to ${chalk.cyan(path.join(baseDir, 'skills'))}`));
126
+ printSummary(skillResults);
127
+ console.log('');
128
+ console.log(chalk.green(`✓ ${label} ${name} installation complete!`));
129
+ };
130
+ //# sourceMappingURL=skill-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-editor.js","sourceRoot":"","sources":["../../../src/commands/install/skill-editor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Content transforms shared by the skill-based editors (Codex, Antigravity).
3
+ * Claude assets are authored as-is; other editors need paths/brand names rewritten
4
+ * and agent personas wrapped as SKILL.md files.
5
+ */
6
+ /** Skill-based editors that consume rewritten SKILL.md folders. */
7
+ export type SkillEditorTarget = 'codex' | 'antigravity';
8
+ export declare const rewriteClaudePaths: (content: string, target: "claude" | SkillEditorTarget) => string;
9
+ export declare const extractFrontmatter: (content: string) => {
10
+ frontmatter: string | null;
11
+ body: string;
12
+ description?: string;
13
+ };
14
+ export declare const buildGeneratedSkill: (name: string, description: string, body: string) => string;
15
+ //# sourceMappingURL=transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/commands/install/transform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mEAAmE;AACnE,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,aAAa,CAAC;AAiBxD,eAAO,MAAM,kBAAkB,GAC7B,SAAS,MAAM,EACf,QAAQ,QAAQ,GAAG,iBAAiB,KACnC,MAKF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,SAAS,MAAM,KACd;IAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAelE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,EAAE,aAAa,MAAM,EAAE,MAAM,MAAM,KAAG,MAMrF,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Content transforms shared by the skill-based editors (Codex, Antigravity).
3
+ * Claude assets are authored as-is; other editors need paths/brand names rewritten
4
+ * and agent personas wrapped as SKILL.md files.
5
+ */
6
+ const REWRITE_RULES = {
7
+ codex: [
8
+ [/~\/\.claude\//g, '~/.codex/'],
9
+ [/\.claude\//g, '.codex/'],
10
+ [/Claude Code/g, 'Codex CLI'],
11
+ [/CLAUDE\.md/g, 'AGENTS.md'],
12
+ ],
13
+ antigravity: [
14
+ [/~\/\.claude\//g, '~/.gemini/'],
15
+ [/\.claude\//g, '.gemini/'],
16
+ [/Claude Code/g, 'Antigravity'],
17
+ [/CLAUDE\.md/g, 'GEMINI.md'],
18
+ ],
19
+ };
20
+ export const rewriteClaudePaths = (content, target) => {
21
+ if (target === 'claude') {
22
+ return content;
23
+ }
24
+ return REWRITE_RULES[target].reduce((acc, [pattern, replacement]) => acc.replace(pattern, replacement), content);
25
+ };
26
+ export const extractFrontmatter = (content) => {
27
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
28
+ if (!match) {
29
+ return { frontmatter: null, body: content };
30
+ }
31
+ const frontmatter = match[1];
32
+ const body = match[2];
33
+ const descriptionMatch = frontmatter.match(/^description:\s*(.+)$/m);
34
+ return {
35
+ frontmatter,
36
+ body,
37
+ description: descriptionMatch?.[1]?.trim(),
38
+ };
39
+ };
40
+ export const buildGeneratedSkill = (name, description, body) => `---
41
+ name: ${name}
42
+ description: ${description}
43
+ ---
44
+
45
+ ${body}
46
+ `;
47
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../src/commands/install/transform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,aAAa,GAAuD;IACxE,KAAK,EAAE;QACL,CAAC,gBAAgB,EAAE,WAAW,CAAC;QAC/B,CAAC,aAAa,EAAE,SAAS,CAAC;QAC1B,CAAC,cAAc,EAAE,WAAW,CAAC;QAC7B,CAAC,aAAa,EAAE,WAAW,CAAC;KAC7B;IACD,WAAW,EAAE;QACX,CAAC,gBAAgB,EAAE,YAAY,CAAC;QAChC,CAAC,aAAa,EAAE,UAAU,CAAC;QAC3B,CAAC,cAAc,EAAE,aAAa,CAAC;QAC/B,CAAC,aAAa,EAAE,WAAW,CAAC;KAC7B;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAAe,EACf,MAAoC,EAC5B,EAAE;IACV,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;AACnH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAAe,EACqD,EAAE;IACtE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC3E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAErE,OAAO;QACL,WAAW;QACX,IAAI;QACJ,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;KAC3C,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAE,IAAY,EAAU,EAAE,CAAC;QACxF,IAAI;eACG,WAAW;;;EAGxB,IAAI;CACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { EditorTarget } from '../../types.js';
2
+ export declare const printUsage: (targets: EditorTarget[]) => void;
3
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/commands/install/usage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAkDnD,eAAO,MAAM,UAAU,GAAI,SAAS,YAAY,EAAE,KAAG,IA0BpD,CAAC"}
@@ -0,0 +1,72 @@
1
+ import chalk from 'chalk';
2
+ import { EDITOR_CONFIGS } from '../../utils/symlink.js';
3
+ /**
4
+ * Final "Usage" banner. Counts/names are kept in sync with assets/ here so the
5
+ * post-install summary never drifts from what was actually installed.
6
+ */
7
+ const printClaudeUsage = () => {
8
+ console.log(chalk.bold(' Claude Code:'));
9
+ console.log(' Agents (16):');
10
+ console.log(chalk.gray(' Developers @flutter-mobile-dev, @go-backend-dev, @laravel-backend-dev,'));
11
+ console.log(chalk.gray(' @nodejs-backend-dev, @react-frontend-dev, @remix-fullstack-dev'));
12
+ console.log(chalk.gray(' Utilities @api-designer, @clean-architect, @code-reviewer, @db-designer,'));
13
+ console.log(chalk.gray(' @devops, @docs-writer, @perf-optimizer, @refactor,'));
14
+ console.log(chalk.gray(' @security-audit, @test-writer'));
15
+ console.log('');
16
+ console.log(' Commands (4):');
17
+ console.log(chalk.gray(' /bootstrap Create new project'));
18
+ console.log(chalk.gray(' /brainstorm Brainstorm ideas'));
19
+ console.log(chalk.gray(' /doc Generate documentation'));
20
+ console.log(chalk.gray(' /marketing Go-to-market plan'));
21
+ console.log('');
22
+ console.log(' Skills (21, auto-triggered, namespaced /group:action):');
23
+ console.log(chalk.gray(' /feature:* new, refactor, api, deprecate'));
24
+ console.log(chalk.gray(' /fix:* hotfix, root-cause, incident, pr-comment'));
25
+ console.log(chalk.gray(' /review:* branch, pr, architect, tdd'));
26
+ console.log(chalk.gray(' /research:* web, spike, onboarding'));
27
+ console.log(chalk.gray(' /docs:* write, sync'));
28
+ console.log(chalk.gray(' /marketing:* content, seo-blog, logo, video'));
29
+ console.log('');
30
+ console.log(chalk.gray(' Run "moicle list" to see everything installed.'));
31
+ console.log('');
32
+ };
33
+ /** Codex & Antigravity: everything ships as SKILL.md (agents + commands + skills). */
34
+ const printSkillEditorUsage = (target) => {
35
+ const name = EDITOR_CONFIGS[target].name;
36
+ const home = target === 'codex' ? '~/.codex' : '~/.gemini';
37
+ const local = target === 'codex' ? './.codex' : './.gemini';
38
+ console.log(chalk.bold(` ${name}:`));
39
+ console.log(chalk.gray(` MoiCle's 16 agents, 4 commands & 21 skills installed as SKILL.md files`));
40
+ console.log(chalk.gray(` Skills under ${home}/skills or ${local}/skills`));
41
+ console.log(chalk.gray(` Architecture docs under ${home}/architecture or ${local}/architecture`));
42
+ if (target === 'codex') {
43
+ console.log(chalk.gray(' Restart Codex after global skill installation to pick up new skills'));
44
+ }
45
+ console.log('');
46
+ };
47
+ export const printUsage = (targets) => {
48
+ console.log('');
49
+ console.log(chalk.cyan('════════════════════════════════════════'));
50
+ console.log(chalk.cyan(' Usage'));
51
+ console.log(chalk.cyan('════════════════════════════════════════'));
52
+ console.log('');
53
+ if (targets.includes('claude')) {
54
+ printClaudeUsage();
55
+ }
56
+ if (targets.includes('codex')) {
57
+ printSkillEditorUsage('codex');
58
+ }
59
+ if (targets.includes('antigravity')) {
60
+ printSkillEditorUsage('antigravity');
61
+ }
62
+ const rulesFileTargets = targets.filter((t) => t === 'cursor' || t === 'windsurf');
63
+ if (rulesFileTargets.length > 0) {
64
+ console.log(chalk.bold(' Rules-file Editors:'));
65
+ for (const target of rulesFileTargets) {
66
+ const config = EDITOR_CONFIGS[target];
67
+ console.log(chalk.gray(` ${config.name}: 16 agents merged into ${config.rulesFile} + architecture docs`));
68
+ }
69
+ console.log('');
70
+ }
71
+ };
72
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/commands/install/usage.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,2 @@
1
- import type { CommandOptions } from '../types.js';
2
- export declare const installCommand: (options: CommandOptions) => Promise<void>;
1
+ export { installCommand } from './install/index.js';
3
2
  //# sourceMappingURL=install.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAmC,MAAM,aAAa,CAAC;AAkrBnF,eAAO,MAAM,cAAc,GAAU,SAAS,cAAc,KAAG,OAAO,CAAC,IAAI,CAwI1E,CAAC"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}