@unbrained/pm-cli 2026.9.10 → 2026.9.11

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 (157) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +31 -11
  3. package/dist/cli/command-namespaces.d.ts +2 -2
  4. package/dist/cli/command-namespaces.js +1 -1
  5. package/dist/cli/extension-command-help.js +3 -3
  6. package/dist/cli/main.d.ts +4 -0
  7. package/dist/cli/main.js +2 -2
  8. package/dist/cli/register-history-maintenance.js +2 -1
  9. package/dist/cli/register-list-query.js +2 -2
  10. package/dist/cli-bundle/bundle-manifest.json +147 -155
  11. package/dist/cli-bundle/chunks/{chunk-EOCKPCEY.js → chunk-BN5QVWNY.js} +2 -2
  12. package/dist/cli-bundle/chunks/chunk-DAWH7TGV.js +3 -0
  13. package/dist/cli-bundle/chunks/chunk-FBY6PEIR.js +20 -0
  14. package/dist/cli-bundle/chunks/chunk-IRUNFLLG.js +2 -0
  15. package/dist/cli-bundle/chunks/chunk-JMQKJ7CJ.js +8 -0
  16. package/dist/cli-bundle/chunks/{chunk-I6XT3DLQ.js → chunk-QER6OSOP.js} +2 -2
  17. package/dist/cli-bundle/chunks/chunk-RJQSCK74.js +6 -0
  18. package/dist/cli-bundle/chunks/chunk-RJZFAXBW.js +235 -0
  19. package/dist/cli-bundle/chunks/{chunk-MACGGTLQ.js → chunk-SGAKQIGQ.js} +29 -29
  20. package/dist/cli-bundle/chunks/{chunk-NKOYVKFM.js → chunk-TDKWJQD7.js} +2 -2
  21. package/dist/cli-bundle/chunks/{chunk-4SFBH77G.js → chunk-TFVKBJJ4.js} +164 -150
  22. package/dist/cli-bundle/chunks/{chunk-PYUITRSV.js → chunk-VFKBNGF6.js} +2 -2
  23. package/dist/cli-bundle/chunks/{register-list-query-CUIW7SSE.js → register-list-query-U6MY437C.js} +6 -6
  24. package/dist/cli-bundle/chunks/{register-mutation-5F5CYUWZ.js → register-mutation-HAPHD4S7.js} +2 -2
  25. package/dist/cli-bundle/chunks/{register-operations-XIZPLPQY.js → register-operations-EHWIZW3X.js} +2 -2
  26. package/dist/cli-bundle/chunks/{register-setup-JVGPCAIL.js → register-setup-BZYL3HBL.js} +2 -2
  27. package/dist/cli-bundle/focused-chunks/{chunk-ZJHYQOTM.js → chunk-3JVTLBCW.js} +4 -4
  28. package/dist/cli-bundle/focused-chunks/chunk-6JF66HAG.js +2 -0
  29. package/dist/cli-bundle/focused-chunks/{chunk-SL5YVVPV.js → chunk-7WISPJRZ.js} +53 -52
  30. package/dist/cli-bundle/focused-chunks/chunk-BEQAW7OT.js +12 -0
  31. package/dist/cli-bundle/focused-chunks/{chunk-CRY5MHEI.js → chunk-DZ3ATEFS.js} +2 -2
  32. package/dist/cli-bundle/focused-chunks/{chunk-FHUARRMA.js → chunk-FJDEFA64.js} +2 -2
  33. package/dist/cli-bundle/focused-chunks/{chunk-7N5MRONP.js → chunk-GKUF7TM5.js} +2 -2
  34. package/dist/cli-bundle/focused-chunks/{chunk-U5SHHU7E.js → chunk-HM6JS6Q3.js} +2 -2
  35. package/dist/cli-bundle/focused-chunks/chunk-M74YW332.js +164 -0
  36. package/dist/cli-bundle/focused-chunks/{chunk-ZDNAWWQI.js → chunk-MOT32PR2.js} +2 -2
  37. package/dist/cli-bundle/focused-chunks/chunk-ONDKO4EL.js +2 -0
  38. package/dist/cli-bundle/focused-chunks/{chunk-M36SF4GE.js → chunk-TGMSSI3Z.js} +2 -2
  39. package/dist/cli-bundle/focused-chunks/chunk-TWE3GPQM.js +30 -0
  40. package/dist/cli-bundle/focused-chunks/chunk-UJCQXUD2.js +8 -0
  41. package/dist/cli-bundle/focused-chunks/{chunk-ZAWAL2CG.js → chunk-VS6MR2HT.js} +2 -2
  42. package/dist/cli-bundle/focused-chunks/{chunk-5YU75QLV.js → chunk-YOPNRWSX.js} +2 -2
  43. package/dist/cli-bundle/main.js +21 -21
  44. package/dist/cli-bundle/sdk-authoring.js +1 -1
  45. package/dist/cli-bundle/sdk-contracts.js +2 -2
  46. package/dist/cli-bundle/sdk-core.js +37 -37
  47. package/dist/cli-bundle/sdk-governance.js +1 -1
  48. package/dist/cli-bundle/sdk-graph.js +1 -1
  49. package/dist/cli-bundle/sdk-merge.js +42 -42
  50. package/dist/cli-bundle/sdk-query.js +1 -1
  51. package/dist/cli-bundle/sdk-runtime.js +1 -1
  52. package/dist/cli-bundle/sdk-testing.js +1 -1
  53. package/dist/cli-bundle/sdk.js +10 -10
  54. package/dist/core/history/digest.d.ts +12 -0
  55. package/dist/core/history/digest.js +2 -0
  56. package/dist/core/history/drift-scan.js +1 -1
  57. package/dist/core/history/history.d.ts +5 -3
  58. package/dist/core/history/history.js +2 -2
  59. package/dist/core/history/replay.d.ts +3 -2
  60. package/dist/core/history/replay.js +1 -1
  61. package/dist/core/telemetry/runtime.d.ts +1 -0
  62. package/dist/core/telemetry/runtime.js +2 -2
  63. package/dist/sdk/agent/command-recovery.js +1 -1
  64. package/dist/sdk/agent/item-addressing.js +1 -1
  65. package/dist/sdk/agent/refusal-corpus-contracts.js +1 -1
  66. package/dist/sdk/agent-capability-contracts.js +1 -1
  67. package/dist/sdk/cli-bootstrap.d.ts +2 -1
  68. package/dist/sdk/cli-bootstrap.js +1 -1
  69. package/dist/sdk/cli-contracts/command-aliases.d.ts +2 -0
  70. package/dist/sdk/cli-contracts/command-aliases.js +1 -1
  71. package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
  72. package/dist/sdk/cli-contracts/enum-contracts.js +1 -1
  73. package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
  74. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
  75. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
  76. package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
  77. package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
  78. package/dist/sdk/cli-contracts/tool-schema.d.ts +2 -2
  79. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  80. package/dist/sdk/cli-contracts.d.ts +1 -1
  81. package/dist/sdk/cli-contracts.js +1 -1
  82. package/dist/sdk/completion.d.ts +2 -0
  83. package/dist/sdk/completion.js +26 -14
  84. package/dist/sdk/contracts.d.ts +1 -0
  85. package/dist/sdk/contracts.js +1 -1
  86. package/dist/sdk/governance.d.ts +3 -0
  87. package/dist/sdk/governance.js +1 -1
  88. package/dist/sdk/history/attestation-command.d.ts +22 -0
  89. package/dist/sdk/history/attestation-command.js +3 -0
  90. package/dist/sdk/history/attestation-contract.d.ts +103 -0
  91. package/dist/sdk/history/attestation-contract.js +2 -0
  92. package/dist/sdk/history/attestation-scan.d.ts +16 -0
  93. package/dist/sdk/history/attestation-scan.js +2 -0
  94. package/dist/sdk/history/attestation.d.ts +8 -0
  95. package/dist/sdk/history/attestation.js +2 -0
  96. package/dist/sdk/history/salvage.js +1 -1
  97. package/dist/sdk/history-compact.js +1 -1
  98. package/dist/sdk/history-read.js +1 -1
  99. package/dist/sdk/history-redact.js +1 -1
  100. package/dist/sdk/history-repair.js +1 -1
  101. package/dist/sdk/index.d.ts +2 -1
  102. package/dist/sdk/index.js +1 -1
  103. package/dist/sdk/public-surface.json +1 -1
  104. package/dist/sdk/read-output-budget.d.ts +4 -10
  105. package/dist/sdk/read-output-budget.js +1 -1
  106. package/dist/sdk/read-output-contracts.d.ts +1 -1
  107. package/dist/sdk/read-output-contracts.js +1 -1
  108. package/dist/sdk/read-output-session.d.ts +1 -1
  109. package/dist/sdk/read-output-session.js +1 -1
  110. package/dist/sdk/runtime-input.js +1 -1
  111. package/dist/sdk/runtime.d.ts +3 -0
  112. package/dist/sdk/runtime.js +1 -1
  113. package/dist/types.d.ts +5 -1
  114. package/dist/types.js +1 -1
  115. package/docs/CLI_GRAMMAR.md +23 -0
  116. package/docs/HISTORY_ATTESTATION.md +164 -0
  117. package/docs/README.md +1 -0
  118. package/docs/READ_OUTPUT_CONTRACTS.md +13 -0
  119. package/docs/generated/AGENT_CAPABILITY_ROUTING.md +4 -4
  120. package/docs/generated/AGENT_COMMAND_SURFACE.md +5 -0
  121. package/docs/generated/FLAG_LEXICON_BUDGETS.md +5 -0
  122. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +4 -4
  123. package/marketplace.json +2 -2
  124. package/package.json +4 -4
  125. package/packages/pm-beads/package.json +1 -1
  126. package/packages/pm-calendar/package.json +1 -1
  127. package/packages/pm-command-kit/package.json +1 -1
  128. package/packages/pm-digital-twin/package.json +1 -1
  129. package/packages/pm-governance-audit/README.md +9 -7
  130. package/packages/pm-governance-audit/extensions/governance-audit/index.ts +6 -3
  131. package/packages/pm-governance-audit/package.json +1 -1
  132. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +7 -19
  133. package/packages/pm-guide-shell/package.json +1 -1
  134. package/packages/pm-kanban/package.json +1 -1
  135. package/packages/pm-lifecycle-hooks/package.json +1 -1
  136. package/packages/pm-linked-test-adapters/package.json +1 -1
  137. package/packages/pm-search-advanced/README.md +9 -5
  138. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +3 -2
  139. package/packages/pm-search-advanced/package.json +1 -1
  140. package/packages/pm-templates/package.json +1 -1
  141. package/packages/pm-todos/package.json +1 -1
  142. package/packages/pm-vcs/package.json +1 -1
  143. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  144. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  145. package/dist/cli-bundle/chunks/chunk-74RGSPLL.js +0 -2
  146. package/dist/cli-bundle/chunks/chunk-7WIHZI2M.js +0 -5
  147. package/dist/cli-bundle/chunks/chunk-GLQMKUGP.js +0 -2
  148. package/dist/cli-bundle/chunks/chunk-P6BEYAON.js +0 -8
  149. package/dist/cli-bundle/chunks/chunk-TSWEX72T.js +0 -20
  150. package/dist/cli-bundle/chunks/chunk-YKQTETJI.js +0 -235
  151. package/dist/cli-bundle/focused-chunks/chunk-26O2WB73.js +0 -10
  152. package/dist/cli-bundle/focused-chunks/chunk-B2CMFYRZ.js +0 -2
  153. package/dist/cli-bundle/focused-chunks/chunk-F6WKFXBT.js +0 -8
  154. package/dist/cli-bundle/focused-chunks/chunk-OROZM37I.js +0 -177
  155. package/dist/cli-bundle/focused-chunks/chunk-PNGYYQY7.js +0 -2
  156. package/dist/cli-bundle/focused-chunks/chunk-TPOL4TWE.js +0 -9
  157. package/dist/cli-bundle/focused-chunks/chunk-XSMA2W6Q.js +0 -12
@@ -14,6 +14,7 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
14
14
  | `create` | core | intake |
15
15
  | `item-reopen` | full | lifecycle |
16
16
  | `copy` | full | intake |
17
+ | `item copy` | full | intake |
17
18
  | `focus` | standard | intake |
18
19
  | `context focus` | standard | intake |
19
20
  | `list` | core | context |
@@ -31,6 +32,7 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
31
32
  | `graph` | standard | graph |
32
33
  | `search` | core | context |
33
34
  | `duplicates` | full | context |
35
+ | `item duplicates` | full | context |
34
36
  | `eval` | full | context |
35
37
  | `ops eval` | full | context |
36
38
  | `next` | core | context |
@@ -44,8 +46,11 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
44
46
  | `history repair` | full | evidence |
45
47
  | `history-compact` | full | evidence |
46
48
  | `history compact` | full | evidence |
49
+ | `history-attest` | full | evidence |
50
+ | `history attest` | full | evidence |
47
51
  | `history-author-acknowledge` | full | evidence |
48
52
  | `merge` | full | workspace |
53
+ | `workspace merge` | full | workspace |
49
54
  | `schema` | standard | workspace |
50
55
  | `profile` | standard | workspace |
51
56
  | `activity` | full | context |
@@ -33,6 +33,7 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
33
33
  | `next` | context | 38 | 38 |
34
34
  | `history` | evidence | 35 | 35 |
35
35
  | `events` | evidence | 33 | 33 |
36
+ | `history-attest` | evidence | 23 | 23 |
36
37
  | `history-redact` | evidence | 27 | 27 |
37
38
  | `history-repair` | evidence | 27 | 27 |
38
39
  | `history-compact` | evidence | 30 | 30 |
@@ -74,6 +75,7 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
74
75
  | `event` | automation | 33 | 33 |
75
76
  | `remind` | automation | 29 | 29 |
76
77
  | `test-runs-worker` | internal | 25 | 25 |
78
+ | `history attest` | evidence | 23 | 23 |
77
79
  | `history redact` | evidence | 27 | 27 |
78
80
  | `history repair` | evidence | 27 | 27 |
79
81
  | `history compact` | evidence | 30 | 30 |
@@ -92,3 +94,6 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
92
94
  | `update many` | lifecycle | 146 | 146 |
93
95
  | `close many` | lifecycle | 72 | 72 |
94
96
  | `close delete` | lifecycle | 24 | 24 |
97
+ | `item copy` | intake | 24 | 24 |
98
+ | `workspace merge` | workspace | 27 | 27 |
99
+ | `item duplicates` | context | 25 | 25 |
@@ -11,7 +11,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
11
11
  - Uncovered error codes: 352
12
12
  - Coverage fraction: 0.051213
13
13
  - Closed-domain probes: 19
14
- - Grammar probes: 98
14
+ - Grammar probes: 101
15
15
 
16
16
  | Error code | Canonical code | Disposition | Evidence kinds | Probe count |
17
17
  | --- | --- | --- | --- | --- |
@@ -211,7 +211,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
211
211
  | `missing_parameter_alias` | `missing_parameter_alias` | uncovered | none | 0 |
212
212
  | `missing_positive_execution_receipt` | `missing_positive_execution_receipt` | uncovered | none | 0 |
213
213
  | `missing_probe` | `missing_probe` | uncovered | none | 0 |
214
- | `missing_required_argument` | `missing_required_argument` | executable | grammar | 61 |
214
+ | `missing_required_argument` | `missing_required_argument` | executable | grammar | 63 |
215
215
  | `missing_required_option` | `missing_required_option` | uncovered | none | 0 |
216
216
  | `missing_suggested_retry` | `missing_suggested_retry` | uncovered | none | 0 |
217
217
  | `missing_suggested_retry_args` | `missing_suggested_retry_args` | uncovered | none | 0 |
@@ -313,13 +313,13 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
313
313
  | `unknown_field` | `unknown_field` | uncovered | none | 0 |
314
314
  | `unknown_field_projection` | `unknown_field_projection` | executable | closed_domain | 10 |
315
315
  | `unknown_item_type` | `unknown_item_type` | uncovered | none | 0 |
316
- | `unknown_lifecycle_action` | `unknown_subcommand` | executable | grammar, owned_state | 11 |
316
+ | `unknown_lifecycle_action` | `unknown_subcommand` | executable | grammar, owned_state | 12 |
317
317
  | `unknown_noun` | `unknown_noun` | uncovered | none | 0 |
318
318
  | `unknown_option` | `unknown_option` | executable | owned_state | 1 |
319
319
  | `unknown_plan_template` | `unknown_plan_template` | uncovered | none | 0 |
320
320
  | `unknown_provenance_dimension` | `unknown_provenance_dimension` | uncovered | none | 0 |
321
321
  | `unknown_status` | `unknown_status` | uncovered | none | 0 |
322
- | `unknown_subcommand` | `unknown_subcommand` | executable | grammar, owned_state | 11 |
322
+ | `unknown_subcommand` | `unknown_subcommand` | executable | grammar, owned_state | 12 |
323
323
  | `unsafe_init_recovery` | `unsafe_init_recovery` | uncovered | none | 0 |
324
324
  | `unsupported_update_option` | `unsupported_update_option` | uncovered | none | 0 |
325
325
  | `validate_command_references_stale_pm_ids` | `validate_command_references_stale_pm_ids` | uncovered | none | 0 |
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.9.10"
9
+ "version": "2026.9.11"
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.9.10",
16
+ "version": "2026.9.11",
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.9.10",
3
+ "version": "2026.9.11",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.10.0",
@@ -205,7 +205,7 @@
205
205
  "node": ">=22.18.0"
206
206
  },
207
207
  "dependencies": {
208
- "@sentry/node": "10.73.0",
208
+ "@sentry/node": "10.74.0",
209
209
  "@toon-format/toon": "^4.1.1",
210
210
  "@types/node": ">=22",
211
211
  "commander": "^15.0.0",
@@ -218,7 +218,7 @@
218
218
  "devDependencies": {
219
219
  "@codspeed/vitest-plugin": "^5.7.1",
220
220
  "@eslint/js": "^10.0.1",
221
- "@modelcontextprotocol/ext-apps": "1.7.5",
221
+ "@modelcontextprotocol/ext-apps": "2.0.0",
222
222
  "@sentry/cli": "^3.7.0",
223
223
  "@types/node": "^26.5.0",
224
224
  "@types/npm-package-arg": "^6.1.4",
@@ -230,7 +230,7 @@
230
230
  "fast-check": "^4.9.0",
231
231
  "github-slugger": "2.0.0",
232
232
  "greptile": "^3.5.2",
233
- "jscpd": "^5.1.2",
233
+ "jscpd": "^5.2.0",
234
234
  "marked": "18.0.12",
235
235
  "parse5": "8.0.1",
236
236
  "tsx": "^4.23.13",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-beads",
3
- "version": "2026.9.10",
3
+ "version": "2026.9.11",
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.9.10",
3
+ "version": "2026.9.11",
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.9.10",
3
+ "version": "2026.9.11",
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.9.10",
3
+ "version": "2026.9.11",
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
  # pm-governance-audit
2
2
 
3
- Trackers: [pm-vjk3](../../.agents/pm/features/pm-vjk3.toon), [pm-mp49](../../.agents/pm/issues/pm-mp49.toon), [pm-v657](../../.agents/pm/issues/pm-v657.toon)
3
+ Trackers: [pm-fmy9ih](../../.agents/pm/tasks/pm-fmy9ih.toon), [pm-vjk3](../../.agents/pm/features/pm-vjk3.toon), [pm-mp49](../../.agents/pm/issues/pm-mp49.toon), [pm-v657](../../.agents/pm/issues/pm-v657.toon)
4
4
 
5
5
  First-party package that restores optional governance audit surfaces in bare-core `pm`.
6
6
 
@@ -20,9 +20,9 @@ bodies and full before/after snapshots.
20
20
 
21
21
  ## Commands
22
22
 
23
- - `pm dedupe-audit`
24
- - `pm dedupe-merge`
25
- - `pm comments-audit`
23
+ - `pm item duplicates audit`
24
+ - `pm item duplicates merge`
25
+ - `pm item audit-comments`
26
26
  - `pm ops normalize`
27
27
 
28
28
  The package also augments existing commands with audit-only flags:
@@ -60,9 +60,9 @@ pm install audit --project
60
60
  ## Verify
61
61
 
62
62
  ```bash
63
- pm dedupe-audit --mode parent_scope --status all --limit 20 --json
64
- pm dedupe-merge --keep pm-canonical --close pm-duplicate --dry-run --json
65
- pm comments-audit --latest 3 --limit-items 20 --limit-rows 50 --json
63
+ pm item duplicates audit --mode parent_scope --status all --limit 20 --json
64
+ pm item duplicates merge --keep pm-canonical --close pm-duplicate --dry-run --json
65
+ pm item audit-comments --latest 3 --limit-items 20 --limit-rows 50 --json
66
66
  pm ops normalize --dry-run --json
67
67
  ```
68
68
 
@@ -82,3 +82,5 @@ result. The older `--limit` spelling remains a deprecated alias for
82
82
  `--limit-rows`; do not combine the two row-limit spellings.
83
83
 
84
84
  `pm normalize` remains a compatibility alias for `pm ops normalize`.
85
+
86
+ `dedupe-audit`, `dedupe-merge`, and `comments-audit` remain hidden compatibility aliases. Core `pm item duplicates` discovers bounded candidate clusters; this package adds detailed audit and explicit reconciliation. Comment coverage is an independent item audit, not a duplicate detector. SDK action names remain unchanged.
@@ -321,9 +321,10 @@ const allowAuditCommentFlags = [
321
321
  },
322
322
  ];
323
323
 
324
+ /** Expose duplicate discovery under the item namespace while retaining its stable action and read-only handler. */
324
325
  function dedupeAuditCommand(): CommandDefinition {
325
326
  return {
326
- name: "dedupe-audit",
327
+ name: "item duplicates audit",
327
328
  action: "dedupe-audit",
328
329
  description:
329
330
  "Audit likely duplicate items by title and parent scope heuristics.",
@@ -334,9 +335,10 @@ function dedupeAuditCommand(): CommandDefinition {
334
335
  };
335
336
  }
336
337
 
338
+ /** Declare duplicate consolidation flags and route preview or apply requests to the existing package handler. */
337
339
  function dedupeMergeCommand(): CommandDefinition {
338
340
  return {
339
- name: "dedupe-merge",
341
+ name: "item duplicates merge",
340
342
  action: "dedupe-merge",
341
343
  description:
342
344
  "Consolidate duplicates into a canonical item: re-parent active children and close duplicates with duplicate_of.",
@@ -347,9 +349,10 @@ function dedupeMergeCommand(): CommandDefinition {
347
349
  };
348
350
  }
349
351
 
352
+ /** Register bounded comment-coverage inspection under the item namespace with the existing action identity. */
350
353
  function commentsAuditCommand(): CommandDefinition {
351
354
  return {
352
- name: "comments-audit",
355
+ name: "item audit-comments",
353
356
  action: "comments-audit",
354
357
  description: "Audit item comment coverage and export comment history rows.",
355
358
  intent: "Audit comment coverage and read bounded comment-history evidence.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-governance-audit",
3
- "version": "2026.9.10",
3
+ "version": "2026.9.11",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for governance audit and normalization workflows.",
@@ -20,6 +20,7 @@ import {
20
20
  resolveRuntimeStatusRegistry,
21
21
  runCompletion,
22
22
  runGuide,
23
+ type CompletionRuntimeConfig,
23
24
  type GlobalOptions,
24
25
  type GuideResult,
25
26
  type ItemMetadata,
@@ -93,29 +94,15 @@ function collectStatusNames(
93
94
  .sort((left, right) => left.localeCompare(right));
94
95
  }
95
96
 
96
- async function buildCompletionRuntimeConfig(global: GlobalOptions): Promise<{
97
- item_types?: string[];
98
- statuses?: string[];
99
- command_flags?: Partial<
100
- Record<
101
- | "list"
102
- | "create"
103
- | "update"
104
- | "update-many"
105
- | "close-many"
106
- | "search"
107
- | "calendar"
108
- | "context",
109
- string[]
110
- >
111
- >;
112
- }> {
97
+ /** Resolve configured workflow values and active package paths for completion discovery. */
98
+ async function buildCompletionRuntimeConfig(global: GlobalOptions): Promise<CompletionRuntimeConfig> {
113
99
  const pmRoot = resolvePmRoot(process.cwd(), global.path);
100
+ const registrations = getActiveExtensionRegistrations();
101
+ const namespaceCommands = registrations?.commands.map((entry) => entry.command) ?? [];
114
102
  if (!(await pathExists(getSettingsPath(pmRoot)))) {
115
- return {};
103
+ return { namespace_commands: namespaceCommands };
116
104
  }
117
105
  const settings = await readSettings(pmRoot);
118
- const registrations = getActiveExtensionRegistrations();
119
106
  const typeRegistry = resolveItemTypeRegistry(settings, registrations);
120
107
  const itemTypes = collectTypeNames(typeRegistry);
121
108
  const statuses = collectStatusNames(
@@ -161,6 +148,7 @@ async function buildCompletionRuntimeConfig(global: GlobalOptions): Promise<{
161
148
  }
162
149
  }
163
150
  return {
151
+ namespace_commands: namespaceCommands,
164
152
  item_types: itemTypes.length > 0 ? itemTypes : undefined,
165
153
  statuses: statuses.length > 0 ? statuses : undefined,
166
154
  command_flags:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-guide-shell",
3
- "version": "2026.9.10",
3
+ "version": "2026.9.11",
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.9.10",
3
+ "version": "2026.9.11",
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.9.10",
3
+ "version": "2026.9.11",
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.9.10",
3
+ "version": "2026.9.11",
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,10 +1,12 @@
1
1
  # pm-search-advanced
2
2
 
3
+ Tracker: [pm-wfskfn](../../.agents/pm/tasks/pm-wfskfn.toon).
4
+
3
5
  First-party package that restores optional advanced search surfaces in bare-core `pm`.
4
6
 
5
7
  ## Commands and behavior
6
8
 
7
- - Adds `pm search-advanced` with:
9
+ - Adds `pm search advanced` with:
8
10
  - `--mode keyword|semantic|hybrid`
9
11
  - `--semantic`, `--hybrid`
10
12
  - `--include-linked`
@@ -28,14 +30,14 @@ pm install search-advanced --project
28
30
  ## Verify
29
31
 
30
32
  ```bash
31
- pm search-advanced "vector cache" --mode hybrid --limit 5 --json
32
- pm search-advanced --hybrid "vector cache" --limit 5 --json
33
- pm search-advanced "calendar package" --mode keyword --fields id,title,score --compact --json
33
+ pm search advanced "vector cache" --mode hybrid --limit 5 --json
34
+ pm search advanced --hybrid "vector cache" --limit 5 --json
35
+ pm search advanced "calendar package" --mode keyword --fields id,title,score --compact --json
34
36
  pm ops reindex --mode hybrid --progress --json
35
37
  pm ops reindex --mode keyword --eval --eval-fixtures tests/search-eval/golden-queries.json --json
36
38
  ```
37
39
 
38
- Without `--mode`, `--semantic`, or `--hybrid`, `search-advanced` stays keyword-first for fast agent reads.
40
+ Without `--mode`, `--semantic`, or `--hybrid`, `search advanced` stays keyword-first for fast agent reads.
39
41
 
40
42
  The command registers its shared search options from
41
43
  `SEARCH_EXTENSION_FLAG_DEFINITIONS`, the public SDK authoring adapter over pm's
@@ -78,3 +80,5 @@ Rules:
78
80
  - `min_ndcg_at_5` is optional (`0..1`), default `0.7`.
79
81
 
80
82
  `pm reindex` remains a compatibility alias for `pm ops reindex`.
83
+
84
+ `pm search-advanced` remains a hidden compatibility alias with the stable `search-advanced` SDK action. Use `pm search -- advanced` to search for the literal word `advanced`; place query options before `--`. The search provider remains configurable independently of the command facet.
@@ -155,9 +155,10 @@ const reindexFlags = [
155
155
  },
156
156
  ] as const;
157
157
 
158
+ /** Declare the required query tokens for the search facet while preserving the package's stable dispatch action. */
158
159
  function searchAdvancedCommand(): CommandDefinition {
159
160
  return {
160
- name: "search-advanced",
161
+ name: "search advanced",
161
162
  action: "search-advanced",
162
163
  description:
163
164
  "Enable optional semantic and hybrid search modes via package runtime.",
@@ -190,7 +191,7 @@ function reindexCommand(): CommandDefinition {
190
191
 
191
192
  /** Registers this package's commands, actions, and runtime hooks with the host. */
192
193
  export function activate(api: ExtensionApi): void {
193
- api.registerFlags("search-advanced", [
194
+ api.registerFlags("search advanced", [
194
195
  ...SEARCH_EXTENSION_FLAG_DEFINITIONS,
195
196
  ]);
196
197
  api.registerCommand(searchAdvancedCommand());
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-search-advanced",
3
- "version": "2026.9.10",
3
+ "version": "2026.9.11",
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.9.10",
3
+ "version": "2026.9.11",
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.9.10",
3
+ "version": "2026.9.11",
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.9.10",
3
+ "version": "2026.9.11",
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.9.10",
4
+ "version": "2026.9.11",
5
5
  "author": {
6
6
  "name": "unbrained",
7
7
  "url": "https://github.com/unbraind/pm-cli"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-codex",
3
- "version": "2026.9.10",
3
+ "version": "2026.9.11",
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,2 +0,0 @@
1
- import{H as I,J as _,L as D,M as A,d as k}from"./chunk-7WIHZI2M.js";import{hb as b,ib as v,jb as R}from"./chunk-TSWEX72T.js";import{Eh as u,Eo as w,Fh as p,Kd as C,N as m,P as f,Rk as E,ho as y,ko as h,lo as i}from"./chunk-YKQTETJI.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new t.Error().stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="42878185-8f30-5d0e-bddc-de26b64e3615")}catch{}})();(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new t.Error().stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="c713a4ec-b6a5-5a77-8c53-610dde8a386d")}catch{}})();(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new t.Error().stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="72fad412-7931-5198-a862-d7df2c431945")}catch{}})();(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new t.Error().stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="c44b53b6-4c4d-5830-a4b5-347f509e427f")}catch{}})();(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new t.Error().stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="2bc71c6c-38c9-56e6-87c6-6b4933b4cd07")}catch{}})();function H(t,e){if(typeof t!="string")return;let o=Number.parseInt(t,10);if(!/^\d+$/.test(t.trim())||!Number.isSafeInteger(o))throw new f(`history-compact ${e} must be a non-negative integer.`,m.USAGE);return o}async function T(t,e,o){let r=y(o),n=Date.now(),a=await C(i(e,"ids")),l=a===void 0?void 0:E(a),c=H(e.allOver,"--all-over"),d=H(e.minEntries,"--min-entries");if(e.closed===!0&&e.allStreams===!0)throw new f("history-compact: --closed and --all-streams are mutually exclusive; pick one lifecycle scope.",m.USAGE);let s=e.closed===!0?"closed":e.allStreams===!0?"all-streams":void 0;if((l!==void 0||c!==void 0||s!==void 0)&&typeof e.before=="string")throw new f("history-compact: --before applies only in single-id mode (bulk mode always compacts full streams).",m.USAGE);if(D(t,{ids:l,allOver:c,scope:s}),t!==void 0&&d!==void 0)throw new f("history-compact: --min-entries applies only in bulk mode (single-id mode compacts the named stream).",m.USAGE);if(t===void 0){let g=await A({ids:l,scope:s,allOver:c,minEntries:d,dryRun:e.dryRun===!0,author:i(e,"author"),message:i(e,"message"),force:!!e.force},r);u(g,r),g.totals.items_errored>0&&(process.exitCode=m.GENERIC_FAILURE)}else{let g=await _(t,{before:i(e,"before"),dryRun:e.dryRun===!0,author:i(e,"author"),message:i(e,"message"),force:!!e.force},r);u(g,r)}r.profile&&p(`profile:command=history-compact took_ms=${Date.now()-n}`)}async function x(t,e,o,r){let n=y(r),a=Date.now(),l=await k(t,e,{author:i(o,"author"),message:i(o,"message"),force:!!o.force},n);await w(n,l),u(l,n),n.profile&&p(`profile:command=restore took_ms=${Date.now()-a}`)}function Q(t,e){t.command("restore",{hidden:!e}).summary("Restore a version.").argument("<id>","Item id").argument("<target>","Restore target timestamp or version number").option("--author <value>","Mutation author").option("--message <value>","History message").option("--force","Force ownership/lock override").description("Restore an item to an earlier timestamp or version.").action(x),t.command(e?"redact":"history-redact",{hidden:!e}).summary("Redact sensitive values.").argument("<id>","Item id").option("--literal <value>","Literal string to redact (repeatable)",h).option("--regex <value>","Regex pattern to redact (repeatable; accepts /pattern/flags or raw pattern)",h).option("--replacement <value>",'Replacement string (default: "[redacted]")').option("--dry-run","Preview redaction impact without writing item/history files").option("--author <value>","Mutation author").option("--message <value>","Audit history message for the redaction marker entry").option("--force","Force ownership/lock override").description("Redact sensitive literals/patterns from an item history stream and recompute hashes.").action(async(o,r,n)=>{let a=y(n),l=Date.now(),c=Array.isArray(r.literal)?r.literal:void 0,d=Array.isArray(r.regex)?r.regex:void 0,s=await I(o,{literal:c,regex:d,replacement:i(r,"replacement"),dryRun:r.dryRun===!0,author:i(r,"author"),message:i(r,"message"),force:!!r.force},a);s.changed&&!s.dry_run&&await w(a,s),u(s,a),a.profile&&p(`profile:command=history-redact took_ms=${Date.now()-l}`)}),t.command(e?"repair":"history-repair",{hidden:!e}).summary("Repair drift.").argument("[id]","Item id (omit with --all)").option("--salvage-tail","Recover invalid tail; requires verified prefix").option("--all","Scan every stream for drift and repair each drifted stream in one audited pass").option("--dry-run","Preview the re-anchor impact without writing the history file").option("--normalize-provenance","Remove invalid provenance; return aggregate-only evidence").option("--author <value>","Mutation author").option("--message <value>","Audit history message for the repair marker entry").option("--force","Force ownership/lock override").description("Re-anchor a drifted item history chain (recompute hashes, reconcile with the on-disk item) and record an audit marker. Use --all to repair every drifted stream.").action(async(o,r,n)=>{let a=y(n),l=Date.now(),c=r.all===!0;v(o,c);let d={dryRun:r.dryRun===!0,author:i(r,"author"),message:i(r,"message"),force:!!r.force,normalizeProvenance:r.normalizeProvenance===!0,salvageTail:r.salvageTail===!0};if(c){let s=await R(d,a);u(s,a),s.totals.failed>0&&(process.exitCode=m.GENERIC_FAILURE)}else{let s=await b(o,d,a);u(s,a)}a.profile&&p(`profile:command=history-repair took_ms=${Date.now()-l}`)}),t.command(e?"compact":"history-compact",{hidden:!e}).summary("Compact streams.").argument("[id]","Item id (omit when using a bulk selector)").option("--before <value>","Compact entries strictly before this version number or ISO timestamp (single-id mode only)").option("--ids <value>","Bulk IDs: comma/newline text, - stdin, or @path file").option("--all-over <n>","Bulk: compact every stream with more than N entries").option("--closed","Bulk: compact only closed (terminal) items' streams").option("--all-streams","Bulk: compact every history stream regardless of lifecycle state").option("--min-entries <n>","Bulk: skip streams with at most N entries (already compact; default 3)").option("--dry-run","Preview compaction impact without writing the history file").option("--author <value>","Mutation author").option("--message <value>","Audit history message for the compaction marker entry").option("--force","Force ownership/lock override").description("Compact item history streams into a synthetic baseline plus retained tail entries. Pass an item id for one stream, or a bulk selector (--ids/--all-over/--closed/--all-streams) to compact many.").action(T)}export{Q as a};
2
- //# sourceMappingURL=chunk-74RGSPLL.js.map