@unbrained/pm-cli 2026.5.14 → 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 (361) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/AGENTS.md +78 -457
  3. package/CHANGELOG.md +11 -0
  4. package/CONTRIBUTING.md +1 -0
  5. package/README.md +6 -5
  6. package/dist/cli/argv-utils.js +4 -1
  7. package/dist/cli/argv-utils.js.map +1 -1
  8. package/dist/cli/bootstrap-args.js +4 -1
  9. package/dist/cli/bootstrap-args.js.map +1 -1
  10. package/dist/cli/commander-usage.js +5 -1
  11. package/dist/cli/commander-usage.js.map +1 -1
  12. package/dist/cli/commands/activity.js +4 -1
  13. package/dist/cli/commands/activity.js.map +1 -1
  14. package/dist/cli/commands/aggregate.js +5 -2
  15. package/dist/cli/commands/aggregate.js.map +1 -1
  16. package/dist/cli/commands/append.js +4 -1
  17. package/dist/cli/commands/append.js.map +1 -1
  18. package/dist/cli/commands/calendar.js +4 -1
  19. package/dist/cli/commands/calendar.js.map +1 -1
  20. package/dist/cli/commands/claim.d.ts +3 -0
  21. package/dist/cli/commands/claim.js +19 -3
  22. package/dist/cli/commands/claim.js.map +1 -1
  23. package/dist/cli/commands/close.js +4 -1
  24. package/dist/cli/commands/close.js.map +1 -1
  25. package/dist/cli/commands/comments-audit.js +4 -1
  26. package/dist/cli/commands/comments-audit.js.map +1 -1
  27. package/dist/cli/commands/comments.js +4 -1
  28. package/dist/cli/commands/comments.js.map +1 -1
  29. package/dist/cli/commands/completion.js +98 -2
  30. package/dist/cli/commands/completion.js.map +1 -1
  31. package/dist/cli/commands/config.js +4 -1
  32. package/dist/cli/commands/config.js.map +1 -1
  33. package/dist/cli/commands/context.js +19 -5
  34. package/dist/cli/commands/context.js.map +1 -1
  35. package/dist/cli/commands/contracts.d.ts +9 -0
  36. package/dist/cli/commands/contracts.js +152 -34
  37. package/dist/cli/commands/contracts.js.map +1 -1
  38. package/dist/cli/commands/create.js +30 -6
  39. package/dist/cli/commands/create.js.map +1 -1
  40. package/dist/cli/commands/dedupe-audit.js +4 -1
  41. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  42. package/dist/cli/commands/delete.js +4 -1
  43. package/dist/cli/commands/delete.js.map +1 -1
  44. package/dist/cli/commands/deps.js +4 -1
  45. package/dist/cli/commands/deps.js.map +1 -1
  46. package/dist/cli/commands/docs.js +4 -1
  47. package/dist/cli/commands/docs.js.map +1 -1
  48. package/dist/cli/commands/extension.d.ts +2 -1
  49. package/dist/cli/commands/extension.js +123 -33
  50. package/dist/cli/commands/extension.js.map +1 -1
  51. package/dist/cli/commands/files.js +4 -1
  52. package/dist/cli/commands/files.js.map +1 -1
  53. package/dist/cli/commands/gc.js +4 -1
  54. package/dist/cli/commands/gc.js.map +1 -1
  55. package/dist/cli/commands/get.d.ts +7 -3
  56. package/dist/cli/commands/get.js +91 -18
  57. package/dist/cli/commands/get.js.map +1 -1
  58. package/dist/cli/commands/guide.js +6 -8
  59. package/dist/cli/commands/guide.js.map +1 -1
  60. package/dist/cli/commands/health.d.ts +4 -0
  61. package/dist/cli/commands/health.js +31 -8
  62. package/dist/cli/commands/health.js.map +1 -1
  63. package/dist/cli/commands/history-redact.d.ts +42 -0
  64. package/dist/cli/commands/history-redact.js +559 -0
  65. package/dist/cli/commands/history-redact.js.map +1 -0
  66. package/dist/cli/commands/history.d.ts +4 -0
  67. package/dist/cli/commands/history.js +14 -3
  68. package/dist/cli/commands/history.js.map +1 -1
  69. package/dist/cli/commands/index.d.ts +2 -0
  70. package/dist/cli/commands/index.js +6 -1
  71. package/dist/cli/commands/index.js.map +1 -1
  72. package/dist/cli/commands/init-agent-guidance.d.ts +31 -0
  73. package/dist/cli/commands/init-agent-guidance.js +336 -0
  74. package/dist/cli/commands/init-agent-guidance.js.map +1 -0
  75. package/dist/cli/commands/init.d.ts +14 -0
  76. package/dist/cli/commands/init.js +75 -1
  77. package/dist/cli/commands/init.js.map +1 -1
  78. package/dist/cli/commands/learnings.js +4 -1
  79. package/dist/cli/commands/learnings.js.map +1 -1
  80. package/dist/cli/commands/list.d.ts +1 -0
  81. package/dist/cli/commands/list.js +42 -18
  82. package/dist/cli/commands/list.js.map +1 -1
  83. package/dist/cli/commands/metadata-normalizers.js +4 -1
  84. package/dist/cli/commands/metadata-normalizers.js.map +1 -1
  85. package/dist/cli/commands/normalize.js +4 -1
  86. package/dist/cli/commands/normalize.js.map +1 -1
  87. package/dist/cli/commands/notes.js +4 -1
  88. package/dist/cli/commands/notes.js.map +1 -1
  89. package/dist/cli/commands/plan.d.ts +118 -0
  90. package/dist/cli/commands/plan.js +975 -0
  91. package/dist/cli/commands/plan.js.map +1 -0
  92. package/dist/cli/commands/reindex.js +4 -1
  93. package/dist/cli/commands/reindex.js.map +1 -1
  94. package/dist/cli/commands/restore.js +4 -1
  95. package/dist/cli/commands/restore.js.map +1 -1
  96. package/dist/cli/commands/search.js +7 -2
  97. package/dist/cli/commands/search.js.map +1 -1
  98. package/dist/cli/commands/stats.js +4 -1
  99. package/dist/cli/commands/stats.js.map +1 -1
  100. package/dist/cli/commands/templates.js +4 -1
  101. package/dist/cli/commands/templates.js.map +1 -1
  102. package/dist/cli/commands/test-all.js +4 -1
  103. package/dist/cli/commands/test-all.js.map +1 -1
  104. package/dist/cli/commands/test-runs.js +4 -1
  105. package/dist/cli/commands/test-runs.js.map +1 -1
  106. package/dist/cli/commands/test.js +4 -1
  107. package/dist/cli/commands/test.js.map +1 -1
  108. package/dist/cli/commands/update-many.js +4 -1
  109. package/dist/cli/commands/update-many.js.map +1 -1
  110. package/dist/cli/commands/update.js +114 -71
  111. package/dist/cli/commands/update.js.map +1 -1
  112. package/dist/cli/commands/upgrade.js +6 -3
  113. package/dist/cli/commands/upgrade.js.map +1 -1
  114. package/dist/cli/commands/validate.js +32 -4
  115. package/dist/cli/commands/validate.js.map +1 -1
  116. package/dist/cli/error-guidance.js +5 -2
  117. package/dist/cli/error-guidance.js.map +1 -1
  118. package/dist/cli/extension-command-help.js +4 -1
  119. package/dist/cli/extension-command-help.js.map +1 -1
  120. package/dist/cli/extension-command-options.js +4 -1
  121. package/dist/cli/extension-command-options.js.map +1 -1
  122. package/dist/cli/guide-topics.js +4 -1
  123. package/dist/cli/guide-topics.js.map +1 -1
  124. package/dist/cli/help-content.js +35 -15
  125. package/dist/cli/help-content.js.map +1 -1
  126. package/dist/cli/help-json-payload.js +4 -1
  127. package/dist/cli/help-json-payload.js.map +1 -1
  128. package/dist/cli/main.js +203 -25
  129. package/dist/cli/main.js.map +1 -1
  130. package/dist/cli/migration-gates.js +4 -1
  131. package/dist/cli/migration-gates.js.map +1 -1
  132. package/dist/cli/register-list-query.js +37 -14
  133. package/dist/cli/register-list-query.js.map +1 -1
  134. package/dist/cli/register-mutation.js +228 -4
  135. package/dist/cli/register-mutation.js.map +1 -1
  136. package/dist/cli/register-operations.js +33 -1
  137. package/dist/cli/register-operations.js.map +1 -1
  138. package/dist/cli/register-setup.js +23 -13
  139. package/dist/cli/register-setup.js.map +1 -1
  140. package/dist/cli/registration-helpers.js +10 -2
  141. package/dist/cli/registration-helpers.js.map +1 -1
  142. package/dist/cli/shared-parsers.js +4 -1
  143. package/dist/cli/shared-parsers.js.map +1 -1
  144. package/dist/cli/telemetry-flush.js +4 -1
  145. package/dist/cli/telemetry-flush.js.map +1 -1
  146. package/dist/cli.js +45 -3
  147. package/dist/cli.js.map +1 -1
  148. package/dist/core/extensions/extension-types.js +4 -1
  149. package/dist/core/extensions/extension-types.js.map +1 -1
  150. package/dist/core/extensions/index.js +4 -1
  151. package/dist/core/extensions/index.js.map +1 -1
  152. package/dist/core/extensions/item-fields.js +4 -1
  153. package/dist/core/extensions/item-fields.js.map +1 -1
  154. package/dist/core/extensions/loader.js +77 -53
  155. package/dist/core/extensions/loader.js.map +1 -1
  156. package/dist/core/extensions/runtime-registrations.js +4 -1
  157. package/dist/core/extensions/runtime-registrations.js.map +1 -1
  158. package/dist/core/fs/fs-utils.js +4 -1
  159. package/dist/core/fs/fs-utils.js.map +1 -1
  160. package/dist/core/fs/index.js +4 -1
  161. package/dist/core/fs/index.js.map +1 -1
  162. package/dist/core/history/history-stream-policy.js +4 -1
  163. package/dist/core/history/history-stream-policy.js.map +1 -1
  164. package/dist/core/history/history.js +4 -1
  165. package/dist/core/history/history.js.map +1 -1
  166. package/dist/core/history/index.js +4 -1
  167. package/dist/core/history/index.js.map +1 -1
  168. package/dist/core/item/id.js +4 -1
  169. package/dist/core/item/id.js.map +1 -1
  170. package/dist/core/item/index.js +4 -1
  171. package/dist/core/item/index.js.map +1 -1
  172. package/dist/core/item/item-format.js +241 -2
  173. package/dist/core/item/item-format.js.map +1 -1
  174. package/dist/core/item/parent-reference-policy.js +4 -1
  175. package/dist/core/item/parent-reference-policy.js.map +1 -1
  176. package/dist/core/item/parse.js +33 -3
  177. package/dist/core/item/parse.js.map +1 -1
  178. package/dist/core/item/sprint-release-format.js +4 -1
  179. package/dist/core/item/sprint-release-format.js.map +1 -1
  180. package/dist/core/item/status.js +4 -1
  181. package/dist/core/item/status.js.map +1 -1
  182. package/dist/core/item/type-registry.js +4 -1
  183. package/dist/core/item/type-registry.js.map +1 -1
  184. package/dist/core/lock/index.js +4 -1
  185. package/dist/core/lock/index.js.map +1 -1
  186. package/dist/core/lock/lock.js +4 -1
  187. package/dist/core/lock/lock.js.map +1 -1
  188. package/dist/core/output/command-aware.js +4 -1
  189. package/dist/core/output/command-aware.js.map +1 -1
  190. package/dist/core/output/output.d.ts +4 -0
  191. package/dist/core/output/output.js +47 -6
  192. package/dist/core/output/output.js.map +1 -1
  193. package/dist/core/packages/manifest.d.ts +1 -0
  194. package/dist/core/packages/manifest.js +5 -1
  195. package/dist/core/packages/manifest.js.map +1 -1
  196. package/dist/core/packages/root.d.ts +3 -0
  197. package/dist/core/packages/root.js +51 -0
  198. package/dist/core/packages/root.js.map +1 -0
  199. package/dist/core/schema/runtime-field-filters.js +4 -1
  200. package/dist/core/schema/runtime-field-filters.js.map +1 -1
  201. package/dist/core/schema/runtime-field-values.js +4 -1
  202. package/dist/core/schema/runtime-field-values.js.map +1 -1
  203. package/dist/core/schema/runtime-schema.js +4 -1
  204. package/dist/core/schema/runtime-schema.js.map +1 -1
  205. package/dist/core/search/cache.js +7 -2
  206. package/dist/core/search/cache.js.map +1 -1
  207. package/dist/core/search/corpus.d.ts +2 -0
  208. package/dist/core/search/corpus.js +77 -2
  209. package/dist/core/search/corpus.js.map +1 -1
  210. package/dist/core/search/embedding-batches.js +21 -7
  211. package/dist/core/search/embedding-batches.js.map +1 -1
  212. package/dist/core/search/http-client.js +4 -1
  213. package/dist/core/search/http-client.js.map +1 -1
  214. package/dist/core/search/providers.js +4 -1
  215. package/dist/core/search/providers.js.map +1 -1
  216. package/dist/core/search/semantic-defaults.js +11 -2
  217. package/dist/core/search/semantic-defaults.js.map +1 -1
  218. package/dist/core/search/vector-stores.js +4 -1
  219. package/dist/core/search/vector-stores.js.map +1 -1
  220. package/dist/core/sentry/helpers.js +4 -1
  221. package/dist/core/sentry/helpers.js.map +1 -1
  222. package/dist/core/sentry/instrument.js +10 -13
  223. package/dist/core/sentry/instrument.js.map +1 -1
  224. package/dist/core/shared/command-types.js +4 -1
  225. package/dist/core/shared/command-types.js.map +1 -1
  226. package/dist/core/shared/conflict-markers.js +4 -1
  227. package/dist/core/shared/conflict-markers.js.map +1 -1
  228. package/dist/core/shared/constants.d.ts +2 -2
  229. package/dist/core/shared/constants.js +24 -1
  230. package/dist/core/shared/constants.js.map +1 -1
  231. package/dist/core/shared/errors.js +4 -1
  232. package/dist/core/shared/errors.js.map +1 -1
  233. package/dist/core/shared/index.js +4 -1
  234. package/dist/core/shared/index.js.map +1 -1
  235. package/dist/core/shared/levenshtein.js +4 -1
  236. package/dist/core/shared/levenshtein.js.map +1 -1
  237. package/dist/core/shared/primitives.js +4 -1
  238. package/dist/core/shared/primitives.js.map +1 -1
  239. package/dist/core/shared/serialization.js +4 -1
  240. package/dist/core/shared/serialization.js.map +1 -1
  241. package/dist/core/shared/text-normalization.js +4 -1
  242. package/dist/core/shared/text-normalization.js.map +1 -1
  243. package/dist/core/shared/time.js +4 -1
  244. package/dist/core/shared/time.js.map +1 -1
  245. package/dist/core/store/front-matter-cache.js +8 -3
  246. package/dist/core/store/front-matter-cache.js.map +1 -1
  247. package/dist/core/store/index.js +4 -1
  248. package/dist/core/store/index.js.map +1 -1
  249. package/dist/core/store/item-format-migration.js +4 -1
  250. package/dist/core/store/item-format-migration.js.map +1 -1
  251. package/dist/core/store/item-store.d.ts +2 -0
  252. package/dist/core/store/item-store.js +66 -3
  253. package/dist/core/store/item-store.js.map +1 -1
  254. package/dist/core/store/paths.js +4 -1
  255. package/dist/core/store/paths.js.map +1 -1
  256. package/dist/core/store/settings.js +39 -1
  257. package/dist/core/store/settings.js.map +1 -1
  258. package/dist/core/telemetry/consent.js +4 -1
  259. package/dist/core/telemetry/consent.js.map +1 -1
  260. package/dist/core/telemetry/observability.d.ts +1 -1
  261. package/dist/core/telemetry/observability.js +11 -2
  262. package/dist/core/telemetry/observability.js.map +1 -1
  263. package/dist/core/telemetry/runtime.js +31 -5
  264. package/dist/core/telemetry/runtime.js.map +1 -1
  265. package/dist/core/test/background-runs.js +4 -1
  266. package/dist/core/test/background-runs.js.map +1 -1
  267. package/dist/core/test/item-test-run-tracking.js +4 -1
  268. package/dist/core/test/item-test-run-tracking.js.map +1 -1
  269. package/dist/mcp/server.js +123 -14
  270. package/dist/mcp/server.js.map +1 -1
  271. package/dist/sdk/cli-contracts/commander-mutation-options.js +10 -3
  272. package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
  273. package/dist/sdk/cli-contracts/commander-types.js +4 -1
  274. package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
  275. package/dist/sdk/cli-contracts.d.ts +6 -2
  276. package/dist/sdk/cli-contracts.js +213 -20
  277. package/dist/sdk/cli-contracts.js.map +1 -1
  278. package/dist/sdk/index.js +4 -1
  279. package/dist/sdk/index.js.map +1 -1
  280. package/dist/sdk/runtime.js +4 -1
  281. package/dist/sdk/runtime.js.map +1 -1
  282. package/dist/types/index.js +4 -1
  283. package/dist/types/index.js.map +1 -1
  284. package/dist/types.d.ts +86 -2
  285. package/dist/types.js +34 -1
  286. package/dist/types.js.map +1 -1
  287. package/docs/AGENT_GUIDE.md +16 -6
  288. package/docs/CLAUDE_CODE_PLUGIN.md +10 -10
  289. package/docs/CODEX_PLUGIN.md +2 -2
  290. package/docs/COMMANDS.md +80 -8
  291. package/docs/CONFIGURATION.md +4 -1
  292. package/docs/EXTENSIONS.md +158 -814
  293. package/docs/QUICKSTART.md +11 -5
  294. package/docs/README.md +7 -6
  295. package/docs/RELEASING.md +2 -2
  296. package/docs/TESTING.md +2 -2
  297. package/marketplace.json +3 -3
  298. package/package.json +4 -2
  299. package/packages/pm-beads/package.json +1 -1
  300. package/packages/pm-calendar/README.md +1 -1
  301. package/packages/pm-calendar/extensions/calendar/index.js +1 -1
  302. package/packages/pm-calendar/extensions/calendar/index.ts +1 -1
  303. package/packages/pm-calendar/extensions/calendar/runtime.js +26 -7
  304. package/packages/pm-calendar/extensions/calendar/runtime.ts +26 -7
  305. package/packages/pm-calendar/package.json +1 -1
  306. package/packages/pm-governance-audit/package.json +1 -1
  307. package/packages/pm-guide-shell/extensions/guide-shell/index.js +1 -1
  308. package/packages/pm-guide-shell/extensions/guide-shell/index.ts +1 -1
  309. package/packages/pm-guide-shell/package.json +1 -1
  310. package/packages/pm-linked-test-adapters/package.json +1 -1
  311. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +1 -1
  312. package/packages/pm-search-advanced/package.json +1 -1
  313. package/packages/pm-templates/README.md +1 -1
  314. package/packages/pm-templates/package.json +1 -1
  315. package/packages/pm-todos/package.json +1 -1
  316. package/plugins/{pm-cli-claude → pm-claude}/.claude-plugin/plugin.json +2 -2
  317. package/plugins/{pm-cli-claude → pm-claude}/.mcp.json +1 -1
  318. package/plugins/{pm-cli-claude → pm-claude}/README.md +4 -4
  319. package/plugins/{pm-cli-claude → pm-claude}/agents/pm-coordinator.md +1 -1
  320. package/plugins/{pm-cli-claude → pm-claude}/commands/pm-init.md +10 -1
  321. package/plugins/{pm-cli-claude → pm-claude}/commands/pm-planner.md +18 -0
  322. package/plugins/{pm-cli-claude → pm-claude}/skills/pm-planner/SKILL.md +46 -1
  323. package/plugins/{pm-cli-codex → pm-codex}/.codex-plugin/plugin.json +3 -3
  324. package/plugins/{pm-cli-codex → pm-codex}/.mcp.json +1 -1
  325. package/plugins/{pm-cli-codex → pm-codex}/README.md +7 -4
  326. package/plugins/pm-codex/skills/pm-native/SKILL.md +81 -0
  327. package/scripts/finalize-build.mjs +28 -0
  328. package/scripts/prepare-build-cache.mjs +37 -0
  329. package/plugins/pm-cli-codex/skills/pm-native/SKILL.md +0 -57
  330. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-delivery-chain.md +0 -0
  331. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-triage-agent.md +0 -0
  332. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-verification-agent.md +0 -0
  333. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-audit.md +0 -0
  334. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-calendar.md +0 -0
  335. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-close-task.md +0 -0
  336. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-developer.md +0 -0
  337. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-list.md +0 -0
  338. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-new.md +0 -0
  339. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-release.md +0 -0
  340. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-search.md +0 -0
  341. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-start-task.md +0 -0
  342. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-status.md +0 -0
  343. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-triage.md +0 -0
  344. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-workflow.md +0 -0
  345. /package/plugins/{pm-cli-claude → pm-claude}/hooks/hooks.json +0 -0
  346. /package/plugins/{pm-cli-claude → pm-claude}/hooks/session-start.mjs +0 -0
  347. /package/plugins/{pm-cli-claude → pm-claude}/scripts/pm-mcp-server.mjs +0 -0
  348. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-audit/SKILL.md +0 -0
  349. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-developer/SKILL.md +0 -0
  350. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-release/SKILL.md +0 -0
  351. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-workflow/SKILL.md +0 -0
  352. /package/plugins/{pm-cli-codex → pm-codex}/assets/pm-cli-small.svg +0 -0
  353. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-audit.md +0 -0
  354. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-close-task.md +0 -0
  355. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-start-task.md +0 -0
  356. /package/plugins/{pm-cli-codex → pm-codex}/scripts/pm-mcp-server.mjs +0 -0
  357. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/SKILL.md +0 -0
  358. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/agents/openai.yaml +0 -0
  359. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-native/agents/openai.yaml +0 -0
  360. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/SKILL.md +0 -0
  361. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/agents/openai.yaml +0 -0
@@ -1,3 +1,5 @@
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]="132b389e-5119-5dc0-8029-09c0624fb041")}catch(e){}}();
1
3
  import { EXIT_CODE } from "../../core/shared/constants.js";
2
4
  import { PmCliError } from "../../core/shared/errors.js";
3
5
  import { parseOptionalNumber } from "../../core/item/parse.js";
@@ -34,4 +36,5 @@ export function parseRegressionInput(value) {
34
36
  }
35
37
  throw new PmCliError("Regression must be one of true|false|1|0", EXIT_CODE.USAGE);
36
38
  }
37
- //# sourceMappingURL=metadata-normalizers.js.map
39
+ //# sourceMappingURL=metadata-normalizers.js.map
40
+ //# debugId=132b389e-5119-5dc0-8029-09c0624fb041
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-normalizers.js","sourceRoot":"/","sources":["cli/commands/metadata-normalizers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,sBAAsB,CAAC,QAAQ,CAAC,OAAkD,CAAC,EAAE,CAAC;QACxF,OAAO,OAAkD,CAAC;IAC5D,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAC5D,MAAM,IAAI,UAAU,CAAC,oEAAoE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9G,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,UAAU,CAAC,0CAA0C,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;AACpF,CAAC","sourcesContent":["import { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { parseOptionalNumber } from \"../../core/item/parse.js\";\nimport { CONFIDENCE_TEXT_VALUES } from \"../../types/index.js\";\n\nexport function normalizeRiskInput(value: string): string {\n const trimmed = value.trim();\n return trimmed.toLowerCase() === \"med\" ? \"medium\" : trimmed;\n}\n\nexport function normalizeSeverityInput(value: string): string {\n const trimmed = value.trim();\n return trimmed.toLowerCase() === \"med\" ? \"medium\" : trimmed;\n}\n\nexport function parseConfidenceInput(value: string): number | \"low\" | \"medium\" | \"high\" {\n const trimmed = value.trim().toLowerCase();\n if (trimmed === \"med\") {\n return \"medium\";\n }\n if (CONFIDENCE_TEXT_VALUES.includes(trimmed as (typeof CONFIDENCE_TEXT_VALUES)[number])) {\n return trimmed as (typeof CONFIDENCE_TEXT_VALUES)[number];\n }\n const parsed = parseOptionalNumber(value, \"confidence\");\n if (!Number.isInteger(parsed) || parsed < 0 || parsed > 100) {\n throw new PmCliError(\"Confidence must be an integer 0..100 or one of low|med|medium|high\", EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\nexport function parseRegressionInput(value: string): boolean {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\") {\n return false;\n }\n throw new PmCliError(\"Regression must be one of true|false|1|0\", EXIT_CODE.USAGE);\n}\n"]}
1
+ {"version":3,"file":"metadata-normalizers.js","sources":["cli/commands/metadata-normalizers.ts"],"sourceRoot":"/","sourcesContent":["import { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { parseOptionalNumber } from \"../../core/item/parse.js\";\nimport { CONFIDENCE_TEXT_VALUES } from \"../../types/index.js\";\n\nexport function normalizeRiskInput(value: string): string {\n const trimmed = value.trim();\n return trimmed.toLowerCase() === \"med\" ? \"medium\" : trimmed;\n}\n\nexport function normalizeSeverityInput(value: string): string {\n const trimmed = value.trim();\n return trimmed.toLowerCase() === \"med\" ? \"medium\" : trimmed;\n}\n\nexport function parseConfidenceInput(value: string): number | \"low\" | \"medium\" | \"high\" {\n const trimmed = value.trim().toLowerCase();\n if (trimmed === \"med\") {\n return \"medium\";\n }\n if (CONFIDENCE_TEXT_VALUES.includes(trimmed as (typeof CONFIDENCE_TEXT_VALUES)[number])) {\n return trimmed as (typeof CONFIDENCE_TEXT_VALUES)[number];\n }\n const parsed = parseOptionalNumber(value, \"confidence\");\n if (!Number.isInteger(parsed) || parsed < 0 || parsed > 100) {\n throw new PmCliError(\"Confidence must be an integer 0..100 or one of low|med|medium|high\", EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\nexport function parseRegressionInput(value: string): boolean {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\") {\n return false;\n }\n throw new PmCliError(\"Regression must be one of true|false|1|0\", EXIT_CODE.USAGE);\n}\n"],"names":[],"mappings":";;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,sBAAsB,CAAC,QAAQ,CAAC,OAAkD,CAAC,EAAE,CAAC;QACxF,OAAO,OAAkD,CAAC;IAC5D,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAC5D,MAAM,IAAI,UAAU,CAAC,oEAAoE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9G,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,UAAU,CAAC,0CAA0C,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;AACpF,CAAC","debugId":"132b389e-5119-5dc0-8029-09c0624fb041"}
@@ -1,3 +1,5 @@
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]="fa3185a0-2792-5309-9354-4f20ad3c9c58")}catch(e){}}();
1
3
  import { pathExists } from "../../core/fs/fs-utils.js";
2
4
  import { normalizeStatusInput } from "../../core/item/status.js";
3
5
  import { resolveRuntimeStatusRegistry } from "../../core/schema/runtime-schema.js";
@@ -286,4 +288,5 @@ export async function runNormalize(options, global) {
286
288
  generated_at: listed.now,
287
289
  };
288
290
  }
289
- //# sourceMappingURL=normalize.js.map
291
+ //# sourceMappingURL=normalize.js.map
292
+ //# debugId=fa3185a0-2792-5309-9354-4f20ad3c9c58
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.js","sourceRoot":"/","sources":["cli/commands/normalize.ts"],"names":[],"mappings":"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","sourcesContent":["import { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport { resolveRuntimeStatusRegistry, type RuntimeStatusRegistry } from \"../../core/schema/runtime-schema.js\";\nimport {\n DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS,\n EXIT_CODE,\n} from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { toErrorMessage, toNonEmptyStringOrUndefined } from \"../../core/shared/primitives.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type { ItemStatus } from \"../../types/index.js\";\nimport { runList, type ListedItem, type ListOptions } from \"./list.js\";\nimport { runUpdate, type UpdateCommandOptions } from \"./update.js\";\n\ninterface LifecyclePatternSettingsSource {\n validation: {\n lifecycle_closure_like_blocked_reason_patterns: string[];\n lifecycle_closure_like_resolution_patterns: string[];\n lifecycle_closure_like_actual_result_patterns: string[];\n };\n}\n\ntype LifecyclePatternFieldKey = \"blocked_reason\" | \"resolution\" | \"actual_result\";\n\ninterface LifecyclePatternPolicy {\n closure_like_metadata_field_patterns: Record<LifecyclePatternFieldKey, string[]>;\n}\n\ninterface NormalizeRuleCount {\n rule: string;\n count: number;\n}\n\ninterface NormalizePlannedChange {\n field: string;\n before: unknown;\n after: unknown;\n rule: string;\n}\n\ninterface NormalizeItemPlan {\n id: string;\n changes: NormalizePlannedChange[];\n}\n\ninterface NormalizeInternalItemPlan extends NormalizeItemPlan {\n update: UpdateCommandOptions;\n}\n\ninterface NormalizeApplyResultRow {\n id: string;\n status: \"updated\" | \"failed\" | \"skipped\";\n changed_fields?: string[];\n warnings?: string[];\n error?: string;\n}\n\nexport interface NormalizeCommandOptions {\n status?: string;\n list: ListOptions;\n dryRun?: boolean;\n apply?: boolean;\n author?: string;\n message?: string;\n force?: boolean;\n allowAuditUpdate?: boolean;\n}\n\nexport interface NormalizeResult {\n mode: \"dry_run\" | \"apply\";\n dry_run: boolean;\n matched_count: number;\n filters: Record<string, unknown>;\n rules: string[];\n rule_counts: NormalizeRuleCount[];\n warnings: string[];\n item_plans: NormalizeItemPlan[];\n updated_count?: number;\n skipped_count?: number;\n failed_count?: number;\n rows?: NormalizeApplyResultRow[];\n ids: string[];\n generated_at: string;\n}\n\nconst LOW_SIGNAL_TEXT_TOKENS = new Set([\n \"none\",\n \"null\",\n \"n/a\",\n \"na\",\n \"tbd\",\n \"todo\",\n \"unknown\",\n \"placeholder\",\n]);\n\nconst RULE_ACTIVE_CLOSURE_LIKE_METADATA = \"active_closure_like_metadata\";\nconst RULE_ACTIVE_CLOSE_REASON = \"active_close_reason\";\nconst RULE_CLOSED_RESOLUTION_BACKFILL = \"closed_resolution_backfill\";\n\nconst ACTIVE_CLEAR_FIELD_RULES: Array<{\n field: LifecyclePatternFieldKey;\n unsetField: string;\n}> = [\n { field: \"blocked_reason\", unsetField: \"blocked-reason\" },\n { field: \"resolution\", unsetField: \"resolution\" },\n { field: \"actual_result\", unsetField: \"actual-result\" },\n];\n\nconst CLOSED_BACKFILL_FIELD_RULES: Array<{\n field: \"resolution\" | \"expected_result\" | \"actual_result\";\n optionKey: \"resolution\" | \"expectedResult\" | \"actualResult\";\n}> = [\n { field: \"resolution\", optionKey: \"resolution\" },\n { field: \"expected_result\", optionKey: \"expectedResult\" },\n { field: \"actual_result\", optionKey: \"actualResult\" },\n];\n\nfunction normalizeComparableText(value: string): string {\n return value.trim().toLowerCase().replaceAll(/\\s+/g, \" \");\n}\n\nfunction isLowSignalText(value: string | undefined): boolean {\n if (!value) {\n return false;\n }\n return LOW_SIGNAL_TEXT_TOKENS.has(normalizeComparableText(value));\n}\n\nfunction sanitizeBeforeValue(value: unknown): unknown {\n if (value === undefined) {\n return null;\n }\n return value;\n}\n\nfunction normalizeLifecyclePatternList(values: readonly string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\nfunction resolveLifecyclePatternPolicy(settings: LifecyclePatternSettingsSource): LifecyclePatternPolicy {\n return {\n closure_like_metadata_field_patterns: {\n blocked_reason: normalizeLifecyclePatternList(settings.validation.lifecycle_closure_like_blocked_reason_patterns),\n resolution: normalizeLifecyclePatternList(settings.validation.lifecycle_closure_like_resolution_patterns),\n actual_result: normalizeLifecyclePatternList(settings.validation.lifecycle_closure_like_actual_result_patterns),\n },\n };\n}\n\nfunction toMeaningfulCloseReason(value: unknown): string | undefined {\n const normalized = toNonEmptyStringOrUndefined(value);\n if (!normalized || isLowSignalText(normalized)) {\n return undefined;\n }\n return normalized;\n}\n\nfunction normalizeStatusFilter(value: string | undefined, statusRegistry: RuntimeStatusRegistry): ItemStatus | undefined {\n if (value === undefined) {\n return undefined;\n }\n const normalized = normalizeStatusInput(value, statusRegistry);\n if (!normalized) {\n const allowedStatuses = statusRegistry.definitions.map((definition) => definition.id);\n throw new PmCliError(`Invalid --filter-status value \"${value}\". Allowed: ${allowedStatuses.join(\", \")}`, EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\nfunction buildClosedBackfillValue(\n field: \"resolution\" | \"expected_result\" | \"actual_result\",\n closeReason: string | undefined,\n): string {\n const closureEvidenceSuffix = closeReason\n ? \"existing close_reason remains the detailed closure evidence.\"\n : \"the field was missing or low-signal.\";\n if (closeReason) {\n if (field === \"resolution\") {\n return `Resolution normalized from closed status; ${closureEvidenceSuffix}`;\n }\n if (field === \"expected_result\") {\n return `Expected closure outcome normalized from closed status; ${closureEvidenceSuffix}`;\n }\n return `Actual closure outcome normalized from closed status; ${closureEvidenceSuffix}`;\n }\n if (field === \"resolution\") {\n return `Resolution normalized from closed status because ${closureEvidenceSuffix}`;\n }\n if (field === \"expected_result\") {\n return `Expected closure outcome normalized from closed status because ${closureEvidenceSuffix}`;\n }\n return `Actual closure outcome normalized from closed status because ${closureEvidenceSuffix}`;\n}\n\nfunction isTerminalStatus(item: ListedItem, statusRegistry: RuntimeStatusRegistry): boolean {\n const normalized = normalizeStatusInput(item.status, statusRegistry) ?? item.status;\n return statusRegistry.terminal_statuses.has(normalized);\n}\n\nfunction isTerminalDoneStatus(item: ListedItem, terminalDoneStatuses: ReadonlySet<string>, statusRegistry: RuntimeStatusRegistry): boolean {\n const normalized = normalizeStatusInput(item.status, statusRegistry) ?? item.status;\n return terminalDoneStatuses.has(normalized);\n}\n\nfunction buildNormalizePlan(\n item: ListedItem,\n statusRegistry: RuntimeStatusRegistry,\n terminalDoneStatuses: ReadonlySet<string>,\n lifecyclePatterns: LifecyclePatternPolicy,\n): NormalizeInternalItemPlan {\n const updates: UpdateCommandOptions = {};\n const changes: NormalizePlannedChange[] = [];\n const unsetFields = new Set<string>();\n const itemRecord = item as unknown as Record<string, unknown>;\n\n if (!isTerminalStatus(item, statusRegistry)) {\n for (const definition of ACTIVE_CLEAR_FIELD_RULES) {\n const currentValue = toNonEmptyStringOrUndefined(itemRecord[definition.field]);\n if (!currentValue) {\n continue;\n }\n const normalized = normalizeComparableText(currentValue);\n const hasClosurePattern = lifecyclePatterns.closure_like_metadata_field_patterns[definition.field].some((pattern) =>\n normalized.includes(pattern),\n );\n if (!hasClosurePattern && !isLowSignalText(currentValue)) {\n continue;\n }\n if (!unsetFields.has(definition.unsetField)) {\n unsetFields.add(definition.unsetField);\n }\n changes.push({\n field: definition.field,\n before: sanitizeBeforeValue(itemRecord[definition.field]),\n after: null,\n rule: RULE_ACTIVE_CLOSURE_LIKE_METADATA,\n });\n }\n\n if (toNonEmptyStringOrUndefined(itemRecord.close_reason)) {\n unsetFields.add(\"close-reason\");\n changes.push({\n field: \"close_reason\",\n before: sanitizeBeforeValue(itemRecord.close_reason),\n after: null,\n rule: RULE_ACTIVE_CLOSE_REASON,\n });\n }\n }\n\n if (isTerminalDoneStatus(item, terminalDoneStatuses, statusRegistry)) {\n const closeReason = toMeaningfulCloseReason(itemRecord.close_reason);\n for (const definition of CLOSED_BACKFILL_FIELD_RULES) {\n const currentValue = toNonEmptyStringOrUndefined(itemRecord[definition.field]);\n if (currentValue && !isLowSignalText(currentValue)) {\n continue;\n }\n const replacement = buildClosedBackfillValue(definition.field, closeReason);\n updates[definition.optionKey] = replacement;\n changes.push({\n field: definition.field,\n before: sanitizeBeforeValue(itemRecord[definition.field]),\n after: replacement,\n rule: RULE_CLOSED_RESOLUTION_BACKFILL,\n });\n }\n }\n\n if (unsetFields.size > 0) {\n updates.unset = [...unsetFields].sort((left, right) => left.localeCompare(right));\n }\n\n changes.sort((left, right) => left.field.localeCompare(right.field) || left.rule.localeCompare(right.rule));\n return {\n id: item.id,\n changes,\n update: updates,\n };\n}\n\nfunction summarizeRuleCounts(itemPlans: NormalizeItemPlan[]): NormalizeRuleCount[] {\n const counts = new Map<string, number>();\n for (const plan of itemPlans) {\n const planRules = new Set(plan.changes.map((change) => change.rule));\n for (const rule of planRules) {\n counts.set(rule, (counts.get(rule) ?? 0) + 1);\n }\n }\n return [...counts.entries()]\n .map(([rule, count]) => ({ rule, count }))\n .sort((left, right) => left.rule.localeCompare(right.rule));\n}\n\nfunction toNormalizeWarnings(ruleCounts: NormalizeRuleCount[]): string[] {\n return ruleCounts\n .map((entry) => `normalize_${entry.rule}:${entry.count}`)\n .sort((left, right) => left.localeCompare(right));\n}\n\n\nexport async function runNormalize(options: NormalizeCommandOptions, global: GlobalOptions): Promise<NormalizeResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const lifecyclePatternPolicy = resolveLifecyclePatternPolicy(settings as unknown as LifecyclePatternSettingsSource);\n const statusFilter = normalizeStatusFilter(options.status, statusRegistry);\n const dryRun = options.apply === true ? false : true;\n\n if (options.apply === true && options.dryRun === true) {\n throw new PmCliError(\"--dry-run cannot be combined with --apply\", EXIT_CODE.USAGE);\n }\n\n const listed = await runList(\n statusFilter,\n {\n ...options.list,\n includeBody: true,\n excludeTerminal: false,\n },\n global,\n );\n\n const terminalDoneStatuses = new Set<string>(statusRegistry.terminal_done_statuses);\n terminalDoneStatuses.add(statusRegistry.close_status);\n const sortedItems = [...listed.items].sort((left, right) => left.id.localeCompare(right.id));\n const planned = sortedItems.map((item) => buildNormalizePlan(item, statusRegistry, terminalDoneStatuses, lifecyclePatternPolicy));\n const ruleCounts = summarizeRuleCounts(planned);\n const warnings = toNormalizeWarnings(ruleCounts);\n const itemPlans = planned.map((plan) => ({\n id: plan.id,\n changes: plan.changes,\n }));\n const rules = [...new Set(ruleCounts.map((entry) => entry.rule))].sort((left, right) => left.localeCompare(right));\n\n if (dryRun) {\n return {\n mode: \"dry_run\",\n dry_run: true,\n matched_count: listed.items.length,\n filters: listed.filters,\n rules,\n rule_counts: ruleCounts,\n warnings,\n item_plans: itemPlans,\n ids: [],\n generated_at: listed.now,\n };\n }\n\n const applyRows: NormalizeApplyResultRow[] = [];\n const updatedIds: string[] = [];\n const applyMessage =\n typeof options.message === \"string\" && options.message.trim().length > 0 ? options.message : \"normalize apply\";\n const updateBaseOptions: Pick<UpdateCommandOptions, \"author\" | \"message\" | \"force\" | \"allowAuditUpdate\"> = {\n author: options.author,\n message: applyMessage,\n force: options.force === true ? true : undefined,\n allowAuditUpdate: options.allowAuditUpdate === true ? true : undefined,\n };\n\n for (const plan of planned) {\n if (plan.changes.length === 0) {\n applyRows.push({\n id: plan.id,\n status: \"skipped\",\n });\n continue;\n }\n try {\n const result = await runUpdate(\n plan.id,\n {\n ...plan.update,\n ...updateBaseOptions,\n },\n global,\n );\n applyRows.push({\n id: plan.id,\n status: \"updated\",\n changed_fields: result.changed_fields,\n warnings: result.warnings,\n });\n updatedIds.push(plan.id);\n } catch (error: unknown) {\n applyRows.push({\n id: plan.id,\n status: \"failed\",\n error: toErrorMessage(error),\n });\n }\n }\n\n const updatedCount = applyRows.filter((row) => row.status === \"updated\").length;\n const skippedCount = applyRows.filter((row) => row.status === \"skipped\").length;\n const failedCount = applyRows.filter((row) => row.status === \"failed\").length;\n\n return {\n mode: \"apply\",\n dry_run: false,\n matched_count: listed.items.length,\n filters: listed.filters,\n rules,\n rule_counts: ruleCounts,\n warnings,\n item_plans: itemPlans,\n updated_count: updatedCount,\n skipped_count: skippedCount,\n failed_count: failedCount,\n rows: applyRows,\n ids: updatedIds,\n generated_at: listed.now,\n };\n}\n"]}
1
+ {"version":3,"file":"normalize.js","sources":["cli/commands/normalize.ts"],"sourceRoot":"/","sourcesContent":["import { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport { resolveRuntimeStatusRegistry, type RuntimeStatusRegistry } from \"../../core/schema/runtime-schema.js\";\nimport {\n DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS,\n EXIT_CODE,\n} from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { toErrorMessage, toNonEmptyStringOrUndefined } from \"../../core/shared/primitives.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type { ItemStatus } from \"../../types/index.js\";\nimport { runList, type ListedItem, type ListOptions } from \"./list.js\";\nimport { runUpdate, type UpdateCommandOptions } from \"./update.js\";\n\ninterface LifecyclePatternSettingsSource {\n validation: {\n lifecycle_closure_like_blocked_reason_patterns: string[];\n lifecycle_closure_like_resolution_patterns: string[];\n lifecycle_closure_like_actual_result_patterns: string[];\n };\n}\n\ntype LifecyclePatternFieldKey = \"blocked_reason\" | \"resolution\" | \"actual_result\";\n\ninterface LifecyclePatternPolicy {\n closure_like_metadata_field_patterns: Record<LifecyclePatternFieldKey, string[]>;\n}\n\ninterface NormalizeRuleCount {\n rule: string;\n count: number;\n}\n\ninterface NormalizePlannedChange {\n field: string;\n before: unknown;\n after: unknown;\n rule: string;\n}\n\ninterface NormalizeItemPlan {\n id: string;\n changes: NormalizePlannedChange[];\n}\n\ninterface NormalizeInternalItemPlan extends NormalizeItemPlan {\n update: UpdateCommandOptions;\n}\n\ninterface NormalizeApplyResultRow {\n id: string;\n status: \"updated\" | \"failed\" | \"skipped\";\n changed_fields?: string[];\n warnings?: string[];\n error?: string;\n}\n\nexport interface NormalizeCommandOptions {\n status?: string;\n list: ListOptions;\n dryRun?: boolean;\n apply?: boolean;\n author?: string;\n message?: string;\n force?: boolean;\n allowAuditUpdate?: boolean;\n}\n\nexport interface NormalizeResult {\n mode: \"dry_run\" | \"apply\";\n dry_run: boolean;\n matched_count: number;\n filters: Record<string, unknown>;\n rules: string[];\n rule_counts: NormalizeRuleCount[];\n warnings: string[];\n item_plans: NormalizeItemPlan[];\n updated_count?: number;\n skipped_count?: number;\n failed_count?: number;\n rows?: NormalizeApplyResultRow[];\n ids: string[];\n generated_at: string;\n}\n\nconst LOW_SIGNAL_TEXT_TOKENS = new Set([\n \"none\",\n \"null\",\n \"n/a\",\n \"na\",\n \"tbd\",\n \"todo\",\n \"unknown\",\n \"placeholder\",\n]);\n\nconst RULE_ACTIVE_CLOSURE_LIKE_METADATA = \"active_closure_like_metadata\";\nconst RULE_ACTIVE_CLOSE_REASON = \"active_close_reason\";\nconst RULE_CLOSED_RESOLUTION_BACKFILL = \"closed_resolution_backfill\";\n\nconst ACTIVE_CLEAR_FIELD_RULES: Array<{\n field: LifecyclePatternFieldKey;\n unsetField: string;\n}> = [\n { field: \"blocked_reason\", unsetField: \"blocked-reason\" },\n { field: \"resolution\", unsetField: \"resolution\" },\n { field: \"actual_result\", unsetField: \"actual-result\" },\n];\n\nconst CLOSED_BACKFILL_FIELD_RULES: Array<{\n field: \"resolution\" | \"expected_result\" | \"actual_result\";\n optionKey: \"resolution\" | \"expectedResult\" | \"actualResult\";\n}> = [\n { field: \"resolution\", optionKey: \"resolution\" },\n { field: \"expected_result\", optionKey: \"expectedResult\" },\n { field: \"actual_result\", optionKey: \"actualResult\" },\n];\n\nfunction normalizeComparableText(value: string): string {\n return value.trim().toLowerCase().replaceAll(/\\s+/g, \" \");\n}\n\nfunction isLowSignalText(value: string | undefined): boolean {\n if (!value) {\n return false;\n }\n return LOW_SIGNAL_TEXT_TOKENS.has(normalizeComparableText(value));\n}\n\nfunction sanitizeBeforeValue(value: unknown): unknown {\n if (value === undefined) {\n return null;\n }\n return value;\n}\n\nfunction normalizeLifecyclePatternList(values: readonly string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\nfunction resolveLifecyclePatternPolicy(settings: LifecyclePatternSettingsSource): LifecyclePatternPolicy {\n return {\n closure_like_metadata_field_patterns: {\n blocked_reason: normalizeLifecyclePatternList(settings.validation.lifecycle_closure_like_blocked_reason_patterns),\n resolution: normalizeLifecyclePatternList(settings.validation.lifecycle_closure_like_resolution_patterns),\n actual_result: normalizeLifecyclePatternList(settings.validation.lifecycle_closure_like_actual_result_patterns),\n },\n };\n}\n\nfunction toMeaningfulCloseReason(value: unknown): string | undefined {\n const normalized = toNonEmptyStringOrUndefined(value);\n if (!normalized || isLowSignalText(normalized)) {\n return undefined;\n }\n return normalized;\n}\n\nfunction normalizeStatusFilter(value: string | undefined, statusRegistry: RuntimeStatusRegistry): ItemStatus | undefined {\n if (value === undefined) {\n return undefined;\n }\n const normalized = normalizeStatusInput(value, statusRegistry);\n if (!normalized) {\n const allowedStatuses = statusRegistry.definitions.map((definition) => definition.id);\n throw new PmCliError(`Invalid --filter-status value \"${value}\". Allowed: ${allowedStatuses.join(\", \")}`, EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\nfunction buildClosedBackfillValue(\n field: \"resolution\" | \"expected_result\" | \"actual_result\",\n closeReason: string | undefined,\n): string {\n const closureEvidenceSuffix = closeReason\n ? \"existing close_reason remains the detailed closure evidence.\"\n : \"the field was missing or low-signal.\";\n if (closeReason) {\n if (field === \"resolution\") {\n return `Resolution normalized from closed status; ${closureEvidenceSuffix}`;\n }\n if (field === \"expected_result\") {\n return `Expected closure outcome normalized from closed status; ${closureEvidenceSuffix}`;\n }\n return `Actual closure outcome normalized from closed status; ${closureEvidenceSuffix}`;\n }\n if (field === \"resolution\") {\n return `Resolution normalized from closed status because ${closureEvidenceSuffix}`;\n }\n if (field === \"expected_result\") {\n return `Expected closure outcome normalized from closed status because ${closureEvidenceSuffix}`;\n }\n return `Actual closure outcome normalized from closed status because ${closureEvidenceSuffix}`;\n}\n\nfunction isTerminalStatus(item: ListedItem, statusRegistry: RuntimeStatusRegistry): boolean {\n const normalized = normalizeStatusInput(item.status, statusRegistry) ?? item.status;\n return statusRegistry.terminal_statuses.has(normalized);\n}\n\nfunction isTerminalDoneStatus(item: ListedItem, terminalDoneStatuses: ReadonlySet<string>, statusRegistry: RuntimeStatusRegistry): boolean {\n const normalized = normalizeStatusInput(item.status, statusRegistry) ?? item.status;\n return terminalDoneStatuses.has(normalized);\n}\n\nfunction buildNormalizePlan(\n item: ListedItem,\n statusRegistry: RuntimeStatusRegistry,\n terminalDoneStatuses: ReadonlySet<string>,\n lifecyclePatterns: LifecyclePatternPolicy,\n): NormalizeInternalItemPlan {\n const updates: UpdateCommandOptions = {};\n const changes: NormalizePlannedChange[] = [];\n const unsetFields = new Set<string>();\n const itemRecord = item as unknown as Record<string, unknown>;\n\n if (!isTerminalStatus(item, statusRegistry)) {\n for (const definition of ACTIVE_CLEAR_FIELD_RULES) {\n const currentValue = toNonEmptyStringOrUndefined(itemRecord[definition.field]);\n if (!currentValue) {\n continue;\n }\n const normalized = normalizeComparableText(currentValue);\n const hasClosurePattern = lifecyclePatterns.closure_like_metadata_field_patterns[definition.field].some((pattern) =>\n normalized.includes(pattern),\n );\n if (!hasClosurePattern && !isLowSignalText(currentValue)) {\n continue;\n }\n if (!unsetFields.has(definition.unsetField)) {\n unsetFields.add(definition.unsetField);\n }\n changes.push({\n field: definition.field,\n before: sanitizeBeforeValue(itemRecord[definition.field]),\n after: null,\n rule: RULE_ACTIVE_CLOSURE_LIKE_METADATA,\n });\n }\n\n if (toNonEmptyStringOrUndefined(itemRecord.close_reason)) {\n unsetFields.add(\"close-reason\");\n changes.push({\n field: \"close_reason\",\n before: sanitizeBeforeValue(itemRecord.close_reason),\n after: null,\n rule: RULE_ACTIVE_CLOSE_REASON,\n });\n }\n }\n\n if (isTerminalDoneStatus(item, terminalDoneStatuses, statusRegistry)) {\n const closeReason = toMeaningfulCloseReason(itemRecord.close_reason);\n for (const definition of CLOSED_BACKFILL_FIELD_RULES) {\n const currentValue = toNonEmptyStringOrUndefined(itemRecord[definition.field]);\n if (currentValue && !isLowSignalText(currentValue)) {\n continue;\n }\n const replacement = buildClosedBackfillValue(definition.field, closeReason);\n updates[definition.optionKey] = replacement;\n changes.push({\n field: definition.field,\n before: sanitizeBeforeValue(itemRecord[definition.field]),\n after: replacement,\n rule: RULE_CLOSED_RESOLUTION_BACKFILL,\n });\n }\n }\n\n if (unsetFields.size > 0) {\n updates.unset = [...unsetFields].sort((left, right) => left.localeCompare(right));\n }\n\n changes.sort((left, right) => left.field.localeCompare(right.field) || left.rule.localeCompare(right.rule));\n return {\n id: item.id,\n changes,\n update: updates,\n };\n}\n\nfunction summarizeRuleCounts(itemPlans: NormalizeItemPlan[]): NormalizeRuleCount[] {\n const counts = new Map<string, number>();\n for (const plan of itemPlans) {\n const planRules = new Set(plan.changes.map((change) => change.rule));\n for (const rule of planRules) {\n counts.set(rule, (counts.get(rule) ?? 0) + 1);\n }\n }\n return [...counts.entries()]\n .map(([rule, count]) => ({ rule, count }))\n .sort((left, right) => left.rule.localeCompare(right.rule));\n}\n\nfunction toNormalizeWarnings(ruleCounts: NormalizeRuleCount[]): string[] {\n return ruleCounts\n .map((entry) => `normalize_${entry.rule}:${entry.count}`)\n .sort((left, right) => left.localeCompare(right));\n}\n\n\nexport async function runNormalize(options: NormalizeCommandOptions, global: GlobalOptions): Promise<NormalizeResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const lifecyclePatternPolicy = resolveLifecyclePatternPolicy(settings as unknown as LifecyclePatternSettingsSource);\n const statusFilter = normalizeStatusFilter(options.status, statusRegistry);\n const dryRun = options.apply === true ? false : true;\n\n if (options.apply === true && options.dryRun === true) {\n throw new PmCliError(\"--dry-run cannot be combined with --apply\", EXIT_CODE.USAGE);\n }\n\n const listed = await runList(\n statusFilter,\n {\n ...options.list,\n includeBody: true,\n excludeTerminal: false,\n },\n global,\n );\n\n const terminalDoneStatuses = new Set<string>(statusRegistry.terminal_done_statuses);\n terminalDoneStatuses.add(statusRegistry.close_status);\n const sortedItems = [...listed.items].sort((left, right) => left.id.localeCompare(right.id));\n const planned = sortedItems.map((item) => buildNormalizePlan(item, statusRegistry, terminalDoneStatuses, lifecyclePatternPolicy));\n const ruleCounts = summarizeRuleCounts(planned);\n const warnings = toNormalizeWarnings(ruleCounts);\n const itemPlans = planned.map((plan) => ({\n id: plan.id,\n changes: plan.changes,\n }));\n const rules = [...new Set(ruleCounts.map((entry) => entry.rule))].sort((left, right) => left.localeCompare(right));\n\n if (dryRun) {\n return {\n mode: \"dry_run\",\n dry_run: true,\n matched_count: listed.items.length,\n filters: listed.filters,\n rules,\n rule_counts: ruleCounts,\n warnings,\n item_plans: itemPlans,\n ids: [],\n generated_at: listed.now,\n };\n }\n\n const applyRows: NormalizeApplyResultRow[] = [];\n const updatedIds: string[] = [];\n const applyMessage =\n typeof options.message === \"string\" && options.message.trim().length > 0 ? options.message : \"normalize apply\";\n const updateBaseOptions: Pick<UpdateCommandOptions, \"author\" | \"message\" | \"force\" | \"allowAuditUpdate\"> = {\n author: options.author,\n message: applyMessage,\n force: options.force === true ? true : undefined,\n allowAuditUpdate: options.allowAuditUpdate === true ? true : undefined,\n };\n\n for (const plan of planned) {\n if (plan.changes.length === 0) {\n applyRows.push({\n id: plan.id,\n status: \"skipped\",\n });\n continue;\n }\n try {\n const result = await runUpdate(\n plan.id,\n {\n ...plan.update,\n ...updateBaseOptions,\n },\n global,\n );\n applyRows.push({\n id: plan.id,\n status: \"updated\",\n changed_fields: result.changed_fields,\n warnings: result.warnings,\n });\n updatedIds.push(plan.id);\n } catch (error: unknown) {\n applyRows.push({\n id: plan.id,\n status: \"failed\",\n error: toErrorMessage(error),\n });\n }\n }\n\n const updatedCount = applyRows.filter((row) => row.status === \"updated\").length;\n const skippedCount = applyRows.filter((row) => row.status === \"skipped\").length;\n const failedCount = applyRows.filter((row) => row.status === \"failed\").length;\n\n return {\n mode: \"apply\",\n dry_run: false,\n matched_count: listed.items.length,\n filters: listed.filters,\n rules,\n rule_counts: ruleCounts,\n warnings,\n item_plans: itemPlans,\n updated_count: updatedCount,\n skipped_count: skippedCount,\n failed_count: failedCount,\n rows: applyRows,\n ids: updatedIds,\n generated_at: listed.now,\n };\n}\n"],"names":[],"mappings":"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","debugId":"fa3185a0-2792-5309-9354-4f20ad3c9c58"}
@@ -1,3 +1,5 @@
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]="e775672d-e669-5b8d-bd54-5340390b2120")}catch(e){}}();
1
3
  import { pathExists } from "../../core/fs/fs-utils.js";
2
4
  import { getActiveExtensionRegistrations } from "../../core/extensions/index.js";
3
5
  import { resolveItemTypeRegistry } from "../../core/item/type-registry.js";
@@ -118,4 +120,5 @@ export async function runNotes(id, options, global) {
118
120
  count: notes.length,
119
121
  };
120
122
  }
121
- //# sourceMappingURL=notes.js.map
123
+ //# sourceMappingURL=notes.js.map
124
+ //# debugId=e775672d-e669-5b8d-bd54-5340390b2120
@@ -1 +1 @@
1
- {"version":3,"file":"notes.js","sourceRoot":"/","sources":["cli/commands/notes.ts"],"names":[],"mappings":"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","sourcesContent":["import { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { createStdinTokenResolver, parseCsvKv } from \"../../core/item/parse.js\";\nimport { locateItem, mutateItem, readLocatedItem } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { parseLimit } from \"../shared-parsers.js\";\nimport type { LogNote } from \"../../types/index.js\";\n\nexport interface NotesCommandOptions {\n add?: string;\n limit?: string;\n author?: string;\n message?: string;\n allowAuditNote?: boolean;\n allowAuditComment?: boolean;\n force?: boolean;\n}\n\nexport interface NotesResult {\n id: string;\n notes: LogNote[];\n count: number;\n}\n\nfunction resolveAuthor(candidate: string | undefined, fallback: string): string {\n const resolved = candidate ?? process.env.PM_AUTHOR ?? fallback;\n const trimmed = resolved.trim();\n return trimmed || \"unknown\";\n}\n\nfunction limitNotes(values: LogNote[], limit: number | undefined): LogNote[] {\n if (limit === undefined) return values;\n if (limit === 0) return [];\n return values.slice(Math.max(0, values.length - limit));\n}\n\nfunction parseNoteTextInput(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) {\n return \"\";\n }\n const looksStructured = /^(?:[-*+]\\s*)?text\\s*[:=]/im.test(trimmed) || trimmed.startsWith(\"```\");\n if (!looksStructured) {\n return trimmed;\n }\n try {\n const kv = parseCsvKv(trimmed, \"--add\");\n const keys = Object.keys(kv).map((key) => key.trim().toLowerCase());\n if (keys.some((key) => key !== \"text\")) {\n return trimmed;\n }\n const text = kv.text?.trim();\n return text || trimmed;\n } catch {\n return trimmed;\n }\n}\n\nexport async function runNotes(id: string, options: NotesCommandOptions, global: GlobalOptions): Promise<NotesResult> {\n const stdinResolver = createStdinTokenResolver();\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const settings = await readSettings(pmRoot);\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const limit = parseLimit(options.limit);\n\n if (options.add === undefined) {\n const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);\n if (!located) {\n throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);\n }\n const loaded = await readLocatedItem(located, { schema: settings.schema });\n const notes = limitNotes(loaded.document.metadata.notes ?? [], limit);\n return {\n id: located.id,\n notes,\n count: notes.length,\n };\n }\n\n const author = resolveAuthor(options.author, settings.author_default);\n const addInput = await stdinResolver.resolveValue(options.add, \"--add\");\n const text = parseNoteTextInput(addInput ?? \"\");\n if (!text) {\n throw new PmCliError(\"--add text cannot be empty\", EXIT_CODE.USAGE);\n }\n\n let result: Awaited<ReturnType<typeof mutateItem>>;\n try {\n result = await mutateItem({\n pmRoot,\n settings,\n id,\n op: \"note_add\",\n author,\n message: options.message,\n force: options.force,\n bypassAssigneeConflict: Boolean(options.allowAuditNote || options.allowAuditComment),\n mutate(document) {\n const notes = document.metadata.notes ?? [];\n notes.push({\n created_at: nowIso(),\n author,\n text,\n });\n document.metadata.notes = notes;\n return { changedFields: [\"notes\"] };\n },\n });\n } catch (error: unknown) {\n if (\n error instanceof PmCliError &&\n error.exitCode === EXIT_CODE.CONFLICT &&\n error.message.includes(\"is assigned to\") &&\n error.message.includes(\"Use --force to override\")\n ) {\n throw new PmCliError(error.message, error.exitCode, {\n code: \"ownership_conflict\",\n required:\n \"For append-only note audits on another owner's item, prefer --allow-audit-note (legacy alias: --allow-audit-comment) before considering --force.\",\n examples: ['pm notes pm-a1b2 --add \"audit note\" --author \"reviewer\" --allow-audit-note'],\n nextSteps: [\n \"Retry with --allow-audit-note (or legacy --allow-audit-comment) for append-only note audits that do not mutate item metadata beyond notes.\",\n \"Use --force only when an ownership override is explicitly approved.\",\n ],\n });\n }\n throw error;\n }\n\n const notes = limitNotes(result.item.notes as LogNote[], limit);\n return {\n id: result.item.id,\n notes,\n count: notes.length,\n };\n}\n"]}
1
+ {"version":3,"file":"notes.js","sources":["cli/commands/notes.ts"],"sourceRoot":"/","sourcesContent":["import { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { createStdinTokenResolver, parseCsvKv } from \"../../core/item/parse.js\";\nimport { locateItem, mutateItem, readLocatedItem } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { parseLimit } from \"../shared-parsers.js\";\nimport type { LogNote } from \"../../types/index.js\";\n\nexport interface NotesCommandOptions {\n add?: string;\n limit?: string;\n author?: string;\n message?: string;\n allowAuditNote?: boolean;\n allowAuditComment?: boolean;\n force?: boolean;\n}\n\nexport interface NotesResult {\n id: string;\n notes: LogNote[];\n count: number;\n}\n\nfunction resolveAuthor(candidate: string | undefined, fallback: string): string {\n const resolved = candidate ?? process.env.PM_AUTHOR ?? fallback;\n const trimmed = resolved.trim();\n return trimmed || \"unknown\";\n}\n\nfunction limitNotes(values: LogNote[], limit: number | undefined): LogNote[] {\n if (limit === undefined) return values;\n if (limit === 0) return [];\n return values.slice(Math.max(0, values.length - limit));\n}\n\nfunction parseNoteTextInput(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) {\n return \"\";\n }\n const looksStructured = /^(?:[-*+]\\s*)?text\\s*[:=]/im.test(trimmed) || trimmed.startsWith(\"```\");\n if (!looksStructured) {\n return trimmed;\n }\n try {\n const kv = parseCsvKv(trimmed, \"--add\");\n const keys = Object.keys(kv).map((key) => key.trim().toLowerCase());\n if (keys.some((key) => key !== \"text\")) {\n return trimmed;\n }\n const text = kv.text?.trim();\n return text || trimmed;\n } catch {\n return trimmed;\n }\n}\n\nexport async function runNotes(id: string, options: NotesCommandOptions, global: GlobalOptions): Promise<NotesResult> {\n const stdinResolver = createStdinTokenResolver();\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const settings = await readSettings(pmRoot);\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const limit = parseLimit(options.limit);\n\n if (options.add === undefined) {\n const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);\n if (!located) {\n throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);\n }\n const loaded = await readLocatedItem(located, { schema: settings.schema });\n const notes = limitNotes(loaded.document.metadata.notes ?? [], limit);\n return {\n id: located.id,\n notes,\n count: notes.length,\n };\n }\n\n const author = resolveAuthor(options.author, settings.author_default);\n const addInput = await stdinResolver.resolveValue(options.add, \"--add\");\n const text = parseNoteTextInput(addInput ?? \"\");\n if (!text) {\n throw new PmCliError(\"--add text cannot be empty\", EXIT_CODE.USAGE);\n }\n\n let result: Awaited<ReturnType<typeof mutateItem>>;\n try {\n result = await mutateItem({\n pmRoot,\n settings,\n id,\n op: \"note_add\",\n author,\n message: options.message,\n force: options.force,\n bypassAssigneeConflict: Boolean(options.allowAuditNote || options.allowAuditComment),\n mutate(document) {\n const notes = document.metadata.notes ?? [];\n notes.push({\n created_at: nowIso(),\n author,\n text,\n });\n document.metadata.notes = notes;\n return { changedFields: [\"notes\"] };\n },\n });\n } catch (error: unknown) {\n if (\n error instanceof PmCliError &&\n error.exitCode === EXIT_CODE.CONFLICT &&\n error.message.includes(\"is assigned to\") &&\n error.message.includes(\"Use --force to override\")\n ) {\n throw new PmCliError(error.message, error.exitCode, {\n code: \"ownership_conflict\",\n required:\n \"For append-only note audits on another owner's item, prefer --allow-audit-note (legacy alias: --allow-audit-comment) before considering --force.\",\n examples: ['pm notes pm-a1b2 --add \"audit note\" --author \"reviewer\" --allow-audit-note'],\n nextSteps: [\n \"Retry with --allow-audit-note (or legacy --allow-audit-comment) for append-only note audits that do not mutate item metadata beyond notes.\",\n \"Use --force only when an ownership override is explicitly approved.\",\n ],\n });\n }\n throw error;\n }\n\n const notes = limitNotes(result.item.notes as LogNote[], limit);\n return {\n id: result.item.id,\n notes,\n count: notes.length,\n };\n}\n"],"names":[],"mappings":"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","debugId":"e775672d-e669-5b8d-bd54-5340390b2120"}
@@ -0,0 +1,118 @@
1
+ import type { GlobalOptions } from "../../core/shared/command-types.js";
2
+ import type { DependencyKind, PlanDecision, PlanDiscovery, PlanHarness, PlanMode, PlanStep, PlanStepStatus, PlanValidationCheck } from "../../types/index.js";
3
+ export declare const PLAN_SUBCOMMANDS: readonly ["create", "show", "add-step", "update-step", "complete-step", "block-step", "reorder-step", "remove-step", "link", "unlink", "decision", "discovery", "validation", "resume", "approve", "materialize"];
4
+ export type PlanSubcommand = (typeof PLAN_SUBCOMMANDS)[number];
5
+ export declare const PLAN_SHOW_DEPTH_VALUES: readonly ["brief", "standard", "deep"];
6
+ export type PlanShowDepth = (typeof PLAN_SHOW_DEPTH_VALUES)[number];
7
+ export interface PlanCommandOptions {
8
+ title?: string;
9
+ description?: string;
10
+ scope?: string;
11
+ parent?: string;
12
+ related?: string | string[];
13
+ blocks?: string | string[];
14
+ blockedBy?: string | string[];
15
+ harness?: string;
16
+ mode?: string;
17
+ resumeContext?: string;
18
+ tags?: string;
19
+ priority?: string;
20
+ body?: string;
21
+ claim?: boolean;
22
+ fromSearch?: string;
23
+ stepTitle?: string;
24
+ stepBody?: string;
25
+ stepOwner?: string;
26
+ stepStatus?: string;
27
+ stepEvidence?: string;
28
+ stepBlockedReason?: string;
29
+ stepReplacement?: string;
30
+ dependsOn?: string | string[];
31
+ link?: string | string[];
32
+ linkKind?: string;
33
+ linkNote?: string;
34
+ promoteToItemDep?: boolean;
35
+ allowMultipleActive?: boolean;
36
+ file?: string | string[];
37
+ test?: string | string[];
38
+ doc?: string | string[];
39
+ decisionText?: string;
40
+ decisionRationale?: string;
41
+ decisionEvidence?: string;
42
+ discoveryText?: string;
43
+ validationText?: string;
44
+ validationCommand?: string;
45
+ validationExpected?: string;
46
+ depth?: string;
47
+ fields?: string;
48
+ steps?: string;
49
+ materializeType?: string;
50
+ materializeParent?: string;
51
+ materializeTags?: string;
52
+ author?: string;
53
+ message?: string;
54
+ force?: boolean;
55
+ }
56
+ export interface PlanCommandResult {
57
+ action: PlanSubcommand;
58
+ plan: PlanResultPlan;
59
+ step?: PlanStep;
60
+ current_step?: PlanStep | undefined;
61
+ next_actions?: string[];
62
+ materialized?: {
63
+ id: string;
64
+ type: string;
65
+ from_step: string;
66
+ }[];
67
+ warnings: string[];
68
+ generated_at: string;
69
+ }
70
+ export interface PlanResultPlan {
71
+ id: string;
72
+ title: string;
73
+ status: string;
74
+ mode: PlanMode;
75
+ scope?: string;
76
+ harness?: PlanHarness;
77
+ parent?: string;
78
+ resume_context?: string;
79
+ steps_summary: PlanStepSummary;
80
+ current_step?: {
81
+ id: string;
82
+ order: number;
83
+ title: string;
84
+ status: PlanStepStatus;
85
+ } | undefined;
86
+ blocked_steps?: {
87
+ id: string;
88
+ order: number;
89
+ title: string;
90
+ blocked_reason?: string;
91
+ }[];
92
+ steps?: PlanStep[];
93
+ decisions?: PlanDecision[];
94
+ discoveries?: PlanDiscovery[];
95
+ validation?: PlanValidationCheck[];
96
+ linked_items?: {
97
+ id: string;
98
+ kind: DependencyKind;
99
+ }[];
100
+ }
101
+ export interface PlanStepSummary {
102
+ total: number;
103
+ pending: number;
104
+ in_progress: number;
105
+ blocked: number;
106
+ completed: number;
107
+ skipped: number;
108
+ superseded: number;
109
+ }
110
+ export interface PlanDispatchInput {
111
+ subcommand: PlanSubcommand;
112
+ id?: string;
113
+ stepRef?: string;
114
+ reorderTo?: number;
115
+ options: PlanCommandOptions;
116
+ global: GlobalOptions;
117
+ }
118
+ export declare function runPlan(input: PlanDispatchInput): Promise<PlanCommandResult>;