pm-jira 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 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
4
10
 
5
11
  ### Fixed
6
12
 
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":"AA6IA,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,wBA6PG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,3 +1,13 @@
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";
@@ -6,15 +16,16 @@ const defineExtension = ((extension) => extension);
6
16
  // handled non-zero exit when the error carries a numeric `exitCode` property
7
17
  // (see @unbrained/pm-cli runCommandHandler). A plain `Error` makes the runtime
8
18
  // fall through to its "unhandled" path, which RE-INVOKES the command handler a
9
- // second time and exits with a generic code. We mirror the SDK's EXIT_CODE
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
10
21
  // contract here rather than importing it: standalone-installed extensions load
11
22
  // only their own `dist/`, so `@unbrained/pm-cli` is not resolvable at runtime.
12
- const EXIT_CODE = {
23
+ export const EXIT_CODE = {
13
24
  GENERIC_FAILURE: 1,
14
25
  USAGE: 2,
15
26
  NOT_FOUND: 3,
16
27
  };
17
- class CommandError extends Error {
28
+ export class CommandError extends Error {
18
29
  exitCode;
19
30
  constructor(message, exitCode = EXIT_CODE.GENERIC_FAILURE) {
20
31
  super(message);
@@ -22,7 +33,7 @@ class CommandError extends Error {
22
33
  this.exitCode = exitCode;
23
34
  }
24
35
  }
25
- function mapJiraPriority(jiraPriority) {
36
+ export function mapJiraPriority(jiraPriority) {
26
37
  if (!jiraPriority)
27
38
  return 3;
28
39
  const name = jiraPriority.toLowerCase();
@@ -36,8 +47,11 @@ function mapJiraPriority(jiraPriority) {
36
47
  return 4;
37
48
  return 3;
38
49
  }
39
- function mapJiraStatus(jiraStatus) {
50
+ export function mapJiraStatus(jiraStatus, statusMap) {
40
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];
41
55
  if (name === "blocked")
42
56
  return "blocked";
43
57
  if (name === "in progress" ||
@@ -54,10 +68,39 @@ function mapJiraStatus(jiraStatus) {
54
68
  // Default: to do / open / backlog / any other
55
69
  return "open";
56
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
+ }
57
100
  // ---------------------------------------------------------------------------
58
101
  // Jira description (Atlassian Document Format) → plain text
59
102
  // ---------------------------------------------------------------------------
60
- function adfToPlainText(node) {
103
+ export function adfToPlainText(node) {
61
104
  if (!node)
62
105
  return "";
63
106
  if ("text" in node && typeof node.text === "string") {
@@ -71,6 +114,34 @@ function adfToPlainText(node) {
71
114
  }
72
115
  return "";
73
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
+ }
74
145
  // ---------------------------------------------------------------------------
75
146
  // Option readers — tolerate both kebab-case and camelCase keys.
76
147
  // The pm CLI normalizes loose extension flags to camelCase (e.g. --dry-run
@@ -126,8 +197,31 @@ export function optionInt(options, defaultValue, ...keys) {
126
197
  export function optionEnabled(options, ...keys) {
127
198
  return keys.some((key) => readBooleanOption(options, key));
128
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
+ }
129
223
  // ---------------------------------------------------------------------------
130
- // HTTP helper using Node.js native https module
224
+ // HTTP helpers using Node.js native https module
131
225
  // ---------------------------------------------------------------------------
132
226
  function httpsGet(url, authHeader) {
133
227
  return new Promise((resolve, reject) => {
@@ -157,6 +251,47 @@ function httpsGet(url, authHeader) {
157
251
  });
158
252
  });
159
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);
160
295
  req.end();
161
296
  });
162
297
  }
@@ -187,15 +322,162 @@ async function fetchAllJiraIssues(baseUrl, authHeader, jql, maxResults) {
187
322
  }
188
323
  return allIssues;
189
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
+ }
190
451
  // ---------------------------------------------------------------------------
191
- // Extension definition
452
+ // Extension
192
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
+ ];
193
468
  export default defineExtension({
194
469
  name: "pm-jira",
195
- version: "2026.6.1",
470
+ version: "2026.6.2",
196
471
  activate(api) {
197
472
  // -----------------------------------------------------------------------
198
- // 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)
199
481
  // -----------------------------------------------------------------------
200
482
  api.registerCommand({
201
483
  name: "jira sync",
@@ -206,167 +488,89 @@ export default defineExtension({
206
488
  "pm jira sync --project PROJ --max-results 200",
207
489
  "pm jira sync --jql 'project = PROJ AND assignee = currentUser()'",
208
490
  "pm jira sync --project PROJ --status open --dry-run",
491
+ "pm jira sync --project PROJ --status-map 'QA=blocked,Done=closed'",
209
492
  ],
210
- flags: [
211
- {
212
- long: "--project",
213
- value_name: "KEY",
214
- description: "Jira project key (e.g. PROJ)",
215
- },
216
- {
217
- long: "--jql",
218
- value_name: "query",
219
- description: "Custom JQL query",
220
- },
221
- {
222
- long: "--max-results",
223
- value_name: "n",
224
- description: "Max issues to sync (default: 500)",
225
- },
226
- {
227
- long: "--dry-run",
228
- description: "Preview without writing",
229
- },
230
- {
231
- long: "--status",
232
- value_name: "filter",
233
- description: "Filter by pm status (open|in_progress|closed|blocked)",
234
- },
235
- ],
493
+ flags: PULL_FLAGS,
236
494
  async run(ctx) {
237
- const project = readStringOption(ctx.options, "project");
238
- const customJql = readStringOption(ctx.options, "jql");
239
- const maxResults = readNumberOption(ctx.options, "max-results") ?? 500;
240
- const dryRun = readBooleanOption(ctx.options, "dry-run");
241
- const statusFilter = readStringOption(ctx.options, "status");
242
- // Validate env vars
243
- const baseUrl = process.env["JIRA_BASE_URL"];
244
- const token = process.env["JIRA_API_TOKEN"];
245
- const email = process.env["JIRA_EMAIL"];
246
- if (!baseUrl || !token || !email) {
247
- throw new CommandError("Missing required environment variables. Please set JIRA_BASE_URL, JIRA_API_TOKEN, and JIRA_EMAIL.", EXIT_CODE.USAGE);
248
- }
249
- if (!project && !customJql) {
250
- throw new CommandError("Provide either --project <KEY> or --jql <query> to specify which issues to sync.", EXIT_CODE.USAGE);
251
- }
252
- const jql = customJql ??
253
- `project = ${project} AND statusCategory != Done ORDER BY priority ASC`;
254
- const authHeader = `Basic ${Buffer.from(`${email}:${token}`).toString("base64")}`;
255
- console.error(`Fetching issues from Jira... (JQL: ${jql})`);
256
- let issues;
257
- try {
258
- issues = await fetchAllJiraIssues(baseUrl.replace(/\/$/, ""), authHeader, jql, maxResults);
259
- }
260
- catch (err) {
261
- const msg = err instanceof Error ? err.message : String(err);
262
- throw new CommandError(`Failed to fetch issues from Jira: ${msg}`);
263
- }
264
- console.error(`Fetched ${issues.length} issues from Jira`);
265
- // Apply status filter before upsert
266
- const filtered = statusFilter
267
- ? issues.filter((issue) => mapJiraStatus(issue.fields.status.name) === statusFilter)
268
- : issues;
269
- if (statusFilter && filtered.length !== issues.length) {
270
- console.error(`Filtered to ${filtered.length} issues with pm status "${statusFilter}"`);
271
- }
272
- if (dryRun) {
273
- console.error(`[dry-run] Would upsert ${filtered.length} items:`);
274
- for (const issue of filtered.slice(0, 20)) {
275
- console.error(` ${issue.key}: ${issue.fields.summary} [${mapJiraStatus(issue.fields.status.name)}]`);
276
- }
277
- if (filtered.length > 20) {
278
- console.error(` ... and ${filtered.length - 20} more`);
279
- }
280
- return {
281
- success: true,
282
- dryRun: true,
283
- total: filtered.length,
284
- project: project ?? "custom-jql",
285
- };
286
- }
287
- // Create items via pm CLI
288
- let upserted = 0;
289
- for (const issue of filtered) {
290
- const tags = [
291
- ...(issue.fields.labels ?? []),
292
- ...(issue.fields.fixVersions?.map((v) => v.name) ?? []),
293
- ];
294
- const body = adfToPlainText(issue.fields.description);
295
- const priority = mapJiraPriority(issue.fields.priority?.name);
296
- const result = spawnSync("pm", [
297
- "--path", ctx.pm_root,
298
- "create",
299
- "--title", `[${issue.key}] ${issue.fields.summary}`,
300
- "--status", mapJiraStatus(issue.fields.status.name),
301
- "--type", "Issue",
302
- "--priority", String(priority),
303
- ...(body ? ["--body", body] : []),
304
- ...(issue.fields.duedate ? ["--deadline", issue.fields.duedate] : []),
305
- ...(tags.length > 0 ? ["--tags", tags.join(",")] : []),
306
- ], { encoding: "utf-8" });
307
- if (result.status === 0) {
308
- upserted++;
309
- }
310
- else {
311
- console.error(`Failed to create item for ${issue.key}: ${result.stderr ?? ""}`);
312
- }
313
- }
314
- const projectLabel = project ?? "custom-jql";
315
- console.error(`Synced ${upserted} issues from Jira project ${projectLabel}`);
316
- return {
317
- success: true,
318
- synced: upserted,
319
- total: filtered.length,
320
- project: projectLabel,
321
- summary: `Synced ${upserted} issues from Jira project ${projectLabel}`,
322
- };
495
+ return runImport(ctx.options, ctx.pm_root);
323
496
  },
324
497
  });
325
498
  // -----------------------------------------------------------------------
326
- // 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.
327
507
  // -----------------------------------------------------------------------
328
508
  api.registerImporter("jira-sync", async (ctx) => {
329
- const baseUrl = ctx.options["JIRA_BASE_URL"] ??
330
- process.env["JIRA_BASE_URL"];
331
- const token = ctx.options["JIRA_API_TOKEN"] ??
332
- process.env["JIRA_API_TOKEN"];
333
- const email = ctx.options["JIRA_EMAIL"] ??
334
- process.env["JIRA_EMAIL"];
335
- const project = readStringOption(ctx.options, "project");
336
- const customJql = readStringOption(ctx.options, "jql");
337
- const maxResults = readNumberOption(ctx.options, "max-results") ?? 500;
338
- if (!baseUrl || !token || !email) {
339
- throw new CommandError("jira-sync importer requires JIRA_BASE_URL, JIRA_API_TOKEN, and JIRA_EMAIL (via options or env)", EXIT_CODE.USAGE);
340
- }
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"));
341
523
  if (!project && !customJql) {
342
524
  throw new CommandError("jira-sync importer requires either options.project or options.jql", EXIT_CODE.USAGE);
343
525
  }
344
526
  const jql = customJql ??
345
527
  `project = ${project} AND statusCategory != Done ORDER BY priority ASC`;
346
- const authHeader = `Basic ${Buffer.from(`${email}:${token}`).toString("base64")}`;
347
528
  console.error(`[jira-sync] Fetching issues with JQL: ${jql}`);
348
- const issues = await fetchAllJiraIssues(baseUrl.replace(/\/$/, ""), authHeader, jql, maxResults);
529
+ const issues = await fetchAllJiraIssues(creds.baseUrl, creds.authHeader, jql, maxResults);
349
530
  console.error(`[jira-sync] Importing ${issues.length} issues`);
531
+ let created = 0;
350
532
  for (const issue of issues) {
351
- const tags = [
352
- ...(issue.fields.labels ?? []),
353
- ...(issue.fields.fixVersions?.map((v) => v.name) ?? []),
354
- ];
355
- const body = adfToPlainText(issue.fields.description);
356
- const priority = mapJiraPriority(issue.fields.priority?.name);
357
- spawnSync("pm", [
358
- "--path", ctx.pm_root,
359
- "create",
360
- "--title", `[${issue.key}] ${issue.fields.summary}`,
361
- "--status", mapJiraStatus(issue.fields.status.name),
362
- "--type", "Issue",
363
- "--priority", String(priority),
364
- ...(body ? ["--body", body] : []),
365
- ...(issue.fields.duedate ? ["--deadline", issue.fields.duedate] : []),
366
- ...(tags.length > 0 ? ["--tags", tags.join(",")] : []),
367
- ], { 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 };
368
570
  }
369
- 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 };
370
574
  });
371
575
  },
372
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.6.1",
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.6.1",
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
  },