@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,70 @@
1
+ import { writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import chalk from 'chalk';
4
+ import { runDoctor } from '@mr.dj2u/doctor';
5
+ export async function runReportCommand(argv) {
6
+ const mode = normalizeMode(argv.mode);
7
+ const projectPath = path.resolve(argv.path ?? '.');
8
+ const report = await runDoctor(projectPath, {
9
+ mode,
10
+ runScripts: argv.scripts,
11
+ timeoutMs: argv.timeoutMs,
12
+ });
13
+ const rendered = argv.json ? JSON.stringify(report, null, 2) : renderMarkdownReport(report);
14
+ if (argv.output) {
15
+ const outputPath = path.resolve(argv.output);
16
+ await writeFile(outputPath, `${rendered}\n`, 'utf8');
17
+ console.log(chalk.green(`wrote ${outputPath}`));
18
+ }
19
+ else {
20
+ console.log(rendered);
21
+ }
22
+ if (report.summary.errors > 0) {
23
+ process.exitCode = 1;
24
+ }
25
+ }
26
+ export function renderMarkdownReport(report) {
27
+ return [
28
+ '# MDS Doctor Report',
29
+ '',
30
+ `- Project: ${report.projectPath}`,
31
+ `- Mode: ${report.mode}`,
32
+ `- Timestamp: ${report.timestamp}`,
33
+ `- Summary: ${report.summary.errors} errors, ${report.summary.warnings} warnings, ${report.summary.passed} passed, ${report.summary.skipped} skipped`,
34
+ '',
35
+ '## Findings',
36
+ '',
37
+ ...renderFindings(report.checks),
38
+ ].join('\n');
39
+ }
40
+ function renderFindings(checks) {
41
+ if (checks.length === 0) {
42
+ return ['No checks ran.'];
43
+ }
44
+ const lines = [];
45
+ for (const check of checks) {
46
+ lines.push(`### ${label(check)} ${check.name}`);
47
+ lines.push('');
48
+ lines.push(check.message);
49
+ if (check.details) {
50
+ lines.push('');
51
+ lines.push('```json');
52
+ lines.push(JSON.stringify(check.details, null, 2));
53
+ lines.push('```');
54
+ }
55
+ lines.push('');
56
+ }
57
+ return lines;
58
+ }
59
+ function label(check) {
60
+ return {
61
+ pass: 'PASS',
62
+ warn: 'WARN',
63
+ error: 'FAIL',
64
+ skip: 'SKIP',
65
+ }[check.status];
66
+ }
67
+ function normalizeMode(value) {
68
+ return value === 'ci' || value === 'full' || value === 'fast' ? value : 'fast';
69
+ }
70
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface SkillsListArgv {
2
+ query?: string;
3
+ json?: boolean;
4
+ }
5
+ export interface SkillsShowArgv {
6
+ id?: string;
7
+ json?: boolean;
8
+ }
9
+ export interface SkillSummary {
10
+ id: string;
11
+ name: string;
12
+ description: string;
13
+ tags: string[];
14
+ uri: string;
15
+ }
16
+ export declare function runSkillsListCommand(argv: SkillsListArgv): Promise<void>;
17
+ export declare function runSkillsShowCommand(argv: SkillsShowArgv): Promise<void>;
18
+ export declare function listSkillSummaries(query?: string): SkillSummary[];
19
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB9E;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB9E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAKjE"}
@@ -0,0 +1,81 @@
1
+ import chalk from 'chalk';
2
+ import { getSkill, listKnowledgeResources } from '@mr.dj2u/knowledge';
3
+ export async function runSkillsListCommand(argv) {
4
+ const skills = listSkillSummaries(argv.query);
5
+ if (argv.json) {
6
+ console.log(JSON.stringify(skills, null, 2));
7
+ return;
8
+ }
9
+ console.log(chalk.bold('mds skills list'));
10
+ if (argv.query) {
11
+ console.log(chalk.dim(`filter: ${argv.query}`));
12
+ }
13
+ console.log();
14
+ if (skills.length === 0) {
15
+ console.log(chalk.yellow('No bundled skills matched.'));
16
+ return;
17
+ }
18
+ for (const skill of skills) {
19
+ console.log(`${chalk.cyan(skill.id)} ${chalk.bold(skill.name)}`);
20
+ console.log(` ${skill.description}`);
21
+ console.log(chalk.dim(` tags: ${skill.tags.join(', ')}`));
22
+ }
23
+ }
24
+ export async function runSkillsShowCommand(argv) {
25
+ if (!argv.id) {
26
+ throw new Error('mds skills show requires a skill id.');
27
+ }
28
+ const skill = await getSkill(argv.id);
29
+ if (!skill) {
30
+ process.exitCode = 1;
31
+ console.log(chalk.red(`Unknown skill: ${argv.id}`));
32
+ printClosestSkills(argv.id);
33
+ return;
34
+ }
35
+ if (argv.json) {
36
+ console.log(JSON.stringify(skill, null, 2));
37
+ return;
38
+ }
39
+ console.log(chalk.bold(skill.name));
40
+ console.log(chalk.dim(skill.uri));
41
+ console.log();
42
+ console.log(skill.content);
43
+ }
44
+ export function listSkillSummaries(query) {
45
+ const normalizedQuery = query?.trim().toLowerCase();
46
+ return listKnowledgeResources('skill')
47
+ .filter((resource) => (normalizedQuery ? resourceMatches(resource, normalizedQuery) : true))
48
+ .map(skillSummaryFromResource);
49
+ }
50
+ function printClosestSkills(query) {
51
+ const matches = listSkillSummaries(query).slice(0, 5);
52
+ if (matches.length === 0) {
53
+ console.log(chalk.gray('Run `mds skills list` to see available bundled skills.'));
54
+ return;
55
+ }
56
+ console.log(chalk.gray('Closest bundled skills:'));
57
+ for (const match of matches) {
58
+ console.log(chalk.gray(` ${match.id} - ${match.name}`));
59
+ }
60
+ }
61
+ function skillSummaryFromResource(resource) {
62
+ return {
63
+ id: resource.id,
64
+ name: resource.name,
65
+ description: resource.description,
66
+ tags: resource.keywords,
67
+ uri: resource.uri,
68
+ };
69
+ }
70
+ function resourceMatches(resource, normalizedQuery) {
71
+ return [
72
+ resource.id,
73
+ resource.name,
74
+ resource.description,
75
+ ...('keywords' in resource ? resource.keywords : resource.tags),
76
+ ]
77
+ .join(' ')
78
+ .toLowerCase()
79
+ .includes(normalizedQuery);
80
+ }
81
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface ShipArgv {
2
+ branch?: string;
3
+ base?: string;
4
+ feature?: string;
5
+ prTitle?: string;
6
+ execute?: boolean;
7
+ }
8
+ export declare function runShipCommand(argv: ShipArgv): Promise<void>;
9
+ //# sourceMappingURL=test-and-iterate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-and-iterate.d.ts","sourceRoot":"","sources":["../../src/commands/test-and-iterate.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAQD,wBAAsB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ClE"}
@@ -0,0 +1,90 @@
1
+ import { spawn } from 'node:child_process';
2
+ import chalk from 'chalk';
3
+ import { runDoctor } from '@mr.dj2u/doctor';
4
+ export async function runShipCommand(argv) {
5
+ const base = argv.base ?? 'test';
6
+ const branch = argv.branch ?? (await detectCurrentBranch()) ?? '<current-branch>';
7
+ const title = argv.prTitle ?? argv.feature ?? branch;
8
+ console.log(chalk.bold('mds ship/test-and-iterate workflow'));
9
+ console.log(`Branch: ${branch}`);
10
+ console.log(`Base: ${base}`);
11
+ console.log(`PR title: ${title}`);
12
+ console.log();
13
+ const status = await runCommand('git', ['status', '--short']);
14
+ const remote = await runCommand('git', ['remote', 'get-url', 'origin']);
15
+ const existingPr = await findExistingPr(branch);
16
+ console.log(chalk.bold('Repository snapshot'));
17
+ console.log(status.stdout.trim() ? status.stdout.trim() : 'Working tree is clean.');
18
+ console.log(`origin: ${remote.stdout.trim() || 'not detected'}`);
19
+ console.log(`existing PR: ${existingPr || 'not detected'}`);
20
+ console.log();
21
+ if (!argv.execute) {
22
+ printDryRun(branch, base, title);
23
+ return;
24
+ }
25
+ console.log(chalk.bold('Execute gate enabled'));
26
+ console.log('Running mds doctor --ci before any git mutation.');
27
+ const report = await runDoctor('.', { mode: 'ci' });
28
+ console.log(`${report.summary.errors} errors | ${report.summary.warnings} warnings | ` +
29
+ `${report.summary.passed} passed | ${report.summary.skipped} skipped`);
30
+ if (report.summary.errors > 0) {
31
+ process.exitCode = 1;
32
+ console.log(chalk.red('Doctor failed. Fix errors before staging, pushing, or opening a PR.'));
33
+ return;
34
+ }
35
+ console.log();
36
+ console.log('Doctor passed. Mutating git steps remain intentionally manual in Phase 1:');
37
+ printDryRun(branch, base, title);
38
+ }
39
+ function printDryRun(branch, base, title) {
40
+ console.log(chalk.bold('Planned steps'));
41
+ console.log('1. Run mds doctor --ci.');
42
+ console.log('2. Review git status and stage only intentional changes.');
43
+ console.log(`3. Commit changes for "${title}".`);
44
+ console.log(`4. Push ${branch}.`);
45
+ console.log(`5. Open or update a PR into ${base} with gh CLI.`);
46
+ console.log('6. Poll statusCheckRollup, fix failures, rerun Doctor, and push again.');
47
+ console.log(`7. Merge into ${base} only after checks pass.`);
48
+ }
49
+ async function detectCurrentBranch() {
50
+ const result = await runCommand('git', ['branch', '--show-current']);
51
+ return result.code === 0 && result.stdout.trim() ? result.stdout.trim() : null;
52
+ }
53
+ async function findExistingPr(branch) {
54
+ if (branch.startsWith('<')) {
55
+ return null;
56
+ }
57
+ const result = await runCommand('gh', [
58
+ 'pr',
59
+ 'view',
60
+ branch,
61
+ '--json',
62
+ 'number,url,state',
63
+ '--template',
64
+ '{{.number}} {{.state}} {{.url}}',
65
+ ]);
66
+ return result.code === 0 && result.stdout.trim() ? result.stdout.trim() : null;
67
+ }
68
+ function runCommand(command, args) {
69
+ return new Promise((resolve) => {
70
+ const child = spawn(command, args, {
71
+ shell: false,
72
+ windowsHide: true,
73
+ });
74
+ let stdout = '';
75
+ let stderr = '';
76
+ child.stdout?.on('data', (chunk) => {
77
+ stdout += chunk.toString();
78
+ });
79
+ child.stderr?.on('data', (chunk) => {
80
+ stderr += chunk.toString();
81
+ });
82
+ child.on('error', (error) => {
83
+ resolve({ code: 1, stdout, stderr: `${stderr}\n${error.message}`.trim() });
84
+ });
85
+ child.on('close', (code) => {
86
+ resolve({ code, stdout, stderr });
87
+ });
88
+ });
89
+ }
90
+ //# sourceMappingURL=test-and-iterate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-and-iterate.js","sourceRoot":"","sources":["../../src/commands/test-and-iterate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { buildContinueSessionBrief, chooseRecommendation, renderContinueSessionBrief, runContinueCommand, } from './commands/continue.js';
2
+ export type { ContinueArgv, ContinueRecommendation, ContinueSessionBrief, GitSnapshot, MarkerHit, TodoItem, } from './commands/continue.js';
3
+ //# sourceMappingURL=continue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continue.d.ts","sourceRoot":"","sources":["../src/continue.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,EACX,SAAS,EACT,QAAQ,GACT,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { buildContinueSessionBrief, chooseRecommendation, renderContinueSessionBrief, runContinueCommand, } from './commands/continue.js';
2
+ //# sourceMappingURL=continue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continue.js","sourceRoot":"","sources":["../src/continue.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,58 @@
1
+ export type DataStart = 'local' | 'supabase';
2
+ export type AppDirectory = 'src' | 'root';
3
+ export type PlatformLayoutMode = 'shared' | 'platform-specific';
4
+ export type ExpoServerAdapter = 'eas' | 'express' | 'bun' | 'other' | 'none';
5
+ export interface OnboardAnswers {
6
+ appName: string;
7
+ audience: string;
8
+ coreFlows: string;
9
+ dataNeeds: string;
10
+ deploymentTarget: string;
11
+ advancedPackageSetup: boolean;
12
+ includeCreateExpoComponents: boolean;
13
+ useLatestExpoSdk: boolean;
14
+ targetPlatforms: string[];
15
+ firstTargetPlatform: string;
16
+ platformFileStrategy: 'folders' | 'files-only';
17
+ webOutput: 'static' | 'server' | 'spa' | 'none';
18
+ deployedServer: 'standard-expo' | 'custom' | 'none';
19
+ expoServerAdapter: ExpoServerAdapter;
20
+ customBackend: boolean;
21
+ customBackendEntry: string;
22
+ usesExpoUi: boolean;
23
+ usesExpoNativeTabs: boolean;
24
+ easUses: string[];
25
+ projectInfoReady: boolean;
26
+ projectStyleReady: boolean;
27
+ appDirectory: AppDirectory;
28
+ platformLayoutMode: PlatformLayoutMode;
29
+ dataStart: DataStart;
30
+ testToMainSafeguards: boolean;
31
+ defaults: string[];
32
+ }
33
+ export interface ProjectScaffoldOptions {
34
+ force?: boolean;
35
+ guidelinesTemplate?: boolean;
36
+ guidelinesTemplatePath?: string;
37
+ manageUniwind?: boolean;
38
+ richBoilerplate?: boolean;
39
+ }
40
+ export interface WriteResult {
41
+ filePath: string;
42
+ wrote: boolean;
43
+ }
44
+ interface RichBoilerplateOptions {
45
+ manageUniwind: boolean;
46
+ }
47
+ export declare function scaffoldProjectMemory(projectPath: string, answers: OnboardAnswers, options?: ProjectScaffoldOptions): Promise<WriteResult[]>;
48
+ export declare function scaffoldRichBoilerplate(projectPath: string, answers: OnboardAnswers, force: boolean, options?: RichBoilerplateOptions): Promise<WriteResult[]>;
49
+ export declare function renderInfo(projectPath: string, answers: OnboardAnswers, existingInfo?: string | null): string;
50
+ export declare function renderTodo(answers: OnboardAnswers): string;
51
+ export declare function renderStyle(answers: OnboardAnswers, existingStyle?: string | null): string;
52
+ export declare function renderGuidelines(answers: OnboardAnswers): string;
53
+ export declare function renderGuidelinesTemplate(answers: OnboardAnswers, templatePath?: string): Promise<string>;
54
+ export declare function renderAgentInstructions(answers: OnboardAnswers): string;
55
+ export declare function renderClaudeMd(answers: OnboardAnswers): string;
56
+ export declare function renderIntakeAgentHandoff(answers: OnboardAnswers): string;
57
+ export {};
58
+ //# sourceMappingURL=project-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-memory.d.ts","sourceRoot":"","sources":["../src/project-memory.ts"],"names":[],"mappings":"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"}