pm-github 2026.6.1 → 2026.6.3

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,45 @@
1
1
  # Changelog
2
2
 
3
- ## 2026.6.1 - 2026-06-01
3
+ ## 2026.6.3 - 2026-06-03
4
+
5
+ ### Added
6
+
7
+ - Domain-max SDK enhancement: idempotent import, sync, preflight, renderer ([pm-github-mdlp](https://github.com/unbraind/pm-github/blob/main/.agents/pm/features/pm-github-mdlp.toon))
8
+
9
+ ### Changed
10
+
11
+ - Idempotent import: match by github\_number, update not duplicate; populate schema fields ([pm-github-fhiv](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-fhiv.toon))
12
+
13
+ ### Fixed
14
+
15
+ - True round-trip GitHub sync: search provider, validate diagnostics, safe-by-default export, fix activation ([pm-github-9dqy](https://github.com/unbraind/pm-github/blob/main/.agents/pm/features/pm-github-9dqy.toon))
16
+ - True round-trip GitHub sync: search provider, validate diagnostics, safe-by-default export, fix activation ([pm-github-4elt](https://github.com/unbraind/pm-github/blob/main/.agents/pm/features/pm-github-4elt.toon))
17
+ - FIX: add 'preflight' to manifest capabilities \(activation-breaking bug\) ([pm-github-qndb](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-qndb.toon))
18
+
19
+ ### Other
20
+
21
+ - Provenance scheme: gh:owner/repo\#N tag \(lowercased\), reused as-is ([pm-github-ggt3](https://github.com/unbraind/pm-github/blob/main/.agents/pm/decisions/pm-github-ggt3.toon))
22
+ - Export defaults to dry-run; real writes need --apply AND --repo ([pm-github-epdt](https://github.com/unbraind/pm-github/blob/main/.agents/pm/decisions/pm-github-epdt.toon))
23
+ - Search provider maps remote matches to LOCAL items only ([pm-github-o7jl](https://github.com/unbraind/pm-github/blob/main/.agents/pm/decisions/pm-github-o7jl.toon))
24
+ - Unit tests + functional verification + README + decisions ([pm-github-f3xf](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-f3xf.toon))
25
+ - Export: dry-run default + upsert existing issues by provenance ([pm-github-fv0x](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-fv0x.toon))
26
+ - github search provider \(search capability\) ([pm-github-5sbx](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-5sbx.toon))
27
+ - github validate diagnostics command ([pm-github-rroh](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-rroh.toon))
28
+ - preflight capability: validate token/gh auth + repo reachability before mutating github commands ([pm-github-jget](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-jget.toon))
29
+ - pm github sync: push pm status -\> GitHub close/reopen, guarded by token+--repo+--dry-run ([pm-github-yted](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-yted.toon))
30
+ - renderers capability: register 'github' output format \(pm items as GitHub-issue markdown\) ([pm-github-vvov](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-vvov.toon))
31
+ - Rate-limit/backoff handling \(Retry-After / X-RateLimit-Reset\) + useful afterCommand hook ([pm-github-rx1q](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-rx1q.toon))
32
+ - Import issue comments via --with-comments \(append to item body\) ([pm-github-kvl1](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-kvl1.toon))
33
+ - Tests + functional verification against real public repo \(idempotent re-import\) ([pm-github-2u0d](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-2u0d.toon))
34
+ - Production-readiness audit 2026-05-28 ([pm-github-0y40](https://github.com/unbraind/pm-github/blob/main/.agents/pm/tasks/pm-github-0y40.toon))
35
+
36
+ ## 2026.06.02 - 2026-06-02
37
+
38
+ ### Added
39
+
40
+ - 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))
41
+
42
+ ## 2026.06.01 - 2026-06-01
4
43
 
5
44
  ### Fixed
6
45
 
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
+ A true **round-trip** GitHub Issues integration for [pm-cli](https://github.com/unbraind/pm-cli): import, export, status-sync, search, and validate.
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 to GitHub (safely, dry-run by default), push status changes upstream, reach GitHub from `pm search`, 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,104 @@ 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>` — idempotent native import pipeline |
20
+ | `importers` (exporter) | `pm github export` — pm items → GitHub issues (dry-run by default; upsert) |
21
+ | `commands` | `pm gh-issues import` (legacy import alias), `pm github sync` (push status), `pm github validate` (diagnostics) |
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
+ | `preflight` | early warning when a mutating github command lacks a token |
25
+ | `search` | `github` search provider — `pm search` reaches GitHub for imported items |
26
+
27
+ ## Import
28
+
29
+ ### `pm github import <owner/repo>` (or `pm gh-issues import`)
18
30
 
19
31
  ```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
32
+ pm github import unbraind/pm-cli
33
+ pm github import owner/repo --state all
34
+ pm github import owner/repo --labels bug,enhancement
35
+ pm github import owner/repo --since 2026-01-01T00:00:00Z # incremental sync
36
+ pm github import owner/repo --assignee octocat
37
+ pm github import owner/repo --milestone "v1.0"
38
+ pm github import owner/repo --include-prs
39
+ pm github import owner/repo --dry-run
24
40
  ```
25
41
 
26
42
  **Flags**
27
43
 
28
44
  | Flag | Type | Description |
29
45
  |---|---|---|
30
- | `--all` | boolean | Include closed issues (default: open only) |
46
+ | `--all` | boolean | Include closed issues (shorthand for `--state all`) |
47
+ | `--state <state>` | string | `open` \| `closed` \| `all` (default: open) |
31
48
  | `--labels <labels>` | string | Comma-separated label filter |
49
+ | `--since <iso>` | string | Only issues updated after this ISO timestamp (incremental sync) |
50
+ | `--assignee <login>` | string | Filter by assignee login |
51
+ | `--milestone <name>` | string | Filter by milestone title |
52
+ | `--include-prs` | boolean | Include pull requests (default: skip PRs) |
32
53
  | `--dry-run` | boolean | Preview without writing |
33
54
  | `--type <type>` | string | Override pm item type (default: Issue) |
34
55
 
56
+ ## Export (pm → GitHub)
57
+
58
+ ### `pm github export`
59
+
60
+ **Safe by default.** Export previews the create/update plan and writes *nothing* unless you explicitly opt in with `--apply` **and** name a `--repo`. With a `--repo`, items already linked to an issue in that repo (via the `gh:owner/repo#N` provenance tag) are **updated** (upsert) instead of duplicated.
61
+
62
+ ```bash
63
+ pm github export --repo owner/repo # DRY-RUN: print the create/update plan, write nothing
64
+ pm github export --repo owner/repo --format md
65
+ pm --json github export --repo owner/repo # return the plan as JSON
66
+ pm github export --repo owner/repo --apply # actually create/update issues (requires a token)
67
+ ```
68
+
69
+ | Flag | Type | Description |
70
+ |---|---|---|
71
+ | `--repo <owner/repo>` | string | Target repo; decides create-vs-update and is required for `--apply` |
72
+ | `--format <json\|md>` | string | Dry-run output format (default: json) |
73
+ | `--apply` | boolean | Perform real GitHub writes (alias: `--no-dry-run`, legacy `--push`). Requires a token + `--repo` |
74
+ | `--dry-run` | boolean | Force preview even alongside `--apply` (dry-run always wins) |
75
+
76
+ ## Status sync (pm → GitHub state)
77
+
78
+ ### `pm github sync`
79
+
80
+ Push pm status changes back to GitHub: close/reopen the linked issue to match the pm item's status. Requires a token and explicit `--repo`.
81
+
82
+ ```bash
83
+ pm github sync --repo owner/repo --dry-run # preview the close/reopen plan
84
+ pm github sync --repo owner/repo # push the changes
85
+ ```
86
+
87
+ ## Search (pm search → GitHub)
88
+
89
+ ### `github` search provider
90
+
91
+ Registers a `github` search provider so `pm search ... --semantic` can reach GitHub. It asks GitHub which issues in the target repo match your query, then returns hits for the **pm items you've already imported** from those issues (matched by the `gh:owner/repo#N` provenance tag).
92
+
93
+ ```bash
94
+ pm config project set ... # set search.provider = "github" in .agents/pm/settings.json
95
+ export PM_GITHUB_REPO=owner/repo # or pass the repo another way
96
+ pm search "uppercase dashes" --semantic # hits = imported items whose upstream issue matches
97
+ ```
98
+
99
+ Enable it by setting `search.provider` to `"github"` in `.agents/pm/settings.json` and pointing it at a repo via the `PM_GITHUB_REPO` env var.
100
+
101
+ ## Validate / diagnostics
102
+
103
+ ### `pm github validate`
104
+
105
+ Read-only check of the integration: `gh` CLI presence, token resolvability (and source), and—with `--repo`—repo accessibility. Never mutates anything.
106
+
107
+ ```bash
108
+ pm github validate
109
+ pm github validate --repo owner/repo
110
+ pm --json github validate --repo owner/repo
111
+ ```
112
+
35
113
  ## License
36
114
 
37
115
  MIT
package/dist/index.d.ts CHANGED
@@ -1,4 +1,44 @@
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
+ comments?: number;
19
+ comments_url?: string;
20
+ pull_request?: unknown;
21
+ }
22
+ interface GhComment {
23
+ user: {
24
+ login: string;
25
+ } | null;
26
+ created_at: string;
27
+ body: string | null;
28
+ }
29
+ interface ImportOptions {
30
+ state: "open" | "closed" | "all";
31
+ labels?: string;
32
+ since?: string;
33
+ assignee?: string;
34
+ milestone?: string;
35
+ includePrs: boolean;
36
+ withComments: boolean;
37
+ itemType: string;
38
+ dryRun: boolean;
39
+ }
1
40
  export declare function resolveGitHubToken(): string | undefined;
41
+ export declare function computeBackoffMs(headers: Record<string, string | string[] | undefined>, attempt: number, nowMs?: number): number;
2
42
  export declare function parseNextLink(linkHeader?: string): string | undefined;
3
43
  export declare function optionEnabled(options: Record<string, unknown>, ...keys: string[]): boolean;
4
44
  export declare function optionString(options: Record<string, unknown>, ...keys: string[]): string | undefined;
@@ -11,6 +51,65 @@ export declare class CommandError extends Error {
11
51
  exitCode: number;
12
52
  constructor(message: string, exitCode?: number);
13
53
  }
54
+ export declare function provenanceTag(repo: string, issueNumber: number): string;
55
+ export declare function parseProvenanceTag(tag: string): {
56
+ repo: string;
57
+ number: number;
58
+ } | undefined;
59
+ interface PmItem {
60
+ id?: string;
61
+ title?: string;
62
+ status?: string;
63
+ body?: string;
64
+ description?: string;
65
+ tags?: string[];
66
+ }
67
+ export declare function indexByProvenance(items: PmItem[]): Map<string, PmItem>;
68
+ export declare function buildIssuesUrl(repo: string, opts: ImportOptions): string;
69
+ export declare function composeBody(issue: GhIssue, comments: GhComment[]): string;
70
+ export declare function applyClientFilters(issues: GhIssue[], opts: ImportOptions): GhIssue[];
71
+ export declare function parseImportOptions(options: Record<string, unknown>): ImportOptions;
72
+ export interface SyncPlanEntry {
73
+ id: string;
74
+ number: number;
75
+ title: string;
76
+ from: "open" | "closed";
77
+ to: "open" | "closed";
78
+ }
79
+ export declare function planSync(items: PmItem[], repo: string): SyncPlanEntry[];
80
+ export interface GithubExportPayload {
81
+ title: string;
82
+ body: string;
83
+ labels: string[];
84
+ state: "open" | "closed";
85
+ }
86
+ export interface ExportPlanEntry {
87
+ id?: string;
88
+ action: "create" | "update";
89
+ number?: number;
90
+ payload: GithubExportPayload;
91
+ }
92
+ export declare function buildExportPlan(items: PmItem[], repo: string | undefined): ExportPlanEntry[];
93
+ export declare function exportWillApply(options: Record<string, unknown>): boolean;
94
+ export declare function buildSearchUrl(repo: string, query: string): string;
95
+ export declare function mapSearchHits(matchedNumbers: number[], repo: string, itemsByProvenance: Map<string, PmItem>): Array<{
96
+ id: string;
97
+ score: number;
98
+ matched_fields: string[];
99
+ }>;
100
+ export declare function resolveSearchRepo(options: Record<string, unknown>): string | undefined;
101
+ export interface ValidateReport {
102
+ ok: boolean;
103
+ gh_cli: boolean;
104
+ token: boolean;
105
+ token_source: "env" | "gh" | "none";
106
+ repo?: string;
107
+ repo_accessible?: boolean;
108
+ repo_status?: number;
109
+ rate_limit_remaining?: number;
110
+ messages: string[];
111
+ }
112
+ export declare function isMutatingGithubCommand(command: string, options: Record<string, unknown>): boolean;
14
113
  declare const _default: {
15
114
  name: string;
16
115
  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":"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"}