@unbrained/pm-cli 2026.5.12 → 2026.5.18

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 (407) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/AGENTS.md +78 -457
  3. package/CHANGELOG.md +22 -0
  4. package/CONTRIBUTING.md +1 -0
  5. package/PRD.md +7 -28
  6. package/README.md +8 -14
  7. package/dist/cli/argv-utils.js +4 -1
  8. package/dist/cli/argv-utils.js.map +1 -1
  9. package/dist/cli/bootstrap-args.js +4 -1
  10. package/dist/cli/bootstrap-args.js.map +1 -1
  11. package/dist/cli/commander-usage.js +32 -1
  12. package/dist/cli/commander-usage.js.map +1 -1
  13. package/dist/cli/commands/activity.js +23 -5
  14. package/dist/cli/commands/activity.js.map +1 -1
  15. package/dist/cli/commands/aggregate.js +5 -2
  16. package/dist/cli/commands/aggregate.js.map +1 -1
  17. package/dist/cli/commands/append.js +4 -1
  18. package/dist/cli/commands/append.js.map +1 -1
  19. package/dist/cli/commands/calendar.js +9 -3
  20. package/dist/cli/commands/calendar.js.map +1 -1
  21. package/dist/cli/commands/claim.d.ts +3 -0
  22. package/dist/cli/commands/claim.js +19 -3
  23. package/dist/cli/commands/claim.js.map +1 -1
  24. package/dist/cli/commands/close.js +4 -1
  25. package/dist/cli/commands/close.js.map +1 -1
  26. package/dist/cli/commands/comments-audit.js +4 -1
  27. package/dist/cli/commands/comments-audit.js.map +1 -1
  28. package/dist/cli/commands/comments.js +4 -1
  29. package/dist/cli/commands/comments.js.map +1 -1
  30. package/dist/cli/commands/completion.js +98 -2
  31. package/dist/cli/commands/completion.js.map +1 -1
  32. package/dist/cli/commands/config.js +4 -1
  33. package/dist/cli/commands/config.js.map +1 -1
  34. package/dist/cli/commands/context.js +19 -5
  35. package/dist/cli/commands/context.js.map +1 -1
  36. package/dist/cli/commands/contracts.d.ts +9 -0
  37. package/dist/cli/commands/contracts.js +205 -49
  38. package/dist/cli/commands/contracts.js.map +1 -1
  39. package/dist/cli/commands/create.js +88 -9
  40. package/dist/cli/commands/create.js.map +1 -1
  41. package/dist/cli/commands/dedupe-audit.js +4 -1
  42. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  43. package/dist/cli/commands/delete.js +4 -1
  44. package/dist/cli/commands/delete.js.map +1 -1
  45. package/dist/cli/commands/deps.js +4 -1
  46. package/dist/cli/commands/deps.js.map +1 -1
  47. package/dist/cli/commands/docs.js +4 -1
  48. package/dist/cli/commands/docs.js.map +1 -1
  49. package/dist/cli/commands/extension.d.ts +7 -2
  50. package/dist/cli/commands/extension.js +360 -64
  51. package/dist/cli/commands/extension.js.map +1 -1
  52. package/dist/cli/commands/files.js +4 -1
  53. package/dist/cli/commands/files.js.map +1 -1
  54. package/dist/cli/commands/gc.js +4 -1
  55. package/dist/cli/commands/gc.js.map +1 -1
  56. package/dist/cli/commands/get.d.ts +7 -3
  57. package/dist/cli/commands/get.js +91 -18
  58. package/dist/cli/commands/get.js.map +1 -1
  59. package/dist/cli/commands/guide.js +6 -8
  60. package/dist/cli/commands/guide.js.map +1 -1
  61. package/dist/cli/commands/health.d.ts +4 -0
  62. package/dist/cli/commands/health.js +31 -8
  63. package/dist/cli/commands/health.js.map +1 -1
  64. package/dist/cli/commands/history-redact.d.ts +42 -0
  65. package/dist/cli/commands/history-redact.js +559 -0
  66. package/dist/cli/commands/history-redact.js.map +1 -0
  67. package/dist/cli/commands/history.d.ts +4 -0
  68. package/dist/cli/commands/history.js +14 -3
  69. package/dist/cli/commands/history.js.map +1 -1
  70. package/dist/cli/commands/index.d.ts +2 -8
  71. package/dist/cli/commands/index.js +6 -9
  72. package/dist/cli/commands/index.js.map +1 -1
  73. package/dist/cli/commands/init-agent-guidance.d.ts +31 -0
  74. package/dist/cli/commands/init-agent-guidance.js +336 -0
  75. package/dist/cli/commands/init-agent-guidance.js.map +1 -0
  76. package/dist/cli/commands/init.d.ts +14 -0
  77. package/dist/cli/commands/init.js +75 -1
  78. package/dist/cli/commands/init.js.map +1 -1
  79. package/dist/cli/commands/learnings.js +4 -1
  80. package/dist/cli/commands/learnings.js.map +1 -1
  81. package/dist/cli/commands/list.d.ts +1 -0
  82. package/dist/cli/commands/list.js +42 -18
  83. package/dist/cli/commands/list.js.map +1 -1
  84. package/dist/cli/commands/metadata-normalizers.js +4 -1
  85. package/dist/cli/commands/metadata-normalizers.js.map +1 -1
  86. package/dist/cli/commands/normalize.js +4 -1
  87. package/dist/cli/commands/normalize.js.map +1 -1
  88. package/dist/cli/commands/notes.js +4 -1
  89. package/dist/cli/commands/notes.js.map +1 -1
  90. package/dist/cli/commands/plan.d.ts +118 -0
  91. package/dist/cli/commands/plan.js +975 -0
  92. package/dist/cli/commands/plan.js.map +1 -0
  93. package/dist/cli/commands/reindex.d.ts +8 -0
  94. package/dist/cli/commands/reindex.js +100 -24
  95. package/dist/cli/commands/reindex.js.map +1 -1
  96. package/dist/cli/commands/restore.js +4 -1
  97. package/dist/cli/commands/restore.js.map +1 -1
  98. package/dist/cli/commands/search.js +58 -27
  99. package/dist/cli/commands/search.js.map +1 -1
  100. package/dist/cli/commands/stats.js +4 -1
  101. package/dist/cli/commands/stats.js.map +1 -1
  102. package/dist/cli/commands/templates.js +4 -1
  103. package/dist/cli/commands/templates.js.map +1 -1
  104. package/dist/cli/commands/test-all.js +4 -1
  105. package/dist/cli/commands/test-all.js.map +1 -1
  106. package/dist/cli/commands/test-runs.js +4 -1
  107. package/dist/cli/commands/test-runs.js.map +1 -1
  108. package/dist/cli/commands/test.js +4 -1
  109. package/dist/cli/commands/test.js.map +1 -1
  110. package/dist/cli/commands/update-many.js +4 -1
  111. package/dist/cli/commands/update-many.js.map +1 -1
  112. package/dist/cli/commands/update.js +114 -71
  113. package/dist/cli/commands/update.js.map +1 -1
  114. package/dist/cli/commands/upgrade.js +6 -3
  115. package/dist/cli/commands/upgrade.js.map +1 -1
  116. package/dist/cli/commands/validate.js +32 -4
  117. package/dist/cli/commands/validate.js.map +1 -1
  118. package/dist/cli/error-guidance.js +5 -2
  119. package/dist/cli/error-guidance.js.map +1 -1
  120. package/dist/cli/extension-command-help.js +4 -1
  121. package/dist/cli/extension-command-help.js.map +1 -1
  122. package/dist/cli/extension-command-options.js +4 -1
  123. package/dist/cli/extension-command-options.js.map +1 -1
  124. package/dist/cli/guide-topics.js +4 -1
  125. package/dist/cli/guide-topics.js.map +1 -1
  126. package/dist/cli/help-content.js +52 -33
  127. package/dist/cli/help-content.js.map +1 -1
  128. package/dist/cli/help-json-payload.js +4 -1
  129. package/dist/cli/help-json-payload.js.map +1 -1
  130. package/dist/cli/main.js +276 -32
  131. package/dist/cli/main.js.map +1 -1
  132. package/dist/cli/migration-gates.js +4 -1
  133. package/dist/cli/migration-gates.js.map +1 -1
  134. package/dist/cli/register-list-query.js +55 -150
  135. package/dist/cli/register-list-query.js.map +1 -1
  136. package/dist/cli/register-mutation.js +277 -261
  137. package/dist/cli/register-mutation.js.map +1 -1
  138. package/dist/cli/register-operations.js +62 -199
  139. package/dist/cli/register-operations.js.map +1 -1
  140. package/dist/cli/register-setup.js +55 -146
  141. package/dist/cli/register-setup.js.map +1 -1
  142. package/dist/cli/registration-helpers.d.ts +2 -2
  143. package/dist/cli/registration-helpers.js +11 -21
  144. package/dist/cli/registration-helpers.js.map +1 -1
  145. package/dist/cli/shared-parsers.js +4 -1
  146. package/dist/cli/shared-parsers.js.map +1 -1
  147. package/dist/cli/telemetry-flush.js +4 -1
  148. package/dist/cli/telemetry-flush.js.map +1 -1
  149. package/dist/cli.js +45 -3
  150. package/dist/cli.js.map +1 -1
  151. package/dist/core/extensions/extension-types.js +4 -1
  152. package/dist/core/extensions/extension-types.js.map +1 -1
  153. package/dist/core/extensions/index.js +4 -1
  154. package/dist/core/extensions/index.js.map +1 -1
  155. package/dist/core/extensions/item-fields.js +4 -1
  156. package/dist/core/extensions/item-fields.js.map +1 -1
  157. package/dist/core/extensions/loader.js +84 -54
  158. package/dist/core/extensions/loader.js.map +1 -1
  159. package/dist/core/extensions/runtime-registrations.js +4 -1
  160. package/dist/core/extensions/runtime-registrations.js.map +1 -1
  161. package/dist/core/fs/fs-utils.js +4 -1
  162. package/dist/core/fs/fs-utils.js.map +1 -1
  163. package/dist/core/fs/index.js +4 -1
  164. package/dist/core/fs/index.js.map +1 -1
  165. package/dist/core/history/history-stream-policy.js +4 -1
  166. package/dist/core/history/history-stream-policy.js.map +1 -1
  167. package/dist/core/history/history.js +4 -1
  168. package/dist/core/history/history.js.map +1 -1
  169. package/dist/core/history/index.js +4 -1
  170. package/dist/core/history/index.js.map +1 -1
  171. package/dist/core/item/id.js +4 -1
  172. package/dist/core/item/id.js.map +1 -1
  173. package/dist/core/item/index.js +4 -1
  174. package/dist/core/item/index.js.map +1 -1
  175. package/dist/core/item/item-format.js +241 -2
  176. package/dist/core/item/item-format.js.map +1 -1
  177. package/dist/core/item/parent-reference-policy.js +4 -1
  178. package/dist/core/item/parent-reference-policy.js.map +1 -1
  179. package/dist/core/item/parse.js +33 -3
  180. package/dist/core/item/parse.js.map +1 -1
  181. package/dist/core/item/sprint-release-format.js +4 -1
  182. package/dist/core/item/sprint-release-format.js.map +1 -1
  183. package/dist/core/item/status.js +4 -1
  184. package/dist/core/item/status.js.map +1 -1
  185. package/dist/core/item/type-registry.js +4 -1
  186. package/dist/core/item/type-registry.js.map +1 -1
  187. package/dist/core/lock/index.js +4 -1
  188. package/dist/core/lock/index.js.map +1 -1
  189. package/dist/core/lock/lock.js +4 -1
  190. package/dist/core/lock/lock.js.map +1 -1
  191. package/dist/core/output/command-aware.js +4 -1
  192. package/dist/core/output/command-aware.js.map +1 -1
  193. package/dist/core/output/output.d.ts +4 -0
  194. package/dist/core/output/output.js +47 -6
  195. package/dist/core/output/output.js.map +1 -1
  196. package/dist/core/packages/manifest.d.ts +27 -1
  197. package/dist/core/packages/manifest.js +87 -1
  198. package/dist/core/packages/manifest.js.map +1 -1
  199. package/dist/core/packages/root.d.ts +3 -0
  200. package/dist/core/packages/root.js +51 -0
  201. package/dist/core/packages/root.js.map +1 -0
  202. package/dist/core/schema/runtime-field-filters.js +4 -1
  203. package/dist/core/schema/runtime-field-filters.js.map +1 -1
  204. package/dist/core/schema/runtime-field-values.js +4 -1
  205. package/dist/core/schema/runtime-field-values.js.map +1 -1
  206. package/dist/core/schema/runtime-schema.js +4 -1
  207. package/dist/core/schema/runtime-schema.js.map +1 -1
  208. package/dist/core/search/cache.js +7 -2
  209. package/dist/core/search/cache.js.map +1 -1
  210. package/dist/core/search/corpus.d.ts +2 -0
  211. package/dist/core/search/corpus.js +77 -2
  212. package/dist/core/search/corpus.js.map +1 -1
  213. package/dist/core/search/embedding-batches.d.ts +13 -1
  214. package/dist/core/search/embedding-batches.js +40 -8
  215. package/dist/core/search/embedding-batches.js.map +1 -1
  216. package/dist/core/search/http-client.js +4 -1
  217. package/dist/core/search/http-client.js.map +1 -1
  218. package/dist/core/search/providers.js +4 -1
  219. package/dist/core/search/providers.js.map +1 -1
  220. package/dist/core/search/semantic-defaults.js +11 -2
  221. package/dist/core/search/semantic-defaults.js.map +1 -1
  222. package/dist/core/search/vector-stores.js +4 -1
  223. package/dist/core/search/vector-stores.js.map +1 -1
  224. package/dist/core/sentry/helpers.js +4 -1
  225. package/dist/core/sentry/helpers.js.map +1 -1
  226. package/dist/core/sentry/instrument.js +10 -13
  227. package/dist/core/sentry/instrument.js.map +1 -1
  228. package/dist/core/shared/command-types.js +4 -1
  229. package/dist/core/shared/command-types.js.map +1 -1
  230. package/dist/core/shared/conflict-markers.js +4 -1
  231. package/dist/core/shared/conflict-markers.js.map +1 -1
  232. package/dist/core/shared/constants.d.ts +2 -2
  233. package/dist/core/shared/constants.js +24 -1
  234. package/dist/core/shared/constants.js.map +1 -1
  235. package/dist/core/shared/errors.js +4 -1
  236. package/dist/core/shared/errors.js.map +1 -1
  237. package/dist/core/shared/index.js +4 -1
  238. package/dist/core/shared/index.js.map +1 -1
  239. package/dist/core/shared/levenshtein.js +4 -1
  240. package/dist/core/shared/levenshtein.js.map +1 -1
  241. package/dist/core/shared/primitives.js +4 -1
  242. package/dist/core/shared/primitives.js.map +1 -1
  243. package/dist/core/shared/serialization.js +4 -1
  244. package/dist/core/shared/serialization.js.map +1 -1
  245. package/dist/core/shared/text-normalization.js +4 -1
  246. package/dist/core/shared/text-normalization.js.map +1 -1
  247. package/dist/core/shared/time.js +4 -1
  248. package/dist/core/shared/time.js.map +1 -1
  249. package/dist/core/store/front-matter-cache.d.ts +8 -1
  250. package/dist/core/store/front-matter-cache.js +28 -14
  251. package/dist/core/store/front-matter-cache.js.map +1 -1
  252. package/dist/core/store/index.js +4 -1
  253. package/dist/core/store/index.js.map +1 -1
  254. package/dist/core/store/item-format-migration.js +4 -1
  255. package/dist/core/store/item-format-migration.js.map +1 -1
  256. package/dist/core/store/item-store.d.ts +2 -0
  257. package/dist/core/store/item-store.js +66 -3
  258. package/dist/core/store/item-store.js.map +1 -1
  259. package/dist/core/store/paths.js +4 -1
  260. package/dist/core/store/paths.js.map +1 -1
  261. package/dist/core/store/settings.js +39 -1
  262. package/dist/core/store/settings.js.map +1 -1
  263. package/dist/core/telemetry/consent.js +4 -1
  264. package/dist/core/telemetry/consent.js.map +1 -1
  265. package/dist/core/telemetry/observability.d.ts +1 -1
  266. package/dist/core/telemetry/observability.js +11 -2
  267. package/dist/core/telemetry/observability.js.map +1 -1
  268. package/dist/core/telemetry/runtime.js +31 -5
  269. package/dist/core/telemetry/runtime.js.map +1 -1
  270. package/dist/core/test/background-runs.js +4 -1
  271. package/dist/core/test/background-runs.js.map +1 -1
  272. package/dist/core/test/item-test-run-tracking.js +4 -1
  273. package/dist/core/test/item-test-run-tracking.js.map +1 -1
  274. package/dist/mcp/server.d.ts +8 -0
  275. package/dist/mcp/server.js +212 -53
  276. package/dist/mcp/server.js.map +1 -1
  277. package/dist/sdk/cli-contracts/commander-mutation-options.d.ts +7 -0
  278. package/dist/sdk/cli-contracts/commander-mutation-options.js +484 -0
  279. package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -0
  280. package/dist/sdk/cli-contracts/commander-types.d.ts +21 -0
  281. package/dist/sdk/cli-contracts/commander-types.js +95 -0
  282. package/dist/sdk/cli-contracts/commander-types.js.map +1 -0
  283. package/dist/sdk/cli-contracts.d.ts +10 -17
  284. package/dist/sdk/cli-contracts.js +232 -282
  285. package/dist/sdk/cli-contracts.js.map +1 -1
  286. package/dist/sdk/index.d.ts +2 -1
  287. package/dist/sdk/index.js +5 -1
  288. package/dist/sdk/index.js.map +1 -1
  289. package/dist/sdk/runtime.d.ts +29 -0
  290. package/dist/sdk/runtime.js +31 -0
  291. package/dist/sdk/runtime.js.map +1 -0
  292. package/dist/types/index.js +4 -1
  293. package/dist/types/index.js.map +1 -1
  294. package/dist/types.d.ts +86 -2
  295. package/dist/types.js +34 -1
  296. package/dist/types.js.map +1 -1
  297. package/docs/AGENT_GUIDE.md +16 -6
  298. package/docs/CLAUDE_CODE_PLUGIN.md +10 -10
  299. package/docs/CODEX_PLUGIN.md +2 -2
  300. package/docs/COMMANDS.md +83 -8
  301. package/docs/CONFIGURATION.md +4 -1
  302. package/docs/EXTENSIONS.md +176 -807
  303. package/docs/QUICKSTART.md +12 -5
  304. package/docs/README.md +7 -6
  305. package/docs/RELEASING.md +6 -4
  306. package/docs/SDK.md +78 -441
  307. package/docs/TESTING.md +2 -2
  308. package/marketplace.json +3 -3
  309. package/package.json +7 -4
  310. package/packages/pm-beads/extensions/beads/index.js +90 -101
  311. package/packages/pm-beads/extensions/beads/index.ts +2 -2
  312. package/packages/pm-beads/extensions/beads/runtime.js +2 -17
  313. package/packages/pm-beads/extensions/beads/runtime.ts +41 -18
  314. package/packages/pm-beads/package.json +34 -1
  315. package/packages/pm-calendar/README.md +13 -0
  316. package/packages/pm-calendar/extensions/calendar/index.js +56 -0
  317. package/packages/pm-calendar/extensions/calendar/index.ts +62 -0
  318. package/packages/pm-calendar/extensions/calendar/manifest.json +7 -0
  319. package/packages/pm-calendar/extensions/calendar/runtime.js +114 -0
  320. package/packages/pm-calendar/extensions/calendar/runtime.ts +123 -0
  321. package/packages/pm-calendar/package.json +51 -0
  322. package/packages/pm-governance-audit/README.md +23 -0
  323. package/packages/pm-governance-audit/extensions/governance-audit/index.js +117 -0
  324. package/packages/pm-governance-audit/extensions/governance-audit/index.ts +118 -0
  325. package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +7 -0
  326. package/packages/pm-governance-audit/extensions/governance-audit/runtime.js +159 -0
  327. package/packages/pm-governance-audit/extensions/governance-audit/runtime.ts +176 -0
  328. package/packages/pm-governance-audit/package.json +52 -0
  329. package/packages/pm-guide-shell/README.md +23 -0
  330. package/packages/pm-guide-shell/extensions/guide-shell/index.js +76 -0
  331. package/packages/pm-guide-shell/extensions/guide-shell/index.ts +81 -0
  332. package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +7 -0
  333. package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +263 -0
  334. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +327 -0
  335. package/packages/pm-guide-shell/package.json +52 -0
  336. package/packages/pm-linked-test-adapters/README.md +24 -0
  337. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.js +101 -0
  338. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.ts +102 -0
  339. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +7 -0
  340. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.js +142 -0
  341. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.ts +173 -0
  342. package/packages/pm-linked-test-adapters/package.json +53 -0
  343. package/packages/pm-search-advanced/README.md +27 -0
  344. package/packages/pm-search-advanced/extensions/search-advanced/index.js +93 -0
  345. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +94 -0
  346. package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +7 -0
  347. package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +120 -0
  348. package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +144 -0
  349. package/packages/pm-search-advanced/package.json +54 -0
  350. package/packages/pm-templates/README.md +20 -0
  351. package/packages/pm-templates/extensions/templates/index.js +101 -0
  352. package/packages/pm-templates/extensions/templates/index.ts +109 -0
  353. package/packages/pm-templates/extensions/templates/manifest.json +7 -0
  354. package/packages/pm-templates/extensions/templates/runtime.js +226 -0
  355. package/packages/pm-templates/extensions/templates/runtime.ts +283 -0
  356. package/packages/pm-templates/package.json +50 -0
  357. package/packages/pm-todos/extensions/todos/index.js +105 -116
  358. package/packages/pm-todos/extensions/todos/index.ts +3 -2
  359. package/packages/pm-todos/extensions/todos/runtime.js +2 -17
  360. package/packages/pm-todos/extensions/todos/runtime.ts +40 -18
  361. package/packages/pm-todos/package.json +35 -1
  362. package/plugins/{pm-cli-claude → pm-claude}/.claude-plugin/plugin.json +2 -2
  363. package/plugins/{pm-cli-claude → pm-claude}/.mcp.json +1 -1
  364. package/plugins/{pm-cli-claude → pm-claude}/README.md +4 -4
  365. package/plugins/{pm-cli-claude → pm-claude}/agents/pm-coordinator.md +1 -1
  366. package/plugins/{pm-cli-claude → pm-claude}/commands/pm-init.md +10 -1
  367. package/plugins/{pm-cli-claude → pm-claude}/commands/pm-planner.md +18 -0
  368. package/plugins/{pm-cli-claude → pm-claude}/scripts/pm-mcp-server.mjs +4 -2
  369. package/plugins/{pm-cli-claude → pm-claude}/skills/pm-planner/SKILL.md +46 -1
  370. package/plugins/{pm-cli-codex → pm-codex}/.codex-plugin/plugin.json +3 -3
  371. package/plugins/{pm-cli-codex → pm-codex}/.mcp.json +1 -1
  372. package/plugins/{pm-cli-codex → pm-codex}/README.md +7 -4
  373. package/plugins/{pm-cli-codex → pm-codex}/scripts/pm-mcp-server.mjs +4 -2
  374. package/plugins/pm-codex/skills/pm-native/SKILL.md +81 -0
  375. package/scripts/finalize-build.mjs +28 -0
  376. package/scripts/prepare-build-cache.mjs +37 -0
  377. package/plugins/pm-cli-codex/skills/pm-native/SKILL.md +0 -57
  378. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-delivery-chain.md +0 -0
  379. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-triage-agent.md +0 -0
  380. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-verification-agent.md +0 -0
  381. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-audit.md +0 -0
  382. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-calendar.md +0 -0
  383. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-close-task.md +0 -0
  384. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-developer.md +0 -0
  385. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-list.md +0 -0
  386. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-new.md +0 -0
  387. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-release.md +0 -0
  388. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-search.md +0 -0
  389. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-start-task.md +0 -0
  390. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-status.md +0 -0
  391. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-triage.md +0 -0
  392. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-workflow.md +0 -0
  393. /package/plugins/{pm-cli-claude → pm-claude}/hooks/hooks.json +0 -0
  394. /package/plugins/{pm-cli-claude → pm-claude}/hooks/session-start.mjs +0 -0
  395. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-audit/SKILL.md +0 -0
  396. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-developer/SKILL.md +0 -0
  397. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-release/SKILL.md +0 -0
  398. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-workflow/SKILL.md +0 -0
  399. /package/plugins/{pm-cli-codex → pm-codex}/assets/pm-cli-small.svg +0 -0
  400. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-audit.md +0 -0
  401. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-close-task.md +0 -0
  402. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-start-task.md +0 -0
  403. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/SKILL.md +0 -0
  404. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/agents/openai.yaml +0 -0
  405. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-native/agents/openai.yaml +0 -0
  406. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/SKILL.md +0 -0
  407. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/agents/openai.yaml +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"migration-gates.js","sourceRoot":"/","sources":["cli/migration-gates.ts"],"names":[],"mappings":"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","sourcesContent":["import { pathExists } from \"../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations, type PreflightRuntimeDecision } from \"../core/extensions/index.js\";\nimport { resolveItemTypeRegistry } from \"../core/item/type-registry.js\";\nimport { migrateItemFilesToFormat } from \"../core/store/item-format-migration.js\";\nimport { getSettingsPath } from \"../core/store/paths.js\";\nimport { readSettingsWithMetadata, writeSettings } from \"../core/store/settings.js\";\nimport { EXIT_CODE } from \"../core/shared/constants.js\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport { toNonEmptyStringOrUndefined } from \"../core/shared/primitives.js\";\nimport { printError } from \"../core/output/output.js\";\n\nexport interface MandatoryMigrationBlocker {\n layer: \"global\" | \"project\";\n name: string;\n id: string;\n status: string;\n}\n\nexport interface WriteGateDecision {\n isMutation: boolean;\n forceCapable: boolean;\n forceRequested: boolean;\n}\n\nexport function resolveMigrationId(definition: Record<string, unknown>, fallbackIndex: number): string {\n const explicit = toNonEmptyStringOrUndefined(definition.id);\n if (explicit) {\n return explicit;\n }\n return `migration-${String(fallbackIndex + 1).padStart(3, \"0\")}`;\n}\n\nexport function resolveNormalizedMigrationStatus(definition: Record<string, unknown>): string {\n const normalized = toNonEmptyStringOrUndefined(definition.status)?.toLowerCase();\n return normalized ?? \"pending\";\n}\n\nfunction isMandatoryMigrationDefinition(definition: Record<string, unknown>): boolean {\n return definition.mandatory === true;\n}\n\nfunction compareMandatoryMigrationBlockers(left: MandatoryMigrationBlocker, right: MandatoryMigrationBlocker): number {\n const byLayer = left.layer.localeCompare(right.layer);\n if (byLayer !== 0) {\n return byLayer;\n }\n const byName = left.name.localeCompare(right.name);\n if (byName !== 0) {\n return byName;\n }\n return left.id.localeCompare(right.id);\n}\n\nexport function collectMandatoryMigrationBlockers(\n migrations: Array<{\n layer: \"global\" | \"project\";\n name: string;\n definition: Record<string, unknown>;\n }>,\n): MandatoryMigrationBlocker[] {\n const blockers: MandatoryMigrationBlocker[] = [];\n migrations.forEach((entry, index) => {\n if (!isMandatoryMigrationDefinition(entry.definition)) {\n return;\n }\n const status = resolveNormalizedMigrationStatus(entry.definition);\n if (status === \"applied\") {\n return;\n }\n blockers.push({\n layer: entry.layer,\n name: entry.name,\n id: resolveMigrationId(entry.definition, index),\n status,\n });\n });\n blockers.sort(compareMandatoryMigrationBlockers);\n return blockers;\n}\n\nfunction hasMutatingListValues(value: unknown): boolean {\n return Array.isArray(value) && value.length > 0;\n}\n\nexport function decideWriteGate(commandPath: string, options: Record<string, unknown>): WriteGateDecision {\n const forceRequested = options.force === true;\n switch (commandPath) {\n case \"create\":\n case \"beads import\":\n case \"todos import\":\n return {\n isMutation: true,\n forceCapable: false,\n forceRequested: false,\n };\n case \"restore\":\n case \"update\":\n case \"close\":\n case \"delete\":\n case \"append\":\n case \"claim\":\n case \"release\":\n return {\n isMutation: true,\n forceCapable: true,\n forceRequested,\n };\n case \"comments\":\n case \"notes\":\n case \"learnings\":\n return {\n isMutation: typeof options.add === \"string\",\n forceCapable: true,\n forceRequested,\n };\n case \"files\":\n case \"docs\":\n case \"test\":\n return {\n isMutation: hasMutatingListValues(options.add) || hasMutatingListValues(options.remove),\n forceCapable: true,\n forceRequested,\n };\n default:\n return {\n isMutation: false,\n forceCapable: false,\n forceRequested: false,\n };\n }\n}\n\nexport function enforceMandatoryMigrationWriteGate(\n commandPath: string,\n options: Record<string, unknown>,\n blockers: MandatoryMigrationBlocker[],\n): void {\n if (blockers.length === 0) {\n return;\n }\n const decision = decideWriteGate(commandPath, options);\n if (!decision.isMutation) {\n return;\n }\n if (decision.forceCapable && decision.forceRequested) {\n return;\n }\n const codes = blockers.map(\n (entry) => `extension_migration_blocking:${entry.layer}:${entry.name}:${entry.id}:${entry.status}`,\n );\n const forceGuidance = decision.forceCapable\n ? \"Re-run this command with --force to bypass.\"\n : \"This command path does not support --force bypass.\";\n throw new PmCliError(\n `Write command \"${commandPath}\" blocked by unresolved mandatory extension migrations (${codes.join(\",\")}). ${forceGuidance}`,\n EXIT_CODE.CONFLICT,\n );\n}\n\nexport async function enforceItemFormatWriteGateAndPreflightMigration(\n commandPath: string,\n options: Record<string, unknown>,\n pmRoot: string,\n decision: PreflightRuntimeDecision,\n): Promise<void> {\n const writeGate = decideWriteGate(commandPath, options);\n if (!writeGate.isMutation) {\n return;\n }\n if (!decision.enforce_item_format_gate && !decision.run_preflight_item_format_sync) {\n return;\n }\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n return;\n }\n const { settings, metadata, warnings } = await readSettingsWithMetadata(pmRoot);\n for (const warning of warnings) {\n printError(`warning:${warning}`);\n }\n if (decision.enforce_item_format_gate && !metadata.has_explicit_item_format) {\n await writeSettings(pmRoot, settings, \"item_format:auto_select_default\");\n }\n if (decision.run_preflight_item_format_sync) {\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n await migrateItemFilesToFormat(\n pmRoot,\n settings.item_format,\n \"item_format:pre_mutation_sync\",\n typeRegistry.type_to_folder,\n settings.schema,\n );\n }\n}\n"]}
1
+ {"version":3,"file":"migration-gates.js","sources":["cli/migration-gates.ts"],"sourceRoot":"/","sourcesContent":["import { pathExists } from \"../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations, type PreflightRuntimeDecision } from \"../core/extensions/index.js\";\nimport { resolveItemTypeRegistry } from \"../core/item/type-registry.js\";\nimport { migrateItemFilesToFormat } from \"../core/store/item-format-migration.js\";\nimport { getSettingsPath } from \"../core/store/paths.js\";\nimport { readSettingsWithMetadata, writeSettings } from \"../core/store/settings.js\";\nimport { EXIT_CODE } from \"../core/shared/constants.js\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport { toNonEmptyStringOrUndefined } from \"../core/shared/primitives.js\";\nimport { printError } from \"../core/output/output.js\";\n\nexport interface MandatoryMigrationBlocker {\n layer: \"global\" | \"project\";\n name: string;\n id: string;\n status: string;\n}\n\nexport interface WriteGateDecision {\n isMutation: boolean;\n forceCapable: boolean;\n forceRequested: boolean;\n}\n\nexport function resolveMigrationId(definition: Record<string, unknown>, fallbackIndex: number): string {\n const explicit = toNonEmptyStringOrUndefined(definition.id);\n if (explicit) {\n return explicit;\n }\n return `migration-${String(fallbackIndex + 1).padStart(3, \"0\")}`;\n}\n\nexport function resolveNormalizedMigrationStatus(definition: Record<string, unknown>): string {\n const normalized = toNonEmptyStringOrUndefined(definition.status)?.toLowerCase();\n return normalized ?? \"pending\";\n}\n\nfunction isMandatoryMigrationDefinition(definition: Record<string, unknown>): boolean {\n return definition.mandatory === true;\n}\n\nfunction compareMandatoryMigrationBlockers(left: MandatoryMigrationBlocker, right: MandatoryMigrationBlocker): number {\n const byLayer = left.layer.localeCompare(right.layer);\n if (byLayer !== 0) {\n return byLayer;\n }\n const byName = left.name.localeCompare(right.name);\n if (byName !== 0) {\n return byName;\n }\n return left.id.localeCompare(right.id);\n}\n\nexport function collectMandatoryMigrationBlockers(\n migrations: Array<{\n layer: \"global\" | \"project\";\n name: string;\n definition: Record<string, unknown>;\n }>,\n): MandatoryMigrationBlocker[] {\n const blockers: MandatoryMigrationBlocker[] = [];\n migrations.forEach((entry, index) => {\n if (!isMandatoryMigrationDefinition(entry.definition)) {\n return;\n }\n const status = resolveNormalizedMigrationStatus(entry.definition);\n if (status === \"applied\") {\n return;\n }\n blockers.push({\n layer: entry.layer,\n name: entry.name,\n id: resolveMigrationId(entry.definition, index),\n status,\n });\n });\n blockers.sort(compareMandatoryMigrationBlockers);\n return blockers;\n}\n\nfunction hasMutatingListValues(value: unknown): boolean {\n return Array.isArray(value) && value.length > 0;\n}\n\nexport function decideWriteGate(commandPath: string, options: Record<string, unknown>): WriteGateDecision {\n const forceRequested = options.force === true;\n switch (commandPath) {\n case \"create\":\n case \"beads import\":\n case \"todos import\":\n return {\n isMutation: true,\n forceCapable: false,\n forceRequested: false,\n };\n case \"restore\":\n case \"update\":\n case \"close\":\n case \"delete\":\n case \"append\":\n case \"claim\":\n case \"release\":\n return {\n isMutation: true,\n forceCapable: true,\n forceRequested,\n };\n case \"comments\":\n case \"notes\":\n case \"learnings\":\n return {\n isMutation: typeof options.add === \"string\",\n forceCapable: true,\n forceRequested,\n };\n case \"files\":\n case \"docs\":\n case \"test\":\n return {\n isMutation: hasMutatingListValues(options.add) || hasMutatingListValues(options.remove),\n forceCapable: true,\n forceRequested,\n };\n default:\n return {\n isMutation: false,\n forceCapable: false,\n forceRequested: false,\n };\n }\n}\n\nexport function enforceMandatoryMigrationWriteGate(\n commandPath: string,\n options: Record<string, unknown>,\n blockers: MandatoryMigrationBlocker[],\n): void {\n if (blockers.length === 0) {\n return;\n }\n const decision = decideWriteGate(commandPath, options);\n if (!decision.isMutation) {\n return;\n }\n if (decision.forceCapable && decision.forceRequested) {\n return;\n }\n const codes = blockers.map(\n (entry) => `extension_migration_blocking:${entry.layer}:${entry.name}:${entry.id}:${entry.status}`,\n );\n const forceGuidance = decision.forceCapable\n ? \"Re-run this command with --force to bypass.\"\n : \"This command path does not support --force bypass.\";\n throw new PmCliError(\n `Write command \"${commandPath}\" blocked by unresolved mandatory extension migrations (${codes.join(\",\")}). ${forceGuidance}`,\n EXIT_CODE.CONFLICT,\n );\n}\n\nexport async function enforceItemFormatWriteGateAndPreflightMigration(\n commandPath: string,\n options: Record<string, unknown>,\n pmRoot: string,\n decision: PreflightRuntimeDecision,\n): Promise<void> {\n const writeGate = decideWriteGate(commandPath, options);\n if (!writeGate.isMutation) {\n return;\n }\n if (!decision.enforce_item_format_gate && !decision.run_preflight_item_format_sync) {\n return;\n }\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n return;\n }\n const { settings, metadata, warnings } = await readSettingsWithMetadata(pmRoot);\n for (const warning of warnings) {\n printError(`warning:${warning}`);\n }\n if (decision.enforce_item_format_gate && !metadata.has_explicit_item_format) {\n await writeSettings(pmRoot, settings, \"item_format:auto_select_default\");\n }\n if (decision.run_preflight_item_format_sync) {\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n await migrateItemFilesToFormat(\n pmRoot,\n settings.item_format,\n \"item_format:pre_mutation_sync\",\n typeRegistry.type_to_folder,\n settings.schema,\n );\n }\n}\n"],"names":[],"mappings":"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","debugId":"f2e7dc1e-9df0-5f24-8633-7ac2b755ad47"}
@@ -1,9 +1,15 @@
1
- import { runAggregate, runActivity, runCalendar, runContext, runDedupeAudit, runGuide, runGet, runHistory, runList, runReindex, runSearch, renderCalendarMarkdown, renderContextMarkdown, renderGuideMarkdown, resolveCalendarOutputFormat, resolveContextOutputFormat, resolveGuideOutputFormat, } from "./commands/index.js";
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e75809a0-c5e1-5cf8-a248-74c848637e62")}catch(e){}}();
2
3
  import { EXIT_CODE } from "../core/shared/constants.js";
3
4
  import { PmCliError } from "../core/shared/errors.js";
4
- import { getGlobalOptions, normalizeAggregateOptions, normalizeActivityOptions, normalizeCalendarOptions, normalizeContextOptions, normalizeDedupeAuditOptions, normalizeListOptions, normalizeSearchKeywordsInput, normalizeSearchOptions, printActivityJsonStream, printError, printListJsonStream, printResult, resolveActivityStreamMode, writeStdout, } from "./registration-helpers.js";
5
+ import { getGlobalOptions, normalizeAggregateOptions, normalizeActivityOptions, normalizeContextOptions, normalizeListOptions, normalizeSearchKeywordsInput, normalizeSearchOptions, printActivityJsonStream, printError, printListJsonStream, printResult, resolveActivityStreamMode, writeStdout, } from "./registration-helpers.js";
6
+ let listQueryCommandsModulePromise = null;
7
+ async function loadListQueryCommandsModule() {
8
+ listQueryCommandsModulePromise ??= import("./commands/index.js");
9
+ return listQueryCommandsModulePromise;
10
+ }
5
11
  export function registerListQueryCommands(program) {
6
- function registerListCommand(name, description, status, excludeTerminal, allowStatusFilter) {
12
+ function registerListCommand(name, description, status, excludeTerminal, allowStatusFilter, defaultBrief) {
7
13
  const command = program.command(name).description(description);
8
14
  if (allowStatusFilter) {
9
15
  command.option("--status <value>", "Filter by status");
@@ -23,9 +29,10 @@ export function registerListQueryCommands(program) {
23
29
  .option("--limit <n>", "Limit returned item count")
24
30
  .option("--offset <n>", "Skip the first n matching rows before limit is applied")
25
31
  .option("--include-body", "Include item body in each returned list row")
26
- .option("--compact", "Render compact list projection fields (mutually exclusive with --brief/--fields)")
27
- .option("--brief", "Ultra-compact output: id, status, type, title only (agent-optimized, mutually exclusive with --compact/--fields)")
28
- .option("--fields <value>", "Render custom comma-separated list fields (mutually exclusive with --compact/--brief; valid: --fields id,title)")
32
+ .option("--compact", "Render compact list projection fields (mutually exclusive with --brief/--full/--fields)")
33
+ .option("--brief", "Ultra-compact output: id, status, type, title only (agent-optimized, mutually exclusive with --compact/--full/--fields)")
34
+ .option("--full", "Render full list projection fields (mutually exclusive with --compact/--brief/--fields)")
35
+ .option("--fields <value>", "Render custom comma-separated list fields (mutually exclusive with --compact/--brief/--full; valid: --fields id,title)")
29
36
  .option("--sort <value>", "Sort field: priority|deadline|updated_at|created_at|title|parent")
30
37
  .option("--order <value>", "Sort order: asc|desc (requires --sort)")
31
38
  .option("--stream", "Emit line-delimited JSON rows (requires --json)")
@@ -33,8 +40,17 @@ export function registerListQueryCommands(program) {
33
40
  const globalOptions = getGlobalOptions(actionCommand);
34
41
  const startedAt = Date.now();
35
42
  const listOptions = normalizeListOptions(options);
43
+ if (defaultBrief === true &&
44
+ listOptions.includeBody !== true &&
45
+ listOptions.compact !== true &&
46
+ listOptions.brief !== true &&
47
+ listOptions.full !== true &&
48
+ listOptions.fields === undefined) {
49
+ listOptions.brief = true;
50
+ }
36
51
  if (excludeTerminal)
37
52
  listOptions.excludeTerminal = true;
53
+ const { runList } = await loadListQueryCommandsModule();
38
54
  const result = await runList(status, listOptions, globalOptions);
39
55
  const streamMode = options.stream === true;
40
56
  if (streamMode && !globalOptions.json) {
@@ -51,7 +67,7 @@ export function registerListQueryCommands(program) {
51
67
  }
52
68
  });
53
69
  }
54
- registerListCommand("list", "List active items with optional filters.", undefined, true, true);
70
+ registerListCommand("list", "List active items with optional filters.", undefined, true, true, true);
55
71
  registerListCommand("list-all", "List all items with optional filters.", undefined, false, true);
56
72
  registerListCommand("list-draft", "List draft items with optional filters.", "draft");
57
73
  registerListCommand("list-open", "List open items with optional filters.", "open");
@@ -81,126 +97,13 @@ export function registerListQueryCommands(program) {
81
97
  .action(async (options, command) => {
82
98
  const globalOptions = getGlobalOptions(command);
83
99
  const startedAt = Date.now();
100
+ const { runAggregate } = await loadListQueryCommandsModule();
84
101
  const result = await runAggregate(normalizeAggregateOptions(options), globalOptions);
85
102
  printResult(result, globalOptions);
86
103
  if (globalOptions.profile) {
87
104
  printError(`profile:command=aggregate took_ms=${Date.now() - startedAt}`);
88
105
  }
89
106
  });
90
- program
91
- .command("dedupe-audit")
92
- .description("Audit potential duplicate items with exact, fuzzy, or parent-scoped matching.")
93
- .option("--mode <value>", "Dedupe mode: title_exact|title_fuzzy|parent_scope")
94
- .option("--limit <n>", "Limit returned duplicate clusters")
95
- .option("--threshold <value>", "Fuzzy mode token similarity threshold between 0 and 1")
96
- .option("--status <value>", "Filter by item status")
97
- .option("--type <value>", "Filter by item type")
98
- .option("--tag <value>", "Filter by tag")
99
- .option("--priority <value>", "Filter by priority")
100
- .option("--deadline-before <value>", "Filter by deadline upper bound (ISO/date string or relative)")
101
- .option("--deadline-after <value>", "Filter by deadline lower bound (ISO/date string or relative)")
102
- .option("--assignee <value>", "Filter by assignee")
103
- .option("--assignee-filter <value>", "Filter assignee presence: assigned|unassigned")
104
- .option("--assignee_filter <value>", "Alias for --assignee-filter")
105
- .option("--parent <value>", "Filter by parent item ID")
106
- .option("--sprint <value>", "Filter by sprint")
107
- .option("--release <value>", "Filter by release")
108
- .action(async (options, command) => {
109
- const globalOptions = getGlobalOptions(command);
110
- const startedAt = Date.now();
111
- const result = await runDedupeAudit(normalizeDedupeAuditOptions(options), globalOptions);
112
- printResult(result, globalOptions);
113
- if (globalOptions.profile) {
114
- printError(`profile:command=dedupe-audit took_ms=${Date.now() - startedAt}`);
115
- }
116
- });
117
- program
118
- .command("calendar")
119
- .alias("cal")
120
- .description("Show deadline/reminder calendar views (agenda/day/week/month).")
121
- .option("--view <value>", "Calendar view: agenda|day|week|month (default: agenda)")
122
- .option("--date <value>", "Anchor date/time for view calculations (ISO/date string or relative)")
123
- .option("--from <value>", "Agenda lower bound (ISO/date string or relative)")
124
- .option("--to <value>", "Agenda upper bound (ISO/date string or relative)")
125
- .option("--past", "Include past entries in the selected view")
126
- .option("--full-period", "For day/week/month views, include the full anchored period without now-clipping")
127
- .option("--full_period", "Alias for --full-period")
128
- .option("--type <value>", "Filter by item type")
129
- .option("--tag <value>", "Filter by tag")
130
- .option("--priority <value>", "Filter by priority")
131
- .option("--status <value>", "Filter by status")
132
- .option("--assignee <value>", "Filter by assignee")
133
- .option("--assignee-filter <value>", "Filter assignee presence: assigned|unassigned")
134
- .option("--assignee_filter <value>", "Alias for --assignee-filter")
135
- .option("--sprint <value>", "Filter by sprint")
136
- .option("--release <value>", "Filter by release")
137
- .option("--include <value>", "Include sources: deadlines|reminders|events|all (comma or | separated)")
138
- .option("--recurrence-lookahead-days <n>", "Bound open-ended recurrence generation lookahead days")
139
- .option("--recurrence_lookahead_days <n>", "Alias for --recurrence-lookahead-days")
140
- .option("--recurrence-lookback-days <n>", "Bound open-ended recurrence generation lookback days")
141
- .option("--recurrence_lookback_days <n>", "Alias for --recurrence-lookback-days")
142
- .option("--occurrence-limit <n>", "Cap generated occurrences per recurring event")
143
- .option("--occurrence_limit <n>", "Alias for --occurrence-limit")
144
- .option("--limit <n>", "Limit returned event count")
145
- .option("--format <value>", "Calendar output format override: markdown|toon|json")
146
- .action(async (options, actionCommand) => {
147
- const globalOptions = getGlobalOptions(actionCommand);
148
- const startedAt = Date.now();
149
- const normalized = normalizeCalendarOptions(options);
150
- const result = await runCalendar(normalized, globalOptions);
151
- const outputFormat = resolveCalendarOutputFormat(normalized, globalOptions);
152
- if (outputFormat === "markdown") {
153
- if (!globalOptions.quiet) {
154
- writeStdout(`${renderCalendarMarkdown(result)}\n`);
155
- }
156
- }
157
- else {
158
- printResult(result, {
159
- ...globalOptions,
160
- json: outputFormat === "json",
161
- });
162
- }
163
- if (globalOptions.profile) {
164
- printError(`profile:command=calendar took_ms=${Date.now() - startedAt}`);
165
- }
166
- });
167
- program
168
- .command("guide")
169
- .argument("[topic]", "Guide topic ID (for example: quickstart, commands, workflows, sdk, extensions, skills)")
170
- .description("Browse local progressive-disclosure guides without leaving the CLI.")
171
- .option("--list", "Show guide topic index (default when topic is omitted)")
172
- .option("--format <value>", "Guide output format override: markdown|toon|json")
173
- .option("--depth <value>", "Guide detail depth: brief|standard|deep (default: brief)")
174
- .action(async (topic, options, actionCommand) => {
175
- const globalOptions = getGlobalOptions(actionCommand);
176
- const startedAt = Date.now();
177
- const result = await runGuide({
178
- topic,
179
- list: options.list === true,
180
- format: typeof options.format === "string" ? options.format : undefined,
181
- depth: typeof options.depth === "string" ? options.depth : undefined,
182
- }, globalOptions);
183
- const outputFormat = resolveGuideOutputFormat({
184
- topic,
185
- list: options.list === true,
186
- format: typeof options.format === "string" ? options.format : undefined,
187
- depth: typeof options.depth === "string" ? options.depth : undefined,
188
- }, globalOptions);
189
- if (outputFormat === "markdown") {
190
- if (!globalOptions.quiet) {
191
- writeStdout(`${renderGuideMarkdown(result)}\n`);
192
- }
193
- }
194
- else {
195
- printResult(result, {
196
- ...globalOptions,
197
- json: outputFormat === "json",
198
- });
199
- }
200
- if (globalOptions.profile) {
201
- printError(`profile:command=guide took_ms=${Date.now() - startedAt}`);
202
- }
203
- });
204
107
  program
205
108
  .command("context")
206
109
  .alias("ctx")
@@ -227,11 +130,12 @@ export function registerListQueryCommands(program) {
227
130
  const globalOptions = getGlobalOptions(actionCommand);
228
131
  const startedAt = Date.now();
229
132
  const normalized = normalizeContextOptions(options);
230
- const result = await runContext(normalized, globalOptions);
231
- const outputFormat = resolveContextOutputFormat(normalized, globalOptions);
133
+ const commands = await loadListQueryCommandsModule();
134
+ const result = await commands.runContext(normalized, globalOptions);
135
+ const outputFormat = commands.resolveContextOutputFormat(normalized, globalOptions);
232
136
  if (outputFormat === "markdown") {
233
137
  if (!globalOptions.quiet) {
234
- writeStdout(`${renderContextMarkdown(result)}\n`);
138
+ writeStdout(`${commands.renderContextMarkdown(result)}\n`);
235
139
  }
236
140
  }
237
141
  else {
@@ -247,11 +151,13 @@ export function registerListQueryCommands(program) {
247
151
  program
248
152
  .command("search")
249
153
  .argument("<keywords...>", "Keyword query tokens")
250
- .description("Search items with keyword, semantic, or hybrid modes.")
251
- .option("--mode <value>", "Search mode: keyword|semantic|hybrid (default: hybrid when semantic config or local Ollama auto-defaults are available, else keyword)")
252
- .option("--include-linked", "Include readable linked docs/files/tests content in keyword and hybrid lexical scoring")
253
- .option("--title-exact", "Require exact normalized title match against the full query")
254
- .option("--phrase-exact", "Require exact normalized query phrase match in item text fields")
154
+ .description("Search items with keyword, semantic, or hybrid retrieval.")
155
+ .option("--mode <value>", "Search mode: keyword|semantic|hybrid (default: keyword)")
156
+ .option("--semantic", "Shorthand for --mode semantic")
157
+ .option("--hybrid", "Shorthand for --mode hybrid")
158
+ .option("--include-linked", "Include linked files, docs, and tests in the searchable corpus")
159
+ .option("--title-exact", "Require exact normalized title match for the full query string")
160
+ .option("--phrase-exact", "Require exact normalized phrase match in searchable text")
255
161
  .option("--type <value>", "Filter by item type")
256
162
  .option("--tag <value>", "Filter by tag")
257
163
  .option("--priority <value>", "Filter by priority")
@@ -264,37 +170,33 @@ export function registerListQueryCommands(program) {
264
170
  .action(async (keywords, options, command) => {
265
171
  const globalOptions = getGlobalOptions(command);
266
172
  const startedAt = Date.now();
267
- const result = await runSearch(normalizeSearchKeywordsInput(keywords), normalizeSearchOptions(options), globalOptions);
268
- printResult(result, globalOptions);
269
- if (globalOptions.profile) {
270
- printError(`profile:command=search took_ms=${Date.now() - startedAt}`);
271
- }
272
- });
273
- program
274
- .command("reindex")
275
- .description("Rebuild search artifacts for keyword, semantic, and hybrid modes.")
276
- .option("--mode <value>", "Reindex mode: keyword|semantic|hybrid", "keyword")
277
- .option("--progress", "Emit progress updates to stderr (always shown in TTY, opt-in for non-TTY)")
278
- .action(async (options, command) => {
279
- const globalOptions = getGlobalOptions(command);
280
- const startedAt = Date.now();
281
- const result = await runReindex({
282
- mode: typeof options.mode === "string" ? options.mode : undefined,
283
- progress: Boolean(options.progress),
173
+ const { runSearch } = await loadListQueryCommandsModule();
174
+ const searchOptions = normalizeSearchOptions(options);
175
+ const result = await runSearch(normalizeSearchKeywordsInput(keywords), {
176
+ ...searchOptions,
177
+ mode: typeof searchOptions.mode === "string" && searchOptions.mode.trim().length > 0
178
+ ? searchOptions.mode
179
+ : "keyword",
284
180
  }, globalOptions);
285
181
  printResult(result, globalOptions);
286
182
  if (globalOptions.profile) {
287
- printError(`profile:command=reindex took_ms=${Date.now() - startedAt}`);
183
+ printError(`profile:command=search took_ms=${Date.now() - startedAt}`);
288
184
  }
289
185
  });
290
186
  program
291
187
  .command("get")
292
188
  .argument("<id>", "Item id")
189
+ .option("--depth <value>", "Detail depth: brief|standard|deep (default: deep)")
190
+ .option("--fields <value>", "Render custom comma-separated item metadata fields (for example: --fields id,title,status,parent,type)")
293
191
  .description("Show item details by ID.")
294
- .action(async (id, _options, command) => {
192
+ .action(async (id, options, command) => {
295
193
  const globalOptions = getGlobalOptions(command);
296
194
  const startedAt = Date.now();
297
- const result = await runGet(id, globalOptions);
195
+ const { runGet } = await loadListQueryCommandsModule();
196
+ const result = await runGet(id, globalOptions, {
197
+ depth: typeof options.depth === "string" ? options.depth : undefined,
198
+ fields: typeof options.fields === "string" ? options.fields : undefined,
199
+ });
298
200
  printResult(result, globalOptions);
299
201
  if (globalOptions.profile) {
300
202
  printError(`profile:command=get took_ms=${Date.now() - startedAt}`);
@@ -310,6 +212,7 @@ export function registerListQueryCommands(program) {
310
212
  .action(async (id, options, command) => {
311
213
  const globalOptions = getGlobalOptions(command);
312
214
  const startedAt = Date.now();
215
+ const { runHistory } = await loadListQueryCommandsModule();
313
216
  const result = await runHistory(id, {
314
217
  limit: typeof options.limit === "string" ? options.limit : undefined,
315
218
  diff: Boolean(options.diff),
@@ -335,6 +238,7 @@ export function registerListQueryCommands(program) {
335
238
  const globalOptions = getGlobalOptions(command);
336
239
  const startedAt = Date.now();
337
240
  const normalized = normalizeActivityOptions(options);
241
+ const { runActivity } = await loadListQueryCommandsModule();
338
242
  const result = await runActivity(normalized, globalOptions);
339
243
  const streamMode = resolveActivityStreamMode(options.stream);
340
244
  if (streamMode && !globalOptions.json) {
@@ -351,4 +255,5 @@ export function registerListQueryCommands(program) {
351
255
  }
352
256
  });
353
257
  }
354
- //# sourceMappingURL=register-list-query.js.map
258
+ //# sourceMappingURL=register-list-query.js.map
259
+ //# debugId=e75809a0-c5e1-5cf8-a248-74c848637e62
@@ -1 +1 @@
1
- {"version":3,"file":"register-list-query.js","sourceRoot":"/","sources":["cli/register-list-query.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Command } from \"commander\";\nimport {\n runAggregate,\n runActivity,\n runCalendar,\n runContext,\n runDedupeAudit,\n runGuide,\n runGet,\n runHistory,\n runList,\n runReindex,\n runSearch,\n renderCalendarMarkdown,\n renderContextMarkdown,\n renderGuideMarkdown,\n resolveCalendarOutputFormat,\n resolveContextOutputFormat,\n resolveGuideOutputFormat,\n} from \"./commands/index.js\";\nimport { EXIT_CODE } from \"../core/shared/constants.js\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport type { ItemStatus } from \"../types/index.js\";\nimport {\n getGlobalOptions,\n normalizeAggregateOptions,\n normalizeActivityOptions,\n normalizeCalendarOptions,\n normalizeContextOptions,\n normalizeDedupeAuditOptions,\n normalizeListOptions,\n normalizeSearchKeywordsInput,\n normalizeSearchOptions,\n printActivityJsonStream,\n printError,\n printListJsonStream,\n printResult,\n resolveActivityStreamMode,\n writeStdout,\n} from \"./registration-helpers.js\";\n\nexport function registerListQueryCommands(program: Command): void {\n function registerListCommand(\n name: string,\n description: string,\n status?: ItemStatus,\n excludeTerminal?: boolean,\n allowStatusFilter?: boolean,\n ): void {\n const command = program.command(name).description(description);\n if (allowStatusFilter) {\n command.option(\"--status <value>\", \"Filter by status\");\n }\n command\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--deadline-before <value>\", \"Filter by deadline upper bound (ISO/date string or relative)\")\n .option(\"--deadline-after <value>\", \"Filter by deadline lower bound (ISO/date string or relative)\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--assignee_filter <value>\", \"Alias for --assignee-filter\")\n .option(\"--parent <value>\", \"Filter by parent item ID\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .option(\"--limit <n>\", \"Limit returned item count\")\n .option(\"--offset <n>\", \"Skip the first n matching rows before limit is applied\")\n .option(\"--include-body\", \"Include item body in each returned list row\")\n .option(\"--compact\", \"Render compact list projection fields (mutually exclusive with --brief/--fields)\")\n .option(\"--brief\", \"Ultra-compact output: id, status, type, title only (agent-optimized, mutually exclusive with --compact/--fields)\")\n .option(\n \"--fields <value>\",\n \"Render custom comma-separated list fields (mutually exclusive with --compact/--brief; valid: --fields id,title)\",\n )\n .option(\"--sort <value>\", \"Sort field: priority|deadline|updated_at|created_at|title|parent\")\n .option(\"--order <value>\", \"Sort order: asc|desc (requires --sort)\")\n .option(\"--stream\", \"Emit line-delimited JSON rows (requires --json)\")\n .action(async (options: Record<string, unknown>, actionCommand) => {\n const globalOptions = getGlobalOptions(actionCommand);\n const startedAt = Date.now();\n const listOptions = normalizeListOptions(options);\n if (excludeTerminal) listOptions.excludeTerminal = true;\n const result = await runList(status, listOptions, globalOptions);\n const streamMode = options.stream === true;\n if (streamMode && !globalOptions.json) {\n throw new PmCliError(\"--stream requires --json output mode.\", EXIT_CODE.USAGE);\n }\n if (streamMode) {\n printListJsonStream(name, result, globalOptions);\n } else {\n printResult(result, globalOptions);\n }\n if (globalOptions.profile) {\n printError(`profile:command=${name} took_ms=${Date.now() - startedAt}`);\n }\n });\n }\n\n registerListCommand(\"list\", \"List active items with optional filters.\", undefined, true, true);\n registerListCommand(\"list-all\", \"List all items with optional filters.\", undefined, false, true);\n registerListCommand(\"list-draft\", \"List draft items with optional filters.\", \"draft\");\n registerListCommand(\"list-open\", \"List open items with optional filters.\", \"open\");\n registerListCommand(\"list-in-progress\", \"List in-progress items with optional filters.\", \"in_progress\");\n registerListCommand(\"list-blocked\", \"List blocked items with optional filters.\", \"blocked\");\n registerListCommand(\"list-closed\", \"List closed items with optional filters.\", \"closed\");\n registerListCommand(\"list-canceled\", \"List canceled items with optional filters.\", \"canceled\");\n\n program\n .command(\"aggregate\")\n .description(\"Aggregate grouped item counts for governance queries.\")\n .option(\n \"--group-by <value>\",\n \"Comma-separated group-by fields (supported: parent,type,priority,status,assignee,tags,sprint,release)\",\n )\n .option(\"--count\", \"Return grouped counts (default behavior)\")\n .option(\"--include-unparented\", \"Include unparented rows when grouping by parent\")\n .option(\"--include_unparented\", \"Alias for --include-unparented\")\n .option(\"--status <value>\", \"Filter by item status\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--deadline-before <value>\", \"Filter by deadline upper bound (ISO/date string or relative)\")\n .option(\"--deadline-after <value>\", \"Filter by deadline lower bound (ISO/date string or relative)\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--assignee_filter <value>\", \"Alias for --assignee-filter\")\n .option(\"--parent <value>\", \"Filter by parent item ID\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .action(async (options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const result = await runAggregate(normalizeAggregateOptions(options), globalOptions);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=aggregate took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"dedupe-audit\")\n .description(\"Audit potential duplicate items with exact, fuzzy, or parent-scoped matching.\")\n .option(\"--mode <value>\", \"Dedupe mode: title_exact|title_fuzzy|parent_scope\")\n .option(\"--limit <n>\", \"Limit returned duplicate clusters\")\n .option(\"--threshold <value>\", \"Fuzzy mode token similarity threshold between 0 and 1\")\n .option(\"--status <value>\", \"Filter by item status\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--deadline-before <value>\", \"Filter by deadline upper bound (ISO/date string or relative)\")\n .option(\"--deadline-after <value>\", \"Filter by deadline lower bound (ISO/date string or relative)\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--assignee_filter <value>\", \"Alias for --assignee-filter\")\n .option(\"--parent <value>\", \"Filter by parent item ID\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .action(async (options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const result = await runDedupeAudit(normalizeDedupeAuditOptions(options), globalOptions);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=dedupe-audit took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"calendar\")\n .alias(\"cal\")\n .description(\"Show deadline/reminder calendar views (agenda/day/week/month).\")\n .option(\"--view <value>\", \"Calendar view: agenda|day|week|month (default: agenda)\")\n .option(\"--date <value>\", \"Anchor date/time for view calculations (ISO/date string or relative)\")\n .option(\"--from <value>\", \"Agenda lower bound (ISO/date string or relative)\")\n .option(\"--to <value>\", \"Agenda upper bound (ISO/date string or relative)\")\n .option(\"--past\", \"Include past entries in the selected view\")\n .option(\"--full-period\", \"For day/week/month views, include the full anchored period without now-clipping\")\n .option(\"--full_period\", \"Alias for --full-period\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--status <value>\", \"Filter by status\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--assignee_filter <value>\", \"Alias for --assignee-filter\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .option(\"--include <value>\", \"Include sources: deadlines|reminders|events|all (comma or | separated)\")\n .option(\"--recurrence-lookahead-days <n>\", \"Bound open-ended recurrence generation lookahead days\")\n .option(\"--recurrence_lookahead_days <n>\", \"Alias for --recurrence-lookahead-days\")\n .option(\"--recurrence-lookback-days <n>\", \"Bound open-ended recurrence generation lookback days\")\n .option(\"--recurrence_lookback_days <n>\", \"Alias for --recurrence-lookback-days\")\n .option(\"--occurrence-limit <n>\", \"Cap generated occurrences per recurring event\")\n .option(\"--occurrence_limit <n>\", \"Alias for --occurrence-limit\")\n .option(\"--limit <n>\", \"Limit returned event count\")\n .option(\"--format <value>\", \"Calendar output format override: markdown|toon|json\")\n .action(async (options: Record<string, unknown>, actionCommand) => {\n const globalOptions = getGlobalOptions(actionCommand);\n const startedAt = Date.now();\n const normalized = normalizeCalendarOptions(options);\n const result = await runCalendar(normalized, globalOptions);\n const outputFormat = resolveCalendarOutputFormat(normalized, globalOptions);\n if (outputFormat === \"markdown\") {\n if (!globalOptions.quiet) {\n writeStdout(`${renderCalendarMarkdown(result)}\\n`);\n }\n } else {\n printResult(result, {\n ...globalOptions,\n json: outputFormat === \"json\",\n });\n }\n if (globalOptions.profile) {\n printError(`profile:command=calendar took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"guide\")\n .argument(\"[topic]\", \"Guide topic ID (for example: quickstart, commands, workflows, sdk, extensions, skills)\")\n .description(\"Browse local progressive-disclosure guides without leaving the CLI.\")\n .option(\"--list\", \"Show guide topic index (default when topic is omitted)\")\n .option(\"--format <value>\", \"Guide output format override: markdown|toon|json\")\n .option(\"--depth <value>\", \"Guide detail depth: brief|standard|deep (default: brief)\")\n .action(async (topic: string | undefined, options: Record<string, unknown>, actionCommand) => {\n const globalOptions = getGlobalOptions(actionCommand);\n const startedAt = Date.now();\n const result = await runGuide(\n {\n topic,\n list: options.list === true,\n format: typeof options.format === \"string\" ? options.format : undefined,\n depth: typeof options.depth === \"string\" ? options.depth : undefined,\n },\n globalOptions,\n );\n const outputFormat = resolveGuideOutputFormat(\n {\n topic,\n list: options.list === true,\n format: typeof options.format === \"string\" ? options.format : undefined,\n depth: typeof options.depth === \"string\" ? options.depth : undefined,\n },\n globalOptions,\n );\n if (outputFormat === \"markdown\") {\n if (!globalOptions.quiet) {\n writeStdout(`${renderGuideMarkdown(result)}\\n`);\n }\n } else {\n printResult(result, {\n ...globalOptions,\n json: outputFormat === \"json\",\n });\n }\n if (globalOptions.profile) {\n printError(`profile:command=guide took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"context\")\n .alias(\"ctx\")\n .description(\"Show a token-efficient project context snapshot for next-work decisions.\")\n .option(\"--date <value>\", \"Anchor date/time for agenda window calculations (ISO/date string or relative)\")\n .option(\"--from <value>\", \"Agenda lower bound (ISO/date string or relative)\")\n .option(\"--to <value>\", \"Agenda upper bound (ISO/date string or relative)\")\n .option(\"--past\", \"Include past agenda entries in bounded windows\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--assignee_filter <value>\", \"Alias for --assignee-filter\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .option(\"--limit <n>\", \"Limit focus and agenda rows per section\")\n .option(\"--format <value>\", \"Context output format override: markdown|toon|json\")\n .option(\"--depth <value>\", \"Context depth: brief|standard|deep (default: settings or brief)\")\n .option(\"--section <value...>\", \"Include specific sections (repeatable; overrides --depth)\")\n .option(\"--activity-limit <n>\", \"Limit recent activity entries (default: settings or 10)\")\n .option(\"--stale-threshold <value>\", \"Staleness cutoff in days (e.g. 7 or 7d; default: settings or 7)\")\n .action(async (options: Record<string, unknown>, actionCommand) => {\n const globalOptions = getGlobalOptions(actionCommand);\n const startedAt = Date.now();\n const normalized = normalizeContextOptions(options);\n const result = await runContext(normalized, globalOptions);\n const outputFormat = resolveContextOutputFormat(normalized, globalOptions);\n if (outputFormat === \"markdown\") {\n if (!globalOptions.quiet) {\n writeStdout(`${renderContextMarkdown(result)}\\n`);\n }\n } else {\n printResult(result, {\n ...globalOptions,\n json: outputFormat === \"json\",\n });\n }\n if (globalOptions.profile) {\n printError(`profile:command=context took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"search\")\n .argument(\"<keywords...>\", \"Keyword query tokens\")\n .description(\"Search items with keyword, semantic, or hybrid modes.\")\n .option(\n \"--mode <value>\",\n \"Search mode: keyword|semantic|hybrid (default: hybrid when semantic config or local Ollama auto-defaults are available, else keyword)\",\n )\n .option(\"--include-linked\", \"Include readable linked docs/files/tests content in keyword and hybrid lexical scoring\")\n .option(\"--title-exact\", \"Require exact normalized title match against the full query\")\n .option(\"--phrase-exact\", \"Require exact normalized query phrase match in item text fields\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--deadline-before <value>\", \"Filter by deadline upper bound (ISO/date string or relative)\")\n .option(\"--deadline-after <value>\", \"Filter by deadline lower bound (ISO/date string or relative)\")\n .option(\"--compact\", \"Render compact search hits (default; mutually exclusive with --full/--fields)\")\n .option(\"--full\", \"Render full search hits with nested item payloads (mutually exclusive with --compact/--fields)\")\n .option(\n \"--fields <value>\",\n \"Render custom comma-separated search hit fields (mutually exclusive with --compact/--full; valid: --fields id,title,score; invalid: --full --fields id,title)\",\n )\n .option(\"--limit <n>\", \"Limit returned item count\")\n .action(async (keywords: string[], options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const result = await runSearch(normalizeSearchKeywordsInput(keywords), normalizeSearchOptions(options), globalOptions);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=search took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"reindex\")\n .description(\"Rebuild search artifacts for keyword, semantic, and hybrid modes.\")\n .option(\"--mode <value>\", \"Reindex mode: keyword|semantic|hybrid\", \"keyword\")\n .option(\"--progress\", \"Emit progress updates to stderr (always shown in TTY, opt-in for non-TTY)\")\n .action(async (options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const result = await runReindex(\n {\n mode: typeof options.mode === \"string\" ? options.mode : undefined,\n progress: Boolean(options.progress),\n },\n globalOptions,\n );\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=reindex took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"get\")\n .argument(\"<id>\", \"Item id\")\n .description(\"Show item details by ID.\")\n .action(async (id: string, _options: unknown, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const result = await runGet(id, globalOptions);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=get took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"history\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--limit <n>\", \"Return only the latest n history entries\")\n .option(\"--diff\", \"Include per-entry changed field summaries from history patches\")\n .option(\"--verify\", \"Verify hash chain and replay integrity for the full history stream\")\n .description(\"Show item history entries.\")\n .action(async (id: string, options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const result = await runHistory(\n id,\n {\n limit: typeof options.limit === \"string\" ? options.limit : undefined,\n diff: Boolean(options.diff),\n verify: Boolean(options.verify),\n },\n globalOptions,\n );\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=history took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"activity\")\n .option(\"--id <value>\", \"Filter by item ID\")\n .option(\"--op <value>\", \"Filter by history operation\")\n .option(\"--author <value>\", \"Filter by history author\")\n .option(\"--from <value>\", \"Lower timestamp bound (ISO/date string or relative)\")\n .option(\"--to <value>\", \"Upper timestamp bound (ISO/date string or relative)\")\n .option(\"--limit <n>\", \"Return only the latest n activity entries\")\n .option(\"--compact\", \"Condensed output: show only id, op, ts, author, msg per entry\")\n .option(\"--stream [mode]\", \"Emit line-delimited JSON rows (requires --json). Optional mode: rows|ndjson|jsonl\")\n .description(\"Show recent activity across items.\")\n .action(async (options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const normalized = normalizeActivityOptions(options);\n const result = await runActivity(normalized, globalOptions);\n const streamMode = resolveActivityStreamMode(options.stream);\n if (streamMode && !globalOptions.json) {\n throw new PmCliError(\"--stream requires --json output mode.\", EXIT_CODE.USAGE);\n }\n if (streamMode) {\n printActivityJsonStream(result, normalized, globalOptions);\n } else {\n printResult(result, globalOptions);\n }\n if (globalOptions.profile) {\n printError(`profile:command=activity took_ms=${Date.now() - startedAt}`);\n }\n });\n}\n"]}
1
+ {"version":3,"file":"register-list-query.js","sources":["cli/register-list-query.ts"],"sourceRoot":"/","sourcesContent":["import type { Command } from \"commander\";\nimport { EXIT_CODE } from \"../core/shared/constants.js\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport type { ItemStatus } from \"../types/index.js\";\nimport {\n getGlobalOptions,\n normalizeAggregateOptions,\n normalizeActivityOptions,\n normalizeContextOptions,\n normalizeListOptions,\n normalizeSearchKeywordsInput,\n normalizeSearchOptions,\n printActivityJsonStream,\n printError,\n printListJsonStream,\n printResult,\n resolveActivityStreamMode,\n writeStdout,\n} from \"./registration-helpers.js\";\n\ntype ListQueryCommandsModule = typeof import(\"./commands/index.js\");\n\nlet listQueryCommandsModulePromise: Promise<ListQueryCommandsModule> | null = null;\n\nasync function loadListQueryCommandsModule(): Promise<ListQueryCommandsModule> {\n listQueryCommandsModulePromise ??= import(\"./commands/index.js\");\n return listQueryCommandsModulePromise;\n}\n\nexport function registerListQueryCommands(program: Command): void {\n function registerListCommand(\n name: string,\n description: string,\n status?: ItemStatus,\n excludeTerminal?: boolean,\n allowStatusFilter?: boolean,\n defaultBrief?: boolean,\n ): void {\n const command = program.command(name).description(description);\n if (allowStatusFilter) {\n command.option(\"--status <value>\", \"Filter by status\");\n }\n command\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--deadline-before <value>\", \"Filter by deadline upper bound (ISO/date string or relative)\")\n .option(\"--deadline-after <value>\", \"Filter by deadline lower bound (ISO/date string or relative)\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--assignee_filter <value>\", \"Alias for --assignee-filter\")\n .option(\"--parent <value>\", \"Filter by parent item ID\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .option(\"--limit <n>\", \"Limit returned item count\")\n .option(\"--offset <n>\", \"Skip the first n matching rows before limit is applied\")\n .option(\"--include-body\", \"Include item body in each returned list row\")\n .option(\"--compact\", \"Render compact list projection fields (mutually exclusive with --brief/--full/--fields)\")\n .option(\"--brief\", \"Ultra-compact output: id, status, type, title only (agent-optimized, mutually exclusive with --compact/--full/--fields)\")\n .option(\"--full\", \"Render full list projection fields (mutually exclusive with --compact/--brief/--fields)\")\n .option(\n \"--fields <value>\",\n \"Render custom comma-separated list fields (mutually exclusive with --compact/--brief/--full; valid: --fields id,title)\",\n )\n .option(\"--sort <value>\", \"Sort field: priority|deadline|updated_at|created_at|title|parent\")\n .option(\"--order <value>\", \"Sort order: asc|desc (requires --sort)\")\n .option(\"--stream\", \"Emit line-delimited JSON rows (requires --json)\")\n .action(async (options: Record<string, unknown>, actionCommand) => {\n const globalOptions = getGlobalOptions(actionCommand);\n const startedAt = Date.now();\n const listOptions = normalizeListOptions(options);\n if (\n defaultBrief === true &&\n listOptions.includeBody !== true &&\n listOptions.compact !== true &&\n listOptions.brief !== true &&\n listOptions.full !== true &&\n listOptions.fields === undefined\n ) {\n listOptions.brief = true;\n }\n if (excludeTerminal) listOptions.excludeTerminal = true;\n const { runList } = await loadListQueryCommandsModule();\n const result = await runList(status, listOptions, globalOptions);\n const streamMode = options.stream === true;\n if (streamMode && !globalOptions.json) {\n throw new PmCliError(\"--stream requires --json output mode.\", EXIT_CODE.USAGE);\n }\n if (streamMode) {\n printListJsonStream(name, result, globalOptions);\n } else {\n printResult(result, globalOptions);\n }\n if (globalOptions.profile) {\n printError(`profile:command=${name} took_ms=${Date.now() - startedAt}`);\n }\n });\n }\n\n registerListCommand(\"list\", \"List active items with optional filters.\", undefined, true, true, true);\n registerListCommand(\"list-all\", \"List all items with optional filters.\", undefined, false, true);\n registerListCommand(\"list-draft\", \"List draft items with optional filters.\", \"draft\");\n registerListCommand(\"list-open\", \"List open items with optional filters.\", \"open\");\n registerListCommand(\"list-in-progress\", \"List in-progress items with optional filters.\", \"in_progress\");\n registerListCommand(\"list-blocked\", \"List blocked items with optional filters.\", \"blocked\");\n registerListCommand(\"list-closed\", \"List closed items with optional filters.\", \"closed\");\n registerListCommand(\"list-canceled\", \"List canceled items with optional filters.\", \"canceled\");\n\n program\n .command(\"aggregate\")\n .description(\"Aggregate grouped item counts for governance queries.\")\n .option(\n \"--group-by <value>\",\n \"Comma-separated group-by fields (supported: parent,type,priority,status,assignee,tags,sprint,release)\",\n )\n .option(\"--count\", \"Return grouped counts (default behavior)\")\n .option(\"--include-unparented\", \"Include unparented rows when grouping by parent\")\n .option(\"--include_unparented\", \"Alias for --include-unparented\")\n .option(\"--status <value>\", \"Filter by item status\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--deadline-before <value>\", \"Filter by deadline upper bound (ISO/date string or relative)\")\n .option(\"--deadline-after <value>\", \"Filter by deadline lower bound (ISO/date string or relative)\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--assignee_filter <value>\", \"Alias for --assignee-filter\")\n .option(\"--parent <value>\", \"Filter by parent item ID\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .action(async (options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runAggregate } = await loadListQueryCommandsModule();\n const result = await runAggregate(normalizeAggregateOptions(options), globalOptions);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=aggregate took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"context\")\n .alias(\"ctx\")\n .description(\"Show a token-efficient project context snapshot for next-work decisions.\")\n .option(\"--date <value>\", \"Anchor date/time for agenda window calculations (ISO/date string or relative)\")\n .option(\"--from <value>\", \"Agenda lower bound (ISO/date string or relative)\")\n .option(\"--to <value>\", \"Agenda upper bound (ISO/date string or relative)\")\n .option(\"--past\", \"Include past agenda entries in bounded windows\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--assignee_filter <value>\", \"Alias for --assignee-filter\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .option(\"--limit <n>\", \"Limit focus and agenda rows per section\")\n .option(\"--format <value>\", \"Context output format override: markdown|toon|json\")\n .option(\"--depth <value>\", \"Context depth: brief|standard|deep (default: settings or brief)\")\n .option(\"--section <value...>\", \"Include specific sections (repeatable; overrides --depth)\")\n .option(\"--activity-limit <n>\", \"Limit recent activity entries (default: settings or 10)\")\n .option(\"--stale-threshold <value>\", \"Staleness cutoff in days (e.g. 7 or 7d; default: settings or 7)\")\n .action(async (options: Record<string, unknown>, actionCommand) => {\n const globalOptions = getGlobalOptions(actionCommand);\n const startedAt = Date.now();\n const normalized = normalizeContextOptions(options);\n const commands = await loadListQueryCommandsModule();\n const result = await commands.runContext(normalized, globalOptions);\n const outputFormat = commands.resolveContextOutputFormat(normalized, globalOptions);\n if (outputFormat === \"markdown\") {\n if (!globalOptions.quiet) {\n writeStdout(`${commands.renderContextMarkdown(result)}\\n`);\n }\n } else {\n printResult(result, {\n ...globalOptions,\n json: outputFormat === \"json\",\n });\n }\n if (globalOptions.profile) {\n printError(`profile:command=context took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"search\")\n .argument(\"<keywords...>\", \"Keyword query tokens\")\n .description(\"Search items with keyword, semantic, or hybrid retrieval.\")\n .option(\"--mode <value>\", \"Search mode: keyword|semantic|hybrid (default: keyword)\")\n .option(\"--semantic\", \"Shorthand for --mode semantic\")\n .option(\"--hybrid\", \"Shorthand for --mode hybrid\")\n .option(\"--include-linked\", \"Include linked files, docs, and tests in the searchable corpus\")\n .option(\"--title-exact\", \"Require exact normalized title match for the full query string\")\n .option(\"--phrase-exact\", \"Require exact normalized phrase match in searchable text\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--deadline-before <value>\", \"Filter by deadline upper bound (ISO/date string or relative)\")\n .option(\"--deadline-after <value>\", \"Filter by deadline lower bound (ISO/date string or relative)\")\n .option(\"--compact\", \"Render compact search hits (default; mutually exclusive with --full/--fields)\")\n .option(\"--full\", \"Render full search hits with nested item payloads (mutually exclusive with --compact/--fields)\")\n .option(\n \"--fields <value>\",\n \"Render custom comma-separated search hit fields (mutually exclusive with --compact/--full; valid: --fields id,title,score; invalid: --full --fields id,title)\",\n )\n .option(\"--limit <n>\", \"Limit returned item count\")\n .action(async (keywords: string[], options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runSearch } = await loadListQueryCommandsModule();\n const searchOptions = normalizeSearchOptions(options);\n const result = await runSearch(\n normalizeSearchKeywordsInput(keywords),\n {\n ...searchOptions,\n mode:\n typeof searchOptions.mode === \"string\" && searchOptions.mode.trim().length > 0\n ? searchOptions.mode\n : \"keyword\",\n },\n globalOptions,\n );\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=search took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"get\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--depth <value>\", \"Detail depth: brief|standard|deep (default: deep)\")\n .option(\"--fields <value>\", \"Render custom comma-separated item metadata fields (for example: --fields id,title,status,parent,type)\")\n .description(\"Show item details by ID.\")\n .action(async (id: string, options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runGet } = await loadListQueryCommandsModule();\n const result = await runGet(\n id,\n globalOptions,\n {\n depth: typeof options.depth === \"string\" ? options.depth : undefined,\n fields: typeof options.fields === \"string\" ? options.fields : undefined,\n },\n );\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=get took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"history\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--limit <n>\", \"Return only the latest n history entries\")\n .option(\"--diff\", \"Include per-entry changed field summaries from history patches\")\n .option(\"--verify\", \"Verify hash chain and replay integrity for the full history stream\")\n .description(\"Show item history entries.\")\n .action(async (id: string, options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runHistory } = await loadListQueryCommandsModule();\n const result = await runHistory(\n id,\n {\n limit: typeof options.limit === \"string\" ? options.limit : undefined,\n diff: Boolean(options.diff),\n verify: Boolean(options.verify),\n },\n globalOptions,\n );\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=history took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"activity\")\n .option(\"--id <value>\", \"Filter by item ID\")\n .option(\"--op <value>\", \"Filter by history operation\")\n .option(\"--author <value>\", \"Filter by history author\")\n .option(\"--from <value>\", \"Lower timestamp bound (ISO/date string or relative)\")\n .option(\"--to <value>\", \"Upper timestamp bound (ISO/date string or relative)\")\n .option(\"--limit <n>\", \"Return only the latest n activity entries\")\n .option(\"--compact\", \"Condensed output: show only id, op, ts, author, msg per entry\")\n .option(\"--stream [mode]\", \"Emit line-delimited JSON rows (requires --json). Optional mode: rows|ndjson|jsonl\")\n .description(\"Show recent activity across items.\")\n .action(async (options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const normalized = normalizeActivityOptions(options);\n const { runActivity } = await loadListQueryCommandsModule();\n const result = await runActivity(normalized, globalOptions);\n const streamMode = resolveActivityStreamMode(options.stream);\n if (streamMode && !globalOptions.json) {\n throw new PmCliError(\"--stream requires --json output mode.\", EXIT_CODE.USAGE);\n }\n if (streamMode) {\n printActivityJsonStream(result, normalized, globalOptions);\n } else {\n printResult(result, globalOptions);\n }\n if (globalOptions.profile) {\n printError(`profile:command=activity took_ms=${Date.now() - startedAt}`);\n }\n });\n}\n"],"names":[],"mappings":"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","debugId":"e75809a0-c5e1-5cf8-a248-74c848637e62"}