@millstone/synapse-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 (103) hide show
  1. package/README.md +135 -0
  2. package/bin/synapse.js +3 -0
  3. package/dist/commands/eject.d.ts +19 -0
  4. package/dist/commands/eject.d.ts.map +1 -0
  5. package/dist/commands/eject.js +146 -0
  6. package/dist/commands/eject.js.map +1 -0
  7. package/dist/commands/fetch-reference.d.ts +19 -0
  8. package/dist/commands/fetch-reference.d.ts.map +1 -0
  9. package/dist/commands/fetch-reference.js +93 -0
  10. package/dist/commands/fetch-reference.js.map +1 -0
  11. package/dist/commands/format.d.ts +26 -0
  12. package/dist/commands/format.d.ts.map +1 -0
  13. package/dist/commands/format.js +126 -0
  14. package/dist/commands/format.js.map +1 -0
  15. package/dist/commands/generate-pdf.d.ts +19 -0
  16. package/dist/commands/generate-pdf.d.ts.map +1 -0
  17. package/dist/commands/generate-pdf.js +140 -0
  18. package/dist/commands/generate-pdf.js.map +1 -0
  19. package/dist/commands/index.d.ts +17 -0
  20. package/dist/commands/index.d.ts.map +1 -0
  21. package/dist/commands/index.js +26 -0
  22. package/dist/commands/index.js.map +1 -0
  23. package/dist/commands/init.d.ts +58 -0
  24. package/dist/commands/init.d.ts.map +1 -0
  25. package/dist/commands/init.js +234 -0
  26. package/dist/commands/init.js.map +1 -0
  27. package/dist/commands/migrate.d.ts +29 -0
  28. package/dist/commands/migrate.d.ts.map +1 -0
  29. package/dist/commands/migrate.js +297 -0
  30. package/dist/commands/migrate.js.map +1 -0
  31. package/dist/commands/scaffold.d.ts +24 -0
  32. package/dist/commands/scaffold.d.ts.map +1 -0
  33. package/dist/commands/scaffold.js +244 -0
  34. package/dist/commands/scaffold.js.map +1 -0
  35. package/dist/commands/update.d.ts +25 -0
  36. package/dist/commands/update.d.ts.map +1 -0
  37. package/dist/commands/update.js +253 -0
  38. package/dist/commands/update.js.map +1 -0
  39. package/dist/commands/validate.d.ts +37 -0
  40. package/dist/commands/validate.d.ts.map +1 -0
  41. package/dist/commands/validate.js +526 -0
  42. package/dist/commands/validate.js.map +1 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +277 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/lib/bodyRules.d.ts +70 -0
  48. package/dist/lib/bodyRules.d.ts.map +1 -0
  49. package/dist/lib/bodyRules.js +711 -0
  50. package/dist/lib/bodyRules.js.map +1 -0
  51. package/dist/lib/config.d.ts +49 -0
  52. package/dist/lib/config.d.ts.map +1 -0
  53. package/dist/lib/config.js +91 -0
  54. package/dist/lib/config.js.map +1 -0
  55. package/dist/lib/git.d.ts +99 -0
  56. package/dist/lib/git.d.ts.map +1 -0
  57. package/dist/lib/git.js +266 -0
  58. package/dist/lib/git.js.map +1 -0
  59. package/dist/lib/graph.d.ts +6 -0
  60. package/dist/lib/graph.d.ts.map +1 -0
  61. package/dist/lib/graph.js +6 -0
  62. package/dist/lib/graph.js.map +1 -0
  63. package/dist/lib/homepage.d.ts +10 -0
  64. package/dist/lib/homepage.d.ts.map +1 -0
  65. package/dist/lib/homepage.js +172 -0
  66. package/dist/lib/homepage.js.map +1 -0
  67. package/dist/lib/markdown.d.ts +107 -0
  68. package/dist/lib/markdown.d.ts.map +1 -0
  69. package/dist/lib/markdown.js +318 -0
  70. package/dist/lib/markdown.js.map +1 -0
  71. package/dist/lib/mode-detection.d.ts +10 -0
  72. package/dist/lib/mode-detection.d.ts.map +1 -0
  73. package/dist/lib/mode-detection.js +29 -0
  74. package/dist/lib/mode-detection.js.map +1 -0
  75. package/dist/lib/naming.d.ts +47 -0
  76. package/dist/lib/naming.d.ts.map +1 -0
  77. package/dist/lib/naming.js +403 -0
  78. package/dist/lib/naming.js.map +1 -0
  79. package/dist/lib/schemas.d.ts +38 -0
  80. package/dist/lib/schemas.d.ts.map +1 -0
  81. package/dist/lib/schemas.js +248 -0
  82. package/dist/lib/schemas.js.map +1 -0
  83. package/dist/lib/templateLint.d.ts +21 -0
  84. package/dist/lib/templateLint.d.ts.map +1 -0
  85. package/dist/lib/templateLint.js +243 -0
  86. package/dist/lib/templateLint.js.map +1 -0
  87. package/dist/lib/templates.d.ts +53 -0
  88. package/dist/lib/templates.d.ts.map +1 -0
  89. package/dist/lib/templates.js +128 -0
  90. package/dist/lib/templates.js.map +1 -0
  91. package/dist/lib/tracking.d.ts +52 -0
  92. package/dist/lib/tracking.d.ts.map +1 -0
  93. package/dist/lib/tracking.js +135 -0
  94. package/dist/lib/tracking.js.map +1 -0
  95. package/dist/lib/types.generated.d.ts +54 -0
  96. package/dist/lib/types.generated.d.ts.map +1 -0
  97. package/dist/lib/types.generated.js +144 -0
  98. package/dist/lib/types.generated.js.map +1 -0
  99. package/dist/lib/validate-plugins.d.ts +22 -0
  100. package/dist/lib/validate-plugins.d.ts.map +1 -0
  101. package/dist/lib/validate-plugins.js +851 -0
  102. package/dist/lib/validate-plugins.js.map +1 -0
  103. package/package.json +85 -0
@@ -0,0 +1,140 @@
1
+ import fsExtra from 'fs-extra';
2
+ import * as path from 'path';
3
+ import * as yaml from 'js-yaml';
4
+ import { marked } from 'marked';
5
+ import { chromium } from 'playwright-chromium';
6
+ import { registerDefaultHelpers } from '../lib/templates.js';
7
+ import { loadSchema, validateFrontmatter } from '../lib/schemas.js';
8
+ import { isDocType } from '../lib/types.generated.js';
9
+ const fs = fsExtra;
10
+ let chalk;
11
+ async function getChalk() {
12
+ if (!chalk) {
13
+ try {
14
+ chalk = (await import('chalk')).default;
15
+ }
16
+ catch {
17
+ chalk = {
18
+ green: (str) => str,
19
+ red: (str) => str,
20
+ yellow: (str) => str,
21
+ blue: (str) => str,
22
+ };
23
+ }
24
+ }
25
+ return chalk;
26
+ }
27
+ export async function generatePdf(options) {
28
+ const c = await getChalk();
29
+ registerDefaultHelpers();
30
+ // Load markdown file with frontmatter
31
+ console.log(c.blue(`šŸ“„ Loading data from ${options.input}`));
32
+ const fileContent = await fs.readFile(options.input, 'utf-8');
33
+ // Parse frontmatter and body
34
+ const frontmatterRegex = /^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/;
35
+ const match = fileContent.match(frontmatterRegex);
36
+ if (!match) {
37
+ throw new Error('Invalid markdown file: missing frontmatter');
38
+ }
39
+ const frontmatterYaml = match[1];
40
+ const markdownBody = match[2].trim();
41
+ const data = yaml.load(frontmatterYaml);
42
+ // Validate data against schema
43
+ if (options.validate !== false) {
44
+ const docType = data.type;
45
+ if (!docType) {
46
+ throw new Error('Document type not specified in frontmatter');
47
+ }
48
+ if (!isDocType(docType)) {
49
+ throw new Error(`Invalid document type: ${docType}`);
50
+ }
51
+ console.log(c.blue(`āœ“ Validating against ${docType} schema`));
52
+ const schema = await loadSchema(docType);
53
+ const validation = validateFrontmatter(data, schema);
54
+ if (!validation.valid) {
55
+ console.log(c.yellow('āš ļø Validation warnings:'));
56
+ validation.errors?.forEach(error => {
57
+ console.log(c.yellow(` - ${error.path}: ${error.message}`));
58
+ });
59
+ throw new Error('Schema validation failed');
60
+ }
61
+ }
62
+ // Convert markdown to HTML
63
+ console.log(c.blue('šŸ”„ Converting markdown to HTML'));
64
+ const htmlContent = await marked(markdownBody);
65
+ // Wrap in letterhead
66
+ const letterheadPath = path.resolve(process.cwd(), 'tools/pdf/letterhead.html');
67
+ const letterheadCssPath = path.resolve(process.cwd(), 'tools/pdf/letterhead.css');
68
+ const letterheadTemplate = await fs.readFile(letterheadPath, 'utf-8');
69
+ // Read CSS and inline it
70
+ const css = await fs.readFile(letterheadCssPath, 'utf-8');
71
+ // Convert logo to base64 data URL if provided
72
+ let logoDataUrl = '';
73
+ if (options.logo && await fs.pathExists(options.logo)) {
74
+ const logoBuffer = await fs.readFile(options.logo);
75
+ const logoExt = path.extname(options.logo).slice(1);
76
+ const mimeType = logoExt === 'png' ? 'image/png' : logoExt === 'jpg' || logoExt === 'jpeg' ? 'image/jpeg' : 'image/png';
77
+ logoDataUrl = `data:${mimeType};base64,${logoBuffer.toString('base64')}`;
78
+ }
79
+ const letterheadData = {
80
+ title: data.title || 'Document',
81
+ logo: logoDataUrl,
82
+ company: options.company || '',
83
+ date: new Date().toISOString().split('T')[0],
84
+ body: htmlContent,
85
+ };
86
+ // Render letterhead with Handlebars
87
+ const Handlebars = (await import('handlebars')).default;
88
+ const letterheadCompiled = Handlebars.compile(letterheadTemplate);
89
+ let finalHtml = letterheadCompiled(letterheadData);
90
+ // Inline the CSS
91
+ finalHtml = finalHtml.replace('<link rel="stylesheet" href="letterhead.css" />', `<style>${css}</style>`);
92
+ // Generate PDF with Playwright
93
+ console.log(c.blue('šŸ–Øļø Generating PDF with Playwright'));
94
+ const browser = await chromium.launch();
95
+ const page = await browser.newPage();
96
+ await page.setContent(finalHtml, { waitUntil: 'networkidle' });
97
+ // Ensure output directory exists
98
+ await fs.ensureDir(path.dirname(options.output));
99
+ await page.pdf({
100
+ path: options.output,
101
+ format: 'Letter',
102
+ margin: {
103
+ top: '0.5in',
104
+ right: '0.75in',
105
+ bottom: '0.5in',
106
+ left: '0.75in',
107
+ },
108
+ printBackground: true,
109
+ });
110
+ await browser.close();
111
+ console.log(c.green(`āœ… PDF generated: ${options.output}`));
112
+ }
113
+ export async function generatePdfCommand(args) {
114
+ const c = await getChalk();
115
+ if (!args.input) {
116
+ console.error(c.red('Error: --input is required'));
117
+ console.log('Usage: synapse generate-pdf --input <markdown-file> --output <pdf-file>');
118
+ process.exit(1);
119
+ }
120
+ if (!args.output) {
121
+ console.error(c.red('Error: --output is required'));
122
+ console.log('Usage: synapse generate-pdf --input <markdown-file> --output <pdf-file>');
123
+ process.exit(1);
124
+ }
125
+ try {
126
+ await generatePdf({
127
+ input: args.input,
128
+ output: args.output,
129
+ logo: args.logo,
130
+ company: args.company,
131
+ url: args.url,
132
+ validate: !args['no-validate'],
133
+ });
134
+ }
135
+ catch (error) {
136
+ console.error(c.red('Error:'), error instanceof Error ? error.message : error);
137
+ process.exit(1);
138
+ }
139
+ }
140
+ //# sourceMappingURL=generate-pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-pdf.js","sourceRoot":"","sources":["../../src/commands/generate-pdf.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ interface IndexOptions {
2
+ contentDir?: string;
3
+ output?: string;
4
+ }
5
+ /**
6
+ * Generate the index.md homepage
7
+ */
8
+ export declare function index(options?: IndexOptions): Promise<void>;
9
+ /**
10
+ * CLI command handler for index generation
11
+ */
12
+ export declare function indexCommand(args: {
13
+ dir?: string;
14
+ output?: string;
15
+ }): Promise<void>;
16
+ export {};
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAGA,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhB"}
@@ -0,0 +1,26 @@
1
+ import * as path from 'path';
2
+ import { generateHomepage } from '../lib/homepage.js';
3
+ /**
4
+ * Generate the index.md homepage
5
+ */
6
+ export async function index(options = {}) {
7
+ const { contentDir = path.resolve(process.cwd(), 'content'), output } = options;
8
+ const outputPath = output
9
+ ? path.resolve(process.cwd(), output)
10
+ : path.join(contentDir, 'index.md');
11
+ await generateHomepage({
12
+ contentDir,
13
+ outputPath
14
+ });
15
+ }
16
+ /**
17
+ * CLI command handler for index generation
18
+ */
19
+ export async function indexCommand(args) {
20
+ const options = {
21
+ contentDir: args.dir,
22
+ output: args.output
23
+ };
24
+ await index(options);
25
+ }
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAOtD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,UAAwB,EAAE;IACpD,MAAM,EACJ,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,EACnD,MAAM,EACP,GAAG,OAAO,CAAC;IAEZ,MAAM,UAAU,GAAG,MAAM;QACvB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC;QACrC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAEtC,MAAM,gBAAgB,CAAC;QACrB,UAAU;QACV,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAGlC;IACC,MAAM,OAAO,GAAiB;QAC5B,UAAU,EAAE,IAAI,CAAC,GAAG;QACpB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC;IAEF,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,58 @@
1
+ export interface InitOptions {
2
+ siteName?: string;
3
+ displayName?: string;
4
+ baseUrl?: string;
5
+ primaryColor?: string;
6
+ upstreamRemote?: string;
7
+ upstreamUrl?: string;
8
+ force?: boolean;
9
+ interactive?: boolean;
10
+ cwd?: string;
11
+ }
12
+ export interface SynapseConfig {
13
+ branding: {
14
+ siteName: string;
15
+ displayName: string;
16
+ baseUrl: string;
17
+ logo?: string;
18
+ theme?: {
19
+ lightMode?: {
20
+ primary: string;
21
+ };
22
+ darkMode?: {
23
+ primary: string;
24
+ };
25
+ };
26
+ };
27
+ folders?: {
28
+ [docType: string]: string;
29
+ };
30
+ decap?: {
31
+ enabled: boolean;
32
+ backend: 'github' | 'gitlab' | 'bitbucket';
33
+ repo: string;
34
+ oauthProxy?: string;
35
+ };
36
+ schemas?: {
37
+ customDir: string;
38
+ loadBase: boolean;
39
+ };
40
+ }
41
+ /**
42
+ * Initialize a forked repository with configuration
43
+ */
44
+ export declare function init(options?: InitOptions): Promise<void>;
45
+ /**
46
+ * CLI command handler for init
47
+ */
48
+ export declare function initCommand(args: {
49
+ siteName?: string;
50
+ displayName?: string;
51
+ baseUrl?: string;
52
+ primaryColor?: string;
53
+ upstreamRemote?: string;
54
+ upstreamUrl?: string;
55
+ force?: boolean;
56
+ yes?: boolean;
57
+ }): Promise<void>;
58
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE;YACN,SAAS,CAAC,EAAE;gBAAE,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC;YAChC,QAAQ,CAAC,EAAE;gBAAE,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC;SAChC,CAAC;KACH,CAAC;IACF,OAAO,CAAC,EAAE;QACR,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;KAC3B,CAAC;IACF,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;QAC3C,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAyDD;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6JnE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBhB"}
@@ -0,0 +1,234 @@
1
+ import fsExtra from 'fs-extra';
2
+ import * as path from 'path';
3
+ import * as readline from 'readline/promises';
4
+ import { checkGitRepo, hasRemote, getCurrentVersion } from '../lib/git.js';
5
+ import { trackingExists, createTracking } from '../lib/tracking.js';
6
+ import { detectInstallMode } from '../lib/mode-detection.js';
7
+ const fs = fsExtra;
8
+ let chalk;
9
+ async function getChalk() {
10
+ if (!chalk) {
11
+ try {
12
+ chalk = (await import('chalk')).default;
13
+ }
14
+ catch {
15
+ chalk = {
16
+ green: (str) => str,
17
+ red: (str) => str,
18
+ yellow: (str) => str,
19
+ blue: (str) => str,
20
+ gray: (str) => str,
21
+ bold: (str) => str,
22
+ cyan: (str) => str,
23
+ };
24
+ }
25
+ }
26
+ return chalk;
27
+ }
28
+ /**
29
+ * Prompt user for input with optional default
30
+ */
31
+ async function prompt(rl, question, defaultValue) {
32
+ const suffix = defaultValue ? ` (${defaultValue})` : '';
33
+ const answer = await rl.question(`${question}${suffix}: `);
34
+ return answer.trim() || defaultValue || '';
35
+ }
36
+ /**
37
+ * Prompt user for confirmation (y/n)
38
+ */
39
+ async function confirm(rl, question, defaultYes = true) {
40
+ const suffix = defaultYes ? ' (Y/n)' : ' (y/N)';
41
+ const answer = await rl.question(`${question}${suffix}: `);
42
+ const normalized = answer.trim().toLowerCase();
43
+ if (normalized === '') {
44
+ return defaultYes;
45
+ }
46
+ return normalized === 'y' || normalized === 'yes';
47
+ }
48
+ /**
49
+ * Create custom directories for user extensions
50
+ */
51
+ async function createCustomDirectories(rootDir) {
52
+ const customDirs = [
53
+ '.claude/commands/custom',
54
+ '.claude/skills/custom',
55
+ '.claude/agents/custom',
56
+ 'schemas/frontmatter/custom',
57
+ 'schemas/body-grammars/custom',
58
+ // Plugin marketplace custom directories
59
+ 'plugins/docs/skills/custom',
60
+ 'plugins/docs/agents/custom',
61
+ 'plugins/javascript-frontend/agents/custom',
62
+ 'plugins/php-backend/agents/custom',
63
+ 'plugins/golang-backend/agents/custom',
64
+ 'plugins/devops/agents/custom',
65
+ ];
66
+ for (const dir of customDirs) {
67
+ const dirPath = path.join(rootDir, dir);
68
+ await fs.ensureDir(dirPath);
69
+ // Add .gitkeep file
70
+ const gitkeepPath = path.join(dirPath, '.gitkeep');
71
+ if (!(await fs.pathExists(gitkeepPath))) {
72
+ await fs.writeFile(gitkeepPath, '', 'utf-8');
73
+ }
74
+ }
75
+ }
76
+ /**
77
+ * Initialize a forked repository with configuration
78
+ */
79
+ export async function init(options = {}) {
80
+ const c = await getChalk();
81
+ const rootDir = options.cwd ?? process.cwd();
82
+ console.log(c.bold('\nšŸš€ Synapse Fork Initialization\n'));
83
+ // Show deprecation warning in npm mode
84
+ const mode = detectInstallMode(rootDir);
85
+ if (mode === 'npm') {
86
+ console.log(c.yellow('DEPRECATED: "synapse init" is for fork-based installations.'));
87
+ console.log(c.yellow('Use `npx @synapse/cli scaffold` instead for npm-based projects.\n'));
88
+ }
89
+ // Check if we're in a git repository
90
+ if (!checkGitRepo(rootDir)) {
91
+ throw new Error('Not a git repository. Run "git init" first.');
92
+ }
93
+ // Check if already initialized
94
+ if (await trackingExists(rootDir)) {
95
+ if (!options.force) {
96
+ throw new Error('Already initialized (.synapse-upstream exists).\n' +
97
+ 'Use --force to reinitialize.');
98
+ }
99
+ console.log(c.yellow('āš ļø Reinitializing (--force specified)\n'));
100
+ }
101
+ let siteName = options.siteName;
102
+ let displayName = options.displayName;
103
+ let baseUrl = options.baseUrl;
104
+ let primaryColor = options.primaryColor;
105
+ let upstreamRemote = options.upstreamRemote || 'upstream';
106
+ let upstreamUrl = options.upstreamUrl || 'git@github.com:millstonehq/synapse.git';
107
+ // Interactive prompts if not all options provided
108
+ if (options.interactive !== false && (!siteName || !displayName || !baseUrl)) {
109
+ const rl = readline.createInterface({
110
+ input: process.stdin,
111
+ output: process.stdout,
112
+ });
113
+ try {
114
+ console.log(c.gray('Configure your fork:\n'));
115
+ if (!siteName) {
116
+ siteName = await prompt(rl, 'Site name', 'My Documentation');
117
+ }
118
+ if (!displayName) {
119
+ displayName = await prompt(rl, 'Display name', siteName);
120
+ }
121
+ if (!baseUrl) {
122
+ baseUrl = await prompt(rl, 'Base URL', 'https://docs.example.com');
123
+ }
124
+ if (!primaryColor) {
125
+ const wantColor = await confirm(rl, 'Customize primary color?', false);
126
+ if (wantColor) {
127
+ primaryColor = await prompt(rl, 'Primary color (hex)', '#0066cc');
128
+ }
129
+ }
130
+ console.log(); // blank line
131
+ }
132
+ finally {
133
+ rl.close();
134
+ }
135
+ }
136
+ // Use defaults if still not set
137
+ siteName = siteName || 'My Documentation';
138
+ displayName = displayName || siteName;
139
+ baseUrl = baseUrl || 'https://docs.example.com';
140
+ // Create synapse.config.json
141
+ console.log(c.blue('šŸ“ Creating synapse.config.json...'));
142
+ const config = {
143
+ branding: {
144
+ siteName,
145
+ displayName,
146
+ baseUrl,
147
+ },
148
+ schemas: {
149
+ customDir: 'schemas/custom',
150
+ loadBase: true,
151
+ },
152
+ };
153
+ if (primaryColor) {
154
+ config.branding.theme = {
155
+ lightMode: { primary: primaryColor },
156
+ darkMode: { primary: primaryColor },
157
+ };
158
+ }
159
+ const configPath = path.join(rootDir, 'synapse.config.json');
160
+ await fs.writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
161
+ console.log(c.green(' āœ“ Created synapse.config.json'));
162
+ // Create custom directories
163
+ console.log(c.blue('\nšŸ“ Creating custom directories...'));
164
+ await createCustomDirectories(rootDir);
165
+ console.log(c.green(' āœ“ Created custom directories (schemas, .claude, plugins) with .gitkeep files'));
166
+ // Check for upstream remote
167
+ console.log(c.blue('\nšŸ”— Configuring upstream remote...'));
168
+ if (!hasRemote(upstreamRemote, rootDir)) {
169
+ console.log(c.yellow(` ! Remote "${upstreamRemote}" not found`));
170
+ console.log(c.gray(` Adding remote: ${upstreamRemote} -> ${upstreamUrl}`));
171
+ try {
172
+ const { addRemote } = await import('../lib/git.js');
173
+ addRemote(upstreamRemote, upstreamUrl, rootDir);
174
+ console.log(c.green(` āœ“ Added remote "${upstreamRemote}"`));
175
+ }
176
+ catch (error) {
177
+ console.log(c.red(` āœ— Failed to add remote: ${error}`));
178
+ console.log(c.yellow(` You can add it manually: git remote add ${upstreamRemote} ${upstreamUrl}`));
179
+ }
180
+ }
181
+ else {
182
+ console.log(c.green(` āœ“ Remote "${upstreamRemote}" exists`));
183
+ }
184
+ // Create tracking file
185
+ console.log(c.blue('\nšŸ“Š Creating tracking file...'));
186
+ // Delete existing tracking file if force flag is set
187
+ if (options.force) {
188
+ const trackingPath = path.join(rootDir, '.synapse-upstream');
189
+ if (await fs.pathExists(trackingPath)) {
190
+ await fs.remove(trackingPath);
191
+ }
192
+ }
193
+ const version = getCurrentVersion(rootDir);
194
+ await createTracking(upstreamUrl, version, rootDir);
195
+ console.log(c.green(' āœ“ Created .synapse-upstream'));
196
+ // Summary
197
+ console.log(c.bold('\nāœ… Initialization complete!\n'));
198
+ console.log(c.gray('Configuration:'));
199
+ console.log(c.gray(` Site: ${siteName}`));
200
+ console.log(c.gray(` Display: ${displayName}`));
201
+ console.log(c.gray(` URL: ${baseUrl}`));
202
+ console.log(c.gray(` Upstream: ${upstreamRemote} (${upstreamUrl})`));
203
+ console.log(c.gray(` Version: ${version}`));
204
+ console.log(c.gray('\nNext steps:'));
205
+ console.log(c.gray(' 1. Edit synapse.config.json to customize branding'));
206
+ console.log(c.gray(' 2. Add custom schemas to schemas/frontmatter/custom/'));
207
+ console.log(c.gray(' 3. Add custom Claude commands to .claude/commands/custom/'));
208
+ console.log(c.gray(' 4. Extend plugins with custom skills/agents in plugins/*/custom/'));
209
+ console.log(c.gray(' 5. Run "synapse update" to sync with upstream changes'));
210
+ console.log();
211
+ }
212
+ /**
213
+ * CLI command handler for init
214
+ */
215
+ export async function initCommand(args) {
216
+ const c = await getChalk();
217
+ try {
218
+ await init({
219
+ siteName: args.siteName,
220
+ displayName: args.displayName,
221
+ baseUrl: args.baseUrl,
222
+ primaryColor: args.primaryColor,
223
+ upstreamRemote: args.upstreamRemote,
224
+ upstreamUrl: args.upstreamUrl,
225
+ force: args.force,
226
+ interactive: !args.yes,
227
+ });
228
+ }
229
+ catch (error) {
230
+ console.error(c.red('\nError:'), error instanceof Error ? error.message : error);
231
+ process.exit(1);
232
+ }
233
+ }
234
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface MigrateOptions {
2
+ dryRun?: boolean;
3
+ yes?: boolean;
4
+ cwd?: string;
5
+ }
6
+ export interface MigrationPlan {
7
+ isForkMode: boolean;
8
+ hasCustomSchemas: boolean;
9
+ hasCustomPlugins: boolean;
10
+ hasSynapseConfig: boolean;
11
+ customSchemas: string[];
12
+ customPlugins: string[];
13
+ forkFiles: string[];
14
+ contentDirs: string[];
15
+ actions: string[];
16
+ }
17
+ /**
18
+ * Detect the current state of the repository for migration planning
19
+ */
20
+ export declare function detectMigrationState(cwd: string): Promise<MigrationPlan>;
21
+ /**
22
+ * Execute the migration from fork mode to npm mode
23
+ */
24
+ export declare function migrate(options?: MigrateOptions): Promise<MigrationPlan>;
25
+ /**
26
+ * CLI command handler for migrate
27
+ */
28
+ export declare function migrateCommand(args: Record<string, any>): Promise<void>;
29
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAaD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAuF9E;AAkDD;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAsIlF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAY7E"}