pm-todos 2026.6.1 → 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,6 +1,12 @@
1
1
  # Changelog
2
2
 
3
- ## 2026.6.1 - 2026-06-01
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
4
10
 
5
11
  ### Fixed
6
12
 
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":";;;kBA8GgB,GAAG;;AAJnB,wBAqPG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;kBAmcgB,GAAG;;AAJnB,wBA2QG"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
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
  // ---------------------------------------------------------------------------
@@ -29,7 +29,13 @@ class CommandError extends Error {
29
29
  // ---------------------------------------------------------------------------
30
30
  // Markdown TODO parser
31
31
  // ---------------------------------------------------------------------------
32
- 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*#*$/;
33
39
  /**
34
40
  * Read a boolean option honoring both the kebab-case long flag and the
35
41
  * camelCase key the runtime normalizes it to (e.g. `--dry-run` -> `dryRun`).
@@ -42,34 +48,309 @@ function readBoolOption(options, ...keys) {
42
48
  }
43
49
  return false;
44
50
  }
45
- 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) {
46
111
  const lines = md.split("\n");
47
112
  const todos = [];
113
+ let currentSection;
48
114
  for (let i = 0; i < lines.length; i++) {
49
- 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);
50
122
  if (match) {
123
+ const raw = match[3].trim();
124
+ const { text, priority } = extractPriority(raw);
51
125
  todos.push({
52
- indent: match[1].length,
126
+ indent: match[1].replace(/\t/g, " ").length,
53
127
  checked: match[2] !== " ",
54
- text: match[3].trim(),
128
+ text,
129
+ priority,
130
+ section: currentSection,
55
131
  lineNumber: i + 1,
132
+ file,
56
133
  });
57
134
  }
58
135
  }
59
136
  return todos;
60
137
  }
61
- function mapStatusToPm(checked) {
62
- 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";
63
148
  }
64
149
  function mapPmStatusToChecked(status) {
65
150
  return status === "closed" || status === "canceled";
66
151
  }
67
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
+ // ---------------------------------------------------------------------------
68
349
  // Extension
69
350
  // ---------------------------------------------------------------------------
70
351
  export default defineExtension({
71
352
  name: "pm-todos",
72
- version: "2026.6.1",
353
+ version: "2026.6.2",
73
354
  activate(api) {
74
355
  // -----------------------------------------------------------------------
75
356
  // Command: pm todos import <file>
@@ -77,80 +358,72 @@ export default defineExtension({
77
358
  api.registerCommand({
78
359
  name: "todos import",
79
360
  description: "Import markdown TODO items (- [ ] and - [x]) as pm items. " +
80
- "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), !).",
81
364
  intent: "import markdown checkboxes as pm items",
82
365
  examples: [
83
366
  "pm todos import TODO.md",
84
367
  "pm todos import notes.md --dry-run",
85
- "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",
86
372
  ],
87
373
  flags: [
88
374
  { long: "--dry-run", description: "Preview without writing" },
89
375
  { long: "--type", value_name: "type", description: "Item type for imported items (default: Task)" },
90
- { long: "--priority", value_name: "n", description: "Priority for imported items (0-4)" },
91
- { 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" },
92
382
  ],
93
383
  async run(ctx) {
94
- const filePath = ctx.args[0];
95
- if (!filePath) {
96
- throw new CommandError("Usage: pm todos import <file> [--dry-run] [--type Task]", EXIT_CODE.USAGE);
97
- }
98
384
  const dryRun = readBoolOption(ctx.options, "dry-run", "dryRun");
99
385
  const itemType = ctx.options["type"] || "Task";
100
386
  const priority = ctx.options["priority"];
101
- const tags = ctx.options["tags"];
102
- const absolutePath = resolve(filePath);
103
- console.error(`Parsing markdown TODOs from: ${absolutePath}`);
104
- let md;
105
- try {
106
- 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}'.`);
107
400
  }
108
- catch (err) {
109
- const msg = err instanceof Error ? err.message : String(err);
110
- const exitCode = /ENOENT|no such file/i.test(msg) ? EXIT_CODE.NOT_FOUND : EXIT_CODE.GENERIC_FAILURE;
111
- throw new CommandError(`Failed to read file: ${msg}`, exitCode);
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)];
112
407
  }
113
- const todos = parseMarkdownTodos(md);
114
- if (todos.length === 0) {
115
- 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.");
116
422
  return { imported: 0, skipped: 0 };
117
423
  }
118
- let imported = 0;
119
- let skipped = 0;
120
- for (const todo of todos) {
121
- if (dryRun) {
122
- console.error(` [dry-run] ${todo.checked ? "[x]" : "[ ]"} ${todo.text}`);
123
- imported++;
124
- continue;
125
- }
126
- try {
127
- const spawnArgs = [
128
- "--path", ctx.pm_root,
129
- "create",
130
- "--title", todo.text,
131
- "--type", itemType,
132
- "--status", mapStatusToPm(todo.checked),
133
- "--description", `Imported from ${filePath} line ${todo.lineNumber}`,
134
- ];
135
- if (priority)
136
- spawnArgs.push("--priority", priority);
137
- if (tags)
138
- spawnArgs.push("--tags", tags);
139
- const result = spawnSync("pm", spawnArgs, { encoding: "utf-8" });
140
- if (result.status !== 0) {
141
- throw new Error(result.stderr || "pm create failed");
142
- }
143
- imported++;
144
- }
145
- catch (err) {
146
- const msg = err instanceof Error ? err.message : String(err);
147
- console.error(`Line ${todo.lineNumber}: create failed — ${msg}`);
148
- skipped++;
149
- }
150
- }
151
424
  if (dryRun) {
152
425
  console.error(`[dry-run] Would import ${imported} TODO item(s), skip ${skipped}.`);
153
- return { dryRun: true, wouldImport: imported, wouldSkip: skipped };
426
+ return { dryRun: true, wouldImport: imported, wouldSkip: skipped, previews };
154
427
  }
155
428
  console.error(`Imported ${imported} TODO item(s), skipped ${skipped}.`);
156
429
  return { imported, skipped };
@@ -177,110 +450,137 @@ export default defineExtension({
177
450
  ],
178
451
  async run(ctx) {
179
452
  const outputPath = ctx.options["output"];
180
- const statusFilter = ctx.options["status"];
181
- const typeFilter = ctx.options["type"];
182
- const spawnArgs = ["--path", ctx.pm_root, "list-all", "--json"];
183
453
  console.error("Fetching pm items…");
184
- const result = spawnSync("pm", spawnArgs, { encoding: "utf-8" });
185
- if (result.status !== 0) {
186
- const msg = result.stderr || "pm list-all failed";
187
- throw new CommandError(msg);
188
- }
189
- let items = JSON.parse(result.stdout).items ?? [];
190
- if (statusFilter) {
191
- items = items.filter((i) => i.status === statusFilter);
192
- }
193
- if (typeFilter) {
194
- items = items.filter((i) => i.type === typeFilter);
195
- }
196
- 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) {
197
460
  console.error("No items found.");
198
461
  return { exported: 0 };
199
462
  }
200
- const lines = [
201
- "# TODO",
202
- "",
203
- `<!-- Exported from pm-cli on ${new Date().toISOString()} -->`,
204
- "",
205
- ];
206
- // Group: open first, then in_progress, then closed/canceled
207
- const openItems = items.filter((i) => i.status === "open" || i.status === "in_progress" || i.status === "blocked" || i.status === "draft");
208
- const closedItems = items.filter((i) => i.status === "closed" || i.status === "canceled");
209
- if (openItems.length > 0) {
210
- lines.push("## Open");
211
- lines.push("");
212
- for (const item of openItems) {
213
- const check = mapPmStatusToChecked(item.status) ? "x" : " ";
214
- const typeTag = item.type ? ` [${item.type}]` : "";
215
- lines.push(`- [${check}] ${item.title}${typeTag} <!-- ${item.id} -->`);
216
- }
217
- lines.push("");
218
- }
219
- if (closedItems.length > 0) {
220
- lines.push("## Done");
221
- lines.push("");
222
- for (const item of closedItems) {
223
- lines.push(`- [x] ${item.title} <!-- ${item.id} -->`);
224
- }
225
- lines.push("");
226
- }
227
- const markdown = lines.join("\n");
228
463
  if (outputPath) {
229
464
  const absolutePath = resolve(outputPath);
230
465
  writeFileSync(absolutePath, markdown, "utf-8");
231
- console.error(`Exported ${items.length} item(s) to: ${absolutePath}`);
232
- return { exported: items.length, file: absolutePath };
466
+ console.error(`Exported ${count} item(s) to: ${absolutePath}`);
467
+ return { exported: count, file: absolutePath };
233
468
  }
234
- console.error(`Exported ${items.length} item(s).`);
235
- return { exported: items.length, markdown };
469
+ console.error(`Exported ${count} item(s).`);
470
+ return { exported: count, markdown };
236
471
  },
237
472
  });
238
473
  // -----------------------------------------------------------------------
239
- // 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.
240
479
  // -----------------------------------------------------------------------
241
- api.registerImporter("todos-import", async (ctx) => {
242
- const filePath = ctx.options["file"];
243
- if (!filePath) {
244
- console.error("todos-import: no 'file' provided — skipping.");
245
- 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}'.`);
246
501
  }
247
- const absolutePath = resolve(filePath);
248
- console.error(`todos-import: reading ${absolutePath}`);
249
- let md;
250
- try {
251
- md = readFileSync(absolutePath, "utf-8");
502
+ else if (fileArg || fileOpt) {
503
+ files = [resolve((fileArg ?? fileOpt))];
252
504
  }
253
- catch (err) {
254
- const msg = err instanceof Error ? err.message : String(err);
255
- console.error(`todos-import: failed to read — ${msg}`);
256
- return;
505
+ else {
506
+ throw new CommandError("Usage: pm todos import <file> [--glob <pattern>] [--section <name>] [--closed-as <status>] [--dry-run]", EXIT_CODE.USAGE);
257
507
  }
258
- const todos = parseMarkdownTodos(md);
259
- if (todos.length === 0) {
260
- console.error("todos-import: no TODO items found — skipping.");
261
- 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 };
262
529
  }
263
- let imported = 0;
264
- let skipped = 0;
265
- for (const todo of todos) {
266
- try {
267
- const spawnArgs = [
268
- "--path", ctx.pm_root,
269
- "create",
270
- "--title", todo.text,
271
- "--type", "Task",
272
- "--status", mapStatusToPm(todo.checked),
273
- ];
274
- const result = spawnSync("pm", spawnArgs, { encoding: "utf-8" });
275
- if (result.status !== 0) {
276
- throw new Error(result.stderr || "pm create failed");
277
- }
278
- imported++;
279
- }
280
- catch (err) {
281
- skipped++;
282
- }
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 };
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;
283
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
+ });
284
584
  console.error(`todos-import: done — imported ${imported}, skipped ${skipped}.`);
285
585
  });
286
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.6.1",
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.6.1",
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
  },