@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.
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +31 -11
- package/dist/cli/command-namespaces.d.ts +2 -2
- package/dist/cli/command-namespaces.js +1 -1
- package/dist/cli/extension-command-help.js +3 -3
- package/dist/cli/main.d.ts +4 -0
- package/dist/cli/main.js +2 -2
- package/dist/cli/register-history-maintenance.js +2 -1
- package/dist/cli/register-list-query.js +2 -2
- package/dist/cli-bundle/bundle-manifest.json +147 -155
- package/dist/cli-bundle/chunks/{chunk-EOCKPCEY.js → chunk-BN5QVWNY.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-DAWH7TGV.js +3 -0
- package/dist/cli-bundle/chunks/chunk-FBY6PEIR.js +20 -0
- package/dist/cli-bundle/chunks/chunk-IRUNFLLG.js +2 -0
- package/dist/cli-bundle/chunks/chunk-JMQKJ7CJ.js +8 -0
- package/dist/cli-bundle/chunks/{chunk-I6XT3DLQ.js → chunk-QER6OSOP.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-RJQSCK74.js +6 -0
- package/dist/cli-bundle/chunks/chunk-RJZFAXBW.js +235 -0
- package/dist/cli-bundle/chunks/{chunk-MACGGTLQ.js → chunk-SGAKQIGQ.js} +29 -29
- package/dist/cli-bundle/chunks/{chunk-NKOYVKFM.js → chunk-TDKWJQD7.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4SFBH77G.js → chunk-TFVKBJJ4.js} +164 -150
- package/dist/cli-bundle/chunks/{chunk-PYUITRSV.js → chunk-VFKBNGF6.js} +2 -2
- package/dist/cli-bundle/chunks/{register-list-query-CUIW7SSE.js → register-list-query-U6MY437C.js} +6 -6
- package/dist/cli-bundle/chunks/{register-mutation-5F5CYUWZ.js → register-mutation-HAPHD4S7.js} +2 -2
- package/dist/cli-bundle/chunks/{register-operations-XIZPLPQY.js → register-operations-EHWIZW3X.js} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-JVGPCAIL.js → register-setup-BZYL3HBL.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-ZJHYQOTM.js → chunk-3JVTLBCW.js} +4 -4
- package/dist/cli-bundle/focused-chunks/chunk-6JF66HAG.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-SL5YVVPV.js → chunk-7WISPJRZ.js} +53 -52
- package/dist/cli-bundle/focused-chunks/chunk-BEQAW7OT.js +12 -0
- package/dist/cli-bundle/focused-chunks/{chunk-CRY5MHEI.js → chunk-DZ3ATEFS.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-FHUARRMA.js → chunk-FJDEFA64.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-7N5MRONP.js → chunk-GKUF7TM5.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-U5SHHU7E.js → chunk-HM6JS6Q3.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-M74YW332.js +164 -0
- package/dist/cli-bundle/focused-chunks/{chunk-ZDNAWWQI.js → chunk-MOT32PR2.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-ONDKO4EL.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-M36SF4GE.js → chunk-TGMSSI3Z.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-TWE3GPQM.js +30 -0
- package/dist/cli-bundle/focused-chunks/chunk-UJCQXUD2.js +8 -0
- package/dist/cli-bundle/focused-chunks/{chunk-ZAWAL2CG.js → chunk-VS6MR2HT.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-5YU75QLV.js → chunk-YOPNRWSX.js} +2 -2
- package/dist/cli-bundle/main.js +21 -21
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +2 -2
- package/dist/cli-bundle/sdk-core.js +37 -37
- package/dist/cli-bundle/sdk-governance.js +1 -1
- package/dist/cli-bundle/sdk-graph.js +1 -1
- package/dist/cli-bundle/sdk-merge.js +42 -42
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +10 -10
- package/dist/core/history/digest.d.ts +12 -0
- package/dist/core/history/digest.js +2 -0
- package/dist/core/history/drift-scan.js +1 -1
- package/dist/core/history/history.d.ts +5 -3
- package/dist/core/history/history.js +2 -2
- package/dist/core/history/replay.d.ts +3 -2
- package/dist/core/history/replay.js +1 -1
- package/dist/core/telemetry/runtime.d.ts +1 -0
- package/dist/core/telemetry/runtime.js +2 -2
- package/dist/sdk/agent/command-recovery.js +1 -1
- package/dist/sdk/agent/item-addressing.js +1 -1
- package/dist/sdk/agent/refusal-corpus-contracts.js +1 -1
- package/dist/sdk/agent-capability-contracts.js +1 -1
- package/dist/sdk/cli-bootstrap.d.ts +2 -1
- package/dist/sdk/cli-bootstrap.js +1 -1
- package/dist/sdk/cli-contracts/command-aliases.d.ts +2 -0
- package/dist/sdk/cli-contracts/command-aliases.js +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
- package/dist/sdk/cli-contracts/tool-schema.d.ts +2 -2
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1
- package/dist/sdk/cli-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts.js +1 -1
- package/dist/sdk/completion.d.ts +2 -0
- package/dist/sdk/completion.js +26 -14
- package/dist/sdk/contracts.d.ts +1 -0
- package/dist/sdk/contracts.js +1 -1
- package/dist/sdk/governance.d.ts +3 -0
- package/dist/sdk/governance.js +1 -1
- package/dist/sdk/history/attestation-command.d.ts +22 -0
- package/dist/sdk/history/attestation-command.js +3 -0
- package/dist/sdk/history/attestation-contract.d.ts +103 -0
- package/dist/sdk/history/attestation-contract.js +2 -0
- package/dist/sdk/history/attestation-scan.d.ts +16 -0
- package/dist/sdk/history/attestation-scan.js +2 -0
- package/dist/sdk/history/attestation.d.ts +8 -0
- package/dist/sdk/history/attestation.js +2 -0
- package/dist/sdk/history/salvage.js +1 -1
- package/dist/sdk/history-compact.js +1 -1
- package/dist/sdk/history-read.js +1 -1
- package/dist/sdk/history-redact.js +1 -1
- package/dist/sdk/history-repair.js +1 -1
- package/dist/sdk/index.d.ts +2 -1
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/read-output-budget.d.ts +4 -10
- package/dist/sdk/read-output-budget.js +1 -1
- package/dist/sdk/read-output-contracts.d.ts +1 -1
- package/dist/sdk/read-output-contracts.js +1 -1
- package/dist/sdk/read-output-session.d.ts +1 -1
- package/dist/sdk/read-output-session.js +1 -1
- package/dist/sdk/runtime-input.js +1 -1
- package/dist/sdk/runtime.d.ts +3 -0
- package/dist/sdk/runtime.js +1 -1
- package/dist/types.d.ts +5 -1
- package/dist/types.js +1 -1
- package/docs/CLI_GRAMMAR.md +23 -0
- package/docs/HISTORY_ATTESTATION.md +164 -0
- package/docs/README.md +1 -0
- package/docs/READ_OUTPUT_CONTRACTS.md +13 -0
- package/docs/generated/AGENT_CAPABILITY_ROUTING.md +4 -4
- package/docs/generated/AGENT_COMMAND_SURFACE.md +5 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +5 -0
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +4 -4
- package/marketplace.json +2 -2
- package/package.json +4 -4
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/README.md +9 -7
- package/packages/pm-governance-audit/extensions/governance-audit/index.ts +6 -3
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +7 -19
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/README.md +9 -5
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +3 -2
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/dist/cli-bundle/chunks/chunk-74RGSPLL.js +0 -2
- package/dist/cli-bundle/chunks/chunk-7WIHZI2M.js +0 -5
- package/dist/cli-bundle/chunks/chunk-GLQMKUGP.js +0 -2
- package/dist/cli-bundle/chunks/chunk-P6BEYAON.js +0 -8
- package/dist/cli-bundle/chunks/chunk-TSWEX72T.js +0 -20
- package/dist/cli-bundle/chunks/chunk-YKQTETJI.js +0 -235
- package/dist/cli-bundle/focused-chunks/chunk-26O2WB73.js +0 -10
- package/dist/cli-bundle/focused-chunks/chunk-B2CMFYRZ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-F6WKFXBT.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-OROZM37I.js +0 -177
- package/dist/cli-bundle/focused-chunks/chunk-PNGYYQY7.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-TPOL4TWE.js +0 -9
- 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:
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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": "
|
|
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.
|
|
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-digital-twin",
|
|
3
|
-
"version": "2026.9.
|
|
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
|
|
24
|
-
- `pm
|
|
25
|
-
- `pm comments
|
|
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
|
|
64
|
-
pm
|
|
65
|
-
pm comments
|
|
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: "
|
|
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: "
|
|
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
|
|
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.",
|
|
@@ -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
|
-
|
|
97
|
-
|
|
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,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
|
|
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
|
|
32
|
-
pm search
|
|
33
|
-
pm search
|
|
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
|
|
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
|
|
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
|
|
194
|
+
api.registerFlags("search advanced", [
|
|
194
195
|
...SEARCH_EXTENSION_FLAG_DEFINITIONS,
|
|
195
196
|
]);
|
|
196
197
|
api.registerCommand(searchAdvancedCommand());
|
|
@@ -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.
|
|
4
|
+
"version": "2026.9.11",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "unbrained",
|
|
7
7
|
"url": "https://github.com/unbraind/pm-cli"
|
|
@@ -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
|