maxsimcli 3.12.0 → 4.0.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/.tsbuildinfo +1 -1
- package/dist/adapters/index.d.ts +0 -11
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +4 -40
- package/dist/adapters/index.js.map +1 -1
- package/dist/assets/CHANGELOG.md +17 -0
- package/dist/assets/dashboard/client/assets/{index-wtQDvXzr.js → index-C_eAetZJ.js} +60 -60
- package/dist/assets/dashboard/client/assets/index-CmiJKqOU.css +32 -0
- package/dist/assets/dashboard/client/index.html +2 -2
- package/dist/assets/dashboard/server.js +467 -271
- package/dist/assets/templates/agents/AGENTS.md +13 -1
- package/dist/assets/templates/agents/maxsim-debugger.md +2 -2
- package/dist/assets/templates/agents/maxsim-executor.md +5 -5
- package/dist/assets/templates/agents/maxsim-phase-researcher.md +2 -2
- package/dist/assets/templates/agents/maxsim-plan-checker.md +2 -2
- package/dist/assets/templates/agents/maxsim-planner.md +3 -3
- package/dist/assets/templates/commands/maxsim/add-todo.md +15 -5
- package/dist/assets/templates/commands/maxsim/discuss-phase.md +1 -0
- package/dist/assets/templates/commands/maxsim/init-existing.md +4 -0
- package/dist/assets/templates/commands/maxsim/new-project.md +4 -0
- package/dist/assets/templates/references/thinking-partner.md +41 -0
- package/dist/assets/templates/skills/batch-worktree/SKILL.md +137 -0
- package/dist/assets/templates/skills/brainstorming/SKILL.md +159 -0
- package/dist/assets/templates/skills/roadmap-writing/SKILL.md +198 -0
- package/dist/assets/templates/skills/sdd/SKILL.md +175 -0
- package/dist/assets/templates/skills/simplify/SKILL.md +48 -0
- package/dist/assets/templates/skills/using-maxsim/SKILL.md +6 -1
- package/dist/assets/templates/templates/acceptance-criteria.md +10 -0
- package/dist/assets/templates/templates/decisions.md +10 -0
- package/dist/assets/templates/templates/no-gos.md +9 -0
- package/dist/assets/templates/workflows/add-todo.md +89 -0
- package/dist/assets/templates/workflows/discuss-phase.md +85 -1
- package/dist/assets/templates/workflows/execute-phase.md +22 -2
- package/dist/assets/templates/workflows/execute-plan.md +166 -0
- package/dist/assets/templates/workflows/init-existing.md +116 -0
- package/dist/assets/templates/workflows/new-project.md +105 -1
- package/dist/assets/templates/workflows/plan-phase.md +3 -3
- package/dist/assets/templates/workflows/quick.md +2 -2
- package/dist/cli.cjs +1264 -882
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +97 -74
- package/dist/cli.js.map +1 -1
- package/dist/core/artefakte.d.ts +12 -0
- package/dist/core/artefakte.d.ts.map +1 -0
- package/dist/core/artefakte.js +136 -0
- package/dist/core/artefakte.js.map +1 -0
- package/dist/core/commands.d.ts +13 -13
- package/dist/core/commands.d.ts.map +1 -1
- package/dist/core/commands.js +44 -57
- package/dist/core/commands.js.map +1 -1
- package/dist/core/config.d.ts +4 -3
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +14 -18
- package/dist/core/config.js.map +1 -1
- package/dist/core/context-loader.d.ts +20 -0
- package/dist/core/context-loader.d.ts.map +1 -0
- package/dist/core/context-loader.js +154 -0
- package/dist/core/context-loader.js.map +1 -0
- package/dist/core/core.d.ts +8 -2
- package/dist/core/core.d.ts.map +1 -1
- package/dist/core/core.js +47 -11
- package/dist/core/core.js.map +1 -1
- package/dist/core/dashboard-launcher.d.ts +1 -1
- package/dist/core/dashboard-launcher.d.ts.map +1 -1
- package/dist/core/dashboard-launcher.js +18 -15
- package/dist/core/dashboard-launcher.js.map +1 -1
- package/dist/core/frontmatter.d.ts +5 -5
- package/dist/core/frontmatter.d.ts.map +1 -1
- package/dist/core/frontmatter.js +21 -26
- package/dist/core/frontmatter.js.map +1 -1
- package/dist/core/index.d.ts +8 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +23 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/init.d.ts +14 -14
- package/dist/core/init.d.ts.map +1 -1
- package/dist/core/init.js +93 -154
- package/dist/core/init.js.map +1 -1
- package/dist/core/milestone.d.ts +3 -3
- package/dist/core/milestone.d.ts.map +1 -1
- package/dist/core/milestone.js +9 -9
- package/dist/core/milestone.js.map +1 -1
- package/dist/core/phase.d.ts +9 -9
- package/dist/core/phase.d.ts.map +1 -1
- package/dist/core/phase.js +64 -68
- package/dist/core/phase.js.map +1 -1
- package/dist/core/roadmap.d.ts +4 -3
- package/dist/core/roadmap.d.ts.map +1 -1
- package/dist/core/roadmap.js +46 -109
- package/dist/core/roadmap.js.map +1 -1
- package/dist/core/skills.d.ts +19 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +145 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/start.d.ts +15 -0
- package/dist/core/start.d.ts.map +1 -0
- package/dist/core/start.js +80 -0
- package/dist/core/start.js.map +1 -0
- package/dist/core/state.d.ts +13 -13
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +119 -126
- package/dist/core/state.js.map +1 -1
- package/dist/core/template.d.ts +3 -3
- package/dist/core/template.d.ts.map +1 -1
- package/dist/core/template.js +12 -14
- package/dist/core/template.js.map +1 -1
- package/dist/core/types.d.ts +14 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +8 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/verify.d.ts +10 -9
- package/dist/core/verify.d.ts.map +1 -1
- package/dist/core/verify.js +38 -48
- package/dist/core/verify.js.map +1 -1
- package/dist/core-TFSlUjV1.cjs +4312 -0
- package/dist/core-TFSlUjV1.cjs.map +1 -0
- package/dist/install/adapters.d.ts +2 -11
- package/dist/install/adapters.d.ts.map +1 -1
- package/dist/install/adapters.js +16 -154
- package/dist/install/adapters.js.map +1 -1
- package/dist/install/copy.d.ts +1 -10
- package/dist/install/copy.d.ts.map +1 -1
- package/dist/install/copy.js +5 -125
- package/dist/install/copy.js.map +1 -1
- package/dist/install/hooks.d.ts +4 -5
- package/dist/install/hooks.d.ts.map +1 -1
- package/dist/install/hooks.js +46 -71
- package/dist/install/hooks.js.map +1 -1
- package/dist/install/index.js +163 -226
- package/dist/install/index.js.map +1 -1
- package/dist/install/manifest.d.ts +5 -2
- package/dist/install/manifest.d.ts.map +1 -1
- package/dist/install/manifest.js +20 -26
- package/dist/install/manifest.js.map +1 -1
- package/dist/install/patches.d.ts +1 -2
- package/dist/install/patches.d.ts.map +1 -1
- package/dist/install/patches.js +4 -16
- package/dist/install/patches.js.map +1 -1
- package/dist/install/shared.d.ts +24 -18
- package/dist/install/shared.d.ts.map +1 -1
- package/dist/install/shared.js +65 -35
- package/dist/install/shared.js.map +1 -1
- package/dist/install/uninstall.d.ts +2 -3
- package/dist/install/uninstall.d.ts.map +1 -1
- package/dist/install/uninstall.js +24 -82
- package/dist/install/uninstall.js.map +1 -1
- package/dist/install.cjs +321 -1230
- package/dist/install.cjs.map +1 -1
- package/dist/mcp-server.cjs +38 -14
- package/dist/mcp-server.cjs.map +1 -1
- package/dist/skills-BOSxYUzf.cjs +6812 -0
- package/dist/skills-BOSxYUzf.cjs.map +1 -0
- package/package.json +1 -1
- package/dist/adapters/codex.d.ts +0 -19
- package/dist/adapters/codex.d.ts.map +0 -1
- package/dist/adapters/codex.js +0 -94
- package/dist/adapters/codex.js.map +0 -1
- package/dist/adapters/gemini.d.ts +0 -19
- package/dist/adapters/gemini.d.ts.map +0 -1
- package/dist/adapters/gemini.js +0 -96
- package/dist/adapters/gemini.js.map +0 -1
- package/dist/adapters/opencode.d.ts +0 -17
- package/dist/adapters/opencode.d.ts.map +0 -1
- package/dist/adapters/opencode.js +0 -111
- package/dist/adapters/opencode.js.map +0 -1
- package/dist/adapters/transforms/content.d.ts +0 -39
- package/dist/adapters/transforms/content.d.ts.map +0 -1
- package/dist/adapters/transforms/content.js +0 -125
- package/dist/adapters/transforms/content.js.map +0 -1
- package/dist/adapters/transforms/frontmatter.d.ts +0 -42
- package/dist/adapters/transforms/frontmatter.d.ts.map +0 -1
- package/dist/adapters/transforms/frontmatter.js +0 -204
- package/dist/adapters/transforms/frontmatter.js.map +0 -1
- package/dist/adapters/transforms/tool-maps.d.ts +0 -20
- package/dist/adapters/transforms/tool-maps.d.ts.map +0 -1
- package/dist/adapters/transforms/tool-maps.js +0 -64
- package/dist/adapters/transforms/tool-maps.js.map +0 -1
- package/dist/assets/dashboard/client/assets/index-CxFKStBk.css +0 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/install/hooks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/install/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/install/index.js
CHANGED
|
@@ -57,37 +57,13 @@ const uninstall_js_1 = require("./uninstall.js");
|
|
|
57
57
|
// Parse args
|
|
58
58
|
const args = process.argv.slice(2);
|
|
59
59
|
const argv = (0, minimist_1.default)(args, {
|
|
60
|
-
boolean: ['global', 'local', '
|
|
60
|
+
boolean: ['global', 'local', 'claude', 'uninstall', 'help', 'version', 'force-statusline', 'network'],
|
|
61
61
|
string: ['config-dir'],
|
|
62
62
|
alias: { g: 'global', l: 'local', u: 'uninstall', h: 'help', c: 'config-dir' },
|
|
63
63
|
});
|
|
64
64
|
const hasGlobal = !!argv['global'];
|
|
65
65
|
const hasLocal = !!argv['local'];
|
|
66
|
-
const hasOpencode = !!argv['opencode'];
|
|
67
|
-
const hasClaude = !!argv['claude'];
|
|
68
|
-
const hasGemini = !!argv['gemini'];
|
|
69
|
-
const hasCodex = !!argv['codex'];
|
|
70
|
-
const hasBoth = !!argv['both']; // Legacy flag, keeps working
|
|
71
|
-
const hasAll = !!argv['all'];
|
|
72
66
|
const hasUninstall = !!argv['uninstall'];
|
|
73
|
-
// Runtime selection - can be set by flags or interactive prompt
|
|
74
|
-
let selectedRuntimes = [];
|
|
75
|
-
if (hasAll) {
|
|
76
|
-
selectedRuntimes = ['claude', 'opencode', 'gemini', 'codex'];
|
|
77
|
-
}
|
|
78
|
-
else if (hasBoth) {
|
|
79
|
-
selectedRuntimes = ['claude', 'opencode'];
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
if (hasOpencode)
|
|
83
|
-
selectedRuntimes.push('opencode');
|
|
84
|
-
if (hasClaude)
|
|
85
|
-
selectedRuntimes.push('claude');
|
|
86
|
-
if (hasGemini)
|
|
87
|
-
selectedRuntimes.push('gemini');
|
|
88
|
-
if (hasCodex)
|
|
89
|
-
selectedRuntimes.push('codex');
|
|
90
|
-
}
|
|
91
67
|
const banner = '\n' +
|
|
92
68
|
chalk_1.default.cyan(figlet_1.default.textSync('MAXSIM', { font: 'ANSI Shadow' })
|
|
93
69
|
.split('\n')
|
|
@@ -99,12 +75,20 @@ const banner = '\n' +
|
|
|
99
75
|
chalk_1.default.dim('v' + shared_js_1.pkg.version) +
|
|
100
76
|
'\n' +
|
|
101
77
|
' A meta-prompting, context engineering and spec-driven\n' +
|
|
102
|
-
' development system for Claude Code
|
|
78
|
+
' development system for Claude Code.\n';
|
|
103
79
|
// Parse --config-dir argument
|
|
104
80
|
const explicitConfigDir = argv['config-dir'] || null;
|
|
105
81
|
const hasHelp = !!argv['help'];
|
|
106
82
|
const hasVersion = !!argv['version'];
|
|
107
83
|
const forceStatusline = !!argv['force-statusline'];
|
|
84
|
+
// Reject deprecated multi-runtime flags
|
|
85
|
+
const deprecatedFlags = ['opencode', 'gemini', 'codex', 'both', 'all'];
|
|
86
|
+
for (const flag of deprecatedFlags) {
|
|
87
|
+
if (argv[flag]) {
|
|
88
|
+
console.error(`Error: The --${flag} flag is no longer supported. MAXSIM v2.0 is Claude Code only.`);
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
108
92
|
// Show version if requested (before banner for clean output)
|
|
109
93
|
if (hasVersion) {
|
|
110
94
|
console.log(shared_js_1.pkg.version);
|
|
@@ -113,17 +97,15 @@ if (hasVersion) {
|
|
|
113
97
|
console.log(banner);
|
|
114
98
|
// Show help if requested
|
|
115
99
|
if (hasHelp) {
|
|
116
|
-
console.log(` ${chalk_1.default.yellow('Usage:')} npx maxsimcli [options]\n\n ${chalk_1.default.yellow('Options:')}\n ${chalk_1.default.cyan('-g, --global')} Install globally (to config directory)\n ${chalk_1.default.cyan('-l, --local')} Install locally (to current directory)\n ${chalk_1.default.cyan('
|
|
100
|
+
console.log(` ${chalk_1.default.yellow('Usage:')} npx maxsimcli [options]\n\n ${chalk_1.default.yellow('Options:')}\n ${chalk_1.default.cyan('-g, --global')} Install globally (to config directory)\n ${chalk_1.default.cyan('-l, --local')} Install locally (to current directory)\n ${chalk_1.default.cyan('-u, --uninstall')} Uninstall MAXSIM (remove all MAXSIM files)\n ${chalk_1.default.cyan('-c, --config-dir <path>')} Specify custom config directory\n ${chalk_1.default.cyan('-h, --help')} Show this help message\n ${chalk_1.default.cyan('--force-statusline')} Replace existing statusline config\n\n ${chalk_1.default.yellow('Examples:')}\n ${chalk_1.default.dim('# Interactive install (prompts for location)')}\n npx maxsimcli\n\n ${chalk_1.default.dim('# Install globally')}\n npx maxsimcli --global\n\n ${chalk_1.default.dim('# Install to current project only')}\n npx maxsimcli --local\n\n ${chalk_1.default.dim('# Install to custom config directory')}\n npx maxsimcli --global --config-dir ~/.claude-work\n\n ${chalk_1.default.dim('# Uninstall MAXSIM globally')}\n npx maxsimcli --global --uninstall\n\n ${chalk_1.default.yellow('Notes:')}\n The --config-dir option is useful when you have multiple configurations.\n It takes priority over the CLAUDE_CONFIG_DIR environment variable.\n`);
|
|
117
101
|
process.exit(0);
|
|
118
102
|
}
|
|
119
|
-
async function install(isGlobal
|
|
120
|
-
const
|
|
121
|
-
const
|
|
122
|
-
const isCodex = runtime === 'codex';
|
|
123
|
-
const dirName = (0, shared_js_1.getDirName)(runtime);
|
|
103
|
+
async function install(isGlobal) {
|
|
104
|
+
const runtime = 'claude';
|
|
105
|
+
const dirName = (0, shared_js_1.getDirName)();
|
|
124
106
|
const src = shared_js_1.templatesRoot;
|
|
125
107
|
const targetDir = isGlobal
|
|
126
|
-
? (0, shared_js_1.getGlobalDir)(
|
|
108
|
+
? (0, shared_js_1.getGlobalDir)(explicitConfigDir)
|
|
127
109
|
: path.join(process.cwd(), dirName);
|
|
128
110
|
const locationLabel = isGlobal
|
|
129
111
|
? targetDir.replace(os.homedir(), '~')
|
|
@@ -131,63 +113,37 @@ async function install(isGlobal, runtime = 'claude') {
|
|
|
131
113
|
const pathPrefix = isGlobal
|
|
132
114
|
? `${targetDir.replace(/\\/g, '/')}/`
|
|
133
115
|
: `./${dirName}/`;
|
|
134
|
-
|
|
135
|
-
if (isOpencode)
|
|
136
|
-
runtimeLabel = 'OpenCode';
|
|
137
|
-
if (isGemini)
|
|
138
|
-
runtimeLabel = 'Gemini';
|
|
139
|
-
if (isCodex)
|
|
140
|
-
runtimeLabel = 'Codex';
|
|
141
|
-
console.log(` Installing for ${chalk_1.default.cyan(runtimeLabel)} to ${chalk_1.default.cyan(locationLabel)}\n`);
|
|
116
|
+
console.log(` Installing for ${chalk_1.default.cyan('Claude Code')} to ${chalk_1.default.cyan(locationLabel)}\n`);
|
|
142
117
|
const failures = [];
|
|
118
|
+
// Detect prior install via manifest — used for re-run safety
|
|
119
|
+
const existingManifest = (0, manifest_js_1.readManifest)(targetDir);
|
|
120
|
+
const isAlreadyCurrent = existingManifest !== null && existingManifest.version === shared_js_1.pkg.version;
|
|
121
|
+
if (existingManifest !== null) {
|
|
122
|
+
const { complete, missing } = (0, shared_js_1.verifyInstallComplete)(targetDir, runtime, existingManifest);
|
|
123
|
+
if (!complete) {
|
|
124
|
+
console.log(` ${chalk_1.default.yellow('!')} Previous install (v${existingManifest.version}) is incomplete — ${missing.length} missing file(s). Re-installing.`);
|
|
125
|
+
}
|
|
126
|
+
else if (isAlreadyCurrent) {
|
|
127
|
+
console.log(` ${chalk_1.default.dim(`Version ${shared_js_1.pkg.version} already installed — upgrading in place`)}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
143
130
|
// Save any locally modified MAXSIM files before they get wiped
|
|
144
131
|
(0, patches_js_1.saveLocalPatches)(targetDir);
|
|
145
132
|
// Clean up orphaned files from previous versions
|
|
146
133
|
(0, hooks_js_1.cleanupOrphanedFiles)(targetDir);
|
|
147
|
-
//
|
|
134
|
+
// Claude uses commands/maxsim/
|
|
148
135
|
let spinner = (0, ora_1.default)({ text: 'Installing commands...', color: 'cyan' }).start();
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
.readdirSync(commandDir)
|
|
157
|
-
.filter((f) => f.startsWith('maxsim-')).length;
|
|
158
|
-
spinner.succeed(chalk_1.default.green('\u2713') + ` Installed ${count} commands to command/`);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
spinner.fail('Failed to install commands');
|
|
162
|
-
failures.push('command/maxsim-*');
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
else if (isCodex) {
|
|
166
|
-
const skillsDir = path.join(targetDir, 'skills');
|
|
167
|
-
const maxsimSrc = path.join(src, 'commands', 'maxsim');
|
|
168
|
-
(0, copy_js_1.copyCommandsAsCodexSkills)(maxsimSrc, skillsDir, 'maxsim', pathPrefix, runtime, explicitConfigDir);
|
|
169
|
-
const installedSkillNames = (0, copy_js_1.listCodexSkillNames)(skillsDir);
|
|
170
|
-
if (installedSkillNames.length > 0) {
|
|
171
|
-
spinner.succeed(chalk_1.default.green('\u2713') + ` Installed ${installedSkillNames.length} skills to skills/`);
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
spinner.fail('Failed to install skills');
|
|
175
|
-
failures.push('skills/maxsim-*');
|
|
176
|
-
}
|
|
136
|
+
const commandsDir = path.join(targetDir, 'commands');
|
|
137
|
+
fs.mkdirSync(commandsDir, { recursive: true });
|
|
138
|
+
const maxsimSrc = path.join(src, 'commands', 'maxsim');
|
|
139
|
+
const maxsimDest = path.join(commandsDir, 'maxsim');
|
|
140
|
+
(0, copy_js_1.copyWithPathReplacement)(maxsimSrc, maxsimDest, pathPrefix, explicitConfigDir, true);
|
|
141
|
+
if ((0, shared_js_1.verifyInstalled)(maxsimDest, 'commands/maxsim')) {
|
|
142
|
+
spinner.succeed(chalk_1.default.green('\u2713') + ' Installed commands/maxsim');
|
|
177
143
|
}
|
|
178
144
|
else {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
const maxsimSrc = path.join(src, 'commands', 'maxsim');
|
|
182
|
-
const maxsimDest = path.join(commandsDir, 'maxsim');
|
|
183
|
-
(0, copy_js_1.copyWithPathReplacement)(maxsimSrc, maxsimDest, pathPrefix, runtime, explicitConfigDir, true);
|
|
184
|
-
if ((0, shared_js_1.verifyInstalled)(maxsimDest, 'commands/maxsim')) {
|
|
185
|
-
spinner.succeed(chalk_1.default.green('\u2713') + ' Installed commands/maxsim');
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
spinner.fail('Failed to install commands/maxsim');
|
|
189
|
-
failures.push('commands/maxsim');
|
|
190
|
-
}
|
|
145
|
+
spinner.fail('Failed to install commands/maxsim');
|
|
146
|
+
failures.push('commands/maxsim');
|
|
191
147
|
}
|
|
192
148
|
// Copy maxsim directory content (workflows, templates, references) with path replacement
|
|
193
149
|
spinner = (0, ora_1.default)({ text: 'Installing workflows and templates...', color: 'cyan' }).start();
|
|
@@ -201,7 +157,7 @@ async function install(isGlobal, runtime = 'claude') {
|
|
|
201
157
|
const subdirSrc = path.join(src, subdir);
|
|
202
158
|
if (fs.existsSync(subdirSrc)) {
|
|
203
159
|
const subdirDest = path.join(skillDest, subdir);
|
|
204
|
-
(0, copy_js_1.copyWithPathReplacement)(subdirSrc, subdirDest, pathPrefix,
|
|
160
|
+
(0, copy_js_1.copyWithPathReplacement)(subdirSrc, subdirDest, pathPrefix, explicitConfigDir);
|
|
205
161
|
}
|
|
206
162
|
}
|
|
207
163
|
if ((0, shared_js_1.verifyInstalled)(skillDest, 'maxsim')) {
|
|
@@ -231,16 +187,7 @@ async function install(isGlobal, runtime = 'claude') {
|
|
|
231
187
|
let content = fs.readFileSync(path.join(agentsSrc, entry.name), 'utf8');
|
|
232
188
|
const dirRegex = /~\/\.claude\//g;
|
|
233
189
|
content = content.replace(dirRegex, pathPrefix);
|
|
234
|
-
content = (0, index_js_1.processAttribution)(content, (0, adapters_js_1.getCommitAttribution)(
|
|
235
|
-
if (isOpencode) {
|
|
236
|
-
content = (0, index_js_1.convertClaudeToOpencodeFrontmatter)(content);
|
|
237
|
-
}
|
|
238
|
-
else if (isGemini) {
|
|
239
|
-
content = (0, index_js_1.convertClaudeToGeminiAgent)(content);
|
|
240
|
-
}
|
|
241
|
-
else if (isCodex) {
|
|
242
|
-
content = (0, index_js_1.convertClaudeToCodexMarkdown)(content);
|
|
243
|
-
}
|
|
190
|
+
content = (0, index_js_1.processAttribution)(content, (0, adapters_js_1.getCommitAttribution)(explicitConfigDir));
|
|
244
191
|
fs.writeFileSync(path.join(agentsDest, entry.name), content);
|
|
245
192
|
}
|
|
246
193
|
}
|
|
@@ -252,15 +199,20 @@ async function install(isGlobal, runtime = 'claude') {
|
|
|
252
199
|
failures.push('agents');
|
|
253
200
|
}
|
|
254
201
|
}
|
|
255
|
-
//
|
|
202
|
+
// Remove legacy agents/skills/ directory (skills moved to skills/ in v1.x)
|
|
203
|
+
const legacySkillsDir = path.join(targetDir, 'agents', 'skills');
|
|
204
|
+
if (fs.existsSync(legacySkillsDir)) {
|
|
205
|
+
fs.rmSync(legacySkillsDir, { recursive: true });
|
|
206
|
+
console.log(` ${chalk_1.default.green('\u2713')} Removed legacy agents/skills/ directory`);
|
|
207
|
+
}
|
|
208
|
+
// Copy skills to skills/ directory
|
|
256
209
|
const skillsSrc = path.join(src, 'skills');
|
|
257
210
|
if (fs.existsSync(skillsSrc)) {
|
|
258
211
|
spinner = (0, ora_1.default)({ text: 'Installing skills...', color: 'cyan' }).start();
|
|
259
|
-
const skillsDest = path.join(targetDir, '
|
|
212
|
+
const skillsDest = path.join(targetDir, 'skills');
|
|
260
213
|
// Remove old MAXSIM built-in skills before copying new ones (preserve user custom skills)
|
|
261
214
|
if (fs.existsSync(skillsDest)) {
|
|
262
|
-
const
|
|
263
|
-
for (const skill of builtInSkills) {
|
|
215
|
+
for (const skill of shared_js_1.builtInSkills) {
|
|
264
216
|
const skillDir = path.join(skillsDest, skill);
|
|
265
217
|
if (fs.existsSync(skillDir)) {
|
|
266
218
|
fs.rmSync(skillDir, { recursive: true });
|
|
@@ -278,7 +230,7 @@ async function install(isGlobal, runtime = 'claude') {
|
|
|
278
230
|
let content = fs.readFileSync(skillMd, 'utf8');
|
|
279
231
|
const dirRegex = /~\/\.claude\//g;
|
|
280
232
|
content = content.replace(dirRegex, pathPrefix);
|
|
281
|
-
content = (0, index_js_1.processAttribution)(content, (0, adapters_js_1.getCommitAttribution)(
|
|
233
|
+
content = (0, index_js_1.processAttribution)(content, (0, adapters_js_1.getCommitAttribution)(explicitConfigDir));
|
|
282
234
|
fs.writeFileSync(skillMd, content);
|
|
283
235
|
}
|
|
284
236
|
}
|
|
@@ -286,11 +238,11 @@ async function install(isGlobal, runtime = 'claude') {
|
|
|
286
238
|
const installedSkillDirs = fs.readdirSync(skillsDest, { withFileTypes: true })
|
|
287
239
|
.filter(e => e.isDirectory()).length;
|
|
288
240
|
if (installedSkillDirs > 0) {
|
|
289
|
-
spinner.succeed(chalk_1.default.green('\u2713') + ` Installed ${installedSkillDirs} skills to
|
|
241
|
+
spinner.succeed(chalk_1.default.green('\u2713') + ` Installed ${installedSkillDirs} skills to skills/`);
|
|
290
242
|
}
|
|
291
243
|
else {
|
|
292
244
|
spinner.fail('Failed to install skills');
|
|
293
|
-
failures.push('
|
|
245
|
+
failures.push('skills');
|
|
294
246
|
}
|
|
295
247
|
}
|
|
296
248
|
// Copy CHANGELOG.md
|
|
@@ -330,38 +282,36 @@ async function install(isGlobal, runtime = 'claude') {
|
|
|
330
282
|
else {
|
|
331
283
|
failures.push('VERSION');
|
|
332
284
|
}
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
console.warn(` ${chalk_1.default.yellow('!')} mcp-server.cjs not found — MCP server not installed`);
|
|
361
|
-
}
|
|
362
|
-
// Install hooks
|
|
363
|
-
(0, hooks_js_1.installHookFiles)(targetDir, runtime, isGlobal, failures);
|
|
285
|
+
// Write package.json to force CommonJS mode for MAXSIM scripts
|
|
286
|
+
const pkgJsonDest = path.join(targetDir, 'package.json');
|
|
287
|
+
fs.writeFileSync(pkgJsonDest, '{"type":"commonjs"}\n');
|
|
288
|
+
console.log(` ${chalk_1.default.green('\u2713')} Wrote package.json (CommonJS mode)`);
|
|
289
|
+
// Install maxsim-tools.cjs binary
|
|
290
|
+
const toolSrc = path.resolve(__dirname, 'cli.cjs');
|
|
291
|
+
const binDir = path.join(targetDir, 'maxsim', 'bin');
|
|
292
|
+
const toolDest = path.join(binDir, 'maxsim-tools.cjs');
|
|
293
|
+
if (fs.existsSync(toolSrc)) {
|
|
294
|
+
fs.mkdirSync(binDir, { recursive: true });
|
|
295
|
+
fs.copyFileSync(toolSrc, toolDest);
|
|
296
|
+
console.log(` ${chalk_1.default.green('\u2713')} Installed maxsim-tools.cjs`);
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
console.warn(` ${chalk_1.default.yellow('!')} cli.cjs not found at ${toolSrc} — maxsim-tools.cjs not installed`);
|
|
300
|
+
failures.push('maxsim-tools.cjs');
|
|
301
|
+
}
|
|
302
|
+
// Install mcp-server.cjs
|
|
303
|
+
const mcpSrc = path.resolve(__dirname, 'mcp-server.cjs');
|
|
304
|
+
const mcpDest = path.join(binDir, 'mcp-server.cjs');
|
|
305
|
+
if (fs.existsSync(mcpSrc)) {
|
|
306
|
+
fs.mkdirSync(binDir, { recursive: true });
|
|
307
|
+
fs.copyFileSync(mcpSrc, mcpDest);
|
|
308
|
+
console.log(` ${chalk_1.default.green('\u2713')} Installed mcp-server.cjs`);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
console.warn(` ${chalk_1.default.yellow('!')} mcp-server.cjs not found — MCP server not installed`);
|
|
364
312
|
}
|
|
313
|
+
// Install hooks
|
|
314
|
+
(0, hooks_js_1.installHookFiles)(targetDir, isGlobal, failures);
|
|
365
315
|
// Copy dashboard
|
|
366
316
|
const dashboardSrc = path.resolve(__dirname, 'assets', 'dashboard');
|
|
367
317
|
if (fs.existsSync(dashboardSrc)) {
|
|
@@ -393,19 +343,37 @@ async function install(isGlobal, runtime = 'claude') {
|
|
|
393
343
|
}
|
|
394
344
|
}
|
|
395
345
|
// Write .mcp.json for Claude Code MCP server auto-discovery
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
346
|
+
const mcpJsonPath = isGlobal
|
|
347
|
+
? path.join(targetDir, '..', '.mcp.json')
|
|
348
|
+
: path.join(process.cwd(), '.mcp.json');
|
|
349
|
+
let mcpConfig = {};
|
|
350
|
+
let skipMcpConfig = false;
|
|
351
|
+
if (fs.existsSync(mcpJsonPath)) {
|
|
352
|
+
// Back up existing .mcp.json before modification
|
|
353
|
+
fs.copyFileSync(mcpJsonPath, mcpJsonPath + '.bak');
|
|
354
|
+
try {
|
|
355
|
+
mcpConfig = JSON.parse(fs.readFileSync(mcpJsonPath, 'utf-8'));
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
// Corrupted .mcp.json — warn user
|
|
359
|
+
console.warn(` ${chalk_1.default.yellow('!')} .mcp.json is corrupted (invalid JSON). Backup saved to .mcp.json.bak`);
|
|
360
|
+
let startFresh = true;
|
|
402
361
|
try {
|
|
403
|
-
|
|
362
|
+
startFresh = await (0, prompts_1.confirm)({
|
|
363
|
+
message: '.mcp.json is corrupted. Start with a fresh config? (No = abort MCP setup)',
|
|
364
|
+
default: true,
|
|
365
|
+
});
|
|
404
366
|
}
|
|
405
367
|
catch {
|
|
406
|
-
//
|
|
368
|
+
// Non-interactive — default to starting fresh
|
|
369
|
+
}
|
|
370
|
+
if (!startFresh) {
|
|
371
|
+
console.log(` ${chalk_1.default.yellow('!')} Skipping .mcp.json configuration`);
|
|
372
|
+
skipMcpConfig = true;
|
|
407
373
|
}
|
|
408
374
|
}
|
|
375
|
+
}
|
|
376
|
+
if (!skipMcpConfig) {
|
|
409
377
|
const mcpServers = mcpConfig.mcpServers ?? {};
|
|
410
378
|
mcpServers['maxsim'] = {
|
|
411
379
|
command: 'node',
|
|
@@ -421,70 +389,32 @@ async function install(isGlobal, runtime = 'claude') {
|
|
|
421
389
|
process.exit(1);
|
|
422
390
|
}
|
|
423
391
|
// Write file manifest for future modification detection
|
|
424
|
-
(0, manifest_js_1.writeManifest)(targetDir
|
|
392
|
+
(0, manifest_js_1.writeManifest)(targetDir);
|
|
425
393
|
console.log(` ${chalk_1.default.green('\u2713')} Wrote file manifest (${manifest_js_1.MANIFEST_NAME})`);
|
|
426
394
|
// Report any backed-up local patches
|
|
427
|
-
(0, patches_js_1.reportLocalPatches)(targetDir
|
|
428
|
-
if (isCodex) {
|
|
429
|
-
return {
|
|
430
|
-
settingsPath: null,
|
|
431
|
-
settings: null,
|
|
432
|
-
statuslineCommand: null,
|
|
433
|
-
runtime,
|
|
434
|
-
};
|
|
435
|
-
}
|
|
395
|
+
(0, patches_js_1.reportLocalPatches)(targetDir);
|
|
436
396
|
// Configure statusline and hooks in settings.json
|
|
437
|
-
const { settingsPath, settings, statuslineCommand } = (0, hooks_js_1.configureSettingsHooks)(targetDir,
|
|
438
|
-
// Enable experimental agents for Gemini CLI
|
|
439
|
-
if (isGemini) {
|
|
440
|
-
if (!settings.experimental) {
|
|
441
|
-
settings.experimental = {};
|
|
442
|
-
}
|
|
443
|
-
const experimental = settings.experimental;
|
|
444
|
-
if (!experimental.enableAgents) {
|
|
445
|
-
experimental.enableAgents = true;
|
|
446
|
-
console.log(` ${chalk_1.default.green('\u2713')} Enabled experimental agents`);
|
|
447
|
-
}
|
|
448
|
-
}
|
|
397
|
+
const { settingsPath, settings, statuslineCommand } = (0, hooks_js_1.configureSettingsHooks)(targetDir, isGlobal);
|
|
449
398
|
return { settingsPath, settings, statuslineCommand, runtime };
|
|
450
399
|
}
|
|
451
|
-
/**
|
|
452
|
-
* Prompt for runtime selection (multi-select)
|
|
453
|
-
*/
|
|
454
|
-
async function promptRuntime() {
|
|
455
|
-
const selected = await (0, prompts_1.checkbox)({
|
|
456
|
-
message: 'Which runtime(s) would you like to install for?',
|
|
457
|
-
choices: [
|
|
458
|
-
{ name: 'Claude Code ' + chalk_1.default.dim('(~/.claude)'), value: 'claude', checked: true },
|
|
459
|
-
{ name: 'OpenCode ' + chalk_1.default.dim('(~/.config/opencode)') + ' — open source, free models', value: 'opencode' },
|
|
460
|
-
{ name: 'Gemini ' + chalk_1.default.dim('(~/.gemini)'), value: 'gemini' },
|
|
461
|
-
{ name: 'Codex ' + chalk_1.default.dim('(~/.codex)'), value: 'codex' },
|
|
462
|
-
],
|
|
463
|
-
validate: (choices) => choices.length > 0 || 'Please select at least one runtime',
|
|
464
|
-
});
|
|
465
|
-
return selected;
|
|
466
|
-
}
|
|
467
400
|
/**
|
|
468
401
|
* Prompt for install location
|
|
469
402
|
*/
|
|
470
|
-
async function promptLocation(
|
|
403
|
+
async function promptLocation() {
|
|
471
404
|
if (!process.stdin.isTTY) {
|
|
472
405
|
console.log(chalk_1.default.yellow('Non-interactive terminal detected, defaulting to global install') + '\n');
|
|
473
406
|
return true; // isGlobal
|
|
474
407
|
}
|
|
475
|
-
const
|
|
476
|
-
.map((r) => (0, shared_js_1.getGlobalDir)(r, explicitConfigDir).replace(os.homedir(), '~'))
|
|
477
|
-
.join(', ');
|
|
478
|
-
const localExamples = runtimes.map((r) => `./${(0, shared_js_1.getDirName)(r)}`).join(', ');
|
|
408
|
+
const globalPath = (0, shared_js_1.getGlobalDir)(explicitConfigDir).replace(os.homedir(), '~');
|
|
479
409
|
const choice = await (0, prompts_1.select)({
|
|
480
410
|
message: 'Where would you like to install?',
|
|
481
411
|
choices: [
|
|
482
412
|
{
|
|
483
|
-
name: 'Global ' + chalk_1.default.dim(`(${
|
|
413
|
+
name: 'Global ' + chalk_1.default.dim(`(${globalPath})`) + ' — available in all projects',
|
|
484
414
|
value: 'global',
|
|
485
415
|
},
|
|
486
416
|
{
|
|
487
|
-
name: 'Local ' + chalk_1.default.dim(
|
|
417
|
+
name: 'Local ' + chalk_1.default.dim('(./.claude)') + ' — this project only',
|
|
488
418
|
value: 'local',
|
|
489
419
|
},
|
|
490
420
|
],
|
|
@@ -492,7 +422,7 @@ async function promptLocation(runtimes) {
|
|
|
492
422
|
return choice === 'global';
|
|
493
423
|
}
|
|
494
424
|
/**
|
|
495
|
-
* Prompt whether to enable Agent Teams (
|
|
425
|
+
* Prompt whether to enable Agent Teams (experimental feature)
|
|
496
426
|
*/
|
|
497
427
|
async function promptAgentTeams() {
|
|
498
428
|
console.log();
|
|
@@ -506,35 +436,26 @@ async function promptAgentTeams() {
|
|
|
506
436
|
});
|
|
507
437
|
}
|
|
508
438
|
/**
|
|
509
|
-
* Install MAXSIM for
|
|
439
|
+
* Install MAXSIM for Claude Code
|
|
510
440
|
*/
|
|
511
|
-
async function
|
|
512
|
-
const
|
|
513
|
-
for (const runtime of runtimes) {
|
|
514
|
-
const result = await install(isGlobal, runtime);
|
|
515
|
-
results.push(result);
|
|
516
|
-
}
|
|
517
|
-
const statuslineRuntimes = ['claude', 'gemini'];
|
|
518
|
-
const primaryStatuslineResult = results.find((r) => statuslineRuntimes.includes(r.runtime));
|
|
441
|
+
async function installForClaude(isGlobal, isInteractive) {
|
|
442
|
+
const result = await install(isGlobal);
|
|
519
443
|
let shouldInstallStatusline = false;
|
|
520
|
-
if (
|
|
521
|
-
shouldInstallStatusline = await (0, hooks_js_1.handleStatusline)(
|
|
444
|
+
if (result.settings) {
|
|
445
|
+
shouldInstallStatusline = await (0, hooks_js_1.handleStatusline)(result.settings, isInteractive, forceStatusline);
|
|
522
446
|
}
|
|
523
|
-
// Prompt for Agent Teams
|
|
447
|
+
// Prompt for Agent Teams
|
|
524
448
|
let enableAgentTeams = false;
|
|
525
|
-
if (isInteractive
|
|
449
|
+
if (isInteractive) {
|
|
526
450
|
enableAgentTeams = await promptAgentTeams();
|
|
527
451
|
}
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
env['CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS'] = '1';
|
|
534
|
-
result.settings.env = env;
|
|
535
|
-
}
|
|
536
|
-
(0, hooks_js_1.finishInstall)(result.settingsPath, result.settings, result.statuslineCommand, useStatusline, result.runtime, isGlobal);
|
|
452
|
+
// Apply Agent Teams setting
|
|
453
|
+
if (enableAgentTeams && result.settings) {
|
|
454
|
+
const env = result.settings.env ?? {};
|
|
455
|
+
env['CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS'] = '1';
|
|
456
|
+
result.settings.env = env;
|
|
537
457
|
}
|
|
458
|
+
(0, hooks_js_1.finishInstall)(result.settingsPath, result.settings, result.statuslineCommand, shouldInstallStatusline, isGlobal);
|
|
538
459
|
}
|
|
539
460
|
// Main logic
|
|
540
461
|
// Subcommand routing — intercept before install flow
|
|
@@ -545,6 +466,35 @@ const subcommand = argv._[0];
|
|
|
545
466
|
await (0, dashboard_js_1.runDashboardSubcommand)(argv);
|
|
546
467
|
return;
|
|
547
468
|
}
|
|
469
|
+
// Skill management subcommands
|
|
470
|
+
if (subcommand === 'skill-list' || subcommand === 'skill-install' || subcommand === 'skill-update') {
|
|
471
|
+
const { cmdSkillList, cmdSkillInstall, cmdSkillUpdate } = await import('../core/skills.js');
|
|
472
|
+
const { CliOutput, writeOutput, CliError } = await import('../core/core.js');
|
|
473
|
+
const cwd = process.cwd();
|
|
474
|
+
try {
|
|
475
|
+
if (subcommand === 'skill-list') {
|
|
476
|
+
cmdSkillList(cwd, false);
|
|
477
|
+
}
|
|
478
|
+
else if (subcommand === 'skill-install') {
|
|
479
|
+
cmdSkillInstall(cwd, argv._[1], false);
|
|
480
|
+
}
|
|
481
|
+
else if (subcommand === 'skill-update') {
|
|
482
|
+
cmdSkillUpdate(cwd, argv._[1], false);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
catch (thrown) {
|
|
486
|
+
if (thrown instanceof CliOutput) {
|
|
487
|
+
writeOutput(thrown);
|
|
488
|
+
process.exit(0);
|
|
489
|
+
}
|
|
490
|
+
if (thrown instanceof CliError) {
|
|
491
|
+
console.error('Error: ' + thrown.message);
|
|
492
|
+
process.exit(1);
|
|
493
|
+
}
|
|
494
|
+
throw thrown;
|
|
495
|
+
}
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
548
498
|
if (hasGlobal && hasLocal) {
|
|
549
499
|
console.error(chalk_1.default.yellow('Cannot specify both --global and --local'));
|
|
550
500
|
process.exit(1);
|
|
@@ -558,32 +508,19 @@ const subcommand = argv._[0];
|
|
|
558
508
|
console.error(chalk_1.default.yellow('--uninstall requires --global or --local'));
|
|
559
509
|
process.exit(1);
|
|
560
510
|
}
|
|
561
|
-
|
|
562
|
-
for (const runtime of runtimes) {
|
|
563
|
-
(0, uninstall_js_1.uninstall)(hasGlobal, runtime, explicitConfigDir);
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
else if (selectedRuntimes.length > 0) {
|
|
567
|
-
if (!hasGlobal && !hasLocal) {
|
|
568
|
-
const isGlobal = await promptLocation(selectedRuntimes);
|
|
569
|
-
await installAllRuntimes(selectedRuntimes, isGlobal, true);
|
|
570
|
-
}
|
|
571
|
-
else {
|
|
572
|
-
await installAllRuntimes(selectedRuntimes, hasGlobal, false);
|
|
573
|
-
}
|
|
511
|
+
(0, uninstall_js_1.uninstall)(hasGlobal, explicitConfigDir);
|
|
574
512
|
}
|
|
575
513
|
else if (hasGlobal || hasLocal) {
|
|
576
|
-
await
|
|
514
|
+
await installForClaude(hasGlobal, false);
|
|
577
515
|
}
|
|
578
516
|
else {
|
|
579
517
|
if (!process.stdin.isTTY) {
|
|
580
|
-
console.log(chalk_1.default.yellow('Non-interactive terminal detected, defaulting to
|
|
581
|
-
await
|
|
518
|
+
console.log(chalk_1.default.yellow('Non-interactive terminal detected, defaulting to global install') + '\n');
|
|
519
|
+
await installForClaude(true, false);
|
|
582
520
|
}
|
|
583
521
|
else {
|
|
584
|
-
const
|
|
585
|
-
|
|
586
|
-
await installAllRuntimes(runtimes, isGlobal, true);
|
|
522
|
+
const isGlobal = await promptLocation();
|
|
523
|
+
await installForClaude(isGlobal, true);
|
|
587
524
|
}
|
|
588
525
|
}
|
|
589
526
|
})().catch((err) => {
|