@unbrained/pm-cli 2026.9.8 → 2026.9.10

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 (183) hide show
  1. package/.agents/skills/pm-user/SKILL.md +2 -2
  2. package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +1 -1
  3. package/.claude-plugin/marketplace.json +2 -2
  4. package/CHANGELOG.md +38 -2
  5. package/dist/cli/command-namespaces.d.ts +9 -0
  6. package/dist/cli/command-namespaces.js +2 -0
  7. package/dist/cli/help-content.js +1 -1
  8. package/dist/cli/help-json-payload.d.ts +5 -1
  9. package/dist/cli/help-json-payload.js +2 -2
  10. package/dist/cli/main.d.ts +1 -0
  11. package/dist/cli/main.js +3 -3
  12. package/dist/cli/register-list-query.js +4 -4
  13. package/dist/cli/register-mutation.d.ts +0 -5
  14. package/dist/cli/register-mutation.js +2 -2
  15. package/dist/cli/register-operations.d.ts +0 -5
  16. package/dist/cli/register-operations.js +1 -1
  17. package/dist/cli-bundle/bundle-manifest.json +154 -154
  18. package/dist/cli-bundle/chunks/chunk-4SFBH77G.js +2233 -0
  19. package/dist/cli-bundle/chunks/{chunk-LEZOUXG6.js → chunk-74RGSPLL.js} +2 -2
  20. package/dist/cli-bundle/chunks/chunk-7WIHZI2M.js +5 -0
  21. package/dist/cli-bundle/chunks/{chunk-JAAEYHUA.js → chunk-EOCKPCEY.js} +2 -2
  22. package/dist/cli-bundle/chunks/chunk-GLQMKUGP.js +2 -0
  23. package/dist/cli-bundle/chunks/{chunk-FLDWYEND.js → chunk-I6XT3DLQ.js} +62 -60
  24. package/dist/cli-bundle/chunks/chunk-MACGGTLQ.js +29 -0
  25. package/dist/cli-bundle/chunks/chunk-NKOYVKFM.js +3 -0
  26. package/dist/cli-bundle/chunks/{chunk-YVEQ2AMO.js → chunk-P6BEYAON.js} +2 -2
  27. package/dist/cli-bundle/chunks/{chunk-G5ADGQ2D.js → chunk-PYUITRSV.js} +2 -2
  28. package/dist/cli-bundle/chunks/chunk-T3AMFUCN.js +2 -0
  29. package/dist/cli-bundle/chunks/{chunk-XOD2PCB6.js → chunk-TSWEX72T.js} +2 -2
  30. package/dist/cli-bundle/chunks/chunk-YKQTETJI.js +235 -0
  31. package/dist/cli-bundle/chunks/{register-list-query-KSK3R63M.js → register-list-query-CUIW7SSE.js} +7 -7
  32. package/dist/cli-bundle/chunks/register-mutation-5F5CYUWZ.js +20 -0
  33. package/dist/cli-bundle/chunks/register-operations-XIZPLPQY.js +2 -0
  34. package/dist/cli-bundle/chunks/{register-setup-BQ5SVD4B.js → register-setup-JVGPCAIL.js} +2 -2
  35. package/dist/cli-bundle/focused-chunks/{chunk-RXT4P5QH.js → chunk-26O2WB73.js} +2 -2
  36. package/dist/cli-bundle/focused-chunks/chunk-5YU75QLV.js +2 -0
  37. package/dist/cli-bundle/focused-chunks/{chunk-EE5QSM4Z.js → chunk-7N5MRONP.js} +2 -2
  38. package/dist/cli-bundle/focused-chunks/chunk-B2CMFYRZ.js +2 -0
  39. package/dist/cli-bundle/focused-chunks/{chunk-OPFHFGDD.js → chunk-CRY5MHEI.js} +2 -2
  40. package/dist/cli-bundle/focused-chunks/{chunk-COPBO5HW.js → chunk-F6WKFXBT.js} +2 -2
  41. package/dist/cli-bundle/focused-chunks/{chunk-HJVARYM3.js → chunk-FHUARRMA.js} +2 -2
  42. package/dist/cli-bundle/focused-chunks/{chunk-3WRPWLA7.js → chunk-M36SF4GE.js} +2 -2
  43. package/dist/cli-bundle/focused-chunks/chunk-OROZM37I.js +177 -0
  44. package/dist/cli-bundle/focused-chunks/{chunk-7MBUII7U.js → chunk-PNGYYQY7.js} +2 -2
  45. package/dist/cli-bundle/focused-chunks/chunk-SL5YVVPV.js +58 -0
  46. package/dist/cli-bundle/focused-chunks/chunk-TPOL4TWE.js +9 -0
  47. package/dist/cli-bundle/focused-chunks/{chunk-RMWES4M6.js → chunk-U5SHHU7E.js} +2 -2
  48. package/dist/cli-bundle/focused-chunks/chunk-XSMA2W6Q.js +12 -0
  49. package/dist/cli-bundle/focused-chunks/chunk-ZAWAL2CG.js +2 -0
  50. package/dist/cli-bundle/focused-chunks/chunk-ZDNAWWQI.js +26 -0
  51. package/dist/cli-bundle/focused-chunks/{chunk-DUN4IXYN.js → chunk-ZJHYQOTM.js} +2 -2
  52. package/dist/cli-bundle/main.js +26 -26
  53. package/dist/cli-bundle/sdk-authoring.js +1 -1
  54. package/dist/cli-bundle/sdk-contracts.js +2 -2
  55. package/dist/cli-bundle/sdk-core.js +29 -29
  56. package/dist/cli-bundle/sdk-governance.js +1 -1
  57. package/dist/cli-bundle/sdk-graph.js +1 -1
  58. package/dist/cli-bundle/sdk-merge.js +42 -42
  59. package/dist/cli-bundle/sdk-query.js +1 -1
  60. package/dist/cli-bundle/sdk-runtime.js +1 -1
  61. package/dist/cli-bundle/sdk-testing.js +1 -1
  62. package/dist/cli-bundle/sdk.js +10 -10
  63. package/dist/core/config/nested-settings.js +1 -1
  64. package/dist/core/policy/workflow-policy-schema.d.ts +312 -0
  65. package/dist/core/policy/workflow-policy-schema.js +2 -0
  66. package/dist/core/policy/workflow-policy-store.d.ts +24 -0
  67. package/dist/core/policy/workflow-policy-store.js +2 -0
  68. package/dist/core/policy/workflow-policy.d.ts +139 -0
  69. package/dist/core/policy/workflow-policy.js +2 -0
  70. package/dist/core/shared/constants.js +1 -1
  71. package/dist/core/store/item-store.js +1 -1
  72. package/dist/core/store/settings-validator.d.ts +1 -0
  73. package/dist/core/store/settings-validator.js +1 -1
  74. package/dist/core/store/settings.js +1 -1
  75. package/dist/mcp/tool-definitions.js +1 -1
  76. package/dist/sdk/agent/item-addressing.js +1 -1
  77. package/dist/sdk/agent-capability-contracts.js +1 -1
  78. package/dist/sdk/cli-bootstrap.js +1 -1
  79. package/dist/sdk/cli-contracts/command-aliases.d.ts +11 -1
  80. package/dist/sdk/cli-contracts/command-aliases.js +1 -1
  81. package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
  82. package/dist/sdk/cli-contracts/enum-contracts.js +1 -1
  83. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
  84. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
  85. package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
  86. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +4 -1
  87. package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
  88. package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
  89. package/dist/sdk/cli-contracts/tool-schema.d.ts +3 -3
  90. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  91. package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +2 -0
  92. package/dist/sdk/cli-contracts.d.ts +1 -1
  93. package/dist/sdk/cli-contracts.js +1 -1
  94. package/dist/sdk/completion.js +375 -347
  95. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  96. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  97. package/dist/sdk/governance/validate.d.ts +3 -1
  98. package/dist/sdk/governance/validate.js +1 -1
  99. package/dist/sdk/governance/workflow-completeness.d.ts +32 -0
  100. package/dist/sdk/governance/workflow-completeness.js +2 -0
  101. package/dist/sdk/governance/workflow-policy.d.ts +47 -0
  102. package/dist/sdk/governance/workflow-policy.js +4 -0
  103. package/dist/sdk/governance.d.ts +1 -0
  104. package/dist/sdk/governance.js +1 -1
  105. package/dist/sdk/index.d.ts +2 -2
  106. package/dist/sdk/index.js +1 -1
  107. package/dist/sdk/lifecycle/claim.js +1 -1
  108. package/dist/sdk/lifecycle/create.js +1 -1
  109. package/dist/sdk/lifecycle/lifecycle-transitions.d.ts +1 -1
  110. package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -1
  111. package/dist/sdk/lifecycle/mcp-actions.js +1 -1
  112. package/dist/sdk/lifecycle/recurrence-parsers.d.ts +1 -1
  113. package/dist/sdk/lifecycle/recurrence-parsers.js +1 -1
  114. package/dist/sdk/lifecycle/restore.js +1 -1
  115. package/dist/sdk/lifecycle/task-composition.d.ts +17 -0
  116. package/dist/sdk/lifecycle/task-composition.js +2 -0
  117. package/dist/sdk/lifecycle/update.js +1 -1
  118. package/dist/sdk/package-import-adapters.js +1 -1
  119. package/dist/sdk/public-surface.json +1 -1
  120. package/dist/sdk/query/search-contracts.d.ts +27 -0
  121. package/dist/sdk/query/search-contracts.js +1 -1
  122. package/dist/sdk/query/search.d.ts +6 -4
  123. package/dist/sdk/query/search.js +2 -2
  124. package/dist/sdk/query/workspace-contracts.d.ts +3 -0
  125. package/dist/sdk/query/workspace-contracts.js +2 -0
  126. package/dist/sdk/read-output-contracts.d.ts +1 -1
  127. package/dist/sdk/read-output-contracts.js +1 -1
  128. package/dist/sdk/runtime-input.js +1 -1
  129. package/dist/sdk/runtime-public-contracts.d.ts +2 -1
  130. package/dist/sdk/runtime.d.ts +73 -9
  131. package/dist/sdk/runtime.js +1 -1
  132. package/dist/sdk/schema.d.ts +2 -1
  133. package/dist/sdk/schema.js +1 -1
  134. package/dist/types.d.ts +4 -0
  135. package/dist/types.js +1 -1
  136. package/docs/COMMANDS.md +36 -24
  137. package/docs/COMMAND_NAMESPACES.md +65 -0
  138. package/docs/CONFIGURATION.md +12 -1
  139. package/docs/LIFECYCLE_COMMANDS.md +77 -0
  140. package/docs/README.md +3 -0
  141. package/docs/READ_OUTPUT_CONTRACTS.md +5 -0
  142. package/docs/TESTING.md +10 -0
  143. package/docs/WORKFLOW_POLICIES.md +129 -0
  144. package/docs/generated/AGENT_CAPABILITY_ROUTING.md +6 -6
  145. package/docs/generated/AGENT_COMMAND_SURFACE.md +19 -0
  146. package/docs/generated/FLAG_LEXICON_BUDGETS.md +23 -5
  147. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +11 -5
  148. package/marketplace.json +2 -2
  149. package/package.json +5 -5
  150. package/packages/pm-beads/package.json +1 -1
  151. package/packages/pm-calendar/package.json +1 -1
  152. package/packages/pm-command-kit/package.json +1 -1
  153. package/packages/pm-digital-twin/package.json +1 -1
  154. package/packages/pm-governance-audit/README.md +4 -2
  155. package/packages/pm-governance-audit/package.json +1 -1
  156. package/packages/pm-guide-shell/package.json +1 -1
  157. package/packages/pm-kanban/package.json +1 -1
  158. package/packages/pm-lifecycle-hooks/package.json +1 -1
  159. package/packages/pm-linked-test-adapters/package.json +1 -1
  160. package/packages/pm-search-advanced/README.md +6 -4
  161. package/packages/pm-search-advanced/package.json +1 -1
  162. package/packages/pm-templates/package.json +1 -1
  163. package/packages/pm-todos/package.json +1 -1
  164. package/packages/pm-vcs/package.json +1 -1
  165. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  166. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  167. package/dist/cli-bundle/chunks/chunk-3BZZA6A3.js +0 -5
  168. package/dist/cli-bundle/chunks/chunk-AMRDVX36.js +0 -235
  169. package/dist/cli-bundle/chunks/chunk-DAM4CBBR.js +0 -2202
  170. package/dist/cli-bundle/chunks/chunk-KR3RP4FH.js +0 -3
  171. package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +0 -2
  172. package/dist/cli-bundle/chunks/chunk-QOEKOECV.js +0 -29
  173. package/dist/cli-bundle/chunks/chunk-RHSFOMHU.js +0 -2
  174. package/dist/cli-bundle/chunks/register-mutation-IQ5C7U6O.js +0 -20
  175. package/dist/cli-bundle/chunks/register-operations-DWVHR2NC.js +0 -2
  176. package/dist/cli-bundle/focused-chunks/chunk-IAUOUGVR.js +0 -177
  177. package/dist/cli-bundle/focused-chunks/chunk-KOOMJ54F.js +0 -2
  178. package/dist/cli-bundle/focused-chunks/chunk-MZDXX7JY.js +0 -56
  179. package/dist/cli-bundle/focused-chunks/chunk-QHNETP77.js +0 -9
  180. package/dist/cli-bundle/focused-chunks/chunk-SDOL6FM2.js +0 -12
  181. package/dist/cli-bundle/focused-chunks/chunk-SQV4AAUC.js +0 -2
  182. package/dist/cli-bundle/focused-chunks/chunk-WE3IUNIW.js +0 -26
  183. package/dist/cli-bundle/focused-chunks/chunk-YALOUBWJ.js +0 -2
@@ -38,13 +38,13 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
38
38
  | `history-compact` | evidence | 30 | 30 |
39
39
  | `history-author-acknowledge` | evidence | 28 | 28 |
40
40
  | `merge` | workspace | 27 | 27 |
41
- | `schema` | workspace | 40 | 40 |
41
+ | `schema` | workspace | 43 | 43 |
42
42
  | `profile` | workspace | 22 | 22 |
43
43
  | `activity` | context | 35 | 35 |
44
44
  | `restore` | intake | 23 | 23 |
45
45
  | `update` | lifecycle | 105 | 105 |
46
46
  | `update-many` | lifecycle | 146 | 146 |
47
- | `close` | lifecycle | 31 | 31 |
47
+ | `close` | lifecycle | 32 | 32 |
48
48
  | `close-many` | lifecycle | 72 | 72 |
49
49
  | `delete` | lifecycle | 24 | 24 |
50
50
  | `append` | evidence | 25 | 25 |
@@ -60,13 +60,13 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
60
60
  | `telemetry` | workspace | 21 | 21 |
61
61
  | `stats` | context | 29 | 29 |
62
62
  | `health` | workspace | 36 | 36 |
63
- | `validate` | quality | 45 | 45 |
63
+ | `validate` | quality | 46 | 46 |
64
64
  | `assurance` | quality | 30 | 30 |
65
65
  | `gc` | workspace | 22 | 22 |
66
66
  | `workspace` | workspace | 23 | 23 |
67
67
  | `contracts` | quality | 29 | 29 |
68
- | `claim` | lifecycle | 38 | 38 |
69
- | `release` | lifecycle | 23 | 23 |
68
+ | `claim` | lifecycle | 39 | 39 |
69
+ | `release` | lifecycle | 24 | 24 |
70
70
  | `start-task` | lifecycle | 23 | 23 |
71
71
  | `pause-task` | lifecycle | 23 | 23 |
72
72
  | `close-task` | lifecycle | 24 | 24 |
@@ -74,3 +74,21 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
74
74
  | `event` | automation | 33 | 33 |
75
75
  | `remind` | automation | 29 | 29 |
76
76
  | `test-runs-worker` | internal | 25 | 25 |
77
+ | `history redact` | evidence | 27 | 27 |
78
+ | `history repair` | evidence | 27 | 27 |
79
+ | `history compact` | evidence | 30 | 30 |
80
+ | `history activity` | context | 35 | 35 |
81
+ | `history restore` | intake | 23 | 23 |
82
+ | `context next` | context | 38 | 38 |
83
+ | `context focus` | intake | 22 | 22 |
84
+ | `ops stats` | context | 29 | 29 |
85
+ | `ops health` | workspace | 36 | 36 |
86
+ | `ops validate` | quality | 46 | 46 |
87
+ | `ops gc` | workspace | 22 | 22 |
88
+ | `ops telemetry` | workspace | 21 | 21 |
89
+ | `ops eval` | context | 25 | 25 |
90
+ | `ops test-all` | quality | 40 | 40 |
91
+ | `history events` | evidence | 33 | 33 |
92
+ | `update many` | lifecycle | 146 | 146 |
93
+ | `close many` | lifecycle | 72 | 72 |
94
+ | `close delete` | lifecycle | 24 | 24 |
@@ -4,14 +4,14 @@ Tracker: `pm-f05lsg`.
4
4
 
5
5
  Every catalog code is listed. An `uncovered` row is an explicit closure obligation, never an omission or implied approval.
6
6
 
7
- - Catalog error codes: 365
7
+ - Catalog error codes: 371
8
8
  - Executable error codes: 19
9
9
  - Executable-code ratchet floor: 18
10
10
  - Required executable canonical codes: `bulk_ids_input_empty`, `bulk_ids_input_missing_path`, `bulk_ids_input_unreadable`, `invalid_argument_value`, `manifest_unknown_key`, `missing_lifecycle_target`, `missing_required_argument`, `no_version_bounds_declared`, `projection_options_mutually_exclusive`, `tracker_not_initialized`, `tracker_root_missing`, `tracker_root_not_directory`, `tracker_root_unreadable`, `unknown_context_intent`, `unknown_field_projection`, `unknown_option`, `unknown_subcommand`
11
- - Uncovered error codes: 346
12
- - Coverage fraction: 0.052055
11
+ - Uncovered error codes: 352
12
+ - Coverage fraction: 0.051213
13
13
  - Closed-domain probes: 19
14
- - Grammar probes: 97
14
+ - Grammar probes: 98
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 | 60 |
214
+ | `missing_required_argument` | `missing_required_argument` | executable | grammar | 61 |
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 |
@@ -365,6 +365,12 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
365
365
  | `vectorization_stale_items_remaining` | `vectorization_stale_items_remaining` | uncovered | none | 0 |
366
366
  | `visible_surface_ceiling_exceeded` | `visible_surface_ceiling_exceeded` | uncovered | none | 0 |
367
367
  | `workflow_duplicate_type` | `workflow_duplicate_type` | uncovered | none | 0 |
368
+ | `workflow_policy_approval_history_invalid` | `workflow_policy_approval_history_invalid` | uncovered | none | 0 |
369
+ | `workflow_policy_audit_failed` | `workflow_policy_audit_failed` | uncovered | none | 0 |
370
+ | `workflow_policy_input_unreadable` | `workflow_policy_input_unreadable` | uncovered | none | 0 |
371
+ | `workflow_policy_invalid` | `workflow_policy_invalid` | uncovered | none | 0 |
372
+ | `workflow_policy_refused` | `workflow_policy_refused` | uncovered | none | 0 |
373
+ | `workflow_policy_registry_invalid` | `workflow_policy_registry_invalid` | uncovered | none | 0 |
368
374
  | `workflow_status_unknown` | `workflow_status_unknown` | uncovered | none | 0 |
369
375
  | `workflow_transition_malformed` | `workflow_transition_malformed` | uncovered | none | 0 |
370
376
  | `workflow_type_empty` | `workflow_type_empty` | 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.8"
9
+ "version": "2026.9.10"
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.8",
16
+ "version": "2026.9.10",
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.8",
3
+ "version": "2026.9.10",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.10.0",
@@ -119,7 +119,7 @@
119
119
  "lint:eslint": "eslint . --max-warnings=0",
120
120
  "lint:eslint:prune": "eslint . --prune-suppressions",
121
121
  "lint:complexity:baseline": "eslint . --suppress-rule complexity --suppress-rule sonarjs/cognitive-complexity",
122
- "lint:duplicates": "jscpd --config .jscpd.json && jscpd --config .jscpd.source.json",
122
+ "lint:duplicates": "jscpd --config .jscpd.json && jscpd --config .jscpd.source.json && jscpd --config .jscpd.tables.json",
123
123
  "lint:codefactor": "pnpm quality:static",
124
124
  "quality:static": "pnpm lint:eslint && pnpm lint:duplicates && pnpm build && node scripts/contracts-snapshot.mjs --check && node scripts/generate-agent-capability-surfaces.mjs --check && node scripts/generate-error-code-catalog.mjs --check && node scripts/release/repository-assurance.mjs repository-static-quality --trigger ci --json && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs && node scripts/release/refusal-closure-gate.mjs && node scripts/release/agent-task-token-gate.mjs && pnpm quality:mcp-deprecations && node dist/cli.js assurance run tracker-context-quality --trigger ci --dry-run --json --output-budget unbounded && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check && node dist/cli.js assurance run graph-composition --trigger ci --dry-run --json --output-budget unbounded && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json --output-budget unbounded",
125
125
  "quality:command-grammar": "pnpm build && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs",
@@ -220,7 +220,7 @@
220
220
  "@eslint/js": "^10.0.1",
221
221
  "@modelcontextprotocol/ext-apps": "1.7.5",
222
222
  "@sentry/cli": "^3.7.0",
223
- "@types/node": "^26.4.1",
223
+ "@types/node": "^26.5.0",
224
224
  "@types/npm-package-arg": "^6.1.4",
225
225
  "@vitest/coverage-v8": "^4.1.11",
226
226
  "esbuild": "0.28.2",
@@ -231,11 +231,11 @@
231
231
  "github-slugger": "2.0.0",
232
232
  "greptile": "^3.5.2",
233
233
  "jscpd": "^5.1.2",
234
- "marked": "18.0.11",
234
+ "marked": "18.0.12",
235
235
  "parse5": "8.0.1",
236
236
  "tsx": "^4.23.13",
237
237
  "typescript": "^6.0.3",
238
- "typescript-eslint": "^8.69.0",
238
+ "typescript-eslint": "^8.70.0",
239
239
  "vitest": "^4.1.11"
240
240
  }
241
241
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-beads",
3
- "version": "2026.9.8",
3
+ "version": "2026.9.10",
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.8",
3
+ "version": "2026.9.10",
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.8",
3
+ "version": "2026.9.10",
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.8",
3
+ "version": "2026.9.10",
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.",
@@ -23,7 +23,7 @@ bodies and full before/after snapshots.
23
23
  - `pm dedupe-audit`
24
24
  - `pm dedupe-merge`
25
25
  - `pm comments-audit`
26
- - `pm normalize`
26
+ - `pm ops normalize`
27
27
 
28
28
  The package also augments existing commands with audit-only flags:
29
29
 
@@ -63,7 +63,7 @@ pm install audit --project
63
63
  pm dedupe-audit --mode parent_scope --status all --limit 20 --json
64
64
  pm dedupe-merge --keep pm-canonical --close pm-duplicate --dry-run --json
65
65
  pm comments-audit --latest 3 --limit-items 20 --limit-rows 50 --json
66
- pm normalize --dry-run --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,5 @@ 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`.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-governance-audit",
3
- "version": "2026.9.8",
3
+ "version": "2026.9.10",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for governance audit and normalization workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-guide-shell",
3
- "version": "2026.9.8",
3
+ "version": "2026.9.10",
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.8",
3
+ "version": "2026.9.10",
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.8",
3
+ "version": "2026.9.10",
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.8",
3
+ "version": "2026.9.10",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for optional linked-test run management adapters and reporters.",
@@ -13,7 +13,7 @@ First-party package that restores optional advanced search surfaces in bare-core
13
13
  - `--type`, `--tag`, `--priority`
14
14
  - `--deadline-before`, `--deadline-after`
15
15
  - `--limit`, `--fields`, `--compact`, `--full`
16
- - Adds `pm reindex` with:
16
+ - Adds `pm ops reindex` with:
17
17
  - `--mode keyword|semantic|hybrid`
18
18
  - `--progress`
19
19
  - `--eval`
@@ -31,8 +31,8 @@ pm install search-advanced --project
31
31
  pm search-advanced "vector cache" --mode hybrid --limit 5 --json
32
32
  pm search-advanced --hybrid "vector cache" --limit 5 --json
33
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
34
+ pm ops reindex --mode hybrid --progress --json
35
+ pm ops reindex --mode keyword --eval --eval-fixtures tests/search-eval/golden-queries.json --json
36
36
  ```
37
37
 
38
38
  Without `--mode`, `--semantic`, or `--hybrid`, `search-advanced` stays keyword-first for fast agent reads.
@@ -44,7 +44,7 @@ lockstep with the core CLI without a copied flag table.
44
44
 
45
45
  ## Reindex eval harness
46
46
 
47
- `pm reindex --eval` runs a golden-query relevance harness after the reindex pass and appends a deterministic `eval` object to JSON output:
47
+ `pm ops reindex --eval` runs a golden-query relevance harness after the reindex pass and appends a deterministic `eval` object to JSON output:
48
48
 
49
49
  - per-fixture pass/fail verdicts
50
50
  - `ndcg_at_5` score for each fixture
@@ -76,3 +76,5 @@ Rules:
76
76
  - `mode` is optional (`keyword`, `semantic`, `hybrid`), default `keyword`.
77
77
  - `expected_top_ids` is required and defines the ideal ranking for nDCG@5.
78
78
  - `min_ndcg_at_5` is optional (`0..1`), default `0.7`.
79
+
80
+ `pm reindex` remains a compatibility alias for `pm ops reindex`.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-search-advanced",
3
- "version": "2026.9.8",
3
+ "version": "2026.9.10",
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.8",
3
+ "version": "2026.9.10",
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.8",
3
+ "version": "2026.9.10",
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.8",
3
+ "version": "2026.9.10",
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.8",
4
+ "version": "2026.9.10",
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.8",
3
+ "version": "2026.9.10",
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,5 +0,0 @@
1
- import{Cb as tn,Cc as cn,Db as rn,Ha as Qr,I as $r,J as zr,Jb as tt,Kb as rt,Lb as nt,M as Vr,Mb as ot,Nb as nn,Ob as on,Rb as sn,Sb as it,Tb as st,Ub as Fe,Z as Kr,a as H,c as Hr,d as J,e as et,eb as Yr,f as jr,fb as Te,g as se,h as z,i as Or,j as qr,o as Ur,s as Nr,u as Gr,ub as ae,vb as Xr,w as Wr,wb as Jr,x as Br,xb as Me,yb as Zr,yc as an,zb as en}from"./chunk-XOD2PCB6.js";import{$ as Nt,$d as Xt,$h as be,Ah as dr,Ai as Se,Aj as Ce,Bh as ur,Bj as Tr,Cj as Ye,D as qt,Dd as Qt,Dj as Xe,Ed as Yt,Ej as Je,Fj as Mr,Hh as $,I as f,Ih as mr,Jh as Ke,Jj as Fr,K as h,Kh as we,Kj as Ze,L as ee,Lc as C,Le as _e,Lh as oe,M as We,Me as Zt,Mh as fr,Mi as br,Ne as er,Nh as M,Ni as Er,O as he,Od as q,Oe as ne,Oh as hr,P as Ut,Ph as ie,Qc as Bt,Qd as Q,Qh as pr,Rc as ze,Tj as Pr,Uc as K,Vc as $t,Vi as F,Wa as O,Wc as te,Wh as gr,X as x,Xh as Qe,Xi as Sr,Yh as yr,Zh as ve,_g as sr,aa as Gt,ai as _r,ba as Be,be as re,bi as wr,cb as A,cd as zt,dn as Lr,eb as Wt,ef as Y,fe as Jt,fj as Ie,gb as B,gd as Vt,ge,gf as tr,hd as Kt,he as ye,hj as xe,i as fe,ib as pe,ij as Ir,jk as X,la as $e,li as vr,lj as P,m as L,mf as rr,mj as Re,nj as ke,oj as xr,pj as Rr,qj as Ae,rf as nr,rh as Ve,sf as or,sj as kr,th as ar,tj as Ar,vk as Dr,wi as Ee,yf as ir,yh as cr,zh as lr,zj as Cr}from"./chunk-AMRDVX36.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="2a9a4dc0-8027-5761-9bbf-cac1ef83bd10")}catch{}})();var Qo=["status","type","tag","priority","deadlineBefore","deadlineAfter","updatedAfter","updatedBefore","createdAfter","createdBefore","ids","assignee","assigneeFilter","parent","sprint","release"],Yo=["filterAcMissing","filterEstimatesMissing","filterResolutionMissing","filterMetadataMissing","filterReviewerMissing","filterRiskMissing","filterConfidenceMissing","filterSprintMissing","filterReleaseMissing","hasNotes","hasLearnings","hasFiles","hasDocs","hasTests","hasComments","hasDeps","hasBody","hasLinkedCommand","noNotes","noLearnings","noFiles","noDocs","noTests","noComments","noDeps","emptyBody","noLinkedCommand"];function Xo(e){return e!=null&&(typeof e!="string"||e.split(",").some(t=>t.trim().length>0))}function Wa(e,t,r={}){let n=r.includePagination!==!1;return[t,...Qo.map(i=>e?.[i]),...n?[e?.limit,e?.offset]:[]].some(Xo)||Yo.some(i=>e?.[i]===!0)}function ln(e){return{type:e.type,tag:e.tag,priority:e.priority,deadlineBefore:e.deadlineBefore,deadlineAfter:e.deadlineAfter,assignee:e.assignee,assigneeFilter:e.assigneeFilter,parent:e.parent,sprint:e.sprint,release:e.release}}(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="7a4a98b2-3872-506d-b88d-877b0033dd2d")}catch{}})();var dn=["parent","type","priority","status","assignee","tags","sprint","release"];function mn(e,t){let r=Ee(e,t,{strict:!0,flagLabel:"--status"});if(!(!r||r.length===0))return r}function fn(e,t=["estimate","estimated_minutes","priority"]){let r=e.sum?.trim(),n=e.avg?.trim(),o=r&&r.length>0?r:void 0,i=n&&n.length>0?n:void 0;if(!o&&!i)return null;if(o&&i&&o!==i)throw new h("Aggregate --sum and --avg must target the same numeric field",f.USAGE);let s=o??i;if(!t.includes(s))throw new h(`Aggregate numeric field "${s}" is not registered. Allowed: ${t.join(", ")}`,f.USAGE);return{field:s,sum:o!==void 0,avg:i!==void 0}}function hn(e){let t=e?.trim()??"status";if(t.length===0)throw new h("--group-by requires at least one field name",f.USAGE);let r=Dr(t);if(r.length===0)throw new h("--group-by requires a comma-separated list of fields",f.USAGE);for(let n of r)if(!dn.includes(n))throw new h(`Aggregate group fields must be one of ${dn.join("|")}; received "${n}"`,f.USAGE);return r}function pn(e){let t=[...new Set(e.map(r=>r.trim().toLowerCase()).filter(r=>r.length>0))].sort((r,n)=>r.localeCompare(n));return t.length===0?null:t.join(",")}function gn(e,t){switch(e){case"parent":return t.parent??null;case"type":return t.type;case"priority":return t.priority;case"status":return t.status;case"assignee":return t.assignee??null;case"tags":return pn(t.tags);case"sprint":return t.sprint??null;case"release":return t.release??null;default:return null}}function yn(e,t){let r=e??null,n=t??null;return r===n?0:r===null?1:n===null?-1:typeof r=="number"&&typeof n=="number"?r-n:String(r).localeCompare(String(n))}function Pe(e,t){return e.map(r=>`${r}:${JSON.stringify(t[r]??null)}`).join("|")}var Jo={parent:"(unparented)",type:"(untyped)",priority:"(no priority)",status:"(no status)",assignee:"(unassigned)",tags:"(untagged)",sprint:"(no sprint)",release:"(no release)"};function un(e,t){return t==null||t===""?Jo[e]:String(t)}function Zo(e,t){return e.length===1?un(e[0],t[e[0]]):e.map(r=>`${r}=${un(r,t[r])}`).join(" | ")}function _n(e,t,r){for(let n of r){let o=yn(e.group[n],t.group[n]);if(o!==0)return o}return 0}function wn(e,t){let n=e[t];if(typeof n=="number"&&Number.isFinite(n))return n;if(typeof n=="string"){let o=n.trim();if(o.length===0)return null;let i=Number(o);if(Number.isFinite(i))return i}return null}function vn(e,t){return t<=0?0:Math.round(e/t*1e4)/100}function at(e,t,r){let n=Xt(String(t),r)??t;if(n===r.open_status){e.open_count+=1;return}if(n==="in_progress"||r.active_statuses.has(n)&&n!==r.open_status){e.in_progress_count+=1;return}if(r.terminal_done_statuses.has(n)||n===r.close_status){e.closed_count+=1;return}e.other_count+=1}function ei(e,t){return{row:{group:e,count:1},numeric_count:t===null?0:1,numeric_sum:t??0,null_count:t===null?1:0,open_count:0,in_progress_count:0,closed_count:0,other_count:0}}function ti(e,t){if(t===null){e.null_count+=1;return}e.numeric_count+=1,e.numeric_sum+=t}function ri(e){e.accumulator.row.count+=1,e.includeCompletion&&at(e.accumulator,e.item.status,e.statusRegistry),e.numericAggregation!==null&&ti(e.accumulator,e.numericValue)}function ni(e,t,r,n){for(let o of t){let i=Pe(r,o),s=e.get(i);if(s){ri({...n,accumulator:s});continue}let a=ei(o,n.numericValue);n.includeCompletion&&at(a,n.item.status,n.statusRegistry),e.set(i,a)}}function oi(e,t){let r={};for(let n of e)r[n]=gn(n,t);return r}function ii(e,t,r){let n=[oi(e,t)];if(r==="tuple")return n;for(let o of e){let i=t[o];if(!Array.isArray(i))continue;let s=[...new Set(i.map(a=>a.trim().toLowerCase()).filter(Boolean))].sort();s.length!==0&&(n=n.flatMap(a=>s.map(u=>({...a,[o]:u}))))}return n}function si(e,t,r,n){let o={...e.row,group_label:Zo(t,e.row.group)};return r&&(o.open=e.open_count,o.in_progress=e.in_progress_count,o.closed=e.closed_count,o.other=e.other_count,o.completion_pct=vn(e.closed_count,e.row.count)),n!==null&&(o.null_count=e.null_count,n.sum&&(o.sum=e.numeric_sum),n.avg&&(o.avg=e.numeric_count===0?null:e.numeric_sum/e.numeric_count)),o}function ai(e){return{group_by:e.groupBy,set_mode:e.setMode,count:!0,completion:e.includeCompletion,include_unparented:e.includeUnparented,status:e.status?.[0]??null,status_values:e.status,type:e.options.type??null,tag:e.options.tag??null,priority:e.options.priority??null,deadline_before:e.options.deadlineBefore??null,deadline_after:e.options.deadlineAfter??null,assignee:e.options.assignee??null,assignee_filter:e.options.assigneeFilter??null,parent:e.options.parent??null,sprint:e.options.sprint??null,release:e.options.release??null,...e.numericAggregation!==null?{sum:e.options.sum??null,avg:e.options.avg??null,numeric_field:e.numericAggregation.field}:{}}}async function Qa(e,t){if(e.count===!1)throw new h("Aggregate grouped counts are always enabled; omit count=false.",f.USAGE);let r=A(process.cwd(),t.path),n=await F(r),o=q(n.schema),i=["estimate","estimated_minutes","priority",...Q(n.schema).definitions.filter(v=>v.type==="number").map(v=>v.metadata_key)],s=hn(e.groupBy),a=e.setMode??"element";if(a!=="element"&&a!=="tuple")throw new h("Aggregate --set-mode must be element or tuple",f.USAGE);let u=mn(e.status,o),c=fn(e,[...new Set(i)].sort((v,E)=>v.localeCompare(E))),l=e.completion===!0,d=e.includeUnparented===!0,m=await Fe(void 0,{...ln(e),status:e.status,noTruncate:!0,strictRead:!0},t),p=new Map,y=0,_=0,g=0;for(let v of m.items){let E=v;if(s.includes("parent")&&E.parent===void 0&&!d){y+=1;continue}let R=c===null?null:wn(E,c.field),I=ii(s,E,a);ni(p,I,s,{item:E,statusRegistry:o,includeCompletion:l,numericAggregation:c,numericValue:R}),g+=I.length,_+=1}let w=[...p.values()].map(v=>si(v,s,l,c)).sort((v,E)=>_n(v,E,s)),b=m.warnings&&m.warnings.length>0?m.warnings:void 0;return{...ci(w,s,e),count:w.length,totals:{items_considered:m.items.length,items_grouped:_,items_skipped_unparented:y,group_memberships:g},filters:ai({groupBy:s,setMode:a,includeCompletion:l,includeUnparented:d,status:u,options:e,numericAggregation:c}),now:x(),...b?{warnings:b}:{}}}function ci(e,t,r){let n=Kr(r.limit,"limit")??50,o=r.after===void 0?-1:e.findIndex(a=>Pe(t,a.group)===r.after);if(r.after!==void 0&&o<0)throw new h("Aggregate --after cursor is absent from the current grouping; restart without --after.",f.USAGE);let i=e.slice(o+1,o+1+n),s=o+1+i.length<e.length;return{groups:i,returned_count:i.length,truncated:s,next_after:s?Pe(t,i.at(-1).group):null}}var Ya={buildGroupKey:Pe,compareAggregateRows:_n,compareNullableGroupValue:yn,completionPct:vn,normalizeTagGroupValue:pn,parseGroupBy:hn,parseNumericAggregation:fn,parseStatus:mn,readNumericAggregateValue:wn,resolveGroupValue:gn,updateCompletionCounts:at};import li from"fast-json-patch";import ct from"node:fs/promises";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="0f22715f-cfb9-5c75-b4c5-e9719416c2b9")}catch{}})();async function bn(e,t,r){let n=await xr(e,{schema:t.schema});return n.error===null?{raw:n.raw,document:n.document}:{raw:n.raw,document:En(r),recovered:!0}}function di(e,t){return Hr(e,t,{errorSubject:"restore",allowFutureTimestamp:!0})}function En(e){let t=et(e,e.length-1);return Object.keys(t.metadata).length===0?{metadata:{},body:t.body}:ye(M(t))}async function ui(e,t,r,n){let o=await z(e,t,r,n),i=o.located?await ve({pmRoot:e,settings:r,itemId:o.id,commandLabel:"restore"}):{warnings:[]};return{...o,historyPolicyWarnings:i.warnings}}function mi(e,t){let r=ie(e),n=ie(t),o=li.compare(r,n),i=new Set;for(let s of o){if(s.path==="/body"||s.path.startsWith("/body/")){i.add("body");continue}let a=s.path.replace(/^\/(?:metadata|front_matter)\/?/,"").split("/")[0];i.add(a.replaceAll("~1","/").replaceAll("~0","~"))}return Array.from(i).sort((s,a)=>s.localeCompare(a))}async function fi(e){let t=await Yr({pmRoot:e.pmRoot,subject:e.subject,settings:e.settings,typeRegistry:e.typeRegistry,historyRawBeforeLock:e.historyRawBeforeLock,currentItemRawBeforeLock:e.currentItemRawBeforeLock,operation:"restore",readItem:r=>bn(r,e.settings,e.history)});return{loadedItemUnderLock:t.loadedItemUnderLock,existingItemPath:t.locatedUnderLock?.itemPath??null}}function hi(e,t){return e?{document:e.document,originalRaw:e.raw}:{document:En(t),originalRaw:null}}function pi(e){let t=e.document.metadata.assignee?.trim();if(!(t&&t!==e.author&&!e.force))return[];if(e.enforcement==="strict")throw new h(`Item ${e.resolvedId} is assigned to ${t}. Use --force to override.`,f.CONFLICT);return e.enforcement==="warn"?[`ownership_warning:assignee_conflict:${e.resolvedId}:${t}`]:[]}async function gi(e){if(e.existingItemPath&&e.resolvedOriginalRaw!==null&&e.restoredItemPath!==e.existingItemPath){await L(e.existingItemPath,e.resolvedOriginalRaw),await ct.rm(e.restoredItemPath,{force:!0});return}if(e.existingItemPath&&e.resolvedOriginalRaw!==null){await L(e.existingItemPath,e.resolvedOriginalRaw);return}await ct.rm(e.restoredItemPath,{force:!0})}async function yi(e){return[...await K({path:e.restoredItemPath,scope:"project",op:"restore",item_id:e.after.metadata.id,item_type:e.after.metadata.type,before:e.before,after:e.after,changed_fields:["restored"]}),...await K({path:e.historyPath,scope:"project",op:"restore:history",item_id:e.after.metadata.id,item_type:e.after.metadata.type,before:e.before,after:e.after,changed_fields:["restored"]})]}async function dc(e,t,r,n){let o=A(process.cwd(),n.path);await P(o);let i=await F(o),s=O(i,C()),a=await ui(o,e,i,s.type_to_folder),u=a.id,{raw:c,entries:l}=await er(a.historyPath,u);if(l.length===0)throw new h(`No history exists for ${u}; restore is unavailable.`,f.NOT_FOUND);let d=di(t,l),m=jr(et(l,d.historyIndex),d),p=hr(m,{schema:i.schema});if(p.metadata.id!==u)throw new h(`Restore target resolved to item ${p.metadata.id}, expected ${u}.`,f.GENERIC_FAILURE);let _=(a.located?await bn(a.located,i,l):null)?.raw??null,g=_e(r.author,i.author_default),w=await Zt(o,u,i.locks.ttl_seconds,g,!!r.force,i.governance.force_required_for_stale_lock,i.locks.wait_ms);try{let{loadedItemUnderLock:b,existingItemPath:v}=await fi({pmRoot:o,subject:a,settings:i,typeRegistry:s,historyRawBeforeLock:c,currentItemRawBeforeLock:_,history:l}),E="toon",R=hi(b,l),I=pi({document:R.document,author:g,force:r.force,enforcement:i.governance.ownership_enforcement,resolvedId:u}),S=mi(R.document,p);await $t({pm_root:o,operation:"restore",before:R.document,after:p,changed_fields:S,sdk:kr({pmRoot:o,settings:i,typeToFolder:s.type_to_folder})});let k=ge(p,{format:E,schema:i.schema}),G=B(o,p.metadata.type,u,E,s.type_to_folder),W=await Ie(o,g),me=[];try{await L(G,k),v&&G!==v&&await ct.rm(v);let Vo=$({nowIso:x(),author:g,op:"restore",before:R.document,after:p,message:r.message});try{await mr(a.historyPath,Vo)}catch(Ko){throw await gi({existingItemPath:v,resolvedOriginalRaw:R.originalRaw,restoredItemPath:G}),Ko}me=await xe({pmRoot:o,preferredFormat:i.item_format,typeToFolder:s.type_to_folder,schema:i.schema,itemPath:G,previousItemPath:v??void 0,document:p})}finally{await W()}let zo=await yi({restoredItemPath:G,historyPath:a.historyPath,before:R.document,after:p});Bt({id:p.metadata.id,op:"restore",item_type:p.metadata.type,previous_status:R.document.metadata.status,status:p.metadata.status,previous:ze(R.document.metadata,S),current:ze(p.metadata,S),changed_fields:S});let jt=l[d.historyIndex],Ot=H(l,!0);return{item:p.metadata,restored_from:{kind:d.kind,target:d.raw,history_index:d.historyIndex+1,version:Ot===null?null:Ot+d.historyIndex+1,entry_ts:jt.ts,entry_op:jt.op},changed_fields:S,warnings:[...b?.recovered?["restore_unreadable_item_recovered"]:[],...a.historyPolicyWarnings,...I,...me,...zo]}}finally{await w()}}(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="0cc18a30-5068-5c59-b559-7afc4d446ed8")}catch{}})();function _i(e,t){return t===void 0?e:e.slice(Math.max(0,e.length-t))}function wi(e,t){return e.map(({entry:r,version:n})=>{let o=new Set,i=pr(r.patch);for(let s of i)o.add(Qe(s.path)),s.from&&o.add(Qe(s.from));return{index:n,...t?{version:t.offset===null?null:t.offset+n}:{},ts:r.ts,op:r.op,author:r.author,patch_ops:i.length,changed_fields:[...o].sort((s,a)=>s.localeCompare(a))}})}function vi(e){if(e[0]?.op!=="history_compact_baseline")return;let t=H(e,!0);return{offset:t,first_version:t===null?null:t+1,last_version:t===null?null:t+e.length}}async function bi(e,t){let r=A(process.cwd(),t.path);await P(r);let n=await F(r),o=O(n,C()),i=e.trim()===be,s=i?be:vr(e,n.id_prefix),a=await Re(r,s,n.id_prefix,n.item_format,o.type_to_folder),u=a?.id??s,c=i?_r(r):pe(r,u);if(!a&&!await fe(c))throw new h(`Item ${e} not found`,f.NOT_FOUND);return a&&await ve({pmRoot:r,settings:n,itemId:a.id,commandLabel:"history"}),{historyPath:c,located:a,resolvedId:u,settings:n}}async function bc(e,t,r){let n=Se(t.limit),{historyPath:o,located:i,resolvedId:s,settings:a}=await bi(e,r),u=await ne(o,s),c=vi(u),l=a.agent_identity.identity_vocabulary,d=Nr(a.agent_identity.harness_signals),m=Wr({harness:t.harness,agentInstance:t.agentInstance,provenance:t.provenanceFilter},l,d),p=Ei(u).filter(({entry:S})=>m(S)),y=_i(p,n),_=y.map(({entry:S})=>S),g=t.compact===!0,w=g?wi(y,c):void 0,b=t.provenance===!0?y.map(({entry:S,durableVersion:k})=>Gr(S,l,{itemId:s,version:k})):void 0,v=t.provenance===!0?"provenance":g?"compact":"full",E={compact:{compact_history:w},provenance:{provenance_history:b},full:{history:_}}[v],I={id:s,...E,compact:g,projection:{mode:v,row_key:{compact:"compact_history",provenance:"provenance_history",full:"history"}[v]},omission_receipt:rr("history",v),count:_.length,limit:n??null,version_addressing:c,...t.provenanceSummary===!0?{provenance_summary:Br(p.map(({entry:S})=>S),l,d)}:{}};if((t.diff||t.field!==void 0)&&(I.diff=yr(u,{windowStartIndex:Math.max(0,u.length-_.length),field:t.field})),t.verify){let S=i?(await ke(i,{schema:a.schema})).document:void 0;if(I.verification=Or(u,S),s===be&&I.verification.ok){let k=await wr(A(process.cwd(),r.path));I.verification={...I.verification,ok:k.ok,errors:k.ok?I.verification.errors:[...I.verification.errors,"verify_failed:workspace_state_mismatch"],workspace_state_matches_latest:k.ok,workspace_state_mismatches:k.mismatched_documents,workspace_state_missing:k.missing_documents,workspace_state_unreadable:k.unreadable_documents}}}return I}function Ei(e){let t=H(e,!0);return e.map((r,n)=>({entry:r,version:n+1,durableVersion:t===null?void 0:t+n+1}))}(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="acda1c64-cb50-57b5-868d-a27ca6912979")}catch{}})();var Sn=1e6,In=20;function xn(e,t,r,n=In){if(!Number.isSafeInteger(n)||n<0)throw new h("Child projection sample limit must be a non-negative integer.",f.USAGE);let o=e.trim().toLowerCase(),i={},s=[],a=0;for(let g of t){if(a+=1,a>Sn)throw new h(`Child projection exceeded the ${Sn.toLocaleString("en-US")} item safety bound.`,f.GENERIC_FAILURE,{code:"child_projection_item_bound_exceeded",required:"Use an indexed or parent-filtered metadata source.",why:"Unbounded graph scans can exhaust memory in universal project stores.",nextSteps:["Build the derived item index, then retry the parent read."]});s.push(g)}let u=new Map(s.map(g=>[g.id.trim().toLowerCase(),g])),c=Vr(zr(s,$r())),l=new Set(c.children_by_parent.get(o)??[]);for(let g of s)g.parent?.trim().toLowerCase()===o&&l.add(g.id.trim().toLowerCase());let d=[...l].map(g=>u.get(g)),m=0;for(let g of d){let w=g.status.trim().toLowerCase();i[w]=(i[w]??0)+1,re(w,r)||(m+=1)}d.sort((g,w)=>g.id.localeCompare(w.id));let p=d.slice(0,n).map(g=>({id:g.id,title:g.title,type:g.type,status:g.status,priority:g.priority})),y=d.length>p.length,_=n===0?In:n;return{count:d.length,active:m,by_status:Object.fromEntries(Object.entries(i).sort(([g],[w])=>g.localeCompare(w))),sample:p,sample_limit:n,truncated:y,next_offset:y?p.length:null,continuation:y?`pm list --status all --parent ${e} --offset ${p.length} --limit ${_}`:null,scanned:a}}(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="926ca5b2-8cfc-56e7-8cbf-fb0e7152d834")}catch{}})();var Si=new Set(["event","meeting","reminder"]);function Ii(e){return Si.has(e.type.trim().toLowerCase())||e.deadline!==void 0||(e.reminders?.length??0)>0||(e.events?.length??0)>0}function lt(e){if(!Ii(e))return;let t=[...e.events??[]].sort((n,o)=>n.start_at.localeCompare(o.start_at)),r=t[0];return{deadline:e.deadline??null,start_at:r?.start_at??null,end_at:r?.end_at??null,location:r?.location??null,reminders:[...e.reminders??[]],events:t}}(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="26bf8487-2515-5885-b6de-56ba6292fb65")}catch{}})();var Ri=new Set(["epic","feature","milestone","plan"]),ki=new Set(Object.keys(qt).map(e=>e.toLowerCase()));function ut(e){return Object.fromEntries(["comments","notes","learnings","files","tests","docs","reminders","events"].map(r=>[r,e[r]?.length??0]))}function Ai(e,t){let r=ut(e);return[...t.length>0?["body"]:[],...Object.entries(r).flatMap(([n,o])=>o>0?[n]:[]),...r.files+r.tests+r.docs>0?["linked"]:[],"children",...typeof e.assignee=="string"&&e.assignee.trim().length>0?["claim_state"]:[],...lt(e)?["schedule"]:[]]}function kn(e){let t=e.trim().toLowerCase();return t.length>0&&(Ri.has(t)||!ki.has(t))}function Rn(e){return{ts:e.ts,author:e.author,message:e.message??null}}function Ci(e,t){let r=e?.trim(),n=r&&r.length>0?r:null,o=[...t].reverse().find(s=>s.op==="claim"),i=[...t].reverse().find(s=>s.op==="release");return{claimed:n!==null,assignee:n,last_claim:o?Rn(o):null,last_release:i?Rn(i):null}}function Ti(e){if(e===void 0||e.trim().length===0)return"standard";let t=e.trim().toLowerCase();if(t==="full")return"deep";if(tt.includes(t))return t;throw new h("Get --depth must be one of brief|standard|deep|full",f.USAGE)}function Mi(e,t){let r=ut(e);if(t==="deep")return{...e,comments:e.comments??[],notes:e.notes??[],learnings:e.learnings??[],files:e.files??[],tests:e.tests??[],docs:e.docs??[],reminders:e.reminders??[],events:e.events??[],notes_count:r.notes,tests_count:r.tests,collection_counts:r};let{comments:n,notes:o,learnings:i,files:s,tests:a,docs:u,reminders:c,events:l,...d}=e;return{...d,notes_count:e.notes?.length??0,tests_count:e.tests?.length??0,collection_counts:r}}function Fi(e){if(e===void 0)return null;let t=e.split(",").map(r=>r.trim()).filter(r=>r.length>0);if(t.length===0)throw new h("Get --fields requires a comma-separated list of field names",f.USAGE);return t}function Le(e){return e.startsWith("item.")?e.slice(5):e}function Pi(e,t,r){if(e===null)return;let n=rt(t),o=new Set(n),i=e.filter(s=>{let a=Le(s);return!o.has(s)&&!o.has(a)});if(i.length>0){let s=["get",r,"--fields","id,title,status"];throw new h(`Unknown get --fields value(s): ${i.join(", ")}`,f.USAGE,{code:"unknown_field_projection",examples:["pm get <id> --fields id,title,status,type,updated_at","pm get <id> --fields id,title,claim_state","pm get <id> --fields id,title,body,linked.files"],recovery:{allowed_values:n,suggested_retry:Y(s),suggested_retry_args:s}})}}var Di=new Set(["comments","notes","learnings","files","tests","test_runs","docs","reminders","events","dependencies","plan_steps","plan_decisions","plan_discoveries","plan_validation"]);function Li(e,t,r){return Object.hasOwn(t,r)?t[r]:e[r]!==void 0?e[r]:Di.has(r)?[]:void 0}function Hi(e,t){let r=e,n={notes_count:e.notes?.length??0,tests_count:e.tests?.length??0,collection_counts:ut(e)},o={id:e.id};for(let i of t){let s=Le(i);s==="body"||s==="linked"||s.startsWith("linked.")||s==="claim_state"||s.startsWith("claim_state.")||s==="children"||s.startsWith("children.")||s==="schedule"||s.startsWith("schedule.")||(o[s]=Li(r,n,s))}return o}function ce(e,t){return e?.some(r=>r===t||r===`item.${t}`)??!1}function De(e,t){return e.some(r=>{let n=Le(r);return n===t||n.startsWith(`${t}.`)})}function ji(e,t){if(e.full&&(e.fields!==void 0||e.depth!==void 0))throw new h("Get projection options are mutually exclusive; remove the extra projection flag and retry.",f.USAGE,{code:"projection_options_mutually_exclusive",recovery:{suggested_retry:Y(["get",t,"--full"]),suggested_retry_args:["get",t,"--full"]}});if(e.tree!==!0&&e.treeDepth!==void 0)throw new h("Get --tree-depth requires --tree",f.USAGE);if(e.at!==void 0&&e.tree===!0)throw new h("Get --at cannot be combined with --tree because workspace-level historical projections are not yet indexed.",f.USAGE);return{depth:e.full?"deep":Ti(e.depth),treeDepth:e.tree===!0?Ur(e.treeDepth,"--tree-depth"):void 0,fields:Fi(e.fields),fieldProjection:e.fields!==void 0}}async function Oi(e,t,r){let n=A(process.cwd(),t.path);await P(n);let o=await F(n),i=O(o,C());if(r!==void 0){let u=await qr(e,r,{pmRoot:t.path});return{pmRoot:n,settings:o,typeToFolder:i.type_to_folder,locatedId:u.document.metadata.id,metadata:u.document.metadata,body:u.document.body,historical:u}}let s=await Re(n,e,o.id_prefix,o.item_format,i.type_to_folder);if(!s)throw await Ar(n,e,o.id_prefix,i.type_to_folder);let a=await ke(s,{schema:o.schema});return{pmRoot:n,settings:o,typeToFolder:i.type_to_folder,locatedId:s.id,metadata:a.document.metadata,body:a.document.body}}function qi(e,t,r,n){let o=Q(t.schema).definitions.map(i=>i.metadata_key);if(Pi(e,o,n),r&&De(e??[],"children"))throw new h("Get --at cannot project children because workspace-level historical relationships are not yet indexed.",f.USAGE)}function dt(e){let{fieldProjection:t,depth:r,fields:n,field:o}=e;return t?o==="body"||o==="linked"?ce(n,o):De(n,o):r!=="brief"}async function Ui(e,t){if(!t)return;let r=pe(e.pmRoot,e.locatedId),n=await ne(r,e.locatedId);return Ci(e.metadata.assignee,e.historical?n.slice(0,e.historical.target.historyIndex+1):n)}function Ni(e,t,r,n){let o=n||ce(r,"linked.files"),i=n||ce(r,"linked.tests"),s=n||ce(r,"linked.docs");!n&&!o&&!i&&!s||(e.linked={files:o?t.metadata.files??[]:[],tests:i?t.metadata.tests??[]:[],docs:s?t.metadata.docs??[]:[]})}async function Gi(e,t){if(!t)return;let r=q(e.settings.schema),n=await Ae(e.pmRoot,e.settings.item_format,e.typeToFolder,void 0,e.settings.schema);return xn(e.locatedId,n,r)}function Wi(e,t,r,n){if(!n)return;let o=lt(t.metadata);if(o){if(r===null||ce(r,"schedule")){e.schedule=o;return}e.schedule=Object.fromEntries(Object.entries(o).filter(([i])=>r.some(s=>Le(s)===`schedule.${i}`)))}}async function Bi(e,t,r,n){if(t.tree!==!0)return;let o=await Fe(void 0,{parent:e.locatedId,tree:!0,treeDepth:r===void 0?void 0:String(r),full:!0},n);return{root_id:e.locatedId,root_title:e.metadata.title,depth_limit:r??null,count:o.count,items:o.items.map(i=>i)}}async function Wc(e,t,r={}){let n=ji(r,e),o=await Oi(e,t,r.at);qi(n.fields,o.settings,o.historical!==void 0,o.locatedId);let i=dt({...n,field:"body"}),s=dt({...n,field:"linked"}),a=dt({...n,field:"claim_state"}),u=o.historical===void 0&&(n.fieldProjection?De(n.fields,"children"):n.depth==="deep"&&kn(o.metadata.type)),c=n.fieldProjection?De(n.fields,"schedule"):n.depth!=="brief",l=await Ui(o,a),d={item:n.fieldProjection?Hi(o.metadata,n.fields):Mi(o.metadata,n.depth)};i&&(d.item.body=o.body),Ni(d,o,n.fields,s),l&&(d.claim_state=l),Wi(d,o,n.fields,c);let m=await Gi(o,u);m!==void 0&&(d.children=m);let p=await Bi(o,r,n.treeDepth,t);if(p!==void 0&&(d.tree=p),o.historical&&(d.reconstructed=!0,d.as_of_version=o.historical.as_of_version,d.as_of_timestamp=o.historical.as_of_timestamp),o.historical===void 0)try{await sr({pmRoot:o.pmRoot,author:_e(void 0,o.settings.author_default),itemIds:[o.locatedId],intent:"get"})}catch{}return tr(d,Ai(o.metadata,o.body)),d}var Bc={shouldAutoIncludeGetChildren:kn};(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="7b09736a-499b-57f6-b688-0458b487786b")}catch{}})();var Cn=10,U="https://schema.unbrained.dev/pm/eval-query-set/v1",$i={schema:U,accepted_top_level:["array","object"],required_query_fields:["query","relevant_ids"],optional_fields:["mode","description"],modes:["keyword","semantic","hybrid"]},He={schema:U,queries:[{query:"offline search",relevant_ids:["pm-75k9"],mode:"keyword"}]},T=class extends Error{constructor(t){super(t),this.name="EvalQuerySetError"}},zi=new Set(["keyword","semantic","hybrid"]);function An(e,t){let r=0,n=Math.min(t,e.length);for(let o=0;o<n;o+=1)r+=e[o]/Math.log2(o+2);return r}function Vi(e,t,r){if(t.size===0)return 0;let n=e.map(a=>t.has(a)?1:0),o=An(n,r),i=Array.from({length:t.size},()=>1),s=An(i,r);return s===0?0:o/s}function Ki(e,t,r){let n=Math.min(r,e.length);for(let o=0;o<n;o+=1)if(t.has(e[o]))return 1/(o+1);return 0}function mt(e,t,r){let n=Math.min(r,e.length),o=0;for(let i=0;i<n;i+=1)t.has(e[i])&&(o+=1);return o}function Qi(e,t,r){return r<=0?0:mt(e,t,r)/r}function Yi(e,t,r){return t.size===0?0:mt(e,t,r)/t.size}function Tn(e,t,r){return{ndcg:Vi(e,t,r),mrr:Ki(e,t,r),precision:Qi(e,t,r),recall:Yi(e,t,r),relevant_total:t.size,retrieved_relevant:mt(e,t,r)}}function Mn(e){let t=e.length;if(t===0)return{ndcg:0,mrr:0,precision:0,recall:0,query_count:0};let r=e.reduce((n,o)=>({ndcg:n.ndcg+o.ndcg,mrr:n.mrr+o.mrr,precision:n.precision+o.precision,recall:n.recall+o.recall}),{ndcg:0,mrr:0,precision:0,recall:0});return{ndcg:r.ndcg/t,mrr:r.mrr/t,precision:r.precision/t,recall:r.recall/t,query_count:t}}function Xi(e,t){if(typeof e!="object"||e===null)throw new T(`Eval query at index ${t} must be an object`);let r=e,n=typeof r.query=="string"?r.query.trim():"";if(n.length===0)throw new T(`Eval query at index ${t} must have a non-empty "query" string`);if(!Array.isArray(r.relevant_ids))throw new T(`Eval query at index ${t} must have a "relevant_ids" array`);if(r.relevant_ids.some(i=>typeof i!="string"))throw new T(`Eval query at index ${t} must have a "relevant_ids" array of strings`);let o=[...new Set(r.relevant_ids.map(i=>i.trim()).filter(i=>i.length>0))];if(o.length===0)throw new T(`Eval query at index ${t} must list at least one relevant id`);if(r.mode!==void 0&&(typeof r.mode!="string"||!zi.has(r.mode)))throw new T(`Eval query at index ${t} has an invalid mode (expected keyword|semantic|hybrid)`);return{query:n,relevant_ids:o,...r.mode!==void 0?{mode:r.mode}:{},...typeof r.description=="string"&&r.description.trim().length>0?{description:r.description.trim()}:{}}}function ft(e){let t=typeof e=="object"&&e!==null&&!Array.isArray(e)?e.schema:void 0;if(t!==void 0&&t!==U)throw new T(`Unsupported eval query set schema; expected "${U}"`);let r=Array.isArray(e)?e:typeof e=="object"&&e!==null?e.queries:void 0;if(!Array.isArray(r))throw new T('Eval query set must be an array of queries or an object with a "queries" array');if(r.length===0)throw new T("Eval query set must contain at least one query");return{schema:U,queries:r.map((n,o)=>Xi(n,o))}}(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="48888c80-60e1-5905-afd5-8c1b6e532f99")}catch{}})();function Fn(e){if(typeof e!="string")return!1;let t=e.split(",").map(r=>r.trim().toLowerCase()).filter(Boolean);return t.length===1&&t[0]==="all"}var Ji=[{optionKey:"status",summaryKey:"status",normalize:e=>Fn(e)?"all":e},{optionKey:"type",summaryKey:"type"},{optionKey:"tag",summaryKey:"tag"},{optionKey:"priority",summaryKey:"priority"},{optionKey:"deadlineBefore",summaryKey:"deadline_before"},{optionKey:"deadlineAfter",summaryKey:"deadline_after"},{optionKey:"updatedAfter",summaryKey:"updated_after"},{optionKey:"updatedBefore",summaryKey:"updated_before"},{optionKey:"createdAfter",summaryKey:"created_after"},{optionKey:"createdBefore",summaryKey:"created_before"},{optionKey:"assignee",summaryKey:"assignee"},{optionKey:"sprint",summaryKey:"sprint"},{optionKey:"release",summaryKey:"release"},{optionKey:"parent",summaryKey:"parent"}];function le(e){let{mode:t,matchMode:r,options:n,includeLinked:o,titleExact:i,phraseExact:s,scoreThreshold:a,hybridSemanticWeight:u,runtimeFieldFilters:c}=e,l={};return sn(l,n,Ji),Object.assign(l,st(n)),Object.assign(l,it(n)),r!==void 0&&r!=="or"&&(l.match_mode=r),o&&(l.include_linked=!0),i&&(l.title_exact=!0),s&&(l.phrase_exact=!0),a>0&&(l.score_threshold=a),t==="hybrid"&&n.semanticWeight!==void 0&&(l.hybrid_semantic_weight=u),n.limit!==void 0&&(l.limit=n.limit),c&&Object.keys(c).length>0&&(l.runtime_filters=c),l}function de(e){let{effectiveMode:t,matchMode:r,options:n,includeLinked:o,titleExact:i,phraseExact:s,scoreThreshold:a,hybridSemanticWeight:u,queryExpansion:c,rerank:l,runtimeFieldFilters:d}=e,m=p=>p??null;return{mode:t,match_mode:r,status:n.status===void 0||Fn(n.status)?"all":n.status,type:m(n.type),tag:m(n.tag),priority:m(n.priority),deadline_before:m(n.deadlineBefore),deadline_after:m(n.deadlineAfter),updated_after:m(n.updatedAfter),updated_before:m(n.updatedBefore),created_after:m(n.createdAfter),created_before:m(n.createdBefore),assignee:m(n.assignee),sprint:m(n.sprint),release:m(n.release),parent:m(n.parent),...st(n),...it(n),include_linked:o,title_exact:i,phrase_exact:s,score_threshold:a,hybrid_semantic_weight:t==="hybrid"?u:null,query_expansion_enabled:c.enabled,query_expansion_provider:c.provider,rerank_enabled:l.enabled,rerank_model:l.model,rerank_top_k:l.top_k,limit:m(n.limit),runtime_filters:d}}(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="91b01dd0-6a8d-5b97-96d2-c27f4044c009")}catch{}})();function Zi(e){return or("search",{query:e.query.trim(),mode:e.mode,options:nr(e.searchOptions,Lr)})}function Pn(e){let t=ir(e.sorted,{cursor:e.searchOptions.after,fingerprint:Zi(e),limit:e.limit,readId:r=>r.item.id});return{limited:t.rows,pageExtras:{applied_limit:e.limit,...t.has_more?{has_more:!0,truncated:!0}:{},...t.next_cursor?{next_cursor:t.next_cursor}:{}}}}(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="fdd0f9b0-bd89-5cc1-9b20-bea153f4d896")}catch{}})();function Dn(e){if(e===void 0)return"keyword";let t=e.trim().toLowerCase();if(t!=="keyword"&&t!=="semantic"&&t!=="hybrid")throw new h("Search mode must be one of keyword|semantic|hybrid",f.USAGE);return t}function je(e){return e===!0}function Ln(e){return Ut(e,0,1)??void 0}function Hn(e){if(e===void 0)return"or";let t=e.trim().toLowerCase();if(t!=="and"&&t!=="or"&&t!=="exact")throw new h("Search --match-mode must be one of and|or|exact",f.USAGE);return t}function jn(e){if(e==null||e==="")return;let t=typeof e=="number"?e:Number(String(e).trim());if(!Number.isFinite(t)||t<0)throw new h("Search --min-score must be a finite number >= 0",f.USAGE);return t}function Z(e,t){if(e==null)return;let r=String(e).trim();if(r.length!==0)return Be(r,new Date,t)}function j(e){return e.toLowerCase().replace(/\s+/g," ").trim()}function ht(e,t){if(e!==void 0)return Be(e,new Date,t)}function es(e){if(e===void 0)return;let t=e.split(",").map(r=>r.trim()).filter(r=>r.length>0);if(t.length===0)throw new h("Search --fields requires a comma-separated list of field names",f.USAGE);return[...new Set(t)]}function pt(e,t="<query>"){let r=e.compact===!0,n=e.full===!0,o=es(e.fields);if(Number(r)+Number(n)+ +(o!==void 0)>1)throw new h("Search projection options are mutually exclusive. Use one of --compact, --full, or --fields.",f.USAGE,{code:"projection_options_mutually_exclusive",recovery:{suggested_retry:Y(["search",t,"--full"]),suggested_retry_args:["search",t,"--full"]}});return r?{mode:"compact",fields:[...nt]}:n?{mode:"full",fields:[]}:o?{mode:"fields",fields:o}:{mode:"full",fields:[]}}function gt(e,t,r="<query>"){if(e.mode!=="fields")return;let n=ot(t.definitions.flatMap(s=>[s.key,s.metadata_key])),o=new Set(n),i=e.fields.filter(s=>{let a=s.trim();return!o.has(a)});if(i.length>0){let s=["search",r,"--fields","id,title,status,score"];throw new h(`Unknown search --fields value(s): ${i.join(", ")}`,f.USAGE,{code:"unknown_field_projection",examples:["pm search <query> --fields id,title,status,score","pm search <query> --fields id,title,item.description,matched_fields"],nextSteps:["Use item.<field> for explicit item metadata fields, or run pm search --help for projection examples."],recovery:{allowed_values:n,suggested_retry:Y(s),suggested_retry_args:s}})}}function yt(e){let t=j(e);if(!t)throw new h("Search query must not be empty",f.USAGE);return t.split(/\s+/u).filter(Boolean)}function _t(e){let t=e.search?.max_results;return typeof t=="number"&&Number.isFinite(t)&&t>0?Math.floor(t):50}function wt(e){let t=e.search?.score_threshold;return typeof t=="number"&&Number.isFinite(t)?t:0}function vt(e){let t=e.search?.hybrid_semantic_weight;return typeof t=="number"&&Number.isFinite(t)&&t>=0&&t<=1?t:.7}function bt(e){let t={title_exact_bonus:10,title_weight:48,description_weight:5,tags_weight:6,status_weight:2,body_weight:1,comments_weight:1,notes_weight:1,learnings_weight:1,reminders_weight:2,events_weight:2,dependencies_weight:3,linked_content_weight:1},r=e.search?.tuning;if(!r)return t;let n=(o,i)=>typeof o=="number"&&Number.isFinite(o)&&o>=0?o:i;return{title_exact_bonus:n(r.title_exact_bonus,t.title_exact_bonus),title_weight:n(r.title_weight,t.title_weight),description_weight:n(r.description_weight,t.description_weight),tags_weight:n(r.tags_weight,t.tags_weight),status_weight:n(r.status_weight,t.status_weight),body_weight:n(r.body_weight,t.body_weight),comments_weight:n(r.comments_weight,t.comments_weight),notes_weight:n(r.notes_weight,t.notes_weight),learnings_weight:n(r.learnings_weight,t.learnings_weight),reminders_weight:n(r.reminders_weight,t.reminders_weight),events_weight:n(r.events_weight,t.events_weight),dependencies_weight:n(r.dependencies_weight,t.dependencies_weight),linked_content_weight:n(r.linked_content_weight,t.linked_content_weight)}}import qe from"node:fs/promises";import kt from"node:path";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="e2985104-efdb-59e5-9674-2dd865ebdf56")}catch{}})();var Et=4,ts=20,rs=200,ns=new Set(["a","an","and","for","from","in","into","of","on","or","the","to","with"]);function St(e,t){let r=[],n=new Set;for(let o of e){let i=o.trim().replaceAll(/\s+/g," ");if(i.length===0)continue;let s=i.toLowerCase();if(!n.has(s)&&(n.add(s),r.push(i),r.length>=t))break}return r}function os(e){let t=e.toLowerCase();return t.length>4&&t.endsWith("ies")?`${t.slice(0,-3)}y`:t.length>4&&(t.endsWith("ches")||t.endsWith("shes")||t.endsWith("xes")||t.endsWith("zes")||t.endsWith("sses"))?t.slice(0,-2):t.length>3&&t.endsWith("s")&&!t.endsWith("ss")&&!t.endsWith("us")&&!t.endsWith("is")&&!t.endsWith("as")?t.slice(0,-1):t}function is(e){let t=e.toLowerCase();return t.length>2&&(!t.endsWith("s")||t.endsWith("ss"))?t.endsWith("y")&&!/[aeiou]y$/u.test(t)?`${t.slice(0,-1)}ies`:t.endsWith("ch")||t.endsWith("sh")||t.endsWith("x")||t.endsWith("z")||t.endsWith("ss")?`${t}es`:`${t}s`:t}function On(e,t=Et){let r=e.trim().replaceAll(/\s+/g," ");if(r.length===0)return[];let n=X(r);if(n.length===0)return[r];let o=n.filter(a=>!ns.has(a.toLowerCase())),i=n.map(a=>os(a)),s=o.map(a=>is(a));return St([r,n.join(" "),o.join(" "),i.join(" "),s.join(" ")],Math.max(1,t))}function qn(e){let t=Array.isArray(e)?e:e?.queries;return Array.isArray(t)?St(t.filter(r=>typeof r=="string"),Et):[]}function Un(e,t,r){return St([...e,...t],Math.max(1,r))}function Nn(e,t){let n=e.search?.query_expansion,o=ee(n?.provider);return{enabled:n?.enabled===!0,provider:o??t,max_queries:Et}}function Gn(e,t){let n=e.search?.rerank,o=ee(n?.model),s=he(n?.top_k)??ts;return{enabled:n?.enabled===!0,model:o??t,top_k:Math.min(rs,s)}}function Wn(e){let t=Array.isArray(e)?e:e?.hits;if(!Array.isArray(t))return[];let r=new Map;for(let o of t){if(typeof o!="object"||o===null)continue;let i=ee(o.id),s=o.score;if(!i||typeof s!="number"||!Number.isFinite(s))continue;let a=r.get(i);(a===void 0||s>a)&&r.set(i,s)}let n=[...r.entries()].map(([o,i])=>({id:o,score:i}));return n.sort((o,i)=>o.score!==i.score?i.score-o.score:o.id.localeCompare(i.id)),n}function ss(e,t){let r=e.length,n=0;for(let o=0;o<r;o+=1)n+=e[o]*t[o];return n}function Bn(e){let t=0;for(let r=0;r<e.length;r+=1)t+=e[r]*e[r];return Math.sqrt(t)}function as(e,t,r){if(!e||!t||e.length===0||t.length===0||e.length!==t.length)return 0;let n=ss(e,t),o=Bn(t),i=r*o;return!Number.isFinite(n)||!Number.isFinite(r)||!Number.isFinite(o)||!Number.isFinite(i)||i===0?0:Math.max(-1,Math.min(1,n/i))}async function $n(e,t,r,n,o){if(n.length===0)return new Map;let i=ee(t)??e.model,s=i===e.model?e:{...e,model:i},a=[r.trim(),...n.map(m=>m.text)],u=await Ce(s,a,o?{timeout_ms:o}:{}),c=u[0];if(!c)return new Map;let l=Bn(c),d=new Map;for(let m=0;m<n.length;m+=1){let p=n[m],y=u[m+1];if(!y)continue;let _=as(c,y,l);d.set(p.id,Math.max(0,Math.min(1,(_+1)/2)))}return d}(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="bc52818b-d37f-5d00-954d-d50203a433c2")}catch{}})();var cs=1.2,ls=.75;function It(e){return X(e)}function ds(e){let t=new Map;for(let r of e)t.set(r,(t.get(r)??0)+1);return t}function Vn(e){let t=[],r=new Map,n=0;for(let i of e){let s=It(i.text),a=ds(s);n+=s.length;for(let u of a.keys())r.set(u,(r.get(u)??0)+1);t.push({id:i.id,termFrequencies:a,length:s.length})}let o=t.length;return{documents:t,documentFrequency:r,documentCount:o,averageDocumentLength:o>0?n/o:0}}function us(e,t){return Math.log(1+(e-t+.5)/(t+.5))}function Kn(e,t,r){let n=new Map;if(e.documentCount===0||e.averageDocumentLength===0)return n;let o=[...new Set(t.filter(s=>s.length>0))];if(o.length===0)return n;let i=new Map;for(let s of o){let a=e.documentFrequency.get(s);a!==void 0&&i.set(s,us(e.documentCount,a))}if(i.size===0)return n;for(let s of e.documents){let a=0;for(let[u,c]of i){let l=s.termFrequencies.get(u);if(l===void 0)continue;let d=1-r.b+r.b*s.length/e.averageDocumentLength,m=l+r.k1*d;a+=c*(l*(r.k1+1)/m)}a>0&&n.set(s.id,a)}return n}function zn(e,t,r,n){return typeof e!="number"||!Number.isFinite(e)?t:Math.min(n,Math.max(r,e))}function Qn(e){let t=r=>typeof r=="string"?[r]:typeof r=="number"?[String(r)]:Array.isArray(r)?r.flatMap(t):typeof r=="object"&&r!==null?Object.values(r).flatMap(t):[];return t(Object.values(e)).join(" ")}function Yn(e){let t=e?.search?.bm25;return{k1:zn(t?.k1,cs,0,1e3),b:zn(t?.b,ls,0,1)}}(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="83c28598-a965-5d1f-99cb-ecfc77c0736d")}catch{}})();var ms=2,fs=120,hs=6,ps=40,gs=1e3,ys=900,_s="\xAB",ws="\xBB",Xn=60,eo=["tag","status","type","priority"];function to(e){let t=[],r=e;for(let n=0;n<5&&r&&typeof r=="object";n+=1){let o=r.code;typeof o=="string"&&t.push(o.toLowerCase()),r=r.cause}return t.join(" ")}function ro(e){let t=(e instanceof Error?e.message:String(e)).toLowerCase(),r=to(e),n=`${t} ${r}`;return n.includes("timed out")||n.includes("timeout")||n.includes("etimedout")?"timeout":n.includes("econnrefused")||n.includes("connection refused")||n.includes("connect ")||n.includes("enotfound")||n.includes("eai_again")||n.includes("econnreset")||n.includes("fetch failed")?"connection":"error"}function no(e,t){let r=ro(t);return`search_${e}_fallback:${r}:using_keyword_mode`}function vs(e){return e?.commands?.some(r=>r.command.trim()==="reindex")===!0?{command:"pm reindex --mode hybrid",args:["reindex","--mode","hybrid"]}:{command:"pm install search-advanced --project",args:["install","search-advanced","--project"],follow_up_command:"pm reindex --mode hybrid",follow_up_args:["reindex","--mode","hybrid"]}}async function oo(e,t,r){try{let n=await Pr(e);n.warnings.length>0&&r.push(...n.warnings);let o=Qr(t.map(s=>({id:s.metadata.id,updated_at:s.metadata.updated_at})),n.entries);if(o.length===0)return;let i=vs(C());r.push(...bs(o.length,i)),process.stderr.write(`[pm] warning: ${o.length} item${o.length===1?" is":"s are"} new or modified since the last reindex and ${o.length===1?"is":"are"} NOT in the semantic index yet \u2014 run '${i.command}'${i.follow_up_command?`, then '${i.follow_up_command}'`:""}. (Write-time embedding is governed by search.mutation_refresh_policy; staleness means the embed was skipped, failed, or the backend was unreachable.)
2
- `)}catch{}}function bs(e,t){return[`vector_index_stale:${e}`,`vector_index_recovery:${t.args.join(" ")}`,...t.follow_up_args?[`vector_index_recovery_follow_up:${t.follow_up_args.join(" ")}`]:[]]}var ed={applyFilters:uo,applyExactQueryFilters:lo,applyInlineQueryFilters:so,buildHitHighlights:_o,buildVerboseSearchFilters:de,buildExplicitSemanticFallbackWarning:no,buildCompactSearchFilterSummary:le,buildHybridLexicalScore:bo,buildRerankCorpus:To,buildSemanticHits:Ro,classifyImplicitSemanticFallbackReason:ro,collectErrorCauseCodes:to,collectExactPhraseFields:ao,collectLinkedPaths:mo,combineHybridHits:Mt,computeBuiltInBm25Hits:Ao,computeSemanticOrHybridHits:Mo,resolveBuiltInBm25Mode:ko,countOccurrences:Ct,dependencyEntries:At,documentContainsExactPhrase:co,emptySearchResult:Eo,highlightFieldSnippet:yo,loadDocuments:Fo,markTokenRuns:go,parseInlineQueryFilters:io,maybeEmitVectorIndexStaleWarning:oo,loadLinkedCorpus:ho,mergeVectorHitsById:Co,normalizeExtensionProviderHits:xo,normalizeScoreMap:xt,parseProjectionConfig:pt,parseTimestampWindow:Z,parseTokens:yt,projectSearchHits:Do,readSearchFieldValue:Po,requireSemanticDependencies:Tt,resolveExtensionSearchProvider:So,resolveExtensionSearchProviderByName:Ge,resolveExtensionVectorAdapter:Io,resolveLinkedCorpusRoots:fo,scoreDocument:wo,sortHits:vo,stringArray:Ne,textEntries:V,validateSearchProjectionFields:gt};function io(e){let t={},r=[];for(let n of e.split(/\s+/).filter(o=>o.length>0)){let o=n.indexOf(":"),i=o>0?n.slice(0,o).toLowerCase():"",s=o>0?n.slice(o+1):"",a=eo.includes(i)?i:void 0;if(a&&s.length>0&&t[a]===void 0){t[a]=s;continue}r.push(n)}return{residualQuery:r.join(" "),inlineFilters:t}}function so(e,t,r){let n={...e};for(let o of eo){let i=t[o];if(i!==void 0){if(We(n[o])!==void 0){r.push(`search_inline_filter_ignored:${o}:flag_takes_precedence`);continue}n[o]=i}}return n}function Ne(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function V(e){return Array.isArray(e)?e.filter(t=>typeof t=="object"&&t!==null&&typeof t.text=="string"):[]}function At(e){return Array.isArray(e)?e.filter(t=>typeof t=="object"&&t!==null&&typeof t.id=="string"&&typeof t.kind=="string"):[]}function ao(e){let t=e.metadata;return[t.title,t.description,t.status,Ne(t.tags).join(" "),e.body,V(t.comments).map(r=>r.text).join(" "),V(t.notes).map(r=>r.text).join(" "),V(t.learnings).map(r=>r.text).join(" "),Ye(t).join(" "),Xe(t).join(" "),At(t.dependencies).map(r=>`${r.id} ${r.kind}`).join(" "),Je(t)]}function co(e,t){return ao(e).some(r=>j(r).includes(t))}function lo(e,t,r){return!r.titleExact&&!r.phraseExact?e:e.filter(n=>!(r.titleExact&&j(n.metadata.title)!==t||r.phraseExact&&!co(n,t)))}function Es(e){if(e&&[...e].some(t=>t.toLowerCase()==="none"||t.toLowerCase()==="null"))throw new h('--assignee no longer accepts "none" or "null".',f.USAGE)}function Ss(e,t,r){let n=ae(e.assignee,{label:"--assignee"});Es(n);let o=nn(e),i=on(e);return{typeFilter:Xr(e.type,t),tagFilter:ae(e.tag,{label:"--tag",normalize:s=>s.toLowerCase()}),priorityFilter:Jr(e.priority),deadlineBefore:ht(e.deadlineBefore,"deadline-before"),deadlineAfter:ht(e.deadlineAfter,"deadline-after"),updatedAfter:Z(e.updatedAfter,"updated-after"),updatedBefore:Z(e.updatedBefore,"updated-before"),createdAfter:Z(e.createdAfter,"created-after"),createdBefore:Z(e.createdBefore,"created-before"),assigneeFilter:n,sprintFilter:ae(e.sprint,{label:"--sprint"}),releaseFilter:ae(e.release,{label:"--release"}),parentFilter:e.parent?.trim(),statusSet:r&&r.length>0?new Set(r):void 0,missingMetadataFilters:o,missingMetadataActive:Zr(o),contentFieldFilters:i,contentFiltersActive:tn(i)}}function Is(e,t){return xs(e,t)&&Rs(e,t)&&ks(e,t)}function xs(e,t){if(t.statusSet&&!t.statusSet.has(e.status)||t.typeFilter&&!t.typeFilter.has(e.type))return!1;let r=t.tagFilter;return!(r&&!Ne(e.tags).some(n=>r.has(n))||t.priorityFilter!==void 0&&!t.priorityFilter.has(e.priority))}function Rs(e,t){return Gt(e,t)}function ks(e,t){return!(t.assigneeFilter!==void 0&&(e.assignee===void 0||!t.assigneeFilter.has(e.assignee))||t.sprintFilter!==void 0&&(e.sprint===void 0||!t.sprintFilter.has(e.sprint))||t.releaseFilter!==void 0&&(e.release===void 0||!t.releaseFilter.has(e.release))||t.parentFilter!==void 0&&e.parent!==t.parentFilter)}function As(e,t,r,n){let o=e.metadata;return!(!Is(o,t)||!Er(o,r)||t.missingMetadataActive&&!en(o,t.missingMetadataFilters,n)||t.contentFiltersActive&&!rn(o,t.contentFieldFilters))}function uo(e,t,r,n,o,i){let s=Ss(t,r,o);return e.filter(a=>As(a,s,n,i))}function Ct(e,t){let r=0,n=0;for(;;){let o=e.indexOf(t,n);if(o<0)return r;r+=1,n=o+t.length}}function Cs(e){return X(e)}function mo(e){let t=(e.files??[]).map(s=>({scope:s.scope,path:s.path.trim()})),r=(e.docs??[]).map(s=>({scope:s.scope,path:s.path.trim()})),n=(e.tests??[]).filter(s=>typeof s.path=="string"&&s.path.trim().length>0).map(s=>({scope:s.scope,path:s.path.trim()})),o=[...t,...r,...n].filter(s=>s.path.length>0).sort((s,a)=>s.scope.localeCompare(a.scope)||s.path.localeCompare(a.path)),i=new Map;for(let s of o)i.set(`${s.scope}:${s.path}`,s);return[...i.values()]}async function Jn(e){let t=kt.resolve(e);try{let r=await qe.realpath(t);return{resolved:t,realpath:r}}catch{return null}}async function fo(e,t){let[r,n]=await Promise.all([Jn(e),Jn(t)]);return{projectContainmentRoot:r,globalContainmentRoot:n}}async function ho(e,t){let r=mo(e.metadata),n=[];for(let o of r){let i=o.scope==="global"?t.globalContainmentRoot:t.projectContainmentRoot;if(!i)continue;let s=kt.resolve(i.resolved,o.path);if(!$e(i.resolved,s))continue;let a;try{a=await qe.realpath(s)}catch{continue}if($e(i.realpath,a))try{await te({path:s,scope:o.scope}),n.push(await qe.readFile(s,"utf8"))}catch{}}return n.join(`
3
- `)}var po=[{name:"title",weightKey:"title_weight",value:e=>e.metadata.title},{name:"description",weightKey:"description_weight",value:e=>e.metadata.description},{name:"tags",weightKey:"tags_weight",value:e=>Ne(e.metadata.tags).join(" ")},{name:"status",weightKey:"status_weight",value:e=>typeof e.metadata.status=="string"?e.metadata.status:""},{name:"body",weightKey:"body_weight",value:e=>e.body},{name:"comments",weightKey:"comments_weight",value:e=>V(e.metadata.comments).map(t=>t.text).join(" ")},{name:"notes",weightKey:"notes_weight",value:e=>V(e.metadata.notes).map(t=>t.text).join(" ")},{name:"learnings",weightKey:"learnings_weight",value:e=>V(e.metadata.learnings).map(t=>t.text).join(" ")},{name:"reminders",weightKey:"reminders_weight",value:e=>Ye(e.metadata).join(" ")},{name:"events",weightKey:"events_weight",value:e=>Xe(e.metadata).join(" ")},{name:"dependencies",weightKey:"dependencies_weight",value:e=>At(e.metadata.dependencies).map(t=>`${t.id} ${t.kind}`).join(" ")},{name:"plan",weightKey:"body_weight",value:e=>Je(e.metadata)}],Ts=new Map(po.map(e=>[e.name,e]));function Ms(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function go(e,t){let r=t.filter(o=>o.length>0).sort((o,i)=>i.length-o.length).map(Ms);if(r.length===0)return e;let n=new RegExp(r.join("|"),"gi");return e.replace(n,o=>`${_s}${o}${ws}`)}function yo(e,t){if(e.length===0)return null;let r=e.toLowerCase(),n=-1,o=0;for(let l of t){if(l.length===0)continue;let d=r.indexOf(l);d>=0&&(n<0||d<n)&&(n=d,o=l.length)}if(n<0)return null;let i=Math.max(0,n-Xn),s=Math.min(e.length,n+o+Xn),a=go(e.slice(i,s),t),u=i>0?"\u2026":"",c=s<e.length?"\u2026":"";return`${u}${a}${c}`}function _o(e,t,r){let n=[];for(let o of t){let i=Ts.get(o);if(i===void 0)continue;let s=yo(i.value(e),r);s!==null&&n.push({field:o,snippet:s})}return n}function Fs(e,t,r){return[...po.map(n=>({name:n.name,value:n.value(e),weight:r[n.weightKey]})),{name:"linked_content",value:t,weight:r.linked_content_weight}]}function Ps(e,t,r){let n=j(e.id),o=typeof r=="string"?r.trim().toLowerCase():"",i=j(o),s=i.length>0&&n.startsWith(i)?n.slice(i.length).trim():n;return t!==n&&t!==s?null:{item:e,score:t===n?gs:ys,matched_fields:["id"],matched_all_terms:!0,exact_id_match:!0}}function Ds(e,t,r,n,o){for(let i of e){let s=t.get(i)??0;s>0&&(o.score+=s*n.title_exact_bonus,o.matched.add("title"),o.matchedTokens.add(i));for(let a of r){let u=Ct(a.value.toLowerCase(),i);u>0&&(o.score+=u*a.weight,o.matched.add(a.name),o.matchedTokens.add(i))}}}function Ls(e,t,r,n){j(e.title)===t&&(n.score+=fs,n.matched.add("title"));for(let i of r){let s=Ct(j(i.value),t);s>0&&(n.score+=s*i.weight*hs,n.matched.add(i.name))}}function wo(e,t,r,n,o,i,s=!1){let a=e.metadata,u=Ps(a,r,i);if(u)return u;let c=new Map;for(let _ of Cs(a.title))c.set(_,(c.get(_)??0)+1);let l=Fs(e,n,o),d={score:0,matched:new Set,matchedTokens:new Set};Ds(t,c,l,o,d);let m=new Set(t),p=m.size>0&&d.matchedTokens.size===m.size;return s&&m.size>1&&p&&(d.score+=ps),t.length>=ms&&r.includes(" ")&&Ls(a,r,l,d),d.score<=0?null:{item:a,score:d.score,matched_fields:[...d.matched].sort((_,g)=>_.localeCompare(g)),matched_all_terms:p}}function vo(e,t){return[...e].sort((r,n)=>{let o=n.score-r.score;if(o!==0)return o;let i=re(r.item.status,t),s=re(n.item.status,t);if(i!==s)return i?1:-1;let a=r.item.priority-n.item.priority;if(a!==0)return a;let u=Nt(n.item.updated_at,r.item.updated_at);return u!==0?u:r.item.id.localeCompare(n.item.id)})}function bo(e,t,r,n,o,i,s,a=!1){return wo(e,t,r,n?o.get(e.metadata.id)??"":"",i,s,a)}function xt(e){if(e.size===0)return new Map;let t=[...e.values()],r=Math.min(...t),n=Math.max(...t);if(n===r)return new Map([...e.keys()].map(i=>[i,1]));let o=new Map;for(let[i,s]of e)o.set(i,(s-r)/(n-r));return o}function Eo(e,t,r,n,o,i,s,a,u,c,l,d,m=!1){let p=m?{total:0,count_only:!0}:{};if(c.mode==="compact"&&n.compact===!0){let g=le({mode:t,matchMode:r,options:n,includeLinked:o,titleExact:n.titleExact===!0,phraseExact:n.phraseExact===!0,scoreThreshold:i,hybridSemanticWeight:s,runtimeFieldFilters:d});return{query:e.trim(),mode:t,items:[],count:0,...p,filters:g,...l.length>0?{warnings:l}:{}}}let _=c.mode==="full"?null:[...c.fields];return{query:e.trim(),mode:t,items:[],count:0,...p,filters:de({effectiveMode:t,matchMode:r,options:n,includeLinked:o,titleExact:n.titleExact===!0,phraseExact:n.phraseExact===!0,scoreThreshold:i,hybridSemanticWeight:s,queryExpansion:a,rerank:u,runtimeFieldFilters:d??{}}),projection:{mode:c.mode,fields:_},now:x(),...l.length>0?{warnings:l}:{}}}function Tt(e,t,r,n){if(!t.active)throw new h(`Search mode '${e}' requires a configured embedding provider in settings.providers.openai or settings.providers.ollama`,f.USAGE);if(!r.active&&!n)throw new h(`Search mode '${e}' requires a configured vector store in settings.vector_store.qdrant/settings.vector_store.lancedb or an extension adapter selected by settings.vector_store.adapter`,f.USAGE);return{provider:t.active,vectorStore:r.active??null}}var D=We;function Ge(e){let t=C(),r=Vt(t,e);if(!r)return null;let n=r.runtime_definition??r.definition,o=n.query,i=n.queryExpansion??n.query_expansion,s=n.rerank,a=D(n.name)??D(r.definition.name)??e;if(!a)return null;let u={providerName:a,...typeof o=="function"?{query:o}:{},...typeof i=="function"?{queryExpansion:i}:{},...typeof s=="function"?{rerank:s}:{}};return!u.query&&!u.queryExpansion&&!u.rerank?null:u}function So(e){let t=D(e.search?.provider),r=Ge(t);return r?.query?{providerName:r.providerName,query:r.query}:null}function Io(e){let t=C(),r=D(e.vector_store?.adapter),n=Kt(t,r);if(!n)return null;let o=n.runtime_definition??n.definition,i=o.query;if(typeof i!="function")return null;let s=o.upsert;return{adapterName:D(o.name)??D(n.definition.name)??r??"extension",query:i,...typeof s=="function"?{upsert:s}:{}}}function xo(e,t,r){let n=Array.isArray(t)?t:t?.hits;if(!Array.isArray(n))throw new h(`Extension search provider "${e}" must return an array of hits or { hits: [...] }`,f.GENERIC_FAILURE);let o=new Set,i=[];for(let s of n){if(typeof s!="object"||s===null)continue;let a=D(s.id),u=s.score;if(!a||typeof u!="number"||!Number.isFinite(u)||o.has(a))continue;let c=r.get(a);if(!c)continue;let l=s.matched_fields,d=Array.isArray(l)&&l.every(m=>typeof m=="string")?[...new Set(l.map(m=>m.trim()).filter(m=>m.length>0))].sort((m,p)=>m.localeCompare(p)):[`provider:${e}`];o.add(a),i.push({item:c.metadata,score:u,matched_fields:d})}return i}function Ro(e,t){let r=[],n=new Map;for(let o of e){if(n.has(o.id))continue;let i=t.get(o.id);i&&(n.set(o.id,o.score),r.push({item:i.metadata,score:o.score,matched_fields:["semantic"]}))}return{semanticHits:r,semanticScores:n}}function Ue(e,t){let r=t.filter(c=>c.exact_id_match===!0);if(r.length===0)return e;let n=new Set(r.map(c=>c.item.id)),o=e.filter(c=>!n.has(c.item.id)),i=o.reduce((c,l)=>Math.max(c,l.score),0),s=r.sort((c,l)=>l.score-c.score),a=i+s.length+1;return[...s.map((c,l)=>({...c,score:a-l,matched_fields:["id"]})),...o]}function Mt(e,t,r,n,o="semantic"){let i=new Map(r.map(d=>[d.item.id,d.score])),s=new Map(r.map(d=>[d.item.id,d.matched_fields])),a=xt(t),u=xt(i),c=new Set([...t.keys(),...i.keys()]),l=1-n;return[...c].map(d=>{let m=e.get(d),p=a.get(d)??0,y=u.get(d)??0,_=p*n+y*l;if(_<=0)return null;let g=new Set;t.has(d)&&g.add(o);for(let w of s.get(d)??[])g.add(w);return{item:m.metadata,score:_,matched_fields:[...g].sort((w,b)=>w.localeCompare(b))}}).filter(d=>d!==null)}function ko(e){let t=e.configuredProvider?.trim().toLowerCase();return t==="bm25"?"explicit":t==="auto"&&!e.hasEmbeddingProvider&&!e.hasExtensionSearchProvider?"auto-fallback":null}function Ao(e){let t=e.filteredDocuments.map(s=>({id:s.metadata.id,text:Qn(Mr(s,{fields:e.corpusFields}))})),r=Vn(t),n=Kn(r,It(e.query),e.bm25Params),o=new Map(e.filteredDocuments.map(s=>[s.metadata.id,s]));if(e.requestedMode==="semantic"){let s=[...n].map(([a,u])=>({item:o.get(a).metadata,score:u,matched_fields:["bm25"]}));return Ue(s,e.keywordHits)}let i=Mt(o,n,e.keywordHits,e.hybridSemanticWeight,"bm25");return Ue(i,e.keywordHits)}function Co(e){let t=new Map;for(let n of e)for(let o of n){let i=t.get(o.id);(!i||o.score>i.score)&&t.set(o.id,o)}let r=[...t.values()];return r.sort((n,o)=>n.score!==o.score?o.score-n.score:n.id.localeCompare(o.id)),r}function To(e){let t=e.metadata,r=Array.isArray(t?.tags)?t.tags.join(" "):"";return[t?.title,t?.description,t?.type,t?.status,r,e.body].map(n=>typeof n=="string"?n.trim():"").filter(n=>n.length>0).join(`
4
- `)}async function Hs(e,t){let r=e.queryExpansion.enabled?On(t,e.queryExpansion.max_queries):[t],n=r.length>0?r:[t];if(!e.queryExpansion.enabled)return n;if(e.queryExpansionExtension?.expand)try{let o=await Promise.resolve(e.queryExpansionExtension.expand({query:t,mode:e.requestedMode,settings:e.settings}));return Un(n,qn(o),e.queryExpansion.max_queries)}catch{return e.warnings.push(`search_query_expansion_provider_failed:${e.queryExpansionExtension.providerName}:using_builtin`),n}return e.queryExpansion.provider&&e.queryExpansion.provider!=="openai"&&e.queryExpansion.provider!=="ollama"&&e.warnings.push(`search_query_expansion_provider_unavailable:${e.queryExpansion.provider}:using_builtin`),n}async function js(e,t,r,n){if(e.extensionVectorAdapter?.query)try{return await Promise.resolve(e.extensionVectorAdapter.query({vector:t,limit:r,settings:e.settings}))}catch(o){if(!e.vectorStore)throw new h(`Extension vector adapter query failed and no built-in fallback store is configured (${o instanceof Error?o.message:String(o)})`,f.GENERIC_FAILURE);return e.warnings.push(`search_vector_adapter_failed:${e.extensionVectorAdapter.adapterName}:using_builtin`),await Ze(e.vectorStore,t,r,n)}if(e.vectorStore)return await Ze(e.vectorStore,t,r,n);throw new h("Semantic search requires either a configured vector store or an extension vector adapter query handler",f.USAGE)}function Os(e,t,r){return[...e].sort((o,i)=>o.score!==i.score?i.score-o.score:o.item.id.localeCompare(i.item.id)).slice(0,r).map(o=>{let i=t.get(o.item.id);return i?{hit:o,text:To(i)}:null}).filter(o=>o!==null)}async function qs(e,t,r){if(!e.rerankExtension?.rerank)return null;try{let n=await Promise.resolve(e.rerankExtension.rerank({query:t,mode:"hybrid",model:e.rerank.model,top_k:e.rerank.top_k,settings:e.settings,candidates:r.map(i=>({id:i.hit.item.id,text:i.text,score:i.hit.score}))})),o=Wn(n);return o.length>0?new Map(o.map(i=>[i.id,i.score])):(e.warnings.push(`search_rerank_provider_invalid_response:${e.rerankExtension.providerName}:using_builtin`),null)}catch{return e.warnings.push(`search_rerank_provider_failed:${e.rerankExtension.providerName}:using_builtin`),null}}async function Us(e,t,r){let n=await qs(e,t,r);if(n)return n;let o=r.map(i=>({id:i.hit.item.id,text:i.text}));try{return await $n(e.provider,e.rerank.model,t,o,e.embeddingTimeoutMs)}catch{return e.warnings.push("search_rerank_failed:using_hybrid_scores"),null}}function Ns(e,t){let r=new Set(t.keys()),n=e.map(o=>{let i=t.get(o.item.id);if(i===void 0)return o;let s=new Set(o.matched_fields);return s.add("rerank"),{...o,score:i,matched_fields:[...s].sort((a,u)=>a.localeCompare(u))}});return n.sort((o,i)=>{let s=r.has(o.item.id),a=r.has(i.item.id);return s!==a?s?-1:1:o.score!==i.score?i.score-o.score:o.item.id.localeCompare(i.item.id)}),n}async function Gs(e,t,r,n){if(!e.rerank.enabled||r.length<=1)return r;let o=Os(r,n,e.rerank.top_k),i=await Us(e,t,o);return i&&i.size>0?Ns(r,i):r}async function Mo(e){let t=Math.max(e.limit??e.maxResults,e.maxResults),r=e.embeddingTimeoutMs!==void 0?{timeout_ms:e.embeddingTimeoutMs}:{},n=e.vectorQueryTimeoutMs!==void 0?{timeout_ms:e.vectorQueryTimeoutMs}:{},o=e.query.trim(),i=await Hs(e,o),s=await Ce(e.provider,i,r),a=await Promise.all(s.map(async y=>await js(e,y,t,n))),u=Co(a),c=new Map(e.filteredDocuments.map(y=>[y.metadata.id,y])),{semanticHits:l,semanticScores:d}=Ro(u,c),m=d.size;if(e.requestedMode==="semantic")return{hits:Ue(l,e.keywordHits),vectorMatchCount:m};let p=await Gs(e,o,Mt(c,d,e.keywordHits,e.hybridSemanticWeight),c);return{hits:Ue(p,e.keywordHits),vectorMatchCount:m}}async function Fo(e,t,r,n){let o=zt(C()),i=async(c,l,d)=>{let m=async(p,y)=>{await te({path:p,scope:"project"});let _=await qe.readFile(p,"utf8");return Jt(_,{format:y,schema:n,extensionFieldNames:o,onWarning:w=>s.push(w)}).body};try{return await m(l,d)}catch{let p=d==="toon"?"json_markdown":"toon",y=B(e,c.type,c.id,p,r);try{return await m(y,p)}catch{return s.push(`item_list_item_read_failed:${kt.relative(e,y)}`),""}}},s=[],a=await Ir(e,t,r,s,n),u=[];if(a.length===0){let c=await Rr(e,t,r,s,n);for(let l of c){let d=B(e,l.type,l.id,t,r),m=await i(l,d,t);u.push({metadata:l,body:m})}return{documents:u,warnings:[...new Set(s)].sort((l,d)=>l.localeCompare(d))}}for(let c of a){if(typeof c.body=="string"){u.push({metadata:c.metadata,body:c.body});continue}let l=await i(c.metadata,c.item_path,c.item_format);u.push({metadata:c.metadata,body:l})}return{documents:u,warnings:[...new Set(s)].sort((c,l)=>c.localeCompare(l))}}function Po(e,t){let r=t.trim();if(r.length===0)return null;if(r==="score")return e.score;if(r==="matched_fields")return e.matched_fields;if(r.startsWith("item.")){let i=r.slice(5);return i.length===0?null:e.item[i]??null}let n=e,o=e.item;return Object.prototype.hasOwnProperty.call(o,r)?o[r]??null:Object.prototype.hasOwnProperty.call(n,r)?n[r]??null:null}function Do(e,t){return t.mode==="full"?e.map(({matched_all_terms:r,exact_id_match:n,...o})=>o):e.map(r=>{let n={};for(let o of t.fields)n[o]=Po(r,o);return n})}function Ws(e){let t=Ge(e.provider??void 0);return t?.queryExpansion?{providerName:t.providerName,expand:t.queryExpansion}:null}function Bs(e){let t=Ge(D(e.search?.provider));return t?.rerank?{providerName:t.providerName,rerank:t.rerank}:null}function $s(e,t){let r=[],n=io(e),o=Object.keys(n.inlineFilters).length>0;if(o&&n.residualQuery.trim().length===0)throw new h("Inline field:value tokens consumed the entire query, leaving no search terms.",f.USAGE,{examples:["pm search auth tag:area:search","pm list --tag area:search --status open"],nextSteps:["Add keyword terms alongside the inline filters, or use pm list for pure tag/status/type/priority filtering."]});let i=o?n.residualQuery:e,s=so(t,n.inlineFilters,r);return{query:i,options:s,inlineWarnings:r,highlight:s.highlight===!0,includeLinked:je(s.includeLinked),titleExact:je(s.titleExact),phraseExact:je(s.phraseExact),matchMode:Hn(typeof s.matchMode=="string"?s.matchMode:void 0),minScoreOverride:jn(s.minScore),countOnly:s.count===!0,tokens:yt(i),normalizedQuery:j(i),limit:Se(s.limit),projection:pt(s,e),modeWasExplicit:typeof s.mode=="string"&&s.mode.trim().length>0}}async function zs(e,t){let r=A(process.cwd(),t.path);await P(r);let n=await F(r),o=Sr(n).settings,i=q(o.schema),s=Q(o.schema);gt(e.projection,s,e.query);let a=br(e.options,s,"search"),u=O(o,C()),c=Cr(o),l=Fr(o,r),d=So(o),m=Io(o),p=Ln(e.options.semanticWeight),y=Nn(o,c.active?.name??null),_=Gn(o,c.active?.model??D(o.search?.embedding_model)??"text-embedding-3-small");return{pmRoot:r,settings:o,statusRegistry:i,runtimeFieldRegistry:s,runtimeFieldFilters:a,typeRegistry:u,maxResults:_t(o),scoreThreshold:e.minScoreOverride??wt(o),semanticWeightProvided:e.options.semanticWeight!==void 0,semanticWeightOverride:p,hybridSemanticWeight:p??vt(o),tuning:bt(o),providerResolution:c,vectorResolution:l,extensionSearchProvider:d,extensionVectorAdapter:m,bm25Mode:ko({configuredProvider:D(o.search?.provider),hasEmbeddingProvider:c.active!==null,hasExtensionSearchProvider:d!==null}),queryExpansion:y,queryExpansionExtension:Ws(y),rerank:_,rerankExtension:Bs(o),effectiveMode:Dn(e.options.mode)}}async function Vs(e,t){let r=await Fo(t.pmRoot,t.settings.item_format??"toon",t.typeRegistry.type_to_folder,t.settings.schema),n=Ee(typeof e.options.status=="string"?e.options.status:void 0,t.statusRegistry,{strict:!0}),o=Me(t.statusRegistry),i=uo(r.documents,e.options,t.typeRegistry,t.runtimeFieldFilters,n,o);return{warnings:r.warnings,allDocuments:r.documents,filteredDocuments:lo(i,e.normalizedQuery,{titleExact:e.titleExact,phraseExact:e.phraseExact||e.matchMode==="exact"})}}async function Ks(e,t,r){let n=new Map;if(!e||t!=="keyword"&&t!=="hybrid")return n;let o=process.cwd(),i=await fo(o,Wt(o)),s=await Promise.all(r.map(async a=>[a.metadata.id,await ho(a,i)]));for(let[a,u]of s)n.set(a,u);return n}async function Qs(e,t,r){let n=await Ks(e.includeLinked,t.effectiveMode,r),o=e.matchMode==="or";return r.map(i=>bo(i,e.tokens,e.normalizedQuery,e.includeLinked,n,t.tuning,t.settings.id_prefix,o)).filter(i=>i!==null).filter(i=>e.matchMode!=="and"||i.matched_all_terms===!0)}function Zn(e,t){return Eo(e.query,e.effectiveMode,e.matchMode,e.options,e.includeLinked,e.scoreThreshold,e.hybridSemanticWeight,e.queryExpansion,e.rerank,e.projection,e.warnings,e.runtimeFieldFilters,t)}async function Ys(e,t,r,n,o){if(t.bm25Mode===null||t.effectiveMode==="keyword")return null;let i=Ao({requestedMode:t.effectiveMode,query:e.query,filteredDocuments:r,keywordHits:n,corpusFields:Tr(t.settings),bm25Params:Yn(t.settings),hybridSemanticWeight:t.hybridSemanticWeight});return t.bm25Mode==="auto-fallback"&&o.push(`search_${t.effectiveMode}_offline_bm25:no_embedding_provider:using_lexical_bm25`),i}async function Xs(e,t,r,n){if(!t.extensionSearchProvider)return null;let o=t.providerResolution.active!==null&&(t.vectorResolution.active!==null||t.extensionVectorAdapter!==null);try{let i=await Promise.resolve(t.extensionSearchProvider.query({query:e.query,mode:t.effectiveMode,tokens:e.tokens,options:e.options,settings:t.settings,documents:r}));return xo(t.extensionSearchProvider.providerName,i,n)}catch(i){if(!o)throw new h(`Extension search provider "${t.extensionSearchProvider.providerName}" failed: ${i instanceof Error?i.message:String(i)}`,f.GENERIC_FAILURE);return null}}function Js(e,t,r,n){return t.vectorMatchCount>0?t.hits:(n.push(`search_${e}_degraded:no_vector_matches:results_are_lexical`),e==="semantic"?r:t.hits)}async function Zs(e,t,r,n,o){let i=!e.extensionSearchProvider&&e.providerResolution.active!==null&&(e.vectorResolution.active!==null||e.extensionVectorAdapter!==null);o&&i&&await oo(e.pmRoot,r,n),e.extensionSearchProvider||Tt(t,e.providerResolution,e.vectorResolution,e.extensionVectorAdapter!==null)}async function ea(e){let{prepared:t,runtime:r,filteredDocuments:n,keywordHits:o,warnings:i,modeWasExplicit:s}=e,a=o,u=await Ys(t,r,n,o,i),c=r.effectiveMode;if(u!==null||c==="keyword")return{effectiveMode:r.effectiveMode,hits:u??a};try{if(await Zs(r,c,n,i,s),n.length===0||t.limit===0)return{effectiveMode:r.effectiveMode,hits:[]};let l=new Map(n.map(d=>[d.metadata.id,d]));if(a=await Xs(t,r,n,l)??a,a===o){let{provider:d,vectorStore:m}=Tt(c,r.providerResolution,r.vectorResolution,r.extensionVectorAdapter!==null),p=await Mo({requestedMode:c,query:t.query,filteredDocuments:n,keywordHits:o,hybridSemanticWeight:r.hybridSemanticWeight,limit:t.limit,maxResults:r.maxResults,provider:d,vectorStore:m,extensionVectorAdapter:r.extensionVectorAdapter,queryExpansion:r.queryExpansion,queryExpansionExtension:r.queryExpansionExtension,rerank:r.rerank,rerankExtension:r.rerankExtension,warnings:i,settings:r.settings});a=Js(c,p,o,i)}return{effectiveMode:r.effectiveMode,hits:a}}catch(l){return i.push(no(r.effectiveMode,l)),{effectiveMode:"keyword",hits:o}}}function ta(e,t){if(e.projection.mode==="compact"&&e.options.compact===!0)return Rt({query:e.query.trim(),mode:e.effectiveMode,items:[],count:t,total:t,count_only:!0,filters:le({mode:e.effectiveMode,matchMode:e.matchMode,options:e.options,includeLinked:e.includeLinked,titleExact:e.titleExact,phraseExact:e.phraseExact,scoreThreshold:e.scoreThreshold,hybridSemanticWeight:e.hybridSemanticWeight,runtimeFieldFilters:e.runtimeFieldFilters})},e.warnings);let r=e.projection.mode==="full"?null:[...e.projection.fields];return Rt({query:e.query.trim(),mode:e.effectiveMode,items:[],count:t,total:t,count_only:!0,filters:de({effectiveMode:e.effectiveMode,matchMode:e.matchMode,options:e.options,includeLinked:e.includeLinked,titleExact:e.titleExact,phraseExact:e.phraseExact,scoreThreshold:e.scoreThreshold,hybridSemanticWeight:e.hybridSemanticWeight,queryExpansion:e.queryExpansion,rerank:e.rerank,runtimeFieldFilters:e.runtimeFieldFilters}),projection:{mode:e.projection.mode,fields:r},now:x()},e.warnings)}function Rt(e,t){return t.length===0?e:{...e,warnings:t}}function Oe(e,t){return t?{...e,workspace_memory:t}:e}function ra(e,t,r){if(!e.highlight)return{hits:r,projection:e.projection};let n=new Map(t.map(i=>[i.metadata.id,i])),o=r.map(i=>({...i,highlights:_o(n.get(i.item.id),i.matched_fields,e.tokens)}));return e.projection.mode==="full"||e.projection.fields.includes("highlights")?{hits:o,projection:e.projection}:{hits:o,projection:{mode:e.projection.mode,fields:[...e.projection.fields,"highlights"]}}}function na(e,t,r,n,o,i){let s=n<r?{total:r}:{};if(e.projection.mode==="compact"&&e.options.compact===!0)return Rt({query:e.query.trim(),mode:e.effectiveMode,items:t,count:t.length,...s,...i,filters:le({mode:e.effectiveMode,matchMode:e.matchMode,options:e.options,includeLinked:e.includeLinked,titleExact:e.titleExact,phraseExact:e.phraseExact,scoreThreshold:e.scoreThreshold,hybridSemanticWeight:e.hybridSemanticWeight,runtimeFieldFilters:e.runtimeFieldFilters})},e.warnings);let a=o.mode==="full"?null:[...o.fields];return{query:e.query.trim(),mode:e.effectiveMode,items:t,count:t.length,...s,...i,filters:de({effectiveMode:e.effectiveMode,matchMode:e.matchMode,options:e.options,includeLinked:e.includeLinked,titleExact:e.titleExact,phraseExact:e.phraseExact,scoreThreshold:e.scoreThreshold,hybridSemanticWeight:e.hybridSemanticWeight,queryExpansion:e.queryExpansion,rerank:e.rerank,runtimeFieldFilters:e.runtimeFieldFilters}),projection:{mode:o.mode,fields:a},now:x(),...e.warnings.length>0?{warnings:e.warnings}:{}}}function oa(e){if(e.after!==void 0&&e.count===!0)throw new h("Search --after cannot be combined with --count.",f.USAGE)}async function Lo(e,t,r){oa(t);let n=$s(e,t),o=await zs(n,r),i=await Vs(n,o),s=i.warnings;s.push(...n.inlineWarnings);let a=await an(i.allDocuments.map(E=>E.metadata),{pmRoot:o.pmRoot,statusRegistry:o.statusRegistry,now:x()});s.push(...a.warnings);let u=cn(a,n.query);o.effectiveMode==="hybrid"&&o.semanticWeightProvided&&o.semanticWeightOverride===void 0&&s.push("search_hybrid_semantic_weight_override_invalid:using_settings_default");let c={query:n.query,matchMode:n.matchMode,options:n.options,includeLinked:n.includeLinked,titleExact:n.titleExact,phraseExact:n.phraseExact,scoreThreshold:o.scoreThreshold,hybridSemanticWeight:o.hybridSemanticWeight,queryExpansion:o.queryExpansion,rerank:o.rerank,projection:n.projection,warnings:s,runtimeFieldFilters:o.runtimeFieldFilters};if(o.effectiveMode==="keyword"&&(i.filteredDocuments.length===0||n.limit===0&&!n.countOnly))return Oe(Zn({...c,effectiveMode:o.effectiveMode},n.countOnly),u);let l=await Qs(n,o,i.filteredDocuments),d=await ea({prepared:n,runtime:o,filteredDocuments:i.filteredDocuments,keywordHits:l,warnings:s,modeWasExplicit:n.modeWasExplicit});if(d.effectiveMode!=="keyword"&&d.hits.length===0&&(i.filteredDocuments.length===0||n.limit===0&&!n.countOnly))return Oe(Zn({...c,effectiveMode:d.effectiveMode},n.countOnly),u);let m=d.hits.filter(E=>E.exact_id_match===!0||E.score>=o.scoreThreshold),p=vo(m,o.statusRegistry),y=p.length,_=Pn({sorted:p,query:n.query,mode:d.effectiveMode,searchOptions:n.options,limit:n.limit??o.maxResults}),g={...c,effectiveMode:d.effectiveMode};if(n.countOnly)return Oe(ta(g,y),u);let{hits:w,projection:b}=ra(n,i.filteredDocuments,_.limited),v=Do(w,b);return Oe(na(g,v,y,_.limited.length,b,_.pageExtras),u)}import ia from"node:fs/promises";import Ft from"node:path";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="7f6cfdef-5456-5716-9067-8ccadf077f5f")}catch{}})();var sa=Ft.join("search","eval-queries.json"),Pt={schema:U,examples:[JSON.stringify(He)],nextSteps:["Create a git-tracked golden-query JSON file that follows the schema, then re-run pm eval."]},aa=new Set(["keyword","semantic","hybrid"]),ca=e=>{if(e===void 0)return"keyword";let t=e.trim().toLowerCase();if(!aa.has(t))throw new h("Eval --mode must be one of keyword|semantic|hybrid",f.USAGE);return t},la=e=>{if(e===void 0||e==="")return Cn;let t=he(e);if(t===null)throw new h("Eval --k must be a positive integer",f.USAGE);return t},da=e=>{if(e===void 0||e==="")return;let t=String(e).trim(),r=Number(t);if([t.length===0,!Number.isFinite(r),r<0,r>1].includes(!0))throw new h("Eval --fail-under must be a number in the range [0, 1]",f.USAGE);return r},N=e=>Math.round(e*1e4)/1e4,ua=async e=>{try{return await ia.readFile(e,"utf8")}catch{throw new h(`Eval query set not found at ${e}`,f.NOT_FOUND,{...Pt,examples:[`echo '${JSON.stringify(He)}' > ${e}`,"pm eval --queries ./my-eval.json"]})}},ma=(e,t)=>{try{return JSON.parse(e)}catch(r){throw new h(`Eval query set at ${t} is not valid JSON: ${r instanceof Error?r.message:String(r)}`,f.USAGE,Pt)}},fa=e=>{try{return ft(e)}catch(t){throw new h(t instanceof Error?t.message:String(t),f.USAGE,Pt)}},ha=async e=>fa(ma(await ua(e),e)),pa=(e,t)=>t?Ft.resolve(process.cwd(),t):Ft.join(e,sa),ga=async(e,t,r,n)=>{let o=e.mode??t,s=(await Lo(e.query,{mode:o,limit:String(r),fields:"id"},n)).items.map(u=>u.id).filter(u=>typeof u=="string"),a=Tn(s,new Set(e.relevant_ids),r);return{metrics:a,report:{query:e.query,mode:o,relevant_total:a.relevant_total,retrieved_relevant:a.retrieved_relevant,ndcg:N(a.ndcg),mrr:N(a.mrr),precision:N(a.precision),recall:N(a.recall)}}},ya=(e,t,r,n)=>{let o=Mn(r);return{k:e,query_count:t.length,aggregate:{ndcg:N(o.ndcg),mrr:N(o.mrr),precision:N(o.precision),recall:N(o.recall)},queries:t,...n!==void 0?{fail_under:n}:{},passed:n===void 0||o.ndcg>=n}},md=async(e,t)=>{let r=A(process.cwd(),t.path);await P(r);let n=la(e.k),o=ca(e.mode),i=da(e.failUnder),s=pa(r,e.queries),a=await ha(s),u=[],c=[];for(let l of a.queries){let{report:d,metrics:m}=await ga(l,o,n,t);c.push(m),u.push(d)}return ya(n,u,c,i)};import Dt from"node:fs/promises";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="d562ab68-1891-54cc-8256-57cc1121b9ce")}catch{}})();function Lt(e){return Array.isArray(e)?e:typeof e=="string"?[e]:[]}function jo(e){let t=[];for(let r of e)t.includes(r)||t.push(r);return t.includes("g")||t.push("g"),t.join("")}function Oo(e){let t=e.trim();if(t.length===0)throw new h("history-redact --regex requires a non-empty pattern.",f.USAGE);let r=t,n="g";if(t.startsWith("/")&&t.length>1){let o=t.lastIndexOf("/");o>0&&(r=t.slice(1,o),n=jo(t.slice(o+1)))}if(r.length===0)throw new h("history-redact --regex cannot use an empty pattern.",f.USAGE);try{new RegExp(r,n)}catch{throw new h("Invalid --regex value; provide a valid JavaScript regular expression.",f.USAGE)}return{kind:"regex",source:r,flags:n}}function qo(e,t){let r=[...new Set(Lt(e).map(i=>i.trim()))].filter(i=>i.length>0).map(i=>({kind:"literal",value:i})),n=[...new Set(Lt(t).map(i=>i.trim()))].filter(i=>i.length>0).map(Oo),o=[...r,...n];if(o.length===0)throw new h("history-redact requires at least one matcher via --literal or --regex.",f.USAGE,{code:"missing_required_argument",required:"Provide --literal <value> and/or --regex <pattern>.",examples:['pm history-redact pm-a1b2 --literal "[redacted_path_prefix]/private"','pm history-redact pm-a1b2 --regex "/192\\\\.168\\\\.[0-9.]+/g" --replacement "[scrubbed_ip]"']});return o}function Uo(e,t,r){if(t.length===0)return{value:e,replacements:0};let n=0,o=0;for(;n<=e.length;){let i=e.indexOf(t,n);if(i===-1)break;o+=1,n=i+Math.max(1,t.length)}return o===0?{value:e,replacements:0}:{value:e.split(t).join(r),replacements:o}}function No(e,t,r){let n=new RegExp(t.source,t.flags),o=[...e.matchAll(n)];return o.length===0?{value:e,replacements:0}:{value:e.replace(n,r),replacements:o.length}}function Ht(e,t,r){let n=e,o=0;for(let i of t){let s=i.kind==="literal"?Uo(n,i.value,r):No(n,i,r);n=s.value,o+=s.replacements}return{value:n,replacements:o}}function ue(e,t,r){if(typeof e=="string")return Ht(e,t,r);if(Array.isArray(e)){let n=0;return{value:e.map(i=>{let s=ue(i,t,r);return n+=s.replacements,s.value}),replacements:n}}if(typeof e=="object"&&e!==null){let n=0,o={};for(let[i,s]of Object.entries(e)){let a=ue(s,t,r);n+=a.replacements,o[i]=a.value}return{value:o,replacements:n}}return{value:e,replacements:0}}function Ho(e,t,r){let n=0;return{patch:e.map(i=>{if(!Object.prototype.hasOwnProperty.call(i,"value"))return i;let s=ue(i.value,t,r);return n+=s.replacements,s.replacements>0?{...i,value:s.value}:i}),replacements:n}}function _a(e){let t=structuredClone(Ke),r=0,n=0;for(let o=0;o<e.length;o+=1){let i=e[o];oe(t)!==i.before_hash&&(r+=1),t=J(t,i.patch,o+1,i.op),oe(t)!==i.after_hash&&(n+=1)}return{hashMismatchesBefore:r,hashMismatchesAfter:n,finalDocument:t}}function wa(e,t,r){let n=0,o=!1,i=!1,s=e.message;if(typeof e.message=="string"){let c=Ht(e.message,t,r);s=c.value,n+=c.replacements,c.replacements>0&&(o=!0)}let a=Ho(e.patch,t,r);n+=a.replacements,o||=a.replacements>0;let u=e.reanchor_evidence?.map(c=>{let l=c.patch?Ho(c.patch,t,r):{patch:void 0,replacements:0},d=c.record?ue(c.record,t,r):{value:void 0,replacements:0};n+=l.replacements,n+=d.replacements;let m=l.replacements>0||d.replacements>0;if(o||=m,!m)return c;i=!0;let{patch:p,record:y,record_hash:_,record_hash_version:g,...w}=c;return l.replacements>0?w:{...w,patch:c.patch}});return{entry:{...e,message:s,patch:a.patch,...u?{reanchor_evidence:u}:{}},replacements:n,changed:o,reanchorEvidenceRedacted:i}}function va(e,t,r){let n=structuredClone(Ke),o=0,i=0,s=[];for(let a=0;a<e.length;a+=1){let u=e[a],c=dr(u);if(!c.ok)throw new h(`history-redact refuses invalid immutable record ${a+1} (${c.error}).`,f.GENERIC_FAILURE);let l=wa(u,t,r);i+=l.replacements,l.changed&&(o+=1);let d=oe(n);n=J(n,l.entry.patch,a+1,l.entry.op);let m=oe(n);s.push(ur(u,{...l.entry,before_hash:d,after_hash:m},{retainPriorRecord:l.changed,retainPriorRecordHash:!l.changed}))}return{entries:s,finalDocument:n,entriesChanged:o,replacements:i}}function Go(e){return Object.keys(e.metadata).length>0}function ba(e){if(!Go(e.finalDocument))return{raw:null,path:null,document:null};let t=ye(M(e.finalDocument),{schema:e.settings.schema});if(t.metadata.id!==e.subject.id)throw new h("history-redact would change the item id; narrow your patterns.",f.USAGE);return{document:t,path:B(e.pmRoot,t.metadata.type,e.subject.id,"toon",e.typeToFolder),raw:ge(t,{format:"toon",schema:e.settings.schema})}}function Ea(e,t){return typeof e.message=="string"&&e.message.trim().length>0?e.message:`history-redact replaced ${t.replacements} match(es) across ${t.entriesChanged} entr${t.entriesChanged===1?"y":"ies"}.`}function Sa(e){let t=[...e.rewritten.entries];if(e.dryRun||!e.changed)return{rewrittenEntries:t,auditEntryAdded:!1};let r=e.nextItemDocument??M(e.rewritten.finalDocument);return t.push($({nowIso:x(),author:e.author,op:"history_redact",before:r,after:r,message:e.message})),{rewrittenEntries:t,auditEntryAdded:!0}}function Ia(e){let t=[];return{applyRewrite:async({historyRawUnderLock:r})=>{let n=await Ie(e.pmRoot,e.author),o=new Set;e.currentItem.path&&o.add(e.currentItem.path),e.nextItem.path&&o.add(e.nextItem.path);let i=new Map;e.currentItem.path&&e.currentItem.raw!==null&&i.set(e.currentItem.path,e.currentItem.raw);let s=()=>{};try{try{e.nextItem.path&&e.nextItem.raw!==null&&e.nextItem.raw!==e.currentItem.raw&&await L(e.nextItem.path,e.nextItem.raw),e.currentItem.path&&(!e.nextItem.path||e.nextItem.path!==e.currentItem.path)&&await Dt.rm(e.currentItem.path,{force:!0}),await L(e.subject.historyPath,gr(e.rewrittenEntries))}catch(u){try{await xa(e.subject.historyPath,r,o,i)}finally{await Ve(e.subject.historyPath)}throw u}await Ve(e.subject.historyPath);let a=e.nextItem.path??e.currentItem.path;a&&(t=await xe({pmRoot:e.pmRoot,preferredFormat:e.settings.item_format,typeToFolder:e.typeRegistry.type_to_folder,schema:e.settings.schema,itemPath:a,...e.currentItem.path?{previousItemPath:e.currentItem.path}:{},document:e.nextItem.document}))}finally{await n().catch(a=>{s=()=>{throw a}})}s()},afterWrite:async()=>[...t,...await Ra(e.subject.historyPath,[e.nextItem.path,e.currentItem.path])]}}async function xa(e,t,r,n){t===null?await Dt.rm(e,{force:!0}):await L(e,t);for(let o of r){let i=n.get(o);i===void 0?await Dt.rm(o,{force:!0}):await L(o,i)}}async function Ra(e,t){let r=[],n=new Set(t.filter(o=>o!==null));for(let o of n)r.push(...await K({path:o,scope:"project",op:"history_redact"}));return r.push(...await K({path:e,scope:"project",op:"history_redact:history"})),r}async function Td(e,t,r){let{pmRoot:n,settings:o,typeRegistry:i}=await se(r.path),s=t.replacement??"",a=s.length===0,u=a?"[redacted]":s,c=qo(t.literal,t.regex),l=await z(n,e,o,i.type_to_folder);return Te({pmRoot:n,subject:l,settings:o,typeRegistry:i,operation:"history-redact",options:t,transform:d=>ka({pmRoot:n,subject:l,settings:o,typeRegistry:i,options:t,rules:c,replacement:u,replacementIsDefault:a},d)})}function ka(e,t){let{pmRoot:r,subject:n,settings:o,typeRegistry:i,options:s,rules:a,replacement:u,replacementIsDefault:c}=e,l=t.entries,d=_a(l),m=va(l,a,u),p=d.hashMismatchesBefore+d.hashMismatchesAfter,y=!!s.dryRun,_=m.replacements>0,g=[];p>0&&g.push(`history_redact_preexisting_hash_mismatches:${p}`),_||g.push("history_redact_no_matches");let w={raw:t.loadedItem?.raw??null,path:n.located?.itemPath??null,document:t.loadedItem?.document??null},b=ba({pmRoot:r,subject:n,settings:o,typeToFolder:i.type_to_folder,finalDocument:m.finalDocument}),v=(w.path??null)!==(b.path??null)||(w.raw??null)!==(b.raw??null),E=t.author,R=Ea(s,m),{rewrittenEntries:I,auditEntryAdded:S}=Sa({rewritten:m,dryRun:y,changed:_,nextItemDocument:b.document,author:E,message:R});return{changed:_,rewrittenEntries:I,...Ia({pmRoot:r,subject:n,settings:o,typeRegistry:i,currentItem:w,nextItem:b,author:E,rewrittenEntries:I}),report:({verification:k,warnings:G})=>({id:n.id,dry_run:y,changed:_,patterns:{literal_count:a.filter(W=>W.kind==="literal").length,regex_count:a.filter(W=>W.kind==="regex").length,total_count:a.length,replacement_is_default:c},history:{path:n.historyPath,entries_scanned:l.length,entries_changed:m.entriesChanged,replacements:m.replacements,hash_mismatches_before:d.hashMismatchesBefore,hash_mismatches_after:d.hashMismatchesAfter,preexisting_hash_mismatches:p,audit_entry_added:S,verify_ok:k.ok,verify_errors:k.errors},item:{existed_before:w.path!==null,exists_after:b.path!==null,path_before:w.path,path_after:b.path,changed:v},warnings:[...new Set([...g,...G])].sort((W,me)=>W.localeCompare(me)),generated_at:x()})}}var Md={applyLiteralRule:Uo,applyRegexRule:No,buildRedactionRules:qo,hasItemMetadata:Go,normalizeRegexFlags:jo,normalizeStringArrayInput:Lt,parseRegexRule:Oo,redactStringValue:Ht,redactUnknownValue:ue};import Bo from"node:fs/promises";import $o from"node:path";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="d51da34a-9f37-5441-91f0-15a16b601709")}catch{}})();function Aa(e,t,r){let n=new Set,o=[];for(let i of e){let s=i.trim();if(s.length===0||n.has(s))continue;n.add(s);let a=t.get(s);if(a===void 0){o.push({id:s,entries:0,selected:!1,skip_reason:"no_stream"});continue}if(a.entries<=r){o.push({id:s,entries:a.entries,selected:!1,skip_reason:"already_compact"});continue}o.push({id:s,entries:a.entries,selected:!0,skip_reason:null})}return o}function Ca(e,t){let r=[...e].sort((o,i)=>i.entries-o.entries||o.id.localeCompare(i.id)),n=[];for(let o of r){if(t.scope==="closed"&&o.bucket!=="closed"){n.push({id:o.id,entries:o.entries,selected:!1,skip_reason:"scope_mismatch"});continue}if(o.entries<=t.minEntries){n.push({id:o.id,entries:o.entries,selected:!1,skip_reason:"already_compact"});continue}if(t.allOver!==void 0&&o.entries<=t.allOver){n.push({id:o.id,entries:o.entries,selected:!1,skip_reason:"below_threshold"});continue}n.push({id:o.id,entries:o.entries,selected:!0,skip_reason:null})}return n}function Wo(e,t){if(t.ids!==void 0&&t.ids.length>0){let r=new Map(e.map(n=>[n.id,n]));return Aa(t.ids,r,t.minEntries)}return Ca(e,t)}(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="d6824edc-ca22-5900-b43b-645135e2562d")}catch{}})();function Ta(e,t){if(e===void 0)return{kind:"default",raw:null,compactCount:t.length,retainedCount:0};let r=e.trim();if(r.length===0)throw new h("history-compact --before requires a non-empty value.",f.USAGE);if(/^\d+$/.test(r)){let i=Number.parseInt(r,10),s=H(t);if(!Number.isSafeInteger(i)||i<s+1||i>s+t.length+1)throw new h(`history-compact --before version must be between ${s+1} and ${s+t.length+1}.`,f.USAGE);let a=i-s-1;return{kind:"version",raw:r,compactCount:a,retainedCount:t.length-a}}let n=Date.parse(r);if(!Number.isFinite(n))throw new h(`Invalid history-compact --before value "${e}". Use a version number or ISO timestamp.`,f.USAGE);let o=0;for(let[i,s]of t.entries()){let a=Date.parse(s.ts);if(!Number.isFinite(a))throw new h(`History for this item contains invalid timestamp at entry ${i+1}.`,f.GENERIC_FAILURE);if(a>=n)break;o+=1}return{kind:"timestamp",raw:r,compactCount:o,retainedCount:t.length-o}}function Ma(e,t){let r=we(),n=we();for(let o=0;o<e.length;o+=1){let i=e[o];r=J(r,i.patch,o+1,i.op),o+1===t&&(n=structuredClone(r))}return{checkpoint:n,finalReplay:r}}function Fa(e,t){if(!e)return{loadedItem:null,currentItemRawBeforeLock:null,matchedChainBefore:null};let r=t[t.length-1];return{loadedItem:e,currentItemRawBeforeLock:e.raw,matchedChainBefore:ar.some(n=>(r.item_hash_version===void 0||r.item_hash_version===n)&&fr(ie(e.document),n).includes(r.after_hash))}}function Pa(e,t){return typeof e.message=="string"&&e.message.trim().length>0?e.message:t.raw===null?`history-compact compacted full stream (${t.compactCount} entr${t.compactCount===1?"y":"ies"}).`:`history-compact compacted ${t.compactCount} entr${t.compactCount===1?"y":"ies"} before ${t.raw}.`}function Da(e){return e.raw===null?`history-compact baseline snapshot after compacting ${e.compactCount} entr${e.compactCount===1?"y":"ies"}.`:`history-compact baseline snapshot before ${e.raw}.`}function La(e){if(!e.changed)return{rewrittenEntries:e.historyEntries,baselineEntryAdded:!1,auditEntryAdded:!1};let{checkpoint:t,finalReplay:r}=Ma(e.historyEntries,e.boundary.compactCount),n=e.historyEntries.slice(e.boundary.compactCount),o=H(e.historyEntries,!0),i=$({nowIso:e.historyEntries[e.boundary.compactCount-1].ts,author:e.author,op:"history_compact_baseline",before:M(we()),after:M(t),message:Da(e.boundary),context:{history_compaction:{contract_version:1,version_offset:o===null?null:o+e.boundary.compactCount-1,checkpoint_timestamp_semantics:"last_compacted_entry",pruned_entry_count:e.boundary.compactCount,pruned_stream_digest:cr(e.historyEntries.slice(0,e.boundary.compactCount)),retained_proof:"stream_digest_and_checkpoint",limitation:"individual_pruned_entries_require_pre_compaction_stream"}}}),s=e.historyEntries[e.boundary.compactCount-1],a=[lr({...i,before_hash:e.historyEntries[0].before_hash,after_hash:s.after_hash,item_hash_version:s.item_hash_version}),...n];return e.dryRun||a.push($({nowIso:x(),author:e.author,op:"history_compact",before:M(r),after:M(r),message:Pa(e.options,e.boundary)})),{rewrittenEntries:a,baselineEntryAdded:!0,auditEntryAdded:!e.dryRun}}async function Ha(e,t,r){let{pmRoot:n,settings:o,typeRegistry:i}=await se(r.path),s=await z(n,e,o,i.type_to_folder);return Te({pmRoot:n,subject:s,settings:o,typeRegistry:i,operation:"history-compact",options:t,transform:a=>ja(s,t,a)})}function ja(e,t,r){let n=e.historyPath,o=r.entries,i=r.verification;if(!i.ok)throw new h(`history-compact requires a valid history chain (${i.errors.join(", ")}). Run pm history-repair ${e.id} first.`,f.CONFLICT);let s=Ta(t.before,o),a=s.compactCount>0,u=!!t.dryRun,c=r.author,l=[];a||l.push("history_compact_noop_before_boundary");let d=Fa(r.loadedItem,o);d.matchedChainBefore===!1&&l.push("history_compact_item_chain_mismatch");let{rewrittenEntries:m,baselineEntryAdded:p,auditEntryAdded:y}=La({historyEntries:o,boundary:s,changed:a,dryRun:u,author:c,options:t}),_=H(o,!0),g=s.retainedCount>0&&_!==null?_+s.compactCount+1:null;return{changed:a,rewrittenEntries:m,report:({verification:w,warnings:b})=>({id:e.id,dry_run:u,changed:a,compact_boundary:{kind:s.kind,before:s.raw,entries_compacted:s.compactCount,entries_retained:s.retainedCount,first_retained_entry:g},history:{path:n,entries_scanned:o.length,entries_after:m.length,baseline_entry_added:p,audit_entry_added:y,verify_ok:w.ok,verify_errors:w.errors},item:{exists:e.located!==null,path:e.located?.itemPath??null,matched_chain_before:d.matchedChainBefore},warnings:[...new Set([...l,...b])].sort((v,E)=>v.localeCompare(E)),generated_at:x()})}}var Oa=3;function qa(e){for(let r of["allOver","minEntries"]){let n=e[r];if(n!==void 0&&(!Number.isSafeInteger(n)||n<0))throw new h(`history-compact ${r} must be a non-negative safe integer.`,f.USAGE)}let t=Yt(e.ids);if(e.ids!==void 0&&t==="")throw new h("history-compact ids requires at least one valid item ID.",f.USAGE,{code:"bulk_ids_input_empty",required:"Provide one or more string or finite numeric IDs; non-finite and unsupported selector values are rejected."});return{...e,ids:t===void 0?void 0:Qt(t)}}function Jd(e,t){let r=t.ids!==void 0&&t.ids.length>0,n=t.allOver!==void 0||t.scope!==void 0;if((e!==void 0?1:0)+(r?1:0)+(n?1:0)===0)throw new h("history-compact: provide an item <id>, or a bulk selector (--ids, --all-over <N>, --closed, or --all-streams).",f.USAGE);if(e!==void 0&&(r||n))throw new h("history-compact: <id> and bulk selectors (--ids/--all-over/--closed/--all-streams) are mutually exclusive; pass one item id, or use bulk mode without a positional id.",f.USAGE);if(r&&n)throw new h("history-compact: --ids is mutually exclusive with --all-over/--closed/--all-streams; pass an explicit id list or a scan selector, not both.",f.USAGE)}function Ua(e){let t=0;for(let r of e.split(/\r?\n/))r.trim().length>0&&(t+=1);return t}async function Na(e){let t=q(e.settings.schema),r=Me(t),n=await Ae(e.pmRoot,e.settings.item_format,e.typeToFolder,void 0,e.settings.schema),o=new Map(n.map(c=>[c.id,r.classify(c.status)])),i=$o.join(e.pmRoot,"history"),s=[],a=[];if(!await fe(i))return{candidates:s,preselectionErrors:a};let u=(await Bo.readdir(i)).filter(c=>c.endsWith(".jsonl")).sort((c,l)=>c.localeCompare(l));for(let c of u){let l=$o.join(i,c),d=c.slice(0,-6);try{let m=await Bo.readFile(l,"utf8");await te({path:l,scope:"project"}),s.push({id:d,entries:Ua(m),bucket:o.get(d)??null})}catch(m){a.push({id:d,outcome:"errored",entries_before:0,entries_after:null,skip_reason:null,changed:!1,error:m instanceof Error?m.message:String(m)})}}return{candidates:s,preselectionErrors:a}}async function Ga(e){if(!e.row.selected)return{selected:!1,compacted:!1,errored:!1,result:{id:e.row.id,outcome:"skipped",entries_before:e.row.entries,entries_after:null,skip_reason:e.row.skip_reason,changed:!1,error:null}};try{let t=await Ha(e.row.id,{dryRun:e.dryRun,author:e.options.author,message:e.options.message,force:e.options.force},e.global);return{selected:!0,compacted:!0,errored:!1,result:{id:e.row.id,outcome:"compacted",entries_before:e.row.entries,entries_after:t.history.entries_after,skip_reason:null,changed:t.changed,error:null}}}catch(t){return{selected:!0,compacted:!1,errored:!0,result:{id:e.row.id,outcome:"errored",entries_before:e.row.entries,entries_after:null,skip_reason:null,changed:!1,error:t instanceof Error?t.message:String(t)}}}}async function Zd(e,t){let r=qa(e),{pmRoot:n,settings:o,typeRegistry:i}=await se(t.path),{candidates:s,preselectionErrors:a}=await Na({pmRoot:n,settings:o,typeToFolder:i.type_to_folder}),u=r.ids!==void 0&&r.ids.length>0?"ids":"scan",c=e.minEntries??Oa,l=o.history.compact_policy,d=u==="scan"&&e.allOver===void 0&&l.enabled,m=e.allOver??(d?l.max_entries:void 0),p=Wo(s,{ids:r.ids,scope:e.scope,minEntries:c,allOver:m}),y=!!e.dryRun,_=[...a],g={streams_considered:s.length+a.length,selected:0,items_compacted:0,items_skipped:0,items_errored:a.length};for(let w of p){let b=await Ga({row:w,options:r,dryRun:y,global:t});if(_.push(b.result),!b.selected){g.items_skipped+=1;continue}g.selected+=1,b.compacted&&(g.items_compacted+=1),b.errored&&(g.items_errored+=1)}return{bulk:!0,dry_run:y,mode:u,scope:e.scope??null,criteria:{min_entries:c,all_over:m??null,policy_threshold_applied:d},totals:g,results:_,generated_at:x()}}export{Wa as a,Qa as b,Ya as c,dc as d,bc as e,Sn as f,In as g,xn as h,Ii as i,lt as j,Wc as k,Bc as l,U as m,$i as n,He as o,ft as p,le as q,de as r,Zi as s,Pn as t,_t as u,wt as v,vt as w,bt as x,to as y,ro as z,vs as A,bs as B,ed as C,Lo as D,sa as E,md as F,Td as G,Md as H,Ha as I,Oa as J,Jd as K,Zd as L};
5
- //# sourceMappingURL=chunk-3BZZA6A3.js.map