pm-context 2026.6.7-1

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 ADDED
@@ -0,0 +1,12 @@
1
+ # Changelog
2
+
3
+ ## 2026.6.7 - 2026-06-06
4
+
5
+ ### Added
6
+
7
+ - Build initial context pack command ([pm-context-0gyf](https://github.com/unbraind/pm-context/blob/main/.agents/pm/features/pm-context-0gyf.toon))
8
+ - Add agent handoff digest mode to context packs ([pm-context-opzn](https://github.com/unbraind/pm-context/blob/main/.agents/pm/features/pm-context-opzn.toon))
9
+
10
+ ### Other
11
+
12
+ - Run tests during release readiness ([pm-context-cqmc](https://github.com/unbraind/pm-context/blob/main/.agents/pm/chores/pm-context-cqmc.toon))
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 unbraind
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
package/README.md ADDED
@@ -0,0 +1,65 @@
1
+ # pm-context
2
+
3
+ `pm-context` generates deterministic context packs from a pm workspace so
4
+ handoffs, reviews, and agent sessions start from the same project state.
5
+
6
+ It complements the core `pm context` command by writing durable markdown or JSON
7
+ packs for selected items and their dependency neighborhood.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ pm install github.com/unbraind/pm-context --project
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ```bash
18
+ pm context-pack --id pm-1234 --include-body --output context.md
19
+ pm context-pack --id pm-1234 --format agent
20
+ pm context-pack --status in_progress --tag release --format json
21
+ pm context-pack --type Feature --include-closed --limit 20
22
+ ```
23
+
24
+ The command is read-only. It shells out to the active `pm` binary for
25
+ workspace data, so generated packs reflect the installed CLI and package
26
+ runtime rather than a stale parser.
27
+
28
+ ## Output
29
+
30
+ Markdown packs include:
31
+
32
+ - a summary with selected item counts by status and type
33
+ - focus items sorted by priority and update time
34
+ - dependency and dependent context for selected items
35
+ - linked docs and files when item metadata exposes them
36
+ - optional item bodies
37
+
38
+ JSON packs expose the same data in a stable shape for automation.
39
+
40
+ Agent handoff packs (`--format agent`) are intentionally compact. They focus on
41
+ the current work, visible blockers, next actions, linked files/docs, and the
42
+ exact refresh command another agent should run before continuing.
43
+
44
+ ## Command
45
+
46
+ `pm context-pack`
47
+
48
+ Options:
49
+
50
+ - `--id <id>` repeatable item ids to focus
51
+ - `--status <status>` filter by status
52
+ - `--type <type>` filter by type
53
+ - `--tag <tag>` filter by tag
54
+ - `--limit <n>` maximum focus item count
55
+ - `--format <markdown|json|agent>` output format
56
+ - `--output <file>` write the pack to a file
57
+ - `--include-body` include item bodies
58
+ - `--include-closed` include closed/canceled items in filtered packs
59
+ - `--without-neighborhood` omit dependency/dependent neighbors
60
+
61
+ ## Philosophy
62
+
63
+ Project management is context management. `pm-context` makes that concrete by
64
+ turning pm's source-of-truth items into portable context that can be reviewed,
65
+ sent to another agent, or attached to a pull request.
@@ -0,0 +1,127 @@
1
+ export declare const EXIT_CODE: {
2
+ readonly GENERIC_FAILURE: 1;
3
+ readonly USAGE: 2;
4
+ };
5
+ export declare class CommandError extends Error {
6
+ exitCode: number;
7
+ constructor(message: string, exitCode?: number);
8
+ }
9
+ export interface PmItem {
10
+ id: string;
11
+ title?: string;
12
+ type?: string;
13
+ status?: string;
14
+ priority?: number;
15
+ tags?: string[];
16
+ body?: string;
17
+ description?: string;
18
+ parent?: string;
19
+ assignee?: string;
20
+ sprint?: string;
21
+ release?: string;
22
+ deadline?: string;
23
+ created_at?: string;
24
+ updated_at?: string;
25
+ docs?: unknown;
26
+ files?: unknown;
27
+ deps?: unknown;
28
+ dependencies?: unknown;
29
+ blocked_by?: unknown;
30
+ blockedBy?: unknown;
31
+ [key: string]: unknown;
32
+ }
33
+ export interface ContextPackOptions {
34
+ ids?: string[];
35
+ status?: string;
36
+ type?: string;
37
+ tag?: string;
38
+ limit?: number;
39
+ includeBody?: boolean;
40
+ includeClosed?: boolean;
41
+ neighborhood?: boolean;
42
+ generatedAt?: string;
43
+ }
44
+ export interface ContextPack {
45
+ generatedAt: string;
46
+ filters: {
47
+ ids: string[];
48
+ status?: string;
49
+ type?: string;
50
+ tag?: string;
51
+ includeClosed: boolean;
52
+ neighborhood: boolean;
53
+ };
54
+ summary: {
55
+ totalItems: number;
56
+ selectedItems: number;
57
+ neighborItems: number;
58
+ byStatus: Record<string, number>;
59
+ byType: Record<string, number>;
60
+ };
61
+ items: PmItem[];
62
+ neighbors: PmItem[];
63
+ links: Array<{
64
+ itemId: string;
65
+ kind: "doc" | "file";
66
+ value: string;
67
+ }>;
68
+ relationships: Array<{
69
+ from: string;
70
+ to: string;
71
+ kind: string;
72
+ }>;
73
+ }
74
+ export interface AgentHandoff {
75
+ generatedAt: string;
76
+ counts: {
77
+ focus: number;
78
+ neighbors: number;
79
+ blockers: number;
80
+ links: number;
81
+ };
82
+ focus: Array<{
83
+ id: string;
84
+ title: string;
85
+ status: string;
86
+ type: string;
87
+ priority?: number;
88
+ deadline?: string;
89
+ }>;
90
+ blockers: Array<{
91
+ itemId: string;
92
+ blockedBy: string;
93
+ kind: string;
94
+ title?: string;
95
+ status?: string;
96
+ }>;
97
+ nextActions: Array<{
98
+ id: string;
99
+ title: string;
100
+ reason: string;
101
+ }>;
102
+ links: Array<{
103
+ itemId: string;
104
+ kind: "doc" | "file";
105
+ value: string;
106
+ }>;
107
+ suggestedCommand: string;
108
+ }
109
+ export declare function sortContextItems(items: PmItem[]): PmItem[];
110
+ export declare function extractRelationships(item: PmItem): Array<{
111
+ from: string;
112
+ to: string;
113
+ kind: string;
114
+ }>;
115
+ export declare function buildContextPack(allItems: PmItem[], options?: ContextPackOptions): ContextPack;
116
+ export declare function renderMarkdown(pack: ContextPack): string;
117
+ export declare function buildAgentHandoff(pack: ContextPack): AgentHandoff;
118
+ export declare function renderAgentHandoff(pack: ContextPack): string;
119
+ export declare function readPmItems(pmRoot: string): PmItem[];
120
+ declare const _default: {
121
+ name: string;
122
+ version: string;
123
+ description: string;
124
+ activate(api: any): void;
125
+ };
126
+ export default _default;
127
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,471 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { writeFileSync } from "node:fs";
3
+ const defineExtension = ((extension) => extension);
4
+ export const EXIT_CODE = {
5
+ GENERIC_FAILURE: 1,
6
+ USAGE: 2,
7
+ };
8
+ export class CommandError extends Error {
9
+ exitCode;
10
+ constructor(message, exitCode = EXIT_CODE.GENERIC_FAILURE) {
11
+ super(message);
12
+ this.name = "CommandError";
13
+ this.exitCode = exitCode;
14
+ }
15
+ }
16
+ function asArray(value) {
17
+ if (Array.isArray(value))
18
+ return value.flatMap(asArray);
19
+ if (typeof value !== "string")
20
+ return [];
21
+ return value
22
+ .split(",")
23
+ .map((entry) => entry.trim())
24
+ .filter(Boolean);
25
+ }
26
+ function boolOption(options, ...keys) {
27
+ return keys.some((key) => {
28
+ const value = options[key];
29
+ return value === true || value === "true" || value === "1";
30
+ });
31
+ }
32
+ function stringOption(options, ...keys) {
33
+ for (const key of keys) {
34
+ const value = options[key];
35
+ if (typeof value === "string" && value.trim())
36
+ return value.trim();
37
+ }
38
+ return undefined;
39
+ }
40
+ function intOption(options, key, fallback) {
41
+ const raw = options[key];
42
+ if (raw === undefined || raw === null || raw === "")
43
+ return fallback;
44
+ const parsed = Number.parseInt(String(raw), 10);
45
+ if (!Number.isFinite(parsed) || parsed < 1) {
46
+ throw new CommandError(`--${key} must be a positive integer`, EXIT_CODE.USAGE);
47
+ }
48
+ return parsed;
49
+ }
50
+ function normalizeText(value) {
51
+ return typeof value === "string" ? value.trim() : "";
52
+ }
53
+ function normalizeTags(value) {
54
+ return asArray(value).map((tag) => tag.toLowerCase());
55
+ }
56
+ function itemStatus(item) {
57
+ return normalizeText(item.status) || "unknown";
58
+ }
59
+ function itemType(item) {
60
+ return normalizeText(item.type) || "Item";
61
+ }
62
+ function isClosedStatus(status) {
63
+ const normalized = status.toLowerCase();
64
+ return normalized === "closed" || normalized === "done" || normalized === "canceled" || normalized === "cancelled";
65
+ }
66
+ function itemUpdatedAt(item) {
67
+ return normalizeText(item.updated_at) || normalizeText(item.created_at);
68
+ }
69
+ export function sortContextItems(items) {
70
+ return [...items].sort((a, b) => {
71
+ const priorityA = typeof a.priority === "number" ? a.priority : Number.MAX_SAFE_INTEGER;
72
+ const priorityB = typeof b.priority === "number" ? b.priority : Number.MAX_SAFE_INTEGER;
73
+ if (priorityA !== priorityB)
74
+ return priorityA - priorityB;
75
+ return itemUpdatedAt(b).localeCompare(itemUpdatedAt(a)) || a.id.localeCompare(b.id);
76
+ });
77
+ }
78
+ function parseRelationshipValue(value, fallbackKind) {
79
+ if (!value)
80
+ return [];
81
+ if (typeof value === "string") {
82
+ return asArray(value).map((to) => ({ to, kind: fallbackKind }));
83
+ }
84
+ if (Array.isArray(value)) {
85
+ return value.flatMap((entry) => parseRelationshipValue(entry, fallbackKind));
86
+ }
87
+ if (typeof value === "object") {
88
+ const record = value;
89
+ const to = normalizeText(record.id) || normalizeText(record.to) || normalizeText(record.target) ||
90
+ normalizeText(record.target_id) || normalizeText(record.item) || normalizeText(record.item_id);
91
+ if (!to)
92
+ return [];
93
+ const kind = normalizeText(record.kind) || normalizeText(record.type) || fallbackKind;
94
+ return [{ to, kind }];
95
+ }
96
+ return [];
97
+ }
98
+ export function extractRelationships(item) {
99
+ const rels = [
100
+ ...parseRelationshipValue(item.deps, "depends_on"),
101
+ ...parseRelationshipValue(item.dependencies, "depends_on"),
102
+ ...parseRelationshipValue(item.blocked_by, "blocked_by"),
103
+ ...parseRelationshipValue(item.blockedBy, "blocked_by"),
104
+ ];
105
+ const seen = new Set();
106
+ return rels
107
+ .filter((rel) => rel.to && rel.to !== item.id)
108
+ .map((rel) => ({ from: item.id, to: rel.to, kind: rel.kind }))
109
+ .filter((rel) => {
110
+ const key = `${rel.from}\0${rel.kind}\0${rel.to}`;
111
+ if (seen.has(key))
112
+ return false;
113
+ seen.add(key);
114
+ return true;
115
+ });
116
+ }
117
+ function extractLinkValues(value) {
118
+ if (!value)
119
+ return [];
120
+ if (typeof value === "string")
121
+ return asArray(value);
122
+ if (Array.isArray(value))
123
+ return value.flatMap(extractLinkValues);
124
+ if (typeof value === "object") {
125
+ const record = value;
126
+ return [
127
+ normalizeText(record.path),
128
+ normalizeText(record.url),
129
+ normalizeText(record.href),
130
+ normalizeText(record.file),
131
+ normalizeText(record.doc),
132
+ normalizeText(record.value),
133
+ ].filter(Boolean);
134
+ }
135
+ return [];
136
+ }
137
+ function buildLinks(items) {
138
+ const links = [];
139
+ for (const item of items) {
140
+ for (const value of extractLinkValues(item.docs))
141
+ links.push({ itemId: item.id, kind: "doc", value });
142
+ for (const value of extractLinkValues(item.files))
143
+ links.push({ itemId: item.id, kind: "file", value });
144
+ }
145
+ return links;
146
+ }
147
+ function matchesFilters(item, options) {
148
+ if (!options.includeClosed && isClosedStatus(itemStatus(item)))
149
+ return false;
150
+ if (options.status && itemStatus(item).toLowerCase() !== options.status.toLowerCase())
151
+ return false;
152
+ if (options.type && itemType(item).toLowerCase() !== options.type.toLowerCase())
153
+ return false;
154
+ if (options.tag && !normalizeTags(item.tags).includes(options.tag.toLowerCase()))
155
+ return false;
156
+ return true;
157
+ }
158
+ export function buildContextPack(allItems, options = {}) {
159
+ const ids = Array.from(new Set((options.ids ?? []).map((id) => id.trim()).filter(Boolean)));
160
+ const byId = new Map(allItems.map((item) => [item.id, item]));
161
+ const allRelationships = allItems.flatMap(extractRelationships);
162
+ const selected = ids.length > 0
163
+ ? ids.map((id) => byId.get(id)).filter((item) => Boolean(item))
164
+ : allItems.filter((item) => matchesFilters(item, options));
165
+ const limited = sortContextItems(selected).slice(0, options.limit ?? 25);
166
+ const selectedIds = new Set(limited.map((item) => item.id));
167
+ const neighborIds = new Set();
168
+ if (options.neighborhood !== false) {
169
+ for (const rel of allRelationships) {
170
+ if (selectedIds.has(rel.from))
171
+ neighborIds.add(rel.to);
172
+ if (selectedIds.has(rel.to))
173
+ neighborIds.add(rel.from);
174
+ }
175
+ }
176
+ for (const id of selectedIds)
177
+ neighborIds.delete(id);
178
+ const neighbors = sortContextItems([...neighborIds].map((id) => byId.get(id)).filter((item) => Boolean(item)));
179
+ const packItems = limited.map((item) => options.includeBody ? item : { ...item, body: undefined, description: undefined });
180
+ const packNeighbors = neighbors.map((item) => options.includeBody ? item : { ...item, body: undefined, description: undefined });
181
+ const selectedAndNeighbors = [...packItems, ...packNeighbors];
182
+ const byStatus = {};
183
+ const byType = {};
184
+ for (const item of packItems) {
185
+ byStatus[itemStatus(item)] = (byStatus[itemStatus(item)] ?? 0) + 1;
186
+ byType[itemType(item)] = (byType[itemType(item)] ?? 0) + 1;
187
+ }
188
+ return {
189
+ generatedAt: options.generatedAt ?? new Date().toISOString(),
190
+ filters: {
191
+ ids,
192
+ status: options.status,
193
+ type: options.type,
194
+ tag: options.tag,
195
+ includeClosed: options.includeClosed === true,
196
+ neighborhood: options.neighborhood !== false,
197
+ },
198
+ summary: {
199
+ totalItems: allItems.length,
200
+ selectedItems: packItems.length,
201
+ neighborItems: packNeighbors.length,
202
+ byStatus,
203
+ byType,
204
+ },
205
+ items: packItems,
206
+ neighbors: packNeighbors,
207
+ links: buildLinks(selectedAndNeighbors),
208
+ relationships: allRelationships.filter((rel) => selectedIds.has(rel.from) || selectedIds.has(rel.to)),
209
+ };
210
+ }
211
+ function markdownEscape(value) {
212
+ return String(value ?? "").replace(/\r?\n/g, " ").trim();
213
+ }
214
+ function renderItemList(items, includeBody) {
215
+ if (items.length === 0)
216
+ return ["_None._"];
217
+ const lines = [];
218
+ for (const item of items) {
219
+ const meta = [
220
+ itemType(item),
221
+ itemStatus(item),
222
+ typeof item.priority === "number" ? `p${item.priority}` : "",
223
+ item.assignee ? `@${item.assignee}` : "",
224
+ item.deadline ? `due ${item.deadline}` : "",
225
+ ].filter(Boolean).join(" | ");
226
+ lines.push(`- **${item.id}** ${markdownEscape(item.title || "(untitled)")} (${meta})`);
227
+ const tags = normalizeTags(item.tags);
228
+ if (tags.length > 0)
229
+ lines.push(` - tags: ${tags.join(", ")}`);
230
+ if (includeBody) {
231
+ const body = normalizeText(item.body) || normalizeText(item.description);
232
+ if (body)
233
+ lines.push(` - context: ${markdownEscape(body).slice(0, 700)}`);
234
+ }
235
+ }
236
+ return lines;
237
+ }
238
+ export function renderMarkdown(pack) {
239
+ const lines = [
240
+ "# pm context pack",
241
+ "",
242
+ `Generated: ${pack.generatedAt}`,
243
+ "",
244
+ "## Summary",
245
+ "",
246
+ `- Total workspace items: ${pack.summary.totalItems}`,
247
+ `- Focus items: ${pack.summary.selectedItems}`,
248
+ `- Neighbor items: ${pack.summary.neighborItems}`,
249
+ `- Statuses: ${Object.entries(pack.summary.byStatus).map(([k, v]) => `${k}=${v}`).join(", ") || "none"}`,
250
+ `- Types: ${Object.entries(pack.summary.byType).map(([k, v]) => `${k}=${v}`).join(", ") || "none"}`,
251
+ "",
252
+ "## Focus Items",
253
+ "",
254
+ ...renderItemList(pack.items, pack.items.some((item) => Boolean(item.body || item.description))),
255
+ "",
256
+ "## Dependency Neighborhood",
257
+ "",
258
+ ];
259
+ if (pack.relationships.length === 0) {
260
+ lines.push("_No dependency relationships in focus._");
261
+ }
262
+ else {
263
+ for (const rel of pack.relationships)
264
+ lines.push(`- ${rel.from} --${rel.kind}--> ${rel.to}`);
265
+ }
266
+ lines.push("", "## Neighbor Items", "", ...renderItemList(pack.neighbors, false), "", "## Linked Context", "");
267
+ if (pack.links.length === 0) {
268
+ lines.push("_No docs or files linked in selected context._");
269
+ }
270
+ else {
271
+ for (const link of pack.links)
272
+ lines.push(`- ${link.itemId} ${link.kind}: ${link.value}`);
273
+ }
274
+ lines.push("");
275
+ return `${lines.join("\n")}\n`;
276
+ }
277
+ function titleFor(items, id) {
278
+ return items.find((item) => item.id === id)?.title;
279
+ }
280
+ function statusFor(items, id) {
281
+ return items.find((item) => item.id === id)?.status;
282
+ }
283
+ export function buildAgentHandoff(pack) {
284
+ const allVisible = [...pack.items, ...pack.neighbors];
285
+ const focusIds = new Set(pack.items.map((item) => item.id));
286
+ const blockers = pack.relationships
287
+ .filter((rel) => focusIds.has(rel.from) && (rel.kind === "blocked_by" || rel.kind === "depends_on"))
288
+ .map((rel) => ({
289
+ itemId: rel.from,
290
+ blockedBy: rel.to,
291
+ kind: rel.kind,
292
+ title: titleFor(allVisible, rel.to),
293
+ status: statusFor(allVisible, rel.to),
294
+ }));
295
+ const blockedFocusIds = new Set(blockers.map((blocker) => blocker.itemId));
296
+ const nextActions = pack.items
297
+ .filter((item) => !isClosedStatus(itemStatus(item)))
298
+ .slice(0, 8)
299
+ .map((item) => ({
300
+ id: item.id,
301
+ title: normalizeText(item.title) || "(untitled)",
302
+ reason: blockedFocusIds.has(item.id)
303
+ ? "resolve blocker first"
304
+ : typeof item.priority === "number"
305
+ ? `priority ${item.priority}`
306
+ : "selected focus item",
307
+ }));
308
+ const ids = pack.items.map((item) => item.id).join(",");
309
+ const suggestedCommand = ids
310
+ ? `pm context-pack --id ${ids} --format agent`
311
+ : "pm context-pack --status in_progress --format agent";
312
+ return {
313
+ generatedAt: pack.generatedAt,
314
+ counts: {
315
+ focus: pack.summary.selectedItems,
316
+ neighbors: pack.summary.neighborItems,
317
+ blockers: blockers.length,
318
+ links: pack.links.length,
319
+ },
320
+ focus: pack.items.map((item) => ({
321
+ id: item.id,
322
+ title: normalizeText(item.title) || "(untitled)",
323
+ status: itemStatus(item),
324
+ type: itemType(item),
325
+ priority: typeof item.priority === "number" ? item.priority : undefined,
326
+ deadline: normalizeText(item.deadline) || undefined,
327
+ })),
328
+ blockers,
329
+ nextActions,
330
+ links: pack.links.slice(0, 12),
331
+ suggestedCommand,
332
+ };
333
+ }
334
+ export function renderAgentHandoff(pack) {
335
+ const handoff = buildAgentHandoff(pack);
336
+ const lines = [
337
+ "# pm agent handoff",
338
+ "",
339
+ `Generated: ${handoff.generatedAt}`,
340
+ `Focus: ${handoff.counts.focus} | Neighbors: ${handoff.counts.neighbors} | Blockers: ${handoff.counts.blockers} | Links: ${handoff.counts.links}`,
341
+ "",
342
+ "## Focus",
343
+ "",
344
+ ];
345
+ if (handoff.focus.length === 0) {
346
+ lines.push("_No focus items._");
347
+ }
348
+ else {
349
+ for (const item of handoff.focus) {
350
+ const meta = [
351
+ item.type,
352
+ item.status,
353
+ item.priority === undefined ? "" : `p${item.priority}`,
354
+ item.deadline ? `due ${item.deadline}` : "",
355
+ ].filter(Boolean).join(" | ");
356
+ lines.push(`- ${item.id}: ${markdownEscape(item.title)} (${meta})`);
357
+ }
358
+ }
359
+ lines.push("", "## Blockers", "");
360
+ if (handoff.blockers.length === 0) {
361
+ lines.push("_No visible blockers._");
362
+ }
363
+ else {
364
+ for (const blocker of handoff.blockers) {
365
+ const label = blocker.title ? `${blocker.blockedBy} ${markdownEscape(blocker.title)}` : blocker.blockedBy;
366
+ const status = blocker.status ? ` (${blocker.status})` : "";
367
+ lines.push(`- ${blocker.itemId} ${blocker.kind} ${label}${status}`);
368
+ }
369
+ }
370
+ lines.push("", "## Next Actions", "");
371
+ if (handoff.nextActions.length === 0) {
372
+ lines.push("_No open focus items._");
373
+ }
374
+ else {
375
+ for (const action of handoff.nextActions) {
376
+ lines.push(`- ${action.id}: ${markdownEscape(action.title)} - ${action.reason}`);
377
+ }
378
+ }
379
+ lines.push("", "## Linked Context", "");
380
+ if (handoff.links.length === 0) {
381
+ lines.push("_No linked files or docs._");
382
+ }
383
+ else {
384
+ for (const link of handoff.links) {
385
+ lines.push(`- ${link.itemId} ${link.kind}: ${link.value}`);
386
+ }
387
+ }
388
+ lines.push("", "## Refresh", "", `\`${handoff.suggestedCommand}\``, "");
389
+ return `${lines.join("\n")}\n`;
390
+ }
391
+ export function readPmItems(pmRoot) {
392
+ const result = spawnSync("pm", ["--path", pmRoot, "list-all", "--json", "--include-body"], {
393
+ encoding: "utf-8",
394
+ maxBuffer: 64 * 1024 * 1024,
395
+ });
396
+ if (result.status !== 0) {
397
+ throw new CommandError(result.stderr.trim() || "`pm list-all --json --include-body` failed");
398
+ }
399
+ try {
400
+ const parsed = JSON.parse(result.stdout);
401
+ const items = Array.isArray(parsed) ? parsed : parsed.items ?? parsed.results ?? [];
402
+ return items.filter((item) => Boolean(item) && typeof item === "object" && typeof item.id === "string");
403
+ }
404
+ catch (err) {
405
+ throw new CommandError(`Could not parse pm item JSON: ${err instanceof Error ? err.message : String(err)}`);
406
+ }
407
+ }
408
+ function setupCommands(api) {
409
+ api.registerCommand({
410
+ name: "context-pack",
411
+ description: "Generate a durable pm context pack for handoffs and reviews.",
412
+ intent: "turn selected pm work into portable context",
413
+ examples: [
414
+ "pm context-pack --id pm-1234 --include-body --output context.md",
415
+ "pm context-pack --id pm-1234 --format agent",
416
+ "pm context-pack --status in_progress --tag release --format json",
417
+ ],
418
+ flags: [
419
+ { long: "--id", value_name: "id", description: "Focus item id (repeatable or comma-separated)", type: "string" },
420
+ { long: "--status", value_name: "status", description: "Filter focus items by status", type: "string" },
421
+ { long: "--type", value_name: "type", description: "Filter focus items by type", type: "string" },
422
+ { long: "--tag", value_name: "tag", description: "Filter focus items by tag", type: "string" },
423
+ { long: "--limit", value_name: "n", description: "Maximum focus item count (default: 25)", type: "string" },
424
+ { long: "--format", value_name: "format", description: "Output format: markdown, json, or agent", type: "string" },
425
+ { long: "--output", value_name: "file", description: "Write context pack to a file", type: "string" },
426
+ { long: "--include-body", description: "Include body/description text", type: "boolean" },
427
+ { long: "--include-closed", description: "Include closed/canceled items in filtered packs", type: "boolean" },
428
+ { long: "--without-neighborhood", description: "Omit dependency/dependent neighbors", type: "boolean" },
429
+ ],
430
+ async run(ctx) {
431
+ const options = ctx.options;
432
+ const format = (stringOption(options, "format") ?? "markdown").toLowerCase();
433
+ if (format !== "markdown" && format !== "json" && format !== "agent") {
434
+ throw new CommandError("--format must be markdown, json, or agent", EXIT_CODE.USAGE);
435
+ }
436
+ const pack = buildContextPack(readPmItems(ctx.pm_root), {
437
+ ids: asArray(options.id),
438
+ status: stringOption(options, "status"),
439
+ type: stringOption(options, "type"),
440
+ tag: stringOption(options, "tag"),
441
+ limit: intOption(options, "limit", 25),
442
+ includeBody: boolOption(options, "include-body", "includeBody"),
443
+ includeClosed: boolOption(options, "include-closed", "includeClosed"),
444
+ neighborhood: !boolOption(options, "without-neighborhood", "withoutNeighborhood"),
445
+ });
446
+ const output = format === "json"
447
+ ? `${JSON.stringify(pack, null, 2)}\n`
448
+ : format === "agent"
449
+ ? renderAgentHandoff(pack)
450
+ : renderMarkdown(pack);
451
+ const outputPath = stringOption(options, "output");
452
+ if (outputPath) {
453
+ writeFileSync(outputPath, output, "utf-8");
454
+ console.error(`context pack written to ${outputPath}`);
455
+ }
456
+ else {
457
+ console.error(output.trimEnd());
458
+ }
459
+ return format === "json" ? pack : { ok: true, format, selected: pack.summary.selectedItems, neighbors: pack.summary.neighborItems };
460
+ },
461
+ });
462
+ }
463
+ export default defineExtension({
464
+ name: "pm-context",
465
+ version: "2026.6.7-1",
466
+ description: "Generate deterministic pm context packs for agent handoffs, reviews, and status briefs",
467
+ activate(api) {
468
+ setupCommands(api);
469
+ },
470
+ });
471
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/manifest.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "pm-context",
3
+ "version": "2026.6.7-1",
4
+ "description": "Generate deterministic pm context packs for agent handoffs, reviews, and status briefs",
5
+ "author": "@unbraind",
6
+ "entry": "dist/index.js",
7
+ "capabilities": [
8
+ "commands",
9
+ "schema"
10
+ ],
11
+ "compatibility": {
12
+ "pm": ">=2026.6.6"
13
+ }
14
+ }
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "pm-context",
3
+ "version": "2026.6.7-1",
4
+ "description": "Generate deterministic pm context packs for agent handoffs, reviews, and status briefs",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "manifest.json",
11
+ "README.md",
12
+ "LICENSE",
13
+ "CHANGELOG.md"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "build:test": "tsc -p tsconfig.test.json",
18
+ "test": "npm run build && npm run build:test && node --test dist-test/*.js",
19
+ "prepack": "npm run build",
20
+ "typecheck": "tsc --noEmit",
21
+ "check": "npm run typecheck",
22
+ "audit:prod": "npm audit --omit=dev",
23
+ "pack:dry-run": "npm pack --dry-run",
24
+ "changelog": "pm-changelog --pm-root .agents/pm --mode prepend --output CHANGELOG.md --release-version-from-package --since-previous-tag --until-release-tag --item-url-base https://github.com/unbraind/pm-context/blob/main/.agents/pm",
25
+ "changelog:full": "pm-changelog --pm-root .agents/pm --mode replace --output CHANGELOG.md --all-release-tags --release-version-from-package --item-url-base https://github.com/unbraind/pm-context/blob/main/.agents/pm",
26
+ "changelog:check": "pm-changelog --pm-root .agents/pm --mode prepend --output CHANGELOG.md --since-previous-tag --until-release-tag --release-version-from-package --item-url-base https://github.com/unbraind/pm-context/blob/main/.agents/pm --check",
27
+ "release:notes": "pm-changelog --pm-root .agents/pm --stdout --since-previous-tag --until-release-tag --release-version-from-package --item-url-base https://github.com/unbraind/pm-context/blob/main/.agents/pm --pm-bin ./node_modules/.bin/pm --github-step-summary",
28
+ "release:check": "npm run typecheck && npm run build && npm test && npm run audit:prod && npm run pack:dry-run && npm run changelog:check"
29
+ },
30
+ "keywords": [
31
+ "pm-cli",
32
+ "pm-package",
33
+ "context",
34
+ "handoff",
35
+ "project-management"
36
+ ],
37
+ "author": "@unbraind",
38
+ "license": "MIT",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/unbraind/pm-context.git"
42
+ },
43
+ "homepage": "https://github.com/unbraind/pm-context#readme",
44
+ "bugs": {
45
+ "url": "https://github.com/unbraind/pm-context/issues"
46
+ },
47
+ "peerDependencies": {
48
+ "@unbrained/pm-cli": ">=2026.6.6"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^25.9.2",
52
+ "@unbrained/pm-cli": "^2026.6.6",
53
+ "pm-changelog": "^2026.6.6",
54
+ "typescript": "^6.0.3"
55
+ },
56
+ "pmPackage": {
57
+ "name": "pm-context",
58
+ "displayName": "pm-context",
59
+ "description": "Generate deterministic pm context packs for agent handoffs, reviews, and status briefs",
60
+ "repository": "github.com/unbraind/pm-context",
61
+ "install": "pm install github.com/unbraind/pm-context --project",
62
+ "capabilities": [
63
+ "commands",
64
+ "schema"
65
+ ]
66
+ }
67
+ }