markwell 0.1.3 → 0.1.4

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/cli/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from "commander";
3
- import fs, { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import fs, { cpSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
4
4
  import fsp from "node:fs/promises";
5
5
  import path, { dirname, isAbsolute, join, resolve } from "node:path";
6
6
  import readline from "node:readline";
@@ -1731,11 +1731,26 @@ function registerConvertCommand(program) {
1731
1731
  program.command("convert").description("Convert files to or from Markdown").argument("<file-or-glob>", "File path or glob pattern to convert").option("--to <format>", "Export format(s): docx, pptx, pdf, xlsx, vtt, srt, etc.").option("-o, --output <path>", "Output file or directory path").option("--force", "Overwrite existing files without prompting").option("--dry-run", "Show what would be done without writing files").option("--verbose", "Show detailed processing information").option("--theme <name-or-path>", "Theme name or path to .markwell.yaml").action(async (fileOrGlob, opts) => {
1732
1732
  if (opts.verbose) setVerbose(true);
1733
1733
  const registry = getRegistry();
1734
- const files = await fg(fileOrGlob, { absolute: true });
1735
- if (files.length === 0) {
1736
- error(`No files found matching "${fileOrGlob}"`);
1737
- process.exitCode = 1;
1738
- return;
1734
+ let files;
1735
+ const resolved = path.resolve(fileOrGlob);
1736
+ try {
1737
+ if ((await fsp.stat(resolved)).isFile()) files = [resolved];
1738
+ else {
1739
+ error(`"${fileOrGlob}" is a directory, not a file. Use a glob pattern (e.g. "${fileOrGlob}/*.docx") to convert files in a directory.`);
1740
+ process.exitCode = 1;
1741
+ return;
1742
+ }
1743
+ } catch (statErr) {
1744
+ const pattern = fg.convertPathToPattern(fileOrGlob);
1745
+ files = await fg(pattern, { absolute: true });
1746
+ if (files.length === 0) {
1747
+ const code = statErr.code;
1748
+ if (code === "EACCES" || code === "EPERM") error(`Permission denied: "${fileOrGlob}"`);
1749
+ else if (code === "ENOENT" && !fg.isDynamicPattern(pattern)) error(`File not found: "${fileOrGlob}"`);
1750
+ else error(`No files found matching "${fileOrGlob}"`);
1751
+ process.exitCode = 1;
1752
+ return;
1753
+ }
1739
1754
  }
1740
1755
  let succeeded = 0;
1741
1756
  let failed = 0;
@@ -2226,30 +2241,29 @@ function printObject(obj, indent) {
2226
2241
 
2227
2242
  //#endregion
2228
2243
  //#region src/cli/commands/install-skills.ts
2229
- function getSkillSourcePath() {
2230
- const devPath = join(import.meta.dirname, "../../../src/skills/markwell.md");
2244
+ function getSkillSourceDir() {
2245
+ const devPath = join(import.meta.dirname, "../../src/skills/markwell");
2231
2246
  if (existsSync(devPath)) return devPath;
2232
- const distPath = join(import.meta.dirname, "../../skills/markwell.md");
2247
+ const distPath = join(import.meta.dirname, "../skills/markwell");
2233
2248
  if (existsSync(distPath)) return distPath;
2234
- return devPath;
2249
+ return distPath;
2235
2250
  }
2236
2251
  function registerInstallSkillsCommand(program) {
2237
2252
  program.command("install-skills").description("Install Claude Code skill file").option("--global", "Install to ~/.claude/ instead of project .claude/").action((opts) => {
2238
- const sourcePath = getSkillSourcePath();
2239
- if (!existsSync(sourcePath)) {
2253
+ const sourceDir = getSkillSourceDir();
2254
+ if (!existsSync(join(sourceDir, "SKILL.md"))) {
2240
2255
  console.error("Skill template not found. Package may be corrupted.");
2241
2256
  process.exitCode = 1;
2242
2257
  return;
2243
2258
  }
2244
2259
  let targetDir;
2245
- if (opts.global) targetDir = join(homedir(), ".claude", "commands");
2246
- else targetDir = join(process.cwd(), ".claude", "commands");
2247
- const targetPath = join(targetDir, "markwell.md");
2260
+ if (opts.global) targetDir = join(homedir(), ".claude", "skills", "markwell");
2261
+ else targetDir = join(process.cwd(), ".claude", "skills", "markwell");
2248
2262
  if (!existsSync(targetDir)) mkdirSync(targetDir, { recursive: true });
2249
- copyFileSync(sourcePath, targetPath);
2263
+ cpSync(sourceDir, targetDir, { recursive: true });
2250
2264
  const location = opts.global ? "global (~/.claude/)" : "project (.claude/)";
2251
2265
  console.log(`Installed markwell skill to ${location}`);
2252
- console.log(` ${targetPath}`);
2266
+ console.log(` ${join(targetDir, "SKILL.md")}`);
2253
2267
  });
2254
2268
  }
2255
2269
 
@@ -1,3 +1,9 @@
1
+ ---
2
+ name: markwell
3
+ description: Convert documents to and from Markdown using the markwell CLI
4
+ allowed-tools: Bash
5
+ ---
6
+
1
7
  # Markwell - Document Converter
2
8
 
3
9
  Markwell converts documents to and from Markdown. Markdown is the universal hub format.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "markwell",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "Convert documents to and from Markdown. The source from which polished documents flow.",
5
5
  "type": "module",
6
6
  "main": "./dist/cli/index.js",
@@ -15,7 +15,7 @@
15
15
  "node": ">=20"
16
16
  },
17
17
  "scripts": {
18
- "build": "tsdown && cp -r src/themes dist/themes && cp -r src/skills dist/skills",
18
+ "build": "tsdown && node -e \"const fs=require('fs');fs.cpSync('src/themes','dist/themes',{recursive:true});fs.cpSync('src/skills','dist/skills',{recursive:true})\"",
19
19
  "dev": "tsdown --watch",
20
20
  "test": "vitest run",
21
21
  "test:watch": "vitest",