@mr.dj2u/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/cli.d.ts +12 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +475 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/agent.d.ts +41 -0
  6. package/dist/commands/agent.d.ts.map +1 -0
  7. package/dist/commands/agent.js +661 -0
  8. package/dist/commands/agent.js.map +1 -0
  9. package/dist/commands/continue.d.ts +59 -0
  10. package/dist/commands/continue.d.ts.map +1 -0
  11. package/dist/commands/continue.js +336 -0
  12. package/dist/commands/continue.js.map +1 -0
  13. package/dist/commands/dev-tools.d.ts +14 -0
  14. package/dist/commands/dev-tools.d.ts.map +1 -0
  15. package/dist/commands/dev-tools.js +283 -0
  16. package/dist/commands/dev-tools.js.map +1 -0
  17. package/dist/commands/explain.d.ts +29 -0
  18. package/dist/commands/explain.d.ts.map +1 -0
  19. package/dist/commands/explain.js +216 -0
  20. package/dist/commands/explain.js.map +1 -0
  21. package/dist/commands/mcp-install.d.ts +28 -0
  22. package/dist/commands/mcp-install.d.ts.map +1 -0
  23. package/dist/commands/mcp-install.js +265 -0
  24. package/dist/commands/mcp-install.js.map +1 -0
  25. package/dist/commands/onboard.d.ts +71 -0
  26. package/dist/commands/onboard.d.ts.map +1 -0
  27. package/dist/commands/onboard.js +552 -0
  28. package/dist/commands/onboard.js.map +1 -0
  29. package/dist/commands/report.d.ts +12 -0
  30. package/dist/commands/report.d.ts.map +1 -0
  31. package/dist/commands/report.js +70 -0
  32. package/dist/commands/report.js.map +1 -0
  33. package/dist/commands/skills.d.ts +19 -0
  34. package/dist/commands/skills.d.ts.map +1 -0
  35. package/dist/commands/skills.js +81 -0
  36. package/dist/commands/skills.js.map +1 -0
  37. package/dist/commands/test-and-iterate.d.ts +9 -0
  38. package/dist/commands/test-and-iterate.d.ts.map +1 -0
  39. package/dist/commands/test-and-iterate.js +90 -0
  40. package/dist/commands/test-and-iterate.js.map +1 -0
  41. package/dist/continue.d.ts +3 -0
  42. package/dist/continue.d.ts.map +1 -0
  43. package/dist/continue.js +2 -0
  44. package/dist/continue.js.map +1 -0
  45. package/dist/project-memory.d.ts +58 -0
  46. package/dist/project-memory.d.ts.map +1 -0
  47. package/dist/project-memory.js +2161 -0
  48. package/dist/project-memory.js.map +1 -0
  49. package/package.json +64 -0
  50. package/templates/project/guidelines.md +88 -0
@@ -0,0 +1,265 @@
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import { spawn } from 'node:child_process';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { createRequire } from 'node:module';
6
+ import chalk from 'chalk';
7
+ export const SERVER_KEY = 'mds-dev-suite';
8
+ export const VSCODE_SERVER_KEY = 'mdsDevSuite';
9
+ export async function runMcpInstallCommand(argv) {
10
+ const client = argv.client ?? 'claude';
11
+ const scope = argv.scope ?? 'user';
12
+ const server = resolveServerInvocation(argv);
13
+ const dryRun = Boolean(argv.dryRun);
14
+ console.log(chalk.bold('mds mcp install'));
15
+ console.log(chalk.dim(`client: ${client}`));
16
+ console.log(chalk.dim(`scope: ${scope}`));
17
+ console.log(chalk.dim(`command: ${server.command} ${server.args.join(' ')}`));
18
+ console.log();
19
+ if (scope === 'user') {
20
+ await installUserScope(client, server, dryRun);
21
+ return;
22
+ }
23
+ const targetDir = path.resolve(argv.target ?? '.');
24
+ console.log(chalk.dim(`target: ${targetDir}`));
25
+ await installProjectScope(client, targetDir, server, dryRun);
26
+ }
27
+ async function installProjectScope(client, targetDir, server, dryRun) {
28
+ switch (client) {
29
+ case 'claude':
30
+ await writeJsonMcpConfig(path.join(targetDir, '.mcp.json'), server, dryRun);
31
+ printClaudeProjectFollowup(targetDir);
32
+ break;
33
+ case 'cursor':
34
+ await writeJsonMcpConfig(path.join(targetDir, '.cursor', 'mcp.json'), server, dryRun);
35
+ break;
36
+ case 'codex':
37
+ await writeCodexConfig(path.join(targetDir, '.codex', 'config.toml'), server, dryRun);
38
+ break;
39
+ case 'vscode':
40
+ await writeVscodeMcpConfig(path.join(targetDir, '.vscode', 'mcp.json'), server, dryRun);
41
+ break;
42
+ }
43
+ }
44
+ async function installUserScope(client, server, dryRun) {
45
+ const home = os.homedir();
46
+ switch (client) {
47
+ case 'claude': {
48
+ const filePath = path.join(home, '.claude.json');
49
+ await writeJsonMcpConfig(filePath, server, dryRun);
50
+ printClaudeUserFollowup();
51
+ break;
52
+ }
53
+ case 'cursor':
54
+ await writeJsonMcpConfig(path.join(home, '.cursor', 'mcp.json'), server, dryRun);
55
+ break;
56
+ case 'codex':
57
+ await writeCodexConfig(path.join(home, '.codex', 'config.toml'), server, dryRun);
58
+ break;
59
+ case 'vscode':
60
+ await installVscodeUserMcp(server, dryRun);
61
+ break;
62
+ }
63
+ }
64
+ export function resolveServerInvocation(argv) {
65
+ if (argv.command) {
66
+ const [command, ...args] = argv.command.split(/\s+/).filter(Boolean);
67
+ if (!command) {
68
+ throw new Error('mds mcp install --command was empty.');
69
+ }
70
+ return { command, args };
71
+ }
72
+ const serverPath = argv.serverPath ?? findLocalServerEntry();
73
+ if (serverPath) {
74
+ return { command: 'node', args: [serverPath] };
75
+ }
76
+ return { command: 'npx', args: ['-y', '@mr.dj2u/mcp-server'] };
77
+ }
78
+ function findLocalServerEntry() {
79
+ try {
80
+ const require = createRequire(import.meta.url);
81
+ return require.resolve('@mr.dj2u/mcp-server');
82
+ }
83
+ catch {
84
+ return undefined;
85
+ }
86
+ }
87
+ export async function writeMcpJsonToProject(targetDir) {
88
+ const server = resolveServerInvocation({});
89
+ const filePath = path.join(targetDir, '.mcp.json');
90
+ const existing = await readJsonIfExists(filePath);
91
+ const merged = existing ?? {};
92
+ const servers = isRecord(merged.mcpServers) ? { ...merged.mcpServers } : {};
93
+ if (servers[SERVER_KEY])
94
+ return;
95
+ servers[SERVER_KEY] = { command: server.command, args: server.args };
96
+ merged.mcpServers = servers;
97
+ await mkdir(path.dirname(filePath), { recursive: true });
98
+ await writeFile(filePath, `${JSON.stringify(merged, null, 2)}\n`, 'utf8');
99
+ }
100
+ export async function writeJsonMcpConfig(filePath, server, dryRun) {
101
+ const existing = await readJsonIfExists(filePath);
102
+ const merged = existing ?? {};
103
+ const servers = isRecord(merged.mcpServers) ? { ...merged.mcpServers } : {};
104
+ servers[SERVER_KEY] = {
105
+ command: server.command,
106
+ args: server.args,
107
+ };
108
+ merged.mcpServers = servers;
109
+ const json = `${JSON.stringify(merged, null, 2)}\n`;
110
+ if (dryRun) {
111
+ console.log(chalk.cyan('--dry-run output:'));
112
+ console.log(chalk.gray(`# would write ${filePath}`));
113
+ console.log(json);
114
+ return;
115
+ }
116
+ await mkdir(path.dirname(filePath), { recursive: true });
117
+ await writeFile(filePath, json, 'utf8');
118
+ console.log(chalk.green(`wrote ${filePath}`));
119
+ }
120
+ export async function writeCodexConfig(filePath, server, dryRun) {
121
+ const existing = (await readTextIfExists(filePath)) ?? '';
122
+ const cleaned = stripExistingCodexBlock(existing, SERVER_KEY);
123
+ const block = renderCodexBlock(SERVER_KEY, server);
124
+ const next = cleaned.length > 0 && !cleaned.endsWith('\n') ? `${cleaned}\n\n${block}` : `${cleaned}${block}`;
125
+ if (dryRun) {
126
+ console.log(chalk.cyan('--dry-run output:'));
127
+ console.log(chalk.gray(`# would write ${filePath}`));
128
+ console.log(next);
129
+ return;
130
+ }
131
+ await mkdir(path.dirname(filePath), { recursive: true });
132
+ await writeFile(filePath, next, 'utf8');
133
+ console.log(chalk.green(`wrote ${filePath}`));
134
+ }
135
+ export function renderCodexBlock(key, server) {
136
+ const argsLine = server.args.map((arg) => JSON.stringify(arg)).join(', ');
137
+ return [`[mcp_servers.${key}]`, `command = ${JSON.stringify(server.command)}`, `args = [${argsLine}]`, ''].join('\n');
138
+ }
139
+ export async function writeVscodeMcpConfig(filePath, server, dryRun) {
140
+ const existing = await readJsonIfExists(filePath);
141
+ const merged = existing ?? {};
142
+ const servers = isRecord(merged.servers) ? { ...merged.servers } : {};
143
+ servers[VSCODE_SERVER_KEY] = {
144
+ command: server.command,
145
+ args: server.args,
146
+ };
147
+ merged.servers = servers;
148
+ const json = `${JSON.stringify(merged, null, 2)}\n`;
149
+ if (dryRun) {
150
+ console.log(chalk.cyan('--dry-run output:'));
151
+ console.log(chalk.gray(`# would write ${filePath}`));
152
+ console.log(json);
153
+ return;
154
+ }
155
+ await mkdir(path.dirname(filePath), { recursive: true });
156
+ await writeFile(filePath, json, 'utf8');
157
+ console.log(chalk.green(`wrote ${filePath}`));
158
+ }
159
+ export async function installVscodeUserMcp(server, dryRun) {
160
+ const payload = buildVscodeAddMcpPayload(server);
161
+ const renderedCommand = renderVscodeAddMcpCommand(payload);
162
+ if (dryRun) {
163
+ printVscodeUserMcpInstructions(renderedCommand, 'dry-run');
164
+ return;
165
+ }
166
+ if (!(await commandExists('code'))) {
167
+ printVscodeUserMcpInstructions(renderedCommand, 'missing-code-command');
168
+ return;
169
+ }
170
+ const result = await runCommand('code', ['--add-mcp', JSON.stringify(payload)], 'inherit');
171
+ if (result !== 0) {
172
+ console.log(chalk.yellow(`VS Code returned exit code ${result}. If setup did not complete, run manually:`));
173
+ console.log(` ${renderedCommand}`);
174
+ }
175
+ }
176
+ export function buildVscodeAddMcpPayload(server) {
177
+ return {
178
+ name: VSCODE_SERVER_KEY,
179
+ command: server.command,
180
+ args: server.args,
181
+ };
182
+ }
183
+ export function renderVscodeAddMcpCommand(payload) {
184
+ return `code --add-mcp ${JSON.stringify(JSON.stringify(payload))}`;
185
+ }
186
+ export function stripExistingCodexBlock(content, key) {
187
+ const header = `[mcp_servers.${key}]`;
188
+ const start = content.indexOf(header);
189
+ if (start === -1) {
190
+ return content;
191
+ }
192
+ const after = content.slice(start);
193
+ const nextHeader = after.search(/\n\[[^\]]+]/);
194
+ const end = nextHeader === -1 ? content.length : start + nextHeader + 1;
195
+ const before = content.slice(0, start).replace(/\n+$/, '');
196
+ const tail = content.slice(end).replace(/^\n+/, '');
197
+ return [before, tail].filter(Boolean).join('\n\n');
198
+ }
199
+ function printClaudeProjectFollowup(targetDir) {
200
+ console.log();
201
+ console.log(chalk.bold('Next steps for Claude Code (project scope):'));
202
+ console.log(` 1. Open ${targetDir} as a workspace in Claude Code (or restart Claude Code if already open).`);
203
+ console.log(' 2. Run /mcp to confirm the mds-dev-suite server is listed.');
204
+ console.log(' 3. Invoke the prompt: /mcp__mds-dev-suite__onboard_new_expo_app');
205
+ }
206
+ function printClaudeUserFollowup() {
207
+ console.log();
208
+ console.log(chalk.bold('Next steps for Claude Code (user scope):'));
209
+ console.log(' 1. Restart Claude Code so it picks up ~/.claude.json.');
210
+ console.log(' 2. From any workspace, run /mcp to confirm mds-dev-suite is listed.');
211
+ console.log(' 3. Available prompts:');
212
+ console.log(' /mcp__mds-dev-suite__create_expo_super_stack (run from a parent dir to create a new app)');
213
+ console.log(' /mcp__mds-dev-suite__onboard_new_expo_app (run inside an existing Expo app folder)');
214
+ }
215
+ function printVscodeUserMcpInstructions(command, reason) {
216
+ console.log();
217
+ console.log(chalk.bold('Next steps for VS Code Copilot (user scope):'));
218
+ if (reason === 'missing-code-command') {
219
+ console.log(chalk.yellow('The `code` command was not found on PATH, so MDS did not mutate VS Code user MCP settings.'));
220
+ }
221
+ else {
222
+ console.log(chalk.cyan('--dry-run output:'));
223
+ }
224
+ console.log('Run this command after installing/enabling the VS Code `code` command:');
225
+ console.log(` ${command}`);
226
+ }
227
+ async function readJsonIfExists(filePath) {
228
+ const raw = await readTextIfExists(filePath);
229
+ if (raw === null) {
230
+ return null;
231
+ }
232
+ try {
233
+ const parsed = JSON.parse(raw);
234
+ return isRecord(parsed) ? parsed : null;
235
+ }
236
+ catch {
237
+ return null;
238
+ }
239
+ }
240
+ async function readTextIfExists(filePath) {
241
+ try {
242
+ return await readFile(filePath, 'utf8');
243
+ }
244
+ catch {
245
+ return null;
246
+ }
247
+ }
248
+ function isRecord(value) {
249
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
250
+ }
251
+ async function commandExists(command) {
252
+ const lookup = process.platform === 'win32' ? 'where' : 'which';
253
+ return (await runCommand(lookup, [command], 'ignore')) === 0;
254
+ }
255
+ async function runCommand(command, args, stdio) {
256
+ return new Promise((resolve) => {
257
+ const child = spawn(command, args, {
258
+ stdio,
259
+ shell: process.platform === 'win32',
260
+ });
261
+ child.on('error', () => resolve(1));
262
+ child.on('close', (code) => resolve(code));
263
+ });
264
+ }
265
+ //# sourceMappingURL=mcp-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-install.js","sourceRoot":"","sources":["../../src/commands/mcp-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import type { ExpoServerAdapter, OnboardAnswers } from '../project-memory.js';
2
+ export interface OnboardArgv {
3
+ project?: string;
4
+ yes?: boolean;
5
+ force?: boolean;
6
+ guidelinesTemplate?: boolean;
7
+ guidelinesTemplatePath?: string;
8
+ rich?: boolean;
9
+ appName?: string;
10
+ audience?: string;
11
+ coreFlows?: string;
12
+ dataNeeds?: string;
13
+ deploymentTarget?: string;
14
+ defaults?: string | string[];
15
+ advancedSetup?: boolean;
16
+ createExpoComponents?: boolean;
17
+ latestExpoSdk?: boolean;
18
+ platforms?: string | string[];
19
+ firstPlatform?: string;
20
+ platformStrategy?: 'folders' | 'files-only';
21
+ appDirectory?: 'src' | 'root';
22
+ platformLayouts?: 'shared' | 'platform-specific';
23
+ webOutput?: 'static' | 'server' | 'spa' | 'none';
24
+ deployedServer?: 'standard-expo' | 'custom' | 'none';
25
+ expoServerAdapter?: ExpoServerAdapter;
26
+ customBackend?: boolean;
27
+ customBackendEntry?: string;
28
+ expoUi?: boolean;
29
+ expoNativeTabs?: boolean;
30
+ easSelected?: boolean;
31
+ easUses?: string | string[];
32
+ dataStart?: 'local' | 'supabase';
33
+ testToMain?: boolean;
34
+ }
35
+ export interface OnboardPlan {
36
+ answers: OnboardAnswers;
37
+ guidelinesTemplate: boolean;
38
+ guidelinesTemplatePath?: string;
39
+ richBoilerplate: boolean;
40
+ }
41
+ type ServerChoice = OnboardAnswers['deployedServer'];
42
+ export interface ServerPromptPlan {
43
+ message: string;
44
+ defaultValue: ServerChoice;
45
+ shouldAsk: boolean;
46
+ choices: ServerChoice[];
47
+ explanation: string;
48
+ }
49
+ export declare const OTHER_DATA_NEEDS = "__mds_other_data_needs__";
50
+ export declare const DATA_NEED_OPTIONS: readonly ["Local UI/app state", "User accounts/authentication", "Backend database records", "File/image uploads or storage", "External APIs/integrations", "Analytics/events", "Payments/subscriptions", "Realtime/collaboration", "Push/email notifications", "Offline sync/cache", "Admin/moderation tools"];
51
+ export declare const PROJECT_INFO_EXPLANATION = "project/info.md is the product brief for the app: purpose, users, goals, features, data, platforms, monetization, team context, release plan, and questions to revisit. Agents use it to avoid guessing what to build.";
52
+ export declare const PROJECT_STYLE_EXPLANATION = "project/style.md is only for visual direction: brand references, colors, typography, spacing, motion, accessibility, and style questions. Technical rules belong in project/guidelines.md.";
53
+ export declare const DATA_START_EXPLANATION = "Local dummy data is fastest for early UI work. Supabase from the start is better when auth, synced data, storage, or real backend tables are already central to the product.";
54
+ export declare const EAS_EXPLANATION = "EAS is Expo Application Services. You might use it for cloud native builds, app store submission, update channels, or hosting. This question records future intent; it does not set EAS up.";
55
+ export declare const TEST_TO_MAIN_EXPLANATION = "Test-to-main means feature branches merge into a test branch first, using staging data and PR checks. Only validated work is promoted from test to main/production.";
56
+ export declare const SERVER_OUTPUT_EXPLANATION = "Expo Router API routes require Expo web output set to server. Static and SPA exports can still call Supabase, external APIs, serverless functions, or a separate custom backend, but they cannot host Expo Router API routes inside the static export.";
57
+ export declare const AGENT_DERIVED_CORE_FLOWS = "Agent should derive the first core user flows from project/info.md during intake.";
58
+ export declare const SUPER_STACK_ONBOARDING_INTRO = "Super Stack onboarding by Mr. DJ";
59
+ export declare const SUPER_STACK_ONBOARDING_NOTE_TITLE = "Let's plan the app";
60
+ export declare const SUPER_STACK_ONBOARDING_NOTE = "We will spend time defining the application and business now so the generated project memory gives agents real context.";
61
+ export declare const SUPER_STACK_SUCCESS_MESSAGE = "You did it! You and your app are set up for success by completing this extensive onboarding. You're amazing. Mr. DJ thanks you for using this tool and any feedback can be given at MDS@DavidJGrimsley.com or by raising an issue on Github at github.com/mds-dev-suite/issues.";
62
+ export declare function runOnboardCommand(argv: OnboardArgv): Promise<void>;
63
+ export declare function collectOnboardPlan(argv: OnboardArgv, projectPath?: string): Promise<OnboardPlan>;
64
+ export declare function defaultOnboardPlan(argv: OnboardArgv, projectPath?: string): OnboardPlan;
65
+ export declare function validateRequiredInput(value: string, visibleDefault?: string): string | undefined;
66
+ export declare function getServerPrompt(webOutput: OnboardAnswers['webOutput'], hasNativeTarget: boolean, fallback: ServerChoice): ServerPromptPlan;
67
+ export declare function deriveDefaults(rawDefaults: string | string[] | undefined, fallback: string[], dataStart: OnboardAnswers['dataStart'], testToMainSafeguards: boolean): string[];
68
+ export declare function formatDataNeedsSelection(selected: string[], customNotes?: string): string;
69
+ export declare function deriveDeployedServer(webOutput: OnboardAnswers['webOutput'], expoServerAdapter: ExpoServerAdapter, customBackend: boolean, explicit?: ServerChoice): ServerChoice;
70
+ export {};
71
+ //# sourceMappingURL=onboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"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"}