pm-github 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
+ - Adopt full SDK capability surface: native importer/exporter, schema fields, afterCommand hook, richer import flags ([pm-github-gh83](https://github.com/unbraind/pm-github/blob/main/.agents/pm/features/pm-github-gh83.toon))
8
+
9
+ ## 2026.06.01 - 2026-06-01
4
10
 
5
11
  ### Fixed
6
12
 
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # pm-github
2
2
 
3
- GitHub Issues importer for [pm-cli](https://github.com/unbraind/pm-cli).
3
+ GitHub Issues importer **and exporter** for [pm-cli](https://github.com/unbraind/pm-cli).
4
4
 
5
- Fetch issues from any public GitHub repo and create pm items. No authentication needed (uses unauthenticated API, 60 req/hr rate limit).
5
+ Import issues from any GitHub repo as pm items, export pm items back as a GitHub-issues payload, and track GitHub provenance on each item. Works unauthenticated (60 req/hr); set `GITHUB_TOKEN`/`GH_TOKEN` or run `gh auth login` for 5000 req/hr and private repos.
6
6
 
7
7
  ---
8
8
 
@@ -12,26 +12,61 @@ Fetch issues from any public GitHub repo and create pm items. No authentication
12
12
  pm install github.com/unbraind/pm-github --global
13
13
  ```
14
14
 
15
- ## Commands
15
+ ## Capabilities
16
16
 
17
- ### `pm gh-issues import <owner/repo>`
17
+ | SDK capability | What it provides |
18
+ |---|---|
19
+ | `importers` | `pm github import <owner/repo>` — native import pipeline |
20
+ | `importers` (exporter) | `pm github export` — render pm items as a GitHub-issues payload |
21
+ | `commands` | `pm gh-issues import <owner/repo>` — legacy alias of the importer |
22
+ | `schema` | declares `github_url`, `github_number`, `github_state` item fields |
23
+ | `hooks` | `afterCommand` — opt-in sync reminder (`PM_GITHUB_SYNC`) for linked items |
24
+
25
+ ## Import
26
+
27
+ ### `pm github import <owner/repo>` (or `pm gh-issues import`)
18
28
 
19
29
  ```bash
20
- pm gh-issues import unbraind/pm-cli
21
- pm gh-issues import unbraind/pm-cli --all
22
- pm gh-issues import owner/repo --labels bug,enhancement
23
- pm gh-issues import owner/repo --dry-run
30
+ pm github import unbraind/pm-cli
31
+ pm github import owner/repo --state all
32
+ pm github import owner/repo --labels bug,enhancement
33
+ pm github import owner/repo --since 2026-01-01T00:00:00Z # incremental sync
34
+ pm github import owner/repo --assignee octocat
35
+ pm github import owner/repo --milestone "v1.0"
36
+ pm github import owner/repo --include-prs
37
+ pm github import owner/repo --dry-run
24
38
  ```
25
39
 
26
40
  **Flags**
27
41
 
28
42
  | Flag | Type | Description |
29
43
  |---|---|---|
30
- | `--all` | boolean | Include closed issues (default: open only) |
44
+ | `--all` | boolean | Include closed issues (shorthand for `--state all`) |
45
+ | `--state <state>` | string | `open` \| `closed` \| `all` (default: open) |
31
46
  | `--labels <labels>` | string | Comma-separated label filter |
47
+ | `--since <iso>` | string | Only issues updated after this ISO timestamp (incremental sync) |
48
+ | `--assignee <login>` | string | Filter by assignee login |
49
+ | `--milestone <name>` | string | Filter by milestone title |
50
+ | `--include-prs` | boolean | Include pull requests (default: skip PRs) |
32
51
  | `--dry-run` | boolean | Preview without writing |
33
52
  | `--type <type>` | string | Override pm item type (default: Issue) |
34
53
 
54
+ ## Export
55
+
56
+ ### `pm github export`
57
+
58
+ ```bash
59
+ pm github export # JSON GitHub-issues payload to stdout
60
+ pm github export --format md # markdown
61
+ pm github export --repo owner/repo --push # create the issues on GitHub (requires a token)
62
+ ```
63
+
64
+ | Flag | Type | Description |
65
+ |---|---|---|
66
+ | `--format <json\|md>` | string | Output format (default: json) |
67
+ | `--repo <owner/repo>` | string | Target repo for `--push` |
68
+ | `--push` | boolean | Create issues on GitHub (requires `GITHUB_TOKEN`/`GH_TOKEN`) |
69
+
35
70
  ## License
36
71
 
37
72
  MIT
package/dist/index.d.ts CHANGED
@@ -1,3 +1,32 @@
1
+ interface GhIssue {
2
+ number: number;
3
+ title: string;
4
+ body: string | null;
5
+ state: "open" | "closed";
6
+ labels: Array<{
7
+ name: string;
8
+ }>;
9
+ assignee: {
10
+ login: string;
11
+ } | null;
12
+ milestone: {
13
+ title: string;
14
+ } | null;
15
+ created_at: string;
16
+ updated_at: string;
17
+ html_url: string;
18
+ pull_request?: unknown;
19
+ }
20
+ interface ImportOptions {
21
+ state: "open" | "closed" | "all";
22
+ labels?: string;
23
+ since?: string;
24
+ assignee?: string;
25
+ milestone?: string;
26
+ includePrs: boolean;
27
+ itemType: string;
28
+ dryRun: boolean;
29
+ }
1
30
  export declare function resolveGitHubToken(): string | undefined;
2
31
  export declare function parseNextLink(linkHeader?: string): string | undefined;
3
32
  export declare function optionEnabled(options: Record<string, unknown>, ...keys: string[]): boolean;
@@ -11,6 +40,9 @@ export declare class CommandError extends Error {
11
40
  exitCode: number;
12
41
  constructor(message: string, exitCode?: number);
13
42
  }
43
+ export declare function buildIssuesUrl(repo: string, opts: ImportOptions): string;
44
+ export declare function applyClientFilters(issues: GhIssue[], opts: ImportOptions): GhIssue[];
45
+ export declare function parseImportOptions(options: Record<string, unknown>): ImportOptions;
14
46
  declare const _default: {
15
47
  name: string;
16
48
  version: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAuCA,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAavD;AAkCD,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOrE;AAQD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAK1F;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAMpG;AAUD,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAEX,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,EAAE,MAAM,CAAC;gBACL,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAkC;CAK1E;;;;kBAUe,GAAG;;AAJnB,wBAiKG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAoBA,UAAU,OAAO;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAcD,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAavD;AAmDD,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOrE;AAQD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAK1F;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAMpG;AAUD,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAEX,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,EAAE,MAAM,CAAC;gBACL,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAkC;CAK1E;AASD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAMxE;AAuBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,EAAE,CAOpF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAoBlF;;;;kBAuKe,GAAG;;AAJnB,wBAgHG"}
package/dist/index.js CHANGED
@@ -1,4 +1,11 @@
1
- // pm-github — GitHub Issues importer for pm-cli
1
+ // pm-github — GitHub Issues importer/exporter for pm-cli
2
+ //
3
+ // Capabilities (see manifest.json):
4
+ // commands — `pm gh-issues import` (legacy, full-featured)
5
+ // importers — `pm github import <owner/repo>` (native import pipeline)
6
+ // exporters — `pm github export` (render pm items as a GitHub-issues payload)
7
+ // schema — declares github_url / github_number / github_state item fields
8
+ // hooks — afterCommand: opt-in sync hints for github-linked items
2
9
  import https from "node:https";
3
10
  import { spawnSync } from "node:child_process";
4
11
  const defineExtension = ((extension) => extension);
@@ -22,7 +29,7 @@ export function resolveGitHubToken() {
22
29
  }
23
30
  return undefined;
24
31
  }
25
- function fetchJSON(url, token) {
32
+ function request(method, url, token, payload) {
26
33
  return new Promise((resolve, reject) => {
27
34
  const headers = {
28
35
  "User-Agent": "pm-github",
@@ -30,28 +37,40 @@ function fetchJSON(url, token) {
30
37
  };
31
38
  if (token)
32
39
  headers.Authorization = `Bearer ${token}`;
33
- const req = https.get(url, { headers }, (res) => {
40
+ if (payload) {
41
+ headers["Content-Type"] = "application/json";
42
+ headers["Content-Length"] = String(Buffer.byteLength(payload));
43
+ }
44
+ const req = https.request(url, { method, headers }, (res) => {
34
45
  const status = res.statusCode ?? 0;
35
46
  if (status >= 300 && status < 400 && res.headers.location) {
36
- fetchJSON(res.headers.location, token).then(resolve, reject);
37
- return;
38
- }
39
- if (status !== 200) {
40
- res.resume();
41
- reject(new Error(`GitHub API returned HTTP ${status}`));
47
+ request(method, res.headers.location, token, payload).then(resolve, reject);
42
48
  return;
43
49
  }
44
50
  const chunks = [];
45
51
  res.on("data", (c) => chunks.push(c));
46
- res.on("end", () => resolve({
47
- body: Buffer.concat(chunks).toString("utf-8"),
48
- linkHeader: typeof res.headers.link === "string" ? res.headers.link : undefined,
49
- }));
52
+ res.on("end", () => {
53
+ const body = Buffer.concat(chunks).toString("utf-8");
54
+ if (status < 200 || status >= 300) {
55
+ reject(new Error(`GitHub API returned HTTP ${status}`));
56
+ return;
57
+ }
58
+ resolve({
59
+ body,
60
+ linkHeader: typeof res.headers.link === "string" ? res.headers.link : undefined,
61
+ });
62
+ });
50
63
  });
51
64
  req.on("error", reject);
52
65
  req.setTimeout(30000, () => { req.destroy(); reject(new Error("timeout")); });
66
+ if (payload)
67
+ req.write(payload);
68
+ req.end();
53
69
  });
54
70
  }
71
+ function fetchJSON(url, token) {
72
+ return request("GET", url, token);
73
+ }
55
74
  // Follow GitHub's RFC 5988 Link header so repos with more than one page of
56
75
  // issues are fully imported instead of silently truncated at per_page.
57
76
  export function parseNextLink(linkHeader) {
@@ -105,149 +124,288 @@ export class CommandError extends Error {
105
124
  }
106
125
  }
107
126
  // ---------------------------------------------------------------------------
127
+ // Shared import core (used by both the legacy command and the importer)
128
+ // ---------------------------------------------------------------------------
129
+ // Build the GitHub issues list URL. `since`, `assignee`, `labels` and `state`
130
+ // are honored server-side; `milestone` is filtered client-side (the REST API
131
+ // keys milestones by number, not title).
132
+ export function buildIssuesUrl(repo, opts) {
133
+ let url = `https://api.github.com/repos/${repo}/issues?state=${opts.state}&per_page=100`;
134
+ if (opts.labels)
135
+ url += `&labels=${encodeURIComponent(opts.labels)}`;
136
+ if (opts.since)
137
+ url += `&since=${encodeURIComponent(opts.since)}`;
138
+ if (opts.assignee)
139
+ url += `&assignee=${encodeURIComponent(opts.assignee)}`;
140
+ return url;
141
+ }
142
+ async function fetchAllIssues(repo, opts, token) {
143
+ const issues = [];
144
+ let nextUrl = buildIssuesUrl(repo, opts);
145
+ while (nextUrl) {
146
+ const { body, linkHeader } = await fetchJSON(nextUrl, token);
147
+ let page;
148
+ try {
149
+ page = JSON.parse(body);
150
+ }
151
+ catch {
152
+ throw new Error("Invalid JSON response from GitHub.");
153
+ }
154
+ if (!Array.isArray(page)) {
155
+ throw new Error("Unexpected GitHub API response (expected an array of issues).");
156
+ }
157
+ issues.push(...page);
158
+ nextUrl = parseNextLink(linkHeader);
159
+ }
160
+ return issues;
161
+ }
162
+ // Apply the client-side filters (PRs, milestone-by-title).
163
+ export function applyClientFilters(issues, opts) {
164
+ let result = issues;
165
+ if (!opts.includePrs)
166
+ result = result.filter((i) => !i.pull_request);
167
+ if (opts.milestone) {
168
+ result = result.filter((i) => i.milestone?.title === opts.milestone);
169
+ }
170
+ return result;
171
+ }
172
+ export function parseImportOptions(options) {
173
+ // --state takes precedence; --all is the legacy shorthand for "all".
174
+ const stateOpt = optionString(options, "state");
175
+ const includeAll = optionEnabled(options, "all");
176
+ const state = stateOpt && ["open", "closed", "all"].includes(stateOpt)
177
+ ? stateOpt
178
+ : includeAll
179
+ ? "all"
180
+ : "open";
181
+ return {
182
+ state,
183
+ labels: optionString(options, "labels"),
184
+ since: optionString(options, "since"),
185
+ assignee: optionString(options, "assignee"),
186
+ milestone: optionString(options, "milestone"),
187
+ includePrs: optionEnabled(options, "include-prs", "includePrs"),
188
+ itemType: optionString(options, "type") || "Issue",
189
+ dryRun: optionEnabled(options, "dry-run", "dryRun"),
190
+ };
191
+ }
192
+ // Run the full import flow. Returns a structured result; throws CommandError
193
+ // (with a semantic exitCode) on failure so the CLI exits non-zero exactly once.
194
+ async function runImport(repoArg, pmRoot, opts) {
195
+ if (!repoArg || !repoArg.includes("/")) {
196
+ throw new CommandError("Usage: pm github import <owner/repo> [--all|--state open|closed|all] " +
197
+ "[--labels bug,enhancement] [--since <iso>] [--assignee <login>] " +
198
+ "[--milestone <name>] [--include-prs]", EXIT_CODE.USAGE);
199
+ }
200
+ const token = resolveGitHubToken();
201
+ console.error(`Fetching issues from ${repoArg}…${token ? "" : " (unauthenticated — 60 req/hr)"}`);
202
+ let fetched;
203
+ try {
204
+ fetched = await fetchAllIssues(repoArg, opts, token);
205
+ }
206
+ catch (err) {
207
+ const msg = err instanceof Error ? err.message : String(err);
208
+ const hint = !token && /HTTP 403/.test(msg)
209
+ ? " — set GITHUB_TOKEN/GH_TOKEN or run `gh auth login` to raise the rate limit (60→5000/hr) and reach private repos"
210
+ : "";
211
+ const exitCode = /HTTP 404/.test(msg) ? EXIT_CODE.NOT_FOUND : EXIT_CODE.GENERIC_FAILURE;
212
+ throw new CommandError(`Failed to fetch issues from ${repoArg}: ${msg}${hint}`, exitCode);
213
+ }
214
+ const filtered = applyClientFilters(fetched, opts);
215
+ if (filtered.length === 0) {
216
+ console.error("No issues found.");
217
+ return { imported: 0, skipped: 0 };
218
+ }
219
+ console.error(`Found ${filtered.length} issue(s).`);
220
+ let imported = 0;
221
+ let skipped = 0;
222
+ for (const issue of filtered) {
223
+ const title = issue.title.trim();
224
+ if (!title) {
225
+ skipped++;
226
+ continue;
227
+ }
228
+ const kind = issue.pull_request ? "PR" : "issue";
229
+ const tags = issue.labels.map((l) => l.name);
230
+ const status = mapState(issue.state);
231
+ const body = issue.body || "";
232
+ // Persist GitHub provenance in the description so it survives round-trips
233
+ // and powers `pm github export` + the afterCommand sync hint.
234
+ const description = `GH ${kind} #${issue.number}: ${issue.html_url}`;
235
+ const assignee = issue.assignee?.login;
236
+ const milestone = issue.milestone?.title;
237
+ if (opts.dryRun) {
238
+ console.error(` [dry-run] #${issue.number} ${title} (${status}, ${tags.join(",")})`);
239
+ imported++;
240
+ continue;
241
+ }
242
+ try {
243
+ const spawnArgs = [
244
+ "--path", pmRoot,
245
+ "create",
246
+ "--title", title,
247
+ "--type", opts.itemType,
248
+ "--status", status,
249
+ "--description", description,
250
+ "--body", body,
251
+ "--tags", tags.join(","),
252
+ "--message", `Imported from GitHub #${issue.number}`,
253
+ ];
254
+ if (assignee)
255
+ spawnArgs.push("--assignee", assignee);
256
+ if (milestone)
257
+ spawnArgs.push("--sprint", milestone);
258
+ const result = spawnSync("pm", spawnArgs, { encoding: "utf-8" });
259
+ if (result.status !== 0) {
260
+ throw new Error(result.stderr || "pm create failed");
261
+ }
262
+ imported++;
263
+ }
264
+ catch (err) {
265
+ const msg = err instanceof Error ? err.message : String(err);
266
+ console.error(`#${issue.number}: create failed — ${msg}`);
267
+ skipped++;
268
+ }
269
+ }
270
+ if (opts.dryRun) {
271
+ console.error(`[dry-run] Would import ${imported}, skip ${skipped}.`);
272
+ return { dryRun: true, wouldImport: imported, wouldSkip: skipped };
273
+ }
274
+ console.error(`Imported ${imported} issue(s), skipped ${skipped}.`);
275
+ if (imported === 0 && skipped > 0) {
276
+ throw new CommandError(`Imported 0 issue(s); ${skipped} failed.`);
277
+ }
278
+ return { imported, skipped };
279
+ }
280
+ function readPmItems(pmRoot) {
281
+ // `--full --include-body` so tags and body survive the export instead of the
282
+ // brief projection (which omits them).
283
+ const result = spawnSync("pm", ["--path", pmRoot, "--json", "list", "--full", "--include-body", "--limit", "10000"], { encoding: "utf-8" });
284
+ if (result.status !== 0) {
285
+ throw new CommandError(result.stderr || "pm list failed");
286
+ }
287
+ try {
288
+ const parsed = JSON.parse(result.stdout);
289
+ const items = Array.isArray(parsed) ? parsed : parsed.items ?? parsed.results ?? [];
290
+ return items;
291
+ }
292
+ catch {
293
+ throw new CommandError("Could not parse `pm list --json` output.");
294
+ }
295
+ }
296
+ function itemToGithubPayload(item) {
297
+ return {
298
+ title: item.title ?? "(untitled)",
299
+ body: item.body || item.description || "",
300
+ labels: item.tags ?? [],
301
+ state: item.status === "closed" || item.status === "canceled" ? "closed" : "open",
302
+ };
303
+ }
304
+ // ---------------------------------------------------------------------------
108
305
  // Extension
109
306
  // ---------------------------------------------------------------------------
307
+ const IMPORT_FLAGS = [
308
+ { long: "--all", description: "Include closed issues (shorthand for --state all)" },
309
+ { long: "--state", value_name: "state", description: "Issue state: open | closed | all (default: open)" },
310
+ { long: "--labels", value_name: "labels", description: "Comma-separated label filter" },
311
+ { long: "--since", value_name: "iso", description: "Only issues updated after this ISO timestamp (incremental sync)" },
312
+ { long: "--assignee", value_name: "login", description: "Filter by assignee login" },
313
+ { long: "--milestone", value_name: "name", description: "Filter by milestone title" },
314
+ { long: "--include-prs", description: "Include pull requests (default: skip PRs)" },
315
+ { long: "--dry-run", description: "Preview without writing" },
316
+ { long: "--type", value_name: "type", description: "Override pm item type (default: Issue)" },
317
+ ];
110
318
  export default defineExtension({
111
319
  name: "pm-github",
112
- version: "2026.6.1",
320
+ version: "2026.6.2",
113
321
  activate(api) {
114
322
  // -----------------------------------------------------------------------
115
- // Command: pm gh-issues import <owner/repo>
323
+ // schema — declare the GitHub provenance fields so the workspace knows them
324
+ // -----------------------------------------------------------------------
325
+ api.registerItemFields([
326
+ { name: "github_url", type: "string", optional: true },
327
+ { name: "github_number", type: "number", optional: true },
328
+ { name: "github_state", type: "string", optional: true },
329
+ ]);
330
+ // -----------------------------------------------------------------------
331
+ // importer — `pm github import <owner/repo>` (native import pipeline)
332
+ // -----------------------------------------------------------------------
333
+ api.registerImporter("github", async (ctx) => {
334
+ return runImport(ctx.args?.[0], ctx.pm_root, parseImportOptions(ctx.options || {}));
335
+ });
336
+ // -----------------------------------------------------------------------
337
+ // exporter — `pm github export` (render pm items as a GitHub-issues payload)
338
+ // Default: print JSON payload (or markdown with --format md). With --push
339
+ // AND a token AND --repo <owner/repo>, create the issues on GitHub.
340
+ // -----------------------------------------------------------------------
341
+ api.registerExporter("github", async (ctx) => {
342
+ const options = ctx.options || {};
343
+ const format = optionString(options, "format") || "json";
344
+ const items = readPmItems(ctx.pm_root);
345
+ const payloads = items.map(itemToGithubPayload);
346
+ const push = optionEnabled(options, "push");
347
+ const repo = optionString(options, "repo") || ctx.args?.[0];
348
+ if (push) {
349
+ const token = resolveGitHubToken();
350
+ if (!token) {
351
+ throw new CommandError("--push requires a GitHub token (set GITHUB_TOKEN/GH_TOKEN or run `gh auth login`).", EXIT_CODE.USAGE);
352
+ }
353
+ if (!repo || !repo.includes("/")) {
354
+ throw new CommandError("--push requires --repo <owner/repo>.", EXIT_CODE.USAGE);
355
+ }
356
+ let created = 0;
357
+ for (const payload of payloads) {
358
+ await request("POST", `https://api.github.com/repos/${repo}/issues`, token, JSON.stringify({ title: payload.title, body: payload.body, labels: payload.labels }));
359
+ created++;
360
+ }
361
+ console.error(`Created ${created} issue(s) on ${repo}.`);
362
+ return { pushed: true, created };
363
+ }
364
+ if (format === "md" || format === "markdown") {
365
+ const md = payloads
366
+ .map((p) => `## ${p.title}\n\n${p.body}\n\n_labels: ${p.labels.join(", ")} · state: ${p.state}_\n`)
367
+ .join("\n");
368
+ console.log(md);
369
+ return { exported: payloads.length, format: "markdown" };
370
+ }
371
+ console.log(JSON.stringify(payloads, null, 2));
372
+ return { exported: payloads.length, format: "json" };
373
+ });
374
+ // -----------------------------------------------------------------------
375
+ // hooks — opt-in sync reminder for github-linked items
376
+ // Safe + no network: only emits a hint, and only when PM_GITHUB_SYNC is set.
377
+ // -----------------------------------------------------------------------
378
+ api.hooks.afterCommand((ctx) => {
379
+ if (!process.env.PM_GITHUB_SYNC)
380
+ return;
381
+ if (!ctx.ok)
382
+ return;
383
+ if (ctx.command === "close" || ctx.command === "update") {
384
+ console.error("[pm-github] item changed — if it is linked to a GitHub issue, " +
385
+ "remember to sync the upstream issue (PM_GITHUB_SYNC hint).");
386
+ }
387
+ });
388
+ // -----------------------------------------------------------------------
389
+ // command — legacy `pm gh-issues import <owner/repo>` (delegates to core)
116
390
  // -----------------------------------------------------------------------
117
391
  api.registerCommand({
118
392
  name: "gh-issues import",
119
393
  description: "Fetch GitHub issues from a repo and create pm items. " +
120
394
  "Skips pull requests by default. Uses GITHUB_TOKEN/GH_TOKEN (or the " +
121
395
  "authenticated gh CLI) when available for 5000 req/hr and private repos; " +
122
- "falls back to the unauthenticated API (60 req/hr).",
396
+ "falls back to the unauthenticated API (60 req/hr). " +
397
+ "Equivalent to `pm github import`.",
123
398
  intent: "import GitHub issues as pm items",
124
399
  examples: [
125
400
  "pm gh-issues import unbraind/pm-cli",
126
401
  "pm gh-issues import unbraind/pm-cli --all",
127
402
  "pm gh-issues import unbraind/pm-cli --labels bug,enhancement",
128
- "pm gh-issues import owner/repo --dry-run",
129
- ],
130
- flags: [
131
- { long: "--all", description: "Include closed issues (default: open only)" },
132
- { long: "--labels", value_name: "labels", description: "Comma-separated label filter" },
133
- { long: "--dry-run", description: "Preview without writing" },
134
- { long: "--type", value_name: "type", description: "Override pm item type (default: Issue)" },
403
+ "pm gh-issues import unbraind/pm-cli --since 2026-01-01T00:00:00Z",
404
+ "pm github import owner/repo --dry-run",
135
405
  ],
406
+ flags: IMPORT_FLAGS,
136
407
  async run(ctx) {
137
- const repoArg = ctx.args[0];
138
- if (!repoArg || !repoArg.includes("/")) {
139
- // Throw with a USAGE exit code so the CLI exits non-zero AND the
140
- // runtime treats the command as handled (a returned { error } reads
141
- // as success; a plain Error triggers a second handler invocation).
142
- throw new CommandError("Usage: pm gh-issues import <owner/repo> [--all] [--labels bug,enhancement]", EXIT_CODE.USAGE);
143
- }
144
- const includeAll = optionEnabled(ctx.options, "all");
145
- const labelsFilter = optionString(ctx.options, "labels");
146
- // Read both kebab and camelCase keys — the runtime may normalize
147
- // "--dry-run" to "dryRun", and reading only "dry-run" silently ignored
148
- // the flag (writing items even in preview mode).
149
- const dryRun = optionEnabled(ctx.options, "dry-run", "dryRun");
150
- const itemType = optionString(ctx.options, "type") || "Issue";
151
- const state = includeAll ? "all" : "open";
152
- let url = `https://api.github.com/repos/${repoArg}/issues?state=${state}&per_page=100`;
153
- if (labelsFilter) {
154
- url += `&labels=${encodeURIComponent(labelsFilter)}`;
155
- }
156
- const token = resolveGitHubToken();
157
- console.error(`Fetching issues from ${repoArg}…${token ? "" : " (unauthenticated — 60 req/hr)"}`);
158
- const issues = [];
159
- let nextUrl = url;
160
- try {
161
- while (nextUrl) {
162
- const { body, linkHeader } = await fetchJSON(nextUrl, token);
163
- let page;
164
- try {
165
- page = JSON.parse(body);
166
- }
167
- catch {
168
- throw new Error("Invalid JSON response from GitHub.");
169
- }
170
- if (!Array.isArray(page)) {
171
- throw new Error("Unexpected GitHub API response (expected an array of issues).");
172
- }
173
- issues.push(...page);
174
- nextUrl = parseNextLink(linkHeader);
175
- }
176
- }
177
- catch (err) {
178
- const msg = err instanceof Error ? err.message : String(err);
179
- const hint = !token && /HTTP 403/.test(msg)
180
- ? " — set GITHUB_TOKEN/GH_TOKEN or run `gh auth login` to raise the rate limit (60→5000/hr) and reach private repos"
181
- : "";
182
- // Throw so the CLI exits non-zero on a failed fetch. A 404 maps to
183
- // NOT_FOUND; everything else (403, 5xx, timeouts) is a generic failure.
184
- const exitCode = /HTTP 404/.test(msg) ? EXIT_CODE.NOT_FOUND : EXIT_CODE.GENERIC_FAILURE;
185
- throw new CommandError(`Failed to fetch issues from ${repoArg}: ${msg}${hint}`, exitCode);
186
- }
187
- // Filter out PRs
188
- const filtered = issues.filter((i) => !i.pull_request);
189
- if (filtered.length === 0) {
190
- console.error("No issues found.");
191
- return { imported: 0, skipped: 0 };
192
- }
193
- console.error(`Found ${filtered.length} issue(s).`);
194
- let imported = 0;
195
- let skipped = 0;
196
- for (const issue of filtered) {
197
- const title = issue.title.trim();
198
- if (!title) {
199
- skipped++;
200
- continue;
201
- }
202
- const tags = issue.labels.map((l) => l.name);
203
- const status = mapState(issue.state);
204
- const body = issue.body || "";
205
- const description = `GH #${issue.number}: ${issue.html_url}`;
206
- const assignee = issue.assignee?.login;
207
- const milestone = issue.milestone?.title;
208
- if (dryRun) {
209
- console.error(` [dry-run] #${issue.number} ${title} (${status}, ${tags.join(",")})`);
210
- imported++;
211
- continue;
212
- }
213
- try {
214
- const spawnArgs = [
215
- "--path", ctx.pm_root,
216
- "create",
217
- "--title", title,
218
- "--type", itemType,
219
- "--status", status,
220
- "--description", description,
221
- "--body", body,
222
- "--tags", tags.join(","),
223
- "--message", `Imported from GitHub #${issue.number}`,
224
- ];
225
- if (assignee)
226
- spawnArgs.push("--assignee", assignee);
227
- if (milestone)
228
- spawnArgs.push("--sprint", milestone);
229
- const result = spawnSync("pm", spawnArgs, { encoding: "utf-8" });
230
- if (result.status !== 0) {
231
- throw new Error(result.stderr || "pm create failed");
232
- }
233
- imported++;
234
- }
235
- catch (err) {
236
- const msg = err instanceof Error ? err.message : String(err);
237
- console.error(`#${issue.number}: create failed — ${msg}`);
238
- skipped++;
239
- }
240
- }
241
- if (dryRun) {
242
- console.error(`[dry-run] Would import ${imported}, skip ${skipped}.`);
243
- return { dryRun: true, wouldImport: imported, wouldSkip: skipped };
244
- }
245
- console.error(`Imported ${imported} issue(s), skipped ${skipped}.`);
246
- if (imported === 0 && skipped > 0) {
247
- // Every create failed — surface as a non-zero exit for automation.
248
- throw new CommandError(`Imported 0 issue(s); ${skipped} failed.`);
249
- }
250
- return { imported, skipped };
408
+ return runImport(ctx.args[0], ctx.pm_root, parseImportOptions(ctx.options));
251
409
  },
252
410
  });
253
411
  },
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,13 +1,15 @@
1
1
  {
2
2
  "name": "pm-github",
3
- "version": "2026.6.1",
4
- "description": "GitHub Issues importer. Fetches open (or all) issues from a GitHub repo and creates pm items.",
3
+ "version": "2026.6.2",
4
+ "description": "GitHub Issues importer/exporter. Imports issues from a GitHub repo as pm items (native `pm github import`), exports pm items as a GitHub-issues payload, and declares GitHub provenance fields.",
5
5
  "author": "@unbraind",
6
6
  "entry": "./dist/index.js",
7
7
  "priority": 50,
8
8
  "capabilities": [
9
9
  "commands",
10
- "schema"
10
+ "importers",
11
+ "schema",
12
+ "hooks"
11
13
  ],
12
14
  "pm": {
13
15
  "compatibility": "v2"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-github",
3
- "version": "2026.6.1",
3
+ "version": "2026.6.2",
4
4
  "description": "GitHub Issues importer 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
  },