@unbrained/pm-cli 2026.8.31 → 2026.9.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.
Files changed (103) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/AGENTS.md +15 -13
  3. package/CHANGELOG.md +23 -6
  4. package/README.md +3 -3
  5. package/dist/cli/commands/merge.d.ts +1 -1
  6. package/dist/cli/commands/merge.js +3 -3
  7. package/dist/cli/register-mutation.js +8 -5
  8. package/dist/cli-bundle/bundle-manifest.json +125 -125
  9. package/dist/cli-bundle/chunks/{chunk-SXMHPK4V.js → chunk-2MC2LCXZ.js} +4 -4
  10. package/dist/cli-bundle/chunks/{chunk-52JXYSDW.js → chunk-3WICXLVT.js} +2 -2
  11. package/dist/cli-bundle/chunks/{chunk-OUGDA7NR.js → chunk-6XIIGE7U.js} +2 -2
  12. package/dist/cli-bundle/chunks/chunk-ALKKAUFN.js +35 -0
  13. package/dist/cli-bundle/chunks/{chunk-JIFYOJF7.js → chunk-DTGWEL23.js} +2 -2
  14. package/dist/cli-bundle/chunks/chunk-GOACULJW.js +13 -0
  15. package/dist/cli-bundle/chunks/{chunk-NW6LV3TU.js → chunk-NOPL37X4.js} +64 -64
  16. package/dist/cli-bundle/chunks/{chunk-IEFJ3ZEB.js → chunk-TAG4VC22.js} +4 -4
  17. package/dist/cli-bundle/chunks/{chunk-MWIN6OH2.js → chunk-U45JXJCC.js} +2 -2
  18. package/dist/cli-bundle/chunks/{chunk-5DH5XCJL.js → chunk-X4RCGLTX.js} +2 -2
  19. package/dist/cli-bundle/chunks/{chunk-QZCIBZR3.js → chunk-Y7VOMSZT.js} +2 -2
  20. package/dist/cli-bundle/chunks/{register-list-query-7C7DKZ2U.js → register-list-query-XYNX4ASQ.js} +2 -2
  21. package/dist/cli-bundle/chunks/register-mutation-2MVLRS3J.js +20 -0
  22. package/dist/cli-bundle/chunks/{register-operations-IIMA5OKO.js → register-operations-WCIDXBU3.js} +2 -2
  23. package/dist/cli-bundle/chunks/{register-setup-52H36QCB.js → register-setup-KVNC5KPL.js} +2 -2
  24. package/dist/cli-bundle/focused-chunks/chunk-7VATS5QY.js +16 -0
  25. package/dist/cli-bundle/focused-chunks/{chunk-VJ7EFMFL.js → chunk-FWPLDEXF.js} +2 -2
  26. package/dist/cli-bundle/focused-chunks/{chunk-FOMZ6NG5.js → chunk-MKHG3T76.js} +2 -2
  27. package/dist/cli-bundle/focused-chunks/{chunk-UN34D63M.js → chunk-PF3E6Q36.js} +2 -2
  28. package/dist/cli-bundle/focused-chunks/{chunk-APN4QN6R.js → chunk-RMRCQPWU.js} +2 -2
  29. package/dist/cli-bundle/focused-chunks/{chunk-BPWJ4QM5.js → chunk-S4U5CN5Q.js} +2 -2
  30. package/dist/cli-bundle/focused-chunks/chunk-T2LXXSOD.js +158 -0
  31. package/dist/cli-bundle/focused-chunks/{chunk-JCOOAUHK.js → chunk-Y6JJIX6I.js} +30 -30
  32. package/dist/cli-bundle/main.js +2 -2
  33. package/dist/cli-bundle/sdk-contracts.js +1 -1
  34. package/dist/cli-bundle/sdk-core.js +25 -25
  35. package/dist/cli-bundle/sdk-governance.js +1 -1
  36. package/dist/cli-bundle/sdk-graph.js +1 -1
  37. package/dist/cli-bundle/sdk-merge.js +31 -31
  38. package/dist/cli-bundle/sdk-query.js +1 -1
  39. package/dist/cli-bundle/sdk-runtime.js +1 -1
  40. package/dist/cli-bundle/sdk-testing.js +1 -1
  41. package/dist/cli-bundle/sdk.js +10 -10
  42. package/dist/core/history/drift-scan.js +6 -6
  43. package/dist/core/history/history.d.ts +6 -0
  44. package/dist/core/history/history.js +47 -5
  45. package/dist/core/history/replay.d.ts +12 -1
  46. package/dist/core/history/replay.js +60 -39
  47. package/dist/mcp/server.d.ts +2 -2
  48. package/dist/mcp/server.js +78 -15
  49. package/dist/mcp/tool-definitions.js +56 -2
  50. package/dist/sdk/agent-capability-contracts.js +4 -2
  51. package/dist/sdk/history-read.js +14 -6
  52. package/dist/sdk/history-repair.js +17 -10
  53. package/dist/sdk/index.d.ts +1 -0
  54. package/dist/sdk/index.js +3 -2
  55. package/dist/sdk/init-agent-guidance.js +4 -4
  56. package/dist/sdk/lifecycle/update.js +23 -10
  57. package/dist/sdk/mcp/discovery.d.ts +152 -0
  58. package/dist/sdk/mcp/discovery.js +495 -0
  59. package/dist/sdk/merge/index.d.ts +1 -1
  60. package/dist/sdk/merge/index.js +3 -3
  61. package/dist/sdk/merge/receipts.d.ts +27 -1
  62. package/dist/sdk/merge/receipts.js +27 -8
  63. package/dist/sdk/merge/three-way.d.ts +3 -1
  64. package/dist/sdk/merge/three-way.js +9 -7
  65. package/dist/sdk/runtime-extended-actions.js +4 -4
  66. package/docs/AGENT_GUIDE.md +11 -3
  67. package/docs/ARCHITECTURE.md +5 -0
  68. package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
  69. package/docs/CONTEXT_RECOVERY_PRIMITIVES.md +14 -5
  70. package/docs/MCP_2026_07_28.md +9 -5
  71. package/docs/MCP_CAPABILITY_SURFACES.md +7 -1
  72. package/docs/MCP_REMOTE_TRANSPORT_SECURITY.md +11 -1
  73. package/docs/MERGE_SAFETY.md +30 -2
  74. package/docs/OUTPUT_TOKEN_ACCOUNTING.md +5 -3
  75. package/docs/PROGRESSIVE_TOOL_DISCOVERY.md +42 -0
  76. package/docs/README.md +1 -0
  77. package/docs/agent-task-token-baseline.json +157 -3
  78. package/docs/agent-task-transcripts.json +143 -0
  79. package/docs/performance/cli-transport-overhead.md +8 -6
  80. package/marketplace.json +2 -2
  81. package/package.json +2 -2
  82. package/packages/pm-beads/package.json +1 -1
  83. package/packages/pm-calendar/package.json +1 -1
  84. package/packages/pm-command-kit/package.json +1 -1
  85. package/packages/pm-digital-twin/package.json +1 -1
  86. package/packages/pm-governance-audit/package.json +1 -1
  87. package/packages/pm-guide-shell/package.json +1 -1
  88. package/packages/pm-kanban/package.json +1 -1
  89. package/packages/pm-lifecycle-hooks/package.json +1 -1
  90. package/packages/pm-linked-test-adapters/package.json +1 -1
  91. package/packages/pm-search-advanced/package.json +1 -1
  92. package/packages/pm-templates/package.json +1 -1
  93. package/packages/pm-todos/package.json +1 -1
  94. package/packages/pm-vcs/package.json +1 -1
  95. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  96. package/plugins/pm-claude/README.md +4 -3
  97. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  98. package/sdk/public-surface.json +145 -2
  99. package/dist/cli-bundle/chunks/chunk-2XVV45NJ.js +0 -35
  100. package/dist/cli-bundle/chunks/chunk-3FCSFWZT.js +0 -13
  101. package/dist/cli-bundle/chunks/register-mutation-OI4BJLUX.js +0 -20
  102. package/dist/cli-bundle/focused-chunks/chunk-BMD42PUG.js +0 -158
  103. package/dist/cli-bundle/focused-chunks/chunk-EUTABA4M.js +0 -16
@@ -1,6 +1,149 @@
1
1
  {
2
2
  "version": 2,
3
+ "orientation": {
4
+ "canonical_task_id": "orientation-context-intent",
5
+ "required_capabilities": [
6
+ "workspace_state",
7
+ "active_ownership",
8
+ "actionable_work"
9
+ ],
10
+ "protocols": [
11
+ {
12
+ "task_id": "orientation-context-intent",
13
+ "capabilities": [
14
+ "workspace_state",
15
+ "active_ownership",
16
+ "actionable_work"
17
+ ],
18
+ "capability_evidence": {
19
+ "workspace_state": [
20
+ { "step_id": "context", "field_path": "summary.active_items" }
21
+ ],
22
+ "active_ownership": [
23
+ { "step_id": "context", "field_path": "activity" }
24
+ ],
25
+ "actionable_work": [
26
+ { "step_id": "context", "field_path": "hierarchy" }
27
+ ]
28
+ }
29
+ },
30
+ {
31
+ "task_id": "orientation-contracts-next",
32
+ "capabilities": [
33
+ "workspace_state",
34
+ "active_ownership",
35
+ "actionable_work"
36
+ ],
37
+ "capability_evidence": {
38
+ "workspace_state": [
39
+ { "step_id": "next", "field_path": "summary.in_progress" }
40
+ ],
41
+ "active_ownership": [
42
+ { "step_id": "next", "field_path": "held_by_others" }
43
+ ],
44
+ "actionable_work": [
45
+ { "step_id": "next", "field_path": "recommended.id" }
46
+ ]
47
+ }
48
+ },
49
+ {
50
+ "task_id": "orientation-operating-rules",
51
+ "capabilities": [
52
+ "workspace_state",
53
+ "active_ownership",
54
+ "actionable_work"
55
+ ],
56
+ "capability_evidence": {
57
+ "workspace_state": [
58
+ { "step_id": "context", "field_path": "summary.active_items" }
59
+ ],
60
+ "active_ownership": [
61
+ { "step_id": "in-progress", "field_path": "items" }
62
+ ],
63
+ "actionable_work": [{ "step_id": "open", "field_path": "items" }]
64
+ }
65
+ }
66
+ ]
67
+ },
3
68
  "tasks": [
69
+ {
70
+ "id": "orientation-context-intent",
71
+ "description": "Build sufficient cold-start workspace, ownership, and actionable-work context with the bounded orientation intent.",
72
+ "steps": [
73
+ {
74
+ "id": "context",
75
+ "args": ["context", "--for", "orient", "--limit", "10"],
76
+ "expected_exit_code": 0,
77
+ "expected_output_kind": "diagnostic",
78
+ "expected_accounting_mode": "self_reported",
79
+ "required_fields": ["summary.active_items", "hierarchy", "activity"]
80
+ }
81
+ ]
82
+ },
83
+ {
84
+ "id": "orientation-contracts-next",
85
+ "description": "Compare the proposed contracts-summary plus next cold-start protocol on the same fixed workspace.",
86
+ "steps": [
87
+ {
88
+ "id": "contracts",
89
+ "args": ["contracts", "--summary"],
90
+ "expected_exit_code": 0,
91
+ "expected_output_kind": "collection",
92
+ "expected_accounting_mode": "self_reported",
93
+ "required_fields": ["commands"]
94
+ },
95
+ {
96
+ "id": "next",
97
+ "args": ["next", "--for", "execute", "--ready-only", "--limit", "3"],
98
+ "expected_exit_code": 0,
99
+ "expected_output_kind": "diagnostic",
100
+ "expected_accounting_mode": "self_reported",
101
+ "required_fields": [
102
+ "summary.in_progress",
103
+ "held_by_others",
104
+ "recommended.id"
105
+ ]
106
+ }
107
+ ]
108
+ },
109
+ {
110
+ "id": "orientation-operating-rules",
111
+ "description": "Compare the historical context, search, open-list, and in-progress-list orientation sequence.",
112
+ "steps": [
113
+ {
114
+ "id": "context",
115
+ "args": ["context", "--for", "orient", "--limit", "10"],
116
+ "expected_exit_code": 0,
117
+ "expected_output_kind": "diagnostic",
118
+ "expected_accounting_mode": "self_reported",
119
+ "required_fields": ["summary.active_items", "hierarchy", "activity"]
120
+ },
121
+ {
122
+ "id": "search",
123
+ "args": ["search", "agent task", "--status", "all", "--limit", "10"],
124
+ "expected_exit_code": 0,
125
+ "expected_output_kind": "collection",
126
+ "expected_accounting_mode": "self_reported",
127
+ "required_fields": ["items"]
128
+ },
129
+ {
130
+ "id": "open",
131
+ "args": ["list", "--status", "open", "--limit", "20"],
132
+ "expected_exit_code": 0,
133
+ "expected_output_kind": "collection",
134
+ "expected_accounting_mode": "self_reported",
135
+ "required_fields": ["items"]
136
+ },
137
+ {
138
+ "id": "in-progress",
139
+ "args": ["list", "--status", "in_progress", "--limit", "20"],
140
+ "expected_exit_code": 0,
141
+ "expected_output_kind": "collection",
142
+ "expected_accounting_mode": "self_reported",
143
+ "required_fields": ["items"]
144
+ }
145
+ ]
146
+ },
4
147
  {
5
148
  "id": "context-bootstrap",
6
149
  "description": "Orient in a scaled workspace and inspect the canonical focus item.",
@@ -7,12 +7,14 @@ admission reliability owned by
7
7
  Each result starts from a fresh isolated workspace containing exactly one item.
8
8
  The command runs in a fresh Node v26.5.0 process on
9
9
  linux/x64; setup and fixture generation are
10
- outside the timed interval. Short local gates use the best observed latency,
11
- while the report retains p50 and p95 evidence. RSS admission uses the measured
12
- median so one page-level outlier cannot false-fail the gate; the maximum remains
13
- in the report as diagnostic evidence. Every post-warmup RSS sample must be a
14
- finite measurement; an unavailable sample makes the admission median unavailable
15
- and fails closed when a budget exists. Admission adds a fixed 512 KiB noise margin
10
+ outside the timed interval. The default gate measures ten post-warmup fresh
11
+ processes per command and uses the best observed latency, which keeps the
12
+ immutable ratchets meaningful under transient host contention; the report
13
+ retains p50 and p95 evidence. RSS admission uses the measured median so one
14
+ page-level outlier cannot false-fail the gate; the maximum remains in the report
15
+ as diagnostic evidence. Every post-warmup RSS sample must be a finite
16
+ measurement; an unavailable sample makes the admission median unavailable and
17
+ fails closed when a budget exists. Admission adds a fixed 512 KiB noise margin
16
18
  without changing the committed budget; a majority persistent increase beyond
17
19
  that bounded margin still fails.
18
20
 
package/marketplace.json CHANGED
@@ -6,14 +6,14 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.",
9
- "version": "2026.8.31"
9
+ "version": "2026.9.1"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "pm-claude",
14
14
  "source": "./plugins/pm-claude",
15
15
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
16
- "version": "2026.8.31",
16
+ "version": "2026.9.1",
17
17
  "author": {
18
18
  "name": "unbrained",
19
19
  "url": "https://github.com/unbraind/pm-cli"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-cli",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.10.0",
@@ -231,7 +231,7 @@
231
231
  "fast-check": "^4.9.0",
232
232
  "greptile": "^3.4.2",
233
233
  "jscpd": "^5.0.16",
234
- "tsx": "^4.23.12",
234
+ "tsx": "^4.23.13",
235
235
  "typescript": "^6.0.3",
236
236
  "typescript-eslint": "^8.68.0",
237
237
  "vitest": "^4.1.11"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-beads",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for importing Beads JSONL records.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-calendar",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for calendar and agenda views.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-command-kit",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm exemplar package for the commands capability: registerCommand, registerFlags, and registerParser.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-digital-twin",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-governance-audit",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for governance audit and normalization workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-guide-shell",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for guide and shell completion workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-kanban",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm archetype package: a complete Kanban continuous-flow profile built on public SDK primitives.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-lifecycle-hooks",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package demonstrating safe lifecycle hook registration.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-linked-test-adapters",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for optional linked-test run management adapters and reporters.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-search-advanced",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for semantic, hybrid, and reindex search workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-templates",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for reusable create templates.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-todos",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for Todo markdown import and export.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-vcs-sdk-exemplar",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Beyond-PM exemplar: a VCS-style changeset workflow built entirely on public pm SDK and extension primitives.",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pm-claude",
3
3
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents (coordinator, delivery-chain, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.",
4
- "version": "2026.8.31",
4
+ "version": "2026.9.1",
5
5
  "author": {
6
6
  "name": "unbrained",
7
7
  "url": "https://github.com/unbraind/pm-cli"
@@ -6,7 +6,7 @@ Native pm CLI integration for Claude Code. Use pm project management tools direc
6
6
 
7
7
  | Component | What it provides |
8
8
  |-----------|----------------|
9
- | **31 MCP tools** | Full pm surface: next, context, search, events, list, get, create, atomic mutate, copy, focus, update, claim, release, close, comments, files, docs, notes, learnings, deps, graph, test, validate, health, contracts, plan, append, schema, config, profile + `pm_run` for everything else |
9
+ | **32 MCP tools** | Full pm surface: discover, next, context, search, events, list, get, create, atomic mutate, copy, focus, update, claim, release, close, comments, files, docs, notes, learnings, deps, graph, test, validate, health, contracts, plan, append, schema, config, profile + `pm_run` for everything else |
10
10
  | **5 skills** | `pm-workflow`, `pm-developer`, `pm-release`, `pm-audit`, `pm-planner` — auto-loaded as Claude Code skills |
11
11
  | **14 slash commands** | Full lifecycle coverage — status, start, close, triage, audit, search, new, list, calendar, developer, planner, release, workflow, init |
12
12
  | **4 subagents** | `pm-coordinator` (batch/multi-item), `pm-triage-agent` (duplicate-safe item creation), `pm-verification-agent` (evidence + close readiness), and `pm-delivery-chain` (orchestrated delivery) |
@@ -29,7 +29,7 @@ claude plugin marketplace add /path/to/pm-cli
29
29
  # claude plugin marketplace add unbraind/pm-cli
30
30
  ```
31
31
 
32
- This installs all 31 MCP tools, 5 skills, 14 slash commands, 4 subagents, hybrid TUI tracking, and the session hook in one step. (`pm-claude` is the plugin name; `pm` is the marketplace name from `marketplace.json`.)
32
+ This installs all 32 MCP tools, 5 skills, 14 slash commands, 4 subagents, hybrid TUI tracking, and the session hook in one step. (`pm-claude` is the plugin name; `pm` is the marketplace name from `marketplace.json`.)
33
33
 
34
34
  ### Option B: Global MCP server via Claude Code CLI (MCP tools only)
35
35
 
@@ -37,7 +37,7 @@ This installs all 31 MCP tools, 5 skills, 14 slash commands, 4 subagents, hybrid
37
37
  claude mcp add --transport stdio pm-mcp -- npx -y --package=@unbrained/pm-cli@latest pm-mcp
38
38
  ```
39
39
 
40
- This gives you the 31 MCP tools but not the skills, slash commands, or session hook.
40
+ This gives you the 32 MCP tools but not the skills, slash commands, or session hook.
41
41
 
42
42
  ### Option C: Direct `.mcp.json` (project-scoped MCP only)
43
43
 
@@ -136,6 +136,7 @@ Spawn pm-triage-agent to set up the pm item for: add OAuth2 login support
136
136
 
137
137
  | Tool | Purpose |
138
138
  |------|---------|
139
+ | `pm_discover` | Expand the authorized tool catalog by intent under an explicit token budget |
139
140
  | `pm_next` | Pick the next actionable item |
140
141
  | `pm_context` | Active work snapshot |
141
142
  | `pm_search` | Keyword/semantic/hybrid search |
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-codex",
3
- "version": "2026.8.31",
3
+ "version": "2026.9.1",
4
4
  "description": "Native Codex integration for pm-cli with bundled MCP tools, skills, commands, and agent workflows.",
5
5
  "author": {
6
6
  "name": "unbrained",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "aggregate_completeness": {
3
- "covered_symbols": 1820,
3
+ "covered_symbols": 1824,
4
4
  "excluded": [
5
5
  {
6
6
  "name": "_testOnlyCliContracts",
@@ -8,7 +8,7 @@
8
8
  }
9
9
  ],
10
10
  "missing": [],
11
- "required_symbols": 1821
11
+ "required_symbols": 1825
12
12
  },
13
13
  "breaking_acknowledgements": [
14
14
  {
@@ -1446,6 +1446,23 @@
1446
1446
  ],
1447
1447
  "package_version": "2026.8.30",
1448
1448
  "reason": "Fail closed on malformed history evidence and expose complete bounded lifecycle-role diagnostics"
1449
+ },
1450
+ {
1451
+ "changes": [
1452
+ "signature ./sdk:MergeReceiptEvidenceReport",
1453
+ "signature ./sdk:MergeReceiptEvidenceScan",
1454
+ "signature ./sdk/merge:MergeReceiptEvidenceReport",
1455
+ "signature ./sdk/merge:MergeReceiptEvidenceScan"
1456
+ ],
1457
+ "package_version": "2026.8.30",
1458
+ "reason": "Add optional clone-local resolution evidence to loss-aware receipt scans and reports so gates fail closed while existing structural consumers remain compatible."
1459
+ },
1460
+ {
1461
+ "changes": [
1462
+ "signature ./sdk:PmToolDiscoveryOptions"
1463
+ ],
1464
+ "package_version": "2026.8.31",
1465
+ "reason": "Add optional host-owned cursor integrity key for deployment-stable pagination; existing callers and process-local fallback remain compatible."
1449
1466
  }
1450
1467
  ],
1451
1468
  "entrypoints": {
@@ -5508,6 +5525,12 @@
5508
5525
  "name": "discoverNearbyPmRoot",
5509
5526
  "signature": "(cwd: string, excludedRoot?: string) => string | undefined | calls: (cwd: string, excludedRoot?: string) => string | undefined"
5510
5527
  },
5528
+ {
5529
+ "classification": "advanced_export",
5530
+ "kind": "function",
5531
+ "name": "discoverPmTools",
5532
+ "signature": "(candidates: readonly PmToolDiscoveryCandidate[], options?: PmToolDiscoveryOptions) => PmToolDiscoveryResult | calls: (candidates: readonly PmToolDiscoveryCandidate[], options?: PmToolDiscoveryOptions) => PmToolDiscoveryResult"
5533
+ },
5511
5534
  {
5512
5535
  "classification": "advanced_export",
5513
5536
  "kind": "function",
@@ -8088,6 +8111,12 @@
8088
8111
  "name": "inspectHistoryAuthorStream",
8089
8112
  "signature": "(itemId: string, raw: string, sampleLimit?: number, acknowledgedEvents?: ReadonlySet<string>) => Pick<HistoryAuthorAttributionScan, \"acknowledged_actionable_event_count\" | \"actionable_events\" | \"actionable_unknown_event_count\" | \"checked_events\" | \"legacy_unknown_event_count\" | \"samples_truncated\" | \"samples\" | \"unknown_event_count\"> | calls: (itemId: string, raw: string, sampleLimit?: number, acknowledgedEvents?: ReadonlySet<string>) => Pick<HistoryAuthorAttributionScan, \"checked_events\" | \"unknown_event_count\" | \"legacy_unknown_event_count\" | \"actionable_unknown_event_count\" | \"acknowledged_actionable_event_count\" | \"samples\" | \"samples_truncated\" | \"actionable_events\">"
8090
8113
  },
8114
+ {
8115
+ "classification": "supported",
8116
+ "kind": "function",
8117
+ "name": "inspectMergeReceiptEvidence",
8118
+ "signature": "(cwd: string, options?: { includeReconciled?: boolean; includeLossless?: boolean; pmRoot?: string; }) => Promise<MergeReceiptEvidenceScan> | calls: (cwd: string, options?: { includeReconciled?: boolean; includeLossless?: boolean; pmRoot?: string; }) => Promise<MergeReceiptEvidenceScan>"
8119
+ },
8091
8120
  {
8092
8121
  "classification": "advanced_export",
8093
8122
  "kind": "function",
@@ -9258,6 +9287,18 @@
9258
9287
  "name": "MergePreferredSide",
9259
9288
  "signature": "export type MergePreferredSide = \"ours\" | \"theirs\";"
9260
9289
  },
9290
+ {
9291
+ "classification": "supported",
9292
+ "kind": "interface",
9293
+ "name": "MergeReceiptEvidenceReport",
9294
+ "signature": "export interface MergeReceiptEvidenceReport { ok: boolean; complete: boolean; count: number; invalid_evidence_count: number; clone_local_evidence_resolved?: boolean; receipts: MergeDecisionReceipt[]; generated_at: string; }"
9295
+ },
9296
+ {
9297
+ "classification": "supported",
9298
+ "kind": "interface",
9299
+ "name": "MergeReceiptEvidenceScan",
9300
+ "signature": "export interface MergeReceiptEvidenceScan { receipts: MergeDecisionReceipt[]; invalid_evidence_count: number; clone_local_evidence_resolved?: boolean; }"
9301
+ },
9261
9302
  {
9262
9303
  "classification": "advanced_export",
9263
9304
  "kind": "interface",
@@ -10176,6 +10217,12 @@
10176
10217
  "name": "parsePmAgentTaskTranscriptCorpus",
10177
10218
  "signature": "(value: unknown) => PmAgentTaskTranscriptCorpus | calls: (value: unknown) => PmAgentTaskTranscriptCorpus"
10178
10219
  },
10220
+ {
10221
+ "classification": "advanced_export",
10222
+ "kind": "function",
10223
+ "name": "parsePmToolDiscoveryOptions",
10224
+ "signature": "(input: Record<string, unknown>) => PmToolDiscoveryOptions | calls: (input: Record<string, unknown>) => PmToolDiscoveryOptions"
10225
+ },
10179
10226
  {
10180
10227
  "classification": "supported",
10181
10228
  "kind": "function",
@@ -10758,6 +10805,12 @@
10758
10805
  "name": "PM_MCP_APPS_SPEC_VERSION",
10759
10806
  "signature": "\"2026-01-26\""
10760
10807
  },
10808
+ {
10809
+ "classification": "advanced_export",
10810
+ "kind": "value",
10811
+ "name": "PM_MCP_ENTRY_TOOL_NAMES",
10812
+ "signature": "readonly string[]"
10813
+ },
10761
10814
  {
10762
10815
  "classification": "advanced_export",
10763
10816
  "kind": "value",
@@ -10788,6 +10841,18 @@
10788
10841
  "name": "PM_MCP_META_KEYS",
10789
10842
  "signature": "{ readonly clientCapabilities: \"io.modelcontextprotocol/clientCapabilities\"; readonly clientInfo: \"io.modelcontextprotocol/clientInfo\"; readonly protocolVersion: \"io.modelcontextprotocol/protocolVersion\"; readonly serverInfo: \"io.modelcontextprotocol/serverInfo\"; }"
10790
10843
  },
10844
+ {
10845
+ "classification": "advanced_export",
10846
+ "kind": "value",
10847
+ "name": "PM_MCP_PROGRESSIVE_DISCOVERY_EXTENSION",
10848
+ "signature": "\"dev.unbrained.pm/progressive-tool-discovery\""
10849
+ },
10850
+ {
10851
+ "classification": "advanced_export",
10852
+ "kind": "value",
10853
+ "name": "PM_MCP_PROGRESSIVE_DISCOVERY_SERVER_CAPABILITY",
10854
+ "signature": "Readonly<{ version: 1; discoveryTool: \"pm_discover\"; canonicalResult: \"structuredContent.result\"; compatibilityText: \"pointer\"; }>"
10855
+ },
10791
10856
  {
10792
10857
  "classification": "advanced_export",
10793
10858
  "kind": "value",
@@ -12384,6 +12449,54 @@
12384
12449
  "name": "PmToolCustomFieldCollision",
12385
12450
  "signature": "export interface PmToolCustomFieldCollision { field: string; property: string; owner: \"mcp_tool_input\"; nested_path: string; }"
12386
12451
  },
12452
+ {
12453
+ "classification": "advanced_export",
12454
+ "kind": "interface",
12455
+ "name": "PmToolDiscoveryAppliedSignal",
12456
+ "signature": "export interface PmToolDiscoveryAppliedSignal { value: number; weight: number; available: boolean; source: \"computed\" | \"host\" | \"authorization\" | \"unavailable\"; }"
12457
+ },
12458
+ {
12459
+ "classification": "advanced_export",
12460
+ "kind": "interface",
12461
+ "name": "PmToolDiscoveryCandidate",
12462
+ "signature": "export interface PmToolDiscoveryCandidate { name: string; description: string; inputSchema: Record<string, unknown>; authorized?: boolean; signals?: PmToolDiscoverySignalInput; }"
12463
+ },
12464
+ {
12465
+ "classification": "advanced_export",
12466
+ "kind": "interface",
12467
+ "name": "PmToolDiscoveryOmissionReceipt",
12468
+ "signature": "export interface PmToolDiscoveryOmissionReceipt { has_omissions: boolean; omitted: Array<{ name: \"input_schema\" | \"tools\"; reason: \"compact_projection\" | \"limit\" | \"token_budget\"; restore_with: string; }>; }"
12469
+ },
12470
+ {
12471
+ "classification": "advanced_export",
12472
+ "kind": "interface",
12473
+ "name": "PmToolDiscoveryOptions",
12474
+ "signature": "export interface PmToolDiscoveryOptions { query?: string; family?: PmCommandCapabilityFamily; tier?: Exclude<PmCommandVisibilityTier, \"internal\">; limit?: number; cursor?: string; includeSchema?: boolean; outputBudget?: number | \"unbounded\"; profile?: PmMcpToolProfile; cursorIntegrityKey?: Uint8Array; }"
12475
+ },
12476
+ {
12477
+ "classification": "advanced_export",
12478
+ "kind": "interface",
12479
+ "name": "PmToolDiscoveryResult",
12480
+ "signature": "export interface PmToolDiscoveryResult { result_type: \"pm_tool_discovery\"; contract_version: 1; query: string; profile: PmMcpToolProfile; tools: PmToolDiscoveryResultRow[]; total: number; returned: number; has_more: boolean; next_cursor?: string; token_cost: { estimated_tokens: number; budget: number | \"unbounded\"; within_budget: boolean; }; ranking_policy: { version: 1; formula: \"weighted_sum_then_name\"; weights: Readonly<Record<PmToolDiscoverySignalName, number>>; }; cache: { key: string; ttl_ms: number; scope: \"private\"; invalidates_on: readonly string[]; }; omission_receipt: PmToolDiscoveryOmissionReceipt; }"
12481
+ },
12482
+ {
12483
+ "classification": "advanced_export",
12484
+ "kind": "interface",
12485
+ "name": "PmToolDiscoveryResultRow",
12486
+ "signature": "export interface PmToolDiscoveryResultRow { name: string; description: string; command: string; tier: PmCommandVisibilityTier; family: PmCommandCapabilityFamily; score: number; signals: Readonly<Record<PmToolDiscoverySignalName, PmToolDiscoveryAppliedSignal>>; input_schema?: Record<string, unknown>; }"
12487
+ },
12488
+ {
12489
+ "classification": "advanced_export",
12490
+ "kind": "interface",
12491
+ "name": "PmToolDiscoverySignalInput",
12492
+ "signature": "export interface PmToolDiscoverySignalInput { semantic?: number; graph?: number; freshness?: number; usage?: number; }"
12493
+ },
12494
+ {
12495
+ "classification": "advanced_export",
12496
+ "kind": "type",
12497
+ "name": "PmToolDiscoverySignalName",
12498
+ "signature": "export type PmToolDiscoverySignalName = \"lexical\" | \"semantic\" | \"graph\" | \"permission\" | \"freshness\" | \"usage\";"
12499
+ },
12387
12500
  {
12388
12501
  "classification": "contract_data",
12389
12502
  "kind": "type",
@@ -15528,6 +15641,12 @@
15528
15641
  "name": "runMergeInstall",
15529
15642
  "signature": "(options: MergeInstallOptions, global: GlobalOptions) => Promise<MergeInstallResult> | calls: (options: MergeInstallOptions, global: GlobalOptions) => Promise<MergeInstallResult>"
15530
15643
  },
15644
+ {
15645
+ "classification": "supported",
15646
+ "kind": "function",
15647
+ "name": "runMergeReceiptEvidenceReport",
15648
+ "signature": "(options: { includeReconciled?: boolean; cwd?: string; }) => Promise<MergeReceiptEvidenceReport> | calls: (options: { includeReconciled?: boolean; cwd?: string; }) => Promise<MergeReceiptEvidenceReport>"
15649
+ },
15531
15650
  {
15532
15651
  "classification": "supported",
15533
15652
  "kind": "function",
@@ -26460,6 +26579,12 @@
26460
26579
  "name": "HistoryMergeStrategy",
26461
26580
  "signature": "export type HistoryMergeStrategy = \"identical\" | \"fast_forward_ours\" | \"fast_forward_theirs\" | \"union_reanchor\";"
26462
26581
  },
26582
+ {
26583
+ "classification": "supported",
26584
+ "kind": "function",
26585
+ "name": "inspectMergeReceiptEvidence",
26586
+ "signature": "(cwd: string, options?: { includeReconciled?: boolean; includeLossless?: boolean; pmRoot?: string; }) => Promise<MergeReceiptEvidenceScan> | calls: (cwd: string, options?: { includeReconciled?: boolean; includeLossless?: boolean; pmRoot?: string; }) => Promise<MergeReceiptEvidenceScan>"
26587
+ },
26463
26588
  {
26464
26589
  "classification": "supported",
26465
26590
  "kind": "function",
@@ -26604,6 +26729,18 @@
26604
26729
  "name": "MergePreferredSide",
26605
26730
  "signature": "export type MergePreferredSide = \"ours\" | \"theirs\";"
26606
26731
  },
26732
+ {
26733
+ "classification": "supported",
26734
+ "kind": "interface",
26735
+ "name": "MergeReceiptEvidenceReport",
26736
+ "signature": "export interface MergeReceiptEvidenceReport { ok: boolean; complete: boolean; count: number; invalid_evidence_count: number; clone_local_evidence_resolved?: boolean; receipts: MergeDecisionReceipt[]; generated_at: string; }"
26737
+ },
26738
+ {
26739
+ "classification": "supported",
26740
+ "kind": "interface",
26741
+ "name": "MergeReceiptEvidenceScan",
26742
+ "signature": "export interface MergeReceiptEvidenceScan { receipts: MergeDecisionReceipt[]; invalid_evidence_count: number; clone_local_evidence_resolved?: boolean; }"
26743
+ },
26607
26744
  {
26608
26745
  "classification": "supported",
26609
26746
  "kind": "interface",
@@ -26688,6 +26825,12 @@
26688
26825
  "name": "runMergeInstall",
26689
26826
  "signature": "(options: MergeInstallOptions, global: GlobalOptions) => Promise<MergeInstallResult> | calls: (options: MergeInstallOptions, global: GlobalOptions) => Promise<MergeInstallResult>"
26690
26827
  },
26828
+ {
26829
+ "classification": "supported",
26830
+ "kind": "function",
26831
+ "name": "runMergeReceiptEvidenceReport",
26832
+ "signature": "(options: { includeReconciled?: boolean; cwd?: string; }) => Promise<MergeReceiptEvidenceReport> | calls: (options: { includeReconciled?: boolean; cwd?: string; }) => Promise<MergeReceiptEvidenceReport>"
26833
+ },
26691
26834
  {
26692
26835
  "classification": "supported",
26693
26836
  "kind": "function",