pm-jira 2026.5.31 → 2026.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.6.2 - 2026-06-02
4
+
5
+ ### Added
6
+
7
+ - Adopt full SDK surface: jira import/export + schema fields + flags ([pm-jira-27sk](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/features/pm-jira-27sk.toon))
8
+
9
+ ## 2026.06.01 - 2026-06-01
10
+
11
+ ### Fixed
12
+
13
+ - jira sync threw plain Error \(no exitCode\) → runtime double-invocation ([pm-jira-6cr5](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/issues/pm-jira-6cr5.toon))
14
+
3
15
  ## 2026.05.29-1 - 2026-05-29
4
16
 
5
17
  ### Added
package/README.md CHANGED
@@ -4,12 +4,14 @@ A [pm-cli](https://github.com/unbraind/pm-cli) extension that syncs Jira issues
4
4
 
5
5
  ## Features
6
6
 
7
- - Sync issues from any Jira project into pm items with full deduplication
8
- - Custom JQL support for fine-grained control over what gets synced
9
- - Automatic mapping of Jira statuses and priorities to pm equivalents
7
+ - Pull issues from any Jira project into pm items via `pm jira import` or `pm jira sync`
8
+ - Export pm items back out as Jira create payloads via `pm jira export` (preview, or `--push` to create issues)
9
+ - Custom JQL support for fine-grained control over what gets pulled
10
+ - Automatic mapping of Jira statuses and priorities to pm equivalents, with a `--status-map` override
10
11
  - Labels and fix versions mapped as pm tags
12
+ - Jira provenance (key + browse URL) persisted in the item description and declared as `jira_key` / `jira_url` schema fields
11
13
  - Dry-run mode to preview changes before writing
12
- - Works as both a `pm jira sync` command and a `jira-sync` importer
14
+ - Works as a `pm jira sync`/`pm jira import` command, a `pm jira export` exporter, and a config-driven `jira-sync` importer
13
15
 
14
16
  ## Installation
15
17
 
@@ -74,17 +76,57 @@ pm jira sync --project PROJ --status wip
74
76
  pm jira sync --project PROJ --max-results 100 --status todo --dry-run
75
77
  ```
76
78
 
77
- ### Flags
79
+ ### Command / Importer: `pm jira import`
78
80
 
79
- | Flag | Alias | Type | Default | Description |
80
- |---|---|---|---|---|
81
- | `--project` | `-p` | string | — | Jira project key (e.g. `PROJ`). Used to build default JQL. |
82
- | `--jql` | `-q` | string | — | Custom JQL query. Overrides `--project` default JQL. |
83
- | `--max-results` | `-n` | number | `500` | Maximum number of issues to sync. |
84
- | `--dry-run` | — | boolean | `false` | Preview what would be synced without writing. |
85
- | `--status` | `-s` | string | — | Filter by mapped pm status (`todo`, `wip`, `done`, `blocked`). |
81
+ `pm jira import` is the native importer pipeline equivalent of `pm jira sync` — it
82
+ pulls issues via JQL and creates pm items. Both share the same flags and logic.
86
83
 
87
- ### Importer: `jira-sync`
84
+ ```bash
85
+ # Pull all open issues from a project
86
+ pm jira import --project PROJ
87
+
88
+ # Use a custom Jira host (instead of JIRA_BASE_URL) + custom JQL
89
+ pm jira import --host https://company.atlassian.net --jql "project = PROJ AND assignee = currentUser()"
90
+
91
+ # Override status mapping
92
+ pm jira import --project PROJ --status-map "QA=blocked,Done=closed"
93
+ ```
94
+
95
+ ### Pull flags (`pm jira sync` / `pm jira import`)
96
+
97
+ | Flag | Type | Default | Description |
98
+ |---|---|---|---|
99
+ | `--project` | string | — | Jira project key (e.g. `PROJ`). Used to build default JQL. |
100
+ | `--jql` | string | — | Custom JQL query. Overrides `--project` default JQL. |
101
+ | `--host` | string | `$JIRA_BASE_URL` | Jira base URL override. |
102
+ | `--max-results` | number | `500` | Maximum number of issues to pull. |
103
+ | `--status` | string | — | Filter by mapped pm status (`open`, `in_progress`, `closed`, `blocked`). |
104
+ | `--status-map` | string | — | Override mapping, e.g. `"In Review=in_progress,QA=blocked"`. |
105
+ | `--dry-run` | boolean | `false` | Preview what would be created without writing. |
106
+
107
+ ### Exporter: `pm jira export`
108
+
109
+ Render pm items as Jira create payloads. Prints JSON by default; with `--push`
110
+ (and credentials + `--project`) it POSTs each payload to Jira's create-issue API.
111
+
112
+ ```bash
113
+ # Preview the Jira create payloads for all pm items (no network, no creds needed)
114
+ pm jira export --project PROJ
115
+
116
+ # Actually create the issues in Jira (requires creds + --project)
117
+ pm jira export --push --project PROJ
118
+ ```
119
+
120
+ | Flag | Type | Default | Description |
121
+ |---|---|---|---|
122
+ | `--project` | string | — | Target Jira project key for created issues (required for `--push`). |
123
+ | `--host` | string | `$JIRA_BASE_URL` | Jira base URL override. |
124
+ | `--push` | boolean | `false` | POST payloads to Jira (requires credentials + `--project`). |
125
+
126
+ Items whose description carries a `Jira <KEY>: <url>` provenance marker (added on
127
+ import) can be matched back to their upstream issue.
128
+
129
+ ### Importer: `jira-sync` (config-driven)
88
130
 
89
131
  Use the `jira-sync` importer in your pm-cli config for automated syncing:
90
132
 
@@ -116,11 +158,13 @@ Credentials are read from environment variables or from the importer config:
116
158
 
117
159
  ## Status Mapping
118
160
 
161
+ The default mapping (override per-status with `--status-map`):
162
+
119
163
  | Jira Status | pm Status |
120
164
  |---|---|
121
- | To Do, Open, Backlog, (any other) | `todo` |
122
- | In Progress, In Review, In Development, Code Review | `wip` |
123
- | Done, Resolved, Closed, Complete, Completed | `done` |
165
+ | To Do, Open, Backlog, (any other) | `open` |
166
+ | In Progress, In Review, In Development, Code Review | `in_progress` |
167
+ | Done, Resolved, Closed, Complete, Completed | `closed` |
124
168
  | Blocked | `blocked` |
125
169
 
126
170
  ## Priority Mapping
@@ -134,19 +178,20 @@ Credentials are read from environment variables or from the importer config:
134
178
 
135
179
  ## Item Structure
136
180
 
137
- Each synced item uses `${PROJECT}-${NUMBER}` as the idSuffix for deduplication (e.g. `PROJ-123`). Running sync again updates existing items rather than creating duplicates.
138
-
139
- Items include:
181
+ Each imported item includes:
140
182
 
141
183
  - **title**: `[PROJ-123] Issue summary`
142
184
  - **body**: Issue description (converted from Atlassian Document Format to plain text)
185
+ - **description**: A provenance marker `Jira PROJ-123: https://…/browse/PROJ-123` so the
186
+ Jira key + URL survive round-trips and power `pm jira export`. The extension also
187
+ declares `jira_key` and `jira_url` as optional item schema fields (capability `schema`).
143
188
  - **status**: Mapped from Jira status (see table above)
144
189
  - **priority**: Mapped from Jira priority (see table above)
145
190
  - **tags**: Jira labels + fix version names
146
- - **meta.jira_key**: Original Jira issue key (e.g. `PROJ-123`)
147
- - **meta.jira_project**: Jira project key (e.g. `PROJ`)
148
- - **meta.jira_assignee**: Assignee display name (if set)
149
- - **meta.jira_duedate**: Due date in `YYYY-MM-DD` format (if set)
191
+ - **deadline**: Jira due date (`YYYY-MM-DD`), if set
192
+
193
+ > Note: pm's `create` has no generic custom-field setter for a standalone extension, so
194
+ > provenance is stored in the description marker rather than as structured metadata.
150
195
 
151
196
  ## JQL Examples
152
197
 
package/dist/index.d.ts CHANGED
@@ -1,9 +1,117 @@
1
+ export declare const EXIT_CODE: {
2
+ readonly GENERIC_FAILURE: 1;
3
+ readonly USAGE: 2;
4
+ readonly NOT_FOUND: 3;
5
+ };
6
+ export declare class CommandError extends Error {
7
+ exitCode: number;
8
+ constructor(message: string, exitCode?: number);
9
+ }
10
+ interface JiraIssue {
11
+ key: string;
12
+ fields: {
13
+ summary: string;
14
+ description?: {
15
+ type: string;
16
+ content?: Array<{
17
+ type: string;
18
+ content?: Array<{
19
+ type: string;
20
+ text?: string;
21
+ }>;
22
+ }>;
23
+ } | null;
24
+ status: {
25
+ name: string;
26
+ statusCategory: {
27
+ key: string;
28
+ };
29
+ };
30
+ priority?: {
31
+ name: string;
32
+ } | null;
33
+ labels?: string[];
34
+ assignee?: {
35
+ displayName: string;
36
+ emailAddress: string;
37
+ } | null;
38
+ duedate?: string | null;
39
+ fixVersions?: Array<{
40
+ name: string;
41
+ }>;
42
+ };
43
+ }
44
+ type PmPriority = 1 | 2 | 3 | 4;
45
+ type PmStatus = "open" | "in_progress" | "closed" | "blocked";
46
+ export declare function mapJiraPriority(jiraPriority: string | undefined): PmPriority;
47
+ export declare function mapJiraStatus(jiraStatus: string, statusMap?: Record<string, PmStatus>): PmStatus;
48
+ export declare function parseStatusMap(raw: string | undefined): Record<string, PmStatus> | undefined;
49
+ export declare function adfToPlainText(node: JiraIssue["fields"]["description"] | {
50
+ type: string;
51
+ content?: unknown[];
52
+ text?: string;
53
+ } | null | undefined): string;
54
+ export declare function plainTextToAdf(text: string): {
55
+ type: "doc";
56
+ version: 1;
57
+ content: Array<{
58
+ type: "paragraph";
59
+ content: Array<{
60
+ type: "text";
61
+ text: string;
62
+ }>;
63
+ }>;
64
+ };
65
+ export declare function jiraProvenance(key: string, browseUrl: string): string;
66
+ export declare function extractJiraKey(text: string | undefined): {
67
+ key: string;
68
+ url: string;
69
+ } | undefined;
1
70
  export declare function readStringOption(options: Record<string, unknown>, kebab: string): string | undefined;
2
71
  export declare function readNumberOption(options: Record<string, unknown>, kebab: string): number | undefined;
3
72
  export declare function readBooleanOption(options: Record<string, unknown>, kebab: string): boolean;
4
73
  export declare function optionString(options: Record<string, unknown>, ...keys: string[]): string | undefined;
5
74
  export declare function optionInt(options: Record<string, unknown>, defaultValue: number, ...keys: string[]): number;
6
75
  export declare function optionEnabled(options: Record<string, unknown>, ...keys: string[]): boolean;
76
+ export interface JiraCreds {
77
+ baseUrl: string;
78
+ email: string;
79
+ token: string;
80
+ authHeader: string;
81
+ }
82
+ export declare function resolveCreds(options: Record<string, unknown>, envLike?: NodeJS.ProcessEnv): JiraCreds;
83
+ export interface IssueToItem {
84
+ title: string;
85
+ status: PmStatus;
86
+ priority: PmPriority;
87
+ body: string;
88
+ tags: string[];
89
+ deadline?: string;
90
+ description: string;
91
+ }
92
+ export declare function issueToItem(issue: JiraIssue, baseUrl: string, statusMap?: Record<string, PmStatus>): IssueToItem;
93
+ interface PmItem {
94
+ id?: string;
95
+ title?: string;
96
+ status?: string;
97
+ body?: string;
98
+ description?: string;
99
+ tags?: string[];
100
+ }
101
+ export interface JiraCreatePayload {
102
+ fields: {
103
+ project?: {
104
+ key: string;
105
+ };
106
+ summary: string;
107
+ description: ReturnType<typeof plainTextToAdf>;
108
+ issuetype: {
109
+ name: string;
110
+ };
111
+ labels: string[];
112
+ };
113
+ }
114
+ export declare function itemToJiraPayload(item: PmItem, projectKey?: string): JiraCreatePayload;
7
115
  declare const _default: {
8
116
  name: string;
9
117
  version: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAuHA,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,SAAS,CAKpB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,SAAS,CAKpB;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,EAAE,MAAM,GACZ,OAAO,CAQT;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAMpG;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAM3G;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAE1F;;;;;;AAsFD,wBAyPG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,8 +1,39 @@
1
+ // pm-jira — Jira issue sync / importer / exporter for pm-cli
2
+ //
3
+ // Capabilities (see manifest.json):
4
+ // commands — `pm jira sync` (legacy, full-featured pull)
5
+ // importers — `pm jira import` (native import pipeline: pull issues via JQL)
6
+ // — `jira-sync` (config-driven importer, kept for back-compat)
7
+ // exporters — `pm jira export` (render pm items as Jira-create payloads;
8
+ // only POSTs to Jira with explicit --push AND creds present)
9
+ // schema — declares jira_key / jira_url item fields
10
+ // services — declared for governance parity with the sync service surface
1
11
  import https from "node:https";
2
12
  import { URL } from "node:url";
3
13
  import { spawnSync } from "node:child_process";
4
14
  const defineExtension = ((extension) => extension);
5
- function mapJiraPriority(jiraPriority) {
15
+ // pm's extension command runtime only treats a thrown error as a cleanly
16
+ // handled non-zero exit when the error carries a numeric `exitCode` property
17
+ // (see @unbrained/pm-cli runCommandHandler). A plain `Error` makes the runtime
18
+ // fall through to its "unhandled" path, which RE-INVOKES the command handler a
19
+ // second time — doubling side effects (e.g. a second Jira fetch) and exiting
20
+ // with a generic code instead of a semantic one. We mirror the SDK's EXIT_CODE
21
+ // contract here rather than importing it: standalone-installed extensions load
22
+ // only their own `dist/`, so `@unbrained/pm-cli` is not resolvable at runtime.
23
+ export const EXIT_CODE = {
24
+ GENERIC_FAILURE: 1,
25
+ USAGE: 2,
26
+ NOT_FOUND: 3,
27
+ };
28
+ export class CommandError extends Error {
29
+ exitCode;
30
+ constructor(message, exitCode = EXIT_CODE.GENERIC_FAILURE) {
31
+ super(message);
32
+ this.name = "CommandError";
33
+ this.exitCode = exitCode;
34
+ }
35
+ }
36
+ export function mapJiraPriority(jiraPriority) {
6
37
  if (!jiraPriority)
7
38
  return 3;
8
39
  const name = jiraPriority.toLowerCase();
@@ -16,8 +47,11 @@ function mapJiraPriority(jiraPriority) {
16
47
  return 4;
17
48
  return 3;
18
49
  }
19
- function mapJiraStatus(jiraStatus) {
50
+ export function mapJiraStatus(jiraStatus, statusMap) {
20
51
  const name = jiraStatus.toLowerCase();
52
+ // A caller-supplied --status-map override wins over the built-in heuristics.
53
+ if (statusMap && name in statusMap)
54
+ return statusMap[name];
21
55
  if (name === "blocked")
22
56
  return "blocked";
23
57
  if (name === "in progress" ||
@@ -34,10 +68,39 @@ function mapJiraStatus(jiraStatus) {
34
68
  // Default: to do / open / backlog / any other
35
69
  return "open";
36
70
  }
71
+ const PM_STATUSES = ["open", "in_progress", "closed", "blocked"];
72
+ // Parse a --status-map value of the form
73
+ // "In Progress=in_progress,QA=blocked"
74
+ // into a lower-cased lookup table. Invalid pm-status targets are rejected with
75
+ // a USAGE CommandError so a typo never silently maps everything to "open".
76
+ export function parseStatusMap(raw) {
77
+ if (!raw)
78
+ return undefined;
79
+ const map = {};
80
+ for (const pair of raw.split(",")) {
81
+ const trimmed = pair.trim();
82
+ if (!trimmed)
83
+ continue;
84
+ const eq = trimmed.indexOf("=");
85
+ if (eq < 0) {
86
+ throw new CommandError(`Invalid --status-map entry "${trimmed}" (expected "JiraStatus=pm_status").`, EXIT_CODE.USAGE);
87
+ }
88
+ const from = trimmed.slice(0, eq).trim().toLowerCase();
89
+ const to = trimmed.slice(eq + 1).trim();
90
+ if (!from) {
91
+ throw new CommandError(`Invalid --status-map entry "${trimmed}" (empty Jira status).`, EXIT_CODE.USAGE);
92
+ }
93
+ if (!PM_STATUSES.includes(to)) {
94
+ throw new CommandError(`Invalid --status-map target "${to}" (expected one of ${PM_STATUSES.join("|")}).`, EXIT_CODE.USAGE);
95
+ }
96
+ map[from] = to;
97
+ }
98
+ return Object.keys(map).length > 0 ? map : undefined;
99
+ }
37
100
  // ---------------------------------------------------------------------------
38
101
  // Jira description (Atlassian Document Format) → plain text
39
102
  // ---------------------------------------------------------------------------
40
- function adfToPlainText(node) {
103
+ export function adfToPlainText(node) {
41
104
  if (!node)
42
105
  return "";
43
106
  if ("text" in node && typeof node.text === "string") {
@@ -51,6 +114,34 @@ function adfToPlainText(node) {
51
114
  }
52
115
  return "";
53
116
  }
117
+ // Render a plain-text body as a minimal Atlassian Document Format doc so it can
118
+ // be POSTed back to the Jira create API.
119
+ export function plainTextToAdf(text) {
120
+ const body = text && text.trim().length > 0 ? text : " ";
121
+ return {
122
+ type: "doc",
123
+ version: 1,
124
+ content: [{ type: "paragraph", content: [{ type: "text", text: body }] }],
125
+ };
126
+ }
127
+ // ---------------------------------------------------------------------------
128
+ // Provenance marker — pm `create` has no generic custom-field setter for an
129
+ // extension, so (like pm-github) we persist the Jira key + browse URL inside
130
+ // the item description with a stable marker. This survives round-trips and
131
+ // powers `pm jira export`.
132
+ // ---------------------------------------------------------------------------
133
+ const JIRA_MARKER = /^Jira ([A-Z][A-Z0-9]+-\d+): (\S+)\s*$/m;
134
+ export function jiraProvenance(key, browseUrl) {
135
+ return `Jira ${key}: ${browseUrl}`;
136
+ }
137
+ export function extractJiraKey(text) {
138
+ if (!text)
139
+ return undefined;
140
+ const m = text.match(JIRA_MARKER);
141
+ if (!m)
142
+ return undefined;
143
+ return { key: m[1], url: m[2] };
144
+ }
54
145
  // ---------------------------------------------------------------------------
55
146
  // Option readers — tolerate both kebab-case and camelCase keys.
56
147
  // The pm CLI normalizes loose extension flags to camelCase (e.g. --dry-run
@@ -106,8 +197,31 @@ export function optionInt(options, defaultValue, ...keys) {
106
197
  export function optionEnabled(options, ...keys) {
107
198
  return keys.some((key) => readBooleanOption(options, key));
108
199
  }
200
+ // Resolve Jira credentials from options (--host) + env. Returns a structured
201
+ // CommandError (numeric exitCode) when anything is missing rather than throwing
202
+ // a bare Error, so the CLI exits non-zero exactly once with a helpful message.
203
+ export function resolveCreds(options, envLike = process.env) {
204
+ const baseUrl = readStringOption(options, "host") ??
205
+ (envLike["JIRA_BASE_URL"]?.trim() || undefined);
206
+ const token = envLike["JIRA_API_TOKEN"]?.trim() || undefined;
207
+ const email = envLike["JIRA_EMAIL"]?.trim() || undefined;
208
+ const missing = [];
209
+ if (!baseUrl)
210
+ missing.push("JIRA_BASE_URL (or --host)");
211
+ if (!email)
212
+ missing.push("JIRA_EMAIL");
213
+ if (!token)
214
+ missing.push("JIRA_API_TOKEN");
215
+ if (missing.length > 0) {
216
+ throw new CommandError(`Missing Jira credentials: ${missing.join(", ")}. ` +
217
+ `Set JIRA_BASE_URL (or pass --host), JIRA_EMAIL, and JIRA_API_TOKEN. ` +
218
+ `Create a token at https://id.atlassian.com/manage-profile/security/api-tokens`, EXIT_CODE.USAGE);
219
+ }
220
+ const authHeader = `Basic ${Buffer.from(`${email}:${token}`).toString("base64")}`;
221
+ return { baseUrl: baseUrl.replace(/\/$/, ""), email: email, token: token, authHeader };
222
+ }
109
223
  // ---------------------------------------------------------------------------
110
- // HTTP helper using Node.js native https module
224
+ // HTTP helpers using Node.js native https module
111
225
  // ---------------------------------------------------------------------------
112
226
  function httpsGet(url, authHeader) {
113
227
  return new Promise((resolve, reject) => {
@@ -137,6 +251,47 @@ function httpsGet(url, authHeader) {
137
251
  });
138
252
  });
139
253
  req.on("error", reject);
254
+ req.setTimeout(30000, () => {
255
+ req.destroy();
256
+ reject(new Error("Jira API request timed out"));
257
+ });
258
+ req.end();
259
+ });
260
+ }
261
+ function httpsPost(url, authHeader, payload) {
262
+ return new Promise((resolve, reject) => {
263
+ const parsed = new URL(url);
264
+ const options = {
265
+ hostname: parsed.hostname,
266
+ path: parsed.pathname + parsed.search,
267
+ method: "POST",
268
+ headers: {
269
+ Authorization: authHeader,
270
+ "Content-Type": "application/json",
271
+ Accept: "application/json",
272
+ "Content-Length": String(Buffer.byteLength(payload)),
273
+ },
274
+ };
275
+ const req = https.request(options, (res) => {
276
+ let body = "";
277
+ res.on("data", (chunk) => {
278
+ body += chunk.toString();
279
+ });
280
+ res.on("end", () => {
281
+ if (res.statusCode && res.statusCode >= 400) {
282
+ reject(new Error(`Jira API error ${res.statusCode}: ${body.slice(0, 200)}`));
283
+ }
284
+ else {
285
+ resolve(body);
286
+ }
287
+ });
288
+ });
289
+ req.on("error", reject);
290
+ req.setTimeout(30000, () => {
291
+ req.destroy();
292
+ reject(new Error("Jira API request timed out"));
293
+ });
294
+ req.write(payload);
140
295
  req.end();
141
296
  });
142
297
  }
@@ -167,15 +322,162 @@ async function fetchAllJiraIssues(baseUrl, authHeader, jql, maxResults) {
167
322
  }
168
323
  return allIssues;
169
324
  }
325
+ export function issueToItem(issue, baseUrl, statusMap) {
326
+ const tags = [
327
+ ...(issue.fields.labels ?? []),
328
+ ...(issue.fields.fixVersions?.map((v) => v.name) ?? []),
329
+ ];
330
+ const rawBody = adfToPlainText(issue.fields.description);
331
+ const browseUrl = `${baseUrl.replace(/\/$/, "")}/browse/${issue.key}`;
332
+ return {
333
+ title: `[${issue.key}] ${issue.fields.summary}`,
334
+ status: mapJiraStatus(issue.fields.status.name, statusMap),
335
+ priority: mapJiraPriority(issue.fields.priority?.name),
336
+ body: rawBody,
337
+ tags,
338
+ deadline: issue.fields.duedate ?? undefined,
339
+ // Provenance marker lives in the description so it survives round-trips.
340
+ description: jiraProvenance(issue.key, browseUrl),
341
+ };
342
+ }
343
+ function createPmItem(pmRoot, item) {
344
+ const args = [
345
+ "--path", pmRoot,
346
+ "create",
347
+ "--title", item.title,
348
+ "--status", item.status,
349
+ "--type", "Issue",
350
+ "--priority", String(item.priority),
351
+ "--description", item.description,
352
+ ...(item.body ? ["--body", item.body] : []),
353
+ ...(item.deadline ? ["--deadline", item.deadline] : []),
354
+ ...(item.tags.length > 0 ? ["--tags", item.tags.join(",")] : []),
355
+ ];
356
+ const result = spawnSync("pm", args, { encoding: "utf-8" });
357
+ return result.status === 0;
358
+ }
359
+ // Shared import core for both `pm jira sync`, `pm jira import` and the
360
+ // `jira-sync` importer. Throws CommandError (semantic exitCode) on failure.
361
+ async function runImport(options, pmRoot, opts = {}) {
362
+ const creds = resolveCreds(options);
363
+ const project = readStringOption(options, "project");
364
+ const customJql = readStringOption(options, "jql");
365
+ const maxResults = readNumberOption(options, "max-results") ?? 500;
366
+ const statusMap = parseStatusMap(readStringOption(options, "status-map"));
367
+ const dryRun = opts.dryRun ?? readBooleanOption(options, "dry-run");
368
+ const statusFilter = opts.statusFilter ?? readStringOption(options, "status");
369
+ if (!project && !customJql) {
370
+ throw new CommandError("Provide either --project <KEY> or --jql <query> to specify which issues to import.", EXIT_CODE.USAGE);
371
+ }
372
+ const jql = customJql ??
373
+ `project = ${project} AND statusCategory != Done ORDER BY priority ASC`;
374
+ console.error(`Fetching issues from Jira... (JQL: ${jql})`);
375
+ let issues;
376
+ try {
377
+ issues = await fetchAllJiraIssues(creds.baseUrl, creds.authHeader, jql, maxResults);
378
+ }
379
+ catch (err) {
380
+ const msg = err instanceof Error ? err.message : String(err);
381
+ const exitCode = /error 404/.test(msg) ? EXIT_CODE.NOT_FOUND : EXIT_CODE.GENERIC_FAILURE;
382
+ throw new CommandError(`Failed to fetch issues from Jira: ${msg}`, exitCode);
383
+ }
384
+ console.error(`Fetched ${issues.length} issues from Jira`);
385
+ const mapped = issues.map((issue) => ({
386
+ issue,
387
+ item: issueToItem(issue, creds.baseUrl, statusMap),
388
+ }));
389
+ const filtered = statusFilter
390
+ ? mapped.filter(({ item }) => item.status === statusFilter)
391
+ : mapped;
392
+ if (statusFilter && filtered.length !== mapped.length) {
393
+ console.error(`Filtered to ${filtered.length} issues with pm status "${statusFilter}"`);
394
+ }
395
+ const projectLabel = project ?? "custom-jql";
396
+ if (dryRun) {
397
+ console.error(`[dry-run] Would create ${filtered.length} items:`);
398
+ for (const { issue, item } of filtered.slice(0, 20)) {
399
+ console.error(` ${issue.key}: ${issue.fields.summary} [${item.status}]`);
400
+ }
401
+ if (filtered.length > 20)
402
+ console.error(` ... and ${filtered.length - 20} more`);
403
+ return { success: true, dryRun: true, total: filtered.length, project: projectLabel };
404
+ }
405
+ let created = 0;
406
+ for (const { issue, item } of filtered) {
407
+ if (createPmItem(pmRoot, item))
408
+ created++;
409
+ else
410
+ console.error(`Failed to create item for ${issue.key}`);
411
+ }
412
+ console.error(`Imported ${created} issues from Jira ${projectLabel}`);
413
+ return {
414
+ success: true,
415
+ synced: created,
416
+ imported: created,
417
+ total: filtered.length,
418
+ project: projectLabel,
419
+ summary: `Imported ${created} issues from Jira ${projectLabel}`,
420
+ };
421
+ }
422
+ function readPmItems(pmRoot) {
423
+ const result = spawnSync("pm", ["--path", pmRoot, "--json", "list", "--full", "--include-body", "--limit", "10000"], { encoding: "utf-8" });
424
+ if (result.status !== 0) {
425
+ throw new CommandError(result.stderr || "pm list failed");
426
+ }
427
+ try {
428
+ const parsed = JSON.parse(result.stdout);
429
+ const items = Array.isArray(parsed) ? parsed : parsed.items ?? parsed.results ?? [];
430
+ return items;
431
+ }
432
+ catch {
433
+ throw new CommandError("Could not parse `pm list --json` output.");
434
+ }
435
+ }
436
+ // Convert a pm item to a Jira create payload. `projectKey` is optional so the
437
+ // transform stays pure/testable; the exporter requires it before POSTing.
438
+ export function itemToJiraPayload(item, projectKey) {
439
+ const summary = (item.title ?? "(untitled)").trim() || "(untitled)";
440
+ const bodyText = item.body || item.description || "";
441
+ return {
442
+ fields: {
443
+ ...(projectKey ? { project: { key: projectKey } } : {}),
444
+ summary,
445
+ description: plainTextToAdf(bodyText),
446
+ issuetype: { name: "Task" },
447
+ labels: (item.tags ?? []).map((t) => t.replace(/\s+/g, "-")),
448
+ },
449
+ };
450
+ }
170
451
  // ---------------------------------------------------------------------------
171
- // Extension definition
452
+ // Extension
172
453
  // ---------------------------------------------------------------------------
454
+ const PULL_FLAGS = [
455
+ { long: "--project", value_name: "KEY", description: "Jira project key (e.g. PROJ)" },
456
+ { long: "--jql", value_name: "query", description: "Custom JQL query (overrides --project default)" },
457
+ { long: "--host", value_name: "url", description: "Jira base URL override (else JIRA_BASE_URL)" },
458
+ { long: "--max-results", value_name: "n", description: "Max issues to fetch (default: 500)" },
459
+ { long: "--status", value_name: "filter", description: "Filter by pm status (open|in_progress|closed|blocked)" },
460
+ { long: "--status-map", value_name: "map", description: 'Override status mapping, e.g. "QA=blocked,Done=closed"' },
461
+ { long: "--dry-run", description: "Preview without writing" },
462
+ ];
463
+ const EXPORT_FLAGS = [
464
+ { long: "--project", value_name: "KEY", description: "Target Jira project key for created issues" },
465
+ { long: "--host", value_name: "url", description: "Jira base URL override (else JIRA_BASE_URL)" },
466
+ { long: "--push", description: "POST the payloads to Jira (requires creds + --project)" },
467
+ ];
173
468
  export default defineExtension({
174
469
  name: "pm-jira",
175
- version: "2026.5.31",
470
+ version: "2026.6.2",
176
471
  activate(api) {
177
472
  // -----------------------------------------------------------------------
178
- // Command: pm jira sync
473
+ // schema declare Jira provenance fields so the workspace knows them
474
+ // -----------------------------------------------------------------------
475
+ api.registerItemFields([
476
+ { name: "jira_key", type: "string", optional: true },
477
+ { name: "jira_url", type: "string", optional: true },
478
+ ]);
479
+ // -----------------------------------------------------------------------
480
+ // Command: pm jira sync (legacy name; kept for back-compat)
179
481
  // -----------------------------------------------------------------------
180
482
  api.registerCommand({
181
483
  name: "jira sync",
@@ -186,167 +488,89 @@ export default defineExtension({
186
488
  "pm jira sync --project PROJ --max-results 200",
187
489
  "pm jira sync --jql 'project = PROJ AND assignee = currentUser()'",
188
490
  "pm jira sync --project PROJ --status open --dry-run",
491
+ "pm jira sync --project PROJ --status-map 'QA=blocked,Done=closed'",
189
492
  ],
190
- flags: [
191
- {
192
- long: "--project",
193
- value_name: "KEY",
194
- description: "Jira project key (e.g. PROJ)",
195
- },
196
- {
197
- long: "--jql",
198
- value_name: "query",
199
- description: "Custom JQL query",
200
- },
201
- {
202
- long: "--max-results",
203
- value_name: "n",
204
- description: "Max issues to sync (default: 500)",
205
- },
206
- {
207
- long: "--dry-run",
208
- description: "Preview without writing",
209
- },
210
- {
211
- long: "--status",
212
- value_name: "filter",
213
- description: "Filter by pm status (open|in_progress|closed|blocked)",
214
- },
215
- ],
493
+ flags: PULL_FLAGS,
216
494
  async run(ctx) {
217
- const project = readStringOption(ctx.options, "project");
218
- const customJql = readStringOption(ctx.options, "jql");
219
- const maxResults = readNumberOption(ctx.options, "max-results") ?? 500;
220
- const dryRun = readBooleanOption(ctx.options, "dry-run");
221
- const statusFilter = readStringOption(ctx.options, "status");
222
- // Validate env vars
223
- const baseUrl = process.env["JIRA_BASE_URL"];
224
- const token = process.env["JIRA_API_TOKEN"];
225
- const email = process.env["JIRA_EMAIL"];
226
- if (!baseUrl || !token || !email) {
227
- throw new Error("Missing required environment variables. Please set JIRA_BASE_URL, JIRA_API_TOKEN, and JIRA_EMAIL.");
228
- }
229
- if (!project && !customJql) {
230
- throw new Error("Provide either --project <KEY> or --jql <query> to specify which issues to sync.");
231
- }
232
- const jql = customJql ??
233
- `project = ${project} AND statusCategory != Done ORDER BY priority ASC`;
234
- const authHeader = `Basic ${Buffer.from(`${email}:${token}`).toString("base64")}`;
235
- console.error(`Fetching issues from Jira... (JQL: ${jql})`);
236
- let issues;
237
- try {
238
- issues = await fetchAllJiraIssues(baseUrl.replace(/\/$/, ""), authHeader, jql, maxResults);
239
- }
240
- catch (err) {
241
- const msg = err instanceof Error ? err.message : String(err);
242
- throw new Error(`Failed to fetch issues from Jira: ${msg}`);
243
- }
244
- console.error(`Fetched ${issues.length} issues from Jira`);
245
- // Apply status filter before upsert
246
- const filtered = statusFilter
247
- ? issues.filter((issue) => mapJiraStatus(issue.fields.status.name) === statusFilter)
248
- : issues;
249
- if (statusFilter && filtered.length !== issues.length) {
250
- console.error(`Filtered to ${filtered.length} issues with pm status "${statusFilter}"`);
251
- }
252
- if (dryRun) {
253
- console.error(`[dry-run] Would upsert ${filtered.length} items:`);
254
- for (const issue of filtered.slice(0, 20)) {
255
- console.error(` ${issue.key}: ${issue.fields.summary} [${mapJiraStatus(issue.fields.status.name)}]`);
256
- }
257
- if (filtered.length > 20) {
258
- console.error(` ... and ${filtered.length - 20} more`);
259
- }
260
- return {
261
- success: true,
262
- dryRun: true,
263
- total: filtered.length,
264
- project: project ?? "custom-jql",
265
- };
266
- }
267
- // Create items via pm CLI
268
- let upserted = 0;
269
- for (const issue of filtered) {
270
- const tags = [
271
- ...(issue.fields.labels ?? []),
272
- ...(issue.fields.fixVersions?.map((v) => v.name) ?? []),
273
- ];
274
- const body = adfToPlainText(issue.fields.description);
275
- const priority = mapJiraPriority(issue.fields.priority?.name);
276
- const result = spawnSync("pm", [
277
- "--path", ctx.pm_root,
278
- "create",
279
- "--title", `[${issue.key}] ${issue.fields.summary}`,
280
- "--status", mapJiraStatus(issue.fields.status.name),
281
- "--type", "Issue",
282
- "--priority", String(priority),
283
- ...(body ? ["--body", body] : []),
284
- ...(issue.fields.duedate ? ["--deadline", issue.fields.duedate] : []),
285
- ...(tags.length > 0 ? ["--tags", tags.join(",")] : []),
286
- ], { encoding: "utf-8" });
287
- if (result.status === 0) {
288
- upserted++;
289
- }
290
- else {
291
- console.error(`Failed to create item for ${issue.key}: ${result.stderr ?? ""}`);
292
- }
293
- }
294
- const projectLabel = project ?? "custom-jql";
295
- console.error(`Synced ${upserted} issues from Jira project ${projectLabel}`);
296
- return {
297
- success: true,
298
- synced: upserted,
299
- total: filtered.length,
300
- project: projectLabel,
301
- summary: `Synced ${upserted} issues from Jira project ${projectLabel}`,
302
- };
495
+ return runImport(ctx.options, ctx.pm_root);
303
496
  },
304
497
  });
305
498
  // -----------------------------------------------------------------------
306
- // Importer: jira-sync
499
+ // importer — `pm jira import` (native import pipeline)
500
+ // -----------------------------------------------------------------------
501
+ api.registerImporter("jira", async (ctx) => {
502
+ return runImport(ctx.options || {}, ctx.pm_root);
503
+ });
504
+ // -----------------------------------------------------------------------
505
+ // importer — `jira-sync` (config-driven; kept for back-compat)
506
+ // Credentials may arrive via options (importer config) or env.
307
507
  // -----------------------------------------------------------------------
308
508
  api.registerImporter("jira-sync", async (ctx) => {
309
- const baseUrl = ctx.options["JIRA_BASE_URL"] ??
310
- process.env["JIRA_BASE_URL"];
311
- const token = ctx.options["JIRA_API_TOKEN"] ??
312
- process.env["JIRA_API_TOKEN"];
313
- const email = ctx.options["JIRA_EMAIL"] ??
314
- process.env["JIRA_EMAIL"];
315
- const project = readStringOption(ctx.options, "project");
316
- const customJql = readStringOption(ctx.options, "jql");
317
- const maxResults = readNumberOption(ctx.options, "max-results") ?? 500;
318
- if (!baseUrl || !token || !email) {
319
- throw new Error("jira-sync importer requires JIRA_BASE_URL, JIRA_API_TOKEN, and JIRA_EMAIL (via options or env)");
320
- }
509
+ const options = ctx.options || {};
510
+ // Merge importer-config creds into a virtual env so resolveCreds can read
511
+ // them uniformly without leaking secrets into process.env.
512
+ const envLike = {
513
+ ...process.env,
514
+ ...(typeof options["JIRA_BASE_URL"] === "string" ? { JIRA_BASE_URL: options["JIRA_BASE_URL"] } : {}),
515
+ ...(typeof options["JIRA_API_TOKEN"] === "string" ? { JIRA_API_TOKEN: options["JIRA_API_TOKEN"] } : {}),
516
+ ...(typeof options["JIRA_EMAIL"] === "string" ? { JIRA_EMAIL: options["JIRA_EMAIL"] } : {}),
517
+ };
518
+ const creds = resolveCreds(options, envLike);
519
+ const project = readStringOption(options, "project");
520
+ const customJql = readStringOption(options, "jql");
521
+ const maxResults = readNumberOption(options, "max-results") ?? 500;
522
+ const statusMap = parseStatusMap(readStringOption(options, "status-map"));
321
523
  if (!project && !customJql) {
322
- throw new Error("jira-sync importer requires either options.project or options.jql");
524
+ throw new CommandError("jira-sync importer requires either options.project or options.jql", EXIT_CODE.USAGE);
323
525
  }
324
526
  const jql = customJql ??
325
527
  `project = ${project} AND statusCategory != Done ORDER BY priority ASC`;
326
- const authHeader = `Basic ${Buffer.from(`${email}:${token}`).toString("base64")}`;
327
528
  console.error(`[jira-sync] Fetching issues with JQL: ${jql}`);
328
- const issues = await fetchAllJiraIssues(baseUrl.replace(/\/$/, ""), authHeader, jql, maxResults);
529
+ const issues = await fetchAllJiraIssues(creds.baseUrl, creds.authHeader, jql, maxResults);
329
530
  console.error(`[jira-sync] Importing ${issues.length} issues`);
531
+ let created = 0;
330
532
  for (const issue of issues) {
331
- const tags = [
332
- ...(issue.fields.labels ?? []),
333
- ...(issue.fields.fixVersions?.map((v) => v.name) ?? []),
334
- ];
335
- const body = adfToPlainText(issue.fields.description);
336
- const priority = mapJiraPriority(issue.fields.priority?.name);
337
- spawnSync("pm", [
338
- "--path", ctx.pm_root,
339
- "create",
340
- "--title", `[${issue.key}] ${issue.fields.summary}`,
341
- "--status", mapJiraStatus(issue.fields.status.name),
342
- "--type", "Issue",
343
- "--priority", String(priority),
344
- ...(body ? ["--body", body] : []),
345
- ...(issue.fields.duedate ? ["--deadline", issue.fields.duedate] : []),
346
- ...(tags.length > 0 ? ["--tags", tags.join(",")] : []),
347
- ], { encoding: "utf-8" });
533
+ if (createPmItem(ctx.pm_root, issueToItem(issue, creds.baseUrl, statusMap)))
534
+ created++;
535
+ }
536
+ console.error(`[jira-sync] Done. Imported ${created} issues.`);
537
+ return { imported: created, total: issues.length };
538
+ });
539
+ // -----------------------------------------------------------------------
540
+ // exporter — `pm jira export` (render pm items as Jira-create payloads)
541
+ // Default: print the JSON payloads. With --push AND creds AND --project,
542
+ // POST each payload to Jira's create-issue API.
543
+ // -----------------------------------------------------------------------
544
+ api.registerExporter("jira", async (ctx) => {
545
+ const options = ctx.options || {};
546
+ const push = readBooleanOption(options, "push");
547
+ const project = readStringOption(options, "project");
548
+ const items = readPmItems(ctx.pm_root);
549
+ if (push) {
550
+ // Resolve creds first so the missing-creds path returns a structured
551
+ // CommandError before we ever build payloads or hit the network.
552
+ const creds = resolveCreds(options);
553
+ if (!project) {
554
+ throw new CommandError("--push requires --project <KEY> (the target Jira project for new issues).", EXIT_CODE.USAGE);
555
+ }
556
+ const payloads = items.map((item) => itemToJiraPayload(item, project));
557
+ let created = 0;
558
+ for (const payload of payloads) {
559
+ try {
560
+ await httpsPost(`${creds.baseUrl}/rest/api/3/issue`, creds.authHeader, JSON.stringify(payload));
561
+ created++;
562
+ }
563
+ catch (err) {
564
+ const msg = err instanceof Error ? err.message : String(err);
565
+ throw new CommandError(`Failed to create Jira issue: ${msg}`);
566
+ }
567
+ }
568
+ console.error(`Created ${created} issue(s) in Jira project ${project}.`);
569
+ return { pushed: true, created, project };
348
570
  }
349
- console.error(`[jira-sync] Done. Imported ${issues.length} issues.`);
571
+ const payloads = items.map((item) => itemToJiraPayload(item, project));
572
+ console.log(JSON.stringify(payloads, null, 2));
573
+ return { exported: payloads.length, pushed: false };
350
574
  });
351
575
  },
352
576
  });
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-jira",
3
- "version": "2026.5.31",
3
+ "version": "2026.6.2",
4
4
  "description": "Jira issue sync for pm-cli",
5
5
  "author": "@unbraind",
6
6
  "entry": "./dist/index.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-jira",
3
- "version": "2026.5.31",
3
+ "version": "2026.6.2",
4
4
  "description": "Jira issue sync for pm-cli",
5
5
  "repository": {
6
6
  "type": "git",
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/node": "^25.9.1",
42
- "@unbrained/pm-cli": "^2026.5.29",
42
+ "@unbrained/pm-cli": "^2026.5.31",
43
43
  "pm-changelog": "^2026.5.29-2",
44
44
  "typescript": "^6.0.3"
45
45
  },