pm-todos 2026.5.31 → 2026.6.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.6.2 - 2026-06-02
4
+
5
+ ### Added
6
+
7
+ - Enhance markdown TODO parser + native importer/exporter pipeline ([pm-todos-2e52](https://github.com/unbraind/pm-todos/blob/main/.agents/pm/features/pm-todos-2e52.toon))
8
+
9
+ ## 2026.06.01 - 2026-06-01
10
+
11
+ ### Fixed
12
+
13
+ - Command handlers threw plain Error \(no exitCode\) → runtime double-invocation ([pm-todos-3nch](https://github.com/unbraind/pm-todos/blob/main/.agents/pm/issues/pm-todos-3nch.toon))
14
+
3
15
  ## 2026.05.29 - 2026-05-29
4
16
 
5
17
  ### Added
package/README.md CHANGED
@@ -4,6 +4,8 @@ Markdown TODO round-trip for [pm-cli](https://github.com/unbraind/pm-cli).
4
4
 
5
5
  Import markdown checkboxes (`- [ ]` and `- [x]`) as pm items and export pm items back to markdown TODO lists.
6
6
 
7
+ The parser understands **nested/indented sub-tasks**, **section headers** (`## …` mapped to tags), **priority markers** (`(p1)` and `!`/`!!`/`!!!`), and can import **multiple files at once** via a `--glob` pattern.
8
+
7
9
  ---
8
10
 
9
11
  ## Installation
@@ -39,6 +41,9 @@ Parse a markdown file for `- [ ]` and `- [x]` checkboxes and create pm items.
39
41
  pm todos import TODO.md
40
42
  pm todos import notes.md --dry-run
41
43
  pm todos import backlog.md --type Task --priority 2
44
+ pm todos import --glob 'docs/**/*.md'
45
+ pm todos import TODO.md --section Backlog
46
+ pm todos import TODO.md --closed-as canceled
42
47
  ```
43
48
 
44
49
  **Flags**
@@ -47,8 +52,19 @@ pm todos import backlog.md --type Task --priority 2
47
52
  |---|---|---|
48
53
  | `--dry-run` | boolean | Preview without writing |
49
54
  | `--type <type>` | string | Item type (default: Task) |
50
- | `--priority <n>` | number | Priority (0–4) |
51
- | `--tags <tags>` | string | Comma-separated tags |
55
+ | `--priority <n>` | number | Priority (0–4); overrides markers inferred from the text |
56
+ | `--tags <tags>` | string | Comma-separated tags applied to every item |
57
+ | `--glob <pattern>` | string | Import every markdown file matching the glob (e.g. `docs/**/*.md`) instead of a single positional file |
58
+ | `--section <name>` | string | Import only items found under this `##` section heading |
59
+ | `--closed-as <status>` | string | Status assigned to checked (`- [x]`) items (default: `closed`) |
60
+ | `--no-section-tags` | boolean | Do not derive tags from section headings |
61
+
62
+ **Parsing rules**
63
+
64
+ - **Bullets**: `-`, `*` and `+` checkbox bullets are all recognised.
65
+ - **Nested sub-tasks**: indentation is preserved (sub-items are imported as their own items; indent is shown in `--dry-run`).
66
+ - **Section headers**: the nearest preceding `## Heading` is slugged (e.g. `## In Progress` → `in-progress`) and added as a tag, unless `--no-section-tags` is given.
67
+ - **Priority markers**: `(p0)`…`(p4)` set an explicit priority; trailing/leading `!`, `!!`, `!!!` map to priority `2`, `1`, `0`. Markers are stripped from the item title. An explicit `--priority` flag always wins.
52
68
 
53
69
  ### `pm todos export`
54
70
 
@@ -71,7 +87,34 @@ pm todos export --type Task
71
87
 
72
88
  ---
73
89
 
74
- ## Programmatic importer: `todos-import`
90
+ ## Native import/export pipeline
91
+
92
+ pm-todos registers a first-class `todos` importer and exporter, so markdown is a
93
+ native pm import/export format. These power the `pm todos import` / `pm todos
94
+ export` routes above and can also be driven programmatically:
95
+
96
+ ```jsonc
97
+ {
98
+ "importers": [
99
+ {
100
+ "name": "todos",
101
+ "config": {
102
+ "glob": "docs/**/*.md", // or "file": "./TODO.md"
103
+ "section": "Backlog", // optional
104
+ "closed-as": "canceled", // optional
105
+ "type": "Task" // optional
106
+ }
107
+ }
108
+ ]
109
+ }
110
+ ```
111
+
112
+ The `todos` exporter accepts `output`, `status` and `type` options and emits the
113
+ same grouped (`## Open` / `## Done`) markdown produced by `pm todos export`.
114
+
115
+ ### Legacy importer: `todos-import`
116
+
117
+ The original `todos-import` importer is retained for backward compatibility:
75
118
 
76
119
  ```jsonc
77
120
  {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;kBAoFgB,GAAG;;AAJnB,wBAoPG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;kBAmcgB,GAAG;;AAJnB,wBA2QG"}
package/dist/index.js CHANGED
@@ -1,12 +1,41 @@
1
1
  // pm-todos — Markdown TODO round-trip for pm-cli
2
- import { readFileSync, writeFileSync } from "node:fs";
3
- import { resolve } from "node:path";
2
+ import { readFileSync, writeFileSync, readdirSync, statSync } from "node:fs";
3
+ import { resolve, join, relative, sep } from "node:path";
4
4
  import { spawnSync } from "node:child_process";
5
5
  const defineExtension = ((extension) => extension);
6
6
  // ---------------------------------------------------------------------------
7
+ // Error contract
8
+ // ---------------------------------------------------------------------------
9
+ // pm's extension command runtime only treats a thrown error as a cleanly
10
+ // handled non-zero exit when the error carries a numeric `exitCode` property
11
+ // (see @unbrained/pm-cli runCommandHandler). A plain `Error` makes the runtime
12
+ // fall through to its "unhandled" path, which RE-INVOKES the command handler a
13
+ // second time and exits with a generic code. We mirror the SDK's EXIT_CODE
14
+ // contract here rather than importing it: standalone-installed extensions load
15
+ // only their own `dist/`, so `@unbrained/pm-cli` is not resolvable at runtime.
16
+ const EXIT_CODE = {
17
+ GENERIC_FAILURE: 1,
18
+ USAGE: 2,
19
+ NOT_FOUND: 3,
20
+ };
21
+ class CommandError extends Error {
22
+ exitCode;
23
+ constructor(message, exitCode = EXIT_CODE.GENERIC_FAILURE) {
24
+ super(message);
25
+ this.name = "CommandError";
26
+ this.exitCode = exitCode;
27
+ }
28
+ }
29
+ // ---------------------------------------------------------------------------
7
30
  // Markdown TODO parser
8
31
  // ---------------------------------------------------------------------------
9
- const TODO_RE = /^(\s*)- \[([ xX])\] (.+)$/;
32
+ // A checkbox line: optional leading whitespace, a `-`/`*`/`+` bullet, then the
33
+ // `[ ]` / `[x]` marker, then the text. Indentation is preserved to detect
34
+ // nested sub-tasks.
35
+ const TODO_RE = /^(\s*)[-*+] \[([ xX])\] (.+)$/;
36
+ // A markdown section header (`## Title`, any level). We treat the heading text
37
+ // as a tag for every TODO that follows it (until the next heading).
38
+ const HEADER_RE = /^(#{1,6})\s+(.+?)\s*#*$/;
10
39
  /**
11
40
  * Read a boolean option honoring both the kebab-case long flag and the
12
41
  * camelCase key the runtime normalizes it to (e.g. `--dry-run` -> `dryRun`).
@@ -19,34 +48,309 @@ function readBoolOption(options, ...keys) {
19
48
  }
20
49
  return false;
21
50
  }
22
- function parseMarkdownTodos(md) {
51
+ /**
52
+ * Read the first defined string option among the given keys (handles both the
53
+ * kebab-case and camelCase forms the runtime may use, e.g. `closed-as` /
54
+ * `closedAs`).
55
+ */
56
+ function readStringOption(options, ...keys) {
57
+ for (const key of keys) {
58
+ const v = options[key];
59
+ if (v !== undefined && v !== null)
60
+ return String(v);
61
+ }
62
+ return undefined;
63
+ }
64
+ /**
65
+ * Strip priority markers from a TODO's text and return the inferred priority.
66
+ *
67
+ * Recognised markers (case-insensitive), anywhere in the text:
68
+ * - `(p0)`..`(p4)` → that numeric priority
69
+ * - trailing/leading `!`, `!!`, `!!!` → 0, 1, 2 (more bangs = higher)
70
+ *
71
+ * Returns the cleaned text plus the inferred priority (undefined if none).
72
+ */
73
+ function extractPriority(text) {
74
+ let priority;
75
+ let cleaned = text;
76
+ const pMatch = /\(p([0-4])\)/i.exec(cleaned);
77
+ if (pMatch) {
78
+ priority = parseInt(pMatch[1], 10);
79
+ cleaned = cleaned.replace(pMatch[0], "");
80
+ }
81
+ // Bang markers: only count a contiguous run of `!` that is its own token
82
+ // (surrounded by start/space/end) so we don't strip "!" inside words.
83
+ const bangMatch = /(^|\s)(!{1,3})(?=\s|$)/.exec(cleaned);
84
+ if (bangMatch && priority === undefined) {
85
+ priority = Math.max(0, 3 - bangMatch[2].length); // ! -> 2, !! -> 1, !!! -> 0
86
+ cleaned = cleaned.replace(bangMatch[0], bangMatch[1]);
87
+ }
88
+ return { text: cleaned.replace(/\s+/g, " ").trim(), priority };
89
+ }
90
+ /**
91
+ * Normalise a section heading into a tag-safe slug (lowercase, dashes).
92
+ */
93
+ function sectionToTag(section) {
94
+ return section
95
+ .toLowerCase()
96
+ .replace(/[^a-z0-9]+/g, "-")
97
+ .replace(/^-+|-+$/g, "");
98
+ }
99
+ /**
100
+ * Parse a markdown string into TODO items.
101
+ *
102
+ * Supports:
103
+ * - `-`/`*`/`+` bullets with `[ ]` / `[x]` checkboxes
104
+ * - nested/indented sub-tasks (indentation captured on `.indent`)
105
+ * - section headers (`## Foo`) attached to every following item as `.section`
106
+ * - priority markers (`(p1)`, `!`/`!!`/`!!!`) parsed out of the text
107
+ *
108
+ * @param file absolute source path recorded on each item (for provenance)
109
+ */
110
+ function parseMarkdownTodos(md, file) {
23
111
  const lines = md.split("\n");
24
112
  const todos = [];
113
+ let currentSection;
25
114
  for (let i = 0; i < lines.length; i++) {
26
- const match = TODO_RE.exec(lines[i]);
115
+ const line = lines[i];
116
+ const header = HEADER_RE.exec(line);
117
+ if (header) {
118
+ currentSection = header[2].trim();
119
+ continue;
120
+ }
121
+ const match = TODO_RE.exec(line);
27
122
  if (match) {
123
+ const raw = match[3].trim();
124
+ const { text, priority } = extractPriority(raw);
28
125
  todos.push({
29
- indent: match[1].length,
126
+ indent: match[1].replace(/\t/g, " ").length,
30
127
  checked: match[2] !== " ",
31
- text: match[3].trim(),
128
+ text,
129
+ priority,
130
+ section: currentSection,
32
131
  lineNumber: i + 1,
132
+ file,
33
133
  });
34
134
  }
35
135
  }
36
136
  return todos;
37
137
  }
38
- function mapStatusToPm(checked) {
39
- return checked ? "closed" : "open";
138
+ /**
139
+ * Filter parsed todos to a single section (matched case-insensitively against
140
+ * the raw heading text).
141
+ */
142
+ function filterBySection(todos, section) {
143
+ const want = section.trim().toLowerCase();
144
+ return todos.filter((t) => (t.section ?? "").toLowerCase() === want);
145
+ }
146
+ function mapStatusToPm(checked, closedAs) {
147
+ return checked ? closedAs : "open";
40
148
  }
41
149
  function mapPmStatusToChecked(status) {
42
150
  return status === "closed" || status === "canceled";
43
151
  }
44
152
  // ---------------------------------------------------------------------------
153
+ // File discovery (glob)
154
+ // ---------------------------------------------------------------------------
155
+ /**
156
+ * Convert a simple glob pattern (supporting `*`, `?`, `**`) into a RegExp that
157
+ * matches a path relative to the base directory (with `/` separators).
158
+ */
159
+ function globToRegExp(glob) {
160
+ let re = "";
161
+ for (let i = 0; i < glob.length; i++) {
162
+ const ch = glob[i];
163
+ if (ch === "*") {
164
+ if (glob[i + 1] === "*") {
165
+ // `**` matches across directory separators
166
+ re += ".*";
167
+ i++;
168
+ if (glob[i + 1] === "/")
169
+ i++; // swallow the trailing slash of `**/`
170
+ }
171
+ else {
172
+ re += "[^/]*";
173
+ }
174
+ }
175
+ else if (ch === "?") {
176
+ re += "[^/]";
177
+ }
178
+ else if (".+^${}()|[]\\".includes(ch)) {
179
+ re += "\\" + ch;
180
+ }
181
+ else {
182
+ re += ch;
183
+ }
184
+ }
185
+ return new RegExp("^" + re + "$");
186
+ }
187
+ /**
188
+ * Resolve a `--glob <pattern>` into a sorted list of absolute file paths.
189
+ * Walks the working directory (capped depth) and matches relative paths.
190
+ */
191
+ function resolveGlob(pattern, cwd) {
192
+ const re = globToRegExp(pattern);
193
+ const out = [];
194
+ const walk = (dir, depth) => {
195
+ if (depth > 12)
196
+ return;
197
+ let entries;
198
+ try {
199
+ entries = readdirSync(dir);
200
+ }
201
+ catch {
202
+ return;
203
+ }
204
+ for (const entry of entries) {
205
+ if (entry === "node_modules" || entry === ".git" || entry === "dist")
206
+ continue;
207
+ const abs = join(dir, entry);
208
+ let st;
209
+ try {
210
+ st = statSync(abs);
211
+ }
212
+ catch {
213
+ continue;
214
+ }
215
+ if (st.isDirectory()) {
216
+ walk(abs, depth + 1);
217
+ }
218
+ else if (st.isFile()) {
219
+ const rel = relative(cwd, abs).split(sep).join("/");
220
+ if (re.test(rel))
221
+ out.push(abs);
222
+ }
223
+ }
224
+ };
225
+ walk(cwd, 0);
226
+ return out.sort();
227
+ }
228
+ /**
229
+ * Read, parse and (unless dry-run) create pm items for every TODO found across
230
+ * the given files. Single code path shared by the command and the importer.
231
+ */
232
+ function runTodoImport(opts) {
233
+ let imported = 0;
234
+ let skipped = 0;
235
+ const previews = [];
236
+ for (const file of opts.files) {
237
+ let md;
238
+ try {
239
+ md = readFileSync(file, "utf-8");
240
+ }
241
+ catch (err) {
242
+ const msg = err instanceof Error ? err.message : String(err);
243
+ const exitCode = /ENOENT|no such file/i.test(msg) ? EXIT_CODE.NOT_FOUND : EXIT_CODE.GENERIC_FAILURE;
244
+ throw new CommandError(`Failed to read file ${file}: ${msg}`, exitCode);
245
+ }
246
+ let todos = parseMarkdownTodos(md, file);
247
+ if (opts.section)
248
+ todos = filterBySection(todos, opts.section);
249
+ for (const todo of todos) {
250
+ const tags = [...opts.extraTags];
251
+ if (opts.sectionTags && todo.section) {
252
+ const tag = sectionToTag(todo.section);
253
+ if (tag && !tags.includes(tag))
254
+ tags.push(tag);
255
+ }
256
+ // CLI --priority wins; otherwise use the priority inferred from markers.
257
+ const priority = opts.priority !== undefined && opts.priority !== ""
258
+ ? opts.priority
259
+ : todo.priority !== undefined
260
+ ? String(todo.priority)
261
+ : undefined;
262
+ const status = mapStatusToPm(todo.checked, opts.closedAs);
263
+ if (opts.dryRun) {
264
+ previews.push({
265
+ checked: todo.checked,
266
+ title: todo.text,
267
+ status,
268
+ priority,
269
+ tags,
270
+ section: todo.section,
271
+ indent: todo.indent,
272
+ file: todo.file,
273
+ line: todo.lineNumber,
274
+ });
275
+ console.error(` [dry-run] ${todo.checked ? "[x]" : "[ ]"} ${" ".repeat(Math.floor(todo.indent / 2))}${todo.text}` +
276
+ (tags.length ? ` (tags: ${tags.join(",")})` : "") +
277
+ (priority !== undefined ? ` (p${priority})` : ""));
278
+ imported++;
279
+ continue;
280
+ }
281
+ try {
282
+ const spawnArgs = [
283
+ "--path", opts.pmRoot,
284
+ "create",
285
+ "--title", todo.text,
286
+ "--type", opts.itemType,
287
+ "--status", status,
288
+ "--description", `Imported from ${todo.file ?? "stdin"} line ${todo.lineNumber}`,
289
+ ];
290
+ if (priority !== undefined && priority !== "")
291
+ spawnArgs.push("--priority", priority);
292
+ if (tags.length > 0)
293
+ spawnArgs.push("--tags", tags.join(","));
294
+ const result = spawnSync("pm", spawnArgs, { encoding: "utf-8" });
295
+ if (result.status !== 0) {
296
+ throw new Error(result.stderr || "pm create failed");
297
+ }
298
+ imported++;
299
+ }
300
+ catch (err) {
301
+ const msg = err instanceof Error ? err.message : String(err);
302
+ console.error(`${todo.file}:${todo.lineNumber}: create failed — ${msg}`);
303
+ skipped++;
304
+ }
305
+ }
306
+ }
307
+ return { imported, skipped, previews: opts.dryRun ? previews : undefined };
308
+ }
309
+ function buildTodoMarkdown(opts) {
310
+ const result = spawnSync("pm", ["--path", opts.pmRoot, "list-all", "--json"], { encoding: "utf-8" });
311
+ if (result.status !== 0) {
312
+ throw new CommandError(result.stderr || "pm list-all failed");
313
+ }
314
+ let items = JSON.parse(result.stdout).items ?? [];
315
+ if (opts.statusFilter)
316
+ items = items.filter((i) => i.status === opts.statusFilter);
317
+ if (opts.typeFilter)
318
+ items = items.filter((i) => i.type === opts.typeFilter);
319
+ if (items.length === 0) {
320
+ return { markdown: "", count: 0 };
321
+ }
322
+ const lines = [
323
+ "# TODO",
324
+ "",
325
+ `<!-- Exported from pm-cli on ${new Date().toISOString()} -->`,
326
+ "",
327
+ ];
328
+ const openItems = items.filter((i) => i.status === "open" || i.status === "in_progress" || i.status === "blocked" || i.status === "draft");
329
+ const closedItems = items.filter((i) => i.status === "closed" || i.status === "canceled");
330
+ if (openItems.length > 0) {
331
+ lines.push("## Open", "");
332
+ for (const item of openItems) {
333
+ const check = mapPmStatusToChecked(item.status) ? "x" : " ";
334
+ const typeTag = item.type ? ` [${item.type}]` : "";
335
+ lines.push(`- [${check}] ${item.title}${typeTag} <!-- ${item.id} -->`);
336
+ }
337
+ lines.push("");
338
+ }
339
+ if (closedItems.length > 0) {
340
+ lines.push("## Done", "");
341
+ for (const item of closedItems) {
342
+ lines.push(`- [x] ${item.title} <!-- ${item.id} -->`);
343
+ }
344
+ lines.push("");
345
+ }
346
+ return { markdown: lines.join("\n"), count: items.length };
347
+ }
348
+ // ---------------------------------------------------------------------------
45
349
  // Extension
46
350
  // ---------------------------------------------------------------------------
47
351
  export default defineExtension({
48
352
  name: "pm-todos",
49
- version: "2026.5.31",
353
+ version: "2026.6.2",
50
354
  activate(api) {
51
355
  // -----------------------------------------------------------------------
52
356
  // Command: pm todos import <file>
@@ -54,79 +358,72 @@ export default defineExtension({
54
358
  api.registerCommand({
55
359
  name: "todos import",
56
360
  description: "Import markdown TODO items (- [ ] and - [x]) as pm items. " +
57
- "Each checkbox becomes a pm Task; checked items are closed.",
361
+ "Each checkbox becomes a pm Task; checked items are closed. " +
362
+ "Supports nested sub-tasks, multiple files via --glob, section headers " +
363
+ "(## …) mapped to tags, and priority markers ((p1), !).",
58
364
  intent: "import markdown checkboxes as pm items",
59
365
  examples: [
60
366
  "pm todos import TODO.md",
61
367
  "pm todos import notes.md --dry-run",
62
- "pm todos import backlog.md --type Task",
368
+ "pm todos import backlog.md --type Task --priority 2",
369
+ "pm todos import --glob 'docs/**/*.md'",
370
+ "pm todos import TODO.md --section Backlog",
371
+ "pm todos import TODO.md --closed-as canceled",
63
372
  ],
64
373
  flags: [
65
374
  { long: "--dry-run", description: "Preview without writing" },
66
375
  { long: "--type", value_name: "type", description: "Item type for imported items (default: Task)" },
67
- { long: "--priority", value_name: "n", description: "Priority for imported items (0-4)" },
68
- { long: "--tags", value_name: "tags", description: "Comma-separated tags to apply" },
376
+ { long: "--priority", value_name: "n", description: "Priority for imported items (0-4); overrides inferred markers" },
377
+ { long: "--tags", value_name: "tags", description: "Comma-separated tags to apply to all items" },
378
+ { long: "--glob", value_name: "pattern", description: "Import every markdown file matching this glob (e.g. 'docs/**/*.md')" },
379
+ { long: "--section", value_name: "name", description: "Import only items under this ## section heading" },
380
+ { long: "--closed-as", value_name: "status", description: "Status to assign checked items (default: closed)" },
381
+ { long: "--no-section-tags", description: "Do not derive tags from section headings" },
69
382
  ],
70
383
  async run(ctx) {
71
- const filePath = ctx.args[0];
72
- if (!filePath) {
73
- throw new Error("Usage: pm todos import <file> [--dry-run] [--type Task]");
74
- }
75
384
  const dryRun = readBoolOption(ctx.options, "dry-run", "dryRun");
76
385
  const itemType = ctx.options["type"] || "Task";
77
386
  const priority = ctx.options["priority"];
78
- const tags = ctx.options["tags"];
79
- const absolutePath = resolve(filePath);
80
- console.error(`Parsing markdown TODOs from: ${absolutePath}`);
81
- let md;
82
- try {
83
- md = readFileSync(absolutePath, "utf-8");
387
+ const tagsOpt = ctx.options["tags"];
388
+ const glob = readStringOption(ctx.options, "glob");
389
+ const section = readStringOption(ctx.options, "section");
390
+ const closedAs = readStringOption(ctx.options, "closed-as", "closedAs") ?? "closed";
391
+ // `--no-section-tags` arrives as sectionTags=false; default on.
392
+ const sectionTags = ctx.options["sectionTags"] !== false && ctx.options["section-tags"] !== false;
393
+ let files;
394
+ if (glob) {
395
+ files = resolveGlob(glob, process.cwd());
396
+ if (files.length === 0) {
397
+ throw new CommandError(`No files matched glob: ${glob}`, EXIT_CODE.NOT_FOUND);
398
+ }
399
+ console.error(`Matched ${files.length} file(s) for glob '${glob}'.`);
84
400
  }
85
- catch (err) {
86
- const msg = err instanceof Error ? err.message : String(err);
87
- throw new Error(`Failed to read file: ${msg}`);
401
+ else {
402
+ const filePath = ctx.args[0];
403
+ if (!filePath) {
404
+ throw new CommandError("Usage: pm todos import <file> [--glob <pattern>] [--section <name>] [--closed-as <status>] [--dry-run]", EXIT_CODE.USAGE);
405
+ }
406
+ files = [resolve(filePath)];
88
407
  }
89
- const todos = parseMarkdownTodos(md);
90
- if (todos.length === 0) {
91
- console.error("No TODO items found in file.");
408
+ const extraTags = (tagsOpt ?? "").split(",").map((t) => t.trim()).filter(Boolean);
409
+ const { imported, skipped, previews } = runTodoImport({
410
+ files,
411
+ itemType,
412
+ closedAs,
413
+ priority,
414
+ extraTags,
415
+ section,
416
+ sectionTags,
417
+ dryRun,
418
+ pmRoot: ctx.pm_root,
419
+ });
420
+ if (imported === 0 && skipped === 0) {
421
+ console.error("No TODO items found.");
92
422
  return { imported: 0, skipped: 0 };
93
423
  }
94
- let imported = 0;
95
- let skipped = 0;
96
- for (const todo of todos) {
97
- if (dryRun) {
98
- console.error(` [dry-run] ${todo.checked ? "[x]" : "[ ]"} ${todo.text}`);
99
- imported++;
100
- continue;
101
- }
102
- try {
103
- const spawnArgs = [
104
- "--path", ctx.pm_root,
105
- "create",
106
- "--title", todo.text,
107
- "--type", itemType,
108
- "--status", mapStatusToPm(todo.checked),
109
- "--description", `Imported from ${filePath} line ${todo.lineNumber}`,
110
- ];
111
- if (priority)
112
- spawnArgs.push("--priority", priority);
113
- if (tags)
114
- spawnArgs.push("--tags", tags);
115
- const result = spawnSync("pm", spawnArgs, { encoding: "utf-8" });
116
- if (result.status !== 0) {
117
- throw new Error(result.stderr || "pm create failed");
118
- }
119
- imported++;
120
- }
121
- catch (err) {
122
- const msg = err instanceof Error ? err.message : String(err);
123
- console.error(`Line ${todo.lineNumber}: create failed — ${msg}`);
124
- skipped++;
125
- }
126
- }
127
424
  if (dryRun) {
128
425
  console.error(`[dry-run] Would import ${imported} TODO item(s), skip ${skipped}.`);
129
- return { dryRun: true, wouldImport: imported, wouldSkip: skipped };
426
+ return { dryRun: true, wouldImport: imported, wouldSkip: skipped, previews };
130
427
  }
131
428
  console.error(`Imported ${imported} TODO item(s), skipped ${skipped}.`);
132
429
  return { imported, skipped };
@@ -153,110 +450,137 @@ export default defineExtension({
153
450
  ],
154
451
  async run(ctx) {
155
452
  const outputPath = ctx.options["output"];
156
- const statusFilter = ctx.options["status"];
157
- const typeFilter = ctx.options["type"];
158
- const spawnArgs = ["--path", ctx.pm_root, "list-all", "--json"];
159
453
  console.error("Fetching pm items…");
160
- const result = spawnSync("pm", spawnArgs, { encoding: "utf-8" });
161
- if (result.status !== 0) {
162
- const msg = result.stderr || "pm list-all failed";
163
- throw new Error(msg);
164
- }
165
- let items = JSON.parse(result.stdout).items ?? [];
166
- if (statusFilter) {
167
- items = items.filter((i) => i.status === statusFilter);
168
- }
169
- if (typeFilter) {
170
- items = items.filter((i) => i.type === typeFilter);
171
- }
172
- if (items.length === 0) {
454
+ const { markdown, count } = buildTodoMarkdown({
455
+ statusFilter: ctx.options["status"],
456
+ typeFilter: ctx.options["type"],
457
+ pmRoot: ctx.pm_root,
458
+ });
459
+ if (count === 0) {
173
460
  console.error("No items found.");
174
461
  return { exported: 0 };
175
462
  }
176
- const lines = [
177
- "# TODO",
178
- "",
179
- `<!-- Exported from pm-cli on ${new Date().toISOString()} -->`,
180
- "",
181
- ];
182
- // Group: open first, then in_progress, then closed/canceled
183
- const openItems = items.filter((i) => i.status === "open" || i.status === "in_progress" || i.status === "blocked" || i.status === "draft");
184
- const closedItems = items.filter((i) => i.status === "closed" || i.status === "canceled");
185
- if (openItems.length > 0) {
186
- lines.push("## Open");
187
- lines.push("");
188
- for (const item of openItems) {
189
- const check = mapPmStatusToChecked(item.status) ? "x" : " ";
190
- const typeTag = item.type ? ` [${item.type}]` : "";
191
- lines.push(`- [${check}] ${item.title}${typeTag} <!-- ${item.id} -->`);
192
- }
193
- lines.push("");
194
- }
195
- if (closedItems.length > 0) {
196
- lines.push("## Done");
197
- lines.push("");
198
- for (const item of closedItems) {
199
- lines.push(`- [x] ${item.title} <!-- ${item.id} -->`);
200
- }
201
- lines.push("");
202
- }
203
- const markdown = lines.join("\n");
204
463
  if (outputPath) {
205
464
  const absolutePath = resolve(outputPath);
206
465
  writeFileSync(absolutePath, markdown, "utf-8");
207
- console.error(`Exported ${items.length} item(s) to: ${absolutePath}`);
208
- return { exported: items.length, file: absolutePath };
466
+ console.error(`Exported ${count} item(s) to: ${absolutePath}`);
467
+ return { exported: count, file: absolutePath };
209
468
  }
210
- console.error(`Exported ${items.length} item(s).`);
211
- return { exported: items.length, markdown };
469
+ console.error(`Exported ${count} item(s).`);
470
+ return { exported: count, markdown };
212
471
  },
213
472
  });
214
473
  // -----------------------------------------------------------------------
215
- // Importer: todos-import
474
+ // Importer: todos (native `pm import todos` pipeline)
475
+ //
476
+ // Driven by options (config-driven import). Accepts the same knobs as the
477
+ // command: `file`, `glob`, `section`, `closed-as`, `type`, `priority`,
478
+ // `tags`. Reuses the shared import core so behaviour stays identical.
216
479
  // -----------------------------------------------------------------------
217
- api.registerImporter("todos-import", async (ctx) => {
218
- const filePath = ctx.options["file"];
219
- if (!filePath) {
220
- console.error("todos-import: no 'file' provided — skipping.");
221
- return;
480
+ // NOTE: registering the importer under the name "todos" makes the pm
481
+ // runtime route `pm todos import` through THIS handler (the action contract
482
+ // shadows the like-named registerCommand). So this handler is the single
483
+ // source of truth for `pm todos import` and must accept the positional file
484
+ // argument (`ctx.args[0]`) exactly as the command did — otherwise the
485
+ // existing CLI usage would silently break.
486
+ api.registerImporter("todos", async (ctx) => {
487
+ const dryRun = readBoolOption(ctx.options, "dry-run", "dryRun");
488
+ const glob = readStringOption(ctx.options, "glob");
489
+ const fileArg = (ctx.args && ctx.args[0]);
490
+ const fileOpt = readStringOption(ctx.options, "file");
491
+ let files;
492
+ if (glob) {
493
+ files = resolveGlob(glob, process.cwd());
494
+ if (files.length === 0 && ctx.pm_root) {
495
+ files = resolveGlob(glob, resolve(ctx.pm_root, ".."));
496
+ }
497
+ if (files.length === 0) {
498
+ throw new CommandError(`No files matched glob: ${glob}`, EXIT_CODE.NOT_FOUND);
499
+ }
500
+ console.error(`Matched ${files.length} file(s) for glob '${glob}'.`);
222
501
  }
223
- const absolutePath = resolve(filePath);
224
- console.error(`todos-import: reading ${absolutePath}`);
225
- let md;
226
- try {
227
- md = readFileSync(absolutePath, "utf-8");
502
+ else if (fileArg || fileOpt) {
503
+ files = [resolve((fileArg ?? fileOpt))];
228
504
  }
229
- catch (err) {
230
- const msg = err instanceof Error ? err.message : String(err);
231
- console.error(`todos-import: failed to read — ${msg}`);
232
- return;
505
+ else {
506
+ throw new CommandError("Usage: pm todos import <file> [--glob <pattern>] [--section <name>] [--closed-as <status>] [--dry-run]", EXIT_CODE.USAGE);
233
507
  }
234
- const todos = parseMarkdownTodos(md);
235
- if (todos.length === 0) {
236
- console.error("todos-import: no TODO items found — skipping.");
237
- return;
508
+ const itemType = readStringOption(ctx.options, "type") ?? "Task";
509
+ const closedAs = readStringOption(ctx.options, "closed-as", "closedAs") ?? "closed";
510
+ const priority = readStringOption(ctx.options, "priority");
511
+ const section = readStringOption(ctx.options, "section");
512
+ const extraTags = (readStringOption(ctx.options, "tags") ?? "")
513
+ .split(",").map((t) => t.trim()).filter(Boolean);
514
+ const sectionTags = ctx.options["sectionTags"] !== false && ctx.options["section-tags"] !== false;
515
+ const { imported, skipped, previews } = runTodoImport({
516
+ files,
517
+ itemType,
518
+ closedAs,
519
+ priority,
520
+ extraTags,
521
+ section,
522
+ sectionTags,
523
+ dryRun,
524
+ pmRoot: ctx.pm_root,
525
+ });
526
+ if (imported === 0 && skipped === 0) {
527
+ console.error("No TODO items found.");
528
+ return { imported: 0, skipped: 0 };
238
529
  }
239
- let imported = 0;
240
- let skipped = 0;
241
- for (const todo of todos) {
242
- try {
243
- const spawnArgs = [
244
- "--path", ctx.pm_root,
245
- "create",
246
- "--title", todo.text,
247
- "--type", "Task",
248
- "--status", mapStatusToPm(todo.checked),
249
- ];
250
- const result = spawnSync("pm", spawnArgs, { encoding: "utf-8" });
251
- if (result.status !== 0) {
252
- throw new Error(result.stderr || "pm create failed");
253
- }
254
- imported++;
255
- }
256
- catch (err) {
257
- skipped++;
258
- }
530
+ if (dryRun) {
531
+ console.error(`[dry-run] Would import ${imported} TODO item(s), skip ${skipped}.`);
532
+ return { dryRun: true, wouldImport: imported, wouldSkip: skipped, previews };
259
533
  }
534
+ console.error(`Imported ${imported} TODO item(s), skipped ${skipped}.`);
535
+ return { imported, skipped };
536
+ });
537
+ // -----------------------------------------------------------------------
538
+ // Exporter: todos (native `pm export todos` pipeline)
539
+ //
540
+ // Mirrors the `todos export` command so markdown is a first-class
541
+ // import/export pair. Writes to `--output` or prints to stdout.
542
+ // -----------------------------------------------------------------------
543
+ api.registerExporter("todos", async (ctx) => {
544
+ const outputPath = readStringOption(ctx.options, "output");
545
+ const { markdown, count } = buildTodoMarkdown({
546
+ statusFilter: readStringOption(ctx.options, "status"),
547
+ typeFilter: readStringOption(ctx.options, "type"),
548
+ pmRoot: ctx.pm_root,
549
+ });
550
+ if (count === 0) {
551
+ console.error("todos: no items found.");
552
+ return { exported: 0 };
553
+ }
554
+ if (outputPath) {
555
+ const absolutePath = resolve(outputPath);
556
+ writeFileSync(absolutePath, markdown, "utf-8");
557
+ console.error(`todos: wrote ${count} item(s) to ${absolutePath}`);
558
+ return { exported: count, file: absolutePath };
559
+ }
560
+ console.log(markdown);
561
+ return { exported: count, markdown };
562
+ });
563
+ // -----------------------------------------------------------------------
564
+ // Importer: todos-import (legacy alias — retained for backward compat)
565
+ // -----------------------------------------------------------------------
566
+ api.registerImporter("todos-import", async (ctx) => {
567
+ const filePath = readStringOption(ctx.options, "file");
568
+ if (!filePath) {
569
+ console.error("todos-import: no 'file' provided — skipping.");
570
+ return;
571
+ }
572
+ const closedAs = readStringOption(ctx.options, "closed-as", "closedAs") ?? "closed";
573
+ const { imported, skipped } = runTodoImport({
574
+ files: [resolve(filePath)],
575
+ itemType: readStringOption(ctx.options, "type") ?? "Task",
576
+ closedAs,
577
+ priority: readStringOption(ctx.options, "priority"),
578
+ extraTags: [],
579
+ section: readStringOption(ctx.options, "section"),
580
+ sectionTags: false,
581
+ dryRun: false,
582
+ pmRoot: ctx.pm_root,
583
+ });
260
584
  console.error(`todos-import: done — imported ${imported}, skipped ${skipped}.`);
261
585
  });
262
586
  },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-todos",
3
- "version": "2026.5.31",
3
+ "version": "2026.6.2",
4
4
  "description": "Markdown TODO round-trip. Import markdown checkboxes as pm items and export pm items back to markdown TODO lists.",
5
5
  "author": "@unbraind",
6
6
  "entry": "./dist/index.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-todos",
3
- "version": "2026.5.31",
3
+ "version": "2026.6.2",
4
4
  "description": "Markdown TODO round-trip extension for pm-cli",
5
5
  "repository": {
6
6
  "type": "git",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^25.9.1",
41
- "@unbrained/pm-cli": "^2026.5.29",
41
+ "@unbrained/pm-cli": "^2026.5.31",
42
42
  "pm-changelog": "^2026.5.29-2",
43
43
  "typescript": "^6.0.3"
44
44
  },