pm-github 2026.5.27 → 2026.5.29
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 +19 -0
- package/LICENSE +21 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +107 -36
- package/dist/index.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026.05.29 - 2026-05-29
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Production-harden gh-issues import ([pm-github-lixc](https://github.com/unbraind/pm-github/blob/main/.agents/pm/features/pm-github-lixc.toon))
|
|
8
|
+
|
|
9
|
+
### Other
|
|
10
|
+
|
|
11
|
+
- Failed imports exited 0 \(broke automation\) ([pm-github-msh0](https://github.com/unbraind/pm-github/blob/main/.agents/pm/issues/pm-github-msh0.toon))
|
|
12
|
+
- Issue list truncated at one page \(no pagination\) ([pm-github-v4la](https://github.com/unbraind/pm-github/blob/main/.agents/pm/issues/pm-github-v4la.toon))
|
|
13
|
+
- Importer was unauthenticated \(60 req/hr, no private repos\) ([pm-github-gtnp](https://github.com/unbraind/pm-github/blob/main/.agents/pm/issues/pm-github-gtnp.toon))
|
|
14
|
+
- --dry-run silently wrote items instead of previewing ([pm-github-2u31](https://github.com/unbraind/pm-github/blob/main/.agents/pm/issues/pm-github-2u31.toon))
|
|
15
|
+
|
|
16
|
+
## 2026.05.28 - 2026-05-28
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- Add publish retry + provenance fallback to release workflow ([pm-github-4ouy](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-4ouy.toon))
|
|
21
|
+
|
|
3
22
|
## 2026.05.27 - 2026-05-27
|
|
4
23
|
|
|
5
24
|
### Added
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 unbraind
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
export declare function resolveGitHubToken(): string | undefined;
|
|
2
|
+
export declare function parseNextLink(linkHeader?: string): string | undefined;
|
|
3
|
+
export declare function optionEnabled(options: Record<string, unknown>, ...keys: string[]): boolean;
|
|
4
|
+
export declare function optionString(options: Record<string, unknown>, ...keys: string[]): string | undefined;
|
|
1
5
|
declare const _default: {
|
|
2
6
|
name: string;
|
|
3
7
|
version: string;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
|
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;;;;kBAUe,GAAG;;AAJnB,wBA2JG"}
|
package/dist/index.js
CHANGED
|
@@ -2,43 +2,93 @@
|
|
|
2
2
|
import https from "node:https";
|
|
3
3
|
import { spawnSync } from "node:child_process";
|
|
4
4
|
const defineExtension = ((extension) => extension);
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
function
|
|
5
|
+
// Resolve a GitHub token so the importer is not stuck on the 60 req/hr
|
|
6
|
+
// unauthenticated quota and can read private repos. Order: explicit env vars,
|
|
7
|
+
// then the locally authenticated `gh` CLI if present.
|
|
8
|
+
export function resolveGitHubToken() {
|
|
9
|
+
const envToken = process.env.GITHUB_TOKEN || process.env.GH_TOKEN;
|
|
10
|
+
if (envToken && envToken.trim())
|
|
11
|
+
return envToken.trim();
|
|
12
|
+
try {
|
|
13
|
+
const result = spawnSync("gh", ["auth", "token"], { encoding: "utf-8" });
|
|
14
|
+
if (result.status === 0) {
|
|
15
|
+
const token = result.stdout.trim();
|
|
16
|
+
if (token)
|
|
17
|
+
return token;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// gh not installed — fall back to unauthenticated requests.
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
function fetchJSON(url, token) {
|
|
9
26
|
return new Promise((resolve, reject) => {
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
27
|
+
const headers = {
|
|
28
|
+
"User-Agent": "pm-github",
|
|
29
|
+
Accept: "application/vnd.github+json",
|
|
30
|
+
};
|
|
31
|
+
if (token)
|
|
32
|
+
headers.Authorization = `Bearer ${token}`;
|
|
33
|
+
const req = https.get(url, { headers }, (res) => {
|
|
34
|
+
const status = res.statusCode ?? 0;
|
|
35
|
+
if (status >= 300 && status < 400 && res.headers.location) {
|
|
36
|
+
fetchJSON(res.headers.location, token).then(resolve, reject);
|
|
18
37
|
return;
|
|
19
38
|
}
|
|
20
|
-
if (
|
|
39
|
+
if (status !== 200) {
|
|
21
40
|
res.resume();
|
|
22
|
-
reject(new Error(`GitHub API returned HTTP ${
|
|
41
|
+
reject(new Error(`GitHub API returned HTTP ${status}`));
|
|
23
42
|
return;
|
|
24
43
|
}
|
|
25
44
|
const chunks = [];
|
|
26
45
|
res.on("data", (c) => chunks.push(c));
|
|
27
|
-
res.on("end", () => resolve(
|
|
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
|
+
}));
|
|
28
50
|
});
|
|
29
51
|
req.on("error", reject);
|
|
30
52
|
req.setTimeout(30000, () => { req.destroy(); reject(new Error("timeout")); });
|
|
31
53
|
});
|
|
32
54
|
}
|
|
55
|
+
// Follow GitHub's RFC 5988 Link header so repos with more than one page of
|
|
56
|
+
// issues are fully imported instead of silently truncated at per_page.
|
|
57
|
+
export function parseNextLink(linkHeader) {
|
|
58
|
+
if (!linkHeader)
|
|
59
|
+
return undefined;
|
|
60
|
+
for (const part of linkHeader.split(",")) {
|
|
61
|
+
const match = part.match(/<([^>]+)>\s*;\s*rel="next"/);
|
|
62
|
+
if (match)
|
|
63
|
+
return match[1];
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
33
67
|
function mapState(state) {
|
|
34
68
|
return state === "closed" ? "closed" : "open";
|
|
35
69
|
}
|
|
70
|
+
// Flags may arrive under their kebab-case (`dry-run`) or camelCase (`dryRun`)
|
|
71
|
+
// key depending on runtime normalization, so check every candidate.
|
|
72
|
+
export function optionEnabled(options, ...keys) {
|
|
73
|
+
return keys.some((k) => {
|
|
74
|
+
const v = options[k];
|
|
75
|
+
return v === true || v === "true" || v === "1";
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
export function optionString(options, ...keys) {
|
|
79
|
+
for (const k of keys) {
|
|
80
|
+
const v = options[k];
|
|
81
|
+
if (typeof v === "string" && v.trim().length > 0)
|
|
82
|
+
return v.trim();
|
|
83
|
+
}
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
36
86
|
// ---------------------------------------------------------------------------
|
|
37
87
|
// Extension
|
|
38
88
|
// ---------------------------------------------------------------------------
|
|
39
89
|
export default defineExtension({
|
|
40
90
|
name: "pm-github",
|
|
41
|
-
version: "2026.5.
|
|
91
|
+
version: "2026.5.29",
|
|
42
92
|
activate(api) {
|
|
43
93
|
// -----------------------------------------------------------------------
|
|
44
94
|
// Command: pm gh-issues import <owner/repo>
|
|
@@ -46,7 +96,9 @@ export default defineExtension({
|
|
|
46
96
|
api.registerCommand({
|
|
47
97
|
name: "gh-issues import",
|
|
48
98
|
description: "Fetch GitHub issues from a repo and create pm items. " +
|
|
49
|
-
"Skips pull requests by default. Uses
|
|
99
|
+
"Skips pull requests by default. Uses GITHUB_TOKEN/GH_TOKEN (or the " +
|
|
100
|
+
"authenticated gh CLI) when available for 5000 req/hr and private repos; " +
|
|
101
|
+
"falls back to the unauthenticated API (60 req/hr).",
|
|
50
102
|
intent: "import GitHub issues as pm items",
|
|
51
103
|
examples: [
|
|
52
104
|
"pm gh-issues import unbraind/pm-cli",
|
|
@@ -63,35 +115,50 @@ export default defineExtension({
|
|
|
63
115
|
async run(ctx) {
|
|
64
116
|
const repoArg = ctx.args[0];
|
|
65
117
|
if (!repoArg || !repoArg.includes("/")) {
|
|
66
|
-
|
|
67
|
-
|
|
118
|
+
// Throw so the CLI exits non-zero — a returned { error } is treated
|
|
119
|
+
// as a successful run by the runtime.
|
|
120
|
+
throw new Error("Usage: pm gh-issues import <owner/repo> [--all] [--labels bug,enhancement]");
|
|
68
121
|
}
|
|
69
|
-
const includeAll =
|
|
70
|
-
const labelsFilter = ctx.options
|
|
71
|
-
|
|
72
|
-
|
|
122
|
+
const includeAll = optionEnabled(ctx.options, "all");
|
|
123
|
+
const labelsFilter = optionString(ctx.options, "labels");
|
|
124
|
+
// Read both kebab and camelCase keys — the runtime may normalize
|
|
125
|
+
// "--dry-run" to "dryRun", and reading only "dry-run" silently ignored
|
|
126
|
+
// the flag (writing items even in preview mode).
|
|
127
|
+
const dryRun = optionEnabled(ctx.options, "dry-run", "dryRun");
|
|
128
|
+
const itemType = optionString(ctx.options, "type") || "Issue";
|
|
73
129
|
const state = includeAll ? "all" : "open";
|
|
74
130
|
let url = `https://api.github.com/repos/${repoArg}/issues?state=${state}&per_page=100`;
|
|
75
131
|
if (labelsFilter) {
|
|
76
132
|
url += `&labels=${encodeURIComponent(labelsFilter)}`;
|
|
77
133
|
}
|
|
78
|
-
|
|
79
|
-
|
|
134
|
+
const token = resolveGitHubToken();
|
|
135
|
+
console.error(`Fetching issues from ${repoArg}…${token ? "" : " (unauthenticated — 60 req/hr)"}`);
|
|
136
|
+
const issues = [];
|
|
137
|
+
let nextUrl = url;
|
|
80
138
|
try {
|
|
81
|
-
|
|
139
|
+
while (nextUrl) {
|
|
140
|
+
const { body, linkHeader } = await fetchJSON(nextUrl, token);
|
|
141
|
+
let page;
|
|
142
|
+
try {
|
|
143
|
+
page = JSON.parse(body);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
throw new Error("Invalid JSON response from GitHub.");
|
|
147
|
+
}
|
|
148
|
+
if (!Array.isArray(page)) {
|
|
149
|
+
throw new Error("Unexpected GitHub API response (expected an array of issues).");
|
|
150
|
+
}
|
|
151
|
+
issues.push(...page);
|
|
152
|
+
nextUrl = parseNextLink(linkHeader);
|
|
153
|
+
}
|
|
82
154
|
}
|
|
83
155
|
catch (err) {
|
|
84
156
|
const msg = err instanceof Error ? err.message : String(err);
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
issues = JSON.parse(raw);
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
console.error("Invalid JSON response from GitHub.");
|
|
94
|
-
return { error: "Invalid GitHub API response" };
|
|
157
|
+
const hint = !token && /HTTP 403/.test(msg)
|
|
158
|
+
? " — set GITHUB_TOKEN/GH_TOKEN or run `gh auth login` to raise the rate limit (60→5000/hr) and reach private repos"
|
|
159
|
+
: "";
|
|
160
|
+
// Throw so the CLI exits non-zero on a failed fetch.
|
|
161
|
+
throw new Error(`Failed to fetch issues from ${repoArg}: ${msg}${hint}`);
|
|
95
162
|
}
|
|
96
163
|
// Filter out PRs
|
|
97
164
|
const filtered = issues.filter((i) => !i.pull_request);
|
|
@@ -152,6 +219,10 @@ export default defineExtension({
|
|
|
152
219
|
return { dryRun: true, wouldImport: imported, wouldSkip: skipped };
|
|
153
220
|
}
|
|
154
221
|
console.error(`Imported ${imported} issue(s), skipped ${skipped}.`);
|
|
222
|
+
if (imported === 0 && skipped > 0) {
|
|
223
|
+
// Every create failed — surface as a non-zero exit for automation.
|
|
224
|
+
throw new Error(`Imported 0 issue(s); ${skipped} failed.`);
|
|
225
|
+
}
|
|
155
226
|
return { imported, skipped };
|
|
156
227
|
},
|
|
157
228
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAEhD,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C,MAAM,eAAe,GAA+B,CAAC,CAAC,SAAc,EAAE,EAAE,CAAC,SAAS,CAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pm-github",
|
|
3
|
-
"version": "2026.5.
|
|
3
|
+
"version": "2026.5.29",
|
|
4
4
|
"description": "GitHub Issues importer extension for pm-cli",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
],
|
|
22
22
|
"scripts": {
|
|
23
23
|
"build": "tsc",
|
|
24
|
+
"build:test": "tsc -p tsconfig.test.json",
|
|
25
|
+
"test": "npm run build && npm run build:test && node --test dist-test/*.js",
|
|
24
26
|
"prepack": "npm run build",
|
|
25
27
|
"typecheck": "tsc --noEmit",
|
|
26
28
|
"check": "npm run typecheck",
|