@unbrained/pm-cli 2026.9.9 → 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 (184) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +48 -11
  3. package/dist/cli/command-namespaces.d.ts +9 -0
  4. package/dist/cli/command-namespaces.js +2 -0
  5. package/dist/cli/extension-command-help.js +3 -3
  6. package/dist/cli/help-content.js +1 -1
  7. package/dist/cli/help-json-payload.d.ts +5 -1
  8. package/dist/cli/help-json-payload.js +2 -2
  9. package/dist/cli/main.d.ts +5 -0
  10. package/dist/cli/main.js +3 -3
  11. package/dist/cli/register-history-maintenance.js +2 -1
  12. package/dist/cli/register-list-query.js +2 -2
  13. package/dist/cli/register-mutation.js +2 -2
  14. package/dist/cli/register-operations.d.ts +0 -5
  15. package/dist/cli/register-operations.js +1 -1
  16. package/dist/cli-bundle/bundle-manifest.json +154 -162
  17. package/dist/cli-bundle/chunks/{chunk-L5RCDKQ2.js → chunk-BN5QVWNY.js} +2 -2
  18. package/dist/cli-bundle/chunks/chunk-DAWH7TGV.js +3 -0
  19. package/dist/cli-bundle/chunks/chunk-FBY6PEIR.js +20 -0
  20. package/dist/cli-bundle/chunks/chunk-IRUNFLLG.js +2 -0
  21. package/dist/cli-bundle/chunks/chunk-JMQKJ7CJ.js +8 -0
  22. package/dist/cli-bundle/chunks/{chunk-OHNLSGGV.js → chunk-QER6OSOP.js} +2 -2
  23. package/dist/cli-bundle/chunks/chunk-RJQSCK74.js +6 -0
  24. package/dist/cli-bundle/chunks/chunk-RJZFAXBW.js +235 -0
  25. package/dist/cli-bundle/chunks/chunk-SGAKQIGQ.js +29 -0
  26. package/dist/cli-bundle/chunks/chunk-T3AMFUCN.js +2 -0
  27. package/dist/cli-bundle/chunks/{chunk-ECBLPN7B.js → chunk-TDKWJQD7.js} +2 -2
  28. package/dist/cli-bundle/chunks/chunk-TFVKBJJ4.js +2247 -0
  29. package/dist/cli-bundle/chunks/{chunk-3IPRM75M.js → chunk-VFKBNGF6.js} +2 -2
  30. package/dist/cli-bundle/chunks/{register-list-query-UIHRCS6D.js → register-list-query-U6MY437C.js} +6 -6
  31. package/dist/cli-bundle/chunks/register-mutation-HAPHD4S7.js +20 -0
  32. package/dist/cli-bundle/chunks/register-operations-EHWIZW3X.js +2 -0
  33. package/dist/cli-bundle/chunks/{register-setup-PERI45EM.js → register-setup-BZYL3HBL.js} +2 -2
  34. package/dist/cli-bundle/focused-chunks/{chunk-YJUXGS57.js → chunk-3JVTLBCW.js} +4 -4
  35. package/dist/cli-bundle/focused-chunks/chunk-6JF66HAG.js +2 -0
  36. package/dist/cli-bundle/focused-chunks/{chunk-ZTCE4UO6.js → chunk-7WISPJRZ.js} +53 -52
  37. package/dist/cli-bundle/focused-chunks/chunk-BEQAW7OT.js +12 -0
  38. package/dist/cli-bundle/focused-chunks/{chunk-PNKIANFZ.js → chunk-DZ3ATEFS.js} +2 -2
  39. package/dist/cli-bundle/focused-chunks/{chunk-BUCJUZVG.js → chunk-FJDEFA64.js} +2 -2
  40. package/dist/cli-bundle/focused-chunks/{chunk-QQQ4SAUO.js → chunk-GKUF7TM5.js} +2 -2
  41. package/dist/cli-bundle/focused-chunks/{chunk-7PC4R5QB.js → chunk-HM6JS6Q3.js} +2 -2
  42. package/dist/cli-bundle/focused-chunks/chunk-M74YW332.js +164 -0
  43. package/dist/cli-bundle/focused-chunks/{chunk-7N6DOREF.js → chunk-MOT32PR2.js} +2 -2
  44. package/dist/cli-bundle/focused-chunks/chunk-ONDKO4EL.js +2 -0
  45. package/dist/cli-bundle/focused-chunks/{chunk-5FHTCOHS.js → chunk-TGMSSI3Z.js} +2 -2
  46. package/dist/cli-bundle/focused-chunks/chunk-TWE3GPQM.js +30 -0
  47. package/dist/cli-bundle/focused-chunks/chunk-UJCQXUD2.js +8 -0
  48. package/dist/cli-bundle/focused-chunks/chunk-VS6MR2HT.js +2 -0
  49. package/dist/cli-bundle/focused-chunks/chunk-YOPNRWSX.js +2 -0
  50. package/dist/cli-bundle/main.js +26 -26
  51. package/dist/cli-bundle/sdk-authoring.js +1 -1
  52. package/dist/cli-bundle/sdk-contracts.js +2 -2
  53. package/dist/cli-bundle/sdk-core.js +37 -37
  54. package/dist/cli-bundle/sdk-governance.js +1 -1
  55. package/dist/cli-bundle/sdk-graph.js +1 -1
  56. package/dist/cli-bundle/sdk-merge.js +42 -42
  57. package/dist/cli-bundle/sdk-query.js +1 -1
  58. package/dist/cli-bundle/sdk-runtime.js +1 -1
  59. package/dist/cli-bundle/sdk-testing.js +1 -1
  60. package/dist/cli-bundle/sdk.js +10 -10
  61. package/dist/core/history/digest.d.ts +12 -0
  62. package/dist/core/history/digest.js +2 -0
  63. package/dist/core/history/drift-scan.js +1 -1
  64. package/dist/core/history/history.d.ts +5 -3
  65. package/dist/core/history/history.js +2 -2
  66. package/dist/core/history/replay.d.ts +3 -2
  67. package/dist/core/history/replay.js +1 -1
  68. package/dist/core/telemetry/runtime.d.ts +1 -0
  69. package/dist/core/telemetry/runtime.js +2 -2
  70. package/dist/sdk/agent/command-recovery.js +1 -1
  71. package/dist/sdk/agent/item-addressing.js +1 -1
  72. package/dist/sdk/agent/refusal-corpus-contracts.js +1 -1
  73. package/dist/sdk/agent-capability-contracts.js +1 -1
  74. package/dist/sdk/cli-bootstrap.d.ts +2 -1
  75. package/dist/sdk/cli-bootstrap.js +1 -1
  76. package/dist/sdk/cli-contracts/command-aliases.d.ts +13 -1
  77. package/dist/sdk/cli-contracts/command-aliases.js +1 -1
  78. package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
  79. package/dist/sdk/cli-contracts/enum-contracts.js +1 -1
  80. package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
  81. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
  82. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
  83. package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
  84. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +4 -1
  85. package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
  86. package/dist/sdk/cli-contracts/tool-schema.d.ts +3 -3
  87. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  88. package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +2 -0
  89. package/dist/sdk/cli-contracts.d.ts +1 -1
  90. package/dist/sdk/cli-contracts.js +1 -1
  91. package/dist/sdk/completion.d.ts +2 -0
  92. package/dist/sdk/completion.js +375 -350
  93. package/dist/sdk/contracts.d.ts +1 -0
  94. package/dist/sdk/contracts.js +1 -1
  95. package/dist/sdk/governance.d.ts +3 -0
  96. package/dist/sdk/governance.js +1 -1
  97. package/dist/sdk/history/attestation-command.d.ts +22 -0
  98. package/dist/sdk/history/attestation-command.js +3 -0
  99. package/dist/sdk/history/attestation-contract.d.ts +103 -0
  100. package/dist/sdk/history/attestation-contract.js +2 -0
  101. package/dist/sdk/history/attestation-scan.d.ts +16 -0
  102. package/dist/sdk/history/attestation-scan.js +2 -0
  103. package/dist/sdk/history/attestation.d.ts +8 -0
  104. package/dist/sdk/history/attestation.js +2 -0
  105. package/dist/sdk/history/salvage.js +1 -1
  106. package/dist/sdk/history-compact.js +1 -1
  107. package/dist/sdk/history-read.js +1 -1
  108. package/dist/sdk/history-redact.js +1 -1
  109. package/dist/sdk/history-repair.js +1 -1
  110. package/dist/sdk/index.d.ts +3 -1
  111. package/dist/sdk/index.js +1 -1
  112. package/dist/sdk/lifecycle/claim.js +1 -1
  113. package/dist/sdk/lifecycle/lifecycle-transitions.d.ts +1 -1
  114. package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -1
  115. package/dist/sdk/lifecycle/mcp-actions.js +1 -1
  116. package/dist/sdk/lifecycle/task-composition.d.ts +17 -0
  117. package/dist/sdk/lifecycle/task-composition.js +2 -0
  118. package/dist/sdk/public-surface.json +1 -1
  119. package/dist/sdk/query/workspace-contracts.d.ts +3 -0
  120. package/dist/sdk/query/workspace-contracts.js +2 -0
  121. package/dist/sdk/read-output-budget.d.ts +4 -10
  122. package/dist/sdk/read-output-budget.js +1 -1
  123. package/dist/sdk/read-output-contracts.d.ts +1 -1
  124. package/dist/sdk/read-output-contracts.js +1 -1
  125. package/dist/sdk/read-output-session.d.ts +1 -1
  126. package/dist/sdk/read-output-session.js +1 -1
  127. package/dist/sdk/runtime-input.js +1 -1
  128. package/dist/sdk/runtime.d.ts +72 -9
  129. package/dist/sdk/runtime.js +1 -1
  130. package/dist/types.d.ts +5 -1
  131. package/dist/types.js +1 -1
  132. package/docs/CLI_GRAMMAR.md +23 -0
  133. package/docs/COMMANDS.md +26 -24
  134. package/docs/COMMAND_NAMESPACES.md +65 -0
  135. package/docs/HISTORY_ATTESTATION.md +164 -0
  136. package/docs/LIFECYCLE_COMMANDS.md +77 -0
  137. package/docs/README.md +3 -0
  138. package/docs/READ_OUTPUT_CONTRACTS.md +13 -0
  139. package/docs/generated/AGENT_CAPABILITY_ROUTING.md +6 -6
  140. package/docs/generated/AGENT_COMMAND_SURFACE.md +24 -0
  141. package/docs/generated/FLAG_LEXICON_BUDGETS.md +26 -3
  142. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +4 -4
  143. package/marketplace.json +2 -2
  144. package/package.json +4 -4
  145. package/packages/pm-beads/package.json +1 -1
  146. package/packages/pm-calendar/package.json +1 -1
  147. package/packages/pm-command-kit/package.json +1 -1
  148. package/packages/pm-digital-twin/package.json +1 -1
  149. package/packages/pm-governance-audit/README.md +13 -9
  150. package/packages/pm-governance-audit/extensions/governance-audit/index.ts +6 -3
  151. package/packages/pm-governance-audit/package.json +1 -1
  152. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +7 -19
  153. package/packages/pm-guide-shell/package.json +1 -1
  154. package/packages/pm-kanban/package.json +1 -1
  155. package/packages/pm-lifecycle-hooks/package.json +1 -1
  156. package/packages/pm-linked-test-adapters/package.json +1 -1
  157. package/packages/pm-search-advanced/README.md +15 -9
  158. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +3 -2
  159. package/packages/pm-search-advanced/package.json +1 -1
  160. package/packages/pm-templates/package.json +1 -1
  161. package/packages/pm-todos/package.json +1 -1
  162. package/packages/pm-vcs/package.json +1 -1
  163. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  164. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  165. package/dist/cli-bundle/chunks/chunk-4VL5P22L.js +0 -2
  166. package/dist/cli-bundle/chunks/chunk-AAFBV3U3.js +0 -29
  167. package/dist/cli-bundle/chunks/chunk-D3YVILJJ.js +0 -20
  168. package/dist/cli-bundle/chunks/chunk-J6ERHBV2.js +0 -235
  169. package/dist/cli-bundle/chunks/chunk-JUNJ5EKI.js +0 -2
  170. package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +0 -2
  171. package/dist/cli-bundle/chunks/chunk-WQKMSFBV.js +0 -5
  172. package/dist/cli-bundle/chunks/chunk-XZ6T7YPP.js +0 -2217
  173. package/dist/cli-bundle/chunks/chunk-Z3XVXUVF.js +0 -8
  174. package/dist/cli-bundle/chunks/register-mutation-WHWMGRVX.js +0 -20
  175. package/dist/cli-bundle/chunks/register-operations-64YZYTC5.js +0 -2
  176. package/dist/cli-bundle/focused-chunks/chunk-2W4XIYOB.js +0 -2
  177. package/dist/cli-bundle/focused-chunks/chunk-2WSBXIGF.js +0 -12
  178. package/dist/cli-bundle/focused-chunks/chunk-FE3BABLJ.js +0 -2
  179. package/dist/cli-bundle/focused-chunks/chunk-IWITF53W.js +0 -2
  180. package/dist/cli-bundle/focused-chunks/chunk-OQUGRHKV.js +0 -10
  181. package/dist/cli-bundle/focused-chunks/chunk-TTYXF5YD.js +0 -177
  182. package/dist/cli-bundle/focused-chunks/chunk-XNR3DM6J.js +0 -2
  183. package/dist/cli-bundle/focused-chunks/chunk-XSS3APUF.js +0 -9
  184. package/dist/cli-bundle/focused-chunks/chunk-YCDQ2N23.js +0 -8
@@ -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,10 +20,10 @@ 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`
26
- - `pm normalize`
23
+ - `pm item duplicates audit`
24
+ - `pm item duplicates merge`
25
+ - `pm item audit-comments`
26
+ - `pm ops normalize`
27
27
 
28
28
  The package also augments existing commands with audit-only flags:
29
29
 
@@ -60,10 +60,10 @@ 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
66
- pm normalize --dry-run --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
+ pm ops normalize --dry-run --json
67
67
  ```
68
68
 
69
69
  `dedupe-audit --status all` explicitly selects every status and is equivalent
@@ -80,3 +80,7 @@ For `comments-audit`, `--limit-items` caps item
80
80
  scanning while `--limit-rows` caps emitted comment rows across the whole
81
81
  result. The older `--limit` spelling remains a deprecated alias for
82
82
  `--limit-rows`; do not combine the two row-limit spellings.
83
+
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.9",
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.9",
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.9",
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.9",
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.9",
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`
@@ -13,7 +15,7 @@ First-party package that restores optional advanced search surfaces in bare-core
13
15
  - `--type`, `--tag`, `--priority`
14
16
  - `--deadline-before`, `--deadline-after`
15
17
  - `--limit`, `--fields`, `--compact`, `--full`
16
- - Adds `pm reindex` with:
18
+ - Adds `pm ops reindex` with:
17
19
  - `--mode keyword|semantic|hybrid`
18
20
  - `--progress`
19
21
  - `--eval`
@@ -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
34
- pm reindex --mode hybrid --progress --json
35
- pm reindex --mode keyword --eval --eval-fixtures tests/search-eval/golden-queries.json --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
36
+ pm ops reindex --mode hybrid --progress --json
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
@@ -44,7 +46,7 @@ lockstep with the core CLI without a copied flag table.
44
46
 
45
47
  ## Reindex eval harness
46
48
 
47
- `pm reindex --eval` runs a golden-query relevance harness after the reindex pass and appends a deterministic `eval` object to JSON output:
49
+ `pm ops reindex --eval` runs a golden-query relevance harness after the reindex pass and appends a deterministic `eval` object to JSON output:
48
50
 
49
51
  - per-fixture pass/fail verdicts
50
52
  - `ndcg_at_5` score for each fixture
@@ -76,3 +78,7 @@ Rules:
76
78
  - `mode` is optional (`keyword`, `semantic`, `hybrid`), default `keyword`.
77
79
  - `expected_top_ids` is required and defines the ideal ranking for nDCG@5.
78
80
  - `min_ndcg_at_5` is optional (`0..1`), default `0.7`.
81
+
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.9",
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.9",
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.9",
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.9",
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.9",
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.9",
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-WQKMSFBV.js";import{hb as b,ib as v,jb as R}from"./chunk-D3YVILJJ.js";import{Ah as p,Fd as C,I as m,K as f,Mk as E,co as y,fo as h,go as i,zh as u,zo as w}from"./chunk-J6ERHBV2.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-4VL5P22L.js.map