@unbrained/pm-cli 2026.5.29 → 2026.5.31

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 (274) hide show
  1. package/CHANGELOG.md +54 -12
  2. package/dist/cli/bootstrap-args.d.ts +1 -1
  3. package/dist/cli/bootstrap-args.js +59 -9
  4. package/dist/cli/bootstrap-args.js.map +1 -1
  5. package/dist/cli/commands/activity.js +4 -4
  6. package/dist/cli/commands/activity.js.map +1 -1
  7. package/dist/cli/commands/calendar.js +83 -11
  8. package/dist/cli/commands/calendar.js.map +1 -1
  9. package/dist/cli/commands/close.js +4 -4
  10. package/dist/cli/commands/close.js.map +1 -1
  11. package/dist/cli/commands/completion.js +4 -4
  12. package/dist/cli/commands/completion.js.map +1 -1
  13. package/dist/cli/commands/create.js +50 -7
  14. package/dist/cli/commands/create.js.map +1 -1
  15. package/dist/cli/commands/deps.js +4 -4
  16. package/dist/cli/commands/deps.js.map +1 -1
  17. package/dist/cli/commands/extension/install-sources.d.ts +3 -0
  18. package/dist/cli/commands/extension/install-sources.js +29 -4
  19. package/dist/cli/commands/extension/install-sources.js.map +1 -1
  20. package/dist/cli/commands/extension.js +26 -5
  21. package/dist/cli/commands/extension.js.map +1 -1
  22. package/dist/cli/commands/get.js +6 -3
  23. package/dist/cli/commands/get.js.map +1 -1
  24. package/dist/cli/commands/list.js +25 -6
  25. package/dist/cli/commands/list.js.map +1 -1
  26. package/dist/cli/commands/reindex.js +3 -3
  27. package/dist/cli/commands/reindex.js.map +1 -1
  28. package/dist/cli/commands/search.d.ts +17 -0
  29. package/dist/cli/commands/search.js +40 -10
  30. package/dist/cli/commands/search.js.map +1 -1
  31. package/dist/cli/commands/stats.js +4 -4
  32. package/dist/cli/commands/stats.js.map +1 -1
  33. package/dist/cli/commands/test-all.js +4 -4
  34. package/dist/cli/commands/test-all.js.map +1 -1
  35. package/dist/cli/main.d.ts +2 -0
  36. package/dist/cli/main.js +39 -11
  37. package/dist/cli/main.js.map +1 -1
  38. package/dist/cli/register-list-query.js +10 -12
  39. package/dist/cli/register-list-query.js.map +1 -1
  40. package/dist/cli/register-mutation.js +20 -22
  41. package/dist/cli/register-mutation.js.map +1 -1
  42. package/dist/cli/register-operations.js +32 -25
  43. package/dist/cli/register-operations.js.map +1 -1
  44. package/dist/cli/register-setup.js +7 -9
  45. package/dist/cli/register-setup.js.map +1 -1
  46. package/dist/cli/registration-helpers.js +6 -3
  47. package/dist/cli/registration-helpers.js.map +1 -1
  48. package/dist/cli/search-refresh.d.ts +2 -0
  49. package/dist/cli/search-refresh.js +13 -0
  50. package/dist/cli/search-refresh.js.map +1 -0
  51. package/dist/cli-bundle/chunks/activity-OWYSUZOY.js +17 -0
  52. package/dist/cli-bundle/chunks/activity-OWYSUZOY.js.map +7 -0
  53. package/dist/cli-bundle/chunks/aggregate-ADUOSFRO.js +209 -0
  54. package/dist/cli-bundle/chunks/aggregate-ADUOSFRO.js.map +7 -0
  55. package/dist/cli-bundle/chunks/append-JD2DETU7.js +73 -0
  56. package/dist/cli-bundle/chunks/append-JD2DETU7.js.map +7 -0
  57. package/dist/cli-bundle/chunks/chunk-3HUE7XOF.js +27 -0
  58. package/dist/cli-bundle/chunks/chunk-3HUE7XOF.js.map +7 -0
  59. package/dist/cli-bundle/chunks/chunk-3M73P3G6.js +1636 -0
  60. package/dist/cli-bundle/chunks/chunk-3M73P3G6.js.map +7 -0
  61. package/dist/cli-bundle/chunks/chunk-4AEZR5EJ.js +189 -0
  62. package/dist/cli-bundle/chunks/chunk-4AEZR5EJ.js.map +7 -0
  63. package/dist/cli-bundle/chunks/chunk-5HSEP75M.js +330 -0
  64. package/dist/cli-bundle/chunks/chunk-5HSEP75M.js.map +7 -0
  65. package/dist/cli-bundle/chunks/chunk-6HT2F4TK.js +1770 -0
  66. package/dist/cli-bundle/chunks/chunk-6HT2F4TK.js.map +7 -0
  67. package/dist/cli-bundle/chunks/chunk-6YCV7WSL.js +552 -0
  68. package/dist/cli-bundle/chunks/chunk-6YCV7WSL.js.map +7 -0
  69. package/dist/cli-bundle/chunks/chunk-7Y53ZJIQ.js +202 -0
  70. package/dist/cli-bundle/chunks/chunk-7Y53ZJIQ.js.map +7 -0
  71. package/dist/cli-bundle/chunks/chunk-A7E7PUVX.js +157 -0
  72. package/dist/cli-bundle/chunks/chunk-A7E7PUVX.js.map +7 -0
  73. package/dist/cli-bundle/chunks/chunk-AKOOMO3T.js +90 -0
  74. package/dist/cli-bundle/chunks/chunk-AKOOMO3T.js.map +7 -0
  75. package/dist/cli-bundle/chunks/chunk-BUPWJ3IJ.js +950 -0
  76. package/dist/cli-bundle/chunks/chunk-BUPWJ3IJ.js.map +7 -0
  77. package/dist/cli-bundle/chunks/chunk-CEFIVZPG.js +79 -0
  78. package/dist/cli-bundle/chunks/chunk-CEFIVZPG.js.map +7 -0
  79. package/dist/cli-bundle/chunks/chunk-D7AOMPRH.js +349 -0
  80. package/dist/cli-bundle/chunks/chunk-D7AOMPRH.js.map +7 -0
  81. package/dist/cli-bundle/chunks/chunk-EAOG77HM.js +56 -0
  82. package/dist/cli-bundle/chunks/chunk-EAOG77HM.js.map +7 -0
  83. package/dist/cli-bundle/chunks/chunk-EGUGFSNX.js +47 -0
  84. package/dist/cli-bundle/chunks/chunk-EGUGFSNX.js.map +7 -0
  85. package/dist/cli-bundle/chunks/chunk-FM26RGSU.js +56 -0
  86. package/dist/cli-bundle/chunks/chunk-FM26RGSU.js.map +7 -0
  87. package/dist/cli-bundle/chunks/chunk-FQE6XZDB.js +435 -0
  88. package/dist/cli-bundle/chunks/chunk-FQE6XZDB.js.map +7 -0
  89. package/dist/cli-bundle/chunks/chunk-G57E5D7T.js +185 -0
  90. package/dist/cli-bundle/chunks/chunk-G57E5D7T.js.map +7 -0
  91. package/dist/cli-bundle/chunks/chunk-GN7IJPCD.js +3621 -0
  92. package/dist/cli-bundle/chunks/chunk-GN7IJPCD.js.map +7 -0
  93. package/dist/cli-bundle/chunks/chunk-JFWUHHS2.js +233 -0
  94. package/dist/cli-bundle/chunks/chunk-JFWUHHS2.js.map +7 -0
  95. package/dist/cli-bundle/chunks/chunk-JTWRXG4B.js +1861 -0
  96. package/dist/cli-bundle/chunks/chunk-JTWRXG4B.js.map +7 -0
  97. package/dist/cli-bundle/chunks/chunk-JULRTHJQ.js +648 -0
  98. package/dist/cli-bundle/chunks/chunk-JULRTHJQ.js.map +7 -0
  99. package/dist/cli-bundle/chunks/chunk-KBQY3YG5.js +122 -0
  100. package/dist/cli-bundle/chunks/chunk-KBQY3YG5.js.map +7 -0
  101. package/dist/cli-bundle/chunks/chunk-L2FXEKDB.js +185 -0
  102. package/dist/cli-bundle/chunks/chunk-L2FXEKDB.js.map +7 -0
  103. package/dist/cli-bundle/chunks/chunk-LRBOHPUE.js +189 -0
  104. package/dist/cli-bundle/chunks/chunk-LRBOHPUE.js.map +7 -0
  105. package/dist/cli-bundle/chunks/chunk-LSXGH6NE.js +5153 -0
  106. package/dist/cli-bundle/chunks/chunk-LSXGH6NE.js.map +7 -0
  107. package/dist/cli-bundle/chunks/chunk-MD7K4JYF.js +1345 -0
  108. package/dist/cli-bundle/chunks/chunk-MD7K4JYF.js.map +7 -0
  109. package/dist/cli-bundle/chunks/chunk-NGN7UV5K.js +341 -0
  110. package/dist/cli-bundle/chunks/chunk-NGN7UV5K.js.map +7 -0
  111. package/dist/cli-bundle/chunks/chunk-O7IWB35H.js +18 -0
  112. package/dist/cli-bundle/chunks/chunk-O7IWB35H.js.map +7 -0
  113. package/dist/cli-bundle/chunks/chunk-OGZEG5TT.js +2929 -0
  114. package/dist/cli-bundle/chunks/chunk-OGZEG5TT.js.map +7 -0
  115. package/dist/cli-bundle/chunks/chunk-P53TN6IA.js +674 -0
  116. package/dist/cli-bundle/chunks/chunk-P53TN6IA.js.map +7 -0
  117. package/dist/cli-bundle/chunks/chunk-PVNQLCIS.js +176 -0
  118. package/dist/cli-bundle/chunks/chunk-PVNQLCIS.js.map +7 -0
  119. package/dist/cli-bundle/chunks/chunk-PXUAZUUY.js +1680 -0
  120. package/dist/cli-bundle/chunks/chunk-PXUAZUUY.js.map +7 -0
  121. package/dist/cli-bundle/chunks/chunk-QAJBIGRA.js +20 -0
  122. package/dist/cli-bundle/chunks/chunk-QAJBIGRA.js.map +7 -0
  123. package/dist/cli-bundle/chunks/chunk-SEXQN4KL.js +60 -0
  124. package/dist/cli-bundle/chunks/chunk-SEXQN4KL.js.map +7 -0
  125. package/dist/cli-bundle/chunks/chunk-U7FMKRXH.js +362 -0
  126. package/dist/cli-bundle/chunks/chunk-U7FMKRXH.js.map +7 -0
  127. package/dist/cli-bundle/chunks/chunk-VGICHR7D.js +141 -0
  128. package/dist/cli-bundle/chunks/chunk-VGICHR7D.js.map +7 -0
  129. package/dist/cli-bundle/chunks/chunk-WDPXDQFG.js +632 -0
  130. package/dist/cli-bundle/chunks/chunk-WDPXDQFG.js.map +7 -0
  131. package/dist/cli-bundle/chunks/chunk-WJ2NAC37.js +252 -0
  132. package/dist/cli-bundle/chunks/chunk-WJ2NAC37.js.map +7 -0
  133. package/dist/cli-bundle/chunks/claim-EE4TKKCV.js +133 -0
  134. package/dist/cli-bundle/chunks/claim-EE4TKKCV.js.map +7 -0
  135. package/dist/cli-bundle/chunks/close-XY4CSAYF.js +14 -0
  136. package/dist/cli-bundle/chunks/close-XY4CSAYF.js.map +7 -0
  137. package/dist/cli-bundle/chunks/comments-AAKJQ6LW.js +104 -0
  138. package/dist/cli-bundle/chunks/comments-AAKJQ6LW.js.map +7 -0
  139. package/dist/cli-bundle/chunks/config-V3FZOKLI.js +1577 -0
  140. package/dist/cli-bundle/chunks/config-V3FZOKLI.js.map +7 -0
  141. package/dist/cli-bundle/chunks/context-RZ5QPNJB.js +1458 -0
  142. package/dist/cli-bundle/chunks/context-RZ5QPNJB.js.map +7 -0
  143. package/dist/cli-bundle/chunks/contracts-YLMH33VU.js +1245 -0
  144. package/dist/cli-bundle/chunks/contracts-YLMH33VU.js.map +7 -0
  145. package/dist/cli-bundle/chunks/create-PZVHRIZQ.js +28 -0
  146. package/dist/cli-bundle/chunks/create-PZVHRIZQ.js.map +7 -0
  147. package/dist/cli-bundle/chunks/delete-RHCTEORS.js +59 -0
  148. package/dist/cli-bundle/chunks/delete-RHCTEORS.js.map +7 -0
  149. package/dist/cli-bundle/chunks/deps-MZYCMLAO.js +229 -0
  150. package/dist/cli-bundle/chunks/deps-MZYCMLAO.js.map +7 -0
  151. package/dist/cli-bundle/chunks/docs-FXXUCZYU.js +35 -0
  152. package/dist/cli-bundle/chunks/docs-FXXUCZYU.js.map +7 -0
  153. package/dist/cli-bundle/chunks/extension-B4WL7BQU.js +25 -0
  154. package/dist/cli-bundle/chunks/extension-B4WL7BQU.js.map +7 -0
  155. package/dist/cli-bundle/chunks/files-WVOX67PE.js +286 -0
  156. package/dist/cli-bundle/chunks/files-WVOX67PE.js.map +7 -0
  157. package/dist/cli-bundle/chunks/gc-JWNF66EC.js +181 -0
  158. package/dist/cli-bundle/chunks/gc-JWNF66EC.js.map +7 -0
  159. package/dist/cli-bundle/chunks/get-LTK3HOCQ.js +198 -0
  160. package/dist/cli-bundle/chunks/get-LTK3HOCQ.js.map +7 -0
  161. package/dist/cli-bundle/chunks/health-TCWL55KM.js +1233 -0
  162. package/dist/cli-bundle/chunks/health-TCWL55KM.js.map +7 -0
  163. package/dist/cli-bundle/chunks/history-A2JUDXUE.js +21 -0
  164. package/dist/cli-bundle/chunks/history-A2JUDXUE.js.map +7 -0
  165. package/dist/cli-bundle/chunks/history-redact-ED6RFCPL.js +20 -0
  166. package/dist/cli-bundle/chunks/history-redact-ED6RFCPL.js.map +7 -0
  167. package/dist/cli-bundle/chunks/history-repair-ZWSTDRH2.js +198 -0
  168. package/dist/cli-bundle/chunks/history-repair-ZWSTDRH2.js.map +7 -0
  169. package/dist/cli-bundle/chunks/init-M2WUB4YH.js +16 -0
  170. package/dist/cli-bundle/chunks/init-M2WUB4YH.js.map +7 -0
  171. package/dist/cli-bundle/chunks/learnings-NXTWE3FR.js +48 -0
  172. package/dist/cli-bundle/chunks/learnings-NXTWE3FR.js.map +7 -0
  173. package/dist/cli-bundle/chunks/list-OGWQPC26.js +20 -0
  174. package/dist/cli-bundle/chunks/list-OGWQPC26.js.map +7 -0
  175. package/dist/cli-bundle/chunks/notes-DFS5ZGOO.js +48 -0
  176. package/dist/cli-bundle/chunks/notes-DFS5ZGOO.js.map +7 -0
  177. package/dist/cli-bundle/chunks/plan-67AB2PLM.js +1175 -0
  178. package/dist/cli-bundle/chunks/plan-67AB2PLM.js.map +7 -0
  179. package/dist/cli-bundle/chunks/register-list-query-UP3VRUFS.js +232 -0
  180. package/dist/cli-bundle/chunks/register-list-query-UP3VRUFS.js.map +7 -0
  181. package/dist/cli-bundle/chunks/register-mutation-YWSBF545.js +712 -0
  182. package/dist/cli-bundle/chunks/register-mutation-YWSBF545.js.map +7 -0
  183. package/dist/cli-bundle/chunks/register-operations-3BDTGSDH.js +374 -0
  184. package/dist/cli-bundle/chunks/register-operations-3BDTGSDH.js.map +7 -0
  185. package/dist/cli-bundle/chunks/register-setup-V56GDRUS.js +246 -0
  186. package/dist/cli-bundle/chunks/register-setup-V56GDRUS.js.map +7 -0
  187. package/dist/cli-bundle/chunks/restore-MB2ISME7.js +18 -0
  188. package/dist/cli-bundle/chunks/restore-MB2ISME7.js.map +7 -0
  189. package/dist/cli-bundle/chunks/schema-Q622KC46.js +119 -0
  190. package/dist/cli-bundle/chunks/schema-Q622KC46.js.map +7 -0
  191. package/dist/cli-bundle/chunks/search-HENBL456.js +1135 -0
  192. package/dist/cli-bundle/chunks/search-HENBL456.js.map +7 -0
  193. package/dist/cli-bundle/chunks/stats-N6H3YP2F.js +124 -0
  194. package/dist/cli-bundle/chunks/stats-N6H3YP2F.js.map +7 -0
  195. package/dist/cli-bundle/chunks/test-VNBDRJ4Z.js +32 -0
  196. package/dist/cli-bundle/chunks/test-VNBDRJ4Z.js.map +7 -0
  197. package/dist/cli-bundle/chunks/test-all-G2AZOHXI.js +332 -0
  198. package/dist/cli-bundle/chunks/test-all-G2AZOHXI.js.map +7 -0
  199. package/dist/cli-bundle/chunks/test-runs-GX5HTPSF.js +939 -0
  200. package/dist/cli-bundle/chunks/test-runs-GX5HTPSF.js.map +7 -0
  201. package/dist/cli-bundle/chunks/update-H6SCWNMA.js +22 -0
  202. package/dist/cli-bundle/chunks/update-H6SCWNMA.js.map +7 -0
  203. package/dist/cli-bundle/chunks/update-many-46HRSP2Q.js +676 -0
  204. package/dist/cli-bundle/chunks/update-many-46HRSP2Q.js.map +7 -0
  205. package/dist/cli-bundle/chunks/upgrade-H5HHM5UV.js +271 -0
  206. package/dist/cli-bundle/chunks/upgrade-H5HHM5UV.js.map +7 -0
  207. package/dist/cli-bundle/chunks/validate-TMCVKIGZ.js +1110 -0
  208. package/dist/cli-bundle/chunks/validate-TMCVKIGZ.js.map +7 -0
  209. package/dist/cli-bundle/main.js +6952 -0
  210. package/dist/cli-bundle/main.js.map +7 -0
  211. package/dist/cli.js +1 -1
  212. package/dist/core/config/nested-settings.d.ts +2 -0
  213. package/dist/core/config/nested-settings.js +17 -2
  214. package/dist/core/config/nested-settings.js.map +1 -1
  215. package/dist/core/item/item-type-definition.js +6 -2
  216. package/dist/core/item/item-type-definition.js.map +1 -1
  217. package/dist/core/item/type-registry.d.ts +4 -0
  218. package/dist/core/item/type-registry.js +10 -2
  219. package/dist/core/item/type-registry.js.map +1 -1
  220. package/dist/core/item/type-synonyms.d.ts +20 -0
  221. package/dist/core/item/type-synonyms.js +42 -0
  222. package/dist/core/item/type-synonyms.js.map +1 -0
  223. package/dist/core/search/background-refresh.d.ts +53 -0
  224. package/dist/core/search/background-refresh.js +286 -0
  225. package/dist/core/search/background-refresh.js.map +1 -0
  226. package/dist/core/search/cache.d.ts +20 -1
  227. package/dist/core/search/cache.js +76 -5
  228. package/dist/core/search/cache.js.map +1 -1
  229. package/dist/core/search/semantic-defaults.js +73 -32
  230. package/dist/core/search/semantic-defaults.js.map +1 -1
  231. package/dist/core/search/vector-stores.js +7 -3
  232. package/dist/core/search/vector-stores.js.map +1 -1
  233. package/dist/core/sentry/helpers.d.ts +1 -1
  234. package/dist/core/sentry/helpers.js +4 -4
  235. package/dist/core/sentry/helpers.js.map +1 -1
  236. package/dist/core/shared/constants.d.ts +2 -2
  237. package/dist/core/shared/constants.js +3 -3
  238. package/dist/core/shared/constants.js.map +1 -1
  239. package/dist/core/shared/html-entity-decode.d.ts +2 -1
  240. package/dist/core/shared/html-entity-decode.js +14 -9
  241. package/dist/core/shared/html-entity-decode.js.map +1 -1
  242. package/dist/core/shared/time.js +52 -2
  243. package/dist/core/shared/time.js.map +1 -1
  244. package/dist/core/store/front-matter-cache.d.ts +24 -0
  245. package/dist/core/store/front-matter-cache.js +119 -8
  246. package/dist/core/store/front-matter-cache.js.map +1 -1
  247. package/dist/core/store/item-format-migration.js +25 -15
  248. package/dist/core/store/item-format-migration.js.map +1 -1
  249. package/dist/core/store/item-store.d.ts +7 -0
  250. package/dist/core/store/item-store.js +13 -3
  251. package/dist/core/store/item-store.js.map +1 -1
  252. package/dist/core/store/settings-validator.d.ts +1 -0
  253. package/dist/core/store/settings-validator.js +7 -2
  254. package/dist/core/store/settings-validator.js.map +1 -1
  255. package/dist/core/store/settings.js +19 -3
  256. package/dist/core/store/settings.js.map +1 -1
  257. package/dist/core/telemetry/runtime.d.ts +10 -0
  258. package/dist/core/telemetry/runtime.js +86 -2
  259. package/dist/core/telemetry/runtime.js.map +1 -1
  260. package/dist/mcp/server.js +3 -3
  261. package/dist/mcp/server.js.map +1 -1
  262. package/dist/sdk/cli-contracts/tool-parameter-tables.js +4 -4
  263. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  264. package/dist/sdk/cli-contracts.js +29 -8
  265. package/dist/sdk/cli-contracts.js.map +1 -1
  266. package/dist/types.d.ts +9 -1
  267. package/dist/types.js +2 -2
  268. package/dist/types.js.map +1 -1
  269. package/docs/CONFIGURATION.md +11 -0
  270. package/docs/RELEASING.md +1 -1
  271. package/package.json +7 -5
  272. package/packages/pm-calendar/extensions/calendar/index.js +27 -2
  273. package/packages/pm-calendar/extensions/calendar/index.ts +28 -2
  274. package/scripts/bundle-cli.mjs +39 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../core/item/type-registry.ts"],
4
+ "sourcesContent": ["import { TYPE_TO_FOLDER } from \"../shared/constants.js\";\nimport type { ExtensionRegistrationRegistry } from \"../extensions/loader.js\";\nimport type {\n ItemTypeCommandOptionPolicy,\n ItemTypeDefinition,\n ItemTypeOptionDefinition,\n PmSettings,\n} from \"../../types/index.js\";\nimport { ITEM_TYPE_VALUES } from \"../../types/index.js\";\nimport {\n normalizeItemTypeDefinition as normalizeSharedItemTypeDefinition,\n normalizeItemTypeStringList,\n strictPolicyCommand,\n} from \"./item-type-definition.js\";\n\nexport const DEFAULT_REQUIRED_CREATE_FIELDS = [\n \"title\",\n \"description\",\n \"status\",\n \"priority\",\n \"tags\",\n \"body\",\n \"deadline\",\n \"estimatedMinutes\",\n \"acceptanceCriteria\",\n \"author\",\n \"message\",\n \"assignee\",\n] as const;\n\nexport const DEFAULT_REQUIRED_CREATE_REPEATABLES = [\"dep\", \"comment\", \"note\", \"learning\", \"file\", \"test\", \"doc\"] as const;\n\nexport type CommandOptionPolicyCommand = \"create\" | \"update\";\n\nconst CREATE_COMMAND_OPTION_KEYS = [\n \"title\",\n \"description\",\n \"type\",\n \"status\",\n \"priority\",\n \"tags\",\n \"body\",\n \"deadline\",\n \"estimatedMinutes\",\n \"acceptanceCriteria\",\n \"definitionOfReady\",\n \"order\",\n \"goal\",\n \"objective\",\n \"value\",\n \"impact\",\n \"outcome\",\n \"whyNow\",\n \"author\",\n \"message\",\n \"assignee\",\n \"parent\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n \"blockedBy\",\n \"blockedReason\",\n \"unblockNote\",\n \"reporter\",\n \"severity\",\n \"environment\",\n \"reproSteps\",\n \"resolution\",\n \"expectedResult\",\n \"actualResult\",\n \"affectedVersion\",\n \"fixedVersion\",\n \"component\",\n \"regression\",\n \"customerImpact\",\n \"dep\",\n \"comment\",\n \"note\",\n \"learning\",\n \"file\",\n \"test\",\n \"doc\",\n \"reminder\",\n \"event\",\n \"typeOption\",\n] as const;\n\nconst UPDATE_COMMAND_OPTION_KEYS = [\n \"title\",\n \"description\",\n \"body\",\n \"status\",\n \"closeReason\",\n \"priority\",\n \"type\",\n \"tags\",\n \"deadline\",\n \"estimatedMinutes\",\n \"acceptanceCriteria\",\n \"definitionOfReady\",\n \"order\",\n \"goal\",\n \"objective\",\n \"value\",\n \"impact\",\n \"outcome\",\n \"whyNow\",\n \"author\",\n \"message\",\n \"assignee\",\n \"parent\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n \"blockedBy\",\n \"blockedReason\",\n \"unblockNote\",\n \"reporter\",\n \"severity\",\n \"environment\",\n \"reproSteps\",\n \"resolution\",\n \"expectedResult\",\n \"actualResult\",\n \"affectedVersion\",\n \"fixedVersion\",\n \"component\",\n \"regression\",\n \"customerImpact\",\n \"comment\",\n \"note\",\n \"learning\",\n \"file\",\n \"test\",\n \"doc\",\n \"reminder\",\n \"event\",\n \"typeOption\",\n \"allowAuditUpdate\",\n \"force\",\n] as const;\n\nconst SHARED_COMMAND_OPTION_ALIASES: Record<string, string> = {\n \"close-reason\": \"closeReason\",\n close_reason: \"closeReason\",\n \"estimated-minutes\": \"estimatedMinutes\",\n estimated_minutes: \"estimatedMinutes\",\n estimate: \"estimatedMinutes\",\n \"acceptance-criteria\": \"acceptanceCriteria\",\n acceptance_criteria: \"acceptanceCriteria\",\n ac: \"acceptanceCriteria\",\n \"definition-of-ready\": \"definitionOfReady\",\n definition_of_ready: \"definitionOfReady\",\n rank: \"order\",\n \"why-now\": \"whyNow\",\n why_now: \"whyNow\",\n \"blocked-by\": \"blockedBy\",\n blocked_by: \"blockedBy\",\n \"blocked-reason\": \"blockedReason\",\n blocked_reason: \"blockedReason\",\n \"unblock-note\": \"unblockNote\",\n unblock_note: \"unblockNote\",\n \"repro-steps\": \"reproSteps\",\n repro_steps: \"reproSteps\",\n \"expected-result\": \"expectedResult\",\n expected_result: \"expectedResult\",\n \"actual-result\": \"actualResult\",\n actual_result: \"actualResult\",\n \"affected-version\": \"affectedVersion\",\n affected_version: \"affectedVersion\",\n \"fixed-version\": \"fixedVersion\",\n fixed_version: \"fixedVersion\",\n \"customer-impact\": \"customerImpact\",\n customer_impact: \"customerImpact\",\n \"type-option\": \"typeOption\",\n type_option: \"typeOption\",\n type_options: \"typeOption\",\n};\n\nconst CREATE_COMMAND_OPTION_ALIASES: Record<string, string> = {\n ...SHARED_COMMAND_OPTION_ALIASES,\n};\n\nconst UPDATE_COMMAND_OPTION_ALIASES: Record<string, string> = {\n ...SHARED_COMMAND_OPTION_ALIASES,\n \"allow-audit-update\": \"allowAuditUpdate\",\n allow_audit_update: \"allowAuditUpdate\",\n};\n\nconst CREATE_COMMAND_OPTION_FLAG_LABELS: Record<string, string> = {\n title: \"--title\",\n description: \"--description\",\n type: \"--type\",\n status: \"--status\",\n priority: \"--priority\",\n tags: \"--tags\",\n body: \"--body\",\n deadline: \"--deadline\",\n estimatedMinutes: \"--estimate/--estimated-minutes\",\n acceptanceCriteria: \"--acceptance-criteria/--ac\",\n definitionOfReady: \"--definition-of-ready\",\n order: \"--order/--rank\",\n goal: \"--goal\",\n objective: \"--objective\",\n value: \"--value\",\n impact: \"--impact\",\n outcome: \"--outcome\",\n whyNow: \"--why-now\",\n author: \"--author\",\n message: \"--message\",\n assignee: \"--assignee\",\n parent: \"--parent\",\n reviewer: \"--reviewer\",\n risk: \"--risk\",\n confidence: \"--confidence\",\n sprint: \"--sprint\",\n release: \"--release\",\n blockedBy: \"--blocked-by\",\n blockedReason: \"--blocked-reason\",\n unblockNote: \"--unblock-note\",\n reporter: \"--reporter\",\n severity: \"--severity\",\n environment: \"--environment\",\n reproSteps: \"--repro-steps\",\n resolution: \"--resolution\",\n expectedResult: \"--expected-result\",\n actualResult: \"--actual-result\",\n affectedVersion: \"--affected-version\",\n fixedVersion: \"--fixed-version\",\n component: \"--component\",\n regression: \"--regression\",\n customerImpact: \"--customer-impact\",\n dep: \"--dep\",\n comment: \"--comment\",\n note: \"--note\",\n learning: \"--learning\",\n file: \"--file\",\n test: \"--test\",\n doc: \"--doc\",\n reminder: \"--reminder\",\n event: \"--event\",\n typeOption: \"--type-option\",\n};\n\nconst UPDATE_COMMAND_OPTION_FLAG_LABELS: Record<string, string> = {\n title: \"--title\",\n description: \"--description\",\n body: \"--body\",\n status: \"--status\",\n closeReason: \"--close-reason\",\n priority: \"--priority\",\n type: \"--type\",\n tags: \"--tags\",\n deadline: \"--deadline\",\n estimatedMinutes: \"--estimate/--estimated-minutes\",\n acceptanceCriteria: \"--acceptance-criteria/--ac\",\n definitionOfReady: \"--definition-of-ready\",\n order: \"--order/--rank\",\n goal: \"--goal\",\n objective: \"--objective\",\n value: \"--value\",\n impact: \"--impact\",\n outcome: \"--outcome\",\n whyNow: \"--why-now\",\n assignee: \"--assignee\",\n parent: \"--parent\",\n reviewer: \"--reviewer\",\n risk: \"--risk\",\n confidence: \"--confidence\",\n sprint: \"--sprint\",\n release: \"--release\",\n blockedBy: \"--blocked-by\",\n blockedReason: \"--blocked-reason\",\n unblockNote: \"--unblock-note\",\n reporter: \"--reporter\",\n severity: \"--severity\",\n environment: \"--environment\",\n reproSteps: \"--repro-steps\",\n resolution: \"--resolution\",\n expectedResult: \"--expected-result\",\n actualResult: \"--actual-result\",\n affectedVersion: \"--affected-version\",\n fixedVersion: \"--fixed-version\",\n component: \"--component\",\n regression: \"--regression\",\n customerImpact: \"--customer-impact\",\n comment: \"--comment\",\n note: \"--note\",\n learning: \"--learning\",\n file: \"--file\",\n test: \"--test\",\n doc: \"--doc\",\n reminder: \"--reminder\",\n event: \"--event\",\n typeOption: \"--type-option\",\n allowAuditUpdate: \"--allow-audit-update\",\n author: \"--author\",\n message: \"--message\",\n force: \"--force\",\n};\n\nexport interface CommandOptionPolicyState {\n required: string[];\n hidden: string[];\n disabled: string[];\n errors: string[];\n}\n\nexport interface ResolvedItemTypeDefinition {\n name: string;\n /** Optional human description carried from the type definition. */\n description?: string;\n folder: string;\n aliases: string[];\n /** Optional per-type status applied at create time when `--status` is omitted. */\n default_status?: string;\n required_create_fields: string[];\n required_create_repeatables: string[];\n options: ItemTypeOptionDefinition[];\n command_option_policies: ItemTypeCommandOptionPolicy[];\n}\n\nexport interface ItemTypeRegistry {\n types: string[];\n folders: string[];\n type_to_folder: Record<string, string>;\n by_type: Record<string, ResolvedItemTypeDefinition>;\n alias_to_type: Record<string, string>;\n}\n\nfunction normalizeCommandOptionToken(value: string): string {\n return value.trim().replace(/^--+/, \"\").toLowerCase();\n}\n\nfunction commandOptionKeys(command: CommandOptionPolicyCommand): readonly string[] {\n return command === \"create\" ? CREATE_COMMAND_OPTION_KEYS : UPDATE_COMMAND_OPTION_KEYS;\n}\n\nfunction commandOptionAliases(command: CommandOptionPolicyCommand): Record<string, string> {\n return command === \"create\" ? CREATE_COMMAND_OPTION_ALIASES : UPDATE_COMMAND_OPTION_ALIASES;\n}\n\nexport function canonicalizeCommandOptionKey(\n command: CommandOptionPolicyCommand,\n rawOption: string,\n): string | undefined {\n const normalizedToken = normalizeCommandOptionToken(rawOption);\n if (normalizedToken.length === 0) {\n return undefined;\n }\n const aliased = commandOptionAliases(command)[normalizedToken];\n if (aliased) {\n return aliased;\n }\n return commandOptionKeys(command).find((candidate) => candidate.toLowerCase() === normalizedToken);\n}\n\nexport function commandOptionFlagLabel(command: CommandOptionPolicyCommand, optionKey: string): string {\n const labels = command === \"create\" ? CREATE_COMMAND_OPTION_FLAG_LABELS : UPDATE_COMMAND_OPTION_FLAG_LABELS;\n return labels[optionKey] ?? `--${optionKey.replace(/([A-Z])/g, \"-$1\").toLowerCase()}`;\n}\n\nfunction toDefaultFolder(name: string): string {\n const normalized = name\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n if (normalized.length === 0) {\n return \"items\";\n }\n return normalized.endsWith(\"s\") ? normalized : `${normalized}s`;\n}\n\n// Runtime registry consumes untrusted extension/file definitions, so it uses the\n// strict policy-command resolver (trim + lowercase, reject non-create/update). All\n// other normalization is single-sourced from ./item-type-definition.ts (pm-v798).\nfunction normalizeTypeDefinition(definition: ItemTypeDefinition): ItemTypeDefinition | null {\n return normalizeSharedItemTypeDefinition(definition, { resolvePolicyCommand: strictPolicyCommand });\n}\n\nfunction coerceTypeDefinitionFromUnknown(raw: unknown): ItemTypeDefinition | null {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return null;\n }\n const record = raw as Record<string, unknown>;\n const name = typeof record.name === \"string\" ? record.name : \"\";\n if (name.trim().length === 0) {\n return null;\n }\n const folder = typeof record.folder === \"string\" ? record.folder : undefined;\n const description = typeof record.description === \"string\" ? record.description : undefined;\n const defaultStatus = typeof record.default_status === \"string\" ? record.default_status : undefined;\n const aliases = Array.isArray(record.aliases) ? record.aliases.filter((value): value is string => typeof value === \"string\") : undefined;\n const requiredCreateFields = Array.isArray(record.required_create_fields)\n ? record.required_create_fields.filter((value): value is string => typeof value === \"string\")\n : undefined;\n const requiredCreateRepeatables = Array.isArray(record.required_create_repeatables)\n ? record.required_create_repeatables.filter((value): value is string => typeof value === \"string\")\n : undefined;\n let options: ItemTypeOptionDefinition[] | undefined;\n if (Array.isArray(record.options)) {\n options = [];\n for (const entry of record.options) {\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n continue;\n }\n const optionRecord = entry as Record<string, unknown>;\n if (typeof optionRecord.key !== \"string\") {\n continue;\n }\n options.push({\n key: optionRecord.key,\n values: Array.isArray(optionRecord.values)\n ? optionRecord.values.filter((value): value is string => typeof value === \"string\")\n : [],\n required: optionRecord.required === undefined ? undefined : Boolean(optionRecord.required),\n aliases: Array.isArray(optionRecord.aliases)\n ? optionRecord.aliases.filter((value): value is string => typeof value === \"string\")\n : undefined,\n description: typeof optionRecord.description === \"string\" ? optionRecord.description : undefined,\n });\n }\n }\n let commandOptionPolicies: ItemTypeCommandOptionPolicy[] | undefined;\n if (Array.isArray(record.command_option_policies)) {\n commandOptionPolicies = [];\n for (const entry of record.command_option_policies) {\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n continue;\n }\n const policyRecord = entry as Record<string, unknown>;\n if (typeof policyRecord.command !== \"string\" || typeof policyRecord.option !== \"string\") {\n continue;\n }\n const normalizedCommand = policyRecord.command.trim().toLowerCase();\n if (normalizedCommand !== \"create\" && normalizedCommand !== \"update\") {\n continue;\n }\n commandOptionPolicies.push({\n command: normalizedCommand,\n option: policyRecord.option,\n required: policyRecord.required === undefined ? undefined : Boolean(policyRecord.required),\n visible: policyRecord.visible === undefined ? undefined : Boolean(policyRecord.visible),\n enabled: policyRecord.enabled === undefined ? undefined : Boolean(policyRecord.enabled),\n });\n }\n }\n return {\n name,\n description,\n default_status: defaultStatus,\n folder,\n aliases,\n required_create_fields: requiredCreateFields,\n required_create_repeatables: requiredCreateRepeatables,\n options,\n command_option_policies: commandOptionPolicies,\n };\n}\n\nfunction applyTypeDefinitions(\n source: ItemTypeDefinition[],\n target: Map<string, ResolvedItemTypeDefinition>,\n preserveBuiltinDefaults: boolean,\n): void {\n for (const rawDefinition of source) {\n const normalizedDefinition = normalizeTypeDefinition(rawDefinition);\n if (!normalizedDefinition) {\n continue;\n }\n const lowerName = normalizedDefinition.name.toLowerCase();\n const existing = target.get(lowerName);\n const keepName = existing?.name ?? normalizedDefinition.name;\n const folder = normalizedDefinition.folder ?? existing?.folder ?? toDefaultFolder(keepName);\n const aliases = normalizeItemTypeStringList([\n ...(existing?.aliases ?? []),\n ...(normalizedDefinition.aliases ?? []),\n ]);\n const requiredCreateFields = normalizedDefinition.required_create_fields\n ? normalizeItemTypeStringList(normalizedDefinition.required_create_fields)\n : existing?.required_create_fields ??\n (preserveBuiltinDefaults ? [...DEFAULT_REQUIRED_CREATE_FIELDS] : []);\n const requiredCreateRepeatables = normalizedDefinition.required_create_repeatables\n ? normalizeItemTypeStringList(normalizedDefinition.required_create_repeatables)\n : existing?.required_create_repeatables ??\n (preserveBuiltinDefaults ? [...DEFAULT_REQUIRED_CREATE_REPEATABLES] : []);\n const options = normalizedDefinition.options\n ? normalizedDefinition.options\n : existing?.options\n ? [...existing.options]\n : [];\n const commandOptionPolicies = normalizedDefinition.command_option_policies\n ? normalizedDefinition.command_option_policies\n : existing?.command_option_policies\n ? [...existing.command_option_policies]\n : [];\n const defaultStatus = normalizedDefinition.default_status ?? existing?.default_status;\n const description = normalizedDefinition.description ?? existing?.description;\n target.set(lowerName, {\n name: keepName,\n ...(description ? { description } : {}),\n ...(defaultStatus ? { default_status: defaultStatus } : {}),\n folder,\n aliases,\n required_create_fields: requiredCreateFields,\n required_create_repeatables: requiredCreateRepeatables,\n options,\n command_option_policies: commandOptionPolicies,\n });\n }\n}\n\nfunction collectExtensionTypeDefinitions(registrations: ExtensionRegistrationRegistry | null | undefined): ItemTypeDefinition[] {\n if (!registrations) {\n return [];\n }\n const definitions: ItemTypeDefinition[] = [];\n for (const registration of registrations.item_types ?? []) {\n const typeDefinitionsRaw = (registration as { types?: unknown[] }).types;\n if (!Array.isArray(typeDefinitionsRaw)) {\n continue;\n }\n for (const rawDefinition of typeDefinitionsRaw) {\n const normalized = coerceTypeDefinitionFromUnknown(rawDefinition);\n if (normalized) {\n definitions.push(normalized);\n }\n }\n }\n return definitions;\n}\n\nexport function resolveItemTypeRegistry(\n settings: PmSettings,\n extensionRegistrations: ExtensionRegistrationRegistry | null | undefined = null,\n): ItemTypeRegistry {\n const byLowerName = new Map<string, ResolvedItemTypeDefinition>();\n for (const builtin of ITEM_TYPE_VALUES) {\n byLowerName.set(builtin.toLowerCase(), {\n name: builtin,\n folder: TYPE_TO_FOLDER[builtin],\n aliases: [],\n required_create_fields: [...DEFAULT_REQUIRED_CREATE_FIELDS],\n required_create_repeatables: [...DEFAULT_REQUIRED_CREATE_REPEATABLES],\n options: [],\n command_option_policies: [],\n });\n }\n\n applyTypeDefinitions(settings.item_types?.definitions ?? [], byLowerName, false);\n applyTypeDefinitions(collectExtensionTypeDefinitions(extensionRegistrations), byLowerName, false);\n\n const definitions = [...byLowerName.values()].sort((left, right) => left.name.localeCompare(right.name));\n const byType: Record<string, ResolvedItemTypeDefinition> = {};\n const aliasToType: Record<string, string> = {};\n const typeToFolder: Record<string, string> = {};\n for (const definition of definitions) {\n byType[definition.name] = definition;\n typeToFolder[definition.name] = definition.folder;\n aliasToType[definition.name.toLowerCase()] = definition.name;\n for (const alias of definition.aliases) {\n aliasToType[alias.toLowerCase()] = definition.name;\n }\n }\n const folders = [...new Set(definitions.map((definition) => definition.folder))].sort((left, right) => left.localeCompare(right));\n return {\n types: definitions.map((definition) => definition.name),\n folders,\n type_to_folder: typeToFolder,\n by_type: byType,\n alias_to_type: aliasToType,\n };\n}\n\nexport function resolveTypeName(rawType: string | undefined, registry: ItemTypeRegistry): string | undefined {\n if (rawType === undefined) {\n return undefined;\n }\n return registry.alias_to_type[rawType.trim().toLowerCase()];\n}\n\nexport function resolveTypeDefinition(\n typeName: string | undefined,\n registry: ItemTypeRegistry,\n): ResolvedItemTypeDefinition | undefined {\n const resolvedName = resolveTypeName(typeName, registry);\n if (!resolvedName) {\n return undefined;\n }\n return registry.by_type[resolvedName];\n}\n\nexport function resolveCommandOptionPolicyState(\n typeDefinition: ResolvedItemTypeDefinition,\n command: CommandOptionPolicyCommand,\n baseRequiredOptions: Iterable<string>,\n): CommandOptionPolicyState {\n const errors: string[] = [];\n const required = new Set<string>();\n const hidden = new Set<string>();\n const disabled = new Set<string>();\n\n for (const rawBase of baseRequiredOptions) {\n const canonical = canonicalizeCommandOptionKey(command, rawBase);\n if (!canonical) {\n errors.push(\n `Unsupported base required option \"${rawBase}\" for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n continue;\n }\n required.add(canonical);\n }\n\n for (const policy of typeDefinition.command_option_policies) {\n if (policy.command !== command) {\n continue;\n }\n const canonical = canonicalizeCommandOptionKey(command, policy.option);\n if (!canonical) {\n errors.push(\n `Unsupported command_option_policies option \"${policy.option}\" for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n continue;\n }\n if (policy.required !== undefined) {\n if (policy.required) {\n required.add(canonical);\n } else {\n required.delete(canonical);\n }\n }\n if (policy.visible !== undefined) {\n if (policy.visible) {\n hidden.delete(canonical);\n } else {\n hidden.add(canonical);\n }\n }\n if (policy.enabled !== undefined) {\n if (policy.enabled) {\n disabled.delete(canonical);\n } else {\n disabled.add(canonical);\n }\n }\n }\n\n for (const option of required) {\n if (disabled.has(option)) {\n errors.push(\n `Option \"${option}\" cannot be both required and disabled for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n }\n }\n\n return {\n required: [...required],\n hidden: [...hidden].sort((left, right) => left.localeCompare(right)),\n disabled: [...disabled].sort((left, right) => left.localeCompare(right)),\n errors,\n };\n}\n\nexport function validateTypeOptions(\n typeName: string,\n rawTypeOptions: Record<string, string> | undefined,\n registry: ItemTypeRegistry,\n): { normalized: Record<string, string> | undefined; errors: string[] } {\n const typeDefinition = resolveTypeDefinition(typeName, registry);\n if (!typeDefinition) {\n return {\n normalized: undefined,\n errors: [`Unknown type \"${typeName}\"`],\n };\n }\n const errors: string[] = [];\n const optionByAlias = new Map<string, ItemTypeOptionDefinition>();\n for (const option of typeDefinition.options) {\n optionByAlias.set(option.key.toLowerCase(), option);\n for (const alias of option.aliases ?? []) {\n optionByAlias.set(alias.toLowerCase(), option);\n }\n }\n\n const normalized: Record<string, string> = {};\n for (const [rawKey, rawValue] of Object.entries(rawTypeOptions ?? {})) {\n const trimmedKey = rawKey.trim();\n const trimmedValue = rawValue.trim();\n if (trimmedKey.length === 0) {\n errors.push(\"type option keys must not be empty\");\n continue;\n }\n if (trimmedValue.length === 0) {\n errors.push(`type option \"${trimmedKey}\" must not be empty`);\n continue;\n }\n const optionDefinition = optionByAlias.get(trimmedKey.toLowerCase());\n if (!optionDefinition) {\n const allowed = typeDefinition.options.map((option) => option.key).join(\", \");\n errors.push(\n typeDefinition.options.length > 0\n ? `Unknown type option \"${trimmedKey}\" for type \"${typeDefinition.name}\". Allowed: ${allowed}`\n : `Type \"${typeDefinition.name}\" does not define any configurable type options`,\n );\n continue;\n }\n const allowedValues = optionDefinition.values;\n let resolvedValue = trimmedValue;\n if (allowedValues.length > 0) {\n const valueLookup = new Map(allowedValues.map((value) => [value.toLowerCase(), value]));\n const canonical = valueLookup.get(trimmedValue.toLowerCase());\n if (!canonical) {\n errors.push(\n `Invalid value \"${trimmedValue}\" for type option \"${optionDefinition.key}\". Allowed: ${allowedValues.join(\", \")}`,\n );\n continue;\n }\n resolvedValue = canonical;\n }\n normalized[optionDefinition.key] = resolvedValue;\n }\n\n for (const option of typeDefinition.options) {\n if (option.required && !(option.key in normalized)) {\n errors.push(`Missing required type option \"${option.key}\" for type \"${typeDefinition.name}\"`);\n }\n }\n\n const sortedKeys = Object.keys(normalized).sort((left, right) => left.localeCompare(right));\n if (sortedKeys.length === 0) {\n return {\n normalized: undefined,\n errors,\n };\n }\n return {\n normalized: Object.fromEntries(sortedKeys.map((key) => [key, normalized[key]])),\n errors,\n };\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;AAeO,IAAM,iCAAiC;EAC5C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGK,IAAM,sCAAsC,CAAC,OAAO,WAAW,QAAQ,YAAY,QAAQ,QAAQ,KAAK;AAI/G,IAAM,6BAA6B;EACjC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF,IAAM,6BAA6B;EACjC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF,IAAM,gCAAwD;EAC5D,gBAAgB;EAChB,cAAc;EACd,qBAAqB;EACrB,mBAAmB;EACnB,UAAU;EACV,uBAAuB;EACvB,qBAAqB;EACrB,IAAI;EACJ,uBAAuB;EACvB,qBAAqB;EACrB,MAAM;EACN,WAAW;EACX,SAAS;EACT,cAAc;EACd,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;EAChB,gBAAgB;EAChB,cAAc;EACd,eAAe;EACf,aAAa;EACb,mBAAmB;EACnB,iBAAiB;EACjB,iBAAiB;EACjB,eAAe;EACf,oBAAoB;EACpB,kBAAkB;EAClB,iBAAiB;EACjB,eAAe;EACf,mBAAmB;EACnB,iBAAiB;EACjB,eAAe;EACf,aAAa;EACb,cAAc;;AAGhB,IAAM,gCAAwD;EAC5D,GAAG;;AAGL,IAAM,gCAAwD;EAC5D,GAAG;EACH,sBA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",
6
+ "names": []
7
+ }
@@ -0,0 +1,252 @@
1
+ import {
2
+ parseOptionalNumber
3
+ } from "./chunk-NGN7UV5K.js";
4
+ import {
5
+ splitCommaList
6
+ } from "./chunk-3HUE7XOF.js";
7
+ import {
8
+ EXIT_CODE,
9
+ PmCliError
10
+ } from "./chunk-LSXGH6NE.js";
11
+
12
+ // dist/cli/commands/linked-test-parsers.js
13
+ !(function() {
14
+ try {
15
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
16
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "eb90848d-38bb-5b54-86a5-70eaf5ecb5a1");
17
+ } catch (e2) {
18
+ }
19
+ })();
20
+ var LINKED_TEST_PROTECTED_ENV_KEYS = /* @__PURE__ */ new Set(["PM_PATH", "PM_GLOBAL_PATH", "FORCE_COLOR"]);
21
+ var LINKED_TEST_ENV_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
22
+ var LINKED_TEST_PM_CONTEXT_MODE_VALUES = ["schema", "tracker", "auto"];
23
+ function parseLinkedTestEnvSet(raw, optionName) {
24
+ if (!raw) {
25
+ return void 0;
26
+ }
27
+ const assignments = raw.split(/[;\n]/).map((entry) => entry.trim()).filter((entry) => entry.length > 0);
28
+ if (assignments.length === 0) {
29
+ throw new PmCliError(`${optionName} env_set must include at least one KEY=VALUE assignment`, EXIT_CODE.USAGE);
30
+ }
31
+ const envSet = {};
32
+ for (const assignment of assignments) {
33
+ const separatorIndex = assignment.indexOf("=");
34
+ if (separatorIndex <= 0) {
35
+ throw new PmCliError(`${optionName} env_set entries must use KEY=VALUE and be separated by semicolons. Example: env_set=PORT=0;PLAYWRIGHT_BASE_URL=http://127.0.0.1:4173`, EXIT_CODE.USAGE);
36
+ }
37
+ const key = assignment.slice(0, separatorIndex).trim();
38
+ const value = assignment.slice(separatorIndex + 1);
39
+ if (!LINKED_TEST_ENV_NAME_PATTERN.test(key)) {
40
+ throw new PmCliError(`${optionName} env_set key "${key}" is invalid`, EXIT_CODE.USAGE);
41
+ }
42
+ if (LINKED_TEST_PROTECTED_ENV_KEYS.has(key.toUpperCase())) {
43
+ throw new PmCliError(`${optionName} env_set key "${key}" is reserved for sandbox safety`, EXIT_CODE.USAGE);
44
+ }
45
+ envSet[key] = value;
46
+ }
47
+ return Object.keys(envSet).length > 0 ? envSet : void 0;
48
+ }
49
+ function parseLinkedTestEnvClear(raw, optionName) {
50
+ if (!raw) {
51
+ return void 0;
52
+ }
53
+ const keys = splitCommaList(raw, { separators: /[;,\n]/ });
54
+ if (keys.length === 0) {
55
+ throw new PmCliError(`${optionName} env_clear must include at least one environment variable name`, EXIT_CODE.USAGE);
56
+ }
57
+ for (const key of keys) {
58
+ if (!LINKED_TEST_ENV_NAME_PATTERN.test(key)) {
59
+ throw new PmCliError(`${optionName} env_clear key "${key}" is invalid`, EXIT_CODE.USAGE);
60
+ }
61
+ if (LINKED_TEST_PROTECTED_ENV_KEYS.has(key.toUpperCase())) {
62
+ throw new PmCliError(`${optionName} env_clear key "${key}" is reserved for sandbox safety`, EXIT_CODE.USAGE);
63
+ }
64
+ }
65
+ return keys;
66
+ }
67
+ function parseLinkedTestBoolean(raw, optionName, fieldLabel) {
68
+ if (!raw) {
69
+ return void 0;
70
+ }
71
+ const value = raw.trim().toLowerCase();
72
+ if (value === "true" || value === "1" || value === "yes") {
73
+ return true;
74
+ }
75
+ if (value === "false" || value === "0" || value === "no") {
76
+ return false;
77
+ }
78
+ throw new PmCliError(`${optionName} ${fieldLabel} must be one of true|false|1|0|yes|no`, EXIT_CODE.USAGE);
79
+ }
80
+ function parseLinkedTestContextMode(raw, optionName) {
81
+ if (!raw) {
82
+ return void 0;
83
+ }
84
+ const value = raw.trim().toLowerCase();
85
+ if (LINKED_TEST_PM_CONTEXT_MODE_VALUES.includes(value)) {
86
+ return value;
87
+ }
88
+ throw new PmCliError(`${optionName} pm_context_mode must be one of: ${LINKED_TEST_PM_CONTEXT_MODE_VALUES.join(", ")}`, EXIT_CODE.USAGE);
89
+ }
90
+ function parseLinkedTestStringList(raw) {
91
+ if (!raw) {
92
+ return void 0;
93
+ }
94
+ const values = splitCommaList(raw, { separators: /[;\n]/ });
95
+ return values.length > 0 ? values : void 0;
96
+ }
97
+ function parseLinkedTestRegexList(raw, optionName, fieldLabel) {
98
+ const values = parseLinkedTestStringList(raw);
99
+ if (!values || values.length === 0) {
100
+ return void 0;
101
+ }
102
+ for (const pattern of values) {
103
+ try {
104
+ new RegExp(pattern, "m");
105
+ } catch (error) {
106
+ throw new PmCliError(
107
+ /* c8 ignore next -- RegExp only throws SyntaxError (an Error); String(error) fallback is defensive. */
108
+ `${optionName} ${fieldLabel} includes invalid regex "${pattern}": ${error instanceof Error ? error.message : String(error)}`,
109
+ EXIT_CODE.USAGE
110
+ );
111
+ }
112
+ }
113
+ return values;
114
+ }
115
+ function parseLinkedTestMinLines(raw, optionName) {
116
+ if (!raw) {
117
+ return void 0;
118
+ }
119
+ const parsed = parseOptionalNumber(raw, "assert_stdout_min_lines");
120
+ if (!Number.isInteger(parsed) || parsed < 0) {
121
+ throw new PmCliError(`${optionName} assert_stdout_min_lines must be an integer >= 0`, EXIT_CODE.USAGE);
122
+ }
123
+ return parsed;
124
+ }
125
+ function parseLinkedTestAssertionEqualsMap(raw, optionName) {
126
+ if (!raw) {
127
+ return void 0;
128
+ }
129
+ const assignments = raw.split(/[;\n]/).map((entry) => entry.trim()).filter((entry) => entry.length > 0);
130
+ if (assignments.length === 0) {
131
+ throw new PmCliError(`${optionName} assert_json_field_equals must include at least one path=value assignment`, EXIT_CODE.USAGE);
132
+ }
133
+ const values = {};
134
+ for (const assignment of assignments) {
135
+ const separatorIndex = assignment.indexOf("=");
136
+ if (separatorIndex <= 0) {
137
+ throw new PmCliError(`${optionName} assert_json_field_equals entries must use path=value and be separated by semicolons`, EXIT_CODE.USAGE);
138
+ }
139
+ const key = assignment.slice(0, separatorIndex).trim();
140
+ const value = assignment.slice(separatorIndex + 1).trim();
141
+ if (key.length === 0 || value.length === 0) {
142
+ throw new PmCliError(`${optionName} assert_json_field_equals entries must include non-empty path and value`, EXIT_CODE.USAGE);
143
+ }
144
+ values[key] = value;
145
+ }
146
+ return Object.keys(values).length > 0 ? values : void 0;
147
+ }
148
+ function parseLinkedTestAssertionGteMap(raw, optionName) {
149
+ if (!raw) {
150
+ return void 0;
151
+ }
152
+ const assignments = raw.split(/[;\n]/).map((entry) => entry.trim()).filter((entry) => entry.length > 0);
153
+ if (assignments.length === 0) {
154
+ throw new PmCliError(`${optionName} assert_json_field_gte must include at least one path=value assignment`, EXIT_CODE.USAGE);
155
+ }
156
+ const values = {};
157
+ for (const assignment of assignments) {
158
+ const separatorIndex = assignment.indexOf("=");
159
+ if (separatorIndex <= 0) {
160
+ throw new PmCliError(`${optionName} assert_json_field_gte entries must use path=value and be separated by semicolons`, EXIT_CODE.USAGE);
161
+ }
162
+ const key = assignment.slice(0, separatorIndex).trim();
163
+ const valueRaw = assignment.slice(separatorIndex + 1).trim();
164
+ if (key.length === 0 || valueRaw.length === 0) {
165
+ throw new PmCliError(`${optionName} assert_json_field_gte entries must include non-empty path and value`, EXIT_CODE.USAGE);
166
+ }
167
+ const value = Number.parseFloat(valueRaw);
168
+ if (!Number.isFinite(value)) {
169
+ throw new PmCliError(`${optionName} assert_json_field_gte value for "${key}" must be numeric`, EXIT_CODE.USAGE);
170
+ }
171
+ values[key] = value;
172
+ }
173
+ return Object.keys(values).length > 0 ? values : void 0;
174
+ }
175
+
176
+ // dist/cli/commands/linked-test-entry.js
177
+ !(function() {
178
+ try {
179
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
180
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "7baeda8a-886b-5069-b350-940c224dbf94");
181
+ } catch (e2) {
182
+ }
183
+ })();
184
+ var STRUCTURED_LINKED_TEST_KEYS = [
185
+ "command",
186
+ "cmd",
187
+ "path",
188
+ "scope",
189
+ "timeout",
190
+ "timeout_seconds",
191
+ "pm_context_mode",
192
+ "env_set",
193
+ "env_clear",
194
+ "shared_host_safe",
195
+ "assert_stdout_contains",
196
+ "assert_stdout_regex",
197
+ "assert_stderr_contains",
198
+ "assert_stderr_regex",
199
+ "assert_stdout_min_lines",
200
+ "assert_json_field_equals",
201
+ "assert_json_field_gte",
202
+ "note"
203
+ ];
204
+ var STRUCTURED_LINKED_TEST_KEY_SET = new Set(STRUCTURED_LINKED_TEST_KEYS);
205
+ var STRUCTURED_LINKED_TEST_KEY_PATTERN = STRUCTURED_LINKED_TEST_KEYS.map((key) => key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|");
206
+ var STRUCTURED_LINKED_TEST_ENTRY_PATTERN = new RegExp(`^(?:[-*+]\\s+)?(?:${STRUCTURED_LINKED_TEST_KEY_PATTERN})\\s*[:=]`, "i");
207
+ function looksLikeStructuredLinkedTestEntry(raw) {
208
+ if (raw.startsWith("```") || raw.includes("\n")) {
209
+ return true;
210
+ }
211
+ return STRUCTURED_LINKED_TEST_ENTRY_PATTERN.test(raw);
212
+ }
213
+ function normalizeStructuredLinkedTestEntry(kv, optionName) {
214
+ const normalizedKv = {};
215
+ const unknownKeys = [];
216
+ for (const [key, value] of Object.entries(kv)) {
217
+ const normalizedKey = key.toLowerCase();
218
+ if (!STRUCTURED_LINKED_TEST_KEY_SET.has(normalizedKey)) {
219
+ unknownKeys.push(key);
220
+ continue;
221
+ }
222
+ normalizedKv[normalizedKey] = value;
223
+ }
224
+ if (unknownKeys.length > 0) {
225
+ throw new PmCliError(`${optionName} does not recognize key${unknownKeys.length > 1 ? "s" : ""} ${unknownKeys.map((key) => `"${key}"`).join(", ")}. Allowed keys: ${STRUCTURED_LINKED_TEST_KEYS.join(", ")}.`, EXIT_CODE.USAGE);
226
+ }
227
+ if (normalizedKv.cmd !== void 0) {
228
+ if (normalizedKv.command !== void 0 && normalizedKv.command.trim() !== normalizedKv.cmd.trim()) {
229
+ throw new PmCliError(`${optionName} command and cmd must match when both are provided`, EXIT_CODE.USAGE);
230
+ }
231
+ const { cmd, ...rest } = normalizedKv;
232
+ return { ...rest, command: rest.command ?? cmd };
233
+ }
234
+ return normalizedKv;
235
+ }
236
+
237
+ export {
238
+ LINKED_TEST_PROTECTED_ENV_KEYS,
239
+ LINKED_TEST_PM_CONTEXT_MODE_VALUES,
240
+ parseLinkedTestEnvSet,
241
+ parseLinkedTestEnvClear,
242
+ parseLinkedTestBoolean,
243
+ parseLinkedTestContextMode,
244
+ parseLinkedTestStringList,
245
+ parseLinkedTestRegexList,
246
+ parseLinkedTestMinLines,
247
+ parseLinkedTestAssertionEqualsMap,
248
+ parseLinkedTestAssertionGteMap,
249
+ looksLikeStructuredLinkedTestEntry,
250
+ normalizeStructuredLinkedTestEntry
251
+ };
252
+ //# sourceMappingURL=chunk-WJ2NAC37.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../cli/commands/linked-test-parsers.ts", "../../../../../../../../cli/commands/linked-test-entry.ts"],
4
+ "sourcesContent": ["import { parseOptionalNumber } from \"../../core/item/parse.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { splitCommaList } from \"../../core/shared/split-comma-list.js\";\nimport type { LinkedTest } from \"../../types/index.js\";\n\n/**\n * Shared linked-test field parsers used by the `create` and `test` commands.\n *\n * Extracted verbatim from create.ts and test.ts (pm-why9). The two copies were\n * byte-identical apart from their empty-input guard: create called these with\n * raw (untrimmed) values and used `if (!normalized)`; test called them with\n * pre-`.trim()`-ed values and used `if (!raw || raw.trim().length === 0)`.\n *\n * Both reduce to the same observable behaviour when the guard is the plain\n * falsy check used here: create's call sites still pass untrimmed values\n * (behaviour preserved exactly), and test's call sites pre-trim so a\n * whitespace-only value collapses to \"\" and is rejected by `!raw` exactly as\n * before. Error strings and parsing semantics are identical to both originals.\n */\n\nexport const LINKED_TEST_PROTECTED_ENV_KEYS = new Set([\"PM_PATH\", \"PM_GLOBAL_PATH\", \"FORCE_COLOR\"]);\nexport const LINKED_TEST_ENV_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\nexport const LINKED_TEST_PM_CONTEXT_MODE_VALUES = [\"schema\", \"tracker\", \"auto\"] as const;\nexport type LinkedTestPmContextMode = (typeof LINKED_TEST_PM_CONTEXT_MODE_VALUES)[number];\n\nexport function parseLinkedTestEnvSet(raw: string | undefined, optionName: string): Record<string, string> | undefined {\n if (!raw) {\n return undefined;\n }\n const assignments = raw\n .split(/[;\\n]/)\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (assignments.length === 0) {\n throw new PmCliError(`${optionName} env_set must include at least one KEY=VALUE assignment`, EXIT_CODE.USAGE);\n }\n const envSet: Record<string, string> = {};\n for (const assignment of assignments) {\n const separatorIndex = assignment.indexOf(\"=\");\n if (separatorIndex <= 0) {\n throw new PmCliError(\n `${optionName} env_set entries must use KEY=VALUE and be separated by semicolons. Example: env_set=PORT=0;PLAYWRIGHT_BASE_URL=http://127.0.0.1:4173`,\n EXIT_CODE.USAGE,\n );\n }\n const key = assignment.slice(0, separatorIndex).trim();\n const value = assignment.slice(separatorIndex + 1);\n if (!LINKED_TEST_ENV_NAME_PATTERN.test(key)) {\n throw new PmCliError(`${optionName} env_set key \"${key}\" is invalid`, EXIT_CODE.USAGE);\n }\n if (LINKED_TEST_PROTECTED_ENV_KEYS.has(key.toUpperCase())) {\n throw new PmCliError(`${optionName} env_set key \"${key}\" is reserved for sandbox safety`, EXIT_CODE.USAGE);\n }\n envSet[key] = value;\n }\n /* c8 ignore start -- envSet always has >=1 key here (assignments is non-empty and each adds one); the undefined branch is defensive. */\n return Object.keys(envSet).length > 0 ? envSet : undefined;\n /* c8 ignore stop */\n}\n\nexport function parseLinkedTestEnvClear(raw: string | undefined, optionName: string): string[] | undefined {\n if (!raw) {\n return undefined;\n }\n const keys = splitCommaList(raw, { separators: /[;,\\n]/ });\n if (keys.length === 0) {\n throw new PmCliError(`${optionName} env_clear must include at least one environment variable name`, EXIT_CODE.USAGE);\n }\n for (const key of keys) {\n if (!LINKED_TEST_ENV_NAME_PATTERN.test(key)) {\n throw new PmCliError(`${optionName} env_clear key \"${key}\" is invalid`, EXIT_CODE.USAGE);\n }\n if (LINKED_TEST_PROTECTED_ENV_KEYS.has(key.toUpperCase())) {\n throw new PmCliError(`${optionName} env_clear key \"${key}\" is reserved for sandbox safety`, EXIT_CODE.USAGE);\n }\n }\n return keys;\n}\n\nexport function parseLinkedTestBoolean(raw: string | undefined, optionName: string, fieldLabel: string): boolean | undefined {\n if (!raw) {\n return undefined;\n }\n const value = raw.trim().toLowerCase();\n if (value === \"true\" || value === \"1\" || value === \"yes\") {\n return true;\n }\n if (value === \"false\" || value === \"0\" || value === \"no\") {\n return false;\n }\n throw new PmCliError(`${optionName} ${fieldLabel} must be one of true|false|1|0|yes|no`, EXIT_CODE.USAGE);\n}\n\nexport function parseLinkedTestContextMode(\n raw: string | undefined,\n optionName: string,\n): LinkedTest[\"pm_context_mode\"] | undefined {\n if (!raw) {\n return undefined;\n }\n const value = raw.trim().toLowerCase();\n if ((LINKED_TEST_PM_CONTEXT_MODE_VALUES as readonly string[]).includes(value)) {\n return value as LinkedTest[\"pm_context_mode\"];\n }\n throw new PmCliError(\n `${optionName} pm_context_mode must be one of: ${LINKED_TEST_PM_CONTEXT_MODE_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n}\n\nexport function parseLinkedTestStringList(raw: string | undefined): string[] | undefined {\n if (!raw) {\n return undefined;\n }\n const values = splitCommaList(raw, { separators: /[;\\n]/ });\n return values.length > 0 ? values : undefined;\n}\n\nexport function parseLinkedTestRegexList(raw: string | undefined, optionName: string, fieldLabel: string): string[] | undefined {\n const values = parseLinkedTestStringList(raw);\n if (!values || values.length === 0) {\n return undefined;\n }\n for (const pattern of values) {\n try {\n // Validate regex syntax early so malformed assertions fail at parse time.\n // User-provided, per-item patterns only run during local CLI validation.\n new RegExp(pattern, \"m\");\n } catch (error: unknown) {\n throw new PmCliError(\n /* c8 ignore next -- RegExp only throws SyntaxError (an Error); String(error) fallback is defensive. */\n `${optionName} ${fieldLabel} includes invalid regex \"${pattern}\": ${error instanceof Error ? error.message : String(error)}`,\n EXIT_CODE.USAGE,\n );\n }\n }\n return values;\n}\n\nexport function parseLinkedTestMinLines(raw: string | undefined, optionName: string): number | undefined {\n if (!raw) {\n return undefined;\n }\n const parsed = parseOptionalNumber(raw, \"assert_stdout_min_lines\");\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new PmCliError(`${optionName} assert_stdout_min_lines must be an integer >= 0`, EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\nexport function parseLinkedTestAssertionEqualsMap(raw: string | undefined, optionName: string): Record<string, string> | undefined {\n if (!raw) {\n return undefined;\n }\n const assignments = raw\n .split(/[;\\n]/)\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (assignments.length === 0) {\n throw new PmCliError(`${optionName} assert_json_field_equals must include at least one path=value assignment`, EXIT_CODE.USAGE);\n }\n const values: Record<string, string> = {};\n for (const assignment of assignments) {\n const separatorIndex = assignment.indexOf(\"=\");\n if (separatorIndex <= 0) {\n throw new PmCliError(\n `${optionName} assert_json_field_equals entries must use path=value and be separated by semicolons`,\n EXIT_CODE.USAGE,\n );\n }\n const key = assignment.slice(0, separatorIndex).trim();\n const value = assignment.slice(separatorIndex + 1).trim();\n if (key.length === 0 || value.length === 0) {\n throw new PmCliError(`${optionName} assert_json_field_equals entries must include non-empty path and value`, EXIT_CODE.USAGE);\n }\n values[key] = value;\n }\n /* c8 ignore start -- values always has >=1 key here (assignments is non-empty and each adds one); the undefined branch is defensive. */\n return Object.keys(values).length > 0 ? values : undefined;\n /* c8 ignore stop */\n}\n\nexport function parseLinkedTestAssertionGteMap(raw: string | undefined, optionName: string): Record<string, number> | undefined {\n if (!raw) {\n return undefined;\n }\n const assignments = raw\n .split(/[;\\n]/)\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (assignments.length === 0) {\n throw new PmCliError(`${optionName} assert_json_field_gte must include at least one path=value assignment`, EXIT_CODE.USAGE);\n }\n const values: Record<string, number> = {};\n for (const assignment of assignments) {\n const separatorIndex = assignment.indexOf(\"=\");\n if (separatorIndex <= 0) {\n throw new PmCliError(\n `${optionName} assert_json_field_gte entries must use path=value and be separated by semicolons`,\n EXIT_CODE.USAGE,\n );\n }\n const key = assignment.slice(0, separatorIndex).trim();\n const valueRaw = assignment.slice(separatorIndex + 1).trim();\n if (key.length === 0 || valueRaw.length === 0) {\n throw new PmCliError(`${optionName} assert_json_field_gte entries must include non-empty path and value`, EXIT_CODE.USAGE);\n }\n const value = Number.parseFloat(valueRaw);\n if (!Number.isFinite(value)) {\n throw new PmCliError(`${optionName} assert_json_field_gte value for \"${key}\" must be numeric`, EXIT_CODE.USAGE);\n }\n values[key] = value;\n }\n /* c8 ignore start -- values always has >=1 key here (assignments is non-empty and each adds one); the undefined branch is defensive. */\n return Object.keys(values).length > 0 ? values : undefined;\n /* c8 ignore stop */\n}\n", "import { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\n\n// Keys accepted inside a structured linked-test entry. `cmd` is an alias for\n// `command`; everything else maps 1:1 to a LinkedTest field.\nexport const STRUCTURED_LINKED_TEST_KEYS = [\n \"command\",\n \"cmd\",\n \"path\",\n \"scope\",\n \"timeout\",\n \"timeout_seconds\",\n \"pm_context_mode\",\n \"env_set\",\n \"env_clear\",\n \"shared_host_safe\",\n \"assert_stdout_contains\",\n \"assert_stdout_regex\",\n \"assert_stderr_contains\",\n \"assert_stderr_regex\",\n \"assert_stdout_min_lines\",\n \"assert_json_field_equals\",\n \"assert_json_field_gte\",\n \"note\",\n] as const;\n\nconst STRUCTURED_LINKED_TEST_KEY_SET = new Set<string>(STRUCTURED_LINKED_TEST_KEYS);\nconst STRUCTURED_LINKED_TEST_KEY_PATTERN = STRUCTURED_LINKED_TEST_KEYS.map((key) =>\n key.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"),\n).join(\"|\");\nconst STRUCTURED_LINKED_TEST_ENTRY_PATTERN = new RegExp(\n `^(?:[-*+]\\\\s+)?(?:${STRUCTURED_LINKED_TEST_KEY_PATTERN})\\\\s*[:=]`,\n \"i\",\n);\n\nexport function looksLikeStructuredLinkedTestEntry(raw: string): boolean {\n if (raw.startsWith(\"```\") || raw.includes(\"\\n\")) {\n return true;\n }\n return STRUCTURED_LINKED_TEST_ENTRY_PATTERN.test(raw);\n}\n\nexport function normalizeStructuredLinkedTestEntry(\n kv: Record<string, string>,\n optionName: \"--add\" | \"--test\",\n): Record<string, string> {\n const normalizedKv: Record<string, string> = {};\n const unknownKeys: string[] = [];\n for (const [key, value] of Object.entries(kv)) {\n const normalizedKey = key.toLowerCase();\n if (!STRUCTURED_LINKED_TEST_KEY_SET.has(normalizedKey)) {\n unknownKeys.push(key);\n continue;\n }\n normalizedKv[normalizedKey] = value;\n }\n if (unknownKeys.length > 0) {\n throw new PmCliError(\n `${optionName} does not recognize key${unknownKeys.length > 1 ? \"s\" : \"\"} ${unknownKeys\n .map((key) => `\"${key}\"`)\n .join(\", \")}. Allowed keys: ${STRUCTURED_LINKED_TEST_KEYS.join(\", \")}.`,\n EXIT_CODE.USAGE,\n );\n }\n if (normalizedKv.cmd !== undefined) {\n if (normalizedKv.command !== undefined && normalizedKv.command.trim() !== normalizedKv.cmd.trim()) {\n throw new PmCliError(`${optionName} command and cmd must match when both are provided`, EXIT_CODE.USAGE);\n }\n const { cmd, ...rest } = normalizedKv;\n return { ...rest, command: rest.command ?? cmd };\n }\n return normalizedKv;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,133 @@
1
+ import {
2
+ wrapOwnershipConflict
3
+ } from "./chunk-A7E7PUVX.js";
4
+ import {
5
+ resolveAuthor
6
+ } from "./chunk-O7IWB35H.js";
7
+ import "./chunk-NGN7UV5K.js";
8
+ import "./chunk-SEXQN4KL.js";
9
+ import {
10
+ mutateItem,
11
+ toItemRecord
12
+ } from "./chunk-BUPWJ3IJ.js";
13
+ import "./chunk-4AEZR5EJ.js";
14
+ import "./chunk-CEFIVZPG.js";
15
+ import "./chunk-MD7K4JYF.js";
16
+ import "./chunk-WDPXDQFG.js";
17
+ import "./chunk-PVNQLCIS.js";
18
+ import {
19
+ EXIT_CODE,
20
+ PmCliError,
21
+ getSettingsPath,
22
+ pathExists,
23
+ readSettings,
24
+ resolvePmRoot,
25
+ resolveRuntimeStatusRegistry,
26
+ statusIsTerminal
27
+ } from "./chunk-LSXGH6NE.js";
28
+
29
+ // dist/cli/commands/claim.js
30
+ !(function() {
31
+ try {
32
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
33
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "c54bf8e8-7777-5980-8f16-e6df0c5bb53f");
34
+ } catch (e2) {
35
+ }
36
+ })();
37
+ async function runClaim(id, force, global2, options = {}) {
38
+ const pmRoot = resolvePmRoot(process.cwd(), global2.path);
39
+ if (!await pathExists(getSettingsPath(pmRoot))) {
40
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
41
+ }
42
+ const settings = await readSettings(pmRoot);
43
+ const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
44
+ const author = resolveAuthor(options.author, settings.author_default);
45
+ let previousAssignee = null;
46
+ let skipped = false;
47
+ const mutationWarnings = [];
48
+ const result = await mutateItem({
49
+ pmRoot,
50
+ settings,
51
+ id,
52
+ op: "claim",
53
+ author,
54
+ message: options.message,
55
+ force,
56
+ mutate(document) {
57
+ previousAssignee = document.metadata.assignee ?? null;
58
+ if (statusIsTerminal(document.metadata.status, statusRegistry) && !force) {
59
+ throw new PmCliError(`Cannot claim terminal item ${document.metadata.id} without --force`, EXIT_CODE.CONFLICT);
60
+ }
61
+ const heldByOther = previousAssignee !== null && previousAssignee !== author;
62
+ if (heldByOther && options.ifAvailable === true) {
63
+ skipped = true;
64
+ mutationWarnings.push(`claim_skipped_held_by:${previousAssignee}`);
65
+ return { changedFields: [] };
66
+ }
67
+ if (heldByOther) {
68
+ mutationWarnings.push(`claim_takeover:${previousAssignee}->${author}`);
69
+ }
70
+ document.metadata.assignee = author;
71
+ return { changedFields: ["assignee"], warnings: mutationWarnings };
72
+ }
73
+ });
74
+ return {
75
+ item: toItemRecord(result.item),
76
+ claimed_by: skipped && previousAssignee !== null ? previousAssignee : author,
77
+ previous_assignee: previousAssignee,
78
+ forced: force,
79
+ ...skipped ? { skipped: true } : {},
80
+ ...mutationWarnings.length > 0 ? { warnings: mutationWarnings } : {}
81
+ };
82
+ }
83
+ async function runRelease(id, force, global2, options = {}) {
84
+ const pmRoot = resolvePmRoot(process.cwd(), global2.path);
85
+ if (!await pathExists(getSettingsPath(pmRoot))) {
86
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
87
+ }
88
+ const settings = await readSettings(pmRoot);
89
+ const author = resolveAuthor(options.author, settings.author_default);
90
+ let previousAssignee = null;
91
+ let result;
92
+ try {
93
+ result = await mutateItem({
94
+ pmRoot,
95
+ settings,
96
+ id,
97
+ op: "release",
98
+ author,
99
+ message: options.message,
100
+ force,
101
+ bypassAssigneeConflict: Boolean(options.allowAuditRelease),
102
+ mutate(document) {
103
+ previousAssignee = document.metadata.assignee ?? null;
104
+ if (!previousAssignee) {
105
+ return { changedFields: [] };
106
+ }
107
+ delete document.metadata.assignee;
108
+ return { changedFields: ["assignee"] };
109
+ }
110
+ });
111
+ } catch (error) {
112
+ wrapOwnershipConflict(error, {
113
+ required: "For audited non-owner handoffs, prefer --allow-audit-release before considering --force.",
114
+ examples: ['pm release pm-a1b2 --author "reviewer" --allow-audit-release'],
115
+ nextSteps: [
116
+ "Use --allow-audit-release for append-only release handoffs that only clear assignee metadata.",
117
+ "Use --force only when an explicit override is approved for broader ownership conflicts."
118
+ ]
119
+ });
120
+ }
121
+ return {
122
+ item: toItemRecord(result.item),
123
+ released_by: author,
124
+ previous_assignee: previousAssignee,
125
+ audit_release: options.allowAuditRelease === true,
126
+ forced: force
127
+ };
128
+ }
129
+ export {
130
+ runClaim,
131
+ runRelease
132
+ };
133
+ //# sourceMappingURL=claim-EE4TKKCV.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../cli/commands/claim.ts"],
4
+ "sourcesContent": ["import { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { resolveRuntimeStatusRegistry, statusIsTerminal } from \"../../core/schema/runtime-schema.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 { toItemRecord } from \"../../core/item/item-record.js\";\nimport { mutateItem } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { resolveAuthor } from \"../../core/shared/author.js\";\nimport { wrapOwnershipConflict } from \"./annotation-command.js\";\n\nexport interface ClaimResult {\n item: Record<string, unknown>;\n claimed_by: string;\n previous_assignee: string | null;\n forced: boolean;\n skipped?: boolean;\n warnings?: string[];\n}\n\nexport interface ReleaseResult {\n item: Record<string, unknown>;\n released_by: string;\n previous_assignee: string | null;\n audit_release: boolean;\n forced: boolean;\n}\n\nexport interface ClaimMutationOptions {\n author?: string;\n message?: string;\n ifAvailable?: boolean;\n}\n\nexport interface ReleaseMutationOptions extends ClaimMutationOptions {\n allowAuditRelease?: boolean;\n}\n\nexport async function runClaim(\n id: string,\n force: boolean,\n global: GlobalOptions,\n options: ClaimMutationOptions = {},\n): Promise<ClaimResult> {\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 statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const author = resolveAuthor(options.author, settings.author_default);\n let previousAssignee: string | null = null;\n let skipped = false;\n const mutationWarnings: string[] = [];\n\n const result = await mutateItem({\n pmRoot,\n settings,\n id,\n op: \"claim\",\n author,\n message: options.message,\n force,\n mutate(document) {\n previousAssignee = document.metadata.assignee ?? null;\n if (statusIsTerminal(document.metadata.status, statusRegistry) && !force) {\n throw new PmCliError(`Cannot claim terminal item ${document.metadata.id} without --force`, EXIT_CODE.CONFLICT);\n }\n const heldByOther = previousAssignee !== null && previousAssignee !== author;\n if (heldByOther && options.ifAvailable === true) {\n skipped = true;\n mutationWarnings.push(`claim_skipped_held_by:${previousAssignee}`);\n return { changedFields: [] };\n }\n if (heldByOther) {\n mutationWarnings.push(`claim_takeover:${previousAssignee}->${author}`);\n }\n document.metadata.assignee = author;\n return { changedFields: [\"assignee\"], warnings: mutationWarnings };\n },\n });\n\n return {\n item: toItemRecord(result.item),\n claimed_by: skipped && previousAssignee !== null ? previousAssignee : author,\n previous_assignee: previousAssignee,\n forced: force,\n ...(skipped ? { skipped: true } : {}),\n ...(mutationWarnings.length > 0 ? { warnings: mutationWarnings } : {}),\n };\n}\n\nexport async function runRelease(\n id: string,\n force: boolean,\n global: GlobalOptions,\n options: ReleaseMutationOptions = {},\n): Promise<ReleaseResult> {\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 author = resolveAuthor(options.author, settings.author_default);\n let previousAssignee: string | null = null;\n\n let result: Awaited<ReturnType<typeof mutateItem>>;\n try {\n result = await mutateItem({\n pmRoot,\n settings,\n id,\n op: \"release\",\n author,\n message: options.message,\n force,\n bypassAssigneeConflict: Boolean(options.allowAuditRelease),\n mutate(document) {\n previousAssignee = document.metadata.assignee ?? null;\n if (!previousAssignee) {\n return { changedFields: [] };\n }\n delete document.metadata.assignee;\n return { changedFields: [\"assignee\"] };\n },\n });\n } catch (error: unknown) {\n wrapOwnershipConflict(error, {\n required: \"For audited non-owner handoffs, prefer --allow-audit-release before considering --force.\",\n examples: ['pm release pm-a1b2 --author \"reviewer\" --allow-audit-release'],\n nextSteps: [\n \"Use --allow-audit-release for append-only release handoffs that only clear assignee metadata.\",\n \"Use --force only when an explicit override is approved for broader ownership conflicts.\",\n ],\n });\n }\n\n return {\n item: toItemRecord(result.item),\n released_by: author,\n previous_assignee: previousAssignee,\n audit_release: options.allowAuditRelease === true,\n forced: force,\n };\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,eAAsB,SACpB,IACA,OACAA,SACA,UAAgC,CAAA,GAAE;AAElC,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAIA,QAAO,IAAI;AACvD,MAAI,CAAE,MAAM,WAAW,gBAAgB,MAAM,CAAC,GAAI;AAChD,UAAM,IAAI,WAAW,iCAAiC,MAAM,wBAAwB,UAAU,SAAS;EACzG;AACA,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,QAAM,iBAAiB,6BAA6B,SAAS,MAAM;AACnE,QAAM,SAAS,cAAc,QAAQ,QAAQ,SAAS,cAAc;AACpE,MAAI,mBAAkC;AACtC,MAAI,UAAU;AACd,QAAM,mBAA6B,CAAA;AAEnC,QAAM,SAAS,MAAM,WAAW;IAC9B;IACA;IACA;IACA,IAAI;IACJ;IACA,SAAS,QAAQ;IACjB;IACA,OAAO,UAAQ;AACb,yBAAmB,SAAS,SAAS,YAAY;AACjD,UAAI,iBAAiB,SAAS,SAAS,QAAQ,cAAc,KAAK,CAAC,OAAO;AACxE,cAAM,IAAI,WAAW,8BAA8B,SAAS,SAAS,EAAE,oBAAoB,UAAU,QAAQ;MAC/G;AACA,YAAM,cAAc,qBAAqB,QAAQ,qBAAqB;AACtE,UAAI,eAAe,QAAQ,gBAAgB,MAAM;AAC/C,kBAAU;AACV,yBAAiB,KAAK,yBAAyB,gBAAgB,EAAE;AACjE,eAAO,EAAE,eAAe,CAAA,EAAE;MAC5B;AACA,UAAI,aAAa;AACf,yBAAiB,KAAK,kBAAkB,gBAAgB,KAAK,MAAM,EAAE;MACvE;AACA,eAAS,SAAS,WAAW;AAC7B,aAAO,EAAE,eAAe,CAAC,UAAU,GAAG,UAAU,iBAAgB;IAClE;GACD;AAED,SAAO;IACL,MAAM,aAAa,OAAO,IAAI;IAC9B,YAAY,WAAW,qBAAqB,OAAO,mBAAmB;IACtE,mBAAmB;IACnB,QAAQ;IACR,GAAI,UAAU,EAAE,SAAS,KAAI,IAAK,CAAA;IAClC,GAAI,iBAAiB,SAAS,IAAI,EAAE,UAAU,iBAAgB,IAAK,CAAA;;AAEvE;AAEA,eAAsB,WACpB,IACA,OACAA,SACA,UAAkC,CAAA,GAAE;AAEpC,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAIA,QAAO,IAAI;AACvD,MAAI,CAAE,MAAM,WAAW,gBAAgB,MAAM,CAAC,GAAI;AAChD,UAAM,IAAI,WAAW,iCAAiC,MAAM,wBAAwB,UAAU,SAAS;EACzG;AACA,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,QAAM,SAAS,cAAc,QAAQ,QAAQ,SAAS,cAAc;AACpE,MAAI,mBAAkC;AAEtC,MAAI;AACJ,MAAI;AACF,aAAS,MAAM,WAAW;MACxB;MACA;MACA;MACA,IAAI;MACJ;MACA,SAAS,QAAQ;MACjB;MACA,wBAAwB,QAAQ,QAAQ,iBAAiB;MACzD,OAAO,UAAQ;AACb,2BAAmB,SAAS,SAAS,YAAY;AACjD,YAAI,CAAC,kBAAkB;AACrB,iBAAO,EAAE,eAAe,CAAA,EAAE;QAC5B;AACA,eAAO,SAAS,SAAS;AACzB,eAAO,EAAE,eAAe,CAAC,UAAU,EAAC;MACtC;KACD;EACH,SAAS,OAAgB;AACvB,0BAAsB,OAAO;MAC3B,UAAU;MACV,UAAU,CAAC,8DAA8D;MACzE,WAAW;QACT;QACA;;KAEH;EACH;AAEA,SAAO;IACL,MAAM,aAAa,OAAO,IAAI;IAC9B,aAAa;IACb,mBAAmB;IACnB,eAAe,QAAQ,sBAAsB;IAC7C,QAAQ;;AAEZ;",
6
+ "names": ["global"]
7
+ }
@@ -0,0 +1,14 @@
1
+ import {
2
+ runClose
3
+ } from "./chunk-G57E5D7T.js";
4
+ import "./chunk-BUPWJ3IJ.js";
5
+ import "./chunk-4AEZR5EJ.js";
6
+ import "./chunk-CEFIVZPG.js";
7
+ import "./chunk-MD7K4JYF.js";
8
+ import "./chunk-WDPXDQFG.js";
9
+ import "./chunk-PVNQLCIS.js";
10
+ import "./chunk-LSXGH6NE.js";
11
+ export {
12
+ runClose
13
+ };
14
+ //# sourceMappingURL=close-XY4CSAYF.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }