@mulmocast/slide 0.5.0 → 0.6.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 (94) hide show
  1. package/.claude/skills/extend/SKILL.md +6 -6
  2. package/.claude/skills/extend/references/extended-script-schema.md +5 -5
  3. package/.claude/skills/md-to-mulmo/SKILL.md +8 -8
  4. package/.claude/skills/narrate/SKILL.md +8 -8
  5. package/.claude/skills/narrate/references/extended-script-schema.md +5 -5
  6. package/README.md +187 -27
  7. package/lib/actions/bundle.d.ts.map +1 -1
  8. package/lib/actions/bundle.js +10 -0
  9. package/lib/actions/bundle.js.map +1 -1
  10. package/lib/actions/extend-merge.d.ts +2 -0
  11. package/lib/actions/extend-merge.d.ts.map +1 -0
  12. package/lib/actions/extend-merge.js +22 -0
  13. package/lib/actions/extend-merge.js.map +1 -0
  14. package/lib/actions/extend-scaffold.d.ts +2 -2
  15. package/lib/actions/extend-scaffold.d.ts.map +1 -1
  16. package/lib/actions/extend-scaffold.js +3 -3
  17. package/lib/actions/extend-scaffold.js.map +1 -1
  18. package/lib/actions/extend-validate.js +3 -3
  19. package/lib/actions/extend-validate.js.map +1 -1
  20. package/lib/actions/md-to-extended.d.ts +7 -7
  21. package/lib/actions/md-to-extended.d.ts.map +1 -1
  22. package/lib/actions/md-to-extended.js +20 -20
  23. package/lib/actions/md-to-extended.js.map +1 -1
  24. package/lib/actions/narrate.d.ts +1 -1
  25. package/lib/actions/narrate.d.ts.map +1 -1
  26. package/lib/actions/narrate.js +12 -14
  27. package/lib/actions/narrate.js.map +1 -1
  28. package/lib/actions/pipeline.d.ts +13 -0
  29. package/lib/actions/pipeline.d.ts.map +1 -0
  30. package/lib/actions/pipeline.js +78 -0
  31. package/lib/actions/pipeline.js.map +1 -0
  32. package/lib/actions/preview.js +1 -1
  33. package/lib/actions/preview.js.map +1 -1
  34. package/lib/cli/action-commands.d.ts +3 -0
  35. package/lib/cli/action-commands.d.ts.map +1 -0
  36. package/lib/cli/action-commands.js +144 -0
  37. package/lib/cli/action-commands.js.map +1 -0
  38. package/lib/cli/convert-commands.d.ts +3 -0
  39. package/lib/cli/convert-commands.d.ts.map +1 -0
  40. package/lib/cli/convert-commands.js +190 -0
  41. package/lib/cli/convert-commands.js.map +1 -0
  42. package/lib/cli/extend-commands.d.ts +3 -0
  43. package/lib/cli/extend-commands.d.ts.map +1 -0
  44. package/lib/cli/extend-commands.js +41 -0
  45. package/lib/cli/extend-commands.js.map +1 -0
  46. package/lib/cli/index.d.ts +3 -0
  47. package/lib/cli/index.d.ts.map +1 -0
  48. package/lib/cli/index.js +31 -0
  49. package/lib/cli/index.js.map +1 -0
  50. package/lib/cli/misc-commands.d.ts +3 -0
  51. package/lib/cli/misc-commands.d.ts.map +1 -0
  52. package/lib/cli/misc-commands.js +86 -0
  53. package/lib/cli/misc-commands.js.map +1 -0
  54. package/lib/cli/options.d.ts +194 -0
  55. package/lib/cli/options.d.ts.map +1 -0
  56. package/lib/cli/options.js +125 -0
  57. package/lib/cli/options.js.map +1 -0
  58. package/lib/cli.js +86 -29
  59. package/lib/cli.js.map +1 -1
  60. package/lib/convert/marp.js +1 -1
  61. package/lib/convert/marp.js.map +1 -1
  62. package/lib/convert/movie.d.ts.map +1 -1
  63. package/lib/convert/movie.js +2 -2
  64. package/lib/convert/movie.js.map +1 -1
  65. package/lib/utils/extended-bundle-merge.d.ts +6 -0
  66. package/lib/utils/extended-bundle-merge.d.ts.map +1 -0
  67. package/lib/utils/extended-bundle-merge.js +71 -0
  68. package/lib/utils/extended-bundle-merge.js.map +1 -0
  69. package/lib/vue/assets/index-BZu3TPGe.js +115 -0
  70. package/lib/vue/assets/index-DyeW2SiG.css +1 -0
  71. package/lib/vue/index.html +3 -3
  72. package/lib/vue/openai-chat.d.ts +12 -0
  73. package/lib/vue/openai-chat.d.ts.map +1 -0
  74. package/lib/vue/openai-chat.js +85 -0
  75. package/lib/vue/openai-chat.js.map +1 -0
  76. package/package.json +31 -27
  77. package/lib/convert/pdfvision.d.ts +0 -14
  78. package/lib/convert/pdfvision.d.ts.map +0 -1
  79. package/lib/convert/pdfvision.js +0 -247
  80. package/lib/convert/pdfvision.js.map +0 -1
  81. package/lib/utils/document-analysis.d.ts +0 -43
  82. package/lib/utils/document-analysis.d.ts.map +0 -1
  83. package/lib/utils/document-analysis.js +0 -118
  84. package/lib/utils/document-analysis.js.map +0 -1
  85. package/lib/utils/narration-generator.d.ts +0 -14
  86. package/lib/utils/narration-generator.d.ts.map +0 -1
  87. package/lib/utils/narration-generator.js +0 -68
  88. package/lib/utils/narration-generator.js.map +0 -1
  89. package/lib/utils/vision-provider.d.ts +0 -12
  90. package/lib/utils/vision-provider.d.ts.map +0 -1
  91. package/lib/utils/vision-provider.js +0 -105
  92. package/lib/utils/vision-provider.js.map +0 -1
  93. package/lib/vue/assets/index-D6am8L57.css +0 -1
  94. package/lib/vue/assets/index-xq-ZNfmX.js +0 -2
@@ -0,0 +1,144 @@
1
+ import * as path from "path";
2
+ import * as fs from "fs";
3
+ import { getBasename } from "../actions/common.js";
4
+ import { runMulmoMovie } from "../actions/movie.js";
5
+ import { runMulmoBundle } from "../actions/bundle.js";
6
+ import { ensureMulmoScript } from "../actions/pipeline.js";
7
+ import { actionOptions, movieOptions, parseTags } from "./options.js";
8
+ async function runAction(action, file, options) {
9
+ const inputPath = path.resolve(file);
10
+ const basename = getBasename(inputPath);
11
+ const outputDir = path.join("output", basename);
12
+ if (!fs.existsSync(outputDir)) {
13
+ fs.mkdirSync(outputDir, { recursive: true });
14
+ }
15
+ const mulmoScriptPath = await ensureMulmoScript(inputPath, {
16
+ force: options.force,
17
+ generateText: options.generateText,
18
+ lang: options.lang,
19
+ profile: options.profile,
20
+ section: options.section,
21
+ tags: parseTags(options.tags),
22
+ });
23
+ if (action === "movie") {
24
+ await runMulmoMovie(mulmoScriptPath, outputDir, {
25
+ targetLang: options.targetLang,
26
+ captionLang: options.captionLang,
27
+ });
28
+ }
29
+ else {
30
+ await runMulmoBundle(mulmoScriptPath, outputDir);
31
+ }
32
+ console.log(`\n✓ ${action === "movie" ? "Movie" : "Bundle"} generation complete!`);
33
+ console.log(` Output directory: ${outputDir}`);
34
+ }
35
+ async function runUpload(basename) {
36
+ const apiKey = process.env.MULMO_MEDIA_API_KEY;
37
+ if (!apiKey) {
38
+ console.error("Error: MULMO_MEDIA_API_KEY environment variable is not set");
39
+ process.exit(1);
40
+ }
41
+ const outputDir = path.join("output", basename);
42
+ if (!fs.existsSync(outputDir)) {
43
+ console.error(`Output directory not found: ${outputDir}`);
44
+ process.exit(1);
45
+ }
46
+ // Find bundle directory containing mulmo_view.json
47
+ const entries = fs.readdirSync(outputDir, { withFileTypes: true });
48
+ const bundleEntry = entries.find((entry) => entry.isDirectory() && fs.existsSync(path.join(outputDir, entry.name, "mulmo_view.json")));
49
+ if (!bundleEntry) {
50
+ console.error(`mulmo_view.json not found in ${outputDir}`);
51
+ process.exit(1);
52
+ }
53
+ const bundleDir = path.join(outputDir, bundleEntry.name);
54
+ // Dynamic import to avoid loading upload code unnecessarily
55
+ const { uploadBundleDir } = await import("../actions/upload.js");
56
+ const result = await uploadBundleDir(bundleDir, apiKey);
57
+ console.log(`\n✓ Upload complete!`);
58
+ console.log(` Upload path: ${result.uploadPath}`);
59
+ }
60
+ export function registerActionCommands(yargs) {
61
+ return yargs
62
+ .command("movie <file>", "Generate movie from presentation", (yargs) => {
63
+ return yargs
64
+ .positional("file", {
65
+ describe: "Presentation file (.pptx, .md, .key, .pdf)",
66
+ type: "string",
67
+ demandOption: true,
68
+ })
69
+ .options(movieOptions);
70
+ }, async (argv) => {
71
+ await runAction("movie", argv.file, {
72
+ force: argv.f,
73
+ generateText: argv.g,
74
+ lang: argv.l,
75
+ targetLang: argv.t,
76
+ captionLang: argv.c,
77
+ profile: argv.profile,
78
+ section: argv.section,
79
+ tags: argv.tags,
80
+ });
81
+ })
82
+ .command("bundle <file>", "Generate MulmoViewer bundle from presentation", (yargs) => {
83
+ return yargs
84
+ .positional("file", {
85
+ describe: "Presentation file (.pptx, .md, .key, .pdf)",
86
+ type: "string",
87
+ demandOption: true,
88
+ })
89
+ .options(actionOptions);
90
+ }, async (argv) => {
91
+ await runAction("bundle", argv.file, {
92
+ force: argv.f,
93
+ generateText: argv.g,
94
+ lang: argv.l,
95
+ profile: argv.profile,
96
+ section: argv.section,
97
+ tags: argv.tags,
98
+ });
99
+ })
100
+ .command("upload <basename>", "Upload bundle to MulmoCast server", (yargs) => {
101
+ return yargs.positional("basename", {
102
+ describe: "Basename of the bundle to upload",
103
+ type: "string",
104
+ demandOption: true,
105
+ });
106
+ }, async (argv) => {
107
+ await runUpload(argv.basename);
108
+ })
109
+ .command("publish <file>", "Generate bundle and upload (internal)", (yargs) => {
110
+ return yargs
111
+ .positional("file", {
112
+ describe: "Presentation file (.pptx, .md, .key, .pdf)",
113
+ type: "string",
114
+ demandOption: true,
115
+ })
116
+ .options(actionOptions);
117
+ }, async (argv) => {
118
+ const inputPath = path.resolve(argv.file);
119
+ const basename = getBasename(inputPath);
120
+ const outputDir = path.join("output", basename);
121
+ if (!fs.existsSync(outputDir)) {
122
+ fs.mkdirSync(outputDir, { recursive: true });
123
+ }
124
+ // Step 1: Ensure MulmoScript
125
+ const mulmoScriptPath = await ensureMulmoScript(inputPath, {
126
+ force: argv.f,
127
+ generateText: argv.g,
128
+ lang: argv.l,
129
+ profile: argv.profile,
130
+ section: argv.section,
131
+ tags: parseTags(argv.tags),
132
+ });
133
+ // Step 2: Generate bundle
134
+ console.log(`\n--- Bundle ---`);
135
+ await runMulmoBundle(mulmoScriptPath, outputDir);
136
+ console.log(`✓ Bundle generation complete!`);
137
+ // Step 3: Upload
138
+ console.log(`\n--- Upload ---`);
139
+ await runUpload(basename);
140
+ console.log(`\n✓ Publish complete!`);
141
+ console.log(` Output directory: ${outputDir}`);
142
+ });
143
+ }
144
+ //# sourceMappingURL=action-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-commands.js","sourceRoot":"","sources":["../../src/cli/action-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Argv } from "yargs";
2
+ export declare function registerConvertCommands(yargs: Argv): Argv;
3
+ //# sourceMappingURL=convert-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-commands.d.ts","sourceRoot":"","sources":["../../src/cli/convert-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AA6FlC,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CA0JzD"}
@@ -0,0 +1,190 @@
1
+ import * as path from "path";
2
+ import * as fs from "fs";
3
+ import { execSync } from "child_process";
4
+ import { detectFileType, getKeynoteScriptPath } from "../actions/common.js";
5
+ import { convertMarp } from "../convert/marp.js";
6
+ import { convertMarkdown } from "../convert/markdown.js";
7
+ import { convertPptx } from "../convert/pptx.js";
8
+ import { convertPdf } from "../convert/pdf.js";
9
+ import { convertMovie } from "../convert/movie.js";
10
+ import { convertOptions, marpOptions, markdownOptions, videoConvertOptions } from "./options.js";
11
+ async function runConvert(type, file, options) {
12
+ const inputPath = path.resolve(file);
13
+ if (!fs.existsSync(inputPath)) {
14
+ console.error(`File not found: ${inputPath}`);
15
+ process.exit(1);
16
+ }
17
+ switch (type) {
18
+ case "marp":
19
+ await convertMarp({
20
+ inputPath,
21
+ lang: options.lang,
22
+ generateText: options.generateText,
23
+ themePath: options.theme,
24
+ allowLocalFiles: options.allowLocalFiles,
25
+ });
26
+ break;
27
+ case "markdown":
28
+ await convertMarkdown({
29
+ inputPath,
30
+ lang: options.lang,
31
+ generateText: options.generateText,
32
+ separator: options.separator,
33
+ mermaid: options.mermaid,
34
+ directive: options.directive,
35
+ layout: options.layout,
36
+ style: options.style,
37
+ });
38
+ break;
39
+ case "pptx":
40
+ await convertPptx({
41
+ inputPath,
42
+ lang: options.lang,
43
+ generateText: options.generateText,
44
+ });
45
+ break;
46
+ case "pdf":
47
+ await convertPdf({
48
+ inputPath,
49
+ lang: options.lang,
50
+ generateText: options.generateText,
51
+ });
52
+ break;
53
+ case "movie":
54
+ await convertMovie({
55
+ inputPath,
56
+ lang: options.lang,
57
+ bundle: options.bundle,
58
+ targetLangs: options.targetLangs,
59
+ });
60
+ break;
61
+ case "keynote": {
62
+ const scriptPath = getKeynoteScriptPath();
63
+ execSync(`osascript "${scriptPath}" "${inputPath}"`, {
64
+ stdio: "inherit",
65
+ cwd: process.cwd(),
66
+ });
67
+ break;
68
+ }
69
+ }
70
+ }
71
+ export function registerConvertCommands(yargs) {
72
+ return yargs
73
+ .command("marp <file>", "Convert Marp markdown to MulmoScript", (yargs) => {
74
+ return yargs
75
+ .positional("file", {
76
+ describe: "Marp markdown file to convert",
77
+ type: "string",
78
+ demandOption: true,
79
+ })
80
+ .options(marpOptions);
81
+ }, async (argv) => {
82
+ await runConvert("marp", argv.file, {
83
+ lang: argv.l,
84
+ generateText: argv.g,
85
+ theme: argv.theme,
86
+ allowLocalFiles: argv["allow-local-files"],
87
+ });
88
+ })
89
+ .command("markdown <file>", "Convert Markdown to MulmoScript (with separator and plugin options)", (yargs) => {
90
+ return yargs
91
+ .positional("file", {
92
+ describe: "Markdown file to convert",
93
+ type: "string",
94
+ demandOption: true,
95
+ })
96
+ .options(markdownOptions);
97
+ }, async (argv) => {
98
+ await runConvert("markdown", argv.file, {
99
+ lang: argv.l,
100
+ generateText: argv.g,
101
+ separator: argv.s,
102
+ mermaid: argv.mermaid,
103
+ directive: argv.directive,
104
+ layout: argv.layout,
105
+ style: argv.style,
106
+ });
107
+ })
108
+ .command("pptx <file>", "Convert PowerPoint to MulmoScript", (yargs) => {
109
+ return yargs
110
+ .positional("file", {
111
+ describe: "PPTX file to convert",
112
+ type: "string",
113
+ demandOption: true,
114
+ })
115
+ .options(convertOptions);
116
+ }, async (argv) => {
117
+ await runConvert("pptx", argv.file, {
118
+ lang: argv.l,
119
+ generateText: argv.g,
120
+ });
121
+ })
122
+ .command("pdf <file>", "Convert PDF to MulmoScript", (yargs) => {
123
+ return yargs
124
+ .positional("file", {
125
+ describe: "PDF file to convert",
126
+ type: "string",
127
+ demandOption: true,
128
+ })
129
+ .options(convertOptions);
130
+ }, async (argv) => {
131
+ await runConvert("pdf", argv.file, {
132
+ lang: argv.l,
133
+ generateText: argv.g,
134
+ });
135
+ })
136
+ .command("keynote <file>", "Convert Keynote to MulmoScript (macOS only)", (yargs) => {
137
+ return yargs.positional("file", {
138
+ describe: "Keynote file to convert",
139
+ type: "string",
140
+ demandOption: true,
141
+ });
142
+ }, async (argv) => {
143
+ await runConvert("keynote", argv.file, {});
144
+ })
145
+ .command("convert <file>", "Convert presentation or video to MulmoScript (auto-detect format)", (yargs) => {
146
+ return yargs
147
+ .positional("file", {
148
+ describe: "Presentation or video file (.pptx, .md, .key, .pdf, .mp4, .mov, .mkv, .webm, .avi)",
149
+ type: "string",
150
+ demandOption: true,
151
+ })
152
+ .options(videoConvertOptions);
153
+ }, async (argv) => {
154
+ const inputPath = path.resolve(argv.file);
155
+ if (!fs.existsSync(inputPath)) {
156
+ console.error(`File not found: ${inputPath}`);
157
+ process.exit(1);
158
+ }
159
+ const fileType = detectFileType(inputPath);
160
+ const targetLangsStr = argv["target-langs"];
161
+ await runConvert(fileType, argv.file, {
162
+ lang: argv.l,
163
+ generateText: argv.g,
164
+ bundle: argv.bundle,
165
+ targetLangs: targetLangsStr?.split(",").map((l) => l.trim()),
166
+ });
167
+ })
168
+ .command("transcribe <file>", "Transcribe video to MulmoScript with translations and TTS", (yargs) => {
169
+ return yargs
170
+ .positional("file", {
171
+ describe: "Video file (.mp4, .mov, .mkv, .webm, .avi)",
172
+ type: "string",
173
+ demandOption: true,
174
+ })
175
+ .options(videoConvertOptions);
176
+ }, async (argv) => {
177
+ const inputPath = path.resolve(argv.file);
178
+ if (!fs.existsSync(inputPath)) {
179
+ console.error(`File not found: ${inputPath}`);
180
+ process.exit(1);
181
+ }
182
+ const targetLangsStr = argv["target-langs"];
183
+ await runConvert("movie", argv.file, {
184
+ lang: argv.l,
185
+ bundle: argv.bundle,
186
+ targetLangs: targetLangsStr?.split(",").map((l) => l.trim()),
187
+ });
188
+ });
189
+ }
190
+ //# sourceMappingURL=convert-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-commands.js","sourceRoot":"","sources":["../../src/cli/convert-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Argv } from "yargs";
2
+ export declare function registerExtendCommands(yargs: Argv): Argv;
3
+ //# sourceMappingURL=extend-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extend-commands.d.ts","sourceRoot":"","sources":["../../src/cli/extend-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAElC,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAgExD"}
@@ -0,0 +1,41 @@
1
+ export function registerExtendCommands(yargs) {
2
+ return yargs.command("extend", "Manage /extend Claude Code skill", (yargs) => {
3
+ return yargs
4
+ .command("init", "Install /extend skill into current project (.claude/skills/extend/)", () => { }, async () => {
5
+ const { runExtendInit } = await import("../actions/extend-init.js");
6
+ runExtendInit();
7
+ })
8
+ .command("validate <file>", "Validate an ExtendedMulmoScript JSON file against the schema", (yargs) => {
9
+ return yargs.positional("file", {
10
+ describe: "ExtendedMulmoScript JSON file to validate",
11
+ type: "string",
12
+ demandOption: true,
13
+ });
14
+ }, async (argv) => {
15
+ const { runExtendValidate } = await import("../actions/extend-validate.js");
16
+ runExtendValidate(argv.file);
17
+ })
18
+ .command("scaffold <file>", "Create ExtendedMulmoScript skeleton from MulmoScript (no LLM needed)", (yargs) => {
19
+ return yargs.positional("file", {
20
+ describe: "MulmoScript JSON file to scaffold",
21
+ type: "string",
22
+ demandOption: true,
23
+ });
24
+ }, async (argv) => {
25
+ const { runExtendScaffold } = await import("../actions/extend-scaffold.js");
26
+ runExtendScaffold(argv.file);
27
+ })
28
+ .command("merge <basename>", "Merge extended_script.json metadata into existing mulmo_view.json bundle", (yargs) => {
29
+ return yargs.positional("basename", {
30
+ describe: "Basename of the project (e.g., 2601.05047v2)",
31
+ type: "string",
32
+ demandOption: true,
33
+ });
34
+ }, async (argv) => {
35
+ const { runExtendMerge } = await import("../actions/extend-merge.js");
36
+ runExtendMerge(argv.basename);
37
+ })
38
+ .demandCommand(1, "Use 'mulmo-slide extend init|validate|scaffold|merge'");
39
+ }, () => { });
40
+ }
41
+ //# sourceMappingURL=extend-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extend-commands.js","sourceRoot":"","sources":["../../src/cli/extend-commands.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CAAC,KAAW;IAChD,OAAO,KAAK,CAAC,OAAO,CAClB,QAAQ,EACR,kCAAkC,EAClC,CAAC,KAAK,EAAE,EAAE;QACR,OAAO,KAAK;aACT,OAAO,CACN,MAAM,EACN,qEAAqE,EACrE,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,IAAI,EAAE;YACT,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YACpE,aAAa,EAAE,CAAC;QAClB,CAAC,CACF;aACA,OAAO,CACN,iBAAiB,EACjB,8DAA8D,EAC9D,CAAC,KAAK,EAAE,EAAE;YACR,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;gBAC9B,QAAQ,EAAE,2CAA2C;gBACrD,IAAI,EAAE,QAAQ;gBACd,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;QACL,CAAC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;YAC5E,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CACF;aACA,OAAO,CACN,iBAAiB,EACjB,sEAAsE,EACtE,CAAC,KAAK,EAAE,EAAE;YACR,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;gBAC9B,QAAQ,EAAE,mCAAmC;gBAC7C,IAAI,EAAE,QAAQ;gBACd,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;QACL,CAAC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;YAC5E,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CACF;aACA,OAAO,CACN,kBAAkB,EAClB,0EAA0E,EAC1E,CAAC,KAAK,EAAE,EAAE;YACR,OAAO,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE;gBAClC,QAAQ,EAAE,8CAA8C;gBACxD,IAAI,EAAE,QAAQ;gBACd,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;QACL,CAAC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;YACtE,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CACF;aACA,aAAa,CAAC,CAAC,EAAE,uDAAuD,CAAC,CAAC;IAC/E,CAAC,EACD,GAAG,EAAE,GAAE,CAAC,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+ import dotenv from "dotenv";
3
+ dotenv.config({ quiet: true });
4
+ import yargs from "yargs";
5
+ import { hideBin } from "yargs/helpers";
6
+ import { registerConvertCommands } from "./convert-commands.js";
7
+ import { registerActionCommands } from "./action-commands.js";
8
+ import { registerExtendCommands } from "./extend-commands.js";
9
+ import { registerMiscCommands } from "./misc-commands.js";
10
+ const cli = [
11
+ registerConvertCommands,
12
+ registerActionCommands,
13
+ registerExtendCommands,
14
+ registerMiscCommands,
15
+ ].reduce((y, register) => register(y), yargs(hideBin(process.argv)).scriptName("mulmo-slide").usage("$0 <command> [options]"));
16
+ cli
17
+ .demandCommand(1, "You need to specify a command")
18
+ .strict()
19
+ .showHelpOnFail(false)
20
+ .fail((msg, err) => {
21
+ if (err) {
22
+ console.error(`\n✗ Error: ${err.message}`);
23
+ }
24
+ else if (msg) {
25
+ console.error(msg);
26
+ }
27
+ process.exit(1);
28
+ })
29
+ .help()
30
+ .parse();
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAE/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,GAAG,GAAG;IACV,uBAAuB;IACvB,sBAAsB;IACtB,sBAAsB;IACtB,oBAAoB;CACrB,CAAC,MAAM,CACN,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAC5B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CACvF,CAAC;AAEF,GAAG;KACA,aAAa,CAAC,CAAC,EAAE,+BAA+B,CAAC;KACjD,MAAM,EAAE;KACR,cAAc,CAAC,KAAK,CAAC;KACrB,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACjB,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,GAAG,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;KACD,IAAI,EAAE;KACN,KAAK,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Argv } from "yargs";
2
+ export declare function registerMiscCommands(yargs: Argv): Argv;
3
+ //# sourceMappingURL=misc-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc-commands.d.ts","sourceRoot":"","sources":["../../src/cli/misc-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAKlC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAsGtD"}
@@ -0,0 +1,86 @@
1
+ import { langOption } from "../utils/lang.js";
2
+ import { startPreviewServer } from "../actions/preview.js";
3
+ export function registerMiscCommands(yargs) {
4
+ return yargs
5
+ .command("narrate <file>", "Generate narrated ExtendedMulmoScript from source file (full pipeline)", (yargs) => {
6
+ return yargs
7
+ .positional("file", {
8
+ describe: "Source file (.pdf, .pptx, .md, .key)",
9
+ type: "string",
10
+ demandOption: true,
11
+ })
12
+ .options({
13
+ ...langOption,
14
+ "scaffold-only": {
15
+ type: "boolean",
16
+ description: "Only create scaffold (no LLM, for Claude Code handoff)",
17
+ default: false,
18
+ },
19
+ f: {
20
+ alias: "force",
21
+ type: "boolean",
22
+ description: "Force regenerate MulmoScript even if it exists",
23
+ default: false,
24
+ },
25
+ s: {
26
+ alias: "separator",
27
+ type: "string",
28
+ description: "Slide separator mode (for Markdown files)",
29
+ choices: [
30
+ "horizontal-rule",
31
+ "heading",
32
+ "heading-1",
33
+ "heading-2",
34
+ "heading-3",
35
+ "blank-lines",
36
+ "comment",
37
+ "page-break",
38
+ ],
39
+ },
40
+ mermaid: {
41
+ type: "boolean",
42
+ description: "Convert mermaid code blocks (for Markdown files)",
43
+ default: false,
44
+ },
45
+ });
46
+ }, async (argv) => {
47
+ const { runNarrate } = await import("../actions/narrate.js");
48
+ await runNarrate(argv.file, {
49
+ lang: argv.l,
50
+ scaffoldOnly: argv["scaffold-only"],
51
+ force: argv.f,
52
+ separator: argv.s,
53
+ mermaid: argv.mermaid,
54
+ });
55
+ })
56
+ .command("parse-md <file>", "Parse markdown structure and generate JSON Schemas for LLM planning", (yargs) => {
57
+ return yargs.positional("file", {
58
+ describe: "Markdown file to parse",
59
+ type: "string",
60
+ demandOption: true,
61
+ });
62
+ }, async (argv) => {
63
+ const { runParseMd } = await import("../actions/md-to-extended.js");
64
+ runParseMd(argv.file);
65
+ })
66
+ .command("assemble-extended <file>", "Assemble ExtendedMulmoScript from presentation plan JSON", (yargs) => {
67
+ return yargs.positional("file", {
68
+ describe: "Presentation plan JSON file (presentation_plan.json)",
69
+ type: "string",
70
+ demandOption: true,
71
+ });
72
+ }, async (argv) => {
73
+ const { runAssembleExtended } = await import("../actions/md-to-extended.js");
74
+ runAssembleExtended(argv.file);
75
+ })
76
+ .command("preview [port]", "Start MulmoViewer preview server", (yargs) => {
77
+ return yargs.positional("port", {
78
+ describe: "Port number for the server",
79
+ type: "number",
80
+ default: 3000,
81
+ });
82
+ }, (argv) => {
83
+ startPreviewServer(argv.port);
84
+ });
85
+ }
86
+ //# sourceMappingURL=misc-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc-commands.js","sourceRoot":"","sources":["../../src/cli/misc-commands.ts"],"names":[],"mappings":"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"}